Make COPY format extendable: Extract COPY TO format implementations

Started by Sutou Kouheiabout 2 years ago334 messages
#1Sutou Kouhei
kou@clear-code.com
1 attachment(s)

Hi,

I want to work on making COPY format extendable. I attach
the first patch for it. I'll send more patches after this is
merged.

Background:

Currently, COPY TO/FROM supports only "text", "csv" and
"binary" formats. There are some requests to support more
COPY formats. For example:

* 2023-11: JSON and JSON lines [1]/messages/by-id/24e3ee88-ec1e-421b-89ae-8a47ee0d2df1@joeconway.com
* 2022-04: Apache Arrow [2]/messages/by-id/CAGrfaBVyfm0wPzXVqm0=h5uArYh9N_ij+sVpUtDHqkB=VyB3jw@mail.gmail.com
* 2018-02: Apache Avro, Apache Parquet and Apache ORC [3]/messages/by-id/20180210151304.fonjztsynewldfba@gmail.com

(FYI: I want to add support for Apache Arrow.)

There were discussions how to add support for more formats. [3]/messages/by-id/20180210151304.fonjztsynewldfba@gmail.com[4]/messages/by-id/3741749.1655952719@sss.pgh.pa.us
In these discussions, we got a consensus about making COPY
format extendable.

But it seems that nobody works on this yet. So I want to
work on this. (If there is anyone who wants to work on this
together, I'm happy.)

Summary:

The attached patch introduces CopyToFormatOps struct that is
similar to TupleTableSlotOps for TupleTableSlot but
CopyToFormatOps is for COPY TO format. CopyToFormatOps has
routines to implement a COPY TO format.

The attached patch doesn't change:

* the current behavior (all existing tests are still passed
without changing them)
* the existing "text", "csv" and "binary" format output
implementations including local variable names (the
attached patch just move them and adjust indent)
* performance (no significant loss of performance)

In other words, this is just a refactoring for further
changes to make COPY format extendable. If I use "complete
the task and then request reviews for it" approach, it will
be difficult to review because changes for it will be
large. So I want to work on this step by step. Is it
acceptable?

TODOs that should be done in subsequent patches:

* Add some CopyToState readers such as CopyToStateGetDest(),
CopyToStateGetAttnums() and CopyToStateGetOpts()
(We will need to consider which APIs should be exported.)
(This is for implemeing COPY TO format by extension.)
* Export CopySend*() in src/backend/commands/copyto.c
(This is for implemeing COPY TO format by extension.)
* Add API to register a new COPY TO format implementation
* Add "CREATE XXX" to register a new COPY TO format (or COPY
TO/FROM format) implementation
("CREATE COPY HANDLER" was suggested in [5]/messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de.)
* Same for COPY FROM

Performance:

We got a consensus about making COPY format extendable but
we should care about performance. [6]/messages/by-id/3741749.1655952719@sss.pgh.pa.us

I think that step 1 ought to be to convert the existing
formats into plug-ins, and demonstrate that there's no
significant loss of performance.

So I measured COPY TO time with/without this change. You can
see there is no significant loss of performance.

Data: Random 32 bit integers:

CREATE TABLE data (int32 integer);
INSERT INTO data
SELECT random() * 10000
FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

format,elapsed time (ms)
text,22.527
csv,23.822
binary,24.806

100K with this change:

format,elapsed time (ms)
text,22.919
csv,24.643
binary,24.705

1M without this change:

format,elapsed time (ms)
text,223.457
csv,233.583
binary,242.687

1M with this change:

format,elapsed time (ms)
text,224.591
csv,233.964
binary,247.164

10M without this change:

format,elapsed time (ms)
text,2330.383
csv,2411.394
binary,2590.817

10M with this change:

format,elapsed time (ms)
text,2231.307
csv,2408.067
binary,2473.617

[1]: /messages/by-id/24e3ee88-ec1e-421b-89ae-8a47ee0d2df1@joeconway.com
[2]: /messages/by-id/CAGrfaBVyfm0wPzXVqm0=h5uArYh9N_ij+sVpUtDHqkB=VyB3jw@mail.gmail.com
[3]: /messages/by-id/20180210151304.fonjztsynewldfba@gmail.com
[4]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us
[5]: /messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de
[6]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us

Thanks,
--
kou

Attachments:

v1-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 7f00b2b0fb878ae1c687c151dd751512d02ed83e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Dec 2023 12:32:54 +0900
Subject: [PATCH v1] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToFormatOps, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToFormatOps can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,22.527
    csv,23.822
    binary,24.806

100K with this change:

    format,elapsed time (ms)
    text,22.919
    csv,24.643
    binary,24.705

1M without this change:

    format,elapsed time (ms)
    text,223.457
    csv,233.583
    binary,242.687

1M with this change:

    format,elapsed time (ms)
    text,224.591
    csv,233.964
    binary,247.164

10M without this change:

    format,elapsed time (ms)
    text,2330.383
    csv,2411.394
    binary,2590.817

10M with this change:

    format,elapsed time (ms)
    text,2231.307
    csv,2408.067
    binary,2473.617
---
 src/backend/commands/copy.c   |   8 +
 src/backend/commands/copyto.c | 387 +++++++++++++++++++++-------------
 src/include/commands/copy.h   |  27 ++-
 3 files changed, 266 insertions(+), 156 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..27a1add456 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -427,6 +427,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->to_ops = CopyToFormatOpsText;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +444,15 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_ops = CopyToFormatOpsCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_ops = CopyToFormatOpsBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..295e96dbc5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,238 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToFormatOps implementations.
+ */
+
+/*
+ * CopyToFormatOps implementation for "text" and "csv". CopyToFormatText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+	case COPY_FILE:
+		/* Default line termination depends on platform */
+#ifndef WIN32
+		CopySendChar(cstate, '\n');
+#else
+		CopySendString(cstate, "\r\n");
+#endif
+		break;
+	case COPY_FRONTEND:
+		/* The FE/BE protocol uses \n as newline for all platforms */
+		CopySendChar(cstate, '\n');
+		break;
+	default:
+		break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file
+	 * encoding, because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToFormatOps implementation for "binary".
+ */
+
+static void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+static void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+const CopyToFormatOps CopyToFormatOpsText = {
+	.start = CopyToFormatTextStart,
+	.one_row = CopyToFormatTextOneRow,
+	.end = CopyToFormatTextEnd,
+};
+
+/*
+ * We can use the same CopyToFormatOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+const CopyToFormatOps CopyToFormatOpsCSV = CopyToFormatOpsText;
+
+const CopyToFormatOps CopyToFormatOpsBinary = {
+	.start = CopyToFormatBinaryStart,
+	.one_row = CopyToFormatBinaryOneRow,
+	.end = CopyToFormatBinaryEnd,
+};
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +430,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +464,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +966,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +975,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +990,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_ops.start(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1029,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_ops.end(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1045,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_ops.one_row(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..6b5231b2f3 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -30,6 +30,28 @@ typedef enum CopyHeaderChoice
 	COPY_HEADER_MATCH,
 } CopyHeaderChoice;
 
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToFormatOps
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*end) (CopyToState cstate);
+} CopyToFormatOps;
+
+/* Predefined CopyToFormatOps for "text", "csv" and "binary". */
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsText;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsCSV;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsBinary;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -63,12 +85,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToFormatOps to_ops;		/* how to format to */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
-- 
2.40.1

#2Nathan Bossart
nathandbossart@gmail.com
In reply to: Sutou Kouhei (#1)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Dec 04, 2023 at 03:35:48PM +0900, Sutou Kouhei wrote:

I want to work on making COPY format extendable. I attach
the first patch for it. I'll send more patches after this is
merged.

Given the current discussion about adding JSON, I think this could be a
nice bit of refactoring that could ultimately open the door to providing
other COPY formats via shared libraries.

In other words, this is just a refactoring for further
changes to make COPY format extendable. If I use "complete
the task and then request reviews for it" approach, it will
be difficult to review because changes for it will be
large. So I want to work on this step by step. Is it
acceptable?

I think it makes sense to do this part independently, but we should be
careful to design this with the follow-up tasks in mind.

So I measured COPY TO time with/without this change. You can
see there is no significant loss of performance.

Data: Random 32 bit integers:

CREATE TABLE data (int32 integer);
INSERT INTO data
SELECT random() * 10000
FROM generate_series(1, ${n_records});

Seems encouraging. I assume the performance concerns stem from the use of
function pointers. Or was there something else?

--
Nathan Bossart
Amazon Web Services: https://aws.amazon.com

#3Sutou Kouhei
kou@clear-code.com
In reply to: Nathan Bossart (#2)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Thanks for replying to this proposal!

In <20231205182458.GC2757816@nathanxps13>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 5 Dec 2023 12:24:58 -0600,
Nathan Bossart <nathandbossart@gmail.com> wrote:

I think it makes sense to do this part independently, but we should be
careful to design this with the follow-up tasks in mind.

OK. I'll keep updating the "TODOs" section in the original
e-mail. It also includes design in the follow-up tasks. We
can discuss the design separately from the patches
submitting. (The current submitted patch just focuses on
refactoring but we can discuss the final design.)

I assume the performance concerns stem from the use of
function pointers. Or was there something else?

I think so too.

The original e-mail that mentioned the performance concern
[1]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us
pointers might be concerned.

If the currently supported formats ("text", "csv" and
"binary") are implemented as an extension, it may have more
concerns but we will keep them as built-in formats for
compatibility. So I think that no more concerns exist for
these formats.

[1]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us

Thanks,
--
kou

#4Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#3)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Dec 6, 2023 at 10:45 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

Thanks for replying to this proposal!

In <20231205182458.GC2757816@nathanxps13>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 5 Dec 2023 12:24:58 -0600,
Nathan Bossart <nathandbossart@gmail.com> wrote:

I think it makes sense to do this part independently, but we should be
careful to design this with the follow-up tasks in mind.

OK. I'll keep updating the "TODOs" section in the original
e-mail. It also includes design in the follow-up tasks. We
can discuss the design separately from the patches
submitting. (The current submitted patch just focuses on
refactoring but we can discuss the final design.)

I assume the performance concerns stem from the use of
function pointers. Or was there something else?

I think so too.

The original e-mail that mentioned the performance concern
[1] didn't say about the reason but the use of function
pointers might be concerned.

If the currently supported formats ("text", "csv" and
"binary") are implemented as an extension, it may have more
concerns but we will keep them as built-in formats for
compatibility. So I think that no more concerns exist for
these formats.

For the modern formats(parquet, orc, avro, etc.), will they be
implemented as extensions or in core?

The patch looks good except for a pair of extra curly braces.

[1]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us

Thanks,
--
kou

--
Regards
Junwang Zhao

#5Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#4)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3Jf7kPV3ez5OHu-pFGscKfVyd9KkubMF199etkfz=EPRg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 11:18:35 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

For the modern formats(parquet, orc, avro, etc.), will they be
implemented as extensions or in core?

I think that they should be implemented as extensions
because they will depend of external libraries and may not
use C. For example, C++ will be used for Apache Parquet
because the official Apache Parquet C++ implementation
exists but the C implementation doesn't.

(I can implement an extension for Apache Parquet after we
complete this feature. I'll implement an extension for
Apache Arrow with the official Apache Arrow C++
implementation. And it's easy that we convert Apache Arrow
data to Apache Parquet with the official Apache Parquet
implementation.)

The patch looks good except for a pair of extra curly braces.

Thanks for the review! I attach the v2 patch that removes
extra curly braces for "if (isnull)".

Thanks,
--
kou

Attachments:

v2-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 2cd0d344d68667db71b621a8c94f376ddf1707c3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Dec 2023 12:32:54 +0900
Subject: [PATCH v2] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToFormatOps, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToFormatOps can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,22.527
    csv,23.822
    binary,24.806

100K with this change:

    format,elapsed time (ms)
    text,22.919
    csv,24.643
    binary,24.705

1M without this change:

    format,elapsed time (ms)
    text,223.457
    csv,233.583
    binary,242.687

1M with this change:

    format,elapsed time (ms)
    text,224.591
    csv,233.964
    binary,247.164

10M without this change:

    format,elapsed time (ms)
    text,2330.383
    csv,2411.394
    binary,2590.817

10M with this change:

    format,elapsed time (ms)
    text,2231.307
    csv,2408.067
    binary,2473.617
---
 src/backend/commands/copy.c   |   8 +
 src/backend/commands/copyto.c | 383 ++++++++++++++++++++--------------
 src/include/commands/copy.h   |  27 ++-
 3 files changed, 262 insertions(+), 156 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..27a1add456 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -427,6 +427,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->to_ops = CopyToFormatOpsText;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +444,15 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_ops = CopyToFormatOpsCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_ops = CopyToFormatOpsBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..79806b9a1b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,234 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToFormatOps implementations.
+ */
+
+/*
+ * CopyToFormatOps implementation for "text" and "csv". CopyToFormatText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+	case COPY_FILE:
+		/* Default line termination depends on platform */
+#ifndef WIN32
+		CopySendChar(cstate, '\n');
+#else
+		CopySendString(cstate, "\r\n");
+#endif
+		break;
+	case COPY_FRONTEND:
+		/* The FE/BE protocol uses \n as newline for all platforms */
+		CopySendChar(cstate, '\n');
+		break;
+	default:
+		break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file
+	 * encoding, because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopySendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToFormatOps implementation for "binary".
+ */
+
+static void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+static void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopySendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+const CopyToFormatOps CopyToFormatOpsText = {
+	.start = CopyToFormatTextStart,
+	.one_row = CopyToFormatTextOneRow,
+	.end = CopyToFormatTextEnd,
+};
+
+/*
+ * We can use the same CopyToFormatOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+const CopyToFormatOps CopyToFormatOpsCSV = CopyToFormatOpsText;
+
+const CopyToFormatOps CopyToFormatOpsBinary = {
+	.start = CopyToFormatBinaryStart,
+	.one_row = CopyToFormatBinaryOneRow,
+	.end = CopyToFormatBinaryEnd,
+};
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +426,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +460,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +962,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +971,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +986,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_ops.start(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1025,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_ops.end(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1041,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_ops.one_row(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..6b5231b2f3 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -30,6 +30,28 @@ typedef enum CopyHeaderChoice
 	COPY_HEADER_MATCH,
 } CopyHeaderChoice;
 
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToFormatOps
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*end) (CopyToState cstate);
+} CopyToFormatOps;
+
+/* Predefined CopyToFormatOps for "text", "csv" and "binary". */
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsText;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsCSV;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsBinary;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -63,12 +85,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToFormatOps to_ops;		/* how to format to */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
-- 
2.40.1

#6Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#5)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Dec 6, 2023 at 2:19 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3Jf7kPV3ez5OHu-pFGscKfVyd9KkubMF199etkfz=EPRg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 11:18:35 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

For the modern formats(parquet, orc, avro, etc.), will they be
implemented as extensions or in core?

I think that they should be implemented as extensions
because they will depend of external libraries and may not
use C. For example, C++ will be used for Apache Parquet
because the official Apache Parquet C++ implementation
exists but the C implementation doesn't.

(I can implement an extension for Apache Parquet after we
complete this feature. I'll implement an extension for
Apache Arrow with the official Apache Arrow C++
implementation. And it's easy that we convert Apache Arrow
data to Apache Parquet with the official Apache Parquet
implementation.)

The patch looks good except for a pair of extra curly braces.

Thanks for the review! I attach the v2 patch that removes
extra curly braces for "if (isnull)".

For the extra curly braces, I mean the following code block in
CopyToFormatBinaryStart:

+ {        <-- I thought this is useless?
+ /* Generate header for a binary copy */
+ int32 tmp;
+
+ /* Signature */
+ CopySendData(cstate, BinarySignature, 11);
+ /* Flags field */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ /* No header extension */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ }

Thanks,
--
kou

--
Regards
Junwang Zhao

#7Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#6)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3K9dE2gt3+K+h=DwTqMenR84aeYuYS+cty3SR3LAeDBAQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 15:11:34 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

For the extra curly braces, I mean the following code block in
CopyToFormatBinaryStart:

+ {        <-- I thought this is useless?
+ /* Generate header for a binary copy */
+ int32 tmp;
+
+ /* Signature */
+ CopySendData(cstate, BinarySignature, 11);
+ /* Flags field */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ /* No header extension */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ }

Oh, I see. I've removed and attach the v3 patch. In general,
I don't change variable name and so on in this patch. I just
move codes in this patch. But I also removed the "tmp"
variable for this case because I think that the name isn't
suitable for larger scope. (I think that "tmp" is acceptable
in a small scope like the above code.)

New code:

/* Generate header for a binary copy */
/* Signature */
CopySendData(cstate, BinarySignature, 11);
/* Flags field */
CopySendInt32(cstate, 0);
/* No header extension */
CopySendInt32(cstate, 0);

Thanks,
--
kou

Attachments:

v3-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 9fe0087d9a6a79a7d1a7d0af63eb16abadbf0d4a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Dec 2023 12:32:54 +0900
Subject: [PATCH v3] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToFormatOps, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToFormatOps can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,22.527
    csv,23.822
    binary,24.806

100K with this change:

    format,elapsed time (ms)
    text,22.919
    csv,24.643
    binary,24.705

1M without this change:

    format,elapsed time (ms)
    text,223.457
    csv,233.583
    binary,242.687

1M with this change:

    format,elapsed time (ms)
    text,224.591
    csv,233.964
    binary,247.164

10M without this change:

    format,elapsed time (ms)
    text,2330.383
    csv,2411.394
    binary,2590.817

10M with this change:

    format,elapsed time (ms)
    text,2231.307
    csv,2408.067
    binary,2473.617
---
 src/backend/commands/copy.c   |   8 +
 src/backend/commands/copyto.c | 377 ++++++++++++++++++++--------------
 src/include/commands/copy.h   |  27 ++-
 3 files changed, 256 insertions(+), 156 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..27a1add456 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -427,6 +427,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->to_ops = CopyToFormatOpsText;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +444,15 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_ops = CopyToFormatOpsCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_ops = CopyToFormatOpsBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..8f51090a03 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,228 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToFormatOps implementations.
+ */
+
+/*
+ * CopyToFormatOps implementation for "text" and "csv". CopyToFormatText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+	case COPY_FILE:
+		/* Default line termination depends on platform */
+#ifndef WIN32
+		CopySendChar(cstate, '\n');
+#else
+		CopySendString(cstate, "\r\n");
+#endif
+		break;
+	case COPY_FRONTEND:
+		/* The FE/BE protocol uses \n as newline for all platforms */
+		CopySendChar(cstate, '\n');
+		break;
+	default:
+		break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file
+	 * encoding, because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopySendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToFormatOps implementation for "binary".
+ */
+
+static void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/* Generate header for a binary copy */
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	CopySendInt32(cstate, 0);
+	/* No header extension */
+	CopySendInt32(cstate, 0);
+}
+
+static void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopySendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+const CopyToFormatOps CopyToFormatOpsText = {
+	.start = CopyToFormatTextStart,
+	.one_row = CopyToFormatTextOneRow,
+	.end = CopyToFormatTextEnd,
+};
+
+/*
+ * We can use the same CopyToFormatOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+const CopyToFormatOps CopyToFormatOpsCSV = CopyToFormatOpsText;
+
+const CopyToFormatOps CopyToFormatOpsBinary = {
+	.start = CopyToFormatBinaryStart,
+	.one_row = CopyToFormatBinaryOneRow,
+	.end = CopyToFormatBinaryEnd,
+};
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +420,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +454,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +956,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +965,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +980,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_ops.start(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1019,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_ops.end(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1035,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_ops.one_row(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..6b5231b2f3 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -30,6 +30,28 @@ typedef enum CopyHeaderChoice
 	COPY_HEADER_MATCH,
 } CopyHeaderChoice;
 
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToFormatOps
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*end) (CopyToState cstate);
+} CopyToFormatOps;
+
+/* Predefined CopyToFormatOps for "text", "csv" and "binary". */
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsText;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsCSV;
+extern PGDLLIMPORT const CopyToFormatOps CopyToFormatOpsBinary;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -63,12 +85,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToFormatOps to_ops;		/* how to format to */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
-- 
2.40.1

#8Daniel Verite
daniel@manitou-mail.org
In reply to: Sutou Kouhei (#1)
Re: Make COPY format extendable: Extract COPY TO format implementations

Sutou Kouhei wrote:

* 2022-04: Apache Arrow [2]
* 2018-02: Apache Avro, Apache Parquet and Apache ORC [3]

(FYI: I want to add support for Apache Arrow.)

There were discussions how to add support for more formats. [3][4]
In these discussions, we got a consensus about making COPY
format extendable.

These formats seem all column-oriented whereas COPY is row-oriented
at the protocol level [1]https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY.
With regard to the procotol, how would it work to support these formats?

[1]: https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY

Best regards,
--
Daniel Vérité
https://postgresql.verite.pro/
Twitter: @DanielVerite

#9Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#7)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Dec 6, 2023 at 3:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3K9dE2gt3+K+h=DwTqMenR84aeYuYS+cty3SR3LAeDBAQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 15:11:34 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

For the extra curly braces, I mean the following code block in
CopyToFormatBinaryStart:

+ {        <-- I thought this is useless?
+ /* Generate header for a binary copy */
+ int32 tmp;
+
+ /* Signature */
+ CopySendData(cstate, BinarySignature, 11);
+ /* Flags field */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ /* No header extension */
+ tmp = 0;
+ CopySendInt32(cstate, tmp);
+ }

Oh, I see. I've removed and attach the v3 patch. In general,
I don't change variable name and so on in this patch. I just
move codes in this patch. But I also removed the "tmp"
variable for this case because I think that the name isn't
suitable for larger scope. (I think that "tmp" is acceptable
in a small scope like the above code.)

New code:

/* Generate header for a binary copy */
/* Signature */
CopySendData(cstate, BinarySignature, 11);
/* Flags field */
CopySendInt32(cstate, 0);
/* No header extension */
CopySendInt32(cstate, 0);

Thanks,
--
kou

Hi Kou,

I read the thread[1]/messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de -- Regards Junwang Zhao you posted and I think Andres's suggestion sounds great.

Should we extract both *copy to* and *copy from* for the first step, in that
case we can add the pg_copy_handler catalog smoothly later.

Attached V4 adds 'extract copy from' and it passed the cirrus ci,
please take a look.

I added a hook *copy_from_end* but this might be removed later if not used.

[1]: /messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de -- Regards Junwang Zhao
--
Regards
Junwang Zhao

Attachments:

v4-0001-Extract-COPY-handlers.patchapplication/octet-stream; name=v4-0001-Extract-COPY-handlers.patchDownload
From df9e25b8517ab5dc6dd9f73ed7ad91fc20b1f938 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Wed, 6 Dec 2023 19:13:22 +0800
Subject: [PATCH v4] Extract COPY handlers

---
 src/backend/commands/copy.c          |  44 ++++
 src/backend/commands/copyfrom.c      | 275 ++++++++++++---------
 src/backend/commands/copyfromparse.c | 309 ++++++++++++-----------
 src/backend/commands/copyto.c        | 354 +++++++++++++++------------
 src/include/commands/copy.h          |  49 +++-
 5 files changed, 619 insertions(+), 412 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..6ae904c1b8 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -427,6 +427,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->handler = CopyHandlerOpsText;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +444,15 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->handler = CopyHandlerOpsCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->handler = CopyHandlerOpsBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -864,3 +872,39 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+const CopyHandlerOps CopyHandlerOpsText = {
+	.copy_to_start = CopyToFormatTextStart,
+	.copy_to_one_row = CopyToFormatTextOneRow,
+	.copy_to_end = CopyToFormatTextEnd,
+	.copy_from_start = CopyFromFormatTextStart,
+	.copy_from_next = CopyFromFormatTextNext,
+	.copy_from_error_callback = CopyFromFormatTextErrorCallback,
+	.copy_from_end = NULL,
+};
+
+/*
+ * We can use the same CopyHandlerOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+const CopyHandlerOps CopyHandlerOpsCSV = {
+	.copy_to_start = CopyToFormatTextStart,
+	.copy_to_one_row = CopyToFormatTextOneRow,
+	.copy_to_end = CopyToFormatTextEnd,
+	.copy_from_start = CopyFromFormatTextStart,
+	.copy_from_next = CopyFromFormatTextNext,
+	.copy_from_error_callback = CopyFromFormatTextErrorCallback,
+	.copy_from_end = NULL,
+};
+
+const CopyHandlerOps CopyHandlerOpsBinary = {
+	.copy_to_start = CopyToFormatBinaryStart,
+	.copy_to_one_row = CopyToFormatBinaryOneRow,
+	.copy_to_end = CopyToFormatBinaryEnd,
+	.copy_from_start = CopyFromFormatBinaryStart,
+	.copy_from_next = CopyFromFormatBinaryNext,
+	.copy_from_error_callback = CopyFromFormatBinaryErrorCallback,
+	.copy_from_end = NULL,
+};
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index f4861652a9..01c3c1c84f 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -107,6 +107,71 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+void
+CopyFromFormatBinaryErrorCallback(CopyFromState cstate)
+{
+	/* can't usefully display the data */
+	if (cstate->cur_attname)
+		errcontext("COPY %s, line %llu, column %s",
+					cstate->cur_relname,
+					(unsigned long long) cstate->cur_lineno,
+					cstate->cur_attname);
+	else
+		errcontext("COPY %s, line %llu",
+					cstate->cur_relname,
+					(unsigned long long) cstate->cur_lineno);
+}
+
+void
+CopyFromFormatTextErrorCallback(CopyFromState cstate)
+{
+	if (cstate->cur_attname && cstate->cur_attval)
+	{
+		/* error is relevant to a particular column */
+		char	   *attval;
+
+		attval = limit_printout_length(cstate->cur_attval);
+		errcontext("COPY %s, line %llu, column %s: \"%s\"",
+					cstate->cur_relname,
+					(unsigned long long) cstate->cur_lineno,
+					cstate->cur_attname,
+					attval);
+		pfree(attval);
+	}
+	else if (cstate->cur_attname)
+	{
+		/* error is relevant to a particular column, value is NULL */
+		errcontext("COPY %s, line %llu, column %s: null input",
+					cstate->cur_relname,
+					(unsigned long long) cstate->cur_lineno,
+					cstate->cur_attname);
+	}
+	else
+	{
+		/*
+			* Error is relevant to a particular line.
+			*
+			* If line_buf still contains the correct line, print it.
+			*/
+		if (cstate->line_buf_valid)
+		{
+			char	   *lineval;
+
+			lineval = limit_printout_length(cstate->line_buf.data);
+			errcontext("COPY %s, line %llu: \"%s\"",
+						cstate->cur_relname,
+						(unsigned long long) cstate->cur_lineno, lineval);
+			pfree(lineval);
+		}
+		else
+		{
+			errcontext("COPY %s, line %llu",
+						cstate->cur_relname,
+						(unsigned long long) cstate->cur_lineno);
+		}
+	}
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -123,67 +188,7 @@ CopyFromErrorCallback(void *arg)
 				   cstate->cur_relname);
 		return;
 	}
-	if (cstate->opts.binary)
-	{
-		/* can't usefully display the data */
-		if (cstate->cur_attname)
-			errcontext("COPY %s, line %llu, column %s",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname);
-		else
-			errcontext("COPY %s, line %llu",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno);
-	}
-	else
-	{
-		if (cstate->cur_attname && cstate->cur_attval)
-		{
-			/* error is relevant to a particular column */
-			char	   *attval;
-
-			attval = limit_printout_length(cstate->cur_attval);
-			errcontext("COPY %s, line %llu, column %s: \"%s\"",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname,
-					   attval);
-			pfree(attval);
-		}
-		else if (cstate->cur_attname)
-		{
-			/* error is relevant to a particular column, value is NULL */
-			errcontext("COPY %s, line %llu, column %s: null input",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname);
-		}
-		else
-		{
-			/*
-			 * Error is relevant to a particular line.
-			 *
-			 * If line_buf still contains the correct line, print it.
-			 */
-			if (cstate->line_buf_valid)
-			{
-				char	   *lineval;
-
-				lineval = limit_printout_length(cstate->line_buf.data);
-				errcontext("COPY %s, line %llu: \"%s\"",
-						   cstate->cur_relname,
-						   (unsigned long long) cstate->cur_lineno, lineval);
-				pfree(lineval);
-			}
-			else
-			{
-				errcontext("COPY %s, line %llu",
-						   cstate->cur_relname,
-						   (unsigned long long) cstate->cur_lineno);
-			}
-		}
-	}
+	cstate->opts.handler.copy_from_error_callback(cstate);
 }
 
 /*
@@ -1320,6 +1325,101 @@ CopyFrom(CopyFromState cstate)
 	return processed;
 }
 
+void
+CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	FmgrInfo   *in_functions;
+	Oid		   *typioparams;
+	Oid			in_func_oid;
+	AttrNumber	num_phys_attrs;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function), and info about defaults and constraints. (Which
+	 * input function we use depends on text/binary format choice.)
+	 */
+	num_phys_attrs = tupDesc->natts;
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &typioparams[attnum - 1]);
+
+		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+	}
+	cstate->in_functions = in_functions;
+	cstate->typioparams = typioparams;
+}
+
+void
+CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	FmgrInfo   *in_functions;
+	Oid		   *typioparams;
+	Oid			in_func_oid;
+	AttrNumber	attr_count,
+				num_phys_attrs;
+
+	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold
+	 * the converted input data.  Otherwise, we can just point input_buf
+	 * to the same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function), and info about defaults and constraints. (Which
+	 * input function we use depends on text/binary format choice.)
+	 */
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+	}
+	cstate->in_functions = in_functions;
+	cstate->typioparams = typioparams;
+}
+
 /*
  * Setup to read tuples from a file for COPY FROM.
  *
@@ -1348,9 +1448,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1518,25 +1615,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1546,17 +1624,10 @@ BeginCopyFrom(ParseState *pstate,
 		cstate->rteperminfos = pstate->p_rteperminfos;
 	}
 
+	cstate->opts.handler.copy_from_start(cstate, tupDesc);
+
 	num_defaults = 0;
 	volatile_defexprs = false;
-
-	/*
-	 * Pick up the required catalog information for each attribute in the
-	 * relation, including the input function, the element type (to pass to
-	 * the input function), and info about defaults and constraints. (Which
-	 * input function we use depends on text/binary format choice.)
-	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1568,15 +1639,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1636,8 +1698,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1716,15 +1776,6 @@ BeginCopyFrom(ParseState *pstate,
 		ReceiveCopyBinaryHeader(cstate);
 	}
 
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
-
 	MemoryContextSwitchTo(oldcontext);
 
 	return cstate;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f553734582..e840ebb108 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -839,187 +839,208 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
-/*
- * Read next tuple from file for COPY FROM. Return false if no more tuples.
- *
- * 'econtext' is used to evaluate default expression for each column that is
- * either not read from the file or is using the DEFAULT option of COPY FROM.
- * It can be NULL when no default values are used, i.e. when all columns are
- * read from the file, and DEFAULT option is unset.
- *
- * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
- */
 bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+CopyFromFormatBinaryNext(CopyFromState cstate, ExprContext *econtext,
+						 Datum *values, bool *nulls)
 {
 	TupleDesc	tupDesc;
-	AttrNumber	num_phys_attrs,
-				attr_count,
-				num_defaults = cstate->num_defaults;
+	AttrNumber	attr_count;
+	int16		fld_count;
+	ListCell   *cur;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	int			i;
-	int		   *defmap = cstate->defmap;
-	ExprState **defexprs = cstate->defexprs;
 
-	tupDesc = RelationGetDescr(cstate->rel);
-	num_phys_attrs = tupDesc->natts;
 	attr_count = list_length(cstate->attnumlist);
 
-	/* Initialize all values for row to NULL */
-	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
-	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	cstate->cur_lineno++;
 
-	if (!cstate->opts.binary)
+	if (!CopyGetInt16(cstate, &fld_count))
 	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and
+		 * complain if it doesn't come immediately.  In COPY FROM STDIN,
+		 * this ensures that we correctly handle CopyFail, if client
+		 * chooses to send that now.  When copying from file, we could
+		 * ignore the rest of the file like in text mode, but we choose to
+		 * be consistent with the COPY FROM STDIN case.
+		 */
+		char		dummy;
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
+						errmsg("received copy data after EOF marker")));
+		return false;
+	}
 
-		fieldno = 0;
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
 
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+	tupDesc = RelationGetDescr(cstate->rel);
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
 
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
+	return true;
+}
 
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
+bool
+CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno = 0;
+	char	   *string;
 
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					errmsg("extra data after last expected column")));
 
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
+	tupDesc = RelationGetDescr(cstate->rel);
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-			if (string != NULL)
-				nulls[m] = false;
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+						errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-			if (cstate->defaults[m])
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
 				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
+				 * FORCE_NOT_NULL option is set and column is NULL -
+				 * convert it to the NULL string.
 				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+						&& strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the
+				 * string would already have been set to NULL. Convert it
+				 * to NULL as specified.
+				 */
+				string = NULL;
 			}
-			else
-				values[m] = InputFunctionCall(&in_functions[m],
-											  string,
-											  typioparams[m],
-											  att->atttypmod);
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
 		}
 
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
-		cstate->cur_lineno++;
+		if (string != NULL)
+			nulls[m] = false;
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
+		if (cstate->defaults[m])
 		{
 			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
 			 */
-			char		dummy;
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
 		}
+		else
+			values[m] = InputFunctionCall(&in_functions[m],
+											string,
+											typioparams[m],
+											att->atttypmod);
 
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	Assert(fieldno == attr_count);
+	return true;
+}
+
+/*
+ * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ *
+ * 'econtext' is used to evaluate default expression for each column that is
+ * either not read from the file or is using the DEFAULT option of COPY FROM.
+ * It can be NULL when no default values are used, i.e. when all columns are
+ * read from the file, and DEFAULT option is unset.
+ *
+ * 'values' and 'nulls' arrays must be the same length as columns of the
+ * relation passed to BeginCopyFrom. This function fills the arrays.
+ */
+bool
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
+			 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	num_phys_attrs,
+				num_defaults = cstate->num_defaults;
+	int			i;
+	int		   *defmap = cstate->defmap;
+	ExprState **defexprs = cstate->defexprs;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	num_phys_attrs = tupDesc->natts;
+
+	/* Initialize all values for row to NULL */
+	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
+	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+
+	if (!cstate->opts.handler.copy_from_next(cstate, econtext, values, nulls))
+	{
+		return false;
 	}
 
 	/*
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..4538bc6292 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,205 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyHandlerOps implementation of COPY TO for "text" and "csv".
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their behavior.
+ * We can split this implementation and stop referring cstate->opts.csv_mode
+ * later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+	case COPY_FILE:
+		/* Default line termination depends on platform */
+#ifndef WIN32
+		CopySendChar(cstate, '\n');
+#else
+		CopySendString(cstate, "\r\n");
+#endif
+		break;
+	case COPY_FRONTEND:
+		/* The FE/BE protocol uses \n as newline for all platforms */
+		CopySendChar(cstate, '\n');
+		break;
+	default:
+		break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file
+	 * encoding, because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopySendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyHandlerOps implementation for "binary" COPY TO.
+ */
+
+void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/* Generate header for a binary copy */
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	CopySendInt32(cstate, 0);
+	/* No header extension */
+	CopySendInt32(cstate, 0);
+}
+
+void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopySendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +397,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +431,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +933,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +942,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +957,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.handler.copy_to_start(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +996,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.handler.copy_to_end(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1012,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.handler.copy_to_one_row(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..5b3ffcd190 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -30,6 +30,34 @@ typedef enum CopyHeaderChoice
 	COPY_HEADER_MATCH,
 } CopyHeaderChoice;
 
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyHandlerOps
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*copy_to_start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*copy_to_one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*copy_to_end) (CopyToState cstate);
+
+	void		(*copy_from_start) (CopyFromState cstate, TupleDesc tupDesc);
+	bool		(*copy_from_next) (CopyFromState cstate, ExprContext *econtext,
+			 					   Datum *values, bool *nulls);
+	void		(*copy_from_error_callback) (CopyFromState cstate);
+	void		(*copy_from_end) (CopyFromState cstate);
+} CopyHandlerOps;
+
+/* Predefined CopyToFormatOps for "text", "csv" and "binary". */
+extern PGDLLIMPORT const CopyHandlerOps CopyHandlerOpsText;
+extern PGDLLIMPORT const CopyHandlerOps CopyHandlerOpsCSV;
+extern PGDLLIMPORT const CopyHandlerOps CopyHandlerOpsBinary;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -63,12 +91,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyHandlerOps handler;		/* copy handler operations */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -102,4 +127,20 @@ extern uint64 DoCopyTo(CopyToState cstate);
 extern List *CopyGetAttnums(TupleDesc tupDesc, Relation rel,
 							List *attnamelist);
 
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate, ExprContext *econtext,
+									 Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
+
 #endif							/* COPY_H */
-- 
2.41.0

#10Junwang Zhao
zhjwpku@gmail.com
In reply to: Daniel Verite (#8)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Dec 6, 2023 at 8:32 PM Daniel Verite <daniel@manitou-mail.org> wrote:

Sutou Kouhei wrote:

* 2022-04: Apache Arrow [2]
* 2018-02: Apache Avro, Apache Parquet and Apache ORC [3]

(FYI: I want to add support for Apache Arrow.)

There were discussions how to add support for more formats. [3][4]
In these discussions, we got a consensus about making COPY
format extendable.

These formats seem all column-oriented whereas COPY is row-oriented
at the protocol level [1].
With regard to the procotol, how would it work to support these formats?

They have kind of *RowGroup* concepts, a bunch of rows goes to a RowBatch
and the data of the same column goes together.

I think they should fit the COPY semantics and there are some FDW out there for
these modern formats, like [1]https://github.com/adjust/parquet_fdw. If we support COPY to deal with the
format, it will
be easier to interact with them(without creating
server/usermapping/foreign table).

[1]: https://github.com/adjust/parquet_fdw

[1] https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY

Best regards,
--
Daniel Vérité
https://postgresql.verite.pro/
Twitter: @DanielVerite

--
Regards
Junwang Zhao

#11Michael Paquier
michael@paquier.xyz
In reply to: Junwang Zhao (#9)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Dec 06, 2023 at 10:07:51PM +0800, Junwang Zhao wrote:

I read the thread[1] you posted and I think Andres's suggestion sounds great.

Should we extract both *copy to* and *copy from* for the first step, in that
case we can add the pg_copy_handler catalog smoothly later.

Attached V4 adds 'extract copy from' and it passed the cirrus ci,
please take a look.

I added a hook *copy_from_end* but this might be removed later if not used.

[1]: /messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de

I was looking at the differences between v3 posted by Sutou-san and
v4 from you, seeing that:

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyHandlerOps
 {
     /* Called when COPY TO is started. This will send a header. */
-    void        (*start) (CopyToState cstate, TupleDesc tupDesc);
+    void        (*copy_to_start) (CopyToState cstate, TupleDesc tupDesc);
     /* Copy one row for COPY TO. */
-    void        (*one_row) (CopyToState cstate, TupleTableSlot *slot);
+    void        (*copy_to_one_row) (CopyToState cstate, TupleTableSlot *slot);
     /* Called when COPY TO is ended. This will send a trailer. */
-    void        (*end) (CopyToState cstate);
-} CopyToFormatOps;
+    void        (*copy_to_end) (CopyToState cstate);
+
+    void        (*copy_from_start) (CopyFromState cstate, TupleDesc tupDesc);
+    bool        (*copy_from_next) (CopyFromState cstate, ExprContext *econtext,
+                                    Datum *values, bool *nulls);
+    void        (*copy_from_error_callback) (CopyFromState cstate);
+    void        (*copy_from_end) (CopyFromState cstate);
+} CopyHandlerOps;

And we've spent a good deal of time refactoring the copy code so as
the logic behind TO and FROM is split. Having a set of routines that
groups both does not look like a step in the right direction to me,
and v4 is an attempt at solving two problems, while v3 aims to improve
one case. It seems to me that each callback portion should be focused
on staying in its own area of the code, aka copyfrom*.c or copyto*.c.
--
Michael

#12Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#9)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3LSRhK601Bn50u71BgfNWm4q3kv-o-KEq=hrbyLbY_EsA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 22:07:51 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Should we extract both *copy to* and *copy from* for the first step, in that
case we can add the pg_copy_handler catalog smoothly later.

I don't object it (mixing TO/FROM changes to one patch) but
it may make review difficult. Is it acceptable?

FYI: I planed that I implement TO part, and then FROM part,
and then unify TO/FROM parts if needed. [1]/messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com

Attached V4 adds 'extract copy from' and it passed the cirrus ci,
please take a look.

Thanks. Here are my comments:

+		/*
+			* Error is relevant to a particular line.
+			*
+			* If line_buf still contains the correct line, print it.
+			*/
+		if (cstate->line_buf_valid)

We need to fix the indentation.

+CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	FmgrInfo   *in_functions;
+	Oid		   *typioparams;
+	Oid			in_func_oid;
+	AttrNumber	num_phys_attrs;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function), and info about defaults and constraints. (Which
+	 * input function we use depends on text/binary format choice.)
+	 */
+	num_phys_attrs = tupDesc->natts;
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));

We need to update the comment because defaults and
constraints aren't picked up here.

+CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc)

...

+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function), and info about defaults and constraints. (Which
+	 * input function we use depends on text/binary format choice.)
+	 */
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));

ditto.

@@ -1716,15 +1776,6 @@ BeginCopyFrom(ParseState *pstate,
ReceiveCopyBinaryHeader(cstate);
}

I think that this block should be moved to
CopyFromFormatBinaryStart() too. But we need to run it after
we setup inputs such as data_source_cb, pipe and filename...

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyHandlerOps
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*copy_to_start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*copy_to_one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*copy_to_end) (CopyToState cstate);
+
+	void		(*copy_from_start) (CopyFromState cstate, TupleDesc tupDesc);
+	bool		(*copy_from_next) (CopyFromState cstate, ExprContext *econtext,
+			 					   Datum *values, bool *nulls);
+	void		(*copy_from_error_callback) (CopyFromState cstate);
+	void		(*copy_from_end) (CopyFromState cstate);
+} CopyHandlerOps;

It seems that "copy_" prefix is redundant. Should we use
"to_start" instead of "copy_to_start" and so on?

BTW, it seems that "COPY FROM (FORMAT json)" may not be implemented. [2]/messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com
We may need to care about NULL copy_from_* cases.

I added a hook *copy_from_end* but this might be removed later if not used.

It may be useful to clean up resources for COPY FROM but the
patch doesn't call the copy_from_end. How about removing it
for now? We can add it and call it from EndCopyFrom() later?
Because it's not needed for now.

I think that we should focus on refactoring instead of
adding a new feature in this patch.

[1]: /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com
[2]: /messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com

Thanks,
--
kou

#13Junwang Zhao
zhjwpku@gmail.com
In reply to: Michael Paquier (#11)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 7, 2023 at 8:39 AM Michael Paquier <michael@paquier.xyz> wrote:

On Wed, Dec 06, 2023 at 10:07:51PM +0800, Junwang Zhao wrote:

I read the thread[1] you posted and I think Andres's suggestion sounds great.

Should we extract both *copy to* and *copy from* for the first step, in that
case we can add the pg_copy_handler catalog smoothly later.

Attached V4 adds 'extract copy from' and it passed the cirrus ci,
please take a look.

I added a hook *copy_from_end* but this might be removed later if not used.

[1]: /messages/by-id/20180211211235.5x3jywe5z3lkgcsr@alap3.anarazel.de

I was looking at the differences between v3 posted by Sutou-san and
v4 from you, seeing that:

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyHandlerOps
{
/* Called when COPY TO is started. This will send a header. */
-    void        (*start) (CopyToState cstate, TupleDesc tupDesc);
+    void        (*copy_to_start) (CopyToState cstate, TupleDesc tupDesc);
/* Copy one row for COPY TO. */
-    void        (*one_row) (CopyToState cstate, TupleTableSlot *slot);
+    void        (*copy_to_one_row) (CopyToState cstate, TupleTableSlot *slot);
/* Called when COPY TO is ended. This will send a trailer. */
-    void        (*end) (CopyToState cstate);
-} CopyToFormatOps;
+    void        (*copy_to_end) (CopyToState cstate);
+
+    void        (*copy_from_start) (CopyFromState cstate, TupleDesc tupDesc);
+    bool        (*copy_from_next) (CopyFromState cstate, ExprContext *econtext,
+                                    Datum *values, bool *nulls);
+    void        (*copy_from_error_callback) (CopyFromState cstate);
+    void        (*copy_from_end) (CopyFromState cstate);
+} CopyHandlerOps;

And we've spent a good deal of time refactoring the copy code so as
the logic behind TO and FROM is split. Having a set of routines that
groups both does not look like a step in the right direction to me,

The point of this refactor (from my view) is to make it possible to add new
copy handlers in extensions, just like access method. As Andres suggested,
a system catalog like *pg_copy_handler*, if we split TO and FROM into two
sets of routines, does that mean we have to create two catalog(
pg_copy_from_handler and pg_copy_to_handler)?

and v4 is an attempt at solving two problems, while v3 aims to improve
one case. It seems to me that each callback portion should be focused
on staying in its own area of the code, aka copyfrom*.c or copyto*.c.
--
Michael

--
Regards
Junwang Zhao

#14Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#12)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 7, 2023 at 1:05 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3LSRhK601Bn50u71BgfNWm4q3kv-o-KEq=hrbyLbY_EsA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 6 Dec 2023 22:07:51 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Should we extract both *copy to* and *copy from* for the first step, in that
case we can add the pg_copy_handler catalog smoothly later.

I don't object it (mixing TO/FROM changes to one patch) but
it may make review difficult. Is it acceptable?

FYI: I planed that I implement TO part, and then FROM part,
and then unify TO/FROM parts if needed. [1]

I'm fine with step by step refactoring, let's just wait for more
suggestions.

Attached V4 adds 'extract copy from' and it passed the cirrus ci,
please take a look.

Thanks. Here are my comments:

+             /*
+                     * Error is relevant to a particular line.
+                     *
+                     * If line_buf still contains the correct line, print it.
+                     */
+             if (cstate->line_buf_valid)

We need to fix the indentation.

+CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+     FmgrInfo   *in_functions;
+     Oid                *typioparams;
+     Oid                     in_func_oid;
+     AttrNumber      num_phys_attrs;
+
+     /*
+      * Pick up the required catalog information for each attribute in the
+      * relation, including the input function, the element type (to pass to
+      * the input function), and info about defaults and constraints. (Which
+      * input function we use depends on text/binary format choice.)
+      */
+     num_phys_attrs = tupDesc->natts;
+     in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+     typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));

We need to update the comment because defaults and
constraints aren't picked up here.

+CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc)

...

+     /*
+      * Pick up the required catalog information for each attribute in the
+      * relation, including the input function, the element type (to pass to
+      * the input function), and info about defaults and constraints. (Which
+      * input function we use depends on text/binary format choice.)
+      */
+     in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+     typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));

ditto.

@@ -1716,15 +1776,6 @@ BeginCopyFrom(ParseState *pstate,
ReceiveCopyBinaryHeader(cstate);
}

I think that this block should be moved to
CopyFromFormatBinaryStart() too. But we need to run it after
we setup inputs such as data_source_cb, pipe and filename...

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyHandlerOps
+{
+       /* Called when COPY TO is started. This will send a header. */
+       void            (*copy_to_start) (CopyToState cstate, TupleDesc tupDesc);
+
+       /* Copy one row for COPY TO. */
+       void            (*copy_to_one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+       /* Called when COPY TO is ended. This will send a trailer. */
+       void            (*copy_to_end) (CopyToState cstate);
+
+       void            (*copy_from_start) (CopyFromState cstate, TupleDesc tupDesc);
+       bool            (*copy_from_next) (CopyFromState cstate, ExprContext *econtext,
+                                                                  Datum *values, bool *nulls);
+       void            (*copy_from_error_callback) (CopyFromState cstate);
+       void            (*copy_from_end) (CopyFromState cstate);
+} CopyHandlerOps;

It seems that "copy_" prefix is redundant. Should we use
"to_start" instead of "copy_to_start" and so on?

BTW, it seems that "COPY FROM (FORMAT json)" may not be implemented. [2]
We may need to care about NULL copy_from_* cases.

I added a hook *copy_from_end* but this might be removed later if not used.

It may be useful to clean up resources for COPY FROM but the
patch doesn't call the copy_from_end. How about removing it
for now? We can add it and call it from EndCopyFrom() later?
Because it's not needed for now.

I think that we should focus on refactoring instead of
adding a new feature in this patch.

[1]: /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com
[2]: /messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com

Thanks,
--
kou

--
Regards
Junwang Zhao

#15Andrew Dunstan
andrew@dunslane.net
In reply to: Junwang Zhao (#13)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 2023-12-07 Th 03:37, Junwang Zhao wrote:

The point of this refactor (from my view) is to make it possible to add new
copy handlers in extensions, just like access method. As Andres suggested,
a system catalog like *pg_copy_handler*, if we split TO and FROM into two
sets of routines, does that mean we have to create two catalog(
pg_copy_from_handler and pg_copy_to_handler)?

Surely not. Either have two fields, one for the TO handler and one for
the FROM handler, or a flag on each row indicating if it's a FROM or TO
handler.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#16Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Andrew Dunstan (#15)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 8, 2023 at 1:39 AM Andrew Dunstan <andrew@dunslane.net> wrote:

On 2023-12-07 Th 03:37, Junwang Zhao wrote:

The point of this refactor (from my view) is to make it possible to add new
copy handlers in extensions, just like access method. As Andres suggested,
a system catalog like *pg_copy_handler*, if we split TO and FROM into two
sets of routines, does that mean we have to create two catalog(
pg_copy_from_handler and pg_copy_to_handler)?

Surely not. Either have two fields, one for the TO handler and one for
the FROM handler, or a flag on each row indicating if it's a FROM or TO
handler.

True.

But why do we need a system catalog like pg_copy_handler in the first
place? I imagined that an extension can define a handler function
returning a set of callbacks and the parser can lookup the handler
function by name, like FDW and TABLESAMPLE.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#17Junwang Zhao
zhjwpku@gmail.com
In reply to: Masahiko Sawada (#16)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 8, 2023 at 3:27 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Dec 8, 2023 at 1:39 AM Andrew Dunstan <andrew@dunslane.net> wrote:

On 2023-12-07 Th 03:37, Junwang Zhao wrote:

The point of this refactor (from my view) is to make it possible to add new
copy handlers in extensions, just like access method. As Andres suggested,
a system catalog like *pg_copy_handler*, if we split TO and FROM into two
sets of routines, does that mean we have to create two catalog(
pg_copy_from_handler and pg_copy_to_handler)?

Surely not. Either have two fields, one for the TO handler and one for
the FROM handler, or a flag on each row indicating if it's a FROM or TO
handler.

If we wrap the two fields into a single structure, that will still be in
copy.h, which I think is not necessary. A single routing wrapper should
be enough, the actual implementation still stays separate
copy_[to/from].c files.

True.

But why do we need a system catalog like pg_copy_handler in the first
place? I imagined that an extension can define a handler function
returning a set of callbacks and the parser can lookup the handler
function by name, like FDW and TABLESAMPLE.

I can see FDW related utility commands but no TABLESAMPLE related,
and there is a pg_foreign_data_wrapper system catalog which has
a *fdwhandler* field.

If we want extensions to create a new copy handler, I think
something like pg_copy_hander should be necessary.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

I go one step further to implement the pg_copy_handler, attached V5 is
the implementation with some changes suggested by Kou.

You can also review this on this github pull request [1]https://github.com/zhjwpku/postgres/pull/1/files.

[1]: https://github.com/zhjwpku/postgres/pull/1/files

--
Regards
Junwang Zhao

Attachments:

v5-0001-Extract-COPY-handlers.patchapplication/octet-stream; name=v5-0001-Extract-COPY-handlers.patchDownload
From 30a383c048d948c370e26149820c4bc5ea004d94 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Wed, 6 Dec 2023 19:13:22 +0800
Subject: [PATCH v5] Extract COPY handlers

---
 src/backend/catalog/Makefile            |   4 +-
 src/backend/commands/copy.c             | 159 ++++++++++-
 src/backend/commands/copyfrom.c         | 269 ++++++++++--------
 src/backend/commands/copyfromparse.c    | 309 +++++++++++----------
 src/backend/commands/copyto.c           | 354 ++++++++++++++----------
 src/backend/nodes/Makefile              |   1 +
 src/backend/nodes/gen_node_support.pl   |   2 +
 src/backend/utils/adt/pseudotypes.c     |   1 +
 src/include/catalog/meson.build         |   2 +
 src/include/catalog/pg_copy_handler.dat |  25 ++
 src/include/catalog/pg_copy_handler.h   |  50 ++++
 src/include/catalog/pg_proc.dat         |  21 ++
 src/include/catalog/pg_type.dat         |   7 +
 src/include/commands/copy.h             |  51 +++-
 src/test/regress/expected/oidjoins.out  |   1 +
 15 files changed, 839 insertions(+), 417 deletions(-)
 create mode 100644 src/include/catalog/pg_copy_handler.dat
 create mode 100644 src/include/catalog/pg_copy_handler.h

diff --git a/src/backend/catalog/Makefile b/src/backend/catalog/Makefile
index ec7b6f5362..b0c4cdcdf2 100644
--- a/src/backend/catalog/Makefile
+++ b/src/backend/catalog/Makefile
@@ -118,7 +118,8 @@ CATALOG_HEADERS := \
 	pg_publication_namespace.h \
 	pg_publication_rel.h \
 	pg_subscription.h \
-	pg_subscription_rel.h
+	pg_subscription_rel.h \
+	pg_copy_handler.h \
 
 GENERATED_HEADERS := $(CATALOG_HEADERS:%.h=%_d.h) schemapg.h system_fk_info.h
 
@@ -150,6 +151,7 @@ POSTGRES_BKI_DATA = $(addprefix $(top_srcdir)/src/include/catalog/,\
 	pg_ts_parser.dat \
 	pg_ts_template.dat \
 	pg_type.dat \
+	pg_copy_handler.dat \
 	)
 
 all: generated-header-symlinks
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..d5c1cb50a3 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -18,10 +18,12 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
+#include "access/genam.h"
 #include "access/sysattr.h"
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
+#include "catalog/pg_copy_handler.h"
 #include "commands/copy.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
@@ -36,6 +38,8 @@
 #include "rewrite/rewriteHandler.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
+#include "utils/formatting.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/rel.h"
@@ -427,6 +431,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->handler = GetCopyRoutineByName(DEFAULT_COPY_HANDLER);
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -439,17 +445,11 @@ ProcessCopyOptions(ParseState *pstate,
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
+			opts_out->handler = GetCopyRoutineByName(fmt);
+			if (strcmp(fmt, "csv") == 0)
 				opts_out->csv_mode = true;
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -864,3 +864,146 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+static const
+CopyRoutine CopyRoutineText = {
+	.type = T_CopyRoutine,
+	.to_start = CopyToFormatTextStart,
+	.to_one_row = CopyToFormatTextOneRow,
+	.to_end = CopyToFormatTextEnd,
+	.from_start = CopyFromFormatTextStart,
+	.from_next = CopyFromFormatTextNext,
+	.from_error_callback = CopyFromFormatTextErrorCallback,
+};
+
+/*
+ * We can use the same CopyRoutine for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+static const
+CopyRoutine CopyRoutineCSV = {
+	.type = T_CopyRoutine,
+	.to_start = CopyToFormatTextStart,
+	.to_one_row = CopyToFormatTextOneRow,
+	.to_end = CopyToFormatTextEnd,
+	.from_start = CopyFromFormatTextStart,
+	.from_next = CopyFromFormatTextNext,
+	.from_error_callback = CopyFromFormatTextErrorCallback,
+};
+
+static const
+CopyRoutine CopyRoutineBinary = {
+	.type = T_CopyRoutine,
+	.to_start = CopyToFormatBinaryStart,
+	.to_one_row = CopyToFormatBinaryOneRow,
+	.to_end = CopyToFormatBinaryEnd,
+	.from_start = CopyFromFormatBinaryStart,
+	.from_next = CopyFromFormatBinaryNext,
+	.from_error_callback = CopyFromFormatBinaryErrorCallback,
+};
+
+Datum
+text_copy_handler(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_POINTER(&CopyRoutineText);
+}
+
+Datum
+csv_copy_handler(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_POINTER(&CopyRoutineCSV);
+}
+
+Datum
+binary_copy_handler(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_POINTER(&CopyRoutineBinary);
+}
+
+static NameData
+fmt_to_name(char *fmt)
+{
+	char		   *lcf; /* lower cased fmt */
+	size_t			len;
+	NameData		fmtname;
+
+	if (strlen(fmt) >= NAMEDATALEN)
+		elog(ERROR, "fmt name \"%s\" exceeds maximum name length "
+			 "of %d bytes", fmt, NAMEDATALEN - 1);
+
+	len = strlen(fmt);
+	lcf = asc_tolower(fmt, len);
+	len = strlen(lcf);
+	
+	memcpy(&(NameStr(fmtname)), lcf, len);
+	NameStr(fmtname)[len] = '\0';
+	pfree(lcf);
+
+	return fmtname;
+}
+
+CopyRoutine *
+GetCopyRoutine(Oid copyhandler)
+{
+	Datum			datum;
+	CopyRoutine	   *routine;
+
+	datum = OidFunctionCall0(copyhandler);
+	routine = (CopyRoutine *) DatumGetPointer(datum);
+
+	if (routine == NULL || !IsA(routine, CopyRoutine))
+		elog(ERROR, "copy handler function %u did not return an CopyRoutine struct",
+			 copyhandler);
+
+	return routine;
+}
+
+CopyRoutine *
+GetCopyRoutineByName(char *fmt)
+{
+	HeapTuple		tuple;
+	NameData		fmtname;
+	Relation		chrel;
+	ScanKeyData		scankey;
+	SysScanDesc		scan;
+	Form_pg_copy_handler chform;
+	regproc			copyhandler;
+
+	fmtname = fmt_to_name(fmt);
+
+	chrel = table_open(CopyHandlerRelationId, AccessShareLock);
+
+	ScanKeyInit(&scankey,
+				Anum_pg_copy_handler_chname,
+				BTEqualStrategyNumber, F_NAMEEQ,
+				NameGetDatum(&fmtname));
+
+	scan = systable_beginscan(chrel, CopyHandlerNameIndexId, true,
+							  NULL, 1, &scankey);
+	tuple = systable_getnext(scan);
+	if (!HeapTupleIsValid(tuple))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", fmt)));
+
+	chform = (Form_pg_copy_handler)GETSTRUCT(tuple);
+
+	copyhandler = chform->copyhandler;
+
+	/* Complain if handler OID is invalid */
+	if (!RegProcedureIsValid(copyhandler))
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+				 errmsg("index access method \"%s\" does not have a handler",
+						NameStr(chform->chname))));
+	}
+
+	systable_endscan(scan);
+	table_close(chrel, AccessShareLock);
+
+	/* And finally, call the handler function to get the API struct. */
+	return GetCopyRoutine(copyhandler);
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index f4861652a9..c2d92108c1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -107,83 +107,88 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
-/*
- * error context callback for COPY FROM
- *
- * The argument for the error context must be CopyFromState.
- */
 void
-CopyFromErrorCallback(void *arg)
+CopyFromFormatBinaryErrorCallback(CopyFromState cstate)
 {
-	CopyFromState cstate = (CopyFromState) arg;
+	/* can't usefully display the data */
+	if (cstate->cur_attname)
+		errcontext("COPY %s, line %llu, column %s",
+				   cstate->cur_relname,
+				   (unsigned long long) cstate->cur_lineno,
+				   cstate->cur_attname);
+	else
+		errcontext("COPY %s, line %llu",
+				   cstate->cur_relname,
+				   (unsigned long long) cstate->cur_lineno);
+}
 
-	if (cstate->relname_only)
+void
+CopyFromFormatTextErrorCallback(CopyFromState cstate)
+{
+	if (cstate->cur_attname && cstate->cur_attval)
 	{
-		errcontext("COPY %s",
-				   cstate->cur_relname);
-		return;
+		/* error is relevant to a particular column */
+		char	   *attval;
+
+		attval = limit_printout_length(cstate->cur_attval);
+		errcontext("COPY %s, line %llu, column %s: \"%s\"",
+				   cstate->cur_relname,
+				   (unsigned long long) cstate->cur_lineno,
+				   cstate->cur_attname,
+				   attval);
+		pfree(attval);
 	}
-	if (cstate->opts.binary)
+	else if (cstate->cur_attname)
 	{
-		/* can't usefully display the data */
-		if (cstate->cur_attname)
-			errcontext("COPY %s, line %llu, column %s",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname);
-		else
-			errcontext("COPY %s, line %llu",
-					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno);
+		/* error is relevant to a particular column, value is NULL */
+		errcontext("COPY %s, line %llu, column %s: null input",
+				   cstate->cur_relname,
+				   (unsigned long long) cstate->cur_lineno,
+				   cstate->cur_attname);
 	}
 	else
 	{
-		if (cstate->cur_attname && cstate->cur_attval)
+		/*
+		 * Error is relevant to a particular line.
+		 *
+		 * If line_buf still contains the correct line, print it.
+		 */
+		if (cstate->line_buf_valid)
 		{
-			/* error is relevant to a particular column */
-			char	   *attval;
+			char	   *lineval;
 
-			attval = limit_printout_length(cstate->cur_attval);
-			errcontext("COPY %s, line %llu, column %s: \"%s\"",
+			lineval = limit_printout_length(cstate->line_buf.data);
+			errcontext("COPY %s, line %llu: \"%s\"",
 					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname,
-					   attval);
-			pfree(attval);
+					   (unsigned long long) cstate->cur_lineno, lineval);
+			pfree(lineval);
 		}
-		else if (cstate->cur_attname)
+		else
 		{
-			/* error is relevant to a particular column, value is NULL */
-			errcontext("COPY %s, line %llu, column %s: null input",
+			errcontext("COPY %s, line %llu",
 					   cstate->cur_relname,
-					   (unsigned long long) cstate->cur_lineno,
-					   cstate->cur_attname);
+					   (unsigned long long) cstate->cur_lineno);
 		}
-		else
-		{
-			/*
-			 * Error is relevant to a particular line.
-			 *
-			 * If line_buf still contains the correct line, print it.
-			 */
-			if (cstate->line_buf_valid)
-			{
-				char	   *lineval;
+	}
+}
 
-				lineval = limit_printout_length(cstate->line_buf.data);
-				errcontext("COPY %s, line %llu: \"%s\"",
-						   cstate->cur_relname,
-						   (unsigned long long) cstate->cur_lineno, lineval);
-				pfree(lineval);
-			}
-			else
-			{
-				errcontext("COPY %s, line %llu",
-						   cstate->cur_relname,
-						   (unsigned long long) cstate->cur_lineno);
-			}
-		}
+/*
+ * error context callback for COPY FROM
+ *
+ * The argument for the error context must be CopyFromState.
+ */
+void
+CopyFromErrorCallback(void *arg)
+{
+	CopyFromState cstate = (CopyFromState) arg;
+
+	if (cstate->relname_only)
+	{
+		errcontext("COPY %s",
+				   cstate->cur_relname);
+		return;
 	}
+	cstate->opts.handler->from_error_callback(cstate);
 }
 
 /*
@@ -1320,6 +1325,99 @@ CopyFrom(CopyFromState cstate)
 	return processed;
 }
 
+void
+CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	FmgrInfo   *in_functions;
+	Oid		   *typioparams;
+	Oid			in_func_oid;
+	AttrNumber	num_phys_attrs;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	num_phys_attrs = tupDesc->natts;
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &typioparams[attnum - 1]);
+
+		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+	}
+	cstate->in_functions = in_functions;
+	cstate->typioparams = typioparams;
+}
+
+void
+CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	FmgrInfo   *in_functions;
+	Oid		   *typioparams;
+	Oid			in_func_oid;
+	AttrNumber	attr_count,
+				num_phys_attrs;
+
+	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold
+	 * the converted input data.  Otherwise, we can just point input_buf
+	 * to the same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+	}
+	cstate->in_functions = in_functions;
+	cstate->typioparams = typioparams;
+}
+
 /*
  * Setup to read tuples from a file for COPY FROM.
  *
@@ -1348,9 +1446,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1518,25 +1613,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1546,17 +1622,14 @@ BeginCopyFrom(ParseState *pstate,
 		cstate->rteperminfos = pstate->p_rteperminfos;
 	}
 
-	num_defaults = 0;
-	volatile_defexprs = false;
+	cstate->opts.handler->from_start(cstate, tupDesc);
 
 	/*
-	 * Pick up the required catalog information for each attribute in the
-	 * relation, including the input function, the element type (to pass to
-	 * the input function), and info about defaults and constraints. (Which
+	 * Pick up info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	num_defaults = 0;
+	volatile_defexprs = false;
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1568,15 +1641,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1636,8 +1700,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1716,15 +1778,6 @@ BeginCopyFrom(ParseState *pstate,
 		ReceiveCopyBinaryHeader(cstate);
 	}
 
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
-
 	MemoryContextSwitchTo(oldcontext);
 
 	return cstate;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f553734582..bbe5bd1166 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -839,187 +839,208 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
-/*
- * Read next tuple from file for COPY FROM. Return false if no more tuples.
- *
- * 'econtext' is used to evaluate default expression for each column that is
- * either not read from the file or is using the DEFAULT option of COPY FROM.
- * It can be NULL when no default values are used, i.e. when all columns are
- * read from the file, and DEFAULT option is unset.
- *
- * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
- */
 bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+CopyFromFormatBinaryNext(CopyFromState cstate, ExprContext *econtext,
+						 Datum *values, bool *nulls)
 {
 	TupleDesc	tupDesc;
-	AttrNumber	num_phys_attrs,
-				attr_count,
-				num_defaults = cstate->num_defaults;
+	AttrNumber	attr_count;
+	int16		fld_count;
+	ListCell   *cur;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	int			i;
-	int		   *defmap = cstate->defmap;
-	ExprState **defexprs = cstate->defexprs;
 
-	tupDesc = RelationGetDescr(cstate->rel);
-	num_phys_attrs = tupDesc->natts;
 	attr_count = list_length(cstate->attnumlist);
 
-	/* Initialize all values for row to NULL */
-	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
-	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	cstate->cur_lineno++;
 
-	if (!cstate->opts.binary)
+	if (!CopyGetInt16(cstate, &fld_count))
 	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and
+		 * complain if it doesn't come immediately.  In COPY FROM STDIN,
+		 * this ensures that we correctly handle CopyFail, if client
+		 * chooses to send that now.  When copying from file, we could
+		 * ignore the rest of the file like in text mode, but we choose to
+		 * be consistent with the COPY FROM STDIN case.
+		 */
+		char		dummy;
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
+						errmsg("received copy data after EOF marker")));
+		return false;
+	}
 
-		fieldno = 0;
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
 
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+	tupDesc = RelationGetDescr(cstate->rel);
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
 
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
+	return true;
+}
 
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
+bool
+CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno = 0;
+	char	   *string;
 
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					errmsg("extra data after last expected column")));
 
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
+	tupDesc = RelationGetDescr(cstate->rel);
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-			if (string != NULL)
-				nulls[m] = false;
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+						errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-			if (cstate->defaults[m])
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
 				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
+				 * FORCE_NOT_NULL option is set and column is NULL -
+				 * convert it to the NULL string.
 				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+						&& strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the
+				 * string would already have been set to NULL. Convert it
+				 * to NULL as specified.
+				 */
+				string = NULL;
 			}
-			else
-				values[m] = InputFunctionCall(&in_functions[m],
-											  string,
-											  typioparams[m],
-											  att->atttypmod);
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
 		}
 
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
-		cstate->cur_lineno++;
+		if (string != NULL)
+			nulls[m] = false;
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
+		if (cstate->defaults[m])
 		{
 			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
 			 */
-			char		dummy;
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
 		}
+		else
+			values[m] = InputFunctionCall(&in_functions[m],
+											string,
+											typioparams[m],
+											att->atttypmod);
 
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	Assert(fieldno == attr_count);
+	return true;
+}
+
+/*
+ * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ *
+ * 'econtext' is used to evaluate default expression for each column that is
+ * either not read from the file or is using the DEFAULT option of COPY FROM.
+ * It can be NULL when no default values are used, i.e. when all columns are
+ * read from the file, and DEFAULT option is unset.
+ *
+ * 'values' and 'nulls' arrays must be the same length as columns of the
+ * relation passed to BeginCopyFrom. This function fills the arrays.
+ */
+bool
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
+			 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	num_phys_attrs,
+				num_defaults = cstate->num_defaults;
+	int			i;
+	int		   *defmap = cstate->defmap;
+	ExprState **defexprs = cstate->defexprs;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	num_phys_attrs = tupDesc->natts;
+
+	/* Initialize all values for row to NULL */
+	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
+	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+
+	if (!cstate->opts.handler->from_next(cstate, econtext, values, nulls))
+	{
+		return false;
 	}
 
 	/*
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..f906a6cf7f 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,205 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyHandlerOps implementation of COPY TO for "text" and "csv".
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their behavior.
+ * We can split this implementation and stop referring cstate->opts.csv_mode
+ * later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+	case COPY_FILE:
+		/* Default line termination depends on platform */
+#ifndef WIN32
+		CopySendChar(cstate, '\n');
+#else
+		CopySendString(cstate, "\r\n");
+#endif
+		break;
+	case COPY_FRONTEND:
+		/* The FE/BE protocol uses \n as newline for all platforms */
+		CopySendChar(cstate, '\n');
+		break;
+	default:
+		break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file
+	 * encoding, because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopySendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyHandlerOps implementation for "binary" COPY TO.
+ */
+
+void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/* Generate header for a binary copy */
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	CopySendInt32(cstate, 0);
+	/* No header extension */
+	CopySendInt32(cstate, 0);
+}
+
+void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopySendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +397,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +431,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +933,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +942,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +957,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.handler->to_start(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +996,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.handler->to_end(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1012,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.handler->to_one_row(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index ebbe9052cb..e64e121c01 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copy.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 72c7963578..237ac42742 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copy.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copy.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 3ba8cb192c..8f12927a4d 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -378,3 +378,4 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anycompatible);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anycompatiblenonarray);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
diff --git a/src/include/catalog/meson.build b/src/include/catalog/meson.build
index dcb3c5f766..d9aa3f14ba 100644
--- a/src/include/catalog/meson.build
+++ b/src/include/catalog/meson.build
@@ -69,6 +69,7 @@ catalog_headers = [
   'pg_publication_rel.h',
   'pg_subscription.h',
   'pg_subscription_rel.h',
+  'pg_copy_handler.h',
 ]
 
 # The .dat files we need can just be listed alphabetically.
@@ -97,6 +98,7 @@ bki_data = [
   'pg_ts_parser.dat',
   'pg_ts_template.dat',
   'pg_type.dat',
+  'pg_copy_handler.dat',
 ]
 bki_data_f = files(bki_data)
 
diff --git a/src/include/catalog/pg_copy_handler.dat b/src/include/catalog/pg_copy_handler.dat
new file mode 100644
index 0000000000..052329cb53
--- /dev/null
+++ b/src/include/catalog/pg_copy_handler.dat
@@ -0,0 +1,25 @@
+#----------------------------------------------------------------------
+#
+# pg_copy_handler.dat
+#    Initial contents of the pg_copy_handler system catalog.
+#
+# Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
+# Portions Copyright (c) 1994, Regents of the University of California
+#
+# src/include/catalog/pg_copy_handler.dat
+#
+#----------------------------------------------------------------------
+
+[
+
+{ oid => '4554', oid_symbol => 'TEXT_COPY_HANDLER_OID',
+  descr => 'text copy handler',
+  chname => 'text', copyhandler => 'text_copy_handler'},
+{ oid => '4555', oid_symbol => 'CSV_COPY_HANDLER_OID',
+  descr => 'csv copy handler',
+  chname => 'csv', copyhandler => 'csv_copy_handler'},
+{ oid => '4556', oid_symbol => 'BINARY_COPY_HANDLER_OID',
+  descr => 'binary copy handler',
+  chname => 'binary', copyhandler => 'binary_copy_handler'},
+
+]
diff --git a/src/include/catalog/pg_copy_handler.h b/src/include/catalog/pg_copy_handler.h
new file mode 100644
index 0000000000..74ad06f4d6
--- /dev/null
+++ b/src/include/catalog/pg_copy_handler.h
@@ -0,0 +1,50 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_copy_handler.h
+ *	  definition of the "copy handler" system catalog (pg_copy_handler)
+ *
+ *
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/catalog/pg_copy_handler.h
+ *
+ * NOTES
+ *	  The Catalog.pm module reads this file and derives schema
+ *	  information.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef PG_COPY_HANDLER_H
+#define PG_COPY_HANDLER_H
+
+#include "catalog/genbki.h"
+#include "catalog/pg_copy_handler_d.h"
+
+/* ----------------
+ *		pg_copy_handler definition.  cpp turns this into
+ *		typedef struct FormData_pg_copy_handler
+ * ----------------
+ */
+CATALOG(pg_copy_handler,4551,CopyHandlerRelationId)
+{
+	Oid			oid;			/* oid */
+
+	/* copy handler name */
+	NameData	chname;
+
+	/* handler function */
+	regproc		copyhandler BKI_LOOKUP(pg_proc);
+} FormData_pg_copy_handler;
+
+/* ----------------
+ *		Form_pg_copy_handler corresponds to a pointer to a tuple with
+ *		the format of pg_copy_handler relation.
+ * ----------------
+ */
+typedef FormData_pg_copy_handler *Form_pg_copy_handler;
+
+DECLARE_UNIQUE_INDEX(pg_copy_handler_name_index, 4552, CopyHandlerNameIndexId, pg_copy_handler, btree(chname name_ops));
+DECLARE_UNIQUE_INDEX_PKEY(pg_copy_handler_oid_index, 4553, CopyHandlerOidIndexId, pg_copy_handler, btree(oid oid_ops));
+
+#endif							/* PG_COPY_HANDLER_H */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index fb58dee3bc..8b9b60c90f 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -948,6 +948,20 @@
   prorettype => 'void', proargtypes => 'regclass int8',
   prosrc => 'brin_desummarize_range' },
 
+# Copy handlers
+{ oid => '4557', descr => 'text copy handler',
+  proname => 'text_copy_handler', provolatile => 'v',
+  prorettype => 'copy_handler', proargtypes => 'internal',
+  prosrc => 'text_copy_handler' },
+{ oid => '4558', descr => 'csv copy handler',
+  proname => 'csv_copy_handler', provolatile => 'v',
+  prorettype => 'copy_handler', proargtypes => 'internal',
+  prosrc => 'csv_copy_handler' },
+{ oid => '4559', descr => 'binary copy handler',
+  proname => 'binary_copy_handler', provolatile => 'v',
+  prorettype => 'copy_handler', proargtypes => 'internal',
+  prosrc => 'binary_copy_handler' },
+
 { oid => '338', descr => 'validate an operator class',
   proname => 'amvalidate', provolatile => 'v', prorettype => 'bool',
   proargtypes => 'oid', prosrc => 'amvalidate' },
@@ -7609,6 +7623,13 @@
 { oid => '268', descr => 'I/O',
   proname => 'table_am_handler_out', prorettype => 'cstring',
   proargtypes => 'table_am_handler', prosrc => 'table_am_handler_out' },
+{ oid => '388', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f',
+  prorettype => 'copy_handler', proargtypes => 'cstring',
+  prosrc => 'copy_handler_in' },
+{ oid => '389', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '5086', descr => 'I/O',
   proname => 'anycompatible_in', prorettype => 'anycompatible',
   proargtypes => 'cstring', prosrc => 'anycompatible_in' },
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index f6110a850d..aa6d731cb5 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -639,6 +639,13 @@
   typcategory => 'P', typinput => 'table_am_handler_in',
   typoutput => 'table_am_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '3814',
+  typname => 'copy_handler',
+  descr => 'pseudo-type for the result of a copy handler',
+  typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '3831',
   descr => 'pseudo-type representing a range over a polymorphic base type',
   typname => 'anyrange', typlen => '-1', typbyval => 'f', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..c2af6f2aff 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -30,6 +30,33 @@ typedef enum CopyHeaderChoice
 	COPY_HEADER_MATCH,
 } CopyHeaderChoice;
 
+#define DEFAULT_COPY_HANDLER		"text"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyRoutine
+{
+	/* this must be set to T_CopyRoutine */
+	NodeTag		type;
+
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*to_start) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*to_one_row) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*to_end) (CopyToState cstate);
+
+	void		(*from_start) (CopyFromState cstate, TupleDesc tupDesc);
+	bool		(*from_next) (CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+	void		(*from_error_callback) (CopyFromState cstate);
+} CopyRoutine;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -63,12 +90,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyRoutine	   *handler;		/* copy handler routines */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -91,6 +115,9 @@ extern uint64 CopyFrom(CopyFromState cstate);
 
 extern DestReceiver *CreateCopyDestReceiver(void);
 
+extern CopyRoutine *GetCopyRoutine(Oid copyhandler);
+extern CopyRoutine *GetCopyRoutineByName(char *fmt);
+
 /*
  * internal prototypes
  */
@@ -102,4 +129,20 @@ extern uint64 DoCopyTo(CopyToState cstate);
 extern List *CopyGetAttnums(TupleDesc tupDesc, Relation rel,
 							List *attnamelist);
 
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate, ExprContext *econtext,
+									 Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
+
 #endif							/* COPY_H */
diff --git a/src/test/regress/expected/oidjoins.out b/src/test/regress/expected/oidjoins.out
index 215eb899be..a1ab73dc37 100644
--- a/src/test/regress/expected/oidjoins.out
+++ b/src/test/regress/expected/oidjoins.out
@@ -266,3 +266,4 @@ NOTICE:  checking pg_subscription {subdbid} => pg_database {oid}
 NOTICE:  checking pg_subscription {subowner} => pg_authid {oid}
 NOTICE:  checking pg_subscription_rel {srsubid} => pg_subscription {oid}
 NOTICE:  checking pg_subscription_rel {srrelid} => pg_class {oid}
+NOTICE:  checking pg_copy_handler {copyhandler} => pg_proc {oid}
-- 
2.41.0

#18Michael Paquier
michael@paquier.xyz
In reply to: Junwang Zhao (#17)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 08, 2023 at 10:32:27AM +0800, Junwang Zhao wrote:

I can see FDW related utility commands but no TABLESAMPLE related,
and there is a pg_foreign_data_wrapper system catalog which has
a *fdwhandler* field.

+ */ +CATALOG(pg_copy_handler,4551,CopyHandlerRelationId)

Using a catalog is an over-engineered design. Others have provided
hints about that upthread, but it would be enough to have one or two
handler types that are wrapped around one or two SQL *functions*, like
tablesamples. It seems like you've missed it, but feel free to read
about tablesample-method.sgml, that explains how this is achieved for
tablesamples.

If we want extensions to create a new copy handler, I think
something like pg_copy_hander should be necessary.

A catalog is not necessary, that's the point, because it can be
replaced by a scan of pg_proc with the function name defined in a COPY
query (be it through a FORMAT, or different option in a DefElem).
An example of extension with tablesamples is contrib/tsm_system_rows/,
that just uses a function returning a tsm_handler:
CREATE FUNCTION system_rows(internal)
RETURNS tsm_handler
AS 'MODULE_PATHNAME', 'tsm_system_rows_handler'
LANGUAGE C STRICT;

Then SELECT queries rely on the contents of the TABLESAMPLE clause to
find the set of callbacks it should use by calling the function.

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyRoutine
+{

FWIW, I find weird the concept of having one handler for both COPY
FROM and COPY TO as each one of them has callbacks that are mutually
exclusive to the other, but I'm OK if there is a consensus of only
one. So I'd suggest to use *two* NodeTags instead for a cleaner
split, meaning that we'd need two functions for each method. My point
is that a custom COPY handler could just define a COPY TO handler or a
COPY FROM handler, though it mostly comes down to a matter of taste
regarding how clean the error handling becomes if one tries to use a
set of callbacks with a COPY type (TO or FROM) not matching it.
--
Michael

#19Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#18)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 8, 2023 at 2:17 PM Michael Paquier <michael@paquier.xyz> wrote:

On Fri, Dec 08, 2023 at 10:32:27AM +0800, Junwang Zhao wrote:

I can see FDW related utility commands but no TABLESAMPLE related,
and there is a pg_foreign_data_wrapper system catalog which has
a *fdwhandler* field.

+ */ +CATALOG(pg_copy_handler,4551,CopyHandlerRelationId)

Using a catalog is an over-engineered design. Others have provided
hints about that upthread, but it would be enough to have one or two
handler types that are wrapped around one or two SQL *functions*, like
tablesamples. It seems like you've missed it, but feel free to read
about tablesample-method.sgml, that explains how this is achieved for
tablesamples.

Agreed. My previous example of FDW was not a good one, I missed something.

If we want extensions to create a new copy handler, I think
something like pg_copy_hander should be necessary.

A catalog is not necessary, that's the point, because it can be
replaced by a scan of pg_proc with the function name defined in a COPY
query (be it through a FORMAT, or different option in a DefElem).
An example of extension with tablesamples is contrib/tsm_system_rows/,
that just uses a function returning a tsm_handler:
CREATE FUNCTION system_rows(internal)
RETURNS tsm_handler
AS 'MODULE_PATHNAME', 'tsm_system_rows_handler'
LANGUAGE C STRICT;

Then SELECT queries rely on the contents of the TABLESAMPLE clause to
find the set of callbacks it should use by calling the function.

+/* Routines for a COPY HANDLER implementation. */
+typedef struct CopyRoutine
+{

FWIW, I find weird the concept of having one handler for both COPY
FROM and COPY TO as each one of them has callbacks that are mutually
exclusive to the other, but I'm OK if there is a consensus of only
one. So I'd suggest to use *two* NodeTags instead for a cleaner
split, meaning that we'd need two functions for each method. My point
is that a custom COPY handler could just define a COPY TO handler or a
COPY FROM handler, though it mostly comes down to a matter of taste
regarding how clean the error handling becomes if one tries to use a
set of callbacks with a COPY type (TO or FROM) not matching it.

I tend to agree to have separate two functions for each method. But
given we implement it in tablesample-way, I think we need to make it
clear how to call one of the two functions depending on COPY TO and
FROM.

IIUC in tablesamples cases, we scan pg_proc to find the handler
function like system_rows(internal) by the method name specified in
the query. On the other hand, in COPY cases, the queries would be
going to be like:

COPY tab TO stdout WITH (format = 'arrow');
and
COPY tab FROM stdin WITH (format = 'arrow');

So a custom COPY extension would not be able to define SQL functions
just like arrow(internal) for example. We might need to define a rule
like the function returning copy_in/out_handler must be defined as
<method name>_to(internal) and <method_name>_from(internal).

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#20Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#19)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 08, 2023 at 03:42:06PM +0900, Masahiko Sawada wrote:

So a custom COPY extension would not be able to define SQL functions
just like arrow(internal) for example. We might need to define a rule
like the function returning copy_in/out_handler must be defined as
<method name>_to(internal) and <method_name>_from(internal).

Yeah, I was wondering if there was a trick to avoid the input internal
argument conflict, but cannot recall something elegant on the top of
my mind. Anyway, I'd be OK with any approach as long as it plays
nicely with the query integration, and that's FORMAT's DefElem with
its string value to do the function lookups.
--
Michael

#21Hayato Kuroda (Fujitsu)
kuroda.hayato@fujitsu.com
In reply to: Junwang Zhao (#17)
RE: Make COPY format extendable: Extract COPY TO format implementations

Dear Junagn, Sutou-san,

Basically I agree your point - improving a extendibility is good.
(I remember that this theme was talked at Japan PostgreSQL conference)
Below are my comments for your patch.

01. General

Just to confirm - is it OK to partially implement APIs? E.g., only COPY TO is
available. Currently it seems not to consider a case which is not implemented.

02. General

It might be trivial, but could you please clarify how users can extend? Is it OK
to do below steps?

1. Create a handler function, via CREATE FUNCTION,
2. Register a handler, via new SQL (CREATE COPY HANDLER),
3. Specify the added handler as COPY ... FORMAT clause.

03. General

Could you please add document-related tasks to your TODO? I imagined like
fdwhandler.sgml.

04. General - copyright

For newly added files, the below copyright seems sufficient. See applyparallelworker.c.

```
* Copyright (c) 2023, PostgreSQL Global Development Group
```

05. src/include/catalog/* files

IIUC, 8000 or higher OIDs should be used while developing a patch. src/include/catalog/unused_oids
would suggest a candidate which you can use.

06. copy.c

I felt that we can create files per copying methods, like copy_{text|csv|binary}.c,
like indexes.
How do other think?

07. fmt_to_name()

I'm not sure the function is really needed. Can we follow like get_foreign_data_wrapper_oid()
and remove the funciton?

08. GetCopyRoutineByName()

Should we use syscache for searching a catalog?

09. CopyToFormatTextSendEndOfRow(), CopyToFormatBinaryStart()

Comments still refer CopyHandlerOps, whereas it was renamed.

10. copy.h

Per foreign.h and fdwapi.h, should we add a new header file and move some APIs?

11. copy.h

```
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
```

Are above changes really needed?

12. CopyFormatOptions

Can we remove `bool binary` in future?

13. external functions

```
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate,
ExprContext *econtext,
+
  Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
```

FYI - If you add files for {text|csv|binary}, these declarations can be removed.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

#22Junwang Zhao
zhjwpku@gmail.com
In reply to: Hayato Kuroda (Fujitsu) (#21)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Dec 9, 2023 at 10:43 AM Hayato Kuroda (Fujitsu)
<kuroda.hayato@fujitsu.com> wrote:

Dear Junagn, Sutou-san,

Basically I agree your point - improving a extendibility is good.
(I remember that this theme was talked at Japan PostgreSQL conference)
Below are my comments for your patch.

01. General

Just to confirm - is it OK to partially implement APIs? E.g., only COPY TO is
available. Currently it seems not to consider a case which is not implemented.

For partially implements, we can leave the hook as NULL, and check the NULL
at *ProcessCopyOptions* and report error if not supported.

02. General

It might be trivial, but could you please clarify how users can extend? Is it OK
to do below steps?

1. Create a handler function, via CREATE FUNCTION,
2. Register a handler, via new SQL (CREATE COPY HANDLER),
3. Specify the added handler as COPY ... FORMAT clause.

My original thought was option 2, but as Michael point, option 1 is
the right way
to go.

03. General

Could you please add document-related tasks to your TODO? I imagined like
fdwhandler.sgml.

04. General - copyright

For newly added files, the below copyright seems sufficient. See applyparallelworker.c.

```
* Copyright (c) 2023, PostgreSQL Global Development Group
```

05. src/include/catalog/* files

IIUC, 8000 or higher OIDs should be used while developing a patch. src/include/catalog/unused_oids
would suggest a candidate which you can use.

Yeah, I will run renumber_oids.pl at last.

06. copy.c

I felt that we can create files per copying methods, like copy_{text|csv|binary}.c,
like indexes.
How do other think?

Not sure about this, it seems others have put a lot of effort into
splitting TO and From.
Also like to hear from others.

07. fmt_to_name()

I'm not sure the function is really needed. Can we follow like get_foreign_data_wrapper_oid()
and remove the funciton?

I have referenced some code from greenplum, will remove this.

08. GetCopyRoutineByName()

Should we use syscache for searching a catalog?

09. CopyToFormatTextSendEndOfRow(), CopyToFormatBinaryStart()

Comments still refer CopyHandlerOps, whereas it was renamed.

10. copy.h

Per foreign.h and fdwapi.h, should we add a new header file and move some APIs?

11. copy.h

```
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
```

Are above changes really needed?

12. CopyFormatOptions

Can we remove `bool binary` in future?

13. external functions

```
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate,
ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
```

FYI - If you add files for {text|csv|binary}, these declarations can be removed.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

Thanks for all the valuable suggestions.

--
Regards
Junwang Zhao

#23Hannu Krosing
hannuk@google.com
In reply to: Junwang Zhao (#22)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Junwang

Please also see my presentation slides from last years PostgreSQL
Conference in Berlin (attached)

The main Idea is to make not just "format", but also "transport" and
"stream processing" extendable via virtual function tables.

Btw, will any of you here be in Prague next week ?
Would be a good opportunity to discuss this in person.

Best Regards
Hannu

Show quoted text

On Sat, Dec 9, 2023 at 9:39 AM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Sat, Dec 9, 2023 at 10:43 AM Hayato Kuroda (Fujitsu)
<kuroda.hayato@fujitsu.com> wrote:

Dear Junagn, Sutou-san,

Basically I agree your point - improving a extendibility is good.
(I remember that this theme was talked at Japan PostgreSQL conference)
Below are my comments for your patch.

01. General

Just to confirm - is it OK to partially implement APIs? E.g., only COPY TO is
available. Currently it seems not to consider a case which is not implemented.

For partially implements, we can leave the hook as NULL, and check the NULL
at *ProcessCopyOptions* and report error if not supported.

02. General

It might be trivial, but could you please clarify how users can extend? Is it OK
to do below steps?

1. Create a handler function, via CREATE FUNCTION,
2. Register a handler, via new SQL (CREATE COPY HANDLER),
3. Specify the added handler as COPY ... FORMAT clause.

My original thought was option 2, but as Michael point, option 1 is
the right way
to go.

03. General

Could you please add document-related tasks to your TODO? I imagined like
fdwhandler.sgml.

04. General - copyright

For newly added files, the below copyright seems sufficient. See applyparallelworker.c.

```
* Copyright (c) 2023, PostgreSQL Global Development Group
```

05. src/include/catalog/* files

IIUC, 8000 or higher OIDs should be used while developing a patch. src/include/catalog/unused_oids
would suggest a candidate which you can use.

Yeah, I will run renumber_oids.pl at last.

06. copy.c

I felt that we can create files per copying methods, like copy_{text|csv|binary}.c,
like indexes.
How do other think?

Not sure about this, it seems others have put a lot of effort into
splitting TO and From.
Also like to hear from others.

07. fmt_to_name()

I'm not sure the function is really needed. Can we follow like get_foreign_data_wrapper_oid()
and remove the funciton?

I have referenced some code from greenplum, will remove this.

08. GetCopyRoutineByName()

Should we use syscache for searching a catalog?

09. CopyToFormatTextSendEndOfRow(), CopyToFormatBinaryStart()

Comments still refer CopyHandlerOps, whereas it was renamed.

10. copy.h

Per foreign.h and fdwapi.h, should we add a new header file and move some APIs?

11. copy.h

```
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
```

Are above changes really needed?

12. CopyFormatOptions

Can we remove `bool binary` in future?

13. external functions

```
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate,
ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
```

FYI - If you add files for {text|csv|binary}, these declarations can be removed.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

Thanks for all the valuable suggestions.

--
Regards
Junwang Zhao

Attachments:

Cloud-friendly COPY.pdfapplication/pdf; name="Cloud-friendly COPY.pdf"Download
%PDF-1.4
% ����
3
0
obj
<<
/Type
/Catalog
/Names
<<
>>
/PageLabels
<<
/Nums
[
0
<<
/S
/D
/St
1
>>
]
>>
/Outlines
2
0
R
/Pages
1
0
R
>>
endobj
4
0
obj
<<
/Creator
(��Google)
/Title
(��Cloud-friendly COPY)
>>
endobj
5
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
6
0
R
/Resources
7
0
R
/Annots
9
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
6
0
obj
<<
/Filter
/FlateDecode
/Length
8
0
R
>>
stream
x��V�nG�{�������cD< ���G9�86X����#�l�5`�������wH.�x��������f���������c*�q�fBs���G��r������L�uD�5���}�O$7NGbB�&������PrL�nN^>����dK��:�(����u��q\Qx>&�*������DM�������P������:�;W�T�c7�o��*(G�d�/[g�>�v����7���k?�x����������u�YO��i�'�!]!���iq������-�A��[^�	�'#r���W���1����t�6��V�+�V8�`�JM�gQ�{<�=6�I��T&c�0�[2DB:
���&YFS����47��x����B)�%Sz��	\[`�ZQe�sx��������/����9}2���3h�9=��6G����0^kWb������tsn�����b��s)�s4A�M,�'kG�~S����:�!^���FH�]2Y'Kl�c�#y�{K�������(��,��e�T����A`��Pc����m)���T'�bG|����A���ou�����.�7���^���$����2�F��l|����K2-�KV��*�DZpL>QtH:P�he���uIM�xE����U�����XUy\[�~����+������pW
H�4�n�Tg+��g�\
����;[b�S����v[{�S�Bz4Y]�N�F$�v<U|��*Q[��9��`@H��!,�����q����;�q���L��O-���iL��?"����V�`���+�+<W�dT��ePI��^s%��(RVEU3iK�E����W�q�����eP�@]�>X�A�*f�DM4k	y����1��1!^�b�����mV�{{���bP�q�wd�����N���'��G��k
N
P	�]���w)6�~���/��/��K����|����� �@@���^~@�~6�3����i���Y����R��w
endstream
endobj
8
0
obj
1015
endobj
9
0
obj
[
<<
/Type
/Annot
/Subtype
/Link
/Rect
[
465.6496
74.49528
597.4959
91.29527
]
/Border
[
0
0
0
]
/A
<<
/Type
/Action
/S
/URI
/URI
(mailto:hannuk@google.com)
>>
>>
]
endobj
10
0
obj
<<
/CA
1.0
/ca
1.0
>>
endobj
11
0
obj
<<
/CA
0
/ca
0
>>
endobj
13
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
512
/Height
528
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/SMask
15
0
R
/Filter
/DCTDecode
/Length
16
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((��"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�R�(��(��(��(���a���
�;i%��0��<��WIa���U{���8&4�=3����)��Fs�|L���M����o��<�p2����G��`��m�Y ���E���?WDpr{��X����v�����K1^�Z��V?�u������
��Z�`�Vf���<�<5��+0�#%A����7�5x�.�2�v���k�����;�~�>����#�����o��.-n-���	a���B��f������FR����:+�nl�n���h&+���6?:�s��&�n��<��������FZ���<����Y8cmq<,NF�:����YW�	��&���.p�F'�G�X�
Qt5�&�����u�j��	�g������Vmb���7RR��QHaEIRO*�o$��QI'��Xx*�`�X�����}�\)�
"u#���9��K;$�J��
iV�3D�A���``~b�-���B���
���Q�^+�89?�����|(��mT�$Gc8���g��������>�?��B��`���'��D�;��'R�������4���kO������J*��L���<�oj��Y
��?�$ ����o�Eu�������5�RxJo��2��yT������d u�C�MP����P�6����#*	�k�(�x8�e,l�����I���!��	'���O
��3n!F�+�;���zz��1UU,r�d�?��-(���&���(�,�p�yx��$����+N���\O�Cq8�6��}x���Q[�Mt0�"��f[�:U�K'?�]��l��m��!�(�z@�b"i<�y&3�>c�
�����t���iA,� ���������?3*��a�y�	�4~����*�����l�w���7�%/i�_x�������h���.�������s��*>��<�����x��5�����s�W�3�dV��S�Q��&��H��aj%c
1����
����~����3�)���=�ki\�C!�����4��y�����\�?J�o��A����9���e�x����=6����X~=�����
r�iEH�<���Z��r��")���|��9�+���^��W����)X�����{����_e��������O�1�/��Q�O�7+��#��|�!��i����H���2��<��Z�gOtu��
�2�QY�Q@Q@Q@Q@Q@Wc��4�n5]��@e�N��^�v��t����H�R4��s�V�y�I��"P4��/N������/��5�n������������"�c�FT`��W�O
o�<����m�������(���=���
�C]�S���O�h3�������r}��|5�"�4�_��O'V��#������'Z�l�gST�fTbz�����][S�t�+P�V8
���,����A�7�t��h�q��i�����[���`
��7�Q��L�6��_�.����CO<K��q?�k��K������P�.H����tVOS��`���7����.�~����������x�.E��O��'�_HQK�U
��>��r��zT�2c�[����Ve���[c7�R`����`*���kS�����|g�X>�����w-������?Z���R�r�9?��k~F�����6�������?�,a��Z,k��x%�G��W�:���j8-�Al���f��B�A�;X����mj���-�k2��O�kX����1���S���{��_g�v�J�m�W����:���i���]J0x6�a��*�y���X^i7�U�����.bh�c���GNFG5��'�w0q�=Z����*�bZ�y-�?u�������~	a1mNd1�a!'������z*�w���TJ� �����Ei
D��9>��&����n/�����[��NP������[��5{�����4�s��%�����
�T�5���:�Es��
	b�ji�u���:M���I"����6������m�_���J�k�;������-���@��`��,b�(��	��|������V���������u�k�SuSu��B������,��+�:+���7XJk}O������?�����r5N��6�� �
������{e?Y����R�x,�.71�������'����y�]�f�V�n:H��
_EQMb����}�u�^3�RSM�����C�>�\����I�M'P�T8/5��~���5��d`�+H�$�Fr�G�>(�4MW]�SE�n��q��@}����Ez��C���_R�������A�U������"��E
������
�G�;�G�|
�m����j���T�c'�X�U���
|`�"����s��>�s��5��H�pz�Ug-��4��!����M���B���Q�T��}�M��y�XB��^u��k��W�����7�P���\VM��3�R���/�;+��~/xj���.?���L*�|f���N�O�"�='8��1��=�=:����D������������;+���S�y�B?��&�x�����^#�*+�xnP��1���]C��_�����I�c�=`�G��~��a��P!l�{	\�Q:����i���M����#T�k��H7��Y��rZ�M���c�k����s�mV��s�.O���I5��� �"��5���F��G��!�G��<��E�����>���F�~��)���w��)!�>�R�G_��E}�Y>"����;_#[���+:���\a���
t����y����m6X�X�9Q^6*� ��~/����w��_��7���0��W��U��|�Z���wC�.U�G���=�"��V>q����H�u�[�����$����?�$�/��,.q4R�������_P���-��	#�px ��9�\,e�tf��R���7Et>#���R����g�X���>�G#��z���Pv���q��B�(�((��(��)UY�*�N$�J���>�{��~�s�>���kZT�IYU��F����[[��V�<��D�z��������e�}�O_.�<��HT�6=�����D�J=�<��V]�24m*�[�c��me����c����R@�~�/�}7MX��PSS���a���}�'���{���	�^���I���;��3y��t��������������u��lq�Q�q"�(���=�VW�|C��z����#�O�N�����^I�O�7��x~�-b�'��>�~��s\r������a�-{u=�GH��FTE,�W3�x��i+>�o#���������|�����)�U���9�%rT}��P�Y����V�	mJ�/�=�������.1��*)��?�e\|kP���0���/�S^7EG���,�-���~�=e�4�����{�1��iW�U�?>�nG���-y-�����k�?��_�{$������;���Ei[�f�\�q��1z�Tp?��^E?k#H�X����G��<)r���<��:������G�x�G����T��>����Y�|�HT��U�GU> ��8'�u�g��W��n���e��K�u^��6���8?�u�W����d��u�c���\��*���K>�-*&���>���m������9�n$P�~�����������]X����������h�#���J�m�N2Q_>�y�����(�(W���������	�����M*s�v/���? �p����$��
��^T������Y�������5�GD�����0�)�]��_f�l���%?4��Vc��t���F!T��{W����n�����j#� 8�O����q�*���bg�M]�[���N�o'dzN��k4�4�)u�D���9����~8��|Q���F�}!�����������b�����{�y|����<���Jq����	�����p���f#��E��q�;������:|>�`y?�Z��+����!�/���<}y}��|N��+�v�Z��<H|�3�`���Em�����k�#�U����|Q��WM�������-��h��e=���?�����exIoM~_��2�v�=�������>�R�d����M���5-N(��m�#�m��W�W%L�
/����:!����g�Q�H��et<�S�i�����_i���.-[9���A��������[R��[�}B���>�|�����*�A^�j_��/����S��V�Oj�k���U[�>9��K�c��*�qG��m�k��[�yM���lr}f�	���Z�gI�TV~gk�X�4�(��|4�|?�{h��lG>m���?�N�����q �2E}�\?�>i^!�.m����>tK���^�Q���\����������?������TV��<;��r��������*���[����+&�j��98J��f��QE�
B����/i����t���@v�)U?U�k���,�������Q�u�Sc�������*����qu��m~_v��Z��Q+����x����?+�������h���U�`�~�W��������s�i7��19eS����Z*��g
��:W��u���Y�v���� ���Y������A��U=T��
y��~.�����$"�S����xu_�}+�������T����+PGZ�2���
�8������������d����R��,������?����z���������g����
'�����[���HC����5�G�y�l'���1W�o	��]�Js��n=;�����V�ot�Fk
R�K[�N)#������
T����Efq���J��:+��w�����NO���bQ��������^UZN��=jUUEtQEfhQR�B�71A7��=2NPz���Q�k��
k+�n������H��e�Zu�V��1����?�[Ey$i$v��,�N�'�������Z��+�6|���k���h�o�i�e`�us���HrG������4X4�.-�F2�~�����c��
��Y������UV�.q-���/���A����W"��v[#�G����W�|B������	��PRVI����i����G��������9J�cm��c�aO��On�zx��:��6g��m���W����^�j7ou�\Ksr�zI['��=���E`|�nN�(��B
(��
(��
(��
(��
(��p2zW��$��Hu�r���`q��vv�=�o�L�������a�-����Y�������������\�-Zbj�E����C\���M=�5�P�ug?�Q��~#��<?��}|�b���zF��=�g�����������~DP��"_A�}O�k-�e��3����c��Yk#O�>5�<H�Z�M�������N�^��QE}��C���>z�IT�4��QE�EPEPEPEPEP@=k�������RHo���������Q�9��+�)��%H�N���h;3����J�`YM�����"���{��A_*���,N���r:O�#��P�g��C��N���z���t�B��k�1���x}Wn��3��fQ��WG�����}.�X���S�K�i(���>���?�?�<8d�����Kc2A����k��S�4R$���:�n+)� ���2�`
��z��AKs|f�26�����������
>������^{4�g�F=?����������f|f+	S>J��QE'0QEQEWE�j�����e��k)&6�#���~9�v�i��.�Y������<a���������~��C��������]|�ays��Ewc<��1�$g�=�������M��l���yA��VOU��]���>�-�����]%���/|D�6��M/�����?f�U�F}�$=������|A�_�W�L��0]�yU��t?������k�%��^4������@Z]�l{T<d}P
v����Ylz�:�����%q�5������k��h�}���������m6�G��t�J����3�bpF=����N�3��9R���tWI�Mt����@�����8F�=��?J����%��^S��
��i�I���r#��g��G����q���
��4{[r�]P��Rk�	i���.|��r�z����O�Mz]~�3i��>��u��������30X����U^K�s_c����	i�R��{�q�r������z�����.�.�<��GA\_�/�1�l�a��w�����'���r=��vTFw!UFI=���s��/�n��~��*�O������>�����m���G����f333;f$�c�I�I����>$(��(��(��(��(��(��+k���%���*�w� ��q���^�������xhh��1��PV��#���O����y������YE�+W�_3����O����5������ys
���7R,PD����������|M����Y��a!�����S�8'���\X���~~H�<Eh���}�%�?�x�Wk�����m�?���������+��R�*pVH���S���aEV��Q@Q@Q@Q@Q@Q@Q@Q@g��gw���2n������)�S=>�����J�m5k�t��kyFU��A�5��ox?����<�|�k!}�<8��=^&g���ZZO����3����rz��>������(�\�a����A��������_E�m5�:+�>Q$�S���J�_:z��j�[�����-�?�Q^��s���SI���cO��q
 c�C���c��W$�������������(�����(��(��4���44sF�����4�(��>��a���5����SW�r�p'_������y_ �]�i��^YJ������z�?���+����h�����w�q��x#�]4���>�)�~�eS�_��3����D�6����u�(��z�D91�S���n5���9�_tW��|>����V�����F8]��Q�p�v
���o�3�J��8
V�5:{Y8.��v?��y�<I��Db�=85�5��;�6��J�p�����������2��89�N��~�6�P�����z�p�-�\�\��D�����~Q��uW������^�����k���wAe��8;1��(_X��~��V�
oWps4�kGd���p?�5�����5Kv:����~���[:O����q~�f\u
ys�|�?�B�t�G������b�v0G���������w��Y�m�k�t�?�(������(��(��(��(��(��(������	��-$M���>��<��~����`p+����b����������D��m�������#�2|7���=����1������;L�6B���<(�w>����H���L�$�����19$��]��Mk���ZdM�,F\v2�����������OaC�=������y�iW�m��Q^��QEQEQEQEQEQEQEQEQEQEt>
�=��51*n��R��������zQ�%����g
���-��z_-Wq�����W�`���.����?�������8�}�}�%�-������������g�;�$�tY"�J:0�`x ����G�_��� �e�Z�C��X����k�z��^�m�M�N�YRA�7u�����'dw�8��e�-���|�E[����'S���M�6�Q���G�#��J���iE���AERQEQEW�|
�����`��o�#o�4O��}y�l�2����F�n���`��&�.�8*��"]�����o�gLi:.��K�;�9��wd�1���i�>��l.>�M�� �q����Mz-D���jrG���F�Z���'rHc���Z�����+/�ev'0�:����5��W��2��DE���Bwu��fe>�?�5��_���?��Sv���g���?Z���D���&�(�	ZW�g�?�>���F
�
�$���X��k���
X����*��Z�E�P��M�]���y<�����+�������rA'�.����~)��2e�}�t��Y�E��\-�S��������QE�
(��
(��
(��
(��
(��
���[��--�3�H�FM�p?SQWu�_L����3:��Opx�w�Q��g�Uwcl5oV4���-.�-7M�����%�>�1M����������[���Np=��y���O������%��a��L1���~u��(}b�iw�_����NK���<j��[���n��v���1��MEE�"I+#���(��`QEQEQEQEQEQEQEQEQEQEQE{?�O�B���L�[.av<���^�L{�����u��m�����������>�dbk�j�k�5��m���2g%p�~�5����T��^������O������8���v�����Y�.�8}~���O����$E�$P����d�_/|@��xg��j�����f<�2zg������c��3�,�"=�{��QX�<QEQE��6�G:�����9���d���pi��;j��+�����x��YH�������)�>��?��0��MwC�G��>�|�X�1F
��R�8<���j��@���?p���{W�G�M�I�iq5��i�Z8QI2V��������4��]�?Z��j*��
���<Y� �ua��V��h-����s_��|�0�l��}|���Z��1�O�Z�	0��*f�7��b��Br���|�EW��QEQEQEQEQEQEW�~��w��jz�.�q
��Pg����^_N|/�������"��=s!/��c��i-n{Y.|O;�+���Mx_�C�~.6��K(V<z3|��+�W�W�:���u�B���=������h��+��
\��Q����L�sI���w�h�����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��x��;Zm.��k|~L�`8�����-p������Hee��r�|V8�R�.��j�3S]�����������	��O����'�����Et~�W_����W]�(�>��{[,���Jnp��C����&���H����������/��R V� �x������XU������S�9�Ku�QE�
(��
�����J��I�?6����-����HF9����������y�F=�>��?����?3t{o(}]������;��q�|2��A��U�����+�/3�*����>[�O��y�������2�~�\��tE����5�U�%�y4�8������|q��zi[���1�V��d��c����m��j�KfLwG���h��{}�]!���]�q?�~�G��	���+����K��S�/�>p��+���(��(��(��(��(��(��T��u�1���Q�x���+mk	�bEA���������H!�"'��`�������>���hN}�_w�9������jwc�Cm#��i�����F�t����Tm�3���#�����������K�	�k+�Q��?�`��p2kOJ�umX�t���#!�6���6��vs�4�����.N�W3(��O�[�\`��gh�t.da����-�F�V�#z����k��m���w��:���/�y5�'�&��5K�����Vu��K����9��BW��*��89;s[��y~!}��_Eo���4Eg��f�z��#�q�P+r8�F�XU\��k���%i+QZQEQEQEQEQEQEQ[~�����:m�0g�S�!�����T�(�M�y�Jn�Wf%��W�[e
���4�����_�NI�+�����@LIO���g�'���p��7���;��+K{#��3_JE�}!�����n��=�7���h�v?��?���������������T��eo�����u������k������WV�U���$Q� ��b�~"�&��MZ�����������"���������������9e��!����z���.�5?k�w0�iP������t���Uks���>�����v� ��+#�
(��
�~����:a�V$���?R+��P�g���R�=-�D��?�!����$v�����k��v����~��f/�������
�����]���i�����d���i�{|�������z8ez��lK�&x�r��I����?���u5��H�L�0;�Y�y�H����������#��q%�N�Ys�\���(��t������vE?���>�&���`��E�9����6��$6��:�Z�yz�?u�u�+�Jq�
i��D������iK}�Y]�AI�IT���P�W�5���9�Zc>u����R+�k������(�L�2�E9P}�k���(��(��(��(��(��(���>�g���p������dW���������'�Y�J��Q�k�Z����a�F�f���w��G:�m�y�FY����Er^�i��J�j,�m�����H�w���^���H����;X�W=pi��P�j��*4�����U��Tw�9}�����n������P:���00:QY����bJ�r� ��c�t�k������"6����E/v�~�N��n�k�vg�V��?��%�v���hc���y����������1��.��=��D�F���tz����~2���wS/����EeO�r���Mz���R���]$�������u$��DH�o�f�F��=z{�=�Gg�����E�_�z6���?�_����eN�������e|<f�:��Zh��i!�9cb��0T���ez�������Q�4X[�?�:����W�W���q��U#�]�����QE�`QEQEQEQEQ]��.���������I�#�����O���"�p��Y���M���wf�����{z��"?go�F�x���{/��^�ikH��0��@)�^��f��@��S�=M|7<D�J��}�Q��F�y ��Yb���?]L��-���9���������{p	�72�������u?g���?%���=xe����W��/,h2�"�R@�K�\�&���^U>�}-5���Kyg��X����[R��L3^���i��3�j_���`A�A�Q^6����3)��5�0g��w��3��{Y>s�M����}��G/�����&s�5W%m% �
|��t}+��I��C[���S�p��C�+�����!~�5��Ah�������(�v�da����.
���>���-^x��m?�3��=�R�������?�+ZKS��isb�/��gK_+|u���RJ�����w��B?
���$�$����:���A�j%����fR��J��p?
�0q��>�+E#>���S��"�!DE�q���,k���u���j�����+m`1�����+A#��;����v$Ps�6}s����t��9�5��;�@�����k���;�F5��3����{�����"�[o��L�-v��yW��|.<qhz����{0W����W���UZm��M?#�MV�i�����-����V#�UZ�~+��?���,��/���s\�pIY���O���;6QEI�QEQEQEQEQE�W>3�o�����J�����m���v{�+�����}�G���XV��{=<���I�C���?�T�{{qo��2G0s&�	�8��&�j�L�������#�-���������9z�R���������a4�"?��?���5�8QE|#[.z�r~g�N�)�X+t^��� �M����(Q�6:�s���T��:t�@KE���>�O���n���c<J�i�to��.a:���S����4������J�w��
�iu"7��0�1]m�L�R<�������8��wSg�����(���*��U�~{�j��6�=B���Y8?�{���9����lH7��;����?�������V�xF/���C��.p�s)e��xI].�{}���f!<Fb$������`���X'@���OFR0E|��i��j���Z�V�'�x?���k�
���v?f�x�Un����u���%~��Vq�*]$����f��MO��p�QE}y�Q@Q@Q@Q@{���4i��r�w��#�o�������$F�u��}K��-��X�� ���CU��)�����=L�	�R��?�b�y��uF��7
������x>���,W�j�}2�a�c��c��J���1��Jx����+i��G�e4��*����7F�}>;��f���d&	=x��y�����HT6��Z2zQ�k����S����6��FI�2+�$�r���5%�������2��k��M9'�Sz���On����B�+��s��*���\f����
�J�6?���������M5�����}>_�ve�9�n���$�����.s#�q������
C���K�� ~����W�W������S���%�g>o+��|�[�����������?�j������t �@����q�Y���}������};�{/��QY QEoH�mOV��L��t���3O�9��cE�aT�+���zo��o�)1�B�g������O�_DWE%����(���G��_�9��Z��<��+�-�8�����'�<��;PB��`W�����
i�R0{s��������_<W����~�^2W��5y��J��6�"B�����x�z?����a7O R]��G���8�1����o����s��y9M^hK�Yb'i�&c��^�^S�Y���6.��d���@���V��$�v0�F�/���������i��l��p��fV?����{�|��;P���0�v������?T���+�T�s�	+��c��?�y^"�oGK�c�������.�y��bg������[���+?���j�j+H�,����������QY�`QEQEQEQEQE�|�g�#_��m*�#�+�z�����>!i���*����J�F�i|'�dN�g��C���?wbq�_������!�B~��@��O�W_��R�a/E��e���|��(��=�RU�)*��pA����wB:]?�����.����7�ps�T�~3��2�������y�}8��Z+�\E��{?k�+����r<����>yd�g�gi$s�f9&�|?���14l������~���5�)iT�8?��|�*x�Ud������f��jT%������v���7��&x3�����
z�q�-~����U��I���
O���o�j{<U7�o�C�1���%��jx-Q_~|�QEQEQEQE�p������"$#�Pk�F��Q��w��"�@�nA�&��L��A���(�N^����/Y�O�_q����?O��)�_�����!�H�1^@:W�\gN��?&�/�>�'��8�Q_{!EPC�X��wq��f�C���W��3s|��D=I�
���N���A���Z����|C]��?�B]�-�tf�f��(���J��p�x����Y)���?�Z�Z��?x��6�>.~Z~EVg�QJ����v8P:��P�|������I�y6�?�G������V_����|;�i������e��?���j���VVWW
�#i]�FI��vEYX�G�P�>�����2|}����!Kl�Z:��9��������cQ��U�n��D�s=�����b���������<�Q<�����s��"]y����Xc��P�y���'Wu���j�w���v�c�/�R�&�������$����1WS�����^��<���N1�FEx�z��g7�r*�_��v�J��=Z9���3��o����;P���+����p�~ _m+P�r�5���A�x������>��K�����:y��?�<�U���D`���������5�`��@e@:�O�~�+����}�",���*��=E|��Y���^X�K[N��{�b?�yU���8���
����J�QE`|�QEQEQEQEQE��'������/��z�b�g�O�%E�~_����t��)�������$r���K�O���)����_�
�����)��5�����u~��_�>l(�����
(��
(��
Ub�u4�S��Z��&��=�'D����X�5��O�u�������RG�*���M��2`L��h�Oy�g<D�F���#��
������5!t���E�N�c'�Pi��a���(��QEQEQE��	�M��,��/l�c�J���k���>�A.�--�1E�c�|����|�����/���?S�.��]'�C�+�u�si��C�HX}#�5����@��{ov���v1�ht��_��V�`}��
?�������rV�}NR�(��O�
(��;o�x�o��rs�����y�"��r�#]}~��[�>��)��x�����<�N����%�	���Wq��J�@�'��������z����������(����+��W�lx��wAj~�/�>��<W��J���&��}�W�|��yq��4�������WM^G~WC��c�������^o��Z������O�������>}��_�
�������?�|i��V����\/���^�������S~g��_��~���J��F_-0�N��#����+���w�ZY�fu�����_�z5���6�9���QE���W{���u����� �9��c�e�k����7>N����g�����:�.Z��jl�z�;�n������?5��m�8
��o��k��gO��5��bw�����m���H
�����80���������va������.�O��������h-?1h���6��9�\������^=Ex�uK�a[�V����5EW)�aEPEPEPEPEPe��?3���%o������u�����=��������?�}]4��2��v�C���?�_i�����5��k����s�Nq�W_��S�`��X��_0��+�@(��(��(����t,~O�kR�<#�"��}�B5�_������|mo�K��+���XGH���8�����![�����C5V�S��S>.Z6QEP��(��(��(�������}���VM��o���3���h A�k:��H8Kg�Q��������|Sdo�Y�dA� ������z����,�v�q�<���x�����Z���MOW�?���5~��g�QZ~#�:~�<@b6;��������+2��a���*3�.�����AMu
(��,�~��/�'�F�����W�	v��FH��N=H#�Mw���
O�-��u����|�6�K��?|v�g�"?���6���J��������q�d�X���)���y5zu����H�����5p��*[[yn����]���k��p?S_YhZlZ>�e�A�v�,`�x��>���5�tC�x��	W6�ro�F�Q�
��}]�����p���g���_�"��}��]����kX�i�TA_��������w�r��3�9�}O�����u���	��B���$��y��2Q~��W���`�h�w;q���{y�|uZ��v��m��6��I�F�U��4;��� ����Op2
���d��x(o0��+��
���}�S��,Qc�Y���y�3U(�������l��j���4�5;c������O�X���/\��D��s3��7R�����"	#do���^�����k	y����>,���>�������a�������.�u�h��d��F���a���
m\D��$2��"�a���Q�3��Z��I/������Y���]�I���<$��X��U�����fQE!Q@Q@Q@Q@��
������Y��Y���5�5������]`�b_�y?�W�WU?�m�C�	;�g�
�wd����?R?��*��w&�t/�!U��O��v�)�*��1����>�\<W��QE���EPEPEt�Q����e�?w���*���K���)
)�^R�s�]6����w?��_�a��S�:���u%y9/�7�%�q�V2~g?��M�v����W�6������
(��Q@Q@Q@Q@���k�:��l��/����A#�\��W�����Km<S��I�q"0� �u����h���P�L�����8e�"�K?��TU���~�����eu���>�����?�:z��?yo��_����^�",��r(d`U��A�(��[N�f�l���'�������\_���8�-����>H�,�����j�tQE|I��~���
��7�_��O��J�*���-n��#3*��q�k�k���6
Q�'�&|�mVO�<����I���F?��	��k���_�0y�w��71?�J�����}_���<�.*���/�('&��>�C�^-���C[!������J��Y�wc��NUf��w��?
t#�x>�e]�W�3g�,��G�5�Q\����+P����e�-s�=_�q���S]����?B������>w����H�y$O�����x!	���������$���Q�N����.vD���f���B6]"Rs��S���|e�b�F��������c�?3\�Myq%����#>�=��C^=I����)C�*!ETQ@�������m�bb�8����]ey�������.��`�}NF?���p�����'Z���+�l�~��]CKv]�7E�GQ�w��$�^��g�c�7��f��u(�E���8��W�����-G�wae�My:�h�>����PDw�$��pX���5�W��}���
�SE��Lcs��:��J��xey��|vkG�b��=~��7
(�����(��(��(��(�v����/�Z�����Mz}y��������d_1��J������}�Y��O��>��{2����+[�HS�7��&
�������v�:���_���_�C�~AEW�tQ@Q@Me	���2d�S�5
o�&���HFV.~����]�f�qt�.�}����S����#�����+���v,��98/�����5t��������[
q9��� ���*��K��a?�S�1S��)y9EW�G�Q@Q@Q@Q@Q@zW��x[jh����,=$�Q�Q��	��5�m�%������O�#a����lfbh�����5�U��������������s-���O��_���3�E��v��8_5~t�v8���9�7UtdpX`�������"�����z?���=nIF���5�8�����>_����z��Y���'<5YQ�������EN;2{1��H:�������6-��<*�������
����#��>8�g�(��:�p2T������5�m}3�\���Y���_�
k�j�����g���/��a^��C@�����s�.us�D3�����W�x?C��^#��S>\��f������"���$��%	(UQ��R�SL��'��M�_��}|��Cx��O������m1wK��;������0�y�~���7�]`��e�3��xUV ~5�����wS�]?�s<�4���bK��^������2�����W%�
�Ec�7�&m�8���~�����cFy*(,�N�5�� �?��i�>Y;c�Q��g�=��S��a���;�3h����P(��(����cmu�2�:�����7YcI#`��2�r5����
��V�bK�LLO�#� ~����'6JGQ�j2i���&K9�p��m`J� ���6��um�P:0��FA�������V�5o�v13fm=���@�)����B�H�;7��������KO���q����
�Hg�p{W������(��5�-���I>��W������&�����/V^�����QX0QEQEQEQE{/��u���C�-��!���G�^�_;��E�����	{�����$~5�EuSw���-N|$Wk���<��PyZ���+g����+������K.�s�c����\~[��wG0��+5��7>�.��AyhQEx'pQEQEW�����[\8��6G�������O�{��m���X.Ga��&�j�#�!�8�*�@}����O-�����/���j�����>�������	�F�6H�����1��?�5�z�����j��e��x�_��~5�,��<�M;o�F.��������<?���*����������j�*�����tEW�� QEQEQEQEQEQE�<A�����r���#��D�t���P�������++#u ���E}�]}|E��.��t���Q���#�_)�`�d�������Y��t��a�1�>���b\�[�������y�{-y������Q���&���z���_�qn[t����K���}�U��te�(iQ����x't�=7����x>�����2�!���u����pr��/�/�&Y��UG�8���l�w�/y�����+��>��^��
=�$z�����$�V�'�|Ii�.D,|��C���=��������3��c#N�/������;�
Mf�1s�Y� ��}~�k�i�EG(�jF�0��k������y�v��	�c���,@�kx�h����c���������<Q��V��v��m����+��Ib?�_J������Q������������Y�N=��0*
�i���D�j��I��|q�}�H0!��YA���z{���W�����#���J0����h����k&��ENy�������QX�Q@Q@u�/=B{Fp#�7�'��������*��^
N�������G>��)O�i���<O`�^�����x�P�$b#��M'�2>��*����!�����5v�<G�j�H����%:8�P��k��x8�M)�MH�V����3��F��YH���>��������%�$��#������_h�^������$��^�/����I]X��P��T���������K\��Q@Q@Q@Q@4��t�B������U�=��q�W��e�:��m{l����eC�Fk�:���>#���\��m�5��2~e�	����jR����X�N��-���=J��/-&���J�O��y-���]Ko0���S^�\���s<_���#\J������^eo�Ui�~���U����������8Z(��1>�(��(��T�PK�sBM�!lv��O ���������]�T����N��\~�pH�z������;kyg��E�v=$���f	`����K_W��|�&�����X������g����'�"��'��]���u��Fl����S�+�W�
�_��0�U�}z��Z��������QEvQ@Q@Q@Q@Q@Q@u�5����8�|Y^�<+g�o������P�2�z+�c^��Kf]*�����>��oi��H��\��������W���<A��{�7q~��w����0��tu��3���-����+|5a�r���qz���-�������������	�
:���M�����{���
4���P2Mr�0��a����������+{Z���xW��L]x�����-��rG���������|=��t�����9H��~�9?P;W�x/J���<��/�&�Jn�A�`��/���� p0:WD����u�W�6[7��W�����w���W������93o`D�$ti��W�j��[�k�~ ��	xZ�S�kN�m����_�R}�����[����V��Wi$���1�'�I5�a)]������e����=�}HYi
&��?����q��C^Q�]O�WV�u������A8?�I�k�S�l��S�������+�=`��(��(��(��(��x/4nF�G��1�����������k7'�����=��y����z��g���%F��>���?����\���I�8P6������
���y���|c6�3��T�j�x���/����Z�V��D9*4z8y��G��t�__�����������x0�R����������.e�}������6��5���V�������.�U�
(�����(��(��(��h�����Z�,����=b��T����'��G��-<E���6-��	��q�O�����Z������<'�o���� \�;�����q�G�zu���c
���5���O���	s#�2�|q������8�xu�d{�-l�3�����/�N^���]w�q�3O���C��������������x������1�X,��*u���8J*{�K�9LWP�O������*
�J��JNMtg�)+��nx:��z�l�1�<�����?�a��+O'K����;��^����o	��|o�}��o��aW�Pv��t���`����cf�������3��t_�wU���_��6a�A��ys���k�����Q������|V>���������������(��(��(��(��(��(��(��(�����������O��S������}����G##�|�^�������4=BO��W������G�>��o<�9/��[o�g���y_�����I�-����vv���=��)��l�~���>��U�y�X^j�Z���=������?_oJ�Y+��.��Rt�����fx�q�_�����t���q�R�=�}+�����o���|4l�e��j!����G�r{������KJ)�h��?|_�	7�M�����1���Is�q��{G��;�@UF�
	�'���fP��<���NL��y�]<YD�����<���Oq����uM]���������2'���^�������ZA8�$�'���y��R���=*2�J�G7EwV��>no]�#@�?RO��o�P��i�����m�%�����[kEz��"�7����W��s��.V�^|cj>G�����~D�e?3����Z�����2sl�%�`��+�������%i#������(�((�����5��1�tN�8�3����	R�����E��#"�Z��:�]i�k!%����s����v`�i8w8���T�u���}����m���'����A�������uH5��S�9���3�3��:W�����w��m6��������S�'?8G9?��V��^<���������������6w+���'���7W���u[�>�~��F��1�t?B0���S���a���`_����G�~##�+�������QUV���%��+����(��(��(��(�w�%���n�5����gvCd�?���BG@:�Ols?	|u9"�����������?���a����+zp�������E�MM;/�(��kv�.5-Va
�#$�,{*��OW�������G��r��3�*{v�v/`����s��WT)Nj�G�N� ��=��nc1�D���\������9-�n��6G�s�U��F��F�moPp�L��FT�V�q�0tq���Q�:����c���''���/���4�e����DH8�q�����e�\�,<9[���4���Y%Q���+gcqr���H@'8�]���O$�Wf��Widcj����zz�_M�^�0x.nX�����}f�v�����O����_[������S��f�Lm�~�9�x���	s����l�Zfyb>x��Q������,��&J\��>���e�(�e�8�(����(��(��(��(��(��(��(��)��%�����0t�N
����G��5(�t�����<*/vc�W�xW�ZN�rM__�&�e���������vcG�g�}?���a*Ww���{����������\��(h���>�g����j�(����)�EY>���8�);����[iZm������9���+������~$����_4��#�,��O�9>���X��u�:k
V�+�9q�)W ���P@"��^��N�&��\X������@=������� ���6*��$������Io���S��]����i��U�g�h����n�Uzo���T_d�*+�m�x����Q��������F:���'�
����)��������i<E5�k
U�<:�p2zW��o��[��u+����q��aO�]^����Zs#[x{M��d�+���9�k9c �F�����|v%��	?�
}}��F��Q��2����^w���:6��K7�� ��H�1��	q���������(�"������WN��5��3��X��Y.�wlIFOq��~�z�#�H��)*��H��=A����wg=��*$ukz��H��R������(��s�
(��
�������$v���C��>����+"�������T�L����W�$���4�]7�|L���n{�����	jCQ��� k�G� �>���w��mW���&x�:r�G��K����H����0# ���>����i�,�B��r��
y������?I��>n��yY������'+���^�^=H8I���q�
vg���X�Okt�. v�E�`pj����0]��D�������?�8?E��&�)G���,f�k:O��QEI�QEQE��,�3x��j�dh�60x�C��������o��M��T����� �L8������~�J��+X��"Hm�P���������2�l�z�
�w��J����(TQ��`�UumJ�H�n/��Kt/$���{9'����Kin.�H`�K�#�*�$���X���o�"����n��26���z8�@�y8�i:����YR���>$x������ x4�	�����{c��~C���F�+��TU���NN�tN���B���$�����WS��E�~���� �(��g	>G�dV?�r������Z����Dd������������D�Z��.I���|/���<]����t�
���Z�*����{`��rH8��
��_�l�'�A����O�YX|�H~�����t�^EYFR�U��R��I���K1@�'��]~ �Y���k6�E�y#?I1��u���puI����G�td�����t�������yu�������X����v��K��#���%�^6WFVS�G�4KM�*+���+��"���e���t��I��G��	I��@���R�}���VUc��0�OW��U��G��>���#z�Ao��<�f'8\���T��W7^��{L���W3Y:�����o����	��r�S�����������il�
(��#�(��(��(��(��(��(bI'rM��+��O���3��q���0�B�QRj���\q��Q]Ok�o���<?���Y��8�>�~�=����������������b	���o�d���"��)V����6�4)����%�����1j������_2Ol��W-��`��u%���������1S���p=�5����<�3<������<�Ori+��>�~���z\9��-Q�.�}��n}oeyml�S�q���8e?�����/R��g3iw���������xto��4���&���=����A�?��k��?�X����x�������~'�tW�E���%���w+v��l?��?�h+�����+e�����p���������*+�_�=����S���o��Ve���J���L�?A�~e��T�m��
#�c[�)|��s�h����������K�����J�E�8\��'���xF=~�}ys���>{���g�����=��*���N��|f]�5j�\���~�:�(���������+IG�����A�1��}������Lb��Q��J��6��H����%��n
��G�����p:��NMEu:[Z�<��8�5��ec�o��1EW�{�EPEP��5A�����N<�������^�^'^��=T��X2�70��{�7�?Pk�	S�3�O����o�'���l�{`��6%�N<����#=�=��m:��Q�����e���e�E��FA�����g��R7��~W--�1�z�_����Ub�s.u��%^W����������scz������{�C��g�%��u��6����!��>��v��+������N��*j��h��w��C�{��8�"3l���C���~G��S������9Q��8�+#���>((��@���
���Y����|��FV$����w>�5CF����N
:/6�f���wb{���o��������S�O>0e~��z���9�S,��.|���~_�_���=K��N�Go���b{����H'�ExG������4�����
����}q�N���Q�3�h��?�#�Ip�6�7�Ia����>������#=��W_���~!�Z$�����.�����A���v�z���'G�U}sQ��$�$��u��{}���iJ�����:��5��	d����F���,�H��/w�u�X���ZO�<)��=��a��+,�	d�3����*�P���������X���g�^�)�-D�����D��D�c��;G���W��+��G��Z
&2��s)
,�t�}:�'����j��SG��N�)��
����5����-*R/�_��P���}�{1����?>$��	-����jx*�����=������\��<�M<�,�1ww9f'�&��^)ErA�}^K����z��[.��??B5T��-W�}����C$Y'���������C7�*	�����~j�}{
&��x�BP:�����Z���b������u*��w��������h�oj��3Z�{l5�(�+�o��
k/�g1��
|�:W���������o�!EW��HQEQEQEQEQEW]�������I[�#��#]����hO�-�o�?�q��Z����hz��+�?ha�i�B��c�����u�u���i�*���R���b�I�db���� ��5��M�m��>&g�g��W�^������h��'�!���`��"���A���.������k�xJ���G�G9�Kj���#�(�G�����.�������j�?u����������l�,%g�!���/�����+��~iq����}q���#S���K�|<��������!��1�� ~��������xX|	����|��h����t����1/��(�Mzw���d���@(��������.>���� H�QT`
uu����S���"��������H�����]�Z���[[���5�>�_z�U�+�M2�K�F��^Y�"��k�������9Li�[Q�9?��O����k��JS�(����=��OA���M�m�@
��.���V���i���{w#��oV��5[�KU���������;(�?�MT�I&���I%�C������R��}�2�:4cIy�]j��������cd',�y�������^����v=*����{"��?����y�2wi�F,�r��$�SX��Yr-���n���h����D(��(��+O����u8�pZ2
H�*�?�fQN2qwB�T���Q���F��� ��`�[y���F�x�I�p�����/�^S�2��F��X�a����Q������uH�5Zn��Y������-4�W�.�^9�"���?���Z���z���5�}SK���������#�q�9��>���� ^X7�:an-����������~"��|�c�������s�~'�wjZ@H�u:��S��c��x%���WR�]�$���S�+�
����������9Q���u�0�L���jy��OKu);K�g�UsG�/5�B;2��._��a�Oa�k������i5O��g0��Z�4=M��~����m}��>���}��T�S���Ur���^[�_<o�;.�>�8|�p��G�z��u�W�S�
������}rt&"1��|�:�����,O��)����H��W�3��C�h����������X���oNO�>u�?���(�.u-^16�b�|��O1���������|���{����&y��s$���;���_�m�Rx.�����r�����W�8{
^��$'���[��B�
�`0���������j6����I#���9�|�"��;+���N
sQm+�{~�H�������I��j�6����]�����q7��������)�|I�|M� q{��D1�0%`F��l�{m<W�S(�(����7S���W�w����m��1�E�4�6���I'"$?��0+�|G��k�����5�q�{Q���~����\��SV����(�a����_���:KMfUb�&��?�Z�S����c��6G�]���1���U���aJ<�K��������<Sp������y������}���5�xG�5����H���~�|�>��_���F4H�X�UDQ�Uz^��5_�����"���������t�+m6�;VhT"F�������Td�p��L��wf'�x�^��^3���n���y�"V��^R��p����=�)������>�EW��XQEQEQEQEQEW�|���{����L{�����^{^��.�Z������O��������~h�����W����Q^
���~ ���m�jM�vq�����9$��m�E|E:n��G�T���f{��u��O��{c�].8��D�����B����z�<7l��o�����c%����=���>?_��
�)�j���i������)=3I�=��Is��.?Z>�W�}n���GQ_+_�^����j0Z�v�A���5�j�!��������q����;��L���ZG'�!�`�G�Z���7����g�2aW�%��-�W�x���ad��c������Q���+��UTU
=�-o$#����[hj���Z��.���5���+$���zg�&����_\���.d-/Qc,��k���vG2R���:��C����A���R3uT>��?�N��k�%��"���#R��=O^�=��j����8Kk1��#�����Y����i�Q\GpQEQEQEQEW�xO�+����l�G��z�Q��o7�#�n�u9VS���iUt���jJ��=���z����E��/my��)��:2���;�k������#[{�X�c�%�1�����:Z�c(�����(J���>��7�]W�;o4zN������C����}5�qH���D���*�r����V��h�d�w�@�-�dB}��W,�i�c��-&�}�Q]�[������Ac/$�Tz�x�9���"1�	�?�����R���G
�_�^�;�����>����P�R��6=��>��ii�~�yv~S{"�&?]����?w�OJ�;�������g���v/,�6Y����*+��(�^��R��;�+��u�����$3ZL�+�ppdL������R8�Gowoq,�A2I$-�ES����_J���5g�	�;����=���"�#���������P�u�U#���|Q�kz��~/4k���:1���=O=�5����/iE�sbS���^}L$��uG�Oi=����xsE�No������)?�+L����B=�]���$^o���?Z�m/-o#Z\�:����(5���N��57���<+(�G����#L����#9J7���6�����C�W�t�s�����m?������{\tu�w~x�l�s�
�e�%�$Y�(��?W����1	}n����Y�}2��"���(��V�����v���-K�������v���s��Q�a^'����������G7�<��c�R���#��K�f��5k��.��2f���=�uS�I�-*���!�;������
�:`Y������#��dq�OA�|3���x:���*

*>a���������������A5��}���������A5��}~���f����QE��QEQEQEQEQE�?���3y1���m�Q�5����	�h|`\a�yd����
�3�r�m�����X�_�3����3]����$���x�$��Z�����er��1��$m���c��Q�(�����y����u/3���_
7M�����w$�?�r��g��?����������(Q�Ex��������4�������3����,�F�Wb�N*>�K�U���(�6����*C'9�y?O�5�s���K��F�?%��x�-�X9����70Z�{���I�28Q���o|a�C6�%���U
�����^p�������I'$�mc,d����������S�n�z�emc'#��|v���\�W,�)���Q�`�QEIAEPEPEPEPEPEP]>����%XoA��?x��'�������������#5i#�4�f�RE6���?���O�8�
�:�k��6�<��� ��rTc������dq�����+��(�������
�w��e��y;+�2�!H�tqV����>���kZ~�������Y!���q���qZ��n�CEd
����x�����������b�=�����5z���}>�v���E��z�W��&���"�����Q��O���u���2���yS�b���]�=����3����������X�\��<��{?YI�]A4N	\:������L%����#��WI���J::����}���]������B��I��A��[�)-w�/��j��A��qH�%_����u�R�kZ��������g���,��.	��Ir�4�`4���i)~�F�U���./ FA�M���9�����oB��_x���i�1�~E?����|!�]k^5��Da6�k�3�'������h9r����5&�:U8e>�W��r��W��6���k�xa���?�r�~���:�?k����<��+\��9�_8W�:�V��^3��o�{���?_������(��<���(��(��(��(��(<
�O�v���:4,0�io�PO�k�������������!�Q(F�=�+���v�8����z�L}�K�Y��$��QK�W�fV�&g��I���O'���>?�:��At�-�������~x��mP@1^.	h���z��5��j�����.�G��+��*�ad�U�:����8�����������(�S�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���o{wl�-�g�	�X�*3��K���������o��TUs5��T�QRPWm�����l��j�k��m����5o��*�����?����qm7���W���6����W�6���O�����<�2�O�������n����>y|�S?��������L?��_6W�~$O3���z�Q����z
��u��k�������(��<���(��(��(��(��(G���iP����A��L��u���;sq��,l�7�����-|�������s*���^g����~j�Y�0���U�@����_*W��������a���A������+���+S���R�G/��@�����Z�����.�==��J��F���u��&)����Ujh(���:�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��������o��>���q��{��B���������BZ��Q����d������.��3�6A��'#��+������7�����i����Z����D�\��cXO3I�O�@��5����j���wA"��G�_*F6���W���J���9sm���QE���QEQEQEQEQEw����O1Ch��e��{uyG��c�f��>TK�n'��z�|>u>l\�k/��<�<��s��i�����6��f�?"��j�����*���8C���&���^F'�A_�W�Ua�����Q�?��S-��]�� 1���\]t�%I5��rb�Q��rO�"������a�����+`��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����4^"�J���Ln��Q\�k�Ne��V.��_g�
�������L����#�k���r	>xt�������c���k�_�O��n���c��r}���\Wv1{���87���z|�w��x�X�d?�"�����E��Z�dce��}<���^��~��FY��/����+��(��(��(��(��(�������	�6n.���
��)����������:��i��}���5t���:~�R^l��,yh�y#���F��^�����
��#U?�5���^�u=cP�#b�yu-���U����GP�OA�z0\�H������)��!�p1�6u���eT�35����y\��L����i>i6{P\�H(�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�����Y�l����*��������������|�]��~�"��F�lk��I���	������{���x
x���hn=wS���W��W�s���U��u���XL8��*�����5�Mxw�[S��l|�������V��q-wO�e����3���+��(��(��(��(��)V7��8�drG�<
J��i�R������h`�0�������QR�*���P�<�WS�;u�����a!�c_������@i^�/���ZK(��$~��^m�@����&�V+.�q��g��o�����P\�I�>�r��}���]����Vo�'��r3�3����Z��?�-�[k[5#s���n@�BI����.X6y4a�4��(��B�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�R�m�����6��tm�8�8�+�?g�HX�C[w�lw��@�:���_���>�0����F_9}��?�G�^��jW>�g�Y�nm%Y�I�b�;I�# ��a��6�<�������k�~6�m>�e��2m$1������
?�U�U����Z_�>�k��h��Xd:MZ�SL����qF��2:�q������j���~"������z���YO��767c��c|t#���EV���%$��g�4��
(���(��(��(��s���c���&\�����#����
��:��
�� ���c"4X��I���l��t�{+D�#A�=}����b�?��yo���2�S��e��k�O�C[~&���|��&Y@��I�p����
[P��t��B�O.��&�F�U?S�_������}�]�Oy3J������W��!ysv=d�^�
�����]�ebc��I�t^�;g'��@�&�t�y��)#�x����N=���Ld��8o0��+��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��.��������2#o��T�q��k�����<�
CG�]����N3���;��]�9�p�!��>����R.4��
]����=���"~e�������k�]T��5�=SOp�v�	���S�A �_`�C�V^)�-�M=�w(��O�����?^��x�\��[2��y���G�s��}n5�>2�0&.G/�!����
���J������i��<8���il���`�<zzW��f���
�������9?kMk�OE>x��������3��E*�}���_P��G�QE0
)�FX��5��xO]���=6q���->�lg��gR�).i���Q���s�<=�j ��l���V�8��7��}+��?��$�.�w�7{{bU>��c�m�I�����R����O���P+��g���h{��O�'���''z�/������1��m�{q&�0�����d�[�W��^������tYVMvU�:���#�7�x������u1/'v�c��
4H��hO����}6\�	o�O�)��}��W���3�<���K31%���I=I=�����U���������E������J*4 y�r�?S����/uk�*{n~��O����(�.ss��=XAB*((�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��|+�
+SW����l�8����cQU8�dL���Y����;�������[�=���\��Q�K�8�z��y��@�zu��q�����}�=z}{*��(���<�FTg�}���sN����\�����Oua��kJ�/���5_�_m�n��	���g^�^��^���z.���#m"�����c��e�@�k��P�:���*3�Z3�u]N��	�YAr�2 %~���+���[��������)��a������-�����wYa�:��pj�*X��4�6�f�(S������&���S�1����V���/A��
��^���?P��QZ�2�IY���Dpt#�W�f�������u��}"�>��P�]�YB��\Co�^W��5�k_��S���K3������o~����7
k�G{U5MJ�I�{�N�Kd����T~&��_u;���M��>�{��d#�h���XW�k:������b���~��|��uz(�Po$����<dW���>4�y�>Ap����F��+���
x������������I�I��J���Ck��N'���*����Wlc
1�q�S�.��sV��-<���n#�\�A�k���o�%�� �!�����;R���n����H��G`aUk��]�v[�

���(����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��/��dKMVL8�.�G�_~��OEiN����:��QY����EyN���i@����#T�e��:����x�O�v�Z�	'��@G?�z�0��uL,���[gsqc1���{YOY-�h��*A�����-$"��:y�e?��&��}B������������U����V�`���v;&���v>"�����i�����v���R#�9����r�����]����]���������<��yf�Yn��K-���ZL�F��M2�/<S���h3:���Kg�z~��{��������?4�ns���V��Q�R[#��:��e�FZ�uD`���?�+���O���������C���Z��1}�t���:�o��)�MW�������?�������������1�$��M���RSw�;aN4����(�,(��(��(��(��(��(��(��(����
endstream
endobj
15
0
obj
<<
/Subtype
/Image
/Width
512
/Height
528
/ColorSpace
/DeviceGray
/BitsPerComponent
8
/Length
17
0
R
/Filter
/FlateDecode
>>
stream
x���{�U�}����O��}�W���&���6}lj�4}����4�3)b�@-x5Q+�q�x�}�
8�8� �0f``�>c�~;g����k���������Z��s��s��B�wN4moVV���/<4no��wg���6=-)������OyE����h��_G�Na������\�>Zj����^����;s����O�����A����9;��^]�nE��g��f�bl\������H����M��G���1#|w�]o�d�&��K���s��;�7�����.��}�[��w���;t��MQ��U��w�es����x�������Z�E%e[^XtK�?��3�;��|���h�t��s�
�>������qS�M��__�*CK�|���~�P���4m��}�hA��~�����a���)�H�?�RD�s��nK�����������%w������F%����X~?t�i�)�O���3��}���m��Oi
[������wW�Z���c����<]�@��W/�WN�i^����K4~�9��\J��1��~��n���~&z�S������;
/=�C?H<�o�
���k�����Z�X{���wyMts�e�H�����X����x�����u9�i�W������.X9��Hi�'2-�fP��O��������F���e�����?G�����fZ����_�_I��m�-q�]_<U���>�u���l��/��K���0S�G9��R|���J��M{��)���Z�/e�T�Oc�B��(�c?�T��
���������.�k������"�.���u�>T��+����� ��Ze�&�jHZ���?�o���&���?����+��#kb��C���*[���w>�G��p���?�r�����	� ��-�%��������-�`=zlR%�K�d�����3�P�����@Q��"D�%@���)%H�LGOK�I�\}=,���������c>������������M)��W~��V���i�!I�����g$�^N�zB�jn�����U��p�/��=iV�(�~��z��7})w2�9A�ld@�g~������������z�7��X7������/@�E�����
=�r2N~�w�������C6�������u ��������������������?���Fz���=��O~^��5u}��A�C�M���V�0d��^����!�Jz��M=�S����q������������i�����G!�C]��=	!t_,=	At��CB]����Dg~���Q�_����0:?����0:��Z��Z���<������G�� ����s�cHG�l����z�����P��m5|��������S�<�3\6��:��
z�i�=���=����z�i�?=�����=�4����!���o!z�a��������� ���C�3N
����Z�wZ�;m%�;m�����pZ�?���pZ��E�@8��B�@8�����;�����N�a��g�d������f��d����i�����N�wY	�;�}�w��w��wY�`��_�Q�C�A ���� ������Wmf�}���&��e�u����0>���oz�����s� 1��?����1��O�!�����zB(���<zBX����s����/�'!�������?��^������������-z2�'�X����k��?=�Q��=��n����/��!���w���q������a�8d��>�'��!�^��$z2��O~q[z 2�|���
�c6��_���z�_�U����~�� �|���O��#�A�������q1��#�91�����������
�C���%z&2g|l~�W������?Ov��x�yXg��/�DOE����/z,2du���=�qw��������_���=����B�`d�l���=���_4�'#vz��F�FL���	=�W��_LC�F��x��G��~��=�v1A~�n��D����#��'�����(���
z<�����Ez>�������#��2q�t�|������t����+I��n������G�H�&�/��G$�^O�zD�(i~~h�]>���$m&��=$�R�#??��a?�'��$]���/���$=*}���s�o�����,�U�G��$-����w���S~��;@6�������QI���{���4�w�O�QI��W������K���=�aI9��|`�\����+A�f�Lq=.��u�?���%�v���� ���C��<`��_���7������M�����G&��K��3���N�I��i�Iv�<����zN�1������Q��Y��'��I��@��r�����`���&5n
����P�������A�?����y�o��G'<o���I��Z�_!^CO����������/*��SH~����4z|
�[���@�O��
����.d~Q�^�!����v�W@a<��w�+�N��/��7���������k������k���U��~�"(�f����^�FI�7���`�����
�uP0J��pT)��C���RU�G�+�U�p�����;�0z�|_�?����!i�����/~9
��n0��Ji��������y(j�*�_�^���y�G�>D��dlR�_E��d��/����?�o���J ������o���<����s����E>=�#?�������^�"}���F~���?C����������" K[~�<
���!����_��WG�\���V��(��:��q��QbZ�Q�^ %4Cs�C�R"G4��+�D�AwQ�^"y;�=�X�^#y�K�m���kN����/]�1=p�[Z��$/���m��9���}r���~�_�������Dq���
��LUCzUzr�����O��~��(<n�}��rr��F��M����3����&��I���&�$�A�K���?=.�&�p=.��B���iI��������#u���iI��%��FK��P��=,)'��0?��y����B%��AK������d��BOK����=,)'�_T��%����S`�H��;@����-�l#����qI1��b?z^RK����yI-���
=0)%�z`RJ���DOL*I�����T���c@6����o	a�G������-5A�����T�����1&P����I
���	�.K���V80?�������n��^���g��B�2n;zz
kR��|������	 ��������EYn��B�@/�B����������^�r����5|T��)��[�G��j��z%$��OU���A#(�~�,C��$mR�_����!)��/��D�G(�/DzM��Y��o
����/�oF/��(�S-�y_�h�����	�����O�k���$i���m��(�z��*G/�<�>�=?�������4z��:#�OLE
����:�^-�S�����^/���h�V��+�n������I���C�3���RB���=�HU�9�p�[�Bo���d��5h}���Q�nF�����9}f�t�|	0���#�������jj�����-��@o���Oo�����n��/�=;d�����9hx���i��K@h��
Cj��Zmbt���4�$����tuQg�C�������r/���/���,����?�zC#�cp<%�������O���(������g�V�?���B������hJm�89����(\>������pyA�C_���)���B<�����/�{����������B��4�b�����Y��YfW!�^�������>r��}O��o3m���s�YQ����?�}�,X�?��S�M�����P�*pQ�?c�c:D�s
.5}rDdNSnD�w
z�Bu�
=����pD�������`���8��_8���.����wd4�]pn�k=�f+�~)������*�\��L8���M�|u��c���|���{�|=���4/ss�-o%�?�������Q��J�����TT�������J�-����������&/����E){{�F��	�O����z�l��nc����"��z�l��G��d+�w[D�����V���O���.���>YK��$ ��d�h�N���D��^�����K��D�r�.�+���w�^����K��@�����������~,I�
f1������et[���d�(�oFo������I{���&Yl2:�[�/����v�F��,��[d���
�G6K��G�[d5t����[d�bt����O����IM@o��2�y���t�����y��m-�o2�;d9t�d6�7�n�����2��-��F�������z�l����,B�������������������jt���A���&�'�1z{��:qB���c�>n��0z{������
����9�*��8`):r+����e��	Do���#'��'�#{���'\Bg��zk��:��Z���!e��������e
zc�p������q�����}��W�A���y���"E/��g|��:��k�	t�x�G��;��[�Q���C��c5zS\R����%N���c
zK�r:w��8������
q�Ft�~�������}����9����������x��q����6�J�����`�z���{��/��w[��
7�Dw����a<���A�F8��t�v���&t�6���������mx�G�������z\v�>?�������n{�?���^��|�ao�^=A�x�7�e����O*8���z��f4(6z��s.�a���"?��S�T�����J����'����Z��_G/����h~�I9�����}R����O�WJ������/�J.����U��r����U��V�7��)��:�OF������k�F��4]�$�����4���?�U�o����u|����Rys������C�F����{*z)��+����E���;�}���<�m7�zu��=���'VK��=6�.�����C2��8����I�_����bj*Wm@J�����������=3FOH��1p���������[����
E����D��O
endstream
endobj
16
0
obj
34279
endobj
17
0
obj
5153
endobj
7
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
18
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
19
0
R
/Resources
20
0
R
/Annots
22
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
19
0
obj
<<
/Filter
/FlateDecode
/Length
21
0
R
>>
stream
x��\�n%G.+Wi!M~V�r;az���	D!��=�������g
$�I����do�[�5B ��U�l���SU]u���{��/+|e��sU�>_}u����+^7~n��j4�~��z\5u���8�(�c|
����JmM��w�B4�*Lt��~Z�V�������t�������7�^��/>�R��V�V��1��c��M�V
��fZ�9��B+�*��B��-�6�\A��M8}�S&���R�vS��Z7B��A����'����>��w3B	+�<���M�.A�-ki*i�S7JVVr���RK��������-�d���V�H��V	�L8n�����lk9X����7�R��E�[e4��L@���S��w�����������K<I��)���K�O�|HE������������x!k��\j��#����������V����-�eH5�	�/���\\�s����+���Ms�}4����F�T,X�IL����>���_T7�����Z�3A��:�x<LG�l��V�a8�Eu��f_n�o�';� �6�j��T<��l��8a�l=�S	T����z}���O_c_o��S�����-�j�����T�O@=��������	7$t��>n�T��B�K��h<�5uk�}�(�L90 ��ri�6����5A/���e�[��	��K��F�F8QK�R���wm/�%�i�����A:]pS;?@�D����1`l��I��[W����F�;c���MF����<Hz_�sC�9��5�)	��X&"Hw�~��J����^��;a��Cv����3�.��Neb�S��I�2�g�i�@�S_� _���l����>�c�,�!�0C��9�!=�����i�\��f��w@#�b1�����W�4"BO��������f�a��{�����[��'�{�3/����
�eK�2�o���O	��������� ��(	/�S���Cjw��^[z��p.�MOR�$	jr��I�(���\��YI�v'JY��X!����]��<D��"���,%b���d��[���
�&hGP�7��-1sD���D\�9@�cD��p�z��������q�Je�&�>��)����Q����3�o����G��"��@s������@H*��	1\����@�����8�=�8%M��=���_��o�����hC=�������8V )�H
���T�i/7��q,��mq��
����e�����]#l��q�`a��b�����y|iE�Wjy�V�P��0��%`�A����|�6��D)�=�sz�t�k^��i�.����u+,��%���(rv5�2	�j!,�B �Hr��P�!D���|Y)�
dX*��#2J/2T&s�0��N����rwueduo9.$\,#3����Z*����qb|���h�Zd?e?bo�H����?/Y\$��Rh<����^���1������C?6��,��r���]*�2N����������.���Z(�Y�(!��l�	�������0���L*ee:8)�\6tAt[�����4Z
.H��G.�����z�����q4�{>/��}#�
����$}��,����k�e��n��d��o����`���� V�c��9T�����&N�n��z#�j:H5���i��	�i�%������W���Q����.8���S�r���J�a����X�1_i������9/h��%��_@aA���W�uX���p�����~�g,�nx���3���|�S"z�iGr����Oh@d��-�,a��"������`L�f��p����^�~�S��>|i��8�jnj��F�H ���Q��y�n�:��^l����������N�it���29%��5<�����O<���V�mQ�{l�f��{s;�
Ou��)�!��q7*���xN�L�0>e8���
Vv\:K���h#��)1/�h������'.� ������}����8�|���?���,:��5S����"]eJ��������t����U�]?���
�S�n"|/��H[�!si�������:!�����\[e����6O���`	.+S;�4��;yNIsAw'����s��������W���7\1��O`q!���������G�
W��(\�ZK�*�v�8Xx�	+���b�����;j��?��C?�<^r�=#*h,�����4�L��*hC��Xu�'�q�M�8�������p�_�!�0R�������+�q�{���)�a"+Z��%D���z���da*��b��
���[���������}$������yRL����6�������;���t{<��<�?xx�?����F�c���
k��4$�8^������dcn��|[�����9�,L^�9��`���F�#�h���S}�K���tr�BR�>.�Q_s�:�+Zb���:�r�!�T�OO��}����{�y����l���xTIak�heg��R&�L��K&b���*����}&�Gq�{5��\�J<�������e/���2�e��=��&�����s������f���v�����{w/����l�K���sO=Y�'����a�)�=H�*�Zn��w������D��4J�Za"�@4}����i�� �M��Y$[y^�s�	\�OT�7pl��`;�(��>(����C�pc�dc���h�������OD:��$���	��K*�wi���ldI
���rx�DC�����"��O���p(��^{������&O����&�{���:������g�@���6A�f;'d?.l����&����"�����o�F���5WB�QS%�4N���=�\21n�5�,>�3���!l�{I�(b�^�9s]� O�i�O3���,��)1w0f������=�o��� �� �{�K��%���a)�)Z�a���i)|��K�"�Q�M��)���\�tX>!��b^��I�-H��t,N����En�_xs���5��wc������N�j��|����N�n�<��Q�����x��zp�f�c'S��Ud
4�Q�� i�rK�[u�'O�����
��	/`r��6�G�#���GR1�e:�<)v��S�XH�]�s������������&��]�������S�{~��}q��E)��c�	6`����N.s��Q�_'��kY��1mk��y�������v&(�9|��@]�`6���O�`���N�����G�M�[�m��'L��6|�Rc;���ZL��b�pe�?H������fZ
}��|�X��E`^�����{���2������x�@-4A��gm{hB��m�C��]�����TmoU
=
BMl{���5J��6���<b<������yk;$�;�_/N�6g_����������v����u���,�$����Ox��d����|"���U�`�!x���j����{�[�������L�'�����e�o����
��L�q������U����5~�U�x�D����}v]��������o�@�O"8��h���� �e����E�G��/�QMq
endstream
endobj
21
0
obj
3582
endobj
22
0
obj
[
]
endobj
23
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
1463
/Height
256
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/SMask
31
0
R
/Filter
/DCTDecode
/Length
32
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((���"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�R�(��(��*{;K�����������(P�6N��	�*�����p ����r	����`u8���+����u��,6~�Hc{�F������G�l4k%���!��\|��7�=X�NI�;
��h?5��
�Io�C���Y1��N�	���3�Z7��
YE����e*�����0�T&���Z�j*�M�K	�~����E����c���]J�;��OI�m�EQEQ���7T1�KO��1�!��d����8�+��~xWT���?�s���Z9�n1�S�w���v�P���e_A�Q���W�T����A��m����|�]�������ql��y����8���C��W������	!�4����ee<A�
+���W��0�A��~e���M�9o(��s���2H�����tmCA��W�{k����=# �� �v������(����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���w����0��t�������f�.���������w����0��u��k��K�f���� �_������
}g^a�B���e�a��rP�\���(�((��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�;D�u(Zm;L���[ax-�E
�q�:�?:�����������MbQ[������������k�X�����V�k &�t\��#�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE�|8�5����^
*��rO]��� O`@(�+����5��6��7�����=����s�d��|��'���=>�D%��_$3�x(���&�t�>�J�����H-a]�t�����'&�U�b[
(��T7�v�6�q{q
��ct�8E\�����@Q\��_��v���k�C%�D���6�#����c��/>8������,��^[�9��`9�sE����^+������������^�.����k��,�j���L�����]��%��rg�l$���v�6��kp��M����Va���������hF�(����N�����������AV#�~��	�(��~�����
Ku�7��\�l��[$�n�����mr���H��XxSOX����S�w�q���z�T{Y5;���xl�gh#s�H���y�KE'r�QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP��QEY^a�B���e�a��rW���~���%��A?�\�0G�TQEAaEPEPEPEPEPEPEPEPEPEPEPEPEPE��������������r.��q�L������PRO4p��,�,�Nu&��?	5�U�MD&�j�t�y ���� �!�����{��<!�x^
�]���!�d�J�� �a��`q�V�U���:7�
YC����feP�,�5%B`�}	l`s��i�F��������0�����L��5z�b�QEQEGR�4�S������y���VM��������Y�?����`�:t�X+E)�K����=��P>j�7��h��[D���b���.@Rc�rs�wc'�_jW'�?��)�W��m�S��%���a�c�0{t#�&�s�z+�����?
j�O%�`!�D>\��=���<��`�n����(���Jxw�u�������JhL��R����_������;��3����z�Mkk,�H��T$g	�"���|o�"^��`����V&���QEAaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP����|;�?���������
S�����������z}v"�������������?�7Ez����������������<���X�L�����&��w�~��f����6V����<��������6����Z|:|	��#^�RO$�I95��?
C�_Aa�;~���)1������]
ZD�QE
��j�V�=��:[����G��'��Ndx����M���'|����4���-�����3�^���L]�,4a�L��{������n���J��b|�o[c����~�(�����k��}V�Y�k�R�k����#g$��d��R���%`��)(��)�K$G4<r��������GB)�P�xK�����C�'���6��Q�"�FU��y��q�g5�>�F���&��.<����l�3����$���i�����A{���]@���:��A�A���M14}�UuMB�J����'H-a]�#t����'������SO�#��N��S!#"9���I;�M���g�<��7�.�_�m]�iP�`�'�zoV?��5qX>#x�����U�f���I��������OEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@jQEdy���"]����E�^�^a�B���e�a��rP�=QE�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@W�|�f(�E�[���5�2uc��9���T��?�r<�j�)�D�����������<�nDX�Q*(�P0�����\(��|Q����o&+�-�����
;�d�g��
��������/�!��Ln�g����x�@��O�-^�V�A�4�`�H�$��=r
� ��	}�^i{ws}r��\�>7K3�f���<��;O��H�����.�:c&�U�g�E*z�5�y���0\�qE�\���(T+q�s��_:QJ���U��o
Mp���n�pe�*��k�[��_	��b�Z�G�3�B��y���|�EgY]�_[%���76�������ppG�EM_�����;M�^\ZL����lW � ��~U�~��ym�[}�/���UIGS����#����qX�z*���Xk6Kw���un���l�8:����LE]SO��t��u{Y�l��B?��G �E|��+����1{b�]�@20�'�|q�����3��Q�nt�M�me�M9c"4eJ�0G|��s���h����������d�����f~]��8�q�j
��������J�� �_������>��E�mV/���K���q������h�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����A��>+�j���3�s�+��f��r��n2?� ���k���)5-N���5��8P���d���&�m�i6�u�����F���p�9$��I�E2�QTHV7��Ak���R�!�������!��>�C�	�[5����������[k��F�;��v zp�
����Mv��z����/�;��8X��(����I��(�,(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���R�(� +�?h_���� ��.J�����D�/�'�������(�,(��(��(��(��(��(��(��(��(��(��(��(����m������I���A�H�N8$��@����k
�_�������!+<�'��G=�0�}Y���t
�L�-��h,rX�Ic�I'��0+F�+���+��2�����G���j��t�������1��2���?-�_�iZ��d�|�����1�O9�Z�MJ��S����w����<�rI�p@*�-���QE!�Q@Q@Q@>�.�����i7&2H�"nc����S�Q��+��x����H��>\����c����<���@�2�<7���wV�Q����N
�VE��;��`�i�a5s�mSP������	�XWs�����rO�f������T<T-�-����������K<���]����l!�+U}�69f8�\q����F�� ��)+�J������2
�����z����?�[V�b���D�����-����(�,(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���R�(� 
(����H[���r*�XC���$��8#h�s�?�k�~�q�x!oF���g��L0U;���G����(������"�������w���q� ?xz������_7Wq��W][���2�
��4eR	+���p��=0���-���(�0��(��(��(��(��(��(��(��(��(��(���|!��]�'�7��=�~�r��i�/V��
p~a@UOgiq}r��V�\\>v�
f����5���>�oHH����Wk����'8���������Z[X�%���6����B�rrp�M;
����|Q3E�|�q3�a\d����sZ?���c�@���������a\�&��	���P�1RR��r8`#���) �Hg���6(��C+�=��*���Yjp�:����*��O���FpG^O�G(s�_Dk�4�-�Kq�M����<��wG08���o�5����{Rp�P���8z��88�+�3ERQEQEQEQZ:��k����-^���}�@GRI���=HM{�~
�D�/���yC6��l|�r70#��=��.xekZ�o\��I�tmJh$I#����� `����t]im���)���B����,F}Oa�Z��I�>\������9SFp���y�F��`A�#5����z|K$�%��6� +9��BH�+��(�\��R�u/�������3���{��� g�R��+��~�_U�d�E��eI-�e'����c�����`����/�A���m����v�-�cl�>c���8�������M$3��Mtu*����B*J#��(��(��(��(��?�u]O����2����n���D�$s�#��]����7�lkM2).a�������)�?(��a\��N�5]J�N�/��V�^w�C`d����l�����'�E�Q��4�pq��;����v���/��N�����?��}�D��:�d��~��^�\��������	��L�r22#�
}�P��[_[=���76���L���r2�
c�+�_� ��?2�B��2����n���zuL�8Z��wS��������C��|�@�(��#�g�MXi�W�~�q�K�iwZ^���8e���(����������
����������,>`�����[�������]p<��w�6�z5����bg��|�G8�1@��s�(��C>���*�
���D�/�'����>������.���	�����>z��*
(��
*{;K�����������(P�6N��	�V�����������Q������*��x��{,<��,�=�_[%�������v�
���<�+�-�����^�o���fI���l��9>����I�����?�r���]C�D��������mK�>*����hw��ggQ>1��Ylu�����(��s�]CO��g�6��2�	<M�gt��UV���� ���XdR������A����
�9�$�ko��v��-xL���w	i>��V�3�]o�|�xRC%�i�9+w��g�	����85�R((��(��(��(��(��+��g�	e��5������v���� m��a�o����6��
+N�]f����%dbY�G�`:�����(�������a���.5	>i�����`��J��8����s�_)��M{y=��������s1�8u5��r��U�y����t���kF��p�d��l�����H(��C
(��
(��
(��
(��
(��
(��
(��
�R�+��*�L��|o�"^��`�����X�7��/_��}���jb>E��*
(��
(���.o�R���k�����B��8��&� ������XD�&�xY�"����N���� :��z/���m3J��X��b���~v�w#�N)�W>Z����}l�ZF�sn��,6���88 `���~���F�y�������+�0��1�@��a�����Z��Mq��qC�y$��U@�I#�_^�E���tW����t]y���{�*�+����0��>��^,�.U��e��K�2z�+�?�a�KR��x�kR���/��� {{�[k���� � ���QEQEQ_O����w���jo�.��U���?�MM�����|�E}�������wk�yw�sK��S��	�y��J�'p��)(��(��(�P�'�m���?�vi�?��~��n�3?t������?�o�����S�t�+�0Q_O����w���jo�.�s�&���w����5�����ed�����$�QE�3���)(��(�����o�k���
*L8���%C�Q{t�8`F������M[R�������U����P������
|?����
��\��7`K `IR8������H��������w����0��u����<�h�2.2!�%nN8Tb��a_SQE�������~_��������h����g8����}�@#dW���>��&��4���Il�"�8���#''�8"���tW]�o����:}�O9+w��7`��9^��\�H��(����A��0|px#AHcH����(�,����I�5�@�E��66WwO���6�F�;UFI���*z��!�Cg�]v[���g$@����b�=Y��h���n����s$�9�G=Y��?�EE�Q@Q@Q@��-����g�n��?g�|���m��g����:�W�����w���jo�.��s�
+���U���?�MM����
����������,>`�����[��������]��|�@�������s�
+���U���?�MM����
����������,>`�����[��������]��|�@�������s�
+���U���?�MM����
����������,>`���]`�g�uk(�h!��D�6�D{�����=�5�HaRA����H�K318��IRO2E
<���Qe��u5�w���[CR!������e`BA�1�nO�,��������M��7�$�.�RM��xb�b?���?w��j�:(�$(��(��(��)���C<i,2)GGP��F ��Ex�����V��u�������b��z����W������<^"�Qc�52�@8Y��_FH���w&����QEIAEP]����~+_��H�ZJ��r��~`��:���x���������B[�Cz�6���y���-���3����op�Ej*������)��>������k��9�����O$�9<�W������(��(��(�[����YnM�~M��Xn�2wg��8#9�������|9��e������p	IG�����t8<VM}y���x�C���U>u>T�w_+��=222:�_����5it�R/.t�0�d^���?�"�����(����*��au�_�e����N�c�:��rO��C��
wP[-&��nYKmRu$�=��@�_F|=�y�xZ.�T�����<��wU��t���'�8^�����8��D7�*�����|t�����Rk��H���(� ��(��(���V#�e��H��_�a�F��Ob?��EjQ@�;��O���7�����m��j��9�q���E���/���_�O�%z�y��"e����E�C���QPY��QV@W�~���%��A?�\�����/��v_�O�%��QPXV��|-���Pk]*4����iIX��'���$S���u�k6�f���6���T	$�@>�p	���%�Z�kB��l�~EY�2����'��84�&�S�W���	�$Vq$��H���y����\���$��QTHQEQEQE����	!�4����ee#z�+��)�2]"��7�=7��� ������#�L���(j������O���_�K�����4���*�%'�*1��>Q^aPXQEQEQEQE���/�k��V����Mp�l{�� w?9��>���5�o��������c��|m���/��3�oz�J��������]�����/;��URH��Z��M���>�_9������nAbX\������15��M}y=��������s1�8u5TQEQEQEQEQEQEQEQE��|W_jUD�b���D�����-�j�|o�"^��`�����|�ETQZ����E�E�iqy��%��f=��2Hw�^��n�-,F�S
=��+�}I��������3�v�gKxT���!8��e�Pq��rM��6^��������.���|r��N�
��H��QA��
+��~)�_I���r_�[%Fs���}	���;���K��;����X��+��y�������������uk��6��m7�[�O�	�":�f�����dGqsA"K�2���AA���<)�x��m�H�4m�)�!d��� �zA�|��o
_�KV6��|/���Q��}G�e{{�	����K�Xx�I�O�"�!~U�
vu=��r	44����OhW�����H�������{:����8 ���((���R�(� �����z����?�[W�������K���q����E�"�QE#
(��
(��=��o��������{Ux����3����Z����p���h_�,����2J��{���t���z��)=��/��*J
th�:�j��@UQ�I�)��<
�[x�X����{8H��!�=W�nID���|/MX5o�QQ�+\����	��;��z�U�QX>(�n���Kj�������J�aG@v�����P�����(�N�n'�nKO:���x�
�Ns�U_�^�/���k��,�j���B���]��W����������A$�'#On}=G��5�%������l|��v��T�����;�$�x�XdR������A������D�����k0�h	g��n9;ONO�y}L�� ��Ia�J:8��������c�J*����	e�C��L���1��rq�jz
(����+�x���d�T��!����*J+����$�X��?�9+��O�|���@���6��5QPXQEQEQE�_���_����k���f�������j��U��{�Q@Q@Q@Q@Q@0|f��������Wk���JN��l�JW#ck5�����y���F�s1�<Oz�Z=c�W������Q�Z�)h�!�@Fe�^@��z��KD�-�m"�N�]������c�2NI=�5v����)���M<�1�ww8UP2I'���m��J�C�y$`��u$���{���#����Fn��n�
���Gq���|G�������
&���<��{���p;����RGI������Y���`�q�J�$����=q���Z�"���-J�/e]�\,�$q���8���)��o�^(����sp���wm��z|�*y�A��W��?�����v��
6��|���^��=xr����+jQ_?�#��.�}��^��:��^~���������A���;����(���/�Q|3�1-����h�
�6����������	_V|J���$����w]���m�]�|���������KE �Oh�x�_�����.d�[�Q�6	��q�q���t������]�K;Xw)�,��`t����Bz����h�M��b�m���@�z��$����Wh�����������P����I���1��l�p����/�x� �6���xU��V{�L("���H��p=N8"�c���I�<�ou��h��~V6A2}������'�I��i�y%��������ORj:��cCQ��MN%�Q��n�V��<� �z�j����Ac�MkQ� �����(�z
��#��b�h�3��7��U��(��ho��<�/�7-����dc�9��j������J��K����e<<m�Xv#��25��jxo]����������2�VE��;��`�i�&��(�O����:���{���X1��U$~t� �g�THW����=	�,�O�[%.���0	1u=��7]��]�|X��~���6���E�(��p
�;b�������w�������s��o1E�pp[�y�H��������<Oc�����pV5��888�d���c��8`�"�5��U@��
i	��QEQ!Y����hy������0M�	%�@�'��t���=j���=���;-�#�����U�?��M|��_���V7w�d)���S��}�<e���%s��_�k����j�YE�?7
S�������=�y����Et�4���|�K��u^z���`1XtT��v��i�4zv�{i6��N��zd�z�+�����if8���R�]�V�p�G\8���w�������>6��[l>�'�~������|���3�z��N+���t���.��>w������;x ���
�g�4�v���-���@�9�)�8<u#��L����(� �/���L������+�+��h_�,�� ��.J���������(���������.���	����O�0���K������(`�����|
��{��^��LSL���cPY�G9*�|t�,���>]@����R�]r�p�P����?���J����+��'����&�t�#���
��B	=���;�'��Q�xZ�n5i�2"��% d��'dd����|[��Vx���U�)]��� �d# ��
F{�5���[���.��Le���Q{*��g��$�eKe$O{ws}r��\�>7K3�f���<�Y]���������	����r0pG#�EAE!���_�z��4Q��5; H��T2u=	�����5�>�l<G���ir�����������������|Y��B��>��\FRt���X![x����F�j�G��E�*��}����c�B����^6�G� ����|O�M��~�K�;��M���<�`���8��+��h}�M�������������O'�p2w�
Li�ET�QEQEQEz����#������FG_BW���������}	T�a^a�B���e�a��rW�������&Y�A?�\�����tQEAaEPEPEPEPEPEPEPEP_jW�u��TI�V/���K���q��������%������mLG��QEAa_G|��z7����"O�E|���	�E'���@?v�W���<G��	Q��q��
H��d�ACp���}aT�,(��<���$���C�ws�U$�zLFw�5�i2���\)����n���?�N&�m�����c���������V��|�/'�2��~!x�o��]*X��Z��~�x���,FO^�$\�Ke$QE!�Q@_�<u�xZx��v�O�r��r��<�����|5�Xx�I�P�����xx����G��A��������)��u�l�e[�@��<����I#�bAi���
*�o����_���5�7���A��p{��D������=	�,�S��)t!	y��Oq�������u��|��;Aox���QV�v76�*�����^�w8����QE%jQEd�7��/_��}���j�������z����?�[W���R
(��aEPEP�~���1�����j�����b����^�V�!�����#������FI_BW��/���_�O�%'����QEIGc�����^&Hn���l�u����S pX����9�J�>	�-�x6;�����i$(�# �`NF>a���u�����+�~5x�M
�=#L�����t�9���{1 ����1�%|VO*�J����n1�~��;�Du=F�l�rx���<�M<�,�1wwb��NI$�&�����QE��k:��~/t����
Sr�AS�r�pGPj���>��q��_�p���+�������=W���'���t�B�K� ���x.�m���A��� �A���<
��O��MI6��v\"��Q��2p;������h���)�
(��m{��=hU�V� !�t�o�*q�]%y������w:|�o����M�����s�z��� aA�(��uK)4�N��r�5���9R��g�EU�F�������"��K���
�q�y$����~�5�5���(��(��(�>	��G������������_�w�����xu��O����������E|�E;��������A������������1�����s����ix;���+7�G�-/�c�%f��+�
(�O����w�?�Vo�"��Z^����J���W�Q�>�����^������������P@',�ua]
xw�������GYG�[F��q���$lN����q�D���(���n��#X(��b<������]3��67n����y�|���
��9���k��m�W~*�n-�d�k�����)rA�{��bc����3"y�
���������*V�=�]��*�
�����A��m�T��\\�Pw(o�A�2x������g�
O�_����x�����9VD�������Lh�������(��(����1�y<A��oy+K�i�"�����bpp
�'���_5W��	�$���Y���/.�����M��hL�>�(�$+���:g�?�u�0��-�IB0�������+��W�u���j!����E��KHG���!v�=�1��+�
����t��+�[�I�}����p:�N}��o���tHg�%�K���e2( �����
(�����0�@��.F���pL���
��,@�8�k��N��T���P������#u'���W����������#J�wpdm�
��[��t ��+��YH(��C
(��
(��;��'���*�a�
A�	�$#d�����	�}5_����N��]&�I�yf����q�&���c�R%�QE1S�B��h�������ipcm�*� ���>d@q�c����>'��h�[����[���9�����{f�S�e#��g]+�_V��Z�.������#�>������#k
���aM�s$��rN�S>�*(�����K
(����zf�y:�Ek��,UT�{�@	����S�
��f�O��[!�#����/L��W�T�w��Msr�I�s$�z��3QTQEQE��I��Y�H\���t\��c#'��n��(�J+��U{&���E�`��	�
���(��uudy��"e����E�^�^_�B���e�a��rP�|�ET}�EU���/��v_�O�%z}y���"]����E�C|�^��:����}Q�Q�����>F�w0�����x�}��[_y�+wu$���N}����J)�z5QTHW�|A&��;��u����bC���;c$d�<�eB��}�_e�������e��}���������|qI���g�!����{{fP����*A ���8�z���o|�l�Y<A+�7,�4h�HH0C1<���;��iW����iv�]\6>H�8$�$rpk��3�Z�fI|Gz����;����mR:n��k�����-����kt���@��98�����+��~����iv1��`��7��~c��:�
���b
(��g[�4H<�Z���J�(��g�j�c��y�T��6�X�.����os���z0�# ��������bW���/q(b�}��!A����*G���%�^��I����59XW	�pB�3���;���c�C4�9B��IG����������(��(��(�P����t���{�����J���������)�a��I���RUr{�	���w��*�,+��h(�O�2#2�|���$>�$����|U��P�}�C	Ee�NK���H�����>V��*
(��
(��
(��
(��
(��
(��
(��
(��
�R�+��*�L��|o�"^��`�����X�7��/_��}���jb>E��*=��t����i!���2���H���s9#�������M��<�f��\K>1��"<{����^�V�{�y���u����C�I�9���0Xg<J���:�m��|n�4>^����s��f}��c���{ETQEQEQE{����5��y�������`���q������U�?�+���"XG�K���Q�w.��{|���J�b���o���7Y��,Cd�k#c�m�r���������W�����w�����H�����\&}�Wa��6$|�ET}�EU�b���D�����-��Z�����%������m_"��H(����Q@Q@��7����n��V���W�o��������{UZ���W��/���_�O�%}	_=����:Y�=?�d���G���.�MKS�����u2@��308��Uk��Kk
��M+���#JH�������RQ��1��0F�C�DA�U�O���O4v�I4�$P�����U@�$��
�������}�\��s!`�b�r��s���?����w��n��H��9WuF�����T��QEIAEPEP^��Xk��1'Q���Q�1e$�o�8����:��_e�6����-�s��7m`��l����QEYh��@6�����k��m��#0��P�y:1�*?����%_�,��G4<SF������9�������^ �������e��q�/ g�|RCf�QLG�o�?���No���P������6����t����+�J���W�E��X����JIQ��1`s��f��e44�5��*J
(��
(��
(��
(��
(��
(�����?�'�e����D���?��H��$���n�j�_�:;i>�iC���oY�6c�*rO�wQV@Uz��z�~#'N7mR��l��W��|����1i�S��&�)'�B�=
��{�|�_B��_�%���A��\u��}�=��{�a��q�����QEQ!_��������W���!�x$h�BA��pG���(�����(��(��K$>6�Z67��(���0�H>��
ul�|}���y{n����`���f=�B��(������:�{��?��{Uxw�u�hv����9eu��\�S���o�����!�l�'Gg�O�Az���V�Y{��D�UvV�����c�����i aES�?�E���}6��6�Y���3�9��E����5��e�q��-�g�g�HO�G���+��^� ��)(��(��+���?�M��m����`����$?4e�7����:�J��T� �Pi�3���*�1|o�"^��`�����-}u����������iH�}k�c��F��������Q�Y�3�$��k~������xC�%eU�Xn���d�2��Zd�r�od��{�MR���deF�p����7�&�=C�z�33���N
������Tg��G��QEAaEPEPEP������w���z}y��Y��
$�&����X�A��U3��#}+�j�p�/���L������+�+��h_�,�� ��.J���������(���������.���	����O�0���K������(`������?�M��m����`������}(+T����p?:�S;j(�����a������}��H<����R���zW=���^�$�kk/�]��n.��`wn���>��Q@Q@������_\Cmn��,�W'$����?|d�l�h�?�7,�,��HH=r1`��S�K���9��1.o���	Smk�pA�j��A�������"����{{fR�����*@�8�"z�c5�R��z��1�w�SG�-*1���F<�e��r:��7�����{����.����``d�O
�����(��(��(��(��(��%��^�a�y~o�.#����v�
���:����dW�u��-`k��+�Y���
���z��	=2O�����<1�A$3���"�tu��`�Pi�S���t�4]r�M�y{Y�0���<6;0G�������D=��m"������p?�$���^/R�AERQEQEQEQEQEQEQEW���]}�Ud����������������z����?�[S�-QPY�����&�?�����]�q_��h����G=v�h�������k�y~^��7g>X����l�������#�����(���r`nh���I$�4���QE%Q@Q@Q@~���@������Z���O�oe%��48a(n�rX�6����p����R&A\W�o�&�������]�q_���k���G%6$|�ET}�EU�b���D�����-��Z�����%������m_"��H(����Q@Q@��7����n��V���W�o��������{UZ���W��/���_�O�%}	_=����:Y�=?�d���G��k�g�JN��m��K�]����):?����/R�g��QEY�~���%��A?�\���}���[�	be��sI��$2q����U,�QE!�Q@Q@Q@a�r�MK��]��k�X�p���	�{sZ5��666������5�5�;UF���*z��A��>+�U�������^0���8&�0I��w�(�^UEAg��W���1��Cb�T�UK�@�a�x�r:`��������k�����$����#n�B �Aj��K��'���%����=������7.pzv8��+��WN��������a��~�������<}��R���wf�I�J���"P3����8������8(����(��(��(��+K��%��58�4����:���@�@�
�e������u3m�4�O��<����xB?hF��&����3*�cT�%G8�rO������<!a��\j�.'��:�L�Q��2{�U$KaESW�����|ku
I��O�F�F�������d*�f��������0�Z���]&�	_�>3����r0k��M�{?��~�}kNy�{�wBrW�v�����N<b������w�1g���%
������$�p;�)
�Q�ED�|���GG�/LaV�/$��
����8�"�������Z�~��P����0s�#����I��>g��*
(��
(��
����F3�����;h��#�~IV�B�s�=���6��S������v	k���=I�k���~?xf�M@�d]�����9���23�ji	��QEQ!_7�w�[��*�M��p1?�Nd��$���g�;x$�y(cR��p��d�O@|}�
NMk\�����f�+9r��=��RcC4K���f�P�����G>��wm`��l��������Z�Z��4��*��B�D
����+c��3���)����:7�����(�\i�	�X�1C���P0C����|�_h�wI�������`�PE|���
�xS]��h�������Ix����@#�b	Lh�������(��(�	�mf�����O2�y(� nf8'������(��.��v����X���w��c�'�K��-��Qo��H`Y��H�/~Kt+^�T�aES��e��'��L-��Y�p�i|��Q��
����������	�K�cg
�n�F�'(�=r1&GO�u��,�}#�&��~�/g��$�;��$I�o���+������X[?]��U��)�%�����
�Bs�?�j�,)���C<i,2)GGP��F ��E|y�.M\��f�^�f�3!B���������>;x>k��"� �b�e���>��'!�xx�$x}K)QHaEPE��|/&��h�+���;Oo7yW�`����8c���
�O�_�������,6�������g�'��t��������/���L������+�+��h_�,�� ��.J���������(���������.���	����O�0���K������(`�����gk�����`��n��HJ����g�+�+�>������n%�������Pr�'�z�:�(�}EUQ\�A�E���x~�{x��k��vL��8��n9�PI<
��?��_�[U�E�n��O�W����8�+�<M���fx�9d��#����(;T������J�
*nU���������w5��g�����p@2Of�QE!�Q@B����^�M�P�7�w���$�
��"���e��$}R%P%�&%S�YT}��x���	��y}Q@Q@Q@Q@Q@z_��G�x�]:��C���������$�9a��V�����,.���]N
�� �4���|5�D~)����26�����8�1������������[k:M��z���c1���Fdq����+�n�7�\�������#.���q������A��k����-|Y�Kk* ��Y�''91��~S����Wg�V���j�Yj��mr6����y�������(��(��(��(��+_�^��I����n��`B� s�;vs��(>������-��y1�d����X���x�+�?�N��Z@��d�a�.Yp�7����/orI>Q�k���w���z�^����WA��Q�=~��v�#��)+�J������2
�����z����?�[V�b���D�����-����(�,��|���wl����E�cFU#�-�����������������
*������H�@p�!9���5h��W�~��g��Ka��D��[�b�y�3�o� �������^��^���3]����E.TWIR��m��>]��*
(��
(��
(��='�.����YvX����|���
������}�}\/�����
�^*���/k��F���I�q��{�����������0��V��8d,B��q���k���h}R;�wL�c��gI#+�CHG�Gb�~#y-QPY��QVA��(����P�I+����2X��s_!����2��������<��$h�L������:�RH(�����(��)��$�G�������S@@����O�.�Z
�=�bR�2"���px�w�z�bx+E��w��v�_|�G���Av%���q�LV�Y+����GK/����������h_�,����2JOa�����o{&���hBk���d��~8c�z���(�R�������XjP�s
�UxF#�\� �qZ5d��-3�_�:��Y]����"ft��@��Y@�^k���R�Y�����;����vX�H����T*NJ(
����8�Lh�h�����(��(�����mx�J��:)���v����#�Ct�����j���5��������������� �|hL��(���4Ph�������O
������t�|������{���� ���Z���t+mJ�������b�2#�20z��x���Z���;�|,��p�/��#����ZvW>���<��;��a����H�������l�C�C�
��B�(�8���mZu�J)�]g�����c2�#�	9;�_x�������-�K��Pe�(�HP3�@t8�_T�E�s��+��c��6����e����Y��`_@�xu=
r���O
]B�������#��p���*l;�5Q_B�����������?�7SY�����K,���.s�(V���S��X.|�W�}Q�nE��e=������8�E������OO���E�v+���N��?u���3]D�op���C�DE
���;
���S������Ks�8������=G-����7d���A�t�OZE�[[/�I$��I9$���t�E;
�EPUuMB�J����'H-`]�#t��xrI��T�-4�>{�Bt���$���O@$�
���?�n�_�P�i06m������X������W2�k�k���j7��
�8b^Dq�H\�<�O�=������(��>x��	��H����<�E'�0!��n�j�+���/��z�i6�6��;����r�'�:��� �;�#�	XdP��������
Zw!��QEy/�O�M�L����A~���]�bO�Rpz����wxL�I�C<o��GGR�� �"���xKE�4%u[4y��K��eN0������cI��|�E{V��@���]_����?�wH��OA�X���|G�?�G��������/�Zf�u�jYi�<�S6��N��@:�xd��i���bu-j�x��%�+��q-�^1���h��?l`��a�F��FY�$nc�ld�$�<Q`���2�s�s}�4WZ�eU�% ^�L�w����q���ED�U-oS�����F����Fdlc���2N��@{������z=��n���[!zF��� 8���k� ��>�s����f8� ��?���I��b��RA^��'���� }�M�������L:u8����B
��|������tt$2�9��Hg�4W!���������j6�b�RW,��@0��`�;f����|k��Oh���3F���f^LR@8�9 ���8#z��/����+t"���M��1e�rG@�x<3����:�������m���|n�d����x<�k�����5��4���9����\`�	
�prX���4Rg��W�^������R��������B���������g���io�l�<m6���vc���J�.yzO�/��:��_�p�m��+�u��&�w�9�_X���o�ze����.��$�d9N�m# �#=k����1��0F�C�DE
��`@)�QLAP�]Cceqwt�]���>	��2N'�������H��z\�$a�|�3�)c���pxaC�-�>�7�5��R�m{�7��Q��@��3�q�������.�s������m���H��:��d�+��S��t�MF��[��$\�J���2A�5��z�����������)��G1����7�3���	!�&��h���FOwI�����C+) ��_>�I�_s�}�T����/����m�9�y� z��h���v>+����G���cq=��]3ny�������T�NI��5��������Z�9?0���{_?�M���W�Y�����R���9����aJ�<������m2_;V��YU����D:��<��X.y�|����}�?*�$	=�������Y��z����^�l�=����j2��:��9<�c���z``U�!�����"�5��U@���T��n�EP^_�B���e�a��rW�W�����&Y�A?�\�=�=�E�jQEdy���"]����E�^�^a�B���e�a��rP�=T�7SX������q�,o�v������TT}��}fh:����1�)����\�3�g�5�_:���xRm/R�#��w��pb{)��k����CV
(��>w�����C�}GC��4m�G@w=��v^�� ��O��������������{yl��1��}��1���=N$��NSCL�����K���������g;��C��1������H~
k�T_�ka���br����J�w<��t-P��e�Z���R�T�����A�z�:������o>�[S��P��Q��y
�
��>����65��iV����>X����p'$���k����|!��r���.'��:�L�Q��2{�QEQ'����_��Pc����/�'?�����zu����5�xf�������>\��r��[�Q�Q��+���>0j�v����o��{��hm���#�3�>��M
3�*(�����(��(��(��(�����'�Eu����n�"H��G�9 �s�H?Siz�����}��������:�<yk�Z��;��R����}"��9PKB���;�c#�#�LMJQL��+�#��D�::�)�S��9�xN���I��\����Q����<e{�����
�|%r~��b���>��ddg*q��d�������	!�4����ee#z�CW�����<Q�F�&3�3>�36]<��$�!#i���2�>��N���E}��3�J~P��'�������%sQ�/��D��n���Un"h�Q�3T�(����N��y���w�^7���ns��g��
TW�x�/�5=�^G�n�u�e��\"���m��z��<)��B�v��/����+�!�q#�x�##�+�M�/�:������9,�rr�,g"�Ns����R0~����a��&-?K���9f<�����'��V�IX��QL�h���i�H��K��UP2I'���>G�$�����X}��`Y����H{�/�W��T��'��m;Kg�E������0�����p��YH+�J�����H+���%������m[U����������#�Z(������������d�n-�.I���pFA�+��+P����{�>e��u������ ���+�Z��^1[I��5Q ���I#�$$f!����6z��G�QED��������x�EG��Fio ��19i�I�������}�^?���1�<��)���e#���3���t<|�TRhi�Eh�:.����j��Y�L�B�S���0�r	���((���U��z��]��W
��5�@�=����^��w����&�����'�I������~`:/| �=��)x�+���8��r� �rFA�!����4��""(UU:T�-���)����+����������N�Q�p9<��/����A��j�#k��X&A���\�3�g�5���`�)�=�8{�S��D�p?�3��x�Ke$QE!�\��_�;E�����g�R��8P'��>�������X7~���f/a6����c�w'?��z�Z!�|����si�)�U�i��z UIq�S���q���	���;�:5��������[��%�����G5pN���W}�?�:��|�M�����a�Ko�g?+��#xt�NPXQEIRO4p��4��3�I���~�9���
B'��������rs�;>�0~R(��K��"��:���eai�-f\g� �������k� �;x#��(cP���UT�RD�>�(� ���h_�,����2J��{���t���z��)=��/��*J=����t����yk�����p;1�''��]��<?��h:�����6��w�� �#��G�<b�����i������\�\)+�v� �A��=8��T�-�x����,����^��'<��BpN�����:Z)���T����B{B���$o��PG��_Vx��:W�m��#���2�]��������{S�	�x�>����}��v)���,�Y��N;����3R�I��QHaE>��h��7�Y""Y���Mz'������>��iz~A"E���B��zua�P;�/
���\���Y���s�y��8 }�#�]/O����,t�Xlq�@?�'�O$�MA���~�����l�������z�NI=:���V�ZV!��Q@��E|WETQEhhz���_���t��!J�\A�<��;J��?4�,v��,5\((�s18��'�q��y�v	���������(����GY��1Z\*j:tJ!��x������
�b����=���������>�s���N�t��N23������EQEQEQEQEA}{kal��0�[�7I3�Q�I��'���L���]j�+�Lq���{�G��$k��g���8e���o4��E����9T#,y?x0���[�b���K�n�?<����:�p���:��Q���b�E��'1Z�y��68�@2s�QEIAEPEP^��{�z0MZp�{�6��@����O9�I�#�(�h�P�A�E�?��������_���M������p99�x$v$���>$��K`�ZM����$D�$D��^���q�"�;���EPEPEPE����z�G}u����a���t^�����
�SP������	�Xt�?@?�'�$�|���7^/��x4�6���OM��� rj������n��d��RB�Z'����e�;�S����[) ��)(��������Z-GK���8*yY�0���������"���s����Z������@�2�t-gP�u��.���)M�OPA�#�u���������6�O�}+Y�A��:]����2��$1�9�=�	&�&����(��(��(�������{���m�����*��d�:�+��{�v[���������K����f1��`u?7��H��u�~!���M��$��^OQl�}���t_����:�#�+�3���gc���I=�2���RV
(����(�w�I�#��N����xKk�?������t?7������s�����qe������X���$C���a�<�_���L��x���z���a��:\Z���D�G�#��x5j���(��(��+��'|I��-���&��X|�:��k�A-��A���{��+#���q�i�yf��wv,��5$�z�Z�W�����&Y�A?�\�����/���_�O�%��QPY��QV@W�~���%��A?�\�����/��v_�O�%��QPXW�|#��/V
�b�a-n����G?��?���}�	���>������{�/���#Myf�qv�ZXA�wg%�q�q�{����k6Kw���un���l�8:�����CV.�EQEQEQEy��~(�^�M��~��G����Q8��n���s��J�E�oXxKI7w�������p�7���or@?0x�]���.��K�N�*�5��;�$��i����k���W�{���70�u$�����RV
(����(��(��(��(��(�����n�!~U���L���A��3���0{�w���?�zTW�\�H��S�����b?�� �_��������7Omr������8#���G��W��3�
��"����'b���O���H�IZ�++�k�d��������X\:�����$�QE�����[�[AsctsFNFA����*��u��E�Y�ZD���,jO8���TQ@Q@
������^�Cmn��,�W'$�9 W�x�������xmV��0i���pX���rzP=^���Ok�^�-������zI?A������[�4�pi��2���(�<�������+��Z����^��nJ���t:�����uKe$QE!�}�_���Q&AX�7��/_��}���j��_������>��E�1"�E�:7h�^6eu �)�w�(�����,	����kQ��[��Q������!}�/�Y �9����6��U��� ��W�|<���yz�$�;��;�����$pp7�q�M&KG�QL�h� �h$Ia�C��VR2#�4�b<1�A$3���"�tu��`�Pk����"}L
�T��DlFP>������jc�40�(P^��=Y�$��������x�(cP���UT�>�(��<���$���C�wv
��d�O@>�����8�5i�S��������H��wc��c|A��
�l|(�\O�,����}G���y���>�x����y��yY�b�������I�M&����$�I4�<����������ORi�QRPQE��I��Y�H\���t\��c#'����j�����+{�G�-��e��F�a�py���z/���rxfu��VytY�����VQ�Ou�G9�G��T7����scq���l�8ul�PEOTHVv���:��mGK���W`y��F��H����F��O�<1��u�����<��H����}���=�Z�n���~g�f�ig�c��X�c8��2:�EPx5�~)���i~��3�&�L��8"3������r�������>�����X�,�k�T��C���s���6�������#������FG_BP��|��B���e�`����W������#������FII�4y}QRPWw���������IN�s������J^�G�W	E}��\A��$������VR2#����~!j�i���]�}������'�v�'�9E������}�����b��AVA�~��=�N�5cF�(���h��/q{�i����l�����FO
��<1�������n���A���O���=�]KM�t�/�����,��o�<+�g��O�Wh��
������/�\jwK�l��`�W=g�=p88��5����;	%��%�*6h�������W �����?8x��w�-�����
em���a_A�On��cH������^���	��b��(f@N=�kF�|�"^��`����L@h��@�E�Q@Q@Q@G��y�=�K=Ng�M���>l{W�����)}z�����5�#����O�6�����O�x��+J���)u<�W6L9���s�n�s�J�����/-�xu�=Q��4�&���|���2�.>��������?�2?�����I������E��0X�����i"}e#% ���{0R����Hc�i��S+a7��7��%��#�����)\,zf�����WK��L�pe*�Y1�Y��3�
O|����^�S���������+H�rN2ONO�Uh�q�Q@Q@Q@Q@Q@Ogwqcr�W[�&v��e����	�����Xn]^uH�H'�Q�p�<���H������|�z{�a����M�eAL��y*8�W��S��}ge�o�[$���r�gi�&���|0��T���xs���G�G�5�-��������+�yh����>�L��:�a���Z��������e���*�c`E�����Q��|�E+�����|E���m*i����D�r
�&s����99��9�y�yfv�Wb��rX�I'��QHaEPEPEPEP]G�<u�xclz}��h?�����A��,O�FO\�/E{���������\E*�����+�>c�+�z�^�s�Y|I����A���h��x��B����4S��}u�	g�?�?��d�H|[��	:�����g����S�L_|Y����I
��n1���p���������k��9a���-�����f�P�����a�#���)\,jk�����������~�s�N;T`.p3�3����C
(��
(��
(��
(��54U����G���F��NU� nS�ld� �5�Z��U�5�-]K�f�H\q�1�������>3E;���4��~�H7������*�R�8��w�����	g�?�?��d�_"�E�c�k�xj$���0�)b���	$��������6
s��U���1�a�1|����\,z�>+k��hl[�*��
�+t<�������y�-���wP�[!�y�G��������?�K�?�o�����Xll��-S���5�4�;UF���;��dy�}���=���>������k���?Oz�����6�'�4K%'��)fa�6�P��cj��<v�(�,��]^#��-#��I��(����?���?����r���w�P����?���?����r�|e�V�n���oc1�'um�Xwc��EQHaEPWt�V�F�[�.�k[���c# ���2 ��Q@����W�l�]���A�L������NU����~|w:w��
]B�=����#�������c��+��)�V>���>��M{K
��D`��>�f��������?�2?�*�E��0X��P���;	�S�V��wf�.2���s\~���N���:]��,�q�+����\v�<�Ww�~"x���
����$�oj�Zcn�	����H���F�)(��(��(��(��(��(��(��(��+GF��=7I���b��"r������'����u�z�}f�z�����H�����r	 �
;s���?<9vcK��l�]�?25lr��,y�v���u���c��?�'���h������&p��2�p<��kG���H������E��`����%����������Q���];��F�h�fq�rg�1��{��+�:(�X�#T����g�;(/�Y1��9,C�	�����������Km5J���� l��H�00T����(��cGY��=j7V���p��%rU���G��VuRQEQEW������i��O�9^_Ez��.������~����WU���jze����Z�u��"�0VR2�y�9���`��)(��(������5��I�t�����'�g*{��d`����������V
I�����lb01�q�t�����c�-3�g���5�R�iW;.ch�d�r6:}�g�5��	g�?�?��d�_"�E���_��xs���G�G�5��|J�����&��F3�#yU��(*:�n�.=�Y��n��E�%�1����k��9?�w�����,�|M1mZ�����>X���(�7�����
\,QE!�Q@Q@Q@��f�����7������D���Os��t"�_B��e**k�l��aA������G�X�\�U�+T��<'3E�n�vg
� }�g���h��Y���������Qp������1el��������f�'*d����w�F�f�="��Q`�oc�FW$d�������c��g�����P��������v�3��A���������������Z���tV��$&'Ve�Y[��Ev_���G�>ZG�����W��E��������i��O�9\o��Q{��N+�F+x��+*����r��h��`��(��(��F��^���w5��������pGB2 ��Q@����S��C�+p
sjB�z�<O\�8��G���]LB�P6sI��]�c�����q���w��a���c���K<9�A�#�#�C�����'�#���|�c�]G���-aW�����m1�n������1�����~!���_'��[A�!/�:L����c��z��)\,I<�\M$����#wv,����ORMGE�z6��w^�t�;-4�����!b�����U��]^#��-#��I��+���qX��]^#��-#��I��(�/�����(�0��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�M@�|Ar`��f�u��F8$nc�\��$g���lu��F�n���ZhYwL��FN:pO\����N[D��r��e�@�i���SJ�n���c���
��[���r-�,���A�#��_A���� F�ol�Jy�s!RrAs�#8��������7>_�����F�W0��n�y����U���p�{�J��qu���t_�W:m��$Rb�����\r9Q������(����������2��r�1���������-��ERQEW�|�����R�e����v���������>L���oB�������N��xX��1���@�����O	�q��n���I�~�H@��p���-!6oQED�|���S�����+��Y�[#Fs�n`y��~��5�N�F�.���om���:(�$��I�?������������id|����&� ��*J
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
����1[���BTV��������J��;���
Mx-Y��n4��/,�hn`p���	��i�5s��+��q��_��_d��������=T���������Z��a��5��i
��s�E���2U8'��3Wh�������#!a��T���N�'=��^9��Wx�����3�_O�J����*����&a�����~	\�����
[��e�g��(����zW��E��_��?�xz����Q[!��Q�|F�<�2q��x�J(� ����}��_	�R�J�odV[HH��Lq�����NG���|R�~�bdb��2��^J�G\�
�8�<x�Y�on5��/ei�gs$�{���}Z����(�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP�3P���/t���[tr'P�=<pk���l<I�MLE��cj���������q��'��y���SN�j���W������z�F1_���V+�w"���G�W�����5=����m�l\\.P���F�&��>�����TU-7W�uO3�3P�������,�s�g�8?�]��*�����_����ZY������=��q�3����.�\��_��v���k�VC%�D���6�:�s��+��M�w^�RX4��K�~3-61�7�~r��>���������8LYK�L��rTpr�h��'##�/k��"���5I|������{*���9$���������(�0��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��
endstream
endobj
24
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
600
/Height
600
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
33
0
R
>>
stream
����JFIF��C		

 $.' ",#(7),01444'9=82<.342��C			

2!!22222222222222222222222222222222222222222222222222��XX"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�j(��Hii(QIEQI@��h�bP(��ER(��l�(�RR�S��(��(��(�����\Q�J)i(��Hh��KH���L4��@%�
%/�RR3E
(4Ph))i
��'���J(���J)(��
J(��R�H�(��(��(�4����
(���i������(4P�f��AE�QIK�J(�4��(�aEPFh���)(h�������
(��
(��
(��
(��
3A��IKI@�f�qES��)�Q�L�A��JJRi3@f��0���%
CKI@�4PM&h��0[�(C@�I�{�)�QE�!�P)h��(��(��(��(
%)�����J(4PEP��J�Q@	EPQ�SI@Q@��E��(���EQE���PEPE��Q�ZJ(����1����L��H�M+���
p5�v�#:�a�cE����B*������L������9���k���*��GJ`IHii���4��@X\����3@
i�f�-%�f��h��
Z���B
pP��D#�<F*AE&�E-%"�T������(��Q@Q@Q@Q@Q@	�1KA�&�u�@%`���pJ)��ESQE%QE��(��(QE%QE%(��(��
J3E!�����bQ�O�Hw`��XRj9��n�8-�>�zVd��>Y��=jE(���fl)���\�L�}
b����"%������������\�#�{��d�0Gun����bk��P�
�?�4��������;���L�:nC�B�m����<9��y`��u��p�;;�%A���f�1.��~�1���9��4���� u5�& ����s�_'r�q�����8�1��S����'���E����������l�U�;���R���i����0r��j`z���n�������"�o���p�-��u6)`~�?:�m�j��BjA�KLTPiE.(����.(�R�����P3T��>Z�������4�(����J)sI�@����@�����(���-���R�L�i�i���7ei�P!1E-n�Z)�
%;�)�RR��4����)i)h(��P�h���(��(�����������g)Xc~�^)��l����!g����$��5�O�;])����Y	�A�Y��)E��@����_����5���7�$h�J���,��.��7W7�����JK��h�+�����sf��z���n^f�iF}�+�\�1l��5�.M�r��Y���X���Reu:95[�bX�{c]����?��I�-��X�g������ca.6���+x��X��t�i���M=I�^��>��q^205�E��A��)�S�\�Mo����+����i'�=k��l�������������������}j����W���6y6���O� ��;R��\�����+	�L���][��6z�TuX#6�=sX����1~�&>S���W���x��i���v�-����6�7�C�R��~��U����x�����7���c]u���F���k�#�Q�8>��M����Mh��Pc ��JD��$e�y�"��=+��<Om�(\���=��!��r��f-4H)i���~4�����J)qF()E.(��-U5nO�j��"6����sHb�R�������Pf�\R��S�S��
x�N�1F)qF((���	E.)(�Q@����!��M�4PG��G��RR�P0������(��(�%-PQEf��QOP"�����E$9P��Y���e�Y���,`�O'��/���1�� 7����8S^g�E4�5��u�H��
��4����F��7����Rm&'H9"�M3P�]s�rj���4�H��B���?�s�6�go�"���
54r����M��Y��=5i-
�w?Z�����m�AH���7���od����p�~U�������S����8�*�/������K��-D�f/����U�Q-���j�v��1�M�I1���z����p��c��������*KI�B�U�j���O����[���#�������V��=q�U��6�J���)�$��}�2��rt�@f�Ay���N�r
"�3Pq��t2[��VM��V����h�&_�~�E����}��?�T:��9C�Sm �-�>l��I;B���+�����d�������z�M18�����.`��������C��P�k��Tc$��
U|c[�6�mY_;J�j�3�.�}d�d���z������kVb-��Q�'�nF�X��V��i�?���:Zd�Q@��R�@
q���j�}����4�*V�R��b��LR��)�����QN�S�8R��@	�\R��&(�-���Pb�Z(z(�� �4b�(�(�J(��0�Q@	EPFh��b��)(i(�9�a������N�ii��I~����u�������q���}j���	^g�
���=y?�~ Emk&��1������r�Q���RGA�|E��#j�ZB��Q��y����j:���x�����9���ec>�pR/�BrX��hk��;c����VCV��12�� u���v!?�t��)~q�V�������ik�NN�A2�9_������B�����h�����T����*Y
��]57�~U������l&����J-�v�qJ���6;|q�U������ZQ��`'�3DgGbt�*�[��VU=�QM�DQF��e"*T�*@E@)-�(��!�
�����hQ2�03�-��U9���3[
�SJ�R}(rB���>�O�v���T�����<��G���5��,���,�������G�Y�ZZ���+X�M�Y��m#�S�_�������5�3�,;������o2S�w&�Gya�����V�mx�<�
x����j��s����k�M&���1�oL����^�:�j3�F��>��dcR�C��KX�M����������3���ku����P)qF(�R�Qa��U��Z��}����#S)LQ�Z(1E-�BQ�\RP�p�����M�)h����PE-�R�@�Fh� ��(��h���F(��
(���()3KI�wh��Rc��+��o���
���/���k[�>$�K��&���`���&������&C��z�kvQ�O�$��H"�\����]?M�Q��8L����m��n<��95�ml>T�\�����VJ��[k}6��R98�V-�����rIn����g�#�s]��[�+Vzo���}�n0*�A�Ryb��(��T���a<�C4Q"T��;������
8-;a�!�b�=@�i�1RR�P)h�4�AC�HZ�^��������f��j@i���A;i@�H���PT�()J�)K��FHN��V�Oj�����+���f�5-	&R@�+�0���Lh���m�"����n<��)�F+J�R��<�9�WJ����=+�$�k+�p=��]����xwZ���������<~U�&��[k�)<,7`es��^��������/
��m�%�3�.j�3��3�CES��85{�������V���A���PU���f��>j����i��(�Q@(�P�1E
QI�Q@�h�
8QH)h��)�QKE%�P��@���(QERz��P0��
%(��RR�H�n�����
M���x�`Sg���i7b��������Ip���vs���g��c������S^\O5���|*rz����0
���Vi]�J6B���f��z��v�F��FW���6���c�Weol#Q�l��d�l^Lc5e@�O�5W�H&*P*r��Q�H�`��������1O�E�S�P�������)4�4�i�AR�<�F�SMIC���5"�= 'ZpZ�Z��m��
E8}���n���@���}�����7R���J�����JB�i\�,[�=+��>��|���'���9�wv�5���)�;B����>P:T�e��>v;����3�^g�D�1U�� �.`��*KTz�|Vt�A �s�iH���nWY�Yb!�� ���S��^0����`�i��x��}.q�����]0��J��zX4��6�kCj��z�
�qCL��@&(��(��(��)E%8P�}5i��J))i�QE-�R�E�����.�p�P(Z(��Q@�I@��QE%��P�(���K�g��)��?���J�R��������V��<���U��j��^����Q"|�*��{�A�h���^�qQ�Y��Ek�������:���&;
���$���8���S�m�5�"`-)���u��S
��h)P
��a'u"�a�*-�w^)�}��
�����B)�4\d���*����)e����6��p�b����in�8�����R�^�����jGr:3K�6��SQNJ[�.i)3Fjl���jJk���[L��6|�=��������^x��2}���legZ,#[\H��;U�+Tkll%f��5r�C�7^�[������qD4}5��a5���.�8�z��x������c����zW�
�����I���*�L*9E2
��5)�� Q�����PE.(�%(��x�D*A@�QE.)�
(�����J)h�
��1E
(�%QE
3E�
)(��s�2}=iEd��Qn�<��
q�!��'���nu)�o�����E��}$�����O�A�g;�iN@�O������z�vuGH�F�c��|}�����G��<?k�Y����5���$F��DEP�b���qHV�"�7o���"��
CqI�q�T���R��
Z7b������]���������^��!zij<��@�{S<
V�W�J�Q� jph���)w
��)
("����i��M"�M*�E-.�
&i3Fh��>�`R?�T�e;������/�J�����_�>��xWvz�R$���w� �A���H�����n��&�>�z{V}�k�]D>q�
d��Ku�]E{l>@���w�<E�4\02*�Fk��8_��-�W�t?�����O�o�Hp�=��+�7^g����N%P�rS_���)X�a�
F��QHi�QEQ@��(��Z���C�E ��Z(��(��(��(��L�(��(��(��i���,�(�J���� �#M<�y��A�E����t����0��b��l���9?l��z�f�
�AGA���mJy�x������.���y��B;QN51��+��D!��m8�
��;TL��1����	��S�Hq4�������J%��C�E(��(�m/�1S��i��L���J�N
8���Sgp��V�;����j�K�R�*<PH�0zxcU����ZAr`i���H��,K�Q�v�zSsQr����c>)����r*2�u#H
�G
k
�s�V��t������?
Z����?����LKr�bV!��v�O9��3!��3���O`h�c�_!��A���}�v�%I������z0��&����l�0�9tu�][����|/����O��������3o�>��tr�Y��0��4�6�R��B�)��QE)
--=i��@�(��p��E- 
(��
(��E(�4PES��(RR�3Fh�(CI���M��4Y���������i��J��������E���W�&��-�q��k7��,�D1��C	�9�]n��������{���h����h_<b<`U"���m�L[X��mk���5w0�*'qQ��*��d�4�,��W�cK���uJMkwCT�8^�ZY�W9&�.�o�4j������	A�K����A�V��Hf�4��/�U�l�$�/�AI�7\~5��j������QRY9o��9��}���&��)���]0�A�
��!z�����4��^��c�����+��@9�i
�_6��x'�5H�A[��%��9���S�������u�������~��	Oc����y|~��]�C����46�_������f�[��I�Vn,i����F\����(�u�������<�������Z�Ml�tr�����v�6��>�sU�O*LZL	qHh��4	��>��;�����u���������Rf������V=�|���$�����c����d�����������C����\/���^4-�h��2�q����� �W����E�W`��n��_<Y\���e���+����hg���RH���a4zg�S���L5���)i)))i(��(��(iE%(�	:�)�������EPEPA��@���Sh���!�Bf�5"�N
(�i�:�Q@�N���4��v=�4��M���(�s��9��|_��0���ZR'��]A�N�'�V�iea��
c������t���\b�H��!�{�{��s� ��������i�S\�%a�W�#����A<��N�q�����_�����sT��_&2����L]�u�����g��wv"�U5
~���{���-�c���Z��e�cB����5A�B/���P�S��	G�T������[{6%$i}��{�������/����.�����R��\����#����l�.W������?�����z��V$�����-f
����[is��4��q�����X��>����V�G���\����VqS�f��T�m98�h�s�����sO��5V���7��K�vX����#"u�s1�����2��~5�}�Is��c�aQ��������z��|�nG�4���?Z�&�����l����}��V����5�l��9��I!:�8���z�����S~b��o��7��6�H�j+������U�:����l�h$'����-:}����Z�xOIN��G����FH>���E����^;�F���Jio���Z�|�;J����x/�e+���F���w>7���n�N;�h���???�1���W�_xN��,�� ��X���f���
L��O���dw�/�n�oNjTM��U����m�����(=�I��=[��_�����5��*5���4$)=~�����m�+�����;�Q-n��O�]���/�MK��j�r7�d��9v��x���H���9u��9��/K�K&��?
j��pO�i��\R�m]��iu:M*�]���k����i^(F<�s^se)��X��>�����"�:����&G���eJ���C��N�gu�]����j�w���i�����AIEQEQE����P��)��)�u-%- 
(��
(����e(�0!��Q@��(��(��)h*������3�}*}��#����m��I$�x�P��=�:,4�6����Gel;�x�T�{k��	k��\n��z�����D������O�j{�������`�_?C�Y��!L�]+M�������Zz���;���++�oP[{E�y����?|T�:��w!o�_(��{V���
V*��P+���MVL�g-�W����M� �a�r+fK{K<�1DqV�"y���_�.q��}NkM>��{����+��Q������V��u;�INF;���B�mp�W�n��id�y/�|�q�]��{mc3on��b���������L������oX~T�~�C�_9=����U��@���O��s&@��4��������m��sYr����<�\����������i�w�\Z�u���9���/��y�#�X9�5�o��\	F��x���}�2\X.����;e�)�92����Lj�=*i���U�V���Z.��k�F������c�����T�A����1DXz�������	��(��t��n}�3�W�rc�c������%ss��&=2y5��t
3��(ut[:���]?$C���[+\���0��i��@��u5�����;�������S�t!���T��6�:K�F$��������
^
�l�Y��}���i�`���0:sX�����Z��g�:sTuK�����k�[��K.1�Vd���^'�5�Hl��G��Uv����2����sY�����g���5�EtoM��S�:��MI��Xf�0J��db��]�t/|����"�k>��l���M��ln��z�g8�A��|��3���V�I��������w���,�&���q������T1�	85��iW��*�D]��Go�;��j\�����������+�&����5�������122���+�4�b�V�w@��_�R�Zlb�[2��������]~�_'��;�?rGz����,�w'�C)g�s��y��j�]���U[B��_
�}k����M�Fz���������R�}Z��3G��9��f�����8�w(7B3������!�5��E�nZ������V�9���ii*�
(��Q@��R�JZ%(��z��)�u-4S� 
(��ESCEP1sFi)h�����	J(��F(�����������<7o���>c�������|w����%��o��m|}j�d��?4�5����M���������:�[���%l(�Jm>��B�@���j�F�+�D6�
{��>U�y}����f�A�c��W�p�9��V��eH���C�h�3���\��}��9�k�KS��B�����c�jW�W�,�=��Y�������k�m�f�{�dd�b���+U/)+u�n.��3�M����)��5�v�R�bc��I��/8��k���ri�Ze�\�7�x�yd+%zW'sys+33��p=&=cNF�h�inu+[���)K�����BK���������S:I�`y	 g��A�]��$� ��X���e,X��&�d�vw��L�F����-.
s��I&[�1���_��/�I.�`+Ed�e(r�`�k��T���
�l�\Mf��3+�8^����B���o��4���k��l|���$�aN����
��2�39��_y\������ �R%�8�����u4C�R��J��(8�>?�����%��������Y���C�A8��X��#��Z��x�����=8�����<U�c���e��&�SSd�[�Shc��k:m^�O�f#�R������.����P�}koh�ls��V�Y��d�[��Y������5b]>e�YT��B}�b�*u)��V������������W��P��H�+B�YX�7<������ie�#�+,L���"��C��8���R���W
��2+������� ��tP$�!�������ZZ�w���9����X�f��<��[>�P��z��'3�!
Z�����Z�����"��~�n��C��f�
��jN}�/�	{��zu���:/���\�����5�O���6?�������u����l`G"��������l��`��8��9��0�>x���
j�M�{	e�N~BMY�.��[�D2:��Vh������cW-�;q��(���:'����@���[f��ism�H�Ed^D��dO��eq��������o��M����g�,�!
I���F�t��%�#��k�]o��v�u&1�\Ny�
%��1(��QE���PKIK@Zx���Z<R�AJ)�QEQE-����QE�R�(R���Z` ����Z��5��)"�x�F�>f��!��B���(��;��T��3���<DX�j���Z$W���P���z�����M%�0n=�����5]Og�=�z��dk���bKi��<�$/ojP�q��m��FP�����>���%����nSb���h���hT����a]_�]2�'�g�nK���N��aI	u��iq�"��j�}�zW-~|�#��q]��P�|��{�E7U�)&C9���j����P�V���S���������n�
.�YA���Tn�r�`������)?AP4)&E��x���sT���m���R�wM���8G�cf��������������m9�/��S�������Pd����a{Tu4�{�DW$�t�������\�����4�U�X+�2mZ�1���sP�T��<OF�}3TkI8���t���A������}�Yk&dRs�z��I�Y�@��������ue�G����^�ks�5��X�h������c����]��3��b�u�Quh�LA'��m'��}+J-S����
���dg��rC�W�o�����^�f������t�UbGlT�c}>� e:�V���V
!����z������?�N�m�c�jA`���z�[��fm-J������L���X��e�&js��su.��T7R���1��e�j���������6�/@j�d��<ap�Z����
��]�A�pv���������^�$c�qtb�����d=�U������Wb-w���M0z~����<sX�{[�0eH9�m_����gt�'����M������a�W��$�G�k%�9�&�Bk�"���r��VJU��n�6�H^����Z�9���Y|�Z��$*C`��y�!.P����$����=#J+�i�D������o���.~��xO��y'�on!I�j�<��3�h���t����M&��J(��Q@Q@Q@
)��)��
p�
p��E(��(�	h�PF(��
Z(��)h��Z`1�@�A�QH/��!MCL�s�z�}X�gx�+���O��+�|l?�u�����c�z�oi4�
Fw�7��#����lr�9Z�{4�g�|��GE
���k��?/J���dwv���P�e���ka����M�0[�U�#%4���m>�����d��M���?/J����>���=*&��S�.&@�c=i����}k]d��Ms�~^Mi9L�hl�y(��~7��@��6��v������ZF�L�#�O�~-��1c�$oq:��O����B��,����H���0V��S^���,h�LHkH2x�;��dmV�~��2;��H����J�l��D���Q���i��!��f'�YqU�Vh�tr�-�M���,9�w�>��[�P��L�����Q�A��|g�� �7p.P�V���i���\�Z��j���85Bh��ma���Wz��xT=�����:N��8IU<V��������|����_YA�s,bB	�q��4�
J�{s��G���r:s]1��������l���R�s���W�})��L�frq�\�pv����Z:=��O>��N�
��V��!� ����l.�I��2q�o&�������}>�82�����Q��S���E;�'�*?1��&�cem�����ME��z�>��V>c���}x����WF��G�d�u�h:"� �.�k��������2Z�e�jU#/u�����tV���	yw����!.�_��Av��K�P``RF����\��(������(�zT����b��������x���C�+��t�j�C^Y~��#��J,��4���������I��J�q]��^2�85�}o/�|�[������Coo��c�U�l���q�F%�>PO���7Q����NZX��Q��~��p7u�?��<6���@�+�e�����=]IWq��0�����+�gk#�C�CQ��KT@�)i

(��
(��
(��R�AJ)��O��<P!����Z(��&���(��Pb�)h�ER�QJ)�����Ak#��)"�z���6�c��9���vZ����.�b��qq(��NI�cR����i�X���zW��b�e�������cg$Z���� T�����q�/Ie8ak#|������+U�V�pkc����U�+(K���5���I�+�������*��}�z����rN=�)�����\���+�|J7�����y�K�U>��4R%��wJO��Jw����}��M��NE���O����	�z�I"����6���K]!����^�m����MN�n&����/O\R�p���g��2����p��H�z�\��f��C��qf�����iA�����;V�t���i�wu��v=j?	�w��Gj��i���h���;���ue�����-`��)4�X�Q��{���U�;S|��
��qP��4���������^����z��L�\���Et�s	��F8T���U��JI��s����%�fL���
����y�k96���]���2�lUdW%�Z�F2�s�]S�zn2������>>�v�����_�\:n�*�����u���Ug�����i��?�$7���:a��:�&����X�{�SF�o��K�$?f��/��t+�dzf���:�X�03�a���������ieiKq��f���
�$���v�l��q�1T%��z�����kT�0E��|V��W 8���b�����As�?�x;Z�����5��0����k9~�b'��)S�a���� M������P40$�+6RV.����6�-����"���v���V?��2���5�W�l���x��p8��6$gRm�EA}l~�.*V���c�:��?�o���I�8�`��^��DFW9#��|�_@��"�T�����e��y��]�:T�����
N���49X�UG��~����o-`!�
q�J��bl��j;J�y���f���[�~vrk�<?���p��E���K��,r��@�}�j��
JZJQEQEQK�4�(����M�HC��Q@�)(��Q@QL�(��SE 
(4Pdql��GK&���a��>��rc�&p*���dx��iu35k������9�wJ�{���4h�mj6�u��2��q��C��"w�d�d��4����	�\�gY[{���������#���W-��v�?J�i��<%�\)�l��1�+���}h��7�c�^�-�xH>���sna��$S����c����Z����Q�;����!����e�T���%A*��9�nn)����`
=@�eks�~X!^��B�c���&��`��U�����1�+��H2p�T.���=+����gd,#D�e�k���m��br�9�hp����^F}kn�q����+�>��$5�%������On+�)��Z.4i5����s����k���k���i3X��z��v���`y��c��Ve��~u�4�:X�W�R2���~�\0g�
j�q�?�H�������T~UB����}k�dI��[�8�#R�A��j�-N����q����d������
����\WV��3��P�O��E�����5a�M�I4���J�lI����(�"�*-�c��V�z~�c�AI��\E��5���6����O�d�w"���j����H�������P)������2�f��k���E�T��Z�u	c���/=��+����$g�g%���r����N,�;������4�(�K����#'�j��j����w:|)b#��r������*&�:�h�>��T��H�v1��B�^�D����F	q���Q��?��#�0�h�QJ�v�+������i����4�QEQE�(4�LC�<T`��<R�E;4�(���EPEPE(����)�(��:�1y�h��/�c����V
:+f_��$3[.4�*!���\~�K��\6�x���o��a�8�s�mx1���{�@����{W5z�c].�&����?��5h���v��U��We��7�E�1��K+��M�{S.$�G�T��cQ5�U�����!n�������;���qS\�g8�+���s�i���8��GG� d�?�jB�����}G�%*����k�o;����E]�'����;���Fo$�c>��5�f�9�i���.����	K���������5�[�Z`�Q�a��UF������ 
�}
e�5��V����$�C��^k8]pG8��X�����q�������G����!�}k��N��h�@���1P�(B]OS����Z���H��=��������~jv"���4�kB�7���g|G9���/��L���&�v)r=j�S�-kr����2�QObz��-J���D�Z�)>Z:���S��A^��R*X��gsUE���K�Y��T�j�sT� �*."���i>R*\��>�RC��#�bBO<�1���"��Z����9�3[�m:��������������%�4��������yWOl�z3�}�6�i4z*C����Y~!�p�`�QgraU\�}kN���.U����i�x|��1�M{�?���L�k��!k-������k�b}��;����8����}(47��<����M�����1E/�Si��RR�E�b)��)��)i���E�@Y��(��(h��QL�(�F���K3��5�"����G���>��3��H}]Y�#Q���u)�c��5{Yv}b�!NH.�K��p�W���4�^��[�z�VL���j�4����gH�sWDd\7�T���[� 1�+.G�ZV�b��VgjYX�|�c�
"E3�������b�C�5�<����M��nrk-��i��b��9�W��)^)	��[��H_j����X�5�e-#$���j:�1Q��P��7}h��X9�elm��b�q����q��m�h����?��nw(����4d���j6�w��W.qT����7��wV����g51�W��jH����}k&�jM	�[�4���WG������WV�(t�	���I�)��E����{d�����@@V��6K9p��sX�����1�nEs��sY��h�IA����.>b������:he�jT����m�VU�Xw4#���XS�����KP���~f��LT�����*�U�6�^�X�<F���^LUF�*����W�L���J[9�6���	����3o�1f]��G�a\N�n-5��tj�9�f�<�r��fk�����@ ���o���"�t�b��+��S|���.N��>i-J��*�:w���BlzVg�a��rrG�i�6j�
����k��L���RS�4��5'����E%/�SiM%1(��QE�(�M��$��J)�u��@[��(��Z�Q�`�b�(��ayl��+Q���TuU\g��Zw	f[����6���M;r��
���Kj�����B���jk���K�Ks���	��M��&+^���E=[5�~6����Q�������������+�����"��u�R�R��5S��Z.j��/���d���<���E7S���M��.�i,�na���V0��	a���������
���{��qA���u�s*R$����-����[Q���y��{7����*��
H�
��mOo��k�8��B�/�r�NKS�T�(%��B�}�*�@����b���=�2p)t�FsP���}+il>Q����^��nj��V��	������5������Uy.0��z�:�mZ5_��{��5�y���\o��sJnY0GZ.G%��Y.z�V&���h�{~|U-3We_��WC��C��=)��`��2���[�z�F����v&��"��U�*���I?7zW4vj��F=*�oU�EX�j����o&��e*X�o��
M�U�o���>jBf�?��QH6�������!u"���� �}�j�<������q<�Hj�1u+����Dq#t5�m<��s����y�Q�0+Qt$xF R���i#"��z��xR���F��5�"�)]�����u�W��i�&��}��R�:�y��F��s/^�o�)�d?��k�c��M%"��
Y"JSI@��%-%����
QIE-�R�QM��N�N�-QHb������
J`�)(h�%�Z(�WP]���L�;���*���6^��a�;$���&3B�6��������g�����8�e�R\�H���UG�������k]Lm#���'/vwdV����f8�[���h��?z��~_�[1���w*��h����zg�G}�I��)���T`j�Y�@�(�Ry��0{��@6�<��U-����.��\����s���]��/N�)�i-T�u�yP��,��P1n���-"���������Y�_��j#;�l~4�Z���A�*��l�U��z���-�(�f��2�n��$7�5H�7����"����H�Bke��~��wfw?J�k�����yu
�^&'�})$������o��+�_QA<��bSC[~�Q@'�cK���Ih�3�4�nc���/��~x�U
e�m^#'�V���aA�u?|���M����xd����Yv@����m�e"w�V�	���d����'z���.B*�c�V����-!2�g��)���d��|*��	�^�f�b�YY������.;�� 88��*���l5Z�C\��h6^n���Y��fc��<|�d��<�������qV<X�6:�5Q����;=T�s[���V�.#A�+#W�>����t���	��������S�1?�O5Bi
)��hRw�SM%����QEQE����C)��N�:�J)pQ@��Q�J)�QE�(��(��(��Xp��ZC�������J�'��?J�aL������
�H�5d�Gd1��������w�]������w�'���h�_�=T�%*M^�q#�YG�j�la]������o��k��?yUgQ�b�E^��Q[[�:���?1>���5C�L��^�"p:��-�}�Q����]R!����.g%�*��q8U�i&=����nZ�5�i�'�*
?C��s������V��r����UU���g=������@
wQh��~tR�����V�tU��I�)%�� �����V�����������(��7�u)L�O���<�l�O��z���t'!����}��W39�������l�O�����]j���j@��&��9��=��l���%������W�����*��$O���Y���8cz���T]�\Wg.�n?�V��*�4��g�����M9e>fh����1LQUr"�gA�����<f�{�����WE���b�4��!M.�O�&�����Y�c`=��������U�fZ��v�Sn���jd������UhV�
�Y%!ji5=�!�n+���"[�7s�y�������T�<.�jomf+&3�h��[��n�V�j�Ia�BMs6���!w������]�n��pS��
�=��.���aNFk�� o�I�a�5�q�*���9��?	��x�a�$yQ�����5���	�nB���O����#�����������
t#�[������L�8�R�nh�CFi)�(��QE1Q@J)����J)���1QE -��JQ@Q@P(��I@E%-#���1��}�IN#?Jd#��$_���n��I�I���$�%_q�����#[$A���e]Ru	d���N���85��:��2����5=K�8�������-Z������L9x���\M��"o���W��U�����S�U9��Z����u85��$�z��J�an������=��H�ff���k�����C�� s��,�%�e8�5��<^T {RH&�^��jQf���*P�z�^�R	����+�|��-p���T�.���r�LC���Y��c'5�>���y�RgHnc��[�f�5�Eu,���f��o 9��N��u���\��-s���A�6��Ig1����1�U���Z����U�3Y��g9�EB�U"dr���O�����1\}+�.�v�\��(f��Q0�r��������f�|���`h��U����L�m�G�i���}�rB�*��R���!m��{��B���em���R���f��GSgoZ�K$&�-�S^J��
M!X������m(��<���MM�T���Z�;�t�_�������*�aU7���M�h��b�O��#�/�|�f8���A|Q5��-��=��Q�+��mn-����VG���D�D��\�&TD�t�ex5�	��@���1t�n;����V6W=>`3�M-D���m�c�����|����TV6K7��$ ���+�}���1@,��IDO�zPEQ,QA��(���@��P�IE1ER���(i�j1O�(P"�(����J(h�%-�����RQ@
���iQq����J>����=�&7i�������sb�jT7q�z��/��>��C�{���[��������p*JG
�/�C�C��-�q]�Rq���:�j���#������Y�Ua�S�}���1����+�nk��%��f��Z"��\�Xm���SEE�����P;�Ij����>a�tKH�w��z��
����)NW4�h����+"�V_����n��:oo�Hf]��(�b8>q��[Z�{dQ�+!����t.:������k���J���
=��h�l�����i"S���*���{��F���W!`�����W6-U�����g���y5�W,�UiI��jF�v���GTL������smze�s��5��B%����V1��y�8#��+�1�z�WJ�����hqU��]�#dc�N�
�����T�N����S������jUjb}�����4[��m��W�b6��*�����R.������'+U-�aRZ���	�d&U�KY��q2r=���'��6�b�`�����z-�7Gq[6��Ap'�N2���t1��w����I�;�N��8���&x�*$�W�Mcp=�s�gI�A������`�+��K�`$�#���U����y��X_��1N�<T�m&�����1\�#��0a����(a��T ��?g��3Vl�b�?�h��6G�ii���4�)�)��B(�Q�)�%-����SE���
)
���6�P��AE1h��@QEQEQE����B��K���f�j@6��t

+\.����G��i\��9<}+j���l3����������kc��;fv'�r��k���#����]�S��h�c�NL�7Fs�K7���?v}��`jD��1s	rq]����'<�������E}>
�s[�+?Z���H���{
�����1�dL��3b�i�S����+�z�6�l�2=(T�+�oz� �����l�9��3������� 5A���v;U��?|*��\�sL�;#
,]/��y��]�f��Z�u�Y����&;�_)y<c�Ko)�L)���hCa}i�
��z����ZX�A��X���YW���d2M�@�
��y���;R�(�1�n�TwN�O��������:T�j�s@�)O��w�Mf�l�\�3[�|;�*������i5-u�(�5)����c����V��<WE����iji��)���XQY������I��@�K!E����R�NqYs��R�������Q�^��aY��sp+C����lK"�&�q;W<��6�(�u��
d�3�0�5��[��(���tKWG�h��$�l[|j�-I�>��eB9a����*�+"�`�J�����BG��v�Z&�wOF��}�����gj��������#�{�n��"�����+_Zx�6�E*��������6���;u=QZu��o^)�`Y��0�N;�����������N�=j_���=ij�M��4�(��(���E%�QEQE�M�b&RE^��)QEQEQEQIH���SN�Q���wS%�F��y5O2l���
��}���o���`*�_�Uc�\1=
-�3�x����S\��1��S�^���:W����0}��5���B����Fr��������,};�54�l��[��6K�s��"b�|��:�J�y����X����L�T|����h��:�Sp����W��,x
����Qr�W�qY��T�-�f��F���>�{�������$g�<���L��y�����C�1�.�5mD��Z���4��JZ��2|�T�(��W@��@X�������,����n���{UY��s�U]���gmK�F������*���������QY��*��4������6�Hn#�;S���VE���'�_�	^�)]MC,Q�v���f 3Y3)��>��Lj�(�U�{&z�����r����{V�����5��|�>����V��f������6�Mi�����/Z��r�����V��fk8,�2)S���=�g31������-p+7�+b��
8����\���T��Z�J�i�J��A���I�=�uW-�"�����O&n�{Y�/���g��iX��\3���Z�A�R�t��.[���z��{x�T��T�������j��7�x���v�[{�i�*���^z���&@Q��v�]�)�����F*���s����o�U���'����Z�H6�Es��)|:A+�BN1Zi����qZ�c%sv+����R���+�f�v�+A
m�ir[�Fj�)�M�-1f�j�v)�(���Pi0i������^��U�������>���Ua��7I���R���J��<��(*z0?�(Z-���P�f������(�4f�
J(���-&h��I�(4���b���QH������<U�\����-��'2v)+���M>���$�$�E����8������z�y���
z��b.G%�$�8�%X��4���>c�g�R�%�8��Z�2���!`:��sJ��������2�;�
���X��JL�3J�����J��
o����-��f<�R:���N�qD���U����n��C�n'�5J�O�F�gPO�P�cGE%��)����+�����}���L�*�����c<g������i0f����W�jLt�b�]�J��jY�w~�B���^��"��������Cn��C����)�����*�����\������lTY\:�%xc��m�v	��]��VZ�`��2������^�X�:���< �U;�)����P4�\�w������\��t���lC.��5$�5R]��OYOy��I���-�&�m�SN_"��3M5�ec��j�Z�>g�]SJ#c�m�	�i�yx�����0�L���7��g�4��S����q���lq��&a�y�=
X��Rl�6�<dV��+�nzU�f�f����8�F-�E�X���pE_��m�L��J�����w��QAb�z�b\�p2)�R�@�����X(>nkRT��8�j��e�h����=�^O�O�1w*��7Ns��"��h��n}�"p�VA0D����H�6�:��=�={��+T�U
SS��a�o�X�8��Ww�WLVh-�x���2\[B���4>�T��t�|�=X��5��������B�r0�Sl���b%���5V��3�#<U+�K2�����:4�R|�����$��P}i�zj�����}
Rh�i����S��.u�Hc��G����<�%��#X�n�kz�$���+�Mp���m�0�=�R�PG�����J�=bYb\�����z�E���>����p�������{o
�[)�:�(z����I�������SO������<du,h�)��QH���(��JZ(��P(���
�Px��'/����^�.$�s��-�������v���������i�|������*��P:Vm]��"�"P��o=�
�{\��W���S��c�N>���[��Jy�i�#�u�S��2��d���W���u�����H�8'���]gL��w2����B��NkQyyT9$���xWr&d��l\��
pA�PO
N�U{������I��e�(�q�Un��mQ��$��h8Q��D�U�77,Ct�S����.����iI0���aH[���P�%x�a��P3a����e��J�E�\�(��O�+j)���a[����(���1RH�+�����`�)���ck����������@X.qH\����L�p�
���9�����:����L�Q�o\Zdr���T��i2�����<�A$�����nr�x���iN���5����j���>������������������l����V��w�S�iX��L Z�T��(r�V�	��#
d�/��l����S����c���!��'�Q��-��LK�k��%�C��g]��,��+$+#L�-�Hf��a��[�5;r���h�A5�9�W��d�M�v���L���P;����I�4��Ni���m��Vp����B�ure�"���Z�,�C��c�^]�|K�f�'�O<z
�=��Z�;��6:U2$�7J�������w�L��*���/�5����F����Q�^����f�K�N9���|_�G���FgYn��WT��W�k���$q�������	�����n�k����95I	#hk:w���z������<
����u;�<�1���A�xR��Cp?(&���-t�|��n��5�C~D�J�Z�|%����
���So���D��{T��u[���j>�y��Um�S�CyQ����znZv$���W���}�LCqx�<��n��k����&�����hZF����:��������'���V�A���Z�q�uX�%�0�Li�������*�{�z�Q�4���@��{L��M;��	�to
[��>�%�����6e8��d���� r;E���U>������RIu��8}=�;����g��l���jq��+��$��\�4.�q��l��Uh�Y�L��Ke$u�EM���))sPHQE�Q@���M�)�����Z��F�FS�����Z��5!�i���� ����N@GZ�w�C�g�������1�hxsI�������bOaZw�"��zP��v�����F��N�(��+�d?1m�hf�V��Im���5��{9N�l������Iwn���
e����%��K/��S����z������8�V��������j��~��vhW<�Y��[�e�B���\������k�/$��5��%��\������o�d���E#�/��b"\{z�X-��n�kw����pU������yReW�Lu�c"�RKR����dQ]����.�8<\�b���M6�����5(����T\�B]��*`�!��W��LcS��N�VOz����+�b���6S��O��4J�>�U\M2�iqK�R���Dr�^�:���U`jE5;������M)��(���y��KEX���j�Q��Z�����bG���������P"�*u�Q`Z��R(�-J�H�H�Vj8���(��Q|�5i���Q2P-��
���f���nMh\�k���-'��"�+�;�Z|���q���eI��=+&	��*��zSg�	��=Fz����w��{mq����=�V�QJ�&\�j�]U����>���k��m��aUj+�sCY�n%��kE#�p}���M��M]�������
���s���b+gD�5���������7b���e�$.�Lg����t�BVk���yNH�8�uw�������C����|G��m~������Z(�^��x�0|�����|?&������1'\��f����o$$p@�?U����-��/S�����sWV�&b��p��f�PtQst�k�8X�o���H��T��M!�sVt�����@=�����U�A6�-t�4���m��������]b(��-����sw"��eB�1�O��~<�"�|�1�:R �?��>TC�'�O�m��DJe4�=)�a�Kb�<j��iZWJAs�����g����#�_��o�hz�j����-��)��k��0�#�(���?��Pu���-ZV����x����5k��H�a��j�>�Nn/y���$��� C�RC�xw�z/��Vb�����o�T��4<o��4������n��EH|;�\6~��4T��(��$(���E�����N��1����n;T��e�H2�8���W=3����U.��hK��FU5-�b�����imod��f�cJ����iz<bri�9�\���k� :��L!����Y��{���|���[+�5h#�A����WS��I����,�4�p��m�	o?�������[;{DPD�����]#��������Wo��I����$LH���j���z|��dO�rT��:��0�<���Z��U�q�Yw����A�q���A��Xoc�8��z�,j�4��{�n����	9cQ��������H���
\�h��k��,d��O#5���O�F�\V6����#3[��E#��)v�"�b\���D�	�]����k���%�������I��d�����zt�V�����W0�q��E&Rh~Z�H��U�B�ZQ��UQh�@����(=*r���,�����G��:�)�?�)�)����{
[a������ZE$���i��f��I��M����l=�j��~��_���
LW%�~l���v�1��#m^+6����U5Rz�~����C�5f:�5�	Ad�jL���x%
�G#��NW��D���f5�K��y#���g}�����V[���|�;*�(���[�>�T�0+5�Yn�������f���j����(0������3z�Q�,�	YU���
�����������C�u�{�K[�,&�Hq���0go��6�F�:*�>��pRd�Us�
���o���nV#�+oM���kp�R��������)o��^�5���1�c����UW6Q|���z:��W�[��h�j)5�*m�>d����ZD����m.���l.v��IuY[���*?v�w��f����j����D����:���|����V�i��Z�p��'7�
qq�|��:�t
[U�O����=���-2�J����
��*�����p���*�O�L�
�8��I6JK p<��V��ZV�fq(8�I���������R����Q�n�Q�����D=|��� Iy��U���@z�I�[��0�Q����I=���v�Tb6�H�cpWn��7�A1DzHf����hF����������2�-7N*;��^���%���Oz��n���
�HF�~*�l/������������L	���[�Z��?J�|a����Z���]g�����	|���/�=I��x����2��PK�+R��6�`t��e+��x_��q�cEX��o�
������QQ�Z�KQE��RR�J(��(��Ps��TSd;?|��Ha�������,���&��t�uv�������.���8�A�/�Q�K�Y=����}�bGs��A`������W������O�Z�~�4P�B"wV���z��[%SUk���E<���TR�4�*;VV����`f��}��p:W:e77+��j$\G��|�0�������#L���(-ZS����]�X�z��9��X�2���$�:��Ue�F�MgO��3"(V���G��<��A����Y�Z�^���(B�pzSJx�{�R$ �v�m�|SE�UY�+zV��m����C~��NP9��jf��T'�45@i�����h?�K��C�������A�OJ���m���Q��������zX����cS?��M?�����XE/�W �u?��"����m��@���i���),"�QQ%J���(����1��V�s�Wc��[,EBO�T����
�/��	�a��cyiafU�9�j��}��@|l9#5�k����!'j�kH+������}���M:��P�Wp�q����*���L<��r����M#�I��*@��P�zW�e�l��u�L^�����=����Mn!�I����3m0i��s#�*z��CY���*���k����&���kf���6m�<#q�Z�9hy/�!��R����~��P�]���k�K-1�h�A��s�+�`H���� �84�� �|M�I��x�6�(��[���������!�����ZKj:� �S�j�u+���&����m���������M�&����zt'v8�[����-t�������4���d� �|�QZI����>a��#�����U��y����pi��U�p��9�8��������<�D<��I����D1�{����*@�[}+G�
��"�'�S���b���Tt�R��]��6����+=����w&��/�j��T�pj���������rkR��v:_����\������~�4�k�~'p���W���U����>��u�wQo����O��
�;���+
����o����z���T\f?��Y<����R!>�,?
/�`]�_m��V�^n�,����TW)'�[��	�sE-C��(��$(��(�4������95���S��@
��R3���Y�Wm2���xc�Oj�HQ:��z�U��kk���#�����j�u�����w���V�Q,0�H0*;{X-Wl��S�5�R��`!;i2
)�E!�@�;���� Hz���o_Z�
����95B��
O��5-��\")�5`U�N*YEY�Y� �g\��Y�?��V�G�c)<����n�����M�G1p�X�v���lV��^Z�?{��n$5h��V]�i��v�as��|��-��5���Cn���V��P�0g�m���@�kv�*����Zg+sn��v�W��+������/��V5S��
[���,f����kQ������O�3�����?�?�zB�C�y=*�@wR}�e���>�<H�}��������KP��(��LU�;�P���E�F������S�&i��b�+���E1�u*��5���g�j�c�jVm�NYI�[F&5"�Fw�=k"K�\|��pI����$�l(v�������kX��r��-��[h����im�����H���qm�]I�N��������\��kt��s��t(�8�V?Bf��~��k���Fp*���o-�����N*K�R�R��6����<W��uVZ����� ��w������|�,0�(��nn>�"���*����H��PR7U��P$���A�^��h��5�{i5��"F/,��zT���j`�����t]:�]J�1�A5�V�E�������l~�8�*9�?��c�^7M/��G?�s��n<I���NIH�T��zW�I$6�29��V[�A����]������u�[i��p��y�j�����{����k;O�n�Au�])Ko��J��������`]b=d?:��t
����&�'�s�G�k�W��L��qGz������v��y�����:�_��V�m��^QXv�:��&����+��<j��+�*k���4��1E���^��w������������+�i�g�G\���f�b�&b��5u��Vy���y��lN:��b(�@��V�C�6;
��hu�,�Fv�E$^�n�-��d�(�$w���]�H�ZO�2����V%���h7�|��jA��W������C�sx�S��P2v��G����U.�z�SdG�R�IX��\PB�P���_��R�[���R�����E����(���� ��j��mB[��1%�v���a?{��1��v�T�v������4A<��@2��i�
�sU��b�4��F,��zC!��+:��id��O$go���^�wu��������h,��Feo�jV������k$M������%w�.����,�����*�k�4F�g��h~j�}P�.�j��@SZ3�Y��cFT��Mf��Z���"|��fK�L�W�9���5M�+������Rp�T���1�������)�X�E80�@�
9E4��7�@�4(����Xc�*e�B��QR1�L�K�ir)Y�z���?:t��#���XW��U�3]gU�R�
���w����N���f��Lg4c��16�FrH�*����i���k�9�a�D�tF����
u�-L;q���H��E�hP���O�����?��d�.��k���.�a�)E���x������st�R�&��p;f����t�$_��5�\k��LN��x�����E��"k�F��=)���5���X�!�z�����[���F8�c��.�Wem�F����N+����$�9��x�`�$�{�_��r=���.7�o���p
�I��}5�o�I�������f(���*�#���b�t8�!�p�=����o�?
�p�3^���
������:���o������4yu���r�}*�I
8m���L��@�
;Nh��T�G�a�1w~�q9�5�o��u�������{W]�?����������k�0����O�N1�rZv��x�Ty�K�|��K^�l�~.�Q�e������[+�O��#����O���������������pM��1a�����}��]
����/�sXz������}�s�����h�s�)����:�</���J��zm�����k�Z�Y�!�<�?���w��Y��8����tW��"\DY�`
f/����Ek+���M����@�
_��p#�EA�G�=�kI?*+z/�����	���.�w��+�p
	�Hc4�H.)����4PR�(��(��4����-CN�Lp[�V�%i�����2�l�����v����>�,h����af���k6M3P���1��F{WH������pp�V�|j��/_�qW@�c�,��y�r@�uF�I�7s,h�9&�B���A2C���:�+�@�y��*������H[��-���z��kT��R���M"�5I��Q�T��#A��F�5m�V���-S�������6:`Wf=����._kU&���R�*&zB��jlP�}:q	�Td������J��;�m.)�����G�Q�x�Z8��r|���#-S�6Ru�4���'u
����JM0�����Z�9jH^��6YWi������JH&�$�A�����$yV�W8�+����e��i�OA]&�"���W�=j
N�/	�+�L�J���RW1F�w���Km�5C�R����U����=B��E�
f��`�lEXw��9ldi��KW\)(}E-���������epm�q�P���$`�E���j���W�	��E�"��F��o������f�4`�8���A���|%u�nG
������hK����S��<M��XBM�Aq�)�Z������*�y9����Y�����"p��#�TnK2��zH�L�t�������h��bi:�\���w���O�+��w���
1����$0���=:���eoJ�U�������,H�
d��=����������:%�����Q
n��:
��'��Km6���b7��%�����.��-��]o\���?�4��I��;�u^����j�\�3c$�'��
x���GUb��'����+-.AB���Z��|s
��Zy���5�Ak��������/]�]��}�,���9��e���<1H���Wc�x(:���$u�����h���=�}�\V���q�w9\���t�����e�����&��K�E�o��KI�8�Z�'�]����;G��4Y��R[^bU�5B��66�'_|�-u'm�yy&OM����j�~�,�OV��X�'���}���L�����aN�� VCxf�m�-%_L
����TMS��R@����������jR��E]
��(Q�(�R���)�����3ER��)��QE%!��Q@���7�������z�����]���c�nn}8��"��;�E1w�!���~���{���L��mV�-�����#��QR�)�ps�1���%H��=k��97��;	'$/$���"l�?����U!�cUfj(�Q��'���c3��U|��)���M��E�;��@�QR1>���(���A9Z(�R�W��@�~e��~^��PP��SW�(�D�[��E5�-#�n�EV�0��^^���&]R}k>{�f��b���+s��m�W��rk_�=Gha�����:������yu�m�aen�W,� ��+H�"o	��)gf�P��]N�:[I���E}D�5�������8Q]����O�i���QZ�XL����e�t��qZ���$i�����+6"���{����eF=+X������.���(��gC�����|��5�'���5��j�Eo)�,���QE.�"����n���$H�]���W��B:b\q���)08�g�7wj�hv <��9=����[� �I�E�#���!�C(M�N�����F�;E��=6���m_j��Znr�H�J(�1�~.XA��&�������}+����8����)?�}m�������(��V��
endstream
endobj
30
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
374
/Height
565
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
34
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((��5v"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�Q�="����u�)���b7?���y��o�x�XT�s07�����������d+
����������JG����v�:a�z�P����������9�(�G;cVs��5r=2�Ll��'�b�T��_}f7?2����]
��Z"����jJ�s� Q� ���X(�N/F?�'��]0���h��v���o��Z]�#�����N��3�B{6~��������Bk�K[T@(��Tf�H�����K���������g���Gm*(22'�95�!����E��O�i������.M�����@.N}1L!�>v��x"�n��S�B�O�4[jD|�B��`�$��i�r��H?�=�	i�E�PmG��J>���g5O��)�&�:���"�V:;{h�I������Y�}��tPx��u{�@�F�Q�fo�#�hPasy��Dx#@��s^\�b��4_��;�V[�JG�9��B�����>F:�."V��'|59��S�7p��<���������t�����q�bj����>��a��i����W���5<������l��CnS���?�E�8����,�����E���
W�fn����U��rswq���g�j&�����i�*�,������2��~��A�!<�d;����P��i�S��l�4�QI#�JZF����~u�&���q.�l�f����wA\��3�#<]y�g�Bj���
1G�������%�� �������� 9�M}����j��5�C�Y��C�������F���v��{P���K�9`��T��E*������b�����S��3�S����<8S��O[Yee;1��������i.V1�gnzV�Z�{���~���[$�o24P����T�9��3E�A�Y9���,Mj��Z����=r�MP��A�\�E���� �,��x���]���S�F�'��&��~�����s���#����C�3&x_��-�G�c��q�|�{}�&o^~�J����h���J���a�[~f��J+EI	�Yu�s���Uv�f$��A��J��P��R�@����#��(:s��8
S�ME!��j�������4N�<�F���������U��S�rj#@��n*C�0�Hih�����LRZF�����eQRx���V4�3IA��
)3J9���J�6;�%����c��d���q����>#[�����N�����Z��fY[����%����������Z~����
���m;�iC����QoRK�P6F�x�$"���D�������k��as�T���D��?�z����)�$��O�m�&R|[lm�}�m�)��[#4Rg�f�c:?���B�����|P"ES�����Kb�"&�*� ������wrM@I��rri��&f���#��N )�U����N)3E; M'�By���`NM5�$��4�.ii(��)�S�H����M�hI�M!���%����L#�{Td�Ci�O4�@��4f��ZC��
C��&��JSIHji�&�C��J�
QHzQ��P����{iFRU���x�	<|�m��%�tm�uz-.O��M 88~�d�_�0R���J�k�H��u��N����s��;D��]7��;�Z�6���P��.
]$b�'�L`�4SI��^��)5
��nI(J�k����,��8���Wb4�*��-�i��-�������a�c2L�V���J��4����f���-�o�������8���3�z�MTE��wqHNi�T�I�m�(����m�.i���HhZi�FM&(������L&��P1���T'�
$�Ph�i)i(�������)����a4��c�I�Bh4�QI�R
 QE4�IKT��4�(I�q�7J�u4SM���e2�V�rwD9�58�k�I#B��X�#�e?��������\�$����3�Z���N�<,�o%.p���@������-�2�#���ElQK�!���I-���e	���:���=H�LFED��#wR�LQ�QE�<e�)�g4�m&iGJkS;���4Z3IHjX�&�<RS[�C��M��:�z�1�IJ����	A45�������cM���L�E'�(�R
��M y��%����(�4��EPR�2����2���M�J*X&�g�D���i'5d���!�[�EPM~���^���Z��@R�I@	EPFh9����R�&
�&���V��%5�����`0�OZyZLR�i�R0��0��j}4���L&�@i����S�Jm�
QHHH�D�0'������������U����
�U}f����J-��E��5�5�&��~Hr}���?v8���d<D7������x����*��~��qB���)t:�`s�F���zTV���~����s�5J�r^,�Vx��e��@���3���f�{��*���qn�>��jnqI�M%W��K�A\�*�A���I�iOZJ�0��E :�)���Hx�����BsI@
MG'jvi�HR(��(��qFi(sIGj(QI��FE�����<����Q�5Z]B�?�*��4�K�WR������-�v�c���k��!��4{6�!���m�H>����n�!B/�Ud�.��������!����	�A,�����\�K+gt�~����O�?be����T������iu�a�VG�q\�=3M ����?[f������~5VMn���#_���3��fg��[�R�~���5���4�HH�9Q>�c������zpy���&�[��1HA�PN(�f=iq�K�J=���4������ZLS����L4���nZ�uu8�����@W��,�O�Je�\�S��gv����QX��5���\��S��[��h��P0�n���V���p[�P����(�K��
���[V\����rj�� 5^�Fr����#M4�x�����8���Uw�����MR}Le�]��"_�"����R�N����i��Ni	�R���������T���
�&���\`}k'<u4���h���4$�n���~���u<�-+���&��4�3uf�,����s�a$�R�N��ijCE����b����CH4��4PSMjsu��iXb���&�jE	�L�E�4�)1�O#
zq���>�g��1+zn�rH�-Qgb������o2H@��j~�����	�n7m(����p
����E5�7�/�v�"����H�4d��(�N��2��J�}S�tv7���%�����Q�B�)C[���4H��ec����v�����`NQX^����$���y�����hs��Td����Z!�m�q�IP���.+K@b/�*d�7��3������Ti����:�IN=)�����
I�9&�Y���\�3��UE\��P��:���9��>���H.FO5;T��Z�Q�<�T���a8���7Zf(�E���!nzSH�zq���
ni��Q`i
.)())qJ���i�N4�����S�SH��u(��J:�Hcd�I�=�>��*���2is!��M0�L�p}J������2�+��X�J;��l�Z^�����K?�O(G�'x��nMo*����)�*y�Z
A���X���gp�R8T^����������a{����V9ks������5�X���E�1698��U�KS��p��DZ�y��a�E1��,����u�ia4��\��=���� kyRE��Vg�����fRq������"r��8�D���\�4��Wmi���F�Y_��5�x\��q���wnH?7��-Y�&��J'9��q��\Y�-�������5#e}_�R���wn7�q^cr�]��#c�cD��+������z�<�2�}Sp�#A���+G<�?�v�����7W������Au���B�
);4�����z�SKP������5'3�tt8^����i����s�R�r�)� ��*�����Gf���F�;�4����^;����)u��6�HG����`x��q�-o��/��"lV�������$��g������O4�A�L5��x�+� �<�"c=�c��H���i���d�E�j���RW�nC�:];�85�i���������OQDj�[:2��-�������#0_����V�I���Q�J�W�r)�d��;��7��c���5�m+��-1���jo�X�V�����Me*�N���)+���r�+��t��il��P|���J���)��.�*K����������5�b�����T���Is{�}��������]�2����'�=0z������l�`�)�o�������6y0%��QJ�q���JvCu}r�N;fvi���3Y�x��bA�H�P���,m��u$�'�����]}�����HL�`	� ��RR��T�e-���.y�`�mU#w
I|����RI��[��IS�J����w4R���JF��<�|�p��h���kc�c��.RY��uS��`���85;����2H��I���r�d��G���kdX��"F�cN.oSj�SJ��/��NX�;f��'���xoI�Qi$�'�N6���Z�=��V2B����M���C2�^HbF**|V�������k1����2n���z�/�Y�#nz��A�&$y�@��S5���Pi�+C3H�m���er+J.�v��Z�G{f)�����j�����<E&A��/��{���WB!��j)<G� ��\�v�sNQ�3�R�U�8�y����d�"�O�5����J�e����p�����%�	�9�{�i�A%��n�p�{����m�i%.�	�Y^G&��}k�l����e����{�Y������Y�����=����O�8��P�w���V6����U{�^v�=��;���zd����-���l����+ih����,�coM����Q��tp'�
G���^���kJ�g����_��zs���CA���k�@�@�8�%e��F�$�#/�
�q%�3(��cKi�k���G$n�YUNy�kb/����������YB���0���5�R�q�S3�;�)��-��}N�J3O��n��=&�6A�-Zd�\�Vg�I�"1����S��������@+'��##��~���?Z]��5P���x��3�=s��q�r�]�y-���&�m����������0K5�o0b��g�������?��+�����zm��K�e�.��p;Fz��R�?t���{#��#�(�3SxV�BI�T7�YZ��6�2�_��I�5��KJ{S-��,���J)��l9������kKL��1�\�6z��L������W������BA2�?M��:|i�
�����W�$K����u����d�W��N�>��:&����N0�����9��We��n�!��.�/c��8I�\�R1�>s��!��7�|����#Q���4x���7y������cC�������������|5%���G<rF��#
�
8��Q�Q�RZ���
�k%��'9�W7���eh�FB�A�
��E��j�$�*���+�����B�h,�������ZK���t��K\���MwrH3����K��"�B��pz&��e���
��q�w&������J"���NN��$��u����#�wKm�Z����t�L����=s^q���:u�����'r����L��V�E��K�#o��>���'��*B5���z�#�7m�3�+��y���Z�&0?.+���/����v���v���m�����h���p�YEX���<�R�1��x�5�ZL�v�k 9&1����|9���/q �����,����C�����9]�+VS�H�U�]F�Kgd�V�5�Mk�]�H��FEzP��r���5-Q4��j���[Y�O-$�����s�WE�k�+iM��m�nMm�@�Rc������'YIZ(���!�\���cp�yk-|%&~{���\zTl08��&8�'dcX�6���wM ��x�j��Ji)���e*�n��`��r;�����7�����jI�|���A���'P����:n���B=zs�I�q��pOc��GFpZ}���������$�=+�-������U�63�Q�]�d�RU1���E������'f�o���g	|��WNF3XT��0��l!���+3��Z�O�i�[�	U�%���J�Q\��y�5Q����h�Jr�N)V�#���u9O�1f��A�9�`�_N���&K��Em8���y�o�H
s�����6�C�p�7���N��h���G�� �����EhpNE.1�C]<�+#��Rz�q��=�5i%`L3����R+CF�DpY���2+��j�.�����<bD=s��_����E�V�]7tvF�'O��x�XmZh�hR</rk�����6�q4���*���ab���GG������vgZ��ybr>+���P�]<���<���\V,����s��C����FcMa��*<�I�nUd��z�	�v;tZ�uWR�)�����U�*
�s����	�)�K+>��7�+qZ:n�k�#��{�����Z���(Gt���fF��[��K�H�AQ�Y�~,��I�d��`V���A��I,�#��6���d~�BY�����?J�q��6�����9	>���,c��x��EzF�h�60�!�E�>���i�:}�������MO$�F��TA�����������^�)*	�H-M��G���x�U�q��23���_�c�\�b�I�n�>�����
KP��"eY�9�=F�ZY�9�������%$���%%8��=+����~�k�Ih!��G8���(��������ug�Q���s����3��'��?�jrs���9�M��o2I����
�����joe�	2�����.���������8��H~��s��D��7��!S�o���gd���q�G��]r����#����2� ���D��F�$�7G�����d�5�20���5�Z���p?���j��64���??��UW�����V}=eXR62����93e�E������<�	8���oxF����;;��e�O�`������'h��G[>����H���5lm,0*�;2*��7�E+RWA������1(��(Ik'�q�0�������ps��u���[D��X�Z��It$�EVGy����+u���������zSi��-�6A�g_C@��e�����Jk�;4�v�2��+Q�/*V?/	5.���i(�4����M�IU��lmZ�r�5��d���M����V���i������tcyoj|�,���u�k�$u9�W|A�^g����Lb�R�_Y�F���
�x���*]t�#�m����84�uDf��e�z
�����?n��3?=���G�>�Z���'?3���A�Nu�g
\��f�x�f�Xc�"�$|`V��!�#'�(;z*�^{g��m��x�!7g�+fk�����[���0�?�J�U����Z3���?�������-#R]R���b�?�����vj�{m��b'��B���@�������mQ���Z�M�gZ�`�9?Os�����:X����i+of��D�`0@rNk��f���������i�k��D y������M���i�hKg���E��e��i�Z}�no�������]F;4����Io2�0�9?Jl������O�'�t�x�|T6m����<Eo,H��F��]�.LZz���+e��Xzm��oK(���95�Il���	����7�b���S�R9;mP�i�kf����e�����r�Ep��������v�t���XR�#�B_�=@�
V�o/P�hd�.�*{v�N�k��k�������(\~U]���R�6y;�T���b��Y��'�'j
6%����G
�X8�'�w[�o��5����T��5�kq���J�7�1�����m�������I%��{6�)�@�%�D��q�L����K_��2^"3Y�>�����?��e^�c�U���������ny�ZWZ����f����e��[���U���1���.#�S�6��Zz]��o����(���+��I��|;�}��Aai���2����>�Cp����1IJ��jJ�<����Q@�-����5���o��t�����|<��"���q��V�F������������H�+c SX�QM'�4�u���O~j�*�����+Y����lx������D����w8��L\��dSs�E�Y~'������n��K5��ap���"�j����H��&94��v���?!f�jm����J>�S��{��D����%����.�����D]����W���S���U�
-K��G����\E.��d��B{
V����Q�� �3Y�"w�3�F�-&������6�-�]Dc@s�������Y��Ii��qM�J�@�9�s��D�oe���L�������'�`>M���������u��-���d�� &�o�9�Z���.���L�������~�����=�0����Q�~@55���2Z���n6����.�l�S��Y�		���V����b�xX����d�5cI�u1�@�d���6e�
�+��!�F����(�����D%�G�>c��e#)�Qw6|G�i�����)�{�W?rt[u�g���`p+�������Y&X��f�
+K����Pflb��=n[����~mBB�o}�:�M��F��s���>��LY,<Ko���\)m�����f���x�\�I���pEN�5�n�A�MQ~U���Ga����R���8%*��o���L2<��f�J��r��X��\�@T�t��cY$�����I7��@GPMg��������lu�W������	9;����i��=��7P�:��=�y������\������F�w�=ji,u8��w��~x��m'I���n�3���}��nt�pfk�����j�/o�~Qi�9mKdW ��[z����:|���U]����%���G
��}�t�������V��c��o~���?�n������d�*��[B�I�$�E��v�l�X^W���b�c�WH{�P3O�����R��.����r�K���B9�i���?�p+�����T������m�X�����,c��
 ��l��rjA�J��5�9[��
���b�QL�+W@|\:v+��"��/��?s��lmE�GLzQI�4W9���o��Nid94�k��*:q9��#0<L0"��x����.�h�����?	��oC���Te�����
�9Z�p:�2DH�T���Z��%nOB1L��Z�n���l\w<���u���JK������![y���l��"���Vp�������2FjK{���\!Uy����X���"�����KI@��{0=j��]X-���B���<A�*��k?�-����z�H���{�d�g�FC�G%�(�e6��������e����2��W�=;N2Iw}`��w<W9�xn��Y���(w�v�/hr�M����pcv;1�[+�����=�s:������n�<2�,k~���z4r]�#K+e����Y��5o�������e�V��g
��[�)1���zJ��u+�{�c���j<�V�)]��*��m%�U��T�1��5����2"�V#���q,j5TOE�T�wd��m���>������t�Q�g�=�F>�b@?J��89�
��\��neN�"�8A�mB��I�`���r+OV��j������P����1��e��$`P�E
�&�0%�����&V=_95��XE�� -�FMZ'#�?��)I1SB�[������jPU���^��(�l���O#8�������p~\��z���
2E��;����s���B�����M�$PC�nFs��{���$��e��L��#�����"�6O##�F9����]���:e���*v�8�z�m�
$��w��c}sG0�3��E�� (�Bn�hD�j�<�Z�����Y�RY��!FqDzL�Tc0�V0�nN�A�����\�ni�v��$cT)\���	i��a�#�&��#���j��$B��#��tL�l/�g�Twf\�p
t8�0�V����C���~w���T�^�b�Q�R3QE0��)20=4��3�zM\qz���{
����7���=����?{4���}i��A"g�J
�3^M�s��A�V#���TO2�e�g5�F:WM-�+�;�c�P\����*+���,s"��O���
&R�������<�����B�����5��FQ�t����hvy�m}�5|�FF[���qJ����+>X�WRm����k�o�����52��zQ��(��*a�s�j��#�GR���� R�V�7'�$`8��M'�Y��'�[�
����v ��+j�%v�":��|�����j����:�?JB{u8���>�r�0U�B����2=�nd�_�y%kupK.��CG0�����H*�_�C3�����
��Ew�M�y3���O&��%���]�F�����.f
)hi����P�$��t�����]�@�Fq	������cr,����#T7�����Js���I�vW3 �g��P��<����O�P^_�4,��myjH���
�Y�����8��_�����y����z`�*u�U�b���jH��&��J�6�EIk��K���!���`���A![���gy ���Uuy����@�H�3�@s����G����UW�k�����J�ic�Y#o4�E�����5O��2��y����s6
��I)4�A=�Wd�+�����KHc��\g��S�j�Q�3#TU����-#Qd	��L����@i3��&��?���8���i��4i��E�y�������y�,X����[�TSI�C@�����0�}��-�{��I�q�����e�~���Mn� >t�!=�6�@��%&y&���Q�KFtZ��pz��[����O_������E�	����h�	��4�
�������Ou"��%+�q]�~��������c���81�h�(�Ct@��7���V��!�J��#�u��4��K<����z��iw�U�(b���m����F�+��9������d�Z0��v����5�Fr�4���T8�r������"�:�(�#k�Vl���N$3��D]���<���9$���]0��E �e3�Z����Y��O��T�g�z������&�Ni��s1����@)$�$�,�Zu(�;�QB�
q���{��)j��z�m�����5�����)R����C��s]����,B��>���i	��9�4�RGe���<�8��sS�eI�1����;n���@F8�7����d����A��hO��������P��j�$��y<�^�h��)�6�yg#���3)��nz���b�z���D_Y$�L�orx���H�B��������;�%��F���o�I�9��%�����
��\���~5�D�<�����������%�2HM>;+X����?�E�������.��+1�1��c�����������
6@1Q��,���qJ�H���7��T�zL�3J����/�Q���L�v�`���JFq�9��X���i$J�
p�=��l��a��w���c���O�'{K&�!#��N��\[���s�e`pj5i$�����/��8���W+e���Lb�=Fjd�S�����c�p�d����f�#F����m��=i�d��M�i�!��ZB)i���%�-4��2o"V<r���������Fm@�����[�"�R����4i����)�5 =�k����������s�r�#R5-������78���L�f$rj'�R�c���g�������8�@��P�
)�KC2���
��6g��d?���U7L�:���g���������������Xe,�?����R�i2�T}rq�W��/%�@�uKR)����`��E+���[��T
<1��,j=K�j3���L�Y���!O���/�m>�s���"�������X���_��Ukw'������P��{��6�����Y�Lo��3������I!L���vq������4�A�k�X��6c���d��2]Kocm�}����3��5f�KU*#c1�e<�8�+�K�bKY����,}j!���m>�;�Yd��$f�f�Qy��t�`'1��8���{����/��${�%$�#�1&��:X-����%�(�I����
�[P�M�����D�f0w�=1W5	.t�q"�$�29��z.��gK������`7TB�9�H�Q�s�+����.�g�Z#
�n#g9�8�k[M�h/nex�)W#�<sS������}w��F���D��I��]c;��|�^k�p���EM>�����T���22r
=����1a�H|����h����A�O�%��K��(��ddT1^]��|�OGv�v*c`�v�L�'���J���G?*����Q�lR��8�8*�������W���f���k���I$(w9ES�9�4�(���}�3G����R�y���QaX"��hS�P�8���_Ry������(6�CtYI�T����D����Fr
����9n���[<K����Z�;H}#BhQA�&C.�����a2�:``�|zt1��@�"�e^�%��3N7�#����@QHe�#�h�������&gM����.$�1 ��OO�z
�$	���UM���hW�����IKfK����(��r�p�9�EG$� �����Z����A,���4���C��<���d0��?~��7*k^�?��w>�G�p{
�Lj��8*Oc��;�h�(8�EKE)4�[��<�qpS�����RR��'<V�W��8�T��[��'��
�O���)|F���s���A���0���<TS��Y�$]�v5Q��c5�\wM%���3��@8���
��"��i�Q�ioR������JxZ\Re�>�V}���]�kmn����3�pH�<
��4�����aP��N:�*'{h\m}F�kv�m�%W�� �W�]f'�(��34��3��q�sC��Z���g��"��7��
A.�^�;c2����rN~R~��B�)\�W�6�%X�u(X��nzg�����-��ROt���1��pz�����+��^0�>�U4�%�����P4&���	$���R��>hX�~nh"{�1�>b�$�1�����5��,SE5�j
�2%e<�p����b�Ue^#8��q�t��b��b�����4�2�Q�ep:s�VH
}�A,I~n���`c����\_�A�:�����U�6�m$���f'�yF���Q�`rl���&7[������R�JC0��y��)Ecj����8^���\1�\���M@��m��zB��U�����k��[��8rv�w/��=����;���|����1��G���]���m�6"�c��T{k���<�(�-�F\�;SGqQ)�H������+;���M"^Hra��ovEZS��{R�QR;����m�O��$��Q��I��Q&{Go�5n�Q`�LX;g���e!1�|���k�H���m+>W(���+-�����?�
�dS�0�� zRc�q�L4���-$�G���S��{�&��#����pJ��J/a��Z��Y��[I(Ef�������]VP���������T�mPzV���y�UT��r@�rj)��Y+m,�q�q��4��=���sEQ�����9����]�r��Uz�2e��E.9��G�G��~4��x�������)
-f��7��}�.���������Gs*��h��AH�)j_�5����z�����������=�H�������8���?����4@��
����[�c�r"�8YJ���n���T�h�i����������h���)�I�?�P��r�H�v��0��;A?�-CB�jv��;������K�c��+���u���������t�~m���x��I3��6j��`���O�MZ�S���W�Q6R?2�]��`��������e?������ )`Q`�3�@���?�.)�2s�����������D7�
E*���6U��x_^�\i@���>v�8���yR�3#�+����
N�7sY���);#u@��7}Eg��P���5Bb��}=�9�~�GP��
=9��J�Y����u���`dpj���rgM�f)b)�>���X�l�x�'.{Wi+]Z���LU�Hp>^Ej�����^��S���dw�O�M��h����I8��}�,X�'
��_���,�����l���Z���n�Ev�ORG��m
SF�j6�Q�+3}��5�����bY7��
d����d�He�]�2*�
���R6��$�9��J��aV��I"��w6�����JJ�pV~���S�#1���}?J����IXX�n6��)���F�<1��rN:
5�5$�9�O7M����Wb���U��f��"�f�����l�9kX]Yd�4j�0�\~B���4N������T���g�+���k������e��}����w$�)����>TL���<�����&�,Q�*�n'��h>i�����t��yZV����?>W��z����e�YB���rzTV���r���W�R��=��5-��������$��j�d�4�����e��'��@�+]�=*���h��V���
�'�R�L~t�L����l(���)���y�M<RHB�,��"����87f��@;Z�t���,�pi���]����#8������wC#5i����mh,=)[TeNEe*���q��|�94��w�95,d�����'W�io40��[�V~�&����4�u��6z���3-e`FCc���QE��������-��m��,=���`���Ef.�2G
�����#�����'6�D0	����c������D�,�X���<������8���6�y,r�5_��H3����Q��-�@6�+N0p6�G���T���������T>v�O�Au{v
r2���8��g��q�H�i�����y���V`��m��qZ�9w�IF(�H���L����	wZ�]j�k��U�GJ���^	�������i��hv����vAp
{d���;1^��ywx'�y>�(T�1�E���Vh�l��+mc�����'�������n���������JFq�p@�����#7F�6�aB�v$���)���i�R2� �U�8>������Dgr=����r3�9�MR $�03:�����Z���{��a�����;v�n���_��ME�c�����_���W�Q�m_lh� y�����t1E��"��=I���������#bifg���F�������$��+���9��7��(��5�GBZ"F8a��}i?w#�[4&�E�<�� ���u�h�7������;VRd�GO�"������X����U��mo�m-RKB�G�����z��
���4�b�Q�y%@yKe�#�;�u��q��kEwqr��1�_0���j�m^��_��Kp8������B����%}���s��1�ch�u���4���+���$���hf��Su'l�fh�.�zu<�k�kfl�A�-�qK�1.#�W�:A��c��3�1�����=E>�����D�$~9�:�Z����H�a����z�q��+�"b�$��a�N0iF��4i�jT�F�����+�2�zl��iK  |�sV#��7r�a���R��sBB�cd�7l�+d���i��*�.E��HWbrM%;���
%b�LG���������r*n{b�JS��jM�	\U^����#��t�;U�@@;���O5����P��x������G��Q��*��=+��;����CpG���8�g�q�'#�z��(;��T�QZH�������7�n����2b��R�;�A����Q��7����2<�EJN�k��h�m�s���v��ylX�m�9�L��Ofu$|�|z���)U�
��hFHl������r'����U�5F��F$�5��,�6,����y��U�$�cf.��!�����4��6����(���#o�e��:�?)~x���|��1�?Z��Y$��,��
A���)�v��H��":#���q�j�,�������+r��u@
��RZj�qr���@}?:����i�Y���d$y�s����?O�) y<�!\"���:��D/s��l��02#��mWR��+,����s�~5��H%g2e
���>��/��1~{���f	���s-��#nO�����
��d��-�[\[�+'t�dWQ�034(�`�QO�����z�@�S�ds���������9"���|��x�d����Y	VL�c�����	�:UK�
�?��N��si�,In�0��.|���0z���<+��fax���s���A�b��U�y�b��q���0E�I�8`�BP����'��c#Z��|�"�p9���4��#p����lb�n�X.N�$S%V��U��\T��,Fx�K�B�(��Sz�}3P����M�E1g���eBPe�n������!,���QI�=i]"�X�O�5������U���,�m�1�~��HuW�UU�}��'�}�\�J���F&���sY0���xm��6�S%��z����x�H�%�,�S�4���-/�G�@�����Q���v�c�
��
��m<�H�6�F�����Z��YJ�<��A#�Ni92�L�>�m��P1�Nz*��X�DH]�r3��J��2	|����q����3R��,W,��`[�_h���Sc��5��c�E�7�HbG��vs}�X���9���3�WB0�NY���U�hL%�����*?*i��E[B]�S��*�6=H�5$<�r)��)�5��(�Jd����9j.$���?6*��E*�����z�S��M:n�/>����s������[R�(�a�:z}k����Gf
Rt@�T�S�\s\.�z.��&X�����{z6�\�������j���D4f%� �A��wW(�?��:
��9j)hp��:ML�h�$�y�[6�n'}��3�Y���sJx����V�I��s�r*�����a��#R��������i���2� �O8���Vc��5�yo�a�rs��g��F������Gzh�#^�Dc�j�=:���W�����)6[�����Z	�V���SrA����D�Q��8u�u��������|�V�<�sUY�vrs�[#)	�i���c�5�>�m,������Wt��\�5�$�
������cg`�����K�� �@b@	���C�/���
2zq�F+-Fi��o2VtR�� �}��6s�I���;��2� (�����/bt
$q�{"�������X\��2:�s\��s\������������=����RHFx�����{(�6d�-�q:�\J��=?�(��-��3�T���c�K-���V�c���*TrO�Z�Jo0���m���J��iJ��B�3j���
<�%9#��V�T_9��+;F�
�g�R].2g/+���
6�a���=������F�c��pGN��i;�*%��{���� i���:�g����x�h���l�y��xZ�J�� �����djp	
���>T�Gl���h��a�-!&PD���F0~�3Ep�R[��c5�p��������9�SC����9Ri�Z����aDt�#n;� F>�:Y���{�$A�(�1?6*�D�U����q�!��4�[���x��6�6���Z�$!��e�/�����J,'t<��f������u�����H���.YAn:�5�,�7s���Z�)4a
���T��;�bm�My40�e�iD#�l�1_@�!M�~����Id$7q����R�8�y���Jg[�N�.G?�
2��\�/F�c���������G����L�S�)24;CnPW8���SK�E<q��.��0�R�)J(���it��;0r��������������k\���~X��������))���LNj�&�
�=��1=Xt��
�<SA�J�yv���{����Oz��.���9���)`�H����\5��7(Q���\��S���^�P��$��a��s:���0�c��P�g�l$��5�����	,rx�����H�ur�
��V~��d�'3H?!P�h�G�gx�P3HQON*y�h�mFb������u�\1$g�Z�\H�� ��������v�D^]�j{�����i?p��WN�[�KF�pA5V�I2npc�(8�:U*�����X�]x��t�T282cR�����~j[0�D�n����2*�L��k�lb���I��m���(���6�}j��kp����$���Zi7��%_����#�L��L�����fi����p��`9�����yU��w
����'��A�<sK x@b�f<�N}y��:T(VGVQ�O��Oj�-��&djw�XG�L.w�����WU]I����>[�y`����?�m].��-`p�)�������U���td��"|�m����w0������#��P�8��;�*�K�8��ln#���[����*�IUR�������i��-��FC�������Lo��'��a<`�aTP��}x�+�� H�Ux.o�SB���Fk�^Fvq�}��Z�0�T7�~��L�Ti����x���Hel�pOzI�t�"��Wq&�&�e��]y/�	}��`Gc=H���������b�Y�b����r���K�$�?��<
�m�[O��##N����5������V�@���$�tvW6%E��u<���<�(�<�:����(�8����g�SR�����H�0	=��<�q���k������_{insr�3��>������l���3Gn���9g]�z���U(����6�n�
���:����l'
���3�H���Q�iX[L�)�$ePs�z�QpR}�?����w�
��S����;g)3Ml$]��*���
������v��������������Q�1������F���F�KH iH.#(�?tc���Kd���'�D@V��1�N}�BB�e%��fd�)\����4f�!`Lj>����RM4�qN��oq�W��@9��>��4�B�9<sA>�b�L�:u�f�K�f��Q@�<�Py����:����z��N�!�"p9e��=B�+�������y��g�S����R�k|����j�X���T���T0$��kQ�&Z���Xm���9�+&v�9�\JKJ��h.�/�.
�����r�X���s.W�	Oi�eRvDdna���=l��A`f�m�s�95��qyV���s]	Y5is;�6��Q��B�jd��9��9��OS�Q�`g�:�r:
������m��=G_�Oet����$�����!��)���do5K���B�le����U)5��c}+�fEM�!��)%�~�]��%���8�4�P���SZi%Y&2�p2�.s����%����I$Q�
����Q�k��{4�=������������_���q��$��#�+E%����Q�����:�.md��*3���s����#vg&r�SK�5�X����x�=?�����2w	�U\r:��������*�I�[����S��}���]��,O^�9����7B��'eX�hQ�n ���9c�8�&2�o�����dj:����C3���|�����5��7Mo<o#���a��y���tL�&�gD�i"H�E��p
��U���ZDbL��I8�\���I{�e��[#�V��K�,L�>$c���?`Tc�e���A�X��b�1�*i��%T�"���T�,:VL�U��Ha����s�g'���)��b���N
e8A!�������<��V�
R��$:y);�Q�����������B�A�����e�@����#w�fw���4�O �2���79��E��4��W��������D���4O��;A�����D�0��Ps�)r��T�G�IY��r�&P��O���?`������!�� �J����4���y��B]y�z<��N��R�� ��4M8���T�\��?�Q�����[��T���)�����I�H�I��z���@��d�@6��6��Rn�4����M�(��E1\�u-N9��R����xmn7��������i��<{�K����$�7�k�n��$O{s�%\nsX����W���T���IX�=�����H�u��q���TKc5~�de�j���0j�+�����NOfF
;��������N,MKD��Zo�3�k�A��S��CA����j���H��A�*�,O%�O�sR<pc3��P�lq�S�A��MY����h�2�p�pN>�R��m!$�%GCW���Jn%��c�E\S"SEO�������m]�y�j]�\����
*r����v�)�n�0�Ik�#74�1�[��:#���h��������>[�t��FG�P@�=���[����o:6����������������.Z8���$�>�0�1",�!)��;�z�+��i������"�Y��NknD��6g
&��������s�)����3���Oz��QH3J���w3��"a�@9oy=��]pI��8��"u&c���{v�5&�������G5�N
@�!�Lp��X�Ly��Ja�1��r.Z�\��g�g����#�?Z����Nh���)��M�Rlu1���'�$�S���C�����tW$�RU�����_���C�������)R��ef�[��*>��~�����������F�&s'�J�=���u�akH����H�Q�������8V�g ������>��iWNy������c�7�i9�������?���}����(�vZ�E@f�<�����Ry��'\z�p����g���^a��22�5
��/�RM9�*���}j���k�i���(R��Z���9v�2�����#�kW�?guf3������'����Q��A����Q8�.h�q�z�� �T*���\�V����sVb�kS�9���bW"*�Ue:��F����Z�)�
���>F)-�hX��E34U����P_��\�8b�
�L�*9���j'J���2�F8���&Jc�=i\V$nMD�'.���I�*Y�H@[y?�.������TM���{!��W�jq�����A�R�E}^}�{4	+�_
B?��������c�c����F�Q���`�?t����-:�>���#58�4�4U�
�hk{�����S����
��|��QQ�����1M�u|�V=�;_�<�b_���xv2@�v#������MY9��8hD��e�c��b+;h��	�5=��J+��}�P=�G�6��vW"O\�[��CsE-#SC�QMZu6�(���W�E�.�L�����I,��,O��,zW9SV2�������ji�~l������a�f��0��}+���Ku�?��h��z�Jf.B���5`FH#9�������z�
����e	�)c�
��4�6��*��A�h\/��e���'}�0qS)�_�3���E�1��V����&U���<��D_��~�z-6�pvd��h���������T����-�A�
z���
��U{�[�����A�D��X�H�nLh?�j����=��4��.8X�9#�L��yQ}��G������G|V���L�����k%lf���lm��
z�V��I���a�jQ��/�Z~sQ��We���%!4��E�4Srh�����T�����d���NA����D���,Z�qR*-��&�.ij�S��j@��L��\QI�CP&�(jh�Q��� n��f�zR4�Lb�Rh�����''���x�;��0G�WS�Z�����XZj�A�]\��f-��W54i�4�*d������R"�����sS-F��Z��S���Z�h�#lT�j�������wS���C
x�P�XZl�������)�f�	��iG=)�b�z��H��k�M>����9�T��a4���S��6�������\�`P��h�i�H�5?�MaR��*�*4<������(��H�NQ�q�Q@
(4f��

�(������J3A9���(�M&���%,~Q��[���k���)w,d�+����=�t^���f��]2(�\��p���5�F>QI�����JbsS �H��E1EH�4 )�M�)�3M�"��Q���RBc�(�MD-R��i1��H4�"�����D�Q�4�K�R��X��1L&����iA�B�Z}4�z`7S�4�5&('4�@	E:�R6��=�7<T���T�9<zUpjXO4����KM^V��HE&h�--74f�h�%QE&hh����
���<�nE�Rk��~Q\Do��_�<Wwn2�����8�LWI�W9��7t���1��T��0T�3R�%QR)��9�O5$]i��"�"qS*�Q/:�	<d/jZ�MH�j�&J�*����^*�#�HV�p�R�	l
d�U�EX_�u>��6��\�\`V��EjPqHE6�����4���b����f�h�)��i�(��4��H���A�9�z���� c�9��i��3Jz���gF�s��,�����R�
 �L�w;4f��\��HzRf��\��J(A����<�������{`|�>��+�Q����[w�^��%�m��5��M�3pv���4(�g8����H�="�R(����M�8�B����(���H*E�����52��J���4&L� �)�1��:V���qN�H:S�y�9�w�����,��N:Ql�V���ML���M��T�E�x�F�&�
-0!��(�z��4�T��{��g�K�n����F.sI�����cVd8��j@��39�~)���h�MW�K�He�jE �j$���L	J���TS7�����R(��N��LS�(fP(��Rg�(�-�E >CS�J�}���#�Q����K���G�=qY����1g�j��OK�x�F*jP1L"�QN��(��H��J�Fq@l ��P){(���R���T�1��@<��2E5TzT�#��K"f<T��hV>� 9���B��>P9�����"2MD�a��C%0�1@4�|S��'j&rzSrORi1qQ3e���"�V�-��8��4t<��$UY5e�RC�����i���J`�b������$R�-����2<c��!�I����@�>��o`)�E;��r���"�!zT���:PF���Y*=W~��kQH�P3�|f�/�������^l���@�k/�n#�aY�����>���`��HSljEh�� T�
x��L��(Q�~9��J�;Tc�R�j`<p�����hE��TKR�R$QS-F�jU�Z"G/Z~p
6�` ���f�
R�2j)G`�M����f�S���8�+-�i��&��Am$����Z��b��I��$
EX����3���j�R�<!�eu'��k���
�����~#���)������L�7J����y��^���.��X���)����j��5C�}�u��8%$�
�3Px��4���6��a��F~��NI=1��)uX�<�$���Z��}�x��Y��s�I�k3_��V��6Y���� ������V�c���YF�f��.��A�	Z%
���d�r-��)`��,���T<.�X�����0?(\s���R@l��8�~����>��9q]\\`����}{�8�k���Rl9H��Gs�9���a�x�b���������'U%�U��J�����jE4S(`y���V
��SG������?)�������@(�
�Wg��@���G�Z��r���|
�5�?��V&��fK�1��P������_Z�'��4A(�*(�)�1T��GsQ--I$��*D=*����%sT�d�J����|u2�J�<@��HC�sS�� ��A�Z��.1O�Hi�cS	�TL��.i����)	�(�O	pZO7��
z��wa�H����:T�up/�B�����u;�B���<o��u�Ks;,b�rq"NjMD�2y:���xmY@��X��m�O��W�d������-"
��+3����w<tJG��nddH�e ������y(���L0�iB����*�����s�@��/���6����l/RNG�T��D�O�"X�c�$��1|�G!x���c'�������Qy�K,#`�<�@�=�/5��cm2��G��j��?��&�h�3m#�V��H��n����Tr�q�E����1F��R��<;����2"9�jO]�&z����[_��K�p�!\3g�&������X�s�$�?�l�KR:h��v�+�k^�V��<�Q���H��4!l�S�M�Q�����=8l��]}�L��4b���F�@sR(�D��xp:���T�IN�N���B�;���Fh��f��P�J>j�������'�(�������z���4QL�ZF�ED�Z~(��C���)�2�*�B�*�(�GQE@�V�S�(��;y�.qE����0�h���7�Lv9���9���Q@Neg��(���P1�:FQ@������ZF�E03����E 6��E!�IE�T���(L��qF�E�	�r19�P���<0^���<�yj(�����
endstream
endobj
31
0
obj
<<
/Subtype
/Image
/Width
1463
/Height
256
/ColorSpace
/DeviceGray
/BitsPerComponent
8
/Length
35
0
R
/Filter
/FlateDecode
>>
stream
x���y�M������c_���6����,Q(Q���2�H��eM_[�k�"
�%{!��%��a���{s�l���|>�z�9������s��s�=�}��<��0,!�v��#>����GO]HHII�x�����>.�K�����h4�6�=}�B��Fw�e���F��	����G0�6��}|�2v[��h4��
����*�Y��x~�
�h4�����1��%;���=K�m�F���&\w�9&������k�Yh4M.��;��4;�����}&�PP�����h�'��e)*D����
�}>�����6N�����R2������v���b�lk4�Qv��-F���v���R�lk4vQz\�z���<E�p�d�lk4�P��kD�K���v���2�lk4vw�:��r��0��QcZ�5���j�Z����N�OSc
Z�5��S{�����{jA��TcZ�5��odrHT;����}������d�'{7��u���������]�`��~�n�m��4S���3SO�sZ���S��K�&�,������=�n;5N&�4���s�����Q��m6�w�������oc�.k����`�-�!�m�R����M�h��x�=��c���>X]�~(j��k��e�B��?	>i�[����s��n�'�a�wy���?��J��k�U��-��{lr�<-�f6y)���J�N��A���v��'dn&)�=g�u��-� ��(����P���mg"#�����N�wY|i4�C�6@�W�R��$L��?��mg".�S�O�,�.N9-�DJ�T�O3e���h�v&��]h��J�M���>���e�@��T�fs/����e����v�?�Q"��!WH�l;�����q\NXZ����l����?Go�5�X����_>c�3s�7G���mg"&�w��i����~�����^�R��w4}��A�~�����,�E�X��m��| X�R��-��DH�����-);&u�+��cx�g������f]8g�e�L�Y"�;)��2Z�e������������,@�%��W�sm�h��)h�6��4�������L���Ld���v���+A�}�S�������qZ��(����"�/S���mg�/��p����8�I��2��h��9h����q��K��Y�&�l;n����?�}��D���P��������N��<��k�����Lxe��)����j��w�}o���������j��K�+m�i�v&��]�o���xw���^�c��U;G�e�K�7�Z��Z��	�lG�W�=������4�^�v�B�v���e�3�RwR��3��m�b��!y�]��O�������mo���|���~]�z����/t���M��3���wXo��������������6���J����_o}g�s�%�h����\!���cVi�v&<���q����*-|�d`�Z�s�^��pxk'o�t����z.�������eZ��	�lW��v�P\/�����k��y�v������J��	-���i�nBq���D��l;v�����&HzM}���),�j��y�r���������9z�6��^����l;v�f[{;$^C�f���VaWp�s����-��u���)W}�Y�����-���Y�g��=+�Xcf��2���#����2�>5��P��g��;�t��mg�*�e�2�Z�Q7Pq\����3����
��:�[�pj����C�c�l;V���~kyR^������j�Xr�l���>X�z������2����#�l;F��D��<����5��+Z�s*�X��{FI������h����e����v���{���od��u�j�Tr�l��=W���K-2�4\3A��3a�m�����{l�_�#����$e�����i�j
���e��0�v����=�kr�U��\EN<��7��,y��xU�-���E�����V��d�&G�Ke��!��J�����>�0����C�l;�~�������|M� w�v����}���8�|:�e��0�v9z���v����N��>T��f�sO��^�Z��	�l�Do./���^�C���}��@��������U��\��3��vujp����Fjr	�Q��%�>T���Gy�F�����Z��	]����O�^�
��(��'�����aK��9�o�\�Z��	U���T;Y;lkd����4r���,�\���/y��l;�lS����xMN!��v,n�~���+��Z�,-���&���T{�^��H��d{
r�=,��%�gSJA-���&�s)��z�k4L�:��������?��MSC-���"��)��=�5
�m��|��B0~�H�vZ��	E��ST{�^"�( �����.S�.��mg��v�e\�S��j�&���d;?����z�l;\�_�U�3�V�59�\&���'{	��z�l;\����}����kr�K���Y~���6�l;T�����y�^�59��%���:�n����LP��|K�8�������U�]�1���'J��3�d;�,.�o�l�&���d\�N�
����mg��vs\��8mj��Kn���s��N��� �l;L�?�e�]�M��r�l�>�'�mZZ��	"����j'�|�U�&�$��mY0Z��	"���������[Nd����i���w��)������X���lr�5J���W�j��}��{�U.��[�e;������i�{�U.l�O�:�-v�c����j7n��s��];�ivG�\��Y��G�=��{��-�\���m�I�,t��c��q�|�)����3�0�rPGx�������0�X6��}��$��m�w�O��J]�s��v��h�u�]����{��SY����Sb�`r��vY�`�l�n����'����}���k8)��j\5;�����u��m����7"�G�G�����
9�_����v���-�5A�|������=o	�%E�����������F�Kt���-�Mo�0�QN���6C��������gp�����|�d7���y�*��L��v-��z<�Bxv�"��S�g�%e������j�u������*������/'�����������V$9�����KK�M�G�R/�M>A%;�����.�9�2���^�y-��/X��B;L�7���5�����c����(��������pf�y
M��\��:5^)NF�l�x����l!r]�Y�.�V��Z�k�9���xI\��h��g�H���x��gG��\/\ "s�������ze�F�R�8�r����O>�wf�4�M�3�Y�����+[c�M��p�l|�|d�������=�>T�8�j^���O��}�~�
(�����9~������BC�&������'?�t��>�k�2/��~;�e�l�]D�zQ�
8�;��A�8����
`������M���8��;���O�]-7qY���~!sa���~��Je;�/�����q"�X��mWG��{i���b�4���v�b�F�4\�w�I�`;�L���5lT<_���s������d�9%k%�3=B���0�_h��E�lG�BJ�$|�� �d�n���$O������*M�_E�� u�m?�_�l��P��o �,�����Rd�����l���m��Z?�X�e��
������5;�ZP%���-��x9�*���se��gb���g���"�I��yh'��.��(9�mg�lOU��:	}E�Y\^�%�n�,b0s����"�&�����:!�O�/�~h!�����>�H7
�ce��������r��4���v��Teb��_���l�������W�T�Q�g	vW�va�l7�#
������@!l--Y����g�`"�#����Ce;�T�kp�IVG�����%>gT���^�*f�:Z��$|`�[~�M����"B�8���l�=>����v���9%I�@�KB������-s�lWaw�%��ZfO��G)l����;��H"'����R���$����Z�oe-���
�]�<dd��!���a?�tT	�e��S*~/	�k����s�e�h������%}�:gPp��E4����-m|Ff��Ln�;O���,����*�{n��vT:���j����������qeN��>*.����6��c���K��#��h$�<a�����M9q��e��d��J�����CV����i���LY�^$e;
wl��gV���v�X5�`�/�E3������c�J��xB�I&;���RT�^�?I��Lq}��7���^���C��b�����C�b�����va��m"2~9N��g���z��$�+���yA�����*��2�W�����i��E���ZaJ �e;f�R�-���D���]s����P�H	��`�i�������_u��t2���#��]D3�R&������L~g����*\���������� ��c�.0�C�'��l�p@�����C��d;\�|�M�(C�G\!��iR�o;a�U^D3�����P8�����Up
�b�)�(�����	U,���8����l�?��w������m��W ���������qoK�������"�q�1>[�Q����7|�\�o��?��v����I�>�<�nKS��l�
g���&����m��'���q��\:�N?�wXs2Y�E��oa��T�y"&���i��T���������O��<�,+�R��l�����R��%��3��s�?��uJ}�)�a�N ^��,6���W�f��W�tvS��z��(�������A���C)BT���g��g�����M����E�W��8��)����8I��%?�zR�v-�k���g���K�.b�qO�U�:�L������/Y8����%J���A�?�U�G@�lw�������H a���U!*�,��gt*U��'2���'� �.�&zbV����{~�U�s��&:�J�^
��D�8F�f�<y�Xn
�rV7�M�B�l�x��@*��H`����A�~�zu������j~D���>���v���sI��xE�]���>�;��5�8�����-^����-)����P����x�x��N�c-rV��(�f&�{�]ufab�]��i��@��A�S�S:pSj�8G��S���;h����8�8�H�Y����J�N%���i�C����3��XN�e�n��]�.8s�%�8w���W%u���c��[�����;c�oeLs����A[�8(F%B���fsa5���5���A�'�cd�!�Ze����L������K�}��.��`1u�����W,��8G��t�|����~��8t��������a�b�7�9aG��R�).�������D�Xo(O��u:[.���L����xe�+��:W�����L�_:.���Y�x�����~Q?<����������.p=�L�c�Y�����������ga�l�s=�z���m���[z1����q����^'��}r�vE7����'�O=�����Y-�@�l�f�*���!�%�3����8��#�0��E)"���$<��u�
�l�v�Sd�\�&�K/0�5�m�����Rg�����a�bg��������3.'���<c>�3#�y�a�#_�E'������C��"Z�`�$U���e���7C�]sm�����E���`���E@���
�e<�W�b�	�?�Cd�&��*����%.����.Ke�+a��LG��3:Ow��'J�$�{fq��u�2-u��M	��dJ/�K}�cBF�l?�0�{������#�K�	Y=����&����=���~m�M��Gt�l�a��2����,A�q���-u�YX*����{����������OC�H��D	���ncZ�����Tb���y��v�_��6�B������*������C1��]��Ix�w����$��:g�6U�1g
�"�z�VYGdN>Ke;��#����e��Wj>�#�^c��;�o(W�����R�sk"���g�rQ#�tG�����M�w������1(�l��/��'��+{E����0�,��]�b@��H=gP\���J��	Ke{|�po��R���V�	w"u���_#���(��>�r<=����l_�0�A�(�����#lYn�;j��	�w.���F�e�|)/�\�E<��!�a��'�5</�����g����=5p�b����S�V�I�
����!`���>u�{���K]d?��������~�6�&����\����z�&��=�n���1^�S����Z���� ���k��Eh�W���7�3Ke���I3�Ia�����g�k�T�>���o7��������v���d	0�������|���2[�
gh�~�4/$�z-��+�w����R��RG�N�C�8A��f�����D�?I�3����Y�T��V�o��lp��E3\��K|��9>����R!/�{i����&�:Z5�����1�g��}��Rz�j�n{*�W�����Mq#j���)h�����YD#�1(��F��T����=?`0Z��D��P.j�u`�]�������i�A[,|�eB��J
C�'��@��;���k:���9<�
��\A������z�L+���m0�h���6��"�8�c�������"��
PV��O�����bn�P�Q`
�	e��zY�awPL���X���AJ�Jd�����
�i��� �'.G�E���m0�� ��8C�BH �`4��J��~�����������X*��I��#�y����R&��x����J/�RN�8B	4<-�(5�YJ�6�"�u72��C�W�,(��������G_��I6�@�����/�@���XN�m*a��q��z<�e��R����sQ��e`�����A��c���`Q�w{��\^_*�.���o�xT��
��KG}!w�M���!rH#��f���d�y��{)pt��%��_�g'H��1�����SU��z�4���@EI��/i���Q��J�z{�1�^��3@��/�^�6��y�����h��	j����Cy^o���6�D�����)��U���������x�����'�z<{$�N�R��O��+IR]�s����GP�����U�_�W8�k=K�(�b�<y�F�4~����6�!SAO��������.�.M�Y3�!���%6�]����Z5�����G@��mKe�o-7&m'~x��E�G����J��{���T�9z�U�����~�e�:�{*�Rtx+�X�D/D@�%���p�6�o`����hp����
U�~]�p�{��9�?/5��X���u��H�9����K�_
�:��S��0%I��F����x��%����e]#��jd�8��>w�_
3�F*y���d�;��)�X*�O&]����(������d���^����S�Ke�/�:��&��Rg���M`�����H���{}`����������!���d���0��7��F�L�Kap}UM���#�����G�\'����?V��m(���\(pu;�h	�������vG�@��/� 9��"<�y`������l���|�������.2����,+���}��N"��Ra�6%��{'�9�~�z|[� U�Pb�8�e�����gL~g�����B	���9s�hK��!h������h��%M��;;�T$��&�����6:�`�����B�~�������,%�[�l� �^b1E�5��Zl�l�b_I�IA(�?�p�����8�g��+�f�������9Q�=0�������3�{`�;���#�u�:�t-+�� m7�,�xz-v�j6%_%w�JI���#��j`�	aZ?)��f�.|(J�%5�3�_��#��V���M��agB��K������X���Y�����mk`m�%���	������ua
���z������H�L�KE��!�Q�f��.�1@�KRjA�eH�rE���hy3M���JG0�P-H��d��Q~l�9A.Y��������d��k���#�4<����X��t��C�/%e;�9������iI������P�>`��z��p�6pv����XNa(�������/Im�6��O�t�"��bl�aS3�G��Y����[���}��-�B���zOYC��}K�6��)5R�U�"�\_����40��3�r�6��N�P7��R�6�6��Vj�������d��?���)�����-�<����A}��[��� ~U`
�?{�_S ���)���p���������B�pE�� 5��}��$u�a��!��O(������N��,�@DG����7n����%�8�9�UBv�����{&�a-{+0�����6���L+�d����lc���<��
��^�JE|_6����JQ
�lN������	�0��vA�����7,Hye����2����g~��TAk��9(�](�|L���Jj
�C�[�Acs��7��()��O�u���
C��c�gT��.Q=�:8d���0E"j+`���`�l�3UK��ENY��mt�
��2:!��v������)�(���/����$���\��a`d�p�.I�FB����\~�'����U>k]C�c�i��M�y�C�5q��GHni�lIy~Um%����xR���ld
b]��f7`g�]���a����1��'�����yZ�9��pI����vr[�/���� �f���f����-i��]�|j���{r��0��m i���`>������^P��(��:��&��������}77�<�%��������� ������]N��#-?�kY�SZ�g2�.�J�0"g���.���Om�Jk�P���-��m ���E7���OB�h/����� 2��ij��������0����,�PQX��o����r(�.�ly��6�6�D=K)���#�J��*�t�!��6�%��Jkb�c���m��Z�D�|�}�}y�L�q��s������L#�	�n*������lf��V�w�
�hSV��DZf��*?�4�95�|�i*j�.+�]�����J�9Gc]pC{e���tZjt��*�?����4�Qh�X&$s��H;EY|\�C��Z��J`���[��>>L����=;;���d��������e����J� @?��@+k`����3��A�|O�nh�l��d�J����=]����L��[B=��������(I���e�o`eY.)2�F1% C��8m}	�.'�����RyKc?E��
�T�n��b��6�$��g:���G��+��$m+�F�'q�t����Kd����4��`��0i�*���4�@��4S���-�����7H�C@�9���w46���>|`T���
W�Ed��
�uE)5���~6����M^�\*5�?.�^
x�+E������J����`�@Mn��6{����n�nVivN�!`�L9����&��� �/l���\����)�]�?#�LUky
v9����M�`�+5z��I�lc������6{���!�v���2~�c`��T�|1��M���	���6^H���J�(�������.���-���3�8������69����`�7g3d�(��6�oU����]w�[�W}()Nj�U}��~Ae�����,A����������� �{9��
��^�8��f�J�,X�l��*�Qk9�qrpC{e�0:Aj�N�F���k{{<���,���HsK����v����Sv3�0��M�L��:{<���a)I�����d�#�%/���r�bCa�m��j�=�JLbpC{e���]6��D�L�F#����(3?�X�k��-_!-U}����tLa4XX�������1�Vv�8�;`)89����c���}���),��6y�0������c�l��i����������j(������[�����M���l��"S�,�����H��J�u/'��TV���S�Y�����Z�U��6�g��ry
v>����M�],5zD��,��J�1�����<7QH8���_[,�S`�BQ���)[�����$���e7��4S3E�	u/'�o -��.��X�����'Ja��1��R�W��8���^�&������"��%�yh%S�����f�F��X�v�r������X�[E��k6�n/�]A%��)��6m"A'u��iG�@kv�����.��}�vZG�3CX_�W����TT���8q��lto��l:*4���0�*��G�**tW3�Bv�h��"oJlylv�0,�[I���P���$a���iGh��kC?6���6�lI�7$
�#��Y�^�&�]���r�E�l�Ry�x#��E������m��LQ�z8Ii���XV�'���%�3���F���s�i��mrV�O;B#9������������QiM$y��,���M�`A�mr�d����G0�~J�9�YR�W/��;����D���y��B@~!�{������w�/#,_E�d�L��l�U/p�LUR�M�T���2��
<fo��(P:-���M�4B�m`{Va����L�{�lC6��Y��{3��������h;��6sC���%�������!�`�b�
,���p�S,�?_
I�*`>���	�]��JcL�'��npK+d��,�$�@������T��J+�B
&�������� ��4����(UvK�/O"�NjrIa���^�X�W���{��%y;C���j?��2�����]���i�Jk�����+d���G�m��w���XN�,��h�$��U��C'y�6�`�,���*,����5�$�dPA�-X���f��0S���3�=���l��X�����23�����Q��<��r��)%��-�m�\I��(E��28E���!����"����a{H)����i�SqW����=,LR��&���	���R*�
���$e{$f8��Vjc>d�8��������|N5Zl
�	ni�lA$����+bl���v���F&�DB(�#n	�9�}�}#&a%����PO����9��h�o�Dak��9���PI����b�*�rP��*#�28d�
w"�#��HB�2h�l� �I�
��%EY2����8�-.���^�����'��	��y�"0��x?��H��B��`�6����bU����� AN������nG�*����i\tZu2�~�|J��3��	M��-���7yt�l5C�������e�����d�07����b��E����F�H��bm��������t<����!����l�h��$��v������M�
,�R7�#�m�L$4%����?9�8Y��4�$K����v�xr33cT��Q������y\�(����[`/<�@�s~��~���P�-�f��v�oI�Sr�M�����!o�yQ�2��.xl�Mj,�HDD������P�`����	�T�IV#w(���d����,��Q��t��u�#x�u$n���V��:��Y��LV���L�\�ee�V�A��G�s�E_��Cf��/}�C��L�U�U�%mz�3��%n��@6�lC1a���^��m��@C3�Z��6��y�x�q����Uh�����8�����%M��y"zz���$=��)��C��ml&����
R�[Ox
�L��G{������6��qH�,��N����Z;����C�p���G��G��o*�(�F�9��KEI���:�ey�:U��rV��J�	r�B#<�%���������"���eeA����v���e}g����I�)���w�}-p�G��L��������4�3�m%�h�';Y����Ja���6�p:���
�<9���'�C��4/n�����

�j�6�+�\9	�{_`s��3�����^de����~����X����x���k�d<�l��y���������$�e�u�,�����K�tN��0��V��]TQ��	'����7�,�W����H)�>/��+���h�9j����������"-���g���;
+'fj!;"�B�.�B���N��yd�����E
e� f�&S�G�����]��'9+�R���m�4��3�+J5�hM_�I�:��\Z.��[�g�o�;Sn�x�4�/O��>@����G���e��e��5K����X��t�w��f�G�.�����������a�����@"�E��������Z�y3a��.3Q��GQ��,�Y��>�a���������h�&b�8l��x���x��]�GPW�_�,`�<
d�w�c����I����2&�a�����az���v1�d��R\����w� �����E��
����������J�^H�
������aA���a�c���L`uq�X)z-+���K<a�>�zH����I��A��ZU�|
C�l��]$�:���H�o�d�
M}|f�:�b��H�.�6vg� a�����h�h��t
�v	�
Bz9�?&�v4� ���{�q��h?�K�|X���dc����Rwb�`86T<�DR�	%�����"�My�v��5x=��a�f����g�u��a�����O�A�F�6�<�<�����������W@�iP������U��6��%MlRT�G�O���}�)i��B�����z!.��G�=�/�^z�����&����4NP3!/�`�A�����XH&��P��U
2��	E9�����R���A��8��7M@����rs���$�`���b&d���{��m�e����4Y���)���C�j9JM��"�K(6�%6�r�FR�?J�����Q�z���.�KI(&�M����7�K}A�Go���i��a���y�l�%���
�����!^��^���v$�D����Iw�P��vl��i���d����-�Z��6��xn�:�.F�q�i'��6[K��e5����9������5�@���W�b�_�PL���R^����!�?���_���
-){<��&��8�nt�"���3:�2�D��:QA�M�P�����7MKM�,(dA��s+����7s�������@;��8L94���$mn��y�w�]��.��������4�	z 6Y?�&�b&��[.0a���<9��S������
���^wK3@5��
���y�..B'<��^_�l�����������Xd���o�oj���|>h��0�`��|�*C�5Y��V1ZnG��<��cy���m������z���+�M�'����|�6����u����+�pZ��(����q��G;��&��D7��\�`0��#n�q-�,�d;+�����Zh���,��=+�������&�l��^F=x1���C7V3-��c<�O��smE�]
�O��5U@^��|�]��HRAxF��%��&�+�a�6�O��1��.Sa�������{
`1v���
-� �.��m�e�r���dG��m��D��L&h��i�c��*`��3h^��A��_�2��D�Jb��tbr0F#��x�g�D�)�`�L��f�a�.���|�����}&>K��$�"��$r���6��}��nw���L��0 �����s|���$3=<�K��F�#� �m�C3���/ex�OY��H�n�)�lg����z���X���_��Tw��zW����~���,�����Q#����2�����b�L�x�<8����j�b����{����[�]��f�Huwx��V�
��:G���������
�zA��\F��L��d�����b��w0.si=��<����i��zH���aZ.L�
��U�%�h=5a��`����$R&\,��r�3Z��&ajd��A�j�W_�x'�,�p��v�������}�2��?���F���w����`>���[�*Zj|X2w2B��~T��B�"3$�,�S��Ul=�wf�L������^7�����J���px���&(����.�����D���������{�6�8�,�M�E�$��c����F�A��{�N��Ag�,���,��'<K�)7	�l�{�;9k@�J/�8�>���?a7�V��&��
���G�?�2��m���ogqm����V���5Z�:~-��H�L���KT�Yl.��hot��������"����q/���{	cA���a7S(�m�6����6��j���2��4�S�r�����k-d�] n��v,��9�p���D�1�`d�����^��*Zu�g��G��(�u<�lQ\�$����v�g���1v�g�����^�����i�
��,���Q�MZ�L�RgGe���|�y��b�w��Q$�jP^ ur�����J��1����^�K�D�Ul�v�X.I�����l.��hF��q��# �F7l��a�b�T�����a�:IKg6�X6����N���j��
��e��sg��ZDh@�?���kvc�suk����O��vtF���O��\������?EUJ�d6������]���)iM(��p�eg����K+�Z���0y+z���zJJ�Dr�)�:-|6��@}�6V�C���������q��M	�c�kRf���fy���]]���.�sM����T��U0	�X��D�\�Y\��j��is��=����@��apH4�>���y�f.�a^� �x�UQ��t��~�r�����=�wU2Q&�F%������0��O�,�� ��������8�p��I,�B�P����a����'�d����������
��e�p�:<��,�F
<"1\�����`(�����l��g|����.��,��L�2y�rh�tY��C
Q'����j8�01�&/�^G�-C38����������*��l-(���YU�b��3��3�~	��=�P;��DF�����o��
���{8"XXd���o���0z��<��K`LJ�Kwj����(���6-!�.��=�9���k�|��*��so��li338ow���1�6d������4�W�_m'j�S�E��L[�^h�]��8��W���=��3`�m��>Us����b�]�����|B�Y��}_�5��T�v^�X���*\rZ��{��>����L>����[�����L��o���=����l�3�����P�&�����z>��<M���g�c�+�a�%����������;����KK84�d����>���]Y�Y|Xex����	��l����iT���*���.���,���R�]av
b-&���m��% �;Z�A���J�wQEo����3�1	�9�K.�#O�����W�p^�Q�����o���6S���R���b���+�J
�_�/$�(�����	#����$#����E��cK��"v���6b��%�R�6J����7x~MY���e<'*�F.#7���*�w6��V�7���t�t��s>Ha��-����e��b�B�h����V.����!B[�}|�N��O��P+�F����:��
JS�Ty�R��-�m�.��I�YqWD.���/��Ph��k5��9�lC,��'pQ ������P^[^�l������*D��X���`�Yx�UH�o�U�B�0�8B6��m4f�`�I�S���Fu��q��lNOCZ�
�Njm�l��c�2���2�o��-z�m'D4Rh�N��mT<l������d��EbGd�<��l�,Y@Mfsi�������y$d�(��3j��B������$I���%/-���B��[Z���)��$$���e�(��3�s��TBu�(\d�+#�FCn��V\W��J����9��e�(���g���@rm;�������wr�F$���M�l�o�����R���p�8��m�m�p��g
yF�����%R^J����!p.?�y5�r���I�el��m�����_�Bu
f�i��� v$���"��ItV�9�O8��
�r�H����A9��R8�����6"��"���:F�5I�/���q��V��_*�������dd���Y�/G���Jf�i�����9���A+{r����c Qjc�N��2�WE�0�s����m]�.�E]������p�?����m�-�������^��<J��_"%�F�Y;���Q�G�l�K����#T�
$�[�O��r��c(s��
���n�����z6Z#�Fm���t_�4�67Y����:4�Y�f*u����&�HzHe-�����&�5�-��V'��Q�)!� ����1����$�1�!�)�ju���$�W��FO~��C��hU%�E�B�}�W����Z��P ��q�"��x�-�G������GR�
���?���D.*e�0j.�h�?�����2�T�v�uy�����w�J�*�8y����x�
a�lF�O�?P�}"��YbT�,�����
d�(��)cf}e��g���\�.����l����6����V�
��$����\QL�"�G������q�(1[�[�D;5���}��^.�mR���6�?�^�^[C�%T@���#"�=�7�P!���Bz�}��T�����)�M�����g�������N��d6E�Q��s���v�<}�f������:)S���_����j������l�&��H�
��%bvg��=��am�����
����m��p���|��Q��B����b(�m�h �Ic�F�l�K�c_+��K]����"�����i�v����^�X���
�G/i������l��;+�m��K<��Tog���i����	��{�������|�O��
����<$a����D����D�fs�7���F�J"����^�I����*>l}Z��Q���Q|��(1�S����4Fd��}�P�
���Bq��z�6P�u���>B{C�d�0n],&�[e</8�3�{a�_�l�=XSx�����_$�������F�I���;o���bu���������%�Sx G��k�K�E�����m��y
�&���b��!��qR����
R(��Q��,%�o�AVY���X~{���d�0*N���:�bpo�f�������Z���E�_%u�����������)��gI���`)@i"Z�f�C9�Ai�_���.\��0B���������Oroq��0a��y���H&�'1[���\���U�e��x��y��}���k�X�/�2��.��mCJR=�d�"�/�����\��c�#J-��d���{���~�4*�[���gf��x=���T���}���C�~\��/L;,�g?���3���9W����������IR=�����'M,��*��W�supp(Vf�����jsx��I���d?�
%�5����������;��d��%����p�i�3�����x�6�����_"W��^&��a`��PX�A����F/��5����E�c�3���o��.�#��]��d0�����-�YJ��Y�90�a�n���s�
�)�
��C���:b�fh�/~���<U#x'���u��?�o��]���� �Y�9;�o2���t�5$�����&����zp�����lx7���^b��9{G��j����v�)Q$�>��<���~9|��]7sP�J��z���>�N�4��ZV�,�5�N��^��w��F���}����,��o�.�h�+��h���1v��q��y�����]�Q&�����M�w>�����G{����C4�&Q�����
5n��1����Ie��nE������c&M�x�����,w�eZ���\E�>��k��]�I�F
����
��d�U����z�=b��Og��l��������7�?:�����}e�G�������qC�<�`�P:���j�c���'��=m���O�b��1�\�g��0m���G�����i<4`7��v���h4�`��s�6M��h4����#�6M��h4ATU�����i4�&�'a�~�n�4�F�X�I���F���o@�����UZ��hr6�pi�?��M��h4A�
���!�h4
���I��>,��]k4����.[=���q�H��&��5�F�J����_���6X���L���h49������rzB*��X���2V��hr;��1��L}��H��1���h4�\��s���%�����������h4��|]���w��E#�K����F���R�cbpLW������U*
�h4�\H�+�b����G��.3�G���F��(��?����'����j�Z�V��h��M�=��"5�;a=���4�&W1�mo��W�{�?�F��MTM�u{o���a�]+b�Ih4M.b	.���]4��������h4��B�n{��T5(����e���h4��Y��|���q��xW[-<�F��%TH����9����g�Pzjc��h4M��h�A�����I����"��h4�D�����'h�D���Gf�1���h49�t��x6<�u�����.v��h4�&��,�����0�p��c�3�4Z���4�&����ds}�K�]�Vl7����m97�F���<�$pv��>O=tO���>�i��O1x���g��h49���+��v��F��� �WY������F��(�����p���g��h49�:����v��h4�4�n�jO���4�&����������>9�F�����J����4��
zY��'n���4�&����u����F��XE'�����b�Ii4M��9���������h49�*)U��%�>!�F����.W��3���F��XN/juIF����T4�&WPk���u��'��h4����I��}��<v��F������T�5z���h4!��	����n�5�&�����h�a���F��|a��hoj�E[��h���|���K��m�F���nJ���5����m��m�F��h�R���#p��k�5[��h�B��~sR���xq�-�h4M ���2t����z���p����K'l�@���h������Y
endstream
endobj
32
0
obj
33117
endobj
33
0
obj
30524
endobj
34
0
obj
25228
endobj
35
0
obj
18928
endobj
20
0
obj
<<
/Font
<<
/Font7
25
0
R
/Font2
12
0
R
/Font8
26
0
R
/Font9
27
0
R
/Font10
28
0
R
/Font11
29
0
R
/Font4
14
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image5
23
0
R
/Image6
24
0
R
/Image12
30
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
36
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
37
0
R
/Resources
38
0
R
/Annots
40
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
37
0
obj
<<
/Filter
/FlateDecode
/Length
39
0
R
>>
stream
x��VInT1u�l�&`O����
�,A�� �,C"�H�
wb�X����g���4C�FBQ���]����>��H���������PIRD�|td���cL�_��x<��8�����\����|�$Gr��������J-����������U�9o�������cp9S��C���Z�w�!YNgbO�h�A���(2���������b�v����5���[7_�z�e.�y��{)S����i��y&�
a�lZ~���3�-��G�F�7c����X��"f�L������9��u*�dsW�hVSeR�s�'J����e��F��Z�@��d�1�2��@(Y`{��\�}��H~@�����Y��-��|���;�N�i���JEJ��q�>����=��
\^�fLQ��d�*��l9({`>8�F��N�7'�b
�[r���3���^��WX��u�b��*��C?�T����^Ep�v�*�%Nh��;�O��y���\���M�;��!*��W;������t`
6�����x�O����\"�+�Ec�ui���i��u|�����@
o����)��Z0Y�JW�����!~L.c���$>�k�������\��.��~�'���m���9����w;����j�v�z�FhK��\�������f����c� �),���@�HTo\��BIg��33�;i�^�`����
�&��.iq����6@�i���7g8��`%=��K�v����X�K����m�CSQ����"��7:�RW��
��W��R��Fkb�Y�� N�$E?��+���o��.��p_���M��6P�,#^R@Vmlb*�
8���E�K������b��P|�=�^����	�0�����X�tU~{���a�g�`��w�j�����-/��km�����QI
endstream
endobj
39
0
obj
906
endobj
40
0
obj
[
]
endobj
41
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
1095
/Height
1095
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
43
0
R
>>
stream
����JFIF��C		

 $.' ",#(7),01444'9=82<.342��C			

2!!22222222222222222222222222222222222222222222222222��GG"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?��������dm����YO>��Jsos���D�=���8���?JP���f
.��=:R��p)��v]���RR�wc���OsL^3Wm�����B�#��J�J�S�(�h����*����y,waA�:g�U��=*9���}���=�B��J���e���^�g52���B�"�L�G"�a���>�c�S��"<�1�f��k��31G�N+L5�dXBH��>N����c�����@n(4��q��za��J.K�A����!�'�%d���'4iH������#=i;�E�����V���K��a��<�i1��u�C�>���G ����^��C�7���'�4��JaR�A���(���K�8��Hc��@���f�cd������v���Lb�hY@\�Ni|��s��P�e	�������dn�R�:T�O0X��pCm�n'����g�rh�WF���Fx5,o����g�Jy�	��
�F�3;S�o15��Nj��/��z���\�I��&��EF.�w�]�A!�+)�kzV��d�����rj�#��)�7�F�����Vw����G����}i:v�&���S��vv�@��Rm��Z�F��>�<i$X�J���n�����Kl���n�c�22r:�ky�hW=�r�g������m���Q$������H=����9���*["?6E������3}�}qRA[�N���+��0���M��})�L���z�$?�3���#<��HV;G5+����x=�Rk�{8��)m�#�����e*GPi�s�+^g��T�V� ��L�*dF0���k���$��2A��s��(7���R��y��h�u v5T*�Ob\lQ�f���Vc�|
�@#�����r��=���<���POi%�m�q���W��p}��Sq�:��i�{V���
^�?�t�u�v��:�I?�{����j�h,"��"�6�)�s�S�`/nI?SI��M8g=��p(�b�����8�NZ>�b�3I
9=��H
��m>�T�F �$��9�����[�I�f�����F(����ddw�'�g��HF3/J0�O�Q���u)�B4���!4�s����c;��}�����:
	c9�Jh��<�1I�)��)A��h=)(�Big�.3I�)�L�Z"��c�@��:Pz��c)1�=)���J9��N4�s�p�P:R�8�c���D��J�s�I���Q��YY�v�f��L*�>%����c'���7|�
�6�*[e�u�JA�����zRm�P;S��i������Ef����K����*��S�&��N��T��3U����rj&��z�Q�e�=��qwh�R�X��-�8��W�$x����$�{��]��.�u�X��,�H��p*��q���X����Z����<n���Gc[*��SO��s�Y��a����!	���J��
6K)�lbv����Y1J�E)UKI���������Z<�;7R;Q*�(#I���V��F��#+��-���H`����)���Cqr������R���
j%���\��j�_�����id�L��O�ZV��
��KcD��2��L	2���[v�EaUF�Kr� $pMgI}7T��A����HI^++PC����#���-�cj~���������y�{7�+Z�S�uFi��{y�`����j��!�3I���N:SOi������)i(��4Rw��G9�a����/�LsHb��R��1����x�x�zR)8c�jX�y���)��8�!�n8�����#���c�H�BO�"~�J���F��)6REB\pF)��C����0��G$*� T6�����O>��5��1UT&:
�����!����L���
�p����kl|�EB���	�%�A%���H�$��^2�@�d@pFh���U�R}���H��������W����E���.�NxJY��9��%��$��28�"U98���0z�=�52\�)�!U��S�jp!�Zj�
vO�68�:�W�E�1Qr�L���?Z`��
�us��1��l��wV��l�5k|�	���709b;�y��D��>H�P�8��.���N�QG�D9V���)�$����A����%a�@�zQJ�A����?� �E<���U��kn���W����sT-%/$�V���*5-X��4�v)�����9�[���j����N3�i������T�4K�Y����s�Gz�4����5�&<��Ker��J.py��2l���ZAw�4a����(����6%�g���L��J��M_��i��9��:s�z��<�<PB,2~�|��F���r��!-�d��c���[)s8��#�1�b*��Gsf�+��2r{���mv�U��7FPpA9�z��i�q�v&r�G�%?��L��.���.8���`��E��;��{�����3N�0c�/��:�v�h#���sK��p�\R�K�Z.44
1N��q���&��}*R
4�(��H���JGzn1M0""�}�R�4��t�rH��4�R���E�oz��H�CE4��Rb��0��I�E�i����H(��4c8#�R0hh�ZQ�.(�sN�)��x�H-?�0
v=iH�<�S�<Uu�*h�&4Z����%N�,�JI����-�(�����5.��h�j�UG�+^&f��.i�Lg�TG$@������(���p�Y]��9�U����������0�*���X�*A��M)"\]�A �O
%S�?Ze�GZ�gJz[_�v�|��jZ���Yq��Fy�W�����Q+�K2c�3UnR)�C�����@d�#���.k=�G�P,[Li����bR��)�J`Ub�0'�i��7��)�����sf��0��ic8����)�L6���4�)����������2H9����f�Q"S/,�8�K e�k8��0�r���PT�:RG0R2I�2�j�bi����p�U�j�e�5.� d�J����=H���T�[88��Ni���!�O����h�Xf)B<S�����<���b"�������'�<�r0~�\,!��zQ�R]���."�JJ~��CF������X�T�s���������<���Q*l#�\�iR��WZ@z.*)d��+���R���\�q����4�
*�9�������������Vc
��u�U0i����l��-1C�3P�>�c#�-����?A��(P��sOYJ���pP�Q����"s�T���]��i6<�R�c��L��\�oS����R��h@>YY�r;�����C��<u��@�i������}�!$����������)�k/�B����as��*��EXuX�R��V$�`U=O8�)�g�*��X��sI��>&P"�,��+9�S�D\��qsX�3���Tg�=�j�rO^}�QY����a9\��=?#M�v�0Z��I�L�����I��T�p)�h`Irk@�E�`�4Q��E$�V*�;�������=j)g�K�
����f$��������0r	����������C�H.��#��Y�4�#/\QG������bI�Vd�e�n��CF���S�p�B��
b<�J�&��$c�����S�6�hZ�&��|�*#�A"����wUF �������+����W4�n�5Y\��N�8���V��u��S�dQ��+�����l+�khL�q3�
��Ylc����J~f�&�T��v�eB1HEn������Z�����H ��&pq��Fi�b��=(�Z\�i)���jh>�b���
.y��sF(��7b��P��\v�1�?i��o���>Phe���Dv����I�Lg�w")�{T�b���(���a�S��A��"�qL ������&BG�3�T�{��V��h�RzT�S�rl3��;�
`7<�c���1E�7�(���6����h�����8R�����<f��_�J���i0'S��Y*�����J	'5"��P�)��R�O�9�����8�����L�������T>(�}jJR4mX�Ib6��d�
������x��1�k'L�L��9���)(1b8�����s>Fq�*�E*y�3�q���RBZ� RY9=j�pG�q�U��{�������\J�$9�4�["�C�P;��P��S�������e�#�c�A�2���U�3�Jt�#=�}�#��A'�{�el�Y�T�U�Z��h�� �B|�V����L�h`O�hH����G\UpriIfnM*}�q@�2��8��sV�#����)�b��9����J�A�����E*�3OV�v�jV�ON�)@Ks��1�JwS�q@�!�Q��C!<1�� �c���0���Z�
�#����Zw$`�iR��c��MH~
�����Lb�����N(��')���F=)
�3Ry�h�c�8�OD8�B���������Db rH�6�3V]��f���G��9�Y�'��_J�8�*X��z<1�qI�Q�e�
���(I`=���8�O`�H�Q�U��-����Sm�����QV����K!��1I\4+�g�l�8���b@
i�A��F���qM\M##q�����IB�n��Mt>���yFN�]�M�j���0��\��RY�5��;P�+!�{QXR��y�J���Bp)d�l\}h[|���������R��������ZiB:������OzM��I�<�t����q;EX���b���#\8$��,`����c"�#�SyH���#��K��sX��Rj����C$��S�)�	��<�9\������=�1$d�1�{�1I��Zu9�U$�@��3�5=hQc���������*j���<���T�TM 8��0�G�h��cA.�j���N�"H���<�#�BVcn�n���{U���{������ �
�@p9����qP}��4��$��R/~���9<����g9�;�i�4)I��~�=�a�\�����4y�k[2�:8�	����o�&F,78�����4*�"���h��$z�QM2��DN�`������.claNiU�n�~����j�x������i/"\{b���,��_\���=�*(�����i@��rl5E)��1�E���T�WeF4�B��I����C�1�E#;�����-�iI8�z�� ���
�AU8��B�Nj]��Sl�n5&)�;1�����}j�}A�FG<�HG��1�a�=8��&�ds�M#'5)_JiP;�qX��a1QM U�M�
��S�L"��b��*r*28�L�`��JG�*�"<q@�6�f��h��b�/z\sK�jw��q�;t��@��~4�(��J�(_zP(�)���(��h�O�9x��M�x���`�p����^� 8S���i�R��R�c��:P:R��e ���Ih
�D��F�pj;'�cI���u��$���VlUQNS�c���I�|���.��qH�H�Hd�������1a�I>�}���4�r�I�j	�9
��IpYqU��$&���������L
��q�kHX��HM�y�!����$��n?ZP�R�"[!
�K��77J
Y�&�w4��
b��h4S@(
O4��FiI��(�Q�c�<{S)wR�}i�@:��4Q`&�GLqM/��Ttb��8R�4�)���KHb��)9��@8
��p������E�)%M9\��(.�T�g56��c��<��K�N
=���!�_5�q�*ds�p����1R��J�6ZD�9	�z�	W���@@�TF2������I'8����E��R4%�j'��E4��������+���1���z��:d�����Ei��� 9�R��2�'4�C��9�R����Q)U�3h����M^Kq�$���U��j@��4�V.�>���9�E��B	�a����I$��LS��4���c4���i��fjS)c�D�� H�RU5�F�@\�������b8 ���4sG(��?9
�0�i���UM?y�.A����sN*J�X�m>K������
F_'5)�(��;q��=M6�v������
QN��~b����Cq�F�-��i��i��=�G�LD{
!S�RMPj�Db6�����:Ss��v	"��F*ap��U"8��z���Z�a�f�d\��UB�)<���W!�N��Z]����H'��'BM����'q�2��(���7w�hY	>����Z@�iPi8��)���
�j`�Q#d`j)V�h�>l�L�	��=i����i�T��m;��Xr)�0*b8���m�j�"���a7lTM�����4�9�S2���J��D��/4���i��2X����)��i��
�
!��JB?w���)G���R����qE�9��/C�C�OQM����Cz����O�PjE�4u��C)��4jp�1��I�R�Hb���(=)EK)P4S[_�I��g����F	5��ka�cS�o�T]
 89��B2)�&A���$��v(�\��J��Z�#����nf�R����@#(n����4 &���<�VHh
�L�1TKO�GZR���%.ri;�L@is�%�0���JZ(���	N��p�������1�����S��I8���!�E.�8�K���R�iq@���b��J)h�a�N:��9���!=+����c�:;�g��Q��Sr���qC�e����j���kJ��}je��q�EK�-MO����sUee64�w��9���:�`u�E���	����s�U6l�d�������e�gF���G,O���.(�B����iqHE;�5"���<f��N�S����!���Ef��Js��e��>�)\��6r�tP�\���4�qZ"�S�8�=��QT�<��N/��v4�C�v�jw��E?�>�yl~���{SV%�e%?�m��&�i�m-��JZ)@�;-*F����3R$2<�Z��
h�vdtb�=��x��O@V��L���bo�Rm�b�-t6~�q����m�$���<�1����H��)3����)v�������;
��<������!�Y4�/�����T:��-Pv�g�<p*p��Dc�S^�l-�g����)���a���K����<����F�}��m�����}�z[�A �.~��qi��1(������<�Kia`$FR}EFab����\W��XG"=�iMV�i�=1MbXs��GP2;�e��;v�>�T���-�u�{�Z����
��h''�txnD�����Fm*Hz��58�rH��2j@
\�A���G�TZ"I�=����HYsK��qM4xzr�3�AFhfl�
L����Q!��@��NY$\s�Sy�(4�8�u&��	jr7Z.���4�����:�>�

;�������jP��GI�@�t�F� ������L�@p)����E3��D������I�bE�c��b.qGAF8��))�������K�h��Zp� �(�<S�^)�)��@<
p�S@��1@��h���b�t����{S�%8
�����)E!I�V�9������� ��8�E.?*LP0�h��m;s��>�\,-%9��G��!1���M#�Brh'�Ru$�{Q����j�"w��uw��$N������h�%�R���CiE.(������xz�W$Z�������C�����A�=~�<��W$��\WC7�.m7o�7C���[
�]ZGb���{�����T�`�X�{/�nl�}��~�y|�/zWsc�Am/����p+V��cr\���e]�6���,|%p���r0�a�����`VYx>fy����*��nc@K����5P�8�"SSD�A�0�s��]^�C	�1�;�s���%f��d{��dQ���&
	��f�)�y�R{��B�\d�������sU�0��%9.��G%u�+m��2���V�"�1����5��*��t�4�I!8D��|5x����f��O�d �u���<`Vt�T$�Ps�T����K���m,y��1�Qm!�Ez�����=�+.o
����s�u�df��R*H���H�u7�<�v�U�w�����>��T�C���2H����������Im����u5��pq�*�2��o�X�I�� ��jE��azz�Gm���;t4V���}��V�i(#SR����R~�4
m�i�{M�����1�Z���#�M���[h���4T��Ic�\�N�B�c8n�������9{��9��q
B�T)��T�Z����D�-���K?\1�"�h�1$1R����g)���d��xR�?J�����5����;���
���B��P��ThQvQZ������M9w���:���$D{���Z�U�2~����
���WdY���
�>������Y���V�y'�u�(��.f��L�g����N?�9�*���![VF�fP�?�w��1J���`=E�Bp����xm��b>�>�����m&�eQ�zW+'�b��Bf�5-�����V��t�U������'���V����Z���l��G������tk].�`�^:����YP�JU����KsH���j�,Q��`��X��2�K��)����b}����wf�����n+��U��F0���"�nzUQGA�KR�e���=
F��_l�����S��b�t5#���0��H�����/��4u��P���+��p���*�{�T�D1��!�I%��0(1�Q����*@���
�o��`��������U�G�"� @>u��S��Lbz��G'�E�U���]���� �S�@YOR	5Q�LRI�����'1:1��b�i�6��9�HKw',��j���%_��}+x���R���,�<�����y</��d>_�+R���Q�������5b�%FH�=i*f����G�*"3Z\��{��.)(�87�6��&\�9���s���O�WR���i���8�J@�a��R��S����Jvx�IN���h=*�� ��#`������Zd�r��t���X'5�!��� ��*�i)O�.3L�J1GZpB9��%-0�R���h�x�S���(��4��(����h>����!���N���R�GZLhp&���DP950�
���#�~�h���R��_�����F!�D>f�j���I��4�dx��U�n<���H2s�U�#h����2!���-��W����9�j��Bdlx�M,q�����M$i������U"C�=)�4��7�Q"��Q���'��M!1M'����AJ))�d��������t�[��v0:��m�'`�{)�y��;v5���&�����[I<�k�c�	�uV�An��r��>���,�qmx^P>V�X
��+�BBeR�{S�������������b���3J�4jd^��Es����>A��V����������l�[���~�N��a��^{�d>�M�B�>vS���%�=j�z��\������tI��Y�+����Z\�sX��VaaC\��1����TY������,��Z���F:����Z\��t�`��fq�GZ���R1�C�)ZV������M�+;��U����E����������4�>h#'�z�Hci2�����c��\��O�pW`l�_�#�>���5t)�g`�R�BpL��|2�e'�����.-����1���L�2�N��Y>��UZ!�L�S����ab���6VGe8��+�E�E��N@��[�1���G�1���U��3t;nz���'����Q�����t
�#��1Z���������1!xP+ITI]�6��m+��W��\7��9#$��i��mn���P�+��0*����\����i��WX�9T
0b�*�@�jA�������4�l��s��kH� �t3,I����;��d3f�Ej�@#'��_�:v������m��������q��:���������� sX�'=(��c}�F����n�F���9����EMl1�����\������'��>dtl�@#�o�`�~��U�V��FpA������v�(�J�JO'8�*������0\D��r'i�^3L����������<B�'��HrqOI��4���r��MD���d��a�d��+m�#�kc#B�L�����+u�C3�����D��s�R]�K
W��.<����;��3��F]Iy��
���c���w�c~��F��G=i�R�?��b����L�����93,�Q��?:w����Z������N�4����_��56��u����	�JN(jr�kG�3��b=Sws�a����H�8\m���Y��:�.8���G���y
�ZD��O����c�GF��<T�B�<�����b=JN��X����P��Yq��@���n���_US�S*�>	4����ih@���`���@����M$��E��tb���=H���qV�8����l�p��:�*&R��^�G�|��n��KV���cKh�'���WD+����[c��)*�����.�=��+{���h�p��@�A�2X���Xb���)iUsR�ePq����;\��T�28=�����;{����8����9\�%��(�m����$;I��=1D��_����CBO~j������\�D^�<��;�N=i>����Q�S���� �;RSb�K���0R�H:����b��P2i:u�
p�?:��9�`zp�GZQ�Hb�x��Q���
A���+_���m�j$������@1a���Tg8���i������f^�sX����9���$�}+�����b���[m�N��h��Ub%I���gX�9�g�y-��2�r��3��q\�7b	B�Zx���Ubi��X���)`5��M4��M!
�,i3�I�);U ���������T �A��>��D����S�RS� �Jb\������!��W�}����e�N�%a�~���0H#�{��Y�DkNY�����D�\`�����@~��e���*h�%�-�W!����N�`���C
���5���u�����m�m��;Q������y�;���Z�$�u��cM�sE�p�S��������:�b*������$�@���������y�^B
h���*�D�y�	�����}��ZY-\t�[2��=���SR�������8�X�v����sR��R��v�cT��N;��Y[��k2)Xw6���CR������_�����
�����wVc�_�k���R}�D�'L�9���Q�U�(�\�����j���%!_��:ljF����)l����5(V�5�S�0jF�SE�j�
`b����T&j�^Gi{S��Z(OJ�������M��H@1���NX�|�i	�I8�Z��%VhdC��4#1����'��M`��
_,��E-���1I��+Am�a�b���i�P��JG����������"8���q$C�H@���)��qU]d�O��1;�����@L���7
{~^��I~���j���s���+��Do��Q�RVx��<NF����sr���GzSX6��
^��f�O���5��g����=�*��ZxZ��#��$���1d���Usz9==j�����
1��L�E��y{U�:&R6�u���8�u�W�#u�4Y(8��Y�c����k���5�si���z���r%�q8��@�z�wl���T�$t���OA�NiK��H�H���0}i�i��4�q������@��)\v�����*�����)�3�.a���c�XC���W4EL��Z 9��e=h�M��OZfW=jL��U��3���<l(��
��X��;����w4����qP#�Sg�C9�h���0�5���j������hO�lW�l�y�N�
�����L�MH�I����[�������4d�����MC!F�A�]q���9�GJ	m����������i�J��s��1�����b����h���P3����	�U&A����s���ru�>��1���{�y������#�2�>�Q���6�����[D�Dx��{��'��j1KI�����(���LA��P(�J3T��^{����;�=i��O<�1��@��z���g�QH`84��w�(�Z@V���[����|e��t�{,0N���++R��7�u�|�S����d��Zo���5��v��*���{��*�����T�`��E��jkq�=jl+�,MFz�g��S�U"F�����;�9�c�� ��LA���f�q�@��i���J�
1F)@������a�����Tl�������i`.x�g9i�p����t��P�-�r)�":��j��G�����$�`�A��8ZYIn��J��l�OzU�������9�5B��$�4��������y�K#�s�i�p����"�b�1��i�0��g �Q#�*����P�XX�9����a�+B�g��x���C�R1��i8������1J����X���v����{~u,�B�>��'\,D��v���������.;�jZ
�����Q��-��?���I��A���<�"���v*��Va�$�e�gck;��hv�9��(z����i[i���)|���E�<u�j��c�����aM?p�@
9���RX�E�j�D2�R��3�1\�,������P��%q�j���u�3�3>@ Q��ZP���:��=���}i��4��(�`p���4�H<��d���
��t�+��Y@S�d�F����������B�zT�B:�x4�{�����������i���EQ�!� ���&�/�I���U��1N[��
3S����P1�H�5^r��w�1�	~3�B�*��	���.F)�#1�E=n@�|�W@=�fY�[z�����iD
S���"����W4C*���`:�6?�S�~��yn�@�N��������>�0��@�$�d���$�T�M�a���jF�2�2���)�s�����}��=b�H��F{�j���7p�D��p:UFM�s�	�4��V�jV����6n�������N�MXsI����Q�	�������Q�?8���+>"����g8�A����)�����\���t��J�@3���J.T4�MX��,D�������$�F�E�N!=�/�8��)���i:9n)=j���*U�4�����Y
�gDqVRJ\E��T1�M��R���q���������6��F+�\u5�c�;H�����K��%��yd���
0�Ww{�Cuh2�$\�oC�\]������'$0�EvB���88����HM6���$"�K������;>�e�$�"�e-�"��[�0q���*t�wSC�8���[�7�S�$�&�L���c����Y(�b��
vq����Zx����-0=�S�g�`�������J`�)�����J��8{�S������R��<��{��6xVJ`���x��<������7b�L{�y��R3��I�X������:�IRrh�)�t��s'�L|68��������\�H��(��E\�5=���N�j�OJQ����8��A�C��'(�*���z�3�i�����/Z�(�W��Q�[zl���cy�=�r��K���8e�����r8�g2�����O��zV2�SX�4��J��4�.�8����,OZ��L�94���_4�����������)'��'�X/��d�E��������&�2g����M9_��R/Z��>�U�I�4�����rqLF��?4����50�T	�<�8�c�"���(<P��:
���{����N�52e���q@��9�2S��z�F�)��$���$&��d��q�z��wf��5�m&�z������~W��`�U$�i�+�Z��]�Y3DD�>y5#��$�k�1��c�s.����i\M���c9�qPyjMQ��2)�r��zn-��s���M�^sUr��a.r:R�v8��i�n��j6?�u4NY��"�����Z��S��Me�0+� ��b���#�R��C1Zb+����x������H���J&� !��T���>`�}8�/1SL&2x�E�#M>pr0���0�V����H��������#X�9�U2>n�
\�����9��41��������`
�M��
)�n�]�NpFi�����;`nqHm�?
zQ�j��6I��f���zP=��O��$Kl�H��b�Cw��VAW
	�U�Q�$�����6���J%��	��
����y�3���s�S��:Vt9sg�WRA�����L����<��7m�J�Q��njV�,�UyeQ�'�t���N3Q�\���`�N{d���$qX�zqI�nOOJ���+��������
R��j�����������Z��6�R��k\�����������i��8�9�a�~�P	�K{�
���5�MD�E�r����n`;�����h��gfpq���U���"�a���J�����5T�,NU�$z�[�cB�270�S2.�������������jd S	dPT��4��S�f����\q@�gj%���)A$f�_����FB
���/��H�V�s�����1�Gj��h�eu	�2+Jrqd�s#��&x����.�b"��`7���zw��j����m�@���V@
T�\�F9��d�1T�:�HX��$&�]�80��+DC��jJ\�g��f���rqJ*��)���t�LB���v�zR�)��)�SzS������R�)u/SM�=)��
-S�zxc�zSi���W�r)��a�Q`S�AP�i����TF�)/t��|�[�Mg#�>������r�`a��R)�=iKd�M+	������N�<��F�#�'4�dSH����4�ZJQIJ�LE�X�Y�Tg'�
2���E��h��#;��
'��jL�*�� d��b�cx0�9��D��{��q2���T&�i�%�z��2��F�d��8���T!��Wq��$�z��5(\��+;�8�4�m�����SA4P��� 
��CeR)��1�o4&s@�
J���/"�#�4����$��2���U�lI�MhJ��7�! R�9��M9:��UH�����R�*3O�*�K�L�Q`LT2������k&�fRpx�+�>�U�f'5�X�R�Y������j�����V��H)<������������+F��rf�pm�'������h�w
�����f���G=�0C-��#h�][)��H ��j�0l2�V���j����NpO+����`Tp��H�mXT9�R�FA����i���sa�����;M.a���`��ax�N?:V
N9��x�k���bZxm�Sq�ZP�w����{Rj68v=�y�h�\x@�Sn�A����M�a\s���,T�T���8B���B�	s��h	���6�d�PKh��n{��l��('�QvP�>�����I�T&91���)�6�s����"����k�_��SU����H�h�d���1���\�9`�ay��������b���z0��9V(9�iw��K���>b�zP�6_j�Y��Ry���(�L=�.�-�=
8����VsI��$�L��j�1{S[�[z����;p=�-]��J{J������{CV��������?��Xp���g��Gs���5�b���Gz0*����>�^��\}5yv�������77j�`
?����P�I�Kl�����>��S"�G�z�W��;?66��Bv8��1�T��Q�+sY�<�1@���X;X��:��;u*���>�,q�=i�$K���-L�����������@0Z��F�L�([U�p)��PM"�4b�*O/��*(�0)�H��QyC�_e��>:R��*`���'dqP�#�0-�*�ku ��Q�I��b1E���3S3UT���I1���aQK8 �A�	�L �����(���.$S�7q^w}d�7)-��{��G����*�:�)p�#�2k�7~S
���;Gz(5�s�z�zTt�4q4n�g&�X�d�)3E4&-�T�c����.9�$\����KLB��;��i�i���x��9y�g�I�qN�
�8���8����;�H���N�Kq������OP�Hn8T�h�;��1��
������v�{g�rO�;�(�zi4�4�pi��`%PO��h�@����F]�;TB���1<��t�JN�i]�4����.?Z��>m�9��������"e����;�l��*I.�ny�[�rj[����j��8�*�,M��i�I>���S�'i��A
�XAHiNi���R�ni�4����T��aM
[��'$���p)��E5a�NO?�(�f2y�F�G��m�
*e<z�hh��1����t����d��M�r����*��N��-���2��&�D�"@�����*�8���U�O1a)�N��{U0��#1T��C������Z�4��6|
���������������01X����V��W��L�V.
[F�PG�50����i��`�T��OZ�Y�j=���`l�������P���:��,z�H"b�
�� L��3�n��$`1�L����R�����yaO�������Jx�5}�a�A��������8��T�NjC�����g�P����������bR��gvM"���>��3
�u����n��4i�����0E6C�����&�����7dU!!�o�*HA�pj��'�%nv�U$�F�U�l�N3�)�����i���9�,V.�70��$d�2?*`
Ei��G"���� n���ft��[��7LS^�����is��#=`��
�7|�-�Nv���@>�?�AZ���
��t�6KX�d�+�R��V+�g���>������y����)A��f���q.��sXBy�?Z������?��}(�*�zFb���Vb�M�8�g��m4�$��
����`�iEt��A�k�+)����j9� �'��q-2vg���,��Q�8=*h��C�������f\i�1�@P���� �1�c�GqJ�v8�Z�S����4������<�X��.��+T�����lJ�oZ�\������{H"�	�P�I�0b�����R�s�V���f�iM;v*%a������XO#"��&���@�Z��5e�"�CR��
;�avRb�q��h�=��*�"���$�����[�<wv�\�!�R���n���$<w��������x�����j��&~\
�Ez)�Ga���QT �4��PR�@��P)�QJ:Rt4���)sH:����/zwJh4��LC�Zu"����LC��8SB�xQN�H�8
Z^�KHb�z��Z'pJ� w�#bllj���b
pb���3'����-T�'���u�����D�Z�c>�V��|A��0MB��F�c?J��&i��T	�E[����Df�EH>c��MJp<VF�7s��4����)�1Q�;�})��O�jc0}E4������h��(�9��J�1��������:�;�_knc�9���\md8u�D���l9
�:Sg�n��cmMJ�731���+�����W�T���qZ-Ie��6)�)S���n�����S*����*�f��D���/��,Y)�F~�Q"�52�3�U�	�DtF�5�9*�J3��GTJC)O5��^iU�)Dk��2�7��8���?*��/<UiS�b����A�J�
p��j������
-�TA23W��?j���U�CE]���2�)Xm4���2Y	������W�D�H���Tc�B�!����`������Q�sT";EZW&�f��`{S��TH@�oJ��3f�I<g�h��J��@Z����u��i&)�u!��m9��A��T���U$�c���8���#�F3�w4�4���#E��<�;S
���YzT��	S��7.Jb,���`QQ�Xu���0�� �(��e6x}j��A��l�i�#�z���%�����g8"��\����994���:��N�i�1����U��	��7�E8�]�f���p
���#�h���������M8����L�?ZS���qc��j�d9��l?��Qa�LNG&����#��aJ�\�!�*i�T��)#��&��
�8�/4�
v��#���)��������)>��E=$�N�5%�\TQ�����h61L	�R��)��6�z?PO56)2��c�MM*l2��O#�sz����p
�]���f^���h�?Zi�M\���T�p�v�*�����)?|P[�	I��i��I����Z�����1��=.L����L�B�)���P�b0����n��2M������)�Rs�Ue�H�1�I�mFe�L�2FQ�1�F~��������SdU<�f���N(��lb�[i��V�z��84s��29�U�S�!n�P��U��2����"����b�;���c�(MFe^�����Daic1y�}k��x��k�Fy���d����Zw������u��
�K��Fiz�S���N��������9�i�p�T�MsO�QN�N�@��:T���=�1��<6MH�v��<w�Z�*��sV�2G��k^��<OJ��vS�4��3�@oP1Q�q��8���}���A
����5m"�#5<{N3T���*�3��U����h����(�bucE���s����Z`���*��c��9���~t�q������i��{�)���-%8�zC/i�!��w��n~N��e���X�Z�. K��b��M��4�QFO���QN�[�|2�L���a���Le�v-WU���Sy;���B�$�h��j�[L`*��4��_M8I�^MKkd��w���%a�'����0��*�w7�H�EMh�l*�c�
3@���t	�������U�{S@��1H���b�P�~��fNje|(��=�3@�ZJ��cL4��+
���5!~*���@#��p	���@X�"Y��P�`�������K����E)��V�x���q�0jd RcD��MZ��� �S���-�-�D
=jYE�PqR����U�8�EH��m���*OzO(��x�I��Le=EN%��`���=h����\��Z�LCY�h�M�������1������������&�#tk�E�s_Fx�������y�6�sH�iF3�U�Ue��f��F��F$����k���L�=*=��i7�����r$�����b�=�����X�<6G9��Q`$�
���o��9�����!��@	��m&=�Z]���8qHhf��u�����B�)�LY�1O
���!\z����hW�2U@���M���5 8�c�=�n)��,c�)sR��b�dR(l0������d8��e�Z�4Hn�
W���Q�'+RC@s�R3*�|�&1�EcH��S�k���RB��5�yx�A��R��0/p5���!W�Ta�����I
M�	Xz7j�H+�Z�8���zT($���*4?5K�4��isM`;���!����i�����Q�����T2l=j&u������HY~z�����d������eR��H�f>
@�FB#�g�����%��YDWA�����dm��w&��]���q�Z����I��
O4
\R���	�\Q�\SB�R��D��(�h�(�s@�US����i��P��-&iz��)���R�hFi�������	���PM��9<���R�r��j�� *�)���bMg�"�;g�f����4%`pp;U��Q�s�Z����>I�jU�}��=�A�F�7��' �X�q#�4��QU���4��G^���
8�@P�/�Zm8��-OmyT���"���$�����Gs�����+X��q�w���>eP������|�7SrfA�U)����W��w�2��T���Q�g�j���z�m��8�Je;�en��VPk&'5n'����5@����?����sO�����S0����$���4�C�C0�5#G�Q���" �ASS�H�^��W �&�i0H(��:�L1��H]I�i���;	@*��*c ���'=*���	��J�njw��!�5�crA"�H�N*Fl����E�*��)���e��E�j��J����z�AhjEZUL�T���CjU�(��)p� ���N
�@<��K�)��j���Q`,m��</�W4��q85!�q�4�hOS6D�A;O�U�F<���ET,A�o),���q�SjNE1ZX����qN\��G�=
;rz����M�"`})J������=A��	�Nip�c�i�����j��R@
�pn)v��i��4�K�!�������m.�J1N5#=�������RP���o�
R�J��K�������U-���!����$m�*��9���e"�GN):
L��R1��j����kmG'������rdr*��m�kf��9'&�.�1�2A<��X�[G�2�Eq����Rr������O+���sQ����	#�q��O�#|s�O���#d:�Q)5�j9�D/����H�'#�4XM��l1;x��6���Vc��i$c=j�!��6I&���Uxq1=i1�re%���<����1DG�5V�h�O����{z������|���NkB�P���Y��i�#���E{��+Td���Z(=h�ZR���U!	���);R�V�a��qK���@i�4�4�)�Xb� ��U!4�=���:���)@8������;��:��T��3N�<})1�����O�4R�T���E/����a��/4����N�(�������N(s�6��Hc�FzU�<��c5��[�����EL�*;�-�*���/��}*����Z�`{�9�#��>�@��]�*��R=�M�8���
H���S,=8�!"�Q�zg��p*x�44b���S���L���@�g��7�j`,;Sk#��3���F�����`H	��dq��k��3�)R��5\��tZ$rj��`T-($�|f��7��X��S,���4�qU	>��I��9��d����X�������G";%s��T.1N.@����v5��
)NsJ
d�*�`Ue$T����F����QQ(�5*�CF��
�������U��?�ZC���4PILT���:�y2��}jl |��@��3HS�5���\��(��Tf�!��)�<�Q6s��1!�O4��i�3����"B�L/Z��92�9�i7�7f�sWb.I��uF3GSE���	���
p u�C��)�O�4p<�1���R)���8)�!���u����
3AB�x��(��)��v������
\P11I�i��OJ��N�Y��qR�[��W���@
)�(�5�E�"��$���t�OCS����aZ(gd�u�Z�OP{�d�S�������-(���U#��m$iXh6��Kb����/���d��5a
U�����=jX�a9�T�8���P�qQH�����&�C2.X��sYO*I���9�����������;"�����1Yw�R��������`u����k
k����W����*C-}�������N��
�����2:c
����d��) 
OJ~��qJ�(-�V�M�0N�*��9VB��1M14V)�MN�f��2F0������46		���zt^Ki�N�Z>^�*9s���SG#�[<C�a�c�Va�x�]ZFy�d��qYx��{�7��)�p3�F8�Q���^=(
I�.��H��S��JZ%��.)qN�5h� ZpZNi��R%�1K�R�4��D1;c�)�z��)��zSH��)iq��:�R�E )FiZQH�R���!����8�D	�~u*���8������q���E��Vt��EV>���y������1�%}h��E-��HGzp��e�OZM�h`���?��~+)�YFA��]�+94�qM3�R*AUT��U��lmrIP��1�N/���Fj����VT��Ui�b������g]N)�nO4����SC��!u�j#)��2���H%�Y�BE1�#�W-��jA�y�e�+�=�1�en9�;����R�f�X�'��K�bj�7zi9�[(#Tc����izLRV��\�)��(�������(�aI�){PMh4���hi���i@4�$Q�+Z��)yq�zJ�����	��[V�r��e;���Z���������fN���NV3�5����U]
S�6>�GAR��`�X������OP�*����7�������x�����p���%������T�!{T���WbF*�u|���2�����7`sV������;s�sN�X�P�iVN��>D.vO��i����s�R+���K�|���\b�:�R����M(�@�@�(&� �N��b�������c��=y��
�G���B����H�S�[$J�HU��4�0Lb��9���sJh���g�I5�i��q����&���s����t����g7{"����d��I�Z59�z�6��#�%��b�!;s�������<�E��RN;b��t���	�z�Q$������;�SRbi�v�Vu�O0����.�qY��Y�z����V&I��"�s���Zf����3/h�����v�4�9�-�L�z����2�\b��9��n���>T���V�WWQ
�'��7`B�N3G�L=�7��:�Dw�7�x�0����<T�h�RGJ/%��}*E�Ek�U�g<}kV��`�+�Y:q]M����yC��?J�������/��r�[�p=k9@�K���4�����2�������f�H5�{)bW�z��3���������9��A��Vk9����'�U��GZ.M�"����Z��*'B��]�`q�Z���1����H:(�TaO���j&���Z��A��R����J���\�S��6MF	9F=����0{��E���a��Z��I�NH���#4g�u��Y�j���qM����+?NH9��S�[��\d�U;�W�%F1]T�c��nf��U�),hJ��n�aa��mK���h�-m4�ySqZ"���4���U���(�9�)�H����
1����R$){P��A�S�4���L��Ni��N4���zS�@niq�H)GZ@�GqM�T��$*Z��Q�K��h�����1�*����r���1�z�{��&�����zZLP)�Q�)���(���hZS��X�3J��6N+KJ�!��e"��X�������������T�'�P���Z��W9��5D[�S��>��� ��UP�x���A�<����<f�F�����"�����@�iw@e�M 4*W�L�H�c�R%� �QL���+I�B�1ZF�HB�'�e�R�8�q[�s������ih�V�����:�T �	�����CIN�#q@
�M.�G~��0��B�5*�K��������c��$�`sS)$is��4��J�qc��+CO���Ts������{W��R�������� ���u��b�/^����~��z
������6.�����5c���|CG~M�q�`��4=J������n���w�����fNhx�<�>�����E�.����&��_�>N?��Y���_��c�U� P	�/��X|����e�k^���lJ�>;�je�����<�b-���S��|��|���m��)�����-6�
~U����W�����>?�4 ��>���.�m�����f����fS��?J�����g�������'�]���=�������'%/e�-W��R	���O���.�-�ZLJ���V�����[i��Z))lC����)v����QR)�H!� ��j����(���a� T1�j�'����)�,��(���������!�����)���|�Fwv�[x��[�=*��Q���-��[��qO�EC(�w�N*C0���J�*c4��1�I�z��f�j��EE95�up� s�hL��=�������j��
mc$W>�+pj&<��&���4��'SN�q��T q��h����Y��REm[x}��	�S)�rf4v��p}+R�F��Kd���-�`��F+��	V��Dh���D������zM�@c���l���`+6��+��l���'����SSd��T��"����qP6����_&��vEH���iYr9�S�S1��,��uv!�^��.G
��R���8�-$�����z������v�����z��n�z�#�S?-/!1� ��@?0\�K,�����M�
P�`yR�f���g���@1IQ��$�i!�)�N���B��iX�8���
�9�h����QS��8�7�VT``P�$Fd1��3Q�n%��k}��9�Ha��I��5yX��'�����+����O$�� J�4���[��eR9�W P�{��`+J+Ft�z��2Q)��x&�I'H�P0>����-�Q���)=(�@��L��0;���;��2ch�.)qV����J:��
�D�iqK����.&1F)z���8���@�QK@��J���w��R��1�})qO��L��t�fi�F�*Ft��W�(����OY\�4m� �S��=1���b�PqK�\S�^i\\g��D�������5���p����U�>\��}k;�8�j��21+�Y�h�����*Q�'����S������6^���oA����M�pr��R%�t�:�Gz�i��W(��94��T��:N����I���7��*�����L
��5+[�y�D���F+XX�w[�N����F,Jm;4qV��F)h� �%-n�ZZ1�`%!^��i�R�����r:��1�Va�sR�ZD�e���Q�+���@��Xz|2�]5��9�y�.B�(�=�F)#lP�"���#*��L�:����]N���V�����������1��s���Y]����O�P���N��D[o��[�<,;��������Ly�Ih�F��4��6���3��/�}�Z5���*A�.9�C�����OK���U��!�����5#H00j�c��S�E��&��J�8�:�P��FMHz�4u95���]�"`A%����A��$e�qd�*[�@��b�0{�n+�5�[��,�.��$c���H�)n�\u�v���9*Sq����xD��V���ZE!��j�GUu��T�"�N;����N*�-R�6�e^sR4�����5>�FsP�E����d�&�z�n�+|�j���i��W�`�#3/�5�,���������n�ETIe&'9����VX:T,������*-��F4��Y
�U�>�.�f������8Q[�p�k9�����2��a(�(�����0{T0��U�m������-"(�����<�s�T�J�<R,@ME��Q��Z�G!���wD��fEV7|u���� ��\�����*��$-��d�&V��4�E�����	Ia�R#���{
�8�s��3�*�;
!��B���U�$V��;�z��d �itM���c��d�0��f���3z�����xf����2��5��He�Kt���B8b�WE
*��(b����]���a��������e�����j�I�r*%P$���S�e'T��q����v��+���nMe_\v�����E[��q�v�d��sOl�n���C��UK�����d
�YQFwU��x�{�d[b9�B�W�Py�������o91�v��?��aa�w���$�v�8!89��+x�	!���������
Z1�^�h���AB��<wz1�.;S��P(��(m�wr)@��K�RN�^��H��F(�Hb��P{QZR^���0�ex���zT����vz�`R���F)o4c���� mO�P�jhI9���Q,D����O�DRI(j�,Mh����r5��mt��
�����p���[wE���-��l{������K?���[
��\V+��R�#4�u�j�*q��0�Jo�Z�k��m���A���j���d�q�V��e#5d�#{S>���*wB��\g�y\hF1�y�9�u�����CI�0�;��px5��t+��W�S�M&0kDf���R�1L�(�i�c�m.4�)B��rjUZj�5"�5,��"5z�y��GZ6�20*�F���	��
+"�q���C�X��%�'5&�*�� �Y4Zd�Q�g$S��h/�P���Z^�f�h��>k�/�J�\��,�[5�U��_�fO����Y�q%�Z���F��(��5L�����V{jR�!��L7�9;�ZF�3�Th}�N�x>����!���VqM{(�,��t��`A�\ANN�����m3��'�5���Nq�Q�`���s��:���������FQ.#)�A��`r�Q x�j��p7qXK��z�u39<v:��/���\'���#�{�;��6����7.+��D�mM��� ��]�WG(E(�"��O��rPjUS�Q��T��b%��T�\S��%"��8��������R$���5��u���9%�C�*YE�7za���P1�����z���Mc�@+���{pT��N ����@UFR�}+J�	=��0<�i9"����|�=i9��H7g����1Wf��V�`
�p;U�:�,�gLt%Y�i|��zT,Z������R����7�*�F*�]H���u�h��L�?z�8t�U�B78�V�a����%�_��u�JcJ��&�^�	�$t�������@�u��N�}L��:�L�=)�}��.���F���3���"U*�;����S�`�(�^�p��|��UFk9an��0�)2�	��^v��8�OZ�H#'�����P��6��iC��*�����F5��Q�X��+`"��Nh~c�~4\*y���v����Z9���\V#0�z���a�T����2g��5#��
��'���;`R�+��1O�Pm�������#p
E�l�A�H�*���	a��J��L��I�33��5}�+�=;�5��h�K$Jb�~5P��S��F���T���D�Dq�=���4�F</ u����S�=Hv�<��T�l�����ke#7�OjM��X`A���5��&�v�1Rnt����)0i���j���R��b��8�������A�;���;�!qJ=i)z`8R�@ih�\g�8sHb�NsK�\s�����I�91����#tS�p(��[��KS�������[
�G�QH��\Q�PX�L7=
V��+2H==j$i�"������,H>�Ybi9�Va�t!��8�,���W������YH@1�f.r��E�_&���4o��r)!�#�R�������9�$�����%=���{S����/y���n)��52��V0��I�&n�j����`v�RhVFi����b��_����i|�=�EQ����a����x�z�F`C�sL�$d��=�ET�T�qc�p9�LG(����o�3[�����S��T�s�)�LWE.�y�	�����qZ*��7I��OQR-\Xq��O#=��L\����X�T�n��*�p69Rr)D�5��
�z�k9*�hs��&�H�ly�`
������*h�i`3�6N��Sb�9�#�?Y���o���f���Z[K��A�j�����T���Z��z�N�Z�k�X��������7�z_���CZ�Es������ivf�[W.������U��or ��/5/��qR$Ts����H_���]���g�+���a�'���2\�#���+/8���)�$�H�3��&���1�����<RL�8589����jeq�U4$$�:��k\���y�`�0s��g#mR�#��U&y����H������-n���O5������#�Q�"���)�!���4\�*E54�4�E�j�5@�*��Q.��@���3����y���R�S�x�E8�G�����S�
����w�S�5�)�a5s([���H��P����CvSJRl#T�T�8@��U���4D/>���r�k���d���FsU6h[��#������>j�drG�}���uZ�B��N�y�`�M�p
s���T��
Xml���kse$��%��l�"����4�U�Q�l��z
����������PMF���(c��/�q�j�������
\�z�2�H��*�#��J�p�g
jFR�G�����g�T�.��W�5����E1 ��`��NR�#h�s�5BXn�S2-L!W��e���<c5Y��U��dB:�U�X��LMn"�M6H#���NY�6���w&�f7N��@a��[��*���:s��/R�*]HDw=+8��z}������o5�U�X�;�r���${�b�
�J�A9����O�_cS����!����9����������bz�MR��#?ZB�8�\P���=i��O,v`��Q��]4��1�4����]q9�%&iq�����;V�Z0qJh� 
:_�����R�L���Q��P<t��<)���R�1�R��)p��c"�(f���#C[����J+JIr�-�v\=*F+�n���+��z�d4
Zr�'���"bp;���1R�`���K�,3���a�����1����b��d��2��Q-��zT�l�:w�H\�����,W%����b����nN*~}*��,g�'=�Z�����8S�n�0=�1��E��>�T���0�R�#�1R0{T����I@��l��	�6��c��i@=��8n)��
��QLD�O:�H1S��Bb��J]��sL�8���x�SJU����+
@�`�n
1�����C8=EP��q����������f��j�jG5zEM]8�Q-Gf,T�����E,d��U�Q�c`v�����^*���EpZ>����f���z&�k���QN��+�k���N��N��fsT��r�Q�U��c�*���E������#�U�)�X�i�b���r.jW\�
]�m�
p{�����T���{��������jeO��>S�CsQ���5s	�:���XMQ��d�V�J�:u�@��3]+)�X�.� ���G=sIP����f����ez���nz�R����r�M��5J�\��5�8�T����59��<[O&��`���.�p'���=I��lg&@�j2�S�&�*I� 3�QNU�m�H�"�hCR*�E"DZ��Q':RZ$U���V��Z���)(�&hsNRiZQH`�OR�����F�Y�03����5b9HP1I�����vv�p��$�#�cj��1X�4l3���/�g]��d����j�B�����S����C�J�b�<���NqB0'R��9��
�7�I������K� _���<�Q��	�:R����Jx9�#�������Y�\�X�uV����2����3�<P���"�[=5�^��4��Hd����-�y<R�v�qF�����b#2y��"ni����Z�`b������$�J�#9<���T�sI�'�jF2�n�;T�tjHi�008��F]�c���<�`y����Y����3*�'5J������$��*�JL�1U���Z� ��b���
F`������(F�c����~����s��S5��������G��V7.8\@���z*�g�=��hn��d���i��Z	9�9��\�c�7�I��o�u���C{Rf�i0q���;Q����Z n3N�JM�����sH=iG4S����w���(���v�c�8Si�����)������,cA����\�D#���J�1zQR@����n�9���E
�����c���F����=U�-�=
$��dT��Q��{9������~{px����99'�P
�	 T�	nwf���7<�*D�=i�T�o�
M����+�U��mq����*��03�T3D]RC6MiG3`dVr20j���(9���/��O$m���?s�U�T~i1�0��f�s�JI��=1���
��T��"���zSP�S�����H��YE�Z�H�*�(q�H�P����OZb$T5(\SC�Q�S Zv�DqR��Bd[qK�����mY$[iqR��)�b+2�n���'�>)���jw��S*z����0+$~�b4�8�D)�0(�
�T�5C�
z�He�8Hd������%��b������s�]��SX��$������W �8B����Fw�(j2Oz��zBx����0}��>a�pOZBv���JJPA���4��E�*E"�ERjtn9��Rn�)�Lw�|��5���*]��.%\��f��/�i}��4�B�J���/\��l�������E!oCJ=���HSGZ�q����A�O�1�N�)�1�O�xN*lZ#Ri��i�=(�Hb��p�sOH�I�v8��B�E0�R��Q��A�H�P�)�������+r)��jE{���Z�x���0����y�X�
w�s�R����c�O������ 9���^[dP��8�8�������U���#D��OQSq��Q�N2*��*-���a����&2f`��1Ka��I�)���R��-��}�=*"�����9���sH`�$�*���B�*w�
0&�	3��������O('^i�#������P����;
������9������y�����qP1u9��L�����.�r��W�����F�H���i���(8����($��:����Ub�<��&;�9���$t��1b��V�1�c�p+FI��s�W
<�=��(RdT�8��S�lV@H8nr�]�2DO ���v	�5mA
GZ��3��Z�|u��I��]
�sQ�^���q�7"������v��8��L1�<��Y,����[�L�QD;�M4��LM0�T$s�$x��q�%tE��CqF9�KIZ#6�������$)h�S�J�`-.i;�J@(����)���Op��Z�u(�SR�x����T2�c�.��V���EU����[p����V<�:~f����k��V��;tU�r{��8�F-���K�P���
��JbPx8�4�9���7��AD�H���2/APd.'�����&�H�_�����xL�pzu��q�;��%���Z@M-���������Q����f��@������.4����wjA������J�����������qV�)U�3E���V�Zr�}j��S	�B/}���K���C��B4�~�������T�'�i����D���t��JhF�K��2���I*e~�B4D��R+�$z�dHE�jR��O8
jb.)�j�s��Y)�x\T��P����g#��C���l
U|��H	)����I�8H����V������6H5�)�z
����n}j~��F
�$��>:���H_�Wasd�C�P���M�o��|�����UD��	=h�9l=8I�R�rqJe����]�;f�i��j�����VWl����h��5<w&�U��X���##���jf�u5jP�E<b�a�����|����P���
�B1M����'�3�ZV�$4�|�`���B���KCL���IU��=��c�����bJ�=QY9����h�\S��QZ�@z�Rd�ZQ%Fc�4��jJ'�Ma�Z��:��H	��cJ���2��'4�'>�Fja���cE�h#5�*Cq�����hcVM�`��W��c���P�]]{P����8�@��F!��_�;
R�`���X����6��A���Q��C,�ME"�a��$�qR�B_��
��Vs�qS�.���P��h��5��$�����Fq�8'�6$S���#�@�;FMs���pj��@=i\v-	�SL�q�U3�Ms��{�"��X����k%*T�^9�jYH��.*��������r8&���g, S����o��g����.����anXD���"uj�8�wMH�z���aG9���-�{��Jd/�>��
���c'�"rphf�Q�����2Ib�	����P�_J�����J[r�����������})�U�P�.~c�xR� P�7q�d5,sy��UY��i'kQ���Ur�z����MRBly�aQ�J��Hs���Ih0�M"�i�s]q9d����R)��j�Xb��i(�L���P8����@��<������K���)��=)��H,ZH�J���h�����5��07c1ZV�2?x�G#���=�����px�"�8�CO�d�u��~u���h���A��l���4V�������s]��F{b�����c�z�/Bq����c�2�W%
sF�=(�i��t�w4V#0�S�3�'�5cw���e�Ve ��)��:���4[��KCLY:�u�:U�'
v����;�-���������R�FP��&4t����|T�F�c�4�Kn�v����8����~y�Ja$`��]����
�8�8�F*�bJ���jpQO����N�X��$E�L���"��P-L���J��2�L�*��qT"��� #�Y�#H'e5��!��i)�nz�y�f�iD���2�D��qq�����R$���|����sVcl�B\
���+�������\�9�K8�\R���jtn�P�y�i�^�>�X

�Tr0�V�Ny�I*��)$7\�J��p�n&�|�'�5��p�R������C��TO���BN:U0�y�����_���T>fE7w4�I�'�0}i�N�	|
L�U�.b����y��Pn��:R�bs'8�A���Q�>bPJ��H������&���q9�#lw��8u�+
H�����&��U�|�b���b��iD����Z�ir�1)~��4�zSsI�{�q1"�3�8�=
0G���]�g<��;��)�������$�����!1����{�:�n�J��K������Q��~M8j\UM���J<��*��T�������Y�J6��FA�����jb�FqQ>j]��SDu5##S�Z��;�b�6*YH������.�qSFA40�Y��<��,�)�[������"�/�	�c1�7Gl�����5~�����Q�������G=Ab2�j�����G���&�;��h�(FoQ�T��N��.�NqI�|��v�HK�T���#����X�Kg��.����)U����0B0}���r�H��D
�0*�Q,�s�V���l�+5��
&4?���������2*���zv��<P$���r����=�wB� �!� �>���j�
W&�I��^�i��N�Cc�V�R884AT�9=�I��~T�vr*�������54����Np1���%wW�x�8��6Q���;9�Br
�
z�ZG�Ppx�H@�>%���,Z�e}��f���1�\Sa�#y�sV���wz�Qf3�`���dELU�m�@$��H����XW,���!��=7R���f�E��H��1�dSY��1���fm�@T������|�qFx�l��d���9��K�k�'<��Rb��!�Z��&ii1�V�`�(�K���P���i�g�!�4�\g4b�h�<����R��!�S��[�l�H�J
KW);�l*:��H��vKqY����!s����4h�3ljh�O0��p�eb'R�*�4��r�G�6v��(-��!s�aW!�C�'>����+	L��{��Z=��*P�W8�%����Bv��E�+DJUA����=�� �JGc�C)�+���#-��)v�{S9Fa�P� gR��[���~��Q$��M����F���tB�(c\����&���,����r:
��sDM�*�8��R�6:��b��N2sR�||��V81z��(�6�m��~��s�ZX����S*���GJ��8�bDMX�,��E<�\}� ��5d ���M0 1b�d9�M�a5i��M��@"��:S6��23�*���3R��@�f��G�H�b�f�I�be��L���3�NY�9T4��})�x�����s�Q���T��Y�W�I�ZtZ�wn�V����%(	�j��'��^]A��F5i;�?N��$��~9"�Q���M��5J�q$���P+L<���[��{���z��8jmf��s4�����X.8R����Z���M(�H1�jq�)X.�����K�E�qh��*Z����4R��JV*���=)n�sRRb�i��4�����&�N�c�f�\QR��E��`/�����R��J��=�_��������	�Fm����4��rj��K��j�2���<����Q�qFsR�h�[7*x���~(`
f�Ze���5Id�VN3YI�6���2q�So���u�(�-��$w��BT�}kkug]F<���Z��Q����d8�Q�M��0T�`u��j]�G5��75<*G5\sSD�d_CI���qJ\����n�X3c���;��`����.����lc��7{�a�XW$�l�����\g��_�����;��\��n��Tf3����y���^f��J,%a�iPp$���e����X(2c��3@a���Y;���`c��*�����Nj�FT���E���	�6�F��(Q��Z.�#'<
��O6Vl�Oz�&r ��8e84�b
$�dt�#��2�@��'����
W��	Kf��lj���*�����,hV,G�5]�q��W6/n���Bch��'���H�)'4��95`�|����`�RWu���Bp+H�!'��H�RpzS
���&LBT���1JW�f��L$4����4��2a�(�A�D1�qER$1IKI�����&{R��)�8o�K� R�sN��&y�9�M7�K�P(���"OQ
rj{an�20GNj�9*x��Sn<������$���1��8Q���� U�G������r*J�&6��U��k��;����1Q��#���hFR84��7�~���9&��H���s�C�9�T���rj�i�v��B�&�S�z�M�m+'��K�J�Z��� ��"��<�Ed������u<�Q���%���{R�H��v���8>����3��w�U��_j�|6��~R*�>��v3���S0~�m%�c��p��Q�c"�L�m��Oj���R���R%D��qlS)�����7y4�J��� �4�8���*6�2����1�'594��]1G<������i1Z�c&!4���Rb�"�)���y�H���������H��I'�Bx�t�8=j�lL�t�����&("����4���Hs�h{Rb��f���K�Q�ir1��	�>�Ph��qI�R��%K�{���{��sH�L�t�y��$���jB��4�v�!��
��vjX�K�1�E&�1Gj\T�J\PiF*X(�.i):R���T2��b�hn�K��f�-;��k�iq�J2
C5Ha�c�������OzF�3R�-$W1�����O=)��Qn �5r���8c�1��~*��P��j�������,:���Q�P<��l�'�f���rzT%�8�M�����Y����
�$����:���jv �4�D���3��E�W��qP�6@�N�*U�,)�����Gj�]F4�O�`�@�>����.=j�M��5Vy7���5p�����aR�2�5UY�qZ0��=i�QJX�a�2E�����@<�sJ���B��z��h��V��+�K��=+6�v��{t�%��)�$\L�+r�U_9��^����9��SfU���@Y�$1X������3Q��sZEhg'�+�6�����U�.V�l�
�UL�S���Cl��f5a��
26W���K��"����	6�'��WS�QN`�T���w�NI��y^�F���I�3��Tc�O��� =(0�R3l�FzTe��M��`�V�!���IJzSMo		��>�dV�����!����.)��N�U!�����5BK��);���F8��/jO�(�*O��8�@��o��n���b	��Qq��W��(-�(�kle)+�����	�UCk+��;������^�=�k�b�9������>��h�2�������0�j�J
���v��}���:�Q�l\6����$qM�S���6���]��a���i���85b(���VR�>����v0�������`
�[���9A�n��+X������*�mrcp~*d��:��T�j9/��*��H:4\�����rF�I[��\aq�=�
B�$�
��g"TlVcUF������\B1���#��N*U��BqHf����j���z��:��;WTf>q�Q�zv3�4����S��1�n���6s��)�! �a�DNy=i��<��i�Fa�#�q�����)��JG4V�c{Rz���ch�7�N�jJd���M��^�h�!1K�PzP(���wjLS���sAP �I�iH8��h������1�hLf�R����4S��"�*�S���5F=i����	�LsR�����a��o4�)TT��)i�� 6�`R��1H���qEH���
_��C@�m��Q�C4�f�
p�P@�f�Cz^��
x5
�$FW�r��8z��������RDrY��I��������5I�g9cS�����"����90y�����hN��3U^l�R���S���l��z��G���A��5�{%����$�#*���J��w<s�NVf>�������qT�$��!�d�����Uyn�U���Q#f%�������*���U�5������i���#�dr1T.�������CU[�����-=��~c��	��2������!�M[D�����x�U
HM%RV'YIP��z��
?����)��23��V���9��EK�Er�I#u!�H��K���3S�
��B�H�H?J�u?��p�	j&��rsI�E9�h��:��&��8���0��v&��h�p}i�<�U��($��sO
��
W������jSn;n3���a<����_%����$R:�N!���Vu��!4�1��$f�-���f=*@1KV��_i�<�jB	���!���IK�N��Ld'z1�G���Z�&&8��i	�5h�.{�
74��C��'j\��z3I���Q��- w�C��L�� /oZ��g4�c�g#��M��E%+�qE��C)�B�|�����<�j#����2=k�h��e�Vl���V!pMU���AJsHS�������
�UY����R��j"��Q�;��$_,����H�x8����'&��-�H�x�29\u�����E$oI�����&����%�m|��BMM3y�v�aU��7f�|���=N(�e2K�����
I���s�`�?�u�A��I������a
�`a����/*B��l��:U���>�
81I\���S,Y<t�!=M����"��1H�6�5$X5i8�J�X��LN>�(:�����E�����B)�kP``xS�,��t-Fo����j�������3�\�zi���qL!����;��C���<���[��ci
����V�c3L=i��m�`�\R��4U�X��������E2YJZq�'���q@S����^(����`����q�F9���&)�����b���b��})��	����=W8=�"��z��k�g�S�N*�ZK�&f�=Z����Y0��nH����i���R�m#�1�WeK�t�m���������I!=
Dj��r�n3K�Q����#h��\R`7��c����)qK���N��T���)�R��Z�i'�K�"�S�1Y3�(aS� T���K,�~:u�39����&��)H�������k��4�g�E��!b���X�m�^�5���Tw�x�I�����������G"���vu��3�����q4�����=������
n3&0MU����N*�n�	o^��A����xd*�<{�$�Z��&����"�4�+��o�5��
����nr�z����Bg+�++F��
D�
�q��
oq�x�W������*4ej��>��G�Zih&L���U��������XZ�i�G�6
&�[�m��c�9=M=�jX��c>�����e�-Y��{�cU���I��������!rO��E>{����N�j��-�z����YXc�5Y{��M1
�.ZG(q�W�����U�9n���n9���U�(�7z�$ET�:T����
G��	.6�)���G(���9��;/zle�^�>�z�h��f{R;�Jb��2V�&Cw1��������sH�U�6.�y���E.A�!��QI[D�A�����FL1�1E!�D0����H@}��'jZ�/zN��\���(����4�)E&y�R�2(���8.h�M�a1��v��Ek��KS8�i
h%��<�������L�y���:g4���OJ�(�b�if���I5b+M�MG'��GJ�o��q��f6�����6Rq���g`��iR!�I66���N@8�T
n�H ��Z�9�\D�fw'��9R�D��Qc�b�y��1R(4
:t�gl������c�2A+�����Agp�"��cY�sM�uvg�=�$���'�t�����YX�R_�N����W5,C-�D���p�<S������	T��L��
"�q��6*�y�i�s@���AN��q�����I�P`��	H���#���VRt5;I�=W�3��M-�z������i����9$��!S�����L������5)�n�U&f����HA������qZ"F@��������DG�4�T����2X�i;��6("�
���F)���;��)��cy�(�~(�.(���b��*@CH;����F94*����W5<qV# 78����r���0~�]����,�[/�����V7����9��i2h�!�Q���!����5#3F�R��)�sR���q��dT�x�mKcHf8��!�A���n�O�R�-E����b��������P*Y���J�$`�3M*��Y6h�$RG�Fi�Ae|�sQ;����ZaE��qR��"��?Z�,sZ2��'����bA����erc������n��i����_�(Q�L�)$C��"�6��qn�#852.�jB�G&����-�RFA=}+)�Bm�Ns���#�?�qh��:(8
m
Q��#b1M�n��,gr�����2b��d�J���w�;�j�������W=Fo�YJ��#����=3VV#<U{� ��Je4W� Dr9�Ze�^�f���Cg��6��5V�����p�8�F�m���*�rh�zU����p����)Mh�IL��5�:lv7�]+:��]���n1�<���d�Ri)OZJ��Pi��*������(Kwq�����pz��6�3�@��L�[;��S�U����*�*����Z��������V��1H�������R��/���(���7*��n�Gi��I�1����l�k`�c1�j6��*�%��6qN�r���99��}�x�&KhaB�c����HMl���^)�!5�[D�BQ�(�5�2a�)1EZ%��))j�!�(�����u��J^��K�sI��8�����Pi�i�$�sRK
� 0?CUD��o���p��j,�Zj��4SU��E\oc9n5�f�H�;�I��!s�������g��f����	#�oBf��������U���{��2�&9��`(��q�T�i	�R�I�d}�c�J�ep�n��o)~)����@�21l������������PP�<�d;r3�Rq����H������9f9<�Z��f)���qIHh�X����@����S�Z�cyrzz��Zg][Ss1�:�Bh��>��,�A���X7� ����k��+>��:V�L�zgU`�G#��N�����:��l�u���������jerEG�s�O@�����
6<f��1E�������q�*�\���Rbh�`r3�T~C���Lx�PkXM�%����vD8&�1�3�]T�r��S
�i��*{�Bg;Dep)�
�
{����"84`�����ZfrDd��`S���TE���E<�2)��H�7���^�b�LR����1��i���78����b��H��!��(�P1�i������J\��CC�c�p�M�S�YhZS��6�5���(�R�jYh�
~)�RP�Cv�J.riq�)2��p4�8%C)!�z�Z49��i�=+6�j�,5��rH��j�lE*����n%�Z�A����&���#�%=hi��Y�������M=�gx�H�l����(������ �*�&�I�,&��*q��y����+��2@4��U�z
��S@
d����~&@���<���p�rMe\6�j�*���j���G�#��L����Z�\nQU��SQ����������*����^�F��5�+j��!wB��s\F��\���~�z;("��M*��-�!�C�p��2���9� C#���j[�'����L�ED������9������c�7+���y%w
��,��2�A�3��=��*� ��sJ1l�6j���S��S�Hg����U
�J�v�H$�j,��W&��3+�t�������rz��$O>R�y�!F����3H�SHxVv.�9�cL��&�c$���U��HSr�Y��YDr:���V�Rc���c�(V"�m�� ����Wbn
�5f7xF�u��S�F\���.YNT���G<��&a��R�~9��R�+R�N���Vx�����z���1R�Re���P��0��#,3K�~���� U|����.;�)H:�ZF����A�*j[h�)����@X�T�R`�*�����Z��ZE��U/s�7g��%�����SFm2�sOdQ������ZJ�0���&j�,3N�4�SV��QGzb���(�R���S�6�R���i���vU�b%����PA��O=i��8&��3d\1��W]���A���7��i�=
Z�Mh�m�d��!����p
\dVB������p:w�5��6��rx=�e�U�8�jlR��b����O���
q1`��;���LBh�K*���I���B��WlEQjkw(�z��uX�I��<���m>D�d��H��������Y�So�g� G���]G�y�]h�wE��:0��5:�����V$��$��1V�9MTpj����h���}������!��cJ������J�	�� T�)��V�-���L�Gl����<�������d�i���bPp
k �]1��iSeb2�����W�i^+u$c(�����X+�F�qZ&d�
!���#��"�Dv��8�)�HUbG�@A
��M4)A�H�$��4�sHW��DX))�������(��A��G4����j@G��4����4n9�O^���H�,h�m�.�J7R)4�b�z������������J�Z�8- ��e!qK�;S�P�i� ���T6k8c��c��<!�h� ;�&���EH(
�b�/A�O,���;�
������4��� EFb�J��V�A�4M1���1|�Mv1�hV�L��T����m�1�~|��d�?v��|�y������O+�i�H��/N���eTmi��C�`�sWL�3pq��Q�k��O��ES��c���z��Y���������(^k�!��4���TI-��{���?S��G<��7��������p�0���&	��6[1��l,����0-��z����Ckr��^�B��H�
g��V��8]�������Pk/^)��,�����5���"�5���KD�olV{������+[y�i���<�>�r�L B�����VU�<��Qh��������Z{#����Y�DT��U$���$����Z����S��
v��+����s�Nv�8����S��J��n<�3��+�?(<w���E.�}kKq�#H�c�Hc����nqR�`>�3�I��,�	9�^B�
JM�^9W#"���r����O(�9��
�b����qP� ��'�C �h@5]@��c���4���6���;	�J�RH����ye���BdP&���LM,1HT���pU�i�&��i�=j4<�����G���$?!P��&��['���3�����L#�G���#�L^(�����Fl1�I�S�������QT��(��������)s�`)iZZ=��>�^��<Sq�J0j@�����(���!����/z�f/��j��W&���&GJ�OU���I�y�����OL����3�k0*Fq�Mf��L�X.Y�^1�����3.8�
�
;9��|��(�I����8��c�9Ps2igRx&���n����zSU��vYe��jGnN�JV�R���MlTL���z��z����Hv�����&��v"@�]=���{VsF�e�w��Nr�y��9��G��.C"� M�R�ja�*�%I�����|��T�H�Z�B	�����fG0b;�N1�C/�L�1��3�L�H' �P�9�J�����E/�<����1���3s)"�JO�}i�&����o�+v4�������	�x�T�����f����!�/��}*b�G
L��7�r*���T���������PIf���~�z;����3
�*��Z�$L���V�]���prq����-����|��z�����0+�n�����zU+�Z\!F1��mcR�bQ�kW�~��dxY���m�p���6��z�U�����J�������pED��zM��ip�a�7���dkZE���x�$�/�����R�h������)1����0��N�V���m;�2D������I��h��@3O�QHi(��K�J:v�R�x�1�i�F*�=)�
@3J3RZ�))�������0R��H��W*����&�b�ZS���_j�%�Y�j�)��)7�:�o#I<RS�����H�i����R	��R8J��i�1�7� $ Sq��G���EK��<�38���E+|�i�ES��}c��5��P8��NH��5����p��?Z��+qRZ��>�����-M���c�5��B�b��*eL�#A��!��Q��T;{T��V��	�kyb�j!�q��B@�[M����L�����{�"5��O�h�E-��I��aVt�&��8g���o�:nb�vd�k%�]��k:��|�J�osl��T�{W3=��#�Dg}�([c���T��wU������Ml��b���t4��f������+H�g?x�T�6�%���t����E���GJC�}��������\
�t5]��XIOz�$^���)�.[�*q�j!(=�:k��(sTo1����'��G ������l��`I������Qs�#8�Y�y�@.�8J����H���f��X�J��*��d���+��yi�x�d�p��)������I��]�lZ2})3�(�D1r}(���D�sE�Jz�	K@����`��)�����M�:S������b��\S����(�ETv�� J�C�;�����z7,��.r{S���<�s�S� Vm2���q���,�
(a������(�
�0����PN�R���!�==) ����J�p	SHW%��<S5���G'�k�� zZ�A�Q��&A�=���9�J@H�ZC��Q���i1��r1�5��I��1��s��sZ6���@{�jd�*,�"Up��H���+6�<0l�j�J
�5�-����C��z�=��s������&���������S��/qJT���U��������y��#�dL����W���M���l8�Wp8`G��\0��J����XP��^��lS�#1��bd6S��R	]�)$,X��BTg�Z�S6�Z3�5"z��������\w�	���7AW� qXv��g�����EeV��<t���EH�=ib90j�3�j���N�ZL
���q�I!n���&f�i�o�N��'f
\��4��V��e�Eg�au�L�\��/��=}i%��^"�����J���>�+;�<�Q�y�q]G#C9�����P�jP9�-=)���1���������'zC�ZR3F*�jX�b�4c�;-��
v)������b�E
�!���M����h\QI��57)1�����e�K�
P��Pn��=jZ)H�%\`SL�
T-F��R����Jd���oZ���KE&L&E.��;���������jM������i�(�*FUe#��M�h����)`����(�����
yC�`���)H�g��J����J�V��#�W*�P���)����S��@� �)UiH���T�:[��=��J�M����3���~��7{�[�H�P��q]K���w���dL��K��4r1Hd�$z}k����Qxl���Q�-��p;���{��t���2��S�[=�2i�O�E0��H�lL�=�3Gj��� �oJRy�����*3'K�S��R5���g4��|�9�l]�4�<T�����";.�������^��3sL��Z9���������j�}jA!�(�A��Aq�0y5 �>��������9��.O�O���kd5*�E�S6���E0���f,��5 ��3IB�u.]b
�j�r{���V��n���&�	���CS��������T�b�����;����B�b�\q��	�\QK@	�R������4��f�]���A����O\T��E(�QZ	�f
\z����f�\N�b���S��c���rh�i���>Qs�*E��
EE'�$2H3�fi���\\

�������&�q��R3q�T�	�<��A=EKW�_��9���#�s�,��fG��qPH���Rhi�43�sV��95�m.�Pz��#��a$mr��*95�0sFw
�.)����8�&����;�78���	A��\T#�<�q'49�Q{R��`Z)�fz�����>,��"o�G �1�R)��)���1M��=)C`�R�b�1XbG����1U�
�)����M��jx�������U8��DsI�����$Tq��V6��m���W9�j��EU�T����i���1B���d�~�B��L�������D���o�u=k������	�������#�]
�+nD@�,�?�R���vu�W��|`�c���U�J����K�/	���iw:����Qm��u���5����Xz��6����s���l|��\L����:���_�7���d�u��s^�}���
X��!�;Wf����LE%tW#���pT�2D�wm�}k�L���R��h+P��I�~)��-!)h�F8�l������R�N�Q�������Pb�3�%!�(��)	��4n4Q�L��FI<����mC4C��u���7�T;4��Tx�8��+����Ta�AlT����1�@�5��'�J�C4#a����c�k&�I���)
2��@5\IN@�i'j�c����I��SAH�v���*
4w���4��75��	�*Fs�����{~���C��'\��+��-��� z�����������Lf��B�B<������u�5�0�0}�/R�$i��p:���y���i3N#��0���-%R����N�qL5)S��.i�2�Q�*WR:����$�*�aJ��(�@�J��
PE=N)�
�*�]O5*�@\���H�U���haI'��IZ3�X9�2`sNi���<c4�:�@1J:�"X���)ER%��K����R�(��8t&�AE�K�LR�B}i���PF
J��G�@����b��x�c�E\V��n�M�R��HGs\���
��ZL�q��Fx���+�������-'j>��GqGZz����zr�v��4�A>�"��4��C�JE�N�_�x���=iY�u5)��Wo<��#���@^N1�Q��'���^b������=H��E&����rrA��i���+
��,�'�����c$mZ�=MH��	<��
�p[���A�N
<�re��*�y��������c�!zM��')���aO�L�&�j	�he�����h	7������z�b%/H��)���D����S��+-�������HF�I�VQ�Yq�5~�s���������J����I ����i��T�L�p�o9������E�nBDw�W?�\H���=)�����s��.������?����#u������NT8��l�����UA�9�D��GjN%���~GZz����dPA��3i�&AU�1��z�j�7����!'��BE�U?������m�}�b������+g^�V�����
���#��5��������J���pz�<I!�h�"qz�����:d`�!Q����o�����1)=��r��K��1�x�]��T���(���(������qI�R�8�
(��R���
E	@����4�)���)(���R�������3T8�p�H��6Z@�-��iz��H-M&�M!j@H��PGZ�X���p(qT�'��dqS�VtIS+�Z���GAI
�!���"by�T�j�-+�a��Or8�0N�
��,YS��`�hYA����F��J�y���b��GO��b�,�:��Ib��N��wb.T��?:���ny����8}������a�l���0�I�^�� $)!Oj��G������J��������Cm�Q^�y��9!t�:t8!y�7�o��l$*����V�9�E��|�M�z\>��4���9�&��E��q�*����	����6c���M���xn�[�� )���k������c�W#�!A��/B��`��@������+K$i:N����k�eyQ����|��$����OdY�W r���zg<j��R
a�g���=�N����w���U�c#��0���y�9jomg���`0`7���{�8o�R����K���pF})��(�Y3�+X�Ci����|:M6���<��o�w������5���f��>�7f��i�)EY��"�#��L���3H*��98��8*��U��>b�JNH��l�e��(S�Z��E�I,�*��$Jv�s[p���sN���L).�$�B�gp��+'��o*#l����]�]��`}(�h�RL����$�y��W�5�=�����}e$N��l����*�FcR�����Q�<�)Z�G3�^��H�iz�LR������iE(4�n0)�=i1���-8��3L�4��0��i�SE9zR�p(�
)�h&�0����G�����W�kq��QE���)I��J��)G�'=�@>���>�c�p��v�H�)�O-�y
�#��x�=��q#�Y���BI#$`t�[q�������`<�Vr�F��W�Fjh��6��T(�$RD����Hdc a��;YC�a���[o�SY�c�.8=j$�\]��9G���U�21P���|�'$�
X���]�1�ZK��W
�O�^��H�?�z�sx���P��5��RFW ��
�O1RNE[!hY���h`*	n�
���4$���T���~qVRjv����UD�zRy����l)�EUI3�<�0�9�L�O��|)��/#�9���
��#�r�1/v�1��p�sH��9�;��Q�d�������S�zV�3�M`�4q`/q�Z|���Q-KL��s�j�O���8�IX�SE���"J�F>t����t5F�V�����o�@���Vm��O���p����TIS���)�����2U�;�y�b�4�gRL��T�"p���mu�	����v��,���pht��U�;��wb0����R����b��'z�������4B�8'���+jo�=��I1���J3���-bwc�j!�A�r�1d�@�H����$�Q�Q1�)6*���Q9^��5��C�(Q��/�����u�i��(�/�k^G{6D���� d��D�_�Gp�.���QVw�X��"��]���V�����j�pH�X���J�����<�F�9�"���h��"��jd�g� �������V�` ���}
T�ZQpw>>��>�,y����8���'�k?i.��D���ac$�Z�UbH�*��M?b ��j���G*T�Z��N�F%Wh�j�=+k)wzb����f�ec'��8ZF��I��Oo���������G��=�C�h���6�.r��0�Euf4a�Y�� �FOz�h_!��g)�;v��7��c��8�J�����+W^,v�KC*8���FGAU�;:��MF����<�D����2K��A1g�(5��������C�H��F@5qmNcL/�4rj
RH
�*���d�Ud�(	PN;����%���29��B���'S��g
�<��j����#*�<O����W��K#���:�������G��
�0�Hd��~���	��@fp���'�,�����x ��I�52��CeR�zX�c\ddR�4��m1#������F8���=jd�����n�������X�+b�B��;�EC'����^������$j���)V���h�����<<e�����R�6���9S������']����\��Z�]V�C�NL{Y�����vl�����^���;��NzS���P[�v�<�m�n��
�-t��nT�n�"�m�_J�,�U�il�+
��mJ=����������0;G��q�O\���l�$]���g�WVl����7Z�	'���F���!nj�x�f�3U�ln2L�Ni�c*��&KC����U�]�*��G�T5���Qj6���Z#!:
(�i@�B)s��PE0�)�0y�>��@)B����{P1@��)B�O�R�hS��������b���U����-��J�p��;/�X. ���i���(��Z�R�����`��L^�4�f�rjZ)1j�0���j�N�x���Z��>�,���ppsR���5D��8�lir�.|��i�������LU��0�CV-;�6�S[06@�a���
��n+	#h�D?�7!��U�T��d�ft�`o��$�k~H�SX�0�N�UE�����1s���>�c�����j�3`������y��|�Z<��v���<�4�����5\]d�MRi�=qH��9�Q��Ok����d����I<�������P;��z�g�S�}MZV!������5z�He�c����Q�~M^H�`��!�$jI��"G�8�X��R�*�qJ:��a�^"���z�����;���a�����������.�5�������j�'4�O_J�$f���h-�i�#�MR,1�S,�\�h�j��qG'�UQtA���-���P
���Oq*����]������:�	g;��A��t�\�u����z�gE\w��������s�0Q�<Ui.�H"@>���s���p��T��������
��Vr6��H��H$��9�T�*�5�.�n
@�(�����g��=*�YI#���@�N�6�����{���7~����w���E�d�A��L�T�Z��M�tRF�A�"��|�>��<��VH�`lq���s�g��;5��v�-����J��r}�X��+2�?:�T�R��C4V\/���Z��s��G"�����i�'�VY8��sR2�Ns�5kz�����1�!��������C�L�1�c�4����k�L��@L��iV^*���hz\��
a��I)�p��*�o�Q���jIC.j�H��4\E9�g������lUw�3�(��eyT��U��'���u8�E;��@�]��(k����m�Q�e����j�2(<
�BB����K��qTP���7QPj2#��U�B���;��U�&����33���R��JtM\�&P�5�%�j�Y+���K�R<T��?+\���pH�-B@G��=�9���Py��r�	�U�	Q��QMx6�sS�>s�]A@�J��G���-��5:�H�C�O�:U��V��C\��	���N�������&��l���
"����"���+B6��, S��Df�H*i����d�(`rN08&�_L!BX�\F�������<�(�������
��Ck�����Oz����rI�Y�]�#�tE4a&���0��y�Y���5<�;���X�0��1������U���������y ���.8�������9 ��/K��|���Re�;�V�@`Vlg��G'�&�L�V���m�z�i&�M<K�J�M
��2t��
H%j7���HL����c�t�%J���N�T&��f������jN�#��@�����9��ih��Q!K�1FOJ\f�1N�:��T���A��L&2��R@	<���Q���UL!�'�<�sz�����c�M�$�L��9u#h��j0xT���j���u���J���v
��E�q@�:�s�R�������m;������
uKC���
&9�����sK�E ���h�0=i��;��3eqX�&�C�����KO5,N3�k)#H�F7���+i2+7���Z�H�,������b���A�_G�p+	"v�w����������/"��q������MtZ������)�=+�����n�4s��p�F_�@kc���;59�dS(�S��Qd�z�����kW 6�,! bG�n�.8������a}H���Od�8���`�z>y���4�2��(p:�l���NEhj-�d�c
��kOr<������8���>;Y��6#��mt�y[���NE7&���z����=2z��t6P�=�+����C$f�2G����!�S�0vqR6�l_*^��:�~���m4�2�H��1i�4�]��[F����8
�Y����j}�{��w,Ch��$��������R���q�OV�j��4�4����U�����y����O4%b��*�jtl�T���L���5�i��8��A���7��c�z
�-�;k`Crpk�\�`���[k9�$O�������3�I�A��zUK{}�`��\
�������H�������c]O��A�>3\�}�kHlg7�"��MD��8�li�S)��jd5,�YSS�5]
Y����A��f��5(Njn1����o�q@�#������PvLSzU�*0�����B�s���5NBA��9��q)S�zk6M1�fl���1�L�G>�8;�I�UU`�E9&`h�
�+NEe#�`~���()�����X�*�##9�B���9jU���c]��*+���\��%UA>�JZXM������:�v����9d8�C6'9��c������X��.��|��"�}j��]E SRN8�^�4��-F�L�Q�x�MV�.���,#����+��Lx�v����ggb=�#�[D���|�^��3��T����WUCD
���\��L��(�OHf�����bT�fZ�&���8b~����p8��r-"x��5v)��t��(��8^���gC�q�����[���F�T��}i�.t�|�
5�/-\������������j�X�����#�T�j�����u
�qKy�4�;��SXovY�'��h�SD������$����x�:����a&�H��jTN�&�h��( ��M8
�4�%y��b8��V�!�\I�U��<V\e�S�����jF��9j|wy������w��~��78�x�^������b���Z�L�T���������U���C�Z�62��N�r)������N���1c���)��CqT��ZA�zQLb��&�����Z���
z�j@I�jZ]��@7����W�EoJ^�Z���-��p�4��h���Hb�
@)E(�iq�j>�g���qNb�R��c��(���:��u�g���hw��g�qK�
������;kc5
����&�W9�FH�e#D=���0*�51bF*9$qX4j�D�n�ugu���R�������X�-.s�5�f�l�\���q��+�p+�q7�����zU��8��k��������X4j��m�����;[�|��Di��@����s�dj�r�F<ez�J�R�������o4y�P����c�T�!��v��q�-�����9���L��#7�\����{��,�UF2[�oZ��e]>����.0l��|lu�j���y�p�5]��b��;��mm^(�a�;k�3X&�:����V^���r
k3EKa}kP�31E����D^�Kc5��zv�-���G�����QC�2E�n�5��P{tA�pq�i*�������,�=a
|���`��������-J{qW�nC��}q,_&��=�d�&tY$ZkX$9R8��.l��Y
���j[����|��;��1U�%�rL����0LPr
tn���|��F�"�61��{V�i�1qfC\��p=�vv����w���>��~r:`���c$�(9�Ry��N=��p8��<�{���9y��EH*0qSD�3�^I�L���W-�iW��{����I=��4�&`U����U��M��{K��/��{�c���Gn�1���,
�sm�n�b�F@�4ykf)
�T����j])���"��[������^����y�������#p�1�U�����jE�����B����1@��l��AVTj*u-��PU��WZ�����b�*�jxbEH�NjP����S���e�EX�@���,�.i�J��4�WrjRj�EBW��c ����"�m+���6{U���J�V�V�)��
.���Z0�UH����4[�6��)j��=j@�EIE�sNT(���3Ld����Wq��s@�Y,
F�Te��iY�'ZAr'�b�p��;�n����,+��%q��`T����|��2K�#�"�y��n�n.������	�l�M#93U�1��I%7���WRXSA��g��P@�Tir�b<����5��nn��Cu�������i�:�����	4h	P|�8���,I�NG"���f]�P[�<TfL��^�d�`N5(#��S��C'V�<=B�x4�Lj�p*��xc@�/L�DH��y��O$��j� b�&����&�����4��b�Fl(�4U"�4�������d�H(�D�
gzpB$^� ��K����#47��#RMH��� JM�b&V�v�����l��
����lv#i����a�JpU'8��v �q�*�/(�iK�2����E��8�k���fb�\�c4��`t��j3�R�,����C��`:{��(�J���4�@�56����('�������G��9�h�"���m,z�q�r�3aMc$j�V5V
���~Q��*B�rO>����Y$nt�-���;�1���D�qQ+`�A��5�&�Ay���!������s���\ec���������g�kk�;���y�3\�����8��:uV�Nd�^��X{����lkr�[�2�p��=G��JY�NMk���y�z�#0�V���OA�3�>@Z�i�[d�h�a��]1}�Js0���n��*�J�Z$1�
��0S���[�C�T���6�QF��������sCu���(#qX���#n*���=u+���"����|�&��c�V2l���$����l�wl�p:qe�V����e�1Q=��������iw��[��U�����71��X���{�����/���u��a������I���U�������9�p��J
���V+�3]��������EfM�(%���������9�	-���\����@v=�����.�r����P<R*�����V������w�.�G�D��8��N�?�;!]���x���N��������Mt:&���s�y �MD���F
���r�V��g%����W��C���O��x�j��u���{��h����V��\J��tp+��n��'�9�K	+��n���b�aA9���N�!�#5 )�+�}��"q��Z����rY�,O��]4��&��B�g�X�-�0/������y��5;w�Q�&��p#5�V�2vf�o��5a\VTRA<���K��@9��I�BAS,�+(��jX��6���5aH�gE ��/�-cS<��Li3Hd���Hf�/L��e�����OSLy��HFJa|�Sp;O8z�`�k"�uV2��4�h���L��b���f��E�W5JK����H@<j��;u����f8�W�~3Y���u$�����u$����h�p<���&U���g�H.6k{���_�X����v���@�,pI�YcS�����l�\���g���n�
��Ho����'�R�7�Hxk���8�C�
���j�Fp�3��'��)�d_���MK�m������)Ua�B����d�����������x�f�����I�s��>�*��#�I����=j�kA%����yA��{�V���8^������I9�Y7w�H���5��|j�)�����@�����w����i�Q�Z���j���!4�4���)��E"��E;i�*�x�4
z�J�OU�M;p�PA��R	�����4M4�ZJ����N��R!������C��;�U"X���)j���q@�~��J��,y���d��������c�z�g���n8��8���D@sO���"�1���XP*@���Vm��`*[�QWS+E]�5�K�&�=����i��0t���zow�9�
(�J=h�:R�}8�q�z(h�!�@��@�z�u�>����d�`���,;��,��
LsJ*hz�y�0��*��M��Z���������	�0��fy��vi$r[qbk�Pw7���FI)�Y���b�T� ��;�2HJ�+�5}L����WM��>�������:��Ee����E&t�j���s�[v�K�-��p�9=�������7j�P�q���z�����R�m�=���Y�~V�}jH�Fi2�/d�UC�:����M��e�
s�R��BA�l�@7+e��r2���t�:��#$b����F#a��X�Z���s��sY�q��j�K��}�iu)cT���x��=�w��$kNT��4-����P�Dc~������
��#�b�����x
Vw�C��d�5�������h��o���=���{�I&8�����
]K�G��MX��>��uc�|�g�Y��D��9ryaRn���{;�$onkQ/���=��WF�z��0��q�~UE.\���������x�A�S%��D*F���}������b��D)��=�Hl��n��^eG\f���&3U����b�U0��S,��WH��T�N�4��K���R��Y�6�������V�L��Y��6}�T2_�04����q�!}���:�n9�W�e��F�PqF2j�]�(�R����r�R�A8�����@T�E�
�I�E���<�I�b\Y1;�].���zR4y��f��D�����vz�������������TUK��
7;��cbU�N1N��x��	i	�F����5j�g���zz�N3H�Ef&�V�S��V�\����1�*����'��i�c*2���%�g�h� r)��u`iT�+Im�EX���X�f��L��MJ##�(D�W�f�yFCZ2G�*���A��ji�)oyOR*an$��9mR#����E(�H&���b$��zqSjh����({:�}��c?CW����p�H���;��9B��&0*�|��p���y�"�WZ������������EFi��u9$*s��4f�H��-J&m�SPf��(~��4�����\���RQ�k�i�
LS��m�b���)���
K�
{������ia��G���O�R;���S�b�
��#�a	8��F}*�J3��1�W*�/,���\������b�-7mO�4��6!�F��n(�Z%�=��;T�sN	Z#6�6Rl�%)�j�
���L*@�[H�6�=�;�S�4��V���J��V���A�RM(D�C��c��"$f�T��X�'nH�8�qY�U�^�A�YH�%���1���H\�]�YO>��Z�� &<ZE;0�r~�f;�!���U��5�Q9b8��@��h��/t*/x��h�������{�j�*�ZQ�ZL�����)z�i@��Ha��)s�h ��q����}i;�Q�'#4�QR���F�4�-
� ���e���z�����!��9�y�t7��X��m��9�{������#x���H��h��wf��8R(��+��H�&��X���4[����vv
3��Td�'���I6&��F)EY����B:���XU8��j\��!'�9\�����q@Zg)�j
�w�� ���@�����*�mX�a��UiwP�I���D������0	�3Jh���r��HO4�n��������,��5a.�3���-H�7#f�MK�H��X�9����i�}i8��������*�j-�k�[��wT��9�G�R�ZgS�U0	����S9�8�Un����[�*
S:��r~�[[��Z�����jo���c���9��h(�x��U^���k���?�0��Z�P�:����	�V}@�$�q�\���8�F�r�r�1���f�|�M�li��k�k��:�~��9&�Qs�V��_54we�I�X�����5���stw]9�+;�\2j^��c�f@7P��&w��u�L.�:�1�p9��{�.MAw7���T�.������p<�Yfm�f�\��e���K�5����������rFR*����S|�'�J3/�shH����$LrqU^����L���@�9����g<����m����X8�b�T����1@}*[C�����=jH`��,@
E�������'�h2P�t�����)�
���H4CU�R�5y��LF
TiF2j�����#�Y�c�98��w��9��w6���@FA��Vr0:sL
M�Sd��V,*9&���W��u��d�Mb���FQ�8�)lsW�Z��	����������m�u'��%�,6S�+2/���3�~J�����B}*Y�'��q�O;�j����%V�)�G�'�*���W�g����DR6�����sZy���h�I��Bz�F*G�c������<QN�%1	�LS��T�t'<���bPjR0pi����JbS������<U�����b&\b������U���4�#'�H���hr�H�{R�w����U����[��%�1V�
��)?!�2�c=jq�����U�'i$]�D�4����z���� ��T �*P�i�H��8��Hn�U�a��S��@8�c92x�*`�k=X�����r�"�P3�E��
��rk>K���	���k]��P���%L��o�,n������o>�j�!�f�]z�m6����������"9�hIR� ��R�����h�p=��\��P78��h�A���rG�S��eb3�j��8�s�I/�>wzU��M������s��["��L�VH���c���~1S�vKq�X
�T�1s��tQ����������#�d�Ee?�:���}�N� ���0k�{�Vq���3������Zvi�J
{������E�-.H84u�I�Z@;��g��@(�4��@��1����)�
��4��S)GZ�H�2e���noZ�4<�����c�h��-ZdP�
�,�$r�M�D��9�[�jIs�ce�O&�B��I�OQe����2~�Q��2�}��9"��R?��-����BP�Qm5i�c8� /��"�(�l��)�1@�Rm�GJ3O��i:QK�m�4
8��
\�N�R�N)�SP�I��c��Ygn3Y`�]��\�G��K�OZ�R���w6|� �s�����Y����k��f�� _�X�14�q�3C�sorwg4�|zVo�q��\�`�������]��x����d��M+��t^��s��Oz7P$��r}qZ6�e�X!�Wm.9�e&w��(����M���b������|d�S%�g$;T�LX�zU9�8���Xg�4���4���S#o�sS���d`��� 
�&���`�n)�b�5i����hj#�kr*�����I�qP�`S�U�� ��QO�
Q��d�e�
!P{Th�=jM�ZU_fMZ���z����������0�;J�c.��w+��'�jd��3�����[�y���<���e�5g�P�K���aX�X���
3f�W7���*	nI1Sk��4��k����Z��B��X7�C��)����$��,8L���9�M�������++ �+S~T�=~��s��i���q���JV&rK��Zw�<�Oz��9'&�6K3pi��i�G.�#g�E�� �'_�1W-U8���V\�>pP0�Gz�so���85\��*��
Xn*H�_j#�1��W��
���� ��2j��!V�T<�OBZ���4 ��f���4h�zPK��8�BS$���zcd�����A�M�c�u���Z�D�"����M�?{�f��3��S���g�j�
C-��?:��Ni�CV�"]Vj����?�e���h�#?j�6���O����$�O5P��Zn��4�!�l�.�<�b���n�g&�E����M�3L
�Z\��q����j��G�0�.ph�zh<P;�,"E���9�/'�p��%����(4X	���L�N�� 1�i�8��)s�!����)��P)0���E7<QU��T~�T�R��>QK��n�~����>����)��4c'��sGJ^
�/SH}�x�(������a��K����:��A�zQG�(�,u��F)����
Z8�����$�x�M�����6�'A�s�z�s�&�Mr�)&�*�
YX�QP�@��q�����5�V|�%�rj�l��F1 sI(�8z��)8���M��*(�)�i�-�� MQ*KpA�&ff�L���\�P7S
J�������f0h<�^=8�=(��x��)0�GSF3H����b��E ��1h�4RE/4���2ir}i)G4d���H)�HbR��K�v���������JM������Um��P����T���p9�hdY����E��a^[�P)c��'�t������$e����94���%f8�n�8��`��WT���Ct�-"H��V������T��7�X���91���e���4���X���Vk�N	��!0F�7j�O�������Z6�nn)�����?�e���*�d��C.��*�R
R+�����F���:Pn�9����1@r)U��Fp(t��������S�4��TM-S{��9���[�C.I!�9������[���y#�hbK3��9�L���1���\�)�W,����yT�TMS�GZ|K�63Sa�P2���?j��!6u�x����;�V2�U��i�W6��'�����es��F�~��7s*�������hdJ���N��s��G�,��e7����q���(FqO��V&���8����7`J�[�i�=
h�B����P��8��V+"���5~�\�+��UB���~�������N���\�H�<�0-��FAj���n��S$�T���M!�*�E�@��f���wz`{�hH���	��9Q�B[�J���������#�� �t��v��I���y4�n)�&���Z��r��O4����qZ�d���6��������(4��b��Rs���v}j�%�Z)����T�7��zh8����:�N
L�J����=�q��0���t5*�zS���;�z�������^)�������9��M~�S`)���t��Kn7J+Z_	Z��Al��G���{��:b�3K�����)@��A����Sr��/=i�=)��:��Ha��R�9���^���)3�K�zR�9��F8�T41h���T�R�Y�b4U<���8�����l�����4��\(��T�`��,����ua��b�U���QP�W+��j��++�z���sP0e�H�2����\��W�
�RHw����=�����T�����PF�j�H����FGz���Eh�+/<Uu-�l���kv��4����6�i�b������w���ZLQH���v�aGN�Q�)����=�)i)�����HS��~4����>`�<Rc/�`��:T�D���m�c5�A����m�h�*�RL������$U �Y�w�N�bl�w���gV��-�s�V#.kj�Lv�0���s�(�������2~a�$D��O��
�jYM&Dq����<��{�������$��W�=+B[3e��<�\���v)$u?�9\��2���YN"�q�r[���`:VD)�]�u�4oE8����k��|�WV�����8�Z�)�5�������H
���2v����Hf&�����5Qe��N�I���O,1M$R&Bj���
[&�����R�w�Z��"��9�3�Sb�W�3�*��h*�Qp1�����Z&������S�Us��S��Rh��sR���j&��<U�t�=������F�Lf��<����q��`����@8�c����;0�f��"�Fz���U(4����H4 �z�e9���i����P0i����W>��h�{sMX���=Q�����PW����=h�\ye������}��G��i�
�$X��S���UE��
ZX0BK�g UaS�U�����^XY{�"d�� z
����ZEc�T�jZ�2lW��y53"�����>��
=�1����qU$l�*��
�FLf����OJa�Oc�Q��[������8����j���������I�ZD1
���HERD�3���G<���
��J:�n�8t�+��i�r�4NiG�w�9z})8��������E7������F��H��4wj��P)vz���GqK�L�`���:��/#=�
h�@�����6�*��y?� �(+�Z=���p=�@�R1���(s����@�iH�Z`&2)T`���^��{�})FJ@��4���qI������9��c()3�(�cg�i���K)~��)�w�($Vm��x�i��'zxRy���C��������icP+����f|��*��h](����X��7Zi�O�Lj@'JP����F!�{�qU��4�2)��
LR��L�4�jF5����A��3E��bQER��J(���p�JC,���O�#�mH�V�k����\,xQ�h��"���j�rw7�t0���7^���p}9���<���z�e���gN��(����������V\UGD�E5%�>��I(X��l�jhn"U>b��U$�b�rZC5g��v;����	�U���d����RF��������clT��E6�4�+����ZJ$\
��e*�$h��#"$8�,��i-M��#~8�����N�������[�S����s������2���	���z�5f,�LH�������3Y�)��� �����IE����*�dU�^��1���Ul�"J(a[�>�,
0�\�����TCT����l�R�nUyy�i�5U������iP"��iw����D��q��r���9��0EV�5uX,`{UJ�0r6�hc@�9nC y9#��Z$�Z���I�)-�z��6��5��T�z���+g~FzVK��=�tB�9��'Z\RU�;'�(�zo\S�0��U;zRJ��1Y�9�+���(��1���"�O�52"��R(^�Tnw�D�2x�O8�*���}��>L���"�����U���na�M
2���$��?Z��[4��E4����\�
�����'�)w6z��
���U�s�iL��`��HL� e�[���*��o��'��p=j&�]1G4��q�?����kD�����2M)��D�h�)H��T�#����)@�j�dR�h1K�i�{���i���
���N�27f���@�)�"�>���S�1�8�ZU��;�Xb���c�u���H:��R:��aL�sRW-V�(�����F�)��)q�"�a��kG������8R��K@��8��M����i�g�6�����){�R��@��Fy�sHb��r;qA#=
���`.9�3I�g�,b���QR���K�Zm;��h�(#��F���g$i���8M��
����P�$W4������1��-6���Rw��$h�e2�)�Y�ZN)<������c$t�4�Mi��Hm����X�t �SN+U��]�Vx��)�MM�8����2F�M�O�i�3@��2�����)bN��5�J8����S�}��L9-^7�^�����}��Zs�-�Sa_/w��
�'b�u�\&��c�]�������s[�9�p})g
G��i�8��`DY��}*���ZU�FW<�Z�(b�����t�Sb����UK)�q��Q��f#���t�����Sv�*9�|���I����^��6
[d
��8R8���\��L	����N���z�������Yr)H�����*�-�c�N�V��c����*����w���wu�2HNA�&�5� �xU�	�\vJ"��P#R�K�x�iw���#�bi�>O��s�W����v�z
���T��S�|�(� s�fc,�N�.�����������DK��T�j�vLAe���Z�c��fs�+�J�A=*�37�8��z�$nhR	2sV�Z��bp*q/�&RM=\���sS!�@��&��)�_2�������d��Nj"����������F(�zRm%I�"��$q��m��=*9bU�sS����_�sB@U@<��@�@�8�R���sz��44	�J������ �������z�`�1���QT�v0���5�r�e��<{�������+�&2D���EOc�@fbJ������
\R���
ac�S�h=i���9�o��1K����]����P�Aoz�`��_Jw��������3��@R�*A�ZC�@���)W"�������1�L�w���S��0j����j�������(R�`��$���L\��sP7j���	1��&3N"�NJ�1�RS�
CV�N�
P0}���Q7�FrsF
(T!�h�N�0��4�qN��a8�R.1�@)Ts��c�|���q��1�*A�L`8�N���
�����8t4�2��u��,`8)Ni�qR�p��(��5�L�)���JB)��(=i�0[ �zPq�����063KF�dQ@�;��������M��'4����i�y4�1�(�h�J)4�4P~�,�&��GJ0)1�x�.i)q�C)
*X�����I�g%��9�A����@q�dTm&���[:H����
qMT[A�)�X:l�T�d�=)BUX�A8�I #9��Z)I2A�c�L��'���*l����5Ze\G�<��Vvy��������*v�����!���4dS����!�c<����������v���I�4��{�����zSd���Kj��L�nK�*�5g�Z�h�������<��Zd��y�w8�|��S�S`�6x���0i�:���~��EU��3r+JE�5�p�6c������m�a���
��<��Y�=MFI'��#;���������0����PD�pwJ&��8����4Z�kH6��5�8��L��g=;S	�JE66�Q@�"�@��u�Ibi��*���j���8{T\���"�������1�JU;[������y�?����jA����v3���Qd���v�2u�J�{�I��-L�T��s�����H.[W�����R,��`�gu�s%h�ZVarB�+sU��h�J��Y�ww��z����R��84X.\��!�Th&��c�E�9����L�S���j�)-N��"��jV��b��I=�=�*��m��_J�+9l`+I����YW���r>c��V��2&v,O��WbM9�,ps�0�������'z0j�,q���~�v�aZVl�cvi��v���S)8���S�"�hy4��^����2p��9\1U��&������LG�3�z��wf��������� #n�Qe����T����[�z��@�T��9-����}�-����y�$���y��5�i�%Qx�:�q���9�3d��������qO#���H����M"�O�+D���:Rc4�=����g�N���s�b�����������������4�����9�c�)TS�����R��K�����Ohc4��
��@��P1G#�JA�r{����� t����,b��O�L��G�J���zQK������D�(���M�)M>�6J�}�
8��G9)�4R��t����Q���"����ZGz3��N�"����-d���i1�GzS��9���h#,^���A��T����������iw`T�Zv,3�\f���Zc6E7&�q/�sg4�I8*�\��<�J��I+��z�\`����3�#q���.R��/q�h�O�=j�oZc��.��d�)-�����j�I52�
=}*4Tf�YH����LkI��:��N��1S�������$�C�6fS�H��T;6�����GPj��[t j�F��R�)E?�-B��S+�T[iqR�L��qJ5\R�5���2s��XN�
M�� 8j��L{�P�rq��
�<o�sRn�S(�4�87CK�|���V5�v�bk�m��9'��(J��r4�g���5����v��jY������E�#!+dZ<���-��0;�5T���o����DSkC��!��NE��}(�Q������}A��fXd�d���nH�H��U[��l��$h�CY�P��
zU��]
1�ZYZb��XqM&Kc�\�j��q����py�n��zRwL�GeH��y#�f�����9p�F���1RSF[�<q*���#S�zT�.xQCmS�b���ipEJ
���7�	��s�r��<��N*UEQ����J�^5���*�A����q�W���>�k�OJC=���R��s��X����QI��1H=hl
g�5���vt�V��88�)�M�qB��c�i4;��}�z���X���03W��+c�d]>������2�<�{��<
i<�A��Fq�(&�g�.}�)q�T!E8LR��z\��h+�����`)�c�48�����
�y4�bNqS�/cK�z�hM���AG$T������j��\�)3R1�N+X�6��Hz�V��9�4rij�%���ZC�V�-���4�q4b�#6�HG4��I��"�f����oZNsT�b`���Z\L���?�S�T�1�Jp�`�S���CTi�P��z�LS�=�:1�K����jp�� ����0��A����sN�������/l
)x�Rc
9~�4�sN���R�f����A�J�����@G���O��*o��b���h��)�N������������q�S��}i{���m�j ��8�{��4���� ����N=)x�)����*F.is�&:Rs�L��)3�(���R�A�b�
Ry�cNx�^����KE\m)�G4��KC���C��4�����4���G6��iVB��G�&�rC1<v�N3L�'�QJLx9�u��n�h��qW���s�X�%Azt��"�6*��L(
d�R(�9�����p�\�����sI���x��|�
#J�1���&�`9�2zR��r*b�GNj/+'�����+�?�GWd�y`*�Ug��g�z��2m$���'
����C��0jZ)3A�
k�rGz��BW�Hd`�A;OoZ������X��j;��'��4�$���@��H���2��[-r�v��XN@�i��H[z�H���6�U�r�X���;�q�n(�G�������I�=
i39]O���j�&�����_�9.���&	�+�!�R�9��S����PM/�1��BBF(�B�����w��lS�u)�a��vh���e�;��J&`���P�	 {��.8�����-6H�,���r�����P	���k���T�_�|��0�X�����c�4��&�L=�c@J��$�G�`��(y��5<�)d?�������O��O�U�w�JV�������q��(�c�"����8\�}j&�������/J�s��	�Ef�-�G1����Y_v�_���yg���Y����FSbf��By���u4�)���}*��:Rw�������4���4`��S�I=�U,x��`�jUF�Ldg�N�� ��H@�R"��4���j�!�wqHX�M��R3lRi��N:RV������#�oJ��l1�L�N�)�i�):S�0j�!���jCN4��D�7M?�&?
�@�R�����S��Lh��.2ip
(��6����w��h�c��3��f���b����{R��0�v2x��4�(���E(�aN�i8�N�z
�?�u4��;H�8� 8���R�*�S�1� ���dj�2A��3�����Kz���c��n��GF�Y�~�}#�h�P(� <�P&)OZ`)pj4�\Bc9�H:R��f��O��Q�R����qK�\��(����;��R�'�Gz\qHho~��v���@�(�( f��C��JzRT��zQ�j\SH�T���!������,hi��`�&��(N���iH��H�1�E ���RR�Z�������j��������)B�����8��7'��g�	94���d��*���QL4+1Zo$�N%���N\�A9��i�@���JN9������^"*��Ne��4Re8r	�JTAS��Be���-rD��:RMn��
3D
�*�B���`*�Z����y����02�VY#0`�Qp�2H���9�O&���'��D4R�G���L�1��.�5����c�����-mie�`��i44�����������}��v�Za��#,���P����`���`j�:���8�R��[�H2��[�*�S��r
H���s�~1M�S��_��h)�����=;PFGQH<�R���&��h�V`�*��GQUq� ��r��h����
�);�� m�������8Hq�����<�)8�2&i8��,C=j��XF������w&��Q�b0s�j��	�@����������W����@a���T��g'�@Mo����i)){����)�M4{S�UX����4���qN��g�Pp9��GzvA!��!�Qii�W&��4��J�U(�\����Zwji�H��4��=i
j�
�&(���H�'���q4y�H���LS�Q��"X��iqF9�H�7�
���qK�R$f3F)��U�F�F���������b���b�BR��*�89�!���dP)q�0�Zv}�@��(�sN�����0)����J�	4���;�O^���������H	����@��!�3�����&)�~QR�;�O�1EkI��Ks7�)M'lQ�J���f�c�Q�4�Z^i�!��#(�\�h�<�����q@�L�3��qG8�0zw��9<��@	��zPF
E!���I�h�.1����u���ZCRR�NM ��<�JG��R�1�P}�s��H���>����e
$��4�g�@=jX�>���E�����3E/ �s�C
Jv4��JQ���*F)>�f��Q���)�n/�T`���*)=K��GH1��N6�Tfb>���6�E��:��������&�����������54��X����T�����h��e,5VT*s���9��a�����2�59�;Ud�)�qJ~RsP�Z�
��D9lJ�M[hY�*?M��r8�G*�Y1;�J�����{b��F�2���h��k�W��=�������UvX�9G� �������,G��Oo3B������t�:��s9z��������i�w=?Z�������kS{w���������<��V�zU+�-��x#�W$d��`��`�J�#"�-n��s�F)��WbF�J;�i��w���XB`�4b��������i4��=)��i1������H�3�T�H��S��_$�MT�B�c���/b�8��x���{U��v����r���i��)�1��Zsi���|���A��gU$&����i����&��W�(�4�w�(������4S�Qa�P)�����|�������5j$�&)�S{U�CcH��sK��#63�zS��x��R%����v
��D��w�~`��6���A�TH�q�3�)�����4����c��!>���F?:0j����u�m��2D��N�h�����P����\�!�����i���(�������iF�h�iB��!��>��Q�4��9����;�����R�KH<b���
J::����(���w����I{�#�4��)��O>�MzP�����S$Lv�����1��c'�)@�)���)H���N�8�!�.2������(Q�E/C�W���jw�I������������1�Q�����{Ru�zRb�)1�R1�f�:��\b��zCz��o9���c�i2���z�N��T�ojC�:���h4b�9�!�h4
�B3��=(����j�J
&�� q4g"����J�P��f���s�T=G4�s��CL�d
�Tf������38��E����������S�Q�&�jy�Y{��(��U�S�b��������M�c�j�!N��cr0�J�
���R�5��,q�]��PZ�F_:%b	�*7����@�r
F���=�'���<MR�a��+9<��|��j����9�"���A���t�u�������YJ0�Z��.�vF}+�4����
d:�P�@�����i��>��	C�zb�4%H��9�R@������t�#"%����~k9��Y�U)��.
os>W��mj��N)�F:}*��Sm3��yT�\���s��0����4yNOO�I�Vep(����7�OW
�&�m!���)Bz��
:\��.j��g����T���B8������C�G"�HDC'�5.��~t�l��.K�F}+*�j�`Ct��2���X��*l��������7��zU6|��4��<�I���w�ZoS�HNN;�����F=(�Z:��>`�v�9Q�)��0�(Ss�JU4r���K�J)���~iA��)j���K�J9��q^�R���"[z^(��"[�&)���I&�LR���7c�S��'�T!(��(����:
v8��
Q"(��R��hLn9��(�sT�&�z��i@�J1T �q��#����&=��4���4:�FzR�PMq�\c���iGJ��
Lb�t�����JE!��4�z{Rv�Hr�2)pi�&P��iq�#�4Jp�}*Xq��r�Z+J	2��r�i�sME�c4��d������:� ��zS�������B���I��c�q�p�:�FEs�E���������t9����d@4�1�E� S���f����:S�A��+���=h.)��+Sq�#�1��G���#��H"f�Q�T�@�Oo�K�E(�W�G�����rkN"Ta�8��������Ch���W��c�j�Y��Lg��g����M0ph���MHF)���#O����i�i���M)c�A�ip��������RPb���t�8����������I��
C�JsHi(�h��'JV��HO4�����������<�qHd8��:R{��.87<��M�'>�XwH4� ���M���;����OJ1���=�X.>#�kb����b�j�����.Tec���@�8�����:�Q���+���������,�n�L%s@�-��hYy"����L�bq�V#���b��Ei�.$%�`�{t�6�$@��U�Ej��
�R��c�jREY3	�5�*�}�Qb8�,
t�+)�[�5\�\��/��?�������������e4����4���
=@�+D�#2�������%
�*)����i�Yz�(��]�]������]L	�=�
fx�`�#��O�;�r���+x�l��H�y�����XRM��������%��,qY�����u����-J���{��J���H��i5���y��M)�y��q$dS�)��4��0}h�+��):Q��,
P}�)E����A�<Q`���=��.)�.(�
1@�R�\U	����E4!��&)���D��;�JzPEP���8���1���h�c�(�<S$o�R����B���c�(�B
P)x�J*�	�6�S��L�7���j\(�j}�����;����.�JsLB���8��K�1�@ ��;��jp�Z)B�Z6�^���� ��s�h�4��4���*�E(�R������N��Q�3�E;(�)�$�s-8R��KX�5������-;���i���;��(���is�"����nzR�:����Qq#�)H�� �N���)��6����B0(��u�q����Zx����;�����*n;+F)��*[+��h�����`Q��b:qHY�MC5Z!����aPFj2I���E�/$UvbI �����`�����O4�LCO��i�$�q�@�������sI�������oJ��1Hh�"�u�����iq�Z@2�S��}�a���8�)(
&iM&9��K��N
 �������cs������i�`��J8�4,��6�����p��;�`�rI�['�gZ@1E�����v��X#��k-O=jU�m)�3L��������������( >���(	a�0AL��YJ�{��G�[����V�R��0�U�F~*���1�������bQ��)c�ju|rk��<L�}�U��r�~v9dT<<�&'v�#�G�U��^���O���B�C�d�%�E@�N:�hXi	��wh^��d�I�+�}~S������g��XY�TN�[�$'���C[���,Oa\�����8\����Z���X��hK�� (�k1�%�2�4�����5�SoqY�i���4�j�M����=i��2h�
�s��t��}���1J�q��������f;Q���Bh�8��=iv������ �(�{�0�sF)q������|q4�9c���e�h���zRm"�[���)qN����b
B)�8�F3T��1�wj9��3���GCK�hCqF)qK��D��-.(�B����1�1
�K�)v�6���c4g�(��/^)�N��s�R��1L�8�4G�.�{���&�
��J��8
��=�(�R�=h�(@��PG<
@&��c�w���@
;��f�n?v)��.��c��j�1i�?:6�N,b���U�H<b�})�p)���QO�J+X|$Ks��=);�{R��Xu7������F)���9���(�@�����4�O�8u�J1�����S��i3�N�Qq�Q�zR���\,x��)B�f����3oz6����(#�W)!�}�6����!�M�a��f��!����CM!��������%8���H�i���M0�4�
8��"���1�4�����#�wJ�w���=��b�����@%4��1�@	�)���(��4�i�7�&)�)(���8������N�Pf���b�z��	�SOJwCA�CGih�(���ihGQ��8���qG��p�(���K���u3S$�>)wf��.��&I����*=��5B$�{7Ty��1�N����#I�����J3@
I�%��M&	��4�(�\��b�������q�R������R�\h��Q�h�9���������!�)�R��@7�R��P.(���4���O
�5pB6��8�r��ar�+�����[���r1X�H|��A++��Y�SXi��f��d<��UV��y��zrsY�V���u���S��&��1�4�4�Q��H�P1O�f�C1K�\Pj�7b���s�1	�)1N�m4�c1�-?�EU�q����)�$A�j��L���;S�E���A�N��1�N��n( �)�"�=�L�f����E+�niq�Z1�R��\`3�lP;8�pt��#�8i\v
xc�8
����@�8R��v��Nh�:
���c��8V�~�Z��� �
�sN�j���7
^�h��4��^�3E�Q�8�i�N<Z.!zR�4�g�i�F
+��������i�R��&=E8/zr�>�*�.a�0
]��_/4���-D���!T�4���>R1��1�H4�jW�4���4�1E��g���G4��W��o��>����
���)�4���O����IJO��0��i(1A�9��oSF)��F8���S�G^M ��������#�W�^��h7T����+76����1J�zRc��4i�5X��*��C��1�)�1���VWJr����'$�A�,�)5v[Q��<���e�"�i��Dx���c�S$ozB2i��Z4ph"�E��(�KA

O�:�`P��\
)�����\P=(6�KG��8��F;��b
8��.*�,JZ1�(�f�QLBv��@�>����:��(�@�;��=ih�4u��4�sN��\R�pIP`�"�.)qN��qI��T�rMl[��iv��
D��is�
a�{�������T�2
�d�z���=�5��}�%J�[sO	��9��O�nr3�V!��1���M�����6�M+XM�3�+S,p*o7p�����j�����YN�S��0\��Z�Pu<��/cR�H�J&R@���LwU�K��1J����Sny�=c *G���"�����F���j��'5�c��f�IUFV�s=�i���<�{����[E�I�&
<�P���dx�o5&�L`U\C1�F)���S�)Jv.)�L~Tb�1@��Q�u���'j)H�b��y�����qLBb��{����&��Q�Qp�u�����c4\�G�NQN�J�a������N�Sp���u���8N�4�1�g�P(��8
����i�#�qO&��i:T�d��	���j�D	�H�s-B���*q���Qr�V��9��hpR��'��c�qF9���P!x�h�M!4�@(������K���x>��qM�F:sJ�=)���gzx�H�L����Q%;���e"�47=�1/#�����,��pi��M)\�`�M##��h�������EJA�5&�Dg�i��.#��y���\C)�E7��S���E!�H)qF'�Hi���N�(�
ZCE�1�h�J)z�W)����%K!��I�"����0��z$
�TJ��`S�����gDI58A�qD`��F���D��hP���S����U=���0z���[�O��k�kK�V�FbGj�"|���CBf�Ra��)�
����a5�0d}i�O8���)�0�@)�RP@�=)�b����S������jA�8t��Rw�N�h�1	�F8�b�{S@ ��@=��TC��c<�
R%�;PGj_zJb4E.1E08�JG�(^��L��A�{�(<���H})�c4E��Q�qF(���)\S���IJzR�'#oi�,�-�1T����j�&�pL�p:T�N5P6��I��Q5�4��&�����VQ�+&l�:����S����1��)���)(T�����s@�9����A�HLLsHI����B�UaU' �J�����$��D40���<�c�����i���Lf��m�?��Zb��{Q�S�I��LCqF)���UrD�i�AG��q
�(�
0*�&7��4�=h��Zw�z���(��W����)�9��\��*�)�I4�4��!�i�U���#+��V�$��+7V+���'����J�����P�.G'����r���������;�|�4y|���/i�r"�.2jt�Y�n=���;�9=*h�H��3�����T��:����~&l�-��(�8��+�x��:)����m�E���7����E�Y	;��wuZ���crFr+���:U8���`��?*�bGZ*�]�bgM7s�����(�
uz���Y�t8�4��LR�Jq��@��g��	O�4S��H,(��x����"��?9���#���4�P�K�y�4${T����rF�1Q�.�OJr�����b��Y�"�HGZBMM�����EK��G����<��S^%���9��Nx�0�Z9��b�v��sW��i�	���
<�i���������y�!>��!���b�A��� ��qK�:�u��8
v�R��N�Rlv���I6� T�x�e���#�+���=[�KL�XTD�w4�q�����@0��x�sWv��?jI��f�n��^Q�x�F�n�!@�����d��pE0��)����h����HEHE&)���F*@��m����Q�*�6�L�d���(�"���'�K���q�)ldF9�����76��>��5��E7�����z�ZJ�YN��EWwCRIm,X���t�v��A��BO�]���X<��C���,�5Xm5g#;sF���	4��$'�LXlo���Z�������&M�eW=3����E~b
�;T�F���)��Z d{T��#ND�s�9���jiU
��BFMvE�RVc{R�c�����:���J�\du�BA�%(sF)�Py��:�c��y�-y�)(���JF8�@�QF=i1�9�=�{���/=i��:S� $"���j �"�J��"�a��;U�#mT��<�b�b���7��4��H�J���6(c+0:���)�*(�G�	����
H=3H�OALR���rrs�S�)�^*=��4XWD��v��?�S�*2EJW��Bi����w���*Zd}����"y[+�Lf�F���7��=���.�Ej���{S
������Rb���)|��O��VC�1SyC��?xUs��dJ���_)�~S��[�8�
�8L�ga��u_B�%�����!��>�0Rvt���A���jd�����u&W��K��p�iL,:�|^�����=�c��k �P ���lt�k�2��Uo���)����s�)B	��%|�5/����F;�58��z/�Sy�S�DA �i���z�j�j���72����V���i(�qI���AX����H%��561�n����.T���Y�y#�bGZV1��"�H�F��6
[��$r,X���j�;9����*o��~5-�������4}������8�i��G�	�e��"���$w�I�/@x5���`�O0���������V��r���8\b�<��n\�b����Vyv�ZQF)hw�����v�������qHc���hR��N
M���	�������S��h�Y��/�Oz�E'����Y��4�>Vf9�d������tW�i�xH���V�����s2qps���X����3'k�x�TFV?�I����j�q�$sS_JS����#!��8��)��>`�c))Nh�����
J~
M.`��N�)�Ni�K�W������8��;
�(,qN�G�Hq��+�&W�8>H���H��*�j@���vh�\��b�H*�jL���[pjU�O��Ro`iXjF�6*)F�`��s�a����������9���1���H�����a8��F
7i�J��@����$�Px�9��H�F��p3N�����	�|���i�����u�j�+��������x���T��LJ��I���W5I��u���,�5�7n*z�{H6��3����.��X�S�e"�R`�a�#5NHC=8���i������W�U�#g��<��R������o
�e��,gm�
B��Z�����]�g
E���:�~=�6�5�1E8p)6�!���
^P�����KG4b����N�b������I��jQ� �������K�(��@�Hb�x4�K�)L%������b���re��4�0S�5Z��K��'7=8����^��~�����j�G4	���
���jT�����!�6J$�;}9<���4�(Np��M�C|�Pf9��Q{6qQ`�,;���<��P�8������rO�{��n=qP������>T.fX7O��w�����L��������3A��TN�z9P��`��1H&5qK�v&��h4�}���4X.H��.Nj<����q�4e�i3�&h����*C	�&��Jp4�vM(jfis@���q4����p4������)D�;�R�4����d�����������M�Rd�L���'<��.3����d#�J�98
���;zQa"��
"���D�Q����I��0��Y9X���iQW��w"�9�.����b������������������!3�;��G�(�4���iE!�K�i1KH�����T��:��.jYH3OP��*�Z�Z��SY�R�;nZ����LX4������l�����������w�J��"� Q�]��#����S������Ix4����cO����`�Y���C^�
�r����>��D#����'��!��`�)Y���T����"zsP�������4��6Lw��t��q�4��E�sH����� ��VM�����}i�u?{�.���V�.>nh����7�=1J�vB�#����������MH�N�M"E*�M;��w������9�KH���w�+���7o��Q
�U����`��G0�H|���Q���s�����F��5!4E�8�9c-��^��5m���5tI?tP��i_s#���|u�j3��J�2�8����h�i{VW�F@F��� ��h�u�K�F���huS �3U�V��B��x�q��y��3X��v:RN7����:U{���Sr�X�dN*�6���LR����
z������,]N)�q�Y��ed��=2G#/y�x��������~�����Y�j�n���*�����h�5]��4�a���d��kH�d�����0��S>��T�$��D�<���b}*<S����k�'$��w�;��m�h�������O'4��$B3H9����i��m�����4�~4�%sN�'��)�B>Z�C��F9��c�v��1HbR�N�i1�H��irh�4qHaA��Hx��3KH)O %(������2sIH9���o8���IJ�w��-��X.I�������1�{R,U�����Q���I���b��L�I�jL�@��4�;4RJr�)��8��:����P��%(�(���N�1iqH)iK�)(��(4��ii�iG�������P�)&"�z�v��"D�OZP��2*Yi����5��<��Z�9'>�=��5�:5T�A\����($sC�(S�RMB��?�Ki��E����5���O��We���h;�z��Zl����Z*�'R��s�8�����K�k�{���tw��(�!))�ZA��������Z\�b�C)��h�NQ�M�_j)�<���|g5
������E1����iF����	��f��rB��Q���hi�f���jl�f��Y���{�[�z��%%�AN�m.h��O�&i(h���:���K@��g�E!�n��?5(�	�ZzJW�CN����Q.�;�Y�<�;����P�#��)n9��y�Z�v�}*G�v�5MX���X��h���������I&�R�����lu�qKR���jH�8=*i��a�M��d��x<��Px���qJ�����M������pN)64����Z��c�4�`E`	����N����VV�����I��i�A���M���@>�JHM2&;S���-���*���U�����J�Sf��mJ��z����(�U�X��=��	=j�2��AU@8�`�s��M�O�M7WB9���:S�(��Z#63��m-'9�j�&(�.����1���c�a�=?�RL�h��"�mb��F)��Ru���H�`�R���@(�4�����)W�.���H`8��8�i1HaHi~��La���4}(��0���3�@4c�<����41��/jL���
;��3H`hh���f��vi	����Q�(�i���@
)A����O"���K�P�:��P1iE7�8�@;q�QGCHa�)i;�j@%-������4ZY�&���M��<T �JNj,kr<�&��q������y/N���y��r@�����s2�a��i�T���n"��w-"����2x�4�sI��q0�8��h����+�!�jn9�WUT���Wu��%'w3�Q�DX����*�ga�d��Q�ih�J.(4�Q�P)Q��f�3@'�K)q�x�����&���h�.I��A4���g'cH��2�j�-D���|�|RSm��4s��E4���@����o�9��
��W�eU���ZJZ���s@�(�.9�bP)q@�a�.x��R����!�EP�ZJ:u�c�E6���
`��8�SI�:�E
	��������u�S�B��K(n�iF+F0����ql
j9�\�q4����Lb��M+19��F)9��
�����b�M�����~H���+��X�)F���A���1���4Rm8#>���r����Q~4����Uw���c��0l���>3������
f��y�(=kd[�P�r����r�6���Vxe�p�����pA�����5(��Y+G��j6��>�O�Z�bV}��[v8�a6����Q��P���P�j���+g=�F�W�Kc�����)��HG�kt`��z��J*�c��
��5 �E1	�(��dt��	�����i@��
(N3O�4b�
���9��1�K��1�ph���m%)�b�����:�z������sN�4��1��zPA��@4�����G4�L�>�b�����.9��&)����1����-��H�� �E��
Z;R@zP)@�#�h�
P3@�b�)�P)W�8�
(\
')q�H4�RA�����=(�=�1��GjLQR1qF(�I����SI����u�4
J��b�QO�R�C3KO�8�_���@��E���Lv$u#����j[V'j)�QK�	�����a��1��)�zN>������+�I�d�<�~�y�\
N��;��h���4��)�n�HT����W�����t���$�t���*��a]$Nv�z�\^�EI�L+�kX�����*���rT��]�8)�X�������+Z]N�J=LR���Ja�T�rylF�L�MHV�1J���w�S���,�j�iS��Sc<U�x�2��GJ/`J�	�&��e���������c��W5q�s�Q	�'j����*d��L�^zU����y8�rD(�2(�IU�c�Mt���eS���'�5Z�L�t����?S]e����=J���J�[���8���@����������zd��0N+��t�"�f�Hc����U]��V�����Q���e<���BGlWE�v�4���c����B�^�c��u�N�b��!�b�������I�1H�
-3������i	�i�zT�.������<���8�9�j�'cA%@�����/~>����8�4��
G)\���n�*���VLd� p4�8�v���Z�b
�������������.���s>��g�|7@�EOq�Uas��(
3���$�+.+��5 ���"��\��G�5s -c�v��j��V��t\��k�;�t� �)����ri�
��^���To?v
�{����+����9@5q���q�9���e�c��%��g|l����Q��P2{
�X����F+���Xs���HG5�	�r�pLU"+��W8gWb<sF)�PEh��b�iqT�zP�������s��)���4�@
��h�<�LP1�c�)���f��;�A����qK�)1��+�n)qJz���+�JZ.(�
#���J}R�h�4�LR��}(�;���
\Q������O�I���2��c��Qp��S�I�.R���Pb�K�:�����(�f����1�8)q@�;<Q��m1�h�@��@
�)q�8(4�4��}iGZS��zt���u�1{�����L������!M!Q�.jYhLsN�%/5%����q
&�K��9��$��VKR�oavC���'B���d���X�~�rrEa(��h����SF�S.e
�������<98��\z�)��
z�)��4R�c6����LTJr�Mz���m�E��z�Li�n���RCr+jX@,��=k9�v6�M=Yj�G��S������cD��������]$7�7����x����e9FW:�#(��nt��h����=NzUe��P�=�Z�.�$��2
Ei���#���!�S�W����&{f���u���t��n�z��^�����H�����X�}J�mj�6r���m��������\�Q�A���Q9)1�.$�9x�s\+��Un&,[��#�c��DnC�PI5��9���
��7?>�����E4����(*�`
W�����p��A#�4��6�P)�+�[���X�%�<T��Nic$������*$_�J��E|�PA���IN����`�5
6)���"����kJKH��Nq����Y� m���
�������h����5��U�Y���_�z�j��u�hi�q����������M��O4�n��8���#}5HH��{"�lL��+�7�	Q�����8 ��#)"%�I4�R##��2}��LWkj �0��=+����)s��F+HT��2�4������R�.;V�#qF9�;<���S�s�1������$t���S�NU�f����\!e��g�+��������G&P���0��j�Uf���5��m�>��g���Q��X��B��--��9���Bt�f{.B>���e+�g�N}� �R}3K�.�������W&���r=1P�Xes���u�\���l�������A(�c%�^/o#e��t��;I��6�+7Q�F�9�������P���n�bH�T�OL�q&��vC���x���h##����F_���j4Af��7~����:����O4���X�rJ���4>C��[8�-)��������$���#��in=���SE1��R
�SG��Z,+��IA�z��V�I6����od��z�H���Q'��(�X
���c�kb�
��T�
&W���x�i���li<�
�i�qW�*�O����gW
�Z%b^�=���,���y��{&���z��M�� �A]�kF�8��oS3�!�����0}(����8� ������5�o-;���

#~�����h�r����H��@��;�:��[��Q�
��z��u0�W��N5������C4����}*�p�c8~A��v�{w3�q����k�4�\�D$�d��
���O������-�(���3���{�>{_��G��^���s�=*�����F��88�c\��K��2�����e�d*d9���.�uoq�AM�w"�=�ms��J�(&�t���+���c#o"���Xn*��m���O����F�VG)e�\��Tl#-���k-���U�z%�(�,k�k7[�����"�r)GyY�Xu���F8��/���2��{��H�+�II]����#�J~��$n�LS�(��J�3�{T��N	�K��C�w��p�Pw�z�]��s�}����3�EqXO��GE:�Vp���1
��d��-?�rd����kx�n������(��!�cx���b�M�0b�g�f^�0���o�Z��(p�������z�*rN�6q�V�KN���p7c��jzI������p@
�pL��`RUg{�:q��"�����������)��t����2��
���q�s�
�v���Y[S�T]�3m4���l(p:�a]�|f%?jm���h[�EH���
��:��&�7���Z
G��)3���(����8���p+����N��&��H�
�]����$�Tb�:��[��$^��V���+}��\s�sZ1G3�E
MZ�o�3�i6%F)4�ylT�H����=��i�OaTJb�a+��p�"�4�Oz�o�s����x����c����LSH���v�$`���J�r��"�_���0�=h��������M����pO�!�U-��U�������[�8R�eG���>�w���Ce�.8�F8�I�~T�q����8��B������,w9��f����b�@����>"$N7
���c����v:����j'y���S���m�67�����s&	�;�:r��	�QXs���n�l�g��"�5����8���R0i����1��(���-�DFjX�����+7����O����UV���W_�M\�Qi�1���\�cZ1�Y\B{g5���������uS6T�E0�$y�S-���E����\v�rL���r?#��:�P��RM1�2M-�Q
!j�Q\&PP�����p0�����j&L�>
A=NfF�!m���������Md��8�Q��0��\��H����yU�' V��1��9$Vc�	8=E3v9�d��C��bI��W�\.	�I��q���YI)?�W����[q=iw���tKv��}�s�SV����|������#�,E��q[���o�hk:�G���i
�{���I"�y	�<T�yc�H�r�@b��JU��0�=�6��E�L%:sO[��=*�O���z���'������&1*���DY������<����d�x4JL.S==*}�$
�3��������N��
g1��n�1T�������)�*&e�����c��"6�m<�����'n��2c6�gQ��R����L*{c���c"�6��:�9��� C��zRn�J�@����&�6�E�����w5U$H��p{�k�W-�.F<���&�,���vg����r^V �	������	��c(��3H���I�&������0	�����=�������h�H���E� d����g��I�qRn��Es2gX�O�&�:U6��%@�={U�|�N�G���)=�2�Y��c�%��C0a����5�@�f�X�I�)RV�y�������>k���7?,��x�>�5An�88��&��9�.k�D��%'��mgA��d�3H��d��T���.(��P�,H�����iN�����")�*�DI2-����+��(H5<W������'�N/	��H����Dy�iE�Q.�=��7zUD�N�I�b?���;F�i�*���9�&�]�����V!��o������VI���i�g*��$z��:C���-����\c����d2�!c��k��@�_/����I��/K��p���+��$P9���N��eH,���D����q�R��*dY9�	Pw�,�������*�1�C6��V\��4bIm%#8>���J(qWR�$L�0��i�rlF9�J��T��LQp)Oib���f�`���z��c����x�
�mH��g����=��r*�8�J�s6� uB!aFH�>tr ����Ya�s��c!8�E&4g�����&���������cQ��3��WL�/��Vo~��:�
�)9��	���VWM�s�����k�����0���0���Sx�"�<�M:�%�%���"�m�K�(a;�[�3\���[�^�RX����fsay(p{��'5��F�k"��P6��z�S�MW]C���R����h�rT���Cc$g$zRyN���#HE�����=*��X�����[�����\b���0'�W�9�����\�-��J�N�dMV�4���sJ�2Z�+���G)��)riXM���Oj�f9���sN�p���L�;bj�b�ZUs����l�,;�,��U��V�Z���GZ���@W(����e~R^��I��q�Y�`��3]4�#���#8�R<v�^A^1F�Z���3�+�/�C���R�1��
i��As���o��T���E"�����BeH������z���)�j�$2�9�"�A�#�ZV������'�\E=F@�&���r�]�OG{�3VH&�e�g����y�MO�p
0.)��CL�������qW!�k���z�����3�u�+9I#D�f�O�2=sW���w>�B��~��Ap���r��d�f���?=KO���v��G��Da~M=Y�����QJF��Y�������U�D���RSMQ��5�jO���-����rC5�����e"H#�Ekq3{@�N��������0}���_dk���B���~�Q[�*�����!ZBw�U���b�g���Lo��~tQO��Fi���QIS������w8��������8�s��s�E(b{QEj�����z���,�������I=�h�q���p��Ed�����&JFp?:�Xd\������\�-��@mRF;�W��$QESHf4��
q�&�~�QA���a`�9���:(��	���~���3�S�E�Hw��9P��grx"��N{�A`(��GM��.�y{V������C��B�(�m�!�m1���������Ms�9�#^G�U��VC���O1i�t���P� 7QU�5�w���R1���EgNN���Z�F��S3M�H��1R��OZ(��.2d���QSd>v8d6EHN� �Eg$���fL��8a�c�Vl�f�x�h��2������0����Kq���r�,csJ(��L">����$�E�`�u,�(��#�V� dI��`��(�BE���RD�HP���4y�Z�5c��Er�yH5�go* \O|�E!�6-l���~u���r�E-��YHNy��B���*.�C��I��(��P�����(�Be)�x�/�&������Hd�@:���n������IU�>�Y��E-���rN:���r?Z(�ZD���]��~� �A���*\P�;����(��d���EK��u����1$����n;�=�����U���bs��
���E$��L��EVV3m�C��#�(�����K��)�8)��6�����D�0Oo��#c�#���`�v�MX�'��P�>��L���~tQAE�����Gq�����)�+�-�L�OA�������c�rc:�3���V������3���a%������s�E���-��������nv���Wt�h�O���H��E���f��3c+q,�F={���3�)�}h��QHW|�G����}�[[!x$)&����)r�A�H�@4��ia�T�=(������N2(�22(���V7��h6����{Ww-��W�6�t�b���vI�����QB	��P)I�����
nFp�N�QEf�$�EQd+���
endstream
endobj
42
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
993
/Height
1024
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/SMask
44
0
R
/Filter
/DCTDecode
/Length
45
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((���"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�R�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��)@$�I�@	Et:W��S���~�.��6r2�`b��;�O����1<J{�OX���(���s���<}r��5�������e�'k�����J����I?�Z�������H�n|e�G��S/��8�d��x�Pc�m�/�4��4�����k
���?�SR�(�[�����B��(�Z+�f���7����>���j���^���<Uz���#&�-�E����k�%c��4�~�S����P�Bg�Z��7��������:+������>E��{���x����j��!�y�O��'���(���e��������iRl�4��'�����LQ��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���d�U��I\�Q�'�
����?�v�����E���2��PE}�~��/�
�����!���3��/�=]���&����k��P�?��X�v�����N����.-5�w��a���mt�_��!���c�{3�������+������mG�<#��>������h��O���A�c�r�1��~bQ_�k���t���O���!�J�#��?��?/(���|+����h:L��Y��g��;�]����}��������?5(��[��.���OL\��$1�$V������>^�=�=����3@�_jj?���'�jz��vX�Q���\���%3i~-��\X������>U���V���ug��O���Ep���u��+Y�1�Hn�+�H���[��Z�<����i��l�N�gsi/�'��o���@Q@Q@Q@Q@Q@Q@Q@R��`�18�h(�A������#�xr�(�5���Q���5�>���I��^#���b���?M�T������B��|���Au-U��������)��k����G�����n�8��>O�@�v�Ms ��)%��TR�����
���}�������V���]����~]��0G���(��M@���> �O	j�?��g�������2.W�� �4K���B������Y�������~$G��+t��&�O_�tP�=����6�/�-T��8���9�����2���O_�G�6�0���-��?-o4��&�������&O�*�~�0`=A�-O���s�������{(��dP�E���
�q�e��9����?`?J����[�WA�J�u{	@�� �
���P��W������+}��k�e��@�����[��_�����7^����K .A�BH�@�:��w�����<J#�}=4k7���[�l{F|�@���xS�V����<I��j��LPo���?PE|m]w�>���{���Nx������?�7������~xG����6�T��y!������u4�O��e�_m}^�K��=T�f�~
6��������}�������n�n���������2�~�9�v��7����������J�����2��4�>�GAkl�� V�QEQEQEQEQEQEQE�cIch�Eta��2�\��������x[Iwn�Gn"s�L��(�<A�/�#P��\���!���X��8,����~��#������I!'V�������E�����4��v��9�C
}�����}]2��5����q�.�a���mo��R��n"O&l��L��@��W�^3����I7�����������$A�>�~��~6�[��}wD�KE���G�=K�B���h���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��������jB��ze����yc	�v8U����zf�{���g���^]��!���v�(��>��6��w~<�M����A��O�@�������+e�_�V�|8�y1����uc�I��|�5x�]�����h�����c�5?��p������#��Y{�n�y"i<������5��PF�����yz������[�d�H?�k�EQEQEQEQEQEQEQEQEEso�-�1�uI2����|!�����[MWn�l����c*MwtP�� ��<%{��mOU�$=�g����^"���We��MSL�#�[��������}���O��6�����5�G��(�����*?:�H ��k�N��x��'u�N������/��?:������G���-D;�7���1��X\D?�-������W�3x�H�&�l��q��<�T��G����+S^���������]��1��P4e��G#�V]QEQ]�����)��p�C�e�
����@��6>c�������?����U��'�'�����F�?A��_[|9��|)��*�]�����v���������m�(��"�8�TA��tv����)�����-jK����x���20�E_�{����S�H����66����G�c��������(��(��(��(��(��(��(��(��(��(��(��(���h���?�L���,cq����FO�\��������%��#�x�G�����)�dg*����J+�/�9�2,t9����?��/>6k��[Yi�/�Gv��~����}�.��}
E|�u�W�����+��c� ������.3�k�����������`g��7��D��h��f�����j��������NK��Nd����NMZ�?�!��H�id��4K��~��)$��sIO�?����}����� � �(��� ����_���O�d"��{������h�_���[�?������N?�i����V����������� j^]K����������m��]����[u��c��SL}�H��w�dh��������-c)��{���N���L@�������dQ���WW��D�����o����?���
��&��N[3����x�"Ym�Icn���T���QEP@`A���(�|y�+�.��h����Z~"$��cc{��z�������	ntuOi����v���#����������cxex�FI�ea��uS+�o�'��
x�:���}�-��#�}>l|���������������B����'��$�u���<N�R$�)(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�:u���}
��m5����8aB�������_��>��i�607��B=?�oE�5�������sc�I���\O�N�OP?����l��@���c�a��Sg�]������:}�q����4M/��lz~�amag������u>��Z4PEPE���Y�*��I���������,��\�?����O�>Q������G�]G�]�����[CR{#�)�v{m����S����-����W�9o��]CY�5�hj7�Y�4���5����yc��G����c�����v�������"xN�>f�l���a���A��h��=Y��K�>�����c���������S��7��������?�
�������C���>�o��-5c��?�.����g�]5a�lc����Z(��!}r��z|f��}��S���5[������]�G����@k�Z(��?1�v���M���O�5�������EjZ����X�5�1����?�9����xtl���T��-�`�]��G*���K_F���Xt*pkf��~ ���5�B5���+����I,z���+���-��}B;����?�t�w�A05�S���YKUm��q����Ey~�����[�k�F=IA"������~9����i�Y�=W����X��H���Z��gGE":����)�r
-dhQEQEW����m^�P�����h��:7�
y/��go��|��Sh�M�������m���
�*(��~�+�|��9uk�[�D`����;O����#Ox��E����.�)�Z��+���o�]=�������7���iB
K������.��G��9�!����e�����Q�j#�B���8���
(��
(��s�ZF��_P���!�v�9?���n�M���Z+�����P��C���a�������$}q^y�|O�V�Xh�8����_/�/���L0u%��4����������Qy������\ ��r����	�$�!��h�������Z����S-���)��1bQWLp�L��:_eC^�l�"$Z��7w(���l���s����]c�Iu��Z�:+e����]W����8k$��L������VO�~%c���I������QW�jK������zg�.��3����R'��/���������������>�S��Y����?�i�s����cW��:L�F��gtW�������dkUu=������}�I��w����[v�'q�6���?����?�����VoI���Q����<5�m��=���l��D����z2��_U�B������[?��������}����>���[��'��N�����	3����v�7�Z��d����g�B�%���7�2�����+��>&�[V*���I[�Y�������k��X��d��H�eYNA���%�X���/��uQRPQE�x��Z�C����t���o��>����_��	5�<�_�M,�?�\J��;��
�F���&t�zU����S�wVGeu*�pA �W�>/�.���f��]���� ���>�����Mk�BK����r���W���Q��{��K
�l�:�t��-Q]'0QEQEQEQEQEQEkO�ot�|�>���O�C!C��t_�^(����0��?��0N?�\�5�QQ*q����IC�g���&��k67.x2F|����?#^��x�I�#����C*��/�z��W�4�e�	VX$x�S�tb>�W,�0�L1�_���W�����=#lwS.�l?�����?�k��-�W�����e:e��e�	�~��+���5���ON}lw�R+P�C)�)k��
(��<�����x�e�X���6H��A��5N�xo~������^$�y�k�����
�h%�7c����9�������z���:��7vs.�!���B
~ZQ_N�e��'�������/&���D��L~��d��OJ��X�^)����##�#��QEQEQEQEQEQEQEQEQEQEQEQEW���}������-��Q����vA�c�_W�9�����BO���S����t6U�X�1���;��Nb��8m�H��B$h�UT�S��}?@�����;u�1.�Ory'�_��(����������x���y$`������k�f�k��^�X�oo���^����6��CIi�H�
����!�m�W�jZ���v�Z���7�IX���{Wm,���8��#!���'��x|7c���������z��5�}�������{��>�0?J���
t!O�GJ���0��+S ��(��(��(��(��(��(��(��(��(���j:[��o��[�a��?\����~)���\�}���5���^ED��.5%�����p��j�T��l�A�c�5�h�>����m5kt������l�a���5�u�<7��D1���l�A�E|{���Z�������s�\��T�*��^�k�5�+{�d��O�T�B�g���u:�����>����?�l������g]�������Z5��������QE�QTu�Z�E�{�R�;kt��z�@:��)���M�V^�g��7��.�j7A�����������~8��}�-<8�ahx7�s�o�~�����������Y����MwQ�7�M�����>+�������q��3�+v��c�^qq<�3<���9�<�Y���z�tW�
q��pN���&QEYEPEPEPEPEPEPEPEPZZ6������U���g$F�+}W��Ef�CI���Z���;��S���g
�}�~�O�t�B�K�_|9�
�k~�\��������3��	����Z�:s�C��.�w��f��W��<C������E��{����U�+�<'�kC�vC����13f&>����pT�T��TwS�Bz=��R#+��0ea�A�"������(�<s��K���ZV�;Q<�����J:q��?�{S������^	?�����[��Q���
n���[X�m��\t>���W]\��-Q�[	�����_hm���_i�,�����q������B�j+��d�����QEdQ@Q@Q@Q@Q@Q@Q@7�|o��a�i������M����+�<�gF��v���K/��J������}M|�EaW
��M�b'Om��A ���Y�W�Mk���G'�����f$����������6��Y��]���k//�����+����-wG�G
�l���(�s�+��4|��!C-����x�/�t��NGE����#�W��@��.����
nm'�RZ^E��u���O��Z�'���
���v�o�PM��`	m��S��������u�e����JI���O�:�OF��=�	�h��(��(��(��(��(��(��(��(��(��+��gO����U�����90�����-O�������=�����t�]�X��on�������^z_�~��|?���:E���ZF"�5���=I�I4r������4��$q��TP0����(����w�[
��V.5�\�<��f���������`��l����g�l��?�x�0������u}������>0��Ww�jS�9��>#���}�5���]jW�^_������G9$�j��a�K]������� ��+��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
�?������k���a�m���v��������G�7��j���v�Q��|8�������F��P�P0�\�O/�����!h���H(��������/7J��&�q�I������A����9T|�"�H�\�7� x�N��#��Q�c�V������?�|��j~&�
��pda�F8H�������������{�^Y�b���f'�5{p����"�"U_�QE��QEQEQEQEQEQEQEQEQEQEQEQEQE��K����Qatd��Y�������{���(h�"1��7�v��yS0�����~��_1�XU�B��FoK:z-��h��<�GW���������<�����[�>����.��k/��7+(~3���F^������y��c����]�6h����+�>#|*��<�C����r���c����|u�S���ISw�)�����o��,.����H."m��MA_V����o���8j����_f���~X��|O��G�Z��������RE��������b#U[�������2(���9��(��(��(��(��(��(��(����[Y���W�h����)�t���o�}�|7�a���R�G�����w�h�D�$�Y#p]NC��_Wq�����9�	K]�,~{v<��C��t?�pW���S��������4Vo���i��iW4������kJ���vg��j�+����]������]YN9S�#ve=U�b+b�C?=>4|(�~� K��D�b-/��{�����;������]M�6�u��v�uar�d��Bb �A���6|+�>k�6/u�]16w��?������Gp<��(��(��(��(��(��(��(��(����W:��mca�ws"�H2��p��U��/�����q/�5Xwh4�a�����r�����t�+������ ��$���������}����z�]�PE�|A�m��t'��l��e-�'����du?�z����
RQWf/�oG�[/����k3�PD+��������������{�Y�b��rX����R��������������R�j�^�
*�m��k�ue~�EV�!EPEPEPEPEPEPEPEPEPEPEPEPEP]?��	�x�^KD��x{�����=�A���~��{��-,�in&qh�X��}_�/��O�����������w�A���lMe7gN����#oN����`���a��F��V(��m�c`���O��?�:^� :���8��t=��=�?L�:n��bEI�q��C������.��M���\)�P?�������<��bK�Oz�����1�$��I^�1�#��VUevQEjdQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEsI��t���4��-�c����}G����CW��v�D|=��g��V:���Q8U��S���==+�k�j�����3����zX���d�{y}�����W���q�P�}��y�U_O���l����9���D9U���=���S��?��[���oC�H�<M��=����)���I�3���?P����^/�k!&�,��7����5_ek�E���Ma���[J9����z��_�{��Gl����'�����z0�z�����S������:~�v9*(���@��(��(��(��(��(��(��(��(w�(�|+����/�p%�����G�=E}9��i�,����m�0&�c���������|�Z~�/�=�E��b�8#���V��lFUW[�41������|��B{b"��qlO���{����\]���JJ�+����[���\�[�+�����)���
lQR3������O���$�o�Mg.d����<��8v�O_�?<
��@�����&�~{{�{y@����dW���|/��;���&��wl����/����G#�h�(��(��(��(��(��(��(�
��f��-�4<~��`���ug>�����I�?�Y����G�Y�B�D����O�=I�k�?���B�J�|a{�n���,:F���>����}9@Q@_��ae=����(d����&�P���'�_�f��r[����?��������|~�g��
�I��o?���c���SG�s����+s>E�
(��� ��(��(��(��(��(��(��(��(��(��(��(��(��(���>xjOx������������4�%v8������E������Vuz3�=�}k�*;xc���c�5��T*J���u$��r�5N*((��jw��f�q{{ ��2;��Z�+�={�7������l��e-�?���?������{����&���������ybkc�&��V�>�q���Ax�1�}{�sX�a�{(��<lEok-6AEWA�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEu~��������a#fkW?+{�������c�!��K����0�3����o������+k��$�|/�%��.��H�������\��2������]=���W=��i�-����l�0'�c����z������E����d����kZU����a�B�[L0�{z{�Wh�;j������!�2���������oq��?���?����� ����*}?R�Io(�T�e=���|q�K�	k-gv��h'*B;���z�lG�\���q8f�����E�r�Q@Q@Q@Q@Q@Q@Q@Q@~���=�C�i��s�y���V���|��/��yfvL�Y�'-z{�����|�[��-��u����e���T������uU]nt���N�c��+7�����t{}GN�|���#wV��*��i���i���'���E���=�H�#������������o@Mz��~V��#�*�H��+GPE6�����
�{�x�N�&���f
8K���c������(��(��(��(��(���:U����iV���t������5B����|'�����~�=��4?�$pg�_�C�c�������9���z����`N9lX���}�jQE��mb
A������2�s�����H�i�����!�-��n�'�M�=y��O�+Z���L�T�pr<�S��S�no�}���Gors�UZ(�u+�(��(��(��(��(��(��(��(��(��(��(��(��(��(��+���>����sr�o�&�#�O�_����j�o�>������N�����.28*���k�������=/�x��(�4�B������z<=a'�=��e?~N��^��J�?��&O
�b��7o��d=�#������P�W�g�gg���3�'�Mw����G���V��]FQE��`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE���r����Z��1�t�����V������i"����c���'����=�����S�Z���5hu
2]�'O��{���>#�����>!�v{b�X
�E��4d��;d,����������x����=��I]a���V^)�e�����J��a�Gq[�P����������[�kv���=G�u��{�Y��/��E��0�MV�o!�w�1�?��k���ymne�����&(��XpA�k]U���W��K���(���(��(��(��(��(��(��(��(���w�%���vf��X-�}v�8���+�(�IbI"ex�VS�A�E|Q_E��j��K�}�sL�LM���}1^~6���_3�[_f�N��+�=#�����_�������X��i�"d���+�c_����_���8<-�W�Zli�����#�P=��~�QEQEQEQEQEW��������Gaq*m���k�29��X�
���k��iskz���[�����?�v
?�~�i�p��}������a�G�����X��(�Goo,�0H�R���d��������o�9s��K�?��~�W�?����]F����Z������#����������q��P
(�����(��(��(��(��(��(��(��(��(��(��(��(��(���|����O*L,��#�k�~c���%�b���x�)���xB;��m����#���?.�F��UQB�
�`0��ss���{���TPQEr<G���.����������-���)B.rQC��S�<O�/���<U%����,3X<3~$c�p4Q^� �xS����QED�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@�
�5��u���[r���'*w�������e�"
GM�|�A�����b+����x�o����]�q�����zc�����;�XlG�|���������X�mdY`�C���e=�k�=p�!����[?�t����_����A�P:�}+�� A�iJ��.dgR��V|MEz���5�����1(�'�S��{dv�<�rS��<I��N,(���B�(��(��(��(��(��(��(��������{d����W��r���_��Z��������8�	U��*���.=���$�}�EGo2\[�4G1�����2*J���
�����E���=�"�^Z=����� �|K�W�����.�������QL�Dtu?������(��(��(��(��(�c��4�|a��E����L���S�W�5���A�m��>������&���������J(����#T��A����KX�����������Z���k�]���p�����W�Q\�{�a�M#��.z��QZ�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@{����y:u��2|�
�xI����}[�^o��*^Y"(�I8��������
6,m��P��M�G�9?�q�jr�������>n��Q^I��|����?��.60�mt�a<.���k��_����5�jo��(�9�G��W�J��$�1y$b���$������s}uK%�eQ^���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��G���i�j���N���1�)�����?S^�_W�?�k�	�t�FL��j>f<�@�Q�?��^n2��y������r��EW�zo��kOh�:m���e�GTn�=���K�&�u��j�M�\Mcp��������������i�G�F�I e��_��?Z��V�r�{3�G�<�t|�EW�y!EPEPEPEPEPEPEPEP������9���$hO�Q��*�k��'1������m*�F?����j�M�3������������J��D�N��d�O�
z}q������FFq����0�U����EPEPEPEPEP�����4���\�v����7��P���~���g�7����v�t
������Mt�U��/B�o���ky%URE_�#�E����@<�8W�q���q��DT�,[>^$�$�I��IE��QEQEQEQEQEQEQEQEQEQEQEQEQEQE�|����wk$��lT�7�p������k��g�#����$\=��Z����}���k�����]�c	Zi�
(��N���h�olv����L������W�WI�Y�����z��4����A\g��n���t�<:����QE��QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU�V���{mF��\@������j�4�������+����B�����*��O1������j�����?����{&�2���'�����;l���x��>�v�{T*�X��QE���'�/	��7�F���n�|L�`p��I��{j�k��xrxn�N�h���H�A�O���&�J�����[{�h���:7U`pA�c[�B�tx��>�w[2*(���`��(��(��(��(��(��(��(�/�Ro�_�]H����^�^e�>������?��M��Y��q
���?h�7��=$��S���n�W�F|+��[)��Y�M��
(��
(��
(��
(��
��Z5��gf��q2B1������|��|%n�*u;wa���P�h����P����+�h�����Pq�]�
����U�_����CD�������������0��Q��v����+�<`��(��(��(��(��(��(��(��(��(��(��(��(��(�rx��?�z_�����2��3�$�'�E��JR�M��s4��������[K���h P���2���5�E������VVA\��
_�������V����_���WC^=�E��V���H��#O �03�,*��9�(���%7#�����O(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��+�o��,�������M����'�#�������Mn�'�3xc����9(��d�����p+E/ku7���S�C��*+;�o-!���I�$��FR2
K^!�x'��}�Q����n����d��@���{�fx�G�_��4���w�
��n���pkj}�������q>9���v3������l����u� ��W��<7�QEQEQEQEQEQEQE�o���|
1�����A�+�+��&�����������<G�${t?������z���e9?���Z����y?|Q/�4����j������(��(��(��(�M������������Y��do�^e^��$B%������n{|��j���(��u��f�<mm<Gb��.����*�e��)��%���gK���k��S�rc_��gEW�y!EPEPEPEPEPEPEPEPEPEPEPEPEP^��;i���A�V��F�9�o�������t��x6k�=��}U@Q���l\�i?3�	j����(��c�
���n���������%��@���G�_L�*C���cE,���_j�������g}��3g����]��N]�t��J(��C�
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��=������>�w&e�[l����/�N�^������u��
v�S��Yo b�����~�#������5>������F�������q��'��g����W�,QE�v�A�s�����n����$�?���}����h����w�d�x����\r���B��Ky��t),lQ��R�_S�����)�O�u#��+��
(��
(��
(��
(��
(��
(��>��/���I�W2��eo������i���!�6�'���Z�k���9?3���� �+�]��~��L�:d���hW��k^c�K��_�'|��qD=�M�"k3C���(��(��(��(����8����#�=6f�����.���,����h����h�z(��
�o�3����C��J���U��s�[���_�k��G�qc��rQEz��QEQEQEQEQEQEQEQEQEQEQEQEQE���������mal�����?��GM�k�F��>���C���_g��j�0�v����bw�#���QEy��r�/��|�N�W�.B���}}	�C����S���}���+_=��������cez��QEvaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^��>���zM��p�����d���#�c��W�V��u�����5H�l�w��o����"���F�*{9�}uE"2�+!�2�E-xg��o�]�+���m���08&��W�U��l�?��q4i��)��G>�I?�]Z�������M�2QE�0QEQEQEQEQEQE\��~��X�c>|������Cv�����
��4-:��m��E�U�(��n���%e`���/~�����>��A���d�p��m���|1����%�����ZC>A��(��(��(��(�~�����j���GA^^���������"e�����@l�EW����k�������o����6�?���55�����������E��XQEQEQEQEQEQEQEQEQEQEQEQEQE�|*��w�-"2o;��R��-}[_9~����%��-���%W�_F���w�o#��+S��QE�v�F�����d����v���^E]�����|D��	C�@O�Mp��a��J(�1��&QElbQEQES��I�$1��z*)&���)��y����������j-�b�]R|=�[�������+�;�bu�.O���F����+���9J+z���$���jAGR���~ V-�[�c��H��S��$�d���#��)�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(������e��)&��$jY��
����o��*�?�x����y��-�We��������{��%���G��e����p�%�<Z��2�������
�t����kZ���s���J�lV/Mw5X*�����r|;��
��,�������1��g�|�����;2��>��:���O����@?�w����	�!/��d���s'�cMc��bx����:���j����#�Y3��i��H�����x3L���M���K����@����9��K^uW6����RPJ[�2x�x$�e�Q�� �O��4>7���6��K���4`���0��M������Q���_[�������^e^�)��H�j��n!EU�QEQEQEQE�|,��g�<gl�o�����������h���|�������T~��:���'�iEsT�>���+�=����m�C�������[�4��2HG���%|�U��?ux��K(��S��1����y
Q@Q@Q@Q@{��y&��
����_�O���`���t������?��������QE������+V?������
|���/������?���e�����������<��+�<���(��(��(��(��(��(��(��(��(��(��(��(��(�f�l�k�D}��0~���B�����t���}J��y���E?�5z�x��z��p���QE6WX�y�PX�s���9��g��������� ~�VIq+Oq,���b��Nj:��$����l(����E� �ZY-[�^.v�����g�4{-��W�3Lk���O��c�X�����6���Sdx
��������7H�B�]����������>#���������x��4�2�J���l��b��1����r�����U��`b�'s���:\;[V����rV/����]������n-���)������SEr��In�����������O���G�R�EdjQE
����F+�"�3�%@��55�k��-��"��S�ih�^?�?w��0�G��_OW�D�5(>Y\���<�W��V��5!��xjs�|Wum=���u�N��U���QW�^-�����S�l�b;��d��}=�E|���j^��0�F�����p��?��zTqQ����ul4�k�9
(��N`��(��(��(��(��(��(��(��(��(��(��(��(��(��.��kw�i�ZKs;
�'�����?�|Y ��/i�)�M��_P��>���}��N����zM�A��Y����-|Ti��VuP����Dyg��
�I�Mtf~�e�$(�g�}k�4mL� �t�-S���-�=O�Z4W�R��|L����?�QY�Q@Q@Q@Q@Q@C�GZ����|�\49�u���^	_A��R�-:<���������|�c�$y�����+��
(��
(��
(��
(��
�/���m��~��x�S��,�%�
��>X}��������I����~�+�+R�s���c���+�=p���z����?�!�%��;��cy��b�E�e�
�:��Ha���g������$�I9'�4�QEQEQEQE��������I����'��#'��^y[����������-uy��"��@�QE���m���m�Ki��Wc��
��g����e����$�"�
G��k��U��zL��(����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��>���������_��������z/'�����#�r1���W�Y���Ov��8�e����_X�8����	�JIdB�(d<a�k4��[WV>^�w�]s��'���`�������[�����i�������s����?��A������*��SM��,4)��
(������(�����_��#P���q�0���W'�����BrQ���W�j_�9lJ��}x��F6 ���^|t��,�4Q���'�
?�m-Yt1�&��{������O���j?�I�g������t��G ���O�U#���������p���3���A�u��<3�2�s,�|��\�����#��g,5X���&��g�QQ�\CuMk4sB�+$lX{RV�P_Y����k{
Oo*�x�d0����~(�o	_��@������<�������W	_f�:e����i��B[i�c��#���5�o��;s�}~�M��;��F~���
z�\G�\��N*��|����QEu��EPEPEPEPEPEPEPEPEPEPEP^����M���{�M����������N_����7�-��_��;��F��7��@��4�:�I�m�,"[@�G�>��'��1u�����������["��1[�6��p��Q`(�(� ���+;\���
��j�qZ��<��P9'�SI�d&���4W�x��pVx�;��qvx?D���:���O�3}�W�����o)q����T0U%��,������Ww��i����Y���n|m��l�u�8��'W��s_$�#���vw=Y�I��B�.�0x��UI�+���Z�������>'x<��
'�������(���>���O�>���/�������x2�1W������W�i�=�����D���C�cX��H�B����e���?��@�������7����8�}�\������^�����QE�tG�F���������
x{����4t��s�/�^�������?���(���(��(��(��(�����_c�j��/��e�0m�����@?�k�o����2�����r�������5��y��m��GyQ^q�K�Sj��_��V�-��h��'����_�������K������iod_M��>��|�@Q@Q@Q@Q@(89i(��/j���ur/-"����
�kJ���z���~xV|��k�c��3G��W�P^q����2���Q��@r��5z=s_����-rd�f�t���Z���j'�gYsA���(����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��>��g��	}mU�>�t���5�������q����*k&{��QEAaEPEq/����p���������;O�M�~���_�_�C��9����M�*H�i���{WM,-J���z��S�v{���k�xwr�Z�Bq�,#����GO��� ��p���4��z	�����G�5�d�I'$�&������}N����C{\������s$m�%m���+�X4Q]J**��NZ����|!��g�r���p��v���lj}3��`
���������g��UE:��3�u�� �g?�j��~��y�g������g����U�>v�����n��~��]�����O���-o���l��O��QA�Q��?�q��GJ]I��zw��U��b�M�]2!9x��O��^���w��Xx������b\�l�<yOu�]�g��KO��.��Q���u���S���;H����J�>f����?���V�����tk�����6���?�m�U��5I�<@���uN�����Qqvg�)+��:������a�����������k�����E�e�X�`�����$���8���z+�������u
9A�����m��@���z���I&�
I���QLAEPEPEPEPEPEPEPEPEPE{C�����->��3,@�d�?�Z��������]7��������H�b����1^�QY�Egi����X�Ge~U-x&�I���8*qQAE��oC�]jS��d1���C�G�>���9;"��U���/���m��l�W�sD����?����oX��/��U�������z�aQjw�:��=���5��]��������n�K����XY%$��H�rX��J�h���������iYm���7�E�$g��Td��v�'������gt{�����[��~��4
�*����X��H��~{a�t��S��:i�V�g�Y��e�[�&�!�����x��o���M����^�E`�u{�	K�����GW�Fm3Q����H�?N��5�z��}�_=��k-���RA��Pz�8��+��hk[W�������;�H��[r�8������J2��=|$#(�c��(��#�4�5	���2������=|�����?48��\�?��[�W�5�c�����W��QE�w+�IK��A�gr>��f�B�o�����=.�?����������W��V���U�Q]8QEQEQEQE��������z����b���?M��UyW����������{�������z�x��sU~G���-%�QH����B���z\�I���s�j|`��V�ze�6�2A���c�����M�?�z�E����{+1*?��VQEQEQEQEQE}���k�[wd����2 ���?R��U�_�?�l��S�����_M����_�������n�'���J�}�KE|Uq�<��0��F���O�_��;����Z@=���j���b��g��r���(� ��(��(��(��(��(��(��(��(��(��(��(��(��x;A����Z��/��h�� �`V�|��&{��PQEs?5���>�R�T71�U.2s�;�4�&���RQM���|[��Z���n��c�>i$�Os�^�_������l�N��T,w��m�������_�jw����qs)��!�?���W�Gz�Y���J��DQEu�EPEP�]�*�M}��i��6�k�� H-�"�:���O'�_��
|I��)ir_u�J!�S�H_���\��S�w`Z�k���E��QE���Zo�,Z�V���#�p�������e������,;��7���r@����������+��h������.����-u�*�3Q��L]8�]Q���i,[	���" ������W�u�U��[���Ic`��� ��@�SW��5����#$~��N�S]H���\B�Q\q�_�n�i:�/]����y?�z�:���&�5���d��p��O?��j�n�������c#�R���(���(��(��(��(��(��(��(��(��(��+�>�������+g��'?�<��u��u�2k�Dr1)��'�-a��-)3l4y��{uQ^!��|��Bkf�_���o�Y��H��_����5�|�����x�Y�'p{�
�S�@+����<l�w0���+�[h�8��0H��k]����?����Ez���\_S���$��l�^������3�,��^�X��H:���>����7����\X�Eq��"p�^%Z2��#��Z5U�OEKW��4{F��.��������aY�����j����I5�?�?'�����}�e�V6%s���������3����ri��o���$���z���O|t�-�O�p������*~�6
(������}��2�?f��_�F������	��-7����?�� ���������c]�������_�QE�u4|v��G�������/�w��^{]'����x�]�9�����������XEyWy��QEhfQEQEQEQ[�����]������A�������JO�]�.gd}?�=/���E�.���ZA���7�MoQE|��3m��W*Ip����G~��PV�/���p��5#�\�����������
B��%��\H���q��gS��3��(��
(��
(��
(��
(��
(��=��K���3X@[j��������b�����Z���?
�e����H������uQE|������8K�>[�Tr�RT��+�+�?h��5���x�����������<\Lyj���+s��(��(��(��(��(��(��(��(��(��(��(��(�/�2y�����W�������nO3���{��)\Wg^
Ui�y��'xG�+������Y_E��)�J�������u}-Y�.�*N���Ux?C��(����
(��
(��
(��
�<����+wm�m����'E��v?�k�������8���_
����������7�^�u�cZ�����jZ���.��������`x#�^��|p5MKb���l9��1�������]��=JX��Zz3�(�7����/v5�w����\����Ll����Ioq�S��V1�Un�5�&�W���#�����_j���^ui��;��k��'��^�.�r<���A��A��O��^ ��/^��^�K�z.�����fW���*Z��;�ut[}/�+P�o�a��-g<���w�����+��g�K�i�z�w>�V�kK�o��r�T���EW�z�]V�u
.��Ll���9�e#���R��J��6��b+�z�'�-��w�u�|`}��Q���
�0������H�(����8(��(��(��(��(��(��(��(��(��+��g8���VO�]����x
}�:���;�����\g�����*=^�(���f
��@2k���iey�v,~����KA"��H�|S^��|�;�~aEW�y�V��J�M����.md��J�O�j�5}�;+x��-�����`�}k����c5���3�3�c����J1���)=�QE�
(��>����<�
�������
��X����f������4�d��v���������I��jqAM�E�'��b}�V������n�2�J��T���YE]�i'd��M��]��\?��F��I�CE�'��Q@Q@Q@Q@z����}��w���R�-O�n��o��������f��q-��ps�o�_�s��6.|������5E�z
Q^1�|+�[���.,�}�iV��t�G�����������������[������UA$�B�1|O�����T���_\�r������PeQ@Q@Q@Q@Q@Q@_������j��5��3��i�?<��5}��*k��4���Ia,�n~��G���@�EP	�����o����:�
��1��k��X�OB�lH��m��}YH���^�W���c�i)	EWq�QEQEQEQEQEQEQEQEQEQEQEQE}5�2M���������?�����/��Dv�A�)����W�$�Or������x��k���O�����Y�%O3���z�Q����H�|,���(��<��(��(��(��(��(��(��(�A�}�O�6����H��~�+��k�7���/������=����������E��,�>���+�=���>?�}��+pV�!>���J+���O�B����Tt2����#�f���Uy������<F�(�`��(��(��(��(��(��(��(��(��(����p�6��C�'��5#�e��a��.�j�������u������I�Wj���(��S�
��T������1L����W���_��Cc��r1���g����]��4pc����QE��hQEQEQEQE>�YR4��������m�?������ ~�\��2�c�>�(Q��_<����J��\'����|;�Pp��Q���)���������M>�e�
�*7�+\:�H�Wv�#��(����
(��
(��
(��
(��,i�����Y���q"�����:�#M��O��l���%�>���s���ix�;�\�aNs�q�T~g?��V��t�%�������(���;�'��<E����Yc}��]>>z�����_��������t/B�K8�p��v�>�T��|�@Q@Q@Q@Q@Q@Q@}c���|Q�������p(��O��N�k��5����Z3a5;I�pzd ��x�h��(��
��v��2�m��t��������|���O�/���Q��[#����?�Z����k������c�����O,(��(��(��(��(��(��(��(��(��(��(��(���'�y}�	�_�����q��
������#�K�?�
+�k���G���B����iw���\���TWcu���~�����|WEW��>QEQEQEQEQEQEQE��X2�09v���>������it�'�%�%����>]}�����e����?�Z�����d����E0�5��k��&�{��>�2����*�/��k�y�G���K�|0o�WE��_����y)�E��QEQEQEQEQEQEQEQEQEW�|��'�X����H��~�+��W����W����p�\���7~���h4]9r�3�J(���
������7�c�Q���#���J��-}^I�Ei�~���*�kY�L}�_�G�]8Ir�^g6.<����4QE{'�QEQEQE��X~���g���?7����v�g������&�T��-�y$}oEW���W���S�h�������^�^	�GI�wH����������U��jL�(����
(��
(��
(��
(���������wM4�/��?3@A���?��'>�"�K������T~���*�������Z|���X�����v��������$B�@��(�?���o�E>����.e��[���K�=�%��5�����|E�������a��K�G����%EQEQEQEQEQEQEWE��Y��{����mKK�e���n��Es�P����-��!�s��P��.,b2�h+����Q@y����&��(�	�>���i���W%�cN�����^(����c�?���j&e^<��>S��+�<0��(��(��(��(��(��(��(��(��(��(��(��(�/���EmK��O������?����SQ?���ZW�W���,�k
�(�2���>��8���!�U���UQ_D|�QEQEQEQEQEQEQEQE�����?���y��<��>m��5z
y?��>�jPg�^o���G��^�^!Z��o�N!Y~*��_�5{|g�����V�6DF��u��k$��j����(���W���1S�S+�O�
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��>�������"�����U��k���
oW�~���<=�;e�& �a���~u�5�V�%G��>x&��@�����X����/�u���WAEg��F�\��|MEt4�/��J�a�"�7��}3������I&�Qqm0��)�(��(��+��^3�C�����r��|4p�>������>�]?�z�Y�E��W���Y���N�@��G������11�m1�<~N��]X?����&y5Q^��Q@Q@Q@z���S��\���OC;g���?3��
y�}!�D���q��q>�!���Z���B?�*��T�����,9�/#�h���Od+���g�e���x$�aS�\(?��H���+�"@��k�k�����>#����x'�)n��|�������(��(��(��(��(��(��(��(����:���~>���4��"�������*�Z���&�����{Ev�������l`{�B
��
�����	F��B�=A5%�~�h������-�h�������v�t����:���w;nW�p��������B\�R�x�,�{QTHQEQEQEQEQEQEQEQEQEQEQE�7����m�z����q�����������^�����2�<G�d{x�D*
A��\��LCS�y��Q��H��Y-�^���QE}	��EPEPEPEPEPEPEPEP�����-~z~;��B���#�p���f�6����{�x����{G��QEs'��$����M�R���Vun��<�k�:}�s��5�_Ax�����QED�Q@Q@Q@Q@Q@Q@Q@Q@Q@��Mc�+�v��b�6��<��<�k�����y-�b�+,Nv �����Z��c����0���H�~#��3IL��3�p4(���;����C�7[�x��b?C��~��u����Q�	�ZpPe�"��E���~5�+�C����|Nj|��'O�|����+��
(��
(��
��4�W�4�/�����W4y������yS��L
)+��f��mQ_<}W�~�cQ���
��?����s���v��O��,��������p��Q��W��	��+�<`��(��(��(���K���z}����V%>�8��u��l-b�����]�A����0?�x/���}�_��&L�d�\d��G�?�����
yX�����z�*v��p��+��<����W�"_
5����yx�`��|��G�M��W��}�h����+��5o&a�a�D��k'@~�������
(��
(��
(��
(��
(��
(��
(��
(��=�������7l�b��ZI��Pc�����*����Ky��),lu�_������3����������z���P�Q@#�Gi��G�z��s��/�z�J���N��������KVK����7�:Z�_�c.jv�y����p��+��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��>�������='����J�*��
C��7����G?���+��
��Iz��jq�
����O�u�?�c;�6�z��$���]c�������W�E��-�%QE��QEQEQEQEQEQEQEQEz�����&����?��������t���S��?��k�
����g���
(��N�������������n�o��?k�������O�^��S�aEU�QEQEQEQEQEQEQEQEQE�������
�G��%��l@��7����}W�WW��^��{�v72>�iO�����d��X�)�Jma�{:��WQE���W����?�4I����*,t��?���W�5�?�?���}
f�Mc0�S���o�
t�*rT^g6*�==7G��QE{'�QEQEQE}���}�N����$���W?����^���O��B}�B��]|���G�t�W�~�v�o� �a�F��W������2�}�������G �$\�����R/������������O(��(��(����z�$^2��t�l������$���4�%���5}��B���M�.����3z�~p~�h�+����%'&��z1QJ(*��}o�i�w���mby�s�(�� j�xo�w�����H��m��/��y�C��/��IG��3��<S��W\�������Nv)?*���+�(��(��(��(��(��(��(��(��(��?d�s�c���������l�=q������_������k~"�$~. K���Q��>������(����ZG�i�Vs����o�����������a�X]�q�A���+���Zg�g�
H*�;�.S�x����������pc�x�UQ^���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@[|7������m#��n������Zu�1�[G>�^�����=�+E �/�,�O�}\���~2���v�����|�?�����f��j�+����������(�t���(��(��(��(��(��(��(��(�]���:�����?7�^�^�6���z\p�
�e���q��V{O� ��+��>H����w��|�~LEs���)<���u�};�F�z�ix�L(���B�(��(��(��(��(��(��(��(��(��(��>k����2��G�u�<���{����k���>���3�������Wj��%\���G��]x��~��]kS�SO�S&�&���C��U�� �E>�������s���c��)3�����#��bW�~�^�V�m���f�>T�cc������u�P�� �x���9�QElbQEQE}A�R��t�NZ�3�����k�?g��3����7�G���5�u��V�${���+�6�k�f�2Z�R��!#��*;�V��X_�����VQvi�I]4|UE:Dh�dq�RT�qM��>|(��(��+���A��s������DOh���l��"�/E����kM>�fk�V5���}�_�����!���[U��k`1��:������*w�;�Z��+�=@��?j��U�R�y7�i���YI27��H��������?5�opBc����8��A>������H�H���ff9$���h��(��(��(��(��(��(��(��(��+�?g�{�����w��c�=6�
s�)�+��H%x&�hX���ua�r
~�QY�c��4}b,m�����e���?
���O���?����~�C��/��^�\o��/�W����[eI�������l<�*&c��=6��(���(��(��(��(��(��(��(��(��(��(��*��m��N��rf�#����Uk��mm��hQ�8�I?����R��[**�H���QE|���y�q�D�����&?�\�������u��gG����w��6?�J��+�G>)��<~�(�d���(��(��(��(��(��(��(��(�z��`+���K��?���j�������g�K�����_�0��%z-x��z�=�:�(�U
~��z�u�y6�I����+��j����u���\������d��E�'��Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��Kiu
����'#�����������9c�������2������|�������g��� 0�Tg�\��\��[��S�|�f{�Q^A��+(5>���7��F����0k�������u���B�����[��������5�Z[x��>x1�T'�o��~#��0uy'��g2�49����(��c�
(��
(��=��n��^�'�x�����W�W�����|U���$�/����_AW��V��c�IQ\�I���`�/���1���>��d�W�R��B��}�������W�Sw�g�5i4QEQ!E��y�H�R�;U$��P���^�F�w�����D��F1E��^�X^���~��T24�3�����8�[�����&�{t)�8$QTu�R�C�o�MA��K8y[�Tq��bl|��ix�]j�_��$�vk���kF��)'�+�J��v�u���z���H���a������+"�
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��>����A����t�3i7R[��|��������^�_��� ���]G�Z����=e�������e��R�	!�CG"�e=�"�E|g�X>����K���<$��$f�W��v�����.Qq�)0�M��o������r������$�B�(� (��(��(��(��(��(��(��(��(��+��!��-��e����k��J���?����Y������YWv�/CZ
�#�}EW�{�_6|{���~��>E�Q�3�����:�o�,�g��`�%�I]���������UQ^��Q@Q@Q@Q@Q@Q@Q@U�*��R��,���!\z��hn��>��qe���]���,�z������a�a�#�mDP�=�N����m��W*H+���w�/�����xD#�{���������G�m-��n�#�UI?�Z��y�E^\����(���O(��(��(��(��(��(��(��(��(��(��(��*��}>���^�>��yDops�Uj(z��������;-N��U�a���=
�pr?
��
��|M���xz��I�=�OG�_������*����Or�Oi ������sev���#h�}A�4VKCW�����i�?�^i�_�-�*��U��`�]{�����K�_�L�hw�D��$�L}+����W��H����sq
(��2
(��=�4�_��?�-�O��_JW������$vo9O��z����r����pO�0��+��>a����Qo���?�CQ�+��H���|{��ZFV��������xu��K�(����+�>�w�_���mt�%�pe?p~-�
�z���o���}�������������5����N�vt�i���du�QEx�������/��	Yx^�\]j��\y!��������D�$1<���h31�P:�k����_�_�]gsF&�O���'��v4�QEQEQEQEQEQEQEQEQEQEQE�|+��"�|=������<�����?��j�*�����'�/�J~xwSw�9�X'$�d��lO���������I�W���$\����#����������P��/����O*�W��> �A#�5��gxr�<�l->n�QE�q�Q@Q@Q@Q@Q@Q@Q@Q@Q@zo���#����'����U��d����?�-�_��Yb?�#Z����Q^�|��|�Z����E�}Q_1|n���Qb8�"q�~�J����x���S���+�<���(��(��(��(��(��(��(���������7e�vh�-�/�<������v�<�#Q��\5������>����13�����=~�(������u?���=NE������O�G�_@W�_�O����j��3��=����?�v`�z��q�ejv�stQEz��QEQEQEQEQEQEQEQEQEQEQEQEY�og�uk�G)qo"���A�}y�}j�6z��	:d�~�te?C�_W�|�G�uit����� ��e�����1�����G^�$�^���(����"�����k{�C*��)#���<o��|3�[�6\���B���?t�C�
}y^i�����>��y���f����!�}������y'g�9qt��u�>q��+�<���(��B�~#�����m_TW����}����j����w��S�?P��+��>t��8�?������^c^��B6|qn=,c��������O�IQ[����
��A��^t�ec���8$����~���>��w�y�����r2>U��Mv�����I��=�5/g
waEW9�x��[�_�E������Q���LV~��"�_
W����7����U�������;<��?�l��m��2��(��(��(��(��(��(��(��(��(��(��(�����|E�����e��e���.6�=�E����Z�o���c��4�1�[�[��y��cg�D	@QEW�����_j���by|��6������}a^%�Fi6��F�sk)��?�z��O������sS�c������$(��(��(��(��(��(��(��(��(��+��Aq�o��3�����0�dWZ^�����y�{��'�0&����ES|�L��(��=����h{C�l�@�g�������k�h�?��t�AG0N���u��O��p��Tsb�zL�J(����
(��
(��
(��
(��
(��
(��
(��4�*F���
R}+��h��xcN�7AGw<������>�GZ����&m����L��?���5��y���j��0�s
(��������4?
j����
���������	99=k�?h�hE���4M����P?��(?RO��^^�
���yX��O��QE�q�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Im<��On�9�p���X�*:(��x�/�f�R�h�������=���������<G��u&,u��K�'�������+��R�S�C������P�e�X�`���Z+s�O��>�L��)3�����O+�<}0{�#_R�X���$��`M���f����>d�G�|�x<�����!����4�����Q]9����������I��!�����|��=[y�3����79�,�~���k������	Z��(���:���=K�x�E��v�/�?����?�Wh���0��c���������S���Vw�/P���'��$�l"t�cg���8l��\U}I���?���J:m�����r2>U��Mg�������
K�O]���E���W����8��/������T�3ek��(a���us�b�^�_~��:5��r����t�����\������p�@MEPEPEPEPEPEPEPEPEPEPEPEPSZ\Kgw
������H�uV �b���?O<�E�_
i��w����	e��r?
�����I�����F��>�tUFzE.]��3��|��_�:G����Ku]�G�"���6�?�� A������.��<���Q[~6�����ON�	���p�����X����+��i�fQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@_�/Q�����z[sKl���`a�Pkj���|�~��;�=�2X�v�D~G�<�J��������<����W����ke]��^t`u��6�~5�PFFJ����.�J<��|MEo��E>�n����JZx���?
��~-I]���
(����(��(��(��(��(��+s�Z����b�Y3+��r����&�U��rvG���?�| /fM�:�y�#���o�z52�R(�$h�UG@S���799>��N
QAE��T����]������������>�q�)F.RQC��S�>|����A�=F�u�?�:lNS���/E��*)E���aESQEQEQEQEQEQEQEQEQEQEQEQEQE��A�9W�<P<Q�hf�����7#�`8o����J�Z�/�^(>�L2N�l.�
��<?����s��{Hi�:0�}����S�@ �A�4W�{!_5|j�������{l5e\O�_�#��_J�9��������/�1�[��O��}����}����K�B�O�h�K�+�*��	VR0AE6���=��p����~��x�S�������|�N������������G
��������5V�oZiUz�i��|Hf��^}UI�����v��3�7o�f�tV[�Y��q�b��I$�NI�hU.�Tbp$��%ec�n��u�w����x�9nu��'�#�l������5��r��2</�[{Y��}r�#���>�������'���0���5��Q\�A���w����st�����,�����H����y�+_������?�8��rl���i�����_��������EPEPEPEPEPEPEPEPEPEPEPEPEP���&�����3��� kR	�H>t?_���~����}Q���{J��]Y��7������j�����j�g6����G���`>���Q@�Eh�V�����:yH�������5���W�}�k���(���~���������_*����5;v<�d9j_�QE�r�Q@Q@Q@Q@Q@Q@Q@Q@Q@��;Z����V�>�56�'��P�r1������i����x��8ta�X�_`x[X�_����1qf�_�/�A�c��������p5h���;���|<g�����/o�{�p���H��
���?U���t����oq������?���.������l`:�V�`�����G�����e����QEv�AEPEPEPEPEP^��=�{��m��:~���:F��#����#O�U�-,-Fg��bO�8�����m:
'J���F ��b_|����,mNX�.�n
�4��B�Q^Q�|����?�~'M.����[�+`��0>��t�n���;}����FJ)�'<*�$��
�yn�e��r�J�Gc������~����8��J�Q^��Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@I��O�����u&��8�O/�7�����F��~���1��;��������}������GY]20� �^>.��������y�g��(�S��������<Y��m�������������u=R���f[�V%�,q��������&����I������Q����y7��x�mVd����BG��l��
��z�q�m���yu�~�%����
��vVV��CkEQ���j(�(���:���slI{"[��3��E#���������a�F�[H������@?�*�
z��>Zl�:�������	�.�6:q�<��?��z����O{��fK��G������t<3��M2�W��C�����GW��vy�J\���TQEx���������}-���5�cu����"c��~�V�z���F�H����3RM~w�t�����
���� �F�S�%'�����j��(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
���?�7���'�f}�:5�B9>S���e��k�����/�?�����m���`OQ�F~�G���MQ@���:1�<Y�i�H�)I���������x�����M��^Y��d���!]�)�������49�+EW�y!EPEPEPEPEPEPEPEPEP^��=��Equ�����7�?������b�iw��z��������H�����S��q4�S��H�>�����m�-�S�8I��L��8e?CZ��4��=��WA^a����Z��ao�P����"���3�^�EU9�rRD���|MEz_�?�-�i�����eQ���S�����W�Nj�y�x� ����QV@QEQEQEQE�?�����z�X�3�yq�=u�?����+��U�`�#O��m�����w?8>�m�u��bj{J����%4��*�������`�AH�{('�����7�<��-�ci����2^1Z>"�f����J�>e��Lg���������O��D��T��r
(��3
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
�c�����!����N"�S�����g���w���e���V��\�'���>��&������
W���f}WE��<�(����iE���+���-��q ������N�aYnQE!���;{yg��E�v=$���(��]�����ne.��
�Q��^����?�>����u������^
�-
������k�eo���h9f?A��W����]In2nRT���|)�M'��c�#�V���������}+����ao����6Q����F����5�Z��7#��5N
!EKZ��4]"�S���ZD�M!�Q�����O��~ ��7����6�SYR%*y�����~��+�j��$����>3��������N|����1�S����(��(��(��(��(��(��(��(��(��(��(��(��(��(��*��{>����Y����T�'��A��Q@��� �/���j�M��Ns���S�G�Z����e���x&������&2'�X�I������_C�\���jV
��h�����������*)�N-4)EI4������Ev?t?�/�G���?j��6�r�������%8�.��(����QTHQEQEQEQEQEQEQEQEQE�?|b4
h���m�o�
�x�^�����j�B�&������sO>�.u;T����x�v�G>��c(����C_�]��z}Q^q���+}F�{;��ki����5����xCR��J��q9?�o����������Zj�|�Z�	=�����_�>��
���0�AU^g�W{�#����'k�M�Z;�le��e���n��W�	�k�'�88>YQTHQEQEWG��D����m�.��d��Z���1��9^��:��-�-nU��"�}��v�F��S��l��=�D�g���(�����������ab}FO/��Z����G�^�_2�m����o<�m���2��������]8J|������M��Q^���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@G��`���]���=B��d���������*�<���u��v�S�?���d'���>��}k�j����k��>�{����pr���]Is-��a+s�����QEraH����B���N��|m�o���4�����n&_�e����������rg.H�v<;�W���Wux�M�����O_���5��|%����N�=�����c�����J�������K5�y�,��l�$o�O������N�����F'���YQ^y�|��b�D���}.nN��I��1�G?�z����1����
v�k4+��q�L�"~|�@	�_�Z��w�j����3O{w+M4��L�'��@���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�����������V�g�M�W��98d )>���5�_���At"�G���x�����;��hD7^�r|�O���F��E�_����[j�.e��l��f��m��|�_g����e����14O�#���z���V�wat15����q��^�����^6�����(���8��(��(��(��(��(��(��(��(��(��i��u��R�70�x�z�*�nU�9�������H�(@0��y�?�O�]_h������i���"<z0��w����,|_���b���E�<���}k����7��[
�U,�:�(������D�����*��!�������9���`9g�f���d�����j���VT��gR�j+H����{+�-�!�	�8x�R�������G��[�z��<�a'O�T�7�<{W������`Zm
e����m��G��~}+��������*�'
c�<���eu���������X�B�?U��s�`��(�&���F�4
i�v�(A���7���5�_�#�k�:U�.��_>_M��`�H���+���h��(����@��N���u
NLb�u������?��y^y��f/$�]��$��^��C�_g��4x�����(�N��X��^^�
���yX��O��QE�q�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@zO����M�e��v��c�2t
�=�{W�QQR
�\Yt����l�GW�������xU��2�������OQ��\��7N\����U#��������[{��X%R��2O���������<3�
?LFXC���������`}�z(��n�I$���+�?i�����4��d�5�]Z(����<�����r>�!�?~�����e���M�D���B���~�'��>���^'EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW��g�����������mA?��@(�+���
|�[~	�
��<[���y3X�,�A�����FRG�@�4U]'P����MB�A-��)<.?��j�����Mj�Z�1��S�E�q�|����>!h����U�����y_�����S��L�O�A���)YJ�V08 ��� QEQEQEQEQEQEQEQEQEQEWo��@��Cq��Ke���?�tv$�=k'�>��f��VcdK��r2�'����:����%����t�6/.�$��n���5���*k�n��-Q�=��EW�z�EPEPMKM�� �u;{���4a��g�p���_nkX�t�?��+��g��z-p�8|,�S��$xf��2�I:v����	L~ ��X�|O>[��T���Q_GQ[�eU����>�������OP����$x�vH�r�:}��V����GR\�7�MS�,B�)v����zf�����z����o���m1j������&��?�PO,��Z���+s>brz�N���2���h����?!����������
Vrr����^��|�m�L���t\�N��=^w����q�j�S�K�J�s�=�V��	�,��)��E(�� (��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����ymn"��F�h�::�a�"���a�8�]��b����1�3��z��zW��v��2�a#��������2k�~|-�����u�� !��O������~�qb�9F����"�]-T��+�=@��(?�����K�[U�Acg�W=��=I�r@��O��2������������	9�>����I=���l�jme�8m����Qs4��R�N���*w�h��+��(��(��(��(��(��(��t_x�\���|����;��(
����?oT4^���k�b���
[��z��W�e��'�C�'��x������?����g���������PEPEPEPEPEPEPEPEPEPEP������|q���7^h�~��[�%~�m��m�����>3>����SI��f�%�<y.@$��v���EA��(��~5xw���B�l��G��|������W��|9�	��)����"N�����|�^��������T�'��(���9��(��(��(��(��(��(��(��(���+���ki�rfG������7����h�U���A����nfl(�'�I����?��ko�.��\\c��(�?�5����-7:0�W����n���4vz�>ie#�������E�6���a%dQ\���i?|3.����9KkU8{�1����=��
����V����m{y�}JpR��6g�>�8��:�^}��������Z��?�-D�|�^�������z�K����ox��Z�'�.%8H��B�� �����I�v�?S�����b������Q�9ap����5~gxC��%�}����f��'sF��������+�|�V���v�
��������l�~�E}qEyo�~=|=��*���N���QC������H��-J6�ymw	���J�/�
Z��(��(��(��(����i�����m
��u�T?^�f��5s�|{�{bI{�2���dl���C����7�W�Td�	VV*GPE}�^m�_��^#�}KI�#�#\�����^��=��a�m>Z�y���&������S�F��$R���V �mzG�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQO�'�T�g��*���'��$����������V����c^���vzzG{�UK��[u�?������[�|	�t���E�X�s+���������w���1nO��
�����������(�Uz
Z(��(��(�����M3�t���������0��Q���s^��k�:�����4i[����=�$0���}E|E�~��9�f:l�V����19�����|��`H��������o��~��@���;����#��s����mA�7��W��_7�_�TP��?�m1/x����f����m>|B� E�=Ms�=PG��_��P�:���&��7F��S�S������S�~�~,����:-��6�V���}�E|�����leN������mmV����w:7����N�n4��E�����(��������?xSA�t�i6��$��7��dn?�t�Q@Q@�J�H���_g�+�vW:��mb������<$^��b0	��#�����y�.f�����1��208 �����������5�(��u�ZI@�gB�����{���EPEPEPEPEPEPEPEPEP_|���6������7R����Y\d���~���x�r�_W�~�>9��/�M�]��J�qgu���'�n~���f��(��+���^��s���)���7`p?2�?�+�Z��-�c�O	�-��g���9l�?��]8Z��z��|M/i
7G�tQE{'�QEQEQEQEQEQEQE=���������\L�#�KQF�$���3�UFI'���>x|5f5-R5mbu���������\�^������uee���������J]Vu|���_a��}1�QEx�������
�!E��m{N���w��W)maj��v��<����^;�v���
��Z��]�#
����� ���I���������M.��>��R��NR�<�������C�'��K�O�Z��|\���x�?�}\���t�
(��(��*{K��)��s�o2�x���TPi��S����k��kh���4�?$Wo����|G�-D�Z����"Igwf>^B��O���.'�#yf��" �3��I���g�1|=���u8��I~���_��Q
�n�GS��V����O���e��"U�U]�Gn`;rqV(��
(�ox����D����G�k��n�����NN�M���f������w������p��Y�-!b�s�b�4�kS��iw�6�u!�GC��r�I������N�h}�Ex��>1H��x�Sc�{���Q�=�1����7Y^6�VS�G��J��I�GU:���h�������
I�	&��B^"��x~=�=Mx�}�������6W����3��#�|��=&m]��.3�[JS8�����������G�<�e.Ys���EWi�QEQEQEQEQEQEQEQEQEQEQEQEQE���,���x��3�yv�����3�^D��:���������@���� � ��s����Le^Hr��^�<��Cb�(� �����h���{�8cR��p@�$���>���O-���{+%~��K/�?�>����iQ�Wh�U�J�=�Y���7j����#����O�+��~4h6��M���?{Rc��������<�,�<�1�;��}�2�``�'s�x���X����&��Ob.t�����7F}{}z��_i����x�Zu���	�d�������k���!T���hQ��m�W��<���aW(�
Q�,le��g��\���k�E��o���e)��>�lg��t��(��4vFJJ��QHaEPEPEPE��kzV����VV��4���&�M�&������G�����?�����m�g���~�����%z��C����g��w,#D�n�}�<U���hG�����oEVf�EP�����7�1kMr�}��	�E|�^��Zx�?|O}>�@��,_d��f't����t���(��(��(��(��(��(��(��(��(��(��?���c�?�$��~��b��'�b�!�yps���F�?�g?�	�
��%���8����P�H�n����r2:PEP���-������=�~�L��p��k���c�^_\x��qx��W:{���������A�&�L�����[{��9�r���Xk��V����>*�������(���(��(��(��(��(��(��w�����b�����9������G�GoS��*TT��"��u%����?��Z���[���8�T������������J�IsH���T����)�H�F�J���,����Y�jw��V�s��Gmgo�Y�8TP2I���=�Y����yfKY��-���zy�?�{�I'{�����6�A������E��������������(��(��(��+�O���4�����|oh���D��|���=C�D�?{�����>�H����m�q"��-�qO��a�G����~�(��)�K��:�)fv8
$�@5�Z�C��5
FQ�+��r{;�x���|Uy��i�.�H+o9'�'���V��_���[��f]"���zy����~���k��_��k�[�N+�,v
(���@�n�
�����d-�/d�y�����C�^#V�����N�����o"����U�jj�Y������}_N���O�����"YS�����x;��^�D��
cN��\-�f��r	����
{�y��m<^xi��Y�����?�
�
>Z��jl���(�l�B�(��(��(��(��(��(��(��(��(��(��(��(��(���n�5Oh�2��&��=0��?���������K���q�c�YG��}^N:W�n�������QE�vC�A���4�M����������B���k�+���~o�!�C9Kp�'�
3���"��49)������
(��0
(��
���I�iAF�������3m��zVM�OF4�������$����@��@5�o��\P>��i�{�u���yE���d�W������t��48���?�SR�����������W�QS�Z]���^��?�;��48���������[9�t�9?���0�'����_dOU�=�������0�83�����������������D��A�*�kh�j�y3F�]�����N�����?SY����j�%��t�G��������tN��^�Y��{�����:��3���?���}��EZ�����t�N��N��|<�W{�����%��p��bY����Z�L��4����x���H�`�>�j���W�W��R�K@��+`�4���&�^�X$F�/CCa	���2���}�z�>%x�G�}��umj\�V���.$��?��~}|A�������z������%��F>�(��I$�h��Y'�I�v�Y���brI=�GEQEQEQEQEQEQEQEQEQEQEW����!���6�gFU�M������i�=k�J�>x���7��-�<(�]�*�@�}~���?I(��N�i��v���2�gu�����A�tW�|z�yW$���N�Tt=O���^�Q]�Cyk5��k,!I�2��+Z5])s#:��X����+����9�%��jw=����S�I�}�C���W�).dxr���
(����(��(��(��+��{���Ko����\��_A������)(�f8���?	��(��n���=�|�������?�~>��4�$�$T�UU
@W���]+O���������>�j�J��Y_��P��F�B�(�M��E���3�iIs��
\���1�7q7��bS���G���s�����������q�L�o��nm���j�GS�#����QEV����g^���4��A��-m�\}v�����x����i4�t����\*~j��~T�TW����%%_�^'E���l����k�<7�;�=�J<�m��2�{�����v��E|)���������w7�/�b���s�^������ d�S��B�<��l�G�k��f�_n�F��[m#O�������%�P��4�
�/�
�������.�F�H�/���Z��(��(��'�o���$��%��^J�����c�w����G�����h�4����&��{�����:�W�$�ry5��0���_#���?��~aEW�y�EPE5����p�����3��E��N��>�?�4"�~��������;�
#A���C���B�O�kB�~n�m���
�~&|��eo��j��,�������1*�n������QT����Q^���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��7�:��'u�%���{�xw���:���?�������+=�'��QE�t�!x�S7�5�=����9��w�v����Z��)#&�g]�F�.Ha���sXU��Q�O�aEUQEQEQER���U��&�+�>%�
��F�*�D���������j.[#���gF�%��mmZ���U�_����h	�3�y���f��l���k�x�q������X������A?��XMq���/����b���{[}�&��T���@J�?�n����^�oV��6�$Q ��j@���*���H�v����R;kX������1��5
��=W�QA�d�\���Z�}$���.5IT�]>6����?�L�c�d�^w�����|6'�|�����=����>��Z0������[��
wT������/�|�J�f?�z�(_��5�|w�	um~����X�^#�;"/a���&��(��(��(��(��(��(��(��(��(��(��(��(��(��d�b����G-.��x
���ya��w�}~X�]Ocy���
���"209PE~�|��o����;"k6�a��q���[�C���=�(��>��f�-��a��69���b=+�=gL���;�
B#�
���1�Pk���~(���{P�j����A��>��������=����&+�4w>`�������[k�������H�j��$(��(��(��iz}���AeaMs3mD^��z���o�����4�97K!�1���voa����<'��/h���z�����J����e�:�m��4q��P�����?��z�+���=������f��
(��N����~/E��F:f�"I�k��t:�T<y�=�;�O����*������m����chO������r	?A������_��Y��u{������,������@N�yn�%��W�yX��;gbrI'�&�h��E,4=>����Eos�S����^��;��������%��!}�]��a�"��t���o�����.���:+q��F^R?�����@.x�W��V;���i��kh�c���S��^��O����G�B������~����o�����(;x"��!��"�B��`*J(��(��(��	N�\W�>%�wAWO���������n����Ta)�E\�N0W�;Rp2x��+A`����f�?,�k�E�����~�u�_�Z�����:sq�x������N�p��������}le��x��y�yfv�G%����=I4�(���(��(��+�~	x��/�5h�y2��������}���>�s��JHu�v,P��������w�w�u����x��w��a0���_ ��+�=�3�#m�m���b��]�p��>����?�2V��Tg[�r�g��QE{��QEQEQEQEQEQEQEQEQEQEQEQEQE{����c��~a?�W�W�~��m���>?�^l��Q���z�qN�Y�aU� ��+����iv���Y[���J���=�
��O���b�����he����������Y��dJ�'�#�.���g��;,���7�������T������
{����]L^��|��|C�7�Q�� ��)S����jZ�����W��S��Q}N����
�����f������+F��\`�s�;�;P��s^�E'����a).��Z|��X7z����U������~��]"9��<��	��]���R[��*��)i�N���i�����B���]�����h��
(����(������ti�l�&�ocb�e��D3����%��7��k��>����P�0�D�W�w���> |B����
����V]�Z���7����8��:�����^9��4��>��Sm��e���:�����������y��M{��Oww1�$��ws�O&��EPEPEPEPEPEPEPEPEPEPEPEPEPEP]��j|]m����!���rp��O����=�J�(���
��N�O����q=��F�=U�f �QZ��O���n�z���'y|5z���L��Q�dw�
��������9���tE,l]H� �����(��O��O���m���k��,�������|��i7�.�-��n��1�U�Q�q�+����?���X��V�Y@��3����z�^������������^*�9�i�<���k�!!%Q��?�y������R�N��a�XY��Na?��l�N(QW�t�J��X��w{E7��>�;�j.��N�e�R�+`8��)��!���Jsv�<�D�/��F;.��.d���Rz�k�o��������n5YW\c��OA�� 6�/��+�6?f�m�`�|���Vn�N���^^#�{���
�����Q\�XW=���~�����K����O�4�����?��<Zz��c��z��s���fIes����`$�
��w����^&7��F�%,m	������������|D�����]kz������?$����?RI�S|-�|�;������#��O(��p�.�\r+����a�29u�����mo�1����P��4M*�C�m4�*�-�mcCG�>��<��(��*��i�[5��s
��I�(���lY���\�����`.uGx�b�M��
p����j����6vhz��?�]���C�x�q�}T�R�L�~�{mj��J���|������~��]�������&+��G�B��;�%�����#�i�K��>���,xWO"���A�6���6�\.����]���p�:	.\��]�~f�v����w���.������a����T��%���N�����5�E�����������(� ��(����t=G_�[M&�K��]��Q���ZI]�&���^����c�4Z���)l0����I�\v_n����|=�[c����c���^3'��z�s�^�^n#v��z0���}�*�P�P0�)h����
(��
�>7�|8�G��?�"�w\�3��w���?��Z��$}L�^���QE{��QEQEQEQEQEQEQEQEQEQEQEQEQE}3�*���yk&1��,��������o���f�}���f�I�}�����k;���=�*�����+��*��W���A�G<�v{<���s�@�����
�+��7�����������Z��r�Vo��c^����~���_Z�G�u�� ��4r�(��(��(���{�Y�&���{d���*��-�|Q�.��x�Fz�WK+�
J����?i?�v��y�0�kh�?��y���Y�������}s�����EA{ymal���[�-,�W�O����h��Z��A�Z�Q7U��
q���a�^_�k���q��Z���7g���#���P��0������������N_1s�]B~���9���S�	 �����jx�'����m��z��Q@5]N�W���U������������'��EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW�����5�h~"�I�33���5��(�P�_�s�|2��N��������x�-fA$R�����#�����?�_�Wax��xnG�������'��S��'5����O���E�U���W�r�~d?�e��=
l�EQEQEQEUmN��K��/�������,���EI5���h��f�|A}��|e�Y����f>������T��xm-�������R:<�u>���<�_�������v�d��6�����.?����{u<�<v�(���b=^+ox�Hs�/m#�L��& ��%��k���<�{���K�����c��xt?U$~4�iEexW�w�|?e�����n��:�U#��Gb+V�
��7����}�W�Y�d��2{�u���z)���I�3����������Q�$�����}+��M.�J���Y�Z����+��z�����7P�W0�4M�$P���)��$�q��BZ�������T�o�MD��H�?�lLX���W)�|�%$�jw�����O�]Q��{�sKQm��W�]�
�W?d�-%��bh���������������3���X�O�<5U�O4����������
|_|T��K��������2������+�->knG��-:!�L���TWC�|����kS��"X�S����.��-W��j���7�k���t����U���_I��<-�h�����2�����u�������(�UW<���#x`_�g�xS��'�5�=��jFs���k��}&�F�[M.�+[u��>��'���+��i����N�)�((����(��$�����?hhl����Y�Nc���"�X��7�]l�@�TW;���_�~�gg���Vgc����$�5�P^}���������U�5���[����/�Z��$}L��^��4QE{��QEQEQEQEQEQEQEQEQEQEQEQEQV4�sw�[[��J��d
��v�c���m�y6�G��Z4E|�ww>�++x��}{�_�s��}��~�%��J���������!�����y���e��!�S����<N���)��2���|o������p:��Q���>.|@�a<]�������k���=
~4|D^�+�?��Se���O���H����W�Q@���?N�I��t����X��,��~�������H����|�<�^Ggs����ePEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP]�|e��'X]K���Z���:�*�u����v��z��_���)����Z��jG�,M������n?��x�����;�Y��	��6�=A_���O��%����9�^�rc��V��O�(��������?�,�SY�4�MGWP�H�R	_�v�;O��Odl���M�Ez�?TZ�v��������?�|)w#�Ix�?0���~�>*�FMI���n���$_�8_�M}�q<V�I5���cs�#U����+�o�#��$�~�j�*$C�X����/���J�w��Q�	7x�[��L����O��p����G��k�7����;�.���c�O���~��k���(��(���?��u���C*�y�����P��#���t`0{�?�<Q���E�U���W�rpJ�27uu��=
~b�C�����F���Fk9��Nc��t<0�����3��z�k�MhZ����Pb�/�S/l�������^�����vq���v�v���H$F�84f�(��(��(��(��(��(��+#��%�|/����v�}��������}�&�5������i-�x�P��B!9�S��A��N���>$����-��,K7+��z��"��o���e�����T�Q�o�/�d�����=`=��W����Z����h�]#���h��}r?�������j�Z(�����N�-�`�_����;���I����k��V�*+��<��?���b�f����������/�kZ����������(�t���(��(��(��(��(��(��(��(��(��(��(��(�����j���2>�����*����)m����k��e�����"����.����>���+�=����n����l3���y���*��:������~��r8��N�,z���8���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����_�������������������A�:(��
~�%���=*�V�pe��iO��T�
+�|=�NxR
�����'s=����������h����G�5�?��M�L��mp���|6���d@�����A�����������F��������E~��_�z��X-�]���-7��������.�|L�=$��o��h�
��!h��@s�@}���EG7�
�2A��q��co�P��tW�u��������W�(?��l_��j�+�����V����I�M~�k�9����g�:U��X��M��gq�yo�?i�iA�HK�ja���}��%5����1���c���C��B�n�|�����~!A���]CY�{�^���������j�QEQE�e���I����k��V�*����8����m?�JWI@y����'���_���W�|x�o������kC���2��9z4�E��QEQEQEQEQEQEQEQEQEQEQEQEW�~���g��n�6���������n��u��:�cS�}��+S�&o�W��k��+�=����J��C�g��+��=�D�Pk�"�3�$_i�B�5�9[�J�E�[�(���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���q��?�]"��D�t���'m�|}tk?���P^{��g������U�U�|t�wv}&�������H��W���h���O(��(��(��(��(��(��(��(��(��(��(��(��+�������m��s5�`�Q��_;��-����K��K�J���v�o3��R�GmEW�z�}J�lt���>��O+}�+��YY^I]�f>��������~,��e�)�fB��"�6���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����n�O���P�Q�D�����	���~?��~Hv�W��g���}$���E����c?
uS�a?�+Z?���3��9z/QE��QEQEQEQEQEQEQEQEQEQEQEQEW�����tH�K8�r������y��>��}I�}�K��"(Q�����G~k&>�(�4��&������K\Pp�/������k�J�C����~iJp�:���T�������QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE�/�����>�(��#�W{^s�:���W����������F����k����?���R����/�+����?���������TgW���>S��+�< ��(��(��(��(��(��(��(��(��(��(��(��(s���l���2�-��0'����������.�H��$����H��k���}/#���q�0��+��>O����^xKOS�#�����������{���������~[M6$#������^
@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@����o��7�N�����W�W�~�Ro�!�/�����3��^�@s?S�5��N�.k��������f?�WO�DT�Y�%Q^���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��;���-��#"2�����������qm�]���(��'������n�Y�a� ��+��?>?i;���~&��R�n���O�
y�to��|y�;��\�7���1�s�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE�O��/��n��������k���?b����7��<�iW��#�k�������SZ���S/�V�T�#�t��������thR�3�(�������(��(��(��(��(��(��(��(��(��(��(��(�������4������`�S^�\��{O��<�c��e?�6-�k��
���'�{�U��yQ�����j7�@��Ns�����z�O����g���gn���������5?9��b�I$�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����m��������������e|��O�N�}�~���c��(��k�)C�)������E(���I�W����oP���/��U�$��|�V
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��}��e�3���>����+�Wv>��m~��������������QE|�ww>�++x��}����������`���	��i���������~�A�]s5��*����������(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���w�������<�oo&?�g�=}o_��W>_��V��	��#���Bk�*(����P�5�c�/�#�\������0�5��3*�����������?#���6��(� (��(��(��(��(��(��(��(��(��(��+��Ei����:��F��mB�����/�����}��[{F�32����������R(��(���3���?����emt�!��6DZ�2�?�i�K�K�_�
�c�1[/���w�<Z�<��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�e��n����O�8�U��?\!�����������?�).q���������W��QE|�������r��_R���Z�����.�g�4��q%���]���+��������b�H(����(��(��(��(��(��(��(��(��(��(��+�g=�~�zG��c��A'�C�U����|=�r0�RI;�[G���q��+w:�q�K�;�(��s�
����������A�-��<��i���;�]Th~�5R�~�e5�>����W�%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEnx��+���3�k�[�O����W��~V������W����)��ZEp��
�hJ�(���-wYhw@}�%�����������O����|��ks��)������`��[��c��0��+��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��T�PK�z�#��x�t:�c��">�(�u���M,��9�-��5�M'����~���_YW����'����AEW�z������W�}a��|�Z!�y�0��U��Z�����1m��6��%�����W�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW�_���k|��������=<�d�Q����}��k_i�v��;e�o�A���0?��4�}Q@^;���|�Y�����VQ�P+�:�d�9���q�6���KN+�8�&/x����G=�y��m#
�(�D���(��(��(��(��(��(��(��(��(��)QY�Ufc��&�=��t��M��R/
�G����d���+���<9�=?N 	�7�Gy�����
�+��S�Tr=��pQ
(��kpxo�:��vG�cm%�q�j��N�X���^ ��-Ycm�i��|g?�q�}���U�B�}B������72����&bI?���QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW���^&]��63��mb�9<	����*?���:u����Z�YHb���f�A�]H �
�K��|�Kx?I��6�w�,���c�t���a�V��?�7���[-z���F���r��9�!^�Tu�2
kG����a������G�8?�kF�����j~�'��U�gN��5[�>�v�[�cq�����Z�^�w�V��Q@Q@Q@Q@Q@Q@Q@Q@Q@z7�k���\&l��%94��?��Z�4�>�U�m�lb2���s��_Yx/�������o�e���$?y����qu��9V���Q��3��QEx���������x.��v�b�V�����<�_o��k�geDgv
�2I8z��O�|G��X���m�k {B�������PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP�_�w�@���m���o�w���:��k������/<+��3\�N.�fYT�����0$c_���l�O��?Z��}��+4g��U>��phV�(����341���<�@Evu_������xe}�uWV���F�C*�ta��F5����O�u��O�����_������z�:�^��f2���G%EWq�QEQEQEQEQEQEQE�b�iR(Q���UE,O@X����Z�+=6�K��d�O��5�W�?���T���\�p���=�������j������	Uzl7�'�G�,��54V�.u���=����j(�su%�#��8��(���O��xg@��u��66q�$n��@�I��"����j��#��:��u}iZ/���[�����G��+����$x���~0��u��m����bq�u�$���PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_L~��������ZlZ�9�Ov<$����0��j���������Y^)�q$r!�#�A�A���+���L��7�RY�]��#��iu��c���L��<U��h�i��f7�}���/�������N�M&����c�}C���Y�	�90����}G��
�������M{V�f���#yOc_<x���������^�K�����m�����j�SIh�*���:����+��
(��
(��
(��
(��
+WE�����]+N������c��MzG�~
j7$��b�����I�'�����hS���(�
<�AfA$��^������R}L2���W��=������n���4
m:�
�����y?3���t��W����K��f'��/��b���M�B���7�$��7���[tQ\
�;��%dQM�X�����8�K;��P9$����Y�Y]R4���(I=�|5�I�[>;���IXxn�C�����y����Q�O|
��7���)����'+����
���������~u��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(������Ox��[���������3��oc�Q_�_|g����6���.���e�����8�G�0G�4+��Y�X�u�%����-�uf�Dw	�}�
�{�A�!��_�><�> h	��W��������\#�����
(��8��3����6����3Z�r�^����y~��[\�fm*��P����?�x����j+zx���3	���V���x�O$]h�����_�r+{i�$O������_jQ��t�{���IU�{���{Y�?�F[�W����-?��w��?��#�x+����>��`�g��?�`WK���E��,������$�}'Eg,t����`�g��?������q1������s��Wm�|;���U��a�Q�-.s)�� ~��+	W�=����c@��T�����(��(�fTR�B�$�+��)~�^��Me���]�+���F��� ��E��P����ZO��y�M~�+��$����:��d��_~:j^=it�K�xh��n��B:/��\��:���������w�r�"(��#���g�5�PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP���U�x;[�V�����q�J��/uu��}����|�|h�i��E�k����lA;�7=	��s���h��J+�_��<]����I������bY�9>��@����
�B���8�oC�nZ�<�J>\���P�QQZ�Awn����8�IV��
K@Q@Q@Q@W9�?�[�a��<A��:��K��?1���������������k3����D~��7�:k�<[�N��W�
����'�6?�~?%������5��j���6�����cA�����~�~�C���f��F��0)�y�[�\Z��^��o^�sR��.?����!�'��+2�=������Z��`���ahP���r��"k����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��6<?�}w���4cP������h�}@8?�z���I�A����TE��2�G�2��5��P�:o�kx������k{��������k-
��O��8��3�7�x�����O�_�|q��Y��_�UR�����S�_�����(�����sQ��5)�7��p7cqx���V��c����~��L�s���1���x��x��7�|Bu���7X��H��p��rtQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��
endstream
endobj
43
0
obj
85785
endobj
44
0
obj
<<
/Subtype
/Image
/Width
993
/Height
1024
/ColorSpace
/DeviceGray
/BitsPerComponent
8
/Length
46
0
R
/Filter
/FlateDecode
>>
stream
x���y�W���33���V!R*Bd)�(d�%7��+����F���^FI��Z)B�5Ki�"iS���q�T����������z�q��������^��~�;�8`��������w�����<=��I������"���j���_O�2��1/��<p���~L�=���E��t���G������h���'�<bp����e���q�h���A���<�����h����;��}��x�N�s�?2n�z�]���d����^C�` v9���/�X�z��-����C=�����jtz��~���VM}����i�T�M�aSs�i�dlv��2��X�\��L�UtD��v���,R����G>���8���F^���@r_8�O������~G�S������R��W�r������MZ����%r�_����;����y�������yU�_��X�l���?�����4���]:�>�nE#/^���E�	�qM3#��V�E�k�q��+R}w�.�z�������������}.����4?�}W�g��T��p��[ns�������e�G���k|�����n��wy��o�?uo����&��S�����@)o�M��{h�.k�&�O����aO��������I��es�����gtC���h\S=�YU��]/}���7��9�F�����}����Q���[��U�;J8{z�%�?������qj���!/>�y�z�S������4�������3����i�7�y9����������b�S�����/I�0{����|xm��U�]���������0�������9��,���^d����������}�kf�>��YY�/�������_�Ox��u��qy6����
�pP���s=~'/����CC�~��^�������������C��G|��?�����go����zJ���������y�w�IW���L��6?O��P�	$��;>s��)�o����kv�K��������}��"���<������K�K��j���%���n�k�g�'���.��?r#Yk�8F�^��n=�Z�>���`h���nL�K'?�@t3����;�b
�L��/-�'fw��/&5{��g�m������*����_^��v����yj�.�oT/qL9���T���xSMs��4���\��f�w)u(-���Ko�eum��'��9=�1�5��N�����M���~�/���)?��~�9����9��?�BR
��5w�ApP�����m���&�Q��G�� _��>O���r��4�����Lko����z
H��+��P�m-s�����tM��������("�m��.^�Z�K?W�6�;����7���|�f�%}��x���\-��cz7Hfs:|��&,���_:LT������Mb������Ya�o�C�S<�SH@��{�x���)�p	���C��z��f��\(o��X_�����zB��}g�������y�#'G��r~9�O�y�N�{l���A�?}N�z��z,���0<4���U�}��
���y�.����q?~�\���^V)[��z���S��7y�����A0��8/��EW0�O}���|�z���N�]��K���W����e,$&������X��
�w�j��#`�%=�A�i�zK?y�u�0A���������U���/P����4���X���/<j������E��~��4M]��]A��1����?�����������okgZ�G�c ��������,���(f�5f�����@�>k�N6)u��7�����M���{�������M�e<�H�";HZi�z�+�e'�x+����z�[����7�N������#��6�/�i�x��������v�VSwM�7�{�o�O��Tg�zg� X�����I�/@0�
P�\V�e�]�����K9��j�|\W�t	���7�E-�Qs�z7��Y�:���0� [�v��w���mo�O�
@@�����p�g{����� ��5��=P�@��8V�������t]��s�7��-=T}����������r�z�@�W�����u!1���w�Q�h 4�����|�^2"��<�;�U���Py��/�?�^.2�=�~�z�@�<����O�����FyT���`�I���x���S���~�z�@x=�v��qt@'���k�S/�k��;�-���p+������^v[�{���[��Bo}[�����zi�\s�;�S/�V��w����c��Yu��]s�zU
M�d<���k�������^�"w��{������_W/@q[N1�����(i�!���e�z1JYh�������)�����,>����3>T�@$����z"�|\�}�X�^��V��v��V�@4_TN�o>a|������1M�1�M+p�����i�]i�z|1�P5���W ��)�]��D���j���'���S���j���{-������3S���:���s*��?��@b�M��}7��������I���~�}7�*���	���Er����Q=0�$tK*�A�q$��rI�]u�z\II�iFW�����Y	��9[=,�$uI8p�X����Nl�}�$����A$��I=(����P���-U�F�%���R��|}WX�@J�N �.�!�fl���@j�����^|��j`���:`��������{5�x;��R�w����nz��k���f���2�x��/f���������>P=��l����;��H�1�F=���;z����H����P� ]
��g���.���^���kx����'���>Y=�����=��Q���[=��;���A��w����k2"�]=#"��i�z*Ft��B�T��'B�M�C0���_�
��#��z(f�(�w����rT��[�G`J�2���	�)w�	�C�HLy�t����*���t�D���t��'`������9G���:7s�K�����`P����� H.�+�y�R����`��}���IsJ~�z&�+�}�qU�x���`����Z���QG��0�:�X����0��b��P������zf�)�;s�zf�Vx#�,��(�3��0����oR�����Z=����z�]/��N=������Q�6���������Z�3���Q������Z��C�\�(L[�#����0�������qkv~�z�����I��#���I�~G���'`����QO��M;��Q=	��l��z��m��z��x����A�����7�`����?��y?m|�z���'�7�A�����W�`������`�8���K��7W���?A=l�hW�\�Pa�W������U=�V�P�\pma�������������N)��Atda��spA����������]Y=l��+���sp�����R��?~�z.�Zx[�\�za���������wV��~�z.��0�^�9��wa�}�sp�i������-�.�\P�0��s0oC�W����`���O&��yl|�z�=�=p�������y}�>Y=��!p �Zm|�z��'p ���m|�z�-v�Ow>M=	��#p ��$p �.��G�I�fG��'`��Vn���?Q���������?U���{	�����;�zp p���(���3����0���};/�g`�����T���!E���" h.)
|�z��*
|�zf�,
�6�0�ZX���_=��.���a�u��/Q�����]=��*xg�0�*�^,�S��0j~���v�i5�x�G��`���o���Q=�^G=
��(xf�z�W-��\=�~*����z=_2���ytc����"$J>B=����^�<��_�o��@�y�T��`���o��9��
|?�@���T���0e�S�/����F��?Q����2��Q�������z$��]&������L��8��e?B=C�~�����	�!���Q���Z�R=#fF��?��D���VO��K#�#��`8(R����`���H��S���	��v2r�s0��wf��`@��5m��z.�+�9pn����vz����Q?A=��]%�������(�;���H���h��
@��E��yB=�t�5�����������
@����xC�l����;d�S =7E��J=��#����H��
1�M=����o��z:i�=V���������E=�4l�+p��|��a��y�	`�;c��������,�|R��j���W uSc��d�UO ew�	��T=!�������R�&�����Q� U����{���"n���G��Fqw~U� 5����LP	 59	��zH���@������(�/��zJ)�4����y�1��_���T�	 1����3�1� �bB��S�	 �\���9��Ob��V�	 &���zPI[�`����I$��D�]=)����h����H��*���zT�z#��g�zVI�,���$�M���W=+���H�o�<���sO�7Q 9�&8�/���\�;���H�����<�@2�O*pn��$�NR�7W� 	S�����U q����@�N2���H���$?_=1��
M�o��X$�����zd	Z�������zf	z"���b����U=3�����|���������q��������x����F*��K=6�D��J��Y��$������
��L)pg�zp�MN�o�
����>��oQ ��R��zpq}�b�N�<����-���o����y��W� �R���T=;�8nO=pn��]���\�@L_�������@L7�� ��bj�N�������t�vvW� ��
����@t����������v�U/@t}��(�D�_?��+lP/@4�����G�%�����^�(������5�bR�}s�d��.O?p�g�"D�e7�?�^������J�
�k"��U�dM�g�V�@O���q&�� ��~�z�Z�e&���(�3};���W���hR����(�S};�V/@i��<�R���������������8��PRw��?�^�r��j�j�0�`��a��(�����x�0�'����v��P�}F��z�W2�	��(�������+�S/��;S�+�Cn
��R/	��L����^��7x���5(�S����O��Ph���������-�?R��3�����.����S/�6g�8w^|����>T�.[��J�Ng��lu�;���W/������|�^�?/u+���W��u&;��^�'�����^��\���^v��p�������j��v.P/���.^O�: �w�o���t5�G��B�SW�v���������������3C�B �r�og�z�@��t�h�N��5�����[�kB����;��������n�"�����};'�	�T��^i�z�@8����2�W/��=	�v�2�PZ��I����	��O���Z�B�Z_������+B��;=s�z�@�U�-�+��=��v2W��
���<�yE�V l�y�7��\�^,6����i�^,2�j{�3W�\ \��e��c���R����;����xO�vv��M��N�6pg�z�@����8�l��������c�+���^���U���o���z�@X4�>���Ea1����}����A��O�U����o����p8O���e�0��$������ZI����z�@��&
���������^9|���\�^;x�U};���A���\J��z�@������[�^=pm��;_�W�g���������4�����6���E���z� �\���<�� ��U�]�@��!������ ��������K�4�(\�yu���B�	@P=��{����]�)����m����g�m��l�6�T�\��_�oRoD�����]�FAt�����Wo@��a��T�@�{�9��g�:�"�����Y��� h��Pg]��:�ns����^W�,���8�G��n�����`�\������ H.U]�
�
dau��4R� ���.�{�����o?��������o�J�'@P���p's�zW���H]s$9�]�a���^�4���p����*��� ~��p�yI�1@�]]r�7�������e�zk�uU��{�����_�;������Y�qt
��X���w����X�Lu���S�;�������J;\�=��NW7S���6�D�pC���G3��X��@p<�[X���:�������K�|�;N�G�������/��.��Q����w	������&��z�;
V��n�
�����v��F6�.7A'�7
���*�r��T�U�}����hUo`�����MX{�^�����(�L�Y�e���>���2 9��&�$�nvy_�lR�HF���f�3\�a�M,�L��S�XdScu�I*�B�e�=���M��-��������;:��k��&��G��=_R-��z�K��ad���5�����$c�z���P���3
$`���5Qo`��z�RS��z���]�i��So�{�l�[Yu����]u�i���<���g�+M����|�xu����A�}����n4=�S��g�]^���
��Au�i��J���-��2�R�5UZ�**_�y�s�����{W2�lr�������D�{��o5y��R���s?~�LG�"���W�:��*q���W��on��X�C]I9��<�,�6����f����nK���o�����j�����nb	�������I��������w������>n;�[����T�����3<���MF7���������^������f��A����(�}�\��y�����x�	����a��(�,�
{uv���~i�y@t;�.�gl��E��-��[���C��4���|m~��;JT\����������������~�z}@����f�_����87�[�J�: ������ks�&@l����<�^z+q-���k�[3��\�^�E�=�N����Ye�oX�^�?�p)pg�ze��KT�z�W��?��t'�*�o�/����^����x+��l���;�s�E�u'����U�A���&��l��+�s�	��\W�V�.�<�J����`���\)��z]���J�����`�W]	�yR�.[m�����V��6�\	��J�.[Ms'�����U�;��W_�^��z���o��������ro6�f����za�r)�N�u����3���������p/����+�Z�����p/�C�+�^�����p/�s�K�^�Ys�kB����u �b��y! �b����a�f��lQ�97w^P�9W�������;���������������e@i���;W���.^y�z�@���r��-�!����k��^"^�����2+3]��&�"���z��3R�H ��{x�|�*�pZ��A����e�4����������'�;����h^�7��^(Fwz�����^)>��yx;�R���U��3Y�V l6��.����������8�W���^~�z�@�<�e����z�@�������x�Jo��q������2��NP/������q�U/���vZ�
���������e��E��V����-���%������O��;0O�t ���#��qF����v������W�U��g�z�@�y����j.W�����;}��w��};�����{��v�n�=�j����'�S�.������m�WoH����.��z#�Zw��������
 p�wP�������������TY��
 X�����������M��1M�!@�|��:�RZ������;��4B�'@P</��$��W�w�����#��2��-��S�,����[�����q7`������q
So`�����Pc�z{�m�B�pl��Xl�1����Ye@���U�W�\�&v����:��Wo`�����MH9��$otMu�	j����$�>_�m�nTo`���{�'.s�z��l��kK���t q_�.6Y��[�"�_9u�I����5���U������
���n�TSt�z�����.�PS���������sS�+�1�h�7��k��]�h
���.4]��{��-�y�����]|i���q��*�F��r@Eu��tUo%�7�svUwi�c��|�����(M���zC�(x�Pu����T���O��t��G��nVo+��/4W��
H���������zo��g��3tO����(�~�:BW5\��a@f�M��wd�oTo2�1��}�cJ����xouN.)I�@�V��tauw��Qo7��������T���;xe���2��y��W�]�������{�z�;�m����{�f��wp����l��L���#\���3���;�w�1���D�=�m���k�g�T���������6��Y7��Nu�E���<9�����qH�d���\x������-�~������>" �?}c���~��p��l�~����Ay��U���53'���{���`�S��8�k?�M�/8k�~2n��/h�$D{�V��O(�l���_�N��m��9������L3fd����pU���hR/(O
�����2a���Od=�>p��n��|�t_�>r����^�)s�|�Q��F��P�Q�v�:��j�������=�2�{}����u[���e�6B�f�N��=�)�_Zh�������wzX5���C��g�@'s�K�\,}��X��6yu�����<{U�B{��x�C��Z�_���Jc����_ya�W=|��/
�(�$yk�P���>��e���o��/
�X*xW�H�[]��ka�H/���������w4Ji��k��@����y��^�����fD��w���F�_��E��&|�=��������O?>�K�:��K����-��2��3{�����%�o6�����=y�"�
}5w�3���{�V���"|����HP��
]�9��/�z7_k:�5�����N���O��+6�f�o���H�>������7&���.|�h���6E�2��N�R�_����U���v��7(�V���I?��'g��rM�������F��0%��&�%�M��xHZ�v�$P�zC����z'�O�%����Z��u��$HW�������~��)#���#����jN�A�
]�P�a��z^s��Cou��=�h������R�v,�x�z�`����	�U����7d�/z���!�R���/�>/�������:�S�1����
���c��_��{W�k���3H��	~�����������h&�C��#�����y�s|�=��t;��W��QOa�k��%���
kS���<{�@����!�U��]���I�������Be��V)���k��{�0�c�7�5��d�l���;5�p��\���-��v�3�+�2�j����7	��u���M=�����'E��s��^(�x��@P�}���NJ��G�g����q_�\co�0���w��1�1b���~k�����~gP>�W8���|�|���AW��3�������h�/�"��
��8��'����U�D��Z���)���!Ta��-�i�����6��F����m�E�O�n#F�������@xX}�@d��m� �1�5R���D����@�J}�@d�����c"��n#�P#YEu�p����2
�qAS�1QlP���O�"�g����r�S��U]G�V"�|u0O}�@4������C��R]Gp98|k���xQ}�@4�������f����K}�@4�S�����iup���h����3��D����h�>D �{�u@3�!��S]G�V"�M�:��1C}�@4}�y�o����.W�a���gD���6V}�@T�����p�Q����~�R�!Uu��Z}�@T����_�Q���~������:�5V�!UMu���>C �r�<��^}�@��������V���G�bX��v��O�a�:�
S� �g�@l�O}�@���]W�	1�Ub�V�bxA����O��qu ����>A ���Xn���XnWb�I�b��.�r���r�����>@ ����^�b��.�r����(u!��������B,WM}�@,u���m������������b��n�j�����{6�#[}|@l���X�|����P7b�����6Y��������uu#6[�>= ���Hl�����8�WGb3�J����f��������f��~��i��d��v�HlV[}z@��#��J����WWb���������b���k�:{]�>; ���L��N}v@\_�3��n���zO���~U�u'���>: �G��X�!���e�;��%����L����&:,p��[TWO'K�\��	�[��^W���
�R,5H}r@"��K�Tg����V]���V��	�R��L}n@BF�S����sr�:;e��
HH_u*v:C}n@B�S�b���s�V�����
H��V�������TU�b�[��$h�:��>5 A��c�Q��	zA���V����B���$�ru-�~l��)�Z,�X}h@��Cx����HX�|u/�yA}f@�~Q�b���G$n����>2 qO�{���L����S�m�c2l�u0���>1 	'���������M�������$d�U'c������:��Wp����%e�yI�E��Uf��HNgu3V�>. 9���X�4�q�)�I�E6TQ�����Xd����d=���"��H���j,�T}X@�:����������:{<�>+ y��)Q'��
H���nl��+�`�lu8��>) ����EG�I)��@]�~��>) s����I�9)yN���P������X��J�sR�Z���U�����xlp����MP�c�������Vu=�3tX����U��
�������!){O�����>" u7������#Rw�: ���>! 
��!���'�c�� [���a�s�	�[��|�����&��V���P�����t�:"?�T}:@���SW�_�����������H�e��|ks}��i�u�:$��V.���!��Q���H�O}�>��Z|�%�s�1N��/-.�>�����|���X3v�w���VU`����pFOuM������^?� c�=�
?�$=�A�
?�$57���~�#X^W'�/�G�tW'�+�G�T_���Oz��0�euT>�U��4������������7��>������bS#�Q��W��w�OpA�<uY�����$7��N�.R���������L�9�������>�%��u��?����&_W�����W������4��l��Op����f�8p�9�����S�?���P�m�z��
PG&�=�2A��Z��Lf����\���]��z�}���/e��;x�Uui���7�B�|uk
�����ul
=��x�����t�3��s��'|E��x�:8���C�����R��5�7������yi�I���5B��.W�6��!�w�9@�d�����������:<��_I���@uy���7�N�����G���j�Q]��>�1��[�������=d�MW������:4��g���z����
��c�F�U����=oTQ�.�v``��<��zo���!�d�zc_x^���z����]��k4/�t��~�*p_h[p�zO�����I�
(f�:I�
g�������U���l�n~Sk��KS��_�����R]�#y��Qk�m����m|�D��X�v}�&�uV�:�����k@v+}�>�����u�)��*C�{�������c����yV��i�)�}��i�����fWP�`���=�p���-,��Wu���z�z����\]m�����,�:��U���z�X` y,�s����5HM�5�~���>:R�`�:�X�v��-@:�
��w^���Vo`��~V���a
��.�{$����1��N��E�&��zC�@��/����`�?��w�Fo���ff67K\�m���������J}����t_k����boM�3�[���A��+<�{�[�pE�+�o��]�3<��z�@�d���W�-}�Rn�(4������8�%��2�{�s��/���P���U�4:�l�[f���O�,�����:Cq�{��\A�L�6�NL3��S��)��|���7��:��}��n�/n���6��/��m�7�>p�I{����rM������~�f�������;/>��zPi������9��5n0�����v=��!���?���m�
endstream
endobj
45
0
obj
60856
endobj
46
0
obj
12764
endobj
38
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font7
25
0
R
/Font4
14
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image13
41
0
R
/Image14
42
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
47
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
48
0
R
/Resources
49
0
R
/Annots
51
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
48
0
obj
<<
/Filter
/FlateDecode
/Length
50
0
R
>>
stream
x��Y�n[E�V���<[h\�����'M������$H��*�%�b�S�"�O��E����s����Ilw��X��������o��qY�^�e����O��2�`��o?�R�8��Y�5��JXoRa��zH�����@'g|�����	��'K����B���'����2�29/�	�ZzjoSOY�e��mi��������5�m�p��g��:j��**,+�Q�!A�Q��������|��g��@�OfW/&�\��K3~���3�`@_��}6fl�m�C6L��@��g7�5F�?����.j�
�	����jF��W���6������@t��*��(��R�E�%��1Z/��Ma�����O`D�������\H���N<���+��_�8�J����M�Y%���SAy���b(S4�����P�6L�R+G��Qf�LF���2� ����W��6�l1X[�E���e]����6����"�2�����Bfc����4��e\a!�GsD���r���D��M3���x�5M[��B;�O!9.��Q��!/
��(|��S�c���3��.�y�$^]�����T���*�z������+��=���l�x�V����������o�o�|~���KO��AsS���|���7������������M�`v
f�T�����1V]��,����Gz�A����A��&�16:�I5�if�Aaw��8�n��|}������R��j�:5+/���x��`�@�6�P5��R0(g�ik��(Y� h2u������:����Y�x���.������\���S)��2i���X%��m������n���Ng�te��<�F�*:�G8�Q�"
G��
 �,���e�q&�z�����[�qmuyM���C��	�����@J��i��
�o�Q�4��
�\yhJ�BcL������x���n�xvyMx���<>�%�6�f���-��$'P^0h��:}��V�G)y^)^N/�k��|�6S�QX�%�nXd��b��d?�\	r��29�+����E�
��>��a��c�0�r����@�W�	����.�A7���������`�����k��1�\vz:k��4��D/���������&��Wd�(��� �>;l��}��H�[�������w�=�o]������h�������F�DL~u.��2�s�XF�� I7Ia��i:��`s�4��`Du�l������D��RZ�E�'��K�]�^Ip}�d��{���=��;��B�������Y���T����P�!�q�&]
�}���b�������r�#]�J����/����H���&�Z�Pi����
�����:��#�������C�g������'�A8�����H���R<���Y*k�%����6G��,S��e�o��(y�E�oY�-$D�Rg�(��=�AvYT�t���vxM�~J��G�	�-
�>�}�������24K9|��./t&����5�j�������1�[}��|��*�R�����inU�O�>�E�t�t���K��<�Q#�R���&ZY7��;��I�e���d��u����_:/�@t��y!���-��
endstream
endobj
50
0
obj
1611
endobj
51
0
obj
[
]
endobj
49
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image13
41
0
R
/Image14
42
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
53
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
54
0
R
/Resources
55
0
R
/Annots
57
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
54
0
obj
<<
/Filter
/FlateDecode
/Length
56
0
R
>>
stream
x��X�nEK���J�B.��B6s>p"M���V���REi��mIA�
��O�uy
����=xmO�.Y�z���73���������a����O��2�`�I=V���~�r��w"
�/^���Pc�W^�����3Lr�w��������~Ik���6B���'�.Z����mVK�C@��-�����,��-E����������r�J<�/��.���s�����l�c j3-���) �/�����~U�2}���H���>-U3}���3��(�s��bSv��1;e�$�I~�
�5����d�����}���x���������X('�Z[���O��,oa�M�UJ{QH���!�BK��Z/��LAw����'�"�_���Y�?�+��%���]b�[��[S�B���D�U������[��v��M�HS8�K#}�B-�78�V.��A-��x���n.�
��	�qE\��-Y�Vn��]�ZS�=������"����L!dfLfg�����4��yc\��BZ#��{)�^���QPC!H������E��JD2b(���EfTC�{6���m�k�%+�h}���[2���I�]�./��7�����u���(��J�T�"�1V��"�%�&bb
gVC�'#��"�=�r��H����;#��1p�R���[$S2�����
���zep���};�^r+*Va�����
�X����2>$&a~�[��B������[����Q���"��Nk�n�f��%��Eh)\�[#

���8d�1�%��l����m�{�L��2��yx�]gg���`��	�3��IJ����}6���!��6��H�H������E�}v�	�4���K��xY@u:����zGM��\	d��&r��	IE�c0v���s��A��X�
��&�[d_g���E)���]�%�)~	�f����'��wi�!��}��L���}��_t���j���v���	�w+@�$	��jYTb�;T
-&9e����$-��(}�O��Kz�DujWy��a���������h9b?��9�D���)=Q�����tH�*�LUG&���M� ����B��)
�MG����R*Z:_��K�a�n�c��6�]u�S�)�����.�~S\��	oaD� ��.	&Hm�2}m+��U���[hh2��>�X���kv��,,\:��-�� �A��Y$F7�E>Nh�����PDYH�&���`��	���!�������T4e]5KU�,U������x�Z���-v*y6]�Aijp:�������)���m��fw'%N[�0�U��.6���2��y�p��T~�����S���Ss�u
����t@8�������(�&����'Y�8�gh�:�al���IR�h���������y��:!��l�+�=S�A]�m��,e�$��?�S49���|a4}.�m���*"�M���P+��S��w�!����)�v�\H���'�5}{(y���6H#|���}���?���
endstream
endobj
56
0
obj
1487
endobj
57
0
obj
[
]
endobj
58
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
605
/Height
205
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
59
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((���]"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?������s�Msz��5�\��\���Ms
�d����S���!�g;���zt���xgS
b��A$v�	�O�"eU��H'q��<9�j6A
����Z�Hd�D	K�
��p����1]^����_��vq�(�'{�g*�d�8�9#<�G���<�����+P����g��.���{o�[x����+,nq�L#~&��B�R�������L�[$H�xA���=j���V.��G$���g)3��Y���nx�����t5v/�\\����j{�F�EbU��,!'>j`m�}(��������(��+���O�����$��%cr8��2�8=j���o�H��,�ne(�K�������KOj1k�^[G%����e��-l]�2�c� �����Wh$X[d�HV�pq����[�Jg+��{Q�k���.&��fWA�"(c��[�<sN���q�4M%��nm��'������8��o��mKG���mR���<�=��H����WvP�B�7? �r8��M��w����_Q��EKqk�d��n����~f<�����sZ���^������4��Ka-����;ZE�7���a��=*+�__L�]�m���b2YA+PA0>A�?M��O�x_J��2�{t�G���N�./�-l���XS���L�0�D�x�*	�xc�3��p�/0�����k��@�3	����z������~�5�
���5�_f��Y��"\K������03��j�uK�B��j��#O�����X|����)��r~\du��/�At�N��O��~��~��.������5�+8'dj�}�B��Z���qXG�\]Iu��q,_efDA�����e�5�&��Y����Mmv��-.�nGb�X�j�����5�{uw6�a6��
Q��g?�o�7HV����C�Z�P�\�^5���/v���s��&&�J@����/��K�w�����'a.����0�i�nt�_����k(a��l?1�,~S�����Z����D��r����,*��y
 ��:k���A��el�Ww�%��������>��I~P��I�������RMwI����DsAq,�`-��Q�
I�����9�U<_7����k2����+=oO�O���)s���dH��1�*px��b��'D�t�CW��;{K�S���X��u$
�����L����`��f�[x�W{K���`@8��.�y.��Ou��ID���<p3��N�'���v�.�J���i�B�7�Q�.c��t-�h�`h��>X�;����]��v��v�X���RY�f_0��)����1��R��2Eme�k���c�m��K2*��H����T$w�a��W~&��Y�������VY��2�Sf3�`�F1������(���+�8^[�-��k��!�$%����!����9�jf�az��������-�SBa���R$(w
�#��NC�sY�?�m����|��m��n<�3��������]��������{u�vg��
���!����u���W+��w2�����K�V+���!(����|��b+2���Pi����U�v��p������I6�n1��R�������K�.���5�7q���u�Xx�R��������7�X��W-���h�l����� g��P�P��R�n,.�
����L<��i�w2B�(���Gp�=1�	<=�Ow"��4���=BIVFiQ�Lj6�FW�>S����j-�Ep&�Asm3[���?+`d�z�*�Z���/��������	��3�Q��0����\��7�{��o�mV]6K+�,bA�6�����	*0>�8�5�����'���+����d_����+
��wS���X���"���t�����!c8�����p*+/�j�63��n7�<�h����=��L��s�Q��a�����ma%Gg�q�9���<q���AV!��pH��g����,�tZ^�m{�f�	���Ds�$�����Z�w�g��z�������
X*��b2�|���+��]��am�![���J�y��5��UM^�X�H������x��!�1A���Z��[~ ����#���xY~R�M���8��:��������P����\�K����1\)�3��8�i�������b�bv�Y��Y#6�S�3�$}O@����*��������}gog�Tk}.)n|�r���c3���(�c[*��|r�m���������>^����1�p���v�uw���[`�q����_`*�����@
����7�E��Y�M�%�0�o
�#���+r{|�rx������/����I��Xt���)*d���p���J���7��[G��f8>��UG�]�"9|�,	�z��O�'��5�8��O3��9v�X0M��\�������e�^Z��oi���M++��D��m��d��4�����O�����Z���ix��qb.^8��O+�Fcf#j���\���a�]��>�������n�S�����.yV#�����^�����4y"Ii�O4q���&W�`@
zd@�t+���-j���x��:�*����w1?�QW��������I���-&Hga���x_|df���GX������\]��i��)� ��b^@�;�Dcw<
�S�����O6�$FF���/�9G�q�m��5�����jv��v�i"0[�R3����2x�����r�����4��Qy��_��kK����������$Te�Un��5j=oTm~I���7�Q-U� 6�["axn��?w$d�������+�����m��1�/����
$)�2K���`$1#5�i�&�l��+�r�)�X�o�t6r3�9�jw�y��EU�QEQEQEQEQEQEQEQEQEQEQEQE�Hii
y��T�����_���.~��oW���8�
�@>��_�����Q�$����V���d2��#���K8Zym�@.B��r��\�mq^{��
����SS��SH|���Ek�&9��J/;����x��$]B8
�v���QD�}�G
�����tv��zt�&u~�`.�G����]I'��"',v�8!z`���W>�.�C*Jei��n$��0����B�@8�q\��6����������k1p��
��|���j��N�4C�p��he<�����y����;��/��t��\�2��#%��.%f+:��[���}9�Z����
F���j++��Fim	�%fd��9�H#���G�
&I.oui'"�_[���n��_5�vv��19Q�Q�-����N�&�I�+��)l�o�I��0�N��u^���m��nm��\|��/���P"�M�X�@2A�9�S�4

����9/�x���$d!pN����y��5����WAo�\YB���;A��M�>��2p��s��������4�q�;[`�w,�Q���(�������[u�m���9�������9v'��� ��~������O/�K���y�����/����}�R|B{�p�G|�m��9�D�|�"(�;��zsJ�G��n\�v�^���
�����Hc�iP�-�s�z`�y����]��U�����E�2�����bG���4��#H\4 �������?k}~�F�[YuV�}:�K���3�����}���T�� S�Q�s���i���(�#t��e
�;1;����n4=6[I���e�re� `����Tw�:q\+��[}�KK�Z����
����o'l��.]G�r�q���1\��mc�2=��W�.Ic!_��=sJ2R��Q����&����X�X�7�HDjC�����*��#���gN�[�m@��q�Q��K��v����t�}Z�o`5�J���8�J.��
����.1[5����+=)uO����u;��n��Wg$�����sR�[�����Qw���y5_SKimW�41H���v��@e �N����������??�R��#c����qs�ps�M-'�����`��5���U��d1�1�}
S���Z���cN����u*K�9|�9�@'$��T�e�lC)r��A�U�eg�O� o�Ac���������{�r��y"����<>f�a�@$������5��1�r�4A��$?0*�M] 2o5?�=���i���24�Gx�bm����6��rq����<?����i�V��I���Pv�gf�y���_������mt�V
�
F�r�~�������8���VB�S���������K��{n�]�������f��dH�����u�9���������*F�Q@
�`�XYx}mu7��%�3��7�#�m�����!�6��k~6����������Z����0�6��~�ijd`
�z V��
��2z�}�����NC��Kk!2	RS/�I���K�$�;�t8�A�����,{Dl���d������q�Q�" �e�u�s<��
RY�H��:�6��q��[?8���O���^A-��#�aL�6���U�-�`I57�V�X������t�B����D�-�AhB0`���.sU���%gkf����!{�y���$������'��-R�Q}�vVv�4����&���'H��`hq��z�KMJ�o��G�X�����m�Z5�r#:<h�~P�8^P�1Y�V��p��L�RI
��1\$��3IDJ�����c��s����������������.�/���W7������-/�.�n.
�U��g�qk�%
W��-����xv���mY���8����0$$.
��w��n��\g�K�����4�r('���|�`��|n#r��A��V����%�B6�n����P���`8�mm������C
�G����kT��@��O
C��u�f\������.����b��_�FF:��B�OX5�ne�pg�8�	���Q�eY�Wp-�8�QS��{���lo����.�i�*��bI�U���4���b �E�D�{p� �X����O=�W���]����T�	|��d,������!R�q�QI3�Ri���T�����a�p�u9��P*��+�s��^��E.H�:�-U'���hp~Xm6��������zd��-�gm�Hc���X+
�6S[Q��������V;�9-s���/�'a�Lq�q�S�t+&��I�y����.e��t3� s�b�(��B�H��x�+pV��71lD?����=*����k!{ky�D��]L��U
�����s�����E��^�b�������5��	��.��������Z�qX��`i�'3��7�������B�[ +(����V#m�	�g@��4QTEPEPEPEPEPEPEPEPEPEPEPEP�!��5���R������k������_����'�����A4R<S\�R3��w'`:`��j�]�Y��-6�������m� �2Es��~��Gu���>������9�{m�j�>�����y&����B�6r�8�=��.i+5gYT�*����*�6��
���oV`�^9���Y��l�$���%B���+�n�A�~e��9�/�-9>��p$9�����������?�%k���k�&Y�����uE+������;��f�_����a�E�I7��#hv�.����y=�$x��>e��b�v�b�)�������"�C���K�&1Gn�#���e#<��}�:�[I�n'�12u,�� �q�����j�2����7[�6Khn
�lWd�E�������>�i���)��7��f�PTn�9b��
}��y~����G*�
x������R���.������	�y��Pc�}��{���c^j�����x�M���Q FM����A����x����ar2���Yw��U����k(��W��X�]Y]63��=��o�/�Je��i%���:G����y8�c���j�;	����[��:#	RG����#
0N0#�����s�Oh�k���Y�In�eF`�`����g�=k`�x#m�J����a�^N>`rq�x��\��uy��&}R�ho-��KH��F�et����r(�u�������������e�!u�d�K+�-��F�],
c#��"�x��2��c~����w��@c��G��#�e_�{�	��R������n&��7�UULCx1�
0rz���%����kmN��������O�p�K�#kNN^�V��W�\x�E"w���(~�f6����:�9��~1���b��/�2���$0P>�gh9��Z��%����+�.h�;�@g���H��A a�|:��t(���������VWK%�w6���������Q�� ���J4�+	95r���4��F+;6��gH�����4��s�����o�|D�#��{{;�mcp�M#!��$��p@�;���D�zu��m�K �V��b���
V��NN��g�x[��:N����]A,���e�&(��e$��������i(�m��~����K��7Kt�9�b�re(S{����"�5kC�6��3���[���n�3���8$G���#�.�H�c����C<w
���w`�p29���A&�q/�m�6�������$�
�mw�C&N@*q�z��_B�����)t�f�n�G5�V�L�
o`���wrzdU����H%2�8�1H���2�G�kV��.,,m4���;i�����t�Q����
����1�b�W��[��pnH��v0�m��l�vq�����8<
DC�_�0	��2�N���u9��.��:���<�n�v�8���@c�y��V�z���A4�j��#w+����!���3Z����oy��f����0[>��7�]���Z��M	�[8-�e��X�	#[����eu(�g�j���}��P�3M�FH+��P/^��{u�JI��kZ���O,��>i�D��q�vP�8���2x����-�����k��EyO���X�� 2�bO���������h�S�����@�lVT�|�f��m�������4��!�O�������c[�����2���G=(nv��k6K�<�I�""O)�R�	6�'�g5FoY�Cqb�\��w���6L�nI
�p7g�'8��gE���U��K���G,a��LD#���N7`(������G�]_�6�	�XT[�G��]���T��y�J�5�
)|K�Gn���'/���nT 3��IA����G<��4�o~��y<��������� �y��{����3���$��d.PB�HR7Yv�##�'����y2�'E�K��v�;UBF��x'^���;���g���M\Y���#lnD����pPT2��s���q�-��m�iyt�����m1<�K?+�E-��X���3Y�xF�-������4��[le�#$��.T���8�����������a����Ku�e���	C)�Z�m@[�iV����}�2lS�~��v�������U���B�}�\���e�$�d�$���ve=�kj^��]���%����H��_�!�p�Um��Q��+v�iu��y#��~���z��N�^����_����%O���f�Ke$4����0���S�v���� ���--����1�J $D�X��p���%H g���.<����F�H�L�Zy���������$1�7���R?
��<-w�^�+���p��m��fs�=8�J�T��-2[�H�Cj����)��E�r���=j������!8Ha�7�����L:��bH�������1,s_��$V+���;������GC�����=%�:dW7�q��\l(p�ws1
��'��1Bu:�/��f���7J�K��8$t�����^9����T��z1��O����@d�P���R�W#��8h�����y��q%���r�Z�v8q�E�����;�xb�==���3��iklc�#��g��H7����`h���_��Sm�i����rJVH�
�l�$dy��������7,������8�pW� �I�F+Z���-���4����5��[2D`�J�����X)���~�m�����"M�p� s��#�M4�����(�@(��(��(��(��(��(��(��(��(��(��(��(��(����4�����*\��\���Mt�?t�7���@^
�`��.�p�NP�������^�5l}M[����/����b���1�����b�!�6;��5�}o����In�\�0����WR�o��$�\3�g��'��������f�3�9
�2���,*-�r�^IdH�U�%��x���{���&
#��oRfg���2l������O\v?]KKm6�kY�g��1*������E��t��"�Yb��^TV���@8�����5Z��t@5��;����u�������J�{u���-���E��-��
c:����~����-B�Yn#YT
�bp�2�=�5��&��%�d�����������4����RvX�Z�����P1�HU]>vq�� M���S���KbR��a���SL�&���L�U�:-��jlc���
/���bo��#>���U��
sk$)<��"�e��A����M-��t�$yf��y�31�I$�I'�j��a�,dq�a���U����[]>���G�������#���G-��Yk:��M�o��Z�ViZ�U�a@';v���3U#�~���F��n�����yS���(%bx�d��@��Z���A��NX"������UK=3D�����PVF0��ec�������1���$Z���19f������r�b1�w��s��S������&1���R��T9��!�C����=0:WDa�#�tc�_42���������3���T�~Mr8j��2~���q��{S�s���W�mf�W�����m��������F	��~�r�$�����{�=R;K,�_�\^3\�6|��me���O8�J��iV�*��(��/%BlV�0G�1�s�:t�:���jz���~�w6�E%��dY{2�<6c�O�j����������+�x��o2%r���O\�sA��N�-Ec{W���U�$(����@@�p3]b�Xn�/���f����Os�1X�$>���M�Gy���8��=������#����W���53��I��x���C�I%�]�3�$�!z����OS�5K��k8--�D��w�|d8����S�.���M����P��v���q�������T�	�+h��M����F�02�(P�z�9?�Ko���� W��������uP-�+����y��5_�&�m7�!��{�${I,Q���d�X�H��������t;�u���k��������Y�dh�r� R7$�Z^�`�-���y<��<�I�X�'b��#<�����W> �!����kho�O0�m���)���2�����wU�_}�E0}�f������F�h�$����3�u���-.�S��+{i5W�<��G��hm���6��q�R�|+�����l�A�9�1�'������Cm���M�vv`Z�����]���f������J��q��:���A��y�x���.���O�cn[�I-�!GS��''�p+J��i��iv��l^7�"�j�R�����E���i���I�$3"�+��X��BUr;�zU���r���\h���I�X���-BK�������$��`�8�K����t]jp)���4�p��2$8v`r�����s�8����L��.%������1�%�pK��6��\Z�[�ai-���"'�JE�������G�v�=���O�kK��.R��A�&`�#Z�0y9��7���q�dt>VmGQ����m$�E�N����1��8^Ux�%N925������	�����{69�8�LWnv0;Cg�h���k�O��	k����l�`���K����1Vz��$&�_K;���+H�������%��%H�@A����)��5}n8�g��[x���) f�I�9X���~���P�lu$�u+k�����%�+z��
Q��w&�	!��\�21�4�� }�|�|q��V���p+�6}J���]J��p��0���BN�2K����������|���{��&
�v�e#�m�eS������*��&�������b(o8��,	]����{�UO���[U���/���kv��n�Q�^W'�#����\�u��m��	�����v]�-���_%���@��������X�y�`2�� �����	�{u��j�Hd\�X�I�� �s���'�t���o���kt,�C$�&�l
�I9#�#�4E�{�8�c]������&��K��u5�0�#)�(;Y���z���B�D�H�B��nd:2J[�`c��H�Tl5��6�c0�rD��l��X��B��n��@��S���6����j0��,�e�pW�e	�
�n��mo�SB�Qg�:��Z�i���n_rJ[�9M�a�q�pk���Wqh��0��GD���e�Dv$��J��yOZ��-!�� }*���q$��t++��1�9�&�i�zm����K{H2[��1��8����L��.#�7�3�L��sq��W�:��<��E���!X�k�R�,d�#pT�u����nE��?�1�v��I�z� {TRi�R�}�KKw��_��Jc�9n1�U�����x�U���f{�����i"yMo�d�rp~opq��c}�^���$�qZXJ�J�4��r�� ��
�Mj[i�v��Z[���U�����6m2�k��f����!��%2 �ldu5*2�%��_Mmu��]�1��ZYZ�v��$���A����yUy�j>+���n�/���Y��m�1�;r�t��|�\�8�I��Id�rZ[���
����Th�T���e��&kt+y;F8��K��03��R�V�.�ioeh��$O<��$�`�(���l�5�h-��������a��	>L�I.���fPP�8�n*r��x�V�������]B�1�K�@�����:^�bS���<��������q������������[YY�-������F�����.w����{�i|C�jr�O�Z��J������4���c>6����vV�N�i�kaij�X�UX���:#�)���g�c�����Dj������2��K�]���W���U�!`�=�:}�J��P%X�h�IU��Q��{9���N�nV�k�'{wH�P��$���q�������d�<?d����6m����W�G�$V��Vf�����b1�������O��\Y=�v�I�)#}�y���wc?���������SY����$�����u�Q��3��c��ns�������X����B�'pnx�����{Sf�4���m>�DpU��R;r�'����������-<O�^&%��xa�y�HY�h$D*�v�w?3`���|C�jr�O�Z��J������4���c>6����vpi�����%���*�[����dw��c��i���:����K�.��@8���>I�L��0jrx���k8E�[Gn�U>nU����9�qM��W��������^C=���+L����h���p9�S�nZ��]�RGk��C������� H<�J�Q���8DZ����Jw�%�A��i�J���\������k�i���]���w`�v�����F�����mo.E��-���DlP�Q(��HRX3��W]&�`�iv�v#��%w��
���e��j=?��M�������Ot-2�v�*�H�8�zN3���6�o-$��hb�����9��lS�y,A#��-/����Be����d�H�&ye-I�6�|��������g�gd������B���li�09��L���+��md��b;��L�=�M]�d�(���(��(��(��(�
�CKHk�=2���5���t�Is�Msz��4��gI�������9���U_�k����jX�-X���Mh<�>��U�U�+�~�l��1Pxc_�J���l���w�.d*�e���0��I���k��jkcku: ������S�r`H��]
0v�x����G'����.V�L�,c[F�@2
�&��y����V��/��+���U�g�#�$D
��a���l���dx����f�3�$Q�Q�23�$��$ |�CG�Y(��p����|�*4��*�\&��.w
����Vo����+IuE���+y
�A�2�����������%� � �=���q��=	�G���?���-/,�H��l��U]��8W��[,FT��9��	L�N��3�3B�	lC�A�>����7P[�Fl�y�$O(���#p;W!�
K��&Y-���������H���f��/�|K���J�y��;��&��.�K<~H���������;^�o|Ksf�-��H�����V���Buo-.F�=iZ�/����+���-4��Y"��~r�(�*����p������V���co�o2�iJ4�C)H�F*s�����u�|1.���:��Qf��%p�����x�|M�^��Y�e�F���Ne'!$�#�@�~|��t5^�<��/�CmG�x�m3��Y�y���C#�\l�q����{�Z����6��J���t�X��R���A�L�����:s^�y�J|Mc�Z������	��O E�F��x���nYt}�"�1��h��	e�2�3���-�pN0+��nH��\�u
�i���{$k��-,���+P���D��!��9\����h�Xx��V�E��aS��iQ�.a����@�������]����r�Q�<�e!S�@�����	<�����Zx�i�%��%���!\��i��vF�'���]���"<���I����c�s�_i����TI�X�2���z��s��|m��s&�4�46�
�%���!;�("�<)����G������}����Z���%���"0�6e9;��9�u>+��t�WL��x�[�g����^6P�	�I���T���u�_A*j�f����|M���il�pG=���N�`e[�@x����Z?lu
:�V�{9�����7,�"��VRr�'<}k��������M�g�iW�r��#w�9�k:�:F�=���E	��@�<�@�@��K��>�(��>$�
J�����x�����c�O*6�<�:(q���H��Nx�c���v��h�
6M4����*�&L���
�co�3������������K7?ffDR70,�r�
��N4�|@���X[i����`�K�h�����Am��=3���p�\��b�|���u���v��E��c4o+����U���qG�����t�������c�e��g��Sd�d`���99���N�-:��]�I��'t�OL��d\x��+��b����38�Sb����?��������2�S������!�mV)��)�;&4`x0+���t�
��5�mm��	r�Kn�^��Z@�0�(u�&����x�-������A"�@����<Re��.����]��Hlfq3Dp�r9�����pO�V�.���>��]��+-�yQ��������
$�0�;��|�����4�&y.��;�����F���m��v�)�n�k��u�($t�Xd�C����c��GBA#U4�fo\i#N�1�S����A�7g�����`���������=GE}>�K�zi����N��p��p}�v�Q��������3���1��?�%y��OGu���%��Y�oI%hcs��1����6�-����k;�����m�1QrX�L��c���H����jC�W�	f�}Q'��
W��F'�e]X'��3���������>���-�u��%�C��������t��X�������!f�+��8�rE�D��$�����kvs �CS.��7L���T�+����<Ca
����I�a�o{s
��8
�������]��t�bk_�����
����(p�?v��>^�"�}rKk(�l�������f�����36�������������h#g�P�%W@�rX�{}�U�=@����������%������A�P��ZV��bO�l�`���<:��q�	��`WX�4��p����8I
H!��L����[MJ���u�-���;9f���*r�IQ� `��x��aos�������&��QN���3�:���*z#Z�1�v��@���$O��P�F�2xi���\X���c2h�?���[�$������e�J�0+��t�=��$���rY�[���-�\�O,J�����3�5�������T��{8-mn�l����Ey%E���UY����iN0j����i��������{=�{��	�y�Y<��c��9%�s
�x�
>��/jW���������h�`U�#C�!(��>�v�x���K59N��Ij��G�P����������
��$��`�+��u	�/�[y�x��8��
��
9$q�=1D^�������$��1�	X����	�rW�,���:~�oj�:z�4d.5��;���
s�������v�R�p2}+����[P����n��BI,���=��%Aa���Fh�����^��S�|7��\�����m��(^5��cJ@.����2��r��P>$��sj����6r��Q[w�y{�xLd�Z�k;z+������ZE�o.�#�yQL�"1�s`1�$��m.�I��i�0�N�(�����n����3�O>�Ji��QVEPEPEPEPEPEPEPEPEPEPEPEP�!��5���R������k������_����)�G���ro.�eY�+bm����B��S�����i�=��]p�.+!<(D��z��]=|=gu6�#Au����26\���S9��n
�x�sW�����������F�(dyd�@<uK~?�ku8�u�X���3���m����^_M�u��!#&!p��*29=H�Ve�����oom/�I��P�$	�0��T�hy�u�h���~7�L����&�����ea�t#�/<�wc<c9z�WH�IE�7������m��������C9��;1�MJ���&��#������z��I^dEU�L ��[����Z��yiz��&��bl�=�Cqm���`��J��x�Z�I���V����V9RI���!)�/�Kp��W$�
5V1�s��Vz��K�1�k5��l
�4lOL�%��}�
���z��qj����$����5�$�{�B��zb��E��Wt��bF]�_�
���@�QQO4��;�W�&A%�/mf���m��]�!89��N0^.���^�t���+}2�]F(�b��c�"A�4p�'��5jKK�V������d���e�2��"�2Y2F:g�X�
�.��"���{%���E�$���|���V�
��i>!kw\Q�gx�w�i���T��\F7F���U�#<����7@4��/���C�E���i[���R!�M�
����9��JWY�S
���!��w~l�G`�C���Ep��Iq���$��%s^~���i�X�o��-��mu$��F���E��T8P�NX61�@"�8��/�%�@�����o�g+�IU�e��c�0�UK�is�s,'��\��z<�#@�xM������g�&�i�v}R����rf�d�M��l�E�h��F8�9��J��Z�|su-��/a���L��\'����6i���3Ep[���":8
aNZ4�`~�[����5���55��Ic[����d(J��m����h������c��ArM�fcdZJ�����Kp�a��5��]R�C���
Z�]�'�I��������U��jT��{���QU���f�O���sj�Gq-�61,AK/=�=��q����%�]��y#T��Z��g���������=�g�����l�Mp��Kwb��b���t�������n���t�xR��+ac}{iq������$p�
�)��cc':?�J5t�c���o%`���*�+�*H ����_��73C
��\����,����#pP~lpJ�&�j����iH�s��`������k��i���_g�Ib��*I���+�8*:�+��5�ho������"H����eq������pZ}�Px:$��N�R[
%���3���Q�����<��-/�m'U�%���b�0^��f���hx{
�z��y�=Z���������	JvP0c
�`��]��2�}�5?��2y�����$��q�q[q������0YNA��"�+�>/��V����.RE2 k[r�#Xd���������^��G��"$��$���R7���:0��Z�hjQ��E)�a�4�RUR�CeI.�t����>dx]#�,����"L��w���:rz�����6�a�j�Ws�4.�,�v��|�����99�.e��������A���k����x�R�Edp�yR��:�Ux�+9-�B��g�R�m#y�4�C!\�q��b�9�l��#�	����_�jN�Z����D�S����k
��K%���6������Y�z�I)P3\>�M�-�5����PO
�&���I:�<�f��F������^F01�\7�5k(�
B���;[���d���|��Hx ��� �u��)��%��1�q�Kq-�k:X���&W�3b�>�s��3WJ+{��k,z��0����bx��Ax���R:��`��d��^�k�Ip���f����(_���}�v�pn�m�X�q�����U��E^�@���
\���Eky}���K�����S(���*y�5%��y{��kwyc����"Ke}����B���00Frk����F�x~�.^k�g�������Tt���zS��k��
��cw)vd$oya6X���u8�k�U����b�xf���&����|���3�|����:`	�D��P��������Kg1,S:�no(��(����r�\��)uW��+a����y?C�:���f�y���w�q\-����q,H�"*�1^~3��:)����c���$[���lvi���^2�A��p8��v�%���O<�W����m���`�d��r{�O�h�������V�5e����Y��,���Xp�j��N1Pi�
�����KR��9���<�W�5P�� br����������������K�4��joi��f��R"��{w�ao-���{��$���
��G�Vh����V6��u���X�^F����w���3����(���(��(��(��(��(��(��(��(��(��(��(��(r�����L�s�Msz��5�\��\���Ms~��4�/dXVk�E���(�y ����+�:��.����y�*o ��������u�Cr�=���C��w=�����������e��H��,�(D
�����N��u)M%dx��V5%eus�M{Jx�D�-� R��`p�qS[��7|������kg����#��q�1tm���������1Ycs�:a�54�����������`B�	"F3��g���O�}��J�bjE�X���eH�1���$������X������T���t�\���`}
S��W�(�/��RI]�J��q�dd�pz�;�4���*Y��Q��y�9�'�Q�P�S���b:.�`�����p���b���	G�O������o����
��rFG�
`j>�g���<"��s��|����AV�O�����vMIo��i�	���:u�N>�|��k�*������8&�wo�|�����(�Y���-�����>�2��C~+	�3y�M9#��Kih�rN��e��>��y��J������4�s�F�<���PJ�G���z��9O��J��u��#����I�,������8����}�>���������<0 �W�"���v��S��*�+P>��FF%����}���8�6���uMg�z%��c�� h����/�x�~��'����I7&t9=,z�(�����MV�m%b����1@��*?�J�s���/���o*w�dw=~��^�KX��#k�K��.���%�����<�U��L�`f���5K=~�U����X%��m��Q��@ ����v����y���4I�Z3�����(ns�8�h+d���Y�V���@��� �+��'a.����0�i�nt�_����k(a��l?1�,~S�����Z����D��r����,*��y
 ��:j�N�����6�_�SQ���_�LG�70##Q������:��:q�����D� ��a�o�B	��</�Y�z|���m!Hc���V3"Fa��S��|�g�:&�����Q��X�"�,��2��(�� m��v�g���(��������u4�~�e�i�t���#;R� �'�i���&��{j��2��U0�r9��Y�)��/���M�������N���ul#g8>����������kn����?�����Sh �dv���ztuCU��M�)�	�K���|{p��Kd�����7Q<��G���	b
Y=��G�
a��f�6���Y���\�q$����HG���c�T�K@/>�h�s.����
B�.s����+R���)p��@>��e�C�����	%���;iQ����77|e��=h�l��wy�_Z��j��A#4Q3�2Z��Y��@8�=H"�a��m%�O�����Ks�V8�>bX�~�������b�b�	�"h����F�a@B0�~Q�n>Q���2[][V���cxb� �a#
s��H���W��[���/.g�����x%�)U�3���~5��,���aq8���exf�t�$�2	o��
��x��f����\������m`��f,���6|���l�q��X�����m"o�6�"�vP��<�l�#�g��)��
���
@X�_��[�����ns���s�-.!(���b�(%��Uw���c]�<|�3�CX1�gU]R��u��WI�q o-a��y@l�����y�:?j��K}_����X�����,R�3��9T'��1�:�����\ke�~e��g~a�t��������=:��������Cy�yr���q�9����)�%}����{���k1���K�!��_��a�6s�����Y��X�0D��Cv�]�X�(��H��������`6���>�Uk+��eH�Gh]]S� ��=)���M��MB��;I$h���E�_@ ��dz�
s����TW����J].)���p���(0@��|���"���I��a�u����m�$h�#yx*�[y`t�1�P�;]�4�V������Z-����Fe
�����C�	����_N��$��09#���U�j�������m��E����b8�W��������������N�ep�Y���We��;��F>_X����� :�u�"(�Yu[�����a�A�Q��J5M<�}�_Z}�8�<��3��ns���qx?Z[�8n-M��yM�� ��h"v�\�!�!�~�>�[yP��MJ���;(�����{�
s��x�I{�����qM4�,�c�+!�<������b���!�.�IV�e��9�U ��o���Z����Cwv�l�m�Ga�s$FB�+,��f3����9��F�-���q�op�3|����aL�]�IV,@9A��4)M����S���+)�m���f;w�D��\��==*5����yS�1��%ap����s��cY�����������Z��$��&�,xU�C�#�\5�j��ec�I:��k7b�m���|���F�����)�k`;�mF��)����2�*�T=�5��(�$���c��K���c���NC�y�WZ��#�5��m��u;��H ��[i�%�H����7q]���	�G|���q��$��q�m��3�P(R��@hQE�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@������zeK��k������������h������]S���Y5�Cq2���^H�_��o������b�=57�=�C!1o
�!��$u������,��������v+xn.��<KrA��N�(��A�����<��L�t���^����Fv7�|��/�r����sW.�����h���"�eh�Ab^3�*�z��<�������T��aj"x���N�lD��^I�I�S���l����3�cl��67q����mY$#T������.�����z��z��Nq�Tqk�D��K�`�Z�����_�s��=}+J��@��_�����][OKI�L�(B8![88�j��M=u%����j7-��|�1���zzU�(�/Ry-dKI��add��������-����7P�+�
���N���$u��eTPK3sU��������
�D�(����d�c�������A��5�B+�#�N]Ml�c(W�t1�����I`y�@����tM:9$f��9I�G*�/�s��T0#���i�]���H�o����HN'U\n��	���8����WG�(b��)�/q#����nc�V��g�S�0�����k�]A��vB/�Pa[fND�F@�V�|T�6�h�N����s&	G�����=����zr�Or���u�dm��	6��8�b�\w���}!."�-�<M��y6E
��v��T
�d��N�;�G� ��5���+xV���R������x���5s\��l5�,�c�si5�'��X���'j���iv�[\i(�/��RE)exT|����<1��<�U5�E����7�kH�&�eI�7b���FWA�����P������]BH����B'y����0�j9#8 ��=&���7���k����F���a8����H�tV�6��O-�B7�n���B�:�g��f�0y�8���=���]�d�s��G���p1����M��4����#[���c�c�p�v�A���[6z����uocaAn#-4�o�8��<���?�K�U*����`�.���U��2��G����������K8B�(]�s�*�W�8ET��y�d��\�g����?�6�n�K��s���HY��&psKe�}B�lR=*��y%����b������S��^">�:%�Am������G3�cx;P���wq$���ti-U&�X�s�|�I?����g���3���{F���&��wX����l��O�	�T�&�S,�����Z:[�O�$�P���P��!�D@��<39�n��������n7��ap�C������Fp<V6���9���O���,�.e;a�Ur�I;q��=1NJ��`m���j0�y��.-�kyQ_z�9
��A��Y�������6j.��]Z�i��n��d-�p;���`����6��M��,��=�����19,���I�Mg>������xu�_��b��<��l(������^�$�"�uxl�[,��i���3�,�l$�,����
Xx[��6�
wu�����(�\G��,���n�v�����F3_�^��"�WS-�+B�
����n�<.�>�%���O�/�ZJ���`/�8���I��k7r�_��m��7�4���n].�q5��&(�S����������7��V����Muw��hcf��<g������V�
>�R�����x��$ym����������Z��}2e��kd0��I���A
�#i#V���P9�?]��P��b�5-B	�U��Q�H��f(�n���ppO���I���=��>�����x.��������\�����}�[=�2���Eumy&�,~s�+�l��X�=+D��m�Ev��(�yY�w '�8q���$���p%����]� ���S�������H W����}6�P�,WWmqo_hh#�Dd����p��q�x��N��'�Zq���������&���GF����6�K����;�����2�v�� ��TM���-����)�m�H���A�/�Hg��5�5��yd�����X#���I������}�u������TP�0�SO[>�%����q���n��4\0��v*q�c��I�Y����^�T��	sm�N�RA4����VV�PFBm ws�j������J�DZC���}�b�eh������>z�h��kv��M�O�X��h'i����2y������������i���������Di!����n�`���q��K�j^���}N	/����F�i#E�>[�E�� 
�rA$d�@�k�����h����x�������+�q��������l��X���I�W�*x<���U��J��y<Eeaj�R8������F�����#�y���#�l����Si�$����\7�7���Yo��������+;K�'%#��uB]���NA=�c��}MR���b���O/�;Os,��m�3np8���?���j��76v)�Z>�p�����"H�(	/��9�x����B����k;g�P=�����TL���6x�T}j����jf�YD�����\�������J>�ae,��#��ll�Js&�8Q��C������1�x��h�m��@��i�]B�rD���<��e��l���v^)���:lgQ��o�y�(�auF;�{�.����v~����k=�����F��wG����m"���cIGA4~\�*���(g���V
�	����F���:�����O�i2��Xf��U�o1s���$UK_\��G<z%�I����O24a,��3<`7��1��c���n��4W���f��V.���FNr3�GB ����oK��G3U��"k�Z8�0e����8P�(������W��6��|_�0%�L
���o*�>b|��!G\��������������oo�h��&�^�nb��?����_xsH��s.��Igx���a����?/������x��$Kq����
�"�$�
	��>�����&���������a[{��_��y�2
�A�	�n�MT���]*#u�������Wi��_�Np	�#j?
iq�Kn��-�����)H�m����l�0)�xsJ����;���������$���rs�R�������4��~�se�V�&<9��(ic�8�����@��2���b��trH�o�r�8�U�_,6��x�`GC[6��m��� ��"��k�����4<�zE��t{R�+Y2�PR�9Qo�F�8Ua�:{RQ��������U��������	r�s�F"���O��1pQ�$w�E�����eu)����|���v1&5	��r��8�3�}��"�K-���I$u���p�!��B�T��)��&���]�%�aU6��R<JmVT,S;{�<��-K�	u�����
f���->��L\F����!��,�z�w��V�Glt�Y/�\�^-cBc����'�o�f��`�6��@��K�X���vK)!���s�P���6x"�d��FC���B���_~�S��$�S��02�<]%�y��
l�;T����IH���dU<�u��_���
�O�E��s���H)&Om��j����-�;��!G����k��b�w'��6��	�zT��E�����
M�O%��B�Q7q�X�q�I�����(��P'��;�mB��N�����9&i�1�FP1,�s"�1�����)pc�@?Z��O�5�>��S,��k��=���@D����O8��P�������������uQTEPEPEPEP�!��5���R������k������_����l��~C�[Z�1�/�������z�����L��5/���a�U,�\I!0�Y@ ����sR�<��d�������W�<E���]C<�y���.�IK�~X��:z�k���s3����c���]E������Kz�]�����$�;v�1+����5��[�������&K�t�7Ryy�v }���g:����yx���I�G��+p���1����8���{=2X"�y��1G/+��g
������4�R�������8�����pgk��A��6`��K��qM��n��6*���������>P���j�F��8## ��uko03%�Yp4V{]�|����v��Q-���jv�P��T[kS�����0�v�f8�?���Qg��m������&���C)�� �W������7�SGa<n�YXF�� ����e�Y$���G��R��x_A�?��=;Q����[Gq����z��p3�����0�����5
B�u5������J���#9������g��r�@�!���4���0��y��#�C���H�t�����r�zt����j����j�/�j��������'����c4��bh��[YQ�v��T�,pf�q��]��E��.�wm$���[�y��e������X�&���z����Y�6�Qj�j�Q���C&�����6��8)��'��9<W��u�����X�����YB�pXg um5�9��\�Qp��
�y���:s��s����c�@s�
���t�k}f+��[q��I@
�#��6wg�F8��&�m�W�m:��;.L��H���d���[��m��Yc.%���HFXE�(`��y���8���������O|�-���aH���C!rB�fI�O�{;'�t;��k��bK�$B-����W�!A
�vz�dz����G}kk��������6�#8v���3�v����d��v�B���w)f�t$��e�-���Op�P]^!��}��S`l��c��ck\���J���Y�fXg����ks���������H�a���wW���������|����0L+���g�pGc���	F��&�Y���I
$v��L(|��]����A�54����sX���:� ��]��U��t9�sJ1�w�T����5���i�3
��A2����x��Aa��	������>��j��o�*��*�����v�gi8�99�y<7�om�9���&G��m��\8��������N���������iT+�\<���	2K�^������@g]&�5�R�������e6�d���~������c�+�Q�>�����
Eog�l�6yM�K ��Ww+��pMw����}�F��l�9�����6����s���jz��5����^���G!-�� (�w����NQVv��H��8�}�O�����g���n����b��;Z���Y��m��D�._0A��9_/
I$�w'j��G]�_[�6�u��@��222�8 �A�"�m�@�)��,m�+o���f%|�;9_�����\��M��>�|-'Kas-�����R����l�XH#?4����N<��+k�-�����e��m�����I,���3�d����i�!��'��`�����'���$[��w�6���P�Jo�����
�����k��b
��Y���p8���������J�#�no�mnDR����rb�[�����KI����:?C,�}���%�v��O4Q�vdW�G-����jK�y!���S;�P��-�GNIx�0OQ���t�8��>�i���l�p2�8�N�zV�1Q��jGq��-��:�
����;H��`� T.��*������������Ou"j~]�������.����N$����o[�rG�D���N��mn�r��U��s.�C���qV���d����W~zC���&�9|e��}�� v�
$��	�A}����t,��h�R"i�#o
	�8$����K{�N��}KrEz��i���r�><�r���6n$�%��Gl�g
O8���O-O=��C\��1��-"��K�����_&O-��i',@Q�''�
:�_VQf�5�
t����rc�?���$�����I���f�V���(���He�=�vu�c�%��>�j�K�\y%Y���n��G�('�s����`gxR����V�j6sY�jyqY����w|�Bs���=�*�[\��nL�j�_%���b���`��ns�t��t6�/�{{��w�ygks��\H��������U��������[��~a3Fa6��2�wg'�j-U�|#r���}�=����D�Eo=���B�r��K�p	���I��n���L3��J�b.Wq�����=�P��K��R����;i��9��?�
9p����Bkb�����L��*�����O�l%������z�PG��v�R�j�:����6m�_8���2��E/
B�J|��Wmy�y���qy���v�������������{UT�.��3^����[KO%����J�P�r;���S���v��wZl.��h�&3Y�e��%<�����oC��=���I}��������b�2K ��g�U�vE\��C���f,#��s[o�"=��29�9���T[�Y[E	�K��V���E�b1��E�{����G]J�@����Y1
>���\�m����!���J�@8�YC��)�p�k-��[����zy��6��N�����OXj�\wj'I
�w/�V`�8(6�A�����o�km�Y��gD�;i^RP���)q��#��QP�|@s���p���Q����S@��_����q��*�}�t�+M��%��\_���I-�mqC�'��#;.6�����8������WVr����x�4��9Km�T3<��Tg�z0��7Nl�M����P�����W#��G,������ukr5������ygv���[�e�y���c�V���n'��Z�	b�L���1"�;��y�����m�j�w��.���%����M����.��f�QSA�y���v��P��2��S@Kt��d^�{=���=�������o����������x������<�v��V;m^�Q����h�5��$��.~Hl��-��x�5���].Ky�i��d7������m�p��"���cSs.�8-�.��Yv�[#89����=�8}
?�M6���Mt|��9P3�����4���2O�Mg��r�@�!���4���0��y��#�C���H�t�������Goz\�T!I��0Q�m�2�3��������TK1�i�14j�-����lM�T�3IB?�'�C��]Z��m���dv�A���"3�f^d�)��oEK�mgHFMJe6���2�C� ���L�#�~`���z��z]���K+�%"!�����]�@22�����Ai~�� �\�H����d���y �=E5�n5�:�hZ��wQ�_]F�������UGP�Pv�P�q�V�~����"���<�^����i��������n�:��t�k����h�vv5���s+�
I���K��l�$�`�)f{����#��$
���
nUb�s�S�{��i3j�:���������G6������2���������Q����[�Ix�O�}4���&\�'�F�������V�����y{oo4�m���x�R�)�H���R<��i �tmG
be�l����I�Dc���$�[��=�����b�f��H��vB�Cr�`wmM���r����t���uud����\�|[yfS�|��~�������8�oi�)���;�J-g��������-X����r	n���]���=����&6���im�C��nwt������1�vZ�5��%�NH����@7w�M����p.�����D���i�#���2���,�E���2�{U���E��B�m�����$�D�}OB*��#�b��c=������������1�������8��n��F7�?�y���Y�����5�RI-��#��Sr�R�j�:qQA�-6{In���G���m*����%y��6�9����p5���u���nf�vdQ��#+��� �P��f5O��i��#�GX��)T$s�#���u�QE0
(��7)
-!�<���?t�7���]%��5���t��t�5��=��/��=��������?C[�i�Z������4{q�����V�u4��\%���/��=��������[SV��-fK�v=<��i�i$.�3��Hp��� ��OZqIw��y��������O}4���@�#>�%��-���k]4X���g�i�Y$�ig3�v-�;��lV��u
BU��f�C/$��$d*���d<�Zw�����������33���6m���F�'�;���ot�Y��R[��^r�R��c��l=z����G����[��?|���G_�K�:�*A�������&��K���WL���Pt�[��G�m,7R,W�m��k���p������$�-��pZ����J�����y��o�����R[��^r�R��c��l=z����Z�����P1�HU]>vq�� M���S���KbR��a���SL�&���L�Q��r�h:�N��i�o��;h����w�P��N3����5������\c������<4�
�g����K�v,��5$�y$�������5�H�)�j1���Qo_�3�~�������I/�g����V��L�M�w����l����W����NI&�M7�]-r+4��G*�����Nry����Uw��KV7�[Yd��<�����<r2T� V-���
��1�U���^~��l���������/��lU[_�[4���������6�;<q�cv�!�2r8����kR_\X�t���+��V���������I�'�Og����d��n�MJ��P�;$�9~[�<���E���>�Kkk�%���&7L���'n�W���9��:u���m~�8�F��a�w�2���q�a�$d�<���Y���{e�l{;ua6�<���e$����y�����=^��T���K(����(��-�Fp>s��1���t�������Kta��r��T�PG����s������Kp�����5��"+FB��&F��C��_Q�`����ar�4��D�W;�R	���A�h>������oj�CU�*������\��Ni�-4���<#Q���#,��b�`�-�7�8�Is��c��4�,iR��f2��D���q��I9����?�53��I��x���C�I%�]�3�$�!z����OS�5K��k8--�D��w�|d8����S0p�������|9��7!n����}��e��M��0�+3��o�##s��l��;��@,��H��$f�I��
����������T����]>Y��{XaK�Q���y��U����9l����U��i��}����"G��B�yfL����n������k�`]����})7�i������O�eP�&�*�s���+R���kk���s%����GfF��x�{��v���1������
���[C|�y��o5��O���������x����)��+5����]X�4�G |�����9{=nU����Aq���7���*lR�
�8:��_Q�n��;i���Y��.!�-��8B�2�18
l������������2[4��T�n9�G\��5���N��|�N,���(��YZF���9Pw�GLj�\��\������PC�\@��4l���v���;�
�c��%���I[�6s��"��/�F@e;H��#�^Dk��_�������,�+g�ku��vO%Y�vn����:`6��S}.h&�k����dh2�o7ve��(
�
��b����W�
��S�����'��7�k��V��}��GQ�9
jk�i����9���fI��f���#+��ydpO#�`^<����7R���EG��R4��	�s�(�6��:c&��c4�i���4���^����Q���x\�~n0kE����>���]F�R�j��4��jZ)�0@�8+�@|���sZcL�M{�J+����;{��w�ge(w
����n���z������u����.���.4�������a��3�����������-��Vv�y_gl��08m��s��;�.=z�����=��z,n%D�3&��p)���sX��^��-Q/,!���[ �X�+��nT!���`�qr
n�om�p��[�*�I"���p
��=8�������`�M��F����R_���D��iW,YRNFy8�`d�9S���-��6��),jX��9��|9kr���^Y#��K�H��l�G���?��v������n� ��0IQdP�3��r_��V�$T��P�5$�h�s�x�������Nj�����
�C}K[;+��S��9yK+HX����3��ld��o���r���Ot��na��0����~Ulc9pqU<{=��-�;�^D���P�@��v����p`x�UI��G����U��=^+�����#��i?3>�g����yV�l�cH�4�ru�K����K�E#��#��ob��b�"����La��?2u�#���?+6���iqw6�U"��'i|�T���X�/*�`���Y��)�D�3R�X��>��-�H4�/X��$��ycHc]���rH��,���E�
/	��_�-��MyV��J�&���77BF=��+����E��2:Ae����og�F��`H�z�5�|G�[���^%�jpy,��UUy6g��E<���c��D�z���@������B��N�����9!h��HP�*Ns�s��5$Zch^^O8�Y�Kt�m���rz�}�������^-CO�������s��/j�XX�
�?3%�������}�����Z�3,v6�urb%C��H����F�b�]^�1<pt�{y�H�{[h-!o���8�X��`�����	���	��B�+������;&dvQ�#5���s���<I�[hzlw���Ou���o*B�6�e@���������J��x�U������V���k$�B]?q"&��'�;���[�d��`4��5��Y.�uu ����x|��h�����A8�g4��Gcm�o�*��n���"��)�#����9s�;S,����]������!���(Umac#8If�x8<����|Cs�Z��>�/�����)U�eU#+��s��rxw����>��]�Y�)�>z>�0���|��=99��]�:o6[�=��H�M�1�s�1$��Gl�9w�-Z_�X$�0��Ev���+�^^
�C�FI-�t9�GG����� �R��;��s#�m�X���bp��\9�@:��w�h��a��h,L&���C��S�;��������}=���i����U�$
��W������^�e�������Rku��B���\�6������q���)�[T��?���\%��\���	�F�1�dyR3�&�������ek��[��1�C��������q��g�
��ki"�K���0-��'�(�s����0[>�����o��[�]��[\yL����V�(�;���s���~'������Z��r��$1�O7�����������:ZY�s�I��������s������Q@��`����j[O�o���+y��I0��r����>�2���`����j����$����+�����]b��o�J2Ilc���]_R[�"��;�!X�hZV�s���F�<2@���Rp��h����-bn����^�/��Q(b����s�F3L��5+�#�:��w�	-��,�����2��#������b��u�X4Ou�h����	DFV��;�GUE���u-^�x���������I���6T*�	���q�<S���t?E���]^D�<ZM�������/�o�W�+���T������i���;�%���G��/�8#
$���nqPXx�Q�q:��v�{
���le_2�1;��_���y��u;�j�Yy�\��6��.�����>���s����	�j����H�w�O���<;v}���=x���k/U�����~��]O������B�0���U[�Q�]CS��e��.4��}�k�'�X�P�������N8����7P����S����[�0��@==�5��-v��K�
����I:���-�m
-�X�z(����F2l�	����-����,���]�|h_�e$�S�[>���t�mN�[?"��(!��Dgk9r��p��5�IS����eh�O�m���w������vF���?�a������7WV�gx�Ha�+n�F��4L�q�lm����*�8��v�=��
����'��;n��&��@���N�K���n��/![K�V{�$�,��k����B/[����)� 
(���(�
�CKHk�=2���5����5�\
s��eMs����F��W�,�z��x[���+�E���B�O.�3�`��W��#�B���9��mU>|��o�y���j��O�kA�A�|����a\��g=���S�KC��Vq�%�}N���M���p���4�LJ��0r�1�y89����X�"�����7`�p3\A����i�%�`h��A�����<��j��E���s=�����q$��U�,63���������S5Z}c�}�Q�m,���C�8_�C��Oi���2Wih��A\�FXs��������ZH��(|�u�[�T2q� ���Vu��ondQ-�������X��1�O
>�.��#)W��=�M�������8
�`������&��r3�\6����7P[�Fl�y�$O(���#p;W!�
K��&Y-���������H���f��_<��i���d'��D���!�~��WK�;9mt�BD
2�j"�.�+�_
�Ai�}��X�#��YF�Vh����|��]�Z�����y�JQ�RJD1S�6���s�a:�-�k��[9� �`�	�S��>}@��
�g�h�#5����
���A�p=@ �4�/��y6O3r~�d~�����>Z��xkQ��;����P�������jX�98��V7w�Nk��8�]�t95mZ0����1���L�To���w|�����F?��
5uT�?t�@��8�G=���<+�I�������&���W�x�C".��B�c��s�S[���a��]Zm�hM�qO,0-�F$�
�#W'����qs>�Q���U��QK^J���`��c��t�Tu-/L��KmB���m��Kq��.�d!�xl�1�����I����c�s�_i����TI�X�2���z��s��|m��s&�4�46�
�%���!;�("�<)�����B	��
m����Z�t�|��&�60L{����!�����h��;�o&���Q�F�|����sV����6�sm��$Q���A8
���n$Y�+��g�h�=��4��Z�����D���4�B(!YI�����*�E-nRw�m�����Z���mt���%��L���@��	T/�(�[^�k�Y���;��\[I%�4s�
�����n>���k�C>+�������5�����,���\����!���n�ui-�qwu���ko���+E����1��rO5w��E����'��'��!�+��_�dg��[4U�E;�
��Y5��5���U�.K����ej>��m�V�6V�������dWelc!������)���K[{+t���+x��U��
�4�95�KE�n�"1�c=8��S�������\Z�(�BJ0�b��6z����5^MI��i4����Mn�#'��`~�E@RM+NMA����o��r!Q!�{��X�����H.��h$^92�� �jZ(�:]J��+t����;v�Ce�SS��e%�gn�����bR��E8��*�r�+��Zj6�m�Z�un��x�����<u��@���Z
'O��b�-�b�������8��G1D��q�<��FU�`.O������%���+_)#�4ZI��yc�n���Nz��k��O|/^���ybs�6�wv3�Oj�V@gi���;�����;�����#����qo
�Aqr�q"�P�X��A�jZ(I-�Q�,���$�4��r'����h�]�R�k��C�4���9�9��V�YSQ���8DZ����Jw�%�A��jX�������<�o��n�g���T�Qe����1�Mo�b�M�,kn�d�M�8��]I��m&��d�V����
��h�G*�_�Y��������Z��+t��`�C���,����G$��H�������}kB�,��s�i�CZ}���2��o���u�~�b����w�������s�g����� 3�D����,T�\n���������i�$i
��i*B�.p�`�����G*���:�!��#H��Vp��8�T�T��mJ�����r��wn��<��s�+B�9W`(��m����g0����[�#�q��il7�w�f�j�e�C�h��c��^��T��}���g���6y;���zc���`��d���*���1x��:lF=�����Y�e�Z��W���m%���X�xxA�Shn�|��G\T�&��}����O=��qr��������rONI�Z)(�shZKZ�j�]������M���c������s�����1.��) ��\d�j��vH
v�e����v6���s,�D���1'���QM+lEPEPEPEP�!���<��e�{�ki�j��n�y��/���k���4��R;fUi��Z"q��Rj�����<O����O�3^�5�n�Q��U�.��E�8S��f���������E�C6��~-?��v�O�gJ9��9#��<�������O�3G��/��?��i��k����gJ9��9#��<�������O�3G��/��?��i��k����gJ9��9#��<�������O�3G��/��?��i��k����gJ9��9#��^! ��]H��{O�3Q��k��G��o��5
��mh��t0w�������G<������y~"���S����f�/�?�3j������o��=(���s���#���
Q��G��.-^^]���B�\A�\��E�C6��~-?��v��������C���^�=�#����������4y~"���S����f����G�p���]�����xOP����ox�)�X<�f�X�*�%Q�j��;
���:��b��>$��g�%��Y���bK19'�z�p���8zT�gt��q_���f�����������������5��gJ?���W<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${G��/��?��i��h��E�C6��~-?��v��������G<��${UQRP�SJ��EBc�b�>(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@���G�=*�(�W�G�H���_��y#��b�P$zQ��J��1@��
endstream
endobj
59
0
obj
37423
endobj
55
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image16
58
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
60
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
61
0
R
/Resources
62
0
R
/Annots
64
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
61
0
obj
<<
/Filter
/FlateDecode
/Length
63
0
R
>>
stream
x��X�nE-o(!%;X�O���z?�*����`;�)"�V4N�Ab�?��G��+�G�[��O�����qW��:u�������+!9]�U�J������K!�J>:is����D�Kn�^������.X*�������tr�7��~�x!��o���w}~/��j������+��	X����cp�S�����OL�25����3�����y)��<�=#�I&p�E�eM6�)����f
��5������5'G��g/u^�����L_���Yv8�/�6e�l���1�y=f�[e�{��+��-��G�	j�������t/��^�������^�����Vk�P�+�b��(LoktA&����3��>	�$�H;��F.PL����/�s�=�w��B��qD�����=��
:8�zLQ��d���� tl����4�gS��c������*����p�Z/��6��Rt�N������rx���,�i�E�UdA����!��}�����}����P&�9�YAT\��v�����Y����!���s���x�O���Ep.I�(�Ec�u�&�4��:��|.~@#���7E��FGZ�����\x������!{�<�k[������|J
�7?v������zC���Z��QO!�Az_M�	v�4��TB����wM�������g���7�-0�H������(�4�$�RZ�j����2���Qh�P)����jI��K����-,%;l������T�4Te�W�UT<�*������;;kd���"
��p+�>Us������y~U���`�����L������M��2����E�a������K
Qs��,�1Af@���\�P��)��������S*��`[E�nX:��ld<�G����2|_��fn@����L��0�>�Po��c�QU%�8��Vy��m6B	{�.tP���"X�WY���Z�e_�K%dq�s���������X���
BN4Y"����`O��"�������:�������a�&��V�=�1-}�����",�l��Gl��=��*�)w������@?v��9%ap�����t��G��]��	�?`&YOp����|>��m<��}��b��l���'bYQ'����Z�i�l��A�>��?/�EX�={J*��E��\z�������	.�P�����Tv�i`P	��C��d>�k>��q����`�M�����9��4���N�La��l>[�t�%���^�H;�Y����'�VW_���9��m��)���y���s���7'_����eIiMQ�J���/|��g_t��$x�
endstream
endobj
63
0
obj
1296
endobj
64
0
obj
[
]
endobj
65
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
1000
/Height
651
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
66
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((����"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�oZ1�O"����m���S���"���Q��@��;���%��R�z(��&(�R�;R�@	E-�Q���1�A��4��Fi{RP9��:��1(��@jJ^���Q�K�E�Q@��h)i)h=iO4��� E�(?Z(��
�(����Q@%-QE%-Q@Q@QH�QLt���t���E'j`-Q@Q@~��Q@
�4�������PQ�ZZ(���-Q@Q@i)��������J@h�/��	I�q��@Q��E��.(���@	��?@�h4��������Z-&(��h
����E-7�.(�Q@jCK��s@	KEb�(��QEQE!��u%�(�D����J1KE ��1����m�F1L�EQE-%��b�Zm-�b�	�A�R���C���Pb�QEQ���`i1���w��PiE�BQ@���QKF((J1�)�������

JZ(��I�Z(�F(�����Q@��)=(h��@&ih��)(h��%-P0�IKG��P:t��%)���(��(��(��(���b�Z�@	E-&(��EQ�Q@Q@j(�(4��Q@h����c���LR�EQE%-PQKE7�����)M�R���4���)�P(�Gz^��
;��1A�����4j���\RPEPF(��
(��&�������KI@EPo�:�����--7P��E4����n("�I�h:P(4
`QFigAL�R��@%Q�`-!���P�C�R�Ep��J(���Qq�A�g�QHy4b��Z)ZS@�b����P�QGCEg��(i��(����� 
(��
(��
AKEQEQEQE%-�-Z��@��;�E���������Rc�J}h��(�a������!1A=�h����JC��A�Z:����@���I@���4��
(��
(��
(��
(�4w���(��(4Q@
4�R�
'jQK@
�R���
J_JN����)�u��F
���(h�)(��RPKHih�����%������-% �(��(��(��(��(��)J)�>��8R�b��u�Q���w��4����LR�J)NsKA��C��J(4���J(�4�Q@\(��;RGjZ1A���@AB����hi(��H(�)h��(�E�(��(��)3K@����!��?(�G�E���x��KH)MB@�R��
CJ(4�����b�RZJ,E���JS��
;P(�@��(�Bw���4g�-����zP�HzQ@H~���}?ZZ){Rq�����LPE��
LsKEQEQEQEQEQE����b��N�qKI@M�>��@(��������Pb��(���Pb�Z(�������)R~�PEPEPR�R�EPR�E�Q@EPHih��~��(���"�o�!�GjSE;����sA��EPEP0��(?�����RR�����Q@	G���?���Q@Q@�QEQE���;��).h�b�KH-7���-Q@�R��
J.x����8�����qH��SF�z�b�{R���@���@
�(��Q��}h�b�z�G�����
(���jA�-Rq�KHz��H(�hin��PEPM���E���1@��h�4���(��(��(��(��(��(��(��(��(��(��(��(QA��$�(����1I��������4��C@���h�A�����P�����@E'z(h��)������(���(����PHi���JJ1E ��@�L�(
(���j(�����(QE!=����iiZR�((����(��zPEPEPFih� ����C@�E/Z �R�(�W
(�P0�B�����(��P)h`������Z/�@�HisM"�
��`Z3E��)3@����JZ(��QI@�t���#4f��L�@E 4@@����-����i)h��(��Q@Q@Q@Q@Q@Q@Q�(��(��-Q��P@��@	�)M'Z(���	E)�I��9���J(��
ZZB8�t�i1N�=�)��Z�sE��8��R�?�%- ���(�1@IKI@jJ9���4R)@��P(��
P0=(�(��
(��
(��
(��)q�n(�-���PF=��~�1�Z\R�@�"���v��)��Pi1�;���J)q�%p��o��}ER
v(����(��@%������PR������t�Q�Q���
(�����Q��w4���P�i)
:�A��;P@�E��)�P����=(h��P�)���
);�v((P(M7���QEQEQE*(��(�KE&(>��PEPA��%��E��ih��(�	=h&����ZCGJOZ@(��Q�;��db�����o�-��JQ���Z(�H���s@	F(���zQ����Z(��
�����(��C@�Q��Hii
��GSE��(���v��(QEQGz(��&�
)N3K�@���������OJu&)^���(�����b���S�������	KIFi�(��������N�P�w�)?u�1�PE'�@?�(�����=h�KHh�'sK����KI��qE>��m&)�{~����BQJG���J���CFh4PEP��x��
�(�QE-&(�h�h��<�EQEQEQEQERs�J1@�
(�=E-�
)3K@!�R�@%-&(��Q�PEPEP���Jh��A#GZ;R�@��9z�L})E!z����{PQ�G�-1�K�RE 
1KFi������i�=)h#�C@9���O��(4QE�Ph�=h�)?:p�=9��(=h��y���Fx�@Q@Q�z�0�u����(�(���)
%�(4
:Ph��n)�QL�hIu��m��7��U�O�aC�h�Nl7�5%����O�z��N�L�m����`���b��fd`����J���3{j��P##)����o��%��L�AH���@W�QK�op�w��iy8b������pO��Z��N�_��gW������)�����q��n����^q���
�����]O������O�N@�"�V����u�tdO0���>��}LvR�IH���`�i;R�(���Z;P��t���d�ZLV����_$�k�^H�.�>Q�3�f�����PB����8M�N�����Q���9oJ*[�ymnd�����6*��A�H��'zSF)/�I�R��C��5)��1�IK��Qpu�4���%��J	E.(�%~t~tJ(���1F(��I@EPEPEPEPE�@��Pw�(��E
�EP0��(1KEQEQ������(
������P���Gzq_�������(`�E�;Rv���0�- ��4RQ@	�KFi({QA���Q���E�`-!�Q�J3E%���:R�b�i��MQE���Pz
)h(9��E(�����QK@&y�K^��������.���^9w*�H=I���U�Q���<�;y�eX��Go��1?��h���_0��[F��r��������,�+*�6�wb��Rkb[uU����������(���t��ByVV��=�ef���O�,��e��8V��q��+�/~�.���^$�e	L>`�� �C���d��s������R��uP9'��W��_*�%���i��LU����7��1�N�Rk'I����e���t#���b�FI\�m<�\C�[ ~�dd���x_A���������@�� �[������q�����^�q��U���u+���s��b�-�����~�k�� spN���Z�!@�'����J���^T����\��bV���[T���1�a1�jy�:�9��N�5�f��GJ�p\�&3��)�1��=�
�!;���\�Mm�4L����_K]i�/���Np��^u��,����-�R�����z��Qlr���R�5������~U'�]'��h��cKy�<�����c��l�Xm�/����}+d��������~�T�Z�!3�;c���rZ���w@�<r�q�w����6����z����Ogsz�v������`� �rk%W]N�Er���drA�iG�w�(�l�����k�r���~���\���\jA�����B�k�5��f
hb�}��+|����+��Js�$h��OBT�j�mm-��V��^y�F��I��+�O�N� W1-��V��A �/eN���
�o�\Ikq,��H��F�
X�u�k�M7&4�ls�\�������M]���o���
�Fw�l�d������nu���xJ����e�.]6��T���^=��N�F���
�����Hc9���_SOb�	�1Y�����m
�ha:
[&�����"���0A���l���{{�{�Z���� $��o�c��z����a�Z	�y���;A�'�uBjKC�t���}�7w�a�1���W�E�X%�K+�n��=�.���VM��b�3�����*��MR���3	+��=sX�`�Y��c���4���V�I@	����$�������OZ/�;v�-$����8�����W�����C$C*2J����~�k����u=mc�l�a��`��6��Qm��h�z~���ibs�9�L�� ~5Q>5��<���M;Y1��a�P�D�e.�����cV�V�0�O��cc���=���G���
�e�3�A"UC���
55-�*r����7�Pj�{QKJG�Jv=���
(�=h��ih���-���Q�(4v��aE�������>��>��C@
����lbb�J{R�]6�Z
�<P(4\�ih��R���BQKG�P(�2aN�M��@�IK�(c�R�������O�F9�=(O�z�w�a�SI�SL4��R�E)>�~4S�(���~T�b��Z(����q�AN�4P;����z1@�ii@�!�@����
1@)j����Z��i�3�����Nz����|Gy2����$��nI�9����j-��WW����[-���D��#���_��|[���>�����c{Kdz��N/K���j������9�x��G��;�p�8�}X�!�]g���z��]b9,������%�NFB�l�=�^���[iZ]�������'�I�k:��v4�A�W���?��^���I7���+��q���z������,V�%�(
�[,��+.�Yz�*�������b��RS���5
����%��F)"�s�b���f��0;T��^�5�����S}�UF@�v0�pq��7v�H�z������e���Y�aX����f���Z��)-�c�s���J�b�����	�-�p*E�bPybiZ�K0�H�J�1U�<g��',d�>�5H����=)�
3�����U����d
�#lt��� y�-n�+�v0����f�
t�z�*a��QM;���6�Qn������W!��Z��,��{k�x#A�`7��vKF(�)P���>�^����
�D(�h��`f��R��"2�TT��cM?�LH����S�B�bD��@�[�1����h0?:h�$ms0�G
w��!�e���34��hA'�PO�[=F�9��Kr ��N08�v�@���0e�#����.��]�qtx��#��bT0��j�B�������a���������iX�
�F�s��^�����>b��J����!����Vt��V�����x�sj�)r�w��z<RZ\[��N�6\�S���������������x�S�����~'�n�B�W��U�,|�����m
MrZf�y�J����r����������b�����%������u��ofvY��'w��/������9�����������������x*����rp{���Z��wr^��<�l�����Oc�U�>����D��:��
�t�Uh����}���.�}��Y�0S����+x�[�*�!\�L�2q���{w�4[}6����]������[RZ�����J���CH��S��W��4Ke�TYo�Hw# �{W\���#U��b����L#�X9�����%����oH��k��(�W �&>c������!�Go�1�)��^(��0��2qC�c�HV��/R$�v�=5(��e�b�������cJ�v(�-�=E-��cR;�����v�s0B�`o�E�<�_
.[P��EX�&�I<�};����Z;C$��K��	��k����U���-�����Uy#B/S�{@���.�e��+�pA��d���> �ky��i�v�1I�x�}k���+��Wg-H��?��N})��u�Y��R��I@��)q��J)qF3@R����J�N��(��K@!��4w���
%(���%)������MGjZCH��4��);�Z((�"�J=�iJZD�4�b�(���iQ�J>�b������;RR�iJLS�'jb�E�����-��'Z`�b�N(����&h�����E!��c�^�c���
u'J����u�_�[=�������P��e���Eef��!�xQ�I�������1�B�m�I����U*r#ZT����
�b�t;+$���$Q�3O�Af�}��M�$L�� 0+�����1IY�m��T��m3G�����P@-�w-�L��a�������s'���[���(�$���l��'�J�R�Ku�2�U����r���b�b���s����
��L2�g�f����*hmSvF3��a��Pk��a��EK
HU������ �G�8�I��>2�
WR[0?:����j�[ �8���nn
��������-���O�UXG��T�,�I�I�!��M��a����jP)a�]�l��F�\�Ko����=��i�j�Hd�������8�����-��)�kq��[��:V���jR�)�WagV�1NsP���8��`��qH�l7gj�,�p+A ��b���*�1����_"-��S�J�B�c��d_2B��h��eo����m��bH9���q�N�0�@���������2pMU�r0#5-��*Z�"�q���������Q��+�9�j��'�*������WhS����1i�@�kFE��#���^�h��c��������n[���Ly"�^�O����r���'�����9����q������L,,$��;2*?7lU�=8�h6�>�����1���p����'&�2����kI���w��Z�!�������8��,i[�$�Y�+I%��<�$*�O�!����#�W�����V�4gb����	��|Px?��wQ�������s_9����ays����4�F��S%���:�+�O
���m���|CM�NV�0i;����P�E-�ZJ1L�R�`%�Z))qA�@	E��0����&)���.)
%-��z(��
%S.h�����CE)�8���qI@4�h��c$��4�	
JZ(��4��H����
u���iM%@(�E�\(��Jv��)
J)?^���`)qI����1�I����)){�Q@����Z
){�����^����Hg���6�]�:�2[�2�8���p���|���^�@��h��;���%�5�����S��&!ks��-���{
���[��)
�(��THA?CX&����OvFO��D��=k6i�X�T��p�t�����&)�_�j�Q������3��4���MH:�p��@f�Y�#�fj��X�����N��+x�1�r���'lv�T����XMq&�q��HM�����T��#�UI���<f�%��H��qV{RlcPsR���J���sHdH�����:b�s�V=�1c<z��p�i���J�#<T�7w9��x�S����:u4���Ze����h,��n��mD���T-c��j�<
|�
	��p�jA/�qMnZ�\��� S�R��)����F�A�y�M��AM�|���
�(�P���W4�W	*�l���V P��8�8���zUc��q�(���AK,9�������#��k>�E
�rj���g�Pr%v<g�O���[y;���,�	����o*�(4�($��T���T���z���f47O���S������0G�H�5
�GJF9��T� >��4p�A#4L6�V�@��*+�����/������~Q���������e)�?�hGee<�Y�2m$v������.p�~t���+���~!����������v���=��s^���C��ZG��(e�5x���W�K#�#�!������rZ���g"I�4
1E�t��JPi(x���@���\��R�v���4R
x�4��.h��
S@
�9�RP}�4�x��GJ(����f���N��4R���`z�A���(�P��)i(R�@�Q��!h��3EP�(9��LsER���>��R�
`��K����qE'j:��h�b�w�������@)iO��t�@:���\PQ��;U�>��P�[{D/#{��8>��
4�o��^\A������=*$�U��y���?:������p�X<o��J��;�MsW\���J��f��L{�I9j��qQZa�zU�s�V���U��#k#Q���`G�*.3�S���)�G�c#MXE%��j�Xb�F	�<}(B�b��)]�c�:YHb�
��
K;�
U��P��&�.$G������<�X�A�T���h��6u�W����rr��UWb�EZ%�b.�PI����s�b.���'j�AV�<��4[Q�x�=)�x��2X�5:��l�������9FH�����@���^
5)��@L�MB�'8��W�g^�8����;�*	���q��g�4�o�i��684��c��.N)���)Q�P�a�f�Y��������v�,��"�yrrM@�s�)m���L�|������y�W��#8�E���RW
j�!=)6�B�H"�4PnPz���^)8�sI��������$P_?��d�t��85jg�Nr�pj�����MZ�^z`_�N6F����1�r��9�V6�6#��MPS'�i��
03�����ej2�B;��z�@�y��I ��c�8�Y�<��&S���2n�N>����?�����\Z1�
�3�`����������<���
B8���Gj���SM0��h4v��KI��ii�
)��P)i�(���
\��A��Z
&ii3@I�_�H>����(
!����;R
���(�+
)i!�hM%-!�0���Q@�H(&���IJ(4�\�f��JH��QL�=ii*@;Pi(������0i{RPO�Pi)�M!��P�;QI�;��P9���AE��})��j��#<l�}���� J����_^x�}�����rz�Z>%�D����P����#C������{���[i�Cgn����Ts���R���g��1wr:u�=���w�:�[������ ����,�A&6�k`�+����?��3n�R��BTXs�=�O��^�m���V��S������%�������T�]�jV���>����������:y���E���aoj��(�.I�j������*�6(���J���p�;�����`�o����~N��E�Q��
��4H��"��~�)�y�XN)I�T�������1 �?
��������8�j�0��]M�:�36��r3Y77##���'[��H5�~��;���FYm�I�i���N*@�ni�N�%��M������FR��c�$��Y<Rs��@�Z��t���u�C~)MZG9�TS�jh�MKC4�����5�d��J���,�^iry���J��-��5n!�����pK�^�d�J����LS�a������g���o�sS,�/Z�������	���H�m1��
�z��d��1@�S��l� d�i&����(����x���ry�	}��|u5^G�5��U�^hrz�H��u��j`ZYFMN�����A��;}$���nFES�2z������U}�����Z�%�OZa�4�r��J%�@H@�N����z}j3���f�(�9�Q0^�T0�Q@�4c���/'���Ri��Q���sc�@�$f��\(/Z�y��j���
�n�%�$��W�.�����{1�##��Y��k'Z�$�����~�O���"K<;�2�y�\�<N���)�x�X'��zO��=6{91te�T;c_�v��^j=��lv<��=��)i������a�d� =3L�3�%i������2�C�5���j7-omeC6(�Y�(�������%���9�{�5��yl��-'�OwB]���cF(����1h�"��;�.�[u�B0HQ�z.5����}wB�K�a`�z���s��Z���Zm/��?JQE�b�(
��@h���){Rw�0^�����
h�(��A�h�AA��IL(��,2S������GJ=h(��1HGj(i
&i{�(4�Rw���Ev���P1q�������P�(��J)ZP	l(�4	�k�~C�Z���U0��	��T���<A�Ito��
�
}�Ez��|1k��)-m�iO�,������j��Ef��F���C~0�zT����*8�a����Eq��X��*�� FsL�}*��1H	"��F*r�t�08�Sc"�+����1W���MW+�9�^��c��rh���@�=M-��9����j�6>�
�2.!}���4��N(�|�m���o$�����*fl��j��^��hLc��R�?���V6��\�[~c��&]�4�K`TK������y��j���V=�!}qUp1$c������5���sT��cG4\V��*�D��qHf�M��W��������e���=Z����2�R���GT����8�d�R:�<�TM����`�c�n���Vl�|��5zm�u�9#�|�Ea��In��sY�<�y�885��
��qH&c��v�^cH�d��FL����+�).z�y�t���.?�t�f-�E�������c�
��Kd����)��.[��������	pOZ]��
�	:���*�n�E���a4��/�������i��\z�?��:q@����&��;UIg�c1S�����������Ur�����E���!?J�q��K��0�n�A4����LT�<���[��`0qPx��'�.Q����q���mYBP��*�����$S����r[K�����b�#�����{y9�e��/z�7�����eS#�����{xo|M#e�cP�c���]jg��s�����$�q�i(P�����Jo�w���N6�;zV��l��* �2��c�W_g�`�c:�����<�����D��Fx�p=��]N��].���{UI���V��R�rx��1P����EV��(a�+3]��Q���`c���H5 �0�II��}�G�e[d[`�2�VM�}�y���s���:�-������,G�x���hmn�O@�N����Q�fr����G�M��NW�o�zi-����nq����[����}*�wDn8a�[���mk:�^wFQ�!~l����U�������L�����;��
^��Q@
)M%'jQKEf�C@�@x��%(�F)3�Z_J@%Q��0�Pi�����EEu�E�c%������E))i)�RQ@y��J)������;���h4w4w�1
-���@��Q�C������������
Z"�Z���M��������GL�3Y���k�������H�@-�����U��gc������[���mA��d��[��j�������-]�F:+���Hx�hp	4���p*J4��sV��Q�R�a��SdRT8�N���2�
�F;�qU�p�Y�u5�vyPbF'��Of�=��4H�.(���i���?J�;`u��A�Q���J�$�jEs�4�V����*��NM^��d�O$���	�K��b�����5��{Ur��~	���nK���t5��m�y��zQ`���A��Z�1��������TsH���.�T[�&���H=���b���+:3��YF����$w���~�
�S���,� �t��^85��`�|rs�!���^�Nc��Oi�&n���V���9���u����Ir��qM2dt��W����(4�X�R�����)�W&��Jx����w�R���C$4�u��i�H�P��)�@d$���-!f��rS�qO��)�u��K�qMR���<R��0�B�L����P+z���`&��=*��9�q@�A��n�u�W�=F��T�Z1W��p�z��@�,@���T�&\pqF�`B���b5@"�n0{})FsH�3���g'��I�`J�[A�Z��4_����<y�����Y�n��#3��
�|�{:y�Gva���kE"u�^��P0���y���P�^�Q"���F
N�E��o������� ��8��G�l��z��-�~fy��@��3VK�x��j����D_;���3��]�8�-C]����k
�J7%������X����5�?��SV�Gp#E��d��w��>K�xd'�lVF��]\&\.�����)����*�+Z��e)o��	�OsL�aLePx����K��&�Y(�`>��9���-��=�$����r�m.K	�T"�>���Y���S��;QA�N�%-���Q��ii3@��z���v���E�;�h�h4���4\�R���
O�'4�����jp���J(�X��(�AE)��H������&zQ�A�����K�1� �4�P����E
(PP)i(i:R�(����M=+���\5��b��c�O_��z��dY'�$���v:���H���a�H�%;9j�oK�N�=q�8�Z�a\����S�K������pk���3`|���"�5^��Fj�05��,[���-�+&&�U�w�z�H
#��u�P�ri�(�&I8���55��C�g�������dg���Zv�8���������k:���J`B[���v�L���w
��sP+����_z�w����d;d����=��B�5H�A�zA��*����S0��Z`F	v����U��g�T��h��I4���,�Fs���E�=*Ej��S��EH���VU��Y�����q6W�&�rN	�h.���3�8�@����.���r��^j�6;�k9#�E�$s�Z�q=M!�L�1�r(��j,�J(I�<�N'�zc�]��:��������!<f���3K���9��z��8>����hU�R��b�(�������������M&�v=��y4������9�B��P����In��X���>�p�G��+��hS�jh���o���KjC�2��U�{R[�W��PX��9#��>�����X@��$�R��3�������h�Ei�{O(e��?�VQ@�������"��Y����8�D�gc�E#�S%zV����IA�Zw�q���j����/&�$�q�Q�UY���*0ERhV($�E�������[��\��9��S�z�D��[0`o�p��$��D�������n&w�2�g���i_l��9C�w���1����E�(����wc�c\u�`�I_L����n�d,�OSY+��kt�I;��:��Q��y��9�'�i����9n������b������4QJW��I���������(=�4��u!����KAc�������������EP�)
J��IEIE.);R��(�%QE��)(Pi;�0��A�P)i
-!�KE!8��-%-w��iE�E@����]��K���������R�GC�Qm�=I�'��3��6�W��}���3>�>��������$7k�<;j��H$��k����E��6!]����*�f�F������Y���j�S�m�3A$���I&{��'��M{�O4��9�U�{�R����ZOz�$�y4�Q�U1%)�v��O�rk:S��j�N=�����&.j~M�z��D��=�m�Um���n��	' �H�$Sw����@���R,wv�Y���H�j`5�8�Di[�a#�J,��X��O�����4�� ���R����
�1�2���&�
@[�Q `G)�9$�5���w�@����4���c�@pi�L�� �A���n���Ja��X��/��'�r��sH	@����CMSN-���"�QF�k�i��XF�L�� ���up{�He�nL���q�N��94Xk���b�Jx����I������f���v���3PC&�����I��Mj�A������|q��E�*n2�,E^�:
r&p*e�����XE�����J.�����O���Vv�����j)�O0
l�m>���$k��3U�1��6��I�Q������
#����b�������d�Wh�s���4���PP�g��E)%�g�[���F1�i����������+�������%�|�����<V^���s%�;���efg8�X�k8���,�2(89�mu�w��t���H���r2O�*��|:��%���"�n1�����H��w����tq;���_X� ���\&��	�����(P>�����8I�Vf �R3@��������Fi)i���x�i���A�4�RR�������I@)){�L�A�@�E-&)�qIK�C����(���
JB��)M%����QG�}(���(�f�G�@F(��
1IK��

������/>�!��(��R��:S���dS��x��x���4�2�X^H������v4�H����9e�z��5����S�c�����lv�WO��y
Tu'5�=N�z��*�?J�����}kF&�f���$l���`��r=j�?�ICZ&bq�A24`������@FMfq��X�5q�}B��O�V,E�8������F;}���MXc��P�Wb�	=j6jVlw��f��v&��Rr�����N���8���ZU���%U��R���
�z�*��V2������Q���� 1��TL�w�I�������&8v���D�w�rM���c��3�ih��5.3P��J���.�R8����)^)��A���h�10�jJ����DW�� ��I@�y�a�7Rw���!4�<��L9�0x~z���4���Q���OT�J��R���N�k>7�q�E!�S�J�������TT�� � q�hB��j�8�N)
������Fp*Tq�zC�d
P��G�A��@\���S,�T��f=�A�Z�K�a��P�����5�|(��3�1N�:�l:�9�'�v@�T���c�!����Fl=j&<{���s������\S��3w��H�R��5�P�s�T��p5,�`*��&�"1���\�*OZ�x�.��Z%�{�	'��(��������`U�n�^���A�&����8��"��_T������)�qU��(�=�B��bihd����C@IEf�
�J)�
r�����)���@- �HiE.h&�{����R
�����){Q��@	E)���Hi(��!Gj(��;�J))\��E��u�����):���(��(�Hz��4��Z1G�1.)(�
���J��1q5�]����p��w��ml�-�~r1����*����ga[��+KH"W�{V���N����O�s�]f��,g�������t6$,j8�H��Y����1������Z��"�r/�52J	�s���5,$����Zf����l�dj��������JzUv�oZO7#��B���Up��R�
�gX��@� �8�Tg��&��X.1���e��T�7#���i|����U�H	������3N
�4��������7zF��K#`������-���fy�N�Z�������=������XB9����:�ZLS���g=)�i�s@
P{U�!�=)��	�Tq������6�>��������JIp��)�{�;��Ks���Q6�����*4Dv��j��s@��L2{~U3�F���L�EHi��J,h#4�=�������6�U;/�7���SH��HE4��)��X�)�1��V��������\��N*�r?�dA ��H0:T�R5ROz���+5$��L%�T�sMf���p�>��&�����y��N��S�5K��=$�Z/�����?"���(��"�-�)D�c��>c�)<��e������@��TL����_#�?:��@i��������z�"b�b�~QQ�;���+�qQ8��d����B����ek3��ny��h���<�V�Y�+��S��$��5�+��;�,�{�q�bV����:��r�$so(I9��X���FM�F�	l�:�d�X���H ���jI~^3Q�� ����P1�M�w��9���w�����z�KM��h~tf�zZJQH�K�1K@	E!�z��(�������
&h��RQ@��1LAGj)i������E�b����(��.h�P(������+J��63�2�F������T�ft!��hN�zR��Vl���m�&�@���Z����2�)�#�V��g�($V%�FS���l�������z`�!1�>)^'��A��?Zu����h�YX�����i��71��4O�Af�f�_!w�_3����xn�W�!���g8�ZSw���w�+.��'����7c9��3L�����q�t���r�1\�Gbf�8e�g���(.j'��X���� �W��{u�s6�T���!�8��.t�&:�cv���{\+&sU�P��|�����$��qw����e�~�O�h��L����i�&s�5D���
rI���o���q�����H�:�����rx���M�����
����)ji�L�����������L��8iq��4����y��D�b�qV����D��V�_�r*����_��R1���Rf�hI�'�ZB�R����=�'"�
����J������1��R�m}��}��z�N����\�HqMe8�!=i
q@���������H�D{��HG�%S�~t�U����j�rt��������sV9���wNk-��Y=jl3Ue����� �\�j���R���ZV��N{����T�je��������N��BJU����/	}�2{�=���`�w-	:�A���d��� �>g��MV(�@�0�g=�F[=i�&�Y�=:asM&�c�N�%-�F��M/�PI ��SHB��8=j���Eo�s�X~%��B1R���W7/�����H��c���������c����\v�&�R[�=*�����H��5����\�c����lsT�(\���1�V �;������$g�,���1C)��G�'~���jC4E$@$�	���t���2qLc�(V��i��P1������PhS@����AKM�P1K�(1A�KE Z()3N�PQN��-b������9���(`QE 
;�G�0����Q@	�*�����r�<T	��<8�oQ"q������m���V�#U ]��j���4����EL}�G�+g�z\��FE���5��mL3��iM�v��kS���y������c���O
Kib�W.����Q�����u�W����V�4<�:�e�����I�Uv]K��1��8�Kkt��N�.W��e{4���9i�,�w'���ezA\&���#�J�����_���2����^s��um�P����G���s��;l�,t�=kJ]�rL��*�����<�*;U�����Y�8�V��1���2���$Xv��Sm-#�m
��T��Z�N�Oc6�U�l������
��k�����������X�s�,���L|P������?�q�j_;���/��{�y��M��qY�p��
��wg$
,.5�L�����Q8��������z�W��;
���n���z�f�3��?0��4#|���\��q��"��3�j����ZP�#��,4��$�[��sY��*q���&�����<���V�I�iU��@�$��40�;���HJO�0�=�0���M����
)������;s@�c��V�*�<����3�O�j�isH{�.�j���=Z���@o��SJZ,Ni����K�4�!{Rb����@b�o�Z�F=M9c�
�
8����iv��+���53-FW��# zT2F	��Ye����^��Ue9����^}�&^��@w�S��0���4���x�9����S�����	�Z�z	�TI��x�J��j-�(���&�iwZ��=E����z����U�w�-�h�\�d�w5X5<1��,,��.����8��`$'�L�i1Hi��Tni3�SZ��
dk>z�L�J��Pz�T����������q����-f6�^��%�R�d�n~�J��G��R���s��a4��V
;�S]�"���U|���^�c���ic�L=kV����f�����q�=�i���g��1�QV%���"���\�MF���@��C@\������w���aJ:R����1�.�6���u�KH��Pi��(��(�%.(��(���E�;Q@��R�!���h=E�JJu%'��E(����qI@(��@�� ����Xu�r��-���D$�W�xr2���f��sR�Hp�r���
�Esh�0:��RH�O�����R�{{�an��J������P�5#c4c���PX��*��"�s�Z�+m���
<V=�\$@�V���9���E��C{������B���W?,H3���H��$���kq��j�dR�?�� U�
yap(�7`
n����J,E����W��h��^�v4���s�E&_��z�� ��PGoZy�z���Hd9��FX��i�Ji"�)����6��c�~RE���@c��4�b�7��X�Da��U����c������)cbV������
��I���c���Fr'5M
�����8�2�j����3Sn��Hcen�sO',E}(
p��pz�2�=������o�F�vi���G4��c��>���8������c���Q�����4�}�0i����7�M=hzs@��9����Zx�haR��EL��<.OJ
{sRF�t�<���X�W�Ld�e9��������3H���a1�)'PW�4\,e:�Q:f��|�����(��Q����D8�Pm���	���)q�M4�Ppz��S����L	�j�$,O5UMK�ZV������A����:b��n�<��c�P+�id�`'-F�}������z��M=Z�'�Jz�Pi�}�|�`n(
�(O�F����N_��!�SD���.E+�Mc2d��[�s!��n�&YX�+�=G���$�5�qj��z�V���������I���?�p7v��]K��:1R��V���~\�������;�RB�9����G}L'E5���F�5��"S����w[;8�A��9l��t�&��A�=r=�Z����D���I-N.�D�f\F%��Vm�������t����(����g���kW� 	 �8���7fs�G+qG!W����[�V��F���g���Z�������3�
ZN�~R�E���Py4R��	�)h���^����(#������)@��!�(�4P+�b�)��S�C�q�
&(}):�q'>��4R�z��4v�K��t��@	E��/��M�#��z������9��^9fv��z
�
^GU�����WF���=�uf
�
�����y�Wi}	�Xkr��(6�������R\������kyEA'4��FO�Fj9K�F��:q��+�/&�i$��#5J����J���1#��/��q��y������(pyI��t����g�����np&������C(�9��R;��t��)�B���e�aN�<���6��R��a+�k.x�=Ty��H���O��5��`7
 *����B9lpqO�dqM}i���)������)�
&:�@+�pA�����s�����#�T��^����)�����hy0:�P��8�z�r��o��il�q�k*	D`�V��s����-���i�p{f�>����_ns@��@)����[��P:i�e�z�@�4�rG4�hAJ>���
v)E �h����?Jg�@j,���<b���S/N��������zb�H����=W�����C\��E�R"���=4$k��6�1N�N9eT���X�����"��l�H����#� (2�)Y��h�Z�p0�N�fN
��ufPX���0���m��d���\���L�:P"��1��*��t�5��T"0y��r��j6�7�4X	9���C��&��Q`%�����y�D[�\���?w=x����(j�R�����>�'���y��*z�R��4��7O��g�����E�J�����Ti�����1��"����
'i�1��R�#��F*m�d�S��JF����y��Z��*�������b����$����2�<�,Gz��1#H��%�h���kDE��"4�����[s��`��J�0I�mq��oP�E"y�!�Z���I�����K��:�!i���t��w~e�RiY�23��i����8��z��s�L*B�
�3��zB
)��~��(QE
JQ����Ju'zZ������QEp��(�4Q@�b���(�HE�����N*b�FhA�E+���Ev�����R7^3�����q����q��!�(&����_��{Q��?�T���F��)��>e��d�8&�km�x��q^�HY��A�+��es�X�������I!��v[���p���]s��k0�����5)��&�3�����9�V������4�#Xa�G�d��5�����r\�������\��S�940���zUY}h��:�sT�3g�160'�����"�� �9���O��S��B�I��Q���c�,F��&�=*���I��H.Z�q����������j@���`�l��a�zR����^f����
=c;psS"����O�C��R�K`���h8�4�oq@����GC���4�3�3vZ��Cv��8��`S������k7����4���������O�	�5��g��	9�4�;���y��6�G�Q�c5,M�_j��lzz=��o��H�N_R0��i�}�B��{���
C%�;�0�h��;Q��L"����N�W���Z����U�������=*@r=��y���9�He��������Oz����cD�0*d�Q)���C%��V�E�dR
�:o^*����2
 2�C1�������2���I-��14SU&��%zU��4�L/zw�{��x�RqZw|dsY������Q����q�5qLLU��)��P���@�	wq�S����)��	��Z2x4�\�@�G��SP�z����������X&�Z���R��Re��V�� �U4�W�v����l�qI,
ri-�h�*Y��e)T�>��r;U��50����Q?�*M��E �<P;�+�� ��������pMvWjYp������xUS����^�4`j�H�a��~5����fm���~��W�~�1:�V9W�4��+��F�qZ�f`�s�*H �T���j`����p}*�A[�?JozS�4����4�H`:��~u��������Q�������`QE
(��
;R���
(�zQE%QH��
P(hO�E6C���3���� �Cr)�{R61�)�)qF(���5j�%��e8��,�\4�@�Rj����0���T�	{��7j���G@KS��"�O�[Hj��%Q�[��k	�f�n;S$�b$
�'���]�Y�5-���A��5\:���F@�M#�x���h����3U�.�\V|��qNDg�Qa\z1r}*S�^)c�����#s�^i8�sPK&[��0����\�C���G<�Qn;������h�j�1��y4&Q��*h��}*x� ��L�J��S���ic\����Un�����A��jj�]�8>���\c���#4.z��!o��� 
$���(��Oj���zt�F�<s@�bE!'������y?�;�=hR3������7}h�����V*j�4�o���C.��l�����z{UTp8��<��Le���f������1����rd�&4\U�*U�AQ�v4��4�8��Tg�x�������@��NJ��>��s�h<�������rj��MI���\�{S#L��U��R��@��@��z�0:��jFMpy�������pi�)�x��������T{����zf�O4����C�g4����M ���%���������s�qY2���]���#��{�?�EZ!��&�"pq�����M�v��E�� bD�:�f3�jF��3�9��U��(PS�GJ7
v�Nt����!�{���O^�]_<�S+d��d�S'A�U���<P2H���U8�H��~4��8=��>jy�&��x54��@\��N)�^y�F�3N�q�.G=(�.o?J7����3��L	d�$@
��M��,n���>��NH��_�>\#�8����x��,
����s�a�k�w3]\������d0��y���e'zq�i1L�����X.%b�}i(����
1GqK��p(�QLAEPEPEPEPEP�����H����(U�9W���b�������zq�%8�M#��
=){Ph)G�G�K@<2e#5_��)�Ha�h���?v��a����i����F}�N���x����:5����J'��B�m�����5���U�5+\�c��d���O��;���M#g�V��V��6��c��O�1��f��p�sTnX��U������*��g�6gH�����Fi�9�M&��\�d�4g8H7=j����4N�X@����Vv('�4�Nq�IC��5(~0:��`U�$b�����FzS"M���Q�)wN3Q�n�RI����g#�c���e@�@��N�q�����R>Y��������S�H�:��Z�i�{f�������HW'4*��h2�
5�����#�Ga@x�����J[�Ml@Vl����FO5��M}sH5��Z���#�g��wS��Q?���E��?�Y���
S������s�R2�`i��)�������@���b� U� �f��A��H,$c�Va�q�������������Nz�T|��OI�QR3D0��~�*�lu��(�a�Q��S�q�f�����g���E���Zc��Z�&�4z���X.}i��<������,+�K�Y��Q4���2d�`�`I��Se~* �'��z�N�2b�R���;Vm��c�I����z��w������Z���Be��L$Uc&:��������"���8����T���Li	�"��fr
7��#5KQ�����@\����:SRRj�NA4)��+�c�g�*�o�k1}�V���4�4ni:Vt
��n7�Qz.�n3��Q���F�P2��)MD���?4�Brj6bI�M5�RYH��z#�9�U�Ur��o]�X��c�RWv5P�yA�5k��o��>{���S�GZ���i/2A���W!
gR�AP�����K�K���A���o]��1�B�3���U�Yj�q1K�c��\`�&U�w�td�&X����������3�������+�z�.�0�����o�Z�����������$Z1�q@�ih1�qIN����
C��b��zR�1�-��Gj(QK�J(��
(���(��b�����J)(4�<S)���:Td��:QE&(�=)&�R�J
/jr��`���Xp99�0]2���iC��h���<���I���>�n	��iX�7����sZ:u��U�}k�`J�#�_j�mo"X����K��f�!Bm�)�B�+6;����������=k6��'w�����=�L����Ve������B����b��G�W��3U�;���b,$���W�]��je\1�V��3�G�&4ZD,�1�l%������N)����R,E����H���;nR�Q!�d��J@�����'��`�k%t�x����7�E���[
2*3"�����9�Q�9�H��"9�\�������LT���x�)�v�by�5���%�J�U����,���
.9<��q��f�����7���X��9�!���i�2E:N�f���P�94�x0�5h!�N��t���i��^h�r��Nj�M�#<�%�q���`����h�q�pjt�<������R9&�����n�j�]��\��M]�bq�~tXw7���G�Li�=�$O���?� �R�1)�o��Y��!f�uJ&�9�+�d���]��8�c8�
A8�������GSM�I�8��p3�w�����e������g��Yx���	�X.o%�{���z��[�:��p}h��n,���QX���t������`����|�������k�(�\�7=��z�;\�~�BoMU�sb[�*�������<��U���D�hMq��HZi�@MU2��2|�5U�l�d���kJ1���4�LT{�rH�;
��3������`#�B6	����l0�Oz7s����'��J��h�T�)�pj�<���w=h�\���j?��G�V#'g�������J������W ���%��CZ�8����s���I�x��H�c���0@y�d�@���������/�*K}��:�����=Fj�nK�G]s0e��oZQ.Kq�5u�����U�k�h.2j�l�rG)�K����`p��\��$7q���+���K��Ynrx��W?#e�z����S�Sm�_����S$���%������=�h���b��	0���wp&��"y���x�5!��f��Q�����%�QERZ\u����A����b��4����������PEPEP����R$QJ���Z}&9��&(x��������JFQ@����z�R����@��<g��l�����J�'p���E.sX��9�Q�����	�����;��SGtv��T�&�����M��?����J&�#���`K�ZV)H�Y98����5���9f���4�>cH��H�m�8������9c��>cEg���2�q�k<I�C�S!�+���Fq�S��`g��88��z,/��*��j��d��m����E��y�OC�P	A��+��niD��L����t�����'�Py��SF��hE|��d�N)�����'��/'������G���'�{�G�@��H\s�Q���&�0pi�f%�.~S�@	���g���M�g&��z����W,I4=(Q!=i�!p�z����P+��t-����C���!���R#z_��K�9��vv�=EJ�CJ��d������I�C ���'�~q��H��������
���n
8N@#'5@�A<q�
�}h�\�
��N� ��rk.6��I��L�v�a����je�
	95��t���/�����s_��4�����`cLV��V��rj��nbrj����sQ4����-9'����jpp3�W�N�V&��rN3�
6;��%~��A���r����#���j�*1���`�ed9#=)��q��)���X.M��I�b��&������(��MH�wb��rjEnNy�.Y$�T��<���8���
,2�I����c��g�g�Ip	�J�sn�j�R���P�k(�jZ)3Y%��f������nZa��;�Xw5���9�.��m5��k1���`/��NO'!X�'�j���9TH�5K���H��k!�`�3dr8����uF�h�Ur�NsP]j����~�<c��PfN�'����6_=�I��E+#��K�����*$�I$�Zr�.vY�'�Y��[a<f��=9��!o���uN2EC#g��\����`�f���Q�@����H~��w�m--���J;�i)V�}h���>�~�\��S���h��LQp���8��:��7��B((��Z;�EP���F)i'zP���N(JZ(���������f��-%������E��RQ@�pj�t�P��������Nz�R)�(���z��OZ��52I�J2�O��)�&q�H$'56*�����:�UX�
Oz�6����L��hs������^�RU�g�5,X&�o�R���Hi�0�U���Q���������J&��b��2���d ���jp������p��s�R1�T�����������Q1��R�p0
H$����_8���c���0��8��Hw.4���3�EV/�@bEZ��8��`��3�+��q�I�EW���Ac��X.N�����$��j�q���Q`�'B����sQ��FqN���Z,�����FO#��#=y��C��I�M4��:R�����pi�cSX�9��9�7pWG��)���O4>s��TL�8�z$�{�&V��2L^�?�N����,�8959����E�����CK���;��[sL.M��1�$���d`S���a7c�4����ga��'Q�N�q����j68��Gj�b��@LE})1��d�ddUs�Nh�)��,E��T��\ca�b|���a�&�N8�6B<�h��s���8������%�����@���E�h-<���*������+���a�OZrK�������&A��+���N�S��\g��T���'��^��9�`�7a�����������eOJ�
�����z,R���a2sT.���p}*��{���\���F;��l�Q&S�� ���U��\�=j�������j�6
l��f�w�����<����B['��I'��zOJ)^����h=))�QEv����A�A����Pw�A�S�@	E�)W�H:��b
(��
���
(��Q@	���R��I��1����I@����5(�#��v�H��(�R�*��-P��/jN�����/jC@	�
%�Ph�4R���Hz�w�Q@'jZ(Gzxj�is@����������U��&�VV��w4���U4s��J���[��4�l�o��S���B;��.:�h�#T������*��d�S���FjZ)H�����7=�C�O�;����	R�Q�"���������h������f�9'���LK�n�r�9��q������=d�b9>Q���Ze�n��zUu��<b��\�_����A�zZV�7}�Kd�z�7������2p�P_���1qAn4�K����5#�R�zR��>��w����[�3s@\{7 
z7�\g"���@��sN����!�&��R��8�����iT��:��q�j�jp�w8����?��t�H(��CO�4g5!��h'Lv�g�)q�h^���s��-�������A� �b*A�7{���'��r9�����{S��(���� �f���S��C'8`*�_�H�\R�r�JC+�����lE��jf��J�85H�g\^y8K52�
���}]����*�C,s��KC+1���]�\*��%�X��'�Nj��<������$J#�T��z�����$��n
UUHs��-�<�R��@���%����4�+/~+����(zS����sK��s�3�5�3.21X�s �?����;z9E�j-�S���-tZ?��\��g��OY�]O��>Qs3Z[��	�l�$�]�7Z�,��`�_�Fi�M�c6A����'��@Rf��>���<�M0�i��RP0�EzP��JCKIJ)�.MPE@�N����QE
(��
){Rb�
(�b��)h��K���c����MF(ii�(P:P}�)�P(���v4�E���3@	Hx�4��QA�E�N�����(��(�����x��?�T����^�f��vM=[��iG_j�^��c����v��Hy95 ��89���i�M�����Kg�#u��~s��x<`���$*�<R7Z�s�5j1���E&\N��GU��rju8���&^����b�U��)H��q8����)�����4�|���c��>�(#8��;OZ@?����{��zE�@\xa�\�����i�l�wz�X��<0=��h��I$���u�R��P1�f�z���c�������9��
&x��S���i���;�1��c����Lg����#�����A#��,G��R�H����N��H�0��nq�*`���T
�x4��hF`T�U�)��@��0o��ol�qR('4���	��V��a���a���q������=������Z������g$l�zz�m�!Q��������R7t�jF,������4��LqGJ��!rh������c�4u4��8P��4���(�n;�ZB�)Za�@	�h��@�M�A�M��)1KE���G�E 
(���4QE����
(���zR��@��($(���J)qF(
(��(���(��
(��
(���P)h�BR����E������u�PA��JLR�h1M?JSJG�4s��?K��
LR���Z4���N��@	���KG�@)h����(���
��Q���I@"�l���(CK�Q��8<(-�(��MA��f'��b�'8�UOZ�n�4��4���U���������"PhsM^*L��)y��'�����0�b���h����@���-8c'���GJ\q����@3=i�@��Q��0B���Rg��N�!��\�1���H�t�v�G�J��+��R!��2N�P9�M-�N)��$�����q��Q@�A��J��5>��b�9>����
_���^��g"�O�+(����ss�4}�b
��J����94(<sR+8�W-�(�P/*�^�u5Fx�X9�sR�����#���J�>
�S4��V������o[Q�����o�3]v�����rG�5�����?C����$�4PMg���g���h��4z;PPh��b��);��b(�4�)�on��{��HEK�\q���C�����(�KN���\{��H�(�AEPN��PE.(���P�P)h�4��(�
u�E���E�
)S�(�hh4����\{R�P
(��
LR�@!��b�PZ1@c�����)���h�5 ���QK���<P���u��@
��GPE!��{Q����(*z�P�4�s���q�M����vx�A�x�Bg=�s�)��sN�&��^��\�f����qC@��E�E�5"�)<0�P����9iX|���@��NH��K�y�Z>pMCF�W'����
"���]�
��9�R(� �z~T����0�M�A��1?�<~Tg�JU��������Rc��N�(UEI�@����4*/^z���:Tc=3O�9����R��4/Zq��@�4�������P1��J���}���'S��0z���<��u��N�4������C�SA�S�zo~)�p����`�JS�Z�N�9�M�����"�a�11��@�<G��&w�S�c�4�w����2i��b���L-jfh��������($}+��v-������l�����[������]������p�	0���
;�Z(Z1@��h��������);R�v��4�������\Q�P1(��%
1E�Q��@Q@(qI��E&(���I�R��Z3ERZ
%���@Q@!���t
(P��4�)01@\-�'zZ;��(�v���
(��QA���@
��)����}h�Tc�J(�h�������R��LP�v��Jm)�R���P9�� �K���@��������P���pi���@��Z��4����s���(�i(sN'�gjPq@�U��J4(r��Z��*��T�h�t]1<gZ��p����c�^���O����e�K���g��?� ����M��5C`�JQT����&��{����=�P�#���`�I�H��_�N��^�i3��w9�N�I��=i�8��4&)@��ZAE�.pE81��N^i"�������f��4��<���P����?w���E>���{������Z�=�@�8#4�z����/N���1@7b�wzkR�@��9�)wd��p����ve��o=jl�Q������.D�����1�U������R�c�d��I�jm����9�5V6��R��s@�f��T�k.���
���a�V�C1 �V����bF)���2G�1����j�J
 ��
���\Q�mS�F(�R��t4PEPE(���R��=�E�R��J\Q�Z(����J(h��PJ9�=�Gj1@��@IK�JZCE�1F)}(�@	E�w��(�	��� � ��h�%/j��iqGzZLQKHh1EPEPA�t��74��=h�@4��R�'4f�\f�h?�P{P))h�(���.(E%:�@y����PK��sHE��������������Gz;P��i��u��OV���.x�	C�x���U�1J�r0sR��=�;4o<�E��5��28��7v�ky����`��V37c�0��Y	�`��1�5j�5'���+'����������=j4L��x�sQ##���;sH���}�9�i�9�����
���'�oLi���4�;8����E*�*��F;MB��4���w$~x�Ta�\�N4�x���I��2��ph����L�a��.�3Ub.M�S$`��h�N�q��4��=��T����e���
��c�q���UWOj�z�K����KC�MO����<��P}Jw+�����	��vB�l�����#EA4�����U�������g,��JvAR*:Z��P(�q@	J)1NJQI��9�#��
�iq�P(��(����LR���������"�
)9���@Q�f���J8��Q@��@j�QGz(��/JJ(������Z)��R�)��E���zQ����W�zu%))O4�������QF)���P((���KHh�!��-!�������w�ZP(�������JGJ1@\AK�z�z�@:R�E��1F1@������R�h
��By������h
�Jh�@	GjZN���������������@��nyi�s�I��J;�h���PM8i��G���[�b�U�%��Y
zT��pE&�6���T���z����5~�' �4l�]�y���c"�G�h��oN��9���>�Z����(n}���y�W���\�w���?*�Ij����r.y�S�n}k6[��1��o�$n"�(���$��/9��*��eq�O�NYs�����l6A�_� 85�zM�P'�Ll�1�~�F[�������y�	����-O6���|�<V4��$�D�
����4.d��Vt�2v�c18��t��:�$Kw�����������S�SH�@'�J(��@�.>������R���w�K@�b�E/�� �)i3@Q�S@zJ^�b��PGJZ=(
%-&(�b�N�b���R�
q@	�^1EQ���qK�E��Q�Z)
-�'z(��0E�Z(��@X��L{�$J;R�I@���0}h�KI�%)�`R�(��@QEX�R�(�!���
�������Rb�qE�t��#�\s�Jh������(n��QEP:��(!����-7L��� �GzQE�Z(�{�iE�q�v����v����@
�N���3�;������9��(�@(���j`�
�}jUnd��z��q��U��@�k{R)X��M�u��}�Y�9����39�#�\�s���O�O��V�
|s�#��9D���.GQ@�&�!��4�\e~^E.R���M�j��q��U���Q3���j$��%�fa��&�X��(� \���v�6@'����:U� (+C,3&�i������UM�?�W�b�OjV0�$%�P��4g?ZJd�^��������b������s�PZQHz��
4�SF(�����}�{PG�GN����QN���8��R�(�Ji=)h�E/z(1IN�SO^��(����(1KE���I@	F)qF((���
Z((�������-!�@.)h��!���h�I������1IJi1L�S����?
_���2D���C��)��S�)�)�;�|�@
�T���N�g�U�������K��G�����R�=�3N���3KA4R���4QI���E����Z(
�����JJ)ih(���c�LR��qI�N��A����Q@��1�LS�(�!���Hh;��;���,�EPQE���O�ES�p)�����z��i���hs�L�Q�?_JJ(���5h���-L4f��JZi�J�N���Bis�$f���.i;�4����f��:
=(�(��E R�(���ZAN�4��Q@.8�
^����J{R��L����h�4>��Pf���E4s�K�R���
C�JQ�%-&)qA�������H:PE(������(��o9��P��(��(��)h�%(�KE!����CKE0
(R��%:�S$ZO�.i
�P9;PPPQ�%*��Gj)����E4t�KGj^�����
L`��<�M����JA@�"��:��!�IN��4�ZJ)3@
(�PGj
�`��4�� �J(h��GzZm:�������
1Jh�@	A���R�����!�5q)G&����
(�������
J;��Hh�A������})E%��%Rz�!E-%)�a�(�i����Pih=��@���
Z)/�PE��vQ���(�R�zS��sKE(�Ph����R�
%PEP�Hi{�@�Q@h���aE������-����u���A�PE��QE���(��(M%�PI�Zm.i(4�������
endstream
endobj
66
0
obj
34256
endobj
62
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image17
65
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
67
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
68
0
R
/Resources
69
0
R
/Annots
71
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
68
0
obj
<<
/Filter
/FlateDecode
/Length
70
0
R
>>
stream
x��WKnG����t��T�Q�?�*Ad�����S#�%�)�AN��x�d����o�W=��c
(�<vWU�~]�}�e.8=e����.�%�2�`�I=���}]p��w"
��^���Pc�����s~�_��%��j���3��~M������������e��$��4aVK�C@��-yj���9?!����������r�J<�/������s�����l�c j;Z���&�+�������@����:����ri���)2��G��!{�
v��l�=a�o����[��ze�]�8B�1z=�S^�����(c���j!���/��-�.[[���t\j�����6��"`
kW�\[}	����y��@
����?����<=�"n���!(m�>��u�94#5��4��C���&w0.���
50mlJ�\��A-����9 n.�
��6��8��-,k�m���a-���>YO�CZ�\�u�,d��1����xv�����n�uR{��%��-�U�Q2�
6ma�K���Aw��A?A2�{k��u��^_%���OA/����g�
9.���$�av��"s#�d��������q�����,��k�m�
�t��D7QZa�����8��}�;���d�x��m5Co�?��{5��?����l�@S��h��h�������[��Jk�H_����}��J�Cx&��� �*/EW
lAw��9rMN��&�Jtu|sIK���gxR�|�{����<O�_5S�v���6�u������j�	*�����1�,(k(bmx��*��������	�e����
�G�P����8�hl�#���,�.*��B�-��L��K���gc������]�����v���-21\��K�B)(���|�qNR�.)���]V���3�d���������tx�k�K���s����h:��.L��?_]fIX������oanu�w�����y�O@^�Y"�H9�����io'E[���8�O��
�J,O�>�B��mt���A�3����/�]f����$�Z�~�(�NH��`l���~2V�-���nt��^������:�@9��N''�3B��`s��I�o���h/�<�h�h�B�M��`R�}�-)*z��v
�.@Z�8�N[�t"J�cM�-m�u��t.��Vt��Z%����Q�UK��]���Erm�
endstream
endobj
70
0
obj
1202
endobj
71
0
obj
[
]
endobj
72
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
1300
/Height
1300
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
73
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((��"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��+?Q�mt������������|e����3I	=��t0����D����V�#���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�
:����i?�����D�Y���t��������5
_��o������_����v�n����Z����on�2/�V���w����T��Y��g�
�r=�0Eq��In�+.�3#=����wk,Z����}�_��5@{�QRE1�Qw;*���M�x��)��X�@�EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV?��cbDM��8]�G��feE,�rMp�����-���4*�o��V���2������r��jWI+��t����?v�I���a�Wie�����T[����m��~c�����+6�cOe�U���?Z��;���(�f[.[��^����%���/���������=��j����4���(�5q�U��
��n�\������6:�� R�.�/c�f��B�O��nk��>o>�q��n�`�f�����N�P�I#/��{U������Iew��"N�?����o�b�^%���Du���{%HQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Tw	ko$�}���+_���d������rSL"����fE9?�j����K����� v\t�s���I6'���m�Z�B�m�Ksp�qJ(��������a[�7*�<U{��7��;}{����W��b������h�y�E��`q��m��1m�����N�d�����$WYg��g}������WT�o�-L�~�q��8;��?jYi�[QB��OI���������TcUmR�b��g���0)��i��V��x�s���7�on�0�ZSM�{V��v��+����3|��������;�����
��v�jE{5x���u�8zM;��+�*k0PI�I�[V���4������%�XJ�}����C���~5�\K���v��� k��m�������\���B�S�r���N�����j�iw4�D�"��/�Z����h|D���A:��b@'8���=��(���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�K�7�u���~D�C�{V��z,l^_������G���v��bO�4�G���_���~��r:�����}��}�5����$�*�<I��Y`O�B��@c�;��2/�����C��=����}����t���u����]u�F���W��I�C�
�2��Z��3]Gh��v���Gcc$��*/O�����8M����m��L����=��#X�Q�������p~�����]b96������u�M=�o��SL/jU�F��W=���K����H�������;�Q���;Q���zP���h��ZN��X�\����^�7�,b����>dF�=S\��������A�jJv��������*V�������.���Yz��h�������MY����v�3��qXh�f��]�k��LmI�+��7�'�[�����ZH�x��9c��2�������aJ'�Mv�	���X�~W���@{Vf����n�~i��P_��7w���u�����*+V������G��p#�p������M�;r�f��i�d�b����������tW����_�kk��~���Q�X�����@(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��<G|m,�������:����/�����|�����9�M��?w�J�#���c����j�/�2����`P�����I���"�'��
�we�����o-[�ZZ��-��_��'�&��AbE�_�]�o�h�!��;O�t�~�����������O�g� �?��������O�P������B���E�Q8�Y��5�w�y����7Z���h�����S2���J�������;�Wfk��;�t:��ZY�_����z�]>#up���-Y��DJ�~o�8��K�6�^�R� �|��i��U~ZE�C��I�m��j�B�O�%_��?�SI��jN���	��u5=�������-��L�/T���3(�����_m�����56���n�.���?����.����gl��(�wR�p����W��^�)um=��a4e�q����iv2%�%����Wsceo+F��\t4���#��v���>��U�:�������>H��;�=j����g]-.Y��~`������j����E�B�`1������*n�U�^9����V+��������W�NMb^L�WK|�:�c�0:o���<Ki$_'-��a������{"�%�'���
^�PEG4�M$��d�\���^�ob�p�I�~t��^W�u]2�:���]�o�)��^������W�Ry��8=��#�z�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�H�#gs�$�sw%��%��a��a�V�����YF~y9a�\����p_�8j�����f�r����s���(d�����^�Y��4�}��?�����6���~��x~�^�
e�y=wJ��B�le�j��c��n��|��[�m�eW��z@[������1��}�ww�;���!l�cQ�)X��������������X���P�������r�Wa�$���������\������#�MI�	��\��������h��lV�����Tn�kG���k��u60�����`ih����V��v�im�o�uGSKk��t��{_���;����1�����k�KX������j����*���?OJ�����3rk��������R���9[��_<�����vgC�\�2��:���yn<����Mmy.���|���Y�,��/����`�ok����������;$E�m�������_��y���6 ��y7������+'VgH��sd�+SP�$U�/�"������m�'��o����mw����+�����w�������
����k�Dm�>E���hvQ\\bo�c�z�/��G�n���+���4[W�������&�� ����_���� x���u�jM'�u/5��.a��x�����u�U�&�vF�OJ�b�����w�'������j��_�w?_J|�f�	z�����������[mB����[�%�X��r��H�Dr��]��DZ��_�h�����z(�������+�+;��s��P�~&����n6O�G/�[����Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U	uKX�*\�_��d��/�U�/m��0H�����4QEQEQEQEQEUk�����y~�����q>3�M��v6�2#e����P��{������K���]�c_l��q2El�S���%Y�q3|��������*���7��������Y<��>�ST���
��gn���Y��+K�(�������+~�!�uG'��
>��]�C3-�}�����O��mX�p�/�/�n����������e~�����.9'����|��]�������k������P��/���t�k���i�5^S��
��t���zP�X����J��[S�����.�t�u����%����@�?�{
H�7�4v���};
�q/�
���u��m&)!�i����9'����/v[�����j���.���mQ�����n�^����\Hct�\�?���>ux�7�h��k�[�������M&4��~Z�-"��=1]>�dq��(������]��*��Ief��k�2�[������_��������W����v�L���z�n���n��k����"�w�}x�������_�S����r�K��A��@���n�i~A�WC
����\t�j�i�����85�i�$����[Ik�Vl�jZ�\�����?��5R���6����O�5����I��z`g��H��7�:W53�F���${U�JQ5���ww5���@C[�u����
�����wo��F?�+��q��z�F������p�Q�Y>t�
��N�3�c�����k����6n��I��U���&�c���q.q�=j��p�h�-"�(�����"��d�U�������W���e�@��_���}}k����n<�u���!��?Z��.�U���?��MpV5�g-�������MQ���oaI��A�hc�����:�#��,z��������QER+���
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(�/nR��I���3@��uG���-�bW����=�q�qr��)6��N�.���Iem��y��}*8X�y�*������f��V�]7�Eb�]�������*?�Ux�CE�v���vw�^G��EQ�}EY�#�����d����b��+������j�QS`;:*[�.��m�YS�jz@QEQEQEg�W�O��_�< �5��.�v��t�^�W���H�=��O���:�����w\�W��y�f�8[�k��U���&����mj���*����?������^6����B�6<7e�Z���?�������_���T��1CI����tz|Ea�~�AE�v[�����T�(���\L����w���~�y�7���w���u0n;�U�d_K�Z��7���n���r>���?�qZw���M�~���\W�5<�O���*��U7��n��vO�����SG�0��u����t�]�^�CM����j� ��X�����n��?�-~_���s�5�F��B����x�����P7o��W5y1��G�����j�AcX��b���5��oj�#z�&�{���E�Go�Z\BWj�s���&�M#H�tV����P�;L
-.�>�e���6�x��t�"}}
4�p�O�_�]Iv��a�0���i�	�Q������?���Rm���m�Z����;���W=4�I<�x/F��
�"�HmV5o������sIQ-��3u�Qjj����go�*�p�a�I��o��
�/J���X����������4Xws��������/���+�����'������&m���=����X��|���t����e����~�p�w��MP���,rK������jz����]��"V����&���{����H�����YY�k��v5��������3����VQ
����E������D�}�i;,2|�G��v����~b�'�������C���|����q�?��aX���v��#���*]�,u#�����Y��|�rZ:��-5��-��'kz7(�[`l����@z��K�sx\lFa����V���@T����9�����[P��������S�\u���1�]���:s��T���k�G���=������6�����7���7�-'`G$n�����q����VV_*�?�����7��3M!�����?
o����K~[Mg��*@(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��+��}�M7�co����V��+���������{��]J|�v����z��Ir�E�,�V���j�o�����U����3
�7~l�_�U�.��j�/�@���M�em�?��H���@���4���4��W�Z�4��v��s�����+��/����on�fQ���O�X��|N����+��.'���2yk��b�i�����2�??��+�4W�)�G������?��������/��?�<�t���;����1���?�w?��|C���FC����^������?w��g�S��>��m���X�N&�+��J��\V���kZ�V+��y;U�x���o�\|�����=<Co������t�_y�����u��UcE��i0cj^L������k�����'�p�J���:�E��H��a�~��vq}��C|�?,}���t!�����=������P��W+y|I�%��(�(���^���N;H��~�\����5>�}����UK�����f��c��Fx���<6�v��}���qYv�����X�k?K�-K��ZY���/�����
�4�Y���������������&�KX���[o5�jO���GZ`T���.&����K���m��X��^���F��5�����{��F����Q�I�]�n6�R����?
���-�i�@�'���1U������������������-L�K�L�s��(��<��VnOJ`e��~X�������+���,�"��~5�}q�������7�j���]|������	���������Ack���+�MS���j�uZ=������t����~��5wE����wt������U>��Gl��b����v�h_J���G�02ui��-���K���o!o��{�����������q���.�^��#���^4��Cq[��R<}���V~����ee���4���3�#��)ji��W�]��B����s
�Q�?
o��|/����O�U�6!c��}�_��:d�jNYu��5��������I�~5R���Ru<W9�^���F����P�/M��G��A�����[j�?�u>�n]���c�V���f�6���vS��:-64w:d�o/����J�n�E��&��%[�F��8����s�ZyK���z�V����f���Dl'���P,�8�F��	�f��Bo�4�}�WR�4�+7�W-uu�7�-V����5�/�W�?��_�k��v|�\LI��+�����4��;��Ez'��|�Z_kv������H�o'�-s�#��=:���_������uEn�-�i�z����=���n_Y�Q�h��QE�Gik�d�ZS���?Z���_���{
��\��[����/ �����>�0�.t�����$����3���V���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����>��O-�e��Gs@���wy�&��O�k��g���g�E��{
?3�c�V�@��j�����TJ��jx��MI�_���U��j5����]�i�j?��	?�j���Y��oK��4,U��h��gv��Q�<���)�Dq_��I&����������;z������5���q��Go������:��4eTy����J��T��N��E�-��"�}Md�S���O�=h������Cq��#T�{��#n�aks���������d�n��L�2�������T��T�r?�����m6�{oe�*����X�~^��[T��|��4�.��k_�d�};��PCq'A���]��/���6�m���SL�b���h�����Q)H��~XS��>��5���\:���~��jWO{y�[�d��kA�4�l�s���]��"VR�+G�
���\c���.�b�Y�~�(��\��N����{*�'�����Tw
f���>�����T����dJ`S����+}���f����\?S����M������r�"����n�2n��o0�1=��t�m����Z��mv����s]>�	vW�I�������V/��W��}����v�=�,�ZW��/�����{soo%����bO�Ls(�5�>�v�5	|����A�]������s���������3���5��x�� �D�m.�l9+���F����.�����������}�_mtl�d���3�"s������?J�c�u1��A�?�=�8�=���t������{����%+�+rk[P�nc�Q:W95��2w��(�W�h���g��\�����K��Vuk���`�ww?J�cj���s�>�H
a�6[g���K�DU��m��]�j��JCQ|���?��$�)���5����G��]]���x��E��p/]��=�\f�.��WR�y��|��\N�p��X����]z�yk6�;x�U
6���u�|{����G�|��������	�+.;q+(���?���R��-�S�@!.�&��r���?�l]8����-�.N���t>Y�n�?ttvOR����L
W�#��Y���;W5�����I�y�h�V���ld��s���Mb�R����]]l�<�����/��o�������2E�0s�Wk`��)]�w��I��%Tu�z_�.�d4���t�5^6��`GQ\���l���3����
��Wz�1�5�6��O���J�'���J�3H��������J|�1�s?z��cut��S\�����C�t0p?�4��>���$���;~X�������v�n��Q�k��$P�q
�n�T�}]���
V�ll�V��"�x���V�k���Qf.���-u;��ms�;+s�U��mY��Ii+E"6T�`���u��v����h[?�k�����;��E�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���iR�I�$�W�j��j���������GWY�mOb�c	�?2c���;`NY~c��<h<����I*�V�N\nQ�=~j]��Z`@�ZOj���~�Jn��-NV�snF����{���G���;)e�h���i���T�����@��N����h��m�V��7��o�}(�/�����,�x�u��)���Y�o����S7����������@��"����j�&�H���V���U��L�yj�(�k��V��(��N�}j���Y5
A�m����}����--��m��+�����~�*�a�����\)�l�5���o�y���h]~�hm�/��Ga���T����r�����#i��l����)�f��E��V.�q���?�F��]a�s��
J�-t����O�@��/Bn��R�l�fi~Q�P�w���������K��aX������e?�]���i����Um6�dk���}�PX��������������c�V�_������T�.6C��~�n�P���N��3�i�t�S�����?����\|(oo��2��� �7l�M�����Rq���+����F����]���k^Lmm~O�g�{���d����,z�[����V���������m�����j�OsY�����#|��0)]M���?���q����\a~����u��o��xr���6#wx�����ev�����.���sU,�;Ww~��KvG��GSHf1B�'��8������X�����\^u����������/���?��L
����_���^�0��?��[8�.%������{���Pz}��\3���]
�E������M��!TU���}�sO��"����@ii��#R�.:�����4���t{��W�B�]�_y�c���^��2E���B���+�������~�����m#���\�%\,[��+�����x�7��o7���H��X�mO���&��Z�\Ouu�����RkI�)e�wf�Z/�M������
e�%�9�_�P��\_e�I��Y'?�0,_6�V$�q�mr���n$���9�u+�������Jakb�7��2u���fK���;MCk���X����^���4�^��0.���\|�*���%����q���U
&�b���j���.��17���� '��������\����f�W^T,j����v�t�Z���3���L�B��V2lo�������K9�ReD��@�!z�j��ton������t����������@����MF��+��QY�9bH��Of
2zW�X�o{��d��Z�k�Z���O����ye��^����kjmp[�
��G������kA�_���_�qc��n�x.+����7����h>���4�z|�w���|[��1��\s�VV�**��?|�%};�K���!>�q1�1�h`z�SX��rMH���C^��&���-%��W'q��Z��d����Y@�@P��X���u�����#=P��{V�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESR����K�>���*�p~1�������s.G�1��P$�]�Ip������Z�f,��F�~���5`J�
���J�^im��e�U�[�k���J��I���F��@����j���L���r0�^$�Y^�O��C+ye#`}�����|;�c*���	^C��G���n%��+{+~5o�t����������Ye��<��M�	���I��L��Kso3$��Dw_c��p=
9������r���n�{�k$-����j����t���u�+��m���7����sNT�f�W���j����
������}p�]�����^��6�}��V���L��c��X�����X��i2pp�-��a�tA�?�&�<Q����� ��kSK�������~�����in�'������a���sY�\Ot�#|���u�!�������L�j�b_�Q�����:F���������?��������Qz�`P����{�J�<A���'���J�<Er-���nO&�m6��_e��l���.�n�mif]��?�z���}���
�gnM��(�]%�AW���D��{|'�����Z��/�Z�k���~���+�����1����5-���$-�v�I��;��'�=k'X�K[-[�^~�vIN�.&��#�\f�v�l�j�O��w�����[}�'O�b��[_*<�������r�H�p��wv��S�B��[�=�������1�����l����]���pE��y�mBc�;�����.�"�In�����JR���9���-�+����`'_�b�����wo�+OE��v��k;G��U�������t��~QD��ci���*��w�v����}?����C;�E��)�J�^��]� tv~����tuX7�^o/��W��6�$����+��kf�;|����0�Mz�+p�����O6U���7��a~e=Mtvv�c_��=�^k)_���8T[����rj��k�5}�j�/�o#�O�Q����(�4��F�s�����*��pR6>�
j^8]�~TE����{���d?�g�K�K_1�Y_8�\��=����|�j���~�t�������Z~��������h�me�.�����*������l[�R�����������������#u|��,a���z~n�P��~TJu�?b�P��y=��5��L"UM������2k�6F��TL�����k�up����V��p-�������-6������P�x�(�?�mki���I��^EO��]f�o�� &�������>E�kv����������xE��\:������\nf������������j��Av-�V%o��_��^��P�5����^+������V���Pi��ke���Q����tR��X��
li�����=�����<���[Jf�����1�����<��������Ei^K����{|����������Xr,r�/M��*���]y�������Aw�����������{��/���Q�����W��(�:����������W��?d����]��w��z_�&��_�����0��>:�E�+��N�V�.����B?�}���	e��e�U��L�2.	>���]�p���s<�����HP����r����&����f�U:��Y��L�f����V<��Vq��3:���>���e6�+���sA:�+�������o��u��"s�$�^�I�QEQ��KM9ss'=�y?� /Q\���4����W���2.���U�(*r �uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Rt���#L�^Q���D��+����/�9���5������XO�1p���5IPm����yl�Q/������m�*�t�P#4��K�\���X���s�I�!%�8
�����Kx�
_�#Q������}�zVg�}#�F���W��c�6�����?=��^�R�(��@����zo�`"�?.�Gw�*�����������(�����O�z�A{�D�%2#�@pH��Goq�z�yR�5�&�J�}+��6����e8Uc��&���ta�����4���-��er�$�s�������������j?�R-0���S��V��'O�E��l_�i�R�J�����R���~���O�Z���~�~�N���'����D��W���GR���aG�C��������6{������J~P�5T��K(T/e���k��������5��m>��O��RB>�y$���8O�j�������^�P�kVI��Y�����m�%��tt�V��0fX��G�W�(|���P�u%����ol
��lE����=k��������7����'y��AI�K�,��ZWYX��?��������Q�u6�����S�w*�x@������6Z��	���f�K�I�+q��]Bm�$��
�i~�k4����2�E}�5�7NO�VN�h�y���?�y+�j�nk���Cq������t�U�],(!���U�j��nsM�&�4v��t/���� ]�S�{/��?�;
���dlwsS�K��4_����.%��o�'Z�u7�mZW�����
|�qq��un�Z��������S�l�����=�oE��<j�t�qU5���e���V��--�G������~t��e7WQ�'�w?�U��'���'Jf��g�ie�i�$�+���+|����3?�3
�"W'�+��0
��o���J�YX�[��\����=T5hx~�D�d�y�~5������T���X���]�nT� g�=�������V��~�g�?��9'��l���7������R�S
�������.���~��
b���;���_&��y��+|�;�W'�]������3�S5��������y�3U4�y�����t:m���o�@�]�H���=>/�^4�����?�=����e#X��l������f�eb�/�h��q����W=4�k5�����qV�)���E����{��I?fF��Z��%�����N��7r;T:M���7SW��-���R��n%�;���J��E����;������������bp�������t��Qe��n���SXZ���`��Z�������
���H����s�"�6��cF����V]��]�V5�2�o�YW������?_JX�*��j�/5�]5�B(r�t-f�6�n���>��**��?����v8��i]v�����;
��.���n���Zz����������6���o&�K��;�O��/����|�o�Y�z��2���G�&�b�y�z}(e�bf�i�Z�����iV�}*������so�~c�����D@�p�������$M�H�{/��:��]��mX���Ri��/�o��m���XZ��7����PU�}���!UBt���^�p��l��M������mb�,,|���+��?�rvp��H�L�>��[��=K�2����E�����N�+�m��iR�����,�v�_�#vy�k�Q��pe(yt�C���&�d���~T��5�XZ�S��O�{�����m�[6v��>�:�������$
�m���d��0�H���b�n�o��~x���Q.�������}�����`���p�k|�I�g�W�	��t��#�	����QEHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@`��Q6�>L_�����mM"C�!� �5�:��j:��7�����(�G��o��@�S�U�������`S�_�Z���}.�8U����u�*�k������_�6��R?0Eu>�Kh�"��$o��nc��5�Y�R�����m�����@Q@Q@q�'�KmH_ ����'���>� c�]�p~8�k��-#o�/���*h�>����W����|�����<?���n���&/2�72._�����d??n+����%��2���*����5���}���-��2��*����uNO7S����y[��Gs]r����I�
��H�������A]�qG
���j�����R����O����2�'���N����X��$�2��=w�jK������(H�/j�����f��u�+��o��|��p:����,h�����jA��F�E��/6���]���l�v��Z�}��5t|%�-���p��b�7�[�����'A��$�O6e�O������j���������Z��Ckn����N>�B��d9�'�L
��n.5�:�/�mKsyQ7�����+��X������Mr6���K���`ixn��^z�����Z��l��P,)�.�q[61|�Y��L�V�#/�������t�S�sp�����f�e�v��/��v�?�o��[�..��TS/X�"�i��J���������#���V���r�����V)�K����Cd���O������G��h[Y'��a�]6�i��e�*���]�U��l����,k��[����T�Wb�����F=��Qn�a�T_�G��|�n�
�������W�����m���kZ�Hm�(�\�w��~ �
����L{V��jV���_����m�����k����&P���i68�i���K.�
ZW����E�K'
?��S[��.~��n��j�����#���	��X���S��uk��cN�������$�� ��b3��r�pw�f�t-m|�����X�M��q�?�;���)���V�����Q�s=��A�Q��Egn"_��&�i��6���eh��o�NX�t��}!5��2�����F�v����M��jF��I��
������O�Vi~����*�����_����F�>[x�q��m*=���9�@I"��o�z��[]�����{s,����bD�{��4��;yv�}�:�?���6�V;eU�>�A���9/e����AP�J��o�y�d����wsN����m�)-��S��R�J�nv�Ry?��zc/�i��oe*m�v��_�+���4�7��X����{�����MKqw#C���/GP����Y:���6-��}��h|�1�����S�[�n�~�
���%~�}�f�j��m��������O:l��
M&��ye��;w�����]O�VU�a]�3�������z~�������~�WX�
�7��W?3��oo� ��Z���c_��k^���{�y�������y��n����76��E�������r���;V�l^F}�����)��c�����t������]����V&�s��z`U
>�v��/��[^�������1��
��y�@^TzN�����{�^\��1��v����k_V�.�V�W)4��s/���a�)!��y'_�Eu_�~�!^�BO�p?�y�j����V��e�	a_��N��e�3I��4�eE,�
9&�\���7�#����`�������]�W��:X�C�������)uK����q������������������k�I��A�r����P��
l������w�%^�{���*��D��:{[��%����~#u{�&ER��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���t�V�3��=Oa@^-��e����
��B��S�J�4����O��3w��J��m=i���-;hj���������)O��4�L������A�c�H�Q������<�k��5W)�~�����F���A���'������c���mU�����o�����
kT�QQOq���!������PE�Y�9���G�������m�I���F��?�+�wI,�l��C�?Z���k�|��g|���S=��H�cb��jtqyQ��������*��{����P^]m�����0(jR��Z��NX��-W������8��\����X���3^o
=��7|���P���dI>������]V�jn���tz�Y��U�����t;M����j7ej���{�������x�Xf����1 Tk�o�/�g'�?�j��t]�~U
�L�J�����<
�5�eg#�~��B�Q-�I�	\G��q&�d����������h��d�X�~m�������]��+���O�������O���U��y�>Q��X�e�����>�������_����
���K5�[�<���0#��K�/D�n��3;���_��6G����j��.������y�U���mC��Q���skj�����?7�s�]��������~���fTO�8��`�v�/5���Z�R�K<����D��)�p�U�j;U��p���R1���B��Icc��hz�����-b�������������\���f�w��0+j��
����*���:�����)������O�y��WG���Kx���yz$��������/����s�{w�z���v����b��;�H���;��D��4����Go�(�,mc���SY�N]�5�i�������q�����	��_���Iz�/����/�v�����w �@Z���w|���t:|G�-�Z�XC��7.9�����d6������i�;yv�}�~��+���w
�B�����E��U���v������UmB����4���K�������s�$��a[dosZ�M�X���������M����v[��@��v�������o�q�]�����U������a-���l�����Z�K���w7�~@���*��..��N����w�]��"u�����-���=yq���o��}j{�{���w�����Iv������P}�=��~�?���B�Sn�:����������V��%�m�7��'�t�r�z�#��4v��G/�A
�!ge�����S��m<��$�L	�����N�j����/4���������t�U�������m]���K��F��}�4�w���j6|���w_��������n������+���o��T���eyc���^�����S6�����S��I�[(�(����{}�y�?J��*j�^h��j�WM;|����&�.���D�����>\K���sRc,��~�RL�����+������������k�kv�|���=�G����P�����(�1yK��Rj��jM��c��!�3a>�z������3g������}�����/�������n�l�������3U�g����)��;�-J��1o�>��@����X��9����\"���|����k�Hme��n���W3k�/��p7'��k;�k2�bYb�w/-�]n�4�M����%=c��o��*��1��l������6�1w�so����j��!+4|�����nZ�}V������o��+2�%�����h���9��)���/�}��`j�[I�:��X[0������@
�x��F��&�c�V&�vo���c���n��`t�
-���_�y�Z�*�����'�[r�d�����S�`��k6�r�!���I��=�]kP�L������������g��.�|����HoGop�{��g���"���M�-u+U���e���������W�]|�R������4oB�kx�9b�$���M�V�h���
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
�|W���K
����������_������������+�7���v��RH�6��v�_���>U��jo���M9X���7�m����������3n��n���?h��5r������7�@�[�
MX�/�$�s�b��l���6���E@�������9������z�i��v7t���.j8T�M#/���$dO/����H�}���]��]�/d��cU����=�k��%�i�-o~�NX�h��F�on���U�O1[��u�������&������/����M�Bt)�6�������'���O���Pi��.?Z��~�y$��=��L�Z|_d�����O��z���
���3�4�!`����tr��������.���D��w�GMG�/�{���N�.�Y�7n%��B�o
��cc��F�3������� 66��%�@5�o��*�-.�������t�!X��������lk�����Y����&��H����h��m�z-f��E�N�z���M-���\^�zn��=[��Uz-�[x�u�������y���F�����mh��e����u?�t�|�-U����J��+j�Q����I�V8���Y7�:��K"�XV$�p��0��%������aT�k����1�L�/V��'��7�s���
�i�����_&.��W#3=����3��.�wL�\�h��#u��������������ic	�����=>�o>���"���*'$�[��.�*��#
�*:Q}��#�N������jK�
�|�*��V��X��6�N�+��������6/�����|I|l#|���@7�%�������5��6IeI�]I�{����^K����C��L��i���e�U�v�����S�qon�zc����i��K6�_��d�L����N��q/���'����q�C��z���YZ��=?��5��<��r�?����]��z5V�^����`WOoh�V4_��� c	�l�����]���!������m�}j����?�w�����j"��m,���t�r���LR����]BP��������v�!���5	��s�~������\m�n�3��*�������0?��*��i�w��=���l�c������y�Vp�����o�G������Z������Y�����I����U8�jXS�Z{m��u����V����i��TzR}�~Z>��1M�����������hV0_��K��3
F����z�X�{�U�v������m'%�C!����K���C7�h���-'���U���7h^)��j�3ej��6��sQ7��Z��E��4����N�7�=
P� ���F���
��7�Yv�V���U������@�=���t����H����m��>��Z�!�����ZY�x��w��h+��TV�G�`]9�e��=MY��|����Y7��ai>�����W��[{~��������������W��i~@����������f��S�uoZ��}�:���t��\������W��#�[m�|�y����54����%����l��X��XXy���@���Zz���[�I�W?�����V����,������k�����o���&��~�	�]z����_4P�>_��t���7���[��t^	��^�X����y��&�P���~��F�������It���5��<'v������Kx��-U���661���t�������f����g�y��b����f��M��g��~4N�M��E���z��\n��v���o�����:
��}���N�a���������S{U���t?��G��y�'��4��\����j(�fI=Z���	�e�Lf�-OQ�Q�h����q��_��W�kH����vB�'����=�����sy����4��-���X��c�^�@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'JZ��w��R�~�����������0
??�Y~PZ�k�{�-cVX�S�*��o�� Em��ho�i���o��P�-
�o���5+��r�7�n�`I�j���
���I@��yjW��!]�4����w��0��H����42��fK��'�n�*�}����3���k�7`V�Rl>���.��v�Z}���l��Q95�VG����5k��	�O$��Tk�����v�}���y��w-���w.�������to�������kE��E��������G�]0���_�N���O���~�V����n����#Ego�����;���/�'_�Gz�o��G��_��a�S��w4����?�;
���,2>�����'Rr���nb����I{�xZ-�(��[w���i����Q��8�����Qw6[��[�����A��]�����k��>�$x����*��hl����Z���������~cKv��B+|����N�S+5����j��3I�w����_�]���}��K�D[�o��~����s/�������\yj����j�h�	��@z���]0����C��=�!Wn��m���������9�z��XK�����������K���|����
�kn�7��6�L1����}�8�M3���]�?�\��=��?�J��9Hv3nsX��������������|��������.�6����������75�X�h��@��'�"Z���o�zV�J���J�u���l����
���#�X����?
�Fd������G�s�SR���N���Z�����?�����..F�UJ�2��6V���y��+>��,k���u����L��
=�U���ien�
O�r��!����l���}���;�b�68��Lm����_�A�������
�����7�Z��&EV���S��K+5
������cj���|��i�RG7�3��������yh��
���V>B��+���{I�{������}��CE������]E�Ej�1e
����f����Q�6�So����D��*�0�=cU���?������k��S�u5%��fg�:U�P���[uo�����K?-~W+�~5f��4��|��+��������;��B������1��]E�&-��Vv���P~��[�l[�n����?-[��WM#���~�MCq��b��l��GsW�E����OZ`L^f;x���[6��Q�=Nl*�^���~fon)���4F�x�7����\m����Q���g�
��I��������3P�.���oE�C6�i}�lm�zQ��R�wP�Y��oZ]�����m��i�n��9�o��Mf��j`�r��?��b
�Zv���(7,��b�'�jH���z��@wP�9K��W�SH�����������VM����������q��KUy��g��P�������r��0�����Y��
7���]���n�~g?"���[��f���~�����E��O��4��������������E��Rr���������V����kRo�F�����j�F���;S�,?3<���*�u+����jk����K�����4�I.$��	��������,{����t-�]_Ix���Q?�=��!�X���<� ?��?����4�>;8��^i��q��$���J�/.#�F����EY��7�����&��o�=h�in�	^%���}��]��&����N�'�"H��$�2���>�.-���r����Z���������e�i���$��+�]JH��N�e�M�����?�+����cF�-2�Y��uPf��8��������6Q����iX��X������2����p�]���.���y��������R���f
@=�:�}���o1��}I���S;�h��K{u�����rq^�����_�V���������9�r?Z��L�+7U� �Uw��?��z�� iQ\���Z�M�[[y]v�I�������\o$��x>SJ��J9@����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��)�)h�!������m���4���o6��o����$�o�J~b����{W�Y\����G7to��j��� �������Y��V������[��H��/�
G��Y~o����mq�R/��w�S���V���	��hl75.�����/�M�?���n�-Y�_5T7�4�w����n�V"�������|�_��Q��[���b��/�*]��eM��-?hj�������������^��RIv�?Z��g�x^�s<2y�[��y�,m��c��������Bh����J�O���]�;�ZM�hW��I���'�2�?�P��KH�|~k%J:f���H��Y7���'��@���/��tV�����O����5K��~O��c��Z��68V����h�Z��F����T�+b�M���r@o^��q���|�0�]����i��fO��&.Y��euC+�v��#v^��V~�jw��j���c_�1r��O��@����I��s�L�.�V�����F�^K���bb�����f�
p
dkb�gO��{��q�&�t���.X�����K�u�H�D�c��:.������7���h��m����t�k��!xn��P�a��+��>�t����t����
H	#�M������o��Y��|��GJm�B��8�����Q���>��L
L�h��w�R�+��&�n.'v�����Aw�?�#m%~j���s�_oo���\����?�~w�%�s]��o�qU��}������]
�A[b������g_�G`���c��8���o��.[�z�kWMKXiY�[�������������L�Zi6�P���>�V>�t���n�+��?��w�Y._��O��/V�y����?����}�R]���Wwonn��X���m���c��+���s|�z�{8v.Z,S�wMp��c�O�i��W����l��������E��������AwI�@�X����r��9�/��2����sY>&����E�(.�`kF����t���o���e�{��}��f�_���[v�h�+����4,W{gn��x�cX"�['����j�yo�B�i�z��5��(?sw��� 'm���.�������p��wnj���,m+�������3^M����L�^�xV�����`ip���Gp��_7��]kZ����7n��@_�M��^���,�	����Yz=���~kR�.��#m�����z��|�����_�{�����4�O��F�'n�)V�@n���M�����M���{����jo�T��w��2��I�W��������B�_�����~n/��f��v�o�.���d��������f�&>���Le��Jw�U�*���~����-���|��C}��+����9����5T��9[��������Z��m�.Wn����
�kI2������_�����n�~�m#(�*�[n�����i>fc��0��UY����m�6N���J�����weh��������=��c�>����5rO������_��v�k�_d�`�^��?��I[�s��oh�k�x�*t����d����H�v�Q�Q�zPo�������]f�
%�_���u�i��[�-�{����<qZE���%�GS����{�o���� ����5�w�I'���*������K����w��3q�P8Fi�n;J��S�_y��ww����K~�y�T���*���i��~E���
�I�/����{TM�����l����i%m��I4?�,�E����;���S��O�L����E��/"�x}R��]B����N=�~@Vn�w�I$���f^1y�=��f��pE�Z<���;�a������kk%��w���qWEq�I%��R��h�~'�5��������+���<-}s��4�4�4.�|2/Q��5z6��+��������}��7O��@tW�1�[K<��8��k�{���k���C�w~�U�r��_W�K��6�~����?�����^�Ai�!x��jZ��4l�������x�co.�"dz�oCZ>k��nn9���������v9���i7f�L��d��D�S���U���ok+�4?�����GH�������+.oh���K������q@T6�\�$��9c=����
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
���+�Z+�Y#=U�jj(����it�������\���Z\4SF����z�T��������\v=����4Q���[�����������V���I��%�y�������&�Fh�]�8!���ck���6�55���FM�n���:7��O���q"�D�wcoZu��g��O�z�*x���o��Y�8���i�
��v��Z*�7�U�]�V��\U�U�.?�=�=�n�������57w��������
Q�m��uH�V��Fj��/���������������J�����
����J��\O������uz�)^U����g�.���o�/Z�<;����W�e<�k����
�(�j+���i���A�a�X�M5Q��u��)fF�=�Uw9�G��zz[?�J�}k>�Qwt���cb�:�[����_���f�p�������\��.��4����:�O�ZQ�~����Z),[�8���P�g����t�w����tA�>�������/��?�u�
�H��%o���{�k���G�?���?�UB��/?J4�W�v���]����t�uy�4�O�Gz�TK{-~��L.��������t�3|�����K�����z���o_$[`������k�R]]0�'o��<?b�
��z�=�/A��E�\K�s]v��3mVT��&�<����������JR����t� =����&�|�:�����{���e�;������i�1��i��?.��Yz��Y<��z���p6��zV�}���%������1@� �	��o���bh�2_]y��v~oJ�M���@���Z�=>�--T#n����������J��X��{��\���/?/z�T�}�vV�;������G�q�O{*���O�E;V�	�J�x��+�V;dU]����X�M������i����]���J��<�B���e���jw���'�E��"���~l�l���bK{_#�����V��'v�^�0�H�����$0��AQ���z��'|�z~5f��,p'�����@��������*���(���=*�+]1��X��'_��s������/�(�O��z�����2J����+��C{�|�0�@���[�v�7����]�j�����R��f?t���?����~���u���D^j}56G%������T!����>�l����7Y`H���
0r�1=��{a��8����h_���������n��q�
���	��~�;w��}���V��������T��������7��Z6��r�5
�M�m"��JUm��F�6W��
������*���V��,���T�1������L�%�\��N������Q�/��pjke��.���/�5r���v�w����a����_�>�H����;~^���U//�L�^?:`Te��~�jt+Cc���oo�@
g;�T��u����6of��-������~nWr����P���U;�f�{�dT^(���Z��G�w�����V(l��i�
�o�{�R�H��W�Z�b��P��i����w�|����.�_�s^0�K��p��{����k���
"v�s~F�2~�~��qPi�K\"����U�_68����?���&l��"���~�u���#����I>btq�WCo��ZWm��@����m�.����3���/�����c��y.�d?�������-q�k����C�W��[H��N������G�_�����7��Z����o��%���"�m��{���w������{�M&��5-�?��m����_*3m��o����(�K�����������g=����We��]������0����h��a_�I!fUDL��g^K�]>Ge������%��|Ie��1���X�������mHz}Em�P�A�|�R92��N9���h��7�������h�tl�~�G�z��f���s'����@+�
��`�o�?����W�Z��j��'��o-���TM��J��F���5�k#������>�q+J��|3u��w�n��;|�\�����I��S����l�:_��<��I#{Y"]��.�����"�i�����{����i07h���
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��iv����?������P�xv��s[��n��Vu�N�*�����u�KMi����9��:�b�0+�i"���\���#��#C�v�h����{~I�unl�}�3�����eJ�6��Z�������U��~��5����?u���*�X*��9X2��
�7�9��(��~�@���n��KV!�Q������"_1[z�})�,_��c���Nj���5C�Im-|�W�6��O��B++P�.�b�r�����dM���D�g�l]��A�T��t�x��Cj�q}_����6�\\o�cl��������I.,g�Fy(�k/O�6�yR���
��64�7����\�G;#�6��zU
���O��;U���d��;��OO���j�i'U��N*[�vF�+u\
����RlO����TZg���������-;��zW��J�����e�s���i�o�>?�5�����}��a�8jO@:}>�!�P���5���W���TK�/�[
�on�?D_���D������m����u}?�����/AM��1B������APj^T,��x`e�����`V�S�\��5�yh�������[�}��������68�P�X�����Z�����n�����_����,����v���Kx�;p��;[r����
��;KY%������m�ak��g������*����j��'�{��y��=��[R?�����8�}j�3��{[y��.���z�M����Y������27�/3�t1��x�P3\2E�(��@l�:�������Z������p8���xgOHm�����Aoz���������P�e�A�M,�����_�����a�T�~�n�7�=�
�O��n�?���?^�H�������P]�4��bNN�J��JU|������\Gk��I�^F;���~��������E�:K��C�����zU8��p��w�kZ��e����h��]����]���n���U��Qj?���M���L]�=�*"�5��$��i:~5����=i�R�d��U~��Y���?/�N���{-B��.��G�������:g������0*�*Eo�w}��*���y��_�R3����]��r���P���������
���������6o�����O����v�G�����/�@�����[q.����y����3��7�M�/������q�SY�m���9r��5q�G�h�~�7�3w��n��No�~������V��������.W�1�ll����I����y����@
���R/�j�r����5.�e��`5��/��{J��������J�������i���R��5~f`�-#���������yn���G��1��������{���}����?�
������>V�Z�kh��������]3�����SZ���P�M���v����wm�J��J�p��n���,���Y~du��j�����P+�w�!U�)#��_X�7G}��?�U��<v�-"���~<W1���<�~���m~XU"�X���5�O-����-��*�'a��kkI������@0��k�_�>��V��=Sv�����z�T��D��{���(�\r��I�]�e
�����H����Y�c���VE�����O���Z�.�~U5���m���W
?ALm�t�?�������Ye
�2�OF�*��������jxmK���
����#M���i?`�����t���{\�u
�+ab
���k8e��0�4�7���{��4I�i��[���C����)kW���vm�F�}qZ<�_jR^\n��aO�Gj�����H�������=?�P���O����go��;�-��b�R���%��=w8$�+�aE�4�1�@a^-��nu�Cn��H����9�m�`GV�#��������W��rMpW��Y����]#�3�:���uMY��
��[F1���k7K���i����u�Q���X�d-�v �\�7�����x@���*�@��[���������C���*j��Kt��J����?�q�������
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��q�����+���n���� y����&�,*����CE3o^�7U�F�����T��7>�@\��)UF��By�4#�k/c���f;�<��WwlQ6��z����O�L�f���S$�k|�z����NV�YJ�U�5Xw���}jL����9^�,�����)��.i�����5KQ�;�D���D�U��
�����=~F�6���+{�/�V����4}�r�2;)m�=��i������=�=�C,�-�l��U�J���6�N��e�u�����2�I�V�U���������g"}�J�V���%�*mgYq�����_Cy
�."�/����9��g��_�x��~5�����P������{u�O/�?���=��(�����WK����CZ������XB�����*&���������Z���Vq����9?�4��t�t/��
o������>�Z����~Z�X��ak�����F�#����0�Q�y����|�����	�Ikn���3��oJ�t[O�-Ie�w�I��]�wB��+2(_�������7�����7KY$U�!�����
��{6�_���?�
�{y��W@?�=���I,��I�������T�����i���}=j���w;7�+��L�M;���7z
`&�z-4������w�����j+|�f���{��	����W]��7�>�}�?8���M	V��j���~^��)�	ij��j[�L1��_��\e�w?Z�%�Suy�����=�{��+;6���G��X�]����i�������$�?��$����d�����r��og��nn��b��m���\��VG��<��U�J����u�����.�t�c{��;}��~e�����*�U��� $��1�?�?�
t?��cEd%r����Gj�5�������hw4���e�������&q������I�G���@���~�5�Zn����w��@�w0�f��m��n���5.�����3�&������������.~c�������Z�X�+B������*5]���T�.����v�v�$�l�?��o��6F���������@q�43n_��7pj����������*��7��s�?/z8�i�wSW
�z��v������M��U���E_��#�M��~�H�x_��n*�_��iZ�F��-H������L�[������v��~\��=p�"�������z�������Z���Nv�(����4����R3j�����d��n��k|���o���jFA��o�������~Vo~)�Q�3��l���T�[�B�^�Svn\?~�3|������'�����SM����Gc��<���=��'<w��Wa���U��{�(���|�6���a��k_�_��O�M��v|������5�����h7�[cwt��ui�\q��u��k������[ �\6��1����$S�_�z����
�����do���V
�E�N����.����hB�!����49�����[:|!�_�f��y�j��,���������P��i/[�H��r�Rj�f}���*���[X`E��������K�*/^��9�X^i�o�����V<���K<���lA�����M4v�k-�H����;�o�>�����O��m"�k#[\�w+c��4/��q���?��}����5������ �Z��|������j@������q���n���7�AA�"����6�8�����PxV��l��.��?���e���K7��}�J@g\\I*�O��d���sz�Iu�Ch����W��;��n�����QG;��T�/��� ��P������j`{O�����X�m�R H�<����TVF����_S���Pn?�J��:��m|��&^����>d������m�?Z�4�h���L7[%'hYF��N�������K3]�?����^���]�P�e��p��d��3���1�����QH�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��|V���=��C[U��$��I���Z���'���jEo�����}�C|�1�j�'���Z!��V������h���X'�>��K{�<�/��Cp�)>_�y�!h���y��m�Y�`=z�Yc��~��	��Q��������o���
e+��j���gv�=��h��o���E�������Ui�+P�+V#Q~e�}�+>;��z���m��K&*���"�e��d�W��Pv]�v��F
��v���^�n�Z��F����r���F�n�	���QE�n,�+��d=�J�J����2n�(�5}6f_X_�~���a{{���/&A����������ax4[�H��wQ��}�uZ@7��C���p��7sV�.����;*�m�U��.�z�/�Pj��%�6�*�Lx;���LI]��s��t����_=��l���ox�PZ�l�J����V�je��eeb���������L�P���\0��|��8_nW�V�<�eif��0�;���Slq�_�.O�� 5.�
�n��E?���[u��=i�z��
v���=���y6��O��:�����S��u�����_������G5��}+��&�P���y��@^�#�������8�z�t��*�m��F��W�f��lZ}�q�������[����_��D�����w����7O�������w���t�uiJ�vi��_�������0��;u�@Cyq�.��X�4�!�K�W����S��3],I����Y����6�O���L;��S��}�~��Y��VkK�?.+��y��3|�����v���E��I�B��>R�B��q��	����{���+;|�9&�����������(@K&��X���|�������J������T��oe��y{�j@
�)������i��5pZ/������m��}WYot�.bee�@,�.(f�Q��ws@p���LR/����S#����&���O�}h���65�����B�@R}�j���C���Cm+C|��|���h���}[���;`�v���m�lS���2�7w���V�+n�Q�������}�a����
N��C~u)���z�m�U"�n?Zn���I�.������(�����}�-��e��n�(�m��?�;o����n�������?�jEO��~�G���7�_���������S���f����K.Y�S���k6��i��\zP��+����o��Tl�/�������@	�����������o��#U����cw��o���f�6�Ni��m��gw������s����l{����E�o�sDjw6����ah6]��T�(nS�AN*x�����J$_�}��p�����,���+��5�����5�M�7OJ�{;YR���l�8�{�z�]��^���o�Z�v���k,����y�z|8\������U��m���~g���;
��l���c�>-�����u�R������^��}q�����$��[���q�SI)����s� �����f�L�w������_����~���1}����v�<P�T�/�5�/3Gi�y���j��!UN��t:�x����������OXt���O���(���u/��
�s�_���\i%v���U	�Z����q��?�`x�S��������#���'}s�jK{Kvv-�9�g�J�WRI�n�)�f����\/���������cj$�g�?��n�z������Y�;c�rMx*�����W<��������:U�����)*����d��jVK���:�lR^!��tQ\��p�&zv^�k���V������B����k��2�����`S��Hm�E]�l������R{�����?3��\v����}������z�������}��������Q :
(��� ����D'�T%����������d�w���r�������}JyT�sI����v�h�g�>&O��%����h�s������Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U�}����O��Z�L��u�R?:����3n��1���{�i��m�j��t5@N��(o�p����^��K�U W�b����������6:��sk4���g��tA�M{M��_n���,����S��*�U�@[���H��_�6��Vu^z��[�MB�g��)b+��������:3����[�_�z,�&�s*c�wey��Sy��*{{��7���^c�_�v�Q�z�^L���[�����[_C������)�h[��U���.,�U�{��"�h
�
���/����Qp!��j&b+m^	���^�]i��T���[�O�Vc���5T�
6p�
����j�����FZ��{�+0~W��7���.v��v��_w�JJ�4n�3P�Q���F��uImo���"��P�T����+�B�2����[�b���vo��F6���mM��%�f��_�~5��|�{}���x����v���Z�i<:���n��:<���~�<�#�/�'��eG_����������b���jm��)��Z�R;q�����
i$1��6�X��n��>���h�/~���z�k����\K�H���=)��������nQ��P�/L{���u�������������P�3H��&��5��1���.�����O��$Wkxp�����ZJ���I��T\�������W���V�	^�hl��������@m�������?��������H������V$���Y^��b��s�V����K��?��B�R���2��kK�Z��O"/�#�m�#Z����|�i?7� 5�mRu�Wr�P�����N�v����Q�l���+Vfx�ai�������@�/������>yO�Ga��S:<kM����j�!k����~O�>���w��G��zsVu����5��}����|D��������p�}y���X��������]��z�-t�5�C
���4y���a��b��_���Y���0����kZ���gf�%�����Y�r����":=Z��H�x�;�����j_o��us
���R<�v6����/%�����U��3I|���K	����W�����;5I����m�V��4#S�5;.�W^�n����s����

������Jn���Q�im�.v�w���sB�������H�����V�	}�j&o�|���M���h���i��mF����Zr������I�o����n�7�zSW����~�;���D�v���M�/���_*����~�;n���I������~,8Y1�?��P7?2���~���[?{��3n��z���G��z���������Z�[��=p	�c�6}��@
�xj�W�}�v��4���c���c(�[�����[���]��"�Tq�m�����z�%5�r��]�}���������-;���D���r6����Ln�i�����?��F��w�5�����N���B��v���w��N\|��v����$@�����������F������%���m#���J���v��jm�mWlmj�n���3rrq�\cL�w������o$;�d���+�m5����E*U��*�Mn�V��K�����+�/�{V�p�Uwm�����ki���@����+[P�+yp��?�=�������'>��Uk���R���dT��+������/�d��m]L���;}������w���F���~���n�6��
���~������#M���H�*��[�4.��U����-]g�l��k>�/�?s>�?J���E���w)�a��V��p�[�f�*��6����k���-�g5��%���l�A����
��\<�0^�+T}�Gi�L��i���DM������M�<�t���w���<���-�Z�T�����W�������}��E��z���&�v��L'�o��(����������I��y0�c�W��EdX|@�Z���e�e\��r����������7
�o�AS`1��:|�������{w���t�sRk�����$�'V�k��}����G��<����T��E�O/���0�������W�W�|$�?d��ue�&�A��MzL��������l{���{(���R���|B���kZ]l���5������g��>U�.�wS�Gj���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�5h��27�F"������H�5)�wr>k�m��U��*����*�j�Sw���������V�l`��
���u�����5y��H����������8�� >p����%}���-=����f��V���Zn6�@��5*�?��m�:���'�cs,M��������~���^_�l��{~t���J�V�-Z=�x�S����n�5V[I�T=�����q��{�V��N�O�����p���P������U�o�}��^]��BIc�5����,_�Ev:�����4��a�$/^}���ou�����)�w��P��d�zU���D����-uW�ev�����*2�bX�����\�tp�Yj��V�����(����{Uh����C/���fIm[����3RF��V�)n;�j7m�q�_z���C}�nh�7{�����+|���Rn�f�%�R+v�����V���t����4�����vD���[|_�m�����)����z�)]X�p��7�*r"������%���!6�8�Wk"��E#<K�Ux�UnE��h"�n�<�@[��J���w�H�n�����U��*��X[���<���-b������j��^���o,����e���������6��O7�4�����u�]�������sz��q/�?t
`gjS�oY��
3Kb���*���M�J��������R�n��E�G@
�����7�����zli�lK���?���=>;K5����tv+�1o�?��a�j��n*��}��m��LM��i���jWb���|��x����+5Fm�I��Z��4���a_�\I;����Cypb������j��]����D���r�N��������E�g����������������?����m��x����f`�.W�&*�l��_�nO��k�QmX�9�~�����O^��z6��u���!��4 k��T_������>�������L��t���y�,��cO���>,��D���e��\�z���K��a�g�f����]�.'��	$}��0����U���>��[���X��E��m�u�z����S��i�Ee=���l����V����?�|?�WP�2�o��h��`���S�@��zU�"���8�~~���Rk�F��_�Vc
�/��*�Z��O�b�Z�B����N�.U�Q��/���5+c��4��r���9��i���jlk�����hE�Jn��S��@
���]�����~�D��P���~V����F��{4}�]��cO�LoV�v���x_�N����7��������_�U-J��������i��kw����K����	�����
F���S��
������2O�������*���>e���T3�=h��l�Q�j�6�����#1j���jo=(l�������[�jr�x�k|����ej=�7��x2��g����/��iUC.>���6���q����������lt��}i������B�j7v��p��S~���m
�����j�m���D��V�_��<�j��(U�������co��GR�U�%-��/����^���Sm���Y6����W���!�PtX�>�������d�D���?�T�%�-�N�+����+�5���������\����G�'��.���!_�����r�-���-�ay�j�Z����v�4�w��#�&�?��L�@Z
����/&�����o��u	����z��.�������O���#o�\o_���h���%�������\�(^L/������K��bY���~]jv�-���O#���SZ��e8^����z�"��v����Z�X����Ai�����|/E��[�&�����.���g�O��i:
����������CT��E�>��\����P;w��.������u��WbV[t�g��=�A���fQ�e���~\g�\�>d��hi6�n=8��}����
�����������:��8�~!�m�\���������Ww����>m��s'�
��:��%�����K���A�^ky5��q-����	U��G���mx���]r-.���$�q��k'���c���������Hr��V������a�I��T�w�02��,�#�v�{�GZ��p�b.����Z<;�I�k�C/�e��Qs������H�h�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�����1�PG���l2�k���c���l��x�������m�/z�o���-�LC���\7��������:��]�5r����������R�����3������OP_���h������F���
hG�+n���}?����k���,.v��n�.[���~���NVd?��0e���Vt�B���e���q���_Z�����0c�v�#���#�M^��/��~5�X��wn���+2����f��Og{qe6�I�'��P3�Z��e�����@8����������_�7�ta���^+,�
�������V���,5>E�������}c��Z�?��Q�n�����d��s�����W}������8��5����4�X5X��g����Z)m�	Wr����������^�
��.����S������_T�
z��Z�n��O"�����3hm���{�V=i��wT{��H	��Zz���fPQf6��7m����U���yj	%������h��(Ec����n��6(�W��[4#le�����p��UnED�v����t1$21�o�;�cnco_�G�\:��X�e�e�:����2�P����[rzvj@ck����V(��u�\��o������F����u���i�/��n������n4x������9���M�kK�k���2'�5�����O����F�uU�/��q���h���v�������5����w�Z���O�X�v������m��y��B�c���������:K��[�?���tv����8�[�9'�
��:o�$�r���tz��t�N�l��
��a��j����oo��6����w�Oo��������@^f��c��}?��}O�*)�ZZ�I��_�-�}��K��#������q���*�)��fX��u5���W�V����4����y�k<Ck5���u5�m}WZg�������������V/��9�Z�&���?���V�p�}�*��9��vCvwn%h�&�J6��>]�~on���=6(f���T���Z����_3�����"�a���y������G�*��-�nn�~����6f�X���+�R��kv�H�;z��.���
�����
����k���Z�jm�U>�����p�]w�n��:���u$R/�&��V#�#��a���o�^�����\~�~����+Z�>�������e�����d�x�������7�G���[����9�&�fwR+n������+|�w������W���-��Qr�O�?��h����������>��}��O���9W{(o��S��V���$�Va���[��F����ZJY�(V,�7���
��������/Zd�����U��@n���1&�����Q�Y������v��Mo����@
���~_���5?������G�V?�9�����m_��#7jj�6E����${��Z��n)6�����Tw��_Z��@�w����u+5#ev��s�hxZE�]�;Q����x����>�
!��n�(fM��r��Ri{/f�G������XE���Q�9n{���m)f��.*���YB�X�e�Q>�{�y�Mr��K�����69^]���s��ZM��}*"��+gon��]~e]��c�Z�,�����A���������q3n��'����M��w$}��Mb�lk� \
��&+�s���]+vm�������u���������K�wp�D�"1�n�h��e��G���o��U-����VUK6?���/��m������������-��Eg��Tjv�n�{��4xc�4y$�o�3d���|Qw���&�&��`d����CL��6[g���n�1�$��a�����7���Yw������1�������m���1���^E�k����Pe���g~sRF�.����,�������L5i[��+\�<��'O)���������[~�:�������x��
�:&���<�]���;o��;�j��3qu$���������$���W�����V14�|���3���
���ic;��H��������t������R3^{��5�V�|��7����5��5�&]���uK�������q�I���EP����>[����V<R?�u�m����LW.�v�\���VY%�����	�����#��s2����7����
B�Y��7��w���|_��w>^�#]����d����,s����N���B ����R�/��M{���O���k)fx�U;�������QREPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP1�TL}���6�&?������������:V�#�@[���C��Q�sR7�aL��j��t_j���}�������#U.���.�t`C{�P����<���X������ls'�J�K��i��_��Z����+����	���[w�
�~���V���o�O�@��W���t�j5`��;p�L��`�*����?�8H����-�|�2�s���Hj_s�pb�SX�te(�XWL���;��8���M��]�����;^[��q����?���M�-������O���\��y�������(n���Tz6Q���h�!I-���N���l�I��E�4Y�=N6h�{~u�:_��,��m��
�]���[-B���T�9��=(�m�ZF��Y&*8���]����e~�Z����3K�\�-��]�z�k����
CD�b� icn������Pe)����y[��.��
/�[E������� ���6H��]���;�2dM��-����[����6��>ZL���;��CDV��iO�M����j��K�o���$,w|�{��m��/�����F�7�M�Rm������#l�M��������S(VDe�*�Q����^�������^�A�D��?��?��u��N�Y-n���]��6�*������p�B�������j�����_�*�3%���������o/�V���}�9�����u9�c�����]��S���]WRc�q-�k�45����>��A��{W��{�f��L~�����k���)u
J12��5�}(���B������Je���,v_�'/�����Z�}�����6���]�����������	���!��������M����T��i�|���y�
`e���D��C�������RZ|��$�A�c������7��'���+��O"/��>�g��}���;�����H�+x��z.X�v�co��}���(���^Gh�s��}�
4��y��/��ttv������Wn�.���Q��~{��2��6��i�,�a�������+���=A���>����R�[�������~�e�r��Z�]E��������}�?fZ�����������y,Y�G0�����o�������������JT��I�)4���������Y��n��g4ln����j+]V	d�O�F�[�G�v4�.I�����mj����I6�l�J���?+�E=X36�������&��TJ�j������k��i��f��f��k ^W��nW�9�HS��P���S�p��Sv�O��h�>�����a�-����{oz`K'��Z�w���BF���F��h�z����jh�W��#��7|�A�����W����Ww�������L����[��/�7v����B���@��)���L_�tP��R�K
���_����#6��[�pi�(������K&W��M���wmF���H����v���r�m���>U��[�>��i�z���he������b��j�*�y�[+��,3&��o<��}*m��b�?���_���f
����+|�6����48^[�T��3H�w����3*���t-���&���@��R�������>�A�4B�6��)l�0�X~o��$!����n(HW{|�-l(���>c�G��P��,��������wL�����������������1�`\J_v���b��k��l��i�*��	��w���4J�}�?�s�����X��7��������csyi��S���h�6�����;S�,�J�8�I��l��a�G��
}��RH��a����X��f��������t8���t��5�����a����A�f��P[��/�/���->�k��{���?���2���'��k�#+)������(��_��V�P�B���4*�U�*xS{g�Z�$U1[�U����<
���SE�cO�r�v>������]j
_�=�������+CV��
��w��4�}p����UJ���|��-
����=���*�r���z������G�d���F=(:6�%i�s���0����]�2qV���2��Dh���M��kcG���a�������u��$�yQ�Z�|���y��\u��M���j������vv6�Yi;�~w����y��
��$�Q6��k�������������-�~�j��%����h���(���Q�E��.bG�'�y#��p�3�=���P�x����p[�e�L�`��o�)� �5-r^2�2��|-�<���G����b�o��I*�2����>!i�w�z�c#tgl��}q��W�K�
��n�^��	��e�������X�G<����|*�f���������B�|��s�����QEQEQEQEQEQEQEQEQEQEQEQEQEQE�����H������/o�L�^���������.�yU�������G6������_���;��O\��@���=j�o?w���{�3.�����P������y��y��V�<M�kQ�n��H0����q�h���/�S��V�����n��$������5��$nV���F����S�G��P\aW4Z�o5����Sm��'���ju������������f�O��(������������M4�!R�2��7�����R�a���N�+:�]�������f�)]?e����5Fhc�w��>F-G�P-�>����UvR��6�[J��5��+}��� ����M����������E�j����_���,����!}�7�=j����fS���.�%�}�G�hHn61��:V���X�fT���S�Y�;���k�4����J�����vz���O�v�]yV�\{�|[�k���*>�U�����/��Ee<����?�k�>o%�?/N����z��"��+Ko����O������K�Zs"7���'G�v��F�&U�����Bw�����z��mj~���r��c�RmG�&�*]��5��~��;w����8_������SW�l�����n�F�������@�N�mGNV�o�i��[��5O�^�����h�l~v�c�!l����MV�J�A%{�+��J����z�����&����o�E��+J9GG]�RG��o&���@-[�w6�,�5�x�*��u+1�,�d��3�h�7�TWR�y2���H���������9�W����u�H�jG�?�kv�U�O�ZDl�"�}My�r�����e���Mw>A
�e������k����W��?�\]���T{�a��3]U�_����z�������U����������]���i�_�I����k���/��z��O�V������|��02oH�,�}�W��n����$�X_�������\o��wx������KU{���� ��m|�}���Y:-�y1�V\�����[t~Z����' +�����kV��^**����7�Z�f�����SZQ���q��?��-Rm���Yv�}��{��Jm��V��x�*j�4�'b7���S@������E�"������L�4�.�=6����.���y���?��.��_�[Uy�,���[(�lC��kj���G?��`/|�UcbQt�?o�\���.5f��5U�(�|�(��)c��*��FKucT&�&��x�������`t��q4�,�,Q������~��5������r ����?���t�/����F���5�:��~�5�����r����_�C.�hW
���H�6=(5�+������z��\n�m�Q������n�v�[-�h?�G�l���H�7�@����h�.���[
Oo����$j��|���d�7�G��-��d��_�-@H�[=���������U�hI(U
�)���w�5�������@��v����_����7}����������o���7c��������Us�D�{���+��0����o�@
o�<�Y����o�v��5��$qV?�;Tl�jX���:D�w��Q��M�#b���j�M��`�-r�%��tt��\?������?N����M�[����~o�8�Xb1m�����=@�7
����T����������i2��������G��<��+��v��}Z��!���D_,�y���_�����_�L-�����j=SP�U��w,q���@u	C*��Y8����?�~��#~�N3�O��4�2������������i�n�n��w�kZ?��l�����F���,����n�n�\_,���N7OsY1�Y�$����^��T����[k���K�6�6��J�����v���y��������j�ZX�h�����;�N�u������N�jK8�F�����oe�zV�|���D��s/
��B�#�Qs��5�%���s]'���k����l@����m�Zj�����o�V%���������lk��4��z�0�1Y��&��o����bj����|�����V�Go�_���B��v�����<T��H��=h]����G
,���g���Y�;z��x��������=(����ij��~[;\�i��V���I4�]��D��U�a}?Ia�/�-����r��f`������#3��*.��y�r���h�h�~�6H_��V����I������k��4���s����t���.,eV��Z�^T����?C����2�w��r{K�[��?:�����}����wi%��w��G(�������]����?x��s\5��[����m��>i;�$�\�W=�����iq,�����h��������J���D�,q2��z��J�s�I<�M"2��������\%��u�?>wp��>�������z���N��Xi���vX���4��������������?R��T6�ii
�C	�OPMfTRX�GRi�:EH�j(�>����:����9i��Q{t�~��p�C1a��G]�*j������^�im���
�}��>����'����B����=���zv���)QEQEQEQEQEQEQEQEQEQEQE^�3-���WB���'�P�W���_
M�Is� x�����Q�=��9=�xjk(�EO"�m��H���S����	�������W4�����Z�>^��	�����v�b���t���u��P����'n�����i��n���������XW�������Zp��h����M��U��NW;�������|��}����f��v�����3�����:�
m����h7a��8��z~�����]��v�=����U��������V�,��������X�O�7�n��o���M�9W�s����n%����'��q@[�����W�������?���v����
j�n���?�N�6��[���M�����T�������5�#����e�3(U�z~X�*���������yw{�C�j�i
Z{wr�(�d@�����oI���#I��'P����]u�����4�����C���!t�n��f���u���^�����RG-��S�
��������z�������pJ��j�}7�w�K����n�7����i� ��V@��;���q��q��p=�A����Ci��a�����o}�?6�n�8���4�IKI&+���9#?�kSK�v����w�Xv��v���{4�����)�z������\���m3XU2�p>n
���b�^mdW^��E���Mo��T�)O����;�n��w�����7ij��?��S������r�^�)V�n�����j������)��h$(�������H�]�6��wj�Z��n\=7��[}��S�����r�~j@V�-`�]��|����"���=�y����n�:��We�����hcfg����g�P/��<�������Y���#��h�p�r����������j�U�r��D!O)�}����}�O��z���n�vl*�����Wiq�������PB�l�2������(k�_�����{'_�Eq�k���s�w~�&���}y&[��Oj���T�t�k�����U�f���u�+4vf�wV���F����b�;�����g��<�����h�����w�E:ZZ�}�J�x�l��'��������TNk��&�u
A�/��
=��S���cc�h�S"����]��3K/���y��ci��������f�w���I
��V�ZV�m����@Ib�1���_��
�TK=b���e��}��K��S����5f�m����0)]>����5��+��i�f�������O����+Kw7��^+��%�V�6/�����Q{}i+\|�og�����v/"p�+Wgy����J��=J�#�����������>�sn��M����:\/{��r�"��
������Co��v���c���z��-l��~_��R`e���������RL�7����;�����ypPG�����iKqL�m�IW?��[E����~�kJ���Jw��������W���S���s
��Yw�;�~\|��M"����Zr�oN1N����n���NV��js0em�+S?�������v�
�o����
6O����Eq�m������?�'��g��6�\�=��6��7��P�V���XS>��4����E&�^)��\P�@��g��F)�{�P�����Ww���qN�:����z�e��j�d��qj,�C��w��C&e�Q���*�N��Pl����������C�4�t������L�"���n_��_O����c������|�*�j]�(�W~2��;�xb	kk�6��K����N��'������J�+���+GR����Z����#;7���ci����P���J�+|��{����e��I�\��;�|�r� ���H�����W-U�M�{V�0��X������6<7de����Q�������:f�,�~V���O�[t_����^����#+�3���{x��K�f:�����&�^�!_�C��>��x��Yi���$��\W3g�2�Dv+�.v��:�v��Z7�{U�T��@��(���}���Z��f���h��.2�y�U�7i�\5�/�B��O�Rj�E4���@�����6��V�
g�W�o��6���=����� �$��" +����YM�7azv��7H���\}+IW��v�o�����*��w���&�4q-�������{���d���}����N�������&�~���}kS�Vd�����������;|��v�:��K�5��M��O���K��Z�_���4GZ��^��w40���:�~\��U,�(����rF+�e;an����\�{�}��q�U-��2��������~��1e�G��stf?�@��i�lqL��O�����z�-�Vr�lw|e}=���p^�`���0f����a�y��FfT����]]��K?�	&����T�k;=g�z�����;X�����|@��[Efd���q�����Y�o���������7p����4g�#d~�=|��_]X�}�O���N2�o�<�4��rEl�U���_�H��r��*l����D���g�������0���m�(���~��Z�lV�j���q���W�J���<�g�w3����{�-A"���_�z������?�o1�t���k�� ��O+2��Ct�Q^��������.�������4���EV7����{|��go��g��i>!jV�+Oe@O#�y����R��<;�}?]-�4w*7_�=G���(��(��(��(��(��(��(��(��(��(������=E�b��H�0���O��v�����A����]������a�
�i��5="�Q_���~�'?��7X����g���>������@3�V��K�u_����$J��J����������>6����-:�,����rv��=k��[�{U����Ml�Y�%'��\��9�T��^�n���]E���yy=G�y�E�Wv��.6�������,y�E��h�i�
[��HU�e����J_(C����&��|�v�8?�>e���N� ��[�������H>��y�Y���c���G_L�s�U��dlU�z}+.iv���_�����=@��z�t�UfO���P��������������T����?��:6|����J�T+|�{�?���Q�
���?��G(����9�9��|��
�����f����h6�*�^z���l2��{��N\���H���U7}�����j�/�G���9�i������]���=EC$A��|�{�O']�1j7}��h>H+��C��a�kF����TRD�w���H	��������E��
�>��i> ���w2��e[����:���lk�wa���q�Uv���xwZz���J�m�4O�r��������W�d_9�X��_��^S����-�ft��
�"�-��w��V�d���5{o�|{�j���m�������Im�KY<��;��_<���/�l`��q��jh�*��|�4!A���;S�`=�9^.*M�U��W5��i��j���^��x����K���$Y�=
��E=�HJ7�Q��:�����N�����T���#�o�qK�m%m��h��7Si���N��J������s|��S�4��u5�^i�n�B��>�=���@��z�����f��g��U�I�4���R��h_�h����Kwq�����U���Ej7��w�
A"
�O�����p�h]��CWG�����fD�[�p,�����v�So���N���@Vhj��	��k�_����� �f��w�m��p���Q[��������5���+m�J����k����rwT��x����Y~6���k���T(2A@��w&��6������+T1B������t�Wi<�����5��xTj$�k�Fu��������7�7����g�������,FV��U�?�����.��K8���p��]��dX��Z�u7����T������~��2|Y|-m�������;X��U���������sul��������H�
�u�����M�e��rMCofS�5uP�M�w�����@|7h�y�������;T:���gn��}0��_�S�`6n�1�p��,,-,�����W�x�X��Ti��Z��������Q�����\%��p����������?���~���p����&��TM�$����6Dm�n_�j��N�������X�aWcueeu������:�nZ��}�����4��9/����i�n-��d��'�]��o���t��7mq��V7��Pm���C)����jwh.wQ����`?��R����u�H�wn����n������������55~m�3}��V����u��=��j��9�s-���MV��Jw@���zk}�]������js1��w��
�Zs57o���N�����m�@���iv/�R����R47{
���$�v^>��zI^k���r#~��jk�Y`�����X����c����"������:�Uh�miB���r�f�;t����t���ac
�?*����o�"Y/�����v�:�����P)�W��t�5��+���gM��N�J����������
��%{�����O��@�]�g���Z�R(�/j�
���&�6�Z�
��w/��G��xm���P/������Rd���$m�-bk�F�������*;X���������$Aq'��%pj]���;(��8����9�Z��_H��}*��l\�gZ�Y�e]��~������4��*���%�8��w��Gz�f�[{|������������w�
K�c�4��>W
����'�����/~�Z����v��N�����l�7,q�q�����*���o�H��z���t�^�wR_�%������jCE���i��O
�������^�v���>gv���=�����|/�4��.�>m��+FH��f���J��Z��s����x�@���W��J�n�}4�� n;���k�+�|�>���g����������9�n)�T���r��X�D��+�W`���]�)&���i������~U���q5�J����Q��z���_���2����/�T���;�'��M���O�d���� n���/�T�d-����w���kW��m�~�>_o�7�g�w������#�V�*����P-��K}i��ez��"������/k���GG�Q����Y*�c�.�q��]��l��tY/n����^(�����n�?��k���|�D��G>�9�n�yn���y���I2YY�;�V�I?��|��R��->u��|������T����?��|�b��K;O,Wg�I�W�W�xk��v�b���`��'���#��iI��
���[�4�����TZ}���j�6S��?FC�C\���^���B�o�o�NG���?�9����}BhY��+�x��W=�_D���U]��#�Enx�R��gn��������?T���[s6�g�*�/�M�x���dh�P�[�d���A�{�yG��$��,����Q!?���5��2��(��(��(��(��(��(��(��(��(��(��(��(�e�0�=E-�x���������\y�������^(�Y���$�O��G"k~x��z��_PR1�'�8��>'��0�*���3|�������k�x��Ev���%�`~f8�O��>l3w?���#�����*~r���PF�r��(\������,l=z�4��u1*���'����o������~m���2*������G�@	��n��K�+��*seW����43�U*��w�s�h&_��Y?�5#*/����Q�����~��v�h���n���h����H���nc���F��~j~o�����CQm��+6��e�#M����h�K��SUB����u����H�O�Py������V���I�~�>?����No�����q��P����-@�������f
�o��B��@d�}�o����l��l��e��J�HC���z��~���A&�{+~?�]v���;��'o%������#�x�WUW	�C�ET���Z�k�H����1�H����4�#6������u��n���M��*���-��W�G���r>~�+����=���t�Wlz��N[bz����aK�Z{IVh�����+��-`�m�|�����'wI����?s+M~�q�N����W�������C��������/��]z����,�Y�?�ni�*_�
�dv�F��Eir���::JU��@��N�B�������Sm�qQ������|�|�U�i�(e��
��Q��
K"����I��_����T2E���Z�EA'��-��}�����������@
����_���g�cD��-��z����O��o�x3�n��^p��w�m������v�'�������f��7�i�|�����g�����c���mP�+��Z��~���=0�kR����UE�����$6i�����
���jM���'�j���%��~N������]JX�|��0 e7K�������V�4M�G���������J�f�����My��n�?2�'��,����������,�7N*
>!��^��gi>o���-C���x������K���??�g��������>_��~��Lv'�J��.7n>���W}����=�,+�����J��v����"��p6��=�RjZ�;��6I=+����*�Wzu��=����O�����k#2�jL��P�gn�SY��h�"�uV��H�����q-+����}z
���{[9o.?�������q�uI�%��U���������i������zS&�i:L�
�����h������uH���x����R��.��h��Z��{����v�s�.y5R����/�����v��2�&VZ���_���!�u+�vR�q��#��w�G�UQ�;p�`k+����������Ijal6��M(�P0f-�����*�����j�[��rm��4�����Mo���'�F��_��������3���o��U]���;|�����t�j�T�_��E�k�N�������~6��I��g��=z��0���3�\�W�p������c�������5^�/�\e�������,}���z���7�p�����jHP��=i��$p'�|����Sv��z�&�O�Wm����+t�6��Tq�#�t�[�-�����_���K�J���mD\W;��2��7�[�.���U_�62]����
�T������e����4��}����sqp�����������Q@*����p����t������5v�uu�z���7<7o�G%������ST��$��p��5G��n�.:��XW��T��hH��v�U��q����/���I]�e�?�t^.�������c�m�sv�|�J"�t�������/J�6��W�Sb�n���a2��'��?N���J�:j������������������]��YF������@k���o��?/���+�&�;4���|{z~5�j�R��o�O�����[��{}4���n(�|H��8�W��������V�_�����v����n�n�Mq5���"���e��E�>��.��^2Yi�_+m��J�K3m�����=�_�;>)����������8cX-���{��=����$��������Z�gf]�����6���'�
�wq/�_�����*��������������8B�����$PiZZ�m�����|�#6�?�����������by���Y�4r��va���W	�h���������5�c����V>���.��������sacPz��7��M��U�z�
���?
�??v]�M�������k����j�4�7��KX�5_�G�z�]�.���p����h��c��;*��s�*���3\4���l��#�w\a������b���^�-�_���p�8��j_�X����+���Es1�m��������Z�snGf����Uon��/^3���w���L�/�;�u�I�G�}��_C]����7����>����{�W��4�Z�P�[�9����	�v�t�/��
��K�����n6��T����]��G7��o�������<j:�@���X�qI��x7N���!��_�?��~��:R��QEQEQEQEQEQEQEQEQEQEQEQEQEW����>k{y6��~�}U?���v��ZZ�qp�"�K����?�G/�<Esx[�A�D��A���8�9y����V��p��[�R��H��Q�G��o���<u�Z���]��U����qY���������j���n��[���c\?��v�#��I����G��� �(f�������7c���/��&��Yw��!x��������w��
b��[�����}����MV�������N�W��T�?��5�s|������4n���[�v�t�V_�����:z7�^��r��z��B�����Y������4n��{��?�-��S[���E��7Q�i�|����g�������*���#Ma������pi�'��6�~_��n�@����3I�w���7��"�a�K���+)���#�����S+�=��B�Z�kw^W�SU�|�*�k�|���"Y62�c�T�n��^��DRoM�*�����&��U�o�K�?���W$/��~n�]��>���g�Meo7�����e�vj���k,��������W��z���"����t���w:?��5�L�T��W��C�@���C����U_*n��L�k�TI����eC����(&�~l1�+`����������vh�V�{�Dd�3a�����w7���/�\���}e�Z�z��M��}s]"����3�{n�F�����
7�SVy"��+7��jo�_���pir�8�N��k|�z�o��*�5F��v��Q����[
��51������������{�f
���m�j6���T�i��m��O������G$A�K}�S�SYh��X:�_�i�$���|A�*��jv_�=h�o�@�}�p���|��A}����k)�]��z���i���+Ys���S�h����.>�������X�j5�Os�)��7	u��n:�ZV��j�J������_����@?�{UM>��������R�����n��Q64�M�����I�?��5K�����J���.��tpc������_�1�3�F�i����o���S\��e&�x�l�V|I{���*/�8�����g�P�x����f��o���b��M�-���j{��=�:������H0��B8�D?;�{~UT�r/���,m������}',k2��]���0"���]e�
��Y�����q�����C�L4�-����\/��
k	���7|��G��5t��2�|��zkh[���e��]=�lf2����9Wxn6����8U�JI��d=��c�{W�x~�i:{��_��t{$�5�1WlQu�����Ztn�'J���-���Y� �i��r�m�L
���������V������&�.��Ioi��E����#����eS��������Z]�����fA���5�i~#���K��n^�`z�2�i����cz�G�&�?��H�[�@�P2f��}y��w����K�Wv�}��R����j��v�M���P��S��_���.>jk0_��F�����G�pN����:f���t���J�s�(���lW�k��Z���0�+}��O���R�}B�8����������*'���Zl1���������3��R*��Z��#{yI�&�[�[����m���������4���z�+����[�@4�O:�b������U�i<�o�>���5�X��K���A���+�\�'���5[8v����Q~m���A���Un�w6hE]��n��������������VE�����5�0[�
��%�,+|�8��J����[���K�z�/Z�o��;[q^MT�e���Q7�����wy$���U�b
�Z���[��W�P�/�@�"�����
jZ���h��x<�����Hu��@��K���{V��z�����@������	�����k��M�����U���6������#ac]����j��e��8��m����X�qe��w�G5���;�d�����=�h����������_�I
�o��V����q	��}([�v�|���_����Z���&�q
?
��&�k_)+�\��Oq$!j������^[v[���R�nv�����W�O����+[���N�������m�l�7nKEUv��rMO���jr�^;��v��rM�����v�;�Y�;-=QW�O��������2�U�6��sPj���U�����q�U��4V�l�-�4�>�rNkKMWm��{Q;*�o���RH��0�����la
���5nE������?�SCH�:{��n���6(��Y�e��Z��+b�z�������b�R�*��</�G���I�4�o����{������b_�1���x��X��$u�bN}~�����;���z��C������dkW_���������C��\�k%U�~����_V��2�4�����GVVe�__Jv�+coN������T��W���j��mF���������u�9�{V�7S1���L�I�+��������\��&�����:��h���%�sn~6�����In��I��O����l|�����/�����Mz���ZZ�r5
)0'��*@(��(��(��(��(��(��(��(��(��(��(��(��(��|M�C�h�7�v1���1�(��9�����C�������w��=k��f
���~��M{T�V�'��v3J����Y1�i���~|V�m*�~��"���G��f�����f+��u#����U�w+|�q�=�������J�_�*���������r:�ji�������Uf`�����5����{��������A��5�}���9s��~�������m�=����������o�C&��������Q6����m?�����H�w��?L�~����wt�r�����7�y}sB���?����o����u}�`�lQ�o���n�����_zo��z���S[��������in
�[�m��h���sII�F�6�5/���^����o��;`����n��P�S�������&���}�U���@
o_��_����?�J�w���B��b�%WM�_�}q������c��*%��+t�����wq�����P���j)�7�_�Z�����}����5�^W�Z���j�d���7~��W��k�=�s+4c�����K�u���wM�{������z�%���=;��j� ]�����X��L[�_N=)�n��h���vh�s{q^E���l��v��6�7�u�o���$��m�q��Z{����k�UMMvJ0	n�<p~���A7�md�����=
x��Gl]��;~���U�]KU��_�N���$F���hC=��%�TK���}jUp����������V+���{7F������k�"�@���������sP/��������:�4w����5�o���p���ynh�������U���P�(U����[��sa�6R�&��M�YwSjV���{S�Q�������}��2���[�U&��Y�,����u���^\���7o�_��3����`��?Ctbx>����,t������!uV	�T���)�p~X�fV�e�@�4-��dX���������i~B6�_�����ip�w��t7F������j��[����d����o5����\,j�t�U�b�����-�����D���^�5�}�R��5�Fn��T�������B���+v��O�$�\���%��+2�<��%����.���z�o]�����f�y�w�k���{x�>��{T�m�����a���]&�Y�_��s]���aed=h�,)5�V?�Kt�e�_��$�D���Z:L)�uF�y��i6�{�I:���"�GSD@��mSJ���g^��]Zb�,u=kWT���{ei��f����}(
j�i�:�m�n���p�m��������+c��n�n���=����mJ,aW�@����$�����f�����q{��
����;@�)_��������J�������<�k�]����1�+����Y�����8�6�4�&8�n��d�b��c,�~��	������b?�=������^����/���;g�]'���GC\6����Wp���3@������j|l[k|��[��t��"���u~���7�_����_��w�o,�v��4�aW,����R����{�����������.�>�o�y�t6G��e��-Q�f��?�Q�������d�����?���2���q���{U�W��	�]��_�m>�|��Y�$�-���tvq%���N�����f�����V�n�67���i�\<��]��f=�o�i�;�x�����0����^yQ7���SP[���jt,�}{��*R����q���=?���v�?�Z:=���Q����wE������{����.�Y+n�O�[��*�}���{8~�u�����������_���\f�uq$��m��|Yve�l�o�>�:�����D@�n�#�Mo�&[��Q�*�+���u�:}����%V�9o�+\�H�X �W��4X��O��U���X���3���!���\*z������8[�E�~+F6M?M��_����OJ�w������4��|���h�m_���v/�U4y�@
��>���v���ms7S�ua�����8���WA�M0�o��
d��fi���Jm���d��~dS���T��eO���W����p���c�2�Ip�~F��j�����_��*T������^���o���]�f����T_�{s���hU~n�&���,���&�7�8�@��X��H�H���!\��#I��f~F��=j���Y��*��C�-�,��y��(j��kg�/�������ma)�r����jI&�m��,�Sw����YT��F����Q�o���H�Wh�aS�+���z~����$�����C����<E2Mt�����x�6~^����m�$��X|�|��y��
��P�pz��n����$\��nx����8�{2�?��X���(�6��'�@c��:l�m��`�R��dT^�(�@��2�#���=w��N�-��}�r���j��}1�5���wE$c����V��.�V�f�������������i����O5=�BU,�\�k433<�*�_���]�_7����'�,|��.�x���i��W{Y~���l�����?���*(��(��(��(��(��(��(��(��(��(��(��(��(��+���^+��t�G���s�����+��'��xs��4,�m��p����|�u)y7�31l�����j�� f+'���
6mlm�o_r?���B��?L}s�O�;p��u�8�c�&�
WbU+�t���V5����w���*����F��=9$��b]K��m�w�4��o���������>��
�����9X|��qB���;���3S~�?���3~c�z6������������G��dm43e���M�[������e
�j�^��5����Y��w�J��w-���������hc��[�jM���z��R���O���4��1�n�h=�7�������������7����@���~�q����4�M�w������/��~����E]���'��o���Z������1@0��m�?�j6��>��vW�������m�~o�qPj��_���������w������P�_7���U?��i�����������P���M�c`��U`�m��i~�e��(N�����3�/��n��zu�w�S�Ks���t�B�
�����������5~���?ZO~��������?��4H�:���
������/��t��>��U�-�{��f��Mh�Um�@,u;�_&fdNB�"���vws@��������k�����F��JD��2�j�v���U�����"���������GLe����q����n�w����F�^�+��|g�i|���^�O���Eu����'�Ct�u����/?���+{�k�gVYA��'U��gu����_6=�h����S�YJ}��i�����|]o6��[c�?ON������&Un����~��V#��Q���}w����_�����E�J����z����H/�5]�v��Ro����/��@
U�~jwqF����z��Z~�H�@����������@V+�ho.e��Cz�@-���^>��<z��M��o,�����;��u���U����9�����@�����*�^���5�c�������}�n�7n���j�|���F�s�����p{P����k������O�R�[�c�S-ob�O[}�g����{��3����=���V�s��|I�}�Pc������x�PKK�"m����W
gnn�i[���@zL>l�D����=
u,���~Nk�"���U;��!����-�����D����)_���[�����}������M%�����O��Y�.���S6���yk��_]-=m����������F��o�B�5�kW�P��oB����@
��74��O��/�*+DQ�m�j�)���m:��V�[_��y���p�5���_~N�����i�j��+�P
b���W�������%��,q���M��e��1nv�/]K��[�~_��@�.Z���Yc�w�r1�-�,�����]�zax�����d�j|�/�����X���)�F_�k��n�5���wJ���T���:�U������w�����m��.>e��m���4��[(TK:�����A2�h����56��������lw��nfV��UQ9��d���{���w^��z��d��U�y�G���E_���},����O�Tv������7��>��t��YU�B��N��������z<&��v��F�����*��p7l�����6��������q���\���3nef-�~���qo�{��$��&�5+���M��"���y5��\f��I������X��o�����	���T��V��m�������V~l�����|��t�lI�����i��5���}��{}���z��\�btPM������K��3I�s���_������X�(��U�������P\y�������B4������sa~j�4;��k���u��|�'���U���/�F��.�4�-���k���	�m��m�(������^F�x���7���x��jiZL���+���/�.������v�Mg���T��T��b�1v�5���~_��j�*��E�5r����E��y��Dt���R��I��~���uI]��Eo���u����tu��<�f�b�4C��n���~\����$i_����j������/��{�Y��Y���{~f��Q������������F��v������.��^��7���Q���m����o�y0���,���U-Jc<���
��lz��U/]�a����i>��Oz��s
�+��9o����}��K������
��F�������6�5#(������v��hUM����[��7W�|���o�=I����4O���}MvcL�c�6�~���	��p�j�P�h��d�m��
s!fb[�=+3�SKU���i8�ytu-bi�������1���-bF�*����z���9��2���On���K�]��G���?�Aoo$�#u�M&��W\�-���<��7�Z�:�4}k��f��r���r��I}u��6��Fs[�0�~�m�U�c(M��U��� ,���?�0���k3}��.a������5�3�����O�������i�a����8�uQEHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@G4�/,��4R�O`:����<Llt����m���!���9������~&o�������$+��'����]��zw�?Zt�[w�H�~m��y��b�2�Vu���s���V����m�W{|���j������]����#��V���M��O���Y�T��|��[���7���q���.���?��
��7�@
��w��n=?O�
���h��a�w���kh����z5
��-�Ks@�����r��?������������/���v���~_�m�>��b�}��)�K.�
#)������6�������[����io����\�[������l������Tm�/�F�����o��_��hV���~]h�������^���LP����n����_n��C|�K}��������
�����������\����=��o�}�
��{mF��������/���SY���}�������D��E�;w��V��>�?������[�}�6�W��������J�o����s�)��.�����a~�����������)��EWi���������:R/����K������Ug���u^��S+���
~���~V�����������6z�}~����m�?��F��7���4�>m�z�*=�w�N����6O���������o����
��/��l���o���)IN~�7h������5Y�l�_��%��[�*o2�V\6J�o������i;��\�n����j��{����>�[�k����T+��:���{V�����������.������^���g��{�r+������H��_����8������_�`��w[��6_�o��ow���_���
/R���d�D1\
��6q�0�+F���4��5
��o���$iUw�{��2�3M��r���������n�[�q���=�M�*���o��U�d��G���L�o���=��Q�U�3�����n��9^�%�����*�7�z���������v��~Zr��4��@6��S�-M�R}��2�z��&����v��o+���yw��w
�Q"�+@��Xv�M������Sad��]����_��C�U��7����J�&Uu�W\K��ioU�$ny�T����*����oZ��$H�������#����%��?����c��Q��4,���W$�,��'����^��J�k7�v�u���'U��k�6��MB_����#�(NLZ��.�(��d�����ww5>�w����Kk���[����d���ZZ��/������s�-�}���[?�A�����jz�;�.�?A��U�Z������q��*�
m����5+��/n�b�|�U�_3M�������	�����X�	��S�W�O~�vDKK�O����S5������-qj�]��h���*���=I�o�#���o���!�[D���-Y���irJq����v������Z�mK�����m��o���[���<;/�����d����'���]L�Q�ZZ��,{�:
�E��e���������9�v�����`2h^,J�����m���%K>(�_��t��K����{7�9?��b�5	�������N��~vo�5���`����a��{�p����z�X����(X�Z�����{����ST�Go.8�o��[�L�V1�������R�.��6����[t�O��H�'����\<��*#rz��������h�rK#s����`�\=�����������Z6��T/j�g��o�J�5us�o�W��g�B��.[j'S��cR�w�;�J�����q���N�����#M��o�+�U�t������v_�_�z~J�6M��Q���_M����_��.����T��O�=j���>�y&��(�A�;�4[�����l��V�����Q�^�F�R�~�a��zP�&��W����C�}��Z�F��?s���g�4|�~��9��\�����}���qq���j��E��q�7�����kI0�t���k����s4�_�/�w�j"�1|����WW��]~]�bn�����F��/Z�48���K�]����5������c�����g��Mz�tkl�*�0��}q�I��lt�i��O�������'�Ak��4��Z��e��p�����}����n$i�wl��Wj���{T�s�U��U]�/�I
���������O��o�+>�N�J��7h-lZ���k��	����o��f����"��Z��\��wn*�-�d���4��+����u?{�8�f��8�J�SI;����]�v.�P�C���[��
l([������?*��X��G�����{A,�s/������\}���n�6��J�t���`��g^���.����hW�f��W�����Mtu-b[��UlOL�"���!dF�3����V����v�������j�wnV������]����fT���cig$����1�x��G��G�����O�1��=sX~����2���i�����K�fh�o�%b\+�](�����E]��!�]�Y�����b-��/��
���q����N #�������=��l��V�_�� �8�H� �����l�MFE���#����5��`QE 
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��)j��f�=���.O��|���j�Z�.o������G`>�����)��i'�q�������7�������U�"��(��N:�B�_��Ia����#��o��7��7?L��T�=���a�����-J��a�M��N��{�e���R�1�"��l����p����'��������cw\J@1�7�����k}���R�{�?��������A!�������TS��;i��x�@������F������O�C|��h������r(��}O�Z������PP����O��S���Zo�G�g��_���o_��	s�����,�=i�������n�7PP2��O���S�������!����e����l�j=�y�����T�u���~��_����)W-������w�O��+7v�����p�������e�&{�~�~�p����T�~������?0��Q�w�_���M��������(���>�7���m���s�����cw�@
���o4p�������y�����Q�v���4���v���:���C}���*n��{���z�YN���������j��6��5��)n��PY~o��v���R/���Jo��@(U*�����66?(�.1R.YU����o���7�v��n�����C�=�����he�W������>�����l�x����~U�?�����=6��U�%=h�����w�V��SPy�
�������2�������F�{���MT0��+�S���D�J�5��f�E�n�9�z�-�5�&���2�O��i��?���I�K���T��$��d���t��}��V,���k�����/_�������n���~�s�i�"F���{$��7�[�U��j���^G����[ca�e����j�������o�o��Up;V�	������_��$U����??������]��7�m+�uU�=i�BO�+�{S7U��B��r�?�T�vn����9je�U&�n���F��K�I��*�r��5:�z��A�-D�W���;���X��
D�����j��T�F�k0V������H��e����R��_����%�����r>��,���6Do%X������j�/����m�.��G���j����.��B�{���P��V����[���-��}���R�W�o�o�����{�u�������3��)�]�{{WG�������������|�!a�S���V���������H�����v�\��
��i����Tt��YM��VQ}�/����K�K�1�D���}h��1�F-���aQik-����1}t��b��U����e�����P3�M&��1��6s���WM�����{w1^K~U��������' {��������A�k�J$"�6�������>g~[����Mn�!i[�F�&��~ZMBe������e���+U���n:
�e�]�F�o��j�[����V�aic%���I4���(c�M�B��AXv)���������{��-�����
���j�o���<�������J�6�������}��'��� '����������G���������o����kN����v�*���\���sy*��W����8����]�3����\��vu
Q��d
��t��K�if������c���4�r��]����p%����m��	o_j������_�v���4C�X���`WX��~�c�sY^��dk�^����W{�lm������]��}��\�M7O�ei��n��6-�����y�U�j�CP���~h�v'�@����W����V�*����lZ��6��5�-lhv���]�h��u�ZO�����M3I��-_�@���6o-~���4�D�����"s�TR1����Zv�7�~����'�����_����1�?
�n�n{���b.�7�Z��5S����O�_�6����������?��@�lB�M��s��k�R�3�n+c^�IdkDo�j+��a������4fI����+}��{��L����v�>���+���,I��.�QU-�|�D@�5�qNl�����*��s��>�����������;�A]>�t�/�������Y���}�R���E/����@�&�Q{u?��]jgV��V�V�i�H��V�����+	\�#H�~N�*(Kt��^���:�������t���P��/��t~�E�w7�O�`Y�n$�%]���]V��c�������������g��7p?�@�X��_�s��G&Y�5�����5��c���yn�PM��]��m��H������1yQ���
��"U
��h���[]��������G�����}��G��5��V�5��o�0|�_���4�kk����!e����X�\���m��6���W|Eu����~A��j=6"��V_�?7������_��o�Ut�'�o����1�O��c�S&`�HW�v���o�l���y���� <�f�:�xR���v��Q�8-T�QEQEQEQEQEQEQEQEQEQEQEQEV���|;��{!_3�D��s��k���~):������F(����8�8]R�[��nn�s�.Y�������}���#�������o����v�?J�C�G�Y[oO|���}1���C9�:
�3�G���nA_������5���?�`���8�+�������������;��&�'�$g�(�?
5���������?�"Cw�+����/N��9q����������7�?��
����|���sLU������N_F�����d�����Fh���NT�������������=�=X*�����F��n�q���(������o������y4n�|���z

�x��{���P�{(�����s�y�?�+6�����U�����?�����w/_�y��Tzp?I�6��s��h(�*��h��DP�����#0]��wg��L�|�{��A"�
����<�������~����?��������CAA�k}����4��d����/�n�~T�~_��J]��J/������x��UW���O��5���@���U,����}q�(�
���g�{����#v��$�x�B�U���PUw}��?7mfv^ S�_�-�g��5�fc��uX
��g������t���F�z������v�=����������2E5~V��$~����j�������{�~m���\�����;2�(�W��Nl�����s�h���QB��}�1���^���������^���>�����*��U�o��r�{��b�o�{��>]���*�dm�v� ����[���o�P�Y�Pj���U�=*��z�$�Q�������v����c��F�b��2|��6����	����W�O������ZNW�c+ +��_������MH�H��0���B�������V]���T:�O�j=q��9�v{���O�'�����(f���T�����tQ@��J���j��.+B�������ckt����X��p�{��J���.����G0����~V��]*���;��+���xZO��vHo��[;��D2l=J7O��\
����c���M@�Q��_�>�U���S�������lk�]����^�0;p�R�*�j��$�o���W��V��r�2�����M�Q[w4��b&f����������n�P�Q������I�5YX��Z�Q�m-��}�n����U����m�Q����q������_���3$�XdW�M��K�7�L�6����?��[�+Q�2�j!
��>`&��c��w�UY���/�oA��S�+�����C����!tf�OQ��U���9�V���k���V�e���w��\$��o�e������K����4*5�E�c�T4;}�����Z���S��m��������7qY�����i��I?�@���.!�����6�N��ksP�Z��y�
���s�����$����f���c����+n�]��_��x���7	�=�
���m�O/�+������FF7w�7�we�����zm����3��c��^�
G�v�U�T�RXT*��AZ:<[��~_��dUC4�����_������������`P�%��?�U�vC�\���^���fQ��5S���!��.���Q��=��$�{���mY�T3sT4�W���T���z�U�/���Q!U&����	�����i�������������P2��
>�`M����Ni|��/ss������&yVg�?�fi:V������%O�@kI��kg�����?�s�p�\z:}���P�Y�e@A�V��[Wi��#b��x���]�Me���$*��������
�����(���=���w�M�~�����7M�5��zV3��?���.��	fi_�'?�\��u��A�|�G���r�i�Z��4������Q����c��D@�j�W=���:-65�J�5���=(�?�n����@��}+�����7����:r�Oz��mM��c�X��o��Z����cO�j��q-�������V��%f�+��+���;O�o����<Ezn�
��C�@�C������W�
�-V�v�[��r����@�K7��ZZ=���#O���}����c����WW����Kig������kW��/D�����e
�F���G})y���h,�����d���W���2<Au��-�M��5N���t���Gy$�_�I['�Z��?�/��_��R�����NM�����Qg�o��>e-��@/�mQMBe���?�P����
#��ulkN����������z�$M��v����� �'���6�+c�8�{u7R\����7s������X[��o��29�H�������|.��w�����5I�7�Tv��������E�,���Vm�]|��u{���wr<Z.���������E��]�7�����~��A�-K��h���H
P���Yn����
��"�������Z:�7��N�~j��������2��-J4���r;(�*��cHbH�]��@�W)�0��=����8O�P��������)QEQEQEQEQEQEQEQEQEQEQEQEAwq���
���1�q�N����&/n�T��?��e�}�g���z�ox�]{^���s+���1�\�.����[����1��{lm���zI��P�6���q���`���]������_�P�x�w��!_��<��?�5`Q�HY��c�����}����}x>��Oq+�#/��U�n�>��\P[�����S����7����1�n]�
�:X��t����P�_���sCaw"�l��"�T�(U���������+����}?J�i������K'�~?�������~4��Y���?�7�s�G�c��/�����{.O��o?0o��*]�7��~�������?v���1�G�e����:]�/����6_���Rs��+6��~���x�_��~n���f���NWh�����PH�U�������H�o��~�7��n�����~n�{�(�yX��N>��V�q�#����Rp�v����F���>�h?�_�M��<n����2������n;[�������#�F�=����_w������J�~m�{��N'�����~���=�/+����i7���d{�`~t����s���m���������B�����P�7/�����~����^�=�:����7n��Tk�����sNe-'��z�����5��st\���*�o���
�����������#��`��7-��5��_����G����sc�W�)��U���nO�*>���/�?�T��y���S���������������������BA��P�����?��9���������Rcw����}�@���|��(�z|���]T2��G������'����j��j�v�������?���a���?�������%Gp��o�������\���R}��o�-C~z��N������~\�u��+�����+��`�w{�������aN��ln=�w�M_�b���Vd�o��ps���-�}����q����	�U�R+~�C�z:��,k�B�n��VS�����>hm��O�5�3l�S���Y��I7|���e�m�a�f�#���F�������m��@m��2#+6����9�Z�z����<��n��x���Y��Im�dtl)_�mh~.wX��#��<����Pe�WS��u`���=�(�����Z�m��N�(�>�G�Z��O��U��"�*:�����
*�m��
�n��UsS���H���{UV��M-��?������Z�y0\.VM��������5\���f��Q��Oy�\��S��W#�OCY��<������������M���N\��M�~Z@�����F��c��g��	��Zz���\�;��e��u9[�QF����.E@8����M��V�'��/�P�
:��c�.Z��i��4.����w�U�����+����6��P�n�wf�2�����R�O������,b��p6�F������ZKC�|��V���n<�vhe<�{�wz��(V��/��U�����6���ce�NG������k]���������_��}�����U4�}����=O���X�M�?N��kn6���7���b5����+B5D��v���&�[�o,�r?�Z����6P�������n"�mB��yz������]��VM���5gC�x�r�������7WJ����v���3����/��W==��\?�;z���Z~&�
�g�N[o�j���%��u�<��~��������B�7|����B���$���{����(�4��ay>��4yf��W���V���kk��_��Px~�ls^��Y��;
��.��I����ko��c_����e��m��������ZC%��&�����P�w����C�%�����}�R4�r�1m_�V#�lv�4
�o�Z�
�y�_�(�_��T<��cO�'�����������\�����M�7�q7����O�y<��[����Iz-c��&��O�W�F{�h3R��u��7�
��������~��-�������g5qT���/�9���*�4��
�b=~��h�i���}��������(v��iZJ���I2H���aL�Y����hkW�i��f��U$�4�K��F�}��.����l�q�&�hb-'��?�z��_}��W_��>��E��\���2��/�RC��(�<��W�����i�6�j��m���?�[����'e�Z����n������L����W�c����-Y����n���*G��MBT�����3���q\��_��w���tj��]v��F�/�T3�����%t�
���_��J�������W�k���KK8����y���pn.����j��!��V��y�dsSG��������\<�Gg�ryr���V�wI=����J��#|��
]�(��~���H������!��W����]�6�����.��^�����J��X�tu5����j�j���!]�/�������EX!���~+�����<��n�-�]����~�y"+7����MIb�M��s��z�@Gt�c�������t��5h,�v���G���/%M���O��^����Y��������q��O��Z�cE�5DP���t%T�QEQEQEQEQEQEQEQEQEQEQEQEW�|q�W�n�%���������k�|U�C�h�7���A��=|��js����33<�9'���q@gL��?�?��}i�������~�s���Y~U����j�c���P/�V�IF�+�yR�7O����[�����S`B?���Y�����+|���OaXWY��?��@
l�1����j��r�w�������������Xq�4�j�n_�5$xV��������������B�n���4
��w���4������}sNV��v\��g��[-�����h���7^�_��F���wn.1����v�����N������_�xem��?��&�����?���7n!�)�������@cw������k���?�=�#J���|�3}���p)W����y����{w��J�{�p?��W��������\���?�4��Z�E=[�����v�{{���I�������o���{���#|����O�������h�U������ev�?1��
��
��DU������[q�^;w�m;s�Me�Y����xm�}���3�B������F��}�������d����s����=��������6������P������P�]�W��b�����1C.�a������
���v�>n?�(l�7���m�z7�Z���_�i���t��AM���}���4��.?����p���T�f�Ts��SdS����[�������t�?�Q�-����}�Q���n��]?��@����y��sPH����H�W���m�PUG��(f������9�L�z�H�������P���Z������j��z���j�cw���n��}�O�p�J-\����)��~��J��%�?���]_����o�����w������
�4���V;����s���I�����<�����i���v��?�[����+���*���B���k%e��Z��s;v��J����n����j���-���)����v��}��T�%������?w���R&y^��V���V��b��Y�6������Z��u��y��ex����k���PSlw��B�r������m���v������Uq������Y"�]z��{U�{��v�nf��"�����yl�].�����{���������=^�^(���7!�E������k�u������V�����B���]B���oN�[����)��U���!��nq�~uR;����|�z����Y������O���Z��ez�]U�*��W���0Yw���h�z����*[UY-�����{UE�����U�
��+a�m;w�O������C��i�9r���9[o��9��
����@#`���}M9Z�+��]���m�F�v����VV;�wOJz���j@�~Z�qo��U��u9^�$e
�����M���q�����h�6����o\����U$H��6��������i�cf��{���{Y7���_������$L����>kyQ��2zwZ��9���`���W�V�3��U����1��m�v#ic-����'5���:�l�k���d�	�_]����ed	�+��@5���g��SB�i�l�2�������/6�{}���<]�$�o~�8;�����&��������Ml����v�_�T���*����*�!���m�X���n��~���}��+4���w?���T!T�;���O�Z��b�k��������^�%K{5����k���7W'����3o���MJ}�7������k�W�E��@~2�H�;:��N��t�G��{w��,���;������J��|����@+������U�5����h�fb�j��<�bO�'�������mC���|���&���[X��[�2�
�_��5FK]5t����e���mK\yi��vs�L	���$�2��B�O���aw����_�,����]d��-�v/����V��F�A����	�VN��H�Y�n�z�*�_�V#�j��c��@���_4�6��z���O�����������m<�����q����N��L�ck*�-@&��Q[�v���A/�~��n�f��'����S��o�21\������5�}��'���	,�EU�G���������{T�U�'�@��l���Z�-����y����������{�S���t����?��:����E��/��F��!n���Tw��-��?�;P�i�[�lyQ�zP>�7�u/-����h�D([��g�cF���X��U��zP�W��kaW���7w�V��W���%�
���+�:���o�P^L�
#wj��%Hc��/���c*I+*n�9����N���rO�
��g2�_�/8��W<E1�����v���)<�����8��S��|�^*��]��SN�S�B����_�f_��c��)�+B��YC����o�P����c�tX����!}k7�6"k��I�V-��������
L�]0�����?� gn%�Y�c9�2~�>�2Ch���R���[��U
k����q�����y������-��=��$+�h����aUTP�0W�xSY�����l�5��g���S�f��G����Aqc*��B;�M(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��&�s�xY^�O*{��;�U$���8��������e�F�;p:;�'��+�<��.���K��f�.���f�&��5��~�e��p=*�_�KC���=�{��k��*����Nx�Z�o���B;����[���7��x�?�X�wem�t������#�����>��I�|�-C'�&��O�@���T�`�CmQ���Q��.�Zr�]�~o����@��d�����������o��m���o���q�#u)����.~�#�Z!����p��������L�H��*�����u�����M_���n;-wif����v��6r���V5���{~n�/���N���������;~�����tA��x�[�oR���f���������NU���[���J������6~g_�PP��['��s�����^���S��}��X=���?w�Z6�o�{��i{������.�������M���y���h�y����H����}ZVo������q�-�F=�~t���b�ZEb������Ccv_�z~���4�z��:	iV�����6l����C�wT����x�����+��>�y&�����?w��6���g������d���I�qM��{�?�9��a�=���Mo������Zj����h�<���7O�M����a�#�����`����*����e?/����{�|����
�]���������l��"�?
��m�K}�3����_�9?Ojo���~l�R2��v�������W���\�r7vol{���R6|��w0R?\�Qn,�^���;s�l��G��9���r�����k7j�f��=jV`���T�zl���������t��w-R�5�i�%5���u�An��Ywb���Z�?�h����^��e���V\>Mc3�����&�=��n��� ��^�=	~���V�����������L��Vc��|�*����'��������"�������U�ep�w��B��o�������$��N��0/���+���f]����%o�{�3��KY�G����� {3������_�Z��z���5�q!_���v����B�P�z�Ewn�h�W����j�o�����R`����[���O��q�����n`:��m��+m����Ybe0��G ���/��,w��z^��r���������mo�h*e
�K�����M���/�;�U~�i�jE#��W�����M���mtZO���E��;������%Ks�4�xTK#'����V��?R\����r����n����2+�w��\�q��FF,���@?��K�������=���<G�^G�Z�,�[c��CY6>#���h���6�v9�o}�����T����o����KsE4��6��L����d�����A^G�RY�6&]����Un��7+��s�����M���U�2e��YER���r�^�/�o�P�Y[mVYv�W����_��2m������w�LV
O���Mo��L��p�TZ�s�k�>�r���u����z��J���|����n�
�5�n~�X��Y�-����X�E��������.�{|��?\���������;o}�'BW��sJ�XWxaT��	���s�Zz�~}�z�V;Ks{�����/�li�v��1I��Q���B� .�	�����F����R�Cv��U[C��VrO/��[?�����u3o�6?�] 
������a����e#�����p�L�|��Oo��p�����_��$��Mii�5?�j�6�����F����S���o��u &�TNY�w���Yo%�G���XQ�n/#�;�?O��t���K8�����?Z`d��o,s;6�]�/�y�*�����\��|�L��U(P\\,_�z�*j	�;v����y����R\��M3d�����+_h�G�5SO�j��G����P����:�V�4���������|����mci�����8]��2����q6����b�*/�dl���W�h�dt���&Y$����������������/��18_�
a��Qq��u�z��P�7z��?���T��H�^��J�o��O������
����*����3��4�O�]4�w$|�sZ�����F����4�5c_������9&w�z|��	��y����?���e�R��S�~�>��5��L-,�/�+�G��*��������� -�������p�[O�(�U^x'����o��������������s��sX�M���F��(����*D�o�h6g2�$����i�N�ZkK+|����M�Gy�e���ekWm���V��<��n@��P2����J���G�[��`����������Hh���N�IKm>�wOp���+�E�#,����>Z��I�}V�z�J��aLz������'��pk���3M�K�9���J��]=���$��;��8�(|���F��o����F�4�V/3cM���-n�[�����V+���jwm�D������o�����F���(��{p�X������r�F��Y��� �x��;XwZ���G|�FG�w*Gz��n�n��=�����={@�m�dd��O�u��Q[5��(v�H���>u�pT����s�����
�]����S��������(��(��(��(��(��(��(��(��(��(��(�-���/��iUwyW���U�z�p?�����wf	b�c��?�j���J�g����^G��3|��Yuz'�"���e�:��?�y�/���]���mYJ����zWE���u������u����8�1�m6���yXZt�e@���~�U	�lo����
7U��o�I�;�WEc�Yj
��|�v�E���D��}�����|������2E����v{�6x�Y��v��n�5X��wo�����vne��{���l��-�8��PH�v��KSwv����z�W����Q�������{��K�v���s������������b����x�F�$������M��6��}h�v���=�?��+�S��T9T|��\�z�4�����/�����T^�����������
��7��M����OZ������������~43������~���'=������v�?L�v��_���h(6���/|}3I�.�����K#m�z���#��4G�H�v����5r�����g?�����v����8e��^;p)w�����h?�g�@�s���~[����_�h_�l���,���7�������/������4�}��N}9��n;r�x��x������I� ��v�zc%��jf���7��s��T��������xf��������������?�5|����
tm�o�l
��5�U�W�?O��@\/����_��-{pf���
n����O�4�����P�#e�.�F�}�Zk)����9�����=
.��g��{S�Y��7"����Q��~�T��xm���D��#iJ���{�#7��}�$m���?�
�59��u����v��=y���j�p�7��i��g�������t������z����2����}�*@c-5��Z��'�n|a�����q�M�"Y��@rw���[a���Z����<=w�����X���#r2������w���Y���#�2C��T��oL0��4����|
��W/���o���E��2���~���?A����[p���#�Vc]�|�6*����T�����2K��z�U�T��j��-X
��}��R/��?��T��~�
��_jk7���"��������|���HJ�+
��m(Y������WI���+�R����EO�R&{:z���_��#W]�wB�?w��Wc�y��I�=����N�.�����z�����v�j�������5"�m�nl��U�����S�����A�$V����^�Zl�?�>��G����heu��
@�����{����E]�w��g,�e_�],h�'��{PO1*����fG���ZV�&��H��~v9e��:{�kXG�,��(���j����.��u����I���ggc��|�d2����u������Q���b0�u"��l���Y�_Uo�G�������_/����s���l+'���i~(�4����!\�o��i����.lS����2�u+K�S���*�x\*�[�V����}��UF|�Lf�G��i�%�KIwg��T[��\.���z�t�jV���D��]���V��%UIJ����k�nk�}����J�i]����MxZI"o�nF�����h�����u�E�V��L���2��)_�����M�B6��H���{P���F��S��Z�_�P2M��������5F�����hc�Jb������n�m�����Z#������)��5�����j���D��!�e������w�Z�$(�]6�w:��g�)��@�2�����Wt�����2�������Y�����Z��b7��2�W�QR3G���p�#7�]���*���"�K��y�fm�y��o�KF�y��F�����9���@4�����bL"���.s�*�����p;��}���G����Np?�������^\u+�o�UMJ��#>���WT�"����>�2�P���>K�~\&q�s��H���w������/|����!�?�G��f���e+�E 4�M��U�x���a�4����z�H�{���?��w��P���%m�n���Mgxn�$m{/O����vf���-f����c��a�T� ��C�t�f��{f����c��_��5�]\=����������[v�����YU���DjWh����'��$T��[>�7�he��q��=�
8�y�?���@���v��L��-���$�P^�/�p��pTqofv��j��������;V�����~��_Z$]���P��������n����56��W�������f��j��|����h���7������6>u�~Dl��t:,#O�i����_z��s,���jk}�"�8��Ws�(.����������'�?:���+�o�������IE���+�[�����(\���q�?����s�wz�k�[�����qO�!����5�#�l��b\���p�L������O��$�������+��Y��?x.����$������}'9��{
�%��|��e�m��y����+����l��o��~�����t�/�n���Td��k�5+���Kq*�]��p*J8�Q�e�|�3��n>������i�LB���r}~��qnW�+#US��D�]kA���~%2�[R>�{���m�i]���@��������k����/����6������o�F&���w`Z�k;�i1nS���H��x��m�i`,�Y�C��~��F�,k$l��2�{��X�&_��3Zz��t��{l�{�Bz����@�ER�5mR�.l�Ya=������@Q@Q@Q@Q@Q@Q@Q@Q@Q@`�����
����/i.�RG�+z���<m��S��@
k�_E���
��D�y�lt�a�4�*mGO��<�7{���&��b jn��)�KqNU���H�Z6��~\SU{����^XH�)�vj�,��-Kj_G����g�q�;m�w3h���FY��AV����$�~\q�V>��]���������k���l5���9!�d�'��>b�,��zSY>\�e�����O������N{�5�$[$m�������Q������{�Uv�x��w�j�io���>�*>���n�tP,�v�m������~���ZO^q��K'�����*[�=i���x<~�k6�o�P�y������S��fM�!l�4��+
�s��~����;r��w~�S����=?�7in?����/�sA"r���U�W�1�G?��������#����{��{��I�����z�	�x�
��7�����i6����\~�h��7��U���������<{�������)����t���Ww�g<{p��66���8�����N
����?�L~�������+��1J�fR�*����\���u������j7������
�*�m��x�f��,��5r��~���v�L���<S�����}=�cm�n����>���?�:9�G?�(�p�/S��~������P����]?#��C/������B)���w�`r�c�~o_�?�jo�l�?���Q�������G�N�j������-A���j�U�NU��B���R��<�)�uZ����������0�=k>o��
����j�����v���J7w�i���W�_���F����
�8����wuH?��u�m���x.O�����u�
��7�c���O���4�5�%T�@UQ�P:*FIQ��G*+�pU� �pjJ(�|W�{����u�6�����((�<����L~U�|`�l�L����t����7	
�aN����?��_Ef��+y[W����}U�������^���?i��w����~��>2�c�x{t�������v�VN���{�\:f7��Q\�6��^�1%����7���29wR��*�Xj��B�G��V��Q^�	��Js�&\~��}�����2���(����39�8�����p�J�)_�Ws���A�-�������[��7ml�v������l7{w*���~ST��*�e6���UY��T�������d��u�k�P��r��S����������4(�l��������������{�Um��2�'Z��P�O���=���h8�O����J�eU��G�I��)�,L�k~]8�j�6/��2�6EH����C����Z��i/;|��W���/�e���,�����=8��e1}�S��h���B�M�/<�P\d�aU����I7q����kwO�5��rA{��	P<����sUn-c�s��8l�_�����?3���N�'L*��;�J�PU6�na������[��n���?�W�r�1��p�V�l�GyG��k��7|PuB�����'����;4��<����5�i������e�g<���6���58�Hf����nH�*��L�|�����5Q�����6�,_���|���A�^.�d;�������P�f��A�V���7�zf���[a���+X���Fh��r��������c���c.��d7�gM,��yw��#����������T������Q�����to�P2�����0���~��V#b��h�FGZ�f���}��p��Q����h��P����c��.���~���[r�^�����?��d�IW~j����@�yF���V|���,~h|�W�EuL�mV���X�8Zu��Ry��Lo�G���xn���>��#;�<�����#���T�iM�����(��_�P�����Xi2J��g���`,������}�����Tz����#M��
�Pku71v���o���;<*�T��p���.�]�����r�����hb7WQ����������Wj��J���(e��~c�����*X��uE`/�E���6~�I�]�������JGcg5��*���V�5���=>/��x/�cB�o��GuB�{}%���'�:*�����[����S�����N��Va����O�I����hk���Y���~D����4k�f[�-��k�M?M��P�`m��w�����zu�
�f�����o.?�/��w�����Z�����m�_�I��z�=�yQ�m���H�CTs!^q��:����P��~��L�J���Z����������r
a�~��
J=��c������^��m�����L�����w�yt,t�3�3���Rm��J��qw�g�[���oJL�����������Yl2������m�1�H�-W�]��~���Hm|����K��?�2�G$���8���?������%���s/$�w��.��m��b�Yz</,���E}3��.��wp+Aqio�>�D\������+�KX��o�N[���k�����D�+KV�7SK;7����zV=�$1��#AE5�����m��#ma��'���-9T.�}�	2u ��moJ���Dm��=k��]��/�U6��.��@J��o�����H�]����9�H������ET������z��P�Y����{]��������n�D�O�}s^K��WU��m���k�4�b�W��"o���@��_i���!<-�\���W�xw\��������fH������:}����)�V%ymoE���3�H�O������/�^7���m�i#�����ROpO����H�QEQEQEQEQEQEQEQEQE|���m�Y�F�����y���f�sv������>2�}����������'��^�e+�]����`�3��wqQ�O���o������m�N�����0#�m�qM����L�v���mX��V���s3m��t����Z�k�~L�����
6�������k/���q��~���:3]�l�+�S���6�6;�������]��l_��Lx��;�@�B����Jo������d�KB�����9��VL�Y�z�m�J�������j=�Y��{9�U�R���l���n>���k�_���he;���9W��?��������2��w2���k��v�����se������w������?��
�^���M�x�����)~F��c�?������(($R����g�
M�7��_���W������3�A#�?��c����?/����������)�u����Wg���?��T|��j����Sd�g���z�M��~������������w���*6���t�/�h���~?��e�,tO�]����@��-�aN6����Ne+4��fA�k�j�Xn�zC���.E����&���]���>]����sMV������&m��~�n~��&�����P�M����i����9Z�#�f��.j��6��J@T�m��}����w�N��*��>\�I�j�m���7zn���V�U-��j�z������J�g�y�3Ke�L�y:�~c'�j@�����
�T&�6���.ns�2>T�_z��(�aEPEPEP��������}���7�q�iz7����w�=w��d�������Rv�VN���c�nU�W��k�O�9��F�$�;����'�����x��>�Z�"��lW�>�Q��u����O?������uo�S�����%W�f�<��c����f��3.Gj���YuV�����"�%��>��~5�.������[��������e?�����d�<�$.6�~�=e�r��X��r�5h����wp�',�8��mH������w�J�7-�r�����������n*��!@�����-�y�|�(Q\����h��X�7����(1�+#J���^6����+cn�,:������*��Edde������_�a���X.3��:�%�U	��6����}�PH�#����w����1��������5R�S��V�����Gx��C��8�zV\��fO��l��,���7����Q��?�u��.$�?��:�-��*&Di?����F����Zn���Z�B���l�����BKw�i_��?/LV�0U_��5���y�Lh�L��X7x�V�������'-���T��)wn]����4N���z�z�Z
�Y�fw�^�g�mM�B��~?��d�+���w���8�muf�?���lY���_��_:�7^}?:�VR��-]�t�`�y�
��]���m3V_.��S�����0��k;��Sm}��~�Ye
�����Tft�}������m�����'�y<��JI����&U=$^G�Z��7]�4��Sy��e_�1�]����?S���3��z�����d��UR���2V��Q�Wn,Q�|�V��~R���������^����U�.����j�ss~�R���[�]��:�j�W��4nW������r������V�_���R���ZI�R�.(�P�����T������4H���[w��2�"��1���������Vt�*�Gq�p�8�o{���Do�@�8RKv�D�p��V��Z������_�K���/��ji,����T$GM���/F��nyF��H�l���v��Rakov�?����m�K���c~��*��Z7Z�L���=7q���B�WZ����T~&����7�/��[V�^���wp�8S���[�k���#O���x����}*�������q���R������$��X���������j� oJ��^��+d_���+���,lV]���]�nw���i�zaZ�_������EO��N������[���u�`1.�{��n?�n��U���*?�u�����	V����v:�����F�'���m��t�1-������Z^����1o�0��~�����N����sX��i$n�Z���2��q8�0��'���>�WR��-���-_���+6�/&5�v����z�����JI]�Ak����
���S��lS6�����me�R�����N�Lx�����u�!���i�O������b���Rhv�O����]'�KV������{�@�v���m��>.�	��D�����J�YE��H�*��qW�%���?��t�dR(��w����'C����0n��o�����+:�?v�z���$��YT*���t/��R�>_�N��P[?��uD6��-]�>����k}����g,Ew{�2�X������}�����}��U����[y�K76�b�[���V������e�bV�G���K��f������0
�����o=���/@W�W0$����������:���~g�n���Q)�U�L���?/��Z��o�z���V����\��o�}��?H�����{�-o���T��|O�uVX5�}�C����:~5��*K����!���������=���kF�5�E:M�$_��C�X���+�<9�V��l:�_d���G������k�����m����4'��d~� Y��(��(��(��(��(��(��(������U���l����7�"�r����e�W�d@��#�W���}���[������?�|����m$��?,�U�G.��T������*��v�=���!M�s7����I@	��\n]�w�:��V�_�i}���#����m�z~�wb�����q�7�]5��a�~�R�������W��P�wq����e�w}8�e�	M��5���wv-�dm���������;��w��~�l�Q_h��5�����s�����x��EP��M�����
���~�C���y����~���d!p/���,~8�s@�������h�r�����l�P�t|���H����ko^wt������-�o��)�n�|�q������Q���b��zv������k/���c����N��OV�h��km���o;����N�Q��+�u~�����;[�����o�����f���?��������?��9�p������(�%+����4/��_�5�X�����Cev��w����G����nT�y�8�
�iUR�7c�����Q~n��J�W�_���z�@�V]�\�����6i��v�T�_���HL�xn��Y�9f���3o��:5.����nT��T��J���D�'}���&�g�Kp��^��u��-����P�Z���N�4�z�7���>xBx:�KE_���:���~����<������B,���.�=c��� �m�_VT�(��(��(��(��(��(����Y��D��,�}���������g�=sA�,1h��>u���8�����_Kf��+�/���Wmv�?�k6)n
���~���W��.�Y�7��}���A��2��|`W���."EE'$(�'�x��
�N�c�m�
{���H9F8������� ����cI��n$G�,=Vd���Vn���0������~��{��UK�Zv����3����������2����W<�$M�m��V�oK�l�\��S�<����7�S{)e��[Vk�o��z{��j�#Q������"�[�~�����y�g����,�%��h��Wc�n�yw���n�������w����*��7S�T�W��������?_�Y�
��n8��������*��>�2�����m�������>Q�;���5@�w�O��[��sL��&��E�_��G#?O�N\nm���M�~������rz���������o���jI0���O�F��[��l~Z���n��7e�*b�BO�v�U��D�&��j����h����T+��~U�TTd�PeG�d��q�����wo�K��8n�{�d�p��b�j�[�+:������o
��������"��c�J��������,J���_���v�����?�����W�+GM��m6�7�!Nv����S�uB�{����Z��$f)��<��+���F��m��|���k��}n���'o)����/$<0�]�������Fl�2��K�M��e.�����=*����M����������df����}1�]f���-M|�J*n���V��sX��V�U�5J�iA��l��{n����u$<]G����-}��,��j�9~�"�%�dF����:��e)�i�����~�RY���j�o�~j�pO�N�����������\3|���v���������j1���KQ�
���j6`V�n��*�&����_���f��J���*M��z���A���������z������qqqqf��#,A���!q��M��"����?L�F��E;��)�P��kn�U�T���x��R3�Q��Z��+��m�uG����f77�P[:�^c����x>�ls_��I��Jv�u����t��h�8��[H��cC,����� [��E�r��\�����]=��%��������������?�����m��B��Q�b��H�wlT2$��_�~����S�����S���X�I���Y9'�X�����$�o�<+�[�����z��eEo�q���
\�#�4jW�M`�����x�,Ss)m�Ed�]}�P���X��O��@
�q�/D�����R�\��_��Sj����H�wa�a@�4�*���e��B(�M����9��U(�B�h���a����h��M�|��i��-�&��+�M�D�����]���j	�{�����y0��g_���&?����x:\��>�����~���N�|�1������W����J����
#
d�$�}�T��Y��b�?�B�n?Z�J� UP�M���^�g�o���uD���*VDf������������l�����P�$��q�6
�7�����js|���Z��o��
���SH��wv�:��x�
��G��_�n)�[�����V���3��J�{�����k��y�������D��u�(��I��C/������[�sB���j
+Mn������~��h�y�M�������*n7|���6����N�������[G����q�d<�|~U��n�k��%��q���tl�����������xSU�kYY��a�B���s�G#��E�����cw��P6��A"b2(��Q@Q@Q@Q@Q@c�����\��av��f?��w������G�Z������#�������L��_��!�>������U�Z��\A,WV��������9��@y�OE�����,��j�P����H�O����}?Z�I��;i�z�P}�������h�I�T�RP(V���;m6��w�+Q��O�F��&���l�0�����*�l|Agu��{�c��������7o��1��Z��<2,�zl��5��W�|����=B���������t6z���F��>Sq�'J
 o��b�&[���R��ub>Y,���oUo��f��Ys��"o��
n���{)�g�����J�:��?�����Jo��?�������{�S�|�?����O���Ww����7|�v��[�s�:n��6�������������E��0�v�������N?Jn��>�����~l���H�����3{?���Yw^G�5(���R3��������.��(����~��~��L_��������f�W����r��QL��=�U�������Ap��z�k��C|��37e��d�aj8�j��"���o���3����^��4�����#_�}I�q>��������e/�{	|[|���S�=�?;�����������`��� ���wc�O5�E#
(��
(��
(��
(��
(��
(��
(��
�H�X�9]`��=5%�>0�I�k�����'�*���o�����s��Q�fcsh��NT����������;�Z)�Y#q�GPCB
;�����iW6M����f^G�TW+�����1�?���,���;�ao��:����_>������q���K<��2��_�����W�,���Zz�������~��Gu�������Kcr�?:���Q6������sH��������5N��~c�s��kZ�7(e�K���U,T�(_����f�C.��1�zPy1$Yvq+|����Y����oR~����	n����5�4���]�l���������
��nj������n�>�\�m��%�-
�������o���se�o�h(��-�����b�{��5��b�66��0��S[�_��y���Jz������u5})���@���������H�n
v��z����i����O\t���
�B����j�����8<��jH���:zu��P8����o��V���^������3������N��?�=��j���D����x�A�*���i~ ��eI���p���<kQ�~��v�����f��f���+����z����jcr9����n��i����\f�v�rU�u��O�m����h�9�-�W�i~%����y.�!���c�J����U���=9�"�27��3��m���iS���+�dt5^���q���F����{���CMm�2�(��t��]v��+K����yR�J����j�4�c4o�[Wxm�yV��=
3k�|��>��}6u�����]����5Zk���8��^Td��{��Unb��k5w}��j(�9�16�tjwcv��R�j�j�{�hf��5UW(�u�Q�-LC������Q$���:���t���G�?��������M����$�?g-�PMl�����EF�Sv��M@����G�V�?�Y���P.�q�w��t;���[z>�mr�q�M�u
�c\���.��{S�-�����'�
����3�J��B��a��l�l��V��o�����Ld�U]�7���}�)��h��v���i��n��z~5��{_:��_�	��
u�=EX���-����������-���j��]2/A�*���[�M���
Z����I��/��}�����������3����_��?������T�s��z.[��Q��}Mgn;��Z��t��8��x�l�6��P�}�my?�7��h��AW�J�O�f���-���XJ�w6�����J��=+;^���������Z������\(�5����Q��<��U�gf^W��Q��Ui���+on���v���E_�����4�(p�O�T���.��x�D�70t�F��������yZ�M������������	n�_���
�t��?2�K��v��s��4e���q�J��Y��S���]�Oo.�Vh�3���L�u����hiXnb�O�������-�����;�j�r��[vzP����m��n�����7-����PP����7�{5�*��S*�����HY��Le��Vv�_����Y�4Vf��~e�d������H�������P[�/��/��6�$]�*����Z<?�ok��1�|�~w��rX��q��b���z��]�zd�����w����A��'�A�G�����ku	(v`
*z*I
(��
(��
(��
(��
(��
�<k��'���/aX��wh�z����5��@|P�_��GPgkl�������������W����H��-��d���;�y)2���v���	���<���d����c��y�5@|��K�5R�.���m�`����H�A�U
�@���-i��`��T�U��b����:�G�S��Sv��Pl�*����@e�����)Yh�/zk-X�Q�:����E{y�q���[��������a��%s[i���-��[j�4[O+�9���L�������`Y��Y6�y?��t6� ��������O���5D����8�i7mV��%��
�i"�F?��~���MI0��EXq�1�@�i���+�T��t��n���}���w��y�?J�S�����3.��m����Y�F���l������8��x�B�V����M9��l������~^����
���A'��SR����ma��d~f�U��}�?�
�����})��ida�
�m��v����������j��l�
 ��sP���{S�m�(�#]�P�i���[���T����_W~�^8�,����&����(I����?F���Y�{������Y��6���9�B���z:d�yK�H��V~����ZU���������D��V�hP0��(��(��(��(��(��(��(��(��(:�7V���I
�Q��4r(ea�A�����@�$^�����Ze ���!����	��U����x4M7����l�i_0�y w�k��_�O�#���5�K{}=����K/����O$���H����Us�q}�F�,������?�cpU�[��Dk����:�u)EQ�q��H*�\~����N�d�|��v���3�J�w���z�UC�������O�����������4��������������*��[����{�i��7�b������n���zG���}�w���v�nW���o�W�j�6|�3Q������nV�Z��o��n���������o;v��@���?�4r�m�m;��C7����s@��-)v_�i����i��V�u��o�T��t�����~�d��s&��P8���sa�k�2���������M�v??�Y����6����Ih�X���j�hU���K�5��.�s�V��3[�r�|����u�4���nk�;���O��ld���������u��:�[��vwv33���G�U�����g�`����M����y����{������o���j��d���������J#7x��=%m �U�J�Xv�j�6]C��k����m$W����G8���/�~v�}V-��w��k�nk���2��������o��k&�2���?�~}��o�Z�
���I��>�7���6��;/�N_Z��?�Ry�-;v��T{�]�����J��y�Z�b�v�	6��*�tw�y��F�V��S��n��NU���Xb�@��N?�t�UO$+g�q��c�m�|��}�~���H
{#�nO�W�[vz�v�o���n�����DT�s���������hv���������%{{8�"]��;���v�����k�:�K�Pk������g���P&X��V����g_�������m�v��3v�������[~��^�������w?��7H�b�o����{������h����H�%���@<Iq��p���T]���������L�}y���Z��c��������������yQt�����a���4��3e�v~v�g5Z�b��;�"���
S�uo�� v�I�U?+�����������$�v�z���<7{�k�������g=������;yn����?5�p�y��_D�wH�D�`��p|����������C��&��+������+�����p��=A��|7���Z�����[O�����?�}����>{��k�/�.�"�0u��$������&K��[� �	btl<l�2��*z���u�i:�{5K('=�p����0�
|�o|��~���z7k��O����I�7y�e� ��e�0���������M�[j������T���Gq�*�����t�j���~U�������>���AE���o�����R2����o�w����#o��L�_���i�1���G������-�T���
���_n�.�������L�r��2��I����xc���T$Q�EQ��+��C�-���������	�����*�J�B�(��(��(��(��(��(��(��(�_�^��]l���#M�j\"�*}�c�|�������#��L���2��_�'����F}�_[�@��YI
��Ys�m@�[q_���������;�������LW'��F��g���_5�+����B�e�[������|��G�m������&��X��p��H����Pu�������/J6�@
��E�?�F���B�?�����Njn����e�U��V�t����/������z��>��7�����SRm��;�zu�������dj�m|Aoz�5(�I�T����^��3n����(������e��p��/���d���]�z��������2�k������������*`E#ml���

����P�?Z��
J�=�Eq<{VT���u���P�I���V��61N�v�z�r>�����?��� ���������(o��EjJ�3m���#v�
�i^F,�J�����RcuWo�����Ske�(?�X_Zj�*uh��v����P�������]��=q��i�5��n%����������W��k=��
;�������+J���9�H��u�u�������%�����Uj��Q@Q@Q@Q@Q@Q@Q@Q@Q@	_0|{�[��$m*��e���7!���t�l��������.Q��f����h��9���w�i�&m�?���=}�<�unU��gnW����l��q���}���?N=�����n�BE�����z��&��m�"��?��O����}��B��S6����#m��w����,r�m����2?�7q_����������5/}��`�����U+�����5����w�q�)O�v�w����5"�e�/�K�.O�H����6U�M��v�;x�����j�r8��}h�GO��<2��{�G�o�������SwP�[��Zw
�/�����������(����N�R�w|�v��o���,�v�Zr���_ZEm���������@e���V�����;q�z���|��Z�#6�c�?���MbWq�����V����SQ����Rq����q4{d���[�����6��'��nG���.�������%�����s�Z�hU:]�;,w�~yo���=��_)��!e�� +z���H�8�6�}���N��F�,������c��S�����s�\f�V������]���h�����2��,Wm���L�'=�#�j�zb��������+�}����]�t�{56�����tg��^����}����w==k���K�����<z�j���}����*��v��VZ������ls�?�L[yb����j�4+n*�:��o�M���U���
�����U�U�����	�����o��T1�}������}P��o�Sq���*��]�[�J������g� $�P���T�Y�s1jv���i��/��
�(V�D�{5<��w���_�L�����Q���wv�})��~�Z@B��bf�������~�~n�����Q���j���X:����V���D��<�_�����Z�����Zt�B��[&�e>�s���}kJ���e�B�%�n��R��B�����s� �7w�g��E�o�������i����%rq�v����c��Z������V����n��'�;R�d������j��
�o���THL��v_��\��~T����}M9�����;���/�h��i�<q���$k$�>�@�Nk�+�~\�>8�A���b����~����@QEQEQE��i~�k�jV��G�z�=��?
���>~���{������{�>1�X�d*9�����d�d�cz�Q��|�\0����k�~.x&-�={E�c�nGsn����FP8
�����4���q�N����j����k�`�n����5�o*2����P�����Z}��{�j
����=@W;~�<�tU�
i/�A`�3BX<���^[��V\����{�]��1�n�w�0�UA�~'���uiIJ4P����KE$�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��|	�x��F�-�}�����k��|
�4v{��&6c��x��9?�
���������F�h�6e����nW���<g����,���h�]7K�|,��o�����5����W�R�s����u��Y���d��/��{�����$G�k���T��L)�Sm���)�J�����@��o
R2��7oz@�Sv��J6�t�#��n�}"�P)���v����"�T������+@��zn������Tr/��������c}�,��,d�o#-t��#��U�S�k�D_��r��y�7����Mb%����f�i�����V<�f�V%��qcp�k3'��5�X��z����m�{H��QYW��#/���]��{V_��W���\6����*\K���3������w���UsHL��j8���M�/%L����@U��h�K�T6���'��G��P��o��������]���v�KB�0���Z�-Ut��#\�=�W�I5���]���=H���K��r:�w��+�0Om����2��e
H�`�kr��Q@Q@Q@Q@Q@Q@Q@Q@	�Rt���|n�r�g������L/�� :���#�A��m�%���#�>/�+i3aa�"�F9���?�r0��]v�P*��.����?���8�\n��-���A��f����!C�*���x��:��U-����U�m��c���m��U�7=�
	+^K�r�|��+-��{��,���J�#}�TTb���Jn�����x�M\mo���G+e��r�N����������M������v��������`���s6������G�v�����w�
�n;��q��1��}�����v�m�>���(6����59p���_j�qV�i��s�UD��]�:?��:5���������#t��h����/���uJ��~_������7w���k�G���Zz��]�3����l/���7`��������
�/o�"�����w�����6��L*����8��}���_����\5#a�_�No������}�E]��J�-'-��H��`����
n�j�����hV���:���|�:�^����;��|�����v���h��|�����c��^.%]�RZ��Zs���[���jH���]��Uk�=�[cw
��hU44�b�v&�����N����n����������7�Wj�=�k[�mdSo&��8��PuB�s�t�B[~m��G}:������\6�z�m�q����X���s���u�q���et�����qB�GDf��=%���5��+�J��$J��~3���=����uY!��M����]U��7l�]��U�F��mv36������mo��U�R+��Hd��w��m�<+�_���,�m�����m������~��
��6��uO�>b��S|��/�L�g��C�����h�q���S�(ec�V\�7�S��2�nj@i��/��~j��l7��������F�l~t���Cl_���������0n(�"7Zh�J�����G
�/�@���0���5��a`�v;s��X���^OO�R�������f��}���)�rC���/z����C���GO�fY�fc+ry?�S�c+a�Q������n�R�nJ�(���w3|�7��#��/���*���w=v�
>G��W�2FG����QQ�wg�}h(t7X�Euh��Yc=�� v8�����[}kJ���l�:n�A(z8��yT����[��+�^���>�p��z����}B���O{��X^�j6�sc<s��u����V�@(��(��(��+/�:L��y����������z��V��\v�Z�5��{'��n��e$0�����Z_m�����n���eG?�X�|2��j��[��{�������o���}����SZ'm�{<���O���z��o�6�2s����������EH�v�v�q_
�'��ut��W�|��u�w5$�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_��x{��H���M��uo��=����|����z����X����s�%��'$~��(��;�Im�d���^��Rd
�������m���M��o�x�@��^��������t��}���{u$��u_~��B<��|��SY6�?���YOn�?\��v�m�r��j�i�{�M�H��{���v�4�JM���SYi����'�����H�w*	
��?�������EG����YN��3?�i��o�}(�������/����/���J��Y�_���j���QI�X- :?
����Z��nW��<���hkZo��{o'�lq�����#g�?������i��|�x�ta���jE����+������?�>��m���bl�����i3@���o��&��F����PH��5w��@|��R����Mo������n�8_�����#��;r�����e�'����S��:~��[r���	�}�������>��GQ����^K18�5������7�:Z*��o�r��r����A�� u�QE
(��
(��
(��
(��
(��
(��
(��
(��"�T�'�FTDR����5����������E��6�����������������3PR�������_8���������V>���z��X����Z��_*?�y�k�w��U��w�=�W���_n�G����(<���t�xm����~U�u)vc�w�Z:�������_���r������6F-������oC�N��e���j>~o�w����|�*�o
�}�seZ����������o����~��d��v���;z��Z9o���9�n���d~��zJs|�{��z�������y�w_l�{O�v��J�w��o�������~=(=���Z���w�������������vo���]��;n��jw��ez���6O���i���C7^EK��n���~��A���@�*������2��V]��o�U�����C@
V+������74���Jv��z
f��
�z�������Q�
��i7l����������
����4nr�j@�������M�6��Jr�w��i��Z�q���|�z��~a���
��n�Q������7��@~����s�z�w4/�}�Jn��7N�N�M��to)��j��9���)��aM������yi�7���y�>n���+u�����>7m�|���XM��_��o��|�)�1:g�������[u�d[�npS����E&������Vlf�����e�~����n��i:�y�I%�%oZ�,u0��t��������h��?(������>����or�p���_j������=.KKia�-'Vb�w�k>�'I0��VM�����fIGU����u���W�8��"�������Z
���e���*��������W���)��f�ur�����n�2��^�U_�����,>��VWN��O�P�a���P��E���T��o�A3����Pw�!�Mp��*�5U�j����o�_�OZ�Hd��(��~@�~��gV��m#H��p�����]'���!\�����!O:�{.������PQ����:T{�?58����m���j��$5���F�=6����k���[Fk��m�����3@
�]��1�)�w��s���1�n�?w�������J�c�Q$�*�^��x_�{�Y�o����)�����${7cw=r����B�����h_����R2�_��F�u�y�e�"��F�7����1��zg��&Y^��X��St�S-?�W���e�Xm�}*�Z��k.{~�����\B�������#����o��}KC�v�r��9h�(�U<W��w�e���u���7C2d��~���z�=���h�!Ym�IbnU���EM@Q@W��M��z]��f���&]�"��<�����<����j7��-]^��BUOoU����_�uQ��.��x�5z7�{U&����
��F�u�A3y1��7���������qn�~n�N+�~hGG��w	�����>U���(�B�����EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp�/�c������z�&{uq?�^��������o�������&ku'���>�+�z(����{F���������_px�����h�i�����������iz��_>x������{�x����ku$(�e�?�P��OJn���^YO~�=�w���[��Wl�?�������(��Sw~�H����yZ	$�CaW+Q���9[��(����sb��7��P�U�9+2~F�o���S��Md���+I����Zf�����.����F����}~��������7jI�2��s��?���Wk.����GIh��4V��@�^0q��D�F�?����_o�^��P��F��(�z��X�hP����o��
sz�[?�@	�)}��>2��~��Su&
"����>��=�����i��~�j��tK�k�V����UD�{����=��V�0���W��,����JFs��}UX��m�3��"�sl�K��Y��<��H��(��(��(��(��(��(��(��(��]F�>�{���dv�����?���g�i�����b[�����~�����S��<s�Z����Qw���l���?�����Slb���0>o|�~��b���u����+v��|�/?^��A�����e�����zrJ��Tw����.�o\x&����(�Sq�w�?���X��ew~@Ae��y�������*�������>Iw3t���Pq�������v7~4����/o�Njo���PPqG���;���F����O��U��v�w��(����Pv����l7����m(�����o��@��~m�o�(������h�ko��,��i�v��4���.�O�xf�
�o�����o�o���n;Tz{���.���������������o���w��b��m��@���Q�w����k�=�U;h=�)���#��?����oZs}�;~�����I���_���7+R���Z�R��~T��������{��Uv�{�������^�����^����7h�[o���k��7��g�U�R���7|����w��T��j��'�9����9���}��ie���� 7�-���N�3o�����e��r��G4���[i����;�N��i�N_�H��.������A����X7�^������Q����f�\���}.����}�����'����zm���*
`w�?��.;���������O���s����+�^+���������i�o��g�_��?
�U}Oj�`��-��������RC�M��������~2�Y�U������'��]�+������ry�:#.b�Z�]�Q��ZM6T\#n���T�}j�7o�_�u�����8ee�#�?
��V��i�������\X�3Oo�F:������Rg���Vi��M�3H�c�q��O�R[��-����u���s%�&k���[�b��I��������o����V�����z��m|���[������F��'�VYn$}����Z�t}N7�o3m`���������{�i�h*���������}J�u�,�6>m��s\�����e�o���l��*�6�:��w�RQ�k�(U�E���]W���G�b��$�����{��]��Ww�ex�u������1~��vC���d�F��7^�����b�z��k����h.�X��u���D�	�,�J�MEa���S�`�T#������	��1�|���G#l�;~������}�V�U/!��U
�����$�:�R|?��Z4�n�s,*yh����O�z&��B��c��d��������3�}9���L�9M�{�L�����z5{�>=�����_g������P_�D������s��,c8��x{*|�Us�Tf����$9����w�'�����GCe �l����/���y��>��J��c������J��v��sN��v���F��?{���4�-���@G��5�,R��k|O/�E�M}	���>h�^���o.�{7��E�v QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp^3�a�x�^C�o[�[����K�����y����o��e�P}���ku%p?��W�������`?:�-$��x�|���:�)�B��|e����%I[���g���b���}��o��|8�\G��>}�X(�q�}�{��/�
C��F��{}�h��/��l4P���S�w3Sv��zk0ni��r�������h��q�����F��v�w|���&OZl�V��,�4��)��Y�����v�������W6cw��
�L��d�=?�mI����h�5����o*��xe������)alK#����5^�-�J��������jQ���{��/��v��[�`u�t�����%��o
����
��y��a��Q����Vf����*����dP-JQqp������P�����o����{��xs
��~���?�U���
\����Zu�����"�Y��~�������:]��e�mm�z��.�E(��(��(��(��(��(��(��(�����o�h�z����[�=����������w�����r}��>���h�}��/�I��ys���S�����E�nE����/f�.������t!���
�V(��W��J�o���o�~������~a���8���
�W��A�a�J7cw����7�n�[��\�������H����0�/��p��v�_�?�uE
_�w�v����
I�/�D�>a�Pk��[���������?��7w���
�~�z*�/��
����?v����z���7;�Jw��}�_�����@
o��V���v���NU�Wr�������KqTYJ����I���~_��;���h��|�t�#�PYN��x���m�G�NoO��3
�2��y^(?�����}��Ne��<SU7.>�Q�j@��UC.;������F���@��w�t�h�������hf?)Zw��7�V��{������{����ka��/���oJ0zSx��r��?Z>���h�/��)�}i�t�T�2��N\7�(��NUny���*@�o�i���zsG~�(\.�����T�o��
�o��}������y��� ���k6���}�[��m���@
e
�����)Z|���Zr�����v��2��K�R5������Q�
�{����w�*�n���R��v���Q�x��wju�~�GqU�6����j�.Yz���4*�o��1��zY�����u|�"��[�A�bt?���-ye�Y��_3�������e��.;+��wh-4Uv]�\7������.6�j��A���iv�\}�=h��I�oJ���-���Z��In�_�����4�����Ne�j���.�]�wT��p���?-`*y�����)���).71�g��WR��-�����MyU�����Wo������ye�!�������5��$��yO��o#���X�7���/�[H�j8�����=)��7���r��M�������o�L��������J���}�I$U�����J�n���d���^i�I��q��W�iz����������n�o{
�o�u�jA}�t�v=���\~���ip�o�"�I{q���2���U]��qn%e,��o���S�Q�6���9��j�sn�B���oV�Ly���;�����UX�le�rW���UrKj������p�����8U`�W������Lr7�|�9�m�����x�h��;���	�%,�|��wu&�����a[��qHlk��m"��n����-�P�������Y����H�T�������7�;@��?�]G�Mu�B���v-�����~$~J���l����5}�������7@�����x��0:�(���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��?|9�`��m���f�P��<�����_z�����o����}�Oc=��u��|��~���=��qe,?�U���H�~�}��/���JI$��gx��}��������|�������2��/�1����%G�I�~��G��������Wo-%��F��*����@�����w����v���5[��@f�����v����m��J�6�h~e��a.���M����Z�d�Of�������wm_��v���)�m��?�OV��Uz6�]��a�oFw��@��-���y6c�������V�Y.#U���:�p��3"}����<3�.������g�AZ��J��7������Su��o
���c������w�����������maf��d�3\?�Pc?��(��f?`�e����y�."��!�����V�����;kx��EH�P���@T�#
(��
(��
(��
(��
(��
(��
(��
(��
��q��3���FR��m�[�������������D�]����r�W��q��(0�U�pl�k����&����IX�3rX�M_��;(_�~�sU-`��/���[���x����?�]��A�|N�z�!�|���j��]��~��"���+"�{�{V5��������hV����UQ��[�����=�J�v���{��.~�����5
��h��7n�����=sN�w6��}������������������O��]��G�_��������j��x�����i�>��/���&�^���=QYI���������v��F�����2�����M���|��jw-�7��2����8����PH��s^M~V��=z�������^��F�������e��"��y�n����B���d�Y�����~�s��}��������g�j=�.{
�
����
o*�]���;��ojo,�5���S���_�P������^���v��(se�������{��R}�wg��}�6����~_��5~_���e
�+)����n[��5���3n�����qM�&>��R����T�����������P���P��}Q����jh����w����A �6�����Q�~������m��q�_��F�����mo�}>�����7����H�Q��S�=������j�X�G�t�f��H��u����z���X��\��pf����pZ�cv���mT.��j���D**����Q#���������_�j�[��l����i�>m��u��7,�������h7�N�MQ1���Z��_��B�[(�?���$�~�����
�i��J�Q�6������Z7|�7�G���c6�?��#�VJ���I���oP����{�T�~o�(�MG���o*���&���>G��Y��_��r����S��k����u�b�O�vgl�����}�����+{u�Jv�I����)��6k�!��.����'>������|G�ms�w�0�o����F�F>������f���U��Xdz�*@�";�,��V���{wj��|)��/2}�g\��5�?��_���$�'������v�����>h��=}
P�yl�:������n>F��v:T+0�R2&����i��be��l��v��i�����������7*���oZ�t}k�Y]����Q%�9��O�E��!��5�}bmY���������������]�{�Z�_r��)r���d������\1X�Z��"�f�g��y�VL���z
�I]��{o���C.[��Ld��G�R��������&@����>F
�?����[w�P
�6U�n��SCf��u@��z��Ne����n����!�L��O��+��������x#�{z�I��4��|Q������}[?*�|��k�k������� �qu/���x��8����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(����9���7�kox��>m�V��C�~"�r���]wB�q�'�������0t��Y��h��+�I�&�*���QU6����	�_��trN�R���}C������q���[���t?��Z'��_�(�C���Mx^��O�O��������Y����0�;�y�>��$������q�C�^�
�P��]FC�����P�_�oq^������_�@�M������
�9j�����I$wJ��a��� �����>���Kj��n���?8��9P=�Z�_�����������v\:�����??f�x����p��Q]V��->f���-�^�����b�'��c�u�5�}@=�����P�������esh��2�
����#�h��Z����������>�@xk��ws�KR���^Q?�=x�v��M���[}�=�m�y��������+���
(��
(��
(��
(��
(��
(��
(��
(��
(�brz
��*x�|-�y����n?sn�����C1�fy[�~N��>��|e�Y�7��;v���a�h�������8�2���G�(<Leoi+-�O�.��Gf�~��#D]���o��"�_���������v��8����G4Jw�����?w�c]K��V��Tn������*�f�}��RP��~����^���hl+7�GJ��+������5u�mH�����/�|�H�����_���f�����\�j�
����C|�w��hU�k�����Yq���@�WsS�Z$;x��?�zs}���6���=������q�����.?���h?�����+�����7��Q�7���m+
�c����tn�����M��h_�S�me;~�3no����Me+�����G��(_�w���@
o�����i��}�����tP�n/���
���Zsn��>�|�0�M\na��G����v�����o������n���h�r����6��_��n��w�*@9o���8���/�����\v�����/�(��.v�
M_������*r���o�����n�����������u��q@�7e���Q��~#������m����@ex��_��]�w��~��v���fF_����2|���j=�v�����{Q�_��"9~�=Wu
��JE����U�i�T��#��D��&	j�!���[��W������SOdUm�i�F���o��$o����q����+�Z��%�R������?J���,�b�>Q�����������j��v�|pr����c��P�O�J�'�����,���>���M��{�j����O�H��|���
������RC7��N����G"����G(U�Z�IJ7��+?qVg^��������2��dg��Vm�lj[�j�*^EJ�|7�>��[X�#��H�>�����V��}>MVe����F:��w�1$1�q��E
�v��+!�Q@G4Q�G*+����zjJ(�<U��M�|��Y?�n[�/n�I�w�����!�����q��7��d��o���<����G<M���2���A�p>I�P�7���\�
{W�����5��'�m�S\�����~U��"������/R����<K�6�GO����n�=���:\u����%��V�������E�|�kF��[Vm��pi5p�,����6�WvI_���������5�����������i�%��x�=�u��D��F���~���6��(]�W�m���)��y����ACU�n�����w��/��*��z�6v\���s�@�����n����{��Y<�o�o��S���sm�	7mZ�>h'X�2�M�Z��Wxg�h�����6�:������{��tO�=w�/����G��8�$�h��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���|c����,���,UnK�~IG����k��g�>����x~xo�u�r��'i��}+�*(�[�k:<���e-���&��w�20:����g���Z7��
���F��Kw�
�H�U�*+�F\�z�Q�0(�Z
���m:������Y�����EU{�[{��"�&��(`V(��F�tHd�I���){,k����*(��(��(��(��(��(��(��(��(��;�����G|/%���o�s{z��J���8!�Y�R4��@$���w���O�.nw0�F���@x���lMoe6s1��L3n��l����J�_���g�,�y�mB�c��{������P�UN2:w������~l��o�Wnm�9N��}/���c@���??���U��o��9�m���j6^�@����o�?����8�������{��7����S����3n�f�a�\~=h��a�N.h�7c���z����������4x^�F������v~��������w�����oO����?/~�^����g�JwUo���:o���)��;w���j��^�����#��������jk}��zw�w������7�����q@��=B��6���tu�7�������X��
���J���9�����Q��@�W�P�����;��y�6;�@
�W�S��v����*6���@���v����@~����Y����MW��@n�r��5���A=�����
;q���lg����Q�����v�`�xS�|�^���Y��n��cX����*w���M�����@(�?�����;�n���+e���@��wt���S���j���b���t���*���C!^��Q���@��)����U�cZ�V�U��4�Z�V����-P�&��Z�&X�s���+n�4��L+��M�S�Tf�~V�1i�����f��4t]�m�&��N�i�k}k%oJ}������[T��M��p�N���'��/O6:22������~�����4���n��g��&�8��1���`*�������+X�6�������;|����5����?�5*���[��,sc�j6�U3a�����o>�H
�zU)���)�r���Zs0U�Vd�����Ib�U�j�o�'�4���\]^��n�����^w���:�l���bK������+�UB�
0AY��Z(���(��(��(���$�&�TW��ee�#�����|.�u5�} ��vy�11�G��W�����7#i�����m��:~"�����e��UWC�V\�=4��0�G7�����:������7!��<O��F���4���tz�K����o����^��<����-�i����.��W0
�iw6��������qM�Yb�|���p�d��?03X����[��*�7o|�����r�6�m�&�����G�}����U��M�����'L������l�<��dRe]���Qp��{���*KwGo3�Z��uVy~��(��h��k������0=S����^�\��4E�t-��?�'oW=.��PHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE��u��h��6��S\�d;�T����tH�k��FNs�=z�q�v�����K|�����3^A�mz�M��-cU#�\����#��K��k��G��*��������?�y�����/m�;�1����������Z��^��'��a�d����V����~��p�f>��Mei�+Iiw����?�J���'��d��n?^z�)E�J���'���9�7�S�O^��~o�QC,����C/�����O�Meh^���i����~��S�m��B��T�������"���:?����~a�� �w�����~o���������6YT}���y������������B����S����5P-��Zn��;���sB���� �����f�q�S�n���F�/������}���?��6��>����������N6�E���e��F����o�����?��B�������|�wtZ6�������������5��{/�;n�;��),����d�{~o�z�J9Uo��������z��*Eo��n����~b?�����V��tn���Cc�~a����m?�85@�e����G���p���(_�[��� {��Z9���w���.[mG��_jw=�^�m?�;f���(�U�����W��sF�����F���l+U�s��}?��Q�nx�5�:P����TSUN��Wm"���2�Zj����T������T�m����KZ���������V����;��W��8�����������h��rB�2��^��v����|�����/�]N��{�=|���������v�jE;q�=EQ�P�k�>
�O�^������s����;d,�U���}�](h������C�����
���U
���_�V�B����J?�����Y�+�����I���NW��>�Sye�j���0��p?�,��U��wu��P7��f���h�W;�
����{<�!�wH�t/Z�iwH����u��O��n!"���M��?�����3�hbK����%��G���+����aEPEPEPEPEPEPQ�,������
�5%�x�����y�Z/�n�x��o���y/����y��>�h:M�?����i�����
;��4r�\�nP������K���A�;W����������!�����~V?�'C�W������ty�0Zh[uZr?6Jw�We�r<{?�G�|-��������ab�as��C�W�������c���K�_'���N��)�W������|=��h:T}�m�1��.�����4���(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���I���K���� M|��k����R�~��ll���M�����A��o�@�J��jL��|�g��o1}z��yI�����a��0�����K���i�������2c�n{b�]�����x-�z~�������=��3i��[��Ee�v"+*kW��*�#��\-��w���Z��������A����+m�*��N���E��k
�Y������t�iP]B���+�����^��5��##����R����6���)�G�V6|�57o���57o���v�Y�����Tcg�����v����[��������}����������h�����N���}h�����C��@
��|�w��q�����NV��������6�AF��v��?�+���Z?�_��4m���7�7�����}h����;w��/����U�g���_���N_��w�@
e���[w��N�)�������>g����@}�m����Sv����q���B������l�/�������O�F������~�0��Mo��T�{q��7��@g�������&�o��~�w�Fa������K�������_��4����(�@�m���_���������#�o��i������7n��jEO����?��T�� US�MUjh����*���m��y���J����T���l�}����{�A�(�3��g�}�V�_�L�hLv���B9a��}��|/���A��-G���)o���1��k^��B���?��F�d�(��v��*0����J���������~�[yn�y�+��)�����:���@u���bO)X�����t�w9v����9�;��m��X��9s�������M��2���In�rz7����"�(�2�.?�*E�G�|������*����v��2��Ea��Oo.w#u��q��*kJ�|�V��*���?�����:��s����#)^���L6���(����/���<�bh1G(�J����1���_	4�-Un�#�F�������������QE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!�o��jR1���[F��w?g�U��U2��n�?�j��[>q��f����'��y�	���~]�N?�^��2&�{+2�3���u���5A�AhA��Z�mj�Q�-K�W���"�-3mJ�l�e�7R����i;#zv�����qov������<���5�l�8F{���L����U�W9+��S����qi$_#�)�����t����FG
�/F�"�}7�q�7��@���e���*)���,cE����'�[ut�b��-��2x�6��0�~�J����z����+���������m���W���^*f�������nJ��Ve���o��|�R2��Me����c=���C6i�w�~��^����?5�����4��x��7���-7����V�T���v�����W�C7��i������>���s�B�{P�U�)�n�+��hl7�������e���[f�7���W�^?���w�����������o��P����Sv�����r��-;���~j?�����6[�aC�)��h��S[������;����@��w|���]�J�_���n��/o���m�\+|������5������$��W-��L�P����"�H���������*����AQ�b���k��g�	.g�%�|��\�x�����yV������u��{�B/���>�W�z�o����m��t?�=�����z8xu4������(�.�`�����9�n����OEy��~[N^]�H���h����y���j:4�^�m,?7
�[���_G�7EsEqr��U�0?Ph�9k|�t��e}��^��/��W{����M�<������~��Z�����Q��5=$��0���a3f�%����wQ��9v�����L�����J�?������j�-������o�#�:|��_����pZ��q��#���J�����Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@	^s��R���z=�'�����w���f�������*12�6x������v�1�?\�U������_���G�MX�������:hU���>������2}�e9�:
�u6�
�m�Q@��mIM�:~�s���ZL���f������8���m�hq����d�g�t�?��'�tz�Z[�Q��S��}:68"������2��?�����d���#��?*�������
��:s��������b+E���]�V��?h�fYc������3Yw�C#_���s�W��Fc.�����Zh�e���6C�;j���P3(����6�j�������
����
;�t�~o�Z^v���#jw�o���{��i�����@���S�����o�AV�����Q��P��Acw
�5;p��M��n�m�7�����P��\}�T�c��;o�
�h\/4q��}����K��/��mF�[�����s�����>�c���d���-9[��G;��?�4�]�w}��:�65~o���������M�j>�X�~ZF�����m��zr�V��sV�;��x�^���>i.�tY��PiJ<������R]��6`����N?���^�*��������6��t��p�=xG�XZ(����(��(��(�������5�'eu�#��RQ@e��o��-��6G>X����]t1G+(���
��{R�@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@���0����������Z��������5h����c��`�q������><�����)?���W!]'�7����s�N�G�JH#�V�Mf��N����j
��6�j:����EG�3@S�=��j;QE
(�mi�P�w�62y���O�����G��K���U�����:���\SYjH�#==q�-/��lgVA	�=y�?�e]ZK�ue�^g{qc7�k3D��
�4����
���U���
��xF��#D���{v��k�[[=N?3M�]NO�����ue,L��e�{4�r����3����UbH��Q����T2/��4���?�Z�n����E7�����F��������5�h�{��7�G�����;��f���i�����y�_��V�������D��J������\n�h/4r���_Zj���B���:F-�|�ph��������D{����z��Htu<kL�w~:�#X��MO�W��������o��xZ+M{��������������/�.���_���dy��G�Z��6���y��g�������_7�w����'��>�h:������(���Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S�,-�;)l�cY`�me?�{��E|��?�����H��Y�;�\��e��}�W��XIk3]�:������r��0�+�b+��!�"��e��UT��lx���5-ul#����&�������3w��$sD���`���PzW55�Fm�-3Yl�3�j6Z���Q2P_9V�uK"��P5s�S�
�"��K����V���$��+S�+�Z(���M�K��-�7m5����9����������q�k���k�?#X��O����;W���A3����H���+v�M�]B�����f�Y:2�]��[��&Y-fh�wZ����-`�!�S���v��xf�fO�
G���n�������;��mQ���&�.����������?�U$�W�Si������5?�O��j���-��Q�?{���Q���8��U��b���m�61�����J�����7���:Q�e�����_��{|�����������f�~_�������2�*X�u5WuM�8��EXU5�O���X��\��7�t�[�N��]R����_�x���$��>��|5��_����y(�.�3�w�9�k�l�jH�����r����������H�P��� ���=x������o��]���<f,�^x�q�e�_�z���SB�EQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@^"�����SQ�W�'�"��+��k�Z�2�F�L���/���9����4U����S��c��6RH������_N���qnW�k��[J�Dj6���d�d_�w�+��k�V��e�I�M�����W�����u\%Jz�T|�p��UfJ�����L�,l
p�����s�V�&`���%W����N�Z,-F���5��Zz�G�KA\���R.*���Z�\�4��r�&���NZ�:�(�9�����A\�,��*]���0Z�Oi'�o#D����i>2?,Z�K*�U^V�-�%�
{��#���c�t�������m���3�i���{IKy'�Z�����F�
���U�
9��u�$d?����v�[��e���X����
�ue$L����n��Fk/��I�}�����6��V_������z�|�,���S�R2���AM��}(�w���7���(,w��V����mH���-K�#�j����iH��o����{�mZ�����I�+���Y��]����8]�����_����Njz�4����T���P3��u�7����u%\��E�Fa������������wY �������>��	�;�����T���t��j���\7u#;}~S�2��������tQEQ�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs�#����8�����	����C���W��������q��C�����{��}%A���7Z�j���fYae��9_��Q��d�)����<K�-#�Q0�m�F����{�5��:�'{j�q���@9���@�N����<��jR�:��6���G��W�x~���)s��C���a�j���A����f���IV$��Z�����y�+Sv�����d���j�����@�N�N��V�n�Q5'���S�((�����k-M��jn�@��Yi��>�n�m�����[��8����>3u_#U����e�����Tl�	�Ktz�0�j���d������f�X�lue>��Z�Oi2�o#E(�U���|l^?+V�����^?���xg�X4[[��)�{�B��j���h���X��py�}c=�a���v�s^;�m���
�p�jY"*���j�Va������jeP��R4��_�����kV#��+aW��\��tf�c�	�%lkT>Z�/�;�������4�Gp��
?�����/�+g���������Mo���4���#K��l�����m,������+�_h�xs��Ze��B�;�s���5�?�������.6����I�Y���.})D��CG7�(����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���<K���Q������p'���~=��|���.4���a�~�q"�S���������aW
N��S��[��RH&��g������(����}��_��!V7����x�W�O��?��/l�O�/�-�s������#����K��:���i���j���I�������$�+�)\�O������S�C��H�����S,�[��+Sv�Z=�1*������@�KO��S�(}.����@7��E��������"e�����h�y�������UlWQ���X�����C��_�W.�Q�������{K-n�G�Y\��m�R{s����6{y�4L�����n'��e����r
�v��#�e���������Y��u�l+O�{V���6������+Y�IV�����U6�������9W�f��M����H���������7a~����Jb��������_��R�����o��i�������*��nf�G���n�]���I�
z�OM���da��,.�;��#�~�2i��P�pmA��_�f�
X�6������+kx��5Hb@����0�
��=xC�*((��
�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(�k����C}��Rv���_�=�����,|����e�'1/����k��i
p�����T�.-�����UdMnW�������|D��eK�\y����c���x�������r����%��{�'��#����KX����O�j��tz��qj��6\5b�I1��>�������2���m�L���S��NZEV�n�R���J*>i���n��h�S����2�j}�- e����Zn���#�9lYl���f��7>Q�����qp���dE�����%�sak�t��������>R�=�\p������+�+����]4�����K��h���]���W#���i"�����
U�OJ>�?�7��h��N��}�P�$i���@��s,��+�?�>];Am^�=�7�G�pVx���?M��
�7&��ZX��N����B����A�_\[���
*E�D��I:wn�'��*�D(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���<S�}�j���c�o�o���.�����������{��l9�
������W��PsV�B��S��T��-$m���Y2@Q���}���h�!Vk�e����xT���������GL�n,��v�������G��G�W	R��Tx3.����kwR�n-���G~����n���T�D_{�����Aw$f/��qIEDZr����wS�����o����O�aL�*}E���N��u2e#�z|w��op���_2C�=�_��
�u�I*�X�~�k��N�ik��f��]K.K�GP��j�u-�����B�>_C��0�������jI�,����:V[.��]��^D��-[B�M��f�j�����_����m����J4�����������-=8I[|�����?S�{�K���=��o�����n������aw�<�U�G1��F�*���SS=xAB) ��(4
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��9/�E�
����\����[�����o��4�im#�]�����8�y:��"��������]�������j�2������B�z���_�4O+<��mt��*'�t?��'���-)&��/�����\�������������O�}CG��f�c`�����"��-Ji���E��&�7SwRn�w��P����@\�V���W��-�3I��L�H�c
*����/�����si���������.��Whb�e�����LN�6���0��{�p*���d�����z���&R�+��������������1�(&���������{�WM5���k%�+g�V����Y2Z<Rlu��*F�w���fQ�����84��{��q���%'o�y����xe��z��.������1�X�=�W��E�)(�jTp)�����u5QTzaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP����'���K�]|�T�����u��9�A�h���/�[�m
���G���������]�������k$����5d���\W��+�w�k��������@�^�������.����C�[u�!��it��)m�<:����h��bX�����e�(�)�F���z����U��g�����3��/M�-V��e���O����X��fP���Z����"f�����(�?{c������T*�7���J�h�1s���ZZIq� 2�u�L���\���<M'��:��2��R*�[�V�,�n�Un�{�G��2�!�C{VkDY�����ozb����z~�{��^��F?��R���4�T�����rm�������A$)eoig���S�l����&��,����n���D�#��T�i��#�>�mt�!���|D[��t��?M����8�c�QU`��T�G�($��QE�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'ZZ(��w�m�*�,Kgt���%I�iz���%�t��Chd���@��r�
������p������D�m���W��3Z������mk��Y�t���,#�����5�����:wg�o<������T�	�j/����E�2������	�O��B�A-�h��]���]��u�(�d�|�27$�3����t>�]e�A{�I�oXQ�#�x5K����?����bu�����?��������5�����R?i@���9��)��"��x��>	cs�\�������	�c��(�|q�jQ��[Om������l��	�z��������������`~����S	j�g�|�|�+��_������2b��	=U{�Iy����j����;E~��s���}��P^�X|3�&�:�(�v�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@��
endstream
endobj
73
0
obj
127399
endobj
69
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
/Font10
28
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image18
72
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
74
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
75
0
R
/Resources
76
0
R
/Annots
78
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
75
0
obj
<<
/Filter
/FlateDecode
/Length
77
0
R
>>
stream
x��X�NG$�����,�H4}�(�C.,1���<Xq�;�(y�g�o�s9�s]h�3�����tWw��:]��Lr���*FX<�a�Lp!dt�
�j�G%z�0��w"5_�/JXo��`�^���������m�����`W�������J����M6�u�Q.Iy9M����P;xK=u��$K��hKQ��5�Qw:�P���c�B��5:j�����(�@�fJ��3��������P�2{�l�H�9������a�l�0��(}�(N�YqZ�b^�I����X/���5���-�P�uP�h�.�l��g��2r��W��1b�w��#�~��Ji/�tLj��Z����z
d
��,��>�	�4��~�X 8`����Yr���'�tR���������%�����P�TP��T�B0E#
wP.��\�Z�hJ�\��:����9`�Ld6�xle��,k��h���N���>�L�!�r�`]z�p!3��2����W�j�����>����G#FV����Q��+��XN'Q���=�!�����S�{k��C�#\�1��#\�#��2��%���>)..��g��>�=O\PV9��I��=���NGhP��(�G���WN�/�<�VpT�\�&
�6V>������Z��|0�A�B�@�����Rn�-Z�^���u����V�������]TQ=bc�K����Q���l���Qi"�*�p*���T~�Fi?�RA���CrI�mW��?���y���p��
�����z�����!���{�b	�X��}����1��$���l�\!�����9�J��+����|J�Ha`�2jK.v��Bt
�F�s�aRRpg���������)��L# %���V/H�q�������`r�\��XIdfXA'��K`��,����P-���H�w�����-��6���u��K���%��T������M��,�������������i�#����.����ZB�dU�V	�AB~=m�vP�4��4a�,}�[�SFv�)�������K4���1B8�l�G��j��Xzhd��	t�IjO�:NV�8�3������,���b�����"q�`)��?�����CM�y���mz!%����	
������*���R���<��!�k7E��{�r�DxG8�uTz/�D��P�ih���?������b�(j6��@A�����l�dvO���VF:B
���i%�����dY�S���Dz��]���� �V?�BZ�^Uk^����R�u����C�/�nZ��c������I���D�4��k���_����~��F�F����L-K�t"J�_��2
]i������:����@�v	��-��9���=���?����
endstream
endobj
77
0
obj
1381
endobj
78
0
obj
[
]
endobj
76
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font10
28
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image18
72
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
79
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
80
0
R
/Resources
81
0
R
/Annots
83
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
80
0
obj
<<
/Filter
/FlateDecode
/Length
82
0
R
>>
stream
x��W�n�F��tR ����6R���@�E����
uB�k9@�469����v�M����?�.�|H��g��HY�[�Z��w��=����
�i�JCs���N���s�7\'���p�_�TY�,O�g�����h����������������r����_�Z����Z�O����>g��"/_a�p�{x{g�L�)*daL	��h>Y�N����J<�7��+��
�Q)Y�eE6��#�V�]��9n�z���q!�����H�e���LM����d�O{�1)�����'�|��HNn���������k�O�h�MG�zV���������xg�F/����q&,J���H�4�
L"wU����X��i��BT��q�lA���W��q���T�I��T&�g�0�[3DC:_e��g�)h��Ep��c���l�(��	�����w�������&�����`��1UY��6Xk�������0�Z��u�,t�����N�����Wsq����C�M������f�����I'�K�|h]�C(�x�c`��	��z�H�L���OB/�����X�{z���b���JS/xB^�����;���x���"�}*Ez�6�����r\��&�d�^v�Ou2����;����>!�j;\C)^5��|�H��j?�xx�w��u4 �Tq����.�-h�@R� |)�j`��x�d2�"�Q��J;��&&S�?���D
	���2�E���j����K��X#F��!
�7��a7�����.�C}���a�d)x�������d�|InE����R�
r@6���w���#�����]nt�Omr�����_N�d����]N�&����Zs��:�XKb�U��Ls��]<��6y�;h����e�������#�H2$�����\����L���$�~��?!��?�[�'���B�FP<�������	De
���:�����x�����b\9N���YIg���<��>F@�:�ys�|��I��M��u�9���=��i?�1b����16/�N���j�,k���<�p���dUJ��D����
�#���;�.4>���"������frr?�,����t1�Z�(l��Y��)�X�T������l\�:�$*>��X�K�PtF@����L�M��}e+��
?Y�����y�;��O+����k����?��
endstream
endobj
82
0
obj
1199
endobj
83
0
obj
[
]
endobj
81
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
84
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
85
0
R
/Resources
86
0
R
/Annots
88
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
85
0
obj
<<
/Filter
/FlateDecode
/Length
87
0
R
>>
stream
x��X�nE��g%� Y�,Pv����P��$K�i���"BlE��lX��
���?`�`�p��1=������=S}����S��[3gT0N�kP447�����Q�8�z�u����S�8��gy�>��Hn���1����'t��� gt���'O9=�1�����o��>_�_�u�.b�b���S���;GjQZ��������T�S��r�J8V7��+��
�Q)Y�e	6��Gh[Z��9B��t����?I'�?������z�[�?�t�h��OW�c��]�EFd��y������-\�c'��<��|�����G4�����Y&�p��TW�4Gy������q&,J������h6��+w��>�q��6q�@.Dl��#N�M�s��#=.g��3i���D���zk��!��K��`
Zhf\h����a\��J�d�:5Lo�k������2'����0�����)���;�5��>��Za�����YP��h����N������\Wa!�Cw�Y@TL1_ilU��
�tB�d��NL�+�����>f���M������D�*�$�����|S�B#0���"�Q�&-xB^�����G!
���d��eK�Ro7�����W��K}ZD��j�S5.�wp���R'W��%u�<��(��'�
������V���4Q�9��m:�!��./���R����8nmA3��2
�xb������Yf$�A(���B��d����J�T���p�H6���T6
S�{T{\yMXh6b$*�D��B�Z!<�-�*�Z[([=��a*pp��Q�s�C��V��w�����4���q�����t�k���������B�����C�J�{d����@@�������r[��\s��Q�T+<]���1p���D�B�8�?�����������[���V��b�`�
n�tm���&�-�q!=q�����"UmZ��UckB^������yf���u�������;��������U_%�����O]���1LE�N�m+�z��t�/|71����O���~#�����<����Z$	'�6�g#/\5��N��]� �����^�L�K����������E@W�>"��2�>V�6|�A�����[�[�^Yv����G�`F�@���>���W�}���)�Oj�=��D�B��@����(.Qb�	��z���Ib/�~6��`z���	�����ldM��6��I7h+��[w�vK��C{
�Y���P��G6��y*y��K�wT���`6�>
�)��q��;���c&I2"��-�O�����������&���eHo�����_���8��
endstream
endobj
87
0
obj
1332
endobj
88
0
obj
[
]
endobj
86
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
89
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
90
0
R
/Resources
91
0
R
/Annots
93
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
90
0
obj
<<
/Filter
/FlateDecode
/Length
92
0
R
>>
stream
x��X�nGmsI����|���iX��$9$1-R�-�DE�#�`�v��%���K� ��������f���
��S�]]]��u����O�Z�0����;~�E.��.Xa���;:��;���N����E	�MjL��K�}��{Lr����������%[����i�_=�����eR^,j��:����S���yB���6����t�\9k����Z�BG��Ry����h��\�������b���?���7��!�W����u.w�����_�c��v����>���Fl�I�H~�2v�}���������>������|���n���r��%S���m���^[���t\j���Dxk��"�bWF��>��M���"�����/����q���K�S�\����}VI��sh��P�����r�)ir��H��P	��I��#Q5�!�JF�vsT�eN�`���L6m�b��L�z�L���{���8�U���.�0��-�������_j��C
��|!��p�Y�Tla��.���e��Lyi<���3��B;�'�����(l���B���J>�+�����s8S8�H_��R��g�S�kA���_��7��>W��|�}��4��^6���v=��i�"�\�j� W����tA$�;<q��s
�7^5D��HF$�)@Pl��d��^I�����H��}s�6EE�?��'$��^)�b>������������E�	H�����-�zaC������#Hn5���q�jdn�zy5���L�u�1����M���e�;�K�N>���	�jQ����Bf�8���#�����T��M��TKd��E���
YT�p�pg��������'�Fn�������6��hV�<�NO!�E#�9��	�wH���q�v!b\C��>;T�LfQv/�
X�%��!eH&N��=QZ�[������i�t��hB
��_��T���JtA=$�8`��5�)���|����L������������{����K�� �}�y��6����rkB�1�s_�E�l���0���4b���n��������n���np��%����W��C�pL�g�{}�T��f��=����r��`��.�'���b[PFL�n�P'��v�1�[�����������;(7�b�#�%~:�)
|\l?��S�-hZ2Lt��#J���C���c
�Z�4���}D�������xM����F~{����N�"���.;d���,�Qk��	P�6���[���-�t�����i]D4v�]*\�����S`���]��r�h��F��al��e+���e��8;�����jmB(��6�/O�E��CKu�O��:�g��Xq�k�*�U��V�F�m&u���`�Wm����W�y�P!�@��O�L��Mt��� ��t��L-dhwC�����o/mj��%%��q������f��8�^��-��I���-v��6��]%(�����������s�N�DM���I.�N��DRn>
endstream
endobj
92
0
obj
1505
endobj
93
0
obj
[
]
endobj
91
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
/Font10
28
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
94
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
95
0
R
/Resources
96
0
R
/Annots
98
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
95
0
obj
<<
/Filter
/FlateDecode
/Length
97
0
R
>>
stream
x��V�nE��B�������!8���f3��Z�b+Z�� ���?�x�+��?�����=1^{w�3�5�U5uNU�%WBr��������%�BJ�|t����XD�sn�^���v���s~mB�3>�oa��o<��|�R��_�/����^����G�9���rE����Z����cpd�c��,�����z[+j��9�P���zB�h��&���U,�`c�"��g��-����O/���99R�^D/Q����%4�+>�k���Q~��^���}����&��c���!��/�b2��mc�k��j<�'�����j�LB{�
W�F�xCV�'��a��	R(��Q1Ia�m�.�d!���B��>	�$M���A.���D�W��l-a�E�q��������9����c�h���OY�)
�)Ye��reU:��y#@R������%#,�~suTUN�h����;��������:&W�z�(���""�%�P���g(��s���'���h���X(�lV(*��W;O��4�yG���!����h�
a<�e$�"8���+�������O�/���g��jLx{�H|>BHs-���q#����!�k�1{?D�P��.�x������_,Vy�~p�-K�����A�#On8��r�H;2k�����lG4oE
��XB]m�������S�j#�A.TH��-DH9�>�n�	����\p)��P
�����[�������5�ct�'l�(I��f�#��M��a[h%��d:�c6�}���A�����uv��&�y��]������Y���{�-�]���������["���:��otB�������6tg�����%Bb���,%�������Vn=b�0�
���q�C� 9A?�6*���3��c�=�k�]�ME��=b�C�P_���z���*�����z:(��s�N�>��$����!������8����6���q7�������}:��`���4��4_����r8���|��4W��:��:�T��� ��1�?���jy4����Re2����/����T
endstream
endobj
97
0
obj
1030
endobj
98
0
obj
[
]
endobj
96
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
99
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
100
0
R
/Resources
101
0
R
/Annots
103
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
100
0
obj
<<
/Filter
/FlateDecode
/Length
102
0
R
>>
stream
x��V[NA�I����,�f0�~���'������@��&lA����p.�]x��{��q�i����{o����
�i|�sAs���SzA9�\�
�i��56��)U�8���a���8�!�����=����b��x���/����<�H�1=���x.j�ET�_j�p�{���DK52f��C��
���/����c��_��*(G�d������6H��e�%]X<?�*it$;�^��Yf=���dt�v�&���c�l��l�>Y&���y��=�&���b����������k�K�h�B{�t�LZ��
W;]��D+�0zWl�T�3a�P���@xG�q<h`�+"W�>�8����'���}�����Xr�`i���f�3i���D���zk!�(Hg�U�}�4-4�P.�pL����6A���/�q�M��^5a����
����)�bt��j&��zk.5a�����<��4���Rfa�t������G�uB9G64��+���@��a
�Nh����
zx�P������3&pSv��D�eJ���$�Eq��4\��G�������.(M����R������z�!�������#,������~ ��c��M�����P���y8��c����w���YC&���P��QH�"��sc�.��nSDu������f��Y���y]YL�Y���@FV�+���
��F���4Y&K������FL�<�&WK��8�%����m������^=z��(lRX�q�l��Hg��"'�2�����n}���i �"�6�!E/:������^�<�A2������_�}@u�?�i���o7qW&�Z�zN�j
D���D�V��%�G����DNp�(��HN��1
��6r&�F�u}��{{i|��(:�
endstream
endobj
102
0
obj
887
endobj
103
0
obj
[
]
endobj
101
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
104
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
105
0
R
/Resources
106
0
R
/Annots
108
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
105
0
obj
<<
/Filter
/FlateDecode
/Length
107
0
R
>>
stream
x��X]n#EnK~j!-pD�U:��=B ��M�l��3��&AZ�l���K/�x�6�5��p������$!�e9����������\s%$��V1�������RH�2��Ic�7��q��w��4}<����c>���^�'�|���O�/%��9����\,e�������\��+2^lf�
&Fh���S�E)��3W��iS���3��r:J8V?���d&p�E�e	6�Y$hFX�79L�7|�����hN�_�F/#�����Eh�W��o0����r���
��c��K���������94��l�@����<��n��UfB{��R7:<C^�A���jm��seT��0
��]���L#ve���'�"����oP���\�W3�9�y���r�5WRh�6��sZ9��0������(Sf���UA�X	���h�D�����T���n�����	��"���5Y�+�b2w*��\���f"���"�"��VH�0	)��w���G��}7I���P&`:�Y�T\�^�<�����5���$�L����#��dX�2�*�@�h_����O#_�S�g��[8.��'��:�qA��d��=l��������w�0>@�&�/��
���C�q�YiM�����M��6����X} s$��}{lP5�x*R��RVM��z���`��p�Q��Z�D�qm0RQ8��S�:D��*��M�f���6o����M��"v����S1h;_bt�>�f��kT��e����qj������h;�����a�S���]X��A;�N(�Y��nD�,�)�t�A{+u�Z+�e'	�6{���'��:���=�(�H���c���<,��a�9��X����q�\�
��L�8��^��Wz}��l�P �">�<�]N��������4�Yzv��GU\^t�/</��Pt�jBr��(�:��h�}l	��9��(�F�c�^�������r���	<��g�������]l�\��v��.P��c0nX���u�i����|Z	�ysT����f/�]��TD}@C�EH ���x���*5�l�[�KV��F����jmiiE4Y�U[M���:�ug�����8�VJ�'���gu����k%��S�d�Mv���(C���4Ut����x�;��I��^���������0����]��SYUm���,=J[;�4Oi�t�y�l.���q}���_=��v��J��`��^�����8�-KF�? �@��0��<w�L��MJ��U����xRZ�G
�3����+e[�fi8��$��dRy>^���R�����&�L�B-oa�{/T������
endstream
endobj
107
0
obj
1330
endobj
108
0
obj
[
]
endobj
106
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
109
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
110
0
R
/Resources
111
0
R
/Annots
113
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
110
0
obj
<<
/Filter
/FlateDecode
/Length
112
0
R
>>
stream
x��V�N15���/�$�����D!,R�3��B�2$�����M~.e�:I��ZM�ojs-�L@K���N!?���TJGO�\����P�������e�1
�K�f6��5����L`�m���\���K�>\���5\n�!?��q��W�d�VK��0y����)?���j�%w��Tv���f��d�T6���:�u�y)�v���~W����>��}7�).��S���EU��Na �8��X�D�=1�	�����u���7,q��K�������!�A���j���x�\��!7��_2���c��������Vsy[���1���+��>�)xdK����,�8��3S�y�����:��+%
�)}h4z���1-L�t�M�$9M�i'=�Ni������g�Q�A�2���q�&C��	$���V��H��X���s�z���L���8�Ug18��%n������/�����\.�
�����T����Od`[��a&h2��v��a=�)J�e@�
��~1\|���>���P�
����v��,I���2<���1���_��Y8�AF.7��_��3��$�#��i�TvP ���j�Y�d9+:�\2DKu�������[�M�fP>�������I�b�f�EL-8k,��3��3���qw/�0���O�m/��
Xg���!k��H��c�pxbd������x<��4=w�m}�C����8	��w���ls�_'2\��������Fgcv�����:L*{���I�������
��U���Ib�P�"�J-)���rz~�D��
endstream
endobj
112
0
obj
799
endobj
113
0
obj
[
]
endobj
114
0
obj
<<
/Subtype
/Image
/Interpolate
true
/Width
558
/Height
633
/ColorSpace
/DeviceRGB
/BitsPerComponent
8
/Filter
/DCTDecode
/Length
115
0
R
>>
stream
����JFIF��C


		
%# , #&')*)-0-(0%()(��C



(((((((((((((((((((((((((((((((((((((((((((((((((((��y."��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?����*�b��OjZ�� E$��LWS[���s��;���S�O��R��M�+����I����F���	�>�����)tn��K���������\�y�Jp������<�9�T�_U���[-�������u$j	�]T���w����Z��}����u��C�����l���h�?2(�F]�>P����nMU���[mV]h_C��n$���8<�~AP�}�8�sM�I��r�\�)���F�J���,��@�I�"�^����������o�[��d$n�������d`��-����u�j�{�i�1�CF�S9R�v;rM%V� ���F�,k$l��+)� � ������������76��lZ�������G�MjxX}�mGU���[�m�����'(zd�c�O����X�>Y%��(������--<M{�J�wRL���m�8�:*�*d.0	;��#V]���v�?����m��������l���0>E g��<��=F��|/.����_�}zkk
/XkXm �������c� m*G���Q\D��Z��u�6�[�G��R�J���\���`$�����������\����7S��o5�k�[�>���P�sL���X]�(3��@�C�;[��x+�Z��k����e��n�:���H$s�����4/g}��	��:+��}��W�Z>��k-�����Y[�3�I#O�0�pO8���7�����UmN��{��<����vu;���d�������9X��+��g�kZE��t6�V���n%���+F�e�gH� ���/NIZ&��_����j7��N�{����q�#4F��7�s�*%E�
wZ���wc����k�5e�]^�^�y���H��i$����B�]���v9��qL��ZI��k�V��[KAeK5�H������Wc����1rj(m����5�uMkR����o��[�*SW.���)�I@qx��#*:c�����|3������i��E!��u�"lx�v��w�5��r�Z���J�uEy6�>����p�z�����-f�[��)l|��v���q��<s�ok�����u�7�$��|;s�A4��)�x��B��@`�����}Y��k{}����=.���>+���4���Y<?�_����Kp�����q����������������u���oonS���9*��
�����
'k���:���L�4�U�K�l�Z������!����I���j�\�%���<Mq�IpYgi#�kc���O��D�����E5/���O�)�����������%h���(K(�1�$s�&�T���$���&u�W���z������-CP����H�bKXZ��<1�|��E�$3�B�)�n�}/����$�E
���J���C%���b'`�7�r��?ak�����9�B���w�[�/��^�qep��Z#+'�XB���W2wm��]��(�((��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��*�Xo��-.����6�D�����p{T�����Y�����4��^���i���&��%�\�A��@�5V?����X��6�8�]��<� �����u=�O������iy{��.cY���V������}+F�Q���������Ym��I`�J:8�`{Vu��t�-.�DI�yr���.����OLV��S����z~���M$���f�?*I%��gOB\�G������e��A*�4MFn$dz��b�����${3)��h�YH!��!����@u��:���Z|�u�����.d7
�����|c*O���MjQG*����g;c��
�[mZ��h.�W��;��#gs�!���''nrs�����:��:k}�n������8}�bG�b�nIg'9��������.�L{����k�����f�)UR���xU�%��,|A4������[��ZFR�g=p�����nQ@`�~�u�������b1���[vt��ce��'�����*�)E�.���0��	���n�
���!dK���D�]�����z��k��n�om
�
����	�����<eYx$pz�������+#T����Km-���Io�����^.>I
���C�����<��Bk04��YL{(U��� �V�{I���#���E��kay�Cj�������nyn�3�Fwt��t�:�I����]`�%D����I$�������I�MY��B��H����k�5��d-u8L�,�*��tu9��2��5�E$�wC2tOiZ$Wq���%�2�s��V�s$�@'�S�K�����{}*9��l�2��P;�=��h��'{��ds�����{�*+Y��oG%�]�����P>X��m�s�i�Z����YnZ���1$X��W8 �;f��M�����9(�x]"�?��d�����s98�R�J���lV����5�_�����c��<���?�|�����h����'�����>�4�Y�+3�����<����L)Q�^B��N2;R�x;H��_U�:���o��j�R	��ZB��� ����h����O�#	h�����'{���O:�i#�F�Y#g(��<�MX����{�A�M��B��,7E�U�*�F�N���j){I��ade�i���Vs��,��,q�K<���`��Kv�:�QY�`I ��)�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��+3��r��-��4��b�L�	88G��5�P����;LnH�V�WVb�RVe
����>h�&o!AG
7.� ����E%e`��I�_N�7�P�5���E����H��#?�X�i���(��m���e���ky3�� _pj������(�EPEUuV�d�V`oc�n,���U����?
�EUmB�uX���}�H^�b���YT�z]G�x�j�QEQEQTu�Di:d��m=�p)�E�f��[�e��M�]���*���i2j3Kh�7H� ]���7I�}B��k+�@~�\l�mc�����v.�QZLn-b��,&E
��t�b<���QP��C{l��	!|�`88�b�&�������c8P�|��y�s���@QECou
��1� w��E(���[�)�hj*����G��sx��Dj����@���3���85j��QEQUe�-��`��]�3�<J�@p�@8�#�3�s�U�.
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��������*z��������(z���LzE���.��,�n(! ����^����h���d���#g{�j��������@�N����n���9C���J���L�������}�zE��k<�B%�^C4�X�L��	�8������njq�iI������n]=~�P��������V�}��o�@�����p�H�	p7}3�W�QEq��ZU��w����*+�X(���QE����ky�};Q��H�����k=��6����E��~9R�N��]f��xJ��d����B��m��Kwm3]����f���8����z���/��%k�r���:v����\����l��f�h��M����+#���{/�=R��&���e���kYN����|���	�=+�������]w���\n5m
�����x��� >�e�G?0�KC�,5����I���������p�������}!Er?	X��z(bHH�5��]�G��7��F���dt�I.a���
����B�����v�]���+K����&��nF�%�#,H���;q�����P������Z����:�h��d��m��}�z�RWVvw8�}��c���,f��-��
���G*�y�0��k}�B�|7������l��*J��1��r_A[�T(kq�t<��k���;K���
:$�E f��88�~��jZ.�c��N(
i��E�k���s�y����]�;-{XnG������,�����]���L�\�6�������O�p��Dp�Ce���X�Ve!�����:���;�s�:� ����� ��*v��W&vTFg`��$��q��WR�5��s���I6�&~��U^�v���5�ZhV��)<SjL�r������9��T��M�io��k/]Z�����K�G��M���=HW���h�b�C��^�Zi����<�E��e�����v���?������J�_�7;����}w�r��cPX�z���c��1��\>�|+�	���	��?�*��KE�|�#��?����]���uz���Mi�8�H�$�C2�&�Ku\����W�H�+
n���O�6:��q�]NY�_�����^'�������8#9��i> ������u����7�4b����7p>n��2k���$��!��E����Z����]�eR���&���4i/t4�J������,�����z�<��~�j�K��R���i�nha$yj�c��2X@����<����;�B����VE���?�.�X��d�2}O��KV�o�H�EUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE���?����T����?����P��|X3>����w{h�z����gr��4l�2�B�k��?�rX[[M{{b��Q�CqfPH�&J��Yq�q@m��s�=g�z5��g�����-.�icley#1H���n������^�O�u�~��L�Z���6�Av�U��0��u����y���`���w��T����nnu)b��Q�p�O$L&
��aPUB����xk�v���j�����jC���#
�UW���8g$�p���4����(�u;Q�
:���6��[�R���fm��0�w���>5�<74�g�����|J�I�E���|��~������E��W��.�;����>wC�[r�����nf�j�����v�GR����n4��s-���Kyvd(��lb	9;�q�
�?��E�	�zV��KZ�k>��m������q��.���#�zMs��[��u���3�m��|�i�M����_8�ws�q]QEy���R6q�y���x�������v������~����|{{��������M������-:��3+����I�L������H��x?M8>)
q��o�y;�������|��&s��c�e�|7�o.n��=^;+�����9�@.U�����,��,W�@A��Y����w��[�yqc�,��`I(Q����2q���5O��Y�F�8�Kxr%��l9���������{�W�������Z���Z���dKx�KO.%� u�f9��x�;b��/��?^����S�������ZL��`c�,\��@�(��/�mR�V��H�/:����iww�h�Uf)�������S�k�tK���[�-��{�x�ky���YCl`z�qX:����/����m[H���M-���qg`�:2�76y<���#�`�-��.�9f��Os@���f|5on%��y�y����`�H�P���r9���?��-��k&��vl���	���M��{�U��9d���i��T*���c�����Y�K�G�,�.o%���-Si!�8�b	g ��o��^�A��jGK�s�\\G5�a�.#r�F��rH=���4��4�[������w�����a"8?�k*������G,�-F���T��14��w7#`7c�����t�����COR���{a��WN���Z�H"��3E�GvU �	�����VV��rOx��vz���,�����a2�cx(�]z��A����������umNi�eY��
\[��]��#i`C)�c����<)��hz��3�^&����n��,T>P
jt��������h�7�o�����!�������X&����3�^�}*8���A�^\�~�]>H[�R���P���Qe#�ANEhxJ}�Z��}�*�#��"�PQ#��'��j6����j6��Z�Vhf@��X0�<�\�w�e-�[��)��E���Aqm��S�Z�������Fp1��1�������k�GV����'hX�I�{r��w�`���*�P�P0�X���~I ��/��%�6��m�,X�!c$��l
��(8�������Wq���qo��F��9$��Z�r���F��^�``g�W�&����"�.4�{����J[Y`��b@�r$A���8�Z��|3�n���ue3H��������v1������q��k�yt�����{�j�[�����H�5r��tQd��������'/=���I5c�}�a��# �p�G�o�|1j�[&�ys<:�{X��r�Tg#��$� '5�oy���1q�h)	`�Y��W<���d��G�T�_���7�:��n����F�qp��do���NJ��5Q�|�.������3'�/"�]��s�_iwZ�i���+�>�I1;�*=}*������Y����nt_2g�0�+y�nb>��55���>�������������iS��B��&�;}���U��)�����!���+��k�y;��_�wm������s�������w�1� ���55������e
�m��TL����s���qY~%���Y�z�E���I�ake�n�$�}�#*K��8p���p5��|<��9o����
�����e�!i�S��-��v�������.u[U���*�Q�J�.@P�����$�DeAn��?���$�N�a�hl��~��IM
��i+���!�+*��
0�$��|W^x���Osy
����[k� .U�J0'?�<'�x�u}Ut��	>��!�GPIB��XS|O�~!�uM:��_�,�n��]����v=�����y~��+�}�������5�V�E���}���M6��WPp�cBA����5������U�o�4����v���l-&�VT��hp2@9����k�k-�hjV3Kj,�V�UE��30G��0]�d*�1��?�l_���
������������FcV�JT� ���I&G���Ke�xqt�^���}R���Qc&��^B��T��,I�O�j�'���3��O��y�Aw%����,q�F"�"��HAR�pr1���xngA��o����I��#"�����Nf���v�x�/
�5=Q������!��c2��.dyk��G^
s:��+����Af��jz��z��m�j%�����1���G�P��u��������G��X�%�R:����@q�'*p@�s���=�Q-��+;��+�V�$A,3N\�r(D�0�x�~j-7���`w%��4������efyg��������>���)��B�I�Cg����!l�Gq0��������Eu���Z}��w"S(]���W��D��Md�k��^������Y��5�������9!�{t��@~����Y.4�x#����U�������H�����X�G!R������>��<���
������I�v�2OT���G�;�����1-�����N�<�z������vai�3��� ��@����h�$�u�B�O���������.v&�~Fa���[��
n/���������h����p�����s�g���t����X���l������^��Y�P��p��2e��i�'�lU�QEQEQEQEQEQEQEQEQET����7�iS�����7�i@�9������+����oo3J	�FP:u�����������
*�.�-u;[�H2G v��������U�o�O��^�l�[�]iw��_�lI[�q����G�A���f����F�,��`����]�B�'�hW�e�+ 0p}+���7�kk�MK�?a����K[�P���O�,�y��N�Rk^�|X|A{=��D�:lV6��2��#��)ie�!$(��8+�X<#�v�}����K{��U���K��h�%�5�q�t��$R{y"`������BA�pq��xV�5K]Quf�{�Bk?2��Sn�v ��k7O�X��Y�
��=�Y���Ghg�IndwG;J����a��;E/���-����=
�OK�����im�v���r������eR�(S�#]����V���7CM��Q^YaEP?m��|iq�E6������g<n�x�F7Nq��s��-���X5��5���,��m&�8�p
���Q	���
s����-D���5S���i�jZm��7�����h�����j����K�O�xkI�������/~�	���m ._���PUd.[�:�xn�Q����g��a�+k3%�2�/��
����b��4n<I����I5���~�|�>H�����|��>�x�]���u�����Y��$��/�����$�~uq�c�z�oh�&E�����A<Kh�ui��@� f
��#h ��&�:�k�����ZM>[4�V�,��[w2���@���p=z��k�j�-����Ke{��cq���!?28��:l��`�����5��� ���	�Up��E�&RX���?�3���
7�:������g)5��j��Dw��q��+�
@�ek~#�4�u�gM�Z`Lb��!/�gn�3�����i+�k��-����J�����RW#��#�����y�<�]���`��[��g|���lu��4t�F�V���J�����;'��d��H8e$G�P�����h���rH"�R7��s�Qf8��4��m?N����{�S9��#G|�y���t���X��*��{��N� ��[y�`����>���Q�WM'$�������s���_��E������`;��Z6�2zz�[[�F�[����'��G*�F��QFX�N'��V?G����Q����K����%����&#31t��C'���j�������4WG���t�i������GF���������p9���6mo�_2n��|_�K�^j��\�ofJ�v���`��m��Tps����Io�}��������9].-f���#H�$�����V>���W�x�Q�-?�d�c�md�dx�"(��%��s�Z�m���
��u�6�L���;'�n�1�x�',�2	��#�L�ME���_/�i���v�3]<3��.��fI���}�5GM���i��m����>`�I��cxo�H��U��6��^[��������T���F�3�$�?�3L����4�N�V���P�.�\_���TPT������ ���,�M��uoi�A���D�
�F@U�aY��RH$����3��4�Q[Zj0<3�f��4"7)�1�
��gp��j�v�������i�B����z%���^gu�o3�GC��[jZM������-�����W�,f'Yf2*���0�A�����8S\��-z_2z\��|W�j���O�y��'�fX_i�m��F��c[����t]t�%����5SK
��2���;�w�������/xBiR8�U�<�B���	,O@�MMJ:��U��CR�Oc�Ey���&)pmm�F�KI��%�oW`��
��iS�zD��iQO<�k/��;Y�%�(e�0�-�XP���2mE�7���%�zx�3Z�fv2n�����j��u�|j���i�Kzd��K����,\E����^B�?x��e��w[���oxyo��7���s�9X[Jb�b�B<�v!$�7��g5z���M���u=��4rV���>I���2�#��s�k�����'��Ye��]���p ����p>U<*��tOizN�o�����\�!6�����0l�q�A�2W�U4�����/�p��u����Xx���qIf�^���$my���o��0S��_������tZ�f���e<R@�Q�����}�0T��Y~-��o�j��������4��43Z�p��e9�9��i�=����<;����F�;����)m�m���T��l{��1�v�����;�nx�X��&���,�����hf�0��7����B:w���K��~+v���<�[m���8����hpG$
��'iu���<.��1��,��M������=�e���_��-���jW�/����|���<���Sn�[?)��5{�i$�4<Q��3B������P��&�;y,���$e�F�����[���h:&��=��4w�P����U�|�,�^� 1!X����\�����?�����O�h���Mh� 2y.��;s��$:��������B�[M2X�{�;�����H������C��#$Uh^��D��������]A�+X���I�u�TBS���Ol�T��.�.��g�����6�C"?�f1��6C��VV�e�k^!�N��T��css-�7D^�5���;��#����������Iuo��m�Xu���x��-����%���1����(��|o��*����Y�����m,���|��*�������^*��<Q�������"Gc���������ka� ����>��;�;�oP�>����|�q�p�*Ku-��������@�k�+����=��-~��ZE�~��.<��I��bs���y�D����K�)�dy�&��f�F�����O����=���0K���p���o���`q���a@�p	�����;�I�����2�5���X`���@��8��l�>�eqm�x�y����rB�r�"Bx��+}(3�74m�_��B�//umOO�l`���bpa�3+����m��W�5[+�N�O��}������0��w/$`�zX�7���%��{?�-]�5������v��i�+k��q3��F�=x_�>�0m�M��zy~F�QT@QEQEQEQEQEQEQEQET����7�iS�����7�i@�EQEQEg^��U�"�R����N�SJRQWn�B����Erw<-m���N}"G�
d��\��Y������?�"+�X�<w����yN:��F_s=
����m'�yhz���,�M�?Ws�<#w�ZF��*?�p�%D��m���_��W��S�����������������'��X��k'�j
>�M�?�u��-e�N�q�3���*#����������p��#7�����?�]]_�/���&_�����S���k��������C��F_�������]_�/�_�/�S����TW���2��'M?�����E_��i��?�r��W�K�c����������h�*����1�������(����%����o����h��.�K���?�\C�e�8����W�/�;����
_D=C��h*X�/�J@��5(���
?�p�eoT��������=2��-�*�^ly�7�H��9��O�j�V�f3�=����Z�B���j�f2��JK���������wZ��2�����S����8�qvaESQEQEQEQEKU�t�^�U����z���
��@=�M\�4TE
�
��R�Q��QE1Q@Q@Q@Q@4�M�L�K���3d�"	���8���u~�)%m��z���)�(��(��(��(��(��(��(��(��*������4��������4�	�_�F�������)1�;�?��q�=�F�u�xd�nA���S )�����S4��p�����&�����J�7����5����7O��6���{�(�5q�k�]F;��m�cn�*Kx�?
hwWg8����R*�����$��"o��?�����>4���ze�f�HAH��I��]������0]B�H]OT,�]���o�`�3g�L�c�m�kw�Uq��U~������N��J�d�P��v�����N��G��cR;��~�����~d���l�����,���#�b�$�$�I�/�]j�g��������X�"��	8�fc��p:s��a���=3�Y�>qv������}��������o�Z���������E��!�j���!�����T[{U����m`��H�''����%��D�^���C��������t��HL�����+��)7���<����?�6�[gB�u�}�~*�B�"O��_
����:��0��qY[�,2������ ��n�G�x �}[�5����>��K����%o�|j���������,��	�]������?2;Ac�/�N
���j><o�-���t�.��-�������[�.p>�#9�/�����=�����t6P\|�����L�@r�O������N�}��s#���`zW�x���������.���eE���G
����	�
�����]n���i���z���Y�\*�0\]��+���A�T������cROck��J�|Y�{�
<����rxuTy�p����ln^��Kv�z�u�I��a��)uI������
��R��b]�?�@�9"�0sv@�����A\-���u{�
��xn�������8E�P��G;����#5���������;m����2-����- 
7C)n�@5����M��QOU�4����W+�o^x{N�����/��02��imf�h����q�]�5�������\����o5W���8���+��;��+[B�bC�T/���!��?�r���5�*�Z�,�k)	�9��00M����B����� U�#�:��e�@�]���0�k9o�IUue�c'iG��3��Z�c'%���mK�>�.s�i����F
c]�5�����?�	_�jO;�f��Caux�Q�F��]y��3����a�9 g��l�Qz���z��kk���Es�o�A$ro�|�E��nW�w��������O���K���:�^�����-;~�+��w6�q����_���\�$��}��$�������z�����Is�����C*��(�l����py�^���w���`xz$��}���fi���DxBG�o|V�)��W��������Zs�]���4r���>�x���5���0�����kSI����(�V���'�D��G�9����O[�z��i�@.`��Qi�����H��b�#���g�2�S��=]�����wm3F��,6�2��dc �|��xlE�*?Ik���#��������s����_Z��=��W�G����������7+�~��7O��d8����u�x�)��N��WQ7�4}��{sUG'?eV<�������/�a��
�G���V�QEWY�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@@����s��J�o������kZ�?3?hp>4���-�)<S������� 9L3�g?\�Y���O�%��Q���1�E����Kq�7�V����`=�q����#Tv�(����|?/?N������s���w�}����=�c���F��(����-����u��xCH��������{��P��V�9��l������/�C����?������w$���_Z�����[=����u`����q��A����^"���k�� ^��?�a���fNWu��ww���c�iS-�Y����K���/����=}�:2�������?C�G��D�L�d*vM��un�+������Y�Q��;n����_2=��$���,�e���yZ��������X��=Gx�_y�W.�PMT�+z;}�CF�������n�u�.����c���8��>�����8��Y>�����oco�E7���,og��C��f��#&pM_�������a�L�7������<�6����K
_I��oV��.$�>�a�J��Wl�om��Q�j��yi���Z�Q�;[�(���j]��R������g*�;U�*�����-��]�R/��Q�K�(� ���#�Y�5�3J�.��|�
�s�`��������3Q����;K�f�3	cI�i��q��r8��QM�oV�.e��������_hZ�P�2,�P\X���T/o]��( ��Z���<�F�:PH��*$��w����I�=��k���Z����,2N�A;���B{��OsY���/��[W�ud�/f�[K�6��	"+3!r��������p+J�#t���>���z_��4������<��nm��$_<���_�<�g<�t�x*4�n������l��[�K�2���:�ns����Ek*����I������������h��-�M��`��_�
��F��|1>��6�����kt!�!���]�6��8
��U��+J���8��OA��{�!������1�]�������Q�
���:|��b� v��Bi����mVx5KI5�J�O=��La"���%���������rK��z2��3�x"�i���-��M��H&���b����pel����c=
X�/�\��&k�	����U�C���g�X�����+��������u�iv��V�g;I2��4J������y�P����-����2x�}KXK��n�;1�yQ��LE�N1/B��y����������(��m�$����*(�N�=k������rRYXv�������.>)Y�������(?�O�\Us
��'��t=9F:��h�����j|!�c�5�Vi,�n�
1�q�$�����I0{�S[�j<�'�5��k[H�K<ye�Y�� ��=B���?�|k�q�i�XF�����M������'��k��9����:~@VU�s����6�t_�������W�|��?�O���>%Y����������+F3\����X�S���M�k��������>��-3G@-�]������B`UR�Ts���y-����'0�/
��Qn���V��%�}���Ev{?3�����E��=��Ee�G��hjQYtQ�����V]{?0����E��=��Ee�G��hjQYtQ�����V]{?0����E��=��Ee�G��hjQYtQ�����V]{?0����E��=��Ee�G��hjQYtQ�����V]{?0����E��=��Ee�G��h���7�Z��*z�@�����[����O���j����c2�����y�.����{�}+[����}�=Z�4������?�|��j�<�3;��8������H�Svw4����;S#�������3B���X�VX����?1�T�N�I
3�]�*z�L$�ReMsI�sW���f��)�}�#h��s�|��E������5�����������Q�T�j���S��~���'C�U}G���*��oqs	����`���5Ko����t���"�o����}�=Z���P����w�;�R��T����g�^4���K&?��'���m�R��G��_�"�s����}�=Z���/�R^�c����:p��#�G����=E�����������M�����W���?V��$�~�}R�U���h?�/�a���u������*����
����.��K�b�{���?�Uz�����)>���(���V���A��I����M��O�	������~���������>���z��a�?�a����}^������A��C��a����<�������a�'���>(��}�
�}s������/���q{��}Z]kK�� ����������#�?��7������������7I�"��k������G���K�H�Z��.�g����V���_���6�"����q���h?�E�E������><Iv��
����w����}�=Z�������0�����q�}!�<�|2���?�[��|��j����"?��l�W#�b�;����}�=Z�8$u�_=2g�f3V��zi�X���
���m�LGvPO�kj�K��P"�8�����Q�T�j���O�V�G�V�j��d���(*"��@�
u]�*z�eOV��F<��E]�*z�eOV��#)QW~���G�S���A��TU����Q�T�j9�r2�w����}�=Z�t��E]�*z�eOV��#)QW~���G�S���A��TU����Q�T�j9�r2�w����}�=Z�t��E]�*z�eOV��#)QW~���G�S���A��TU����Q�T�j9�r2�w����}�=Z�t��E]�*z�eOV��#)QW~���G�S���A��TU����Q�T�j9�r2�w����}�=Z�t��E]�*z�eOV��#)QW~���G�S���A��TU����Q�T�j9�r2�w����}�=Z�t����������J���������J����j�jzm���1�����z��{b��MX]6�p�|p�t��yi���'�8�i=�����q�.��7s�%����<�p�*��_��A���}k���i�H������F�����UB���PME&9���
(�����(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��?���o�����?���o���'��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��?���o�����?���o���'����>��l��mf�ye�YQ��6�:��8���wb{)���S4@\g����@'��~��&��-���v��W2�	0��[�p+���Z��l,7X�G*��e%	� :������i�6~������y����D��a��8����!MTR�;/�����F4���;/��������myqu
��c���\)������8���bB�6(|�\����?�3��/o��H��l��������H�K�l���k������"�A�Uf�+nL����T�j�y_�]W����i���)�(����� ��c�{��y��������n�-��#���F���[�W�_[��+y�9�����oz�Oh����E���_�����E�^^�7c�l�=��1�udS
xF1�K]f�
xk��8����b����@�o����!�x;�(��|G�.����}���V�kI���SG�.Wk�������8��1�vm>�)�������,f0�a���>e��<���������W���l������i������g����<?m��@��\���
2��d{���+�jU���p}(��P�MJ;�m���cFR7�888�## ��V������4|]&�j!#���\}<������=Z)�$��(�$(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��*������4��������4�	������m��z��6��^Y�"�NI� ~4W,Q\��E�����[�.�KN�{��,v�S�
��](���K��CK������"�q)��$���)�F���I�2j�X/�(��b
(��
(��(\�P\����
$�j���H���`�1��$d�8�M_�gTR��@�I�g�k�M�~��X����"�3R�����'SH��+������kv'��C*�/�_
E��x���;%��&�w�����?��������h�%�(�Pt������F�|.:\��
Q��?��_z5YF9����,������3�6���z�U���sp>�5/�a������|z��2����\J�Q���"�m��
��o
K�ux���:�5�X�;������������G[Es�x��r��j��(_�Z���s����2����#Z��9m%��������L�����������uh`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE���?����T����?����P���9��Q�������O�.�Z��C��5b���M��:m���%�4J���T�J�`� ����M��q��b��X��'�)F6VEI�;����]f;�6��y�(��1�����
��p'������_���_*�)f�8�O�7�f�+�2pILn�����&���������s���I��o��-������g��"u<��>�����?�F��]B�KM2	<���7`��2NpN=q���5'
Qr���/W���e���z�T������-_��zV���i��R�I��Y��������n>*�vJ����IN�?��o�<+�G��kG�LV}2+iE�������#����<��uV�������j�%�I����Y#����*�Eob��F�2��Q�W�_���m
!M�}��������c�.�qoog�)�B]����?�?��%�`�X��?�����S�6�t�f�K���c�����2��z�Q���	�>����(c���}��]���@_�>a;O<�qK+r����V�K�jp�
8C�)������0�!�R�v�.��m��������!��j�,���Al�����S!�����t�v.IXUg��:O���'��$�Kin[}>�p�Z ������8R�XUC*����W���{��������J/�>��]���3Wb�����o�����+����S�h�1����$�\y#{�S�r��x���I�I"ux�VS��� ��N�~�/��,�?�����������
��m�����J����n?���5���-����f����M[r���/�V�Fs�i�����	-��p��$�c��I02J�j�@�#5q���OW�������������1�'�7]>���1Q\��@�6S|f�o-���$�8M���)$��+��������t�/�k�����IX���������A�#x�XV��7�'�3_m����f��t�S�l��*������A����`V��&�!�N�r�V��`��)�����L���@)�j��j������3�A�=��8a��U�_J�ack�zex�5��Z_�^��\����?��	t)?�	��HO��t�=��gB�QSO���+L	T�I��#��H��U�/�V�i}qc5����>!�$�:q�~����r0���f��2�?�V�:!��`��K�g�	R����k�����7��i���&���31�-�����Se'�������c%�[�EIY9G�p�A=*����#W�xl�%2���[yaf��(u������Y���n����n��c�rR�����
O�F�����RQ�����M�;�"����H���]����#[����yM�G����h���$U���##�T��xo����-�/�J�S����Xg�������
����������G�����|<_�o�]~��=���U-�����9�v�����]@!�A{W����^�i��G��5���[t`f-���',01�r�k�����h�woi��V�&� 1Q�I���)�<+��]��2]c���k���V�z�}'��KO�#�h�_��0��E�mS�\Mn��>��WQ]�F�T������SQ���$QEY�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET����7�iS�����7�i@�?��������.�Z��C��5OQ�H�A$��$��H�2���
��H%E3��n�3�}��?�P��<����Q_�7vBk���Id����B��1����:���������������7�y����8�[�V�+��h���N����� ���N����Z����FV6��d�����r��~�c#Mo��H�Nw��4���\���SY�%�on����
���j���^{'��E������\��i�e�g;r{g��6'���G�i��k�_��?c���	O����W�d�z?]��V7��_��������"�2�	�y��Q���:��
c�Fk����K�Ksg&�qr��W1�+K�V`��~����c��S{)(�n����F2��}	��K���50�f�����J�[}0��(�f�����9qF.���7n�U������>5K�K�4�%�2_�%�Oeu."�]el/!W��Mj^[jV?U��&������w�X���sJ��;)*D�����+|kZY�[O�+/��6������\���g��������rX�_�������,��V��:t��b��(B!dx�������yWY�;mJ���N����jpEcse40KH�I!u�2�?tA�<�
u�
��6Vs�\�� ����N�Q�p9<
��vI�e�[��9�g��[����v����6��c��cd�4{��bB`��wq�t������'�W��������'���Tmf��������kb�X�l���--��t~|�q���g�yY�?zq�>s�x������_A��S^�.���������O�<0.g��CL����v����V5��7�����:9���4����A2#������x9l�8������������9b���&��w�y6Z��|M�m4^_���{5� 1	��M������H��������/�=^���5{��u!i�������[�gzd���w>�iq�Zj2����$�7�d��c89��Gn*�tK��Z��RTW_Y�����:������p�qS��$Y6�0��*_���xz��]'��f��a��6���6$�&T�����FI9���������h����H�2��Z���8�B���x��_��4��L0��j������$f9�w_3�)��l��<:�x��$��n��E���x�<�#!.H��2�������#U�r[�������(�F�o>k��@�����O�{r�y�2H�
J�!Xgvz]'���j_��(H�������v]�r�#F
���1�u���[Eqk,s[��H���+���9�IV�n�]�<������u[�;R���I��i5
S�r4�$
��FUR��B�����wZ'��-7P�Aymj��em��yRA����WV�B�E<O
�!upTb�3� �E`k^1���2�y�[��U�	�?�r�YW��~��������5J�������#��6�<~<�le�~iR��������1��3�����%��:N=2��{��cY6*+����������M�����
��y�-���s���fbpY��zTxW��+��mzd���A,���;`�:�2w����9�����K��Y��m�}OEd�����S[��'���bO�C�|W�5
��v4�adn2	�����7��=g���q��:���p�]ZOV�}���8����SV�R���]����O�0	c���1���@8�����I]'QQ��-�@��'ugH�
��@bRe���z��QEQEQQ�O�/5������T}I�(��(��d�,0���)bK6�$�h�Vn�����y��+��<.$�H�]J:��b�@�l5�.e�^f�y�ky x�
�T���8e=;�8I^�a]tQEH��*����-b���	��ll$�wc�<g4Z�X���O�0	c���1���@8�����IEPEe�Z����v�<w����m+F��v��V���A��_^�cOr��$�
�Fl��U��9<���zi�\�ET�QQ�O�FK�c�0@.�d���H�%���y�SE[�������2{�@Zi7��E�(��(��*������4��������4�	���������
S�?�������'�.�Z��C��5OQ�y!a�#�?����$�Z��������y;z��v���]��W@r~�M���Sh�k,��o�F��	`{�'9����s�W~��T���S���%���yE����p
��]lZF�
���O�K��7
�z���:�M����{K+h'��$�%V��?�e���E�-O9�V+�+�w2^�w�J`��i���#r�Bp
�_�}s��iwZ�Z�����S$�Hchz����L��^��/A��VI-����P,2����7`>��'L�������]�[F��\$JKr�I-�`V2�F�R��:ib���tf���y&���[�y��o�k��O.\K���=y����9MJ����d���R{�7t �9A�Z��t}2���N����&t�C�z��f�s�i�Wq�\�ZMu6M$*����#"���������;�12����(����O���q��WJ��L��;*@��0R6�$G'��Q������SU���?g����e#s'!�d��������m$��7����9�L`�x����`*�L��e����%E(�,*�������_
W����Z2�&���g�Mm�������[��,
�H*�F��9x���i������k6����� ��k�'��G�^�u���d��J��d+�n��@	S�t=.�*����,�d��\�����"����*��|7�7��yn��'G��4��mj�M�c�D}�.vl���#k|��=y5&��B��>��O��u_&C+�d��>[�������E�o����J��>Pq��������w��Ze��~���>��������Y�����?����o�>��j�k%���L.R�4���2�<��j��G�k;)��6�/e3H�Vg�����l�NA�<����=-�V�j�2lJ6��8��w����g%����N�-���������nA��=ML����_s�1�FY������������������W,�i�im�^@frCy9`g��~*��kq����;
����{�TF��0���HV*6��9�]���[�]J�Q��D������KpU@��+�8��mY�6�JKMR;{������
���H�u���]��t=�V{r�����������m�;~��(�7?�������x~��KpW����IH+>J�d���/j~��iz^�*��?��\�4��HX:g�n~�����>�����t*	�e���5�C�����usH�4����F�eao��U�g�
�G������$���~*��O�G����|:7zKJ4D��i{���T����0���E@8�m�����'�
��"����}17�\���]����8�{���t[�[N�[����"���0>n��z�v����0H���������3�QO�����������������h^
�Y�-�������n�;$}��)$H��e��r�7�_\jw��nc�K����SQ�K�J����WaV�����f���D����B�L�����_s�$������s�j;��v�5������������I3���d�5P���������eW8��\����h��a�u��
��Vmjn��L�#�x�gie�88�\��1Yz^�i�����	���Yc�vrF��.������ny�R��<����w��Mj��V����� �.m����0,r�G���
�`I���I.4��q���]�_j>E��z���$a`��!x*~`�8��]G�VMR]'O}M1������������C��
U�Ht�:=M�-v��&bz��������n�u�������������(��V�(���F���8#h��/���=99����\�.��i3������K.�$(e"7���JHp�g�t�z�����������Y]�l���xF����2��������{|���F�qx���ym��(F6�#8��DT��weo��t�8�h�7���{s�������N��nYm�d��c$��A ��;�wR�����N-����[L�2i�g2n�y�
��t����mL�c�=_N���6��u��@`pi�����>W���a����t�a���(b�6�V��&L��*��tsa��:������ME��m\���Rww^2�n��^Y��XO�I,��k��;H<�\���Ld���cEDP��@��R�3ww,��L�w� ����mH�,�t�7is�j�(����+3m��S��s�n�q�j���������{u�+�����dX]�$����f9��WJ���am�XZ_[�"��e\���`�����A��=��6�ckso-��V�;�R�Q��q���Z	(�?������q{�&������������R�{�w"�K������1������o�=x�&l<;�M�t`�Z���]��B�������t�ch��V�c��_g�/f1�oLc�R��oC��������7n��S����m��R���{�)��
J�����sas$7k�^����0;�9�s�> j���������{`�^���I.cRT� �F����M���6VV��@�����9������)ah�V�6��P��WHc���J�=�����-�5�����U��������q���J���l�bGb�
�2	���k���Cu�WV�������-Y�Yw$r��d����\c��it�)��yl���c���,c8F8��nn1������me���t�m���$Q�����N��\�q��Z:��l���������b|3��
{������j>�G�����I��};����M�t�C<f��g~b�� �*�^�,�W�t�-��`������A ��0r�52�	9y�&�n^������#��>�f�/-���F�X���c���WU�wf�IRDE�'w��k�O�h����������G�b���� �<�;O
h:TOc����6�W�����ES���+�}��(S����}��l��
�������j����k7���o$Xc�g�B�
�v��U�=^����o��[M�Et�Ku$���i�#1	���q]e����:��
�4�#@���Y�:�I$�&�S�>MHj	��o��w�E�B_39��nwg��9�uT���>]�9i/���k��{k�f��6���X
��b1�k.�nH$q��?�ld���4�:�7�U��*�w��N�$��ch�NN{��������mM�����0���~��c����z�u
L�nm�5
:��{f����4G�T��<�X��^���~"�/W�j`k_uM3V�/��K+y� ��kO;y�����_Uq���������H��z%f$F���A��6��{�j���t�J��-v��Y��af�-�����
������7{��>��L?>
���n,19��'�=�~%+��yos{��P���H��K����X+�8���q��uO
�{V�Y�]I��F�\��#�d�F��_jB�j:�v-�B'��O)E\��S�H������~ ]j�>7���e�i�r���&�e�H�H���.����1����k����f�����o�z���$�*1t�s��Wo9	�����w������t�c����(��j��
��co%��gm��`��%Sg��8S�x|���W��Im�Qr�y.���� �mR��Y,��k���#f�512a��Q�6H#p���J�G�]M3��V2+����K�`��/#3��8�lE��B��Y�\���[�%�+���}I9������Ri���� �kuU��Q�����A�I���N��������W�n$��}h��R�]o��Q���p������v�=���{P"%��y�0
v�'�=���s��)|%7�b2�i�Y��0����������i�[�gk
��b8!E�4^��`�
�8��)�Y6����Rd�QEdPQET����7�iS�����7�i@�?��������.�Z��C��5OTu�N
H��n��[Fd`�N;s��U-oM�X�n������lP��=��<����\�u�*���n���]����8�g�B���]���Y@*������|����O5��o�O~t�3�p���:������O��R��CHYl|�������+�T�u=*K���Vw��%�Y4L�69��h�Lg���J����Zi����uM������C<)�I����m`����K�6X����������c���@���Ke[1�X[�RY���b1������|9q����ymspm����G��T�C������d��;����m��S�m*�|�ak@%Z]��c�A8��O�Yzo���M������|����oc���+�8B�(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(���������J���������J����]k�]���=As�������z���u��t?�T����_����	����UQ�I����6��_Y��{�$�7�e#?�'�4�&�4_d��g6|���V'�����	^x�]J���X-/m��$�)U�>�����P��D�Gk
B�R[SnY��C�cp�
�dq��Tt;w�����w6Ri�2����(��n��*�\��5����n(�m5m6�"�P��m�O.)��i��8�sR��Cj�"�o!
���cv�BI�{���85����{=>�,�7\4%c��?F.Yx�\b�mm%.M�����{mo����#�(�m'm���:���Ak�j@���]�k�V��[vV����W�e%��^8�@������&�9]����~�W����M�R[�������h8�I�A����"W�uK]J]eV��\Dm,�H�r�����p,1��(��^a���M�����y�8��b'�C�;q��q�*k�Z5���Oo�����;W�Q�����ld\����&���K)Z������iB���o6v1�5���Q��&���g����o��x�(R�aJ�-���d�*�I�]��Q��^!6OK���iT��h���Y���8Rs�{���w���D-�����RRy���u=�#\���'��k���;���9e�L��UH�H��J�,|��RZ�G&�1���6Zb�2:����>g{/�AY:����[X��x����Up0N��0�c>�S�5��y�m.�8�R��[v���`�������	�.i�n���K��&iP}����n$�Z��
����1�A�g_1Z���u�
��F�����*,
z)t�K�;���D�1�z��@\t�����=z��>���a�H�Gi��I��^���hjz7�t�D�����4[��iE�`�3$`��v��g�5�����e��-2�P�{����s�!vu`3��y5�>��)��k��&��$v��������,I'�c�G�g$�����y���Zkt�dY]�r�
c�\���;�R�{�?C���mJ��U�����XU\p����7�������i>"�E�}7^���TN\�t����*��Y�e^�A�������x{�me5�2M&C��t�����q��*x���"�?�t�Z�KT�&���d��]�K��B9�'��/	6��xG����w�;�l����bP$��qe�!A��i�jk�v+m'I�WX���-g���dcbJcGLUC��H������4;�2}J�Z�'�����+��(��s����������n��Y�:��N�,j�.���8�>��O����������ZXyZ��Z����>c���2��	��R���;��z��mm5/A����=����1p�&#c����s�zN��i:��h�������-n_,�6�px=kF�������
E��J����i��ZTVp����a���������E����GY���pt��i4��#�cW!98��hZ�+O��;mnk���7�n�V�X-�(�92���2��4=��iu���B��������*	�A#���F*_�h���*K�C�����6�U$dA�U&�_�NR*O i��f��w�3�8�T|]�����A�b�IN:�E��B}�������'v�o�1R�M��H���y��B�r�H���T��������S�4��cx��Ok`����p�� ��.�WQ���}���XQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@@����s��=@����s��=5����Q����N������qgwsC*��� ��������-�^0��p������8�S����������E8i@b��� ��H>��R��WEJ.-�QE2B�(�
z6���Z�[4�
�b42X���*-+I�O����\]]\�&��b���6�=�����*��waESQEQEQES.!��	 ��%�E(��*�F#���Bv���V6p����;��A�$����QM���lQE 
(��
�����J-��,�Y<���V8�OsSQ@Q@TM:�59uo$�Bef$�;T���8�qV������\�m�[��X".�LodRHR�H���}jZ(�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP?�C�\���OP?�C�\���OU5at�m����%�.�Y�1�<HV<���u�uKX����Z��;.��5��;��;�H�\�*���I�sN:G���5�5��v���b�8��h�>���������m�,������eX}�9�G5K��������/1�7&i�1H��d�gj������F��v��%Jz��u��t�V-��#�������N��<�tkG�w
���pph�|C�|,�����xM�Iv��X���c����������Fj�lmQE��QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET����7�iS�����7�i@��t1�
���2G4s���������u# �kr��s�9)�tT&�%(��k��M��gz��&�ew.��Y���c?}���������i����Oayo����$,�/"�I#��5����}m�z����=��h�������F�FE]�%�;������k*�wR[��O��Y�B�[n��mt�B���gc3�nwfPT)�|�����?>�xf���?g"����=H�C����h8��������.�����_��9b�I4���p��+��
(��
(��
(��7�����u?��@���ij�����b����Z?�5�8O��?�j��?��?X�?�o�+'�����t����NO������w�����������[����K�����f��u�/���S���_��#���#�_����?H
9~*�\���_�
G�����}�c������wtW�<(z�/��O�&�������Y��H��i�f�Q}��eX��F_��#���!���������~`�����zU��R����N���k������������L���0# �)kC��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��(��?���o�����?���o���'�������I�[�sx���_)X��`�������d�lx���~��(`�{��A��'�f`b%�.��,1���u=+���H�D�{[k������R�B	$��#$��O�iT�Z)2���h(���B���/���
���T� <$k��}w�U��x���/���o����IO20��?�Z����9r-e�o��z\��"��4�_.����j�~���^��'o5����
��?��
��z|wz���=����gi?
�y>���O{p����'��d�o�x_J�P-��I��������h/�������?�U�W������#G��[���������>��T�_�Gg�P?3���GQ�"*�IG����RO�e��V4��B�\��������5���W�W�����V-�i�s=������+�h���2������y�j����K�H�!�W���h����_����������������a(Gh/�������I�����m<����Z����
�|!��M:��1[�V�������k=���bh�`X��|
kxOEo�����f+v�~����_�y���4��Z��d��PM�/�?�l��������F��+�.8���3k��o�>��]6���?��	49���}$'�����X,<����������&yK|'k^t�f������O�E�u�s���I��NK�[�������/�5���M��1��#S_��_�y@�~!�G�3M��#YW�����|X���={C��n����_�^�@=@5V�O��B����
���j��u_������p�����[������|k��`���P���r�-�&�
���q��MQc��,����N��sm���G2xQ7�i��g��@�"�m���Xs.��&	�����p}������=n��<'��U�v�i��;|�xW>����������t��
�����������u�g����QZ��EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP?�C�\���OP?�C�\���OP\�������@j����]k�]���=6P�72����p�##?��Tw��IsI��%�)d>�p#?PE5���xB[��'S_�(�#����#gF�����F����c,2���&�4�k���KFI�I��27���1��'���N�%�MR��'��x�;|�l�
����q�J��i6�u���FG�y��0��J��8����vT��������V��Qz6����xCM�����������a�����1���k��:���ML��qs-���D�(X�B���'�0|����
�E>���������}L�u�]�����}F+m�=��}is�@�[s�Fs��0#�68#�+)t��^�z�}��-�s�?�W^5�Z�-�������:����,�k���[X4���d��^�8�\
�����<Cy-��������b��U�F��xp��F��x�5��iim�������$hd�1F#����	�s��eYxF+
^[�?U�mm��k�4��Cn�1�,���<s]��Rw����_��x�]*�}7M�\4pZ\��&��.D�M�F���$`��&�,������������X��#M2�10�����������������[� ��d62�~Lr��#��b*������C�o}cx�-�����q�p��Y�]��<���[v���3����/4����������M��\�"��CN����9���Y���+|M��t�_O���K��b��I�+%���fM��;[�����E�o�������uV��Tu����TX��*���,8������G�j6Z�Z���k���f=��,�H%�����(��{;���w3����u
?�W�V����y7��W~{�����b>|�����k�������i7����n��2��qr��J��6�F�0��}
?Y��Z��������7�D�M%����I*:0��� �������8���P�����=�gRT�R��j����k��]Z��Nk9/�u�x��c��X�f<��?��j+�j�����hvi��_YI�L5x��5d]�4q�,���=zWV�u�jK�5�
~��+pcEL�hn�d���xvb���/ot�B�]"��d|nBYJ��pA��TSqR������|e�j�������^�F�'G�!��D��P�YX���pG<k���z���[��+�]?S��k�H���.DE�!��?{��u���|!�7�,��uKK[;mA�����%��%��YK9209��:e�~�<#7�I�kI�<�4��y��)l}��vq�����J<�K��W������/�A��U�qk�j+2+�mc(H�f��D���d����W|�����w.���$��'���L�(��X��9�K����������_��@�a�)4o[�Ze��WW�K#�sw$�M$��K�@
B���0+���5�������O��2xR��Q�um8��p��k���5gC����moA�����io
���8��_1WtE��h� 8��J����W>������5������3p�'WR���Q���K��`Y
Jh�mI�;��.�'�fUL�U_��q���9<�Fp�\��o� ���cN����v�\�����oz�L1�C#���N����	?1������k\i�"�K�����\A���p����p���x�Ii�x|1�h�Z���z$���p��$i��K�f'���
��</���W�s��N�K� �#C!�gw�j�:M�6�K	&s�
�������o�������
>��p��q"@|�!�������
[��#����_>�m���-��Fe����I��� 7�{C�u���A���j����b�w"!f���FA�s����1���v�����h���@#B�|��=���Rt���~��'���_^�����An�����q��[pR`�9�(���OZ�{�����4��c��$��[��-������:�Md�G
�x�Z����L�i
�M�I60����;A�5�4���&�w�g���Z)`L�&��px(P<���:�g�t�{��v��.�/R���e�K*���0�������G����,�����������>��
���:��"{
1���/��(�o(�������Q���m!�������������X����7o/��RS�X�'�^�=����v���QE��QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET����7�iS�����7�i@�?��������.�Z��C��5OE�o5���3�#�U�-#�����)�Xz�&�}�"Z�����fir�H���c���'�V�r?
Q��5[Yd��-�;��������a��`q����|\#N��6_��{�M��CZ�,��'��`I�n�:Q�k��<��=���'0�����C�^�Ey����>ih�U���G	����;��������|N��`�f�ql��4*O��F5�i7����m�[���&>[}0���[�Vv�HRxQ��C��=[������X�'g�8�}�*��%%�����^�.����������3�GWP����9�-yK�0������^�w����S~��#K�S�A}��($�$g���Uc�JO�g�L_��j������N?�_��W��x���B�p;��O����T��q��<1�V'�����E|w^���a���>Y�J/�=F��X�0hy��Z�M����C�[�}��b�~�i����"Y&a�����w�W��&��T�����_��n��_�n?�h�t�_z1yf5oF_��#��������!��w�S��������?�Q�u������_��#������E��'���e��|Q��r�Y���K�a�����U���e����;z+��������j������?��i8����`p?�k7����_�����.�����N����"����O���{���Z���5."��������G����^����5X��!�5�\������/KRuB����~���4��7������Et���b���V����J���<�-��~��){lL�
v��������Z��Q���dX�~+������u�\�#B�3�XS^x�����h��X�G������i~���ki��V�F�0��}Z�_�ON�E��5�a����U��~�������xC����D��5��#����*�P`��WU:P�X+#�������ZNM�
(��1
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��������*z��������(z���u��t?�T����_����	�)��Kp����6�����.�Z��C��568og�����e�c��f�q�Vh��q��0��=�����k����s �X�1���0;uS�����y����i� M�WZ���s��0�M^K�[�VEyV2G��u�Un!X���I������x����Z��G6�q*m�0Z7��lw[�i��X_[�M�7��9_-���Pwcnr��p����+I5�KV���������d�iu4j�0v�pX8�t������m��Z��Ev�Mw,���y�#1T�@��8�@��vj6���kZ�����dK�"��6�1������Xq��^[�w���������j�������"y�L���������H�j(��A�*'����H
�������u����O�g�t:SA�Fv����9��8����YH0�����mWI����j����N\2&�����[��<[���3�����?N+����&� ���6>����c����=�g?�gQ-.�)�Q�[^���7�[���N}"_��'�'�cP�������T($��$�Y���	4x��^8�$T�B�6p�r}*���x'�7w�Wn^�����i��Cz`��\����"����X��{I}�����������_�9~�u�����Q��|9��B�����@���M��89�Q�"�i:���@�����W��3�q<h�����F	�Fz��tS�"����������/����'��5o�5��D��;���u$��xcK�k��kKt��e��8'���5�F��J�S����%����W��������4����a+�k�B�s4�cq2Y�#��`�q��,EyYJ������xz��2X],d6�+��L�<V�i���`A�W9����hK-��������q4Fg@����A9�5���N���E��4f��S����6@J��Q�����Y��_�0i���z�D�v5�H�Q����<E�5��%oaK�Zr��PH,I���8��mhzu��&V���0�������5�|��U)�����Sn)c�7D����S��pG�A�2���x�$�@T���'�t�c����M�-;I::�u$�131���u?�L��^'�).n��D	<�)������'���M���:�t�W��J���^E��]�����9t����N��p��:��^{�4�j�_Os8����gGF�Fi8^@��$��U�O�O�!�\��m��Z��p�>6�$�����'&���O�6�s����T����7g�������v�c�u�L������E�����Pv2�|m�A�<G��M�Mlv�U�:��aiV��2�h\+(���F����	�h�U��U�N��[���`��������9����t�������[����_[��*�����+#vy��)�X����<3��U=C[�t��[MGS����;`�{���9�I�~�/�O���nc����S�{�R�P�����(��y�+�&�{K��q��kI�����G�����8����d����2��w���N_�V�[���l�B�S�=D�����1�v��������A����#����I����n|6�,%.9f��i��I=�zWW��/5��[�<�[�����*�b�{�@�5%x���������#I�[+�/���5�b�9��<��W�����X�ol�I`�i�y�����o�����5��k�+��/-������[x�Yes�DQ�O�
��j�������O�g������<,����1\���(��x��{�0YK"yWD	�x`���[#������)
���V�kh�����V�a��FbT�O��gS�(�	�m�i������w�x�V���o#�>'��mpF���y����g������jz���x���Q�X�d!����$��q���K������W�W�������\���v��uo���4�x���+��w�f�B���5+[=WU�Y��������G�3������i�Q|7�����F���|���J�@g".K&�`zf�����5�ww���^�z�5�3�x_r2���� dg������=���|;����^^i�Z����g�q����s���	5�{u&�a�D��
J;������i�2F�;�$��,�ap�<*��v����=v��?
��3Y�I:��v���+_���$�b���1*�G���4���L�e���w}y{~'{k�u7���A���&
F6�^>�x��Z����>c��W�d��N�P�}A^�fS*���������s>�g��?����v���x��ox{X�'����5�,|��jIZx���>�T��L�p���+�.���I;#����{u�3q,�a�U�b:�J����@����q,h$1n��@lu�A��5�t+���9'���T����A����n�
	d���$7��V�n����SF����E]V�5g�E�a�HN�����1�zu��'}DX�S�Z�������Gy"CK8% ��Vf�X�I��'�����/4����ZZ��pU�/`�L\���8���=������
C�Q����2�6v-7���K�bWPup���s�?onu/���������#$�r��@,Orz����]k�����c��������8�1����1��-�W���cH�(���U��
��|�
.'����X��1������ROJ��S���w������iU���N9�����x[R�TK(��Y�7 8��q�����b��� �U���&B����b���\��=����$��+�����w����<��Qt�	bp���[�Wv����YO���9�p��za������d��&��)�QE���?����T����?����P����_�������������
@�?��������.�Z��C��5OQ����1w#�c9����*��+�]#���R��;�ho3��>��<����!/���3������jSkCL�]O�!����t/��`t�i����s�\��[;Kk(L6v���]�)]����;�$���k<�t����WQ���XD%�3����vy�s����3��t�l"�t�Ajek�v�K��f1���m�ws���Mg����{���<?4���u�&.���f@���_R$u�,?�������=6)�Ys��y�$JuAe������������ �K.p�>���U���
@�o��n�g(f�_a����.�����k�l�"I?����g����b�>f�jq�<������u�GI�}�E<-z���~��V6������;��tJ�N���QR����5�����0`1��g?w��q��g�����h;�pF�$�mQ�{�/��
������V/�[�}���O���e�4t����4�v��v�#�4Ca�
m�c6�N��'�lg�[9����P��V�c��W����~�$��jn����i���^���{O?sH�����Y�~_�F��y�������
��I�G�~4�n�������{Ak��V����U7m�c �s�y���c��������)�
0rI��A7�UX.d�A����{��H��������������o���af���_�z���q�<i,N6�:�V��RL�:u�q��@�HV,���#����C�wO�t�a����@Q���;G�2����T<'�J��VW����	���6�"�O&F,��=�$c#��W������.���g�!
8�?=�Fd�7����I���{+O��I,l--����0���9�??tawp�������98�$�l����.����O
�[���%�\��L��X�{�l��$��Xpz��5k���_z1�S���e�3���,"���++T��4�����2��A�,.�U���$���z�k����4������l�� �n$u����FA��A��z��u��+��h��f	m,wI/�Sb��_��\~\��aR�Mb�9%F���SE�}6���[�k+hnf�Y,q*��H4���H��KX+r�"8#*;8�5c4V�F7)O�i��yq���v���Vu�L1
#Mot4�1r���W{r	ld�@?�]��U�wfd����7S�|�,���l����FsE���k�����t�����f�Gc���Fz+N�\��f}����6w�K�\��	��Icr��b;�n��S�Q�����B����G�1��������I�FL��n,�l��4�l�Nm�{H�8�R0��O���^� ��ez-�t"���>��J�EZ���v)��i����Iah�{��S�1������H1h����ea�N���$�	!r=�8���
(S���-������\��\
���6�v�v�)���X�jV�Zj6�]����<bDo��
X��&���u���Z��m�XB�"���(WQ�X8 paVE����Ak���������{U�)97���#D��U�t}2�OYHi��D��h�j;h��_Eo���E}��%�(�����u=s�������dd���tY�}D�4��v4�����������>���5�]�����-�"�Cl�&�s���z���9�����,,��\Z���R��#�H���`zU]3��6�u-���i�W�I-��F��y*5�E�k����^����r.�����L%G��8}�������X��z:���h�b_K �K���H�C�I�z���$�m�g���V�}k{�X�^Z0ky��G�r�FT��(�tM+S��������V�o-��H��s�$� t�
)��.��K�2�Z<7���hT��*��?�����j�Q�����������wI�f��IP�
� �'�sZ�P%�t��J�}��J��D��Z�q��|���J������+k8"���B�H�����(��M�2,���da���wSS��}<��Kkm.�4&D�U����(z������/E���d����!^����{����*��J�,��$��m!H"A�(�G�Z��VVCn��(��b
(��
��������*z��������(z���u��t?�T����_����	���������
S�?�������'�/���t��C=T���s�\������������k[y6	��YAA%��H$��=�G�����I��6M6kx\�e�e��Z8�;�d
�� �V�Q�Ym��5T*;�m�:��}{ka���xGW������x�����&�����~Y.��!�����
ci��Y�6x�����F%�
�B��	�y����W�,c���o=����zQ�aB*�:�%��W��t�������X[C��/�v�q�-��5�'�<Y�4_���rK�;�t�6�ut���v���	l���I��Rw�����a�E�M�i�������,���Brs����*��'o(�����p4�C�������3������6�,�,�,
�����{������:��}s�������5�kL�
�����mzbiXMs�P���;�9���������c}��[^��.�k�I=6�9?�?��;{D�~�������<��b�K�'�|'����YHv^\��GlzV���oA��$��o�ZZ��|;����n��YZ\�lMqb0r��`�������tV�j���w?�{��K��'��:V���B����9�f���i�L���f���cN��d~�x�W��!�����8�����dr*�������7w�Aww���H�L�c!s��8��p����V�������G���Zv�j�4�A�,��U�,4�Su��Z�����bL��,@�Eu��V�����v0Z����K�Tu�r�N�9��{#+��,�������9J�� W��&����|dgk*�dg������h�E��i}��Gz/%�$��,�$[�U���0 �����-��oK��j6��,m$r�20��N��p�v�<��e�-�L�Q��4��>V[��Q���	��y=�W���a]�����&-v�5[K�_T������&���TD�)+�8��-���7���~������L�+��Z��!q)�s�����xxs�;�+U���_��7��������,��L�#<�������P2I8T�m���5��b�\����U[�5%�����V��9E��
�g�y�:���y?��4�J=�c�kl��y���~�G�v^����s�j�}���\m�R_/���N:������k��MoK���n��+��a�A��Z�a����q5a����8�;����\_]\�����KXN��*�#�7�{�Y:_�E���}E���L�Z$RE� #1���o`�5�r]��q������cg��2v����|��2K<�Q�ww8U�I=s<�����Y�:��kK�o�<����a���[�TtB���?JM�4��um��:,�2���Zx�D�����X�g���4�+�ffA�P� H�R[kZU��>�k�X���h�F�?����T�f�?4}7���?�F3�W����������o�|52���������z�=�G��B�/~�+�������S���ZE����r������Kh�*%�J�w�����}ER��?��OT����M�W�nXtK�:�h;�7��SW�����W�����U���������"J��:�0�e9�^3s��w�:�������h�������y�a��@8<�;��-vw��8
��
d�R��_��<]�����_��dV���u��U ���^��U��QE�yaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP?�C�\���OP?�C�\���OP\�������@j����]k�]���=As�������z���u��t?�P�����
2p	?��KQ�Hc�2�%�y�`?�r��Y<E��]F%��I�y�'�YV�%'s��V$*�����Z��i���T���hF�����WuA��j��e������G\q<��{o�o�<����������(�=�WW���X�r����VC��3?N}A�?�^�t�VMg�Wg��i-����x���1P��-��H���L�v��b��Q�9�z���{��x��,4cJ��������=,nY�W������?i_������^t�u�Z�V�u	5�^k����y��7|��`
����b1����������������5�����j�F�.v��QA��������wK��6�oq�v����:������&2|�[��xS�*o�j�w����$��#i���w����Kg�ZZ�q�S,l� ��q�������Qx�O��Wl����i�jJ�k��f�f�����P��(��E{-T��J�k��K��8�l�S�}]�/n,�~�����x���ID��# q�k����t�5�Q��]�J�������6;��<�H�G�FM���=z��_��l���nrpxv��_C��<E�i1��${��w�U
�D�ll;�5'��mOX�-�x��g��=��z�w��
�B�����
z�y��M���&�������9�I��3��	K����Xn*��#�qX�Wm��<��C��_Q���G�kzF�oun�:5��K!���Ta��>Q��W6!�G��u���u�f�5�{�����r�b!����FH�#�����������L���l�I
�X�e�2xc��k��#�r�����C��<��Q�~��+k�W��{9���c�*]��������O�/�f{�Mzq<G����R#���L��V�,��vTT:�w�������>]jw:m�� `�tV��K#g-�{��	�[v��3�
��)u|(���I���������DS�Y>h�gz���+����~��!�K�����xwW�MU��6f�}6Ki$B�q��G�����������{�.��>�iwz��l����*�`��*���z��QU�l�Kqr�o���V�����-�"�B����y�+��|��=U�80����]��"�k1A�,�S""���j��ag��Kg�Z[�ZK�$��r2�y��g��
�]Eue�����XD��:B�zr��.w����++{e�^A����q�'������#�8>����kN��/�tt���5}�I�^�l�r,���<�`p���'�_��x�����ar(�}�vz�7��5{/-����c�����60��.@9������k����O�X��\7��-:)-�|��?�<���R��8�h�
o�����A�,�m��|�H�jg�T�4�������irR�����!<Q��>�/��7��B�y�`����L[8�w��a�j��L�>�^����{��V�<o�k�����"D����}�%9;W�^y=I���V����7���5��!����������?�{���O���������S)b1R��iA;�uo{����G�QE��QEQEQQ�O���������I*���I<ztr$���:�n+)� � ����(��(��(��(��(��(��(��(��(��(��(��(��*������4��������4�	���������
S�?�������'�.�Z��C��5OP\�������@j����R���?�T���������b�'�����E$�����
��}���6���Z.���@�Z���\���&���B��h����3j�m����W���lt��
"4�!�����rq��W]���u{
��;I���y��c
��r)��{K�Q�rZ���2��9@������'�3�s�'���z�����L���n�Y�-��N��kxP���?�������:��u��4����r���E,��6I��
z7�|3k+{{j~�������S���>�v����2:q���5��WU��6��@�����L��
N.q���+���Q\���z���)rT��{I)~z�'�������'�P�,����av�D/���+�~�W��o�p�$��Q�[��-����ar��2J���;9�Nq�Ez�il�u���V��yL����rw�����v�P�>��o��f-n
��3��27)����qO�u��U=���K	?������
Q������S�e�Z���[D���A��P��<�9��m\x���Z����2Zi���[��C�(o\A'�8���j����v(�X��Z6�8<��M���2�&�T���b8�;���X�{J/�_�����'G��C�?Xe�I����i���Y^�,a��S��Wn:���n���J���V���
4%$`7�p7erH��j�|,����C2�88��8��Uy>��f�O���(����=���O,{T�����]]����!��H/���&hdTW���q��Q���5/j�6�4m�,
bX�h���S�<�r{��������u%�O�8��iG�
,!E�u0���\*\����������}����t>$��4{=6���������g��T#9
H���dz�8�{.�{k�i��wZ�j�i�h���3�������8�@sU��-����@.���#|#�u�&��0�pYz��������&_�%��/������d��?���Z3{$��J����.�A���r:��������b��o
�����a7F�e�r�z�^���r�����mSS ���9?������-���������[S_��������?���$���I�X���4���C�G+E�rP�*�8��?(���W��m�i���g-��/V�Zl��{��y�W�����=��d�
��
�4�m�o���4(��������;����_��z��>��P��!���{co%������������j�����u�M�%���yV$}�P����C���v�_<5fI��_=|�d��g���KE�d����6���S��p;a�
�-������l��N^�K�L�{���_�_Yxz�����G+1C�����'���U��G1�����N���!&%�*pJ�� �=G�^��h��_�Rcp�tS����������r	5���
m�[Im��G��wS,&Fs�!���''nrs��8J�_���VFP�p���p�_�n_���y,�$�����a���kw/�m&������U��[�WQ�f�x[���|B��'��
�����!e��X>����>��5�0x7D�Z]T[�Iv�����&�(�l��&r�~f�Tu5b��:]�������*���b*�TH��d��`q�ZCB/������&�q��E>X��Q_��3��w�j��xr}N]2�U��n#6��d���)s;0�p�
���[z���]�d����qcK2Gv� ���|-��$��@���o<���F[��9�in���2��� �Da����=���
o�:^�yiw�k��Mos-��b)h�K)*�����u�f��x���/��_�,|/k�9��Q��k
�Aq+B����u�)��x�����<���$�etVx�c�������x/B�5�j������������8W��w�����j_�y5��Y�)o�^��$&|�X�P�������
��>#\����N�J�R�G	)��J��������(m��~v)|�����|A��3_�)5%�����{l���u�=�h���K�x[��zg�/~�u�i��6���i��^6������_�����?H�5���B�Kk���!y1o4����a�c
@�# ����/t�I��i��k13E�yd(�C)R�F)c���������#Mh�\�+��:Y���dq���P'��u-?���S^�������^<�����^Y^��A uC�:����t�o���U�����@������j��r��0�z��6>#���UMj����[�*�&R�A9S��Ul�%�Z�i����i�"���7���H�!�rp�m��s��
���[�4�YO����z���j�Ax-gH�uU��7m�89��[u��G��_��Z���
:�X�D�E;�����nA���,���Syc+izt�K��u���s�MuQ�_-��#+$�N�	�O��I���5���P��gx��c���������]����m������O�������)���C�NWi�Fb�����f8��z��QEQEQEQEQEQEQEQEQEQEQE���?����T����?����P����_�������������
@�?��������.�Z��C��5OP^��_����*z���J��H��1@����s�\��������������QEAa�6�����������k��O@Y�o��'��jz���K�I?�3S�_�[��I�������R���O���������?���o��_���S�7�<Co�-�Iouyyy!�����+,q�I$�����*��G�����8�on����)�B����c���~j?���������h��.!�fX��E��YA*xRLc�n�a�����P�4��$�����}�o8+'�[p�Nv�������_���K�����H�5��o�_����mq�+DA�i�s��I9�kau����}6���26�dL3�F�Y1�vk�_j3|5�<=y|���e�X��%�.Z8������q����K���!���p�q^Ey�����mu�������p3���Zn�M����Z���zO�����N�o4�1���yI20E~I}�mel�<2x�t/���^����5�31o-��"�yK����������}��i�hn��,����
5
�n���\��9��s��T�-WV�n������V�B�:Ja*��#"��An	���+����]l���$�V������M�-�I���P9��pQ�H%Xpr�
���hl�����N�Y Wd p��}��S��M4_������b4�[�^w-q�������
C�������I�-�G��T�F���9�XUQR�v)^�����J��Ts��u��&{�+����1����}/�W��kg�]A�~�a�����"T[��Ja���s�����5K4�V��������C-���T�F���B����g��zK�.��2i��X�6n��.��{�2��n��������_6���'{�_���,u��Ji�������{��RryA��
���H���_����X�xv��������{r�rbLLX�g8��a�<��1��E��?|?���O]+J������f������T
�7!�q����I����2��3h����ygY�"8���U�bS��<V�aNQV���/��)�fK���=OW���J�����KI/�� Yc�u?>�#;0OC]p���j���
]-t�1#�g����_:�-�9b��O*wb6����5��J"t�����0x���
������>��*��r��8�k����MN��l����$��l�����o���`�|�������L������4�U���%h-	P�rX1������qW[G�>;�Z��WMk2�;��U��c��\���-nU�6��M�
#�N�q4��{_2%�]���W#,�'����N�VV_�����N����_
��>�i�����6��2Z$x���s�����<�Ms�P���i��n��jq$(��$r��2C3���qK��R�x�T��E�;�;H�1.-1l��bE�=�N��]#\��]������}��+[�{�^ L�U����v�%M�.�{�z�5E��Ai����Io��������n}���@�H8���V���i����l��Y�|c*FG�����"m_�6���_��k�d�w��afp�8G#�pA^F9��moN�����6�}��"�Z^�w5�"6�"�d��y�T�����w����C�yed�W���x���	�bc{���nQ������n�.���u�y^ta6��A���#:��To���5�3��E��b��[mZ�/29m��=���pv�rFF+��N��K������}���j�Er�R�n�s+*�R0@������iC���_�Bm��������������	��m!D2�,,������b1����}��Z���i�S�i�2Kk0DkiQI��.>Q����!�\�5���3]��lo���g�-5;������%�1d���F�A�cn9�j��!���
�V��������Y�Z(]�X�W8,�d�s����Z{������6g�0�������V24�o
��L�N���r2�I��	85c������m���l��Z]*�",�����A �G^����7�x����kV�<z���wQA�=���6����8�zR���7O�[��L{�@��=c=�`��A�y*�C��/ ����j���4s������.�����������=]OX�T�]�Z2;Ayf�����������H�%��tm�`���)|�iWV����������U�~����i�Z�j6���d��$��i s�i�T�r2Z�o�����������i��5��wj��q��G)U�EU�`*����/59,/t�GJ�[f�E�H��`����,��V.��x���e��u��R^\Aye{$����Z$�����t���K�k��I�i�%��c����[���������������r��5p�)K_Kv�:m�Pk:�����B���}ow:��<~<��%�`���d�\�������K�����W�,bv�S�9q�8���O��Z���O%���zs�XM���hVB�_��C�������tz�5[o��-����VO�G��J���ZH�T����c�8�:�����������l��5
OP���Y��as�U�`o5���/�\�m����������m���ZEsrm-���?��(B�9q����U�%}h�'�]�]@/[Q���y�>���8<�!e��WMoK���Ayluv�$��w������J|�U��fh��^|��Eg�=��u)� jz������Z��RKo���e2�f��`��_����F���>!]xy<5��m
�3��9-��"y�t��x���W�mI��^?��������mmmn��g�HD/)�T`����G<����>���|��60�]Gs3��,r���j0rD�6��5d5?��~�y���f�-��*���G~M�dGr��v�;T��H�^x���K$7E|9�w�W.<�?��n~V�s��`��o|=��)��#�����j���|�|���<��~*�w�nO�m�9��g�[a���"�l��@v��
����I8n��y�'O��~�����g��Z���In'H�2J����$�h����Xj�;��{O���Xd;y�.��:�z�7�=�������>\z��}�����o|�]7�4{��;G�o'���Hdh�(H����
������4?��
"�RX	1�VM��8��8�j[A��V���PD�8�A�U�@�)���tK��2������DUR��9=1��=GZu���W|��]�K)i�iS�������>�h��-��%VK�y"R�R}��.n-�m?��������,�v�c'i=�����
�2���u��g���wX�
�I8���+�����?
t��x$���G�T�4.�2�P��I���|=.�>��K��Z�����p�%**���r9=�A�)��ZM#B�(�$(��*������4��������4�	���������
S�?�������'�.�Z��C��5OP\�������@j����R���?�T���������b�'�/��������5=A�7?�����	������<m����!S���m�\��
�� ��R���O����������f��,����t��C5=Ae���������o��_���S������������j��i�_Kkqq\��l�/���\��O�^���o,�7�����6A�k���{kk��N;��!�xbY$
d>�S������{��BY����i!�@�":4�	8,��Nvo��t��6��V]���{m��Z�Mqp�!����T��W�O���
�'W��� d���3����p{���]`���j���Z*�W+v��)$
v�GBz`pzz��t]������$j�r���;�P��O3*�#B1� g�Ec�@��IC�-��v��dUQ�h������5�ws���w4P@�-$�W�O�;����������{R����\�w)W*A�H���5z��I�>���S�B��mF?�0KyH����9�#��VSAh��$�n��K�L�%��n���w�����s�s�J��Y.����0�X��q�i���+����m���9����^ ���a��<�k��h���cwo
�^[i��$o4�����%��-���EW�i��\�\�]1����R(��"���6$XPB�NJMQ�V��o��E���$0��+�=��:������U���A$�#����q���5�Z�h����%����4���#C)(������{Y6���C�G�>�l��zy�7��F�Nn$(�8�3�V��������Y���j�Q��}>f?Rk������%���%�e����^O�}�>w������l��x�s�k��=�o�mH����V��l��zy�}�HZu�%�Kg���~>���^m��O�����qn�a��&�t'��1�!G�;�qW�W��Z������t�-���g���l�,x�`�����n��K����|��Uk��k{�[I�su��L_h�~C��G�.�m5��7G�Y��]�5���<���y�2��j��Xk����$i�_�_S�5��lna����3��cWf��s��5�^�ot�vW}�L��_�,6���c��t;�q
5�;G����������c��6�=������Z��M<v���j2����p�VT*O$����J*R��_����uFX��#"y�K��@��zr?:e����F+H"�"�!H�(,�Y��$�{�Mr^6�n�{m6�tk{�QT����h�O�����'��P0�:�{�K����gC�e���y�sM�kV��:�|�e�9��y5��K�m�\��J��L����Q
�x������Q��[izm����KX�i� ����8��^5�u_����f��eu?��[�G�)������!Fk������_�����4��%��[d��6�L��c�����SI��Y���I����6��|=��<-�4��An����n��`����A���-`�?�,�����I��}�����B����)c���Q�)i}}<���g��&v�t��eRDi��}H>�
�=r�M�/����;�:Y�8L��E:���p��%N2:�Z���lt=V�r���6�~�3H�Wl7�#.��!*3�x�T����z�����S�<1���	�b���hn%�����H����O#�&�[\}���{Y�Xe1feJ6��pNW��8�+��Y���V^"�
[N��U��uK�lBfb$ �A7Nj���S�Q�x�O�����:���oc,�~�.����7 c ������-��I�4mYe�4�>�I�=��D_�T��;�k�.���H��y��U������A�,�V4�?6��
Y&���6
D� �v9F�wn���(��4��^0����,����{X��p-�(�1��g-�����Q���m+�
[�i{guww��sl�&R�YIG ��p{*�r��������6�p.@����O����5�W]�k%k�>�_��]&�9�7fA'�&7�
o�~�#�8��`���Q�xw]��S������q�d1���_!c(����D��T/u{�K;��K���\�c�O~�����@�"�R�K��I��NO�A�Y8�������{y��-�" A�2Fzg����5b������x�'�H�%.�{����P�4�i��o�6���7!�G��NFpx��*S�����f�(�()U�=����;QEQEQET����7�iS�����7�i@�?��������.�Z��C��5OP\�������@j����]k�]���=2h���a��"���}J�,4����1���0^�($����n�i6������$�8��s��\g��U��z��7V���!iwEcq�`
� ���������Z[�x������"���p=I&�'��>e=���cy��e=���c���=^������%��ui1`��$����� #�\�f��[��J���ilg�6��������f��FFH�\�S�v�O���o1�R��]?�����[���y���\
}W)�2��+����2O���E2��+����2O���E28�<���m�N���(��(��(�
����$�t��p6�2@�	��O���'�����q=��.?�w#>��)r�����(��b+jvi�i�vR3�\D��!���G�5�c��-����}��m�_$��[�l��=+~�����h(����kM���Eq$B��0*Xc����u ���E�����ESQEQEQEQEQEQEQEQEB�K��R��7I-���g������
	'��rM_��IXm�p��)�(���}�C{qi-�;-���F�����Gnq�z���L��.,f��K%��i�%�M�����9�\���)XVKP��)�(��(��(��(��*������4��������4�	���������
S�?�������'�.�Z��C��5OP\�������@j��:G$/�Z)�V�����8����W��G������?����j�������m4���������i�G�_M�.o��u+��`��:��B"��%#�t�5�Ej����}�F����������&�o}u���l����2l���$m@O�H���Ig���o��z�����6)"y����$��=*=+]���;�?JV�^B�u%�Gu�=����$;U��C�����.�?�b�p��T�����S��>�Cu*lj�X��&�n.��+�.�5�c��T�Sy]�����T��i�aux�������6U����d���c9�����Y�4V��(��Oa�����&!��#���~��G����Zd����������C��$p1�����9Y�Ea��$���k;�������e�(Q�6���t���_��u��Cs4�<�����H�2�*�9����uVjQY������#G��"X�KiYgQ��>BC`n�'��}g�	���V�8��JJD�H]0�������49��(�o�T-����[{�������:�7��n��x��O�g�E��"����������C�49�+�,��+6Mn�-8^���-D��$�����1'�U;�[&����{5����bc/$��LI��J���+7�����ux>�wm,1<a���i�eX�O��}kB�W����'yZ[X�ic����`�<�t�1�
q}B��Eah��kZ^��R���9D7K$K��H���T��T^�o�u5��iegm$���zd!�b���F�	�
^�.��>VtTVV��
7P2���;��Q�����
���sR[kZ}��������7V9�c,x��8������������O����V����������eV��Ib�)�#���Wm5/���v�E�\$���� �c�	9� s�4�b����
+�_�o�����_��C�mf�8��v4��5ob��rx�E�\m"+��o_!�v�<K (f	���l��7��A�{���Y�8�z��(c���r�Y�t+>L���<����c�&�����s<��d6�P�CJ��$}��Q\����?G�u��qg�K$������m��v4@����NYN����h~�[}V�������o$�\y#��b�-2��x4�E6h�X]d��2������PEd���Zg����sJ�p�a�y.%����8���9$���������g�����!�N�J�K*@rB����������:5���\Oegu/����/�aLn����<c9���v�{�f�%�A�2��[������6����@�\x�L��7�����Q�z�*MRm�Ir�\��<�i��0��4��H^�6�{l��LA$
�@h�C�C.9��s@�W?���^"��-tv�{�,��X�Z�lFB�$k��q������O,�4r43B�&9����=������b�KI�l�x�$������KYN�]���]y8 ��=*�1�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@@����s��=@����s��=As�������z���u��t?�P����_�����+��Z��D�(��v��9bO��%}���W��G���}������K��7$��ea��OtW0��?�9��V��� �<QE 9_&����h�[���R�9������RC�2<��V�F��z~��[m�/�������e2.wo<��I������+Z�s�s�[�:���X����-{���H�������\1����
J�W��V�l/Z=N�s���z��A��5u�V�m#��2<�n'�v,��RI����K;���#o�\�$�4����N��?(��R�h�+���?j��Y���h/��f��QG���$n �}�{����Z�������"�Ko,1��e�6�`8?�tTU*IlO;0|Aox������=����$Q�+��F�����b�������%�����>�������"��s���^���Z�i�7ln ��o���G �u9!N0�P�	���t�Z&y"��x�����2�|�I�O�c�<��.�q�X����SK���[s,/x��C*��y�)b���qRG�j��3T���8�	�%�XD�����7{�9�k����!����%���c��%��3Y����K���#|�d|�8 ��gC�����N�na�����]�y�N<�|�����>Q]��$�����{��������.�����yT�Ky<�3T3e���kKH��n5�f��������U�Go���v�@?8=H�� t�P�$��_�g�������l��B�Ki,����dGYJ������3�y�1�Ww��.-�������6��P�v �:�WE>Ek0���#��:[{�{q��Q]�l��q�}�9%IH�Hp	Q�m�)<%�jF�=���Eu53O���D�qa�����?��_E%I+y;9��?W� ��F���k���D�EH���H�G�>D����\G},�����L�U#�t�#p'1G��($�7'8�\dt��kX�.f�p��]�����.�-������j�\��4�.dFa&���� ��C��Px�.t
'R����2j2�{�����;�����*s����4U��/muM?�[k�T���}��`�A4Jm�9�r���J�/��?)������^�'���Q�[�������{Ha���)y�>������^�Eq�'��,�s���n�6�o������r!�H_���W�L9�pk�����������f���jv���i��X�M�D�����rH;���R��n�����M*�Li>�qo��m��L��� ������Q�����8���s_���:.�s;Eu���mqh����
��#$q�������
������VWvW�D��f�nRR��@��wz
�(��=���+?N4����� �����"�����U���p��~�������cP�N�.�+��d�X��$*Y&WA�g�z���<�='X��%��9�K�;�P�k��e������JH��z���gx�K������@��[�8i!KOuM���U���G�U
oH����S���,�vFVR
������A@g�K����A�iyi�[���MI�i�3�YF?t�������E�_�����������H��#H���eo��h���_�yK���3�s,�i%fbN8>��iI(���*�����j�2\n��d�S[!�����o�4ql�D��I�n��ElQEQAEPEPEPEPEPEPEPEPEPEPP?�C�\���OP?�C�\���OP\�������@j����]k�]���=d`�(���o(�tI��H��[�����hG����:���������Ev�f
q#mO���T���	����1�a������If�]�7<�4�B��e�O�j�����^s����=���b�
(���
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��������*z��������(z���u��t?�T����_����	������i���|�h����a�zU�����kM��u�Cs��2�����|���n��C��sm�������u9��B���hSc~�+�pR(X^=�5/���Y����-�)�����p�nsO�W4�?W�I���Z\�c)-����3��7�
���.��I��J��;���"+&��F� �Xm����]IR��KM5�����V������g�<I6�]5��>Y}�y��rT�663���b�t�z��al�f"�c�K0��l@f<�{��ZZo�.#�[U�/-�n
�[b�������w�r6���9�x{@�����jqM�[/�-h���K��'�I�}�/M������R���o��M�tTQEy�QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET����7�iS�����7�i@�?��������.�Z��C��5OE�����\"6�K(lpH3����
^��}ok��e/���F�nU�q##'�&����j%]/SK��u;�u"}��w,�����z�[[����W���������
(���
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
��������*z��������(z���u��t?�T����_����	�9d)$*1�}���'�T����_����
�:E������o�l`%m��7l���$N9����Oq"Ej]�v
��d�O@z}a���D�:��E5T�)���I%����sA"I�*�FAu��o
���O�����
{G�`�4K�Rdx�\�����v��V��|W���P����Cw
�����)��,m��G�m�1���23�h�6�o���~1���z��v�������G?�����cc(�A�������[���;;R]:}Q�����[8�Vf��3�2(]�#��4�TW�_��UO���U��u���k�?�mj�g.�8��',����i��z�QE�����]\C�A^c���
�����=y��/k�����x{P�����]�G�3�"���;�A��84�4W|uy�Wk�M+\�� ��R���Gsqp�C�iU�a,q�Xr;��_��]sX��]�E}���shK<D$Ry�rq��8�=*��}n�U���.�Mr��C���/m<k��'tm�*)����WS�yu�;T�n�g��u���o����uX^Q�#�@&1�����W�u���]���<���&Sw
��:naX6�J��C�*/jz�����
5[��%�v�n�#[�1P�w������=J����5���x��%i\ .�T����SW�x��������[���}SJhg��B~�"H�Py�'���5oiM��2�T�U���m5{y���d�6y��B�� ���4�tW�k^+�����r��[��������'������|����<}��c������/�Y`��.���XDh���#W9#��{��Q^s�[����kmRm.k6���QY����V1n�Ll}�H�>c�_����u���j:�z�������@��U�4����t���X�=��im{�=���g7��{o%W��\7�9}��zt��QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQET����7�iS�����7�i@�?��������.�Z��C��5OP\�������@j����]k�]���=Ai�����y���2�H��0FG#�zT�P7��OF��������0�4E���d|*#������������T�&��X
>�[�Y>�dWha���RWqc#����S��J(?�qx�Mrf�Q�V��T�R`g�6�`��$`s����/A�\mZIb�i����HZS��!����%rO5�Q@�����/�����_n@ne1�>��D�v�b���g'9����(��(��(�^�<C$j��4�+$sAq%��[�|l�T�eI��������6zm��>TZj����4����l��\��f�
(?hxa�=����#K�dw]�2�R�!���6��`W?���j^�����H��.$��K�X�B�J����FbG���@��#���������3��=�����$�%
�o%�-�''����OD���F����Qv��7v�N����I*�>�$��N���@mkI�4��9�������@�!AU�A��JtzU��4���G���.ZT�_�<�F�n$��;�g�ttP+������.�Kt�.F��X�*�9,UI��A���i>����������-��I$bK���I�P3����9���&����oq�#�/&�3�������6�|ol �7~Y�e�����2A(�Wm�H��8��Ec��)�uMn�K���S�Y��X�5�FO)l����(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��
(��?��
endstream
endobj
115
0
obj
59266
endobj
111
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image19
114
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
116
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
117
0
R
/Resources
118
0
R
/Annots
120
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
117
0
obj
<<
/Filter
/FlateDecode
/Length
119
0
R
>>
stream
x��X��E-+��6�Y $�8bz��P��3�<�y��L&�%$Q�$L@�����/`
_���`�p���m�2�fZ��}��V��{����\f��k3���?|�/�����+�X~F�t{����	�>�?(a�I��/=��O���� �|����O��;�K�{�d-�O��[��e��L��e���^�����4Rm�B�0N�6W����j�4�%�s�p,�=h�	��Je���cH�6H������[w^��^�4������	:���'��L�s��;��
v�&����1;e�����`}v��hq������m���`�/�d�'��2f�I�V��1��gi��@�m{���"��K-C����Ji��:��+v��}3�5,�����<`��_�h�9���0�q1��P"S6�m��*i]pbL��6-e3���h���K#}�B��U
�V�Te���]"�`
�7�AY��
��,�u��.k�����u�!�7=�E�!�r.�:�,0���l���?����|Y9������;�Y�Tl>_e]"]�f5���x�U]���3�v�� B2�yk��%C�_6_������/����3��8C8�L��ii�k��N"�{E���Y��k���>�D���\�u2����O�'xCO�I�
�Q���7��*��SjnT]��9��8�&�!f��W�����.bpw�io�w���U2�7L�CE����>�HB @�T:�QV�P9�%��!s����M~&�2���3�M�Y��R��~I��1��xW%�1����S*��0�h�gw�b��e�!;SVR�x9F*���y���w@���!��SX)��{���N0�~JllZs��C6����G�5kbl"�l�E�{?c-SZ�9a6e{x:#�)�W�����������{?"�P���2AY^�(����1��p>*Qj�����7.�-D^f>�|w������9-�M)6����[���r�MVS������<��N�J;�b;Uk%'^����7�h��n�_�D�`�f:AW�������F�������=-�:�3�A��]\C0�>�R�����x6�h�'�
x:��n�k��>P��������":&�������f
�y��$1O��5X='��EbK�<�l���v��S���h���?��{��.�d�K���WQ{=��T<?��;x����{������'T��T��m7�4q��v��������!����aQ^�SV<-J�)i���`VR�a���Q���i���0L�r%Q�B*���>���5�M��\N[#���}�:I�7	X�;��2G,y�.�}S9���o�i���q����
f�+O�9��q,�w��
������=���%u���l�X5�-}��^<�?��F��L���cW�r:��kb��qj0����p<bw�8�BHz�9o�k^H'E��I�#�`6O%G�M\^��*��pZP�M�_�K�4I����>��������4���A�j���[dWl&XoS��#��3��*��"���l1���
����S�8m�1"3HM�_��%����Bti��,��Y��V������
endstream
endobj
119
0
obj
1553
endobj
120
0
obj
[
]
endobj
118
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
121
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
122
0
R
/Resources
123
0
R
/Annots
125
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
122
0
obj
<<
/Filter
/FlateDecode
/Length
124
0
R
>>
stream
x��Y�nE�U��R�R�7���;�����������k�6RDH��Ip@����	q�O������u���x=��lV������������1������FX�~��s�	!C��04c����K�s�rA��fJXg����]�������&�|���o�?��wdK�}��J����w�>�5�2*O�	�Z:�=f{g�N�-
��}|�IT.�����v��P�F�cy����A;�TV`Y��q�����l�7|���W�+
�<=�������Ir��	��K����\b�l�v��]���eO�C�e7������l�c�����?��U��,����\:u����������Y�UJ;���K-}��po%�N���
���O�"��B�*�/�16����ON�xp����k[�LY���>���}�c�@9e���`��r(�F�L�RpT	��Z�$*�D��g��\z�e���ga&;�����H�j�LV�r���w�8�Uy�y`�"`2!!dVF/?�F��_W��.,�vX�h� ��U6�d�+�QM��4�d������s��>*���A��!/
�W>e�)����T�������'�����hK�k��=NC������b��V����Hd"�0J���J-h�kw�}�;t��t�^�?Z������+���J��j���N��k�uo]���F�DD5���>3�{w�E0�t"����)��3���DJ�R%+�D��&����������"�J��[�,��p�1��)A���'�)����XKV�9I�A��{U	aj7�R�E����.{����B�����(ps���e��J��w�*��[���.�r�Mw�x^l���7b�c�Z]
���wt#U�\cP8�3?�q�g<���{�0��u\��X�+h������>�v~Du��C��e���F{�I�'�G���p�(��HH�n4=N[���\�yq����SA����b�����5w~iin���5����(���Z��� ���d�C
�����	pti4����1X�
���[kt����O��n���y������q6pg^���gCL�1�(O{���Y�z
jcl���������\tX������=\o��oE�cV\�����k@� JS�B�����%���D��K��P��m�f���y�rI45��K�Ud�"���!9�����;�����Ls��f�i�yA��5�[l�6h��.�'�1�F 1��*XS�%�'���D��>����k�#��4��j����M�z}�N<�b���q��iMh��.{&����
{��*�������9Q�\gA��=���
��S���g:��z�6��;k��1���l�2�s��Mv.&��v^s��n����vA�����[w��=5��s�
��$1������Z�w�%��i���PL�r�������~�:���E6�����o��T\��)��h�(A1�v�����Q!�O[P^���4�����2�h�����s�\�c�7V����:���b�De\�����Yb�
�=�
j������(�Z�$�����q�����)��;
N����t4�U��Y����;���Y�F�|w�nC�okp8���~!���X�E���6"{��Kj��NV�>u ��B�������V
���c�����]gdb#�k�b��e\4��SP�8�������bg��r�6��2�g����{�q����,h��]wu����*Pi���LCe#��n3~��mh
endstream
endobj
124
0
obj
1776
endobj
125
0
obj
[
]
endobj
123
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
/Font15
52
0
R
/Font20
126
0
R
/Font10
28
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
127
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
720
405
]
/Contents
128
0
R
/Resources
129
0
R
/Annots
131
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
128
0
obj
<<
/Filter
/FlateDecode
/Length
130
0
R
>>
stream
x��V�n\5�����*������8>��XQBR"��4�j�TQ����MA���y�.x� �
������	M;��=�||||��;�$$Oc�&��x�|�O�RRt�J�9�`J����N���~���&3�0I����?�!�|�����C��~��������~������pJ��kB�&�Cw�6�T� s��hk���C�a�8ZS�T�c;I����:j���-c��!�v���_O!b��o|���o�'E����^L�s�>�?������a�U^\c{l����b?�[	^?dcv�����d��c�p���!�n�[��h�r����k�>I���Ew�F
eCP�&e�"��s c"��I1%
oR�7�	]�@�7�'��*A����(�	�t���8`
�Q��KXA������	�/����J�h. &�8i��P���[������%6+��5"�v��0��~p#'m��K�P{$��2�~��u�����y�y��	&������Yem�*�Y���V�l����AH
H��"�T�T���3N��/&�c��gM*]��������!��12������u����2{5�4�[0@ �L��^V\�����Mo{CJe��E�Tq�d����pA$�%��7J�=X����&���-/����#��S������X�����^��_�:��&�g����j�B�Jad�K��XB=?2��"���6xWb��&����[{�]�B�Ym��^Y�F"��2g������K�����C('"��Jg�]S8Po��t�yf�lk&����f�`��M������u��7_���5�1�k�C6.k��.��V�`��y�j-�������e��u������U�	���>M6X�B��pF!����8AclM
o�6�&/�Z�f�)6Q�����G�EF�C="���D�
�F?
G�8!��G��_8+@M��4��y�2Rl��P}�_00���{4��{��9bt�6�l�	zw���eX����*Xa
��Q�>�$
n�J*���U4�
h�Cd�F3�[�nk	M��E7-!)���i,��6v]!ma��2�"
endstream
endobj
130
0
obj
1067
endobj
131
0
obj
[
<<
/Type
/Annot
/Subtype
/Link
/Rect
[
465.6496
74.49528
597.4959
91.29527
]
/Border
[
0
0
0
]
/A
<<
/Type
/Action
/S
/URI
/URI
(mailto:hannuk@google.com)
>>
>>
]
endobj
129
0
obj
<<
/Font
<<
/Font2
12
0
R
/Font4
14
0
R
>>
/Pattern
<<
>>
/XObject
<<
/Image3
13
0
R
/Image13
41
0
R
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha1
11
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
12
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Roboto-Regular
/Encoding
/Identity-H
/DescendantFonts
[
132
0
R
]
/ToUnicode
133
0
R
>>
endobj
14
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+GoogleSans18pt-Regular
/Encoding
/Identity-H
/DescendantFonts
[
136
0
R
]
/ToUnicode
137
0
R
>>
endobj
25
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+GoogleSans18pt-Bold
/Encoding
/Identity-H
/DescendantFonts
[
140
0
R
]
/ToUnicode
141
0
R
>>
endobj
26
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Consolas
/Encoding
/Identity-H
/DescendantFonts
[
144
0
R
]
/ToUnicode
145
0
R
>>
endobj
27
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Roboto-Italic
/Encoding
/Identity-H
/DescendantFonts
[
148
0
R
]
/ToUnicode
149
0
R
>>
endobj
28
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Roboto-Bold
/Encoding
/Identity-H
/DescendantFonts
[
152
0
R
]
/ToUnicode
153
0
R
>>
endobj
29
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Consolas-Bold
/Encoding
/Identity-H
/DescendantFonts
[
156
0
R
]
/ToUnicode
157
0
R
>>
endobj
52
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+ArialMT
/Encoding
/Identity-H
/DescendantFonts
[
160
0
R
]
/ToUnicode
161
0
R
>>
endobj
126
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Arial-BoldMT
/Encoding
/Identity-H
/DescendantFonts
[
164
0
R
]
/ToUnicode
165
0
R
>>
endobj
133
0
obj
<<
/Filter
/FlateDecode
/Length
168
0
R
>>
stream
x�}R�j�0��+tl�����PR
>�A�~�%�RC-�9��+�6i�B�zvgvk�]�P�v��k�M
#w����
p
��3��m����m�&�,��i����YQ��-�1N����nY�-�������N�>����V���K�����t�3�-*���8-����>�
�$3��0��@l�X!�)y��N����� �v������D��J}�P�D�!�J!K]v�iirK�;�JCI�����*A4��4��]������bX����%�������9)s��|��J��9%��4���m�;����QymTj�AR������|_�Z���bL{���0_}������
�o���
endstream
endobj
135
0
obj
<<
/Filter
/FlateDecode
/Length
169
0
R
>>
stream
x��|w|���s���M��d!��BB	Ri*���EB	���	!B3�#�JQ��$�$?)�+Q�x)���+�dg������%�}?����g�9�3g����sf>,�#�O�h�[��l����1f<�� �?kt7��-} F;jDz��s�b�Ic��O�.����x���3�����Z���9b�7�e�h.M1s��@��X��GL�<j����������V�,f�yH��a0,��0hG�l�
��}A�p��!B�����������A0yr)�A�kA��g]��"BV�&�,ei�"�0lhK��DDt�����-�������]�t��bM��������=b��tEl�)�0*756B�~)���bQ�����JMm�R�0"&7W3�8>�oo�H1�D(BT��S��]��.]S�,��nJi���k�%5��"���t^F='��En�R�:G���t	S 57���Z����a�8W�������.�'P���}�/��0v�j�Z����-]�3�R�!�d�'Fi�����4C�SMr"r��wF�BN��bh*����Xq����z�=�f��t�9�S��A��bh&����$���n��� &��������W���e����j�[�Bc��h�N���c�T�H��IN�q-'E>~����g�9Q��(����m,�E0b ��$�����KRVK��u*�*�v��T��4�ytF�����Cs�P��#�MQD���"�������U4��W����j����7�$y$�����&�s��1��|$�s�f��mL�N{�"���F]M�������5�0�s��XEd�%��f�
�)�����Y�~Y�����0-*k�����u�����j����|�����z�G���B���5&	�T�d4%&P�b4��i��Fo:BS�������;u��V�I��=q�d�F}&�R���8f:B����D���UWQUW5[_����G5I��x��Y2i!��V��"�t}H�V��sK��\8���o��a�zo(�Poa�?k�� �B�`�rt�"�(>-R,_����L�`��j�$Z�t)P����HA���_M ��'{�X
�+$�-�cc���Qp\`��NJN���3���T��\���5����&4����h�F@�a\���1�h��j=r���g�v��L��(�N�hP:��"*���������Z�nr����h��K�V�:�1��%����	������m�V_���6On���8��>�1�GIup>�/�q9��P|�Ew����yLEO��TH�������(k��1���%%�>W���*^���+B���U�����:A=�C��O�$m�/��?~u�����k���L�"��C�;9���Q7�9�[$<��Fv��j�����%�
jl(�]��$������6����8��{�"���i�M������"��z��Wa6���$���D.�`kB�x�*B,b|uw�`���)���p�w0����d�����vk��_}�~��"Cw�?��(����Y�w�W;�����>cbm�I�m2�������{��?��/�r��)�G��z�A���=��3�;'��'"kBp/F4N����yF[I��%�����O���3n���UGI���U[���h�d�'�����f��R����Sr��,���
Q}�f}0.�v�W�S������/���[[D�&�)���
�V���_���r'��b����%��w���!�
��H�	���v��)��M�
-�������	>����*`�@�E��5��1��-
u;+iB�Y���i"��a�^i��d�$�`��A�>Q��!52�Fj4gz����c^�9y����~3�7���h����������}����W����[�l^[��s`"�!�[�Z�������E���f,F��D�4���h&��h>	��](���H3�1�������h.BBT�����	��%%D	w��<9�Qq��h���w�J*�\Y�n�����	���d��	��n�����^�p��mZ�����w������|1t����������;�>��0�9O_���k�&���<3�DA�G&Oux3���d616'�*C�$k"zF�m5~"tj�c��#�3?���UQ�m�����i[o�5{}>]����k9ko�U?Ro%���Y��F����^?���2��1�O�����H~_��������v�>f��12��EF��GD
��L�tr�����cd�Z2���l8&\�yx7O�n�G�����B��a`�^�K�����jV)J}��A� ��>�A�sf-�e�!T���L���6I�����v��|*�8}Q���^i^�4�-����u�j@���HN22�22�/F�D�T#E�3�+S����W4���d��\���G�V�^��8�h���$��M��Mj�j;�~z��o5�>;���M:���T7���w����I����S:f6&��v������zs��~7O�I��-:�/��z�d�
'������b�S�����I1�Cw������6��#����^�!F
���6_?&+�"VxC#���5;2�l�H��c���y}�Y�/L���T8m�����M[�?G�> s��b��P��B1�����:�_m�5w���@�gjyj���ws%��J���,"[	v1�X�X�Q���\����������I�D�f�{��D�/��W�K����[[X��J��[1�h6�?s���z_c,h=���(�W�V07z�}�.�Bfn�5�	���l�B���AFi�S������5�g�MR�\V����gO�^�����QE&�����7U��mQ�Z��zs��:��	��/�W�rf��sc%��-J�h��!j�D���{���I��d�z���W��� )���Sig����d�ZA�e�������"<4�G���(3��zX�"�=���H�	n
_�&\�/��V���[�t��z��lSc\<�":�'�7{�����{������G~f�Z*d����t�}{\>m6��e��p��;y<��5r��F��6��M;�(����^@R����&hL����Z3[��r�-�D��[����;�6�:		/MR���$W����������2�&	�X@z�q�.�zOu����]�v���%-���:t��kM�]�h`�bmwu$�����tt�-_���aK���p����
����YZJ���v�I�}���{w3x5��OJu>V<�QZ���]��~?��@��������q��JN� ��	C��4Y�-�:{�����g�#�R���;W>��W��Fb���:�^z�}��p�MY�����8�
��	������1.K,w1%�����hy��-�o�e]����C}+
������B����Y��[�
���/j|�r*A�?�w�@�cnO�Q[�����o�q��<���!W�<4���:~���`D���$>��:��2a�1!%;�er��R��N��P�U/��0�$���Q��v�)��]���gm���VJ���i�.��Q����	3,��L�&j-+��_����l�`<���#�0"0&t����b�`�����Op"��h^k���%�j������:��������>Zq��Y��������Z�{iw&�yj�����$X���W��k$�5����I&x��\��j��q�Ux�H�[�H��?��q"w��tm!���]�����!��v��W���v�_��:���5�o��	IFC$���6v�>�~
_d�����l����<�/��/�j$M�q��@���YD\�����V�
���������L�_���l�o�Z�U��$�gf2�T���x7���3��I�x�-����De����w�2�'*����&����/kH0b������2���D�n	x��*����c�z�>g_R�^�)�������.[M����6���� �i�y$�P��2�eV1����cT(��Q��Q�^	���W��J"��luUA"_@U�pBx�1].�qQ������WN�T��(P1,}����ty��7�sm�g����L�3z����/�|�`��������F
9N��cB�*��x@�
�l1��1G���h�X��d����������	�d
���GH�X�p�w�1��A���h���%�������w�����v����TG�Q+�������Q����M���������mm�����=`m�"�����x���~�~}��������3�>���'>��:�G0�pQ�\f��@�Ye'���oNF��&�G��1C�����I�7
��L��_=o6���������+<��*����}�&��U����%q���W��z��L�R���.�l(��� ��~kN-�7�{�bO	���������������$�{5�|u]��n�'�Z��&,���������Sz��c2
DN� �Z��G9�@
�����y,)��Qd�%��T��L���Tg���pa
_td���4�{�w	�Z�P=^X_X��'^"�dv��#[ !i�K�D�\8H�)e��)��vU�o�������4��6s�����+5Q��L�C��@m]H��r��o�������������*����H���kQ�x�o2�5k[pi��Y����	�u`����%S�O?r^�R}m��Q���7��{�1%����)Gv����W�y������Y�@�@}m3��1��zE�9kcb�P/��,�%������|M�]Z����52Z�p_R�����55�����'��O$����.?�g������@�b�<���P/�v��3{���gP�/������36}������C�r�Gd��)�U� ��d��7>�d��S������
��F������[�j����i�k�3Vn��d�����$�@���s.������#�L����_P���R������S�r�C��z�KO� 	~\��0)���e�)�ele�D�,.'�4��9�qf�^]��*��������
4���&T����@s�b����>
��7J9�<���rft��`��+�j��z(�����b1�U��-��L�k�^�@����G_N6�$R�X���s��;s�]��m�U|?����I9������6'�X~��a�Wo���^?�����B��Vnf��#N�\�����k���$���C�S�����'ls[�`!�T���)���|=��q[���o_��.�}b�|���/?���
���'�W@�W
����Cc��E6�b2�d�e���������[N�1��l3��={[0������V��U%����<�'2K~h_�o������������xgYaf��?�,��w��ehhv�"of��s���\�!7m!����������1L��;����M\7z�Wx�^H�w���e/�}<bNR|+�����X1�m�q2H(&��s����C��<{"�l����W������h,cM
��m�A#q���UP��S���Hva��{���d�,����O���m;>YlO�[v�4�cGf��D�����v�{(p=�1���������"/�5??Z���}��NPP2��x$y��:�\�H�3K]*C��$]�h�En� �x�u_���H��N�I��
Dd3y��i����=?TB���;A�	ru���Q����8an��[��b3����HpYE�D�M�K3���7���$].7oL�o���O��g����pu��-�:e�X{=~gs�m�=�,�e��6��}d^Sq%Po���=_6{1� �������9[����03|ra�����a��$&�Z�;�x���8eA��d�l�^3�3����2���o�a������%o��|kO���4z����Q��U���j��K���}{��u���s
m&gf4=��=��D<d�Kl�����D"���<��C�F���T�G7��'�,�����}Y[���zn���tif�zI���^����������L������yi�3���>�-9=��o/��"�*9v�xk���Rvfo�Q�l���(*�$m��%��Rc��N��8�ak-��\��Y�}=V�m:_��$��R\�fZ����'�C�Nj ��l���~���=#�g��]�V�{(�v�u�:�KY��������"U�b��}Qc�'D5v������o:���:I�������d���&�#����Y���I����H�3�:���'�����}5���];
�5h�����6a���q��� �ap��dr����uu���;��a�A���`�pZ�����F�Wp��
��YV^��dD�^���?~\��V��G<��_APA.��Od�2������3=�M<�3�p�������p��V�e��
M��}�R������+N���n�oLU'�F����5���Kl y�	�{��#u�Ju�GUB���H�@��`�M�Y���=����.�����I||k��k��)^�]Q�/P�p@�z�����9�U'����������[3�{9����`���Y�>\��5��$����%vA`�>�����62�Be�Wd����OV�o��%���P+5#7!�3���"�bLq���� �G_	sW'��hfo�����O����l�74#��:��
-���_���Q�����RP2�#/:���e��=z�7���Q�/�����q��lId���tV��t����PX�#����=q�����M��M���\�`AZ����Y�[1���qi������u9SG���CH?�����
����}H'�3��Cd��s�����O:0VlC� ?Qd�@C����|G1�f��Q$����"�������g�,��B�#)F�����m8J�4���C�M�����3W�_�C��S��:!�	���~,�����&��7iF����^%%X1��A�[�^ye(VLh��n��B`�s
F��QW�u}�����7����Z�T8��9+g�A"	�Z���~z�F��}��hiQ,�:�
r��N���M���K9���H�2���]��D������W�9v��:����57+v��N4v�Y'B_dq�Y�
�j��V�F,����e:r�h�j��&���r�X�(��"���u�n���\8\}�:@�X��n����?P_����_������2�����v
��������W��u�*�����|$�?�����������h �N�!G�	f���U�2d��(2
��!�~
Q�dh .���ZhH�	
�����Q�a
�����
���m�����6[:��I4
�SL�
������&�Imq�*�#%��3�������-�=�%�A�$���a�\���yi!L��8�����B���ZC�d�������?P,��4�
=�)R�~a�t�>��ybkxI\��' ���x2c�X�#�`%��8* �[4�@~���0�����H#�n�(�9�U����C3�� M�k���~�&i,���p��[0��!�C ���7a0�7J�C�u�N(�����@�bV�����a�Oa�D�16	��i�P�S��l�
l�0�9@N�>r;�D^�jf;~�B*��Xo��+�2x^T`��z�XC�-��x�I��!������I�A��v�5k4;`��+� ����eV��.��Q�Z��j���!�
�b2�,�=�JX)��U�8X�dJ��Y�9�	'`���t0��~���+d�P��H�R�_���x�R$��p����!�3�����t����`�/L� ]�^)�B~��}`��u����`6-�OP�M�;��1�Mv�9<f����b�Ko� ��0�f�;`������zKh.���h��E�b��:T$_�)��y��=��"i�JxN��~�E�/���2P4���F��?�M��
o�&I� ��q�0�~Z�,�!E�[���^��.l��1�����i>�-b*��g�y��>4����l�A��i:��c7�?F>��u�g�����h���H���i��<���9h�����S�/|(��u�5(��pPsm�
}�o�Y�q��BDZ�>������a�kl)��=�W;LE���6	u<�.��0l1�����0>�0���hO#a����
�&����0y�~l�a��8�
{�<�*-A}80^\�9}�Qk�mP����g��/`�����ib Az	��C(��2���%H����Y��q��=6I*��.���<������w�/`\�[�����F>���;H��9]��~�A�zHEy��!Ijm�^�W��,Mt��Ag
�Ay��k��
a��.X����Q S|��#D@��@
Q��R�4���Kxn�����T����������)w���&���0[kR���@��X�
t�e��Xw1Q������z2�j�BW:�cK��cM�0���<�����v:��G<n�z��q�����\�
ROH�^@y���t�j��N�����A����W(��a�<� ��*��~����[<������C���\b�Nb,d�ZhA��0��J����3W@G���1h�a�6^�������1��m����c{[/��1^o����a����������C1'd�a���m��f�����1
�!�������&R�q����7�*G%��G:�`���k�4��&f;�g��nu��r�c�Q�C�m���yTAz����������x�d��q��L����T:N`�(@�9�#����a�to<Ob�x�~��y��K;H�1�93^��2|�r�c)�����!��V��!�!��������B���!��d8��<�U/ ^���n�-H1J�a\c�4�,���7�9>����M��x�I����� �K�mq�;=:�o��K�b����g1��M�`��s�i���t����|BZ�����F�}:6�0!�����L����������m���,�c��ys9�0L~+!>c������G��<{&b&/�L>&����Y.���]���)������6&kp&�?��]���6c��|�:��}��N�������K��3��<� ���'�W]>�����J�o�9�Q�M�!�^�#f+�7\��e�8���a�G�>�|���Zc��k��j�f|l�>��.;w�E\���;����<��8�A��������k��1�������q�3�1\��
�u��|iq���cw�����>\����������#w�����_fb�S��Y��a��Zj��/F�M���n��W�����Gj������zr-��[��#>����I;V��l�����J���c|@?p���{�-��]�?^o2{q������nq����Zr=��������q�U�������[�j��m�}d!d��e�n[�$�#�Io�A����jh"���Ba'�D��@\������I3�����d��\�i��������<��Uu�u�u�}��������;�w������b�m��G�����z�����'��@�$��������N�������&[�Zt�������v;8�o��Qn[����=���oooo��s�^���A�Y�`�Fhc��(~-h6��-��@p���u�0=h[ |����%���m��#���	MB��8���-��#))&�~ ;�'�u�cG�53^joeG��c��eG������(>��?����.I�y��E[�����?H����Q@���v�%�YC~����N��f�������s(�b�v�.6�L���v�l��v����v��d�c�c�c�-������]x#�n�����l�`�����L�����2q�b�?��N�
endstream
endobj
132
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Roboto-Regular
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
134
0
R
/CIDToGIDMap
/Identity
/DW
247
/W
[
0
[
443
]
1
3
0
4
[
247
0
319
]
7
10
0
11
[
174
341
347
430
566
196
275
263
412
]
20
25
561
26
27
0
28
29
561
30
[
242
0
508
0
522
0
897
652
622
650
655
568
552
681
712
271
551
626
538
873
712
687
630
687
615
593
596
648
636
887
626
600
]
62
66
0
67
[
451
309
543
561
523
563
529
347
561
550
242
0
506
242
876
551
570
561
568
338
515
326
551
484
751
495
473
495
]
95
387
0
388
389
199
390
391
0
392
[
353
356
]
394
398
0
399
[
668
]
400
442
0
443
[
553
567
853
]
]
>>
endobj
134
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Roboto-Regular
/Flags
4
/FontBBox
[
-736
-270
1148
1056
]
/Ascent
750
/Descent
-250
/ItalicAngle
0
/CapHeight
710
/StemV
80
/FontFile2
135
0
R
>>
endobj
137
0
obj
<<
/Filter
/FlateDecode
/Length
170
0
R
>>
stream
x�}��n�0��y
_&6�f#���T���u�0��E�����5�;IwS	����?��y�i7�(����i�0�H��=���X�J��/����n.����:��~*�[Q�H��/��)L���(�A��z�'����i\�,�V��A_���I����>,������2�����S���<E7���t�b�9]mAc��KDu=09������vq=H�t���nW�,�0��0��1����35
���G���@o�A����G�
V���3V��%�w��;xW����+7�C!�|,Av#b����� Th��>rM�����^�?�W������J���+�1Y���z#AhRS����(T��7�=�:S�KMs�*��X�CU�m6W�67���5gX;�[s�Z�y1�����t����6>E{4V��6��S6w�b<o��F������c�T�;����9�����y���/m�7�
endstream
endobj
139
0
obj
<<
/Filter
/FlateDecode
/Length
171
0
R
>>
stream
x���	|U���g�9��@B����=�f!@ d!!$A@Av�MD\p7\���-������������u)ZW��J�Z����?sN�%D�����K���3g�g��yf���+�"D�C�/Zz���o]�GbNb�+�;������F\�b">������NY�l�)����k��bV������s�	����{���Q�G��w�>a��+�/� �u���"���xF�\��$IM�8E���N��^7��*���9����"Y�	I�FqQ�QX0lXtH����vGEVXPRRf��N9AY������nI�Q91�����s��������<.�|�SZ6.(�+J��9i����O��O��V$�S:}�N!b��)
��dqbT���w���]*[�gZ�^m�U--�Nc����p�Ir���!o�lW
�u����*�d9�,��/��,Q��TF�����v9���\����e�3�������)�����,��T|��.;k��QN�Z�[��U����Q�aF:V*.JK����a�y�JK��7�[6���xVs����g�W,:����E��u������'����0���H@�h��v''v��<�e�wae�B�c�gz��7������S���MH��wm�9����E��JG������������-�w��7��H98����^m�0�,�.R������CI����k���j��S�%c�6m2�&c�����Oe��ln�����������+S'U�%��H��k���I��6�,#� }h��������������r��F'�E�H(�/,�RM?�b\�nQcpG�o�|��q�"cm������S1��U�
#���,e���y�Z[�}�.O�]�0zYf��"O��|�I"O�N��HZM#C�����\��mx����ct��1IY��������6e-^�j
��]�=aT�������eM���W�OM��d�,?��P��Q�
����#���E(R��K��Iw���<�0*����j84bkG�/�Z�-+�p����55��d7��5eg7��7��fF7��41&3���)SN�k��>���������x
��h�H�N���!��`�F��2������:VD7E4���sJ�#���������S��F�w����_��0f*mR��lS�q��L���	+jjVL�-��[U�tk�6�
�����RWQCtfl���;fzw�������!����f��%M>ql����ec�����rHjyfA}z�����a�<+������qkC�\uQ��FN/��Y��\�H3�pA���w�B�iw��1�+C�d������I%
�/��ij�M1�&����\r��^���1���Xp�,.N��tO!�c8��M?������Me-V�o����e��1V��ss��sswf�&%f��V�Z8��)SN_�V����Tf�tx���s�++�s0f5m�]����1���!�5�f�E�,;-�=�<)�6�!W��GU�������o��
���;�W1�`gmHRmR�+�=�=kxJ����d���,��Bj���zb�����jq0q�Q���2u��������x�e��r�������Jg�����c����:�n�=��u����M��f$��N,�:4vz���i�����vo	��������fg�-?J�xreN}��Y>�*wr�o�c�/�.�����(>rf�1��'�e��Pbj��vay�G��uf�Ry��?hd�2�������onkAAkn��������66��T����6�vVVv����N('&�)�t���^��pI�Q�*�n��{�*gEY�/<�6����S�\�������e����	�����v	���D�O�H�J���#���\����������X\�(�c;��Ic/Z��E��oGG�
�S�Y��8:�:� �*�&�dzAvS���5��U���Kf��V�&���F���R>*�6y����4OjBBBhDDCI~]�r������P��
�W�`�Ej7��'�|����6$n�����f�k��b��
��
is�4��1��3��Tk���(Q!�0�2H��rjS���
��/�-���i�79C&���1��S����b�zi���+������Q/0���|���4H5�'��`���_�|�����s����X��L������
�!��G{���u]��QXJ��0�0"9=y�3�/��������d=1���������o������@��P����If�ZeT�2�(U��h����a���A��"����k
�m�O�=2�?l�������]?����������W��i�j��>���=r�P���L�i��G����?)-m����J.�����3���-'�-�t��

��-�����lj>������3�.�q(���L�R\e�����L���)$�
��cfV�3$>m��<+���jr�����S�T;(�� 5D�k73�'TF$���Y���U�_zTQNk��A��i�V*.�%����Og�c=yDj�p���MM��JR3�H��7��8F���o���;�,e��muu$/��iVw������l�f$���W5^��H�1�%� {?�v��1c����v�����i����	����;
G��
���L����GO_=n�������I�eI�������dO�T���[Z.:��d��������E���YE��"�}_���)���s��NUP�������/�*33�<sTU������({AOW�:pIw��>l�Y�#����������z${�*BEm���g�~!Ls��~e���+��E���r�%|���K�0t��|��C|y_��o|����b�S�����Q�0�-�{"�O��"Q���HG~D�3J�������"\I�E7���S���x�@@8�_6��X�*��u0�DQ`�E>�7fz������6�PW�]�1�p ��'���7������C�W��E�y����m����i��G�lfB}��Ca^cc�@�$��'3�Q��t���r��3�	��}��~xSlgS���]��|@�������]����������j�N6Q/��$-3�	"�<�zF�i��b~��Ymt
���<���!_�}a�S�2'��"G:�9,3A_i
|Z����A�1�p�&5�a��Y{@d�b��gt�O����H�Cgn���D���v���T�' �.�-�F{_������|����=/2���y�pS������B�{D��g[�?�o��[��v6�`�z.�B�)?�#x�t?�2�"b�!��JyO8~�]�x���������D��t;N�oq}��u���0��������d��6�H��x�{s�
r���(=�}�"�,�����N!�/I����B��m���gn���c�]�����M�o~W�m�z����W�����=�Z�Mt�����S�\�S�q=�*{��>�r�.j\H���7k���{-U��E��u�1�����k��o�r�{Xe��(��Y���ld����bx��~�k���'����~�6�u�j�Wdi7�*���9�My�b����)_���9������}���Z�������{)o����p"��>n,"�4�����'sU#���r�C����t����_)���6Qm_F�U���j�������(�����c�/�������Mt���������>�K>����%�O�����2���k)�a����>I���|�����1_�1��u���t�s
�C�q������y������p-�VsP�����>A�����$Q~�OP���f����Q�i �������9���R�<��=��z�zn�}�Jf�A"��0�J��{�o��s�:�Z�������m�^�����'��oN+W���
�~q_;�m���s�6/!X��^�(('�z�F�^����s�m�������+��kr��2����)�q���^����/r�s��Z��52�����q�����_�z�?��A\<�3��_p����_1���WAy��L� ����n���}���W�i���F��0r/�7U��"{���Nx�
��@�f���;p������=����;GT��P��]"~ll�����0���ur��9��c�t;l��������c-������H�r'|��������Q0�BT�&A�
���;�m�[�������9S�s&�7G�dh!��}�1�_b����mi�.b\o�L��mi�Bxm�&����h�Em5�a+Kd�OD)j��(d�(u�JY����!�Y���y���\������D��g_�1�������r������	m�-T�7��k���m/�GU���bO}��RO7���������z��wDu���F
u�0�fQ�,�8���v���n�I�
��aB<u���\�H',#��-������}D�1O�7<�'>�=B5{�L|e$��:���
�����H���x0m��+%G�0(�r�u��~�y���?���Hm����KY�$�%�?e���Z�������^�(1b8cT�"����:E�^���a����{���u����2�aM���p�#������G�`��e}��[����E:�yZ�yf��R�+����N�PX�[��6�O�1
��6�jQl�f�-d�'������=i?9�<T���������[��!�bQ��*�|Z$�Y�@9�I�X�~���I��`^�`Hx�����N|"T:�.s����`�p�W������D����1Y^$*4��zy��D"�Jy%�\���������Y����J������A{~�{�KA:�FQD�cu�{u���?�H�t�(�2�c�h������/�/���\�v�O�s0W���`�7J�a�zy1c@�9��b��sK��'ny�����)F���������g#:��{������YChd�63g������??�a�r��*�-�VQfN��Xq��[4>|����)�V��r�����u]�X>[I��vO�}_�d�	�p���pL���{���7Np��=�*c<��)������9�3`)<�������A����V9�:N������N�iY*�)����%����B?;W���3���L,��0���jO��X�������)F������9O�3d�y��1�Ha�B�{��9�=-��8���T�bc���"N^
��x{��D�Ul�eL����jo7��l?�����/�bc������F���7s/J����N�s������������E�W?�g��z+�����}����l']	��3F�p}+�z'q9����}���>��o�/���Vq�pO=�Qe��VJ����,2��=�*����k�a��h�y��\o ,	�A��5a�9���g�x����c��i#9/���?�m���#u�;��t�\����Q��EN����J�]��#n�F�����1�bX'�Yb�kiE�x�|�NYi�����z�Ic�N�:N����
���{?�N����_��j��X�|�xW�eb�����8"�?�r��H�����R$���$#}@�En�&	K�/�*�����F]��\/$�d�M�f�����z���a��cl=��*�*�,C�e?��T�������7�O�1��m��:���@��N��L�1*}�}��_��mf�h?�v`��������7F���E.����w��C;��J�v����|m�8��3����}������W�
�'�����5d�x�����1^���U���;��\O����}b*{�����;N��Nx���*��r���o��H���i�{\��������N[����,;��G�~z��7 W���r0D��o`�~5�b��w�7v���������z8�Ie��l�m�����~I�6	h�������0G��N��5��S���)c��|[���e��\C��oc���|�4��8q�m��T:V����2��x�k��\w����5��'������;����t�U(?{#���s���������}��^�3��	���E��Z������w��>���ib�|_t��:��
����������A�"-����������]t��oJ��t�A�����Z�1�\3U�}f����sa�����s�M���N�t;�F�_	5v=�Z#�����4x�z$r5lt�P}���4z��3��l`g�{��p�j�^���%N}�����/c�nd��SOe
\�L���p6��Z����j�����z��Y�q���:����%��N��n>����a��Y�A�_�7x�����K�6���mr�h����#M����\����d,��"_%���-���	��0�0����8[k�S��-�9p��5�*�������X-����E�yq�zO�1'��=Y�X]�(c1��z�O�I��/���w{��:\m�r]"�_s}.�������G���YN��zg�����QU����q��)�O4�s?O$���$g6;�N�	�f?��k�z��b���(��/�����7)f��)K���j��r+�Z�W�"�W�rc���h�>�z�K�:�r/#|?�$������u�����W�������k����� =�U�������z���:��B�#8�D"=��b,{�q�r�f1���@p�Y���c(c-�%�
������H3���Q$������84P_)���	���E	}R��
��5���~����s�@y�?G�;�E6��q������w�m{>��!��
��o}C�!�>;���4/���sN�s"�z��_]���	��|���+\ ��e`�u�<�?�e��������BnRu�G���l��y�Z��9\��NQ�Y�k�T�'��!r�n��������s6��h���
�_g�Hk>����Y���%�9��!j��8�B�n}���BEkC�����0�D��:��0'��{�p-e���������|%V�f�:�M�L��B��D�{!c�t2��'tk���;�����k}��^�6���?������4Z��@�g,��2[({+u�G����!N�a��.�*|����|�c�������ke��EI�)��u-e�Z�W��C}�Q�i1G���Q��i��*qVz�'|���")o��s�7u��i!_�6�vp����fU�{���V(��u�c��{���
�i���l���
eSk*�)����>!L����<�[U��~�QV8:�%�.Q�>�2V��~���jG��!u��W#��?��
������������5��(��)��/�6jmH��syd�Q��p�5B=w>���H/�$��E��\�Hd�OE{>�_G���'�}G:g�����0�A�u���MPgi���A{��o%�LQe��0c0k�"���1�T�SL�~3sl6,���"��(�2���`�#�K��Z}<��$�g�c��%i��c�����s(���'kkZ�q3�/^s���Z����Z�"L��U�T��/E���v�?_>/��Q��y� ��?�G�������9�1�Y{���T,���y����I�=�����s�f�����s�S�#�)Pa�h���B��A��'��^�wS�Y�6��P��v�/<����NB���!�|���}m�k��:NC��X�������o����U3�mR�<_d�_��=C��BZW�����U�{��>_L�.v�j�:I�&��R�Bm���}i��\'����#���yu>��y	�������3U����3���N�6�Z�g-�E�q���J�Az�3e<�0?��Y�
��8.��Rhs�/�69�����d�m9
���ZN��h�$I:�b��>�����3����&%��D�y����"ZI���>������������q*��b���-�3�i�������I>=GT>���$�d��N���_��1�w�@g��F������l��{K�����v�{��w��^�>��x*{.�E��oj9�*������%�=Qo�����������R��p6c�e��#\$�C��z����"�t�j�^c[��U��_�Z�����{��{��D���%����[�n����o�gn'�f������}0��	N�}��u$@&�����wP�%��xu_�����8P�������(u��q��r|f%�_�\{a<4������<�N]cm�����>������?�u��V~�f'�*���7���+m�S��ka8<o�7�Z��������uq���M?�T6.	�����P\/)���:���(d���Z��9�O�o8����|@�4�'!�7x��w��!������0�a��D�T7�9;n�:�r��K�o�p�sA�N�_pN*���H���|~��������h�zd,�8ct����S��Y�}�Nxzx8 �`F�U�G�J��g��M�<8�bG�hG���p�/�z��c��m0���������u@���p���Dh��&xT��'���c68�����w��p������CX��B6�:�t@��kc+\
#�^�\B�#<���{�6�����J�kEmn��m�E���A���3��5��\���1@��6�w��f1����p	����?�&��H$�3�ZK������O6�^����c�����n�su���X��@��C�N��e����Bt��[g(�s�V���$��r�F�$��,m[��aU��>��p�X�D���~��=����?���v�>���������f
�Em������;�H���F��L�l�,���R���h�fA�h7O`^7������7���S�mp!0�8��[��sg��\?��`��0v@k����#~���������� �v���j�k�<=�<�����O�i�1O_g����G�{�n��W�_/�2'�����K|�t��?�nq��@�x���c.��a���@�U`����_�M�������f�3�YW������H�������?�_�2Pq�����}�����h��������=|����w'������y������p���:{��q��|��=��P��P��P��p����V�]��B��)�l
�w��K����pz0��W�5�3U�m�dS@��6�D>S�'�$q�k0g������g�|k�|#�p]�u����d!���O�7��K���
Q��8��oC�|[gy����I�m���j�n�q��B6�i0��_!��s�:��p(P�l��p�f\��Qepf,�U��a�E�����b��g���^����5B���:�[��}�0O���V;������]�h�
�Qh^�|�v�P�?X�6�z�w��0V��������[������;����3������NB�k�{/�>��o_0�o������e�����k����)�I���F�]��!�w�Eb�-�_��~�_�;4�C�y���?�&�\=�i�V(e={K2��'\&������w�����J���,��w5�����
co��3��~�n�R�\��F����w;��E�
��)Z�������n�~d���V,kA���m��LU�l�]���u;^}GkR�{���h�4�����[P��{�8�^�ZdyG8��^�3T<r�H�$�
�T{�vZs-��A�o>�10���!��
{lX.�v;N]{�w�������U�{�����������7)�����v��7*V��W^b�[���\+}j{i;T8m�pt�P�i�8�������8�+}:�_U��]��&B9�:�c��p�����<���g����z(��|�&�;��B�;�?��n��X��n=f����(p�W�~���~8���`�t�O��+���y$��o��O�+�:��:Q*�
�-�:���s>�?��������j�4��p�l�w|o��/>�G��\_G�{�y2�4����w5?��������S������9>F�����r�3��|�o��]d�����L��#�`�����������G�A��*>�y����r�3��X��g��������o?8w������=�����8Q�u�=>�w�����z��0�t�
qL�s�%p���?Lq����zf��y�������p��������t����e%��cD$x�u�h�����������1p��'�����cw���y�=�
s��^��+�-�4�^Q�2D��9��w����/w�D�����A4�K��[�;\(�9�(�?u���s#�����v��9������~m(0�pi����S����*&�c�5�.K�aE&��+��x��/f�"W,q{E����4��_�������|���������m��w�T.��MsG�z��}��i~i�K��
<��CE	����5j��.8�<FDs��3�E�y1�_ ��:S����<��e0�<E�O���"�P#A�^u������~�B�����{�Q��>t�D�����?�/��5L�&��\!;��0�B��m��3�l��Cb��0�HR?k��)�mX�������L�R�v���L�����2[w�FG�u�x�:cC�%�s%�Lj�����sX$������z����o9�1w��s�����{�����7+L��:������0������*���7���@�.g�-"���+��h��F���5u��f�V�u��t��M�Y����p2���<�)c������{���(�������}�t���eKe���-������{�������o�}=Cn<B=��<��5�~wl�9��}%}{�����	�����
�4��������PCZ�-*>�o���,��k��w�9�)�:D����N�X�V
U��A����W�\{D]�1�@�~�<��|����Q�<'���>��Hk!w��}�{:�����?XO�vY�����{�R�2�N�N�-��o�3>i�������q}9�\�?���Pv���'�7�9��#���H��|�=>�]���?b|rUX�����5X;(o	�`}F��N�{"��s����P���9�@�?3W9��PF:P���t�;\�j���dYBU@�<���[�~�U�����Nz�:t�y�]�����C�e\�U�=�+\�(��w�����
����D��C�����B�8kz&��[�@:P���tO@��K���|�5akz~�^�m�!��<m�!��Og�~�E~��Y�!�w��=�y�r���<�=�Cb��2B���?�=e������[H�����)����kD���@���&�5W��2���R�<�����O�����^��6�2E��*����q��y.�l�~��o�RHGX�����"�4��N:'�q�v�e��,ClW��-���L��v�e��Z�:
�����v���:���i��H���f����Tk������.�[���G����p�e��G�z�k����w�[�z{X���	�
q]�V���vz?�������8�}��]Ie�@t?��>�K��v�c�k���2��:'Zr�d�z��o8�Mg�t�����I����X���0V��Zh������8�0`����U^J��-|`���������.�32L���������yH�����z/��/�w����P/]^��N�+����._��k�~�Z�;���_��|����}�=�����'���R���g]�^Qj�[��8W}��l�Ei�i��y:���*�G!_��3�s������z'��Pd�N�"�&d=�Z���O��2I7����*�$����X�����ds6:P.e����1s��1pq�(�z���f����s��C�N�a��}�(�m�wH��GD����.Rs�k9pv�#�n� �`��E��fl�:���6.��B��+�~;���;�>��4	?�.����?f����[��;Dxi�
��&��q6*e^�GmwX=/���q�Az�*�����@�
G��{z^���G����9{�����3;�s�7�����6��Q���jD^���V1�n=�v�����?�����<.@���t=�':[
���O~�����F��}�;:�<���H���W�y��f���u�y�m�J�z}��n�!���>���u.����~o�Ye�~�]��c�����'�C>�	��yVo_6�zN5����0q��yb~9W��F���h��P�7�*}��O���<�������c	��4�E�z>n�&|���9Q���e�7����a��o+Yc/�|�F����>���:�DK���H���j���a��G�����8um���m����N�a"��3�oE�Q�I���0P�-[�I�r���p��z�`��:8��	��m��]�D��`��o.$6��0O��m#��G<F�Je�H��G���9�v�#�6���\��,R>���m���X��W�����f`�������.�G[��<v��v�'��������Y��<�d?i��9p	���"�e ����o�����3�=�6��g"�u��uco�|���6�-U�����v9y{l���	�6�:#�?�������f�S�N����DI�n7�=���+��
�6�^�E(�
5g��7�4�j{�8�8�������������e���I8R�1�������rR@��4�z�mc�
�
�;����1�>c�#m�{+^�3t
C������7q�sk�\�9�|���|�]�P�k��1���Hc"�V�7�wU�Vk���R�������u�1�I��"�{~Ib��}�*1P��2��\u���f���,u��x���qXw0x������������:	^�W}/�~������`�~BF�t����_�!X�����_���=4�!}��=����>����C$H� A�	��O��
�_�����gn
���(H� A�y%H� A�	$H� A�	$H� A�	$H� A�	$H� A�	$H� A�	$H� A�	$H� A�	$H� �!����b�t���*��[����]�%����
endstream
endobj
136
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+GoogleSans18pt-Regular
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
138
0
R
/CIDToGIDMap
/Identity
/DW
574
/W
[
0
[
580
]
1
27
0
28
[
741
]
29
37
0
38
[
551
]
39
61
0
62
[
698
]
63
78
0
79
[
626
0
509
]
82
93
0
94
[
824
]
95
118
0
119
[
576
0
824
]
122
125
0
126
[
562
]
127
131
0
132
[
538
]
133
162
0
163
[
595
]
164
176
0
177
[
531
]
178
201
0
202
[
602
546
]
204
208
0
209
[
602
]
210
212
0
213
[
563
]
214
231
0
232
[
379
597
]
234
237
0
238
[
564
0
0
226
]
242
255
0
256
[
505
0
0
211
]
260
263
0
264
[
875
561
]
266
270
0
271
[
596
]
272
295
0
296
[
602
0
0
375
]
300
302
0
303
[
473
]
304
309
0
310
[
365
]
311
314
0
315
[
561
]
316
333
0
334
[
514
777
]
336
339
0
340
[
487
523
]
342
366
0
367
[
593
]
368
933
0
934
[
645
0
526
]
937
1040
0
1041
[
238
]
1042
1061
0
1062
[
300
]
1063
1081
0
1082
[
476
]
1083
1109
0
1110
[
232
]
1111
1218
0
1219
[
884
]
1220
1513
0
1514
[
406
]
]
>>
endobj
138
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+GoogleSans18pt-Regular
/Flags
4
/FontBBox
[
-978
-989
3284
1263
]
/Ascent
966
/Descent
-286
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
139
0
R
>>
endobj
141
0
obj
<<
/Filter
/FlateDecode
/Length
172
0
R
>>
stream
x�]��j�0��O�e�4���P�\�B�}M�S����o����*(~�'���<5fXD��&u�E������������d*���M�Uck����y��1�U��?|p^�*����}�9Mn0gq�u<y�.���HfIT�BS�����I�\�k�����5��%��%�Q�����\k�U�jQ=������U]���o�^C��u��T�Q�d�:(��b�%+O�$!�P���@Lubz�eP�,B��d�[�!H��:h)h�#��zV��*��)���'����-�'��WAY��4����{a�������8��/�d8��������*~�9��
endstream
endobj
143
0
obj
<<
/Filter
/FlateDecode
/Length
173
0
R
>>
stream
x���	xU����3����,	Y!!$dY��@���}��eUY�U���R�*�R7���j]���Z����V�X��(��g�	\" Z�����k�����93�|��wf�9D,��zQ�w��Us�?1�79��y���3f�����Hd'�*�������\7q�1o���+�����D&'/\2s�����Df��:u���KrU���7R?u�I����w���^�����g��JN�N��L�Nc�������i-�Qc��B�c��zM�E�{���:UZ�Q��{q����%�	]�u����TW�9{T���{O�+�����~���������EU��0j��9�IeY��g��.6tIm|�������:�Ht�k�J�������P�����F
L!*��������������1{�74,n��o��&&�M_����3p�����z��On���:�=P-e�*E��vQ	veLf[���G�=��j���Go�����g=|�qa}��������n9r���6YjU6�-�[2d�����C�,�c�0f/�.��feeW���}eg��e�����bk�����b���:��W�������S��k<���S���z���-�j���?����I�%��c�����c��J+����TQ��V���Z��sz����1e=��t�c�K�EzK�����OtC��l3�q����]T����
_�8�o���^�9��*2����8:��3"��U�r*{�W����'������y���iI��	��(��+fNzU��:����`�,�Ez���H��?�2!���\���j���I+���d�ed�e����<euT��Q�V�n*IO�l,,�����~$���W�>�����������N~R�����-�5��"#�\�)��k���������W���9>#v���e�����������LoLY�)��>������B����F�jnZ1|��~�
��[�Rzf
��j�)��vB�����#��:�e����������A���2s{�
b������,9�����Y2!f-e��"����4����&��O�����%u�\TW221����#�k33k���23�v�i�,�,6(�wF����,�OO�f�Y�`MKk(�[��Z���!���;o�7Y�]��m��jh��
^��^R��^\l�JU�dzz	��Y�}L����������q6�4�~m���_r��]:^-��;2���9.xM$Vo�������������$�g��J�%p��2w���k"�O���4?������s���cVAIyvCNp��Gi��������@e��47��N��d��j��n��f��5�����:}`QQcFFcQ��t��qr�H���,V�V�
�&����NO��i�Q����}j2[�44,i�������J��������Z
�M�����[�\�X����Y�t��uW������).7!�:�
6%f��k#�����$����\p����M��nm�#!�������<�_vjYRN\Mfcn����15��F������<l��~�Ge�e�fd�%�&t�u���[���X�U����[LrD�n��J��b�d�Kk�����9&-.-�5,��/�:.�������&E�t5�
.��� X�������&1�&9�
2:"���P�S&R|�}$'����5�]���Z6���Z�?�1��U}bF,��xU�iF?f���g����3"���U��kxPaw���4��y�%���|&���yy���|����{;}���%6uQ�a����#��%�o��������5R��������Dh�z����wdk1CK�*F9�CPK�YRh�?b��������V�}+��Cz(q�$���$���*I2�M����RJ����{0z���60����x�/��t(#��A&=�1���J�ay������!���,F�����%;{����Q���ca_��N�z|)����J������`dZ�J�ZJ�=�g��D�/V���`e�8oZ7���LF~N^���O+���*��/
��FfX��L���=s��G�~y���eR���nGG�ZH��H���.����Ys�'�k����`u�i
�D%Jg�"��HV(J�sO�$��x�+t}_�����?O������K�Z��������v�N�'��HrT��1x�]��t�kB���$��D��Q���<��&������nl1�[�����ARn�����P�~x�z����[�l���>���i�_Rdbp���������s$�������]")��������ki�qO������9�oS���@N��1ZOG���g�����z����9_k�.�&� ����C]����L�\��+�>�6;��24.�q�����fN�MS���fu���}:>^I���������z�����)��8�_��T����t����^�J���bG�?�V'P����1Bby��I�Z?��#1�-Kw���=�i���O-�z�PoO�nt�)�}���k���^������eb��O���O���m��V���;�z\:�J�������J�?�vW�H���nl6z3G�$t|�����V`b�z���\�c����2m��g��^���D�<���f�����14�1�}�����lb��m���3msb��%I�_��hg�ZA~�TY/c;�������;4&�9���:6���}�.561�����`.����O���cs�_�����qm�yv��������m���R}@L����f�$fM��cI�:���`���6,��q�����?�x����(<	��a�G4��u�^�[�Qw�_�7`�Y�N'��f�B����}���Z��u��\���>����|��K�����w#l�+����\�O�5�UB���O]�����
\�o5��o��t�i��z���z�{���31:����9u����4���A?�6y��k��g��������c���X����i�6�i�U�9���6���r���>A_�������B?�=�/�xn�w=����3�f:���e�~������srr��]��]������3�{�r�YJ���w>�c/sr(h�(0�r���I��u��(I�ja������������@�� �P}!���A�N������hbm_{8�
6�
�@|�=t�@��$��GFC�$�;Hb�3�?S��+}�I_���g��&o���
�|+��R
c�$��*/]�b�#���&������:R�[�����|�B��s��H�E�J��/������_����f�J�u4c?�,a���3�2@���N��
2�W�}��Vg��������*j����y���[�������NDc]��U�����}��i�8��1��d0X���I��!�N&�QR���dbe!�5[���~IL]D�0���� ��s���Dy��)}� 
�<�o�^~,��J��{�5���>�d��D��i���fk`��e���r�/�H��c��<��T���{�����k�5bK��q��#9��\O�A�l����A��!����"��R��w��u_#W ��#����dl�#>����1��i��	
��+����ONT
�E,��a}F�f|l<k������5�����Di�k�a�U�9��K�Y��-���m�#Qm:�&�O��F
.��c���P�����{:��~�;���=�=nL�������o���9��z�5��u���m�L�n@w���ZY��{�{}��c��g{q�o���<���hHb}�~A���W?���������2:m��N/a��2��F-sW����3c�\B����
p��1�����xu:{4-o�������B���C�:J�����L�A���6F���3�&��T�9`���sr��V��h������^����I_`�������X�x�] ��8�;������Q�;�1��.��u������|�"q��{�~;���8~[����f��x�C�l\���nC���� �������?������Z���x,�]��9��C�s�7.��Z�l�&;���|k1�����c-V� ����8F�.�^�����\�����j9O�)��3�I�b],�G�Q1V��E�D_�S�\�;�s�j����~b�)�Z{�+��A}.V�V9�8��n�N�79k�4����j�U����Uce��O�G�d�Z+��,W��*W�d��FZ�j�Uj���8�g=n�Yw�3oJ3��f������H�g��w�4��lV��t�Y��n6�s���������j�>��7QJ�+��n�|��T{
��y������W��������������k�W�!��X�l����)�������u9�n��s��A^�5i�C��|�O����#OG�4�~��&�uv���#g����m�.�G>�W�6kt=�\���Y�����>Ql�������5���x���_�3��G���:8;����}���6y����_a~���9^c�"��X�^�=��b��)��d�F> ��e�/�T$�rD�����k���9��[	���������h"����������m������|��^�}+`1���K�!��[0N���.g�]j!\��y"rqo,R3���^��'8���]��p!F���3�<�+PC~�NZ�}}�t�Q��$//�+�J�\�)��T)���gK���l��������=��������0��������t�`�J�i���|_�����g�h�������W�W�b_[�v"�����N������_��]^���d���c���@�N2Y �jm�H��>������y�<=�W�O`=�b+k���k�V=��1�!��5M�����_�X�[��g��l���R��u���wX��c�;,��b��0
�k����C&��J��C^^��1��~k5�����\X��h��o��[���;�$t��x��`���m}ZA���p(?;hc����Nqv��3~R\|�G2�>]������|������w�_i#�c���\�]k��{�5������+���G9nl�yz�M�����������y�O��~��<���C�#�_��P��+�bP��Cb�+�\)��,��<�F�2�h}���^Y�����C{�~V�Y��2N��'f�~�)�b�ana�]���q=�My9\L�9��<;����<6xsv������*/}��/3��z�8&������C[�����LG^���9F�������D��g�� {��]p�������������=C�E�_ ���\�Aj)�s8�7�0�C��/(�E?����N������l�fq�Z-Op�\s��^���U�+�_���,�<���i�E�9;�d�>&O&[��<��}�5Q���9����V��*K�Oe,��o*�n}�~�CYi!�d�Z�s|��}-���;�+���f�s��^���]i`������n�^�bS���\O�����eN�Z�}����ad���iM�Z��D����JM��%�sX!����)�d��y�d�������~�$�q<sGI��t5T�����v"��B�}������K��B����H��)}����{��B��K[�L�5��i��
���?�s�p�����O�$�������f~#���'PO�t��C$Iq�d��d������w�~�=g��k~���&3��p"���v`�x{r�C��W�D0�U�\��O�:���:������mt4�g<`O@�9�XR�~�9�)�L�G��	�!��0�1%���U��������=�f���<y;�,3J���i�|����J����9A�Ys���,�	�_�Cn�t��g� k���q����t������Nu8OC>��{ ����2�U��yp�n��d�!���m��tW���~�\��7b�s�o5�7Ri~��r]��S��#�`7�}����	�&H�����.��V��_b�7J��\�V�8{���?��G��FI���k"�!�I���z�����R�9x\��+I��R����|��a���g�}��r_�o<egH����/e��(����w�Y�����z������29��W��d@�ni��I���l��,��=u���}
m�M_�����
 O�����O�7������m@�@�a>��E��<�:���&IUD�d�����C�Y�W*��S�!P����Z�|�����I�*�m���h�������&�F���Y-�c����j��6v]D?����G\I�3��d�����)c��6������[D;)���6
<J�Y�j��C[��*��:pm\�<��	I��`�e�1����'�QD=%��Ki'N�u�?���h�a�dv�
����e.��*-�S���A� �?�3�i�^�D�U&���f���0�;? =�B���PA\)��$&v�h��������9'W�v�*����o'sO�A��r��2��gi���7�8�1���%��{�D�R
H���9�-��������:I��$������xv����
�l���uvi��e;�[!�4��.��^E[��5��:]����o�n
r����{��fI7����7�~V�������Z{%�)�yn�Nr����5k��q>�g^��k�AO���������
R�^�<{��"���?�
�'��@t^�3���Z�B�/�#�fz�Gy{���]/��F��n�u���h��Z)k�"��m�n��n:�S�/�%�:<L�3�M�dWG��6�'j����Z2_C��-���x�{"�Z!=�u��2���(��xV�)�d�'�|���!�G��k1r:v'~����`����ze��J#����>/��9��������X=J�����p�7���^�.�F��\i��Ag(�r�bC	��Y�������@�W^�V�F+5���E�,#s=���X�p�� ���������%<��u{�M��j@��J_�z��� ���������=��o��S7J1x��k�7D�h�Z��Z����������le��H��[������=�<��_�����C��Y�y�J�,��p�!�[���~0���%�r[v
��|�uI�������[�?�,��y��iI�{�o���?�W��Jw�R1F�/�1��*k����FH{�b�W��i�r3�u������f#
��>�8�(M�v��%H�������I���}�����~�6q�u�+��I
:�|��E!e��������8��r���,��������'��{]$�z��#��}�}��Ez�������i������dw�h�M���e1�����o��G{�yg�6�v��'���)��6��o!g��Ic��Gp�'�c�,w��������c�:qM��������o�{���~u�'~P�E]��������[������&}��E��2I�#���E^O�'Hw�:�,")�T�_���=���u��W�\�}?A��K	���1�J��U����aka{�{`"mu@~3�(��g#k!�g�r��$��f����)/����n�����C���A�������k�H������\�r`��{�u~�~O�R��V��?2�a��P���2��JZ�y3�y�cXM�C��rw%�b�U�	��-��.�����q{�+;;�@��������!_7t;�����?/q�rX
��2o<~c�5��mwqv����6�c��wIOs���
#�������krF�/G�k�;�h�|�~
��������r��PJ���s�Up���I����q��M�j�.t��S!�����_��m���9�`,���/d�v�+��������n�L�r&�T�n&�Ld<����=���u�O/M��1l��v���������c�I���l���G�e���l_nG��_����O;5�9��r�%�nl��� �7L�d���^G� ]�y[�oog��6�}\���n�W�v�����5��6��9]&�����8����K����Bt�X�+)�?J���6��<���Pb�{g�F�����(��U�;�=�u!����
O��.�q,6O!?����6s�p�}����!F����W���q��c�g���.��X�l�����mi��6m���/�{aL�_�i���fY����+�y�y�9-������eP�s���&g�}����������:V�M�5}�
�s���?=~`,8�������7`��k������w����C��Fo�k�_��������!��n�2�j=b��������kMp>u(�����_-y�����K������qH����8;�Z(��?'���c?���m���2MC���9jg�i�L���D�17���c�Q��x�����K��`�W$���3:[:^�c�c�cS����1��[C��<��&�4X�����{�Z�C���F�
�I��>S��n��:�-�n���}������u�x���<s���D��u�~�o]�������|�"6k�������X�����=9~�.�Gw�n�=l��	��{�7�g����e���{
��n�d*�nr���I/��5�~�h��K��o�����\�r������~����p��j$g��6�zq��{f���y�.�<�J�7g�F���r��hC8��Q<���1=�,2�h�1��4���K�1�Y��t���B�xU�|j��_a�_���������'�������M���m������l��c�/��a�
��\������m��IRm����
���~�e�W�o3�;����J�\��o��z��"�s���[i�F����umn�����Wn�o1FBO��&�&���J�/��Y���r��!���{�E������{77��������������_j/���7�{�����{�)��������A�Y���E_�g���K�����������=�����:S�qj���_�y|��h������q�wYN�ZO���`�}[�-���������i������n����{��\����\�Q_J�~��w~��^��������K���~�oi����4XO�)f���
�,�/�my��s���L����=��Yj���X[�uG���Np8�:[�*�\����Z�����X��0k�3\E?�����Z�����K-��kU���9��$�~�O��������V���oM����M����%��c����+��~�����K�~�ni�\�����?�^��z��^�.�o�v�[�{>�0����{�_���$��}����m����W�}?��r�q�S��Ll�o��j8p��K={�o&��
Xy��������@��;A��?v�9������}�{�w����������6#���XH����d�'���R��������M���X���L�#e��Y���?'������w*{�2�����H�h���"�-���M��e{����[h�I�
�n��r�}
�v�"��I
�h|��K����xE�8k����C��6�V���[��h_����� ����^����(U������)��G��v:k��Z�;����N!1�y��}/"w�8��j�����[����j�/����qi���L�/���1<{.�<��7{��oiQ��k�7}��?("���T�J��o%���h�keJ�[����z����VV�C
�g�������$���k�I���9g�����:�5����_S�X��V�S{�B���/�>�6�z���w�TwG���;���h]�h_�������^�����'�;�$8�+�yg��`�~s�SBX�=9V��}�t5>�����m:��m��>�9���e^�=�{��9��|�R�_.E�������L[���� �K�&p�T�F����<��:�i�����>��V��&��u[�
�� iGRM��I��{�h�zk[�����l���>��MBw����~o
����w`��v��fy������M�^z������������c�����$i��X��,�_D>�����&���O��s���3��S�����s�����P�����%�j��� ��w�����{k��������#��"C�4F2VM`��H�&��� )�D|,�!��t�G���Y8�g��Y��A����'3�\�e����<&��Y��;R��=��HI��ngn���E���~�������C<_VI���4z��.@|�v=�A�7~=�\��z~�K�?������;��6����|]�A�4�_�������9���}J�Sh����9��O���������r�2�<��OI�
����}G�
=Y�����1mz�p��w�smy���cO��Y_�h�g�k8F�	=!p6z^A��f_(�������8����6�z�~��^��qpzj�����l�;F�J���0�����d-�X2Q�"��|���2����`�o�u�dX������T�X;������Z�R�0dA#uQ���i�r>�����������Q���3dR�Kd�[�>'=X����*����k��c�r��4��Q��4;%�"�:�^��V�;H���t�{L������k�+�7:�1�#���������V�J�S��������|����J��=ja�"�F������_*=�o��8�L�k/6��,G�N���c�6R�]&I�z�l��{ov��������=!y����-�������@������y&��m(zBeh��A�|)�����)�\��hk?12��ab���3_�;��mX���W���;\������=�������Oy>���o�|��.d�z*M:��_����������~�Og�|���Ig�����n���`w�h��:|����My|��� ���d������U*K��l|>4�����A"*J����M���}��8c��<�8���������L�Y��P�'��<��%���|)��Tb��!��[z�?����{!L���3Qb1����*��B���S��B~og��A��%���`:e��fo�c�����b�J�����[����hg$�����>���������
��~+����������u����
�'Rl�S�����p=qx�d����g��v��Z��&��]�d�oo���7�DSv���������.��sH����n�g�I��vS��#����o���yq�w�9�.zz�3�����h�<�0z�b�o���B�|� zf�=����+=={S�����#g����&O��!��9�=�S>g7W�����&�����������D��#�sz;=�
�3�@=���=|3�HcQ��+�oF���o���j�,j7��x��<T���<���9�^�����W�u}0{�^���^S�E�C�����Q�^��>Gh���`�����"v<�^�[8� ��Yr�>!��Q�������W����O�k����%��M�.oC�kC-�X��(� \��^����~�=s�V�������{�79�
��%���4���2u�����(�f���SH��M�����+����Q�8���sD����|��M����t�m��1�pN+q��~�k��;�����~���|���>�1��&F�d�s�\yR�ZHs����z���V���Q�u���	�76aomlb���6QK�N���Dk�kkg������&���A��Y�K��A�9_��*����D���|�752\�X����a��s�����h�$�9:���w���E��6?]�����}��OR�n��%[���o��}��v�y�H�?9^Ry>��S.����
z�:K��)������)��J���X&����s���{��|w������x{������xnF�'<?e���V���������8c_�|dl���I�I�o`�����d�F�E���%�����-d��]{j[�K��<�b�'r/���IY�D�{����mk�7�64#@'��]�
�;�W��9��1�T�����Qi�S��J�/Zl_�������~�������n�}W����K��i_���@��o���74S�����j5�����O�����?�\���dI��{~��'��9�H��YE��2��?���G��b-�&���#��_����j<��~X|K��[��a�����M?>�,�3�����a���a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&L�0a��	&���I��������*���X�Y�Yw����Z�(Z
endstream
endobj
140
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+GoogleSans18pt-Bold
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
142
0
R
/CIDToGIDMap
/Identity
/DW
635
/W
[
0
[
590
]
1
27
0
28
[
750
]
29
80
0
81
[
551
]
82
118
0
119
[
610
0
840
]
122
125
0
126
[
589
]
127
176
0
177
[
561
]
178
202
0
203
[
573
]
204
208
0
209
[
631
]
210
212
0
213
[
587
]
214
232
0
233
[
624
]
234
240
0
241
[
275
]
242
255
0
256
[
559
0
0
261
]
260
264
0
265
[
599
]
266
270
0
271
[
615
]
272
295
0
296
[
627
0
0
427
]
300
302
0
303
[
505
]
304
309
0
310
[
418
]
311
314
0
315
[
599
]
316
333
0
334
[
578
]
335
1109
0
1110
[
234
]
]
>>
endobj
142
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+GoogleSans18pt-Bold
/Flags
4
/FontBBox
[
-1012
-1027
3284
1319
]
/Ascent
966
/Descent
-286
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
143
0
R
>>
endobj
145
0
obj
<<
/Filter
/FlateDecode
/Length
174
0
R
>>
stream
x�e��j�0��z
�C��d#()�P��e�jY���o_Y��I*��73�?cF��yj�	4{��j!��X�aN^�p0���F�_Jo�G�(n�1@��n uM�������QH��5xct��o#�'���(#�S
]4z�U�@�$[6:�M��Q�W�99�E��Q���	^�����i�'`�]��Jv�����:g�Q��SF�
�g��VH�J����LT1�G��W�����TV��z��57��0��������;�v��B'�8Z�?!u���4�7���
�eu�>�o�*,�]��{���e���}�o�Si��J����s��U���}�9
endstream
endobj
147
0
obj
<<
/Filter
/FlateDecode
/Length
175
0
R
>>
stream
x���	xU�����-{g_Hw:	�$dO�Y	��Bv���d�� dWDD@W�t:�	���������qw�t����Apf�s����s�����S���g�j#��'�BD�������������W}���t��;�V��2mN�����'���DC]U��G}� ��j\����5�i�'�
�g�Ny5&���}�k�������/ �{z��&��� !�r��7�W���6BJ�'$���41�.��}+&�������9r�jh�����"��[�2U��t4�6��x�{����Fo��'���r��J�a��x��S.!���������z#o��{���7���`"~�<���k�z�����W���������
&�:��]`i���I�����H����A�'s�\2�, ��Y����!�0Y�t3r���dr��G�r�(YAV�U�y��%�;r����J�X��HW��v��=��<I6���j��"�1�8r�����<-��3�Y~3���}�l#���/����,���d'i#���&��"g�w;�An���g�E�0Z��:�� �R9Z�2�4����8b6,���@n��r�I���\D;Z`�����Z9�
�B�k� ��b����������>{������[e^Dm��F:�n������B�mH�����"/�������K�p���:�I����y3��t�IG��9�H��a�r��7�1�69���89IN���r�#��D������������7�;�����er�\E�D_�����)=�9��J�sf��������j��p������a������2F_9Yi�D��*V�������(���R'��{�~���8�|��W�xRM�iD���I�'X�e�%�E�c���52oDnNvVf�)}x���CR�$'���j	���z��8;i�*�B(��1�V����VE�1//ZJ��Qu[F�U���;�X��r1��%M(Y���&V�t�$����a�Q���z*�������+��������^.'��0p�>'�![o���k��
�9���_��s�1��9:��;����Y�����T6���!���I���a9U���"sN��`��y$K��U�eU���O�b&���Q�Z�����H�ZcmU��*V��V1��u��3�a��F��*U��F�s��F�,����U�5�[%�x���9U�U��W"Y����	��'�
�~���N�F��Rdfi=����)&�b*�3���2�L?s��J�A���J����-���(���/�p^o�+�k$��k5fg�v+5[M�0�*G]s�ccP����*5C��cl��3Yd��>�Zb�/q\f������U���l).}Nke6P�����Ez?oO��:H"�HqX���)�9���zkp����^o��&��b4�Y�^2j���q���U��J��R��a�Y����������9'��.9)�h�0���/��8JH��� !�e�I�D���<��b`����2����^Zd���=����JKE�s��o���*:������p<Wh������0�\�	���%�b��J
�fc��b�2���Im-�o~�1�h�Y�m�()�#���u���B`n�����!�o%��pz$?�o��KZ�;7$zL�X>�j�`�D��\,m��*�^��m���m�nm7�Z�r*�H�0��m5��������ts�Gy�|�_���'��H������	�.->t���m�*3-��8g��ce�s)W��z)!��	�\^�e"�E>��3�tM'%r���QR�)�<-���`y&9O��C
h_��9�Z�o�[Z+-��"~�G��VjN��qx;T�Vgc]����)��K��,_%��1*�E�HRk��F���(��tK}goo��pJw�b�8+�V�H,���Q(7B��#�-5UR��,]�Yc���7D��V'���q������".�A����[���X��H����y,k�$�8�����ci�2����9l�$N����Y�I<��I���k�8US�Gk+HM	�9[H�u,���"�N�Y�8I�j�a.n�V�A�!�I�e�4�aj��/��:
��Z�"
��)�upj��-E�R���m�:I�q6�)h�Nj����������wA�q0�X#-.�{a�j���hw1����y��m[t�Qz3H���0���������Q�?�������}k/��-�2�9xe4.~w*��{K$jL�Hy1�'m�n�4q�V�	R�F�1�)~�JLZ���A��d��	1��#}wP��Y$����wp���s����>�����gjL��3�q����)��.���	�I���1)!��@��|���ABR�pA�~s�h�Qw�3��)jU��8�n�1b��uq���87��W�����Rw�k��F����f�������o>����M(���CB�����>����u@�k��;�'��V������n7�i|�V�4��N�(��E{��Q�\)F����������	����aY��F��lK��}l�s�w����?���EVn����=����Kz/��E;��������wR�������e�p�u}��I
		��vR�����[Pa�UE1I���s�b:B���*E�}�Hw*8.��_�b�������BT���������1�]���' �1LQ���qs��?y���e��
E��'��Kn;�Q1�����aO�[Z�5�!��f�����]��\�/�MO�f
��0���������u���y�N��M����:��zP��\
I'U�����
�.�=�&]��q�aR�D���x?��p�����U�/�{G=��i���K��fMHlz���aA�T�6���|���B�*[�������g��/����b�pu�E{;�}#���;0��*U(��*t;�������(����#���r�R�� 3\H���,�����X��eA�I��-�\���Q�h�����/M���1u�����L���"���6>�v�pZ�������^]U�9����������,MRa/W� ��d4�$+w���������(1n��I�Mn�C��G��!����I6FO��
UZo{n^n�IMhn��I&�4W���JzfHA������}�I�	��WjjL�$I<S�=���~�������$��vk�	�����p�"e?�����2H�G��_��c����-�B)�ZNl����f|�=z�����&���!s����qO|��������}}]R��1�e�i=�c�K���W;�~����R�X����Xa��<vQy���O|px��,��*�g����?gr��{\C#c�3���G%
�J:kV����/.��6D��702R�-l6v���C�b� [�=��KH�i�p�O��+��L�5P����[�^�RD��p�K��@q��3Q�j,	�jij����v�/2�e�M��KQPP�~��hF�wL���z����qY�^����b���g;��.��:����k�S,�"Q �+&-U�8�jQ�,Q8"A��;"9�9�w����	T��G{��]��o�BP�7�%77���8��;Q��x��Es�N�J��p��."g�yI#��4��!bH2x|q�W���h����(��U7\�������K
g�oo����s:��G;L���(4^S�k[��{��s_�`R8g���;m��t�������6�0D���-)��|c���-�y����I�'���/5�QY�V{�xq��02���Y���m6�p,&O_�[�kP��������1�M �-�"�Ry������ON�=\����������;9n�S.�/��{�e���l�Y4(���[���g:�����0�$�����+�|����}�"�������!$�]�,�D\������Sh�u�b�2�B�e����wF\��c�� �yQKq� <��W5=u��E	��7�9�<b~p|�-0aLb���u��6��i��������������sK����w��9'0Z5r|����~����:y��
�.r���
�w��FKuL96�r~jc2�3'�(-/�7=���%�����V�B���o[<+0e\Z�<i�����OM"%]$�v����B��{:<����(!���L�^�y���zF���h9��y�K����~M�_O���s���<�����B��$��������V?���(�^<�:�~G�y������N�n.��_�u���c��%gXR|S��-sG�WRi��~�^>[���u���|r+Lk���i����1��tQA��f���x��PF�&�]���6���Z�������puv+ 7�}����Z�)y��9�������Wnx��4WS����x���@������@,	��������{��h\�R�h���va��Z|�[F8M��g�� D��,�*7���q��"C������B��$F�
J3��D�1mP�@5�]�Bh����&R�����H_����"V��$���n�<p�W*��5$�L$�H	]L��-3�G��K�8q$�����&���|�D:R7�Dv^�r�[CS�dc��,����+��ML���R��"��������08����x�T��pN��J��w��L�����P�H�p/y����u��f-�8\!O;�<^����Ip���'��������-������%��'��*����za����Rh���������+*���G���3=�u
��/6,�S���{�
��X���,Z�����mg~Yl��FD���p�����|t���W�W_�������cF��������d/�����s-C+K��&D����2����Jo�{==��~���J
Z���S#�����b����Mi�9��CC.�S���R#j�A�|�/���a�OP��a%�R+Gn��!u@������M��xv�9!v|f����c+�WZ�[.+�#!+N�����69���.*����IW�|�D�(UnnN?)\4��ZS-"���<^�	RO��#�1	��	��������(�q��z���?�7�S�1j�F
O�U7�]=#�9i���."0��.��N������~���K���>}BtW����vq������SZj���F{�+�-6��~kH�Tj0���u�g���LL^>��eBl��k�������-/����6�D�J���5|D]��Fa�����Uh�ZT�{�b0I �:0��j�{LX']k��K���>�MWOO����F}EU+�����y�F�����J!�|��M������vNAg�����_�5}��25����5�k�3g=W[���l{���9��Uf��g�����_l/��X�fRDX���U�7��6������h�J��
u�{-zyj��K��+kT���1�W����j��K�@I�/91��,���R���m�6\���s�V(�{���T���t��P�3`	I�����L����$��B�K6����yI��T�r����DK�D����,���f��Iw�}��F�w�	_��<�'�$����^�����\�f�~���qu�?=c�)�>������n�oSt#]�uz'��r��G^��DR��Z�*�I3�����T�+hUP��m�k��Qo%s�	%����)�q|I��vk$O
�&�1��d)"�g#���P�/�U��8�8�R<}�K�#�4�����m�k���w���t�����A8'��V*�K���hE���2�?��+���]��o�z�����]]������"Jb��RG���)�E����)���w
7��0��;7=����:7�qs��ps��_���������+�\��Gn.qs����������������o���������/����sn>��Sn�s�	7s�7n>����|��9n�rs���y������������)n���$7oqs������Mn�rs��7�y������ 7�q�*7����>n�����n�r�����tpc���+7m����Nnvp�7/r�7�s�7�r���m�<��Vn�p�47��y����<��n��f=7�s�7��Y��nVs����������G�Y��Rn�f	7��y��E�,��np3��y���f67������4ss7�����tn�qs77wq3��n�pS�M7���pS�M7��L����I��s3�7fn�s3��2nJ�)����Bn
���nFq3��\n2�����M:7i��&�����p��M7��$p�M7���p3�C2)���VXB���
!���p�oZAQ�A�]��18��EH7IG�W/���8��q4�& 
l�e������.a�0�V��%�'�����|�����;O�"=����9p?
�qf�|l��Z�(�������8��Y���}4#�Q��G���P6%���.���&���*��,�2�R�_Q<���i���q�ee�e�4��,��*�[���Ee��eM4��n��My�Pm���<��S��U��Qf���9y�v	���m��H�-�{	�N������I��#.%����1�v
��_H0��P[�"�ebg���&��>���L~cr��?�\e�+�_l���L~br��e&?2���"�L~`�w&�3����L�a�5���|��[�`H7���|��S&��|��c&c���2���9&g��a��-p(�}&�����]&�09��m&'������L�1y��Q&G����u&��br��kL^er��~&��t1��dK��e/�=Lv3�`bc�������.&/3��d������&�3y���L�3��mL�a���&��<�d���ld�$�
L�`����Lc���Z&k��f���J&+�<�d9�V���#L�1Y��a&K�,f���,b��d!��,`2��<&s��a2��,&�3��d�f&�1��I�F&�0��d�����d*�&S��3�cR���I5�*&�L&3�`2�I9��L&0�01��� ���cR���I	�b&EL
�0�d��L���b2�I�Lr��0�f��$�I�t&���1�d(�!LR���VCR�$3Ib��$��[�g�2c��0�$���%�F1��y�A2��yIk�&���3	c���$�������	f��I_�6����I�@&L���1�e�����O&Z&L���1q�y�C\�83qb�a�f�b�d�`"2�P&�����p���o���
~����O�
�~��Ep�����o�7�k��|����3�)8>�����_���8�^||���{�]�8�'�[�8��7�Qp�^��i�!��������.�	^{��thw���6��v�n��/A_/���s�Y��l���`����S�SXfjv3otm~lO���q�X��5`5XV����mm
j	�[������1�?�?�_����/��u��M>->��|��h��[����P�6*6j2j�Cr�<�A��}�{����~�]8����g���}xf��*��S*�t5)���T��[5��t�5�D:��&XU���l�Ds;�+-�T�*�zJ�'��^�b���o�[b��[�����[[$o2��W�E,��3f6���lnn���3g47� ���7�������ovXt����3#g@n��ivl3��9)n�l'��c��+��q!
����z�
p������W�������Gp	\����{��|�_�/��|>�����1���|������N�����p
�
N���	po���x��C� x
�
��`������A��v`m�e��/���y�xl��3`+����S`#xlO���q�X��5`5XV��<���?����'0]��0?C:�s�l0��&���}����i�np�
�P�@-���
T���L�`"�3��2P
�A(`,F�� d�`� 
�`0H� 	$��@,��H�f��Y��?���@�����=
endstream
endobj
144
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Consolas
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
146
0
R
/CIDToGIDMap
/Identity
/DW
549
/W
[
0
[
549
0
0
549
]
]
>>
endobj
146
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Consolas
/Flags
5
/FontBBox
[
-20
-205
551
849
]
/Ascent
742
/Descent
-257
/ItalicAngle
0
/CapHeight
638
/StemV
80
/FontFile2
147
0
R
>>
endobj
149
0
obj
<<
/Filter
/FlateDecode
/Length
176
0
R
>>
stream
x�]Q�j�0��+�����	AH(�����Y��X�|��WK�.Z��������s����������t8��	�G������Fi��r���V�4
��P��[as���;B_�D����Sp�X{�	���0� ���3�h�m[�������x_-B��.#���r���IS�`�<�`��W/2�2
����">��:}�)�}������e��)�j��}j��t�e�r��d�~O'�����s���~� >^i�}�56���K��
endstream
endobj
151
0
obj
<<
/Filter
/FlateDecode
/Length
177
0
R
>>
stream
x��YixTE�~k��	�tB��&�Yi Y�(L@ "&�d��E��
�����*���[T�1�����0:8~���
�+
I�;u;C���c~���:u�Ru��o�,��g����rO���Q���i7�=��<�Ol����>qp�|�o���S&N����)����?�nD=s��Jr��7���q�Z�������&�i��/�����'VWY	�~@�{��L�z���v��#�W��XO����0Wb,�������b�����	����+|h#��^��G���:�={1�>�������;bdY��U���^j�"���l�ey��3�l6!��Y6����E��r[t���,��[��:��{�w������pz0��<�k���4�.������S����mi���25��@e����}C���J��HY6��^\�l,*O�������e���d_yy�m5�H|��!m]Y��=�v�V����l���&$����55�5t����\yC�[� �b�G:O�����4_��4,/��#�J�*+&}�bd��Q�m������
d������v���]n,]��XUy��F�{������9e�,{��]^�-tEQ�nt�����(
 ��w�3Q��M�(OLLl_;�c��-g�p�����e6�M����$ ������/�*�\!�vX 2��`T�N[���h�]�%>_�O�0����b>�����7�l|�E����F��}�)�jX�����
�b9��l!��R����t�4K����M�JRN&5i�"��H��k:���������Q!#b��Y�� ���`�����	�~�kKO �g1��8�?1!�wOa������	�	��������h��;.=#�r��P��-{'t~z{J�f��?��'�x1%~I`��R�w��O�����5����S���Yx��w���kf�/��+&,�b����������~��?�G�����?�g��G��O�H`t`r�y���
H��=��z
B�v<���d���9�YAE?�/���� /������6A*��'��X���x2Ph;A;���1<$xb�7	ncy&<���h����E�Lp��8Y�L����_^�:��,���[���+�y\��
��K��"P_O�+�?$GSt_m�5�IG���pb���	�v?����kR)��Q�7i�#���z���;�nK�����X��^��n{HF��s���%9��L�����s���)$�����6�c
�'�"��2�[�7�R�'��{�32�{��e���,��h�v~���z&��+�5{O�]��y�m��W�U
�l�x���YV����|,w��2�>��*�w���;9�� 5������Iy��������(7�_C�������qd����i���s�pGA	q�p<��],�4�EG0��S��wn�{tm����P��~_�|���o�K����{guR*��"����(>O�f��r7k�d@XE�
N�w@	��]XO�&z�g�����
6��g�0���yZ�E?O��{$���Xw*&�������>
�#���RVF���;���(	g�4���`/���8.4����B�#P��b��3J�T�F�����dl���_���z� �0���ky�x{��u-�?��'�D�K���*��D��`_"�m���z��������
z������(P���|(�s�F�|��(��J� R~F�{��:H������+��&���&d������4yOY����L�/�Y�M���}��[��5�^���=�����\V�D�����<�')�R�q���x��fn���I�T��r�~���7����r�����b��D����&�'��>�$||�^�Fa;���C��+��t�X��B�/}Z��~G�4\/���b+���au�D�0N�S8&s���/�%������?�q+�`�A�����c�x����V4�[q�����D/���Jv����G>����'���Er6�����rJ�B�b�#G�C���N��T%z�;�]U�J��4z�i������l���l��c,k����D�%������X�b�Y;�$c<Mo/�#�~�K��@C%��Dm���?$��]����<�H�Bu�*��#�����ZQ�p���e�'��L��)qKH�B�����it��1���R9F�`�|���~\I�#p�,�4u'�
FX�0U��Q2��N��>����r}�=��Xl'�'q��X��j��P<v�{�j�~K~�5���K��X����]��N'p��by~Zo�u�b�,�����'J����Ju�b�,|r)re�2�_�	yr	��������F��Vk$��|:��cy��AD~\j�'>L�f������_�v�7U$�:��1��0B@�������N����OZG1V}F�<�t�*����������G�����C68��I,!��lYd���(
�����y.����B�nL$*��!�>%���"=d#�v�Y	����L�P(NQ����X�z��H���=?��lk2��I���T/^E�k=���]�l����-�$wa<�����u�����G��\�[��Q~?L�"+5dS����D�:B�|�l�GqD�+�i�[�k&���\�~r������b��\yh�n�Gp�uz���Y�xA������7x�U��Z���~Z�i�n�ta���(�E����_�~�o��Z�U�&��I���K�l����Lo8��<��6���g�$�kt{[��ak�����x�����%����f������e�P�Z��'�7XY����Z3I��m��Y9�����{�|?"�����(���E�}-"U7������:{P�Vd�O���;-����6��*���fW7���R>-��r3�����;����QO�MB���x���UQ���jf��<ks��
\��yw/S7����
D)4?Kt��	D��!��%X�7�6��"�#��jC��]|�����D=��1�+Y�X�b����=��!���I�����o�X�~����d�J�9t�D? ���-�S�^L�sNo�^� ��������5�;�3�K�G���LmI���������i�����L��-������+[�����I"�����\��y9���osf���p�/L�?/'�:i�E��i�9?s���UF��*����<�*/�b0C�����;C2�Z����5w����Zs�u��p��Y6��0��r'�([�=������)7��`#�oa�e�Nkn0��� |��t���V���/�y�u����o%�aL����h��������	�9�������S�v�<�r���D��`3z6�yf�w����0��W8_�_M
p0(��f��{s}
[�����B�����P�/&�LcG��&|Xg�9��|�`N�?�;M�7���������u��c	GR��nt2x5�Ca]�z8X��M�g��Q�@v%�b�F8��=G[lc��SGZ�h���9f�!�?C����6z,ur ��q��#�9�"�]���8k�
�r0�(��?o
���i�9oQK�Q]��|���<������&|�k�en������vpg��M.��m�LcC�C��%�_*�r)��P<]g���}����������-��W�j���9����V>�zr�}O��U��]��+����|��M/a�T����9u\��O���5��r��l]g��GM�	���m�����7Z����5A�����	�`���9MW�w�k��u��p]�.\����B�^/��>$`����@;�m�#,0;*�F&�,�g���������%�w&v�!9�x���eC�tuf����.	f&+���L23����mf�M�]�#��\�/�6?����M����E�.��;�D�<���bfm��|e����k&�3�����������qQ��E����6.R;�?��������$678���!7���0�l3��a��R��|��|��|���`t
}6;��f��RS���f�5��f�f`��M5_��x6�
endstream
endobj
148
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Roboto-Italic
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
150
0
R
/CIDToGIDMap
/Identity
/DW
244
/W
[
0
[
448
]
1
74
0
75
[
549
0
240
]
78
81
0
82
[
540
]
83
85
0
86
[
333
504
0
539
474
]
]
>>
endobj
150
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Roboto-Italic
/Flags
68
/FontBBox
[
-722
-270
1162
1056
]
/Ascent
750
/Descent
-250
/ItalicAngle
-12.0
/CapHeight
710
/StemV
80
/FontFile2
151
0
R
>>
endobj
153
0
obj
<<
/Filter
/FlateDecode
/Length
178
0
R
>>
stream
x�}R�n�0��>���� !�*U%]T��2�H�X�����$�"��7�����pW?���X�������h�pp
��}g3������za��7�8A_�v���>9Nnf�G=Hx�7��uf�V_����`��`&U�4�^�E�W��l]k���y�k���#�dF
F+8a���_+���0�&Q�l	z��3��,B��[�[UT��b�G�8���.������[�%)��RR ��Y�	m%�
B!2�n��P���D��� ����o�%d&+.E�O&=�$vNfS������YNAbn��s)=���l�\�2k�	Q��p�@�T,��8���R��/J��
endstream
endobj
155
0
obj
<<
/Filter
/FlateDecode
/Length
179
0
R
>>
stream
x��[ytS�����!I�!i����6MKZ[�e*�����e�i�e(E���
�VT@�o�T����h��,��� O�9���IJ���?����}�=7�����;� ���0�ra\�j����p���'\�z����g�/��?:���vG��IS�?=1 6��*����8��qB���U�n|�8_�R>w�����=��h��=�j��V0dw������6�SeV�q���	~�����H����4�RH�g�l"��c'�@/��Y�I�	�4��*������]Qq=!K�j%�]�N�0>E!�qqe�
����d�t��(Br\EH�?��^WW;pjm\���IS1Q�������8���yx�M�-�n��VR����|Q���'���`�:��LQ���q������b�&?Z��/����
��E����h[II�"������H���dE���h�3+Vr�(��u��6���6�5�������{-Pp������m����f���%�)�.y�����"%+�)�>Y�#N�O"��j��������!^�a^I�b����0@�=�eH����@�.��C~�A�?����S��[d��`�"tiA�BS��id�u8���%��1��Cr3��iU�}�v�q��%���.6��&	1�F2�M���I��b���H�9*0F��))�wK��tq��V9�����xLX���R%��1���
ip*�l�W� �����u.�}}h@���`�FX��=�}Fy��x�Q7��d`aI	9$\j��/o��U���R�������&��k����8�)#<<�*S��n���4i����������v[wa�H���'H����YOv"�g9����o�
:���<3k�g&fJ5IY��LM����I+���m�n������Z���e������"o��L���?���6�k>��m!5�z2����s��K7������������%��W�������%g���-�4�4���Z=00�[�@9m�6��y��������	�� �� �[t�	��-"D?D'r���zzcBEnP�A�78��^��)\'�b7b�$�5�k{��3��B���|���h�����U�P�BJm(�H�e1Yz,��\�A�5�"V8��X�p|n���'X����3�����#�ffde�w��Z i2���h����x�b�4���p���7�]J�����d�������5o6�?�������������V61�\�D9T��x��'�?������u5h�p��^5�T
�d�\'�H����z�!�#H��]����p�yy*;BcH��#���|?If���E4�J���&�j[��z\E�]_�@�����5��>��h�����Pi��M�80ff�'�w��=��
�����{.`?�C[���f���kk~�n��o}9�]&K���$�9v���e�~;���V��+0����P7,rS$�E��G��r�~��������4�k���h�xH��y��nN>���K��/I��l�[��J2�I�RX`�e�����wy^P��dg�����$��H���%���w�g�D\?nw@H�Z
n
-��F��c.�1�����Q����!6:h;_|Y@*�M������D��r����S�$bg�D����.H������H�mE�/�U=3��x
%p�r~3�����A0��r����,�eGG�~&b'&�4�T������a�?bU1<3���q���F�R�[bO�P6er[<�thq���|A	�Z�������������;�p��I�Gw�����fs��4�
���wQ�
s�1P�c�<}���|��7�&�Po��h�H7S��@�x�������D�n{����
;��<F�I9�~�5�~d�n��n�.B��^W^$�N~J��;�	9���������xe�q���!f����D�)iPBZ���['X ��`������Otn����E[��k��$'�H�����}���	^|o�\�3%N��T}������+����l�Y��;�;I�C��$Z������"��`���Jk��
����I������]>�>���v�����3�t���oj�Xa�C�l���JD��ZHB��
�b�o!z5Mx�D�����8���Xl$]5��N�m��P�|%���dp�b��%���yAR���C��p�*hL�Q�9T��f�=	�;�;tl�!�z��.��3%,(F��7����v�Y%�P��'xF�����6a�y[�U����j�i3c	����c����c���e�������>?�o/�c )$nV�1fZ�5�U,��h����n0���s����=�l���%����n��JWhq�����n;F�^�,�5�Bq��FS?���q��h���������G���-�!�Yc[<$�J<MF���bNkH��%N�M�_�O$���As�M+I�p��%����4������.�W[���W�x�n'��Lb�1
B����������x��.�L�����6Dl�u���H*)d��cO
qts�D�o� �������xV������g��[k)-�"*Zy���F�Mz2N���|�/\oU!fxj$O����]����'�-
Fdv�H���i1FX-�_��5s���+���q���C�
��,l\�����snyT�������E���=xt�^�w�9�*�\w��h���6f�G�����e��_4f��m;����q@�q�u����6�`Ym�*�]�����~Af���$
g�*��@��-;K�}�=�,�5�������)�Q��y���jb����dp~��}��#��V�F������s]�@���!��v1-������_9�a\rSZ%,��qc�BQ\�U]���,�K�TJ�H���?�+$�����Kt��i3��*8g�4�DD�u����������� �%�h�P���lm���0��y���B�#I���V�_=u�����n��v%��u�u����'f�x�Z�����m��5�Y���D'I������$��#�*�s(w!���@;�tD��zvVZO?Q�4�F�VM����c�R�h�cS��E*��o�<��z�o�@����;C��Ll�j�Xl\�,�;m����I��S��o=�r���|���}O�9+�<H��I��m�"�>�S�*g�,yr��ja�ub�,��a��-���94*
��)�7��
��?P[n{����>���q�V�t�=S�j�����s���{�2���Saz��W������\��y)�����=�t$$u�J0(��X�����A$"�"(�G��#�A��%��J�n	7�U6�	�W��l�^23�-��dr��GS�������SS^��f�So]"�����,/]L�����7�����	��%�T�T�.��-{����<��)���c�A� Oo3��h�f��r�*�?F������8�������^$%v�h����n���e3����J&7�d���,������>��[���@�,NKTPhQ�zY���|�������d;��xl��A�%��9$����}��G�E�F	����E�VskH��N���i[�����ru����g���Q�^����BR�z9������@�\��NT���TU�a��r5Fm;�r�j�h%Z���g6s�����w��hu�Q�I*Cg�%��&+�3w����t���Z����w�?�<�N�Y���3�J��fg��%��9��su�������>�)�9�W�I������x7������Wz�-�w�.6&W�_t��Z}��,�-|��}������t�>��Qg}y��R��ByzK?�*�@����6�{KK�������x��j�80�y���$yK���X������������r���4igs-��?����$�Pm�S;��=��c
6Q�����|�&�|���
��VZh t����UvK�a����5u���;�{&ApP�3��fgfM_����cj��N�gT�bf5��5��v���Y���'UKp��a-�W���-�I��q���K���"5\��=Rv��HF����NBg�\gO1g�C!|�n�vN���0��>��_�3�F�XA���4�0�������u��HT��5JJ�t��}Q���
�E�g��eY��G>���9b`����gG���"����a#H��^�w]�|�����+/=�G���o�?���C��Am�\�)��p�t_5�����ip���Z/�������0��7���v$�l�x�5����7-q�h� ?�����ht�����2����$����)S���������*Y��W	j�
����D�q�����zzu�/���V�%��osV����,xf:eM�r���BJ��>�/���$�>���g�G�ml������$�y��jek�;�#x��WC���/�[��^MT����7$����L�t��Fbe/;v�]$�
�'�i}����(1�YD�=��.��z��X�7�V7k���� �[��f���-�/���M��$�}H���fG�#Y�*��������h8J$��"Qc$�>1�'��6�[��W�%(��")��[��Tx�d�!������<�.k<[M���tgSL�F���kN��k�-31�k�j�6������VX���X�	��A"ZG���(����[Pn����\�^���^�f��N��{p�]�B��~���v�$#����������1BX�C-��3����6�O���\Os����.�gu��H��4�,@W{=�e���3��.
���}zgn�)��>���H�`��L�ra}����	� ��hq<t'W�.D�:����;>?i/R$�~6R�T�^��G�<�����b8d�[a�UB�h:�`i2h�hX!���R:�k�&�x����
:���d��#`���oO#���;�|8_����\>,�z�Fv�]�@�x��9��q���ow�A�� �2�A�/.��b2��+��A!=
��p������ljv���\����g�A�������G/ o����i�����h��ZD���nH�2��<^J��h����G`�Tw�AT�Ic��a��F
`���!b��c��>!�����6A6R�����>��ep?M��x��*����0M��py1�G�hV�=r������a�k�#�K7Cq^�B���<��G��������#�@�WA��L�d�0j�E�&\�;���v(��\��P�m��������=��0B����YXLK�&|��B�NW�F���H����4��\C��8�s��E�J���r*�q=��3�
y��J
�!M������6�0�����E
�s�Q�y8g-���:2Cj�q�
*��+��	�1�+���%]�|�&����\��O��M�N����A[��d�Iuh��om4M�����Ua�v�B V^�p|f3��<5��P#w�6�5�A�g@o��(���s�F��ZX!�����M>Ib[��Z�����!B6!�cN&��>C���(F�j��\���>��-F�}�j���(������i�����U�/�<�-�X���[�:�I�{e�;�����"O�8����0W7��|m��h���6��@�m��i�9c�x����0��Ae��*���H{��!�������\(��E�W�u,��wM��P��FM$I�1�nH�1.��
�1H�B������N����\;��3�����t����aX��K� EN�����
���]*m�5r������u�+��������>��H���3q�:��)��<w`����G�(<����:���>����r#���`�%@���E���@_�}4W`�\�$#����_��~m�y�f��q�%!�����#�>��8x����5Z��r�8����0��
���0[x9���!��G��B�'@��s���;�����XWK`5
�i�`��r:�p��5�B1��:6]^	��7�A�"�c^_F�m��	�b7� F�,�|�+]:S������~�llE{N�x,���(�,����vK"�2�`���N���N��q�{�����`?�KGC-����S�6��=���v��6s6���X;��Z�HiH�HH���=��	'`���RgXE	����u�+E���*N�>'��n���H��{����sM�]Oz��^U�K����Z��	�0��f�k��\9������}����3�����=����k��"	����H�w���;y�3Jv�K_B=�y�y���^H�O���H\>�M�����)�5 ��:sYn�9��=�O9b���p9P�����	����V�c��|1J:��8��M�*�8^���������	���}�x��A�n��8b�7<����*�ArK���_���F}�[��+�qx�p�yp�:��c�1T��=A�i
�#�e���Y��U&�d����Q�k����9�8��5�q������V�����{��j��^�bw��8>���z^���G��y�&bn/O����O�|}��[��������r����xD��<69&�8���?�������Z�o���8�cN�w�~��x����W�:�����u��u�����7���z�P��w�v����<]-�����
on�k`O�������9��sK��~���������\/���Gx9�"�]�����O��q��uVx���2dq�k�_��_�[��1q�k�������#`������ak��x���x`{����_n���c�wwz��s���3���)N�"�ya��]���1�}�xR���>�����9.�i/���!X�|$�-��[3U��~@��D������>���`�Z���}�^��V������7W�{��=5�[�����|����A�[����:����{Bo�]O}�>d������������~�� |�L�~Gi�q���&<��xQ=~���.{��bq���4P:(����������T�A�E�R{J7T�MwRw2���=�{}�~;_�o
�,DR�3��������#������������p�.�&��;@�|����]A�wV�38��v���K���P�v�O�s������rO|`��;��*'�j�����H��_i��:��ohsR�#���.+�s4fpN�6�J�tl���G�^����s�#-�,p(<�BG
?�3�E�>f�7����S�������&~z��\�kv��������������C~�+?�F���i?}�O.~���K��o�Sj���	���{�g�
endstream
endobj
152
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Roboto-Bold
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
154
0
R
/CIDToGIDMap
/Identity
/DW
273
/W
[
0
[
443
]
1
3
0
4
[
249
271
]
6
11
0
12
[
351
352
0
0
244
387
]
18
23
0
24
[
573
]
25
28
0
29
[
573
]
30
36
0
37
[
672
0
654
0
562
0
0
706
0
0
634
541
875
706
690
645
690
638
614
618
658
653
0
0
618
]
62
68
0
69
[
536
562
521
563
540
358
570
559
265
0
534
265
865
560
565
562
0
364
514
337
559
505
734
508
501
]
94
442
0
443
[
608
]
]
>>
endobj
154
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Roboto-Bold
/Flags
4
/FontBBox
[
-726
-270
1190
1056
]
/Ascent
750
/Descent
-250
/ItalicAngle
0
/CapHeight
710
/StemV
80
/FontFile2
155
0
R
>>
endobj
157
0
obj
<<
/Filter
/FlateDecode
/Length
180
0
R
>>
stream
x�}��n� ��<��C��N�HR���]T��ap�j@��ei����@���`�8v��V�gx�����l��&U
Bq����O��"��u�8uZ��P�����
�;a�"����a�~�C�/�~���CI(�2=2��&�"���u��m��o�E�S^��p#p���czD��!(�!(A-����dNp:V�
�`.�4��S�7�f,�W�c	k�LKz�T$l__6�]'l�d�������Z�6��#:7�/����9�f�6*��Q[c�*�/�+��
endstream
endobj
159
0
obj
<<
/Filter
/FlateDecode
/Length
181
0
R
>>
stream
x���y|T����sg&���d&	�$�03\�C��H��J�%��HaB�	�j�Fh(�[��Z�R���E���VD�JmUD��F����L�>	���~�?��{������<g{��w2@�����dkY��=�k�#��Fd�Y�v��]��?'�]�h�������x����N8L��
m&��`}@)A�#�G�.Y~Y��,�0�F$v\����������Q�����6�v�2�����K�e�YQ��"��(�"���9t�u1��6�����P,kh
�@;�	z�^�#	�Z���o^&'%�?�p�3�e�l������p������8��:)~�=�|^g��	S��pV��RD���WR���.4u�B������w���K�i)U�5�I�a�k�'��.�+h5��a�D?��f��n�_�]��~I��zp�v��[��f�
�����������Dr=J�#�[`��f���}��!�(D[iZ�^�����E�'i=E{�Yz��@��>z����]z�S�����l���~r��~�8��3g��"�D�z�����������I��-:��?J����!}L��S�}��xm��a�����^�����P�W�-
�|1��H��h�����B�����n����
���H� 7�u��Q���Q�_7�CQ|1�k��5������1����8�����Q�.����D�#sz|xMCQ�.fo`���_�>D�U�������P�.���{�>@T�Z��~�����z{�K�=����s����o�
�0
�0�-J��B�=N_��[����a�g�=#�YD	��x���;F�
�����
�&��|�HN��"S��s�81;:U�+�����O����rQ!��f���b��M,����\��?M�|��r� ��[���
�(��V8Fspo�A��+YL_��TN6�Sy!��8�:Y#����������������Y
�u�53gL�v���)U��e����s&�=��p�����1�3�G�#]��-6�j�2GF��E��J�*��2��1C����e���SA�
S��>�;���O���s��>����6�d��3�]���}��G4���__��Z������z!�-����
�&��J�jEkWe��u[-�j�BK���X��"��V����b�g�����2G�a5Cze����_Y��x�������r-R���X�������v]�c����a��s������]]k4{���VhYW����jc��J-[Eg��O 4S�Muw}A��������AKD���Y���aB�P�07���x�\���h>
ZG���n������������(k:�jN6��U�����V��1��3��?�����2��[Z%�v��Y~�W���yp����^�7���2u~���i	j;���{����7l�%�kll�y++����]�
���K��o���[������4�rZb96%����`��
:�|.r���@��a@��j����p}D��v����\yd���W����-�UH�����a�������n�p��F�����A��^^-��iy�����O����)]3���
��s�q����[N(�]����	���ip���}�<�����,��z����'6��&���F�n��P
�8C�Z�\�������iuM~}�O���J\_x�n0�)�8�U���=��S���b��S���]fuZC��Y���x|�������
�������M�jV�6wUWsO�c~W����Vl�$�P�.�R���������W���h��6�,g^<e��X[��k����G�{�,HJy�,�=
u��n��u�"��(nY�=��`����}Dz�Q7���A��<d�����6dS`3������r�"�x�V���Yh�
��E��G|�&�b���[(�4���L��e�^"�%l���H�
|�"8���T���i��S�94�.�=��,�g��/��9�5���l��M���o�T�)ZGK��5�e����-����2U�BQ�=��Jo#�"�`o��z����������l��Z��m�>Mr o�+N��L<��5Q�5���D�8H��0�U-A7�m���s~�Z�lY���1c�.�s������h�5�#����y4�G<y��f�c�4+f�qJ( :��*���LU�>.����z�2�V����"Q�E�Om����[aQ����:���F��C�
��z����{N�r����ALrn���@������1�3��������
8^����Q�IdL�o,E�_sv�G<F�-���l�����<���������9�JJ�3"&77�vkt�1�6Ci��6QN%�/����l}qE�lo�	�}o�����y�^��+����E�T
�y
��UT� ?o�b���c�����,�O��g+M�S�Ft
�rjYZIsy��K�^�w�>"31q��}���������Q�����o?Q�8�<�S(ec]�Y����������f��e�9�nO��b�[����g��),o�oS�(��G��b#��,Vc�7�u��Oi GI�����<{�(�����E��u�,��2.7 <�g8Rq`���,�Ole����-����`a��xRi����N	���BI"/[��|�������r�3�9>C�OH��+V�#*:v�\ZUVy��K/	�*X���4�������T�x��
3��y�����~F��O^w������m����V`~�n����y'R&]��E��;�������,����=b��Wk��4�'��_	�G\����S�'����:�\QF�]��'��L������'���j��.�����@��|fSa�������)=�xYIZ��I��G)1�?���bh7u����qTw>�1k�tu���
kL��*��mx�X_-��uGG�T�rC�a!��{Dq(�9S���Y|q�II��S.����^����W(�6��i W9apI��2����zr]�+�y#*�d���+�2
������������7d�8
Zo�@�gf_m8NVz�g���0Y��>�h6��fs�	������-��hKd
��=�c��/>%�$��h�4Z����U!��m~~�W&qIE��U8��AH��8��%���^T����m�k�H����G���������������7��w���;��r��}
��!1s��? c�40�X���-�1�NN���7��$gjbO�-_|bRB|<&�4�RR��'�D��3������ZN���_���+**���;�������;��/��e���y.a��w"�41��|\��u����]�\#�������X"lJ�_K���Yn2�WL�]T�5���R����p���br�,�����D�J�K��w_6���|Q�����`�%\�.\~Q��y����(���z��h�g:�>�8^��f<�|�����O�\������5��)����fB\�4��TO������7��<E94��i
t5��:��e��S;D�~�^����:���$����&ZI7"=�jh:���P�	�q3FL:�_���CWn�n:��Z�7�S/�?�����!q�XB'�-���Nq)l�4�Da��Q�ORg�=+�����q�L��kX]������X���#���Qe�n��	�gQ*@OWbn�X�|�Q����(}4�]3�K�v��Ih�`����w�[8�Z��}w+����k���[_�f2����S�� QT���(��\G�N�B��|P���@��[����k�{-|_D*��5?F?�
��\�4(S��W����
�;i.��������G����t�r%�W��X�UpZ�V�-��z��t��~�a=w��r9z���"m�=��c��j�������0�=���$SezX��c%l�H{!E/��-�J�J�%�����u]�����6^���qa��������y�FW�T���m��$j��'M����l2��il�m�/6*�r�7�All���J���5���4k��FT��7���6�z��CQ�U������\(�p+��;�v���,�:nb��B���eZ���z�sS�!W0�Q����*��2F)��(a3�aLf����(b2&2&0
���<�8F.��J�0�0�g1����F:cCe�dxn��1���H
�NF
#��`$1�	�xF���1b1�h�0��aaD1��HF��02�!�C��~�	���o_3�3�b|����9�o���2�1>a|��c|��+�C����1�ee��8r�
��8�x�q��&�
����0��x��'�A���W/30��x��"c?��>���?0�c<�x����4�)����'�3z�1v3e�b�d�`lg�0~�x��0cc+#��fh��B)�����1`����q/���{�a�����k���_1�063�`����q+���_0na����q#���?%W�?eldl`�g\�X��b������q��q-��Pr�c.]rHt0�b������q%�
����+CI���K���K�m����K1~�������������������h%6A�<�\�s�3���qc6��1+4�h`�3���|���L��P|:0=�
Lc�����fLaT1*���o}Q�(e�B��@	��qc2�l�$F��1�1�Q���g�1�1r^�XFc#�q#�1����`�3F1T�H���f�#i�T����Hf8I�D�pF#���3l�XF#�1�aeXB�U@���dD0L#��P�A�0(5�C'�o�o�����W����������O�c�'��P��W�C��}�=�]�(�tz:������^���z
�tzzz:�z	z1���z�=�zzz�=
=�������|GzcJ]�A�Qz���v@�����#���6h+�����4�!�A�w����}���o�{��@wCwA����~m�6Cw@�C�
��u+�K��-���M���
����A���B�^��������\�&b�\i�Zjo����5���V�R��Jl�+uc����RMW9�!�'N��t��|��D$��*_���H2�B�� �KBb���I����:�����a:���G���r��)>	�h���
�����:������������%�T�m�6��@����Yk�+�k�mY9U���X�&v^���p�16vs�C��!���0�*6��������1�bL%151�bc6�(8�[�I���{VCv����p�4�\{�&�j�
2��5ik5jl:��-����'�Y�]���^�\�����ii
~mKZ`����Of��PZw"���_:�={.�-S������0�g^�.�^�����?\�?=�����]mo�Z�;���On�<����\�v������;�zb\
endstream
endobj
156
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Consolas-Bold
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
158
0
R
/CIDToGIDMap
/Identity
/DW
549
/W
[
0
[
549
0
0
549
]
]
>>
endobj
158
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Consolas-Bold
/Flags
5
/FontBBox
[
-20
-205
563
850
]
/Ascent
742
/Descent
-257
/ItalicAngle
0
/CapHeight
638
/StemV
80
/FontFile2
159
0
R
>>
endobj
161
0
obj
<<
/Filter
/FlateDecode
/Length
182
0
R
>>
stream
x�]��j� ��}���^,&��B�]
����}�c*lT����w��-t@����~�N��	�{����:q�KT����mU��|�I����s��s����A���
����0�5F�F�}{�~	���4*�"���x��;M�M��<�k@h2���5�A*������B@�L!:�O��k0)����(�[F�S?>P��^V"����LOw��(%�g�m[�u��HS���������r��+�:
endstream
endobj
163
0
obj
<<
/Filter
/FlateDecode
/Length
183
0
R
>>
stream
x��}	xTE�����vw!a	d���$,a
�#��$,Y��0(dA���a�-�*"*�� �tb@g@P�q�e�q�q\F���=u�
I�3�=��Ow��Su��~��T�jB��"��4��<o�oS��_���k���W�|���up�������L��$��"��=�db��&/���A_��O�Q��-����3��8���1��%�V|���)2���g��:s�����*#�����sJf���[�����C�@��(���Gd~
|��z���3�_ v�
�-���FO�^z^�D����v�+���Q�[�nZJ.�r����"��I�h�a��X�O{���3?��X�3b-�(jI�4�f�*1�������"�AC�Z�-���6s��=L��W��T�h2�������R����������(�\� � ��u���0�6O��t���P:(��4�^B��8q�������T]ISi����l�7���)����G���*�=�-�'����O�i����}Z����h1���z!d��^���_<'g��t#`�l�&��F���"���r>����\3��]������ :�ab�l+g���� �.��4��Z���H�d}yX���M?�j^}�l�I���AzND��>Q*~+���d9A�/?�����pOD�����������)F�_����T�)����3�)G���6U�N����o�^�/2�+\�UT���O�?���}X���C�Q��t����}�P��h��O$��������f�E<&v"�����s���N����K&�d�_��#o�w��a|_��?j���Z��M��j�P����>�}�'��u��n�16[�m���IW}�o=�y�����;�^5U/�^S]Y����b��	h/�E�'�;�����,���D;�OA�L��u�F���b�xX��I�,Z�Mqe��I��e7�%��{�,���;�j�S��4�VO��b�v��J�D��������k�_����3��z���[��z�>@��_���?�?5����"]3]K\U��������G��t����>�)�v�@O��T�#�k��)�Mv���!y�<�����*��e�7b�le���#��+�����~In���>�P�'�i��b��j�o���@_���n������b�<��O��d/����YO�^�����[�D������J>�
��^�gP��=�]'~CO��������+�V��D���f�&����>�E4C����8^F��b�j����[�Sz���q���+V����r�X�$�?�����f4�[���:�	�]O��HzO{�?,����'��b*F�oh	]g.����
q5ib���1�������0������{��Lm(8q��!����!�����
��1>��!��%��j����C��Z=�����}��t���:`>Xj����'t;m��M��F�{b��+�fY.���rM��Ek��8��'��g<C����O�J�(��
f��h
��Q����@mu��BV���l��}a>jzE$M5��a�,=�6h�;
}o����9����TOC;��V������<����@F�������g�n�uM���S�����m�:5���e����yRbB|\���M7j� �~����e���>��[���T��������Z������2A_����@rJ�d���H�__����/��������p�����_)�P��C���NNF_N��l_P�r������e#��z����K";����zp��+��?�B4�'�C6��]!��B��9�x6� ���L,Q�����\��}P����$V0:M�P�M��?�V���qmh�������U14�(�~��x����6���h��|���n�8���7�_��vh�V�7����������C��YX�4W����"��h��|r���b1��qM�VV�J�9�)��F���S���k��4�������n�8%���G��������IM�|�M;����!�W�4���A���U�QR�\J�]y#kZVp����A�dJR�G�z���'�O�	1|
b��#�����cz3�������;����{]�D��J�����zR�jw����`�v�"���S����w��~^���g��@�|4m;��w'4r2w���M�'X6����hRb%:�e��sBbGsH�R��M�Il��=�5��c�6���;(��Dp�����1���S^d�m��:>+�gM��
6�_�%J�%5
�_#����A=�\J����h��_n0�h��,�LN������K�s��b{�������S���
��2o�����:aP5+�A6�����d_� ���L��*s_OFab0�&���?�e{�&��B|X;;���DW^������O�2�&�}1����y�|���"Gq��=+��+�VSEo
IY~�lDE@,�W�;{�e�
*�����
+Z!�`��(�����d��=�'P�J�Q���De*TW��\%H�<O��*i�b�O�x���1�G��5$;@�P�A���D�
���!����i��:M>}FZ��6KB�Cf�<3��T�J/���)�@!��K�[R���wo����m��kz�n������������tu��#��|r��{�=:�I���#s����?�rU��{����K;$e9��si�MA-�\��u�fDL����'��V���n����}v��~����W�L�b�x�~�WP�:����1d�k>Q�.������|���K)�nN7c�@,�qr+����S@��@v+���{8.�G�}�1@��
L����i��t-�q/�2��g���e���{��mq����?�x{u�,�8k\[i-� |2x�A���x��l�#����\��E:+�������z���R�4K��p�\ 2�A����eZ&^67#�!����m:�,Fx����	(�4H�����lB��vB��Z�^��\��:��v���U���@������	hD���bQi]�t���i�>���>���<n�����b�~�r�;i���
��Y���}K=v�k
�Q����A~O�����+�@����B`=��L�C1�B�A���(Z�D^'�v���!�u$�:�#�����2�.���m��.�T����������:�q8>�J��p�9J�!�
�zTb����@�KH'p����'�f`��� oB���W�������2�eS:k�a��Ok�l���|�]����&��Y���I����C�~�Pz�5��u��b��_�.���-���C�y<���i�:��"�Y.�C�]X�T�`L��o��vVcS����Eu���N���f�k���4P��=��4I?I�Z[�ht��lP~I#=���/��_]�p��}��6��Qzmz�~T���
��f~n��ol����<
��
c���K���1c��m��Q�D}V��p):>��_	��<ib�g��r�����,=@����B���b��X����Va�:j�%��L�%�X��}g4�%��"�:�����P]r������|[���.��C6>��=��(:�k��j}�
,���<U����a��~���������T�-���q�r,w���#�q<G�<���#Jk�/�[��<�q��nic0���=�1�����+�|�����52�����`����7���f����u�R�O��u��J3���!5�|Cw�ut�*_�k;-0N��1��n�� ��������J�#^[��>0��D�Q��&j���y-ZE��w`/p���P�4e��xXS�2�K�]_R�>s�>*���zpy��=�S�'��Q��?�X���F�zT����
m��Ln�����6�8jd��C�-T|�"���H�K#�=�%m0F�X��M�2���1K[����7���x	j���~���s�2�9���yZ�����y���F�(�(C�Pu���9v)�m+������<���=T��Q�k�o��6�wx�b�v��]��^{�&��|�����<^�j�*Sv�2������i�6��A�3=���m�Fc����oc�����H�b�7��]�
�P���5t�����c(]�����:��X�����i�~����h%�����pm'lK�����o�����}]�O�R��w�"�)�k�3n���B�o��
����`l-��G�q�Sy�4�2���A��UV!e�y��`�)���:�EYk�����S��t�e���/��] ���#�*�l�oSm(�$��{���!X��w��n�4�����[~�n��`1�~t�2��3o=�x�	�
��B��0�=u�Oa����F�<��;���_n�a@3\��{5�Z���B�F"��S�J#��K����O�Z��]G�?@���[����k��]������}��XK���8f�:F��z� �;����w)~H�AW��<����K���P����j���3 ��=����"�^<��?z	��v�:.t���~�0j���P���1��c�XV������5�&��0j�kwnWm�����/�����C44�h>�`�����6���%�	�/���%`�^^���Kt�\����y���h�Y�%g:�`�&xX���Qp7�j��N���Z0��Hm�2�]v\��^���+D���[�Oo��������>��_ ����[�g'�?x�/��(���X��@c���a�=r�>��N/����6�d���g^����!~6u��4t�����h�3�j��L��������������G�gaS�g;�mY����hS�Sv,�%j�P���~e���W�M���P���|U.{��=��oi=$�td~���C�{����ao����a�]�X��b��� ��A�s�4gn=o���������5��XS�mL���z��]�).�v��k�E������w�y�(���{�v�yv�%���s�?������������P�s��J�A���������9��)C�8�o�m�S���k�f������(s5x�=g(������u��+�b� V���y����T�6�/���z�����fj���O��>@#����5�!��[�.�s�q�w�! ��$�F�O�
4��&�����(���F�Fb~q���<��Y�Vg�si ��k��|�e�Q��US���z��k��9��?����>>/1����"�7X�b=�����Q��f�|��
����l���s���S�^�:R�:��}��u��S6��[��F�����zW�����+�Y��V0r+��x��{�)��@�oZ�=@��{�}=�JS�WF;�*��8������3M���6�*�x��1��u�yr��~����s�K�6X���b�}�����;���s���?�f�=�O#����9g������%����eq�B����-��&p�Ug}��>�j\�=\�j��U
�>3�0��������~.K������u������00V�����b�@���;�[m@�|D���zo��2P�)����9���`~���ru�fn�M���s���c��.0^_I�����w�qzun�F�����o��nS�V�������gs�����g����i�u���(��A��Y�_�a�KB�
F�F�"�Cj����ZC*f�\����:C~�[�w���~�����j��4�V8[���2Jr�H�������^�K�Ic+=R�3?N���w�*��eA>Z�_g��6v>��cu�?���S(�g�
��
��f�����br+�����?��P�������(_^(�����X;�
��~�W��+B���	�����7}�/�z�9�Ph_������b��b��`�k�`�lf���g�x)������P�4�����c���Xyq��g���<�wX��>�J��)�7+?�7��{@��:�~��|�V���:'_�d�Q����#���OY0_}�s���r����\��9�s����a�("�Z�������i��s�Y�f���#���;s__JwE�y���n�9�(Q�+�b�M�d�z�7C?N��"����Z��v�.��y��2H��m�9��4P�*�;!~wr#-������4�?Ey�����-3
H ����;��o��_������ue=JS�^y]���[��m]3)�������4�������FIKa��N��f=��k����	��X�+J��3i�Uf�v���u���q%��X��
���1��G'���A����-������Q��4�^~��������j�b,�Tg����<�"������n����^l��k��5�I�����J�+j�8vT�Ma���98������6�eoXg
�`��R��Sg"��.�z���d����4���>BS\K(��viL����{��}�v+�n&�����E�)}���7<��c|.�o�[��������:�?��f�s���r�=a���n���b��N�:�y�����j���]�%��s��Yr/I��a�Su�w���.���v������;:������U�!��m�;�5��Bi�����g�	;�g�{���W�4��^�%h�{2��i��?���>sKp��Xgr�����Sm���4��e�}�z��ws~5w�~��1�Op!���0����m�_���xCa���2/�`�o�K���^����O����v=�|O�����@�#��HQ��?	X�	+�&�iw��vA���zO�)��������i�����Se�
���C������F�(����K���p�]��l���XI��JZ	��D�W��s�����a���7.,;w�5���*�P��K,�s���I���l�OP�(���{�k1�6��d�<�`��q�Y������|k?mn�:i@��1�r������1'�4_1����6���h�~�v��K��J����-,��J��m{���9�?���������P�������z�>
{�i�}�p���I�H��fh�a[������|����(��pmK����k�^
���p?��5��_R���}u�4��;�Uw��� 
���v���1z1�#�?ikA��p-�;���[��6���a���0�8�h�x�G]�4���M��5P{{�m����j����a#=K���c�E��y�W���� '�S�`Qh���������������0G&�����FN�\Wc`����4�����>��O��n��C������Z�\�z/�yOnS�	�f\N���������t��Am\���=N�K}��M����.�Q��s���U@�/��!��
��m���w�Z���;��������ik�);��M�0�s�����)��1��{�uO���05��8�CU��L��j�^���6�-�DT�q��k���B��Z*���}����w|f�@��Ok���o���P{_t�����q���S	��q������s���2�*���XW����G����C�LS��Z��r���\�AQ+�L��I[`�j��Tg�K���1��,�l�<c��A������Z��D���N�}~�~7QsN{�����T�f��n��0���"�SWy����Q��H�Kf��Y�*�lg�)Y!��.wY����jNj`�Y!�*����Z�Us-����k��A���������jO��!Sk�)k�Ts!�C��~�b���y��`.e/������C/e�q��q�����`-i�����-����wuUw����+�6�9;�9oW��>�����}����u����Y��Zt��Ns;~
�,����8������.'�O���+j�~�^��k����C����:��$��?[k�C�!�O�������@k�Pk���������c�9�����C�.5��
|�z��.��%���x��^��h��3�w��)[1�x/���iFa���)���u��o�Fa�Fa�Fa�Fa�Fa�Fa�Fa�Fa�Fa�Fa�Fa��������K��$�P'�__�������i��fGj���g��t�Z������Zk�yeo�J��h���A�!�N���s���4Ak~��2`;�xp���>`�8�!Zs-�����l��#n<��5��	h���0��l\J�9���^��
	h�*WwE��U�Pd��k��w�����[h��#,�=��m�u��bw��h��m��^�42*}_fS�)*������h!�K�X
Rs����hG���
{5��&5A��5�i�2�azf�4�	jD^����
�_�h�0}C�`�!m������@�6�3��'�<�����'��h�W�d�
�^����3F��������|������%��o�h���+}�r�u����,�v4j�^%����-4*=
�zFkI�����2���J���;�[%?��K�n��,�P�(��|�|�p��
��:�1*�6AZ�g�����c���|��T����Y�����|�����W}M�����EE���= _�l���z'�����pC>��U#���P�E�y��d��	���K��-+�����3t�C����}�6{(0�H���#���p����!UR��/?Ro[
?Ro]	?Ro^?R��?R������q��G��Qp�Q%�?��������-o@+��V��t�����:����v��b�im�y����gE�HQ�Y������l�(�+��ei�,I��eQ�����(��u��q���({B����TQ�"�Z�2��������*����Lt�����-������d�	{�<������%��i��2,����2��t��>���^���D^@�xf�}�	�\�n������xv2�	���R�9H�eq�*X'����'_���Hw�L4�I�I����$�[�a-��5m�)�QCO�*�����E��6y;5GG�a��+l��k+S��f��{����(U����R��FI��Q���^�4��+S�{��k�������'UI8?Kz����J����l��=�����S��gS���������%��*������&i�wF�
(��*�/��:�;�e'M�J��.oF�U���T7����EH���P��I*S���Ubj��{���=�����n�Nv{�����&�F�OO}O���qyt����I�y<�����K��G�I� ]�c$?��O�)�#i0ky2/?K��M��I�����*9b\��g�`�<�����W�6G{����UP!�m����*A�
���������w�
�Jd�f���B�k:/#.�Q���r�/�(��i�>qu���k���[���a6/���\x��F����-����`��O|�3��Z�����*1F��O�r��(9f�#���%���KA|��b��JQr)JN,WQ�*'��U+%��G�J����������(��et@�hZ�2�~J$)	"-���H�$%�$���s"�l��5"�UN�8'�d�Dwd��C&��~J�����>����f.���E�����&�|�����Z4i�T�K������d��������>��
�3��b|�$��O�O�bv���/�Q'��5y]6��
��.����@p�y���zp^T^�t|xA���
����Y/�Z��\��4fv?��}���'�����������Qu����AS�����7�Or������?���^_z=��L�����������gZ��>�	&f��%����f�WP�v�[�U
�vx���T��,fG0{3S�j���y�����M��((����b.�j�y�$��Q��9�[����BT�T��R'
��iid����`����n��6�b"J��$5n�������*!
endstream
endobj
160
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+ArialMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
162
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
373
0
374
[
604
]
375
379
0
380
[
604
]
381
403
0
404
[
604
]
]
>>
endobj
162
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+ArialMT
/Flags
4
/FontBBox
[
-664
-324
2000
1005
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
163
0
R
>>
endobj
165
0
obj
<<
/Filter
/FlateDecode
/Length
184
0
R
>>
stream
x�]P�J�0��+��{X�=% +B�b��dR6	����w��+8�0/o��e��{��� �(�38,�2�>���M�E�6�NB��_��S\m���9�
�G<
�J�����q������P
,:6����'Yd��2��zb��������=����
�#���R�>s)�����]5����������>���4���}��o���oq�B�I�vJ�-�x[`�iS���Ex�
endstream
endobj
167
0
obj
<<
/Filter
/FlateDecode
/Length
185
0
R
>>
stream
x��}	xTE������B�-��M��DB�&t6� `.	�nd�2
�2B�A������0�8�(:����N�]�Ott����S�vh�m����������Su��T��%���|��5y�L���O~���������������'"��q�m�>�o�J��}H����S�~�&�V3��?
m�&t�����8���m�:������0cr9�>ET��i7V�Z�>O�Mt�#O��S+�~��	��$j�'�v���u�����Y���g�T~C$:��>�D=����1�@?���� �~DM7S=D���m�%�8!t�I��b�1���.��i���X`l@�}��	|����H?������Tf<JN��Z�`#�������z�~'n7~B��h�B��k�d��^�T_n;�[ZA;���lL�.���e����WJ�2z�6A�t��_B)t=-��������((Z���|�.�4���MtU�zC������__���R�4������i��1���&�6z���}���mbp����=��D��)^�e��m��x�x�ZB�>h��(g�E/�n�;���yt	�E�����#������r����C��WA�Y�8��#�i����5����H��Ib�8"[�)r��J�����Y���R�F3�i�J�=�W���(���7b�h�~yH��;����z�--�<n�4~�DJ��h�C�>Iu�����t���?�K���/�!#��Q�R>,���i#��Kz?=O�^��`��m���<�.�@���������V�?���E��V<M����>}D��� ��b���T�E�A��xU�-�A-I�t��eJ�!oF;-��Q�^������A��f��j��_jOh~�^��}���4���>J����l��������������O�W��r,p���cS���������Nh���Z���>x-�$n���I"Et���pQ$.W�+�T�@�#�+�*�V<�����e�++�Ty��G.�[��]�����0$��y�t��6B��M�nBfjs����+�
�^��K�+�0z���E���������o�.������]�����viO�w���_g_o��aw�w;;�uuV�N�$�P�Gv��"7�v�<q��N��y:�a,F�Q��/�8������i��~��;��x�����YQo���P6�/��h�(�g��lo����h��)w�<�"����1���b=}}����*�(�A��#���2A+��!�Z��1B|G�������t��H���5z�~;��zz=���*��c�f���a6��,����x��
�l�cG� 7���a�,�c��������m;4*3������S#����(��w��b����%/���+1�c1�dcT��Bw`�[a���������&x��qL�`D��c�����}����s��l��j�oD�H��m�m�ml[l�����Ak�M����@�cQ���6}C?
'��#eP_�;���
�L{��EUb���<�g��
�,@�=���"��w�'����!E�h2�w"�"��5H�=x��C����� ��J�3Q�9=�Y�2}H_��
%W��1y�HW�����E-z`+
��Z����M�(OtO��#�u���O����Hc�����5�@x
V�d�H�R��M�^��~�1����~�'%�#r�q�vK�z��E�����"_n�o����4p@N��f���}AfFz��=���v�vM���t����1�CB�vm��v���k�"6����tM
�(�/�����z���K2���@@EX@��������{�U2��)}HymDJ�����R�<ChHf������)�z�����p/+��y����r�^��qp����S�8�����B�������]m��|o������mg�������P��C��ZI�8�O��;zX��ZX1�_<��� 9%�,3�/�'{'�����OWI(_������t�
-��f4T/�w�����S�S*�,�ke\F�t�[��0����^d�&�����d��0q������x�
�K�cS���y�W�/�������zP�\XV�Q��k��2�7�[�!��y�1�<������5I�~s[J )���h��BOuI�7�?,�[VQ���U������������ZWk�ak[�[��q����q�����hLs�
��;
��L�@�R/�4��������2.���tL~y�k�3�����z� h����SC*�{��b'�I��!>�����{�bq��O!�P����1�^��V�< h>*F�V�
���OI�^R��I����.5��� _��2�,���PL�q3?��^��&o!6����i���]	m�
���sDO5���z�FO(�V�[m[Tr����g��m�K�di�d��b��W6'fOiK���v��S��R�p�����,6%��<�gS��s)r����?(�T��S��H��Z��z�,*�P]{J�pL@������������I^��[�M>#���,,uh��}I���2Tb�e��W��F�����J����YTR�B�����vC\�6�*>*�C��a	(z@:UT�6�|����\/H�9Ca�&�K3��������o���m�"hw��a��d���:����N�-(��"�b`'Rb��C���t}?���!4n�	|��Ji��:_�	��p�g����`���_�{�cOv
�v�~}��������`p����w�c7�{3\B�P��������W=U�^?�gG�Z��~:D���,����M.rvC�@��l�������c���q����+�[Ar��
T��I�z��;:S��5� ��+w=��u��r�C�Y�W�> MH?X\\��+,�r����<��|���s���P������~cH�8e-E^�A�j�Z�J��qZE�<]�����7�2r ��nBx���eMC�Uz�q�^�{��Zb�����2��+�q1��>s�,&�}�?|n����r���Z�D]�f�d?h&����M���Gs� �������2q�����d���SP��B�\�8`��Cyh� �����#�w���`��q��r�m���gC�H����{���c��@8�>�?(U�${*���J���T�����),�q��NI���e���
���_K�������t��J�f����6G��(��E�F�S�@�n���W��_"/��1�����C�>�^bBPzfA���4��8
�H�+X��r` �A��H��:������a{M��X����K�1s#�'��Mt��H��3�u��K(o�-��U:}�������Sa�A[�fT����q�|oc�=����_�}%�[�r����x�1a����fXc$�]��CC4��t/=�<��W@O�H��]�H�m���~�����Mi�4��@=�����H]�p�������h���Z��~�U�/l����6�m�\�>�FB4�qL�q?7���|�������~�@}��1�8(�O�"<�z9��J����1�\��~��}4���,W������"|��b5�.G�������kG{�j_cnDY�=��zy���s���!}���3<���@;b�mvX��	���b^x~V��h`�����f��M�����=����H����������S��,T�y��9��9^�B�#i�C�;����=4��=�,�7��i�#;�z�{�����;�����#�:�����-�c�w��5����x<��Rn'^C��-�����GUZ�����j �m��$��G^Wyj�a��=��}=��B�!{������H���p#s:������1�Q����{=�*jmw�l�������>5�8�6�~���/��l�T�}�����7��1����i��������1��z�
�J�����~������~�`�j�X���j��F)F[p��w��A�H�8����G��1?�@I�%��Z���S�������c�h����O����`"��*�l�������
ci�j�.������#�_��'B�����i��z�k�~��A��z�
}�qi�q���^�|�>/�Jt�P>����C�����Z��$�y���{(�#�]�>&�0XjB��L*R��.����B����,��*����X�Z�������FB�c������C;LE�Oj���K9*]����X/M�4E3�N�>��VOl�ag]�|,�����b��{�8�*�'#���F��/J�X��a2?�Z�	}`y���em����L��zr��Si�B�h��T�G�e����o���ac;�ux.	��s�"�����4�`?����-D�/�����!���O/������)<���p�-�2d���S�T�5�W��p������X���t8������������3�vi���\�'+�}�u�h������)�W&����|�����_�����}��a�,v����8����0����s
�����������6��{#���������p�� G6���HD���v��������
%��4\/�,������7CV���_PwF���z28-m�e���3�'���� n�J?������Z�*~�?!=�����
���`3�PR$
���62,4��)M���:[��?c�
�5����@�AW��{������g�I������5����xa��N�;�����X��7�]��w�=@��L�ZveG�M��uV~�&?���s����`�o���/�>����W
�������o�?��b�59O��9��k��l��a���g����<����	y#��2
��yh�^#�������i�j�|o0��>����(������M�)���-�ln�-����������l;����3�����}�^�SE��>_�ZG��V�AS���(i�y����������A��&�7�v�c��%v?����3������[O�cO_��W�?w��7��Q�G ~������2"���������Z~�5:|��O��u>�����p� ��t�4�8��|v���G�a�Z�9��?�.	�#qZ���g�3Io!D�����<}��~h��d��������QP�b=��<�Xj���pc
4����<A���(����j�1����X*����Q��X�C����Z(;�>G�-���>D�)���/����`�
P�����C���5�����>3~@^?��<�>�f���<��d{-u�s
��n���S������g|F��N��R�-@#1�_�=��Sc���I�V���=�:[{��KI��!��|�c<g���w$b<J����E�C�g�S�v2�M���&u��h�L>�����S�1����ez����&j���Z��D��'�������
�`�k����O��h�~3=;�V:�����*�����g8����nag����6���?������rC|�|���n�:g?�m�|r�L�{��3�w{�s������5?��~
]��T��g�X�m-�OK%�j�HYBe�]��f�l�����Xwp}�vVX��r�2��(>3��C�z5���W���fRg�o)��f9u��.�^Jr=����N�I����Z�=]������1���;4m��I`l5��B������x��*}�����n&�?Q��^�L�N0^_p�UBG�[���7u���j��h�j���gs��hm�:�J�F%�������(w8��+��)���a5�]��H����^���
AQ��s��/�	[�j��Q��:��TZ�.���!7���0�nk�U��ZX�3������K��?�L���L����P�mu*�#^��#�p������"�p�y�@x��8[���q���H <�� ����F��s�W	��9����"��n��cd$>2R�O��]�����O�����{��@g���}�q���J7�$�c�-���zlF��e���lZ���}�b�,�
�0�V����d}�wa~�e?1�SeC��v��1E�m���}��;�t�U�uT|�����g`o���=	�=�����i3���\k���}��������u���0��j�$b�s��s�S�������7<��!�>�:�a�!�X�xW�I��j?�gu�>E���w��������y7��2��L�g1�����K���hPku.��Q�}d������-Zj�����5��c�����wd��\CK��p�W��������0l�"D���2������$�ry�~�g:9�����7�>W�;��2'�������5hr���j����k����>A��8{�����b+-������w�?N}��d����O�a���������7�-�g#���jzTy�&������i(�o;H���D�]���������>Ly����a��y�PKW����)�#��d�{<�KC>W+�k(]�����9n��m���/�|gyOSG���B7�^�3e�V����~�
z����xk���d�c�p56���~p;0���8c��n���_��n�o�����$��Xh2�m�����a�����O����-����_<C�1�o��p�I�~xp����'l�o���Hj��+���Z�#������^$�|�r��,g�c�q���{��e��r�C��w2g��������<���?�����e�G��9I�����e��2�i�z�s4��:j�
��#~�s&�� ]"�����'�zcp���}X_���;�R;d^n��
�|��MG�o��0��V�X;V���������F��Q�8��Y���bPo�����2����x���s�-�k��k��k�C9�=��{�C���}��+$s�|+������s���be���}.�m�o�c�Ck_���vy�*��J�/PG�q�	��f�q��Q����_x���{���W�[t��r,��H=8j����o�&�����G<���m�3��c��6t�#���o��:�Gb���������VXs_J��_������z��M�^�kO�������`�MQ{�hA���zK�I�_0P��v[Xa�~�����I6���� ��R�����v��&�_��'�j~#	K{]B�*����~y�=�=���l/�5"�F��$�����k����j"�R������U���]
������F���h�Q��1���[��G�{6���ok8��.�>E;bN��b��Y{t�	]�{��a�~����������:�l��E��v��7{i}�I5k_���{Mh��p���M}��]�#,p����8.O���_���(VK�����p��wu�p����;��v�����M�Xll������E/��CF���~����h5Fk����w�{r��^����)��@l�{�\{<��R�����_�3�DA��M�����X�o�{[���m�G��>G<Yo��~r?N���-�`�m�i����k!;�QN�O��|�&ZsQ�u����u��3���g��2@����x������)�ic��lAN�IK�7WF�Uh�{-�{	0�k����wM���VF������[��Sg�/:������8��3�T"�n��-���������L��x�mh�G��m�^��f@�
�}]JA���w�b}8Nn�L4��0��R�w����Tu��g��a������l�j��Wx�S�I�Y�;��m>�J��\�9�:�]��45�*�y��9H|G��<��%g��b�K���1����#�y�� ��\��c����L��xb��|���cs���~g�!������&x�	>�k��;���:����}^���z����^������J��|v!��Gd|��_��?���(���k�e���_��+j�A_&����������ZL�1�$��/�h�mhO�v����$D�1��in�/�\)�*U�8K�������6�w��/��K�t���0��E���Z�w�}����
�nzL�e���/G���,��
�>���h��������FX������������J':�8>g��0��(�5��[on�"�(��"����"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"�(��"��'!�/Z�B���$��7�f�c��=�H������6�f���5�F>mS�#.�W��������mF�.T��f���m�k�Bo����u��lE/l��}
8�hG�lwn�z��-�(�>�q``�@���h�zmm`�9<���s�iO�z>|�@��O�.O��V�����i��?����'��o0��l4�����qkIjk�'.�+7V[C��=J�B����s��y�.�m�/��=D��$�v95���
�H^������.�U���@�%d	����P~�����M���
��V|�
d�5u���b���$���M�%�6��d�����)����������aH>LkO=��%P6h��D�*��@+��Y���Q�|-Q%����/�Ss����O5����,����}���B�A��j>Rup�����gcUMJ�b������JP�4�2
��M*���(��V�u��]�u�����.�>�=A�AW��ur7��P\�s�(~��ZC��Ze7��hC���E��
_^�6 �r���H��<��)�����V���FOUC�jhi��izks�R������j�>����zdo�:j�h�4�@hR]L+�,1���J�X��U���*�y��i3�:$f����RU��KLf����E���5`L�.yQ�������u	�w�s���"�I�7�>n$������	Z�7-���o��h���A!���1����]#?����r�|������g)��r
=��m��n������u �}U .�++_����T��!�r�I��M���/Q'd�g�n�/��
�4�A���A+��`�-}E�d�/��4�.��E�L6�L���+���)��)	I��%!t}]Z7w��'��rf���Mn�|B������0�6rm �3Y��qo���r_b�/���[�e�fef��<��LO�g�'�%�������K��C	�|�r�8���s�P'������Q�r|W*�����r
�i ��\`0��t|�~���Bf��[0�T�����T���G%8*G�*}���(G98�G98��Q�r������\q����(V��(G18�G18��Q�8|���������8|��8|�#Y��G���G8����8����,���px�px��Qpx��Q.p����Kq����.��R�3`�Fp4�������hG��hG#8�-����W��,���O���>���>��,������L�j3�����
�mo��mP�5`^?8������8�������������G
8j�Q�8j�Q�p�(�������J���F�)J�Xk�|�S�ytH��t@�;�V��i�������Eo�4E���3��wN|n��Q�5��q`3�p(�^���!������Q�������F�����?n�l�e�m�7��'7Y��yS������[���)�0����<�?}e__���o{�����^bs/q_/�#/���<�#!�(��L�>��u������:�i���b�Iz��A��:`�d�@*�Va�������r'�H<\%$��l����&����W�(����|;��@��G���>��#�Rw���o�sA7��!�9�l
�w�����\�~��@�=��81��:��Xt,��tL�=�F�=A���8u/������>M����%y�� ]����I�����2�x6��V���&Ju�k�>�~�}���P��=�:���z1������s���XN�����~��u�K]�^��D�V�#���f�;�r/VE�<�r���{�;�=3�3w��Rw�{���T��W�w��T&J����bd8�H
�/N�W"w������zvr��3������m������Z�:>.�^���r|�X����svx]]���m�.g+gKg����;u�t��]���K�������4�]�o]�]������#�)�R����d��<Q�o�LE�<��������6o���)���<����z�1���^�wO,���2����zA%����������k-\������pYY%&��8����������N?�Iwv�?\4����s�?�F��"�������xWX�M�bRV�M����c8\�,(C��T2hs+$��L���GN��$�����ti`G�&HGi*]Zl�J�NW{�SXP���4�DT�������4�����J�z=J��*#�I2�*��]�2rU����$�V�~�I���4q2��L��G(M�H��~�����>������[8(�/�=-�?��S;w������'M���b��wj����S���3D���}���raIi�����>�>������aCJsO)kqsY�C��������{��\��e�rY�\�0�0UV�t����Z'���_i�:�":\��R�����
�mpJ����:���"�������8*373��0�8��������S����V����yjZ�DE�~���)c'����}g��*���D*�^���T�OxJ�:�g��>�f����Y�UDE�^c���GC�E��!��P��������z���B�����.����X����^���U�Y��9{��X�����[���Y�R�5��/3�z�3)��LI)�(�.�LSM�k�	������sjRk2kr�����u��z��hfzU�!��Y���X\��N�U�5�HO/K���Nolj�����r�R��u�^ee��0K�b�e1��Y�����5���G�����
endstream
endobj
164
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Arial-BoldMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
166
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
403
0
404
[
604
]
]
>>
endobj
166
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Arial-BoldMT
/Flags
4
/FontBBox
[
-627
-376
2000
1017
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
715
/StemV
80
/FontFile2
167
0
R
>>
endobj
168
0
obj
345
endobj
169
0
obj
9939
endobj
170
0
obj
469
endobj
171
0
obj
12853
endobj
172
0
obj
333
endobj
173
0
obj
12105
endobj
174
0
obj
331
endobj
175
0
obj
7950
endobj
176
0
obj
269
endobj
177
0
obj
4031
endobj
178
0
obj
347
endobj
179
0
obj
7362
endobj
180
0
obj
275
endobj
181
0
obj
5371
endobj
182
0
obj
247
endobj
183
0
obj
9978
endobj
184
0
obj
235
endobj
185
0
obj
10962
endobj
1
0
obj
<<
/Type
/Pages
/Kids
[
5
0
R
18
0
R
36
0
R
47
0
R
53
0
R
60
0
R
67
0
R
74
0
R
79
0
R
84
0
R
89
0
R
94
0
R
99
0
R
104
0
R
109
0
R
116
0
R
121
0
R
127
0
R
]
/Count
18
>>
endobj
xref
0 186
0000000002 65535 f 
0000695163 00000 n 
0000000000 00000 f 
0000000016 00000 n 
0000000142 00000 n 
0000000239 00000 n 
0000000404 00000 n 
0000041587 00000 n 
0000001493 00000 n 
0000001513 00000 n 
0000001693 00000 n 
0000001731 00000 n 
0000602515 00000 n 
0000001765 00000 n 
0000602668 00000 n 
0000036232 00000 n 
0000041544 00000 n 
0000041566 00000 n 
0000041788 00000 n 
0000041957 00000 n 
0000154238 00000 n 
0000045615 00000 n 
0000045636 00000 n 
0000045656 00000 n 
0000078962 00000 n 
0000602829 00000 n 
0000602987 00000 n 
0000603134 00000 n 
0000603286 00000 n 
0000603436 00000 n 
0000109660 00000 n 
0000135062 00000 n 
0000154150 00000 n 
0000154172 00000 n 
0000154194 00000 n 
0000154216 00000 n 
0000154543 00000 n 
0000154712 00000 n 
0000315730 00000 n 
0000155694 00000 n 
0000155714 00000 n 
0000155734 00000 n 
0000241695 00000 n 
0000302740 00000 n 
0000302762 00000 n 
0000315686 00000 n 
0000315708 00000 n 
0000315978 00000 n 
0000316147 00000 n 
0000317875 00000 n 
0000317834 00000 n 
0000317855 00000 n 
0000603588 00000 n 
0000318124 00000 n 
0000318293 00000 n 
0000357516 00000 n 
0000319856 00000 n 
0000319877 00000 n 
0000319897 00000 n 
0000357494 00000 n 
0000357749 00000 n 
0000357918 00000 n 
0000393784 00000 n 
0000359290 00000 n 
0000359311 00000 n 
0000359331 00000 n 
0000393762 00000 n 
0000394017 00000 n 
0000394186 00000 n 
0000523103 00000 n 
0000395464 00000 n 
0000395485 00000 n 
0000395505 00000 n 
0000523080 00000 n 
0000523351 00000 n 
0000523520 00000 n 
0000525018 00000 n 
0000524977 00000 n 
0000524998 00000 n 
0000525266 00000 n 
0000525435 00000 n 
0000526751 00000 n 
0000526710 00000 n 
0000526731 00000 n 
0000526968 00000 n 
0000527137 00000 n 
0000528586 00000 n 
0000528545 00000 n 
0000528566 00000 n 
0000528803 00000 n 
0000528972 00000 n 
0000530594 00000 n 
0000530553 00000 n 
0000530574 00000 n 
0000530826 00000 n 
0000530995 00000 n 
0000532142 00000 n 
0000532101 00000 n 
0000532122 00000 n 
0000532359 00000 n 
0000532531 00000 n 
0000533538 00000 n 
0000533496 00000 n 
0000533517 00000 n 
0000533756 00000 n 
0000533929 00000 n 
0000535380 00000 n 
0000535337 00000 n 
0000535359 00000 n 
0000535598 00000 n 
0000535771 00000 n 
0000596155 00000 n 
0000536648 00000 n 
0000536669 00000 n 
0000536690 00000 n 
0000596132 00000 n 
0000596390 00000 n 
0000596563 00000 n 
0000598237 00000 n 
0000598194 00000 n 
0000598216 00000 n 
0000598455 00000 n 
0000598628 00000 n 
0000600525 00000 n 
0000600482 00000 n 
0000600504 00000 n 
0000603734 00000 n 
0000600774 00000 n 
0000600947 00000 n 
0000602296 00000 n 
0000602092 00000 n 
0000602114 00000 n 
0000614326 00000 n 
0000603886 00000 n 
0000615011 00000 n 
0000604309 00000 n 
0000628695 00000 n 
0000615217 00000 n 
0000629701 00000 n 
0000615764 00000 n 
0000642509 00000 n 
0000629915 00000 n 
0000643180 00000 n 
0000630326 00000 n 
0000651830 00000 n 
0000643393 00000 n 
0000652064 00000 n 
0000643802 00000 n 
0000656717 00000 n 
0000652261 00000 n 
0000657024 00000 n 
0000652608 00000 n 
0000665099 00000 n 
0000657234 00000 n 
0000665651 00000 n 
0000657659 00000 n 
0000671656 00000 n 
0000665854 00000 n 
0000671895 00000 n 
0000666207 00000 n 
0000682478 00000 n 
0000672097 00000 n 
0000682767 00000 n 
0000672422 00000 n 
0000694319 00000 n 
0000682966 00000 n 
0000694569 00000 n 
0000683279 00000 n 
0000694773 00000 n 
0000694794 00000 n 
0000694816 00000 n 
0000694837 00000 n 
0000694860 00000 n 
0000694881 00000 n 
0000694904 00000 n 
0000694925 00000 n 
0000694947 00000 n 
0000694968 00000 n 
0000694990 00000 n 
0000695011 00000 n 
0000695033 00000 n 
0000695054 00000 n 
0000695076 00000 n 
0000695097 00000 n 
0000695119 00000 n 
0000695140 00000 n 
trailer
<<
/Size
186
/Root
3
0
R
/Info
4
0
R
>>
startxref
695347
%%EOF
#24Sutou Kouhei
kou@clear-code.com
In reply to: Hayato Kuroda (Fujitsu) (#21)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Thanks for reviewing our latest patch!

In
<TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com>
"RE: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 9 Dec 2023 02:43:49 +0000,
"Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com> wrote:

(I remember that this theme was talked at Japan PostgreSQL conference)

Yes. I should have talked to you more at the conference...
I will do it next time!

Can we discuss how to proceed this improvement?

There are 2 approaches for it:

1. Do the followings concurrently:
a. Implementing small changes that got a consensus and
merge them step-by-step
(e.g. We got a consensus that we need to extract the
current format related routines.)
b. Discuss design

(v1-v3 patches use this approach.)

2. Implement one (large) complete patch set with design
discussion and merge it

(v4- patches use this approach.)

Which approach is preferred? (Or should we choose another
approach?)

I thought that 1. is preferred because it will reduce review
cost. So I chose 1.

If 2. is preferred, I'll use 2. (I'll add more changes to
the latest patch.)

Thanks,
--
kou

#25Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#19)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 8 Dec 2023 15:42:06 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

So a custom COPY extension would not be able to define SQL functions
just like arrow(internal) for example. We might need to define a rule
like the function returning copy_in/out_handler must be defined as
<method name>_to(internal) and <method_name>_from(internal).

We may not need to add "_to"/"_from" suffix by checking both
of argument type and return type. Because we use different
return type for copy_in/out_handler.

But the current LookupFuncName() family doesn't check return
type. If we use this approach, we need to improve the
current LookupFuncName() family too.

Thanks,
--
kou

#26Sutou Kouhei
kou@clear-code.com
In reply to: Hannu Krosing (#23)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAMT0RQRqVo4fGDWHqOn+wr_eoiXQVfyC=8-c=H=y6VcNxi6BvQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 9 Dec 2023 12:38:46 +0100,
Hannu Krosing <hannuk@google.com> wrote:

Please also see my presentation slides from last years PostgreSQL
Conference in Berlin (attached)

Thanks for sharing your idea here.

The main Idea is to make not just "format", but also "transport" and
"stream processing" extendable via virtual function tables.

"Transport" and "stream processing" are out of scope in this
thread. How about starting new threads for them and discuss
them there?

Btw, will any of you here be in Prague next week ?

Sorry. No.

Thanks,
--
kou

#27Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#24)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Dec 10, 2023 at 4:44 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

Thanks for reviewing our latest patch!

In
<TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com>
"RE: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 9 Dec 2023 02:43:49 +0000,
"Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com> wrote:

(I remember that this theme was talked at Japan PostgreSQL conference)

Yes. I should have talked to you more at the conference...
I will do it next time!

Can we discuss how to proceed this improvement?

There are 2 approaches for it:

1. Do the followings concurrently:
a. Implementing small changes that got a consensus and
merge them step-by-step
(e.g. We got a consensus that we need to extract the
current format related routines.)
b. Discuss design

(v1-v3 patches use this approach.)

2. Implement one (large) complete patch set with design
discussion and merge it

(v4- patches use this approach.)

Which approach is preferred? (Or should we choose another
approach?)

I thought that 1. is preferred because it will reduce review
cost. So I chose 1.

If 2. is preferred, I'll use 2. (I'll add more changes to
the latest patch.)

I'm ok with both, and I'd like to work with you for the parquet
extension, excited about this new feature, thanks for bringing
this up.

Forgive me for making so much noise about approach 2, I
just want to hear about more suggestions of the final shape
of this feature.

Thanks,
--
kou

--
Regards
Junwang Zhao

#28Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#24)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Dec 10, 2023 at 5:44 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

Thanks for reviewing our latest patch!

In
<TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com>
"RE: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 9 Dec 2023 02:43:49 +0000,
"Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com> wrote:

(I remember that this theme was talked at Japan PostgreSQL conference)

Yes. I should have talked to you more at the conference...
I will do it next time!

Can we discuss how to proceed this improvement?

There are 2 approaches for it:

1. Do the followings concurrently:
a. Implementing small changes that got a consensus and
merge them step-by-step
(e.g. We got a consensus that we need to extract the
current format related routines.)
b. Discuss design

It's preferable to make patches small for easy review. We can merge
them anytime before commit if necessary.

I think we need to discuss overall design about callbacks and how
extensions define a custom copy handler etc. It may require some PoC
patches. Once we have a consensus on overall design we polish patches
including the documentation changes and regression tests.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#29Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#25)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Dec 10, 2023 at 5:55 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 8 Dec 2023 15:42:06 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

So a custom COPY extension would not be able to define SQL functions
just like arrow(internal) for example. We might need to define a rule
like the function returning copy_in/out_handler must be defined as
<method name>_to(internal) and <method_name>_from(internal).

We may not need to add "_to"/"_from" suffix by checking both
of argument type and return type. Because we use different
return type for copy_in/out_handler.

But the current LookupFuncName() family doesn't check return
type. If we use this approach, we need to improve the
current LookupFuncName() family too.

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#30Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#29)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Dec 11, 2023 at 10:57:15AM +0900, Masahiko Sawada wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Agreed to not touch the logictics of LookupFuncName() for the sake of
this thread. I have not checked the SQL specification, but I recall
that there are a few assumptions from the spec embedded in the lookup
logic particularly when it comes to specify a procedure name without
arguments.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

Yep, that's possible as well and can work as a cross-check between the
argument and the NodeTag assigned to the handler structure returned by
the function.

At the end, the final result of the patch should IMO include:
- Documentation about how one can register a custom copy_handler.
- Something in src/test/modules/, minimalistic still useful that can
be used as a template when one wants to implement their own handler.
The documentation should mention about this module.
- No need for SQL functions for all the in-core handlers: let's just
return pointers to them based on the options given.

It would be probably cleaner to split the patch so as the code is
refactored and evaluated with the in-core handlers first, and then
extended with the pluggable facilities and the function lookups.
--
Michael

#31Junwang Zhao
zhjwpku@gmail.com
In reply to: Hannu Krosing (#23)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Dec 9, 2023 at 7:38 PM Hannu Krosing <hannuk@google.com> wrote:

Hi Junwang

Please also see my presentation slides from last years PostgreSQL
Conference in Berlin (attached)

I read through the slides, really promising ideas, it's will be great
if we can get there at last.

The main Idea is to make not just "format", but also "transport" and
"stream processing" extendable via virtual function tables.

The code is really coupled, it is not easy to do all of these in one round,
it will be great if you have a POC patch.

Btw, will any of you here be in Prague next week ?
Would be a good opportunity to discuss this in person.

Sorry, no.

Best Regards
Hannu

On Sat, Dec 9, 2023 at 9:39 AM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Sat, Dec 9, 2023 at 10:43 AM Hayato Kuroda (Fujitsu)
<kuroda.hayato@fujitsu.com> wrote:

Dear Junagn, Sutou-san,

Basically I agree your point - improving a extendibility is good.
(I remember that this theme was talked at Japan PostgreSQL conference)
Below are my comments for your patch.

01. General

Just to confirm - is it OK to partially implement APIs? E.g., only COPY TO is
available. Currently it seems not to consider a case which is not implemented.

For partially implements, we can leave the hook as NULL, and check the NULL
at *ProcessCopyOptions* and report error if not supported.

02. General

It might be trivial, but could you please clarify how users can extend? Is it OK
to do below steps?

1. Create a handler function, via CREATE FUNCTION,
2. Register a handler, via new SQL (CREATE COPY HANDLER),
3. Specify the added handler as COPY ... FORMAT clause.

My original thought was option 2, but as Michael point, option 1 is
the right way
to go.

03. General

Could you please add document-related tasks to your TODO? I imagined like
fdwhandler.sgml.

04. General - copyright

For newly added files, the below copyright seems sufficient. See applyparallelworker.c.

```
* Copyright (c) 2023, PostgreSQL Global Development Group
```

05. src/include/catalog/* files

IIUC, 8000 or higher OIDs should be used while developing a patch. src/include/catalog/unused_oids
would suggest a candidate which you can use.

Yeah, I will run renumber_oids.pl at last.

06. copy.c

I felt that we can create files per copying methods, like copy_{text|csv|binary}.c,
like indexes.
How do other think?

Not sure about this, it seems others have put a lot of effort into
splitting TO and From.
Also like to hear from others.

07. fmt_to_name()

I'm not sure the function is really needed. Can we follow like get_foreign_data_wrapper_oid()
and remove the funciton?

I have referenced some code from greenplum, will remove this.

08. GetCopyRoutineByName()

Should we use syscache for searching a catalog?

09. CopyToFormatTextSendEndOfRow(), CopyToFormatBinaryStart()

Comments still refer CopyHandlerOps, whereas it was renamed.

10. copy.h

Per foreign.h and fdwapi.h, should we add a new header file and move some APIs?

11. copy.h

```
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
```

Are above changes really needed?

12. CopyFormatOptions

Can we remove `bool binary` in future?

13. external functions

```
+extern void CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatTextEnd(CopyToState cstate);
+extern void CopyFromFormatTextStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatTextNext(CopyFromState cstate, ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatTextErrorCallback(CopyFromState cstate);
+
+extern void CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+extern void CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+extern void CopyToFormatBinaryEnd(CopyToState cstate);
+extern void CopyFromFormatBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+extern bool CopyFromFormatBinaryNext(CopyFromState cstate,
ExprContext *econtext,
+
Datum *values, bool *nulls);
+extern void CopyFromFormatBinaryErrorCallback(CopyFromState cstate);
```

FYI - If you add files for {text|csv|binary}, these declarations can be removed.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

Thanks for all the valuable suggestions.

--
Regards
Junwang Zhao

--
Regards
Junwang Zhao

#32Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#30)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Dec 11, 2023 at 7:19 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Dec 11, 2023 at 10:57:15AM +0900, Masahiko Sawada wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Agreed to not touch the logictics of LookupFuncName() for the sake of
this thread. I have not checked the SQL specification, but I recall
that there are a few assumptions from the spec embedded in the lookup
logic particularly when it comes to specify a procedure name without
arguments.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

Yep, that's possible as well and can work as a cross-check between the
argument and the NodeTag assigned to the handler structure returned by
the function.

At the end, the final result of the patch should IMO include:
- Documentation about how one can register a custom copy_handler.
- Something in src/test/modules/, minimalistic still useful that can
be used as a template when one wants to implement their own handler.
The documentation should mention about this module.
- No need for SQL functions for all the in-core handlers: let's just
return pointers to them based on the options given.

Agreed.

It would be probably cleaner to split the patch so as the code is
refactored and evaluated with the in-core handlers first, and then
extended with the pluggable facilities and the function lookups.

Agreed.

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

custom_copy_format_draft.patchapplication/octet-stream; name=custom_copy_format_draft.patchDownload
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..d3325b130d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -23,6 +23,7 @@
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -32,6 +33,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "rewrite/rewriteHandler.h"
 #include "utils/acl.h"
@@ -427,6 +429,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->to_ops = &CopyToRoutineText;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +446,26 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_ops = &CopyToRoutineCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_ops = &CopyToRoutineBinary;
+			}
+			else if (!is_from)
+			{
+				/*
+				 * XXX: Currently we support custom COPY format only for COPY
+				 * TO.
+				 *
+				 * XXX: need to check the combination of the existing options
+				 * and a custom format (e.g., FREEZE)?
+				 */
+				opts_out->to_ops = GetCopyToRoutineFormat(fmt);
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -864,3 +885,83 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+/*
+ * Get a CopyRoutine struct by invoking the handler function for the given
+ * format.
+ *
+ * Workhorse for GetCopyToRoutineFormat and GetCopyFromRoutineFormat.
+ */
+static CopyRoutine *
+GetCopyRoutineFormat(char *format_name, bool is_from)
+{
+	Oid			handlerOid;
+	Oid			funcargtypes[1];
+	CopyRoutine *routine;
+	Datum		datum;
+
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format_name)), 1,
+								funcargtypes, true);
+
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("COPY format \"%s\" not recognized", format_name)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+
+	routine = (CopyRoutine *) DatumGetPointer(datum);
+
+	/* Check returned struct */
+	if (routine == NULL || !IsA(routine, CopyRoutine))
+		elog(ERROR, "copy handler function %u did not return a CopyRoutine struct",
+			 handlerOid);
+
+	if (!IsA(routine->impl, CopyToRoutine) && !IsA(routine->impl, CopyFromRoutine))
+		elog(ERROR, "copy handler function %u returned invalid CopyRoutine struct",
+			 handlerOid);
+
+	if (routine->is_from && !IsA(routine->impl, CopyFromRoutine))
+		elog(ERROR, "copy handler function %u returned COPY TO routines but expected COPY FROM routines",
+			 handlerOid);
+
+	if (!routine->is_from && !IsA(routine->impl, CopyToRoutine))
+		elog(ERROR, "copy handler function %u returned COPY FROM routines but expected COPY TO routines",
+			 handlerOid);
+
+#ifdef USE_ASSERT_CHECKING
+	if (routine->is_from)
+	{
+		/* FIXME */
+	}
+	else
+	{
+		CopyToRoutine *impl = castNode(CopyToRoutine, routine->impl);
+
+		Assert(impl->start_fn != NULL);
+		Assert(impl->onerow_fn != NULL);
+		Assert(impl->end_fn != NULL);
+	}
+#endif
+
+	return routine;
+}
+
+CopyToRoutine *
+GetCopyToRoutineFormat(char *format_name)
+{
+	CopyRoutine *routine;
+
+	routine = GetCopyRoutineFormat(format_name, false);
+	return (CopyToRoutine *) castNode(CopyToRoutine, routine->impl);
+}
+
+CopyFromRoutine *
+GetCopyFromRoutineFormat(char *format_name)
+{
+	CopyRoutine *routine;
+
+	routine = GetCopyRoutineFormat(format_name, true);
+	return (CopyFromRoutine *) castNode(CopyFromRoutine, routine->impl);
+}
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..46b8d9638b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,208 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToFormatOps implementations.
+ */
+
+/*
+ * CopyToFormatOps implementation for "text" and "csv". CopyToFormatText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopySendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToFormatOps implementation for "binary".
+ */
+
+static void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/* Generate header for a binary copy */
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	CopySendInt32(cstate, 0);
+	/* No header extension */
+	CopySendInt32(cstate, 0);
+}
+
+static void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopySendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +400,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +434,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +936,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +945,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +960,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_ops->start_fn(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +999,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_ops->end_fn(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1015,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_ops->onerow_fn(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
@@ -1284,3 +1337,37 @@ CreateCopyDestReceiver(void)
 
 	return (DestReceiver *) self;
 }
+
+/*
+ * COPY TO routines for built-in formats.
+ */
+
+const		CopyToRoutine CopyToRoutineText =
+{
+	.type = T_CopyToRoutine,
+	.start_fn = CopyToFormatTextStart,
+	.onerow_fn = CopyToFormatTextOneRow,
+	.end_fn = CopyToFormatTextEnd,
+};
+
+/*
+ * We can use the same CopyToFormatOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+const		CopyToRoutine CopyToRoutineCSV =
+{
+	.type = T_CopyToRoutine,
+	.start_fn = CopyToFormatTextStart,
+	.onerow_fn = CopyToFormatTextOneRow,
+	.end_fn = CopyToFormatTextEnd,
+};
+
+const		CopyToRoutine CopyToRoutineBinary =
+{
+	.type = T_CopyToRoutine,
+	.start_fn = CopyToFormatBinaryStart,
+	.onerow_fn = CopyToFormatBinaryOneRow,
+	.end_fn = CopyToFormatBinaryEnd,
+};
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index ebbe9052cb..04d41f5b0a 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 72c7963578..c48015a612 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 3ba8cb192c..4391e5cefc 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -373,6 +373,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 77e8b13764..9e0f33ad9e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7602,6 +7602,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index f6110a850d..4fe5c17818 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -632,6 +632,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   typname => 'table_am_handler',
   descr => 'pseudo-type for the result of a table AM handler function',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..2d5784db73 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -18,6 +18,7 @@
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
+#include "commands/copyapi.h"
 
 /*
  * Represents whether a header line should be present, and whether it must
@@ -63,12 +64,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyToRoutine *to_ops;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -102,4 +100,9 @@ extern uint64 DoCopyTo(CopyToState cstate);
 extern List *CopyGetAttnums(TupleDesc tupDesc, Relation rel,
 							List *attnamelist);
 
+/* build-in COPY TO format routines */
+extern const CopyToRoutine CopyToRoutineText;
+extern const CopyToRoutine CopyToRoutineCSV;
+extern const CopyToRoutine CopyToRoutineBinary;
+
 #endif							/* COPY_H */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..49c64493b6
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,53 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM
+ *
+ * Copyright (c) 2015-2023, PostgreSQL Global Development Group
+ *
+ * src/include/command/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);
+
+typedef struct CopyRoutine
+{
+	NodeTag		type;
+
+	bool		is_from;
+
+	/* Either CopyToRoutine or CopyFromRoutine */
+	Node	   *impl;
+}			CopyRoutine;
+
+typedef struct CopyToRoutine
+{
+	NodeTag		type;
+
+	CopyToStart_function start_fn;
+	CopyToOneRow_function onerow_fn;
+	CopyToEnd_function end_fn;
+}			CopyToRoutine;
+
+typedef struct CopyFromRoutine
+{
+	NodeTag		type;
+
+	/* XXX: define routines for COPY FROM */
+}			CopyFromRoutine;
+
+extern CopyToRoutine * GetCopyToRoutineFormat(char *format_name);
+extern CopyFromRoutine * GetCopyFromRoutineFormat(char *format_name);
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index 626dc696d5..53b262568c 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 5d33fa6a9a..204cfd3f49 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index b76f588559..2fbe1abd4a 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -12,6 +12,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 0000000000..f2b89b56a1
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY format"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 0000000000..8becdb6369
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,14 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'testfmt');
+ERROR:  COPY format "testfmt" not recognized
+LINE 1: COPY public.test FROM stdin WITH (format 'testfmt');
+                                          ^
+COPY public.test TO stdout WITH (format 'testfmt');
+NOTICE:  testfmt_handler called with is_from 0
+NOTICE:  testfmt_copyto_start called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_end called
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 0000000000..4adf048280
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2022-2023, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test COPY format routines',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 0000000000..1052135252
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'testfmt');
+COPY public.test TO stdout WITH (format 'testfmt');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 0000000000..2749924831
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,9 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+
+CREATE FUNCTION testfmt(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'copy_testfmt_handler' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 0000000000..26ecddb76f
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,69 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for custom COPY format.
+ *
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "fmgr.h"
+
+PG_MODULE_MAGIC;
+
+static void
+testfmt_copyto_start(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_start called")));
+}
+
+static void
+testfmt_copyto_onerow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_onerow called")));
+}
+
+static void
+testfmt_copyto_end(CopyToState cstate)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_end called")));
+}
+
+PG_FUNCTION_INFO_V1(copy_testfmt_handler);
+Datum
+copy_testfmt_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+	CopyRoutine *routine = makeNode(CopyRoutine);
+
+	ereport(NOTICE,
+			(errmsg("testfmt_handler called with is_from %d", is_from)));
+
+	routine->is_from = is_from;
+
+	if (!is_from)
+	{
+		CopyToRoutine *impl = makeNode(CopyToRoutine);
+
+		impl->start_fn = testfmt_copyto_start;
+		impl->onerow_fn = testfmt_copyto_onerow;
+		impl->end_fn = testfmt_copyto_end;
+
+		routine->impl = (Node *) impl;
+	}
+	else
+		elog(ERROR, "custom COPY format \"testfmt\" does not support COPY FROM");
+
+	PG_RETURN_POINTER(routine);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 0000000000..57e0ef9d91
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
#33Junwang Zhao
zhjwpku@gmail.com
In reply to: Masahiko Sawada (#32)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Dec 11, 2023 at 10:32 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Mon, Dec 11, 2023 at 7:19 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Dec 11, 2023 at 10:57:15AM +0900, Masahiko Sawada wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Agreed to not touch the logictics of LookupFuncName() for the sake of
this thread. I have not checked the SQL specification, but I recall
that there are a few assumptions from the spec embedded in the lookup
logic particularly when it comes to specify a procedure name without
arguments.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

Yep, that's possible as well and can work as a cross-check between the
argument and the NodeTag assigned to the handler structure returned by
the function.

At the end, the final result of the patch should IMO include:
- Documentation about how one can register a custom copy_handler.
- Something in src/test/modules/, minimalistic still useful that can
be used as a template when one wants to implement their own handler.
The documentation should mention about this module.
- No need for SQL functions for all the in-core handlers: let's just
return pointers to them based on the options given.

Agreed.

It would be probably cleaner to split the patch so as the code is
refactored and evaluated with the in-core handlers first, and then
extended with the pluggable facilities and the function lookups.

Agreed.

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

The test_copy_format extension doesn't use the fields of CopyToState and
CopyFromState in this patch, I think we should move CopyFromStateData
and CopyToStateData to commands/copy.h, what do you think?

The framework in the patch LGTM.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

--
Regards
Junwang Zhao

#34Hayato Kuroda (Fujitsu)
kuroda.hayato@fujitsu.com
In reply to: Sutou Kouhei (#24)
RE: Make COPY format extendable: Extract COPY TO format implementations

Dear Sutou-san, Junwang,

Sorry for the delay reply.

Can we discuss how to proceed this improvement?

There are 2 approaches for it:

1. Do the followings concurrently:
a. Implementing small changes that got a consensus and
merge them step-by-step
(e.g. We got a consensus that we need to extract the
current format related routines.)
b. Discuss design

(v1-v3 patches use this approach.)

2. Implement one (large) complete patch set with design
discussion and merge it

(v4- patches use this approach.)

Which approach is preferred? (Or should we choose another
approach?)

I thought that 1. is preferred because it will reduce review
cost. So I chose 1.

I'm ok to use approach 1, but could you please divide a large patch? E.g.,

0001. defines an infrastructure for copy-API
0002. adjusts current codes to use APIs
0003. adds a test module in src/test/modules or contrib.
...

This approach helps reviewers to see patches deeper. Separated patches can be
combined when they are close to committable.

Best Regards,
Hayato Kuroda
FUJITSU LIMITED

#35Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Junwang Zhao (#33)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Dec 12, 2023 at 11:09 AM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Mon, Dec 11, 2023 at 10:32 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Mon, Dec 11, 2023 at 7:19 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Dec 11, 2023 at 10:57:15AM +0900, Masahiko Sawada wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Agreed to not touch the logictics of LookupFuncName() for the sake of
this thread. I have not checked the SQL specification, but I recall
that there are a few assumptions from the spec embedded in the lookup
logic particularly when it comes to specify a procedure name without
arguments.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

Yep, that's possible as well and can work as a cross-check between the
argument and the NodeTag assigned to the handler structure returned by
the function.

At the end, the final result of the patch should IMO include:
- Documentation about how one can register a custom copy_handler.
- Something in src/test/modules/, minimalistic still useful that can
be used as a template when one wants to implement their own handler.
The documentation should mention about this module.
- No need for SQL functions for all the in-core handlers: let's just
return pointers to them based on the options given.

Agreed.

It would be probably cleaner to split the patch so as the code is
refactored and evaluated with the in-core handlers first, and then
extended with the pluggable facilities and the function lookups.

Agreed.

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

The test_copy_format extension doesn't use the fields of CopyToState and
CopyFromState in this patch, I think we should move CopyFromStateData
and CopyToStateData to commands/copy.h, what do you think?

Yes, I basically agree with that, where we move CopyFromStateData to
might depend on how we define COPY FROM APIs though. I think we can
move CopyToStateData to copy.h at least.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#36Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#29)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCvjGserrtEU=UcA3Mfyfe6ftf9OXPHv9fiJ9DmXMJ2nQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Dec 2023 10:57:15 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Oh, sorry. I didn't notice it.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

It's for using "${copy_format_name}" such as "json" and
"parquet" as a function name, right? If we use the
"${copy_format_name}" approach, we can't use function names
that are already used by tablesample method handler such as
"system" and "bernoulli" for COPY FORMAT name. Because both
of tablesample method handler function and COPY FORMAT
handler function use "(internal)" as arguments.

I think that tablesample method names and COPY FORMAT names
will not be conflicted but the limitation (using the same
namespace for tablesample method and COPY FORMAT) is
unnecessary limitation.

How about using prefix ("copy_to_${copy_format_name}" or
something) or suffix ("${copy_format_name}_copy_to" or
something) for function names? For example,
"copy_to_json"/"copy_from_json" for "json" COPY FORMAT.

("copy_${copy_format_name}" that returns copy_handler
encapsulating either copy_to/from_handler depending on the
argument may be an option.)

Thanks,
--
kou

#37Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#36)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 14, 2023 at 6:44 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCvjGserrtEU=UcA3Mfyfe6ftf9OXPHv9fiJ9DmXMJ2nQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Dec 2023 10:57:15 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

IIUC we cannot create two same name functions with the same arguments
but a different return value type in the first place. It seems to me
to be an overkill to change such a design.

Oh, sorry. I didn't notice it.

Another idea is to encapsulate copy_to/from_handler by a super class
like copy_handler. The handler function is called with an argument,
say copyto, and returns copy_handler encapsulating either
copy_to/from_handler depending on the argument.

It's for using "${copy_format_name}" such as "json" and
"parquet" as a function name, right?

Right.

If we use the
"${copy_format_name}" approach, we can't use function names
that are already used by tablesample method handler such as
"system" and "bernoulli" for COPY FORMAT name. Because both
of tablesample method handler function and COPY FORMAT
handler function use "(internal)" as arguments.

I think that tablesample method names and COPY FORMAT names
will not be conflicted but the limitation (using the same
namespace for tablesample method and COPY FORMAT) is
unnecessary limitation.

Presumably, such function name collisions are not limited to
tablesample and copy, but apply to all functions that have an
"internal" argument. To avoid collisions, extensions can be created in
a different schema than public. And note that built-in format copy
handler doesn't need to declare its handler function.

How about using prefix ("copy_to_${copy_format_name}" or
something) or suffix ("${copy_format_name}_copy_to" or
something) for function names? For example,
"copy_to_json"/"copy_from_json" for "json" COPY FORMAT.

("copy_${copy_format_name}" that returns copy_handler
encapsulating either copy_to/from_handler depending on the
argument may be an option.)

While there is a way to avoid collision as I mentioned above, I can
see the point that we might want to avoid using a generic function
name such as "arrow" and "parquet" as custom copy handler functions.
Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#38Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#37)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCZv3cVU+NxR2s9J_dWvjrS350GFFr2vMgCH8wWxQ5hTQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 15 Dec 2023 05:19:43 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

To avoid collisions, extensions can be created in a
different schema than public.

Thanks. I didn't notice it.

And note that built-in format copy handler doesn't need to
declare its handler function.

Right. I know it.

Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

Interesting. If we use this option, users can choose an COPY
FORMAT implementation they like from multiple
implementations. For example, a developer may implement a
COPY FROM FORMAT = 'json' handler with PostgreSQL's JSON
related API and another developer may implement a handler
with simdjson[1]https://github.com/simdjson/simdjson which is a fast JSON parser. Users can
choose whichever they like.

But specifying HANDLER = '...' explicitly is a bit
inconvenient. Because only one handler will be installed in
most use cases. In the case, users don't need to choose one
handler.

If we choose this option, it may be better that we also
provide a mechanism that can work without HANDLER. Searching
a function by name like tablesample method does is an option.

[1]: https://github.com/simdjson/simdjson

Thanks,
--
kou

#39Sutou Kouhei
kou@clear-code.com
In reply to: Hayato Kuroda (Fujitsu) (#34)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In
<OS3PR01MB9882F023300EDC5AFD8A8339F58EA@OS3PR01MB9882.jpnprd01.prod.outlook.com>
"RE: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 12 Dec 2023 02:31:53 +0000,
"Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com> wrote:

Can we discuss how to proceed this improvement?

There are 2 approaches for it:

1. Do the followings concurrently:
a. Implementing small changes that got a consensus and
merge them step-by-step
(e.g. We got a consensus that we need to extract the
current format related routines.)
b. Discuss design

(v1-v3 patches use this approach.)

2. Implement one (large) complete patch set with design
discussion and merge it

(v4- patches use this approach.)

Which approach is preferred? (Or should we choose another
approach?)

I thought that 1. is preferred because it will reduce review
cost. So I chose 1.

I'm ok to use approach 1, but could you please divide a large patch? E.g.,

0001. defines an infrastructure for copy-API
0002. adjusts current codes to use APIs
0003. adds a test module in src/test/modules or contrib.
...

This approach helps reviewers to see patches deeper. Separated patches can be
combined when they are close to committable.

It seems that I should have chosen another approach based on
comments so far:

3. Do the followings in order:
a. Implement a workable (but maybe dirty and/or incomplete)
implementation to discuss design like [1]/messages/by-id/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com, discuss
design with it and get a consensus on design
b. Implement small patches based on the design

[1]: /messages/by-id/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com

I'll implement a custom COPY FORMAT handler with [1]/messages/by-id/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com and
provide a feedback with the experience. (It's for a.)

Thanks,
--
kou

#40Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#38)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 15, 2023 at 8:53 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCZv3cVU+NxR2s9J_dWvjrS350GFFr2vMgCH8wWxQ5hTQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 15 Dec 2023 05:19:43 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

To avoid collisions, extensions can be created in a
different schema than public.

Thanks. I didn't notice it.

And note that built-in format copy handler doesn't need to
declare its handler function.

Right. I know it.

Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

I like the prefix/suffix idea, easy to implement. *custom* is not a FORMAT,
and user has to know the name of the specific handler names, not
intuitive.

Interesting. If we use this option, users can choose an COPY
FORMAT implementation they like from multiple
implementations. For example, a developer may implement a
COPY FROM FORMAT = 'json' handler with PostgreSQL's JSON
related API and another developer may implement a handler
with simdjson[1] which is a fast JSON parser. Users can
choose whichever they like.

Not sure about this, why not move Json copy handler to contrib
as an example for others, any extensions share the same format
function name and just install one? No bound would implement
another CSV or TEXT copy handler IMHO.

But specifying HANDLER = '...' explicitly is a bit
inconvenient. Because only one handler will be installed in
most use cases. In the case, users don't need to choose one
handler.

If we choose this option, it may be better that we also
provide a mechanism that can work without HANDLER. Searching
a function by name like tablesample method does is an option.

[1]: https://github.com/simdjson/simdjson

Thanks,
--
kou

--
Regards
Junwang Zhao

#41Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#38)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 15, 2023 at 9:53 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCZv3cVU+NxR2s9J_dWvjrS350GFFr2vMgCH8wWxQ5hTQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 15 Dec 2023 05:19:43 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

To avoid collisions, extensions can be created in a
different schema than public.

Thanks. I didn't notice it.

And note that built-in format copy handler doesn't need to
declare its handler function.

Right. I know it.

Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

Interesting. If we use this option, users can choose an COPY
FORMAT implementation they like from multiple
implementations. For example, a developer may implement a
COPY FROM FORMAT = 'json' handler with PostgreSQL's JSON
related API and another developer may implement a handler
with simdjson[1] which is a fast JSON parser. Users can
choose whichever they like.

But specifying HANDLER = '...' explicitly is a bit
inconvenient. Because only one handler will be installed in
most use cases. In the case, users don't need to choose one
handler.

If we choose this option, it may be better that we also
provide a mechanism that can work without HANDLER. Searching
a function by name like tablesample method does is an option.

Agreed. We can search the function by format name by default and the
user can optionally specify the handler function name in case where
the names of the installed custom copy handler collide. Probably the
handler option stuff could be a follow-up patch.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#42Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#40)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3JuShA6g19Nt_Ejk15BrNA6PmeCbK7p81izZi71muGq3g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 15 Dec 2023 11:27:30 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

I like the prefix/suffix idea, easy to implement. *custom* is not a FORMAT,
and user has to know the name of the specific handler names, not
intuitive.

Ah! I misunderstood this idea. "custom" is the special
format to use "HANDLER". I thought that we can use it like

(FORMAT = 'arrow', HANDLER = 'arrow_copy_handler_impl1')

and

(FORMAT = 'arrow', HANDLER = 'arrow_copy_handler_impl2')

.

Interesting. If we use this option, users can choose an COPY
FORMAT implementation they like from multiple
implementations. For example, a developer may implement a
COPY FROM FORMAT = 'json' handler with PostgreSQL's JSON
related API and another developer may implement a handler
with simdjson[1] which is a fast JSON parser. Users can
choose whichever they like.

Not sure about this, why not move Json copy handler to contrib
as an example for others, any extensions share the same format
function name and just install one? No bound would implement
another CSV or TEXT copy handler IMHO.

I should have used a different format not JSON as an example
for easy to understand. I just wanted to say that extension
developers can implement another implementation without
conflicting another implementation.

Thanks,
--
kou

#43Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#42)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 15, 2023 at 12:45 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3JuShA6g19Nt_Ejk15BrNA6PmeCbK7p81izZi71muGq3g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 15 Dec 2023 11:27:30 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Adding a prefix or suffix would be one option but to give extensions
more flexibility, another option would be to support format = 'custom'
and add the "handler" option to specify a copy handler function name
to call. For example, COPY ... FROM ... WITH (FORMAT = 'custom',
HANDLER = 'arrow_copy_handler').

I like the prefix/suffix idea, easy to implement. *custom* is not a FORMAT,
and user has to know the name of the specific handler names, not
intuitive.

Ah! I misunderstood this idea. "custom" is the special
format to use "HANDLER". I thought that we can use it like

(FORMAT = 'arrow', HANDLER = 'arrow_copy_handler_impl1')

and

(FORMAT = 'arrow', HANDLER = 'arrow_copy_handler_impl2')

.

Interesting. If we use this option, users can choose an COPY
FORMAT implementation they like from multiple
implementations. For example, a developer may implement a
COPY FROM FORMAT = 'json' handler with PostgreSQL's JSON
related API and another developer may implement a handler
with simdjson[1] which is a fast JSON parser. Users can
choose whichever they like.

Not sure about this, why not move Json copy handler to contrib
as an example for others, any extensions share the same format
function name and just install one? No bound would implement
another CSV or TEXT copy handler IMHO.

I should have used a different format not JSON as an example
for easy to understand. I just wanted to say that extension
developers can implement another implementation without
conflicting another implementation.

Yeah, I can see the value of the HANDLER option now. The possibility
of two extensions for the same format using same hanlder name should
be rare I guess ;)

Thanks,
--
kou

--
Regards
Junwang Zhao

#44Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#32)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Dec 2023 23:31:29 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

I implemented a sample COPY TO handler for Apache Arrow that
supports only integer and text.

I needed to extend the patch:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

3. Export CopySend*()
* Rename CopySend*() to CopyToStateSend*() and export them
* Exception: CopySendEndOfRow() to CopyToStateFlush() because
it just flushes the internal buffer now.
https://github.com/kou/postgres/commit/289a5640135bde6733a1b8e2c412221ad522901e

The attached patch is based on the Sawada-san's patch and
includes the above changes. Note that this patch is also
dirty so just for discussion.

My suggestions from this experience:

1. Split COPY handler to COPY TO handler and COPY FROM handler

* CopyFormatRoutine is a bit tricky. An extension needs
to create a CopyFormatRoutine node and
a CopyToFormatRoutine node.

* If we just require "copy_to_${FORMAT}(internal)"
function and "copy_from_${FORMAT}(internal)" function,
we can remove the tricky approach. And it also avoid
name collisions with other handler such as tablesample
handler.
See also:
/messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

3. Export CopySend*()

* If we like minimum API, we just need to export
CopySendData() and CopySendEndOfRow(). But
CopySend{String,Char,Int32,Int16}() will be convenient
custom COPY TO handlers. (A custom COPY TO handler for
Apache Arrow doesn't need them.)

Questions:

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/copyto.c;h=c66a047c4a79cc614784610f385f1cd0935350f3;hb=9ca6e7b9411e36488ef539a2c1f6846ac92a7072#l144

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

Thanks,
--
kou

Attachments:

v2-custom_copy_format_draft.difftext/x-patch; charset=us-asciiDownload
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfad47b562..e7597894bf 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -23,6 +23,7 @@
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -32,6 +33,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "rewrite/rewriteHandler.h"
 #include "utils/acl.h"
@@ -427,6 +429,8 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
+	/* Text is the default format. */
+	opts_out->to_ops = &CopyToTextFormatRoutine;
 	/* Extract options from the statement node tree */
 	foreach(option, options)
 	{
@@ -442,9 +446,26 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_ops = &CopyToCSVFormatRoutine;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_ops = &CopyToBinaryFormatRoutine;
+			}
+			else if (!is_from)
+			{
+				/*
+				 * XXX: Currently we support custom COPY format only for COPY
+				 * TO.
+				 *
+				 * XXX: need to check the combination of the existing options
+				 * and a custom format (e.g., FREEZE)?
+				 */
+				opts_out->to_ops = GetCopyToFormatRoutine(fmt);
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -864,3 +885,62 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+static CopyFormatRoutine *
+GetCopyFormatRoutine(char *format_name, bool is_from)
+{
+	Oid			handlerOid;
+	Oid			funcargtypes[1];
+	CopyFormatRoutine *cp;
+	Datum		datum;
+
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format_name)), 1,
+								funcargtypes, true);
+
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("COPY format \"%s\" not recognized", format_name)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+
+	cp = (CopyFormatRoutine *) DatumGetPointer(datum);
+
+	if (cp == NULL || !IsA(cp, CopyFormatRoutine))
+		elog(ERROR, "copy handler function %u did not return a CopyFormatRoutine struct",
+			 handlerOid);
+
+	if (!IsA(cp->routine, CopyToFormatRoutine) &&
+		!IsA(cp->routine, CopyFromFormatRoutine))
+		elog(ERROR, "copy handler function %u returned invalid CopyFormatRoutine struct",
+			 handlerOid);
+
+	if (!cp->is_from && !IsA(cp->routine, CopyToFormatRoutine))
+		elog(ERROR, "copy handler function %u returned COPY FROM routines but expected COPY TO routines",
+			 handlerOid);
+
+	if (cp->is_from && !IsA(cp->routine, CopyFromFormatRoutine))
+		elog(ERROR, "copy handler function %u returned COPY TO routines but expected COPY FROM routines",
+			 handlerOid);
+
+	return cp;
+}
+
+CopyToFormatRoutine *
+GetCopyToFormatRoutine(char *format_name)
+{
+	CopyFormatRoutine *cp;
+
+	cp = GetCopyFormatRoutine(format_name, false);
+	return (CopyToFormatRoutine *) castNode(CopyToFormatRoutine, cp->routine);
+}
+
+CopyFromFormatRoutine *
+GetCopyFromFormatRoutine(char *format_name)
+{
+	CopyFormatRoutine *cp;
+
+	cp = GetCopyFormatRoutine(format_name, true);
+	return (CopyFromFormatRoutine *) castNode(CopyFromFormatRoutine, cp->routine);
+}
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c66a047c4a..3b1c2a277c 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -99,6 +99,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void *opaque; /* private space */
 } CopyToStateData;
 
 /* DestReceiver for COPY (query) TO */
@@ -124,13 +127,229 @@ static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
-static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
-static void CopySendString(CopyToState cstate, const char *str);
-static void CopySendChar(CopyToState cstate, char c);
-static void CopySendEndOfRow(CopyToState cstate);
-static void CopySendInt32(CopyToState cstate, int32 val);
-static void CopySendInt16(CopyToState cstate, int16 val);
 
+/* Exported functions that are used by custom format routines. */
+
+/* TODO: Document */
+void *CopyToStateGetOpaque(CopyToState cstate)
+{
+	return cstate->opaque;
+}
+
+/* TODO: Document */
+void CopyToStateSetOpaque(CopyToState cstate, void *opaque)
+{
+	 cstate->opaque = opaque;
+}
+
+/* TODO: Document */
+List *CopyToStateGetAttNumList(CopyToState cstate)
+{
+	return cstate->attnumlist;
+}
+
+/*
+ * CopyToFormatOps implementations.
+ */
+
+/*
+ * CopyToFormatOps implementation for "text" and "csv". CopyToFormatText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+static void
+CopyToFormatTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopyToStateSendChar(cstate, '\n');
+#else
+			CopyToStateSendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopyToStateSendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopyToStateFlush(cstate);
+}
+
+static void
+CopyToFormatTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopyToStateSendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopyToStateSendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToFormatTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToFormatTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopyToStateSendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+			CopyToStateSendString(cstate, cstate->opts.null_print_client);
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToFormatTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToFormatTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToFormatOps implementation for "binary".
+ */
+
+static void
+CopyToFormatBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/* Generate header for a binary copy */
+	/* Signature */
+	CopyToStateSendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	CopyToStateSendInt32(cstate, 0);
+	/* No header extension */
+	CopyToStateSendInt32(cstate, 0);
+}
+
+static void
+CopyToFormatBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopyToStateSendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+			CopyToStateSendInt32(cstate, -1);
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopyToStateSendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopyToStateSendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopyToStateFlush(cstate);
+}
+
+static void
+CopyToFormatBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopyToStateSendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopyToStateFlush(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -163,51 +382,41 @@ SendCopyEnd(CopyToState cstate)
 }
 
 /*----------
- * CopySendData sends output data to the destination (file or frontend)
- * CopySendString does the same for null-terminated strings
- * CopySendChar does the same for single characters
- * CopySendEndOfRow does the appropriate thing at end of each data row
- *	(data is not actually flushed except by CopySendEndOfRow)
+ * CopyToStateSendData sends output data to the destination (file or frontend)
+ * CopyToStateSendString does the same for null-terminated strings
+ * CopyToStateSendChar does the same for single characters
+ * CopyToStateFlush does the appropriate thing at end of each data row
+ *	(data is not actually flushed except by CopyToStateFlush)
  *
  * NB: no data conversion is applied by these functions
  *----------
  */
-static void
-CopySendData(CopyToState cstate, const void *databuf, int datasize)
+void
+CopyToStateSendData(CopyToState cstate, const void *databuf, int datasize)
 {
 	appendBinaryStringInfo(cstate->fe_msgbuf, databuf, datasize);
 }
 
-static void
-CopySendString(CopyToState cstate, const char *str)
+void
+CopyToStateSendString(CopyToState cstate, const char *str)
 {
 	appendBinaryStringInfo(cstate->fe_msgbuf, str, strlen(str));
 }
 
-static void
-CopySendChar(CopyToState cstate, char c)
+void
+CopyToStateSendChar(CopyToState cstate, char c)
 {
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
 }
 
-static void
-CopySendEndOfRow(CopyToState cstate)
+void
+CopyToStateFlush(CopyToState cstate)
 {
 	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
 
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +451,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -266,27 +471,27 @@ CopySendEndOfRow(CopyToState cstate)
  */
 
 /*
- * CopySendInt32 sends an int32 in network byte order
+ * CopyToStateSendInt32 sends an int32 in network byte order
  */
-static inline void
-CopySendInt32(CopyToState cstate, int32 val)
+void
+CopyToStateSendInt32(CopyToState cstate, int32 val)
 {
 	uint32		buf;
 
 	buf = pg_hton32((uint32) val);
-	CopySendData(cstate, &buf, sizeof(buf));
+	CopyToStateSendData(cstate, &buf, sizeof(buf));
 }
 
 /*
- * CopySendInt16 sends an int16 in network byte order
+ * CopyToStateSendInt16 sends an int16 in network byte order
  */
-static inline void
-CopySendInt16(CopyToState cstate, int16 val)
+void
+CopyToStateSendInt16(CopyToState cstate, int16 val)
 {
 	uint16		buf;
 
 	buf = pg_hton16((uint16) val);
-	CopySendData(cstate, &buf, sizeof(buf));
+	CopyToStateSendData(cstate, &buf, sizeof(buf));
 }
 
 /*
@@ -748,8 +953,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +962,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +977,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_ops->start_fn(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1016,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_ops->end_fn(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1032,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_ops->onerow_fn(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
@@ -981,7 +1051,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 #define DUMPSOFAR() \
 	do { \
 		if (ptr > start) \
-			CopySendData(cstate, start, ptr - start); \
+			CopyToStateSendData(cstate, start, ptr - start); \
 	} while (0)
 
 static void
@@ -1000,7 +1070,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	/*
 	 * We have to grovel through the string searching for control characters
 	 * and instances of the delimiter character.  In most cases, though, these
-	 * are infrequent.  To avoid overhead from calling CopySendData once per
+	 * are infrequent.  To avoid overhead from calling CopyToStateSendData once per
 	 * character, we dump out all characters between escaped characters in a
 	 * single call.  The loop invariant is that the data from "start" to "ptr"
 	 * can be sent literally, but hasn't yet been.
@@ -1055,14 +1125,14 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				}
 				/* if we get here, we need to convert the control char */
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
-				CopySendChar(cstate, c);
+				CopyToStateSendChar(cstate, '\\');
+				CopyToStateSendChar(cstate, c);
 				start = ++ptr;	/* do not include char in next run */
 			}
 			else if (c == '\\' || c == delimc)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
+				CopyToStateSendChar(cstate, '\\');
 				start = ptr++;	/* we include char in next run */
 			}
 			else if (IS_HIGHBIT_SET(c))
@@ -1115,14 +1185,14 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				}
 				/* if we get here, we need to convert the control char */
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
-				CopySendChar(cstate, c);
+				CopyToStateSendChar(cstate, '\\');
+				CopyToStateSendChar(cstate, c);
 				start = ++ptr;	/* do not include char in next run */
 			}
 			else if (c == '\\' || c == delimc)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
+				CopyToStateSendChar(cstate, '\\');
 				start = ptr++;	/* we include char in next run */
 			}
 			else
@@ -1189,7 +1259,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 
 	if (use_quote)
 	{
-		CopySendChar(cstate, quotec);
+		CopyToStateSendChar(cstate, quotec);
 
 		/*
 		 * We adopt the same optimization strategy as in CopyAttributeOutText
@@ -1200,7 +1270,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 			if (c == quotec || c == escapec)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, escapec);
+				CopyToStateSendChar(cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
 			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
@@ -1210,12 +1280,12 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		}
 		DUMPSOFAR();
 
-		CopySendChar(cstate, quotec);
+		CopyToStateSendChar(cstate, quotec);
 	}
 	else
 	{
 		/* If it doesn't need quoting, we can just dump it as-is */
-		CopySendString(cstate, ptr);
+		CopyToStateSendString(cstate, ptr);
 	}
 }
 
@@ -1284,3 +1354,33 @@ CreateCopyDestReceiver(void)
 
 	return (DestReceiver *) self;
 }
+
+CopyToFormatRoutine CopyToTextFormatRoutine =
+{
+	.type = T_CopyToFormatRoutine,
+	.start_fn = CopyToFormatTextStart,
+	.onerow_fn = CopyToFormatTextOneRow,
+	.end_fn = CopyToFormatTextEnd,
+};
+
+/*
+ * We can use the same CopyToFormatOps for both of "text" and "csv" because
+ * CopyToFormatText*() refer cstate->opts.csv_mode and change their
+ * behavior. We can split the implementations and stop referring
+ * cstate->opts.csv_mode later.
+ */
+CopyToFormatRoutine CopyToCSVFormatRoutine =
+{
+	.type = T_CopyToFormatRoutine,
+	.start_fn = CopyToFormatTextStart,
+	.onerow_fn = CopyToFormatTextOneRow,
+	.end_fn = CopyToFormatTextEnd,
+};
+
+CopyToFormatRoutine CopyToBinaryFormatRoutine =
+{
+	.type = T_CopyToFormatRoutine,
+	.start_fn = CopyToFormatBinaryStart,
+	.onerow_fn = CopyToFormatBinaryOneRow,
+	.end_fn = CopyToFormatBinaryEnd,
+};
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e..173ee11811 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 72c7963578..c48015a612 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 3ba8cb192c..4391e5cefc 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -373,6 +373,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 77e8b13764..9e0f33ad9e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7602,6 +7602,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index f6110a850d..4fe5c17818 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -632,6 +632,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   typname => 'table_am_handler',
   descr => 'pseudo-type for the result of a table AM handler function',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2cca0b90b..cd081bd925 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -18,6 +18,7 @@
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
+#include "commands/copyapi.h"
 
 /*
  * Represents whether a header line should be present, and whether it must
@@ -63,12 +64,9 @@ typedef struct CopyFormatOptions
 	bool	   *force_null_flags;	/* per-column CSV FN flags */
 	bool		convert_selectively;	/* do selective binary conversion? */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToFormatRoutine *to_ops;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -102,4 +100,9 @@ extern uint64 DoCopyTo(CopyToState cstate);
 extern List *CopyGetAttnums(TupleDesc tupDesc, Relation rel,
 							List *attnamelist);
 
+/* build-in COPY TO format routines */
+extern CopyToFormatRoutine CopyToTextFormatRoutine;
+extern CopyToFormatRoutine CopyToCSVFormatRoutine;
+extern CopyToFormatRoutine CopyToBinaryFormatRoutine;
+
 #endif							/* COPY_H */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..2a38d72ce7
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,71 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM
+ *
+ * Copyright (c) 2015-2023, PostgreSQL Global Development Group
+ *
+ * src/include/command/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+
+typedef struct CopyToStateData *CopyToState;
+extern void *CopyToStateGetOpaque(CopyToState cstate);
+extern void CopyToStateSetOpaque(CopyToState cstate, void *opaque);
+extern List *CopyToStateGetAttNumList(CopyToState cstate);
+
+extern void CopyToStateSendData(CopyToState cstate, const void *databuf, int datasize);
+extern void CopyToStateSendString(CopyToState cstate, const char *str);
+extern void CopyToStateSendChar(CopyToState cstate, char c);
+extern void CopyToStateSendInt32(CopyToState cstate, int32 val);
+extern void CopyToStateSendInt16(CopyToState cstate, int16 val);
+extern void CopyToStateFlush(CopyToState cstate);
+
+typedef struct CopyFromStateData *CopyFromState;
+
+
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);
+
+/* XXX: just copied from COPY TO routines */
+typedef void (*CopyFromStart_function) (CopyFromState cstate, TupleDesc tupDesc);
+typedef void (*CopyFromOneRow_function) (CopyFromState cstate, TupleTableSlot *slot);
+typedef void (*CopyFromEnd_function) (CopyFromState cstate);
+
+typedef struct CopyFormatRoutine
+{
+	NodeTag		type;
+
+	bool		is_from;
+	Node	   *routine;
+}			CopyFormatRoutine;
+
+typedef struct CopyToFormatRoutine
+{
+	NodeTag		type;
+
+	CopyToStart_function start_fn;
+	CopyToOneRow_function onerow_fn;
+	CopyToEnd_function end_fn;
+}			CopyToFormatRoutine;
+
+/* XXX: just copied from COPY TO routines */
+typedef struct CopyFromFormatRoutine
+{
+	NodeTag		type;
+
+	CopyFromStart_function start_fn;
+	CopyFromOneRow_function onerow_fn;
+	CopyFromEnd_function end_fn;
+}			CopyFromFormatRoutine;
+
+extern CopyToFormatRoutine * GetCopyToFormatRoutine(char *format_name);
+extern CopyFromFormatRoutine * GetCopyFromFormatRoutine(char *format_name);
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index 626dc696d5..53b262568c 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 5d33fa6a9a..204cfd3f49 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index b76f588559..2fbe1abd4a 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -12,6 +12,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 0000000000..f2b89b56a1
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY format"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 0000000000..8becdb6369
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,14 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'testfmt');
+ERROR:  COPY format "testfmt" not recognized
+LINE 1: COPY public.test FROM stdin WITH (format 'testfmt');
+                                          ^
+COPY public.test TO stdout WITH (format 'testfmt');
+NOTICE:  testfmt_handler called with is_from 0
+NOTICE:  testfmt_copyto_start called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_onerow called
+NOTICE:  testfmt_copyto_end called
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 0000000000..4adf048280
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2022-2023, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test COPY format routines',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 0000000000..1052135252
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'testfmt');
+COPY public.test TO stdout WITH (format 'testfmt');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 0000000000..2749924831
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,9 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+
+CREATE FUNCTION testfmt(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'copy_testfmt_handler' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 0000000000..8a584f4814
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,70 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for custom COPY format.
+ *
+ * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "access/table.h"
+#include "commands/copyapi.h"
+#include "fmgr.h"
+#include "utils/rel.h"
+
+PG_MODULE_MAGIC;
+
+static void
+testfmt_copyto_start(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_start called")));
+}
+
+static void
+testfmt_copyto_onerow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_onerow called")));
+}
+
+static void
+testfmt_copyto_end(CopyToState cstate)
+{
+	ereport(NOTICE,
+			(errmsg("testfmt_copyto_end called")));
+}
+
+PG_FUNCTION_INFO_V1(copy_testfmt_handler);
+Datum
+copy_testfmt_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+	CopyFormatRoutine *cp = makeNode(CopyFormatRoutine);;
+
+	ereport(NOTICE,
+			(errmsg("testfmt_handler called with is_from %d", is_from)));
+
+	cp->is_from = is_from;
+	if (!is_from)
+	{
+		CopyToFormatRoutine *cpt = makeNode(CopyToFormatRoutine);
+
+		cpt->start_fn = testfmt_copyto_start;
+		cpt->onerow_fn = testfmt_copyto_onerow;
+		cpt->end_fn = testfmt_copyto_end;
+
+		cp->routine = (Node *) cpt;
+	}
+	else
+		elog(ERROR, "custom COPY format \"testfmt\" does not support COPY FROM");
+
+	PG_RETURN_POINTER(cp);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 0000000000..57e0ef9d91
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
#45Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#44)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 21, 2023 at 06:35:04PM +0900, Sutou Kouhei wrote:

* If we just require "copy_to_${FORMAT}(internal)"
function and "copy_from_${FORMAT}(internal)" function,
we can remove the tricky approach. And it also avoid
name collisions with other handler such as tablesample
handler.
See also:
/messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com

Hmm. I prefer the unique name approach for the COPY portions without
enforcing any naming policy on the function names returning the
handlers, actually, though I can see your point.

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

Sounds useful to me to have a private area passed down to the
callbacks.

3. Export CopySend*()

* If we like minimum API, we just need to export
CopySendData() and CopySendEndOfRow(). But
CopySend{String,Char,Int32,Int16}() will be convenient
custom COPY TO handlers. (A custom COPY TO handler for
Apache Arrow doesn't need them.)

Hmm. Not sure on this one. This may come down to externalize the
manipulation of fe_msgbuf. Particularly, could it be possible that
some custom formats don't care at all about the network order?

Questions:

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

Interesting point. It looks very tempting to give more flexibility to
people who'd like to use their own code as we have one byte in the
protocol but just use 0/1. Hence it feels natural to have a callback
for that.

It also means that we may want to think harder about copy_is_binary in
libpq in the future step. Now, having a backend implementation does
not need any libpq bits, either, because a client stack may just want
to speak the Postgres protocol directly. Perhaps a custom COPY
implementation would be OK with how things are in libpq, as well,
tweaking its way through with just text or binary.

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

A makeNode() is used with an allocation in the current memory context
in the function returning the handler. I would have assume that this
stuff returns a handler as a const struct like table AMs.
--
Michael

#46Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#45)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Dec 22, 2023 at 10:00 AM Michael Paquier <michael@paquier.xyz> wrote:

On Thu, Dec 21, 2023 at 06:35:04PM +0900, Sutou Kouhei wrote:

* If we just require "copy_to_${FORMAT}(internal)"
function and "copy_from_${FORMAT}(internal)" function,
we can remove the tricky approach. And it also avoid
name collisions with other handler such as tablesample
handler.
See also:
/messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com

Hmm. I prefer the unique name approach for the COPY portions without
enforcing any naming policy on the function names returning the
handlers, actually, though I can see your point.

Yeah, another idea is to provide support functions to return a
CopyFormatRoutine wrapping either CopyToFormatRoutine or
CopyFromFormatRoutine. For example:

extern CopyFormatRoutine *MakeCopyToFormatRoutine(const
CopyToFormatRoutine *routine);

extensions can do like:

static const CopyToFormatRoutine testfmt_handler = {
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
};

Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
CopyFormatRoutine *routine = MakeCopyToFormatRoutine(&testfmt_handler);
:

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

Sounds useful to me to have a private area passed down to the
callbacks.

+1

Questions:

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

Interesting point. It looks very tempting to give more flexibility to
people who'd like to use their own code as we have one byte in the
protocol but just use 0/1. Hence it feels natural to have a callback
for that.

+1

It also means that we may want to think harder about copy_is_binary in
libpq in the future step. Now, having a backend implementation does
not need any libpq bits, either, because a client stack may just want
to speak the Postgres protocol directly. Perhaps a custom COPY
implementation would be OK with how things are in libpq, as well,
tweaking its way through with just text or binary.

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

A makeNode() is used with an allocation in the current memory context
in the function returning the handler. I would have assume that this
stuff returns a handler as a const struct like table AMs.

+1

The example I mentioned above does that.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#47Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#44)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 21, 2023 at 6:35 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Dec 2023 23:31:29 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

I implemented a sample COPY TO handler for Apache Arrow that
supports only integer and text.

I needed to extend the patch:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

I think we can move CopyToState to copy.h and we don't need to have
set/get functions for its fields.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#48Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#44)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Dec 21, 2023 at 5:35 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Dec 2023 23:31:29 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've sketched the above idea including a test module in
src/test/module/test_copy_format, based on v2 patch. It's not splitted
and is dirty so just for discussion.

I implemented a sample COPY TO handler for Apache Arrow that
supports only integer and text.

I needed to extend the patch:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

3. Export CopySend*()
* Rename CopySend*() to CopyToStateSend*() and export them
* Exception: CopySendEndOfRow() to CopyToStateFlush() because
it just flushes the internal buffer now.
https://github.com/kou/postgres/commit/289a5640135bde6733a1b8e2c412221ad522901e

I guess the purpose of these helpers is to avoid expose CopyToState to
copy.h, but I
think expose CopyToState to user might make life easier, users might want to use
the memory contexts of the structure (though I agree not all the
fields are necessary
for extension handers).

The attached patch is based on the Sawada-san's patch and
includes the above changes. Note that this patch is also
dirty so just for discussion.

My suggestions from this experience:

1. Split COPY handler to COPY TO handler and COPY FROM handler

* CopyFormatRoutine is a bit tricky. An extension needs
to create a CopyFormatRoutine node and
a CopyToFormatRoutine node.

* If we just require "copy_to_${FORMAT}(internal)"
function and "copy_from_${FORMAT}(internal)" function,
we can remove the tricky approach. And it also avoid
name collisions with other handler such as tablesample
handler.
See also:
/messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

I once thought users might want to parse their own options, maybe this
is a use case for this opaque space.

For the name, I thought private_data might be a better candidate than
opaque, but I do not insist.

3. Export CopySend*()

* If we like minimum API, we just need to export
CopySendData() and CopySendEndOfRow(). But
CopySend{String,Char,Int32,Int16}() will be convenient
custom COPY TO handlers. (A custom COPY TO handler for
Apache Arrow doesn't need them.)

Do you use the arrow library to control the memory? Is there a way that
we can let the arrow use postgres' memory context? I'm not sure this
is necessary, just raise the question for discussion.

Questions:

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/commands/copyto.c;h=c66a047c4a79cc614784610f385f1cd0935350f3;hb=9ca6e7b9411e36488ef539a2c1f6846ac92a7072#l144

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

Thanks,
--
kou

+PG_FUNCTION_INFO_V1(copy_testfmt_handler);
+Datum
+copy_testfmt_handler(PG_FUNCTION_ARGS)
+{
+ bool is_from = PG_GETARG_BOOL(0);
+ CopyFormatRoutine *cp = makeNode(CopyFormatRoutine);;
+

extra semicolon.

--
Regards
Junwang Zhao

#49Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#45)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZYTfqGppMc9e_w2k@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Dec 2023 10:00:24 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

3. Export CopySend*()

* If we like minimum API, we just need to export
CopySendData() and CopySendEndOfRow(). But
CopySend{String,Char,Int32,Int16}() will be convenient
custom COPY TO handlers. (A custom COPY TO handler for
Apache Arrow doesn't need them.)

Hmm. Not sure on this one. This may come down to externalize the
manipulation of fe_msgbuf. Particularly, could it be possible that
some custom formats don't care at all about the network order?

It means that all custom formats should control byte order
by themselves instead of using CopySendInt*() that always
use network byte order, right? It makes sense. Let's export
only CopySendData() and CopySendEndOfRow().

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

Interesting point. It looks very tempting to give more flexibility to
people who'd like to use their own code as we have one byte in the
protocol but just use 0/1. Hence it feels natural to have a callback
for that.

OK. Let's add a callback something like:

typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);

It also means that we may want to think harder about copy_is_binary in
libpq in the future step. Now, having a backend implementation does
not need any libpq bits, either, because a client stack may just want
to speak the Postgres protocol directly. Perhaps a custom COPY
implementation would be OK with how things are in libpq, as well,
tweaking its way through with just text or binary.

Can we defer this discussion after we commit a basic custom
COPY format handler mechanism?

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

A makeNode() is used with an allocation in the current memory context
in the function returning the handler. I would have assume that this
stuff returns a handler as a const struct like table AMs.

If we use this approach, we can't use the Sawada-san's
idea[1]/messages/by-id/CAD21AoDs9cOjuVbA_krGizAdc50KE+FjAuEXWF0NZwbMnc7F3Q@mail.gmail.com that provides a convenient API to hide
CopyFormatRoutine internal. The idea provides
MakeCopy{To,From}FormatRoutine(). They return a new
CopyFormatRoutine* with suitable is_from member. They can't
use static const CopyFormatRoutine because they may be called
multiple times in the same process.

We can use the satic const struct approach by choosing one
of the followings:

1. Use separated function for COPY {TO,FROM} format handlers
as I suggested.

2. Don't provide convenient API. Developers construct
CopyFormatRoutine by themselves. But it may be a bit
tricky.

3. Similar to 2. but don't use a bit tricky approach (don't
embed Copy{To,From}FormatRoutine nodes into
CopyFormatRoutine).

Use unified function for COPY {TO,FROM} format handlers
but CopyFormatRoutine always have both of COPY {TO,FROM}
format routines and these routines aren't nodes:

typedef struct CopyToFormatRoutine
{
CopyToStart_function start_fn;
CopyToOneRow_function onerow_fn;
CopyToEnd_function end_fn;
} CopyToFormatRoutine;

/* XXX: just copied from COPY TO routines */
typedef struct CopyFromFormatRoutine
{
CopyFromStart_function start_fn;
CopyFromOneRow_function onerow_fn;
CopyFromEnd_function end_fn;
} CopyFromFormatRoutine;

typedef struct CopyFormatRoutine
{
NodeTag type;

CopyToFormatRoutine to_routine;
CopyFromFormatRoutine from_routine;
} CopyFormatRoutine;

----

static const CopyFormatRoutine testfmt_handler = {
.type = T_CopyFormatRoutine,
.to_routine = {
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end,
},
.from_routine = {
.start_fn = testfmt_copyfrom_start,
.onerow_fn = testfmt_copyfrom_onerow,
.end_fn = testfmt_copyfrom_end,
},
};

PG_FUNCTION_INFO_V1(copy_testfmt_handler);
Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(&testfmt_handler);
}

4. ... other idea?

[1]: /messages/by-id/CAD21AoDs9cOjuVbA_krGizAdc50KE+FjAuEXWF0NZwbMnc7F3Q@mail.gmail.com

Thanks,
--
kou

#50Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#47)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Dec 2023 10:48:18 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I needed to extend the patch:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

I think we can move CopyToState to copy.h and we don't need to have
set/get functions for its fields.

I don't object the idea if other PostgreSQL developers
prefer the approach. Is there any PostgreSQL developer who
objects that we export Copy{To,From}StateData as public API?

Thanks,
--
kou

#51Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#48)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3+jG_NKOUmcxDyEX2xSggBXReZ4H=e3RFsUtedY88A03w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Dec 2023 10:58:05 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

3. Export CopySend*()
* Rename CopySend*() to CopyToStateSend*() and export them
* Exception: CopySendEndOfRow() to CopyToStateFlush() because
it just flushes the internal buffer now.
https://github.com/kou/postgres/commit/289a5640135bde6733a1b8e2c412221ad522901e

I guess the purpose of these helpers is to avoid expose CopyToState to
copy.h,

Yes.

but I
think expose CopyToState to user might make life easier, users might want to use
the memory contexts of the structure (though I agree not all the
fields are necessary
for extension handers).

OK. I don't object it as I said in another e-mail:
/messages/by-id/20240110.120644.1876591646729327180.kou@clear-code.com

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

I once thought users might want to parse their own options, maybe this
is a use case for this opaque space.

Good catch! I forgot to suggest a callback for custom format
options. How about the following API?

----
...
typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);

...
typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);

typedef struct CopyToFormatRoutine
{
...
CopyToProcessOption_function process_option_fn;
} CopyToFormatRoutine;

typedef struct CopyFromFormatRoutine
{
...
CopyFromProcessOption_function process_option_fn;
} CopyFromFormatRoutine;
----

----
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index e7597894bf..1aa8b62551 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -416,6 +416,7 @@ void
 ProcessCopyOptions(ParseState *pstate,
 				   CopyFormatOptions *opts_out,
 				   bool is_from,
+				   void *cstate, /* CopyToState* for !is_from, CopyFromState* for is_from */
 				   List *options)
 {
 	bool		format_specified = false;
@@ -593,11 +594,19 @@ ProcessCopyOptions(ParseState *pstate,
 						 parser_errposition(pstate, defel->location)));
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+		{
+			bool processed;
+			if (is_from)
+				processed = opts_out->from_ops->process_option_fn(cstate, defel);
+			else
+				processed = opts_out->to_ops->process_option_fn(cstate, defel);
+			if (!processed)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("option \"%s\" not recognized",
+								defel->defname),
+						 parser_errposition(pstate, defel->location)));
+		}
 	}

/*
----

For the name, I thought private_data might be a better candidate than
opaque, but I do not insist.

I don't have a strong opinion for this. Here are the number
of headers that use "private_data" and "opaque":

$ grep -r private_data --files-with-matches src/include | wc -l
6
$ grep -r opaque --files-with-matches src/include | wc -l
38

It seems that we use "opaque" than "private_data" in general.

but it seems that we use
"opaque" than "private_data" in our code.

Do you use the arrow library to control the memory?

Yes.

Is there a way that
we can let the arrow use postgres' memory context?

Yes. Apache Arrow C++ provides a memory pool feature and we
can implement PostgreSQL's memory context based memory pool
for this. (But this is a custom COPY TO/FROM handler's
implementation details.)

I'm not sure this
is necessary, just raise the question for discussion.

Could you clarify what should we discuss? We should require
that COPY TO/FROM handlers should use PostgreSQL's memory
context for all internal memory allocations?

+PG_FUNCTION_INFO_V1(copy_testfmt_handler);
+Datum
+copy_testfmt_handler(PG_FUNCTION_ARGS)
+{
+ bool is_from = PG_GETARG_BOOL(0);
+ CopyFormatRoutine *cp = makeNode(CopyFormatRoutine);;
+

extra semicolon.

I noticed it too :-)
But I ignored it because the current implementation is only
for discussion. We know that it may be dirty.

Thanks,
--
kou

#52Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#49)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 10, 2024 at 12:00 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <ZYTfqGppMc9e_w2k@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Dec 2023 10:00:24 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

3. Export CopySend*()

* If we like minimum API, we just need to export
CopySendData() and CopySendEndOfRow(). But
CopySend{String,Char,Int32,Int16}() will be convenient
custom COPY TO handlers. (A custom COPY TO handler for
Apache Arrow doesn't need them.)

Hmm. Not sure on this one. This may come down to externalize the
manipulation of fe_msgbuf. Particularly, could it be possible that
some custom formats don't care at all about the network order?

It means that all custom formats should control byte order
by themselves instead of using CopySendInt*() that always
use network byte order, right? It makes sense. Let's export
only CopySendData() and CopySendEndOfRow().

1. What value should be used for "format" in
PgMsg_CopyOutResponse message?

It's 1 for binary format and 0 for text/csv format.

Should we make it customizable by custom COPY TO handler?
If so, what value should be used for this?

Interesting point. It looks very tempting to give more flexibility to
people who'd like to use their own code as we have one byte in the
protocol but just use 0/1. Hence it feels natural to have a callback
for that.

OK. Let's add a callback something like:

typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);

It also means that we may want to think harder about copy_is_binary in
libpq in the future step. Now, having a backend implementation does
not need any libpq bits, either, because a client stack may just want
to speak the Postgres protocol directly. Perhaps a custom COPY
implementation would be OK with how things are in libpq, as well,
tweaking its way through with just text or binary.

Can we defer this discussion after we commit a basic custom
COPY format handler mechanism?

2. Do we need more tries for design discussion for the first
implementation? If we need, what should we try?

A makeNode() is used with an allocation in the current memory context
in the function returning the handler. I would have assume that this
stuff returns a handler as a const struct like table AMs.

If we use this approach, we can't use the Sawada-san's
idea[1] that provides a convenient API to hide
CopyFormatRoutine internal. The idea provides
MakeCopy{To,From}FormatRoutine(). They return a new
CopyFormatRoutine* with suitable is_from member. They can't
use static const CopyFormatRoutine because they may be called
multiple times in the same process.

We can use the satic const struct approach by choosing one
of the followings:

1. Use separated function for COPY {TO,FROM} format handlers
as I suggested.

2. Don't provide convenient API. Developers construct
CopyFormatRoutine by themselves. But it may be a bit
tricky.

3. Similar to 2. but don't use a bit tricky approach (don't
embed Copy{To,From}FormatRoutine nodes into
CopyFormatRoutine).

Use unified function for COPY {TO,FROM} format handlers
but CopyFormatRoutine always have both of COPY {TO,FROM}
format routines and these routines aren't nodes:

typedef struct CopyToFormatRoutine
{
CopyToStart_function start_fn;
CopyToOneRow_function onerow_fn;
CopyToEnd_function end_fn;
} CopyToFormatRoutine;

/* XXX: just copied from COPY TO routines */
typedef struct CopyFromFormatRoutine
{
CopyFromStart_function start_fn;
CopyFromOneRow_function onerow_fn;
CopyFromEnd_function end_fn;
} CopyFromFormatRoutine;

typedef struct CopyFormatRoutine
{
NodeTag type;

CopyToFormatRoutine to_routine;
CopyFromFormatRoutine from_routine;
} CopyFormatRoutine;

----

static const CopyFormatRoutine testfmt_handler = {
.type = T_CopyFormatRoutine,
.to_routine = {
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end,
},
.from_routine = {
.start_fn = testfmt_copyfrom_start,
.onerow_fn = testfmt_copyfrom_onerow,
.end_fn = testfmt_copyfrom_end,
},
};

PG_FUNCTION_INFO_V1(copy_testfmt_handler);
Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(&testfmt_handler);
}

4. ... other idea?

It's a just idea but the fourth idea is to provide a convenient macro
to make it easy to construct the CopyFormatRoutine. For example,

#define COPYTO_ROUTINE(...) (Node *) &(CopyToFormatRoutine) {__VA_ARGS__}

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = true,
.routine = COPYTO_ROUTINE (
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)
};

Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(& testfmt_copyto_handler);
}

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#53Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#52)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoC_dhfS97DKwTL+2nvgBOYrmN9XVYrE8w2SuDgghb-yzg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Jan 2024 15:33:22 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

We can use the satic const struct approach by choosing one
of the followings:

...

4. ... other idea?

It's a just idea but the fourth idea is to provide a convenient macro
to make it easy to construct the CopyFormatRoutine. For example,

#define COPYTO_ROUTINE(...) (Node *) &(CopyToFormatRoutine) {__VA_ARGS__}

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = true,
.routine = COPYTO_ROUTINE (
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)
};

Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(& testfmt_copyto_handler);
}

Interesting. But I feel that it introduces another (a bit)
tricky mechanism...

BTW, we also need to set .type:

.routine = COPYTO_ROUTINE (
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)

Thanks,
--
kou

#54Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#53)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 10, 2024 at 3:40 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC_dhfS97DKwTL+2nvgBOYrmN9XVYrE8w2SuDgghb-yzg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Jan 2024 15:33:22 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

We can use the satic const struct approach by choosing one
of the followings:

...

4. ... other idea?

It's a just idea but the fourth idea is to provide a convenient macro
to make it easy to construct the CopyFormatRoutine. For example,

#define COPYTO_ROUTINE(...) (Node *) &(CopyToFormatRoutine) {__VA_ARGS__}

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = true,
.routine = COPYTO_ROUTINE (
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)
};

Datum
copy_testfmt_handler(PG_FUNCTION_ARGS)
{
PG_RETURN_POINTER(& testfmt_copyto_handler);
}

Interesting. But I feel that it introduces another (a bit)
tricky mechanism...

Right. On the other hand, I don't think the idea 3 is good for the
same reason Michael-san pointed out before[1]/messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz[2]/messages/by-id/ZXKm9tmnSPIVrqZz@paquier.xyz.

BTW, we also need to set .type:

.routine = COPYTO_ROUTINE (
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)

I think it's fine as the same is true for table AM.

[1]: /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[2]: /messages/by-id/ZXKm9tmnSPIVrqZz@paquier.xyz

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#55Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#54)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoC4HVuxOrsX1fLwj=5hdEmjvZoQw6PJGzxqxHNnYSQUVQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Jan 2024 16:53:48 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Interesting. But I feel that it introduces another (a bit)
tricky mechanism...

Right. On the other hand, I don't think the idea 3 is good for the
same reason Michael-san pointed out before[1][2].

[1] /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[2] /messages/by-id/ZXKm9tmnSPIVrqZz@paquier.xyz

I think that the important part of the Michael-san's opinion
is "keep COPY TO implementation and COPY FROM implementation
separated for maintainability".

The patch focused in [1][2] uses one routine for both of
COPY TO and COPY FROM. If we use the approach, we need to
change one common routine from copyto.c and copyfrom.c (or
export callbacks from copyto.c and copyfrom.c and use them
in copyto.c to construct one common routine). It's
the problem.

The idea 3 still has separated routines for COPY TO and COPY
FROM. So I think that it still keeps COPY TO implementation
and COPY FROM implementation separated.

BTW, we also need to set .type:

.routine = COPYTO_ROUTINE (
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)

I think it's fine as the same is true for table AM.

Ah, sorry. I should have said explicitly. I don't this that
it's not a problem. I just wanted to say that it's missing.

Defining one more static const struct instead of providing a
convenient (but a bit tricky) macro may be straightforward:

static const CopyToFormatRoutine testfmt_copyto_routine = {
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
};

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = false,
.routine = (Node *) &testfmt_copyto_routine
};

Thanks,
--
kou

#56Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#55)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Here is the current summary for a this discussion to make
COPY format extendable. It's for reaching consensus and
starting implementing the feature. (I'll start implementing
the feature once we reach consensus.) If you have any
opinion, please share it.

Confirmed:

1.1 Making COPY format extendable will not reduce performance.
[1]: /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com

Decisions:

2.1 Use separated handler for COPY TO and COPY FROM because
our COPY TO implementation (copyto.c) and COPY FROM
implementation (coypfrom.c) are separated.
[2]: /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz

2.2 Don't use system catalog for COPY TO/FROM handlers. We can
just use a function(internal) that returns a handler instead.
[3]: /messages/by-id/CAD21AoAhcZkAp_WDJ4sSv_+g2iCGjfyMFgeu7MxjnjX_FutZAg@mail.gmail.com

2.3 The implementation must include documentation.
[5]: /messages/by-id/TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com

2.4 The implementation must include test.
[6]: /messages/by-id/ZXbiPNriHHyUrcTF@paquier.xyz

2.5 The implementation should be consist of small patches
for easy to review.
[6]: /messages/by-id/ZXbiPNriHHyUrcTF@paquier.xyz

2.7 Copy{To,From}State must have a opaque space for
handlers.
[8]: /messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com

2.8 Export CopySendData() and CopySendEndOfRow() for COPY TO
handlers.
[8]: /messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com

2.9 Make "format" in PgMsg_CopyOutResponse message
extendable.
[9]: /messages/by-id/ZYTfqGppMc9e_w2k@paquier.xyz

2.10 Make makeNode() call avoidable in function(internal)
that returns COPY TO/FROM handler.
[9]: /messages/by-id/ZYTfqGppMc9e_w2k@paquier.xyz

2.11 Custom COPY TO/FROM handlers must be able to parse
their options.
[11]: /messages/by-id/20240110.152023.1920937326588672387.kou@clear-code.com

Discussing:

3.1 Should we use one function(internal) for COPY TO/FROM
handlers or two function(internal)s (one is for COPY TO
handler and another is for COPY FROM handler)?
[4]: /messages/by-id/CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com

3.2 If we use separated function(internal) for COPY TO/FROM
handlers, we need to define naming rule. For example,
<method_name>_to(internal) for COPY TO handler and
<method_name>_from(internal) for COPY FROM handler.
[4]: /messages/by-id/CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com

3.3 Should we use prefix or suffix for function(internal)
name to avoid name conflict with other handlers such as
tablesample handlers?
[7]: /messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com

3.4 Should we export Copy{To,From}State? Or should we just
provide getters/setters to access Copy{To,From}State
internal?
[10]: /messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com

[1]: /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com
[2]: /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[3]: /messages/by-id/CAD21AoAhcZkAp_WDJ4sSv_+g2iCGjfyMFgeu7MxjnjX_FutZAg@mail.gmail.com
[4]: /messages/by-id/CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com
[5]: /messages/by-id/TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com
[6]: /messages/by-id/ZXbiPNriHHyUrcTF@paquier.xyz
[7]: /messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com
[8]: /messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com
[9]: /messages/by-id/ZYTfqGppMc9e_w2k@paquier.xyz
[10]: /messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com
[11]: /messages/by-id/20240110.152023.1920937326588672387.kou@clear-code.com

Thanks,
--
kou

#57Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#51)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On Wed, Jan 10, 2024 at 2:20 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3+jG_NKOUmcxDyEX2xSggBXReZ4H=e3RFsUtedY88A03w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Dec 2023 10:58:05 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

1. Add an opaque space for custom COPY TO handler
* Add CopyToState{Get,Set}Opaque()
https://github.com/kou/postgres/commit/5a610b6a066243f971e029432db67152cfe5e944

2. Export CopyToState::attnumlist
* Add CopyToStateGetAttNumList()
https://github.com/kou/postgres/commit/15fcba8b4e95afa86edb3f677a7bdb1acb1e7688

3. Export CopySend*()
* Rename CopySend*() to CopyToStateSend*() and export them
* Exception: CopySendEndOfRow() to CopyToStateFlush() because
it just flushes the internal buffer now.
https://github.com/kou/postgres/commit/289a5640135bde6733a1b8e2c412221ad522901e

I guess the purpose of these helpers is to avoid expose CopyToState to
copy.h,

Yes.

but I
think expose CopyToState to user might make life easier, users might want to use
the memory contexts of the structure (though I agree not all the
fields are necessary
for extension handers).

OK. I don't object it as I said in another e-mail:
/messages/by-id/20240110.120644.1876591646729327180.kou@clear-code.com

2. Need an opaque space like IndexScanDesc::opaque does

* A custom COPY TO handler needs to keep its data

I once thought users might want to parse their own options, maybe this
is a use case for this opaque space.

Good catch! I forgot to suggest a callback for custom format
options. How about the following API?

----
...
typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);

...
typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);

typedef struct CopyToFormatRoutine
{
...
CopyToProcessOption_function process_option_fn;
} CopyToFormatRoutine;

typedef struct CopyFromFormatRoutine
{
...
CopyFromProcessOption_function process_option_fn;
} CopyFromFormatRoutine;
----

----
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index e7597894bf..1aa8b62551 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -416,6 +416,7 @@ void
ProcessCopyOptions(ParseState *pstate,
CopyFormatOptions *opts_out,
bool is_from,
+                                  void *cstate, /* CopyToState* for !is_from, CopyFromState* for is_from */
List *options)
{
bool            format_specified = false;
@@ -593,11 +594,19 @@ ProcessCopyOptions(ParseState *pstate,
parser_errposition(pstate, defel->location)));
}
else
-                       ereport(ERROR,
-                                       (errcode(ERRCODE_SYNTAX_ERROR),
-                                        errmsg("option \"%s\" not recognized",
-                                                       defel->defname),
-                                        parser_errposition(pstate, defel->location)));
+               {
+                       bool processed;
+                       if (is_from)
+                               processed = opts_out->from_ops->process_option_fn(cstate, defel);
+                       else
+                               processed = opts_out->to_ops->process_option_fn(cstate, defel);
+                       if (!processed)
+                               ereport(ERROR,
+                                               (errcode(ERRCODE_SYNTAX_ERROR),
+                                                errmsg("option \"%s\" not recognized",
+                                                               defel->defname),
+                                                parser_errposition(pstate, defel->location)));
+               }
}

/*
----

Looks good.

For the name, I thought private_data might be a better candidate than
opaque, but I do not insist.

I don't have a strong opinion for this. Here are the number
of headers that use "private_data" and "opaque":

$ grep -r private_data --files-with-matches src/include | wc -l
6
$ grep -r opaque --files-with-matches src/include | wc -l
38

It seems that we use "opaque" than "private_data" in general.

but it seems that we use
"opaque" than "private_data" in our code.

Do you use the arrow library to control the memory?

Yes.

Is there a way that
we can let the arrow use postgres' memory context?

Yes. Apache Arrow C++ provides a memory pool feature and we
can implement PostgreSQL's memory context based memory pool
for this. (But this is a custom COPY TO/FROM handler's
implementation details.)

I'm not sure this
is necessary, just raise the question for discussion.

Could you clarify what should we discuss? We should require
that COPY TO/FROM handlers should use PostgreSQL's memory
context for all internal memory allocations?

Yes, handlers should use PostgreSQL's memory context, and I think
creating other memory context under CopyToStateData.copycontext
should be suggested for handler creators, so I proposed exporting
CopyToStateData to public header.

+PG_FUNCTION_INFO_V1(copy_testfmt_handler);
+Datum
+copy_testfmt_handler(PG_FUNCTION_ARGS)
+{
+ bool is_from = PG_GETARG_BOOL(0);
+ CopyFormatRoutine *cp = makeNode(CopyFormatRoutine);;
+

extra semicolon.

I noticed it too :-)
But I ignored it because the current implementation is only
for discussion. We know that it may be dirty.

Thanks,
--
kou

--
Regards
Junwang Zhao

#58Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#57)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3J02NzGBxG1rP9C4u7qRLOqUjSOdy3q5_5v__fydS3XcA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 12 Jan 2024 14:40:41 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Could you clarify what should we discuss? We should require
that COPY TO/FROM handlers should use PostgreSQL's memory
context for all internal memory allocations?

Yes, handlers should use PostgreSQL's memory context, and I think
creating other memory context under CopyToStateData.copycontext
should be suggested for handler creators, so I proposed exporting
CopyToStateData to public header.

I see.

We can provide a getter for CopyToStateData::copycontext if
we don't want to export CopyToStateData. Note that I don't
have a strong opinion whether we should export
CopyToStateData or not.

Thanks,
--
kou

#59Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#56)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

If there are no more comments for the current design, I'll
start implementing this feature with the following
approaches for "Discussing" items:

3.1 Should we use one function(internal) for COPY TO/FROM
handlers or two function(internal)s (one is for COPY TO
handler and another is for COPY FROM handler)?
[4]

I'll choose "one function(internal) for COPY TO/FROM handlers".

3.4 Should we export Copy{To,From}State? Or should we just
provide getters/setters to access Copy{To,From}State
internal?
[10]

I'll export Copy{To,From}State.

Thanks,
--
kou

In <20240112.144615.157925223373344229.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 12 Jan 2024 14:46:15 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Show quoted text

Hi,

Here is the current summary for a this discussion to make
COPY format extendable. It's for reaching consensus and
starting implementing the feature. (I'll start implementing
the feature once we reach consensus.) If you have any
opinion, please share it.

Confirmed:

1.1 Making COPY format extendable will not reduce performance.
[1]

Decisions:

2.1 Use separated handler for COPY TO and COPY FROM because
our COPY TO implementation (copyto.c) and COPY FROM
implementation (coypfrom.c) are separated.
[2]

2.2 Don't use system catalog for COPY TO/FROM handlers. We can
just use a function(internal) that returns a handler instead.
[3]

2.3 The implementation must include documentation.
[5]

2.4 The implementation must include test.
[6]

2.5 The implementation should be consist of small patches
for easy to review.
[6]

2.7 Copy{To,From}State must have a opaque space for
handlers.
[8]

2.8 Export CopySendData() and CopySendEndOfRow() for COPY TO
handlers.
[8]

2.9 Make "format" in PgMsg_CopyOutResponse message
extendable.
[9]

2.10 Make makeNode() call avoidable in function(internal)
that returns COPY TO/FROM handler.
[9]

2.11 Custom COPY TO/FROM handlers must be able to parse
their options.
[11]

Discussing:

3.1 Should we use one function(internal) for COPY TO/FROM
handlers or two function(internal)s (one is for COPY TO
handler and another is for COPY FROM handler)?
[4]

3.2 If we use separated function(internal) for COPY TO/FROM
handlers, we need to define naming rule. For example,
<method_name>_to(internal) for COPY TO handler and
<method_name>_from(internal) for COPY FROM handler.
[4]

3.3 Should we use prefix or suffix for function(internal)
name to avoid name conflict with other handlers such as
tablesample handlers?
[7]

3.4 Should we export Copy{To,From}State? Or should we just
provide getters/setters to access Copy{To,From}State
internal?
[10]

[1] /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com
[2] /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[3] /messages/by-id/CAD21AoAhcZkAp_WDJ4sSv_+g2iCGjfyMFgeu7MxjnjX_FutZAg@mail.gmail.com
[4] /messages/by-id/CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com
[5] /messages/by-id/TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com
[6] /messages/by-id/ZXbiPNriHHyUrcTF@paquier.xyz
[7] /messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com
[8] /messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com
[9] /messages/by-id/ZYTfqGppMc9e_w2k@paquier.xyz
[10] /messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com
[11] /messages/by-id/20240110.152023.1920937326588672387.kou@clear-code.com

Thanks,
--
kou

#60Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#55)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 11, 2024 at 10:24 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC4HVuxOrsX1fLwj=5hdEmjvZoQw6PJGzxqxHNnYSQUVQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Jan 2024 16:53:48 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Interesting. But I feel that it introduces another (a bit)
tricky mechanism...

Right. On the other hand, I don't think the idea 3 is good for the
same reason Michael-san pointed out before[1][2].

[1] /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[2] /messages/by-id/ZXKm9tmnSPIVrqZz@paquier.xyz

I think that the important part of the Michael-san's opinion
is "keep COPY TO implementation and COPY FROM implementation
separated for maintainability".

The patch focused in [1][2] uses one routine for both of
COPY TO and COPY FROM. If we use the approach, we need to
change one common routine from copyto.c and copyfrom.c (or
export callbacks from copyto.c and copyfrom.c and use them
in copyto.c to construct one common routine). It's
the problem.

The idea 3 still has separated routines for COPY TO and COPY
FROM. So I think that it still keeps COPY TO implementation
and COPY FROM implementation separated.

BTW, we also need to set .type:

.routine = COPYTO_ROUTINE (
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
)

I think it's fine as the same is true for table AM.

Ah, sorry. I should have said explicitly. I don't this that
it's not a problem. I just wanted to say that it's missing.

Thank you for pointing it out.

Defining one more static const struct instead of providing a
convenient (but a bit tricky) macro may be straightforward:

static const CopyToFormatRoutine testfmt_copyto_routine = {
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
};

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = false,
.routine = (Node *) &testfmt_copyto_routine
};

Yeah, IIUC this is the option 2 you mentioned[1]/messages/by-id/20240110.120034.501385498034538233.kou@clear-code.com. I think we can go
with this idea as it's the simplest. If we find a better way, we can
change it later. That is CopyFormatRoutine will be like:

typedef struct CopyFormatRoutine
{
NodeTag type;

/* either CopyToFormatRoutine or CopyFromFormatRoutine */
Node *routine;
} CopyFormatRoutine;

And the core can check the node type of the 'routine7 in the
CopyFormatRoutine returned by extensions.

Regards,

[1]: /messages/by-id/20240110.120034.501385498034538233.kou@clear-code.com

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#61Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#60)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoB5x86TTyer90iSFivnSD8MFRU8V4ALzmQ=rQFw4QqiXQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 15 Jan 2024 16:03:41 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Defining one more static const struct instead of providing a
convenient (but a bit tricky) macro may be straightforward:

static const CopyToFormatRoutine testfmt_copyto_routine = {
.type = T_CopyToFormatRoutine,
.start_fn = testfmt_copyto_start,
.onerow_fn = testfmt_copyto_onerow,
.end_fn = testfmt_copyto_end
};

static const CopyFormatRoutine testfmt_copyto_handler = {
.type = T_CopyFormatRoutine,
.is_from = false,
.routine = (Node *) &testfmt_copyto_routine
};

Yeah, IIUC this is the option 2 you mentioned[1]. I think we can go
with this idea as it's the simplest.

[1] /messages/by-id/20240110.120034.501385498034538233.kou@clear-code.com

Ah, you're right. I forgot it...

That is CopyFormatRoutine will be like:

typedef struct CopyFormatRoutine
{
NodeTag type;

/* either CopyToFormatRoutine or CopyFromFormatRoutine */
Node *routine;
} CopyFormatRoutine;

And the core can check the node type of the 'routine7 in the
CopyFormatRoutine returned by extensions.

It makes sense.

If no more comments about the current design, I'll start
implementing this feature based on the current design.

Thanks,
--
kou

#62Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#59)
8 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

I've implemented custom COPY format feature based on the
current design discussion. See the attached patches for
details.

I also implemented a PoC COPY format handler for Apache
Arrow with this implementation and it worked.
https://github.com/kou/pg-copy-arrow

The patches implement not only custom COPY TO format feature
but also custom COPY FROM format feature.

0001-0004 is for COPY TO and 0005-0008 is for COPY FROM.

For COPY TO:

0001: This adds CopyToRoutine and use it for text/csv/binary
formats. No implementation change. This just move codes.

0002: This adds support for adding custom COPY TO format by
"CREATE FUNCTION ${FORMAT_NAME}". This uses the same
approach provided by Sawada-san[1]/messages/by-id/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com but this doesn't
introduce a wrapper CopyRoutine struct for
Copy{To,From}Routine. Because I noticed that a wrapper
CopyRoutine struct is needless. Copy handler can just return
CopyToRoutine or CopyFromRtouine because both of them have
NodeTag. We can distinct a returned struct by the NodeTag.

[1]: /messages/by-id/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA@mail.gmail.com

0003: This exports CopyToStateData. No implementation change
except CopyDest enum values. I changed COPY_ prefix to
COPY_DEST_ to avoid name conflict with CopySource enum
values. This just moves codes.

0004: This adds CopyToState::opaque and exports
CopySendEndOfRow(). CopySendEndOfRow() is renamed to
CopyToStateFlush().

For COPY FROM:

0005: Same as 0001 but for COPY FROM. This adds
CopyFromRoutine and use it for text/csv/binary formats. No
implementation change. This just move codes.

0006: Same as 0002 but for COPY FROM. This adds support for
adding custom COPY FROM format by "CREATE FUNCTION
${FORMAT_NAME}".

0007: Same as 0003 but for COPY FROM. This exports
CopyFromStateData. No implementation change except
CopySource enum values. I changed COPY_ prefix to
COPY_SOURCE_ to align CopyDest changes in 0003. This just
moves codes.

0008: Same as 0004 but for COPY FROM. This adds
CopyFromState::opaque and exports
CopyReadBinaryData(). CopyReadBinaryData() is renamed to
CopyFromStateRead().

Thanks,
--
kou

In <20240115.152702.2011620917962812379.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 15 Jan 2024 15:27:02 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Show quoted text

Hi,

If there are no more comments for the current design, I'll
start implementing this feature with the following
approaches for "Discussing" items:

3.1 Should we use one function(internal) for COPY TO/FROM
handlers or two function(internal)s (one is for COPY TO
handler and another is for COPY FROM handler)?
[4]

I'll choose "one function(internal) for COPY TO/FROM handlers".

3.4 Should we export Copy{To,From}State? Or should we just
provide getters/setters to access Copy{To,From}State
internal?
[10]

I'll export Copy{To,From}State.

Thanks,
--
kou

In <20240112.144615.157925223373344229.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 12 Jan 2024 14:46:15 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

Here is the current summary for a this discussion to make
COPY format extendable. It's for reaching consensus and
starting implementing the feature. (I'll start implementing
the feature once we reach consensus.) If you have any
opinion, please share it.

Confirmed:

1.1 Making COPY format extendable will not reduce performance.
[1]

Decisions:

2.1 Use separated handler for COPY TO and COPY FROM because
our COPY TO implementation (copyto.c) and COPY FROM
implementation (coypfrom.c) are separated.
[2]

2.2 Don't use system catalog for COPY TO/FROM handlers. We can
just use a function(internal) that returns a handler instead.
[3]

2.3 The implementation must include documentation.
[5]

2.4 The implementation must include test.
[6]

2.5 The implementation should be consist of small patches
for easy to review.
[6]

2.7 Copy{To,From}State must have a opaque space for
handlers.
[8]

2.8 Export CopySendData() and CopySendEndOfRow() for COPY TO
handlers.
[8]

2.9 Make "format" in PgMsg_CopyOutResponse message
extendable.
[9]

2.10 Make makeNode() call avoidable in function(internal)
that returns COPY TO/FROM handler.
[9]

2.11 Custom COPY TO/FROM handlers must be able to parse
their options.
[11]

Discussing:

3.1 Should we use one function(internal) for COPY TO/FROM
handlers or two function(internal)s (one is for COPY TO
handler and another is for COPY FROM handler)?
[4]

3.2 If we use separated function(internal) for COPY TO/FROM
handlers, we need to define naming rule. For example,
<method_name>_to(internal) for COPY TO handler and
<method_name>_from(internal) for COPY FROM handler.
[4]

3.3 Should we use prefix or suffix for function(internal)
name to avoid name conflict with other handlers such as
tablesample handlers?
[7]

3.4 Should we export Copy{To,From}State? Or should we just
provide getters/setters to access Copy{To,From}State
internal?
[10]

[1] /messages/by-id/20231204.153548.2126325458835528809.kou@clear-code.com
[2] /messages/by-id/ZXEUIy6wl4jHy6Nm@paquier.xyz
[3] /messages/by-id/CAD21AoAhcZkAp_WDJ4sSv_+g2iCGjfyMFgeu7MxjnjX_FutZAg@mail.gmail.com
[4] /messages/by-id/CAD21AoDkoGL6yJ_HjNOg9cU=aAdW8uQ3rSQOeRS0SX85LPPNwQ@mail.gmail.com
[5] /messages/by-id/TY3PR01MB9889C9234CD220A3A7075F0DF589A@TY3PR01MB9889.jpnprd01.prod.outlook.com
[6] /messages/by-id/ZXbiPNriHHyUrcTF@paquier.xyz
[7] /messages/by-id/20231214.184414.2179134502876898942.kou@clear-code.com
[8] /messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com
[9] /messages/by-id/ZYTfqGppMc9e_w2k@paquier.xyz
[10] /messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com
[11] /messages/by-id/20240110.152023.1920937326588672387.kou@clear-code.com

Thanks,
--
kou

Attachments:

v6-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 3444b523aa356417f4cb3ec0c78894de65684889 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Dec 2023 12:32:54 +0900
Subject: [PATCH v6 1/8] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToRoutine can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,11.002
    csv,11.696
    binary,11.352

100K with this change:

    format,elapsed time (ms)
    text,100000,11.562
    csv,100000,11.889
    binary,100000,10.825

1M without this change:

    format,elapsed time (ms)
    text,108.359
    csv,114.233
    binary,111.251

1M with this change:

    format,elapsed time (ms)
    text,111.269
    csv,116.277
    binary,104.765

10M without this change:

    format,elapsed time (ms)
    text,1090.763
    csv,1136.103
    binary,1137.141

10M with this change:

    format,elapsed time (ms)
    text,1082.654
    csv,1196.991
    binary,1069.697
---
 contrib/file_fdw/file_fdw.c     |   2 +-
 src/backend/commands/copy.c     |  43 +++-
 src/backend/commands/copyfrom.c |   2 +-
 src/backend/commands/copyto.c   | 428 ++++++++++++++++++++------------
 src/include/commands/copy.h     |   7 +-
 src/include/commands/copyapi.h  |  59 +++++
 6 files changed, 376 insertions(+), 165 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 249d82d3a0..9e4e819858 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -329,7 +329,7 @@ file_fdw_validator(PG_FUNCTION_ARGS)
 	/*
 	 * Now apply the core COPY code's validation logic for more checks.
 	 */
-	ProcessCopyOptions(NULL, NULL, true, other_options);
+	ProcessCopyOptions(NULL, NULL, true, NULL, other_options);
 
 	/*
 	 * Either filename or program option is required for file_fdw foreign
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cc0786c6f4..5f3697a5f9 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -442,6 +442,9 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
  * a list of options.  In that usage, 'opts_out' can be passed as NULL and
  * the collected data is just leaked until CurrentMemoryContext is reset.
  *
+ * 'cstate' is CopyToState* for !is_from, CopyFromState* for is_from. 'cstate'
+ * may be NULL. For example, file_fdw uses NULL.
+ *
  * Note that additional checking, such as whether column names listed in FORCE
  * QUOTE actually exist, has to be applied later.  This just checks for
  * self-consistency of the options list.
@@ -450,6 +453,7 @@ void
 ProcessCopyOptions(ParseState *pstate,
 				   CopyFormatOptions *opts_out,
 				   bool is_from,
+				   void *cstate,
 				   List *options)
 {
 	bool		format_specified = false;
@@ -464,7 +468,13 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
-	/* Extract options from the statement node tree */
+	/* Text is the default format. */
+	opts_out->to_routine = &CopyToRoutineText;
+
+	/*
+	 * Extract only the "format" option to detect target routine as the first
+	 * step
+	 */
 	foreach(option, options)
 	{
 		DefElem    *defel = lfirst_node(DefElem, option);
@@ -479,15 +489,29 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_routine = &CopyToRoutineCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_routine = &CopyToRoutineBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
 						 parser_errposition(pstate, defel->location)));
 		}
+	}
+	/* Extract options except "format" from the statement node tree */
+	foreach(option, options)
+	{
+		DefElem    *defel = lfirst_node(DefElem, option);
+
+		if (strcmp(defel->defname, "format") == 0)
+			continue;
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
 			if (freeze_specified)
@@ -616,11 +640,18 @@ ProcessCopyOptions(ParseState *pstate,
 			opts_out->on_error = defGetCopyOnErrorChoice(defel, pstate, is_from);
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+		{
+			bool		processed = false;
+
+			if (!is_from)
+				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
+			if (!processed)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("option \"%s\" not recognized",
+								defel->defname),
+						 parser_errposition(pstate, defel->location)));
+		}
 	}
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 173a736ad5..05b3d13236 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1411,7 +1411,7 @@ BeginCopyFrom(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , cstate, options);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..6547b7c654 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,275 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
+static bool
+CopyToTextProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToTextGetFormat(CopyToState cstate)
+{
+	return 0;
+}
+
+static void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/* All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later. */
+static bool
+CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToBinaryGetFormat(CopyToState cstate)
+{
+	return 1;
+}
+
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+CopyToRoutine CopyToRoutineText = {
+	.CopyToProcessOption = CopyToTextProcessOption,
+	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+/*
+ * We can use the same CopyToRoutine for both of "text" and "csv" because
+ * CopyToText*() refer cstate->opts.csv_mode and change their behavior. We can
+ * split the implementations and stop referring cstate->opts.csv_mode later.
+ */
+CopyToRoutine CopyToRoutineCSV = {
+	.CopyToProcessOption = CopyToTextProcessOption,
+	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+CopyToRoutine CopyToRoutineBinary = {
+	.CopyToProcessOption = CopyToBinaryProcessOption,
+	.CopyToGetFormat = CopyToBinaryGetFormat,
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -141,7 +410,7 @@ SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.to_routine->CopyToGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
@@ -198,16 +467,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +501,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -431,7 +686,7 @@ BeginCopyTo(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , cstate, options);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -748,8 +1003,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1012,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1027,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1066,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1082,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..34bea880ca 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "commands/copyapi.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
@@ -87,7 +88,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
 
-extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..eb68f2fb7b
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/parsenodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
+typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called for processing one COPY TO option. This will return false when
+	 * the given option is invalid.
+	 */
+	CopyToProcessOption_function CopyToProcessOption;
+
+	/*
+	 * Called when COPY TO is started. This will return a format as int16
+	 * value. It's used for the CopyOutResponse message.
+	 */
+	CopyToGetFormat_function CopyToGetFormat;
+
+	/* Called when COPY TO is started. This will send a header. */
+	CopyToStart_function CopyToStart;
+
+	/* Copy one row for COPY TO. */
+	CopyToOneRow_function CopyToOneRow;
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	CopyToEnd_function CopyToEnd;
+}			CopyToRoutine;
+
+/* Built-in CopyToRoutine for "text", "csv" and "binary". */
+extern CopyToRoutine CopyToRoutineText;
+extern CopyToRoutine CopyToRoutineCSV;
+extern CopyToRoutine CopyToRoutineBinary;
+
+#endif							/* COPYAPI_H */
-- 
2.43.0

v6-0002-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From bd5848739465618fd31839b8ed34ad1cb95f6359 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 13:58:38 +0900
Subject: [PATCH v6 2/8] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

We will add support for custom COPY FROM format later. We'll use the
same handler for COPY TO and COPY FROM. PostgreSQL calls a COPY
TO/FROM handler with "is_from" argument. It's true for COPY FROM and
false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine (not exist yet)

We discussed that we introduce a wrapper struct for it:

    typedef struct CopyRoutine
    {
        NodeTag type;
        /* either CopyToRoutine or CopyFromRoutine */
        Node *routine;
    }

    copy_handler(true) returns CopyRoutine with CopyToRoutine
    copy_handler(false) returns CopyRoutine with CopyFromRoutine

See also: https://www.postgresql.org/message-id/flat/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA%40mail.gmail.com

But I noticed that we don't need the wrapper struct. We can just
CopyToRoutine or CopyFromRoutine. Because we can distinct the returned
struct by checking its NodeTag. So I don't use the wrapper struct
approach.
---
 src/backend/commands/copy.c                   | 84 ++++++++++++++-----
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 +++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  8 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 77 +++++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 18 files changed, 260 insertions(+), 19 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 5f3697a5f9..6f0db0ae7c 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "rewrite/rewriteHandler.h"
 #include "utils/acl.h"
@@ -430,6 +431,69 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
 	return COPY_ON_ERROR_STOP;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine. If no
+ * COPY format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionCustomFormat(ParseState *pstate,
+							  CopyFormatOptions *opts_out,
+							  bool is_from,
+							  DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	void	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->to_routine = &CopyToRoutineCSV;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->to_routine = &CopyToRoutineBinary;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s(%u) did not return a CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->to_routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -481,28 +545,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-			{
-				opts_out->csv_mode = true;
-				opts_out->to_routine = &CopyToRoutineCSV;
-			}
-			else if (strcmp(fmt, "binary") == 0)
-			{
-				opts_out->binary = true;
-				opts_out->to_routine = &CopyToRoutineBinary;
-			}
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionCustomFormat(pstate, opts_out, is_from, defel);
 		}
 	}
 	/* Extract options except "format" from the statement node tree */
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e..173ee11811 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 2f0a59bc87..bd397f45ac
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index a3a991f634..d308780c43 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -373,6 +373,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index ad74e07dbb..4772bdc0e4 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7617,6 +7617,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index d29194da31..2040d5da83 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -632,6 +632,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   typname => 'table_am_handler',
   descr => 'pseudo-type for the result of a table AM handler function',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eb68f2fb7b..9c25e1c415 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -29,6 +29,8 @@ typedef void (*CopyToEnd_function) (CopyToState cstate);
 /* Routines for a COPY TO format implementation. */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called for processing one COPY TO option. This will return false when
 	 * the given option is invalid.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b65..103df1a787 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index e32c8925f6..9d57b868d5 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 397e0906e6..d76f2a6003 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -13,6 +13,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 0000000000..8497f91624
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 0000000000..3a24ae7b97
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test TO stdout WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToProcessOption: "option_before"="before"
+NOTICE:  CopyToProcessOption: "option_after"="after"
+NOTICE:  CopyToGetFormat
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 0000000000..4cefe7b709
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 0000000000..0eb7ed2e11
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,8 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test TO stdout WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 0000000000..d24ea03ce9
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 0000000000..a2219afcde
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,77 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copy.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static bool
+CopyToProcessOption(CopyToState cstate, DefElem *defel)
+{
+	ereport(NOTICE,
+			(errmsg("CopyToProcessOption: \"%s\"=\"%s\"",
+					defel->defname, defGetString(defel))));
+	return true;
+}
+
+static int16
+CopyToGetFormat(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToGetFormat")));
+	return 0;
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToProcessOption = CopyToProcessOption,
+	.CopyToGetFormat = CopyToGetFormat,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		elog(ERROR, "COPY FROM isn't supported yet");
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 0000000000..f05a636235
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.43.0

v6-0003-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From 6480ebddfabed628c79a7c25f42f87b44d76f74f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v6 3/8] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest enum values such as COPY_FILE are conflicted
CopySource enum values defined in copyfrom_internal.h. So COPY_DEST_
prefix instead of COPY_ prefix is used. For example, COPY_FILE is
renamed to COPY_DEST_FILE.

Note that this change isn't enough to implement a custom COPY TO
format handler as extension. We'll do the followings in a subsequent
commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  |  74 +++-----------------
 src/include/commands/copy.h    |  59 ----------------
 src/include/commands/copyapi.h | 120 ++++++++++++++++++++++++++++++++-
 3 files changed, 127 insertions(+), 126 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 6547b7c654..cfc74ee7b1 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -43,64 +43,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -160,7 +102,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -168,7 +110,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -419,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -466,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -500,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -877,12 +819,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 34bea880ca..b3f4682f95 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,69 +20,10 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
-} CopyFormatOptions;
-
 /* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 9c25e1c415..a869d78d72 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,10 +14,10 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/parsenodes.h"
 
-/* This is private in commands/copyto.c */
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
@@ -58,4 +58,122 @@ extern CopyToRoutine CopyToRoutineText;
 extern CopyToRoutine CopyToRoutineCSV;
 extern CopyToRoutine CopyToRoutineBinary;
 
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
+} CopyFormatOptions;
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
-- 
2.43.0

v6-0004-Add-support-for-implementing-custom-COPY-TO-forma.patchtext/x-patch; charset=us-asciiDownload
From 636e28b6478a8295469f832fb816a835e9cf24f6 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v6 4/8] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
* Rename CopySendEndOfRow() to CopyToStateFlush() because it's a
  method for CopyToState and it's used for flushing. End-of-row related
  codes were moved to CopyToTextSendEndOfRow().
---
 src/backend/commands/copyto.c  | 15 +++++++--------
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index cfc74ee7b1..b5d8678394 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -69,7 +69,6 @@ static void SendCopyEnd(CopyToState cstate);
 static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
-static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
@@ -117,7 +116,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 		default:
 			break;
 	}
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 static void
@@ -302,7 +301,7 @@ CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
 		}
 	}
 
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 static void
@@ -311,7 +310,7 @@ CopyToBinaryEnd(CopyToState cstate)
 	/* Generate trailer for a binary copy */
 	CopySendInt16(cstate, -1);
 	/* Need to flush out the trailer */
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 CopyToRoutine CopyToRoutineText = {
@@ -377,8 +376,8 @@ SendCopyEnd(CopyToState cstate)
  * CopySendData sends output data to the destination (file or frontend)
  * CopySendString does the same for null-terminated strings
  * CopySendChar does the same for single characters
- * CopySendEndOfRow does the appropriate thing at end of each data row
- *	(data is not actually flushed except by CopySendEndOfRow)
+ * CopyToStateFlush flushes the buffered data
+ *	(data is not actually flushed except by CopyToStateFlush)
  *
  * NB: no data conversion is applied by these functions
  *----------
@@ -401,8 +400,8 @@ CopySendChar(CopyToState cstate, char c)
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
 }
 
-static void
-CopySendEndOfRow(CopyToState cstate)
+void
+CopyToStateFlush(CopyToState cstate)
 {
 	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index a869d78d72..ffad433a21 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -174,6 +174,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.43.0

v6-0005-Extract-COPY-FROM-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 53b120ef11a10563fb9f12ad40042adf039bd18c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 17:21:23 +0900
Subject: [PATCH v6 5/8] Extract COPY FROM format implementations

This doesn't change the current behavior. This just introduces
CopyFromRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyFromRoutine can't be used from extensions yet because
CopyRead*() aren't exported yet. Extensions can't read data from a
source without CopyRead*(). They will be exported by subsequent
patches.
---
 src/backend/commands/copy.c              |   3 +
 src/backend/commands/copyfrom.c          | 216 ++++++++++----
 src/backend/commands/copyfromparse.c     | 346 ++++++++++++-----------
 src/include/commands/copy.h              |   3 -
 src/include/commands/copyapi.h           |  44 +++
 src/include/commands/copyfrom_internal.h |   4 +
 6 files changed, 401 insertions(+), 215 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 6f0db0ae7c..ec6dfff8ab 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -459,12 +459,14 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 	else if (strcmp(format, "csv") == 0)
 	{
 		opts_out->csv_mode = true;
+		opts_out->from_routine = &CopyFromRoutineCSV;
 		opts_out->to_routine = &CopyToRoutineCSV;
 		return;
 	}
 	else if (strcmp(format, "binary") == 0)
 	{
 		opts_out->binary = true;
+		opts_out->from_routine = &CopyFromRoutineBinary;
 		opts_out->to_routine = &CopyToRoutineBinary;
 		return;
 	}
@@ -533,6 +535,7 @@ ProcessCopyOptions(ParseState *pstate,
 	opts_out->file_encoding = -1;
 
 	/* Text is the default format. */
+	opts_out->from_routine = &CopyFromRoutineText;
 	opts_out->to_routine = &CopyToRoutineText;
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 05b3d13236..de85e4e9f1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,170 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
+static bool
+CopyFromTextProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromTextGetFormat(CopyFromState cstate)
+{
+	return 0;
+}
+
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/* All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later. */
+static bool
+CopyFromBinaryProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromBinaryGetFormat(CopyFromState cstate)
+{
+	return 1;
+}
+
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+}
+
+CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromProcessOption = CopyFromTextProcessOption,
+	.CopyFromGetFormat = CopyFromTextGetFormat,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+/*
+ * We can use the same CopyFromRoutine for both of "text" and "csv" because
+ * CopyFromText*() refer cstate->opts.csv_mode and change their behavior. We can
+ * split the implementations and stop referring cstate->opts.csv_mode later.
+ */
+CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromProcessOption = CopyFromTextProcessOption,
+	.CopyFromGetFormat = CopyFromTextGetFormat,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromProcessOption = CopyFromBinaryProcessOption,
+	.CopyFromGetFormat = CopyFromBinaryGetFormat,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1379,9 +1543,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1566,25 +1727,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1603,8 +1745,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1616,15 +1756,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1684,8 +1815,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1758,20 +1887,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->opts.from_routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1784,6 +1900,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->opts.from_routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..49632f75e4 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -172,7 +172,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.from_routine->CopyFromGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
@@ -840,6 +840,185 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -857,181 +1036,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->opts.from_routine->CopyFromOneRow(cstate, econtext, values,
+												   nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3f4682f95..df29d42555 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,9 +20,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ffad433a21..323e4705d2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -18,6 +18,49 @@
 #include "executor/tuptable.h"
 #include "nodes/parsenodes.h"
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);
+typedef int16 (*CopyFromGetFormat_function) (CopyFromState cstate);
+typedef void (*CopyFromStart_function) (CopyFromState cstate, TupleDesc tupDesc);
+typedef bool (*CopyFromOneRow_function) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+typedef void (*CopyFromEnd_function) (CopyFromState cstate);
+
+/* Routines for a COPY FROM format implementation. */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called for processing one COPY FROM option. This will return false when
+	 * the given option is invalid.
+	 */
+	CopyFromProcessOption_function CopyFromProcessOption;
+
+	/*
+	 * Called when COPY FROM is started. This will return a format as int16
+	 * value. It's used for the CopyInResponse message.
+	 */
+	CopyFromGetFormat_function CopyFromGetFormat;
+
+	/*
+	 * Called when COPY FROM is started. This will initialize something and
+	 * receive a header.
+	 */
+	CopyFromStart_function CopyFromStart;
+
+	/* Copy one row. It returns false if no more tuples. */
+	CopyFromOneRow_function CopyFromOneRow;
+
+	/* Called when COPY FROM is ended. This will finalize something. */
+	CopyFromEnd_function CopyFromEnd;
+}			CopyFromRoutine;
+
+/* Built-in CopyFromRoutine for "text", "csv" and "binary". */
+extern CopyFromRoutine CopyFromRoutineText;
+extern CopyFromRoutine CopyFromRoutineCSV;
+extern CopyFromRoutine CopyFromRoutineBinary;
+
+
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
@@ -113,6 +156,7 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyFromRoutine *from_routine;	/* callback routines for COPY FROM */
 	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..921c1513f7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,4 +183,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.43.0

v6-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 8e75d2c93f6ce9d67664d53233d0b71c9f10613a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 11:07:14 +0900
Subject: [PATCH v6 6/8] Add support for adding custom COPY FROM format

We use the same approach as we used for custom COPY TO format. Now,
custom COPY format handler can return COPY TO format routines or COPY
FROM format routines based on the "is_from" argument:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine
---
 src/backend/commands/copy.c                   | 53 +++++++++++++------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 12 +++++
 .../test_copy_format/sql/test_copy_format.sql |  6 +++
 .../test_copy_format/test_copy_format.c       | 50 +++++++++++++++--
 5 files changed, 105 insertions(+), 18 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index ec6dfff8ab..479f36868c 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -472,12 +472,9 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -486,14 +483,36 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function %s(%u) did not return a CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(pstate, defel->location)));
-
-	opts_out->to_routine = routine;
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+		opts_out->from_routine = routine;
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+		opts_out->to_routine = routine;
+	}
 }
 
 /*
@@ -692,7 +711,11 @@ ProcessCopyOptions(ParseState *pstate,
 		{
 			bool		processed = false;
 
-			if (!is_from)
+			if (is_from)
+				processed =
+					opts_out->from_routine->CopyFromProcessOption(
+																  cstate, defel);
+			else
 				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
 			if (!processed)
 				ereport(ERROR,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 323e4705d2..ef1bb201c2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -30,6 +30,8 @@ typedef void (*CopyFromEnd_function) (CopyFromState cstate);
 /* Routines for a COPY FROM format implementation. */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called for processing one COPY FROM option. This will return false when
 	 * the given option is invalid.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 3a24ae7b97..6af69f0eb7 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,18 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a INT, b INT, c INT);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromProcessOption: "option_before"="before"
+NOTICE:  CopyFromProcessOption: "option_after"="after"
+NOTICE:  CopyFromGetFormat
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (
 	option_before 'before',
 	format 'test_copy_format',
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0eb7ed2e11..94d3c789a0 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,12 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a INT, b INT, c INT);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+\.
 COPY public.test TO stdout WITH (
 	option_before 'before',
 	format 'test_copy_format',
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index a2219afcde..5e1b40e881 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,50 @@
 
 PG_MODULE_MAGIC;
 
+static bool
+CopyFromProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	ereport(NOTICE,
+			(errmsg("CopyFromProcessOption: \"%s\"=\"%s\"",
+					defel->defname, defGetString(defel))));
+	return true;
+}
+
+static int16
+CopyFromGetFormat(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromGetFormat")));
+	return 0;
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromProcessOption = CopyFromProcessOption,
+	.CopyFromGetFormat = CopyFromGetFormat,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static bool
 CopyToProcessOption(CopyToState cstate, DefElem *defel)
 {
@@ -71,7 +115,7 @@ test_copy_format(PG_FUNCTION_ARGS)
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
 	if (is_from)
-		elog(ERROR, "COPY FROM isn't supported yet");
-
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.43.0

v6-0007-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From dc3c21e725849d1d0c163677d08d527a8bf3bc37 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 14:16:29 +0900
Subject: [PATCH v6 7/8] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. CopySource enum values changes aren't required but I did
like I did for CopyDest enum values. I changed COPY_ prefix to
COPY_SOURCE_ prefix. For example, COPY_FILE to COPY_SOURCE_FILE.

Note that this change isn't enough to implement a custom COPY FROM
format handler as extension. We'll do the followings in a subsequent
commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           | 156 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 150 ----------------------
 5 files changed, 162 insertions(+), 160 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index de85e4e9f1..b5f1771ac2 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1705,7 +1705,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1824,7 +1824,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 49632f75e4..a78a790060 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -181,7 +181,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -249,7 +249,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -258,7 +258,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -341,7 +341,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1099,7 +1099,7 @@ CopyReadLine(CopyFromState cstate)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index df29d42555..cd41d32074 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,8 +20,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ef1bb201c2..b7e8f627bf 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,11 +14,12 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
+#include "nodes/miscnodes.h"
 #include "nodes/parsenodes.h"
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);
@@ -162,6 +163,159 @@ typedef struct CopyFormatOptions
 	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
+
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 921c1513f7..f8f6120255 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -18,28 +18,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
 /*
  * Represents the insert method to be used during COPY FROM.
  */
@@ -52,134 +30,6 @@ typedef enum CopyInsertMethod
 								 * ExecForeignBatchInsert only if valid */
 } CopyInsertMethod;
 
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.43.0

v6-0008-Add-support-for-implementing-custom-COPY-FROM-for.patchtext/x-patch; charset=us-asciiDownload
From f3cebe8b095f25c5c9bbeb5915c3a4233c45796c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 14:19:08 +0900
Subject: [PATCH v6 8/8] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data
* Rename CopyReadBinaryData() to CopyFromStateRead() because it's a
  method for CopyFromState and "BinaryData" is redundant.
---
 src/backend/commands/copyfromparse.c | 21 ++++++++++-----------
 src/include/commands/copyapi.h       |  5 +++++
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index a78a790060..f8a194635d 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -165,7 +165,6 @@ static int	CopyGetData(CopyFromState cstate, void *databuf,
 static inline bool CopyGetInt32(CopyFromState cstate, int32 *val);
 static inline bool CopyGetInt16(CopyFromState cstate, int16 *val);
 static void CopyLoadInputBuf(CopyFromState cstate);
-static int	CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes);
 
 void
 ReceiveCopyBegin(CopyFromState cstate)
@@ -194,7 +193,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	int32		tmp;
 
 	/* Signature */
-	if (CopyReadBinaryData(cstate, readSig, 11) != 11 ||
+	if (CopyFromStateRead(cstate, readSig, 11) != 11 ||
 		memcmp(readSig, BinarySignature, 11) != 0)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -222,7 +221,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	/* Skip extension header, if present */
 	while (tmp-- > 0)
 	{
-		if (CopyReadBinaryData(cstate, readSig, 1) != 1)
+		if (CopyFromStateRead(cstate, readSig, 1) != 1)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("invalid COPY file header (wrong length)")));
@@ -364,7 +363,7 @@ CopyGetInt32(CopyFromState cstate, int32 *val)
 {
 	uint32		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -381,7 +380,7 @@ CopyGetInt16(CopyFromState cstate, int16 *val)
 {
 	uint16		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -692,14 +691,14 @@ CopyLoadInputBuf(CopyFromState cstate)
 }
 
 /*
- * CopyReadBinaryData
+ * CopyFromStateRead
  *
  * Reads up to 'nbytes' bytes from cstate->copy_file via cstate->raw_buf
  * and writes them to 'dest'.  Returns the number of bytes read (which
  * would be less than 'nbytes' only if we reach EOF).
  */
-static int
-CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
 {
 	int			copied_bytes = 0;
 
@@ -988,7 +987,7 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 		 */
 		char		dummy;
 
-		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+		if (CopyFromStateRead(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("received copy data after EOF marker")));
@@ -1997,8 +1996,8 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	resetStringInfo(&cstate->attribute_buf);
 
 	enlargeStringInfo(&cstate->attribute_buf, fld_size);
-	if (CopyReadBinaryData(cstate, cstate->attribute_buf.data,
-						   fld_size) != fld_size)
+	if (CopyFromStateRead(cstate, cstate->attribute_buf.data,
+						  fld_size) != fld_size)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 				 errmsg("unexpected EOF in COPY data")));
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index b7e8f627bf..22accc83ab 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -314,8 +314,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
-- 
2.43.0

#63Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#62)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 24, 2024 at 02:49:36PM +0900, Sutou Kouhei wrote:

For COPY TO:

0001: This adds CopyToRoutine and use it for text/csv/binary
formats. No implementation change. This just move codes.

10M without this change:

format,elapsed time (ms)
text,1090.763
csv,1136.103
binary,1137.141

10M with this change:

format,elapsed time (ms)
text,1082.654
csv,1196.991
binary,1069.697

These numbers point out that binary is faster by 6%, csv is slower by
5%, while text stays around what looks like noise range. That's not
negligible. Are these numbers reproducible? If they are, that could
be a problem for anybody doing bulk-loading of large data sets. I am
not sure to understand where the improvement for binary comes from by
reading the patch, but perhaps perf would tell more for each format?
The loss with csv could be blamed on the extra manipulations of the
function pointers, likely.
--
Michael

#64Andrew Dunstan
andrew@dunslane.net
In reply to: Michael Paquier (#63)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 2024-01-24 We 03:11, Michael Paquier wrote:

On Wed, Jan 24, 2024 at 02:49:36PM +0900, Sutou Kouhei wrote:

For COPY TO:

0001: This adds CopyToRoutine and use it for text/csv/binary
formats. No implementation change. This just move codes.

10M without this change:

format,elapsed time (ms)
text,1090.763
csv,1136.103
binary,1137.141

10M with this change:

format,elapsed time (ms)
text,1082.654
csv,1196.991
binary,1069.697

These numbers point out that binary is faster by 6%, csv is slower by
5%, while text stays around what looks like noise range. That's not
negligible. Are these numbers reproducible? If they are, that could
be a problem for anybody doing bulk-loading of large data sets. I am
not sure to understand where the improvement for binary comes from by
reading the patch, but perhaps perf would tell more for each format?
The loss with csv could be blamed on the extra manipulations of the
function pointers, likely.

I don't think that's at all acceptable.

We've spent quite a lot of blood sweat and tears over the years to make
COPY fast, and we should not sacrifice any of that lightly.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#65Sutou Kouhei
kou@clear-code.com
In reply to: Andrew Dunstan (#64)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <10025bac-158c-ffe7-fbec-32b42629121f@dunslane.net>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 24 Jan 2024 07:15:55 -0500,
Andrew Dunstan <andrew@dunslane.net> wrote:

On 2024-01-24 We 03:11, Michael Paquier wrote:

On Wed, Jan 24, 2024 at 02:49:36PM +0900, Sutou Kouhei wrote:

For COPY TO:

0001: This adds CopyToRoutine and use it for text/csv/binary
formats. No implementation change. This just move codes.

10M without this change:

format,elapsed time (ms)
text,1090.763
csv,1136.103
binary,1137.141

10M with this change:

format,elapsed time (ms)
text,1082.654
csv,1196.991
binary,1069.697

These numbers point out that binary is faster by 6%, csv is slower by
5%, while text stays around what looks like noise range. That's not
negligible. Are these numbers reproducible? If they are, that could
be a problem for anybody doing bulk-loading of large data sets. I am
not sure to understand where the improvement for binary comes from by
reading the patch, but perhaps perf would tell more for each format?
The loss with csv could be blamed on the extra manipulations of the
function pointers, likely.

I don't think that's at all acceptable.

We've spent quite a lot of blood sweat and tears over the years to make COPY
fast, and we should not sacrifice any of that lightly.

These numbers aren't reproducible. Because these benchmarks
executed on my normal machine not a machine only for
benchmarking. The machine runs another processes such as
editor and Web browser.

For example, here are some results with master
(94edfe250c6a200d2067b0debfe00b4122e9b11e):

Format,N records,Elapsed time (ms)
csv,10000000,1073.715
csv,10000000,1022.830
csv,10000000,1073.584
csv,10000000,1090.651
csv,10000000,1052.259

Here are some results with master + the 0001 patch:

Format,N records,Elapsed time (ms)
csv,10000000,1025.356
csv,10000000,1067.202
csv,10000000,1014.563
csv,10000000,1032.088
csv,10000000,1058.110

I uploaded my benchmark script so that you can run the same
benchmark on your machine:

https://gist.github.com/kou/be02e02e5072c91969469dbf137b5de5

Could anyone try the benchmark with master and master+0001?

Thanks,
--
kou

#66Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#62)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20240124.144936.67229716500876806.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 24 Jan 2024 14:49:36 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've implemented custom COPY format feature based on the
current design discussion. See the attached patches for
details.

I forgot to mention one note. Documentation isn't included
in these patches. I'll write it after all (or some) patches
are merged. Is it OK?

Thanks,
--
kou

#67jian he
jian.universality@gmail.com
In reply to: Sutou Kouhei (#65)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 24, 2024 at 10:17 PM Sutou Kouhei <kou@clear-code.com> wrote:

I uploaded my benchmark script so that you can run the same
benchmark on your machine:

https://gist.github.com/kou/be02e02e5072c91969469dbf137b5de5

Could anyone try the benchmark with master and master+0001?

sorry. I made a mistake. I applied v6, 0001 to 0008 all the patches.

my tests:
CREATE unlogged TABLE data (a bigint);
SELECT setseed(0.29);
INSERT INTO data SELECT random() * 10000 FROM generate_series(1, 1e7);

my setup:
meson setup --reconfigure ${BUILD} \
-Dprefix=${PG_PREFIX} \
-Dpgport=5462 \
-Dbuildtype=release \
-Ddocs_html_style=website \
-Ddocs_pdf=disabled \
-Dllvm=disabled \
-Dextra_version=_release_build

gcc version: PostgreSQL 17devel_release_build on x86_64-linux,
compiled by gcc-11.4.0, 64-bit

apply your patch:
COPY data TO '/dev/null' WITH (FORMAT csv) \watch count=5
Time: 668.996 ms
Time: 596.254 ms
Time: 592.723 ms
Time: 591.663 ms
Time: 590.803 ms

not apply your patch, at git 729439607ad210dbb446e31754e8627d7e3f7dda
COPY data TO '/dev/null' WITH (FORMAT csv) \watch count=5
Time: 644.246 ms
Time: 583.075 ms
Time: 568.670 ms
Time: 569.463 ms
Time: 569.201 ms

I forgot to test other formats.

#68Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#65)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 24, 2024 at 11:17:26PM +0900, Sutou Kouhei wrote:

In <10025bac-158c-ffe7-fbec-32b42629121f@dunslane.net>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 24 Jan 2024 07:15:55 -0500,
Andrew Dunstan <andrew@dunslane.net> wrote:

We've spent quite a lot of blood sweat and tears over the years to make COPY
fast, and we should not sacrifice any of that lightly.

Clearly.

I uploaded my benchmark script so that you can run the same
benchmark on your machine:

https://gist.github.com/kou/be02e02e5072c91969469dbf137b5de5

Thanks, that saves time. I am attaching it to this email as well, for
the sake of the archives if this link is removed in the future.

Could anyone try the benchmark with master and master+0001?

Yep. It is one point we need to settle before deciding what to do
with this patch set, and I've done so to reach my own conclusion.

I have a rather good machine at my disposal in the cloud, so I did a
few runs with HEAD and HEAD+0001, with PGDATA mounted on a tmpfs.
Here are some results for the 10M row case, as these should be the
least prone to noise, 5 runs each:

master
text 10M 1732.570 1684.542 1693.430 1687.696 1714.845
csv 10M 1729.113 1724.926 1727.414 1726.237 1728.865
bin 10M 1679.097 1677.887 1676.764 1677.554 1678.120

master+0001
text 10M 1702.207 1654.818 1647.069 1690.568 1654.446
csv 10M 1764.939 1714.313 1712.444 1712.323 1716.952
bin 10M 1703.061 1702.719 1702.234 1703.346 1704.137

Hmm. The point of contention in the patch is the change to use the
CopyToOneRow callback in CopyOneRowTo(), as we go through it for each
row and we should habe a worst-case scenario with a relation that has
a small attribute size. The more rows, the more effect it would have.
The memory context switches and the StringInfo manipulations are
equally important, and there are a bunch of the latter, actually, with
optimizations around fe_msgbuf.

I've repeated a few runs across these two builds, and there is some
variance and noise, but I am going to agree with your point that the
effect 0001 cannot be seen. Even HEAD is showing some noise. So I am
discarding the concerns I had after seeing the numbers you posted
upthread.

+typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
+typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);

We don't really need a set of typedefs here, let's put the definitions
in the CopyToRoutine struct instead.

+extern CopyToRoutine CopyToRoutineText;
+extern CopyToRoutine CopyToRoutineCSV;
+extern CopyToRoutine CopyToRoutineBinary;

All that should IMO remain in copyto.c and copyfrom.c in the initial
patch doing the refactoring. Why not using a fetch function instead
that uses a string in input? Then you can call that once after
parsing the List of options in ProcessCopyOptions().

Introducing copyapi.h in the initial patch makes sense here for the TO
and FROM routines.

+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
Some areas, like this comment, are written in an incorrect format.
+            if (cstate->opts.csv_mode)
+                CopyAttributeOutCSV(cstate, colname, false,
+                                    list_length(cstate->attnumlist) == 1);
+            else
+                CopyAttributeOutText(cstate, colname);

You are right that this is not worth the trouble of creating a
different set of callbacks for CSV. This makes the result cleaner.

+    getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+    fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);

Actually, this split is interesting. It is possible for a custom
format to plug in a custom set of out functions. Did you make use of
something custom for your own stuff? Actually, could it make sense to
split the assignment of cstate->out_functions into its own callback?
Sure, that's part of the start phase, but at least it would make clear
that a custom method *has* to assign these OIDs to work. The patch
implies that as a rule, without a comment that CopyToStart *must* set
up these OIDs.

I think that 0001 and 0005 should be handled first, as pieces
independent of the rest. Then we could move on with 0002~0004 and
0006~0008.
--
Michael

Attachments:

bench-run.txttext/plain; charset=us-asciiDownload
#69Michael Paquier
michael@paquier.xyz
In reply to: jian he (#67)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 25, 2024 at 10:53:58AM +0800, jian he wrote:

apply your patch:
COPY data TO '/dev/null' WITH (FORMAT csv) \watch count=5
Time: 668.996 ms
Time: 596.254 ms
Time: 592.723 ms
Time: 591.663 ms
Time: 590.803 ms

not apply your patch, at git 729439607ad210dbb446e31754e8627d7e3f7dda
COPY data TO '/dev/null' WITH (FORMAT csv) \watch count=5
Time: 644.246 ms
Time: 583.075 ms
Time: 568.670 ms
Time: 569.463 ms
Time: 569.201 ms

I forgot to test other formats.

There can be some variance in the tests, so you'd better run much more
tests so as you can get a better idea of the mean. Discarding the N
highest and lowest values also reduces slightly the effects of the
noise you would get across single runs.
--
Michael

#70Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#65)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 24, 2024 at 11:17 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <10025bac-158c-ffe7-fbec-32b42629121f@dunslane.net>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 24 Jan 2024 07:15:55 -0500,
Andrew Dunstan <andrew@dunslane.net> wrote:

On 2024-01-24 We 03:11, Michael Paquier wrote:

On Wed, Jan 24, 2024 at 02:49:36PM +0900, Sutou Kouhei wrote:

For COPY TO:

0001: This adds CopyToRoutine and use it for text/csv/binary
formats. No implementation change. This just move codes.

10M without this change:

format,elapsed time (ms)
text,1090.763
csv,1136.103
binary,1137.141

10M with this change:

format,elapsed time (ms)
text,1082.654
csv,1196.991
binary,1069.697

These numbers point out that binary is faster by 6%, csv is slower by
5%, while text stays around what looks like noise range. That's not
negligible. Are these numbers reproducible? If they are, that could
be a problem for anybody doing bulk-loading of large data sets. I am
not sure to understand where the improvement for binary comes from by
reading the patch, but perhaps perf would tell more for each format?
The loss with csv could be blamed on the extra manipulations of the
function pointers, likely.

I don't think that's at all acceptable.

We've spent quite a lot of blood sweat and tears over the years to make COPY
fast, and we should not sacrifice any of that lightly.

These numbers aren't reproducible. Because these benchmarks
executed on my normal machine not a machine only for
benchmarking. The machine runs another processes such as
editor and Web browser.

For example, here are some results with master
(94edfe250c6a200d2067b0debfe00b4122e9b11e):

Format,N records,Elapsed time (ms)
csv,10000000,1073.715
csv,10000000,1022.830
csv,10000000,1073.584
csv,10000000,1090.651
csv,10000000,1052.259

Here are some results with master + the 0001 patch:

Format,N records,Elapsed time (ms)
csv,10000000,1025.356
csv,10000000,1067.202
csv,10000000,1014.563
csv,10000000,1032.088
csv,10000000,1058.110

I uploaded my benchmark script so that you can run the same
benchmark on your machine:

https://gist.github.com/kou/be02e02e5072c91969469dbf137b5de5

Could anyone try the benchmark with master and master+0001?

I've run a similar scenario:

create unlogged table test (a int);
insert into test select c from generate_series(1, 25000000) c;
copy test to '/tmp/result.csv' with (format csv); -- generates 230MB file

I've run it on HEAD and HEAD+0001 patch and here are the medians of 10
executions for each format:

HEAD:
binary 2930.353 ms
text 2754.852 ms
csv 2890.012 ms

HEAD w/ 0001 patch:
binary 2814.838 ms
text 2900.845 ms
csv 3015.210 ms

Hmm I can see a similar trend that Suto-san had; the binary format got
slightly faster whereas both text and csv format has small regression
(4%~5%). I think that the improvement for binary came from the fact
that we removed "if (cstate->opts.binary)" branches from the original
CopyOneRowTo(). I've experimented with a similar optimization for csv
and text format; have different callbacks for text and csv format and
remove "if (cstate->opts.csv_mode)" branches. I've attached a patch
for that. Here are results:

HEAD w/ 0001 patch + remove branches:
binary 2824.502 ms
text 2715.264 ms
csv 2803.381 ms

The numbers look better now. I'm not sure these are within a noise
range but it might be worth considering having different callbacks for
text and csv formats.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

add_callback_for_csv_format.patchapplication/octet-stream; name=add_callback_for_csv_format.patchDownload
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 6547b7c654..f18b7d0823 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -223,11 +223,7 @@ CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
 
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
-			if (cstate->opts.csv_mode)
-				CopyAttributeOutCSV(cstate, colname, false,
-									list_length(cstate->attnumlist) == 1);
-			else
-				CopyAttributeOutText(cstate, colname);
+			CopyAttributeOutText(cstate, colname);
 		}
 
 		CopyToTextSendEndOfRow(cstate);
@@ -260,12 +256,7 @@ CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
 			char	   *string;
 
 			string = OutputFunctionCall(&out_functions[attnum - 1], value);
-			if (cstate->opts.csv_mode)
-				CopyAttributeOutCSV(cstate, string,
-									cstate->opts.force_quote_flags[attnum - 1],
-									list_length(cstate->attnumlist) == 1);
-			else
-				CopyAttributeOutText(cstate, string);
+			CopyAttributeOutText(cstate, string);
 		}
 	}
 
@@ -277,6 +268,99 @@ CopyToTextEnd(CopyToState cstate)
 {
 }
 
+static void
+CopyToCSVStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			CopyAttributeOutCSV(cstate, string,
+								cstate->opts.force_quote_flags[attnum - 1],
+								list_length(cstate->attnumlist) == 1);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToCSVEnd(CopyToState cstate)
+{
+}
+
 /*
  * CopyToRoutine implementation for "binary".
  */
@@ -388,9 +472,9 @@ CopyToRoutine CopyToRoutineText = {
 CopyToRoutine CopyToRoutineCSV = {
 	.CopyToProcessOption = CopyToTextProcessOption,
 	.CopyToGetFormat = CopyToTextGetFormat,
-	.CopyToStart = CopyToTextStart,
-	.CopyToOneRow = CopyToTextOneRow,
-	.CopyToEnd = CopyToTextEnd,
+	.CopyToStart = CopyToCSVStart,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToCSVEnd,
 };
 
 CopyToRoutine CopyToRoutineBinary = {
#71Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#70)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 25, 2024 at 01:36:03PM +0900, Masahiko Sawada wrote:

Hmm I can see a similar trend that Suto-san had; the binary format got
slightly faster whereas both text and csv format has small regression
(4%~5%). I think that the improvement for binary came from the fact
that we removed "if (cstate->opts.binary)" branches from the original
CopyOneRowTo(). I've experimented with a similar optimization for csv
and text format; have different callbacks for text and csv format and
remove "if (cstate->opts.csv_mode)" branches. I've attached a patch
for that. Here are results:

HEAD w/ 0001 patch + remove branches:
binary 2824.502 ms
text 2715.264 ms
csv 2803.381 ms

The numbers look better now. I'm not sure these are within a noise
range but it might be worth considering having different callbacks for
text and csv formats.

Interesting.

Your numbers imply a 0.3% speedup for text, 0.7% speedup for csv and
0.9% speedup for binary, which may be around the noise range assuming
a ~1% range. While this does not imply a regression, that seems worth
the duplication IMO. The patch had better document the reason why the
split is done, as well.

CopyFromTextOneRow() has also specific branches for binary and
non-binary removed in 0005, so assuming that I/O is not a bottleneck,
the operation would be faster because we would not evaluate this "if"
condition for each row. Wouldn't we also see improvements for COPY
FROM with short row values, say when mounting PGDATA into a
tmpfs/ramfs?
--
Michael

#72Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#71)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 25, 2024 at 1:53 PM Michael Paquier <michael@paquier.xyz> wrote:

On Thu, Jan 25, 2024 at 01:36:03PM +0900, Masahiko Sawada wrote:

Hmm I can see a similar trend that Suto-san had; the binary format got
slightly faster whereas both text and csv format has small regression
(4%~5%). I think that the improvement for binary came from the fact
that we removed "if (cstate->opts.binary)" branches from the original
CopyOneRowTo(). I've experimented with a similar optimization for csv
and text format; have different callbacks for text and csv format and
remove "if (cstate->opts.csv_mode)" branches. I've attached a patch
for that. Here are results:

HEAD w/ 0001 patch + remove branches:
binary 2824.502 ms
text 2715.264 ms
csv 2803.381 ms

The numbers look better now. I'm not sure these are within a noise
range but it might be worth considering having different callbacks for
text and csv formats.

Interesting.

Your numbers imply a 0.3% speedup for text, 0.7% speedup for csv and
0.9% speedup for binary, which may be around the noise range assuming
a ~1% range. While this does not imply a regression, that seems worth
the duplication IMO.

Agreed. In addition to that, now that each format routine has its own
callbacks, there would be chances that we can do other optimizations
dedicated to the format type in the future if available.

The patch had better document the reason why the
split is done, as well.

+1

CopyFromTextOneRow() has also specific branches for binary and
non-binary removed in 0005, so assuming that I/O is not a bottleneck,
the operation would be faster because we would not evaluate this "if"
condition for each row. Wouldn't we also see improvements for COPY
FROM with short row values, say when mounting PGDATA into a
tmpfs/ramfs?

Probably. Seems worth evaluating.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#73Sutou Kouhei
kou@clear-code.com
In reply to: jian he (#67)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Thanks for trying these patches!

In <CACJufxF9NS3xQ2d79jN0V1CGvF7cR16uJo-C3nrY7vZrwvxF7w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 25 Jan 2024 10:53:58 +0800,
jian he <jian.universality@gmail.com> wrote:

COPY data TO '/dev/null' WITH (FORMAT csv) \watch count=5

Wow! I didn't know the "\watch count="!
I'll use it.

Time: 668.996 ms
Time: 596.254 ms
Time: 592.723 ms
Time: 591.663 ms
Time: 590.803 ms

It seems that 5 times isn't enough for this case as Michael
said. But thanks for trying!

Thanks,
--
kou

#74Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#68)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbHS439y-Bs6HIAR@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 25 Jan 2024 12:17:55 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

+typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
+typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);

We don't really need a set of typedefs here, let's put the definitions
in the CopyToRoutine struct instead.

OK. I'll do it.

+extern CopyToRoutine CopyToRoutineText;
+extern CopyToRoutine CopyToRoutineCSV;
+extern CopyToRoutine CopyToRoutineBinary;

All that should IMO remain in copyto.c and copyfrom.c in the initial
patch doing the refactoring. Why not using a fetch function instead
that uses a string in input? Then you can call that once after
parsing the List of options in ProcessCopyOptions().

OK. How about the following for the fetch function
signature?

extern CopyToRoutine *GetBuiltinCopyToRoutine(const char *format);

We may introduce an enum and use it:

typedef enum CopyBuiltinFormat
{
COPY_BUILTIN_FORMAT_TEXT = 0,
COPY_BUILTIN_FORMAT_CSV,
COPY_BUILTIN_FORMAT_BINARY,
} CopyBuiltinFormat;

extern CopyToRoutine *GetBuiltinCopyToRoutine(CopyBuiltinFormat format);

+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
Some areas, like this comment, are written in an incorrect format.

Oh, sorry. I assumed that the comment style was adjusted by
pgindent.

I'll use the following style:

/*
* ...
*/

+    getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+    fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);

Actually, this split is interesting. It is possible for a custom
format to plug in a custom set of out functions. Did you make use of
something custom for your own stuff?

I didn't. My PoC custom COPY format handler for Apache Arrow
just handles integer and text for now. It doesn't use
cstate->out_functions because cstate->out_functions may not
return a valid binary format value for Apache Arrow. So it
formats each value by itself.

I'll chose one of them for a custom type (that isn't
supported by Apache Arrow, e.g. PostGIS types):

1. Report an unsupported error
2. Call output function for Apache Arrow provided by the
custom type

Actually, could it make sense to
split the assignment of cstate->out_functions into its own callback?

Yes. Because we need to use getTypeBinaryOutputInfo() for
"binary" and use getTypeOutputInfo() for "text" and "csv".

Sure, that's part of the start phase, but at least it would make clear
that a custom method *has* to assign these OIDs to work. The patch
implies that as a rule, without a comment that CopyToStart *must* set
up these OIDs.

CopyToStart doesn't need to set up them if the handler
doesn't use cstate->out_functions.

I think that 0001 and 0005 should be handled first, as pieces
independent of the rest. Then we could move on with 0002~0004 and
0006~0008.

OK. I'll focus on 0001 and 0005 for now. I'll restart
0002-0004/0006-0008 after 0001 and 0005 are accepted.

Thanks,
--
kou

#75Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#70)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoALxEZz33NpcSk99ad_DT3A2oFNMa2KNjGBCMVFeCiUaA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 25 Jan 2024 13:36:03 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've experimented with a similar optimization for csv
and text format; have different callbacks for text and csv format and
remove "if (cstate->opts.csv_mode)" branches. I've attached a patch
for that. Here are results:

HEAD w/ 0001 patch + remove branches:
binary 2824.502 ms
text 2715.264 ms
csv 2803.381 ms

The numbers look better now. I'm not sure these are within a noise
range but it might be worth considering having different callbacks for
text and csv formats.

Wow! Interesting. I tried the approach before but I didn't
see any difference by the approach. But it may depend on my
environment.

I'll import the approach to the next patch set so that
others can try the approach easily.

Thanks,
--
kou

#76Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#74)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 25, 2024 at 05:45:43PM +0900, Sutou Kouhei wrote:

In <ZbHS439y-Bs6HIAR@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 25 Jan 2024 12:17:55 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

+extern CopyToRoutine CopyToRoutineText;
+extern CopyToRoutine CopyToRoutineCSV;
+extern CopyToRoutine CopyToRoutineBinary;

All that should IMO remain in copyto.c and copyfrom.c in the initial
patch doing the refactoring. Why not using a fetch function instead
that uses a string in input? Then you can call that once after
parsing the List of options in ProcessCopyOptions().

OK. How about the following for the fetch function
signature?

extern CopyToRoutine *GetBuiltinCopyToRoutine(const char *format);

Or CopyToRoutineGet()? I am not wedded to my suggestion, got a bad
history with naming things around here.

We may introduce an enum and use it:

typedef enum CopyBuiltinFormat
{
COPY_BUILTIN_FORMAT_TEXT = 0,
COPY_BUILTIN_FORMAT_CSV,
COPY_BUILTIN_FORMAT_BINARY,
} CopyBuiltinFormat;

extern CopyToRoutine *GetBuiltinCopyToRoutine(CopyBuiltinFormat format);

I am not sure that this is necessary as the option value is a string.

Oh, sorry. I assumed that the comment style was adjusted by
pgindent.

No worries, that's just something we get used to. I tend to fix a lot
of these things by myself when editing patches.

+    getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+    fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);

Actually, this split is interesting. It is possible for a custom
format to plug in a custom set of out functions. Did you make use of
something custom for your own stuff?

I didn't. My PoC custom COPY format handler for Apache Arrow
just handles integer and text for now. It doesn't use
cstate->out_functions because cstate->out_functions may not
return a valid binary format value for Apache Arrow. So it
formats each value by itself.

I mean, if you use a custom output function, you could tweak things
even more with byteas or such.. If a callback is expected to do
something, like setting the output function OIDs in the start
callback, we'd better document it rather than letting that be implied.

Actually, could it make sense to
split the assignment of cstate->out_functions into its own callback?

Yes. Because we need to use getTypeBinaryOutputInfo() for
"binary" and use getTypeOutputInfo() for "text" and "csv".

Okay. After sleeping on it, a split makes sense here, because it also
reduces the presence of TupleDesc in the start callback.

Sure, that's part of the start phase, but at least it would make clear
that a custom method *has* to assign these OIDs to work. The patch
implies that as a rule, without a comment that CopyToStart *must* set
up these OIDs.

CopyToStart doesn't need to set up them if the handler
doesn't use cstate->out_functions.

Noted.

I think that 0001 and 0005 should be handled first, as pieces
independent of the rest. Then we could move on with 0002~0004 and
0006~0008.

OK. I'll focus on 0001 and 0005 for now. I'll restart
0002-0004/0006-0008 after 0001 and 0005 are accepted.

Once you get these, I'd be interested in re-doing an evaluation of
COPY TO and more tests with COPY FROM while running Postgres on
scissors. One thing I was thinking to use here is my blackhole_am for
COPY FROM:
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am

As per its name, it does nothing on INSERT, so you could create a
table using it as access method, and stress the COPY FROM execution
paths without having to mount Postgres on a tmpfs because the data is
sent to the void. Perhaps it does not matter, but that moves the
tests to the bottlenecks we want to stress (aka the per-row callback
for large data sets).

I've switched the patch as waiting on author for now. Thanks for your
perseverance here. I understand that's not easy to follow up with
patches and reviews (^_^;)
--
Michael

#77Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#75)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 25, 2024 at 4:52 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoALxEZz33NpcSk99ad_DT3A2oFNMa2KNjGBCMVFeCiUaA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 25 Jan 2024 13:36:03 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've experimented with a similar optimization for csv
and text format; have different callbacks for text and csv format and
remove "if (cstate->opts.csv_mode)" branches. I've attached a patch
for that. Here are results:

HEAD w/ 0001 patch + remove branches:
binary 2824.502 ms
text 2715.264 ms
csv 2803.381 ms

The numbers look better now. I'm not sure these are within a noise
range but it might be worth considering having different callbacks for
text and csv formats.

Wow! Interesting. I tried the approach before but I didn't
see any difference by the approach. But it may depend on my
environment.

I'll import the approach to the next patch set so that
others can try the approach easily.

Thanks,
--
kou

Hi Kou-san,

In the current implementation, there is no way that one can check
incompatibility
options in ProcessCopyOptions, we can postpone the check in CopyFromStart
or CopyToStart, but I think it is a little bit late. Do you think
adding an extra
check for incompatible options hook is acceptable (PFA)?

--
Regards
Junwang Zhao

Attachments:

0001-add-check-incomptiblity-options-hooks.patchapplication/octet-stream; name=0001-add-check-incomptiblity-options-hooks.patchDownload
From f01ad61fe6c251a00870ace5d37669350f8e2043 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Fri, 26 Jan 2024 15:55:07 +0800
Subject: [PATCH] add check incomptiblity options hooks

Signed-off-by: Zhao Junwang <zhjwpku@gmail.com>
---
 src/backend/commands/copy.c    |  5 +++++
 src/include/commands/copyapi.h | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 479f36868c..985d50870f 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -924,6 +924,11 @@ ProcessCopyOptions(ParseState *pstate,
 					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 					 errmsg("NULL specification and DEFAULT specification cannot be the same")));
 	}
+
+	if (is_from)
+		opts_out->from_routine->CopyFromCheckIncompatibleOptions(cstate, opts_out);
+	else
+		opts_out->to_routine->CopyToCheckIncompatibleOptions(cstate, opts_out);
 }
 
 /*
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 22accc83ab..34aa86761a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -21,8 +21,10 @@
 #include "nodes/parsenodes.h"
 
 typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyFormatOptions;
 
 typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);
+typedef void (*CopyFromCheckIncompatibleOptions_function) (CopyFromState cstate, CopyFormatOptions *options);
 typedef int16 (*CopyFromGetFormat_function) (CopyFromState cstate);
 typedef void (*CopyFromStart_function) (CopyFromState cstate, TupleDesc tupDesc);
 typedef bool (*CopyFromOneRow_function) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
@@ -39,6 +41,12 @@ typedef struct CopyFromRoutine
 	 */
 	CopyFromProcessOption_function CopyFromProcessOption;
 
+	/*
+	 * Called for processing incompatible options. This will report error
+	 * messages when find incompatible options.
+	 */
+	CopyFromCheckIncompatibleOptions_function CopyFromCheckIncompatibleOptions;
+
 	/*
 	 * Called when COPY FROM is started. This will return a format as int16
 	 * value. It's used for the CopyInResponse message.
@@ -67,6 +75,7 @@ extern CopyFromRoutine CopyFromRoutineBinary;
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
+typedef void (*CopyToCheckIncompatibleOptions_function) (CopyToState cstate, CopyFormatOptions *options);
 typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
 typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
 typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
@@ -83,6 +92,12 @@ typedef struct CopyToRoutine
 	 */
 	CopyToProcessOption_function CopyToProcessOption;
 
+	/*
+	 * Called for processing incompatible options. This will report error
+	 * messages when find incompatible options.
+	 */
+	CopyToCheckIncompatibleOptions_function CopyToCheckIncompatibleOptions;
+
 	/*
 	 * Called when COPY TO is started. This will return a format as int16
 	 * value. It's used for the CopyOutResponse message.
-- 
2.41.0

#78Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#77)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3+-oG63GeG6v0L8EWi_8Fhuj9vJBhOteLxuBZwtun3GVA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:18:14 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

In the current implementation, there is no way that one can check
incompatibility
options in ProcessCopyOptions, we can postpone the check in CopyFromStart
or CopyToStart, but I think it is a little bit late. Do you think
adding an extra
check for incompatible options hook is acceptable (PFA)?

Thanks for the suggestion! But I think that a custom handler
can do it in
CopyToProcessOption()/CopyFromProcessOption(). What do you
think about this? Or could you share a sample COPY TO/FROM
WITH() SQL you think?

Thanks,
--
kou

#79Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#78)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Jan 26, 2024 at 4:32 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3+-oG63GeG6v0L8EWi_8Fhuj9vJBhOteLxuBZwtun3GVA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:18:14 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

In the current implementation, there is no way that one can check
incompatibility
options in ProcessCopyOptions, we can postpone the check in CopyFromStart
or CopyToStart, but I think it is a little bit late. Do you think
adding an extra
check for incompatible options hook is acceptable (PFA)?

Thanks for the suggestion! But I think that a custom handler
can do it in
CopyToProcessOption()/CopyFromProcessOption(). What do you
think about this? Or could you share a sample COPY TO/FROM
WITH() SQL you think?

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Thanks,
--
kou

--
Regards
Junwang Zhao

#80Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#76)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbLwNyOKbddno0Ue@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 08:35:19 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

OK. How about the following for the fetch function
signature?

extern CopyToRoutine *GetBuiltinCopyToRoutine(const char *format);

Or CopyToRoutineGet()? I am not wedded to my suggestion, got a bad
history with naming things around here.

Thanks for the suggestion.
I rethink about this and use the following:

+extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, DefElem *defel);

It's not a fetch function. It sets CopyToRoutine opts_out
instead. But it hides CopyToRoutine* to copyto.c. Is it
acceptable?

OK. I'll focus on 0001 and 0005 for now. I'll restart
0002-0004/0006-0008 after 0001 and 0005 are accepted.

Once you get these, I'd be interested in re-doing an evaluation of
COPY TO and more tests with COPY FROM while running Postgres on
scissors. One thing I was thinking to use here is my blackhole_am for
COPY FROM:
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am

Thanks!

Could you evaluate the attached patch set with COPY FROM?

I attach v7 patch set. It includes only the 0001 and 0005
parts in v6 patch set because we focus on them for now.

0001: This is based on 0001 in v6.

Changes since v6:

* Fix comment style
* Hide CopyToRoutine{Text,CSV,Binary}
* Add more comments
* Eliminate "if (cstate->opts.csv_mode)" branches from "text"
and "csv" callbacks
* Remove CopyTo*_function typedefs
* Update benchmark results in commit message but the results
are measured on my environment that isn't suitable for
accurate benchmark

0002: This is based on 0005 in v6.

Changes since v6:

* Fix comment style
* Hide CopyFromRoutine{Text,CSV,Binary}
* Add more comments
* Eliminate a "if (cstate->opts.csv_mode)" branch from "text"
and "csv" callbacks
* NOTE: We can eliminate more "if (cstate->opts.csv_mode)" branches
such as one in NextCopyFromRawFields(). Should we do it
in this feature improvement (make COPY format
extendable)? Can we defer this as a separated improvement?
* Remove CopyFrom*_function typedefs

Thanks,
--
kou

Attachments:

v7-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 3e75129c2e9d9d34eebb6ef31b4fe6579f9eb02d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 26 Jan 2024 16:46:51 +0900
Subject: [PATCH v7 1/2] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToRoutine can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    SELECT setseed(0.29);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,10.561
    csv,10.868
    binary,10.287

100K with this change:

    format,elapsed time (ms)
    text,9.962
    csv,10.453
    binary,9.473

1M without this change:

    format,elapsed time (ms)
    text,103.265
    csv,109.789
    binary,104.078

1M with this change:

    format,elapsed time (ms)
    text,98.612
    csv,101.908
    binary,94.456

10M without this change:

    format,elapsed time (ms)
    text,1060.614
    csv,1065.272
    binary,1025.875

10M with this change:

    format,elapsed time (ms)
    text,1020.050
    csv,1031.279
    binary,954.792
---
 contrib/file_fdw/file_fdw.c     |   2 +-
 src/backend/commands/copy.c     |  71 ++--
 src/backend/commands/copyfrom.c |   2 +-
 src/backend/commands/copyto.c   | 551 +++++++++++++++++++++++---------
 src/include/commands/copy.h     |   8 +-
 src/include/commands/copyapi.h  |  48 +++
 6 files changed, 505 insertions(+), 177 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 249d82d3a0..9e4e819858 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -329,7 +329,7 @@ file_fdw_validator(PG_FUNCTION_ARGS)
 	/*
 	 * Now apply the core COPY code's validation logic for more checks.
 	 */
-	ProcessCopyOptions(NULL, NULL, true, other_options);
+	ProcessCopyOptions(NULL, NULL, true, NULL, other_options);
 
 	/*
 	 * Either filename or program option is required for file_fdw foreign
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cc0786c6f4..3676d1206d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -442,6 +442,9 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
  * a list of options.  In that usage, 'opts_out' can be passed as NULL and
  * the collected data is just leaked until CurrentMemoryContext is reset.
  *
+ * 'cstate' is CopyToState* for !is_from, CopyFromState* for is_from. 'cstate'
+ * may be NULL. For example, file_fdw uses NULL.
+ *
  * Note that additional checking, such as whether column names listed in FORCE
  * QUOTE actually exist, has to be applied later.  This just checks for
  * self-consistency of the options list.
@@ -450,6 +453,7 @@ void
 ProcessCopyOptions(ParseState *pstate,
 				   CopyFormatOptions *opts_out,
 				   bool is_from,
+				   void *cstate,
 				   List *options)
 {
 	bool		format_specified = false;
@@ -464,30 +468,54 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
-	/* Extract options from the statement node tree */
+	/*
+	 * Extract only the "format" option to detect target routine as the first
+	 * step
+	 */
 	foreach(option, options)
 	{
 		DefElem    *defel = lfirst_node(DefElem, option);
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
+
+			if (is_from)
+			{
+				char	   *fmt = defGetString(defel);
+
+				if (strcmp(fmt, "text") == 0)
+					 /* default format */ ;
+				else if (strcmp(fmt, "csv") == 0)
+				{
+					opts_out->csv_mode = true;
+				}
+				else if (strcmp(fmt, "binary") == 0)
+				{
+					opts_out->binary = true;
+				}
+				else
+					ereport(ERROR,
+							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+							 errmsg("COPY format \"%s\" not recognized", fmt),
+							 parser_errposition(pstate, defel->location)));
+			}
 			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+				ProcessCopyOptionFormatTo(pstate, opts_out, defel);
 		}
+	}
+	if (!format_specified)
+		/* Set the default format. */
+		ProcessCopyOptionFormatTo(pstate, opts_out, NULL);
+	/* Extract options except "format" from the statement node tree */
+	foreach(option, options)
+	{
+		DefElem    *defel = lfirst_node(DefElem, option);
+
+		if (strcmp(defel->defname, "format") == 0)
+			continue;
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
 			if (freeze_specified)
@@ -616,11 +644,18 @@ ProcessCopyOptions(ParseState *pstate,
 			opts_out->on_error = defGetCopyOnErrorChoice(defel, pstate, is_from);
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+		{
+			bool		processed = false;
+
+			if (!is_from)
+				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
+			if (!processed)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("option \"%s\" not recognized",
+								defel->defname),
+						 parser_errposition(pstate, defel->location)));
+		}
 	}
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 173a736ad5..05b3d13236 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1411,7 +1411,7 @@ BeginCopyFrom(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , cstate, options);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..52572585fa 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -131,6 +132,397 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToTextBased*() are
+ * shared by both of "text" and "csv". CopyToText*() are only for "text" and
+ * CopyToCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance
+ * merit when many tuples are copied. So we use separated callbacks for "text"
+ * and "csv".
+ */
+
+/*
+ * All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later.
+ */
+static bool
+CopyToTextBasedProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToTextBasedGetFormat(CopyToState cstate)
+{
+	return 0;
+}
+
+static void
+CopyToTextBasedSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+typedef void (*CopyAttributeOutHeaderFunction) (CopyToState cstate, char *string);
+
+/*
+ * We can use CopyAttributeOutText() directly but define this for consistency
+ * with CopyAttributeOutCSVHeader(). "static inline" will prevent performance
+ * penalty by this wrapping.
+ */
+static inline void
+CopyAttributeOutTextHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutCSV(cstate, string, false,
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextStart() and CopyToCSVStart() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * only once per COPY TO. So this optimization may be meaningless but done for
+ * consistency with CopyToTextBasedOneRow().
+ *
+ * This must initialize cstate->out_functions for CopyToTextBasedOneRow().
+ */
+static inline void
+CopyToTextBasedStart(CopyToState cstate, TupleDesc tupDesc, CopyAttributeOutHeaderFunction out)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			out(cstate, colname);
+		}
+
+		CopyToTextBasedSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutTextHeader);
+}
+
+static void
+CopyToCSVStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutCSVHeader);
+}
+
+typedef void (*CopyAttributeOutValueFunction) (CopyToState cstate, char *string, int attnum);
+
+static inline void
+CopyAttributeOutTextValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutCSV(cstate, string,
+						cstate->opts.force_quote_flags[attnum - 1],
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextOneRow() and CopyToCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->out_functions must be initialized in CopyToTextBasedStart().
+ */
+static void
+CopyToTextBasedOneRow(CopyToState cstate, TupleTableSlot *slot, CopyAttributeOutValueFunction out)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			out(cstate, string, attnum);
+		}
+	}
+
+	CopyToTextBasedSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutTextValue);
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutCSVValue);
+}
+
+static void
+CopyToTextBasedEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later.
+ */
+static bool
+CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToBinaryGetFormat(CopyToState cstate)
+{
+	return 1;
+}
+
+/*
+ * This must initialize cstate->out_functions for CopyToBinaryOneRow().
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+/*
+ * cstate->out_functions must be initialized in CopyToBinaryStart().
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextBased*() are shared with "csv". CopyToText*() are only for "text".
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToProcessOption = CopyToTextBasedProcessOption,
+	.CopyToGetFormat = CopyToTextBasedGetFormat,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+/*
+ * CopyToTextBased*() are shared with "text". CopyToCSV*() are only for "csv".
+ */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToProcessOption = CopyToTextBasedProcessOption,
+	.CopyToGetFormat = CopyToTextBasedGetFormat,
+	.CopyToStart = CopyToCSVStart,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToProcessOption = CopyToBinaryProcessOption,
+	.CopyToGetFormat = CopyToBinaryGetFormat,
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Process the "format" option for COPY TO.
+ *
+ * If defel is NULL, the default format "text" is used.
+ */
+void
+ProcessCopyOptionFormatTo(ParseState *pstate,
+						  CopyFormatOptions *opts_out,
+						  DefElem *defel)
+{
+	char	   *format;
+
+	if (defel)
+		format = defGetString(defel);
+	else
+		format = "text";
+
+	if (strcmp(format, "text") == 0)
+		opts_out->to_routine = &CopyToRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->to_routine = &CopyToRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->to_routine = &CopyToRoutineBinary;
+	}
+	else
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -141,7 +533,7 @@ SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.to_routine->CopyToGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
@@ -198,16 +590,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +624,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -431,7 +809,7 @@ BeginCopyTo(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , cstate, options);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -748,8 +1126,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1135,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1150,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1189,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1205,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..9abd7fe538 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "commands/copyapi.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
@@ -87,7 +88,8 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
 
-extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
+extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, DefElem *defel);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..ed52ce5f49
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,48 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/parsenodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called for processing one COPY TO option. This will return false when
+	 * the given option is invalid.
+	 */
+	bool		(*CopyToProcessOption) (CopyToState cstate, DefElem *defel);
+
+	/*
+	 * Called when COPY TO is started. This will return a format as int16
+	 * value. It's used for the CopyOutResponse message.
+	 */
+	int16		(*CopyToGetFormat) (CopyToState cstate);
+
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*CopyToEnd) (CopyToState cstate);
+}			CopyToRoutine;
+
+#endif							/* COPYAPI_H */
-- 
2.43.0

v7-0002-Extract-COPY-FROM-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From c956816bed5c6ac4366ad4ae839d8e38f5ae4d7e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 26 Jan 2024 17:21:53 +0900
Subject: [PATCH v7 2/2] Extract COPY FROM format implementations

This doesn't change the current behavior. This just introduces
CopyFromRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyFromRoutine can't be used from extensions yet because
CopyRead*() aren't exported yet. Extensions can't read data from a
source without CopyRead*(). They will be exported by subsequent
patches.
---
 src/backend/commands/copy.c              |  33 +-
 src/backend/commands/copyfrom.c          | 270 +++++++++++++---
 src/backend/commands/copyfromparse.c     | 382 +++++++++++++----------
 src/include/commands/copy.h              |   6 +-
 src/include/commands/copyapi.h           |  32 ++
 src/include/commands/copyfrom_internal.h |   4 +
 6 files changed, 490 insertions(+), 237 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3676d1206d..489de4ab8d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,32 +483,19 @@ ProcessCopyOptions(ParseState *pstate,
 			format_specified = true;
 
 			if (is_from)
-			{
-				char	   *fmt = defGetString(defel);
-
-				if (strcmp(fmt, "text") == 0)
-					 /* default format */ ;
-				else if (strcmp(fmt, "csv") == 0)
-				{
-					opts_out->csv_mode = true;
-				}
-				else if (strcmp(fmt, "binary") == 0)
-				{
-					opts_out->binary = true;
-				}
-				else
-					ereport(ERROR,
-							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-							 errmsg("COPY format \"%s\" not recognized", fmt),
-							 parser_errposition(pstate, defel->location)));
-			}
+				ProcessCopyOptionFormatFrom(pstate, opts_out, defel);
 			else
 				ProcessCopyOptionFormatTo(pstate, opts_out, defel);
 		}
 	}
 	if (!format_specified)
+	{
 		/* Set the default format. */
-		ProcessCopyOptionFormatTo(pstate, opts_out, NULL);
+		if (is_from)
+			ProcessCopyOptionFormatFrom(pstate, opts_out, NULL);
+		else
+			ProcessCopyOptionFormatTo(pstate, opts_out, NULL);
+	}
 	/* Extract options except "format" from the statement node tree */
 	foreach(option, options)
 	{
@@ -645,9 +632,11 @@ ProcessCopyOptions(ParseState *pstate,
 		}
 		else
 		{
-			bool		processed = false;
+			bool		processed;
 
-			if (!is_from)
+			if (is_from)
+				processed = opts_out->from_routine->CopyFromProcessOption(cstate, defel);
+			else
 				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
 			if (!processed)
 				ereport(ERROR,
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 05b3d13236..498d7bc5ad 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -32,6 +32,7 @@
 #include "catalog/namespace.h"
 #include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
@@ -108,6 +109,223 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromTextBased*()
+ * are shared by both of "text" and "csv". CopyFromText*() are only for "text"
+ * and CopyFromCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance merit
+ * when many tuples are copied. So we use separated callbacks for "text" and
+ * "csv".
+ */
+
+/*
+ * All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later.
+ */
+static bool
+CopyFromTextBasedProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromTextBasedGetFormat(CopyFromState cstate)
+{
+	return 0;
+}
+
+/*
+ * This must initialize cstate->in_functions for CopyFromTextBasedOneRow().
+ */
+static void
+CopyFromTextBasedStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextBasedEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later.
+ */
+static bool
+CopyFromBinaryProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromBinaryGetFormat(CopyFromState cstate)
+{
+	return 1;
+}
+
+/*
+ * This must initialize cstate->in_functions for CopyFromBinaryOneRow().
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromTextBased*() are shared with "csv". CopyFromText*() are only for "text".
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromProcessOption = CopyFromTextBasedProcessOption,
+	.CopyFromGetFormat = CopyFromTextBasedGetFormat,
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+/*
+ * CopyFromTextBased*() are shared with "text". CopyFromCSV*() are only for "csv".
+ */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromProcessOption = CopyFromTextBasedProcessOption,
+	.CopyFromGetFormat = CopyFromTextBasedGetFormat,
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromProcessOption = CopyFromBinaryProcessOption,
+	.CopyFromGetFormat = CopyFromBinaryGetFormat,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Process the "format" option for COPY FROM.
+ *
+ * If defel is NULL, the default format "text" is used.
+ */
+void
+ProcessCopyOptionFormatFrom(ParseState *pstate,
+							CopyFormatOptions *opts_out,
+							DefElem *defel)
+{
+	char	   *format;
+
+	if (defel)
+		format = defGetString(defel);
+	else
+		format = "text";
+
+	if (strcmp(format, "text") == 0)
+		opts_out->from_routine = &CopyFromRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->from_routine = &CopyFromRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->from_routine = &CopyFromRoutineBinary;
+	}
+	else
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1379,9 +1597,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1566,25 +1781,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1603,8 +1799,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1616,15 +1810,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1684,8 +1869,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1758,20 +1941,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->opts.from_routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1784,6 +1954,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->opts.from_routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..856ba261e1 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -172,7 +172,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.from_routine->CopyFromGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
@@ -840,6 +840,221 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);
+
+static inline char *
+PostpareColumnValueText(CopyFromState cstate, char *string, int m)
+{
+	/* do nothing */
+	return string;
+}
+
+static inline char *
+PostpareColumnValueCSV(CopyFromState cstate, char *string, int m)
+{
+	if (string == NULL &&
+		cstate->opts.force_notnull_flags[m])
+	{
+		/*
+		 * FORCE_NOT_NULL option is set and column is NULL - convert it to the
+		 * NULL string.
+		 */
+		string = cstate->opts.null_print;
+	}
+	else if (string != NULL && cstate->opts.force_null_flags[m]
+			 && strcmp(string, cstate->opts.null_print) == 0)
+	{
+		/*
+		 * FORCE_NULL option is set and column matches the NULL string. It
+		 * must have been quoted, or otherwise the string would already have
+		 * been set to NULL. Convert it to NULL as specified.
+		 */
+		string = NULL;
+	}
+	return string;
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyFromTextOneRow() and CopyFromCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->in_functions must be initialized in CopyFromTextBasedStart().
+ */
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls, PostpareColumnValue postpare_column_value)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		string = postpare_column_value(cstate, string, m);
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, PostpareColumnValueText);
+}
+
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, PostpareColumnValueCSV);
+}
+
+/*
+ * cstate->in_functions must be initialized in CopyFromBinaryStart().
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -857,181 +1072,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->opts.from_routine->CopyFromOneRow(cstate, econtext, values,
+												   nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 9abd7fe538..107642ef7a 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -75,12 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyFromRoutine *from_routine;	/* callback routines for COPY
+												 * FROM */
 	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -89,6 +88,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   uint64 *processed);
 
 extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
+extern void ProcessCopyOptionFormatFrom(ParseState *pstate, CopyFormatOptions *opts_out, DefElem *defel);
 extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, DefElem *defel);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ed52ce5f49..9f82cc0876 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,8 +15,40 @@
 #define COPYAPI_H
 
 #include "executor/tuptable.h"
+#include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+/* Routines for a COPY FROM format implementation. */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called for processing one COPY FROM option. This will return false when
+	 * the given option is invalid.
+	 */
+	bool		(*CopyFromProcessOption) (CopyFromState cstate, DefElem *defel);
+
+	/*
+	 * Called when COPY FROM is started. This will return a format as int16
+	 * value. It's used for the CopyInResponse message.
+	 */
+	int16		(*CopyFromGetFormat) (CopyFromState cstate);
+
+	/*
+	 * Called when COPY FROM is started. This will initialize something and
+	 * receive a header.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/* Copy one row. It returns false if no more tuples. */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
+	/* Called when COPY FROM is ended. This will finalize something. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+}			CopyFromRoutine;
+
 /* This is private in commands/copyto.c */
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..096b55011e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,4 +183,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.43.0

#81Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#79)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Thanks,
--
kou

#82Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#81)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

Thanks,
--
kou

--
Regards
Junwang Zhao

#83Junwang Zhao
zhjwpku@gmail.com
In reply to: Junwang Zhao (#82)
10 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Kou-san,

On Fri, Jan 26, 2024 at 5:02 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

I have been working on a *COPY TO JSON* extension since yesterday,
which is based on your V6 patch set, I'd like to give you more input
so you can make better decisions about the implementation(with only
pg-copy-arrow you might not get everything considered).

V8 is based on V6, so anybody involved in the performance issue
should still review the V7 patch set.

0001-0008 is your original V6 implementations

0009 is some changes made by me, I changed CopyToGetFormat to
CopyToSendCopyBegin because pg_copy_json need to send different bytes
in SendCopyBegin, get the format code along is not enough, I once had
a thought that may be we should merge SendCopyBegin/SendCopyEnd into
CopyToStart/CopyToEnd but I don't do that in this patch. I have also
exported more APIs for extension usage.

00010 is the pg_copy_json extension, I think this should be a good
case which can utilize the *extendable copy format* feature, maybe we
should delete copy_test_format if we have this extension as an
example?

Thanks,
--
kou

--
Regards
Junwang Zhao

--
Regards
Junwang Zhao

Attachments:

v8-0004-Add-support-for-implementing-custom-COPY-TO-forma.patchapplication/octet-stream; name=v8-0004-Add-support-for-implementing-custom-COPY-TO-forma.patchDownload
From 4b177469f3fb8f14f0cd6bff3c7878dcafd9b760 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v8 04/10] Add support for implementing custom COPY TO format
 as extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
* Rename CopySendEndOfRow() to CopyToStateFlush() because it's a
  method for CopyToState and it's used for flushing. End-of-row related
  codes were moved to CopyToTextSendEndOfRow().
---
 src/backend/commands/copyto.c  | 15 +++++++--------
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index cfc74ee7b1..b5d8678394 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -69,7 +69,6 @@ static void SendCopyEnd(CopyToState cstate);
 static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
-static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
@@ -117,7 +116,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 		default:
 			break;
 	}
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 static void
@@ -302,7 +301,7 @@ CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
 		}
 	}
 
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 static void
@@ -311,7 +310,7 @@ CopyToBinaryEnd(CopyToState cstate)
 	/* Generate trailer for a binary copy */
 	CopySendInt16(cstate, -1);
 	/* Need to flush out the trailer */
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 CopyToRoutine CopyToRoutineText = {
@@ -377,8 +376,8 @@ SendCopyEnd(CopyToState cstate)
  * CopySendData sends output data to the destination (file or frontend)
  * CopySendString does the same for null-terminated strings
  * CopySendChar does the same for single characters
- * CopySendEndOfRow does the appropriate thing at end of each data row
- *	(data is not actually flushed except by CopySendEndOfRow)
+ * CopyToStateFlush flushes the buffered data
+ *	(data is not actually flushed except by CopyToStateFlush)
  *
  * NB: no data conversion is applied by these functions
  *----------
@@ -401,8 +400,8 @@ CopySendChar(CopyToState cstate, char c)
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
 }
 
-static void
-CopySendEndOfRow(CopyToState cstate)
+void
+CopyToStateFlush(CopyToState cstate)
 {
 	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index a869d78d72..ffad433a21 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -174,6 +174,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.41.0

v8-0001-Extract-COPY-TO-format-implementations.patchapplication/octet-stream; name=v8-0001-Extract-COPY-TO-format-implementations.patchDownload
From 6e68ba6380dc825a242e7f0d0a53442bba3a4a61 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Dec 2023 12:32:54 +0900
Subject: [PATCH v8 01/10] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToRoutine can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,11.002
    csv,11.696
    binary,11.352

100K with this change:

    format,elapsed time (ms)
    text,100000,11.562
    csv,100000,11.889
    binary,100000,10.825

1M without this change:

    format,elapsed time (ms)
    text,108.359
    csv,114.233
    binary,111.251

1M with this change:

    format,elapsed time (ms)
    text,111.269
    csv,116.277
    binary,104.765

10M without this change:

    format,elapsed time (ms)
    text,1090.763
    csv,1136.103
    binary,1137.141

10M with this change:

    format,elapsed time (ms)
    text,1082.654
    csv,1196.991
    binary,1069.697
---
 contrib/file_fdw/file_fdw.c     |   2 +-
 src/backend/commands/copy.c     |  43 +++-
 src/backend/commands/copyfrom.c |   2 +-
 src/backend/commands/copyto.c   | 428 ++++++++++++++++++++------------
 src/include/commands/copy.h     |   7 +-
 src/include/commands/copyapi.h  |  59 +++++
 6 files changed, 376 insertions(+), 165 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 249d82d3a0..9e4e819858 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -329,7 +329,7 @@ file_fdw_validator(PG_FUNCTION_ARGS)
 	/*
 	 * Now apply the core COPY code's validation logic for more checks.
 	 */
-	ProcessCopyOptions(NULL, NULL, true, other_options);
+	ProcessCopyOptions(NULL, NULL, true, NULL, other_options);
 
 	/*
 	 * Either filename or program option is required for file_fdw foreign
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cc0786c6f4..5f3697a5f9 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -442,6 +442,9 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
  * a list of options.  In that usage, 'opts_out' can be passed as NULL and
  * the collected data is just leaked until CurrentMemoryContext is reset.
  *
+ * 'cstate' is CopyToState* for !is_from, CopyFromState* for is_from. 'cstate'
+ * may be NULL. For example, file_fdw uses NULL.
+ *
  * Note that additional checking, such as whether column names listed in FORCE
  * QUOTE actually exist, has to be applied later.  This just checks for
  * self-consistency of the options list.
@@ -450,6 +453,7 @@ void
 ProcessCopyOptions(ParseState *pstate,
 				   CopyFormatOptions *opts_out,
 				   bool is_from,
+				   void *cstate,
 				   List *options)
 {
 	bool		format_specified = false;
@@ -464,7 +468,13 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
-	/* Extract options from the statement node tree */
+	/* Text is the default format. */
+	opts_out->to_routine = &CopyToRoutineText;
+
+	/*
+	 * Extract only the "format" option to detect target routine as the first
+	 * step
+	 */
 	foreach(option, options)
 	{
 		DefElem    *defel = lfirst_node(DefElem, option);
@@ -479,15 +489,29 @@ ProcessCopyOptions(ParseState *pstate,
 			if (strcmp(fmt, "text") == 0)
 				 /* default format */ ;
 			else if (strcmp(fmt, "csv") == 0)
+			{
 				opts_out->csv_mode = true;
+				opts_out->to_routine = &CopyToRoutineCSV;
+			}
 			else if (strcmp(fmt, "binary") == 0)
+			{
 				opts_out->binary = true;
+				opts_out->to_routine = &CopyToRoutineBinary;
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
 						 parser_errposition(pstate, defel->location)));
 		}
+	}
+	/* Extract options except "format" from the statement node tree */
+	foreach(option, options)
+	{
+		DefElem    *defel = lfirst_node(DefElem, option);
+
+		if (strcmp(defel->defname, "format") == 0)
+			continue;
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
 			if (freeze_specified)
@@ -616,11 +640,18 @@ ProcessCopyOptions(ParseState *pstate,
 			opts_out->on_error = defGetCopyOnErrorChoice(defel, pstate, is_from);
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+		{
+			bool		processed = false;
+
+			if (!is_from)
+				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
+			if (!processed)
+				ereport(ERROR,
+						(errcode(ERRCODE_SYNTAX_ERROR),
+						 errmsg("option \"%s\" not recognized",
+								defel->defname),
+						 parser_errposition(pstate, defel->location)));
+		}
 	}
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..fb3d4d9296 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1416,7 +1416,7 @@ BeginCopyFrom(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , cstate, options);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..6547b7c654 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,275 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
+static bool
+CopyToTextProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToTextGetFormat(CopyToState cstate)
+{
+	return 0;
+}
+
+static void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false,
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1],
+									list_length(cstate->attnumlist) == 1);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/* All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later. */
+static bool
+CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyToBinaryGetFormat(CopyToState cstate)
+{
+	return 1;
+}
+
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+CopyToRoutine CopyToRoutineText = {
+	.CopyToProcessOption = CopyToTextProcessOption,
+	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+/*
+ * We can use the same CopyToRoutine for both of "text" and "csv" because
+ * CopyToText*() refer cstate->opts.csv_mode and change their behavior. We can
+ * split the implementations and stop referring cstate->opts.csv_mode later.
+ */
+CopyToRoutine CopyToRoutineCSV = {
+	.CopyToProcessOption = CopyToTextProcessOption,
+	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+CopyToRoutine CopyToRoutineBinary = {
+	.CopyToProcessOption = CopyToBinaryProcessOption,
+	.CopyToGetFormat = CopyToBinaryGetFormat,
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -141,7 +410,7 @@ SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.to_routine->CopyToGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
@@ -198,16 +467,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +501,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -431,7 +686,7 @@ BeginCopyTo(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , cstate, options);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -748,8 +1003,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1012,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1027,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1066,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1082,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..34bea880ca 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "commands/copyapi.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
@@ -87,7 +88,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
 
-extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..eb68f2fb7b
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,59 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/parsenodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
+typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
+typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
+typedef void (*CopyToEnd_function) (CopyToState cstate);
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called for processing one COPY TO option. This will return false when
+	 * the given option is invalid.
+	 */
+	CopyToProcessOption_function CopyToProcessOption;
+
+	/*
+	 * Called when COPY TO is started. This will return a format as int16
+	 * value. It's used for the CopyOutResponse message.
+	 */
+	CopyToGetFormat_function CopyToGetFormat;
+
+	/* Called when COPY TO is started. This will send a header. */
+	CopyToStart_function CopyToStart;
+
+	/* Copy one row for COPY TO. */
+	CopyToOneRow_function CopyToOneRow;
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	CopyToEnd_function CopyToEnd;
+}			CopyToRoutine;
+
+/* Built-in CopyToRoutine for "text", "csv" and "binary". */
+extern CopyToRoutine CopyToRoutineText;
+extern CopyToRoutine CopyToRoutineCSV;
+extern CopyToRoutine CopyToRoutineBinary;
+
+#endif							/* COPYAPI_H */
-- 
2.41.0

v8-0002-Add-support-for-adding-custom-COPY-TO-format.patchapplication/octet-stream; name=v8-0002-Add-support-for-adding-custom-COPY-TO-format.patchDownload
From a597f8a2beec12971d77419f08b5722f531774f3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 13:58:38 +0900
Subject: [PATCH v8 02/10] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

We will add support for custom COPY FROM format later. We'll use the
same handler for COPY TO and COPY FROM. PostgreSQL calls a COPY
TO/FROM handler with "is_from" argument. It's true for COPY FROM and
false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine (not exist yet)

We discussed that we introduce a wrapper struct for it:

    typedef struct CopyRoutine
    {
        NodeTag type;
        /* either CopyToRoutine or CopyFromRoutine */
        Node *routine;
    }

    copy_handler(true) returns CopyRoutine with CopyToRoutine
    copy_handler(false) returns CopyRoutine with CopyFromRoutine

See also: https://www.postgresql.org/message-id/flat/CAD21AoCunywHird3GaPzWe6s9JG1wzxj3Cr6vGN36DDheGjOjA%40mail.gmail.com

But I noticed that we don't need the wrapper struct. We can just
CopyToRoutine or CopyFromRoutine. Because we can distinct the returned
struct by checking its NodeTag. So I don't use the wrapper struct
approach.
---
 src/backend/commands/copy.c                   | 84 ++++++++++++++-----
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 +++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  8 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 77 +++++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 18 files changed, 260 insertions(+), 19 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 5f3697a5f9..6f0db0ae7c 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "rewrite/rewriteHandler.h"
 #include "utils/acl.h"
@@ -430,6 +431,69 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
 	return COPY_ON_ERROR_STOP;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine. If no
+ * COPY format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionCustomFormat(ParseState *pstate,
+							  CopyFormatOptions *opts_out,
+							  bool is_from,
+							  DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	void	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->to_routine = &CopyToRoutineCSV;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->to_routine = &CopyToRoutineBinary;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s(%u) did not return a CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->to_routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -481,28 +545,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-			{
-				opts_out->csv_mode = true;
-				opts_out->to_routine = &CopyToRoutineCSV;
-			}
-			else if (strcmp(fmt, "binary") == 0)
-			{
-				opts_out->binary = true;
-				opts_out->to_routine = &CopyToRoutineBinary;
-			}
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionCustomFormat(pstate, opts_out, is_from, defel);
 		}
 	}
 	/* Extract options except "format" from the statement node tree */
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e..173ee11811 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 2f0a59bc87..bd397f45ac
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index a3a991f634..d308780c43 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -373,6 +373,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 29af4ce65d..d4e426687c 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7617,6 +7617,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index d29194da31..2040d5da83 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -632,6 +632,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   typname => 'table_am_handler',
   descr => 'pseudo-type for the result of a table AM handler function',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eb68f2fb7b..9c25e1c415 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -29,6 +29,8 @@ typedef void (*CopyToEnd_function) (CopyToState cstate);
 /* Routines for a COPY TO format implementation. */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called for processing one COPY TO option. This will return false when
 	 * the given option is invalid.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b65..103df1a787 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index e32c8925f6..9d57b868d5 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 397e0906e6..d76f2a6003 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -13,6 +13,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 0000000000..8497f91624
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 0000000000..3a24ae7b97
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test TO stdout WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToProcessOption: "option_before"="before"
+NOTICE:  CopyToProcessOption: "option_after"="after"
+NOTICE:  CopyToGetFormat
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 0000000000..4cefe7b709
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 0000000000..0eb7ed2e11
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,8 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a INT, b INT, c INT);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test TO stdout WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 0000000000..d24ea03ce9
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 0000000000..a2219afcde
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,77 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copy.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static bool
+CopyToProcessOption(CopyToState cstate, DefElem *defel)
+{
+	ereport(NOTICE,
+			(errmsg("CopyToProcessOption: \"%s\"=\"%s\"",
+					defel->defname, defGetString(defel))));
+	return true;
+}
+
+static int16
+CopyToGetFormat(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToGetFormat")));
+	return 0;
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToProcessOption = CopyToProcessOption,
+	.CopyToGetFormat = CopyToGetFormat,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		elog(ERROR, "COPY FROM isn't supported yet");
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 0000000000..f05a636235
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.41.0

v8-0003-Export-CopyToStateData.patchapplication/octet-stream; name=v8-0003-Export-CopyToStateData.patchDownload
From c3a59753b1157dc8e47e719263f58677acc33178 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v8 03/10] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest enum values such as COPY_FILE are conflicted
CopySource enum values defined in copyfrom_internal.h. So COPY_DEST_
prefix instead of COPY_ prefix is used. For example, COPY_FILE is
renamed to COPY_DEST_FILE.

Note that this change isn't enough to implement a custom COPY TO
format handler as extension. We'll do the followings in a subsequent
commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  |  74 +++-----------------
 src/include/commands/copy.h    |  59 ----------------
 src/include/commands/copyapi.h | 120 ++++++++++++++++++++++++++++++++-
 3 files changed, 127 insertions(+), 126 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 6547b7c654..cfc74ee7b1 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -43,64 +43,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -160,7 +102,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -168,7 +110,7 @@ CopyToTextSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -419,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -466,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -500,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -877,12 +819,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 34bea880ca..b3f4682f95 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,69 +20,10 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
-} CopyFormatOptions;
-
 /* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 9c25e1c415..a869d78d72 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,10 +14,10 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/parsenodes.h"
 
-/* This is private in commands/copyto.c */
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
@@ -58,4 +58,122 @@ extern CopyToRoutine CopyToRoutineText;
 extern CopyToRoutine CopyToRoutineCSV;
 extern CopyToRoutine CopyToRoutineBinary;
 
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
+} CopyFormatOptions;
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
-- 
2.41.0

v8-0005-Extract-COPY-FROM-format-implementations.patchapplication/octet-stream; name=v8-0005-Extract-COPY-FROM-format-implementations.patchDownload
From 781955f19ad27cdd66748be539bf45cf1b925856 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 17:21:23 +0900
Subject: [PATCH v8 05/10] Extract COPY FROM format implementations

This doesn't change the current behavior. This just introduces
CopyFromRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyFromRoutine can't be used from extensions yet because
CopyRead*() aren't exported yet. Extensions can't read data from a
source without CopyRead*(). They will be exported by subsequent
patches.
---
 src/backend/commands/copy.c              |   3 +
 src/backend/commands/copyfrom.c          | 216 +++++++++++----
 src/backend/commands/copyfromparse.c     | 326 ++++++++++++-----------
 src/include/commands/copy.h              |   3 -
 src/include/commands/copyapi.h           |  44 +++
 src/include/commands/copyfrom_internal.h |   4 +
 6 files changed, 391 insertions(+), 205 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 6f0db0ae7c..ec6dfff8ab 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -459,12 +459,14 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 	else if (strcmp(format, "csv") == 0)
 	{
 		opts_out->csv_mode = true;
+		opts_out->from_routine = &CopyFromRoutineCSV;
 		opts_out->to_routine = &CopyToRoutineCSV;
 		return;
 	}
 	else if (strcmp(format, "binary") == 0)
 	{
 		opts_out->binary = true;
+		opts_out->from_routine = &CopyFromRoutineBinary;
 		opts_out->to_routine = &CopyToRoutineBinary;
 		return;
 	}
@@ -533,6 +535,7 @@ ProcessCopyOptions(ParseState *pstate,
 	opts_out->file_encoding = -1;
 
 	/* Text is the default format. */
+	opts_out->from_routine = &CopyFromRoutineText;
 	opts_out->to_routine = &CopyToRoutineText;
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fb3d4d9296..d556ebb5d6 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,170 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromText*()
+ * refer cstate->opts.csv_mode and change their behavior. We can split this
+ * implementation and stop referring cstate->opts.csv_mode later.
+ */
+
+/* All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later. */
+static bool
+CopyFromTextProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromTextGetFormat(CopyFromState cstate)
+{
+	return 0;
+}
+
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/* All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later. */
+static bool
+CopyFromBinaryProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static int16
+CopyFromBinaryGetFormat(CopyFromState cstate)
+{
+	return 1;
+}
+
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+}
+
+CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromProcessOption = CopyFromTextProcessOption,
+	.CopyFromGetFormat = CopyFromTextGetFormat,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+/*
+ * We can use the same CopyFromRoutine for both of "text" and "csv" because
+ * CopyFromText*() refer cstate->opts.csv_mode and change their behavior. We can
+ * split the implementations and stop referring cstate->opts.csv_mode later.
+ */
+CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromProcessOption = CopyFromTextProcessOption,
+	.CopyFromGetFormat = CopyFromTextGetFormat,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromProcessOption = CopyFromBinaryProcessOption,
+	.CopyFromGetFormat = CopyFromBinaryGetFormat,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1384,9 +1548,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1571,25 +1732,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1608,8 +1750,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1621,15 +1761,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1689,8 +1820,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1763,20 +1892,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->opts.from_routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1789,6 +1905,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->opts.from_routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..49632f75e4 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -172,7 +172,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = cstate->opts.from_routine->CopyFromGetFormat(cstate);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
@@ -840,199 +840,219 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
-/*
- * Read next tuple from file for COPY FROM. Return false if no more tuples.
- *
- * 'econtext' is used to evaluate default expression for each column that is
- * either not read from the file or is using the DEFAULT option of COPY FROM.
- * It can be NULL when no default values are used, i.e. when all columns are
- * read from the file, and DEFAULT option is unset.
- *
- * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
- */
 bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
 	TupleDesc	tupDesc;
-	AttrNumber	num_phys_attrs,
-				attr_count,
-				num_defaults = cstate->num_defaults;
+	AttrNumber	attr_count;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	int			i;
-	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
 
 	tupDesc = RelationGetDescr(cstate->rel);
-	num_phys_attrs = tupDesc->natts;
 	attr_count = list_length(cstate->attnumlist);
 
-	/* Initialize all values for row to NULL */
-	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
-	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+	fieldno = 0;
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
 		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
 
-			if (cstate->opts.csv_mode)
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
 			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
 			{
 				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
 				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+				string = NULL;
 			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
 
+		if (cstate->defaults[m])
+		{
 			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
 			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
 		}
 
-		Assert(fieldno == attr_count);
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
 	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
 
-		cstate->cur_lineno++;
+	Assert(fieldno == attr_count);
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
+	return true;
+}
 
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
 
-		if (fld_count != attr_count)
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
 	}
 
+	return true;
+}
+
+/*
+ * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ *
+ * 'econtext' is used to evaluate default expression for each column that is
+ * either not read from the file or is using the DEFAULT option of COPY FROM.
+ * It can be NULL when no default values are used, i.e. when all columns are
+ * read from the file, and DEFAULT option is unset.
+ *
+ * 'values' and 'nulls' arrays must be the same length as columns of the
+ * relation passed to BeginCopyFrom. This function fills the arrays.
+ */
+bool
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
+			 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	num_phys_attrs,
+				num_defaults = cstate->num_defaults;
+	int			i;
+	int		   *defmap = cstate->defmap;
+	ExprState **defexprs = cstate->defexprs;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	num_phys_attrs = tupDesc->natts;
+
+	/* Initialize all values for row to NULL */
+	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
+	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+
+	if (!cstate->opts.from_routine->CopyFromOneRow(cstate, econtext, values,
+												   nulls))
+		return false;
+
 	/*
 	 * Now compute and insert any defaults available for the columns not
 	 * provided by the input data.  Anything not processed here or above will
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3f4682f95..df29d42555 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,9 +20,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ffad433a21..323e4705d2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -18,6 +18,49 @@
 #include "executor/tuptable.h"
 #include "nodes/parsenodes.h"
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);
+typedef int16 (*CopyFromGetFormat_function) (CopyFromState cstate);
+typedef void (*CopyFromStart_function) (CopyFromState cstate, TupleDesc tupDesc);
+typedef bool (*CopyFromOneRow_function) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+typedef void (*CopyFromEnd_function) (CopyFromState cstate);
+
+/* Routines for a COPY FROM format implementation. */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called for processing one COPY FROM option. This will return false when
+	 * the given option is invalid.
+	 */
+	CopyFromProcessOption_function CopyFromProcessOption;
+
+	/*
+	 * Called when COPY FROM is started. This will return a format as int16
+	 * value. It's used for the CopyInResponse message.
+	 */
+	CopyFromGetFormat_function CopyFromGetFormat;
+
+	/*
+	 * Called when COPY FROM is started. This will initialize something and
+	 * receive a header.
+	 */
+	CopyFromStart_function CopyFromStart;
+
+	/* Copy one row. It returns false if no more tuples. */
+	CopyFromOneRow_function CopyFromOneRow;
+
+	/* Called when COPY FROM is ended. This will finalize something. */
+	CopyFromEnd_function CopyFromEnd;
+}			CopyFromRoutine;
+
+/* Built-in CopyFromRoutine for "text", "csv" and "binary". */
+extern CopyFromRoutine CopyFromRoutineText;
+extern CopyFromRoutine CopyFromRoutineCSV;
+extern CopyFromRoutine CopyFromRoutineBinary;
+
+
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
@@ -113,6 +156,7 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	CopyFromRoutine *from_routine;	/* callback routines for COPY FROM */
 	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..921c1513f7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,4 +183,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.41.0

v8-0009-change-CopyToGetFormat-to-CopyToSendCopyBegin-and.patchapplication/octet-stream; name=v8-0009-change-CopyToGetFormat-to-CopyToSendCopyBegin-and.patchDownload
From f0a8151feff44823881c3c4e1e7aca4f9bd690d5 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Sat, 27 Jan 2024 09:53:31 +0800
Subject: [PATCH v8 09/10] change CopyToGetFormat to CopyToSendCopyBegin and
 export more api

Signed-off-by: Zhao Junwang <zhjwpku@gmail.com>
---
 src/backend/commands/copyto.c                 | 65 ++++++++++---------
 src/include/commands/copyapi.h                | 12 ++--
 .../test_copy_format/test_copy_format.c       |  7 +-
 3 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index b5d8678394..e2a4964015 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -66,11 +66,6 @@ static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
-static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
-static void CopySendString(CopyToState cstate, const char *str);
-static void CopySendChar(CopyToState cstate, char c);
-static void CopySendInt32(CopyToState cstate, int32 val);
-static void CopySendInt16(CopyToState cstate, int16 val);
 
 /*
  * CopyToRoutine implementations.
@@ -90,10 +85,20 @@ CopyToTextProcessOption(CopyToState cstate, DefElem *defel)
 	return false;
 }
 
-static int16
-CopyToTextGetFormat(CopyToState cstate)
+static void
+CopyToTextSendCopyBegin(CopyToState cstate)
 {
-	return 0;
+	StringInfoData buf;
+	int			natts = list_length(cstate->attnumlist);
+	int16		format = 0;
+	int			i;
+
+	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
+	pq_sendbyte(&buf, format);	/* overall format */
+	pq_sendint16(&buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(&buf, format); /* per-column formats */
+	pq_endmessage(&buf);
 }
 
 static void
@@ -230,10 +235,20 @@ CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
 	return false;
 }
 
-static int16
-CopyToBinaryGetFormat(CopyToState cstate)
+static void
+CopyToBinarySendCopyBegin(CopyToState cstate)
 {
-	return 1;
+	StringInfoData buf;
+	int			natts = list_length(cstate->attnumlist);
+	int16		format = 1;
+	int			i;
+
+	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
+	pq_sendbyte(&buf, format);	/* overall format */
+	pq_sendint16(&buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(&buf, format); /* per-column formats */
+	pq_endmessage(&buf);
 }
 
 static void
@@ -315,7 +330,7 @@ CopyToBinaryEnd(CopyToState cstate)
 
 CopyToRoutine CopyToRoutineText = {
 	.CopyToProcessOption = CopyToTextProcessOption,
-	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToSendCopyBegin = CopyToTextSendCopyBegin,
 	.CopyToStart = CopyToTextStart,
 	.CopyToOneRow = CopyToTextOneRow,
 	.CopyToEnd = CopyToTextEnd,
@@ -328,7 +343,7 @@ CopyToRoutine CopyToRoutineText = {
  */
 CopyToRoutine CopyToRoutineCSV = {
 	.CopyToProcessOption = CopyToTextProcessOption,
-	.CopyToGetFormat = CopyToTextGetFormat,
+	.CopyToSendCopyBegin = CopyToTextSendCopyBegin,
 	.CopyToStart = CopyToTextStart,
 	.CopyToOneRow = CopyToTextOneRow,
 	.CopyToEnd = CopyToTextEnd,
@@ -336,7 +351,7 @@ CopyToRoutine CopyToRoutineCSV = {
 
 CopyToRoutine CopyToRoutineBinary = {
 	.CopyToProcessOption = CopyToBinaryProcessOption,
-	.CopyToGetFormat = CopyToBinaryGetFormat,
+	.CopyToSendCopyBegin = CopyToBinarySendCopyBegin,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOneRow = CopyToBinaryOneRow,
 	.CopyToEnd = CopyToBinaryEnd,
@@ -349,17 +364,7 @@ CopyToRoutine CopyToRoutineBinary = {
 static void
 SendCopyBegin(CopyToState cstate)
 {
-	StringInfoData buf;
-	int			natts = list_length(cstate->attnumlist);
-	int16		format = cstate->opts.to_routine->CopyToGetFormat(cstate);
-	int			i;
-
-	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
-	pq_sendbyte(&buf, format);	/* overall format */
-	pq_sendint16(&buf, natts);
-	for (i = 0; i < natts; i++)
-		pq_sendint16(&buf, format); /* per-column formats */
-	pq_endmessage(&buf);
+	cstate->opts.to_routine->CopyToSendCopyBegin(cstate);
 	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
@@ -382,19 +387,19 @@ SendCopyEnd(CopyToState cstate)
  * NB: no data conversion is applied by these functions
  *----------
  */
-static void
+void
 CopySendData(CopyToState cstate, const void *databuf, int datasize)
 {
 	appendBinaryStringInfo(cstate->fe_msgbuf, databuf, datasize);
 }
 
-static void
+void
 CopySendString(CopyToState cstate, const char *str)
 {
 	appendBinaryStringInfo(cstate->fe_msgbuf, str, strlen(str));
 }
 
-static void
+void
 CopySendChar(CopyToState cstate, char c)
 {
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
@@ -464,7 +469,7 @@ CopyToStateFlush(CopyToState cstate)
 /*
  * CopySendInt32 sends an int32 in network byte order
  */
-static inline void
+inline void
 CopySendInt32(CopyToState cstate, int32 val)
 {
 	uint32		buf;
@@ -476,7 +481,7 @@ CopySendInt32(CopyToState cstate, int32 val)
 /*
  * CopySendInt16 sends an int16 in network byte order
  */
-static inline void
+inline void
 CopySendInt16(CopyToState cstate, int16 val)
 {
 	uint16		buf;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 22accc83ab..0a05b24c54 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -67,7 +67,7 @@ extern CopyFromRoutine CopyFromRoutineBinary;
 typedef struct CopyToStateData *CopyToState;
 
 typedef bool (*CopyToProcessOption_function) (CopyToState cstate, DefElem *defel);
-typedef int16 (*CopyToGetFormat_function) (CopyToState cstate);
+typedef void (*CopyToSendCopyBegin_function) (CopyToState cstate);
 typedef void (*CopyToStart_function) (CopyToState cstate, TupleDesc tupDesc);
 typedef void (*CopyToOneRow_function) (CopyToState cstate, TupleTableSlot *slot);
 typedef void (*CopyToEnd_function) (CopyToState cstate);
@@ -84,10 +84,9 @@ typedef struct CopyToRoutine
 	CopyToProcessOption_function CopyToProcessOption;
 
 	/*
-	 * Called when COPY TO is started. This will return a format as int16
-	 * value. It's used for the CopyOutResponse message.
+	 * Called when COPY TO is started.
 	 */
-	CopyToGetFormat_function CopyToGetFormat;
+	CopyToSendCopyBegin_function CopyToSendCopyBegin;
 
 	/* Called when COPY TO is started. This will send a header. */
 	CopyToStart_function CopyToStart;
@@ -384,6 +383,11 @@ typedef struct CopyToStateData
 	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopySendData(CopyToState cstate, const void *databuf, int datasize);
+extern void CopySendString(CopyToState cstate, const char *str);
+extern void CopySendChar(CopyToState cstate, char c);
+extern void CopySendInt32(CopyToState cstate, int32 val);
+extern void CopySendInt16(CopyToState cstate, int16 val);
 extern void CopyToStateFlush(CopyToState cstate);
 
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index 5e1b40e881..d833f22bbf 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -71,11 +71,10 @@ CopyToProcessOption(CopyToState cstate, DefElem *defel)
 	return true;
 }
 
-static int16
-CopyToGetFormat(CopyToState cstate)
+static void
+CopyToSendCopyBegin(CopyToState cstate)
 {
 	ereport(NOTICE, (errmsg("CopyToGetFormat")));
-	return 0;
 }
 
 static void
@@ -99,7 +98,7 @@ CopyToEnd(CopyToState cstate)
 static const CopyToRoutine CopyToRoutineTestCopyFormat = {
 	.type = T_CopyToRoutine,
 	.CopyToProcessOption = CopyToProcessOption,
-	.CopyToGetFormat = CopyToGetFormat,
+	.CopyToSendCopyBegin = CopyToSendCopyBegin,
 	.CopyToStart = CopyToStart,
 	.CopyToOneRow = CopyToOneRow,
 	.CopyToEnd = CopyToEnd,
-- 
2.41.0

v8-0006-Add-support-for-adding-custom-COPY-FROM-format.patchapplication/octet-stream; name=v8-0006-Add-support-for-adding-custom-COPY-FROM-format.patchDownload
From f48e7b629a8d15fc70cd4cc4737dd2ad61910cc9 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 11:07:14 +0900
Subject: [PATCH v8 06/10] Add support for adding custom COPY FROM format

We use the same approach as we used for custom COPY TO format. Now,
custom COPY format handler can return COPY TO format routines or COPY
FROM format routines based on the "is_from" argument:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine
---
 src/backend/commands/copy.c                   | 53 +++++++++++++------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 12 +++++
 .../test_copy_format/sql/test_copy_format.sql |  6 +++
 .../test_copy_format/test_copy_format.c       | 50 +++++++++++++++--
 5 files changed, 105 insertions(+), 18 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index ec6dfff8ab..479f36868c 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -472,12 +472,9 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -486,14 +483,36 @@ ProcessCopyOptionCustomFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function %s(%u) did not return a CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(pstate, defel->location)));
-
-	opts_out->to_routine = routine;
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+		opts_out->from_routine = routine;
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+		opts_out->to_routine = routine;
+	}
 }
 
 /*
@@ -692,7 +711,11 @@ ProcessCopyOptions(ParseState *pstate,
 		{
 			bool		processed = false;
 
-			if (!is_from)
+			if (is_from)
+				processed =
+					opts_out->from_routine->CopyFromProcessOption(
+																  cstate, defel);
+			else
 				processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
 			if (!processed)
 				ereport(ERROR,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 323e4705d2..ef1bb201c2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -30,6 +30,8 @@ typedef void (*CopyFromEnd_function) (CopyFromState cstate);
 /* Routines for a COPY FROM format implementation. */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called for processing one COPY FROM option. This will return false when
 	 * the given option is invalid.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 3a24ae7b97..6af69f0eb7 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,18 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a INT, b INT, c INT);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromProcessOption: "option_before"="before"
+NOTICE:  CopyFromProcessOption: "option_after"="after"
+NOTICE:  CopyFromGetFormat
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (
 	option_before 'before',
 	format 'test_copy_format',
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0eb7ed2e11..94d3c789a0 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,12 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a INT, b INT, c INT);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (
+	option_before 'before',
+	format 'test_copy_format',
+	option_after 'after'
+);
+\.
 COPY public.test TO stdout WITH (
 	option_before 'before',
 	format 'test_copy_format',
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index a2219afcde..5e1b40e881 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,50 @@
 
 PG_MODULE_MAGIC;
 
+static bool
+CopyFromProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	ereport(NOTICE,
+			(errmsg("CopyFromProcessOption: \"%s\"=\"%s\"",
+					defel->defname, defGetString(defel))));
+	return true;
+}
+
+static int16
+CopyFromGetFormat(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromGetFormat")));
+	return 0;
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromProcessOption = CopyFromProcessOption,
+	.CopyFromGetFormat = CopyFromGetFormat,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static bool
 CopyToProcessOption(CopyToState cstate, DefElem *defel)
 {
@@ -71,7 +115,7 @@ test_copy_format(PG_FUNCTION_ARGS)
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
 	if (is_from)
-		elog(ERROR, "COPY FROM isn't supported yet");
-
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.41.0

v8-0010-introduce-contrib-pg_copy_json.patchapplication/octet-stream; name=v8-0010-introduce-contrib-pg_copy_json.patchDownload
From 7dc6c1c798178f31728d048d4d528181626b3695 Mon Sep 17 00:00:00 2001
From: Zhao Junwang <zhjwpku@gmail.com>
Date: Sat, 27 Jan 2024 13:34:38 +0800
Subject: [PATCH v8 10/10] introduce contrib/pg_copy_json

Signed-off-by: Zhao Junwang <zhjwpku@gmail.com>
---
 contrib/Makefile                              |   1 +
 contrib/meson.build                           |   1 +
 contrib/pg_copy_json/.gitignore               |   4 +
 contrib/pg_copy_json/Makefile                 |  23 ++
 .../pg_copy_json/expected/pg_copy_json.out    |  80 +++++++
 contrib/pg_copy_json/meson.build              |  34 +++
 contrib/pg_copy_json/pg_copy_json--1.0.sql    |   9 +
 contrib/pg_copy_json/pg_copy_json.c           | 218 ++++++++++++++++++
 contrib/pg_copy_json/pg_copy_json.control     |   5 +
 contrib/pg_copy_json/sql/pg_copy_json.sql     |  59 +++++
 src/backend/utils/adt/json.c                  |   5 +-
 src/include/utils/json.h                      |   2 +
 12 files changed, 438 insertions(+), 3 deletions(-)
 create mode 100644 contrib/pg_copy_json/.gitignore
 create mode 100644 contrib/pg_copy_json/Makefile
 create mode 100644 contrib/pg_copy_json/expected/pg_copy_json.out
 create mode 100644 contrib/pg_copy_json/meson.build
 create mode 100644 contrib/pg_copy_json/pg_copy_json--1.0.sql
 create mode 100644 contrib/pg_copy_json/pg_copy_json.c
 create mode 100644 contrib/pg_copy_json/pg_copy_json.control
 create mode 100644 contrib/pg_copy_json/sql/pg_copy_json.sql

diff --git a/contrib/Makefile b/contrib/Makefile
index da4e2316a3..82cc496aa2 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -32,6 +32,7 @@ SUBDIRS = \
 		pageinspect	\
 		passwordcheck	\
 		pg_buffercache	\
+		pg_copy_json	\
 		pg_freespacemap \
 		pg_prewarm	\
 		pg_stat_statements \
diff --git a/contrib/meson.build b/contrib/meson.build
index c12dc906ca..38933d15d1 100644
--- a/contrib/meson.build
+++ b/contrib/meson.build
@@ -45,6 +45,7 @@ subdir('oid2name')
 subdir('pageinspect')
 subdir('passwordcheck')
 subdir('pg_buffercache')
+subdir('pg_copy_json')
 subdir('pgcrypto')
 subdir('pg_freespacemap')
 subdir('pg_prewarm')
diff --git a/contrib/pg_copy_json/.gitignore b/contrib/pg_copy_json/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/pg_copy_json/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/pg_copy_json/Makefile b/contrib/pg_copy_json/Makefile
new file mode 100644
index 0000000000..b0a348d618
--- /dev/null
+++ b/contrib/pg_copy_json/Makefile
@@ -0,0 +1,23 @@
+# contrib/pg_copy_json//Makefile
+
+MODULE_big = pg_copy_json
+OBJS = \
+	$(WIN32RES) \
+	pg_copy_json.o
+PGFILEDESC = "pg_copy_json - COPY TO JSON (JavaScript Object Notation) format"
+
+EXTENSION = pg_copy_json
+DATA = pg_copy_json--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/pg_copy_json
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/pg_copy_json/expected/pg_copy_json.out b/contrib/pg_copy_json/expected/pg_copy_json.out
new file mode 100644
index 0000000000..73633c2303
--- /dev/null
+++ b/contrib/pg_copy_json/expected/pg_copy_json.out
@@ -0,0 +1,80 @@
+--
+-- COPY TO JSON
+--
+CREATE EXTENSION pg_copy_json;
+-- test copying in JSON format with various styles
+-- of embedded line ending characters
+create temp table copytest (
+	style	text,
+	test 	text,
+	filler	int);
+insert into copytest values('DOS',E'abc\r\ndef',1);
+insert into copytest values('Unix',E'abc\ndef',2);
+insert into copytest values('Mac',E'abc\rdef',3);
+insert into copytest values(E'esc\\ape',E'a\\r\\\r\\\n\\nb',4);
+copy copytest to stdout with (format 'json');
+{"style":"DOS","test":"abc\r\ndef","filler":1}
+{"style":"Unix","test":"abc\ndef","filler":2}
+{"style":"Mac","test":"abc\rdef","filler":3}
+{"style":"esc\\ape","test":"a\\r\\\r\\\n\\nb","filler":4}
+-- pg_copy_json do not support COPY FROM
+copy copytest from stdout with (format 'json');
+ERROR:  cannot use JSON mode in COPY FROM
+-- test copying in JSON format with various styles
+-- of embedded escaped characters
+create temp table copyjsontest (
+    id bigserial,
+    f1 text,
+    f2 timestamptz);
+insert into copyjsontest
+  select g.i,
+         CASE WHEN g.i % 2 = 0 THEN
+           'line with '' in it: ' || g.i::text
+         ELSE
+           'line with " in it: ' || g.i::text
+         END,
+         'Mon Feb 10 17:32:01 1997 PST'
+  from generate_series(1,5) as g(i);
+insert into copyjsontest (f1) values
+(E'aaa\"bbb'::text),
+(E'aaa\\bbb'::text),
+(E'aaa\/bbb'::text),
+(E'aaa\bbbb'::text),
+(E'aaa\fbbb'::text),
+(E'aaa\nbbb'::text),
+(E'aaa\rbbb'::text),
+(E'aaa\tbbb'::text);
+copy copyjsontest to stdout with (format 'json');
+{"id":1,"f1":"line with \" in it: 1","f2":"1997-02-10T17:32:01-08:00"}
+{"id":2,"f1":"line with ' in it: 2","f2":"1997-02-10T17:32:01-08:00"}
+{"id":3,"f1":"line with \" in it: 3","f2":"1997-02-10T17:32:01-08:00"}
+{"id":4,"f1":"line with ' in it: 4","f2":"1997-02-10T17:32:01-08:00"}
+{"id":5,"f1":"line with \" in it: 5","f2":"1997-02-10T17:32:01-08:00"}
+{"id":1,"f1":"aaa\"bbb","f2":null}
+{"id":2,"f1":"aaa\\bbb","f2":null}
+{"id":3,"f1":"aaa/bbb","f2":null}
+{"id":4,"f1":"aaa\bbbb","f2":null}
+{"id":5,"f1":"aaa\fbbb","f2":null}
+{"id":6,"f1":"aaa\nbbb","f2":null}
+{"id":7,"f1":"aaa\rbbb","f2":null}
+{"id":8,"f1":"aaa\tbbb","f2":null}
+-- test force array
+copy copytest to stdout (format 'json', force_array);
+[
+ {"style":"DOS","test":"abc\r\ndef","filler":1}
+,{"style":"Unix","test":"abc\ndef","filler":2}
+,{"style":"Mac","test":"abc\rdef","filler":3}
+,{"style":"esc\\ape","test":"a\\r\\\r\\\n\\nb","filler":4}
+]
+copy copytest to stdout (format 'json', force_array true);
+[
+ {"style":"DOS","test":"abc\r\ndef","filler":1}
+,{"style":"Unix","test":"abc\ndef","filler":2}
+,{"style":"Mac","test":"abc\rdef","filler":3}
+,{"style":"esc\\ape","test":"a\\r\\\r\\\n\\nb","filler":4}
+]
+copy copytest to stdout (format 'json', force_array false);
+{"style":"DOS","test":"abc\r\ndef","filler":1}
+{"style":"Unix","test":"abc\ndef","filler":2}
+{"style":"Mac","test":"abc\rdef","filler":3}
+{"style":"esc\\ape","test":"a\\r\\\r\\\n\\nb","filler":4}
diff --git a/contrib/pg_copy_json/meson.build b/contrib/pg_copy_json/meson.build
new file mode 100644
index 0000000000..71f9338267
--- /dev/null
+++ b/contrib/pg_copy_json/meson.build
@@ -0,0 +1,34 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+pg_copy_json_sources = files(
+  'pg_copy_json.c',
+)
+
+if host_system == 'windows'
+  pg_copy_json_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'pg_copy_json',
+    '--FILEDESC', 'pg_copy_json - COPY TO JSON format',])
+endif
+
+pg_copy_json = shared_module('pg_copy_json',
+  pg_copy_json_sources,
+  kwargs: contrib_mod_args,
+)
+contrib_targets += pg_copy_json
+
+install_data(
+  'pg_copy_json--1.0.sql',
+  'pg_copy_json.control',
+  kwargs: contrib_data_args,
+)
+
+tests += {
+  'name': 'pg_copy_json',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'pg_copy_json',
+    ],
+  },
+}
diff --git a/contrib/pg_copy_json/pg_copy_json--1.0.sql b/contrib/pg_copy_json/pg_copy_json--1.0.sql
new file mode 100644
index 0000000000..d738a1e7e9
--- /dev/null
+++ b/contrib/pg_copy_json/pg_copy_json--1.0.sql
@@ -0,0 +1,9 @@
+/* contrib/pg_copy_json/copy_json--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION pg_copy_json" to load this file. \quit
+
+CREATE FUNCTION pg_catalog.json(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'copy_json'
+	LANGUAGE C;
diff --git a/contrib/pg_copy_json/pg_copy_json.c b/contrib/pg_copy_json/pg_copy_json.c
new file mode 100644
index 0000000000..cbfdee8e8b
--- /dev/null
+++ b/contrib/pg_copy_json/pg_copy_json.c
@@ -0,0 +1,218 @@
+/*--------------------------------------------------------------------------
+ *
+ * pg_copy_json.c
+ *		COPY TO JSON (JavaScript Object Notation) format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		contrib/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copy.h"
+#include "commands/defrem.h"
+#include "funcapi.h"
+#include "libpq/libpq.h"
+#include "libpq/pqformat.h"
+#include "utils/json.h"
+
+PG_MODULE_MAGIC;
+
+typedef struct
+{
+	/*
+	 * Force output of square brackets as array decorations at the beginning
+	 * and end of output, with commas between the rows.
+	 */
+	bool	force_array;
+	bool	force_array_specified;
+	
+	/* need delimiter to start next json array element */
+	bool	json_row_delim_needed;
+} CopyJsonData;
+
+static inline void
+InitCopyJsonData(CopyJsonData *p)
+{
+	Assert(p);
+	p->force_array = false;
+	p->force_array_specified = false;
+	p->json_row_delim_needed = false;
+}
+
+static void
+CopyToJsonSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_DEST_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_DEST_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopyToStateFlush(cstate);
+}
+
+static bool
+CopyToJsonProcessOption(CopyToState cstate, DefElem *defel)
+{
+	CopyJsonData	   *p;
+
+	if (cstate->opaque == NULL)
+	{
+		MemoryContext oldcontext;
+		oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+		cstate->opaque = palloc0(sizeof(CopyJsonData));
+		MemoryContextSwitchTo(oldcontext);
+		InitCopyJsonData(cstate->opaque);
+	}
+
+	p = (CopyJsonData *)cstate->opaque;
+
+	if (strcmp(defel->defname, "force_array") == 0)
+	{
+		if (p->force_array_specified)
+			ereport(ERROR,
+					errcode(ERRCODE_SYNTAX_ERROR),
+					errmsg("CopyToJsonProcessOption: redundant options \"%s\"=\"%s\"",
+						   defel->defname, defGetString(defel)));
+		p->force_array_specified = true;
+		p->force_array = defGetBoolean(defel);
+
+		return true;
+	}
+
+	return false;
+}
+
+static void
+CopyToJsonSendCopyBegin(CopyToState cstate)
+{
+	StringInfoData buf;
+	int16		format = 0;
+
+	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
+	pq_sendbyte(&buf, format);	/* overall format */
+	/*
+	 * JSON mode is always one non-binary column
+	 */
+	pq_sendint16(&buf, 1);
+	pq_sendint16(&buf, 0);
+	pq_endmessage(&buf);
+}
+
+static void
+CopyToJsonStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyJsonData	   *p;
+
+	if (cstate->opaque == NULL)
+	{
+		MemoryContext oldcontext;
+		oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+		cstate->opaque = palloc0(sizeof(CopyJsonData));
+		MemoryContextSwitchTo(oldcontext);
+		InitCopyJsonData(cstate->opaque);
+	}
+
+	/* No need to alloc cstate->out_functions */
+
+	p = (CopyJsonData *)cstate->opaque;
+
+	/* If FORCE_ARRAY has been specified send the open bracket. */
+	if (p->force_array)
+	{
+		CopySendChar(cstate, '[');
+		CopyToJsonSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToJsonOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	Datum				rowdata;
+	StringInfo			result;
+	CopyJsonData	   *p;
+
+	Assert(cstate->opaque);
+	p = (CopyJsonData *)cstate->opaque;
+
+	if(!cstate->rel)
+	{
+		for (int i = 0; i < slot->tts_tupleDescriptor->natts; i++)
+		{
+			/* Flat-copy the attribute array */
+			memcpy(TupleDescAttr(slot->tts_tupleDescriptor, i),
+			TupleDescAttr(cstate->queryDesc->tupDesc, i),
+							1 * sizeof(FormData_pg_attribute));
+		}
+		BlessTupleDesc(slot->tts_tupleDescriptor);
+	}
+	rowdata = ExecFetchSlotHeapTupleDatum(slot);
+	result = makeStringInfo();
+	composite_to_json(rowdata, result, false);
+
+	if (p->json_row_delim_needed)
+		CopySendChar(cstate, ',');
+	else if (p->force_array)
+	{
+		/* first row needs no delimiter */
+		CopySendChar(cstate, ' ');
+		p->json_row_delim_needed = true;
+	}
+	CopySendData(cstate, result->data, result->len);
+	CopyToJsonSendEndOfRow(cstate);
+}
+
+static void
+CopyToJsonEnd(CopyToState cstate)
+{
+	CopyJsonData	   *p;
+
+	Assert(cstate->opaque);
+	p = (CopyJsonData *)cstate->opaque;
+
+	/* If FORCE_ARRAY has been specified send the close bracket. */
+	if (p->force_array)
+	{
+		CopySendChar(cstate, ']');
+		CopyToJsonSendEndOfRow(cstate);
+	}
+}
+
+static const CopyToRoutine CopyToRoutineJson = {
+	.type = T_CopyToRoutine,
+	.CopyToProcessOption = CopyToJsonProcessOption,
+	.CopyToSendCopyBegin = CopyToJsonSendCopyBegin,
+	.CopyToStart = CopyToJsonStart,
+	.CopyToOneRow = CopyToJsonOneRow,
+	.CopyToEnd = CopyToJsonEnd,
+};
+
+PG_FUNCTION_INFO_V1(copy_json);
+Datum
+copy_json(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		ereport(ERROR,
+				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+				 errmsg("cannot use JSON mode in COPY FROM")));
+
+	PG_RETURN_POINTER(&CopyToRoutineJson);
+}
diff --git a/contrib/pg_copy_json/pg_copy_json.control b/contrib/pg_copy_json/pg_copy_json.control
new file mode 100644
index 0000000000..90b0a74603
--- /dev/null
+++ b/contrib/pg_copy_json/pg_copy_json.control
@@ -0,0 +1,5 @@
+# pg_copy_json extension
+comment = 'COPY TO JSON format'
+default_version = '1.0'
+module_pathname = '$libdir/pg_copy_json'
+relocatable = true
diff --git a/contrib/pg_copy_json/sql/pg_copy_json.sql b/contrib/pg_copy_json/sql/pg_copy_json.sql
new file mode 100644
index 0000000000..73e7e514ac
--- /dev/null
+++ b/contrib/pg_copy_json/sql/pg_copy_json.sql
@@ -0,0 +1,59 @@
+--
+-- COPY TO JSON
+--
+
+CREATE EXTENSION pg_copy_json;
+
+-- test copying in JSON format with various styles
+-- of embedded line ending characters
+
+create temp table copytest (
+	style	text,
+	test 	text,
+	filler	int);
+
+insert into copytest values('DOS',E'abc\r\ndef',1);
+insert into copytest values('Unix',E'abc\ndef',2);
+insert into copytest values('Mac',E'abc\rdef',3);
+insert into copytest values(E'esc\\ape',E'a\\r\\\r\\\n\\nb',4);
+
+copy copytest to stdout with (format 'json');
+
+-- pg_copy_json do not support COPY FROM
+copy copytest from stdout with (format 'json');
+
+-- test copying in JSON format with various styles
+-- of embedded escaped characters
+
+create temp table copyjsontest (
+    id bigserial,
+    f1 text,
+    f2 timestamptz);
+
+insert into copyjsontest
+  select g.i,
+         CASE WHEN g.i % 2 = 0 THEN
+           'line with '' in it: ' || g.i::text
+         ELSE
+           'line with " in it: ' || g.i::text
+         END,
+         'Mon Feb 10 17:32:01 1997 PST'
+  from generate_series(1,5) as g(i);
+
+insert into copyjsontest (f1) values
+(E'aaa\"bbb'::text),
+(E'aaa\\bbb'::text),
+(E'aaa\/bbb'::text),
+(E'aaa\bbbb'::text),
+(E'aaa\fbbb'::text),
+(E'aaa\nbbb'::text),
+(E'aaa\rbbb'::text),
+(E'aaa\tbbb'::text);
+
+copy copyjsontest to stdout with (format 'json');
+
+-- test force array
+
+copy copytest to stdout (format 'json', force_array);
+copy copytest to stdout (format 'json', force_array true);
+copy copytest to stdout (format 'json', force_array false);
diff --git a/src/backend/utils/adt/json.c b/src/backend/utils/adt/json.c
index d719a61f16..fabd4e611e 100644
--- a/src/backend/utils/adt/json.c
+++ b/src/backend/utils/adt/json.c
@@ -83,8 +83,6 @@ typedef struct JsonAggState
 	JsonUniqueBuilderState unique_check;
 } JsonAggState;
 
-static void composite_to_json(Datum composite, StringInfo result,
-							  bool use_line_feeds);
 static void array_dim_to_json(StringInfo result, int dim, int ndims, int *dims,
 							  Datum *vals, bool *nulls, int *valcount,
 							  JsonTypeCategory tcategory, Oid outfuncoid,
@@ -507,8 +505,9 @@ array_to_json_internal(Datum array, StringInfo result, bool use_line_feeds)
 
 /*
  * Turn a composite / record into JSON.
+ * Exported so COPY TO can use it.
  */
-static void
+void
 composite_to_json(Datum composite, StringInfo result, bool use_line_feeds)
 {
 	HeapTupleHeader td;
diff --git a/src/include/utils/json.h b/src/include/utils/json.h
index 6d7f1b387d..d5631171ad 100644
--- a/src/include/utils/json.h
+++ b/src/include/utils/json.h
@@ -17,6 +17,8 @@
 #include "lib/stringinfo.h"
 
 /* functions in json.c */
+extern void composite_to_json(Datum composite, StringInfo result,
+							  bool use_line_feeds);
 extern void escape_json(StringInfo buf, const char *str);
 extern char *JsonEncodeDateTime(char *buf, Datum value, Oid typid,
 								const int *tzp);
-- 
2.41.0

v8-0008-Add-support-for-implementing-custom-COPY-FROM-for.patchapplication/octet-stream; name=v8-0008-Add-support-for-implementing-custom-COPY-FROM-for.patchDownload
From 3e847de1acb2fd6966ef01192204448711ca3d5e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 14:19:08 +0900
Subject: [PATCH v8 08/10] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data
* Rename CopyReadBinaryData() to CopyFromStateRead() because it's a
  method for CopyFromState and "BinaryData" is redundant.
---
 src/backend/commands/copyfromparse.c | 21 ++++++++++-----------
 src/include/commands/copyapi.h       |  5 +++++
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index a78a790060..f8a194635d 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -165,7 +165,6 @@ static int	CopyGetData(CopyFromState cstate, void *databuf,
 static inline bool CopyGetInt32(CopyFromState cstate, int32 *val);
 static inline bool CopyGetInt16(CopyFromState cstate, int16 *val);
 static void CopyLoadInputBuf(CopyFromState cstate);
-static int	CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes);
 
 void
 ReceiveCopyBegin(CopyFromState cstate)
@@ -194,7 +193,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	int32		tmp;
 
 	/* Signature */
-	if (CopyReadBinaryData(cstate, readSig, 11) != 11 ||
+	if (CopyFromStateRead(cstate, readSig, 11) != 11 ||
 		memcmp(readSig, BinarySignature, 11) != 0)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -222,7 +221,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	/* Skip extension header, if present */
 	while (tmp-- > 0)
 	{
-		if (CopyReadBinaryData(cstate, readSig, 1) != 1)
+		if (CopyFromStateRead(cstate, readSig, 1) != 1)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("invalid COPY file header (wrong length)")));
@@ -364,7 +363,7 @@ CopyGetInt32(CopyFromState cstate, int32 *val)
 {
 	uint32		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -381,7 +380,7 @@ CopyGetInt16(CopyFromState cstate, int16 *val)
 {
 	uint16		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -692,14 +691,14 @@ CopyLoadInputBuf(CopyFromState cstate)
 }
 
 /*
- * CopyReadBinaryData
+ * CopyFromStateRead
  *
  * Reads up to 'nbytes' bytes from cstate->copy_file via cstate->raw_buf
  * and writes them to 'dest'.  Returns the number of bytes read (which
  * would be less than 'nbytes' only if we reach EOF).
  */
-static int
-CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
 {
 	int			copied_bytes = 0;
 
@@ -988,7 +987,7 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 		 */
 		char		dummy;
 
-		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+		if (CopyFromStateRead(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("received copy data after EOF marker")));
@@ -1997,8 +1996,8 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	resetStringInfo(&cstate->attribute_buf);
 
 	enlargeStringInfo(&cstate->attribute_buf, fld_size);
-	if (CopyReadBinaryData(cstate, cstate->attribute_buf.data,
-						   fld_size) != fld_size)
+	if (CopyFromStateRead(cstate, cstate->attribute_buf.data,
+						  fld_size) != fld_size)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 				 errmsg("unexpected EOF in COPY data")));
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index b7e8f627bf..22accc83ab 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -314,8 +314,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
-- 
2.41.0

v8-0007-Export-CopyFromStateData.patchapplication/octet-stream; name=v8-0007-Export-CopyFromStateData.patchDownload
From 1ed575fda7f196ea411e9e53dd9c0739f160fb78 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 24 Jan 2024 14:16:29 +0900
Subject: [PATCH v8 07/10] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. CopySource enum values changes aren't required but I did
like I did for CopyDest enum values. I changed COPY_ prefix to
COPY_SOURCE_ prefix. For example, COPY_FILE to COPY_SOURCE_FILE.

Note that this change isn't enough to implement a custom COPY FROM
format handler as extension. We'll do the followings in a subsequent
commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           | 156 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 150 ----------------------
 5 files changed, 162 insertions(+), 160 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index d556ebb5d6..b4ac7cbd2c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1710,7 +1710,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1829,7 +1829,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 49632f75e4..a78a790060 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -181,7 +181,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -249,7 +249,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -258,7 +258,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -341,7 +341,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1099,7 +1099,7 @@ CopyReadLine(CopyFromState cstate)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index df29d42555..cd41d32074 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -20,8 +20,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ef1bb201c2..b7e8f627bf 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,11 +14,12 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
+#include "nodes/miscnodes.h"
 #include "nodes/parsenodes.h"
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 typedef bool (*CopyFromProcessOption_function) (CopyFromState cstate, DefElem *defel);
@@ -162,6 +163,159 @@ typedef struct CopyFormatOptions
 	CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
+
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 921c1513f7..f8f6120255 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -18,28 +18,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
 /*
  * Represents the insert method to be used during COPY FROM.
  */
@@ -52,134 +30,6 @@ typedef enum CopyInsertMethod
 								 * ExecForeignBatchInsert only if valid */
 } CopyInsertMethod;
 
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.41.0

#84Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Junwang Zhao (#82)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Jan 26, 2024 at 6:02 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.
The callback is expected to return false if the passed option is not
supported. If one of the builtin formats is specified and the rest
options list has at least one option, we raise "option %s not
recognized" error. IOW it's the core's responsibility to ranse the
"option %s not recognized" error, which is in order to raise a
consistent error message. Also, I think the core should check the
redundant options including bultiin and custom options.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#85Junwang Zhao
zhjwpku@gmail.com
In reply to: Masahiko Sawada (#84)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jan 29, 2024 at 10:42 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Jan 26, 2024 at 6:02 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.

Yeah, I think this makes sense.

The callback is expected to return false if the passed option is not
supported. If one of the builtin formats is specified and the rest
options list has at least one option, we raise "option %s not
recognized" error. IOW it's the core's responsibility to ranse the
"option %s not recognized" error, which is in order to raise a
consistent error message. Also, I think the core should check the
redundant options including bultiin and custom options.

It would be good that core could check all the redundant options,
but where should core do the book-keeping of all the options? I have
no idea about this, in my implementation of pg_copy_json extension,
I handle redundant options by adding a xxx_specified field for each
xxx.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

--
Regards
Junwang Zhao

#86Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Junwang Zhao (#85)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jan 29, 2024 at 12:10 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Mon, Jan 29, 2024 at 10:42 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Jan 26, 2024 at 6:02 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.

Yeah, I think this makes sense.

The callback is expected to return false if the passed option is not
supported. If one of the builtin formats is specified and the rest
options list has at least one option, we raise "option %s not
recognized" error. IOW it's the core's responsibility to ranse the
"option %s not recognized" error, which is in order to raise a
consistent error message. Also, I think the core should check the
redundant options including bultiin and custom options.

It would be good that core could check all the redundant options,
but where should core do the book-keeping of all the options? I have
no idea about this, in my implementation of pg_copy_json extension,
I handle redundant options by adding a xxx_specified field for each
xxx.

What I imagined is that while parsing the all specified options, we
evaluate builtin options and we add non-builtin options to another
list. Then when parsing a non-builtin option, we check if this option
already exists in the list. If there is, we raise the "option %s not
recognized" error.". Once we complete checking all options, we pass
each option in the list to the callback.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#87Junwang Zhao
zhjwpku@gmail.com
In reply to: Masahiko Sawada (#86)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jan 29, 2024 at 11:22 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Mon, Jan 29, 2024 at 12:10 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Mon, Jan 29, 2024 at 10:42 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Jan 26, 2024 at 6:02 PM Junwang Zhao <zhjwpku@gmail.com> wrote:

On Fri, Jan 26, 2024 at 4:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3KhS6s1XQgDSvc8vFTb4GkhBmS8TxOoVSDPFX+MPExxxQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 26 Jan 2024 16:41:50 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

CopyToProcessOption()/CopyFromProcessOption() can only handle
single option, and store the options in the opaque field, but it can not
check the relation of two options, for example, considering json format,
the `header` option can not be handled by these two functions.

I want to find a way when the user specifies the header option, customer
handler can error out.

Ah, you want to use a built-in option (such as "header")
value from a custom handler, right? Hmm, it may be better
that we call CopyToProcessOption()/CopyFromProcessOption()
for all options including built-in options.

Hmm, still I don't think it can handle all cases, since we don't know
the sequence of the options, we need all the options been parsed
before we check the compatibility of the options, or customer
handlers will need complicated logic to resolve that, which might
lead to ugly code :(

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.

Yeah, I think this makes sense.

The callback is expected to return false if the passed option is not
supported. If one of the builtin formats is specified and the rest
options list has at least one option, we raise "option %s not
recognized" error. IOW it's the core's responsibility to ranse the
"option %s not recognized" error, which is in order to raise a
consistent error message. Also, I think the core should check the
redundant options including bultiin and custom options.

It would be good that core could check all the redundant options,
but where should core do the book-keeping of all the options? I have
no idea about this, in my implementation of pg_copy_json extension,
I handle redundant options by adding a xxx_specified field for each
xxx.

What I imagined is that while parsing the all specified options, we
evaluate builtin options and we add non-builtin options to another
list. Then when parsing a non-builtin option, we check if this option
already exists in the list. If there is, we raise the "option %s not
recognized" error.". Once we complete checking all options, we pass
each option in the list to the callback.

LGTM.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

--
Regards
Junwang Zhao

#88Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#83)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3JDPks7XU5-NvzjzuKQYQqR8pDfS7CDGZonQTXfdWtnnw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 27 Jan 2024 14:15:02 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I have been working on a *COPY TO JSON* extension since yesterday,
which is based on your V6 patch set, I'd like to give you more input
so you can make better decisions about the implementation(with only
pg-copy-arrow you might not get everything considered).

Thanks!

0009 is some changes made by me, I changed CopyToGetFormat to
CopyToSendCopyBegin because pg_copy_json need to send different bytes
in SendCopyBegin, get the format code along is not enough

Oh, I haven't cared about the case.
How about the following API instead?

static void
SendCopyBegin(CopyToState cstate)
{
StringInfoData buf;

pq_beginmessage(&buf, PqMsg_CopyOutResponse);
cstate->opts.to_routine->CopyToFillCopyOutResponse(cstate, &buf);
pq_endmessage(&buf);
cstate->copy_dest = COPY_FRONTEND;
}

static void
CopyToJsonFillCopyOutResponse(CopyToState cstate, StringInfoData &buf)
{
int16 format = 0;

pq_sendbyte(&buf, format); /* overall format */
/*
* JSON mode is always one non-binary column
*/
pq_sendint16(&buf, 1);
pq_sendint16(&buf, format);
}

00010 is the pg_copy_json extension, I think this should be a good
case which can utilize the *extendable copy format* feature

It seems that it's convenient that we have one more callback
for initializing CopyToState::opaque. It's called only once
when Copy{To,From}Routine is chosen:

typedef struct CopyToRoutine
{
void (*CopyToInit) (CopyToState cstate);
...
};

void
ProcessCopyOptions(ParseState *pstate,
CopyFormatOptions *opts_out,
bool is_from,
void *cstate,
List *options)
{
...
foreach(option, options)
{
DefElem *defel = lfirst_node(DefElem, option);

if (strcmp(defel->defname, "format") == 0)
{
...
opts_out->to_routine = &CopyToRoutineXXX;
opts_out->to_routine->CopyToInit(cstate);
...
}
}
...
}

maybe we
should delete copy_test_format if we have this extension as an
example?

I haven't read the COPY TO format json thread[1]/messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com carefully
(sorry), but we may add the JSON format as a built-in
format. If we do it, copy_test_format is useful to test the
extension API.

[1]: /messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com

Thanks,
--
kou

#89Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#88)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jan 29, 2024 at 2:03 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3JDPks7XU5-NvzjzuKQYQqR8pDfS7CDGZonQTXfdWtnnw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 27 Jan 2024 14:15:02 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I have been working on a *COPY TO JSON* extension since yesterday,
which is based on your V6 patch set, I'd like to give you more input
so you can make better decisions about the implementation(with only
pg-copy-arrow you might not get everything considered).

Thanks!

0009 is some changes made by me, I changed CopyToGetFormat to
CopyToSendCopyBegin because pg_copy_json need to send different bytes
in SendCopyBegin, get the format code along is not enough

Oh, I haven't cared about the case.
How about the following API instead?

static void
SendCopyBegin(CopyToState cstate)
{
StringInfoData buf;

pq_beginmessage(&buf, PqMsg_CopyOutResponse);
cstate->opts.to_routine->CopyToFillCopyOutResponse(cstate, &buf);
pq_endmessage(&buf);
cstate->copy_dest = COPY_FRONTEND;
}

static void
CopyToJsonFillCopyOutResponse(CopyToState cstate, StringInfoData &buf)
{
int16 format = 0;

pq_sendbyte(&buf, format); /* overall format */
/*
* JSON mode is always one non-binary column
*/
pq_sendint16(&buf, 1);
pq_sendint16(&buf, format);
}

Make sense to me.

00010 is the pg_copy_json extension, I think this should be a good
case which can utilize the *extendable copy format* feature

It seems that it's convenient that we have one more callback
for initializing CopyToState::opaque. It's called only once
when Copy{To,From}Routine is chosen:

typedef struct CopyToRoutine
{
void (*CopyToInit) (CopyToState cstate);
...
};

I like this, we can alloc private data in this hook.

void
ProcessCopyOptions(ParseState *pstate,
CopyFormatOptions *opts_out,
bool is_from,
void *cstate,
List *options)
{
...
foreach(option, options)
{
DefElem *defel = lfirst_node(DefElem, option);

if (strcmp(defel->defname, "format") == 0)
{
...
opts_out->to_routine = &CopyToRoutineXXX;
opts_out->to_routine->CopyToInit(cstate);
...
}
}
...
}

maybe we
should delete copy_test_format if we have this extension as an
example?

I haven't read the COPY TO format json thread[1] carefully
(sorry), but we may add the JSON format as a built-in
format. If we do it, copy_test_format is useful to test the
extension API.

Yeah, maybe, I have no strong opinion here, pg_copy_json is
just a toy extension for discussion.

[1] /messages/by-id/CALvfUkBxTYy5uWPFVwpk_7ii2zgT07t3d-yR_cy4sfrrLU=kcg@mail.gmail.com

Thanks,
--
kou

--
Regards
Junwang Zhao

#90Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#87)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3Jnmbjw82OiSvRK3v9XN2zSshsB8ew1mZCQDAkKq6r9YQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 29 Jan 2024 11:37:07 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.

What I imagined is that while parsing the all specified options, we
evaluate builtin options and we add non-builtin options to another
list. Then when parsing a non-builtin option, we check if this option
already exists in the list. If there is, we raise the "option %s not
recognized" error.". Once we complete checking all options, we pass
each option in the list to the callback.

I implemented this idea and the following ideas:

1. Add init callback for initialization
2. Change GetFormat() to FillCopyXXXResponse()
because JSON format always use 1 column
3. FROM only: Eliminate more cstate->opts.csv_mode branches
(This is for performance.)

See the attached v9 patch set for details. Changes since v7:

0001:

* Move CopyToProcessOption() calls to the end of
ProcessCopyOptions() for easy to option validation
* Add CopyToState::CopyToInit() and call it in
ProcessCopyOptionFormatTo()
* Change CopyToState::CopyToGetFormat() to
CopyToState::CopyToFillCopyOutResponse() and use it in
SendCopyBegin()

0002:

* Move CopyFromProcessOption() calls to the end of
ProcessCopyOptions() for easy to option validation
* Add CopyFromState::CopyFromInit() and call it in
ProcessCopyOptionFormatFrom()
* Change CopyFromState::CopyFromGetFormat() to
CopyFromState::CopyFromFillCopyOutResponse() and use it in
ReceiveCopyBegin()
* Rename NextCopyFromRawFields() to
NextCopyFromRawFieldsInternal() and pass the read
attributes callback explicitly to eliminate more
cstate->opts.csv_mode branches

Thanks,
--
kou

Attachments:

v9-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From c136833f4a385574474b246a381014abeb631377 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 26 Jan 2024 16:46:51 +0900
Subject: [PATCH v9 1/2] Extract COPY TO format implementations

This is a part of making COPY format extendable. See also these past
discussions:
* New Copy Formats - avro/orc/parquet:
  https://www.postgresql.org/message-id/flat/20180210151304.fonjztsynewldfba%40gmail.com
* Make COPY extendable in order to support Parquet and other formats:
  https://www.postgresql.org/message-id/flat/CAJ7c6TM6Bz1c3F04Cy6%2BSzuWfKmr0kU8c_3Stnvh_8BR0D6k8Q%40mail.gmail.com

This doesn't change the current behavior. This just introduces
CopyToRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyToRoutine can't be used from extensions yet because
CopySend*() aren't exported yet. Extensions can't send formatted data
to a destination without CopySend*(). They will be exported by
subsequent patches.

Here is a benchmark result with/without this change because there was
a discussion that we should care about performance regression:

https://www.postgresql.org/message-id/3741749.1655952719%40sss.pgh.pa.us

> I think that step 1 ought to be to convert the existing formats into
> plug-ins, and demonstrate that there's no significant loss of
> performance.

You can see that there is no significant loss of performance:

Data: Random 32 bit integers:

    CREATE TABLE data (int32 integer);
    SELECT setseed(0.29);
    INSERT INTO data
      SELECT random() * 10000
        FROM generate_series(1, ${n_records});

The number of records: 100K, 1M and 10M

100K without this change:

    format,elapsed time (ms)
    text,10.561
    csv,10.868
    binary,10.287

100K with this change:

    format,elapsed time (ms)
    text,9.962
    csv,10.453
    binary,9.473

1M without this change:

    format,elapsed time (ms)
    text,103.265
    csv,109.789
    binary,104.078

1M with this change:

    format,elapsed time (ms)
    text,98.612
    csv,101.908
    binary,94.456

10M without this change:

    format,elapsed time (ms)
    text,1060.614
    csv,1065.272
    binary,1025.875

10M with this change:

    format,elapsed time (ms)
    text,1020.050
    csv,1031.279
    binary,954.792
---
 contrib/file_fdw/file_fdw.c     |   2 +-
 src/backend/commands/copy.c     |  82 ++++-
 src/backend/commands/copyfrom.c |   2 +-
 src/backend/commands/copyto.c   | 587 +++++++++++++++++++++++---------
 src/include/commands/copy.h     |   8 +-
 src/include/commands/copyapi.h  |  62 ++++
 6 files changed, 560 insertions(+), 183 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 249d82d3a0..9e4e819858 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -329,7 +329,7 @@ file_fdw_validator(PG_FUNCTION_ARGS)
 	/*
 	 * Now apply the core COPY code's validation logic for more checks.
 	 */
-	ProcessCopyOptions(NULL, NULL, true, other_options);
+	ProcessCopyOptions(NULL, NULL, true, NULL, other_options);
 
 	/*
 	 * Either filename or program option is required for file_fdw foreign
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cc0786c6f4..dd0fe7f0bb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -442,6 +442,9 @@ defGetCopyOnErrorChoice(DefElem *def, ParseState *pstate, bool is_from)
  * a list of options.  In that usage, 'opts_out' can be passed as NULL and
  * the collected data is just leaked until CurrentMemoryContext is reset.
  *
+ * 'cstate' is CopyToState* for !is_from, CopyFromState* for is_from. 'cstate'
+ * may be NULL. For example, file_fdw uses NULL.
+ *
  * Note that additional checking, such as whether column names listed in FORCE
  * QUOTE actually exist, has to be applied later.  This just checks for
  * self-consistency of the options list.
@@ -450,6 +453,7 @@ void
 ProcessCopyOptions(ParseState *pstate,
 				   CopyFormatOptions *opts_out,
 				   bool is_from,
+				   void *cstate,
 				   List *options)
 {
 	bool		format_specified = false;
@@ -457,6 +461,7 @@ ProcessCopyOptions(ParseState *pstate,
 	bool		header_specified = false;
 	bool		on_error_specified = false;
 	ListCell   *option;
+	List	   *unknown_options = NIL;
 
 	/* Support external use for option sanity checking */
 	if (opts_out == NULL)
@@ -464,30 +469,58 @@ ProcessCopyOptions(ParseState *pstate,
 
 	opts_out->file_encoding = -1;
 
-	/* Extract options from the statement node tree */
+	/*
+	 * Extract only the "format" option to detect target routine as the first
+	 * step
+	 */
 	foreach(option, options)
 	{
 		DefElem    *defel = lfirst_node(DefElem, option);
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
+
+			if (is_from)
+			{
+				char	   *fmt = defGetString(defel);
+
+				if (strcmp(fmt, "text") == 0)
+					 /* default format */ ;
+				else if (strcmp(fmt, "csv") == 0)
+				{
+					opts_out->csv_mode = true;
+				}
+				else if (strcmp(fmt, "binary") == 0)
+				{
+					opts_out->binary = true;
+				}
+				else
+					ereport(ERROR,
+							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+							 errmsg("COPY format \"%s\" not recognized", fmt),
+							 parser_errposition(pstate, defel->location)));
+			}
 			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+				ProcessCopyOptionFormatTo(pstate, opts_out, cstate, defel);
 		}
+	}
+	if (!format_specified)
+		/* Set the default format. */
+		ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+
+	/*
+	 * Extract options except "format" from the statement node tree. Unknown
+	 * options are processed later.
+	 */
+	foreach(option, options)
+	{
+		DefElem    *defel = lfirst_node(DefElem, option);
+
+		if (strcmp(defel->defname, "format") == 0)
+			continue;
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
 			if (freeze_specified)
@@ -616,11 +649,7 @@ ProcessCopyOptions(ParseState *pstate,
 			opts_out->on_error = defGetCopyOnErrorChoice(defel, pstate, is_from);
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+			unknown_options = lappend(unknown_options, defel);
 	}
 
 	/*
@@ -821,6 +850,23 @@ ProcessCopyOptions(ParseState *pstate,
 					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 					 errmsg("NULL specification and DEFAULT specification cannot be the same")));
 	}
+
+	/* Process not built-in options. */
+	foreach(option, unknown_options)
+	{
+		DefElem    *defel = lfirst_node(DefElem, option);
+		bool		processed = false;
+
+		if (!is_from)
+			processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
+		if (!processed)
+			ereport(ERROR,
+					(errcode(ERRCODE_SYNTAX_ERROR),
+					 errmsg("option \"%s\" not recognized",
+							defel->defname),
+					 parser_errposition(pstate, defel->location)));
+	}
+	list_free(unknown_options);
 }
 
 /*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..fb3d4d9296 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1416,7 +1416,7 @@ BeginCopyFrom(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , cstate, options);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..4fb41f04fc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -131,6 +132,427 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToTextBased*() are
+ * shared by both of "text" and "csv". CopyToText*() are only for "text" and
+ * CopyToCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance
+ * merit when many tuples are copied. So we use separated callbacks for "text"
+ * and "csv".
+ */
+
+static void
+CopyToTextBasedInit(CopyToState cstate)
+{
+}
+
+/*
+ * All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later.
+ */
+static bool
+CopyToTextBasedProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static void
+CopyToTextBasedFillCopyOutResponse(CopyToState cstate, StringInfoData *buf)
+{
+	int16		format = 0;
+	int			natts = list_length(cstate->attnumlist);
+	int			i;
+
+	pq_sendbyte(buf, format);	/* overall format */
+	pq_sendint16(buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(buf, format);	/* per-column formats */
+}
+
+static void
+CopyToTextBasedSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+typedef void (*CopyAttributeOutHeaderFunction) (CopyToState cstate, char *string);
+
+/*
+ * We can use CopyAttributeOutText() directly but define this for consistency
+ * with CopyAttributeOutCSVHeader(). "static inline" will prevent performance
+ * penalty by this wrapping.
+ */
+static inline void
+CopyAttributeOutTextHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutCSV(cstate, string, false,
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextStart() and CopyToCSVStart() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * only once per COPY TO. So this optimization may be meaningless but done for
+ * consistency with CopyToTextBasedOneRow().
+ *
+ * This must initialize cstate->out_functions for CopyToTextBasedOneRow().
+ */
+static inline void
+CopyToTextBasedStart(CopyToState cstate, TupleDesc tupDesc, CopyAttributeOutHeaderFunction out)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			out(cstate, colname);
+		}
+
+		CopyToTextBasedSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutTextHeader);
+}
+
+static void
+CopyToCSVStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutCSVHeader);
+}
+
+typedef void (*CopyAttributeOutValueFunction) (CopyToState cstate, char *string, int attnum);
+
+static inline void
+CopyAttributeOutTextValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutCSV(cstate, string,
+						cstate->opts.force_quote_flags[attnum - 1],
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextOneRow() and CopyToCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->out_functions must be initialized in CopyToTextBasedStart().
+ */
+static void
+CopyToTextBasedOneRow(CopyToState cstate, TupleTableSlot *slot, CopyAttributeOutValueFunction out)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			out(cstate, string, attnum);
+		}
+	}
+
+	CopyToTextBasedSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutTextValue);
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutCSVValue);
+}
+
+static void
+CopyToTextBasedEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+static void
+CopyToBinaryInit(CopyToState cstate)
+{
+}
+
+/*
+ * All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later.
+ */
+static bool
+CopyToBinaryProcessOption(CopyToState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static void
+CopyToBinaryFillCopyOutResponse(CopyToState cstate, StringInfoData *buf)
+{
+	int16		format = 1;
+	int			natts = list_length(cstate->attnumlist);
+	int			i;
+
+	pq_sendbyte(buf, format);	/* overall format */
+	pq_sendint16(buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(buf, format);	/* per-column formats */
+}
+
+/*
+ * This must initialize cstate->out_functions for CopyToBinaryOneRow().
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+/*
+ * cstate->out_functions must be initialized in CopyToBinaryStart().
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextBased*() are shared with "csv". CopyToText*() are only for "text".
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToInit = CopyToTextBasedInit,
+	.CopyToProcessOption = CopyToTextBasedProcessOption,
+	.CopyToFillCopyOutResponse = CopyToTextBasedFillCopyOutResponse,
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+/*
+ * CopyToTextBased*() are shared with "text". CopyToCSV*() are only for "csv".
+ */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToInit = CopyToTextBasedInit,
+	.CopyToProcessOption = CopyToTextBasedProcessOption,
+	.CopyToFillCopyOutResponse = CopyToTextBasedFillCopyOutResponse,
+	.CopyToStart = CopyToCSVStart,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToInit = CopyToBinaryInit,
+	.CopyToProcessOption = CopyToBinaryProcessOption,
+	.CopyToFillCopyOutResponse = CopyToBinaryFillCopyOutResponse,
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Process the "format" option for COPY TO.
+ *
+ * If defel is NULL, the default format "text" is used.
+ */
+void
+ProcessCopyOptionFormatTo(ParseState *pstate,
+						  CopyFormatOptions *opts_out,
+						  CopyToState cstate,
+						  DefElem *defel)
+{
+	char	   *format;
+
+	if (defel)
+		format = defGetString(defel);
+	else
+		format = "text";
+
+	if (strcmp(format, "text") == 0)
+		opts_out->to_routine = &CopyToRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->to_routine = &CopyToRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->to_routine = &CopyToRoutineBinary;
+	}
+	else
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->to_routine->CopyToInit(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -140,15 +562,9 @@ static void
 SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
-	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
-	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
-	pq_sendbyte(&buf, format);	/* overall format */
-	pq_sendint16(&buf, natts);
-	for (i = 0; i < natts; i++)
-		pq_sendint16(&buf, format); /* per-column formats */
+	cstate->opts.to_routine->CopyToFillCopyOutResponse(cstate, &buf);
 	pq_endmessage(&buf);
 	cstate->copy_dest = COPY_FRONTEND;
 }
@@ -198,16 +614,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +648,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -431,7 +833,7 @@ BeginCopyTo(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , cstate, options);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -748,8 +1150,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1159,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1174,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1213,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1229,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..de316cfd81 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "commands/copyapi.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
@@ -87,7 +88,8 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
 
-extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
+extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, CopyToState cstate, DefElem *defel);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..f8901cac51
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,62 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/parsenodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when this CopyToRoutine is chosen. This can be used for
+	 * initialization.
+	 */
+	void		(*CopyToInit) (CopyToState cstate);
+
+	/*
+	 * Called for processing one COPY TO option. This will return false when
+	 * the given option is invalid.
+	 */
+	bool		(*CopyToProcessOption) (CopyToState cstate, DefElem *defel);
+
+	/*
+	 * Called when COPY TO via the PostgreSQL protocol is started. This must
+	 * fill buf as a valid CopyOutResponse message:
+	 *
+	 */
+	/*--
+	 * +--------+--------+--------+--------+--------+   +--------+--------+
+	 * | Format | N attributes    | Attr1's format  |...| AttrN's format  |
+	 * +--------+--------+--------+--------+--------+   +--------+--------+
+	 * 0: text                      0: text               0: text
+	 * 1: binary                    1: binary             1: binary
+	 */
+	void		(*CopyToFillCopyOutResponse) (CopyToState cstate, StringInfoData *buf);
+
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*CopyToEnd) (CopyToState cstate);
+}			CopyToRoutine;
+
+#endif							/* COPYAPI_H */
-- 
2.43.0

v9-0002-Extract-COPY-FROM-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 720cda9c40d4f2f9a6c0b2cf9be5f4526da818d1 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 26 Jan 2024 17:21:53 +0900
Subject: [PATCH v9 2/2] Extract COPY FROM format implementations

This doesn't change the current behavior. This just introduces
CopyFromRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

Note that CopyFromRoutine can't be used from extensions yet because
CopyRead*() aren't exported yet. Extensions can't read data from a
source without CopyRead*(). They will be exported by subsequent
patches.
---
 src/backend/commands/copy.c              |  31 +-
 src/backend/commands/copyfrom.c          | 300 +++++++++++++---
 src/backend/commands/copyfromparse.c     | 428 +++++++++++++----------
 src/include/commands/copy.h              |   6 +-
 src/include/commands/copyapi.h           |  46 +++
 src/include/commands/copyfrom_internal.h |   4 +
 6 files changed, 561 insertions(+), 254 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index dd0fe7f0bb..7aabed5614 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -484,32 +484,19 @@ ProcessCopyOptions(ParseState *pstate,
 			format_specified = true;
 
 			if (is_from)
-			{
-				char	   *fmt = defGetString(defel);
-
-				if (strcmp(fmt, "text") == 0)
-					 /* default format */ ;
-				else if (strcmp(fmt, "csv") == 0)
-				{
-					opts_out->csv_mode = true;
-				}
-				else if (strcmp(fmt, "binary") == 0)
-				{
-					opts_out->binary = true;
-				}
-				else
-					ereport(ERROR,
-							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-							 errmsg("COPY format \"%s\" not recognized", fmt),
-							 parser_errposition(pstate, defel->location)));
-			}
+				ProcessCopyOptionFormatFrom(pstate, opts_out, cstate, defel);
 			else
 				ProcessCopyOptionFormatTo(pstate, opts_out, cstate, defel);
 		}
 	}
 	if (!format_specified)
+	{
 		/* Set the default format. */
-		ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+		if (is_from)
+			ProcessCopyOptionFormatFrom(pstate, opts_out, cstate, NULL);
+		else
+			ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+	}
 
 	/*
 	 * Extract options except "format" from the statement node tree. Unknown
@@ -857,7 +844,9 @@ ProcessCopyOptions(ParseState *pstate,
 		DefElem    *defel = lfirst_node(DefElem, option);
 		bool		processed = false;
 
-		if (!is_from)
+		if (is_from)
+			processed = opts_out->from_routine->CopyFromProcessOption(cstate, defel);
+		else
 			processed = opts_out->to_routine->CopyToProcessOption(cstate, defel);
 		if (!processed)
 			ereport(ERROR,
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fb3d4d9296..338a885e2c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -32,6 +32,7 @@
 #include "catalog/namespace.h"
 #include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
@@ -108,6 +109,253 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromTextBased*()
+ * are shared by both of "text" and "csv". CopyFromText*() are only for "text"
+ * and CopyFromCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance merit
+ * when many tuples are copied. So we use separated callbacks for "text" and
+ * "csv".
+ */
+
+static void
+CopyFromTextBasedInit(CopyFromState cstate)
+{
+}
+
+/*
+ * All "text" and "csv" options are parsed in ProcessCopyOptions(). We may
+ * move the code to here later.
+ */
+static bool
+CopyFromTextBasedProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static void
+CopyFromTextBasedFillCopyInResponse(CopyFromState cstate, StringInfoData *buf)
+{
+	int16		format = 0;
+	int			natts = list_length(cstate->attnumlist);
+	int			i;
+
+	pq_sendbyte(buf, format);	/* overall format */
+	pq_sendint16(buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(buf, format);	/* per-column formats */
+}
+
+/*
+ * This must initialize cstate->in_functions for CopyFromTextBasedOneRow().
+ */
+static void
+CopyFromTextBasedStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextBasedEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+static void
+CopyFromBinaryInit(CopyFromState cstate)
+{
+}
+
+/*
+ * All "binary" options are parsed in ProcessCopyOptions(). We may move the
+ * code to here later.
+ */
+static bool
+CopyFromBinaryProcessOption(CopyFromState cstate, DefElem *defel)
+{
+	return false;
+}
+
+static void
+CopyFromBinaryFillCopyInResponse(CopyFromState cstate, StringInfoData *buf)
+{
+	int16		format = 1;
+	int			natts = list_length(cstate->attnumlist);
+	int			i;
+
+	pq_sendbyte(buf, format);	/* overall format */
+	pq_sendint16(buf, natts);
+	for (i = 0; i < natts; i++)
+		pq_sendint16(buf, format);	/* per-column formats */
+}
+
+/*
+ * This must initialize cstate->in_functions for CopyFromBinaryOneRow().
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromTextBased*() are shared with "csv". CopyFromText*() are only for "text".
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInit = CopyFromTextBasedInit,
+	.CopyFromProcessOption = CopyFromTextBasedProcessOption,
+	.CopyFromFillCopyInResponse = CopyFromTextBasedFillCopyInResponse,
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+/*
+ * CopyFromTextBased*() are shared with "text". CopyFromCSV*() are only for "csv".
+ */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInit = CopyFromTextBasedInit,
+	.CopyFromProcessOption = CopyFromTextBasedProcessOption,
+	.CopyFromFillCopyInResponse = CopyFromTextBasedFillCopyInResponse,
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInit = CopyFromBinaryInit,
+	.CopyFromProcessOption = CopyFromBinaryProcessOption,
+	.CopyFromFillCopyInResponse = CopyFromBinaryFillCopyInResponse,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Process the "format" option for COPY FROM.
+ *
+ * If defel is NULL, the default format "text" is used.
+ */
+void
+ProcessCopyOptionFormatFrom(ParseState *pstate,
+							CopyFormatOptions *opts_out,
+							CopyFromState cstate,
+							DefElem *defel)
+{
+	char	   *format;
+
+	if (defel)
+		format = defGetString(defel);
+	else
+		format = "text";
+
+	if (strcmp(format, "text") == 0)
+		opts_out->from_routine = &CopyFromRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		opts_out->from_routine = &CopyFromRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		opts_out->from_routine = &CopyFromRoutineBinary;
+	}
+	else
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->from_routine->CopyFromInit(cstate);
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1384,9 +1632,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1571,25 +1816,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1608,8 +1834,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1621,15 +1845,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1689,8 +1904,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1763,20 +1976,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->opts.from_routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1789,6 +1989,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->opts.from_routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..f6b130458b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,15 +171,9 @@ void
 ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
-	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
-	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
-	pq_sendbyte(&buf, format);	/* overall format */
-	pq_sendint16(&buf, natts);
-	for (i = 0; i < natts; i++)
-		pq_sendint16(&buf, format); /* per-column formats */
+	cstate->opts.from_routine->CopyFromFillCopyInResponse(cstate, &buf);
 	pq_endmessage(&buf);
 	cstate->copy_src = COPY_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
@@ -740,8 +734,19 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+typedef int (*CopyReadAttributes) (CopyFromState cstate);
+
 /*
- * Read raw fields in the next line for COPY FROM in text or csv mode.
+ * Read raw fields in the next line for COPY FROM in text or csv
+ * mode. CopyReadAttributesText() must be used for text mode and
+ * CopyReadAttributesCSV() for csv mode. This inconvenient is for
+ * optimization. If "if (cstate->opts.csv_mode)" branch is removed, there is
+ * performance merit for COPY FROM with many tuples.
+ *
+ * NextCopyFromRawFields() can be used instead for convenience
+ * use. NextCopyFromRawFields() chooses CopyReadAttributesText() or
+ * CopyReadAttributesCSV() internally.
+ *
  * Return false if no more lines.
  *
  * An internal temporary buffer is returned via 'fields'. It is valid until
@@ -751,8 +756,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, CopyReadAttributes copy_read_attributes)
 {
 	int			fldct;
 	bool		done;
@@ -775,11 +780,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
-				fldct = CopyReadAttributesCSV(cstate);
-			else
-				fldct = CopyReadAttributesText(cstate);
-
+			fldct = copy_read_attributes(cstate);
 			if (fldct != list_length(cstate->attnumlist))
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -830,16 +831,240 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		return false;
 
 	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
-		fldct = CopyReadAttributesCSV(cstate);
-	else
-		fldct = CopyReadAttributesText(cstate);
+	fldct = copy_read_attributes(cstate);
 
 	*fields = cstate->raw_fields;
 	*nfields = fldct;
 	return true;
 }
 
+/*
+ * See NextCopyFromRawFieldsInternal() for details.
+ */
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	if (cstate->opts.csv_mode)
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesCSV);
+	else
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesText);
+}
+
+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);
+
+static inline char *
+PostpareColumnValueText(CopyFromState cstate, char *string, int m)
+{
+	/* do nothing */
+	return string;
+}
+
+static inline char *
+PostpareColumnValueCSV(CopyFromState cstate, char *string, int m)
+{
+	if (string == NULL &&
+		cstate->opts.force_notnull_flags[m])
+	{
+		/*
+		 * FORCE_NOT_NULL option is set and column is NULL - convert it to the
+		 * NULL string.
+		 */
+		string = cstate->opts.null_print;
+	}
+	else if (string != NULL && cstate->opts.force_null_flags[m]
+			 && strcmp(string, cstate->opts.null_print) == 0)
+	{
+		/*
+		 * FORCE_NULL option is set and column matches the NULL string. It
+		 * must have been quoted, or otherwise the string would already have
+		 * been set to NULL. Convert it to NULL as specified.
+		 */
+		string = NULL;
+	}
+	return string;
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyFromTextOneRow() and CopyFromCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->in_functions must be initialized in CopyFromTextBasedStart().
+ */
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls, CopyReadAttributes copy_read_attributes, PostpareColumnValue postpare_column_value)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings, &fldct, copy_read_attributes))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		string = postpare_column_value(cstate, string, m);
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, CopyReadAttributesText, PostpareColumnValueText);
+}
+
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, CopyReadAttributesCSV, PostpareColumnValueCSV);
+}
+
+/*
+ * cstate->in_functions must be initialized in CopyFromBinaryStart().
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -857,181 +1082,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->opts.from_routine->CopyFromOneRow(cstate, econtext, values,
+												   nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index de316cfd81..cab05a0aa0 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -75,12 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyFromRoutine *from_routine;	/* callback routines for COPY
+												 * FROM */
 	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -89,6 +88,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   uint64 *processed);
 
 extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, void *cstate, List *options);
+extern void ProcessCopyOptionFormatFrom(ParseState *pstate, CopyFormatOptions *opts_out, CopyFromState cstate, DefElem *defel);
 extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, CopyToState cstate, DefElem *defel);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index f8901cac51..9f5a4958aa 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,8 +15,54 @@
 #define COPYAPI_H
 
 #include "executor/tuptable.h"
+#include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+/* Routines for a COPY FROM format implementation. */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when this CopyFromRoutine is chosen. This can be used for
+	 * initialization.
+	 */
+	void		(*CopyFromInit) (CopyFromState cstate);
+
+	/*
+	 * Called for processing one COPY FROM option. This will return false when
+	 * the given option is invalid.
+	 */
+	bool		(*CopyFromProcessOption) (CopyFromState cstate, DefElem *defel);
+
+	/*
+	 * Called when COPY FROM via the PostgreSQL protocol is started. This must
+	 * fill buf as a valid CopyInResponse message:
+	 *
+	 */
+	/*--
+	 * +--------+--------+--------+--------+--------+   +--------+--------+
+	 * | Format | N attributes    | Attr1's format  |...| AttrN's format  |
+	 * +--------+--------+--------+--------+--------+   +--------+--------+
+	 * 0: text                      0: text               0: text
+	 * 1: binary                    1: binary             1: binary
+	 */
+	void		(*CopyFromFillCopyInResponse) (CopyFromState cstate, StringInfoData *buf);
+
+	/*
+	 * Called when COPY FROM is started. This will initialize something and
+	 * receive a header.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/* Copy one row. It returns false if no more tuples. */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
+	/* Called when COPY FROM is ended. This will finalize something. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+}			CopyFromRoutine;
+
 /* This is private in commands/copyto.c */
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..096b55011e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,4 +183,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.43.0

#91Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#90)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jan 29, 2024 at 6:45 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3Jnmbjw82OiSvRK3v9XN2zSshsB8ew1mZCQDAkKq6r9YQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 29 Jan 2024 11:37:07 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Does it make sense to pass only non-builtin options to the custom
format callback after parsing and evaluating the builtin options? That
is, we parse and evaluate only the builtin options and populate
opts_out first, then pass each rest option to the custom format
handler callback. The callback can refer to the builtin option values.

What I imagined is that while parsing the all specified options, we
evaluate builtin options and we add non-builtin options to another
list. Then when parsing a non-builtin option, we check if this option
already exists in the list. If there is, we raise the "option %s not
recognized" error.". Once we complete checking all options, we pass
each option in the list to the callback.

I implemented this idea and the following ideas:

1. Add init callback for initialization
2. Change GetFormat() to FillCopyXXXResponse()
because JSON format always use 1 column
3. FROM only: Eliminate more cstate->opts.csv_mode branches
(This is for performance.)

See the attached v9 patch set for details. Changes since v7:

0001:

* Move CopyToProcessOption() calls to the end of
ProcessCopyOptions() for easy to option validation
* Add CopyToState::CopyToInit() and call it in
ProcessCopyOptionFormatTo()
* Change CopyToState::CopyToGetFormat() to
CopyToState::CopyToFillCopyOutResponse() and use it in
SendCopyBegin()

Thank you for updating the patch! Here are comments on 0001 patch:

---
+        if (!format_specified)
+                /* Set the default format. */
+                ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+

I think we can pass "text" in this case instead of NULL. That way,
ProcessCopyOptionFormatTo doesn't need to handle NULL case.

We need curly brackets for this "if branch" as follows:

if (!format_specifed)
{
/* Set the default format. */
ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
}

---
+        /* Process not built-in options. */
+        foreach(option, unknown_options)
+        {
+                DefElem    *defel = lfirst_node(DefElem, option);
+                bool           processed = false;
+
+                if (!is_from)
+                        processed =
opts_out->to_routine->CopyToProcessOption(cstate, defel);
+                if (!processed)
+                        ereport(ERROR,
+                                        (errcode(ERRCODE_SYNTAX_ERROR),
+                                         errmsg("option \"%s\" not recognized",
+                                                        defel->defname),
+                                         parser_errposition(pstate,
defel->location)));
+        }
+        list_free(unknown_options);

I think we can check the duplicated options in the core as we discussed.

---
+static void
+CopyToTextBasedInit(CopyToState cstate)
+{
+}

and

+static void
+CopyToBinaryInit(CopyToState cstate)
+{
+}

Do we really need separate callbacks for the same behavior? I think we
can have a common init function say CopyToBuitinInit() that does
nothing. Or we can make the init callback optional.

The same is true for process-option callback.

---
         List      *convert_select; /* list of column names (can be NIL) */
+        const          CopyToRoutine *to_routine;      /* callback
routines for COPY TO */
 } CopyFormatOptions;

I think CopyToStateData is a better place to have CopyToRoutine.
copy_data_dest_cb is also there.

---
-                        if (strcmp(fmt, "text") == 0)
-                                 /* default format */ ;
-                        else if (strcmp(fmt, "csv") == 0)
-                                opts_out->csv_mode = true;
-                        else if (strcmp(fmt, "binary") == 0)
-                                opts_out->binary = true;
+
+                        if (is_from)
+                        {
+                                char      *fmt = defGetString(defel);
+
+                                if (strcmp(fmt, "text") == 0)
+                                         /* default format */ ;
+                                else if (strcmp(fmt, "csv") == 0)
+                                {
+                                        opts_out->csv_mode = true;
+                                }
+                                else if (strcmp(fmt, "binary") == 0)
+                                {
+                                        opts_out->binary = true;
+                                }
                         else
-                                ereport(ERROR,
-
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                                 errmsg("COPY format
\"%s\" not recognized", fmt\),
-
parser_errposition(pstate, defel->location)));
+                                ProcessCopyOptionFormatTo(pstate,
opts_out, cstate, defel);

The 0002 patch replaces the options checks with
ProcessCopyOptionFormatFrom(). However, both
ProcessCopyOptionFormatTo() and ProcessCOpyOptionFormatFrom() would
set format-related options such as opts_out->csv_mode etc, which seems
not elegant. IIUC the reason why we process only the "format" option
first is to set the callback functions and call the init callback. So
I think we don't necessarily need to do both setting callbacks and
setting format-related options together. Probably we can do only the
callback stuff first and then set format-related options in the
original place we used to do?

---
+static void
+CopyToTextBasedFillCopyOutResponse(CopyToState cstate, StringInfoData *buf)
+{
+        int16          format = 0;
+        int                    natts = list_length(cstate->attnumlist);
+        int                    i;
+
+        pq_sendbyte(buf, format);      /* overall format */
+        pq_sendint16(buf, natts);
+        for (i = 0; i < natts; i++)
+                pq_sendint16(buf, format);     /* per-column formats */
+}

This function and CopyToBinaryFillCopyOutResponse() fill three things:
overall format, the number of columns, and per-column formats. While
this approach is flexible, extensions will have to understand the
format of CopyOutResponse message. An alternative is to have one or
more callbacks that return these three things.

---
+        /* Get info about the columns we need to process. */
+        cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs *
sizeof(Fmgr\Info));
+        foreach(cur, cstate->attnumlist)
+        {
+                int                    attnum = lfirst_int(cur);
+                Oid                    out_func_oid;
+                bool           isvarlena;
+                Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+                getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+                fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+        }

Is preparing the out functions an extension's responsibility? I
thought the core could prepare them based on the overall format
specified by extensions, as long as the overall format matches the
actual data format to send. What do you think?

---
+        /*
+         * Called when COPY TO via the PostgreSQL protocol is
started. This must
+         * fill buf as a valid CopyOutResponse message:
+         *
+         */
+        /*--
+         * +--------+--------+--------+--------+--------+   +--------+--------+
+         * | Format | N attributes    | Attr1's format  |...| AttrN's format  |
+         * +--------+--------+--------+--------+--------+   +--------+--------+
+         * 0: text                      0: text               0: text
+         * 1: binary                    1: binary             1: binary
+         */

I think this kind of diagram could be missed from being updated when
we update the CopyOutResponse format. It's better to refer to the
documentation instead.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#92Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#91)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBmNiWwrspuedgAPgbAqsn7e7NoZYF6gNnYBf+gXEk9Mg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 30 Jan 2024 11:11:59 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

---
+        if (!format_specified)
+                /* Set the default format. */
+                ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+

I think we can pass "text" in this case instead of NULL. That way,
ProcessCopyOptionFormatTo doesn't need to handle NULL case.

Yes, we can do it. But it needs a DefElem allocation. Is it
acceptable?

We need curly brackets for this "if branch" as follows:

if (!format_specifed)
{
/* Set the default format. */
ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
}

Oh, sorry. I assumed that pgindent adjusts the style too.

---
+        /* Process not built-in options. */
+        foreach(option, unknown_options)
+        {
+                DefElem    *defel = lfirst_node(DefElem, option);
+                bool           processed = false;
+
+                if (!is_from)
+                        processed =
opts_out->to_routine->CopyToProcessOption(cstate, defel);
+                if (!processed)
+                        ereport(ERROR,
+                                        (errcode(ERRCODE_SYNTAX_ERROR),
+                                         errmsg("option \"%s\" not recognized",
+                                                        defel->defname),
+                                         parser_errposition(pstate,
defel->location)));
+        }
+        list_free(unknown_options);

I think we can check the duplicated options in the core as we discussed.

Oh, sorry. I missed the part. I'll implement it.

---
+static void
+CopyToTextBasedInit(CopyToState cstate)
+{
+}

and

+static void
+CopyToBinaryInit(CopyToState cstate)
+{
+}

Do we really need separate callbacks for the same behavior? I think we
can have a common init function say CopyToBuitinInit() that does
nothing. Or we can make the init callback optional.

The same is true for process-option callback.

OK. I'll make them optional.

---
List      *convert_select; /* list of column names (can be NIL) */
+        const          CopyToRoutine *to_routine;      /* callback
routines for COPY TO */
} CopyFormatOptions;

I think CopyToStateData is a better place to have CopyToRoutine.
copy_data_dest_cb is also there.

We can do it but ProcessCopyOptions() accepts NULL
CopyToState for file_fdw. Can we create an empty
CopyToStateData internally like we did for opts_out in
ProcessCopyOptions()? (But it requires exporting
CopyToStateData. We'll export it in a later patch but it's
not yet in 0001.)

The 0002 patch replaces the options checks with
ProcessCopyOptionFormatFrom(). However, both
ProcessCopyOptionFormatTo() and ProcessCOpyOptionFormatFrom() would
set format-related options such as opts_out->csv_mode etc, which seems
not elegant. IIUC the reason why we process only the "format" option
first is to set the callback functions and call the init callback. So
I think we don't necessarily need to do both setting callbacks and
setting format-related options together. Probably we can do only the
callback stuff first and then set format-related options in the
original place we used to do?

If we do it, we need to write the (strcmp(format, "csv") ==
0) condition in copyto.c and copy.c. I wanted to avoid it. I
think that the duplication (setting opts_out->csv_mode in
copyto.c and copyfrom.c) is not a problem. But it's not a
strong opinion. If (strcmp(format, "csv") == 0) duplication
is better than opts_out->csv_mode = true duplication, I'll
do it.

BTW, if we want to make the CSV format implementation more
modularized, we will remove opts_out->csv_mode, move CSV
related options to CopyToCSVProcessOption() and keep CSV
related options in its opaque space. For example,
opts_out->force_quote exists in COPY TO opaque space but
doesn't exist in COPY FROM opaque space because it's not
used in COPY FROM.

+static void
+CopyToTextBasedFillCopyOutResponse(CopyToState cstate, StringInfoData *buf)
+{
+        int16          format = 0;
+        int                    natts = list_length(cstate->attnumlist);
+        int                    i;
+
+        pq_sendbyte(buf, format);      /* overall format */
+        pq_sendint16(buf, natts);
+        for (i = 0; i < natts; i++)
+                pq_sendint16(buf, format);     /* per-column formats */
+}

This function and CopyToBinaryFillCopyOutResponse() fill three things:
overall format, the number of columns, and per-column formats. While
this approach is flexible, extensions will have to understand the
format of CopyOutResponse message. An alternative is to have one or
more callbacks that return these three things.

Yes, we can choose the approach. I don't have a strong
opinion on which approach to choose.

+        /* Get info about the columns we need to process. */
+        cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs *
sizeof(Fmgr\Info));
+        foreach(cur, cstate->attnumlist)
+        {
+                int                    attnum = lfirst_int(cur);
+                Oid                    out_func_oid;
+                bool           isvarlena;
+                Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+                getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+                fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+        }

Is preparing the out functions an extension's responsibility? I
thought the core could prepare them based on the overall format
specified by extensions, as long as the overall format matches the
actual data format to send. What do you think?

Hmm. I want to keep the preparation as an extension's
responsibility. Because it's not needed for all formats. For
example, Apache Arrow FORMAT doesn't need it. And JSON
FORMAT doesn't need it too because it use
composite_to_json().

+        /*
+         * Called when COPY TO via the PostgreSQL protocol is
started. This must
+         * fill buf as a valid CopyOutResponse message:
+         *
+         */
+        /*--
+         * +--------+--------+--------+--------+--------+   +--------+--------+
+         * | Format | N attributes    | Attr1's format  |...| AttrN's format  |
+         * +--------+--------+--------+--------+--------+   +--------+--------+
+         * 0: text                      0: text               0: text
+         * 1: binary                    1: binary             1: binary
+         */

I think this kind of diagram could be missed from being updated when
we update the CopyOutResponse format. It's better to refer to the
documentation instead.

It makes sense. I couldn't find the documentation when I
wrote it but I found it now...:
https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY

Is there recommended comment style to refer a documentation?
"See doc/src/sgml/protocol.sgml for the CopyOutResponse
message details" is OK?

Thanks,
--
kou

#93Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#92)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jan 30, 2024 at 02:45:31PM +0900, Sutou Kouhei wrote:

In <CAD21AoBmNiWwrspuedgAPgbAqsn7e7NoZYF6gNnYBf+gXEk9Mg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 30 Jan 2024 11:11:59 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

---
+        if (!format_specified)
+                /* Set the default format. */
+                ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+

I think we can pass "text" in this case instead of NULL. That way,
ProcessCopyOptionFormatTo doesn't need to handle NULL case.

Yes, we can do it. But it needs a DefElem allocation. Is it
acceptable?

I don't think that there is a need for a DelElem at all here? While I
am OK with the choice of calling CopyToInit() in the
ProcessCopyOption*() routines that exist to keep the set of callbacks
local to copyto.c and copyfrom.c, I think that this should not bother
about setting opts_out->csv_mode or opts_out->csv_mode but just set
the opts_out->{to,from}_routine callbacks.

+static void
+CopyToTextBasedInit(CopyToState cstate)
+{
+}

and

+static void
+CopyToBinaryInit(CopyToState cstate)
+{
+}

Do we really need separate callbacks for the same behavior? I think we
can have a common init function say CopyToBuitinInit() that does
nothing. Or we can make the init callback optional.

Keeping empty options does not strike as a bad idea, because this
forces extension developers to think about this code path rather than
just ignore it. Now, all the Init() callbacks are empty for the
in-core callbacks, so I think that we should just remove it entirely
for now. Let's keep the core patch a maximum simple. It is always
possible to build on top of it depending on what people need. It's
been mentioned that JSON would want that, but this also proves that we
just don't care about that for all the in-core callbacks, as well. I
would choose a minimalistic design for now.

+        /* Get info about the columns we need to process. */
+        cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs *
sizeof(Fmgr\Info));
+        foreach(cur, cstate->attnumlist)
+        {
+                int                    attnum = lfirst_int(cur);
+                Oid                    out_func_oid;
+                bool           isvarlena;
+                Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+                getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+                fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+        }

Is preparing the out functions an extension's responsibility? I
thought the core could prepare them based on the overall format
specified by extensions, as long as the overall format matches the
actual data format to send. What do you think?

Hmm. I want to keep the preparation as an extension's
responsibility. Because it's not needed for all formats. For
example, Apache Arrow FORMAT doesn't need it. And JSON
FORMAT doesn't need it too because it use
composite_to_json().

I agree that it could be really useful for extensions to be able to
force that. We already know that for the in-core formats we've cared
about being able to enforce the way data is handled in input and
output.

It makes sense. I couldn't find the documentation when I
wrote it but I found it now...:
https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY

Is there recommended comment style to refer a documentation?
"See doc/src/sgml/protocol.sgml for the CopyOutResponse
message details" is OK?

There are a couple of places in the C code where we refer to SGML docs
when it comes to specific details, so using a method like that here to
avoid a duplication with the docs sounds sensible for me.

I would be really tempted to put my hands on this patch to put into
shape a minimal set of changes because I'm caring quite a lot about
the performance gains reported with the removal of the "if" checks in
the per-row callbacks, and that's one goal of this thread quite
independent on the extensibility. Sutou-san, would you be OK with
that?
--
Michael

#94Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#93)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbijVn9_51mljMAG@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 30 Jan 2024 16:20:54 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

+        if (!format_specified)
+                /* Set the default format. */
+                ProcessCopyOptionFormatTo(pstate, opts_out, cstate, NULL);
+

I think we can pass "text" in this case instead of NULL. That way,
ProcessCopyOptionFormatTo doesn't need to handle NULL case.

Yes, we can do it. But it needs a DefElem allocation. Is it
acceptable?

I don't think that there is a need for a DelElem at all here?

We use defel->location for an error message. (We don't need
to set location for the default "text" DefElem.)

While I
am OK with the choice of calling CopyToInit() in the
ProcessCopyOption*() routines that exist to keep the set of callbacks
local to copyto.c and copyfrom.c, I think that this should not bother
about setting opts_out->csv_mode or opts_out->csv_mode but just set
the opts_out->{to,from}_routine callbacks.

OK. I'll keep opts_out->{csv_mode,binary} in copy.c.

Now, all the Init() callbacks are empty for the
in-core callbacks, so I think that we should just remove it entirely
for now. Let's keep the core patch a maximum simple. It is always
possible to build on top of it depending on what people need. It's
been mentioned that JSON would want that, but this also proves that we
just don't care about that for all the in-core callbacks, as well. I
would choose a minimalistic design for now.

OK. Let's remove Init() callbacks from the first patch set.

I would be really tempted to put my hands on this patch to put into
shape a minimal set of changes because I'm caring quite a lot about
the performance gains reported with the removal of the "if" checks in
the per-row callbacks, and that's one goal of this thread quite
independent on the extensibility. Sutou-san, would you be OK with
that?

Yes, sure.
(We want to focus on the performance gains in the first
patch set and then focus on extensibility again, right?)

For the purpose, I think that the v7 patch set is more
suitable than the v9 patch set. The v7 patch set doesn't
include Init() callbacks, custom options validation support
or extra Copy{In,Out}Response support. But the v7 patch set
misses the removal of the "if" checks in
NextCopyFromRawFields() that exists in the v9 patch set. I'm
not sure how much performance will improve by this but it
may be worth a try.

Can I prepare the v10 patch set as "the v7 patch set" + "the
removal of the "if" checks in NextCopyFromRawFields()"?
(+ reverting opts_out->{csv_mode,binary} changes in
ProcessCopyOptions().)

Thanks,
--
kou

#95Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#94)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jan 30, 2024 at 05:15:11PM +0900, Sutou Kouhei wrote:

We use defel->location for an error message. (We don't need
to set location for the default "text" DefElem.)

Yeah, but you should not need to have this error in the paths that set
the callback routines in opts_out if the same validation happens a few
lines before, in copy.c.

Yes, sure.
(We want to focus on the performance gains in the first
patch set and then focus on extensibility again, right?)

Yep, exactly, the numbers are too good to just ignore. I don't want
to hijack the thread, but I am really worried about the complexities
this thread is getting into because we are trying to shape the
callbacks in the most generic way possible based on *two* use cases.
This is going to be a never-ending discussion. I'd rather get some
simple basics, and then we can discuss if tweaking the callbacks is
really necessary or not. Even after introducing the pg_proc lookups
to get custom callbacks.

For the purpose, I think that the v7 patch set is more
suitable than the v9 patch set. The v7 patch set doesn't
include Init() callbacks, custom options validation support
or extra Copy{In,Out}Response support. But the v7 patch set
misses the removal of the "if" checks in
NextCopyFromRawFields() that exists in the v9 patch set. I'm
not sure how much performance will improve by this but it
may be worth a try.

Yeah.. The custom options don't seem like an absolute strong
requirement for the first shot with the callbacks or even the
possibility to retrieve the callbacks from a function call. I mean,
you could provide some control with SET commands and a few GUCs, at
least, even if that would be strange. Manipulations with a list of
DefElems is the intuitive way to have custom options at query level,
but we also have to guess the set of callbacks from this list of
DefElems coming from the query. You see my point, I am not sure
if it would be the best thing to process twice the options, especially
when it comes to decide if a DefElem should be valid or not depending
on the callbacks used. Or we could use a kind of "special" DefElem
where we could store a set of key:value fed to a callback :)

Can I prepare the v10 patch set as "the v7 patch set" + "the
removal of the "if" checks in NextCopyFromRawFields()"?
(+ reverting opts_out->{csv_mode,binary} changes in
ProcessCopyOptions().)

Yep, if I got it that would make sense to me. If you can do that,
that would help quite a bit. :)
--
Michael

#96Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#95)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <Zbi1TwPfAvUpKqTd@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 30 Jan 2024 17:37:35 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

We use defel->location for an error message. (We don't need
to set location for the default "text" DefElem.)

Yeah, but you should not need to have this error in the paths that set
the callback routines in opts_out if the same validation happens a few
lines before, in copy.c.

Ah, yes. defel->location is used in later patches. For
example, it's used when a COPY handler for the specified
FORMAT isn't found.

I am really worried about the complexities
this thread is getting into because we are trying to shape the
callbacks in the most generic way possible based on *two* use cases.
This is going to be a never-ending discussion. I'd rather get some
simple basics, and then we can discuss if tweaking the callbacks is
really necessary or not. Even after introducing the pg_proc lookups
to get custom callbacks.

I understand your concern. Let's introduce minimal callbacks
as the first step. I think that we completed our design
discussion for this feature. We can choose minimal callbacks
based on the discussion.

The custom options don't seem like an absolute strong
requirement for the first shot with the callbacks or even the
possibility to retrieve the callbacks from a function call. I mean,
you could provide some control with SET commands and a few GUCs, at
least, even if that would be strange. Manipulations with a list of
DefElems is the intuitive way to have custom options at query level,
but we also have to guess the set of callbacks from this list of
DefElems coming from the query. You see my point, I am not sure
if it would be the best thing to process twice the options, especially
when it comes to decide if a DefElem should be valid or not depending
on the callbacks used. Or we could use a kind of "special" DefElem
where we could store a set of key:value fed to a callback :)

Interesting. Let's remove custom options support from the
initial minimal callbacks.

Can I prepare the v10 patch set as "the v7 patch set" + "the
removal of the "if" checks in NextCopyFromRawFields()"?
(+ reverting opts_out->{csv_mode,binary} changes in
ProcessCopyOptions().)

Yep, if I got it that would make sense to me. If you can do that,
that would help quite a bit. :)

I've prepared the v10 patch set. Could you try this?

Changes since the v7 patch set:

0001:

* Remove CopyToProcessOption() callback
* Remove CopyToGetFormat() callback
* Revert passing CopyToState to ProcessCopyOptions()
* Revert moving "opts_out->{csv_mode,binary} = true" to
ProcessCopyOptionFormatTo()
* Change to receive "const char *format" instead "DefElem *defel"
by ProcessCopyOptionFormatTo()

0002:

* Remove CopyFromProcessOption() callback
* Remove CopyFromGetFormat() callback
* Change to receive "const char *format" instead "DefElem
*defel" by ProcessCopyOptionFormatFrom()
* Remove "if (cstate->opts.csv_mode)" branches from
NextCopyFromRawFields()

FYI: Here are Copy{From,To}Routine in the v10 patch set. I
think that only Copy{From,To}OneRow are minimal callbacks
for the performance gain. But can we keep Copy{From,To}Start
and Copy{From,To}End for consistency? We can remove a few
{csv_mode,binary} conditions by Copy{From,To}{Start,End}. It
doesn't depend on the number of COPY target tuples. So they
will not affect performance.

/* Routines for a COPY FROM format implementation. */
typedef struct CopyFromRoutine
{
/*
* Called when COPY FROM is started. This will initialize something and
* receive a header.
*/
void (*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);

/* Copy one row. It returns false if no more tuples. */
bool (*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);

/* Called when COPY FROM is ended. This will finalize something. */
void (*CopyFromEnd) (CopyFromState cstate);
} CopyFromRoutine;

/* Routines for a COPY TO format implementation. */
typedef struct CopyToRoutine
{
/* Called when COPY TO is started. This will send a header. */
void (*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);

/* Copy one row for COPY TO. */
void (*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);

/* Called when COPY TO is ended. This will send a trailer. */
void (*CopyToEnd) (CopyToState cstate);
} CopyToRoutine;

Thanks,
--
kou

Attachments:

v10-0001-Extract-COPY-TO-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From f827f1f1632dc330ef5d78141b85df8ca1bce63b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 31 Jan 2024 13:22:04 +0900
Subject: [PATCH v10 1/2] Extract COPY TO format implementations

This doesn't change the current behavior. This just introduces
CopyToRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

This is for performance. We can remove "if (cstate->opts.csv_mode)"
and "if (!cstate->opts.binary)" branches in CopyOneRowTo() by using
callbacks for each format. It improves performance.
---
 src/backend/commands/copy.c    |   8 +
 src/backend/commands/copyto.c  | 494 +++++++++++++++++++++++----------
 src/include/commands/copy.h    |   6 +-
 src/include/commands/copyapi.h |  35 +++
 4 files changed, 389 insertions(+), 154 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cc0786c6f4..c88510f8c7 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -487,6 +487,8 @@ ProcessCopyOptions(ParseState *pstate,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
 						 parser_errposition(pstate, defel->location)));
+			if (!is_from)
+				ProcessCopyOptionFormatTo(pstate, opts_out, fmt);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -622,6 +624,12 @@ ProcessCopyOptions(ParseState *pstate,
 							defel->defname),
 					 parser_errposition(pstate, defel->location)));
 	}
+	if (!format_specified)
+	{
+		/* Set the default format. */
+		if (!is_from)
+			ProcessCopyOptionFormatTo(pstate, opts_out, "text");
+	}
 
 	/*
 	 * Check for incompatible options (must do these two before inserting
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..70a28ab44d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -131,6 +131,345 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToTextBased*() are
+ * shared by both of "text" and "csv". CopyToText*() are only for "text" and
+ * CopyToCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance
+ * merit when many tuples are copied. So we use separated callbacks for "text"
+ * and "csv".
+ */
+
+static void
+CopyToTextBasedSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+typedef void (*CopyAttributeOutHeaderFunction) (CopyToState cstate, char *string);
+
+/*
+ * We can use CopyAttributeOutText() directly but define this for consistency
+ * with CopyAttributeOutCSVHeader(). "static inline" will prevent performance
+ * penalty by this wrapping.
+ */
+static inline void
+CopyAttributeOutTextHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutCSV(cstate, string, false,
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextStart() and CopyToCSVStart() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * only once per COPY TO. So this optimization may be meaningless but done for
+ * consistency with CopyToTextBasedOneRow().
+ *
+ * This must initialize cstate->out_functions for CopyToTextBasedOneRow().
+ */
+static inline void
+CopyToTextBasedStart(CopyToState cstate, TupleDesc tupDesc, CopyAttributeOutHeaderFunction out)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			out(cstate, colname);
+		}
+
+		CopyToTextBasedSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutTextHeader);
+}
+
+static void
+CopyToCSVStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutCSVHeader);
+}
+
+typedef void (*CopyAttributeOutValueFunction) (CopyToState cstate, char *string, int attnum);
+
+static inline void
+CopyAttributeOutTextValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutCSV(cstate, string,
+						cstate->opts.force_quote_flags[attnum - 1],
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextOneRow() and CopyToCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->out_functions must be initialized in CopyToTextBasedStart().
+ */
+static void
+CopyToTextBasedOneRow(CopyToState cstate, TupleTableSlot *slot, CopyAttributeOutValueFunction out)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			out(cstate, string, attnum);
+		}
+	}
+
+	CopyToTextBasedSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutTextValue);
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutCSVValue);
+}
+
+static void
+CopyToTextBasedEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * This must initialize cstate->out_functions for CopyToBinaryOneRow().
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+/*
+ * cstate->out_functions must be initialized in CopyToBinaryStart().
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextBased*() are shared with "csv". CopyToText*() are only for "text".
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+/*
+ * CopyToTextBased*() are shared with "text". CopyToCSV*() are only for "csv".
+ */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToCSVStart,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Process the FORMAT option for COPY TO.
+ *
+ * 'format' must be "text", "csv" or "binary".
+ */
+void
+ProcessCopyOptionFormatTo(ParseState *pstate,
+						  CopyFormatOptions *opts_out,
+						  const char *format)
+{
+	if (strcmp(format, "text") == 0)
+		opts_out->to_routine = &CopyToRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->to_routine = &CopyToRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->to_routine = &CopyToRoutineBinary;
+	}
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +537,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +571,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -748,8 +1073,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1082,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1097,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->opts.to_routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1136,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->opts.to_routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1152,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->opts.to_routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..18486a3715 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "commands/copyapi.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
@@ -88,6 +89,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   uint64 *processed);
 
 extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, const char *format);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..2f9ecd0e2b
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,35 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/* Routines for a COPY TO format implementation. */
+typedef struct CopyToRoutine
+{
+	/* Called when COPY TO is started. This will send a header. */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/* Copy one row for COPY TO. */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO is ended. This will send a trailer. */
+	void		(*CopyToEnd) (CopyToState cstate);
+}			CopyToRoutine;
+
+#endif							/* COPYAPI_H */
-- 
2.43.0

v10-0002-Extract-COPY-FROM-format-implementations.patchtext/x-patch; charset=us-asciiDownload
From 9487884f2c0a8976945778821abd850418b6623c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 31 Jan 2024 13:37:02 +0900
Subject: [PATCH v10 2/2] Extract COPY FROM format implementations

This doesn't change the current behavior. This just introduces
CopyFromRoutine, which just has function pointers of format
implementation like TupleTableSlotOps, and use it for existing "text",
"csv" and "binary" format implementations.

This is for performance. We can remove "if (cstate->opts.csv_mode)"
and "if (!cstate->opts.binary)" branches in NextCopyFrom() by using
callbacks for each format. It improves performance.
---
 src/backend/commands/copy.c              |   8 +-
 src/backend/commands/copyfrom.c          | 217 +++++++++---
 src/backend/commands/copyfromparse.c     | 420 +++++++++++++----------
 src/include/commands/copy.h              |   6 +-
 src/include/commands/copyapi.h           |  20 ++
 src/include/commands/copyfrom_internal.h |   4 +
 6 files changed, 447 insertions(+), 228 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index c88510f8c7..cd79e614b9 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -487,7 +487,9 @@ ProcessCopyOptions(ParseState *pstate,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
 						 parser_errposition(pstate, defel->location)));
-			if (!is_from)
+			if (is_from)
+				ProcessCopyOptionFormatFrom(pstate, opts_out, fmt);
+			else
 				ProcessCopyOptionFormatTo(pstate, opts_out, fmt);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
@@ -627,7 +629,9 @@ ProcessCopyOptions(ParseState *pstate,
 	if (!format_specified)
 	{
 		/* Set the default format. */
-		if (!is_from)
+		if (is_from)
+			ProcessCopyOptionFormatFrom(pstate, opts_out, "text");
+		else
 			ProcessCopyOptionFormatTo(pstate, opts_out, "text");
 	}
 
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..b51096fc0d 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,171 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromTextBased*()
+ * are shared by both of "text" and "csv". CopyFromText*() are only for "text"
+ * and CopyFromCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance merit
+ * when many tuples are copied. So we use separated callbacks for "text" and
+ * "csv".
+ */
+
+/*
+ * This must initialize cstate->in_functions for CopyFromTextBasedOneRow().
+ */
+static void
+CopyFromTextBasedStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextBasedEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * This must initialize cstate->in_functions for CopyFromBinaryOneRow().
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Pick up the required catalog information for each attribute in the
+	 * relation, including the input function, the element type (to pass to
+	 * the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+}
+
+/*
+ * CopyFromTextBased*() are shared with "csv". CopyFromText*() are only for "text".
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+/*
+ * CopyFromTextBased*() are shared with "text". CopyFromCSV*() are only for "csv".
+ */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromStart = CopyFromTextBasedStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextBasedEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Process the FORMAT option for COPY FROM.
+ *
+ * 'format' must be "text", "csv" or "binary".
+ */
+void
+ProcessCopyOptionFormatFrom(ParseState *pstate,
+							CopyFormatOptions *opts_out,
+							const char *format)
+{
+	if (strcmp(format, "text") == 0)
+		opts_out->from_routine = &CopyFromRoutineText;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->from_routine = &CopyFromRoutineCSV;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->from_routine = &CopyFromRoutineBinary;
+	}
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1384,9 +1549,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1571,25 +1733,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1608,8 +1751,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1621,15 +1762,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1689,8 +1821,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1763,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->opts.from_routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1789,6 +1906,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->opts.from_routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..658d2429a9 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -740,8 +740,19 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+typedef int (*CopyReadAttributes) (CopyFromState cstate);
+
 /*
- * Read raw fields in the next line for COPY FROM in text or csv mode.
+ * Read raw fields in the next line for COPY FROM in text or csv
+ * mode. CopyReadAttributesText() must be used for text mode and
+ * CopyReadAttributesCSV() for csv mode. This inconvenient is for
+ * optimization. If "if (cstate->opts.csv_mode)" branch is removed, there is
+ * performance merit for COPY FROM with many tuples.
+ *
+ * NextCopyFromRawFields() can be used instead for convenience
+ * use. NextCopyFromRawFields() chooses CopyReadAttributesText() or
+ * CopyReadAttributesCSV() internally.
+ *
  * Return false if no more lines.
  *
  * An internal temporary buffer is returned via 'fields'. It is valid until
@@ -751,8 +762,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, CopyReadAttributes copy_read_attributes)
 {
 	int			fldct;
 	bool		done;
@@ -775,11 +786,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
-				fldct = CopyReadAttributesCSV(cstate);
-			else
-				fldct = CopyReadAttributesText(cstate);
-
+			fldct = copy_read_attributes(cstate);
 			if (fldct != list_length(cstate->attnumlist))
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -830,16 +837,240 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		return false;
 
 	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
-		fldct = CopyReadAttributesCSV(cstate);
-	else
-		fldct = CopyReadAttributesText(cstate);
+	fldct = copy_read_attributes(cstate);
 
 	*fields = cstate->raw_fields;
 	*nfields = fldct;
 	return true;
 }
 
+/*
+ * See NextCopyFromRawFieldsInternal() for details.
+ */
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	if (cstate->opts.csv_mode)
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesCSV);
+	else
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesText);
+}
+
+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);
+
+static inline char *
+PostpareColumnValueText(CopyFromState cstate, char *string, int m)
+{
+	/* do nothing */
+	return string;
+}
+
+static inline char *
+PostpareColumnValueCSV(CopyFromState cstate, char *string, int m)
+{
+	if (string == NULL &&
+		cstate->opts.force_notnull_flags[m])
+	{
+		/*
+		 * FORCE_NOT_NULL option is set and column is NULL - convert it to the
+		 * NULL string.
+		 */
+		string = cstate->opts.null_print;
+	}
+	else if (string != NULL && cstate->opts.force_null_flags[m]
+			 && strcmp(string, cstate->opts.null_print) == 0)
+	{
+		/*
+		 * FORCE_NULL option is set and column matches the NULL string. It
+		 * must have been quoted, or otherwise the string would already have
+		 * been set to NULL. Convert it to NULL as specified.
+		 */
+		string = NULL;
+	}
+	return string;
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyFromTextOneRow() and CopyFromCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->in_functions must be initialized in CopyFromTextBasedStart().
+ */
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls, CopyReadAttributes copy_read_attributes, PostpareColumnValue postpare_column_value)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings, &fldct, copy_read_attributes))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		string = postpare_column_value(cstate, string, m);
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, CopyReadAttributesText, PostpareColumnValueText);
+}
+
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, CopyReadAttributesCSV, PostpareColumnValueCSV);
+}
+
+/*
+ * cstate->in_functions must be initialized in CopyFromBinaryStart().
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -857,181 +1088,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->opts.from_routine->CopyFromOneRow(cstate, econtext, values,
+												   nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 18486a3715..799219c9ae 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -75,12 +75,11 @@ typedef struct CopyFormatOptions
 	bool		convert_selectively;	/* do selective binary conversion? */
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const		CopyFromRoutine *from_routine;	/* callback routines for COPY
+												 * FROM */
 	const		CopyToRoutine *to_routine;	/* callback routines for COPY TO */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
@@ -89,6 +88,7 @@ extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   uint64 *processed);
 
 extern void ProcessCopyOptions(ParseState *pstate, CopyFormatOptions *opts_out, bool is_from, List *options);
+extern void ProcessCopyOptionFormatFrom(ParseState *pstate, CopyFormatOptions *opts_out, const char *format);
 extern void ProcessCopyOptionFormatTo(ParseState *pstate, CopyFormatOptions *opts_out, const char *format);
 extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *whereClause,
 								   const char *filename,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2f9ecd0e2b..38406a8447 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,26 @@
 #define COPYAPI_H
 
 #include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+/* Routines for a COPY FROM format implementation. */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started. This will initialize something and
+	 * receive a header.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/* Copy one row. It returns false if no more tuples. */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
+	/* Called when COPY FROM is ended. This will finalize something. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+}			CopyFromRoutine;
 
 /* This is private in commands/copyto.c */
 typedef struct CopyToStateData *CopyToState;
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..096b55011e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -183,4 +183,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.43.0

#97Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#96)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 31, 2024 at 02:11:22PM +0900, Sutou Kouhei wrote:

Ah, yes. defel->location is used in later patches. For
example, it's used when a COPY handler for the specified
FORMAT isn't found.

I see.

I've prepared the v10 patch set. Could you try this?

Thanks, I'm looking into that now.

FYI: Here are Copy{From,To}Routine in the v10 patch set. I
think that only Copy{From,To}OneRow are minimal callbacks
for the performance gain. But can we keep Copy{From,To}Start
and Copy{From,To}End for consistency? We can remove a few
{csv_mode,binary} conditions by Copy{From,To}{Start,End}. It
doesn't depend on the number of COPY target tuples. So they
will not affect performance.

I think I'm OK to keep the start/end callbacks. This makes the code
more consistent as a whole, as well.
--
Michael

#98Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#97)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jan 31, 2024 at 02:39:54PM +0900, Michael Paquier wrote:

Thanks, I'm looking into that now.

I have much to say about the patch, but for now I have begun running
some performance tests using the patches, because this thread won't
get far until we are sure that the callbacks do not impact performance
in some kind of worst-case scenario. First, here is what I used to
setup a set of tables used for COPY FROM and COPY TO (requires [1]https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am -- Michael to
feed COPY FROM's data to the void, and note that default values is to
have a strict control on the size of the StringInfos used in the copy
paths):
CREATE EXTENSION blackhole_am;
CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
-- Tables used for COPY TO
SELECT create_table_cols ('to_tab_1', 1);
SELECT create_table_cols ('to_tab_10', 10);
INSERT INTO to_tab_1 SELECT FROM generate_series(1, 10000000);
INSERT INTO to_tab_10 SELECT FROM generate_series(1, 10000000);
-- Data for COPY FROM
COPY to_tab_1 TO '/tmp/to_tab_1.bin' WITH (format binary);
COPY to_tab_10 TO '/tmp/to_tab_10.bin' WITH (format binary);
COPY to_tab_1 TO '/tmp/to_tab_1.txt' WITH (format text);
COPY to_tab_10 TO '/tmp/to_tab_10.txt' WITH (format text);
-- Tables used for COPY FROM
SELECT create_table_cols ('from_tab_1', 1);
SELECT create_table_cols ('from_tab_10', 10);
ALTER TABLE from_tab_1 SET ACCESS METHOD blackhole_am;
ALTER TABLE from_tab_10 SET ACCESS METHOD blackhole_am;

Then I have run a set of tests using HEAD, v7 and v10 with queries
like that (adapt them depending on the format and table):
COPY to_tab_1 TO '/dev/null' WITH (FORMAT text) \watch count=5
SET client_min_messages TO error; -- for blackhole_am
COPY from_tab_1 FROM '/tmp/to_tab_1.txt' with (FORMAT 'text') \watch count=5
COPY from_tab_1 FROM '/tmp/to_tab_1.bin' with (FORMAT 'binary') \watch count=5

All the patches have been compiled with -O2, without assertions, etc.
Postgres is run in tmpfs mode, on scissors, without fsync. Unlogged
tables help a bit in focusing on the execution paths as we don't care
about WAL, of course. I have also included v7 in the test of tests,
as this version uses more simple per-row callbacks.

And here are the results I get for text and binary (ms, average of 15
queries after discarding the three highest and three lowest values):
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 1575 | 1546 | 1575
from_bin_10col | 5364 | 5208 | 5230
from_text_1col | 1690 | 1715 | 1684
from_text_10col | 4875 | 4793 | 4757
to_bin_1col | 1717 | 1730 | 1731
to_bin_10col | 7728 | 7707 | 7513
to_text_1col | 1710 | 1730 | 1698
to_text_10col | 5998 | 5960 | 5987

I am getting an interesting trend here in terms of a speedup between
HEAD and the patches with a table that has 10 attributes filled with
integers, especially for binary and text with COPY FROM. COPY TO
binary also gets nice numbers, while text looks rather stable. Hmm.

These were on my buildfarm animal, but we need to be more confident
about all this. Could more people run these tests? I am going to do
a second session on a local machine I have at hand and see what
happens. Will publish the numbers here, the method will be the same.

[1]: https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am -- Michael
--
Michael

#99Junwang Zhao
zhjwpku@gmail.com
In reply to: Michael Paquier (#98)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Michael,

On Thu, Feb 1, 2024 at 9:58 AM Michael Paquier <michael@paquier.xyz> wrote:

On Wed, Jan 31, 2024 at 02:39:54PM +0900, Michael Paquier wrote:

Thanks, I'm looking into that now.

I have much to say about the patch, but for now I have begun running
some performance tests using the patches, because this thread won't
get far until we are sure that the callbacks do not impact performance
in some kind of worst-case scenario. First, here is what I used to
setup a set of tables used for COPY FROM and COPY TO (requires [1] to
feed COPY FROM's data to the void, and note that default values is to
have a strict control on the size of the StringInfos used in the copy
paths):
CREATE EXTENSION blackhole_am;
CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
-- Tables used for COPY TO
SELECT create_table_cols ('to_tab_1', 1);
SELECT create_table_cols ('to_tab_10', 10);
INSERT INTO to_tab_1 SELECT FROM generate_series(1, 10000000);
INSERT INTO to_tab_10 SELECT FROM generate_series(1, 10000000);
-- Data for COPY FROM
COPY to_tab_1 TO '/tmp/to_tab_1.bin' WITH (format binary);
COPY to_tab_10 TO '/tmp/to_tab_10.bin' WITH (format binary);
COPY to_tab_1 TO '/tmp/to_tab_1.txt' WITH (format text);
COPY to_tab_10 TO '/tmp/to_tab_10.txt' WITH (format text);
-- Tables used for COPY FROM
SELECT create_table_cols ('from_tab_1', 1);
SELECT create_table_cols ('from_tab_10', 10);
ALTER TABLE from_tab_1 SET ACCESS METHOD blackhole_am;
ALTER TABLE from_tab_10 SET ACCESS METHOD blackhole_am;

Then I have run a set of tests using HEAD, v7 and v10 with queries
like that (adapt them depending on the format and table):
COPY to_tab_1 TO '/dev/null' WITH (FORMAT text) \watch count=5
SET client_min_messages TO error; -- for blackhole_am
COPY from_tab_1 FROM '/tmp/to_tab_1.txt' with (FORMAT 'text') \watch count=5
COPY from_tab_1 FROM '/tmp/to_tab_1.bin' with (FORMAT 'binary') \watch count=5

All the patches have been compiled with -O2, without assertions, etc.
Postgres is run in tmpfs mode, on scissors, without fsync. Unlogged
tables help a bit in focusing on the execution paths as we don't care
about WAL, of course. I have also included v7 in the test of tests,
as this version uses more simple per-row callbacks.

And here are the results I get for text and binary (ms, average of 15
queries after discarding the three highest and three lowest values):
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 1575 | 1546 | 1575
from_bin_10col | 5364 | 5208 | 5230
from_text_1col | 1690 | 1715 | 1684
from_text_10col | 4875 | 4793 | 4757
to_bin_1col | 1717 | 1730 | 1731
to_bin_10col | 7728 | 7707 | 7513
to_text_1col | 1710 | 1730 | 1698
to_text_10col | 5998 | 5960 | 5987

I am getting an interesting trend here in terms of a speedup between
HEAD and the patches with a table that has 10 attributes filled with
integers, especially for binary and text with COPY FROM. COPY TO
binary also gets nice numbers, while text looks rather stable. Hmm.

These were on my buildfarm animal, but we need to be more confident
about all this. Could more people run these tests? I am going to do
a second session on a local machine I have at hand and see what
happens. Will publish the numbers here, the method will be the same.

[1]: https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am
--
Michael

I'm running the benchmark, but I got some strong numbers:

postgres=# \timing
Timing is on.
postgres=# COPY to_tab_10 TO '/dev/null' WITH (FORMAT binary) \watch count=15
COPY 10000000
Time: 3168.497 ms (00:03.168)
COPY 10000000
Time: 3255.464 ms (00:03.255)
COPY 10000000
Time: 3270.625 ms (00:03.271)
COPY 10000000
Time: 3285.112 ms (00:03.285)
COPY 10000000
Time: 3322.304 ms (00:03.322)
COPY 10000000
Time: 3341.328 ms (00:03.341)
COPY 10000000
Time: 3621.564 ms (00:03.622)
COPY 10000000
Time: 3700.911 ms (00:03.701)
COPY 10000000
Time: 3717.992 ms (00:03.718)
COPY 10000000
Time: 3708.350 ms (00:03.708)
COPY 10000000
Time: 3704.367 ms (00:03.704)
COPY 10000000
Time: 3724.281 ms (00:03.724)
COPY 10000000
Time: 3703.335 ms (00:03.703)
COPY 10000000
Time: 3728.629 ms (00:03.729)
COPY 10000000
Time: 3758.135 ms (00:03.758)

The first 6 rounds are like 10% better than the later 9 rounds, is this normal?

--
Regards
Junwang Zhao

#100Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#98)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 01, 2024 at 10:57:58AM +0900, Michael Paquier wrote:

And here are the results I get for text and binary (ms, average of 15
queries after discarding the three highest and three lowest values):
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 1575 | 1546 | 1575
from_bin_10col | 5364 | 5208 | 5230
from_text_1col | 1690 | 1715 | 1684
from_text_10col | 4875 | 4793 | 4757
to_bin_1col | 1717 | 1730 | 1731
to_bin_10col | 7728 | 7707 | 7513
to_text_1col | 1710 | 1730 | 1698
to_text_10col | 5998 | 5960 | 5987

Here are some numbers from a second local machine:
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 508 | 467 | 461
from_bin_10col | 2192 | 2083 | 2098
from_text_1col | 510 | 499 | 517
from_text_10col | 1970 | 1678 | 1654
to_bin_1col | 575 | 577 | 573
to_bin_10col | 2680 | 2678 | 2722
to_text_1col | 516 | 506 | 527
to_text_10col | 2250 | 2245 | 2235

This is confirming a speedup with COPY FROM for both text and binary,
with more impact with a larger number of attributes. That's harder to
conclude about COPY TO in both cases, but at least I'm not seeing any
regression even with some variance caused by what looks like noise.
We need more numbers from more people. Sutou-san or Sawada-san, or
any volunteers?
--
Michael

#101Michael Paquier
michael@paquier.xyz
In reply to: Junwang Zhao (#99)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 01, 2024 at 11:43:07AM +0800, Junwang Zhao wrote:

The first 6 rounds are like 10% better than the later 9 rounds, is this normal?

Even with HEAD? Perhaps you have some OS cache eviction in play here?
FWIW, I'm not seeing any of that with longer runs after 7~ tries in a
loop of 15.
--
Michael

#102Junwang Zhao
zhjwpku@gmail.com
In reply to: Michael Paquier (#101)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 1, 2024 at 11:56 AM Michael Paquier <michael@paquier.xyz> wrote:

On Thu, Feb 01, 2024 at 11:43:07AM +0800, Junwang Zhao wrote:

The first 6 rounds are like 10% better than the later 9 rounds, is this normal?

Even with HEAD? Perhaps you have some OS cache eviction in play here?
FWIW, I'm not seeing any of that with longer runs after 7~ tries in a
loop of 15.

Yeah, with HEAD. I'm on ubuntu 22.04, I did not change any gucs, maybe I should
set a higher shared_buffers? But I dought that's related ;(

--
Michael

--
Regards
Junwang Zhao

#103Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#100)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Thanks for preparing benchmark.

In <ZbsU53b3eEV-mMT3@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 1 Feb 2024 12:49:59 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

On Thu, Feb 01, 2024 at 10:57:58AM +0900, Michael Paquier wrote:

And here are the results I get for text and binary (ms, average of 15
queries after discarding the three highest and three lowest values):
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 1575 | 1546 | 1575
from_bin_10col | 5364 | 5208 | 5230
from_text_1col | 1690 | 1715 | 1684
from_text_10col | 4875 | 4793 | 4757
to_bin_1col | 1717 | 1730 | 1731
to_bin_10col | 7728 | 7707 | 7513
to_text_1col | 1710 | 1730 | 1698
to_text_10col | 5998 | 5960 | 5987

Here are some numbers from a second local machine:
test | master | v7 | v10
-----------------+--------+------+------
from_bin_1col | 508 | 467 | 461
from_bin_10col | 2192 | 2083 | 2098
from_text_1col | 510 | 499 | 517
from_text_10col | 1970 | 1678 | 1654
to_bin_1col | 575 | 577 | 573
to_bin_10col | 2680 | 2678 | 2722
to_text_1col | 516 | 506 | 527
to_text_10col | 2250 | 2245 | 2235

This is confirming a speedup with COPY FROM for both text and binary,
with more impact with a larger number of attributes. That's harder to
conclude about COPY TO in both cases, but at least I'm not seeing any
regression even with some variance caused by what looks like noise.
We need more numbers from more people. Sutou-san or Sawada-san, or
any volunteers?

Here are some numbers on my local machine (Note that my
local machine isn't suitable for benchmark as I said
before. Each number is median of "\watch 15" results):

1:
direction format n_columns master v7 v10
to text 1 1077.254 1016.953 1028.434
to csv 1 1079.88 1055.545 1053.95
to binary 1 1051.247 1033.93 1003.44
to text 10 4373.168 3980.442 3955.94
to csv 10 4753.842 4719.2 4677.643
to binary 10 4598.374 4431.238 4285.757
from text 1 875.729 916.526 869.283
from csv 1 909.355 1001.277 918.655
from binary 1 872.943 907.778 859.433
from text 10 2594.429 2345.292 2587.603
from csv 10 2968.972 3039.544 2964.468
from binary 10 3072.01 3109.267 3093.983

2:
direction format n_columns master v7 v10
to text 1 1061.908 988.768 978.291
to csv 1 1095.109 1037.015 1041.613
to binary 1 1076.992 1000.212 983.318
to text 10 4336.517 3901.833 3841.789
to csv 10 4679.411 4640.975 4570.774
to binary 10 4465.04 4508.063 4261.749
from text 1 866.689 917.54 830.417
from csv 1 917.973 1695.401 871.991
from binary 1 841.104 1422.012 820.786
from text 10 2523.607 3147.738 2517.505
from csv 10 2917.018 3042.685 2950.338
from binary 10 2998.051 3128.542 3018.954

3:
direction format n_columns master v7 v10
to text 1 1021.168 1031.183 962.945
to csv 1 1076.549 1069.661 1060.258
to binary 1 1024.611 1022.143 975.768
to text 10 4327.24 3936.703 4049.893
to csv 10 4620.436 4531.676 4685.672
to binary 10 4457.165 4390.992 4301.463
from text 1 887.532 907.365 888.892
from csv 1 945.167 1012.29 895.921
from binary 1 853.06 854.652 849.661
from text 10 2660.509 2304.256 2527.071
from csv 10 2913.644 2968.204 2935.081
from binary 10 3020.812 3081.162 3090.803

I'll measure again on my local machine later. I'll stop
other processes such as Web browser, editor and so on as
much as possible when I do.

Thanks,
--
kou

#104Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#103)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 02, 2024 at 12:19:51AM +0900, Sutou Kouhei wrote:

Here are some numbers on my local machine (Note that my
local machine isn't suitable for benchmark as I said
before. Each number is median of "\watch 15" results):

I'll measure again on my local machine later. I'll stop
other processes such as Web browser, editor and so on as
much as possible when I do.

Thanks for compiling some numbers. This is showing a lot of variance.
Expecially, these two lines in table 2 are showing surprising results
for v7:
direction format n_columns master v7 v10
from csv 1 917.973 1695.401 871.991
from binary 1 841.104 1422.012 820.786

I am going to try to plug in some rusage() calls in the backend for
the COPY paths. I hope that gives more precision about the backend
activity. I'll post that with more numbers.
--
Michael

#105Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#104)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbwSRsCqVS638Xjz@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 06:51:02 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

On Fri, Feb 02, 2024 at 12:19:51AM +0900, Sutou Kouhei wrote:

Here are some numbers on my local machine (Note that my
local machine isn't suitable for benchmark as I said
before. Each number is median of "\watch 15" results):

I'll measure again on my local machine later. I'll stop
other processes such as Web browser, editor and so on as
much as possible when I do.

Thanks for compiling some numbers. This is showing a lot of variance.
Expecially, these two lines in table 2 are showing surprising results
for v7:
direction format n_columns master v7 v10
from csv 1 917.973 1695.401 871.991
from binary 1 841.104 1422.012 820.786

Here are more numbers:

1:
direction format n_columns master v7 v10
to text 1 1053.844 978.998 956.575
to csv 1 1091.316 1020.584 1098.314
to binary 1 1034.685 969.224 980.458
to text 10 4216.264 3886.515 4111.417
to csv 10 4649.228 4530.882 4682.988
to binary 10 4219.228 4189.99 4211.942
from text 1 851.697 896.968 890.458
from csv 1 890.229 936.231 887.15
from binary 1 784.407 817.07 938.736
from text 10 2549.056 2233.899 2630.892
from csv 10 2809.441 2868.411 2895.196
from binary 10 2985.674 3027.522 3397.5

2:
direction format n_columns master v7 v10
to text 1 1013.764 1011.968 940.855
to csv 1 1060.431 1065.468 1040.68
to binary 1 1013.652 1009.956 965.675
to text 10 4411.484 4031.571 3896.836
to csv 10 4739.625 4715.81 4631.002
to binary 10 4374.077 4357.942 4227.215
from text 1 955.078 922.346 866.222
from csv 1 1040.717 986.524 905.657
from binary 1 849.316 864.859 833.152
from text 10 2703.209 2361.651 2533.992
from csv 10 2990.35 3059.167 2930.632
from binary 10 3008.375 3368.714 3055.723

3:
direction format n_columns master v7 v10
to text 1 1084.756 1003.822 994.409
to csv 1 1092.4 1062.536 1079.027
to binary 1 1046.774 994.168 993.633
to text 10 4363.51 3978.205 4124.359
to csv 10 4866.762 4616.001 4715.052
to binary 10 4382.412 4363.269 4213.456
from text 1 852.976 907.315 860.749
from csv 1 925.187 962.632 897.833
from binary 1 824.997 897.046 828.231
from text 10 2591.07 2358.541 2540.431
from csv 10 2907.033 3018.486 2915.997
from binary 10 3069.027 3209.21 3119.128

Other processes are stopped while I measure them. But I'm
not sure these numbers are more reliable than before...

I am going to try to plug in some rusage() calls in the backend for
the COPY paths. I hope that gives more precision about the backend
activity. I'll post that with more numbers.

Thanks. It'll help us.

--
kou

#106Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#104)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 02, 2024 at 06:51:02AM +0900, Michael Paquier wrote:

I am going to try to plug in some rusage() calls in the backend for
the COPY paths. I hope that gives more precision about the backend
activity. I'll post that with more numbers.

And here they are with log_statement_stats enabled to get rusage() fot
these queries:
test | user_s | system_s | elapsed_s
----------------------+----------+----------+-----------
head_to_bin_1col | 1.639761 | 0.007998 | 1.647762
v7_to_bin_1col | 1.645499 | 0.004003 | 1.649498
v10_to_bin_1col | 1.639466 | 0.004008 | 1.643488

head_to_bin_10col | 7.486369 | 0.056007 | 7.542485
v7_to_bin_10col | 7.314341 | 0.039990 | 7.354743
v10_to_bin_10col | 7.329355 | 0.052007 | 7.381408

head_to_text_1col | 1.581140 | 0.012000 | 1.593166
v7_to_text_1col | 1.615441 | 0.003992 | 1.619446
v10_to_text_1col | 1.613443 | 0.000000 | 1.613454

head_to_text_10col | 5.897014 | 0.011990 | 5.909063
v7_to_text_10col | 5.722872 | 0.016014 | 5.738979
v10_to_text_10col | 5.762286 | 0.011993 | 5.774265

head_from_bin_1col | 1.524038 | 0.020000 | 1.544046
v7_from_bin_1col | 1.551367 | 0.016015 | 1.567408
v10_from_bin_1col | 1.560087 | 0.016001 | 1.576115

head_from_bin_10col | 5.238444 | 0.139993 | 5.378595
v7_from_bin_10col | 5.170503 | 0.076021 | 5.246588
v10_from_bin_10col | 5.106496 | 0.112020 | 5.218565

head_from_text_1col | 1.664124 | 0.003998 | 1.668172
v7_from_text_1col | 1.720616 | 0.007990 | 1.728617
v10_from_text_1col | 1.683950 | 0.007990 | 1.692098

head_from_text_10col | 4.859651 | 0.015996 | 4.875747
v7_from_text_10col | 4.775975 | 0.032000 | 4.808051
v10_from_text_10col | 4.737512 | 0.028012 | 4.765522
(24 rows)

I'm looking at this table, and what I can see is still a lot of
variance in the tests with tables involving 1 attribute. However, a
second thing stands out to me here: there is a speedup with the
10-attribute case for all both COPY FROM and COPY TO, and both
formats. The data posted at [1]/messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz -- Michael is showing me the same trend. In
short, let's move on with this split refactoring with the per-row
callbacks. That clearly shows benefits.

[1]: /messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz -- Michael
--
Michael

#107Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#105)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 02, 2024 at 09:40:56AM +0900, Sutou Kouhei wrote:

Thanks. It'll help us.

I have done a review of v10, see v11 attached which is still WIP, with
the patches for COPY TO and COPY FROM merged together. Note that I'm
thinking to merge them into a single commit.

@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
     bool        convert_selectively;    /* do selective binary conversion? */
     CopyOnErrorChoice on_error; /* what to do when error happened */
     List       *convert_select; /* list of column names (can be NIL) */
+    const        CopyToRoutine *to_routine;    /* callback routines for COPY TO */
 } CopyFormatOptions;

Adding the routines to the structure for the format options is in my
opinion incorrect. The elements of this structure are first processed
in the option deparsing path, and then we need to use the options to
guess which routines we need. A more natural location is cstate
itself, so as the pointer to the routines is isolated within copyto.c
and copyfrom_internal.h. My point is: the routines are an
implementation detail that the centralized copy.c has no need to know
about. This also led to a strange separation with
ProcessCopyOptionFormatFrom() and ProcessCopyOptionFormatTo() to fit
the hole in-between.

The separation between cstate and the format-related fields could be
much better, though I am not sure if it is worth doing as it
introduces more duplication. For example, max_fields and raw_fields
are specific to text and csv, while binary does not care much.
Perhaps this is just useful to be for custom formats.

copyapi.h needs more documentation, like what is expected for
extension developers when using these, what are the arguments, etc. I
have added what I had in mind for now.

+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);

CopyReadAttributes and PostpareColumnValue are also callbacks specific
to text and csv, except that they are used within the per-row
callbacks. The same can be said about CopyAttributeOutHeaderFunction.
It seems to me that it would be less confusing to store pointers to
them in the routine structures, where the final picture involves not
having multiple layers of APIs like CopyToCSVStart,
CopyAttributeOutTextValue, etc. These *have* to be documented
properly in copyapi.h, and this is much easier now that cstate stores
the routine pointers. That would also make simpler function stacks.
Note that I have not changed that in the v11 attached.

This business with the extra callbacks required for csv and text is my
main point of contention, but I'd be OK once the model of the APIs is
more linear, with everything in Copy{From,To}State. The changes would
be rather simple, and I'd be OK to put my hands on it. Just,
Sutou-san, would you agree with my last point about these extra
callbacks?
--
Michael

Attachments:

v11-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 7aca58d0f7adfd146d287059b1d11b47acdfa758 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 31 Jan 2024 13:37:02 +0900
Subject: [PATCH v11] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           |  82 ++++
 src/include/commands/copyfrom_internal.h |   8 +
 src/backend/commands/copyfrom.c          | 219 +++++++---
 src/backend/commands/copyfromparse.c     | 439 ++++++++++++--------
 src/backend/commands/copyto.c            | 496 ++++++++++++++++-------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 870 insertions(+), 376 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..3c0a6ba7a1
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,82 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data
+	 * needs to be copied.  This can be used for any initialization steps
+	 * required by a format, including setting cstate->in_functions and/or
+	 * cstate->typioparams.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the
+	 * data is read.  This can be used for any initialization steps required
+	 * by a format, including setting cstate->out_functions.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..d7de2d9d11 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +187,8 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..cad6f04182 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,170 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations.
+ */
+
+/*
+ * CopyFromRoutine implementation for "text" and "csv". CopyFromTextBased*()
+ * are shared by both of "text" and "csv". CopyFromText*() are only for "text"
+ * and CopyFromCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance merit
+ * when many tuples are copied. So we use separated callbacks for "text" and
+ * "csv".
+ */
+
+/*
+ * This must initialize cstate->in_functions for CopyFromTextBasedOneRow().
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Assign the required catalog information for each attribute in the
+	 * relation, including the input function and the element type (to pass
+	 * to the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeInputInfo(att->atttypid,
+						 &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryStart
+ *
+ * This must initialize cstate->in_functions for CopyFromBinaryOneRow().
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	num_phys_attrs = tupDesc->natts;
+
+	/*
+	 * Assign the required catalog information for each attribute in the
+	 * relation, including the input function and the element type (to pass
+	 * to the input function).
+	 */
+	cstate->in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	cstate->typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
+
+	for (int attnum = 1; attnum <= num_phys_attrs; attnum++)
+	{
+		Form_pg_attribute att = TupleDescAttr(tupDesc, attnum - 1);
+		Oid			in_func_oid;
+
+		/* We don't need info for dropped attributes */
+		if (att->attisdropped)
+			continue;
+
+		/* Fetch the input function and typioparam info */
+		getTypeBinaryInputInfo(att->atttypid,
+							   &in_func_oid, &cstate->typioparams[attnum - 1]);
+		fmgr_info(in_func_oid, &cstate->in_functions[attnum - 1]);
+	}
+
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Callback routines assigned to each format.
+ *
+ * Note that start and end callbacks are shared for CSV and text, while
+ * the per-row callback is kept separated.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1384,9 +1548,6 @@ BeginCopyFrom(ParseState *pstate,
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
 				num_defaults;
-	FmgrInfo   *in_functions;
-	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1579,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1735,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1608,8 +1753,6 @@ BeginCopyFrom(ParseState *pstate,
 	 * the input function), and info about defaults and constraints. (Which
 	 * input function we use depends on text/binary format choice.)
 	 */
-	in_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	typioparams = (Oid *) palloc(num_phys_attrs * sizeof(Oid));
 	defmap = (int *) palloc(num_phys_attrs * sizeof(int));
 	defexprs = (ExprState **) palloc(num_phys_attrs * sizeof(ExprState *));
 
@@ -1621,15 +1764,6 @@ BeginCopyFrom(ParseState *pstate,
 		if (att->attisdropped)
 			continue;
 
-		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
 
@@ -1689,8 +1823,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
-	cstate->in_functions = in_functions;
-	cstate->typioparams = typioparams;
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
@@ -1763,20 +1895,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1789,6 +1908,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..bac8b0b250 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -740,8 +740,19 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+typedef int (*CopyReadAttributes) (CopyFromState cstate);
+
 /*
- * Read raw fields in the next line for COPY FROM in text or csv mode.
+ * Read raw fields in the next line for COPY FROM in text or csv
+ * mode. CopyReadAttributesText() must be used for text mode and
+ * CopyReadAttributesCSV() for csv mode. This inconvenient is for
+ * optimization. If "if (cstate->opts.csv_mode)" branch is removed, there is
+ * performance merit for COPY FROM with many tuples.
+ *
+ * NextCopyFromRawFields() can be used instead for convenience
+ * use. NextCopyFromRawFields() chooses CopyReadAttributesText() or
+ * CopyReadAttributesCSV() internally.
+ *
  * Return false if no more lines.
  *
  * An internal temporary buffer is returned via 'fields'. It is valid until
@@ -751,8 +762,10 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate,
+							  char ***fields, int *nfields,
+							  CopyReadAttributes copy_read_attributes)
 {
 	int			fldct;
 	bool		done;
@@ -775,11 +788,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
-				fldct = CopyReadAttributesCSV(cstate);
-			else
-				fldct = CopyReadAttributesText(cstate);
-
+			fldct = copy_read_attributes(cstate);
 			if (fldct != list_length(cstate->attnumlist))
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -830,16 +839,254 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		return false;
 
 	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
-		fldct = CopyReadAttributesCSV(cstate);
-	else
-		fldct = CopyReadAttributesText(cstate);
+	fldct = copy_read_attributes(cstate);
 
 	*fields = cstate->raw_fields;
 	*nfields = fldct;
 	return true;
 }
 
+/*
+ * See NextCopyFromRawFieldsInternal() for details.
+ */
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	if (cstate->opts.csv_mode)
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesCSV);
+	else
+		return NextCopyFromRawFieldsInternal(cstate, fields, nfields, CopyReadAttributesText);
+}
+
+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);
+
+static inline char *
+PostpareColumnValueText(CopyFromState cstate, char *string, int m)
+{
+	/* do nothing */
+	return string;
+}
+
+static inline char *
+PostpareColumnValueCSV(CopyFromState cstate, char *string, int m)
+{
+	if (string == NULL &&
+		cstate->opts.force_notnull_flags[m])
+	{
+		/*
+		 * FORCE_NOT_NULL option is set and column is NULL - convert it to the
+		 * NULL string.
+		 */
+		string = cstate->opts.null_print;
+	}
+	else if (string != NULL && cstate->opts.force_null_flags[m]
+			 && strcmp(string, cstate->opts.null_print) == 0)
+	{
+		/*
+		 * FORCE_NULL option is set and column matches the NULL string. It
+		 * must have been quoted, or otherwise the string would already have
+		 * been set to NULL. Convert it to NULL as specified.
+		 */
+		string = NULL;
+	}
+	return string;
+}
+
+/*
+ * CopyFromTextBasedOneRow
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * This function is not directly used as a callback; it is CopyFromTextOneRow()
+ * and CopyFromCSVOneRow()'s responsibility to do that instead.  This eliminates
+ * "if" branches with csv_mode, which is an optimization that matters for
+ * performance as these callbacks are called once per tuple.
+ */
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate,
+						ExprContext *econtext,
+						Datum *values,
+						bool *nulls,
+						CopyReadAttributes copy_read_attributes,
+						PostpareColumnValue postpare_column_value)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings,
+									   &fldct, copy_read_attributes))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		string = postpare_column_value(cstate, string, m);
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+				   Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls,
+								   CopyReadAttributesText,
+								   PostpareColumnValueText);
+}
+
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+				  Datum *values, bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls,
+								   CopyReadAttributesCSV,
+								   PostpareColumnValueCSV);
+}
+
+/*
+ * cstate->in_functions must be initialized in CopyFromBinaryStart().
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -849,7 +1096,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom.  This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -857,181 +1105,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d3dc3fc854..6758a5e346 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -131,6 +135,340 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToRoutine implementation for "text" and "csv". CopyToTextBased*() are
+ * shared by both of "text" and "csv". CopyToText*() are only for "text" and
+ * CopyToCSV*() are only for "csv".
+ *
+ * We can use the same functions for all callbacks by referring
+ * cstate->opts.csv_mode but splitting callbacks to eliminate "if
+ * (cstate->opts.csv_mode)" branches from all callbacks has performance
+ * merit when many tuples are copied. So we use separated callbacks for "text"
+ * and "csv".
+ */
+
+static void
+CopyToTextBasedSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+	CopySendEndOfRow(cstate);
+}
+
+typedef void (*CopyAttributeOutHeaderFunction) (CopyToState cstate, char *string);
+
+/*
+ * We can use CopyAttributeOutText() directly but define this for consistency
+ * with CopyAttributeOutCSVHeader(). "static inline" will prevent performance
+ * penalty by this wrapping.
+ */
+static inline void
+CopyAttributeOutTextHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVHeader(CopyToState cstate, char *string)
+{
+	CopyAttributeOutCSV(cstate, string, false,
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextStart() and CopyToCSVStart() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * only once per COPY TO. So this optimization may be meaningless but done for
+ * consistency with CopyToTextBasedOneRow().
+ *
+ * This must initialize cstate->out_functions for CopyToTextBasedOneRow().
+ */
+static inline void
+CopyToTextBasedStart(CopyToState cstate, TupleDesc tupDesc, CopyAttributeOutHeaderFunction out)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			out(cstate, colname);
+		}
+
+		CopyToTextBasedSendEndOfRow(cstate);
+	}
+}
+
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutTextHeader);
+}
+
+static void
+CopyToCSVStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	CopyToTextBasedStart(cstate, tupDesc, CopyAttributeOutCSVHeader);
+}
+
+typedef void (*CopyAttributeOutValueFunction) (CopyToState cstate, char *string, int attnum);
+
+static inline void
+CopyAttributeOutTextValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutText(cstate, string);
+}
+
+static inline void
+CopyAttributeOutCSVValue(CopyToState cstate, char *string, int attnum)
+{
+	CopyAttributeOutCSV(cstate, string,
+						cstate->opts.force_quote_flags[attnum - 1],
+						list_length(cstate->attnumlist) == 1);
+}
+
+/*
+ * We don't use this function as a callback directly. We define
+ * CopyToTextOneRow() and CopyToCSVOneRow() and use them instead. It's for
+ * eliminating a "if (cstate->opts.csv_mode)" branch. This callback is called
+ * per tuple. So this optimization will be valuable when many tuples are
+ * copied.
+ *
+ * cstate->out_functions must be initialized in CopyToTextBasedStart().
+ */
+static void
+CopyToTextBasedOneRow(CopyToState cstate,
+					  TupleTableSlot *slot,
+					  CopyAttributeOutValueFunction out)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+			out(cstate, string, attnum);
+		}
+	}
+
+	CopyToTextBasedSendEndOfRow(cstate);
+}
+
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutTextValue);
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextBasedOneRow(cstate, slot, CopyAttributeOutCSVValue);
+}
+
+static void
+CopyToTextBasedEnd(CopyToState cstate)
+{
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * This must initialize cstate->out_functions for CopyToBinaryOneRow().
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int			num_phys_attrs;
+	ListCell   *cur;
+
+	num_phys_attrs = tupDesc->natts;
+	/* Get info about the columns we need to process. */
+	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Oid			out_func_oid;
+		bool		isvarlena;
+		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+		getTypeBinaryOutputInfo(attr->atttypid, &out_func_oid, &isvarlena);
+		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+	}
+
+	{
+		/* Generate header for a binary copy */
+		int32		tmp;
+
+		/* Signature */
+		CopySendData(cstate, BinarySignature, 11);
+		/* Flags field */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+		/* No header extension */
+		tmp = 0;
+		CopySendInt32(cstate, tmp);
+	}
+}
+
+/*
+ * cstate->out_functions must be initialized in CopyToBinaryStart().
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextBased*() are shared with "csv". CopyToText*() are only for "text".
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+/*
+ * CopyToTextBased*() are shared with "text". CopyToCSV*() are only for "csv".
+ */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToCSVStart,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextBasedEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +536,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +570,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -433,6 +757,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -748,8 +1075,6 @@ DoCopyTo(CopyToState cstate)
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
-	int			num_phys_attrs;
-	ListCell   *cur;
 	uint64		processed;
 
 	if (fe_copy)
@@ -759,32 +1084,11 @@ DoCopyTo(CopyToState cstate)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
 		tupDesc = cstate->queryDesc->tupDesc;
-	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
 	cstate->fe_msgbuf = makeStringInfo();
 
-	/* Get info about the columns we need to process. */
-	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
-		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-	}
-
 	/*
 	 * Create a temporary memory context that we can reset once per row to
 	 * recover palloc'd memory.  This avoids any problems with leaks inside
@@ -795,57 +1099,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false,
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1138,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1154,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1],
-										list_length(cstate->attnumlist) == 1);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#108Junwang Zhao
zhjwpku@gmail.com
In reply to: Michael Paquier (#107)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 2, 2024 at 2:21 PM Michael Paquier <michael@paquier.xyz> wrote:

On Fri, Feb 02, 2024 at 09:40:56AM +0900, Sutou Kouhei wrote:

Thanks. It'll help us.

I have done a review of v10, see v11 attached which is still WIP, with
the patches for COPY TO and COPY FROM merged together. Note that I'm
thinking to merge them into a single commit.

@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
bool        convert_selectively;    /* do selective binary conversion? */
CopyOnErrorChoice on_error; /* what to do when error happened */
List       *convert_select; /* list of column names (can be NIL) */
+    const        CopyToRoutine *to_routine;    /* callback routines for COPY TO */
} CopyFormatOptions;

Adding the routines to the structure for the format options is in my
opinion incorrect. The elements of this structure are first processed
in the option deparsing path, and then we need to use the options to
guess which routines we need. A more natural location is cstate
itself, so as the pointer to the routines is isolated within copyto.c

I agree CopyToRoutine should be placed into CopyToStateData, but
why set it after ProcessCopyOptions, the implementation of
CopyToGetRoutine doesn't make sense if we want to support custom
format in the future.

Seems the refactor of v11 only considered performance but not
*extendable copy format*.

and copyfrom_internal.h. My point is: the routines are an
implementation detail that the centralized copy.c has no need to know
about. This also led to a strange separation with
ProcessCopyOptionFormatFrom() and ProcessCopyOptionFormatTo() to fit
the hole in-between.

The separation between cstate and the format-related fields could be
much better, though I am not sure if it is worth doing as it
introduces more duplication. For example, max_fields and raw_fields
are specific to text and csv, while binary does not care much.
Perhaps this is just useful to be for custom formats.

I think those can be placed in format specific fields by utilizing the opaque
space, but yeah, this will introduce duplication.

copyapi.h needs more documentation, like what is expected for
extension developers when using these, what are the arguments, etc. I
have added what I had in mind for now.

+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);

CopyReadAttributes and PostpareColumnValue are also callbacks specific
to text and csv, except that they are used within the per-row
callbacks. The same can be said about CopyAttributeOutHeaderFunction.
It seems to me that it would be less confusing to store pointers to
them in the routine structures, where the final picture involves not
having multiple layers of APIs like CopyToCSVStart,
CopyAttributeOutTextValue, etc. These *have* to be documented
properly in copyapi.h, and this is much easier now that cstate stores
the routine pointers. That would also make simpler function stacks.
Note that I have not changed that in the v11 attached.

This business with the extra callbacks required for csv and text is my
main point of contention, but I'd be OK once the model of the APIs is
more linear, with everything in Copy{From,To}State. The changes would
be rather simple, and I'd be OK to put my hands on it. Just,
Sutou-san, would you agree with my last point about these extra
callbacks?
--
Michael

If V7 and V10 have no performance reduction, then I think V6 is also
good with performance, since most of the time goes to CopyToOneRow
and CopyFromOneRow.

I just think we should take the *extendable* into consideration at
the beginning.

--
Regards
Junwang Zhao

#109Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#107)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbyJ60Fd7CHt4m0i@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 15:21:31 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

I have done a review of v10, see v11 attached which is still WIP, with
the patches for COPY TO and COPY FROM merged together. Note that I'm
thinking to merge them into a single commit.

OK. I don't have a strong opinion for commit unit.

@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
bool        convert_selectively;    /* do selective binary conversion? */
CopyOnErrorChoice on_error; /* what to do when error happened */
List       *convert_select; /* list of column names (can be NIL) */
+    const        CopyToRoutine *to_routine;    /* callback routines for COPY TO */
} CopyFormatOptions;

Adding the routines to the structure for the format options is in my
opinion incorrect. The elements of this structure are first processed
in the option deparsing path, and then we need to use the options to
guess which routines we need.

This was discussed with Sawada-san a bit before. [1]/messages/by-id/CAD21AoBmNiWwrspuedgAPgbAqsn7e7NoZYF6gNnYBf+gXEk9Mg@mail.gmail.com[2]/messages/by-id/20240130.144531.1257430878438173740.kou@clear-code.com

[1]: /messages/by-id/CAD21AoBmNiWwrspuedgAPgbAqsn7e7NoZYF6gNnYBf+gXEk9Mg@mail.gmail.com
[2]: /messages/by-id/20240130.144531.1257430878438173740.kou@clear-code.com

I kept the routines in CopyFormatOptions for custom option
processing. But I should have not cared about it in this
patch set because this patch set doesn't include custom
option processing.

So I'm OK that we move the routines to
Copy{From,To}StateData.

This also led to a strange separation with
ProcessCopyOptionFormatFrom() and ProcessCopyOptionFormatTo() to fit
the hole in-between.

They also for custom option processing. We don't need to
care about them in this patch set too.

copyapi.h needs more documentation, like what is expected for
extension developers when using these, what are the arguments, etc. I
have added what I had in mind for now.

Thanks! I'm not good at writing documentation in English...

+typedef char *(*PostpareColumnValue) (CopyFromState cstate, char *string, int m);

CopyReadAttributes and PostpareColumnValue are also callbacks specific
to text and csv, except that they are used within the per-row
callbacks. The same can be said about CopyAttributeOutHeaderFunction.
It seems to me that it would be less confusing to store pointers to
them in the routine structures, where the final picture involves not
having multiple layers of APIs like CopyToCSVStart,
CopyAttributeOutTextValue, etc. These *have* to be documented
properly in copyapi.h, and this is much easier now that cstate stores
the routine pointers. That would also make simpler function stacks.
Note that I have not changed that in the v11 attached.

This business with the extra callbacks required for csv and text is my
main point of contention, but I'd be OK once the model of the APIs is
more linear, with everything in Copy{From,To}State. The changes would
be rather simple, and I'd be OK to put my hands on it. Just,
Sutou-san, would you agree with my last point about these extra
callbacks?

I'm OK with the approach. But how about adding the extra
callbacks to Copy{From,To}StateData not
Copy{From,To}Routines like CopyToStateData::data_dest_cb and
CopyFromStateData::data_source_cb? They are only needed for
"text" and "csv". So we don't need to add them to
Copy{From,To}Routines to keep required callback minimum.

What is the better next action for us? Do you want to
complete the WIP v11 patch set by yourself (and commit it)?
Or should I take over it?

Thanks,
--
kou

#110Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#108)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3LxnBwNRPRwvmimDvOkPvYL8pB1+rhLBnxjeddFt3MeNw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 15:27:15 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I agree CopyToRoutine should be placed into CopyToStateData, but
why set it after ProcessCopyOptions, the implementation of
CopyToGetRoutine doesn't make sense if we want to support custom
format in the future.

Seems the refactor of v11 only considered performance but not
*extendable copy format*.

Right.
We focus on performance for now. And then we will focus on
extendability. [1]/messages/by-id/20240130.171511.2014195814665030502.kou@clear-code.com

[1]: /messages/by-id/20240130.171511.2014195814665030502.kou@clear-code.com

If V7 and V10 have no performance reduction, then I think V6 is also
good with performance, since most of the time goes to CopyToOneRow
and CopyFromOneRow.

Don't worry. I'll re-submit changes in the v6 patch set
again after the current patch set that focuses on
performance is merged.

I just think we should take the *extendable* into consideration at
the beginning.

Introducing Copy{To,From}Routine is also valuable for
extendability. We can improve extendability later. Let's
focus on only performance for now to introduce
Copy{To,From}Routine.

Thanks,
--
kou

#111Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#109)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 02, 2024 at 04:33:19PM +0900, Sutou Kouhei wrote:

Hi,

In <ZbyJ60Fd7CHt4m0i@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 15:21:31 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

I have done a review of v10, see v11 attached which is still WIP, with
the patches for COPY TO and COPY FROM merged together. Note that I'm
thinking to merge them into a single commit.

OK. I don't have a strong opinion for commit unit.

@@ -74,11 +75,11 @@ typedef struct CopyFormatOptions
bool        convert_selectively;    /* do selective binary conversion? */
CopyOnErrorChoice on_error; /* what to do when error happened */
List       *convert_select; /* list of column names (can be NIL) */
+    const        CopyToRoutine *to_routine;    /* callback routines for COPY TO */
} CopyFormatOptions;

Adding the routines to the structure for the format options is in my
opinion incorrect. The elements of this structure are first processed
in the option deparsing path, and then we need to use the options to
guess which routines we need.

This was discussed with Sawada-san a bit before. [1][2]

[1] /messages/by-id/CAD21AoBmNiWwrspuedgAPgbAqsn7e7NoZYF6gNnYBf+gXEk9Mg@mail.gmail.com
[2] /messages/by-id/20240130.144531.1257430878438173740.kou@clear-code.com

I kept the routines in CopyFormatOptions for custom option
processing. But I should have not cared about it in this
patch set because this patch set doesn't include custom
option processing.

One idea I was considering is whether we should use a special value in
the "format" DefElem, say "custom:$my_custom_format" where it would be
possible to bypass the formay check when processing options and find
the routines after processing all the options. I'm not wedded to
that, but attaching the routines to the state data is IMO the correct
thing, because this has nothing to do with CopyFormatOptions.

So I'm OK that we move the routines to
Copy{From,To}StateData.

Okay.

copyapi.h needs more documentation, like what is expected for
extension developers when using these, what are the arguments, etc. I
have added what I had in mind for now.

Thanks! I'm not good at writing documentation in English...

No worries.

I'm OK with the approach. But how about adding the extra
callbacks to Copy{From,To}StateData not
Copy{From,To}Routines like CopyToStateData::data_dest_cb and
CopyFromStateData::data_source_cb? They are only needed for
"text" and "csv". So we don't need to add them to
Copy{From,To}Routines to keep required callback minimum.

And set them in cstate while we are in the Start routine, right? Hmm.
Why not.. That would get rid of the multiples layers v11 has, which
is my pain point, and we have many fields in cstate that are already
used on a per-format basis.

What is the better next action for us? Do you want to
complete the WIP v11 patch set by yourself (and commit it)?
Or should I take over it?

I was planning to work on that, but wanted to be sure how you felt
about the problem with text and csv first.
--
Michael

#112Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#111)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZbyiDHIrxRgzYT99@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 17:04:28 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

One idea I was considering is whether we should use a special value in
the "format" DefElem, say "custom:$my_custom_format" where it would be
possible to bypass the formay check when processing options and find
the routines after processing all the options. I'm not wedded to
that, but attaching the routines to the state data is IMO the correct
thing, because this has nothing to do with CopyFormatOptions.

Thanks for sharing your idea.
Let's discuss how to support custom options after we
complete the current performance changes.

I'm OK with the approach. But how about adding the extra
callbacks to Copy{From,To}StateData not
Copy{From,To}Routines like CopyToStateData::data_dest_cb and
CopyFromStateData::data_source_cb? They are only needed for
"text" and "csv". So we don't need to add them to
Copy{From,To}Routines to keep required callback minimum.

And set them in cstate while we are in the Start routine, right?

I imagined that it's done around the following part:

@@ -1418,6 +1579,9 @@ BeginCopyFrom(ParseState *pstate,
/* Extract options from the statement node tree */
ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);

+       /* Set format routine */
+       cstate->routine = CopyFromGetRoutine(cstate->opts);
+
        /* Process the target relation */
        cstate->rel = rel;

Example1:

/* Set format routine */
cstate->routine = CopyFromGetRoutine(cstate->opts);
if (!cstate->opts.binary)
if (cstate->opts.csv_mode)
cstate->copy_read_attributes = CopyReadAttributesCSV;
else
cstate->copy_read_attributes = CopyReadAttributesText;

Example2:

static void
CopyFromSetRoutine(CopyFromState cstate)
{
if (cstate->opts.csv_mode)
{
cstate->routine = &CopyFromRoutineCSV;
cstate->copy_read_attributes = CopyReadAttributesCSV;
}
else if (cstate.binary)
cstate->routine = &CopyFromRoutineBinary;
else
{
cstate->routine = &CopyFromRoutineText;
cstate->copy_read_attributes = CopyReadAttributesText;
}
}

BeginCopyFrom()
{
/* Set format routine */
CopyFromSetRoutine(cstate);
}

But I don't object your original approach. If we have the
extra callbacks in Copy{From,To}Routines, I just don't use
them for my custom format extension.

What is the better next action for us? Do you want to
complete the WIP v11 patch set by yourself (and commit it)?
Or should I take over it?

I was planning to work on that, but wanted to be sure how you felt
about the problem with text and csv first.

OK.
My opinion is the above. I have an idea how to implement it
but it's not a strong idea. You can choose whichever you like.

Thanks,
--
kou

#113Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#112)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 02, 2024 at 05:46:18PM +0900, Sutou Kouhei wrote:

Hi,

In <ZbyiDHIrxRgzYT99@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 Feb 2024 17:04:28 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

One idea I was considering is whether we should use a special value in
the "format" DefElem, say "custom:$my_custom_format" where it would be
possible to bypass the formay check when processing options and find
the routines after processing all the options. I'm not wedded to
that, but attaching the routines to the state data is IMO the correct
thing, because this has nothing to do with CopyFormatOptions.

Thanks for sharing your idea.
Let's discuss how to support custom options after we
complete the current performance changes.

I'm OK with the approach. But how about adding the extra
callbacks to Copy{From,To}StateData not
Copy{From,To}Routines like CopyToStateData::data_dest_cb and
CopyFromStateData::data_source_cb? They are only needed for
"text" and "csv". So we don't need to add them to
Copy{From,To}Routines to keep required callback minimum.

And set them in cstate while we are in the Start routine, right?

I imagined that it's done around the following part:

@@ -1418,6 +1579,9 @@ BeginCopyFrom(ParseState *pstate,
/* Extract options from the statement node tree */
ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);

+       /* Set format routine */
+       cstate->routine = CopyFromGetRoutine(cstate->opts);
+
/* Process the target relation */
cstate->rel = rel;

Example1:

/* Set format routine */
cstate->routine = CopyFromGetRoutine(cstate->opts);
if (!cstate->opts.binary)
if (cstate->opts.csv_mode)
cstate->copy_read_attributes = CopyReadAttributesCSV;
else
cstate->copy_read_attributes = CopyReadAttributesText;

Example2:

static void
CopyFromSetRoutine(CopyFromState cstate)
{
if (cstate->opts.csv_mode)
{
cstate->routine = &CopyFromRoutineCSV;
cstate->copy_read_attributes = CopyReadAttributesCSV;
}
else if (cstate.binary)
cstate->routine = &CopyFromRoutineBinary;
else
{
cstate->routine = &CopyFromRoutineText;
cstate->copy_read_attributes = CopyReadAttributesText;
}
}

BeginCopyFrom()
{
/* Set format routine */
CopyFromSetRoutine(cstate);
}

But I don't object your original approach. If we have the
extra callbacks in Copy{From,To}Routines, I just don't use
them for my custom format extension.

What is the better next action for us? Do you want to
complete the WIP v11 patch set by yourself (and commit it)?
Or should I take over it?

I was planning to work on that, but wanted to be sure how you felt
about the problem with text and csv first.

OK.
My opinion is the above. I have an idea how to implement it
but it's not a strong idea. You can choose whichever you like.

So, I've looked at all that today, and finished by applying two
patches as of 2889fd23be56 and 95fb5b49024a to get some of the
weirdness with the workhorse routines out of the way. Both have added
callbacks assigned in their respective cstate data for text and csv.
As this is called within the OneRow routine, I can live with that. If
there is an opposition to that, we could just attach it within the
routines. The CopyAttributeOut routines had a strange argument
layout, actually, the flag for the quotes is required as a header uses
no quotes, but there was little point in the "single arg" case, so
I've removed it.

I am attaching a v12 which is close to what I want it to be, with
much more documentation and comments. There are two things that I've
changed compared to the previous versions though:
1) I have added a callback to set up the input and output functions
rather than attach that in the Start callback. These routines are now
called once per argument, where we know that the argument is valid.
The callbacks are in charge of filling the FmgrInfos. There are some
good reasons behind that:
- No need for plugins to think about how to allocate this data. v11
and other versions were doing things the wrong way by allocating this
stuff in the wrong memory context as we switch to the COPY context
when we are in the Start routines.
- This avoids attisdropped problems, and we have a long history of
bugs regarding that. I'm ready to bet that custom formats would get
that wrong.
2) I have backpedaled on the postpare callback, which did not bring
much in clarity IMO while being a CSV-only callback. Note that we
have in copyfromparse.c more paths that are only for CSV but the past
versions of the patch never cared about that. This makes the text and
CSV implementations much closer to each other, as a result.

I had mixed feelings about CopySendEndOfRow() being split to
CopyToTextSendEndOfRow() to send the line terminations when sending a
CSV/text row, but I'm OK with that at the end. v12 is mostly about
moving code around at this point, making it kind of straight-forward
to follow as the code blocks are the same. I'm still planning to do a
few more measurements, just lacked of time. Let me know if you have
comments about all that.
--
Michael

Attachments:

v12-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 964ae392815abbab70f501c6cf430134aa2c5e08 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 5 Feb 2024 15:38:12 +0900
Subject: [PATCH v12] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           |  99 +++++
 src/include/commands/copyfrom_internal.h |  10 +
 src/backend/commands/copyfrom.c          | 207 ++++++++---
 src/backend/commands/copyfromparse.c     | 362 ++++++++++---------
 src/backend/commands/copyto.c            | 438 +++++++++++++++--------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 767 insertions(+), 351 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..06b7bba8f3
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,99 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `fmgr_info` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optinally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `fmgr_info` can
+	 * be optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (Oid atttypid, FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d09..f616d58b1f 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -65,6 +66,9 @@ typedef int (*CopyReadAttributes) (CopyFromState cstate);
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 extern int	CopyReadAttributesCSV(CopyFromState cstate);
 extern int	CopyReadAttributesText(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->OneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..de725b3544 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,158 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(Oid atttypid, FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(Oid atttypid, FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1538,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1569,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1725,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1757,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,25 +1894,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-		if (cstate->opts.csv_mode)
-			cstate->copy_read_attributes = CopyReadAttributesCSV;
-		else
-			cstate->copy_read_attributes = CopyReadAttributesText;
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1794,6 +1907,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e..c45f9ae134 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -832,6 +832,200 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -841,7 +1035,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -849,181 +1044,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 52b42f8a52..fdf5dd1aa8 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -79,6 +80,9 @@ typedef void (*CopyAttributeOut) (CopyToState cstate, const char *string,
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -143,6 +147,291 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/* Set output representation callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_attribute_out = CopyAttributeOutCSV;
+	else
+		cstate->copy_attribute_out = CopyAttributeOutText;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			/* Ignore quotes */
+			cstate->copy_attribute_out(cstate, colname, false);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			cstate->copy_attribute_out(cstate, string,
+									   cstate->opts.force_quote_flags[attnum - 1]);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation function.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -210,16 +499,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -254,10 +533,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -445,14 +720,8 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
-	/* Set output representation callback */
-	if (!cstate->opts.binary)
-	{
-		if (cstate->opts.csv_mode)
-			cstate->copy_attribute_out = CopyAttributeOutCSV;
-		else
-			cstate->copy_attribute_out = CopyAttributeOutText;
-	}
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -791,19 +1060,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -816,54 +1076,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				/* Ignore quotes */
-				cstate->copy_attribute_out(cstate, colname, false);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -902,13 +1115,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -924,68 +1131,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-
-				cstate->copy_attribute_out(cstate, string,
-										   cstate->opts.force_quote_flags[attnum - 1]);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#114Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#113)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZcCKwAeFrlOqPBuN@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 5 Feb 2024 16:14:08 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

So, I've looked at all that today, and finished by applying two
patches as of 2889fd23be56 and 95fb5b49024a to get some of the
weirdness with the workhorse routines out of the way.

Thanks!

As this is called within the OneRow routine, I can live with that. If
there is an opposition to that, we could just attach it within the
routines.

I don't object the approach.

I am attaching a v12 which is close to what I want it to be, with
much more documentation and comments. There are two things that I've
changed compared to the previous versions though:
1) I have added a callback to set up the input and output functions
rather than attach that in the Start callback.

I'm OK with this. I just don't use them in Apache Arrow COPY
FORMAT extension.

- No need for plugins to think about how to allocate this data. v11
and other versions were doing things the wrong way by allocating this
stuff in the wrong memory context as we switch to the COPY context
when we are in the Start routines.

Oh, sorry. I missed it when I moved them.

2) I have backpedaled on the postpare callback, which did not bring
much in clarity IMO while being a CSV-only callback. Note that we
have in copyfromparse.c more paths that are only for CSV but the past
versions of the patch never cared about that. This makes the text and
CSV implementations much closer to each other, as a result.

Ah, sorry. I forgot to eliminate cstate->opts.csv_mode in
CopyReadLineText(). The postpare callback is for
optimization. If it doesn't improve performance, we don't
need to introduce it.

We may want to try eliminating cstate->opts.csv_mode in
CopyReadLineText() for performance. But we don't need to
do this in introducing CopyFromRoutine. We can defer it.

So I don't object removing the postpare callback.

Let me know if you have
comments about all that.

Here are some comments for the patch:

+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `fmgr_info` can be

fmgr_info ->
finfo

+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optinally filled to define the OID of

optinally ->
optionally

+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);

How about passing CopyFromState cstate too like other
callbacks for consistency?

+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY

or is ->
or

(I'm not sure...)

+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `fmgr_info` can

fmgr_info ->
finfo

+	 * be optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (Oid atttypid, FmgrInfo *finfo);

How about passing CopyToState cstate too like other
callbacks for consistency?

@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
extern int CopyReadAttributesCSV(CopyFromState cstate);
extern int CopyReadAttributesText(CopyFromState cstate);

+/* Callbacks for CopyFromRoutine->OneRow */

CopyFromRoutine->OneRow ->
CopyFromRoutine->CopyFromOneRow

+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */

+/*
+ * CopyFromTextStart

CopyFromTextStart ->
CopyFromBinaryStart

+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromTextEnd

CopyFromTextEnd ->
CopyFromBinaryEnd

+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost

Wow! I didn't know that we need to update typedefs.list when
I add a "typedef struct".

Thanks,
--
kou

#115Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#113)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Have you benchmarked the performance effects of 2889fd23be5 ? I'd not at all
be surprised if it lead to a measurable performance regression.

I think callbacks for individual attributes is the wrong approach - the
dispatch needs to happen at a higher level, otherwise there are too many
indirect function calls.

Greetings,

Andres Freund

#116Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#114)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Feb 05, 2024 at 06:05:15PM +0900, Sutou Kouhei wrote:

In <ZcCKwAeFrlOqPBuN@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 5 Feb 2024 16:14:08 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

2) I have backpedaled on the postpare callback, which did not bring
much in clarity IMO while being a CSV-only callback. Note that we
have in copyfromparse.c more paths that are only for CSV but the past
versions of the patch never cared about that. This makes the text and
CSV implementations much closer to each other, as a result.

Ah, sorry. I forgot to eliminate cstate->opts.csv_mode in
CopyReadLineText(). The postpare callback is for
optimization. If it doesn't improve performance, we don't
need to introduce it.

No worries.

We may want to try eliminating cstate->opts.csv_mode in
CopyReadLineText() for performance. But we don't need to
do this in introducing CopyFromRoutine. We can defer it.

So I don't object removing the postpare callback.

Rather related, but there has been a comment from Andres about this
kind of splits a few hours ago, so perhaps this is for the best:
/messages/by-id/20240205182118.h5rkbnjgujwzuxip@awork3.anarazel.de

I'll reply to this one in a bit.

Let me know if you have
comments about all that.

Here are some comments for the patch:

Thanks. My head was spinning after reading the diffs more than 20
times :)

fmgr_info ->
finfo
optinally ->
optionally
CopyFromRoutine->OneRow ->
CopyFromRoutine->CopyFromOneRow
CopyFromTextStart ->
CopyFromBinaryStart
CopyFromTextEnd ->
CopyFromBinaryEnd

Fixed all these.

How about passing CopyFromState cstate too like other
callbacks for consistency?

Yes, I was wondering a bit if this can be useful for the custom
formats.

+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY

or is ->
or

"or is" is correct here IMO.

Wow! I didn't know that we need to update typedefs.list when
I add a "typedef struct".

That's for the automated indentation. This is a habit I have when it
comes to work on shaping up patches to avoid weird diffs with pgindent
and new structure names. It's OK to forget about it :)

Attaching a v13 for now.
--
Michael

Attachments:

v13-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 50ebc2d6b1b5f7bcb2248dd3fa4cef3f14f7adaa Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 6 Feb 2024 08:40:17 +0900
Subject: [PATCH v13] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           | 100 ++++++
 src/include/commands/copyfrom_internal.h |  10 +
 src/backend/commands/copyfrom.c          | 209 ++++++++---
 src/backend/commands/copyfromparse.c     | 362 ++++++++++---------
 src/backend/commands/copyto.c            | 438 +++++++++++++++--------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 770 insertions(+), 351 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..87e0629c2f
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d09..5fb52dc629 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -65,6 +66,9 @@ typedef int (*CopyReadAttributes) (CopyFromState cstate);
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 extern int	CopyReadAttributesCSV(CopyFromState cstate);
 extern int	CopyReadAttributesText(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a90b7189b5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,160 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1540,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1571,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1727,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1759,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,25 +1896,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-		if (cstate->opts.csv_mode)
-			cstate->copy_read_attributes = CopyReadAttributesCSV;
-		else
-			cstate->copy_read_attributes = CopyReadAttributesText;
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1794,6 +1909,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e..c45f9ae134 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -832,6 +832,200 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -841,7 +1035,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -849,181 +1044,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 52b42f8a52..70cacac6b2 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -79,6 +80,9 @@ typedef void (*CopyAttributeOut) (CopyToState cstate, const char *string,
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -143,6 +147,291 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/* Set output representation callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_attribute_out = CopyAttributeOutCSV;
+	else
+		cstate->copy_attribute_out = CopyAttributeOutText;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			/* Ignore quotes */
+			cstate->copy_attribute_out(cstate, colname, false);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			cstate->copy_attribute_out(cstate, string,
+									   cstate->opts.force_quote_flags[attnum - 1]);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation function.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -210,16 +499,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -254,10 +533,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -445,14 +720,8 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
-	/* Set output representation callback */
-	if (!cstate->opts.binary)
-	{
-		if (cstate->opts.csv_mode)
-			cstate->copy_attribute_out = CopyAttributeOutCSV;
-		else
-			cstate->copy_attribute_out = CopyAttributeOutText;
-	}
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -791,19 +1060,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -816,54 +1076,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				/* Ignore quotes */
-				cstate->copy_attribute_out(cstate, colname, false);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -902,13 +1115,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -924,68 +1131,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-
-				cstate->copy_attribute_out(cstate, string,
-										   cstate->opts.force_quote_flags[attnum - 1]);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#117Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#115)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Feb 05, 2024 at 10:21:18AM -0800, Andres Freund wrote:

Have you benchmarked the performance effects of 2889fd23be5 ? I'd not at all
be surprised if it lead to a measurable performance regression.

Yes, I was looking at runtimes and some profiles around CopyOneRowTo()
to see the effects that this has yesterday. The principal point of
contention is CopyOneRowTo() where the callback is called once per
attribute, so more attributes stress it more. The method I've used is
described in [1]/messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz, where I've used up to 50 int attributes (fixed value
size to limit appendBinaryStringInfo) with 5 million rows, with
shared_buffers large enough that all the data fits in it, while
prewarming the whole. Postgres runs on a tmpfs, and COPY TO is
redirected to /dev/null.

For reference, I still have some reports lying around (-g attached to
the backend process running the COPY TO queries with text format), so
here you go:
* At 95fb5b49024a:
-   83.04%    11.46%  postgres  postgres            [.] CopyOneRowTo
    - 71.58% CopyOneRowTo
       - 30.37% OutputFunctionCall
          + 27.77% int4out
       + 13.18% CopyAttributeOutText
       + 10.19% appendBinaryStringInfo
         3.76% 0xffffa7096234
         2.78% 0xffffa7096214
       + 2.49% CopySendEndOfRow
         1.21% int4out
         0.83% memcpy@plt
         0.76% 0xffffa7094ba8
         0.75% 0xffffa7094ba4
         0.69% pgstat_progress_update_param
         0.57% enlargeStringInfo
         0.52% 0xffffa7096204
         0.52% 0xffffa7094b8c
    + 11.46% _start
* At 2889fd23be56:
-   83.53%    14.24%  postgres  postgres            [.] CopyOneRowTo
    - 69.29% CopyOneRowTo
       - 29.89% OutputFunctionCall
          + 27.43% int4out
       - 12.89% CopyAttributeOutText
            pg_server_to_any
       + 9.31% appendBinaryStringInfo
         3.68% 0xffffa6940234
       + 2.74% CopySendEndOfRow
         2.43% 0xffffa6940214
         1.36% int4out
         0.74% 0xffffa693eba8
         0.73% pgstat_progress_update_param
         0.65% memcpy@plt
         0.53% MemoryContextReset
    + 14.24% _start

If you have concerns about that, I'm OK to revert, I'm not wedded to
this level of control. Note that I've actually seen *better*
runtimes.

[1]: /messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz

I think callbacks for individual attributes is the wrong approach - the
dispatch needs to happen at a higher level, otherwise there are too many
indirect function calls.

Hmm. Do you have concerns about v13 posted on [2]/messages/by-id/ZcFz59nJjQNjwgX0@paquier.xyz -- Michael then? If yes, then
I'd assume that this shuts down the whole thread or that it needs a
completely different approach, because we will multiply indirect
function calls that can control how data is generated for each row,
which is the original case that Sutou-san wanted to tackle. There
could be many indirect calls with custom callbacks that control how
things should be processed at row-level, and COPY likes doing work
with loads of data. The End, Start and In/OutFunc callbacks are
called only once per query, so these don't matter AFAIU.

[2]: /messages/by-id/ZcFz59nJjQNjwgX0@paquier.xyz -- Michael
--
Michael

#118Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#117)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On 2024-02-06 10:01:36 +0900, Michael Paquier wrote:

On Mon, Feb 05, 2024 at 10:21:18AM -0800, Andres Freund wrote:

Have you benchmarked the performance effects of 2889fd23be5 ? I'd not at all
be surprised if it lead to a measurable performance regression.

Yes, I was looking at runtimes and some profiles around CopyOneRowTo()
to see the effects that this has yesterday. The principal point of
contention is CopyOneRowTo() where the callback is called once per
attribute, so more attributes stress it more.

Right.

If you have concerns about that, I'm OK to revert, I'm not wedded to
this level of control. Note that I've actually seen *better*
runtimes.

I'm somewhat worried that handling the different formats at that level will
make it harder to improve copy performance - it's quite attrociously slow
right now. The more we reduce the per-row/field overhead, the more the
dispatch overhead will matter.

[1]: /messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz

I think callbacks for individual attributes is the wrong approach - the
dispatch needs to happen at a higher level, otherwise there are too many
indirect function calls.

Hmm. Do you have concerns about v13 posted on [2] then?

As is I'm indeed not a fan. It imo doesn't make sense to have an indirect
dispatch for *both* ->copy_attribute_out *and* ->CopyToOneRow. After all, when
in ->CopyToOneRow for text, we could know that we need to call
CopyAttributeOutText etc.

If yes, then I'd assume that this shuts down the whole thread or that it
needs a completely different approach, because we will multiply indirect
function calls that can control how data is generated for each row, which is
the original case that Sutou-san wanted to tackle.

I think it could be rescued fairly easily - remove the dispatch via
->copy_attribute_out(). To avoid duplicating code you could use a static
inline function that's used with constant arguments by both csv and text mode.

I think it might also be worth ensuring that future patches can move branches
like
if (cstate->encoding_embeds_ascii)
if (cstate->need_transcoding)
into the choice of per-row callback.

The End, Start and In/OutFunc callbacks are called only once per query, so
these don't matter AFAIU.

Right.

Greetings,

Andres Freund

#119Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#118)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Feb 05, 2024 at 05:41:25PM -0800, Andres Freund wrote:

On 2024-02-06 10:01:36 +0900, Michael Paquier wrote:

If you have concerns about that, I'm OK to revert, I'm not wedded to
this level of control. Note that I've actually seen *better*
runtimes.

I'm somewhat worried that handling the different formats at that level will
make it harder to improve copy performance - it's quite attrociously slow
right now. The more we reduce the per-row/field overhead, the more the
dispatch overhead will matter.

Yep. That's the hard part when it comes to design these callbacks.
We don't want something too high level because this leads to more code
duplication churns when someone wants to plug in its own routine set,
and we don't want to be at a too low level because of the indirect
calls as you said. I'd like to think that the current CopyFromOneRow
offers a good balance here, avoiding the "if" branch with the binary
and non-binary paths.

Hmm. Do you have concerns about v13 posted on [2] then?

As is I'm indeed not a fan. It imo doesn't make sense to have an indirect
dispatch for *both* ->copy_attribute_out *and* ->CopyToOneRow. After all, when
in ->CopyToOneRow for text, we could know that we need to call
CopyAttributeOutText etc.

Right.

If yes, then I'd assume that this shuts down the whole thread or that it
needs a completely different approach, because we will multiply indirect
function calls that can control how data is generated for each row, which is
the original case that Sutou-san wanted to tackle.

I think it could be rescued fairly easily - remove the dispatch via
->copy_attribute_out(). To avoid duplicating code you could use a static
inline function that's used with constant arguments by both csv and text mode.

Hmm. So you basically mean to tweak the beginning of
CopyToTextOneRow() and CopyToTextStart() so as copy_attribute_out is
saved in a local variable outside of cstate and we'd save the "if"
checked for each attribute. If I got that right, it would mean
something like the v13-0002 attached, on top of the v13-0001 of
upthread. Is that what you meant?

I think it might also be worth ensuring that future patches can move branches
like
if (cstate->encoding_embeds_ascii)
if (cstate->need_transcoding)
into the choice of per-row callback.

Yeah, I'm still not sure how much we should split CopyToStateData in
the initial patch set. I'd like to think that the best result would
be to have in the state data an opaque (void *) that points to a
structure that can be set for each format, so as there is a clean
split between which variable gets set and used where (same remark
applies to COPY FROM with its raw_fields, raw_fields, for example).
--
Michael

Attachments:

v13-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 4f95908173a1fb69ec228eaf44922862afca48bd Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 6 Feb 2024 08:40:17 +0900
Subject: [PATCH v13 1/2] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           | 100 ++++++
 src/include/commands/copyfrom_internal.h |  10 +
 src/backend/commands/copyfrom.c          | 209 ++++++++---
 src/backend/commands/copyfromparse.c     | 362 ++++++++++---------
 src/backend/commands/copyto.c            | 438 +++++++++++++++--------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 770 insertions(+), 351 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..87e0629c2f
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d09..5fb52dc629 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -65,6 +66,9 @@ typedef int (*CopyReadAttributes) (CopyFromState cstate);
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 extern int	CopyReadAttributesCSV(CopyFromState cstate);
 extern int	CopyReadAttributesText(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a90b7189b5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,160 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1540,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1571,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1727,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1759,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,25 +1896,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-		if (cstate->opts.csv_mode)
-			cstate->copy_read_attributes = CopyReadAttributesCSV;
-		else
-			cstate->copy_read_attributes = CopyReadAttributesText;
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1794,6 +1909,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e..c45f9ae134 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -832,6 +832,200 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -841,7 +1035,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -849,181 +1044,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 52b42f8a52..70cacac6b2 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -79,6 +80,9 @@ typedef void (*CopyAttributeOut) (CopyToState cstate, const char *string,
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -143,6 +147,291 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/* Set output representation callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_attribute_out = CopyAttributeOutCSV;
+	else
+		cstate->copy_attribute_out = CopyAttributeOutText;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			/* Ignore quotes */
+			cstate->copy_attribute_out(cstate, colname, false);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			cstate->copy_attribute_out(cstate, string,
+									   cstate->opts.force_quote_flags[attnum - 1]);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation function.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -210,16 +499,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -254,10 +533,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -445,14 +720,8 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
-	/* Set output representation callback */
-	if (!cstate->opts.binary)
-	{
-		if (cstate->opts.csv_mode)
-			cstate->copy_attribute_out = CopyAttributeOutCSV;
-		else
-			cstate->copy_attribute_out = CopyAttributeOutText;
-	}
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -791,19 +1060,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -816,54 +1076,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				/* Ignore quotes */
-				cstate->copy_attribute_out(cstate, colname, false);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -902,13 +1115,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -924,68 +1131,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-
-				cstate->copy_attribute_out(cstate, string,
-										   cstate->opts.force_quote_flags[attnum - 1]);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

v13-0002-Optimize-copy_attribute_out.patchtext/x-diff; charset=us-asciiDownload
From 22905a5028d7a1d0e22796ba93937e6beeed6c36 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 6 Feb 2024 11:38:24 +0900
Subject: [PATCH v13 2/2] Optimize copy_attribute_out

---
 src/backend/commands/copyto.c | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 70cacac6b2..94657c3d4b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -109,7 +109,6 @@ typedef struct CopyToStateData
 	MemoryContext copycontext;	/* per-copy execution context */
 
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	CopyAttributeOut copy_attribute_out;	/* output representation callback */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
 } CopyToStateData;
@@ -131,11 +130,11 @@ static void EndCopy(CopyToState cstate);
 static void ClosePipeToProgram(CopyToState cstate);
 static void CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot);
 
-/* Callbacks for copy_attribute_out */
-static void CopyAttributeOutText(CopyToState cstate, const char *string,
-								 bool use_quote);
-static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
-								bool use_quote);
+/* Callbacks for output representation */
+static inline void CopyAttributeOutText(CopyToState cstate, const char *string,
+										bool use_quote);
+static inline void CopyAttributeOutCSV(CopyToState cstate, const char *string,
+									   bool use_quote);
 
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
@@ -191,12 +190,13 @@ static void
 CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
 {
 	ListCell   *cur;
+	CopyAttributeOut copy_attribute_out;
 
 	/* Set output representation callback */
 	if (cstate->opts.csv_mode)
-		cstate->copy_attribute_out = CopyAttributeOutCSV;
+		copy_attribute_out = CopyAttributeOutCSV;
 	else
-		cstate->copy_attribute_out = CopyAttributeOutText;
+		copy_attribute_out = CopyAttributeOutText;
 
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
@@ -224,7 +224,7 @@ CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
 			/* Ignore quotes */
-			cstate->copy_attribute_out(cstate, colname, false);
+			copy_attribute_out(cstate, colname, false);
 		}
 
 		CopyToTextSendEndOfRow(cstate);
@@ -259,6 +259,13 @@ CopyToTextOneRow(CopyToState cstate,
 	bool		need_delim = false;
 	FmgrInfo   *out_functions = cstate->out_functions;
 	ListCell   *cur;
+	CopyAttributeOut copy_attribute_out;
+
+	/* Set output representation callback */
+	if (cstate->opts.csv_mode)
+		copy_attribute_out = CopyAttributeOutCSV;
+	else
+		copy_attribute_out = CopyAttributeOutText;
 
 	foreach(cur, cstate->attnumlist)
 	{
@@ -280,8 +287,8 @@ CopyToTextOneRow(CopyToState cstate,
 
 			string = OutputFunctionCall(&out_functions[attnum - 1], value);
 
-			cstate->copy_attribute_out(cstate, string,
-									   cstate->opts.force_quote_flags[attnum - 1]);
+			copy_attribute_out(cstate, string,
+							   cstate->opts.force_quote_flags[attnum - 1]);
 		}
 	}
 
@@ -1153,7 +1160,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 			CopySendData(cstate, start, ptr - start); \
 	} while (0)
 
-static void
+static inline void
 CopyAttributeOutText(CopyToState cstate, const char *string,
 					 bool use_quote)
 {
@@ -1307,7 +1314,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string,
  * Send text representation of one attribute, with conversion and
  * CSV-style escaping
  */
-static void
+static inline void
 CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					bool use_quote)
 {
-- 
2.43.0

#120Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#119)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On 2024-02-06 11:41:06 +0900, Michael Paquier wrote:

On Mon, Feb 05, 2024 at 05:41:25PM -0800, Andres Freund wrote:

On 2024-02-06 10:01:36 +0900, Michael Paquier wrote:

If you have concerns about that, I'm OK to revert, I'm not wedded to
this level of control. Note that I've actually seen *better*
runtimes.

I'm somewhat worried that handling the different formats at that level will
make it harder to improve copy performance - it's quite attrociously slow
right now. The more we reduce the per-row/field overhead, the more the
dispatch overhead will matter.

Yep. That's the hard part when it comes to design these callbacks.
We don't want something too high level because this leads to more code
duplication churns when someone wants to plug in its own routine set,
and we don't want to be at a too low level because of the indirect
calls as you said. I'd like to think that the current CopyFromOneRow
offers a good balance here, avoiding the "if" branch with the binary
and non-binary paths.

One way to address code duplication is to use static inline helper functions
that do a lot of the work in a generic fashion, but where the compiler can
optimize the branches away, because it can do constant folding.

If yes, then I'd assume that this shuts down the whole thread or that it
needs a completely different approach, because we will multiply indirect
function calls that can control how data is generated for each row, which is
the original case that Sutou-san wanted to tackle.

I think it could be rescued fairly easily - remove the dispatch via
->copy_attribute_out(). To avoid duplicating code you could use a static
inline function that's used with constant arguments by both csv and text mode.

Hmm. So you basically mean to tweak the beginning of
CopyToTextOneRow() and CopyToTextStart() so as copy_attribute_out is
saved in a local variable outside of cstate and we'd save the "if"
checked for each attribute. If I got that right, it would mean
something like the v13-0002 attached, on top of the v13-0001 of
upthread. Is that what you meant?

No - what I mean is that it doesn't make sense to have copy_attribute_out(),
as e.g. CopyToTextOneRow() already knows that it's dealing with text, so it
can directly call the right function. That does require splitting a bit more
between csv and text output, but I think that can be done without much
duplication.

Greetings,

Andres Freund

#121Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#120)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Feb 05, 2024 at 09:46:42PM -0800, Andres Freund wrote:

No - what I mean is that it doesn't make sense to have copy_attribute_out(),
as e.g. CopyToTextOneRow() already knows that it's dealing with text, so it
can directly call the right function. That does require splitting a bit more
between csv and text output, but I think that can be done without much
duplication.

I am not sure to understand here. In what is that different from
reverting 2889fd23be56 then mark CopyAttributeOutCSV and
CopyAttributeOutText as static inline? Or you mean to merge
CopyAttributeOutText and CopyAttributeOutCSV together into a single
inlined function, reducing a bit code readability? Both routines have
their own roadmap for encoding_embeds_ascii with quoting and escaping,
so keeping them separated looks kinda cleaner here.
--
Michael

#122Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#121)
3 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On 2024-02-06 15:11:05 +0900, Michael Paquier wrote:

On Mon, Feb 05, 2024 at 09:46:42PM -0800, Andres Freund wrote:

No - what I mean is that it doesn't make sense to have copy_attribute_out(),
as e.g. CopyToTextOneRow() already knows that it's dealing with text, so it
can directly call the right function. That does require splitting a bit more
between csv and text output, but I think that can be done without much
duplication.

I am not sure to understand here. In what is that different from
reverting 2889fd23be56 then mark CopyAttributeOutCSV and
CopyAttributeOutText as static inline?

Well, you can't just do that, because there's only one caller, namely
CopyToTextOneRow(). What I am trying to suggest is something like the
attached, just a quick hacky POC. Namely to split out CSV support from
CopyToTextOneRow() by introducing CopyToCSVOneRow(), and to avoid code
duplication by moving the code into a new CopyToTextLikeOneRow().

I named it CopyToTextLike* here, because it seems confusing that some Text*
are used for both CSV and text and others are actually just for text. But if
were to go for that, we should go further.

To test the performnce effects I chose to remove the pointless encoding
"check" we're discussing in the other thread, as it makes it harder to see the
time differences due to the per-attribute code. I did three runs of pgbench
-t of [1]COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null'; and chose the fastest result for each.

With turbo mode and power saving disabled:

Avg Time
HEAD 995.349
Remove Encoding Check 870.793
v13-0001 869.678
Remove out callback 839.508

Greetings,

Andres Freund

[1]: COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null';

Attachments:

v13a-0001-WIP-COPY-TO-remove-unnecessary-and-ineffective-.patchtext/x-diff; charset=us-asciiDownload
From 28be7510a62984eb09b41aabe8c345a07b2b0e97 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Tue, 6 Feb 2024 14:57:20 -0800
Subject: [PATCH v13a 1/3] WIP: COPY TO: remove unnecessary and ineffective
 encoding "checks"

Author:
Reviewed-by:
Discussion: https://postgr.es/m/
Backpatch:
---
 src/backend/commands/copyto.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 52b42f8a522..ea317b5b3d5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -637,9 +637,10 @@ BeginCopyTo(ParseState *pstate,
 	 * are the same, we must apply pg_any_to_server() to validate data in
 	 * multibyte encodings.
 	 */
-	cstate->need_transcoding =
-		(cstate->file_encoding != GetDatabaseEncoding() ||
-		 pg_database_encoding_max_length() > 1);
+	cstate->need_transcoding = (
+		cstate->file_encoding != GetDatabaseEncoding()
+		 /* || pg_database_encoding_max_length() > 1 */
+		);
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-- 
2.38.0

v13a-0002-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 176442831183baa7648fee87ab4aa016d9c4d8e4 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 6 Feb 2024 08:40:17 +0900
Subject: [PATCH v13a 2/3] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           | 100 ++++++
 src/include/commands/copyfrom_internal.h |  10 +
 src/backend/commands/copyfrom.c          | 209 ++++++++---
 src/backend/commands/copyfromparse.c     | 362 ++++++++++---------
 src/backend/commands/copyto.c            | 438 +++++++++++++++--------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 770 insertions(+), 351 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..87e0629c2f7
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d090..5fb52dc6298 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -65,6 +66,9 @@ typedef int (*CopyReadAttributes) (CopyFromState cstate);
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 extern int	CopyReadAttributesCSV(CopyFromState cstate);
 extern int	CopyReadAttributesText(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e49..a90b7189b5d 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,160 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1540,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1571,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1727,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1759,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,25 +1896,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-		if (cstate->opts.csv_mode)
-			cstate->copy_read_attributes = CopyReadAttributesCSV;
-		else
-			cstate->copy_read_attributes = CopyReadAttributesText;
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1794,6 +1909,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e9..c45f9ae134e 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -832,6 +832,200 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -841,7 +1035,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -849,181 +1044,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ea317b5b3d5..8923627d9ad 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -79,6 +80,9 @@ typedef void (*CopyAttributeOut) (CopyToState cstate, const char *string,
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -143,6 +147,291 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/* Set output representation callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_attribute_out = CopyAttributeOutCSV;
+	else
+		cstate->copy_attribute_out = CopyAttributeOutText;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			/* Ignore quotes */
+			cstate->copy_attribute_out(cstate, colname, false);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			cstate->copy_attribute_out(cstate, string,
+									   cstate->opts.force_quote_flags[attnum - 1]);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation function.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -210,16 +499,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -254,10 +533,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -445,14 +720,8 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
-	/* Set output representation callback */
-	if (!cstate->opts.binary)
-	{
-		if (cstate->opts.csv_mode)
-			cstate->copy_attribute_out = CopyAttributeOutCSV;
-		else
-			cstate->copy_attribute_out = CopyAttributeOutText;
-	}
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -792,19 +1061,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -817,54 +1077,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				/* Ignore quotes */
-				cstate->copy_attribute_out(cstate, colname, false);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -903,13 +1116,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -925,68 +1132,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-
-				cstate->copy_attribute_out(cstate, string,
-										   cstate->opts.force_quote_flags[attnum - 1]);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b7..d02a7773e37 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.38.0

v13a-0003-WIP-Remove-out-callback.patchtext/x-diff; charset=us-asciiDownload
From 6f505a0b94564ad2dfa628f61ddee7c9178c4df0 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Tue, 6 Feb 2024 14:50:46 -0800
Subject: [PATCH v13a 3/3] WIP: Remove out callback

---
 src/backend/commands/copyto.c | 66 ++++++++++++++++++++---------------
 1 file changed, 37 insertions(+), 29 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 8923627d9ad..8cbcc399ea0 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -55,14 +55,6 @@ typedef enum CopyDest
 	COPY_CALLBACK,				/* to callback function */
 } CopyDest;
 
-/*
- * Per-format callback to send output representation of one attribute for
- * a `string`.  `use_quote` tracks if quotes are required in the output
- * representation.
- */
-typedef void (*CopyAttributeOut) (CopyToState cstate, const char *string,
-								  bool use_quote);
-
 /*
  * This struct contains all the state variables used throughout a COPY TO
  * operation.
@@ -109,7 +101,6 @@ typedef struct CopyToStateData
 	MemoryContext copycontext;	/* per-copy execution context */
 
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	CopyAttributeOut copy_attribute_out;	/* output representation callback */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
 } CopyToStateData;
@@ -131,9 +122,8 @@ static void EndCopy(CopyToState cstate);
 static void ClosePipeToProgram(CopyToState cstate);
 static void CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot);
 
-/* Callbacks for copy_attribute_out */
-static void CopyAttributeOutText(CopyToState cstate, const char *string,
-								 bool use_quote);
+/* Helpers for for CopyToTextStart / CopyToTextLikeOneRow */
+static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
@@ -192,12 +182,6 @@ CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
 {
 	ListCell   *cur;
 
-	/* Set output representation callback */
-	if (cstate->opts.csv_mode)
-		cstate->copy_attribute_out = CopyAttributeOutCSV;
-	else
-		cstate->copy_attribute_out = CopyAttributeOutText;
-
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
@@ -224,7 +208,10 @@ CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
 			/* Ignore quotes */
-			cstate->copy_attribute_out(cstate, colname, false);
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
 		}
 
 		CopyToTextSendEndOfRow(cstate);
@@ -248,13 +235,16 @@ CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 }
 
 /*
- * CopyToTextOneRow
+ * CopyToTextLikeOneRow
  *
- * Process one row for text/CSV format.
+ * Process one row for text/CSV format. This is intended to be used by callers
+ * that pass in a constant value for is_csv, allowing the compiler to optimize
+ * relevant branches away.
  */
-static void
-CopyToTextOneRow(CopyToState cstate,
-				 TupleTableSlot *slot)
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
 {
 	bool		need_delim = false;
 	FmgrInfo   *out_functions = cstate->out_functions;
@@ -280,14 +270,33 @@ CopyToTextOneRow(CopyToState cstate,
 
 			string = OutputFunctionCall(&out_functions[attnum - 1], value);
 
-			cstate->copy_attribute_out(cstate, string,
-									   cstate->opts.force_quote_flags[attnum - 1]);
+			/* optimized away by compiler, argument is constant at caller */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
 		}
 	}
 
 	CopyToTextSendEndOfRow(cstate);
 }
 
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+static void
+CopyToCSVOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+
 /*
  * CopyToTextEnd
  *
@@ -406,7 +415,7 @@ static const CopyToRoutine CopyToRoutineText = {
 static const CopyToRoutine CopyToRoutineCSV = {
 	.CopyToStart = CopyToTextStart,
 	.CopyToOutFunc = CopyToTextOutFunc,
-	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToOneRow = CopyToCSVOneRow,
 	.CopyToEnd = CopyToTextEnd,
 };
 
@@ -1155,8 +1164,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	} while (0)
 
 static void
-CopyAttributeOutText(CopyToState cstate, const char *string,
-					 bool use_quote)
+CopyAttributeOutText(CopyToState cstate, const char *string)
 {
 	const char *ptr;
 	const char *start;
-- 
2.38.0

#123Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#122)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 06, 2024 at 03:33:36PM -0800, Andres Freund wrote:

Well, you can't just do that, because there's only one caller, namely
CopyToTextOneRow(). What I am trying to suggest is something like the
attached, just a quick hacky POC. Namely to split out CSV support from
CopyToTextOneRow() by introducing CopyToCSVOneRow(), and to avoid code
duplication by moving the code into a new CopyToTextLikeOneRow().

Ah, OK. Got it now.

I named it CopyToTextLike* here, because it seems confusing that some Text*
are used for both CSV and text and others are actually just for text. But if
were to go for that, we should go further.

This can always be argued later.

To test the performnce effects I chose to remove the pointless encoding
"check" we're discussing in the other thread, as it makes it harder to see the
time differences due to the per-attribute code. I did three runs of pgbench
-t of [1] and chose the fastest result for each.

With turbo mode and power saving disabled:
Avg Time
HEAD 995.349
Remove Encoding Check 870.793
v13-0001 869.678
Remove out callback 839.508

Hmm. That explains why I was not seeing any differences with this
callback then. It seems to me that the order of actions to take is
clear, like:
- Revert 2889fd23be56 to keep a clean state of the tree, now done with
1aa8324b81fa.
- Dive into the strlen() issue, as it really looks like this can
create more simplifications for the patch discussed on this thread
with COPY TO.
- Revisit what we have here, looking at more profiles to see how HEAD
an v13 compare. It looks like we are on a good path, but let's tackle
things one step at a time.
--
Michael

#124Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#98)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 01, 2024 at 10:57:58AM +0900, Michael Paquier wrote:

CREATE EXTENSION blackhole_am;

One thing I have forgotten here is to provide a copy of this AM for
future references, so here you go with a blackhole_am.tar.gz attached.
--
Michael

Attachments:

blackhole_am.tar.gzapplication/gzipDownload
#125Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#123)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZcMIDgkdSrz5ibvf@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 7 Feb 2024 13:33:18 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

Hmm. That explains why I was not seeing any differences with this
callback then. It seems to me that the order of actions to take is
clear, like:
- Revert 2889fd23be56 to keep a clean state of the tree, now done with
1aa8324b81fa.

Done.

- Dive into the strlen() issue, as it really looks like this can
create more simplifications for the patch discussed on this thread
with COPY TO.

Done: b619852086ed2b5df76631f5678f60d3bebd3745

- Revisit what we have here, looking at more profiles to see how HEAD
an v13 compare. It looks like we are on a good path, but let's tackle
things one step at a time.

Are you already working on this? Do you want me to write the
next patch based on the current master?

Thanks,
--
kou

#126Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#123)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Feb 07, 2024 at 01:33:18PM +0900, Michael Paquier wrote:

Hmm. That explains why I was not seeing any differences with this
callback then. It seems to me that the order of actions to take is
clear, like:
- Revert 2889fd23be56 to keep a clean state of the tree, now done with
1aa8324b81fa.
- Dive into the strlen() issue, as it really looks like this can
create more simplifications for the patch discussed on this thread
with COPY TO.

This has been done this morning with b619852086ed.

- Revisit what we have here, looking at more profiles to see how HEAD
an v13 compare. It looks like we are on a good path, but let's tackle
things one step at a time.

And attached is a v14 that's rebased on HEAD. While on it, I've
looked at more profiles and did more runtime checks.

Some runtimes, in (ms), average of 15 runs, 30 int attributes on 5M
rows as mentioned above:
COPY FROM text binary
HEAD 6066 7110
v14 6087 7105
COPY TO text binary
HEAD 6591 10161
v14 6508 10189

And here are some profiles, where I'm not seeing an impact at
row-level with the addition of the callbacks:
COPY FROM, text, master:
-   66.59%    16.10%  postgres  postgres            [.] NextCopyFrom                                                                                                       ▒    - 50.50% NextCopyFrom
       - 30.75% NextCopyFromRawFields
          + 15.93% CopyReadLine
            13.73% CopyReadAttributesText
       - 19.43% InputFunctionCallSafe
          + 13.49% int4in
            0.77% pg_strtoint32_safe
    + 16.10% _start
COPY FROM, text, v14:
-   66.42%     0.74%  postgres  postgres            [.] NextCopyFrom
    - 65.67% NextCopyFrom
       - 65.51% CopyFromTextOneRow
          - 30.25% NextCopyFromRawFields
             + 16.14% CopyReadLine
               13.40% CopyReadAttributesText
          - 18.96% InputFunctionCallSafe
             + 13.15% int4in
               0.70% pg_strtoint32_safe
    + 0.74% _start
COPY TO, binary, master
-   90.32%     7.14%  postgres  postgres            [.] CopyOneRowTo
    - 83.18% CopyOneRowTo
       + 60.30% SendFunctionCall
       + 10.99% appendBinaryStringInfo
       + 3.67% MemoryContextReset
       + 2.89% CopySendEndOfRow
         0.89% memcpy@plt
         0.66% 0xffffa052db5c
         0.62% enlargeStringInfo
         0.56% pgstat_progress_update_param
    + 7.14% _start
COPY TO, binary, v14
-   90.96%     0.21%  postgres  postgres            [.] CopyOneRowTo
    - 90.75% CopyOneRowTo
       - 81.86% CopyToBinaryOneRow
          + 59.17% SendFunctionCall
          + 10.56% appendBinaryStringInfo
            1.10% enlargeStringInfo
            0.59% int4send
            0.57% memcpy@plt
       + 3.68% MemoryContextReset
       + 2.83% CopySendEndOfRow
         1.13% appendBinaryStringInfo
         0.58% SendFunctionCall
         0.58% pgstat_progress_update_param

Are there any comments about this v14? Sutou-san?

A next step I think we could take is to split the binary-only and the
text/csv-only data in each cstate into their own structure to make the
structure, with an opaque pointer that custom formats could use, but a
lot of fields are shared as well. This patch is already complicated
enough IMO, so I'm OK to leave it out for the moment, and focus on
making this infra pluggable as a next step.
--
Michael

Attachments:

v14-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 6aa7f8cb65e792def8dda631fed19404db0a88af Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Tue, 6 Feb 2024 08:40:17 +0900
Subject: [PATCH v14] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.

This improves performance when a relation has many attributes as this
eliminates format-based if branches.  The more the attributes, the
better the performance gain.  Blah add some numbers.
---
 src/include/commands/copyapi.h           | 100 ++++++
 src/include/commands/copyfrom_internal.h |  10 +
 src/backend/commands/copyfrom.c          | 209 ++++++++---
 src/backend/commands/copyfromparse.c     | 362 ++++++++++---------
 src/backend/commands/copyto.c            | 434 ++++++++++++++++-------
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 770 insertions(+), 347 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..87e0629c2f
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled. `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d09..5fb52dc629 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -65,6 +66,9 @@ typedef int (*CopyReadAttributes) (CopyFromState cstate);
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -200,4 +204,10 @@ extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 extern int	CopyReadAttributesCSV(CopyFromState cstate);
 extern int	CopyReadAttributesText(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a90b7189b5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,160 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1540,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1571,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1727,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1759,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,25 +1896,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-		if (cstate->opts.csv_mode)
-			cstate->copy_read_attributes = CopyReadAttributesCSV;
-		else
-			cstate->copy_read_attributes = CopyReadAttributesText;
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1794,6 +1909,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e..c45f9ae134 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -832,6 +832,200 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -841,7 +1035,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -849,181 +1044,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..e9f9246532 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -131,6 +135,290 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation function.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +520,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -433,6 +707,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -772,19 +1049,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -797,56 +1065,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -885,13 +1104,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -907,70 +1120,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 91433d439b..d02a7773e3 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#127Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#125)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 09, 2024 at 01:19:50PM +0900, Sutou Kouhei wrote:

Are you already working on this? Do you want me to write the
next patch based on the current master?

No need for a new patch, thanks. I've spent some time today doing a
rebase and measuring the whole, without seeing a degradation with what
should be the worst cases for COPY TO and FROM:
/messages/by-id/ZcWoTr1N0GELFA9E@paquier.xyz
--
Michael

#128Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#126)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZcWoTr1N0GELFA9E@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 Feb 2024 13:21:34 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

- Revisit what we have here, looking at more profiles to see how HEAD
an v13 compare. It looks like we are on a good path, but let's tackle
things one step at a time.

And attached is a v14 that's rebased on HEAD.

Thanks!

A next step I think we could take is to split the binary-only and the
text/csv-only data in each cstate into their own structure to make the
structure, with an opaque pointer that custom formats could use, but a
lot of fields are shared as well.

It'll make COPY code base cleaner but it may decrease
performance. How about just adding an opaque pointer to each
cstate as the next step and then try the split?

My suggestion:
1. Introduce Copy{To,From}Routine
(We can do it based on the v14 patch.)
2. Add an opaque pointer to Copy{To,From}Routine
(This must not have performance impact.)
3.a. Split format specific data to the opaque space
3.b. Add support for registering custom format handler by
creating a function
4. ...

This patch is already complicated
enough IMO, so I'm OK to leave it out for the moment, and focus on
making this infra pluggable as a next step.

I agree with you.

Are there any comments about this v14? Sutou-san?

Here are my comments:

+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;

I think that we should not use this approach for
performance. We need to use "static inline" and constant
argument instead something like the attached
remove-copy-read-attributes.diff.

We have similar codes for
CopyReadLine()/CopyReadLineText(). The attached
remove-copy-read-attributes-and-optimize-copy-read-line.diff
also applies the same optimization to
CopyReadLine()/CopyReadLineText().

I hope that this improved performance of COPY FROM.

+/*
+ * Routines assigned to each format.
++

Garbage "+"

+ * CSV and text share the same implementation, at the exception of the
+ * copy_read_attributes callback.
+ */
+/*
+ * CopyToTextOneRow
+ *
+ * Process one row for text/CSV format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate,
+				 TupleTableSlot *slot)
+{
...
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
...

How about use "static inline" and constant argument approach
here too?

static inline void
CopyToTextBasedOneRow(CopyToState cstate,
TupleTableSlot *slot,
bool csv_mode)
{
...
if (cstate->opts.csv_mode)
CopyAttributeOutCSV(cstate, string,
cstate->opts.force_quote_flags[attnum - 1]);
else
CopyAttributeOutText(cstate, string);
...
}

static void
CopyToTextOneRow(CopyToState cstate,
TupleTableSlot *slot,
bool csv_mode)
{
CopyToTextBasedOneRow(cstate, slot, false);
}

static void
CopyToCSVOneRow(CopyToState cstate,
TupleTableSlot *slot,
bool csv_mode)
{
CopyToTextBasedOneRow(cstate, slot, true);
}

static const CopyToRoutine CopyCSVRoutineText = {
...
.CopyToOneRow = CopyToCSVOneRow,
...
};

Thanks,
--
kou

Attachments:

remove-copy-read-attributes.difftext/x-patch; charset=us-asciiDownload
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index a90b7189b5..6e244fb443 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -158,12 +158,6 @@ CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
 	attr_count = list_length(cstate->attnumlist);
 	cstate->max_fields = attr_count;
 	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-	/* Set read attribute callback */
-	if (cstate->opts.csv_mode)
-		cstate->copy_read_attributes = CopyReadAttributesCSV;
-	else
-		cstate->copy_read_attributes = CopyReadAttributesText;
 }
 
 /*
@@ -221,9 +215,8 @@ CopyFromBinaryEnd(CopyFromState cstate)
 
 /*
  * Routines assigned to each format.
-+
  * CSV and text share the same implementation, at the exception of the
- * copy_read_attributes callback.
+ * CopyFromOneRow callback.
  */
 static const CopyFromRoutine CopyFromRoutineText = {
 	.CopyFromInFunc = CopyFromTextInFunc,
@@ -235,7 +228,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 static const CopyFromRoutine CopyFromRoutineCSV = {
 	.CopyFromInFunc = CopyFromTextInFunc,
 	.CopyFromStart = CopyFromTextStart,
-	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromOneRow = CopyFromCSVOneRow,
 	.CopyFromEnd = CopyFromTextEnd,
 };
 
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index c45f9ae134..1f8b2ddc6e 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -25,10 +25,10 @@
  *    is copied into 'line_buf', with quotes and escape characters still
  *    intact.
  *
- * 4. CopyReadAttributesText/CSV() function (via copy_read_attribute) takes
- *    the input line from 'line_buf', and splits it into fields, unescaping
- *    the data as required.  The fields are stored in 'attribute_buf', and
- *    'raw_fields' array holds pointers to each field.
+ * 4. CopyReadAttributesText/CSV() function takes the input line from
+ *    'line_buf', and splits it into fields, unescaping the data as required.
+ *    The fields are stored in 'attribute_buf', and 'raw_fields' array holds
+ *    pointers to each field.
  *
  * If encoding conversion is not required, a shortcut is taken in step 2 to
  * avoid copying the data unnecessarily.  The 'input_buf' pointer is set to
@@ -152,6 +152,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate);
 static bool CopyReadLineText(CopyFromState cstate);
+static int	CopyReadAttributesText(CopyFromState cstate);
+static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
@@ -748,9 +750,14 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * Creating static inline NextCopyFromRawFieldsInternal() and call this with
+ * constant 'csv_mode' value from CopyFromTextOneRow()/CopyFromCSVOneRow()
+ * (via CopyFromTextBasedOneRow()) is for optimization. We can avoid indirect
+ * function call by this.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool csv_mode)
 {
 	int			fldct;
 	bool		done;
@@ -773,7 +780,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		{
 			int			fldnum;
 
-			fldct = cstate->copy_read_attributes(cstate);
+			if (csv_mode)
+				fldct = CopyReadAttributesCSV(cstate);
+			else
+				fldct = CopyReadAttributesText(cstate);
 
 			if (fldct != list_length(cstate->attnumlist))
 				ereport(ERROR,
@@ -825,7 +835,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		return false;
 
 	/* Parse the line into de-escaped field values */
-	fldct = cstate->copy_read_attributes(cstate);
+	if (csv_mode)
+		fldct = CopyReadAttributesCSV(cstate);
+	else
+		fldct = CopyReadAttributesText(cstate);
 
 	*fields = cstate->raw_fields;
 	*nfields = fldct;
@@ -833,16 +846,26 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 }
 
 /*
- * CopyFromTextOneRow
+ * See NextCopyFromRawFieldsInternal() for details.
+ */
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	return NextCopyFromRawFieldsInternal(cstate, fields, nfields, cstate->opts.csv_mode);
+}
+
+/*
+ * CopyFromTextBasedOneRow
  *
  * Copy one row to a set of `values` and `nulls` for the text and CSV
  * formats.
  */
-bool
-CopyFromTextOneRow(CopyFromState cstate,
-				   ExprContext *econtext,
-				   Datum *values,
-				   bool *nulls)
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate,
+						ExprContext *econtext,
+						Datum *values,
+						bool *nulls,
+						bool csv_mode)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
@@ -859,7 +882,7 @@ CopyFromTextOneRow(CopyFromState cstate,
 	attr_count = list_length(cstate->attnumlist);
 
 	/* read raw fields in the next line */
-	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings, &fldct, csv_mode))
 		return false;
 
 	/* check for overflowing fields */
@@ -956,6 +979,34 @@ CopyFromTextOneRow(CopyFromState cstate,
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, true);
+}
+
 /*
  * CopyFromBinaryOneRow
  *
@@ -1530,7 +1581,7 @@ GetDecimalFromHex(char hex)
  *
  * The return value is the number of fields actually read.
  */
-int
+static int
 CopyReadAttributesText(CopyFromState cstate)
 {
 	char		delimc = cstate->opts.delim[0];
@@ -1784,7 +1835,7 @@ CopyReadAttributesText(CopyFromState cstate)
  * CopyReadAttributesText, except we parse the fields according to
  * "standard" (i.e. common) CSV usage.
  */
-int
+static int
 CopyReadAttributesCSV(CopyFromState cstate)
 {
 	char		delimc = cstate->opts.delim[0];
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 5fb52dc629..5d597a3c8e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -141,12 +141,6 @@ typedef struct CopyFromStateData
 	int			max_fields;
 	char	  **raw_fields;
 
-	/*
-	 * Per-format callback to parse lines, then fill raw_fields and
-	 * attribute_buf.
-	 */
-	CopyReadAttributes copy_read_attributes;
-
 	/*
 	 * Similarly, line_buf holds the whole input line being processed. The
 	 * input cycle is first to read the whole line into line_buf, and then
@@ -200,13 +194,11 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-/* Callbacks for copy_read_attributes */
-extern int	CopyReadAttributesCSV(CopyFromState cstate);
-extern int	CopyReadAttributesText(CopyFromState cstate);
-
 /* Callbacks for CopyFromRoutine->CopyFromOneRow */
 extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
 							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
remove-copy-read-attributes-and-optimize-copy-read-line.difftext/x-patch; charset=us-asciiDownload
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index a90b7189b5..6e244fb443 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -158,12 +158,6 @@ CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
 	attr_count = list_length(cstate->attnumlist);
 	cstate->max_fields = attr_count;
 	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-
-	/* Set read attribute callback */
-	if (cstate->opts.csv_mode)
-		cstate->copy_read_attributes = CopyReadAttributesCSV;
-	else
-		cstate->copy_read_attributes = CopyReadAttributesText;
 }
 
 /*
@@ -221,9 +215,8 @@ CopyFromBinaryEnd(CopyFromState cstate)
 
 /*
  * Routines assigned to each format.
-+
  * CSV and text share the same implementation, at the exception of the
- * copy_read_attributes callback.
+ * CopyFromOneRow callback.
  */
 static const CopyFromRoutine CopyFromRoutineText = {
 	.CopyFromInFunc = CopyFromTextInFunc,
@@ -235,7 +228,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 static const CopyFromRoutine CopyFromRoutineCSV = {
 	.CopyFromInFunc = CopyFromTextInFunc,
 	.CopyFromStart = CopyFromTextStart,
-	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromOneRow = CopyFromCSVOneRow,
 	.CopyFromEnd = CopyFromTextEnd,
 };
 
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index c45f9ae134..ea2eb45491 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -25,10 +25,10 @@
  *    is copied into 'line_buf', with quotes and escape characters still
  *    intact.
  *
- * 4. CopyReadAttributesText/CSV() function (via copy_read_attribute) takes
- *    the input line from 'line_buf', and splits it into fields, unescaping
- *    the data as required.  The fields are stored in 'attribute_buf', and
- *    'raw_fields' array holds pointers to each field.
+ * 4. CopyReadAttributesText/CSV() function takes the input line from
+ *    'line_buf', and splits it into fields, unescaping the data as required.
+ *    The fields are stored in 'attribute_buf', and 'raw_fields' array holds
+ *    pointers to each field.
  *
  * If encoding conversion is not required, a shortcut is taken in step 2 to
  * avoid copying the data unnecessarily.  The 'input_buf' pointer is set to
@@ -150,8 +150,10 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static inline bool CopyReadLine(CopyFromState cstate, bool csv_mode);
+static inline bool CopyReadLineText(CopyFromState cstate, bool csv_mode);
+static int	CopyReadAttributesText(CopyFromState cstate);
+static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
@@ -748,9 +750,14 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * Creating static inline NextCopyFromRawFieldsInternal() and call this with
+ * constant 'csv_mode' value from CopyFromTextOneRow()/CopyFromCSVOneRow()
+ * (via CopyFromTextBasedOneRow()) is for optimization. We can avoid indirect
+ * function call by this.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool csv_mode)
 {
 	int			fldct;
 	bool		done;
@@ -767,13 +774,16 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, csv_mode);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			fldct = cstate->copy_read_attributes(cstate);
+			if (csv_mode)
+				fldct = CopyReadAttributesCSV(cstate);
+			else
+				fldct = CopyReadAttributesText(cstate);
 
 			if (fldct != list_length(cstate->attnumlist))
 				ereport(ERROR,
@@ -814,7 +824,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, csv_mode);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -825,7 +835,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		return false;
 
 	/* Parse the line into de-escaped field values */
-	fldct = cstate->copy_read_attributes(cstate);
+	if (csv_mode)
+		fldct = CopyReadAttributesCSV(cstate);
+	else
+		fldct = CopyReadAttributesText(cstate);
 
 	*fields = cstate->raw_fields;
 	*nfields = fldct;
@@ -833,16 +846,26 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 }
 
 /*
- * CopyFromTextOneRow
+ * See NextCopyFromRawFieldsInternal() for details.
+ */
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	return NextCopyFromRawFieldsInternal(cstate, fields, nfields, cstate->opts.csv_mode);
+}
+
+/*
+ * CopyFromTextBasedOneRow
  *
  * Copy one row to a set of `values` and `nulls` for the text and CSV
  * formats.
  */
-bool
-CopyFromTextOneRow(CopyFromState cstate,
-				   ExprContext *econtext,
-				   Datum *values,
-				   bool *nulls)
+static inline bool
+CopyFromTextBasedOneRow(CopyFromState cstate,
+						ExprContext *econtext,
+						Datum *values,
+						bool *nulls,
+						bool csv_mode)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
@@ -859,7 +882,7 @@ CopyFromTextOneRow(CopyFromState cstate,
 	attr_count = list_length(cstate->attnumlist);
 
 	/* read raw fields in the next line */
-	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings, &fldct, csv_mode))
 		return false;
 
 	/* check for overflowing fields */
@@ -894,7 +917,7 @@ CopyFromTextOneRow(CopyFromState cstate,
 		cstate->cur_attname = NameStr(att->attname);
 		cstate->cur_attval = string;
 
-		if (cstate->opts.csv_mode)
+		if (csv_mode)
 		{
 			if (string == NULL &&
 				cstate->opts.force_notnull_flags[m])
@@ -956,6 +979,34 @@ CopyFromTextOneRow(CopyFromState cstate,
 	return true;
 }
 
+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextBasedOneRow(cstate, econtext, values, nulls, true);
+}
+
 /*
  * CopyFromBinaryOneRow
  *
@@ -1089,8 +1140,8 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * by newline.  The terminating newline or EOF marker is not included
  * in the final value of line_buf.
  */
-static bool
-CopyReadLine(CopyFromState cstate)
+static inline bool
+CopyReadLine(CopyFromState cstate, bool csv_mode)
 {
 	bool		result;
 
@@ -1098,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, csv_mode);
 
 	if (result)
 	{
@@ -1165,8 +1216,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool csv_mode)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1182,7 +1233,7 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	if (csv_mode)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1262,7 +1313,7 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		if (csv_mode)
 		{
 			/*
 			 * If character is '\\' or '\r', we may need to look ahead below.
@@ -1301,7 +1352,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!csv_mode || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1329,10 +1380,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !csv_mode ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !csv_mode ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1346,10 +1397,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !csv_mode ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !csv_mode ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1357,15 +1408,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!csv_mode || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !csv_mode ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !csv_mode ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1377,7 +1428,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!csv_mode || first_char_in_line))
 		{
 			char		c2;
 
@@ -1410,7 +1461,7 @@ CopyReadLineText(CopyFromState cstate)
 
 					if (c2 == '\n')
 					{
-						if (!cstate->opts.csv_mode)
+						if (!csv_mode)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1419,7 +1470,7 @@ CopyReadLineText(CopyFromState cstate)
 					}
 					else if (c2 != '\r')
 					{
-						if (!cstate->opts.csv_mode)
+						if (!csv_mode)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker corrupt")));
@@ -1435,7 +1486,7 @@ CopyReadLineText(CopyFromState cstate)
 
 				if (c2 != '\r' && c2 != '\n')
 				{
-					if (!cstate->opts.csv_mode)
+					if (!csv_mode)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 errmsg("end-of-copy marker corrupt")));
@@ -1464,7 +1515,7 @@ CopyReadLineText(CopyFromState cstate)
 				result = true;	/* report EOF */
 				break;
 			}
-			else if (!cstate->opts.csv_mode)
+			else if (!csv_mode)
 			{
 				/*
 				 * If we are here, it means we found a backslash followed by
@@ -1530,7 +1581,7 @@ GetDecimalFromHex(char hex)
  *
  * The return value is the number of fields actually read.
  */
-int
+static int
 CopyReadAttributesText(CopyFromState cstate)
 {
 	char		delimc = cstate->opts.delim[0];
@@ -1784,7 +1835,7 @@ CopyReadAttributesText(CopyFromState cstate)
  * CopyReadAttributesText, except we parse the fields according to
  * "standard" (i.e. common) CSV usage.
  */
-int
+static int
 CopyReadAttributesCSV(CopyFromState cstate)
 {
 	char		delimc = cstate->opts.delim[0];
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 5fb52dc629..5d597a3c8e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -141,12 +141,6 @@ typedef struct CopyFromStateData
 	int			max_fields;
 	char	  **raw_fields;
 
-	/*
-	 * Per-format callback to parse lines, then fill raw_fields and
-	 * attribute_buf.
-	 */
-	CopyReadAttributes copy_read_attributes;
-
 	/*
 	 * Similarly, line_buf holds the whole input line being processed. The
 	 * input cycle is first to read the whole line into line_buf, and then
@@ -200,13 +194,11 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-/* Callbacks for copy_read_attributes */
-extern int	CopyReadAttributesCSV(CopyFromState cstate);
-extern int	CopyReadAttributesText(CopyFromState cstate);
-
 /* Callbacks for CopyFromRoutine->CopyFromOneRow */
 extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
 							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
#129Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#128)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 09, 2024 at 04:32:05PM +0900, Sutou Kouhei wrote:

In <ZcWoTr1N0GELFA9E@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 Feb 2024 13:21:34 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

A next step I think we could take is to split the binary-only and the
text/csv-only data in each cstate into their own structure to make the
structure, with an opaque pointer that custom formats could use, but a
lot of fields are shared as well.

It'll make COPY code base cleaner but it may decrease
performance.

Perhaps, but I'm not sure, TBH. But perhaps others can comment on
this point. This surely needs to be studied closely.

My suggestion:
1. Introduce Copy{To,From}Routine
(We can do it based on the v14 patch.)
2. Add an opaque pointer to Copy{To,From}Routine
(This must not have performance impact.)
3.a. Split format specific data to the opaque space
3.b. Add support for registering custom format handler by
creating a function
4. ...

4. is going to need 3. At this point 3.b sounds like the main thing
to tackle first if we want to get something usable for the end-user
into this release, at least. Still 2 is important for pluggability
as we pass the cstates across all the routines and custom formats want
to save their own data, so this split sounds OK. I am not sure how
much of 3.a we really need to do for the in-core formats.

I think that we should not use this approach for
performance. We need to use "static inline" and constant
argument instead something like the attached
remove-copy-read-attributes.diff.

FWIW, using inlining did not show any performance change here.
Perhaps that's only because this is called in the COPY FROM path once
per row (even for the case of using 1 attribute with blackhole_am).
--
Michael

#130Andres Freund
andres@anarazel.de
In reply to: Michael Paquier (#126)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On 2024-02-09 13:21:34 +0900, Michael Paquier wrote:

+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}

FWIW, we should really change the copy code to initialize FunctionCallInfoData
instead of re-initializing that on every call, realy makes a difference
performance wise.

+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);

Seems kinda odd that we have a supposedly extensible API that then stores all
this stuff in the non-extensible CopyFromState.

+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;

Why is this here? This seems like generic code, not text format specific.

+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}

Isn't this precisely repeating the mistake of 2889fd23be56?

And, why is this done here? Shouldn't this decision have been made prior to
even calling CopyFromTextStart()?

+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */

I'm very doubtful it's a good idea to combine text and CSV here. They have
basically no shared parsing code, so what's the point in sending them through
one input routine?

+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));

It bothers me that we look to be ending up with different error handling
across the various output formats, particularly if they're ending up in
extensions. That'll make it harder to evolve this code in the future.

+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (cstate->opts.csv_mode)
+		{

More unfortunate intermingling of multiple formats in a single routine.

+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}

I don't think it's good that we end up with this code in different copy
implementations.

Greetings,

Andres Freund

#131Michael Paquier
michael@paquier.xyz
In reply to: Andres Freund (#130)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 09, 2024 at 11:27:05AM -0800, Andres Freund wrote:

On 2024-02-09 13:21:34 +0900, Michael Paquier wrote:

+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}

FWIW, we should really change the copy code to initialize FunctionCallInfoData
instead of re-initializing that on every call, realy makes a difference
performance wise.

You mean to initialize once its memory and let the internal routines
call InitFunctionCallInfoData for each attribute. Sounds like a good
idea, doing that for HEAD before the main patch. More impact with
more attributes.

+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);

Seems kinda odd that we have a supposedly extensible API that then stores all
this stuff in the non-extensible CopyFromState.

That relates to the introduction of the the opaque pointer mentioned
upthread to point to a per-format structure, where we'd store data
specific to each format.

+	/* create workspace for CopyReadAttributes results */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;

Why is this here? This seems like generic code, not text format specific.

We don't care about that for binary.

+/*
+ * CopyFromTextOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ */

I'm very doubtful it's a good idea to combine text and CSV here. They have
basically no shared parsing code, so what's the point in sending them through
one input routine?

The code shared between text and csv involves a path called once per
attribute. TBH, I am not sure how much of the NULL handling should be
put outside the per-row routine as these options are embedded in the
core options. So I don't have a better idea on this one than what's
proposed here if we cannot dispatch the routine calls once per
attribute.

+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));

It bothers me that we look to be ending up with different error handling
across the various output formats, particularly if they're ending up in
extensions. That'll make it harder to evolve this code in the future.

But different formats may have different requirements, including the
number of attributes detected vs expected. That was not really
nothing me.

+ if (cstate->opts.csv_mode)
+ {

More unfortunate intermingling of multiple formats in a single
routine.

Similar answer as a few paragraphs above. Sutou-san was suggesting to
use an internal routine with fixed arguments instead, which would be
enough at the end with some inline instructions?

+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}

I don't think it's good that we end up with this code in different copy
implementations.

Yeah, still we don't care about that for binary.
--
Michael

#132Sutou Kouhei
kou@clear-code.com
In reply to: Andres Freund (#130)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20240209192705.5qdilvviq3py2voq@awork3.anarazel.de>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 Feb 2024 11:27:05 -0800,
Andres Freund <andres@anarazel.de> wrote:

+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}

FWIW, we should really change the copy code to initialize FunctionCallInfoData
instead of re-initializing that on every call, realy makes a difference
performance wise.

How about the attached patch approach? If it's a desired
approach, I can also write a separated patch for COPY TO.

+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}

Isn't this precisely repeating the mistake of 2889fd23be56?

What do you think about the approach in my previous mail's
attachments?
/messages/by-id/20240209.163205.704848659612151781.kou@clear-code.com

If it's a desired approach, I can prepare a v15 patch set
based on the v14 patch set and the approach.

I'll reply other comments later...

Thanks,
--
kou

Attachments:

prepare-callinfo.difftext/x-patch; charset=us-asciiDownload
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a43c853e99 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1691,6 +1691,10 @@ BeginCopyFrom(ParseState *pstate,
 	/* We keep those variables in cstate. */
 	cstate->in_functions = in_functions;
 	cstate->typioparams = typioparams;
+	if (cstate->opts.binary)
+		cstate->fcinfo = PrepareInputFunctionCallInfo();
+	else
+		cstate->fcinfo = PrepareReceiveFunctionCallInfo();
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 906756362e..e372e5efb8 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -853,6 +853,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 				num_defaults = cstate->num_defaults;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
+	FunctionCallInfoBaseData *fcinfo = cstate->fcinfo;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
@@ -953,12 +954,13 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 			 * If ON_ERROR is specified with IGNORE, skip rows with soft
 			 * errors
 			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
+			else if (!PreparedInputFunctionCallSafe(fcinfo,
+													&in_functions[m],
+													string,
+													typioparams[m],
+													att->atttypmod,
+													(Node *) cstate->escontext,
+													&values[m]))
 			{
 				cstate->num_errors++;
 				return true;
@@ -1958,7 +1960,7 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	if (fld_size == -1)
 	{
 		*isnull = true;
-		return ReceiveFunctionCall(flinfo, NULL, typioparam, typmod);
+		return PreparedReceiveFunctionCall(cstate->fcinfo, flinfo, NULL, typioparam, typmod);
 	}
 	if (fld_size < 0)
 		ereport(ERROR,
@@ -1979,8 +1981,8 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	cstate->attribute_buf.data[fld_size] = '\0';
 
 	/* Call the column type's binary input converter */
-	result = ReceiveFunctionCall(flinfo, &cstate->attribute_buf,
-								 typioparam, typmod);
+	result = PreparedReceiveFunctionCall(cstate->fcinfo, flinfo, &cstate->attribute_buf,
+										 typioparam, typmod);
 
 	/* Trouble if it didn't eat the whole buffer */
 	if (cstate->attribute_buf.cursor != cstate->attribute_buf.len)
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index e48a86be54..b0b5310219 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1672,6 +1672,73 @@ DirectInputFunctionCallSafe(PGFunction func, char *str,
 	return true;
 }
 
+/*
+ * Prepare callinfo for PreparedInputFunctionCallSafe to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareInputFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));
+	InitFunctionCallInfoData(*fcinfo, NULL, 3, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	fcinfo->args[1].isnull = false;
+	fcinfo->args[2].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype input function, with prepared callinfo
+ * and non-exception handling of "soft" errors.
+ *
+ * This is basically like InputFunctionCallSafe, but it reuses prepared
+ * callinfo.
+ */
+bool
+PreparedInputFunctionCallSafe(FunctionCallInfoBaseData *fcinfo,
+							  FmgrInfo *flinfo, char *str,
+							  Oid typioparam, int32 typmod,
+							  fmNodePtr escontext,
+							  Datum *result)
+{
+	if (str == NULL && flinfo->fn_strict)
+	{
+		*result = (Datum) 0;	/* just return null result */
+		return true;
+	}
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->context = escontext;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = CStringGetDatum(str);
+	fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
+	fcinfo->args[2].value = Int32GetDatum(typmod);
+
+	*result = FunctionCallInvoke(fcinfo);
+
+	/* Result value is garbage, and could be null, if an error was reported */
+	if (SOFT_ERROR_OCCURRED(escontext))
+		return false;
+
+	/* Otherwise, should get null result if and only if str is NULL */
+	if (str == NULL)
+	{
+		if (!fcinfo->isnull)
+			elog(ERROR, "input function %u returned non-NULL",
+				 flinfo->fn_oid);
+	}
+	else
+	{
+		if (fcinfo->isnull)
+			elog(ERROR, "input function %u returned NULL",
+				 flinfo->fn_oid);
+	}
+
+	return true;
+}
+
 /*
  * Call a previously-looked-up datatype output function.
  *
@@ -1731,6 +1798,65 @@ ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf,
 	return result;
 }
 
+/*
+ * Prepare callinfo for PreparedReceiveFunctionCall to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareReceiveFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));
+	InitFunctionCallInfoData(*fcinfo, NULL, 3, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	fcinfo->args[1].isnull = false;
+	fcinfo->args[2].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype binary-input function, with prepared
+ * callinfo.
+ *
+ * This is basically like ReceiveFunctionCall, but it reuses prepared
+ * callinfo.
+ */
+Datum
+PreparedReceiveFunctionCall(FunctionCallInfoBaseData *fcinfo,
+							FmgrInfo *flinfo, StringInfo buf,
+							Oid typioparam, int32 typmod)
+{
+	Datum		result;
+
+	if (buf == NULL && flinfo->fn_strict)
+		return (Datum) 0;		/* just return null result */
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = PointerGetDatum(buf);
+	fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
+	fcinfo->args[2].value = Int32GetDatum(typmod);
+
+	result = FunctionCallInvoke(fcinfo);
+
+	/* Should get null result if and only if buf is NULL */
+	if (buf == NULL)
+	{
+		if (!fcinfo->isnull)
+			elog(ERROR, "receive function %u returned non-NULL",
+				 flinfo->fn_oid);
+	}
+	else
+	{
+		if (fcinfo->isnull)
+			elog(ERROR, "receive function %u returned NULL",
+				 flinfo->fn_oid);
+	}
+
+	return result;
+}
+
 /*
  * Call a previously-looked-up datatype binary-output function.
  *
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 759f8e3d09..4d7928b3ac 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -104,6 +104,7 @@ typedef struct CopyFromStateData
 	Oid		   *typioparams;	/* array of element types for in_functions */
 	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
 									 * execution */
+	FunctionCallInfoBaseData *fcinfo;	/* reusable callinfo for in_functions */
 	uint64		num_errors;		/* total number of rows which contained soft
 								 * errors */
 	int		   *defmap;			/* array of default att numbers related to
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
index ccb4070a25..994d8ce487 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -708,12 +708,24 @@ extern bool DirectInputFunctionCallSafe(PGFunction func, char *str,
 										Oid typioparam, int32 typmod,
 										fmNodePtr escontext,
 										Datum *result);
+extern FunctionCallInfoBaseData *PrepareInputFunctionCallInfo(void);
+extern bool
+			PreparedInputFunctionCallSafe(FunctionCallInfoBaseData *fcinfo,
+										  FmgrInfo *flinfo, char *str,
+										  Oid typioparam, int32 typmod,
+										  fmNodePtr escontext,
+										  Datum *result);
 extern Datum OidInputFunctionCall(Oid functionId, char *str,
 								  Oid typioparam, int32 typmod);
 extern char *OutputFunctionCall(FmgrInfo *flinfo, Datum val);
 extern char *OidOutputFunctionCall(Oid functionId, Datum val);
 extern Datum ReceiveFunctionCall(FmgrInfo *flinfo, fmStringInfo buf,
 								 Oid typioparam, int32 typmod);
+extern FunctionCallInfoBaseData *PrepareReceiveFunctionCallInfo(void);
+extern Datum
+			PreparedReceiveFunctionCall(FunctionCallInfoBaseData *fcinfo,
+										FmgrInfo *flinfo, fmStringInfo buf,
+										Oid typioparam, int32 typmod);
 extern Datum OidReceiveFunctionCall(Oid functionId, fmStringInfo buf,
 									Oid typioparam, int32 typmod);
 extern bytea *SendFunctionCall(FmgrInfo *flinfo, Datum val);
#133Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#132)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 13, 2024 at 05:33:40PM +0900, Sutou Kouhei wrote:

Hi,

In <20240209192705.5qdilvviq3py2voq@awork3.anarazel.de>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 Feb 2024 11:27:05 -0800,
Andres Freund <andres@anarazel.de> wrote:

+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}

FWIW, we should really change the copy code to initialize FunctionCallInfoData
instead of re-initializing that on every call, realy makes a difference
performance wise.

How about the attached patch approach? If it's a desired
approach, I can also write a separated patch for COPY TO.

Hmm, I have not studied that much, but my first impression was that we
would not require any new facility in fmgr.c, but perhaps you're right
and it's more elegant to pass a InitFunctionCallInfoData this way.

PrepareInputFunctionCallInfo() looks OK as a name, but I'm less a fan
of PreparedInputFunctionCallSafe() and its "Prepared" part. How about
something like ExecuteInputFunctionCallSafe()?

I may be able to look more at that next week, and I would surely check
the impact of that with a simple COPY query throttled by CPU (more
rows and more attributes the better).

+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+	/* Set read attribute callback */
+	if (cstate->opts.csv_mode)
+		cstate->copy_read_attributes = CopyReadAttributesCSV;
+	else
+		cstate->copy_read_attributes = CopyReadAttributesText;
+}

Isn't this precisely repeating the mistake of 2889fd23be56?

What do you think about the approach in my previous mail's
attachments?
/messages/by-id/20240209.163205.704848659612151781.kou@clear-code.com

If it's a desired approach, I can prepare a v15 patch set
based on the v14 patch set and the approach.

Yes, this one looks like it's using the right angle: we don't rely
anymore in cstate to decide which CopyReadAttributes to use, the
routines do that instead. Note that I've reverted 06bd311bce24 for
the moment, as this is just getting in the way of the main patch, and
that was non-optimal once there is a per-row callback.

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a43c853e99 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1691,6 +1691,10 @@ BeginCopyFrom(ParseState *pstate,
/* We keep those variables in cstate. */
cstate->in_functions = in_functions;
cstate->typioparams = typioparams;
+	if (cstate->opts.binary)
+		cstate->fcinfo = PrepareInputFunctionCallInfo();
+	else
+		cstate->fcinfo = PrepareReceiveFunctionCallInfo();

Perhaps we'd better avoid more callbacks like that, for now.
--
Michael

#134Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#133)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZcwzZrrsTEJ7oJyq@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 14 Feb 2024 12:28:38 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

How about the attached patch approach? If it's a desired
approach, I can also write a separated patch for COPY TO.

Hmm, I have not studied that much, but my first impression was that we
would not require any new facility in fmgr.c, but perhaps you're right
and it's more elegant to pass a InitFunctionCallInfoData this way.

I'm not familiar with the fmgr.c related code base but it
seems that we abstract {,binary-}input function call by
fmgr.c. So I think that it's better that we follow the
design. (If there is a person who knows the fmgr.c related
code base, please help us.)

PrepareInputFunctionCallInfo() looks OK as a name, but I'm less a fan
of PreparedInputFunctionCallSafe() and its "Prepared" part. How about
something like ExecuteInputFunctionCallSafe()?

I understand the feeling. SQL uses "prepared" for "prepared
statement". There are similar function names such as
InputFunctionCall()/InputFunctionCallSafe()/DirectInputFunctionCallSafe(). They
execute (call) an input function but they use "call" not
"execute" for it... So "Execute...Call..." may be
redundant...

How about InputFunctionCallSafeWithInfo(),
InputFunctionCallSafeInfo() or
InputFunctionCallInfoCallSafe()?

I may be able to look more at that next week, and I would surely check
the impact of that with a simple COPY query throttled by CPU (more
rows and more attributes the better).

Thanks!

Note that I've reverted 06bd311bce24 for
the moment, as this is just getting in the way of the main patch, and
that was non-optimal once there is a per-row callback.

Thanks for sharing the information. I'll rebase on master
when I create the v15 patch.

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 41f6bc43e4..a43c853e99 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1691,6 +1691,10 @@ BeginCopyFrom(ParseState *pstate,
/* We keep those variables in cstate. */
cstate->in_functions = in_functions;
cstate->typioparams = typioparams;
+	if (cstate->opts.binary)
+		cstate->fcinfo = PrepareInputFunctionCallInfo();
+	else
+		cstate->fcinfo = PrepareReceiveFunctionCallInfo();

Perhaps we'd better avoid more callbacks like that, for now.

I'll not use a callback for this. I'll not change this part
after we introduce Copy{To,From}Routine. cstate->fcinfo
isn't used some custom COPY format handlers such as Apache
Arrow handler like cstate->in_functions and
cstate->typioparams. But they will be always allocated. It's
a bit wasteful for those handlers but we may not care about
it. So we can always use "if (state->opts.binary)" condition
here.

BTW... This part was wrong... Sorry... It should be:

if (cstate->opts.binary)
cstate->fcinfo = PrepareReceiveFunctionCallInfo();
else
cstate->fcinfo = PrepareInputFunctionCallInfo();

Thanks,
--
kou

#135Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#134)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Feb 14, 2024 at 02:08:51PM +0900, Sutou Kouhei wrote:

I understand the feeling. SQL uses "prepared" for "prepared
statement". There are similar function names such as
InputFunctionCall()/InputFunctionCallSafe()/DirectInputFunctionCallSafe(). They
execute (call) an input function but they use "call" not
"execute" for it... So "Execute...Call..." may be
redundant...

How about InputFunctionCallSafeWithInfo(),
InputFunctionCallSafeInfo() or
InputFunctionCallInfoCallSafe()?

WithInfo() would not be a new thing. There are a couple of APIs named
like this when manipulating catalogs, so that sounds kind of a good
choice from here.
--
Michael

#136Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#135)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZcxjNDtqNLvdz0f5@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 14 Feb 2024 15:52:36 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

How about InputFunctionCallSafeWithInfo(),
InputFunctionCallSafeInfo() or
InputFunctionCallInfoCallSafe()?

WithInfo() would not be a new thing. There are a couple of APIs named
like this when manipulating catalogs, so that sounds kind of a good
choice from here.

Thanks for the info. Let's use InputFunctionCallSafeWithInfo().
See that attached patch:
v2-0001-Reuse-fcinfo-used-in-COPY-FROM.patch

I also attach a patch for COPY TO:
v1-0001-Reuse-fcinfo-used-in-COPY-TO.patch

I measured the COPY TO patch on my environment with:
COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null' \watch c=5

master:
740.066ms
734.884ms
738.579ms
734.170ms
727.953ms

patched:
730.714ms
741.483ms
714.149ms
715.436ms
713.578ms

It seems that it improves performance a bit but my
environment isn't suitable for benchmark. So they may not
be valid numbers.

Thanks,
--
kou

Attachments:

v2-0001-Reuse-fcinfo-used-in-COPY-FROM.patchtext/x-patch; charset=us-asciiDownload
From b677732f46f735a5601b8890000f79671e91be41 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 15 Feb 2024 15:01:08 +0900
Subject: [PATCH v2] Reuse fcinfo used in COPY FROM

Each NextCopyFrom() calls input functions or binary-input
functions. We can reuse fcinfo for them instead of creating a local
fcinfo for each call. This will improve performance.
---
 src/backend/commands/copyfrom.c          |   4 +
 src/backend/commands/copyfromparse.c     |  20 ++--
 src/backend/utils/fmgr/fmgr.c            | 126 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   1 +
 src/include/fmgr.h                       |  12 +++
 5 files changed, 154 insertions(+), 9 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..ed375c012e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1691,6 +1691,10 @@ BeginCopyFrom(ParseState *pstate,
 	/* We keep those variables in cstate. */
 	cstate->in_functions = in_functions;
 	cstate->typioparams = typioparams;
+	if (cstate->opts.binary)
+		cstate->fcinfo = PrepareReceiveFunctionCallInfo();
+	else
+		cstate->fcinfo = PrepareInputFunctionCallInfo();
 	cstate->defmap = defmap;
 	cstate->defexprs = defexprs;
 	cstate->volatile_defexprs = volatile_defexprs;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..7907e16ea8 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -861,6 +861,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 				num_defaults = cstate->num_defaults;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
+	FunctionCallInfoBaseData *fcinfo = cstate->fcinfo;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
@@ -961,12 +962,13 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 			 * If ON_ERROR is specified with IGNORE, skip rows with soft
 			 * errors
 			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
+			else if (!InputFunctionCallSafeWithInfo(fcinfo,
+													&in_functions[m],
+													string,
+													typioparams[m],
+													att->atttypmod,
+													(Node *) cstate->escontext,
+													&values[m]))
 			{
 				cstate->num_errors++;
 				return true;
@@ -1966,7 +1968,7 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	if (fld_size == -1)
 	{
 		*isnull = true;
-		return ReceiveFunctionCall(flinfo, NULL, typioparam, typmod);
+		return ReceiveFunctionCallWithInfo(cstate->fcinfo, flinfo, NULL, typioparam, typmod);
 	}
 	if (fld_size < 0)
 		ereport(ERROR,
@@ -1987,8 +1989,8 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	cstate->attribute_buf.data[fld_size] = '\0';
 
 	/* Call the column type's binary input converter */
-	result = ReceiveFunctionCall(flinfo, &cstate->attribute_buf,
-								 typioparam, typmod);
+	result = ReceiveFunctionCallWithInfo(cstate->fcinfo, flinfo, &cstate->attribute_buf,
+										 typioparam, typmod);
 
 	/* Trouble if it didn't eat the whole buffer */
 	if (cstate->attribute_buf.cursor != cstate->attribute_buf.len)
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index e48a86be54..14c3ed2bdb 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1672,6 +1672,73 @@ DirectInputFunctionCallSafe(PGFunction func, char *str,
 	return true;
 }
 
+/*
+ * Prepare callinfo for InputFunctionCallSafeWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareInputFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));
+	InitFunctionCallInfoData(*fcinfo, NULL, 3, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	fcinfo->args[1].isnull = false;
+	fcinfo->args[2].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype input function, with prepared callinfo
+ * and non-exception handling of "soft" errors.
+ *
+ * This is basically like InputFunctionCallSafe, but it reuses prepared
+ * callinfo.
+ */
+bool
+InputFunctionCallSafeWithInfo(FunctionCallInfoBaseData *fcinfo,
+							  FmgrInfo *flinfo, char *str,
+							  Oid typioparam, int32 typmod,
+							  fmNodePtr escontext,
+							  Datum *result)
+{
+	if (str == NULL && flinfo->fn_strict)
+	{
+		*result = (Datum) 0;	/* just return null result */
+		return true;
+	}
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->context = escontext;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = CStringGetDatum(str);
+	fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
+	fcinfo->args[2].value = Int32GetDatum(typmod);
+
+	*result = FunctionCallInvoke(fcinfo);
+
+	/* Result value is garbage, and could be null, if an error was reported */
+	if (SOFT_ERROR_OCCURRED(escontext))
+		return false;
+
+	/* Otherwise, should get null result if and only if str is NULL */
+	if (str == NULL)
+	{
+		if (!fcinfo->isnull)
+			elog(ERROR, "input function %u returned non-NULL",
+				 flinfo->fn_oid);
+	}
+	else
+	{
+		if (fcinfo->isnull)
+			elog(ERROR, "input function %u returned NULL",
+				 flinfo->fn_oid);
+	}
+
+	return true;
+}
+
 /*
  * Call a previously-looked-up datatype output function.
  *
@@ -1731,6 +1798,65 @@ ReceiveFunctionCall(FmgrInfo *flinfo, StringInfo buf,
 	return result;
 }
 
+/*
+ * Prepare callinfo for ReceiveFunctionCallWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareReceiveFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));
+	InitFunctionCallInfoData(*fcinfo, NULL, 3, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	fcinfo->args[1].isnull = false;
+	fcinfo->args[2].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype binary-input function, with prepared
+ * callinfo.
+ *
+ * This is basically like ReceiveFunctionCall, but it reuses prepared
+ * callinfo.
+ */
+Datum
+ReceiveFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+							FmgrInfo *flinfo, StringInfo buf,
+							Oid typioparam, int32 typmod)
+{
+	Datum		result;
+
+	if (buf == NULL && flinfo->fn_strict)
+		return (Datum) 0;		/* just return null result */
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = PointerGetDatum(buf);
+	fcinfo->args[1].value = ObjectIdGetDatum(typioparam);
+	fcinfo->args[2].value = Int32GetDatum(typmod);
+
+	result = FunctionCallInvoke(fcinfo);
+
+	/* Should get null result if and only if buf is NULL */
+	if (buf == NULL)
+	{
+		if (!fcinfo->isnull)
+			elog(ERROR, "receive function %u returned non-NULL",
+				 flinfo->fn_oid);
+	}
+	else
+	{
+		if (fcinfo->isnull)
+			elog(ERROR, "receive function %u returned NULL",
+				 flinfo->fn_oid);
+	}
+
+	return result;
+}
+
 /*
  * Call a previously-looked-up datatype binary-output function.
  *
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..8c1a227c02 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -97,6 +97,7 @@ typedef struct CopyFromStateData
 	Oid		   *typioparams;	/* array of element types for in_functions */
 	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
 									 * execution */
+	FunctionCallInfoBaseData *fcinfo;	/* reusable callinfo for in_functions */
 	uint64		num_errors;		/* total number of rows which contained soft
 								 * errors */
 	int		   *defmap;			/* array of default att numbers related to
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
index ccb4070a25..3d3a12205b 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -708,12 +708,24 @@ extern bool DirectInputFunctionCallSafe(PGFunction func, char *str,
 										Oid typioparam, int32 typmod,
 										fmNodePtr escontext,
 										Datum *result);
+extern FunctionCallInfoBaseData *PrepareInputFunctionCallInfo(void);
+extern bool
+			InputFunctionCallSafeWithInfo(FunctionCallInfoBaseData *fcinfo,
+										  FmgrInfo *flinfo, char *str,
+										  Oid typioparam, int32 typmod,
+										  fmNodePtr escontext,
+										  Datum *result);
 extern Datum OidInputFunctionCall(Oid functionId, char *str,
 								  Oid typioparam, int32 typmod);
 extern char *OutputFunctionCall(FmgrInfo *flinfo, Datum val);
 extern char *OidOutputFunctionCall(Oid functionId, Datum val);
 extern Datum ReceiveFunctionCall(FmgrInfo *flinfo, fmStringInfo buf,
 								 Oid typioparam, int32 typmod);
+extern FunctionCallInfoBaseData *PrepareReceiveFunctionCallInfo(void);
+extern Datum
+			ReceiveFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+										FmgrInfo *flinfo, fmStringInfo buf,
+										Oid typioparam, int32 typmod);
 extern Datum OidReceiveFunctionCall(Oid functionId, fmStringInfo buf,
 									Oid typioparam, int32 typmod);
 extern bytea *SendFunctionCall(FmgrInfo *flinfo, Datum val);
-- 
2.43.0

v1-0001-Reuse-fcinfo-used-in-COPY-TO.patchtext/x-patch; charset=us-asciiDownload
From dbf04dec457ad2c61d00538514cc5356e94074e1 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 15 Feb 2024 15:26:31 +0900
Subject: [PATCH v1] Reuse fcinfo used in COPY TO

Each CopyOneRowTo() calls output functions or binary-output
functions. We can reuse fcinfo for them instead of creating a local
fcinfo for each call. This will improve performance.
---
 src/backend/commands/copyto.c | 14 +++++--
 src/backend/utils/fmgr/fmgr.c | 79 +++++++++++++++++++++++++++++++++++
 src/include/fmgr.h            |  6 +++
 3 files changed, 95 insertions(+), 4 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..21442861f3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -97,6 +97,7 @@ typedef struct CopyToStateData
 	MemoryContext copycontext;	/* per-copy execution context */
 
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	FunctionCallInfoBaseData *fcinfo;	/* reusable callinfo for out_functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
 } CopyToStateData;
@@ -786,6 +787,10 @@ DoCopyTo(CopyToState cstate)
 							  &isvarlena);
 		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
 	}
+	if (cstate->opts.binary)
+		cstate->fcinfo = PrepareSendFunctionCallInfo();
+	else
+		cstate->fcinfo = PrepareOutputFunctionCallInfo();
 
 	/*
 	 * Create a temporary memory context that we can reset once per row to
@@ -909,6 +914,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
 	bool		need_delim = false;
 	FmgrInfo   *out_functions = cstate->out_functions;
+	FunctionCallInfoBaseData *fcinfo = cstate->fcinfo;
 	MemoryContext oldcontext;
 	ListCell   *cur;
 	char	   *string;
@@ -949,8 +955,8 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 		{
 			if (!cstate->opts.binary)
 			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
+				string = OutputFunctionCallWithInfo(fcinfo, &out_functions[attnum - 1],
+													value);
 				if (cstate->opts.csv_mode)
 					CopyAttributeOutCSV(cstate, string,
 										cstate->opts.force_quote_flags[attnum - 1]);
@@ -961,8 +967,8 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 			{
 				bytea	   *outputbytes;
 
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
+				outputbytes = SendFunctionCallWithInfo(fcinfo, &out_functions[attnum - 1],
+													   value);
 				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
 				CopySendData(cstate, VARDATA(outputbytes),
 							 VARSIZE(outputbytes) - VARHDRSZ);
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index e48a86be54..ab74a643f2 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -1685,6 +1685,45 @@ OutputFunctionCall(FmgrInfo *flinfo, Datum val)
 	return DatumGetCString(FunctionCall1(flinfo, val));
 }
 
+/*
+ * Prepare callinfo for OutputFunctionCallWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareOutputFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(1));
+	InitFunctionCallInfoData(*fcinfo, NULL, 1, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype output function, with prepared callinfo.
+ *
+ * This is basically like OutputFunctionCall, but it reuses prepared callinfo.
+ */
+char *
+OutputFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+						   FmgrInfo *flinfo, Datum val)
+{
+	Datum		result;
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = val;
+
+	result = FunctionCallInvoke(fcinfo);
+
+	/* Check for null result, since caller is clearly not expecting one */
+	if (fcinfo->isnull)
+		elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
+
+	return DatumGetCString(result);
+}
+
 /*
  * Call a previously-looked-up datatype binary-input function.
  *
@@ -1746,6 +1785,46 @@ SendFunctionCall(FmgrInfo *flinfo, Datum val)
 	return DatumGetByteaP(FunctionCall1(flinfo, val));
 }
 
+/*
+ * Prepare callinfo for SendFunctionCallWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareSendFunctionCallInfo(void)
+{
+	FunctionCallInfoBaseData *fcinfo;
+
+	fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(1));
+	InitFunctionCallInfoData(*fcinfo, NULL, 1, InvalidOid, NULL, NULL);
+	fcinfo->args[0].isnull = false;
+	return fcinfo;
+}
+
+/*
+ * Call a previously-looked-up datatype binary-output function, with prepared
+ * callinfo.
+ *
+ * This is basically like SendFunctionCall, but it reuses prepared callinfo.
+ */
+bytea *
+SendFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+						 FmgrInfo *flinfo, Datum val)
+{
+	Datum		result;
+
+	fcinfo->flinfo = flinfo;
+	fcinfo->isnull = false;
+	fcinfo->args[0].value = val;
+
+	result = FunctionCallInvoke(fcinfo);
+
+	/* Check for null result, since caller is clearly not expecting one */
+	if (fcinfo->isnull)
+		elog(ERROR, "function %u returned NULL", flinfo->fn_oid);
+
+	return DatumGetByteaP(result);
+}
+
 /*
  * As above, for I/O functions identified by OID.  These are only to be used
  * in seldom-executed code paths.  They are not only slow but leak memory.
diff --git a/src/include/fmgr.h b/src/include/fmgr.h
index ccb4070a25..816ed31b05 100644
--- a/src/include/fmgr.h
+++ b/src/include/fmgr.h
@@ -711,12 +711,18 @@ extern bool DirectInputFunctionCallSafe(PGFunction func, char *str,
 extern Datum OidInputFunctionCall(Oid functionId, char *str,
 								  Oid typioparam, int32 typmod);
 extern char *OutputFunctionCall(FmgrInfo *flinfo, Datum val);
+extern FunctionCallInfoBaseData *PrepareOutputFunctionCallInfo(void);
+extern char *OutputFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+										FmgrInfo *flinfo, Datum val);
 extern char *OidOutputFunctionCall(Oid functionId, Datum val);
 extern Datum ReceiveFunctionCall(FmgrInfo *flinfo, fmStringInfo buf,
 								 Oid typioparam, int32 typmod);
 extern Datum OidReceiveFunctionCall(Oid functionId, fmStringInfo buf,
 									Oid typioparam, int32 typmod);
 extern bytea *SendFunctionCall(FmgrInfo *flinfo, Datum val);
+extern FunctionCallInfoBaseData *PrepareSendFunctionCallInfo(void);
+extern bytea *SendFunctionCallWithInfo(FunctionCallInfoBaseData *fcinfo,
+									   FmgrInfo *flinfo, Datum val);
 extern bytea *OidSendFunctionCall(Oid functionId, Datum val);
 
 
-- 
2.43.0

#137Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#132)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20240213.173340.1518143507526518973.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 13 Feb 2024 17:33:40 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I'll reply other comments later...

I've read other comments and my answers for them are same as
Michael's one.

I'll prepare the v15 patch with static inline functions and
fixed arguments after the fcinfo cache patches are merged. I
think that the v15 patch will be conflicted with fcinfo
cache patches.

Thanks,
--
kou

#138jian he
jian.universality@gmail.com
In reply to: Sutou Kouhei (#136)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 15, 2024 at 2:34 PM Sutou Kouhei <kou@clear-code.com> wrote:

Thanks for the info. Let's use InputFunctionCallSafeWithInfo().
See that attached patch:
v2-0001-Reuse-fcinfo-used-in-COPY-FROM.patch

I also attach a patch for COPY TO:
v1-0001-Reuse-fcinfo-used-in-COPY-TO.patch

I measured the COPY TO patch on my environment with:
COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null' \watch c=5

master:
740.066ms
734.884ms
738.579ms
734.170ms
727.953ms

patched:
730.714ms
741.483ms
714.149ms
715.436ms
713.578ms

It seems that it improves performance a bit but my
environment isn't suitable for benchmark. So they may not
be valid numbers.

My environment is slow (around 10x) but consistent.
I see around 2-3 percent increase consistently.
(with patch 7369.068 ms, without patch 7574.802 ms)

the patchset looks good in my eyes, i can understand it.
however I cannot apply it cleanly against the HEAD.

+/*
+ * Prepare callinfo for InputFunctionCallSafeWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareInputFunctionCallInfo(void)
+{
+ FunctionCallInfoBaseData *fcinfo;
+
+ fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));

just wondering, I saw other similar places using palloc0,
do we need to use palloc0?

#139Sutou Kouhei
kou@clear-code.com
In reply to: jian he (#138)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CACJufxE=m8kMC92JpaqNMg02P_Pi1sZJ1w=xNec0=j_W6d9GDw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 15 Feb 2024 17:09:20 +0800,
jian he <jian.universality@gmail.com> wrote:

My environment is slow (around 10x) but consistent.
I see around 2-3 percent increase consistently.
(with patch 7369.068 ms, without patch 7574.802 ms)

Thanks for sharing your numbers! It will help us to
determine whether these changes improve performance or not.

the patchset looks good in my eyes, i can understand it.
however I cannot apply it cleanly against the HEAD.

Hmm, I used 9bc1eee988c31e66a27e007d41020664df490214 as the
base version. But both patches based on the same
revision. So we may not be able to apply both patches at
once cleanly.

+/*
+ * Prepare callinfo for InputFunctionCallSafeWithInfo to reuse one callinfo
+ * instead of initializing it for each call. This is for performance.
+ */
+FunctionCallInfoBaseData *
+PrepareInputFunctionCallInfo(void)
+{
+ FunctionCallInfoBaseData *fcinfo;
+
+ fcinfo = (FunctionCallInfoBaseData *) palloc(SizeForFunctionCallInfo(3));

just wondering, I saw other similar places using palloc0,
do we need to use palloc0?

I think that we don't need to use palloc0() here because the
following InitFunctionCallInfoData() call initializes all
members explicitly.

Thanks,
--
kou

#140Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#136)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 15, 2024 at 03:34:21PM +0900, Sutou Kouhei wrote:

It seems that it improves performance a bit but my
environment isn't suitable for benchmark. So they may not
be valid numbers.

I was comparing what you have here, and what's been attached by Andres
at [1]/messages/by-id/20240218015955.rmw5mcmobt5hbene@awork3.anarazel.de and the top of the changes on my development branch at [2]/messages/by-id/ZcWoTr1N0GELFA9E@paquier.xyz -- Michael
(v3-0008, mostly). And, it strikes me that there is no need to do any
major changes in any of the callbacks proposed up to v13 and v14 in
this thread, as all the changes proposed want to plug in more data
into each StateData for COPY FROM and COPY TO, the best part being
that v3-0008 can just reuse the proposed callbacks as-is. v1-0001
from Sutou-san would need one slight tweak in the per-row callback,
still that's minor.

I have been spending more time on the patch to introduce the COPY
APIs, leading me to the v15 attached, where I have replaced the
previous attribute callbacks for the output representation and the
reads with hardcoded routines that should be optimized by compilers,
and I have done more profiling with -O2. I'm aware of the disparities
in the per-row and start callbacks for the text/csv cases as well as
the default expressions, but these are really format-dependent with
their own assumptions so splitting them is something that makes
limited sense to me. I've also looks at externalizing some of the
error handling, though the result was not that beautiful, so what I
got here is what makes the callbacks leaner and easier to work with.

First, some results for COPY FROM using the previous tests (30 int
attributes, running on scissors, data sent to blackhole_am, etc.) in
NextCopyFrom() which becomes the hot-spot:
* Using v15:
  Children      Self  Command   Shared Object       Symbol
-   66.42%     0.71%  postgres  postgres            [.] NextCopyFrom
    - 65.70% NextCopyFrom
       - 65.49% CopyFromTextLikeOneRow
          + 19.29% InputFunctionCallSafe
          + 15.81% CopyReadLine
            13.89% CopyReadAttributesText
    + 0.71% _start
* Using HEAD (today's 011d60c4352c):
  Children      Self  Command   Shared Object       Symbol
-   67.09%    16.64%  postgres  postgres            [.] NextCopyFrom
    - 50.45% NextCopyFrom
       - 30.89% NextCopyFromRawFields
          + 16.26% CopyReadLine
            13.59% CopyReadAttributesText
       + 19.24% InputFunctionCallSafe
    + 16.64% _start

In this case, I have been able to limit the effects of the per-row
callback by making NextCopyFromRawFields() local to copyfromparse.c
while applying some inlining to it. This brings me to a different
point, why don't we do this change independently on HEAD? It's not
really complicated to make NextCopyFromRawFields show high in the
profiles. I was looking at external projects, and noticed that
there's nothing calling NextCopyFromRawFields() directly.

Second, some profiles with COPY TO (30 int integers, running on
scissors) where data is sent /dev/null:
* Using v15:
  Children      Self  Command   Shared Object       Symbol
-   85.61%     0.34%  postgres  postgres            [.] CopyOneRowTo
    - 85.26% CopyOneRowTo
       - 75.86% CopyToTextOneRow
          + 36.49% OutputFunctionCall
          + 10.53% appendBinaryStringInfo
            9.66% CopyAttributeOutText
            1.34% int4out
            0.92% 0xffffa9803be8
            0.79% enlargeStringInfo
            0.77% memcpy@plt
            0.69% 0xffffa9803be4
       + 3.12% CopySendEndOfRow
         2.81% CopySendChar
         0.95% pgstat_progress_update_param
         0.95% appendBinaryStringInfo
         0.55% MemoryContextReset
* Using HEAD (today's 011d60c4352c):
  Children      Self  Command   Shared Object       Symbol
-   80.35%    14.23%  postgres  postgres            [.] CopyOneRowTo
    - 66.12% CopyOneRowTo
       + 35.40% OutputFunctionCall
       + 11.00% appendBinaryStringInfo
         8.38% CopyAttributeOutText
       + 2.98% CopySendEndOfRow
         1.52% int4out
         0.88% pgstat_progress_update_param
         0.87% 0xffff8ab32be8
         0.74% memcpy@plt
         0.68% enlargeStringInfo
         0.61% 0xffff8ab32be4
         0.51% MemoryContextReset
    + 14.23% _start

The increase in CopyOneRowTo from 80% to 85% worries me but I am not
quite sure how to optimize that with the current structure of the
code, so the dispatch caused by per-row callback is noticeable in
what's my worst test case. I am not quite sure how to avoid that,
TBH. A result that has been puzzling me is that I am getting faster
runtimes with v15 (6232ms in average) vs HEAD (6550ms) at 5M rows with
COPY TO for what led to these profiles (for tests without perf
attached to the backends).

Any thoughts overall?

[1]: /messages/by-id/20240218015955.rmw5mcmobt5hbene@awork3.anarazel.de
[2]: /messages/by-id/ZcWoTr1N0GELFA9E@paquier.xyz -- Michael
--
Michael

Attachments:

v15-0001-Extract-COPY-FROM-TO-format-implementations.patchtext/x-diff; charset=us-asciiDownload
From 9787247320f9d11756a20e3f94e84ec9bb10092e Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Thu, 22 Feb 2024 15:43:20 +0900
Subject: [PATCH v15] Extract COPY FROM/TO format implementations

This doesn't change the current behavior.  This just introduces a set of
copy routines called CopyFromRoutine and CopyToRoutine, which just has
function pointers of format implementation like TupleTableSlotOps, and
use it for existing "text", "csv" and "binary" format implementations.
There are plans to extend that more in the future with custom formats.
---
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           | 100 +++++
 src/include/commands/copyfrom_internal.h |  12 +
 src/backend/commands/copyfrom.c          | 201 ++++++++--
 src/backend/commands/copyfromparse.c     | 412 +++++++++++---------
 src/backend/commands/copyto.c            | 463 ++++++++++++++++-------
 src/tools/pgindent/typedefs.list         |   2 +
 7 files changed, 841 insertions(+), 351 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b3da3cb0be..043b3f6d98 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -94,8 +94,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 
 extern uint64 CopyFrom(CopyFromState cstate);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..635c4cbff2
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled.  `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..c11b5ff3cc 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1fe70b9133..62dbd1860a 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -108,6 +108,157 @@ static char *limit_printout_length(const char *str);
 
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextInFunc,
+	.CopyFromStart = CopyFromTextStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1386,7 +1537,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1418,6 +1568,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1571,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1622,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1789,6 +1906,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..25b8d4bc52 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -152,8 +152,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate);
 static bool CopyReadLineText(CopyFromState cstate);
-static int	CopyReadAttributesText(CopyFromState cstate);
-static int	CopyReadAttributesCSV(CopyFromState cstate);
+static inline int CopyReadAttributesText(CopyFromState cstate);
+static inline int CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
@@ -751,8 +751,9 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields,
+					  bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -775,7 +776,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * Optimized away by compiler, as argument is constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -829,8 +833,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/* Optimized away by compiler, as argument is constant at caller. */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -840,6 +844,232 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			cstate->num_errors++;
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -849,7 +1079,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * read from the file, and DEFAULT option is unset.
  *
  * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * relation passed to BeginCopyFrom. This function calls the format routine
+ * that should fill the arrays.
  */
 bool
 NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
@@ -857,181 +1088,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				cstate->num_errors++;
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values,
+										 nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..630438c60e 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -131,6 +135,319 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ListCell   *cur;
+
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1], value);
+
+			/*
+			 * Optimized away by compiler, as argument is constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1], value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextStart,
+	.CopyToOutFunc = CopyToTextOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -198,16 +515,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -242,10 +549,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -433,6 +736,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -772,19 +1078,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -797,56 +1094,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -885,13 +1133,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -907,70 +1149,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index d808aad8b0..97f4d28f51 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -473,6 +473,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -482,6 +483,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#141Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#140)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZdbtQJ-p5H1_EDwE@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 22 Feb 2024 15:44:16 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

I was comparing what you have here, and what's been attached by Andres
at [1] and the top of the changes on my development branch at [2]
(v3-0008, mostly). And, it strikes me that there is no need to do any
major changes in any of the callbacks proposed up to v13 and v14 in
this thread, as all the changes proposed want to plug in more data
into each StateData for COPY FROM and COPY TO, the best part being
that v3-0008 can just reuse the proposed callbacks as-is. v1-0001
from Sutou-san would need one slight tweak in the per-row callback,
still that's minor.

I think so too. But I thought that some minor conflicts will
be happen with this and the v15. So I worked on this before
the v15.

We agreed that this optimization doesn't block v15: [1]/messages/by-id/20240219195351.5vy7cdl3wxia66kg@awork3.anarazel.de
So we can work on the v15 without this optimization for now.

[1]: /messages/by-id/20240219195351.5vy7cdl3wxia66kg@awork3.anarazel.de

I have been spending more time on the patch to introduce the COPY
APIs, leading me to the v15 attached, where I have replaced the
previous attribute callbacks for the output representation and the
reads with hardcoded routines that should be optimized by compilers,
and I have done more profiling with -O2.

Thanks! I wanted to work on it but I didn't have enough time
for it in a few days...

I've reviewed the v15.

----

@@ -751,8 +751,9 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
*
* NOTE: force_not_null option are not applied to the returned fields.
*/
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static bool

"inline" is missing here.

+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields,
+					  bool is_csv)
{
int			fldct;

----

How about adding "is_csv" to CopyReadline() and
CopyReadLineText() too?

----
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 25b8d4bc52..79fabecc69 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -150,8 +150,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static inline bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static inline int CopyReadAttributesText(CopyFromState cstate);
 static inline int CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -770,7 +770,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields,
 		tupDesc = RelationGetDescr(cstate->rel);
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);

if (cstate->opts.header_line == COPY_HEADER_MATCH)
{
@@ -823,7 +823,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields,
cstate->cur_lineno++;

 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -1133,8 +1133,8 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * by newline.  The terminating newline or EOF marker is not included
  * in the final value of line_buf.
  */
-static bool
-CopyReadLine(CopyFromState cstate)
+static inline bool
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;

@@ -1142,7 +1142,7 @@ CopyReadLine(CopyFromState cstate)
cstate->line_buf_valid = false;

 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 	if (result)
 	{
@@ -1209,8 +1209,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1226,7 +1226,7 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';

- if (cstate->opts.csv_mode)
+ if (is_csv)
{
quotec = cstate->opts.quote[0];
escapec = cstate->opts.escape[0];
@@ -1306,7 +1306,7 @@ CopyReadLineText(CopyFromState cstate)
prev_raw_ptr = input_buf_ptr;
c = copy_input_buf[input_buf_ptr++];

- if (cstate->opts.csv_mode)
+ if (is_csv)
{
/*
* If character is '\\' or '\r', we may need to look ahead below.
@@ -1345,7 +1345,7 @@ CopyReadLineText(CopyFromState cstate)
}

 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1373,10 +1373,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));

@@ -1390,10 +1390,10 @@ CopyReadLineText(CopyFromState cstate)
else if (cstate->eol_type == EOL_NL)
ereport(ERROR,
(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
- !cstate->opts.csv_mode ?
+ !is_csv ?
errmsg("literal carriage return found in data") :
errmsg("unquoted carriage return found in data"),
- !cstate->opts.csv_mode ?
+ !is_csv ?
errhint("Use \"\\r\" to represent carriage return.") :
errhint("Use quoted CSV field to represent carriage return.")));
/* If reach here, we have found the line terminator */
@@ -1401,15 +1401,15 @@ CopyReadLineText(CopyFromState cstate)
}

 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1421,7 +1421,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!is_csv || first_char_in_line))
 		{
 			char		c2;

@@ -1454,7 +1454,7 @@ CopyReadLineText(CopyFromState cstate)

if (c2 == '\n')
{
- if (!cstate->opts.csv_mode)
+ if (!is_csv)
ereport(ERROR,
(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
errmsg("end-of-copy marker does not match previous newline style")));
@@ -1463,7 +1463,7 @@ CopyReadLineText(CopyFromState cstate)
}
else if (c2 != '\r')
{
- if (!cstate->opts.csv_mode)
+ if (!is_csv)
ereport(ERROR,
(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
errmsg("end-of-copy marker corrupt")));
@@ -1479,7 +1479,7 @@ CopyReadLineText(CopyFromState cstate)

if (c2 != '\r' && c2 != '\n')
{
- if (!cstate->opts.csv_mode)
+ if (!is_csv)
ereport(ERROR,
(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
errmsg("end-of-copy marker corrupt")));
@@ -1508,7 +1508,7 @@ CopyReadLineText(CopyFromState cstate)
result = true; /* report EOF */
break;
}
- else if (!cstate->opts.csv_mode)
+ else if (!is_csv)
{
/*
* If we are here, it means we found a backslash followed by
----

In this case, I have been able to limit the effects of the per-row
callback by making NextCopyFromRawFields() local to copyfromparse.c
while applying some inlining to it. This brings me to a different
point, why don't we do this change independently on HEAD?

Does this mean that changing

bool NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)

to (adding "static")

static bool NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)

not (adding "static" and "bool is_csv")

static bool NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)

improves performance?

If so, adding the change independently on HEAD makes
sense. But I don't know why that improves
performance... Inlining?

It's not
really complicated to make NextCopyFromRawFields show high in the
profiles. I was looking at external projects, and noticed that
there's nothing calling NextCopyFromRawFields() directly.

It means that we can hide NextCopyFromRawFields() without
breaking compatibility (because nobody uses it), right?

If so, I also think that we can change
NextCopyFromRawFields() directly.

If we assume that someone (not public code) may use it, we
can create a new internal function and use it something
like:

----
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..b1515ead82 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -751,8 +751,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static bool
+NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields)
 {
 	int			fldct;
 	bool		done;
@@ -840,6 +840,12 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
+bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+{
+	return NextCopyFromRawFieldsInternal(cstate, fields, nfields);
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
----

Thanks,
--
kou

#142Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#141)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 22, 2024 at 06:39:48PM +0900, Sutou Kouhei wrote:

If so, adding the change independently on HEAD makes
sense. But I don't know why that improves
performance... Inlining?

I guess so. It does not make much of a difference, though. The thing
is that the dispatch caused by the custom callbacks called for each
row is noticeable in any profiles I'm taking (not that much in the
worst-case scenarios, still a few percents), meaning that this impacts
the performance for all the in-core formats (text, csv, binary) as
long as we refactor text/csv/binary to use the routines of copyapi.h.
I don't really see a way forward, except if we don't dispatch the
in-core formats to not impact the default cases. That makes the code
a bit less elegant, but equally efficient for the existing formats.
--
Michael

#143Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#141)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20240222.183948.518018047578925034.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 22 Feb 2024 18:39:48 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

How about adding "is_csv" to CopyReadline() and
CopyReadLineText() too?

I tried this on my environment. This is a change for COPY
FROM not COPY TO but this decreases COPY TO
performance with [1]COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null' \watch c=15... Hmm...

master: 697.693 msec (the best case)
v15: 576.374 msec (the best case)
v15+this: 593.559 msec (the best case)

[1]: COPY (SELECT 1::int2,2::int2,3::int2,4::int2,5::int2,6::int2,7::int2,8::int2,9::int2,10::int2,11::int2,12::int2,13::int2,14::int2,15::int2,16::int2,17::int2,18::int2,19::int2,20::int2, generate_series(1, 1000000::int4)) TO '/dev/null' \watch c=15

So I think that v15 is good.

perf result of master:

# Children Self Command Shared Object Symbol
# ........ ........ ........ ................. .........................................
#
31.39% 14.54% postgres postgres [.] CopyOneRowTo
|--17.00%--CopyOneRowTo
| |--10.61%--FunctionCall1Coll
| | --8.40%--int2out
| | |--2.58%--pg_ltoa
| | | --0.68%--pg_ultoa_n
| | |--1.11%--pg_ultoa_n
| | |--0.83%--AllocSetAlloc
| | |--0.69%--__memcpy_avx_unaligned_erms (inlined)
| | |--0.58%--FunctionCall1Coll
| | --0.55%--memcpy@plt
| |--3.25%--appendBinaryStringInfo
| | --0.56%--pg_ultoa_n
| --0.69%--CopyAttributeOutText

perf result of v15:

# Children Self Command Shared Object Symbol
# ........ ........ ........ ................. .........................................
#
25.60% 10.47% postgres postgres [.] CopyToTextOneRow
|--15.39%--CopyToTextOneRow
| |--10.44%--FunctionCall1Coll
| | |--7.25%--int2out
| | | |--2.60%--pg_ltoa
| | | | --0.71%--pg_ultoa_n
| | | |--0.90%--FunctionCall1Coll
| | | |--0.84%--pg_ultoa_n
| | | --0.66%--AllocSetAlloc
| | |--0.79%--ExecProjectSet
| | --0.68%--int4out
| |--2.50%--appendBinaryStringInfo
| --0.53%--CopyAttributeOutText

The profiles on Michael's environment [2]/messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz showed that
CopyOneRow() % was increased by v15. But it
(CopyToTextOneRow() % not CopyOneRow() %) wasn't increased
by v15. It's decreased instead.

[2]: /messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

So I think that v15 doesn't have performance regression but
my environment isn't suitable for benchmark...

Thanks,
--
kou

#144Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#142)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZeFoOprWyKU6gpkP@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 1 Mar 2024 14:31:38 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

I guess so. It does not make much of a difference, though. The thing
is that the dispatch caused by the custom callbacks called for each
row is noticeable in any profiles I'm taking (not that much in the
worst-case scenarios, still a few percents), meaning that this impacts
the performance for all the in-core formats (text, csv, binary) as
long as we refactor text/csv/binary to use the routines of copyapi.h.
I don't really see a way forward, except if we don't dispatch the
in-core formats to not impact the default cases. That makes the code
a bit less elegant, but equally efficient for the existing formats.

It's an option based on your profile result but your
execution result also shows that v15 is faster than HEAD [1]/messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz:

I am getting faster runtimes with v15 (6232ms in average)
vs HEAD (6550ms) at 5M rows with COPY TO

[1]: /messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

I think that faster runtime is beneficial than mysterious
profile for users. So I think that we can merge v15 to
master.

Thanks,
--
kou

#145Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#144)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20240301.154443.618034282613922707.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 01 Mar 2024 15:44:43 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I guess so. It does not make much of a difference, though. The thing
is that the dispatch caused by the custom callbacks called for each
row is noticeable in any profiles I'm taking (not that much in the
worst-case scenarios, still a few percents), meaning that this impacts
the performance for all the in-core formats (text, csv, binary) as
long as we refactor text/csv/binary to use the routines of copyapi.h.
I don't really see a way forward, except if we don't dispatch the
in-core formats to not impact the default cases. That makes the code
a bit less elegant, but equally efficient for the existing formats.

It's an option based on your profile result but your
execution result also shows that v15 is faster than HEAD [1]:

I am getting faster runtimes with v15 (6232ms in average)
vs HEAD (6550ms) at 5M rows with COPY TO

[1] /messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

I think that faster runtime is beneficial than mysterious
profile for users. So I think that we can merge v15 to
master.

If this is a blocker of making COPY format extendable, can
we defer moving the existing text/csv/binary format
implementations to Copy{From,To}Routine for now as Michael
suggested to proceed making COPY format extendable? (Can we
add Copy{From,To}Routine without changing the existing
text/csv/binary format implementations?)

I attach a patch for it.

There is a large hunk for CopyOneRowTo() that is caused by
indent change. I also attach "...-w.patch" that uses "git
-w" to remove space only changes. "...-w.patch" is only for
review. We should use .patch without -w for push.

Thanks,
--
kou

Attachments:

v16-0001-Add-CopyFromRoutine-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From 6a5bfc8e104f0a339b421028e9fec69a4d092671 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v16] Add CopyFromRoutine/CopyToRountine

They are for implementing custom COPY FROM/TO format. But this is not
enough to implement custom COPY FROM/TO format yet. We'll export some
APIs to receive/send data and add "format" option to COPY FROM/TO
later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine/CopyToRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations. There are many diffs for CopyOneRowTo() but they're
caused by indentation. They don't change implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            | 103 ++++++++++++++---------
 src/include/commands/copyapi.h           | 100 ++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 193 insertions(+), 45 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c3bc897028..9bf2f6497e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1623,12 +1623,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1768,10 +1778,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1789,6 +1802,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..8b15080585 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -978,6 +978,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..6080627c83 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -777,14 +781,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -811,6 +823,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -892,6 +906,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -916,61 +932,66 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
+	if (cstate->routine)
+		cstate->routine->CopyToOneRow(cstate, slot);
+	else
 	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
+		if (cstate->opts.binary)
 		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
+			/* Binary per-tuple header */
+			CopySendInt16(cstate, list_length(cstate->attnumlist));
 		}
 
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
+		/* Make sure the tuple is fully deconstructed */
+		slot_getallattrs(slot);
+
+		foreach(cur, cstate->attnumlist)
 		{
+			int			attnum = lfirst_int(cur);
+			Datum		value = slot->tts_values[attnum - 1];
+			bool		isnull = slot->tts_isnull[attnum - 1];
+
 			if (!cstate->opts.binary)
 			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
+				if (need_delim)
+					CopySendChar(cstate, cstate->opts.delim[0]);
+				need_delim = true;
+			}
+
+			if (isnull)
+			{
+				if (!cstate->opts.binary)
+					CopySendString(cstate, cstate->opts.null_print_client);
 				else
-					CopyAttributeOutText(cstate, string);
+					CopySendInt32(cstate, -1);
 			}
 			else
 			{
-				bytea	   *outputbytes;
+				if (!cstate->opts.binary)
+				{
+					string = OutputFunctionCall(&out_functions[attnum - 1],
+												value);
+					if (cstate->opts.csv_mode)
+						CopyAttributeOutCSV(cstate, string,
+											cstate->opts.force_quote_flags[attnum - 1]);
+					else
+						CopyAttributeOutText(cstate, string);
+				}
+				else
+				{
+					bytea	   *outputbytes;
 
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
+					outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+												   value);
+					CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+					CopySendData(cstate, VARDATA(outputbytes),
+								 VARSIZE(outputbytes) - VARHDRSZ);
+				}
 			}
 		}
-	}
 
-	CopySendEndOfRow(cstate);
+		CopySendEndOfRow(cstate);
+	}
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..635c4cbff2
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled.  `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..509b9e92a1 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index ee40a341d3..a5ae161ca5 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -475,6 +475,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -484,6 +485,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

v16-0001-Add-CopyFromRoutine-CopyToRountine-w.patchtext/x-patch; charset=us-asciiDownload
From 6a5bfc8e104f0a339b421028e9fec69a4d092671 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v16] Add CopyFromRoutine/CopyToRountine

They are for implementing custom COPY FROM/TO format. But this is not
enough to implement custom COPY FROM/TO format yet. We'll export some
APIs to receive/send data and add "format" option to COPY FROM/TO
later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine/CopyToRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations. There are many diffs for CopyOneRowTo() but they're
caused by indentation. They don't change implementations.
---
 src/backend/commands/copyfrom.c          |  22 ++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  21 +++++
 src/include/commands/copyapi.h           | 100 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 151 insertions(+), 3 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c3bc897028..9bf2f6497e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1623,12 +1623,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
 			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1768,10 +1778,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1789,6 +1802,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..8b15080585 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -978,6 +978,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..6080627c83 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -777,15 +781,23 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
 			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
 		}
+	}
 
 	/*
 	 * Create a temporary memory context that we can reset once per row to
@@ -811,6 +823,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -892,6 +906,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -916,6 +932,10 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	if (cstate->routine)
+		cstate->routine->CopyToOneRow(cstate, slot);
+	else
+	{
 		if (cstate->opts.binary)
 		{
 			/* Binary per-tuple header */
@@ -971,6 +991,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 		}
 
 		CopySendEndOfRow(cstate);
+	}
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..635c4cbff2
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled.  `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..509b9e92a1 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index ee40a341d3..a5ae161ca5 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -475,6 +475,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -484,6 +485,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#146Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#145)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Mar 04, 2024 at 02:11:08PM +0900, Sutou Kouhei wrote:

If this is a blocker of making COPY format extendable, can
we defer moving the existing text/csv/binary format
implementations to Copy{From,To}Routine for now as Michael
suggested to proceed making COPY format extendable? (Can we
add Copy{From,To}Routine without changing the existing
text/csv/binary format implementations?)

Yeah, I assume that it would be the way to go so as we don't do any
dispatching in default cases. A different approach that could be done
is to hide some of the parts of binary and text/csv in inline static
functions that are equivalent to the routine callbacks. That's
similar to the previous versions of the patch set, but if we come back
to the argument that there is a risk of blocking optimizations of more
of the local areas of the per-row processing in NextCopyFrom() and
CopyOneRowTo(), what you have sounds like a good balance.

CopyOneRowTo() could do something like that to avoid the extra
indentation:
if (cstate->routine)
{
cstate->routine->CopyToOneRow(cstate, slot);
MemoryContextSwitchTo(oldcontext);
return;
}

NextCopyFrom() does not need to be concerned by that.

I attach a patch for it.

There is a large hunk for CopyOneRowTo() that is caused by
indent change. I also attach "...-w.patch" that uses "git
-w" to remove space only changes. "...-w.patch" is only for
review. We should use .patch without -w for push.

I didn't know this trick. That's indeed nice.. I may use that for
other stuff to make patches more presentable to the eyes. And that's
available as well with `git diff`.

If we basically agree about this part, how would the rest work out
with this set of APIs and the possibility to plug in a custom value
for FORMAT to do a pg_proc lookup, including an example of how these
APIs can be used?
--
Michael

#147Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#146)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <Zea4wXxpYaX64e_p@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 5 Mar 2024 15:16:33 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

CopyOneRowTo() could do something like that to avoid the extra
indentation:
if (cstate->routine)
{
cstate->routine->CopyToOneRow(cstate, slot);
MemoryContextSwitchTo(oldcontext);
return;
}

OK. The v17 patch uses this style. Others are same as the
v16.

I didn't know this trick. That's indeed nice.. I may use that for
other stuff to make patches more presentable to the eyes. And that's
available as well with `git diff`.

:-)

If we basically agree about this part, how would the rest work out
with this set of APIs and the possibility to plug in a custom value
for FORMAT to do a pg_proc lookup, including an example of how these
APIs can be used?

I'll send the following patches after this patch is
merged. They are based on the v6 patch[1]/messages/by-id/20240124.144936.67229716500876806.kou@clear-code.com:

1. Add copy_handler
* This also adds a pg_proc lookup for custom FORMAT
* This also adds a test for copy_handler
2. Export CopyToStateData
* We need it to implement custom copy TO handler
3. Add needed APIs to implement custom copy TO handler
* Add CopyToStateData::opaque
* Export CopySendEndOfRow()
4. Export CopyFromStateData
* We need it to implement custom copy FROM handler
5. Add needed APIs to implement custom copy FROM handler
* Add CopyFromStateData::opaque
* Export CopyReadBinaryData()

[1]: /messages/by-id/20240124.144936.67229716500876806.kou@clear-code.com

Thanks,
--
kou

Attachments:

v17-0001-Add-CopyFromRoutine-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From a78b8ee88575e2c2873afc3acf3c8c4e535becf0 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v17] Add CopyFromRoutine/CopyToRountine

They are for implementing custom COPY FROM/TO format. But this is not
enough to implement custom COPY FROM/TO format yet. We'll export some
APIs to receive/send data and add "format" option to COPY FROM/TO
later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine/CopyToRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  25 +++++-
 src/include/commands/copyapi.h           | 100 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 155 insertions(+), 5 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c3bc897028..9bf2f6497e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1623,12 +1623,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1768,10 +1778,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1789,6 +1802,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7cacd0b752..8b15080585 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -978,6 +978,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 20ffc90363..b4a7c9c8b9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -24,6 +24,7 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -71,6 +72,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -777,14 +781,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -811,6 +823,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -892,6 +906,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -916,6 +932,13 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..635c4cbff2
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled.  `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..509b9e92a1 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index ee40a341d3..a5ae161ca5 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -475,6 +475,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -484,6 +485,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.0

#148Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#147)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Mar 05, 2024 at 05:18:08PM +0900, Sutou Kouhei wrote:

I'll send the following patches after this patch is
merged.

I am not sure that my schedule is on track to allow that for this
release, unfortunately, especially with all the other items to review
and discuss to make this thread feature-complete. There should be
a bit more than four weeks until the feature freeze (date not set in
stone, should be around the 8th of April AoE), but I have less than
the half due to personal issues. Perhaps if somebody jumps on this
thread, that will be possible..

They are based on the v6 patch[1]:

1. Add copy_handler
* This also adds a pg_proc lookup for custom FORMAT
* This also adds a test for copy_handler
2. Export CopyToStateData
* We need it to implement custom copy TO handler
3. Add needed APIs to implement custom copy TO handler
* Add CopyToStateData::opaque
* Export CopySendEndOfRow()
4. Export CopyFromStateData
* We need it to implement custom copy FROM handler
5. Add needed APIs to implement custom copy FROM handler
* Add CopyFromStateData::opaque
* Export CopyReadBinaryData()

Hmm. Sounds like a good plan for a split.
--
Michael

#149Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#148)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 06, 2024 at 03:34:04PM +0900, Michael Paquier wrote:

I am not sure that my schedule is on track to allow that for this
release, unfortunately, especially with all the other items to review
and discuss to make this thread feature-complete. There should be
a bit more than four weeks until the feature freeze (date not set in
stone, should be around the 8th of April AoE), but I have less than
the half due to personal issues. Perhaps if somebody jumps on this
thread, that will be possible..

While on it, here are some profiles based on HEAD and v17 with the
previous tests (COPY TO /dev/null, COPY FROM data sent to the void).

COPY FROM, text format with 30 attributes and HEAD:
-   66.53%    16.33%  postgres  postgres            [.] NextCopyFrom
    - 50.20% NextCopyFrom
       - 30.83% NextCopyFromRawFields
          + 16.09% CopyReadLine
            13.72% CopyReadAttributesText
       + 19.11% InputFunctionCallSafe
    + 16.33% _start
COPY FROM, text format with 30 attributes and v17:
-   66.60%    16.10%  postgres  postgres            [.] NextCopyFrom
    - 50.50% NextCopyFrom
       - 30.44% NextCopyFromRawFields
          + 15.71% CopyReadLine
            13.73% CopyReadAttributesText
       + 19.81% InputFunctionCallSafe
    + 16.10% _start
COPY TO, text format with 30 attributes and HEAD:
-   79.55%    15.54%  postgres  postgres            [.] CopyOneRowTo
    - 64.01% CopyOneRowTo
       + 30.01% OutputFunctionCall
       + 11.71% appendBinaryStringInfo
         9.36% CopyAttributeOutText
       + 3.03% CopySendEndOfRow
         1.65% int4out
         1.01% 0xffff83e46be4
         0.93% 0xffff83e46be8
         0.93% memcpy@plt
         0.87% pgstat_progress_update_param
         0.78% enlargeStringInfo
         0.67% 0xffff83e46bb4
         0.66% 0xffff83e46bcc
         0.57% MemoryContextReset
    + 15.54% _start
COPY TO, text format with 30 attributes and v17:
-   79.35%    16.08%  postgres  postgres            [.] CopyOneRowTo
    - 62.27% CopyOneRowTo
       + 28.92% OutputFunctionCall
       + 10.88% appendBinaryStringInfo
         9.54% CopyAttributeOutText
       + 3.03% CopySendEndOfRow
         1.60% int4out
         0.97% pgstat_progress_update_param
         0.95% 0xffff8c46cbe8
         0.89% memcpy@plt
         0.87% 0xffff8c46cbe4
         0.79% enlargeStringInfo
         0.64% 0xffff8c46cbcc
         0.61% 0xffff8c46cbb4
         0.58% MemoryContextReset
    + 16.08% _start

So, in short, and that's not really a surprise, there is no effect
once we use the dispatching with the routines only when a format would
want to plug-in with the APIs, but a custom format would still have a
penalty of a few percents for both if bottlenecked on CPU.
--
Michael

#150Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#149)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <ZelfYatRdVZN3FbE@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 7 Mar 2024 15:32:01 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

While on it, here are some profiles based on HEAD and v17 with the
previous tests (COPY TO /dev/null, COPY FROM data sent to the void).

...

So, in short, and that's not really a surprise, there is no effect
once we use the dispatching with the routines only when a format would
want to plug-in with the APIs, but a custom format would still have a
penalty of a few percents for both if bottlenecked on CPU.

Thanks for sharing these profiles!
I agree with you.

This shows that the v17 approach doesn't affect the current
text/csv/binary implementations. (The v17 approach just adds
2 new structs, Copy{From,To}Rountine, without changing the
current text/csv/binary implementations.)

Can we push the v17 patch and proceed following
implementations? Could someone (especially a PostgreSQL
committer) take a look at this for double-check?

Thanks,
--
kou

#151jian he
jian.universality@gmail.com
In reply to: Sutou Kouhei (#150)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Mar 8, 2024 at 8:23 AM Sutou Kouhei <kou@clear-code.com> wrote:

This shows that the v17 approach doesn't affect the current
text/csv/binary implementations. (The v17 approach just adds
2 new structs, Copy{From,To}Rountine, without changing the
current text/csv/binary implementations.)

Can we push the v17 patch and proceed following
implementations? Could someone (especially a PostgreSQL
committer) take a look at this for double-check?

Hi, here are my cents:
Currently in v17, we have 3 extra functions within DoCopyTo
CopyToStart, one time, start, doing some preliminary work.
CopyToOneRow, doing the repetitive work, called many times, row by row.
CopyToEnd, one time doing the closing work.

seems to need a function pointer for processing the format and other options.
or maybe the reason is we need a one time function call before doing DoCopyTo,
like one time initialization.

We can placed the function pointer after:
`
cstate = BeginCopyTo(pstate, rel, query, relid,
stmt->filename, stmt->is_program,
NULL, stmt->attlist, stmt->options);
`

generally in v17, the code pattern looks like this.
if (cstate->opts.binary)
{
/* handle binary format */
}
else if (cstate->routine)
{
/* custom code, make the copy format extensible */
}
else
{
/* handle non-binary, (csv or text) format */
}
maybe we need another bool flag like `bool buildin_format`.
if the copy format is {csv|text|binary} then buildin_format is true else false.

so the code pattern would be:
if (cstate->opts.binary)
{
/* handle binary format */
}
else if (cstate->routine && !buildin_format)
{
/* custom code, make the copy format extensible */
}
else
{
/* handle non-binary, (csv or text) format */
}

otherwise the {CopyToRoutine| CopyFromRoutine} needs a function pointer
to distinguish native copy format and extensible supported format,
like I mentioned above?

#152Sutou Kouhei
kou@clear-code.com
In reply to: jian he (#151)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CACJufxEgn3=j-UWg-f2-DbLO+uVSKGcofpkX5trx+=YX6icSFg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Mar 2024 08:00:00 +0800,
jian he <jian.universality@gmail.com> wrote:

Hi, here are my cents:
Currently in v17, we have 3 extra functions within DoCopyTo
CopyToStart, one time, start, doing some preliminary work.
CopyToOneRow, doing the repetitive work, called many times, row by row.
CopyToEnd, one time doing the closing work.

seems to need a function pointer for processing the format and other options.
or maybe the reason is we need a one time function call before doing DoCopyTo,
like one time initialization.

I know that JSON format wants it but can we defer it? We can
add more options later. I want to proceed this improvement
step by step.

More use cases will help us which callbacks are needed. We
will be able to collect more use cases by providing basic
callbacks.

generally in v17, the code pattern looks like this.
if (cstate->opts.binary)
{
/* handle binary format */
}
else if (cstate->routine)
{
/* custom code, make the copy format extensible */
}
else
{
/* handle non-binary, (csv or text) format */
}
maybe we need another bool flag like `bool buildin_format`.
if the copy format is {csv|text|binary} then buildin_format is true else false.

so the code pattern would be:
if (cstate->opts.binary)
{
/* handle binary format */
}
else if (cstate->routine && !buildin_format)
{
/* custom code, make the copy format extensible */
}
else
{
/* handle non-binary, (csv or text) format */
}

otherwise the {CopyToRoutine| CopyFromRoutine} needs a function pointer
to distinguish native copy format and extensible supported format,
like I mentioned above?

Hmm. I may miss something but I think that we don't need the
bool flag. Because we don't set cstate->routine for native
copy formats. So we can distinguish native copy format and
extensible supported format by checking only
cstate->routine.

Thanks,
--
kou

#153jian he
jian.universality@gmail.com
In reply to: Sutou Kouhei (#152)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Mar 11, 2024 at 8:56 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CACJufxEgn3=j-UWg-f2-DbLO+uVSKGcofpkX5trx+=YX6icSFg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 11 Mar 2024 08:00:00 +0800,
jian he <jian.universality@gmail.com> wrote:

Hi, here are my cents:
Currently in v17, we have 3 extra functions within DoCopyTo
CopyToStart, one time, start, doing some preliminary work.
CopyToOneRow, doing the repetitive work, called many times, row by row.
CopyToEnd, one time doing the closing work.

seems to need a function pointer for processing the format and other options.
or maybe the reason is we need a one time function call before doing DoCopyTo,
like one time initialization.

I know that JSON format wants it but can we defer it? We can
add more options later. I want to proceed this improvement
step by step.

More use cases will help us which callbacks are needed. We
will be able to collect more use cases by providing basic
callbacks.

I guess one of the ultimate goals would be that COPY can export data
to a customized format.
Let's say the customized format is "csv1", but it is just analogous to
the csv format.
people should be able to create an extension, with serval C functions,
then they can do `copy (select 1 ) to stdout (format 'csv1');`
but the output will be exact same as `copy (select 1 ) to stdout
(format 'csv');`

In such a scenario, we require a function akin to ProcessCopyOptions
to handle situations
where CopyFormatOptions->csv_mode is true, while the format is "csv1".

but CopyToStart is already within the DoCopyTo function, so you do
need an extra function pointer?
I do agree with the incremental improvement method.

#154Sutou Kouhei
kou@clear-code.com
In reply to: jian he (#153)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CACJufxFbffGaxW1LiTNEQAPcuvP1s7GL1Ghi--kbSqsjwh7XeA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 13 Mar 2024 16:00:46 +0800,
jian he <jian.universality@gmail.com> wrote:

More use cases will help us which callbacks are needed. We
will be able to collect more use cases by providing basic
callbacks.

Let's say the customized format is "csv1", but it is just analogous to
the csv format.
people should be able to create an extension, with serval C functions,
then they can do `copy (select 1 ) to stdout (format 'csv1');`
but the output will be exact same as `copy (select 1 ) to stdout
(format 'csv');`

Thanks for sharing one use case but I think that we need
real-world use cases to consider our APIs.

For example, JSON support that is currently discussing in
another thread is a real-world use case. My Apache Arrow
support is also another real-world use case.

Thanks,
--
kou

#155Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#150)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Could someone review the v17 patch to proceed this?

The v17 patch:
/messages/by-id/20240305.171808.667980402249336456.kou@clear-code.com

Some profiles by Michael:
/messages/by-id/ZelfYatRdVZN3FbE@paquier.xyz

Thanks,
--
kou

In <20240308.092254.359611633589181574.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 08 Mar 2024 09:22:54 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Show quoted text

Hi,

In <ZelfYatRdVZN3FbE@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 7 Mar 2024 15:32:01 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

While on it, here are some profiles based on HEAD and v17 with the
previous tests (COPY TO /dev/null, COPY FROM data sent to the void).

...

So, in short, and that's not really a surprise, there is no effect
once we use the dispatching with the routines only when a format would
want to plug-in with the APIs, but a custom format would still have a
penalty of a few percents for both if bottlenecked on CPU.

Thanks for sharing these profiles!
I agree with you.

This shows that the v17 approach doesn't affect the current
text/csv/binary implementations. (The v17 approach just adds
2 new structs, Copy{From,To}Rountine, without changing the
current text/csv/binary implementations.)

Can we push the v17 patch and proceed following
implementations? Could someone (especially a PostgreSQL
committer) take a look at this for double-check?

Thanks,
--
kou

#156Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#155)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Andres,

Could you take a look at this? I think that you don't want
to touch the current text/csv/binary implementations. The
v17 patch approach doesn't touch the current text/csv/binary
implementations. What do you think about this approach?

Thanks,
--
kou

In <20240320.232732.488684985873786799.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 20 Mar 2024 23:27:32 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Show quoted text

Hi,

Could someone review the v17 patch to proceed this?

The v17 patch:
/messages/by-id/20240305.171808.667980402249336456.kou@clear-code.com

Some profiles by Michael:
/messages/by-id/ZelfYatRdVZN3FbE@paquier.xyz

Thanks,
--
kou

In <20240308.092254.359611633589181574.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 08 Mar 2024 09:22:54 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <ZelfYatRdVZN3FbE@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 7 Mar 2024 15:32:01 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

While on it, here are some profiles based on HEAD and v17 with the
previous tests (COPY TO /dev/null, COPY FROM data sent to the void).

...

So, in short, and that's not really a surprise, there is no effect
once we use the dispatching with the routines only when a format would
want to plug-in with the APIs, but a custom format would still have a
penalty of a few percents for both if bottlenecked on CPU.

Thanks for sharing these profiles!
I agree with you.

This shows that the v17 approach doesn't affect the current
text/csv/binary implementations. (The v17 approach just adds
2 new structs, Copy{From,To}Rountine, without changing the
current text/csv/binary implementations.)

Can we push the v17 patch and proceed following
implementations? Could someone (especially a PostgreSQL
committer) take a look at this for double-check?

Thanks,
--
kou

#157Tomas Vondra
tomas.vondra@enterprisedb.com
In reply to: Sutou Kouhei (#156)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hello Kouhei-san,

I think it'd be helpful if you could post a patch status, i.e. a message
re-explaininig what it aims to achieve, summary of the discussion so
far, and what you think are the open questions. Otherwise every reviewer
has to read the whole thread to learn this.

FWIW I realize there are other related patches, and maybe some of the
discussion is happening on those threads. But that's just another reason
to post the summary here - as a reviewer I'm not going to read random
other patches that "might" have relevant info.

-----

The way I understand it, the ultimate goal is to allow extensions to
define formats using CREATE XYZ. And I agree that would be a very
valuable feature. But the proposed patch does not do that, right? It
only does some basic things at the C level, there's no DDL etc.

Per the commit message, none of the existing formats (text/csv/binary)
is implemented as "copy routine". IMHO that's a bit strange, because
that's exactly what I'd expect this patch to do - to define all the
infrastructure (catalogs, ...) and switch the existing formats to it.

Yes, the patch will be larger, but it'll also simplify some of the code
(right now there's a bunch of branches to handle these "old" formats).
How would you even know the new code is correct, when there's nothing
using using the "copy routine" branch?

In fact, doesn't this mean that the benchmarks presented earlier are not
very useful? We still use the old code, except there are a couple "if"
branches that are never taken? I don't think this measures the new
approach would not be slower once everything gets to be copy routine.

Or what am I missing?

Also, how do we know this API is suitable for the alternative formats?
For example you mentioned Arrow, and I suppose people will want to add
support for other column-oriented formats. I assume that will require
stashing a batch of rows (or some other internal state) somewhere, but
does the proposed API plan for that?

My guess would be we'll need to add a "private_data" pointer to the
CopyFromStateData/CopyToStateData structs, but maybe I'm wrong.

Also, won't the alternative formats require custom parameters. For
example, for column-oriented-formats it might be useful to specify a
stripe size (rows per batch), etc. I'm not saying this patch needs to
implement that, but maybe the API should expect it?

-----

To sum this up, what I think needs to happen for this patch to move forward:

1) Switch the existing formats to the new API, to validate the API works
at least for them, allow testing and benchmarking the code.

2) Try implementing some of the more exotic formats (column-oriented) to
test the API works for those too.

3) Maybe try implementing a PoC version to do the DDL, so that it
actually is extensible.

It's not my intent to "move the goalposts" - I think it's fine if the
patches (2) and (3) are just PoC, to validate (1) goes in the right
direction. For example, it's fine if (2) just hard-codes the new format
next to the build-in ones - that's not something we'd commit, I think,
but for validation of (1) it's good enough.

Most of the DDL stuff can probably be "copied" from FDW handlers. It's
pretty similar, and the "routine" idea is what FDW does too. It probably
also shows a good way to "initialize" the routine, etc.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#158Li, Yong
yoli@ebay.com
In reply to: Tomas Vondra (#157)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Kou,

I tried to follow the thread but had to skip quite some discussions in the middle part of the thread. From what I read, it appears to me that there were a lot of back-and-forth discussions on the specific implementation details (i.e. do not touch existing format implementation), performance concerns and how to split the patches to make it more manageable.

My understanding is that the provided v17 patch aims to achieve the followings:
- Retain existing format implementations as built-in formats, and do not go through the new interface for them.
- Make sure that there is no sign of performance degradation.
- Refactoring the existing code to make it easier and possible to make copy handlers extensible. However, some of the infrastructure work that are required to make copy handler extensible are intentionally delayed for future patches. Some of the work were proposed as patches in earlier messages, but they were not explicitly referenced in recent messages.

Overall, the current v17 patch applies cleanly to HEAD. “make check-world” also runs cleanly. If my understanding of the current status of the patch is correct, the patch looks good to me.

Regards,
Yong

#159Sutou Kouhei
kou@clear-code.com
In reply to: Tomas Vondra (#157)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Tomas,

Thanks for joining this thread!

In <257d5573-07da-48c3-ac07-e047e7a65e99@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 19 Jul 2024 14:40:05 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

I think it'd be helpful if you could post a patch status, i.e. a message
re-explaininig what it aims to achieve, summary of the discussion so
far, and what you think are the open questions. Otherwise every reviewer
has to read the whole thread to learn this.

It makes sense. It seems your questions covers all important
points in this thread. So my answers of your questions
summarize the latest information.

FWIW I realize there are other related patches, and maybe some of the
discussion is happening on those threads. But that's just another reason
to post the summary here - as a reviewer I'm not going to read random
other patches that "might" have relevant info.

It makes sense too. To clarify it, other threads are
unrelated. We can focus on only this thread for this propose.

The way I understand it, the ultimate goal is to allow extensions to
define formats using CREATE XYZ.

Right.

But the proposed patch does not do that, right? It
only does some basic things at the C level, there's no DDL etc.

Right. The latest patch set includes only the basic things
for the first implementation.

Per the commit message, none of the existing formats (text/csv/binary)
is implemented as "copy routine".

Right.

IMHO that's a bit strange, because
that's exactly what I'd expect this patch to do - to define all the
infrastructure (catalogs, ...) and switch the existing formats to it.

We did it in the v1-v15 patch sets. But the v16/v17 patch
sets remove it because of a profiling result. (It's
described later.)

In general, we don't want to decrease the current
performance of the existing formats:

/messages/by-id/10025bac-158c-ffe7-fbec-32b42629121f@dunslane.net

We've spent quite a lot of blood sweat and tears over the years to make
COPY fast, and we should not sacrifice any of that lightly.

The v15 patch set is faster than HEAD but there is a
mysterious profiling result:

/messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

The increase in CopyOneRowTo from 80% to 85% worries me

...

I am getting faster
runtimes with v15 (6232ms in average) vs HEAD (6550ms).

I think that it's not a blocker because the v15 patch set
approach is faster. But someone may think that it's a
blocker. So the v16 or later patch sets don't include codes
to use this extension mechanism for the existing formats. We
can work on it after we introduce the basic features if it's
valuable.

How would you even know the new code is correct, when there's nothing
using using the "copy routine" branch?

We can't test it only with the v16/v17 patch set
changes. But we can do it by adding more changes we did in
the v6 patch set.
/messages/by-id/20240124.144936.67229716500876806.kou@clear-code.com

If we should commit the basic changes with tests, I can
adjust the test mechanism in v6 patch set and add it to the
latest patch set. But it needs CREATE XYZ mechanism and
so on too. Is it OK?

In fact, doesn't this mean that the benchmarks presented earlier are not
very useful? We still use the old code, except there are a couple "if"
branches that are never taken? I don't think this measures the new
approach would not be slower once everything gets to be copy routine.

Here is a benchmark result with the v17 and HEAD:

/messages/by-id/ZelfYatRdVZN3FbE@paquier.xyz

It shows that no performance difference for the existing
formats.

The added mechanism may be slower than the existing formats
mechanism but it's not a blocker. Because it's never
performance regression. (Because this is a new feature.)

We can improve it later if it's needed.

Also, how do we know this API is suitable for the alternative formats?

The v6 patch set has more APIs built on this API. These APIs
are for implementing the alternative formats.

/messages/by-id/20240124.144936.67229716500876806.kou@clear-code.com

This is an Apache Arrow format implementation based on the
v6 patch set: https://github.com/kou/pg-copy-arrow

For example you mentioned Arrow, and I suppose people will want to add
support for other column-oriented formats. I assume that will require
stashing a batch of rows (or some other internal state) somewhere, but
does the proposed API plan for that?

My guess would be we'll need to add a "private_data" pointer to the
CopyFromStateData/CopyToStateData structs, but maybe I'm wrong.

I think so too. The v6 patch set has a "private_data"
pointer. But the v17 patch set doesn't have it because the
v17 patch set has only basic changes. We'll add it and other
features in the following patches:

/messages/by-id/20240305.171808.667980402249336456.kou@clear-code.com

I'll send the following patches after this patch is
merged. They are based on the v6 patch[1]:

1. Add copy_handler
* This also adds a pg_proc lookup for custom FORMAT
* This also adds a test for copy_handler
2. Export CopyToStateData
* We need it to implement custom copy TO handler
3. Add needed APIs to implement custom copy TO handler
* Add CopyToStateData::opaque
* Export CopySendEndOfRow()
4. Export CopyFromStateData
* We need it to implement custom copy FROM handler
5. Add needed APIs to implement custom copy FROM handler
* Add CopyFromStateData::opaque
* Export CopyReadBinaryData()

"Copy{To,From}StateDate::opaque" are the "private_data"
pointer in the v6 patch.

Also, won't the alternative formats require custom parameters. For
example, for column-oriented-formats it might be useful to specify a
stripe size (rows per batch), etc. I'm not saying this patch needs to
implement that, but maybe the API should expect it?

Yes. The v6 patch set also has the API. But we want to
minimize API set as much as possible in the first
implementation.

/messages/by-id/Zbi1TwPfAvUpKqTd@paquier.xyz

I am really worried about the complexities
this thread is getting into because we are trying to shape the
callbacks in the most generic way possible based on *two* use cases.
This is going to be a never-ending discussion. I'd rather get some
simple basics, and then we can discuss if tweaking the callbacks is
really necessary or not.

And I agree with this approach.

1) Switch the existing formats to the new API, to validate the API works
at least for them, allow testing and benchmarking the code.

I want to keep the current style for the first
implementation to avoid affecting the existing formats
performance. If it's not allowed to move forward this
proposal, could someone help us to solve the mysterious
result (why are %s of CopyOneRowTo() different?) in the
following v15 patch set benchmark result?

/messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

2) Try implementing some of the more exotic formats (column-oriented) to
test the API works for those too.

3) Maybe try implementing a PoC version to do the DDL, so that it
actually is extensible.

It's not my intent to "move the goalposts" - I think it's fine if the
patches (2) and (3) are just PoC, to validate (1) goes in the right
direction. For example, it's fine if (2) just hard-codes the new format
next to the build-in ones - that's not something we'd commit, I think,
but for validation of (1) it's good enough.

Most of the DDL stuff can probably be "copied" from FDW handlers. It's
pretty similar, and the "routine" idea is what FDW does too. It probably
also shows a good way to "initialize" the routine, etc.

Is the v6 patch set enough for it?
/messages/by-id/20240124.144936.67229716500876806.kou@clear-code.com

Or should we do it based on the v17 patch set? If so, I'll
work on it now. It was a plan that I'll do after the v17
patch set is merged.

Thanks,
--
kou

#160Sutou Kouhei
kou@clear-code.com
In reply to: Li, Yong (#158)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Yong,

Thanks for joining this thread!

In <453D52D4-2AC5-49F6-928D-79F8A4C0850E@ebay.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 22 Jul 2024 07:11:15 +0000,
"Li, Yong" <yoli@ebay.com> wrote:

My understanding is that the provided v17 patch aims to achieve the followings:
- Retain existing format implementations as built-in formats, and do not go through the new interface for them.
- Make sure that there is no sign of performance degradation.
- Refactoring the existing code to make it easier and possible to make copy handlers extensible. However, some of the infrastructure work that are required to make copy handler extensible are intentionally delayed for future patches. Some of the work were proposed as patches in earlier messages, but they were not explicitly referenced in recent messages.

Right.

Sorry for bothering you. As Tomas suggested, I should have
prepared the current summary.

My last e-mail summarized the current information:
/messages/by-id/20240722.164540.889091645042390373.kou@clear-code.com

It also shows that your understanding is right.

Thanks,
--
kou

#161Tomas Vondra
tomas.vondra@enterprisedb.com
In reply to: Sutou Kouhei (#159)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 7/22/24 09:45, Sutou Kouhei wrote:

Hi Tomas,

Thanks for joining this thread!

In <257d5573-07da-48c3-ac07-e047e7a65e99@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 19 Jul 2024 14:40:05 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

I think it'd be helpful if you could post a patch status, i.e. a message
re-explaininig what it aims to achieve, summary of the discussion so
far, and what you think are the open questions. Otherwise every reviewer
has to read the whole thread to learn this.

It makes sense. It seems your questions covers all important
points in this thread. So my answers of your questions
summarize the latest information.

Thanks for the summary/responses. I still think it'd be better to post a
summary as a separate message, not as yet another post responding to
someone else. If I was reading the thread, I would not have noticed this
is meant to be a summary. I'd even consider putting a "THREAD SUMMARY"
title on the first line, or something like that. Up to you, of course.

As for the patch / decisions, thanks for the responses and explanations.
But I still find it hard to review / make judgements about the approach
based on the current version of the patch :-( Yes, it's entirely
possible earlier versions did something interesting - e.g. it might have
implemented the existing formats to the new approach. Or it might have a
private pointer in v6. But how do I know why it was removed? Was it
because it's unnecessary for the initial version? Or was it because it
turned out to not work?

And when reviewing a patch, I really don't want to scavenge through old
patch versions, looking for random parts. Not only because I don't know
what to look for, but also because it'll be harder and harder to make
those old versions work, as the patch moves evolves.

My suggestions would be to maintain this as a series of patches, making
incremental changes, with the "more complex" or "more experimental"
parts larger in the series. For example, I can imagine doing this:

0001 - minimal version of the patch (e.g. current v17)
0002 - switch existing formats to the new interface
0003 - extend the interface to add bits needed for columnar formats
0004 - add DML to create/alter/drop custom implementations
0005 - minimal patch with extension adding support for Arrow

Or something like that. The idea is that we still have a coherent story
of what we're trying to do, and can discuss the incremental changes
(easier than looking at a large patch). It's even possible to commit
earlier parts before the later parts are quite cleanup up for commit.
And some changes changes may not be even meant for commit (e.g. the
extension) but as guidance / validation for the earlier parts.

I do realize this might look like I'm requiring you to do more work.
Sorry about that. I'm just thinking about how to move the patch forward
and convince myself the approach is OK. Also, it's what I think works
quite well for other patches discussed on this mailing list (I do this
for various patches I submitted, for example). And I'm not even sure it
actually is more work.

As for the performance / profiling issues, I've read the reports and I'm
not sure I see something tremendously wrong. Yes, there are differences,
but 5% change can easily be noise, shift in binary layout, etc.

Unfortunately, there's not much information about what exactly the tests
did, context (hardware, ...). So I don't know, really. But if you share
enough information on how to reproduce this, I'm willing to take a look
and investigate.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

#162Sutou Kouhei
kou@clear-code.com
In reply to: Tomas Vondra (#161)
5 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <9172d4eb-6de0-4c6d-beab-8210b7a2219b@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 22 Jul 2024 14:36:40 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

Thanks for the summary/responses. I still think it'd be better to post a
summary as a separate message, not as yet another post responding to
someone else. If I was reading the thread, I would not have noticed this
is meant to be a summary. I'd even consider putting a "THREAD SUMMARY"
title on the first line, or something like that. Up to you, of course.

It makes sense. I'll do it as a separated e-mail.

My suggestions would be to maintain this as a series of patches, making
incremental changes, with the "more complex" or "more experimental"
parts larger in the series. For example, I can imagine doing this:

0001 - minimal version of the patch (e.g. current v17)
0002 - switch existing formats to the new interface
0003 - extend the interface to add bits needed for columnar formats
0004 - add DML to create/alter/drop custom implementations
0005 - minimal patch with extension adding support for Arrow

Or something like that. The idea is that we still have a coherent story
of what we're trying to do, and can discuss the incremental changes
(easier than looking at a large patch). It's even possible to commit
earlier parts before the later parts are quite cleanup up for commit.
And some changes changes may not be even meant for commit (e.g. the
extension) but as guidance / validation for the earlier parts.

OK. I attach the v18 patch set:

0001: add a basic feature (Copy{From,To}Routine)
(same as the v17 but it's based on the current master)
0002: use Copy{From,To}Rountine for the existing formats
(this may not be committed because there is a
profiling related concern)
0003: add support for specifying custom format by "COPY
... WITH (format 'my-format')"
(this also has a test)
0004: export Copy{From,To}StateData
(but this isn't enough to implement custom COPY
FROM/TO handlers as an extension)
0005: add opaque member to Copy{From,To}StateData and export
some functions to read the next data and flush the buffer
(we can implement a PoC Apache Arrow COPY FROM/TO
handler as an extension with this)

https://github.com/kou/pg-copy-arrow is a PoC Apache Arrow
COPY FROM/TO handler as an extension.

Notes:

* 0002: We use "static inline" and "constant argument" for
optimization.
* 0002: This hides NextCopyFromRawFields() in a public
header because it's not used in PostgreSQL and we want to
use "static inline" for it. If it's a problem, we can keep
it and create an internal function for "static inline".
* 0003: We use "CREATE FUNCTION" to register a custom COPY
FROM/TO handler. It's the same approach as tablesample.
* 0004 and 0005: We can mix them but this patch set split
them for easy to review. 0004 just moves the existing
codes. It doesn't change the existing codes.
* PoC: I provide it as a separated repository instead of a
patch because an extension exists as a separated project
in general. If it's a problem, I can provide it as a patch
for contrib/.
* This patch set still has minimal Copy{From,To}Routine. For
example, custom COPY FROM/TO handlers can't process their
own options with this patch set. We may add more callbacks
to Copy{From,To}Routine later based on real world use-cases.

Unfortunately, there's not much information about what exactly the tests
did, context (hardware, ...). So I don't know, really. But if you share
enough information on how to reproduce this, I'm willing to take a look
and investigate.

Thanks. Here is related information based on the past
e-mails from Michael:

* Use -O2 for optimization build flag
("meson setup --buildtype=release" may be used)
* Use tmpfs for PGDATA
* Disable fsync
* Run on scissors (what is "scissors" in this context...?)
/messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz
* Unlogged table may be used
* Use a table that has 30 integer columns (*1)
* Use 5M rows (*2)
* Use '/dev/null' for COPY TO (*3)
* Use blackhole_am for COPY FROM (*4)
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am
* perf is used but used options are unknown (sorry)

(*1) This SQL may be used to create the table:

CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
SELECT create_table_cols ('to_tab_30', 30);
SELECT create_table_cols ('from_tab_30', 30);

(*2) This SQL may be used to insert 5M rows:

INSERT INTO to_tab_30 SELECT FROM generate_series(1, 5000000);

(*3) This SQL may be used for COPY TO:

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

(*4) This SQL may be used for COPY FROM:

CREATE EXTENSION blackhole_am;
ALTER TABLE from_tab_30 SET ACCESS METHOD blackhole_am;
COPY to_tab_30 TO '/tmp/to_tab_30.txt' WITH (FORMAT text);
COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

If there is enough information, could you try?

Thanks,
--
kou

Attachments:

v18-0001-Add-CopyFromRoutine-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From 22daacbd77c6dd0e13fe11e30fba90f7595ff6c1 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v18 1/5] Add CopyFromRoutine/CopyToRountine

They are for implementing custom COPY FROM/TO format. But this is not
enough to implement custom COPY FROM/TO format yet. We'll export some
APIs to receive/send data and add "format" option to COPY FROM/TO
later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine/CopyToRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  31 ++++++-
 src/include/commands/copyapi.h           | 100 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 158 insertions(+), 8 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index ce4d62e707c..ff13b3e3592 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1618,12 +1618,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,10 +1773,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1784,6 +1797,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7efcb891598..92b8d5e72d5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1012,6 +1012,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ae8b2e36d72..ff19c457abf 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -771,14 +775,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -805,6 +817,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -886,6 +900,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -910,15 +926,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..635c4cbff27
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,100 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated to the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated to the relation's attributes reading from.  `finfo` can be
+	 * optionally filled.  `atttypid` is the OID of data type used by the
+	 * relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b4d7f9217ce..3ce855c8f17 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -490,6 +490,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -501,6 +502,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v18-0002-Use-CopyFromRoutine-CopyToRountine-for-the-exist.patchtext/x-patch; charset=us-asciiDownload
From ace816c9ef7b1dceed35d7cf18b82e70fa9143e6 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 16:44:44 +0900
Subject: [PATCH v18 2/5] Use CopyFromRoutine/CopyToRountine for the existing
 formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 556 +++++++++++++----------
 src/backend/commands/copyto.c            | 480 ++++++++++++-------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 5 files changed, 813 insertions(+), 448 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index ff13b3e3592..1a59202f5ab 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -103,6 +103,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1381,7 +1532,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1413,6 +1563,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1566,25 +1719,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1617,23 +1751,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1768,23 +1888,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1797,8 +1901,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 92b8d5e72d5..90824b47785 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -149,10 +149,10 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
-static int	CopyReadAttributesText(CopyFromState cstate);
-static int	CopyReadAttributesCSV(CopyFromState cstate);
+static inline bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static inline int CopyReadAttributesText(CopyFromState cstate);
+static inline int CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
@@ -750,8 +750,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -768,13 +768,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -818,7 +822,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -828,8 +832,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -839,6 +848,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column %s: \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column %s: null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -856,221 +1126,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column %s: \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column %s: null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1100,8 +1170,8 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * by newline.  The terminating newline or EOF marker is not included
  * in the final value of line_buf.
  */
-static bool
-CopyReadLine(CopyFromState cstate)
+static inline bool
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1109,7 +1179,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1176,8 +1246,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1193,7 +1263,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1270,7 +1344,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\\' or '\r', we may need to look ahead below.
@@ -1309,7 +1387,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1337,10 +1415,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1354,10 +1432,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1365,15 +1443,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1385,7 +1463,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!is_csv || first_char_in_line))
 		{
 			char		c2;
 
@@ -1418,7 +1496,11 @@ CopyReadLineText(CopyFromState cstate)
 
 					if (c2 == '\n')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1427,7 +1509,11 @@ CopyReadLineText(CopyFromState cstate)
 					}
 					else if (c2 != '\r')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker corrupt")));
@@ -1443,7 +1529,11 @@ CopyReadLineText(CopyFromState cstate)
 
 				if (c2 != '\r' && c2 != '\n')
 				{
-					if (!cstate->opts.csv_mode)
+					/*
+					 * is_csv will be optimized away by compiler, as argument
+					 * is constant at caller.
+					 */
+					if (!is_csv)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 errmsg("end-of-copy marker corrupt")));
@@ -1472,7 +1562,7 @@ CopyReadLineText(CopyFromState cstate)
 				result = true;	/* report EOF */
 				break;
 			}
-			else if (!cstate->opts.csv_mode)
+			else if (!is_csv)
 			{
 				/*
 				 * If we are here, it means we found a backslash followed by
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ff19c457abf..c7f69ba606d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,321 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +510,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +544,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +731,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -770,27 +1074,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -803,58 +1090,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -893,15 +1129,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -917,11 +1145,7 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
@@ -929,65 +1153,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 141fd48dc10..ccfbdf0ee01 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -104,8 +104,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v18-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From f3a336853607e7c7e24158cc2b407aaca845dc88 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 17:39:41 +0900
Subject: [PATCH v18 3/5] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine and a COPY FROM handler
returns a CopyFromRoutine.

This uses the same handler for COPY TO and COPY FROM. PostgreSQL calls a
COPY TO/FROM handler with "is_from" argument. It's true for COPY FROM
and false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY TO/FROM handler.
---
 src/backend/commands/copy.c                   |  96 ++++++++++++++---
 src/backend/commands/copyfrom.c               |   4 +-
 src/backend/commands/copyto.c                 |   4 +-
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 ++
 src/include/catalog/pg_type.dat               |   6 ++
 src/include/commands/copy.h                   |   2 +
 src/include/commands/copyapi.h                |   4 +
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../expected/test_copy_format.out             |  21 ++++
 src/test/modules/test_copy_format/meson.build |  33 ++++++
 .../test_copy_format/sql/test_copy_format.sql |   6 ++
 .../test_copy_format--1.0.sql                 |   8 ++
 .../test_copy_format/test_copy_format.c       | 100 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 21 files changed, 313 insertions(+), 15 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index df7a4a21c94..e5137e7bb3d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -439,6 +440,87 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -481,22 +563,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1a59202f5ab..2b48c825a0a 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -244,7 +244,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c7f69ba606d..a9e923467dc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -435,7 +435,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 73d9cf85826..126254473e6 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7644,6 +7644,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..14c6c1ea486 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index ccfbdf0ee01..79bd4fb9151 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -84,6 +84,8 @@ typedef struct CopyFormatOptions
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 635c4cbff27..2223cad8fd9 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,6 +27,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated to the relation's attributes writing to.  `finfo` can be
@@ -69,6 +71,8 @@ typedef struct CopyFromRoutine
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated to the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 256799f520a..b7b46928a19 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index d8fe059d236..c42b4b2b31f 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..4ed7c0b12db
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,21 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..e805f7cb011
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,6 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..f6b105659ab
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,100 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v18-0004-Export-CopyToStateData-and-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 19512a04864ec88829a553de983f41d2ce31a375 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v18 4/5] Export CopyToStateData and CopyFromStateData

It's for custom COPY TO/FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except
CopyDest/CopyFrom enum values. CopyDest/CopyFrom enum values such as
COPY_FILE are conflicted each other. So COPY_DEST_ prefix instead of
COPY_ prefix is used for CopyDest enum values and COPY_SOURCE_ prefix
instead of COPY_PREFIX_ is used for CopyFrom enum values. For example,
COPY_FILE in CopyDest is renamed to COPY_DEST_FILE and COPY_FILE in
CopyFrom is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY TO/FROM format
handlers as extension. We'll do the followings in a subsequent commit:

For custom COPY TO format handler:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer

For custom COPY FROM format handler:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/backend/commands/copyto.c            |  77 +-----
 src/include/commands/copy.h              |  78 +-----
 src/include/commands/copyapi.h           | 306 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ------------
 6 files changed, 320 insertions(+), 320 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2b48c825a0a..5902172b8df 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1699,7 +1699,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1827,7 +1827,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 90824b47785..74844103228 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1188,7 +1188,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index a9e923467dc..54aa6cdecaf 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -464,7 +403,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -511,7 +450,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -545,11 +484,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -928,12 +867,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 79bd4fb9151..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,87 +14,11 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
-								 * NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2223cad8fd9..3104d99ea9f 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,12 +14,83 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* These are private in commands/copy[from|to].c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
+} CopyFormatOptions;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 /*
  * API structure for a COPY FROM format implementation.  Note this must be
@@ -65,6 +136,174 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
+
+typedef struct CopyToStateData *CopyToState;
+
 /*
  * API structure for a COPY TO format implementation.   Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -101,4 +340,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v18-0005-Add-support-for-implementing-custom-COPY-TO-FROM.patchtext/x-patch; charset=us-asciiDownload
From 7afdeeaafd4045477d90cf0c9ab356074e4ea100 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v18 5/5] Add support for implementing custom COPY TO/FROM
 format as extension

For custom COPY TO format implementation:

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
* Rename CopySendEndOfRow() to CopyToStateFlush() because it's a
  method for CopyToState and it's used for flushing. End-of-row related
  codes were moved to CopyToTextSendEndOfRow().

For custom COPY FROM format implementation:

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data
* Rename CopyReadBinaryData() to CopyFromStateRead() because it's a
  method for CopyFromState and "BinaryData" is redundant.
---
 src/backend/commands/copyfromparse.c | 21 ++++++++++-----------
 src/backend/commands/copyto.c        | 15 +++++++--------
 src/include/commands/copyapi.h       | 10 ++++++++++
 3 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 74844103228..cd80d34f3da 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -164,7 +164,6 @@ static int	CopyGetData(CopyFromState cstate, void *databuf,
 static inline bool CopyGetInt32(CopyFromState cstate, int32 *val);
 static inline bool CopyGetInt16(CopyFromState cstate, int16 *val);
 static void CopyLoadInputBuf(CopyFromState cstate);
-static int	CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes);
 
 void
 ReceiveCopyBegin(CopyFromState cstate)
@@ -193,7 +192,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	int32		tmp;
 
 	/* Signature */
-	if (CopyReadBinaryData(cstate, readSig, 11) != 11 ||
+	if (CopyFromStateRead(cstate, readSig, 11) != 11 ||
 		memcmp(readSig, BinarySignature, 11) != 0)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -221,7 +220,7 @@ ReceiveCopyBinaryHeader(CopyFromState cstate)
 	/* Skip extension header, if present */
 	while (tmp-- > 0)
 	{
-		if (CopyReadBinaryData(cstate, readSig, 1) != 1)
+		if (CopyFromStateRead(cstate, readSig, 1) != 1)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("invalid COPY file header (wrong length)")));
@@ -363,7 +362,7 @@ CopyGetInt32(CopyFromState cstate, int32 *val)
 {
 	uint32		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -380,7 +379,7 @@ CopyGetInt16(CopyFromState cstate, int16 *val)
 {
 	uint16		buf;
 
-	if (CopyReadBinaryData(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
+	if (CopyFromStateRead(cstate, (char *) &buf, sizeof(buf)) != sizeof(buf))
 	{
 		*val = 0;				/* suppress compiler warning */
 		return false;
@@ -691,14 +690,14 @@ CopyLoadInputBuf(CopyFromState cstate)
 }
 
 /*
- * CopyReadBinaryData
+ * CopyFromStateRead
  *
  * Reads up to 'nbytes' bytes from cstate->copy_file via cstate->raw_buf
  * and writes them to 'dest'.  Returns the number of bytes read (which
  * would be less than 'nbytes' only if we reach EOF).
  */
-static int
-CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
 {
 	int			copied_bytes = 0;
 
@@ -1078,7 +1077,7 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 		 */
 		char		dummy;
 
-		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+		if (CopyFromStateRead(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("received copy data after EOF marker")));
@@ -2103,8 +2102,8 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 	resetStringInfo(&cstate->attribute_buf);
 
 	enlargeStringInfo(&cstate->attribute_buf, fld_size);
-	if (CopyReadBinaryData(cstate, cstate->attribute_buf.data,
-						   fld_size) != fld_size)
+	if (CopyFromStateRead(cstate, cstate->attribute_buf.data,
+						  fld_size) != fld_size)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 				 errmsg("unexpected EOF in COPY data")));
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 54aa6cdecaf..cd9e352533a 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -63,7 +63,6 @@ static void SendCopyEnd(CopyToState cstate);
 static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
-static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
@@ -99,7 +98,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 	}
 
 	/* Now take the actions related to the end of a row */
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 /*
@@ -325,7 +324,7 @@ CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
 		}
 	}
 
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 /*
@@ -339,7 +338,7 @@ CopyToBinaryEnd(CopyToState cstate)
 	/* Generate trailer for a binary copy */
 	CopySendInt16(cstate, -1);
 	/* Need to flush out the trailer */
-	CopySendEndOfRow(cstate);
+	CopyToStateFlush(cstate);
 }
 
 /*
@@ -419,8 +418,8 @@ SendCopyEnd(CopyToState cstate)
  * CopySendData sends output data to the destination (file or frontend)
  * CopySendString does the same for null-terminated strings
  * CopySendChar does the same for single characters
- * CopySendEndOfRow does the appropriate thing at end of each data row
- *	(data is not actually flushed except by CopySendEndOfRow)
+ * CopyToStateFlush flushes the buffered data
+ *	(data is not actually flushed except by CopyToStateFlush)
  *
  * NB: no data conversion is applied by these functions
  *----------
@@ -443,8 +442,8 @@ CopySendChar(CopyToState cstate, char c)
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
 }
 
-static void
-CopySendEndOfRow(CopyToState cstate)
+void
+CopyToStateFlush(CopyToState cstate)
 {
 	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 3104d99ea9f..0820b47a2d2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -299,8 +299,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 
 typedef struct CopyToStateData *CopyToState;
 
@@ -401,6 +406,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

#163Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#162)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

THREAD SUMMARY:

Proposal:

How about making COPY format extendable?

Background:

Currently, COPY TO/FROM supports only "text", "csv" and
"binary" formats. There are some requests to support more
COPY formats. For example:

* 2023-11: JSON and JSON lines [1]/messages/by-id/24e3ee88-ec1e-421b-89ae-8a47ee0d2df1@joeconway.com
* 2022-04: Apache Arrow [2]/messages/by-id/CAGrfaBVyfm0wPzXVqm0=h5uArYh9N_ij+sVpUtDHqkB=VyB3jw@mail.gmail.com
* 2018-02: Apache Avro, Apache Parquet and Apache ORC [3]/messages/by-id/20180210151304.fonjztsynewldfba@gmail.com

There were discussions how to add support for more formats. [3]/messages/by-id/20180210151304.fonjztsynewldfba@gmail.com[4]/messages/by-id/3741749.1655952719@sss.pgh.pa.us
In these discussions, we got a consensus about making COPY
format extendable.

[1]: /messages/by-id/24e3ee88-ec1e-421b-89ae-8a47ee0d2df1@joeconway.com
[2]: /messages/by-id/CAGrfaBVyfm0wPzXVqm0=h5uArYh9N_ij+sVpUtDHqkB=VyB3jw@mail.gmail.com
[3]: /messages/by-id/20180210151304.fonjztsynewldfba@gmail.com
[4]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us

Concerns:

* Performance: If we make COPY format extendable, it will
introduce some overheads. We don't want to loss our
optimization efforts for the current implementations by
this. [5]/messages/by-id/3741749.1655952719@sss.pgh.pa.us
* Extendability: We don't know which API set is enough for
custom COPY format implementations yet. We don't want to
provide too much APIs to reduce maintenance cost.

[5]: /messages/by-id/3741749.1655952719@sss.pgh.pa.us

Implementation:

The v18 patch set is the latest patch set. [6]/messages/by-id/20240724.173059.909782980111496972.kou@clear-code.com
It includes the following patches:

0001: This adds a basic feature (Copy{From,To}Routine)
(This isn't enough for extending COPY format.
This just extracts minimal procedure sets to be
extendable as callback sets.)
0002: This uses Copy{From,To}Rountine for the existing
formats (text, csv and binary)
(This may not be committed because there is a
profiling related concern. See the following section
for details)
0003: This adds support for specifying custom format by
"COPY ... WITH (format 'my-format')"
(This also adds a test for this feature.)
0004: This exports Copy{From,To}StateData
(But this isn't enough to implement custom COPY
FROM/TO handlers as an extension.)
0005: This adds opaque member to Copy{From,To}StateData and
export some functions to read the next data and flush
the buffer
(We can implement a PoC Apache Arrow COPY FROM/TO
handler as an extension with this. [7]https://github.com/kou/pg-copy-arrow)

[6]: /messages/by-id/20240724.173059.909782980111496972.kou@clear-code.com
[7]: https://github.com/kou/pg-copy-arrow

Implementation notes:

* 0002: We use "static inline" and "constant argument" for
optimization.
* 0002: This hides NextCopyFromRawFields() in a public
header because it's not used in PostgreSQL and we want to
use "static inline" for it. If it's a problem, we can keep
it and create an internal function for "static inline".
* 0003: We use "CREATE FUNCTION" to register a custom COPY
FROM/TO handler. It's the same approach as tablesample.
* 0004 and 0005: We can mix them but this patch set split
them for easy to review. 0004 just moves the existing
codes. It doesn't change the existing codes.
* PoC: I provide it as a separated repository instead of a
patch because an extension exists as a separated project
in general. If it's a problem, I can provide it as a patch
for contrib/.
* This patch set still has minimal Copy{From,To}Routine. For
example, custom COPY FROM/TO handlers can't process their
own options with this patch set. We may add more callbacks
to Copy{From,To}Routine later based on real world use-cases.

Performance concern:

We have a benchmark result and a profile for the change that
uses Copy{From,To}Routine for the existing formats. [8]/messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz They
are based on the v15 patch but there are no significant
difference between the v15 patch and v18 patch set.

These results show the followings:

* Runtime: The patched version is faster than HEAD.
* The patched version: 6232ms in average
* HEAD: 6550ms in average
* Profile: The patched version spends more percents than
HEAD in a core function.
* The patched version: 85.61% in CopyOneRowTo()
* HEAD: 80.35% in CopyOneRowTo()

[8]: /messages/by-id/ZdbtQJ-p5H1_EDwE@paquier.xyz

Here are related information for this benchmark/profile:

* Use -O2 for optimization build flag
("meson setup --buildtype=release" may be used)
* Use tmpfs for PGDATA
* Disable fsync
* Run on scissors (what is "scissors" in this context...?) [9]/messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz
* Unlogged table may be used
* Use a table that has 30 integer columns (*1)
* Use 5M rows (*2)
* Use '/dev/null' for COPY TO (*3)
* Use blackhole_am for COPY FROM (*4)
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am
* perf is used but used options are unknown (sorry)

(*1) This SQL may be used to create the table:

CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
SELECT create_table_cols ('to_tab_30', 30);
SELECT create_table_cols ('from_tab_30', 30);

(*2) This SQL may be used to insert 5M rows:

INSERT INTO to_tab_30 SELECT FROM generate_series(1, 5000000);

(*3) This SQL may be used for COPY TO:

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

(*4) This SQL may be used for COPY FROM:

CREATE EXTENSION blackhole_am;
ALTER TABLE from_tab_30 SET ACCESS METHOD blackhole_am;
COPY to_tab_30 TO '/tmp/to_tab_30.txt' WITH (FORMAT text);
COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

[9]: /messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz

Thanks,
--
kou

#164Li, Yong
yoli@ebay.com
In reply to: Sutou Kouhei (#163)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Jul 25, 2024, at 12:51, Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

THREAD SUMMARY:

Very nice summary.

Implementation:

The v18 patch set is the latest patch set. [6]
It includes the following patches:

0001: This adds a basic feature (Copy{From,To}Routine)
(This isn't enough for extending COPY format.
This just extracts minimal procedure sets to be
extendable as callback sets.)
0002: This uses Copy{From,To}Rountine for the existing
formats (text, csv and binary)
(This may not be committed because there is a
profiling related concern. See the following section
for details)
0003: This adds support for specifying custom format by
"COPY ... WITH (format 'my-format')"
(This also adds a test for this feature.)
0004: This exports Copy{From,To}StateData
(But this isn't enough to implement custom COPY
FROM/TO handlers as an extension.)
0005: This adds opaque member to Copy{From,To}StateData and
export some functions to read the next data and flush
the buffer
(We can implement a PoC Apache Arrow COPY FROM/TO
handler as an extension with this. [7])

Thanks,
--
kou

This review is for 0001 only because the other patches are not ready
for commit.

The v18-0001 patch applies cleanly to HEAD. “make check-world” also
runs cleanly. The patch looks good for me.

Regards,
Yong

#165Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#162)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi Sutou,

On Wed, Jul 24, 2024 at 4:31 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <9172d4eb-6de0-4c6d-beab-8210b7a2219b@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 22 Jul 2024 14:36:40 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

Thanks for the summary/responses. I still think it'd be better to post a
summary as a separate message, not as yet another post responding to
someone else. If I was reading the thread, I would not have noticed this
is meant to be a summary. I'd even consider putting a "THREAD SUMMARY"
title on the first line, or something like that. Up to you, of course.

It makes sense. I'll do it as a separated e-mail.

My suggestions would be to maintain this as a series of patches, making
incremental changes, with the "more complex" or "more experimental"
parts larger in the series. For example, I can imagine doing this:

0001 - minimal version of the patch (e.g. current v17)
0002 - switch existing formats to the new interface
0003 - extend the interface to add bits needed for columnar formats
0004 - add DML to create/alter/drop custom implementations
0005 - minimal patch with extension adding support for Arrow

Or something like that. The idea is that we still have a coherent story
of what we're trying to do, and can discuss the incremental changes
(easier than looking at a large patch). It's even possible to commit
earlier parts before the later parts are quite cleanup up for commit.
And some changes changes may not be even meant for commit (e.g. the
extension) but as guidance / validation for the earlier parts.

OK. I attach the v18 patch set:

0001: add a basic feature (Copy{From,To}Routine)
(same as the v17 but it's based on the current master)
0002: use Copy{From,To}Rountine for the existing formats
(this may not be committed because there is a
profiling related concern)
0003: add support for specifying custom format by "COPY
... WITH (format 'my-format')"
(this also has a test)
0004: export Copy{From,To}StateData
(but this isn't enough to implement custom COPY
FROM/TO handlers as an extension)
0005: add opaque member to Copy{From,To}StateData and export
some functions to read the next data and flush the buffer
(we can implement a PoC Apache Arrow COPY FROM/TO
handler as an extension with this)

https://github.com/kou/pg-copy-arrow is a PoC Apache Arrow
COPY FROM/TO handler as an extension.

Notes:

* 0002: We use "static inline" and "constant argument" for
optimization.
* 0002: This hides NextCopyFromRawFields() in a public
header because it's not used in PostgreSQL and we want to
use "static inline" for it. If it's a problem, we can keep
it and create an internal function for "static inline".
* 0003: We use "CREATE FUNCTION" to register a custom COPY
FROM/TO handler. It's the same approach as tablesample.
* 0004 and 0005: We can mix them but this patch set split
them for easy to review. 0004 just moves the existing
codes. It doesn't change the existing codes.
* PoC: I provide it as a separated repository instead of a
patch because an extension exists as a separated project
in general. If it's a problem, I can provide it as a patch
for contrib/.
* This patch set still has minimal Copy{From,To}Routine. For
example, custom COPY FROM/TO handlers can't process their
own options with this patch set. We may add more callbacks
to Copy{From,To}Routine later based on real world use-cases.

Unfortunately, there's not much information about what exactly the tests
did, context (hardware, ...). So I don't know, really. But if you share
enough information on how to reproduce this, I'm willing to take a look
and investigate.

Thanks. Here is related information based on the past
e-mails from Michael:

* Use -O2 for optimization build flag
("meson setup --buildtype=release" may be used)
* Use tmpfs for PGDATA
* Disable fsync
* Run on scissors (what is "scissors" in this context...?)
/messages/by-id/Zbr6piWuVHDtFFOl@paquier.xyz
* Unlogged table may be used
* Use a table that has 30 integer columns (*1)
* Use 5M rows (*2)
* Use '/dev/null' for COPY TO (*3)
* Use blackhole_am for COPY FROM (*4)
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am
* perf is used but used options are unknown (sorry)

(*1) This SQL may be used to create the table:

CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
SELECT create_table_cols ('to_tab_30', 30);
SELECT create_table_cols ('from_tab_30', 30);

(*2) This SQL may be used to insert 5M rows:

INSERT INTO to_tab_30 SELECT FROM generate_series(1, 5000000);

(*3) This SQL may be used for COPY TO:

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

(*4) This SQL may be used for COPY FROM:

CREATE EXTENSION blackhole_am;
ALTER TABLE from_tab_30 SET ACCESS METHOD blackhole_am;
COPY to_tab_30 TO '/tmp/to_tab_30.txt' WITH (FORMAT text);
COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

If there is enough information, could you try?

Thanks for updating the patches, I applied them and test
in my local machine, I did not use tmpfs in my test, I guess
if I run the tests enough rounds, the OS will cache the
pages, below is my numbers(I run each test 30 times, I
count for the last 10 ones):

HEAD PATCHED

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

5628.280 ms 5679.860 ms
5583.144 ms 5588.078 ms
5604.444 ms 5628.029 ms
5617.133 ms 5613.926 ms
5575.570 ms 5601.045 ms
5634.828 ms 5616.409 ms
5693.489 ms 5637.434 ms
5585.857 ms 5609.531 ms
5613.948 ms 5643.629 ms
5610.394 ms 5580.206 ms

COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

3929.955 ms 4050.895 ms
3909.061 ms 3890.156 ms
3940.272 ms 3927.614 ms
3907.535 ms 3925.560 ms
3952.719 ms 3942.141 ms
3933.751 ms 3904.250 ms
3958.274 ms 4025.581 ms
3937.065 ms 3894.149 ms
3949.896 ms 3933.878 ms
3925.399 ms 3936.170 ms

I did not see obvious performance degradation, maybe it's
because I did not use tmpfs, but I think this OTH means
that the *function call* and *if branch* added for each row
is not the bottleneck of the whole execution path.

In 0001,

+typedef struct CopyFromRoutine
+{
+ /*
+ * Called when COPY FROM is started to set up the input functions
+ * associated to the relation's attributes writing to.  `finfo` can be
+ * optionally filled to provide the catalog information of the input
+ * function.  `typioparam` can be optionally filled to define the OID of
+ * the type to pass to the input function.  `atttypid` is the OID of data
+ * type used by the relation's attribute.
+typedef struct CopyToRoutine
+{
+ /*
+ * Called when COPY TO is started to set up the output functions
+ * associated to the relation's attributes reading from.  `finfo` can be
+ * optionally filled.  `atttypid` is the OID of data type used by the
+ * relation's attribute.

The second comment has a simplified description for `finfo`, I think it
should match the first by:

`finfo` can be optionally filled to provide the catalog information of the
output function.

After I post the patch diffs, the gmail grammer shows some hints that
it should be *associated with* rather than *associated to*, but I'm
not sure about this one.

I think the patches are in good shape, I can help to do some
further tests if needed, thanks for working on this.

Thanks,
--
kou

--
Regards
Junwang Zhao

#166Tomas Vondra
tomas.vondra@enterprisedb.com
In reply to: Sutou Kouhei (#163)
7 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 7/25/24 06:51, Sutou Kouhei wrote:

Hi,

...

Here are related information for this benchmark/profile:

* Use -O2 for optimization build flag
("meson setup --buildtype=release" may be used)
* Use tmpfs for PGDATA
* Disable fsync
* Run on scissors (what is "scissors" in this context...?) [9]
* Unlogged table may be used
* Use a table that has 30 integer columns (*1)
* Use 5M rows (*2)
* Use '/dev/null' for COPY TO (*3)
* Use blackhole_am for COPY FROM (*4)
https://github.com/michaelpq/pg_plugins/tree/main/blackhole_am
* perf is used but used options are unknown (sorry)

(*1) This SQL may be used to create the table:

CREATE OR REPLACE FUNCTION create_table_cols(tabname text, num_cols int)
RETURNS VOID AS
$func$
DECLARE
query text;
BEGIN
query := 'CREATE UNLOGGED TABLE ' || tabname || ' (';
FOR i IN 1..num_cols LOOP
query := query || 'a_' || i::text || ' int default 1';
IF i != num_cols THEN
query := query || ', ';
END IF;
END LOOP;
query := query || ')';
EXECUTE format(query);
END
$func$ LANGUAGE plpgsql;
SELECT create_table_cols ('to_tab_30', 30);
SELECT create_table_cols ('from_tab_30', 30);

(*2) This SQL may be used to insert 5M rows:

INSERT INTO to_tab_30 SELECT FROM generate_series(1, 5000000);

(*3) This SQL may be used for COPY TO:

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

(*4) This SQL may be used for COPY FROM:

CREATE EXTENSION blackhole_am;
ALTER TABLE from_tab_30 SET ACCESS METHOD blackhole_am;
COPY to_tab_30 TO '/tmp/to_tab_30.txt' WITH (FORMAT text);
COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

Thanks for the benchmark instructions and updated patches. Very helpful!

I wrote a simple script to automate the benchmark - it just runs these
tests with different parameters (number of columns and number of
imported/exported rows). See the run.sh attachment, along with two CSV
results from current master and with all patches applied.

The attached PDF has a simple summary, with a median duration for each
combination, and a comparison (patched/master). The results are from my
laptop, so it's probably noisy, and it would be good to test it on a
more realistic hardware (for perf-sensitive things).

- For COPY FROM there is no difference - the results are within 1% of
master, and there's no systemic difference.

- For COPY TO it's a different story, though. There's a pretty clear
regression, by ~5%. It's a bit interesting the correlation with the
number of columns is not stronger ...

I did do some basic profiling, and the perf diff looks like this:

# Event 'task-clock:upppH'
#
# Baseline Delta Abs Shared Object Symbol

# ........  .........  .............
.........................................
#
    13.34%    -12.94%  postgres       [.] CopyOneRowTo
              +10.75%  postgres       [.] CopyToTextOneRow
     4.31%     +2.84%  postgres       [.] pg_ltoa
    10.96%     +1.15%  postgres       [.] CopySendChar
     8.68%     +0.78%  postgres       [.] AllocSetAlloc
    10.89%     -0.70%  postgres       [.] CopyAttributeOutText
     5.01%     -0.47%  postgres       [.] enlargeStringInfo
     4.95%     -0.42%  postgres       [.] OutputFunctionCall
     5.29%     -0.37%  postgres       [.] int4out
     5.90%     -0.31%  postgres       [.] appendBinaryStringInfo
               +0.29%  postgres       [.] CopyToStateFlush
     0.27%     -0.27%  postgres       [.] memcpy@plt

Not particularly surprising that CopyToTextOneRow has +11%, but that's
because it's a new function. The perf difference is perhaps due to
pg_ltoa/CopySendChar, but not sure why.

I also did some flamegraph - attached is for master, patched and diff.

It's interesting the main change in the flamegraphs is CopyToStateFlush
pops up on the left side. Because, what is that about? That is a thing
introduced in the 0005 patch, so maybe the regression is not strictly
about the existing formats moving to the new API, but due to something
else in a later version of the patch?

It would be good do run the tests for each patch in the series, and then
see when does the regression actually appear.

FWIW None of this actually proves this is an issue in practice. No one
will be exporting into /dev/null or importing into blackhole, and I'd
bet the difference gets way smaller for more realistic cases.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Attachments:

copy-benchmark.pdfapplication/pdf; name=copy-benchmark.pdfDownload
%PDF-1.4
% ����
3
0
obj
<<
/Type
/Catalog
/Names
<<
>>
/PageLabels
<<
/Nums
[
0
<<
/S
/D
/St
1
>>
]
>>
/Outlines
2
0
R
/Pages
1
0
R
>>
endobj
4
0
obj
<<
/Creator
(��Google Sheets)
/Title
(��Untitled spreadsheet)
>>
endobj
5
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
792
612
]
/Contents
6
0
R
/Resources
7
0
R
/Annots
9
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
6
0
obj
<<
/Filter
/FlateDecode
/Length
8
0
R
>>
stream
x�����Iv�����C��$
{pS�����-��
h��X��aaw �d����}Wf�s�9Q�Tdq���'�DV��8Q�l�6�����bj�����������y������u�um��������������~�ix�����_e�V�ekt���?7���~��o��/���O�$����=��O�s���DVN	�����el��_]��?������o ���_[���:N��m��u�f\�Ws7�72�F�v|L��@4�}>]��������rJ�z=��������������y��j;�������6�:�����C�m������V�)ZYz�t@x/& ����������~���h�������y-}�	L8�V��g���a��Y�hg��H���������&5��^�zof�:jf�����S1������sm=�WB� P�
hS����s������6ud63m�e 	L�u�CW������m���#�Ay/& �����������W�H�
��`����������/���#�Y�P��	���/J������/�QGnC+;�p*&���3@�$y���5��^P@�Y���{��7������kKO^[��l�6#�K�
�3�6k����ee����c�4�����z2�������:'��Z/�N�v�\�WzV��)���8C��]���������)�Y����^q��h�����\|/��Z������6y-�����lJVn�(���@����SI%iLz8o6����@������T���/U����g�TRIw�[�m�m������n%��3�����EO�
�Eh�@*�D���x����>����4��<%+i� �������5���YY>�T���tm���_��!�2���iI�J*em�����������g�TRI�������F�!�Jd�VR);cv���q�o��C���TV���F*�������4-�5%+���z����'��ib�
�yV�O%��1������)����������-��A�����5����Y<�T�w��E�yib���D&n%��9�
>��s��|*����.��k�'�kfN�xvZVv����5<���������ge�TRI���(�"5{�lD4������6�}l!�`���8���Y>�T���k���������������w�8��cA��Q�6d%��������X�;�,��T��z�]��/�
4��SI%m���5N���X�=����T�����w�8�wShk'���J����V�����q�<'���17��>���J�[#O��s$w5+�0���o��JV�;���/k����{XY>�T������7����������6����3��-��t=k��J�7�����6{��d=4����������-�18�4�h �U��v��77���a/���vqS����������b��he�TRI����s����QK�VR�����"������J*�;2~\	�b
�M%qw��%}[���5��[���1�i�@*���,FC���n���x."�;q�	����{�s����|���g$�`�TRI�����By��95F���1��L@�J*ic_���S:�t��|<=�����6�V�����S������x��VR�����m�<��gOVe�
@���J�q��?�[�y�"���|�X	%�����j��1�@n�y�F+OSd��yg8���fD[f?�����T��������]�qc��HA>�T*6g��0#3�����R�)��5��d&@4��*����p�L�z����!n���J�6�^�N`x��+x����R�5��i���YH$r���R����*g{9����y����v�|*��5F�#Z�aFd���^V)k�x@����[��H��U���r�<�]�5�~��#
(���3��J*i[���omW��YySf=�����T��z����xF�O%����ws}E���\<��M%�y�!��)����aW���z2��
��J������e5�{��H�Ny�!�^o�g2e8��9(A=�T��{|��VD[f>�����T����y���S6����<��p�TR���_{��*|���y<�q+�T|S�gIc����(!��*e����D?�|D"7��3�r��.��(�<#���J���w9�H�Z<�m%�y"���������p���0�x*��M�
��} A����9�g$ o%�����&����-w�LI�~*�Tj�������g$�W���h�����T��1{��� �J*iS���h������J�T�~�eJF�X�y6
FPO%����~�&X��<�5��X���2��O.���~w����;O�>\?�U��qp�vs����G"�p�x�C	%�K��{��p�p��T����N<������]<�����Ov(e�Q'����^
���h�2P����BYk���p�}xSi)h��JyS����|@�H�\�R�
�Nb�e�7KSpC�S���X�P+7����- ���R������z�������������</����U�]��-8Z����0����-e�U0x�e�<��m%����-�����-)��(}
�pK��wS���Y��O|$r'bqr@��=�	_��Z2{����2��������O��Ioj��,����'��9�j��������O����,����&�-��T*���/�%����������?�����������O�E��������o����^�%�����q��t��^l5*��;����uo���*�oN��'�W�PiB%[�BK�_��[�e�J�X;,��z�Z��^h�zXz+�^x���p�kvj�:�X'��+�^x��^s�Q�V���^R��k
������>)��_x��/
�k.+j�����}�	�^���{�'�A��O�@�D��-��3��x������k�j�D^��~����@�k�0�]���@~�	���
�y�sz�;~/<;��^
����O��7h^���^���p�+v/<�~���{������q���k���q���W�/<��k��F�u/|���C����!\�E�������{�B�n��F���|{�i���+o�1�i��\E�����.���b
G�Y�s��R��n�z��v�RN�=�~���agG����et��Q�xa�jv��=^�ZF��!���6a'���c�N����2:�#���0x���K�J/^-����z��W�������m���aJ}����et��R�{a�j���_�ZF�.u����a�K��E;i�����n����W���G������2�k�I�B����kc�-_]riC��������,?}�n=!~�Z
Ix����C�z9�$��1~�A�53�X��wc,�'�����]�1�_y����^��g��fF+�xG�K��t���1BmC:��c�����/5��7��#"��Q�:���lc��V3#vrt��+{������~b�&B��������gt�V3#�s�����!����#�g�3:}���92�xe?������#���e?�����:�s$���~F�o53�K���i���Pb?Gts��/����B�>79pM��'@}<6cnr�H��I�c; �Z���� �"a�%��b���H���WS�\A��T�F��$������XZ!RM%���Y���y�j*y����:�F��TS�seW�����V����5b��uz1���
��}{��������
����F37�Q}��/L���{3������������e?#-�zvpF���i�\gdg���q���ufvpF���p�\geg4��qC�)�?v�R�
z=�����=���:�3n�0�� �T�\������W���5�7K\�������t���$��j	xX��$��O��TK���
$a�|$@���y��#���7�F�Q�<@��u��7&���y��3�X/o4�\S��e��^�hY�������c�<��RM����5���q�<PV����VS�W#�\gf�f4���L���{3����&� RM���e?��7�����g�������z�3���ufvpF��y��:+;8�Y��<`����y�^��<t�g$��(u�g���L�!+E���]�^}�W8(��}�5�������i���H �f��u"�<�"�o&�z��
$�<��@n&�z�	EGR�<H��{IUy@�:H���Iu�D���{IP�Uy@�:H���Eu�D���j*Q���]�:�W)����}{��'��K��Z����uf6nF������uVvoF�����:�r/	��g�"������g�"�����g�"�A��$���=�\geg4��=���c+QX��~�<xEK/���
��=�\g�Y)�`I���^���!��<@}�2��i���H �Z��O_ ��k	D,>o|a��'���J�K�_�\	�d�"��<�� �T�<Xb��"�:H�TS)�`�)���� RM���%f�/B���j*Q,1�|r�^��y��\�E�uF��R��< r������>�< r������f�< ��'�2�����!�A,�-E,1�|r���Q�~�< r�����~�< r�����~�< ����Dy��4�E�uvpF������u&���<�>�\��7{eM
����< @}<"�[s��q�H�I�������I�:������H���H�TM��EGRA/od	`2J�(;����F�VS��eg��^���j*y���:��YXM%��]Y�zy�m��������uz1�����}{�/�j*�ja����l��F�1���uVvoF��y�$@��y���g��F=;8�V��<`r���Q�~F0����hT?#�\geg4���L�����"������
���<P���^�h�Y�� ��`�����W�W�\H�+�F+���V��BO1�z_a@-��$b6����"�z9�$C��m��!����:1�F_������m��!����:1�F_������m�����f�[���{q^/n�H��������kf��N����_��fF�d�
n���y����4�F_B����4�F_����i6����"�53b?�lp}�E�kf�~���6��������L��m��!���c?�lp}�E�kf�~�{s�2b����c����������+;���s��6J @���*	V�#	��O0uTK`���Q$��j	x�X��$,. R5%�Iia��,������XZ
�T�\A��u,-���k*y����:�F��5�<WPveK�m��J�+0Z#�kX��*y�����g�"��R��(��uf6nF���&�Y���jf����<H5�"WP����0�����g��\gdg���1J`r�����~�(��uVvpF��������J�+����C�~F��R�~�(��u&���<W�������f�pP�u�����<@}/Ayq*$��@����By	D/Ayq*$����5�#/O������y�	 kP!:����u����� �\	 kP�:����u����� ��o+�T�<0�5b��uz1�R������_OY�
U����� d
*T���D���{3����D���5�PU?{�N���U?{�����W?{����hT?{����hV?{E��V�<�^���y�h`g���=�\gbg�y0��E��o����x	��+SQ���������N�8����x	���S!ay@	�����N�8��@L�u����x��T��YL����X0��%�$kP�:�����XL����X0��%�$kP�����S�m��������uz1�����}{�/`�5�PU#�\gf�f4���L���{3����&� &Y�
U�3���uzvpF��y��:#;8�^��<`r�����~F0����hV?#���c+E��c?��7��y�,����$�R���~Wp�W�����N�25�����%�/N�� �^�:��TH  ��%�/N�� ��u����x��T<!d
*DG�A�@��BuR��� d
*Tg�A�@��BuQ�Q�m��J�f�Fl��N/�U�<��b����	 kP���< r������>�< r������f�< ��'��A�������uzvpF������uFvpF������ufvpF������u����g������J�����=
���:�����L�!+E�iF�����+����5����Y�:my	D���y��\������!�`���$<���"����`�n)�`�y���� ���"����`�n)�`�y���� ���"�����V��Dy��<�E�uz1�R���!���J�Z����uf6nF������u�kwK�k�\���	�v7Dy��<�E�uzvpF������uFvpF������ufvpF������uVvpF�����(�?v����!���u�g�"���CV�U��v�l���*��Je�2VL������R$$�UF����D���V���@�ftG�2b����$CkF�*#�|Oq��%'��UFL���o9J��c����~uj�\T�V1�[��.�(�~U����U,#���f�Fuzq^/n�H�������)�DO�zD�Nuf����&���F}(�V�*#&��������UFL�G�WJ�����)��F7QBI�3V1�;��8(�~�*#�|��%��Xe��?�_��@I�3V1��g�=�d�~�*#�����x�T?c�S<�[�������7
��
'�0l+\�i��xKU<��I��y�>\��F	�@$��<U��@�K6!mO-����#� -��IF�se'���0B��J�+(;���E�7�tK�+(����E���tK�+��E(��RM�����"�:�W�s������(�U���%d�g;gN�4��1J��|]%d[C���uVvsl�)y [�����xY�sl�(y �������cS<��J��s���[�I��>���������J�@6e���\ge?��B����n?] �9���<�t���������� ����d�4���aMMa�r�iy@��<�TE���- !6��
�HX@b������H���H�TM��EGRA/o��,��y���X/o4L\S��eg��^�h������.�c����pM%��]Y�zy�m��J�0Z#�kX��*y����g����-�ja��n��on����>F������-�jf��n��o_��P�o�{��O����g��n�����R�~F�����o�-��g���Y�o�����~F��s��K�
E�6a�����Q�~F��O�wG:d���}��]�^�V��p����k"|3���t�8� ���n���� ����@�A*8��`O���R��I��  �(EX��u�����R����Yy�	�j*EX��u�����R���]Yy`~[������5���q�"���y�	�4�y`e������-��c�"�Y���jf���>�c��!��
�"�:=;8�V��y��Zg{�6����=tS�l����F�����+�������~�<�}A�
���<��/B�3��3�����)�m�&���A��l��+�x&�0
pM��1��*�6ny@	��L�A�D���KO�<��@��'@�jJ�(:�
zy�nd%���X�zy�a��J�(;����F��5�<Pva�����k*y���:���o+�T�<���]�:�W��e��=�	`5�z�0���uf6nF��y��:+�7#��e7���]^[6�R���������w�����L�<;8�^��<����}��[�����;����Y��<����=L��<��v/B��);8�N��<�}S���t�J�S�$��+�J)�
pM�A��j�R�NG@B���}*;�@@���<�|���	O���R����!�A$���)��/B��H5�"��_�� �T�<�b~�"�:H�TS)�`����P�m��J�S�/_�\��*EL1�|r�Q<����=�\gf�f4��=�\ge�f4��=���	�v��<�b~�"�:H���y0���E�uFvpF������ufvpF������uVvpF�����(�?v��m�~r���Q�~�<���'�]���B��N�#x���s0��i����:6�$���[���e�a���:S�5�<P�gl��h���R��fe��nk�|�T5���
�G��-��Q�2��P|1��f8LR;���
�g�(N����s��/"���Ejg���*b��
�\�v��KL��G����Vm(������������L�0�Y����9�"b��=�9�?bE��|��T;C��
������b������Q,�c�}�2�!6�R;���
���{��b�������U,�!����T�C'��4~:�.� yCl�N?CO�y���5�.����i
{����A�Q.�:�=����� x(Lf���c~��p�:�$��A�4A}:
��U�V�2Eg�N�d�]����egU��LGa�����*��W�����@���h�b�s&jT�/�����@Y�#V�2'�v�4��)?�#dw�*%���Eg�������(W8(PV=��LG��)���q��e:J��U�c,�Q�p>��z�`�����e��X	�t$�s6G=��E�(E8PV=���LG��=�a��������F��]�����W��=���7����'��/��q�6z|�)�I��c_�i��M�N�����an������*l�f_����W�d_9�f�s���_:�e7�R��
���c�@d����!#Wg�Ott��8�t@����|���x��?�_����vk�����e����>��k7�m;?�|������������~��o����zh���_<���?����>�����y��_?�������Bs�qs]�)8l�����__[�O��v�=���c���j����<�����V����O��r��H�O�������o*��a-���U��?�u�'����yn����	h�S]����i�������t�nyC��x�izU�}��m��n��������x��7{��j�q��������
S��+L[,�+����[k�y�m���1��r
�a��y����:���T��z����r�]/���C��?���?~��_?�Wh����>)���yW�z��������Ny�_U����������W�?]�+O�5�_S�r=��:�m�3k��]�<Uj�|��\/�K���u���M��E,)_��������:�ex�W�*���o���y�6~���{\?�*�y���4�+��P�y����XV����_V)/W��K��?�����������Vy��8�/���uL�����)G^]G��r��}2�E���$��sH}���f���]�~��5��k�T���c�������TX�k���>U��W��������*��Rx�Q�����\�i�������V�U;�����c�����O����v��O|��U���tTJ�O������8r� |>��,)���u&��:�~�+��#���]�?��<�����E�7/R� }M��)u|����tJJ?�������T�OgS�`�����S�w��'��*�����CJ�Q�ixJ��l����*��{�T�sgS�x��C�����^��	{J��3��j���3�S�&���X��vo��x�X��~��lT���T��U��[�|���#�
gq����7"�����i?��Ok���I�}/O��M~���=��.�
zf�MR{s�C����g�V%����S�U2�=nk���1�_���zd�u��9����3�����lx�n����)������

�C��-���u����Y��Ex��7�(����~�M��W|R9���*���V�����O�oz�t�W�$O�W
>�U�����Q��Q?��u��W� w	�C�� ��*s�,�
���ixx�_9����3�����lx�nwS>�����:��f�:=�u������ExjL����u|�����v
�C�O�O�zn(���>��*��]�h ���������*����/F^�<o����*X����W� w	�C�#��yC�:c�u�c���{3������k��|w6�U�{6�j�1��P{��}w~�u��q�AV{K2��P{��;�6<>��*���o^��_����sI�U���Zm��M���t�\��zyi�W�$�J��+2J�T}a�U��v'��l������p��G^�c��m�;3����#�����5��r]G�u��~��^w��u����:;�:��g�O�"<���G���*��m�beO=\]}��l�iQ^����;�rr�U�I���8���b��;p�^%�|������e�T���o����7.������:�>�_?��=�J�|~�u�O#����L���G�g��P���;Y�_�������P�y_�pv}����-j���}J��Km�7��������n�����JV�_Z	Vp�s�J�H��Q���"�
>�P=���|�'�s������O��U>��k]����1G����1���CN�X���C�F�����������t������}�W�T1�����=�O������d�r��)��w������>+��?���Xg��.[�]�����Sj��KF�P�6$b��������<�+6�/JN��6������X����P��y�]�X>�;������b�;��|���u�|�����t������\�_=t�~�����������_�~D�����V�s�Gt+�_(���8V�V���������9%�Uy|�����E"%�������d%|��GDG��k������?jo�#:���T_C�M��)|W�+�b+I��=��b���s�}C���\,*?�\�XV~>;�{���T��:����W��xF���=�q����oridW��~�[�X��
�O���H��s�~~6�
�����K>��\�uE��.�A]�#�8|PW��\�������b��tWA��^�U<��!����2������+{p�_yz���mW����v�~��R���~�X;l��:�~�/k����*i��yW��G~���%�O�����*�����W�$�����t�U/!��*Io��*�F"�Jgq{�G������~��Eu�Cp�����*+�q��c����1#����c���3x~���?�A����R�j���C��������]�O��W��:���Gn�l�����>�q:��?�?��\��+B�>��]{�W�&�+B���?W�0+��`����y�W�#���Fx,���G2^���Fk�P>;�*+�u�_������[g����G<��X5=���R�c�t����P{��?�"�X��/h)�����{�}������l��S�J>y�^��U��������J.�$K�W�$�Od��*x���~Ky>=�U2��������**�v�^wW��������Cx�?�A���N�6���P��~1V����k?���g}��qeT��Ex������u��i�D�j���O��
U�&���z��Up������*����\^�|���Dx,�����`�;�WQ�tx�O�WQ�����|v������k��8V}����>B�X��g�jk�OH�y]��u���P�9��>^�gq1�]`x��y��j�j�o��}�&��`����5��?�����5J&��mx�W�#��R�u(�%=��\x*����**���3���|z�u��G������8VM��������v��}
����'����X�y��W���W�,����yk�r���%�<W_�{x�l��z���Ur�����xxK������*���U���c����ND#���g�l���Gu_?��-����#$�����Y���q:����c����t|j?����c/�8<�~�G������C�O������������iT.���xk�W����+8�K�b���Q��S&�����gmx�J�o.Tf#�Q:��1��F�G�'_���V<�����g�`?@VT>;++����s<�c�c<�u?���B)v����qvv���?&����c���ze��iT��x�!��������Mg������8�b��O���;����}�L�C�/��{�)�#h
���� �rU���
���1��X���S��\;��{�Ky2����)VT>�b�s�������Dbj
endstream
endobj
8
0
obj
12350
endobj
9
0
obj
[
]
endobj
10
0
obj
<<
/CA
0.14901961
/ca
0.14901961
>>
endobj
7
0
obj
<<
/Font
<<
/Font1
11
0
R
/Font2
12
0
R
/Font3
13
0
R
/Font4
14
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
11
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Arial-ItalicMT
/Encoding
/Identity-H
/DescendantFonts
[
15
0
R
]
/ToUnicode
16
0
R
>>
endobj
12
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Arial-BoldItalicMT
/Encoding
/Identity-H
/DescendantFonts
[
19
0
R
]
/ToUnicode
20
0
R
>>
endobj
13
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Arial-BoldMT
/Encoding
/Identity-H
/DescendantFonts
[
23
0
R
]
/ToUnicode
24
0
R
>>
endobj
14
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+ArialMT
/Encoding
/Identity-H
/DescendantFonts
[
27
0
R
]
/ToUnicode
28
0
R
>>
endobj
16
0
obj
<<
/Filter
/FlateDecode
/Length
31
0
R
>>
stream
x��R[k�0~�W��{(j�� ��1�a�����f1}��/��]��O�w�x�<6Z9��A��H���0+��`�t�R"�p�Sx���(��v������I�����Y=�awQ�j%X��d��m������#I���y�gn^x$�u#�^�i�9����aN1�$���\�!�1R?��E���>A��������_����$	M�<�<Ly��P�����t����[��T l�,�%������9&-/���y�j���W�$���ay�	���e���28�}E��
TU�N���Kx��8X�[��2Ei8��ff��+z�G
endstream
endobj
18
0
obj
<<
/Filter
/FlateDecode
/Length
32
0
R
>>
stream
x��}i`U������zI:�����MBH$$"i �Hd��"a�vGawP��ApT��qw�qqAWH������6���?�I����r����s����V�D�����|�U��{���I�&�qxF����'O_4)����D���^�2q��w��#j�LA�������@����N���B�u�`���c����]�:�'g�]8+���2����g��8����Y��Md���d�)E��$"�S�3A�S��E^p��o�o��F���u�@���C�i-��9J_�Z�B7��4��V�gO�YT.8i���0I?A�i�&��qz�*�f}=�'%S?�C������Y9��8�R)
�����m&�K�$e���p�Yz�_�q�R�e4�FcLb���?Y��O���G���"�����z>���[�����_u�����I�4��������ife��(�XJ��	~�I���w�|�Ce4�y�^�w�c���d�����f��<YO��b�m�
�g ��:ZJ��c�����.�t�b�	�:a������^��X��2X��
gS�fv������[��"e�S = ���%�/}#�����lz�^�O������������r�9�������h%]Kk�Z��s/m�m�����}������uc�X1���������g��Wy-����$�T����$��C����A
���	����z�����n���p�U�D�|�L��.z�������98g�Gc�d�YG����6�
e5l2���U�&��md�0?k�h�d������-86s��.����N�3�'��|����C�������?�����+9�i'eJ���hi��PZ$-�v��/H�2�/F��s�?���G�W�/���r�r�r������L���������UR������5�*�13�=��T���3m��G���{��c�%������.%�4�n�w�������
���������Y:K�q������l3�NZ����r�B~Hnd��We�����k���!?����7B�i�����U�MO�}&��u_O��?ug������K��XVBWa�4��y�~�X��GQ%k���^�<�d�h%k����I��C��
6��q�H��-�>��k�y��:���A���H�I�x<�Z�<J{�^����h4���%����L�Wz�}N{�Ry�4�\�ev-��nj���6�K{���$�!�������]�n��k�;�v�i�R ��������A�
��K#���=r2��R��9���v��=����P��M���6vy94��t%�;�Zp��e� ����>��� R;�N]����#��������_I�K�{�,�Q�=?�[�.��;�x�;fu��h�i��v��m�����LLp���j1��(��bVM
V�QN�������������;��g,�6K����T~q���(����%'�(���5�d����;���<n�K�w���B��RO���4�r��F$=5�eISJ�~V�.��/��������Y�y�M�v��=V�6��N��=����,����9���xJ����R1��Q6v����������N9~�o�g��<}�1^��3�����U��T1���'���u���y�&x&�]���V�>b�����\|2�B����Z�<7UZ[�4�-�k��v�7�j��.���huyFy��rt�Np1)�S	Mj��L��]��[<}=S�^U�IY��a���SR|�(���vD�'�_���[�f���[���s'_��)g���{L8�<0�)��E�bX;���2���=���Ty0��1�����S�P�?�0�o�W�V�)�E}���y�k�#,���W��
��2��H�p4	�#a�����r���Bb���x�N9��3Ks��}4�
��{�����bUo�h"�C�Bq7�K�'_�����D��HN�H��"��T����K�\K��3���h��eSz�Y��dO�W�T��r�����b�E�P~���p���JJ��O��\H����"R��3��dH���j�()�]������������R@?#j�B��0�=��{]�hxQk%X��#j���^�W��vm��]��n����b���y���������"+����/_W�ILa=!������5C�����5U4�kFT�s�������yU�D>#�7���[���A�����J=�#Za��F�`d��#i��x(M3���I�b�|pZ�4`g����`U^XO�`��JdUE`�d�I��$���2��$��}qc� �l���b*AX;�G�.����x0���[:r���9r�G��������U��f_��d�&�YU,�(�d�GE�&s�b����b��!��QU��Q��&q���D��q"iQ��:�9]1��>����$�9���kW%y����TR���Y�����u����]������������qEE��Z�?�<��j��j�����v���x��.�t)��I�(�|����6>�%+a����).g��5�6���,���c�1��[|�n[l~� �����w���qs��q��6.w.�u��*��ii�p�2�;��,������2�d����L���P.�(O����|h�7�[\���O
��x
K�m��%�b����v�������^oK��L�	n2�&OF^���)����!��>
F��M#�����+�������//�������]zG�Q9�tm���=��kY�s{�8O���m�?�rB�Fc�{0{=����;J=�O����M1[dst�l��'jR���*Irz�jI���Y}�L��c�+�l���a_[����%da�b�G��&g��$��[���igpR�"��]<P��PX$��j��=bQq�W�N�VF1��Z,�<c����.�0����<���I�=�WIw{��{<��1�H��a����h
<��+�HCfv�A�<�up$�sI
��g1.e��s�$m6fG�8O	�(��._C����L����Lk�bz-�JXy����vA,}�c�Y���/�E�5���x��@_��V ����R�RK�vY\�4*n�4C�j�f�55zf����)���I��t]�������{?%uS��)|���Q��J)���g
Q�b�'|)��|�fk����CI�K�lqd63�5().��sy��6L=@1��v���~�@<��(����JT��n��bc������DgRR�������X�vY�a	P\Q��q�9.��p����X��jM��6�]���ZPXRB
�������'�e����lV+V�b�`��)���X/���$���`IJ�U���bm;z�
��aP_�]����6��I3m����I��������Xb��n���
�S��$��m	I����,�-��+K[r�k
��.�P<�og/�jg\KF��;��"��!��B�bm"�Jz�X;E� ,(a����4�#����������Q�
3�v->�YPy����T�1��T��}s[[�%�9�.��������6����Kr�����<���Fi�����,o���}��+w�}��:�j����������"�Td��OR��WhJ����	��l��_�U3X��c4-:6.^������n�������\��NS9���B��5Q��Z
������GG����(�K,J�j��:gQ}�
��v��#Y��EHG|��&�dQY�'���D�������jG����C�j�c-�������
���^V2�RkYRl4.���'�Y���,�a�inkT���%�W,a-�k(V1���������av��n����T���1�������=a��g�+.��k�����5�gr���:Pw:�:���f�<Q9=�f�5��H��.��d�����h)�2�<Y^)>��-%����Fc������9,���fZ��$��*&�%��|i�nSfA�;��4�,��i���|J��f�Ii��B8��x&yi��z~_{J�1yv`#BTr���Tc�����^;x$vC��PGB5�_�#&��]f����qX��lgR;�u��*�NOf<NU;N���n�v�#�o�;������:�,�ss���9�����^m��\�y���V��:�f{���V<���/����mt-i�mb�v��+�g���q��nW��Ob4��{e�����g�\�8<N�u>k�4�19�N������b���7����S���E�F�br$::Z��*^e6������]��6��"9�eS�]��������=��f���"�f����=*�7��O��0XxJ���Z�I���Z/,
g�[q���%&���Wa�H��J�m~����m��\=�{����VU����?v�����!��5q���������4�<nXT.�q���4`rqb�cp�X$�]n�,M�
D?fW���UO���+�&����tkNB�u�U���Y�*X_��SRL���E�.�c�:\����*�E-fL����1rL��,]s+���,�����U;�d�I1�b@hil�e��U%X��f�9 ���D��Dak������|���;�o:�����_~0�%��K&\��	}�M�����_���|���}���#W��y�M=oxS�z-L�~�k�H�����,�u������P�Xf\A�$3�T	R\Bbb,��D��$�����!zPlgv��9x�����E��yi�M7�[bbY�y0Hr�����N����k�F���BY�M������!$dy��>5[(����+����V\�X�l�.X��y��9X��J�S=R��-m������/�6}t�������>T���;gO���������;?	fu^!������(3$!]!�MHJ	$E������"�����+�+�.�yF\FB	�������jM���JJN�X��>N��HC~�//:��P����,W���j��dIN�����,�k����u�p����8Aox�^|D
�W|m�{}:KF�,��t`��,�fuZ���c���8jg�O��>������>�8���	�|�t����4x~
ri(3%����kO�C��!�^���n���$�0O�sD�w8����%��~�.�����s��n�t�;��Z����������u+��4!mfi�����.�VX��wl������O���r6>��9��'���fX2>�p��e���k�������]�G{�fVY����������$[�	uyn������e��l�<j9l�-&8�2�L*'&eqU���!R���&�bR�d+�iU�Z�hp���-LB�+�2�}��|y�&���������6u��U�d���%F5KIf����a�*2C��>�Hud�c��j�%D����3\��E�v0b���%��?�b�����/�Sa�L,��4�5���0Oe�y+���K����|���������!�D?XL+�'��e�K�cY��b������p�+���O�i�s����G�=����Tf�4��_7�~M�������������s�Gk�R�l���=����A1���ii���	n�r�c��<��C$8X|�#�eJvEEa���)��E�`���1��*�F�Z<��i�hW[-�
�����K���k�ULSh0�!�*�p���������w!/d`#�`���L3t~"*
�d���J�8��j7��'U�*N|XF�)�}���F��Q��{�2&n�]�����]�\������Cw�z���C��?����M�3�]9��	����:�q�2#�x��m�����\��q�n	Z���8����N:��^��roo.���J~E�$���0vg�a���/�����D'�Mw:���iE���������h,:Z�wa�����1eE9����H��,��>�J�E�D3-zp�����r��|%g��U,�����M9��;����!	2�0M�c��[RLpM�� �a�#�����C�7]��E�V����v�vp��[SV��1������,g�1a��^�4.�����������e&�~���MP,N��8
R�xt���v��q����H��5	�i���	u.S?���8��,N�+)m\�
��&_��|�LOv����TI��.sb3��;0d	�;[\�`f�Zah\z�PC�y�=0a��������;��0m���=��+Kp�|��u���[Y��;���?���������s��\:~��MC�y�B�!���b��o�E��r��f�l�N��n>&.�,�2y�����l��k�%�����"�A�+�Ac�;�=c`�����q�p�E�8	�h��3X���KT�w/`�������B�=���!��q�a�;K��h�:9
Z�WrA��7r�%5]h,
�C2d�08gGD$d;H�����;�`���c�+��3�Y����v�O+�A$�+���g����w�7@%a($#p{�=����H�����%�����9�.J�"p�tC�V��h�\Zd[c�����������Q6�-4(������S{�:���U��������6���->�r�+��I�:g�n��2x��D��}�|J��p{�v�<����gkO�"8����&k\��Nx1!�BG?3����!jx0�;���g!.�p� �����9r_�����~��������]�#����Ni�NT�=�:�r%�ftuy]����%�g�_����Qu�*�u�L)�����w�5��V���(;(�����L�Y�:�.���-�6G�|U�$J��8[NlN
�s&��^�w�)��68�,Q�Z=�v��BXS�&���@X5�z�d	��
�=�u�������x��u����*�'C5��=�P�����0<M����L�s�t_������/|eh}��%����[o���U�Y���c����u��f%��a~�p�����|�'��6����/M�S���
��Q���KZ�r��
���������fCz���~6-_���c�����NGRrJ�S�@5Y�+Tn2��=��0�����V�����������r���S�8�)qU����	
G`k��^�R��ycG}��G��7�"ur���g��5&���<�lb�'I�����6��
���a�3���Y6�����^���[;�j���xq5$n�#���c���t��rZv��g<f�m��}�?��y��O���'x6m��yv��E�_�5�����=wL[�xo���RZ=&��;s��x�������^����q��}���3��j�� �g�y�_?��o���_�[~4����&��o�y.���m��RI���L�;�a�S�UjK_������+���.�E�](�<���.f��M�.�G`#�������&�e��E3�J�-�W����(�G�Q���8F���LT��Qhk�i'� }�GZ���!��t��E8���mF�4����h��{�te����N��6k�R�1t:p��yt��]���f��#\����������x"��D|�[0�M2���h�,���q��������1o��iNxL�Dh�W5�\����h��R��+�z��h�|9��#�|L���������<���I�|D��z�7a.U��P�t�z o����������+Zo���!_W����n�����	4�;�|L)���3#|��.���H+���bG������3��+��B�s�����3�3e��H�i`.�H��~�~m�	����F���	br�����p8�<�	���@��7��$�Q�!��!��|@6����2d64�*C��=��w�����L�i	�xe>�E��g�m![Bf"���i���y
�j�b��j�����N����G=���@����|1���(�D�0W�K5�4#,�+"4��&���0�]O{�$��q���L~�&� ��X�i�r17�%��|�������.�
v�r��6���:[~����`��K�\!v\����_��`GBy�
4�����������I������-bO�_�.�;B�^���^v�y�#I3�5�������
�#T"'@e }����n�^��4���Y�KPp�A��/�&]+ ���L�.�����ymI����A�<�K����{�8�~6��h���W7��qzYD>/�S�X3��
�'�����8[��#�T�����~:N�H��x���oI/�gy�'
=�����m���x�eb�`�.�}�nL�M���
�3�������G����Mg���W���[�,|B�W�sT�BfC��HW��E�d���8?M����Hj��i��=8���:�����s��>i��t�
Ze�Kg���q�Pp&J�:h�|�~R:	�u��g(��=�^4��=QT������Oe�Qy�8�7D��X{�j��]��(},�G�������x���S�Qw�~�hK������x����R��0?*����a��im�����#o<�S��+�q�w6}�:�&����t���q^�����&H�B���x��RF
�+rK������V��N��
���c������>���8���������
-��E�G(��J���G2���ga�]&������eB���_��������S��2�]��S	t�P�N��h������[B���	�1v�:���.i�
�x��?�<���5�!���r����r�s��T�~��R5��CW�������'U�K~#���������.�c��k��GCy�zTz]�dF���`��?���G��J��t=
F�w�r�,��������k-��+��4���xt�x1��q���$��+��6�E=QF��
��w��
mF�������n��i9t���}��Y�h�<K����rU�_!��X?���a��
�v`�QFi�r*�JHO-A�U� �����@��?�Cht��,n�
�s�
�G�ih������yo~N�K���:�!?�@|!0E��/���u����K��c=�?ky&��4��@[�]���#��mAC|����Y��gf���.���:�X�e��>6�Q�v@H/~!�����g�.���Y������6�Q��qa��o�������u�=�6���G�1���ve*7��2l�9��KqnL�?����"�DQ-�X^���".�<�����.���-��+�����/����V�������l��8o6~$����
�	������c]�Ky��?���N����dE�4���'�A���i�h�
]n�����Y��=a��DH���y�i��"�������4�F35�j�9��Mc|�?"����F��������d�����a�����f�FK����+��������l�P�a�K�/,C�����=��9t�P*���-�&0[�B�e���8�4E�������p�.�6|���� _.�7G���+��Uyu��0#�~����P��0��^�����f8�%���r�)�>X���p��
�j����y�6h�/��Q��F�k���@�%����|������?
���$��lr���U�K�'�n�q*�	��ZuMW{�h�r%�������S����a������D=�g};J=�4���z�z���/���b	��������������7��Q=,��wB�,H�n��=^��}?�salo
����o����7����~`��(;.�X��M��w�@��@]As[��f�D8=�%�.h��@z�_�o���q�VzfK =�a����%�����U��+���->�o	����qj	�j9���!{,(l����~���P�����T�a$lLG��Q�"�e���/���gPf�8�+(l�������tP�r�g�O����AE�������0�C�Q?X��>��]��c�������z"�F <�������D8:d�������"4�AP���5��
x����p��]t��z[ �Cc�1V�e�r�O����9��`��=8����tZ��RA
�+t�*��fg�s�.��j%�f~Z1l�h�+�K����O�v�O�v�����s�V0����=Ck�����-�Q>7����/�/���I����b�����#|���P�)kr�6�E�j��OR�T�����PM�W�C�L�S[e	�3wE����L
���m,>�3M�������D��=z\�F�&�&��q.��������I��5!� #�
�<�����1�0l4����P%�/��x���������ZZ��S�r7|��,�
��54��t����v�O������S�D>�A��F�.Ud��E�������!>��}����G�//��[�5;��Ma��M�od>���l�������j��/�'��%
��������e��P���L�@�afS�u�33�
�o�_����6�@�Q�a���V�%����N�oX�Eh>���Q{-x �f��|;��z��a� ~5����&�!�8�?�b�;�#�>�_bo����8�>*���g0�q0O�5���C�d����oA���W�������]�o�]^�z#��?�4�2v,�]�����-�����m�A!�5B�[�����uO�;vlU�G1�E���mZ����h����=@��;@�{�Y-��e��KVB��wla��{��o�D�vy���g�zgg��5�����w��nj�W�����W`J�U�.���P���w`Z�z�i��E�����	��{���*`�|3m7�'��{�	�{����������x���������as�1���Y��XL��V�cE���g�A���=��_"�ks��p����(��������o������K&�$L��n/������,5��?�Y�;����������4��,E�W���rp�~�@8z�@���C�O�7�A���X�c�T��[����#B>����%��}�,V�So�\C�~D��}K���Q������
���Y���w2&��kt�b�NxN�QI�0��0����
�^��'�1��C�l�st��!�9��^���;�T�V5�'��$d��Dt����*�������x?7�W
t���Ra/`�oJC(�x�r;�3�%������\����^����F��F~���l~[z!��������w(K�\!�S�Q�W0x*�������]$}
��	�/�O�
��
�K�"�B��e���F|#�i�<�8�����Zi%�9��t#=�����Ww������M|9�D�.)9>�8���vt-��~=�u����f!�-��A���&���uZ/���N���������P?C���0���Q������f�u?�G��P���e��,��(�2s��a/_B�+�8��%��_��+%��!���n���:�L�G�{����X�9�]��]���|F���]�W$�
}���~FH���&�BH+�X�tQ45�����z��D�H?�v��Ly=+~K3l�U�)��9����;PA�;3��!�Lv__�*��P�.j:���Upn��
d|�@��0�������lX�y���������x�5	������w������Q�Q�k��v�w7IIz�8��qv�4�W�*t��7�~_z�������Z!��OJZ��AS���]��Fw�m�Bn����S���}�e��7d�e>>�@
����l�/� S{��BN>�l�G^�:b>�fCn.���rg�C�������M��k=r���6�@m{��D����&!;qt���M�Gg���6�����,���z@����MV�����(�7�����*6t�ak������vw�bM!�o������Z`?^���g �'C~Ip�zy�kla���w����-W�+d���>���{P����J�Z�L=hf���q_�"���{�}�q��=�qziG�� 
�A@���������	�4����u�l��m6_��t���,�+���j�w�
{w�/b�@�O`o����F{���7��/���#��A-�&�{�+��`y*+��!�y"��b���;��>#��?%��u���[��V���hE+Z��V���hE+Z��V���hE+Z��V���hE+Z��V�������_��o��jH!N��H"��$��=#�<�w�����/����-������>����>�|;=
N2u�s00�P}{�zQ~{��4�m����f�}�C����!�%O���P�P��6t��gw
��g�{�o�O�<s��@F�[���Y��
)��b�P��{��>+�����t�B��������9�x��\���B�n<�G�g��,1����L�i�g���
�/���}���F.��0��|9��b�����]7��W���������/u����%��]����RW!#��m0Nfr:�(.��������WG�%�J��/w����tP����9�'Q�mD��|W��\���w��
�Y��'W�3_��G�I���]����g�r@�������R��|�/�u�kw���5�u����������RMv����r�\�B3����Y�`�1���W^'�j7Q�1WW�Wg��]N�����e	���:kg�R�m��nxW��C��]��\��G��K�P�n��n��n�U7x�
�����g��vs��j6�Mf���dv�?h�
�a�1��)a�����z���9
 �T�+��e�#��b����pO�Y���O_�����}��=�U�/�V��!���0vS5R�|M����KI������V5��S�������$����-*/��G]���O�']����C�*W5��KTD�#�AD7�hR[����;�V���������p��������{X���R{�l�H�rJ��+�4F9��#��#����M*�����QNf�r��.T.�M��'�}Q�4��(�-�9?�4�\���f�������x"m4���/6��\(��2�`���".��"��t
��T�����.�q��D�#e�EO���gb_��l���!U{������M�f�6�=:�����������o����<}��$��/oLQ~�T@�����<��Ll�Q:
����N}:�Y�^�e��f8+iy����lG8KCr,�h6�y��������6���������=��_2��j����}u��H�I�����Pbg$�DIj*��f����
�a�]�C����P�Qs��k<�A�G��0
endstream
endobj
15
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Arial-ItalicMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
17
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
0
0
277
]
4
35
0
36
[
666
0
0
722
666
]
41
43
0
44
[
277
]
45
47
0
48
[
833
722
]
50
67
0
68
[
556
0
500
556
0
277
556
0
222
]
77
79
0
80
[
833
556
556
0
0
333
500
277
0
0
722
]
]
>>
endobj
17
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Arial-ItalicMT
/Flags
68
/FontBBox
[
-517
-324
1358
997
]
/Ascent
728
/Descent
-207
/ItalicAngle
-12.0
/CapHeight
715
/StemV
80
/FontFile2
18
0
R
>>
endobj
20
0
obj
<<
/Filter
/FlateDecode
/Length
33
0
R
>>
stream
x�]QIn� ���>N#�3��`!EE�!����R����di���UEwCO�}gt����1�������K�'mHU��2|���Y8B�����sgFK��kL.�o��Sv�+B��B����Sq�:��3��p
�h�(���h��;�:l���a�m���*�H�pqB�fB������Q�������H8_���!|�9�c7����&���x�����w�5���q���Sqi�����}l::w���/��K���T�m
endstream
endobj
22
0
obj
<<
/Filter
/FlateDecode
/Length
34
0
R
>>
stream
x��}y`E�������=�'3a�drAH ���;A"9D� �� @����x�!���� �W�pWTYYt9����	!������g&����U���W�^U7��R��r��y���������������>�?�z%�����-�2���r��D�g�N�0�������Q&*BsB�A|!�)Sg�[x�?�
C�9�^7��	������oB���	g�5K���W��>{�����MG|)�c�A	:��9���������y������D,�����>bNf�3,�6�$�O/�',�n��l�P,]�)dg&R�J#���3�*�Q����1�����t�e�h:�B1:�����Mt�q�(j�I�T��L�M��edb�]�������7��vS�V����+�����f��J��:�2y^���	��^c����F�����t��$Qi�O7��h�7��7�&Q"�DU4������)b�)����{�8{���K������]�To��H��=O�����UF����M]/��1���.�YJ�h%5"7���h6�=�o���?�gM�h�����C�[�5�������X[����8���9����2u��4�������Aj��1����R_i���O���{(��B����Q3�-�%�4���,�.=!���'����=�^�@�+�3���</���m�m���K��a�R�`3�M�Q���e�x2���,~���R�4L)���J��7��p�X.�����)��qu�w��+m�V�������^�>���u	�A�0�s��%��U��E���}N_C������l���e����^��{��p���r~-����IR/�I�$w�K���y�|��+~��2=c�7m2�2]P"�z3�\L���w�w���Z��u�r�i�2Q���c���Ih�s���������s�;}AG ��t�E�f�O��n
a��Bvf��{�mcM�e�;��e����'�K��=�';�%�m��]|<�������?������C�]�?�OJ���-��O��G*�j�M��r���*� /��?%��_����2��b�4��2Le�;M�M{�>�*V%M�^�U�M��4���������C�c���(���������X<���
�&m��d�l9�BX-��(����9|��0����M�S)�=�J��j��0�N�+���2F��6���{0�o����Z'�����Y`O�tV:���������4��%�c�;n9O�W�O����MZ�w��r��0��`vWH�(��)�H��*f�uX�71�����4�G�!K�YT�Jq�\����OQ�Vb���h����:�YW:C^j4�A�����y�fG�b}0�Q���������/l�d��Ii�
��<�O�����n�k�����y��:A�������OB������/j��H��/�M�a�eJ1���a��w�����W�f����|�*]O��j��/�_�/�(�+��;�a����x�(�zV(� M�M��Vy��O��}I66O;��b	X/;`��ez���{`/^�E�vl��:
f��B����	�!�c�
��t����fX������b�>H�9�r�aH~�^G��13m���3B���ig��1v/�J��j��[��^1�R{S��v�z�Lki�L~�^u�t����W�������v�������J���������l�uHJL�����DGEF�[�BC����b�%�Q��Wm��U{�4���"����	��=v$����c�����s��9�
���t�p2���
33����`������@xU����9���a9M�� ����R����U�K=��O�-�.A}[��:�N���-�A!��u���b{3=�cK{n�d�T�xGI�'�Q"D�H��&y��U��$$'WffxX�k=�(���t��7�Q�zT��4����%cw�]M�X�
���4a\�G�P)�w��O��c�KQT��by�����:�.��������*Z�&���J���<�_um?4}�Ek6������()����G�cj��jLH|���/Jn��wo�/_j�Y�H�%8*'�$n����������s23�X�������Ln��C:��
oN&$r�x���!I��!�&���kz�
�J�R�I��i�������"]���R-{���;N�py�_��j9C"(��E���{\.Oz���/&2���y����h�l��G�(V�3c��,f��&7MD��tX�����rg�*=�Z����D�9K�9-��P�I���sZ�o�%&�tjO�����F~�G������j�����,f��h�����������h���"���~��i��� �'�o���+�O������Zj��`Q����j?�#Am�f���T0�+���L�jnU�I;%J��R1_�<=]��{]�L��Z	��i�l���������F���s���V�Nh��Nt�-�������.���~����O��*����'4�S�[1l���1�b�'�#+����.�������v"���[RE�.bT��*�Y�J��C�R=W���5M��4�?��5M�H��i�dq�)�a�D`�)|������q[�$�$Q�*��(���^��'`�V��l���!����/R���������/F2]�K�/�Mt���n�B��o��^h��{��Nw�/K�=���)B�;�JA��K:W��tn��8���lZPL���H:�}<�h����39������"�����^���7[?�;���D���8�%%Q���3J�RXJ�q�'�$�g'��x4���(eFf�S�,�I���5�H�������;�CXQ�3*��F<_.�Df�_?��j�R����(��F�d7J%�Q",�i�,9]V�[f�`��;4�Rw|���\��;�S�%�������x�;0��yJ	c�	nkzI��(o|,��u��=+��u-�oua�����<=�d��=}����'��"��9V5�����Te��Q�����.9TU��h�6k�ma���;%+������v����JtTlr�SQ����w��B�����'rcr���wg�z������{�s�������'G���+?,�4pp%c��O����SS��m]�a�����y���={�+{~��"���)Y���/�J|��+��]3
���3����'�������X��3`E�m�'�H�% &PJ4�����q���{��\kYn{%`[����_�� 50��,�"YdK���Vj2%d��0b�m�z�����!/��������
�,�;�G�9������'�����WD�1�km�Jv�u���mg0�?�c	�o9����1�JD�3R
8`
�����������l����b���5�2��M��;7Bq�o
8�d]e�I8��P�%�#�,�hO�U�s*L�:��h��N�9)���9-���C��pf�A���O�m����y��):)t!.I�s����N'	�Nr�0C����.�X5��E@�XUU�h�\h���E��!� @�X`6�0bF,T�m	5tM���b��&u7	E��n��������M��]�a����.;��G���6��o|�=��WV��c;��/����C,��g�������"����V,��8/�
rq����S��I8���(f�#�jo(���V�W�Y����/?�l�����}�fg����G3M�a��	�Ii��\��@��������4�X���	�;�6&a9�=h�}i���L�SaOE<�TB��i����A�!���%l���|������~3���}�{����������?N��~8���������oO��K�6���kp�;��L>+�q.uNOg�aK<��(�����tb���������hO��������]�r�%<<1))�����b�D�wH"�������C�,����J���%�CI,i'6��
����rG��X��
u���kuFxlR�+��o�3�Ts��c�	+uR�e)?�8�NZN"����,�_,{�gY]���|����(Xj����������\���i�,QM:	1H<�������R�.S7U��X��S��HC�`�Z�������&<���e����du�
��+���f���5����]�'�%'L�~)���nRE�u+fw_~q_����;g�;�|������,�Z����t��F�����T��-`�t8��`e����Ji!���C��1A��g�����-��7���oC"B���z�<J]��W�BB��d�BC�aF�����}�a@��w�^�W�0��$������UV�.U��z3f>T�����������|;�!�>��NZ��V�=�[�\���6��1Ms�`���u�j�(����]k7���3c������q{�[����;��6bt2a��ct2X�vrhG��BV;�R�`d
 ���
,Y���,wVy�)0��9?��������!f�aJ�qD����,u���w�${V����������������1�c���L�Q���u�k]h}���O���o��v���w|�q��'wt����D���bmVf�Y�[gYe�p""��T�FP�6��LfMR�;,BNO��d�����B�m5���dN1��<rZ�vg���49Wg�J,,%��p6x9m�C�#��&��<���,�Z��X{�1����'-b;p������~ ������n����-
�;��E�E1NU�ziwT�����(��DwK�W����
��8G�"+25F�q,!g�3���3���4��x1���L�z����:G�L�^�=��[?�~����l���C;��x��$����g�3*ftp%���Gwr��W-Y�4�g����)����^#n���g�;��o%�i-�����JwKG$��X��c�7��,�(�.�f�=Nf,L����Q�-�M�S���t��H����*��M��(�c
W�U�%&�������SJ��������"Q?5	�4N����|�>������������yc�S�'�<l��,
_��F^k^�AV*�Y�*K���c\��?�B���V:��������4�� �e�)YI�$AA�5&F��bH5�A��� �y)�!O

�DJM|���,�R��(��a�4��Y�)��32(��G(����Z�2Me��;�8J 3�B@;��r����J��������dw��S�~%���-
5<y���c�c�-�B���O�9FE'�'
��pyh��3A��c�L��W>�u��n�v�G��s���=�����S�\�!����G�G����������K�ye��!��VJ������5{�.
ONU��n��ew���'���Y���
�����u��v��vy���q�b�����Q��q9K���������87<�F�8	�����Xy��t��6��kh"0VM���T��e��[���j)�����F�G#m(�X^�=
��������@`��!�\�Q��:6�zt�]P�����who8�:PiM#�W��VG[�QG/��!}��z��F����^����?��N������i��:�'�����P��g5��X��N�z���!����@��z���h�����>�r��@��$��]��)F~&��C��!����!2QG���W�GJ�����F���G��	��2�6n���!�%\��?Pwj�y)��]���>oc�?��5�0��qZ��=/O��f�^���M/�q�������k/J�i*��+k�1����g�t��J�1~E��:�;����0	s^��:K����3@��U�8��A|���.�!�8�3�>\r���b�����^	a��b1�hs0���_#�s���;�v�y�Q@�^k����}������zzA��l�
�P�������B�W���M�B7PW��+]g�>�������WP������BN��"tV���[���?��{�����B�.Q��	Z$d�� t�O���/����:m�r��B��T��.?��X-�R_?���:E�Gt]�.��,Z��T������Y��?`�>�
�P�I*��L�!m���.Zdn�(��P�}�
}@@mf��V��	����qm��ff2m���g��o���A���6�h��?M���d�DS����i��=bM�'X`�S�7K�t��=`����QdQ�N�d7�4�����26�(���b���G#�	�/5�|5�V��4A��?�N�~�����2�k�K~����T��O�*}��������~�Y�
�>��l40��W����G������z�}�J?B?3��e[*�a���T�
��}6N�Ha��
������3�?�����4�������K����a��h���L5j�H��Fy��U��m�^��>���������\�^*�	���>j*�X���JW��f;9�}���Sy��+E��+'�:k<#��f'��E;
��~�"]�O��y�u���������i��}�}%���z�J��~�<��R��iB~5���� �n}���o����_�>4�������'`�f����@����8\/�W���5C��)���y���3�x��F���_��ub����f�k=P��R����	�����V������_��������O�X��c�����}86���lo9x�����o�����5J���&����m���7B'��;!�p����t*SN �M��g�GK���[�V�?i�4���������O���J�e��>]�B_�1���D�S�V�R����` ��>�O���Y���d��C�����]�������)���=���4DB���4�$���7��E:	�_i�b
�l�����E�|��������#r�K���B����P���D������W��A��c=�z�N"��+�_���"��z�V�e�C��x+��#�t��������W��"�nzV��[��r�zQN�9L#1N���kEc�|���>���F��x����Y�Q�����.�<��� m����wD�����c�g �`������S� �E�'���3�
�/����E����Z@B���=����0�.4��.`�1F��`����R�
�k�B�����?���������uN����_S�|�	m�w����h+�r�?Z���g�)T��5`�`�Rt�,l#��n�|T��]���\C/��)H�b��{�;S���C����K��-�r�	v@��A��4S�
",��N����|�2exF�x�g�"���
��v�W�g���Rt��",�<u -�Xu���j/������}1���b��_�|]O���;G�����~�����a�}�1����!�S���}�;O��a�~�)��~�<O�y��3~`=U`,��O�h�&��s�<���Y��8wM��/�l�o�4�GS[�jz����._��,�������`_YF�����1�������=o���K��Y��
�Qm��Y{��������#�_�c�V[����&�k�W�q�`�-�/�d��;������_�4���j�6�w�������Z����F�����uRo�>#����e��o�`�'00s���-��P���%J��$��V8�1��q�������~�A�Z������O[���z�-�j�h�;��~���|==���=�Q�?pH��7�~ �)���,�X�zD���b�*��ZZ���X��9�B/�K��k�;�cM�O������z%>� �L�4I^F��P��������! ��By6�']A7�;-q���/0�n���������;*�E�����Y��9zc��k������ZA�������,�t���r�j��d��m���gAw��
yt�r�m�4�-�.hj[���������C����=9~/=�-��� ����h�;�@���@z��@�����@z��1�-�>������G=�
�U�P�_|:�E�����1�<�-����7t#�Y�����0(F��;�+�:�`���p%px�a�j����@90
@��Y�So��|$���:�e���O����D��@O��
?�+l1�����fCv������U|�����3���m�w�����(@�~�-a
�;��8�a���=�{�q'.��=f'�3]���h�����g�i����*���#\.����H4W.���,�?��:P��;�TE��g?���c����H���!��/�	y��G�/��m���>���hOj��o��>S�u�3a]`5*=qZ;����7��M��<Z�;��:�k��."��Rs=�W?@~
E���E�1V�d����������������B�?#D{j��;���m���acc<�7`>A	g����������8���C��F�\O]�9^?K�|E�F����<|�s7
0��3z
5����/��A��=R9���f���C*G�����������~X��R��+���{��7S��R��G�Y^���k�~T���U[����+��?[�����o�����_�O��y[��I�O�;�?�~D��@?eVe?m5�0+��j�>So��1��M����=Z���O�wT�B�a�r��0��w�1g�:�6���;$l���ODX<��Y����~�]�������8;zqf$�C�z�#~�83��@K|������Z��������~�^���6tA�x�{�kX<+����V4���;M����������w�y��$��}���5]�������wO�~��E������6t\���?�>�{��
_6T�;7���gH�|O�'�������-����}�p��3�:������;�3�?@����i��e����-(h1�Q}�&��T�;�(w�����l�	��V�+��Y`[H����`U+�����
oRA���]���}�w�	���,����<_����!��������(s���'�q���\Z=�4d������w�����������${k�/���������n/�Y��^F��o��?�ru|��������@���wi2-���:��oc�V�]��/n<W�o�
�DS�:�4����@���3@�@�<�8���������l_���4�@EX<k^d�h?��} �FS|��8��Ss�i�|_V2BI��G���8�F�w�H���>��0xr<���W���& ei�/#�-�U�i��s�>�y������hy��2d���,�����p7��B�Oq�=
�{a�
���K��?Kx������g�b�t���?JU/����x^�s�������,5}F�:��]a'�)Q����?h���p����
��d�A��Q4��w� ]����%�~b@�I�t�qN��p�J�?����V������A�0:���MSaO#��o8Oo���Vi8����!���
�:Z	��F�rv5�K�����)����N��R��oq6�A���a)�Hsi�4g��&��@g�C�g�����	��������%���g��@)�{�i%�F��(�O�L�h������h|���e.~%�c�?>�]_2�i0��7�\�����]���E������y��CL'���(�S�O[�{���_��)�}�:�Q�����&���p^� �oX�+�w���gfb�
�L�v��������^kt��������Z*|���gM��1�]�Y�� ����Fj_���z���v��H�K����.��{T���k��A��]�L)M�A��Q�����^m�q��b���j�/�j��~������@v��t����<�U{C�
tE��D�:&�<�:��
]��J(S@s��8�M�&��2�Q���i��[WCW�H�G=�<���
I���Y��K������f���w�N�D������f�����C����lo�3�����?����j�"����>�8��\�Z���I�~1��}>�`�x�I�J�N�����wK��w>|�.�O��x����'���q.���q��|�/�G�*�g�=u��^��?����>��/��J�>���V�������A;����>}������<	�5`7��8y���t�/������[|������Pz �CZk���W��5��R"m�>����`�j�cD�/�QW=���{�oJ;Z�?u9��u��}�P���v���hG;���v���hG;���v���hG;���v���hG;���v���hG;�W`�/��OTHc�D�,�-�,6u��I&�ed�Ni������\w�4�����18B�����:m���GK�r=�0� �s�����LD�A�B�������G@�"|�4@�0_>��ldm��He��AZ�4��o��KvIi=p���]���yy��bP���S�p0���%�!_q�^< �kv�di������8~L�keC�j`}K���[����ho�����,]��X��x
������T;@/6�1��5b����������/�t��O��r�����j�]�(p
P��]l<�A�^��#���[bN��[���=l��v�Fb�|�y5=I�?�NT9��]�.�oV6�|��^�C��*S�|ia}��bP1��,���#^L����n@������o R���������3m�7���<�}�5@!�C,O�+<y�<��Hczn0T�I��S,�����O��(hH������~`�?���?1;3�P�����vU"�&����>�e���n�:�5HW�t1H�A�
�n���d�d��$� ��2H�A"b�`�	����i�4�q�8
a��0NC�!���i�4�q�8
a��0NC�!���i�4�q�8}#�,(f!%���9��~��3�[� ��)���D�]�������, p��G*jX��w��a�'@��fK��Y*h�'�l�G=��=��=��=������H-y\���z�.*D�q� �/�(���l�AFd�A�C@������1��@_�
 ��(�(;�x�l���1�1
`K 6��"����<���aZ$�����Z���H�dF6�����C�t���,�t4��
����zh�#�0��
��@&5t��\��)dBC�>b������1�4�
GS:[:�!}%�GdDCz_�QC��Nkl}�XM����@N��Q:��`;�l�Y����&�i����������l����E��NM���lf���|��F�l��������v��*�����K�h#������C��������6U��Y6����&��3�kl��o�U;�f��n���Rl���Dl�6[�k���V���
9l}:�5�Qs'��H>f��g������u�:fs���:NCE/�F��t�kbw�Z�w�n�Z7J����e�u.�.M�KU�:�uIj�9�l1�����f�Y1�fn&sT�v��!�Fo�"�Z)���������
���33�A����x��bOWY��
�tw�y��WUlalu�H�����&�=gG8�X������y"��ld���W41Y-nO�)�vb,��U	>ZY��blt��J��_d-��^���7��}��Kk����|�v��3��-_Et�u"Z'��$������JOW��*�<+G��Ul�VSZ���
RY�]n����"]n,��,��|�����A�j&��#{�Y���>�|��u#�t>�u��'3��e���d����8���<���g;O)�JI1�6�����wl\�^��	�,�����W�d�:K�%�d����:�]�X�
���"������\\:mD1++��b�����c��[�����v���	
rUz�� 6�"��R���P�a	cU�z�GR�=
�T@��+�zs���5��5#9����'�������P������7�JN����eY��v�55�\5�~������tZ��k����c^�<��)-��<*���(��6�b���z��%�H���I���% tBIe����w�<���?����5��2��/��,��)��&�����{��u��o��i��co���stn�^��3���U��R��������&��;��_�����`����A;�����I����\����bd��b5����<�?
�>�
endstream
endobj
19
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Arial-BoldItalicMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
21
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
67
0
68
[
556
]
69
71
0
72
[
556
]
73
79
0
80
[
889
]
81
84
0
85
[
389
556
333
]
]
>>
endobj
21
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Arial-BoldItalicMT
/Flags
68
/FontBBox
[
-559
-376
1390
1017
]
/Ascent
728
/Descent
-210
/ItalicAngle
-12.0
/CapHeight
715
/StemV
80
/FontFile2
22
0
R
>>
endobj
24
0
obj
<<
/Filter
/FlateDecode
/Length
35
0
R
>>
stream
x�eQ�n� ���C�_qr���T�|�Cu�6�]���}���I��hgv`���Z+O��3�O{�����N�`P���J�
�[K��e�0��7��(�����B7��t�@��������� nfk`�iB8�z,����v��l[K�+�lQ���\,�,�4>F	�m�V@���3.N@��|U]!���6���a(C�~M��t����>D����(*��(��[�v�e~c��[]���.>o�D����6\�����\1;�}
�
][�4\�m�]Ua�oe��
endstream
endobj
26
0
obj
<<
/Filter
/FlateDecode
/Length
36
0
R
>>
stream
x���	|TE�>|�������;I����YX��!I�,��	��Up#�����pWPP�t�6�e\�u��wEG���?U};�2����~������S�����S���bDF�H!��������#��#2��Z{�u��wuA�'"�_������s��E ��2m�������z��{��{b8:!����]7��;_�G�Q�����4�����h�H��]7�����\�e{P�]{���]�������5��d����fR2�~$��t����C�R�0>~z����075�SO?����J��H�S3�GvI��J'��ALE����s��t1�M���b}+�W���z���(����(�BG�/�Z�,��:P?�4�>����=t/������V���R1�/������6
{���n�������:Q����L����)�������J��z�%(�"t=A��)%��� M��<����&�a��C����W�Q,uA���Q��
�O�z�#K;�u�W�4�c�����"��%���Y8��^4���j�ML�"�����3��@/��/��/��@����R��eB����/P���0�q��ZO>��.�M{!���a���Y��Mdk�w<�O��������*S�y�Qd4�����G��	���Jv5��`��������V-��_�fSf�p�}��9)�.����}��Yz��w�=��l���c>v�}��x'>�������ie��FyQ��P�Q����0�0O0No
�x:�����t'
�gR9$z��Iz��C��'�������aW��Yl��=����a�`�$:�~����7@N��=�^��?�G�~�����NJoe����S����M�T/R{�C�1����5]ba�b�fz�tB+�&k�������-i���i���@t�M�I<J���b��D�F��I�B"Ke���V�*�`v9��Ma��Rv7{��e�3�������|��o�K�J�,~v�7��?���+i�G��R�(c��1����vHv��U����|�|������9�|�!u������2�u��hz��dz�t�tZ�Z���ekWk[�������������{K-Kf��s7������|+���q$�0����0��{*R��(�����5Vpj^���l7�b��W`���g�����b:�jX��Y���&O�m�F����
�gy!��)��`[����t/����m�8��ne�l!���v;����� v���M�LW�o~X}LG����-�O�t?f�)�;�#�b&�[X7�h�����%$��8���X�	� �j��Y����k���t�~���]����_�������zVVm���F�`�|-����]��[��U]Ich2�
��F����?�7�3�-��b��)�+���:~V��l��%�=��}����aN��r�����V����5���O�i�Nk���A��1�I�}C�f�Mu�<���^E��je/��D����;>��,���[���k����':�8���&�}�������&��XR&�jw�cw��g�=/j�V�	}�����u�����l4��7]N��Bo�d���T�Z���Ng6�:�'�W�E)T`��q��������ct�o���D�����h�86�z���1E��we/�S��������s�U��K���#�E�/.����O~����=r�/������K�����N�nW�����g�#�m�FEFt��5��pF����k������6p`���M@��V	5>7���.�s��b��KzQrj���`IoKIfsRaVwwY����4�����BxeiZ��w\���j�D85�2��R�����|�s���������%i%S���S}x; ��O��g���������,���/1�����V*z�S2�&L�U�*+MJM����c%��&�(m����E�D6��J|f��{�
�p�wo����Fk<��&O����L�mD{�n�/~���(*�)�Z�:7I�+sNw�h]�R��iXU��T�]]�:��3�k�����b�7Z�K��|l	�t���Q�7%�L��\����
H�Vwu
�&��G�oJ�'&zw��)��]7�*-�W��V=�4��Nu�ojH������^o�
�>�j""[�����,.B�[$�D��A!|�In��*
c�#�����I}P�j.�d��t_XIM���H�>S�-�]�A��{v�#E���@"(��E��
�<_�nBE�%�S�������>���N���A >��l'T����SS��h��DD|��U�n���'o����kDNS('n��Y�ia�I�&?K�i��Y2[�Ym���i}}���S��#�*���r�����yV,���%��bK��$n�x�"s��W�������T��>J)���g���OM=/O�����Q?!�$9�f����sv��Y��zQ���j&�9��.���r����4wy]M��F}��4�-�n'��7�����&�Q��"�W~g51����rP���
���e#�T���$�ld��3^R3��>yU;��xe*oI1��Q����Ef%��-���L��I��d�%��hR#��d>Ypc������L��,��y�7�Lj@�p�`�`�L��a�g�IN������!������a�i|��I�N�����q��4����r�Mh�F�_�Q�&�Gn��[qc����l�yk�����^����vT'�v]=�1-�*���h��zG��������ao�7�W�^����M{?���h�����F�����sn�D���Vn�"f�D��CCqJH�d?�!!����tz��!�g>NE�=3z��q4n��wD��ZZ'���������h���3�w~�h[f&�=x����~8��������=������������]���q������y����
������u&dF��a����
�p��umob�F~���0��0��� 3��y#M��T��SU5!|��Id\�`1����������q�����W����Jf��������#j��2=��;� ROx��A
+����#qg���k��	-%I%�%)����9����-Z���h���gIBI�%������82���2���u��R�&oM��P�-���#en��)�S>H���yq���R�-��b��s7���QY
�#j��5pamd��i���!�.bS�)���7�Q��z�6�'tM�I9����m��f��#PA�����1,��g��NJ�����~�$�([�j��,�������x��*o����$�������o\����aU{)	�X2�����O5�9���;&��+/3
���;�g.���������m��������i���	����?]2�g��K���^�����G]9�����~��g&5L,>Y�)fi0�Jf�+}��]�F�9yE2�������C�e�a���I��ag++�yjx$�,>�����E�7�to��H��\�##���q����c�xc7%�D��
z��pr��n���h�D8l��V�����^p�\�������D��P�<v���,���r�Fd�3&D|����L����*�
�����������1��=s�iv���:�f���]>����+\7�X5h������^�i��W��������8���N�����o��B�~��U�k�/Y?��k��8+i��'��\�B��L���6oWK�;"?�,fP�C��F=�QTXLtlLjtZ��,:��7xQ������p��[�2�����>K��K&EF4�1�HWxv8��d"�`w���9v�]�7�m^{t���m���"�P�bEm��X�5J�� �����]Q�,�9��9@�K�q>W+b'��0b
�`*d@�\H�����������<Q��^a-�"g����+n��3�0���c�3b����7M����j�U�u�r�n�N_xK'vS���V/]zM*�%�����>w�K��
��V/R�S����i�DK�)��xi���A��=:�wBy���S���#���{7�$���zR��E�9�Gg�k\u�<~��=���E��������������\�����_	)y3�O���r��s��y�0a�|)?��))�YO�"�J.tmT�79�(��d��31/���~N5GD�w�	y�"[R���^��C����a]"�]�#�+��,���84���@���a����:>��=�
�?#^�O�9����0M3��b��';"l�q�$�f���<Gb��m�?;���>���t(\RJ�����|��z80�J����P�(���:��$b!)vG|jf���f3�W^o�����c,V��/���{�����BI�|��fV>1���������*gT�dW��&=������������z����;�\���`)/�/��"9��<��_���\g��~�s3���@*��
E����wX��:��1�:=f��V�M	�"^�������Q���h������>�}�.���Q����a����w*�L��KMwX�'l������%g))O��b�yQ=#EJB�<I��y���J������EQ���\������ �of"��Rv�D��bQ�I�T{BbU�b������=�x'���5��x@�6<�g�L!^)���&-�X�C�85i��[^S95��='�
c��/}���1r���������K,����26�i$d7��'�dZ��������cF;F;��4?�SXXm�Ey_%/�o\^��Ji��q�	�����~S�D��Q�QVLEx|���L��^��Wudm����������p����/��Qt���FVR����M�3�1�9=Y�Ss/c�1�����-�DS'~)��|���K��,�9&�t��e�_5y�����3��(�p/����z��O>��c�1�b��3t�N����d���w(x(����m[L��w���lL�X�l �D+�qK�mG�k��G|~(�'��##���q^��8oTt�5����qJ����E�F�����kTLeTM�r�0d�HH�c=c�������S� �d�3YR�&e�8I����11s��!�)����L�,;.�D��w��q}G��5�����A��E���JuR���a�v�������h���S�+��5K'�@���1����PQ���HBFL���?^_CXx-N-��(DX�q��(/�%��Gy!,��f��������N�L�aB���3{	'%Un'�b
��x~�9{�8�d:��w��h�^e��c:+7��������?���O���k����������d������Z
�w����2+`=yO�6 �S�33��t^=-����G��*v��bRsXx�=.�A�!<��u��mczK�gG�����
N^�<���t��c�t���E�
q�D�K�/
.��7x������FL��B�IAAt�4������E�w�q8�I��� ��l��uCS_��]\~}��W�]�_�X�lU��c��^���h���R�\�>��`���{Q����<&O)�,��K*UE�-M�9)l�6��&�h�9��HK���,l�������jI��z��e�����PK��RBJQP�F��(�v@���(
�I������6.]j��o���.�Y��3V`�z>s�N��wV���9��:q���Z�f����4��1�a�������m�4l��s����kL�`�����&7K�j�uiT���GN�G�1�v���������F��V����Wj@���62�s+�'���.�aD����l�l6^�s���S���Wd_o�nWj������'�&�����S���!��W��GT��
�y��zS�����4����d�r
�A�(zD�[=��!���h�X$��bO���+:�W�^�|~S����/uN�����n��%���#{��>��sXY������=X.�oL�����7���`I�������'�oU��q���fY�Q6`�GD���!Tb�S�N����������$^``+5*oQ�:�b�rs
U�^�1�+�y�%J
%�O�(����,�{x�������@O`0�	�.70(��V�1^�#��t�y]�����kM�!���&�t�u'�HC�!�?�m�5?��jQVR�?�.E~w��1��u�J2#�nF���-����g����wC����t�H��N�\����1.a�g�����X�G������J�;�_a�@�J�	e
����B�%��I��h�/�tn��k
�I��(�8��om��,��R���?1�H��G ��������C�n��N�����E�g�A�s�B�Y��u4C9�9x��k��cH'���2����eP>�W��/�����>L}��u�_P"���F�o��$d��@�k��+r��<� ������1��f�D��h�Bm�$0������D]L��� �5d�����CR�������������>`��7�(e�~8��K}����!t��������1����X3��,�t���+tAY!��Bg�z	�-tK�L�J��F���b�B�Z�{MM4L�A��
Q��P�M�*q�O+����B.B��zk�������X#���Q�:t1DC�h���a�9Z[==FC��h��b�	�n�o'�0� l���Z��+�r(xjC0dW��U�6�� ="�z�wR2�i�~�D�
�6�@�E��5�h��{��;����T��1�u��n�&��X�Q���E@7��=h��5�G�M#:	�P�����|����8�BNH�]"��j��;F+1_w��(M9
�����Q?��Vzt�����
�k[*tF�]Ph��.`7����A���A�g�?�F+���o��7h�]!�l��������^��bo�]�-X�������}6N�Ha���*�����������1���
���c�aGv+��I��������"}����[{H�d�F]{V_�qwm�S���L���^*�$���>j����={X�E�r-�i7a�]MQ�_��*�����D}��-t���F����`�:�����E���"���Z�W���jW�����h�Ls����O�}�i�1��.[]NO���J�����)�k>���1t�3zX=�17a��I�V���m�O����Q�I��D@��u��_��I��>�����S{_�d:����VK8=l���%�aKd[�t��+�����_X��c�h����,��)]WNa
��`����1Z���L�'HW����8�#�H�O��?I7h��N�	zw{�A��1�����u�����m#}��O�>����bn"����QF�A�hW�������[������'&���@� d|!��3�fR��:n�|
��^p�R�X����R����������<��*C�w��g(t������r�*������N������T�V���&�~���;�����35��$�YW��7x��R[�p���('��Iw�7Q��k��D�7���}�m��_�[�W����F��?9NQ/�d��Q1��1���a|%m6����7�v���#�����qu[T�����8������%��E�q.���E���^��P^k�v��������qS.����������<�F��}��2���(�j�PW��G��M���Pg��pR.���>9���m=��|�:�|�����������`~WI�o���}
����������~
�\�)Q��Q������6�]�-d�6�B�P���^(�z��FHB0��W@����q�^M�X�_�[�=FR�T��D_>�u\�Q��E�A�I�Z�#���(+��	@���g�*�G�pY��@+�V	�*M�W���	�y��/�����<����k���m��%�*�fm�����?k�M�5�����@�AW��{�����8g�E+�����"����C��O?��Qg��p"m:(v�_#\����}�5�n4����������2������_z�Y
�E�mZ���������>�U��8�4�J�p�����O����i�1����(0W�#�8������?�S��q��D��!�c����g���_���������)�����g��|�l�$�Ou����,�h������A��}P����S�T������_A��s�~�g]&���_�}��m��i
�0�G%(�.�s�����������+�����e��}�����x
��������������������S��������g�$�v/�����������G�������>BX�0{�o�����~����so����*^/��2��/	���W�����?���B�u�{�u:@��Z��>�]�-���k�(Q�����t�4�]ic�����r�r-OS.���w������{�~'{�����),A����e�T_H������������\��l�����5��h�u;�8�*G�P����Gq��A���"n�-N���������&�_?�]|��������Y�
y��
����3��s�)�����
��(�n�!�YJ��2�S<���6��F�����QZ1u��!�w��Qv�������#�����Sb����=&��=r_�Z�M���9�X���(yW�g2��O}�F�ga�[�����^�6�1'�#�
tOx_z�"���i���B�*d8�����Lou�)���'���
�Z�ol�n��R�>2����A=�@p������>��s���_�������.R����w���M�'B�]��m_BmA.����B��qG%��-6���v#m����2��PqgfZJN������+-e�3�;������~���vI�5J*�[�F?$���|_>�[b`�t�|fvL��
����Q�����g����Ku�����W�U�I�L0t3I��*�-Rgb�g�Vu
 dW�m`�x�&��I*eur���r��nn��Q���cCe-E4���������K{8IN���:����i��
������0:"�����a{H<�����js�{1�l�{QN�
>��&���T�9a(��7
|o`S+����~\��~�~�W�O�
����h@R�3@�r��l��x�n���Fzb[ ]�m����������K�l�g�/��|�����~�m��������9�-�����H���O��pF}N����o��w1���q������r��@|t��R@�������ag �����i4���A�;�K�m	���`�F��MF_��S���;�|lO��~v��a���x?����~�Ag�Qp��o��X~:�x���3}���?����,7�m�9QO���eg���s�U���b��p"A���6w:�[�U��g�{��7j!�h��PG���
��I�}y���|�>Y"�����ul�F�n�N]D���,�>��Q���4L@�Mr�.�A��T��E�NR"�O2�MwjW��K����<
���w�gdf�ky��4B�B���JB�����D�M��C�Z~�j�[H���L��&�3�"q��j����S��+�]��� N{��d��_�h���{R&o�L�Pw���3�3�����NSs���,��C�����O]Oy������w���:�kA��a
*�FB��G�a�u����s-�>��������Z��D[�&�G��7�AK�x{g��K����)������x�'��64�'�O<KC=WJ��?]i����i*�^�S	��K���Hn��� �3�T��������Lk	k\/�<�:��{����
<e����t�6�����~5p0=�/����p�?����[����������1����k�'n%���O�kzv����6�����T��[*����>�
B�r��!?�-
>��>�x�����-�k��kK���r��Y����,D�~��-�ny/�Tm�����zw'���N����?0��Z����}��~����W������@�;\���i������x��\�:�\G"�3�w�g�P���o@[�U�_\�wWkJv�yu���S�[�hR���� ����WoE�w����s�_7\{�>�vF�=Xq��/��|��7�����-��{�o�m�o�r��<���)I��=$��\0���|��j���:��������E�^�k���w�k�;�'"����q.�8���8��w�~�1������l��3�=���7a��d�����-: �v���z��#|�Fo����/�?�@��# |�s��<E:���~���s�<#	�K<w7��	��K
���k���q�����n���4�l�Oa�`��x�(Fk��J�.�yy�����������}?�����;�"����\D��������o?�� _�����Ix�8��6�m���C��C8�3�S�r��� �^|�(���q��w�
"r��-�!q��{5�|''���0-������5�w~�������9G�y�F�!�A�)�C��)�F�q�o?:*U�g���~�����N�������2�o�\�u��YZ���q��g��A(n��t�&��Ny�;�
��AD�=��D�Y.�E�Q��d�K��`	�����wF^���3eL��<�A�T��r}��X���RGu�xH�0�qz����Z�������W������:���\�A�M	T��@�f�>\E]`�����g��8�M��w����{o�~\��tQ�s������|���w��;���Lxo���|k-���kh��1����X�M0������p���J��P����A�z��r�*�x�M�����O)����/�U(���$�@`��������V��v�}g����[m�O��y�����������g*m��������������/
Z�Qs���?+@�u�}]JE�?�X�c��\��h���_v�'�K���?��w��n����9���:U���.�a��{�$�,���-n���O����M5�jW�s��A���3����3�^r6��A�$�|.V�]W"P�N	���x��
�,i3�m��J�W"��� ~P���Z<�	���s���$m'�+�!6~E�}���	(W|!��/C>�+m��Q���h������]���#�;/���x7Z�)�+��`.�Z���w�yr��S4lJ���
�s:�CN������ �>-��������6`����_#�w���5�,�8���rC��`l�c\&��7��=�y��'�;$o�:�.����F��_�&�p�l4�j������vv��Z-	��f��OI�:�L������������{�w�������=��B���-Xj�{�(���"/��'����v���hG;���v���hG;���v���hG;���v���hG;���v���hG;���v���hG;���v���/����BZEq�Q���^s!�L��G.*�T���2��6
y������F���~�'w���@��2=���E{�m4�z"y��H���-���g� ��!���6�s]��`�8Y��P`�x���m�w@e���_�B
O�"k�]y���{?�
z�$��$��HQ����"D��K�$�qpY�m�����f�{=�
B�����Qy�os����Gi!�������hkRl�I�<�`���������SS�Q���!����R�
�Q�6�_�N�@GV��
�f2�D�
�Q���h�w�?'/h�9s+!��)S��)�\�����@S@'*�)R���`��.B{E(^��QWd+�-U)I���
�3���[.F\�8e�Iy����u�w+^)�e
aD���mq�{�%���(���]��J8f6\�ddCXd���e$�9bq��R�^Vt�G+eJ29�w��Bq��JGI7+�Q9�#
������=��nQ)��T��
�Q�M�aJ����0w��W7d����L��2^��B��u�a��0Su��:t��G�r�,G�le>�*�h5�a�Vq~t��w���$(N���dHMl�=s�cbe1gCDTn�^e�|��*����3v+��P�78�C���W�N
bJ�*��L��������"������{���n�qA�2�>���z?\�]A's�g���Oh=B���/S>����C���@!>t'hO�]���]���}_��t������l#��0�IF ��[��_�/R2��+h:����:���m���u��x/���A_�{���������]����l�k�<��`�2���?��Q"�>��LD����t�u7�c�I>����)���*v�6�!A)�o���JV���];�j�����fx���������M�;����wor��]0 �9�/_��|rsh�V��~5�W��1�qqZ��
2T��Z"|�ZrO�P_BC�:�E�m��{>p3pp�L�
��������������G-8j%G�l} 8j�Q�p�H�p���5�C��5�����G���G%8*�Q)9*�Q	�J���^px%�^px���^px���9��G8r$G8r������p�H78��p��-9��p��
��p��
�����8l��8l��I���9��8���8����08��08K���8��|^�r���`9�`9 Y��X���d9�`9`}���,����&�6��I�6I��^8|����'9|�������������
���
�c86�c86H�
Rq����+���~��`���XWI���.�C��J���B�$��K:��%�G���>Ig�����|k�&`(0���/f���y/o'�jj^o�n~�l�n>l�Vm��^������k�5�.N�������*��������H��x�������<���>��g7��{����������%L���M�gU�����C@~f���Lw��6�����jd{�����-Pl�@.�d.��
�����*���T�-� ���b�-��<�mj�s$��v:w�n��F�� ��;Ot���YxE�9��6��~�d?$O�]�A��]y ���/����U�F�K�#
:�t��5���]]A<����t74��������f\������~ ���Q�B���3��d�L��J:����Je����{\�����������hd����=Y��p��_.�c�7�O��\�2����.������"�]Y�$�D���&����F���Z��q��:�����5�5�5.�~��=��T�����JT8����.�h�],w����:�
�{�|�O����=B�l�;��-�Q����F��f>a^mk`�gN3w2w4������e���[,��Z��,�F���#�&�]�WS��*�6.�������Y8]J�X��W��*|M��b������F>l���6��b*�b�_OE�Y���T���c�����>������F���%I��d���I;���%+�����[�,��]P^z����s��lL��_1���5���+zJu����+�vr+�,+��������rk�p����V��Y��b�Y� �({2@��e��RA��H���2�#e9��r���e��n�,�AtH�9�A��@c�[Z��)K��Y�(�����c]eE.�d�d�NV�b�1_��"F�^-Ez��v��+X��%T��e<������c����������Mj|+�Ns�Mt���n��Y3q�4A'L��I�R�[�V�����9�_�=�J�����U�/{���{x{��M(�n(*�*>���-mU���BQY�h�����"�H�U,�*my�d[e���WV�[h@u�A��;�C�k�R�8l���B����\��K%��:x�}i|����*�*YXg"+
�V#���_j�.����!9:m�DK�P����
_��1UBU|�	���Y�#��T6���-���%i�9?����3g�,�5�3����mD���0��lFS5��H�(��(2�>,��QoB��`�Es"�aH��S��o�6��8*�nHL���;�B�8>��-��|^C�q~����+Hq\�������*hF�z��X��:ku���
Y�5����D�&����7)4�3+$gWC���h�1r�lx�x<��YL����f!��v�Q�,Y�����g�`&���	��1�d���$k�:�A����{� 
endstream
endobj
23
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Arial-BoldMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
25
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
18
0
19
22
556
23
[
0
556
]
25
67
0
68
[
556
0
556
610
556
0
0
610
]
76
82
0
83
[
610
]
84
86
0
87
[
333
]
]
>>
endobj
25
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Arial-BoldMT
/Flags
4
/FontBBox
[
-627
-376
2000
1017
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
715
/StemV
80
/FontFile2
26
0
R
>>
endobj
28
0
obj
<<
/Filter
/FlateDecode
/Length
37
0
R
>>
stream
x�}R�n�0��+|lC�H�R���.*�{H-c�����4i�C-�<�f1���c�l��[u�����x���������������,��y�04�Y]��=�S3�y0�nY�����s�&����\��)�
�)���/�<C��1��q^%���c���9mF�&�i���EZ��Oi)�\��\��`_�#����9�)G��R$����?��DY��!�:����e�T�6���� d�/�5Qo�_����BYUP������ *)�����?��4}!MO�d�up:0~����c��
endstream
endobj
30
0
obj
<<
/Filter
/FlateDecode
/Length
38
0
R
>>
stream
x���	xTE�7~�������u����%@�!�@��d���,����%n��������MX���������(:��8��B�~��{oef����������S���S��:U�F���jI���K�����
r�#������?\^��C�����e���%�N!*�z�����g<�7�n����,d��f�B�z��f�[x�����#������/�6���>�9�g��z���Vo-�Q?6�������;����vR��=B9j	���/�/M�6�����������f�&�M��Ch�����"e�`�k�IKI�����F�WC��,��Je�|XG�����vR_�b�Ay�n /��4�.���0�b�D��QOF�|VkT���C�Cy�h 7��4��b|�����:��]t}�nwm�z�E���"Z�T��8��#(�K1���+l/��g�,�)����Ic/j�S5�����ug��Bm�1�x����ex�=TG��[O����G;d<h�jOg`>[�U�GI5\���i�R[*G���{z�^gq�4�P�h]��v��&ePg��>��������Xy^j$�r��6=G�\V�F���-���Q."'z����4��O�������_S~�>��R�
V������i��Lc��]��f���d~/�D�S}T��c*f}����1�'�^l;��b��Rv����^g_�|,��*�����������iK���/S����?��it1��(��5�]�3�A������>as3~c���cW��jv3[�6�G�V��:��}��c�������<^�[�7�/���;�}�5�����P��VJ��]��T)bTK�����|�������E[�=�m�������Nr���o�5|������T]j��1eb
s��(�����w�{$�	z�y��\���c����l[�.'�g��Cr��eO�K�������1w���@>���|_�o�[���G�������SNS���B�re��T���E�D9������Q��Z���������5���$�e�3=M��/����;z8�9F:F9��:�;�tN�t>K��Ij���+�(C�mt����W�����4]�!�|[��b[y�v����ag�!��~�?���>�pV�����|���n��>K��0�W���t���=T�������Nj��2��|��:z_Mc��D	)���O��B�>����]E����������F������b�����T�J��\�g:=^F�f��������0���v��N�d/���r���W���YS���U+����]��^S��C�q��5�[e�zH�fA��%����.�*�?��Ha��X���H���.�U�����v`�29aH�0��8X����vB����O�{���cy=������rj4M4�{����v�{��X�'n���V��nH]I�)���
������F������U'�/�]���5~�D?m-W��1��Xa��n{�Kg�������teuM��7C����G4�x���4�e�O#�)z���TG)�8����^I3�hc�2#5|�\H�[����4n��D�~����wy����u���SY��K��m����(��0��������23�C�������\N���
g�~H|��X�dJR-��~z��OE��&S�1d
=�N26EV��X3��3��L�5�5Y ���vh�%_�����*�yp�*�< ��e|��{/,D�������$��z���C���6����H���6��u#��������1��Czo���bP����!���`1��R<d����Q�C�Vuh�d����MR|`�_*�� �MR�t�nb��l�����{�����SJ=����N�L*S�D�R�;8�}����I<<4�ri��<e�����H._�4�\;��ii�������C�,��W��cb���PU�d7�������9��!"g��X���|�,M��$����.77���O�Cb��V�����US�o����/������X����@�d�f���x�M#3�dLV�����ebD�3 ���FR��z�`F/Z>������Ur:Vdv�5h��@o�/�'��@<��{�������V�^��DT�I�����'KK���	q��b��d�{�����x|~ ��H�vjU�2���P,�M�	:�d��J3�s��(QVZ��SD��$s�(��K�O�C���pW3���������!�z'Y�/�0�+��+FM��
Y>��m��Rfy��2+�LT��q+��Y
���XY$*=I���R���;��J��bC��)��aUZa�����8$ZIr��5�d���}NH�0<�r�VY1v���i'�A����$��V�%i4���{z	T�%`� Q�gfY�*�Y�*����~(���C�����,�Zo�����w�g�3���bN�������U��,�J�i��8[6js�-3�rGg�ec+�8�����\���1����"Wd�DL$��a�u�)���H��RUf���zF2�i�1�V���������y	�'~��4����H���i�L:��cw��6�c1e���FG)���.5��ho���My��#��2ge.���������pNF8������v.
=� 6j �Vrsr���Q�w��������#��Woi�xw]�3������zq�	���#�A@�4�
��g�Py�����W�v�tyb4��6R����Q����"����l53��i��;kW�&��"h��c�:���'��4w(JTj�0;r
�N���k��z�U	k�gfdu���{��ue�g�.]�j��'�������8p0��������5�F�R��C�&������;_z�=����k��������?�-k�/���]�P@�_�Am���^���8��q�����/A���"��0O��E�����D��;p\�.B�G���7s!L�����eD��lo���8I�x���#r(��A�yTV���,]��;�m����x�.���V�WF�M����xd@�P����k|��gn�c9�|$��������7�'�R��|�{��%��r��|H���3s��M��9)gt�\�\����3��L���_�_����T���*�R�=�����}n�p�h'�n�`"�Jd&e����n�\�\�5$��E
��hP�K�'
�N��!�DMc$�Y� ��A����p�PL���B�^ �X��{�TU��Z
�M��8f�2��$= �1(��r���������������o����E�>z��3��Le�z|����^*�zv��O��S�>xg�9��^��R�G!ui�^bp�9r�����Y�PIx������������\�k\qi����4��4�Eb�����z��DP�W�/�/�y"G�-!RZr=��&����XLKh\�q�d}�
.=+�)�g�T� �wxC_��?���?�����xP��{�����:������l�ze�E����o2F�'�����f8!r�BWDD�H��hl�zej�+�����q^!3���|�p�E2����lQ!��|J"1�H=�������X4�<�=,{��BeBDJ��po�~��CO(�e�	�?��~�'��t>.�!�����hs\�����'�Mh��O�&;K�����wi��]��/�;��Ty���z���]�~c���g������v?������@$���8.�''�+�I8u}_~nF~~�3?Wa����x#�z���A�g�mb$���qO���i���	E��,�&�
�PV��_C1
�^	Op[>�_�c����U��Y�]��~J������/���O�!!+��:�������s'�u�U���,M,�,,�		�!v�x+�����C���:������Y}p�=W^{����?�q��G�Y?)�i�����\����s��oy�k�~��r�S.��Yh�x�s5�W��nW����[("[��owN8!/�OL�F�	�6����IKk��W#m�������a����%���^R&��+e��B���`�<x>T�[�E@,~����]�U�'/�SFg���1=�b��K��3n�{����)tn���:�ebM�����@/���d����A���.�R�0�!{�C��mq�fr�������jvU�]��X�QS"�v	��@	�L?)Z����g��r�`;Y/"0��h�W��g�[�Q*��.�n4�
�
�8��b�
,���-��%�g����l���!�!B�#1~k�����XU�a!wM��9�Wdl-������;s��+S_�������4y��uk�eWM����c�^8�n���:F~w������dS.,V@�	��eO� ��c�q��.G�p]�.���P��\���4�2t8����Cn\N��/���&C]�.��B��3������%�6L��SUBPo���CKs+�'^�>E�PU��xU����"'����4RUT�}ij=�����%
�����#��*d�[�^����	�#�*��Q[������2���Nu�+\4m�t�h�����
��{��7���< �����G��������~���������am�L���+�:�+jAA_��*�$2<	w��vd�'QR�i���\���F�����c����f��J��U
����x�����l�C��cg>�ZSvW�\a'�X�=Lv,��.�3$C�4�Iq��q#���t��d��m�F*�YI������;,�[T��}��A��
��|_Z$33?$�0�_U#�^#G��t.eDZ,���#�
*��VF��!�	�eX�{y���U���?�y��~������U\��N���PX�@zZf(=}����K����07�t1��o���|�D&���_eoS��%�N\X�5�NaT�����a��Jxe,��N~v4�W�o���K�D�r�y��Kr��|����.uv,� r$� ������b������f*04���g�q�����k�nZ1aE�Go��6<9����0������j�o��~u���Y����.��:��n��/,�p�W&��j��p�I���H��������(�(F���D�>)L����SI3�$��{Z���l2�	�M$�e^/��<�U$��aT���$����;Z�<�d[g�W�|%��-[�{��lu���;��s�&����*���sB�c����\�������#&��i3t1lg"V(��u,+A1��^�q��7��X/�4{�Ll8���fQ�-Y���U\��`���=)|�����l����i�#��F�Yy�U����f/�V���/[r1;K���#���E[JO�>�T�������&K���6������9JZ����;YHx:�V���h"���-��g�?`��|�S�mm����?N}z��_n�KC���u�����b�:�7���N���`���?�������-b�>���c��XU���'�G�bo��!/�O��z����Sua���g����Q.9B�|
��;k\���d����-�(�g)�Y����?|���qZ��,���.�{a�N�����zNU��H�����\���7��+J����p��}����dS�:)CwP�}T��f��t��m%�e2�`�ymmw����d�JjR~c:W�����A>W��dA���BpZIK��������e���G]&J����V�E:���>�c�PaD��DB���(���������/l��M�}�Y�+�P���]Ki�i�(�#�g�'fJ��<~?p���8�(/o��xRD����T�E�����_�!r,�Jd�nE�L��d������be�l���{k�uF�%�{����:���*�H]�\���s�����h9[�.q^�����{s�����Z�|���r����+6%�m�C�0y0��YN�f$b���0#��Fjv��k'?�J�J�v��F[SZ�O�`k���?����9]������	K�I*L���%2�da�,,��E5��A<�����+;�`�mrC����F�9T^-�(<*���}�������N�uIWR�����gBNzF����9���|�����[zs�������v����n�q�y�z��r�56]��%���s�������n�~���bl��O�����n����3���p��7�u'4;��p��CU���a3�;����K�6�rV@��"] b�R7[�0nn��%+lT���}���x��,+`m�_6�tx��sR�krD�w��ie�P���pPJxP^������6�/��S|���<HzA}�Q+q�������%�����m���/�5^D4�q�/�N�|A��?���}5���iG�n�s�e%�ggM��T����{^����"+ro���z4�����>����*kM��,�w��:o-��8t+\�cm"#|��k�/�do�4���bQ[����D�[��NVNn��-�,��v�[����������� ��X�Q������zLype�	z����!K��D{������'.a�W��w��Z����	�ua	�Jb�a����h���F�`=v��~�9�����W�}�����ZxY����Z����`��?�����e�?��SM}��"�����n�n�{�
l�`�L���
x��M�s
83�Ww{_&&�X��x��|ZXPK�����c�C��V������}��`A��Nol�����1!s|�,mn����B��{|��7����[�t���@F W�����6�R���)���yp�����
������-7�����\��4�8���^��z�(�9�i����i�X�	�X^SP�Q$�ia�.b��oUV���vQ�%��<3#$��n}�W�g?;�z��'��g>`��������u�������;<�4��O��q����a���So���j�S��0@�
8��h}�W�q:ou0��5�'�����9�u�.93�0��3s���k��v="�RF�+���7��2����Wa5���kuZ���j��
��,���5	����s�N]�8�HlP�r�3�l�������a����D�s	(�	���#�2���N��9 ���gv����j��D���(.b��r����in]L���V��]�rH�X���=�c[Ox�!\��{�^}���)-�k[J����#&���P��*CM�8�|����LTt�A����t-�d�0m�l��DT�Ji�Ku��@�(�|nr:��i2"��������Z-�Z*��$���e���f��}��T���=y��%�;3x�S�����"X�9�s�_i�{��*���K����z�n�9��=|#x����s�w�/�n~������Ay���������M�Nl0�4'�N�h�h�`�;��476.�/ �iJ�6�C;��;�i1g=��������T����%<�����17j�z?#������R�??��|��1m�V�)Z=��%��*\�?'�p���9��8�Tn��������������jK�^�wi�� �;QE�=�"5��w�1�BJ�&n�-^����emP&.�����&r�{�7��������=�}]z�������J�.ZPM��1��@�XVv���0�8�������r����J�"U��<��m���W9��P������Gc�K����M�Q�JT��YF ##/;/OUj�;���>�����O����XA"8"}Dv"�R�tM�NN��=9<>wB�M���@NDQB�+���[�}1S���0�%1�#���|="��a�����3����H;l��!�O�����/��_�/�|��DX/���4��7����i�M�m���
o�F
�:=@�]T�_���=�)���\�4���x�
}lkj���R;7��
�y��]��m������<v�3��>�(�v��l��S�L�����-�}G�3�
,u����t(����+g��P��=>��V;d����������)��7&i����eh':��;sc���'Y��,�J�y�S���O,~������������[-��WX}qc��������o�uI�p
o{���o��6�Rj���5��:_��Q����>oW���q��X<��L���uD�&�0L�x�Da��c���3���������C�E���tyM�
��q�0��-��n����j�-(���,��(������,G��EEy�D�}g�����?/�"�e���7�-����������6?�g�����
�����4=$��ia�++;7'�-Fl�k������M���X��~���e��Q�H�%�7R��O����������MLV�[��X����"��U�79�I		���[�O[B�eKH��������|�^���wHA)-m@��L�g3_�i�+V}��*�(y���L������Poa%�iS}������`����K��ZeQ �2��UB��-�Y��q�#�0��`�sb�:�|������6����w����u7�:���Iu�v�x����.(.:�������������=/?m�|[�	�����9���C��CZB�����~0ogtM,�C�(>�U�5DA�xDU�[�k����l��L�g�I=�x�8�3��Y��q&������;)��|b��1{�R�� ���~�q���vX8o�V.V�T�&>C�|5!<:��*P���4��M?�������������	{������qZ��$�Eyd�L�3�Q��SUk�8f�\�����;�6Y������$���f�����A�/�����)_$|��9����E��}Q� ��m����|�,6K���PW5UQt����.]�/
.�bi�8*�����Y"W�q��9�=n�a�����$����e���04�5:�V���m���)�G�[9�"��e���p���X����<���{�p
�T.�X�p�%�\�<����c!����	���#cK}{�.
 �Hf�c������qy���aR���TYo���?���T�6��:~���}Ma�u5=��,��4��7V8r��sX�'
O�y����E�jV�'�mi��c|��
i���MxX�������90�����H^T}45��k����S���?x��?���{g�S~������	���>�|��<���WGL����Rg������W��o��V�V��^�B��C��5�	��(�K��T���D��	(�P��Pw#�@w���?���r����T`�H�����/�#i
MtF�Bm����Vi/�L`
��������!� ��V�z�:h�J�Hw#�>�OC��J��!>	�:Yq��f��������ok�i���c.Ux����1t(P�:�����Z�^0����C�KE>0����97��?�!}����
�6�q*��h�?��7��sn��o���0�X���w@��������9�k�3��T:�F�Wh�:��u��)�<���_���,��9F�J�E.Qc4���Z�0�B��*�c:��8Be�o�A/�����x�5�<�K)�i,���U�L��`�:h�I��k�����1�h?8
�R�/����������r��u&	 ?[s2)���xV�%���SZ�:7���AU S����3({��t��|����
�
�&��Hy�������^16)�����4uf��,�O��8��P(�)�E�,���~��)!36��=W���b�B�)tO��Nc�:����;�Y��*��e��!��	�������5���E�6�k'�#�
Q����lj�������)���)k�tu!���F���h���:j�����n�C��{�+�r��4�w8�bs�=��c��[t?x�@}��R�b�����F�%�1~����6�c�	*���?��o�����|��Z{�00���N8�a���M�_�����n�\V�G85������S�������. ��1�Vn����wY-���h�#���U�i���M�	����o"G'�\sY��-������LEAu���>�p�rT��{���r�����j��(�/�C�7���LN�6�OOs�lN���n�)�q�=a��6R�9ag���i����F������DK�[Y8c���}�a�������[�
J���wA���f<�y_���V)k?mk��f>��}T�J�,{���7���r/�������Q�;l��ZK�O�{�:<_M+0�e)���$��Da�/�=Q�|{��t��>���+�~��&`�/�<����<m����.�8��=4]�����X{���uf�N�E��GQ'��Po��A��r!���K^8��2{�����m������l_D�����g�h�O|Ch�hth������A��
x�Ch7N��r�~}�
�Z��6���O4�*�a>���J-x���Z�p���`���K��(�D��~���'���j)
������Y��D�7!�z�o'���h��6���/�������8���J?��������h�r&-�p�>�@ ��i��M���V��y��B%@W�|�����D��Cw���lu<uQ:Cw��A�#t��W��du����
�V������������H������4Q�����u2�(�!{oR�:k�v�-��"������J����%��`<.��>�����l�r�6���W`VgbM1^?a�k�8�1�d|r���h'��������b��F���1`-�)��r���	�m������l�Q�NO� ����f�[wz��~t�.���@�!(��w/�eM!�9Y~Shy���������S�y}��������)Y<S@_L�K(Ci���5Kky��mT����S�����NM��h:G{=@��
|�������zl�-����j��o)��!����@���)�\���t��O{����o�~�<o��<�|]O��[hrS�r�(�S?�?������������iZ}��H���bL���?M�#��/�XsE���~
6ue{/�& tW�o�y
h,�NC��������,���^�����%�W���r�1�g����6���y�-9Y�f�������;��������d��C���|���tQl��2�a����� �w�-�E<���@�':�=�!�-W�h��W� o���i=o�����D?�0���A�����}�n����}�,o���%�SH���@%�+A3A��@�W	�'���uz����K��L�8���tQ�3��M��<m~����T���A3j�g�O��%��}~��cS�g�)�qF|J����/+�g�?ZT����~�2l*|g��
�Y�������&�3N�����}��me�i
�,:u~���Wa{����q6zPi0����.?���������t����f�����S�i����t��/��.&7�����e���{��S����^�3{t�}����y�~�E��0v
4�K��"}*?�?M7�;��t3��N7�O�������Rn#���
q�P����14��F}�������hc���a/���(�v�]�<F]����������E��fq�m4 }-��Y����S�ss�����3iW��S���y�Z�3$�~�c��\u����*��<%�N�MH����g�A��="��A�@�`�G��3�+d�3���B:v��-q�e��wz)�;<�=�u�C��=���n��%F�u?7E�����.�w������\U��~Gw*nl�!g�w��~J�WzG
�{�������$�W��T������|W�T��+g�S���d�FZ�z��8��P�b��i�r]�����}z�|�2��W��x��?q���x�i���O �7����������C��~'���{�S�6����������w��=gY{�%�{~�{�I4J��>�N�a���u	`���X��������l��	���|�#������*���\�3��i^��_���C5��
T/C}N9�A��{�����00����k��@W �����P�xX�;�|o���c\3�n�xwd�n8�Su-���j�z�a����,�1��w�9�
+�4���m��uu,��.G�H����W	���\'�(��:������H���'i�#yu�Pm)��[���;�����O(���iJ�������Px��k��z����;t��^�������+��\�|#+��VY�3��r�.a?c#=��g|�w���4������Q��f@�s-���9M�;��m-k�Z�V~ns _������'�����q�\~Is ��a?��xs ?���h�W���9>5��~ag5��j>�'�cS��l�8�����+�a����^�q�0fZ�?[�~
��k���l��g�3�R��8W��#�h�����q�o�%��v�}KX}����6���,�|n�'��w'hXm�o��o�{����S��e��q
0���c�#����,�oq/��5.�X�s~R<��]����S��Wg86�T���I���	{�|i�J��3`��R�?�~(�a����M�t�M�d�|�7W�O���h��d��l�_|�-���e�la�����H���R��N.��i[��@������3�2������H�����.���+��h�~c}�fb�����\��N����<ri�u�M�����b����Z
��u	����n|w���?l��H������1^�a*���wZ5x2]��,���QRqF'� ��3����������V?�y��SK�{���;��O������J����)�<��l*�����������������Fj?C�o���[��~��G5��A���=P�6���M�
�Na��L*����Hsj�I���Y��Y�n:���>L3�%4F�����r�Fa��9���'�h���c�k3���K�K�Y:������(�K�K�D^�j+��m��2c�o8h>_�-2�7@
��7�����<�������TK~B����3�����C:,��:�;����Yv~�G����6�������)W�T���>d��Y�^s���������XS�lz�w/6=��%�����6�N�85+��w���;�\�����N�8�r~jJ���b���?S��������2p"���	N;����a��?�V����0�!�1_c����7�(gi@��9�H��������pv0�x�����9��������2-�d�0l��|����}�y�j�������:�O��k��4��������vO?���>�0!���H�t�u������\���2�4C~����'rp3��V���F���9���oLP�����a�����'����{}�yx�olgZ���5��Y��F�m��+����4�<��3���ic=�I
���B�_6~�]�p�xQ[_@_�[x��Z��3�������������6" ����!��~�E&R_����e�^�_��Q����&��z�:g����|�r��}�2��=C��J|ss�����{���|�lh�����]
 ����<�Q�y��>����Ksa������e��<C|�$�"'
m�b��2���
z��`��i6��:(3q~�N&�"�U�}�%�Y��������"�P
g{
y?XXaB����v��x:�g�{K�1��t���k�2�C=����B���:�o@����]�+������:^G;@C�f�P=����
0v����:��XS/�k��u~~�k�e�Azo�]������&����:h
�>������W�Om����'!K}q��)�'���e�j�}��+)����5$���M�c���0�qr?2����{{��������I?�1���N����i��
�S��T��Q����3T
�2�>��mh�{T|�&d����x��I�k���])���m�6������w��5y��J����[��{��{_t�o3N���O���;���n��[�S���s9��2�����b_��o4�B�I�6��T2y?j�k7*n��B�A��"�NT��F`�"�
y���|��6
4���c��9��Tq7'�R%,�"�����3��[�w����h������=C|��s��ta[�K��3m{K��-���1����8og�����]1�;L(~�%i�|��R�����i�
�\�~�7M�?D�����q��gj�=��ro������{H������'��A�w0���,���ft�MO�Zm�������{I���_������sQW�m����r:��r������:a��w����@��kk���{���M�dr�|�~Y��a��8����8l�S�Or �75�����}� �������u�$����&���7$/�C�[fP���z�����C�^�|�m�S5�+�vH���<���~ �C��z�\�a���4���.����
��N���v�F����v���*����nQ���#��&
`A������{���8r7�<"NQ����D�E��%�_��-hAZ����-hAZ����-hAZ����-hAZ����-hAZ����-hAZ����-�L��V�����A�T&��������F|�U�l)	G_JiK����+-��PZ+u}��z%�%���?��"���2�^<�T��D�@���v�:BQ.���@���EZ+9h��1��l:�BQ�e�`2p+���z"�B`1�8$KJv��]1����$�2��.29�LN���-�L:|�I�aV�mV�����8�����4T��V�4o�=��,L2������g���V��$���I(�-E%]�����0�NQc�����.���R���[~�,����]p&���v
����i1�/x��?��x
8�|?~?����C���P��<�������x���������=����aho��,��CFJ��H���d�Y�PV�z����B�J����]J+�G]�Vu����J����h=���Xit��N�MJ#y=�I1`$0�������T��IR�0��>����	H#'������JFd�W��
���_���yI_��I�ht�.�n��@�e(���[�BQc@��������`2p+����U��h�E���
�:�J��i��s���A��Jz�
1�(���U� )��[nGL%��@L%W\��J��1�L���J&NFL%#�"����y��u����,6��/�.�.�.%�_*~�U����v����������;Y�S�v4�]�jg���Y�5��/�=�����|Va�	V���+jYb�	��D���c��Xm
�-a�������X�D=/�;��$C$�2@(������y!8Z�/�M���5���*�Z��s"������������N�����X�g�#@�=1zy�#�L��Q�~������d`1p��p�.����X�5�"���o+���DA ?P8]�5��#lD������ED��3X�������?������[�������P�gw�����d���
�c�T��A{Q�Lw�|���(�?��.<���J�Gw2�h�=�C������9�_�����WY]�-�<�=�f��������y��������;�{E7��U�A������l�^�Ztn�,�a�S�T�]21z:�78��h�����N��Y��h�=�	C(5��0�����xD>p\�z6+����Q������h�(tD�<G�3�8}N�3��t�N������n��3t�=�?�f��x�����$$gNNgR2]��c����iTqn,ydL��������Y2TAc&{�V�;�����I���+73vKr�|Y=�����Y7�%C�*wc�n���
7WUQ8������~����OL��&��f��xArU�������d1
�*�w��M����c�����.HU���n�h���\UUQ���zcG=H��e='6fQ�b��Yo�Y��Q�H�s��X�+v�d=��z�k���\T$�d��F����5���u��e��Z�'����u��d��|T���*,��e�|�+��?^���rcc�eO
;^'����o���G���c�?�3c`i)���j��!3�C�����$o�dV8Y{n,�yZ�(�%��)�N�%��������i����}&��x�(���&
[�yRb���>�>C�SWm9md��'�ucc_�F��a#�����N�y�����4�WO�WO��i��d_$e|d�f'
�4��[�;
�:%��j`V`~?)�}
�W��������UIO|`���:E�)Q�C��*
_��0o'�`������\L�!�����Y/7�����A��db����D�vc*��GM���p w��R����v�7�����[d*JcE��W��\V��������t-���%"l!�T)�H�XS0v"�:ib�N�Rb{���kX)���a
����s���b+f�b�E��hRc���G0���c�@�?Z�KE
endstream
endobj
27
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+ArialMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
29
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
7
0
8
[
889
]
9
18
0
19
28
556
29
37
0
38
[
722
0
0
610
]
42
47
0
48
[
833
0
777
666
0
722
0
610
]
56
59
0
60
[
666
]
61
65
0
66
[
556
]
]
>>
endobj
29
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+ArialMT
/Flags
4
/FontBBox
[
-664
-324
2000
1005
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
30
0
R
>>
endobj
31
0
obj
330
endobj
32
0
obj
13225
endobj
33
0
obj
262
endobj
34
0
obj
12097
endobj
35
0
obj
287
endobj
36
0
obj
14224
endobj
37
0
obj
305
endobj
38
0
obj
16459
endobj
1
0
obj
<<
/Type
/Pages
/Kids
[
5
0
R
]
/Count
1
>>
endobj
xref
0 39
0000000002 65535 f 
0000073941 00000 n 
0000000000 00000 f 
0000000016 00000 n 
0000000142 00000 n 
0000000255 00000 n 
0000000420 00000 n 
0000012936 00000 n 
0000012844 00000 n 
0000012865 00000 n 
0000012884 00000 n 
0000013135 00000 n 
0000013286 00000 n 
0000013441 00000 n 
0000013590 00000 n 
0000027441 00000 n 
0000013734 00000 n 
0000027847 00000 n 
0000014140 00000 n 
0000040566 00000 n 
0000028055 00000 n 
0000040883 00000 n 
0000028393 00000 n 
0000055759 00000 n 
0000041096 00000 n 
0000056096 00000 n 
0000041459 00000 n 
0000073214 00000 n 
0000056298 00000 n 
0000073576 00000 n 
0000056679 00000 n 
0000073773 00000 n 
0000073793 00000 n 
0000073815 00000 n 
0000073835 00000 n 
0000073857 00000 n 
0000073877 00000 n 
0000073899 00000 n 
0000073919 00000 n 
trailer
<<
/Size
39
/Root
3
0
R
/Info
4
0
R
>>
startxref
74000
%%EOF
master.csvtext/csv; charset=UTF-8; name=master.csvDownload
patched.csvtext/csv; charset=UTF-8; name=patched.csvDownload
diff.svgimage/svg+xml; name=diff.svgDownload
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="1200" height="630" onload="init(evt)" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
<!-- NOTES:  -->
<defs>
	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
		<stop stop-color="#eeeeee" offset="5%" />
		<stop stop-color="#eeeeb0" offset="95%" />
	</linearGradient>
</defs>
<style type="text/css">
	text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
	#search, #ignorecase { opacity:0.1; cursor:pointer; }
	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
	#subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
	#title { text-anchor:middle; font-size:17px}
	#unzoom { cursor:pointer; }
	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
	.hide { display:none; }
	.parent { opacity:0.5; }
</style>
<script type="text/ecmascript">
<![CDATA[
	"use strict";
	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
	function init(evt) {
		details = document.getElementById("details").firstChild;
		searchbtn = document.getElementById("search");
		ignorecaseBtn = document.getElementById("ignorecase");
		unzoombtn = document.getElementById("unzoom");
		matchedtxt = document.getElementById("matched");
		svg = document.getElementsByTagName("svg")[0];
		searching = 0;
		currentSearchTerm = null;

		// use GET parameters to restore a flamegraphs state.
		var params = get_params();
		if (params.x && params.y)
			zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
                if (params.s) search(params.s);
	}

	// event listeners
	window.addEventListener("click", function(e) {
		var target = find_group(e.target);
		if (target) {
			if (target.nodeName == "a") {
				if (e.ctrlKey === false) return;
				e.preventDefault();
			}
			if (target.classList.contains("parent")) unzoom(true);
			zoom(target);
			if (!document.querySelector('.parent')) {
				// we have basically done a clearzoom so clear the url
				var params = get_params();
				if (params.x) delete params.x;
				if (params.y) delete params.y;
				history.replaceState(null, null, parse_params(params));
				unzoombtn.classList.add("hide");
				return;
			}

			// set parameters for zoom state
			var el = target.querySelector("rect");
			if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
				var params = get_params()
				params.x = el.attributes._orig_x.value;
				params.y = el.attributes.y.value;
				history.replaceState(null, null, parse_params(params));
			}
		}
		else if (e.target.id == "unzoom") clearzoom();
		else if (e.target.id == "search") search_prompt();
		else if (e.target.id == "ignorecase") toggle_ignorecase();
	}, false)

	// mouse-over for info
	// show
	window.addEventListener("mouseover", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = "Function: " + g_to_text(target);
	}, false)

	// clear
	window.addEventListener("mouseout", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = ' ';
	}, false)

	// ctrl-F for search
	// ctrl-I to toggle case-sensitive search
	window.addEventListener("keydown",function (e) {
		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
			e.preventDefault();
			search_prompt();
		}
		else if (e.ctrlKey && e.keyCode === 73) {
			e.preventDefault();
			toggle_ignorecase();
		}
	}, false)

	// functions
	function get_params() {
		var params = {};
		var paramsarr = window.location.search.substr(1).split('&');
		for (var i = 0; i < paramsarr.length; ++i) {
			var tmp = paramsarr[i].split("=");
			if (!tmp[0] || !tmp[1]) continue;
			params[tmp[0]]  = decodeURIComponent(tmp[1]);
		}
		return params;
	}
	function parse_params(params) {
		var uri = "?";
		for (var key in params) {
			uri += key + '=' + encodeURIComponent(params[key]) + '&';
		}
		if (uri.slice(-1) == "&")
			uri = uri.substring(0, uri.length - 1);
		if (uri == '?')
			uri = window.location.href.split('?')[0];
		return uri;
	}
	function find_child(node, selector) {
		var children = node.querySelectorAll(selector);
		if (children.length) return children[0];
	}
	function find_group(node) {
		var parent = node.parentElement;
		if (!parent) return;
		if (parent.id == "frames") return node;
		return find_group(parent);
	}
	function orig_save(e, attr, val) {
		if (e.attributes["_orig_" + attr] != undefined) return;
		if (e.attributes[attr] == undefined) return;
		if (val == undefined) val = e.attributes[attr].value;
		e.setAttribute("_orig_" + attr, val);
	}
	function orig_load(e, attr) {
		if (e.attributes["_orig_"+attr] == undefined) return;
		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
		e.removeAttribute("_orig_"+attr);
	}
	function g_to_text(e) {
		var text = find_child(e, "title").firstChild.nodeValue;
		return (text)
	}
	function g_to_func(e) {
		var func = g_to_text(e);
		// if there's any manipulation we want to do to the function
		// name before it's searched, do it here before returning.
		return (func);
	}
	function update_text(e) {
		var r = find_child(e, "rect");
		var t = find_child(e, "text");
		var w = parseFloat(r.attributes.width.value) -3;
		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;

		// Smaller than this size won't fit anything
		if (w < 2 * 12 * 0.59) {
			t.textContent = "";
			return;
		}

		t.textContent = txt;
		var sl = t.getSubStringLength(0, txt.length);
		// check if only whitespace or if we can fit the entire string into width w
		if (/^ *$/.test(txt) || sl < w)
			return;

		// this isn't perfect, but gives a good starting point
		// and avoids calling getSubStringLength too often
		var start = Math.floor((w/sl) * txt.length);
		for (var x = start; x > 0; x = x-2) {
			if (t.getSubStringLength(0, x + 2) <= w) {
				t.textContent = txt.substring(0, x) + "..";
				return;
			}
		}
		t.textContent = "";
	}

	// zoom
	function zoom_reset(e) {
		if (e.attributes != undefined) {
			orig_load(e, "x");
			orig_load(e, "width");
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_reset(c[i]);
		}
	}
	function zoom_child(e, x, ratio) {
		if (e.attributes != undefined) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
				if (e.tagName == "text")
					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
			}
		}

		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_child(c[i], x - 10, ratio);
		}
	}
	function zoom_parent(e) {
		if (e.attributes) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = 10;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
			}
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_parent(c[i]);
		}
	}
	function zoom(node) {
		var attr = find_child(node, "rect").attributes;
		var width = parseFloat(attr.width.value);
		var xmin = parseFloat(attr.x.value);
		var xmax = parseFloat(xmin + width);
		var ymin = parseFloat(attr.y.value);
		var ratio = (svg.width.baseVal.value - 2 * 10) / width;

		// XXX: Workaround for JavaScript float issues (fix me)
		var fudge = 0.0001;

		unzoombtn.classList.remove("hide");

		var el = document.getElementById("frames").children;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var a = find_child(e, "rect").attributes;
			var ex = parseFloat(a.x.value);
			var ew = parseFloat(a.width.value);
			var upstack;
			// Is it an ancestor
			if (0 == 0) {
				upstack = parseFloat(a.y.value) > ymin;
			} else {
				upstack = parseFloat(a.y.value) < ymin;
			}
			if (upstack) {
				// Direct ancestor
				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
					e.classList.add("parent");
					zoom_parent(e);
					update_text(e);
				}
				// not in current path
				else
					e.classList.add("hide");
			}
			// Children maybe
			else {
				// no common path
				if (ex < xmin || ex + fudge >= xmax) {
					e.classList.add("hide");
				}
				else {
					zoom_child(e, xmin, ratio);
					update_text(e);
				}
			}
		}
		search();
	}
	function unzoom(dont_update_text) {
		unzoombtn.classList.add("hide");
		var el = document.getElementById("frames").children;
		for(var i = 0; i < el.length; i++) {
			el[i].classList.remove("parent");
			el[i].classList.remove("hide");
			zoom_reset(el[i]);
			if(!dont_update_text) update_text(el[i]);
		}
		search();
	}
	function clearzoom() {
		unzoom();

		// remove zoom state
		var params = get_params();
		if (params.x) delete params.x;
		if (params.y) delete params.y;
		history.replaceState(null, null, parse_params(params));
	}

	// search
	function toggle_ignorecase() {
		ignorecase = !ignorecase;
		if (ignorecase) {
			ignorecaseBtn.classList.add("show");
		} else {
			ignorecaseBtn.classList.remove("show");
		}
		reset_search();
		search();
	}
	function reset_search() {
		var el = document.querySelectorAll("#frames rect");
		for (var i = 0; i < el.length; i++) {
			orig_load(el[i], "fill")
		}
		var params = get_params();
		delete params.s;
		history.replaceState(null, null, parse_params(params));
	}
	function search_prompt() {
		if (!searching) {
			var term = prompt("Enter a search term (regexp " +
			    "allowed, eg: ^ext4_)"
			    + (ignorecase ? ", ignoring case" : "")
			    + "\nPress Ctrl-i to toggle case sensitivity", "");
			if (term != null) search(term);
		} else {
			reset_search();
			searching = 0;
			currentSearchTerm = null;
			searchbtn.classList.remove("show");
			searchbtn.firstChild.nodeValue = "Search"
			matchedtxt.classList.add("hide");
			matchedtxt.firstChild.nodeValue = ""
		}
	}
	function search(term) {
		if (term) currentSearchTerm = term;

		var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
		var el = document.getElementById("frames").children;
		var matches = new Object();
		var maxwidth = 0;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var func = g_to_func(e);
			var rect = find_child(e, "rect");
			if (func == null || rect == null)
				continue;

			// Save max width. Only works as we have a root frame
			var w = parseFloat(rect.attributes.width.value);
			if (w > maxwidth)
				maxwidth = w;

			if (func.match(re)) {
				// highlight
				var x = parseFloat(rect.attributes.x.value);
				orig_save(rect, "fill");
				rect.attributes.fill.value = "rgb(230,0,230)";

				// remember matches
				if (matches[x] == undefined) {
					matches[x] = w;
				} else {
					if (w > matches[x]) {
						// overwrite with parent
						matches[x] = w;
					}
				}
				searching = 1;
			}
		}
		if (!searching)
			return;
		var params = get_params();
		params.s = currentSearchTerm;
		history.replaceState(null, null, parse_params(params));

		searchbtn.classList.add("show");
		searchbtn.firstChild.nodeValue = "Reset Search";

		// calculate percent matched, excluding vertical overlap
		var count = 0;
		var lastx = -1;
		var lastw = 0;
		var keys = Array();
		for (k in matches) {
			if (matches.hasOwnProperty(k))
				keys.push(k);
		}
		// sort the matched frames by their x location
		// ascending, then width descending
		keys.sort(function(a, b){
			return a - b;
		});
		// Step through frames saving only the biggest bottom-up frames
		// thanks to the sort order. This relies on the tree property
		// where children are always smaller than their parents.
		var fudge = 0.0001;	// JavaScript floating point
		for (var k in keys) {
			var x = parseFloat(keys[k]);
			var w = matches[keys[k]];
			if (x >= lastx + lastw - fudge) {
				count += w;
				lastx = x;
				lastw = w;
			}
		}
		// display matched percent
		matchedtxt.classList.remove("hide");
		var pct = 100 * count / maxwidth;
		if (pct != 100) pct = pct.toFixed(1)
		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
	}
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="630.0" fill="url(#background)"  />
<text id="title" x="600.00" y="24" >Flame Graph</text>
<text id="details" x="10.00" y="613" > </text>
<text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
<text id="search" x="1090.00" y="24" >Search</text>
<text id="ignorecase" x="1174.00" y="24" >ic</text>
<text id="matched" x="1090.00" y="613" > </text>
<g id="frames">
<g >
<title>pg_atomic_compare_exchange_u32 (2,750,000 samples, 0.02%; 0.00%)</title><rect x="1187.0" y="85" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1190.01" y="95.5" ></text>
</g>
<g >
<title>pg_preadv (8,000,000 samples, 0.05%; +0.00%)</title><rect x="1180.5" y="149" width="0.6" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1183.46" y="159.5" ></text>
</g>
<g >
<title>_IO_do_write@@GLIBC_2.2.5 (87,000,000 samples, 0.59%; +0.00%)</title><rect x="31.0" y="213" width="6.9" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="33.96" y="223.5" ></text>
</g>
<g >
<title>MemoryContextReset (226,250,000 samples, 1.54%; +0.04%)</title><rect x="1022.8" y="261" width="18.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1025.84" y="271.5" ></text>
</g>
<g >
<title>AllocSetFreeIndex (136,000,000 samples, 0.93%; +0.93%)</title><rect x="648.1" y="165" width="10.9" height="15.0" fill="rgb(255,193,193)" rx="2" ry="2" />
<text  x="651.10" y="175.5" ></text>
</g>
<g >
<title>FileReadV (8,250,000 samples, 0.06%; -0.00%)</title><rect x="1180.4" y="165" width="0.7" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1183.44" y="175.5" ></text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,750,000 samples, 0.04%; 0.00%)</title><rect x="1179.9" y="181" width="0.4" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.88" y="191.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,750,000 samples, 0.02%; -0.00%)</title><rect x="1171.1" y="197" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1174.09" y="207.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1187.3" y="101" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1190.29" y="111.5" ></text>
</g>
<g >
<title>_IO_fwrite (307,000,000 samples, 2.09%; +0.75%)</title><rect x="17.3" y="245" width="24.7" height="15.0" fill="rgb(255,197,197)" rx="2" ry="2" />
<text  x="20.33" y="255.5" >_..</text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (1,500,000 samples, 0.01%; -0.00%)</title><rect x="1185.8" y="37" width="0.1" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1188.82" y="47.5" ></text>
</g>
<g >
<title>PageGetItem (13,000,000 samples, 0.09%; -0.20%)</title><rect x="1176.9" y="229" width="1.1" height="15.0" fill="rgb(206,206,255)" rx="2" ry="2" />
<text  x="1179.93" y="239.5" ></text>
</g>
<g >
<title>BufTableLookup (16,250,000 samples, 0.11%; +0.00%)</title><rect x="1182.5" y="117" width="1.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1185.51" y="127.5" ></text>
</g>
<g >
<title>LWLockAttemptLock (1,250,000 samples, 0.01%; -0.00%)</title><rect x="1188.9" y="197" width="0.1" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1191.88" y="207.5" ></text>
</g>
<g >
<title>read_stream_start_pending_read (84,750,000 samples, 0.58%; -0.01%)</title><rect x="1181.8" y="197" width="6.8" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1184.79" y="207.5" ></text>
</g>
<g >
<title>TerminateBufferIO (3,750,000 samples, 0.03%; -0.01%)</title><rect x="1179.6" y="181" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1182.58" y="191.5" ></text>
</g>
<g >
<title>heapgettup_advance_block (2,500,000 samples, 0.02%; +0.00%)</title><rect x="1181.6" y="149" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.59" y="159.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (15,750,000 samples, 0.11%; +0.04%)</title><rect x="1182.6" y="101" width="1.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1185.55" y="111.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (1,750,000 samples, 0.01%; +0.01%)</title><rect x="30.8" y="197" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="33.82" y="207.5" ></text>
</g>
<g >
<title>read_stream_next_buffer (120,000,000 samples, 0.82%; -0.02%)</title><rect x="1179.0" y="213" width="9.6" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1181.96" y="223.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (3,000,000 samples, 0.02%; 0.00%)</title><rect x="1188.1" y="85" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1191.05" y="95.5" ></text>
</g>
<g >
<title>LWLockAttemptLock (3,750,000 samples, 0.03%; +0.01%)</title><rect x="1185.5" y="69" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1188.46" y="79.5" ></text>
</g>
<g >
<title>BufTableInsert (4,500,000 samples, 0.03%; +0.01%)</title><rect x="1182.1" y="117" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1185.15" y="127.5" ></text>
</g>
<g >
<title>__mempcpy_avx_unaligned_erms (3,000,000 samples, 0.02%; +0.02%)</title><rect x="41.7" y="213" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="44.74" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (1,500,000 samples, 0.01%; 0.00%)</title><rect x="1185.8" y="53" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.82" y="63.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (2,750,000 samples, 0.02%; -0.01%)</title><rect x="1187.0" y="69" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1190.01" y="79.5" ></text>
</g>
<g >
<title>ResourceOwnerForget (1,500,000 samples, 0.01%; 0.00%)</title><rect x="1179.7" y="149" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.74" y="159.5" ></text>
</g>
<g >
<title>__memcmp_avx2_movbe (1,250,000 samples, 0.01%; -0.01%)</title><rect x="1185.1" y="53" width="0.1" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1188.14" y="63.5" ></text>
</g>
<g >
<title>heap_page_prune_opt (2,500,000 samples, 0.02%; +0.01%)</title><rect x="1189.0" y="213" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1191.98" y="223.5" ></text>
</g>
<g >
<title>pgstat_progress_update_param (47,000,000 samples, 0.32%; +0.32%)</title><rect x="42.1" y="245" width="3.8" height="15.0" fill="rgb(255,204,204)" rx="2" ry="2" />
<text  x="45.10" y="255.5" ></text>
</g>
<g >
<title>_IO_ferror (18,000,000 samples, 0.12%; +0.12%)</title><rect x="15.9" y="245" width="1.4" height="15.0" fill="rgb(255,207,207)" rx="2" ry="2" />
<text  x="18.88" y="255.5" ></text>
</g>
<g >
<title>fetch_att (544,000,000 samples, 3.70%; +0.10%)</title><rect x="1116.3" y="197" width="43.7" height="15.0" fill="rgb(255,208,208)" rx="2" ry="2" />
<text  x="1119.32" y="207.5" >fetc..</text>
</g>
<g >
<title>ss_report_location (2,000,000 samples, 0.01%; +0.00%)</title><rect x="1181.6" y="133" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.63" y="143.5" ></text>
</g>
<g >
<title>get_hash_entry (2,250,000 samples, 0.02%; -0.01%)</title><rect x="1182.3" y="85" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1185.29" y="95.5" ></text>
</g>
<g >
<title>PortalRunMulti (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="357" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="367.5" >PortalRunMulti</text>
</g>
<g >
<title>fwrite@plt (1,500,000 samples, 0.01%; +0.01%)</title><rect x="42.0" y="245" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="44.98" y="255.5" ></text>
</g>
<g >
<title>new_do_write (86,750,000 samples, 0.59%; +0.02%)</title><rect x="31.0" y="197" width="6.9" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="33.98" y="207.5" ></text>
</g>
<g >
<title>MemoryChunkSetHdrMask (304,250,000 samples, 2.07%; +2.07%)</title><rect x="623.7" y="149" width="24.4" height="15.0" fill="rgb(255,174,174)" rx="2" ry="2" />
<text  x="626.66" y="159.5" >M..</text>
</g>
<g >
<title>PinBufferForBlock (82,250,000 samples, 0.56%; 0.00%)</title><rect x="1181.9" y="149" width="6.7" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1184.95" y="159.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (2,500,000 samples, 0.02%; +0.01%)</title><rect x="1179.9" y="101" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1182.92" y="111.5" ></text>
</g>
<g >
<title>slot_getallattrs (32,250,000 samples, 0.22%; +0.09%)</title><rect x="1041.6" y="261" width="2.6" height="15.0" fill="rgb(255,208,208)" rx="2" ry="2" />
<text  x="1044.61" y="271.5" ></text>
</g>
<g >
<title>BackendStartup (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="453" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="463.5" >BackendStartup</text>
</g>
<g >
<title>slot_deform_heap_tuple (1,342,000,000 samples, 9.13%; +0.14%)</title><rect x="1052.2" y="213" width="107.8" height="15.0" fill="rgb(255,207,207)" rx="2" ry="2" />
<text  x="1055.23" y="223.5" >slot_deform_h..</text>
</g>
<g >
<title>int4out (4,648,750,000 samples, 31.64%; +4.00%)</title><rect x="495.5" y="197" width="373.3" height="15.0" fill="rgb(255,140,140)" rx="2" ry="2" />
<text  x="498.51" y="207.5" >int4out</text>
</g>
<g >
<title>PageIsVerifiedExtended (1,250,000 samples, 0.01%; +0.00%)</title><rect x="1179.5" y="181" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1182.48" y="191.5" ></text>
</g>
<g >
<title>heap_prepare_pagescan (17,500,000 samples, 0.12%; +0.01%)</title><rect x="1188.6" y="229" width="1.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1191.59" y="239.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (1,750,000 samples, 0.01%; 0.00%)</title><rect x="1186.5" y="53" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1189.53" y="63.5" ></text>
</g>
<g >
<title>BufferGetPage (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1175.7" y="229" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1178.75" y="239.5" ></text>
</g>
<g >
<title>StartReadBuffers (84,000,000 samples, 0.57%; +0.01%)</title><rect x="1181.8" y="181" width="6.8" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.81" y="191.5" ></text>
</g>
<g >
<title>__mempcpy@plt (4,500,000 samples, 0.03%; +0.03%)</title><rect x="41.4" y="213" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="44.38" y="223.5" ></text>
</g>
<g >
<title>main (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="501" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="511.5" >main</text>
</g>
<g >
<title>hash_search_with_hash_value (3,750,000 samples, 0.03%; 0.00%)</title><rect x="1182.2" y="101" width="0.3" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1185.21" y="111.5" ></text>
</g>
<g >
<title>read_stream_get_block (5,000,000 samples, 0.03%; +0.00%)</title><rect x="1181.4" y="181" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.39" y="191.5" ></text>
</g>
<g >
<title>heap_scan_stream_read_next_serial (4,500,000 samples, 0.03%; +0.01%)</title><rect x="1181.4" y="165" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.43" y="175.5" ></text>
</g>
<g >
<title>ResourceOwnerAddToHash (1,750,000 samples, 0.01%; +0.00%)</title><rect x="1180.2" y="117" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1183.16" y="127.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,000,000 samples, 0.01%; -0.00%)</title><rect x="1178.8" y="197" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1181.80" y="207.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (38,750,000 samples, 0.26%; +0.26%)</title><rect x="38.3" y="213" width="3.1" height="15.0" fill="rgb(255,205,205)" rx="2" ry="2" />
<text  x="41.27" y="223.5" ></text>
</g>
<g >
<title>GetBufferFromRing (3,500,000 samples, 0.02%; +0.00%)</title><rect x="1186.4" y="85" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1189.39" y="95.5" ></text>
</g>
<g >
<title>BackendMain (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="421" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="431.5" >BackendMain</text>
</g>
<g >
<title>LWLockAcquire (6,750,000 samples, 0.05%; -0.01%)</title><rect x="1186.7" y="117" width="0.5" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1189.69" y="127.5" ></text>
</g>
<g >
<title>pg_ultoa_n (1,256,000,000 samples, 8.55%; +0.91%)</title><rect x="768.0" y="165" width="100.8" height="15.0" fill="rgb(255,194,194)" rx="2" ry="2" />
<text  x="770.98" y="175.5" >pg_ultoa_n</text>
</g>
<g >
<title>LWLockAcquire (2,250,000 samples, 0.02%; +0.00%)</title><rect x="1188.8" y="213" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1191.80" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (2,000,000 samples, 0.01%; -0.00%)</title><rect x="1185.6" y="37" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1188.60" y="47.5" ></text>
</g>
<g >
<title>LWLockRelease (4,500,000 samples, 0.03%; +0.00%)</title><rect x="1176.5" y="229" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1179.51" y="239.5" ></text>
</g>
<g >
<title>CopyToTextLikeSendEndOfRow (166,500,000 samples, 1.13%; +0.60%)</title><rect x="427.6" y="229" width="13.3" height="15.0" fill="rgb(255,199,199)" rx="2" ry="2" />
<text  x="430.57" y="239.5" ></text>
</g>
<g >
<title>heapgettup_pagemode (231,000,000 samples, 1.57%; -0.02%)</title><rect x="1171.4" y="245" width="18.6" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1174.45" y="255.5" ></text>
</g>
<g >
<title>standard_ProcessUtility (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="325" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="335.5" >standard_ProcessUtility</text>
</g>
<g >
<title>_IO_file_write@@GLIBC_2.2.5 (83,500,000 samples, 0.57%; +0.01%)</title><rect x="31.2" y="181" width="6.7" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="34.24" y="191.5" ></text>
</g>
<g >
<title>CopyAttributeOutText (1,506,500,000 samples, 10.25%; +8.42%)</title><rect x="170.5" y="229" width="121.0" height="15.0" fill="rgb(255,63,63)" rx="2" ry="2" />
<text  x="173.54" y="239.5" >CopyAttributeOu..</text>
</g>
<g >
<title>UnpinBufferNoOwner (5,500,000 samples, 0.04%; -0.00%)</title><rect x="1171.0" y="213" width="0.4" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1174.01" y="223.5" ></text>
</g>
<g >
<title>slot_getsomeattrs_int (1,390,000,000 samples, 9.46%; -0.01%)</title><rect x="1048.4" y="245" width="111.6" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1051.38" y="255.5" >slot_getsomea..</text>
</g>
<g >
<title>IOContextForStrategy (1,250,000 samples, 0.01%; +0.00%)</title><rect x="1188.5" y="133" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1191.45" y="143.5" ></text>
</g>
<g >
<title>CopyToStateFlush (417,750,000 samples, 2.84%; +0.30%)</title><rect x="12.3" y="261" width="33.6" height="15.0" fill="rgb(255,204,204)" rx="2" ry="2" />
<text  x="15.33" y="271.5" >Co..</text>
</g>
<g >
<title>GetPrivateRefCountEntry (12,250,000 samples, 0.08%; -0.01%)</title><rect x="1169.4" y="197" width="1.0" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1172.38" y="207.5" ></text>
</g>
<g >
<title>MemoryContextSwitchTo (3,000,000 samples, 0.02%; -0.05%)</title><rect x="1041.0" y="261" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1044.01" y="271.5" ></text>
</g>
<g >
<title>IncrBufferRefCount (14,250,000 samples, 0.10%; +0.00%)</title><rect x="1169.3" y="213" width="1.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1172.32" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (3,500,000 samples, 0.02%; 0.00%)</title><rect x="1187.5" y="101" width="0.3" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1190.53" y="111.5" ></text>
</g>
<g >
<title>postmaster_child_launch (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="437" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="447.5" >postmaster_child_launch</text>
</g>
<g >
<title>pgstat_progress_update_param (39,250,000 samples, 0.27%; +0.04%)</title><rect x="1044.2" y="277" width="3.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1047.22" y="287.5" ></text>
</g>
<g >
<title>slot_getallattrs (1,402,500,000 samples, 9.55%; +0.01%)</title><rect x="1047.4" y="277" width="112.6" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1050.37" y="287.5" >slot_getallat..</text>
</g>
<g >
<title>AllocSetAllocChunkFromBlock (424,250,000 samples, 2.89%; +0.82%)</title><rect x="614.0" y="165" width="34.1" height="15.0" fill="rgb(255,195,195)" rx="2" ry="2" />
<text  x="617.02" y="175.5" >Al..</text>
</g>
<g >
<title>ExecStoreBufferHeapTuple (77,250,000 samples, 0.53%; 0.00%)</title><rect x="1165.2" y="245" width="6.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1168.24" y="255.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (1,750,000 samples, 0.01%; 0.00%)</title><rect x="1171.3" y="197" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1174.31" y="207.5" ></text>
</g>
<g >
<title>BufferDescriptorGetBuffer (3,000,000 samples, 0.02%; -0.01%)</title><rect x="1178.5" y="181" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1181.48" y="191.5" ></text>
</g>
<g >
<title>_IO_default_xsputn (4,500,000 samples, 0.03%; +0.02%)</title><rect x="30.6" y="213" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="33.60" y="223.5" ></text>
</g>
<g >
<title>__libc_start_main@@GLIBC_2.34 (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="533" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="543.5" >__libc_start_main@@GLIBC_2.34</text>
</g>
<g >
<title>ResourceOwnerForget (6,000,000 samples, 0.04%; +0.01%)</title><rect x="1170.5" y="165" width="0.5" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1173.48" y="175.5" ></text>
</g>
<g >
<title>_IO_file_xsputn@@GLIBC_2.2.5 (197,250,000 samples, 1.34%; +0.38%)</title><rect x="26.1" y="229" width="15.9" height="15.0" fill="rgb(255,203,203)" rx="2" ry="2" />
<text  x="29.14" y="239.5" ></text>
</g>
<g >
<title>read_stream_look_ahead (7,750,000 samples, 0.05%; +0.01%)</title><rect x="1181.2" y="197" width="0.6" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.17" y="207.5" ></text>
</g>
<g >
<title>GetVictimBuffer (35,750,000 samples, 0.24%; +0.00%)</title><rect x="1183.8" y="117" width="2.9" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1186.82" y="127.5" ></text>
</g>
<g >
<title>LockBufHdr (1,500,000 samples, 0.01%; -0.00%)</title><rect x="1179.6" y="165" width="0.1" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1182.62" y="175.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (2,500,000 samples, 0.02%; +0.00%)</title><rect x="1187.3" y="69" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1190.29" y="79.5" ></text>
</g>
<g >
<title>InvalidateVictimBuffer (27,500,000 samples, 0.19%; +0.01%)</title><rect x="1184.1" y="101" width="2.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1187.06" y="111.5" ></text>
</g>
<g >
<title>hash_search (1,250,000 samples, 0.01%; +0.00%)</title><rect x="1188.0" y="85" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1190.95" y="95.5" ></text>
</g>
<g >
<title>enlargeStringInfo (666,000,000 samples, 4.53%; +4.53%)</title><rect x="969.4" y="213" width="53.4" height="15.0" fill="rgb(255,131,131)" rx="2" ry="2" />
<text  x="972.35" y="223.5" >enlar..</text>
</g>
<g >
<title>ResourceOwnerForgetBufferIO (1,500,000 samples, 0.01%; 0.00%)</title><rect x="1179.7" y="165" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.74" y="175.5" ></text>
</g>
<g >
<title>AllocSetReset (179,500,000 samples, 1.22%; +0.08%)</title><rect x="1026.3" y="213" width="14.4" height="15.0" fill="rgb(255,208,208)" rx="2" ry="2" />
<text  x="1029.33" y="223.5" ></text>
</g>
<g >
<title>ResourceOwnerForgetBuffer (6,000,000 samples, 0.04%; -0.00%)</title><rect x="1170.5" y="181" width="0.5" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1173.48" y="191.5" ></text>
</g>
<g >
<title>pg_ltoa (2,110,750,000 samples, 14.37%; +5.82%)</title><rect x="699.3" y="181" width="169.5" height="15.0" fill="rgb(255,108,108)" rx="2" ry="2" />
<text  x="702.33" y="191.5" >pg_ltoa</text>
</g>
<g >
<title>ReleaseBuffer (6,250,000 samples, 0.04%; +0.00%)</title><rect x="1170.5" y="213" width="0.5" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1173.46" y="223.5" ></text>
</g>
<g >
<title>ResourceOwnerEnlarge (1,250,000 samples, 0.01%; +0.01%)</title><rect x="1170.4" y="197" width="0.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1173.36" y="207.5" ></text>
</g>
<g >
<title>PortalRun (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="373" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="383.5" >PortalRun</text>
</g>
<g >
<title>DoCopyTo (14,693,250,000 samples, 100.00%; -0.02%)</title><rect x="10.0" y="293" width="1180.0" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="13.00" y="303.5" >DoCopyTo</text>
</g>
<g >
<title>BufferAlloc (80,500,000 samples, 0.55%; -0.00%)</title><rect x="1182.0" y="133" width="6.5" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1184.99" y="143.5" ></text>
</g>
<g >
<title>page_collect_tuples (10,250,000 samples, 0.07%; 0.00%)</title><rect x="1189.2" y="213" width="0.8" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1192.18" y="223.5" ></text>
</g>
<g >
<title>LWLockAttemptLock (5,750,000 samples, 0.04%; -0.01%)</title><rect x="1186.8" y="101" width="0.4" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1189.77" y="111.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (13,500,000 samples, 0.09%; +0.03%)</title><rect x="1184.2" y="69" width="1.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1187.24" y="79.5" ></text>
</g>
<g >
<title>OutputFunctionCall (5,328,250,000 samples, 36.26%; +1.78%)</title><rect x="440.9" y="229" width="427.9" height="15.0" fill="rgb(255,178,178)" rx="2" ry="2" />
<text  x="443.94" y="239.5" >OutputFunctionCall</text>
</g>
<g >
<title>pg_ultoa_n (1,122,500,000 samples, 7.64%; +4.79%)</title><rect x="778.7" y="149" width="90.1" height="15.0" fill="rgb(255,126,126)" rx="2" ry="2" />
<text  x="781.70" y="159.5" >pg_ultoa_n</text>
</g>
<g >
<title>CopyToTextOneRow (12,165,000,000 samples, 82.79%; +0.16%)</title><rect x="45.9" y="261" width="976.9" height="15.0" fill="rgb(255,207,207)" rx="2" ry="2" />
<text  x="48.88" y="271.5" >CopyToTextOneRow</text>
</g>
<g >
<title>BufTableDelete (14,250,000 samples, 0.10%; +0.00%)</title><rect x="1184.2" y="85" width="1.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1187.18" y="95.5" ></text>
</g>
<g >
<title>UnpinBuffer (6,000,000 samples, 0.04%; 0.00%)</title><rect x="1170.5" y="197" width="0.5" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1173.48" y="207.5" ></text>
</g>
<g >
<title>CopyOneRowTo (12,865,750,000 samples, 87.56%; -12.09%)</title><rect x="11.0" y="277" width="1033.2" height="15.0" fill="rgb(0,0,255)" rx="2" ry="2" />
<text  x="13.96" y="287.5" >CopyOneRowTo</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1176.7" y="213" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1179.67" y="223.5" ></text>
</g>
<g >
<title>_IO_file_overflow@@GLIBC_2.2.5 (4,000,000 samples, 0.03%; +0.03%)</title><rect x="37.9" y="213" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="40.95" y="223.5" ></text>
</g>
<g >
<title>tts_buffer_heap_getsomeattrs (1,364,500,000 samples, 9.29%; -0.03%)</title><rect x="1050.4" y="229" width="109.6" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1053.42" y="239.5" >tts_buffer_he..</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1187.3" y="85" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1190.29" y="95.5" ></text>
</g>
<g >
<title>DatumGetInt32 (123,750,000 samples, 0.84%; +0.84%)</title><rect x="659.0" y="181" width="10.0" height="15.0" fill="rgb(255,195,195)" rx="2" ry="2" />
<text  x="662.02" y="191.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1176.7" y="197" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1179.67" y="207.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (1,750,000 samples, 0.01%; -0.01%)</title><rect x="1186.5" y="37" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1189.53" y="47.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (1,750,000 samples, 0.01%; 0.00%)</title><rect x="1171.3" y="181" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1174.31" y="191.5" ></text>
</g>
<g >
<title>LWLockAcquire (5,500,000 samples, 0.04%; +0.01%)</title><rect x="1185.3" y="85" width="0.5" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1188.32" y="95.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (2,000,000 samples, 0.01%; 0.00%)</title><rect x="1186.0" y="69" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.98" y="79.5" ></text>
</g>
<g >
<title>StartReadBuffersImpl (83,250,000 samples, 0.57%; +0.01%)</title><rect x="1181.9" y="165" width="6.7" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1184.87" y="175.5" ></text>
</g>
<g >
<title>postgres (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="565" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="575.5" >postgres</text>
</g>
<g >
<title>UnpinBuffer (3,750,000 samples, 0.03%; -0.00%)</title><rect x="1178.5" y="197" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1181.48" y="207.5" ></text>
</g>
<g >
<title>__GI___libc_write (81,750,000 samples, 0.56%; +0.56%)</title><rect x="31.4" y="165" width="6.5" height="15.0" fill="rgb(255,200,200)" rx="2" ry="2" />
<text  x="34.38" y="175.5" ></text>
</g>
<g >
<title>PortalRunUtility (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="341" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="351.5" >PortalRunUtility</text>
</g>
<g >
<title>ItemPointerSet (7,000,000 samples, 0.05%; +0.02%)</title><rect x="1175.9" y="229" width="0.6" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1178.95" y="239.5" ></text>
</g>
<g >
<title>LockBufHdr (4,000,000 samples, 0.03%; -0.01%)</title><rect x="1187.5" y="117" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1190.49" y="127.5" ></text>
</g>
<g >
<title>ServerLoop (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="469" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="479.5" >ServerLoop</text>
</g>
<g >
<title>FunctionCall1Coll (5,066,000,000 samples, 34.48%; +2.84%)</title><rect x="462.0" y="213" width="406.8" height="15.0" fill="rgb(255,160,160)" rx="2" ry="2" />
<text  x="465.00" y="223.5" >FunctionCall1Coll</text>
</g>
<g >
<title>exec_simple_query (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="389" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="399.5" >exec_simple_query</text>
</g>
<g >
<title>table_scan_getnextslot (373,500,000 samples, 2.54%; -0.00%)</title><rect x="1160.0" y="277" width="30.0" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1163.00" y="287.5" >ta..</text>
</g>
<g >
<title>DoCopy (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="309" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="319.5" >DoCopy</text>
</g>
<g >
<title>tts_buffer_heap_store_tuple (59,500,000 samples, 0.40%; -0.06%)</title><rect x="1166.7" y="229" width="4.7" height="15.0" fill="rgb(208,208,255)" rx="2" ry="2" />
<text  x="1169.67" y="239.5" ></text>
</g>
<g >
<title>_start (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="549" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="559.5" >_start</text>
</g>
<g >
<title>LWLockRelease (3,250,000 samples, 0.02%; -0.00%)</title><rect x="1187.2" y="117" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1190.23" y="127.5" ></text>
</g>
<g >
<title>StartBufferIO (5,500,000 samples, 0.04%; -0.01%)</title><rect x="1179.9" y="149" width="0.4" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1182.90" y="159.5" ></text>
</g>
<g >
<title>heap_fetch_next_buffer (131,250,000 samples, 0.89%; 0.00%)</title><rect x="1178.1" y="229" width="10.5" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1181.05" y="239.5" ></text>
</g>
<g >
<title>ReservePrivateRefCountEntry (4,250,000 samples, 0.03%; -0.01%)</title><rect x="1188.0" y="101" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1190.95" y="111.5" ></text>
</g>
<g >
<title>hash_search (2,750,000 samples, 0.02%; +0.01%)</title><rect x="1169.6" y="181" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1172.58" y="191.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (416,500,000 samples, 2.83%; +2.83%)</title><rect x="935.9" y="213" width="33.5" height="15.0" fill="rgb(255,160,160)" rx="2" ry="2" />
<text  x="938.90" y="223.5" >__..</text>
</g>
<g >
<title>CopyToTextLikeOneRow (12,142,000,000 samples, 82.64%; +10.41%)</title><rect x="47.7" y="245" width="975.1" height="15.0" fill="rgb(255,29,29)" rx="2" ry="2" />
<text  x="50.73" y="255.5" >CopyToTextLikeOneRow</text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (3,500,000 samples, 0.02%; +0.01%)</title><rect x="1187.5" y="85" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1190.53" y="95.5" ></text>
</g>
<g >
<title>CopySendData (268,750,000 samples, 1.83%; +1.83%)</title><rect x="269.9" y="213" width="21.6" height="15.0" fill="rgb(255,178,178)" rx="2" ry="2" />
<text  x="272.94" y="223.5" >C..</text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (2,500,000 samples, 0.02%; +0.01%)</title><rect x="1176.7" y="181" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1179.67" y="191.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (7,000,000 samples, 0.05%; -0.01%)</title><rect x="1169.8" y="181" width="0.6" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1172.80" y="191.5" ></text>
</g>
<g >
<title>BlockIdSet (4,750,000 samples, 0.03%; +0.01%)</title><rect x="1176.1" y="213" width="0.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1179.13" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (1,500,000 samples, 0.01%; 0.00%)</title><rect x="1185.8" y="69" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.82" y="79.5" ></text>
</g>
<g >
<title>ResourceOwnerEnlarge (2,250,000 samples, 0.02%; -0.00%)</title><rect x="1180.1" y="133" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1183.12" y="143.5" ></text>
</g>
<g >
<title>UnpinBufferNoOwner (2,250,000 samples, 0.02%; -0.00%)</title><rect x="1178.8" y="213" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1181.78" y="223.5" ></text>
</g>
<g >
<title>__libc_start_call_main (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="517" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="527.5" >__libc_start_call_main</text>
</g>
<g >
<title>ReservePrivateRefCountEntry (6,000,000 samples, 0.04%; +0.01%)</title><rect x="1187.8" y="117" width="0.5" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1190.81" y="127.5" ></text>
</g>
<g >
<title>Int32GetDatum (99,500,000 samples, 0.68%; -0.01%)</title><rect x="1152.0" y="181" width="8.0" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1155.01" y="191.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (2,000,000 samples, 0.01%; 0.00%)</title><rect x="1185.6" y="53" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.60" y="63.5" ></text>
</g>
<g >
<title>StrategyGetBuffer (4,000,000 samples, 0.03%; -0.01%)</title><rect x="1186.3" y="101" width="0.4" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1189.35" y="111.5" ></text>
</g>
<g >
<title>LockBufHdr (3,250,000 samples, 0.02%; 0.00%)</title><rect x="1186.4" y="69" width="0.3" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1189.41" y="79.5" ></text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,750,000 samples, 0.04%; 0.00%)</title><rect x="1179.9" y="165" width="0.4" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.88" y="175.5" ></text>
</g>
<g >
<title>resetStringInfo (4,500,000 samples, 0.03%; -0.01%)</title><rect x="1041.2" y="261" width="0.4" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1044.25" y="271.5" ></text>
</g>
<g >
<title>palloc (378,250,000 samples, 2.57%; +2.57%)</title><rect x="669.0" y="181" width="30.3" height="15.0" fill="rgb(255,165,165)" rx="2" ry="2" />
<text  x="671.96" y="191.5" >pa..</text>
</g>
<g >
<title>heap_getnextslot (360,000,000 samples, 2.45%; +0.10%)</title><rect x="1161.1" y="261" width="28.9" height="15.0" fill="rgb(255,208,208)" rx="2" ry="2" />
<text  x="1164.09" y="271.5" >he..</text>
</g>
<g >
<title>mdreadv (9,750,000 samples, 0.07%; +0.01%)</title><rect x="1180.3" y="181" width="0.8" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1183.34" y="191.5" ></text>
</g>
<g >
<title>LockBufHdr (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1185.9" y="85" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.94" y="95.5" ></text>
</g>
<g >
<title>decimalLength32 (418,500,000 samples, 2.85%; +2.85%)</title><rect x="835.2" y="133" width="33.6" height="15.0" fill="rgb(255,160,160)" rx="2" ry="2" />
<text  x="838.24" y="143.5" >de..</text>
</g>
<g >
<title>all (14,693,250,000 samples, 100%)</title><rect x="10.0" y="581" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="591.5" ></text>
</g>
<g >
<title>slot_getsomeattrs (17,750,000 samples, 0.12%; +0.04%)</title><rect x="1042.8" y="245" width="1.4" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1045.77" y="255.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (2,000,000 samples, 0.01%; -0.01%)</title><rect x="1186.0" y="53" width="0.1" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1188.98" y="63.5" ></text>
</g>
<g >
<title>AllocSetAlloc (1,448,000,000 samples, 9.85%; +6.04%)</title><rect x="542.7" y="181" width="116.3" height="15.0" fill="rgb(255,105,105)" rx="2" ry="2" />
<text  x="545.73" y="191.5" >AllocSetAlloc</text>
</g>
<g >
<title>PostmasterMain (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="485" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="495.5" >PostmasterMain</text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (2,500,000 samples, 0.02%; 0.00%)</title><rect x="1179.9" y="117" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.92" y="127.5" ></text>
</g>
<g >
<title>CopySendChar (1,694,000,000 samples, 11.53%; +11.53%)</title><rect x="291.5" y="229" width="136.1" height="15.0" fill="rgb(255,9,9)" rx="2" ry="2" />
<text  x="294.52" y="239.5" >CopySendChar</text>
</g>
<g >
<title>appendBinaryStringInfo (1,917,500,000 samples, 13.05%; +5.68%)</title><rect x="868.8" y="229" width="154.0" height="15.0" fill="rgb(255,111,111)" rx="2" ry="2" />
<text  x="871.84" y="239.5" >appendBinaryStringI..</text>
</g>
<g >
<title>__memcmp_avx2_movbe (2,000,000 samples, 0.01%; +0.00%)</title><rect x="1170.1" y="165" width="0.2" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1173.10" y="175.5" ></text>
</g>
<g >
<title>CopySendChar (78,750,000 samples, 0.54%; +0.54%)</title><rect x="434.6" y="213" width="6.3" height="15.0" fill="rgb(255,200,200)" rx="2" ry="2" />
<text  x="437.61" y="223.5" ></text>
</g>
<g >
<title>LWLockRelease (2,250,000 samples, 0.02%; 0.00%)</title><rect x="1185.8" y="85" width="0.1" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1188.76" y="95.5" ></text>
</g>
<g >
<title>slot_getsomeattrs (1,396,000,000 samples, 9.50%; +0.01%)</title><rect x="1047.9" y="261" width="112.1" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1050.89" y="271.5" >slot_getsomea..</text>
</g>
<g >
<title>MemoryContextResetOnly (191,000,000 samples, 1.30%; 0.00%)</title><rect x="1025.7" y="245" width="15.3" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1028.67" y="255.5" ></text>
</g>
<g >
<title>PostgresMain (14,693,250,000 samples, 100.00%; 0.00%)</title><rect x="10.0" y="405" width="1180.0" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="13.00" y="415.5" >PostgresMain</text>
</g>
<g >
<title>LockBufHdr (2,750,000 samples, 0.02%; 0.00%)</title><rect x="1179.9" y="133" width="0.2" height="15.0" fill="rgb(255,255,255)" rx="2" ry="2" />
<text  x="1182.90" y="143.5" ></text>
</g>
<g >
<title>preadv64 (3,500,000 samples, 0.02%; -0.00%)</title><rect x="1180.8" y="133" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1183.82" y="143.5" ></text>
</g>
<g >
<title>BufferGetBlock (2,500,000 samples, 0.02%; -0.01%)</title><rect x="1175.7" y="213" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1178.75" y="223.5" ></text>
</g>
<g >
<title>MemoryContextCallResetCallbacks (3,250,000 samples, 0.02%; +0.01%)</title><rect x="1040.7" y="213" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1043.75" y="223.5" ></text>
</g>
<g >
<title>__libc_pread (4,000,000 samples, 0.03%; -0.01%)</title><rect x="1180.5" y="133" width="0.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1183.50" y="143.5" ></text>
</g>
<g >
<title>ReleaseBuffer (4,000,000 samples, 0.03%; +0.00%)</title><rect x="1178.5" y="213" width="0.3" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1181.46" y="223.5" ></text>
</g>
<g >
<title>MemoryContextResetOnly (191,000,000 samples, 1.30%; -0.00%)</title><rect x="1025.7" y="229" width="15.3" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1028.67" y="239.5" ></text>
</g>
<g >
<title>WaitReadBuffers (24,500,000 samples, 0.17%; +0.01%)</title><rect x="1179.2" y="197" width="2.0" height="15.0" fill="rgb(255,209,209)" rx="2" ry="2" />
<text  x="1182.20" y="207.5" ></text>
</g>
<g >
<title>hash_bytes (1,500,000 samples, 0.01%; -0.00%)</title><rect x="1188.3" y="117" width="0.2" height="15.0" fill="rgb(209,209,255)" rx="2" ry="2" />
<text  x="1191.33" y="127.5" ></text>
</g>
</g>
</svg>
master.svgimage/svg+xml; name=master.svgDownload
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="1200" height="630" onload="init(evt)" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
<!-- NOTES:  -->
<defs>
	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
		<stop stop-color="#eeeeee" offset="5%" />
		<stop stop-color="#eeeeb0" offset="95%" />
	</linearGradient>
</defs>
<style type="text/css">
	text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
	#search, #ignorecase { opacity:0.1; cursor:pointer; }
	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
	#subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
	#title { text-anchor:middle; font-size:17px}
	#unzoom { cursor:pointer; }
	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
	.hide { display:none; }
	.parent { opacity:0.5; }
</style>
<script type="text/ecmascript">
<![CDATA[
	"use strict";
	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
	function init(evt) {
		details = document.getElementById("details").firstChild;
		searchbtn = document.getElementById("search");
		ignorecaseBtn = document.getElementById("ignorecase");
		unzoombtn = document.getElementById("unzoom");
		matchedtxt = document.getElementById("matched");
		svg = document.getElementsByTagName("svg")[0];
		searching = 0;
		currentSearchTerm = null;

		// use GET parameters to restore a flamegraphs state.
		var params = get_params();
		if (params.x && params.y)
			zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
                if (params.s) search(params.s);
	}

	// event listeners
	window.addEventListener("click", function(e) {
		var target = find_group(e.target);
		if (target) {
			if (target.nodeName == "a") {
				if (e.ctrlKey === false) return;
				e.preventDefault();
			}
			if (target.classList.contains("parent")) unzoom(true);
			zoom(target);
			if (!document.querySelector('.parent')) {
				// we have basically done a clearzoom so clear the url
				var params = get_params();
				if (params.x) delete params.x;
				if (params.y) delete params.y;
				history.replaceState(null, null, parse_params(params));
				unzoombtn.classList.add("hide");
				return;
			}

			// set parameters for zoom state
			var el = target.querySelector("rect");
			if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
				var params = get_params()
				params.x = el.attributes._orig_x.value;
				params.y = el.attributes.y.value;
				history.replaceState(null, null, parse_params(params));
			}
		}
		else if (e.target.id == "unzoom") clearzoom();
		else if (e.target.id == "search") search_prompt();
		else if (e.target.id == "ignorecase") toggle_ignorecase();
	}, false)

	// mouse-over for info
	// show
	window.addEventListener("mouseover", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = "Function: " + g_to_text(target);
	}, false)

	// clear
	window.addEventListener("mouseout", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = ' ';
	}, false)

	// ctrl-F for search
	// ctrl-I to toggle case-sensitive search
	window.addEventListener("keydown",function (e) {
		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
			e.preventDefault();
			search_prompt();
		}
		else if (e.ctrlKey && e.keyCode === 73) {
			e.preventDefault();
			toggle_ignorecase();
		}
	}, false)

	// functions
	function get_params() {
		var params = {};
		var paramsarr = window.location.search.substr(1).split('&');
		for (var i = 0; i < paramsarr.length; ++i) {
			var tmp = paramsarr[i].split("=");
			if (!tmp[0] || !tmp[1]) continue;
			params[tmp[0]]  = decodeURIComponent(tmp[1]);
		}
		return params;
	}
	function parse_params(params) {
		var uri = "?";
		for (var key in params) {
			uri += key + '=' + encodeURIComponent(params[key]) + '&';
		}
		if (uri.slice(-1) == "&")
			uri = uri.substring(0, uri.length - 1);
		if (uri == '?')
			uri = window.location.href.split('?')[0];
		return uri;
	}
	function find_child(node, selector) {
		var children = node.querySelectorAll(selector);
		if (children.length) return children[0];
	}
	function find_group(node) {
		var parent = node.parentElement;
		if (!parent) return;
		if (parent.id == "frames") return node;
		return find_group(parent);
	}
	function orig_save(e, attr, val) {
		if (e.attributes["_orig_" + attr] != undefined) return;
		if (e.attributes[attr] == undefined) return;
		if (val == undefined) val = e.attributes[attr].value;
		e.setAttribute("_orig_" + attr, val);
	}
	function orig_load(e, attr) {
		if (e.attributes["_orig_"+attr] == undefined) return;
		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
		e.removeAttribute("_orig_"+attr);
	}
	function g_to_text(e) {
		var text = find_child(e, "title").firstChild.nodeValue;
		return (text)
	}
	function g_to_func(e) {
		var func = g_to_text(e);
		// if there's any manipulation we want to do to the function
		// name before it's searched, do it here before returning.
		return (func);
	}
	function update_text(e) {
		var r = find_child(e, "rect");
		var t = find_child(e, "text");
		var w = parseFloat(r.attributes.width.value) -3;
		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;

		// Smaller than this size won't fit anything
		if (w < 2 * 12 * 0.59) {
			t.textContent = "";
			return;
		}

		t.textContent = txt;
		var sl = t.getSubStringLength(0, txt.length);
		// check if only whitespace or if we can fit the entire string into width w
		if (/^ *$/.test(txt) || sl < w)
			return;

		// this isn't perfect, but gives a good starting point
		// and avoids calling getSubStringLength too often
		var start = Math.floor((w/sl) * txt.length);
		for (var x = start; x > 0; x = x-2) {
			if (t.getSubStringLength(0, x + 2) <= w) {
				t.textContent = txt.substring(0, x) + "..";
				return;
			}
		}
		t.textContent = "";
	}

	// zoom
	function zoom_reset(e) {
		if (e.attributes != undefined) {
			orig_load(e, "x");
			orig_load(e, "width");
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_reset(c[i]);
		}
	}
	function zoom_child(e, x, ratio) {
		if (e.attributes != undefined) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
				if (e.tagName == "text")
					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
			}
		}

		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_child(c[i], x - 10, ratio);
		}
	}
	function zoom_parent(e) {
		if (e.attributes) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = 10;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
			}
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_parent(c[i]);
		}
	}
	function zoom(node) {
		var attr = find_child(node, "rect").attributes;
		var width = parseFloat(attr.width.value);
		var xmin = parseFloat(attr.x.value);
		var xmax = parseFloat(xmin + width);
		var ymin = parseFloat(attr.y.value);
		var ratio = (svg.width.baseVal.value - 2 * 10) / width;

		// XXX: Workaround for JavaScript float issues (fix me)
		var fudge = 0.0001;

		unzoombtn.classList.remove("hide");

		var el = document.getElementById("frames").children;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var a = find_child(e, "rect").attributes;
			var ex = parseFloat(a.x.value);
			var ew = parseFloat(a.width.value);
			var upstack;
			// Is it an ancestor
			if (0 == 0) {
				upstack = parseFloat(a.y.value) > ymin;
			} else {
				upstack = parseFloat(a.y.value) < ymin;
			}
			if (upstack) {
				// Direct ancestor
				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
					e.classList.add("parent");
					zoom_parent(e);
					update_text(e);
				}
				// not in current path
				else
					e.classList.add("hide");
			}
			// Children maybe
			else {
				// no common path
				if (ex < xmin || ex + fudge >= xmax) {
					e.classList.add("hide");
				}
				else {
					zoom_child(e, xmin, ratio);
					update_text(e);
				}
			}
		}
		search();
	}
	function unzoom(dont_update_text) {
		unzoombtn.classList.add("hide");
		var el = document.getElementById("frames").children;
		for(var i = 0; i < el.length; i++) {
			el[i].classList.remove("parent");
			el[i].classList.remove("hide");
			zoom_reset(el[i]);
			if(!dont_update_text) update_text(el[i]);
		}
		search();
	}
	function clearzoom() {
		unzoom();

		// remove zoom state
		var params = get_params();
		if (params.x) delete params.x;
		if (params.y) delete params.y;
		history.replaceState(null, null, parse_params(params));
	}

	// search
	function toggle_ignorecase() {
		ignorecase = !ignorecase;
		if (ignorecase) {
			ignorecaseBtn.classList.add("show");
		} else {
			ignorecaseBtn.classList.remove("show");
		}
		reset_search();
		search();
	}
	function reset_search() {
		var el = document.querySelectorAll("#frames rect");
		for (var i = 0; i < el.length; i++) {
			orig_load(el[i], "fill")
		}
		var params = get_params();
		delete params.s;
		history.replaceState(null, null, parse_params(params));
	}
	function search_prompt() {
		if (!searching) {
			var term = prompt("Enter a search term (regexp " +
			    "allowed, eg: ^ext4_)"
			    + (ignorecase ? ", ignoring case" : "")
			    + "\nPress Ctrl-i to toggle case sensitivity", "");
			if (term != null) search(term);
		} else {
			reset_search();
			searching = 0;
			currentSearchTerm = null;
			searchbtn.classList.remove("show");
			searchbtn.firstChild.nodeValue = "Search"
			matchedtxt.classList.add("hide");
			matchedtxt.firstChild.nodeValue = ""
		}
	}
	function search(term) {
		if (term) currentSearchTerm = term;

		var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
		var el = document.getElementById("frames").children;
		var matches = new Object();
		var maxwidth = 0;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var func = g_to_func(e);
			var rect = find_child(e, "rect");
			if (func == null || rect == null)
				continue;

			// Save max width. Only works as we have a root frame
			var w = parseFloat(rect.attributes.width.value);
			if (w > maxwidth)
				maxwidth = w;

			if (func.match(re)) {
				// highlight
				var x = parseFloat(rect.attributes.x.value);
				orig_save(rect, "fill");
				rect.attributes.fill.value = "rgb(230,0,230)";

				// remember matches
				if (matches[x] == undefined) {
					matches[x] = w;
				} else {
					if (w > matches[x]) {
						// overwrite with parent
						matches[x] = w;
					}
				}
				searching = 1;
			}
		}
		if (!searching)
			return;
		var params = get_params();
		params.s = currentSearchTerm;
		history.replaceState(null, null, parse_params(params));

		searchbtn.classList.add("show");
		searchbtn.firstChild.nodeValue = "Reset Search";

		// calculate percent matched, excluding vertical overlap
		var count = 0;
		var lastx = -1;
		var lastw = 0;
		var keys = Array();
		for (k in matches) {
			if (matches.hasOwnProperty(k))
				keys.push(k);
		}
		// sort the matched frames by their x location
		// ascending, then width descending
		keys.sort(function(a, b){
			return a - b;
		});
		// Step through frames saving only the biggest bottom-up frames
		// thanks to the sort order. This relies on the tree property
		// where children are always smaller than their parents.
		var fudge = 0.0001;	// JavaScript floating point
		for (var k in keys) {
			var x = parseFloat(keys[k]);
			var w = matches[keys[k]];
			if (x >= lastx + lastw - fudge) {
				count += w;
				lastx = x;
				lastw = w;
			}
		}
		// display matched percent
		matchedtxt.classList.remove("hide");
		var pct = 100 * count / maxwidth;
		if (pct != 100) pct = pct.toFixed(1)
		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
	}
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="630.0" fill="url(#background)"  />
<text id="title" x="600.00" y="24" >Flame Graph</text>
<text id="details" x="10.00" y="613" > </text>
<text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
<text id="search" x="1090.00" y="24" >Search</text>
<text id="ignorecase" x="1174.00" y="24" >ic</text>
<text id="matched" x="1090.00" y="613" > </text>
<g id="frames">
<g >
<title>slot_getallattrs (12,750,000 samples, 0.09%)</title><rect x="1044.4" y="261" width="1.0" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
<text  x="1047.36" y="271.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (3,000,000 samples, 0.02%)</title><rect x="1185.6" y="53" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1188.58" y="63.5" ></text>
</g>
<g >
<title>FileAccess (1,750,000 samples, 0.01%)</title><rect x="1181.3" y="149" width="0.2" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="1184.31" y="159.5" ></text>
</g>
<g >
<title>BufferDescriptorGetBuffer (4,750,000 samples, 0.03%)</title><rect x="1178.7" y="181" width="0.4" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="1181.68" y="191.5" ></text>
</g>
<g >
<title>heap_fetch_next_buffer (131,000,000 samples, 0.89%)</title><rect x="1178.2" y="229" width="10.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1181.18" y="239.5" ></text>
</g>
<g >
<title>ConditionVariableBroadcast (4,000,000 samples, 0.03%)</title><rect x="1179.8" y="181" width="0.4" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
<text  x="1182.85" y="191.5" ></text>
</g>
<g >
<title>PageGetItem (42,000,000 samples, 0.29%)</title><rect x="1174.8" y="229" width="3.4" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
<text  x="1177.80" y="239.5" ></text>
</g>
<g >
<title>CheckBufferIsPinnedOnce (1,250,000 samples, 0.01%)</title><rect x="1184.1" y="101" width="0.1" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
<text  x="1187.07" y="111.5" ></text>
</g>
<g >
<title>_IO_file_write@@GLIBC_2.2.5 (94,000,000 samples, 0.64%)</title><rect x="441.6" y="181" width="7.5" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
<text  x="444.56" y="191.5" ></text>
</g>
<g >
<title>__libc_start_call_main (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="517" width="1179.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="13.30" y="527.5" >__libc_start_call_main</text>
</g>
<g >
<title>LWLockAttemptLock (8,750,000 samples, 0.06%)</title><rect x="1186.8" y="101" width="0.7" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1189.78" y="111.5" ></text>
</g>
<g >
<title>pg_ltoa (1,769,500,000 samples, 12.06%)</title><rect x="722.7" y="213" width="142.3" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
<text  x="725.66" y="223.5" >pg_ltoa</text>
</g>
<g >
<title>list_length (145,750,000 samples, 0.99%)</title><rect x="1032.1" y="261" width="11.8" height="15.0" fill="rgb(234,135,32)" rx="2" ry="2" />
<text  x="1035.14" y="271.5" ></text>
</g>
<g >
<title>__mempcpy_avx_unaligned_erms (5,500,000 samples, 0.04%)</title><rect x="452.7" y="213" width="0.5" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
<text  x="455.72" y="223.5" ></text>
</g>
<g >
<title>ReleaseBuffer (4,750,000 samples, 0.03%)</title><rect x="1168.5" y="213" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1171.55" y="223.5" ></text>
</g>
<g >
<title>PinBufferForBlock (76,250,000 samples, 0.52%)</title><rect x="1182.6" y="149" width="6.1" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
<text  x="1185.58" y="159.5" ></text>
</g>
<g >
<title>MemoryContextSwitchTo (10,250,000 samples, 0.07%)</title><rect x="474.1" y="261" width="0.8" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
<text  x="477.10" y="271.5" ></text>
</g>
<g >
<title>BufferGetBlock (4,500,000 samples, 0.03%)</title><rect x="1173.9" y="213" width="0.4" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
<text  x="1176.93" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (2,250,000 samples, 0.02%)</title><rect x="1187.6" y="85" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1190.57" y="95.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (4,000,000 samples, 0.03%)</title><rect x="1187.2" y="69" width="0.3" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1190.16" y="79.5" ></text>
</g>
<g >
<title>FunctionCall1Coll (4,675,750,000 samples, 31.87%)</title><rect x="488.9" y="245" width="376.1" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
<text  x="491.92" y="255.5" >FunctionCall1Coll</text>
</g>
<g >
<title>LWLockAttemptLock (3,500,000 samples, 0.02%)</title><rect x="1185.1" y="69" width="0.2" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1188.05" y="79.5" ></text>
</g>
<g >
<title>MemoryContextResetOnly (177,750,000 samples, 1.21%)</title><rect x="459.8" y="229" width="14.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
<text  x="462.80" y="239.5" ></text>
</g>
<g >
<title>LockBufHdr (3,500,000 samples, 0.02%)</title><rect x="1185.5" y="85" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1188.54" y="95.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (3,250,000 samples, 0.02%)</title><rect x="1186.3" y="37" width="0.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1189.30" y="47.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (1,750,000 samples, 0.01%)</title><rect x="1180.9" y="117" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1183.89" y="127.5" ></text>
</g>
<g >
<title>GetPrivateRefCount (1,250,000 samples, 0.01%)</title><rect x="1184.1" y="85" width="0.1" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
<text  x="1187.07" y="95.5" ></text>
</g>
<g >
<title>table_scan_getnextslot (393,750,000 samples, 2.68%)</title><rect x="1158.3" y="277" width="31.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="1161.33" y="287.5" >ta..</text>
</g>
<g >
<title>DoCopy (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="309" width="1179.7" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
<text  x="13.30" y="319.5" >DoCopy</text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1169.3" y="181" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1172.29" y="191.5" ></text>
</g>
<g >
<title>read_stream_get_block (1,500,000 samples, 0.01%)</title><rect x="1182.4" y="181" width="0.1" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
<text  x="1185.36" y="191.5" ></text>
</g>
<g >
<title>LWLockRelease (3,250,000 samples, 0.02%)</title><rect x="1187.5" y="117" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1190.49" y="127.5" ></text>
</g>
<g >
<title>hash_bytes_uint32 (1,750,000 samples, 0.01%)</title><rect x="1167.6" y="149" width="0.1" height="15.0" fill="rgb(217,55,13)" rx="2" ry="2" />
<text  x="1170.60" y="159.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1185.1" y="37" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1188.13" y="47.5" ></text>
</g>
<g >
<title>ResourceOwnerForgetBufferIO (2,750,000 samples, 0.02%)</title><rect x="1180.6" y="165" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
<text  x="1183.57" y="175.5" ></text>
</g>
<g >
<title>IncrBufferRefCount (16,500,000 samples, 0.11%)</title><rect x="1167.2" y="213" width="1.3" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
<text  x="1170.22" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (2,500,000 samples, 0.02%)</title><rect x="1187.8" y="101" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1190.85" y="111.5" ></text>
</g>
<g >
<title>StartReadBuffersImpl (76,500,000 samples, 0.52%)</title><rect x="1182.6" y="165" width="6.1" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1185.56" y="175.5" ></text>
</g>
<g >
<title>slot_getsomeattrs (1,366,500,000 samples, 9.31%)</title><rect x="1048.4" y="261" width="109.9" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
<text  x="1051.42" y="271.5" >slot_getsomea..</text>
</g>
<g >
<title>CopySendData (217,250,000 samples, 1.48%)</title><rect x="268.1" y="245" width="17.5" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
<text  x="271.10" y="255.5" ></text>
</g>
<g >
<title>LWLockAcquire (2,250,000 samples, 0.02%)</title><rect x="1188.8" y="213" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1191.81" y="223.5" ></text>
</g>
<g >
<title>PortalRun (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="373" width="1179.7" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
<text  x="13.30" y="383.5" >PortalRun</text>
</g>
<g >
<title>hash_search_with_hash_value (4,000,000 samples, 0.03%)</title><rect x="1182.8" y="101" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1185.82" y="111.5" ></text>
</g>
<g >
<title>mdreadv (12,000,000 samples, 0.08%)</title><rect x="1181.2" y="181" width="1.0" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
<text  x="1184.23" y="191.5" ></text>
</g>
<g >
<title>heap_scan_stream_read_next_serial (1,500,000 samples, 0.01%)</title><rect x="1182.4" y="165" width="0.1" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
<text  x="1185.36" y="175.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (9,500,000 samples, 0.06%)</title><rect x="1183.2" y="101" width="0.7" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1186.16" y="111.5" ></text>
</g>
<g >
<title>_IO_file_overflow@@GLIBC_2.2.5 (3,250,000 samples, 0.02%)</title><rect x="449.1" y="213" width="0.3" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
<text  x="452.12" y="223.5" ></text>
</g>
<g >
<title>ResourceOwnerEnlarge (2,000,000 samples, 0.01%)</title><rect x="1181.0" y="133" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
<text  x="1184.03" y="143.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (15,500,000 samples, 0.11%)</title><rect x="1167.3" y="197" width="1.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1170.26" y="207.5" ></text>
</g>
<g >
<title>read_stream_start_pending_read (77,500,000 samples, 0.53%)</title><rect x="1182.5" y="197" width="6.2" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
<text  x="1185.48" y="207.5" ></text>
</g>
<g >
<title>pgstat_progress_update_param (52,750,000 samples, 0.36%)</title><rect x="453.2" y="245" width="4.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="456.17" y="255.5" ></text>
</g>
<g >
<title>hash_initial_lookup (2,750,000 samples, 0.02%)</title><rect x="1168.3" y="165" width="0.2" height="15.0" fill="rgb(251,214,51)" rx="2" ry="2" />
<text  x="1171.28" y="175.5" ></text>
</g>
<g >
<title>LockBufHdr (2,250,000 samples, 0.02%)</title><rect x="1180.4" y="165" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1183.39" y="175.5" ></text>
</g>
<g >
<title>CopyOneRowTo (12,855,000,000 samples, 87.62%)</title><rect x="11.5" y="277" width="1033.9" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="14.47" y="287.5" >CopyOneRowTo</text>
</g>
<g >
<title>page_collect_tuples (10,250,000 samples, 0.07%)</title><rect x="1189.2" y="213" width="0.8" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
<text  x="1192.18" y="223.5" ></text>
</g>
<g >
<title>fetch_att (530,750,000 samples, 3.62%)</title><rect x="1115.6" y="197" width="42.7" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
<text  x="1118.64" y="207.5" >fetc..</text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (1,500,000 samples, 0.01%)</title><rect x="1180.4" y="149" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1183.45" y="159.5" ></text>
</g>
<g >
<title>CopyAttributeOutText (1,615,250,000 samples, 11.01%)</title><rect x="155.7" y="261" width="129.9" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
<text  x="158.66" y="271.5" >CopyAttributeOut..</text>
</g>
<g >
<title>ReleaseBuffer (5,250,000 samples, 0.04%)</title><rect x="1178.7" y="213" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1181.66" y="223.5" ></text>
</g>
<g >
<title>MemoryContextReset (207,500,000 samples, 1.41%)</title><rect x="457.4" y="261" width="16.7" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="460.41" y="271.5" ></text>
</g>
<g >
<title>UnpinBuffer (5,250,000 samples, 0.04%)</title><rect x="1178.7" y="197" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1181.66" y="207.5" ></text>
</g>
<g >
<title>BufferGetBlockNumber (1,500,000 samples, 0.01%)</title><rect x="1178.5" y="213" width="0.2" height="15.0" fill="rgb(206,7,1)" rx="2" ry="2" />
<text  x="1181.54" y="223.5" ></text>
</g>
<g >
<title>__libc_pread (4,750,000 samples, 0.03%)</title><rect x="1181.5" y="133" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
<text  x="1184.45" y="143.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (9,500,000 samples, 0.06%)</title><rect x="1167.7" y="181" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1170.74" y="191.5" ></text>
</g>
<g >
<title>GetVictimBuffer (33,250,000 samples, 0.23%)</title><rect x="1183.9" y="117" width="2.7" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
<text  x="1186.93" y="127.5" ></text>
</g>
<g >
<title>__GI___libc_write (92,250,000 samples, 0.63%)</title><rect x="441.7" y="165" width="7.4" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
<text  x="444.70" y="175.5" ></text>
</g>
<g >
<title>WaitReadBuffers (30,750,000 samples, 0.21%)</title><rect x="1179.8" y="197" width="2.4" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="1182.77" y="207.5" ></text>
</g>
<g >
<title>pg_ultoa_n (1,147,750,000 samples, 7.82%)</title><rect x="772.7" y="181" width="92.3" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="775.67" y="191.5" >pg_ultoa_n</text>
</g>
<g >
<title>StrategyGetBuffer (5,500,000 samples, 0.04%)</title><rect x="1186.1" y="101" width="0.5" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
<text  x="1189.12" y="111.5" ></text>
</g>
<g >
<title>LockBufHdr (2,000,000 samples, 0.01%)</title><rect x="1180.9" y="133" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1183.87" y="143.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,500,000 samples, 0.02%)</title><rect x="1169.1" y="197" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1172.09" y="207.5" ></text>
</g>
<g >
<title>resetStringInfo (6,250,000 samples, 0.04%)</title><rect x="1043.9" y="261" width="0.5" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="1046.86" y="271.5" ></text>
</g>
<g >
<title>main (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="501" width="1179.7" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="13.30" y="511.5" >main</text>
</g>
<g >
<title>UnpinBufferNoOwner (6,000,000 samples, 0.04%)</title><rect x="1168.9" y="213" width="0.5" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
<text  x="1171.95" y="223.5" ></text>
</g>
<g >
<title>slot_getsomeattrs_int (1,361,750,000 samples, 9.28%)</title><rect x="1048.8" y="245" width="109.5" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1051.81" y="255.5" >slot_getsomea..</text>
</g>
<g >
<title>__memcmp_avx2_movbe (2,250,000 samples, 0.02%)</title><rect x="1184.8" y="53" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
<text  x="1187.79" y="63.5" ></text>
</g>
<g >
<title>hash_search (2,750,000 samples, 0.02%)</title><rect x="1167.5" y="181" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
<text  x="1170.52" y="191.5" ></text>
</g>
<g >
<title>slot_getallattrs (1,371,000,000 samples, 9.34%)</title><rect x="1048.1" y="277" width="110.2" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
<text  x="1051.06" y="287.5" >slot_getallat..</text>
</g>
<g >
<title>BlockIdSet (2,750,000 samples, 0.02%)</title><rect x="1174.3" y="213" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1177.30" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1187.8" y="85" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1190.85" y="95.5" ></text>
</g>
<g >
<title>pg_preadv (8,750,000 samples, 0.06%)</title><rect x="1181.5" y="149" width="0.7" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
<text  x="1184.45" y="159.5" ></text>
</g>
<g >
<title>ResourceOwnerForgetBuffer (4,750,000 samples, 0.03%)</title><rect x="1168.5" y="181" width="0.4" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
<text  x="1171.55" y="191.5" ></text>
</g>
<g >
<title>_IO_do_write@@GLIBC_2.2.5 (97,250,000 samples, 0.66%)</title><rect x="441.3" y="213" width="7.8" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
<text  x="444.30" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (2,250,000 samples, 0.02%)</title><rect x="1187.6" y="101" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1190.57" y="111.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (426,500,000 samples, 2.91%)</title><rect x="935.3" y="245" width="34.3" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
<text  x="938.34" y="255.5" >__..</text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (2,250,000 samples, 0.02%)</title><rect x="1187.6" y="69" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1190.57" y="79.5" ></text>
</g>
<g >
<title>ExecStoreBufferHeapTuple (87,000,000 samples, 0.59%)</title><rect x="1162.4" y="245" width="7.0" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
<text  x="1165.43" y="255.5" ></text>
</g>
<g >
<title>LWLockAcquire (10,750,000 samples, 0.07%)</title><rect x="1186.6" y="117" width="0.9" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1189.62" y="127.5" ></text>
</g>
<g >
<title>tts_buffer_heap_getsomeattrs (1,334,750,000 samples, 9.10%)</title><rect x="1051.0" y="229" width="107.3" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
<text  x="1053.98" y="239.5" >tts_buffer_he..</text>
</g>
<g >
<title>pg_ultoa_n (1,285,000,000 samples, 8.76%)</title><rect x="761.6" y="197" width="103.4" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="764.63" y="207.5" >pg_ultoa_n</text>
</g>
<g >
<title>OutputFunctionCall (4,849,750,000 samples, 33.06%)</title><rect x="474.9" y="261" width="390.1" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
<text  x="477.92" y="271.5" >OutputFunctionCall</text>
</g>
<g >
<title>postgres (14,671,250,000 samples, 100.00%)</title><rect x="10.0" y="565" width="1180.0" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
<text  x="13.00" y="575.5" >postgres</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1185.4" y="53" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1188.40" y="63.5" ></text>
</g>
<g >
<title>__libc_start_main@@GLIBC_2.34 (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="533" width="1179.7" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
<text  x="13.30" y="543.5" >__libc_start_main@@GLIBC_2.34</text>
</g>
<g >
<title>_IO_default_xsputn (2,500,000 samples, 0.02%)</title><rect x="441.1" y="213" width="0.2" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
<text  x="444.10" y="223.5" ></text>
</g>
<g >
<title>_IO_fwrite (295,250,000 samples, 2.01%)</title><rect x="429.4" y="245" width="23.8" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="432.42" y="255.5" >_..</text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (1,750,000 samples, 0.01%)</title><rect x="1169.3" y="197" width="0.1" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1172.29" y="207.5" ></text>
</g>
<g >
<title>hash_bytes (2,000,000 samples, 0.01%)</title><rect x="1185.8" y="85" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
<text  x="1188.84" y="95.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (35,000,000 samples, 0.24%)</title><rect x="449.4" y="213" width="2.8" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
<text  x="452.39" y="223.5" ></text>
</g>
<g >
<title>MemoryContextCallResetCallbacks (2,000,000 samples, 0.01%)</title><rect x="473.9" y="213" width="0.2" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
<text  x="476.94" y="223.5" ></text>
</g>
<g >
<title>PortalRunUtility (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="341" width="1179.7" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
<text  x="13.30" y="351.5" >PortalRunUtility</text>
</g>
<g >
<title>LockBufHdr (3,750,000 samples, 0.03%)</title><rect x="1187.7" y="117" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1190.75" y="127.5" ></text>
</g>
<g >
<title>MemoryChunkSetHdrMask (298,250,000 samples, 2.03%)</title><rect x="658.9" y="181" width="24.0" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
<text  x="661.92" y="191.5" >M..</text>
</g>
<g >
<title>heapgettup_pagemode (255,750,000 samples, 1.74%)</title><rect x="1169.4" y="245" width="20.6" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
<text  x="1172.43" y="255.5" ></text>
</g>
<g >
<title>DatumGetInt32 (36,500,000 samples, 0.25%)</title><rect x="694.4" y="213" width="2.9" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="697.39" y="223.5" ></text>
</g>
<g >
<title>LWLockAttemptLock (1,750,000 samples, 0.01%)</title><rect x="1188.9" y="197" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1191.85" y="207.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (2,500,000 samples, 0.02%)</title><rect x="1185.1" y="53" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1188.13" y="63.5" ></text>
</g>
<g >
<title>all (14,671,250,000 samples, 100%)</title><rect x="10.0" y="581" width="1180.0" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
<text  x="13.00" y="591.5" ></text>
</g>
<g >
<title>LWLockAcquire (4,250,000 samples, 0.03%)</title><rect x="1185.0" y="85" width="0.3" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1187.99" y="95.5" ></text>
</g>
<g >
<title>Int32GetDatum (101,500,000 samples, 0.69%)</title><rect x="1150.2" y="181" width="8.1" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="1153.17" y="191.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (1,750,000 samples, 0.01%)</title><rect x="1174.6" y="213" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1177.64" y="223.5" ></text>
</g>
<g >
<title>decimalLength32 (254,750,000 samples, 1.74%)</title><rect x="844.5" y="165" width="20.5" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
<text  x="847.50" y="175.5" ></text>
</g>
<g >
<title>slot_getsomeattrs (11,750,000 samples, 0.08%)</title><rect x="1044.4" y="245" width="1.0" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
<text  x="1047.44" y="255.5" ></text>
</g>
<g >
<title>new_do_write (96,000,000 samples, 0.65%)</title><rect x="441.4" y="197" width="7.7" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
<text  x="444.40" y="207.5" ></text>
</g>
<g >
<title>_IO_ferror (14,750,000 samples, 0.10%)</title><rect x="428.2" y="245" width="1.2" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
<text  x="431.23" y="255.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1174.6" y="181" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1177.64" y="191.5" ></text>
</g>
<g >
<title>tts_buffer_heap_store_tuple (69,250,000 samples, 0.47%)</title><rect x="1163.9" y="229" width="5.5" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
<text  x="1166.86" y="239.5" ></text>
</g>
<g >
<title>_start (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="549" width="1179.7" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
<text  x="13.30" y="559.5" >_start</text>
</g>
<g >
<title>StartReadBuffers (76,500,000 samples, 0.52%)</title><rect x="1182.6" y="181" width="6.1" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
<text  x="1185.56" y="191.5" ></text>
</g>
<g >
<title>postmaster_child_launch (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="437" width="1179.7" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
<text  x="13.30" y="447.5" >postmaster_child_launch</text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1185.4" y="37" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1188.40" y="47.5" ></text>
</g>
<g >
<title>PostmasterMain (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="485" width="1179.7" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
<text  x="13.30" y="495.5" >PostmasterMain</text>
</g>
<g >
<title>GetPrivateRefCountEntry (1,250,000 samples, 0.01%)</title><rect x="1184.1" y="69" width="0.1" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1187.07" y="79.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (2,000,000 samples, 0.01%)</title><rect x="1188.2" y="85" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1191.23" y="95.5" ></text>
</g>
<g >
<title>ResourceOwnerForget (2,500,000 samples, 0.02%)</title><rect x="1180.6" y="149" width="0.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
<text  x="1183.59" y="159.5" ></text>
</g>
<g >
<title>GetBufferFromRing (4,250,000 samples, 0.03%)</title><rect x="1186.2" y="85" width="0.4" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1189.22" y="95.5" ></text>
</g>
<g >
<title>palloc (315,000,000 samples, 2.15%)</title><rect x="697.3" y="213" width="25.4" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
<text  x="700.33" y="223.5" >p..</text>
</g>
<g >
<title>BufTableLookup (9,750,000 samples, 0.07%)</title><rect x="1183.1" y="117" width="0.8" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
<text  x="1186.14" y="127.5" ></text>
</g>
<g >
<title>DoCopyTo (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="293" width="1179.7" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
<text  x="13.30" y="303.5" >DoCopyTo</text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,500,000 samples, 0.04%)</title><rect x="1180.8" y="181" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
<text  x="1183.79" y="191.5" ></text>
</g>
<g >
<title>PortalRunMulti (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="357" width="1179.7" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
<text  x="13.30" y="367.5" >PortalRunMulti</text>
</g>
<g >
<title>read_stream_look_ahead (3,000,000 samples, 0.02%)</title><rect x="1182.2" y="197" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1185.24" y="207.5" ></text>
</g>
<g >
<title>BufTableDelete (10,000,000 samples, 0.07%)</title><rect x="1184.2" y="85" width="0.8" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
<text  x="1187.19" y="95.5" ></text>
</g>
<g >
<title>MemoryContextResetOnly (177,750,000 samples, 1.21%)</title><rect x="459.8" y="245" width="14.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
<text  x="462.80" y="255.5" ></text>
</g>
<g >
<title>PinBuffer_Locked (1,250,000 samples, 0.01%)</title><rect x="1186.0" y="101" width="0.1" height="15.0" fill="rgb(218,60,14)" rx="2" ry="2" />
<text  x="1189.00" y="111.5" ></text>
</g>
<g >
<title>AllocSetFreeIndex (142,750,000 samples, 0.97%)</title><rect x="682.9" y="197" width="11.5" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
<text  x="685.91" y="207.5" ></text>
</g>
<g >
<title>CopySendChar (92,750,000 samples, 0.63%)</title><rect x="420.8" y="245" width="7.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="423.77" y="255.5" ></text>
</g>
<g >
<title>ReservePrivateRefCountEntry (4,250,000 samples, 0.03%)</title><rect x="1188.0" y="117" width="0.4" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1191.05" y="127.5" ></text>
</g>
<g >
<title>UnpinBuffer (4,750,000 samples, 0.03%)</title><rect x="1168.5" y="197" width="0.4" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1171.55" y="207.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (3,250,000 samples, 0.02%)</title><rect x="1186.3" y="53" width="0.3" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1189.30" y="63.5" ></text>
</g>
<g >
<title>CopySendChar (1,526,000,000 samples, 10.40%)</title><rect x="285.6" y="261" width="122.7" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="288.57" y="271.5" >CopySendChar</text>
</g>
<g >
<title>exec_simple_query (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="389" width="1179.7" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
<text  x="13.30" y="399.5" >exec_simple_query</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (1,750,000 samples, 0.01%)</title><rect x="1185.4" y="69" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1188.40" y="79.5" ></text>
</g>
<g >
<title>preadv64 (4,000,000 samples, 0.03%)</title><rect x="1181.8" y="133" width="0.4" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
<text  x="1184.84" y="143.5" ></text>
</g>
<g >
<title>standard_ProcessUtility (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="325" width="1179.7" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
<text  x="13.30" y="335.5" >standard_ProcessUtility</text>
</g>
<g >
<title>LockBufHdr (4,250,000 samples, 0.03%)</title><rect x="1186.2" y="69" width="0.4" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1189.22" y="79.5" ></text>
</g>
<g >
<title>ServerLoop (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="469" width="1179.7" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
<text  x="13.30" y="479.5" >ServerLoop</text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (4,000,000 samples, 0.03%)</title><rect x="1187.2" y="85" width="0.3" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1190.16" y="95.5" ></text>
</g>
<g >
<title>heap_getnextslot (380,000,000 samples, 2.59%)</title><rect x="1159.4" y="261" width="30.6" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
<text  x="1162.44" y="271.5" >he..</text>
</g>
<g >
<title>_IO_file_xsputn@@GLIBC_2.2.5 (3,500,000 samples, 0.02%)</title><rect x="10.0" y="533" width="0.3" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
<text  x="13.02" y="543.5" ></text>
</g>
<g >
<title>AllocSetReset (167,250,000 samples, 1.14%)</title><rect x="460.5" y="213" width="13.4" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
<text  x="463.49" y="223.5" ></text>
</g>
<g >
<title>UnpinBufferNoOwner (3,000,000 samples, 0.02%)</title><rect x="1179.1" y="213" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
<text  x="1182.08" y="223.5" ></text>
</g>
<g >
<title>TerminateBufferIO (6,750,000 samples, 0.05%)</title><rect x="1180.2" y="181" width="0.6" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
<text  x="1183.25" y="191.5" ></text>
</g>
<g >
<title>LWLockRelease (2,500,000 samples, 0.02%)</title><rect x="1185.3" y="85" width="0.2" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1188.34" y="95.5" ></text>
</g>
<g >
<title>PostgresMain (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="405" width="1179.7" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="13.30" y="415.5" >PostgresMain</text>
</g>
<g >
<title>BackendStartup (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="453" width="1179.7" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
<text  x="13.30" y="463.5" >BackendStartup</text>
</g>
<g >
<title>read_stream_next_buffer (116,750,000 samples, 0.80%)</title><rect x="1179.3" y="213" width="9.4" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
<text  x="1182.32" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (1,250,000 samples, 0.01%)</title><rect x="1188.9" y="165" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1191.89" y="175.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,250,000 samples, 0.02%)</title><rect x="1179.1" y="197" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1182.14" y="207.5" ></text>
</g>
<g >
<title>heap_prepare_pagescan (16,000,000 samples, 0.11%)</title><rect x="1188.7" y="229" width="1.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
<text  x="1191.71" y="239.5" ></text>
</g>
<g >
<title>FileReadV (11,250,000 samples, 0.08%)</title><rect x="1181.3" y="165" width="0.9" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
<text  x="1184.27" y="175.5" ></text>
</g>
<g >
<title>LWLockRelease (3,250,000 samples, 0.02%)</title><rect x="1174.5" y="229" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1177.52" y="239.5" ></text>
</g>
<g >
<title>_IO_file_xsputn@@GLIBC_2.2.5 (204,750,000 samples, 1.40%)</title><rect x="436.7" y="229" width="16.5" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
<text  x="439.70" y="239.5" ></text>
</g>
<g >
<title>uint32_hash (1,750,000 samples, 0.01%)</title><rect x="1167.6" y="165" width="0.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="1170.60" y="175.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (3,000,000 samples, 0.02%)</title><rect x="1185.6" y="69" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1188.58" y="79.5" ></text>
</g>
<g >
<title>AllocSetAllocChunkFromBlock (425,000,000 samples, 2.90%)</title><rect x="648.7" y="197" width="34.2" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
<text  x="651.73" y="207.5" >Al..</text>
</g>
<g >
<title>StartBufferIO (5,500,000 samples, 0.04%)</title><rect x="1180.8" y="149" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
<text  x="1183.79" y="159.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1180.9" y="101" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1183.89" y="111.5" ></text>
</g>
<g >
<title>hash_search (1,250,000 samples, 0.01%)</title><rect x="1188.1" y="85" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
<text  x="1191.13" y="95.5" ></text>
</g>
<g >
<title>BackendMain (14,667,500,000 samples, 99.97%)</title><rect x="10.3" y="421" width="1179.7" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
<text  x="13.30" y="431.5" >BackendMain</text>
</g>
<g >
<title>ItemPointerSet (2,750,000 samples, 0.02%)</title><rect x="1174.3" y="229" width="0.2" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
<text  x="1177.30" y="239.5" ></text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,500,000 samples, 0.04%)</title><rect x="1180.8" y="165" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
<text  x="1183.79" y="175.5" ></text>
</g>
<g >
<title>appendBinaryStringInfo (2,078,250,000 samples, 14.17%)</title><rect x="865.0" y="261" width="167.1" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
<text  x="867.98" y="271.5" >appendBinaryStringInfo</text>
</g>
<g >
<title>InvalidateVictimBuffer (22,750,000 samples, 0.16%)</title><rect x="1184.2" y="101" width="1.8" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
<text  x="1187.17" y="111.5" ></text>
</g>
<g >
<title>int4out (4,112,750,000 samples, 28.03%)</title><rect x="534.2" y="229" width="330.8" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
<text  x="537.20" y="239.5" >int4out</text>
</g>
<g >
<title>__memcmp_avx2_movbe (1,750,000 samples, 0.01%)</title><rect x="1168.1" y="165" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
<text  x="1171.14" y="175.5" ></text>
</g>
<g >
<title>CopySendEndOfRow (610,500,000 samples, 4.16%)</title><rect x="408.3" y="261" width="49.1" height="15.0" fill="rgb(226,97,23)" rx="2" ry="2" />
<text  x="411.31" y="271.5" >Copy..</text>
</g>
<g >
<title>_IO_fwrite (3,500,000 samples, 0.02%)</title><rect x="10.0" y="549" width="0.3" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="13.02" y="559.5" ></text>
</g>
<g >
<title>ResourceOwnerForget (4,500,000 samples, 0.03%)</title><rect x="1168.6" y="165" width="0.3" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
<text  x="1171.57" y="175.5" ></text>
</g>
<g >
<title>BufferAlloc (75,000,000 samples, 0.51%)</title><rect x="1182.6" y="133" width="6.1" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
<text  x="1185.62" y="143.5" ></text>
</g>
<g >
<title>get_hash_entry (3,000,000 samples, 0.02%)</title><rect x="1182.9" y="85" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
<text  x="1185.88" y="95.5" ></text>
</g>
<g >
<title>pgstat_progress_update_param (33,250,000 samples, 0.23%)</title><rect x="1045.4" y="277" width="2.7" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="1048.39" y="287.5" ></text>
</g>
<g >
<title>AllocSetAlloc (1,231,250,000 samples, 8.39%)</title><rect x="595.4" y="213" width="99.0" height="15.0" fill="rgb(231,124,29)" rx="2" ry="2" />
<text  x="598.37" y="223.5" >AllocSetAlloc</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1174.6" y="197" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1177.64" y="207.5" ></text>
</g>
<g >
<title>enlargeStringInfo (739,250,000 samples, 5.04%)</title><rect x="969.6" y="245" width="59.5" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
<text  x="972.64" y="255.5" >enlarg..</text>
</g>
<g >
<title>BufTableInsert (4,000,000 samples, 0.03%)</title><rect x="1182.8" y="117" width="0.3" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
<text  x="1185.82" y="127.5" ></text>
</g>
<g >
<title>memcpy@plt (37,750,000 samples, 0.26%)</title><rect x="1029.1" y="245" width="3.0" height="15.0" fill="rgb(224,88,21)" rx="2" ry="2" />
<text  x="1032.10" y="255.5" ></text>
</g>
<g >
<title>slot_deform_heap_tuple (1,308,500,000 samples, 8.92%)</title><rect x="1053.1" y="213" width="105.2" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
<text  x="1056.09" y="223.5" >slot_deform_..</text>
</g>
<g >
<title>hash_bytes (2,250,000 samples, 0.02%)</title><rect x="1188.5" y="117" width="0.1" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
<text  x="1191.45" y="127.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (9,750,000 samples, 0.07%)</title><rect x="1184.2" y="69" width="0.8" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1187.21" y="79.5" ></text>
</g>
<g >
<title>ReservePrivateRefCountEntry (4,000,000 samples, 0.03%)</title><rect x="1188.1" y="101" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1191.07" y="111.5" ></text>
</g>
<g >
<title>__mempcpy@plt (6,500,000 samples, 0.04%)</title><rect x="452.2" y="213" width="0.5" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
<text  x="455.20" y="223.5" ></text>
</g>
<g >
<title>heap_page_prune_opt (1,750,000 samples, 0.01%)</title><rect x="1189.0" y="213" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
<text  x="1192.03" y="223.5" ></text>
</g>
<g >
<title>BufferGetPage (4,500,000 samples, 0.03%)</title><rect x="1173.9" y="229" width="0.4" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1176.93" y="239.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (1,500,000 samples, 0.01%)</title><rect x="1180.4" y="133" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1183.45" y="143.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (1,250,000 samples, 0.01%)</title><rect x="1188.9" y="181" width="0.1" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1191.89" y="191.5" ></text>
</g>
</g>
</svg>
patched.svgimage/svg+xml; name=patched.svgDownload
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="1200" height="630" onload="init(evt)" viewBox="0 0 1200 630" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
<!-- NOTES:  -->
<defs>
	<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
		<stop stop-color="#eeeeee" offset="5%" />
		<stop stop-color="#eeeeb0" offset="95%" />
	</linearGradient>
</defs>
<style type="text/css">
	text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
	#search, #ignorecase { opacity:0.1; cursor:pointer; }
	#search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
	#subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
	#title { text-anchor:middle; font-size:17px}
	#unzoom { cursor:pointer; }
	#frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
	.hide { display:none; }
	.parent { opacity:0.5; }
</style>
<script type="text/ecmascript">
<![CDATA[
	"use strict";
	var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
	function init(evt) {
		details = document.getElementById("details").firstChild;
		searchbtn = document.getElementById("search");
		ignorecaseBtn = document.getElementById("ignorecase");
		unzoombtn = document.getElementById("unzoom");
		matchedtxt = document.getElementById("matched");
		svg = document.getElementsByTagName("svg")[0];
		searching = 0;
		currentSearchTerm = null;

		// use GET parameters to restore a flamegraphs state.
		var params = get_params();
		if (params.x && params.y)
			zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
                if (params.s) search(params.s);
	}

	// event listeners
	window.addEventListener("click", function(e) {
		var target = find_group(e.target);
		if (target) {
			if (target.nodeName == "a") {
				if (e.ctrlKey === false) return;
				e.preventDefault();
			}
			if (target.classList.contains("parent")) unzoom(true);
			zoom(target);
			if (!document.querySelector('.parent')) {
				// we have basically done a clearzoom so clear the url
				var params = get_params();
				if (params.x) delete params.x;
				if (params.y) delete params.y;
				history.replaceState(null, null, parse_params(params));
				unzoombtn.classList.add("hide");
				return;
			}

			// set parameters for zoom state
			var el = target.querySelector("rect");
			if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
				var params = get_params()
				params.x = el.attributes._orig_x.value;
				params.y = el.attributes.y.value;
				history.replaceState(null, null, parse_params(params));
			}
		}
		else if (e.target.id == "unzoom") clearzoom();
		else if (e.target.id == "search") search_prompt();
		else if (e.target.id == "ignorecase") toggle_ignorecase();
	}, false)

	// mouse-over for info
	// show
	window.addEventListener("mouseover", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = "Function: " + g_to_text(target);
	}, false)

	// clear
	window.addEventListener("mouseout", function(e) {
		var target = find_group(e.target);
		if (target) details.nodeValue = ' ';
	}, false)

	// ctrl-F for search
	// ctrl-I to toggle case-sensitive search
	window.addEventListener("keydown",function (e) {
		if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
			e.preventDefault();
			search_prompt();
		}
		else if (e.ctrlKey && e.keyCode === 73) {
			e.preventDefault();
			toggle_ignorecase();
		}
	}, false)

	// functions
	function get_params() {
		var params = {};
		var paramsarr = window.location.search.substr(1).split('&');
		for (var i = 0; i < paramsarr.length; ++i) {
			var tmp = paramsarr[i].split("=");
			if (!tmp[0] || !tmp[1]) continue;
			params[tmp[0]]  = decodeURIComponent(tmp[1]);
		}
		return params;
	}
	function parse_params(params) {
		var uri = "?";
		for (var key in params) {
			uri += key + '=' + encodeURIComponent(params[key]) + '&';
		}
		if (uri.slice(-1) == "&")
			uri = uri.substring(0, uri.length - 1);
		if (uri == '?')
			uri = window.location.href.split('?')[0];
		return uri;
	}
	function find_child(node, selector) {
		var children = node.querySelectorAll(selector);
		if (children.length) return children[0];
	}
	function find_group(node) {
		var parent = node.parentElement;
		if (!parent) return;
		if (parent.id == "frames") return node;
		return find_group(parent);
	}
	function orig_save(e, attr, val) {
		if (e.attributes["_orig_" + attr] != undefined) return;
		if (e.attributes[attr] == undefined) return;
		if (val == undefined) val = e.attributes[attr].value;
		e.setAttribute("_orig_" + attr, val);
	}
	function orig_load(e, attr) {
		if (e.attributes["_orig_"+attr] == undefined) return;
		e.attributes[attr].value = e.attributes["_orig_" + attr].value;
		e.removeAttribute("_orig_"+attr);
	}
	function g_to_text(e) {
		var text = find_child(e, "title").firstChild.nodeValue;
		return (text)
	}
	function g_to_func(e) {
		var func = g_to_text(e);
		// if there's any manipulation we want to do to the function
		// name before it's searched, do it here before returning.
		return (func);
	}
	function update_text(e) {
		var r = find_child(e, "rect");
		var t = find_child(e, "text");
		var w = parseFloat(r.attributes.width.value) -3;
		var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
		t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;

		// Smaller than this size won't fit anything
		if (w < 2 * 12 * 0.59) {
			t.textContent = "";
			return;
		}

		t.textContent = txt;
		var sl = t.getSubStringLength(0, txt.length);
		// check if only whitespace or if we can fit the entire string into width w
		if (/^ *$/.test(txt) || sl < w)
			return;

		// this isn't perfect, but gives a good starting point
		// and avoids calling getSubStringLength too often
		var start = Math.floor((w/sl) * txt.length);
		for (var x = start; x > 0; x = x-2) {
			if (t.getSubStringLength(0, x + 2) <= w) {
				t.textContent = txt.substring(0, x) + "..";
				return;
			}
		}
		t.textContent = "";
	}

	// zoom
	function zoom_reset(e) {
		if (e.attributes != undefined) {
			orig_load(e, "x");
			orig_load(e, "width");
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_reset(c[i]);
		}
	}
	function zoom_child(e, x, ratio) {
		if (e.attributes != undefined) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
				if (e.tagName == "text")
					e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
			}
		}

		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_child(c[i], x - 10, ratio);
		}
	}
	function zoom_parent(e) {
		if (e.attributes) {
			if (e.attributes.x != undefined) {
				orig_save(e, "x");
				e.attributes.x.value = 10;
			}
			if (e.attributes.width != undefined) {
				orig_save(e, "width");
				e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
			}
		}
		if (e.childNodes == undefined) return;
		for (var i = 0, c = e.childNodes; i < c.length; i++) {
			zoom_parent(c[i]);
		}
	}
	function zoom(node) {
		var attr = find_child(node, "rect").attributes;
		var width = parseFloat(attr.width.value);
		var xmin = parseFloat(attr.x.value);
		var xmax = parseFloat(xmin + width);
		var ymin = parseFloat(attr.y.value);
		var ratio = (svg.width.baseVal.value - 2 * 10) / width;

		// XXX: Workaround for JavaScript float issues (fix me)
		var fudge = 0.0001;

		unzoombtn.classList.remove("hide");

		var el = document.getElementById("frames").children;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var a = find_child(e, "rect").attributes;
			var ex = parseFloat(a.x.value);
			var ew = parseFloat(a.width.value);
			var upstack;
			// Is it an ancestor
			if (0 == 0) {
				upstack = parseFloat(a.y.value) > ymin;
			} else {
				upstack = parseFloat(a.y.value) < ymin;
			}
			if (upstack) {
				// Direct ancestor
				if (ex <= xmin && (ex+ew+fudge) >= xmax) {
					e.classList.add("parent");
					zoom_parent(e);
					update_text(e);
				}
				// not in current path
				else
					e.classList.add("hide");
			}
			// Children maybe
			else {
				// no common path
				if (ex < xmin || ex + fudge >= xmax) {
					e.classList.add("hide");
				}
				else {
					zoom_child(e, xmin, ratio);
					update_text(e);
				}
			}
		}
		search();
	}
	function unzoom(dont_update_text) {
		unzoombtn.classList.add("hide");
		var el = document.getElementById("frames").children;
		for(var i = 0; i < el.length; i++) {
			el[i].classList.remove("parent");
			el[i].classList.remove("hide");
			zoom_reset(el[i]);
			if(!dont_update_text) update_text(el[i]);
		}
		search();
	}
	function clearzoom() {
		unzoom();

		// remove zoom state
		var params = get_params();
		if (params.x) delete params.x;
		if (params.y) delete params.y;
		history.replaceState(null, null, parse_params(params));
	}

	// search
	function toggle_ignorecase() {
		ignorecase = !ignorecase;
		if (ignorecase) {
			ignorecaseBtn.classList.add("show");
		} else {
			ignorecaseBtn.classList.remove("show");
		}
		reset_search();
		search();
	}
	function reset_search() {
		var el = document.querySelectorAll("#frames rect");
		for (var i = 0; i < el.length; i++) {
			orig_load(el[i], "fill")
		}
		var params = get_params();
		delete params.s;
		history.replaceState(null, null, parse_params(params));
	}
	function search_prompt() {
		if (!searching) {
			var term = prompt("Enter a search term (regexp " +
			    "allowed, eg: ^ext4_)"
			    + (ignorecase ? ", ignoring case" : "")
			    + "\nPress Ctrl-i to toggle case sensitivity", "");
			if (term != null) search(term);
		} else {
			reset_search();
			searching = 0;
			currentSearchTerm = null;
			searchbtn.classList.remove("show");
			searchbtn.firstChild.nodeValue = "Search"
			matchedtxt.classList.add("hide");
			matchedtxt.firstChild.nodeValue = ""
		}
	}
	function search(term) {
		if (term) currentSearchTerm = term;

		var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
		var el = document.getElementById("frames").children;
		var matches = new Object();
		var maxwidth = 0;
		for (var i = 0; i < el.length; i++) {
			var e = el[i];
			var func = g_to_func(e);
			var rect = find_child(e, "rect");
			if (func == null || rect == null)
				continue;

			// Save max width. Only works as we have a root frame
			var w = parseFloat(rect.attributes.width.value);
			if (w > maxwidth)
				maxwidth = w;

			if (func.match(re)) {
				// highlight
				var x = parseFloat(rect.attributes.x.value);
				orig_save(rect, "fill");
				rect.attributes.fill.value = "rgb(230,0,230)";

				// remember matches
				if (matches[x] == undefined) {
					matches[x] = w;
				} else {
					if (w > matches[x]) {
						// overwrite with parent
						matches[x] = w;
					}
				}
				searching = 1;
			}
		}
		if (!searching)
			return;
		var params = get_params();
		params.s = currentSearchTerm;
		history.replaceState(null, null, parse_params(params));

		searchbtn.classList.add("show");
		searchbtn.firstChild.nodeValue = "Reset Search";

		// calculate percent matched, excluding vertical overlap
		var count = 0;
		var lastx = -1;
		var lastw = 0;
		var keys = Array();
		for (k in matches) {
			if (matches.hasOwnProperty(k))
				keys.push(k);
		}
		// sort the matched frames by their x location
		// ascending, then width descending
		keys.sort(function(a, b){
			return a - b;
		});
		// Step through frames saving only the biggest bottom-up frames
		// thanks to the sort order. This relies on the tree property
		// where children are always smaller than their parents.
		var fudge = 0.0001;	// JavaScript floating point
		for (var k in keys) {
			var x = parseFloat(keys[k]);
			var w = matches[keys[k]];
			if (x >= lastx + lastw - fudge) {
				count += w;
				lastx = x;
				lastw = w;
			}
		}
		// display matched percent
		matchedtxt.classList.remove("hide");
		var pct = 100 * count / maxwidth;
		if (pct != 100) pct = pct.toFixed(1)
		matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
	}
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="630.0" fill="url(#background)"  />
<text id="title" x="600.00" y="24" >Flame Graph</text>
<text id="details" x="10.00" y="613" > </text>
<text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
<text id="search" x="1090.00" y="24" >Search</text>
<text id="ignorecase" x="1174.00" y="24" >ic</text>
<text id="matched" x="1090.00" y="613" > </text>
<g id="frames">
<g >
<title>BufferDescriptorGetBuffer (3,000,000 samples, 0.02%)</title><rect x="1178.5" y="181" width="0.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="1181.48" y="191.5" ></text>
</g>
<g >
<title>GetBufferFromRing (3,500,000 samples, 0.02%)</title><rect x="1186.4" y="85" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1189.39" y="95.5" ></text>
</g>
<g >
<title>IOContextForStrategy (1,250,000 samples, 0.01%)</title><rect x="1188.5" y="133" width="0.1" height="15.0" fill="rgb(241,169,40)" rx="2" ry="2" />
<text  x="1191.45" y="143.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (3,000,000 samples, 0.02%)</title><rect x="1188.1" y="85" width="0.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1191.05" y="95.5" ></text>
</g>
<g >
<title>ItemPointerSet (7,000,000 samples, 0.05%)</title><rect x="1175.9" y="229" width="0.6" height="15.0" fill="rgb(237,147,35)" rx="2" ry="2" />
<text  x="1178.95" y="239.5" ></text>
</g>
<g >
<title>__memcmp_avx2_movbe (2,000,000 samples, 0.01%)</title><rect x="1170.1" y="165" width="0.2" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
<text  x="1173.10" y="175.5" ></text>
</g>
<g >
<title>Int32GetDatum (99,500,000 samples, 0.68%)</title><rect x="1152.0" y="181" width="8.0" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="1155.01" y="191.5" ></text>
</g>
<g >
<title>LWLockAcquire (2,250,000 samples, 0.02%)</title><rect x="1188.8" y="213" width="0.2" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1191.80" y="223.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (15,750,000 samples, 0.11%)</title><rect x="1182.6" y="101" width="1.2" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1185.55" y="111.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (1,500,000 samples, 0.01%)</title><rect x="1185.8" y="37" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1188.82" y="47.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (2,750,000 samples, 0.02%)</title><rect x="1187.0" y="85" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1190.01" y="95.5" ></text>
</g>
<g >
<title>CopyToTextLikeSendEndOfRow (166,500,000 samples, 1.13%)</title><rect x="427.6" y="229" width="13.3" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
<text  x="430.57" y="239.5" ></text>
</g>
<g >
<title>MemoryChunkSetHdrMask (304,250,000 samples, 2.07%)</title><rect x="623.7" y="149" width="24.4" height="15.0" fill="rgb(218,62,14)" rx="2" ry="2" />
<text  x="626.66" y="159.5" >M..</text>
</g>
<g >
<title>exec_simple_query (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="389" width="1180.0" height="15.0" fill="rgb(211,29,6)" rx="2" ry="2" />
<text  x="13.00" y="399.5" >exec_simple_query</text>
</g>
<g >
<title>GetVictimBuffer (35,750,000 samples, 0.24%)</title><rect x="1183.8" y="117" width="2.9" height="15.0" fill="rgb(209,18,4)" rx="2" ry="2" />
<text  x="1186.82" y="127.5" ></text>
</g>
<g >
<title>ReleaseBuffer (6,250,000 samples, 0.04%)</title><rect x="1170.5" y="213" width="0.5" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1173.46" y="223.5" ></text>
</g>
<g >
<title>ResourceOwnerForgetBufferIO (1,500,000 samples, 0.01%)</title><rect x="1179.7" y="165" width="0.2" height="15.0" fill="rgb(215,46,11)" rx="2" ry="2" />
<text  x="1182.74" y="175.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (2,000,000 samples, 0.01%)</title><rect x="1186.0" y="69" width="0.1" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1188.98" y="79.5" ></text>
</g>
<g >
<title>read_stream_start_pending_read (84,750,000 samples, 0.58%)</title><rect x="1181.8" y="197" width="6.8" height="15.0" fill="rgb(232,126,30)" rx="2" ry="2" />
<text  x="1184.79" y="207.5" ></text>
</g>
<g >
<title>LockBufHdr (1,500,000 samples, 0.01%)</title><rect x="1179.6" y="165" width="0.1" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1182.62" y="175.5" ></text>
</g>
<g >
<title>__GI___libc_write (81,750,000 samples, 0.56%)</title><rect x="31.4" y="165" width="6.5" height="15.0" fill="rgb(217,57,13)" rx="2" ry="2" />
<text  x="34.38" y="175.5" ></text>
</g>
<g >
<title>CopyOneRowTo (12,865,750,000 samples, 87.56%)</title><rect x="11.0" y="277" width="1033.2" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="13.96" y="287.5" >CopyOneRowTo</text>
</g>
<g >
<title>pg_ltoa (2,110,750,000 samples, 14.37%)</title><rect x="699.3" y="181" width="169.5" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
<text  x="702.33" y="191.5" >pg_ltoa</text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1186.5" y="37" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1189.53" y="47.5" ></text>
</g>
<g >
<title>BufferAlloc (80,500,000 samples, 0.55%)</title><rect x="1182.0" y="133" width="6.5" height="15.0" fill="rgb(252,220,52)" rx="2" ry="2" />
<text  x="1184.99" y="143.5" ></text>
</g>
<g >
<title>WaitReadBuffers (24,500,000 samples, 0.17%)</title><rect x="1179.2" y="197" width="2.0" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="1182.20" y="207.5" ></text>
</g>
<g >
<title>read_stream_look_ahead (7,750,000 samples, 0.05%)</title><rect x="1181.2" y="197" width="0.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1184.17" y="207.5" ></text>
</g>
<g >
<title>heap_scan_stream_read_next_serial (4,500,000 samples, 0.03%)</title><rect x="1181.4" y="165" width="0.4" height="15.0" fill="rgb(205,4,0)" rx="2" ry="2" />
<text  x="1184.43" y="175.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (3,750,000 samples, 0.03%)</title><rect x="1182.2" y="101" width="0.3" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1185.21" y="111.5" ></text>
</g>
<g >
<title>LockBufHdr (3,250,000 samples, 0.02%)</title><rect x="1186.4" y="69" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1189.41" y="79.5" ></text>
</g>
<g >
<title>DoCopy (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="309" width="1180.0" height="15.0" fill="rgb(252,217,51)" rx="2" ry="2" />
<text  x="13.00" y="319.5" >DoCopy</text>
</g>
<g >
<title>BufTableLookup (16,250,000 samples, 0.11%)</title><rect x="1182.5" y="117" width="1.3" height="15.0" fill="rgb(224,89,21)" rx="2" ry="2" />
<text  x="1185.51" y="127.5" ></text>
</g>
<g >
<title>int4out (4,648,750,000 samples, 31.64%)</title><rect x="495.5" y="197" width="373.3" height="15.0" fill="rgb(217,56,13)" rx="2" ry="2" />
<text  x="498.51" y="207.5" >int4out</text>
</g>
<g >
<title>LockBufHdr (4,000,000 samples, 0.03%)</title><rect x="1187.5" y="117" width="0.3" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1190.49" y="127.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (3,500,000 samples, 0.02%)</title><rect x="1187.5" y="101" width="0.3" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1190.53" y="111.5" ></text>
</g>
<g >
<title>decimalLength32 (418,500,000 samples, 2.85%)</title><rect x="835.2" y="133" width="33.6" height="15.0" fill="rgb(225,96,22)" rx="2" ry="2" />
<text  x="838.24" y="143.5" >de..</text>
</g>
<g >
<title>LWLockAttemptLock (5,750,000 samples, 0.04%)</title><rect x="1186.8" y="101" width="0.4" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1189.77" y="111.5" ></text>
</g>
<g >
<title>fwrite@plt (1,500,000 samples, 0.01%)</title><rect x="42.0" y="245" width="0.1" height="15.0" fill="rgb(235,140,33)" rx="2" ry="2" />
<text  x="44.98" y="255.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (7,000,000 samples, 0.05%)</title><rect x="1169.8" y="181" width="0.6" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1172.80" y="191.5" ></text>
</g>
<g >
<title>BufferGetBlock (2,500,000 samples, 0.02%)</title><rect x="1175.7" y="213" width="0.2" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
<text  x="1178.75" y="223.5" ></text>
</g>
<g >
<title>ResourceOwnerEnlarge (1,250,000 samples, 0.01%)</title><rect x="1170.4" y="197" width="0.1" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
<text  x="1173.36" y="207.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (416,500,000 samples, 2.83%)</title><rect x="935.9" y="213" width="33.5" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
<text  x="938.90" y="223.5" >__..</text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (1,750,000 samples, 0.01%)</title><rect x="30.8" y="197" width="0.2" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
<text  x="33.82" y="207.5" ></text>
</g>
<g >
<title>BufferGetPage (2,500,000 samples, 0.02%)</title><rect x="1175.7" y="229" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1178.75" y="239.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1176.7" y="181" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1179.67" y="191.5" ></text>
</g>
<g >
<title>hash_search (1,250,000 samples, 0.01%)</title><rect x="1188.0" y="85" width="0.1" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
<text  x="1190.95" y="95.5" ></text>
</g>
<g >
<title>tts_buffer_heap_getsomeattrs (1,364,500,000 samples, 9.29%)</title><rect x="1050.4" y="229" width="109.6" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
<text  x="1053.42" y="239.5" >tts_buffer_he..</text>
</g>
<g >
<title>PostgresMain (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="405" width="1180.0" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="13.00" y="415.5" >PostgresMain</text>
</g>
<g >
<title>__mempcpy_avx_unaligned_erms (3,000,000 samples, 0.02%)</title><rect x="41.7" y="213" width="0.3" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
<text  x="44.74" y="223.5" ></text>
</g>
<g >
<title>AllocSetReset (179,500,000 samples, 1.22%)</title><rect x="1026.3" y="213" width="14.4" height="15.0" fill="rgb(226,100,24)" rx="2" ry="2" />
<text  x="1029.33" y="223.5" ></text>
</g>
<g >
<title>CopySendChar (78,750,000 samples, 0.54%)</title><rect x="434.6" y="213" width="6.3" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="437.61" y="223.5" ></text>
</g>
<g >
<title>hash_bytes (1,500,000 samples, 0.01%)</title><rect x="1188.3" y="117" width="0.2" height="15.0" fill="rgb(227,102,24)" rx="2" ry="2" />
<text  x="1191.33" y="127.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (1,750,000 samples, 0.01%)</title><rect x="1186.5" y="53" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1189.53" y="63.5" ></text>
</g>
<g >
<title>heapgettup_pagemode (231,000,000 samples, 1.57%)</title><rect x="1171.4" y="245" width="18.6" height="15.0" fill="rgb(242,170,40)" rx="2" ry="2" />
<text  x="1174.45" y="255.5" ></text>
</g>
<g >
<title>CopySendChar (1,694,000,000 samples, 11.53%)</title><rect x="291.5" y="229" width="136.1" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="294.52" y="239.5" >CopySendChar</text>
</g>
<g >
<title>_IO_file_overflow@@GLIBC_2.2.5 (4,000,000 samples, 0.03%)</title><rect x="37.9" y="213" width="0.4" height="15.0" fill="rgb(239,157,37)" rx="2" ry="2" />
<text  x="40.95" y="223.5" ></text>
</g>
<g >
<title>CopyAttributeOutText (1,506,500,000 samples, 10.25%)</title><rect x="170.5" y="229" width="121.0" height="15.0" fill="rgb(249,204,48)" rx="2" ry="2" />
<text  x="173.54" y="239.5" >CopyAttributeOu..</text>
</g>
<g >
<title>FileReadV (8,250,000 samples, 0.06%)</title><rect x="1180.4" y="165" width="0.7" height="15.0" fill="rgb(222,81,19)" rx="2" ry="2" />
<text  x="1183.44" y="175.5" ></text>
</g>
<g >
<title>new_do_write (86,750,000 samples, 0.59%)</title><rect x="31.0" y="197" width="6.9" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
<text  x="33.98" y="207.5" ></text>
</g>
<g >
<title>MemoryContextResetOnly (191,000,000 samples, 1.30%)</title><rect x="1025.7" y="245" width="15.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
<text  x="1028.67" y="255.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (2,000,000 samples, 0.01%)</title><rect x="1185.6" y="37" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1188.60" y="47.5" ></text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,750,000 samples, 0.04%)</title><rect x="1179.9" y="165" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
<text  x="1182.88" y="175.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32 (2,500,000 samples, 0.02%)</title><rect x="1179.9" y="117" width="0.2" height="15.0" fill="rgb(221,74,17)" rx="2" ry="2" />
<text  x="1182.92" y="127.5" ></text>
</g>
<g >
<title>standard_ProcessUtility (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="325" width="1180.0" height="15.0" fill="rgb(233,132,31)" rx="2" ry="2" />
<text  x="13.00" y="335.5" >standard_ProcessUtility</text>
</g>
<g >
<title>pg_atomic_fetch_sub_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1187.3" y="69" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1190.29" y="79.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (2,000,000 samples, 0.01%)</title><rect x="1185.6" y="53" width="0.2" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1188.60" y="63.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,000,000 samples, 0.01%)</title><rect x="1178.8" y="197" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1181.80" y="207.5" ></text>
</g>
<g >
<title>pgstat_progress_update_param (47,000,000 samples, 0.32%)</title><rect x="42.1" y="245" width="3.8" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="45.10" y="255.5" ></text>
</g>
<g >
<title>pg_preadv (8,000,000 samples, 0.05%)</title><rect x="1180.5" y="149" width="0.6" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
<text  x="1183.46" y="159.5" ></text>
</g>
<g >
<title>PageIsVerifiedExtended (1,250,000 samples, 0.01%)</title><rect x="1179.5" y="181" width="0.1" height="15.0" fill="rgb(251,215,51)" rx="2" ry="2" />
<text  x="1182.48" y="191.5" ></text>
</g>
<g >
<title>read_stream_next_buffer (120,000,000 samples, 0.82%)</title><rect x="1179.0" y="213" width="9.6" height="15.0" fill="rgb(216,50,12)" rx="2" ry="2" />
<text  x="1181.96" y="223.5" ></text>
</g>
<g >
<title>PageGetItem (13,000,000 samples, 0.09%)</title><rect x="1176.9" y="229" width="1.1" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
<text  x="1179.93" y="239.5" ></text>
</g>
<g >
<title>ResourceOwnerEnlarge (2,250,000 samples, 0.02%)</title><rect x="1180.1" y="133" width="0.2" height="15.0" fill="rgb(223,86,20)" rx="2" ry="2" />
<text  x="1183.12" y="143.5" ></text>
</g>
<g >
<title>ServerLoop (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="469" width="1180.0" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
<text  x="13.00" y="479.5" >ServerLoop</text>
</g>
<g >
<title>__libc_start_main@@GLIBC_2.34 (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="533" width="1180.0" height="15.0" fill="rgb(229,113,27)" rx="2" ry="2" />
<text  x="13.00" y="543.5" >__libc_start_main@@GLIBC_2.34</text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32 (1,750,000 samples, 0.01%)</title><rect x="1171.3" y="197" width="0.1" height="15.0" fill="rgb(253,220,52)" rx="2" ry="2" />
<text  x="1174.31" y="207.5" ></text>
</g>
<g >
<title>StartReadBuffersImpl (83,250,000 samples, 0.57%)</title><rect x="1181.9" y="165" width="6.7" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1184.87" y="175.5" ></text>
</g>
<g >
<title>_IO_default_xsputn (4,500,000 samples, 0.03%)</title><rect x="30.6" y="213" width="0.4" height="15.0" fill="rgb(246,190,45)" rx="2" ry="2" />
<text  x="33.60" y="223.5" ></text>
</g>
<g >
<title>palloc (378,250,000 samples, 2.57%)</title><rect x="669.0" y="181" width="30.3" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
<text  x="671.96" y="191.5" >pa..</text>
</g>
<g >
<title>slot_getallattrs (1,402,500,000 samples, 9.55%)</title><rect x="1047.4" y="277" width="112.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
<text  x="1050.37" y="287.5" >slot_getallat..</text>
</g>
<g >
<title>LWLockRelease (3,250,000 samples, 0.02%)</title><rect x="1187.2" y="117" width="0.3" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1190.23" y="127.5" ></text>
</g>
<g >
<title>TerminateBufferIO (3,750,000 samples, 0.03%)</title><rect x="1179.6" y="181" width="0.3" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
<text  x="1182.58" y="191.5" ></text>
</g>
<g >
<title>table_scan_getnextslot (373,500,000 samples, 2.54%)</title><rect x="1160.0" y="277" width="30.0" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="1163.00" y="287.5" >ta..</text>
</g>
<g >
<title>fetch_att (544,000,000 samples, 3.70%)</title><rect x="1116.3" y="197" width="43.7" height="15.0" fill="rgb(252,218,52)" rx="2" ry="2" />
<text  x="1119.32" y="207.5" >fetc..</text>
</g>
<g >
<title>DatumGetInt32 (123,750,000 samples, 0.84%)</title><rect x="659.0" y="181" width="10.0" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="662.02" y="191.5" ></text>
</g>
<g >
<title>ResourceOwnerForget (6,000,000 samples, 0.04%)</title><rect x="1170.5" y="165" width="0.5" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
<text  x="1173.48" y="175.5" ></text>
</g>
<g >
<title>hash_search_with_hash_value (13,500,000 samples, 0.09%)</title><rect x="1184.2" y="69" width="1.1" height="15.0" fill="rgb(249,205,49)" rx="2" ry="2" />
<text  x="1187.24" y="79.5" ></text>
</g>
<g >
<title>main (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="501" width="1180.0" height="15.0" fill="rgb(243,179,42)" rx="2" ry="2" />
<text  x="13.00" y="511.5" >main</text>
</g>
<g >
<title>BackendMain (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="421" width="1180.0" height="15.0" fill="rgb(207,13,3)" rx="2" ry="2" />
<text  x="13.00" y="431.5" >BackendMain</text>
</g>
<g >
<title>AllocSetAllocChunkFromBlock (424,250,000 samples, 2.89%)</title><rect x="614.0" y="165" width="34.1" height="15.0" fill="rgb(238,152,36)" rx="2" ry="2" />
<text  x="617.02" y="175.5" >Al..</text>
</g>
<g >
<title>pgstat_progress_update_param (39,250,000 samples, 0.27%)</title><rect x="1044.2" y="277" width="3.2" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="1047.22" y="287.5" ></text>
</g>
<g >
<title>BackendStartup (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="453" width="1180.0" height="15.0" fill="rgb(243,177,42)" rx="2" ry="2" />
<text  x="13.00" y="463.5" >BackendStartup</text>
</g>
<g >
<title>PortalRunMulti (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="357" width="1180.0" height="15.0" fill="rgb(245,184,44)" rx="2" ry="2" />
<text  x="13.00" y="367.5" >PortalRunMulti</text>
</g>
<g >
<title>heap_page_prune_opt (2,500,000 samples, 0.02%)</title><rect x="1189.0" y="213" width="0.2" height="15.0" fill="rgb(211,29,7)" rx="2" ry="2" />
<text  x="1191.98" y="223.5" ></text>
</g>
<g >
<title>__memcmp_avx2_movbe (1,250,000 samples, 0.01%)</title><rect x="1185.1" y="53" width="0.1" height="15.0" fill="rgb(224,91,21)" rx="2" ry="2" />
<text  x="1188.14" y="63.5" ></text>
</g>
<g >
<title>LWLockAcquire (6,750,000 samples, 0.05%)</title><rect x="1186.7" y="117" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1189.69" y="127.5" ></text>
</g>
<g >
<title>UnpinBufferNoOwner (5,500,000 samples, 0.04%)</title><rect x="1171.0" y="213" width="0.4" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
<text  x="1174.01" y="223.5" ></text>
</g>
<g >
<title>resetStringInfo (4,500,000 samples, 0.03%)</title><rect x="1041.2" y="261" width="0.4" height="15.0" fill="rgb(245,187,44)" rx="2" ry="2" />
<text  x="1044.25" y="271.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (1,500,000 samples, 0.01%)</title><rect x="1185.8" y="53" width="0.1" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1188.82" y="63.5" ></text>
</g>
<g >
<title>MemoryContextResetOnly (191,000,000 samples, 1.30%)</title><rect x="1025.7" y="229" width="15.3" height="15.0" fill="rgb(210,25,6)" rx="2" ry="2" />
<text  x="1028.67" y="239.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (2,000,000 samples, 0.01%)</title><rect x="1186.0" y="53" width="0.1" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1188.98" y="63.5" ></text>
</g>
<g >
<title>LockBufHdr (2,500,000 samples, 0.02%)</title><rect x="1185.9" y="85" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1188.94" y="95.5" ></text>
</g>
<g >
<title>slot_deform_heap_tuple (1,342,000,000 samples, 9.13%)</title><rect x="1052.2" y="213" width="107.8" height="15.0" fill="rgb(247,195,46)" rx="2" ry="2" />
<text  x="1055.23" y="223.5" >slot_deform_h..</text>
</g>
<g >
<title>LWLockAttemptLock (1,250,000 samples, 0.01%)</title><rect x="1188.9" y="197" width="0.1" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1191.88" y="207.5" ></text>
</g>
<g >
<title>CopyToTextLikeOneRow (12,142,000,000 samples, 82.64%)</title><rect x="47.7" y="245" width="975.1" height="15.0" fill="rgb(227,103,24)" rx="2" ry="2" />
<text  x="50.73" y="255.5" >CopyToTextLikeOneRow</text>
</g>
<g >
<title>ResourceOwnerForget (1,500,000 samples, 0.01%)</title><rect x="1179.7" y="149" width="0.2" height="15.0" fill="rgb(235,142,33)" rx="2" ry="2" />
<text  x="1182.74" y="159.5" ></text>
</g>
<g >
<title>_start (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="549" width="1180.0" height="15.0" fill="rgb(245,185,44)" rx="2" ry="2" />
<text  x="13.00" y="559.5" >_start</text>
</g>
<g >
<title>PinBufferForBlock (82,250,000 samples, 0.56%)</title><rect x="1181.9" y="149" width="6.7" height="15.0" fill="rgb(241,168,40)" rx="2" ry="2" />
<text  x="1184.95" y="159.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (2,750,000 samples, 0.02%)</title><rect x="1171.1" y="197" width="0.2" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1174.09" y="207.5" ></text>
</g>
<g >
<title>heap_getnextslot (360,000,000 samples, 2.45%)</title><rect x="1161.1" y="261" width="28.9" height="15.0" fill="rgb(213,40,9)" rx="2" ry="2" />
<text  x="1164.09" y="271.5" >he..</text>
</g>
<g >
<title>LWLockRelease (2,250,000 samples, 0.02%)</title><rect x="1185.8" y="85" width="0.1" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1188.76" y="95.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (2,500,000 samples, 0.02%)</title><rect x="1187.3" y="101" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1190.29" y="111.5" ></text>
</g>
<g >
<title>ResourceOwnerAddToHash (1,750,000 samples, 0.01%)</title><rect x="1180.2" y="117" width="0.1" height="15.0" fill="rgb(230,118,28)" rx="2" ry="2" />
<text  x="1183.16" y="127.5" ></text>
</g>
<g >
<title>MemoryContextSwitchTo (3,000,000 samples, 0.02%)</title><rect x="1041.0" y="261" width="0.2" height="15.0" fill="rgb(234,133,32)" rx="2" ry="2" />
<text  x="1044.01" y="271.5" ></text>
</g>
<g >
<title>ResourceOwnerForgetBuffer (6,000,000 samples, 0.04%)</title><rect x="1170.5" y="181" width="0.5" height="15.0" fill="rgb(247,193,46)" rx="2" ry="2" />
<text  x="1173.48" y="191.5" ></text>
</g>
<g >
<title>OutputFunctionCall (5,328,250,000 samples, 36.26%)</title><rect x="440.9" y="229" width="427.9" height="15.0" fill="rgb(251,212,50)" rx="2" ry="2" />
<text  x="443.94" y="239.5" >OutputFunctionCall</text>
</g>
<g >
<title>slot_getsomeattrs (1,396,000,000 samples, 9.50%)</title><rect x="1047.9" y="261" width="112.1" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
<text  x="1050.89" y="271.5" >slot_getsomea..</text>
</g>
<g >
<title>UnpinBufferNoOwner (2,250,000 samples, 0.02%)</title><rect x="1178.8" y="213" width="0.2" height="15.0" fill="rgb(253,221,53)" rx="2" ry="2" />
<text  x="1181.78" y="223.5" ></text>
</g>
<g >
<title>CopyToTextOneRow (12,165,000,000 samples, 82.79%)</title><rect x="45.9" y="261" width="976.9" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="48.88" y="271.5" >CopyToTextOneRow</text>
</g>
<g >
<title>get_hash_entry (2,250,000 samples, 0.02%)</title><rect x="1182.3" y="85" width="0.2" height="15.0" fill="rgb(225,93,22)" rx="2" ry="2" />
<text  x="1185.29" y="95.5" ></text>
</g>
<g >
<title>heapgettup_advance_block (2,500,000 samples, 0.02%)</title><rect x="1181.6" y="149" width="0.2" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
<text  x="1184.59" y="159.5" ></text>
</g>
<g >
<title>UnpinBuffer (3,750,000 samples, 0.03%)</title><rect x="1178.5" y="197" width="0.3" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1181.48" y="207.5" ></text>
</g>
<g >
<title>IncrBufferRefCount (14,250,000 samples, 0.10%)</title><rect x="1169.3" y="213" width="1.2" height="15.0" fill="rgb(209,22,5)" rx="2" ry="2" />
<text  x="1172.32" y="223.5" ></text>
</g>
<g >
<title>__libc_pread (4,000,000 samples, 0.03%)</title><rect x="1180.5" y="133" width="0.3" height="15.0" fill="rgb(238,156,37)" rx="2" ry="2" />
<text  x="1183.50" y="143.5" ></text>
</g>
<g >
<title>InvalidateVictimBuffer (27,500,000 samples, 0.19%)</title><rect x="1184.1" y="101" width="2.2" height="15.0" fill="rgb(248,198,47)" rx="2" ry="2" />
<text  x="1187.06" y="111.5" ></text>
</g>
<g >
<title>MemoryContextCallResetCallbacks (3,250,000 samples, 0.02%)</title><rect x="1040.7" y="213" width="0.3" height="15.0" fill="rgb(218,59,14)" rx="2" ry="2" />
<text  x="1043.75" y="223.5" ></text>
</g>
<g >
<title>ss_report_location (2,000,000 samples, 0.01%)</title><rect x="1181.6" y="133" width="0.2" height="15.0" fill="rgb(249,202,48)" rx="2" ry="2" />
<text  x="1184.63" y="143.5" ></text>
</g>
<g >
<title>ReleaseBuffer (4,000,000 samples, 0.03%)</title><rect x="1178.5" y="213" width="0.3" height="15.0" fill="rgb(220,71,17)" rx="2" ry="2" />
<text  x="1181.46" y="223.5" ></text>
</g>
<g >
<title>ExecStoreBufferHeapTuple (77,250,000 samples, 0.53%)</title><rect x="1165.2" y="245" width="6.2" height="15.0" fill="rgb(230,117,28)" rx="2" ry="2" />
<text  x="1168.24" y="255.5" ></text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (2,750,000 samples, 0.02%)</title><rect x="1187.0" y="69" width="0.2" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1190.01" y="79.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (1,500,000 samples, 0.01%)</title><rect x="1185.8" y="69" width="0.1" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1188.82" y="79.5" ></text>
</g>
<g >
<title>page_collect_tuples (10,250,000 samples, 0.07%)</title><rect x="1189.2" y="213" width="0.8" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
<text  x="1192.18" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1179.9" y="101" width="0.2" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1182.92" y="111.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1176.7" y="197" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1179.67" y="207.5" ></text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32_impl (2,500,000 samples, 0.02%)</title><rect x="1187.3" y="85" width="0.2" height="15.0" fill="rgb(225,94,22)" rx="2" ry="2" />
<text  x="1190.29" y="95.5" ></text>
</g>
<g >
<title>BufTableInsert (4,500,000 samples, 0.03%)</title><rect x="1182.1" y="117" width="0.4" height="15.0" fill="rgb(206,8,1)" rx="2" ry="2" />
<text  x="1185.15" y="127.5" ></text>
</g>
<g >
<title>postgres (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="565" width="1180.0" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
<text  x="13.00" y="575.5" >postgres</text>
</g>
<g >
<title>heap_fetch_next_buffer (131,250,000 samples, 0.89%)</title><rect x="1178.1" y="229" width="10.5" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1181.05" y="239.5" ></text>
</g>
<g >
<title>enlargeStringInfo (666,000,000 samples, 4.53%)</title><rect x="969.4" y="213" width="53.4" height="15.0" fill="rgb(237,150,35)" rx="2" ry="2" />
<text  x="972.35" y="223.5" >enlar..</text>
</g>
<g >
<title>CopyToStateFlush (417,750,000 samples, 2.84%)</title><rect x="12.3" y="261" width="33.6" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
<text  x="15.33" y="271.5" >Co..</text>
</g>
<g >
<title>PortalRun (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="373" width="1180.0" height="15.0" fill="rgb(223,85,20)" rx="2" ry="2" />
<text  x="13.00" y="383.5" >PortalRun</text>
</g>
<g >
<title>pg_atomic_compare_exchange_u32_impl (1,750,000 samples, 0.01%)</title><rect x="1171.3" y="181" width="0.1" height="15.0" fill="rgb(235,141,33)" rx="2" ry="2" />
<text  x="1174.31" y="191.5" ></text>
</g>
<g >
<title>GetPrivateRefCountEntry (12,250,000 samples, 0.08%)</title><rect x="1169.4" y="197" width="1.0" height="15.0" fill="rgb(250,209,50)" rx="2" ry="2" />
<text  x="1172.38" y="207.5" ></text>
</g>
<g >
<title>all (14,693,250,000 samples, 100%)</title><rect x="10.0" y="581" width="1180.0" height="15.0" fill="rgb(213,39,9)" rx="2" ry="2" />
<text  x="13.00" y="591.5" ></text>
</g>
<g >
<title>LWLockAcquire (5,500,000 samples, 0.04%)</title><rect x="1185.3" y="85" width="0.5" height="15.0" fill="rgb(209,20,4)" rx="2" ry="2" />
<text  x="1188.32" y="95.5" ></text>
</g>
<g >
<title>__mempcpy@plt (4,500,000 samples, 0.03%)</title><rect x="41.4" y="213" width="0.3" height="15.0" fill="rgb(223,84,20)" rx="2" ry="2" />
<text  x="44.38" y="223.5" ></text>
</g>
<g >
<title>PostmasterMain (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="485" width="1180.0" height="15.0" fill="rgb(212,35,8)" rx="2" ry="2" />
<text  x="13.00" y="495.5" >PostmasterMain</text>
</g>
<g >
<title>hash_search (2,750,000 samples, 0.02%)</title><rect x="1169.6" y="181" width="0.2" height="15.0" fill="rgb(216,55,13)" rx="2" ry="2" />
<text  x="1172.58" y="191.5" ></text>
</g>
<g >
<title>heap_prepare_pagescan (17,500,000 samples, 0.12%)</title><rect x="1188.6" y="229" width="1.4" height="15.0" fill="rgb(222,82,19)" rx="2" ry="2" />
<text  x="1191.59" y="239.5" ></text>
</g>
<g >
<title>PortalRunUtility (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="341" width="1180.0" height="15.0" fill="rgb(239,160,38)" rx="2" ry="2" />
<text  x="13.00" y="351.5" >PortalRunUtility</text>
</g>
<g >
<title>ReservePrivateRefCountEntry (6,000,000 samples, 0.04%)</title><rect x="1187.8" y="117" width="0.5" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1190.81" y="127.5" ></text>
</g>
<g >
<title>AllocSetFreeIndex (136,000,000 samples, 0.93%)</title><rect x="648.1" y="165" width="10.9" height="15.0" fill="rgb(254,227,54)" rx="2" ry="2" />
<text  x="651.10" y="175.5" ></text>
</g>
<g >
<title>_IO_do_write@@GLIBC_2.2.5 (87,000,000 samples, 0.59%)</title><rect x="31.0" y="213" width="6.9" height="15.0" fill="rgb(238,155,37)" rx="2" ry="2" />
<text  x="33.96" y="223.5" ></text>
</g>
<g >
<title>DoCopyTo (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="293" width="1180.0" height="15.0" fill="rgb(242,172,41)" rx="2" ry="2" />
<text  x="13.00" y="303.5" >DoCopyTo</text>
</g>
<g >
<title>appendBinaryStringInfo (1,917,500,000 samples, 13.05%)</title><rect x="868.8" y="229" width="154.0" height="15.0" fill="rgb(236,145,34)" rx="2" ry="2" />
<text  x="871.84" y="239.5" >appendBinaryStringI..</text>
</g>
<g >
<title>_IO_file_xsputn@@GLIBC_2.2.5 (197,250,000 samples, 1.34%)</title><rect x="26.1" y="229" width="15.9" height="15.0" fill="rgb(242,171,41)" rx="2" ry="2" />
<text  x="29.14" y="239.5" ></text>
</g>
<g >
<title>_IO_file_write@@GLIBC_2.2.5 (83,500,000 samples, 0.57%)</title><rect x="31.2" y="181" width="6.7" height="15.0" fill="rgb(214,43,10)" rx="2" ry="2" />
<text  x="34.24" y="191.5" ></text>
</g>
<g >
<title>slot_getsomeattrs (17,750,000 samples, 0.12%)</title><rect x="1042.8" y="245" width="1.4" height="15.0" fill="rgb(254,228,54)" rx="2" ry="2" />
<text  x="1045.77" y="255.5" ></text>
</g>
<g >
<title>__libc_start_call_main (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="517" width="1180.0" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="13.00" y="527.5" >__libc_start_call_main</text>
</g>
<g >
<title>UnpinBuffer (6,000,000 samples, 0.04%)</title><rect x="1170.5" y="197" width="0.5" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1173.48" y="207.5" ></text>
</g>
<g >
<title>ReservePrivateRefCountEntry (4,250,000 samples, 0.03%)</title><rect x="1188.0" y="101" width="0.3" height="15.0" fill="rgb(232,125,30)" rx="2" ry="2" />
<text  x="1190.95" y="111.5" ></text>
</g>
<g >
<title>FunctionCall1Coll (5,066,000,000 samples, 34.48%)</title><rect x="462.0" y="213" width="406.8" height="15.0" fill="rgb(233,131,31)" rx="2" ry="2" />
<text  x="465.00" y="223.5" >FunctionCall1Coll</text>
</g>
<g >
<title>slot_getsomeattrs_int (1,390,000,000 samples, 9.46%)</title><rect x="1048.4" y="245" width="111.6" height="15.0" fill="rgb(252,219,52)" rx="2" ry="2" />
<text  x="1051.38" y="255.5" >slot_getsomea..</text>
</g>
<g >
<title>pg_atomic_sub_fetch_u32 (2,500,000 samples, 0.02%)</title><rect x="1176.7" y="213" width="0.2" height="15.0" fill="rgb(242,174,41)" rx="2" ry="2" />
<text  x="1179.67" y="223.5" ></text>
</g>
<g >
<title>CopySendData (268,750,000 samples, 1.83%)</title><rect x="269.9" y="213" width="21.6" height="15.0" fill="rgb(221,75,18)" rx="2" ry="2" />
<text  x="272.94" y="223.5" >C..</text>
</g>
<g >
<title>slot_getallattrs (32,250,000 samples, 0.22%)</title><rect x="1041.6" y="261" width="2.6" height="15.0" fill="rgb(249,203,48)" rx="2" ry="2" />
<text  x="1044.61" y="271.5" ></text>
</g>
<g >
<title>_IO_fwrite (307,000,000 samples, 2.09%)</title><rect x="17.3" y="245" width="24.7" height="15.0" fill="rgb(210,23,5)" rx="2" ry="2" />
<text  x="20.33" y="255.5" >_..</text>
</g>
<g >
<title>BufTableDelete (14,250,000 samples, 0.10%)</title><rect x="1184.2" y="85" width="1.1" height="15.0" fill="rgb(226,98,23)" rx="2" ry="2" />
<text  x="1187.18" y="95.5" ></text>
</g>
<g >
<title>pg_ultoa_n (1,256,000,000 samples, 8.55%)</title><rect x="768.0" y="165" width="100.8" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="770.98" y="175.5" >pg_ultoa_n</text>
</g>
<g >
<title>MemoryContextReset (226,250,000 samples, 1.54%)</title><rect x="1022.8" y="261" width="18.2" height="15.0" fill="rgb(210,26,6)" rx="2" ry="2" />
<text  x="1025.84" y="271.5" ></text>
</g>
<g >
<title>WaitReadBuffersCanStartIO (5,750,000 samples, 0.04%)</title><rect x="1179.9" y="181" width="0.4" height="15.0" fill="rgb(210,27,6)" rx="2" ry="2" />
<text  x="1182.88" y="191.5" ></text>
</g>
<g >
<title>_IO_ferror (18,000,000 samples, 0.12%)</title><rect x="15.9" y="245" width="1.4" height="15.0" fill="rgb(216,53,12)" rx="2" ry="2" />
<text  x="18.88" y="255.5" ></text>
</g>
<g >
<title>pg_ultoa_n (1,122,500,000 samples, 7.64%)</title><rect x="778.7" y="149" width="90.1" height="15.0" fill="rgb(240,162,38)" rx="2" ry="2" />
<text  x="781.70" y="159.5" >pg_ultoa_n</text>
</g>
<g >
<title>LWLockRelease (4,500,000 samples, 0.03%)</title><rect x="1176.5" y="229" width="0.4" height="15.0" fill="rgb(217,58,13)" rx="2" ry="2" />
<text  x="1179.51" y="239.5" ></text>
</g>
<g >
<title>BlockIdSet (4,750,000 samples, 0.03%)</title><rect x="1176.1" y="213" width="0.4" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1179.13" y="223.5" ></text>
</g>
<g >
<title>postmaster_child_launch (14,693,250,000 samples, 100.00%)</title><rect x="10.0" y="437" width="1180.0" height="15.0" fill="rgb(206,5,1)" rx="2" ry="2" />
<text  x="13.00" y="447.5" >postmaster_child_launch</text>
</g>
<g >
<title>preadv64 (3,500,000 samples, 0.02%)</title><rect x="1180.8" y="133" width="0.3" height="15.0" fill="rgb(231,122,29)" rx="2" ry="2" />
<text  x="1183.82" y="143.5" ></text>
</g>
<g >
<title>StrategyGetBuffer (4,000,000 samples, 0.03%)</title><rect x="1186.3" y="101" width="0.4" height="15.0" fill="rgb(216,54,13)" rx="2" ry="2" />
<text  x="1189.35" y="111.5" ></text>
</g>
<g >
<title>__memmove_avx_unaligned_erms (38,750,000 samples, 0.26%)</title><rect x="38.3" y="213" width="3.1" height="15.0" fill="rgb(205,0,0)" rx="2" ry="2" />
<text  x="41.27" y="223.5" ></text>
</g>
<g >
<title>pg_atomic_fetch_or_u32_impl (3,500,000 samples, 0.02%)</title><rect x="1187.5" y="85" width="0.3" height="15.0" fill="rgb(253,224,53)" rx="2" ry="2" />
<text  x="1190.53" y="95.5" ></text>
</g>
<g >
<title>StartReadBuffers (84,000,000 samples, 0.57%)</title><rect x="1181.8" y="181" width="6.8" height="15.0" fill="rgb(229,111,26)" rx="2" ry="2" />
<text  x="1184.81" y="191.5" ></text>
</g>
<g >
<title>tts_buffer_heap_store_tuple (59,500,000 samples, 0.40%)</title><rect x="1166.7" y="229" width="4.7" height="15.0" fill="rgb(220,70,16)" rx="2" ry="2" />
<text  x="1169.67" y="239.5" ></text>
</g>
<g >
<title>LWLockAttemptLock (3,750,000 samples, 0.03%)</title><rect x="1185.5" y="69" width="0.3" height="15.0" fill="rgb(235,138,33)" rx="2" ry="2" />
<text  x="1188.46" y="79.5" ></text>
</g>
<g >
<title>mdreadv (9,750,000 samples, 0.07%)</title><rect x="1180.3" y="181" width="0.8" height="15.0" fill="rgb(239,159,38)" rx="2" ry="2" />
<text  x="1183.34" y="191.5" ></text>
</g>
<g >
<title>LockBufHdr (2,750,000 samples, 0.02%)</title><rect x="1179.9" y="133" width="0.2" height="15.0" fill="rgb(236,143,34)" rx="2" ry="2" />
<text  x="1182.90" y="143.5" ></text>
</g>
<g >
<title>AllocSetAlloc (1,448,000,000 samples, 9.85%)</title><rect x="542.7" y="181" width="116.3" height="15.0" fill="rgb(231,124,29)" rx="2" ry="2" />
<text  x="545.73" y="191.5" >AllocSetAlloc</text>
</g>
<g >
<title>read_stream_get_block (5,000,000 samples, 0.03%)</title><rect x="1181.4" y="181" width="0.4" height="15.0" fill="rgb(253,222,53)" rx="2" ry="2" />
<text  x="1184.39" y="191.5" ></text>
</g>
<g >
<title>StartBufferIO (5,500,000 samples, 0.04%)</title><rect x="1179.9" y="149" width="0.4" height="15.0" fill="rgb(244,183,43)" rx="2" ry="2" />
<text  x="1182.90" y="159.5" ></text>
</g>
</g>
</svg>
run.shapplication/x-shellscript; name=run.shDownload
#167Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#165)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3+KN=uofw5ksnCwh5s3m_VcfFYd=jTzcpO5uVLBHwSQEg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 28 Jul 2024 22:49:47 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

Thanks for updating the patches, I applied them and test
in my local machine, I did not use tmpfs in my test, I guess
if I run the tests enough rounds, the OS will cache the
pages, below is my numbers(I run each test 30 times, I
count for the last 10 ones):

HEAD PATCHED

COPY to_tab_30 TO '/dev/null' WITH (FORMAT text);

5628.280 ms 5679.860 ms
5583.144 ms 5588.078 ms
5604.444 ms 5628.029 ms
5617.133 ms 5613.926 ms
5575.570 ms 5601.045 ms
5634.828 ms 5616.409 ms
5693.489 ms 5637.434 ms
5585.857 ms 5609.531 ms
5613.948 ms 5643.629 ms
5610.394 ms 5580.206 ms

COPY from_tab_30 FROM '/tmp/to_tab_30.txt' WITH (FORMAT text);

3929.955 ms 4050.895 ms
3909.061 ms 3890.156 ms
3940.272 ms 3927.614 ms
3907.535 ms 3925.560 ms
3952.719 ms 3942.141 ms
3933.751 ms 3904.250 ms
3958.274 ms 4025.581 ms
3937.065 ms 3894.149 ms
3949.896 ms 3933.878 ms
3925.399 ms 3936.170 ms

I did not see obvious performance degradation, maybe it's
because I did not use tmpfs, but I think this OTH means
that the *function call* and *if branch* added for each row
is not the bottleneck of the whole execution path.

Thanks for sharing your numbers. I agree with there are no
obvious performance degradation.

In 0001,

+typedef struct CopyFromRoutine
+{
+ /*
+ * Called when COPY FROM is started to set up the input functions
+ * associated to the relation's attributes writing to.  `finfo` can be
+ * optionally filled to provide the catalog information of the input
+ * function.  `typioparam` can be optionally filled to define the OID of
+ * the type to pass to the input function.  `atttypid` is the OID of data
+ * type used by the relation's attribute.
+typedef struct CopyToRoutine
+{
+ /*
+ * Called when COPY TO is started to set up the output functions
+ * associated to the relation's attributes reading from.  `finfo` can be
+ * optionally filled.  `atttypid` is the OID of data type used by the
+ * relation's attribute.

The second comment has a simplified description for `finfo`, I think it
should match the first by:

`finfo` can be optionally filled to provide the catalog information of the
output function.

Good catch. I'll update it as suggested in the next patch set.

After I post the patch diffs, the gmail grammer shows some hints that
it should be *associated with* rather than *associated to*, but I'm
not sure about this one.

Thanks. I'll use "associated with".

I think the patches are in good shape, I can help to do some
further tests if needed, thanks for working on this.

Thanks!

--
kou

#168Sutou Kouhei
kou@clear-code.com
In reply to: Tomas Vondra (#166)
11 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <26541788-8853-4d93-86cd-5f701b13ae51@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 29 Jul 2024 14:17:08 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

I wrote a simple script to automate the benchmark - it just runs these
tests with different parameters (number of columns and number of
imported/exported rows). See the run.sh attachment, along with two CSV
results from current master and with all patches applied.

Thanks. I also used the script with some modifications:

1. Create a test database automatically
2. Enable blackhole_am automatically
3. Create create_table_cols() automatically

I attach it. I also attach results of master and patched. My
results are from my desktop. So it's probably noisy.

- For COPY FROM there is no difference - the results are within 1% of
master, and there's no systemic difference.

- For COPY TO it's a different story, though. There's a pretty clear
regression, by ~5%. It's a bit interesting the correlation with the
number of columns is not stronger ...

My results showed different trend:

- COPY FROM: Patched is about 15-20% slower than master
- COPY TO: Patched is a bit faster than master

Here are some my numbers:

type n_cols n_rows diff master patched
----------------------------------------------------------
TO 5 1 100.56% 218.376000 219.609000
FROM 5 1 113.33% 168.493000 190.954000
...
TO 5 5 100.60% 1037.773000 1044.045000
FROM 5 5 116.46% 767.966000 894.377000
...
TO 5 10 100.15% 2092.245000 2095.472000
FROM 5 10 115.91% 1508.160000 1748.130000
TO 10 1 98.62% 353.087000 348.214000
FROM 10 1 118.65% 260.551000 309.133000
...
TO 10 5 96.89% 1724.061000 1670.427000
FROM 10 5 119.92% 1224.098000 1467.941000
...
TO 10 10 98.70% 3444.291000 3399.538000
FROM 10 10 118.79% 2462.314000 2924.866000
TO 15 1 97.71% 492.082000 480.802000
FROM 15 1 115.59% 347.820000 402.033000
...
TO 15 5 98.32% 2402.419000 2362.140000
FROM 15 5 115.48% 1657.594000 1914.245000
...
TO 15 10 96.91% 4830.319000 4681.145000
FROM 15 10 115.09% 3304.798000 3803.542000
TO 20 1 96.05% 629.828000 604.939000
FROM 20 1 118.50% 438.673000 519.839000
...
TO 20 5 97.15% 3084.210000 2996.331000
FROM 20 5 115.35% 2110.909000 2435.032000
...
TO 25 1 98.29% 764.779000 751.684000
FROM 25 1 115.13% 519.686000 598.301000
...
TO 25 5 94.08% 3843.996000 3616.614000
FROM 25 5 115.62% 2554.008000 2952.928000
...
TO 25 10 97.41% 7504.865000 7310.549000
FROM 25 10 117.25% 4994.463000 5856.029000
TO 30 1 94.39% 906.324000 855.503000
FROM 30 1 119.60% 604.110000 722.491000
...
TO 30 5 96.50% 4419.907000 4265.417000
FROM 30 5 116.97% 2932.883000 3430.556000
...
TO 30 10 94.39% 8974.878000 8470.991000
FROM 30 10 117.84% 5800.793000 6835.900000
----

See the attached diff.txt for full numbers.
I also attach scripts to generate the diff.txt. Here is the
command line I used:

----
ruby diff.rb <(ruby aggregate.rb master.result) <(ruby aggregate.rb patched.result) | tee diff.txt
----

My environment:

* Debian GNU/Linux sid
* gcc (Debian 13.3.0-2) 13.3.0
* AMD Ryzen 9 3900X 12-Core Processor

I'll look into this.

If someone is interested in this proposal, could you share
your numbers?

It's interesting the main change in the flamegraphs is CopyToStateFlush
pops up on the left side. Because, what is that about? That is a thing
introduced in the 0005 patch, so maybe the regression is not strictly
about the existing formats moving to the new API, but due to something
else in a later version of the patch?

Ah, making static CopySendEndOfRow() a to non-static function
(CopyToStateFlush()) may be the reason of this. Could you
try the attached v19 patch? It changes the 0005 patch:

* It reverts the static change
* It adds a new non-static function that just exports
CopySendEndOfRow()

Thanks,
--
kou

Attachments:

run.shtext/plain; charset=us-asciiDownload
master.resulttext/plain; charset=us-asciiDownload
patched.resulttext/plain; charset=us-asciiDownload
diff.txttext/plain; charset=us-asciiDownload
diff.rbtext/plain; charset=us-asciiDownload
aggregate.rbtext/plain; charset=us-asciiDownload
v19-0001-Add-CopyFromRoutine-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From 15505e1e2ed59644a567e40a7e8987823b49978d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v19 1/5] Add CopyFromRoutine/CopyToRountine

They are for implementing custom COPY FROM/TO format. But this is not
enough to implement custom COPY FROM/TO format yet. We'll export some
APIs to receive/send data and add "format" option to COPY FROM/TO
later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine/CopyToRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  31 ++++++-
 src/include/commands/copyapi.h           | 101 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 159 insertions(+), 8 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index ce4d62e707c..ff13b3e3592 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1618,12 +1618,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1763,10 +1773,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1784,6 +1797,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 7efcb891598..92b8d5e72d5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1012,6 +1012,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ae8b2e36d72..ff19c457abf 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -771,14 +775,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -805,6 +817,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -886,6 +900,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -910,15 +926,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..d1289424c67
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,101 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b4d7f9217ce..3ce855c8f17 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -490,6 +490,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -501,6 +502,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v19-0002-Use-CopyFromRoutine-CopyToRountine-for-the-exist.patchtext/x-patch; charset=us-asciiDownload
From b26d39f09dc78b3338aa4527d43cd0468f5ddf69 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 16:44:44 +0900
Subject: [PATCH v19 2/5] Use CopyFromRoutine/CopyToRountine for the existing
 formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 556 +++++++++++++----------
 src/backend/commands/copyto.c            | 480 ++++++++++++-------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 5 files changed, 813 insertions(+), 448 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index ff13b3e3592..1a59202f5ab 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -103,6 +103,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1381,7 +1532,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1413,6 +1563,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1566,25 +1719,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1617,23 +1751,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1768,23 +1888,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1797,8 +1901,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 92b8d5e72d5..90824b47785 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -149,10 +149,10 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
-static int	CopyReadAttributesText(CopyFromState cstate);
-static int	CopyReadAttributesCSV(CopyFromState cstate);
+static inline bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static inline int CopyReadAttributesText(CopyFromState cstate);
+static inline int CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
@@ -750,8 +750,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -768,13 +768,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -818,7 +822,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -828,8 +832,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -839,6 +848,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column %s: \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column %s: null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -856,221 +1126,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column %s: \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column %s: null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1100,8 +1170,8 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * by newline.  The terminating newline or EOF marker is not included
  * in the final value of line_buf.
  */
-static bool
-CopyReadLine(CopyFromState cstate)
+static inline bool
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1109,7 +1179,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1176,8 +1246,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1193,7 +1263,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1270,7 +1344,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\\' or '\r', we may need to look ahead below.
@@ -1309,7 +1387,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1337,10 +1415,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1354,10 +1432,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1365,15 +1443,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1385,7 +1463,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!is_csv || first_char_in_line))
 		{
 			char		c2;
 
@@ -1418,7 +1496,11 @@ CopyReadLineText(CopyFromState cstate)
 
 					if (c2 == '\n')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1427,7 +1509,11 @@ CopyReadLineText(CopyFromState cstate)
 					}
 					else if (c2 != '\r')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker corrupt")));
@@ -1443,7 +1529,11 @@ CopyReadLineText(CopyFromState cstate)
 
 				if (c2 != '\r' && c2 != '\n')
 				{
-					if (!cstate->opts.csv_mode)
+					/*
+					 * is_csv will be optimized away by compiler, as argument
+					 * is constant at caller.
+					 */
+					if (!is_csv)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 errmsg("end-of-copy marker corrupt")));
@@ -1472,7 +1562,7 @@ CopyReadLineText(CopyFromState cstate)
 				result = true;	/* report EOF */
 				break;
 			}
-			else if (!cstate->opts.csv_mode)
+			else if (!is_csv)
 			{
 				/*
 				 * If we are here, it means we found a backslash followed by
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ff19c457abf..c7f69ba606d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,321 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+	ListCell   *cur;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +510,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +544,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +731,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -770,27 +1074,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -803,58 +1090,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -893,15 +1129,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -917,11 +1145,7 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	bool		need_delim = false;
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
-	ListCell   *cur;
-	char	   *string;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
@@ -929,65 +1153,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	foreach(cur, cstate->attnumlist)
-	{
-		int			attnum = lfirst_int(cur);
-		Datum		value = slot->tts_values[attnum - 1];
-		bool		isnull = slot->tts_isnull[attnum - 1];
-
-		if (!cstate->opts.binary)
-		{
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-		}
-
-		if (isnull)
-		{
-			if (!cstate->opts.binary)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-				CopySendInt32(cstate, -1);
-		}
-		else
-		{
-			if (!cstate->opts.binary)
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-			else
-			{
-				bytea	   *outputbytes;
-
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 141fd48dc10..ccfbdf0ee01 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -104,8 +104,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v19-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 273918b50a2c64659376e4a9b8e42d2a6480abfb Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 17:39:41 +0900
Subject: [PATCH v19 3/5] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine and a COPY FROM handler
returns a CopyFromRoutine.

This uses the same handler for COPY TO and COPY FROM. PostgreSQL calls a
COPY TO/FROM handler with "is_from" argument. It's true for COPY FROM
and false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY TO/FROM handler.
---
 src/backend/commands/copy.c                   |  96 ++++++++++++++---
 src/backend/commands/copyfrom.c               |   4 +-
 src/backend/commands/copyto.c                 |   4 +-
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 ++
 src/include/catalog/pg_type.dat               |   6 ++
 src/include/commands/copy.h                   |   2 +
 src/include/commands/copyapi.h                |   4 +
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../expected/test_copy_format.out             |  21 ++++
 src/test/modules/test_copy_format/meson.build |  33 ++++++
 .../test_copy_format/sql/test_copy_format.sql |   6 ++
 .../test_copy_format--1.0.sql                 |   8 ++
 .../test_copy_format/test_copy_format.c       | 100 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 21 files changed, 313 insertions(+), 15 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index df7a4a21c94..e5137e7bb3d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -439,6 +440,87 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -481,22 +563,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1a59202f5ab..2b48c825a0a 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -244,7 +244,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index c7f69ba606d..a9e923467dc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -435,7 +435,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 73d9cf85826..126254473e6 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7644,6 +7644,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..14c6c1ea486 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method functoin',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index ccfbdf0ee01..79bd4fb9151 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -84,6 +84,8 @@ typedef struct CopyFormatOptions
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d1289424c67..e049a45a4b1 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,6 +27,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated with the relation's attributes writing to.  `finfo` can be
@@ -69,6 +71,8 @@ typedef struct CopyFromRoutine
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated with the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 256799f520a..b7b46928a19 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index d8fe059d236..c42b4b2b31f 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..4ed7c0b12db
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,21 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..e805f7cb011
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,6 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..f6b105659ab
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,100 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v19-0004-Export-CopyToStateData-and-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From a6670ca32945b19f5c2a35b6f4094fa8286ed327 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v19 4/5] Export CopyToStateData and CopyFromStateData

It's for custom COPY TO/FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except
CopyDest/CopyFrom enum values. CopyDest/CopyFrom enum values such as
COPY_FILE are conflicted each other. So COPY_DEST_ prefix instead of
COPY_ prefix is used for CopyDest enum values and COPY_SOURCE_ prefix
instead of COPY_PREFIX_ is used for CopyFrom enum values. For example,
COPY_FILE in CopyDest is renamed to COPY_DEST_FILE and COPY_FILE in
CopyFrom is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY TO/FROM format
handlers as extension. We'll do the followings in a subsequent commit:

For custom COPY TO format handler:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer

For custom COPY FROM format handler:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/backend/commands/copyto.c            |  77 +-----
 src/include/commands/copy.h              |  78 +-----
 src/include/commands/copyapi.h           | 306 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ------------
 6 files changed, 320 insertions(+), 320 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2b48c825a0a..5902172b8df 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1699,7 +1699,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1827,7 +1827,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 90824b47785..74844103228 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1188,7 +1188,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index a9e923467dc..54aa6cdecaf 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -464,7 +403,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -511,7 +450,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -545,11 +484,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -928,12 +867,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 79bd4fb9151..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,87 +14,11 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
-								 * NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index e049a45a4b1..e298b19860c 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,12 +14,83 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* These are private in commands/copy[from|to].c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
+} CopyFormatOptions;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 /*
  * API structure for a COPY FROM format implementation.  Note this must be
@@ -65,6 +136,174 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
+
+typedef struct CopyToStateData *CopyToState;
+
 /*
  * API structure for a COPY TO format implementation.   Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -102,4 +341,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v19-0005-Add-support-for-implementing-custom-COPY-TO-FROM.patchtext/x-patch; charset=us-asciiDownload
From 0cb173c99599c0669891642e6f1adb414769ae8c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v19 5/5] Add support for implementing custom COPY TO/FROM
 format as extension

For custom COPY TO format implementation:

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()

For custom COPY FROM format implementation:

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 14 ++++++++++++++
 src/backend/commands/copyto.c        | 14 ++++++++++++++
 src/include/commands/copyapi.h       | 10 ++++++++++
 3 files changed, 38 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 74844103228..a115d7f9e26 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,20 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * CopyFromStateRead
+ *
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 54aa6cdecaf..b8d0e996117 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -500,6 +500,20 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * CopyToStateFlush
+ *
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index e298b19860c..5665408eaa0 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -299,8 +299,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 
 typedef struct CopyToStateData *CopyToState;
 
@@ -402,6 +407,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

#169Tomas Vondra
tomas.vondra@enterprisedb.com
In reply to: Sutou Kouhei (#168)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 7/30/24 09:13, Sutou Kouhei wrote:

Hi,

In <26541788-8853-4d93-86cd-5f701b13ae51@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 29 Jul 2024 14:17:08 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

I wrote a simple script to automate the benchmark - it just runs these
tests with different parameters (number of columns and number of
imported/exported rows). See the run.sh attachment, along with two CSV
results from current master and with all patches applied.

Thanks. I also used the script with some modifications:

1. Create a test database automatically
2. Enable blackhole_am automatically
3. Create create_table_cols() automatically

I attach it. I also attach results of master and patched. My
results are from my desktop. So it's probably noisy.

- For COPY FROM there is no difference - the results are within 1% of
master, and there's no systemic difference.

- For COPY TO it's a different story, though. There's a pretty clear
regression, by ~5%. It's a bit interesting the correlation with the
number of columns is not stronger ...

My results showed different trend:

- COPY FROM: Patched is about 15-20% slower than master
- COPY TO: Patched is a bit faster than master

Here are some my numbers:

type n_cols n_rows diff master patched
----------------------------------------------------------
TO 5 1 100.56% 218.376000 219.609000
FROM 5 1 113.33% 168.493000 190.954000
...
TO 5 5 100.60% 1037.773000 1044.045000
FROM 5 5 116.46% 767.966000 894.377000
...
TO 5 10 100.15% 2092.245000 2095.472000
FROM 5 10 115.91% 1508.160000 1748.130000
TO 10 1 98.62% 353.087000 348.214000
FROM 10 1 118.65% 260.551000 309.133000
...
TO 10 5 96.89% 1724.061000 1670.427000
FROM 10 5 119.92% 1224.098000 1467.941000
...
TO 10 10 98.70% 3444.291000 3399.538000
FROM 10 10 118.79% 2462.314000 2924.866000
TO 15 1 97.71% 492.082000 480.802000
FROM 15 1 115.59% 347.820000 402.033000
...
TO 15 5 98.32% 2402.419000 2362.140000
FROM 15 5 115.48% 1657.594000 1914.245000
...
TO 15 10 96.91% 4830.319000 4681.145000
FROM 15 10 115.09% 3304.798000 3803.542000
TO 20 1 96.05% 629.828000 604.939000
FROM 20 1 118.50% 438.673000 519.839000
...
TO 20 5 97.15% 3084.210000 2996.331000
FROM 20 5 115.35% 2110.909000 2435.032000
...
TO 25 1 98.29% 764.779000 751.684000
FROM 25 1 115.13% 519.686000 598.301000
...
TO 25 5 94.08% 3843.996000 3616.614000
FROM 25 5 115.62% 2554.008000 2952.928000
...
TO 25 10 97.41% 7504.865000 7310.549000
FROM 25 10 117.25% 4994.463000 5856.029000
TO 30 1 94.39% 906.324000 855.503000
FROM 30 1 119.60% 604.110000 722.491000
...
TO 30 5 96.50% 4419.907000 4265.417000
FROM 30 5 116.97% 2932.883000 3430.556000
...
TO 30 10 94.39% 8974.878000 8470.991000
FROM 30 10 117.84% 5800.793000 6835.900000
----

See the attached diff.txt for full numbers.
I also attach scripts to generate the diff.txt. Here is the
command line I used:

----
ruby diff.rb <(ruby aggregate.rb master.result) <(ruby aggregate.rb patched.result) | tee diff.txt
----

My environment:

* Debian GNU/Linux sid
* gcc (Debian 13.3.0-2) 13.3.0
* AMD Ryzen 9 3900X 12-Core Processor

I'll look into this.

If someone is interested in this proposal, could you share
your numbers?

I'm on Fedora 40 with gcc 14.1, on Intel i7-9750H. But it's running on
Qubes OS, so it's really in a VM which makes it noisier. I'll try to do
more benchmarks on a regular hw, but that may take a couple days.

I decided to do the benchmark for individual parts of the patch series.
The attached PDF shows results for master (label 0000) and the 0001-0005
patches, along with relative performance difference between the patches.
The color scale is the same as before - red = bad, green = good.

There are pretty clear differences between the patches and "direction"
of the COPY. I'm sure it does depend on the hardware - I tried running
this on rpi5 (with 32-bits), and it looks very different. There might be
a similar behavior difference between Intel and Ryzen, but my point is
that when looking for regressions, looking at these "per patch" charts
can be very useful (as it reduces the scope of changes that might have
caused the regression).

It's interesting the main change in the flamegraphs is CopyToStateFlush
pops up on the left side. Because, what is that about? That is a thing
introduced in the 0005 patch, so maybe the regression is not strictly
about the existing formats moving to the new API, but due to something
else in a later version of the patch?

Ah, making static CopySendEndOfRow() a to non-static function
(CopyToStateFlush()) may be the reason of this. Could you
try the attached v19 patch? It changes the 0005 patch:

Perhaps, that's possible.

* It reverts the static change
* It adds a new non-static function that just exports
CopySendEndOfRow()

I'll try to benchmark this later, when the other machine is available.

regards

--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

Attachments:

copy-benchmark-per-patch.pdfapplication/pdf; name=copy-benchmark-per-patch.pdfDownload
%PDF-1.4
% ����
3
0
obj
<<
/Type
/Catalog
/Names
<<
>>
/PageLabels
<<
/Nums
[
0
<<
/S
/D
/St
1
>>
]
>>
/Outlines
2
0
R
/Pages
1
0
R
>>
endobj
4
0
obj
<<
/Creator
(��Google Sheets)
/Title
(��Untitled spreadsheet)
>>
endobj
5
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
842
595
]
/Contents
6
0
R
/Resources
7
0
R
/Annots
9
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
6
0
obj
<<
/Filter
/FlateDecode
/Length
8
0
R
>>
stream
x�����#����������}�Oq�--ro
2Z�t��Hg8L�T��`f����V�
�)@w����_�������v�?����������������:���q��G������{��_m]��q�:��]5"�������|��-��
:�����D��������E�?�����~'<�R����s���I���3������I����
H�����?����?��2�t�L�.�oP���t���"�8��Oi[�w����?��c,��Guk���")��~F:Y�k�?��w���v|�l�;;�����b����H�N^l�����������]�����R}�Rc�$A�������O�����]���������]l������#�I�A�������"}�"�z�� ���+�;J����|�������b��k�����H�N^������������v��k�Cj]k�A���Wz�����~��0������N��H�N��Ax'k��6K�.��e�D��_����=�W��������u�Q.��b_�%��+v]<�u��d�~>�W�)�g�:�e��K�[��]o]/�7V�7tn!����t~��3���r\���Ud�6�J@V�y�<�%'��G��S�O��
��
�k.h��������]-�]��,8tUY�M��������/��"�]q�v�8�U:�\�|�\,y����]p����N. +����r�'g��cX�aS/��U����
��OF[i�f+M ����s2��n�m���i�������G�Z���/�r�����:���|�wW��i�7[g�i�L 
DpA����+�?�]��uf������<�l�����"Z��c�uf����B�OT��eF����s�e&���}F�)x�Bzkh�=w[f����@��������]��>���,x�2s�����y<��E6�����������r���"w����u��B�4SY���������4?g8��;��nj��+��"a~�+����D1���b���N^����&����b7!��t�b��.^���D-���a�����{Z�����A��;Q�&d��N�}�Y������f���)&1}�^H��iq._����D�0<Q�&$��N����F'�"����`xf�I���*��j����"\MT�:k&!��tz���y��k�����Zt<3E ���Bo���I���hP�_V��������Y��DI�(91k��kIJ����������j���.X�� �#�z��P�'*N�cy�R�/��
�n\��dO��x���,0�W�o0�VX�����hVp��������at4Q~'�M��x��oFi.����Vp������n��4oZ����D��Y`�W,o�C7?�z���,0����bes���&���D��Y`��X��������O[e&��.�W��=3�?��'f�syE�x���g����������W
+���Ld�\��4���P���BAX�(81+��+z���\vJC�=,
����Ld�\�4����9���2�s����N������^�?�M[�?���=���i��D������������f�����3��_����n.���+}�$��{��r��xc9��t�n�����!��}F:Y�O�q�6Q+|�^V��N����](6�`|p��i���Ryc?7.07Q+��`v��N���`nf1���o�T�Wg%^��X���4I�N^L�L�b����S��P�G0]�������T���V���N����N�}�|�{3k����E�U�:��d�'�d������:�\���7�h���bAX�l�U��z��}����>�BYq�Vq�CpA�(��c
sa}x��Y��<`��c��Vo�Vo�TCpA�������zp><y9�������oHGo���Y��s��-do�������/�*���H?�����Vp������������u��G/6�"����F�G^��oPp�J�
\P
>l
�u��&j���d�)��2�=����q��&�
����B|��{�������><z�i��$��<����tBY��u&%"���I��E^mS	�&J�����f^����p�@��`oP���&"���]+�o� ��`l�EpA�ib���������ikM jDp�29����p9� =��d��?`YM��#f:>�tD�u��h���MG�%�)"��Eg�<+6g���#�IH>#��Tn�s�9y
���B�p�J��t�B#�IX;������`p�i�������I�-�%�u�"�{p�K��t�O�a����fV���Q�����J^M�]~~8yM�ba|p�$}D:y1����1C����������J���E�{�y
���R]�KP$�H���~>�����h|x��)b���zrxr�Fo�z��z]'���GIk�`|p �-V���f�������A��Z������������������
���$��,�lPp�Vp�TCpA/�w6��{xsX��=��R�����A���������oW��K���U����/�*���b:�w�`jPp+8l�Ep��&��DIx��������h�`kPq�"�\�H�����98��m�Ep����6���a����@������G�����9<p�i�����_����0A�K���"w|���q�<8�����f\�*�K2���z���N[VQ �z=������%�wP��-6�"��W����WK���00(x���
\��g9�J%�[00� ���d��?�[�<}�
���s�����5��q�H���s��&f������I�>#����r�i{��1Q*,N]VI�N^��jG�3k����e��}y������=�N�.�d�H'������2�|�\���W�Z0rw��D��78li�6"��&~����w�������J���`&�u�.A�>"���'�3�����EgS�:�aNi�����\��\�������ha�"�=��J���"����7�����X�������>������"�Pab�",OZ6+1�,��c
��:�\��"�t�����b� <�Z�0���w+���Y�����������z������n%����.s�U��-X���
�z\��G�x�&�LT���Q�M�.�~!}�j(�*[mQ"��^����@_��Ax�a� ���eB�\F�����M�.h%��t��/�o�-�&};�*�6�Q"����]���x�('���\�
��\p�{�B���x
a����^O����\-����i�0"���������43	�%���.TQ�:��e��-�'tG�t���8Ed��_��3<��4
Q� �	&!��t�bol�| ��;���*�#���}��"�,s���M�������6��c�fX,�N&vI�N^L�������,s�s�C��������}�D��8�h�="�����w:V��Y�]��������n6 ju�7A�="�����`��A���N��u*�,��I��>1 ����u�U.X
~�� 
��|`[�B?��\�J��_/�7V�7tz!�����\�,�/�����p<����X���0�N;���Xo�Vo�DCpA��t3�|������$+0��zu��>��f��N/,��w�h��,��%�>�zs$�5�5��6�"���k��� (����6�"����������Qo�R�\�\�~�6��(� (�
�|���~8���
<m-	D�.X>Q�s�)<E���Q�M�.h�����x�R��i�I *DpA��O�8xa�.��6�^����Tv[b�0�O�{\�+�����g�-3�8<�������Z<m�	D�.�Oof����)�,p����>f��s�D�����qB$����L�W9�acf-X�8&����H�R���<LL�
��#�U���v�Z��L��&\����#�M���������O��(g����N����U�cf1x�M��o/T���7����M��D��88�h�}F:�Z�x�<�&�f�����Me���U��D���f��H�w�+�>�J���px&��j�:�U�����0(�/+�u^Ep���$��>�0Q��b����`���5|H���c��C'X�?,�t1Q����+�������c��C�Z,����L�#+0�W|�`><�
��F�rCg\������*���8�[�q�b��t_��b�1���i7���g;�z=AE�F������O���-4Ya����'
���<b�i7��/��;[�-5p@<��7�j���@s�`}x�aSn�7��M����.��6�w�
3�fpA��������DE8�}�����;�W���!_Z��A�����,1�z��@����b�P���-6�fp��g����[p���N�O[f&��.X*���OT���I���_���O�R�����M���>��SD��W��pf)��8���3�IJ�N�z��*�{p��J��t�7���l}�b0>8m�4}_^��}zZ.�M����]�G���(��Y
�'.����+�������D��>8ri�>"����c	�B-X�t���W�Z�M��:g�"{D:y���f�]�����E'U�:����CNaoP�_V���Bp��a���������DA��~l�U��z��#y.hz�,8V+8t�!�`Y��6�����fY�����n�����A��[��3�}���>��DEX��VblX���	T�5(8�:�\��z��[�3Q	f��/�R��_+�9r��A�1���)���_��{t�1��2QF��.6�"���+��W�iePp���
\�~��p2Q>� �M�.�cc"d�����-6�"���������1Q.��-6�"���y9��!:��;mY	D�.Xz���{�\����p9<m��������3���i�J *DpA�H���7����DA�������V��;��k�t#jz��ikL JDpA�����g�?������493����e���������p�rS����H��������p.Q*<N$B��d�>uG�_Pk:���#��k��O��T��
g.�&��+y�O�[�{A��sPlR��H'/���'����p�rh���R���|J����A�I�="���Gs�%����p��5?^������N����N��=> ���%���l<t���No��'@Y�_V���Bp�R��n�a��9���|�w�h^~����X��������<>?7���h�nYb,������1Yp�Vp�DCpA��������b�Td��=����v�00�8�U:�\P*�����A�p;����x�+�������Vj�D�������������^ ���o�lo�C������%5"���~�a]P*|J2�8�����<Y��U%�#��C�g������V ������>?g��%O[QQ#�ZI=����F8�����pnh�C�'�e���O[OQ!�zAv�z"�5�
��A�@V8���w��O[\Q!�Z�q_W�b$s��o�z09��g�7���'���,���4���4���#�)"���p2�\N{LB��d�>ne��D��98cY%}D:y����+3K����e��}y%)��
e���he������������Rp78X94y�^�K�����X���4I�N^��Nx��
NV�f��+�7����i��3&(�G���7���[��Y���g*:�"���f�����u�R.�o&�KT���q��X�~>�W���q�B��A��Z��s��������DI��lVc,X��6�acPp�Vp�|Cp�72}|�#ML������a���E6�$	���Y�������C8������n������n��ZcX�a�.��U����`f�"�Yl�Ep����19�>lM	D�.�^��~����lp�����������@8T:m%	D�.��(���w�#�X\�*~�S��N[GQ �Z����;m���y���.����o�����iI JDpA��������-Q
��')6�"������=�T<m%	D�.�g>O����2�����53	�%��������1���K|����M�|btD:E�����g�T�9Q�&:&!��t�Zr2?S�
�%j�����*�#�����o@��u�{{P
��*����+y5������T�wP,UvI�N��"2��Y�*�f��+y��k����H�I��tz����)L�,�������JV���"s�&ju�7A�="��6����m���Rt7<J�I�NVL������=�a�e��,������{��_� �
�7��*���&��*]�=�l���X������^��B�������@e�
cy�R���R�_Pq�Vq�dCp�2#>|'&
���<��
c{@�M��>��

�f��;��w�ox����8��4�r��S� �cPq�8l�EpA�������p9<]����m�������&"����������D=8�}�6�"���e"��3}����"�r�]��y���Z0><c�)��[��C�<m�	D�.�%��hw���l����(��S�t\�Mc��_�.-?=w����2����]���$�K���@<g�I����O��kI��<m�	D�.��$���_O~� =��d��?��+����0:�/�D�\�i����3�	����-�����S�Q
(NAnb�;����}[�D����ba�p��J��T�q�/�����/R
�.�&����E����-�����e��3����5e�,&�:@18 ����o/T����3�����D�0@8vi�|F:y)���������b�@8v���/T������{�s�X�i3	�g���g������h�R��.:�f�S��}�_��A�~Y���*�z��Gy�C���p��-V�����->�
����X���	�K�O������?<j���X^��E���/�O����p#<�P�GpA�x�����G��C�@|?9��v�Qn�' �
�����/��g��Vi��gp���>}u>#*���4�&�.X���)�6�'��.X'����^���0"8��m����I����0(x����
3�`)����`8���El����o���?�N����nO�r3���7���J�aFx.bsn��9��H�~��v�3��gp�R-��������#X
�g"6�fp�Z��r�A�������iK�DV��K���h<�9�����"
�L�%����N.�0���#�hG�����t������,HVLB����~�oa2�T����<"��������������J^JMyJ���0Q+NEv��N�Va��C��&�`?p(rh���������0Q,�E���H'/���|�1f-��t���W�Z�c#��e�c�'�)��<b���x�i�T����e��J�����]T�'����X�~>���~�r���X��P�#���KA>��h�� LO(6�0�,�Z>�����n����o������og��������
c{�7���#�i2Po4�7t �����;H���Ax>���8P
~��O���>�e6�"�`�����[�`:xa3,�����/H�X���U%5"��������+�"\�v�e\�������w���\��e���B�����	�c\�m7��7��b��d���@T����
�{ee�\E����y���.X.�X���5���#]H<mQ	D�.�����Z������E�����o�1�fN��)�
����B|�Q�A�_3�
�{�@V8�z��w��c����8����GKG�SD�������`?��`��H'��^����&#j�����*�#��]-�������D-�Jl��/�����s���!=<F�
��3�]�G�����|�&�`@p(qh������K;�ba@p(�$}D:y��������`Ap*�5?^������,@c���&(�G��u<�yq���ux��*b���}:���A�~Y���K�O���3Qf�b%���E*Og��?��c��C'��-���������J���I�44(8v+8t�!���t�'�L�����a���VO.��?�C���Y�����
����.=�������[�q<`�~z�<*�a���.�����z���z�@<�y��^�8�����x�������R��Wx�-1p>8��m�Ep��3��C�T<m�	D�.�/W	�������q\������	�O[aQ!�z���������\, ��g?��A/���-1����;�d�N[c`~xbS.��m�w�	b����@����E�y���|��5�M�Ld��?����t�
C�~��i8��i�'IG�SD����B���,��'����y�$���N^��i�)
8�(.G�$�H'/�N�0��
�<6M��W*E�w�
19����X�z��>"����)3k�������}{%���L�0Q+�
=�d�H'���S00��
<�&��+y��1o��1�=�lmZ��L	������G����b�7<\���N��������e��N)��	��np��-V���f�z���{A��Z�����~���i�t/Q��'+����i�|WE~��/�8v�8t�!�`�|��/��������7<\9����+�������hVr��CpA+)_U������kO\�U�������~l���a��M�.X����d01Q�G.6�"���|z���
8���B|�;��c�,��#��f_���>�N[m�?��r?��s�R����w\�H4��M+nm��a��V�@T����{��/N��DA����������_V��A��V�@���o;���F�b� <�[l�Ep��
!&c���>:����B��S���z�:3����o���0|M�%h����k>W:"�"����K��G����|� d��H'��v�p=�a� �
��3�U�G�S)��L��c�v(j���e��}y%��3�O�}}Pk�����.�#���G���sgV���������J^I�x��C�z��D��?8pi�>"����/�L�,������JV��
��8Q���	����F���o��Y����-:�"��(Q���_�{y.Z�����:�\���p48Q�'�b%���������`����:�\�Lv&��'
���e�
cy@W����n��7�?#'��T����D9����l�����|�G��C��zElv�.�u~08Q���-�j�������v,������Vq����������J��~x�bs/�J���>�d��"]|;���O�����n�,���������A����@T�����{o\�e��OWl�Ep����������B�����v����%_������:<^����>����-�b~X��e%5"�`)�����h���T���A�M�.�O�&

����B|�S���V����H�3�Y����C}<�����\8}��s�O���N�|���w������Z�;q2r���N���=�����f��3����Lv�{~}�f���1�����B���G�p5Q*NavI>#�����#��Y
��0�&���R�N�`k�XX�4I?#�J����if%��t����J#/m��������Z]'�$d��N�]}���if5�����N^��-104��/��uVEp��Y~x�(�L����Q��X�~�by��A7��c��C�W,��������f����������c��CgZ,��/���!�L������a������G�����hVq������#}z���x������n���Z��xz�0<*�a��M�\�����J
�����f�.X����a�a��D���x;�?1:l=���y�n�k|_���87[N`qx�b�k�?����DI8������������Ld�\�vC����+�L����	�M�\��)�8�,x�r2�fp��-�|9����AE���4�������A����,1��c�G3+���$�Y���X��/�-������L��9��#�)"_�3�tVf������IH>#�����@���basp��J��t�b�W�o��U����`sp��i����KQ�7�zv�03Q,�\vI�N���<��ff-8����o�d�>�2,�L�
����&�#��K}�������tp��5{?^�k}�Iv&�u�7A�>"��g��#M�df)������X'/���������^��^������"����yC$�L������X�~>��_���O���c:���:�\�����U��DE��lVb,h??{`[����������^�o�|X>�G,�������f���hVr��CpA+�{Q�+�zK����:<b�Vb�2�|6	W��cX�as/��������������.X�z\�^���(�
[iQ ���D
\N��I�n/����YQ�;m�	D�.(�~zh�MT�����M�.X��O?as���-1�(����������`o� �\l�Ep�w=Yn����4CY��5&%"����8��r%����0?<p�����7�����i�K 
Dp��y>?�:79anfEZ���g�X�����/�A;N]n��)���w������A�;#�J�`��7r�'�Z�������N^K��v��M�����8m�4y_^�]��m�01�4�*M�����>>=lLT�������}{%������L�u�R�����H�NV��ok��e�#��D�0<;�[�f��+Y�����0��u�E��t�w��vs8�(����E�S�:m||&S���:�\���g��u���A�@���J��o���Zc�ZC'����=?��|������0�,r�q�����n��N2�����a_P1�*����*��g�pK�5���f��N8�z�+��C��d�q<`������U�*�t\�,��O��Y����b K���o����7�}a�a�L JDp�2���i�����n����<���V��4�t�����~���
S�Z�L~.���/��IA�V<m9	D�.��>������^ ���^�c���L��z�-&�(�����l���^�d��x�w3���?�RX���$%"���O�����(Q�&RY��X4�����[�_�p:�Xn:�s�#�)")���?��2������$���N^��N0�y���b�mp��J��tz[��)h00��
NX6���W�Z?�*8�(�,�$�H'/��)�/��
NX���W�Z��p������I��t�b�c�����np��5{?^�j�y�m&��u�8A�>"��X|��M',�,E���T����U�������^��^�y���VQ�Q�/���DE��ul������mO;\01�7V�7t�!�����[��/Q���*�%���X�_Po�Vo�,CpA���.00Q���*����[�����Y����=>>�A�L����J�
�x�rQ���>�
�t\�~���%
���\��\,S��kn�}���t\�\w�t����D=xm�6�"������8x�;mA	D�.������ixlb*�������jb?z����-"�(�������-Q���&6�"������`<m
	D�.��;y�qC:�(_���R\�\�><Mm�%���&6�"�`�+�n,L���c:�GW3SY��(���������������������?E���������g����[o�z�����_3|�^j��X3J_G���c�A������:��=�=�{���s�y����A�rd��yp���7_��&
��#���[���K���s�10���#G�#����)����������K�����8r[����U,��#wJf�f��B1�S6[�n��{��8���l����y�dF
�����$������
�W��]d���������Md�����
�W��!�qh��}@C��=��8���~AC��\D6���4tl��q�l���q@C��u���cp�����th�8u�1�������j���1�sGACm���&�qXRCm���
�Cd�����
�j]d�p��Z��Z���)�q���vBC�����l��{m_���@C�g�5AaI
�>�����Md����z��z�����3�����������+���k����
�7%�`���
���>�u�4XSC�',����D6{jh>������Cd��RC��I_|u��D6#54o9����:��ls_�Wh��_��-�����s���{d�8������W��Sd����u�=�_��W���
:2�.�?Vb�y�����o2���X��"��	�.���E�!)����lsb���&Y��mM�8�oCl�<��]G:��C��<����#���!��<��<��#���!��<�%y��Ap�e�,z>%��M�N��k��U�h�b�{A�����
n��:Fw��<����p1�WTB��s�Sv��U=�3�U��V�3�H%�i��B��]��Up��zF���<�*��p=��T��O���'V=������zF����nT�y�������"����zF[#�������I�#��gE���-�g����iq=��Ub�C\hs=��Ub��
.t����*1��
.�]��w�x]T�N��"V���3_\���3za%�i��B�����Up!���U=�aM�e]��(}�e���z���]^(�g����+��vUp�����Z�y�*���zF��<C\����m+1��
.4\��������`����z�Gs��&����zF_��<]\�p=�KWb�S\��zn~�V�����[������g;_��W�I��.�������hn�~�F�����^�l�~����<����l�~)pX��R�=�R��B��������a��MeO�K��
=n�����Bj�h}�M���/+��d3-[�_
V�q�TvQ�8�����l�~����<������~)pX���T�f�R��B��������a�7Xe��K��
=���>��o�n��AO6��%���a�Dl������z�R���/�{��'z�]���/+���*��_
V�q�U�c�8�����l�~)pX���X���R�%�����l�~)�E�H������/+$b�6T6c�8�������~�&��<��6�l�~)pX��Y���R��B����q���a��ie�K��
=n��v����B����������(e�(��_
VH�Vz��@~)pX!9"�i����F1^��W�
�VAG�����1�.un�"v|'���G���H���e��5I��v��0'��m��hz�����+b����4m�����C�DW��s�tb���S�Dc��s�tb��K�Do
�]2�)�Xm1�-�g7�:��E��wW�b+8F:�.al+1�P�j�cl+1�9��m1bU��w'���G:eg�X�3Z��]\hu=ccX�y�*���z����Up��z����\��B����a�\�T�N�(c�S=���]�������1��<�d��,�����zf�<G:u�36����=�=�);o�����zf�<�8-�gl+1��
.����1��<]\�p=ccX�yNUp��z���/��*�)q�����zfWc�����a%�i��B���J�3T�����J�s��
�36����m�=�)�{�����zfg>�8��gl+1OS�]��Vb��
.�\��Vb�K\h���1���nU;e��X�������Gkh����1��<]\�p=ccX�yNUp!6����}�����*.��W����`������G�.�}�Q��#p���O8we�~=Im�t�s��u�6��.<hk����:b���.<��:���:b���.<���~����.<�<u��u�^�'�p����N��Ch��n�<�	���:bM���z�t�]�����g�p5�1�u%��T��������C�#��_G��]x��
.�����+1OS�]�����g��5�3�u%��T������R��`��������M��=�8m�g��J��mAv:���mM��gt�1������+!:�9�)�u�����m��B���zn��z�t�\���������g��J�s��u�3�u%^DU�S���U=�E��Wc����~]�y�*���zF���<C\�����+1�e]��(}�e���zF�>G:e��X���|��
.�~���������H����~]�y�*�Ps=�_Wb�K\h����+��[U�N��#V�|��gt�h
�V�3�u%����B��������B����;G���p�hG�~=�q�hG����_O@
\'�Q!���K
��m>3EFd�>I�~�v��0���#�I���pu�i��_���y��O��a�t�~=b��A�>	W�9�)���=5��I�:��N��G��y����.�$�zm1�-�g7�:e��&�]��}�t�]�����g�p5�1�u!��T���������Co�I���g���pu�y��_�X�3��IM\hw=�_b��
.�\������R�g��B������_�UO��~}��
.�����1O���(Kr�5���������������Co�I���g���6Up����~]�y������_�X�3��I]\�p=�_b�S\������"�����_�X�3�����-�g��B��T��v�3�u!���B���~]�y.�2�F�3.k4.�3;�v�����zf�>iWZ]�����z;^)���U=�_�4T��������\��B���~]���
v�~=bU����3TZ]���������g��B�s���_?��O�;^��Wq)8�VAGF�.���*C6/��R�MF�_��]RD#>��e���<$E�����aN���$����i'�����'�����H'����'���>t��u���'������N��{i�����KF:e��-&�E��&\'���5���_t�1�iw	�_Wb���-�\������R�.f��J��}�t�~��gt�A�*���zF���<M\��:bU�����*�Ps=�_Wb�K\h����+���
v�~�����T���#���zF���<�d��,�����zF�#�������C�#��_G���-�gt���iq=�_Wb�C\hs=�_Wb��
.�~����U���c�Sw=�_W�EtQ;e��X�s_T���q56Z\����������g��J�3T�������\�e8��g\�h\�gt�s�S���U=�U��=�8��g��J��T��v�3�u%���B���zC��=F:
�3�u%vt�*�)�u����U������zF���<]\�p=�_Wb�S\(���Jv��W��.�W����0��+l^�zR�:�z���g�.)����KD��_����@�~;�{�S���$��I�:�4N��Gl�<��'��0G:e��C��_�������z�����$\�H���#��<��Co��t�~=�������p��_�X����e�>G:�.a��B�3T��������\��B���~]y����B��G������]\hu=�_b��
.�����1���R���zf�>�R�g��B������_�UO��~}��
.�����1O���(Kr�5�������J���~]y����B��G������M\hq=�_b�C\hs=�_b��
.t����1:��_)���U=�_���E�$�z�������X\hq=�_b��
.�����1�Pj�g��B�sY��4J�qY�q������B��G������]\hu=�_b��
.�����1�Pj�g��B����W�~=bU���go�����_�X�3���U��V�3�u!����B���������B~����Y�5~�������Hy|���,�����a�d���H�X��(�]R�����[@R�Z�_U8$E�*z#q��q����[E'��&!�,�5O�*:�4	qd��y�V����I�#��'o��[��8���y�V���e��L2F��4D�x������
��vW�{����T�r���K5�v:FR�-�7��'JYIu(�xN�U�h�cd!����9���N��B�C��s�P�����T�r���Ku�v:FR�-�7�a(JYhS�-���!��YHu(�xN>U�h�cd!����y3������T�rk��Mu�68FR�����!��YHu(�fN��C��1���Pn��|����B�C�5s^��!���TR���q�S�
���hW������mp�,�:�[3'_v9��\�����LQ��J�C��r��:D�#�����Mu��5FR�-�����k�,�:�[*'_�C��1���Pn��m��:D��N!���R]���?�n?��.Ju(�TN��C� ������;"]�x��R�����y�(��#��9�
?�����qD[��2���mn�"��'���G��[��y�]F�;��CRD�;���=���1B�dA���v�qb���y��
B_;G:�?F��<�����#��#��<�����#��#��<��Bo��t��B[Lv���M�N��k��U��|��N�K[�J�3T����[�J�s�z
3�������=�)�l����=���B��[�J��T��v�3����g��5�3�����R�glE+���
v�>�����T���g�����h%��� ;eI��&w�3��9�������<����N��#V���3����iq=c+Z�yUp�����h%����B��[�J�s��u�3���x]T�N��#V������*��u\�U�}W=���#�v�3����g��5�3������.�i�>��F�R=�_�G:e��X��XU���g�����h%�i��B��[�J�3T����[�J�s��
�3�������`����z>���P\�}?�A��y������W:\���Vb�S\�}����x��6�K���:2�u��K�b�y����"V�9���z��"����]F�_��CRD>���~�M���5?�8�_Gl�<����#���#vh����b���N��{j����b���N��{i������wY����_Wb�����~�&�]��=F:�.a��J�3T�������\��B���~]	y����N��#V��.<hWZ]����������g��J�3T�������\��B���~])�?U�S��X�T����Up!���U=��� ;eI��&w�3:���]���������:bU����6Up����~]�yUp����~]�y�*���zF���<�*�Pw=�_W�EtQ;e��X�3�p\�U���3�u%�i��B���zF4T�������\�e8��g\�h\�gt�s�S���U=��U��V�3�u%�i��B�����Up��zF���<�*��p=�_WbG�����_G��]8:CUp����~]�y�*��u��������B����e�/���p��K�~=�q��K����_O@
\'�R!���K
��7���
����CR�_���=�)��m����$\f���#�k���pu�#��_���y��O��a�t�~=bO��~}�s�S��{i����KF:I�B[Lv���M�N��G����$\�H���#V5�~}�P�j�c��B�s�z
3�u!�a�~�t�~=bU���'���B������4Up����~]�y�*�Ps=�_b�K\h�������
v�~=V=�3��I�*���zf�.�<�:����_�X[����z_^�����!;�������zf�>iSZ\������P�\���������g��B�s��u�3�u!^DU�����zf�cUp����~]�y�*���zf�.�<����J��G���������Q����K���//$�z�����O�U��V�3�u!�i��B������Up��zf�.�<�*��p=�_bG�����_�X�3���U��V�3�u!����B�������C��+u�y������W��U\
��V����`������G�.�}�Q��#p���O8we�~=Im�t�s��u�6��.<hk����:b���.<��:���:b���.<���~����.<�<u��u�^�'�p����N��Ch��n�<�	���:bM���z�t�]�����g�p�_G�
]x���-4\���������:bU����vUp����~]�y�*���zF���<C\�����+1��
.4\����r�S;e��UO�|l�gt���is=�_Wb�n���zF���<�-�N���z>N�3:�9�)�u�����zF�y��3�u%�9T��6�3�u%����B��������B���~]��E���:bU�}Q=�C���hq=�_Wb��
.�����+1�Pj�g��J�sY���~��h\�gt�s�S���U=�U��=�8��g��J��T��v�3�u%���B���~]�y.Up��zF����nU;e��X��������54Z]���������g��J�s��e�~��w�x�;^����
:�z��b��
�G����N��B��3p������%�o�_����@�~;�{�S���$��I�:�4N��Gl�<��'��0G:e��C��_�������z�����$\�H���#��<��Co��t�~=�������p��_�X����e�>G:�.a��B�3T����������0G:e���f��7�C��I���g���vUp����~]�y�*���zf�.�<C\�����1��
.4\����r�S;I��������C\hs=�_b�n��Q���zf�>�T��g��B���o/$�z�����O�T���3�u!�9T��6�3�u!����B���������B���~]��E�$�z�������X\hq=�_b��
.�����1�Pj�g��B�s��
�3�u!�a����~=bU���'���B������4Up����~]�y�*�Ps=�_b�K\h������[U�N��G����zt���B������tUp����~]�yNUp!������,�����
��f���R	�w��"������r�%�����)�I�w�����(a\�&i�n����I�#u��w�N�]MBYhh��[t2�j��B����E'��&!�,ti��[44r�b.��Q����yvS�nj+d��]}x��GR�]��/� :�YHe(wy����(ad%����9yW�����T�r����:DG#��.��Cu��:FR�]��/�!:�YHu(wy����(ad�Mu(wyN>T���cd!����9�T����T�rw��x��FVR����7�!:�YHu(wgN>T���cd!����9���	��B�C�;s��:D'#����yZT����RUHu(wg�Ou�N�?�]u(wgNn�Ct�1���P���|����Kp!�"_�C<ME	#+�������l�,�:��*'7�!:�YHu(wUN�Ct�1���P���|�����B�C��r�1��l�;�T�rWetM�Ct�h�����U9������B�����i*JYh�<|�������9��w�Bk��
:2v�0�Xe�[��$El3O@k{�28��?v����=���q�"��	ll�aN���$�� ��3��c�v�]o��9���1b����7}���������7}���������z�d�S���b�[4�n�ub�X������s�t�]���Vb���-�\���Vb�K�[h�����<����N�g#V���9�����>��gt�AM\hw=c7Z�y�*�Ps=c7Z�y.Up��z�n�R��`��������M���x�q�\���Vb�n��Q��nkrW=���#�����J��>����:bU�mQ=���y��3v���}���~���v���g��N����J�s��u�3v��x]T�N��#V���3���-�g�F+1OS�]���Vb��
.�\���Vb����Q����K��~���}?bU�cU=�_�y�V�3v������������T����H��z�n��\��B����h%vt�*�)�~����U��~=ZC�����h%����B����J�s�������O�;^��Wq)��VAGF�.���*C6/��R�MF�_��]RD#>��e���<$E�����aN���$����i'�����'�����H'����'���>t��u���'������N��{i�����KF:e��-&�E��&\'���5���_t�1�iw	�_Wb���-�\������R�.f��J��}�t�~��gt�A�*���zF���<M\��:bU�����*�Ps=�_Wb�K\h����+���
v�~�����T���#���zF���<�d��,�����zF�#�������C�#��_G���-�gt���iq=�_Wb�C\hs=�_Wb��
.�~����U���c�Sw=�_W�EtQ;e��X�s_T���q56Z\����������g��J�3T�������\�e8��g\�h\�gt�s�S���U=�U��=�8��g��J��T��v�3�u%���B���zC��=F:
�3�u%vt�*�)�u����U������zF���<]\�p=�_Wb�S\(��{��9���x��F�t$�������
�G����N�^!���K
��7��{���g�!)��������z�6��~}�3�S���5��I�:��N��G��<��'��0G:e����A�>	W�9�)����4����%#��_�-&�E��&\���#����~����N�K����n��:f�.�<����p1�_Bv�������zf�>iWZ]����������g��B���C����z�����O�T�������P��`'��c�S=�_�t��m�g��B��mAv:���mM��gv���Rw=�_Bv�������zf�>iSZ\������P�\���������g��B����W�~=bU�����pQ;I���g��q1VZ\����������g��B�3T��������\�e8��g\�h\�gv�������zf�>iWZ]����������g��B�3T���������C����_�X�3������`'��#V��~=:CUp����~]�y�*���zf�.�<�*���u���w����q5�C��lxt�JLr�:�i+���+1O�t��w���':��s��N��{h�h�������l��4t��,WAv���,�t��mtA���,Zu`6� �z���,�u�y���l�~Y�h�)�KG���\\��%�]���3������ct�����a&����(�a&�L�G�?�~C&C��f��p�h���I��Zf�a&k&��{�p��l��+�2`3�e��H;�p�h������'�rj3��l� Y���8�L�}�/x�e����m�`t�^f<�!������n3�-6`���Rf��a&;L��2`3Y7�W<��o0�d�I�b/3��0/��I�`������$+��a���I��^f��a&&����
�Lvy�Sp�������'���`�������@��k�������+�e�df�a������0�d�I��(3v�0��$_0-�m����$+���a���I��Qf��a&;M�������(^��K^���B6�$�Ixm��m�_�$�yxY����������W�~��8�{h:���r�C�������L��h�*($��%�����]PH�KF2��9��8�?-�D^�����@"��dt !�KGT�\~�FK�����p�n�O�1G�����f�aJ������f���^q��d���|Eu n3 ���$_q-3 �`&k&��{��@3�0�Wle��d�I��(3 ����&���@b9��d�a�����D0�u_�u����w�i9������t �L������$�m�����+.e��d�I��Vf@:�L�M��2��f��$_���D0/��I��:���$z�|Eq ��H2���+�e��d�$_���D0�]��������l����+��p��@&�&��k��@3Y3�W��H"���I�b+3 �`&�L�G��@�]M���D���t ����+���f@:���$_�(3 �`&;M��@�[$���?�������rF�p������F����
-��
��$��]�����9��!I�����%|�&������M(�V��)�������rh�������q�Q��O��w�N��hB9��������e
�\B��8D�x������*�w�#����C+�&������m����{to��p�8�U�r���]���?�VTe�}���*��~����;u'U&[�ZQ�)��N�T���chEU���{3�����7U���;�Pe����U�r���S���<�VTe���7��8J���L��v���d/C+�2�~���*��x����;n'wU&��ZQ�)��N>U�l�chEU��u;�W�*��w\�*�2����D�2�|�����2����M���;�VTe����/��_~��h�������(q��2�����*�=r����;g'7U&�ZQ�)��N�Lv�1��*S���|�2�����L�v6A�*�}q�KU�rm�]�L6�h�U��C;��2����������9J9�������u�}��t��o�d�;�����b�c�aN�[����n�$6��H�����1{�{�S��G��y�[?)��{h���Gt�T��d�<s��z�wK���@v�st���G��d��d�<G��z������������[����a���ttA���(��b�v�z���G�~_-Y[mt���G��������^��s�^1�]&��������L���=����#�fw�w�|�����+f�f������z�L6L�[���W�d�I��(3���������n=�S��f3 �����Vfw�3Y_mt���G����f@v�st�^fw��,
�=����#�f@[l���
.ep�^1�&��[���W�d�$_�(3������4�W�ep�^1/��I����#�f@_l�%���q)3��������+�ep�^1���F��z����[��{���v?��?���4����[�p�c��^c&+����z�L�L��2�[����I�b+3������2�Wep�^1��$_Pv�n3�\m���v�q-3��������+ep�^1�������B����;^��K\��m}!"�$�������"�<}��N�@"v�<p ��]G:���C���L���C�At�Tt �[�\�� �[28�������@>,H`6�`:���$�<mt�t �,�y����@ ��5�X���^0�]��)��#F����@3��lt�t 7���^&�����D��h9����@n3�$p7�W\��Q�d�$_q/3�D1�
�|�Vf�b&�L�G�t �������rj3��l�rD��[�t �����+e��(f�s���� �f�q������A��������d�2�@3�a����@����I��Qf�b&;M�{�t �y_L��� �f@_l�r�)p\��Q�d�$_q/3�D1�
�|�Vf�b&�6]0����l�r���� �f�Xm�rD��k�t �����+�e��(f�a�����Q�d�I��(3�D1��$_P�m���Z���k�t �����+e��(f��$_Q��v�D��7^�5���t IL�k��^h+�t I�����^H���5�M�"�������C�������ZPHD7M�d"/F3WAq �-�D^�����@"|X2:�������D�i��@&�b4G��%�	q^:��:����4�X���^PH���wS|Z�9��^D�D0�
Sz�V��D0��b4G���t 7���+��p��@&�&��k��@3Y3�W��H"���I�b+3 �`&�L�G��@ee5�T����t �|����t �����_���~��d�i����H"�di9����@"�f@:���I��Rf@:�Lv��+ne��d�$_�(3 �`&;M�{��@�2�����p��@�'0�W\�H"���I��^f@:�L6L�[��@3�e��8�H"�di9����@"�f@:���I��Zf@:�L�L��2��f�a����H"��.�|�Qf@:�l@W�|Au n3 Ht�&��k��@3Y7�W<�H"��N�|�t ��l����7^��o��p8!&9V���
8!����tJ�����t�:�)H��d-�Z0����	���*�������FL��a��@����� ��dp ��i��A�e��@ �KGQ.�����.���@���M��1��^DO����)�b+��Q�d����(��Qd2Z�9��8���	�M��2�@3Y3�W���Q�d�$_��@���.�|�Qf����&���@���86�����Vf�b&���<���}��6h9bt�^f�"��r���� �f@�E����d�� �f@�l�r���[�t �����+e��(f��$_��@�����$_P�m��f-����:�L�L��2�@3�0�Wle��(f��{���v?���~������A��������a�
�A����������2�@3�0�Wle��(f��$_q�@��
�j�/(�6��f-�Y���:�L�M��2�@3�i��(d|�ag�x�/y���p:�$&��i/��
:�$��ei/$d�����&^���B�@f��y�@nJ�q-($���J2�����8����d"/FstAq >,�D^�����@"��dt y1����������8/]PH�r�e],��R/($�]��)>-�]p/�O"���)�b+�O"��.�{�Q��D���r����D���t y1��
��p��@&6�|����t ��l��+�2��f��$_q��DPVV�|Au ���H2�0�W��H"���/����w_������x�^f@:A&K�1�WT�6��L�L��2��f2Z�q<�8���db7�W<�H"��N�|�^f@:���/&���@"�f@:��	L��2��f�f�����D0�
�|�Vf@:�Lvy�Sp���������c��$�m�����+�e��d��x@q n3 ��a����H"��.�|�Qf@:�l@W�|Au n3 Ht�&��k��@3Y7�W<�H"��N�|�t �}m��6)�	>�e��~9�,osL��B�/"��	oJL��B������yO���eh�,th������"
r�6������{st�n����x/�`��8,��B>��E��OK&����{st����-�!���)�ri9���R��.���Y������N�9���U����	�� FW4��]��?�W-����&Z��{���DKs�+�h�������� FW4��]��-�A��h�����?�L�41���V�������hi�����V�����0�����&Z��{���D�~>FW4�����?�S�9�M�z�������|��h����?8L���ctE���=�A7�����M�z�������|��h����Uo1����+dE���[����o����;����y�36nO��-��q#\��@l�0:	���J�~������������Uk�k��~&_	G!Z��v�`�E?_zk(D���$�
�4Jc��h�@(�����V�F!Z�����B������,D����P��?[�?X�h����
��g��I�-x���-�:[�^�-x�c
��g����ENO�I��?[�?X�h����
��yj8(J@��� ������-"��w����kJ$��CH2���D��K����AF����M�,0�<������/m'�N>#��GW��C��S��/�y�R�|>4_8�����
����� '_ Z��[A���|d��Dk�{+H>�'AN��xo��QvR�� ��$����G�x\(���q��C"[��5���q��C"KB��J��D�!���?z+�B4����QH^�^U.pHd������\"�������
Rh���0���5\U����*$� 
p90
���g2U�D�!�-�����/����/�(4��
.�p��C$��p�V�%h.*`�DPh�d
v�p��C"���5T��D��k8�
�%�CC�� %h.*`�DPh�3��,�@sQK'*�BC1v�p��C"���5U��D�
�k8�
�%�,I�����O��'�
�r�V��h.*`�EP�d
��p��C"���5U��D�
�k8�
�%�H�� �h.*`M�(�d�(!�3�\T���
�R�����\"���!y
'U�D�!�mB�R�����������9j�;$�CaI��w�hP����,�)%��v�<�@2�F�S"J ���y �d��#wU���9&��Yp)H	�/�H��"z+H	���H��*z+H	�o�H��&z+H	�'A	��xoYQvR�� ������G�x�����=&�lJ�pV���!�%!w
W%L "F��[A�@���L �B���0�pHd������L �*$���*�D�6�[AJ �\T&��
�+�\NEL����L�AU&�l�}'}�_�u����VpQ�	�C$���{+�40w�0r2;U�@8$�IH^�AU&�l��pR�	�C"���5\T`����n��d	��
X:Q9�H��
��!��B���0�pHd������L Y��G�U��$�O��#�V�%h.*`�E`�(d
��0�pHd������L �*$���*�D���5\U`��h���
��El���`g%�U`���!y
'U�@8$�MH^C�@�� 3Q��w���u�C�;&BH�s����A
!��ii��K ���y0�g�u�C,�����r �GWY)�gNE	$C��2��,���� ��!NF���,���� ��!NF���,���� ��!NF���,���I�a)�L���<�Qv?�F;A6J�+�Hi.?
�S�����)�0Hd�P���R>%�,	�k�*�Sa�(r��=�	�4@	$�QH^�^U%�l��pT@	�A"[��5�UPa��������J �+����<�����J NB��(�0Hd���+8���"������V���J "E�u��<����(�d8�k��
�� �MB��(�0Hd������J �&$���*��4�wB�
�R��
�R<����,�# *�H�������J �*$���*��D���Qp��'I��DP�X�{�Hi.*�H�������J �,$���*��D�
�k8�
�� �%!y
WU�@$��+�Hi.*�Hq�B��R,��J .B�N�(�0Hd�����@reD����'�Q��%�!�0�$07�n
j�@B��rO�(���#����H��D�@J���@�#G�� %h=s*L �dT���A	�@��Jo)�@�U�A)&��[AJ �|d�@
����V�4O��3��
����F;A�Q!S�4����1r��
�J��@8$�U(]�Y)�D���5\��1�p�d9roY���0�8
�k��
��!��B���0�pHd������L Y��pU�	�Cve�W�%���
�R LF�LAJ �\T&�y�Wp���E^�Q9JoU�@8D2����,�@sQ�@
��5�T`���&!y
U�@8$�EH^�IU&�l��pQ�	�C��;!yY���0��'���S�	�C"��Qz+H	��
�R�*$���*�D���Qp��'I��D`���d	��
�R�($�a�*�D6�k8�
��!��B���0�pHdIH^�UU&���B�
��E`7+$�a�*�D���V�4�	��MH^C�@��������8Gm��1�B����
j�@!NK[w�X�mG��	�@8#m�b	$��8&�Q�8�*�Hi=s*J �d��d	�4_&�q2��d	�4_&�q2��d	�4�&�q2��d	�4O�Hg���	����)4�	�QJ]A�@Js)xL �d�{+�Hi.TO	$�U(]�Y)��D���5\��)�0�d9��
�R��
���($�a�*��D6�k8�
�� ��B���(�0HdIH^�UU%��UH^A�@��TT%�'!y
U�@$2����Y)��u@�c�*pQ@	�A$���u��'��\T%�!y
;U�@$�IH^�AU%�l��pR@	�A"���5\TPa���NH^A�@JsQ�@�'���S@	�A"���5UPa��0rl]�R��
��a��G�U��$�O@�c��!O ���J �B���(�0Hd������J �*$���*��D���5\UPa�h/$� O ���J ��
�k��
�� �-B�N�(�0Hd9��)�L�#������Y���37��#!��P�+-�H��DB�S��������L��i(�Th�<���QQb�;8s.�y��Ed�zk�2�y��Ed�zk�
2�y��Ed�zk�	2�y��Ed�zk�{��H)Ie%)-	��"�N��R��T��R���*�!��P��?��?HB�Jo
�f�S��xT���
������-���[C!Z��w�`��pPzk(D�����B�Jo
�h�S���$D�����P��?�}|�GEq��5�h�S���I��A���-�;�	���/�5��j�QQb�;(D���B���Ko
�h�����I��|���-P;����/�5��j�6!Z�����B��A�<�uB������-P�L�B���a��p�e�|0���/�5��j��tI
�1HJ�xT���
��g���-Z��[C!Z�lu�`�E^zk(D�����B�h�Ko
�h�����$D����P��?[�-V/D���1
�h�����	���'�$D����,B�h�Ko
�h�<5�!��pdtT�z\t"��w����\"��B����$"w^���2Bw~��hR�s`��!�Aw~���\~i;qp��7?�*H>Z��
�|�h�3������"�����<�V�|>4_8�����
����� '_ Z��[A���<	2p� ��{+�|>�����(�� �|h.?
���@����D�K�*������K���[A

�\�cA�����
���E`,(p���W�K�,$���*�8$�UH^�YU.pHdIH^�UU.p���B�
���SQ� *�|~&SpP�K�"/�
N����
�QroU�D�!�Qh8z+�40w�(4d2;U�D�!�MB��p��C"[��5�T��D�	�k��
�%i���d	��
X:Q�)��S�K�,$���*�8$�UH^�YU.pHdIH^�UU.p�d�@��
�8�E���J �L�^U.pHd������\"���V!y
gU�D�!�%!y
WU�D�!�^H^Ag�����@	��Y	{U�D�!�-B�N�p��C"���5�8��9�����O���q�C�;$��d�y7�5H !�2��Q)mG�	$�m�=%�R�N�HF9rW)�@��Sa)p����@��"� �8-����@��*� �������@��&� ��m����@�yd�@@���V�%e'5�	�QJ]AJ �\
~���Qz+8*�c���V�t
g�|L Yr�pU���!�a���d	��
�R�($�a�*�D6�k8�
��!��B���0�pHdIH^�UU&��UH^A�@�r**`D`�(d
�0�pHd���+8���"����������L "F��[A�@�����.�&A� %h.*`D`�(�T`���!y
'U�@8$�MH^�EU&i���d	��
X:Q9�H��
��!��B���0�pHd������L Y��G�U��$*`I�0r��
��E�t�?�8	2)�@sQ�(*#G����*�D�
�k8�
��!�%!y
WU�@8$��+�4���0r����W�	�C"[��5�T`���6!y
Y�n?l&*���MwHt�BIpn��;4�a`!�<8-m�b	$�9&����Mw�%��v�<�@D���\A�@J��SQ�'��� K ��"�0�d��Q�� K ��*�0�d��Q�� K ��&�0�d��Q�� K �yd�@�8�� O E��O��N��R�
�R�K��B�9roG%zJ �*�����O	�A"KB��J��@D2��ty)�EP�'�L� K ���J �B���(�0Hd������J Y��pU@	�Ave�W�'�r9@	$�IH^�AU%�l�}'}�_�u@�c�*pQ@	�A$���M��'��\T%�!y
;U�@$2��T�,����(�d��k8�
�� �mB�.�(�0H�x'$� O ���J ��k��
�� ��B���(�0Hd������J Y��G�U��$�O@�c��!O ���J �B���(�0Hd9��Y)�EP�p��pV@	�A"KB���(�0H��W�'��\T%��f��5�UPa��!y
'U�@$�MH^CJ ���"��w���4�wHt���L=�&���	�!�Y�S"J ���y �d����D�@J���@�#G�� %h=s*L ��R�4_$��E�V�4_$��U�V�4�$��M�V�4O��3��
����F;A6J�+H	�K��B�9JoG%zL �*������	�C"KB��J��@8D2����,�@sQ�@
��5�U`����E�V�4�	��UH^�YU&�,	�k��
��!��
�+�\NEL����L�AU&�l�}'}�_�u����VpQ�	�C$���{+�40w�0r2;U�@8$�IH^�AU&�lYDo)�@sQ�"*#G����*�4�wB�
��E,���`
$�T`���f!y
GU�@8$�UH^�YU&�,I�����O��'�
���{+�4���0r2{U�@8$�YH^�QU&�l]Do)�@sQ�**#G����*�d@{!yY����^TF����0�pHd������L �&$�!K ��$�?�?q���;$�c!�$87m��00�B�����������pF��;�Hn;qL ��qtU�%��z�T�@2��(s)�Hi�2L �d�{+�Hi�
2L �d�{+�Hi�	2L �d�{+�Hi�&�"��{+�He�Sh�d����,���R��P<E��[�Q���D�
�k8+�Sa��������?%��"���C�@JsQ�@2��5�UPa��f!y
GU�@$2����Y)�EP�0	�k��
�� ��
�+�H���
���$$���*��D��������/����
���-��
�� �Q���{�Hi.*�H�������J �$$���*��D��k8�
�� �a���
d	�4@	$O�����<����(�O $�a�*��D6�k8�
�� ��B���(�0HdIzW�~��?ITE�m��<����(�d8
�k��
�� ��B���(�0Hd������J F�m�@�@JsQ�@������	�4@	��Y!y
{U�@$�EH^�IU%�l��������7"��w��L;;Z���^GH2���D�FI !�2��a��#�)���m�=%�m'�SREA9JW1�`��SA�8��KAL �|d%T��[AL �|d%T\V�[AL �|d%T�6�[AL �<	�*P���V������(�� &l.?
�C���
�J��@$�U(]�Y)��D���5\��!��d9Jo)�`sQ*�B��� �Hd������H �*$���*��D���5���E@��+�����@�r**`D@�2U�@$�E^���e���ETD����*��H���V�60w� r����H �$$���*��D��k8�
�" �mB�.� �H�x'$� %l.*`�D@�2;U�@$�YH^�QU$�l��pV	D@"K��(�j����I� r��
R����^TD S�W	D@"���5U@��V!y
gU�@$�$$���*��d@{!y)�`sQ[/*"�)��
�" �-B�N� �Hd�������7��a�!�D�?K3����$�l�~2�A��E!T	!��y�1Vc>��lF�?�a�X���C2�9?�*���0X�!.��b�?��P���WA����i(�rH�� c�X��4k9$�$��!VEJ��P��C����B\�"�LG+�d(�:*��a���C�B�����A��x��J�xX-�����6V���j9�E���-V�a-:�,���h��Zk��gl�D���rX�<`c%Z<���Zt�YJ�xX-�����6V���j9��}n���-V�a��s����h��Zkn��wl�D���rXs���cc%Z<�������+��a���>���X�������}��J�xX-�5���;N�J�xX-�5���;6�� 	�2���4I����f�����J�xX-�5��76V���j9�t����-V�a��s����h��Zk�;nl�D���rX3��qcc%Z<����A����-V�a��s����h��Zk=�A��a����/?n-��n��v���qx���������O?������;O�s��7�nH�n�Q�����v����G��_5������3����
=����<>�n��M�*��v������"�-���">�w���?�/����m�������o����?��������������a�
�0�}�����������_�?����_~�����xw��g����/.����W��_�}B��#��3�w�����VX���}����<�����wO�
�0Au������������Z��n�w1l{�O]7�������s^�o���3��x��s����g�3�W��gO��*�9���2
���>B
�4=D
k:/5��y�������+�4�W�W
)�W�W
}���9Z}�r�2��9E�����=R�
�a��X�c����r��v�*^����+`Z�p�]z������
X���r+`Y�(�vS"^���+`�O����m9�+�RRWn�e�W��O*����g�Zc����i|���??���O�:����R��\����2����w�b���_�E�������������<�����sg��-��;e��G��b�����)�������{�����L������y��y�.����q�������y[.������l��8��w�������������[�W���1��J|w�i�/���.�4\���9���jr.�g���m��\�^�~�����W������{��O��0�6������i�y����8�������&�m��\��y�;���{���LoW�����s]8u�t��.���2�����Z��6h\]/|SU��'�w�M����������=os:���{H}w��Wo��y����u
]7_���:��>{��q2	6F�*��Mo���?^%��������a8�~�U���^�s����q��������H����/��QS�1�����e��;�,�v�|S�3S����k��On��L��6������F{�1��$��i|9E������zC�������7���=��6>��M�����B
������W��>���7F�Y
������:�e.����I�}Lu|y�D�>�:��uJ�U������T��Q��|*����������}��q���}��^�J2�g�����h5�Ua�N�����7���B�|6����&���k��w+!��]�����b������L(U��;�����������R2���hs��|�?�1�J�v���)�p/-A2���s;�i ?�����d0�-� Con�a2�����bP�40�W��� S�1c2���]�A'�pZ�A�u�r{�E2�q9^� S�^��1�����a2���f)���pS��:���{�b����~��d���+<�A'�p�c��w��t�g�,1��V��3���k� S��`�Lu��������X�m^:�E~����)����b����G�����_����,dq��p
Cu�[`�t~����_�V�����:�������y(��-�-��v��mu�V��NF"[$��)3��o��Pt&�����L!�Qo�p���F�B��f����/����V�{���%�w��pdk����O������#��l�7f$��lH���gJIg:i�I�N���:�iY>��lKg:q�%�%['��]~��.�t�y���_�3�8kg�O����Pl:��3�`n���}3N�N>�������xo�Rt:�&�KH����[�S��p%��)�NU�����7�����
��Xv�r�[�|W�����1n�*e�*�G��)�N'2�f������F��>��L��W�0;�q�~��dJ�+?�N�B������L�x-7e'S!���,�|�Wh(;
�?����)��
�N�U��1�e'S$��{�iE�
��|3�����[6g'S'�MI���|��Rv2u���G�������9e���	�N�N�Kzs�{��N��OM�u�u�}R*����������+�N�N���i]���i�N�N��w�Yv2����Lor97\g�e�q�f�*�m+���a������V��G���o������S�����'1L����q������
�tRv2e�]U��d���=j�N�H������N�F��O;Qv2%���Rv2���@���B�5e'�:���@��T��Ve'C!7O��'��H�~������5�������6e'�:����L���X(;���mh:-���G��d���A�N':i}V�:��d���������+i��g���JXv:��8K�N'��Y;��L����(;����d:�Ze'��x����dx�������i����Te}9��e������n��S���x�����S���F�������!>���S���X������Nd�6e'C%�����9X"yv�v��dj�{�e'C"��g�^f����);�
����������9�N�B��?�N�B�+�,;�q������y����� [�f��T��3Pv2d� �e'S'��EXv2u�^���d��{��e'S'���(;�:yi�N�N���N�N���Qv��	e'S'�c�Xv:�t����K�kC���i�}=��d���F
�~g�W��'�N�7���x���n�����Tg=��:B����v�{��;����G�g���?�d����_����iYn�.�:u>��}N�'['�S�0<�2i~��V����d����$0��:���k�g��]�yw<���k�sU�����4������{>��di��h�'[$�m{��/�$���0@Y2����u����'[(��P���>f�����]��J��3�e+���F([)������|?&y�#U�t��<i]~������G��J)
1D�Jq�Q�R�_1D���p�!�R�k��mc/N2������U]��a�i�5FUY_���U�~�>�5FU��m��g�����]&��"�*���������l?�}~�L����)H�J��6
R�P�w�(H�:�����!�W�%p��}!�gw\��R&_�� ���|�O��,e���}���,�|��yS�2d���B�������������~l�v�\i<����A�>e_P���(M�R�o�4e�<�#��]��Z��c�:��wk0�S�V�[)O�W��)O�h�{�y:�4����#�w�_j% Q�h��yY������JT�V��De:���(Q�V����,���[J7O;�Z���+Rmcy��0-�����*�k6p������Ck
UU��c�hUU�����M�
��������S������)C)���B�Pe
�}f�*C'����(T2y���7�@&����L�<��Zl�X�z����Pe���};����,P2�?v��������7�P�2e��bR�T�N^�w7)S�Bq��2��wv�LeJ��-l�~.�7���"��T��2S�:�J�Rg���]~�
E*S*��[��_J���`JT�W��De�>�W�v�����mMT�Mqo��De��X��s]�e�����{i����\&M#R�>�����w��z����~��������-��4������-�a������
_&Ug}u�_������ �t�������;e�r���6���=@� ����^���I��p��m������e�/��f��S�ow��c_���>�7\�CX����Sz���'s:��w��?��_^=��i�P��e%�-�t��p���,[��Kx����a�}Zl^��cOe��a5�����!m���/���i��px�Yz���WZ��������v��<��
��,�d�~��c��@�o�?bu����H�����������;K����t�������z�~�>Re_/�;���*{&�L���g����5�TY��`�VU�����E+����/[�2�?�=Q���$�_g ���g�T�s�!.X�"����+S#�k-X�_��z�8��+��vQ2�����d������L�xc!��3����*S �uz��T��h,JB�5�����!�w�Z�E16FkT'��7i��r|>v��3�p�;>�5(�q�Y�Ldj�������7M��x��n>��L#�y������k�G�F���|dj��M��F��i�*ej���?Z�2���zr��k�{YYV2�������4v�W�6f�:���C�Ju��c��W���������������������Or��,�O�Z+e%K%����-�#��������g�J���V'f%�W|u�(��dQ�
+e%K �G`0+�	��UcV��]r��d��,f%����vZ���Z��u�9+�W��g�l�x�+)+�i�J�<�}�"e%[#��I0+�i�J���t����|g^���J�F��o`V:��w�`:��������,������di�vV��w��d��/��91+�s�{�7f%�w|s?oEY��}����Q�X}-�3+��Pu��#�y�:��*���qz���O�;HYZ�r�)����R�W<��4��*�{~���i�Y�x�P\2U�M��/��-�K�F>�P\2$��6Q����w����B�[-(/�+������Hy�T������L���-Yynx�xZ��
���d����)3��M���l�>V�2�9��w Rf2u�~��:����1�:���r��NZ��l���ZQn2u�>��r��J�g���O�N^�{J);����uv���i������|��Gf�����{�N�7���^g���Z���Te}>va�%Q�����W����
�L��T�~;|����N�_��������3v�4av:�I�R����.�N�H��Sv24��_��dH����������Pv2���([!�#$�s���o�Qv2�>���!��s�(;y�������HZ���U���G��D&����������������������������|>�2�ZV:����b��L�|5�on���'�e'S'��);�:q��N�����ZE�����e'C'
�2u�u���O�e'C'�7T��d�����:;����f�*�s��^Yv�r��S��i<J�������Xv�r{>�OQv�����@kv�r6�
��Nd��e��L�x����d���e'C#o�������.P��4Y
�r��G��P����N�B�9);�
�>�G��T���e'S"���N�F>���Sv:I����T�}�tZ�oO�wG��d����u(;:y�?WG�����������~)�N�N��
u���);�:yo>������v�N�N�9�����[�(;:yiX��O�2��o^w2t����J�������������Z�S���5;UY�S�����S��|6u��S��x��{�i�;���G>y�5;���.c��xu����<�� 0;�2�����d����O����{�e'C#�n�I����g@v�R��j�����;��N������,��L���OB�������J����H��H�iA�4����������d�6��d��������N�N�OK���m.��uv:�I����N���Sv:�I��=S'���Qv2u������:q~���L����F�������|�NU���7)u�u���^����|����dx�?�4�ev������S�5��k]w�s���|�e�:wN�Nn\w�swG}
��d�����������GTp�N�L��40;�*��+��d�����S��x�z��N�D��K����:�s�H�cI��l�|����+I��������l��O���d���a����VIC���d�8�����l����0?��8��DXJ��.3�'K)�'���O�R~���`�:S��;���[�����l���L�e)����`����~w�����R�P��+P����^J�e	����c������F(K(��[I�,�|�#+���V�X8�Qc��>��Ue}9"es��r�A�l��s��{_�D!���y\N|�7Q�_��(�i���W���}>�`�L�����1����{B�e���JN1�J�ul�v�Bc�!�o�kW�u��g���H��$�(�b�]�e^K�'�P�2E���|�����=�)����_b����#�Q�L���P�:�s�^�b�1�|��(FBi8�y������#�u2�����������L�����>�d�}.#�����7�(S(��?JQ�;q�&�e���>�������I!��I��5�6�����|]?k���F�S���g����v(HUy_�w����W�>��m_��r�q��{u������������r�����4�=����PZ�T�:����U��7����S?���N�i��%�P|�$-I��
_8E)S&�g�)J2���U���!�_�k�������I����}q5�/��E)�r����E�R�P^��P�:QJ�������;��)C+_�;��.��|��U�e)S+���)P�ZqO�����p8
T'Z�nL��f���T��V���D+Nv�T�V��(SZy����2��T��w�3g����TkN=�S9�h]�2��8���T��������z����~���?��4��k]���g|^e����[��2��r���3m]Z��
|����1�x���Ac^��b��^�uy�/�
�������~�4��y�����w�Uz�w�� u����_�����/dU������E��v���XC�]������G�n������K<O��w���:\��:t�k�?Fx��O��?���Q�������-�����2��s1�������o������Y�\n�3��V�\��=��\n03����y���]n�������.7�\n83���/�\n����>�\�I��r@�-�������S�c���s���>7z��s�B�����s���%=���?����v�c��>� n�����s
b���}nc^����/���
M&�J��a��U����#&�<b0��#&<b����[��I�jn����
'Fk�%��
[���6��F�JFS�-���gK�����xf������.*�=f��`N�7�s��:7?b0���������l����F�v`e�y��zy�����{�)�\���Y[�0����7$#�
�l�w�����Z����<4��#F#=b2���`d��2��cF#{� #�]����>2����E������$#>f4��cF#>f�3?f���cF+[�m�mY���#F+���F�����%+�����KO�=��Ts�2������5b��]��|he����l�w�V6z�he�<��q���&&+�%��
3Z�����l�������6z�hd�G�F6\qhd���F6��l<s���v#��.f��
F�4�/��?��u^�fW����`c���6��{mc����{�]��e���Q����;��7���1���&Fk7�����ml����F��ll�����3�������^-���hc�G�66�����3���gN��~?6�9]�_��
W3���1����I��
�?����hcc���X^��N�K�t�=���
��U�6;<�ll<1��*u�����
'k��X������ll�����ml<3�X���|�p-����6��_/���`d����>��<��-���1��xf��`N��?������o`c�u66z�`c
������E������tO�;9ml�2�nl���nl�����1������&FN6�"n��q���1���!��
gFk1���h���
�6���^/����ml���66�ll���66|�hc�����3�G��������W������l4/�:o����^�i���e�������Z#n?� x�hd�G�F6��C#=b4�q���1�����2�pf4���l+�=���������
1������x�tQ��c���F6��l<3�p�u��@�5���+�}��l����F�����%#���|���,UI�YY�4������5b��-z�he���A����l�w�V�"n���#F+MLV6��l83ZY����lt����g.��3��
������l<s����]�`N5�ng����j���������`fc�U2�u������Y'��K��m�����ul�u���z~���?~��������?5�y�N����s��V�l{'mt��#F�N7���1[���9Zni\ <���
t��#����F��������n9Z�����-��zx�7Vn����_^�=^����0�^�&��1u7���:��or83�����7|q�����v�����gN��w���tQ}^f|��������vO��j�*e�6�$v�Ul�I�jcM�V>b��&�������x�6�Y��_���Fo�c�����%7���'Tc�n�F6~�`d�/C�0
�.��F���5x�����V1��xM���1��������.���_������l��V6|�F+��be��j����heM�������_ V�����q����[�5���l81XY����F�����C�l01Y�Xb�#k����`�~��x�wz�F�h^4���`b�ya��Yt�`c�G�66|��k!��l<s�����l8��=����FO dc-f��a�E�5���gFm-����|mc����U)#6���wd-��;���hc-�fM�66�����rc6�F�bc����ll�������X��h�X��V6��@+[�m�[�uo�C#<�iZ���������
�f4���hb������ml����Z���gS���cF=f��n�k���:�Jbc-�fk7�X���n�E�U1��hb���{,���Q���������1�����
�E}� ��c�F6Xhd�=4����;���y�#�����gN�^���gN��>4���@3=����g3�/��F����{��f6��@�Jbf-�����)20��#F3=b4���hf-�3[�1���pO6�@�����l0/���o�l83��
�.���y���F���
���l4ozT����gN3^���gN��<4�s������l�|JF6��l43Y��|id�>�bU�#k���5�[�����5�[�l81Y��}��l.��*u��
1����5x���F���F���
�-&6��=^0���p?6�2���3��}s����m������lc�g���s���Iml�����{���o�������`�����rhck�-����Z���z���=`c-��S�G|#|�*�~l01������ ��ll4/��`^�^�dd�G�F6��l������l�x��Z�h7���hd������nd������nd��hd�g=2��5�pf4�s��X?�����_!V��k7�������Z���d����F3#[�Z���%fF�N��K6x�x�Vx���
1Z�������q����l0/��X��
�E3�	x�+�F+>b����he���E��[���F+m��Z���d��j���c&+�f�|���>�%bi����[_�Of6��l81�Y����/�����rcf�FrW6����F�����6?�.c���� +���
�E+�V6��l�/��e�����3��9����3�G��Y��}����nf������~_6��Lf�������?��
endstream
endobj
8
0
obj
42825
endobj
9
0
obj
[
]
endobj
10
0
obj
<<
/CA
0.14901961
/ca
0.14901961
>>
endobj
7
0
obj
<<
/Font
<<
/Font1
11
0
R
/Font2
12
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
11
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+Arial-BoldMT
/Encoding
/Identity-H
/DescendantFonts
[
13
0
R
]
/ToUnicode
14
0
R
>>
endobj
12
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+ArialMT
/Encoding
/Identity-H
/DescendantFonts
[
17
0
R
]
/ToUnicode
18
0
R
>>
endobj
14
0
obj
<<
/Filter
/FlateDecode
/Length
21
0
R
>>
stream
x�mR�n�0��+|L�h$�T���������H�X�9��5�!��,����
��s�;��;�o;�,���J�;�w�E1W�tG�o�7�^\O����������9:;���v���w��vz�W�����`�/��YYr�������l])��������d���#
#�i$�F���?%/^�)hu�I�k	z��]v��H�A�H,",��b������8CZ"JDB"R���519�o�^���"EZ�EN(!D��
����-!
�Q���f4!]�9�M��������K�w���>m���;��5��i��Z��{���wN�i3���pj��
endstream
endobj
16
0
obj
<<
/Filter
/FlateDecode
/Length
22
0
R
>>
stream
x���	x�E�6|�����;�t:	�;i�	!�t�D#V1pT�UT`���@E�:�M�����02�(:��(���(*�������6����_��]�p����r���S�<$���JKI!����N
|�]�l 2.�l��WZ>���D���������9J�<@�}��i�������
.O��HHZ��F|���_9w�����"�����_]}�d���7]�@|����J��'�.�f]3m�?�����]D��h{���f���R���8"3�GD���s"�������m������T:��X/:�T�#�N�t7yh����yi<��T���[����������>�n�nE���"�@��2*��(?���g�GT��,���4��0/M����-�p'�E�g�GO�U���J�����FOS7�E]��>Iki/���FgPG��U</�V�}��jz�G��X�:���
����4�E����R�9x�2X{-�G�*Z@�h+���X�vH;�.�	��L]�����F�GUGt`�]�H��e�W�4�����HY���s�BO1����
���}(�;r�?� ��hg
����W���5_]B�i,Z��d������b�Xy�zb�5��<�Ha���KOC6�����v>�������O��+�+;�7U�>y)2�K��.�#������X%���f���0�/���E��zJm�r#�#��#������ZDK �G��v��� }M��w������!f�������(>����O(#����ju�z��_}W�Y[mL6"�7E��<�s�����;	�?��A���V<J����z�>������%he[��bO�?�?��1J�?�|�V���@N7�;�]h�u�������[ES����l�!%�4*��U����T{�����(f�P;W�m��i�i��R}�>K����Xf�cs���G(2=�4@w-��E����0�~'��UH�O��a:�YHgY�3�]���
6�]�.f���l9���g�����0���{/�c�d>�/����|'~��W�[�?���*A%O����\�LT���*��e��Ze���������r���vT����{���N������yX{Fk�����N�\O�;���L}����}�Jc�����e�����j��iX��V�Q�0�(�d*%b�y���X�P���$�|�-�����S�a��e{��-�����z�7~X}��CY-KS7+Wi��,�k����{� ��K��A!��BA��]�
6�����?���%�&�*c�2*�>�Ufe��c�����t	�����������S�������>N����$��_��)�F�aen���D���`�-�zL����:�d:�x�>P]D��_���5�����A��hq�VVm���N�b�|-yq�+�[R�U]I�T�Vom4��M�����xO���$���hG)�����������O}"S��>g>��
��j��5�Vm��{m���^F�C�?�6�0�K���9}�,��4�NE�o?���~����i0K�YX�]`��#��Zn��6`=?��qv�b�=b��bD��}����'��&��oXR��jw�/0����E{!�t�V��7����~u�]�&����B���R%���E%��C�?B�����l�[��b�&P&�h2N�##����i�1Q��a���s�l�"�h�6��D��o0E
���^���E�+"����1�IH�o!
���
<�t@��~�}�z�*����{^��]:��t
fg�3;d���R�)��$�+1�����C�T�3�>48�6��
�����{�xp2&�J�
�4��2�@�,8�d%/kS2+j)�\�R*��=04�4��FW!|��`u |T�G��v"����P��!�0�

�?}���!�n��688x��Gw�a�#hG(�����d2�S������D����!C�i�!�a%g������UC�ddeU��f�/
N	SpP81O�����>8l�f3�hhu`G��U�4�hJm�cjp�������j��;�	�.:�;E�I������PV
�����U����U�s��wu5�/�V�j��B�@k����0�	M�H��b��*Rjg������U3k15���4���������aJX5�*�.�VO�a��V���!-H;;�G�.wL�;����:0�%O�dq��"Y&z<
\@O��S?�5������S�������]��/�X�q��%h@���g�L6S���$�BOZT
��p8//���Pc0�}(�}zt����g� UB�����C�YYb�W7�h
"����b�M���P~^u�����xN�x��4���^�&�$����-�-�]��������g����+�+F_T����m���b��~-yf(�<�J��f�g(2JyqKa�r�����RO
+PJ���������j[V�O�4�VL��c�K�3lf/�����8+~V���W���.Z��vV�0�U���V����]:%pW�����U����'�1�guFx�-��t���i�� [1zG��{Q�nN2+�U�s�����	yU����d*oI���Q���s����"Z*sU� ��62�i�x�Ky,�%���7FL��x
��YD7yY(�45���P#��,���>�KV8�>����+m.�:^:����v��W��,w�;_����t:��)
�Mh�&D?Q�&�G�3T������m5�Z7'<e}�j����V�O�_�����~��R�K�������y�P�0�f�k����w�_�7�o:�._��}���PN�������'�'��b��H�<4
���l�!{Z������GG���=�(���-����PM
+L��]��&���oj�n�n�����oq_�+7�\x������w�Jof���1�5�����u��M��]�|V>��>�b��|�l9��a�:2�����
~_��6��
�4�5�K��X5F+NzU��5!�F�_
�aUU�l{�f�Lr 5�#�<`�J��-�U@5YYn����Sqo%7��}����#jp��h�Wp�f���=�de�IO�v���xU}�w�w �@�ep���3'�������n�`���E/N��
N�n�����)]�����
:l���ak�%�2]���^��3�e��|+��)���I)��.Gb���T�G!d5`���?���#��M��|w��slJ����^�)�����\xZ���3XZ:��Il��}*�W3���T����j`$vSf���]"�P�(I(�U�Z\%��
�.����:<�*d�f�e��d&�|T�5�B3*FW=M��:�������f�k�/���I���>E�A(KN�N���@mT�P�;����}^�i�U�-�O����wN�;�w��s�L����Y�������L�y]�O_��w�6L)?^�+fi�Jf�+�*\��J
����|������K������{/����[����,��T�����;][#�r�r���v'w:����P�?9?�'�&o��D��z��p
��n��;�0����������g����qhT'�)=�{(u;Di�Z�qs9A�%�5���/�}�	a��"R�P!>�I��kKJ�(���q �](�H��/
fw�\�kF_���1}+��,�:o�e�Hs���_��
���x]����9�n��~��Y3�O�H�q��USk���q��_�xvN�������	�U�@�6r���G�Ybu�9�cW8>p�G�LW�j���9�9������E��q9t����N�����.���E�{�P����62B�&�D��.8Ls�s�*��U��n�1���$���x�P���2�V>-a��
����l�w5#����.��m�)"L*�2L*Y���Sop����W��s#��94�)-��;���v�N	������[��_��9��:�<r���#������7�G���
u�$�IC��K���`���w�I���,w0��$�#��A
Inw#�y���g��#n]BL�dk`��R���ve8�����o��q�PD�&�P>��[�xB�����<n�������2�(��E]�����5�u<��B�,5�����BI�l�b!�H�a^`+v�sM3)���T��tIk���]�����6�e-�*u�,E���}{4{E�����?�j�����=����_�/����3n��%vm���o_�|�Y�T�_���{����{�x!$�
��JAz:4`�}�e�e]�fm�������v��Nnr���L�����y��q�{�u����%�20ZB�!��M�NV~���Tfe!�k��X�����1!�l���i	�9I���t<4���9�CIi�����cF�x
h��B!�\�P5�����$�%�
�`��En��9f7��:��
�S���=���_�������#��7z�:�������#���G��f+��l������{���oZ-���-����I��Jt�����j?�pm�}������w��,;�+���v�o/���+v1b�^G
{�)��jX,��|����
%�Q
S��pz�J�N���,�Y�Q�:,>��dwV��yjVRR������5���8�����8/r~$�9V��:96������Q'*`�',���������x��R�����:�5�����R7G_�F8�R/��+JY�yy�u����:�=��������?V�;�����oN�����������s=ByV�Qz���������o�V�ry}E�:,���:���.B��(V�%��wi����I���Q�<[pg��t]��.�;4*�%��R������n ������<������I�	H�1w�]���rs��5�Oa��`vg���J��Va6��K?z�����]�$����7=0��Q���F��M_P}�5s�/����|���o����6v�����"3�?��%6z�%����T�|��o��
�	����1W��P�w�{�}�e��1�1���M�O�n���F���?����dwQ�{�s�{Lrm���-������}�6=���?#�3[��++��)�������FY��3g]lq���3b���;4*�%��������<���������`��W�O��X���\&e�"�Z�\�qC/\�����S���}�1��W���/�a����>�fc;���;}���>sG6G�E��lxJ�����n��������O�K�7(��
�����������/Y�T���Xs�]]�]=]���y��5��l��&��v�����������������Q�E����c� �1�}E������P���jI%$%TLJdB)C)�"x�]B�I=lJ�W	�+�U�@�S:�,����-
����#]��i��c��Tj�o�����j0 ��H���N	�Z���"����-��-bE��eja����������o��}�ng����/	�f��������Gx|�`��i{p2�&Tf�T]�1��3��-j�e��[,��98IX�b���t��Q�d��������5��{
Q��
�^c��qT�����K���U4W)�m�a��$�)G�����='"��h^+��/(�rp_�nWr-�v�=L��7d�����?���=�`��o;�D*�t�����K��Zm�d�AuY�� �������tu�u�m_�������u��;�I�w����������������'�S�#��6��B�o�-�o����p��>��T/�N������^��V�.�\h��>[~B��Y�����V�-����V�t��\UlV�a�z��'4��-�g�]|�Q&��E�PB�"��B���K�E,vn�����B���T�dQ�����<*�C�@+�b��Gn��
� G5�C��a�Y�������8�����4����"MX������B#d,�0��K0O�vo��BI8��P�B(D�~l�g�y8��q�s����4=��<�yvi��P�t
�?e���p�������>A��CYN�3�%zx�= @5�3�1P��]
bL�Ys�e{��l_�h������k{N��OOSo<�X:Z
K�	,E"e������u����	��	�D������ �X�^�r�����qs�MI+=+RV������0�,#=%)���KI7�{8�i=��y����e��w(P�������4�.Sd�����u������(�@���������U�VvT:��qX)*���^os��$��E����|e�n�,�<�Y�z}�c���=��a���������T�y r5��E�������s7��	�-!��]����S�����[Or�8(�%�}"Y0<��@��"a�B^f�9>-����thmF�f�'G7���jf31y0fb���5L���[������,a���S������o�?���}��=����/o��Ni~[}.R�sJy�t�

��i�0����K�K���i���<u�]	��6���R-^[��a	�
����$x=��	}�M��p��
�}�ua����i7g�V���HL�0/aY�]	�$h	���t:)�ToN���j=u��P K��K!��Pgr�p~3�s����8�/�d�`A��RZK-���g�&uAm��v�e:�[��g^M���%p��@��/���������}F��{��_\����7�l�<��5�.����g���i�'��Q��������
>r�����
��NU�����qw��n���^���Z�u�u�u�����sp(5�bMMMW��{%�#d�
�h�%�n%����K���4K���1W����C��Kc'P|
�6���3b�`5�X)v
�~d�zkd������6c���+�A���
��i�1UQ5�P5U�b�g�|���n��'��Ce
W�*i6���<d�uM���d�����[��O�%@�x�O������z���f��4�u�-F���es}w$v�3�Z�6�����hb�r��y����L�3�m��M�yd�����n����~��^��h�
��hIz���O�(M=�H��]S��KV�D���K�����j�:�����U��I����3�fxo�]����s��z����-�g�g���?K9�'�K��r~���a�j���?��[�Sh�k7'�L�����;i��� ��/�H�'�<E	��"%�c��8/9�0�l|n(�m��R�����{�3dR
&RY�;E��5
�Rz���IK�*?sB���w�h�p�j���<&��i�?�|�bM�[N�j��	���q��+*/Ka����?�|��G���Y8v���Oo�xu���c��4��,d�������C��X75�
����>��>��)^7�$y�	���J�+���%��&��p�16����^�2��vt��c�ZO�����,���+�.�|�$7w725�LH���IT�m�r/����(���.��g�.�pHw��k�h���KF�	g��%���������8����jH����,w�����y��xN���%��5���ec;��*]�������~q':�8V���_���p	���������Z��&���j~k�u��	�����(nG�ap�pV�
��
�V��:�i����h��}��1�&JO�Fz����E>ai�.�FN�:_�=�n�[T���^�����Y�[�F�Y�\C,C?si�|��Hp��6g�^
:m��w��R����h����g����W>���s0�]�a�E�D��9�1�:i�f�����a��{�N&�I.vui����ER;��p1'y�Z��������ap��7j������rY}���n�9x����\��:�#ub%�
��}b�>���%�)��4-���]�'x�}��z}�e���z��U�����������������E�6��R_fQ��M���*D�Q
O��^�1'��,:k�����I����\��p]�t�w�Oe5����\���7��9���cV5o�'+������W��=W]u��W]u�����"/}������[���n��-b�-�o\���hK��:�Y�X�2m���'U%LO�����������:x�c��;��PW��+\�u!��Z��J��/I���'%-I��t IMrQ.��k���RV�[��l7�[`�[M�w5i#bKs�.)��C���p���p��U������C0�-�Mw�:1���R[}��������bH�o{�o��c,���0�n��P��������������u���f5<�<<i�sw�KYO8����:�;�9���K����a�C���^�=5wy�r�����d-������8,kP����sn��OV��>�>�����Y>ggGvvv����>���sm������HY���������t.e�������c�����,o(+X�
u����}��������sxN��Y���]`*����,�;��1���\�a��f`-���m���V���6
���k������*��X[yG�<9������f���5�U�Ne3R��������l�%���]�'�L��^����%���'6�8jfg����k
]�e5�h�8Nv�$����b��te p�������yW��of�Y�����q<��=�7#K�Qn���xvN�����E$��+�Z���cL!�B���(��EI�B#p���S��7����SC�75�JSC}��RCy=���_�71��:)��T5u|z,1�U�G��9��y�kb'Dq�P3[�4\���a>�2/o���=��}%d�'�%v����.g���(�zG	$��{		f��{���sn�N��;�����=9���'-��sXz�U�^Y��I9/�����~���]"��'U]]������:��;�,?o��.�)w��	���w��^����).;���;��*�G?�k�`���(�������O�N4�R��xS(5)��R�����a3>!�DJ�K
�*� M�J*��z80�
�"�N�
%8��|[>Q>�$4��.>%75i|J�g�g�G��,�����h�qy��n��:��wME�vb��n�D���{:��������|���G������]��U{�LS�����q����������;t>�7�������5KWsG����!��n�G�u7{������|n����b��J��}��M��iz)/uW�
�'�HCu�v/�R<pL������0�	^�S�\���)���-���Y���-���8�h��;dMV]��G9l`TF�z�[/`i�1e�����6��r��{x]�wx��Q���&���H��q:�{�^dg6��6C�f��wT�Z���v����<%O�K�}�2\_����'Z���"�U�v����t��y�i��#H]��Zk[gG/*�Z����\m�q�u-Th8D�8��
u����m��zG=���c;���>W�hG����8�E�R��N�Y�e���#f�vZ\y���>M��!���8��V�I_)~�#O�;���Z�1:�A�YA/*��Kq�?E��
��C�TG"]���-?�,�'��f)�2�����$;"�%��4��YzlcLO���knNOk���i�������#;����cD�K��pv	���r�`�'��%�	{�!R���(1���z����i���������?��(�:f���b�;^c)�m������6�����������4�u�Nv�9)��[K�E����������*�:y�t��,��1�!t�����4�E'O�\�"3������$^bb+5*��,u%��L��^���'t1��+��A}����<�����K��(?x�
�r����&���y��:&�z$��f���E�=�d�.m���uz	M�h��D�^�?�o���G~�(+���@�#�;�wj�Q�V2�F7#����}�E�s�9��wC��!9�x�qf}2����cc\)���b���������/��[��_VP��e�L)?���=��`s�$��q��	��}�q��k
�I��3`?p�U�����0��(����1;�|?
�\"b\�G���y�0����N�^�nE?�����B�Tb1u]����E�=�������%��9T�U���i��y�SE�_����`��P-0m����
��1�U({Z��u02X\#������1���	��P�0��@�~	�=6�4��Q����!F���L<<+���3�������o@��t`?�V�P��2h���6�����B?�nh/I]+��\��5s%�'i@�q��D���"tV��x�B�������+���,�)t��Kk����]�V��u�z�TI�}�O9(��^�[�
�]�Q�	�V�kws�tG����8�����N���	�Z��4R}�F*�����w`|�����a��h����b.G���6t��q��D[��� ������A��d��-��F�m_,�?�m��by�
���O��;�oi��2�?�F��bM_� �H���,yl��
�h�'�Nt�Z
Q-D�j��)��r�>^?W��5��%������H���l#��oaD��#Z��Y:�V��4��m��awA5�4��=�^�]�>�>�{���r��n��k�h�~�B@o��g=��F?��z����E�w��`�����/���q�F
;'��x������oK;��.2�uW��G�L;��q��O�7�{���^���^���&���������k����eb=��R!'�/��Q-�.3��}�,����iH��o&MA���X���;����n�_���=Q�KW��Ha��#6]���52��
�W�"��~r����<��2��X�H�.�u��|u%�V�AUb��8x���b����-K�����}�I��	c|I���>	���I1>c�j
�'��g��)�{�,�����:Y�:�7��A�!��H7Xlt��3����n����v������*��b}|O+4O�_R��F��XC_`}	0��P������B�'FW���|A)BG0�q���:�(]�o�[�&��A�1o_`,WP?������Pv(� �6�GK�D�S���^�&�!��2���C��G��������=��g�������/�� �\1
O�N�A��i�2z���L��1����\�L6�2����<��+#�wG�g(t������r�*�r�Y���X��b��*�j�7�T���*Q�}���G�i�t�v)��KP�	�<V��W#�}\��m��z�k�P����k������������9e�����������O�S�>Y��T9�
����h~+m������h1�'�r��[���lP	��bz����A`��/�����m��{�.P�?
<
�=����Ko
�����q��Jxw���g���R��v� �G@�O6=����?@����k]h�z5��!����s����C���P������A��z������0�K���������O�����>�����=�bqJ��|���yB�
��f��+}����#\*����_������8�B
	�Gy�m�AH@:�����v
��r��C_>�a\wQ����z�L�Z�����(+� �=��P� o�,?P��\��\�&�+�����������`���gG�mi�5�v��M���+�fm�T��/k�U�%�����@�AW��{�F��#8g�F�5� :�,��I�C��O?�������!m(v�S����7��@��AM�2
��1��Mf}91~�w����1�S����-;�<�]���||���N�Z�x%}8�g���O�>���pcN���A`��G~���K�������H��m{���i|>��=k����h�,�j�>����>?{��S���L�RWF��S���/+}n�?�T���?��;EI��,�W�;�t�<�������9_�+������;M�&`�h0���9�����[��k���Kb����+6��/�-�~�3��Y�{Z������pO�?�O�����:���6��_f�m~��l��{��_����{�O������i<���aH�F���/m��R�����4���h�!�3�2��/�����?���?���G�u���t�zu���z����:nYof\_BC��q��P����-��+�0���"��YNS��	*D�I�;&���V����-l'|������	qC�/�V���%}n���?��!d&��sq���@���e����'��������~����)_��(�y������'�g�;�������&�_?�]|�f����6�
����n�]	;��W�F��p|8j\�"���5��d��!�+��'��y?7��a������Q>����OE�K������4��g��~J�WzW��$��G�T�}�Pb>����D�K�����)
�O��,������DwY0�z��@��������"��;�Z�_��U�>�#w�.�S�;M9��>��__���������YC6cb���{���mPO1�8|���������Rs���e�o{O� �T���bw���5�q��K��K�-����|��ob�Q��l7������6N��t�k��3���O]Ec���-e�3�;�?I�]%�����eW(i��5�y������M&CO7�gf_���1�6@�;Fid��`m� ���
m	��~�L������f�f�z�*�-Rg��g���Z@�nt���9���|�'�����*%�(���Ao!�Ay?81^�RF����������0���������?\�q������
�m���0:"����a{H<�����j���0�l�QN��=��&���,�9a<���WM|cbS+�\��)~T��~�~�W�O�����bB2�3@�B��ln�
��H4�-����@������~�?U����S��m�����~�T���@z�g�W�H����Sr��H��3��H���O��gpF}R�������#u������7z��,7��'�71gi���/�
��3mES���e����A���%x#{cmK�mF6�}}
������h;�A�=�6���c����n���n��;�
:�l�bc�|�� ���oc{������|�H�)��c�6��Mz��+��z���amb��p"A���6wyZ�U�g��������2u�p��&�a��yv_�'�����Jt�>�&��@u����e�E�!�����D>��&���F�����~`;������qJG������~�����t�/��!��4�� �bB�B��_
������M�����qj���������Z:E{Fw:���[��?.��r������<��g��
�o@�����.�9}�|FN=��4u1��/v�
+�{�I��>@�HE���!�?����o(%~v���\���T������>�e���s-�>�����������m�������w-m��T����/i+#v���.���s<�w���>��x�Y��D�_�c��'h��
��O?�[�)`<Ji�?3.�n
M����v?a�Gc�^]���=�\so���cL,]�M�5�g���f��E^tI,��U�~�w}�|��U�w4&�c�6r���Vr�G��?��g�w�~����M�a�N��<�oK����8��_b�\�Oq?�-�=��>�x���I�3�kB������}���g�i?�\gqz�{/miu�{9�@�V����w����z��8�����\5�������w�O����&���V�n�����o�_�������x����wD��D���_�;C�;?�v��������oM�#�>��!�x�;�%�4),�����k�_�k[S�k�������?�v@;�����
�+ �i��g'��e��7b/�Y�	��[���vn�I�sR�o�r��1.��9_�>��7����#��������F�k�?�w������Dk�o���o�w�P��}�M��c�0.�A�K�5���o ����
e�9���O�n)��c����oL����7�f���!���{b�w�/�c�1�E�|���O��)�H�������x�v�i������*�db�������,]v��k�`��x�(Io�qJ�.�yy���Mz+���Zf�kc�_����;�"���PzRG���=�}����{M�Ob�g����$<a�u	c���N�������8�3�E�r�H���{I�)�;7��_�=�4�,�e�z�|gt��g('���;9���F��h�zX�_{�W���>�5x���9���5��
�H�r�MQ�W���G@���*����~
|��#:"=t��\�E�D�q3�:*�<�KCXgiuW�*��Z��_�A	�
��WQn���6���e���y�d�B����lJ���wK��.��6��e�)��a��������=Zyt��:����CQ'������S���<(�_�^@�9�I���D��
u/���Q��z"��*��#��;E��n�x�X�K���{���2���V���'��cI�6��1��r����3��m�yd��i����k����C�%���-�l�u����p���J�b�PEA#O���0����UP�N��-��W����h�xV��#�����������G��z��K��;�?�j�|�������������3���n������3�_x^�~}V�����"=�AAX�E����,��
?�5�7���o��f ���QOH�[��y��sw��Z�?���]/~��'���s�=D�w�����-o��H����M5�jo�4i�l��3��cdH�y/9���]a>��6�+�^�N	�L�$����,i3�m��J	� ��	� ~P~��T<�����s"��$m'��+�!6�?����{��Q����%�����/����_�2��F���g8��w��/�D���y1�]���zoy^�vs�������s.������)?8(t�����rz�|�$N'� �i!�O��dT#���3�N�~�8���������?�yM������}p�x�������-&~+ �!y�6�w�_o%r�
�~��������y���r�-�~�~=���n�����.u��������E���v<�|�W�{`���1{�!U��OgxldE�qG����3H��i�����$iL��b�\�C��	�?��3Hm��"m Qz�3�H"�XE�_H��!��v���hG;���v���hG;���v���hG;���v���hG;���v���hG;���v���hG;���v������hE_S)�N:qrQ����F)�4�;�--w*��v��u�B!���YjM�HZ��+�mB�o��������m4�z#y[�x���!4�P��b4�����X��)����-��h�F��g�F�Q@Q�(����GQQb�Gy���u 
(����������W�4X��G$W�������������F 
(=����++����r�� -�r%2�g
���
.)�{�C�.�n�8���pT�lk��xE}�^R�
��B��F�W�#��d����Q~uC�WT���D������(hp�
+!����i�U$���#�����S�����5$�
���2/SR�+��/�Q�)C�W�kg^}�n��`�'�$*N*�(F}�?�W	I��h��E�V��R
�VnR���R�J�'>��0�69�q
Vg��r�2����G)_%+������J�"�
%�R@�)%��<D�@h���o���)������1���L(l*�*�Vn��&_������s�.Tp�x	BK���Bhfmfjfj:�
�G�J��D�|e�R�`#�B�R�!��2��K�n%M�A0��%Cjz�5A��W��,��	�eO+s��sPgH����+�z��M�{�/C0����>�����^1%O+ !�L�c}�?\�G\(���B�o��b������I���O1m�b���E����G�l�6"��^�<��]�(z�������SAw���S�����76�����;�b�����|3��1�f �[X�����RT�6h'�gye�>�m�s�e�'y���/�}B��S|�m�O]��l���]=�b���}�w|������H��������1�(�[��O*���X;�ButHPJ���J����w�5|M�W�	�mR
r
zlR9�����@�����c����.���!`
_Y����1&1.NK�]'C���%C�oWK�1*�7�(�����`)�kR�����A���`Mf�c8f�c����Y���Y�c�l} 8j�Q�Zp�J�Zp�����C��������G���G%8*�Q)9*�Q	�J�G!p�$G!p���!p����(G8
$G8
�Q��Q�pH�8��# 9��#����#���p��8\��8\�pI���y��8���8����08��08K���8��|��@��r,�r@�����r,�r��\)�Y,���	�M�mo��m��5�ap��GXr��Ga�Ga�Q�:p���Nr���u���uRq���?W��xj��Y�{-_��J����t1���!���I���FIQ��(WR�'�\�[X��8��0
�\
l�����Dy�P��h�26��gm�q����(}��]F����u(��NiGaZ�v���_�D�]&Ce������O/
�����^������wc�wc�V~.S��P1G�YU��;�(��<���]_���s��������ln��B���eZ7��
e�U�:Y@@4A^/%�-����65��IV�N�.��[������(���;O��[�.�,�"�$fn��z�d?#�����l�����w�	2���~���'�*X��t,�-��z�]��
�W�9W����r���U����S��`�Hv��D��Pg1�L��{ ���}��U�,d������_@�P�w�*��9�lB�����A.����Dy�;L�I������Q�������[�F�oE�W�&��7��P����?��������1�����/����jV����W���0��z��9�������C�����>!_�����>!*�������(t||q#s����5�Dc�1��FG#��X�,.K��a�Y,��Z��,����������O����Ve������>������NV*x��A�"�t)UL	��ld����� N���q����*���pq^E���X�������+��jdQ�tSF8i02��[3vci7�Z]M>��2_Y�@w��!?�Uk~����Z3��T��
o���@4��"������v�D�:d7O��j�:�'#��YC�Q��,mN@1�,�YQ@�=$�a�b�r��rY����I��\��)��L��q(0t��@@��!:$���Ve�1��#7W�
X�(�������"�Ez�e�NV�g��p��"9f�>-E���v��?V��%^��e����i��XC�y��:-8�68tP^=�/�tJ �c�<�+��S.�.��i�y�iC���C;z=�#����^�!;�����v<�6��W�����!�
e�U�g���������TTV%�*+���r�]&�*m����Be���3��WV�������h�����Y����Y�B���[��G%���y�aGpP�	���=�E���J@r���[< +c�bf���j���$
U����g���J�J84���l���l
�1��+���%i��~���g��ys����9D�nc+�}G�'���j�T#�g<MQd��uhc�	�y��+��<�	�l8u�N�3�8*�mH�,��i��K�����|y|��s��enC~��qU����B����*hN���=X���������u�������D�&����oRhn��� �[
a�[����;d���D /�:o�����Y\�-��c�:GV?7>!��9f%��X���l�L&�9O2�*��Z��|#���
�q
endstream
endobj
13
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+Arial-BoldMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
15
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
18
0
19
28
556
29
37
0
38
[
722
0
0
610
]
42
47
0
48
[
833
0
777
666
0
722
0
610
]
56
59
0
60
[
666
]
61
65
0
66
[
556
]
67
69
0
70
[
556
0
0
333
0
0
277
]
77
80
0
81
82
610
83
84
0
85
[
389
556
333
610
0
777
]
]
>>
endobj
15
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+Arial-BoldMT
/Flags
4
/FontBBox
[
-627
-376
2000
1017
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
715
/StemV
80
/FontFile2
16
0
R
>>
endobj
18
0
obj
<<
/Filter
/FlateDecode
/Length
23
0
R
>>
stream
x�]P�n� ��{L��RR�*�}�n?��A�a|��w�����c�����S��x����`Z��;oNaN���y&+���oTN3��8��e�86�����9���������$���v��p;���#��){2z��Y����%���@����%"T��,NQL��jAKA}��z�����7H���2��S��'!�;����WO�<�2i�u�����:�[:3�D��0K�5��x�wqU��	��
endstream
endobj
20
0
obj
<<
/Filter
/FlateDecode
/Length
24
0
R
>>
stream
x���	|T��7��s�,Y&3�u���0$,�JHd����dQA�;J\�"(nTQ���!,���B��V�����V��CZr��s��!�(m�����d��y��>�y�s�B�����4�M�vnhM���F�#D����\v�o�X	�1���.�a����oy&O�:��p�����2��#"�szs���-�_1���]O�E���k����Le�[�r����|���-�j�{|��s��9�o
��p���9vP&��x�2�
�_0��a|��L�W(]g�hm3h#����c(�,m�-���R�k�O��I���F��@��"��BE����"��t��t0����@{����S_N�i�b\C���v�NC�J�#��r�.�^�qz��k0NSe�|�8�b�G�P�z�>��m�Z�F�G�jZ�M��q��z�G��:
��b�,D�S�s������F�x�rhM���Cte�c�1�8H�h�z����6|�����Ht37�Q&��0�-���������3��,��b�����>zM���r�#���q�h�I������O��g��|�k{�F?J�����M/��"K�ab�l-g�U���F������Q���Pl���U������Y�a#	+R@�����`�!Q%no��e9Q>,?�����_wM��/�+hm��d�C����<�H�#�k��W����Qm�v��[����*�v�B���/���_��S�?�N�B~���Vad��Uz��#�	"	���c�M��"���b�xZlA+������[��8)	_���y�9�ay��N�/��������^���k�ZW��V��F�i����}�g������c��1�:�������������_�ns��z�_\����~��!�a
�0A���O�w&�{8�YzC$b��D�G��L3�U�z��b�xB��7bf���(���9���eW�O��9U^%��{����Asi	�WK��h�	�Tm�v��B�j���}���N�k��zPo����@}�~��J�\��1����Sg��
�Bg����n�>����	��]�\o�'�;_���5�����Z�������L��|�<�*���*����f�E�p\��%{����^���+�'d/m�,F�L����������@G�]�+��zg��Eu&R� Y�6_�:��������p�k�]=^d�#�)m8���zG9�i��o�����U���t/_$�C.���?5�4y����1�N��_���b����/�����G�����W:�8��~9C��)bI�i��X��#�������m��^���}���U�m�~�1RL����U��t��\]\F�K��aH�yZ'=t>��x��m��; �jC�_���X����:8h����b���hYG�9����r�Hg<I�������`�15��O�nZ'��Ds(;�}1�1@��`��5�m9J�8{}1��"@_���8vR��gE%�R���$�Ct)]H�`����A��\��d��`���)#(�i�q9
�]���A�]�X��x�������\mj������f���%��cF�����E�^=�{t���s�����k[��u���-���B��f9�Y�������d����IL��s��]�����L
E&E����A�8�����"&EC�pv�hh��:;g9�����9#
9�/��z�k*��K��:1nD9��J���������^
���KCQ1)Tp����I��nSB|�p��������x��f��l}�������$�=�T4+\Z��r�Z~������e��yy��FE�)�K����,�_5u���T3�<�3������u>�tRabe�r����6�������h����Qyr��E�S������kj���G�7N�c��u���0�f�^�I<*�������X�&C<�9���2��43��O��9	K�U��7��feE��)�,T3�<�-�WL.���J5#o��	e�����&����MI^���i�����|*;��l�Y�=
_��������0�����=�fJd��B�T�+2#�R��'�s��#��|G������3��q���#�2�4��m��0��
���?�}���]����N��s|!L
��N��Y�������.B�"�Qn�Ctiv-E�
+�r���S��pJ���P|R����\M���y}�)e�{FE��$O5��
1�<TV3������
��=�,_4���--���T*�r|Cf�'F�|�s*���s���*F�D}��nE|^��X��8��9S��f�g���^g���^b��CU=��&��4���������P�(������:cOFEv4�)���f�<+c�������]�t55��5�j&����C�p�v�{���9e�l��3v����s5]�����oSX,�)"�W��������R����Ulj����8rDT��X��@�4X`�����go�U�T]E���:A*�m�	�R'�8�'��q��1�G�7��%+���P��`�����y�|8J�TH�s*�����p�����o���A���+�<sy��������+#�@fj ��N�ffu,L�%�8(�D�X$A����Dv ������o/��O��%WR!z�Q������N�!�E�q!��.��NL8r���*9r�����w	��_��������{�c�@�"#E����A���
�+j�Gz�����?�7|m��
�Nyp��l�a8I"1(�p|	�AJu��B�#l��bBJ�n�;A;��DsgZjz�N��v)�Dg!~"��U+j�>�p�&Q��b\�R@k~�����~��EH���e��q����������>��j����~�r�}�q��w9a�xq��K�rx`����w�!5��������o�71!��g��E��aG��.����>3��#�O�19Nv����|�n��L���\�����d����W�aO$����O�C���p9��0U������!{���5GMN���-��|�LHpr�>�!_b"��P��:�8C��$l���A����8�Hw.��{�'9�\	Y�2$������S�����=�5+aJ��i�2'e� �s^�p�w��A�
���;�-�[	�z���������-<m��3����Q�w�'(�'��8�����<�W��O���#�U�	�h�x7����r���}w�F��'���	W)�5	b�U8z���**lF-��������|�� ���������cf�������f���������yO?}��'�7�.~������;���/l|�9�h�����v�73�l����Ip]<�)�7{��x5BRn�9
�j���,}��[>����E9R�s�D)�����Y$�"��8���#�_E���r{%)���G2�ylQ�����������.�9"��L�!z�(���	���R� �{���TR�Q,��<�4���ya������[������o���GEs�����f����eo�H\��\�N.��7C����
{T��T`��j_��!���RR�c<�3~��|�����Mu�2ep��\N��IBJn"�6�N��$����P���2�<,z� ���Y����;���

&&'K�`$���v;�#	�)rLn*�q�����d^�[D���Z���qk��H�^�^�������}��9�+G'�J�L�1���%���?��4�XV����Rd�/�����s��8�Y<Ln�8�pVn���t��J���r�diB��r4O��N>�y�_��D`+������L��7j��Q�y�*i_����7��)o��D�H�k��(g��P�;d���7�m7��Oao�qs��>�zh�'�d�8���&A��6����=��&�	W[;1?-��;8�k�ps��e7KC8]���Nu���^yt�C7�������?�qb�S�_;>w���������O�������W��jc��]�/���w�X�3=�W(�l�J��Y�����wBf ���!�{�0�:m����o�������q���=��LA�!����@���E,|����KJ|G|G��G���&�^,����o���{�<=z��b�������}3S+�������S��$�	O�#�)�KH�$�.�v�)[:;�zDW&M���S���C/��'�^�d{��dqr�����x���]vV������UU��v��_��H�?��
������o��&,�AF/o['����P�'�<>^8�A,������b�W Y�.��
/)��-���{���f�Cb�����?����CR������4uK�W�����i��-�����
q{��E����I]%��y�mw�������������]{���"�� �|�����vJ4~�<���q*�Q"���8S�+����S�q�hW����r]Jq��f<O�[��:��\S-$�'NO\��t��D�m��~]K���D��r�'h.������j��yH&zt��S�$7����x�ud��z�����i�o+�x��P�o�y_'�G<�H�pWu^W�r�����I�B0�CR�\�����6.#�&���j���:���q���}������}����XX��y��z��8Nm'��~mr1�������Z�v����Yo����<���HBqb����HAqb��v�JvT4X��>T��������k~!W��C>z���[����Oh�N]�D���N�b9��a��I��"))j9������2R�wF�D2�����d�j��Q�����e,&+7!���3��>[
m'�������������dVa	^]���$	r���q�<Jb�ra���
[����2,dZ'+%�U�����4[��T��o%����K	$����:8:$��B� i|)�i�))���I)�I^�M$�;IZ�$����4au�9�.�`Q��s��}�}�}w�t�y�J@	����/ �P	,%�]�+���Q���\�%x�p9K�L�MJ��y�� �?Y�n_���RAJ���&�ub������I�K�� h(-��g�1�M{����l\z��VO�%�>���;��#�s���iQ������+k�����?S����wO�a�(C�_i�C�������>���_gyB�l�mOK���
l�g�O����I�V��-�x�H�xF��"(&
�0[�F<�����h��������R�x����1Oe(����'�Y���}/��5����	�[�fe�RW$�4�44.yth�V��t�L��u_����0�-���~W���)3�<�3���'��Cy���^�H�3[���c�4���m���(��������)��	�A�a���c����-$[�HJ����J0�*�['�#�K2&f�����g��_����t.���=���-66�4L=�����JM)3L��g�X�XJ��!\-����bM���N�9�}�Y���Fl���h{���}�\*���l���^����O]������>����~|�M7��G%��0�C�o��2�����E���������NX_Q���g���N�nKw<E�Iz�#t��n=��M)��DO��I��a���d��]�5
3M�Z	�l1��$k3^�;>���C���w�O>L����b����K����$��
wKN�>Y������n���m��D�a�����O���Q|%�=��/��k2�k2(L��)�>�g)1�
X{��m��E�mg�y�dw����d�\����p�
��7^;U/��TB�r���8��$�ig�pk[�����.R	�3b~K"e��g��s���}r^���*7�����88�M�zYF����
��Do@�D����Kk��Z��D���jLS{:������|B9R\�p����������'�.�k+~�}���T�9Gr�\2Mi�45�3��C[����
+�������_P�Y��q��t����u_�pu�5�3���T_��5�����e��MIn�Q��b
1i*`���:�H�JD7V��f�#���e1��hn��8�C^F�V�B;Sa��)��FB�5^A^�Wz��=��N%`J���	TE5����"i-Tb��B%��J����H�L[�q����BS��[���\<AM"[T��Qzm��W�U�4��K�������m<bRR���H��s�g��|5��E��O��v��{.]8k��%�.[�����n]����Oi������VO�U��/.�e�{�~^��~���,���1t��'�o[����8��������[%���0]��6w��������S68���/M����
�jR�dy
�;�g_�m9�����,�E�K���0N��0MN(���Vy�EZ1������r���-Lh��M
&
K���Ri�� ����c�G�����b��NJKtR�����cM���."u���i�L>���?���m�4U���H��YC�#�_�_��]�~E�e��n�]�ug�����ve}��Y�D(����7�k=[W:eK���[���3�*wX�D6
s�I��pSmo�N�=��O���	���`%'�4sr����������-[�����>�w���������//<kAS[{��A
F���i�UbB��L�������%kiP��I�����6�y�=gc����n�Mt�y��S����#7������#_~b���O��y�����!��2'10v�p���[Y�q�����o��n����^|d)T�z2��\�]p�1���;w�[=�_�q�6L_�k�����G�D�F�P%T9W������~x��}d�7|<N+������K�*J.p5��c�\,�qr=�ch�(�?CW#�z�������?��
������d`��w;�Es�E�h�;H�c��ho�cMV��V���9��
�G��:Qw��2+���A�?��)�[Z�����\��ZF�L'�[��;������nz��!�R�:/���������X$��b��X�tP��/�x����P����\�o�?�p�z�<��|��e*�-��/6�
���<��1��V�~���m��b�S��F}���1�@�L����l`�<HW�CH`�r|J����>���.BX���[h%���
U�i�Z��H������|wNP���s��|�W)��X�:�P�PI��~{������K��Q{�xn��:m�������X�j�r��/�9�uc������@|���<�e�<����p�Jk�g��0��ql(>�����'p������Z`��B��v5����M��
�>�!��x��*����Yc����9��Y��N�/����&�n�S�36U�=K��7<N�����M�j��l��}���B����+���3�r�l������{�������#�Q����mj�E�N���I�K!SV� }.
���K�cT�������x�7*����=�k9��b���!1��*}��=�9�J?$���������Ab�c��E�Dc!��iL�������-���
�W�C�����{�����l��Z�h�.�g�:��9�����tD�����9����1�i��������E5U�C���F��
�4�%���\?��F|t����Mm~��,�-�
�:��^�����w�����L�
,��~����j������	�;m����Y1�����T��w{��K���|d�2���;,mT�F��>H��}������G����z_l��S�-�:-�X���_���}}�N-7�-}����f<%�z��������J�|K�+=:V�/��,�w���C����� ����O�����G�����x��D���0����������lg�+}QB���Ut*S�s\Lk�_S'}d�����qpx������9q�:�O#O�#�j5zJ����
s��B.��E����Qe"�l���j.Ty�"��<���F#�=�5=�Cc�qU����4Z�:�@�1���R���%��b����9���qR���\�h���
pTcg������]��G[O�#� ���x�j�B*s��e�[���D�w"�����KP>h�mB�K�eK��a���+B)�je���)h_���h�b�q_����,�Fc.���
�ba�	�3���|t3����:ZH 2X�n�o��X��u���S;�O�������&��a���rXO�VZ�����_����u��qzo�_LW��J��{���iXk�s�>i����^�c����Z���3�O�������v�\#�������Q]�5E�V���~�}<G��8�^��<�����x�7i���6��;�_J7�u����j���y@{�+=�
[����a�n]�]`�~t3��uc��U����vZcp;��oG�����V�@7v0b�c����n�/�����|Ju]K�ZK���\L������Zhd��|}�9����<F��^���5�!��n������;����J3y���[�{�c�[����C8��O{����Y?�
������c��|a��&6��
�p/�a�%���������^�qX�<Gm���'�`�����%C�@_����~2�����2x�2�������T�h4��x^��f��>������_�@@�AG�^h��{6v������\yb�F�����%`��{��nKx���`����<���t;�i��SE���C�A��8h����~?�.}���w�_��C&�g�j���D�6����o�Y���~8<k�?��	�����}�A��
�����~z"�������r������R�d�_�`{�G���:=���_��Y���A���{���������g
{��G��Pspf�v_������86�z�7�>�8
�2��h�e�~V��E��M��h�(��l;����3���k���C�g��U�,��X����
����<����+�=^��w8=�@8	k�x��]�r�;��7���i�l���=�N�o��]���N&����m��p#V��8����u�O���z������>����;�v�������g����X�����%v8?J��=��������|�������>�����f�1Ge�9����k!/`���(�^���>E����[���#�����X����i�oC��Ty�-T���c���seb��\���"��l������h�m	���\}����
c��v����{�B�:���z���A�A�!�G���3N;oTy.Tw�si����!��2^Twz��u%��(�C��{:���n����������z�b��8�hw�z&4K�{�o�~-�J�;�T�.���X_9��O�c4�G��:���(���Tc��E�T=�Y����E��z��_O����*w%
p�W��Vh����{�u=�,T�W��z�u�9���.3��N�s�M��7���}L�v�r�����{(��<�
t|
Pi>�0N������u�9����6���{��4B��>�N�I���}!`�ql_��0/���m�/Vw}����Ji�n���/�z]�k��`{y�����|��~=�K������z>�w����m�_�=z%�
xP�O=����O�r��������k���gG6h���c�FA��ke���j��z����f�Ki���<�L0��R��������j�UsA9/�u<F��kO�4����#�������5�86Sm6��=�u9X���^�]��r�4E�S%C0^_��Rg���6�=���?�%�s5�~�N*��X�rSr����VX�f�q��M��c==��g|�����~T)���j��h>�����ZY��/�;�c��L�b�x������b�x��b��~���O���~�T|A,_�_��O����?����@���?5�-b��?���b���b���sl�^�M������
��~�/�iV�/V�_8�8+�,@�|^�7�jc����1����1��c���l�N�m����f��A�N>3�Sm���VZ�[l�5�^����9�U��0������~�	���|/����s���1?�u�����2ctu�k�I��h��������(y�1�S�����M���!�R?�X�;���w:*����X�<o�~��K����&�WR��
v�@�[�����n��lshKh(��U�gB���zZ�E�/>�I�?G��8�-v��@y��=����������F���y}=D������T����g[��H�]`Q��4����)�F9q�`��F�1g������(�O��+���S���g�v���u����c��R��"���i�qF'�Q����+�W-��j�	��	;�P=��f�}~����::Q�}vw~�yM�6��q�}l�5�te/&��Z�}@����m�������kl;�����������l�E������iT�����H,������/Y��k7]��@��i��4�1��B�\/P�k �>s��]w�h���EGQ������x/
���\��x�����8^�M��^i���3�tN3����G��U�<3�i�C����Fw5�P��Pc;�z�j����g��?�K��;4���N�9�����@��a�y`����!�i���T7�O����6d��E����^,�}���g�;��g6=���^b����r�C�'s��N�W���;�,�����N�u������5!��c�~�P=��ws~
�p�8c�>����&a�.?����p��r�;����&��-|ma-C8K�=�0�G�����:E����	�~���`���NV����g+��:j�N������G{^0��0��
}���������v]�[����7����M��=�9���Q��]���b��y�	lX�������*iS�OS���
e~��p6eXa�����+`�~��U�k~\SM�s�4�I��c�^�b��i��k7��X��Y�@��>��?O�����Q�y�X=�@~�c.
�/�v��p���c>lm�aa�����g<k��T����g�\�A{U����v��&�?7�������?1�����/����p}��3(S����y�6���������wn��������AMx0/��u��7�_�����^�����*o��[���Y���RP���4�N��w��.�p�p_�@����AY�'p%�;�f�;��6
���`��!�*`6�P/P<\KU�I���h:�u�l�@�����tu��F���+Q����*c�I�����J��C>����BK��N�/@������8�J������8B���g
�����k�_Ro}����+�����v��f�X���^�������4��j�8
��=��a��8A;J��s8��3������4~�X�K|�x�����,����h ����
��
�c�w��G��M����"S�O�{M���R��x0�z�{��|6(��n���J���v���1[��Q�

w�L��6�-�DQ��:�k����B���T�_��R��������F��V0��~�%c�C�������q�w5~�7�����q�w9��y�r��e�U��@��v�7!�p����C�����-{{.��P�N��Is!�r���N�Y�@6�3���S���}*���]��� ���5p�Z���w
��]h�Z��Jg���8�A�T�l����<e� qH�X�{�~�c?E�_��dJ?���1��Lh^c��II������<��5�U3-��_�MS�����q�+~V��iu���!�V��SN*Y���������'/�A����%���Cw��|v�Uf�U����g7�%)J'����no�����z7�3u^�t�A����}�Z'���l_���y��}�7����lD'�Pz���s�e���CT�q�yO�q��'�O2��w6�����}� �������`u�w������|�8C�C���P�2�"� �
2���!/���2��N����yi8=���ow����Kq�!���a�+Z5]����]C�v��z�+��U|�>m~��:������xO��(i$���C�]���w���&4�	MhB���&4�	MhB���&4�	MhB���&4�	MhB���&4�	MhB���&4�	MhB���&�_�������(�H����}��I�9Hn��Z����k���t�Z���f��ZK�Ym�`�NoNN����N��"�����v:M�r��;��v�N"��f��9Ek�������-�L��D�Z@� �"`0�xp�|3�������Q{og�=��NE6����
N6��'����+L:t�IK/0��4�u�bF��g��mM�����i������Z:�����+������ZK�( 5���7�(���nM'�IMP%�=����;����<J����#f�<�9��������Y`7�����P~H��a�s�%�c�n�U�(������������"��<��.�W�>�s�r�_H�\�|�z�W��;�t�������+Oa��	�[��l�����N�^�}kpTV�SkN}����6�c�N�����oW�� ��( ��7������9����{�����j 
������<�x�:`8������:�jmA�`�t���G������Q�U�e����AsA����A���tB�������A��_����%�0`"p7���e���`2*�I�������O�Z7Ef#���!v
z�>8��+���!�N�]���N�K�c���[�c���k�c��r&|���;�F��N�z�E�`�a�D��W^�Y��tf�:��u���u����m�`�VF
[�	V���D�HQ�VTO����[EuoQ}��.�9�:WTGD�N�SQ-"[�
G�����(��Du����-DuHt�����:+R������@���+�0�y��<���p_� S���93�i��mJ�p���f�$_@��/���zl�*yx���=�Q�����[�^�E@	0���;GI��.>�:Vduz���6�7O�E��r|��A��9��+����;��Q�����m������'��wS3,�r��]�}�`�x��`g�o�����:QL"�U�pW�q3�B9rh����(��-h�!������9������~��3��P�.j���a[���%��Eun��*� ;B*�����T�[���6x�m��sg����f�%UE������P_i���H��,��$������lv@
Mot�u�j4��*��NL��u�p������:����\AW3W�+���������x���t�n�&w*���B���N���'��t��Iv��'!�pK���)�`9xT?18�g

�4=1*\'�G��:��D4y0
�/��pp���^88����MB�U���\\'hty�08jAv4�?��z�_�,�i��**(�~mI�$���x@�9�I���ol��7��<�<��YE�{�f����
�/�.���J���3�(�������x�OiE��:1V����;��c������9���f��f�|�G�L�/.��U���8�O�oSU���M-Z�<!�Ry�2B���G��|�'���<��9O������,�9*����%Gd�,c�d)��,i��D���3yr�<��v���s��s��+,�{UL_65\6)\6������h�����)��j�.�2�����������pihS���H������h|���M�#SKk{Ez��'�Vl8�K���Z��V����l8W�������9y ������m
�Tm�����������x�n�	���I�y��}s�(����%{��u�PXM��zNj��]_N����$D{���-���w�uV���p?*�{M�5(�Qj���Qs��	7����� �,�\Z5�hp��������7�\���C�������=fd{D��HMk��q�9..���������yT���E$W���
-�;x��(=c?�|l)VU`�(UvV����W��lc�5�����5K�H�=%
������
��z)�`
endstream
endobj
17
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+ArialMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
19
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
7
0
8
[
889
]
9
18
0
19
28
556
]
>>
endobj
19
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+ArialMT
/Flags
4
/FontBBox
[
-664
-324
2000
1005
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
20
0
R
>>
endobj
21
0
obj
340
endobj
22
0
obj
17988
endobj
23
0
obj
249
endobj
24
0
obj
14003
endobj
1
0
obj
<<
/Type
/Pages
/Kids
[
5
0
R
]
/Count
1
>>
endobj
xref
0 25
0000000002 65535 f 
0000077939 00000 n 
0000000000 00000 f 
0000000016 00000 n 
0000000142 00000 n 
0000000255 00000 n 
0000000420 00000 n 
0000043411 00000 n 
0000043319 00000 n 
0000043340 00000 n 
0000043359 00000 n 
0000043582 00000 n 
0000043731 00000 n 
0000062355 00000 n 
0000043875 00000 n 
0000062796 00000 n 
0000044291 00000 n 
0000077402 00000 n 
0000062998 00000 n 
0000077658 00000 n 
0000063323 00000 n 
0000077855 00000 n 
0000077875 00000 n 
0000077897 00000 n 
0000077917 00000 n 
trailer
<<
/Size
25
/Root
3
0
R
/Info
4
0
R
>>
startxref
77998
%%EOF
#170Sutou Kouhei
kou@clear-code.com
In reply to: Tomas Vondra (#169)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <b1c8c9fa-06c5-4b60-a2b3-d2b4bedbbde9@enterprisedb.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 30 Jul 2024 11:51:37 +0200,
Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:

I decided to do the benchmark for individual parts of the patch series.
The attached PDF shows results for master (label 0000) and the 0001-0005
patches, along with relative performance difference between the patches.
The color scale is the same as before - red = bad, green = good.

There are pretty clear differences between the patches and "direction"
of the COPY. I'm sure it does depend on the hardware - I tried running
this on rpi5 (with 32-bits), and it looks very different. There might be
a similar behavior difference between Intel and Ryzen, but my point is
that when looking for regressions, looking at these "per patch" charts
can be very useful (as it reduces the scope of changes that might have
caused the regression).

Thanks.
The numbers on your environment shows that there are
performance problems in the following cases in the v18 patch
set:

1. 0001 + TO
2. 0005 + TO

There are +-~3% differences in FROM cases. They may be noise.
+~6% differences in TO cases may not be noise.

I also tried another benchmark with the v19 (not v18) patch
set with "Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz" not "AMD
Ryzen 9 3900X 12-Core Processor".

The attached PDF visualized my numbers like your PDF but red
= bad, green = good. -30 (blue) means 70% (faster) and 30
(red) means 130% (slower).

0001 + TO is a bit slower like your numbers. Other TO cases
are a bit faster.
0002 + FROM is very slower. Other FROM cases are slower with
less records but a bit faster with many records.

I'll re-run it with "AMD Ryzen 9 3900X 12-Core Processor".

FYI: I've created a repository to push benchmark scripts:
https://gitlab.com/ktou/pg-bench

Thanks,
--
kou

Attachments:

intel-core-i7-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20240801175146)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 139058
/Filter [/FlateDecode]
>>
stream
x������8��7��8O�r"3UK�.���A�4�Kd��"d&�,���k-p2���7����:������������o���������8�����?����q|�������r������V_{��������o�x]���o���?��=������^g\�'��u��k�	�����5�>7m��e�R>����^�	��J��5��z�c��|���+���7��2����U��k�	��:������1�����jS�A>�=^�N\�Op��9���5���<@����u4gPP��13���w����B=@m�62������f���:Ge�z�z�����z��^�(�P�S[zm�@=@��m4^P�S��J#�����4.���Wz�Q���We�l+�2���Op��1���p������|�[_u��!�������D��t��	/�d�"?�G�,GB�<	��J8�}_Bd:N~����	���'H�C!���t)���O!2�
'��U�,�B��
��X���g!2]'��[�L����{$�����d9"?�a�L����"��p��^�r3D~��Y��x����}_\9�>�m�KwC���
p�p����A.]q��9���A�^�t;�}��W��x����}�\9�>�}�K�C���p�����B.]q��Ah��	����"2�'����,GD�<���8�}_d���}�H�R���pF��7"����rG�~�q4�G���8����wH�v���'<�����K�h�$�~�'q4�G���-�D�������[�h�%�~�/q4G���-�D�<�����k�h�&�~�7q4�G���-�D��������{"0����O��B����P~�C!X.
��(�G�}�`9)?��L/E���������"0����S��B�����T~�S!X�
��*�W�}_Ev���u8+��������������h�+�~�_Ie����yw"�#��������"��+D?��8Z�����+���"���
��_�	Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!��h�W@~�_X�
���+�������W~�_!����W��B���
������"�����Wv��������B��+?��,������_�E`�+�����s�v���������"��+D?��8Z�����+9m�N������*��+B�_�Eh�+B?��8������WM����+D��B�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"��
��WH~�_������+�_!�E`�+���,���������B����W��"���
��W~�_������+�_!�E`�+���,���������"�N�����G�_q������W�~�_q4�G�����d_�N���+�����K�cM=����}p!��1�M>>zG4�&�W�&��G�����&�����=�GB��|[m�||��w�M>���`���O|��
����m�Z�p~���|\^�6��v�q�M>�^uj� ����'�|�^���A>.�<5B�O���]�R���wC��4�������*�7b��=�E�&.��'����E��}�������k��\�l���{���M\�zOp����N�	.�5q��=�E�&.������e��}�������K��\�h���{��M\�vp������	.�3q��=�Eo&.���g]�y�':�����6��N��~�|���_��|\^�d�@>����;�|�^y�� �X9&���Ox������7�:���	m������3����������6+��M�~��&mB�~��&�g�ec�~}��y0����Lh�����H�3��?�Mh���,u�	�3>�����\t}��_|�3E�'���\t|��W|��~O\t�Op����>�	.z=q�%>����s�]�#dtyNF��=���!>BF��d��O�������2�;'�7|����&u����2����2�:'�+|������	'���'v�����9���Z�N��������6������A_����6��'��|x�~]^iA�~},���A�WY����*����]A?�N�4{W���������*��3�V:��6f��m��~�/�T����2NE�������3�����+�g��2ZE��,�}��~�+(�*v�����
����r[>R��|������'�^��U�&!�t2z�G����J��#dt�NF���K���]�#dt�NF�9���A>BF�d������9��dv"�w|���U�!�y�J}�#d�}NF��]���3>B��+u���"��!+��O�K^>bQ?�{��O]���A���	m�t[>eQ?3�p_�eQ?�N}���6��,����A�kA�~}-�������-���A��[�3h[�1�M?�n�G��
��=�>�!,�G�m[�eQ?���!,�g��k�[>�g�u�;
��\����A_��i�g��<�RW�H������)!�'t2:�G�m���~��9���}K��#dt�NF/������I>BF'�d����������Gfwn�\j������}K�#dt�NF������=>B>�Q+��O��������>�Z�o|������!�ez5{�G��<j�����L�f���\����dsP?��%��0�~]^��6��.����A_��-�gVW�}�iy��g��u�K���A����3��|��~}���6��Z�m��E�:���6��X�mQ?�n��3�s��E����!,�g��u�-�3�c��~]�������e����}����|��������2zB'��|�\��[�'!_��-u����B7�K��K>BF/�dt�����}K}�#�6�R�]���C>��m��o��|�����!��-u����<j����9�R�������!��s2��G��<j���r�ge�c|�|��V��D>?���c����C�1��a\�Z�������M�wdw��:�����`�8�K&�_q}[��tPaX��n$Tvn�}$T��m[���A�&�8T�����f��C��5B�M�J�i��:�c�Y)�X�p�����~~p�^��\V?(7\3x�-����
�
����c[����~�z���p���� ~�e���*"`������$~6d���	��%~b���9�&~�_���iv�'~�]����m�(~f[���D5����):=�UE�������b]��S���',���	K��"�j�����'���d�pm��wT[t�N���)3�-:e&\[�,����-~b�j�N	�������<��EgW�����pm���-<� \[|����-"zm!1^[|_|��?\[|�w���=\[|�s���<\[|'o���;\[|�j���:\[��4k�v�����������E{���h��pm��eY[|w�pmQ�E�w�w����O�\����hQ�����:��6�3�N	��o�`�����O|&�����}�PO��T���\��^��b�o���* ��h����BF��CV
�|��������1�(�|�������e��v�n��e�&�o�~��D4�q��&������k���m`��?��M6��$����.��6��w��T"��2O}3����M�.��N
O������'����/����"^K�I��lK�I�� �,�.o���������V����I���c-�������x���*c}�d{�#U����fW�l�uuO����c��C�x-�y��!��5-�2��KoJ������w�:,���h�g,��3���������rzL�G��d������.U������]���7�~jDiL��GFb���Xf�~��k?�p�mj�b)������}�Q��"^�N���Q�If���Y=���7��Y�D�����9=���B�]>�)&��]����_����M#,<���W��q��H:~���������VI��a��I<\U�/������TE��Q�+��N�K'�~"��T��rP�gF���~&�T��p�'��=%�+��~"��S��r��g5�g�~&�S��p��'��,%�+'�~"��R��r@�g$���~&��Q��p��'��%�+���$�.
�W���a��|�,����C������8<*��/��rt2(8_9������s@W����+�~~�4�IN�o?�s��TOp�r��'�$�gx���	�W�������|�����9������8<���/������y����r��g����k~"�4M��r��g����d�k$��1����R���i�4'����b��+bQ:�&��6��hT:+`U�,X��d��J�dX��,�E��Y��Y4.��.}�/�K�"��X20��X���������,��
X�>��f�X;S,�bE,Mg��tV��t�Mg�M��IsS������48��X�"��)`s�$�����)�N�v����K��<E��)R��$I�'I�S$��"�O�d���@E�	*R��$�$E�P�h���CI�!JR����H[�/����F�Es�Y{T,�bE,Rg���6���M�
���lR_�A�T��M*�lR�"6��h�:+`�:�6��6��9�MJV�&K6�X��Y�I��I�E��Y��W��&+b��%�T��M�,���
����M���M���h���I��M*V�&umRglRg�&uV�&�;�I����ZE����M*mR�6)I�II���"�&)`�j���t�T$��"lR�d���IE�M*R�&%I6)I�T$��"lR-��MJR�&�6�H��$��$ElR�h���I}� mR���Y�I��I��M*V�&u��~$+b�j��l�~~��I��Q6)Y!��,�I�
��b�&+b��%�T��M����I����d�MJV�&K6�X�T,��bElR�[�MJV�&%�mR�B6�X�I����b�&+b�jU�lR�B6)Yn���I��M*V�&K6�X�TsNe���I��X6)P!��$��$ElR��&)d��$����M�e���e�lR�d���IAr���MJ�lR�"6)Hn���II�MJR�&��u�� �lR�d���IAr���MJ�lR�"6�V��&���I��M*V�&%�mR�B6�X>���M�3�i����9���w�M*V�&K6�X��Y�I��I�E��Y���O�MJV�&K6�X��Y�I��I�E��Y��w��M*V�&K6�X��Y�I��I�E��Y�����M*V�&K6�X��Y�I��I�E��Y��WM�&+b�jS��DElR�h���II�MJR�&�6�H�T���K��IE�M*R�&%I6)I�T$��"lR�d���IE�M*R�&��0�II���"�&)`��$����M*mR�6��wC�T6C�&umRglR�d���I��hblR��C����{�;��'b��#K��J�Pr6(9�@�	���b���qB�'8�<�������$'`s�C������=�im��5���	N��$�V&9�Z���KnM���m	�,Kp"v%9�*�	�����$'`Or1Z��DlIlgMK�0;Z��lH���4J�~��#(�;s�S��A��J�f4�,F�D�EPh-���"K�(;Z��lDlxN�(�Z��lC��24J�.�V!(��{��"D���5HN�G� 8;�Z��l@��F#��8�.`jz��$E�@�d��E�)(R����HkP���)d�$����E(MB�6�H4
E
X�:5�f!I��$�$E,C�h��
E�q(R�:�a4I���$�@$)b!�DQ���(�D�V�6���HR�N��4�X���T$'`+�#c���H�Er�"O���� b1�C�������Fp"V#94�	����p'b9�C�������@h<�����HN�~G$8����lH�oB#�}���f�H;�$�$E,I���/I����[T�����5�>]'�h}:Y���d��t�B�����t�"�����t�"��u����[�N��O'+�>],�O+�>],�O+�>]��h}:Y���d��t�B�����t�"�����t�"��u�����Z�N��O'+�>],�O+�>],�O+�>]�*k}:Y���<#I���
�O'I��I��O����Z�N����Y��������O'I��I��O����Z�N����Y���O)�>�$�O')�>��li}:H���$i}:I��� ��t�B��I��t�"��u~����f�OK�����O'����Z�.��QOVd-�v��Z�~R�\�s�����Z �|-Y��@bi-�X��@bi-�X��@:�Mk����"���Z$���Y$���Y�3�����Z �|-Y��@bi-�X��@bi-�X��@:�Ok��
�"���Z$���Y$���Y������Z �D��@@�����@$E���k�@
�"Ik�H���	���e�����@$E���k�@
�"Ik�H�����ZD���Y��,���Z �����Z �|-H��@$i-I��@:�Sk�h3�����@bE���k��
���D!+�H�;h-�m,����~����ZD��"+�H,�+�H,�+�Hg�j-X��@d�Z �Bk���Z �"k���Z �"k�tr���ZD��"+�H,�+�H,�+�H��j-Y��@d�Z �Bk���Z �"k���Z �"k�t����Z��~���Z �����Z �|-H��@$i-I��@<�x_���Z �����Z �|-H��@$i-I��@ �Z �Bk�H�Z �"k�xf���ZD���Y��)��$�")�Hgak-m��Z ��H��Z �|-Y��@bi-�X��nF����R�=��t�z�;�*������d����������e��^i:�^2B:_�L����4�;��2B�{�6�(#���F�D!���e�tN�8�t ��I-�$!�W���d�T^�L���j���2B�^u��������$!��9��Ry��KH�j����R������Zm�P8h�$!�����.#$k��2B�F{�(#$k��2@B��$���A�����$���A��������.$4�N�����$���A�����$���A���h;I2B�F{�(#$k��2@:��CIz��u/|�(#��U��N2�����?]FH��O��d�tw��+!�W��^���*��2�G��>��C����&u�u������t
���#��J�'�u����`bQ�Xy��]�Xeu��C����N�t�ua(gQ���}u��C���'u�-�K�%�)�A$���A��x�t��O��5��D!Y�>H��5��D!��	�?]�|,k�''�:���|bQ�X��O,��N���:�B{>X�!����:�����:�*��-bY{>��C,k�'uhD`_�o�����Ea��KG��Z_yaQ�Xm(����ebQ�F��2X�:�*����C�c0vb�^�&uh�{��n���+�v�t����c�!��*�:�:���Y���-���k_�s�!V^t�!V�U&u�u���,b]���:��k_u�������������Eb�uPY:���}bQ�F��2��:���}bQ�X�2��:���}bQ��
X�>}���}�X�!V^�]�X��O,�����Ea�},�k_�u�!V^v�!����:���}bQ�X����}���u�U�2��:����XX�!V�������2��:4�c_��]�X�OV�X�!VY��]�X��ZX�!���?��y��Y]�C���?��lZ�����Ypu�u.����m����k_|w�!����vB:���D/��\|w�!��N����y�v�;�}�X�!����:�j�p���l�}�vbY�>��C���G���}�X�!���G�����`�C���G���}�X�!����:�:��u���}��C�}��]�X��O,������C�s��]�X�:1L:2O���N��������>�u�U�_���C���G���e<�uh��(N���C��:����!VY��]�Xm�vb]����C���e<�u��^eaQ�X�2�:�j���:�:��h���-���+��������wwb�e����\|w������11U:�w��OsbY�>��C���G���e<�uh������g�����Eb�e<�u����h�!����:4G|[��]�X��O,��X��]�Xm��]�X�2�:�B�>X�!����:�:��u�U��d�C�s��]XX��b���������(q�.�H2B��('QFHX�$�	���D!aQ��($.�I2B��('QFHX�$�	���D!aQ��($.�j�L2B��('QFHX�$�	���D!aQ��($.�I2B��('QFHX�$�	�\�R�������`oR nL@U��m	���p�)�8P�$*����@8�������`+q�"lD T��m��
p�	9T� *���@E8�~@����p�r�"l< T��m��
p��I��d����&'QFHX��$����Mn�SFHX��$�	��D!aA��(#$,hre�?�z�� Q�XX�4X�!�3
u���L�Eaq=���C,�g,�+/����N�t���L�Eba=�`Q���}u��C,�g,�H[Z�~�*�O`;q�"lF T��Vr�"lD T��m���p�	�8P� *�/a�w� C$�>�$�	{8	2D��N������H�!vpd��g�Y2D*��L"a�'A�H�m�I�!_~_�g�	;
8	2B��$��#�	�%
u����]����:4r���]�!�%
u�u,��C,�K,���<�%�z����:���@�����:���������.�Y�!�����C��8��C,�K,����:����u����8��CmaY�)C=vpd����`�	;8	24���a�	�
8	2D:�Aa�	;
8	24��}| 2D�.N���<8,"a�'A�H�_�I�w�2D�gg[2D���-"a_'A�H�U�I�!�5;����U��vKFH\o�}�t��z������h��C��������b�!�
u�U��b�!�
u�u-���CsO�ev��+-���C,�7,����:�:��u���F�����'wba��`Q�Xu�p%b��O�:���IW���0������	8	2D�^N���<�,������!vpd�T�qd�	;8	2D��qd��L�m�w%"�yY2D��N���o�� C�s��%#$� e�����d����"�e*e�t���d�t-��(#�����'sJG��r�`�p_�uD�Eb�e��u�u-���C����hL����h��C������2~�:��:��������c�!�
u�u,���C�����C�s?vaq���C,�#,��X|r�!V]�p����'wj��O�&�R�z�<�f�!�pd�T�qd�����%C3��;�O1���7�� C�2�#K�HmG���+�� Cs��yY2D��N���yY2Dj��-"��8�d���D����� C�c��%C�:���������������+?k�H���]��@�)m�;H"Q�H�&�9	2D�	�$��O-l���R?k}$T��� ����kI*I���/I�!��.��C�����6Fy����)�dy'+T��R+R��R!+R��'����!�
:Q��N��:I��N�
;I��������)�b��8�i��~�MS	��b��QDJ<Y^��
�x�T����x�T����x����e�+,�R�'*R�IR�')R�IR�')R�U�T�U�"%^��Cu�v��"��m����3���P�k�x�b%�,/�d�J<Y^��
�x����i��9��T����%�P��K<H����%�%+T��G��iO��Z����S��u�~@����%��P�K%^�H�K%^�H�k�V����OT����OR����OR���d���dEJ�X�0e�"%��wRm?�Hi7�pQm������q"�wO�)�u�C�H�6���)�Fq��S"��(��vJ�D���Sj%'R���ku�A��,��JE��S����0�*�$�8�)�$�@�)�$��y*��
5@�R
��58�r
�
68��������)�$�y�y*�_�dk���>�r��u���5�[�������-d��[����B�-d��%�
�����-@��[@���B�- �xH���,oa�
���5�w+�}���m�>�f�)��O���	V��$��O�B�'Y�}��>�g-m�y�!�{�@��O���)�}���'H!��%��O����I�8�d�N9�����M���~�����	��>��y�d��IV��$��O�B�'Y�}��>�r����	�{� ��O���)�}�d�����>�r�������Gu��25u?]H)��y��2@�w2�[�SFH�k�g��>k��V��*�u���e���
1e����2B��$����[����G(WZ������!:�s��C��=�������j��:K:���`���_I(
�4'IFj2�lTe���lbQGX��������=�:����J)[m_�btb]K��:�:��u�����t^�#��_�MSG����:R&�o�y��!��tc�#,��tv�d���<�������:����L)_�Z�Nra�uL��\GX�X�3�V�K�:����s�P����Ce�Z�Dqa!���9�#,��t�����o���9����[<u�v���KG<�t[��9��V��m9��:�*��g�QGX���i�C�O���Ci�i�@:T&,�&u��|�������o��N��m:�h�i�) `�ew���=�/�(�6�E�$�D�7K������-�	.��($��~�	e�T�u��O�
��iK#��CjZ
�p@M5�"���p0M�@8t�������_�w:��w~�:���Y��c_y���`QGX���>�Ug�}�E_~�m^t���YT�^�P���!5��
��O���!C$��9	2B�X���!q$��6������}��d�zy��>����_Q�u-������/���(��c�������=K��n�z�8���zBFJG�|�K���;,���h�3d��YC�}
K�����S!�_{�QG���������Y����v����_������=�r����>�j�uVc �1~�;tA�J�5�8���8v�{XAFH9����h��q3�)(G{/���D�����=t�#}���������e�#,��c���3�����>����}�|���t�S �1f�{d@�JF��!q��w����8Z��#@FH+�U�{���H�� ���'���u��g����O.�;��?�o���d9���������O��;�?5�o�q�����f�Sic!�2�_h�v���d�yc��:���O��;S�?9Ho���d��3������d�O&�;�C?u��x|�Q��l*����N��iZ�;m���1����gh����%�N���K�;������������W���s��������O����Y;��P����
������Z�f�u�d�~��m�~��o���=��_�l�����lC��uEHi�Z��2�����Q�M�o������� �����a,���z���N�<$��_���sT��s�C���A<���MWi<����)�,!��������]?v���rg�?�ms�������!G!-���H���(��?T��e�p��o!�A_ie}"{HC|���
K����%p��6J����~O���������zI:������(9!X��-����Lu��b�c)�?����?�^q���[���sR��������#h+=��)�]#+	=�x�]#����x���Q��([51T��Z�� �+�
H��%�)�c�^kR|{��w�s��m�"/�Y�:b��9~�1���;M!��s�XvoJ����eN5��`�@�_��%g�-*�emN_~�����[Y��O��5[Ji��UG�)�Q\�i�v��������k{N!5��������JlYx=�r��/�-c�R��}2C��&�Q�bz'R���W�}q������m���.�~��!�
�cK���dn����FH�=uW[b�Z>�:m#��e����]Uk�]��#������S�s��7���c3��]��{6�(c�zm/}�{'[�$e��!�'b������o�������)���Ah=���SU�R�����y��]����T�uN_*k
�������\u������1}� �h���6�U�J����F��^�U3�s_3y7lpu���6^�������~m�qeE�7)�5��[��	�kK�2B����v�	����y�C��
N��~�Y��Y�������C��jr_����c-.c]��I��Uv��E��T���VM���T{/pv���L����x��b���N����]���u��k���A[nU��zZ�}0�ydO���v���vZ_���?������dE*@���_�1��B��0_���5��bC�����m�9��m�l��q��+�c�i����;��JY���I!P	�.�P�s�q����~��'uL!�i�h��7<V�*-�d={W����u)M��P	�|J%-�H��[�C�`HM���$C����N�V�vm}��A�u�B�n@aW���l�Qr�{�[�����z�����0{�e�>Z!�Y������4d�u_|f�Q��Z*��C:��kv��{��Z��B��5�0\�Vk����I��R����o��q�9L��|�X��i��vf�����1M�k�B����0�J�&G��(Ywj�7a*V�Bu�
�y�����=�����
�6BRU�AW{���;�N�=�z�^���T��s��n�}�0O�)��Wwf8��<�?{�U��Vt�C�m����	����-��q�����X�p���������al�! ����2��@����IRv�����V�+�9-�$Sw�����!w��8�8���py+��e^{L8f$����Z�8p�F�Iq�����@H���m9{����Vg�
����#�1����;�x�����9�A�6�U1�r�S��%d��HE��~Oal�����3�2�e���mRq$����#����C�S�TK�s"O��j�x�I��t�k{j!�����:���6�������	�*���d/�{���^Fm0��kj��p��1#$�M�e���f����R��{6��dr7k��nf���1�yNa�;�?&��1��:���n/n�W*���SIR����'�e;�C��I���.2�)>�-q�|{���8���6����K�����o�E�+N����-_
��A�����,8>VagVZ������d�vy���BU�@XB��'I������9��X�����p6�;�y�)�S��W����w�S&0]��,i������.���.��?]A���gj�^�F��s;����E���M��ER��u��!���3���s�1�����<Y���g���e���Tuf�c��x�$ds�{������D�Z����6���}#b�������
	�sG�0y��]��=�xo��9��I�)�E����w{v�#�6�KoNn��1��sM�$ImI�y*Y�����S�����J�}�����.�gC�9���-wO�%bY����0�;��>2M�t{4%E������a��-Y����y	�c�g&�`��<3RSRs��2�����&f�}����{$�TM�
��[f���F���%ZY�.{�+�J��E�q�S}@*S\��8�'<9t�2[SR�0���~	3��-af�y��s��'2���gr��N�t2�j���,kLZ`����m
������;�(�Y�,��~�������T�sT�$��2��D���j������h�VJ3jG2�mJ&��k��;�a��*�eI����>���We�^���L%{/K-Ck�����~�SkkON��5?gi��1���=�?u�S�.��g�*����J�!�|��|�����2��%e��I�
c!k|<��f�����m��v��uMa�;@6	������N6����a�f)��g�m��q22�g_���2��xb|�����'/�kLz���kN����m�'&
��EI���O�}��$C(�(���Q1P�iy;�Fk��uA�?�Lp��(�h3.u���i��)�d^\���ln�vAK�Od�����a�7L�!q����kL�[r��d�;f�H�1��oj�� ����2���'�������6��K������/��������1�V�0K�G��37�X�'[�[���O��/����������5nK��>��
IH��.ys�d�O-{<j�-�tcqD[Qks��;�7|%/}�����	�C"yg�$o>�`���<�NO��i���ty�a�O�����.&���aE�����$�T�G���'}��F>�:�\q(3;�I��5�
�V�y�����rC$���D���!PV]�M�����JU'��l5���}oa�D�v���r����a��t�������9���vu@C�5����d�e���e��P�>v�0�q�K*y�)'����������N�m�R-�hSX��}�(�.��VG����,o9��3]X�vKkV"��r�X��"�i�
�"*�u@������qr���d����7����E������=�Rcb����]2)���f��|jT��
81�I'2�PB+ �j�ju���!�v��}����c�����������?''r03�+���45�Nd>��cr����bL�V����}v"�������kqQ�Z�9=�Q�"I l���5|�S�!�m	3'r���>Z�'2��"?���J'�=��|-Nd��F�'2��������6�����8������~�m������D�S�Se�Uw��8�#�6;�C���t�1��9b��)����;�9j�59��������D�sq"{���&wm��ba�5�����>���w|Jq��'t)�������%,��TC���uy*�Ck��B�>�,:� K� ���,cdy�������-�%���[�4�����(w�0
+HC�����_M�dS`���}"����$_�3~��J���b�����rhXrg��\#��"lJk��.��5���>@=�q.a��c|f��'/����4���N��������!I��Hf�j�|��;T3���*���+2=�������,����e�2��T(���>~�Fz���~���onxT���ZOx~g���,54���iy��
kX��p
���C
��/�r�~bO�������.MJ�Q��e�����n�*�f��:eB�J�B�H�4M !��/���~�V����'���;����r��)�l�.��1�'��c<��U�	�����L��u�6���.hX�4C��5iHB6�wS^�j;���wG
Qs�uD[Qk����w���1��`��]�;��N���0$�{_�(U�Z3&G�N2��\S10/��}
��r�9�k��
����iE�nuS��Ab�B��
�H�����~W�[��.�����q���_�����������?|��
zW��l���~~�������Q������������>�o��w��������������������������?����O���/����������<��]�_���_�����8���������B{���~������w����7�?�w��v���?�����|�����{��`7|O����}���?�������~y*�e��f<��t'u��V(w��V��X�X1��1��"q��b
')��d����C6H�C��}��e����@�-z� ��p����%������D.a��~L�}AD�b�SX��P��B�J����S�_�+��!���A�jK5������<xX����(-��o���|�)6�)��8��������1���a�.-�J���\���4������F�/����DL�cy����0�)M]*M���n[^�����Ke�}y����6z��K����0ky��c�w��u���������x�G��j���96�r�HV��i�>�@���}>f6�V6U*;P���o��),�a�6/G�6�!��?K�`�rka;�_���L|�-(�M�y\:s�����]��<~��3_A�Ry/6�XmPh�l�I����]����k�%�����,l�����#��<B#U�<������c�����m�l�����$����1�8OfH[����X������r�d�0<�2ojs���p������G��P�QlD����&y����e7s�Vo{��+��� 'mYS���%�6�BY�6��3�m��Ny�bIE*�5=����;��5�B�sY/�O��P�e�QW�R�x�ja��,����-O$�e��%fzkSA�\�����8J�7�C���?l8�j��a�y��W���6�	�����.��
0��������}j�j��{�B�)]b	����!an�X8��[=l4�]��c3��K������������������j�UC�p��S���T��j^��2��ZJ(�
��AU���m	���C�0�w|�t�S	���$a�VY��6��Ys�&�W�H`����D������<�����)��2�NF�U��DX:����q��e����1�����*�G�M���W%��:�MS���i�Tm�<,��9��mJ��l��K�K� �\y�M��z	��	�t�T�2��w��q-M����G���a �r!�����C�&��e�����M*Ld�\8c���%B��M��zVl��t�����sjF�
�����C�@���\�(�b���������9]���{��6D�����$.�.��o<s����i���l�������E�9�\7�-Oar^/y��L��=��&�m�'�_���4c��h/����gUCX��ea�k�M�'i�
ks�>�8�0n���������_�����4���1?����w;�0�\.S6	z���7L���i����$>m&�>���u��j�����6�4H�jx�`�p�]s���%�:�s�`m8������|gNAM�������v01R�b���-r����S��T��}J��\�t�1����������s�F���rd=g��}�<��Cs��!��Ke��Q8q���?�
i�^�/VF�7�5{������d�Y`�O}�8V�"dg�13�MT����!�<����1�e���K��kE��CZ�w�t]L�P2lsO�)~nK��v���lnBq�a�NC����q�����}T�>#����1�)��@�NCl���4$�X��NM��:���,�6�[nS�n���^���N�)J�����vCZ�J\Hy�>�k��W2K�D$O+���O������k����r_����+�nY�O��o��wXr�K^��he�j�Z\�V/���.@�8����X��;��t��SL3,"�%,������� C��$:�~>���������I�f�&�q�/o3�9���ai
��K.�m6��N�I��O��	=O��Yf����h;2�.L��6'���6���[T�X1����dI�f"�)��~��Y\�Qd��������aV|h*�|���"�a�����|(�8�����Y���\��L=yN�[����2����=�)]����=m^�jI^�9�4��c���12�w�{)�G��(��L��<��D�K��f?1]��B��� �n2��Ex�bc?�K���?��T'l��]��c�Vb�����q���U�.;}e����4��Mt�9���_\���se
�]#������Wl��{���R�@Und�_\Y���������|j����5���6'���3�
��)g�}��U������3�%))K�m�n�=c�����m�:W�r�*�-����y��������,1v�;�0�7*��_s�)�C�#�l��q]F��t��T�EE�6�"�l�����r�"�����u�u�?�J"��Om����{�\���m����P���1T����c>&�K��7����X�hJu[��u{z}��G���8����sb���6$E7q�wb�vq�+�@�����~���ID�\����g�&������pW�
�K;������*�GP�Rb�v���$I�EJ�9a����c������R��}��^#}/�:!_�],#��?�.��k����r��Qf��`����a]�����������T����!��!��	�lj
�k�\����]�|��MB6g.���t*�/��E'^�K���nW������|��s�U[�2���}w�S4���I��}�
��n��.I1��g�������m��hfm~��e��2�5�'�:5\�����Vux�nA�z_B�c4�����Pe%>��}z���"�!�6]���6��������6J����3�c(���v0�$d+Cvd�@a�+Z������z���a:=�(~]�9��{H�H#���������}��;�c�S;�w����g�C�����t���m��������f��jq���~�O=��C%����>
��������=���YA��*��;e�u�T�m��W��n�S��&�-��)��u�}��J���FSQ<FTf!��}��;�okyEu�mQm�[6����d���D������6��G�)[j�����P@+2�7�~���c��.�n�TOV<�6"e����u*���PI�T�����f�S�=��Bl��l��m�Ak�dCI�g�y��~���U)#��QP}~�+V�JU���s���u��{���_�%��IW13�L���!���P�Z�>��w�R��jSH]B�DK�������)����b�`Cl��yv&w��P��F`>�c�%�����G��,=$#n�H���AfIb���c���"�
�����j��<����{����^�V��-	S��v�V�x+�W���6������!�����4�-�6`�]������Cjn����s�����j��V?(}�<~�i�].8��VML���>�>��8�������o���o���o���������l������v��}���������~�~/�������
���7����
�o�}��}�o���
�-u��J��j���t��[�%�7���}C������r��
����\�}C>�}C�%��������{�3��X�7����r�������r����K�o(�������8��������G�v�7��o8�������o8~;����}�� �
w��n���z�������/����V���z���v��R�oh��7�������/��}����o�[�;����o�c}�p���������
�o�}����pm���+]������o��u�p��}���u�p�v�7\����;����o�������7���/��n��/�
�|���������_���
��_�~���7�z�z���/������_�������
w�o�����N���;A��X�7���������~��~������O�����|�������}�����
����}����~����������B�;'����q�V0����X�����d���o��
��2���C���o���B]�:^���������HK$
	��D�"������zVx� ��]�:d#���Y�l���M����




K"��QW]ciou{��z������J�
����e������7UKVQTWT]����������h��q���4&hX����A�c
���,y��
M�14ih���C��&�N�oj�P��Dj�)V6�hp���!f��&��k4�l����yGS�f]�u�BK~��������e?X8L��tC��������C�oK�q�7��A����S�)��3��#\��C��>[n9�w<�g3�Fl�1�?��>��`�t'd��m7��h1���f�b�*���9�o���>`R�5,Y�8521� ���W����<1��*�V4Y>������c
�� wX��m{�e
����re�K�L��m�y�
�d��������q-?=f�DY��x�`��5X�;���d���;-[lo����
+���3D�K����61�������4,����f������Z�"o���09��"������/A*�
��J�����g�Z��hK�]�S������d^��
6�}K��t��s�[����<n�����r���q
KqX^���$����+�B��Ly��Vt~����3���~�~��xXA���fc�j<��X�TT���%J��5�<��q�c����;�[*#+Zc�~`%����E�����v^F;���a��-��-����)�F
t�3n��+:�)�
H����-V��mk�[���2�9�pK��$�,��II��(�����I�e�h+j�z���Bic��@4O��I��y<G�������MF�(�(���%oxF1`��B���I�������J�o���5���dc��<%=�9�=t��/���N���$��p.��2�k��p�<e�@���
K�1�b��!�vL��L�y���<�`��-1E�6�>�~�T�~��TQdv��n�t�������?�����qh���V��+���]�������`
��z��_r+������Y]�e���)���0�l�u������������S�l�q</�R)����4���&�8�����I�%���W�x���/�f�����}8Y�L���QkX�y��u������=�
zr�����
�c/2������6U��0�w�Wh@^�$�}C6��f�o����f�G����p��}z�3������������_������F��t���a�������m�����M;�����#��};i���Y�o�8;;��fn+�;��f�a��t�M;������8�%������w���M��{�;����m�w����TF��CE)��������/=�:p�s�)y�-�����*v�W��mv�=���ct�v���2:���#��b�U������/�'1�`9����c��7:�~���Q�N�d��D��d�����N�.v���)������u�z�e
��}���������v�S�t~�h����mG�s�'�C�!�
g��3�GgK�V���^{��)qLa����$18t!����>�V��K�O6��?&iGM��n.������a�D��J��m��k[����=(j��v'���4_2�
��l�!���`5Y�#�
RW�i������;0�,�*.��u{��m����"mSX�����7X��N�K�R �@�o�F��^�q������=/,i�F�d���~z�?�Bm���b`B��%kD�z�0��}�XL7O��I����	9C.���BI�����e����\#�<����j��k�����`���l�2CX����`�
�I�:^���T�����s�
�.&�]l�g�����U����
�1����&�����������	�{>Q��\���K�����\�����8����S���:[��i�!;�
�,���O��#]�P��fHD�$!%������4���6���0�$�p>-b3E�1y�)l�tRT0Ns����=	3��ZX�x�a��}���7��l���}Q[�i�m*;��j6f$����Ss��c*8eg��G�p+��kz�eL��<�����mz�xe�����,9a{����e����C6Lc����$��m
3#��,7K��]�>����<��^ ��C����b�
��qfC���
g{��t
}���S��/������e��hX�!i�A���K���69���3������2�,����y����
�����8��K�������NXF�`�?O������%Av_�'�#n2:��Rp�����az�gfE�xl=2��%Y�:�������2[��|n���O�f�7L)������=�6X�2��4��c��vX�6O�����!������E����	y���;jr>�b�OA[���j�Y/������b�pB���o�x�������n�����K�_�l������z������$��������%l����� �
Q��.3:�b��a#���{owd��}�S������-"4�54�:��o���:,a�F&W�v��$����!b;��q{dv�|���4Ma��yG�l�0�D��^�&��B���k<���*�����������L�?I��
_H�0����r�1q$Z��~$iX�s$l9�0�H��p!������b�If�
�t�3�Uy`�S5���7L��a�����}�XT������,L��,�m�������,mSX��������5G�Q�8��9���q��D�a_J|&8�F������y
{��S�+K����p&51l�
�{2t���c�y?'yXn���LLow�D��jj���Pb3E�I�������r�=y�w*=�c}9Uid�:+����=��}�BB5���m�!��94�������M���|Kjk���T�Y�6%���sz�xTN���������~��<k�����Z^��=�3%�vT��y����j�W����m��3$�e���k�Ixk�0+��G����h�v�r���������J�� �C��^����G���D$���"�am
����z5{�
{=�YJ��Dq�%���}�f���|5	w�=��n����:�
H�<�!����Q|N����r��%�F�����61)�<��&fkK\�*'�;t����������KZSt���4k��'��h`&yIc'Y�{�U��v�BE�
OF���0n��F����c�rl6J�hs�u+�`�C����F�^X�1�?���mc��7���e+,��B���q
�e��zxn���)�������q�����l@��{;<�b�����a���A���fn�Ts[~��Q���Y=j�\�<��t���m���T����yx�6O�������3����������%�����1T�s���>�G����S_����>�������V���.���'�bOz4�#��tO;��<m� ��������}�����lk�&��-M_X��3�m��l�]$R_Xt��[�uS�G_Vt���-e����q�^t�����X���t���=���x�\�V}i.���[���~��Q����q�~/v����r�lZKv�G��.���9;��S|�i�=��?F���<�����;����a;�����y8��g+�.tj[|]X���5�������e��-�x�Z���^�ji��/��C9]4�����;�3mW�	v��M;��D����<�}���&�=���T?]�����ae��u�:�����$I�w^���f]�(�.����,�5)�E`?8
�K�1�/	����\����I��7����^����~G:��{���4����$r�ggDw���w?�����n5�"}�����s�������`����[O��.�����g����6��\���k�5������1�h�~�f���x2#E/��x�7��u��#Il�.�w��~���� 97����6����l�.��-m!.-��{���g���	H���������"������Q������]��M�N�5���?����2�������W����~�w�K;@4�|�&��"^X��"/�fR���g��M�}E�����_Z��G�.l�s��\z�Bc���0���9�6"r!'��K9@{����.L2;��)����C����I2$��d/�_�0������%)�py�%��o�L������K^���d"����D&�n)�G�H��(��1�O�X�>��:��C���l2�}�����ne�������m3e�������J	-A�fG��.n6u�1pmITFH����*�}3�N�~��#�-��7���6'�V}o>[��m�M�v�����fs}���&{
�/�\�.*��K2�_��7���a�f"sS�)�����{���K��8nGt�Z��.���1����h�)�������o��n�?i���/9�6��Q]��Q��9���k���>�vW��6[./�Y����j�a;��]lV�J���������>�bC��9v?&�K�"m#d��r�c����P��&�i�	)C]����>��k���'�B���FU�*#�^#d�����a��kX�}�k?G�������:���Ia����}�>��N=���[
��!5
6���g�G+��E��zl@f�u��+e�T��
	q�Y/��FS'2�o�1���,��x��S����vL��Z��9����z&���1����y������jl?��`�pM��C�md�u�����Fb{�`#�%~g���ra��~M�O���Sdg�9��@���j�B�<
gVa2��W�R+�����>�b���:i��RYxz��);����M9�.:o#$�Q�p�X�a�����;�	��=�;p�����J�s�9�3��>��}����s����!T���$���mH����>���vh�+���E�/��������;A��`�����;�`C�>��sD���_8��v��/��x�{�:�@�V����ui�Rw�Z������ ��5�����&��7��{������V1��I�e�����j�������%���xi?:���6��F�z�P�m�i��-�w��m�g�Sf+��iH�p���r��^/�}Eb�=q��+�&+�_9fFE!������b�����(��bL#YJ�b���W$�e�M��>V*QR*�M����g8�w����c�������t��A�K����%/�&��fi����w�y1�!��Jof]�6o;����(5rq�<}��,��PaoH�t���um9I������W�3��H'��I`5e�N;V�:�Zf��3��j�c�!��M������Jy���Dx����w�+�F�SvN�X6aOD+�?������n��H��1�G!���y
933�B��uo������������jPF�����\�Ur������3�;M��~&N��r��~�R��EsS�+�I��V�KO�S�����*����{a�[������nG�!#���9���(���D*�dv��w�k�<��D�i�������I7:�
�p�dsI��|�7���yeZ�"��
����O��G��y�/����:fo�e���+l3	�{��l���������]mQb����������~�sq��k�Vn����8�
-��he`����Q���`a�<���*�#�R�_�F�y}��?�Q);�r,�8'
�P}29&;��JL>?�s##�
�9��!8[�r�v���>��:��i���s<��[	�����a>i�)����5�yI��B�����	K|��/��-�aZ~8���&��[1P���n'B��s�S���)b��u}���iT#~�W�1��"+�*c�v�O���xP���u���}!������M�_f-��a���&���r�z�D��{���1�
�}C�N��9B`��#�y�=Eli�r������FF��i�K
�Jv�0z�Me����4�z����R��j�C�:kNKDk�~J�;1�����*����C���po�.v^��8��y��.��v�����k����<t���<��X3�e<E�!0����y��M�
������b���Y���l=�d'�,C�%$�����6���[BzG�������-������-�=�L�V�@��j��\D4q�:t�t(�"���)AL��/��<�������O����C
��Z������a%���LC����&�b.��3)��z�2�=o�������L����.a��mX�8eN�{���+C�Wl�"���&�=����\����
�!�:�j���0nl}p���L�{��e}��F#�b�a����'�F���
����Ap<��R���s;d���2>m
9��!e�3i�g�([���c�T��7Y�y���jn����+���:���B����GM^��{���H�*���V�����G�Z�1�ul�r�VN=����O����B�7��R��^=�����������i��1,j��y+CC|��=�X���J&(�����6�����a��	=�_�%�'7>;CPx��a�
��W��%d!(V85��L�uZBzA�������r���r���|���J���P��#��l�:��.��3-O14���������C����#`)�z������K5����!�I�����G��G`����>�#�1j�����/����L�	�Oa�����#�����"��}�u��/���s<S�N����Oa(�!�m��h�<������9��>qs*�t��\�U�vh�#��|�h���*�c��rK�a*
��4�F�&�)���I��C�O�j`��p>�C�����CeL�����O��P����Oe����)W�����6��,��@�*����'mT�k3lf�9�S�'��)/=�O���C�s��<���?���O��������O�s�S���)�����R�M�:�=Ka���rgWw-E�iO�R����!W����T�!>�h�XU$M��[��+��c&^)��x�;������7��*t9��BHI#����5�k3L]������3�V�r�rV��'�Se�nG�n��N5��9�O�����r�1F��1-�����>����_�%�����W�Y�d*�r��_�����r��8P**��:Q��b@�R���!h���RUG��#���)��3J���Rw:M�v��j�����l��/����9mW��gj*�$]�n���.��%�,!�p���-��,!�b��s�`S��)���a*�wFuF5}�skDp�	}K*�-K��������.�S�c�\!M��r��l���,i�rqG�4>I����%���L#�2�������FR!nJD|GVH���+U�r�!ij��"��`�b���-]�
K��
��,�^�[��.���S��#�?T��}K�)}�R�������!f\wI&��O�����~{����[��%�9F�_�c����G��e���J��9���q��l�����B��}�����W��H��pk���z�d��d����^���^�g�~������G�-����9��q�7����ye��/7�C-v�o����4<���[�o��qr����S�0����/Rr(A�������*���� ����su���|��OQ�������#�>B��p$�'���X:���7!��+g�S������=Y����}�}���s.p ��H�r��fh~�5��1���<T#��������,���dB��c�B���f�������9���sK6��dR_��s�=!�6B+�538R�����|��V����^Sfmy��)�v���:%oKv X����|$=)!w��aLJ�����x���(���F��k��F����i�d�����kfRpT�s �.��nK���ry'$�9'�u�:G�um^�W��d;0a������m2��z��f�������5_�n��^�e�
m��W@�Smn�?��5��������{!�_�0��3!Z;�e#�3(�SJK�������@1� �`�VDr�6jLZ�(cR�-��e��/���2,�� �l�s�\�`fw��R)43 SA$i�VQ�3�������a"�2���x���m���*�PAF��� -�\���Y������^����ER�s�O�Uc�(5�!�=�b��{�f�}��Fw%�9�MC�,�Z�e%!�/�&2�LA�Q\��6��	KC��p��z�s@�(�%�C��WP>�����=u�2�:bm��s���[�}��2�3.C���Q�?F��1z�MHN��WE����W@����Pl�I��/�pm��aw�NHF�C�q8�m�K�I*�7��z���S�jt|MEla+����.�K����f>]c^�p�a�]]d����]�-G8g1h��RH��P�K�r�74&�Rd�1)�YC�W���P����@I��.�K��g���3��-/�h����h�-����]_�i[�Q���Ic[l�����;^���b�`�]F)�����}vu�����vt�5�,�N���C�����|��|��U���u�+�b���N��1���:��!�C�h;����b��+�'/V��s'1��>�YTh�����5^��c��n/���>#eS�G��]lK�]���}M]'��#B�#�#���\]�#x������Q� UYH�CUY;�
�F
0�P�������B>4��r�e#��nyX����x�k	���q�f^
���54�v�	S�Oa������U.E����V<��<�48�����������&z4��nPj�����7�<<����.s��uD
�q[��$���y���y�������`�X������9Z�Zlw��G%G��|y�.'��|���>.��|4��!�ajE\,�L#�W���������\q�L_�.��k�>(����|e�w��
�N��9������.���;�dY������s�/_;��(J3P�#]����:Qg�bt8��K��rt>HL�B��n3J|*
�E5XNCgG��s�Q��Su�K�f*!3e�A��&�fdW�!3gqB��K�L��T�8��{�h!fI�NT�\!:I�.��Q�I2n�p\+�!���:"���
�p%�5j���m�R�{�����
��M�(��7mG����h��;����P��Cn��VmXd��������yM"�Fi���L{�,Kj�Z��2�0Rv,�Ej�5E�y��9<���+��5�E]-\	J�
wP�����k�R6���l��i��Brr�L-���sG��%�1}���2�k`��
�Y^Ge�����n�i��qN���,4G(SS���@)��8���()B�b��`><����go�j�\��y�f-���'e�����.G\��R��N�p�l�2zC_��)E9�yul��`N�&�����if�E���������E�Z�qQw�hd���)��2EZZ����Q��w���f���8�J�^j4t�������{X5s�Fm�-Pp����t�o�b�,F��q��HH�,�b���O~���M���'v �j�%�U��N�{/|�k�R\.�(���|
��A���3B���^*ONi��8Gu,�w�!Gz+���
(`h~�V��?dX��A�����b���()����C[������O��a7e�(��s8���4cX��R���5��/m��HG�%C�������\,��%+��nB=�[��2?u�x/�s��G��%���u�z~Q������ 3zTQ�z���r��-�$��!M4
7����}0
�������en��}`����0�7|�Y�C]�Q�S60
h`��TB���R\���O���4X(����Ur�����c&q`I�gI��F|��O7-���q?� �����^��Qjd8f`Kd�������}�L^o���*=<S)������GJ0&���Y�����5^�A�G�_�����mK����.��4D=$���kT*������[�K��qc<������?�$���yD��������T#�lm6
��`�V�v��z�������Hj�����z�i�w3�d�C��>C�O=H����&^c�S$����FW=�6
-���|*+�}J9�2��;4�d�{�-�Y�d�1Z�3�y��c��d���~�CW�_��/
?Y��_05�A0l��%
�j��6���� ���"���K�i�����i�j���>��\��BH#�D�<=��O]���)o��)x�J��
����Rz�s:��0y8����g+LbYKW�>X@k!������V-�~��o�����L�94{g���yiY�������4:[#4�W�����}f�/����'�r�����LN1�Pi�5����#J`��e�+(���E����,��P�o6�,<#��
��o���g��g	a��
���F��3K��(��(�&�{����������'y�r���Y=H�a����K��r�t&�-6�R�����xy�����u��[���=_��]Z`v+l��{����� ���|]1�]�;��Y����m����4���A�����=b�c������e#K&�
��n����p� ��-�=�zr���������b���dFv;��C��^L����)��C=��?��-��*����-H�~F�%8��P�_5��y\@t��g��DI�����a6�v��x����_dJF����}�e$}}������������w��>�l-:q��~,O<,�-j�N�VtZ������?"�q�37�����.}��������T�����;�x~WZ���������?�?���+����K~���#?��O���S �O��=?���xj~
������s�������Q���@�^��gy
�T����@m�)PG}
�U��[}����s�Y~��_O��O�O���{~G{
����[{
���)�~��=���^�so�)�G
����[
���)������������S�s�x�=�k�.�o�)0�����9�3���,�)0�|
�1�s����6������?�����O��#O���O�����z�=���S`}_O��s=�i?�����w��O�=�S`�����S`�O��s?9>^?�<�?�~�j>]���{��oO�o?�=�I�<�)�<�i�<��<�Y�<����s�?��y����?���<9>f?�<�V?����������~���?�������S������~<~|������S���O�G����<9>�?�:�������p�|�������G����?��w<����?^���AqB��*�C����j
��&���tt�]B��Ut�<C�9`���`,���?�(\,��A�������R*Jc
e�bA��pP>j"��T�J��C���Pu��
��3 |p`�`�`a0a`� ����{���a�!����k�C��C�&�����
�	�����c��D�\�t�����������	|��!�HC	�	j���F���V&��5L7�8L:�;L=�>��>��m�Y���T������f����i�*OB���6L���n+f�}����	u���HAv-�Q����u�9M�������>c_��2
�c���}QI�LD7hZ:���f�^#�P��s*�N k �_��|�v�%)Y��!&.��tc�#;4����;��T���(�_��,��$�O:����E��jD_�T�e1s��p6^�B&���}����:j@p]_S���O�KD�<\6n<gh2����`]�k2���8T[M�J5���y)}���rr�2u���&v%�O�V�<I�fN�����Zl���t���W*S�;{3mrxP^�-�-�3������A(�&��m�1tZ`�p �v��^���Z�&���"}��������Zz	�l����U�������-PZ�c�X|,d�v�5#�7�[��E;q+�2~�����^g�C��rR��9o1��mS�pPa�����
����*���^w9�&fm���Sr�
$��7 ��<]���t6��Js���28���+���6�0e�D|��-��`qh�Z�-]�7���uI�e:����D�<�~���m�.�XVcmnD:J+���Z���+P���������t%lo7P7^/a8��h����O����������'��U#W���y�����z��<�����+$W��eF������#�Qf(�����x����B�x�0�x_��,�:Ht%����&K�6���<��\��/3�
���N�A�,�qm�}:.���e���i�m��`	����?�YX��l�B0���/����
�u���~w��.���s���Rw��P�Z����qy�G��r��^mC���x��e�b���������������Ea.@I�2�������fk1������ �F7��A���1�E�A8;�G��i���R��#�(�nzi�G�P����z����[��yM�����1���b!��I���T4}"�8b�h�DL����0I���kG��Ls��\������%:�O�@H���	���B�s9�t,�[`���4����9}����4E���'��O��-m�$��gk�����N.6�c~��J��y�/���DTL��Zn���^���O�NA��^|��a�g��m�l������u�.������������g��(�I�[��{]|��~��Le��4�sq��Z��������T�5�$�����(��YZ�[mK��p����m�����_e����NQ��hp���h�g�#9��	�p$_.+3�q��N����"lvl�^���Gx����@�_�It�	���e����g�tTi����yBm�3�o��r\���a~qm
�F.��:}#�'�HH����k
������5)f�]df,�����L>	c����D�`&yh}��{9���e:)�Xw�N �,�X/e���0��z
c��GF����1�A��o�� e�(�Ic}�����ZZ�kR�X�r����{3.���*h����y����y����Wh���X��q%��X;���������%l�zX|����0���F�V���5�����b�9�������8��NnSN�TJv6���I�����{�L���"�����������9/��9
��3��QI�,��4O/^��h�����XF����S����v(�\g�R�D�x`--�����v0C�u����s���E���2}����-S�>�����g�T��)�"8����e��qbrQZ<��m�8�?q>���/���W;���K8s;b����S��q�,�������{[��M�
�B�v�Z��
����G���=���:�,�~]4����,[�%��Sk� O����D��X�A���S�{1���o����@���O�	�L�h�
	o��l����<��q�blr6r�kb*g��-p�����������:)V!�j��,��S���������~���is����7;��h{*�Nq�r�`k��(��6�1?�m�9����%����������OO�e�x�LM�;(c-�����~r���eA��{PMnK���.��[�2x-���(a~'m9�m�.�'Z�u���xZ2����B.�l�O�r��(��2sHm�g�����%A���zn~�2-��N�������9�:o�lrjH�y�.�� !��
 �r�0�r����2���C�&����e���ht_��%�g=��S���`H�����'N���u����A�)�4�Xv�;��3�Is����@;�OZ��,�5�_����:�r�
~�����C��^�n�p>/�r���d���� �Sa��%���UtH����X��
$w���	��Q�nm�����@��I(�`u8���������zQ������X����1_�R+H�m�~����
��>HHU�����h�7f����&\m�B��?��=�����@�������*�4;��v���R��D��X-���=��Q�h5���i��� �]��u����P7���d��S6������lN��Z����[�]q�vg!�����H�+�E�L	�*h<������u�cqi6X��2N�m&r���d|A%��x�0���i�X|��}}*	���37��!.,�}�����N��eg�S �h�i(z���n�������,9����l�b>u8�S��iEY���3#qA{��������B2�6��!��tA3^��[W���'>9�`�
~�B[�0U;>��%��r|�&�^����<�p�jy������:3�{
h%}i+�����Q��W�J�.Vd�o"��E+W}�1)�)��t0�:|�h�U��P'��G�F���W[F����'t�����+�>���i�5!{E�qM�T;�M�3���4N�%��Y�;{����0��*m�;%�;[%��W���r4�$���.��&�r���C��d��m��D�f�i��f��j�cR������1${�=��c�H.�Da�^���j��We@R��s�7�k��h,Dh�65���3�\���L�,�:_����gQ�o������i5[��hR$��f�������m�\#��>3��Q,�.�32�b�h"�3���wP��}�xi�-��]28�)Z�6w�0���A�ZN�H"{Y/�z������qv���w�g%~����8�66hp�
������K�kr��,���������O��������N���/�
&����`�D�������z
����.����������B��X�DZ��>�����V�4�Y��,'����>�/�#����^�\&�ULi8�>����f:u��$?���+��xM��-�d{���p|��e1]b�,kY��,���OM�F�	���0E.�Q��lekj���&�0�-:�S���	k��O#�C~|��| �1_Z".�',���2���f'�oS�5���N��l��s���7�c)��V�����?���\���
M�����!d���"O�_V�j!�
B�EK�eN�h��E!j5�0���=����"XK�o8���=��9���$�p�_7YyN����"nX�G���/������|��\���:���~>�D�P�)T����i�U.�P'��GXd�b������Y��B�l�S���p��X=���:G�v"�a|qKt����@�#X����[2�����.h���F>�e�O�/()�,���4����/HGs����h�]��S-&��]:G����cp���B�d1�_u��(�K���R�k�GUY�g�e~���l�P�4	�S�J��l�Q�7�B��N�e���h{s{��V��M���-/�m��K`�h����������5jZ��
������y!�\x��������,���;����s�<"��d��%�fJ�8�H+�����i�N�����^4���-�iy��E�kma����_�����m�kf�i\��QS���<�����>P x��%�l�k��BR��|b!#������a�n�Zq{�����6��D��e��O�h�<��M�a�t�
hR�#�P���0}Y!_��=�@������U
_e��:���S	�kU�G`L�|��X���{����W��6R��Y����
A�m�����>��sh���`��
�?��6q�����6+
T�j��,6�Bo�Y��cu����bmfXx��N��E��U�m������^m=y�����E��wF5I<	���rI���u.��[�J����-/��A�X/���
�=���$�m,��,������K��@�w���]�U�uZ�A|p(���u!�/�[��3��r��GI�-U%C-|�:4S
=]�3��^���}i���\q�[������;�B��j���c�]��^�jg,zi-�GPy;����>t�m���y��Vr,�
�T�{�x�c���4Y�y���k��xf����$��	/L�m�C����-n��i���jC_Lq/�/Z_�4���)<{FL1%f/�M�y��,�P�3{�����VC�w�,/\�������^0�����g���s<nxC�����"�E�t��w{�{��EA'���rz������_�n����l>�rY������f�h{�:;���@k�F���d��L���e��lX
b���8��2�2L�7�l������h���"�������&i��4��}<����&I���
������[���^�4�$8�>����5��=�Y�gg�Bs)7"En�4�l�g�x1%���U��o�KUA;�+����������m���]���E�iS�-[[��G����	������gn�$��b�o/h�V�w3fw�q�+����h�����Q���38�bL[n6v��<���i�H�F�[C�mi�O��]}0v����r^�Z��1�]1�
^>o2��vrp�*�84��s������"5�F�Xy���f�������$�V�h�����v���]�b���F��fG��|�k�R5V4N�d}G���p���m�����l��,���b����>�GZC�a�wu�N���E�bJ�h�M,7��wY��������$
{��lC%`��&��F;���������e�a��q3�;��0�� Y�EjM��D���������m����������$/�����TU������i�j[s�Q�(�/	�t�&�<��Oks��=x�kh
��^�5�,}��,
��7��X�|�PsO��]�&7E�������fW���nNL�C��`�P+'�E*
��kt4��zt<������^�=���*R����y��Y��[w�R}��xDjNo����>y���������`>}�����
�Fjo�f:�9"R�������@ucJj�=5�6�(3�e
�k_������P�O�9-��Dy��2I��%����z+_T�(����;�����"eM{U��0a�ZY���|�Iv�<�`9���|�4M�������.�BM5�xO��7���R�{i2<���:>GSV
��3��'-WsP��T*�T;�>����<]o�waC�M�-R;���3�Q3Q��jFpjPTQ����[�Z5^T.���Y����SR��-}F���X�sWz�yC�+��L*�R�����}��\���T�����4C�wjq�i�Bc[�9�������Qs�$�}��K�J�7.�i���'s�j�����)��W���������J��H�	����U��
k���k�t�]%�I���J���Al��Z)��"�����2MT�rh�[�VL�q�d��5�q�E�����3��I��n�$gW���7�y7=��vl�E������rC���O�_@9���2�C�lv$r�1�WQ��b@�qe���T���I��E�9V�w1e(���;|��.q�_����Pc{K����������>�������'�#�w^#�wH����"(��g�{�1���;���4�#��j�R5���6}����+I�;���y���F*����M>�]���Kq�VQ�����a����(I-a�����z���NR�|�_�c^nWz�yC��g?�(]����^v���/����|o���.��@����|��������w�	�1������������Q�����-m�8.N�H�x�;�r�|���3�y�X�]�5�k�}m����r�x�����*4���}����/P9x��V��7��X��w�=��v�MX9�6b&�#��o�Ue��9������r�S[%g�������R�I�tumx�
�"u�U~�k�<�~M.�����x���E9��X9_���Z9�'�J����a�|{H�;��9���9O�7��Z9g_4�J����Xv��|�b��r��t9���5��W�y���9���s��%�A^��'}!�o_+[�q�|u�T�(��a�|G��+�<���{������c4�8
������|��(�y.�"u��gK�����T��p��@���#U���T�R�\��_T����bV*Uo�j���C�Fbp����q7�J�[���;_j��Q��9����Q{S��������r�=�G2K����K�{����a������)U��Y��.����V&aC+���O�.  ��O�|�7�j^��]�v�zgL�����7&_>��GY8����^�6T��5LW�������H����i�x��_Tr�������^�NN^�4�#*��	j�o)��`�m�����d���BjZ������}A�:x���U)����A����)��-�W�
�h��P_4rM��.>�.M^����[�<dJGG��s���G/�"f�,7����V�-]�0A:J-R����n �<"C�fgw�i�U|�~�t�i�]�?�W4�����{\�/���M;]�T~!��}��V����Vv?m*'&/�8��;�F�T8}�����J^vD�s�����������T�W;�
�J��#������Q��|zU>������������Th�����z��^�c�D�a^�,������Z������s3�9Z����.�<X
�~��9k�&�'VN�=V�������E��#���7�������=H���C2\�_����W��pS� ���
d�����s���r��/���u�k�E����7L������l�$)��`;����u�����-�6��?/�������U�@�z�D��v
.�	�t����<�8��`���m�%
;��!<�P�7������c��� �@�l��f����������s�>��u��3�
su������.�e=�*g�"���Y:b.�����s�#�!���8��s�g���������h�m�m;�l<5�"������W�P��^�7fP��OVV#�z	<�t��v�WO���e�n����� ��s�4�c9�}vJ��V�����o�����C�j���|�0G���	>�m:����~um
�C����B�T���E��b�7���������dR��k���pj[��lkQ7�x.���u�xn�c!<�9y��VY���Z��N:5�H%���pl���(H�xB��l���A���t�������vH|�Ek�d�B������e� &����+��;�ZH������X$?����CE��u���C��[V�������2���]U|sf��G��] x��H@����x��_��T�T�P�a`�:v�����&�����Z���@U�5������&�}��*��m��v$���v�It�����`qnw���*�3v��z�H]TFP���T��dF��
����#���\g�I��k ���/�`k���/�j��p�Q��>B��y'��[��PQmQ������VW��:�������s���<YWGid���0[&/D-�^��������iVvE��uW���7��*������W_�v��w�'M�<e�xW.'>������E�����M��i����2V�<�D*��H��	����LD���r�Dq��P�x��s�Ca������!�J~
Y����&������Vjfa��9��y�j{��~M���A���o��Z�*1�f�o�qJ�X[a�5u_OtQi��1�����<qG��H�v���?�,u_�0<hXI~i8-�h���
1��t1)���
q�_TW;��v������x��W;��v�P\������������P`�����S��*��g��gY��39i\�}M��p;�.����SV�	(8eE�j�V���b,���w�{��������k�i���*J�C��Z��0pSc�<i>9�w�hLc����
�$������vt!�)G�x�Ip���R�T�+7O-�OS3ZC]3E^;�^W��l)�z�xU���r~�ZFO.��.�Z���Eu^;�1�2��.5r3����������G^���x�(�Hu^;�M�;�	g�=�3��q��������j�=R�%��1]��� �U�������qh���9�/�S�4%�Fq�IM�[�o?������v���4���3p8���c�^"��~(��B�q�M��WC��(�Hu���L��r����F]�pL��/�tk�[u,��H��VO*;�u��c��]=,�����Zn].�
�m�����3R9U���CG�G����
m�����c�s�:��������^����|��/T����� �x�������E8���&-��J������
���I�������U3���T��Gs��>�Z�D({�
��uDa�$����x~�����K���>�Ux.O�%�|���$/+��I|�~Q�oje��e���z���5Q��T��z}Ig��M2��d���5����A�J�Dj�oj)�3����y��>c�>��Z�ay�V^jQ��f�8�x'���z�j;cC(�����)%j���5gI���CY��fiCe�g����K�GM�nsR5m�O��6�r��Y�(��o��!�9����������tn���F�T��>r8e�����8}����75��^�m�=�K��$�q^v��A�NH��p�A���l'zT^���ey1b�[�Mu��i�j����9���5u���(X�� ���i f���:�����P2�x��l�N���������ZS���Up8�6�(����"P��^�P��[S����3<�`��Ap���[���M�Ap�ou�mC���5�Ex�`����W��q[��l��VC/�xu�y��|���7���+����Z>_��k�	Q[M�~�pT��Xf��T�i%S��������C({k���Bp���<�
p�����H����"�\�<�y���2���p M:��[�A^2�C��h����C+�U������vb
%t��������~���9t�6XN!;�
�
���r�]'l��[��@3F����nA�@>�|zL�R���2��_����}�HA6EK�B�C*��V�P��OP/*6;�Z
�Be1�/������C�X?�mD�x����5.����D�K��.�w������Q����-����rX����:�����r�-������u:�5�
ey��0���Tp�,�,K��A�$T�u�#���2R���"�"nllvf/��]�H��q�G�+j�� �i������k}�a�B4Q�=����Sm�W���Qd�FN������PQ�v���3&�!���@���$@�"�qUK��L������j@o�4��w��G/�����8V����G�����������(��"��+�����9�u�{��ea�>�I�Y����0y����$x��j4���y���o�WxbK>+��&��G�����`�^�
X�@�k�3N�_f:9f����y���N��#,�����)��w����w�gx44;�!v(�5����� &���.h|�Epe���V�i�k�t]��i=��:mf��WWn<~a!A�x�(���v�
�}c+C=|�Snn}q�vFZB��L}�����Y�5k���Nj�����K:��A�+��Z7�"a@���}�,_H�����I���\k��6���n�`n��m�Dtic���]�2G�neJ���R
�T�7��:����9��3n��R:�v��Z�U��4�����D=���I�Y�	Qkm����h=���
`��Y�!�J���Qb�	8�%	@�{���*���^�r�:C�K%�vmy��Y���P��\)���4�N����/�2�g�v�M����]��k�`/��!�"��������!���Du�"�>
_����H���"���oI��m�=�#��w���~K��������3����r���������V>��)�W~
�o�)����@���O�O���{
�V���(��e������<���(?�S�����>j�O�:�S����%F�^�W?�����iu��|���S�}k�����)�~��=���^�so�)�G
����[
���)������������S��8�����q�0�����>�����������J�O�9��he����6���(?��>Ey8�xZ�x�~
�����m=��u>Z�������w����}����)��~
�o�)������������C���F}:����������4?��Ot�?I�������5������.<:r>z$��>�~~�<�O���������#~��>~<~�C�����|����S���O�G����<9>�?�~�r����)�T����������V=�=��{��������������������.<?�q#
�Tf�!|���5��B�\k:��.�{�*�M�O��u���`,���?���UW�|
"5�B����C
A���@iL��LT,(�GM�Z��B]��Pc�4����!���L��	����
KQW]�����0�0f(`4h@`L`X`d��cf�>�Yrs�3��f�f�&�����#
%�&�SVY\_bZe�h3�0�4�0�0�0�0��l:����l�3�@�o�����wI�W��,�4���hY
%�C��n�_��n����>(����X�!������\�����}[mwG~|��@G�i����{�������������;P����E]�������`!��C���B�������`Y�&�[xpF�����]@�����&P���F���u�G
�^��������
�UE�����i���`i�J���N��$�'���Yje�>���:>x�8}w>���e�6c�8S*�3���cDjbM[]�P�������p@�*��gL6j8�O�����h���f|>]���z�pkn����6[��)B�qj���c��y�3utC����e��u���j��LIv���\��OWNY<'�����mbx;����R�"��A��6(�\�E#Wd ��~_L�1�;3O��F
���H��8o0��=u�|��dX��8,u�[H��T2e�H�+[��d�2�mvv3��S�6��u��@��!���/�}9��T ;qvqC�3��r��h�8�����z�Z���T����</����d�H-j3�/�Sf^��PF�jx5���k�����4��V�<�J5����F^%�r���9CK�R���2���p����]�������xm�]�e�l������t/��x�n8O�.�Vz�E�/j�e�����gx��5g����m���o~|��(�,��#�����[�3C_v�E��L���.�r�{r��dq���t[����	5���Y�����.wR�XF?R�q�k~9���Eu��5�������T�����".a�W�����^`C�_YQ*�"�����s�_m^��C N�=R�~�������;�����"��0s��RQ6uwD����Z�������
=�MC)���'����@G[z���J7�=0���}=�83��z�qN�=��$��5]b���i�A�UCl�x���NS�@]s�t���.�?�Bl��Up��#��.��<�Ib#���l���Zp��9�\����z���(�oN��j[���Bl�?(b�;�f�Q��B�,^�}(�m8�#����.��s�b�]�������;	���i��0�]�k��2���"�b�N�����.D���d6�B\Cb���G��R���-���q��#v���3"Ye�����Ny0B�b�&r��]����P�9	����_��*��Dx�s�6�.��n�yw���]�mU�-x
���g�_jvd��w�>��x|i������3���W�}j'��;W_��Z��#cM�+��^�3"�6�,!�V��$�/j�u����\b��x���n��"-R'#�c��x����j=U ����i���alW�,wa���]n���n���h���r��2�f���HE�jL9�B��sd+
llT���qj����hm�)�xS�K8x��7'��|���bn�U���L���r
>�)���A���"u�w���G�|��u��)�m�)'��2s���)�$��w���<����@}}�r7M9/])����r
����c�34�X��[*\-_}q�x�����'�9�n���3�����H8�G����
���:��[Z0;���.>W���b��Z~SV���������#�9#@��uEj�9���+OP3/-^��x�$��v#g�9�5�������	�R��7����G�I���)�M�A����p�N�.����u�[�h�������(t��E�PWW��������j��f�\�[Wx�6�W'���<�������])L�|e�@��)�����9�X�Kn?���@R���3R�����`��_uh]��SX[�����"^����Cy��@��������u�����
-+���#�������G��u�%i�e�e��Q���Q�?o�q\���{.N��W����K#
��N�(1a��?VMjd�H�\�(��U�F}S�����mFq�6��O�j��tE���G8���=
�yU�w^N�,��/��+�F�i�sv�nl�UWW���]�j���:����q��Q��)��v�����6��|Gce�, k^���D%�y�u��������S��c;�>��R����h�o���������(������O��nG��gDqJ��O�{��EX8l��Je�����cWZ�j��rg�W�V8l��lCM�ZPS���uq�|�9�vl��7�X�Ke�US�axG������i���Y����*��M�FN�������!l��5J�'k"oq}=�����6�*D��G��������\���78�3�B9������n��u��^��c����dZ8����xV��zue}F���cC(]T�j�+����=��f��J���.��|����W.�*GkAe��A�YC�����:)j����F�]���i����\3��
E����Mvb��I`Z�U�0��6���V"�e1���2W��=�� �}�[���y��#��Y*D���R�@mCf��ljW��Z9K���.�Xs�|����Z�fR�]f>���V�_�Y��9��/�����"��u�&�����z�Jk2�R4��dD07^�K)��E����1�Y-���9��ZL���r���RKy�=S��Y���}�<3����m��c^;�Q��Xsu����G�:^�@}Q<K|.�Lo�Z����Y�e�X�����V5a��3T��g>�ww��ZB�����@��Nmx�{0��3P��������z{S��e}!���E������T�`������2jq����=[z	����5j^B�S����e��5�s������|�j
_��-R�|��)�y��_bj��|}������f���k���1�Zv���k?q/���)>�@P?�w�����RiG|������s�q�w���1ml��1���b�(*��JQ����@\n�;����3=�;�~&�+HG�G*"Av{�$f:14�����Hmd�<����
k�s�O�����v��}����\6���|^�zg2�9��[9[�J�|��Qs����z�w�wFXC��w�]�X4r���G����C����e�S���&����}�u�s�WE���[c������R�j�����g��w�/���^���gR���3?�T-��TK�bQZ]~�cWp���z��2o��N�p�m�e����0�)�[�kz|��l���-�{r�����VJ���A�s�!�
��EI���%�e2��%~������R��I��2>n��^��-��:�(�����6LZ���s�(��{s���(~-�%P��"$l�fJFI&��c�4M���x��m�=-\��9�]����/s�u�.����q����J#Z���nA�EO�`U��V���=�ma9��W�=l����Ec���s$�T��� k��H�����]k���^�)�IO�
���X����h}�1�;�t���`�$�ub��H����pmB�S�hF��������j�-�5K������HA�|�6�d�z���5C#�8Z����a�O�x�������gtd�Z���� /�!�jfD^'��Z&�b�/R�h������Rr,��F��I�����q�,����=�2o�L���n2?��f)G�M����l1���8D�~o]����D-1�}K�NB���A%�%+1��s=7C}Mqd���~"y<��5z�.������[�6i�Om��~�0c���{x�X2i���~+���NKgS���P������8x����i��-���j����j��4����w�(f��
���"��_���A��BA�� =9&��S��S��+����y��g��W�*K@es�����%��9��X����;�MEJ1�����"�L:��j��k���3+��>���yAZ��O�R�	�������_��h��ry:mo�P���-��i�@��4�)������m�
��Ey����
jo��p�P��-J�����d��5t>M'�s+-J�|CKqA$�r�0�����5�Z���
p O<�+&J�M.o�,oV�S@��MS�]��p��5?���S	����#Z�P	��h7��ji��f5V�e
�H���|eAD�:`2�%�5�XVxY��-!����6�l��,K�h�U(���k�"�*`%-3�h9���r~�z`�=-��j����Q���XM�_��yE_W�y���+U���e�sy�k��)����q�j�q�'0U��-{����d9�K���D�[����+l�r����������,�V�u!8�<��m��1��?!"�Z�����Z,�Q}���58EK�U_M���i�u�H��b��Q�z��u�~��yiv��<+�^>wbpJ|�Wn���@��4Kf���w%��3��$N��,S��7aZ1?��H7<3����C���36�������jxl�)��F9{���w��T��@s��:GJ���j+�>0
�HAk���u�i�jK,s�4�-(,,"��r�
E9!�;g���|�-W��kxg���S��4���G���b�18����(g�[a�^���k�Y�rg�Ka�G5^��(;R�M�����`KW���t;7,�p��
�S������0������?,;���������%8�L���a"!���m�pk
���T����8��9G�
R�^-����K��Qs&��AB�t~��{w^m[������Q �D-�H-F�1��d��m��;�����7����1��8�@��YJ�?��DL�|�=��|���_��
Dd�E�,p��cLE������;Q��T�M"��������y�����k�_�K1U�� g#��&����.��*��0EH<_	_4Hd�v�b���d����]����������S�
O}V"��s�xQ���Me�.]g�����<���8$��#6�n��8g�8��#��������,�
�01|�M���d�0�v���p[���})u^��8�rF��w8����Clf���/��0��`�6�bi����7W������$l��/-�����8�q��]ew�+����k�ia]����2������_M��I�G�g�U����i��������)S�G�c\���#�WS�nP�����Ijy��'�	i���,[c��
���S�5�J��l�r4�4� ���8Z!���"+�9y5�/q^1\��6�1@����S�-��)��6�@������$z��M�[���[gY�yE�D��@�o��[~��d���*�@���H���<��<����y<H�pqh�-���m!-i����H+n�;��)8a��h
I�p�����i-��;l%�^)E}������F���#m��y!w��5;�L��L�I[%H�%�6��$O��4�Pr3K����037�,"���)�(���E����a�M��5�{1�$u�v�������5;;MZ�o�}���|��L��Y�����e��#�-��^e���w��N���
t��2?����j��:hc��S�b���t;�R�Mx
�O�P���[�u��];:g�_�����:�E�Ka�����9�������h��w����7�R~�y}��9�I�. ���i�k����u{�.?�L�u(yR`�����G	<5���)l���f,��'s��~�?���0�����0�l��K'4��S!ch�����AT�9�����O�C��o�/b�j�]w5aY/W���	�L����5�;.)�zT�v��Mu��B���}�V������b���`�P�V\\X�����7��.��2�����V2�-�I.K��c���G������Z"-�4�5K
��k
cov�L`�@JF�;������h�q�`xN�i)���.;���^{g��������:Xk`=mQ��s�v;��	��H-���6��;gsL@y��*��d��	(n�1wg����#�f��4�IZ����w����G���k������H���7�R{�\��D�
�$�;�L����@��X�;(o���T��z�sB�K�������Tn�1�:\~U���~'�<��3�A�	(�r�&6&�<�����������-=�O@��f�<�����j��	(N����wb5��Z����	(��"�B4s�������l�x@XD��ypvu�."/�/Z�\-�:�
�+R�����a�GXDz�I��"2��"2OYy��"2O�����tx�y�s!."��<o���6d=��\��;����!hq�lZ=�l�@�"���#�"�O��h3,"�K��<�"2��"2O.�l���"2��
 �hc�rC��#��Ed�����S��<�"2O:O�3,"Og�"�E�����:`������H*����n5�."�7�,"��?�v�\���%�2��n&�"2Z������
Z���8F�om�.U�"��Z!
�i�]��:0Q:���*��T�a8&����,�0N;��T����R��H�vvZ��5h�I&
����������Jr��P[���`	����[a�E���z1e)�V�4��-�\���;��^h'�������z��o��O�j|#q����j�w�_���>d�`�|��U�������\-A}J�aQ��`OX'���K���0��n}����&��^'���������Y���2<�v���o~��zuI���-���M+lK���X�t�;t\~;�Z}
9���v�I��Q�����&�*�}���u%��< :�z���hUo�s��Oiun����7�����:��*��U6��1�J��C;��8@Z��Wi��m3�����c[�n\�l�g�}@����#���]ec5���m�{#��7=���l�]���i����/=k�R��-r:���XeC���v5�*��RpH��_��)ra�A��x���;w��V���V�����k@`<���x��� v�U.�_���d�_o%<��p���%!��5<�|���}s����,�����i����J���!��o�_����	i��M1m���~�o�_�vb^���o�O��x������S���R?��O���U,�����e#��
���>��#dh�^�l|�m��_�;c�9zjg
L��-�:����,i�1"%��7�smYO���!����?;
�V&��������P8&��L!�m*���l��+[\�s���Z���e��x���:�=H���u�S� �m����KlC�������=Q��=8[��:_�l����-db�����t�����6>��gN�5�8�� ��hQ��������Pf
��s]"���(J������u�av���+��	v�s#�������������;�����o�N���|��"��~�o��X����zp��6G��1��5.Y\"�Z���:s���� �@C�����("~|��:W/�P����*����*�M���n��-2��f���?<o�����S	x�e2:�&�^�9-�@s�^�o�"�����d�EaRFl&���U7��4!��f�}����Adm^a6�����J���������i���N�Ar���.u�@�3����Rvk���4e�F�����#~��6;���&0�S@mL���<CQ�/��4�*�r�^��N>O�M/��Q)�|���2����?�0Ms/�{2���9!��������HMB?���%8�v���i4��q�Q��t��6|boQ;�������]@��]'���w����r�.DV����4�s��a����|!	8��_h��;��O
)�LI���-)�<g�h�6��d���l=�u�~�F�`V5S������@��Es/�:�_�6�9�e�m9��#��S����%��	�vl�8ak��]��%�)��)?�����v�\���I#A�q��4
u�h
.��8�� ",g���`�=��� x3h���!+�^�>"���_X3i��$�c[��EXE��z�,�<22Z�A�z�<�u�'V��8,����NL�v�A{�v����m5�2���BG�J�&]�|�|)��{p�C�$H�4�2
���
M�@��
%h
�j\�������]�J�`�]�����><�����j�ZS�@��7�����Tx*�aQu�"
�!@��g�8�������4X'���<��e�C_��g�Es��Q��1"�1�8igT�����.���i�T�I��OL����\�x�l�*hSlF~����M3l��cruJ���<bN��|�"�M�`���z19���)�T0{55����|L�&�-�OKO,����CKk<$O�v@p��O-����K���K����2�s8O}�i�SA���C/M�M�������I���eBVKG�z=�/�s�w�E'	��G1h�����k����	r����G����n�nV�e�"���Z���Z-�Dm�qI�>[
�u���L�F�P��M��O�5��A�k��St�'����^������\f��3���Vv��v���bk�u��L ���VA�j\p����s3@��h��l��>����"����B��z�"����_<�=�t]�p`4�n�_�����;����v��rxt8�i��z���8qS��S��w@9�cm���X'� 
���K�_������t�l�F�� ���e�a���Rh��j�}�Rz�\�b�6z���r~*}���r��aw����\�JZ������v�*x�X�`�Xn�W�+���4]�
��)Q}���F��D�<%{���n���3��h�U'z���M�"�;��#������i�h�b��_5���>`���B�-QW�$��%���*���%���Sd�zF~BC)2�D���P�H���k:�����>�J���'R���frU��a�MC��~���-���	�#*i�!�{�}1���%y@�%�_!p��|���2�2��^(�Z�o�,LZ��k0���u�L&�6XP������}��`x�6[�hZ�f��Q}��`Z��eA�f���������B\#���Ru����*��k=|0�K�����Hd*P�b�u�_�}�0K���@2�g4E�d���dTCb�����>"�A���*���Jf�>\���6��!�x������QQ��y�E�-G�!h"�K��]��6,,�������s5�n
��.���S��������8��T�(�����j�W�S.X���~]��$�<���Qc��Zy�c����� OG�T�3��u�wl�
���9�Cuk����Q��c�����3�#��r�1�`:b�v�0��(e���(Z�N+R`�PF-�&ZX��x
J��d�[����[������q�Z�����(�R�$�s,�<�3�a��p�c�4#������@&���������h��m7"4h]J�������������M�={X�i�����<KH���M(]*7�������l%�2�U�P|���?j�`$������:jS$��6BY��A9S���i�h��>eTw:h*���h0�W�>$�����#����Zq���lE6���l��d���4�.x��'"�+���	������S�,��$�-���[����
��Qi1qw���N�n!����>1��G�cO�?���A&B1L�����UG��8zs����M���wa Z���M�y�y#R�yD���:�]T��"���Z>�o������\�T�w+�'��le��u��}��
��d�1�I)CjP��J�W�>In
�8e����~9m�Rno���}���{�s����[���*���pR�o}�d��]X�����'�����O`��`e�
2�V���2C�c�i��aZ�m���bZhf��et:�����'�������%uj(����&��l����C��,�U$��hIt�
���{I	z���R��F<&�8���*o�0�����R�7���T���I�-
��}�K\�o�-P��`s"mi5�7[&�:�[x�����R^q���]��)M��e�`�����l���������b��ei���b.��O��
J+�26�o����S�s��M
��Q'���C�����n��P���K�eS�����
L-)2�#�:���^��q���������^X����.���7��e�����r%���m+�Cb�S��e����x�(w2eLcu��<�T�C3kl�g�M��gt�C���2cz���)��s���j�IPj�|��6���&�� <��|�����?j�'�������{�������+����r~[j�w�q~WZ��[�v~���g���WN�<�K>��vy�g�S �|
�o��?�)��S��|
�����r�/����*�������G9��r
�TO�Z�)P[=���@]����y��������������8U���;���m�S�}k�@��N�����������|o����}�S���@��O�����!��i�)pj>������q�0��S`����9N���)0�<f�����k���<���<?�����S�p�8�>N���:����u
��X?�y�N�<��>����O�=�)��>��}
���?�)p��8�>C������S��������N�o?�����S�{�~
|o�O����)�}}���}?����.�GJ�BC���krq�����p3�?�?�������K�?��������)p��8"b�����!��������y��:��n)�j��3<����������4��w
�:]8?���Q�2�/���?�)l���J�����j�M�!���{!`���$������`�0\:#�T�C�a?�>T (����!��A�(�KQ�+Eb��xC�!�2>�������I�	����%����4�C�%�(�+��LcLiNoLuL{��(QPT P&P,P2P8P>��>�Z2u�5��&�j�*�p�C�#%�&�(S(V*Y(\(_(bje�hQ�P�T�P�P�P�P�0b>�tmG3��7�?��P��g;����6Ra#x�?iN��u�@�����������3��7������Y����Z��v��/g*�r.+�K��w����2
�C�����\a�����%d��6>���Jl�4,Y��Sn�Fh%K���vtaFD��Zm�v/@/~D>d}����*������F�J���J��R-�����hZ��7�u8�/�#Qc"�ky��mZ%�fK��HkR�b��gM���Cv�����w-!-"�%��(�9�������@��J��3-B���g[9���������K(ik�r�C�B�Xl�}
��{��m�= ���HM�R��i�?��
�o���E���������49�,��YP������(&L���KC���p�_����J�V.�{}���^|T���4K��?J.z�0\�&*����\�>�����0"T�h�&�1�w�Z�&!�U��^��A���1��R�s2%%y� 3�����Cp�,�����8:�jY-}o�P_(U�3�����Ee�����L����l���E���A_������%� HVn����-�Y8��
�IZd/������m�I$�\)��D�8�b�,��"�����*3�VY�@���%Q+�gh��"Z�<�_h����-���M.����$Aj���r�d�&���������������W(����
KV-u2�6�7��J��CK��|z�e�-�=��CUE�<"���`C����
K��{��twj�Rg�u�%�i�/_Rg"��L�����TC����u���#�X]�i�E-��gOA�-mu�����Ql�ch�s�-�Zm�rK:�f`=�m8�������/u�h�z������'� ��`�����j��b���s�����z��lR���A��;�
��:�6m'���X
}��BR�h�Cf]�!��b���)���1_�k
c������U[&�j���r�t��mZ�h��RM7���?b�[�RKx�n
 ?l�.l���-4��ja�H�(mge�p��L������x�
lb�u��Y�&�Q�������e��<��C��Gk���iP��A��)���i�m�BJ�T�v��T�a)6dS�%�o�W�a��� b��l)��(��m��t��(ED�
5�W�o�6���7
ED^S�q�ox��4#�%Kc�
x���^nj.�.���R�m-'��>��������W(/��r�vA�NqD�}���5k��GC��n������p����%E%�hRIWm��cl�eG��/�����.[5��]W����i���o_U���h�;W���L�+ML���v�Z�Q{	j�=y<m�;���
9����I�?��,��f d�a�/�%������(O�N�=�����t5%��4���9���\�����i��![b:s����HA6�[��0|b�)�� �t/>D��R2)�t��T���D$K��9������x��i��HA��t�l
{�vN�e�=I7����t���-jS�����@��R�=SW������(EDkL�#���R����`$����\@�8|q2����v�	�S�.9:��������&��@r�l��r*pCY�n�.\rsa�z�}�J�����hO�m��m�����l��]W���������p��V�W�|x�rr��T�0o���W�Vga��Mi����	��c��i}��Z��3�X�����x�T�9
����!����������1�����.]O�*
g�-8f�!Z�=bP��|)��p�tv�g�������6��d����O���LY�������S����a
�<���!� }�{H|��M���P4r�e�0���w�C�P�Q�
U#���O��-e�#-?����{$��S���{��`�[W�qy���|�?K�s���?N�.7�]R���:fHqn����q�@��=���<������Iv
�r?������d��maT���V��S��E�\\��r�A�����X�	�=>@�C�s_[��d[>���[[u�XZ;���dI�a�����"f\v����D��3���4~8�vR�%u�aAw'�L�s`8g��N{��H��W��~��v�B������h/����/����h�����n���\�i�����/1�?������:d8������ �AP��uD���h+��[��,R��d�ES��3������R%��QYs��� ���H5�U!����Y���3���^jz�&���%��������O�����Q�ZUD��G��o���3Z��;���,m��Rs��C������Pv,u�{����PRs���T���?)�ow�2���aA(����p=�{A��?=.����������/nTf�4
5/��J+f��5n�)�T����C�*~���tM/Co���&�O_U��8�6�D�}L��
f��Q�V�6���T"�ee(��U]Q9r(�F^q��9��9��"�T��u1�W�UmC�"[��]���Y"uQ���|�\����
E��-�����a���(b��@�Nf����L.+U�<R�v�h1X]g��� ���BM�=T�+�����;*�&�z�{W��l��u��=WE�K�Z���f�fE���fv��g^��/	���$�3e��5g[Ds1a���SG��h���)���+�����,@/���uElUS]Xs|���f��vp@;�T�(�2����h��v��6Z�gU�Q��J�Z^j��-����+w�{���w�8�������B�v��P����N��vD�*��,��JH�aK���������i�������k��m�h��%"'[�����)����/1��{��d��������|�iR���$�}�(T� 2�'��<��T1�')\.��v���#9���s�
��+��n�
ul��,i>���
v��*������q 3��� ����W�h���"J~�����~�
�����j,E���v']�Uc?�WT�#���|9i�6�C���CmYIn��],��3�b.���m���f�\��bg��vt�f�~�F�f����,���E�����1�=�9�i(��S��<��
������*L���
p�dh%��.�8
��1���/�y���O�"2���-�`q�%(��q!|�D��-���5���%�W����Pj�({���}���_��46[y�����A��|ou(B���k�������xD��x�!�x��:@���)b���Q
��Rk��;������>#�/U����S���*��_ei��K�����|�"_b�	�����s#i�289�J
��L���-
5�k1�\(����R���)Kc�����2���gU��%k�����@�*��o)[�y��z%s��?s����-6�$M����W�L}I.�W`4��4L��NF�=(������5R�����{���Y�A�_q_�`�=5��@e<?���j��`���uK��G2Ps��VwI/�-��������85��CO��%^��?x��<<u������*�D���7����2�`��{o�4|��s��~@�bsIj./����Y�H����e�~X���*5�e��5�{�5^R����b�R[��:��VR�����Eg%`�xl�*�9���{��������8X��2!S�*�^|�OC�����u���]��t���J�T�!��\5���=�8�Q,��.P����U{��w�aR�R��Z|������\���|�=j�#��$�h�� ��6*Lv�U�O�gA���Y�,���\z�����H�[[���>�;*�TP��#�<�U*
%��Q3��G�u�(�m����������k�}�O���^�hS�O����D�M��#�kikC�$c�5Szm9�$��BBLk��f��:P�MFIL���PM/�����,.zD���Km����EgLx�^j�65�*������������H��*es�^m��������1#�dI��@1*`Mb��vls�v��A'�A_����J�|�Z�<rJ5�L�
���h�z&x�����?��A����?�����Cn
��PnJ8�#Gs	��L��l���zqMY[:�T���W�&<����6?�>|q�/�-��4"�[������6�b�74''��2�N�k��?9��:���a����b��p�F�V���r��T�<�����u�y��RQ�W�x'�R�Gj�u/�v
xuo�����n��"������5���;6_���4U�������-�}8)�6�#!9�Q��=���#��1�
�k�bD�y[��m��y��`)���{��'t���VZ���M�6>8������I�7rR���\
'����n�#S(R�\@�C�A�8���l��-���e��p������1��19���=�TZs�d/���nrY�z�����aJp2W'�
�
7B�r��Kl%7~�l_���7���_�@� M��q�2�r�I�
�.B��#E�^�����B���,sG����R�����{���*��6�k�@W&��Y�U�J���LF)#
O\j�V���PE>���)�pt���U��:��j�bmX�������"� �T�-r�"*7�
Dj}�������9�T��p�����O���mm���k�b;��#Gj[���4�9"R�C%��P�|�����e����U�~9�U���l`��Zs�jN��������U
�a$�p��yW�����GY[�9K��\^��[���Q�g�>m��}����T�FQ��4G���U�V&�X��;����f��W�m��L|�2����|�������%G >[�
�������-Z�J�?X��2i�o �N��c#S�R���i�P�-+�mwa���b}���g�wl�6��.�H�s�eq(kV���U�{3t�
v����upA]K5�E{��T�D����fq'��h4��@E������x�^6_��:�<?P�I�K��F��C^!k��I�mjk�8�a��k��3���lpj+�����Z9�oY���q'?&��N&I&R��X����n���<�z�r�i�(+������)N}|^�����dU*�D�3MFi����U�Qi(�c��	4�I�~tL��}g��KM��H:eU�������f�����G�&w=�$�����;�k���k����E��u�������������-��g�.�����PM?.5�"�ql�8�[�	<s��&�R�|n�D"��e��d�3����	&^�3����bYx�^sO�����5RK�<��J��k�Z�B%9"�<��+0N]4e�Tj����f{���)j�K��=��M=sm�Qu?|��=�M=���� x��H����3w�������7��Vmm���x��G��F]85o5/��y�\�C]���KM���}j^h�fS3Zi�ap�kc60�\���7
����gDI��1T�������bMQ:Lf����G��N�Q�a:�/XI�cUy��8S*�"�!E*g!<s�
T�+_SM��g�<��#����WbW7'A��N{��[C����1�����b����}0��B�bbj�����7[I���Q��R�bA3R�N��b�������%D�j��cU*��Z�{q�du��i3�f/N���,;uT�tK��C����wis�i>L��(�����e�;I�l|�+������f��/�A��2ER�l�J�cp&�CF�|�����=f_�w�P��4:��	�7�T5��u��c���Y>s�k�0x0�VZ��qgb3�J�|�+�5uw�TVZ�J��g��V\i��� #V\i9J-R��ZK�?M[VZ��q����������+-�37Oy����I��^�$gkU��a>�w�TO��q��f\iy����>+�e�n��w]i-���JK��;�[�c���������J��&���6�J0�Sk�a��C�.+�Ty�C�f�q ���I,VZ>*-�c�5{���Y���o�p��]����nh��������s�v|��n��9����([�#�*��:�6[����]m���jXP��f��	5�`�6"���9j�P�\��{wq2��������EI����j�W�{�w:f�w�C�����������t�z�(��3�e�N����2{/�{�qa��������M���Q�����M7`���
����mD����������U�v��/�F����
J�n7�gP��c�w����g�}����������]9\�+���r�=��/�J�(�W����W,�����S|/V�������d��r����
+������jI@}V���%i��h����
N8X��M\�;�VU���g��wW�����g������QN/+g��xV��fR������`�.�CX9��J�5��r��]9o[4(�(�CM�,'�-?�����-]���xW��eU"\�������j���h�T����j���w���]�*{�a�����
��./��`�v��;���l�����>+g�
��r�\RV�(	���<R���e��������J7O���>�Z�S�=����C��SQ��U����wi�/Y�M,e�2�9���E��-E*�JUj�74�K���R�5���r3>�G�"���+�
���\������L���_�=�����fm%wH-�vR�� �����>��K�-�]��j���78������#8G�T��o��
��%��Z���4T�LW���V\�2�6*w(X6�j� ��p���Z��+W�����AH��������7�7�1�Q�3'�A��rr<R�]kg������m�������l���d�N�v�e���Ar�$j�/*���J��&U�%�%]\�PU]��)��5���R�.;�q-���g�D]j���I�D��4�Z���jeMAVl���l����j"5~�����n����+���I����$g�^�FS������T�h��{Lme�v�>X+�CU�\�n���|�~�`���4D/1`�{�MKN/[�M�����5O~��QV���H��li�~H�1�����I���i2J/	cF������>F��:�\�$��9�H���V���?2uE�
���o��������H�F�	�H����-'�N�������������y�b����[*3Kqfi�>�y����k����������iH��T�n!������
U��j�V�!g���q���bV6����cN:f���l��0u����r�����g��<��� ��,�'� U�����52���33�j�O�����4J(RP.��������%����2��Tw�&��0g��w����77RW�vJ�gAzp���F����T#�z���01�
���i������A(�:Y��qQ�5�"��#	jkZTb���aZ��Db�xP���Q�
�����Hq\yS��'�n�@�9R9j��C�g�5ZI�����������}�#�XHj]���T#7S���MA�q}�@��v�J�����!��	x~���)��,�������o��<���/L8�8���#�����!;%P �:u&��!i. �t~��}� R*����-DE�\T����C)����V�X3�!e�%�� �^�Z%5;�P����V=��&�L� u:;�����*\6�v�����@u8i��#�\����-�6�U��#H<�����Zs��k�<T6��bG������fj%pr%E��pj�c��.�#
'QG��R��*����>T�r��NCw���;��e(�Y�P��%��ls�=�=h���ZT��<s��>��xr1�p*���:|��v�bs+k5���ME���Zt�	_&���L�{
��eM��lm�^cY6E�>���J���O<1tjU(f���M4��D����(*Br�� 2��)j�&�D{D*�	>3M����4�Q�����kD���Pa;*H5�w>2G^}Q��^��������!A#X����;�U�G�v��S�%C�X^\�����3`��,�t�zL���z!��e������t������u�����������I�����r]�������O�p�WU�����x����xN
����jp�I�j(.������U��f*��)SI-�Aj������;)��c�f����L�����;lG��j���fz/����4��2��5]*P�S��j��^��_%�l��V5~Wp����F�:S4��������Q]��9`�He������H�E�c9=V�s��-R�&��/N�f���0�[W&6�Ss�G��tb�?T;��(S�b��L���|������R�������+��1$���1C�nk�������C}������w��S��q����}����90���z��{���R�T]�;n�����:�����n[	��j��C�*?F���L�M������.:33���C��`��#�?��5���*�8�H�����^�Q
�a���l�a�Z������y���;����5���# ���GP����A]���tW����8;�T=T��a������87���h]��"�s�x]z�5���n�����.���K���G^6^�����k���5���4�F�R�`����ClC��|:>[����:���|nW�l�)S�T�Ssej��t�v�W.S�������C���lz�5_c��U��WC�g(�H5�gXT���n�C�%L��-
���8�K�����P����a�]�����kT3��@�ih�b�te����R��9�u��4E���Z�44�z��4��X����O=��6��5Z��4������!�Z#�����Bd��<?��5`}2�r�~��JWz��ZX�m,=�L�V��������v_Z���t@�N����e<��v�/u�4���-�	j��B���fu"pA#���:�['������1��r��2��R_je���Z��Y����
3�vL��I�� *����r�c5������+�%R�ma�HdA��A�h�O�����"���V:�=����jzxg�4#�>��kz�T���K-��R�4��VsV����P�;�Y�a�
9�����T{�$�6'����n�I������a��]Y3�@�����I������2�������|����o�r����HM5���c��?m�>S*�#������V})�"��k;���;b�/��/*2����KCU����#F]���o�!�K�����#$��kI��,�Z��Elt��n���
�#i]����Q�n���;�����a�-���0�W���ok�rw+G�<<wQ�����������3����M��q�P6������tWXW��q]�i����l(��k�k��A��:j�u��b$jS��#������|�}j���d-0d��Q#�
 �y����s���p@0ffTWb0�1���Z��@��N-�"��x]@=��Q����O����V��G�0��#>CJ�D����q �0��a��+�^t���P�A�x��#Jf�j�b�	���0�R�Fei�uT��J��>�'(���-�b)������e-�d�|"*�����j���s���N%���`_E\�`H�R4��j:��G�_j�v���tQ���r
�[���w��%�z�=�QW������K���������$���sb��}J�x|D��2R�������@3^�F����PXlT����]|�wAz��q�^�j�.�����^���UF�6��kv�k�h�/jn��=�V,O������<����pq�S��Te�+����M�?�'
oS���#5�Y�z�Ps�(�C�l���S��2��s�[%F�q�y�����+*�$����6����+�5��a�aKS��������EG7��n�@E]��M���"��a��
�d[�oKz������m��%�y���c�>���i�����>O��L��.�%��|�	V�sgQ-,3B�.�V��2�p�����s�����.CuF�`���9"�w|sKn{��R��*�n!�����*i�4d��6�PF�
�0��^�&��O�Q���N���U7OkN���[�e�u�-0f�~<#\����-��M
�;�b4gd���"4��H�L���C��P�C��gs@�}2���M�[��	e�r����������Z�~d���dvEl�C���`9��E��V��6pvA[��=����<_>��T�p=,�1-vr�n��
��N����u��-�w��[��Xs�P���C�a-������F������^�?M#<��J��^R��a��������o�3��P���~���\%�\KAe�T��z<*��R��Ge������D*Q��44E������L��]��s�mE�-RweU	Z+���#'�I�mc�������4:�w�����M�����V���?m�
��`P�6c]�B��9%#+����N�ws��.���n�J��)r�'����nN�������W:��oI������H�����������H?���������y>�|���#�y�S �|
�o��?�)��S��|
������|�<_V9��o�(?�)P~�S��z
�RO���)PG=���@�V���G=�������_������h����h���[;��v
������~�����{���@�����[?��~
���89N�O�S�y~��w����m���8��q
�4O�Y�)0�<����\����y~�����s�.f��#��i�)p�>��w~��S`�X�����v���]�y~��}
��O���)���S`������O�3�����)pr�?�>���o����v
|����������S�{�~
|�O����)�����������~�]82r
�q<�O���S���85�?�������n<�����M�?������^���)�(�\;��W�50������B��q�;<�u�h}�uo���uo���u�p~���*�w��5���m
�o��kb�������"���40�c�d0\��q���C����a1�2�j����A���@hD� L,�GI�X��B\)�c�4����)�q'�MLLL L&L,�d�p�|��:-9E1]1uecJszc�c�CP@9������2�b������E�q���(�+�.�1�4�7QuP{T�����(�4�@E�B�R�B�B�BS+CE������J�z�����	s���{��"���o��1���c���yY����o)�4Ka�Of���������
��i��nR�eor�v\cY���R���������V��~|��|E��).����fiE
�I�K0XzW5��2�b�����,�����?���"��R�[�*�Qv�������%�����	uu=���&P���p����j��R����(;�"�*+������}Z�8���C��nEO�IK����E���7���[��!�68���l��f�-f|g�1iG����t��'�����m�Sq@�*�A���Wp��&���QT��Z�[��X���Ro���z�Vu�Y�MWF"w�f(.+��Z�!��������5��.��F����,�L*�&H
��T|�����o��oMxO���������c�L��"�z$)�:(C������v�{���*PdY��fL�]�P1�E�
v�2������@2����������J�!�
�.�+c���dx2�am���d�Iv�@��
S�Q�r5��$��dY
P&g��b@�����v@Af7U���`�,j�������P�w�G�1������������5S��^M�;%Wc���rv�H]Ty�YU��������l���7��g��g&4�Q���c�e/���-W�������T�+����TMx��e��;^��x��p��.�V|S@�j�e�����3���jz��~{h5������W�:^�Tzx}UC�������R:�j�vU�Q@�������]�k� ~�=T��VD��#�����������i��	�����n�G����y�c-�:_jM�x������-G�{�:OuG*�l�g���W�zT�*E�������6�d�!�g�f9��e��Hk6d�[��b��?��ueh��TRHE��������	9��,_d�t��Z�Vj� ����Z���v`�6�S��
���;s
�=��*��s��?s�K'���m9[�.�.��;�T�x�o?�B�p!vqC�!�7&]��1�Bl���.�fHWu 
�x&�����-����+��f5G+G�����T]���{���(�/'�X]�+����+�i��M���i.��������I��E��@���3p���Q��e.���wN9s2�����U��%�������N]PGS���f5�e.������B�W�|6�k�R��;F��Q�d�88	��gD�K��X�vvn��� �d.�����^�}S@��x��.Q������m����j<����,���r��O�K7�$v�`Q�����x?�SyR�Pv���z�J2����;����8
u��)= ����w�m�a���LE�S�u�Tb������-#�B��d�^��q�����x���Y��*$������i���pf��[L�Q��.3r���A�>�Q�y��<0W�D%E��B����/s���>"39�*Q�mh����d59ap�+���r�����&G�^�
/2%;(�[M� [�U@�����Z����a�V���
�l��J��l�gXw�k����&GFTG%q�C�'���;���njr������n59��-B]s8��z�6*T>F_�@T�8
�'�Ie�S�[U��aM��A���T�������2y��./�b_*��\Z�����2�X��>ST�_jb
���y*B�����3�C����v�~^�Y���nGN�,q#g�i'��o�k�����ZX��������}�ux�N��������Ti�0��.�:��uN/[8E����|�F�.v�.�6W\��*�*g�w����]�U��,ltT��a0�!���{:���Y�(L��c�_M�*���<X7gd"��V^����M��q@uF��]��d8����ui����9XK�O���E,��r�����"�'-Kj�uC�D,%l�����+�g*h���a������_8�������i%K���7f�,W����p����H6��H�=vM�d���H����`�����{m��X���R��!z�����j.7t��v�
-���i�F��c�*���I�%��,q�����������W
�+����it*�H�;�����(��t�V���WD��T~����������.�pO�y^��.E�0"��g��xl��u��d��L���ZU�WTHy9��+�(l��c�_��.f�O��ne�������@�In��lPK%��i�*�cWj�"��@]����V���W?�0w�N����g���I�U�m�5�u)�����M7�W�]G���,�1+�z������&��;R�����]� �*����g@�*��������6���Na�����[���l��W1������V�Ekx�
Iqw�$�3�}pZ�.[H� �C�{��^����e2J���A��X�	.Z��+�X\���7e=.k#��s��?s�k{�E��
+����Q[P�g�4>�Y�*�r�`��U�}��x����~��*mO�`��&;1?�t0��V��f�����a��I��&UW��~�p�5�5���.eO�O�C� ���D�k��U-��U����)9R�~�R�
�=�a�Fy*���i�9���U�������:�����G+R�Q�����Nk8���Bm����W�Jd��p9
Tmq��+{7&��E�M�4U;�
�1u�=�����:u���UO^���R�0;3�k�;'�|IW�0����kL�M[I�U�!��J�~���%�{
��R����8.s�Rv��2]x��?}�y|���c����Cm�
�7��{�
��c������YiY��uD����bY[��fn���72��L[���6k��1���|%Qo/��2��f�0�"�����[��X3������q�Gl��6r�B��d�e�+8��l�[2}GpG]�0j�m��\�`���5x^0D&��Tcs��{34E����N=v�:�;c�������������1u�����n�q5CE��T���
������i_6(���x���Qm ��KX9m�
����m������n������u�5����j��9'Y�x����g�u�����uc����DBv�BUq�}0?��H��-[)2�3p�8���n;
c������a��P�l��w��~�g,=��X��S�&Sy������
�d�{P���*�����y�So�B��c�����>��y��@/�����tr�p��������h3u#���xg�`���S�%��rt�1���m����$�YP�)�����W�w%0���Y��.mo��K. ��d��[b�+�!lI/��})�	4yy�����[�;���O������Y�2p��L0F��6�Sn	?+x
`���TG�v1��2�P�n��r��n�hy���+������]*�zo��h5����u3���n���G�g% -���)
��j��C@V�9E~�3�k���t7��8�Fy��#1&�>
&�����6��8��mM��7�����u.����@��cCp�������<���<GwF���(YF���r����Z�k��h��l�M�i]����"�������Gb������g}.�����P+����f�]�xD�Z�ig�#��F�����C�\����(�x��9H���sZz�uT�?�h��p_�Xg��|:�?����N���_
Z���QGV�"G=�0���<%V
����f/R`�C��Dr	��FYA������4��s{l�i�|z��[��@��v�{@�����	�������mI%vY"��&���Wb�J��U*�d�|����������
�v?A�u(�"/0�V��F`E3��@�x_������dS�t��~�"�=��N�z�e�&g=���V����?~~���O"�"n��=
�
s1C�lP-B��)i8*AY#.��j�n��TM��qx���@��&���pk������7l�����K��o�Ws$��������Rk���e��'���U���������94�(��q(�"����@,L����n~��g���4�(
���~Lp�p�@:���s�)!��A�/t�V]��o���P�?���!�-.p�N�x���2M�-Y��P�&b��U[�L�i~�������gk}[]����/�k��+����kI1M]d�rR,(�T�wp�'��#51>�c�k�J�$�c���X#�E��!�������A6���No�"�sI�n�X7�jG����o������2Ce
w��+��;6_�������1�`��ZX��pR2m���8�
����8}&3����ff�(}By��|�Q��
���@M��'��1���m�������VZ���4��Zqp�w�k�V!��`�!n��"[.��p���+��E)�.�������=��"5O�{p.����Z������>5[$��0w�q�'osvW��H�kS ]k��P7%�
�
w�rzpmDv�c�6�8*�?,������6�O�������	r�ZF��S��gu8q(�h�D�|��Si ?�:B9�����>nZ����a�8
�q@`������p�k��dc��!QO�&g��K����� ��A���S�O�:��*�n��tC[H+8������[����3N+�
F`��hC�;*�����i������@��sT|'�\���~��2��V#
 =4�b��} ��@f;����e��e�(��0��|��m8�2��W�����n���pNc�v�t61�G~)�"MNY��B��c��g*��"��w������M�FS��7�3��f������w���P�Sp�7qnRe`��	d`�����L*J��d�P�:��=���p�J4�L������J�T��~�&>������A���!o�gE�V9�������������}t��6����g��u=����/"����"D�=3��b�p���3�JM>�3����
������{���+���Yt2V��z��j����������0�N�S,��Z������<�3s�8������L����DX�8��$7���V`�q�i��	����H[#�r��e4{K�XcN\���7��P"ih9
��:�"q���`n�����2T����4���n���������P"U���P���9����H�����a�HC��>[8a}�hp(�' �����3d��^�>3�G{
:BNI��X���V�"iK�����pr����������I`�5���S��V9N�� ��f�l�Z6�"����X+]\��v.����:D���������T��Iw������C�#���ku��wn�Oi�]��!pq�������C0jZ�7�Z��N5U|\\����0��N;�;�@]\��h��/?i)��M{G�ei[{��@S��d5;LA%RZ-�n%���L�������������>��T:m��k����h���Y��O<FA��BS��'.���?������]\2�`��57pq�I�n���J!Z#�������xY\\��]w��/]\|]QK���f��(_�a&%�l:��6�b�G�D��?�_���u.o���0O����..�*��Nae���i�iC���K<-A�jj[�w���q~�S���d[�g��9U�i�UN�� ��6P^Zf~d��4���O��
��)�J�/-�B9M�����Ayi�+O���9�<�,��4����2����`&M:�,u6�'x�5��e�v!�N�t��Y3[_Y�q���Q>�%����!�uz�T*�|���HKb�I�!-�����QM\=���/���tMB�5�BxC]� ���|�$'������r�&Y�Y� A/�Z|��V�5	��1�L��5B����d��r�fH����&Y3�I���G������_M|kk�L��$k�e�`S\���$�lm����&Y�9�f��5�� t��hX����X��D�aM�fX����&Y�M��w��3�I�x��`R�v&)�A�aM��*���S�q������!���4A���vv�5�:p5@��J���
��4l�
�+jq@�#�8�&�������@k��Z��t�Vd��4�&��Ue��!����\�"-?4x9�Aa�8,t��]a�����SB!5n�B�F�O�LO98�R����V@staQt�\n�v�Xwl�����B���p����u5@���
�O-�n��48�*���p���Nn��C5@�����3�kh�g��6�?���~���E����"�A~hu�rXDZ�e��a�{XDZ������Vg�r��< ."wW-Z\D�N-��`iP"�u\�"rw���Mo���=_~.��"��oZ\D�V<[;�tip���������6u]�l_D�A��r#,"�x�[�m���&A����V�]���g������s�(cXD���=,"w��l��h��k:�U:��$&.")$����E��t,|f�B�<8�O$�.}�%��Yf����_@���%e��*�,J�������H�l��'bu�_I����lk��u*��w�wR�B!PS��������52S�
�5.���tA�o$�hP�Ii]_�Q:J��������B"���O�-��7`�f��������&�������h��[�]��J;��[��nP;�/��P�k[����>wZ�-�A�R����7x��������0�P�������28���@����2��b^��^G"=���-|�����d4~m�r�t�1F�?h8,�_P<.v��{���
.��,a�lmY��8h/��-c�r���R��m.gi
a�l�����iA�|Q)UyW�
e�}\y�N���Q��T�oU��O�-���|�V�6��q/����[Y2Z�So�@�O��2���=��8�CF�G�EZQ�&}�JP�����Ru���������;n�';b6�j�liZakB��i3�����&����\e��Y�hHB��D�ENG;�i2�3s%�b�[|	���!��0��� vp"��{]i����5���5���>N��3!0�����u�����m�-������~��������#��HY��f��tX�=c���r������$Y����bL���c���=��[1����e����C2y!w~����b����\`����`���y����)�n��KC��P�I�4}�?$4�<g?~Hr4<2����������v�$�� nd!�	 ��d�'�YP�(�P��<��o�
�VB�80�=���i$��33�;�����9w�E���A.��oK�-S���6�F�-)��b���IY��![����
�57Z���$r6]Y5�U�����n����9q�W�dL��+�a{h�E����q����f48u<�=Y�|f�<,#���8Y`YX:h5�Ys"��t�`�wW�U������B��j����T���X�tL��!�CE�����r�;���D��S�O/7�#�$���D|��G
������r]e�Z��o8w.��a��\�3�M���/�(��#�d8u�cI�8�A9�wUW8�f?��{ �j[9����N�x�4$a�r���e��4�O22q����KnQ\�\�������?lI����J��	@3�<3�����}L�&o%�;�|��g^���n���7��o��Yu^f���r���5����>s�Zx�Y��>�M�Q�@3�{h4y�v��,>Fgj���@�YJ���� �!���n@hVd��h6W����l�e=�lS0���49����9�tF���4f����9+'��N|��6��IG��e�q(�J��O�@�����l �%��� m�8�>���L�B>���]��X�V���57�,j��j�O�[��k���VV��R���uj�7�n|�� �H�Wg���K=�a�2�k��4'���Yg�h�W���P
:�����*U"��W���=W���UgtZ�aF+�ZMQoI�)���@K��%������8f9�:��,�n=��P�PN,���Jv����/��n"m��k� /�)A+�V4D%��u}��
}F�����������\8������FUU��
�F���W@JP��M	j�|����,���������
T�
�r�`��g��-5�U-XQ\}�u� �a
:�����>��i12]���IU�rc��E�njF��R%u�������J�T��$@(�"P8u`��]Pj�G�7��l�*P
����b�������h[wi<j������h��E�A�\��V��6�/^�P��St��v����SX����.^
��G������G�l%��a��0���(��-�������j#����5��0(���a�J����t0a�^������u�a����$|{��=X�f*A![�����C�~x�w�i��(�������K���wWn����:��`+�*$O�n��d������[�fA�j�C&�����S�h+�O����^���z��B���X�x���SJ��jo�?�'@������r�u������4S{
����F�����M����E;�0i[���a����Z\�
mq_�(
�:�|b*j��T��Sa���"A�k�����O'�}�C��C�����
��/]���3����n�g�����"��i�V�Db)a�]
M��jF4�N'�r:����4�N�i����������Of��������h����tB�YQ�DXC��35�
Z	n����*k-��yVs�cT�|��X�mWa��^@�N�2�y}�]�n�y
m��w��e�4S���S�ZC��%�D�rN�fC������e�d�?����7��y�&�R��j�|bs7�b���.��()��rXX�eZMA5������$����a`�G�@0]�MCt��MzL^�Ei��N_Y�M."3����F�H`u��*��q��"�U��?�2(��C�E����$.,n("�H�*��C6(g�'$�C&���V[(Wt�i�k�:5��h#zK5X5�
5�*�%�(�t0�u"|�Gm�o;�}��:�3�h-���KW��-�nbY�p3�Q�a}��Ol�"�&�_
�jR	�i�jD�+,��s��[#��g���.�?*��c����v��l���z�]� f��<S� �[x�S�RHV���F�����h�#�D[k���5t�EWD�-������[�����8����Y���4�
���Y���@S���
����~a�k#����)
-���EiO���`�!Lx���S��%(OJ�&����
-(���D�?jlodhZ�ir��B��f1��_{����@�Z��y���7W���Oc�F�]C�,�k�W�����+eV
4_�����5����[)g&i��z�B�;����F|6H��/���&�b����L�:F�(g���@���u%�Y��$COu�*�������D����lv��FXlw��f0�hM���$����A�4�>M�Oq��5h�?�:]Qa������6�Y^(�\>���d�3�^
��i�j���4�g1I�j�v���3k�H3x�N�%�n��/��%���b�����3�oh�h��n;��GL�����������:��u�Pwg��Q���a�F(��K�Cc�o���DK3^?�A7����-����lZ��6;��I�����9�F�]q���U`!XK
}7�|9H���C9���(�c:0����F��L`�����%j����4y�9ISju�m\�L��+�����|:���c����h%�Q��x���W���],�q��L�\D�&�����+�#i8,r������
��h��+��uk�+����;������/�$E���X�o{�����i�&	�FX;�
�`-��iZn��c�MM5k���%b�[k�;�C��P�"0�N&^�����T>avP�D�G��|g������h�r4B4ddB�m�;���XSH�M�_Z����I�4
�[^���a.�����Q�[E{K��WN[���	��H��S&M�=�����B��n6����|�����'��j����������;��u����Bw�g������b|x�v����E=���Q���(��+M������^Z�u���;�c������D��/���H��������P�>�:����(��I�H�b�#"|�;}_��^������54?hcP�[�������g��}�no����/���r��8Uw���Q/s����^B;{~hSW���]�r���/�%��e�m�J��z	�.��.!#�KE�3�%�|/!�>��[�~�����T�oK���4��J��~K��������L?��)��s����>�)�G>���@��O��#��g>N�����)PZ9��Q��e���G�VN�����g9j��@-����u�S��z
�o�<_��|�Y~��uZ}
��O�v����N���)���S��h�@���z���^�y���~
��O���)���S����@��O���S���85����w~��]��)0~�S`���L��e���S`�y
�5O��m����y��?���a�)p8r
�V���S`����:��u
����`�}��e��w������k���>��}
���8�x
^��!��������v���w��o�����N����)��|?��������������}?����<������##���S�0�89N�O�S���r��%\:���p�%�z�������6
.��B	.����(������!��G���r	.��"�:����N���"�?@���F
*�������C��f��;/�Z�.�{�*�M�!�����@0���pa��
�C�a����b�9����
����0Q� d8%b)"
q��B�!�o�:�^����690Q0i0�0�0�d�a�q��f����t���i�)�����i@}� �J�
��J
�G��UK������������D�A�Qn�r�����e
�J%��EL�-���j*��j&@����.Li�aI���R	"����fp��M+W-1�\�c���	���"Am�GeS�a�N��@KM3�&6�o��!3-��4���Z�����������iW�X�����%���a=��
����r�sO������PRZ��%�E�4������dy�����Sh+�n��u���P^ZE�p��\-�;3`�B��R������y�����V���4����f���*��^��go`X�����sK��]�5y�U@�y�&��z�%M?zs&�MzZ��.��.:?�M�J@��<�y���-�)���r"��If;�iu<�*�a*���0/�3�m���"1y��#GJ�,N^.�5��S�'�yM�\�){�.vmY2Fc�TL��6Ma��K�Zr@QVx�2�J�g�R��?���+!goo�v���U�S���/*%�p���?n����J��.aD����
GJ�J��A�3�Y�.,�,�*�����m�������[�e���^��!g��h�-�?e���RC�
|�T�Xp���2�g��=b�@�"K��2�f/eE�F+$�+2����}���6���%��,�,P�N�r'�+%�KS�t�`V��VVe��3�A�n�v��}h�L��E�Y�C�y�0,6_��7�n��0�����_��?�\W�uF������������b����+��k(7,)���L�x�����wh)�������*��HU%o���[�����LO��7��t��|AW�FaY�,��N�Q�M>������;��T�4���-�y=*�uT�����@C�E������������#����Ju-������Q-�}�_���_�1$���NE�tF���&/IH��D������A�=��
4���b��|I�At}!��VKh������/z�K���[N�S4\����`����2����(�u�������Z����K���/h����6��)FJ��5U��97�P�7�6�*Y�e�d���jZ�BT�;���w�|� �Q�
��[7k����}��V�:p��o�:�����9��-�Q~`1��y�B���x�I�[5~���fu��t�a��_�H��;p�:p��o`SK���4���O����i�:1Q��b6�8zc�n7&I�i�����Pa�0G|�3�i|\0S���"���HD��e�u|FN��H�'o�����F��s/n3��_5P�p'$x������Q�*5���(���8��x��4^W`��0}�r����H���m-�
�����j�������Pn�.��yQo���f����h���������O�b�![��j5q��l��VV�]��H���u��w���j�/�$��wX�1����w����FJw�:���/�.Oa5������?���W�a�\�0r�B��G�fA�Wf�$�����\��Lf��<�M��������?f�?���p��m��B�e��i8/@��������ke��6R����?�B06I�xx�F	���t����:oG}5�����A�� �]l�����\]V���yjcw�i�?�duk�rH��u"�&��0�4��`�ppi��U ���?�j���41�H��S���@�d����H���&�����O��Fw��6����^�F������Qj��/������X�d��VwE{�����]PR���llq��/hEO�6�s`s�0���g�u�8�j+��M������+Y(�'��	=��,�P6+F�D)v�����n�N�	/�s\����e���,����o�:q�p�c���� ����/�
�mM�v.c!N�.���A
�`��%�E�?�~�����m�n������L��+�?2[]9�������}���S�e�����V�~��Ev���}W�LWy��b��!��|P�\6Y������r��P����Y����n_�#��1��n����Uj�<�E�X�.����ok��)�v�2�zj���-�K������{�E�V���V
�r����f��T����
�d�`�<`�+Z=�}�P0��`|IP&��6�0��@���PC�&����jT��mcE.���-�-������*Q6qc�7�jd�.�m�\���V�����/��@?|-A^����/s��V���U���������_�I�7?W�k��s���o�YN
��^0S��Vj|G0�
�*']���$��+�rr�~���(*�����
���h���z�H������K��6I�1;|���g�z�_*kNV�9���� ��������9����i��3�D�j�#�){�%���d�>�a|)G*�������W�b\�8z��:@k�/j���a����e�!��9��5eeZ@����(��9�d�	�����	���h2M��e�~@g��]!��1���i�e���5���Os�k�x���(����T�~m���
/��`����P�FC�g}i�0Ml�>����E��
T"�>&��*���
3�W����UcT�b%C9�d������yU��k�U���IoI�q���
�e�P�EX��"{Y�_q��&Gj�I���T����������������-+��P����Y�D��4�5����tD3Ru��=J��5�z���
��bF �U1C0{4"Z��+�EZ�x���+	��"nY�m���Q�-v�����4P�nY[��P~����)������d}C��������|E����k�
�������P�D�ak>=j�v���vUC��c�����#t7���Vz��Q&z�1
����R�"�(	>���k"�g)���R����������������#Ru�>�b��5�����Q-/��2�n��� ����.���l��f"o��!;~5����fKZ�W����.��\
�4�M�|=4u�1a��^RiW���Kb�������������_d���x�(�U�;ci����`�����Z��"��_��uFM��&*��K����W�W�-A���d='�W������+C��|$n<������#CO�k`7�o�����	r:������y����I�%��9.o��V���.�K�Gh�yf������f��T���i�v��"�����H�vZ��0��������W��7��C����R���M�_{Y��K��N���	�U47�:�\���|����+�/�����I�}">*:�nM���xH���~E�k1��*�t���#����~����k�Z6����Es���i�]I�@b�h�DM__L�����l7����s��f����`�����T}����p� �]v���n���P�K���^�{{O)
���h�T=���/z5!��AFLP��e��Y�B&����K��J������-�U���4M���z�x�]�<��,�n����7����>�|ue�O���U�yq����bL�s�������������L$F�������X����0:|vs�4�������'��J�MZ>K�����d�G��'��X�L]2jkb�'"����W���8�5�DC_��%P��Tb�=��,�������r�o���QA�����'Q����Qy
i���c�a�;��_V0
�nn
x�Z"��f���Ma�r��e����������\^*}��e��e�az�%5��,�4Y3��K\`���,6%2�Z���"'�q�S�xq�L����m�����<����>n�'������,$n����p1�x���5����I�������.�89*)R��YV���B�*�,bb_�r���73N"^���f�9OQ�L��^%�,5�@*W��(�S���?F4�{w���L��te������O�=K��T�wl��df���|���
1Mg����������D�8U�w�h��Y$��6^�VR��_U���8��O�R�sm\aS����2y�t��Xs8�P��57zm^�i&�i��Y�����F��#-k�K��N�9��R9��7���
��DQ��-c���R�p��F0��.��y�H�]
��]#r)�;� #J!�2#�PsM�9��9e����~���f�Q�\���I@~0�!*��V����?h�2t����-T�lw�a��1�q�;����������b�f����9�h8�[���#�-b���X�6
��6m.�NUF�v��o���x����>�5V����
$Q��M���l����tl�LS"p^���E9R��w����e���==����
��Y����t\���X{�
�t������������{V����Q�����pB]��������8���q��Z��f}�W���6>��Te�����
��B�<��i.S��M�4"u�C.@m�!��I4���7[����.Q�����]3j��	xu9���FNf?P�K��~�T�;hA�k
�K|��c�^���V,�EVT��@��p#T�"��V�1��!o���i���!0K49�����a��z>?�S[�-t�E]�fT�MB���]g/�!���J���q���	�2���������E*���~�R������P+��TM�������g,��5���>[�Hh�T�o#�n|���Z��^<#�F�	���]��������f��^�74�n��jLS�)���F�kC��S����\�7*���Dy�X����R3P7j��������������t{���~4<=��dC�N��5����5�M�K���F�(�&P��xk���}LQfUgw����Wfy��Y�����
=%���i�&���1���v���_�rD������w�87�3��Zg4�����u��h�T�B���r4P�]��i��@��G#�m8|�JQI�*����r^\"/�
�#����G��J�	���a�T�N��c�i2
�7�'���9�'�Fjk/��X�}����3Z��f�\apQ{���3`w�����x�Y��������
��J6�kkz��7a�,�A5�pA��,�AM��������8���T]�^�Z�
��l�	������l��'S�Mx�zE�CYC�iRn�(�e-	x%�W
�j�k�\\����������~P��R\�����/�Z�[��Y�r��T:Fx�'��3�x1�� A�A=�)@��1����u[�.5�0�;^/�_(JAW�2��k�e&g���%����P�J������&P��4�x1�c�w��.��8e�\�N��q����g��Ls��������Lg�yX�>,�}����6+�D��(zT@AR���R[��]���y{&6��������P�>v1'��e�E�Th���'2?��v%i�N�}P7�|�����`�A  C����"2�5���&z���9X��iV����Jub�>1O-2���S+]�$��?��E��/>�)�X�Ye���Gi�W�����g�����,2��\�Q�w���PN/u�4�y���W��W��a1��"2�V�����b�f�Kx�����}�)���w�4Q���)��^g��v�%��7-�9cD���z$*�j�E�#2?Occ�����Q�^��zG�Y��D�}�w��;��3�2b/���,Dd~-G�����&i`w�������T��(���f_�IG�wex@�.��T&��������f�mZ?D"��~[?�����P������R{�T�������Q3Q�D�}�f�hu*B��^�!��=TLsl�N/�����<&���
�D�]jow�x��Z*A�$���]ymd[
�T���|�+�u�[�
���7��)4��z���
���N/��7|����xG�E8�[.���)��_����1��G��u���3��vC��+���Jk�g�%�|��O�vR�b�K�RXi� �0VZ"6M��
+-�/�����E�E*VZ�l\i���J��l�q�tm���U7H<�_f�����
+����U\i�JK����n�Te?�JK�����{)q�%b;1^�Mww@M*
#�]iyWZ����XiY�XiY��������`�%WZ"�Aj�����+7V����S�YiN���t����Ri(�oWZ�I��x>�����5��cbZ�w�\e�wA�/>����;3�h����;�n�j�����y��(�^IFu\0�j����������'��w�����G������Fj
����;����Lf�w}��r�������G\I�jQ�R+��^�������[��t��;������F�w���;��|�����A)�����������k��<=#�����r������4�������bm���5��rW�t�Y9��o�
��]9C�����a�l�P}�}����5����6�V&5OCh+�[s��a�<��r�=	���y��r������);�'A���<�Y9[�H�n�>cm+E���CEM�T��DjN/+��9]���m��g�|��K�0B�����b$D��#"U��Q/5�W�����h�WJ�����m���L �g�|Fx��G���R���X9_����]M�w�zY��r��,��fpy�g�|���G����l�����]�)��8��+_�$f2���������`�L��e��^U���L��j��B*_e������zX6��^i��}C�48�=��5�eV�\�2��U*Vv�H�_���}�x��b{��l�L�[����#2�1�W��o������������R���d�����;u��m�����?�E6~ �������<9�l���n�v	N��f���rz]��y��K��jC����l"7��1g3n0�#��G/��~G��>Q��g�y{�(������}�bz�8k�Z�+bMM��
��ms������-� `"%�i]�]�e�r�OH�H>Q�<�����3L�����-�W�
����P_4r���
����w�����z������L)�S���������h�V��g��M_!��&�
�Qj����Y����-��}vvg3M�z^���>F����}���.'Y��Z���y����G�fN'
5�ao���|$���,~�T��l�������0���SL_L���w.�8�|7P3����\�>vE]�~���T��i5��@���`��N>�����2��b��J�f���?O�=��L"��=����� a5l�+��������4�9�c�x�1�5�����(���''�_N�5�R������H��_��?���C��X���+�7H��&V��H�{���������M��4j��OC
6f������Y�b�5�"���=���gz5$j{��!o
������gu�P3�n������c�X���3Mj�x}�j�W���3������|�x���h�8��'��Q��!>��@?��ha���
>�K�k�2���Z���~���^��U��-���������	c.����?���Xtq��x��QW)���t�]�����.�\E��m9��_�^�:��!�t�<�V�+����w���_3E*��-���$U���o���_�#�6J~uUz�d����v\����V��^��w}������J�y�e8B<0�R��rU���u������_������������!��J	gUp3���x"?%0�Tm���gOoB�
��jw�U��T>Q���2����^�X3��/h�S��e�+�lH>Q��|�qu�������+|lv��@-����Q�K�-R��j�@N�(�!�(H�x@��N����L����n�]�YQj��2>Z%p�,C�F�T��e� ��T1*������D��:��z%�:��9"�IZ���nu����Z�2��E�^Ga.�g�On���S�����
>Q��q��c,kU��3�����UF���f]|��v/��,k
d5�)����z��;^P�������$w��Oe�-5��?Tq�f/����{Q"��h���W�
s�k��zY3p[����\[��J�n m�f��
/�#���n�f7"���ll�SW5�=xs�p[�����g~~_��S���k,���o����
���`]jg����-
��=���z&%�jH�W�kx�e%��[�,
�l������Oemj�1��fW�<`�1v)���\�|���q�9���RoP
�-R�dy!��&j���d*���'E�I`�B�d�8��������������F~U���Wu��^�[Vs���n#��U[*P�S��Y��^�m\����������T������i�����oE58O)8�E��N��<�Gl�����X,X:�_�D]��t�f�h���U�����Au�6�Q��v�U�*b
W�j����p�s�jG��jG�u����r����G#/�y?A�xZmN���J�����k���'�������������j���wPpN�(�H�����8�w%�=��J��wP��y`�m��m0�G%��qL�iI7�\����G���dp����?Z�kt�G1���T���P*�(��C�R�T�����];�Xb�|q��r�&�@5���4���k.QW)����~��������1y]����#7�������>��k�1^;J=R���iSF������h��k����y�Ym�S��H��k	�hL��6v���(�n���q�G�3���nL�����}���hLw;�����T|;�+��H�'f�I��k�k��n�"��s�j�����&��>�P�8�9���1UC��T�uU;��[��vL��Mi�����h<$��@�i���#�22~�`��7K���"�����!�>��#���cj���<�zG����\#����e����e~�s���P/+�������5`������1o�`��Pz�����{<K<,�5j�TV���l���v��g�d�����]*���<~`XX��M�/���/�p��5�o��Z�}y�#h�w�8��1��R_*o��O�5�=
^�Y�fTF���{P-BC�4��dD���C���|���y�����z��P����O��>����.?�wv���'j}��S�)��x��$�����V��S��v�[whnJ�����>>��^�,wr�iC%��b�����&5�	/��x�N3������h��j����5��3���"'���Y�f��d��E���~���������~��>}N����C%�O����$yP�<F����G����.v�a�vUe����ed��������h��}����du}���]`Y;�����I������������k��n�b?qw*�g��n�SeV��5 p�:&�Xn<���]uI�.����;����ew@����G���%��\W�r]��+o)�\����T�u��]�+^��q��E�
��@'���~��No�*$1�!�:�{�jS����
������������.j������C_����-k��?K�;P���5q��e/�dSA����������e�~���/h��T5O��0��#q��|���d��o�$t-��0�44���b-9r];��6�d���qG��:�b���t�\uT>Q����1�A7������b'�9�.UX���^���x�V��{,[>�L�v�����=;�W��3�UCE%��R�rHC��=��R���3Kfzb���qn���F����$�7j"�G���.���^Gn���d���x�H-X���>>C��v�x���sh@���t����+a2z���,vj/V�����+�o*.����v�#k��rk�"?���s
�A�[��\#����x��B��]���a}�u�5�^�:��1/�la�1�����]�����:&*o5��ok���g��S����/����G��w�r*ON���v����/_���u�I2Kk�����|���%%�����Z4�[���3��j��?T���[��f���T_$���r�x{��G@�#�OusT��1K{�,3�y�����1��<l���PQ���j!��vs���yXf�D,\,���u�	��~�{����o�x]D�����e��-u��N����z=�Z���i,�_�~�MI��,�nt;�#�Ho�q�34�M�Tw4b-D���)k�E�@�$:����0��9�9F���������e� �a��jl���Ai���|����a��C��?e�S�p����������0������p���]�Ud����D:E�B&=�����{![DJ�K��������P=��$����>}Im��M0C������LY� ����*P�a�.<�e��b�M>Q�
���_����
�U�J��������ia�b���~���S/
��f����(?T�6��z�ft�k����pcF*%:����AGjhi��@�������>�5IlA3��F����:)73�0����F������5����8�[�`7��,c3����$8�
�8���F��q!�^�
��j���>��q��������v���6g"+�}�SS��'�6��~���?}�����������9�|�S����s�I���-�������$�w�������g���_���S�������}��@����w��=��g������w������|���/������e(?�.P~�]����Rw���.P��u�]�~������������?��^���]��?�W�.�f������mh��n��������{��w�.}����{�����_}��v�w�]�~^���;�A��. ?e�_��4v�Q�.0����]`����c??~����5�6�w���]`�z�U�s�����.0�]`������~~���_�����]`����kX?�.�~�]`�q��.�>#����k���w�����?��]�G���h?v��c�1�?�������c?����3|����lf��!������i��������n���$��};_P�+'~���~��O��j+���J��$����}e���8k��gk��ok������w_�+4|���=|A��__��T����5�7�
��.���u�C�_�a������40�c�d0��Q�X "���!R/DM��?�>}�E���A��XP2(����T��Ru��Pi�7Tj�S���>90Q0i0�0�0�t�a�q��n�i�)������S��S�&���A
�
�	����o�,��������I�ySS�G�����#
%�&�SVY\_bZe�h5�0�4�0�0�0�0�p��}�;����r���?��~Dt"����4���|����D?�MC���������`���,����XV�5o������_���k}:��K��S����XJ��qE�l���Kw�MC��u,N]3�EjS��Q�D-YV����J/_� j��Hs{���R�#P�Cm�j����j���5�`d���([�!���o�����O��P��'�uz�Ojf;�z�
+:e������y��(��k�u������-RuLd�`��BMu��*�{e8_m`�^�k������k�Sg��rk�h���BZs�#�^u��TC�d�����������8C7��cf�:�P�b�N�u4 �+����(f�r�'.�������tC����o�����GB�
���B}��!-���.�2��g���sqad^Vb����T�
~#���a;HF���j^�:�n!ugPW�>���h�d��:`h��6���|N�dw%5-3��J4��;N��I��
t�M�0�u���Y��;��@�K4�e�~�B/{��>��B��
����D3G��]f�^V3���kF.��*�1�������Zi��Wf Qs�WWJv���L9��j�|fB3���#�/G	�N�|�
���RQ
���;KB�a��ri�p�n�|/{������tQ�D����x����N����!���#?�x�s�Y�EL���k2�HL���T3���?�`�h����U�{��e#���*p	G���ZpaT8�Un�zl�����U�S?_��������.�s��\>������c>N~��������T����;��:�e��@E4^joq����R(�e�P��eG�5;r���:u���+�+�mK5M!�H��������B0�	���p�"�]9�t�Y�[���4�u7�[0=��s�se[Cq�W��.|���N*��[z�����N���|������R;'���E�!����B,���B��+]-H�*8�y���{�2^Z��[���\�
!.5C<~�e��B��o�H�I�x9y����y7�Xz/�����K�P�:<��Y�!�P�;=EjoY���������M!��@u�s�y� �Y��\Va!��p�}.xCo!��V��a#����BD]�Q1N�`�B�b�j���^��������%
�� A�|DdV�p��e}g'm�����Cb!�i�_�K�o����*OY�%J�������~)�}{��#?���s�o��o"�B3x���A>��wex^�Gd������'��������	PdO��WsfD4���������Vf�C�;NUg�P�Y72e��r�=���������HZ����>������ZOz�������0'\�6\N�rv�	��k�[�>�6P�m���!*)R��=�e��>����>"w9�z>Lq����p���G8-���r����z]�>=��F6Sa��E��+��a���"����@%}n8g�V�p�x�����\�Rf��;p��.Gq���	@��@}�>\��f.����\�ryX���dh��+�����8�`�q�O��[�8���y��'���sN�����v���B%�0/;V<�QmY����K�;���Cy���Z~���&�R'�Osu��%�9�z���Dj��h1��Qv��p��;��+���dYb,^�f��_�����]���9}����`����S��d6p�Y���
���3�b}~�c���S�j�Xi�2�������+����C�Q�l������kyu��
^������5�h��Tj�2�W��gXl�3����ia����#"S��
TG����`�E���K19�fUa
Cw���x�(������1��TD��_�8����X�y������ph��[�D�&�D]�N��f���G������xa�+�R�X�N�W_��5�b��#��'��mn��}F��gg�7J���#�/��b���(��g���-G��u�N�bU�*�Q8�����r��"��������,��8�������\}�����1X/%G������;.���ec�C��I�|G��l9����_�u�����:��T�s���N}���u�rc�����-�v��L��Q35��+Q
5_�+������8�M�r�J��#���^���JK����*�c.��fE�,�^9\�p�����m(3R3j�����$�j��5�X�>�����f�S���e��E*��R�Y6U�=�`$C���T�9[��V^���@����r\�v��>���!���y��k&r��w���w�.z�s��r��^����F��=����"h���9gU��{	�u�����4�\��s,�s���;�M����	t������=\x���������@F�4&�iS����H�pn�&��u
��~���-�hP���'��� *w�=;�xjFYjVyB	>����j)R�2��:.3Wf{x�A���^�K������;<K�R���P�jkf��b��c�^��c�e'�~nx��b����>m��G�����V���f���K��]j�9��>���
������~�^^�����5_�e�������x�e��&��~I��N����z��k6T_j���+d`z
;��v&�������oS�W_�������R���x��.�H/uN_���{�g�+�<�^,2�����Ok^��tA]��$*����@l�>�d���*�;d�{VxaX����*�7P6��<k���}��P��.����7|VFM���a8 �1eV�n���y��7a�S����M5�L��s[�5����)�6�q���Oe��|&�v���Rp=�
�UG��51j�:^9�k������\��;}?�B�h��
�8��K���%C"4�Q�h���*�%[���0���v�1�h�f�RT�5'�����)�o6�����Y��L�W��R�T���i�` ���������z��Fv[�Q���V��m����x9����������2�_�-V��_�q�3���u ���9R�z��a7Q9������mR����Nyb�x0il��J�W�xz�GW������&/�w���6_]i����d���[2-����J���+��� ����O�����]B��N�|�,�&!�&U.������-�7�u3@g����[���
�m%@�v������"�B�
�4`�f�B�	#��@C��?��
�-������}@�(�%��u�z$����7LLB����
����K�5��||��8�z�v��4=t��MU
o���i��j���L�s�4���Z���k���o%��Z]��uR]vk��_]�
u���vT~(����P�i*��fk�h2FQPk�#d5�S��;c�|�����������)}H�;!t���n�p��R��]���9.-�����a_���`�l�:��1��ZQq����w���G��^T��2�&��h#Z�UM{��ww��m�sVr�q����A|�{����9~��P������<���w����`�k���g������<"FQMg�v�X�r����/��4�
��LvG��7���m�ii=����h[��t�uV�v���o�w�/mJ�zm�W�:�:��lN�^�M�R�5`�T�?S��;} u��?�ve������J�X��<��r&��m���n����p��~,��dN�h��/��Q�X�5A�X�S�q �z�Z�?��J��������%��n��
�������X8�=��Ii�'h9��������&�~��63FS�:�=}���W�i���/~Y��=EQ���K���zT5�����4����s=lR��'b��9�sS��?'�S�+[���)�
E�<��a>7�H�x����u���p��n��+�_s�N��h)�C��S�|�f��f�k���~���|J�
�>�d� �V�$�q�k��
5N\�V��e���A��b�������!��+����\�B(�
yu:���m�5��D+�i��U#?��D����G��	����(��d>@��C������;-u�����?}bSW
�~.0c����*��\��'s|8
�D�1�o?�&���G��l�H�,[�^�x�����K������;u�7��h��a���eX��& �'�|{��=������/�um��uI��u�`����|���vi�$�-;�J��G�J�W����p#�-������U�1jf���{�!�W6_��`��f�!@�H�@~Ea�W���+l|�s��b��������
����l��	�]���f�l�QQ2#��v�=#/�r8�Oy��]�hu��x��� ��]��c��
!��+B�����j��T
��(mw�U|]?����P������fZ"<[M*#��#�9#5���f��X��D�0�������n��M�cD�� �N}]t(�?\]�fT�#A��Ch��C��g�4�k������j�#��������vg&�EaS��|f��`��VAK��[>
*/��J(?�u����U��|��������&��u&+w�e�Cp-���}�aj;M����7=�z��]��^y�8��t������m���,�/N�3.@|�����W}5���.#
�G�
4�t�p��J�G[����[��&9C�dE
���;��D��4��
��
^�� =������1�:�uj��
b�o#���4��&M�mj
c���o�s��VP����p�R��g��i!zC������!&��)��V0[�P�d����������fR2���/��5��=���1 �U�M7x9^���l�S������h�@K<z�y�GU��H'�N��@���(��������n����
��pZk~�*���G������+Ol`V��j���#�/�[�j_�80`����o]0Qf�������j�A��~��2��w�B1o{b����K�0`f��2<q���a����������5��OW���	l}��M
|���S���	��ox#����@x���U���;]�&t{{#����g��u�hZg5���*�0G4��
���%�=�L�8U����^x�������y9-�;u{��}����vc!��Y��ES����Dk�Oa$J^�U,��6��u2��C����=�B�C��#��q��.f���d�����]�G���2`?:�����,M
����#(�Y].��ue�����k�P��G8]���1�f_���.����A_!��2��p*�D����6D��������T��0!n�yW�s�Z�P!��Yfh��p�?���v|���t�X�����]�8���:n��'E��@��P;�s�q;��!����?���x��!��}�6V�����hrC�{��@���`53LA%2���aeCB��y��h��r<��)�c�np����
q�
����&��C����2o��q!n���q���-�P;���E�������iq�`���1�����'d�vE��/M�?<������8.]w/�p�fB\��4�_L��+��$�q�qd���5.o��I[�]����2W���X�;�z��-Y��F�"h��x2`	�#k	yui^>fn�i��W�
��C�%�Pg���� �z�KS-a�C%���8f�#rZ~hu&f��W����5;#l|b�f��9,$h���nyE�j�\~��4P�����?�������uc6�b�v#Mv����\}t�����c��a=A4���aFD�)��Q���tfE:S��@�-�P!�	��8c����dN�&!��D��&A�W���
K�[J�a������FX�J�`T$�IDl����k�cU)�Y���5	�i��t��v�C0�t�	b�kgS_�g�KX�8dr��&9PC�=�k�;������<�wM"����G�"�Vh��5	r:3$s0{���l�\��N�D�aM"�-��N\
�3�@K��[06�s�J�����1�I�u����Z�i���]�dZ3D�0
>�����vF�7����3`���r���A�<h���h��)vL�(4����PA{h=�,Un�����v��(�����;oNf�F����(�4(`��c���Ayi�!o�����aM9*}��*���U�?�������UP��}9hT�x8��9�Q��t�2����6��j��F�Gvt@��y����rW�8��<d�������q���H5g����w��O��f\Dn8��������Q��I���Q�"������r�<u��+�#GZ����-"��d��"r�g�!�<hq9ZXD:�"����R>�"r����YD�/�U��/?'hq9��
I�wya��h��t8XMXD�E��E��6b���E�h��@��\��H�HHM ���-,"G��^_A,�m(N[D�XN���E�hayT�����\�\D�"���f����#-."G��`�3
=��D��2-Q�K�e��g�3�����k>G���<������0'�\Jk�4R�����-�	G��X�i��L��O�������L���X��u�p��w$���
4�|Hd�K��� �vx�����se�mO�=9}����Sx��Lc�$`=��3q����:
q�2Ns���~�-��+���k(�W�S�t�!b��<��4b��=#����������jvQ����4��@��O
4,����������1t�t�!&�6��-�/�'^]k��xpx������#�����y�g��K�.~��V�{��V��<�q�����4�Q�Ah���L9���~�I��Q���Xeb�=3VDHf�B(�py@. ����������ia>�U�
tZ��ZhV'��TZ�So�@�*���`���{��s�H��R�4`�m��G#hlj������]e;<�<3��j�G�����U����\I�nO�J�q�'��e�l��V����7��=�������^�t�T�i�U�,��Q��`�=���i�lbu�e���3iyp�o����-r\k
�w��r���a��L��=!���eq��#�����y����g	�	-���������e���|_7c���u9���uL���a!aV�EV-�"������b��X ���c��o�<1WL���^LQ�}�r����'=����0������&;���y~���,�'�'�2���wMj�����(�! ����/�����@m��$�Y]c2@C^�����E���������Q
��(<���F���/\�F�E+a��������k�������	��p���Vk�m<�����f���0b�
�7�/�c��*1V�������0�k�s�U�*�y���v����@3H�iDw[���M�.8U��Fsa ��61�	��`��x0�wdc1���#��<������7�T1���I�yRk9O
f��������@s�H�Iy�{(8�q:���x0�!�����=*���m/,�Q�~���%�u�-�����:������p(����_0.�4��;Sa�W�?�EZ�A�r�  5�z���	R/.+U���:������5y��/�a������;���#�I�L�r��
�����<n(��sf
��&����[����h7�,��������&i�sO���;���W�io����O���]��d�l��F��F=��������5���~�N���@�]�f����Z���<Sw
\�&-��/��G��mzz�f��a#�
*������I���t�h2m�PN���:
�=�mx9��	.�=���4hpRC��C�H���Jv�X��H�^������D'm�/��P�(������s��gm�V0��:��O���cw�|Q�2�(�:�$[��T���i��\|�	8�^p��3G�&p�6���r�MV�4�|�i�8dX_��q�3�a�j���il�
��@����Hko�V�9�e�-�}�D���:D��bg�b�������4�~������&���V�b�N�bmDkP4�)���h�.p�,�^�����@�
M_\�T�;5�T��:�{�~
����5�2���|����,�j���@t���@���4�:T�]+��<���G��
`�N8d��,���	<��t��C[���:���M�X|�?���zW��$�4I�����A�4��� M��*��
ePJ�y�
�&84�
��
�
0Y_�/&�! �8�vi�:��E��(W��]��SQ-��}F���N�
[�J��Ov���SXX���@�������U�����G�|%ZKa����Y�N���+����K3HehL�����!�*��*
�WB^,�j\�]�j��.:\�a�����@%��3��$,<T���L�1B	�������7�h�[�@K/�M�)%�X��J=-+�� y�l�$y5���d���V�iEb�le3��9O+���4��A����D_�_�Z���l��t�U.��Tj��K���@�'�X�,�\���U�������Ks�g��n� �����
�����jV��i����8��}�jg�
4����Yg�Ol�D	���D	���|+l!�j�p
X���mJ����� E/1�:�l��z�2Z�!�pV�������/�(D���VA����+8]�����jr����n��,a:��7+�%���F����\O�e1��F�?s����K�	yf5^� �5�7R��h9����Cp'��<�91���$����
L2��x�&#;��u^���f�8�I4��Q�N3��ph�(k���R�S��J��a��-6o��zx6�����.���9F3��o$eHTm|h"A��y^�;VM�qv��<u�i+�&�9���1��g��@����11�BLj�bt�(�����6]�@C`W\d����4Z�X�E�������a������@%���7T���&�w�F���xs77��C����D-�S��9-�`���3178��H�����C�y87)�-�3��L)��K������v�[��	�e�;@^O���e����~��A}������9=��z}��F-�5a`�
<�8���f���K��'BP+n��mw����f��[(�M��va�*����5���A�*��ze��v��X�B=�{m&�mW
����oW�vq�7��J�;@Y�k�<��MA��5�F�
��jk�;�tyh
����<m�{V�4�=-9��o���_�6�5]�M�Os<�����3�8�p�����a��G�N��L�f�.�c�W������f�	�e�k���~����=I{����Zn9}�oj<�k��*\�����f�j-�j`�%��9��
&y��[�gv��`#J+���I���g�4��]X��(�����������|\��C��D9�KW��V�k���40j9u�}9�����v���9��R��;P\=7�"�i�>�j�Nq�P!�0�D�?.�����%3�mva$���	��G	j0���&�������_��]����**�
��Np���������.����������������M����r�G�K�!~yi��r�u�8�����v��Uw;�Gu|�b��vC�C�m����k��2�����{]�f����*�_����:t��N+���nQ��]������1H�-�����K"�����Q��(|����)��nN�q���u�M��>�J@��#M�� �h�7dk67���J.%��@-�m�o�gH����0F���r��&d�1"��8�Nb�K�i5z���0�1j�9s������l�����tn�0����������,w��e�B�h��^i�Y���.;���@�@�/7�����Y��.��:�bx ���3�U��)�s��3��Wh�aw����f������K�8�g���SA4��2WB�!'��"�x��4�X��&�'�6A~i5���Q'�q�����eU �i9.$��������^w�S�*r����/����&��nsw|�����,���d��u�y�%���e����Uc�p/X���)(���;��M$\�~M��+�#���n����'���&F��Y���>�����b)�������c��-�tab.��"�}��s
O���|d
4�Lb���>cumb��~����D�C���Q�&������kz���t4W�#����j^���\G���Y�:�!���bW������iF���T��F��4�����������k���]7Sn�`/�������*.����Gx��G�I�Gg2|���G���
�����K*����%���i��������~��_��?��������|n��.�%�y�] ��@��w��+���]��?����|���/������e(?�.P~�]����Rw���.P��u�]�~������������?��^���]��?�W�.�f������mh��n��������{��w�.}����{�����_}��v�w�]�~^���;�A��. ?e�_��4v�Q�.0����]`����c??~����5�6�w���]`�z�U�s�����.0�]`������~~���_�����]`����kX?�.�~�]`�q���6C������]����g���w�����?��]�G���h?v��c�1�?�������c?����3��#���-�����7K������u����?:�OY�W"��S���A�~�?_��#�%�%�k���k�]�O��$����K���}������H�������&F��(�K�������<�����C)~��a��[0�L�L0L�����(\,��A��������o�T(
�F�D���A��|�D���(���5�JC���P{���������I�	��������ow��MKNQLWL]����������0�0j(`4h@`L`X`d`p`|�};f�M�L�L���:�=����ofi(a4a@������������*�D������I�y�����Pw��KLY�a����\H[� �\���'f�O�j������L!���(�${5x��&�y�%�k�~4�����f�4[���Sf���9#������$�-�(J@*��xiF��,����y/��M���8�C��[��������Q���,��d��_�yt�;U\�q`�4�,�|���3P^Z��v�[���c�+���4W����$��IY/@}i�Ip�������	h�1mH���!}�9V)2Ug�����	�y�-7�Bne����<��(����,��=�%����T���Z�j�b��Fp��;m���D5L�^B{3���1X_���+y����T�O��P���o�G�4��fX,���9���fX{��,]���0�:�Hm�|����X6{Vd�%
�e��/������|�()3�fO���d�T&�zg4�����HNHho4HF=�5U�������;'���t�hbn\�u�J&-���3%���sc�q���
��r5Zgi���,���j���|<�F/<�/#s{*h���D���e������(n('P��ac_��l
���F������I���(��T��r��F�U�P�Ac�ZE5(�M(�&�yY���9�.�'��r���>Iw����X?�4�
����<���V���Sx���=����F�k��wXC9���Z'3��=����w����3��G8�����,�����t��lfs��
O�tx�=7�7�,����-
T#��E���I@;�����n��!���NEEfn@Z�H�S���6P��1t{rhd����bK��^�yi��D9� :���@Z-a|��g�K&�"��Sn����.?�/(��<�V�QNt�M����.1�{6-g�s��h�hH-����_�}t<�OBZk�ZE'Y�(��G����*'���/d�3jzB�x�f-8����������c���n�u�?p�s��_o}e_Vb?/M�B���0G�����p~iy�{��ab��!���M-}<<s/��F�?�n������Vs��a����v�ZO��U���]��[�,����f
4�JV�s��:��9k��3r:��@Z?y$��U5"��{6�	����9��76���'/�2^�E9��/���wM�@��/��V�ku�]�ot���r�P�����|��F��5�����M��:O ��y����q�=F�e�m/"�/�F��	��S���i�03�U�
]�zi]���k��p_8�C����x��W���xGJw�Z�Z�h�R-���UDl$���\�������6�G��Sa��ot}�jB���V,I��(3��'���� O�I��<�F�sp����m���J���p3�Ag�k���l5����K����s�D!�MR>��Q�|���t�~���}���@y���7�����������[A>vg����a��k�r�����X{�<���"��ppiq�������Ei2�3u���uJ~Jb����������Vvh��'���_��m�/��\�ny�A����!i��i�G���~����'KgW�D{�J�Q�@I��N-7x���'|��g��R8�t0���"��q8�]g4M�� �t��|S�#���RxU�����6���m�Z�@���8B�>����Cxr����a�7o����3�w�j_p�����K!�5��l����T��j���AQ�_�60m|8;Pg������t9�������?2[]9��m}��[��5-W��
�\����w�|���r�����*�A�*�;@�-�������3`�;Y�p�FY�7�
z�I��w�S���2�8<v�pe|��R�����������?�.�Zn�,v��b2����SO�\�4
�;*z��M�rS88�WX���u�t%��h����'���� H%[?��@���v�3u�]A
B0�$���3������9/��@
A�P^�`i���m�(�M�Sn��M�7���(7f|S
��v���fi�G,��l���]
GP����L]=�x T��G
ja�$m�7��I�z��`�k�z��.�c�rj����k�	Tm���'�`�r�,��Rl�h�Q,�����wgUq��>W$�����R3j*�~�G�I��_Y'1��Ck`E���[s.5��d5��\����E)R�i������=�����`"P�����=��'~��2�O%{��8������5��eC��C��]�+�W+��5�`ir|��&FH���O!���LY������v����m8����:�����iXt6Y���R>������un��4���Q��IYQhy�LZ�@��1.�iS������M���h4�x��YL�2�SQ����^{*�oggOT(K��N��I����H=_��v�`Yf�h)���W�=}��>MzK���+�_�Tn�+T0���ff��,��8w�)R
�������F���*�wD�_�����!�,v�eP�6~�����Tv�\�����Kts��]�Q��@�+����Y�.Ja���;���JB����[�b�;	v�d������4R�[�k6�_j}���+J��v���LF��,�V��(�d
"_��������d-�>Q�J�b��7��m�{���{��t���1�J/u[#+2�Q�aE��vR�����D���l��������0�E���m��|��nO�T������+�.�o�����q;"�1u����e30�}�_�a_"Ejo�Tc�D�.1���}D��4[����R���s����]bFRpM]����`�F���`kwan4������W�dkW�Rjq�%��C�9�X�A��o�P_^��@L;C@���-`��%��
c��/�H���kN�W�sEAN%�%_}k��F#���eL������0k4��t�W�4c)��Km�)�J�#7[������k���$��E	����K���p���]�M��6_��H0cL�L�|O�[/���G@S"5�}�����2����[��)�-��V�M�~i�n��|�_��4�.8s�>��1�_9KBH��8���7~�w��n��v�v3y��Y?����J�n%?M��[�Kn#���8*��1�l��C��%���_�	�V�L��	������l�e��%K��,9���.J�^uM|5�UYS��!jpj�\n�"\n�����z�*B�)9�Mn=g��5���P/U� YYS����8�h<b�-���@�j��5W��������r��K�����^���ed8$��H�-����Q ��%�SzXO�����r�!���^�+�&���8�i���)���g*�:-���({�����6��������itA�(_���O�u��c�����������8�E��d�~�������:�=�����������Fj��Z����������?0���LC�H2�CO�Ol�q���}/�sM��SB�_�Y���~�[�y�����M������Z�*eG�^)�L�������������VQ&27�i-����@We�=���������Q���������\^*}���x��E�j�"��#���lo�f"k����-EO����V��������BW��R�le���Y���4"�����[��W&��9V�p/���/P��Q��&Z��?��"u��:�=6'����9����<R�J������o��R����@*�[�1��*�w�D4�����9���;	--���������������2�N�0�k���:�#�k����r�����Q!�������\�6h�J����Q��k~�M=Cb�����?U��5������\�:0UM���\d!���x��,T#nP��K�-��@mA1T@��v�@Mf��E����jz���
�[Z�@����B�)et������K���Z��$��.F�G��������Fm�1"���cDI�w��3Y�d"Cx�c���H��)�$����Q�/��ijS���<h�d��G�d��Am�+L������>�-������"<���������K5s��ShI5����:m�t��}�In��^4`�%�i����X��\�������������1�"<�<x�i ����������6�N|I!��O�r�N�w|��=-=��{����V����".Z7�0sM�,��?��1��5S�Q��u#�Z��8gx����W���8��Peu�������v���q��!Y@ClO���il��3���0�r��9��,�X�����\�h1�R����@���'���c�x�{1�95�8��Y��i�������W�TC�f�v<��#]���{���H�m����i{��\��8�������
��e2sY3�UyT����k^�6��r��GW,�������XX��E]�Q�FM��v�\�C�����Mh?�@��?�;�a������[��7���|���B�<�R����K�+��zY�=�v���w���J]��&��\�������qUt�%�u�V B�9���:�!FIxq�rz����w%��D�+P/�e9W\���]D������8���K����|E�u}��j+�^#�����;R��&������K�9R�?�	e����--�LS3y�F������L���+O���`����gDe��K%	������>dC��D*{������a:��J���q��ddN���5�����g!�b�
T�+���2TC��#�-8|Q�QI�1Q��QU*��|����uL�"��G��wR��=�9��fR�\�=X�V1&��+B�T��
w�:��S~q^��R^���BD��V�����+��w�EH��s|�s���7*���l8l�
�
�I���u
��
h.uC�9����Nj!W�+��"�H�\�hw�MK�RVj���rZ��x�~�)�-
���
~�k~;.r[�������*����a�,<J�>�������z�������GYx�@���?�S��aPY�[&j^���5O���QW�Qp���}���CZ�"�u�[/�&��L�Q�40f�X��>*�e����	T��T����v(
�c���0ejW�w��E5����^��� $�j_�X;�������a�j�p�h]s���=K/ZP����]j�Z���������q2���}t������I_u~�����P#s�72�rZ�#�:`/{���"2�|9�������72����bYD�^sO�]D�u��"�<������k�Z�Juc�:�$�F�u��u��-R9�
5��R7������������E������3b����42�C]�R�w�6�+��^*"s�|������j+����=\�������jf@��q.����������"2��x��1�1���8�`���,�N�������@��+zF�T��C5��ymWh�0D>�S�G���Ts�!Y"�B�
�l3�T}��8�8r{�(������r4P��|f�Z��/�|H*�	j
���7��{�y.!�r|�������{FYN7(���G*���_�N�El')�(�"��@�j@�����x�h9jP�lU'EU�m��\uE����i���+��X��Q�*7��z[��J/�w��j�EG��H�-�<Hrd�K\IE�LW�U��s[$�$��Li���(W�"��E�I�V��,�e�=f_�w������A���<9��'n@a��=������k���hM�4Xi9�+���%����������6�]"��Xi���wWZ����lW��6Y�|����q#~G�E*VZ���+��tm��j[��0jK*PP�RsU[{WZ*+��IRVq��+���J�b_i!����.���>�a���SOYF4w����:*a��H��"��&+-�+��G�u�����u+-�Q�g���7WZ���R�����\\i�WZ����Jc��r����Y����@$v�'��w=���
��K���#��s�v|��A���Jm��zP�����F�nslr��y�]O�=�������~����Y�u�v�4���A�������y�G�v��z�m��g���,������t�����z�����<_�w�W�=kB�XoY���Q ��U�Lj��`rU0�swq5��N>���u����);�;����u�w�8���z��!`�q6�V��-�f������X���J��3�>�w��������Eq�|�����+�^4 �Y9_�]��Q}�}��X9{�=�v�r�E7#H}V��J{�c�U�6��u��e���
?�r�%����R7��	O�K\9�����+�>+g�����+���C��w����QN/+g�|�������.����z�������`p�~b�5���?�����s�	��r��x�^�Jq�u]G��>f�������`��m���(����1V����S�����j�V����������R������:�q�|�������r4P��|I,����`��4T_�S�K�<1\K?U��g�
uRi�q��o��}WG��������l���]�_�R�
Xj��������J4>[�M*?6T�vk) ���{`�o]�mm�q�m����\U������������~s��K�����[��Q��C�}�%�[��[�;�?P_/u�Xv����\�lwI��������6Al�h����+�����Ht�j�y��4��(�h��^�V*�_�"��*�X�R�����=ze7#u��,�,�y����
�}�����{�o]�d�d��q�q���0�D�j#�3*y������)
_���5t�n=�3#7�*����!7H�O�m)�U�T}�k^<"UO�R��������e�L��o����:Q�@:��^1�n���B	���IM��\���H#~vv�b@V.I�����di^�~�HQf��K�
>��$��>H��q9��Zvq'���u�a$u7���J3R)w3L�a��������f�L����7\<j	&p��@���+�<��I��c�Q��cF��~��JCY��<�N_�3�0w�$�SD�a��L]1l)�����������x$�u�����_C�r6�vr�K��������1��������h��������~�������x��������k����|��������9al�����<���C��>]���/^T������]|�M���������*���l��������"4���L����P�M?����bs{h�Pm��'P>7w|�obu�l>��{�	��n@4�����E�d������&��"=8pWEC���j�V��X��a���L~�K,
�������u���}����,�-�qm�h�����kWC��6�#p�D�������d�U���#���-�*�t���%��_�"&�9�}�-���(k�&��]���?���:��>�><��e�z�V�o� Y�B<����������g��#�x<�%pv8$����V�Q�Ydf�o�N	d�C�v���vh������@��*OM[MA/*P���\������U�5g�y/�J��P�����?�;R������h8<5�u6;�����.�9byLVM�r����F*�n��-ir)CQA��5���57����������)�Ao�5OZ%HrNE��T� YU<�.\�������,�=��%����0�ur����4��Yf��5Z����B���0����C��sC>�\�OTC<(D,jnem�"��OE����u�	U^'e�^U@d����m���]�2��T��=����S'�J��Z�2"3�R����\.���BUM�P'�K�
T��!
}��b��N�����U#u�@�2�
�xL��p�2��Cu�:�yf��-r���������7��2��Oi]��R[����|tn�9��N��C�Q���YK���:�k�W
�}����U,���=��[�E%���C�"��A-��c����$�Y�G���%�k
�W.GN���2�U�U�T����*E^H��yk�<�D��U���hO������I�.p�pem���UB��-w�G���j)�lv/����^�D$%��Y����0�,����]�U��4l��Uuy������3H?�nZv4�[P	��%
��M�E�P� �)Ryf�X)�����,Xj�)h����G�����9�u;������z�.u�!��C5�3\�����)�n��G���)�C�����u��))8�9R����Xd�����M��{��P{���>��������+��A)_���bw������uvB��;��V����l�����+e��g�nz����r�/_f��
�?T��+$�le�_�]���8N3R�&�C�\G�p(V���W�����I�(�8�W�yDY�����e],���(��%���K�w��IgD��5=T��a��-���>����h]�G*Cn�u�Q�D&kue*br]����c�[��6l��#J3�W�9h}���f���L5W�%X�A�7~Z{:��X����:���G>u�G>k4��iLq����a�f�����kj�;��M^�x���l���u	M�!���F�����������kk��a���������j��V����a�������k4-��@�ih�b�te���l�U<��a��P����l;\��6
}#\�������Q��
W���(�Z���9�����L�._�F�;?���5`}{2�r��k��P�1�{<K�u�H�������0U}�uo
��5�:Q����/.u���R�M�I*�b����/�xa�n��ar�3�A��	���=��=h�;��l��`���ZQV=�N��1�:&�n��a_U:�k�T�� 
�F.��N�-�����Jd�ZZW@��p\$����A�z[��,J��?���������.;������kF�4���K-����?���j����\�,wr�j�"z�h?k��'�&q�9Y�6����nD���#J�U�:��>��]RY2�w�N%i�A�?Ta�o��i�K-�Y,RW����Q�a�mG���uFj��If���h�-�W��*7~]4e��B�-�6�?��u����'hB]����d�R�B����i���
���;���ii�{����g�>7�#=[���D���nI��(��?/o��--.b�KJw���<=wR��@]�������0�s��?��s���qeJ:��%�����9��-O�����B6FCL�jx@)�����Q�H���\&��"��5kn��@���9d��F��^�HOQ��^x�5������b�����L`xs����R��SKV4\�.��%�+��|}����Tec�-�����Q+Y��bL�\C�r�F
�u��hK�z
����8xi2tI&p��6����YFY�`�*P%i�<�*�+���eK�X�d����������DT�K-=�5k.�q��z��m�N�Rzz�/w�"�\gyYNP	��M���Am5��4-y�����bd��@��i!f���:��DM��c�r���h��i���������I����T���?��d������74�B�W:������)
"6j�Z������;��t���q�5�k�����reT���d��k6�k��yFf��5����MiJ:����[2������s����a��I�~���C�.[QD��HM��e=��k������qb�Q���?N�b���4\V���`g���jVgvg�J��V[�6�h�[�����YR|7���z8uY�6�[��yL ���s��m�P����W@�"��n�U/����}+�y�����>��<�W�>T�eq�xT�N}��YT�!}VS�"����w��P~��� ����(����V����>�D�,��@b����Lc�-�>��W4%M0o����B1/��8#cxi0S���Qw4b��gP�(�5i�Gm������>��n��X����I��k~���c#V�����(���V,h)�}>T��6�cp'^RT�������f��m�a�����-{�	x/�~��B����\��K�Y�����*��a��zBJ�%�+`�d�u�������������zX$���]_cv\�m�_N���wkG�����������<t�����=t6��7+����x#��oZ�Z��K*�|��j}j.o�[�
(?T<
�������*n��?AcF*Gt=�iC����Q�P�T���T��z�����:��Zu�E')�v�h���87�.�,���`E��y�$�� 
��?�%I���(����l=�����R�p5�WD�<�������g��Q���n���v7gn����9�~7���n��'��#Y%���|���>���9�J���[R9[j��H��]i������������3����r����������S �|
��O��=���|
���85�'=J+��e�������������r
��������S��z
�QO���)P�����W=��?��o�����8U���;G;�j�@��N��W;��v��������{��O�>�)�W?��~
���)��S��8\�����q���k�.����S`���L��e���S`�y
�5O��}��������9o��O�#�S�p}
��O�u�����)��Z����N;���]���n��)��>������O���>��}
�q<��O�#���������v���w�_�O��?��?��S�G�q
�h?N���)�c�8~|�a��~��q���Ig$��#�������M��$�pi	��n��>����O����}
�����~���O��~��Q�S��������������8U�?���=��:��}��s�KZ?�u�om�b(�
P�T�F��i���B��"���
v	�CW�m����x�+^�`!d\����
�����0bHex1�����*����2Q��dP8(5j)*
u��B���Po�:�^���;!lr`�`�`a2ab�$����;l�i�)����+�S��S�&���A�
�	����o�,��������I�yS�Gx��M�#
%�&�SVY\_bZe�h1�0�4�0�0�0�0�p��}v�Oh�����-��u$����M�����b~K	�ME�����*����;��[]i$��!�������5��go�O�/�l�Z~���bl���)!��������S����'�o��J�\i6*�me{�5�?�e��E�
b)(+��w��D�
	�*���o{���
���hu=���&P)�{��Q��:��S�oAe�V������{���O]���	�T���H���1[I��[v���e���m�Z�c��di�w��fa���/��m�@���C�����?_}��]W,k\)��
�T�������f�~�H��-[S�Y�|�wY�5[��U��(���SR3YY\$��
���sAY�B���np�0���Zj@�fjp"�d5sQ�
��Ek!��`���K�":���f���Zae�Ri�2l�[���R1���
E�5�g���m0|h@���[��~�i_����4H&;)��R+UT
��}��R4�L�C��g7��0���u i0��}-5�4�&;��Q��(S��
J1�n.Y�{��r��U�h���)�C�r/�n���������U��%�QW#u+��jr�3N/�L#�D6f����f�uEy�IT*M^���S��/Y�I?��@\��	�$QWE���R���l�1�8J�vb���.�_�mW��BYl�0��xY����^�kO^B+m�Q���cY$�����
��k_���\���<>��\ix��Uu��T�e`����LB�L�����t@U���,l9����"�|7=�p�Hm�i���W��\��0mw�u(V�����S���1����|�5Y���;����-*�:*x����6���!:Jx�#��R�������gR�1
�%V������l��k���g�OmpF]:�(��";s�r��g�{�}gCW����wg����M�5"F,u7�&�Xp��u������N���g�}vR��o��!vQ�8 j��3|k��E�T����OP����lk�E�[��i�5�+���!=�xt!�H��a�v�y�����@�j�4��5�;��F�z%����\	!����bgw�7��-M!`��b�C�*�^NE�e��/^.wkw��-!�s���9���5#�C�]���!����AW�Jv��
s4[�����ue�QQI�h�Bl�q�m��Z��1�oB��&3�!H<�"R[��|���C�����UYAl!��Z��P�	����u<eu�Hj��������%��s�_Gy|,���nsS��k����g���������5���-��4�D=R�]�_��;������U��wQ�+�6�14��C�S�u�T���Qk/��9�r!�=F��h�:�G+|��;6����V�������{�c��3[\�Q��pp��6�'H
ci�Q�iWW�e��%*)RTP\��P]]�p%�y�g�H+����.'e5���#I3n�����R�s��A���r�U�)��A�����rBYq�ur��l��J_�l�gXw`k\���.GF��z�'O��D�3��_	�r�����v��A��9�Lc�F�6*4>FN o�����V;N)o5���
�9q��aH�Y��
%����%R�]�<&.�P+��-~�����R>ST�_�b
����sFz��W�����C��@�	j���e�% +���dY��5J���p�\���&N�K��q�J��_.���������.z6z�����{v��Y'�x~�5;j�!������{
;R<��d��.��pT9�8*�����I�9}&��BMI�<��Q3�&����D�#����@Uvz?X7g�JkG�^�Y8��*�n��3R%���`���/<����b�P���W�x�a��T�Y F�#R����&+�
�������	|���R-24yiK����k4�wl>^��y�~G�1#�F�B����'�Wl�:P�3��pQ06;
:fR�"��gA�;Fx��24�K����A�m3W�y�� b*G�}h%J��i�F��c�*��.I�*wJ�X��8�������a������;+_���v���N�q��Q
��+�
�j<?T~�I.��S8f��3F��x'����+�>�O��?�>G��.I���.�`�J����)�fjlZ��l�<C�������8�����N`�%7�Z�k�l�*-�j�.��c���5U��������^�l�U7������%QGr���7�i
���z-�S��6����UT^*��@;Y�=���RD��C�Y��U��=8����W@�q}���<��N�8F��p���:��l��W1������V��`N��Wh
�4k'��#4��
U�l!i �����=��P���@��E�xq����b}J�+�}�)��0���������V�U0Z�������������@-PO�J���!��N�`���SP�MuC%��X*&A�Z���i����n���,J�8�\	�<��h�yl�\�����q�P/(���b�
1���Y����W��J'�H-�-[����^�����[yT�;��y��1C��Y�;�������QH��k������+C��Jr��~�hD��5�Q�i�c�_��1��]���I�T�����.��"�%N�^(����kVT_j��U��11���r��
��d������:��bk�a'4��S*����T���54�K]���v�p�s,�`7�"W����}�y��D]��$*P������%���5N�&b,�`�������Y�����R�2�3�/�����]SrpM�T�w�����Y5
[E
���R�+�6��H�������;R�x��k&�v������|�Z���@W(7u�,b�3��qclTbT9����m��:Dc��an,�"�~b����P�]�����+6
u�w������/�q�7�3���ic'�o��W���ah�/8�Ce��B��:���e�jNO������i(�H�cwR�D	O��j���C�N��v8n�%!��h��$�+��%�����o���1�/����oC���(_���e�e+U����K���n;
c��Db���XPi������
}������TW�����d&/����%��]Wp1�T#;���B4j��;*4�+���W6����^!���qW��^9���}-.K��i�y���
X���9�)���^��(5h��8-	h�	0�����j����H�4	��&���6�.������R��~a�r�RH=���`��2LLB��KF%|��� ��ZC��z��w^6h���O�%lW�������a��j�d�7dv���w8a96.Z�F�zW�no�������F��k�;T[�`�y���,�"�J �fmq
����zY������)�f%�w�������7-��H�Y"��Ll����.V�`M��O������| g�@�'��.�1�?����6-%��<C*Y(Y"�h%��F����XK���^>������H�z}���9���_��DaV�������sjX���w��R�������8��G�`��vf���bJ�Tu�V��%
��	0Z�pb��A��r�������9�)�2��K��ufd����n)�j�WA��:���ZZ	W�"Y��)�F���g%��p�+��w���P3��d?��� mH��|����j����&�������5q����)�������S��������������PIf0u5���&�x�^��Q'�6��s�8\�M���R0w��\��C�����D����#�u�/���������*]�k�_�����P�p�hY��E�����fn�a&M��qx��&q��#nE��hh�r�?��)[���,����JP����M�p���{h8��0���u��:P��������#J+R�f5�o�����F	�����b������F�
1N�Q+��pMb��=!�������P������:��C!���L��h]*�8M����YL���@UC����4>�p�@Z�b������HA&/t�2�%��2�f��5S)�,�~�$z�ot�;�����_��*��\���5�m"f�M����/$z�-�>���X��\������tmW�7�`f�6��b�^ f���,��=�,hY.����@cGjb~n�L�v�JI���"X�s����)����`M\Q�MJ���>��T�_fYP��u#�z��8gr�)��|��+C1U�Hw��9u4����rCP����2����{�p�r�6��8��
�������g�2�=�zt�1���5��bkI��I��=_��yc�<Y��������`f>qpLv����
��$�!���[P
q���� J�]�r������%l�S�-W�������o-��!#��"5#C,�f��:���
d�N��O��X�2j�S_���QWhT��@��Ch#�C���Z���vC����hm���C�;����GS��]�6�6h3�&h�4�����@~hu�r�#ZgY�=nZm�0~��v��Ba������&����
��<�~��fVZ]������)��s?�H��,dW����e�5��/��������m4#�;5�#m�f�08YM!�Ok���&[��&�.�{I�N�4��r�oE��	X������60,m��S��S�;���ZV>���c��C|��A�;��3���5����L�)������
�Z	49'���"�f[3�_�
�n�&�m�;E{�v# �Ui6����/��5�����n7�����F��~�P�!����4�`�r@��G��a����Ur��L����`��rz��Mn7���������!�o�0�*GE���#9����~�@�f5�2��!\8�w��o�r�\&r���������R���@���9��>�{�e�+.����XI+�%)P�h�~}+�}(���<��>ur������-�L�}�"'�}TL�r��,zD�����p0�g^���YL�E[���"�	�����6#m����Z����s�Yp�������A��&A-�f��O�$�/�e�����M
��/�4c49��Sw���|)KM���UZs����W�h�t�� z�b����{�
��i����.*{v@
>��f��:T���3
��3���rQq����\�>��P$�tN�gGP`����6{v`�8���0�#����<?���k��(�������-����py��!��[;����8��0�2���4���!��<�*!�������0��YVh!n47��1��7B�Z�I��f��d�6�C�hkx�[��� �5xC��s�q+��!����?����8_y.��r�Y������&�����4
q
NV3�D�F���!T-ti(������x`�������0Z���u�V��@��!n�1
������'��+k�[y�E��8�%alE�q
qm�HC��t���6C�:}'h�P����4�A��{$q
��V0[����X.<�kv	��h�����_@3k����E$+&��A���?3��cW���2��t<��*��V+_1.�[�g(��p�c�=��d� /�.y��0h��j�W|�V2���)�2V�������m��e��,Lg��.��)c�`��FZzhk&f�A����&o�i��z��U_��9�*���~�-�I��f��CI�s/	2���*�����yM��*��H���K�qG��Q1�=��ho^#�08��W�K���Vq
G61[���=5.'�/d5a�g�g_��;���$�X����I���R����x�������r���}	�y0�zih[�$x�k�c�(c\�4y���|�5�c�N��5k��R��l����� �yi��� ���k�����5.�����t��l+k�&����/�[tM����o:3$3�z�aM�r���5�m�����Ru�aj0���hqM��ai����TCE�k���5	^����5	eM[���5IO2���9�yy�J��.;=������������gn�u�a�3P���-�@��~�5����;��h������i�h�����@yi���H-���9kN�'�F��~h�r�V�q$0��K��b����ym��gXS^��@�)�'u*���o$-����$�6~�����q�P��+��*�vD���}���8~�qz�%S����]x��-������Cu@��:�8c>s@��n��/��YD^h�H���E$�:-."/��t�Z��VgY�=,"{�"�����u6."�����~��O_D���vV�Ed/ai�H�w�[]���%,"�e���$/F��H��-."{�u#i��{��@�E���j�7
\uZ\D^��.{Q�ls���*�1���2���(I���o������:�"�n�����e��K���E$��r��#��iqI���^���Vy��e�^�E$�]si������x"iw������%,"M+�j6�7��|��mY�L�����)��^������G�g��n���C��7�m�Nt�
������L��/��<���u�k�3�j�P��������J����Eq7�*S��MH��f�'��5�/tw��&��������&
��s@e�T2��oe��>[�����v����k(�w�)P�6��M�h ���{F2�.�oY��x!�6��GX/DxXQg#���@�Bx*-[�^��pgu���2!���`#{-7������V����ldd�3�}��5Oc����"�S�cl9o_Z/c���&r3]��(!i:�9��l�S7��|f�F���*����p���H�^0�6��#�x�@�-��?4��h
���'�Z��F�V�-u�o�;��3\�����%;p�hu�Rv$��
}F��� ��
_e�����`�=a������u��V�f�q�7T�SW����G�]o(�z�a�m�Rc�0J#q�dh�	vW��SW�#������a�8 na�yp*R�/6Gb���?�`�A�0�q��d8�=��L=��,���k�6���}���-�=��s���a<Y�����t���/���b]N���u|������Y�x��?~�%���|����M��[gR����X�����5<&����o��������O�����/�/���
vAZ�f�M�P��W���g���;@��:���(`���*���}:��$��s�+����6�g`��dzu�����^�5M�Fx6"��7A����������6����q�O������$�g�7��qH�k]TME���	;���A���4BJc/v����r�&���b����Ql�����d5��������\�#<��V@+;�00����6E��K�>�d��0�iNO/r=,3�T���D|u��Z5����N3�=���������'���?��	�K�����O�W	�X@������'d��7����������A���
4y�H��T�w�v���v=Zx{F�{�"�c����J+^^�nZ���9��&�x���r���6#m+�
���}��9�����\��Pp�KQ���@�k��Z{��l��Y���_�[�`��8����qg{:����O}��9	8�h:Fl�J�I���4����T�H�o9��0�x���l+�����F0K-��k���<Sw�^�����o=�l��x:�L�)�M�����7�tF���4���\��r���:�=�mZ9�������I�����l�.`��/��%�&6�ON����������R���u�y���:K�d��&���(�����6Q��c��FQl�����"mNQFu
l
U�tn�G`�]�����rj��K���i�y&��Z���Ly���Dk����	=��&'����m0k5�B���	��NKq�o���V�$����$�=M��v���9=�%z�A�|�e��=�Yh�I����H�YV�\��)��J��A�O�0��4]�g��/�|�������6_�l2�;U�d���X�k���QQ��A��65({�M^+
Y�U��A��"3�&W�0�{n�Z�����$��(�&�W�D�,�)�����y���m�}3t0<6A&�����|5�d&�@���SO\!�����(�)��k���<��P�&(��y�
���P�����S�b��
��]L������a5�me�=I��Iz�<��/^�����x�Vi#����x�`�����9e=�u�j�=�e���U.�J���U��m�0G*��=Q�%%���K�)(Ce`��|�AQ���:��X���G�U��W�����V�h���Z���C��x5XU��{?�H%�0�G�y����V44��43m�f��,�d�	AN�
2UH��,IV����n
�YA�o+��G������H2$�e<�(;��� S�&S����-�����kO�����^)</B������43{
�gTc�����C�f�nV��U��W����Ot�h[�������Ng�q>1�`�:�����?����R(������
GkC��C�c���L8���Jz8M�
�Na�v}.L��F!�8��n�L$�6pk��i��V��?hq�����y@2�������8m��E[����6����x����Gnf�����t�;�/�i
��T���2,Ux�"��5=�jv��(���z�S���2
�B@�����\W�mp�#��J�I��|9�����)����2�S�> ��:��p��;`z�Gfk�<��?��h�u��DC�
��hC7�+���ZFAw��
�1.+m����Yf��`�D��K
p��0I�/B�8�	<=i��
�F@Z������uW��*�
�4���6�,��XU@e�H��?U��&������m�#u�K\�"�H�"0�K�K��a��3��5@�F�~h5���Pg]���S���6b������E���#��jaH[a�����#-�����l;��K��������xj"��,�_n&4��nM�s�t2��|W�G���������W#g��	K3�������K��\v����<��%M����/�si[�tjk����.#?�����Z�O���-��c�G��6R�R��_XV�����e^A���P
�m�5��Ba�,gT���n?��;^Mg��M�*dr�$��&�za��k! k��W��?E��=.��m�4]�M��L����<2e*I�O��ZP�U�a������M�9�^ki)dg�C���	�F�
�k�&�~���[n�
�u���1v
��0�M���<t��4��5V
,�PPs0�
&y�������i����C������ L���]�.���O�B�Yey�'�P�r�e��i=4�U����I�Os�m�r�h*�mB�q�H���@��va�z�����!Y������"��4�>UhS!��?]B3C�g�r��C�����V�!a���)��@���1U5�|�J����4�����]g���f��\�FK2|���\H+�K�aiEuo������`-y1��sx~���sX�R�K-�T��?����������]��K�;�e(�K�Cs�_M�g�f4tqOw"�94�|+�����YR'����p�/7�����5�.L�)`�}7�|�$r��,�����������������.X��L�����B@��"M�� iJ���[4�x��6����Z�dc<��~��G��>��+7������x��}��"N�"
4��B�%�X9�Q�����S�hx����FHC�W����^��;?��9����=�G��zE,�W��?YX�0I��4�*���F�x,��MU���73-�����i��,��Z����*��1�Tb�b�������Tqg��cvC��t���a��/�,��bb�,�2�K��x�3�P��.H�M�_Z
�L�Q'
�H���<3�B�-kr!��Z�}'_9n
�s�3�����DZA�1i��\����
MD8��:�4�n������i��VX5v���~W�7h,�����g����n��\�_���a�=���(m�`��b��������"�:iE���Fh/-�:���L��	*��G�0�dtG6����,��!1t��.�Q�"MLL�������,�Y�=Ky���@���Z���g��Gu�!���A@5��]B9���Y�S
SG�����;E��G�7���*�;U����+
�}>�������mf����M9�v���%�!n�.!����/!�%���KGW���U.!�{	���?�B�����w��T�����;�8WZ�������+�u��L?������}.��>�o��#�y�S ��@�+��g>N��@9���V���(��e���o�{9�_�(?�)PS=j��@m����u�S�~�����z~_��������)p�>��w��v
��N������v
���4�S?���������}�S��~
�����S������)p�>N�����;��]��)0����9N���)0�<f�����k���<������s�.a�G"����8U���;��S`��N��s�v����������S`�}
��O��}���}
���8�x
Y�G ������S�����������~?~��������~�?��S���q
�������_?����q���$g$�N�i��J������v�M����5�����N�_�%?���^���#�����t�p}
����� �J���U��3���3<��#�������0s�;�u�p���D��P*��y�
���)+d,��+��/����A�yA=| LB��E���P��`�0\:#�T�C�a?���BP9�(PQ (J���Q����PW�.�*
���C�e
|��&&
&
&&&�L2L8N���7��������2�1�9�1�1�ah`�P�h�������������!�v���(�+�.�1�4�71u0{4�G���8�P�h���1�a�������!�U��s
�M3��S� ���g����<�����x��@|fp�-@-W��A��|r~O���i&��MY�O���U�':����_TE�f��S����l<�q�����_�����${[R��%�+���hv�NCO�\&�����"-�P.)��_���A�{�_��������xyt*mE��!���_��f{��U�a�]�jI�������_�=�������]�/
�v"d���G
�!":,+
�rS_��R�b��D�E��{]TB�5���w�?���������#�$��O���ms�4�P�x!��b7���\�)x|g�.�?�^��j{�U���s��i0/�3��T��,��6�l,y9� Ry*`{��*��R��34��eI����4�.!��>���z�![Te�����d�P�9;��`S�����v/^�)w����xL��FI^�-���w�=m"f>���I������9"4�x��'-��S����'����i���v-�k��� c�������d���h�-��IAP��O���dF�n�P&�\v)���Bn��^���������^�H{M�������O��-�E��&�6��4���M�K��S'���(A��75P�~)�����A�fj�}�>��y�y��h�2�����~aXl>����]�2mN`�,�����c���]84���"��D*^�D1��6o��rC�G�|��
�&���)�����G�J��T�y/�H���FV��������g��y��5�ei����gb����I@;�I%��S�2x=V�uUT��H�i��5i�h�w�{�?4��I����!��^
^7��K��V�C�<�4��W����k/�r�����4�D����j�W^?�	�8�Nl�7G@8b,�|�d0=�h����2yi�>���<����� �I�����b1���H�E�P��S���{(���dq�|v��������9x��60�>Hk���4q�8�kG~�aZ��G�\�Xjm*��������I
�����������+P>+O|��;m,J�8L8��� �����i���w���o�����C8l�98p�l��2�8��4(g�*��"���/+2Qf]��Y���[�5r8p�j�|�ibDz	����j�h�P~�����?t�� z��0����y������Z���������/\f�������TD���8�	���Pn�.��@T�c�����\z����������KN@q�p�-�N�P������i]�j~X����������Z�B�+@�YY�{�3�g l���:�)x�U=Bk�����ND^��h�iW���B2��Y���4��#��k��{7c�m���x�?P��O�5XC_�?@��n{�0��x�|�~/�u��
���k��n���	�8m�0|�:V��>*�Q���Q���������q6�8��S�A��nW"7��������.��������lm+����`���kS0��|�s$tW���w�����������o��m�W�����`�K��C.Y�����H�'�X�)a��;�~�l�}�!�b�5�p������S�(U�/���9�g��d��g|���f����hM�K����/hEN�6�������6�U�"/y]x��4���#3��K�G��KND��"�Y�^�c��������vW�6�������.�!��",�'gX`���-z~���������'O~:��7�N�
'�w�Gn�%��\
�R��k��p<v����+��;�ex�>�[�Y��p2�9Rd�v����o@;��\�>
��iK�_2V:3fm]��[x�}�����8W�_��Y&.<Y�aX����%��N���K����Dx��#F�y�K�����b����(�g>BI�%+��'��X��T!�����D�>�r}�i�rA�2���/�����	C��]a��}`/�m�i��IFz�FF%+�v���t���`\�G�� �\��dF��8�c0��`��V3���-(�����L�mE���g(7�]Z��(B��Jv����|F�{d���,�sgtW����K9 z�j��ZBi���"�-�n��#��<b�&DHPx��5#I�����k��s|z�>�g95���x��������k���K!�%X��V"������;+�+6`�5�4����a�����.������I����>Z/�f�q�@�Ik��\�\�(E���{3:v��&�`})"W���?�5RE�z�AG�|jC�R��
������AV;)�*�M{Y��#5c�_�;��ax*�������������ci�"H���}����u3j�m�	_d�(�TG�xq�����u�t	O}.9�yQ���e�.������\�p�R������o�;8 �m�
�X�0�r\>P&���Ei4��pv��D�����Tn~_%��cb~o����
����4�����-B
��q���u(���*��W�}�$B�q��^P*�������Y����W��:��"�����|*hq�w�,UL�-l���n~u���/B�cF������ibW���<��P+�r���cI
te�Q��MyQC�j4"����Q�t����_����|��:&A]mgG�s]�nEnK�z�PIz��2�fE����l5_Q��MA�
���q� [D']h���������ukK�?�c�S�Z�������Y�2�KC����Q07���vz��Qx��b�UZ�*nQ0b�Y��D\�X,�#����a~�d_d_�S���E���C���_���8u��f
[��<nGT�K��L�[�l�6��f���;R�x��k&�v���5[���h��%��B����e+���l�i0
�y����a��^R)�u�:J���%�P��������@�l��Rjq�%��:�;ci���o�P�pi V�(�D�M������1���_p*��|y�zq�YW���d���O���������B������0K4��t*��f,E�[l��QS�����M�W4��D����J�#���F	Y������h��.�]�N*�W���GS���1�T��rO.�F��W@kDj���u���4�%��S�W����;�JW��$�@���0*id��L�]�"��	�x�r�m�G���
���=�2`{�\���mld1��y��_��d-V�'5�$���?���gM��T'2�&��j�|V�G5
9l5~T/��"{$�[��i=zn�_�Pk=���_��h=@�����'���9�z�"��j��?�I��oj�8Bg& 7�B��
���h]�X�ef�u}d�.5Z�'�@�RS�u}b�.5Z�'�@�Rs�u}b�.������$��OlkR���>�
�I�k��.�&5����3GM���Ol����A���:�)"9�i
�o��:h]j��O��2���>�Z�Z����u�u��>�Z�Z����u�u��>�Z��V��u`MjX�'��5�u`M�X����5}bX�Z���u����Ag�'�A�R��u}bj��R�P�A��u���:h]�X�e��u}d�.�Z�'�A�R��u}b�.�Z�'�A�R��u}b�.�`��>��I�k��:�&�������:��O�kR���>�:s�:����:h]j�������uX/�|bX�Y���u`R���3����:�����2���>�������:�.���#��xU�X�d�5}dP�Y���u@MfP�G�5�u@MY���9Y�'��������������y�����s�e�:m��s����>���g�;�T�[�=��,_��  �v�: ��kJ{�{��8h���"�.��w�O��M�'���J.�k��	�mT�0'>6�\�g��
�
�/ArMX[������Y.�J{l����&�=@+�V@�&���:��w��Y�k����������cn;�scH�\ ��CV���{�H+���O����d9W(ML�AV4F6���LN���R�����X�����
��O���o��gh�N������d�Y:��6�Y{z'��Y�����E��@K��;�R/�2�M�f����<����-�����@�*���Pn�dpx&C���V�E���d��Pxg���H)LI1�������1�1�����Bd��!K�N����A�S�75�d�:�@��'��I'C���p�eQ��}2\�u2�r2�����q�l2(�N�W�)+�E�����d(��J[#L�bV�F]f.���=�JR��N�*��������Rc2T���!�P�@k+h\�?u2�5�E���!��v��d(������N�"�ll2�(��M�V��Gi�n��`}�d�����]'��;XN'CQ+.�����&C��ATxSL������d(�����HOL
&;&C��G6����d�<u2�����q�l2Te1�>�Ay&�T������pi�r�y^@"�|C-�D�~8�SF?-U�������,�AJ&��c�)�w��h29G
Zgp��3?pY�W64�,���������f�������l;,�\A�`���20��
J����Gi�T���.'
RT�;�"����p�&4IE���C[jBA�Jh�4��\Sr�%}M1UG����vf{)�R����N5���U���!/����?�QT&�hS�F�K_D����� �@Si/u���3�|�NK�v����$G�SC����� ���9s�����i9ua����@��fZ�&��e��R�f�b�����j����HsQ��6i�ly���j16�@�\fE�f�-�q��U�\���b��l��3���s�Z(D��3.�q~���Tq���0�U�D�H��
�_���.|��a��C��%�L���k*�R��-����`�4$����X
�iQj�4�����u�VBCt���:�^%1A�������{��K�.�=�3}Wtx;5j��,�<.km=��C��Vb�t}-����������F^ ���Pr�l�� ��n�.�gcR>����Z7�+.y����:��F��g�i�&o�sKA�=roE�
*/J��	�A]rCw�Y����mZ�B���HS��.1zBN4n� /C��mK����-�{L4�mN��+��/L�6J�(�A����E�_�\>;��t��T��|DN����.1�f��D;�����������-O���� w{
��>T�ZxpC�?����h478*��0�-�@��`�k	
Z�y����V���H�U�_J	�����DQ���r-��)pO4o����f�TS�=��	-��L}wO!���~Z�#(C���r0#M�����"EgO�lrV�p��I��Q50N=�#����MN}�P�<��������*7���B2�&b�[+��mN	M�&�2�!r�YC<�FGX8%���25(o��Q��P"�[��Ls
4����]L�J4��A��"�W�a.�Ls	2M�_i_�f1��:�VQKH�������[�%!�k��;��Cb&[�8���M���R�����a�9�$`2�z�(J�6��{�@������z!�	�A�a����#e/?���|�
.}�IF</����W�c�
0�0��D��kV��2�K�)�����{M�d%�L�Z�����G�3!�.7�������&|���p��w���
��i���?m��RM��x�������Y��]�0��v�~e�f��6|��vw$��1X|��e����,>
��
��E���I��]�,�M��s��jL�R��q�����g,~���1��I�m�1�������"s�'�t����t�2�J�g�
�=}����q�:4Z�4���i�%�]��g���2Y���3<������1�4gLg�@�v�'J��O��iRG\�^j���,���]�*"8�Kg(Qg�3�y1,��{�J�� g(������t�'���Y�����h��8.9��*�"Og��3������q�y�3f<vs���Gt�)�5W@��0g��
�3�\.h����\����15Z�4Y:C��n��UM�j��o����e�P��
�P��6����qj���ar�t�����M�P#y�I]s��	/���e�%���3��������Z7gL��j�P�+����ng�H9��4@�{�,6t���p�8����u�J���"�Ag(��]��[D��8|���w5������|-�O;wFY(����&d�6xLv�������U.�B{���Oi�9��[t�Y���pj�?�S����h!���:A>�yX���9��V�GU����<��S;l~�gC8r�F���Lr���Y�����gN��2�X[��VNP\��O}��	v�g��y���]�H`!������`\������:~|�+�u�u
�d��1Y��	�z�p����N���`\_�!n]�Eoi��y�_���+'M���.N���o��n���]r����k�}|vN���$.m�6X��z��L��T������r�.�����p�#g�����~�������@�[�ci��]Y�v�28��V:!�z���1���^��4�u�����-�>�����2�UL���� c�����[�g�LVrQ�0����������/���v�,��Z_�#� ~���;o$�C.�g#��&Y;?#���MaMR2RF��J(<����T��\�����Dh:+��E �1���m�1�	]��8�4�5�JY�;���#yk���'��]��s�,�)W�m�G��4L�x�7f�o��|+PMQSS��e�a��5I��6R�G���v;���y�h:|f���>�t���yPq�4���b+��<��]��MFc���v��9}�h�b�t��G�����c��t������?p���HdJgX$�������	ox�->��#4��E�(�/��4��)��.��+��bo.��z3��������=\�*��,�n���v�k��ue��-s�#��(xI#������&=2�RXz�3di�F`��
��1'x)���d����p^����1d���2c8��u2��a��D"1@�p^���+�5c8o��h�G�#y����lr���S\���I*9!o�!-Ft~1W�R�%��4����nr�������������Z5�:�3���m�o������b=�5��,[e�aI�5���7�p]��e!�u%e0+��y�^��-B���CZ�N���@��r����+�6���L�5�A����
-�	XTh�+�6��������E�k:l%Bt cD%Z3�{F��c��=�b};~C����R��	d	�#?��{�O�����y���1������ ��F��R]J��-5�`|r0f��
|*���\�Uw�����������/�n;�v��c H�^��nN��>�O�F	�Bh����#�cw���=�_������R,�h[���'i|���_�s#-������(^���G�I��Hk�@������mkZ�*>�H��������������iK�Y������^����k�_�9�&X�����b������C�(oq�����6w���8���5��]�S����~�;��!�\bC��86{��]�d�Au�>7���K[9����������&�Z�H�4o[��r)�n�_��y��slv:�~h�������0���qF2���Ml������.�q��*�<�V\������^&mg�|ks�~�����u��2R�f��q�$�R����CW�\��q��?Ku�����M��pu�8����C���7�������n$5sM���s�`��^�IO�-�p�t1|FG�����5 mz�!��WJo~d����Z�=�BJ�uu���j<������V�� ;����?���J'�S�O�s�[�FK�.*����K���=�p�����m&�\z��y�����p��z�tp~6�����.L�<�����]�_�?}�_r���9	�i�������r���rh�Q�_�L����
�x�����,��*7S��=O�QJ�wA�����������K�����4�vA?~1������"�3R��X����f%�&���m����V�������r))���������N���Z}4�����'-�N�I�D;���A�_��!�@8|e����k����������X����R�&���P��k�-��+�/�5��G����A��TH���E�=)�KYE��	�p��k��e�y\
���7=t_*em���
y��n�z�q����=Ck_oD�$�Z_�9c���@;5����hR�l
�_��R�
�����fU���������c�������6�����g_��R���%]�Y�pk^��5�q��mf����{{�"/
��;��!��7�����������>`�S�>�O��a��7B,k17�J0>�Z�z���q�n���*���y�X��K�J���(�{&��m�I�r��d�
��"���sQ���'"���$91DK�[)Y���I~����d ���k��.��Oh��n����)��l[+YS�b� �@������84������b���Ft��C���Y
d�3�%�F�:@�0��$���g��a]]�"�@�H��1�-Z��R�9�Q��IU�.��`�����mI���6vM3�g|��D����e��d~+8�c$2���������M�o�
�r�;��r�;���6+�����w9��>���O+
x��{��X���VoR}�rd�Lz'���7r��R���Z]V' |ep�&��3�B�Q���	9���P��h��_g[�b�mw9�7�8@ra�}X������v#�A�\:�qnQ�SZ�v�xNX���V*d��f�{4co�A�� �������T�v�2��XA������^.�VJ����x����@�Z(�����e��.���,H/1����������T;P3C�Xa�lu13rn�$}O�����~����*/@����!k�T�������-Y�R9�p�*�z���Wqz�
zT+��h�sEy��R���_�5�� �J�rVsXE��r �J����X!���W�kRg����	&}\�����Dp_�r��W��dR���t���R��\���
)���)97CG�#s?���8�X�������}J[NFr;����8�����Cz�R�����PkT��-u��)������:?�F�2:}�Ju�.K)&���m�_�+��_�s#G5VH�VV������S����W>���mA�_i�%n��/����y�*y�����U����'0_��W�Q���\�������E�x���?|��� ���-b�;�
�j�e��:g�����A��j0�����b����8p��#Y��e��?1����U�����X�Y�dl��2
���>N�|����qb����8Y���`mSa��S���J��?�C���Tt��3S�����c	�0���8�F��{�|8��Jrw���0C��k,Oq��d]Ua�{S�_�&�)��.>�04��	��� A����s���*	����t�7���df����H����t	��Iw�E���[�)2�TR�S
��K������Qh���]n3�Kg.����b���'?�7����������t�������J���������p��!B�=�&��� ���l� 1�5�:�����(��6�����VB�:���;S^���V<N��:�z9:�8���3t��O��P-/6�Xy�E;��v����+��C�?���3902���
�T*���i����Yc��=�:�������+���m<����K>9�4c��2��H�6W�z��zH����/���c�i��u0W���o�=��+C=�{F��w?Y�_KZ��aL�e�.���2��d���&	��6+xy1hS�@H%�(�����hf�Z	����M��'��YW�l�//�Q0)���%�[�
eG&�T��iI��
��@JJ��&�#m�lQ���y�e=�~��=�N]���@:������a�k��M2�o��U��c��.��@S�vH�*&�;����

r&�L*��4F3V�Q���������qL�EV0h��"��?8�bQ�<}sA�u�G�yi��'O��:���>~ eM��2T�S�:���j�@��E���r�e�d/b)Yg���I4Zt�p����NJ�9�p8���p �?7�v��e^�E��>P�yHw�v�3S�5�@SG���Q:�����r w���G,}i>W�@��)��|rS�L �����`����t_�+�(�l���3���
*�����_4(�sW:A��R
 ��W�q<��9�o��m�	������Y��O�|2�C��y��mu�H���?s��&=+c0��}�����:u����iBE��YQ��'x�_�0"N8�>-bG������6./s����>����%�7y5�Q�79��uH����-�=����k���a�����k9��>f^������3��j5���y��>eI,	��`�N��hH���(n����!
G���GsS����G�(���,m����%d���d��9�Fl�-���{���?EZ5�A
]�t��z�xb�
]L�^Gk���������5h���+�����B�(��8K$f!��7�����gA�Y���uv��#��6����Y2���uI{V�������e>c6zbHO�������{��e���o��m����{����m.�y�:�n�������-�f�
e�o��~�h��R��vH�J�]�K5�{����2���Lo�1n��~u��������J��q���������s_\]��)m��`�j��h�����j���h�'��M��F������|�j���$�n,3n*z �`|q��
�CJ���a(<����yT"=H�5�����s�,����PK�A��t���/�:e=�����0�d��Z{�a�7�R���������TN�9]�M������C�IWJ�i=u��d|~��!����R�C�R�-���7Z��=\*����<�_�c&��h�n���?��^W���������K�8������Z�g�m��\����o�Ty���!b���%�<9�AjE�s�y�9T�J�x�
���]6�{��c�e���E��_F�L��xS���R0j�d�8K&^�U���vQ�T���Yd���1�=D��-��
�f��dI����j���4K&��Xnn�w�����h�L��>]�����c���l��:�kk��tv���cx����$~�����_��!�@8|e�O�s�N�7������5U�p`�I����*>�K��H��Li�/����B��/Z���B��.U�P��^)�\��b���=�KY2�q��_��Tl�y
i�w=�M�T>���s������6@��65Zk{��0�|;�}..1c��!%����-���^�!�qZ��K��@�[�X;COu)i����,�
UG�'��{�����5�q����Kiy���n�i��a+*�8R�Z���%���p�zri���K����>z�|O���z�Keka�)G����x�5����s�9���z��&H�J��������%���L ����7�6�u�$�&/+Gm��r�gRR���f��Lx>����B������)0���;X*�ZMJH�kg�p:)��fe���������w��R���j����'�uL;m3
�w]�$n�M��d��>��)�6jKf|���^v�����I>�3���"Mf��}_�����V��ms�mY')���/�������Y�uL� +���uo;�I�G�A? ��|�f�|;n�%�-����Y1Z��f8����ye�@:�����!�g���ZL�����otO�^���;��D��|�,�.�Vy�L�hG�V�r'���	$����Y�$d|�@���,��5H����k� �}>)��d��u�A�OP������a��k���t�y�Pl�h�e|�0��:H�)��"�@V��RR �CBnP�H��9*�
�������"m��;�Z�y��DL�k�&n���x-��]p��L���{��H/�Z�y�+�R���/F�YbG���E���v�y[!�R�����j���Z$��bn[m���b.ey-R���@�f���&�T���T��TR[�,qm�_;��v-�Hvo^��'���#�����l��@��HJ����k�^kx-RfO�@S�rS�]��K���2A���C�9e���5���D�V��DZ��!�H�="�������n]�4b��pU��|�>P����O�|/�C/>���-����|J�M��:��X�q�� �?�#L6$bt)�S���A��5�L��sy���F��4�_��Z��&������X�"]��\j�w�
�F��t�����c���r�G���{��3��<�{�������6�n��zX����$�Lz\�3�;�G���z�������}l����NRn�)��;�u���V�&7��wL���a��<f�{�V���n,7��
Z�shgp�1����zx;�,d���E�IbX�R|��emA���3;��Y�r��8��z�,@�8P�L�B�r41�i��y��������63����|��d��Yp2;��o�%��'f��%C�U�;����"��|}��m�y?v��Yp2;�F�q�l���Q��!}V-dXz�4d���������'70��w�de����i�q�������'N��*�������b�Ky��,>-|Y��T�Tc��PA�'�x	n��+�3�����?�1���0����������nM+��l�0���P�w�����>�B-m��*%��&�SJ)�*.���*�G�[�m+u.���xV�
j��=����^[���,@a|���)�A�5�fJ��(��x���5���^\J�����7���xf:����zj�x�Rg 9���)}�1o[\�L��JN�3xT/F�R&u;�����ege�<���$��J��������_#���c�PK%W����a��e���19*�����;$��������|=�7XA�QC���� euEJ�q���@�m�`��L*v�uX2��U��A��Q��/����c)�@����*�^�Tb��i\/^�^�N�� h����G\/*V���jZ	����
�y�@C\�k�,�:�+��*�����
kX�lrK��UpR���iY��
���@-����k+��k ��
����H8h����'����~�����\�uUW@j\�_Up�
���*�YWXV\����Fad[�,�#<j$��:�����e�6���J'�� -V��b�##�\s.H�-!�V��b��/C�:��@:VsR������*�^|��I5Z��JU��|�����-��V�e8h���!�#m�K
�����i�C�+�+��
.�]�#Z�l�){�t^��h�l�m\��j���h��(�
���*�YW�J\���+,�
.�X9�Fad�=F:�d.|�-��1��o�*71�2�4�5[��%�}J'N�/��Y���R����������q�w1oK��m�f�l;&1�Ql
�m���+���/�����p	������i��Q/����+�1N)l���h���}9G�W���?�%����|��������7N������� �;��bw{x8iX�������x���i����)Ji"�����E�������*�}���,"����l���|2�U�SZ����^���y��k��R^���>����u�������
����l�s�c�J7���m���
�
���-�����^��^&}�[`��4WM:���u�����MZ�F���~�'�Z!�-�����&U��K4�"���v����`�n=��x�*����sjUE.��?0���]I��M������^I�����R}> mz�!��W�����(�H�xD����r�-�?������>n==���p�F��|��$���(���)El���8����F�p��_�g.���fb�9������?����$S88��t�u�t�Z�!������n��\�*���
�f%�7M����������k4�GF��R2��$�d!������-�zr��j�Z=[���!���g��eU��,���M�z������=D�b���� ���]u-wui��|�b�����t����,N)��]�9\yb~X��t�������|;�'u��N�.�v������24����+�]�t��i��b��������������w
+�z9�W���������uB��mK�t/^�zb>�O����R~���<�eR�HC��<.����t�����_2�MW������gmt�c},���+�0f�`�d�y�6�_w��t���*.��X
�����k��*F���m(�P�=�� ���^�xx����TX���ozN[�nj���������|���N���N�8zHek��u��[w+�=�}@��+��`��*���l�A\%QJ���!p���A�����5w��'����o��r���$�N��h������8.X9���#�,�e����R3X|�Gm����B$GW����d�l����t6���8���Z�����nO�������89�73�^�V����V����^
��"M�2��n=�Z��L�CQ�����P$���v��dP�l�3�����;���p�V>y3T����>W���vH��Ru�r ���u�&�)�#��sf�lK��u�
�6����6��qS�h������9P%����g�z&2��2���q�i�3�+{ ��^����V=o�K:_;�t��V=�(�h���@bS0n�K�}����p�)
�<�v1�cN0y�h���P�?�<
�mIHJ�t��	��zFH$�w#���p ���*�����d�Cj�3�_U�������gY��2r�Ij���QA^������VN9�0���U�D�\���L[�L���K�U�D|^�3��z&��K�/j��/
�/C�ti:P�T$��dU�Hg9��t��Z�L�W�3a
�����@n��S0Zd��-;�8]U=ZY�L`��X<�c������ZZ�2~``U���6��/�����@�j�h�e|��m����g�a�-!�hY�L�V=X�3ag���Q	�1�������@��\	/�Z���y���7�e��\I -i$6�\z5���1i~�1���'n��op���RDo���j�����8.���Vx������h��kc<�b��uu����>zu���6��M*����a	���p�����L��
2e<����o<2������������k�3^.�u�/QL���n�7a1C��g�1�;�����������k����7w��yq�x`�v�P�����w&����?q'F8��T�S��EHP\^�W]��-<�>����1����;���x��}�M�n1k�D1Z�Um4
-�?�����������M���"1$.:�w[K��]7�e�Z����pi\�dG���P���t�7��U���i�<������p�����B�00���]�|�M�������;s��nx�[dw��.��9����##��'7^vv�t���`����|L�.�������+(D�>��C��R*��1G^|?.�!��b0C�e��W_�������AH�i%T�S��k��-�$��t����*[�jR�7��:GF�
��iI�Ja�o�?�q ��&����z xZ�����N�����������[`p�������C"c��`l�x��1����6W�������W���mIkE20�4��������+�"��sT�O������������*Ji�� \������Y�B`U.��W��C�/�V���eZ	����5r)&��y���Y�tPJo�
DU�����
��D[�\0��p��,�H�1�Q���/�jY������n�5&Ge�r�P-�t^�����uc��r!����\�5��S�X�B`U.�����*Y�BXR���H�0�����ue�$S���Z8P�w#\��pf8P�4��*�r�Ek�Qt7I8���4T��������p�I�����Y�9� �V��U�BX�*d+8�[m�r�p8PgqHG��Yk�Z���}��c�t���U.�����*�������������^9��>h>W�@��G�U.DU��*�:�\d�aYU.����m�}�@C�j�fe�aPlK.��g��T���7�y?����������%4�X�q�m�f�'-G�
��!m����6r�|�nx7t��n�	�L~���3c2�/���+�������'#�|���~�V������+����~R|SnJ��q4\���$�=�R,������{ro�_'}��{��2��uoM�e��R�g��X�u?�C��K�'?tE3,�������+����fq��������#*)H�W�%q`h����7	A���dQK'Z�������&��k��nm�T��YY\J>L�+�L�^W>\��j�Z,M�A�/�"��7������L��8�/e���W�6��x8(�/���,�7�?�E(�KO�Or� }x�RP�_���CA�7��1����TH��s������Czy�[UC��Pz��m�"P+�m�1��7"�a��R^��!E���.�j�,��o�����k����.����	��CQg�ppw������0NZ����8Q��3�bv������v�U�^4��i���dhR�_1���=�U���P�Q�D����-��YN�R]�G���g�mH�����3��M��Z�y='�~`�+�����%���/������S���s2��e��q.�����>��/�B}�1�Ky)�����_��m��zxF���7Ju�q ;���sJy�xJ�5m�$?����=\*������3����vC�7�=t����]/��vJ�!��������~��E���s]U^������������7H�&5��D��bz�����mU�O�{+��s������A��{A��n�����������A�,���M�����<��=D�k\�D���G?��Kh��,\���������=(�/f�QJqt|�u��r�C����n[}8����o���*�uN?�<���64����+�fh4xW�������������{�D�R�.S���H��Li/[��mK�t/^���J;�1B�U�A�.�
�5~R�?�����q�`����_���*�_�����2��Y�������_?�j��Bk���g]��|{���"f��8��������i��%�~�q|��}�bo_���%���.��ph�xx�����q���{�\n�f'������)��}�����������W}\k�zHek��u��[7+�=��������y~Jp�A�Z��.�����xB��=�������W;��E�0%�5�K�"��1�;��'�~��)����0i�!�3�H���A2����XH� �+rI����H���B�����s�
)��.B��o%R:_;wV�K�1��a9,��d�K���j��aR83���0x��zky(p^�E��C
~����}m�_�
5rof��Q���R�]T��8�+�<��:�V���c��-��)� H��h�vRs���a���9�f�%��:G���f�6w��qC�j^�����4���i�����r��g�>��v������y����R��.��#q���[$}�|���h.�V����(rX�@��0�qh�I��������f5/�U�zk8����P�-2�0�%����F��<�y�	�����V�K��j^B+������G��j^���u2�-�Rd���=9Pg!���QAF����,U���-3>�j^"z�oN����%����d3^T����F�����A�����R��.�M�	��UI_:��&����7y3h���]5/�%��j^��@����_/���0'����T�Ca��Y.=�^���u�1K���y�w.�=n�j5/z2h����K���\a��R�y����%����uT����9��Ws����y���2���C�:
{�0�A�CH�.;t�E<�����S������|�kn�x���'���E�i�+�<XRP��?�RZt~�����dJ�=.����A�������\.��E�����\\E� IY�J�,�JR|��X<��M����&�sH���%�����^X�h� SF=�E���!��J=J�N�tB=�
7�)���m��'��D/^�Kj�q;���p��'��1f���p�e����������N>�{�_#
)OX�V�q�]�g�g��,.���/��ri�K7n�^��Y��E��vk�{�����\r.�����^W>����,��r�au��g��{�:���q{ [�62+*���w�9�0���ATx��_��4,��(�pwD����u���(�0\2�����e*���fI-,`j�y�=����f�O���jo���@<*LV��&�F�~����hK=Y���w��E��>�l=�xU�����Ze�a{D^@Q-v��}�-
6^�?O�*QJQ�
�l��i�� ��WA4.�������2<��.��M)`�/M��eh8�,�s����V]���
���ge�
�b�&n�J)�*.��������7�����:��R\$S9*(�)�_{2���S�m�aP��
�b����M�
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
139682
%%EOF
#171Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#170)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

I re-ran the benchmark(*) with the v19 patch set and the
following CPUs:

1. AMD Ryzen 9 3900X 12-Core Processor
2. Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

(*)
* Use tables that have {5,10,15,20,25,30} integer columns
* Use tables that have {1,2,3,4,5,6,7,8,9,10}M rows
* Use '/dev/null' for COPY TO
* Use blackhole_am for COPY FROM

See the attached graphs for details.

Notes:
* X-axis is the number of columns
* Y-axis is the number of M rows
* Z-axis is the elapsed time percent (smaller is faster,
e.g. 99% is a bit faster than the HEAD and 101% is a bit
slower than the HEAD)
* Z-ranges aren't same (The Ryzen case uses about 79%-121%
but the Intel case uses about 91%-111%)
* Red means the patch is slower than HEAD
* Blue means the patch is faster than HEAD
* The upper row shows FROM results
* The lower row shows TO results

Here are summaries based on the results:

For FROM:
* With Ryzen: It shows that negative performance impact
* With Intel: It shows that negative performance impact with
1-5M rows and positive performance impact with 6M-10M rows
For TO:
* With Ryzen: It shows that positive performance impact
* With Intel: It shows that positive performance impact

Here are insights based on the results:

* 0001 (that introduces Copy{From,To}Routine} and adds some
"if () {...}" for them but the existing formats still
doesn't use them) has a bit negative performance impact
* 0002 (that migrates the existing codes to
Copy{From,To}Routine} based implementations) has positive
performance impact
* For FROM: Negative impact by 0001 and positive impact by
0002 almost balanced
* We should use both of 0001 and 0002 than only 0001
* With Ryzon: It's a bit slower than HEAD. So we may not
want to reject this propose for FROM
* With Intel:
* With 1-5M rows: It's a bit slower than HEAD
* With 6-10M rows: It's a bit faster than HEAD
* For TO: Positive impact by 0002 is larger than negative
impact by 0002
* We should use both of 0001 and 0002 than only 0001
* 0003 (that makes Copy{From,To}Routine Node) has a bit
negative performance impact
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}Routine size
(NodeTag is added) may be related.
* 0004 (that moves Copy{From,To}StateData to copyapi.h)
doesn't have impact
* It makes sense because this doesn't change any
implementations.
* 0005 (that add "void *opaque" to Copy{From,To}StateData)
has a bit negative impact for FROM and a bit positive
impact for TO
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}StateData size
("void *opaque" is added) may be related.

How to proceed this proposal?

* Do we need more numbers to judge this proposal?
* If so, could someone help us?
* There is no negative performance impact for TO with both
of Ryzen and Intel based on my results. Can we merge only
the TO part?
* Can we defer the FROM part? Should we proceed this
proposal with both of the FROM and TO part?
* Could someone provide a hint why the FROM part is more
slower with Ryzen?

(If nobody responds to this, this proposal will get stuck
again. If you're interested in this proposal, could you help
us?)

How to run this benchmark on your machine:

$ cd your-postgres
$ git switch -c copy-format-extendable
$ git am v19-*.patch
$ git clone https://gitlab.com/ktou/pg-bench.git ../pg-bench
$ ../pg-bench/bench.sh copy-format-extendable ../pg-bench/copy-format-extendable/run.sh
(This will take about 5 hours...)

If you want to visualize your results on your machine:

$ sudo gem install ruby-gr
$ ../pg-bench/visualize.rb 5

If you share your results to me, I can visualize it and
share.

Thanks,
--
kou

Attachments:

v19-ryzen-9-3900x-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20240805051943)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 132932
/Filter [/FlateDecode]
>>
stream
x���������WO1����E�T	;�����A
�j#�3@`%����:��6�=���p�Q�����w������>�H���g��?>��~����?����}�������:K)������G{�����j�������S����|�o�q�����B>�=���&�	n}�y��|�{���pM���[ym���pSz�:��Op�W���'��+����\^%M.���^u�3�'��������/��n-�}�;�p���K�A>��_�-\�Op����������<@���u6gPP��>3���W�j��B=@��>2������f���:fe�z�z�����z��_�,�P�S{~m�@=@m�m6^P�S���3����<.���g~�Y���W�e�l������Op������pS~���P>�m�����oq�B��t"R���x�� Yn���$���OBd�N~��������&@vw��'�	��P���G!2]
'��S�L����{$�����d9"?�Y�L�����"��p����r/D~�� Y��x"��p��>��t2����A����3@��A���t5�}��W��x����}\9�>�q�K�C��}p�t����A.�q��;���A���t=�}��W��x����}�\9 �>���KD��}�nrBd�=���L7����!$��ODd�"N~�IW���tF���u��3"����F��;"������8�}��tH��CB�{$D?��-�D�\G�'q��>����8�}�Dhy%B?��-�D��G�/q��~����8�}�Dhy&B?��-�D�\G�7q�������8�}�Dhy'B?��-���������B��pP��"��
�rQ~�E�>����(�I!�'E`z)���,7���������B��pT��"���
�rU~�U������*������{�Yq4�G���-wE��G�_q���J�iDo�+������+B��B����������h�+B���8Z�����+DO�'���_!����W�~�_q�����W�v�����_!����W�~�_q�����W�v�����_!����W�~�_q�����W�v�����_�E`�+�����
��+�_!�}�`�W~�_X�
���+�������W~�_!����W��B���
������"�����Wv��������"����u�+���"�����������h�+B������:��J�:��>��-E���������h�+�~�_q4�G�����
�O�+B�_����W����h�+�~�_Z����+B�_����W����h�+�~�_Z����+B�_����W����h�+�~�_Z����+D�_!�E`�+���,���������B����W��"���
��W~�_������+�_!�E`�+���,���������B����W��"�����:�+���WM����+B�_����W���r��c};�����o6��(]�5�6]�ir!����M>�GG4�&�W>��G���X�&�_���=�GB��|Y}�|���w�M>n���`���|��
����l�V'�py���|\_�
6��
�q�M>>_mi� ��4�C>��ci� �WY!�'����W������7M!tp���{����X�}Op������	.:7q��=�E�&.:�'����E���=������c��\�k���{��nM\�yOp����.�.;5r��=�E�&.:�'����E�=�������C��\�g���{���L\�uOp��������n�<��������||��b?@>�����!�WZ�G�Ww�xG�����,��#�+�>�z�	/?�R[�|�����]���A��rC�~����
_@_feZ�$�g�i4i��3�r`�~]�cL����WZ���A�c~��6���X��4A?���S��6�H��V��=�},�>q�1>�E�'.��'<S�|rM�->�E�'.z�'����E����������]�#�?�<w��%>BF��d������9�#dtxNF������!��s2z�G�eoRg������>BF_�dt�����9=�#�d�6����2::'�|������#�uk�rC�~�����A�����6��'�|��D����
m��~��D����
m���������3����w���>BQ?��_��6������>����s��QQ?�N�Q*�g��6NE�������3���]�+�g��m����Y�6^E�LWPo��U>���+t2z�G������#dt�NF?�����~�R7�����K>B���U�$!�t2��G�_����"!�t2z�G�e�h��2:@'�|������� �����#��T�s|�\��*������9]�#dt}NF���\��1>2� �CV�� �r��E�H�]�>��6��f/h�����S�3S��[�3�<��,h�����[�3��u����A��oY��L��n���A���,�g���cA�~�����;6�{}����A���-��t�
aQ?��_���A?�n���������3��>�������U>���+t2z�G��	����r_?o��|d�aZ�o��|��n���%!����:�G����>���~�R����m�K��r^�o��|�����!��s2��G��:j���	2{?��9>BN�����G�������r�M�f���XG��1>B>oS��/>1W7�W[l�G���r3��A��qC�~�n����A��o[����Jc�ey��g��u�K���A���-�g���m�����7��g��m�o[���������A��o[����m���q��E�z�nCX����k_[>�g��m��t�M��~}�����i��j!��Gz��Z
�)!�'t2:�G�m���~���~�R7���,t��$��#d��NF'������G>B���-u����:=�#k�����:�G��������~�R�����V�!��-u�O�������2�>'�k|����V�!�uV�:�G��:j�~�[��S��uL���rH?&2��[~�p�q\�	�����������ql�}�$�;nl8�*�����
����f�A�K���o$n2�Cp\�>�nV?�;\#t�4���6�:V����U�
��j������e���r�5����j��p�����:�5\;x�'��N��q�
�G\�k��"����
�J�gC�+����Z�' �k����j�������f�z�����������g��+�NTcM��j�����XUtzX����)��;�+~�+����,"����-~2�j�N&
�?G�E���k��2���Sf����RQm�Y*���'������pm�y�-<�#\[tv�j����z���S�����Wm�����"�������gm�}����wgm�������8gm�=����w�fm��������fm�����E�I��h7�pm����-�99\[��.k���
��]���w�
�U[D|�{��x���{�W�;Z��ohqo�k[���|�^��~0��xm�'>�o��|�>��h��}��?�\��^��b�����U@N���#/5���~����1'���Cc�QV��G����/����W���l2���,D��S�o���~�����a��~�C�?�f��$�{�?���
2� 2����7��S��}s���s���FB�~������n����"��n����o'�;�q��m�t}����>W?4�2����O
�gY=�����~�g9=�����2��J�7;R��/��ov��V_W��h�\=��:���m2�;�������Q��!����R�C��~@�;D���?4�3D��od����V��rzN�G��d������.U������]���7�~jDiN�]GFb�����6���q�2���;�Zo��R�C���G�~�x�vB}l�jN2[\���	D��d��$*d�@f�����������b���R��������oa�y����7�c�B���$}���/$��J�w[�J���"}�l��$��*�7�R����T��ur��NJ%�;�~%�`T��q.�W�A���~!��S��s���N9%�;��~%�PS��q��W�0�G�~!��R��sb��N(%�;�~%�@R��q�W����~!��Q��s�����E����_8<L��o�%z���Pp�st��
%�'��9:������@���9�w����;�~~�t�IN�o?�������|�P�/�I�7���stf'8�9���Gt���:���	�w������|���/}���d����6��x��H�8]�I�i����4�����$��#�x?��4�J�1k�����+bO�%�R��E�,���
����Q���U��`iV��+��a)V��tMKglKg��tV���I�4/����b��+ba:�&��6��hd:+`e�f��bE�L�dh��4�ES�Y[�Y46��6�['�M�"���g��$*bq�D�S���I��N�"V�H4;E
���w�n]F�����H��$�$E�O�h~��?I�JR��&�HT��i���BE�*R�%I�(IKT$��"lQ_�@cT6C�u�Qg�Q�d���H���F�
�����6�0�z����*�6�X�T,��bElRg�&uV�&umRglR_sB����M*�lR�"6��h�:+`�:�6��6����M*V�&K6�X��Y�I��I�E��Y����&+b��%�T��M�,���
����M���M�3vh���I��6)Q�T$��"lR�d���IE�M*R�&��t�2"6�H�IE
��$�&%)b��D�T��MJ�lR�"6�H�IE
��ZLG����M*mR�6)I�II���"�&)`��A���"6��h�:+`��%�T��M�,��HV�&��+�����-h�j��lR�B6)Yn���I��M*V�&K6�X�T+;e���I�r����M*�lR�"6�X�I����Z�*����MJ���d�lR�d���I��M*V�&��\��d�lR��&%+d��%�T��M*�lR�"6����&%+d�r��lR�B6)I�II��� �M
R�&%I6)I���������$�&%)b���6)H!��$��$ElR��&)d��$����M�%��IA
��$�&%)b���6)H!��$��$ElR���MJ�!d��%�T��MJ���d�lR�|�>Y��g�&-m�s�#6��0@�T��M*�lR�"6��h�:+`�:�6��6���@����M*�lR�"6��h�:+`�:�6��6��A�T��M*�lR�"6��h�:+`�:�6��6��}A�T��M*�lR�"6��h�:+`�:�6��6����M*V�&���I����"�&)`��$����M*mR�6�6+I�.#b��D�T��MJ�lR�"6�H�IE
��$�&%)b��D�T��M��ah���IE�M*R�&%I6)I�T$��"lR���6�l��M�,���
��b�&+b�:K+��
���������(w��5
N�G�(8;�Z��lPrh���?��0�O��lOpdy��;���IN��$�'9{�{&��'bk�#K���I�Lr6&9�0�	�����%8�Y��D�JrhU��)��EIN���.b�&���������a"v$(�"A	��F�i���
�GP�#v�NK��A��J�f4�,F�D�EPh-���"K�(;Z��lDlxN�(�Z��lC��24J�.�V!(��{��"D���5HN�G� 8;�Z��l@��F#�(8�.`jz��$E�@�d��E�)(R����HkP���)d�$����E(MB�6�H4
E
X�:5�f!I��$�$E,C�h��
E�q(R�:�a4I���$�@$)b!�DQ���(�D�V�6���HR�N��4�X���T$'`+�#c���H�Er�"O�HkG����HN�fGF#8������Fpd8�����HN�v�q 4��X���|$'`?�#��IMHr6��7���?bE�D3R��I�I�"��H������t�-������\��[�>����t�|}:Y���bi}�X���bi}�X���:�F�����O'����Z�.����Y�.����Y���v�>����t�|}:Y���bi}�X���bi}�X���:KH���
�O'����Z�.����Y�.����Y��}��>����t�����@�������$E������A
�O'I��I��O��O��e�������$E������A
�O'I��I��O����Z�N����Y��s��>���t��>����t�|}:H���$i}:I���:?L��i3�������bE�������
�O���'+�H�ck-�8�y���hZDVh-Y����Z ��H��Z ��H��Z ����@`����k��
�Kk����Kk������vZDVh-Y����Z ��H��Z ��H��Z ����@d����k��
�Kk����Kk������ZDVh-O"�Z �Bk�H�Z �"k�@��@ �����@$E����t�2Bk�H�Z �"k�@��@ �����@$E���k�@
�"Ik�H���i�ZRh-IZDRd-H���Z �����Z ����@�Bk���Z �"k����@d����g��Y����2JpWx?}Tk��
�"���Z$���Y$���Y��U���Z �|-Y��@bi-�X��@bi-�X��@:9Vk��
�"���Z$���Y$���Y�sq����Z �|-Y��@bi-�X��@bi-�X��@:�Fk��
��y�ZTh-IZDRd-H���Z �����Z �c�n]Fh-IZDRd-H���Z �����Z �|-H��@$i-I��@<3Zk�@
�"Ik�H�����ZD���Y�����6Ch-�XZ$Vd-Y����Z ��H��Mz5#~z�O���n��#��C���u�	����r0�O��>��I����+/G�KFH��XI��U��q�?]FHW��e����h�(#�6|�I�������.��2iu�$#���K������XI�RV�$QFH��-5X2@�����$#��:��@2B����`��Zm�R�S��~��X������$#�����e�d��$QFH�hOe�d��$QHh��$!Y�=I��5��D!Y�=I������e��F�I��5��D!Y�=I��5��D!Y�=I�m'IFH�hOe�d��$QHG��P�������$��|�����xi9��������kJFHW����R�����������.C~T~���ub�1D���C��Un,��-�0��:�������C�4���Eb��g�:��w�Z:�:^iu��C��@9�:�����-b�1���#mi��^�����I����A�$�����������A�$���I����A�$��XN(��2�cY{�8Y�!����:���|aQ�Xm9���������=_X�!V�y��C�zw��C,k�u�e��������-bY{���#�V�����~��W���C�~(����eaQ�F��m��u�U_���������������C�����v�t��_y���C�r8vb��zcQ�X��;�:�:��s�:�J7��u�Un�����*�:�����n������:��+�u�������C}����:���Ae�����E5���e�!����:��o���C,k�u������������Eb�� ������EbY����#,���%b����:�*7��u�e������}_X�!�ys�]�������:���6��:�������C��}/�Eb�������tvb�1YuaQ�X�6��:��_��Eb���g��9/�mV��+���]�X6�saQ�X�,8�:�:n����o��g�!V����C������t�����C��������d/�P[Xn��C}����:���}aQ�X�6�:4�#���]�X��/,�����]�X��/,����G����n3�\�X�6�:���}aQ�X��/,������#,���%b����:���}aQ�X�>)L:�:n�����O���S�njK��:2o5�[��:�����Y�!V��G����x���,�4(.���C��:����!V��G���m<�u�u���E������]�X�Uo,�k��G����wwb��h����|w�!Vy�k;!b�7��u��ns�\�X��wwj��}�S�C}G��i�C,k�u��n���C��6�:4����e�3u�e������m<�u��o���C,k�uh��v�vbY����C��6�:��7��u�u���]GXh�'K:���}aQ�X��wwb��\2�!�q��]XX��b�j������(q�.�H2B��('QFHX�$�	���D!aQ��($.�I2B��('QFHX�$�	���D!aQ��($.���L2B��('QFHX�$�	���D!aQ��($.�I2B��('QFHX�$�	���Z�������`oR nL@U��m	���p�)�8P�$*����@8�������`+q�"lD T��m��
p�	9T� *���@E8�~@����p�r�"l< T��m��
p��I��d����&'QFHX��$����Mn�SFHX��$�	��D!aA��(#$,hre�?�z�� Q�XX�4Y�!�3Mu���L�Eaq=���C,�g�,���<f�!V�;��!�3Mu���L�E����u����i��#mi[�-�H?�����p��8Po[���p��8P�!*��&�@E8��@������a������ C$�=�$�	;8	2B��"Q�H�u�I�!RY}f����f�	�
8	2D�nN�����<S�H�i�I��%y �O�.i��C�~����.i��C#��6��:�������������&�:4>�uIs��:��������m��u��uI�Eba]�dQGX\��,�+��n�!V�9��C,�K�,���&�:�:o������ts�]���z���u�I�!R�
S�H�q�I��q��K�H�m�I�!��
K�H�i�I��q|�3���!vpd�T��a�	;8	2D��N������H�!RZ�m�����d��}�"aW'A�H��tK��V�����������H���F�Eba��dQ�X�6\�:4�"���]�XXo4Y�!V������h��C��6^�:4�d���rb��x����&�:��z������O�:��z#gI�X�������h��C�v�p%b7��u�u�']I���� K�z�&�$�	{	8	2D��0�dh�EZ��%C$�"�$������!vpd�t������*�:�J2D��8�d����"a�'A�H��yKFH�3@$�)���d����"��T,��X=o���M�����:"��)��uD�U�}��Mu��n���C��6~�:4K���4a���&�:����c�!V������h��C���������&�:��o���C�~��]�X�m��u��uD�����h��C�������m�������C��	��P�P�Q��L2D�N���:�,"��8�dh�1v�)��!�pd�T�qd������!vpdh.���#K�H��I�!���#K�H}��%C�cG�����H�!�pd�����d���\�!��z���y�W�u�G�~\�`��������$e��m��� C����I������!���g2AE8���HP����L"�PI���xI���t�����/\�	0���P����H�&�8Y�.���X�2.�
�X�R.�<�g_vF
�T����t�T�I��u�T�I��v�,w��Hyk���/�~�Kl^J��[m�"R���OV����/V����/V���5����^a!�J<Q�O�J<I�O�J<I������)�b����c�7YG���^��l_�C%�Y����x����*�dy�'+T���z�e7��K<P���x�B%$/� �J<K��x��P�'k���=U�k���^N%��4��P�'�K<Y�/�J�X�/�J�X�/�<��H�'K%��H�'I%��H�'I%��H�W�R�W���x��a�`EJ|�9:���~*��n����b�HI�T�DJ98��'R��m}p"��8��L�d��A��j��[:(����N���Hin�]��r��8G��V*�GYJv����Pi&I���Hy&I��H�&���.K	��T���jpT����kpT����l�$m��H�&���-KY��'��������o)8��o+6�B����o!��[�
���5O�+4����o��[@
�����- ��[X�|��%+4�B�<�
���Y�{��������>���'X1��,�>�
y�d��IV��$k���-���X�}�>Ar����	�{� ��O�,�>Y�B�'Y���m9���_����|2*���%!���}��>�r�����I�{�d��O���$+�}���'P!�$�>A
y� ��	R��d�r��%+�}���'Ya������;ui�~��r~m��5e�T�dZ���������@ }��J ��6�<�Frn��j6���jp���j�(��_n)���e���v��d��^
���k.b]��z��t���m��,��o_����~%e�4 ��$����Y��C,���Ea!�&K:����d��o*u�l�t;��u�u�:.���o]�������u�����i�H����RG��m9��:�:o���������=�m9������������?SG�W=og'�������ol�#����3�V/���u���/�������S���y;�u��|[������o�y�{�Oc�-g�p���o�����w/���ey��)���J{m�3��#�Zm{�y�u���[��:���]_:��_��Ce��maQGX���,�����Da!��3�R�O��L���v�h��#}��E�o�\�K��It�}���.�/������;�2@�����PHm]�������4�
p8����P��P*��p�8P�t�T�Cg���Z���|�3�{�g�S�~��/?������Ou�E_~���tV��Y�����U�y}��A5�%(R�^�P����4�M2D�h�� #$���.��G�|oc�������hO���'��sO�������A�������b{����>�,��^J����4k�����ci��'d�Dp$�����������8��;C�h��14���F{-���>������u�L�_��S{|�E}�oGa�_�����~K���3���-�������i��3��2T"�u��d���3��
2B������G{/���NA%�{i�L$��ML}��C����Ou�E}�/Ca�G���T���}}���G
�]��'��N�������*1sd���2�E2B�h���!q��W��h���2'A���/�������[����H�,b�b���2�����J�/v�[�'�t��,�������K�����/����H����B��`�;�I��0o��������s����/�[�������;�b3�5���	����/��3�h��,��7�_��������N��uv�;m��o5�_g	����R�N���k�;���/v��f���R�������lty�A�9U���:��@j�}L�G6�H�Rl����u�q�����h�~]����r��
Q_�
!�����q��G�8�G!6���F|N���`��>���>g!��m��b~����P#n�.m
������g�7C�����b���z!�|�x�q������;~���+�9}[�v���D�����e��@��#Ey������ ��H~A�J+���;B:����Xt&�6�����(U�SnN��=�B�>���%i���v]����8`!F�x���725����[����_>��~�com���E���P��S;������kK�<Ct�l$����v������*�*��l��T#K[����n`T+ E�������
x�K���z�����BE^.�*m���k�*c>
B�wZB�}������N?�/��j���V����K�*[T�������34��6g�l�k����]��S���Ny
�v������h��=�����{�c�x��Pe�,�^he�����1����>�!�M3�(l1�������FJ3n�W:�
[\e��Y4�P!����H��k{�s�t���������y�!v,S����YK����n�!�vm������������Q�Fo<b���@��k{�[�;�*%)��
�>�D�(W��m4��7:���o����M}LFH;��f�������������T�p��&�#�����!	��1}� t������UYJ����F��Q�N�
�s]3y7lp���6��������~m�qeEq4)�5d�K��	�kK�:C����v�����e[C��
�:�~�Y��Y���N����XCRg5���������nz���`��*�'y�4y��U���<Un��Q[�i9�g�O=Y����$
)���k^�s
�&�������VC��E|�#�{��dj��l��M����U|�����i[N6�T.0o�5S�/d�����_�,P�-6��`[�V�CH�f��_����?����������u��N
��Xva���(���#���kT<�}	I3�c�����Xaj�����C���S�#�v�Se��!���#^���J`H������V��������>���K�1#$�����q%`�����e`=�u������2
�gY���R��e������#�qOG6[��g�����B�<�����f��X��f�2�����d�Z����b��:�H�����]�0q~�Nc3���J����	��c���x�p5�Qa:��]�TCQ����-n�Tl�����X
w��Gn�%���m��>����6��3��N�=�y�����T��s��n�}{7Ow);�WWf�8��<��F�	���^u=B�m�����l��-y�y]�����X�p�������>�al�����i�� \�x�$)���������{����3�u�k�Um�=.(�<\��mE��S;�)�{��V'v�Q`R�8.B!��RE����!��Z]���l����c�0'�z�wG��p4�]�!{��f�P
�-g����:�B�y��T$��T�f�)o~:s��\6� ��&
G�X�!	�n����^��Y��y�����'������>C����6���6��������*���d/����$�Y�d��:6 \�p��z�v�����i�|[�d-�gs�� ���)/P��n��s��X��p�,r�b�Mu8��n/n�W*���SIR�����3����P�ad���$uk7����oq-|{���8���6L�J�[�����o�E9*N���-_*��A�U�����8>VaGQZ��T���9-C�C����P���Q��IR.���e�lv4;V���zq=�M~b<����}����*�����m�����[����6��K;m}���ODWP��;��;���mE�X���v����{����")P���}��H^f��
bb����}/p�OV�83�Y������T����e���3	�������,vQk�-,�f����v��������a�gS��L(&/Q��k�U�-�8f{����Y�H�=��j�.���F���%�7&v���,���%/Q��u����x���MI�~��HK|X�|�=���al�.�<�o��������ID��i:���9+�f�f�&+���/�J<F��(�00�}f�N��-�3#5g57�������sa�W��c�pD�M�������e�j�j4l^��[�i�~�Y�2��v}��u���T���'��Zfk���F���Oa�H�-�l�)O<~���D��K��n>���F[M�Vd
�IK�UXX��0�t���C�"�M�b.��h�*[��)�OUQ>f%�����M�m]�F�)��%��ic�4�v&S��dR)<g�������������6�5��������R�S��2��&��;k��G�����@�Z��s�v�����S��S����T�{����h�������)��������<��aPVO���0����{�v>��
��
ig���v�d��h��z��n��(�=��,%����
�;NF����v>T��O�/��R���}�IOS��A������c�����������'���m�)������������^��uo�����Y&8�`s	w�A������+4���2/NX]Sv�q��%�'��������0�f��8Cam�5&�-�l7�d�+f���1��oj�� ����2���'����\��6y�S���T^��t�I�I��K��b�K�%���O2��Z,����%�Or��'�W���w�������[��>��IH��*es�$�����=���C��8����5L���>���>�H
ZL����)���OR6]0��qf'����������a�O2����!�d�aE�����$<U�g���'}��f>�:��p(3;�E^�5�
�6�y�����JG$���D���)PV]�M����:�jS'S�l5���}o�a�D'�v��J����a�������b�9s���:�)�=����e�������Pi>v�0�q�$������-�6����Kn���X���%���}�,�.���fT���-o9���.�D�����:��5Vx�H�h�����b�x�<; �{��5�!�=�t���D6/o�g�7d��`�s�1����R�.���[�3�Nd94�7f��Y
(!�s5���{����}����}[����������?'r2�����452��Nd9��cr����jL�^oa����D��a����8��0��kz��0D�@����k����0S��fN��'�|��Od�E>~:���F{:���9�CN��9���m��N�"��>�G���D7��ms���r,Nd9d<5fYsG�7'rf�V'rJs"���7���D���mI&s"����DN��t.N��oq"��8���9�#�y	���6k|������Ze[�v���+>��m=�Vu�W�\�,FCj����Q��<�)�{��B�>�,� k� ����sd9-�Lf�v��em�%k^����q��Z��)�r8����`�)�wP�>F��v���?e�?�_u~N��-�����L��k��[�MiQK�C���o��S��-�s���������:��0���x��9��|@�;d�)�bYM{����x���`��P��}U��������w�7�k���tY�T*���>~�Fz���(�������������<�4kkY�hV���V�a���)^&v5<z�<����#]�~6W�zkRb�RS.��=�UwkSq7���%jS� �F*�ia���n�#��>?]=�|��0>~����.af�
�-�=	����mjO�~��d��m�Q��tA������IG������PK�)�R<�5D�
�mE��K�FZx��D��|��I�v����;[_����}��4�j���:��r.����!�F�� sN���:&!������bG������������~��2�����-r+�������/K'�������??*zU��l���~~���������>���?�������������_>�����������������������8���|�?���?����?~�C?~9~��R�W���/�s�������������]�����~���>�y]�������u�/���_~���~=����C?=�q=����u������z��o�l}(���r�O  �v\�����'�����:��_
�al{������������x�/�/z>b��<��H^�M�_�_7<�����������U�Vx���:��d��P&��6�$,gl��b_�*g���	1���L2��+��)w���@�>��27�aa �#V�Q��K��Z���f�"�1�:?&��`<"N��%�xl(�g���
%��B���/�����v
P��`����i����F<�6�ga��q��7�f>����qS�kX���E��f\�0���n�KXX�KXf�6�%�w��Q��)����"����"�����K�����m+�4�&��2���%�������"�/�.�Z^d����b]%�3�9:?9�����4!`�Ml�&�53���O$��d�B��������Jea;����mv>���3���������"7E����R�&���ZXB��Z��������>��`N��a�~'+?��x���WQ�T���&6�4"[q2�����#IX��c�D�0��mV���yD��Gh��;�s�T��y�{�=��m!��T�4;����0���Li�U��k�rU�bX��'�-�k������<<������Q�;�`T��w8�	F���z�-\����6�J����I[�46��F���&�PV��2��k[��S^�XR�
�j���C��vaF
���\���S���y�j������Z�|?c'ub��n�~����R�N��%�0���MWa��wNn�'��q�0�����04��sB/ha�����[���z:���������W,�Z�%V��������������X���F������0�����9avN��������c8kJ��-�=m6X5�L�#>���Os�`�f��5��.1���������h4�X
�na������o�p*a��\$l�&+�fS;kn�"�
	Ly�����h�R���gx��p2E�Zf���h��������t5��l������`6f_���U����)9�������j��6����&w��~,�o���u���%�������&�[�����z��*T���;O�������^����
��0����E���C�&��������MLd�Z8c���%B��M��zVm��t��Z��cif�
�����C�@��Z�(w�b�������w�9]���{��6D�����$.�N��o>s����i���b����/��E�9�\7��,ar^Oy��L��=��&�m�'�_���4c��lO����gUCX��ea�k�M�'����z~N��a*�.�����/����:�$�y	K�1?�t_�w��0�\.S6	z���7����9-izx60-izx�����4=���0����^+�1�l��4u�����U�>�����x�X�����i�iz�d���/1-���.oX�%M]*MsZ�-�4M>�rk�b3�6�t�����?��Y��rz�!����fo�b3�r���GTND�|����)�����l���f�3�Z|�;$���M�c��,Bv�3��D
y���b+K��)��$��r^��.X+�����~`��b1�8��a�{zL�c�e�l9qp���&����4e���wz
�O�:������L1�Zu�b��0V�)Q���(j^���%M]a�%�J_�t������FuJ���C�;�Mi�+q"�)���d�d��HV����I��a��>:j`�}eN������e�?XB��ig_a�}�+,{����9��LhqyX<Ol�c�p�+}��uw6��]��f6X2E.����kF�k�%�I���|�d�����S��1���j�p_�n���0�z�K�\r�m�)�W�/���tl���T�A\e���%��#����7��dR��0}a���+��-,[����y�j��3�+?�$���MbV��CS9�yg^��A7��������F�j�dv&r�"���%{o]��S��f
����t1�j���VUk�����En�7�_
�#�%i�K���F�n�z�}�K����i�������Tc�v�I����tp��]�q'�A�����m�$��:��5cA)�`�i��]v��")i�k��j4r�;�\���se
�]#������Wl��G���R�B5nd�N�,Ez�x[^s�Q>�`C�
��I�s��d���L��mj��3��9��3�s��$�*e)���m�g���9��v�s�,7���r��������><�g������qX�Q=?��[O1Z�ig[L��:������:X-2��!e�_�/����)���=m(��1U�iK<�4���-�	��
���m�S����	�1�GX���	�cba�)�m�n��I�Yl^������Z�����[SmH�a�b�����xW��]�[����&�&�sA���qe���!�!��pW�5J;������*VfP�rf�����$K�E��9a�����1�[�����R����lV���'b���c�.����_�?���5���U���,3�f0�i�|X��C�n*���k/F�6UcG�9gH�k�{B9[Z�����>f'2��c�������k5�
��ud������9��U���p�<2�.�}����������S�!���f��������3<{6��S{P.l(����f��w�]�-�]c�{`01�S��I�����{Z�������~�P��*+�1�����4�
��l��i��i5w\W�QRm���0��S������&! [�@�5���h5+zG�j_�Q�*�����~�u���b�!�=������3�L+�L�;�}�S��w����g�C�����t���m���v�����fa�jq���~����������������V������y���A`�-�����m���F�+p
7��jo3�����O�:�>��r��fSQ=FTf!��4[����{yEu�mQm�[6����d���D��d��mw��5����-5���B�K	(�
�4�@�.��}���h��i(�*�x�mD���=n7��P26oI��\��8��-��$���G�������8��ny����*2�������R�L�t���5)#��QPc~�V��M���s���uM�=c����-��I�03	�L���!���P���>����%��9B���v)-�oW�O�NKv�CO�R���v�����6)$�$���|��J����y�rYX*FHA�����H�����Cy����ED��-���|Sx,!g������
�^�KZ��J+�����V`�T��m�g�7W_C���^/1��[Tm�TI������]jm����s�w����j���V?(}�<~�e�U.8��VM,����F���������]��-_���^���]��q�������o�o��l��g��������T?�uCj��!��!����o��!���.�u�eK]7���������#_��������[�n����������uC�����r�P�r�P~)���o��}�������W��.�uC��w���uC=�uC��^7���uC��^���������{�����_7��~����_7����
��u�� c������}�{�O��?0�������_S��X"P{��,E��|�8���W�R��_���������?�?|5��~8������
\�)�Xx`k
���#���<^����0��������� �~����
W�n�����J���+A|�E�n�������]�}��������������~o�_7�~�~���/�_7�����
����u�U���"r�p����+���_	2^���u���n�����W����J������W�\�]ix�w���������?�W���? ?�Mf`<�����0Z�"�kQ�k���zxU�6�	b���b�!��HX$2��cd�g����C6"K��+P����>T X8PPPh��0�`�������$�XZEqe�E1F�F�FQG��*���<��(�4�@�L�XV�P�X��h�Z������Z5F�f�FUG�G����5h4���1A��F
k�>F��M�+4]h����y�����+�?�8��D���S4�ld����EC�VM�5�h����IG����>��>BK~z���sx�?y�������������F_{�1���`ut|���e�La�������c�T���l�Bw|��������%��0]��
�>���)/g�g�x;10�����3�����
������Q�����#:��;1t��e��?���-a�-��������s����|���x��yb)�����������
�X�}�o�o��u��������o� ����Y�sH����	��}z���s*t�v���m9N����[R eX��2����� �3������\Xb�{�����B�+![]��
�t|
�����0���(�k�C�2�2�~J��jl����l8����T�+�����B����A &�'��g���m����q��3m���a�����Q�:�j���xz��^��q|��zV��V<{W9�kI�=����gFR��(����1[�`�B��V��mD���!L
��d�J�~z���
+sO����l�$D��{^^W���rp_�Ac<SY���Pc�����u���4�'5����#q�V���V�XQ�e���Xe��2o	��N�[8P��Ut��n�jv|��J�<yZ���@�q.a	��j����dSb�)Tp_�7����7%q��b�H}	��]�>l
ak���
Y�-����6��65�\��:R�tk�����n��y]]=��������x�fq�H���/�����������
>�j^�]�w��*�6��6����1�����f��cf��=
{X>�+��G[_����cP���i-��b}]���`��f��,��/C�l�l)�Q
��@�OK���P��0�n�<��z��r��ZfG����J�����t���c%�W�;����{�#d&�\$l��h��;B���u�yG8�2��Y�#4Y��Z�n����C�7���S\\�g`���x�+��3����b��n�Y��l�����Z�>>oi������E��#�U��Ps��N�#dlf�k��p����;Bc����>�������TGh���lQ�UQ�����H�2����b��#�aj�7���cT���C7������w�&;B�g�%=,���t������26�6C����?�f��]��G.����/�-���m	K��sJ3MQ�y#�Fy�����_�L�Xd�lYO��/���*��-�T��d��l��l��������0+��J�[D���m����t��������Y�T�L+1�%,ue�W�lg�r��;+^�5L�;��d\\��Sn��Kn�L@i3��}DN4A��(�;'$�xoK&x�lV�f��>N��HBJ���SM����nj�S���D�G�f[������u�L����)�!�0���������,d�r>EZ��l�<�AR��=,�Zk8��O�@?���)�����yl��"c�sL�%}�?o��EsWP\�>{��t�g��2T4'
+u�U~T����PQ�P*��2T|C\\�����{�*���c�W��J��mm����n��(Ke�t��%�i���R\���,/b8�kT����C����������-9^�ye�wW��+��Zoa��}�U��Fe��T**
|���x�c	K�R*���2T����@���8��KN�;���*��u�J;����������,ev����+�a����ra{�ji����Y��X$�\;��*�s����W����!�s�A��W�����*5zl�9��������v~�z�~,qE��p��fSe�sG��2�g���eaJ���,��	���p��S�3�=��K���%Z�t.��n�I�����pI<u)��8��7�.F������B�Y0���)�������y,E�"�%LY���Y�f�;]R��q�K��D�K����Y�%y~�K����'��%S��*���K���K�����<.��g�Q��%Un�������6��$��%��W�C]R�F	����[�y�XfyMYv5��� ��b��%���7������.����?�}�����*	w&S���oK�-B�}����lI�<���.id��g��27�Q����K2�KZ���0��.*v����Y��?Y\��-�����=�y�.	�]R�i�K�d����>��R�c	�X_���.I�*�Kj���Kj������yJ�h�]R�rx7	��<l����$�����%5�%�X��S�-������KB��2 �o���\$>$�L�\���--/���Vq� }���_��r!�.��q�-{���]�K�I�%�D�(�����P/��U�������3�4[�X�I�[X����x�=��hF,i�\�����]�cj��VH��3�)J��a��k�xv��y�f<�[aqi�X���	�?I��*_��W���\�
��x����e�W?��*���L�vawku�{[��*>e���#M-(��,Z]�nR����j������v�r��dt�mw�n6��!<aCxX�j4��h6��6D���6�e�(=n' �%*M9�m�
����I��:��
�!<l��&�x��������i���4����~o?����6��e&����@l�h�����r���,wn�i�����)���)yYw��Wf���#�d������9&����t��!�f��X�����U;|�K�?Q�TsN��y���:����8��aS���o_�J1&�8�����:w��2VF���H:����I�13�z�����VU��a]R����JO�}�����
>N 1��������O@`���g��h
1��2��:v�K_O2����k���{�K.��f��M������eZ�^�����g�6qi\���������X��K�?�-m�w*�p��8���z�<����81����)����G�_���{<������p91�����8E�j��
��1'�,�g��pl��i$8k�����������Ew$�n�<~�����G����V�
������$��y�"��u��t��O����0�]?�	l�Bau�5�$�n��r���r�\z%��������|��S���4����"J�gDw���w���~���2*�"c��e����D�xB��Y0�����,��hV��W_��Ffc�����~u�G��m�~�nK����QNG�>6�P3��a��m�).��\�����e�ZW\����:������J��������nK��>Z�$j���	���E�E<%���ZjJ�
	a��.��XD�v�Q����g�K��{��1jf������M^������7I�?�Fok��;�3��>&r��"N,H�)�V��	'��v+������/L�%q��
�����$�R�Q"���	c�������?�����dC�������%+���������Z���6�T�Z����mnF?8�QOV���R����%Q����O�X�>�f�����06�U����J�������m7e���:!:�rFK0�����l�$�����%Q�!c}����k�}��v��;�����������1W��|(K[^����y�Q�\�j.��Q>9��
��/��#���;OZ~����bI����6��l���/<��	\�V�
�9m{�8�Qo�����}��7�H7���4`G3&�n�6D��kR���Iy0��~���mYn�Z�%n��%���w'����c��0�p��O���Pbh�=�y�R�������R������4T��KZN��|�S���0�[S50�
�sRU��3��3d��^�����5,�1;zqbg ^�r�.�cQX_���y�[��X*:
���}Z�<�����g��$�6C��z� b�u����k*����8v����l��S������,��g��C���s>r[}�,C�E/T�Lv7c@��q��
�#c���q������f���mf�u�����fb{�`%�-~g���zb�����1�Xg[���>o���*LE�5^!{����0�
��+v�
E��r^�I�9��NN�Y����<e�^Y��%��E�m��>���	�n:�Ndg���L��-����*m��������
���bC��S\������0;O9��]w�����������,��GQ�����4�����'�|L��<�Q��X���a�8~����Y4����Y������j��w�e����6���ZT;�m��n�w���0��&�5�}��[�u����Sk����������_��/O�;�WKt����~t���m����*�H�t������6@��7|�I��G~G����;.������7$���9f�6n������B�0�8~�0��Y�
#����qL�d)���/~����y�n�u����I������voV<�H\�������S�;ZD����e/�&��fi����w�y1�!���hf]�>-	��M%�f`���}��Yt�6w�VE8
R���T<�b*��z�K8+���6	����}6}��^X;S�a VmgUX'8�{�����*������%�E��!V(��:SvM�X6aS#+�?������j�~[�T�U�,������0�,�L�{i�7W&+�x����d�>y�V���b����/q��b~=��X9O���C�>��fv����'�R�Zx������Tc��}�������N�"��6p�*fD���1e|�%�8g��q���r�����t��(~��>C����/
�e��7#Ok�djF���&��h��Y�*>?�qR��2�P����U|W���Z��T�2���,i3�7|.A��
�D�9��)�
>� J�F�Oj�2Cm�nm��DW�;d��t��k�f��6�-o��������V�����0�+>�`a���m_UN3�R�_>g�y}��?9��������l��=ZxS�I�6=�=�W�1��e�a[I��>��.���T]�5��y��-�9����J0����3�q��O��{�2,c�,e^V}��3���y��\ccW)��m�2��p� w�t
�~��BX�n�v �x;�M;g��������s��t�A���I��!���|������c���t�������m��z[Cp(��TdN��|��h��j�����)_-�a�b�&�+��_l'����!0�*���Y��"�%�r�����'�6D���Vk
��v( z�Me�����4�z����R��j��g�5�%��^?��������vY*����N�'���6���0, UpM�n)�j����G��s����t���<��\�e<��!'0��Tx:�M|�
��|Iv�
�lb�f]�h����,��o!e�����0'�,C�2:r=g?��u�4m�|bRC���S&�_+�����o:�M���(����',en@�S�2���g(*Oqb�n�����>�-�T�����p�R�D�|j��.4T��La�-�r�Tz[�w*�����d-���t;��[����cbd���Y���dy��(�8/b��K������<mgW�������6�qc���R<d����,�61��M�}M��x���wW8/�Or����"p&u�.�}����K�!��(���H���GY�:~}�3�����z/��h�Vw��l_i}�p��3�2�����6K��z/�)Ce39��d��RU�L_k<���m:j��G��a^��iS_�[���KgWj=��0`8��;�lH�����E;CjS�tz�����V����{�q]��J�~il�c��wN��p�,=����|����Ob
�8�C��������rI3�
��#�������Q���>IU�2�
B�>CzY�9�X�Z��
!�{��*{�q��G��=����{��{���=����a�:{���a0�J��
��{��N�#v�{�{��}�Z�c=������:��(lY~pj��R�p�A*>�l�,�NkHi�|�-�9��w��fHq���r��{�����3���1��1qs�t��\�4��k�#��A���x�<(��B����
S�P���6C�51HL��*�B�U{��IR����c��T9W����F=W��TE��O�j�����
��O��;R~�S���T9h��X3`3;����<A��Oy�1j�%j��?�q����rN���[���q��T9�?U���1�3����rD�B��z�Z����C�����*�t$�P��u�����B`��f�{tH����z+WW��{������co�`����p~�FZV����c��y�px�!M��~m���+3��Q������m��r6������:�P�;������������Pw6�ACx2�U=Y�5x�����r���|��iV!����u�W���C�o�C&�VU����T~�P�T��f��$�T�Y*�9�{*���������NS�����E����p(���K�n�pLC�U��Y�
/I��[�2q2u�RB��T18d[�u��d�|W���M����#�����3���}�m@����-�����"��_��b�N	��r�t
�[����Uf2������q}�oY;�:����y�Xf��m6<0��T����R7��jS�\GH^+�H�4���C+}KWW�R��-���'K�*����7c���}���J�]�o�7�oY�j���1<����.�BC#����1�0�/�s�|���R�!����l�4�������=��]��A���8�2�M�����`_.�q+�(�W��
���}7�zt�T?>�������C�1����5�u����u���W[s�����<>m������;P�v�����m������5������[Ys/p��]c[m��]����z����i;cco�����.�����{l��������6�F��_l����76����c��mO���
�}���/�7"���|5���x6�k�����f��{hC����G#�s*[��l�b�d��r���6�J��"�9=@j�
B��cdw�2��v3��>@n6E�c�W8Dr���|�&�v~��1#n;�d7������M�9�n3��J��n��$�8@���8����<5�!��L
yK������rl��Oy���c�Ro!P�o�6=i������3~]��C�������6�6�q������!�T�$K��������T��C!vi_�mg���J�i'�����eM!;��e����7�25�����J��k�L��?���fG���_�����Y�t�}~K���!�
����������mO���uZH�X?,�6P���`oq���c�bg�z)��P����6�����5���0�Z��C�y��m���e��o!�>��`|,6#Cz�E��O��$I��L��8���p��Q�Q��m���P�`������2ui$��#h,_$s�i�i�me>����@�@��Z+�g_���
*���X(6�b_�-���l������i���Y^����R���ch����Pv@�1
������q�����55_$$�%C�B��ZI����My�O�����������d��l�����d��$x�l�R�ir�C���T,���i:���������uz�w6P�w�3�����G(p��v@����`���"��Y��
����u� `r�L6�P�P���g��o�3e�!	%U�Fu.,�ZN�I*Zo(��z������h<xODd`�=&C��]�:�������3�2�D����Q�EfIz�QU��1�}����@�,�/�P����v�T��C�^	F0��;�����"%9��p�W��{
3������6����hhp[6���U_�i��i')���\C�����R�vVD��K(e�^Nj��	�����������`������^��N�W��a�V���������/vr%����<C�VQ���P%���*��7{����������h�m�Y����6��
����+�s�l��)�">v�)�
`(���=q�;��(�Y��"T`ru��k�r�6����+*�AEe�����m��QQ�X��t|�p�G^�9��P����h������X��t3�����{������0~L�M�p��8ns�U���7���p���_�����D�F�M���H���y���/������s��q����l$���y���~ux}s�J�`k�����8E�5B�R��N�kTr�]�����,��0S�M/�r>
����0uD|��8|i������S�-��
osE�6�]��yP �����T�-v�V�(��t5�r��5j�y�Hyg�<�yEe������k%�)�@BD��M�-KZ�����l���N��2t$&\��3o1J�*
����:��������:�Su����)��x���`�LJ��rKBfzq��2(�������MPE����wmZC�Y��U3�F�N��Kuk(��e�`a�V(C�.�=�)�D���[f�*��^�a,�������+Q���X+P�� 7mG���k4��NQ��s���!3�Q��S�����34�Q���|�m�4���L{~�%5s,�]p��0RvL�Ar�3�~��><���+��5�A]-	\JQ����v�E��KA�5��f��4O)5���2u�e��;rg-���dEi����I7�f�uT�G��p�
1-�i��3�/��$���s�%P��C�)���H��z����d����M�5)��s�<)#������ON��:��e18xV�7��W3�;���{��m���-my�l����gZl{t�����Y�"M-�qQv�H�se;Rj�4E�����������P�����g%�\�6���AY��bsX5s�F��[���E����^�w���QMXG�y�
�vmy	G~$��8S��W/�.n����3������n:�/����h�n2�@��G1�
nO�~h��-���sM���jE��6����*4{i�����SH�z������E��/{���P��p�[��G��f7a=/�R��a�g����av����f��������8H��$��v���1;�r�9X��K��2��)-T���>2���r�����c	<�x]&�o�����M\����QE����;��^��!$��|��L����������WPdSL�
�m�sF���=S:OL18j���|	���8%��5�b��P���tbU$��D�d2����sf���I����(:���U&%���M��g��@<C��E<b.@��{�k`�,u���|��=�L^o���,-<����c����d�7�.$�n��n��1e	�4��R�Q7��-��9������������G ��j\��b�e��~����'�qc<�n��V��--�!�S�V����G5p�b�)F��ix��y
������	��;%T��~�34p���9�M$���z���|��Hg��B����4I��`lZh����W���B���u+�Qc%��6�(���{�+�Y�d�V��N�c��$���P�a���^V�7?I��_05�`���#
�j�]'�$�� ���D|K���������n_r��������+�07O?W�K�ojo��)��Jx�
�}��)����:Ln�:��,���XR�����A��L#����d��oGa��5�|���1�b�lu��2� +(�{`���D��B�: �j-�zQg��"�/}R,�n4th����i"f2�1'���qD	��!I�
� �}�?�t�E�����p*�p��[��w����!!$�������4��G���7�!���1����O�C>���B�e�'�zhu�}L$����3��bs*�AO�;9�Ko��s��{�*Rq�n.�������f�����k5>���<��q�de�q���Y����e����4x��A�c��k��1�5������q���tf}��x����p���[�={>9Vf�*����_,�pi�����_@���"r5���J�y��V�8�KG9U{��D�g�Z�[�
�@�uQ� ��4���}f>�A�T�}O{�`#lgZQ��m�"S2W��d�]$�����
�����������;B�<��Z��e��Z��Y�K�t�-����[�������&�v����~�|��>����t���%����v��4�������>����u�~����)��s����>�I�G>	��'A��'A��'A��'���$(�����y��r�/���?�g9	�W9	�w9	j�'A-�$���u����z��z��_��_�������R�'������h'A[�$h��$h_�$h��|��~�����{��'A�$�������������!'�)�Ipr>�����]�Va|��`|��`|��`�y�2O���I0�<	��'������5���{�*f��#'�)�Ip�>	��w�~��`}��`}�����y�}���c�{��`�}��}��}��}�v<	�O�����)�y��|��y���y|~���N��?E���3�9	�Y�������m�_�|a#���z}w^c�9vxc#9�Lc�76�}}�������������tc6w�cSy��.;��/\���R�Nnl��ol��r�	�-��2~7��~�nU� �E$B��\������ZEDq��\��*�z�*�M�!�0�L���'��pa����Y�Dh.4�M*���f��*
�F�D���A� |�D���(���1�HC�!�{Q����P(
��%��Q�N�?T-��PW���1T��
U�����8������1�a������C�q���(�+�.�1�4�71u0{4���ji(a4a@������������*�D������I�y�����w�����]�U�G3��>0y%�]�*r������>��y��s���b`W�����oS+�*��g�K���T^�U���v�YG���g�'�I���P�e�Co}��&�Y�bwV5Y��w��7ye�{
+Zz�*�+��:��FY1��\����z/9x�;�J�<V&�J�.Y]���3�c��b�C��9{�K�p+@U�`�h*����V$
�g+���2�"�n��GY�-�2xC j��������HV.@~d|J6[?-������D��>d��
��U�d����h�S����X��_������`�^;[�]���j�+��T��z9�Q�Be��������Zu����U����������k	�\��k \��!Jz}\SA�\]z�`W�4L�v�,x��r����4���}���rREUV��E�kfE��M��x"D(��ToL-�)Q�+
I���b�jC�C������t�+�y��/	��z3O�����,[�NIAHe�R���/��";ee�V^B*�k�5�kE5��'����������G�E������uQ��y$��M�i������,i&��H�����7;R�~��=C�l@�d����tEC�}<���X�	z�e�4U^�'���rT�����`�%��=�)
+���|�wz���3���2�;zo�\���;D��TZ�)��M|���5��VwW
�����	9��k�o��L���K%S�-�.��y�H�K�M�@�s�(CZA�M�����3��n��)e��+���b{Yq�r3�������Z�!{�:�9�Hi������&���v�l�e�G7M�uh����{����/��6K���W7�?�
VUA���8��j�j��
�x���AU�[���>���R���I��4M����*���r�?"E�Q�v���[cgTu��|E������q��q(��jg�����e��n�GF������W��V�X�?�r�
<�2�&���W�D�p�g����
����k_�S`����4�����%l4�Qo��R�Q�7��z3�$�2_����?�r������?o���|Im�$��G���v>�%�wi��~;���e���^��K�����^�v��Ko�����O��/�6J/L��������Z������>4\Ik�#P�\�^{
�F.�}��,��������E�Iw1�6L����rvJ�l$��)G� ���-�r
�2�*���Dk�%9E"�0M��2����54a�?�(��i���Y�'fPL���k���@,����?�d��,lH��J��
����%�e��)�x�GN����WyU;wQ�Y/�V.��j1���9n����+3%h���YrV��o��XrW��M#��-,�cv�D��_z)���=,?��{}E^�'��� ��z���&���n�6��TJm.�����M�������idl���mYx.�)llli|MN)�`�E�F��Px�4[��0��������`W��Y����w(P��x}�	��M����n���RWL��
��Ty��
v��+�)�El������5��[n���6��f��rJ�.�r[4[.�-e��~hQQ��+�T�����"����'n�4��9V 8����p�@p��[��0/�/�N�8[��.&���X7�8�M�W
�;�l�u��"8V<�c5J/L�������9��nq���&��\�w�HTWu��l������fR���8��f����L��L�L�]����S��A����m�@Ig��I:��HC�m�>[3��&E��[3b����.,�y3�k1��m&q-l�����Ml	��h%��=�/c�7aM&n�(����M��=�
U��&P!���c$p��e��n*��nb3v!������guFI�����M�	c�� �W����=�;�P�4w��}[�-�
�&P+���&�RWL�D|������#�Ex�p�!pi��7���0����eS7a��z�&.Jt���P0&�UM����|�v?��������M���#;�e�����^�U�W(����8q��a�t�y��.�@}�o�<��!p�m��p�=��t�9<W����eyp.����A���<m�Jx8���o����?'W+:��!�BE�x�$��r��CX&���r"h����;�U��������*L���^��B�R8e�;��-��������Az��
�K>��u�9����r��sR�
nI�\>�K����d�@�BX�{�����C,WA�2Z�!]U�B�@�O!��X!�_C��smM�4h����JA�Q8dY�A&&G	4kw�]�����[!��F�����%q�/��N�1R�:�`,��H��u���=�������*K��)pZmj4�[ ���/����=��v�,S����N�`
�!�h�&���h�i)�SD���A�
������g��v�'\���
��N��l���:�Um�P�i����H�(w��s��������M��`7t���,���8���f�e���E��v#��������C�,4�����S���H^��vx�-��</��x�>���6�)��A[�����-�K��������B/�� _r���cW:0����	�Z��c
K�X.�������$��@h�ZM��^�/u<heK:�0���,9����wa����1�*�e:e=^���|�N��fz�sIs��@�!
���wK�[���'h���.�+p��*Z�,m{�f���d�Q`�X"/2��pJ~���%�kD�F�	9���[���'��D�R~��.O_<F���\y������!��8U.�h�[h�
�%���'��J\�0��d{�@)��#�x�ls�
��73a)�lS�_���������`_O(-.�lyi%Y ��(����V�*q]�U	�����da=���,�G���Gv�xYq";
ZO8�p+��5oxPc&���������^l91Dw�a��<T�,Z�{z����
+M�
\`�tEuC�,,�=��a�)dC
�
��i��.��'�~����"�yV�n{+@��@[+�Ov<�8!�x�B| 3�����s�2��%�p�s$P�QX ������3!Z]��������"���h2�l��	C_s~�.�������&��e6ZC9��"y�J7�j�H���$��"Y��.���Cz	S�O/�7�D�)�u��g��%{�b[?�Li�`_o�Y2�/��X���F�e��][���=XO+'�&�i��dY��K`����X��$��k���~�6P��
�S�r���?pMb�Nl@�4�0�GD������V![�{��C�I$��&=m5=h���
-�)���)�yk��#|YZ��`m�����N��Q��j�������:����,�f!�"�r�g���$����axV����W7��y��{ (�A�M�P�����a�2D�\>������M�a���P��O�
�Ww��vVh__{�3��6���]U`�W�&�TfQ��uT�O@'�}��X���{�������ij��-��
�����{��������U��
 �����*,	�/��U��FP-\�	 4��h"d���\�T�xY&�(x��h9?h9?r�����i�Q�{����
-�$�#�I��G�ml�.i����!�c��e�A��=3.�U���=1^K]�-�
�~%���e�Ob/��/-��&]ch�5~L�
���:�F�;4:C��u�F _�������)1:����`e\:��r�������UE�N��t��n{��3d�
��6����W��F;c���qw��
b�=�h������Z�����J��Y�
�=u|��2�F����vxOns�?���%���Ghp\��+,�l�t��+�c5���5����WH��<{
�����P&��S�S6�{����9�s5�������Uir�Ka��!
��q0�����w+��s����8��#'�Eib������I��H������h����8��A[��
n�|
���4�e��ra��b�*-{�@�;��EyFZ�4���%�|`��-)�f�Rh�*�A6g5Qf�i���l�C��P�h��("��,�l�)�I�p9�� �UVW���d�d���lHo��.hDnA�s{hh�$t2M�����eOv�j�;3�P��� 7��U6���T��p���M����GP(��~x��������U�����0���]WW	 �#��|����?��on�^VL�O��s�"�"��f`N����k��
 [����B+��.j�n�a���Sv�;�m@���*�e�?�Xh}���j��A����t�Z����P��H�[�Q��T�]U(.��~2m����2��6P#mT�������1�MT�x�[����J��)�h��%H�E��A�����JUX��F���*]a!��r�6���;4O9�+J�����.�b c�-��-���-�|W3�d!���V�TL;�oi������o����=e���a���m���V���������6��S��u�3�w�#�N35���\�Vj�Z����q1#w>��|m�-k�������t8��{k��2�\f��HS���g^A���VC���$HO7�[�����xZ�V�T�zP�t/}��E�(�Oj_1��yC�=��vmnrS��-�`���9��l����H���^���J��H�A�&��lO����%T�9��z��]��R��L_|���������J���p�#RszR���4�%_J������\�o������Z������y`���T��Oj��)�]�� �1�6/+(�}
m6���9�K9�������bZ5I��K��)JG�R>��Q�RRg)w���I������U�]�	�����u�NMj���,G�����i���h"�p��Z��t�4��I��/���ui2<����[�����<��/-sP��T
��r��p�,���8*V�w�����[�vP�}f�#g��U��T��Je����Z�T�A���*5+�3��V��-�"��z�7�wWz�y��WI�L�.�'R�����%���~��e���XP��L�����Y�
����%[T��n���}������������������{�q�=�V+��D]{k��f���R�wr -\>U���0F�i?I�(��8Ll��8P��GJ�d�c��R�Tl��i�Z4P9f���fw1���!����L�
k�?�+��}p�i9�5���Tp�7��6{R���jYJ���:���m�8~��������"%����;���8��r��()�
����Mjn*�����)Aa4%������D���7#B����*
i����w�|���n�t$v(�	��.wV�n�P���x`_+���r��!_��#�O���|Z�6��]T�G��=�E�I�5R�	���d��Q��*��-mU*���T3�����Z���8��S����V��rGQe?��w�g�7�{��C%7�y`Lki�v������������CK�M������5]��p����[T�����������]�.����U���N�.F��k���kR���3�y����<�c�������x��OwpY��@��?(�c���{��;��a�P}Ry��i{{��S�nW�	#g/#<Iq��9WMF����#g\����s�:U���D48������I�4q�^~
di�T���>cl���_�������Yy��L�rzR1rvLu}����Je����a��5���q���s����y��1r�6hP*Q���b��|�����s�������I��#�<�w74�0r��ZD���.��
���mceB!b)S��FYKF����3��q��G��:�<��m�������#��]y�'Q8�\xU����-����R��p
WA}2���:O>H����6����,<-�R��
��3M�l�P����<|b�7���)U'*������.�/qs|��4�Y��]N�'�HM��R
���K|{����a���r~R������Yy�YR'�]K�Z���tb�����'r���G�k9���}��#u�24��L��/�S�FYq@}=���4T����8��aSn�G*g(,-MS�w�E%7CM/���:9����l�G��gMP�~���0������J�#i�/Rs�:n�(^*j�B��������J�P����s�3��;R[��
�(�[�7�\So�����KSA/���qK���QQ��>�Bj��q�4-'��Q���������R�T�7hZ3���,����i�h���~�4�)����W4�������~c����K,���(��{L-�u�CX�n�
@�c���>�!7��
����S����w4�^6����S|Ks��������[���-����7�S���T>��N�Q����Y��Uh���������Aw�-��r-X������q������wk!v27��%�e-�e�Y�~����]���/�@�����Vq�����G�}������H@~��G�}�������} |>�k�>����������m���������L�MD��������q'b�#Sd^�:�+@����5�����u��� ��HR2���0��_����9����r�#�q����l�L?!����y��'d����,��`@=@����~{��%
3��#��P��������W��=R
���l�I��T�U�X�_��0��q(�@6&L�tu��c���dk=�	��p[,�}1�Gir��3�#��B1����sh8L��3�1;���*����)�-����"S2RW(�� Dl����Ds��S���(��o����`Nsexww�\�,�A��F
�@V�C����Z��)��r��#���f�	ie��Q�7��x��t�O����D��?����U�.g��*�������������M�@f:*Qe���b��3��Y�s�
P�T��gZ��9+Q7��.���z��M����^x����(G�&E�:�4j�J�W���i���PhA���0fCsNTR�<U6��
UB��C�gZ�N������:�J[�hfo��SvS
Iu	}Pe�
u�����������d���C��YV��Q�f��m��k�6�������eo���q�d�EQa/TQ
q�1NhZST,*�*������k���#��w
K����j�
S�]cY5�^���J�'���-qXB:C�$P�5�}�i^�a�ow����"${6d���(��(����4'�����h��#�����H-4�*%����������Wo�r��c�
[�����A���/nI�{@�A����1(������y�h[��;���yu��������%�^��l<j5W����5��&iW��wE��xR��"�Oj��m�vsn�}�D����kOYz��+��_�2�]N�"@Y�u�I�(.jdy!�Um�Y{��T2���pH]��@�D�:u�\�Q��%TT�����!�nW�r������j�Fzbq,C)92d�V�l�\���a�����'�Z�ivT8hV����Z����������K�[a�5uOt����c���:S�r�1#����Xg��x������:����u�D6������m�������c^&v���r��6��C1���_^6�����n�[�6+'��M�l�����=��*u����S�4���e\r,�|T�e����]VD�Fj��,����������jT,�T������(����4�T�z�0%fjO�_N�Y.��C�A5e0\��d�_�����+b;�H�1	6�b�P��j��p����4��5�5S���jy����"���#��y�R�O^�����z�Ke�VW���
sm�O^���K��������������6�z��
������n����6\-���:���|F�T��o�e]���q���-��Uc������15LS2kl.~����n��>��sw�y|`�m��Y��j/��	K����B�v�M�F��&�P��j&��������[8gPC�r�0L���N��o�m�}F�i�Ke�v����6�X�����jjh����u�CE�69�y��tEUw���jh(�H55��VH�^�:�k�����G^/�=��z�9��z���U��q
��D<�����)��]�����xt�/Fao�9� ���������J�9s�>I���X���}"�R����
��u��:������������K��a}F��]�K:�%;����R����tG�>��ic/K��������T]$UgL��6�D��mD���s=s^)R��+�%R�~RK���������Y�.��&��K�����g�Z�����JY���QZC�N�n(JOjwhnJ��`�e�Y[��o�����*
�u�������4{�$�6'�������������,�(��O�JC�O�d=���*�|���a[��ER��5���(.�:-pz=���'5�����2��)�C�u�1��}7h�
��h�?��K�;@Df����bXD.���kU`��%�T7xA��9�OH������$	"��������.��������6C�$	8w`�t7zP��!r+P�i�����Up�6�(����"�h��*� B
*x����n��	���v
����`�
������p�^���L)x���m���6x:�l������� &����P�6n{0{�:�f��SY��=^���P���	Q[OM�~lpT
�`����4��J�l,�
���4�l�y7 ������y��0�/�����+���
`���_��Y6�����k�4P���r`GY�|�]Za�J��:(O��)�P)�O����F�+�~L�1�`:
Y�E=7�a��3O��k�@��&��.9�nA�@~��,&`)�B�P5��Z�i@���V�H$��*0�%{6���u/*;�Z
�Bee�_0����
��H����6"m<���z���w�-�q��,�.9�O��T�}��*�VX���2X����<����c�K��Y=���i �@+lK��d�����
����5PB6Q7~��G�ea�Y����x������Dv`E
��-b&XQ��A~�RE�R�z���M�u�|y7r��z�^5������8�����S84�(�����;��>��3���N���c\����)��{��0�����={��z��8���c�:������:��8�����������$�u���S_�����K�?���&��n{7`��w���������!l�������X����y�����HM����+X�����'�_�t��U����f�0�`w����t4
��_!�2��9����g�hhv��������=�BCL�y�]��!�+�:�n���"��uMh@]WP����g���2����_Hh�{���x;��Z����6����n}1�rFZB��Ly������n���B4�NZh�-c!�t�OSA�3�Q#����r��r�Y�BZ?��9Nz��v����gO��n(oP\I�@h����V��\���;�U^�@Z�����`*�'��<����9���v�U|�a��
nW	�`�AvW��hS���s��$�DS��vA$��� "�#�f�
m]��a�(��	t
KR1����#���������y�"�cw���R`<�j�������:v�)Acn4��~=@,�l���D7������)�v���xH���g�C��|���9��"Y��"��)}��#"��;K*�oK��i��+���3}��_����N����S>�������R���|��O���O���O���O���Ip�z'Ai��_F9��U�����������5����z�VO�:�IPW=	�g=���z�������O�O���I����w����v��v��v��v>�S?������}����~��O���O���O���O�������$89����w��q�0>�I0��I0��I0�<	f�'�l�$�c�s��`~��������=o�O�������$8Y���;?�I���I���=���y�}����}��O����C08��38���������DO��0������cp���x FN��

������2z8'������99��2z��h~�9
��Gr��p���������IpD��^�	��S���d}|�v\���xh���]��S���)���<����
���"^D"d��$c|�<����X("�+EG5X%TUE��0���Qdf��`2.����%6����C3�I��06����<]EA���A�(X2������Rt!�i�7Db/*�q�����A��X�dP8*�)���%U�
�5�JS���P{��104 0&0,02080>b�>�Y2s�3��&�f�&�p�C�#
%�&�SVY\_bZe�h1�0�4�0�0�0�0�p�>�:��{��m�)����p����5��U�����P'5��+G�L���*7&n-�	����Em)�n�p�]Y���{P3����E��p�sc��b9+�e�Qg���5���g�w�����.7v�&�\��XI�8X��ZT�����[����Fl��l3b���C9�6�#�#+u<�����7G�?��Y��r��������e�H�0=!���t��N.9H�������O��s�������U i��>U������?�/�"n(��o!��E����#���,5e����F���a�~D����i3��L���y�,.�u�HUu\�^A���E;GeEt~L��.�E�]0���b}�ev�m�����9W��("�p�k�F��Z_����b�'��n�xp�i�w!g�;�_!�M�jP�+w=�:R�����V��"U
�����P�� gqDM���.��|GZ�=g��h�e5,c �eU���P��������F% ������Z7>�jfU��6�6zS��
�$3D?wX�;��k�\���_�����������2�w�!em*�i��,� �v����������
�*;�3Ra����q$`�.��,E�Q�T����"F��F~R�
��PO)W�&�Q�����=��)�$��'�����W�w��rWDj�nX}[��������K��w�����J�H��q iF*W�%/pk�E��G�I�����X���.v�'�������C-�|�c>%�����Y'����'u��U��3�n���i��F*�<����J������8?��X>�^�7���p��C��b��z`1�vo5��R��>�Je���b��(����vq#����D`����"f���z`Q
�1T��^ON��/����=Rx�`������$��<0��`��-R����C��_��k��]��h��gO��O.�������_��e����g��}E%�t��L�FYi����K)�Wy��|�j^�U�z=����E���y�IkW�b�v,��x�
��������S��(�q���U�	+���sG��e7�FM��#Z������h�w���5?�N��K�%+�Y��b��V�T�	�Q���x����1a���;��e������u�H���H�:�6.���#�Ma���**���Z�T�T�h�i:��]�����uHl{�H�%6-���c�u��Y�*AO��L��8���X�`����
Dl%�j�'��.�^-%���:M�w�����
�i�;�H�Z�uNO[��M
#l+��d��l�e%��O��T}���1w���THa&���%)�`w���g
Y��0���Fo*P��JT ��j�� �n/��0����|S��*"
TtS�R!~T��5{S��
N,�!��aQ��-�'�ra�M�
����a9q{�*PQ�Z��!�&���U�
d8���P�j���7�ZJS�X-�J���W�����a�M���������N����5�U�<��d-���:ZT���r*Pyl��]���WIJ�������u�g�L��m�?u0��U�������F�B�`k��A����Z"U�;�����4=;�\��}N��
`�`��Eiv0.:d��Y@���C�����y�F�rG����g��	�Z���9�;h�g��?�y
�ya��yqQ�7/\�6�#s|���Q�Tk^�t���&�Me���C��C�,'���f
��}����y��%y�NV�-����,w�D:P�y�:�yc��O��I�-w'�T����.��WM�76��S�����.���kW��U���`���HC�9��k�G���B��W��9����pM�P����'�j~=9���Ul�vs��Rp����~W]�u(W���r�H]f��I5�����M�:_q�]�~��i�;��6����F���k��;��9��O����8��sY��k8�J����$�_C�9�Xs����_�6������Z��X���>�����A%��:V�6�8����*t��u��z���G�wp��H�nE������u��N��������,�5A8����Dth�g��?�6F�D�@E6�\^l���dm��h��b�
 ��P�"`��\�6�.J����c��q�5#� '�c*dK7'2���e�mtv[�� 8�����V�7g+�'�p�����CA�8���f��\*�lsw����y�][�k���������U5���QA1'���R�����0�!*�I�l�f�l�yq���J
�H��(��K����t���>w����q�hA6z4*�fE��b��f�1k��'���y�X���dN�����^Y:�!���;3:��Z����|pQ����8uU����������������*�-vX 
���6
�Z�3���z�r(�F�ew��mGK����;3��&��|=9��sH����G����=�k����{�;�8�Z��"u�g�M�.�h�Y��
�kf5�������l�i�������&vGY�A��:Z�����9Fw�e��Q��
=�3nD(��j���z������J��G�����k$�����z�\�`�
Mr���Agt���xt@�i�%Kb��KL_���'���N<4�q��+P�+�d�����CX2>Z2�
�^��A��dA�������RKf 7%��#S�N���N�o&����pj�q[ ����d��A����V,���Z��8o>�"�-�X��[{���P��VD�����P��o���AS��8��y`@��V	��d��n�~���rW��)��y�Z��n����0w@�-���n�.�=�DxX��rGj$9\��ulQ��=I��e���#Y��E/��xQfK/�A��2�(����~��`�k%|�T�� ���OTgDP�#h}#�9��#��8��}�KN��v���$]�a���,�:�Rd��sW����$3G���Bz �;5��8Xr}�3RP��>@�|��:�+����p1d|�m��3GEFoR��������MFE��R�Rx2:3�D�<F�gnS1������Z� �����N�)9�AX��G������X<[n��d���0�)ky}2�=e��8;��'�`C��[��e������*O�����c���������b������%�uJh<pd��+<7�����3j��rj�;Q��&���M������Jz=DK�&}����[�Eo�����v:����%�D��Kj�Yr�"�SrV�4�����)�R��M����s��_�C�A�8�I���=�vL�_�=��5��G���#�rE�����[���������d�{Y�7����@(M�=�� �J��l�t �?�hP�)��jT�����d��AZ���������-=�1`�������i���dd�m8f��n��
T>�D����"W�l�6�F�����~W&i��'go��\��(QR���zAR�]C��4�|�����0�k�D/�;��b�k�5�Z��Ig�>E����;T����d����)}���i��]UD�y@�|)p)!D�@�~>>�2�|����b�����z��r�f�mjd��
���Y8O�U�jy���0�`c�<��^(I./B��G�p�(V�R��SZ��Nh9?r�
`�<-=�*wBj=B"a�b6Iy�h���+��:�+�	}�
��bz�6��Y{bO������^{�F���gJ����CoK�7�������tZ��-Q���[B�n��@W�i}��;.p2H�7���3xY�t�@��	~M�>M�w��$��h�������(�v���rQ���!�E��2�1�ZN���%yV������N�N(D{����@{;��HU]l�)��1��Jb'��j*��&D*��eP�t������S���0/?������#�!�J��r�d9�B��J����)Yr�����#�O3���������A�Y�-r�����F�Me@!3�x��e������Y%�}�1��FM�kJK�&����"�a:��%PJ����P����n�;v��g�Y����S%��D��xo�����P��:�tU����c�Nb��gPZ��9E���&�����$AU�#���9/WP����%8���e��Q5V.��,��-FI��()i��UZxwpI+�*�j��Jwj�u���A������N����K������(��(���"���n��h�������m.,��w�*�E�R��UH������x������Rq���q�.Z�
�H�HI�)A���n,6Q�7�(���F�"�������om,�i�������v����09��^3�h�?�����yB�3X��6L�J(��b��Y����]�H�rW,*`:xK�yThW�)������i��^�������[�A�Y6����,���)k�"g@�n��f��#Mx0B	
m�����l���&�=��,�&����}w�^�E.n����)���h��P����[�~�g����2d�4���\+1�o�$�@��7��e��e#�S��^�z��~��v���"[�U�+a]�����n9:n;D^�{C)�$��"����i�?�n`���mbn�����G��p��C��l
.P-����Y��PH#$/g�5r��Y���Z�\k�"�vg��r4�k�A0+$�q�B����Vh�y�`�����$*4�;������d��=E���G����ue� ��@~�trkZ���,+|�h��uJ���8��<M��e� [{������)�����w�(��L[hWR����|O;�^��������b�P��
�����7�h{���'��\�y�@k���c��D�+����@��t]5�H��������B�
���NfN����of5�l�d�Lo�6u6I{�9q����K/��&��<sS;�A���4���b�/-Z�����hP�	>4Pa�t/O���N��q�X�q��e��T���i|�����d
g����� ,SJ�-pD=�T����8B�����c+/5����2u��g"m�@����\p�2�>�
�o	C�O�[Zo��A������2P���� �Yi�R�_��a��#�����"������Ay���L�^_�rN^��a�4�����5Cu[�
��3iR�d7��|����B`���u!�M�+�2�����J�vG?���0�v_\�W�
����
�G�����Ea��k(��a�Cc��=}I�p(�p`!fa������	�*j��>��Ec:��Fx�!��RC����y��B�����
IWm`!��f�vZ�n-��8�����B����lj���>U����C��n��4�,r�Ao���l������H#
^5����W��&YW�.���m�
na�!�s�!����E�.�.2k�����>�P�,��;�,+�/lU���XO[�����nYs@�p@p���p�;�9P��t@j�^�'�x�U����'�z��4*�$�Mu@���_�h�����@C'�jue��8 �I���4]VZ7Gb����B�����@��X�F7P�4��I������������,���;���k���V@w��r��s���`��1�
�%�0��P���t@Yb��b�������Rtw@y��"�b
����F�y���D:D1��.l����Aday��A��>�t��:B�Zy��WT(|i� 2�0��<���Ad��Ad�j�A���<9/ �S�A��;��r1�
"o6�� �[^��Z�'?i����
�8�46�x�v�� ���'� �_tZ
��V%^�8� 2�� �B����Df�o+
 =hc�tC��O��������9u�gD����x�A��lDZ�5����L:`��q��������h>�4���;����"��EK����4�
3�>����=^*W����2(�1�������R�Z+��#EZ��1O8J��J���1-�+��B�`�0N;��4�a�K������hM��Akt$�4$��&{Hg<��oW����C�����Kxu�LL}5�4YN��K������ne!��=Q}�r[�Xu1�~�d9��4��)*��U��mGNCbh9M���:;]�C�>��:���3��2�B�"�Zep�)��A���=a�OZ/!O����t�����4��t9���c�S������1�����AX�����.w[Y��{�'��,��K��Eix\u��v���P9���r�Iy�(�]F6�&�(��(���-�9< :N`*���hUW�s�^?[�sH6�t~�i����V���he3�3�$�=��8��5]U	�j��`�M
|��,X�Q��;����(�������G��q$��^��H�a���`����(�t���t0�K��1H)��E9���eC�9�61�(�i)tH�m�_8��,��J�U�n���;�SG���Vk������C!�G!�����fd�"��������U���	[I6Q��������+�~��������@�~�����#�>���/���NH�����.����
��y9����1\#����k*x9�\�h��M �t�R�[/>����B�����r�>������%�[/pE.����^A�{}��Rg|��wo�������[����q$�~�Lm�?��8�����g,�M��*:�3��X��{�V|u"������,��'�/�<_k31��r���R���R%M�=�e����z^������PEEV���nre+Wd�zo|�ujpYr��ZA,����[c��N�(B� "�~)�X���e���H������Z���[F�/�P��g)�*N�e~��!��>�
U��f�(Qr�8eme��������D�N�R�S��@!�E��d��.��	��}#�p�a�����b-�����j��=]��XA�\�@�T�o�8�5\v��a�
����Kc�z)\��t@k������C��A��6��_dp0.�!�=��������#�"�U��6A���m�L�("KS������A�w%��ST:�y\�:���G���Y����"a��g2�bc��T�L�;�W�n`?
i4Bh��	X�h�?��&k����4�4�
�����e����y��4���6���uhja��jv��up��a��+o��#��i���RmS0����mHg�&��T���hc�!BE1O���6-�IGe�e��q��1��G�@�#���4(�dM1���f3������x�'R���Y��[A!�-)Z
�Cn�9������O�[��uZ�v+`�g~���o����� !�;f���vB��s��ar�+��.HNt��6���s�B|�&�����A��i4�\Mo4u< ����u�z�4Za�l���$���M�>4�%H����F���n����%�N��z"� ��	
e��pB���R�k�O�
����Hk�r]{N�4r�}E�qh���@��US�p������I��;�{�:��7����je��!�A�����cF� ��$Ha�e���aU�T�'�R�GF�@�5�P���Ke��b�j`�X����	�,[!�'mZ���b������&]�����7�{p�C���&i�elt�9�+4
�4(�"P��J�}�>��	�A(|(��e]:>�������Z����W+���l�l��jQu�EF[���^��`��~��4'�����2���
�^�a��pcT�AGRG�vF69J���R��	�)�0LvL����I��AA�R����0L���{tL�NI�3/�
1VU0��)�IPX�%��ZLz��-z3�*��M
|k��7�)�������i���e=JSs(i���
���3 �Y������x:8�R��P���v��`mE��T!M����@�&d��S���I���aB���h�{
on����O�EwN�?K���O��(0I�3�=���YC��4{���=���l�e��m�c�Z-�Dm�qI�<[Q�u���L�;����T��B@�F�H����.���$�<����w��m��n��3���Vvh��v���bi�w���>@�����d�X�m�6L�0'4�<
�!�M���Ig�V��:�� Dl�G-R5�����O������7K�P�77�"����;�E�:`���
Z�niNt��g9j�u
('�����v�`��'���W-KM��������H�Mrb/���nJQ8@�����`0Q����:��B����Z����3�����I���KTI�;�0Q���|v�j;��1�\�<W
���49�����A{'��p0���G����/r�#���6t��6���#O����LD8w���5'�;/i=h��2Y����D�����a��6u��H�%.n("�9[�^t6������P6f"��V[HW����kT�����}�H����N������D9���������e�f����('����I{�\���������!��~;B��#|���2�M�M'
x��7@	�+�%�������K��$/�u�@qej@�!��������bT��	�D\�k�Q���_'G
g�p�������+�������lx�����~+�Q��=���@yx�#��v4��a��2r���xFS)h����e4�������>"��5�Uy7.*��������P����{Zn
��
�5=X��r��&����^���=����S",���j�$rJc�T\AB�48����[)��z�P-���)/$F������Z��h���Qc��Z�l�-�t�1��� ������f�m-��12'd�Q��M��	en�m����P�����>C�`:b�rs3�@)i4�W$Q���V���!���K�����gP�S������m��B�rkv��j����Q�S�H�������&6Cb���tT$#�{���mA���=�);����2�m���k��@i�4���|�[�g�;e�u�)����d�R�4JW��X�Y��E2�a���mh|���?Z��H��l���u���,��Q��UVD�a�6--1��7 ��ASCKZ��}5�CR���e|U��0dY(E�����Dn5J�[*�RoD����@�cT�n!����>������������:�D�/�i@��9�QxV����i���7�Zs���h���M����F$?������vQS�<���Z^���=��%�1�=��u����f����^'9��:MFC��2$��T)��^�u��@q�7{l���J��]n��o/�����;{m5<��*V��������%����?"���481����+���[�f� �m��
-3�9Z��/�E�F~n*��f&J�F��%
\='�V����K.#Y�qA��7���=(�7F+��H*����x��I��gV/I#���9?(��h�c"�s�g�|��A���;$
:�x��T��hI�

��}F���3�(IJ��H[J���e���^1�vb9���W�,�����&�6���=���d��]��P�M�@k54H�H�|n�u�4@}b�mPZ����~�O���Z�C�mR���N���A�!����v���]���T�K���L=)��#��o�=�)�0��C������0<����2/�y�;kP);�(W��\�m%����FL�x�����C��r'S�4Vg��L�:�f��zm�=c�1?(��Pf,A/^��#��PU�,�E1�����*�f�F�{#]�������o����5����HC�
��V���������;K*�oK��i��+���3}��_����N����S>�������B���|��O���O���O���O���IP������~��_V9���r��r��r�TO�Z�IP[=	��'A]�$����_��y�~����=�>	N�'A;����N���I�>�I���I����@O���K?����O�>�I�W?	�g?	�W?	�w?	CN�S����|������
�s��k|�&���I0���
�lz�`�y��y��_��?������6}%��|l��Y�p2�v��C��{��>|��V~9+����vJ��
�������h�������������?_8p�pd$�9�����0�$8�>	N�'���w�~��J������������$�5~�����������������������IpD�$8�x�?�>���*�R�'�������H���H���4���4������w�y�;�9����*�?��x��2���~�|�C��b��(��`�P=T�&�aE���`&&�����@����\h:4c<�!M�f������0Q� d8%b)"
q��B�!�o�:�^T��*�)J�2A�D��pT�S�UK�(��+j��zC���0�0b(`4h@`L`X`d`p`|�}\�d&
�
�f&
�ML�M����GJMP1�0�4�0�0�0���0�b�a�i�a�a�a�a���|�ul�wkV�Z�`�%����wT����rRA��_`7g�kb�;�
�^�{�T
����E��9��j����[+n�S�k����e��L�]x���~�.������FQ�~��-��%y�����V3�F��K,kwN���e�
Xy�����u~4`F�|^Y[)�����]h>"�t/k�����9V�����K�����H��^�������{������T���2���B�:H6C��Euy�����i���r-��1�O
,r]�n=e�2:Tc"d�D�[�{�u<JJ&Z������#�Jr$���=^�O���c^�[�"���1��.�i�^Y@���iF�NI������R��q�V��Z�YNv3m�@�UY!�#���jw'j[�V�Lx��\���P���B�yL�9�Z�:��[���Nk�c�K������&��x�vY�[a�p�(K����,ih]^7\�G�7�m��l�v9
9Rq��c/^6w7�*3ZE�n��^`vA,����J�ZQ���^�J���Q�ent`���Q
�����TS;yk*�,�P�ir�7�����
���Fu+Q.�v�|���V�VFoV�{��p�cD�y(���1�����Y�}���1#]�$(��bp �}���GZ��,��"�j���Y9z�m�+��*�
���}zO!A�P����K�V�}M�����	`�#�����"�SW�	H��k��EZ���dE���J����b��������)�M���c�3��W�KZ�~.
�P�d����
�
n���W^��e/W��$}�4�4���)����A��Q���%:0��eX��V�!�]CR����{����
��%������6lE�s�M�z�Ui��gh�6����[��B��2��E��(�]��4��b6,���[����VN�B����?������yc���GV��CN�-����@���n[��h��-h�gZ@�!?�`S}9�#��D�k��� ����7-���]{?Mq%:�K<��ts��4Q�Q4����%v�#?Cm�
u��K�&N���+@\��(+�tl����y������Z�5��i�#�`��>vF0����f~��zV�,A��&�����2������u�RC���Ze7D���4�����E�_x��%�t]4+���,{>�/�n2��l`�%>�6H��vG��4���$������"��;`�l�-�L���3!�g�9�n5!�� >��`���aj��J���`<c;��Q*YXw�-�����^���d�+��]��(�f��M��~��-����3
��&��[���g.n�4�qz?;w�v���e����6T{HL
�p���*}Y:�2�!C�����X�������P�{���P���)�������1�xf4���P��b����J�c��e��Ab�JK�� �]��I�T��O3�"Fk�����1���P�f�f�g�K�Hc(���X8��{kv���[��k+��W���t�����*='�A!}�^�
w�p�kc(4���4c����F� �~j%n���dE�����&��mK4e}G?M�&���B�s������8�; C���{��@�+?\U���(����-
��T������f�[��1�XpwZ�lg�=>5�>���t�fJ)�`G������_x�2�R���U�R�E(GEh@��h&B9�L�
G�"�0�,���.B���3��!UL�&�%@8-� B����/�R�O�A�9�bv5u��PB��0����-��|����=<����<%$9mU
�B���Y������08���'�v��'L��nIH�zm+���X�@?�)���Ceo�����BP����xf~q��w�����s�YMC����$���m][)����mQ�e�e[� ag���~�P�rhg�cC������� $�"�h?���t%$�4$�HH�8d�����B�Bu��K��s�.9������Y���%bF��lmM�|_�8#��O	�H��E^������)	N����e��������c=��%xi�"����hkQ�z6o�6\j�Y�w������(�H]g�b����e��\���x�g&E:�������(�>��'��S�-�M6������t�<�t���W[�8w��Z�$[q)dK�x ��h��bA����T*w�>W�w����M%w
�c�u���y+�8���}�{sSl|_(�3d�".3��}�3�s=G���~N]#�-�~�pD����R�	�O��1BN?wUM!���
��y����uf���k
Or�@��5[�7^K1�J����eeX�$]�g_#��I7'm��;f��sa���D�a����<��'����b�PD�[SA6w�����P,�^������a�%f�.#(��n�9��"�]~���=�?@�|������I����,,���%�iu$-��7 k�[�����c���R��y��TP�A��ZG�"�����
���Mo�|�`Sf]3���{����+��c�H���%�<4�	�R�����Lp��;��~B����B�e�f��r�����+bI�A�[�b���AHTu�l��+�>��&��6������R�D�����$�x���/R<Wp�^�XSs�-�uM|����Dxr*F�'#�$>�����*G�q�}�g 9Y����8��7j���O��;��T���^��*�J�������\M"���@�=Rg��.��C
D&_b�lI��EI{����US@��e���-��a����K����h��m�B�=LYz���Wn����}�Yj@E���T����q�<4g����fko�;T\N2#����+O	����2�DFAYQAC�12PO5��F%���v��7��������}}�P�S�%�4U@�P���C�g�U�}*u�
Vr�������o*�=���{V����QA�����r�^�.�R�~�����`�M����W��e�J��Mo�(L	
t�Q���Sv�h���S�������-���Me�8�����YY�����JMw�>�������/)�����x�R[��:��VR����XDg�&��$��'��|j�h�Ou���0�L��K8Um
�T_�0~�N�vd�p��PI��~T��;�K

��{�"jR�T�VQ���b�<yi�[�e�$9��U��H
.�h\�-�����;	#Z=�������
��+���,h;!�SN�j�
Y���;&��}k/���G��BL�1�>����J��D�5C�\*|��Z����J����T���IY����S��%T[���2m�FI]K[Xe2�y�������,�"=7}����Zv���������P�j��4���-����S����_����j��<�4�.�<�Z�������%��������	���R����3Yj�����`�����cP# ?���}S���[k�B7���
�����f&�m7�a���������xl���,r������.�phG���j�N;2�"�;��������T���W�&�����m��1�i���.�fZ������Roj�r�</,'HIAj�'�
��P�T�g�3b�������<X���>�����E�:KVO\p�g�����������R
�Ej��^������%���r$Zp�.�:�<kn��-���8���q��ur{��I����i�	U��F���g,�hk�|B5���=�X6����@��'������J!5]4e�����ha?�Lm\8���{d/N�-������T8���w���J�����J
���=�m;n9��O���I� ]�wL�Sf#�'/MO;�>�����yy�\V��z�f�Cv�N��D]�S�B]��v����~��-�&���7����W�"�"^� �
K���Eb�@�u�ZH=�=oZ���M�+��z��{���:�T���C�,7cO��V.���������K�o�Z�G&B�:�R���K��������I�������sC�����
UW��
�a`7����ILm�H���.,v��GS�_���m������#����CVNm+>b���Z/*Q�FM��=��^.�m�c�2���R�U��d6 ���}r�������L1������)��j/�E�����6K�S.7U.2���0�84�+7eC{��J�(���h��_y�5me����a��3��`��aw�)���*���S��L��+ ��Q,'q?#��;�a.dba{hG2���VR�ya}6��hnB���z8�5`}���8�b�J��]8*����������I���{��
���d:�X��q5se|�Y���_�]�9x��VV����z���Tp�8�J�?���vR���@`}TT`�8��{�2{�>�5�V�@�$/�b�-
�������l�4�|9f`�(���qf�S���N��t��1X/�E]�nK��7�Ai�.�d�A"����-l[���Y@,�/U.��~^�;�
� fF�1��h��*Jid��Y:�M��������\���T����4��I��c�G�;�\�h2�"��8�J�
�IK���a�����~�A�-�w�����r����/��}v�N��Q��S�q��gL���e�4�.����AZ�9��M�n�&��?X�B3�����o�
��'���LDNp0� i��zS��m����{��Ef�+�"�D��"�����U�R������jf>7�����l�J���d��n�7v����{OVR��\{eT������'��hf~��"�
��<��9�Td��7�Qv4n{3����~h�7��1�a��;����)���/����jq��&P��^O^��fS��4�0��5�
�����x����TtI�T�C5����5�PS��Y��r�2��
��;G�B��+it����gjeV�1�H�"3w��@u���kZ88?�u�#vG�P�k����nI�tn
5�%���,�r!�r|��X�����(�������g�&���^2�8�����T�Iqu�w�3R��H����c�����Z���X��4���^l!Y]��^}������NT>|g��R��[zE��z[�����f>�����T]R����$G&_�J*�g�����I3��\�h
�mQ��r��t�(���`�]8L�����|g
�pO�s�� }3CU����G\X�\G���ek�����(�i9n���	���3���-�����%R)����3�5���Zq������Xq��(�H�Lk-��4�U�i�>�unWs�5�Z3���-��<�fZ'��km���U���<�YS3��~����q��c�^��z���%��;�u��X�3-E��8n5�3-}2fZk�3-n��\J��3-l��Nw�O3-n�t]����m��x�
��DLc1�r����e�^��Um�.��75�-�<Am!����j����������w����T�._�m������T5��^�a�nW��$��#���f��{�wo�w��7����Z�w��2���x��-���C�����
���Tf�w}����]���y�n�t�U
�G�Lw[��R 2�.���Z�w�w��{V^1���5��n�{���5�6N�3�����cF�j|��|%�itA-������3����X��n�|����������������y�:4������q�|g�E�>s����b[����=��b��{�9{Iv�3gr��a�|���3�:��9������D���
n��Iv7umx�TzeT���17>(���xg�^3g�f��r���9;���5s�7�z������~��w�3�s(6��{���A�u^T����b[�M?�|���M]��U����B���9*�0s~P7Dn�H�Z�PM�6�������k���T9B�3�=�f78�\n�y#��y[�[���n%��9��h����sIY}�T�	�l�H������:��vV*�<��r�j�O�g�����z���,��$O������d�6e��%�����*�@m)RW�R��)��n������������	#R��W]�'p����~�x��:����=����o�^r���Bj'��2��.q��A@}���b�����^�{C�-����>�S��2L���3K���Jqum��-��x��V�2�6*W(�6�l��WD������^�����SWv��!�2�"����K�0���LG���NE�-Y99.�������� }��������J�kN��_\'�tj�-/�����&�C����F+YoXN�T��H�tp
��:�!S��k�i��@]��� NZ(���ggG�A�3vRi�"HC�E�����d�R�>���&R�'���9L�F��n�����d[.jMr��UN4U]��Y9KG�~����^�W��r^TM���f���w�7����!f���.Z��l7�d�/-}����uem��TN��>�w	7F�����I�v;MG�%Af���o�4�u�gz��.#��<F${}N/������86���s���~M|�Gr[w�fbT�i�*��r��:������W��5RP���5���U�E�g�����8�0PP�/PJ59P���YP�E�z���p�������R��a�y?{$�6N1��Q�*��ZRCc����|������(���2���[�����t���R��E7�����8���}�A�~��#H�izbAz���������P��M?�����7�������~����;>���<���� �]Q\�8�b����S'��H]��9Q���w<9�#o*��R���������('(����pS��q	���
���Y*IP[���S��i�f����F��
D��6N��##E���P�.;����o�9R)5,������$�Wqb��g��u�����#�
��,b�u���)E^�F"�FzsC�q�~�/���w
�:���+�]�I�(�g�~�H?��&k��!�_o~a���!)��`n��/�l�@�>dP�TK�C�������M��6�����Y5m���e@�U>f��j�Ee1��d~C��K*5�����^���oT�w��UwEl�I>�&h�Z���0�{��f���[��'�:z���U�|���g���[��#j�j�O��z�'�
����c��Fl��^	�\I�1��u�2�K�D�$��+5��s���^T�r�[���t�<�`>�#�J7:�.��e�k��������B�|�y������sC�sW���:�P
a�S1Jlh[3��3"f�n��Z����/������{
��mM��
�6��,��n�{��2$��~��� �J1{T�m��~����8<l_GQ�]7�����h�J�G����3#B/�9�����kD���Pe;:H
�w>2G^��nE�J �t�e���$zD�dy�w�/j;��t����KR�J��b������g	���c:�{�,���_������.�2�?0\�Y��8i;��g�����HM�ZB��Q���e��8��H��"F���&�H�WLG#N���O
�<��jH�I�(�����:T��f.������+ ���}@�������Yj�o*S9$�����"��zA����K7��7)9�[�U��N�f��fM�hm7�:�B
�����+��	PU���
��C:>}sz��|TWs`: l�Np�2�dE;Ru��Xv�U����j���u�Msh�����ueb�&:
��.M�!��E5�3\��2��v~��n���v�]�����0���>s~�0%��v��m�<T|��|uhN�t�3��MxL
�dl�t��m��vM>�n+��A�^@�F����e�\2��N\���wP���a5x��
\�#Ej��p��m�7�t���������1��H���_�]�QQN)R9'����s����@��+�Xi��V����=�8���yG^w��&7�f�u7{�����%�5C���y���SC�E5^�F�9n�����m�D��u+Ri{���#����L+����uY��\���=����:���<n^s�%��	�t��R�J���)8�h��
}h��l	Ts����g���s�3e?���3��3w���L�-g`{�2x��tz�����M7���k,]���[�j��������[:�m�	�3�������JJ�Nx�K�c���/3C�&�]�\w�����%P�
WHNgF*�����}����PD3��*��P��jf���u���z�#�eX}�h���xnj��hk�T��7������"�=�C��J��6���+S��kAa���t�2�[��om��dN�U}u;v83�j(�/hX����n[Q>�mf2IeZ,j��B��w��j���n��I�V6��4�;��l8�`���Z�����}G�1k��u�aaf����7�{D�V��c[Nv��eG*1��Jq�T.[.r��cY r��_a�{y���C/��.j���j�xg�4#�9��kf�t���M-�
�M)Q8^{rV������+�Y�a�
=c����t{�$�6'���n�I��M�qE��j���|2�@�VW[��Q�Cs�l�Sl�������[q��e9��u#R�EM7��������gJ�<`D���{��[�_�& �<��k��?#��r�AE�;{b���*WQ��.#��R��>��������Vu\	��Zr��$��g-b�����X�����u-y��T����3���-o��*�,��%j@�.��_���7���[9B��s��v1j�z_�"�5q{���$���	.��n��J:��.�+F�\W�5���z6�^�5��n��NT�y�!UH�6E?B���;�������9 ����������
 �y�0��6��(�������;����5q�jm�Z2U�q�g���V�:���o�z���^�*I��F<�BJ�R!�i�z�*q �0��a��G�Y�)�&C�����(�wWS#N������Z��Q��&XG�U.�_�|�b?Am�.Z,E�<������.�l��'��oj��m��d��c�@��v*��G��q��W2���W��h��8�|S���w�E%�u���{�O-K~��J�o�D�1�(G_}�y��
��2="�,��x�W�����)���#�7�7��=�_C��}�7_������b�R-��vA�����
�uz����d|-��j���2����� ���r��������
��z�������2�u7�Q�Fh�x�)��Te�+���o��pLT�����#5��~�i���+���*eW�9�NY3e�?N������
������������Vo�����Ci�I��4�h|����y��������3P�,��&pSo���a��
�d[�wOz{�,���m��%�y�{�c�1�|�i�{���1O���S�,���y���\���FX��2��1������N��\�V8�g�3r������������-y�!{Ka��,�]�~�]I��!�6��:bQ 9����p1hR��o��N��~����y���n�y�Op�[��hc����}eF8&���fC@S/�M1�3�bAI:�w�v����rQ�7j������l(���{��r��0��^���-5��
���GNMfW�^]���V���ZDJ%�+`g�u�:Pk�����sjNe
��$f��G���#������Ks�{K�]�|�m->��o����Ux]Z��mO����fE�$�$�5���k��Pj����z�&^��F����=��^���e�L���g	Z�Jt�V&��L���ueT�
��O.�(�h�O����T�5ih�J5jW��N�����J��mE���������������4��1@]����I	���?��C������W��"��gY@O��[7�u?
W�����dv6�$�;����8����9�R�lN��>�lN>gsJ��pNz�=K*�����w���]i=���_����O���?9�sD�����}��A�i�W~����`����y���������dKY���G�Q��W9G^���AM�iPK��2u��A]�iP����W}~_��?zj�k����;�9M����1�����i��N���{���{��M������G�_�����)���O����"���?�=�3����L�i0�<�u�lv,h�s��������a�g����yz}��<��#=��E<M����|�9�?�=4�sT8�����rzX��}��'�>x�J�T����G�~��O�����SV?�<����<Cxt�i���i�0�i�0�i��z�A�_�����_�~�����������O���������4���������O��~?
�{<*�4x���������!gO�������<���h���#���G<����q>�=�y�{����c���!�x�</���hW�-t���c���b��"���40�c�d0\��qDab�� .�b�HqODM�?�>T!�P(
N��2Q��dP8(5j)*
u��B���Po�:�^L���h0
��#�����n��8�(��+f�#{0o�:�.���A��	���8�����E�]�u�����������|������NT�)+�,.�/1�2\��k�n�q�t�w�z�}�	o�#��{K��$�0�I���~��\�>\
*��d�#�E�Y�O������	����P��*�J����W��D�P�7U������,\/*i.�~�<�\6�m}/���,���I��EXyNf�4���8��rLw�J
�K��(�t��X����7�p�����2Py����B����3��M��N-7wx��Ly���=+��v�wmqIJ����;��T��D�|��(���!��w�-��Oh9�Q�W4���c%��7�"n�'��x���-�4.(���	�����_�����l�Wj�*^���Q�6aBu��fp5�{�5����H��Z(�Z����������F�.��,p��3��8H57�����L�&���W�������j���������#���%'�xr�����F���Zp8*Cs��U^��eAzY��'�40k[�&
�Ong[5st�K7���<�f���Y�����	�Q��}U�����:����� ::v�9����&AN�Y���i��
d�2z���U���_� ,o�1��R��i���wA���[[���"�AF��������#	�X��b�r}Ev��[y��������2���x�������T��H���;�]7��s�F���y�;4R���d%}GWD��T����4&�bc@��v�w��]%81���d4E�%}����K�n���f"7� �W����d��TjA��(��4#�{�Y��F��8��:J|��w����.%N�"f�g����2�����5k�����1�������8��j��)�I���W�T�y�{��J�����W�L�&�:��V7'��.�&(�e�%_�W���"�-E��F`��g���^Y�ay"��V���	�E ���f"����F`1
3�o���I����G`�e���v%���i����0��1��H�t���e�W��q��w�e(c�G�={��q�Bfs�{3�2��5�s��#j���C8�;�
"���Xz���x�Xv>gu�&&�.��������<`�b���P�'w���[�q)N��G�f\�0�Q7>Y���*�8��6�����?#S}�T,>j)b�\���7j��^m��=��/�����2�z��1�O]�4n���;���1��'<�����l���I�b��,�n��U���F�5���D�k�@��^�b�X����{Jm{��d��}.�hk��^r-��Xb7Z��*A���lK��Yb���[�5�b+�U�@�T�0���Dj�A�+��g���q�r��E�|Q�����X����Wo�<��}����#������Y�
�R�����!?h��c�$�v1����5o����e��U.��9��N�W��,5+�h@^���D��hf@Yw���2"+
(c�(cQ��2D2,���e��4���5��i��y��9+J2��jR��J^%L���l��9�R�nl�g�nT�E�N6��0��+R������D�g�l�n@�Z��On3P��pb@K�f@Y�+��+Y���E���T*0����A���&5����Y7�w���2a�+��_$M�y~E\kH0�5�h�|I`MaE<.j�Ta�g����I�u4�h�H0C�&��`����L0Z�#G��,�"�p�I(��6���u5K
f��F
��2�s���+O0 �[6�O�z����9�F�2Q6�2�P�t&^&�o@%RU���m�l���L�����eBb,W��=�o&@��-�M��+U��x����$+�����r�������j�E�T�F�������2M
_h�k�s��	���F�sj������p����;I4�a��Z��:�������aQA���7��i7�Hl}.���V�&Z��&�	i�k!C"�j~��tG�*�\���V}zSa����^�N6���5������T��4P�������f�T9Ko�l�e�-�����G������^�O�4� �E]I�Q�������D�+h��SG�_���U�7>F�C���7��k��5�]T��cEj�����?��F��0�q��h���N/k8��F���Z�<�9�'m�������	�B����p8=������4�A�l��_�W����f�32��0��GC]b	Y��_D��7R����E�ME�a�H�x��1
2�[9����`���W�:���Y�B/�Z�(�����c��E
:�d{o���yQ����=+�������&�nR���r�m|��2�	�`�\qjE��}D?��[��i�g��xS�VTS8�G[Mv`@�]�,�)�%������_O�zx��w��T�fE\
�
�0��Us��+9��)���V7Up2nko�� <�.DOg���tft�?wB���SkQ_�����V��5����>���',PCM��d��h>�op19����4p*��yb�3pW���/u����9�����(��3#d�^����Og��8
�eE*���c4M���YU��
h�H5���,�h���t�H��,��ueX�6.j
�Z��u}"�[W�Ttf��~��D��fp�#��[F��,�*�+@n�'����\�J#��}�C\a�mM�zD�b@K<h`�`��������M`��G/Z������4�I`
�#�-�y�]	���*i��b'��@��oZ�#R-�Vl�oIO��})��
4yy�c���gsZ��?]/�����t|Y�2pX���<��m���~V����+��S������.��n|8p��	�i����t��A��t=l�D�d���u�T:�W7�[�O�g% =���)��Z}��|���|����]��c__��-~~�����)a�&u�5`ls�8FbEb�9��tZ|����_(��7X�i���p�����q�n]��~h���IA�=��-����������t��B*:�-[G�1FZ��[�\�n�x|Yd�Gb������g��|��
p������^�.������G�F���r[��p���I���}C��u��%������1��`�@��\Ur>���z����w��y���/U��(GV�c��{X����|Z�nO���W�+0�!�����������>z�����-a/*��~ p�3���>�cn=��x5�H
�g��	�#<pj`�;��[�~�%�nPI�3u5��ov�[�"M>�?l���Ez���m��]��+��kEhmV4c}
����i����lz�.����]��(���wZmr��1Q�J�X������	�a~����a�gW������IH�d�H�;e�.�p)/{R�P~L5e����@5(�����������
(�H5��0�a���z�,!c��������opV�wpj��a����/cMJCN����|���f�.�?���9t�q�{�c-Ujo=����.���6�q���?�F~��D�@Uu�c���v��{6�'��Fd��Pk�yA�mq���]������ol��.�N�	o�!TP����'k�m"�;P�	����K��m�HM�m�w��x�cx������Y�$`��$)��Y7:��7����~����{@cGj����y��q*%1�@��z�{(� �������/z3���V*����������(#^�{������$SGe(�/%�]|���@�l�������!@����Z���8��&���NmC��W� �B�(lu43�@��{����N�l.�>jR�>�.���^sr��Yz�iE��~J�+����1���#�
����q�K����
�J����_����1X/�{��sP}d!���|���r2�!Z+R3.�5����v}W�nX��h����=�-+R�`��j���k]��D]�S��]N�������#J�����}�@�Y�y�"DQ����Y>i��l��S�5��	'6m��H;k�I��|���G��e��q�JJ/;
�;5�;F����|���k`S��uC�
sZm|h-����B��#q�P;�E�3��.�nK�:uC_H+�L�7d���X���1�tt��n� 
�G���7")�|L#�O{��������C��X���b��O�Zx�i5��Ec��9�~������XF����|��w��gF����[r��b����g�|�S'��'�l�����R6EZ�o�����_�P�Z�H��[����Z7�j�Y���y�7�����D
���k&|^�;�)�:0q�:0�i��3��R~9�j�.��i�?q���L}R>�c ��==P.<��a������S����.)OM��%���v���q��D����<��f�R9���eEa&W��Q�� 3lE5yfu)��w7^v�R����&?��.�v5�J^�+��E����)e�
���+����1%�:�U���a�-A������=���[�q�k������&(/��fl��(�����H[#�r��et{�31��r.#��|�g��No�3QWh�n�2X�pflk������SN&Z
��#���4��ve!�A���Utc/�w3~f��5jE9�i�A�� ��������C�_���7P�6��)#����O{
>�a�?3���AB���s�S��g����-l�M�������r��CJ��Zf�4�g����Mo�p� �u�3�yz���Lcq1����c�h0b��X<f�� _�:B;����������M�)�x�;�U
)�=3i�6L|���D�]QF[�S�����`9u���`'Oq'��"��E���/F�1���}
5�������)��i;�4�58�]w`&�7�������]#��Nn3�K1R�vX�����sK&���<�5���)�{&/���KLq)�Jl���K�� �g-tnw�4��Oh�k"#
����1�A��O
Lc]����M�}H{���KS\��������]�"5n*�(���
��T���&�oVI���~\��AV�5��!�����k+��4�����Q�����aV���Q��1������h	NV��!�K1��
7^�
9$��!=����M�Y�J��q��
�M�,*(J����CJ������:u\i���@[h����y���&f�}]�����P�`5*G�a�l���$L~��4P�z�p��������M�>Qk8�:��=��rG���9�UUL�S/�.8�����N�49��l�G(����h1�}�?e���I1'9%���IP%M�4�9���V
����|Nr���9	�����x��$�z��I4�d%#�����$��a��
tN�s�3>����WO��M
|1���jq6'1�:tqNr��9�y}���������]���$K3����:'9�M��X=�0'1����a�������$���I���w��3�IP���`��vV���K�>���Z�����@��L!��
z�v��
�n��@E�:0�'����4,�
�+q@�#�hD�]�C���L�z�5.�	�1�B:pk2Pn�	@�1��F�@b�C�9�EZ�h�rH�"Q,��r��������y|�n\P���������vHL��
L~K�������h7���|AX�;���v�Z�	@[�%X�8�����{@��F����ip*U@�t��t��<q��v����b�@�_�H�����D>���a�{�D�}�{�D:�����H{fY�}�D�&��1L"w�H{f�v>����D��^�8���^���$���Dn�)�D��JX��I�}1����EZ�D��sC��$���z������H���	�H��hq��.S�0����I�thl7�$r�k�5�V@�h'�vj[��3�<r����~�&����4�ti�=L"wg�l6�hX�k*���������H*	i��b��n���*<��=�O$.s�5�+3Z�D�����$������y������7���L{�N���.�I�+}�	��Q�,1�gv�`y�y��a`���k�uq����Hl)������������
�*S��
]��o�?���g�O�~��&��b�/��@��p���h��[�]5�J?��[�.P;�7����k_����>OZ�/��'�RvsW�
^NHV`h��B�M�[Xb>���&��
�r����V�y
�S��1����2������MF��m�O�2��A�a����q���g����u	�e�����A�i}����O�������i4���MN��\\��N	��9�V8p�`e*�#y�.����Pq�ViS?u���k�H�)��e���0m�} ��DZ���J��x.��3�8����YlB0?�.���6{t��������+��,��R+g�8��l�	������k��	����H[��G��8�V��Q�T����h�Yu5P���e��&C�03g��8�}���{B"0sb(cA
l�T_����c5�:Xk`=k��6��s�2��c�]����%N	�
m�-������Kxvhq_m�Rb�yiI������y��KN���jT���I�_�@)
��`��v*Q����~��X�%*X
C�_����~��S�e.�T�@�
���Q@��7>�IV���(��������p����'���/(���"x(�����o��w��j%���#�����J'��?RQ�8��q"kl��5����u���?�/� 8���B���,{�y8�M��3��:�����9�{�!�{?Pv����oK�-S���6�F�-iw6B���'e��'�?	�~Th��Z���0������	;���A���;|���Mg<=w`���h�E����q����f4��:.�tN�z@
���Y���#�<'�H(
��z��������]Ve {��5
���#�3�S��Sc���6dAx�j�����d�O�P��nL1�_�n�GP���S����?5�����B�u�-����6��\-�>Xa"c�m�>0�@D�4*��{rv���.@�x,i�3�GK.���9�b?��m���X�G	�g'Y<e�\����/	������m�wL��\p��{���}u|X����(��s��t�m�@s�>VE�����_�e�3�p�I7Y��������e�:��D9Z6d%�}-�0��OE�������4S��6@��amG���ct���*��RR��~�09�@�x�H+BL��F3[y�����vk��zkS0u��4�������fQf^�VhDB�����Haa>S���Mkg�Q(���3eu��u�4��8\�1.��g��U����
(�2-J�B����(a?x�bF�N��xf�(��V3>eo�~�h����-�:���c����ME*����� ��U4Ui2�5.�-��Ipr�`���U�����@I����v�Xd]�.���+]R����#������Vf�h�YS4[�vJ�cR��~�����
�����o������n_n`iv�p�������rb!5��U���NW~�wi�M���<����X�p+����;�t^`P8��3"�\
Y�.����n>����FWU��������W@jPc�M
j�|����,������1��T�
�r�`��g��-
�U&-�Q��D@��T�����>/�V����}���j~�1�|S���Q�$�tI�,+���n;��4��.	�J�(v�B�T�)���Bn>FJT�B)L��j��%�D�D�����s�������O��&�_��Uwh�h���u
�)�E��o��0{N���8�J����`����?�N���f���l�)��pDM�e9���Xt�V��=]����AA
�WBL^���a�|U^_����I���j�M������`E����i��(R#���i���(�=T��|�nS���c��������U�0��O��]K�3s���d�2���XP�1X�!
d<-=�9����S@���k�D��x��xj,0.�e���z��M�'��T��^����u��N�����)�>�1&��n�7�gp�1-�Q�I��9<6��\��Wh��rEi���{pQ����
����(
Z���W���,=��R�+&{��@�~�ll�����K������Ow
�Fs��T�=��J����������
�����@��.�H3s�EC���k=��x�0�c�|���[������i�0=n�u�k
�W�j������q\�Z��s��b���y����"���44=����en���=��\��V���!�3S���&�e��}�`bH9������wz��gk?'oF0��.f3���E��)Q�����j�zk�]�QRZ�09�gJ�c��\��h��(��
��a`����5t��bm"���9��6y����L$}e6���@Cbg9 }�y�������EQ�Tr�E~�!28�����qA]��&7T��H'����"�3�J�	h����5�u��S��6b���U���0�Z_����c���h=������Q��.�c�����������	��
�3�����������(������1���>���O��P���G��7Rtf.�r��C�;6�n�hm%�,�'����
�L��B�qI���)�9�����*����l�����o�-��z���zu���������+2O�;�f�Kp�
��;���(�~�Rx����4�]P!/�����X����~xo������Ei���]�6�5]�M�OyU,A�x��$��6�s������0�x��,��~����*��(lv��"�k�0�@�h���>��#����A�g���|x������,��q�+��@w���e�x�BA��=Xo`���R�L��	���6wp��t��� ]G>�KO��"G���h:F�hgw�5��i]4�J��������8U�eM���2�������5�bf���5��@k�>|�"��3x����)p���f�O�LwTY9X��ms���������Q@^vF���q4��� _4����&�{o��GW��"i^����hI��M=������Vl7�gb����L��h����GLx�]l:�_-���m|xf��z��#p@���o����7��0$��w�o��3��f�~����!4�!����cd;�~h�������k��cz���+.v������%��_��$���P��)�u6��_����w#N�&���7��Kx�ij�J#����$My��l��f��X��,�_��� ���O�8���@+a�S�����+�c�*�8�Q��i�K���b�w�i`7gN�1�\\��K�v����]��{���|��0~>FA�a�W����Y,�����~�t��$a��V�� �pg��������i�f�����!�|?5���W����n`�3YxaC����S3������h�|-�m��EM����P@"@���.k���	�M����g�!�B@�����Y(��O�qvp9�������gN[���	��H��s&M�=�����B��nv����������'�0k���������msX�������p�+�v�<
�R}�~x�v����f�%�O��Oq���D,��~�0�v�r|f�����16�n��>I4m��{y���Q��}���D}��YDJ&P&��4���1�KE�R�v������g��M}�����M@5o����z5?o�N�M�`H{��w|��V�fES�A��N�^���/��~�|��N]�#w�fr���/�!��e�m�J��z����!<A����g�C�B(}��S�������������i<WZ������W��������ON��}.��}n�i�G~����G~�_�i���������3��Ai��}��}Y���G�Q��Wy�?�iPS}�R����A�iPW}���}�U���?���?�<�~<�~����w��A[�i�~��A����O{^�S~�K~��G���}��A����W�?�i�0�i���i�<���x�=�8C?��`�O��g<
f�O�Y��`��4�c>
��O��c>�������g�!<�~<y<�~<�~������z�_�i����;��������}����i��~��i�����������C��?�~~�<������~<
~���4��~>
~��O��������9�|
N������X���'09=i�%8��<��t��)<�!`~�9�"�7~��vZx�gBp2E�x������!e�������U�<{��+���?'��%�y� �W��������y�/|^�a�W�-t����3:��a�`�0�"��@0���pa����"�� :�"�B����C��E���A��XP2(������Ru��Pi�7Tj/&�q�������`Xbd08���5K�(��+f��y��a�p�p�(�4�@�L�X�d�p�|�}�d.
�
�n.
�M\�]���u�t�p�p��L�X�d�p�|�������]�u����������#H8�x��k�V9B�`g�r��Z���n�.�����D��
<G	*�d����z������L�B�Fi���vZ��J��r����.�&Y���1B(��$;�xm�&c����+`FQ�*�LZ���U���2�����S�0����:��%�:]b������GJ8mn�����i�����^>��+J�h�^Q�j��/�����-���{��kZ��H��v�g�� c��-5��������m����|)���y���3�^�q��V�P��I��D-��hS�Z��~]�~�T�h���A\�~��Vy��I�j95��zo
4X��U=��Z�%��*�}W
����Z�w��D_
�&�(���sZg�e��*�,�rP�Z-G���������N=���*��3�8YXQ/z��+�,�����6��2�@o��[��h0�����xB1�&Vl,lU���L�V�"��^��B,��W��n�8�����kR�-��2;��G��������/��N���k\CIx���Mcw���W�>��`�q����{]p���pw_YQ0��4�E�i(����?,�7^R����O>'�cF�-���Obj�?��[��@��S0��&3��;������Y��#��h�![�����{R�@�4��Y8���>B���U������l
�[��]m��,{�c��Sx��t���W|Uc�US�5.�|���g&_�����!�����"?T��4��KL������yE�����L��,�VES[����d�i*yY�����eX/�6�!�]C�V���M ��5�	�\B�@��N8!m�����i�����;���Esg ���+������9��]Oj|�!m����P�{S����������|]<3o��������%�r�>��M���R�&����Lh=�'
l�/{.9d��A�B,�����zRw��T�E tZ�x0,i����j�@�q['ao,��@�q�"��<�.��|]r�7��|�
����q�������d��
7M���
�Z�]��f��-�������"��������i����V���v���TY�p��8�����O�&7!~�D<���?��G�hV
�a�C��L�M����Lf5�[6i�S�4���ae����b����������h����K|&��~�B1�����;�����l!�4��`%g�)���7��6�N���m�u�Z���������XXw)����5q?�?W(�}zW^M�h���;���H+�6���S�c���	��8�Z�,�|��f�Y$����%����JMW3��fhA��Y���bhR��i`3�AJ��1dn^�1��&5�T�� 5UZ
J
4���qc���j����]��P��4nM5��h(C�j&5��3��n�0��t�����1���]�������+�����f��6ga�ff
��6�1d�;��J%,7�LC��O5�*wfZuc �a5��a�CM4���#�0>l��b}�X��W����'��;���; ���Qw@���c)�H��&0~H��0�u��3����(�h�a���e��;�w���v����#|�l��S��l2�m
v��
����K�OVz���Y��K!�O!�<E��c"DK:���"4�qd�1"��7"0�:������&�7y?���DhPc��Tj� �}�����L��T�A�&$m9���J���<k����<%$9�
�B�F�	�����08���Sk;B M6(�%!i���p��V��4&~Qi�L|I��!��`|I�u����8h�0W
I;����4$�NJHBo��SYQV��q�k�f����!Sh�K9h�����g��G���!iO]����j���#��EK�i����x��KP���
7����������_��MH�y��E���1��A]�b��C`FA���H��E��tN[�� ]�8G��ex"��D�����/
QD���`D[�R��8U����=��)�7������r���q�������|9���I���th���]W�����D������������h���H��2�.#R'��+.�L��=��P,h��s�������,�2�WD���;4�jL5���;U�6�T(��������TJKU��zE\f�M���H0��2B���V�����|��R���m!3�VTS8O�fi��};��<������Q�u��Y�nL��]��q�j�k�9�O����K�5y�5�I���
N�m��o������0yhr"�	�����.�hTa2�O2Ca��N���M��*�e"���24�.:�Ka��`z��}��&������4��+�+�K�w��nNZ��=e9Xg�P*��7�7'�Z�-m���,/\�J�K!��'g�{�)�b-��=R��
���,e�5��Z:E���4K��E�!R�TPNy��+t*-k&s9��g�
56�(��KFo��)H����Y� ���V�K�������*{Ax������S'����8���]�jix��}'�F������i�v���h��D���Y�C1*��@m�@�9R�d.� �a96Gu�T�<�K�Mq������H�5���'W���$'�"�7U�������^-�{%E�+�	uk
D���[U��|�e��q��TE�������jA/e�r�%c\���#�fY�]�����Bpc�������
?��1�L����/���I
#�a>����7[{3���u����7_y8��W`V����6��i�02R7�	��F*65*o>;b�����q_�pVgqPSu�xZ�x"2�+�����O�t`�V��u��J�g/�	�h��l�T��[��������|Q��(]`��$<����	�1������o+���SW*ozK����4nw�?�C�yx�n��b���]���<��T���&k�������z/��IZ[�;�d"{/q���[��y{mq���S���jD���
^q��������'����>/|��.lEBETG�d��*p������8u���'�2��!L�.r"4��"u����<F,)(�"�-�h�%R���o�a�d�l�E]`�(�WI9K
.������v�;qb����E���_��a`�+�C\h;!��N���:���lD n��n|���
1]g����O��+���b���V�J�ke�7g+����S�#�6�y}E<�u�M�qU��T� K���V/
Y�F��9���eR"i�2J����'"�Re���U��z[2S���J3���'g�hMME�l1^������6�K<��,�
}������^�����dD)�[f�j.��t�Oe(��~����5���O����e������)g���]�����
~��wqg�����x�"����s�������f����9�h8�[�u���1�xT���BY[jK��J3R;����m��1�i����.�fZ����I����	��
��R�F� �p~,|w�#U��F|���-����z��+U�N�wp�g/�������T)����l�Xpm�gu��nx�l��*'<KJ�!\�y��C`i�n�h�������]�5�*,6ac�3�F�����'K1����9��M�4#uj@.@m�1�.�H;[4]�6��E��@�5�(����ln����9��G�I��=��������1X/�E�;�E�2��)'�����`��PD�<��|������K��MG��h����yy�<g����n��c�Dg��+K�
�I�r,���%#$~k1�R�lb�x�1��q+~9������]y�DT
K������]?��VR�r�:*�Toj_�-����S|/��N�f���XloXn�(C�O���K�����K-��r�. $B��
O&���npCJ�U�Wc��=r�T
��j��z�~f�,D��3L-�Mevp���+5�����.I1o��*���E�����7I�,��D�~
;p:G� �\�o����A���"�Q".�	���|��C����z6D��H]��y�X���t��M���o�*�w��5��)����x\��Q�e�!���v������[6tI�����I����1���u��"�#��0)f��w�h��v�O���kRq%�����J��
��!����k��@]��F�+��x����`w�)	�7�<�D*�������������`a{��p^�lGl��O+��p2����0����"7U$�}~m���3\�|��k��Xv@rQ+��e���e��x�y��;x�}���T�q_��e���R�L�d���I7jkn�b/p2��������Dj���<��-
���YSK�6jM�A/��6��F��Y�R�z����G����f^�qy|\�*�A���
x��^�dq�����T�
�����0B}Q��=>L�$�4�%w��B7��\ ����`	�a���L�%<{��BQ
�"����i����:��z?|�LU�Te���3���������[���?�n��&�-����z�����,����na����^�s?���+�P���?6\c�>+�D��(ZT�����*��J���#(���Y7#�Vzt���E5���iU�(�7�;P�e������b���0O�s��_�Of��$�S����
����<�zS��e����[��6=Yj�<O�c���O��6T��{�	;���Md�N�e�T
~g�!3?xgHM����/���D�Q$���a�X������a�����jTf�����
(��:�L�G@E�/��+R��e����"3o^������b�f�K����z���)���w�4QV��e�(�=�y����M����1���S7tI���B��Ff���T*���3R9�l��#���������X�w�gje2�^�Cu+Df~<��z��{���]x�,���q�*����E�s]��O���^PU����`]K�+~������V�.fn���{�6�o�������&`������j���D*kn�n�16�L$���-��V�"���U7�^�E��ci��9����v���T��A@���J��No���J�	 �tf^�%�D*����|�+�u�Y�
�&��w��)t��z���
���N/��7�|��k�N�p��\
x��,Rx�~c6���[q�{�>*�.[{oFo&.���3�]3��,�����N
����fZ/�s�������a�����4R�L��$����.gZ������������]�%�$q���RgZ�+��.N�Wq�e3����Vo�IU�#��:�}d*{��^�8���Vb�,3�
�W@M*���t�gZ��4u���f���]�i�n+�sE]�L��8���cD���������������Voq������n�����r��~�}�]����(��"�mw�=��>x�;8����,�!�?�n�["����A���n��$�:.����.*�f����� �F��n��2v�h�]�;��HM!�!��x+;��d�x�7�v/����>/�{������(�b~�e�����|������x�<�������x7���w��'�A�-��jk�����������k�m�q����q
Z.5��Q���x����Fl�����ul��x7jX��x����y�em��a[g�<���^3g83�9Toj��l����b��������I�m�|j�V6����Pq�<�#	���yH�9D�#q����I������������^��3���RDo���)�J����M���`��5s>-�z�����)E!�xt���/
y���/��Q75�g�C��y����I�9��-��u���9�����$G��j��3��1s>��)��Z/�E�f�C�f�wf�������v���	t�h
Yn�rt�|������I�d�Q��	x����r�&K�����>Uc��L���j���T~����A�u�l&c����{A�t��=�'�5�eVs?��A���@�+RW �y>!n���(7u�����`��]�0`D�0��J��k������{g�A9���2��b(�����f����-���-���!?xH,;�]���c��{5#��GpJ��\���u�3J�U�7���
�[�g2C��9�7��������l��]C����5�<�Z�B��L�H�>M1=c�5@-����.�|/nQ�2��p `���i]�U�e���'�O��Q�}��Q�v��3�����G�����A}>�M'�M	��p�^oxPg��z������L)�S�������8i�V��g;�M�!��U�(I�b�ac�U��ggw6��!�����;L�F��>}�E�'Y��Z���{��
3{Fi�t�Q���yp��A�����@����V��v�n�
�X��9���T��|�����������4�����+�
�fA�p*�����N ���0|����n��(���Qc��p�B�}d����u^F�y��w�����:6����~?���k��=���{�xAG������	����������.��^��������g0��G2�����/���>w��1��v����x��O\�Gx��ou��x��mj�h�p��>����}<���+��'1X��@a�/���~��j�q�����[���d���%�`�~�b���8��=K��2��u)�+b�����h��Y� �+��:jU����L�.����!S|]�~������J�z�����&�7����������uw|1���O=���>��YQ���J5R����`�Nc�����l�B��`\B����QW)���t�z����kWxZ���W�G���E<�07C������SO��B�f�TJ
K~[������8���3bjc����5Y�t^;�^W���y�t}���������.%a��v��2!�
������\U���.?<��������e�9$���7<Q�R�^����{<�����6/���l
_B�#U.js����	�|�����
'���X3��/h�S��e�+�l��.Pa��puD�X��v�z�p���C@-����Q�M���z�] ;[�� �(H�x@�V�m���%5��L7�.m�+5�G��8Y�!rC"�W�2J�Aj7*�����ug�x�Q�����t���N�5h]s��>��g��e�E�
�*��-�����z��V�w>4lR4Cu��B�xb����v�G�L��`����Sb����C������eM��f0��5�Y��z�*C".�?x����Ap��AOKbu���]���e��h`�1�,
R��*P�N:��zY3���w�>W��BaR�����\�qC��9��Mu�f��<F��`����Am!�w\��XP������`��H���:����q���<X����g�[r0{f9����8���?8�Z]�3@-������YH����*U��5�c��S����+b$��XBbl�r:���b�����J=I5�6IP��B��&jn��d*���'E�I��B�d�&8���������!m��;�G�������~/�X[V���.#��U�*P�S��y�*7n6�qBM�����X�9T����������f����g/�tp���n:A<R�r��MR��c��di�vdu�Ms�������U�N
�����Z?>�Q���v�U�*r
W�j����p�s�j���jG�yu��6fW���5�P��	j�������TJ�3���Nb�Mw���������8�,���O�k���R�T���*�
{G2�����3U|&�
�����������*y�15F,�l�\����G���18�����-�9�����D*���)�s����@�E��J��
�q�#�1w>�z]9r�A�����t����.QW)����~����.���1y]����#7�������n{�5������k��)#��u��8�hI���ju�y�Ym�S-������L��6���IW���(G\���xl	Tw���JF��j��W�$:S�����+�;�3������\h�����I��ok�!�������	]��T#�]^�hb{�e����m��JYS5���v]�6v6�����)�n&��E�~E���k	T7C��������}������r��j9f�(�Hu3tLm\qA�[]��s�y�k�us�#��y�<���mCo��^V�����qk���#]	�c���������5q;�6��xXzk���l�j��}����pwP�������g�j������b�o2|�pQ'��q�����p���j}����@x��qRp��Q�7�7��+���,_3*3IR�GP-CC�t��dD�����5�yQY��jY]����P��������5�*b�<�sv���7j���[�)��x���#�9����V��S��v�[w�nJ�����>>��^�,Wr�iC%��b�����&	�����O�GGL'A�� ��"����=we�>�VW%r������5�(��������A����nk?�_�W���>�tQ��7��Ty����'xS5�1�����D{�y�U�5�����b�����F�P�{��%�k������������������]��}SUu-y��T�'�N��ly�-v����_��T����
�[����.��e�#:�sg��~1j^v�!�5���\��-)���r���[����r���S)�q~�r]�z�����U��;tb������w�M���j����?c���1I�9 �V�n$�z����H� ������
�i���-�k�_��w���k���j���������m���������/h��T����0����R{�_3���f���:�x�54���b-9r]���_�%������������e��l�Q�F�K��DE��n�'�����b;�im��Y�lS/��v��x���-�-�j�f��-uF�r����)b�u��FQ	V^�]iH�Q������_�Y�=>_T2n����@�CC�(c�<��FM����r���7��0���{���A�cE���}J���������������y_����W��D[��C����XY�2�B����T\�)[�BG������e~�+R��.��S��\#����x��B��]���a�5����^�:��1/������
���������:&*o5��ok=���������c��o���s�;ei���>�x�.�y������cO�yZ���tv�3	��^[���hZ����3��j��]T���[�	D��b9�������"�P�����x���n���8�.����c^�ni�{���13�&uy^�R?h�17�,Z�mx��0��5I�g�c[��o�x]D��e�B������Z����'F�n�^q�t�������Dp3���nu���b�:C@��ouG'&!�$.WYs-���ov��L�s�6�\Wf�m����av�o�����o��!-��
az\H6��7T�Q�U���4C��
�1q��&�]�0��8\���L�*^���dg:@��EMx�!�r/������(�g)�9mT�u8������/����e3��x"_q_���$��Ks�P�a�]x
��"�f����������7;d��9P�S��V����k�ia�b���~���[/
��f����(_����]����r�?f���TJt^�k��(�<��B���gZO=#}N-jR�	���u���u��W���
�<
�6j���ekn���<�������Y�f=rrZ���J�����r�B��@����WD������`p�����+���L�Jfgsj����gs��������G)�l�O
gs�>�SZ���s����[Ry�J��oO��;�|��H?�����������r���s����|��@��)�g~
��)���@���O�O�'	}
)��K/���,��?���(��S��)��L�O�Zj�C0��}�eV?(S�_�dM����?O����y��������c��d��I��}+���;��N��)�f{
�m����~����!�N���M�=g�C�?�>���?���uF~Ph�������OB��p�i�/z�m��p �����B�$�/Zi%;X��c3�i&Z?��Z�������}����������M?���#Z8��S~>~��O����S����?�0��??�y
<r,v��a�S���S���)��������i�w����w�����|�~
��������������~
����)���S�Q���#������?�Cxz�x�~
�y���h���G���=�����������8��=�y����������!
�T��6�4�a]a��EtW��apH��a�`�2�"��@0���pe����"�� :�"U�B�����O�A9�(P�Se�bA��pP>j"�RU�����Pc�t8�G�W��n0
�c�a�4�������%M�
�U3�I��a�0{��8upt p&p,p2p8p>��>�[rw�7����n�.����9G:J8M8Pu�p�t�p�p�p���p���������������4|�u����<�H�W�O�R�@�[�~7��6u�"j��ok���N�PY�n��X���W�7�n����P�WI���D�'�T�M}:�5%����c�kgp��
TH��P��K�kb?-iY�\������G:"Go�T��`a6H�n>G��+��1�Q���_S��;g�����-6��~=)c@�njwf��3�K�p��n��to�]�$E{��}�'�iRE]�i �@��;�Yh����U�K��nb���1����n�I=4����zO�iGQ#��q��:}���A�3�d�����a6*00�x��0
n���H5s��nE�z�G�����-3.����:',�n�Q������P�����QVs:&�>����NE���h0�"��#�Zy��dY�U�Y���W(�X]�L��G��U���0����J��n�,��X�Y�3st�J���I\tj�z8J���u����p�����f�����5��uEh�U2� 'Q��fjlmA*{D����������
�q�gHY�[���'�4J���4/��q��'�o�H�+)�������(=�"��(;�W�>z��1x<�(�HM�����y�����A3��H���;���x����v�
h�[��k�)���"uF*{�ez��+�|S�-������2�qD'�,a���Wr�����N�l��%_���^�������g@7��T�E�����D��Qs�u�~�A����z�+��/3V��?��W?��mFj��t���8��nj/�[�hGG?V���j�9Rj�!�����D`
�+��,ksE�'0} �D�@t�U'V-�����L�u���X��#F b����k�m���gw�6s�f"��QV�E`5
�1-���9��^�<X{Y-��]	��)a����0����:�<����v�����f{9���p�/�d>qrBfcYV	z^�_�|���+R�e/�	@���bX{a���kd����|KE������E�������+��Z;�3�|L�pD�e���|�$��d~�x�����h����H/�|�KF�m��\���rj���Nu�u�~��c����.3��h�H�YQwS���e��L���������z��e|6�wj�����:�5�f��nUKd��0��+G���p�6�Kq�>g���(Rk����p&v��<y�`���������Q
��U�b3���=��L���=Gj�Q���}F�pnxL���*��M��-��
��sn��T,L��d�3���z��o1�����H�Ie�6 �l�Z��p����2������g��9���
h��w?����Sg���en@�v��)9iZ@�h��<h�:�z�6 +�����D��W�>����Tz�jY���W��u�u���'��66Z]"��V�$�^���c�^���EZ���-�Z-���f@�|ie�>3/����h@������WQW�������-|Q��k���jZf|�������s�R������C���W�������RGd�[PV�+�������x�!|�a�E�!��P�C
>B[�!�,�wH0���eO���7��W��gE�~�GE�s�����`@�l���I�c�����D��w��m/�/�n�A%R]���{�l�;�����)�x����x�{
��|K�u��9�%u�z�:b�$����"� L��x:M�Q6�)���q?���2"'�I'\�6�������'��G�R��$�0Pa�C���+C�f-���V���7����GS-���(��v>=�Ip��]������J����k��'>�Z����n�Bxs����#R���	�	�R��^�W@��� �T��<H-�~��'b����.D]�>�vQs4}�?� ���0��`MdYT���4���O������-���z������-������ot\o�N�g�
�G�=�u�Gc���s �u9�;���e
��_��WG'��eO��u�~c���{�����W��WD#R.o��i��y~�l0_��!�Q�3��l�`H�Ig>�=�����{����s���	E�g��V�T���kL�u5"���6f��N(<T�,f.z�j��|S�nh�W��!���n�^���^��D�������F��RT�Me��v��>��
k"�:�I_�X�������kk����f��9���)����%;0 �.9�V)��o��v;~=���3�����/O������=a�R|%�K��=
�$�8�hko�� ��R����������$����|�8$Rg2_|���c��7~�e:C���*v��#a�y���ee���\L}��!Kg���8�o7Ogz��]���'pn<B:��t��dO��k�t�D�3�W��r�H��y�E=)I)��X}�F���Gf�t,�s4<���$�NtE]����.j�����c�3�+Lg�6,�9�~��K�<���kE�������?v��S��W������[���UQ`�T�����xw.nQH���2��$;���%���DI�p���Ck
�o�
��n��3I!���Hk9�Pg��NS!`)�7-��
�I�
��F��uMO~,s������JB���VkhO||��q>
�G��i����S�!	�
��iu�j�[�7L�s�i�-�N�V�e�Y�m��4�R��}�[v*]���8��f���P��4[�E;�1��Z�! ��4���b��}��tM��W�}������T�}��hK��w���8���3���eX��� �����NK�����-�.!�g�<���W��Td>"���GH�U��"�����7�*<�0P�E#�����{�����L�=���������a���������8�g���,���#�M����h�TMn3�9_��2m
��_x�K�=��u�K���X)�2�i��:�v���������6{���x�����4��prC��d`�I��R��z}���0�����B;g�s���/�
{F�4�%�qm�K�E%����;Pu�{�&U���J�u~�U��������
y?J�r~�
*�t\]�a�tnvz��6�og��)�X���)F8MJ��Z��k��C�x8�&=����y������p�M.����lz������K��(�tXh]����DM+�ba&���v��TK��"�b����&c'!�B��"���/G�$F�����|B���7�@���h����<vY��[hw��P��J�������.��5�2�`�]m\�+�<ua������������s�i�����Oq>�_�2�#�?��z�u@�����Z�n-;����.��Ms��4����i�v��|�#���v�(���2YP���P+o�B;~V}���W�����olj��/�fn� �Bu���d����M����sk�O`�%_Z�nkDjc�z����=���8�,-�o�l������!�F'��A�������~��{@}Ej������}Te#;z�OJ<��q7C��D����F&1��gC(�g�n�+���b������J�Yw�����5�����[��-��=75�yn���T ��G�'4��UY�WA�
v��_��-�(���P�5��>s�����s�&����y���>;��Z��E�3}��?iD�8����{����mU�X����j��T
�%Q������~�����.WG��i��D�m5�d���W@sFj��j,�-�c�~}�����^���N���wcD�>�vL_'���GW�9�H�������00���Z�0�x�1 �]����+���Pw���{TNv����&��p
��*h�4}�L���E�=�C�:��a�J�(���c�bG0�k�@nu&+��F�9%����N`�N����6Wh:�[�E7@��m�Z�^�U�+�x�[f_����2|��4y���Z~�&
�[��@��aVS	�S��q�D�!��	��h�.����F2����
)������ %�!��Y�v�� ��9�d\�}Tb���4��M��\|QG���c\d��������a�(y�B��������3B�b]h��Z��o������`{B��9i}��`I�4_@so��?���������%l����,�S�i�t�a4����u��)vY������h���kzeQ|	=���-��7���wNM����z��i�}y����O���h����x~	�Mb	Z����,|�5��F�9����%s)��D���dc�z�g�B��(�7>�s�/�e���Cex����a�~�q4���8������
������$�K}�������n������e1z����G���������nOco��vt�%j]+��]{q�-��
�\c�G�_P�nk�,��T��A�����g�`��tBzhi�m	��;bK����p�	l�U4g�6!����D����iAo��+��3��g
�
���
1��������
��3������u|D�yX��6��P
�B�g
���v���gx������Z5�F�����\��=�c��>4�g�3Z�Em��"��NKq����O�m�>d��Mo������4)n��~Hq���P)��Yfh��p�?����6lUC��u�R����
�.Z��qZ'�m�����9u��A��h).^�f��e�).�B�����>A+���xg�~R�[��@���`53� Zt���i��!u{���@k%�Cx���:9w8hvh����`6�uc/��(�{���6��(�yR��]�Hqw8������j��=��.2)�Z����!�m�	~��d?NoHk������:l��4��L��d����8n*�(>���f���-������W�p����/�|y�
������A��C��$'2�f�st���c�b�L�'b�ch&��_�����d�;d]��
�;;o�A���F�Ek%�Pg���'�z�M�>/�x�i�3�Su�E"-_��
��m�����q�a��6+��n����q���1.��������S�N�C_�8qi�^�n����P]��7I�����3p�rXU���"��w#�Q�4f��Sn�*���q]���D,S�8{�����Q,�|NB�9Io������:=��w�J	4�����H���J�d��0'����3'!�8�P��_s������4o����pn�)Xo��5�����
s�3�%�Ir�]��l�)7�9I��g9�8�������w�[oop[���
������i_'�s�n��Vk�����aN�;��t#��A���J��y�����6.Suc!|m�=�9	��;���Yk`}�}��qN2�<� B����3{:��VFa4G���s`���r�(��t41,���%�hD�4��v����W��Cr�Z�!Y�6\�t�qPn�����vH�=�
K����,�4(`��c�c�A�i�!o�����aN9*c��*���U�?�����Z�UPO�0Yz|<��bhT.�#������F�B��}��=�y�gg.V���4�x��
��
�	@� R-E�y/=�j�W��f�D�W������5����8�5L"���P����2C{��b�HKg�a�I������D�&�C���'�C�$�&�wn>�N�M"��I��k���V�{�����I��67$��I��-�V��$��`5a��'�����%	��!�@k���Id��HH�C,q9$L"_��$rH�DR�6�t��C�I��0���X|��4>��I$�M"�MiF�Ok>��$r�n����z:��D��2-Q�K�2��5�t�/��7x/�c+��a}|��{�q�&v�=Q�4$R��t�k�@�t����U`$��W���j����y`�V�N�1�P��7��o${��
4�|Hd�G�� �v�w����se�m��{#?S�i����I��h[!f�����u��e,�F����[�)�>\��oZ��\[�N5��M�f����4$���kF&���CV sP�E��E���uC���O$rG}R�aR��0�e�7��P���Y�c9���l�}!?��Z�4�����o�|�^m9@���R��nl���.���a�Z=�q 7��/y������4�S�Fh�I�Ln#���R�tJ��Y6!f�3cF��d�#�2���"tZ�O�U��?-���
��v��fbub)K�Uhz�f��\��;��~:g�	��luM��6{t��&_�g,7�,�������TS$��]�����W�����$�D'���l�M��,{�uA9��
��i3��uNwJ��&�e��%���f�/C:
��[�����v-7n���u�9-�$�u���zw�.�7��I�� `�A���K�v][|s��s���?K�wha_-~���H�w^6��y���g^r�_����}��M���	>B�76�5>Q!����?�M	��W��p�� �|�G0��>���*����/^������@���;���q
J_�`a����=��_aE���+|�C�A|q�|�3�)����O����Nx�9T�
�
'���d�
�|�Q�;&��Ap��W�:GG5�O���K�1�F�����XM��z���������#�����mnN�����.���4�Ut�>�����}4��,�����:���J^���m��a���{�k���e{���#+a
4��ft��������3P�E�+�����u�I`�����K�[�+����0����w�dn����`5����|�_oA5�-��S���)�o�.��4g��[2��+�
�d�����nLq����m�
��?������}�l�`�r�t�{���R��s��/�C����p��[\ol|�k�z�4��������w��I�
��r�����E M�U}�C��
�T�����n��yG��
�<�����}
h~@��3h`���E�h`n�M�*|@�����{5
��E��:�����
��f[�m8r��t8v	4�Hl]iBZ'�z�+�EC?��'����:1��t��d?K��H���<Sw
�&-���_����6�=f�f`�Hu�
�����YTO��@�#���rz���4����r��\`{�!��i>>���:K��$�,.
��(�ib��"-F����A��v��(�H[�K�-�9
� �,f|��b��h���P�f?=�FV,�����"e�(�:�H�TET���e
'��Ipp��P�f��M,���E-�Xd��.���3�5R����k/a��v����)�.g4���@kr�$��.'5���o�lY������08 �$�����N�}07�8�J��i��h�n"M�Y���cr�8���@���K>��@�y�C�`a��������EC��o��&�M������6P��_l8]�*�mjP=�7�*tdV�]����u�C��C%��B_��9E'-�Qlhu" �rfa~/&����AmY�sb��A�'7����r����~�.� ]R��Qp�4��'��h�PU�*�2�B�w�rh
��
����'��V,�����vhb��e�������L^qQ��S�����^�}7l����|��m���*����@�����R�H`����*���&)�����GlTQj�~R1��];4�Tab��'��z����6���a�J��+�qe�3_����t�,H�l�w"���J�g��K0X��0L����c�=���W�����o�Z�i��PM)�����P��iY���S���������V�i�s���es�C����dF��� ]��Q]?��$��`�j�t�UN����@�����@�'�,������U�������Cs�g�v7r�Jc���<���p����A��nsxlv�:Y�=��
�r�h���%���G1��:��9}+l)�jP���>�����.z�}��^g0����I��q�JL�;��-�\�	���S�4�S�������#8����t[�j�Z���f�n�,��V��������F����\O�a1��F�?s����-s���K_�Z��x��h9����C�����Ws0c4Z���X��70����)������t=��5��������2��`��a
3�n}�X���r+�m�y:=���9���7#8�,����E�a)Q���@�=����������>��F��3�VpMs�q�cP0��=�����^�E}0-�b4�(�����6���������{i^�D��E���u����������@%��&7T���=)��������E����D�mL��9-�`����nap����:�����<�����F��Lw?S�4�i-������%���]V���z*��.�'�I�/��
�� @�����tl)�j�Y����8�����y������Zq;|�C��N�p������r���.T�s���n�5HVe��^Y;��06�P��D�	?�������*��.��������:]�o
�����a4
n�O!8�f�V��@�M �����S���������3���0
��#,~��t�7�/�f	<�����2�7�	W�����]-8�uR�d
4+wh���1�j�. BN�('����}Y�����=�A�g��\>rnj�����f��� v���2��M�9��
�\��V�Y�M�:����
�A`t�n|vH��6����`�'Ga��h:N�(�w�U��u@�����/MEO_	�-7�h`�r&����}S;7��v���9����@�9P\=7/��x}����B�d�G���s]4��dF��bF�
���z���!vU5A�hv�gvM|��v��f�UT�b_����iM��\=U]��<zm�����N|�b{�\lZ
���~�g*5�_^*�^�f�������5���I���:��b��vC�C�v�����k��2����uq���/6�������Cw1K�dR��p
�����E���zC�%��_��$R���,��]G��)��p"����qC��a7�[#��Uz�i��'IEk=)�l(�����\J
���Z^�o�w�{x}���0F��������+�q�}�q����M���k{4����Q�F��3�)`z9���F-)(W���_���a�^
���r�?o+������f��U����c�W=x�X���u|@��3+5���P^����w��*�0�r�Z��
�1�.\S�!6~X5N��Gs���hqo;QA�]O�+!���i`<iF�JLl�I�I�M�oZ
���m�Ig�3
X�o�4��{���8�8�Z��N��:S��W�3�/B��DZRF,3����,n��yf#KYH��NS���S�y��VM�Yc�pX1��.(���ms�	����J} 7���������I�h�h�8+�t�?�u�FS���U����Xg�F�2]���&�H�9�M����>u�Y
"�1uqQ�1�:�61
F�~���39mo��"�L���7��kz����5W�#����j^M�*�PguwL0���\�J2�_�m�L��6�v�`��HW_Z	�l�����fG����royB����B����!�C���CO��C{	2B��Bi��B�����{��T������S��4��?���������'��������\���,�)�{~
����G~
�_�)�����S�S�<���R���^���Y����)P~��@�S�5��@-�)P�>j�O�:�S������������������S�S@���.O�����_��?�4�R{~�J{~���=ZoO�6�S��hO���=���x�xz�xj~~������������S���O���S`��2�������)0~�����x~?��=���O��#O���O�����|�=����5���|Xi=�_e=�_���������)�~��������z
<r|
<�~
<y~�t���S�����~�x
����)�3��g?��}2D~��&��S���9����_?�|�3�GG��1�!��!O���<��GL�Q����[�� 8��S/8��38
�GL^�������?����'������.���>+���_8)����1�Ba�L+F#l�i����n���.���08$C���0D�F�.d&&������X "���!R/DM�?�>L!�P(�*���%��A���PKUQ�+Uj��zC���j� �8`(0�	��F���=��0����\a�j�0i�7Lf@���N���N�G��vK�����������������>��0�HG	�	����N���^.Z�5\7�8\:�;\=�>B�����L�
��.�l|�>o0�-���Z��Q�/��
W{�����ww%�z`���8��T@�/:�I0v9�sj��W��3`�	�V�t��PZG_�v�������W�/%O�3���OnW3���EV���~�0������^����b0C,����2������;m�8���h�'@��f��r��
�����Ik-�@�&����^kO��E�	�m��_|�����1�	:+����6�&�Z��e�6��~�3n����Tc�~e���Y�����:	:������d�w����s%���Q������W\�-g3���3�`Ub�:oIW{z�`q����xE4�={�4g�@���
�=U��l�����~��hh��+��"����M�Jy��)�,�nU�)VMUeIx��Ve�xf����wm�@��$�TO��[�����U)��B*�Y=9O���W���J�j`��R��zPj��*��&uT1W�
TW;��o�Cs
������4u�Mw�~Xa�O#Ml��u���:���OF�{~�p�	@�o��Li��P�t�	�U���7�.[ho%v������V�I������&��H�����&�n<�=�jZ���U<�k���&�����'(=�%s]��@C�����:�=B���^���\e!�h)��X_$���V�Yv]+k���@o�[��Z�W5��V-E�����n-��l��iY�9����$��P��^�l����k���*��b�m�4���������<.�$���w�
��=��@+ZI�kH�
�	������'�569����d�i�m���[�Ls���C��5h��-����eQ���9���2��h���0�����������14�4�-x�����3��p=_�l�����NZ!��@���n[�F��h��ZEN���di5��X=�nb��z����@��W���WP���|Z�R�0>�y
�Q
�b���=����	�T7�Z���u�����%7��/���T���>m!�iZn�Wh��Ll1�����t���>�h��3@i�Y�������L+�������/Xr�O���]G�=��&DT�?�+�/������(��6�{�m,��Ju�a������@�B��^��a�pt4>d�=�Y)�{�����R���%���~��}�h5��[����3�&��M8��X��R�C�nq�^7����;�B��k=Z�W�5s_7B���;�4KQ�����=�s����>k4��L��Z��f�]�;��jA������*�����"6>���0S�Y$����%�7�A?�c0���h���:�ll�I��Cm�`k�����%p!��iYUtc��."��
Hc`993��]�5G���#G���q�nO�Ao�8��h(�j���`�{�&��=k�BqcX���&�m��{��kc�lW�U��^9�dM77��5K��j7}	������O7�3#�r0}���a��a�����hD��#�[,i���~����Ac�x���\Npdp_<
�x��O�r�����0~8�����4��b����?#�'�/�2�����h�Q��{�5�>c8�)������X��34���%��'+Dh�"T�l"����P���5�jk"t��Eh��H"�G��e�^��f��3!��� B
��[�C�����#9�P��q�Hsj(3��������g����	-rd����SC���DzHZX?��[���!	�chY<������_ Mv��P��*�������~�F���[f��B���%���3��������ZHZ!:S�b!����$��t��6F��v�[�f�C�
��B_��Ym�P�����-Ik����$XdP�go��/Z�O��$W����I��_������zx=����	I9O���x��D���������������)��-*8�pZ���in��<>����P���("�QNU�gY�RW��Tm��^���"w����"�=R�Oz��4n��?m6����}f2d�<m"�-HQ��-���:�|������:(�����s���L��Rf]����c�*7���M����5g���>"O8���M%wh>]�pN��!��_�
d��lX���%���-�W@�+�2�x�[�9���w"������f"���^*��L�f�����)�'�,Q�?�
p�Kq4��i~�5�u��ln�-�O��P:��R�zI��u_#�9*w2���:��0��('7Q&wKNT �$�o��5�	�D�L��=CQa��NQ=9
��
*�g"���r4�.�#������(�9�����Tq���
����K�w��nNz�T�N������T���oN���-z�BA�1x^8"�
�e4����*&��h�
���2������1{:W'3��������5�Q�-�9��D�-1�	�^S���\&8\J��-���x�5��S����w�Rj�P+��*.l�x�����&O��a���/�=m����0��&#��<�RqME�& |������r�q*Z��oqCjN�Pq��Yd)��g��o��<s����*�Wb�����F�d�������4�)��qSu���;���=���AD���}�e'�� "�/���g�P�9�U'��M��2n��*m��^q�RC��;��**�:++�B��!`��<���w�q���
o��X����1
����y�O��l������2^�Nj�_^6������UA��H9##u���k�����}.��p����m~�P�}d"�)n��M�1��olK��v����6`��4�����c��J�u�y�Zb��y����QA������'Q����x��������&���[�vep���Eo�(L	
��Q���}��X���}������%���T��}��F^5����n��6��Mb�D�.q���������V�J�����VR���te��1��y�����z���m`��c�R<���d�K�/�T_�0~�v��9Z�u��J�T
m^�s�1bI�s.�
^�U1�T?����e�Sk�����^Z�e�*Yt�d4G�=(�����;	-M�
�Y�Wd��0������2�H���XZ@����Ie��Cm�z���=�R!��j���a�2m���zw��P�x������J����Tu�N�6���{���0a�U�4���S��k�fy�F,P�}I���2}
~B!*�����&���T���������Vs����������f|�1����y�[�\��K�����v�	?����x�B>�����q�"��S��g2T��~,W��
5%3������uS�qMb� �tk�:�Gg��A2�j@�����8��h	x���N��;>qQ}��q��n$I���n����\��9�}z\����L���/jb�v�Z�������������L��~"�nP���\N�|c���&�����nN}+#��:���x��>7�1��}���'~�]������X����s���9��1�q����tj�n�\�,�g|.�������s�\T�����0i��y��C`i��du�G�����q������x�F��{�>O0�P�k��G������}�ay�z?}�]4�>���ajCjjQ���FF����zv�j\�B�����u��T��_����t����/xE"}OY���=�*�.k�9_�>M�%�L*z�>���C�=�����BG`5W�~�t���~QK4}Le:O� E]�S�B]��v��d��oO�vC6a�}���\-{}�+b3�J�[�2�*GA��v�@u�ZH������zS��e�^^sK�]�����@�o�Q��}>��\��������\z�^[��
�Dhc��������w�������J��������67d�@�X��e/>��F�����f�6�H���N���Q�����W�������q��$\�T}
�j�xx�E_��-G�����P�����d��c�2����
�/|����%������u-u����K���b�i�����;��b�{Y"�#�������
�J��d�y��P�91�1T�+dZ��C@=~�=�T�1������.�����$�aJrP5*������z�3b=i7�R�B
����h$C��i���V��1a�J�r�Xp?�����o�g�Y)w�DT�"����j]�(����������}��L\k]�������#�<��e�uv��f`S��6����������Dj���<��-�cM��R6j��*9�{6�Je���N^]��K��5_����%���������}�G�2�����u�]��������
J_�w�����G��wr�2
*�b�@��1����uK{��h��^T�.�=�����It9�u-u���T�HEX6���c@U�������k���?>�� �`9&S�
��6����d����z,�!\���
^�6K���5F�Y[����B���oSj������n�{����]���ArQ�?�fAz��%�7��Q�e��9t�Zl�y�����k��"3�|�������v�z��A����"3?5��Ef^��-R�Gx�����������R���v��d�y��y@�e�T
^P3������=O��U�����({�T������+f���v�Fe��*VW@9�Td�/��x��_�He�������q���0�P�Rx�LHX3�%\�vQ�����bYd����>/�1E�!JW�ap�[�����[6�M�#���5C�DIen�M�����n�v�FwG��8T2�:��,p��V�X`g�I��;��Y�5d�m�TZ!2��9��W�sMR����e?
�
����I5�>u��T��j���R������U�T�(Ks�b?8�H�2��^2-�+I��d�bX�Dj5A+�ZB���c�'e�o����QT��B�Q��f��zQa�X������W��cR��/�o������t�y��Tw/&�&���]v�$� �/q%�s]a�
��e�l��2�]:�b����oxA'�|�Z��(����(_�w�Z��x8]4\��A�����	����=w����ek����9
fZ�����������"�;)\��%R�n�����o��D\mP��ro.��iI�~����$����Fq�%bs��l�Qn�������i�JQ�i�0��8I^���a��D����g�%b�
�-��l���1x/�LK����eF�gZ���fZ�,�9X�.�b0���1���i3-[�+�
fZ"q�%r���\r�%bk|�8fZ"�LK$��6�3�#a��8�j�l�.�G��z�L�Z��
�2�����{�xw������aT9K�*1�{p��j����q�x�{�BD���m����5�Y7k7
�w�7��w��v��#�i�n���3������F5�;��]@�����v�N����|�3�-��}�ew;�@����Lj����U��G�n���n�+!��l�;��lk��w�9�w-��oQ��������)(m��Z��n�����������ek���V���W�{���=sn%��[�9)f��X*@�5s�����Q��m���9��[��b���-F�z��[���k�VV�+�FL|��
3�V,�����8s>h�M]�
���8sn��9[��z�����r��7n����zf��tS1s>x�%~yj%����q���=BK�g�p�����f���7j��q�p5��O�}�Z�LQf��v{��Gf��f���}^��[����(����`��[��,5E�p��g^}F��s�f��5.7U`g�v��;��1��s+q�l�����<��+of�|�>���
����d��4O��O����|A�T�l�ui�>e�������,��xF%_����K6j1kMd����{Y�U��g�I���j��-Dus�7����yT���D�b����?1�������~�~;(���*�l�7K�S��M�
�������������M��|�<���%��W#R9�����6El��x����W�����-�m�������G�L��jk��yE������T��jQ
qy�����-���y�<�=^b�xo7�lqq���2���q�]Z���{Ek��>Q�F�yDG������>��gz|�-�}���uy���\O�Xo8x�7<(3��opX�~P�Qs������:}��F��L+�i��|�'@HDLC��<3{�Xo�e[p��0�Amv�d����	.��S�?�w�s����I���� g�^�zCO�Qf��S��~��Aj�u�0������[����v�n�
=Y��9E��T�J���`^�'q5s}iZ����N�m�a�~QKp�=�RTo]���	M����2��5�
G*��GF�n@�X�eD����|�~X�R�U������\����~M��Gb[7~�/�H�t�N9�yB��'tr��/��W"�2C���^���x����x�����M�����
^��s��g(����,�/��S�)��+;x��P�����{��u��Z�V��	��A�>F��R���=x��/f��x��V����!���;�2����P8����K�]�B�"���U��XQ��35'��P��b���`R�����>kI���~���7|���]
/\:����F;!�|�u�.�:���:���>��6�YQ��(�H��_���k����k/���-:��T��O1����"U�,���\E�kY/�������vQ4\��6�\�v���h�G1jY�J�a�oKu���%��k�>#f�s���%����k����7�Z��k�H8P�
������u���/� ��B>����n�/�?,�����~}�<�%lp��9$���7�X�R�^����~�w��2�!�Z�Y"�
��A�!?"PW��u@A�p��2����{F��.5��^I�9[��<T}�2��^i��o���vE�|�6O
h�[��v�{��f��y�Wb�:����F*����/��2����F$��n5,��f1�`��Y����6V��W'�0D�C�����-U�������oe�����f���0���4/��u�G�3��S7j�2��E�^
G��z��M�Wiz�C�fP3TG�(D�'6��*�;�xsS��R�.Q����� �v�u��-l������r�/�������Y4����-Q���.E�z9���j"��:H���@�;�B/k��.��Y#u�A�2�d�\�!�My���-�nf����,���$��h�k�,�;jU7|����u5�����.�X?��N������c�B�=�h�~�kpT��������U<���-��^�B$�������(j��%R�,����t=	�W�H�< $��+��'���t�pU�I�A�I��J�R�6w�YW�65SI-����������MpVqeOm����C��Ow������_��^�qC�[���a��,�T�j��j���V�q�q�jKg�U�I�l�)��O����v�~+*!xJ�t@7�����wI�+���Z�[��u�
R�H���������;o����'.yH�M��L����#�&�b��q�/�nwl�,���v�v1�[���':��b���!����b���[W;�N)v�}�������
��1���h��p.�h���������"���jM���v������k���]?��@�DV�V���R�J5R�c��-w��#S}������wP��Y����J�i�+v�N�/�q����Z�r��vq1��W@�Euep\���;#�����Y��4#�{����}�C��c���1�|�w���B��x�:�����_pZ��������y]��D]3��E�.�����jMM/���1qg��.~������j=R��v^�yM���T&���e��Tv�q������yDn���uR-������F�����j��58"�x�����-�%P��:���������Y�1uLc
w�kL��6?���0{M^���pzM#����B��l���u	M�#���c�������������h8�h����k��h��H��eg�>�;�q��=��x�`Z���q��ig�q]�x�7q��8��qHk~�V����� �n����b�G��v\UW����D^7�P����F
���
����yX���������w-_�����
�w����(�_5C�����y'�u-@�E�9��������p5��rYl
��B/��f�������\$o)(�c��I=h�;(N638*�M�(�E�fZ���`���_*��_��4��*
N�-�]s�/*��j���plqq��������K��"�!�6����5�k������%�G*����+V�E����
�M���~��5g��d+Q�'�Y��H��q���]��P�x�����6������������D�b����c������}L'N:u��q#l�]�����,Z
�X��������������HPg��O��`& <y�LE�W��*7~]�2��B�=�6�?��u�tm������/��#8�0��m�	`ANr&>�;�#�U/>�ef3�%�������G���^u��I����7^��j��>��.��-����I�c���R�����0�s�/~���q\w{�+S�q\=a����q�����I��=]u��S�:�@�5~�bT1���I�Wl5���xs����9d$�F��^J�'�"�����}���13��3���a���7��^j�A������R�����v}����T�`�Z�_���V���bL���h�����F����u���K�z
��6��K��-�l�	�����ee�]uT��Z�v{�PW;QW��h��3�������f�>������5���E�������R�=����Q��u�g
����(9�P���^������3�w�E#c`u�tL1�����%�V�=��V���Y���s�3TG��\<w����2/��e�JV���O���b�����E/.�&X���U�����RL��u^������q[��j��V9��\C2�zkv�k������+����.4%J���~�1������S���������"[V�Z���3"5�����#�/�PS���iF]������_����8=�F���$K��6��;���`I�a��l�Ec��E���������Y�KE]�v��-E����������mz�����W@�W����W��>����X��;��������>O�*�u���fT;N}�<Y�k�bZ��r��Hv�����k�58�u�9��������R�#�6`y �}���Lc�=�>��W4%M	�7F���B�Y`�qF���`����Qw4b�>� �U&k�2��X�C���	�t;G�caeT5O��������g���,�ha�0�����%������.�����xyH��A��������nW��v0O7�l�;L�{]��0��Q~P���x��[�Y�����U�������,��6pv�Z��P<W�d�o>�H��%\�d����>����2����K{{�����e[�5��u���^x
u��tv�����������k�iAj��.���EP�����K_���a��.gnFW���g"h�H����������|i�l�$I���T�9�(IC��2*j��I�F�����!D�xQw�ei�+��:����+pC��OjDN�FQ��R���d���Z�/�W�f����6�|�z����5��Q��Wl��Ics&�W�����������bs,�D���'6�����`��R{��4��+��������#�x����F��Ur���bZ��O��=?���C�>NA@Li'�8�{��B|bmj9q?�U�A�M��9�<�<j�������"}o.����O`Q�vB��W_
BXP����P���'���[�=�>�6�����1N@���)0�|
�2������)0�|
������1�������������������S�S`=�=����������|`���~���~�o�)��~
�����~
��)���O�g���C��?�~~��|�����?�?����)�W��)�W��)�W��)����)����)�����������������##O�g���C�O��O�O�����<��~>��Y~>�����|
�?�?������?�?�|
����S����#"O�g��?�~~�0�t�i�S���)������}�=R��{���������������i���)�����?@�Q�2����SS�,4�����������b���40�c�d0����������0bHmx1����o
Bca�`A� p>J"��D�J��C�!�u�������P(
��2%��Q��f�ZRE��P]Sc�4����	�=�q��4 0&0,02080>f��!��&
�
�f&
��L��`n��@JMPD��a�������!�U��6s
�M3��S��)���o����t
���;��b_�D6W�7�+��e����N���_�^q@�@]�@eMp�_��_�|��B������Vr%:�/d�\�H@@8���B��$���YV���~��
�Q��]"��]|�Jk R{�O�|Vp~@�o�������P��;F��z������7#�<&���Y �2*|�������c���7��;5��S������!���]F+�$^_��S�Y�W��g���eR��-��O�9?�*�I�/�s@z����-��vR������9R'��[��&���,; �~;>��N4�ixV�
7���TGI�:.R� <�z������u��f���6R�PGR�/uZB+���j����|��{I���S��kHI
Dy��?�w����I�
5�B�w���m�kA�D�f���T����}`+���T*���0e;����m���#$� �|?�<b�����������g�{���6���G%��)��m�7��ZK*AN��B�u��z��
��H��
��CG�aW�Sb)_�>��&\����d���`�n��h7���� �W6��]�@>��D���|-RC���g������ d���yp���	�^�H���9�����
h�7up�����5O_s��3R�������Z%�����N��k��S���U�z����)R��BJw�L���
|�y3���1��N�UQvA%
d#�H�/���B��6�G���:R����������������������=_�P���T�?�"+o�����Q.����	�A�4�+E���x��Ry�������s�D�
����L���3p�Y���U�f"T�C��f`���g�AO_�4�5�������&Go�WY���mh6��0�����t[ox��ZY5������)��>�]�MslI�Zh|�E���Ru}��V�/G�������w����5�jT8%���_S�HM/%���t�g�'��l���.�*��=*\����b.����O�f6��?Cq�\�#�-�(K�E�G�f&x����:>��
W�	���u�Oo��xL��.��g��m����si�3�����`����"Z=R-#+�M�����c���.���?[l�����K�z6�H�U�{����&w���������[�}[���q����a���p�6��%��R������C�{�08�����$�����Yb��(��B���z����O��N}p��#5�(�|�>k�(�g+=�h��/��ny�pj���r���dp����^������U}�
�{.w0����R�Nu����I������g��G
���9��N��S�d*�0T�@V��eG2?]W�%O22e���
���
�p�V9��:6bYW {�UdI����FT������W�&|�J^%<���Z��1���[u���h'Y��mv���G��h���
D����6�9j�M���uZ0UT���eW�%��3�JV�s{QST��u*��KN0�t��XnR��S�U�)��5��2��+���X`4���q�a��FS�%.)�#���Q����J��E��/0����q���q����.0���]`� -0��,0.�,(P�.0n�X`D|�X�E����XB�^���u���|��qxW1�H���;���4����/���J���:���-�	���8-�/$���>�����b;��X6�:�b^� :���_A�vz����W�r�T^L��86����,e���Nm����w��p������w�e������~dJ�r�p�CG5��v'�1n���f�bA�U�qNx��\���OTLwh�������yW�������J���k����{�)4��?�������59�����N�jq�@u�6�j~4S�Z8u3��U?��������/���6��������>����
���tb�Y�JFi�J����;u.�(������Fg���w���5����	&<�7���:'+R��>�y>N�-����23r��d
#������_���w�g�C�;���1�E|���S������=�����M��0���|�����P�w�-2Yl��C�w���]�/���^��}W8�M��ut,y����1�H�������>��~���9�
�;^*knZE9�N+���Z�wC�����c{���~��^T����#	���R��t�Z�T������6�Xj���8u�][�i�st\�8���L����'&��K��$)���,;g���K����������E�h0*p�-��D��eV����nG���������S�qcV7�*��k�rr��.g6����?W�%�}c��Z�l�]�x�rj]�X���/	d���������n�v��
�3�6+x��Q�7kxd��/g�-u�������8�a9��rf����_�����x}�b��H��]����$a	*�_���w��/:L\;��\�}�E#����9�5����c,g��`9���L4�;G#���+�b���{�>�<Rw�w�t�'��lA,vm$?}3����atdy�%���Y�S��'�t%��� _���t�+�_Z2�<�`R�KK7lgBz�_��r�f>��RJ�4�,�MK3�K!����u�B���=c{��eNB�������i}]���ZC��z�s X�l�z
��_��5���>~�L�pB>��e����sx��0m��N����o���A{���U�l��\�����J�����[e�p"����f}qZ2z1Qk�=d5�*���1f�[
���;@\me��C;�)a$�ZJqg[�->���\����/>��������6?�G���VQq�}�k���q�����.c�"@�i�Tv9j:�Z�z�ZB{�r�������c�u�o�7|��C���TGfV���������p<�&8<�o�x�������n�/����9�\��%w��c�8-8�oc�{9��|����]�S�e��������'n)�j���+��������ZYa���*�Fh������-^�x�B����?5�toX�=i���tU���s��`���|������������;a"0xn�n����2?��r��d����������i����:��n�i�����l����%�.�Z������V��F`E���]ZG�BB����b=$�V�[w=Z�����Z�Yr�e�����7M���@�0�&~~�<9��M��#nE���
��I�0�K��9��0".EQ��T~�H��h�4)�@Mn�O\��cG�V���j�����w�2|0]��H�T����i������wg�s?�U�h�&��Fq>��[+�;8d�~��o����������xO4`�\�@�V�]�Y5��?���Dk@��y��DU$�c�7$;��)!9�-9�����PO;�����^dD����M&����~G��l���Se���d�/GA������3e.a29�/)V���X��[]����89,-�o���$�����;:e�@��'3��������b�89F�$��	�}���@=	������U���&%���c^���Y�>c�HM�*�e����F�L��Q�/e�]�kN��{l>��`����@f�Y@��g�;������K=1[7���2�B`/l�{�zt�kB��jf;��%��@M��'���a1�����K�@M=���
3]�����S��W�07�tOE���o�a�db0�����`�J��);���RO��+�S�����o}q1�C�t������j,����S9�@���T���_���D��M�����(+4*<u���aic�����|%�
���#��,����4|�
CgM���q��-��k���R�i�D��#���t�_�:B9�#����=Z�
9���-�:�Fu&���Q�/Z�A��}�!����9�{!��s���a
4�t�E��T��G��m�zl�����"�~���h6F���G�4��p8YM!�Ok�����mO�]��yI�0�n"Y�����E��CuAz���m��u�'�������-��V������A7z&���%�_g��F����Lv'{���0]�i%����V������vG�B!�d��N�^6���U4�$�f��4����2��f��C��*�KfqB\&�& �h��ueP�u]���/v
P����I�`��Zj~/���k7���v��S��y�c�Pk�/�WhO)����A��D����5!nr���vh��H^a���a�%���@��p����2x&_,Q��vK+im�_2��%}��CQ[��	��vJ9�%5��������9���w��F���,�X�:<^
�{��;���`l�����yb�f�i3�V��(u�9{��p���`�@��@�L������h��q���5�^����s����Tw����A��i[�57&�;{�
���Xo���q����K^�3��g��^�7{J7�i�s::�_;{{V��[��`�@�=��?]�FT�h?j��'�,(�Z:��gQ��Y��{���R����G�#����y��@��%����J��g�s����>!b;���p�s���	�"d��:�H,q����4,�����J���2A~�������,+|K�:hnHC����pU���L*��28��
���K�:8���S<K���>-q��4��uP�S	mq����ZY�~���N�~�������4-qNV3�
��N��E�Ru����f��4z��VTy��ss/�K�w���f���[���Y�V�b���!�����/q+������p�C�t,�elEbN-q}�H�B�i�k�K�:��N��!�������MZ��I31�B���h��w�[��3�����i��$�����|�JR�?�1������h�C�������u�����k����!&��]X��_�sa��Y�aa8��h2��.{��p����A����9��7
SvZ�Z���F�q��m�M�|T����m��=a�������^��
��{`=���f��}��9��ltn����~�[�&q���I�%����$��������,�t����W<<�X�w�:�a
��*B��H�(NQ�4f��i�����j����C��&����|v�|����bO��kO�p

R���zqo�@��}��r#��b��&�+���{���=	��1�|�(�I�%���b;e����Y��`�q��7��kO�lj�K�mi�=�C�C�$�g���+�'i�G����l5��I?��ew��$���$x�K2��$,7��|wOr�W���5a��`�s9�����k�����TC,�{�f\;����a�'!�i���'��tO!&�L/�=��	�'�b���9&����L@2`��3��h���+�q@�5����l�nB���dz��?�LO�.m;-S11��S���7�L@=s�������LO�I[�E�*G�z' ��Ay������z��������<�/�6���?�S���s#i�N@=�-	<����O�1���	�g��	���e�����O3N���q*�1����������*[=��~h�����=���ifym"�Md/��a�'c��&���M��E�#��&��,+|��^�	'-n"{���)Dym"����b/�.�&������?6���M�l"�Md��l�D����M$�������/��&��Ikwya��h�D:��&�i8-n"O��6��K�5���i�w,���x�;J�z��M���~�����:�&����k��0��kXD$n"O��6�GD�k�CFZ�Dj�O���#/)\��������J7���
h�I��Z����^�&��"I��z����s��-����q���Wd��B�\�w{�4,�H�a������D)xB(�N��0�~z���p�����6�la���.va#>W6c�����[��O\���C����T�Z�	��h�����������31��I�~�L 6O(,�BF��[���F��-����'u��7��P��P��������#X��u��d.����k0oa��ta=���:�u7�S��u:x�N��9��-|)Z Qf�qe�rsx�u�h�{�.x���gp�������%�P�-P������im3�A,���M.���DW�������&�3�4�lB��GB�$#���#����@��J�r�o�����������v���<�:�E����Y��bwc��roX�@�������[��d�������/�3�w�����G�b���8f������=h��6#���!�N���^��G�]o(�z�a���Rc�0J#��d�8;;i�S���
��r
�p?��G�b!7 "����H\c5�2Xk`=k�����^
=xB. �I�
<�hco���_z�?Kx<��W�_;�;/-�;/g���3/�<������^S��x��,���o�����\�$����|��6�7����b�$^|h��l<_QA��e�/K�c��'%��)�_x��P��Nb+P)�8�\|Sa�&��+�Gx�b�k|@�������M���c�E��G3P�gO'T;)��~�w���z���5h`�EM5�n�>/�ZN��
���V$�g�P~��-���$,�����d��x��������F���F��/�6�����
)�uS��t�y�
zk�r��k/��X��x��u���u����h���������;����m�(>pu�hx���B?���[�lj�/��h�g�a����%0t�*X�@�4�W/r=,3�T�y�,>2u�V�o����9�?����d��P~�y`^����7�A���7�/]X��t����#��Z���RE�|;���Pc�]�
�3��v*h�����T�;m_���~�h����]�e����:nf�9-�-����O�������-�������H��Ukgmy���>�������p�������F
40��g�"�fM������n��I���Y�����I�`��Oc}������4������(�	H�����h�h:X���������,����@v
b��g����k���|h=�=$��f�x�6���n�z���x�4����6��hB��NOu
�{�mz9������{�!��i�?�0I���6�%
z2��������,�)�����F����:i�m���:K�,�:�+��[��UmB��6��>�FVl����� m�(Wu�\l-U�un����r�8��/84G���/���j� ����8dE��<u�h��px�����f������F;�����9\�����RT�}W��V�9���N��?���#����w�K8�� h�/�
v�wa6�~���}
�M����f��r-����`
�]��$_�w�i_��8��f���e���{���nV�S�M������+W���O����6%(��7�Zi�"������	t���p��v�%�Jz���BhkE������9S$���������mK-������kd����P���M�C��B�
���C�GT�n�eQ�t�4�B5A��
��K�7����@	b��
g���|����=;�V���'�W�d��@��W$N�uV�Y��|7�p�����y7�M������yu�������������w���t�RH��%����i�M�)C���_l��,!�����
�WBl^O5#C��������h���������h���J)�{�z�J�a/��xZ.�
�����)h�Ms��j��+\�0C��s�
��E�%��q����5+��nR/��OK
<�d�"-��--����C[
<t�:�
�����`�>4{��'~�Qi������+���������	Z�Q��J����>�f��f5-���Im���?���F�j4;��&�s���O�5���G1a�:��'�`�M�:��dU���X{zA}������C��XYG�	���n����o�(D����>��J����*���+������I��N:\������hik�^�z8J�i�v���/�jy��-�K>T'�&�z�w�Hkx��
@�F���5!���')b����W��$D��.�c�6�]�4�
5f�-~Jr@����=�������
l��GTp��j��I��%���a�2�;h��/��������0���t�@4�����_w�9$^�\�#�6h����q,W���2#m�4��(�?���aB�\0�'B  
J�@k��H��:����MWDz���nQ��
p�:�V5P�?���O"�eB�>�2���^0"WL�K"�	E�p��4��J9
�W4t��F~
u�6,�N
<s��+�.V�����#TqY�VPU����K�������v��7�G���^b�g��D��,�_n&4��n��y�t2���+��tA��&%�������/�>!���g�����\��s�BQ+����;�4uf�����m�mM���,3']F~N���C6]AOhu��i�3�>l,Jpp3�&Br��Y�+�jX�8nz�����pl8=���P8��7!��O������V��&����L����yZ,�w-lZ"�Z�����^.��m�4]�M�/�2wAy���$]>V��Z���a����6��h*wi���6�:����hD�@�hV���J��������[��Qbo�]Cn#�kS2���<4��:����E�'j��[%oJ�
90�&?b���yhP:����a:��w�.���'{!?�G����^�a�z�hVQ��O'�?�1��]������L�q�H����������;-ZC�K=7_L�i�>U�)H����hn�����.X�E��LfD+�����
�^_4��F�/��<�grI�4o��G�f
i&o����i����x�i�v	4l�(.�]'���=9��-N;�7?�#�sx�R�O-�T��?���i]���J$�
���{���8�c�H��y����?�8�M��l�P�V��h	?t��N.*V����_�0�"��+�.L�`�}w�|�$r[��YE�����u�5{��r�&���L�����B@��"�>���i��%[=�E�?�@���M��Uj�� {�c���DZR�VB'������O��8�}�J7L�/������^����y��i�Z^.��#���+�^k�^��;���s��W�{��BJR�[o� �'[��2����a��S#X<���D�`��L5+��1mS�1�]k�;��
'��*�������T�0	.�����y���CI�%��.C���0c��y���-}Xhs���jd�
 �6A~�j(���:i�F"����a�3|[c�	�k�-�w�;��e�`�s.�g%`["�#��4k�\>g��Vh���>��FS�V�Y�/~q!
��v����`�y����A�����,c�5]V�����v�����m�`�����?�<~�t����^d���������`b.� "���t�Fwd��+��%�0d#.]|�K~�d�OL�@i�O�L|�,�=Oy���@���Z)�&g��Gq�!���A@1��]B9���,�����7��Nr�c�����J�V�~���J���W[z	���Ek��������[;��W��i��N��y�o~�G�#+
B8Q�!!� �����������oI���R{��4��+��������#�x�������r���s���s���y��@^�)����@������xj~
����o+���(���*������)P~��@��<j�O�Z�S�����>��O���>��?����w=AO��O�O������)�V{
���)�~��@��=��?���?���[
���}��@����G
�����xX��}����k�.���)0~��n�i��2OXG;Q
sLt@��1N��7��xx�!�@B6�a���X�����=�x�^0�����DXX����%�����~|����^�U�:q���1�z
���z
��������_���<�q|
<�~
<y
<�~
<5?~<�=���|�g����g����g���)�s�|
�\?�?��|
����)����O�G����<�q|~�����������O��������z$���H������3<�����������1������.<��?D!T���b|�|>�MMa��D4���n�K���n�`�1�"��@0���pc��3>,"���!���Ps����I (�	���!��A�(�K�W\�"
���C�M�!���E��@��LP,S2(��i�7�%U�
�55�JS���P{��304 0&0,02080>f����&
�
�f&
��L�M���o2�4�0�0�fLaXidapa|a�i�a��\�t����������c
����gSx��Z:��v>C�r;��Q�,��W$/����@���!���������qT$��zl�U��{�&�5s�xiQ �@�\�.��>���b���Z��K�o�6�����f<jz>[���ZO|#=��o��p�-����x���k�����a�Xo�Z<��g
�$���-�0o�����J{��^+WU�2���V�P��@�������9�$�r�0�{A��|FBOM��|e�YA)�6����>�T�b��@`�q�b1c�dP�W�<Ug"d���V=�iw��f.��M+��������<�����z�������3����/=_���U��=	}|=�}
�"T���]�T��o�-EoEV<�3�������v�������'�"����6�������^<#_L<g"+��^&;E�,��4���U��+s.�fo=_R�AU�(�&�i:{�ea��U3�����}�������2�qel���+j��-� ����.��\��%��$����U���!��`P��:���G�`������V���`O�u���&����f�{��f;���i���MS����������x~���]�3�)4���n��WbG�]�>�6��\;�������*)�����uA�/Z��m�k>�X�=�t�{3��1�n@,;����GH�������Le&x�R�{Q[v
�����g��>�.}:��M3`��S���`�
7���8�y��]����.��g~��eo�lp{��������?��6M���K�bJ@]��Ek�9�4�� ���tm>��@��-���D����7a�z���	v���nFH:<������e�u���NK}��I���&����:��er���s@��)��w"�����f�E�,[3�\�������z���1L��G�DxU�&��y�&B|�'B�&4[�dI�Vu�'�^�&�+���N[��{Z��������#_��IN���`�d�-A�����=��D�^U���|\fbY5m]�	t���5��D8����� 4�������iVn��Z�5�2u�1�����j^,<������
�uYV8�����F���r��+�j�Z�3y{�@�`�&��ZF����jF#�_��=��#Q�*���an,����l�G�W�iZ�@W�i�C�p�(��l�q�_��.��h
�e�	�%*?F����=�NN�����a�f�At+[X]:��kv�d!�yA�0���C5�uQ&w���m���hy�rx����b4gaM�P�,�doY�G�u�_c���T�<����>����3%�x���Sw�py���1�r�E�_`F�O3p����y���2���W;&�9�2L:���[������������#eXt^"��H�`�JW�]�q�J
4*��2�#3�E�i*�FP�=^����+(���P:�g,7�2L��-�>��Y�4S�%����-xov{G���*��+��.�tepe${1,T{+J�`�]eXT�}������)�RP�ew�Tsd�6q/W�I%ZRvx$N(\,�x��cX�������=�|��\����}+�9`�?��+�+�h������4fw�8��}s��}s�l�+�|'���2L�>�_�3���O��V���}V����;���#�V�>�����|�R�
f�zY�����M8Bs�Ch��:���C(�y��!�iL,3��;����u�	k�a�m�B� D���wJ0fy�5�H���|	��i>�6�i��7S�6w����)i���z,���l�O��.�l�OI{���l�V�LI�����5L;�i�L4�B9%�������v�
�)I4����M)���tA|I���3��{0��a���vX�n��4%]��)	����bE�V��\C�>���RhhK������E9�>�lkJ��<�)	�@��-�������)���MI{��V;IWaFR����������5�����b�E��NJ����:�=u���o��Q-��-���8mMN���4wMOD>?��X����2��8E��'�e}�
u#�6��n�l�
�F,��Q�jY�d��x���{�����x��IH{)aX�N&K�9x�;��9ZW��K�����`���"�]Z�N��'.�uU���Vo��.�T����9i����(���#�-������SB40��Z��������_�qT�D��[E\f�o�������9E��P���fG>��[i����
j�wK����\���y��������I�_��.�)lP]6&����R{���������^��@��W��L#{������0�+�]���'6 �����b]k�R#�l�b_��`������"����W"����hj����[V�X�d8�z�}rC�CQ����i�:d�,W�-u������O���]���:�����b��j�Y�e:����#Rk{�m�9_��5%E����f�T�;���,L\��\�}9S�V���Un/j�3�}���:&�
��K\���F�x���C^qTh������"��>3��oc#=���y�?����=j"���R�1�5~T��5nM��4b�Y�'5���$�O��56��z��z�>�g�����������g5��%)_��
�k?�n�����>�o�%W]�H������Od\uI�U�'R��$���9gMt�����&�:k�D�Y���5}"��Q��d�y?d�)��X|$�����u}$��K���>�w�%yW]��������O��uI�Y�'���$���ygM�w�����&�;k�D�%��w��'�^�0�+�5���O��u������]uI�U�'���$���yW]�w�����.�;��D�Y���5}"��I���>�w�$ygM���dT�.�H�V���*R$"���syG]��;�ryg]�;�ryg]�;�ryg]�;�ryGU�;jryGM�;jryGM�;jryGM�;e���2�������N�Nk.��{�	(�����8L|�y)���mf����A5��'kO`�����~@C9;(x6A�%���x��C[.h�E;��&{��&Pg6hg�yX����8Oa�	����f�l�,5��#��T!��`	O�m��N�����C�h����&�&4{�V"��f^��ug���B�ClH�qA�/�J^�iT'���l���Pc��c�l�����#�
@#���j}�W_��i�1��Ab��3d\����rw>��xZ��U�!��aV)C�������2d{��i�e�v�Ae�s��Y==�`��2d{��mq���v��%��m���!�0Z���g�8��e8}�W�S��Pn^e�����a3�o�C��p�!�f@�o���i#e��~R�W�����Z}����x&e���T�l{W{'A�be�R"�j��p`�2{�!�,���~���,e�R.�������2����@����Pd����UiW�(�A�[�������������K,�Dmq���vj�j(������
hm��c�T�"��2}�(C�����2	5��fS����P`3 ���l��4�(��M��w(C���2��qW�GXN�Pd�����ue�K�x(C��6zP���2����A��C��+C9�R�S����V���g�P��d�-Ci�����n3���+����$�|n��������r0��R5������&I6G�ma}~Lh������)	�)��A���\���v�����`�@�x.�T������l;,�������s������U��K�2%��x�x���	��?��pc���e��e��~��&xhK&��E���$^`N���B�LTu����
-EZ��r���S���h��>l��=�����	s����.K���}o|]�R���KS��0��\q�����-;`���l�`j	5���@��S:sT�<�ZNmL@�E�3������ej���Z3��A�Y��O��Z_�H���"���P�&O}�i�x3�@�\nM�f�����cX
����}�����t�V��J�wk���;(�\{{k���r�=p{�eC��kk
?��F��d4n�&�d��-�@�\�hl����u^0��m��b��8-r��F1����M���%:h�'�:�~���4���a��qV]Zu��s��w�	�a�DM���|�e��GZz�j���]�AJs�}�Y[�%)(F�\����j��a�T�����s���&I�	}��R(&Us<y ���g������#�i�c?[1�"�E��?�5�Kn�nC5I��z~�����jV����K\=�Pl?�AV������F�y����D��6�e�Z���)�F	������>�YQA+�-�8�%mUxQ�;bLG���.�	3��H�����M&u�����k}^)/����i�R�u'G$dk!���L���h47p;���}i�|����>����
4~o��i�RyT��,�h������%���h���)A^����LO4o����a�d��Y�'�e�,SOB��{��<�0�� Q�����7��N���iQ|��YU���=�CZ��2�'�����c?�wTy�7�(����,6������u�hb0?QF�i+����Sk4��R�i��CK�+��\�"���Os
4��l�.�S��x��`����+�0�Os	<M�b�9V
<M8[����g.}����=�&�u��08h��+���]�L6����\o|��r��G �+g@;�<N����S�v���/��'g����[-���m9~��lg�������r�������;��:I��%n���-���=Y������j���	���v��������sc��s;�-t	��?d�F���3���ux��r1���K��H��3��kAX��@;�)a��YW-�A��j�Y5�@44m��?���z���q�����������*C	�_
$N�P����
��2X�()���\���Q���/�+���� �@K<0�3(�e
��I���W
���2�9���Hk:i�n�����P;h��P,���P,D�����%����s�K�s�[��$I�^)�et�2H�������]����2X�/	<�)e(P"�V�P�&����l�L����*���K(�Rg=���8||���28�y��A�w�N�K
���$�VgP<_Ieh0�BSO�\����s�h9�+��MB����\�[�x�n����|��U����OL�S����eWB(C�,��������u����{�+�k��f�� e {��S����#(�C����
��o��2�Q
���;�la!eh��,��Y\E��]��j�2�������^��vz�����L�k8�'����
��^!z����X���@	��Wc.l��	+g����Y�&��@�\d�W���S�$����D��V	��rR�P����u��H&Yk��h��K�xD�t����5�
!b��0��.9���Uo�O��D�n�%Z*(��f���4��6��U8�Y���1��E6�`��v*��^49G6����_?~A�UV;�i]g?%�:�&[4@����&������A��{!��F4z��8[���?<v�4YN�r�!����q����������m���W��l�2�Y,����v��}Au�����	�d��������)�@g_������df������cx��I�f��Dm�����]q��]dj���x0�|�V����6(��M�y���M;h�h�����[:\�����v�hF���Sm���u��e��m�'z���	z��?>?��/w�I��#������^��9YUx#E7�����|76ht�y��^r�+�s���~m^4�Mg��mq`�1���<b&�t6���S����^:���{�����D���?����-"�P���~�4j�5��x��Q�46����i~j����h3�����+�E���,Y�{�i+y9���N�������N�������������/�u6��������;�����-���d�x�hn:�����q�h��7B����7���?`o�]QrJ�Nj�����*����{4T�K���}�j�M=���thZa5���������h#o�]�j�/@�qA-"�P.�5_x��o��[w����S�
�N^Gl�`�������d�^��4U��;7d��9bI~���fwp���}=���X
���������I��3x8���v��,�{8K.� ��i���|� ��#�8L��������l9e�Ud�c8�58:,1�*[�H�OS5�QM��u���ZzSMM��}�U��:����O9������l�u�g�Fp{v^!��I�
������4�! %�" e�k��Vfw(�}���^����|w���N(����E]�]~�V��wY+�'�aw��bjc=����7�aw�6nh��;D
���%�%Vw&��1�P�J�X�#>G���8R��
t�~������W��+���kb����,�P�u!Pk�T9��tK=��T0�X�Y�P}SK�TZ���s�_h�P}S����*{����
�HM�M�>}���M�����zQ7�Kq��L�W�D�X�;T�O��ZIX�D>��'��_��Nn���W�]���XG��V�K�����@���
\O5�/�j������
q!�/�2w���g���'��5��������95y���o���{�X�6O�w�����-[.���d������A��!5C�}N��P<J����\��A��%�r�8/P9a7�VPC�'��}Dj���=��CS����\d�U<w������"UA7�/m�i�E)Ej�������a�<8n������ao��~EL�5���Uw�/jzSS�����a��������J�^�������W�����CU2N��G�?CsW������fl����j��! ���E�4����`'��<.Z�'����=l��:��rz�jq��� ��q���:��)j�����8�'P�&��kh���r�n�U^����Yh�A�����)����g�(g�Wz�Koj����N'u�P/�3R]��!�+~��$N�W������c���x`(��M)�n�*u������<�����zy�a�9u���!�b����t���\�*KTnWHeM^v�[�#~����#x[�dJ�w�[�.5�=���n���
�!'a]�t{H�����I�����<T@�M*����������,�M&�Q���?��;R����y����p���o�>����S����!��v
��~����/���MW���n�ZV:y;��]�Y���7�����AJ����7nyF��Fv�a��T����z����w@�)R%��1���%*m~�
��H��r��G7y(k���[���,{y1�c�����h3O��c}��<���
����K�E�E��m���#y�����)p�y���Gji���1�C@�E�6m�����N���E^�p������L��k��������];����:j�G�$�/�x}��0�Lx}�������:��S�J��T��,���"�em��MY	��������f���w�U[�����}��z-�zG������?us�%�;�]�u��l{����4*�
��<vr?"UNN:���[7��Zu����[b�����W�&�'t\Fw���'����m{�k���3�����l������IIg��=�$�=��]����[
������5p�A�����[��"��[��KGWp�	z~,���V)��������f�����
%��:�|���}I�g��������{��5nv(����[��L�������ohV�����
�3\2�]Y2���CX�����,tqwe����i�
��q���l���!<������pe��R�������o\a�W�O���U)�	8N8��r1�e���Q���`\5�U��E�]VN������T"W���Q^3'����T
��'�k0�5��v��c���+0�x�E�q��� ���6����747R�w���%��y�{���x$0�#u�P����-��R�mS��V�i�"'�W@yE*�z,�&5����������������WI7#����{�@E�|<�o!������+(A��`m�T�~`|��lE����@U&��*V��Hu������x��z������GY�*�c��7B��a90����t��
���qs��C�!��ocm�.����IO�|F�)���}G\�;����0�%�Bw�P{��G�B:��������::���������J<��\�^����v�|;Uv�7q��6	��/jzS`� �ZP����m&�M�y�ww�m��kP67�
���7pT
�����_�*�WE�l`�c�����5� h�4�*���������]~��}������~���9�$���&���>���f�i��$�2���F]��~Q!^����~X�=^��.=�y�{����u�Ws,��%:�����WS������:���{�d�����8��[\���oLO���UM~���Bp�Ka�8w�Q(���M]E-[����<���)q)b���TlS��	��H��*�y'������\q���!�8�;c�VqdW����r�^9�P���4`u��cX@['�4OgE�����N����A{	�8�\�VMUG3�
�#��c �UMG�%��X�6�����rve���o.�)��ZQ@�#�#�
��jeX�m_)����:@%�5R3n�=����x0�wW��#u����s�j����4�gR�m�GG`���������,��Sp���l1�{P�a�b)�������HT9�mR��y�>��!M�*�b5j�w�#��QKo�Yr������*�L��r�|z�[���0�_}2�B�b�����8�����;�c�_qb9�.&N8�����~��0���%zm�)��	��K���	e��m�t���R5��fN�cYj�;%Y������N*�m����������G0�+z�8�!g	ey���;
ec��OL��W ���]�\Ae�\�V�-9H��C���t�2�U�3e���@�pZ�}g�����-��/�J���B_V*Ps~����@�oG&�`y����,"`6�Ki*�����t[T�Jw�}P+�����<�z�|w��o	eg��	x�[�h��<s�CDL�K���"l�+�r�vRCT��w]bR�@��L�|���XW ���1I�G
c�~G<��Q����LE����@[AE�*��&Uv�i�Jns���Y��=H���T����ZzS�-��:5�����h�X��J6����N�A���m�M��R���M���������
���&x�C�����}b�����S��F�,���-O�w�"(��G��IW ���z�M	��#���(+T�-�#U����{����2���}`zWv�}@�
��0Q���g
��Df�+o�U�'1��s	J0���$u�Qv�j*o�9�R����
kEb��[�k�����q[��CQ�3�5��P\��n�{�`.>{��pk�=��Lb��g%�	�q]�;5Y��q���p`}���7�C�9v��5#�n�]}�����,����,��h��P���d�+��=���������s:n|�J�j��[�g����#{�������4	0'��%Y�D���(���L�_TSd�9�h]��5}T�B����Qe0���0
�6���w���sb���Qi�j�R��~����?h@�E�0����l��Q����i��(��
���k�>4r�=-d�b�H�*�?1B&^�?;�Y�}zag/�s���o�~a�L<HK��i�~�uD]�}���D�ve�G���Z�����2q�9�8e����|��e!~�G���7�Y1p+��ZW���L�bX�9|�����T��R����R��8t�Q������|�/��3}�v}�O?����!��W���:��>��'���}���E}y���qY
�:c��/����	%���h���WO>T�.�?8�^�l����b���6��|Q�0{�1�u�a�(���x;�0�DK�g��2���PG��j9��K�<�:��F��0C����u�E���\�L�����&^+R��QY��t���u�Z�����x����Gg������*5�<��$��i�EyF�����>���z�$Q�����;�_w�������S��Dj�oj}QcF^7�SR��#��F�M_�u.q��pqU��;�!(b
��p�����t?�Nj��.��~���-������5��@������_P�Q��	a�L��O]7(b�a�P]�*��1C=���	�X~����5�%}�O�G���8ein2��7��0��(B&<V�2��p�U!7��;��t[����������I�7�����`��������3�c�����b��4�=���oo��<����I\.���/�Ri�=�����u��j����z�����5{ �Q�G���YoU)W�����+�R"U!�V~����������uP��)����i���@K�6uqk��[��r�.�k�T��8�/���/�Yo{H���R��~�\�*	�zE�k�}�Pi�*7���������z�t�~��F^��#��M�N���*��K�E^���<�KQo�d�n-�z)d��vl�^2-��
�������M�t����0^;*-R���iS^a ���+klG�\3��7c����D�����}��^W���!�����w�K���s��~Y�����^��uq�*7W�p�^53����/[�t��+�E~0L/��#wz�t�jy���9�[8f'%�.U�2����N������*����U+$��}1Y�
�6�k�z�����y�-������N/*=m��<�qg�B�J�;Sr�,�I�g����41uF������[u}������H�����e�����X�#�\�A��N_�|�,O�;*��	�?���^(�#�~�h{������@��Mq��b��J�-O�u[n��Jj���^�.���I�25��$O����-���:B�oZ\��+��*��Il�t�'*��;-�����W�-��[�yc�n�����AZ7?�?������2(/�-1�b���$�Z��b�G�U&��n�'@j�A��z���d��0$C!�w��@[�u3�G�w�1����]#�"]�ywc�V
*cg�1i�u�����(�x��}�X��b,����[����N�b�V���[��@+�@>�J]Zm���3�"�WI�p��,c����Rv�E�=�he<P	�|Ak�}��"��G*yY�,�.�����7I��1��c,�j��Ft��x�z�,Z|��������X������)��x����$���Q�� �c��e��r.>,+H^��;:v�[�d�j��A-�����������e��A%�����oB���Xs�w�:����;����T�������o�]�ad}�N�=���"�E)�wRL��_3������W/P1f�	�Z�x���w�i����x^j}w��E��B�#�@�������&�bT���*j	I��S����*�$DuM������$�H �+�	A��h��<���QobCjp�yv���Ca`����3�q+�D������z>����jV��^6�����y'+?�i��?�u>�e��Mn>G��^S��<�y�:���VF��a���emh"�~G�����g��J!+_��&�a�J��n-u���<�����o������X�k�e���;-���/�����7��e���#;���:g�{�7%(��dv���8%��'�e��������\o�Hn��v*A[��_��)8���F�q
P6F��5gJ���LKoMC����Oz��5����w�d
2�J`�4��8�����]�=O>�jC*���	\���@�G.��SsP|Z��2���J�q��P���
]�	�����h��I�k�p��+L�?����i��-�������a�U%�����]!i�}d����^������O)�@��5(S*�G
��m+�\�[���h�+v������^�U%)@a~�c�������~wJ��(��x�#������Ok/n%�s�
r�����xf:k�	�?U���X�v�3����i}�1oY\��VMIN�f��^��7�������no���(_�ym�'QVT�o�/�E�)��5���;&�[���[��0L��r���19*�����;%��������|=�7XA�QC����`��"�����uTu �6�w0Wr&;�:<���*�����(�,�|tY��� aL�j
�7IL^4M���e�5��	"��O�`}��zQ1����J�^�5h����2\��
������M����+�a
.�
��DYSp��?��	2���{+l�X��r�m:�����a
d
���\�@�@���u��"��GK!cs�����\�_)���+�#W Sp�g��
d
.��e����h��q�0��0��w�<m���N��`-��z1��V�9�����vSp�����e�^�5H�jN��Irm6��/{?I��������os#���B�'Q�\�#�Y� B:�w�����"4y:�~Xy�|������@:������wX���*��d�oSpE���R�@��G�)���Rp2W�J
�@��
�J����(�,������_q�!q���������M���;
�f+;�D�O�����V�e�n���� =��}����'~��t���iu�1���bk88o�%�Ex��M|qn-��p����M�`���b������'>���>����s��p�����[2�-��K�7d���q6�(�a����^�n��'
��6"`0^�0��;�"��b�`��&��/�{�Pd�
�kO/��������}�"�s�a�����d��>���l�(~1��y����������}t����r��C����s����=��U�������5�+�[Z����n\�z��z��9�o��7�\5��g���~�fn�"7�U��8�0�
ilA�4��nR���D�A\���������C0u����3�$e������ZU����A��g���$
��M��P�����9X��)�<�|��T�!��W�5�a`�!�U<��Z�[K9���k&���+��{Ouu��0l����NB>��D+�~O+r3����o�6��[��=�p���m&V��N�=�<��1���d��w7|�n���yX�k-���������J��_�.��L'B�y��}��y{�N��NSzdTX1=a%��e� �������*s�� ���<�+��
[�l��7{�4T����;�-S�G]����:�Q�[+V[����V$���|�wnt�Z��������rs����~���)N+����s��>���NI���������v�H�:)��$]����]9��ehV��#V:]xt����%1����x��}k��+�������	�^N���u����%��~�h��gK�u�/^D=1k����}���^��SX&��4�Q�@�����+@�?|L���%c�tE	���,��k������
�z����1���x�m�����t�����_TC�7������Q||y�W(_���V�
��.h<����s*,_���=����9o}�bcE���|>E����q�����������&��v��n�����;U��k!��3�4�J0���vAC��=���7���7����}���o{u���GI������������`�0<D����������[I�db����xFLbste���L�����T��z1#�ec����j��nO������qr�o�D�z)_]�[��d��R8��l����uvc�����J�i}(��V�*���r_��3^���eq����U~����N8j+k��J�d�+,Kf;�`N��:t9��t�;x�)�#��sf�,K��u�
vm�q�?�k��o�My\��k#��@y���6S��z&v�;e��+����3��+{ ���^R�DYS���D�R����t����A�[4l �)�����}�����)
�xR��.�����"�CQ����(T�%!)��M=~�zFH$�w#��f���]�QU��\aY2�a5�L�W��@��	�H=��3��QMR��u�
�e����h��Q	#O��z&��z�Df��3�s�n�������3�L=����[��/�����{�5�_�-�,����Z�n�VS�D��	o�zF�B�'�����";.h�����*�L���3����>��Y���.&j��������bm�_��Q��}�{42>WX���j���(���_�,E9���gK=~6���J������/���xv�����E�o����~��)��+	�%��
��/�^���dL��xL����[;���������G��V	�I���R��l�������E�?�6F��z���e:�����[}>����nbPqg�����W���?�)���`����s�����f��te�y���kC�����/�:��d*���Mx��b���9�x���i��O\����xm��;�&�n�|:/NC���$�-�Z���d���e�O����N��*��`�"%(./��n���M����(��{�p ���xF�yu���[���*!F����MC�	C��}sy,{s�hT����Q$���N�n��a�^��&�Lv�Ux�0R!\����h��.l�x����V�*���B���D��'1�s�m�R�&F�'{;_i,�=�@�����j�����]a3�[qu�&:�����G�����i���0�C�5s;�K)�t=ho���

����!ju)�L��#/����^x1��?�2^���/Xyzn	k�����Z%T����k��-�$�������U�uo�uX��|���*ho�'�+�q�����@���5v��l����Tb�������XB=�_����A{nT�����:�w��X���o22&[%f��������$����([�F��'��$�*�{>���H��������`�;2M�`Su�r���"Dp�����6S.�r�E<��5)^4M���e���i�j�RL���Q^��
��C��z��@�W����)�+�{eM�`8�1@���#}�}��V���}`+�a��9�_�[���QR.����k�U5��n��)�U
�+�&VqZS.�r!�)�;R.2�BxR��Y�QY�j�(���2����yl-���!�y83��S��i���R.�h
w��&�|�!����P�Nk���l�>4YmVuN7X�)��R.�7L� _!���(k��@����2�;��
[)�������{���r!�)��R.B	�k�Uu����\�V4�+�������_)�r!�#�B S.�g�\d���e�}@C�j�f�6���,��n��S�;��������k��[N���H������7�f5-G�
�V���~Y������\��"~�e�u#LXg��F����	��\.%�v$n��}�+� ���[���_����k9��a�;��U�G��1��qK������rX���$���C�{��:��E���`-c��{k
=[o�=���B�����oB��0m��������s���K������Wz7\���� Q_�����~�:t0�$�V>n%C���q�%=��;k�l���6��}�
�*�4+�[��i�b%�i����K��V���$�R/�~�����?J��z�C�R��x�nC�������"�z��z��g��R����$���7,e�����7�}�?/�(���
�����y|����^^��jh~�����,V�
�~�h��xxc���tX!�	AC��V���/����2�����9n�Kf�ib�E?�P����5����8i1'���q+?�hm��k1;���\uk;�U�^4��i���dhV�_1�Q�=�*�hc4��n�����-��YN�R�����:�*:�>�����'Eg�6sj1���8(����l7^��!�E�|�E?����V�����x�S�!���@��7_����}�*�+����K�Xv_4�����,{��C]E���h�����$�?��i���i��i�'�R_���V��p�>4I����<'������q����l	����z����Z����e~pV��_���,J����*y���M����KZyx��aR�J%r��3�U<�,+�G�,��Vr!��eA�W�A��sA��V�n��M+�A��?�/���.���I�u��V��"�5���Sc������%4�F�(���f�b����S�V���j�\���;%��WN7�~��1"��r���O*���
���7�p�J��%4R;��m�P�>5����^:������r�JckS;���ng�gK�u�/^���Z;�a�Rk���V���OZ����2�<n��p��������E��\�Wft������|���c@MP�-^�QQ�5�������T���4r����q=���D��vo�f��������7z�[A#7�n<<AO�}���T�=_.�u������vJ�s��~n�u���@�lW}���'����������n&��v<����	{�|�� ����S�*_cMqB��=�Z}��x�W;��E[��u��V�������e?���}���0i�a9�<<"�����i���<�r�:�]��~*k�����-Z1�8�un�!�s��E*���b�I�D����;�����[�a{XbW�W�v<.oU#O6�����>���'��c
c
��C�n�a?Fe�����/f��73�����q+�.���8�+kus��U���c��,��i� H��(�~Rs�R�a���9�f�%��:G;z�1�?�����o�
;�y���B��C@=O[�u�DV�<{�a���k��i^^TL�)�g��=�z1�G�$���H�j����Fsk7��G@��e$w<�Vu�@:�s�nQ3�K`i^���V�ti}(�-2�0�%�/��y�sTi^�@���m������sM��R��\�������;\
�N���g)��i^��������5cX�K�M�b����0�Kd������i^"{��JF13�E���K����n��=��yy�({ ���V�������"���
����,��-�F���Fk����$���E4�����;��X��}(�yy�[�����i��j����4/B��Kj�����E5#�&I�K{)
�+,{��j����4/�L����;�@�o��c���u�J�]�=F��i�#�Y8��9�-�e����������|Z�Y�w��/C��/��Yso�\l0-	�����e5�x������_���L)��V�U3IT�����
���;Y�8������$)�WI����ok���}�Z���	�V|���x���d/,]4Q�SF�v�����+�Q����9W���V��XvN��o&z�����Ps���Q�~G@-�\���a�#4����G������;Y3��~�(�<a���S���8C=������V^����/.7�Mw�����+�?K�h����`�:cV�K�e���|Q�u����-�e�+�����,���������vb�������="��c�}^_�$*�x�/C��4Jf�@8������e��?1��K&xyz=����"�[l��BS��7���x>lY��qb���{g"
$��@b���������0���?e���l���#[�>^�������V)>�G��/����#r�/��`�����d���zmXg��M�G&��\���H�q�X^3���e���s�u�7��U���4�b/C���$��'��V����
���ge�
_�L�M��V�U��/���]�O*{9��+�\�[q�L��@�S��V3�����}�aPbd����}�'
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
133556
%%EOF
v19-intel-core-i7-3770-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20240805052125)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 124718
/Filter [/FlateDecode]
>>
stream
x������8���?O��`��E��1�,�Y��]��F�q9Q������cLR;Y������K�(^��x�O��c���[��_?���������������5�����m����q������W*��v~��V��yJ�������{�#��>��p��u���|�[_g^�&����/\��s�V^[q.���^�N.������k�	�����5�7�WI����W����	�����5��|�Ky�|�[�k����=���o�Op�Wo����u,��n+�c)��sGy���������}�U��,�PP�����}�(���z����Y���^ei�*����9,����_�,PP�k���������-���+���}��_e����Uf�z����.6.����/6.���_m61�Op��-�3�[����<����0;��"H�!�~�r$D~��������%D�3����	��� �	�d9"?�Q�L�����"��p��^�r+D~�� Y���x"��p�����t.���wA����/H��!���t1����!2�'��e�,7C����h���A.]
q��5���A���t7�}��W�x����}�\9�>�u�K�C���p�x����A.]q��=���A���t?�}��W�x ���}�����nx!"�
q��~�rDD~�������E��&�4����a?��-oD�������;�h�#�~�q4G����	�Ox$B�%�����I��O�h:%�~�)Z^��x%B�-�����K��_�h:&�~�1Z���x&B�5�����M��o�h:'�~�9Z���x'D�=!��D`�'���,��������B�\�pQ��"��>
�rR~�I�^���{)�M!�7E`�)���,G��������B�\�pU��"�����:9+��pVMo���{+B�]�w���W����k����qu"�#��������"��+D?��8Z�����+���"���
��_�	Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!��h�W@~�_X�
���+�������W~�_!����W��B���
������"�����Wv��������B��+?��,������_�E`�+�����s�v���������"��+D?��8Z�����+%o�N��R������+B�_�Eh�+B?��8������WM����+D��B�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"��
��WH~�_������+�_!�E`�+���,���������B����W��"���
��W~�_������+�_!�E`�+���,���������"�N�����G�_q������W�~�_q4�G���\��X�N��<*����9J�cM=�M�e�\�G����`�����M��G����l���:V��'�W!�eO��s�_VD_�&����`������'��#�_G}`#���/���	�|\^yi� ����M>n�y�`����W[!�'�5
��������XZ7�G��U�F�	0z��U���t5D�MS�����{#�}�\�n���{���M\�|Op������	.�6q��=�e�F.��'����E����������[}�\�j���{��N�\�xOp�����	.�4q��=�E�&.��'����Eo���������;}�\�f���{�{�[7�D�y�165�&_i��������-`�G�������].��#��*�w����1��x�����V7��3�2�o��g�������A7|Dvt�����Y�7��tM��6������A���3����� �g���_��M?34��#M�������M?����&`��D��O\t�Op����~�	�=�\St�Op����^�	.�=q�)>�E�'.��'����E�����>��t�����9=�#d�xNF�����>Af'2��G�������rY���>B��!'������9]�#dtuNFO��8Y�
<�#|������� �z���Ho�������A��G'�g���j��M?�	.�><Q?���|C�~��>>Q?���zC�~����j�w�:���]A?�.��P����W��M?�>�a��lc���ncT����m���t��SQ?�nc���6���cW�
��y��~f�@��WQ?���*v�����
����r�}�bG����O>��.���M>BF7�d������c�:�G����>������&��G�����rY?Z��|�����!��s2��'���Df��9�U�!�u�J}�#d�}NF��]���3>B>�+u���"H�����'���>bQ?�{��O��M?������3�~��E���t��E�:��/��3�z��E�z�7��g���[�36��Di�g���-�����X���Aw�#������@�!,�G�}�}��~�nCX�������|����}�4�3��6�E������~�+(��-u�����
����2zB'��|����[�'�s���[�&!�t2z�G�u���N�2:A'��|�|����E>2�s[�R��|����[� !�t2��G����������Z�w|���Odv����:j���2�>'�k|��n���3>B>�Q+u�����k��O���������e.���g��u����A���-�g�����3�����cY^e�t~��0�g���m��t�}��~}��
m���l����3���7��g�����3�~��~}��mQ?�����3�������~��~�n����A�!,�g�k��Z�����^����z�G��	����r[�o��|�|����M>�"��/�B/�����I>B���-������}K]�#dt�NF����m����2:@'�|������=>B����z�G���}K��dv~"�o|������!����z�G�m��������Z�_�������|����I�����/e�m��� ���>�y�5e�q_2I������
���w3����c{��lP��m�������P�:������6�*��M����Uf��c���B��Z����z��rY1���p��9��:�6\7xl++��m
������S?��CG\�����B�����:�gC������J�' ���	��Z������9�j������iv�z�g�����m����XSt�Z����0V��*:w�uE�N��������',�+���-"�k��L����������Qm��;����������pm��TT[t�J����!�-:1$\[t��j����]����+��E������pm���U[���������xm�}�Y[|_�pm���Y[|��pm�=�Y[|��pm���Y[|'�pm���Y[|��pm�n��-�M:\[�s2k�vN������=w���w�em��e��ED����5*��>A��������Z�[����9c&�)�W��L��;^�����<:����#�i_���7��S���Wl�M��\���>�R�Z��7p�J���qsR{|=4��e������|�2�N;p5q�m�&�o�q��B4�1��&������k���m`��?��M6��$����.��6��w��T"��2O}3����M�.��N
O������'���=���S�E<o�&�;���:N�w�������f�)�}�<~hle.�-_��wY=�����~�������nT�k%�������7�Re���{j�f�[Gb��6�������Q��(���~�M��!�r? �������"���7�z����������o��>�|�KU�����f��l�
��Q�r����r(n��M�C,mE��65���������t�Q��"���P������7�z��o��>�
���sz��w���|�SL��]����_���-#,<���W��q��H:~���������VI��a��I<\U�/������TE��Q�w��
��NN�D�I�$}����$�*��E�L�9�"}��O${J�WN=�D�)�$}����$j*��4�L��"}��O$YJ�WN,�D�	�$}����$H*��#�L���"}���O$7J�WN��t�(@_9\��������D��
�W����Q��|���;G'�����A?qx(9_8������|���O��c>�����|�9:�������C<����w����+Gv~���Nr�pB���9������8<���/������y����r��g����k~"�4M��r��g����d�k$��1��YI9fM�4Q��bE�I�dP��(�E��Y��Y4*��*},�J�Bv�X2,��X���i���m�,��
X�>����X�R,�bE,Lg��tV��t�Lg�L��L3S���)�M�"���hj:+`k:���������)V����l�DE,N�hr��9I��IR���f�H�S������X�"��)`{�$�����)�O��'I2@I�X�"�)`�j�?�P�"V�H4CE
��$�%)b��DST��-��h��f�X���9���=*�R�"��|�Y���Z�&QO1��We�&+b��%�T��M�,���
����M���M�kNh���I��M*V�&umRglRg�&uV�&�5�I����b�&+b�:�6��6��h�:+`��z!��bElR�d���I�E��Y��Y�I��I}�mR�"6�B�&%*b��D�T��MJ�lR�"6�H�IE
��Z��n]F�&�6�H��$��$ElR�h���II�MJR�&�6�H�T��h���IE�M*R�&%I6)I�T$��"lR_#H�T6C�&umRglR�d���I��������w%�t��mR�}�MJV�&%�mR�B6�X�I����b�&+b�je�lR�b6)Yn���I��M*V�&K6�X�T�Ve���I�r����M*�lR�"6�X�I����Z�+����MJ���d�lR�d���I��M*V�&��S��d�lR.7�M
T�&%I6)I�$�IA
��$�&%)b�ru�u!��$��$ElR��&)d��$����M
��� �lR�d���I�d]6)H!��$��$ElR��&)d��$����M����Ii3�lR�d���I�r����M*���'+`���a���mvNp�&�h���I��M*V�&umRglRg�&uV�&��h���I��M*V�&umRglRg�&uV�&��!h���I��M*V�&umRglRg�&uV�&��/h���I��M*V�&umRglRg�&uV�&�U�I�������6)Q�T$��"lR�d���IE�M*R�&�f%��eDlR�h���II�MJR�&�6�H��$��$ElR�h���I�1mR�"6�H�IE
��$�&%)b��D�T��M����&���I�E��Y�T,��bElRgi�X��{��"�q6@�����F������'b��C+���
J-Pr�'���i���	�,Op"v'9�:�	�����$'`or�dZ��DlMpdi��3���IN��$�&9���@��'b[�#���]I�Jr6%9�(�	���E��$8[�Y��4L���V$(�(� ��A��J�v���ii�#v#(�A	��F��h���
�EP��Qd)%b'�B+����
�i!%b�B���mhY�F�����*%`r�vZ���#� 9��	����'b�C+���
���h��@�CO3���H�A�"��H4E
��"�)`
j{}�� ��A�d��E�I(R�&�F�H�P��,$)b�$����e(MC���H4E
X�:��!I��$�$E,D�h"��E��(R�J���4I���<���"@K����lEpd,�����HN�^�ii�"#94�	����h'b5�C������Gp"�#94�	��<��#8������Gpd@�� ��	IN����&4"��G�H�hF��#I�!IR��I{��Y���E�>}������ub����Z�N��O'+�>],�O+�>],�O+�>]��h}:X���d��t�B�����t�"�����t�"��u�����Z�N��O'+�>],�O+�>],�O+�>]g	i}:Y���d��t�B�����t�"�����t�"��������Z��3��>���t��>����t�|}:H���$i}:I���<�)�����t��>����t�|}:H���$i}:I��� ��t�B��I��t�"��y�����Z�N����Y���O)�>�$�O')�>]��i}:m���t��>]���t�|}:Y���b��dE�iwl�'5���@:Mk��
�"���Z$���Y$���Y�S����Z �|-Y��@bi-�X��@bi-�X��@:�Nk��
�"���Z$���Y$���Y������Z �|-Y��@bi-�X��@bi-�X��@:@k��
��I�ZTh-IZDRd-H���Z �����Z ���n]Fh-IZDRd-H���Z �����Z �|-H��@$i-I��@<�Rk�@
�"Ik�H�����ZD���Y�S:��6Ch-�XZ$Vd-Y����Z ��L�"k�t���]�B	�
���j-Y��@d�Z �Bk���Z �"k���Z �"k�t����[D��"+�H,�+�H,�+�H'�j-Y��@d�Z �Bk���Z �"k���Z �"k�t.���ZD��"+�H,�+�H,�+�Hg�h-Y��@<�Wk��
�"Ik�H�����ZD���Y�s�����"Ik�H�����ZD���Y��)��$�")��gFk-H��@$i-I��@ �Z �Bk�H�Z �"k�t���f�Kk����"���Z$����I�f�O��)u��_M�sd�s�����4A�R^��2B�G[;I�R���{��x+�2@�
�<��������B�����Me���3I������e�tY&�N�d�T^y���R}+�2Bj���$��|��KH���d��_��HFH�U�, Y��S�~J]��W�k��C���v�d���C?������$���I������$�	���$#$k�'�2B�F{�(#$k�'�2B:�#Z���h;I2B�F{�(#$k�'�2B�F{�(#$k�'�2@B��$���I������$��h�J2�}x��D!����u�� -G��t!�WZzM����W2B��������T��e�������C�2��u�����Eb����SGX����u��F{���C�r��]�X��\K�X�+�N�t�ub(gQ���tw��C�<�u�-m��K2�SX�>I��5��D��r��O��5��D!Y�>I��5��D!�	�?]�|,k�'�:���|aQ�X��/,��-����:�B{>Y�!����:�*7��u�U���t�e������=_X���tw��C,k�u���}�X:����*7u�����!�9>�,,��Hx�
���+�X�!�~0vb�Q�uh�{��n���+�v�t�Un��C��Uo,����gQGX�vs�]�X�������Awb�1QeaQ�XW_����!�ys�]��t����:�����t����}aQ�X�>�,bY����C���6��:���}aQ�X�mp�u�e����}��}�8@bY����C�rdvbY����C,k�u���}��C�ts�]�X������}_X�!����:�:on���W�ts�]GX���]G��z�7u�������C�~~v���n���C�<&�.,�����]�X�����C��6��:4�e���rb�������u.,��c�gQ�X��wwa��6��:�J7��u���������}��t�u�|w�!�y��%j�m �u����}aQ�X��/,�����]�f{��x������Eb��x������Eb���h���1�m��+���]�X��/,�����Eb7��u���}��C�t��]�X��/,���'�I�X��wwb���a��yJ�Mm�]G���r��\�X��:�:�j��h�!�y�v�����e3u��_�:�Z:����h�!V��G���W���C����x��+���Eb���h�!V����C��6�:������:�*�}m'�C�������m��������C����sb�t��(�>�u�e������m<�u�u���]�f<[��Ly���}_X�!V��G���m<�u�e������n���C,k�u�����]�X�������x����dI�X��/,�k����C�v�K�:�:n�����:W�R�cz��8X%U��EQIFHX�$�	���D!aQ��(#$,�re��EQ"IFHX�$�	���D!aQ��(#$,�re��EQ���CFHX�$�	���D!aQ��(#$,�re��EQ"IFHX�$�	���D aw��U���||}�M@
D���	���p�-�8P6%*����@E8��@����C�`3q�"lE T������p�
�8P7! �*���@E8��@����`�q�n=@U������p���8P4�����\��$�	��D������~�	��D!aA��(#$,hre��MN��GX�4$���&�:��z������i��#,�gr�t���L�Eb����:��w�Y:��z������i��C�|����!�3Mu�-mk�E�'��8P6#*�
`+�P6"*��6�@E8��@�[������;L�!vpd����"a�'AFH�w@$�	�8	2D*��,"���L"a�'A�H�m�I�!_>��g�	;
8	2B��$��#�	�%Mu�����!�%Muh�:�w]�XX�4Y�!�~�uba]�dQ����.i�S�XX�4Y�!V�
����.i��C,�K�,�����%b����:�*7��u��uI�Eba]�dQ�X���v�2�n��P[Xo�����8	2D���`�	;8	24���a�	�
8	2D��Aa�	;
8	24��}| 2D�.N���:8,"a�'A�H�_�I�w�2DJ��-"��������� C$�*�$��\�n���������y� �_��h��C,�7�,�����]�fR��x����&�:����b�!�Mu�u���]���l��U�C�|/vba��dQ�XXo4Y�!�q��]GX\o�,�+�|r�!�Mu�����C���������+�P[X�d�P����"a/'A�H}F���H�8�d��]�"�uY2D�N���uY24Se[�]I�HyG���s�� C$��$��X=o��{�D"������_�� C�v��E"��-"���X��yB\G��9�#�B��h�J���:�����m��u�u���]�f	c��&Lba�dQ�X�6~�:����c�!�Muh^�v?vba�dQ�X�m��u��o>�����������Y�!�Mu���|r�!V���rb7��u���>�J�9���I�H�#�I�!R[��%C�sG��0��>�2D��N���:�,"�uY2D��N�����qd�	;8	2D��qd�����d�t����w�2D�>N��������:�K2D:V�[22�j����hc"��oW!�!#���� �D"e���$��"�}� C$?��/��FH����LP�8�|&T�sl�4�*T��mt^� C$?]�/��}��e��<&����%R���NV����".V����B.V���5O����QC,t�"%�$u�"e�$v�"�]%K�]%+R����q����_���>>�V���x����*�b���)�b���)�b�����WX��OT����OR����OR���d���dEJ�Xs������E��l����#���P�k�x�b%�,/�d�J<Y^��
�x����y��9��T����%�P��K<H����%�%+T���G��eO��Z����S�/-
? T���OV����/V����/V���5�f+R��R�'*R�IR�')R�IR�')R�U�T�U�"%^�y�2X��l��;���J��g����?R��q�8�R�������v�C�H�6���)�Fq�tP"��(��J�D���Sj%'R��m�����5�Q�����Q��!ya)T�IRq&)R�IR�&)R�I�3��R�#$j�"�kp"�lp"%�%IE�%)R�I��p�R�����b�}��j�[
���5�[�������-d��[����B�-d��%�
�����-@��[@���B�- �xH���,oa�
���5�w+�}���m�>�f�)��O���	V��$��O�B�'Y�}��>��g-m�y�!�{�@��O���)�}���'H!��%��O����I�<�d[N9�����-��J:lfI��kz�`��O���$+�}���'Y!��,�>�
y�`��	T����O�B�'H�}��>Y���d�
y�d��IV�����:�N]���.��_�:hM �+����)#�����3PH���RHw��*�u����e����
1e�����2B���$����[����G(g��!��WC����K�XW{���-a�f��:K:���`���_I(
�4'IFj2�lVe���laQGX��������=�:����J)[=��btb����u�u�[��:�:���r����m�:������2�|[�����[7�:�B�-ga�pO�|[�c�����_��#�������U���I�#������������u����?sa���9u(�?{���2q��Dqa!���9�#,��r�����o���%����[<u�v���KG<�|Y��s
�#��^��?��V�t��Fa������>}�������P��|[X��m9�:�B�-g:QGX��������2S@:�j��=���H_�rQ��$W���e]|�,�2@�����(#$��N�����)'�R[��C�1E*4��-���ia4T��5-���p0�&T���4�{����3�V�~9������Y�T�^g���}��C,���Ea�����7�U�u}���y�y^_fqPM{�C����W6T��r<�w���0��$��ci�K2d���4��2B��>��-���������7i����uP�#,��s�������=Kk����>�,�������X���	)I�}/!C�s��$#$�����=�gi��)��^K#h�O!d�D}��G)S��'���_g�_���QGX���~m{����>�+�~K��<�1���@�c��w����s]q,!q�������8r�{3���K�f�SP��^5�2b�G�{�PG<"���Ea�G���PGX���~)Ugp}�E}����}�|��:u�S �1f�{d@�JF��!q��w����8Z��#@FH+�U�)�{i��I�a��������g����O.�;��?�o���d9���������O��;�?5�o�q�����f�Sic!�mx1���6���j��(��$�co-����3������<�O��;��?��oM��d��39�S7����7�O�������`�����%�����N��y��[���Y�4���T����Z�N������Y�q�����8����6�<����*]�{�P ��?�M�G6�H�Rl����u�q�����h~]����r��
Q_�
!�����q��G�8�G!6���F|N���`��>���>g!��m��b~����P#n�.m
������g�7C�����b���z!�|�x�q������;~���+�9}[�v���D�����e��@��#Ey������ ��H~A�J+���;B:����Xt&�6�����(U�SnN��=�B�>���%i���v]����8`!F�x���725����[�����~����36���H���:����?�v�A[�a��Hy���H�����!�����_UBU,�l��T#K[����n`T+ E�������
x�K���z�����BE^.�*m���k�*c>
B�wZB�}������N?�/��j���V����K�*[T�������34��6g�l�k����]��S���Ny
�v������h��=�����{�c�x��Pe�,�^he�����1����>�!�M3�(l1�������FJ3n�W:�
[\e��Y4�P!����H��k{�s�t���������y�!v,S����YK����n�!�vm������������Q�Fo<b���@��k{�[�;�*%)��
�>�D�(W��m4��7:���o����M}LFH;��f�������������T�p��&�#�����!	��1}� t������UYJ����F��Q�N�
�s]3y7lp���6��������~m�qeEq4)�5d�K��	�kK�:C����v�����e[C��
�:�~�Y��Y���N����XCRg5���������nz���`��*�'y�4y��U���<Un��Q[�i9�g�O=Y����$
)���k^�s
�&�������VC��E|�#�{��dj��l��M����U|�����i[N6�T.0o�5S�/d�����_�,P�-6��`[�V�CH�f��_����?����������u��N
��Xva���(���#���kT<�}	I3�c�����Xaj�����C���S�#�v�Se��!���#^���J`H������V��������>���K�1#$�����q%`�����e`=�u������2
�gY���R��e������#�qOG6[��g�����B�<�����f��X��f�2�����d�Z����b��:�H�����]�0q~�Nc3���J����	��c���x�p5�Qa:��]�TCQ����-n�Tl�����X
w��Gn�%���m��>����6��3��N�=�y�����T��s��n�}{7Ow);�WWf�8��<�?G�	���^u=B�m�����l��-y�y]�����X�p�������>�al�����i�� \�x�$)���[�q+)
�R���g��^����6{\P�y����6�2�=�v3R`��M�N�8P����q\�Bx�#����i[C�������x��w�aN<����6��hx�:C�4i�F9�&[��}	�u��l���H�1����6S��t�VA�l�At�M���Z=Bb�m�u��I�4�=�*5K�O*#�����}�0�	�im�^[mpu��
_;3�U��u�^JS]�I��6���5ul@����������uI�������Z`���)A&�YS^����&�������P�X�����p2��^��T ��=3���v���g�e	������MI��n2�%>���Z�����q���m������eaUq�4�rT�:Z�[�T��<�8�S�Yq|������3��sZ
�l�<UC/���#,�����\lu	����hv�P����z8���x�}	���}�Uc1����	L�+�4�}Mm�O�v��K�3������w�3w�5/h3���������Ei�����ER��
��)���3���s�1�^��'���qf���u��ay����1�^�g�9=]US�Y�*��,[X�D�I_���1k}�a�l�����P$L^�z����[q��l�y	�D�d{6���]b������KtoL,�H��Y$�=K^�,%�������m	��T�T�����>*��T{6E]���]2y��2 ��.
�)����#�tH�GsV$�8��MV��!_��x�(MQna6`���D��}[�gFj�jnVg������,��27������9{�aa'r�����h��D��������Re|��T����2��	O�������1�b����L��[���S�x�Z=�������|l�+����+���������-a���}�E0���\����U���SV���|�J�e�7f�h��X�pS�K���"BiF�L��-��Rx�03lsQ�;-	U�-l�k�UE�5"��d�z�ecM2w�x��|i
b��������*�5F������c���V�_e��pMi;��/S6��3�Vgy<�����8�Qa,d��g���|45��-���=�%�t�&A�V��<���f�Q�{X�YJ,��a�w�����W�|���5�_<F}����:�������=���y�v�'&
��E�'���O�}��$S(�(���Q1P�iy;�F���
A�?�Lp���(�h3Nu��Wh��%�d^�����n�AK�Od�����a�7��!q���XkL�[r�n>��W�.��cm��H�A�M-�e�%�Or��'���m��Z�+,���/��������1�V�0K�G�d07�X�'[�KN���O2�����������5n�4�}�o;����U,��fI�O+-{<j�-�tcqF[Q�k��;�7}%/}�����	�S"yW��l>�`���<�NO��i��'r_��d��w�C,>�H>��H-��Ix���2�acO�j��|u@��Pfv@��rk
�m^�������H�*]�r�=S����Jw
�u���N�t�j���8�T�ND�<���i����/a]��s���%u@S�{��O��8+c!+��1;��|�a�� ,I*y�)'�Z�=l�������N-}�R-l�KX/���Y](��7"���t�%[�r`91]X���5+�u@�k��J��5��o�:��yv@�?�8�k�C�{h����l^*�"�Ho�H���Vcb����]2)���f��rhTo�
80�I'�PB+ �jju���)�-l?��������<3=�+K+,N�d�W��%hjd�7��r�����C������N{���,��j�s�q�Eaj=��4Ga�,��m	�����a�H�-���)O<~�h1��0�|�t"�+��t"�ys"��6�ys"���[��En�}�������,n����9��X��r�xj����b9nN��2��N���D�;�o,�����)��L�D������5�\��q��D�cq"�qs"G���wm��ja�5���������W|ju�z$t�������Y$,����C���
y(�S���+��}�Y�@��A"��Y��rZ������%�%���K�����/�(w�0
+HS^�p��_M�dS`���} ����$_�3~��J����"�[�u{�5,�5:�����:��$�8g;������[X7�_����K�u<>/a|����ms ;���w��S(.�������u�����%*�
;���L�+#q�^o����i����T(���}�.��<���QV{���Q��k#��y�i�����(.�����&*�����S�L�jx�~y�3�G�,��l6�&������\6/{������nImK&��$A*4�T L�2���_��Gnu}~�z�!��a|��-[]���b[3zH=�S)��� l��{��m�n������uM3�[��$d3x5������S��x�;j���3��Z��0����������;������Ww:���!y��BEi2��19Bu�)�\��y�C�%���A���Q�7tLB:����]���e�#+�3�+�K����2�����-r+�������OK'��������~�x�UF��?~�������?��G������o������}�������������?����������/����\������������?����v�����_�~����|����������
���������}?�<nT���|������+���������{�����~=���{e��3�����~���/���7�O����/�^��~����o�oW,��]��������j����k���������������U�Vx���:��d��P&��6�$,gl��b_�*g���	1���L2��+��)w���@�>��27�aa �#V�Q��K��Z���f�"�1�:?&��`<"L��%�xl(�g���
%��B���/�����v
P��`����i����F<�6�ga��q��7�f>����qS�kX���E��f\�0���n�KXX�KXf�6�%�w��Q��)����"����"�����K�����m+�4�&��2���%�������"�/�.�Z^d����b]%�3�9:?9�����4!`�Ml�&�53���O$��d�B��������Jea;����mv>���3���������"7E����R�&���ZXB��Z��������>��`N��a�~'+?��x���WQ�T���&6�4"[q2�����#IX��
c�D�0��mV���yD��Gh��;�s�T��y�{�=��m!��T�4;����0���Li�U��k�rU�bX��'�-�k������<<������Q�;�`T��w8�	F���z�-\����6�J����I[�46��F���&�PV��2��k[��S^�XR�
�j���C��vaF
���\���S���y�j������Z�|?c'ub��n�~����R�N��%�0���MWa��wNn�'��q�0�����04��sB/ha�����[���z:���������W,�Z�%V��������������X���F������0�����9avN��������c8kJ��-�=m6X5�L�#>���Os�`�f��5��.1���������h4�X
�na������o�p*a��\$l�&+�fS;kn�"�
	Ly�����h�R���gx��p2E�Zf���h��������t5��l������`6f_���U����)9�������j��6����&w��~,�o���u���%�������&�[�����z��*T���;O�������^����
��0����E���C�&��������MLd�Z8c���%B��M��zVm��t��Z��cif�
�����C�@��Z�(w�b�������w�9]���{��6D�����$.�N��o>s����i���b����/��E�9�\7��,ar^Oy��L��=��&�m�'�_���4c��lO����gUCX��ea�k�M�'����z~L��a*�.�����/����:�$�y	K�1?�t_�w��0�\.S6	z���7����9-izx60-izx�����4=���0����^+�1�l��4u�����U�>�����x�X�����i�iz�d���/1-���.oX�%M]*MsZ�-�4M>�rk�b3�6�t�����?��Y��rz�!����fo�b3�r���GTND�|���oSZ�7�����Mi�g�!��8vH��w��*�Y���f&���T5�V�06QS�/�If}����]�VDY?�e���A7�b�q%�6�����v���r����M�)�5��i��33��4�fu3�%���b	��4��/a�NS����Q���akK��,�lK������-�������4HQ��<%v���2W�D�S�	_�>^�,�<���?8��#���}t������f��[)Pw�b���}������8WX�B�F+sT3�����*x2�,�t���$W�d5��l*���N1�l�d�\na�-��^�Jr�h���D�>���s��d�c����������%�a���0���2�fS.�D_�q���6"���������KmG��So����"�-a�,�UcV�%�[X��g3����x?g&W~Iv[���>f���r�����n|?5��C��A���,�2�L��Ed��K���.U��%�&��-�b���i�����E��K��>n��6GK������5����)����H{i����%��+������&�.����.e����N:P����wc��I[u��k,<��R��
�P����ER6�@�6!��h��v:��12��R�F�m�i{��
\�����J�j��*�\Y��:������|j����5���6'�|���'���3g�9s�5gl/$�wI�U�Rr���x��7(�s���Z��Yn6���:�3v�1O�~�8p�%��~G�a�F���kn=�the��m15��L;�����`�h��nV���~5���O�V�^s������TY\��-��t���8�&|[*dk#T��~L�s"'��Da)6�&L\�����T���Q�'a�g�y����jiN���nM�!)����3���]�rt�o!����X�Dd��&���94c�D�$��]��(���z7W��X�1@������kK�,�)k��'gt��o6�_�[H]B��Y�F���uF���XFj�b�\����wV�����X��X���a]�����������T����!��!��	�li
�k�Z������|��MB36g����t*�/��E^�K���nW������|��s�U[�2��V|w�C4�Ne�dfW�q�"G�����R������N�A���l;+�E��1v�v��v�G�I��t��N
W�3$�W���=,h]�[���f�[��B�������Oo:� XD6D��k����5R���q]�FI����x�~Le[_�����leHA�V�����Y��}�G��������u[������<c����v��3��3�����N}_��B�N�n�����N;G��*��!��9^:Cl��]V���>;�uZz S?���N;ZWcX�{[�{�o������U��w*�������u4�������[��K>q��S�����ME�Q�����lU+vd���
���Eu�-n�8�K�o�a�:uJ�%V��	l��B�R����#
-/!$��6d�h���B���v�
#��x�����)������C���%��r�r�����6���!��cSf��c��mS���X{�#jV<GH)3u������h���FA��-�nXA�*7 |V�y�6�5���Ac�n��C&]��$�2������C}j����������XU_B�-�,���]�>�:-!�%=Kb�M��#������x,6�1�+-3O��=�ea�!q�GW#
KC��N�mx>�,�V�M
����}����7�z�R,uhI��*��k�R�[��R������\}���z���koQ�S%5��6?�v��MB�����q�����/�Z���i����Y�W��,z[5�L�Oc}���9�������o���o���o��������l�\����v��}���iK��SN��S���RK�
�H�
��t��~K�
�{�n���
�-u��k�~�[�~��|��[�%_7���uC����V�J.�
������uC9�uC��\�/�����{����?�X_7\���z�������z����K�n�������^���������{��_7�m�n����a�e�n������u�� �
W��������G��~i�
��v������������uC�����~���~������o��}���+\�}�p��u����}�p\������n8~;������s;�����~�o�u������8��_���������~^7\�x�p��u�� ���H_����~��w��~�n���/�
�n�n� ��:��_�~=~=|��o���%�|����Z;p%�u�����|������������������������
X��uX��E��Z���m��������oW�������
���z,��z
������\��u����d]MV|`�x=����@�ED�����+����xm��	�DC"1��Hd$�%�7��`� ��]�:d#���Y�l���M����




K"��QW]ciou{��F������J�
����e������7UKVQTWT]����������h��q���4&hX����A�c
���,y��
M�14ih���C��&�J�oj�P��Dj�)V6�hp���!f��&��k4�l����yGS�f]�u�BK~z��0�������>��q�,������w|B9�����������+�w�p��1��d��
kc�v�i��c1cQ�,�".��9�
�I��!�!bR�6�7�e�u|���wSV<l|:��|�G���
���zN�-��g�[�N�d�.���%������0)Z��]����?v|�;m�����������w������?F��i0L������UI�1zyvXaX�9$���#Z�0��Y��SK�����k(/��}�la�(��|+���R��&�^��R�<$������<��m�i�FQ�-�Y)�� ���U>m~�R��2��y�����,y�n����Z�(�������aL0:��b|$	;�v��;Q\��c�v�y�R�����u��X���T?6����</��2a�������������>�I��o�`I���=��9��.����qAf\���������k��#	��v�C�%mVb�(�'�y����0l����_����%������=�SuXj4�Pm�l���;f�#	Odj�q����K���#3[�e�����j��e��e���'��NiG���*]�L��.x!�3�rv��=KS�KMry9���������f�fv����������7k�fkkO�����r|��	����>��"��(��C*�����l��)�p�������j�>T���e_�>�T�����l���)�9J���
����[%��S��_���������c_�l��Si~��h���#�M���['��)�d���yV��+�������DS[���J��X���C���@g�1..j��m��KD��n5��K�gb��=�]�%���.����z��L��
�L3����IH�Y/�|��E��������3��m�V�.a��^�����<	��"�������e�w�h��E���>�#^_�Ab<��aY�:�>���Y
������m����7�u|�=;{��oI������T�����.Q��jo:���E^*����T��?*V�z*T�+T��/�����@��2�(r�X����^**�����+j�`e��.�u�3�p_^*�����f�)�2�e�	�V���hw����o����+����pO^\�z���Se���=*���PQ�P��W�3KX���P������,�D������^r
�#��9�-��U���t����4;w����;$;w����;$;�����c�?�(���~������v":�j���Cx��c��]";�j_\��W~~a��a{�}��;�*igI��Y���8�c���u,�`��4�e�;��������6��<1S�3��U���':wK]��{�%Z�<���;^��t�Q������������5LFb�^�������e��0t����������3��%��[�yS��g�������'�@M��������0-�>f��a9/��s���O�����i�%L��-��lQ�Y��:������;�D�����sgXV�v��?�����s�#��W����;��s��jk����������\���b���)L�	
G�h��z����;/.r���B�}��1��</).u
���00�N6��}6�H��Z���G+y	�Y�v�����[�nFH-K��*�����"1��h���o��{�|8�[CpK���76.��v.ag�O	���;gYE���0���N��+u����a�~�o�mi���}�F��a�r����(�����j�-hg���`X����'�����*1����?!����N8�6�r�T%����(���n�R�(�~#X���)��A3�%�(K-S�p��Fx��]5[�������q����=�m�[��;�/~Dn���j���.�'�t[Dn3��'��.�psd�%�1���p�'N����f���;�n��v���%�5������&�7��b��eZ�����q�������qBq��v�y���z��i����L��Kq>��F|�[[x�'�/��{Y~X�����d�C�z��y�2�T��c����l����)�v��L�f?�Z��:��?�m����o�_Nl
��\t�`;�S���g�Z�T<��� a���G�������`#�s4X?]������
�EmiD�0���-.����;/Y�u�.yxp[�p��g���I�/�T)�.]��$�n��r���r���~%��2�r���{�������rYDi���h��:�Z���;&��U\�'R�'���s�������`�_��H��.�������W�r�zm��%[3���8�s����%���t�4�}�c���Q�
�U��K�����"5�&F���s����-��R[(n1pi�����������5�@�_=��0'8Y�X�S��\���2���!v�}:6�:f��T:/�eN�{��c!�����G��=5/����7IW�OL<��	���GT��z���rz���fYW��4�aY�X$t����Bc��0����I6�t"'��K9@G�c8�N0Ox��#���n�Gc�
��>���(t�de"�{�Wq)�py�%��o�L�T��J�X�;�8.���{���DL�e���/����%}�����6��~N5V������I9v���M�_,�5;�n��d�uBt\���`\�#_�7;h�R���Du��E�v������1C�"�x�`�*.5V���m�o� �1my���R�i��G
�.�\�!��K2�_������78,�Ld.�[��,�����.��<1q��"�����W�?��a�g��MqB���Oc^�|��t��iHv4c���ae@Ct�f�!EK��i��'��w����6[��^���K\{�%���w'����c��0�p��O���Pbh�=��R�������R������4v �E''��8��E(T�D&��&&A�l��T���i���c�+,#:p
Kz�>���X��k[C��~,
�{
�:�EY���G�C���3BZ�<l10���J��J���#�����HK����]S9�v$���f=
g��dL��"c0�AY�I
��2����X}�,C�E/T�Lv7c@��q��
�#c����������f���mf�1�
�F�m&�����b��w����'V1�k:c�����"�E��vq`*2>��
��,�E��l��_�Km(J����8f�����q�j���tG��C��z������6Cr�U��{7k'�3�e{�w�����K���s�gn�}{�/��J���3b+�vT��[�^��-�������������N�GQ�����4�����'�|L���;�`k�l}F�]@������^��y�+��-����H��������K��"q��6z9�4�{�}���!N\��&���KX�^��{?>�����w\��^��F~y���fD���������~l�����im�T��>��{;8$���v$�����r[��N�}Cb:<q��6�m�r��
���������v�Yew�0�V\)���/~����y6w
���0��7.�a���'�W;���x��(����_
�-�;ZD����K\��nB9i��jX���2��f�������I��-Z-��=�����u����6�����6�S�w��_���T���I`5e����<�za�L���j��~!�f��j����\f,r_�W�����X�4B�L�5�c���q+�?�����"����G�Tn��,�f�)�(�$9�^����2��'^(��A!{�^�Ur5�X;,���:h*��3������/
���"�]����=��"���S�46�?��5m=��/6�
t�A����T�i���)�s,!�9�m
���7Rq�'��A�(�Y�>C����/
g���#O�ny2����?L��{��Y��Y�>T����i��<������B,>�R�������zI��I���	�?����V�&6�XW���:��e�,�~���6���w�������l��3�T<�[��#y����?�?9���l���D5y����f,P��|�����!lrb?��`<�c��Mih�M5f���p�3�������r<[�c���zhs�t�����=�_�|����Rf+����^�l�mj(i�����U�����n!gr���9��nUR6��eh��x.��l��<c���[�)��a'����)b�^���!4]u��Fx���k-�:��1�l��,�m�]0��rm!i�!������-�����i2�aKf�j*�H�jy��3�P����dU�3�^e>��7��S��y+WY�N�yq����ni�� �l'����T{�YJ��'
A~o,���6;t��X#p`��h�~J��5y����6�n!KE;����a���d��a��M��wK�T�n���o��:�3�G�r�k���P�-�.����9Y��[8���-���:�p����d�v��&�l���6[��8��"���Rf��{��4
s�v�0�n!�#�s�c�[���������C���S&�_+�����o��M���(m����g�����3����(Oq�n����.��-}��������|�����1���P�72e���X�}l��m����z/�aL�;�.FV���6�������e���Y�ledy�v�(��w��K���m?�<mgW����~���6�qc����=d����,�61��M�}M�?�a��wW�����q;�"p&���.�}����K�!��(���H���GY�:~}�3�q���z/��h�Vw��l_i}�p����2�����6K��z/�)Ce39��d��RU�L_k<������05=����O����B�7]:�R�J���B�L�,5��v��M����cX�f�z+CG|��=Bi��Vm���m.����9
C�6�=�_�[�N�4|CPx����
��7��[H�!(V����L�u�����o��I��J��W����z���J���Pi�#��l�:��N��3-O14�}v:����9��C����#������>`��V�V:{��'�W��w��o��1g���X�ppd�����1#���Y���m�T>��*GF�J���[�1����R��_0E��|��l�R��*��������q�b����*����L����r��sp�����	���MC��`k����������J�m��kb�"�J�Uh=�������<��!�O�;4����r��T9��
z��T������r��y��h��*2�w�����1��r�6A5<l��yM���?�y������c���K>�`O���J�S����_���1��\��rL��?5b�g�{c)����x�&_����6��8���6�c��>�v�}����T!>�h����A���V�������W+���$���=�3������
]w}�8R���*C�F���SWWf�{��������
!����iL���w����>��1�WC�V���!hO���'��o��]��~]n!����:�*$S��������}h��|�$����1����*�
��A#p���6KE�!�rOe?_Pb�7��r�i��[uW����e�|��-�ih���>KS�%��t�V&N�N[J>�*�l����l1����������Yv�0U;����jzjkkD��"}K*�-��G�%i1y1F���`�B���-��W�*3Y�����VK����fIg�9�����lx`t#�7%"�#+�n����v����4VJ�ji�-1��V������6Z�[V}�O�"U��#�o�������x�L��oJ���`�����3���$
�H�'��X�T�<H�a�-����!����l�4�������=��]��A&,^�oY��=�����w�r)�[�F��
���c?c��X<sR�����}1��B�I-6�g�JaO��iO���9���m����{CL�[��_�l	8��v���v�?��������������(f,����lI���^����	�/6�f��}q��|�67[�^��^6g���6,\���mDl���sW�u����2�x��hdNe�.e��b#�
w9�@Il��k|���� e{�������n|*�OOe 7�"g.��p2���C��%���6f�!c�m���f����/8�s��f�
�>x��IJq�_6���ae�#^p/���laJ�p �}g@������Ro!P�o�6=i��F���3~]���g�������6��:��v^[H�3$����d�:z;\7~��*|s(�.�k���(�Q�3���v�����)d��������l��
��d*�����������Q�������k~�=�m���>/q���I�����
H$|����;B�R7������xl����C� 1/%v8:J�_o�i�-��(k<F��8x,8����J�2���{�1����-�����o���4aH�N��l�hS�"U����6�og�#��B\�%�!HC<����������WP;���B1��
�6����H�)�����+jW����y�7=�\�s\��W���� ���P�������'�r�jwaZ��[	Ij��%��ZI���.yI�����7�x�����#�Xe*N���m^w����b�Te���P�@�C��Y����y���-5=b����hn�3�wfP�s�L����B�},�F�x;(B��`��>���k{�����6�P08�;��B��x~|��M�w�����!YHj�@��93n�1C�$e�7*���-4�)f5z������a1�B���6��|��s&�|�F��ar��;^�`b���t���6d�
�,[���J��T�G�<��T'�Q��uR*��e����
�a����lk�6Cv����k,c�K�i��>d*�j��-��{���(���1k;C:��p�&���Y_r��b��+�,$�^v�ly����!4�]���v��6���w�]u'��m�Cg[�t�l]l�
W���4r��d�]�}1l����c}\�e�Q���u�WJ?��8�Zpf'f-�wo
��r�cCG���i�����s��}
9Y�[e��mH�MLE*/�-V\yh9�)�#kL�	*hr5ue��c�mQQ�E�/���q�E��
2������C��a6�</����P�ircd�l��8���q2&����hj
{���.W���?n6M]��g�����Vn���i|���z���Rgq?�i���RpOV��}
)����v���5���.m
�w����D{��|N�-���n�����+�s�(���I�9b����}I�9��>O�G�<��?�J�ZI[���� B���,Ke��!� A������Q��w%_������f���EY��Fq3d9L���s��/����*�wB���Z�x�+��������0�3�Y�<�W�x�8Z�"�	�t5�r�vk�����x��,�#kq({����N�0<�#x�H�iqdI���=[�:�����@9:�j�����(��4Pm���(G��s�Q��Su�K�f
��n��Dh����Ts�������P�b���]�9H�Y3�f���|��;���S����>�:5
!��,�
eH����Y�Z�Z0��2[�P�&�,�X����L-��V�P-An�������wBY9���:#��G���Z0��i�_�A���G�m�%����|Xtr�e����@�1
&1���
��8�S�x�Pa�xF���Z88�"fw����������4�%��yZ�1��1���>P9���YK|���,��b�OW����A����>�h��Iwa8{�4���B��s���ij���(��G�R�%E(�/������y��l�����'jV����yRF�
5*�r��>]
���&�(���������f�wJ���2�ib�'ok��f;.��Iz�����m�5�E.���e����M�V�#����H*`@k��z�#���.y`9������$���)���^���_���K6*[o���u�U�%�j����;��~:@�@{���O0	�L�8(�����`$\�t�z��a���qy�F}9��of\��@��!�l�J���g��"cg�~��B����#(�1��K�C�|S���H'{�0������Gw8��6��c��=	~:8��s���������~"�^J�g�4�������d��s������
��/�,�2z	�00jP���G��<2�x|,�G��������P?��l�L�QE�������+�D4�������~���;~�k'`��<�b6�28�.��MUw��Qk��S����|)��8%���Ci��P��tfU/HrzoZ2�w�8kf����8X�+;;t�q��J����M��g�OG<���E<b-@���=���2[�`:��kE�}f�z�d��qf�����'���q!s�������i:������	��zi��2V8��G��e�i�z�|I��;��,�������D>A���u��/�����r>�m�_h�|�������`6
���#O�������:7O�4W����g�q�#Ms���I&=�������m�Xe
����i����Th���G��B�D�����(�@��B��9�4�d�=���U2��V����S�/��o�~�]W�^^�/6~���`j��`�O=�������g9M8aU���-M>�K�����}�I�u@��r">���	�y�\-�z��xS�����7���k9z;dJ�8����:��l�9�XV�����N��-#����e���@������g������
��|4�,P���a~:0��Vu���Gs�5BI[�����~�}F�/h7:�|���i�g2�1'���e����%��+Cbx�9y��,:}m���N�W@q��J�W����.!,��������\��G��#1$nXC���c��W���|L��W���g3zhu�}L�e��q��4��\J��SN����{��w�"�[���=_��]Z`v+,���V�C��?i��_>������w��EV���o�o��*��?kzl�w
���X�����w�[�dg�1�.��������������'��lWeV`v��%�Zfd�3�/���{1��3f#��)��9�n~`�f9�{������Z�S�
�@�uQ� ���A��>3�K�~����9�p��V�E>���z�)�+�c���$��������3|�/O��w��<�l-���~,O<,�������VtZ����?�?M����o
���9/\����2���Ja�b��z��0#$3�33V37#�3:#��zF�g�F0h�� �'d����P�+��7���C���O���#�\� �h���t����m���A�1��Ja�b��m#�6�p#$7�s[������x[@o�f�o�FpG`p	�1O>���V!�n����B�#<9C�3n9��#�9��#��=GtCG`tI���'|��R�����p���0���������Sqg@wwG�w}Gx���k����OX#�<��������������r{@{n�@�<[�s��{<<ng�q`=�,����Au�����(,�����U�UB�PUT�<C�9`���`,���?NSx����\h:4#���M�f�}H (�	���!��A�(�KQ�+Eb��xC�!��G!\9�(P(�	�eJ���=���ZRE��P]Sc�4����	�=�q0C�Ac�#��c����%7Q0W0]0c0i0of�`�hn�8�P�h���1�a�������!�U��6s
�M3��S��.����/�m@\��GJ���j�!��A}02{��]d;=3v�3���K��f2RV�����7��Z..V��(�JP,����d#z������>C�n��3����)����Q={����g���j<�;���}�k���N���c�i�nZ��!J7Me+L�N�j�.v
������V��>�3m,��c��q�������L|����!���-
�y�H��L���1��P;P���"B����r������%-��t��[YW��Q�"�j� ��$[x./J�P.�[7��A���)���������x}�qXY�h�T8_��2|6���R,�T�mc�j��DJ�7���#���w�J�.�e%��r��}(F�F�J!+���A���z�%Ri�Z�(x;LO�g/(6�	�5��a�����/�4]+����E���?��kL�j�S�~)���S�kD��t7���6l��@��xQzH����;1�e�qw�L;[+c�����Q�{�$Uv�0�=�3�=)� 0�#P>G	f�B2z��
���N,�@{�O��f�z�R�s�.DR�@��iCe��0)���"��4?��.Z�������!�X�Q��^K�ma>�Kip���ks�<S��gV������E�*�-"#�-�30�Sza�������M�@z�O��1����?����l���\;�.���zc����"������I���/%O6�oF����k��
���v�Z9��X��[��X��^�_�M���T�8�����[4Q��U��R��.�������I�vOFj�'�~d��{%n�A�����2������RJ�i��6"V�������-�3
8��A�Z6w��v*no��������A���h]�
7G�w����LD���� -6���bo*������a�[�7��w���� L���wJmW����wC����o?�l�Tg��Y��g�`7F�W���%��qE��|)���0�������:�;p�7#��`W�S/�#u���q7�vk��Q�)�^R�E��RWL��[5�z�`7Z�R/E\���X77�*��
�E���6��f������`[�x
��
-e@i�C��
e`P�v[���|�o1z�E������}+R�s%D�j {'j0}^�������y�\�`7���n;z���`�~^dGN������:X��)@�y����:X/�u�,��Ww�qmxK���/����x��Es�����)#�a�zh;�e/-O5��Yk.u=-k�n����� zn9R�T������n����Y]-)��zcYW��S�p���}F&�+���p�6���<������y��5M/����)�\1��v/��F�2.�On-R�9{s���Zc}g_k����e�����6���y����h����6�u��\���o�7����3��[(��5�r�w4����4 +��1
�_��2�N�HN����xN=R0���;�f���w�g���R^|��M��N��h�{y�a
~���j���5c|������Y�B�2�#�K���`s,�@�]�P}0����,�f�m j�2�B�� ��;�0QA�%t*�sJZ�h �[�h����km*w�g��@��|��#�}��Od���*j
Ik��9�]}��u��N����>4>�v�
lF2u�mM��%l�9-�
�3��S��Aga��r���.eq��atY��d�]r���e�I�������K�aY4���(����'8
u`�F�8�Pd!.��i���OK/Y|���/;z���g��x,i�d������]����������h��E,nS�h�Z���|/Zc�:^�b��;
]��\�Z�A��=��e���V�4�i��+���x������{��L�r.k�U��p�ez:��<yZ���O(_�q�-a���dk�s0o�����~��db����}�^��)�Nx�,� v�ia<�x�\�7z���K\���x�t��2WrW�O���<)y����1_:y�l)��q��+��JhG���x�I<�]�q"z�73c)����_<��������'
�Z��1�� ����S�g����',�hUk���.���4B�j�����������;,i��i�@l>�-�Yk�J�LBs(���_�
h�������"�@���;�Md�E���\���H7,������3p���B6��-���H��ti�<	�=�"+E��f��@��@[+����
��S���<a�>���H^ND�:�/n���9H~d`�U`��4�P���F~N��S/������@���b�����K��^@u[�Yu��[5�3��X,OV�8�*v��S�DR$����kdE��^������;���F����e�f
�b�8�Lk���T>��-;�8	����`Y���-bon/���Y���_��e�,j�X/��49���>����ba��V�x��
��i�_��X�m:����n��w��y8���Ys�FD���F=����A�r��#����n��<��5�h���
-�i��1�,����T�F=�����)�bW�fF����.%�i
���������v�h����0���`��W+�]e���WA���W7:���������6��D��e��w�(��^�P��9�7�N��&��f�/+4���� ��-/���c��2�@2C�J%��Y	>���]>c;�:^��U�6?_����"�����_b�pD��W[��`�V�g9����������*^5�ve!����9��%�s]Sp1��-[H���_��_��/���i�UV�3jW�.h�fno�M�_
�ec�vy4�W��s�w����� t��!�D�3�'�c��B���@A�����X��������R9/m�k,m^����
��i}��cUM���@�X�������)1;4����2�4��l�t
��l{�W�����t��n9{��3d���J��M+"��;�5�����J����nkGA4���v�I��"�X���Vr,�
�Th���	���Ai���m��)�N���+���p[���F[�����Ha�m����=H���;W1����h}�t�����=����h,�N[��:�8���2]C6O���
`����e�<�V���f{�������JE��{P���^���e���T�Yw��w��EA'�*�rz��u��}��:#
e������
�[��b�h{�<;�.!�@k�F���d��L���e��,X
�Rm2���.�l�a�9��`�
�aX���^�2E��v.�j
l��K�:�F��R�#M�I�i���VJ��F�$;����FM� �5��Z�/���U�qVF.�!�����w����;���.���E�|^�V��3������*��c��;����@�Y�g�	�6��������@k�Ed�{�����w��b�}���-�*|�l�22���kMX��Oy��r)��Ta�w��;mVa������9�5�����?�-)���������A�����������
�+���vj�
�rR9v�PZAD5�������j��*]y���z�_��.p{��j����PN���+<�C���(ZU�Z��t
U����n������V��
md�����
�R�&����������i9�n��C��U7�d!��9�Rd*������e�E�]�7Kw��k���I��9�=�	��������78G�g�m]��L����g+��S�F��'hA���&������87r{K.!_��q9���E3��I^8��8:q�<���9h�&���g���j�/5��,M��t��i�V�n����u��k�^���^�"T���bZ���{���jnrS�z-�a���9��l��D���,sje��H�A9&�����#�	[��9��G��]�R�!-����6�5T�X��	G<"5�7uI5�w^��tU�p~Q�U�S'�BQ�����H�-���s�����z���&P����eO
��)����������������3�4�sZB����$�(9���(�K���FY���R����M=�����U����eJeb��&�)1��@�v���i����#>�5U�����]�&�jo�Q3�����*��QH��^���{�a_Z.������rp�p���	��;^�����������������A5#8�UT�pj���E�/*'mU�,l|g��V��-}F��8���]�]���^a^d�2/u�,>�Z},��/q%���,7�h�;����4I��-��zTHdt�(9v�j�1����!��.o\|�m��������N���D��Z��'���6�O�l.� lG���W��+��r��I��w�tP�&v�P�(|gJ�d�s��R������4Q9g���nw�1���)����L�
o���Wf-��dZ�fMrv5	�!��2��H��[f����l�K�!�N��'��O����A�!R�;�x�1�gQ�9c@�qe���T���I��E�9V�w2e(���;�T}���/����Pb{�JC��F_��2#y��s@f������������/a�wA�/>�������.w_A��r/U��r���]�>_I��������v�n������X����Ja�,��]��FIj	�]�>�������*����z����J�2o����m����sZO;4�h_"o�������<T�����6�;6P������;��.-,.�w��N�r��������2����������{�wy�?��W��������t�k�]�������,������9��y�Ry��f��7�����w�=��v�M�9�2�'�#��o�Ui��9���n��5s�SK%��������R�I�tqm��
�"u�U~�s�<4M�F+R_3g�3��rzS1s�����9�/���me
�����w��s���s��
np�5s�>i�(�AM1������q��}�r���VO�g�9����P�a��PD���.q�'r������g�W�He��Jf�Qg�9���N����]m�����E-tf�/����D��s�s���x�T��K������:����u�A*���E����dq��W*U�@
9�D�!`�18�T���s�R+�S�*������������#W�[p��r�A�d"�J5������M��?��M="S��}�x�UR'�]�L�Y�o���������P�����~�+��.�5�>���:|���&#+&n�z]��y�����������9G}9!l�Gp�r����4u|W�*���j�RmP�Q''�x��ooZ??0A-��
�g�|�F3&���R5m�����G!�-�}��u��jc�R0T��\$uwo���#�����Ae���F����z����K��`�t��������)���T��(�V?zq'1Ki�xv��A�n'����t�Z�b�Ai�@rzD�����.���Tq�=3�/������+���I��G\�.�z�Aq�X��Q�{L����,e����c���},�Cnt�
����L%O;"�9��z�$n"g.�-���������S����-�|��d��JOU��q�v��r�4.���p[�f���W�����D��G�VC�d����f������k������h!N27��%�{����k���?pN��=0�}���,��(~F�U����tF
�������Y8/�7������y/�Kp��_^�f���OO�����.Y�[X�p�SVs�j^_��+}�����������[+���3^�/�q<��*��~�g+�F��t�jnO�/_���b��*��������S��%�6�j�<z�5n�;����k}B��K��qaO��#�����@�G�����Q�`@4�P���XC�^8�W�����S7�	R
���8l������
���K@X6m��:*i��{oo+��`:c!n#������4�{�9�����B�n�94#����!`�Y%��0����|��N:l�.h�� Dl����Ds��S�������^O-���]e����g�Av��
b���[�7vs�0v�����~�&���W���?��6��ex�O�M'�=������-�:T����P*�ie��H�R����MG@��m��l�Cn��j1g�H�S�z�e�������A�w�/_l�sp�w�����c/n��VZ���Z��N:5�H%���pl���(� �Dn�����9O��[�����vH|�Ek�d�B�����%elAtF3����ew0���+�/���X$?����CE��e���C��[V��U����m��k�mTq��x7.5j��]T�����u>��UTG<�C��J���M�b
�	����FLk}��"��c+��U5�1��u�U7���]_P��m�^lG���6�Bp����KMy�������2�D��lT�Q�����8�#RiN0�A�����|o*s��Zh �*%]Y��~qK/^}Q����7Uh>&�&u�������_T��s�I���:W�:�P�`T���d^��K����Y2�BT����\�8��k�8���h<��r������q`��mD�m�/7������;N�t��m���r:��/G<��%��
�p������F�RY���5�N�����W��e_r&����r�Dq��P�>����!�nb9z���E%����Hol�PGJ�����Y�� f�)f^�����^���q��(��#��+J��K�]z��
���|��J[�	�7u�H��;bNF��_���R��H�|���ahG����m��l u�
���!����b����y������b���������*����9>F�v?�"�y9A�l��Go�35�gZ�R���4.�n��,�������G�)+���"J5R�j|W1�~�;�G����F�rL�Z4T�E�
��AQ��UP�����4����\4&1��������#�;~|����]���#u��$8��	z@�G�������X���!��"�W��Fn�y=]A�����������z�K2�R��zQ���y���7�K���%�zh%�A��{�5�i���R�T��c���c�p���=#�W�+]n�y�:��#�Z�/��C���q���3��/��a@����nL�����_j:��}���G�]'w����1�������
�o���\��C�/Tw��m�jh���n������6��A
q1���c��~
J�&�U�2��TMi���c��`^u5���)�����:������1���m_Q^yF*������_5t�z����VH�^�:�k�����G^/�=����,�P��[��xP5���pN��a���I��p���
L��c(}0
{����v�r��V��G������I*{�#�9yo�H�"��SP��:bc=���������jc����i}F��]�KZ��II���"'q=��R����q���c�%'���MP�b���)�!7�
'����y�H]��W�%R�~SK�����������]kM���Ky��E���U����Z��H�f�j����PzS�CsSJ��/s�j����r%7K*�9�h?��4{�$�6'�W�F����BTN2>�-
4��*i����|����U���t:7��wr�H*���9�2��~-��>���R���[���2����)��:�u�������'/���7���3������sY^��X����4GS���Xg73g����l�k+/���;����/Hj7wZ�Y�po����d,^�����A������As����9�*�pVmzQ$7YE o��
������yn��	���v
�����`�
'gj�ih���z�m9C���4�Eh���O��������[�d���j�����}�����5����h�Wk�|)���	^[�&������r����.�)��J�l9,�
�o�+��P��|�!������y��p�/�����+����Z���0��_��y6���I�1^(y�tN9����>���W%Sg/(o��)�P);O������?��8m0�\v@S�
���t��'l��[��@3F����n��@~�|�O�R����2��_������Z�b���G�*�*J�*l(��w/*;�Z
�Be1�������C1_?�mD�x�����_�M����K��.�����?�e�hl����hZXary��NOW��y�(K���Ke��������A��V���~p����r�����7PB6�Q7~�x�p��b��N�bc�3k��`E
���c&XQ���MK=X9�6��y�vo��{��W=���W���Q��zN�}��fOp��(��_�k�g��@]g�
d��$@��G����c�L���eA�
�Wz������se=z	u�U��Bw~}b�Wgu��UG�XG
��C�m	�:v,����gN��%�o��D���k{7`���+yI��_���!l����#��������W�w��C��]������0��J�|�8��2�9�c�8@��7��0�`w�-a��h��
!pe�Cs6����!���8�C�/����
1��5wA�C.�+#�@�aUN�F��&4 ���7��t����l�����/L$����r�����;�2���<��1�/P�HKpp�)�N�S�>��dm�
��
m��,�����*Zc&�5B�1���c�kw�5R��s��8)����L�Z���7m�0t0�@R���#���z��W#@�2$iM�
�`*��Vc��U]�
�iv�[�e��v��Z�U�(�i���.j��^yN6���hj�mD2M��,00�6�����q�~��� �=��x�c���?/x
�:]�K$5wmy��Y����R7W
��S���iT����,�}�.'��W��������2^�>��~H����!|��"����H�+@��H>7DJ����?���������m�=G������[������?����S~��%?��������O���� �O��=?	���$xr~<C�'Ai�y����_V9�+���$(�����(O�������$��6���������~�^���������R?	��������I�V{�o�I���'A�������{����}�'A�I�W�o�I���'A���C�O��O�������]�Ta|O��}<	���$�i>	f�O����`��$�k>	����?�����c�*����'�S�'����q��{�~[���I����*�}�'��I��^�������?���0�y�)������T������}��<��n���^����}����
���?n�<,y�������{���~n��������k�>�>r��Coxi����V���yD������}�����xU(=���P��\	������!�:�$������/"2@f�1>�>�PQX,��e%�@B�P=T�&�cE���`&�N�����fA���thF4)�zYS���
B�d�����$B,qM*���C�!�u�����QW(
�
e�b��A��|O�?��TQ�+T��*M���C�ah`�P�h�������������!�8f�M�L�L���:�=����2�4�0�0�fLaXidapa|a�i�a��\�t���������������K��r����\8[�G���h�����dx>[��P{�[G�n��~~�I������
D{����i��L�A6��N�����q��}��Da�����ti�����W�^!kT#������n���D������w���c�m[$CC��M�Z�;�9Ous&�M=G
oZ���I�p�����9��Y5��P}[���5�Fg^�.���K��V`��v"-[B6r���������mp�9z�������w�J�{���R�C_���Tn9�E�N��3$R�S�������2��\:�n����m����2����d'��+d:��nsY�+��<�g��t8�=����@�=R)~��A��.{@�M=�}��e���������/*�����By���;�RX���2Y�M���	���w�v�T�������j7�
�rj}�Dr'�{���QA���H�
dQ���h����G	[�qCE�o����=�.�k���5R�z�����^���Y0�H����5y�Z���f����V���xh���D���se�x��t8sz�(��;Dr����w�F��h^�\-�n��z��J.wD���'���k����^mP�����R�r���+_4Mf�m�#�����~�,a��XT�qC����T���H���q���K�7i�Xow�Gc1��o�����?#��X�f�����)�A����z�Rc��|���X+"�q_+
���Z��6_�y6�p4�b4qu�\�-�6g��[��"u5.�8�������gx������5��T�Z~S��5�A�&k�P�|{�A�_*�i�5���������W	��r�i�s�9K���G��V^"��,���R�+��*%�W�:]�w��1*�[�rq'���2��s���$����b�����=��d�Y���U��z3�0�-+R��+ly&i`7}��g�8��09vj��_R���m*�c�j��m����MWP��Tc�+P���m��)�G���q��g�QT�UlA�D������@J�������L*R/*���(r���Q�'�_�G�WW���U�t��uP)W���}���97��)]rDr<�M�
Tt2��`���H�����U�1#u��@�+T��:�a8_*��L����n<���U&r�m��'ZoD��`
0��0�5Dh�N�K����e��0Z����5%�X��N����g�p��F��+
0Z��a�q�)+�`���zc�i�%+�]��b��f�N�b���n�5�x>8j`�!����
?c5����ml0.u5�`4�t#-k���j���w�pm��Q���}�����[l�I�e�rk�q������4V��m�U�oN���i�����;���o#��������yw-�����3��;��h���]���3�1���n�y���8|�qZ���E����Tq��H}�>
��9���R���Fc\z
0��@�@
�~����6���I~E\1�,�YU�`�+�v�k�/��wZ�������7������3;~7{����w�YU��n�������
��)}�](�����;��KT���1T�%��9��h���,B�TNmL���h�������n�uG�	����Z��+lR[~S;�|�N^=�pST�y�V��7S��E%�P�C�H*U����1�����E}��!�z�"��2:i^8d�B�E���|�������w�q�C���RY��+N��l.w����m��'���5dw���j�Q���������|�Ls���l��"��3O�<�]O>�To���6���d��=z���x�H��W�S�-�4�����������Q��S��4�<�3�-���u@���@��R:(�N6�����_��3�-����Qk��)��t�_�}3�V&����x����lT���E��~��X��P�����2D�[������}���(��O+��������}(O���im�����i";�_�>��������]-������\��O�p�����F���q����w3������r8����A��z��ak�+��.���e�#���M��>��g1�)��i$�.��yM��/=U��7U��'�3"(�#h}c��f���fs}<�����E��aM���<���s�b�}�������HZ]�����3S������HA}C�m��Z��98����1��/�H,�5�y���Vr��CxY|��$���D�%��y�������5[�c��\��9y��7��]J�ipEV<�|�S��4��g��&��v����i����O���l�Kdq6t��
{��T6��I�c�5�h����-]�>�^�����+{���<</4��)KgVxn��Z��]���vs�a�ni���?��l�>����	S�X��p���M�M�-����=�m���wn�)Y6A;eX���7[�$rZ����Q���n�o����W+s�\����K*0H��i�p,�������������J��Jx:�r��|����\�Z��+�fMd�D�s���J�W�K��W�D��p���!��<�e�I�b��k�)#0����^�V���`[9%xv]�h'_<�����.H�ry:
��;�m,��f�a%�,�t
�T�Tt1��[z������=Z�wm�ao�g�q���3J�D��s�Q��b�P�4�d���(��-�"���p�5�k�T�V��
P�'>�u�)9L.o�,k�,7��M�:w��b����)p���JU�||�e6*�����Z_%-��U������;�n���,�;dY�+!t��x���,���h	>L.���	��&�<RI����v��F��p�(VKi�6D�Y����+���������0F� w�����$���_6����4�h&��*�����m����!�����Q{����k���6S��a�e������R9/-�����ys�m~�6�g1T���C��8L�����&��u���1%����,.Rr�;K����vN���)�����KC���\$u�1d��~=C�:f?C��4�c �J���F����k<\����@��hF��]��9�3��$�MW���w4aR1?��H7|=�m��)�9���_=�����C���2*�w��(<��+�rv7:R�H
qu�s��:n�y�V��`���SP��4wG��zn�il��&v��F9��D9��=�]����'���J�aT:��NnO�q��n"��K J����Q�"�.vY�K�3K��~�����
�������)g�V���%]�RvHc�zLDx�
�S����p�}���b������t�r�������%8������+wv���yB���u�)i���Z��]:G�
�J�ZNA�;���Zs:��� �b2���kg;�6�t)-WODA{'J)4��u�k�C2+j���-�m����)�x[��mt&��YB�?������/z��+w���vQ�(h";GdW�
�f��us���qwQ�6?u}�H��Z�ES��f��|f�Yr��b�j9�A�F.���aav���8Vq[�`�9��"@�T��j�j�����F2J���]�����O�B�J�����D�L��EmskX:N\��]�#�,e}s�(;�l�b�s�n��f���f<��6��x����|t��&�=��l�&#(7�NnI��/��+��j���o��Y:�]����g���/�vU��������Q���Ib	�M�tS-l�m~.%_����vw��%�������*��EXW����lXG���o��W�����������?���d$��b����)���1.E����)���%�4�x����gr	i���,[c>n�
mQ �\P��dw�uWM}
+n�l5�V�����
mv^�����O�D��!c�X���<��k�h`���V"mM8��A��1���iqk����YV�^Q��u�U@�<]����r��=mUaZ�>��������f�3[����������=
,oYHKR�7?i����o$[��H�����'?�\��Hk��5��R"���>�h���K�_��i�G�rU�_`�s�i �(S��0	���DY���V�4��*M(�����m2.��gn�#�D����)���KE�4�R����`�K�{��$U�v�������;;MR�Si��4�_�'��%���w@X�LzhQO'�v4z����<f��2����B���<hc��������t;�Rt�*M��_`�h�ZM���������i��!�Y4)�_��p���i�M��V�Nu����yAy�,���������9��X?��8g��A^��)���I�
%���>s�t���Y�n&�����1����rQ�mw�:����$��z�c�,��z.�d-
G����M���4�����
��1��2
����&���

��|�Q4�0x���S
:�����xS�>��~l�y���>��Ol�X;N-�x_�'V?�.���GQ�M
|�O5'��a\�@���1d��sLz�<��4#[1J����`�!�vE\�}U
�V���a�a�s�a��3+��W�G9h��B����@	b�8j�hP���5W�!�����v�bt�������]g�;h�v@��7G���; 0����b�����5����1�J4IkSP��W��#�E�5�0����H���7���+]�{G�C'�;�L����@��X�FwP�4s�����*�Ds.�Fh���-[��t�S�S�����5�o��r:�<h����`�����(�/2v@��e���(��/���~�q��"��"��~;�<��"��5T��k�5�kP�I��(�Xw�m:���a�G�D�A����D^�_�:B�Z^y��W$w��$2�0��<���Id��Id�����Id�\��	`��L"����I��F���Ep�B���|�s��o�w��-N"�M���h�D:��D�D���Vm�I�W�Sf�D���D��	���|M"�����m��n����`�0�������Id�a�'O��&���a�M�����&:`������H
��0p�*��D:�o��D�t�N"��EK����4I���;����k}x��A�v�����[�K�V�6Z+�a EZ��1Ot�m�\�00-�;��[�0���y&�9|q�T�)��NkZ���#��a"Q_4;C���9U�]iB�~�E��?Kxu�LL���/�m�kc�R*�>i��[,��>��X��-/���M���z��o���b����/
��r��[�u�X��1��:_�z�GW��m�X_-A|J�aR��`O�'���K���0��nu����&���
i�1�<0ypx�m�����?�	.p�W�,i���R}����i�eI����7�%�^%�w���R9���r�I��Q2G�>�&�,�}���u[�sz@.������6@��M�E�~�V�2����xS����V���h�e3�3�$�=��9��5��J�l�����������q���Y������dd�nw���g���K���vz`�f���f����7��!_�� �x:WMr:��0��8s&�b�Y6���0 )~�|��X��5��x���+w��f���Vo���O���B@�8g'�|7�8��������|��W	�q'%m8DI��-�/���x��9�/��/����L����i�U��h�7?�x��G���������?�O�;�����T��L?^�F'�xF��['�������������L��7x:e�!^LA�3^5��_��I�ivq��Ev�g/�r?h��i���q�����?c�hr�U���9�?��k��*]"\��C�T�D�X�3�7��e�d��
�-���H��&����r��������y���� Tl�����+[\�s���Y�����`���+(/n����DQ��2�5��\brW����H��dD�,-��|[���y����g+�*��������'�y`��R� 7�E��0����/��2spN��9dQeI)����7�|�P��t]M�g�q�����?x^{�Mo�����o�N���|qg��ma���A��mW����MM94\m�e��&�EZ�.3�����nA�d�I1�q�y�^�4�z��,�]���i4�m���E�������[��=v�O%���%��>.h/���G���Y[�[�H l��N��,V�b��8��SC[&8�=p�B|����j&`�g�Y���=4Y���1��Q�@s�{�PNb�������J.�
U�@�Y���,g�C��e;����.cE�����|q��"x��� N<�M`����mH��f�Q��hc�!]C�S�)��	���\:*/��9���i�|�4tD���m��\geM�O6��?�I�gg"�1��=���tI���g�d��F�S���\����r�h����]@���'��Qw���&��]X��4i��u�Y4(t�pCpb��cj�8�?51!��'����M�I�nz����Y�T��1W�h��l��C�N4f����G	V����h��/���@�W��v-u=k	p�D��[qNtD(�������
����HkW��FN�4r���N���'@��6uTS�8�9@��d1p��^�A~�����#o���zA�D:��q|�+� ��%H0��}���:e��Y�ydd�Z���yv��w������0W����(�����@��E�*v�:Hal�5���/���x�vh�i�Y���A��c�B PG��@	�@!(��Q}�y(�(|(���.���p���Zk��T8�z��������f	��Ug/�p�9����N-%���OI
jR��eYC���{�Es��Q���,v���(�a�U��M��090�S~�&5�:^4��
Zk a�wnj��a�19;%m����+�\U`���I,<XB-&{��#z3�
f���������Ib~�r~������^��9����SA�tjg �|�����\OWX

�eh�p���V�9Oi
���
�kB�<��Mr�
N�J:z��;R���>O�
��$�����-� ���|\��fO�z7kh|�f�w��p3�-[!���G�j	&js�K���h��3O�`���#h�6~���4	�����W����mzA6�����Y`���>��ie������_,M�Ch?�Hu�Z*H��7��a�T���l�4�Y6ywW'���Hsu�uA��^�Z�j��������b�f�-�K�x8��`��+��sQ��8m�p�V��4'v��g�8�PN1����v�`�����%��*KM��t����H�Mr�(���J�aYk�,�L�S��tY��[��_<[��9o�af�0�au�����D���
�E��(��{�cU��ts��\)�V����h��8L�����0���G��A��9�#���6t�P�"Z����`������������yAZ/Zb�L�/65���:`���B����0"It�K"��
E+gK��Ag�M��		e�a%r�h��tEM���F���T�qE��4"U?�n&���Xo������������>�!��R��#m�^�MX���X�y��6{�����L���
<��
�O��{���s0����������`N�f�P�48��sg�d���xfz~0����"�����o�8������7�a�+U��+�#�~�f���>�)����?_G"S���,#���h�[�Yb���
ZF���(h����2�!�~c~����7���JP��qP�t����^���E�S���5*r�5��(����;8M�s�����K�����N��+�L7W�1/�8�R�8�"2Q�s�����[��\��P����)�G��vC�,G��%�;�;m����V>�nr�nt�t$H9@����k���2@K=sB�.�V�i�7��}u�1��y�t��h1���?��N����<�D=e �||uC�p��s���!�J��ia�z�3(�R��-nY��f����Y�i�N?^���5�J��&���9��7���
���� I�e���m�?�y�H������kl��!A�Rz��(�����(�_��m������������YB�N�n��%r� K<�;9�f2L3^�
���|��z�<e�M�#7y��r`#�U^x�3a�r�������Fy���\Kz��}5�C��X�2�jo�
Y6J1%<%���[������
��P�(vm����_����'�x\�z�i��W�]d"��4�{��(<�F�F?zs��8�M:�V���-�Q�y)������GD��&���`J���[��?��W~��6���Vn��:��;�=����V`�5�ueX�T+���N���@q�7Gl���#D9�]�>���^��;���|k��,�T����IC?��e��~a����Kcipb���<�[�UO3%�h[�Q�e�4GK�����tO����������M#uFnI�����*�!��@.�Y�qA��7��|yRbo�V�;�U<�e�=���KN��gV/Y#���9�(����c"���3�����A��P�K��7��%�u8Z��S�j~�1$.zF�%Y	6i[�1���,�o�}h'��(K��Tg�p��Ki����������-�r��_����b-C�4��������N��m��J��M�S}���j�����Y�Nt����Cn�U�}
�84����U�[��|
�z*R�MG#�O�on��a&zs��'x��{a���C�e9o~g
�"egc�H�����$>Cb������9|�����!�d��|u�!d������������������X�^n�z�:C�.�Y�Eq�������I:��]��Ax@?����8	��5����JC8
��Q����:��?����-�<[j�����w������=�������?�����s����=�|�7�� ��$���� �O��#?	�������m�y����_Vy��(����|/O���<	j�O�Z�����$��>	��O���>����y���?>t����I��:��V[��q{��/������~<
������Sn������
��x���I0~�'�L�I0�|�6�s�sV~��S���<'��S��x���O��O�[~���q>������~���������~���I��'���O���O��!��O�����O�=��������oO���_O���_O���_O���_O���_O������������������##O�����C�O��O�O����������N?��]�~���}��$�{��$�{��$����O�����$����O�G����<	�v|�x���0�T�)�����I�����#���T=�=M���4����������Oa����<Ux�� �E$B��2�G����*
��"��VtT�UB�PUT�<C�9`���`,���?NSx����\h:4#���M�f�}H (�	���!��A�(�K\!	�F(�i�7Dbo*�q�����A��X�dP8*�S��%U�
�55~]��wgxw������������c��D�\�t�����������	|��!�HC	�	j���F���V&��5L7�8L:�;L=�>��>�tm�qD*�W���N�gg�	����X��H�g���=�����J��h�H����c�OXb���`|�6����[���C������{[����>�h�k�?J�"�.��
�zi�~I��l��c������n��5�n�B=�y�{)�J{�{��`d�MK!]U�^_r' -�J��^�V�Y���E6����M��&*+��t����^��1x�3���buI�V���$&����
�
�P������
�R��J/�!
��%�"#:�@y�i���<Myf���V�5��e���J��r�����j32��"�+i*�kA� Tn����� WSx�qo0�<@y���z{�y�i����eF�x�������w��[<�+���H�����\�fy����n[�=�X���D�eqZ��Kug��Z	H����+�mM�|�E�vd������\g	 i0��|On�U%�U	�/��no��PO�b�i�M�1����H���=l<�%#�+�3��7����z��������d�U�M��3��P�B6�`T�P��0���?/��Ekhtq.���j�����K�Ab<N34�A����x��<��
py,�E�`�s�.�
B{�l�f��Z�5zvshM����W�K����M@[=	��:'�r��u����2���_���������*k��9��F��_(�
����������W��1�m����to���/7a�� m6 M-�}�+�&C�Ox���`v�,vx.��	[�C������K��i������{tM�6���D��(�����l������������ps_�6��d���V��?O���tb;��O{U��
����=]�J�������9�/�o9C�yn2��R��=�
��~��A5�2�}��,��Ln������;G)������9(��)C�N�\\��?��s�@��:?�Fdk�Eo��]��R�2T�|ek	P�"\����G�r�2SZ��$�0����a�Kve<#_rP@*C��g�pe(�Z�h������S���J��+���,L����r�hnk�
�P�������PQ�-�+��A����2�-�2���o0�2�-���J�����x��{���	7���^x�����;�3xO�~���7�"5�K=�����R���������>p�xb��;����g�c�N��#��x'i)�i��kZ/Xj(�UxYr����3�����wS��~~���_��~�����f�K�X���#E�jH���)�:{U����dw�x!���H-�hi��?�S��>^Z��/
�^|�Prjs��xs�=�}�X�}��~����=���w�'���~�;h�e�����h3�����M��[�!"���yAk/���nkq��d����j��`��(Ye�)R����5'������2�jR�o����d�qv�x�s}��W�|��ol�_ft~t�#�]�u=Z�n�/�!���
;[��h04���\�)j'`Yj��7
Z�B�>���/�0c�w���a�T�
�F�]]��=�0��46�W�����i���������2	uF�}���$l�6/��3b�g��xN;R[��\�H���>���T���i�"�Z���^�%�����*2u��t�`dC�vrlA��������@9�������f$�H�{%��I��A�KQv�Udo��<#��&�[�-,�YL��p:�uR'��^��9
�5U���&��������`�9�_��(��
7��wkm�`�V����?
���5q��V�.>��aC����
x"��-a;��X^j��<�y�B{���5���	�!��Sq��&c�F���b���7�.���Z�k���&���K��qN��7u1�
�3��
���3����,��;U��R��H�Nj��:�;��;Z������y[����8�J����%)�N�2���c����������YeR���R���)K�&���2���*l��%������<����v����y?����������q���L(qF�����3�dd�?���@%���v��/���
g��_����q|?'���b<?�F\��������B��eDj�o*��]��KV������85���
��Z�x����~y����1������E������|�:�x0��qx�>P���]����u�r.o*��:� �=��r���^�5���s&��Z�$����b}���Dj���VR����x���X���R)��c�����&*����`�����LX&���>oC�����;u�����3�h����Z����/)pel��B���V�oP���}�����-�6&�1�)UR�H	.�\������*FL�I������z��?�����W��i'Z�8r�h�Ve����o��}�A�����[�����}���J%i(�U��!w�U���R�����T�����������@������mxW�6�&aC��Hq�qkn���,3��>��@������\�����tG5��T���-�qQ#z-@=�nH�Z�������f��$��p�^5��'`��Z���MMn�����3��������;�P�����u�������4��&�q��77k�r�(�F&x�;�P��?����|i.���������5 C�.�pHG��
$�#��2}��1�����|I�$����	���.u���:|Q�B�"���9,B����F���4��r+t1��U���
��	(G�y���Y�9hU�mq���3�����`y��.���sN���o��QvQB�Dj�y/Dkx�[��(�^���k������yY�z.I����G�=b�+��5�=h���6'%�{$�;qj��f?cy�����O��k�bD�yJu�)��S���o�����An9h���b�2R98���C^M,EEN2-����Rs*�P���w��?��,��W�?VK�<��W�J��2��>����_�E��B��%	b���B�����>�l���|���u�>�4y@8TZ\	<�|���k^
O;
�jnT�r��N�\V��/�����>���EY�Q�BM��v����~��=*�&���wh�����?�0��!�N������@�u�ZH}��~i}FToj_�,��k�)~��l��P�F����d�k������,HN�Ej��Z����md T�"� �#lcl!F59�����+��y6���l��b�V����D;`7����&�6�H���.,v8�lG���EE������5b������m��+2����H��(�&P�����e����U�~9�U��c60���9�W5'G�F>���^U�1�l�j���je���QV+���;ip���B�")_a���i���b+��R6��b�
�cW�i���0�b�����f�5��������\��g@kEjy��w�������L,l��@;�������n3�&�B���:�����U�~�J�e���.�xP���Z�s���G���
/r�%����6�8M<+�����������ez��\P���x���/�P�_��w;�lG�#�6*�~�xG������6K��+P����R,�����Wx��$�6��?�1f</$�8��Te;(�S��G<���yQ���R<m��8�6�"���'D���2R�|� �.U.� 3��eK3���CMQ�q��P���eT$�&g���?����P��JC�3F�T�� ��`�G�;�>.�6��HR������GGd����}tl��
;�w�d���;�5w�Y�����E���S=���8�`������-c���.��GG���}\r�&�ql�9�[�������Ud>�,�����Pd>����d"b��
FToj_�,"�SsO�����\!RK�<|~�����,����o��"��!�N]te�TZ����f����)Z�K`�=��Y��Z�Ti��g���i����]�JBd����n*"��7�QvTn�2�l�V;�K����N]���5/��y�\�E]���MM����j^h�fS3zi�a8���l`�9/��/
����5��2��$bD�������t���]�=D��/�f��-<���J��U���q�Tf!�!E*����
�cW�g�N������;��@������	��5��8������q�������o`T*��be��9�yFj���l%C�7|_��+�W�x7�:#uHIF�5w�.��gK��j��c�aP-��8B����^m����2l�W^x${V��(a������.�7������F��H�����$��K\IE�\Vd�1�g��t�i�Bc[$9\������r6<���{�8��w�P��x:�g���tU�}b�=���1D�J���k�;���Q>�:��`W& 63����oq���V�H�`���3�z�5�Z+���R+��gZ���i���OS��L�ms\��q�C�fZk����y�'^a�uq�e��6��Z%8<�w��5IU�#����3��o����Lky�[���fZ���`�%�x��V��a���1�Z��i��$�Rj�fZ8����X5��IY�n���t��nD\b1�:����=F��w�Jg��~x�������'�-����X��������`������9E��%���=8�H��m�r�w��|%���P�����	5���^�����P_]xQ����=��.����,Jj�nW�*�����������������6���MK�[��{��t�e8=0
D>�������n�$�������+���@C
��`_�q)�����B��Wrv�w_����#�N7���{�p�����z,��=��t�{�n�{�|�;2��3��w�87~Q�9�g�/�L��zf����W,�������]��w�3��Fx������\U6��w�g���'��9�.O�P3�l7u�T8x��]\�;�B��*�|�s���������Y������n*f�o���9�/�z���>�cR�=s�=�����d�#��_��P�E%�_�)��2��c����y���v�w=��|��d���h�9?�;"7z�r-dH��O�~G�UH�5s>�T�C�3�=�������~`E;U��:��
��:J�5s>����_��K�����;���G�>7x�o��p�hg!P��,��me���_����T�2�JVs�}�Vp��Embp�#��~^�}a�E��-E*�J���������y����=��XjU�
���9�_���gr����gr�x8�4#���I�AFd�z�[�uSg�e�ZU=�.zQ��v�����|�#�&���B�wf���V	�#
G�
3��.�W�\���
��������q�������1������q�<��_���F3�2j���;�_'�%u\5�VQ�F�h|�6�yCe�u#��_�L�y����r�6���D�M#W��l�!`�aR5-�(��5U���L���S�oK������8i�@6-��'�^�9c'��j�(�H�0�����Xj#C�fgw�i"5n�>��7�����f;r�e��5�Y�W��T����8KC�vh�c��E�
}�V����\e7}l?|�z�a���t�(1`�{��%��'q5s}i�����eem�hE*�eK5��@��e�O�,H�n��(�$�%��{T��1��
�4s]J�y��������
����a3��������?�&~�G�Xw�	fb��n�sw�r�<�����;��-w7��"#oL��>�\�W�������N������)������e���)y��r��3S�e'F1��\�)��9$Z�)�-�2~a�������>���H.L>\�����|�H�m���z�?B�[��1	��_���}���q�1��M^A��� =�42���3s�/j����:O]���We�OoG����[���6^�?�b;�U��{0|������P'��H]��s����}<��c_*������.����������8�0\'��<.��fB]IP[SYP�9��i�e����A��D��6<�pGF����B
���vj���Q���q1^��D�'�v�������S��: ������Fn�y�G�E�:��G�m)�p:�w�L������C
E��;�� m��%/��!�]��a���R�1������O	�C�Ni"��f���l��~��_R3�1K�V�]0$|;�|���a����,x��p�5s	9hEM�#�e�UV�A����n����/�6-���v���>��e����[��'�:z���Um�'���_��O�����j�<z���d��-~�x�]�F����>E\y\�'5��2�KjD$j�+/5��@=zQm�.�Fi��f��Q�����V�m��G�+���E�\���A�z���'7��A���c�������)lb�e]Q�E���Q��Z�lF���)ks7D�]�c��.@E[����,��n�wA�K���'�:9A	��Q���&��������sE"d�>
2���"W4A%�#RiN�����c��|oj��:i $�cG)�~q�a�9����VtU����PV��	B�� �u|�A����N�����$����gP�|5�l�t�zL�����l-��iw�����hW�U<���3����?�'Ej
�"����{,�9�u�"F����j������g@<'�E��Y5��v9��v��Tu�������51��r9������8���&8�p5m��2�!��Ow����d���v/����t��r�J���
3��&+Z����U���������
�sT%�r����K��7�G��Gu��;`s�d������v�j�r�����K�')����o�Cs�
�������
���.t�.�cC���b���e�Q�:��������w)+5��c��\��yu���<fx����R���xu(�n:�����������:�G?������c�\;(L��j�j�~p[~`�����������3AX
VvH���1R��Kq7�k#~���]f�fL��Euep\�����>stkG�8�H����@/�(��C�0cv_����N���{�����#�;�[��]y�]A�;��s��f��]��9��v�U]T��c�����Y7����.�[�J�s^�yM��fX��&f����t����#�;�������5�^F�����tzh���G0~���!�����:>[����:O]-�����nL������:�1�������
�[������+8���k,-X��-D54y�R�T7y���-Mw�����K2.�)�
J�&���������j���u�8�������%P]
W��fF������5z��Q
��J5t�z����X����O=�kVu�y=�����8��5R�}S
2U�Q?yX���+ sl����W��KkA`���tJ�����K�y��i���^���3�.E�'A�Z>�u���K��&�T������.�xA}7�(E���N�/�[
:|z�=h�;(N6\fpT�M�,{EY��Q������f���z���!�"j�e9�����T.bt�J�D*�-�,x�-��_��u��� �gZy�����fE����K��T��n���,
��Z0*47�Di`��,����P�+�Y��H��1���.�%���I���h���L���h�(WTK<ve�t-j]m��Ne����F�NV&.:����~_�;8}���tQ�M�=��i3�������U���V}+�2�������;b��n��_T�2�=��RU�"��'#F]��_�Y�N]f��K��R��v-���-U+����n��8�����q4����J�f������l�s��0��D-{�~d&�
�8��z������I�]�{b���/O�M�>����d�W{3��u�{\�����	��S9�+����==J/���Z7uP&�F���U�DmB�~�vy�;���f���9`/:��������HP��^��D������J��o;�=M\�z�C-�"xp9u�{��:ux����{��J�j�$����x
)Y�bL�u�������[���_I<u���K�z
��6�d���,F���
�_jQ�Q��!����%�_��mA������K����C�,��$0�����Zz,[��L[��"[�������0��������9�����R�'"�(��D��Q�;������9:���%��E#�o�D�1�(G[�b���7mzD�����s��-X��=Q����{���oh`���t#�u��m;�b15��O�nHw*����z��5c�\�U��V9��\C2�S�A�Fj�@�������J�9����].��v2�{��tJ=9U��
�3�����������;R~{��&�\>�_���'��uUf�q����r�;7����lE��$YZe�9���t�K*<<5li�h��������lt;���3PQ��n��Zd�z�w��;�������>jq^u{�z�}���X��;�_�������S�2U8T��q�%������:W�a���X����j���/�t8��i���#��Q��#X�>e��1�;~���{��R���E����^��4,�l;>�PF��0��^�&�M�Rw4b-���\e���t�R;�>��n�c���C��������04��w4a4gdaCI��;R;���p����_���f��}��`�n���w�Pv������������NMfb�.j����U�k)/��6pv�Z���ZS�d�7�S;T�p=L��;�>����2N���������.Z���kn�u��y�5��7;�>��S���h
�K:�f�~�7-D��.�x�i���j�j.w�[�(_�n�d
���%H�*���34f�B��Q�4�z�\8�([ 
gZ	N��(ICPT��S���er�����T:�nQ7Z�����VDw�GNn�`_�u16�7'�$��;J���z\��yGW�f���K�m=f�5��Q��x7�d�J�ws� }��9�~���r7�J��)v�'���������v9GwJRI����{�d���]i=��������W���?9��������}��@�)�W~
��)���@���O�O��7O�����2�����{���(O���<�����>j�O���S�����>����������������V?�������;�S���h?�S��lO���=��?���?����?��O���S���O���?���x�xZ�xj~~?���k�]?�S`�O��k��<���f�K;k>��������of?�|������?�] Z��{�(��zT���@��^�m"�,���p���S�n���z���������O��V�6�W��)����\��
+�<�^�����g���������S�S��������������]�~~�w���)�����<�������?�~
������#~O�GD
�Z���������O��KXO������U�����n�2���Oc���u����?��X�U������?�6MDs���������6y�s�(2
3�X07����C����a1��L��s~��CA����y��n��W� �KQ�+Eb��xC�!���B�r@Q�4P (��
G�{��!���B]����Pi�7Tj@{�`�F���F����k��D�\�t�����������	|��!�HC	�	j���F���V&��5L7�8L:�;L=�>\����o�#������?<�g���x��ax�A�wA|/�Jy��#���&�D/u#���9�����/Y ��_�l����N��k���~��C��CO��G�|G���7<��r@�Q�T�/�q1n4����.��|�����iue`<�7��;R�
/k���f�1n��s�m�]��]�="bh���@���k���%R7z��;a��|�w�#��(�:U���F��K�.������
�lG��E�+$�8������m .��d;��9L��c!Y�s�T��o>��Tf�q�7u���%��N��2#�a�MkkU�T�y��������%�(H5������m�e���������%���TF/�!46�=��T[T���2�<K���V����j0�<
�5w��+I�x��U�&	6���&P����4�����ZU���������B�@-x�;��E��Q`�&�l$�s��
��
��:n��TU�\�P��Q��Cm7uow	��[��%R�e+^����x��]Q�k������<e��E��F��1{�T4���|�1��>+���Z�$�����H�
t����[��I�w&�iy7�y9�j�w��/)��HA~3T�$�
R��6f��t�h�����0���|�4-�����?����Z�����*%��t�U���)R�3lnfw~�xB�Q.�I���������f�������7��f�����=}��X�����,�e���D)s�^9Z=R�Z�S�q���=O���k
x�i�o�q6���5Z$�iGj�\�-D��!������TGM#�]iu/���Z��i�����k�
�\��M�i[��r;7����y� r��,K��Y��J1p�=!b+�2��kes}��%R��_������p�V� ���u�S�`�k�
[����U>���_js��M�%Q�����%��� +�����aJL�!��y���a&c�z���|�\
t0Eu�><�r�c�Y,�eX%��(#�e�<�eL��@{F�@��l�#*�cS���-W���
(K�����gP�-g�k�Y��k���W	��p�ewP�������]�jvo �d���S|_�ZGT��)1�|���mr��M�����@Y�'L�2�#\���+�(+Ym�����@(���I���&)_�)��'�n<���=*J�B���Y��?�!�V��W�O���MM.�ZW�������j�-���-@'���%�U��:���q�K�����'�8u#���^�������B�:hF��
0�{l������?�<<����O����6�C�]�{��as���o��<�~B�f������F8d'��l�N���2�8��u�wgp�We|��<���>������q�=?�r������7��}wr���yY���`��n��k�h��J�W<��!D������t
0�������+� ��Q}m"�D����_R���n�	0��A&�-��5*4g��`����B�&lV�`,��+�	�}���ei�j�������e��k�=~7{��E��Hz�8�
���(��=7!E)R�VMt��|�Q�7�#(j9��=D�b����B�����������u��5.*Z1d���E��j��;b�B�������"5[���5���q����^��=��H����1f�KI��u��d&l���=�yT�!�((**��LY(���|e�����I�x7l(�txP�"��{z�=���K���Qv��b�l2\���t�]�jQ��r0�;v��g��g�`�O�<�C�c-O�*���-�V���*[�+C�u�b��%�BrXp��)��/���8��h��9�d��5�i����t��Jh`���u?�
�t��|����l�W�p*�%���R8�h���g�7!��tNA-�t}�oZ��{M����������N���r��Y�k?@��z���#��0%�M�����an�n]zb���Q��M�VI�I�f��0F����WV0~u#���t_pVB���/Nk@f/Pk==d5�*�����]M��m�	���cZ���H<e�kT�i-� �����9�H|���hkZ�����'�[�����������?c�1y<��Z�������\@�2-w�������.X[hOE�T��~4�1��w�/p�{�B�����������/<�sYX�'����W�����h�����=��$�+���m%^p���G�W���a��+�5	�|���U����y�N���y���Xg�T�J��t�����y���+U�Y��#+�L�cVP��C;�+����S�@\~u6?����"+H?[:f��*�<��-8���`@�������	�H
����{���������������>�_!�<��������{���)��O��/���(��+4��	V�������b�6+��>Z���m��^�}K6�J���U�n��S�tXh�����DI+�ba��?���O&�"n���c���7��a^������W5R�/CYw����5���_UM	e��
���b���
����5�����T�Y
�>|�Q��������9D����h��������e�!&�����"�38d�k����`���y���:������6�p���=�F~�y���*u�c���z�p�K��0��BWk�����|�{0B���a�=�p�M�����2��-Y��Q�&b��U��L�i����������z��������6����yR�/-&a^�����
bCH����K@cGjb���y�5*%�����u�c����}a�������������"'JI���H�nd��x��2��8�F��Q�|n�]����`4�����F�W����J�jaZ���d�`��>�64��j��h�����YeLh�U������$��Iv}]#o��|��yx�i��������k��q��b����Z!n��E>]|����~��c/JQ��o%m���DQ��<�Cp1 ��t������V>f�����w���;���N��	u���w`]�Ns���OS����p��&����dg�z��y�Q9��:��V�{��u�D�#�������Pu,>���
8�3��Z"�]������VG(G?�:�
������vhh��<��g`���r��iq���uc>�ay�6VZK�=d/q�$���f��������a��-�����9��y��/�
{W.��g��u��G��������4��G��h�~�^�.�K�ph-��d
/��H���.����>��� ��Y���2B���kX����y��^��uR�=;�W�[���]��;�#���Hk6�[M��1�����J�fR�\z�I/�=���4I�Yi|���7��f�����H0m�������i�20����$Q��@���@����6�)oX&�A�`��Zj�{���
n��i�����k�����C��]�����������>��6����5�|�(��}����9�M>���1��#�,���@���N��G��&?��Q��,R�J>���K9f��{�}��3����%`;��w��z�������-��������=�:�W�p.��)�L���&/���y��l5mF�A�3�.�����sZ�,zx��^EC9�`�H:>��[|�dZ������io�Z
���U$X�Y�],�9�������n���H��Fb�8�T�I'
{�����)��-:���-^���"�p{&0F��=s���l�]+��X����A@�����=��]�g�i�����J�M�����ZS�`��=�^m-3��`���Eo���|�9���!����J��8��iC�!f��Q��.G�!.���/Z�B\����=��s����N�C��u&�k���]|hyzJ��N�;���=��(���xm�C��SFc'�j)�e[�Fe���HK�~n�;� ,Km!���M!���jvPA|�i�\4��j�35{
�N�������&d�M�m��!_�K�x��v+N�)����U"��8��ai��|(��������>d���7
5&7q���0���������l����B\��<������S#��{���*�A��$��hn
��B�R�$�q�g� �p��6�A��t
���{=&Q���P�h��wA���x��>t
����5f�%Y=�n��-�Q����|��?x���Tg�.�t�]�vPnZ��#&dY4���Z�����q��MK��PN�]@���<��4�>��u�/g��!����@����-�I��f��C�����8�_���	l�xXu�z+��%�;b��r�a���d?=���NQ�nN��3�B�&{�m�D5q�5����YZ��bN�pLNs<��A���d�=�C��}�����oI�9	����]��l�gNB ?��i�1G(j������r�fx�����d�0'y�^O �lj����_=%�s�|�"�I�d����8'y�����l5mFZ��,E��9{5'y���9X=�0'�a����O��9��aN�vjN�,������s<�q�`��v>����l��d���z��0�s@����m{^��������9�G�"�sh���hXv(W�q@�#��D�M�C��8�
�@k\�3Zc���-���4���Ue��#�����J!-_4D9�A��8,t��������j���h\P���������rL�N�%k���"������`a�����
-��%Su���:�m�1�q��qv����)��v�����t{(��4Lw��|��~M"|���I���F�I��a��~&�/�I�����a�u���I��a�
�$r�0��:���I���$rwYy��$rwZy~�H���w�4��]BX��Ip��4Z�����0�|�7-N"�M���h�D:��&L"�E��I��Z�n�KC�>��=h�Xn�I��$r+�
 ]4���rpj[A��,��$r+����sQ��4�t��=L"w��l��hX�k����������H
	i
\1���J7��K�I��'���X�D�.A��'�����nYR�-�v���R����nR$,�v����4RF��]��t��SW��J�������i���g��h���r�c�f-.���=��h0�I��O��9�x��he��&��7��X[�
�0��f��)Vl��E{���=$?y�4���fW�Qk�pk�������u��*N������i p�=�����#V`���B�}�u����O�O����
�r����V�y
�|�t�	��L���uvI�����r����y64,�_0<G�6��Lx�x6�,a��mY�{h7��-c�q���(il���4���_�r2o�M�7���p�-h�� �����3"��r�Z��6����n��s������g�/�R��V���h�����������!�qSw�Vd�����M
|I�-U+��,|�a����$6��_�����i��	�V�f����c�M�e���e��YX=�p)�<sE�$���X4����I1@:�dO�Z?������}1����u�c5�2Xk`=
k���O�����G!�������	)$6���J�����=��s�GH���%%�����'�xs@������y�����/���_�OE
�7������?s���<�1����_L�j�^�-�YdQ ��b�b���L`�?��$�h#3�"���}��~|�F��!7/�#90��C
�����^��c����-�[yU����n�5����9pX�f���Q��	&�"�.pCpj�U�=��j���[9�Mp��o<������W�"��s����x�vj/���m���-+���x#yj�hb��N�
zk�!L��_0��X�>������7���	_�j��o��y��z�.`3��/N��<��N����'��
}A
7q�@��#<<m��00X������i��w�b [���;�����T�y�,6���m�h:����o�,����L��`���y�
m��3���]m���������u�����{8wn����x�Z�7�7huR�@����^2�Z���X�2�gP��;��p�p�R���n��c�*�O�Co��	h	�&���b^�MC���;&�����,��#���������u��i��3h��6z�������f��~���o;����y�
�:���6]x����o ��7p�kh�G�����!k��fS9�h.tm�f������b3:�BT��d)�>��5��.,��f�3��n@����i�+����x�\��q��&0�S�
��|�����k���K+T"�����\���S��l���t^>�se���y�48���]���_���iK���t�e��X��a��x�r���*�4��q�Qg�dw�+��[��5mB��
;R�>�X����w��7��D:�:�VQ���sk\[�rpKpr���u9����-pZ�Gv�Xd]�&����&!�CkO��p��J����-�UMQ�d�Dc5)�R�h��������9f�\wf��7;��8t�A��8'B�Z%;I�4�/��n"m�k�@��&�V��h�J���4�cF���!������y�����x�h���`A[��_4��5F���v�o����EXE-�4F4����*g
._�yV���c�6i�������S8����<��h[j12C��b���r���M�nr�0I�4I�,+8���'��t @��%h�S.Px��j�K�7�)5�`R[�O&0${�����������h���9�f�_�t�U'�z�Q��u
������C|�='���^%�4yuX��V�����,h;�a���(��,wh����j#|���5��0�q�0y%��uA\�����k�t�:�h��f�Dl���+��$��)_�H=�0���y��U�!�^;���zA�i=��~����<��F
�R�� y��X���s\
f��������j�C�yZz�)b�i���liYW/\��{=�T�y�,60.��)��M�7O<�'@��<Co��b�:c_�������6�|�f�w��p����`R[9��a����Z��mq]��g�y>��pK&j1�����l��I����^9���j��^�C�b��8��/�V��i�>p����������H�:M-�L$�>p�����U3z��?P��Hu����4W'_4DK��z�S��h���Y���V���Z-��R�����L�	i
��H�7h%�����5YkqN�����h�.7c�6�]�4������2�G}���n�ymK�;i�2M���!8��X�j�}@�9�fC�����/��������0�\�f#[dX
���w 6W#(�[�w��FI��ar�u�h5��0�?��r���?��4tLt�6�;�l��1y
�h��A_Y�MGDf�!�s���6�-�P�j��q��"�eBl���Pc�� �p�K"��
E�i�/�]�A9#?!�2m_��B������Quj���F��,Xu�
�AI}I.�����N��z���~��G4��.�����-����n�w��
�w�z%��g�����(rj��tA���2���#m��D������wh�=�73/�v��y���;�mw�J-����c��i���?��43��!I���������~�Q�g�}ZZ���d�-���jpf��"��*�H���>�y����5�\��P8�UD������B5��h}\4&������������qZS�
-�O����O�6C�.�����LKP.�2��+����M-h���D�?�jl���~�T��*^�l�ch���p�@�h�����V��yhx����}|35r��ea\���<<���J�W��O����J����r`��N��m���y�\��+��C����.-	&���n3Qu��Q�s�5��i]4�J��������8U�e;M���D���Js6���FX\�����0�h��������V���4���+i��)�<�
C�?X��m7�����u4�����LvF���p4��&�M)=�K�w���|ti���f�6;��l���g!�0�.������N���{Cu�-N{�9N~��:=���'�0 S{�Pg3��Ju�8����7|����;t	p(���.y�A�4���~������C�m�&[���@K��kG�:i5�������teW\l6���x
��B��/�N���ga���;0��n�WSn��ik����aR��h�F���=H�V�	������J.e�j@-�d���V�gz��8m����}}b��G�b��|�`�4��C�e�X9������+G/�����_������B�w���s�?��=�!%)�������'[�N�dl\��
v�)��O���t�����6jV���%b�]k�;��
'L��g`D�|xaC��%�S|�vP�L�GTl_D�����6M�)G#DCF&4�������5@@�m�|�j���N�Q(��yf��0
��g����m	�s�9m����-���nL�5{.�Y��
�X8����h�j
<���gjNC���������w�,(���a��/&Z?������v�P=������s�m&L/�tK������"��h6,��~�0�v�r�3�����8�g��w�d�6��{	�#���������Pg�Q�P�2)���T,��]"���
���j��J�6W��Vj~��&���@���J��,���q�����_`���M���� �~��
/����^B;{�h��+=:f�U���e��P����B)vwB��������x	��}�s	!��J��-��I�?���������i<WZ������g�����~��ON��}.��}n�)�G~
����G~
���)����S�S���S���������������(O���<�����>j�O���S�����>����������������V?�������;�S���h?�S��lO���=��?���?������+F
����G
����n]<y
<���������w��������U\�h�)0��h1�������~��o���8���?���X�����v���c7�����;���k?�q|
<�.~�i�nc|�x��Kv����W�}���_v���n����)������ ?�z~�����.<2�x��)�C�O�y�����������������[��K$?�~/����)���{�����3��������%O�V?����n��6H{�g7E�����.��WK�y/�|��	���!
���q��|>����Yh"�kMG7��pG��&�E0�L�L0L����P��`�0\:#���C�a���K:
���t]$��A�(�KQ�+Eb��w� ���B�r@Q�4P (���7��|O�?��TQ�+T��*M���C�ah`�P�h�������������!�x���(�+�.�1�4�73u0{4��?di(a4a@������������*�D������I�y�����0w���S|��g>���U������`�#�h1�3��,�W�����7M�i�t��`��'&�M}�a���������g��y��uk6����>A{���\/�]�b�[G��b��z����%��j������Ai�����}�(��>������@����������������g����;�mv>ph�[���.������F5x��z#8�-�b�.Z�r��t���um��|�[����a��W�!��}^�|�$0�3�W����J��+]��{��jf/�V�@�i�;g�F�"�nO�m�(�h�*���%��������fd�M�>��4�_����(�mEtj�{��7�h2A�h}�r�]u����-#��M�������y>��_����X	huK��r�6������m`�����-�{C)��%�0PHK�6�qGz����6+��p���h�)���\�#�[���4��Z���y��D��|
}��U�C#7��rz���Hza�g����d=�\�C�	/��ho�t�����?��^�!�E��G�����J���<�]����>$5{`t�Bg/`#��l��N������e9JLU����Qn
�iO���
��S�a������
E�HT��iVn��Z�5��;�[�nQ����������u9'l���k���@���HK�V[��po����V;P7�"-�i���<��_�m��m��$���Pj������4f5q�.I���BZ�@����m���M*d�����{��^��t������;d������
�Y����g�����fF��y�a��9�X����r��v�������!Q&��Bh��U.���)W����:}w��]ieoqH�����S���!�Nl��������Ca_.�����-l�ny�e�E�`�R|��������Y��T��w��Z����U����������;(���uh`���u�2dn�o���2��yG��+��@I�����HAl2'e����riE����5�5QQ��j&)C�����P��t~�Y��5k�������b�
�:�r��2�����mWWA�����{��]{��(C����N)C�`/��Q��Ps<�`0Ij�-);������q��cX��������L����Nw����|��<1���|����y������%'��iB'��������p�������ZO7-�Z��G�8y����i�9r�C`�C3f�����{(�?�mQ�O�s���}5�`e��jXx�@�]����r��������%�=�u��&9h���)w���G�S�����w���^Z�zl��'���u�s��	�-���q����K	b���&;�V�K��}��y���������y@kmN/��8�:m\<��Q�s�+�l���K�/j�_T��&z�#p���������a��@jo&�t�S�}D���5�$��,>.c���[�C��v�&}��Ec�����O��-y�D�-�4hIur��%n���0@I�Va��KB��	��H���WL��m��x�jl�W.���e+|�{��^�lB�e��4�x��!l�6��;b�3�����K�N��U[m�t�cD����^��=X��Hu���J�A�=�\E������:���6�^H;:��F~�
4����L������l��Z���N��4��h0����$lD�\X��r���I����������vMi��!s�M�p��������'q�������DC`j���/K����TG\-rl�<^��;
�k���9^�AZS�b��R;�P;�E��]x/b:��M�6!P{�T�L���|��:n�����zn��[�
u!R�E�7���z��~>Jv�3�ySm����_�ja�W����n����x���g��Kl���y�0Z�1�eIR@-h�)�VzNEp���������M)7&�P�q|-��o�zE��Z���Q ���
����3����j�]�[��u����r��[<.����c���`4�
���/0FF���'�������o�����Z��#���#�2/j��������.�;����G�m��Db^��n*1�^Hd�+�j�B�ho���W��}���I]`��n<�h�K���������-`oe�2V�����,�6�N{���[x�nM��>�-�KVs����N^6�>L�����}�M=�L��%.�xy�f�������C�C�G[��W���
�,���w�j����������7B�b:��L�H�3~
q����-2��T���n���L���J�����e��[��Y����i�+g�ND��
����f��}���E2�(o��8K	.�#����)����=Z�=����!��@�W:c��@�������	�Xw�C�v"f���|��b�����k�j����Qq����K*�>���6o�VR���U��k�U�?���k��k������<dzm�, ��[s���a�%g_F{hh)����VV�e���=v~PM7�j�����3z4�BCQ5[��W����f��`�������Z��
����|�c�QH��g������x�Z*��3{>�T�Y���
�c��oj�i�@�Y��f-CVN��Vj���v�z�C�;n|'�4�/�?�w��y�0��9���@�9��G��l������^���%]�L�:f�v��w������ME�x����������Fp~��_�������}1�K�H��G�jO��@��~������@��W&nZ\T�rl��B(�W��/�J�u�[�[V����^����6qB]��\�56������?78�
4��m������^xm���bl�~�r�QX
H
q�s��#,�Xr�DiF��C.@m�1��I�����%�!��8�P����&j��
��p�e���d?P�S��v�T
w�m�)X��K���r_��cY(cbF��1�49��&PDK+������9���nY�E�/�����sF�=���=�&:�EYY2*\&����������������y��j�8�;b"~��Y�C6T
	�_<�j��
��2^pj%��j9�VR@����B�N�=��b��m��T��'2�O<�uj�*����c��Y"u!z1jn��h����
{D�R�3O[��Y�����Z��w�gV�B���� #�ue�2�rj��f�PN7uY�q�f;��.*z����_/|id!r'E��w�{���
�CEQ�_�	T~g�5/��6�8foT"����=f�=�����4Ps�B���ZXV�D�-����CMQ:\f�.R�#l��"�5�sD-t��g�HBa����	���]�:�"�Z���X���+�4MK4l��`��
i��_�S�������K���������;mC���`a{��B��+�j������'�$�~iM!���Hm����>���	�N������A��Vd�b��������e�%}��.��&��������`�5��)��5ipA�S�Em�����<�w;��������B(�-<��R�B_�fiSO�&;��G^<��g�K��U
o����9�`������-?U�
�T+���Z�����~��xVp������[�	���&�FaPOn
Ps�l,�\0�kGY�DO��NM;�~OH�k��P
������i�L�t���8|�U��4�=c�=��e�}�x�����6����3�A�K��}��,��ICn��`{]or���|H
V�O�c��	4�f���c�E�8���S[��-��>����lH��J�����vQe���6q�c�����P���od��^�"�>e���i�<2�L���BL�b�a`���M�+�Ed~j�)~�k��RQs�<���!2?5��P����=Ud��M�V��E*��
v����7Bz�^�;���D�QZl�S�X�����3%�"�>�REe�E�+��n���L���<^��w��U[�P<b��+��^b�1X3�%\�yQ�����.��_Z(�����^g��v�%��-EC5g�h��4���H�"�����F*���+R���V����Z������w�����R����}�������h���=�4�]x� �w�� �W��b�F�E�Y���vv���`[K��!��=���+��I���1F�v�o��a����"
T�
�7��He�]��P�������C7���1*[5���vQ��X�}9�����Gy4J|.��/T[���.�w�\�F�	0F����%�D*����%��%������V���4�Z�d�������1�]�/��7|��W��h�p�;�\�L������LW��'��c�^��^)��t�{�0F�pa�u�;�z�5�]>��o�vrp�V�H�`�5�6!gZcHM������^�I
3��R�T����q�5F�i����N�v���n$���2W��LK��L��$ygZ��i�~��FW$U��8�xq����[9�Lk��xYF4�i\��4��V��=�:�|��c���1��w5�C+�kGY�L��%R=�jN���;�JwSU�fZ�����������P���i!&=�.�g ����x�Z��{ML�n�Mo��� ������;3y4D������"U��vP9_7��W���������@���}��;�}����E5�;D��h���w0�����C�/-;�Nc��k^�wW���1�3��gUb���������K��[��4��;���w�j��nV)�������������5���������
�N�+�6����Uk�
_.5��w�w/Z�����w�^���k��w����?O4��9O����1t���gU(@�5s�1��9�zS��e{�k�)~�Kl4W&5OC������l�9�����y6�$�^3����� �g�o�<�lq���k��V�Z�*_|��V���5%������n*f�S]����2�����?>�=��m�A�1,F�s�9"R�E�8��&P��y�8s~�hF���Y�-Oz�l`������37~%����*n���`���j���je����y6�,�N\n�;s~���G��tnQr�u4�#;��g�v�{��J���,<��4�J��������k%mU��'_?T-�R�����/��e+�e�J��j���Ql=_n���2�<�y�k�n|V�B��+�u�_��Bl7�=���`[���0�G2K�j���S�5���k���d�A9��Wd��:P��S'�]���Eo������Y��@��-�]��y��1������}�#��m>���u�3K�U_7��#
�G�W�"7��1g7�������l���B_���5�<����I�H�>M��1����y��;]Z�^|���?1F�.,�r#��Z5��.�}a���jc�W0T+k=CR�F�����|����6�M#�%Xo8�]ox�U��lz������k���C-�-j��/��e�,�^��|�@t)�
���"�
���M���6;��LS�P][�+���F�v_~�b�W��,�E�I�����
+{D)s�h���0O�!�:H�[Y��
�U�����w�7�"����'SiF���S:��O�&j���R����;�
���H��\���2n\�O�P��w;%�������3*4�g���=}]�Aw%�SD�0$F�����������5�{<���{����������'y�x�w�������x�����"�/s9��S�C�������_���#��L����O���F^b��4��N35��T�@�d&U�y����{�1#�2/�����W�����H.����[���.��Ffb& ~�~/!n��Ey�R����
�c�����Y7'=*�R�������u&�K��:�P�����q����XWGi\�?���x�/�7~��������]I���Z�i�����l�����K��'J5R��������
�_�������:Y�=�\��s�j;[�O�-q�qf��s����WG��6<
0C��������������"���%�wTx
�#��8���w����oY=J�=���v\����v�5D?��C�>��.Z[J�yke8B<0���,g��D���.7����|�x�/yY�����[�����1<�-���)�	y��������=e�����z}m��)��]�@no*_�vfd����,x��p�5s�}C:���]��b�B�u�
�������c���)�V���iG�,!P�;Q�M�-R���S �|�-9
#H<1�Z7t�fC�:k��
~�:;��i���B�N�-Dn�HUR�u�:�@��z$����4�1�V
X����#�$�P��u��ls�mn-Z�-oQ!W�Q�R��}��r[�UX���C�RTG<(D�p�e��Y���#�u�H]-��x.&@H�=�6,YV���}W,S��z�*]�6|���6�;��_a<_j��_��b�Vn��E}���$W4I�jU����!���f��#���\[��J^n �_�"q�a�9��������<F�2�GN������G����?�_T>9���j@C�������7_��u���x�������2�$j�(�Ws{ppU]�#@+;�}�$UQ���Nm�})+�}�/"���������"��X�r:�+_E�����F=A5���4P��B�t5�,*�J���I�{���8���&8�pm��9�!��Ow���Ue���v/��.[V9Rr��]���
3��"+Z����5��X:;V>����5/n'�_Z�����m��9����q�2$�3E*��k�r��+�����36Q���U����1�[�vr��.&��cC���b����"�p���N�kl���c;:;b��_�?3���.��~�h��6o'��6��SS([�������TOj����}��}�@W�QuN�k���R�T��6����32���n�3��L�V�&������8*y�1%�)�n8v���.3&1��Euep����?�|����"t������T�Q
����+7p�����c�����#7��d��H�yt^s��J�_.�n�d��k���k��u�7�K��L;���+�����8"^;J=R���iSf\�8cq��n������p�j�S�|F��c	�iL��6:J�[���P)g\���xl	T7��iJf���}���hLw����wLc:|9�+��H�7d�I��k!������c�2y�R�T7y�c�������y�+duL�WP:���v��%��s\�T�_n�nW4#��@u5t\�����������[�^�!������R�TWC����y���8����F^w�=���������u��jh���9�@p0�����
�3��W��Sk!;�6x�x*��);��9m����v�a��tcj��P�L@�u\~`*,f~��S���@���'�'����&�����k�Ac�Aq��2��Ro*3��+������?�k�2�$u��U�K��5F4�,;�]�\�59���
���Z
��8�����_3U��� �gl����Z���b��;����A�z���2'O���1�����������.[��\����J��b�����$5�	�����G�I&A�� �Q�|S5���f�p��-r������+��'+I�y����J������W���6�tQ����������	(/��G�<��3�]���r�=�K�*k����#1W�����2��|������^y?�B.�l
b��zc�;������o:�j�Z�VV*��S��-{�tf�����}�V���B��W��V�Krw�D'=w���Q�VH!�5q��:g���k\w����=��R�q��u���y~���cz��TW1���x�v�,��6��U���,�;�����6n��2����������j����z��7�	��=��'�Q=*���&.P����,t\N]@��l�N�^��/��v�fK�j��;�1|�J>if��9���/��%,L����\��x��M�������6�d���,F����o���,�,]�����%m���tc;Am�-�����`Y��%��q���U����/5����5uE�qOG���(��u���P	Z^��C
�/�vQ�MM��g����`�JF<d�:��1Vr���7J"�{���~�[�������(Yo�8�;Rg��d���7���[������J2_���xw�(�!Y��^T����������<e�:�f�������*R���A�S���K��%i������
_���qW�S�k��A�H����m^QfnuR?|�	1�\#���o���6K���a�5����^7b�1K
zX�lu�`O�b�u�cl�X�lF�l����[�z�o����E�/jj�9yNY������_~�����rz\A�q&�<�e���]�vE�'%����r=����w���D5D�*������y|��������J{�����3 �������Vb���}�3�y��K+�}-�y��6y����B��������h#lS�0�������$�S�A��x�8p��"�q�X�g(����f�V�lx���^Y�W�3�E�������0����vPGl ]l����P6�����e������������.�m�#0,p=���?���F �a�}s5��d����ki>T���a3�����=e�_5c(�Pn7��vL�8D���y��8\����U�����t������*C6�^x-"�;J��������P=��$����n��
kr�����u�����2��4�/��C���w�!,������E�7t�����7;d��9P�S��V�����|�����K*����Zi�>5;w�
t@D��6<�������,�a�����H�D�Q�6h�B�_Z(;P�N��g����EM�6���Q�N1��N��
_Ra��!�F�T��lc��3�7�k��i�;zr��Y���6H��
�h���F��B�M�
��j�gD��q�������]?
W����x���������ws�������9[)�n�^O
ws���SZ�o�s~�J���[R�%���S�g�����m������?��_�r�������,y�=�y�] ��@��w��3���]`��@��_z��/����oe(��.P~�]����Rw�*u���u�]�~����{���?���_�v�w�]�. ����e�)��|�]@��. ?e����J��o��v���.�f������mh?�.���V�����������.�o}���.���~E��buF���c�u��3~�����)v�gW���o��6�������9�����%�����|�]`���>oX���^��r�6�w����P�6���Qz����o?�2�+�>.-���V�����.�*nRmf������v�����o���}�G��������!?v���.�c��~|�����c����.������J��nI������������f��x{K�a=��>���k�������\���kwa���"~�B���~�~������Yh"��MG7�%t]E��0D�F�i` �	���`�2������FqAt#D����)������A9�(PU��p�
��&B-UE��T]�1T�
U���	|�p����h`@0&������afI���t��a�4o�:�.���A��	���:�����E�]�u��������������0�HG	�	����N���^.Z�5\7�8\:�;\=�>�>�t����<�|"��������x�bQ���������r���[���A��s��R�1{0���G�W�M��H=��x������.�j��b��qZ�5wE����Z�w�x��gb�r�j���r�*n�.Qo/u����.Aj]	��b���l��--�L��K�T�Y�bk���F�Qk/U��
���H=s_�SN��.��������ae�����D���}-
n-pG��5C�3t���j���w���]^N��?��Tn;&�u)f�vhp��Oe�K}��_n���X���������5�����s�������jx�f����1�i
����]�C�g P�C��-[Q����K�*��e^�(���[�*[���Ay���+n$�Mf�b�:������DK"U�r��Y�T��]�V9�>.���E���"���Q��Q��������d�����TwH�.��L���[V
��MD���>�J4�1d��#�������C�|e6����g���6 y���@���G��V�I�;����<��]�T��x���;"�B�2���Z�!L<x~�S�QRi��ZE�����W���:V�4O���#�V?��/�DGd1��lAd@�#�p3��K�������N�}|�f��b�w��z��a�����K�x�������_\rlY���e�^y�����Yw����l�<�$l�����5h�bs�v[�'�}���mDj.���1�t,�5u��Z���7�V9��R�0o�3�.�����!9Rk���[�%���k��*��\N�W�B�'��j��v���d����h+�U��ke���gT}>z��z7��������1n���Y7l���d��7n���+����R_��-��&l_+&����i�(G�����Je0v*��_2 �^����Zf4���A�-/6,����-] 7Zv�L�I�������6��[uT��c@V�
h�v��2����6"U�S�JO:@-+��J
(r�eg4 �	���0V��5�U����c��cD�l��vh@�{��i�k@�D^�������-�G�-3�<��dkso5GZ��������j]Zf|������^s�R�������(���+�`��`GdS@�H.�3�:#��P�p�C�E�0���X�kw�|L�w��\��m-0���!�0*
��F�;��+���"o���;����7�,��4^��O����?�=�C�u�|B\��+l�������A�H`���`��`���B�V���z}�ey�!��lX���67��`\�>M�np�)Z��
�yU����;����9����J���`H���>8�lY��`��#����>k��FCn�����Z>����y��B��{�!�>,���AW�qVf����Ct����+���,��C7��a�,56�W*��2�r�Q�)���+f�>��0X��
E���u��*�-K�W�g@e�T',��[3~7[�5E*���U�8�`�}���0X�j�����9�&��KT�Km�����t~c�#
�r��a��2��u'U*���]8�W��"��XXW���2�6�|��u��}b��SOP�C������|����Xd����	T1S|j��*8A�2����4)3�^����({h!S2$�T�����I=y��!r��y��j=�8��vs��Vx1W�l�7�r���!���Sk}-���a��+_?�����u���v����i��W�����U�T������H�SH��%�
����8]����h��.�)�f�����V��hN��h���1����3������$�2��r$��Ni~�?�����lOB�W���RIfu�K�5|O���q�y�����j�-�NHnsp�&��4�@�����{:q��NE�0W���^L��N����P�r��{�
�~�5�]YQ��4�w����mi�/m@F/
j�����f�D~����I��5���	��7�>{�S�j!��[!�m���x��`�K�_����a[���`�5oA2FZ�VT���q#� /��G�D��"��G�ua9�	��~}���6��8�8+9o?����� >��]p����Tx�����e��5�L��9����g�{w���G�v4�^�hj��M���R5���K���4���?��_?0�����S.���y�J��q8T��Xg�f��?;��|i�����P�N��Q6'm�w�MJ���N���C~~2}�1�\�z����DV(
bIv�C�r&�1��Xv[��pg>������Wf!�1�@�
�x����1��:���8��'�����P��A����L������;��O����p�E[�N��X!N�r
����x8�&=��/�n7c4��#�|�%�`��M/���~�b���E�.�/��6]����i�=,��?����������X�r���TR�Kg/� E��9?����5�;���S�N��mPt*����F=;����P��J��=��������fQ��~]�:���������u8�
�S�v���e�&�C?�����E�W8dz���5@�����y�n-;������F��h�8M��j�G��
 5����t��@;J����L6(r~��������2���y����_lj���K3�n��
Cu���d�OGA����s��h�O`�%?Z�nkDjc�������_�yXz��f^�4l�T�1`^�����Kw�z�#����;,���o.��s� ��s��mlw<�!P��
���k����V�!��3R���t/y���p#�[V��nyz%��@�LBZ��	�xe�u�
F�f����
��~e^qB3���~�R��~O\� [��*l�/J��2&�����yZ�sI�9P����x��l���t�P-P[�����b^�Q8�;��b�pj���*B,~����$U�nA�~w�U|^?����P������fz"���T2z��g@sFjF�����f���`�~����ms��1F���}��u��xz�pue�S��]N���F����w-~��_1 �G�p[�O�g�RN;7{UNv����&�p
��*h�4}�@���C�=��8�u���E+�d�������`B��do����
7V#3��|�v�,�����������z�I��'C%�-t��B��n�mq�����y�'i��������Y�r`��h�v���j**�6�>$�%���U\����@[o������h�C+���������W������NmX[A,�&���#���3��hohag
#��-u��VP����������Q���h
iK%����C�����
X����~R26�����kN�%co�h��d�
�/��7��?��=4!��.4���+��:u`"k����h�@K���)v����������u ��,�/����;�!�~C��7p��i"�����k�O������m��0�+�T�Y����E�%h�/v0;Dv�\���5�&�����V�&�C����
i�n%~\�����O�*��P��3����q���9��g�~����I���r���?��v��F����G&t�|�Y�:[�=���V�����u��g��9",�`�o��c>����,�@Kf���������x[������KK��n��n+HW
d����EW����	�gg$J^wH	r���^��?s����g���0�m���w��0v`3���@3v!���hz����
�=��������Y�)!}�ix��O�]���u�^������4�d%G���/��Y�-�����"�+6�^8�i���
��6Mx�!��3��!�m�������j��z�e��.�g�|C��cyq�NW��\|H�����)��qC�6)Z����hP��,���9��m��S	m!
9$-���O��
�|p�3Z�!��-�V�Y��p��L_t���a��.u{��@k%���N�G�	w8�wi������uc/>�QN��3�m]Q,���
�������O�M��+���c!��L������iq�`���1����5�5U�eM��:l�����1V%�n�>�#����GU@3KB��_@so���H
�.��C>K�����9�A�^�@��y�s%o
tKm���=�e)��#K�'v^�Z���'.ui�k��p��^��
i��@C�������(/-���3;M�w�om
�#�oZ~hu3[����K�����n����6�)H����2�#��:
��3i��d��-�4�C��8����)��d��[0�]�#fh�;bXr��/� ��Ge�Q�nNi�3z L��@�z�����S������7;���I1'�����	R���hF)���;��#��p�Tz���9I��@`u�9	��cU)�3'�=�I�N�fx��h
������2AqN�l��yF��9�C>��$�1d���8'��1Bz��e�;'��Z�}9f�B#%{��s��K�����#(������J����%�>�t�Z�w�=����e�n,��m��8'�;��1n�XO_���9�@�b�1,}���ha�a���FEh�������n7��:���<���F���h�;�:�jMs�@Z�4K����
@�K;^��z��	H�{d,���������%�#t������|�9 ����r�WZ�>Y���O�4���6�*�w:0��|<���Q���hT�7*�\�Kl:}�w��l�9?�V���h ��
@6��wbm"��h1_�F��="D3�$r�1CLG�L�Y3g��I��ayA~h��r�<u��WL)F��t'�V�Dz����I��g9��<hq9$L"`�����^s9$L"�<�H���j����-N"G��!i�N"/l���&��	�H~�iqy��X\B�0�bch-��0����i��u�%N"��I��X�D	�H��&�.�S`�3�&�C��]����8�$�I��)�(�i���8�B�`�c���a<����EK������L"��h�
�6��(��a}����f�,��I���$��@����rMB�(o?m�������vp:��J��5�\��Ph�#9FW���C"�6��h��������m�����B�{�������
��O��0VL��C;
1W�,����/c��aT���x�3������Kk5�k+��&]x����g����[;}����9�������jvQ��B���NrW}R�aR��0�e�/��P���Y�}1���l�}!?�u�u�����7f~V�� [�s���46�LS�l/~��V�{�K+hK����l��.���x�i�����h���/:�L��,����1#b@2�B���r��8��Vh�w�����V�2������X�X�Ri��,��Y�)��3C�N����YB -���i�0��}�N��$�������e;<�<3��j���0CqW���YpOQU�6{�V"���n�]6�&{m�=����l��Y��O�:�;��E��g��������gc����Nn��/�=F��0"��5�e����X�������a;���`�Y��q�:�[�[��7
��-�9��s���c$���I�����O���[
h&S��d5�-�D�'�+��2����a?E�Wf&��������O2��q��j�Wf��<�L/��03�jv���Ez[$������H��4���8�3>�u?<7/��"/���E�_K���'����^>N^������-�0ro����n��<^�O����4&T0`��o�cRn�����^
��0-��z�N��y��p���%ky`��������a{���a4����C�������������QW�G�m� [c�`Y_7Vuc�|r;����l���~7X���&o��~e�=��f���x�������\]pjhx��p ���Wp���:��$Z3S�A0X�:b����i�����jzH��Q?},�TS�d5��^M	|���M�m6�3��G2������#�!��7��)�w�|��Qa���mX�O��,`��%�5�-o�������U�Q�/���-�o0.��������?M"���Gz*wAj��S'���%���2N�����O[T����[m�C��
�T���kP�@�����K����Y�x��Pp���d��������I�I�6�v�W�0I[�=��Q����^���l��
W����n�vxf�Qp�AFb}�7z1�_x
�Km����J���N}2�h������!�������?��%�S$x�E_����^�l����	����-�qk30����@�rfm�e��5/���)�\�������P��3�`���gb[���
��Pg�P���K�?�Jv?�Hk�G��x�jh%i�m���:G�(�:����X;�Z�u;+���NY#+��|��"e�(�:�6d�"*����'rpKpp��P�3;����X���b��g�D��gzk�����^B?F��0[5�C���l�u��@k��$��-'5���_�����O������&a�3
u2\��y��aVE?Hc|_@wir�J7���� h#z}0.��������1#���������$����7U}����U��@]��_8]�*�mjP��7�*tdV���]���P�J�k���'s�NZ0�8����������������xh���C����I/���G9����~�.� ]R��Qp�4��7��h�PU����P�����B94���w�L�����.*�h�����5���qz�+�{�N^��(	u�B���^������ko�����9��6~��=�i������F���U>�MR�]�3�����t�R1��]�4�Ta`Zpn��5!T���0y%�����2�������t�,H�l�O"���J�g��K0Xx�0L������=���W�����o�Zzi��PM)���=������O
��b�%��	<-9�-��S}p�hf@���i�`2#�yj��`��������,	<5���>�o���l-�5���}�p��,v���G��DM}m���n� �n� �����4	n��b5+�������q�
�d���
4���a��<�(�E�"���NA��DN�
?��C5�sX���e��E�A���`�s0�v��I����J�;��_yZ�_�i4�nK��'��t�b&�mm���hq�����y@�s2XMoVt��?��V�a�Os
<m��<�������/��.� ^� �^x���t�@�!,8������g5#F���\�u�h�������-�3�=���9i=:��(S���>v�0S�����:�!��r�&���c=<���9��af��F��0,$���h��6��{�c���r�?u�i+�&�9�8�1��g�X@?�u8|�3�E�X1A���[g
�����@C`W\d����4Z�X����f��z���`��pv�D]�D����&7T���=)��������C����D�mL��9-�`����n������y���C�y�R�'Zlgz��R��Kk����/��-��rY��^I��.�<}&�}�-] 2���?�w�n5�������okT�F��R�h!��y�=�
�i�T	7��&I�Pn���-a�*��by���j����SMY;�e��%���h3�oK58p����X-q��W�������Q�1S�9���(��?�����Z5����8o���<��=+y�	���z��}���)�FH��H~x�%��3�����hNH-�'��D�-��(�H��hV��*_�&�B5b	��	�e��@+x��pz�����lJs����xd'���f��^� �W�h�W��O�9�o
�\,q+�,��m����
�A`t�2>;��H�v�Ip����sV4�u���kUa�� ��F_�r����������40j9��m9���j��fz5���h���sC���y���4��+�
A��QIpTY��`�������^T,a$�g�d�Q��X�j���,�gvM�j�v��f�UT�b_����iM��\=U]��|�:S+��o������MlZ.
��7?��J���KE���Y�0����i�R��0P���.v-iJG�`�lk�]J�YJ����G���6�v��l!{��5��]��:T��]���Gi7��h�:Y�}�![��=���I"E[L��)Z:
�M��=���)7�:���nY���+�H��{�T��������X����=
���������c -�)��I��\_�'�
}x�}��X�O�i5z��Yn�Y���y
^N.��#����qk�����������r�?_+d����>*���U����c��z�:����5|@�3+5[b~��C��5��qS��P��B��c���r������:�q��=���F�����Xz�\	���H��I3�Tbb}M*O�m���j(�	�Q'�q�4`�|���L�C<-���u��;uw��Ny��"gX_��m����Xf�K��Y�����,e!4'M�[�3L���/[
4Qpg����`�qWOAY,�^�[fHH�~]��+�3yi7�����&��u������������b)>����K������E�p1�MP��c��6�������hY������!�9�C���O�T}&������gjg��B�5=[\m:���4�$���@y�5�Y���a���]�B�?���M3��������i�iK+��-?4��kvt���)�v���%��o��%��D�v	��^B������)��p� �%�|.!����-�_������T�_I����������-}��������������}.y�>�G�r��@�y���.���] �����y(���+e����_f9������e(?�.PS�j��@���^w�:�.P��������������_�����z��o�����]@��. �e���?�R��o���7�h�@�mh���[�������������v��6�����~����]���@���5�x�-�����?����z����}�^l���������nc�o��]��?���.w��� �������}}����f��������wpA���o�����������Q�)��
����\��������t.e�;����f���������q�c����\�H?�_���������m�o?v\��m��~�.�l9��&�����WExId���5v��.��.H���u�����F>xy�D��P*���~p����f��h�6�W[�%t]E��0D�F�i` �	���`�2���s ���� F�T�QS����)���CG��LT,(�GM����T]�1T�
U���	|�.������`Xjd08�n���%M�
�U3�I��a�0{��8upt p&p,p2p8p>��>�[rw�7����n�.ps���#%�&�:S8V:Y8\8_8bze�hu�p�t�p�p�p�p�t8����)����=j�����{�wG-��K�s����������d|���
�u�G��B��������K��h�Ip�JlhK�rYs�R���t����uJ���������G�/��/�3�����w5�J6����{���'G���@H����{��M��@^_g�vV�Q����P�C+-���'9���_-T�������h�����6���������u���$7�iY����M]�5�������S
\[���R�)|~ZK�4tw����Wh
��&�9�������ZLJ5Z�J�|�DM��}������3_�&���P�a�*�OR�A���#�j%�^��ZM�������5y�l9|�y[Z�����6����j���a�����H�,��/NO�o�<�������-j�����q��������|��f�oZ������ mT�7��^��z��w��`w��%W��������i�N�T�������?�����q����\2�a��x���cDP;�?�v���q��Gd�U��3�3��`S�l*�15���d��&Ho�h��,�G����k�a��Xi�$/`�{�/�u�gWa�Xb01�-@uz�i�C��H�r���� ���*Z�bl���;�
#x��B�;@i68aS
�8����*�����ZS`��=E��4_���Y�P��*R�?����t��$	�M� ����W��+(���6�He���E���I������w|O�/�����v�j7_��t~R�����%ZMA|:b�_A
B�<�0�_�g�`%K�n���;7w�C�N��
������������O����=3w�
0{���y��uJ��Yw;������x��,���W$�1���������AU�������n�CB�����o�R���K������1,���g��+��m2�h3cXG/�7��?z_��>������.J��P�%��A�n4�_��v��i2��-������`�����g,7�1,����.�O8��a�!�bM[���lk��6�SnU7�W�?Y����� }
�Bc�wK��U�k���n;���v��`�������/��a����F4P'��������u�o���!������:}x'����9}�'��f�|�����r��5�d8�
�kZ�����6W�J��<�����< y�������ZS���mO���e�~�vi��~Gy2���2�/��?�n��y�����o�]��H�|������R�
��n*G{���=��!��d@�CK���5�x4 o-������+H�������8�=I>����|?�`Z6��y���z4�
�k�P@���7���s���Z�i��}��l8�+�9^ ����r�g�N�K��^�fn�^�
����|�����u�W�l�����l��Vx�������p4�r}��#�/�%S�����<wQ�e�h���4A%>����yAj�tv�:��������+�P����naz%���m�K�(	�������m%�r�$������H�-N�{�R~
�P���D����H���K����X����]���Pg��^�5�F. ��;5���lF.����~7�)Fj3��P�?�#k��n��Z�Cs9�VA�SI������^��MQ��A���`��x���-hCw�-��#k������4�A�@�X�[6D[��� �Y{��[��������C|���{D{h�z�O��A�]�NM�_qI@��<4D�x={j0V�.>�|��sp�%����}��NT7y\���\�&����E\�����Kg!w��PsJ��+Fs�ed�F��MP�/u��Pk�Y��(f���%R�D�d�����\J�}�x�:I������xd\Z&��H��-;��)�|��b6����<�U�<C�dR��n��}��mF�G�>s���R���B-D��N��p��Mk����+*@����T�i��{�c�Jf[����/]-9U�suI�����ugm�GP����4��q7��+���O\#5�H
_>'�������>1��J|P1j�n�'�7~K���ju�s����i��C=L"����������������:U��C%O�t��)Q��~�^+�P���
v�(��^��[aJP���2��G@����/������mIk./�c��H}��E���!~7Gjo�&�f"�.q���������V�J�����VR���te���2���-j����c��=�#;���Q��Jv���s��(�M}�B���Q��`hEN*)Ruh������D��
&P~�H�����q^6vj�������ui�(�U�FGjpADs����6�1u'�K�G��l�Wd��������0.e��0��ci���;&���.�ukE�����J�������������zTr�f���JC]��e48�����:�����8��'�^�q2LpU�G�Me������i}���@e������2}�)o��>_jGM������
���J3�oZ�=b�{�\o���I��W����nMFp��.7�G�~W_�'W��+��5/���\���3Ys��n��P��\UG�6����b,CT�K��5��1����^��#���� ��h%���q����1-�����O\T:�E\��	��$�pN���iG�[��������Y0m�t����&�mo�e|�}���7�k���"fX��[��5+�-Me���X�2���@�Q�T�B���v��%8��e�>0�{f�juI1�;�bu3�
�t�����}��R�%�qj�n���x��2>T���;��G�Pu1u�a�xe�u?�mu��@$������H8���5�K��n�����}���CQ8\�=z�>m����@6 $���y�rh3S@Z�w��E��d1�z�g���xZ����U�?L��w��3m��>@g��q��,�=e�V��\���������i2��0�������	�k��
��\i���f�C-��1���DQW�T�B���]b+9B��7�wC4a���-${*g}�O�*fdi�[:	��N��e��P��T��X�����f,K���[���:R�*��:����je'�Nk�"5������N�@�F���E�����%��J�*	�����4;W��![j�---��Y��TT
��*jfhsq���^�D��x��]*Z����=�P��h�W�jV����5}�������_�������_���mLQf��R����l�UM�0Yx����|����=���N�$0�l����>dGle�T�([+{�zG+�x�T�
4��}(���b�S�2,v�!�^��5�T�1��������TWT�0%����Z>�3R�����;��_R��=4��A#uL��luz��t*���K���N��y������@D< ��Z��J�*W��l�(�i[��i�DB���K_.�	����3)Z&\Pg7q�j�uA�i�����Z���P�H-B��H()uiM���l�V#Ur-�
���qH��/u��i���X�����-��x���#xZ��6�a�t�}�V��:�-K�<s�{�A�2���@��||t�|''+��2ml�yB7��< ����`	�Lx@��M"�����ue"�����[q|�0^}�9h,B�+a�|�������/��
J��Q����rM�6��cm�/�g@`�a���X�k�3�a@�����bu�|V�Vww��������;T�Z8�b�;��[Fc�vq�x�<T���� }������Q�E������4��k��D�]�5�ye2h��b�����<��R��e���[��Ed^��-R�Fx��g�������R���vdy���v�<�Ne�T
^P3������=O��*c���{��r�Y��g���)�-2���T�2�oF�+��^*"���Q<^��g��U����z���i}�r�)�f$��j{������bYD��Km^lc�2�(]q��=o�Y3�n�@7�v�����=%��u7M"Fd^�E����R�G���0w��Y"Z�c��-����g�����QRi�����P�_��k�v^#x  U���54N�yt���j���GxB��������J����3�������TF����bXxV��w�Q�aE����je��&��u��E=NP�E5�-���j�H�f�����iXZ��<&��w#��z�����63������$R�z��$]��%����+lU���,����]�~���X�`"g� �$��Tl&�2��#���������tE�p�/6��(L0��/I*=�[��9��`�u��im���6�������p�V�H��fZ"&�3�q�A�f�}|��w�%��q"���D*fZ�����-rh�yG�	�J2��Z��+Eq�e��L��$ygZ�1�:(���3-[T�lIf�P���[fZ"�D�,#�3���h&�0�2d����w1���������i��
�\QW0��3-�w�%xa�3-[����0�:��3-�8�:(���T�e���VKf����H�+�x��
��a-��l��%n�.�b_|��s9;����b�K��v���������J���~��h�ja#�A�/���lf���i�xw��E=��A%�wH`#��.�;\#T��������j�LJ���z���.��������L�����,��)�|mT&5��l�C
�;�!m��w�[s�;$����e[��xg����e[��#���7��y0�8�m��/�����;���w�+�[��x�JX���9����[�3�VlN��s+
�����*������6cY��o�-��b���-F������~������:��O��a�����9�g�
y����a$i%��[yg��*�>3g�����3���C��7����E9�T��/^hG�;O�����2��[��#|��L����k�a&���Em5��N�����y��\+�)�Q�ic#��Y����s�3���b�}�K��>3��1s>�fh��v���;��=���U������*�3F;���tf����rD�3s��C@�~����4����>�������������U�c���I���Y{s��E�/�����9*�������d�c��D�Y�9��e�Jt>��M*7�Q�) ���s`����uP�Ko�ClU5��_������9���o��RUe���f��w*��q��O�W{����e������:$����y��w��"�������m���b����V�W*�D�eN���j�bN\�2�v��,����3������N5o���G�����|,�8�|��/����[��x�c���8��c�����OH���E�yDG�W�����On����#�X�A��������z2%�z��g�����QD}{Oq��<�G��{����B���q�2�,�)g��>B z�o.��0�7�������5�1�<o��{2�Dj���u��������\t��r�e��5�Y������G����T����<Hm������r+;���.�m��'>NL�}2�F���.3�W�I�@�\_�V�-&��f[o8�?�\`�'��WW�=:�I��c�Q��2��b��JEP���?���|�����O���5]ul���'s�������H���#w�$��]u�1n��~�w���rw3�rL��"/��f�eM9�����N)��f8dh�9������i��d>���/�?�����|s${�d�����P�2�j����T�Rs*������I�}��2c/�}#�/�1�����F~\|�)�\���-!n�|���?#\U�"V���{����8{@���m�;>�I��v�|L�%}���!\8��a�_����Z�����M��o��)���D�����1o;o����	^��'�J5R�m���a
��O���,t�.��u�#�U�;W���O+R���*9�U4�/�U�����Q{���a��H�Q�X������b��"�R�������J"��k�~G�V���)K�q�����)_nV<c������zm��:�e���?8A2
�x>��s/���8�����g��E�y<��p����������U>9����e�[���O	d�C�6�DP��\��"D��@�x��5M~R/*Q������,x�G�����y�K��oBYo��|Q���"����u����s�x�[���*\6��P���k�����k����]�%��2	�H`u�jXRc�b����fq
�s����89�!��^*%�CV�8i�Hm�H]u�U�x�������������NN�B
Z�z�:�=>u�F/3l�����(��S��}�!�U�x���*�P������uC��M��a�2cS*r����� ��:���uZ&�*���2������rH\��'�
��Q�KT��7�I]>uk��VT����� uZ���kHzY3���w�6�������� ����
�i���/��2�f������	J2k��-����C����N���f'��%}����7_�:�
�����C��\|Z&�c����{%���?��Z]��8-��MvjQ�$���}cE�/j��+�/��JxJ^��?#`�x@$�
WNGN��A������T�j��,/��m��3^e�v�#SI-��v���B�d�&8���������C�]���%�+�$�������v�9���]��M�f��f��h�7�W�C�`�����7��M5����<�X�.�nE%��,�6�&)�t�x�H��=b��\�������$���K5L>�d��v�v1��d�N�!:���]j��8j���q���v�N�vS>�#nv��
��1��Rl�n88�]I���#uy;����W�ZL-v�-�������j�v���~���jY�c�\;(�3�T#�f���{W2����C�>u�L�u]/+�����b�����c��"��2�v1���P{�n�+8">3���]��
QN#R9'��R9���P ��
�X��z���'����_^�y]���VG�u�X�6"�Kp��k�Q����['#�������v���C"���s�vm���������F^9�m(3�����}*+�Xj��c�u���Y^^����~����6v�2�(.�)�� b�?"O�%�%P��:���%���-"��g���1�)��^g���T|9�������w������k/T��5�����9��k&0�����f�]��9�p�������	J�
]T��T�q;v�����+��<$��@u3t\!9��\����]����"��!h%Qj��fxb�j��O2c�{��v\���"7k��P����������4�#k��<�c=F�,|e(}1�k<K�l����W���E��uO�ei�63�Q�N����P��� �a��#�]<a��m6C\��Je���@9;g������I�eG�����6�����i00[�9�m��{���Gh�]#�J�'����\�C%r^M�+ ,[\\4���g�(��~����V$Q�C�o�y��_��&�H%��]3b�[4�^j�T�n�io��^s6�l%�r%7�6LR�g���}��$�$�6'�/�
�t��B�t[��(VT/6y?��VIu���e:��S;�~7n���[�Xm'���=�3Z�E���O�a{�eE���uD�|��1f���h�-�w��*~],e��B�=�6����u�t���������#Ja
��.U������lP;�!��^|G��RK^7+��s!�0��e����Lq�$j���3����u����b�Krw��nz�d��@]�i����g���K�������+S�Q����d��\��u�lRyZ��fu��S�:��@�&5~�B��D-���d�wl5������2����W�������k}x���/�a�b�����L`xr�����z�K-�T�q�u��_���e���]_L��D���x=���{w��lif!��w])�boY��{���k����u�����<�m|�����k2��X���C-�e��l�Q���I��,E����${��b'���e�630�����ZZ,��\�����nvK�J��Q�� E��������KiH���C�/5
O�y���/:�#P�cz�=�I�����z�Q���K�5�?�;]Cu�����cE��������7�l�r�=}�

���vd�.������b��le��`��"�SqqW��e�c��-��Z�g�r����d����(�H-.�����[B�>��� :�^7���cfEU��7�*[]!������E���'�R�!r�Gj�o=��:F\S�(�EM-:'�uSf�q:�o~�qy����M��$�����6v��	��^[��y4���w����)���n�=.uy�6�%E�/7&P��S���f���/7�H<�|��^�����s���+�_Z���h���z��CE]����i���+�6��A1���Xw�Tr�����g@�o�x]DuD�4�l����_j=r���������}��h�B�Z3�����1�PG|�Q��^`�l�_uG'&�y��2Y��y����;�'8��������8�:��k�_a�+�z���`S[�MCh|�u�Om���C��_������`�C����<�T���0�y��8\�Dy�����.�&�b���U�J�zBJw�lW����uX��3r2����R�2�ka������;����yi�j�o�j��[V$�,�/���s��/n]���N��f�x�>��o�_�MRK���J<j��Z����I�����0Gg�3w��\���3tf�R����\J~5��Ke5���P�HE�S���m��PG�Z��_u��1j�D���m<�UbY:A������IF_�����F�$}��P����l=��j��4��j�gD�y����}W%�h����?wsNN�x7g,����9��n~�����Ov7G�J��9���)����9�~��o�-����d�����3���[���~O~�$���K�����w���.�g������y�?�.�k�v�)������2���G�Vv�����g�j��@-u�Rw���.Pg����_����������k�z�U�����]v���79�e��w�4����8Wq�+7���7np�f3d���v���}��g?]���.���]�����Hce�C�.0������6�����?~�����]`sd���v�������os���.0�������*k�~���V_���kX��.���]`�\����.�y�l����F����O��|��|��m�'���S����v��?��?��]��o���������~�s��{^��o{���xI��x�K�e�������c�1L�����sy���s�k+����r�������.`�5�_i��w�~��������Z���_�"��_�����CB�L+�]3�4����,4���������������60
3�X0W�Q�X "���!R/DM���T(
�F�D���A��|�D���(���5�JC���P{5��cn0
��R#����v�?�,i�0W���1/���a�0{��8u��g�'�������%wQpWp]pcpipo�����7�?�9�Q�i���3�c�������#�W��Vw
�M7��W��!@�����#�M��-}�O��V�������&����������2��w��E���Pu��T���?�Gb3_i������'v%�8��imU���^��P�C3�L�o/{Gv���9N���G����j����K/����r������c]{�����H�|���v,;j�����z�N�2/{pjbz�9����^���7��+E�9���������U>_�]�I�;�@V���I��K�N�����^z�J����?��DW��W���5�vy99S<z��m�d���3(Fe��q��3
�fh4�������='3��u��*���7����:����Rwn���0�j����7]|����B-c�����u�H��y����2j@�R���u���Q�w���>T�	c�kP^s��.7�����SlRk��@��~�v�
�}]���
S�f��9�2Lbr��ZE*��.qR� #*������!s��[]���MU���Q��)R�m�H]�	����_�*��ul���"\fT�4��lhR���T���	��������\�"�.��A��h����3��H�
�Ht��B;op1x����wb�c�He������w��`�g�<��@�C�x<��n���6�3z��x��]S�J�&m��`=H1^
V�~�_4�U(�E6�,�-��|dX��n�1�&�(7���6E������\ER�;�>l4l���g�H��R�Yw�jn�#��5�����{E4[�j?��������#O��(��^<0hv�/c�(W���F�iu����	��	�8���w�o�!g�*�|��6��M�U�$��4�������
m�6z��
�K�{��:Ej/Q8�����$�xB�Y����j������d����\$��>���V��U��k
U�{���<j�6?������;0V36l����lRI��QW�q��9~�5}J���oHg����u��U[������k�!�c���/_/wrLU��p�XMdBTn@^��eE�s]n@�N�)��4��=#7���k��U����M��N��^���z4�����m�������*a���d�
�q���.��a��f8T�V���}���U�M�V����|9+��#��:�-�4��h@�n@��+��+������h@;04��-��l���`���S�5�a��x�2`�3��0D_A���`0���
0��t@5��V@uFj������4�h`�m`��w�H��C��`�mr1���P��
0n�0">^�Z���!������7�`@�l��c��`H7��g�����u4��`\*�?�8��2���0�Q0�D�
!D7�������t���(���67�L�PfTW�0pA��+�U��/'�P&��vq�`H��>�m�P��o7�X�T.����V���"�������|-���R���g�=�(�Y�C�}0���AW�qv�K��>��g�`\]A��/Y�!��`��8���+������U��a��u�Y��q�X���1����/u����W���R��l^o����fo��T�1�L(6�H������0���@$g��a5q������x�
AQ�Q5������2Z�-��,�^nt�h�����P�<D,VWD+RU�G�U�)q���/uD*���������"���l��#���Z��T��5��.�\�T2x��dF7Ny�iRf����l�l��2�e���.uX����	�sR?
tl�\�p��H��n?zGT�K����c����N���n��Y�%��`�w����d�����	�'u�vNV�n�>;����'��������t��$������K$����Hf�/�7�v�|iI��5#�d��$���+�h����c4]iD
#��B��T�_Z�\
�<%��94,�������?�=���z��3���K�5�O������e��j�������
^��y���[W
��}�gg���T��#���K��Z�����VMV�@+ivK��@FGT������b������QhK�}qh2z1Pk�=d5�&����/^M��	���u���*�p�5��p@w[�m�6�x'��`�K�_����a[���`�5o"C;-]+*�c��G�<��K.[W��_2	P�D��J���(O�y>�����CxK�,��Z#������������h52��4{���_V�]�������p����?��Yw7�_�������r���f�K'e*
�����	��hm<��i��h�Cuy	���q_��g6,)�j{�WA����4�yZ�f�3�Y�&�zh�f�L�L�=f���
�r������:	YAZ�r����Ws�c������t;���*�n�)����F��a�X��l?��'�����PI��uuu�=�]�Vx�=mLG��iS(6����.Y�j�5�|�X!N�r
���q�(Mz`�����.����j`o~X��Wi�]�J!j--EQ�8K���tY���f�7����L������}L:���X����nA�yM%%�q�b�P��/E�F�����|(?9FS���l���A1P;jr}��O��Q���>K�����5���������E��S���6�N���;�t���k�#���kY~�C�WX���q-��Ct�080\/G�5���iZ������4.QP��<�8�\6.�p���s)%����A�/t���8��9	2����?!I?lR��'��q��K��W*�����%s|:
�D�>��l)sA���i~����jb�������_�yXZ2"l�O�`^�����qr
X����	��������7��q*%�x��x��1�9Z�������6�7)�W����6��P����F�y�"��������8h�r/�+w'�����������<7�+��/��q��SCW��D�����'�3��-@�vV��2&��Z�lG��$�����9aV��ya�m�P-PS�����b��Q8�;���
cSIwU��rx,E5�I���(����$�=e�V��\�9�uU�zr���[.:z�H�h�H�������}��Hyy�Si���\�C-��u��xz�u�N��t9-�6�;�[�����?X�d@�����O���j5�V��ZiX|Z�!�Y����^�-�v���J����q�:�����F���.��Ua��d�t�S���
��>�t��9m����:�{pV��YL�E����+��N�-���tw���Y�'i��^���0��2b�-�V���4�����FZ{hKz�$�%,�]�����j������)����e����!Y���Ot��
k+�E�$+-[;������!n=�Z�]��wKMdB��\7�����a�6;Ac�6���*/kZW������r����;T{�l!`����������|����n���C$(�����E����.����b4�`���:h��/�O��](���XG�j �d-����~����7�������e0 ����<C{Jy�Zz��
����7K����D���\�awU����U��A�;f����Hf�A~$��h��B�?���	���O��m
��5�l���\2)���m
�i�M)�g����Io����V���C@f����+�}(j����r��R�b�.��0|�]�v�_�������������R�'!l�_Vg����?K�a��q�A\Y��1���l5mF�jA��.7go���k;gx����3�(�f�����}������]��/�ui-��
*����i[�57&�;{�
���Xo��8|����/v{���<�%�f�l�9�����PIk�g�4����umD�����v.{����"��s^{VmKH�U-;��3<Y'���Ka�5���}�������*���������|9����%����J��N�9�������k
4,�����J���A~hu�r|�Gu���%n47��aX�V��a��u&�k���]|h��hk�%nZ~�o-
�%nE^@-q����uP�S	mq������k?��|'Z�K\g���gk���'��A�E�����T-ti���9
����J�*�\nloh�.q�5=�z�
�8K�
o0-q9,�*��/q+������s1_���s[��GK\2��Pm�Z����$f���mMZ�&-q����`!@i���]�Vd+�L}%�-s�"I���4�_�P/��:&��C<Ku2
;��+�i�\��S���]o�`"���+�)w.l�3�@9,�?��
B�O\`�e�������/C�������V�V�z�%�N��m��e�8b��b�����[�a8`<�FZzhk3��z���f������v���\\�[�z����r��$|�3i���R���a�����u��8Eip�=FP��o��~�k��rX���+�EE+
�ST��S:}��%%+6W�\m�d5a�5�������{B�IZ{�$xBA��h�����9���*���F���ye���'�S��hs�4�qO�,�-�)k��).����k�S�%to����������=�C>R�$��=Ik�P�[�i�q����=������n���}����pI�`�@�����}���I�������T�;\���-�I�=�"��xL5���'i�����{�$�5mQ���Iz�2' BL@�^v{��PO<l��3gsL@���3��9<P�<���a�3P�h�-�@��~�i��	M�w���v�L2=q����L��t������3���Z��O$�=L2=qn$m���U�h�N@	���������z�yl��g�S��@�)��������HZ�P�lK�`��x��g��hw��g�g:B��D��t�0��������#B��e�.f��/b:,����B5�����|7�rO{~Fx�Y�M������;5l"{�dLZ�D8��� ?�:B9l"����������p��&�8�B�g���m���e5�D�6��p��&����t�M���������}�q��8-n"������E�F���D^�#m�6�'�	w�@����������v��nuZ��i�m:^����ia���_z}6�^��D�������`msZ~��AD�&�t�j�xDD��8d��M$�6���4?�8�����^�Md�T�	>(X�-XO$u�kQ6;l"{	�H��$���
4�_�����Z8�����"������x���hXH���J�o��)��R�d�:����������C_:�������Fl(��9_���Y�x�-Z�'.����	��^e�-��Tx4_{b�������31��I�~h&�'�M!#
���fWM������������K�5��;�i*-��~�'��a�Ek_���@����[���fj��M�u�l��B��K$����e���K;)���Q��L��h�D1��������u
���
���.�D��\���+KX�x[��cK�}im3���4����6�N���*'�q�n�I��(�D��.���a^���.L����ht%P����C�|������DC�pode��"�D���|�y��1C��7��h�������[��d�������/�3�w�����G�b���8f������=h��6#���!�N���^��G�]o(�z�a���Rc�0J#��d�8;;i�S��a��V������S,��D�����k���Ak
��a�������������B�d3c�G�1��[�o���o	���j�k�H��'�>��}s@��:��[
h�=E�S�D)P��c�cfKE���7���Z}��������,���lE>V�z�m���_�s�>������H8������������IG��/�h�yj���9����d�]�����e���� [�wyU+_#?F�g����� *��a5|���i���Sw��g*�v����@81?�\�����E�F�x���3��p��)�A�3�K���h���x��p])��vE$0t(����������&V����:�q�����Fh@4�bZ{i-��kx�_lx���f8�:��#���f����V8���he�Yg������w�b [���{<T=,3�T�y�,>2e�^�o�6����>�U��O8,�0=]���0��]�&�K���]��������|w�T'^�>3�O�����V�/�7h�S�@�&�'hfrj��UJ4{,�������]�e�����k�LT-�\�U����N
�F[v���s�xAi3��h��Y@A�-���o�����O��RDs��Q
���K@�5i�������gW�s;���O`s9X��n�g��������ME,�R���V�i����7z�x��N@������Y�� `�'2��8V�K���F0K}�5X�I[�)�W�������Xx�W����1�M`�������-�p�r�:�M%2����ro��N~O�M/���9x�~�9��8��&���]�����AB����|������q.]>�Jh���08@D���:K�,�:�+��[��UmB��6��>�FVl����� m�(Wu�\l-U�un��a�N�\N��#�f������B5c����8dE��<u�h��px�����f������F;�����9\�����RT�}W�K+����u'����w�f��k_�!�As|�m�����8��4��h�n"���6�w�kY�k���&���M�����5#���nk�/8��&��/�7�l��&�T!}������U:*��%(s�M	�w���V����'�fgEn���a\��]k����9�6-�Q L�[��	��)��M�}�t��C�R���t00���|4A8�o�u��&��g^O�!�#*u7��(�:��@�� P{�Z�(��j`�)P��h��Y�l&?`H����m�q��L���B���n^�gW
uV�Y��|7�p�����y7�M������yu�������������w���t�RH��%����i�����ra�/���K�2\P�C�����S��P�~�>����Y��K�n�zm^	�yuX%�����^�z����<O�e���V�4��47m�f������3[:W�� yZtX���i�i
[�O�&��j{xZj�)&�i���liO/�=l5�T�y�,6���+��h}i��]O�����_)��K�o_�������6�����=|�����jZ�G���=|��5Q���hv�MT�d����k0Qv �9�?�%h��$��XW����r�{\�uN&�~��z8M�n�0p�>�]�iT����Db+����L������A��������d�$X%7-���������QO����������on�e�R������"����G5�m4�	�,<I[������'!���\�u��v	��*�����)�q7����
	}'����}8P��F�-'u���Sj�������s?<[��9��aF9Z{��=�@�X?�@�X��!����*���A;�m���c���:���L�1=Ol��L���������H�R7�i9��Sg��]���H4��-*���anQ���*�GZ��I$�L(�Cc�5�F��)qID�"���.����R)g���j������j�g�Pgm�����3�����`5�yQ�x?B��!mU%X/m�#-�Sog��F�^Z��������D��lAY��W���[i}>C:�d���V� @T����R��j��N�X�������\��s�BQ+����;�x|X�&����5Y��?��
6�5`�=������m�`�acQ�#���6��V
��&��6�U���g^A��Q���������cZ(������������V�Y��@���19O2fT�i=�����i����R�u��t�x
��t�7-?<e�*�����$]�V��Z���a����6�?4������	�r�j�M@4"m�\��G�����>�yh|��a�>>M�1v
��0�M�x`^���W������9�o
��)q+�,�d|�������A��2>;��8J������������r�{-�=H������g�N��cpm��M��Q��h���m�!�������h
�z,��l|��V���T�� U|��.���B�g�q��m+30��hC�H���`_���Cc�j����)=�K��y�M>�4k�H3	xk��NK6|���H+�K�akEqo������X��8��s����������{ja@�2����fM�Ju�i0�D�+��-g��#t	p(����q�������7]�ge;�r��B@V�@K����eurQ�BwW�qM�+B�������w���I"�����QT:
���?.�f��B��SN��:��]aR�Th�Z���}�4���d��h������6�������
���iIZ	}����rc?�;��`��z��iV�/���b���u��3gNs'��r���!
�_��Zk�
��������^
@���x%����b�H�����L26.eX;��V�x�)�/7�F�J�L�T�D@~k
vg�T��\�Y%��"�<����&��s"\�2ox(����e��_�,��^��v(��Mh`��}F���6������P��u� �D@��3�,�g��� 7�P[��tw�[���\�\��J��DZ3F�1i���|�Zw����}���������~q!
��v����`�y����A�����,c�5]V����v�����m�`�����?�<~�t����^d��^Z�u���;���&�H�9r����m�
sd	4��K���,��	(��I���B����)�!"�v���W+���,s�(�6d�1(���K(����;��:�Z����d!�?���/������k��4��|��Khg��m7��V0��rn�`/� �����p���x���_�>�� �U��	B(}�������������oK��w��������W���������?����?9���s�����[��#
��?����@�=
�?���������������(C����O��{�(�O����@-�S���)PG���~
����������g������O�?>U
��?���}
��>����@��}
�?��=�t-~��Dc ���!ia����h����aa����QX��l�y@����_��G�>G�������D4���A 2���~_�+�a�}����~������S`�����������D|����a�W|��t�_�>��}
���}
�;��S������n�������^��_�����������������|
|��S���O�C>>�����)������?�|�������?>����������O�?�����O�?~��S��?�������GD>>��������r��i�����O�??���Gb?�~����g�?�~�������?����i���O���t�����CB��*�G����SS�,4�����������b���40�c�d0����
�C�a����b�9��~�@P8 (���0Q� d8%bi"���.�" ���!l��E��@��LP,S2(�������T�����JS���P{��304 0&0,02080>f�~;f�M�L�L���:�=����q�����5c
�J#��CL�m���f&��fS�M�}0��z{�S���
��]��,�B.{�7�@��>�?���;����4[*u���lu�����rz���V+����y+��Z�����\��������C��������Tn��gk}i�zg�-zOx�U���x-���D�������ewx����"0������^_g�vV�����K��C����w��N��Yu�Z�l�����3����l�4�C6Z�X����vzh����.M� v��a��W�!���xD��7H6`��k[��������Z����]�}�-�{�+����������:d�	��QZ)��iK_O�(i����&�#�5h����Lc���+�=�UxU.������ WS�[V������������s�^���H+/��n����jK��0���Iy$�fVZ����<����a��-j��<��8�mi�R���1+�3���������7��������`�����Z]���Mh/��P�2���I=�z���HC%z����fP�3�����a�z.�Z�?�%�����^R�����T	�����0'�l*�M�%�����n���5P��M%H6���k�`��hY^A������rk��=1<����a��4+g�6y�� 1Z�Y���@���zmhu��7��<h�+�_���	��l���hm�'�j��A�3y{l��m5��Q+��4��Q�h��3_O	���J�����v��f����$K#�r�R���lC����T��S&r�-{�hv���"�����p�:dp�N����v6�v�H��w�l�=�����������<#_�������Y�|Y8t�erg��fk�J;�������������&�J({�C��,���:�����p&\3�vv���7�����������Y|G��rSY_���]�?..#�;W)�_)��4v�A���.��2L^N&�O�gP�e��ieeX�6Q��x�������`g�W��r�J
��/������~Qr���e�G�`�:f���2L*
��y�r3(������C�����0eXr�)j�r��fw�wZmO�V\��vY��+�+� ��a�2��%R{�*�����NW�u����2,�O�2��j��{�2L*����;��#������cX���)C�C�)���Ou��N���Os���:�w7�~���nKo�W���>��ui�I~/�m��I���p�I��<�O�����#
p�;�G��Aj���V��o?V�4c���<����f��������<��5�|��+�����L�|������f��������KN�x\��t5I���������|T0>�Z�sD����M�{�$���;bOj?����u�0mM�{��p�-������4��y���I;��RmS��5!��e!^�����=�95���[��K�|o�&���Wx�<d��/6��9?��
���Y?��M����}k�/�������7]�����y{����Al��f�#����i�#3V!p|i��lg�%gN�Rh\=Cfw�sa����q�&%�������P'-���a����3�
�
+��$�3aC�z�m�?<��I>cWcg��	n[��������q86:��U#
@v��Z�6/��W��g|�����u�i�&n�n�rb�{���������u�:����dUj^�lo��j�C�qrlt�F��[�@������&m��v�����Mv�E-�#>z���<[���}�% �@[8�[����Z}pi��T��k�K���s���<���������6z�'��[S)vP�W5�_��MM������������z��\�w��y�����dP�����c]_�������o��ui�X�7���4|����cM@�����X8�`A���F�u����FPuiU�7#��4����dMA����&� k�fk������l��� ��d]_������oF�uiY�7#��4����dMA����A�GpU[}5����D]�� ��d]_� ��DU_� j�DM_� j�DM�����2��I�����������q:����c�G#��9���$�v�yN�8�n���	��bw�h'�5RK��7B���]m����v^�0���H��
�qG�i��y����=���������������g(7+XHx��mk������<&��>v>'�d�j:Z�=@+�V@�S�bVgq�N��$	G���>���7���7 c8��1���P��q�^l�h����i���+�/���a�d� 1�H��g��zZ�;_|Z��U�!���)C�������2dK�����2d[�S�T�+CVO�2X��U�l���-Zzh��YB���Y\r���hy���P���y�A|1exx�r�*��'����2�se(v�~�!�f@�o���i#e��s)�+e�KXT�>�e�0�I�d�!�
���<x$�.P�,%���&)C��oA�`�D$��f)�d��py=������@ ���E'W�"�~
/�2X@���P�
|��n.����!�����Z��AK��V%�P<�D�/A3�-$��
����EZe(��Q��3��Ae(j(^t�2{N����f@�o���i�Q��\��P�
K
e�+X��2�����������pe�+Qx(C��6zP�b��P�����@��x�����yT�S����V���w�P��t|/���J��=�yg�OC���r�H���@4���)W?-U�^����@�$�c��}VB{<�&��>?����r����`�g~��o������s�F*�R!��"z��!��� �3�r�e@��Z4�S���eJ�E3�\&��������@.BS��#�vK��-�P�2%���x�]*_xJ,{�KA����:���R�����uG�2���U����-��<���@�2a�@�Z5�m1�����h���T�+�`>W��Z:�e����-�L-����!�rJg����U���	h#?�>����h�?Q��	NK�5S�4�u�T�����i�UW��S
�5�g�bZ-��!P3�[A7�i�L&x�j��OX�y��H������J�wk���;(�\{{k��E��O��!��M.[S���0�&�q�7Y'�om��r�@c[Tn5���������(V�qZ�Z'�2b���5�M���%:h�'�:�~���4���a��qV]Zu��s<������S��keY>����#-=�i%.A��G��h�h���?mq���]�
0���h�`��e����]s��[M��s����'U����<��kz��()L[���%�Q[D��3Z�����6T����� �OV�"M�]���x���
<��o��`���aC9����m*�
����S��,�P����}����Vn[���H�����~�.BX�&2����C��f��D_x���:������>�p�7��}AHw
���/�l�o(k��4Z��Fs�q�q����������H�@��i����U��,�h���J	4��Q����H�!��Kah������f�j����{VyZ��2��O�Pt��/�����f��`F���<Q<E�����5-~���fT
�S��i
���S�	-;�~�'�>��o^Q����Yl|�a�U�����`~����Vn5k���h���3��S���EF�y D�[�Os
4��l�.�S��x��`��\M:�Gsyx�K�ir���j�i���h=�f�r���t���-�D������te�����������������')g��&h�����8Y��g6���s������/HQu���`k1����j�4�������'{��*�U�����7vmu�fMK:���-&���\v\�������E���	���v��������sc��s;�-t	��?d�F���3��{Y�1q��K�����
g�b�r}�I��y�g9\Y� �mg�����sz�p���8������su!�`���U���D���z�h�)e���Le�����P���U_<Wn�G�A^��x`ZgP�j�]�"����J�6VP;�2iM'�z���W1�
�@e�����|���Wq��se	�7��\����������@�J�y#S��^��yt����Qse��7B�g;�J$�jA��D\Y��&���P,
�+���K(�Rg=���8|}���28�y��A�w�N�K
����VgP<�@eh0�BSO�8?�xp=�����
��$��m������������P�?��Pe~;i���9ul�re �2T�R~0�]�]��P7��7����F�3�X�����M~hO�^V�������24�RP�����'.(�WX.�@������K(T�m� eW�j1�v�!e�>�����N��8|{z��w
�����|�U����"n(�xi��E��
�@K�hza��NX9��/=����\:�"�X�r9/]"QY���u�+uUk)�+�G2�Z[�G�>^ZF���!���g��	�m�����Z�\����,yAt��Y2����L4s���]�V�8g�3h��t9�<��r������m�
I�X���������O�8�)��i7��Zo?.�i2��Z=p�� �q�6���.��W������r���
��@W6���fo���Nl�n?�J;�1��w���$'�m��Tl���(�����|�S~`�!����q������������p/���5�@������-����p��+N���LM�P&����`5=�e��i>��:�im�`�@���&-A���������-Z�Qkd}�T[o�n���r�����N�8Ay%������r���_�2�����^���@��I�ht�M�4�� &��z�un��"���;�D����\c.L��7v��lw�Q;������@����l�#A�������bn:�P���~�,������9_�	�46����i~j����h3�����+�E���,����V�rt�Q�v���M��t��b`n:{��"h��a���,��o���a�D��nY���$+�Ds���F�����{C �!�-x3��3��^e�rD���K�j�g������)����������>���R}X�[3#%�~����m�#�����j~��sj��r������y�b��t"�<�5��'�#6{�O���P�]b$5�9M�0�������-K�`T3���<���T��b)�vF�����n'����|8�����h��,���8����#��������0r'��������
T!�Y������|�,�4�lI"U>M��cD5������K55����Vu���6��?�p�������������y� ���,<�N������;?[������
b����+ ��]����4YW�	e��{=����m5���"xBvW� +�6���9xCvwh�F��6^�C���m�]�]b pG�)�}�@%X�������y�`p���y?]��������#���kb����,�P�u!Pk�T9��tK=�����faC������[��t��f��R����*{�����.���K�>}�w���Q�P8Zu���q��4zE�K4���3A��d�����L���x���uQ)����x������uD]j��
:P�l��(���T�����~=_��n�}�����?���8I��9��]�j��S�G�y�l~��5�`��}����.o���O� �����3|��i�9	NC�(-�:R�r�_���8 ��c�~1 5��
ue�\�@�#R{}��kVMy��e��P�$h98�o;�-E��n�_�XG)Ej���g��O����[�.��qf���tG��"�f��VZ���;���^j
�����/���B]�mWzz��S�K��u4��/����6d�89������+m5h���5��j��! ���E�4����`'��<.Z�'��b�6�o�vO9=q�8��y��8�N�{���5I�^W@���Y�k��5���i�T�Y��*/K�j�,4~�nP[���w�`�3N�3�+�������\�tq�qQ�Z�Q�����x��]���$q����O��]nS���C�5mJ�w�T������g4�wy�x�����t5��s�$l��B����#����1�+�T����������fG����-PG�������N!��]j�/z��M����2CN��(&��������T��!�y&�<���T�-�[	���qcY��Lj����:"�w����������p���o������S����!��v
��~��~4���MW���n�ZV:��v�
�x�.�+�7�����AJ����7~�9ikd7��L�AZ�4R�|q���3E���D�Q �x��D���?*%R������CY;��B���f���as���VG��y����0$&�b(x�^.1��J7���������_��7���p�z���[N���}�E�E�6m�����N���E^�p������L����qBn{�����wyyP5��v��*^_l+�-�^�����:��S�J��T��,��9�Y��y�����Z����6c�G�����"7�_>����k	��;J�H���r�}���Kwf���8������;�pofCT99��V�n��(�V��%�������������I�	��]�j���m�g�,�;�~�|pM@�6\��;���t���t���&�������?t�D������:]�vW����e���]:��#���H���y7��UJ�:�y'?k�9+������[g����/��lSwY�~��qow���eC4���~?��	�o�a���f������~���>��!���%�1��=���I��BwW��>o���p�w�]���+��K��W�*j>q�������y������J!N�q��d����-�������x���}����u����b���+�7�8D�8�����f*N���+�l�+Nv�`Pk���5����W>`(��6�����A�Q�m���ohn����;��K#��n����H`xG�
�<uw�[�3����@U���~EN���T���0������fW�"nx��cn(J,p^%���G���\����x��Bt�a/�]WP�"���b�@1����c���%*��#P��L�)PU�P)��|O5*P��)P�X)�HA���GY�*�c��7B��a90����t��
���qs��K�!��������W��J����'�=��������#���eRS�U�;P�=����#U!�T���O�`d]E�zTWo���O)2��W�(��a�o���&���&A������A���G��h3�(/�����=��F�A��$6�~���1P)����;��	T���J���3��W�Mk�A�<�i�U��=i��9�!����7��6������z��9�$���&���>���f�i��$�2���F]��~Q!^����~X���{��������F�:��9�
����vS�y�����
��j?�:���{�d�����8��#������i���ib�O�X_�!u)�n8
��}@c��U����x��:?S�R���������O���U��N��C]uS1���M
Cq�w��������)���r���-i��G����N�i���4-�UU�z_W����qJ������f� G�]�<@b����K���<$Hm�-RoA����+�\�S�����nGhG
�dQ���~��R�aSu�J�k�f��{4K���`���6kG��)wA����_�yi"���������������Y���zy��bL���7�r�<R0y,?�V"AP�l�I�c�a����4��,�����-���*G-��������e�UJ'�n��z��l�:<?�Py���
-��M�8��p�e���g��&N���2r]L�p*YaU+�*!�a��+RK���S��!7�F�*�A�.^�����j�?������*wJ�����C��MSY�7vt����&xE/�;�,�,���wGa�lL�����"�
����C�K�+�L�K��T�%IR{x9�nS�@�Jv�,u�h��@��l���^�)��]�R���/��!��`��5���o�
4�vdR�����d��)�_JS��|&x����V��P��Z�j�;�����������%��!&��nYW�%���1y.y6�����@�=�I
Q1��u�1HAVhI�3���Cc\b]�|&��$�_)P�������W0h�
�"[�T���"R�}s�*;�i�Jns���Y��}�����	�?j��Z�Y
tjvwo�+��d)�l��7�?��m��)����R��)�VJ*�����]�2w��}P+�C������Y]Z���(�EP������@LwG�	��#���(+T�-�#U����{����2���}`zWv�}@�
��0Q���w
��Df�+o�U�'1��s	J0���$u�Rv>5��z��T6(�}��ZA�X��}���j�r�l�Vr�P���F�O������r����g�sn��]�I���$7!�"��Yb�&<��a�O[8��R;��3a�yY3R�V�����-����������P���C���%[^�f���G���H]���q�cV�W[4�z?cE^���s�$�����I�9��.�
%���KY��f��PM�����u]�W��Q5
yG�B[D��H?�Q ��%���WF�����G�1��J]��)�������:a\��'v���	���7��x�Q�G4!�B}i��zZ����XUd�b�L<��;�Y�}zag/�s��$�+�F��i�~6�����Q�p���4��]Y�2���w�:�"�L\|�=NY�e#5�5�AY�����|��mV��m�����e�4S����o���#U!�����b��>]k�����2�	�g���q�>��m�g��#�L�B����S���'��F�	<�Ej�/�?��cp��>��j����|��^��O(����E���]=�R�����0{���������\G���a�bc����Q��v�a6`��N���2�����w�Z��������k�*3�a(j�\W\���8����T���	�i��"U��eHI���P7���u�S3���!����R��T�vq������<#����@���~=IT�h�n�N����dox��A����V"���Zj���f~J�s�~�����������%��B.��*st'5E�������@�C��'�I�7��"~�;��e�����v�X���z�*=j2!����bT���E,?��K^��22f��<3;!�{2��������h��"!�,�M�w�&�F?E�����.>�;A�G���p���n����S�15i��BS^�s��#��P}pl�2�^��������[��u-zx07����X��U*m����:����0S-_�4R�|q���f1��hQ5�
�*���6?���HU�������l*��y3j�y��v
u���CZw������M]����a���_���}m�
�G�����b������_�!�8�g��WIH�+]c�+��J�T��_l�^o���j���a���y�����7�;%3G�8�/�y���� .E�]��������M����z����+KZ;����z?��O%L�a�vTZ�:���<a ���+klG�\3��7c����D�����}�%W���:d�7:�����w	��u.8��/�v����T�.NR���y��ff}�8�e+��`�u�����E�p�N/��V-��6�{��������VF����]>Z_^%�;yZ�B�����u��m���w��I��7�����}�~��P�i�e��;��W���e�O��=c�|w����0��o�|������dEe'@*W��,������"Y����w�r��gyR�Q��`L��}��B�q����@�s�o����n�����VB�hy���#�r��VR+����u��(�HM���1�h%y���to����"�x��
��T����w'�U����@���pw�Co|\����ni��A�}�:�N7i���:��g<�Sb�J���P������c�T3h%O��mW�(+��S��!���AH�B������8$�
�m�����
�cR�/��F�E����(�"�T���c,���N�1i�-*P�'������H�X��=�R3-'��+�N��7	�RW�V�|���
�<��A�g�E��n�.'Y6�"	'�����{()��
x�d����@z"��G*yY�,�.�����7I��1��c,�j��Ft��x�z�,Z|��������X������)��x����$���Q�� �c��e��r.>,+H^��;:v�[�d�j��A-���������R���h��x�OG�7��Cm=���].��?�*������$Ui�E�/94�K�+�� ����i��G6^���(��N����k���_�����E�*��3aQ+o�Vr���;
�]�K������h�B]�y�h�������x h�=�j��S���o�[E<��e������%�D*s��LEf����M>���G�'��3�P������4����w�;Z%��e4�x-�LR�#u|���������h�B�l5G|��8��?�VQ.vR���RA�pb��R|y[�8���Z%��m��g������X��F��@97-?xGcc
n�KG�G�dm�]���nS�r1N��L��q�b�\\qT��u|]���=���H����gu�'khi�+F��<���q���K�����$�p!��F��['8�g�v(<�#;�>r�^ukx��KQ���x;���@��q���ZS��U_!�dy�T�
��"�5Ut�<���]��z?i��9S[����R#��T��Ry]�]�x3<U�=t���V�z����a��QJ~t����D�F*P�Gy�h�`*����uE*'��Qal!o��/5�y�Lj����@Q(:_�:�C�K���|nJ����o���CL���Q#U��T:���R�t����*�@+��]:H�V9j����S�9�U�CN����:�����Rw������Q�-��
��N������������_����~U+�r%�A�u��Q����������H�e�W�e��k��zoz�G�=����N��+@m������6|�;�HR
I�����T/���Fa�l| ��7���RR�ST[��:�{��A+Dp��zM)h�ES������#��!���Z����j
4��C����n�]����u�.��Gp7B���
9��!�+`S ���
y�LpVwoU�t���r�K������~�j(Dp�=�+ *�cS�)����L����mW� +T�����.��Gp
\���2"����e(Dp�Q�(�J��R�S�STg��:��L�+x��R�5Dp,;2�*��H�h5�\+pm����j
�i5�Z�=���"�Na~�-��_U�������
9��!�+`S�)�~*�'!���-�j�;4�>������&�{����S�&��.{u�[�hy�*�;DpY�<f���
��|��.��Gp
\�+��2"������
��0Q����
�t��Ca���b���]5s�9bpc����n��.f���z]������/�|�Q��O<���1��b����Y�!M���b������-�!m��mFj}\�Qw��a!�}	f(xG������/�<��K�����}}G[������{%sd��<��������1�����	E�b��?b����m���
kT�6La?���Q����f���T���i����^�N�>�gT���:��������P�[V!-�Y����V�A����_<1{��"UO�����>	(�H
���?�L\�	�\<0n%x�z�hj�m#��o����{��L�6�5R�z�)P���f���\Vu��]��E|�%n������z���U����g����T}�L�$#����6W���`��^]?�K�����g���'����o��:�nr��f4-��\9�2g!U�'P��|�����8�'�
����V)D#��H��-[S�Yh�B����=�k�f�a���L�/�5������l����q~:vQ�����x�).��<O�xW|y�W�T�&'S*���R��#u�b�C����OI���T���m��*-0�!�Y,3�X��1����0��Gf#��I�<�U�$V�#~�k���-K~��a���V�K��E�xe����������.w�_jG���hm�C�WLPy�67���=�1<�%�H�.������?UlE�����
�����yT�&1�SA���R���??#�&
��d��6������|�>86]
��0�J�������-�����nj�����f�:>�i\���wx%}��:�����F��/R<�j+R�!�f=��,,KT�4 �:Q)�:�c����S�����q�'J���d�`]�
��c�B�Hm�tL�����/Ow����4*��Yozp���hHp�=3�s��b��m��B�Pi�J������`x��gs��y}��2T^^+njBn�����wyy�����h�^}��k���!�B^��g�x�#�\t����7^;"��N����N����`����Aw��Dn����*xB����jB�Q9���o��E�?#�<��W����������Z�*�H�c��Q;n�g��B^�n�[�K�_�f�<��6j��8]-�ZU�����t�;��G���n���|��n"���y����i�����^:FN�����a��h����JO��P��������pP����=��k��b�,s>���w^XO�D�Gm�����V�wr���g;�����z�eC�M���/���~d�wH�BYy��wTxk3����w
��g���q�-6b�T;(R�\j�3�=z�nVd�R�7��W���#�z���jo����!z���n^��to@����gx��
4�lT �����/��)�^LZ����e����	J��V�T��P����*���!	�!z����3�\���#8�y�T O����*eEe��Nj����z���=c���C!z��2�@K�M3���{����+�W �<'/!z���}����=cg�#RW����y��1�g�4���V@�F����#��"
4��m���3�fW�-q#�����G�7B����
9����my������n=c�
�3�=^&�!���;{��D�I�?��G�8�]L��=�5S���:��t�����c<�=�W���[�U�$����=c|�3aTL��}��N�i
t��+��U[��I;5��e<r��$�V���HM=R��)4����k�G�����������m���U��qm����B	j7b�A+.�.f�I���4b�����O������'qt����o�h��2\�?~��M���*o���\70�����A�y\Y=����[��k�;��y�;^��%�	p8��?7������8�3�2��1[�G\�����:��=qY_��i<�����![p������U����x��85��S���#A����j�r:�g���p�eu�><p�����G��>�K�����Q%����Qe��f@[�����<��2]�D�rtt���b(~�����Xv�K|8�`��]�<
�i��fG������D��/��]���b�3x�r���%��~��#D�F��}�w����P�v����j�n(��`���6kF*��qA�;<o$�Ss�cg���/s�x�����k�zt������!��u���]�km�498�H�w�q�`z�~v)qu"U�s�Q;�RGh���^���^�no�%w��6����h�K�j�T�o�F������$���g�{l��yK���zF;xxZ�J?��}��C-�@��_u8�|���a�F��=}���E��������G�R��34������Z��J�7�,[���"i�_��$�U���RBY����d��'���?Y!r!`����v=x`*����@�tj��=r� %�V��#Z!r��Z����j
��K��*��L���@���������#�!r�yE��d���)P�P��n�'x�{��V��K��Z��u�c��v+pciT�G.��K]��u�r����`�r�	�B��Uj	��=r�P�\0�x����`�����+���D����+��
��Du(m-hh�0J�L�S
�
��=r��=#S�mS����
4=`c����j
����Zu�&{�]�����"���`���+*P�$�����M���{�@��p�w�Z�j����>��sE���c�=r�P�\0�{�B@T �+���@������+��>�QV�@C�'j�\��z����`���C!r�8���B�B���w��T��y��
��6��\�$�[��!����%�������H�+'����`���-;�1[���r������P�/T���X����p�th��c�����3
S�G'W�
jH�k5��9��1#�V�:e��/|n��bNF~��S��>�D4#�����$N�T��>TW�C����������}��2��:o��nMg[�T��^�j����	Ys�*�1��7o(�Ky��;�����?��
�l�rQ���:5q�	C+��<��}�[Y"UBj%��VpVow<Ts����k����TV��RY#U�0�TZ���+_����r�L�cs��-���Wl.�o���fj��Cz\�#��I
�W�l.�q�!�-k����*Mm�\���d.����������,'��|W��H���>��f�Z?�V_\Y�A�������_;7n�H��;�T}T0��"���he�8s\�?a��<0nzKf�k�	f�IQ
����w���>i&�'�p�T-�D�5z��t����j���]��E�l.�f��5������U0G�����q�DK+[��������������7����/Yg�t��X��3��bs�7�o�����Tb�;�A�]�A��T���0T9��
��}1����[����*�7�5"U���}h(��u�lz���8����E����B&��������ri��IM��G@yF�����>�8I�H����w��E�%{Jt��h���[���_j}�1����)��a/��JV?���u���������
���wR�&���Dn�R<���Oe=��jv��6�B�y����k6�|�.]��U9RoA����;���A1���N��KCu��J����k&�O��&���w��hiFv�X��&��T��n.�+�T���N�\C��;���/�->?�3bjRs�kI�Tn�sk4���MW�������F��ao�u��?����3����15���X������z��}��H���A�;�:�a�����P+C��KTn*���J���;��Q�G�,>�?���d�`]%������%,��oP�-=��XWZ���Y3�
�G����<`��<]O��;�[;������F1G�������"�n�[���'����=��
�%E^����P����N��������������Vb��N�Cu^;6^w����kGyy}_N0�[�T�D�kG�E���1mJC0\c�o�>����-d�?����9"5>��_��N����>��.���q���;o�"����N�v/�����J`9I�S�]v�D�T��k��[�b��4{����8���<
N!Q�}�]"�������5xn�~����r�*�U��[��'k���c��0�0ix�}����yE������E��1^V���=�T���f�,S������:L�a��z��������������?:����_������P�QV������r�M���F��/o������;oB��t\E�
4�m��	Av��=[t�.�k��y9���;�+w ��I�{r���}v'}os�wg�G�1/�q�;��@�����UC�wT ���p[�C��a�y�v�ak�;]�>T�-
�.��y	���1/�\���9�����n�y�V��DY�����I
1/��r����Bx�b^x��
4H0�;*�������[�b^����!��N�}��3��b��=R�Q���1/v��"S���q{0B������t�W�R��r�v�������hI����|P��t�T�)e���yy9��!��1h����v:�x%Xz���������#����M����Yj|��G��%���B���LZrz�~��*eEes�!����1/�B��q�c^x�hj�\3�����[�;F_*��l�����1tk9�+����d��T��u�e�6I�U������<z�./��`��D�N�kr�57Q���?�:\�T��Tz����2���h�H��"�Z�P4���9$�[OI�[�T����J�{�Z�kc�<T.w���c�fy/lh���L���%:�*���Q�U���%+Z����Ie��5����9R7
��L�?e�w*�f�U���%x>���{��hIQA����f��~QR�a]�"�,v�k�PG�#��F���.8���5]�7f�&x�l���=��<��WGIU^r�q�Va��v��c��Q��w�2>�C���W%Ny��<w���-���%�����{��7���0z�N�����~�uK�@I�8��;�M���~�b{\q����:�U*�k��V�����������c��G�=��q�&{��U	q�����,�v*�	�zgK��}���1���('_�ZS��{���oQ��8O@r��e�q�6�FMT�k��z,��|�����u�C4��k�p4�Lu<^r�������������2|8X��s�/���"U��UR�(���W�:p[|
T�]#��)���/�k��Mm�#R��L��0������tL����c@����
����/��
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
125342
%%EOF
#172Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#171)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On Sun, Aug 4, 2024 at 3:20 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

I re-ran the benchmark(*) with the v19 patch set and the
following CPUs:

1. AMD Ryzen 9 3900X 12-Core Processor
2. Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

(*)
* Use tables that have {5,10,15,20,25,30} integer columns
* Use tables that have {1,2,3,4,5,6,7,8,9,10}M rows
* Use '/dev/null' for COPY TO
* Use blackhole_am for COPY FROM

See the attached graphs for details.

Notes:
* X-axis is the number of columns
* Y-axis is the number of M rows
* Z-axis is the elapsed time percent (smaller is faster,
e.g. 99% is a bit faster than the HEAD and 101% is a bit
slower than the HEAD)
* Z-ranges aren't same (The Ryzen case uses about 79%-121%
but the Intel case uses about 91%-111%)
* Red means the patch is slower than HEAD
* Blue means the patch is faster than HEAD
* The upper row shows FROM results
* The lower row shows TO results

Here are summaries based on the results:

For FROM:
* With Ryzen: It shows that negative performance impact
* With Intel: It shows that negative performance impact with
1-5M rows and positive performance impact with 6M-10M rows
For TO:
* With Ryzen: It shows that positive performance impact
* With Intel: It shows that positive performance impact

Here are insights based on the results:

* 0001 (that introduces Copy{From,To}Routine} and adds some
"if () {...}" for them but the existing formats still
doesn't use them) has a bit negative performance impact
* 0002 (that migrates the existing codes to
Copy{From,To}Routine} based implementations) has positive
performance impact
* For FROM: Negative impact by 0001 and positive impact by
0002 almost balanced
* We should use both of 0001 and 0002 than only 0001
* With Ryzon: It's a bit slower than HEAD. So we may not
want to reject this propose for FROM
* With Intel:
* With 1-5M rows: It's a bit slower than HEAD
* With 6-10M rows: It's a bit faster than HEAD
* For TO: Positive impact by 0002 is larger than negative
impact by 0002
* We should use both of 0001 and 0002 than only 0001
* 0003 (that makes Copy{From,To}Routine Node) has a bit
negative performance impact
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}Routine size
(NodeTag is added) may be related.
* 0004 (that moves Copy{From,To}StateData to copyapi.h)
doesn't have impact
* It makes sense because this doesn't change any
implementations.
* 0005 (that add "void *opaque" to Copy{From,To}StateData)
has a bit negative impact for FROM and a bit positive
impact for TO
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}StateData size
("void *opaque" is added) may be related.

I was surprised that the 0005 patch made COPY FROM slower (with fewer
rows) and COPY TO faster overall in spite of just adding one struct
field and some functions.

I'm interested in why the performance trends of COPY FROM are
different between fewer than 6M rows and more than 6M rows.

How to proceed this proposal?

* Do we need more numbers to judge this proposal?
* If so, could someone help us?
* There is no negative performance impact for TO with both
of Ryzen and Intel based on my results. Can we merge only
the TO part?
* Can we defer the FROM part? Should we proceed this
proposal with both of the FROM and TO part?
* Could someone provide a hint why the FROM part is more
slower with Ryzen?

Separating the patches into two parts (one is for COPY TO and another
one is for COPY FROM) could be a good idea. It would help reviews and
investigate performance regression in COPY FROM cases. And I think we
can commit them separately.

Also, could you please rebase the patches as they conflict with the
current HEAD? I'll run some benchmarks on my environment as well.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#173Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#172)
15 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCwMmwLJ8PQLnZu0MbB4gDJiMvWrHREQD4xRp3-F2RU2Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 27 Sep 2024 16:33:13 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

* 0005 (that add "void *opaque" to Copy{From,To}StateData)
has a bit negative impact for FROM and a bit positive
impact for TO
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}StateData size
("void *opaque" is added) may be related.

I was surprised that the 0005 patch made COPY FROM slower (with fewer
rows) and COPY TO faster overall in spite of just adding one struct
field and some functions.

Me too...

I'm interested in why the performance trends of COPY FROM are
different between fewer than 6M rows and more than 6M rows.

My hypothesis:

With this patch set:
1. One row processing is faster than master.
2. Non row related processing is slower than master.

If we have many rows, 1. impact is greater than 2. impact.

Separating the patches into two parts (one is for COPY TO and another
one is for COPY FROM) could be a good idea. It would help reviews and
investigate performance regression in COPY FROM cases. And I think we
can commit them separately.

Also, could you please rebase the patches as they conflict with the
current HEAD?

OK. I've prepared 2 patch sets:

v20: It just rebased on master. It still mixes COPY TO and
COPY FROM implementations.

v21: It's based on v20 but splits COPY TO implementations
and COPY FROM implementations.
0001-0005 includes only COPY TO related changes.
0006-0010 includes only COPY FROM related changes.

(v21 0001 + 0006) == (v20 v0001),
(v21 0002 + 0007) == (v20 v0002) and so on.

I'll run some benchmarks on my environment as well.

Thanks. It's very helpful.

Thanks,
--
kou

Attachments:

v20-0001-Add-CopyToRoutine-CopyFromRountine.patchtext/x-patch; charset=us-asciiDownload
From 51779387b107e80ba598fe26f4ecec71c54f916b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v20 1/5] Add CopyToRoutine/CopyFromRountine

They are for implementing custom COPY TO/FROM format. But this is not
enough to implement custom COPY TO/FROM format yet. We'll export some
APIs to receive/send data and add "format" option to COPY TO/FROM
later.

Existing text/csv/binary format implementations don't use
CopyToRoutine/CopyFromRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  31 ++++++-
 src/include/commands/copyapi.h           | 101 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 159 insertions(+), 8 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2d3462913e1..c42485bd9cb 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1632,12 +1632,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1777,10 +1787,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1798,6 +1811,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 97a4c387a30..2e126448019 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1012,6 +1012,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 91de442f434..3c5a97679aa 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -772,14 +776,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -806,6 +818,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -887,6 +901,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -908,15 +924,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	if (!cstate->opts.binary)
 	{
 		bool		need_delim = false;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..d1289424c67
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,101 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 5fabb127d7e..4c4bf60d9e5 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -503,6 +504,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v20-0002-Use-CopyToRoutine-CopyFromRountine-for-the-exist.patchtext/x-patch; charset=us-asciiDownload
From daca92389cfea80c22d95ae64b9bc1c11751eb52 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 16:44:44 +0900
Subject: [PATCH v20 2/5] Use CopyToRoutine/CopyFromRountine for the existing
 formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 550 +++++++++++++----------
 src/backend/commands/copyto.c            | 477 +++++++++++++-------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 5 files changed, 806 insertions(+), 446 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c42485bd9cb..14f95f17124 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1393,7 +1544,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1425,6 +1575,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1580,25 +1733,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1631,23 +1765,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1782,23 +1902,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1811,8 +1915,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 2e126448019..5f63b683d17 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -149,8 +149,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -750,8 +750,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -768,13 +768,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -818,7 +822,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -828,8 +832,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -839,6 +848,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -856,221 +1126,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1101,7 +1171,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1109,7 +1179,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1176,8 +1246,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1193,7 +1263,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1270,7 +1344,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\\' or '\r', we may need to look ahead below.
@@ -1309,7 +1387,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1337,10 +1415,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1354,10 +1432,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1365,15 +1443,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1385,7 +1463,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!is_csv || first_char_in_line))
 		{
 			char		c2;
 
@@ -1418,7 +1496,11 @@ CopyReadLineText(CopyFromState cstate)
 
 					if (c2 == '\n')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1427,7 +1509,11 @@ CopyReadLineText(CopyFromState cstate)
 					}
 					else if (c2 != '\r')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker corrupt")));
@@ -1443,7 +1529,11 @@ CopyReadLineText(CopyFromState cstate)
 
 				if (c2 != '\r' && c2 != '\n')
 				{
-					if (!cstate->opts.csv_mode)
+					/*
+					 * is_csv will be optimized away by compiler, as argument
+					 * is constant at caller.
+					 */
+					if (!is_csv)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 errmsg("end-of-copy marker corrupt")));
@@ -1472,7 +1562,7 @@ CopyReadLineText(CopyFromState cstate)
 				result = true;	/* report EOF */
 				break;
 			}
-			else if (!cstate->opts.csv_mode)
+			else if (!is_csv)
 			{
 				/*
 				 * If we are here, it means we found a backslash followed by
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 3c5a97679aa..86dc1b742cc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,317 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +506,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +540,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +727,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,27 +1071,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -804,58 +1087,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -894,15 +1126,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -918,7 +1142,6 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
@@ -927,69 +1150,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 141fd48dc10..ccfbdf0ee01 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -104,8 +104,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v20-0003-Add-support-for-adding-custom-COPY-TO-FROM-forma.patchtext/x-patch; charset=us-asciiDownload
From 5ba7136a527aca0861a74d0a7e1287ceef74f222 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 17:39:41 +0900
Subject: [PATCH v20 3/5] Add support for adding custom COPY TO/FROM format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine and a COPY FROM handler
returns a CopyFromRoutine.

This uses the same handler for COPY TO and COPY FROM. PostgreSQL calls a
COPY TO/FROM handler with "is_from" argument. It's true for COPY FROM
and false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY TO/FROM handler.
---
 src/backend/commands/copy.c                   |  96 ++++++++++++++---
 src/backend/commands/copyfrom.c               |   4 +-
 src/backend/commands/copyto.c                 |   4 +-
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 ++
 src/include/catalog/pg_type.dat               |   6 ++
 src/include/commands/copy.h                   |   2 +
 src/include/commands/copyapi.h                |   4 +
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../expected/test_copy_format.out             |  21 ++++
 src/test/modules/test_copy_format/meson.build |  33 ++++++
 .../test_copy_format/sql/test_copy_format.sql |   6 ++
 .../test_copy_format--1.0.sql                 |   8 ++
 .../test_copy_format/test_copy_format.c       | 100 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 21 files changed, 313 insertions(+), 15 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3bb579a3a44..d7d409379d1 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -443,6 +444,87 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -485,22 +567,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 14f95f17124..7ecd9a1ad2c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -247,7 +247,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 86dc1b742cc..8ddbddb119d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -431,7 +431,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 322114d72a7..f108780e8b6 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7741,6 +7741,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index ccfbdf0ee01..79bd4fb9151 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -84,6 +84,8 @@ typedef struct CopyFormatOptions
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d1289424c67..e049a45a4b1 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,6 +27,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated with the relation's attributes writing to.  `finfo` can be
@@ -69,6 +71,8 @@ typedef struct CopyFromRoutine
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated with the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 256799f520a..b7b46928a19 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index d8fe059d236..c42b4b2b31f 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..4ed7c0b12db
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,21 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..e805f7cb011
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,6 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..f6b105659ab
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,100 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v20-0004-Export-CopyToStateData-and-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 95213545ae4754c3a435ba2d737fd0b2677e9241 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v20 4/5] Export CopyToStateData and CopyFromStateData

It's for custom COPY TO/FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except
CopyDest/CopySource enum values. CopyDest/CopySource enum values such as
COPY_FILE are conflicted each other. So COPY_DEST_ prefix instead of
COPY_ prefix is used for CopyDest enum values and COPY_SOURCE_ prefix
instead of COPY_ prefix is used for CopySource enum values. For example,
COPY_FILE in CopyDest is renamed to COPY_DEST_FILE and COPY_FILE in
CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY TO/FROM format
handlers as extension. We'll do the followings in a subsequent commit:

For custom COPY TO format handler:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer

For custom COPY FROM format handler:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/backend/commands/copyto.c            |  77 +-----
 src/include/commands/copy.h              |  78 +-----
 src/include/commands/copyapi.h           | 306 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ------------
 6 files changed, 320 insertions(+), 320 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 7ecd9a1ad2c..dd4342f8b9c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1713,7 +1713,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1841,7 +1841,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5f63b683d17..ec86a17b3b3 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1188,7 +1188,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 8ddbddb119d..37b150b44ba 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -460,7 +399,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -507,7 +446,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -541,11 +480,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -925,12 +864,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 79bd4fb9151..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,87 +14,11 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
-								 * NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index e049a45a4b1..8a560903ede 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,12 +14,81 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* These are private in commands/copy[from|to].c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
+} CopyFormatOptions;
+
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 /*
  * API structure for a COPY FROM format implementation.  Note this must be
@@ -65,6 +134,176 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
+
+typedef struct CopyToStateData *CopyToState;
+
 /*
  * API structure for a COPY TO format implementation.   Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -102,4 +341,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v20-0005-Add-support-for-implementing-custom-COPY-TO-FROM.patchtext/x-patch; charset=us-asciiDownload
From 3f19b3ea56f3a234846b4078edcf85eb229df8ee Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v20 5/5] Add support for implementing custom COPY TO/FROM
 format as extension

For custom COPY TO format implementation:

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()

For custom COPY FROM format implementation:

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 14 ++++++++++++++
 src/backend/commands/copyto.c        | 14 ++++++++++++++
 src/include/commands/copyapi.h       | 10 ++++++++++
 3 files changed, 38 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index ec86a17b3b3..64772877b0f 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,20 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * CopyFromStateRead
+ *
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 37b150b44ba..c99edae575b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -496,6 +496,20 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * CopyToStateFlush
+ *
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 8a560903ede..c1e9fe366f3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -299,8 +299,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 
 typedef struct CopyToStateData *CopyToState;
 
@@ -402,6 +407,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v21-0001-Add-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From e33abbfdf1bdf0c68d77a8ab367ae5a9800b613e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v21 01/10] Add CopyToRountine

It's for implementing custom COPY TO format. But this is not enough to
implement custom COPY TO format yet. We'll export some APIs to send
data and add "format" option to COPY TO later.

Existing text/csv/binary format implementations don't use
CopyToRoutine for now. We have a patch for it but we defer it. Because
there are some mysterious profile results in spite of we get faster
runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyto.c    | 31 ++++++++++++++---
 src/include/commands/copyapi.h   | 58 ++++++++++++++++++++++++++++++++
 src/tools/pgindent/typedefs.list |  1 +
 3 files changed, 86 insertions(+), 4 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 91de442f434..3c5a97679aa 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -772,14 +776,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -806,6 +818,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -887,6 +901,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -908,15 +924,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	if (!cstate->opts.binary)
 	{
 		bool		need_delim = false;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..5ce24f195dc
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 5fabb127d7e..8eb537bfa77 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v21-0002-Use-CopyToRountine-for-the-existing-formats.patchtext/x-patch; charset=us-asciiDownload
From be1264ed79cdc5a7e529b05866f8b6fe589a705f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:26:29 +0900
Subject: [PATCH v21 02/10] Use CopyToRountine for the existing formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyToTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyToTextOneRow() calls CopyToTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyto.c | 477 +++++++++++++++++++++++-----------
 1 file changed, 319 insertions(+), 158 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 3c5a97679aa..86dc1b742cc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,317 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +506,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +540,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +727,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,27 +1071,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -804,58 +1087,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -894,15 +1126,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -918,7 +1142,6 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
@@ -927,69 +1150,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
-- 
2.45.2

v21-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 9c6123756023e7515133c649a14be6d294a31f29 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:40:54 +0900
Subject: [PATCH v21 03/10] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 82 ++++++++++++++++---
 src/backend/commands/copyto.c                 |  4 +-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 251 insertions(+), 14 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3bb579a3a44..3aea654ab8a 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -443,6 +444,73 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -485,22 +553,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 86dc1b742cc..8ddbddb119d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -431,7 +431,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 322114d72a7..f108780e8b6 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7741,6 +7741,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..793dd671935 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 141fd48dc10..e9ed8443210 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -84,6 +84,7 @@ typedef struct CopyFormatOptions
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5ce24f195dc..05b7d92ddba 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -26,6 +26,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated with the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 256799f520a..b7b46928a19 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index d8fe059d236..c42b4b2b31f 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..606c78f6878
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..9406b3be3d4
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v21-0004-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From c0c504a899861da2d9d66fd9bd3c31c56735ffe0 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:56:36 +0900
Subject: [PATCH v21 04/10] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  |  77 ++-----------------
 src/include/commands/copy.h    |  74 +-----------------
 src/include/commands/copyapi.h | 134 ++++++++++++++++++++++++++++++++-
 3 files changed, 143 insertions(+), 142 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 8ddbddb119d..37b150b44ba 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -460,7 +399,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -507,7 +446,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -541,11 +480,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -925,12 +864,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index e9ed8443210..dd645eaa030 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,85 +14,15 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 05b7d92ddba..03779c15f43 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,10 +14,79 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* This is private in commands/copyto.c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages, default */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+} CopyFormatOptions;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
@@ -57,4 +126,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v21-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 9a2c88f860f29d0eae0d2a486516451d4a288e2f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:59:34 +0900
Subject: [PATCH v21 05/10] Add support for implementing custom COPY TO format
 as extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c  | 14 ++++++++++++++
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 37b150b44ba..c99edae575b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -496,6 +496,20 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * CopyToStateFlush
+ *
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 03779c15f43..30765951e2e 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -187,6 +187,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v21-0006-Add-CopyFromRoutine.patchtext/x-patch; charset=us-asciiDownload
From a75c8076668416cc6112c4166c728cf2552c7e4a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:06:20 +0900
Subject: [PATCH v21 06/10] Add CopyFromRoutine

This is for implementing custom COPY FROM format. But this is not
enough to implement custom COPY FROM format yet. We'll export some
APIs to receive data and add "format" option to COPY FROM later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine for now. We have a patch for it but we defer
it. Because there are some mysterious profile results in spite of we
get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          | 24 ++++++++++--
 src/backend/commands/copyfromparse.c     |  5 +++
 src/include/commands/copyapi.h           | 47 +++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h |  4 ++
 src/tools/pgindent/typedefs.list         |  1 +
 5 files changed, 76 insertions(+), 5 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2d3462913e1..c42485bd9cb 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1632,12 +1632,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1777,10 +1787,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1798,6 +1811,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 97a4c387a30..2e126448019 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1012,6 +1012,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 30765951e2e..7421241de83 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -87,6 +87,51 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 8eb537bfa77..4c4bf60d9e5 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.45.2

v21-0007-Use-CopyFromRoutine-for-the-existing-formats.patchtext/x-patch; charset=us-asciiDownload
From 5790fb08795adcc43c72186e662b125e32b5986f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:09:29 +0900
Subject: [PATCH v21 07/10] Use CopyFromRoutine for the existing formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 550 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 4 files changed, 487 insertions(+), 288 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c42485bd9cb..14f95f17124 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1393,7 +1544,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1425,6 +1575,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1580,25 +1733,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1631,23 +1765,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1782,23 +1902,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1811,8 +1915,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 2e126448019..5f63b683d17 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -149,8 +149,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -750,8 +750,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -768,13 +768,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -818,7 +822,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -828,8 +832,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -839,6 +848,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -856,221 +1126,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1101,7 +1171,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1109,7 +1179,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1176,8 +1246,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1193,7 +1263,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1270,7 +1344,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\\' or '\r', we may need to look ahead below.
@@ -1309,7 +1387,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1337,10 +1415,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1354,10 +1432,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1365,15 +1443,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1385,7 +1463,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * In CSV mode, we only recognize \. alone on a line.  This is because
 		 * \. is a valid CSV data value.
 		 */
-		if (c == '\\' && (!cstate->opts.csv_mode || first_char_in_line))
+		if (c == '\\' && (!is_csv || first_char_in_line))
 		{
 			char		c2;
 
@@ -1418,7 +1496,11 @@ CopyReadLineText(CopyFromState cstate)
 
 					if (c2 == '\n')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1427,7 +1509,11 @@ CopyReadLineText(CopyFromState cstate)
 					}
 					else if (c2 != '\r')
 					{
-						if (!cstate->opts.csv_mode)
+						/*
+						 * is_csv will be optimized away by compiler, as
+						 * argument is constant at caller.
+						 */
+						if (!is_csv)
 							ereport(ERROR,
 									(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 									 errmsg("end-of-copy marker corrupt")));
@@ -1443,7 +1529,11 @@ CopyReadLineText(CopyFromState cstate)
 
 				if (c2 != '\r' && c2 != '\n')
 				{
-					if (!cstate->opts.csv_mode)
+					/*
+					 * is_csv will be optimized away by compiler, as argument
+					 * is constant at caller.
+					 */
+					if (!is_csv)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 errmsg("end-of-copy marker corrupt")));
@@ -1472,7 +1562,7 @@ CopyReadLineText(CopyFromState cstate)
 				result = true;	/* report EOF */
 				break;
 			}
-			else if (!cstate->opts.csv_mode)
+			else if (!is_csv)
 			{
 				/*
 				 * If we are here, it means we found a backslash followed by
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index dd645eaa030..e5696839637 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -35,8 +35,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v21-0008-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From be33c9cf092ae2593391260d1ce99848cee1eef4 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:17:53 +0900
Subject: [PATCH v21 08/10] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 52 ++++++++++++-------
 src/backend/commands/copyfrom.c               |  4 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  5 +-
 .../expected/test_copy_format.out             | 10 ++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++++-
 7 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3aea654ab8a..d7d409379d1 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -450,8 +450,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -482,12 +482,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -496,17 +493,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 14f95f17124..7ecd9a1ad2c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -247,7 +247,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 793dd671935..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 7421241de83..744d432f387 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -84,7 +84,8 @@ typedef struct CopyFormatOptions
 	CopyOnErrorChoice on_error; /* what to do when error happened */
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* This is private in commands/copyfrom.c */
@@ -96,6 +97,8 @@ typedef struct CopyFromStateData *CopyFromState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated with the relation's attributes writing to.  `finfo` can be
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 606c78f6878..4ed7c0b12db 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (format 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 9406b3be3d4..e805f7cb011 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.45.2

v21-0009-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 0c4550533ccd44febf576c144cfd5425002a9a41 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:28:02 +0900
Subject: [PATCH v21 09/10] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. This changes COPY_ prefix of CopySource enum values to
COPY_SOURCE_ prefix like the CopyDest enum values prefix change. For
example, COPY_FILE in CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY FROM format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   5 -
 src/include/commands/copyapi.h           | 168 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ----------------------
 5 files changed, 174 insertions(+), 178 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 7ecd9a1ad2c..dd4342f8b9c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1713,7 +1713,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1841,7 +1841,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5f63b683d17..ec86a17b3b3 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1188,7 +1188,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index e5696839637..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -19,11 +19,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 744d432f387..c118558ee71 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -88,7 +88,6 @@ typedef struct CopyFormatOptions
 								 * NULL) */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 /*
@@ -135,6 +134,173 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v21-0010-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 0c31ea16da2fe11004443e3fc1646d4f0dca0247 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:32:31 +0900
Subject: [PATCH v21 10/10] Add support for implementing custom COPY FROM
 format as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 14 ++++++++++++++
 src/include/commands/copyapi.h       |  6 ++++++
 2 files changed, 20 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index ec86a17b3b3..64772877b0f 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,20 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * CopyFromStateRead
+ *
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index c118558ee71..c1e9fe366f3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -299,8 +299,14 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
-- 
2.45.2

#174Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#173)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Sep 28, 2024 at 8:56 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCwMmwLJ8PQLnZu0MbB4gDJiMvWrHREQD4xRp3-F2RU2Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 27 Sep 2024 16:33:13 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

* 0005 (that add "void *opaque" to Copy{From,To}StateData)
has a bit negative impact for FROM and a bit positive
impact for TO
* But I don't know why. This doesn't change per row
related codes. Increasing Copy{From,To}StateData size
("void *opaque" is added) may be related.

I was surprised that the 0005 patch made COPY FROM slower (with fewer
rows) and COPY TO faster overall in spite of just adding one struct
field and some functions.

Me too...

I'm interested in why the performance trends of COPY FROM are
different between fewer than 6M rows and more than 6M rows.

My hypothesis:

With this patch set:
1. One row processing is faster than master.
2. Non row related processing is slower than master.

If we have many rows, 1. impact is greater than 2. impact.

Separating the patches into two parts (one is for COPY TO and another
one is for COPY FROM) could be a good idea. It would help reviews and
investigate performance regression in COPY FROM cases. And I think we
can commit them separately.

Also, could you please rebase the patches as they conflict with the
current HEAD?

OK. I've prepared 2 patch sets:

v20: It just rebased on master. It still mixes COPY TO and
COPY FROM implementations.

v21: It's based on v20 but splits COPY TO implementations
and COPY FROM implementations.
0001-0005 includes only COPY TO related changes.
0006-0010 includes only COPY FROM related changes.

(v21 0001 + 0006) == (v20 v0001),
(v21 0002 + 0007) == (v20 v0002) and so on.

I'll run some benchmarks on my environment as well.

Thank you for updating the patches!

I've run the same benchmark script on my various machines (Mac, Linux
(with Intel CPU and Ryzen CPU) and Raspberry Pi etc). I've not
investigated the results in depth yet but let me share the results.
Please find the attached file, extensible_copy_benchmark_20241007.pdf.

In the benchmark, I've applied the v20 patch set and 'master' in the
result refers to a19f83f87966. And I disabled CPU turbo boost where
possible. Overall, v20 patch got a similar or better performance in
both COPY FROM and COPY TO compared to master except for on MacOS. I'm
not sure that changes made to master since the last benchmark run by
Tomas and Suto-san might contribute to these results. I'll try to
investigate the performance regression that happened on MacOS. I think
that other performance differences in my results seem to be within
noises and could be acceptable. Of course, it would be great if others
also could try to run benchmark tests.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

extensible_copy_benchmark_20241007.pdfapplication/pdf; name=extensible_copy_benchmark_20241007.pdfDownload
%PDF-1.4
%����
1 0 obj
<</Title <FEFF7121984C306E30B930D730EC30C330C930B730FC30C80020002D00200047006F006F0067006C0065002030B930D730EC30C330C930B730FC30C8>
/Creator (Mozilla/5.0 \(Macintosh; Intel Mac OS X 10_15_7\) AppleWebKit/537.36 \(KHTML, like Gecko\) Chrome/129.0.0.0 Safari/537.36)
/Producer (Skia/PDF m129)
/CreationDate (D:20241007220853+00'00')
/ModDate (D:20241007220853+00'00')>>
endobj
3 0 obj
<</ca 1
/BM /Normal>>
endobj
4 0 obj
<</CA .149
/ca .149
/LC 0
/LJ 0
/LW 1
/ML 10
/SA true
/BM /Normal>>
endobj
5 0 obj
<</CA 1
/ca 1
/LC 0
/LJ 0
/LW 2
/ML 10
/SA true
/BM /Normal>>
endobj
6 0 obj
<</CA 1
/ca 1
/LC 0
/LJ 0
/LW 1
/ML 10
/SA true
/BM /Normal>>
endobj
8 0 obj
<</Filter /FlateDecode
/Length 7138>> stream
x��]���8�}?_���eYK�4t���]	�sI�&��aPH��mo�G����,�Nx���K�t]6����X_��
v	*���?���m[�����M�E�M?�����J�u�W�������<�s,n7au��������n�c�����T|�z����������~|����Y)k��g���S�n�mI�K����.����[�p�a���Up���0��ooa�!����J����0A�c�9��W��)|�����������9	 S��)��"&����!�����:_��H�]���u�L�f7� �.�yv�Q[��<$��;�q6_�9�'��E������i�m��L$@��LOn����5�C��6�:�� ������3� ;�����l	�{/r���������/-|_�>8&@�A.%���m?8��R����gG�6�k~:	�Q�L�m{��w��8j�!<�2�9	���]�����kV�h��G�7m�kg�+b�gWx��+����L?�h��\N[���TEP��9WTA�g��F�k�*�]88����k��$@�LO��U�|��	���L��x��o��+�B���Rc.r�L�@�m�Y����� ��0:2f:8r����,t�)����Wl2��8����&�sA�:*i&(����#7k��B�{>�� �n�����`�!�� �2ZO�WD�"�n<gr��6�Ot��?p��\]���w�SCp*��(D'����J�|E�(tb���Dg�|�6����Ln76_�.Aq�9���EPy���QC.�HK5�lO2t���F�>e�?�"@7�L+��~��L�n<e����
���\5\s)����y�S������8'�3A���3Aq�s����;^A�����;=�O��	�C�cx���x�/L�
O�1�"�����u�C�1"��
���L�
y��8�9�SzzA���8���s���p�@��3���k'8����J���!D���t&��<g�~3��K����=�$�_(�}�H�	�����Nx�&@7�c�
�Y��Y������:�o�#�Q������y�����\v��5��#��Z��a�2a�]0:���Qm�0�	��6<C��6f(O2t�!k3:'w�cx�#�x����������|6�gq�
GJ��S�1���d�O���n����46L�|��b�M������!'�s]����#-�q��N4�1�@��H�����;��#_dJ}��]��C.��!<>
��/�y��EGB.�S��w�����{��5�Q$@�n��7� ���$:��	z�u�1Aq�9W���ZLPy��0��Gn��gCsy��i��f^�=DG���z��t:�WGaq�1w��������,)c��`���w]�t!�G!:8��3��+��E�����}Q?l`���L�8�9�y�C���q����4������0�b���������o_������bk�,���Q�)�9�2H��[�A
dju(L�$��"�d�_��LR��I�"����f�*R]H�$��H!��{1"%�4+R�Z+R2Iu�"%��+R2I}�"%���bEJ�R`�P�0�X��IJ�c�|�/V���o[��S
�\;��)B��)��A�R ��R t+>3�����S
����L�$���������aX��)����R ��g��d[S��LbU,��,�$��}5_��0��|���O�Z����E����,��$2!�b"��Vgk��9�eSI�J�����*1�{�(��dI�"��~{[vh��5"�I���u
�����vnMiW���$G�PzE�Pi���;T"yF�JH��C���gQ�;��CT��-rD��I�qD�>4�g$Q�����G��r�
��&�5���rK�#x����Q���R|F���G�!�D@�QD��g�(���E HS2IQ�� M���i���$H����1a��'�
�6%��	V@��Ij�)	�, M�$%�v������E��-��������U���~`U?aQz$�CR�X����+r�~�R��t�]N[o�C�8�������t~TJ[��Q�Gw��GN�G��e0��8���f� ��$�7�-!G�P������,p�CY�=�b��~�
e)�7
z(KA��������,�"p#0;A��� �R�74�1nXf����Dp���@�3sxa�G��`n �(K��ooi�?
��t�a=5 �5 �5 ����8��O�9�]���'(������+����Q��!�9�]���g��&��1��<&�T�p��i��Q\?MU���i�� ��OS96~��/����T}��4~�j/����TyA������@�c�����i�� ��?V\�[��-�=��������Z���+-�
��u������Rd��iW��pA�cH��9�s�}�
��[���5�����R�?��+��s��v�Q�����G[�\1c��+f�b��b�� ���b�<WL���	�\1A�+&�s�y��Q�3��b�\S����b�<WL��+f�c��r�� ��?VL�[�+&�=��b������b\��X1AnH�� /X����������������4��k�G�	����>�����u���_��M�E���>�����?��1pg_��&��n8���LZ�zK�Z����L�����A��Vn�n�8�����v��n����R�Q}��3�0��>�U�UoU���D��O����n�w��fH�����\W�Q�a���%8e��B7^��j�����v�j��kC�*qU�9Q�c�n����o}�������o���y[+����V��z_*���l^������U��U���;j�������_��-�;�B��Q��RnvQ�f���n|�W�Ol�Q����SG���'6�h���D����P�&�����-������F=���go��.�?�QO���3{���wo�~x��/^�j7�|���r��R�/a�P�������6g�5-�z-*��HC�-��l�;�2������4@��n�>����F/�VX�*���S�VTC�_z+g�8�����������f�}���sYU�)�Q�{�U���oO�v�����:��Yz������
9����o7�Z��z�	a�7dW�.����OkZW�GnNU�jy��k�+��W�*<����
��'G��A����m�AUX���A���jP��U����>�6��;��\y(P���}��ZW[���68u������^�U��v���j���j_|�
�i��vo�f<O����K��,���
�m����{��O�[,�V�j�����F�(���"�
y�K��2�.�t/��%�D[,�h�X��M�v����{��"�4y	��e�V��5N�n��/ZN���(�������.@�:V��\�������������:��-U=.���
�(���@�UU�u�?3�{��w��EF?����r�+N���I��g���9![��w50i���.n�3>^g����xfy����~ �$��j��L�Uk��G6XTm���C������c���'������d�<�83��9�$����U��k]ohl��2�c]����~/�g����1�?��![�A����8�Q����x�G��b6`�����
E�`��@�g6�b6 ��`�{�)�\�/�G�)�'�v+�)s��_��b���{{4����<��(����/�����c�Cz${�.F1�����-�����dQ���vn�pr����d�'Rx��F1���LR�>�b�E������������X7p����1���us_�������
���G��l���������l�:y?���b6`������Q��
H����
��E���C��s�}��#��s��
��b���](�\�{�uN1�yn�D�2�?������b�EU���sU5�aWo�(&Y$'#����3�I��)�����D1���	!0��E��,�E,E23q�lXF1{�N��3c��~`3(f�}��z�b6`�|u����Q������b6`���z�z�������A���*�Wo�s����\�~j�c�U���]�1��}��]�1?I5i��p��z_@��cz����8&e�����"g��E����y��3�I����{g���F�(#9#�_c�E�(E>8}#�T�Y��p���*��L
/
o �-��0e���SN��4��A9���9��������B��e��g��B��Q��m�����g�,�����M.�
h?c��Vv�������F!�����=�t���	R:W�*8�����{����������:���g~���!;2t/{.��Y$��9p!���Of���8��{��zQF��K��3�B����1��m�|��LQ-l���*������T��v��<��m���j:�Ap�LOb�]�8pq{��������k�L����m:�;��������!�(�����[�Hc�������
�����@��fi�=j�����|2��G��n��Nc'�}1�Nc'�}��h��?s��*�,o�����n�e�&�*k�-e��K}���l���c�$e4p�Qoud�����}�
��w�!~�`�|���
�������My=����m�M��ly�����-��!y�,o�������/��S��6����1�{D:�M�d0�t�Q��0Cg��)����|���������tR�d�/vR��z_����\����5���WD|)�|��|���I��"�B!�������%����O������E��H>�b�������R"�GS%��<`�?��S��(������������c��Y���6��<j�*�����d�����o��'V\�0p��6�]N���^�,���A|/��h'�
�3cH�yS�m����V�%�#��s~��w��CZ��I�n����5B�����@2NLO�s��v� NL��|�K,n���C�����p�`n����q#��
��G������q�S���3&;�������s_�7���M`{;�'n�M9'�7m���������������%��z1N��r��CS8����/vHk��
�3c��yt��7*.�p���h��x���Nc��w�~=]�o����6g�5�az�j]��&��:��/>������Xu�x�V����o�l���������j�Y��qt��}*��l�|���o'?�$��r�{���7X$.��%���Z,��@8�[:���"yQ�?���9"��-9[�xT[G�g�����%�A��K��V��ZW��;�����a�VF�Urj
�(r�m�g�������cI���b�	����r+���N�%
������b5�����./��I��V����`���,�2;���2���H>Kh+<���>
\�5���������UX!�h�����V+l�H>$2?FV�h���	j��S���hp �����G�{m~W$�{m��g$�-�000�� '(��S|�W�u���}Q��	�d���3�����T�g�'� �Z?#�d�/�,�L�j��QgL�,�����p�:�S�h0�^��|�����/2��Q����U��l����G�='9�(#9�}�}�����������������=���(#�������;�l�:��h�7$d$������J� �����K7��$S�C'7�8U7z[�������s��
M�b���b)��b���b<���c�E�^[+?�n����d�{���5��b�E�v�M�b�,������=�J�,x���=��$����/9nc�.���1n�{�n����b�`�|V����u��������:����-b%���u��6���t3�1���NV����SLR{3���$��s�}��+��s���}"��s�I1����"�I���������(&Y$d��)�bxH����P�$����^L��YF�b�E��Ot��d�|��@���}�e$�i�,�^B�(f�
��t�(&Y4�0���1���u��a�(f�
�Io ���:������q���P;��Em�7$�(Kj����Ay
���w�RV��s������9W���A���E3\i/���3�I�'�
��
��$�.N��(>�"��d���zC��v��K�,��
��q��0������U���7ff���9�}`�{����m��q�x�Po1����r�6��{���@���r^l�:�+�����Sk{G�
)�Em9�n��HJ��}QRJz� �CXR:����R�I�I3�.����1�R�2�c�qw�=�E�Q���[��,������{���������w0�H��k��������*>�G����V�����Dl�n�:a�.t��n��B]�8����CI�{�Q~�m��.t���/���$m1t� e��Hc'����i�d��w�4v���c���2�g������i�dwo��h�>:.����T����	�h,Y$g���g�X}}&�|�`~0M�2��a�<��?0��m������X�>���m����s���q3��`s���^��m�M�<��e��mll�OYqC`S�C>����{as�2����6�$>n����#s�[Z�g���E��N|oQ[��?�����b������{���d�/�<���y*���Rf��F�`���w�E������z	#�d����g���.:(��E����Z���{�.������t��9��o�����awrC��6�KL'l����y����b��6?�y����/�����ol�����q;#�������V��%C?t����6��@fpah;�����cP
����E�����s�n"�s��E�����v�F���5o����S��?�fO�,�Y$'G2����1���/#6�P�������C��Qob�
���Z��w #n0u�f���"c��6�{������-�)_�����v����-����^�����T��o�M���-N���|�����0C?�3�����������vF|���!��L
#����������������iJ{��������
endstream
endobj
10 0 obj
<</Filter /FlateDecode
/Length 7238>> stream
x��]���6r}���s�#�"E�� ��d�<3���@`���@��uS�Q�&�ng<8`�6��bi�oZwi���l�������j��f������m���O!���J�����T�X�n����\~�������]�U�c3�n���7�Z-�c�w��o�{�X��i���y��'����o���\�����o�+},j��dUB�e����jw��}���y3Z-Z-�����8�����e���T�"���7�oTw�uO��e5���j����]]m������Z!�e�fST�"���7�	sy��bY���������T�y�z�jY����N����,���"W&O�V9��S�Zm�Gj	�u��E���*{���������U]��U�WYts�X����F�����?�\�dW�t�f�������0�Yl���tm�v����ka�3U.�&������,��������(	��/�!W_j��x�e����T;�[�7��%*��������q5�(_�J����o������,������r�wJelT���Kmj��v%Ln�k{_VqY��]m��&&w+����"���/���8<*#^%��*�_F��Km�2�U	��k�����j?�����E����pm_a�%�*����]�R�� �\���d��uU��
�0R������1Ww���nW��o�.P����Fw��5��r
�[��rT��nW��{�GzT��Z^Uf7�wx][y�s9u/T�&����Q��j�� 6��R���w!^�����*ap7U~�o�~�w����z�u��Z�]�f�	��R���n�-����-�
Lxi�s��Z:�2����������r�(A^��Z��]��b��Mi@�G������0�����j	B�s���U��W����ue6v����!��osfQ	���gC��Em�f=�0��|a5bY=����c!��>_�A4'Y�*�>k>�b^����o����&�VO�H"�~���J��At�}%.���i+��f<��U���G�����R�c��@�;'���'}#&<����V�%JqV �+p��(�9g_*n�IP��*atv]�����zT��������s6����-+��KT����.���(b�FwW��1�Km(�/���&�[�*��NL��i�����_)r�Q��X�������]U6�8��=+arv][I�2�#�09��
����!
q�*��6����2�����w�]U?���G�s`r�G��6[E��q3�d��j���;���X�0��R��Km�\���X��/���3�,�L��P��kat�^S��9{�?z���2��zg������]�����}�b�]C�����<�;\��7�AU�a��{,z����C�5�������L����g���|u5w ��f�`�F�F�22s��%���umfl�����w��&�d�it�����hNR�9�ob��z,��}�}���o��lN���9�X�D%�ieT"�9��J$��B_���LR*z�2IJE/�6I���vKR*���)�I*�����LR*z����E/��
_$��
_�R���E/=����&Y����[��C+���P*Y��^��G��Q&Y����yk\��5��[�	��������(�	�K$�[��/y��G!�Hx���/��lQ%_�B�K$�{��/y!	�DB��i(�>���^,D�+�Xg���[��|Ms����{���#�w���&9�&����)c������ADq��/�*J�
�9�*��k��(sEoI�B������'L�/�!��PE;�(�{���)�:J�9H1CA��NQ���$�aL�
�0&��p����9�I���:�I�A���$� qcL��&�#N8q
cP�X&�#R��HzG� �IzG�p��$� ����hAb���pA��BS;�NLE-^�H��^J�z)I�����HR�$�E�
!c7�/�3?���H��BR_��3i��$�BR_$����������Ka�E���H�
�#��y,�$���Q�����&�xdX�7	e���&�|����](����:_��"`��r��/��[�?t�n������C���Q��U�C�+h5T��#��'��e/�@��T�?����p!�E�#\H����2d�?�Y�P��l�?�[���Ct�?�Y����������l
;�87o�	C����1�F��B���!n����:b�e�:�.�Va�s��9�����N��s�0$7��6�_.�y��#�=��X�I����	�<�u���D� vb�Ic;qa��&y�`��&y`��&y�_���%y_'����1zI.3��%y^���%�����u��N#��2���G�?�-�M�?�-u[�?F��F�~$����*�c��!dCos��7�u���
����[�y,�$??S������qz3�y������cY'y@�-�q��}��8���ccc`�^/����t��$�I��$�I��$�I��$�I��N��c`�\��9&�C`�<&�m�?����t��$�Y��$?��10In��10)����10}nQ&Y��$WY��$OX����?������E�U�~���nP�D�E.�X~���O���^~��7�
�+���-?�}���)C�U	��i���q��[��V%�5���R���r=7�����5�����Z�*�����5�F�X�&�1�Y���]���=������qxC����V�|�_�-u���[mny�u��{��m��(��>]�
������'�u����^������k��v�r;�E��u<�!�|W�
���x;`������k
�e.�z7�k�~h=��n
�V��2H�z}l4�-
/�}X
��S�o��������T{u�����Qm�{G��J���MPb�xH�ZUY�Q�����9�Y����d�y
s�go��f�����Q�����k7�������b���a**6e�7��,5\M�:�7�\��b��Jw��J��l��?6.���V���L��Z;�b�d�������u��&lQ�����E^>�r��ln��q���{6��7Ht[�
�7W�o����a��1�������fC4/4�h������7�����A�������bP���X��Z�	<�Ln���4uh������>��l4d]��zU�Z��8$4
j�������5��&����h�.5�kZz'3{�S�A����CF��A7b��t����2<J�Nm^h63������
� �`�Z��9�������������N�!�t����9��o�M�0x�.>A���`x�
�&^��a����(+������uM6�&�6^�1�"<����3o,,jbK�B�K����w ��E������D�8�XX�w���$N���x���e�i#������C����u82��CJ�Xr���-�E��,9X�4�u�E�Q��%���0���E��-9X�w;82��gDrY�30�mF�
����3j�-�=F/�Q��>��m��_%J��Ns��oF[����L1���W�(f���c���ZP�������fj����&���)��bf��A�^83�
��-j6<>Z�'�������8=xn����F8�5���F�|����^�
��-jz��8�{�
���:<��������b2�O�p�z�������
����(Q�l��d�f��O1Q����#��������b>�7N������w�HV��s�n�#{ys��J�������@���kE{	YA1kw�qB�;�TP�lN���6����������G�E�Q'���m�Ti���s~��G7S�
`*�~_��=(H)q��[��)e�c3�Er��(H)gP����LJ�8cNonu*1�S�fS#��0�w��C�������46�=cI��n>���v�o�����vp�w&�E�F��N���!��~U������M������+2���1$��O�
�-��	_��b���d���B�W�voX���a*N���G3�-����;��������%�J�2���2`��?�Y�[l6��s����y��M|X7�wp� �S�q��{��`&�=����8��}%���~�"J��=���U�wB1�G�n���t@|�����������fI@|�Hx��*g�k��l�����~@|��.� ��"����N��E��;/��~�N�����J+�f�z�� '�4a��ei#f��S<
xn�gf�S�y�/4?Z0b����.�����'
$v�q�����u�agF�x����w��`#��M�?�?O�`�=���nj��wd������k'#~Dm�E�jGF�������M�����fV`�s��w�~f�s�}�!�x��+DqQ�.�U�;��qa5���s�2IhbaN��M�x�=n��b�����	k�9����@S�'F\���V�!t��Nf�����������2#��)N(���j�<�v��1d�q�w�x���ud������1���7�3U��S<�?o�ta����f��*OV�f<�M��Q+���@�����+�Ty��7-������� �*��k.Q�����8��S���0.,��4pb���[�<.,�gT��<��gT3Uf�:p^'U��3U��?����,v Uf��'���"�pA�x�o��o��1Og|��{9����S��:������=x�o���
�����b��r�������D���3���-�|�<W����T���-�����*?�w3��i�*�
��U��w�VI��y�e ��+��?7�������Xf����Wf?��
�0���W�<w�q��S��������|����d�T�c3��f���
��n/�,84h�c���9�^�f�����H��~�6����=@;��S)�N��+�sT|�����\3L��������l�~�"b��n$�����s����q��&M�\?�7���]�����r=���o��Sn757��Hw���5��?�)��P���P$��?� ����g�nH��,���Y��.g���������!kS'�z.L8m���N���Z|�%{���c��6��4o&�=@��*����n��h��\<�{[� �S�E{����!�Iw�<K����D�����fU�t�U{����Q�L������������/ ��{��{O/��L�w��v��V�P�fr�b[�6����Ho�Y��li���qa�
�el�	}��~:49o�ks_y��|����m�3��b�zm5�g�����C������g���2�"|��'W��!���8��=?�>������3�c�|��������*E�����z>l�@�?��?/�h��'���"��Q���C�os,�����0l�s��S7����p�wo��9���g��/�gf?%��[�������M��w�[y�:"tQ���C����x�;p���m�wH��p���E8�e�q�<.,�{n<{yn�v���E�a������E�x�����`>[�[��Hf���:<���	�D1��zz�4'����\��w�z�S��l��,�x��s1������!k��\� �@���N�j�!�|����]��������=Ykr�t�)�d�o.@S��!8�b����=��]3[4��(���-(f�?d��C�����"�
�BK�
��-����H�*.,��x��s'�wo�I5x8�ZTpO������]pO���sk�3�d� ����Q�Eyz��M��Y�q�=w� �3<Gm�-�1�����DJQ�CI�\�{�t&���������")}Do<g�|I��8�9�"��zM@ R�+��c�a0��f��Q�/X��OAJ�E���g��)\�[X4�D�����;��c��� <'��W�4�a*>�3p2�{R8�Xl��!��@.h,6����\o4�65t[���v�&~a~����v���}3�MQf����Z�� ��o6�S)
J|Q�������#j�*�����iZ����{���g����0D|��5e��o�<p1���!
��-��C��Og��-��7�� ����_������T���7f���[_��������q�3*L��f\��}s&���{�����M��|��6��������R���2L�Ap���q_-��:p�>�ui�����7����U�f��O|Q�`�g|�����<Y�a���#����)D|se|z	?�j���]:n��'2����"|�
��}��$
F\�:�&��{�F�0o����NgS�Y<Y�����Oqb9c7-O�xr@7#j��������L� 3pY��~���=x:��[3�r���F���*3�t��9��AT����^�t Q�G����*?�7~ >w�m��s�}3�P�/'����*+�>M���q��Ee�X��[��-�.,xJ�p�fP��I��"�J���iQ1�����t�����D�S~=i�G=�w�&��1'����p��<���p
�kQ��<�;�OXc�������|R��r�������*s@?a����T�c*��L�.]�T�0t��%�*?��G�+dS��j7k��!T����i(U�����^>U�*��n��y���r�����Bl+����3�Inj��@��kS���K��qX)���P�o �7��1g[�L���8��
<��wD������{~{({m<O�?�pA�<�L��e>���a*��r�6�q{���?�b����\3L�J~���\�'>�w��	�H�Q�Pr=W����Fr�������\?��sK�������!%�>��DD�s����W��SF��-x*���}{��r�0_�1p���	�l���x��
$�S��x|,��Y�L���A�}aLY��Z|0p�!X��Z|���3�
r��x�2���lr�u��O���Sp�h���k���=�\����~��Y�g�����{$�s���8r����0�Y��z������7�x>��Sn7�����P����$
�,��[�n���C}���1�f�:�U��Yo�P���>A�s�(�����}�'H�L!���*���a*�_hmj1��Z|�Iw���7���t�-����'�'����?�� �=@�������.H7�T���_��wV��H�oV�I�#j��4���MV�f� �s��fK)@�������{���+������N���
endstream
endobj
12 0 obj
<</Filter /FlateDecode
/Length 6886>> stream
x��]���������u��	��f����fX�<y`�"�dSC���b�8GM��T<�Iq���6�������vzw�9�����o��.$gf���J!6�����f�����\���?���/_e��)��<�Kp�;�����;���5������
_�<��$�/�~���Y������K���" |���2��s���/�����M[Y�2��:���a��:��c�9��P�|��:!B����v�4�x�~y8����I��GpE9�Zc�����R�D�-���/���J<U�A���n��q�� �g0���L�������j�����7��@��u�>D���6��p'��3���������o�`b����Mv����:xX�1��2W������>!�K�hVq�m�V��u�X��M����.��~f�����3�2Di�	D?}eF��O���n�3>������SW��.bmL�����>a�-��Sx}m^��M2f*6�� +[�D��8e��+�q
���X
b����$D�u��Z����������Q��LA�������,k� �����v����1��2�}�p��9bP�l�5���*G�����A���N�C�}�g���N�}0��=S����2j��+��
N��1�ue.��bSv� ���L��������S�}��Q���9��V:u��������I��������A�R��+W`v]�r}|��+0�d��&t����a��./Y����Y�1�R<ZL0�`�
�`���/vU��'����v
b����P�|'�!�u����MR�)��6��@���pK�i���1��2��c�/$s���pW�C��
��]����Qz<���p��cs����n_���|�`;���0���{�0�o$�`x�S/��;��s%x�c������*�fA�qR����}0��YG00	�g���E<W��lCp�+Z�b���=A����$�u��� ��$���1T��K��>�B�H��`1��>������������y�"��x0���U�������SVi?�8!�u�^��=�.��@
��UX�s��� ��jw�v����pjW��z��S����*w��!�gs�o�_L��p�Z\�������*�As�_|��e�}!1�_l	�p��K��9�p����w�x����Ha����F����	�aT�Y6t��'T~�Y�7�(5�ZU����������T��Q����B�R���S��g�,��B�y��+�,�)g��!��J^['��`pE%L�/��D�@����m�_����
A�������0*y��B����~j0��J��>��\������6%k�3�lW`���HR����� �/�=�^J���+���+e��\�����+����J$B��~���W)?\�������;J�<����<��M0��+��3
1(f5bP�3�`(T	�b@�M(j\B�P�
�_�;�?<�29��2�P�������E(*y�"*��P������E(�x��E(��P����R��Ph�=*�e����C*��P�[.%�`(j%�%=JtA(���`(h�y0�h��!�B�@�v��V���@�W%�D�C)�/J�V�X����E���C��A�������6����������B�<-�����Fr�"x@�B����#��������/O��.���~@�����j�x���w�!�>���C� ����s��am"�"cx82��2<)����p$
G�8����5<����HG��p�
�#qx�e��#�M�a$	�l7���u�i��6��<am�	#QxXd��)<���H�Tp�
n|-%<E#=Wp�h(x#�P4��P`��BP�%>b�J�����P���4
�h(�#�P4����R
m8�6���"�6u�����l���L�p�P���b[�Ec��$���$�'�E�)N�e��x�\�p�P����Ib�$<�$`H�Pw1�uA�p�����S��1H���a�f7x8����������!�R��#����%��D�f���p� U0����d ���/��,�@����9��d
9+�@��������H��l�8���lf��=v��������;59EL�!�H��#��N�~�e����#����	??rk�d?���s7~�e���s�Z}������#��f�%&�'�����0�0�1��x�`�c������<���1}=�������xL^�c���������8f.�2������c�n������`�~����(��~LZ�U�s����	�s�n.�M������{��s,�����g���\�9�M�����J�p�y,��G��c�~�e���s������t11=���aLL�cb������<&&�11��	xLL�cbzp�������<&&�.����qLL�cb.������l?&&�6���	��������C����\e�11O\�-��M����/���.E�
�������|����_fL��}�����0�i?����lfLY8p��K��������������F
���r?�T��t��N�[Vq�:U������p@�JZg�~������������$���G�����V5C�6���[��i�����p��]����t�4��y`I*�k���B����}�\�����@�5�s&��f$����W�zi���~X�lax3	�v7�k9�~�6?u�9�����$�����F3
��}������E�f+���nz��i���:c��v�(��=c��J���f�F�_�Y���jy����x[�������(w:���=��?g�����s��^+�Go�5�o��f��u�p+:�������3sN��,7~(���:;R�:N2\��95�|�����3kp%�5��!5�,�R��$����.w��0���kv%72��R7��������p������|�iw���G�d'��m��.^`�5�����F;%KF��J�Z��T�/y���VVd9�����"�6�J3I36��-��h���fV�Zm��j:��4O�wZm����i��>�0�4[�my}H=�"�������l�e2J�|-`�s�[i�}���v;��h7��bG������,�L��������S}���?��Y?hV�H3����8���Qw�qw��l�o�����0�In;�dQax�Y2�);��E]T����f����~+�Qav��f��i2mTF�������m��um6�M^�1�2����*P
1	}�r4IP
1	���h�b���K�/n�G=\�+���,�T���Y�@�:q���o�@3�D��.�����BZ�f3�5�����4��p7Y�"I��G<I$������kf��
o����lR�m�_��l8}�b}��H�f����{xF*��'����J�>F3�A�1�G���4���o�(IZ�p��^\�V���)'�����$�:�����f�&I�V�3����;qh�z����[�(�� xD���GS+��VtY;_�'9����cm�Y��������M�cobvg��[k��?9v���J�$��|���X]����D9�
o>h���`X�d9�
�g���Z�p�e�[���jMR�Z�%U������R����*���HJm���O�JJ���.f-��i'�6BM��nfP]K�7��E\GC�O�X?,\��jz�i�I�u�3Q�]�_�q�����;����cE;��[�M'���f(���}1�� �������Y�\���8�queJF��R��l8}:����BH�p��pz���&����r�=����YG����p�'p��h�Pw���^�p��_��]oMTw��8�e�qu�P&��}�}Ct\��a-�r��&Ff�7�ZtWok���a-�d��'Sf^:+�WA�k�PP��_����4�w��M�l&I�I��M���E�$���}���$��~~UL~u�{��G����d_?qL�]�l8]�5[)�S8>�g	5���m_1��=�w8���~�I!�:<�'��eKI�u���Y�3Q�u��;}�C;��������o���h�d!�FX��1�o|,��j�Z�%	���K�u��Z�/��_��I���6o1�>m��[�(��F�b�A��I��*�,�3�+�)��T���[���#���_AO�25<�3)��GS�wr�5nR��G��=a�G���t��7��}��������<�����M�%Lb�B�7��1�$�m�\�y��C�6qE��5~C�F�7z���V�b��8JX������Q�{��M��X\l����n����i�C������Y,���A���B,��)��k�1���K�������'�&����c�������G�5�W��8������jQ\o�Bwu�fI-�0�����$4�����j�B[?�^����Oo,���jq���h}�Gm�G��b�����s$"��[���������h�~�$��7�6������AP�k�����$����<%�Z�+Oy�-Q��r���������b�h�������b�G��L�.N[��_E��
/�m��������]I-�0��q�B-�������Y-�Bh�W�jq��&Nr�~���nB�u��,Q��B��oM%����KWiQ��-f��>���jqm��e�������_-�InwoQ�jq��M����7V���M��N��X�Y��6���.���~����/c/�X�G����z��h�"�W~������&�`�u�=��F+�
�6�u�gO����^��\�i#\Goy+�F��������d���u��/�i�=����P��5�������f_|��_��bv����Q��I���<,����uGp�i����v#�rZ��I8������:N�ns�+���&�K�d�����N�t�������2��A��z���1��FO�����95��n X��b'�����za6��~hwY�1���������6����C��D��K��r�`b�I��7��3��P�g��{;��CL�~�>���&Ix|t��_��bv���gV��[k���I��5{tUhR{n�^�������w�D�\<?))�T�����=�,�
�/Z�[t"�D*����~�%Ra��M�?%Ra6=�o���0����u{�-f�Y{��p��!��5�Q"
1��E�4�$�'A�D�a��ix�L���G?���lw����~�b��{��'��F�t����[\�$�>���}E�/&��K��v_��$I$)��$�TW����o!���+�L�H�p�7����yK�
����/���!i�d�G�=}4d�4���[\����F��~#f��7DNt0kXj���{8i.y�]�����mn~��`G�4u��Y��*)5�t#�����Z�Gg�%���=+��{�-�����_��I��+��{x�[��t���3�J�VW��x�4�B�e���f���y�[a���E�?;PH�����W�t�������a�B�uxD��Fg�i�f#��~�U�pkYkx�,�Yb��{|�z�����Z�w},��kM�^����-���!�V��?-R���~k�}��Q��{�h�-Xl����Q����f&	�C?�&	���{w�
�w\o�F{Y����T�>X�~RR!�:<�OKz�HW~��6��������#����I�u���/J���Z�����=�����,�FX�>k�>)���kM���D�7�Z?�5�
���������s��[k����~k����~�w����O�o����f��6KFXK���N{���~ue����Z|�����z��N�;<��r��p�� YvxD��Kp�$t�O\'7QvxD�C��(I�FkZ��A���O�e�'�_0A5��[m���B-�}k�?[��M$����B-���G��z��.���+�>��
��~%��-f�e.q���f_������
�/^���������^\k�h�,���i����Y/�*S���
�XX>����/g��������
�&�o��{��b�G��!�����b����r�G�,���h��0o+�{��z�B{���&j�!B�w��.�xD�GtB�7�8Dh��7�EQ�it�0����
��b�/^�u���Ir1��[-.��������b�'~S���C��,�b]���]�R-�����h2c���v�L��oV���k}�P��z�)�b��{�j��#zwq�GI-�0��n�Z!��>�JmU��[m��U]���^�QV�#�v��{�c�P��_�������|�M��c��������;Xx��O�V
����,���$I�[)�K����B-j�����������O��j1[N�3q�D��=�8��5o�;<���z�
��=�w�&��M[�M������I-�0��;>U�o��Uq�{��Z!��q�������D�8Bh��z�\��BKj��V�L��-6{tJgR�obv�v���}�O�Z�f�tl�{ ��7	w�|���1�����h���^��N��y��)<�?+&�EN�b���~�g$&��<����]��
-��Q3���}ZLg���o!�bP�M�n�L�������i\G��~�B!�F����\1�w����&��^����z�I�K{��e�-��m�&���f_4�~��6I��R�L{��NC�}����CK�3���)�s'���t�98Wr����5�l_������=~{��j�$W�b���lw�;�	�wn��?~}0�����P�����'�}�����FE'��p(������*�\k����FL���������|L���p�
endstream
endobj
14 0 obj
<</Filter /FlateDecode
/Length 7322>> stream
x��]��,7n������V*��k#��� �lv�8��~K5J�-�zc�f5�I���I�������m�>*�v����������6\���nW�[�	��n��?���cf����O�y�]K���W����\��8�n�������y������b��><3��lZ�w���%��&�#Pv'��v���v�����J����������y�����mw�����/�`��
���Z��mw�j��=�v^!���C(�5ioK�����m��=�`�����|!����Yy#d�X�J���k`���#�VY��E[�
������|�-�8�!F���n���
���f���[g�%��=��qF�����m�+�s��dZ����_(��8��������-�
1�j+��d��[9�?����L����n������0����_W�������k�����6xKLo�%?�o���
7����D�{�S���L��~CL��\�&��
���=��f��\�Lv�%s���/�m:��p[e���[b6w���p�����=o16XA�O�y	�����Lk�
w���Xom�U�CK�vh�o�Z����u��;xui�
1y�c�j��Y�n�%f[5��0�.L�3-1���F��s�M3�8�E��i���4�_���|������OK���0�����f���5�k�Gt��Z2�8.���>�^]�I1���F��ps�rZb6s�M4��>�9|�l�3-�Y	0� ��3��d$��s��b2s�L3s��n����}�����<���+�HU`<�i�:y�t��v��2�m����<:�9��x�1��aN���	
1������nbXL�-1�������&U�n����4��ih��!������o�
)�n����<����0��n�����#�k��-7T�	#�l���
�rCX3g;7�lf�[3C8������,�i����37�hf`>����.����[f|t�f�r#GH`�7�Bkf�����lf����${c@�k�M���_k����6&��je���L�0��9�6\��������!f����
���	���-�d^����"Y�LK�U��x�2'4c>A8F4&nx�&n��y��|�C��ld�.�{��	��6�k`6>\����<�`��^1sKLfn����r��\����n��
���b6�=�8��?�kS��]�YB8+k��b-���^��%{��iDpv����u������/�����'������g>�?���9Z'����2-[�������I�Z-'zH�:��C����Bl�R�Wc%�~b��K��d��Yse�(>���^Z��p�b%pSc��K)��T:�
��l���quB���m�A�C�o���
�f���Z6s�Kl�-w�����%f3�U���������,zI����o������#�~�����y����y����%�i�hP�U�%�q�1�0�
�@�6S���e*��L���A�J��"+���D�B1PMV"�e-B��g-B1PE�"Ue-B1Pm�"��Y�"c-T����2k��Z�G���6k��~Hkc��T��2C	���o�R �#�D#t$�-c�J�������J�5D(�7�H��H�&����'�b1�u!k]��70�
c���O?��p��x�x�(�H��@��@��$p��+-E���E��_c&�/M�Z���G�/�_�<j���A�.a���UZ���9���[�[���fomn�@�����������9�|ks�rl��������[��>�c��67~ ��omn�@vY���=9�tksK��r��d��Nm�6���'��nmn�@>����Yf�S{rl�\C=�E-�_?�
���
�*�*4K�P�<d��"P9����;�?����
���&K�@
!���C��A2��~"+��|7����J�7Oe����C�	/�bxI(���KbYgzxIR�JB9�.�U��E��.O�� ��WA9�*�U����]��W�`^��FCYU3�*}��I�/���J5��9L�r �@�?�9T��A�C|��E����?�%d������Q��s���W��#�VU���Q����/�J�?|�Vz����*=r	�Kue=J���H��C����\��n�����[]��.^#���'|=�u�������������_�1J�p���:���c�R9��������LDrb��{j�aON.���@����@����@�����@�����}==y/�E���y����w�����u==���'��(�'��*�'��-�'��������n��G���i�.���g�]6�6��a�rSYgz���
�2��������u��8�{��M������c�������:�ce���X9��X����?�.9����czjrLON�	���@��	���@��	���@��	���@�����1==9&�E���c=:&��c���czzrLOO�	tQ�O�	tU�O�	t[�O�	cV�O������������9�~�!�����l\������	���Ml\m���3cB����??��-�������g��z,<�~��9~�?��K.�3.?`��0!k�C�������`�7�.�u��"���;��L�C��&9|������+~�X����=����q����R�m�c�U}�w5g����3���#�{��{������~��hO�~[��W�J��(�����r�]�DJ���6����zW��dO^r3Dy�Y�P#z�Z:c������D�R/8\�v�����[)n=����FX
{�O��>/p���B�������0n���	;�~ ����.���R8��:��rg+�E��/���B�r����)����WfWV�e>�4����[r�s#*���� �b���Q��yc����(���)���ycwd��Q	�kU:z�*�vng&V�V�N�����;G����N��V��;G��1�j�:��W/g��3HA9�nzs�^���K3������/�w��:ua�����?>s���CZ]]�����z%��u�{��8���u���B�nbFy�9���e~1��Y���\�b�����CV�k4lo.�n�R�J���7?6��z39�F�����Fz�u5}N!s\j�&~���Aw���)��(t�N�gu��1�c>�
�2�_���^je.
���~E��
e�`�W
��
�+wWS�$�k
YyQ�������j�H�W�[CtMkC�s�B]{��EW�Q�`�nB���n�L�zN�n%���Km�sRw�X��h�w�7�}3�A�m�7xvwh�����J���v����sdD����������51=w-x�!`#�C��9���Xi��[y5m	f�u�}F�z]A��F�aU�*�u4:�*����>+��::mG�}RGc]���u��+u��nUt�����*2��u]1����bOF��XG���u���@K�F����F�Q������f�s�F\V����f�|F����3b��%:D|�X��X��������BD���{X�
b��W&A��LG)]o����.U�5���#����
b���w->qB��Y4���kb�-}U�hDN�~f?�FQA���M��2���z����&���c�D����nU��h4zWs$��t�+�j*���u���w�^bb]���#����F]���z�F�1�>o���|�1�1���	b>"��K����v+���1�zw�Q��V��_���rWS�s�L����k��Ow{zw1q�5���]�c3��,�Y��������F�!��t<E���
��.��d�=?���kz"�h���T���O����W�����m������
�"�#����dT�
�"�#=x}�@)":v5��8V���}���&w,S�p\�k�$��5Z�q ����[�*ve1��G��7.����V�>;�����Z�o&�	hu�w���	h����hU�m�����f��z�P��M*����>�7�g>y����}������h<��'�S4��z�}�gt�V�X���|N�g?c]�!T���2�{.!��XD��'��o��E�M�6��Aca�>W����13�&=;h�<�����MN�<��t�e���[��-�E����"�}D��v�e����t���M����M�j���o����q�2��:�S��oa���t@A���0*��5��f��g��o��^7H���x&p��&����b8E�_���:��>���-BU:D�g��H*	��Q���[D��/��_���/"l�s����	�t|KOMU��U�3�_��U_]@�t6��g�[�C�G���(V�|����^9M�w�����Z�o8����7:�=�����6�V��yR�a����{1�k�,���C8i�v�F7�b�������W�EU�xg�<�D�Q����f�x)L�K����c�o�xl�^�P<��A3o)Oo��%z������NLuV5C��xJw����@��xJ�]��Z-PO�-�~��s��#T�}+TF��T~F���bG�����C��ro�LPy�w�l��C���=�S���G��t��Gs�������5�J#������F�N�;'��Kt��TUP�*}��(v"T>�7�QL<�mxGl^<��J?��>}��F�
*����*��WA��{��=����m:*��Sz2��Y�
*����_�L�
*#T��/'�V2��Z�2"�������{���J�`bt�0C�G��Ced^r����M|��dT^+����{��f-T�c�w
��=cCT.��4��);����e���f@?v��;|�r��U����'����N<s}�V��J���x������������c�
C���/7KGh������.������@;�h�����	�+�%F��+p=h�������U�S&���]}+�&�l?#��GJ?#6=��_J�z��7s�p���o \���A'vn�qSc�8$�]�:1��O=�F����N���?�F�
t#\bb����a$Z@��5��/'��:t#T��z�g����.��WG�e�O�#�����fQ��K�S"0=�`�T�{$���k�i3���t�Z��w�T���o���C�&!9�D�F�J|����dt����K�	t?"�����������E�&����=�������Mbyc�������)�_&x��.������:��:�jU���Lt�)�:��2��u�����A�=���qW3���M<���_��[�)�hz��s�?i����f����o��4�#������/7�4�'7�U}n}<_n����_e������%!��Q�+���G����66�&v:��U.�
h3,F��\�i���������|�1F#�L��+)3�E��W����&#�"�
hp�����#b�O'!/7�5��9r�~��Gc/�{�D�?�}eY�b������'�]�1\�GV���Sk����W���c�@r��4��
�AG5*8���}�+����u_(A�@��X71Sf4)�@LL�{�b���9CLL�������@LL��g����ALL��x.���/a"�
��^\��������@f7�
2���LD�i��o�2�}3������]@��~�23=��`����
d�&�����yW�G�^�U �h4�@,����Fd�^�b��k�6�tvt���T:�y��/�I�����+j����n��'&�@�E#�������X�>Ap�����[��F�����9�jd����� 8��tz�<+�����������J���|bw"&P�����m4�K�t������t��7iP�V��t(U�<!���L?��^+��#(-�3��)=6f�@i����4q�pt5�l��4����������=���=N���-�c1�N<Dv}��`,"l�����n�ZDE�Mz�[�����E#������y'L
�M�������u(l��`'���]1�����/�z�0�|��X���M����������M���^�]k��Kj�]+���R���{��|�:YH��0O<��4F��
����jG�����J#�xg���������fN\��#T�g�������*�8����F�O��G�����Q�_!��}�6}�t���J#������^W!bD������v�"F�:q������0�N�Yz��OE'"���<".b�S�����ND����y���{"^+�M",	;}��qa�O7N<�f����F��Fi���w*D\4��wV`�yG(cT��w�9q�
�*D�P�>�?�:�a�XqQ��3��'�%�U��N����Q�X!bD<����(����/-��[�������#��>A�~����#�tb��s{vTF�S�F�����Y��u�����~+T�&{'����t�L=)y��G��@��r�6����=��@e�������3T���d�1�����4�x%��,��t���1���3O�2����Q���������YW��B�������Q���q�!;�0�P���$?��S0t����bz�chA2�3�'����I=O��x/�(�,z(��Q�;v���>������1��CwWb�u�1��������H�y���78	���=|�r��������=��0���a��`}.O����h�1>�`�U�U��@���Oi>��z3�y�������F�J?������
C���|'�����O:�[&�A�W�]}�U��@;�I�c�Z\���jK��~�-Pc�=-���������*���P����H�]�?<���5��~Ep-��u:kw�3b���gM/6�M�\���
��Z��/b���r���.��A6�
�n.�E���(M�|����Q��91�}���JU�D:}�e}�e������WEV�J������U�#�v"6>�Z�k�M<�b�%��]p�P���?��Kz���H���+�<����F�J��xc�����@K?��������0-u"��9���(p������G�k�}D�z���6J/�{t��;7���i��	:����V:<���V�n��n���h�>/���~�@�����*���z�#�3]���R�>��O��O��@7BUz�?}w�
�����0�F�g������o�&��r��F�:1i�
�N����	��wT�F�
t#��������*��P���H�D��A7��~�m�5@75]����}�T�k�=/]|���+�t�������~���#zW�
endstream
endobj
2 0 obj
<</Type /Page
/Resources <</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G3 3 0 R
/G4 4 0 R
/G5 5 0 R
/G6 6 0 R>>
/Font <</F7 7 0 R>>>>
/MediaBox [0 0 842.88 595.91998]
/Contents 8 0 R
/StructParents 0
/Parent 15 0 R>>
endobj
9 0 obj
<</Type /Page
/Resources <</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G3 3 0 R
/G4 4 0 R
/G5 5 0 R
/G6 6 0 R>>
/Font <</F7 7 0 R>>>>
/MediaBox [0 0 842.88 595.91998]
/Contents 10 0 R
/StructParents 1
/Parent 15 0 R>>
endobj
11 0 obj
<</Type /Page
/Resources <</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G3 3 0 R
/G4 4 0 R
/G5 5 0 R
/G6 6 0 R>>
/Font <</F7 7 0 R>>>>
/MediaBox [0 0 842.88 595.91998]
/Contents 12 0 R
/StructParents 2
/Parent 15 0 R>>
endobj
13 0 obj
<</Type /Page
/Resources <</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
/ExtGState <</G3 3 0 R
/G4 4 0 R
/G5 5 0 R
/G6 6 0 R>>
/Font <</F7 7 0 R>>>>
/MediaBox [0 0 842.88 595.91998]
/Contents 14 0 R
/StructParents 3
/Parent 15 0 R>>
endobj
15 0 obj
<</Type /Pages
/Count 4
/Kids [2 0 R 9 0 R 11 0 R 13 0 R]>>
endobj
16 0 obj
<</ [2 0 R /XYZ 0 595.91998 0]>>
endobj
17 0 obj
<</Type /Catalog
/Pages 15 0 R
/Dests 16 0 R
/ViewerPreferences <</Type /ViewerPreferences
/DisplayDocTitle true>>>>
endobj
18 0 obj
<</Length1 34844
/Filter /FlateDecode
/Length 21989>> stream
x���y|TE�?���K�����K:�����C�		I i��d_L��D@6�%��"qa�QFG���&,6�e\PD��ADQ�(*���Z�;���;�?��y��S��:�N�����S�n7�<0rlY�'��H@��!�F�=��@�5���)s���.��zl�r�B��[���q�����y��}e�x |9��e�0��j�~������3#�3���ff������������v���3c��fG�!�I�g�Yx����
 W]1wJ�>����2���y�"�@��+��L�W��n�����,T�� ��>o��y���r���/8�AaQUp`cs)�A-~($�a���s!����B�����F`��7�x�����Z�@W��>:o������Fx���b?��[������l
�8n%Yz�� 9��{�S�^�&��,�Z��
����@�:�@j4��
 m
��
�a&
���Y����ul4:E(AO�0`8Fa1
31�p-�1���C�U����0c��fL�X��,�����g����?�����z�s�	%��#�)�(�a�%]@?�p��������L��~4���Z�Y��b��/��v����s���G����r�����`�U�Q9e9e�B��-����!���/�1�1�"_���`z��M�
��:Ld���������28��28�KQ��������EX��D3��p��L��`&��J����O/�D��p-u.b1�a��UZ�L�t,�h��������LL��E��r,D��������Q�r��d��L�������X�yl��L�=!c ���p&�c�%����Wa��' �%N4�(��g�g�*���o�x�G���-�����I����o�X���C��vj���\x	�(���1�^�c4�]]y����}c�"L�C���0������A���T?���,��Q|��-�I��`y+���q��V�t�CX��e<PGc��[p�9��z����*u�������]UY����giI���Ga� ?����\�/��q����d�Z�&�A���%���Mr"���#���/e��f9i>+�)!7�����I�MZ6���J����_r*��JwN"���--���rb����$G7���C��r�C��k�
�	7�B�%�\��1DN�&�>1���������M&����i��l2���JK����m"�DC����&
����>��Od���$������Q�����B��%	2xJ���������j���N�F��z���M%�W���pYS�<5<�yRC�kndu��	OxH�s�q�/��%	���gSs�U���2{\�j��X7��lj���FoiIiI�mZ54�4�~~i������]��� �KKd���t����YJ�,9a
�X5��YN�V%0fq���S��G���W�k�u9���!�MYX5f��lE�>�RZ�I��v���A����i�4
��3l����%�E�JSB�"'0�!��5L���)59!Ii�����
�3��M���,��ORX^�O$HS���sS�3)b��O0��I��%Hs��F��LDt�"����wi�UI���$e��Q
	�����[Z
�	�-�����P�utC�Y�e9mP���	��(��(�����E�.���l���+��t��$��~F�q�����ac��FOl��W5e�v��s����nZK87p94��N�&�'ugf
�_��DM��&u��
�"MHM��a�1�/%�����R,��D������y>�y�U��q	>B����j����1�
/�D�r�B���7$��W�Tw������2��Q�5�,�����9s2xccc#�������M�V

�CW5�jN����e)�j;}�>�j^}S��$���rCooLHM3H���M�6������r���� ���F	�4��
$<������Dc) �#[h�Ox�|^@=���85S���YL?����������s�$���������<��qV@�D��[1c `�!����px������p���bw+��a Fa.� ��0	G��Q��p%��V�A�S�[}�c;���	|��)��~)����RL���G����Pp1Z���=�.�u����-�j����Gv�(.���9A��zn����5��?����Nz��hH��W���R\�V��6l�6$�g�K��I�1�$�Q��[����:oL��M^!�0��x���_�\�,T�p�zY����O`>!���
t)�?T+��.6��>$>RFF�	����q�G	z��b&n�}x�(�F�t?��i�'17uT�BD����Wb!^"�r9D>���d�;z����S�?.�����q�2�\Bf���
r���#��O�@:���_q3�����A� ~,���,,n?M5����H}�V��1��F��{��`;����#8Fb"Vb%2	���:r���A%���dy��N����7���'

*��y4���z5��>H����u����py\����r��\n>��[����r�>~?�
B��VxXX/<-<'�������z������Z�Z�jKmQ?����� j1�h�,\��xq�����H1@."��d2��'����-�����?��dy�|EA-����'�M��t$��N���z7�B�9g�l��+�����4n!��[�%�W���1�4w�;�����y|�������E�C�	��0IxE�X4�s��bR�Z�G7@7J7Z���m��7a��V<{��G�r7r��V�I+�l�}
�����pZ��d%]B��|���GF�$������4��
'��X������,�Y������w�i�5n+�����hF��w�7���r��]�����=�H<��>��"&�g~���� ���'K��������(A��
�#�{NGG`���p3f�������%S�����z���C\�p�X,���t&��:�P�Iv& ���p�s�_�w��y#>���w���O�p��0���,�r�Wo�b���LG&��?�{p=W��p�b&���E;��
�x�Ed����}h�k0Y�W�5l��$�V2
'���LT������R���A�P�G��1Vc=Y����;��\$����j)]E��c��s� ����9�`�����0u�����B��~\�qs�%>���nT�F�M�PnG0Z}B
#f�W`$v�q��f]|���m���u!7-5�`5&A�r,���`��Lz�/~
�g8�;dz�t���Q@�C/�Gv��g����H�g(/r��n6~�_�2��`��=zF���u:�t��X1^�1� XLF�`���yT~�����7j�M0�G������_����,�_�B���;t�7�����&��0kC�t^����0T��zm%����
�!C0�l6�&0X`6����.���7�q�5�C7��ba�Z�41\�����o������z��b�;%�����C�`��j1�,"`��f��u`�h2�L0��I��Q��e��}�f�)B��;t�����*f;$+lVF�Z3t��d2����K&�	:�h����`��5M���2�v������	�;�6lRW�V���Q`��j�Bo��fs�'�-��ad����!8������z�����,cmwt�o��l��D@t�b����Zr����7�����!8�r9��<�8�r:Y�3C�$�$A�t�.�3����/9���;#&&m)��2<WV��8r�����X�\��.���;����dph�
�d����z�Y>o���
��u��a����&{��T��.103�Ww��������1� r����a��=��te���Od���K��8_�����fx�C��G ���f�F���� ���{<.��0��b�,�G�`�H��w�0�_w�������� ?��6������|���+f�X|Z�E�k������2���C��|+�/Ba�� Ku�������7���=���fg�)-b�'#����B>
�C��6 P��|�3��p���ZKin G�-�
��o��[��� w�������b ������
"�,��2d�����9s%Y����
�|2b�f��!C(EyyiQU�(�FU)�Y�-��
�

PP`l1V���,�pX]
[>1�N{���C�P�>}*z������o�T0��2���#��(.��:V,;�*��{��[���gw��Q[[]9������j�VW�|�������Y��'z�t��X1���-�1ix=�-�A��P�2��4����|@�0����3���zee��JTUfY�Y�`O+[Z:u�0�|2bb�5�!C������~�f,F���4(C�����Au�p�c�B�m�c�cs�|}'W��\(W��
n�
���~A%��7;\�����2
���������]����@ q,�h������u.�v0.�Qe.��\se.����Ai`!���\6(l�_q����e�#9&s��<x��@�����?�]�y�����FQ8O���J�����E�g]Q�=6�'����7��������������J'���K�������FK���n���97(�qn�6B�:�����L��96�G*��� ��"���H��^1�HU��/iG�B;6[����Fz��1p�=F?�b)=���E=���w���O��+z"=J��#���~=�2zu�0&��x�g|=���a��az}���4��:�>(}����B����F����w���@[u�b��D�2H� �xr2��]��o��P��E8?��\���k+�Lr�����$�h�
�XN"A�[Cz=��(zM� ����Da=�Vzk�!����������"��"���������CP�!���������`��o�
t����� H�����U���B���/��!� �K_h1�D_�������(��@��9�T��.�.��]���0���d���.�t�k�t4�����
�i������|A�"3���B����xX~8B����+����wW(2�[n�Pd"��X��D���B��L�U��D&N�Pd"#�U(��qI����������<�F�F9�
���������x������%ZTlm'�;I���(i�FZo �7��Z�z)i��V?i
�V��� 5?S+Q���S��u/i�@Z[Hk����|�*�j%ICmTjQ�m�
m�?��6�FC��!,�!p�EC�����=)4�Y�Kg��8osq]��g������c)}���8B��2�<����O�}u?�&����>��~����!���j
�h�h�h&�<,�y���A���
�bn�����e=�=�����c(DCJ�������j?��������
�]oO���,�g�a���IW#A�&�n�!7�$��Ev��o�	�$�)@���E{�
���U���$m�	�$��EJ����Jm��?����d[�S���[r�'m������m���[�/�%��-�3�$�-�.kY��k��jYo�$�m�X�-��^p�_#LK.mI�D��D&�����,��$�d[��i�6��7+�-X�����b��`�_�4���N�J�n��A7R�GW�+��tA]�.G��w�%�Uo��z����T}VR=�D��Y�����3�k�D���+(�S\���F��D�%vO��������$1�����H�1��
J�D�%u��DutXB7���M������&��$���$QY��v�����������hl��}U���1�:��������������6$��mLT0D�m��
��N�!'��l'_���a;7�|S?��s�46K�	Z>����!�aQc�v}2�YH�{ ���|������a���-_�����	���%�~���|-�GF����#��goA��MZw+�jy��[Y��-��_?dS��e!>��,~���L�%KY&���Yn�j��/y��<��]y,G�46F��0mP4J6�k�2�](6���5����]5��h�L�7Mi��4F�.�2������iCS�C�M�&��$F��	���5l��L��O�Wn����QU���ukw]U��
�Q�Y����C�f��X]���jV�y�yZ]�d|T�&=5���7S��1��)'�8�-��	o�����vd=L���9<(a	�H�K2�de�����~��v�>C����� D.jYo��!��������Z.b�������h}Bi���(;,Q7zb�&��>�4�.%�v��L�Iuw:���a��,���3��Z�f0d2�z�e��l���� ���%����c����\;����FD��(i���iv4��3X���.�`��X���%���t
Iw`������f�s��J�����^�2_��b�����{(�����j';I���j���		6�v��3p�������T������R�.�'x�RD6<�O�![�9��?���\��?"���������������0d�{�#�~����#�<�;"�~��W�C"�w(�`��i���z���b�4�UO���i�B��OT���OT�L�'�P��Bo
�A/��Q��B
��o�`_�V�E?
����-��Z�P�~�:��o����
���
�V��Q�~�!��~�zP��P��'q�$��@�$.� �$.��0VO�"QOb8��_a�G�<�+����W��/1F�cq��%�a�����v`�/��
�~�F�R��D�R;p	F�_`��_ �q��T��1^��0A��q��\����1����������K��q9&��a�g �~���T����~�����g����Oq%���b��a�z�1M=����@�b��	a��	��,�\�Y�������s��q-�T?�u�s������q����T��hQ��F,T��&,R���U�G�E��p�z�q�z+�X=���V=�[q��!V�z�C��%�1��%���7��N,U?�j��~�5�Q=��p�zw�f�(~�[�#�G��b�zk�B=��b�z�a�z��V��*�����A��~��k�!��~���Z���F��`�z��.�0�����x�Q�q����?�^�=<���{X�����I
>�����4�W��3���6h�OxP}�{�=$���6�!�]��a�]l�:�]l���;��?�oc���c��H�q�ml������X����xR}�S�[��w�i�-��3�[�+6�o�9�I}�c�z{�P�o���/h�E���K�������^lU�lS�U<��>$��x
����������������z�g�M�_�7�w�R��!�V��[|��o�<���w�G}�i�}�M}����>����8���xY���W��cxE���4x����1����	^S��^W_���o���s����?p@��/4����>|�C���
o��������������[����S�'�W_�iV_�w�@}��u/~�u/~�Qu/~���^��`'>R_F
�����c������/���������:�����?��N��?�������:�x�N_p�N��?���4����t�1M�;K��t�1M�;K��+�~T��G5�~��N��#�~�u�����q:����?W��';�u������_���N�����kA{�&d�B��32���"�'��n�z�>5�6	 ��b,�H�^���r3����R���^
N�d������voT:�<�!��@]m]m�r'j���S])�D���9r�k�'��qqa�p�DS�w�����w;z�q��NS�9�OS�=h�����Z`|�#IR�s�Z���-�D�[���[l6
9��b��/��H���A+�>����9�����0�U���Ha���vI��F���/������O�&G��;��]5���:��2�MJ��R���F��j��{ZL�QJ�p��#���r���X��;�1K������N�O�:j�Z�1(uH�����*��]��u�}�To�7���Xn����E�g7_���EV`8(^���M3�~�����x�:���������8^=������K�o���v���BV�b�����(2D�f�h���R�6��x�Y������ht�:X
9��_s:��f�O�X,���m2����R ����n����"���?��l���/?kO������M=�\��+�J�J��V��3yi��"����s�9'�&e�����m����5;�)g1�Z��t�m�x�n����]zH<dz���nn�A	���
�@
k��$���5�b_(�Xx����tH�����f��|��/?�����F���SY�v;\�y������c�"�<�8~��uW�-4��#����������0N��f����n*�z~�}����~��I2���r�r�*��'a7�����b�W������~=�O�b�d�Qk���	����zT['H��+vmB���Z�	M�'�l6]]s����,([��5��E�B�����e�FGH����Q�t����Y��:O��cl|���vQ���������e��q�=V���n���?��w2�[-�����3�d�K��)��0Q��5�K� I�xK K0�����VI0���t�b�F�GJvJ���+;���}(�`-�cpO^�]����Z���f�]�UL'�bi�w5z�R1��x�3�(����<��XmZeJ�~B?q��K��{Q��_w���<�:�<�z��Z������}����w��u��/�JI��z:�(��I���/`���������}z��#T��s�����mi'�$�ne=�66B����0Y';���!��l�ZG'��t)�i;�G�����S��h�t���������q�����[a��.���u�V@
�$������T������]	�i������E�(�x��j�)��_�����$����q���O<�����
k���a������������|C�S;[���Ox��Q���8S�Wa����0Q��-t<)
-6�-`4�~>P��,a���M��%&��.�f�e��1����}����IR�#V�����#&��V�6=��RoYn�����������feMu/�,�ZnY�uk��� s����+�#a���iQ@���/�XH�-f�������Mg(���_�EG�dy�Le/�d�U��tS� "Eh$��z�Q"kJ�IR��}���@���~�V%Ir��.���"�Y������<���C��3=���IM
[�d~����t�6q��n�k�$�D8/2aK���K7>����,��%�|������>��5{g_>��5�O�U%7{�_����G���,�r�-��[_��6u��=�sw�����7�xIh�Q�8�3���4�l.�.���sB�0��N0�8�f�e/�gq�Y@�^���;���u���zn6c��O������2viBczc��/���$��E����t����56���d����L9�
�24�������$�]�/����O1�R+}"izP:U{��c������H{l6[�r���Y��1KR=��*c\^i��ssk��8��'5(Yf�3�����H���������mC�PoRi�t���������������z���s��\�x���{;g�h{H�#dBz�lQw+�!��.���T������J��&��5�@C�U�t[%L����=��([EM��48��8wU�Z���������
N������rS�z�zT��F����k�eY�YV�%IS��!�u��Z�6�E2�z���l�$�W�Y������Ri��K����H�^�K�]���Fv�$�a#��Bj��[��b	��X~Y.qf�u��k��ceq�C:�B�3*,��@S|��#����9�F�:C�����,��������+n�����o�������gG�r�n�_x���:I����=�>�6��M�~&u����7^���(����'x���(&#3Z/h#A2�p$�G@��%K�y�,�1@P �ML����Gb3��t�G��<sk��}���f2�!����,��M�����!�D�8y67U7U?�1U^�_�_�_�?�?���d6���5!�k
�a!��c�B9,���Z9�B-��r`2�H:C1t��$I�����I�H�����TO>�,iM���\��w�g�g�g������f�y�4s4m�E����I�h<M���;23���v�D)�L3Q����mP�<��j��H�YS����[r��	�_F�������o�0u���~��pg��;G,x����}�k�U>�|���OiJ}�����0r=y����;s8�Tc���6nA3���'`�<���Bx���7p�UXN	o0[Z8��!�m����-�`$�L&S��L&s�R��lkF�GH���k���!�f����:�{����VM����C.���q8������:���m�n��V��
���r�~J���|N^|����'�la7<��"-�[��	�d:��t��={:BQ�pX36v
���"�6vRcbh�2��m^���u������w�Yv�����������Gfqu�b�'�g���]
�
9��Ll]:<S?K���%�%�jYI���\ZO�_We�)�4�������nR���}A��g����,�r=�P?�����r��6�"����7�n1/���y������T���e�d��E�r�-�@�lF�sN�������n�e �$��H��"���m6�FmIr��
oK�#\�No�oqui\������>���w0���L��Z����Y1���/�����$�]�1��,�����:k���t��yW|�k������#u��wR���l���n�|����{��
7-}��)�o��w�����E%{V�TA���%�f�r��)+n9�_3���7=���,�d2�b���|��^��7���&���v��#N6�^�6�v��c��K���#i���,�"D3#-�]O�N���h6*{��
M�ThS�2���=�����Y��e�T�����I����������+R���.r+�K��/��p��M_�[��w[�����������eg�C�
n�o�T��}7�U�!Y�{FZ'�M���$F�U���`;��Dj��������05m��%�b��5���6�(u��wv�]���xcf�@{W2mK{W�����kG��D�����
����.����1g��{au�u�~��3��W_xM���/y��������o�3{'�&������G�oR'R��������=��q#@�o��B;t������&i��7[2����P�}5��)A�eR�4]?��$���H//�����I/4�	t�4����5k��j�����r&�A�y���u:�A���YG����b�N�������)��4K�d����fC@���t�b����B	���BL��,c��3�����5<���(�Q���#fn�����d������V���v�-��4?�T|���|o�����::����u��e���B�ht��gEO�kh��VH{�X��Y!��^�dX�4vX"0zb����u��I@��Mt#Y0?��	�I%	s!��"�����o���Ow���w�����W
�?%;SC�D�v��w��<��'�������S��\J�����*�&��2��0����������������q<��\���k������b�<�2!�b��������9���>�_O����:���%�x�T?h��Ai��d�s�3��
R�v!"2!��Dd=��Yk���)���7�v���.�������8�E�d��|8/���r�WV�]��<ue9���[���z����[��H?�>)������<���9�,��1J{}��_��o~L�o:�J���M}u���g�v2�� L�aC.>V�� ���(�v)`���
$��
2�u
F����R���4��s%Y����iM�iH�m��M���w[4�c��<��M�v;�����<�q&�v��*�X�������};���>/MF��b�D�;��tsb�	��"^�?D�F{�(�F���n$�J{������,j���PE��P	�"?<=����-#��k���&���^��{��
�W�vW�E����y"�z��bC�^����������x�;&���D!���t�x6�FC���IG������.����}��_���]cv�k���.IPf��w�jrt�x�{���Z��]�=�
e����<�E����Eh���{&e��V�z�_&���;�����:��
�u�T6Q�3��VLipf�~�|c�Ig5���O��l'��������&:G�v���y9��'��������q��Br��I\~>B-@�j�Sfm D��\( ���'S��I;��z�i����]m4-�������07"�Q3���)�t/��R�t�?Rg-;Ft���s��c�����>�������h�H�H0�/�#��%7��"vG�S����'����	�,�'D�P��N�v@�F�Z���][&�����s�����I�y����r��}���Et������N=�e3�������l��e�]�YA�]7�@��!�G�l'��}��l����|^�����\�����������!O[	o3��n��tU�\�`\g|�H��&�^��:���)l����
;���v���e�#6�b��B,�$g�����U�_��>#~giwf��"[FY�,�,|�Fo4>��1��@�y��j�����X�LSC$Zi�������=d�9��s�u�B{��������A�����vpxu+[;�9�7�����+��qiy:�Q����87�����C��"U��a��q2Vc���`��$���XNH{��(x3��E��|�5:�)mQh��(��,�;xRC[+�7�_P����bK����9��������v���	��������b�Q��Vn��!���>���Z�!�����B���na�(��vH�x��J��N���j�k���-��@���,�����
&+�j4���&����T��r�$0`�'�w����s�����n�n���w3/i4���Qt]yu����4�kP�����0���69Q�7�_lK�u]���
XPs�
�,U6
f�j�^O���d�4Dc��N���X2�Y�~�-�15z��T4�	~m�3�to��>@������9z�*�r�Kf�`��|��+�,%���*�5���
����u$�
�)���AV�}�~n�n�~=��NtP��Z.�,A�z��R.��AocCB�^o0�L��*�yjr�:�������jd}��R�f�QV�KM��N'�JLm�L���l�m�D�$���,4	�'$���v����
k���Y��rO�k}��������{���O��l�K4�w��=������g����W���4wX�<vX�������MV#K��un��%!����:f������1kI�}m\0?��qv"����������a;	�}$�\R���M&aGj��T����7w�?�w��������?���)�	��pV�`�2�g#YRVV�''��%>��1��Oz�Y_�r�7����}�s�G�5
�����������	��sn��O���9&�+"�����l������yK�
��.6]�)[��tHh_k.��E����l���6��]�`�97���|��P�L:m���PY{���0��$}^!C�����k�}�K$���H����z-��K���?�z��#�u[_"���.��T��������i���a�mJ�4��,:L�u�tIo2lV+<���������z)��3V��'���#>������k�/�l��i��|mp�wtO��*�����,
����n[��=����L��ZI���P��^��n���i���Huv>����N��ea'�Ga��/��%�0Y���b�r�� o�.���i0?���&^��e��1u!��zl��W�H�'7�V��sna���m���T���I��4�����_U��B���X�$���5���e����Z��%m�ZO�$��,�mYv��n394�sE�������x����t�� �����k�Y����A��u�k�4#%O3WD�c1.���o����������O2s���W�qfd��cSC���v�J��2��5}��������+d�w��Wl1������4���!���������c����U��������Iy���2��u��q{�a�'-����hi��#t��W��{`x���������a�G����?�����/-~�PnA��E����-���t����������^�����!@9u)�S�)|���
{s1�`��E���!�C�r��I����i
3���w~R��D���.$�ME:s)�B"]H!���2��%�O����>�������������+L�,���gM�.6]k���DZ��R��[e����v��,����-kmk]���_�8r">C��D�"�����4PXJ���Cs
���@a)��i�R���9M�E��X<}�`Q\��-�Hr���|��$�����N�9*���<��$
��R���n���:�(�E�$��"MdYCD�$	�Y��dU�D|"("EL�[�t|k���+�U�"q03��]B��v\9�����+sH�?�F;$���Ty��!u���8�zd�����k�U��HW ����������5�v������<n��	����Lz�2��%s�;jR���gN���{���r������#��NC�������o�'oIW�q���!�����h���������h���/YY9�G��W-����3&�����oU,
�;(�oH���r����(Z�\��l%�3���IS��n���>��$�t)�T�,c���?�.�N�3���'��nX�O�.z�i�:S���T�`����oYk
�p��'��E$��M��Q��!�\���Pc�k���vN��r0`M�G7;BU�Ll��z���p��x��c�jr��F�"]S�5������51�����q�$�D�8�t2����m�i��X�_�g��j�����*�*��|R����e�[���w��'�O��Z?q����Hf;/�4�$I����,2��,�k��LC�X&�����j-�hT�U�(qQ�7�Ym�$IN��b!�d�;�N��ZL��i4Q�N����a��Xd3�e6sF���(uZ,f3�e.��x|�Y1Ss�L~V6�1�6r�$In�L��&IR1�[i��_��$��edg��5��F�#N���w��gw�;��q���iC�PZ�3�B~���n�c�����*�����1�g��FmH[�����M��);F��������s�#�]����y91CR���g��n%��9�S�1����u:���z��S��nOSR�@����<G�d�
�'�
����3;=�	��Z��a���=g�����F2���WR��|+		�!&Z�2� ���^�I���N=�Z�r���3�/����F]L�u?�5��H��a��3��Mo����I��f��	�	���T��O���Y ^M��V�yCU|o�������2+?��g�>y&D�^gE���f�1���,��$r��c����r2%Y��l	GALI���FG)��$�*�a�bl5Rc�lU,&�Y7f$]�I�V�@��l��)sFy����f�f��t���.�:��'Lg��J��3q��N��%�As�3ls�K�={�%<c�%����7�|�z
�zJ���t4�l�!/;���fb���lf6�������	��~��|AB��]J��:��s�����_���l<���7���P�������T)1X��_q���8f�����[|Aq�/�e�Y�T�������|OZ\=��
��S����zl���cO��o���q����L�:�\��f�m<����7ZR\�c%���L�7F/���^e^a~���������Jx�,��S��N.�[D��e�:�j��V�*<l�h���Y��w�?�z���bo(Z�;F��� �V?�I���y����u`�|�6P_h��s��f��6��|��f��/�n�|��{>�d���|fk���'����#���*���_����Z��7��HydcD�1������zh����i���pUylw�������m ��)�������4(��T�j��&��W���kyQ;��V�Z�|�b���^�8������;]�o��3����D8�z�+���!��R4sW{��������wUa�U�T��.W���p��J����}zs�S��������{�~w:��_�tqn�{����|j�d����{.�3wR���3���<~���F�8"�j���,��8�;��aJ��=�9����5�p��cx��M���5(����A��B.iU~G�-_�-�B]0��`���?�?/�&(�u��k}�/���qK�-���7K�e��J�����w��z��>����E�G�G�j0[�leY�B�M.��.���'��d�\V^����:bt��&o��&"�S�����Z��(����������\vvfo�n���KvL��r$�^�Y�*j
UD+*��U{#T���!`���Z��{�'=���-���zRszRZ������n\i����/������|�����m���5tT����+�|mtH(�B�!�#G�)D�B7�S�1���E
b���><�� n����$�!J�	����U��Jb��
U!k{?�08U#o�=���-��t���,	��� �cIL~~b���F��d�fp��u�E��\��*��������{����;�t�}�������oy����d9�����O��i���_������=t�,�hQ�2=�4 ^��^���X0�j;�% ��#`�����g��Y����{4���g���t����Z�\����Y�Y�R�R������6�-�!���nsx�vj�n�l�p�8��s'��v�f��E;����������mS?nCh�E�(��(��r�1 b1���
�FQ!�aR>&2@:�@&>���w���l#K�N@|xr����O��G�����3]�m��dx}�H�Xr��P7�k�H�a)3y�t�`��]��=?����/�|��������G�����y��C�O���+�p	�_���#��7��W�~��d����L_��D2�s0���9����j�:�%j�D]��ZcY��V���w-���{/�.���{/��i�`�G�u���.;��:&kuT�c5�1G�9�%~��n�%������S�n�)H"�VF�;@����1I��$r��#3A���i��B,G�E���l%$���PE!3.;����W&��L �t+�S�9��c"�f�fKA��O���*��`Yba�a���E�����#�b�����a"�z����������xu^`rJ�������~�����>���)����6o����|�{{�>w�_[<�r~6�R�y�gg��4����e��i@nT��z��r:c�p����z���Z��6�{`��%dT��[�g�3M��N�P�f+��%�;���;[�[�W�+	iXt��"�M��h- ��z%J��g�I�E��o6hHd�%��S�#��c �{H������dJ!���>v��������1�,�A�RR�5����BE�
��L����E$U�3����&�3��9�B�j�L��6���zH��BYA�
&f�*[�,\�G+}��������O�������2t���������W<���x��\?b�q���?�BGN���zx�=��f�/�?b��u��&�R����U+W�-��je�V�Q�s��J��3�on��He�!���%������)���X9G�S6{���e�����VOj���|?q��/�O��Y�����^O
����z� B,�vU�@@�g�v^s�b)>���X�
�M���JC�S�+�u0A}�u0AB,���&H�"D��	�d���n�P8=%�/�9�	��b�H� ]�G�+��� W2I�"���MVv�SL6����t�5f��>�p�V5l��u�L�N��$L6�I�:%V/f��uD������o�������O�;��w������w�x���m}a�oq�j���}�����`�����������<�������Z{�	;B�w�����1����cL5=�>�`�P��M�6�.��#1`aU���8#U��qx���C�:J9<�D	�e �@���y�F�K��p���PY��+'����=5]���F5�C������h�3��R�&=J��!���:�O�>3t�!�!���5b
�� 
"y
��&��EE(>tC��3Y��a�=���dh@pZ�l�i����&�1"��.��$����x!Gd��-���p�O�o^���z���_�g}'{;up���O����(��f�*�,:k����;h��q�\7�]�F9qA�����]�r�0�,C����#����V6fA����c���u�e(���!�"�0f\G-g&���ycx���
�Q3S����1��x2�L������������f�Q3]�IWu�M�)����~��s��������^>�����	�0���_o�������i�s�,�1��-A���l�`��AK�����0�^NSa��@q������(���s�����SR�=0f�����\��jb�8d2H�d��1�E~�f<��{�&�q�E���X��<V���_c��H��af���~)dy�r%D��P���CMGJV7qQ,�F|^���}���u�3�O�2��"HQ!ZQ��
=y�Fe
b;�,������\�I�8c�=�}~����'.����I]_&�����!����Mc��������O��!*��!�I�KQ#jF4���4���B9�t��-���y��*��)
�g��
�������Bn�.JW���d2����L�����%B,�9��+��e?V�����m��0�lk0��������[�����^<im�����kn�U���j����'���&��n����C����[�.�����-��������B[]�����'�(}�eeH}�^p��I�i�s���0!��T5%`a�Us��[�����xo��0��0!g��-��r���|&z���B�B�9Mbt>��=�������zM�����~Y��P����q�r�g��8h(�.M:�'~���c���p�@��ol���kV��m<��V).[�~,�J^�������N�r�(���o>�vp���W����y&�����vf7Qy����d��yS�2�`�y��n�t�bb�����PX�k�k�g[am��m]g���:�N����(���VK+�D�(m�g�e#�F��l��x��������^fY��j�@����7�y=��r@��b)?�;�h�B"�O������"�*�������SY�X�
�4;������I��~g��U��!�F�/��y����K�X��
M��p:��)9�3���)*�N�H��R�R�N���3-��qA��7Y7z�������0>���==�{�Q��Ol�c���_���������o��(�g|S�4 ��;�'��u����i���`h�=RR��*�Y�����u���|��V{���o�����6�����_��=�}�*V�K/�r!-�$�������0��U�%���qI��� ��U8��F�x,�����LD2����84���mr��YH&��]���RTJ�!����H$�D�@�+��D�b���s�{�P�Ht-D�\[��
NUs��p���"��9T���G��7_�������-[�|�����Y^����{s�<7~��[��W�CgO����o�����Qg�$�7�������ff1K���n���6��9\2�@�
0�������-ra����t"���!�4+���.3,5�663,U�����tX��u^.���B�*�����S�������Y�Y�ny���5�z[���7���2������O�ml���Kf�1w�~�i@Si�����p7��)�"�6��{�{(z����7h��<�����-~j9EIU����Z�V�Uh��:�m�\;�.�������H���I5�U|��&���;���~���}���OM=����\�P���/�Zy!�	�� Z�����9d)��A	)x)���l���g|���&��H��V��m�6{o����ZEo�{����	z��R�����{DLD�P��!�IxSK8��T-m"
N9�����
%TI��2&�!�����C�E�&A�E�����"/�B���1�]ya�o���"��B�T�;@�z��V��j�*py���/����W��oU��H�U
VQ�U=UTAG��cFV�r!s���0  }�C��"��OAZL���72� �/ L8
y��!�L�����
�dr��)_`H&;���/�a��N(0������k[7�i#q]i��V�eI�\m
;B~���~l����R5�Ge���#�m���	��&?
J%dE7���e����]�P��"�Kf�I8OL����S�����r������wl��}����3��������������h��)��N=�b����~�o��Z{��O���]Ms�������Y��dz$P����;ZW��K�N���R�g�N�<�)�IAt����{�a���4�$.)�V-@�Fa�Pbv�cm���ml���c���^��d�X+��|�1�"�!7#�� � �����d��.g�� ��_��T;������&��s����X= ��z���TJz�$I�t��#�)y:��CG"%�n��sC�C;~��,/=x@jX�}j�^�n|o�+}�I�.��w���W�� {n=M�\!��)EM']8jsiv��+��-����$p�AT�C<�+(M��tp��D$��yh)�c����$v����xP�z�2O�F}T��������=�M,d�7�]���ppGG�=��5 &scpM�/$����p�>�pc}m��x�6��HN����fCm��9l�����b�IR�c��x���U��������\�$���/~��������\����=������>�U{�}�Q��b�/L����U�^i�xE�*X]�"���#��)I�y����+�'X����������-WW�Gx�p"%����%���9Esx����'5�G��YY(W�]������^��s�so�nql��S�s�v|M���u=�>�� �TzM>�~��I��#+}���J�������oi�;�����$�F�tQ�K������.WL�UE�E�(�c�
�"�n�J.�R��8�T�q�e(�:@-3�F�P���S
���'DF��<����O�7��E��\f�"bq�j���v��I��R�t�<���Hc�^����#��y�1�\��&��2��6K������tA�g����!{�2r�1�<��+�������|xz�s w���V��[���LgZ\	��N�.�@p�0�\&~@���~�.�-���7�'�����fD��X����Ry��^,a���n��c�������X}9B��L9���Po�(W���18EO��R`��a�/-KO���)R-��o�s�9���f�/���Vq��
x5����m�����cx��Q�S<F���8�dKr���~�Yi 7���NS�
!��kD�ZL�q<e���T�)LI�;,I�j��p s�"b�������o���k���{I(�V�����i8��=�Q�X
Q�/g7�������^�C4������M��l&@*Ad0����p�da��.5�g/AY(������
�X�f��<>	�m$�1g�F���x��"�J�����&���GE2	�����k9����#{�����x��R�Z��8���T5�FM�5�2w9uh���fzM�g�nk���m��_�����6B����
endstream
endobj
19 0 obj
<</Type /FontDescriptor
/FontName /AAAAAA+ArialMT
/Flags 12
/Ascent 905.27344
/Descent 211.91406
/StemV 87.890625
/CapHeight 716.30859
/ItalicAngle 0
/FontBBox [-664.55078 -324.70703 2000 1005.85938]
/FontFile2 18 0 R>>
endobj
20 0 obj
<</Type /Font
/FontDescriptor 19 0 R
/BaseFont /AAAAAA+ArialMT
/Subtype /CIDFontType2
/CIDToGIDMap /Identity
/CIDSystemInfo <</Registry (Adobe)
/Ordering (Identity)
/Supplement 0>>
/W [0 [750 0 0 277.83203] 11 12 333.00781 15 17 277.83203 19 28 556.15234 36 [666.99219 0 722.16797 722.16797 666.99219 610.83984 777.83203 722.16797 277.83203 0 0 556.15234 833.00781 0 777.83203 666.99219 0 722.16797 666.99219 610.83984 0 0 0 666.99219 666.99219] 68 69 556.15234 71 75 556.15234 76 79 222.16797 80 [833.00781] 81 83 556.15234 85 [333.00781] 87 [277.83203 556.15234]]
/DW 500>>
endobj
21 0 obj
<</Filter /FlateDecode
/Length 342>> stream
x�]R�n�@��W��9D��TBH))�>T� ��+�-�C����D���f�g,�"/O����O?4�Zg<L��7�/�Y����6aA�6}=2����6�K�,M9_��)�:��&>�o]���y�a����/���,������������mi�n�s^=2�o#p�XQ7�``�|�:`��Rf<-���8��LU����=fGO��2CT�)E����
u�W�������$E6�����nuC���bMA�:�4��D&D�1$�Hr�H3!�xi��a��<�H��$���v��$���d�,'"�������r�js�\�+�M�;���6�\5�j��
endstream
endobj
7 0 obj
<</Type /Font
/Subtype /Type0
/BaseFont /AAAAAA+ArialMT
/Encoding /Identity-H
/DescendantFonts [20 0 R]
/ToUnicode 21 0 R>>
endobj
xref
0 22
0000000000 65535 f 
0000000015 00000 n 
0000029543 00000 n 
0000000398 00000 n 
0000000435 00000 n 
0000000518 00000 n 
0000000595 00000 n 
0000054116 00000 n 
0000000672 00000 n 
0000029791 00000 n 
0000007881 00000 n 
0000030040 00000 n 
0000015191 00000 n 
0000030290 00000 n 
0000022149 00000 n 
0000030540 00000 n 
0000030616 00000 n 
0000030665 00000 n 
0000030798 00000 n 
0000052875 00000 n 
0000053111 00000 n 
0000053703 00000 n 
trailer
<</Size 22
/Root 17 0 R
/Info 1 0 R>>
startxref
54255
%%EOF
#175Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#174)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoD67TAO6KkBecKBsLgR1tgYJS1AwiN9NQJSLE0WYw8pDA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 7 Oct 2024 15:23:08 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've run the same benchmark script on my various machines (Mac, Linux
(with Intel CPU and Ryzen CPU) and Raspberry Pi etc). I've not
investigated the results in depth yet but let me share the results.
Please find the attached file, extensible_copy_benchmark_20241007.pdf.

In the benchmark, I've applied the v20 patch set and 'master' in the
result refers to a19f83f87966. And I disabled CPU turbo boost where
possible. Overall, v20 patch got a similar or better performance in
both COPY FROM and COPY TO compared to master except for on MacOS. I'm
not sure that changes made to master since the last benchmark run by
Tomas and Suto-san might contribute to these results. I'll try to
investigate the performance regression that happened on MacOS. I think
that other performance differences in my results seem to be within
noises and could be acceptable. Of course, it would be great if others
also could try to run benchmark tests.

Thanks! They're interesting...

I've run the same benchmark script for the v20 patch set on
the same Intel Core machine when I used for the v19 patch
set:
/messages/by-id/20240805.072012.2006870620510018355.kou@clear-code.com

See the attached v{19,20}-*-result.pdf. (v19-*-result.pdf is
the same PDF attached in the above e-mail.) There are no
significant differences. So I think that there are no
related changes in master...

Thanks,
--
kou

Attachments:

v19-intel-core-i7-3770-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20240805052125)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 124718
/Filter [/FlateDecode]
>>
stream
x������8���?O��`��E��1�,�Y��]��F�q9Q������cLR;Y������K�(^��x�O��c���[��_?���������������5�����m����q������W*��v~��V��yJ�������{�#��>��p��u���|�[_g^�&����/\��s�V^[q.���^�N.������k�	�����5�7�WI����W����	�����5��|�Ky�|�[�k����=���o�Op�Wo����u,��n+�c)��sGy���������}�U��,�PP�����}�(���z����Y���^ei�*����9,����_�,PP�k���������-���+���}��_e����Uf�z����.6.����/6.���_m61�Op��-�3�[����<����0;��"H�!�~�r$D~��������%D�3����	��� �	�d9"?�Q�L�����"��p��^�r+D~�� Y���x"��p�����t.���wA����/H��!���t1����!2�'��e�,7C����h���A.]
q��5���A���t7�}��W�x����}�\9�>�u�K�C���p�x����A.]q��=���A���t?�}��W�x ���}�����nx!"�
q��~�rDD~�������E��&�4����a?��-oD�������;�h�#�~�q4G����	�Ox$B�%�����I��O�h:%�~�)Z^��x%B�-�����K��_�h:&�~�1Z���x&B�5�����M��o�h:'�~�9Z���x'D�=!��D`�'���,��������B�\�pQ��"��>
�rR~�I�^���{)�M!�7E`�)���,G��������B�\�pU��"�����:9+��pVMo���{+B�]�w���W����k����qu"�#��������"��+D?��8Z�����+���"���
��_�	Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!�Eh�W�~�_q�����W-E�����_!��h�W@~�_X�
���+�������W~�_!����W��B���
������"�����Wv��������B��+?��,������_�E`�+�����s�v���������"��+D?��8Z�����+%o�N��R������+B�_�Eh�+B?��8������WM����+D��B�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"�����W�~�_q4�G���8������W���"��
��WH~�_������+�_!�E`�+���,���������B����W��"���
��W~�_������+�_!�E`�+���,���������"�N�����G�_q������W�~�_q4�G���\��X�N��<*����9J�cM=�M�e�\�G����`�����M��G����l���:V��'�W!�eO��s�_VD_�&����`������'��#�_G}`#���/���	�|\^yi� ����M>n�y�`����W[!�'�5
��������XZ7�G��U�F�	0z��U���t5D�MS�����{#�}�\�n���{���M\�|Op������	.�6q��=�e�F.��'����E����������[}�\�j���{��N�\�xOp�����	.�4q��=�E�&.��'����Eo���������;}�\�f���{�{�[7�D�y�165�&_i��������-`�G�������].��#��*�w����1��x�����V7��3�2�o��g�������A7|Dvt�����Y�7��tM��6������A���3����� �g���_��M?34��#M�������M?����&`��D��O\t�Op����~�	�=�\St�Op����^�	.�=q�)>�E�'.��'����E�����>��t�����9=�#d�xNF�����>Af'2��G�������rY���>B��!'������9]�#dtuNFO��8Y�
<�#|������� �z���Ho�������A��G'�g���j��M?�	.�><Q?���|C�~��>>Q?���zC�~����j�w�:���]A?�.��P����W��M?�>�a��lc���ncT����m���t��SQ?�nc���6���cW�
��y��~f�@��WQ?���*v�����
����r�}�bG����O>��.���M>BF7�d������c�:�G����>������&��G�����rY?Z��|�����!��s2��'���Df��9�U�!�u�J}�#d�}NF��]���3>B>�+u���"H�����'���>bQ?�{��O��M?������3�~��E���t��E�:��/��3�z��E�z�7��g���[�36��Di�g���-�����X���Aw�#������@�!,�G�}�}��~�nCX�������|����}�4�3��6�E������~�+(��-u�����
����2zB'��|����[�'�s���[�&!�t2z�G�u���N�2:A'��|�|����E>2�s[�R��|����[� !�t2��G����������Z�w|���Odv����:j���2�>'�k|��n���3>B>�Q+u�����k��O���������e.���g��u����A���-�g�����3�����cY^e�t~��0�g���m��t�}��~}��
m���l����3���7��g�����3�~��~}��mQ?�����3�������~��~�n����A�!,�g�k��Z�����^����z�G��	����r[�o��|�|����M>�"��/�B/�����I>B���-������}K]�#dt�NF����m����2:@'�|������=>B����z�G���}K��dv~"�o|������!����z�G�m��������Z�_�������|����I�����/e�m��� ���>�y�5e�q_2I������
���w3����c{��lP��m�������P�:������6�*��M����Uf��c���B��Z����z��rY1���p��9��:�6\7xl++��m
������S?��CG\�����B�����:�gC������J�' ���	��Z������9�j������iv�z�g�����m����XSt�Z����0V��*:w�uE�N��������',�+���-"�k��L����������Qm��;����������pm��TT[t�J����!�-:1$\[t��j����]����+��E������pm���U[���������xm�}�Y[|_�pm���Y[|��pm�=�Y[|��pm���Y[|'�pm���Y[|��pm�n��-�M:\[�s2k�vN������=w���w�em��e��ED����5*��>A��������Z�[����9c&�)�W��L��;^�����<:����#�i_���7��S���Wl�M��\���>�R�Z��7p�J���qsR{|=4��e������|�2�N;p5q�m�&�o�q��B4�1��&������k���m`��?��M6��$����.��6��w��T"��2O}3����M�.��N
O������'���=���S�E<o�&�;���:N�w�������f�)�}�<~hle.�-_��wY=�����~�������nT�k%�������7�Re���{j�f�[Gb��6�������Q��(���~�M��!�r? �������"���7�z����������o��>�|�KU�����f��l�
��Q�r����r(n��M�C,mE��65���������t�Q��"���P������7�z��o��>�
���sz��w���|�SL��]����_���-#,<���W��q��H:~���������VI��a��I<\U�/������TE��Q�w��
��NN�D�I�$}����$�*��E�L�9�"}��O${J�WN=�D�)�$}����$j*��4�L��"}��O$YJ�WN,�D�	�$}����$H*��#�L���"}���O$7J�WN��t�(@_9\��������D��
�W����Q��|���;G'�����A?qx(9_8������|���O��c>�����|�9:�������C<����w����+Gv~���Nr�pB���9������8<���/������y����r��g����k~"�4M��r��g����d�k$��1��YI9fM�4Q��bE�I�dP��(�E��Y��Y4*��*},�J�Bv�X2,��X���i���m�,��
X�>����X�R,�bE,Lg��tV��t�Lg�L��L3S���)�M�"���hj:+`k:���������)V����l�DE,N�hr��9I��IR���f�H�S������X�"��)`{�$�����)�O��'I2@I�X�"�)`�j�?�P�"V�H4CE
��$�%)b��DST��-��h��f�X���9���=*�R�"��|�Y���Z�&QO1��We�&+b��%�T��M�,���
����M���M�kNh���I��M*V�&umRglRg�&uV�&�5�I����b�&+b�:�6��6��h�:+`��z!��bElR�d���I�E��Y��Y�I��I}�mR�"6�B�&%*b��D�T��MJ�lR�"6�H�IE
��Z��n]F�&�6�H��$��$ElR�h���II�MJR�&�6�H�T��h���IE�M*R�&%I6)I�T$��"lR_#H�T6C�&umRglR�d���I��������w%�t��mR�}�MJV�&%�mR�B6�X�I����b�&+b�je�lR�b6)Yn���I��M*V�&K6�X�T�Ve���I�r����M*�lR�"6�X�I����Z�+����MJ���d�lR�d���I��M*V�&��S��d�lR.7�M
T�&%I6)I�$�IA
��$�&%)b�ru�u!��$��$ElR��&)d��$����M
��� �lR�d���I�d]6)H!��$��$ElR��&)d��$����M����Ii3�lR�d���I�r����M*���'+`���a���mvNp�&�h���I��M*V�&umRglRg�&uV�&��h���I��M*V�&umRglRg�&uV�&��!h���I��M*V�&umRglRg�&uV�&��/h���I��M*V�&umRglRg�&uV�&�U�I�������6)Q�T$��"lR�d���IE�M*R�&�f%��eDlR�h���II�MJR�&�6�H��$��$ElR�h���I�1mR�"6�H�IE
��$�&%)b��D�T��M����&���I�E��Y�T,��bElRgi�X��{��"�q6@�����F������'b��C+���
J-Pr�'���i���	�,Op"v'9�:�	�����$'`or�dZ��DlMpdi��3���IN��$�&9���@��'b[�#���]I�Jr6%9�(�	���E��$8[�Y��4L���V$(�(� ��A��J�v���ii�#v#(�A	��F��h���
�EP��Qd)%b'�B+����
�i!%b�B���mhY�F�����*%`r�vZ���#� 9��	����'b�C+���
���h��@�CO3���H�A�"��H4E
��"�)`
j{}�� ��A�d��E�I(R�&�F�H�P��,$)b�$����e(MC���H4E
X�:��!I��$�$E,D�h"��E��(R�J���4I���<���"@K����lEpd,�����HN�^�ii�"#94�	����h'b5�C������Gp"�#94�	��<��#8������Gpd@�� ��	IN����&4"��G�H�hF��#I�!IR��I{��Y���E�>}������ub����Z�N��O'+�>],�O+�>],�O+�>]��h}:X���d��t�B�����t�"�����t�"��u�����Z�N��O'+�>],�O+�>],�O+�>]g	i}:Y���d��t�B�����t�"�����t�"��������Z��3��>���t��>����t�|}:H���$i}:I���<�)�����t��>����t�|}:H���$i}:I��� ��t�B��I��t�"��y�����Z�N����Y���O)�>�$�O')�>]��i}:m���t��>]���t�|}:Y���b��dE�iwl�'5���@:Mk��
�"���Z$���Y$���Y�S����Z �|-Y��@bi-�X��@bi-�X��@:�Nk��
�"���Z$���Y$���Y������Z �|-Y��@bi-�X��@bi-�X��@:@k��
��I�ZTh-IZDRd-H���Z �����Z ���n]Fh-IZDRd-H���Z �����Z �|-H��@$i-I��@<�Rk�@
�"Ik�H�����ZD���Y�S:��6Ch-�XZ$Vd-Y����Z ��L�"k�t���]�B	�
���j-Y��@d�Z �Bk���Z �"k���Z �"k�t����[D��"+�H,�+�H,�+�H'�j-Y��@d�Z �Bk���Z �"k���Z �"k�t.���ZD��"+�H,�+�H,�+�Hg�h-Y��@<�Wk��
�"Ik�H�����ZD���Y�s�����"Ik�H�����ZD���Y��)��$�")��gFk-H��@$i-I��@ �Z �Bk�H�Z �"k�t���f�Kk����"���Z$����I�f�O��)u��_M�sd�s�����4A�R^��2B�G[;I�R���{��x+�2@�
�<��������B�����Me���3I������e�tY&�N�d�T^y���R}+�2Bj���$��|��KH���d��_��HFH�U�, Y��S�~J]��W�k��C���v�d���C?������$���I������$�	���$#$k�'�2B�F{�(#$k�'�2B:�#Z���h;I2B�F{�(#$k�'�2B�F{�(#$k�'�2@B��$���I������$��h�J2�}x��D!����u�� -G��t!�WZzM����W2B��������T��e�������C�2��u�����Eb����SGX����u��F{���C�r��]�X��\K�X�+�N�t�ub(gQ���tw��C�<�u�-m��K2�SX�>I��5��D��r��O��5��D!Y�>I��5��D!�	�?]�|,k�'�:���|aQ�X��/,��-����:�B{>Y�!����:�*7��u�U���t�e������=_X���tw��C,k�u���}�X:����*7u�����!�9>�,,��Hx�
���+�X�!�~0vb�Q�uh�{��n���+�v�t�Un��C��Uo,����gQGX�vs�]�X�������Awb�1QeaQ�XW_����!�ys�]��t����:�����t����}aQ�X�>�,bY����C���6��:���}aQ�X�mp�u�e����}��}�8@bY����C�rdvbY����C,k�u���}��C�ts�]�X������}_X�!����:�:on���W�ts�]GX���]G��z�7u�������C�~~v���n���C�<&�.,�����]�X�����C��6��:4�e���rb�������u.,��c�gQ�X��wwa��6��:�J7��u���������}��t�u�|w�!�y��%j�m �u����}aQ�X��/,�����]�f{��x������Eb��x������Eb���h���1�m��+���]�X��/,�����Eb7��u���}��C�t��]�X��/,���'�I�X��wwb���a��yJ�Mm�]G���r��\�X��:�:�j��h�!�y�v�����e3u��_�:�Z:����h�!V��G���W���C����x��+���Eb���h�!V����C��6�:������:�*�}m'�C�������m��������C����sb�t��(�>�u�e������m<�u�u���]�f<[��Ly���}_X�!V��G���m<�u�e������n���C,k�u�����]�X�������x����dI�X��/,�k����C�v�K�:�:n�����:W�R�cz��8X%U��EQIFHX�$�	���D!aQ��(#$,�re��EQ"IFHX�$�	���D!aQ��(#$,�re��EQ���CFHX�$�	���D!aQ��(#$,�re��EQ"IFHX�$�	���D aw��U���||}�M@
D���	���p�-�8P6%*����@E8��@����C�`3q�"lE T������p�
�8P7! �*���@E8��@����`�q�n=@U������p���8P4�����\��$�	��D������~�	��D!aA��(#$,hre��MN��GX�4$���&�:��z������i��#,�gr�t���L�Eb����:��w�Y:��z������i��C�|����!�3Mu�-mk�E�'��8P6#*�
`+�P6"*��6�@E8��@�[������;L�!vpd����"a�'AFH�w@$�	�8	2D*��,"���L"a�'A�H�m�I�!_>��g�	;
8	2B��$��#�	�%Mu�����!�%Muh�:�w]�XX�4Y�!�~�uba]�dQ����.i�S�XX�4Y�!V�
����.i��C,�K�,�����%b����:�*7��u��uI�Eba]�dQ�X���v�2�n��P[Xo�����8	2D���`�	;8	24���a�	�
8	2D��Aa�	;
8	24��}| 2D�.N���:8,"a�'A�H�_�I�w�2DJ��-"��������� C$�*�$��\�n���������y� �_��h��C,�7�,�����]�fR��x����&�:����b�!�Mu�u���]���l��U�C�|/vba��dQ�XXo4Y�!�q��]GX\o�,�+�|r�!�Mu�����C���������+�P[X�d�P����"a/'A�H}F���H�8�d��]�"�uY2D�N���uY24Se[�]I�HyG���s�� C$��$��X=o��{�D"������_�� C�v��E"��-"���X��yB\G��9�#�B��h�J���:�����m��u�u���]�f	c��&Lba�dQ�X�6~�:����c�!�Muh^�v?vba�dQ�X�m��u��o>�����������Y�!�Mu���|r�!V���rb7��u���>�J�9���I�H�#�I�!R[��%C�sG��0��>�2D��N���:�,"�uY2D��N�����qd�	;8	2D��qd�����d�t����w�2D�>N��������:�K2D:V�[22�j����hc"��oW!�!#���� �D"e���$��"�}� C$?��/��FH����LP�8�|&T�sl�4�*T��mt^� C$?]�/��}��e��<&����%R���NV����".V����B.V���5O����QC,t�"%�$u�"e�$v�"�]%K�]%+R����q����_���>>�V���x����*�b���)�b���)�b�����WX��OT����OR����OR���d���dEJ�Xs������E��l����#���P�k�x�b%�,/�d�J<Y^��
�x����y��9��T����%�P��K<H����%�%+T���G��eO��Z����S�/-
? T���OV����/V����/V���5�f+R��R�'*R�IR�')R�IR�')R�U�T�U�"%^�y�2X��l��;���J��g����?R��q�8�R�������v�C�H�6���)�Fq�tP"��(��J�D���Sj%'R��m�����5�Q�����Q��!ya)T�IRq&)R�IR�&)R�I�3��R�#$j�"�kp"�lp"%�%IE�%)R�I��p�R�����b�}��j�[
���5�[�������-d��[����B�-d��%�
�����-@��[@���B�- �xH���,oa�
���5�w+�}���m�>�f�)��O���	V��$��O�B�'Y�}��>��g-m�y�!�{�@��O���)�}���'H!��%��O����I�<�d[N9�����-��J:lfI��kz�`��O���$+�}���'Y!��,�>�
y�`��	T����O�B�'H�}��>Y���d�
y�d��IV�����:�N]���.��_�:hM �+����)#�����3PH���RHw��*�u����e����
1e�����2B���$����[����G(g��!��WC����K�XW{���-a�f��:K:���`���_I(
�4'IFj2�lVe���laQGX��������=�:����J)[=��btb����u�u�[��:�:���r����m�:������2�|[�����[7�:�B�-ga�pO�|[�c�����_��#�������U���I�#������������u����?sa���9u(�?{���2q��Dqa!���9�#,��r�����o���%����[<u�v���KG<�|Y��s
�#��^��?��V�t��Fa������>}�������P��|[X��m9�:�B�-g:QGX��������2S@:�j��=���H_�rQ��$W���e]|�,�2@�����(#$��N�����)'�R[��C�1E*4��-���ia4T��5-���p0�&T���4�{����3�V�~9������Y�T�^g���}��C,���Ea�����7�U�u}���y�y^_fqPM{�C����W6T��r<�w���0��$��ci�K2d���4��2B��>��-���������7i����uP�#,��s�������=Kk����>�,�������X���	)I�}/!C�s��$#$�����=�gi��)��^K#h�O!d�D}��G)S��'���_g�_���QGX���~m{����>�+�~K��<�1���@�c��w����s]q,!q�������8r�{3���K�f�SP��^5�2b�G�{�PG<"���Ea�G���PGX���~)Ugp}�E}����}�|��:u�S �1f�{d@�JF��!q��w����8Z��#@FH+�U�)�{i��I�a��������g����O.�;��?�o���d9���������O��;�?5�o�q�����f�Sic!�mx1���6���j��(��$�co-����3������<�O��;��?��oM��d��39�S7����7�O�������`�����%�����N��y��[���Y�4���T����Z�N������Y�q�����8����6�<����*]�{�P ��?�M�G6�H�Rl����u�q�����h~]����r��
Q_�
!�����q��G�8�G!6���F|N���`��>���>g!��m��b~����P#n�.m
������g�7C�����b���z!�|�x�q������;~���+�9}[�v���D�����e��@��#Ey������ ��H~A�J+���;B:����Xt&�6�����(U�SnN��=�B�>���%i���v]����8`!F�x���725����[�����~����36���H���:����?�v�A[�a��Hy���H�����!�����_UBU,�l��T#K[����n`T+ E�������
x�K���z�����BE^.�*m���k�*c>
B�wZB�}������N?�/��j���V����K�*[T�������34��6g�l�k����]��S���Ny
�v������h��=�����{�c�x��Pe�,�^he�����1����>�!�M3�(l1�������FJ3n�W:�
[\e��Y4�P!����H��k{�s�t���������y�!v,S����YK����n�!�vm������������Q�Fo<b���@��k{�[�;�*%)��
�>�D�(W��m4��7:���o����M}LFH;��f�������������T�p��&�#�����!	��1}� t������UYJ����F��Q�N�
�s]3y7lp���6��������~m�qeEq4)�5d�K��	�kK�:C����v�����e[C��
�:�~�Y��Y���N����XCRg5���������nz���`��*�'y�4y��U���<Un��Q[�i9�g�O=Y����$
)���k^�s
�&�������VC��E|�#�{��dj��l��M����U|�����i[N6�T.0o�5S�/d�����_�,P�-6��`[�V�CH�f��_����?����������u��N
��Xva���(���#���kT<�}	I3�c�����Xaj�����C���S�#�v�Se��!���#^���J`H������V��������>���K�1#$�����q%`�����e`=�u������2
�gY���R��e������#�qOG6[��g�����B�<�����f��X��f�2�����d�Z����b��:�H�����]�0q~�Nc3���J����	��c���x�p5�Qa:��]�TCQ����-n�Tl�����X
w��Gn�%���m��>����6��3��N�=�y�����T��s��n�}{7Ow);�WWf�8��<�?G�	���^u=B�m�����l��-y�y]�����X�p�������>�al�����i�� \�x�$)���[�q+)
�R���g��^����6{\P�y����6�2�=�v3R`��M�N�8P����q\�Bx�#����i[C�������x��w�aN<����6��hx�:C�4i�F9�&[��}	�u��l���H�1����6S��t�VA�l�At�M���Z=Bb�m�u��I�4�=�*5K�O*#�����}�0�	�im�^[mpu��
_;3�U��u�^JS]�I��6���5ul@����������uI�������Z`���)A&�YS^����&�������P�X�����p2��^��T ��=3���v���g�e	������MI��n2�%>���Z�����q���m������eaUq�4�rT�:Z�[�T��<�8�S�Yq|������3��sZ
�l�<UC/���#,�����\lu	����hv�P����z8���x�}	���}�Uc1����	L�+�4�}Mm�O�v��K�3������w�3w�5/h3���������Ei�����ER��
��)���3���s�1�^��'���qf���u��ay����1�^�g�9=]US�Y�*��,[X�D�I_���1k}�a�l�����P$L^�z����[q��l�y	�D�d{6���]b������KtoL,�H��Y$�=K^�,%�������m	��T�T�����>*��T{6E]���]2y��2 ��.
�)����#�tH�GsV$�8��MV��!_��x�(MQna6`���D��}[�gFj�jnVg������,��27������9{�aa'r�����h��D��������Re|��T����2��	O�������1�b����L��[���S�x�Z=�������|l�+����+���������-a���}�E0���\����U���SV���|�J�e�7f�h��X�pS�K���"BiF�L��-��Rx�03lsQ�;-	U�-l�k�UE�5"��d�z�ecM2w�x��|i
b��������*�5F������c���V�_e��pMi;��/S6��3�Vgy<�����8�Qa,d��g���|45��-���=�%�t�&A�V��<���f�Q�{X�YJ,��a�w�����W�|���5�_<F}����:�������=���y�v�'&
��E�'���O�}��$S(�(���Q1P�iy;�F���
A�?�Lp���(�h3Nu��Wh��%�d^�����n�AK�Od�����a�7��!q���XkL�[r�n>��W�.��cm��H�A�M-�e�%�Or��'���m��Z�+,���/��������1�V�0K�G�d07�X�'[�KN���O2�����������5n�4�}�o;����U,��fI�O+-{<j�-�tcqF[Q�k��;�7}%/}�����	�S"yW��l>�`���<�NO��i��'r_��d��w�C,>�H>��H-��Ix���2�acO�j��|u@��Pfv@��rk
�m^�������H�*]�r�=S����Jw
�u���N�t�j���8�T�ND�<���i����/a]��s���%u@S�{��O��8+c!+��1;��|�a�� ,I*y�)'�Z�=l�������N-}�R-l�KX/���Y](��7"���t�%[�r`91]X���5+�u@�k��J��5��o�:��yv@�?�8�k�C�{h����l^*�"�Ho�H���Vcb����]2)���f��rhTo�
80�I'�PB+ �jju���)�-l?��������<3=�+K+,N�d�W��%hjd�7��r�����C������N{���,��j�s�q�Eaj=��4Ga�,��m	�����a�H�-���)O<~�h1��0�|�t"�+��t"�ys"��6�ys"���[��En�}�������,n����9��X��r�xj����b9nN��2��N���D�;�o,�����)��L�D������5�\��q��D�cq"�qs"G���wm��ja�5���������W|ju�z$t�������Y$,����C���
y(�S���+��}�Y�@��A"��Y��rZ������%�%���K�����/�(w�0
+HS^�p��_M�dS`���} ����$_�3~��J����"�[�u{�5,�5:�����:��$�8g;������[X7�_����K�u<>/a|����ms ;���w��S(.�������u�����%*�
;���L�+#q�^o����i����T(���}�.��<���QV{���Q��k#��y�i�����(.�����&*�����S�L�jx�~y�3�G�,��l6�&������\6/{������nImK&��$A*4�T L�2���_��Gnu}~�z�!��a|��-[]���b[3zH=�S)��� l��{��m�n������uM3�[��$d3x5������S��x�;j���3��Z��0����������;������Ww:���!y��BEi2��19Bu�)�\��y�C�%���A���Q�7tLB:����]���e�#+�3�+�K����2�����-r+�������OK'��������~�x�UF��?~�������?��G������o������}�������������?����������/����\������������?����v�����_�~����|����������
���������}?�<nT���|������+���������{�����~=���{e��3�����~���/���7�O����/�^��~����o�oW,��]��������j����k���������������U�Vx���:��d��P&��6�$,gl��b_�*g���	1���L2��+��)w���@�>��27�aa �#V�Q��K��Z���f�"�1�:?&��`<"L��%�xl(�g���
%��B���/�����v
P��`����i����F<�6�ga��q��7�f>����qS�kX���E��f\�0���n�KXX�KXf�6�%�w��Q��)����"����"�����K�����m+�4�&��2���%�������"�/�.�Z^d����b]%�3�9:?9�����4!`�Ml�&�53���O$��d�B��������Jea;����mv>���3���������"7E����R�&���ZXB��Z��������>��`N��a�~'+?��x���WQ�T���&6�4"[q2�����#IX��
c�D�0��mV���yD��Gh��;�s�T��y�{�=��m!��T�4;����0���Li�U��k�rU�bX��'�-�k������<<������Q�;�`T��w8�	F���z�-\����6�J����I[�46��F���&�PV��2��k[��S^�XR�
�j���C��vaF
���\���S���y�j������Z�|?c'ub��n�~����R�N��%�0���MWa��wNn�'��q�0�����04��sB/ha�����[���z:���������W,�Z�%V��������������X���F������0�����9avN��������c8kJ��-�=m6X5�L�#>���Os�`�f��5��.1���������h4�X
�na������o�p*a��\$l�&+�fS;kn�"�
	Ly�����h�R���gx��p2E�Zf���h��������t5��l������`6f_���U����)9�������j��6����&w��~,�o���u���%�������&�[�����z��*T���;O�������^����
��0����E���C�&��������MLd�Z8c���%B��M��zVm��t��Z��cif�
�����C�@��Z�(w�b�������w�9]���{��6D�����$.�N��o>s����i���b����/��E�9�\7��,ar^Oy��L��=��&�m�'�_���4c��lO����gUCX��ea�k�M�'����z~L��a*�.�����/����:�$�y	K�1?�t_�w��0�\.S6	z���7����9-izx60-izx�����4=���0����^+�1�l��4u�����U�>�����x�X�����i�iz�d���/1-���.oX�%M]*MsZ�-�4M>�rk�b3�6�t�����?��Y��rz�!����fo�b3�r���GTND�|���oSZ�7�����Mi�g�!��8vH��w��*�Y���f&���T5�V�06QS�/�If}����]�VDY?�e���A7�b�q%�6�����v���r����M�)�5��i��33��4�fu3�%���b	��4��/a�NS����Q���akK��,�lK������-�������4HQ��<%v���2W�D�S�	_�>^�,�<���?8��#���}t������f��[)Pw�b���}������8WX�B�F+sT3�����*x2�,�t���$W�d5��l*���N1�l�d�\na�-��^�Jr�h���D�>���s��d�c����������%�a���0���2�fS.�D_�q���6"���������KmG��So����"�-a�,�UcV�%�[X��g3����x?g&W~Iv[���>f���r�����n|?5��C��A���,�2�L��Ed��K���.U��%�&��-�b���i�����E��K��>n��6GK������5����)����H{i����%��+������&�.����.e����N:P����wc��I[u��k,<��R��
�P����ER6�@�6!��h��v:��12��R�F�m�i{��
\�����J�j��*�\Y��:������|j����5���6'�|���'���3g�9s�5gl/$�wI�U�Rr���x��7(�s���Z��Yn6���:�3v�1O�~�8p�%��~G�a�F���kn=�the��m15��L;�����`�h��nV���~5���O�V�^s������TY\��-��t���8�&|[*dk#T��~L�s"'��Da)6�&L\�����T���Q�'a�g�y����jiN���nM�!)����3���]�rt�o!����X�Dd��&���94c�D�$��]��(���z7W��X�1@������kK�,�)k��'gt��o6�_�[H]B��Y�F���uF���XFj�b�\����wV�����X��X���a]�����������T����!��!��	�li
�k�Z������|��MB36g����t*�/��E^�K���nW������|��s�U[�2��V|w�C4�Ne�dfW�q�"G�����R������N�A���l;+�E��1v�v��v�G�I��t��N
W�3$�W���=,h]�[���f�[��B�������Oo:� XD6D��k����5R���q]�FI����x�~Le[_�����leHA�V�����Y��}�G��������u[������<c����v��3��3�����N}_��B�N�n�����N;G��*��!��9^:Cl��]V���>;�uZz S?���N;ZWcX�{[�{�o������U��w*�������u4�������[��K>q��S�����ME�Q�����lU+vd���
���Eu�-n�8�K�o�a�:uJ�%V��	l��B�R����#
-/!$��6d�h���B���v�
#��x�����)������C���%��r�r�����6���!��cSf��c��mS���X{�#jV<GH)3u������h���FA��-�nXA�*7 |V�y�6�5���Ac�n��C&]��$�2������C}j����������XU_B�-�,���]�>�:-!�%=Kb�M��#������x,6�1�+-3O��=�ea�!q�GW#
KC��N�mx>�,�V�M
����}����7�z�R,uhI��*��k�R�[��R������\}���z���koQ�S%5��6?�v��MB�����q�����/�Z���i����Y�W��,z[5�L�Oc}���9�������o���o���o��������l�\����v��}���iK��SN��S���RK�
�H�
��t��~K�
�{�n���
�-u��k�~�[�~��|��[�%_7���uC����V�J.�
������uC9�uC��\�/�����{����?�X_7\���z�������z����K�n�������^���������{��_7�m�n����a�e�n������u�� �
W��������G��~i�
��v������������uC�����~���~������o��}���+\�}�p��u����}�p\������n8~;������s;�����~�o�u������8��_���������~^7\�x�p��u�� ���H_����~��w��~�n���/�
�n�n� ��:��_�~=~=|��o���%�|����Z;p%�u�����|������������������������
X��uX��E��Z���m��������oW�������
���z,��z
������\��u����d]MV|`�x=����@�ED�����+����xm��	�DC"1��Hd$�%�7��`� ��]�:d#���Y�l���M����




K"��QW]ciou{��F������J�
����e������7UKVQTWT]����������h��q���4&hX����A�c
���,y��
M�14ih���C��&�J�oj�P��Dj�)V6�hp���!f��&��k4�l����yGS�f]�u�BK~z��0�������>��q�,������w|B9�����������+�w�p��1��d��
kc�v�i��c1cQ�,�".��9�
�I��!�!bR�6�7�e�u|���wSV<l|:��|�G���
���zN�-��g�[�N�d�.���%������0)Z��]����?v|�;m�����������w������?F��i0L������UI�1zyvXaX�9$���#Z�0��Y��SK�����k(/��}�la�(��|+���R��&�^��R�<$������<��m�i�FQ�-�Y)�� ���U>m~�R��2��y�����,y�n����Z�(�������aL0:��b|$	;�v��;Q\��c�v�y�R�����u��X���T?6����</��2a�������������>�I��o�`I���=��9��.����qAf\���������k��#	��v�C�%mVb�(�'�y����0l����_����%������=�SuXj4�Pm�l���;f�#	Odj�q����K���#3[�e�����j��e��e���'��NiG���*]�L��.x!�3�rv��=KS�KMry9���������f�fv����������7k�fkkO�����r|��	����>��"��(��C*�����l��)�p�������j�>T���e_�>�T�����l���)�9J���
����[%��S��_���������c_�l��Si~��h���#�M���['��)�d���yV��+�������DS[���J��X���C���@g�1..j��m��KD��n5��K�gb��=�]�%���.����z��L��
�L3����IH�Y/�|��E��������3��m�V�.a��^�����<	��"�������e�w�h��E���>�#^_�Ab<��aY�:�>���Y
������m����7�u|�=;{��oI������T�����.Q��jo:���E^*����T��?*V�z*T�+T��/�����@��2�(r�X����^**�����+j�`e��.�u�3�p_^*�����f�)�2�e�	�V���hw����o����+����pO^\�z���Se���=*���PQ�P��W�3KX���P������,�D������^r
�#��9�-��U���t����4;w����;$;w����;$;�����c�?�(���~������v":�j���Cx��c��]";�j_\��W~~a��a{�}��;�*igI��Y���8�c���u,�`��4�e�;��������6��<1S�3��U���':wK]��{�%Z�<���;^��t�Q������������5LFb�^�������e��0t����������3��%��[�yS��g�������'�@M��������0-�>f��a9/��s���O�����i�%L��-��lQ�Y��:������;�D�����sgXV�v��?�����s�#��W����;��s��jk����������\���b���)L�	
G�h��z����;/.r���B�}��1��</).u
���00�N6��}6�H��Z���G+y	�Y�v�����[�nFH-K��*�����"1��h���o��{�|8�[CpK���76.��v.ag�O	���;gYE���0���N��+u����a�~�o�mi���}�F��a�r����(�����j�-hg���`X����'�����*1����?!����N8�6�r�T%����(���n�R�(�~#X���)��A3�%�(K-S�p��Fx��]5[�������q����=�m�[��;�/~Dn���j���.�'�t[Dn3��'��.�psd�%�1���p�'N����f���;�n��v���%�5������&�7��b��eZ�����q�������qBq��v�y���z��i����L��Kq>��F|�[[x�'�/��{Y~X�����d�C�z��y�2�T��c����l����)�v��L�f?�Z��:��?�m����o�_Nl
��\t�`;�S���g�Z�T<��� a���G�������`#�s4X?]������
�EmiD�0���-.����;/Y�u�.yxp[�p��g���I�/�T)�.]��$�n��r���r���~%��2�r���{�������rYDi���h��:�Z���;&��U\�'R�'���s�������`�_��H��.�������W�r�zm��%[3���8�s����%���t�4�}�c���Q�
�U��K�����"5�&F���s����-��R[(n1pi�����������5�@�_=��0'8Y�X�S��\���2���!v�}:6�:f��T:/�eN�{��c!�����G��=5/����7IW�OL<��	���GT��z���rz���fYW��4�aY�X$t����Bc��0����I6�t"'��K9@G�c8�N0Ox��#���n�Gc�
��>���(t�de"�{�Wq)�py�%��o�L�T��J�X�;�8.���{���DL�e���/����%}�����6��~N5V������I9v���M�_,�5;�n��d�uBt\���`\�#_�7;h�R���Du��E�v������1C�"�x�`�*.5V���m�o� �1my���R�i��G
�.�\�!��K2�_������78,�Ld.�[��,�����.��<1q��"�����W�?��a�g��MqB���Oc^�|��t��iHv4c���ae@Ct�f�!EK��i��'��w����6[��^���K\{�%���w'����c��0�p��O���Pbh�=��R�������R������4v �E''��8��E(T�D&��&&A�l��T���i���c�+,#:p
Kz�>���X��k[C��~,
�{
�:�EY���G�C���3BZ�<l10���J��J���#�����HK����]S9�v$���f=
g��dL��"c0�AY�I
��2����X}�,C�E/T�Lv7c@��q��
�#c����������f���mf�1�
�F�m&�����b��w����'V1�k:c�����"�E��vq`*2>��
��,�E��l��_�Km(J����8f�����q�j���tG��C��z������6Cr�U��{7k'�3�e{�w�����K���s�gn�}{�/��J���3b+�vT��[�^��-�������������N�GQ�����4�����'�|L���;�`k�l}F�]@������^��y�+��-����H��������K��"q��6z9�4�{�}���!N\��&���KX�^��{?>�����w\��^��F~y���fD���������~l�����im�T��>��{;8$���v$�����r[��N�}Cb:<q��6�m�r��
���������v�Yew�0�V\)���/~����y6w
���0��7.�a���'�W;���x��(����_
�-�;ZD����K\��nB9i��jX���2��f�������I��-Z-��=�����u����6�����6�S�w��_���T���I`5e����<�za�L���j��~!�f��j����\f,r_�W�����X�4B�L�5�c���q+�?�����"����G�Tn��,�f�)�(�$9�^����2��'^(��A!{�^�Ur5�X;,���:h*��3������/
���"�]����=��"���S�46�?��5m=��/6�
t�A����T�i���)�s,!�9�m
���7Rq�'��A�(�Y�>C����/
g���#O�ny2����?L��{��Y��Y�>T����i��<������B,>�R�������zI��I���	�?����V�&6�XW���:��e�,�~���6���w�������l��3�T<�[��#y����?�?9���l���D5y����f,P��|�����!lrb?��`<�c��Mih�M5f���p�3�������r<[�c���zhs�t�����=�_�|����Rf+����^�l�mj(i�����U�����n!gr���9��nUR6��eh��x.��l��<c���[�)��a'����)b�^���!4]u��Fx���k-�:��1�l��,�m�]0��rm!i�!������-�����i2�aKf�j*�H�jy��3�P����dU�3�^e>��7��S��y+WY�N�yq����ni�� �l'����T{�YJ��'
A~o,���6;t��X#p`��h�~J��5y����6�n!KE;����a���d��a��M��wK�T�n���o��:�3�G�r�k���P�-�.����9Y��[8���-���:�p����d�v��&�l���6[��8��"���Rf��{��4
s�v�0�n!�#�s�c�[���������C���S&�_+�����o��M���(m����g�����3����(Oq�n����.��-}��������|�����1���P�72e���X�}l��m����z/�aL�;�.FV���6�������e���Y�ledy�v�(��w��K���m?�<mgW����~���6�qc����=d����,�61��M�}M�?�a��wW�����q;�"p&���.�}����K�!��(���H���GY�:~}�3�q���z/��h�Vw��l_i}�p����2�����6K��z/�)Ce39��d��RU�L_k<������05=����O����B�7]:�R�J���B�L�,5��v��M����cX�f�z+CG|��=Bi��Vm���m.����9
C�6�=�_�[�N�4|CPx����
��7��[H�!(V����L�u�����o��I��J��W����z���J���Pi�#��l�:��N��3-O14�}v:����9��C����#������>`��V�V:{��'�W��w��o��1g���X�ppd�����1#���Y���m�T>��*GF�J���[�1����R��_0E��|��l�R��*��������q�b����*����L����r��sp�����	���MC��`k����������J�m��kb�"�J�Uh=�������<��!�O�;4����r��T9��
z��T������r��y��h��*2�w�����1��r�6A5<l��yM���?�y������c���K>�`O���J�S����_���1��\��rL��?5b�g�{c)����x�&_����6��8���6�c��>�v�}����T!>�h����A���V�������W+���$���=�3������
]w}�8R���*C�F���SWWf�{��������
!����iL���w����>��1�WC�V���!hO���'��o��]��~]n!����:�*$S��������}h��|�$����1����*�
��A#p���6KE�!�rOe?_Pb�7��r�i��[uW����e�|��-�ih���>KS�%��t�V&N�N[J>�*�l����l1����������Yv�0U;����jzjkkD��"}K*�-��G�%i1y1F���`�B���-��W�*3Y�����VK����fIg�9�����lx`t#�7%"�#+�n����v����4VJ�ji�-1��V������6Z�[V}�O�"U��#�o�������x�L��oJ���`�����3���$
�H�'��X�T�<H�a�-����!����l�4�������=��]��A&,^�oY��=�����w�r)�[�F��
���c?c��X<sR�����}1��B�I-6�g�JaO��iO���9���m����{CL�[��_�l	8��v���v�?��������������(f,����lI���^����	�/6�f��}q��|�67[�^��^6g���6,\���mDl���sW�u����2�x��hdNe�.e��b#�
w9�@Il��k|���� e{�������n|*�OOe 7�"g.��p2���C��%���6f�!c�m���f����/8�s��f�
�>x��IJq�_6���ae�#^p/���laJ�p �}g@������Ro!P�o�6=i��F���3~]���g�������6��:��v^[H�3$����d�:z;\7~��*|s(�.�k���(�Q�3���v�����)d��������l��
��d*�����������Q�������k~�=�m���>/q���I�����
H$|����;B�R7������xl����C� 1/%v8:J�_o�i�-��(k<F��8x,8����J�2���{�1����-�����o���4aH�N��l�hS�"U����6�og�#��B\�%�!HC<����������WP;���B1��
�6����H�)�����+jW����y�7=�\�s\��W���� ���P�������'�r�jwaZ��[	Ij��%��ZI���.yI�����7�x�����#�Xe*N���m^w����b�Te���P�@�C��Y����y���-5=b����hn�3�wfP�s�L����B�},�F�x;(B��`��>���k{�����6�P08�;��B��x~|��M�w�����!YHj�@��93n�1C�$e�7*���-4�)f5z������a1�B���6��|��s&�|�F��ar��;^�`b���t���6d�
�,[���J��T�G�<��T'�Q��uR*��e����
�a����lk�6Cv����k,c�K�i��>d*�j��-��{���(���1k;C:��p�&���Y_r��b��+�,$�^v�ly����!4�]���v��6���w�]u'��m�Cg[�t�l]l�
W���4r��d�]�}1l����c}\�e�Q���u�WJ?��8�Zpf'f-�wo
��r�cCG���i�����s��}
9Y�[e��mH�MLE*/�-V\yh9�)�#kL�	*hr5ue��c�mQQ�E�/���q�E��
2������C��a6�</����P�ircd�l��8���q2&����hj
{���.W���?n6M]��g�����Vn���i|���z���Rgq?�i���RpOV��}
)����v���5���.m
�w����D{��|N�-���n�����+�s�(���I�9b����}I�9��>O�G�<��?�J�ZI[���� B���,Ke��!� A������Q��w%_������f���EY��Fq3d9L���s��/����*�wB���Z�x�+��������0�3�Y�<�W�x�8Z�"�	�t5�r�vk�����x��,�#kq({����N�0<�#x�H�iqdI���=[�:�����@9:�j�����(��4Pm���(G��s�Q��Su�K�f
��n��Dh����Ts�������P�b���]�9H�Y3�f���|��;���S����>�:5
!��,�
eH����Y�Z�Z0��2[�P�&�,�X����L-��V�P-An�������wBY9���:#��G���Z0��i�_�A���G�m�%����|Xtr�e����@�1
&1���
��8�S�x�Pa�xF���Z88�"fw����������4�%��yZ�1��1���>P9���YK|���,��b�OW����A����>�h��Iwa8{�4���B��s���ij���(��G�R�%E(�/������y��l�����'jV����yRF�
5*�r��>]
���&�(���������f�wJ���2�ib�'ok��f;.��Iz�����m�5�E.���e����M�V�#����H*`@k��z�#���.y`9������$���)���^���_���K6*[o���u�U�%�j����;��~:@�@{���O0	�L�8(�����`$\�t�z��a���qy�F}9��of\��@��!�l�J���g��"cg�~��B����#(�1��K�C�|S���H'{�0������Gw8��6��c��=	~:8��s���������~"�^J�g�4�������d��s������
��/�,�2z	�00jP���G��<2�x|,�G��������P?��l�L�QE�������+�D4�������~���;~�k'`��<�b6�28�.��MUw��Qk��S����|)��8%���Ci��P��tfU/HrzoZ2�w�8kf����8X�+;;t�q��J����M��g�OG<���E<b-@���=���2[�`:��kE�}f�z�d��qf�����'���q!s�������i:������	��zi��2V8��G��e�i�z�|I��;��,�������D>A���u��/�����r>�m�_h�|�������`6
���#O�������:7O�4W����g�q�#Ms���I&=�������m�Xe
����i����Th���G��B�D�����(�@��B��9�4�d�=���U2��V����S�/��o�~�]W�^^�/6~���`j��`�O=�������g9M8aU���-M>�K�����}�I�u@��r">���	�y�\-�z��xS�����7���k9z;dJ�8����:��l�9�XV�����N��-#����e���@������g������
��|4�,P���a~:0��Vu���Gs�5BI[�����~�}F�/h7:�|���i�g2�1'���e����%��+Cbx�9y��,:}m���N�W@q��J�W����.!,��������\��G��#1$nXC���c��W���|L��W���g3zhu�}L�e��q��4��\J��SN����{��w�"�[���=_��]Z`v+,���V�C��?i��_>������w��EV���o�o��*��?kzl�w
���X�����w�[�dg�1�.��������������'��lWeV`v��%�Zfd�3�/���{1��3f#��)��9�n~`�f9�{������Z�S�
�@�uQ� ���A��>3�K�~����9�p��V�E>���z�)�+�c���$��������3|�/O��w��<�l-���~,O<,�������VtZ����?�?M����o
���9/\����2���Ja�b��z��0#$3�33V37#�3:#��zF�g�F0h�� �'d����P�+��7���C���O���#�\� �h���t����m���A�1��Ja�b��m#�6�p#$7�s[������x[@o�f�o�FpG`p	�1O>���V!�n����B�#<9C�3n9��#�9��#��=GtCG`tI���'|��R�����p���0���������Sqg@wwG�w}Gx���k����OX#�<��������������r{@{n�@�<[�s��{<<ng�q`=�,����Au�����(,�����U�UB�PUT�<C�9`���`,���?NSx����\h:4#���M�f�}H (�	���!��A�(�KQ�+Eb��xC�!��G!\9�(P(�	�eJ���=���ZRE��P]Sc�4����	�=�q0C�Ac�#��c����%7Q0W0]0c0i0of�`�hn�8�P�h���1�a�������!�U��6s
�M3��S��.����/�m@\��GJ���j�!��A}02{��]d;=3v�3���K��f2RV�����7��Z..V��(�JP,����d#z������>C�n��3����)����Q={����g���j<�;���}�k���N���c�i�nZ��!J7Me+L�N�j�.v
������V��>�3m,��c��q�������L|����!���-
�y�H��L���1��P;P���"B����r������%-��t��[YW��Q�"�j� ��$[x./J�P.�[7��A���)���������x}�qXY�h�T8_��2|6���R,�T�mc�j��DJ�7���#���w�J�.�e%��r��}(F�F�J!+���A���z�%Ri�Z�(x;LO�g/(6�	�5��a�����/�4]+����E���?��kL�j�S�~)���S�kD��t7���6l��@��xQzH����;1�e�qw�L;[+c�����Q�{�$Uv�0�=�3�=)� 0�#P>G	f�B2z��
���N,�@{�O��f�z�R�s�.DR�@��iCe��0)���"��4?��.Z�������!�X�Q��^K�ma>�Kip���ks�<S��gV������E�*�-"#�-�30�Sza�������M�@z�O��1����?����l���\;�.���zc����"������I���/%O6�oF����k��
���v�Z9��X��[��X��^�_�M���T�8�����[4Q��U��R��.�������I�vOFj�'�~d��{%n�A�����2������RJ�i��6"V�������-�3
8��A�Z6w��v*no��������A���h]�
7G�w����LD���� -6���bo*������a�[�7��w���� L���wJmW����wC����o?�l�Tg��Y��g�`7F�W���%��qE��|)���0�������:�;p�7#��`W�S/�#u���q7�vk��Q�)�^R�E��RWL��[5�z�`7Z�R/E\���X77�*��
�E���6��f������`[�x
��
-e@i�C��
e`P�v[���|�o1z�E������}+R�s%D�j {'j0}^�������y�\�`7���n;z���`�~^dGN������:X��)@�y����:X/�u�,��Ww�qmxK���/����x��Es�����)#�a�zh;�e/-O5��Yk.u=-k�n����� zn9R�T������n����Y]-)��zcYW��S�p���}F&�+���p�6���<������y��5M/����)�\1��v/��F�2.�On-R�9{s���Zc}g_k����e�����6���y����h����6�u��\���o�7����3��[(��5�r�w4����4 +��1
�_��2�N�HN����xN=R0���;�f���w�g���R^|��M��N��h�{y�a
~���j���5c|������Y�B�2�#�K���`s,�@�]�P}0����,�f�m j�2�B�� ��;�0QA�%t*�sJZ�h �[�h����km*w�g��@��|��#�}��Od���*j
Ik��9�]}��u��N����>4>�v�
lF2u�mM��%l�9-�
�3��S��Aga��r���.eq��atY��d�]r���e�I�������K�aY4���(����'8
u`�F�8�Pd!.��i���OK/Y|���/;z���g��x,i�d������]����������h��E,nS�h�Z���|/Zc�:^�b��;
]��\�Z�A��=��e���V�4�i��+���x������{��L�r.k�U��p�ez:��<yZ���O(_�q�-a���dk�s0o�����~��db����}�^��)�Nx�,� v�ia<�x�\�7z���K\���x�t��2WrW�O���<)y����1_:y�l)��q��+��JhG���x�I<�]�q"z�73c)����_<��������'
�Z��1�� ����S�g����',�hUk���.���4B�j�����������;,i��i�@l>�-�Yk�J�LBs(���_�
h�������"�@���;�Md�E���\���H7,������3p���B6��-���H��ti�<	�=�"+E��f��@��@[+����
��S���<a�>���H^ND�:�/n���9H~d`�U`��4�P���F~N��S/������@���b�����K��^@u[�Yu��[5�3��X,OV�8�*v��S�DR$����kdE��^������;���F����e�f
�b�8�Lk���T>��-;�8	����`Y���-bon/���Y���_��e�,j�X/��49���>����ba��V�x��
��i�_��X�m:����n��w��y8���Ys�FD���F=����A�r��#����n��<��5�h���
-�i��1�,����T�F=�����)�bW�fF����.%�i
���������v�h����0���`��W+�]e���WA���W7:���������6��D��e��w�(��^�P��9�7�N��&��f�/+4���� ��-/���c��2�@2C�J%��Y	>���]>c;�:^��U�6?_����"�����_b�pD��W[��`�V�g9����������*^5�ve!����9��%�s]Sp1��-[H���_��_��/���i�UV�3jW�.h�fno�M�_
�ec�vy4�W��s�w����� t��!�D�3�'�c��B���@A�����X��������R9/m�k,m^����
��i}��cUM���@�X�������)1;4����2�4��l�t
��l{�W�����t��n9{��3d���J��M+"��;�5�����J����nkGA4���v�I��"�X���Vr,�
�Th���	���Ai���m��)�N���+���p[���F[�����Ha�m����=H���;W1����h}�t�����=����h,�N[��:�8���2]C6O���
`����e�<�V���f{�������JE��{P���^���e���T�Yw��w��EA'�*�rz��u��}��:#
e������
�[��b�h{�<;�.!�@k�F���d��L���e��,X
�Rm2���.�l�a�9��`�
�aX���^�2E��v.�j
l��K�:�F��R�#M�I�i���VJ��F�$;����FM� �5��Z�/���U�qVF.�!�����w����;���.���E�|^�V��3������*��c��;����@�Y�g�	�6��������@k�Ed�{�����w��b�}���-�*|�l�22���kMX��Oy��r)��Ta�w��;mVa������9�5�����?�-)���������A�����������
�+���vj�
�rR9v�PZAD5�������j��*]y���z�_��.p{��j����PN���+<�C���(ZU�Z��t
U����n������V��
md�����
�R�&����������i9�n��C��U7�d!��9�Rd*������e�E�]�7Kw��k���I��9�=�	��������78G�g�m]��L����g+��S�F��'hA���&������87r{K.!_��q9���E3��I^8��8:q�<���9h�&���g���j�/5��,M��t��i�V�n����u��k�^���^�"T���bZ���{���jnrS�z-�a���9��l��D���,sje��H�A9&�����#�	[��9��G��]�R�!-����6�5T�X��	G<"5�7uI5�w^��tU�p~Q�U�S'�BQ�����H�-���s�����z���&P����eO
��)����������������3�4�sZB����$�(9���(�K���FY���R����M=�����U����eJeb��&�)1��@�v���i����#>�5U�����]�&�jo�Q3�����*��QH��^���{�a_Z.������rp�p���	��;^�����������������A5#8�UT�pj���E�/*'mU�,l|g��V��-}F��8���]�]���^a^d�2/u�,>�Z},��/q%���,7�h�;����4I��-��zTHdt�(9v�j�1����!��.o\|�m��������N���D��Z��'���6�O�l.� lG���W��+��r��I��w�tP�&v�P�(|gJ�d�s��R������4Q9g���nw�1���)����L�
o���Wf-��dZ�fMrv5	�!��2��H��[f����l�K�!�N��'��O����A�!R�;�x�1�gQ�9c@�qe���T���I��E�9V�w2e(���;�T}���/����Pb{�JC��F_��2#y��s@f������������/a�wA�/>�������.w_A��r/U��r���]�>_I��������v�n������X����Ja�,��]��FIj	�]�>�������*����z����J�2o����m����sZO;4�h_"o�������<T�����6�;6P������;��.-,.�w��N�r��������2����������{�wy�?��W��������t�k�]�������,������9��y�Ry��f��7�����w�=��v�M�9�2�'�#��o�Ui��9���n��5s�SK%��������R�I�tqm��
�"u�U~�s�<4M�F+R_3g�3��rzS1s�����9�/���me
�����w��s���s��
np�5s�>i�(�AM1������q��}�r���VO�g�9����P�a��PD���.q�'r������g�W�He��Jf�Qg�9���N����]m�����E-tf�/����D��s�s���x�T��K������:����u�A*���E����dq��W*U�@
9�D�!`�18�T���s�R+�S�*������������#W�[p��r�A�d"�J5������M��?��M="S��}�x�UR'�]�L�Y�o���������P�����~�+��.�5�>���:|���&#+&n�z]��y�����������9G}9!l�Gp�r����4u|W�*���j�RmP�Q''�x��ooZ??0A-��
�g�|�F3&���R5m�����G!�-�}��u��jc�R0T��\$uwo���#�����Ae���F����z����K��`�t��������)���T��(�V?zq'1Ki�xv��A�n'����t�Z�b�Ai�@rzD�����.���Tq�=3�/������+���I��G\�.�z�Aq�X��Q�{L����,e����c���},�Cnt�
����L%O;"�9��z�$n"g.�-���������S����-�|��d��JOU��q�v��r�4.���p[�f���W�����D��G�VC�d����f������k������h!N27��%�{����k���?pN��=0�}���,��(~F�U����tF
�������Y8/�7������y/�Kp��_^�f���OO�����.Y�[X�p�SVs�j^_��+}�����������[+���3^�/�q<��*��~�g+�F��t�jnO�/_���b��*��������S��%�6�j�<z�5n�;����k}B��K��qaO��#�����@�G�����Q�`@4�P���XC�^8�W�����S7�	R
���8l������
���K@X6m��:*i��{oo+��`:c!n#������4�{�9�����B�n�94#����!`�Y%��0����|��N:l�.h�� Dl����Ds��S�������^O-���]e����g�Av��
b���[�7vs�0v�����~�&���W���?��6��ex�O�M'�=������-�:T����P*�ie��H�R����MG@��m��l�Cn��j1g�H�S�z�e�������A�w�/_l�sp�w�����c/n��VZ���Z��N:5�H%���pl���(� �Dn�����9O��[�����vH|�Ek�d�B�����%elAtF3����ew0���+�/���X$?����CE��e���C��[V��U����m��k�mTq��x7.5j��]T�����u>��UTG<�C��J���M�b
�	����FLk}��"��c+��U5�1��u�U7���]_P��m�^lG���6�Bp����KMy�������2�D��lT�Q�����8�#RiN0�A�����|o*s��Zh �*%]Y��~qK/^}Q����7Uh>&�&u�������_T��s�I���:W�:�P�`T���d^��K����Y2�BT����\�8��k�8���h<��r������q`��mD�m�/7������;N�t��m���r:��/G<��%��
�p������F�RY���5�N�����W��e_r&����r�Dq��P�>����!�nb9z���E%����Hol�PGJ�����Y�� f�)f^�����^���q��(��#��+J��K�]z��
���|��J[�	�7u�H��;bNF��_���R��H�|���ahG����m��l u�
���!����b����y������b���������*����9>F�v?�"�y9A�l��Go�35�gZ�R���4.�n��,�������G�)+���"J5R�j|W1�~�;�G����F�rL�Z4T�E�
��AQ��UP�����4����\4&1��������#�;~|����]���#u��$8��	z@�G�������X���!��"�W��Fn�y=]A�����������z�K2�R��zQ���y���7�K���%�zh%�A��{�5�i���R�T��c���c�p���=#�W�+]n�y�:��#�Z�/��C���q���3��/��a@����nL�����_j:��}���G�]'w����1�������
�o���\��C�/Tw��m�jh���n������6��A
q1���c��~
J�&�U�2��TMi���c��`^u5���)�����:������1���m_Q^yF*������_5t�z����VH�^�:�k�����G^/�=����,�P��[��xP5���pN��a���I��p���
L��c(}0
{����v�r��V��G������I*{�#�9yo�H�"��SP��:bc=���������jc����i}F��]�KZ��II���"'q=��R����q���c�%'���MP�b���)�!7�
'����y�H]��W�%R�~SK�����������]kM���Ky��E���U����Z��H�f�j����PzS�CsSJ��/s�j����r%7K*�9�h?��4{�$�6'�W�F����BTN2>�-
4��*i����|����U���t:7��wr�H*���9�2��~-��>���R���[���2����)��:�u�������'/���7���3������sY^��X����4GS���Xg73g����l�k+/���;����/Hj7wZ�Y�po����d,^�����A������As����9�*�pVmzQ$7YE o��
������yn��	���v
�����`�
'gj�ih���z�m9C���4�Eh���O��������[�d���j�����}�����5����h�Wk�|)���	^[�&������r����.�)��J�l9,�
�o�+��P��|�!������y��p�/�����+����Z���0��_��y6���I�1^(y�tN9����>���W%Sg/(o��)�P);O������?��8m0�\v@S�
���t��'l��[��@3F����n��@~�|�O�R����2��_������Z�b���G�*�*J�*l(��w/*;�Z
�Be1�������C1_?�mD�x�����_�M����K��.�����?�e�hl����hZXary��NOW��y�(K���Ke��������A��V���~p����r�����7PB6�Q7~�x�p��b��N�bc�3k��`E
���c&XQ���MK=X9�6��y�vo��{��W=���W���Q��zN�}��fOp��(��_�k�g��@]g�
d��$@��G����c�L���eA�
�Wz������se=z	u�U��Bw~}b�Wgu��UG�XG
��C�m	�:v,����gN��%�o��D���k{7`���+yI��_���!l����#��������W�w��C��]������0��J�|�8��2�9�c�8@��7��0�`w�-a��h��
!pe�Cs6����!���8�C�/����
1��5wA�C.�+#�@�aUN�F��&4 ���7��t����l�����/L$����r�����;�2���<��1�/P�HKpp�)�N�S�>��dm�
��
m��,�����*Zc&�5B�1���c�kw�5R��s��8)����L�Z���7m�0t0�@R���#���z��W#@�2$iM�
�`*��Vc��U]�
�iv�[�e��v��Z�U�(�i���.j��^yN6���hj�mD2M��,00�6�����q�~��� �=��x�c���?/x
�:]�K$5wmy��Y����R7W
��S���iT����,�}�.'��W��������2^�>��~H����!|��"����H�+@��H>7DJ����?���������m�=G������[������?����S~��%?��������O���� �O��=?	���$xr~<C�'Ai�y����_V9�+���$(�����(O�������$��6���������~�^���������R?	��������I�V{�o�I���'A�������{����}�'A�I�W�o�I���'A���C�O��O�������]�Ta|O��}<	���$�i>	f�O����`��$�k>	����?�����c�*����'�S�'����q��{�~[���I����*�}�'��I��^�������?���0�y�)������T������}��<��n���^����}����
���?n�<,y�������{���~n��������k�>�>r��Coxi����V���yD������}�����xU(=���P��\	������!�:�$������/"2@f�1>�>�PQX,��e%�@B�P=T�&�cE���`&�N�����fA���thF4)�zYS���
B�d�����$B,qM*���C�!�u�����QW(
�
e�b��A��|O�?��TQ�+T��*M���C�ah`�P�h�������������!�8f�M�L�L���:�=����2�4�0�0�fLaXidapa|a�i�a��\�t���������������K��r����\8[�G���h�����dx>[��P{�[G�n��~~�I������
D{����i��L�A6��N�����q��}��Da�����ti�����W�^!kT#������n���D������w���c�m[$CC��M�Z�;�9Ous&�M=G
oZ���I�p�����9��Y5��P}[���5�Fg^�.���K��V`��v"-[B6r���������mp�9z�������w�J�{���R�C_���Tn9�E�N��3$R�S�������2��\:�n����m����2����d'��+d:��nsY�+��<�g��t8�=����@�=R)~��A��.{@�M=�}��e���������/*�����By���;�RX���2Y�M���	���w�v�T�������j7�
�rj}�Dr'�{���QA���H�
dQ���h����G	[�qCE�o����=�.�k���5R�z�����^���Y0�H����5y�Z���f����V���xh���D���se�x��t8sz�(��;Dr����w�F��h^�\-�n��z��J.wD���'���k����^mP�����R�r���+_4Mf�m�#�����~�,a��XT�qC����T���H���q���K�7i�Xow�Gc1��o�����?#��X�f�����)�A����z�Rc��|���X+"�q_+
���Z��6_�y6�p4�b4qu�\�-�6g��[��"u5.�8�������gx������5��T�Z~S��5�A�&k�P�|{�A�_*�i�5���������W	��r�i�s�9K���G��V^"��,���R�+��*%�W�:]�w��1*�[�rq'���2��s���$����b�����=��d�Y���U��z3�0�-+R��+ly&i`7}��g�8��09vj��_R���m*�c�j��m����MWP��Tc�+P���m��)�G���q��g�QT�UlA�D������@J�������L*R/*���(r���Q�'�_�G�WW���U�t��uP)W���}���97��)]rDr<�M�
Tt2��`���H�����U�1#u��@�+T��:�a8_*��L����n<���U&r�m��'ZoD��`
0��0�5Dh�N�K����e��0Z����5%�X��N����g�p��F��+
0Z��a�q�)+�`���zc�i�%+�]��b��f�N�b���n�5�x>8j`�!����
?c5����ml0.u5�`4�t#-k���j���w�pm��Q���}�����[l�I�e�rk�q������4V��m�U�oN���i�����;���o#��������yw-�����3��;��h���]���3�1���n�y���8|�qZ���E����Tq��H}�>
��9���R���Fc\z
0��@�@
�~����6���I~E\1�,�YU�`�+�v�k�/��wZ�������7������3;~7{����w�YU��n�������
��)}�](�����;��KT���1T�%��9��h���,B�TNmL���h�������n�uG�	����Z��+lR[~S;�|�N^=�pST�y�V��7S��E%�P�C�H*U����1�����E}��!�z�"��2:i^8d�B�E���|�������w�q�C���RY��+N��l.w����m��'���5dw���j�Q���������|�Ls���l��"��3O�<�]O>�To���6���d��=z���x�H��W�S�-�4�����������Q��S��4�<�3�-���u@���@��R:(�N6�����_��3�-����Qk��)��t�_�}3�V&����x����lT���E��~��X��P�����2D�[������}���(��O+��������}(O���im�����i";�_�>��������]-������\��O�p�����F���q����w3������r8����A��z��ak�+��.���e�#���M��>��g1�)��i$�.��yM��/=U��7U��'�3"(�#h}c��f���fs}<�����E��aM���<���s�b�}�������HZ]�����3S������HA}C�m��Z��98����1��/�H,�5�y���Vr��CxY|��$���D�%��y�������5[�c��\��9y��7��]J�ipEV<�|�S��4��g��&��v����i����O���l�Kdq6t��
{��T6��I�c�5�h����-]�>�^�����+{���<</4��)KgVxn��Z��]���vs�a�ni���?��l�>����	S�X��p���M�M�-����=�m���wn�)Y6A;eX���7[�$rZ����Q���n�o����W+s�\����K*0H��i�p,�������������J��Jx:�r��|����\�Z��+�fMd�D�s���J�W�K��W�D��p���!��<�e�I�b��k�)#0����^�V���`[9%xv]�h'_<�����.H�ry:
��;�m,��f�a%�,�t
�T�Tt1��[z������=Z�wm�ao�g�q���3J�D��s�Q��b�P�4�d���(��-�"���p�5�k�T�V��
P�'>�u�)9L.o�,k�,7��M�:w��b����)p���JU�||�e6*�����Z_%-��U������;�n���,�;dY�+!t��x���,���h	>L.���	��&�<RI����v��F��p�(VKi�6D�Y����+���������0F� w�����$���_6����4�h&��*�����m����!�����Q{����k���6S��a�e������R9/-�����ys�m~�6�g1T���C��8L�����&��u���1%����,.Rr�;K����vN���)�����KC���\$u�1d��~=C�:f?C��4�c �J���F����k<\����@��hF��]��9�3��$�MW���w4aR1?��H7|=�m��)�9���_=�����C���2*�w��(<��+�rv7:R�H
qu�s��:n�y�V��`���SP��4wG��zn�il��&v��F9��D9��=�]����'���J�aT:��NnO�q��n"��K J����Q�"�.vY�K�3K��~�����
�������)g�V���%]�RvHc�zLDx�
�S����p�}���b������t�r�������%8������+wv���yB���u�)i���Z��]:G�
�J�ZNA�;���Zs:��� �b2���kg;�6�t)-WODA{'J)4��u�k�C2+j���-�m����)�x[��mt&��YB�?������/z��+w���vQ�(h";GdW�
�f��us���qwQ�6?u}�H��Z�ES��f��|f�Yr��b�j9�A�F.���aav���8Vq[�`�9��"@�T��j�j�����F2J���]�����O�B�J�����D�L��EmskX:N\��]�#�,e}s�(;�l�b�s�n��f���f<��6��x����|t��&�=��l�&#(7�NnI��/��+��j���o��Y:�]����g���/�vU��������Q���Ib	�M�tS-l�m~.%_����vw��%�������*��EXW����lXG���o��W�����������?���d$��b����)���1.E����)���%�4�x����gr	i���,[c>n�
mQ �\P��dw�uWM}
+n�l5�V�����
mv^�����O�D��!c�X���<��k�h`���V"mM8��A��1���iqk����YV�^Q��u�U@�<]����r��=mUaZ�>��������f�3[����������=
,oYHKR�7?i����o$[��H�����'?�\��Hk��5��R"���>�h���K�_��i�G�rU�_`�s�i �(S��0	���DY���V�4��*M(�����m2.��gn�#�D����)���KE�4�R����`�K�{��$U�v�������;;MR�Si��4�_�'��%���w@X�LzhQO'�v4z����<f��2����B���<hc��������t;�Rt�*M��_`�h�ZM���������i��!�Y4)�_��p���i�M��V�Nu����yAy�,���������9��X?��8g��A^��)���I�
%���>s�t���Y�n&�����1����rQ�mw�:����$��z�c�,��z.�d-
G����M���4�����
��1��2
����&���

��|�Q4�0x���S
:�����xS�>��~l�y���>��Ol�X;N-�x_�'V?�.���GQ�M
|�O5'��a\�@���1d��sLz�<��4#[1J����`�!�vE\�}U
�V���a�a�s�a��3+��W�G9h��B����@	b�8j�hP���5W�!�����v�bt�������]g�;h�v@��7G���; 0����b�����5����1�J4IkSP��W��#�E�5�0����H���7���+]�{G�C'�;�L����@��X�FwP�4s�����*�Ds.�Fh���-[��t�S�S�����5�o��r:�<h����`�����(�/2v@��e���(��/���~�q��"��"��~;�<��"��5T��k�5�kP�I��(�Xw�m:���a�G�D�A����D^�_�:B�Z^y��W$w��$2�0��<���Id��Id�����Id�\��	`��L"����I��F���Ep�B���|�s��o�w��-N"�M���h�D:��D�D���Vm�I�W�Sf�D���D��	���|M"�����m��n����`�0�������Id�a�'O��&���a�M�����&:`������H
��0p�*��D:�o��D�t�N"��EK����4I���;����k}x��A�v�����[�K�V�6Z+�a EZ��1Ot�m�\�00-�;��[�0���y&�9|q�T�)��NkZ���#��a"Q_4;C���9U�]iB�~�E��?Kxu�LL���/�m�kc�R*�>i��[,��>��X��-/���M���z��o���b����/
��r��[�u�X��1��:_�z�GW��m�X_-A|J�aR��`O�'���K���0��nu����&���
i�1�<0ypx�m�����?�	.p�W�,i���R}����i�eI����7�%�^%�w���R9���r�I��Q2G�>�&�,�}���u[�sz@.������6@��M�E�~�V�2����xS����V���h�e3�3�$�=��9��5��J�l�����������q���Y������dd�nw���g���K���vz`�f���f����7��!_�� �x:WMr:��0��8s&�b�Y6���0 )~�|��X��5��x���+w��f���Vo���O���B@�8g'�|7�8��������|��W	�q'%m8DI��-�/���x��9�/��/����L����i�U��h�7?�x��G���������?�O�;�����T��L?^�F'�xF��['�������������L��7x:e�!^LA�3^5��_��I�ivq��Ev�g/�r?h��i���q�����?c�hr�U���9�?��k��*]"\��C�T�D�X�3�7��e�d��
�-���H��&����r��������y���� Tl�����+[\�s���Y�����`���+(/n����DQ��2�5��\brW����H��dD�,-��|[���y����g+�*��������'�y`��R� 7�E��0����/��2spN��9dQeI)����7�|�P��t]M�g�q�����?x^{�Mo�����o�N���|qg��ma���A��mW����MM94\m�e��&�EZ�.3�����nA�d�I1�q�y�^�4�z��,�]���i4�m���E�������[��=v�O%���%��>.h/���G���Y[�[�H l��N��,V�b��8��SC[&8�=p�B|����j&`�g�Y���=4Y���1��Q�@s�{�PNb�������J.�
U�@�Y���,g�C��e;����.cE�����|q��"x��� N<�M`����mH��f�Q��hc�!]C�S�)��	���\:*/��9���i�|�4tD���m��\geM�O6��?�I�gg"�1��=���tI���g�d��F�S���\����r�h����]@���'��Qw���&��]X��4i��u�Y4(t�pCpb��cj�8�?51!��'����M�I�nz����Y�T��1W�h��l��C�N4f����G	V����h��/���@�W��v-u=k	p�D��[qNtD(�������
����HkW��FN�4r���N���'@��6uTS�8�9@��d1p��^�A~�����#o���zA�D:��q|�+� ��%H0��}���:e��Y�ydd�Z���yv��w������0W����(�����@��E�*v�:Hal�5���/���x�vh�i�Y���A��c�B PG��@	�@!(��Q}�y(�(|(���.���p���Zk��T8�z��������f	��Ug/�p�9����N-%���OI
jR��eYC���{�Es��Q���,v���(�a�U��M��090�S~�&5�:^4��
Zk a�wnj��a�19;%m����+�\U`���I,<XB-&{��#z3�
f���������Ib~�r~������^��9����SA�tjg �|�����\OWX

�eh�p���V�9Oi
���
�kB�<��Mr�
N�J:z��;R���>O�
��$�����-� ���|\��fO�z7kh|�f�w��p3�-[!���G�j	&js�K���h��3O�`���#h�6~���4	�����W����mzA6�����Y`���>��ie������_,M�Ch?�Hu�Z*H��7��a�T���l�4�Y6ywW'���Hsu�uA��^�Z�j��������b�f�-�K�x8��`��+��sQ��8m�p�V��4'v��g�8�PN1����v�`�����%��*KM��t����H�Mr�(���J�aYk�,�L�S��tY��[��_<[��9o�af�0�au�����D���
�E��(��{�cU��ts��\)�V����h��8L�����0���G��A��9�#���6t�P�"Z����`������������yAZ/Zb�L�/65���:`���B����0"It�K"��
E+gK��Ag�M��		e�a%r�h��tEM���F���T�qE��4"U?�n&���Xo������������>�!��R��#m�^�MX���X�y��6{�����L���
<��
�O��{���s0����������`N�f�P�48��sg�d���xfz~0����"�����o�8������7�a�+U��+�#�~�f���>�)����?_G"S���,#���h�[�Yb���
ZF���(h����2�!�~c~����7���JP��qP�t����^���E�S���5*r�5��(����;8M�s�����K�����N��+�L7W�1/�8�R�8�"2Q�s�����[��\��P����)�G��vC�,G��%�;�;m����V>�nr�nt�t$H9@����k���2@K=sB�.�V�i�7��}u�1��y�t��h1���?��N����<�D=e �||uC�p��s���!�J��ia�z�3(�R��-nY��f����Y�i�N?^���5�J��&���9��7���
���� I�e���m�?�y�H������kl��!A�Rz��(�����(�_��m������������YB�N�n��%r� K<�;9�f2L3^�
���|��z�<e�M�#7y��r`#�U^x�3a�r�������Fy���\Kz��}5�C��X�2�jo�
Y6J1%<%���[������
��P�(vm����_����'�x\�z�i��W�]d"��4�{��(<�F�F?zs��8�M:�V���-�Q�y)������GD��&���`J���[��?��W~��6���Vn��:��;�=����V`�5�ueX�T+���N���@q�7Gl���#D9�]�>���^��;���|k��,�T����IC?��e��~a����Kcipb���<�[�UO3%�h[�Q�e�4GK�����tO����������M#uFnI�����*�!��@.�Y�qA��7��|yRbo�V�;�U<�e�=���KN��gV/Y#���9�(����c"���3�����A��P�K��7��%�u8Z��S�j~�1$.zF�%Y	6i[�1���,�o�}h'��(K��Tg�p��Ki����������-�r��_����b-C�4��������N��m��J��M�S}���j�����Y�Nt����Cn�U�}
�84����U�[��|
�z*R�MG#�O�on��a&zs��'x��{a���C�e9o~g
�"egc�H�����$>Cb������9|�����!�d��|u�!d������������������X�^n�z�:C�.�Y�Eq�������I:��]��Ax@?����8	��5����JC8
��Q����:��?����-�<[j�����w������=�������?�����s����=�|�7�� ��$���� �O��#?	�������m�y����_Vy��(����|/O���<	j�O�Z�����$��>	��O���>����y���?>t����I��:��V[��q{��/������~<
������Sn������
��x���I0~�'�L�I0�|�6�s�sV~��S���<'��S��x���O��O�[~���q>������~���������~���I��'���O���O��!��O�����O�=��������oO���_O���_O���_O���_O���_O������������������##O�����C�O��O�O����������N?��]�~���}��$�{��$�{��$����O�����$����O�G����<	�v|�x���0�T�)�����I�����#���T=�=M���4����������Oa����<Ux�� �E$B��2�G����*
��"��VtT�UB�PUT�<C�9`���`,���?NSx����\h:4#���M�f�}H (�	���!��A�(�K\!	�F(�i�7Dbo*�q�����A��X�dP8*�S��%U�
�55~]��wgxw������������c��D�\�t�����������	|��!�HC	�	j���F���V&��5L7�8L:�;L=�>��>�tm�qD*�W���N�gg�	����X��H�g���=�����J��h�H����c�OXb���`|�6����[���C������{[����>�h�k�?J�"�.��
�zi�~I��l��c������n��5�n�B=�y�{)�J{�{��`d�MK!]U�^_r' -�J��^�V�Y���E6����M��&*+��t����^��1x�3���buI�V���$&����
�
�P������
�R��J/�!
��%�"#:�@y�i���<Myf���V�5��e���J��r�����j32��"�+i*�kA� Tn����� WSx�qo0�<@y���z{�y�i����eF�x�������w��[<�+���H�����\�fy����n[�=�X���D�eqZ��Kug��Z	H����+�mM�|�E�vd������\g	 i0��|On�U%�U	�/��no��PO�b�i�M�1����H���=l<�%#�+�3��7����z��������d�U�M��3��P�B6�`T�P��0���?/��Ekhtq.���j�����K�Ab<N34�A����x��<��
py,�E�`�s�.�
B{�l�f��Z�5zvshM����W�K����M@[=	��:'�r��u����2���_���������*k��9��F��_(�
����������W��1�m����to���/7a�� m6 M-�}�+�&C�Ox���`v�,vx.��	[�C������K��i������{tM�6���D��(�����l������������ps_�6��d���V��?O���tb;��O{U��
����=]�J�������9�/�o9C�yn2��R��=�
��~��A5�2�}��,��Ln������;G)������9(��)C�N�\\��?��s�@��:?�Fdk�Eo��]��R�2T�|ek	P�"\����G�r�2SZ��$�0����a�Kve<#_rP@*C��g�pe(�Z�h������S���J��+���,L����r�hnk�
�P�������PQ�-�+��A����2�-�2���o0�2�-���J�����x��{���	7���^x�����;�3xO�~���7�"5�K=�����R���������>p�xb��;����g�c�N��#��x'i)�i��kZ/Xj(�UxYr����3�����wS��~~���_��~�����f�K�X���#E�jH���)�:{U����dw�x!���H-�hi��?�S��>^Z��/
�^|�Prjs��xs�=�}�X�}��~����=���w�'���~�;h�e�����h3�����M��[�!"���yAk/���nkq��d����j��`��(Ye�)R����5'������2�jR�o����d�qv�x�s}��W�|��ol�_ft~t�#�]�u=Z�n�/�!���
;[��h04���\�)j'`Yj��7
Z�B�>���/�0c�w���a�T�
�F�]]��=�0��46�W�����i���������2	uF�}���$l�6/��3b�g��xN;R[��\�H���>���T���i�"�Z���^�%�����*2u��t�`dC�vrlA��������@9�������f$�H�{%��I��A�KQv�Udo��<#��&�[�-,�YL��p:�uR'��^��9
�5U���&��������`�9�_��(��
7��wkm�`�V����?
���5q��V�.>��aC����
x"��-a;��X^j��<�y�B{���5���	�!��Sq��&c�F���b���7�.���Z�k���&���K��qN��7u1�
�3��
���3����,��;U��R��H�Nj��:�;��;Z������y[����8�J����%)�N�2���c����������YeR���R���)K�&���2���*l��%������<����v����y?����������q���L(qF�����3�dd�?���@%���v��/���
g��_����q|?'���b<?�F\��������B��eDj�o*��]��KV������85���
��Z�x����~y����1������E������|�:�x0��qx�>P���]����u�r.o*��:� �=��r���^�5���s&��Z�$����b}���Dj���VR����x���X���R)��c�����&*����`�����LX&���>oC�����;u�����3�h����Z����/)pel��B���V�oP���}�����-�6&�1�)UR�H	.�\������*FL�I������z��?�����W��i'Z�8r�h�Ve����o��}�A�����[�����}���J%i(�U��!w�U���R�����T�����������@������mxW�6�&aC��Hq�qkn���,3��>��@������\�����tG5��T���-�qQ#z-@=�nH�Z�������f��$��p�^5��'`��Z���MMn�����3��������;�P�����u�������4��&�q��77k�r�(�F&x�;�P��?����|i.���������5 C�.�pHG��
$�#��2}��1�����|I�$����	���.u���:|Q�B�"���9,B����F���4��r+t1��U���
��	(G�y���Y�9hU�mq���3�����`y��.���sN���o��QvQB�Dj�y/Dkx�[��(�^���k������yY�z.I����G�=b�+��5�=h���6'%�{$�;qj��f?cy�����O��k�bD�yJu�)��S���o�����An9h���b�2R98���C^M,EEN2-����Rs*�P���w��?��,��W�?VK�<��W�J��2��>����_�E��B��%	b���B�����>�l���|���u�>�4y@8TZ\	<�|���k^
O;
�jnT�r��N�\V��/�����>���EY�Q�BM��v����~��=*�&���wh�����?�0��!�N������@�u�ZH}��~i}FToj_�,��k�)~��l��P�F����d�k������,HN�Ej��Z����md T�"� �#lcl!F59�����+��y6���l��b�V����D;`7����&�6�H���.,v8�lG���EE������5b������m��+2����H��(�&P�����e����U�~9�U��c60���9�W5'G�F>���^U�1�l�j���je���QV+���;ip���B�")_a���i���b+��R6��b�
�cW�i���0�b�����f�5��������\��g@kEjy��w�������L,l��@;�������n3�&�B���:�����U�~�J�e���.�xP���Z�s���G���
/r�%����6�8M<+�����������ez��\P���x���/�P�_��w;�lG�#�6*�~�xG������6K��+P����R,�����Wx��$�6��?�1f</$�8��Te;(�S��G<���yQ���R<m��8�6�"���'D���2R�|� �.U.� 3��eK3���CMQ�q��P���eT$�&g���?����P��JC�3F�T�� ��`�G�;�>.�6��HR������GGd����}tl��
;�w�d���;�5w�Y�����E���S=���8�`������-c���.��GG���}\r�&�ql�9�[�������Ud>�,�����Pd>����d"b��
FToj_�,"�SsO�����\!RK�<|~�����,����o��"��!�N]te�TZ����f����)Z�K`�=��Y��Z�Ti��g���i����]�JBd����n*"��7�QvTn�2�l�V;�K����N]���5/��y�\�E]���MM����j^h�fS3zi�a8���l`�9/��/
����5��2��$bD�������t���]�=D��/�f��-<���J��U���q�Tf!�!E*����
�cW�g�N������;��@������	��5��8������q�������o`T*��be��9�yFj���l%C�7|_��+�W�x7�:#uHIF�5w�.��gK��j��c�aP-��8B����^m����2l�W^x${V��(a������.�7������F��H�����$��K\IE�\Vd�1�g��t�i�Bc[$9\������r6<���{�8��w�P��x:�g���tU�}b�=���1D�J���k�;���Q>�:��`W& 63����oq���V�H�`���3�z�5�Z+���R+��gZ���i���OS��L�ms\��q�C�fZk����y�'^a�uq�e��6��Z%8<�w��5IU�#����3��o����Lky�[���fZ���`�%�x��V��a���1�Z��i��$�Rj�fZ8����X5��IY�n���t��nD\b1�:����=F��w�Jg��~x�������'�-����X��������`������9E��%���=8�H��m�r�w��|%���P�����	5���^�����P_]xQ����=��.����,Jj�nW�*�����������������6���MK�[��{��t�e8=0
D>�������n�$�������+���@C
��`_�q)�����B��Wrv�w_����#�N7���{�p�����z,��=��t�{�n�{�|�;2��3��w�87~Q�9�g�/�L��zf����W,�������]��w�3��Fx������\U6��w�g���'��9�.O�P3�l7u�T8x��]\�;�B��*�|�s���������Y������n*f�o���9�/�z���>�cR�=s�=�����d�#��_��P�E%�_�)��2��c����y���v�w=��|��d���h�9?�;"7z�r-dH��O�~G�UH�5s>�T�C�3�=�������~`E;U��:��
��:J�5s>����_��K�����;���G�>7x�o��p�hg!P��,��me���_����T�2�JVs�}�Vp��Embp�#��~^�}a�E��-E*�J���������y����=��XjU�
���9�_���gr����gr�x8�4#���I�AFd�z�[�uSg�e�ZU=�.zQ��v�����|�#�&���B�wf���V	�#
G�
3��.�W�\���
��������q�������1������q�<��_���F3�2j���;�_'�%u\5�VQ�F�h|�6�yCe�u#��_�L�y����r�6���D�M#W��l�!`�aR5-�(��5U���L���S�oK������8i�@6-��'�^�9c'��j�(�H�0�����Xj#C�fgw�i"5n�>��7�����f;r�e��5�Y�W��T����8KC�vh�c��E�
}�V����\e7}l?|�z�a���t�(1`�{��%��'q5s}i�����eem�hE*�eK5��@��e�O�,H�n��(�$�%��{T��1��
�4s]J�y��������
����a3��������?�&~�G�Xw�	fb��n�sw�r�<�����;��-w7��"#oL��>�\�W�������N������)������e���)y��r��3S�e'F1��\�)��9$Z�)�-�2~a�������>���H.L>\�����|�H�m���z�?B�[��1	��_���}���q�1��M^A��� =�42���3s�/j����:O]���We�OoG����[���6^�?�b;�U��{0|������P'��H]��s����}<��c_*������.����������8�0\'��<.��fB]IP[SYP�9��i�e����A��D��6<�pGF����B
���vj���Q���q1^��D�'�v�������S��: ������Fn�y�G�E�:��G�m)�p:�w�L������C
E��;�� m��%/��!�]��a���R�1������O	�C�Ni"��f���l��~��_R3�1K�V�]0$|;�|���a����,x��p�5s	9hEM�#�e�UV�A����n����/�6-���v���>��e����[��'�:z���Um�'���_��O�����j�<z���d��-~�x�]�F����>E\y\�'5��2�KjD$j�+/5��@=zQm�.�Fi��f��Q�����V�m��G�+���E�\���A�z���'7��A���c�������)lb�e]Q�E���Q��Z�lF���)ks7D�]�c��.@E[����,��n�wA�K���'�:9A	��Q���&��������sE"d�>
2���"W4A%�#RiN�����c��|oj��:i $�cG)�~q�a�9����VtU����PV��	B�� �u|�A����N�����$����gP�|5�l�t�zL�����l-��iw�����hW�U<���3����?�'Ej
�"����{,�9�u�"F����j������g@<'�E��Y5��v9��v��Tu�������51��r9������8���&8�p5m��2�!��Ow����d���v/����t��r�J���
3��&+Z����U���������
�sT%�r����K��7�G��Gu��;`s�d������v�j�r�����K�')����o�Cs�
�������
���.t�.�cC���b���e�Q�:��������w)+5��c��\��yu���<fx����R���xu(�n:�����������:�G?������c�\;(L��j�j�~p[~`�����������3AX
VvH���1R��Kq7�k#~���]f�fL��Euep\�����>stkG�8�H����@/�(��C�0cv_����N���{�����#�;�[��]y�]A�;��s��f��]��9��v�U]T��c�����Y7����.�[�J�s^�yM��fX��&f����t����#�;�������5�^F�����tzh���G0~���!�����:>[����:O]-�����nL������:�1�������
�[������+8���k,-X��-D54y�R�T7y���-Mw�����K2.�)�
J�&���������j���u�8�������%P]
W��fF������5z��Q
��J5t�z����X����O=�kVu�y=�����8��5R�}S
2U�Q?yX���+ sl����W��KkA`���tJ�����K�y��i���^���3�.E�'A�Z>�u���K��&�T������.�xA}7�(E���N�/�[
:|z�=h�;(N6\fpT�M�,{EY��Q������f���z���!�"j�e9�����T.bt�J�D*�-�,x�-��_��u��� �gZy�����fE����K��T��n���,
��Z0*47�Di`��,����P�+�Y��H��1���.�%���I���h���L���h�(WTK<ve�t-j]m��Ne����F�NV&.:����~_�;8}���tQ�M�=��i3�������U���V}+�2�������;b��n��_T�2�=��RU�"��'#F]��_�Y�N]f��K��R��v-���-U+����n��8�����q4����J�f������l�s��0��D-{�~d&�
�8��z������I�]�{b���/O�M�>����d�W{3��u�{\�����	��S9�+����==J/���Z7uP&�F���U�DmB�~�vy�;���f���9`/:��������HP��^��D������J��o;�=M\�z�C-�"xp9u�{��:ux����{��J�j�$����x
)Y�bL�u�������[���_I<u���K�z
��6�d���,F���
�_jQ�Q��!����%�_��mA������K����C�,��$0�����Zz,[��L[��"[�������0��������9�����R�'"�(��D��Q�;������9:���%��E#�o�D�1�(G[�b���7mzD�����s��-X��=Q����{���oh`���t#�u��m;�b15��O�nHw*����z��5c�\�U��V9��\C2�S�A�Fj�@�������J�9����].��v2�{��tJ=9U��
�3�����������;R~{��&�\>�_���'��uUf�q����r�;7����lE��$YZe�9���t�K*<<5li�h��������lt;���3PQ��n��Zd�z�w��;�������>jq^u{�z�}���X��;�_�������S�2U8T��q�%������:W�a���X����j���/�t8��i���#��Q��#X�>e��1�;~���{��R���E����^��4,�l;>�PF��0��^�&�M�Rw4b-���\e���t�R;�>��n�c���C��������04��w4a4gdaCI��;R;���p����_���f��}��`�n���w�Pv������������NMfb�.j����U�k)/��6pv�Z���ZS�d�7�S;T�p=L��;�>����2N���������.Z���kn�u��y�5��7;�>��S���h
�K:�f�~�7-D��.�x�i���j�j.w�[�(_�n�d
���%H�*���34f�B��Q�4�z�\8�([ 
gZ	N��(ICPT��S���er�����T:�nQ7Z�����VDw�GNn�`_�u16�7'�$��;J���z\��yGW�f���K�m=f�5��Q��x7�d�J�ws� }��9�~���r7�J��)v�'���������v9GwJRI����{�d���]i=��������W���?9��������}��@�)�W~
��)���@���O�O��7O�����2�����{���(O���<�����>j�O���S�����>����������������V?�������;�S���h?�S��lO���=��?���?����?��O���S���O���?���x�xZ�xj~~?���k�]?�S`�O��k��<���f�K;k>��������of?�|������?�] Z��{�(��zT���@��^�m"�,���p���S�n���z���������O��V�6�W��)����\��
+�<�^�����g���������S�S��������������]�~~�w���)�����<�������?�~
������#~O�GD
�Z���������O��KXO������U�����n�2���Oc���u����?��X�U������?�6MDs���������6y�s�(2
3�X07����C����a1��L��s~��CA����y��n��W� �KQ�+Eb��xC�!���B�r@Q�4P (��
G�{��!���B]����Pi�7Tj@{�`�F���F����k��D�\�t�����������	|��!�HC	�	j���F���V&��5L7�8L:�;L=�>\����o�#������?<�g���x��ax�A�wA|/�Jy��#���&�D/u#���9�����/Y ��_�l����N��k���~��C��CO��G�|G���7<��r@�Q�T�/�q1n4����.��|�����iue`<�7��;R�
/k���f�1n��s�m�]��]�="bh���@���k���%R7z��;a��|�w�#��(�:U���F��K�.������
�lG��E�+$�8������m .��d;��9L��c!Y�s�T��o>��Tf�q�7u���%��N��2#�a�MkkU�T�y��������%�(H5������m�e���������%���TF/�!46�=��T[T���2�<K���V����j0�<
�5w��+I�x��U�&	6���&P����4�����ZU���������B�@-x�;��E��Q`�&�l$�s��
��
��:n��TU�\�P��Q��Cm7uow	��[��%R�e+^����x��]Q�k������<e��E��F��1{�T4���|�1��>+���Z�$�����H�
t����[��I�w&�iy7�y9�j�w��/)��HA~3T�$�
R��6f��t�h�����0���|�4-�����?����Z�����*%��t�U���)R�3lnfw~�xB�Q.�I���������f�������7��f�����=}��X�����,�e���D)s�^9Z=R�Z�S�q���=O���k
x�i�o�q6���5Z$�iGj�\�-D��!������TGM#�]iu/���Z��i�����k�
�\��M�i[��r;7����y� r��,K��Y��J1p�=!b+�2��kes}��%R��_������p�V� ���u�S�`�k�
[����U>���_js��M�%Q�����%��� +�����aJL�!��y���a&c�z���|�\
t0Eu�><�r�c�Y,�eX%��(#�e�<�eL��@{F�@��l�#*�cS���-W���
(K�����gP�-g�k�Y��k���W	��p�ewP�������]�jvo �d���S|_�ZGT��)1�|���mr��M�����@Y�'L�2�#\���+�(+Ym�����@(���I���&)_�)��'�n<���=*J�B���Y��?�!�V��W�O���MM.�ZW�������j�-���-@'���%�U��:���q�K�����'�8u#���^�������B�:hF��
0�{l������?�<<����O����6�C�]�{��as���o��<�~B�f������F8d'��l�N���2�8��u�wgp�We|��<���>������q�=?�r������7��}wr���yY���`��n��k�h��J�W<��!D������t
0�������+� ��Q}m"�D����_R���n�	0��A&�-��5*4g��`����B�&lV�`,��+�	�}���ei�j�������e��k�=~7{��E��Hz�8�
���(��=7!E)R�VMt��|�Q�7�#(j9��=D�b����B�����������u��5.*Z1d���E��j��;b�B�������"5[���5���q����^��=��H����1f�KI��u��d&l���=�yT�!�((**��LY(���|e�����I�x7l(�txP�"��{z�=���K���Qv��b�l2\���t�]�jQ��r0�;v��g��g�`�O�<�C�c-O�*���-�V���*[�+C�u�b��%�BrXp��)��/���8��h��9�d��5�i����t��Jh`���u?�
�t��|����l�W�p*�%���R8�h���g�7!��tNA-�t}�oZ��{M����������N���r��Y�k?@��z���#��0%�M�����an�n]zb���Q��M�VI�I�f��0F����WV0~u#���t_pVB���/Nk@f/Pk==d5�*�����]M��m�	���cZ���H<e�kT�i-� �����9�H|���hkZ�����'�[�����������?c�1y<��Z�������\@�2-w�������.X[hOE�T��~4�1��w�/p�{�B�����������/<�sYX�'����W�����h�����=��$�+���m%^p���G�W���a��+�5	�|���U����y�N���y���Xg�T�J��t�����y���+U�Y��#+�L�cVP��C;�+����S�@\~u6?����"+H?[:f��*�<��-8���`@�������	�H
����{���������������>�_!�<��������{���)��O��/���(��+4��	V�������b�6+��>Z���m��^�}K6�J���U�n��S�tXh�����DI+�ba��?���O&�"n���c���7��a^������W5R�/CYw����5���_UM	e��
���b���
����5�����T�Y
�>|�Q��������9D����h��������e�!&�����"�38d�k����`���y���:������6�p���=�F~�y���*u�c���z�p�K��0��BWk�����|�{0B���a�=�p�M�����2��-Y��Q�&b��U��L�i����������z��������6����yR�/-&a^�����
bCH����K@cGjb���y�5*%�����u�c����}a�������������"'JI���H�nd��x��2��8�F��Q�|n�]����`4�����F�W����J�jaZ���d�`��>�64��j��h�����YeLh�U������$��Iv}]#o��|��yx�i��������k��q��b����Z!n��E>]|����~��c/JQ��o%m���DQ��<�Cp1 ��t������V>f�����w���;���N��	u���w`]�Ns���OS����p��&����dg�z��y�Q9��:��V�{��u�D�#�������Pu,>���
8�3��Z"�]������VG(G?�:�
������vhh��<��g`���r��iq���uc>�ay�6VZK�=d/q�$���f��������a��-�����9��y��/�
{W.��g��u��G��������4��G��h�~�^�.�K�ph-��d
/��H���.����>��� ��Y���2B���kX����y��^��uR�=;�W�[���]��;�#���Hk6�[M��1�����J�fR�\z�I/�=���4I�Yi|���7��f�����H0m�������i�20����$Q��@���@����6�)oX&�A�`��Zj�{���
n��i�����k�����C��]�����������>��6����5�|�(��}����9�M>���1��#�,���@���N��G��&?��Q��,R�J>���K9f��{�}��3����%`;��w��z�������-��������=�:�W�p.��)�L���&/���y��l5mF�A�3�.�����sZ�,zx��^EC9�`�H:>��[|�dZ������io�Z
���U$X�Y�],�9�������n���H��Fb�8�T�I'
{�����)��-:���-^���"�p{&0F��=s���l�]+��X����A@�����=��]�g�i�����J�M�����ZS�`��=�^m-3��`���Eo���|�9���!����J��8��iC�!f��Q��.G�!.���/Z�B\����=��s����N�C��u&�k���]|hyzJ��N�;���=��(���xm�C��SFc'�j)�e[�Fe���HK�~n�;� ,Km!���M!���jvPA|�i�\4��j�35{
�N�������&d�M�m��!_�K�x��v+N�)����U"��8��ai��|(��������>d���7
5&7q���0���������l����B\��<������S#��{���*�A��$��hn
��B�R�$�q�g� �p��6�A��t
���{=&Q���P�h��wA���x��>t
����5f�%Y=�n��-�Q����|��?x���Tg�.�t�]�vPnZ��#&dY4���Z�����q��MK��PN�]@���<��4�>��u�/g��!����@����-�I��f��C�����8�_���	l�xXu�z+��%�;b��r�a���d?=���NQ�nN��3�B�&{�m�D5q�5����YZ��bN�pLNs<��A���d�=�C��}�����oI�9	����]��l�gNB ?��i�1G(j������r�fx�����d�0'y�^O �lj����_=%�s�|�"�I�d����8'y�����l5mFZ��,E��9{5'y���9X=�0'�a����O��9��aN�vjN�,������s<�q�`��v>����l��d���z��0�s@����m{^��������9�G�"�sh���hXv(W�q@�#��D�M�C��8�
�@k\�3Zc���-���4���Ue��#�����J!-_4D9�A��8,t��������j���h\P���������rL�N�%k���"������`a�����
-��%Su���:�m�1�q��qv����)��v�����t{(��4Lw��|��~M"|���I���F�I��a��~&�/�I�����a�u���I��a�
�$r�0��:���I���$rwYy��$rwZy~�H���w�4��]BX��Ip��4Z�����0�|�7-N"�M���h�D:��&L"�E��I��Z�n�KC�>��=h�Xn�I��$r+�
 ]4���rpj[A��,��$r+����sQ��4�t��=L"w��l��hX�k����������H
	i
\1���J7��K�I��'���X�D�.A��'�����nYR�-�v���R����nR$,�v����4RF��]��t��SW��J�������i���g��h���r�c�f-.���=��h0�I��O��9�x��he��&��7��X[�
�0��f��)Vl��E{���=$?y�4���fW�Qk�pk�������u��*N������i p�=�����#V`���B�}�u����O�O����
�r����V�y
�|�t�	��L���uvI�����r����y64,�_0<G�6��Lx�x6�,a��mY�{h7��-c�q���(il���4���_�r2o�M�7���p�-h�� �����3"��r�Z��6����n��s������g�/�R��V���h�����������!�qSw�Vd�����M
|I�-U+��,|�a����$6��_�����i��	�V�f����c�M�e���e��YX=�p)�<sE�$���X4����I1@:�dO�Z?������}1����u�c5�2Xk`=
k���O�����G!�������	)$6���J�����=��s�GH���%%�����'�xs@������y�����/���_�OE
�7������?s���<�1����_L�j�^�-�YdQ ��b�b���L`�?��$�h#3�"���}��~|�F��!7/�#90��C
�����^��c����-�[yU����n�5����9pX�f���Q��	&�"�.pCpj�U�=��j���[9�Mp��o<������W�"��s����x�vj/���m���-+���x#yj�hb��N�
zk�!L��_0��X�>������7���	_�j��o��y��z�.`3��/N��<��N����'��
}A
7q�@��#<<m��00X������i��w�b [���;�����T�y�,6���m�h:����o�,����L��`���y�
m��3���]m���������u�����{8wn����x�Z�7�7huR�@����^2�Z���X�2�gP��;��p�p�R���n��c�*�O�Co��	h	�&���b^�MC���;&�����,��#���������u��i��3h��6z�������f��~���o;����y�
�:���6]x����o ��7p�kh�G�����!k��fS9�h.tm�f������b3:�BT��d)�>��5��.,��f�3��n@����i�+����x�\��q��&0�S�
��|�����k���K+T"�����\���S��l���t^>�se���y�48���]���_���iK���t�e��X��a��x�r���*�4��q�Qg�dw�+��[��5mB��
;R�>�X����w��7��D:�:�VQ���sk\[�rpKpr���u9����-pZ�Gv�Xd]�&����&!�CkO��p��J����-�UMQ�d�Dc5)�R�h��������9f�\wf��7;��8t�A��8'B�Z%;I�4�/��n"m�k�@��&�V��h�J���4�cF���!������y�����x�h���`A[��_4��5F���v�o����EXE-�4F4����*g
._�yV���c�6i�������S8����<��h[j12C��b���r���M�nr�0I�4I�,+8���'��t @��%h�S.Px��j�K�7�)5�`R[�O&0${�����������h���9�f�_�t�U'�z�Q��u
������C|�='���^%�4yuX��V�����,h;�a���(��,wh����j#|���5��0�q�0y%��uA\�����k�t�:�h��f�Dl���+��$��)_�H=�0���y��U�!�^;���zA�i=��~����<��F
�R�� y��X���s\
f��������j�C�yZz�)b�i���liYW/\��{=�T�y�,60.��)��M�7O<�'@��<Co��b�:c_�������6�|�f�w��p����`R[9��a����Z��mq]��g�y>��pK&j1�����l��I����^9���j��^�C�b��8��/�V��i�>p����������H�:M-�L$�>p�����U3z��?P��Hu����4W'_4DK��z�S��h���Y���V���Z-��R�����L�	i
��H�7h%�����5YkqN�����h�.7c�6�]�4������2�G}���n�ymK�;i�2M���!8��X�j�}@�9�fC�����/��������0�\�f#[dX
���w 6W#(�[�w��FI��ar�u�h5��0�?��r���?��4tLt�6�;�l��1y
�h��A_Y�MGDf�!�s���6�-�P�j��q��"�eBl���Pc�� �p�K"��
E�i�/�]�A9#?!�2m_��B������Quj���F��,Xu�
�AI}I.�����N��z���~��G4��.�����-����n�w��
�w�z%��g�����(rj��tA���2���#m��D������wh�=�73/�v��y���;�mw�J-����c��i���?��43��!I���������~�Q�g�}ZZ���d�-���jpf��"��*�H���>�y����5�\��P8�UD������B5��h}\4&������������qZS�
-�O����O�6C�.�����LKP.�2��+����M-h���D�?�jl���~�T��*^�l�ch���p�@�h�����V��yhx����}|35r��ea\���<<���J�W��O����J����r`��N��m���y�\��+��C����.-	&���n3Qu��Q�s�5��i]4�J��������8U�e;M���D���Js6���FX\�����0�h��������V���4���+i��)�<�
C�?X��m7�����u4�����LvF���p4��&�M)=�K�w���|ti���f�6;��l���g!�0�.������N���{Cu�-N{�9N~��:=���'�0 S{�Pg3��Ju�8����7|����;t	p(���.y�A�4���~������C�m�&[���@K��kG�:i5�������teW\l6���x
��B��/�N���ga���;0��n�WSn��ik����aR��h�F���=H�V�	������J.e�j@-�d���V�gz��8m����}}b��G�b��|�`�4��C�e�X9������+G/�����_������B�w���s�?��=�!%)�������'[�N�dl\��
v�)��O���t�����6jV���%b�]k�;��
'L��g`D�|xaC��%�S|�vP�L�GTl_D�����6M�)G#DCF&4�������5@@�m�|�j���N�Q(��yf��0
��g����m	�s�9m����-���nL�5{.�Y��
�X8����h�j
<���gjNC���������w�,(���a��/&Z?������v�P=������s�m&L/�tK������"��h6,��~�0�v�r�3�����8�g��w�d�6��{	�#���������Pg�Q�P�2)���T,��]"���
���j��J�6W��Vj~��&���@���J��,���q�����_`���M���� �~��
/����^B;{�h��+=:f�U���e��P����B)vwB��������x	��}�s	!��J��-��I�?���������i<WZ������g�����~��ON��}.��}n�)�G~
����G~
���)����S�S���S���������������(O���<�����>j�O���S�����>����������������V?�������;�S���h?�S��lO���=��?���?������+F
����G
����n]<y
<���������w��������U\�h�)0��h1�������~��o���8���?���X�����v���c7�����;���k?�q|
<�.~�i�nc|�x��Kv����W�}���_v���n����)������ ?�z~�����.<2�x��)�C�O�y�����������������[��K$?�~/����)���{�����3��������%O�V?����n��6H{�g7E�����.��WK�y/�|��	���!
���q��|>����Yh"�kMG7��pG��&�E0�L�L0L����P��`�0\:#���C�a���K:
���t]$��A�(�KQ�+Eb��w� ���B�r@Q�4P (���7��|O�?��TQ�+T��*M���C�ah`�P�h�������������!�x���(�+�.�1�4�73u0{4��?di(a4a@������������*�D������I�y�����0w���S|��g>���U������`�#�h1�3��,�W�����7M�i�t��`��'&�M}�a���������g��y��uk6����>A{���\/�]�b�[G��b��z����%��j������Ai�����}�(��>������@����������������g����;�mv>ph�[���.������F5x��z#8�-�b�.Z�r��t���um��|�[����a��W�!��}^�|�$0�3�W����J��+]��{��jf/�V�@�i�;g�F�"�nO�m�(�h�*���%��������fd�M�>��4�_����(�mEtj�{��7�h2A�h}�r�]u����-#��M�������y>��_����X	huK��r�6������m`�����-�{C)��%�0PHK�6�qGz����6+��p���h�)���\�#�[���4��Z���y��D��|
}��U�C#7��rz���Hza�g����d=�\�C�	/��ho�t�����?��^�!�E��G�����J���<�]����>$5{`t�Bg/`#��l��N������e9JLU����Qn
�iO���
��S�a������
E�HT��iVn��Z�5��;�[�nQ����������u9'l���k���@���HK�V[��po����V;P7�"-�i���<��_�m��m��$���Pj������4f5q�.I���BZ�@����m���M*d�����{��^��t������;d������
�Y����g�����fF��y�a��9�X����r��v�������!Q&��Bh��U.���)W����:}w��]ieoqH�����S���!�Nl��������Ca_.�����-l�ny�e�E�`�R|��������Y��T��w��Z����U����������;(���uh`���u�2dn�o���2��yG��+��@I�����HAl2'e����riE����5�5QQ��j&)C�����P��t~�Y��5k�������b�
�:�r��2�����mWWA�����{��]{��(C����N)C�`/��Q��Ps<�`0Ij�-);������q��cX��������L����Nw����|��<1���|����y������%'��iB'��������p�������ZO7-�Z��G�8y����i�9r�C`�C3f�����{(�?�mQ�O�s���}5�`e��jXx�@�]����r��������%�=�u��&9h���)w���G�S�����w���^Z�zl��'���u�s��	�-���q����K	b���&;�V�K��}��y���������y@kmN/��8�:m\<��Q�s�+�l���K�/j�_T��&z�#p���������a��@jo&�t�S�}D���5�$��,>.c���[�C��v�&}��Ec�����O��-y�D�-�4hIur��%n���0@I�Va��KB��	��H���WL��m��x�jl�W.���e+|�{��^�lB�e��4�x��!l�6��;b�3�����K�N��U[m�t�cD����^��=X��Hu���J�A�=�\E������:���6�^H;:��F~�
4����L������l��Z���N��4��h0����$lD�\X��r���I����������vMi��!s�M�p��������'q�������DC`j���/K����TG\-rl�<^��;
�k���9^�AZS�b��R;�P;�E��]x/b:��M�6!P{�T�L���|��:n�����zn��[�
u!R�E�7���z��~>Jv�3�ySm����_�ja�W����n����x���g��Kl���y�0Z�1�eIR@-h�)�VzNEp���������M)7&�P�q|-��o�zE��Z���Q ���
����3����j�]�[��u����r��[<.����c���`4�
���/0FF���'�������o�����Z��#���#�2/j��������.�;����G�m��Db^��n*1�^Hd�+�j�B�ho���W��}���I]`��n<�h�K���������-`oe�2V�����,�6�N{���[x�nM��>�-�KVs����N^6�>L�����}�M=�L��%.�xy�f�������C�C�G[��W���
�,���w�j����������7B�b:��L�H�3~
q����-2��T���n���L���J�����e��[��Y����i�+g�ND��
����f��}���E2�(o��8K	.�#����)����=Z�=����!��@�W:c��@�������	�Xw�C�v"f���|��b�����k�j����Qq����K*�>���6o�VR���U��k�U�?���k��k������<dzm�, ��[s���a�%g_F{hh)����VV�e���=v~PM7�j�����3z4�BCQ5[��W����f��`�������Z��
����|�c�QH��g������x�Z*��3{>�T�Y���
�c��oj�i�@�Y��f-CVN��Vj���v�z�C�;n|'�4�/�?�w��y�0��9���@�9��G��l������^���%]�L�:f�v��w������ME�x����������Fp~��_�������}1�K�H��G�jO��@��~������@��W&nZ\T�rl��B(�W��/�J�u�[�[V����^����6qB]��\�56������?78�
4��m������^xm���bl�~�r�QX
H
q�s��#,�Xr�DiF��C.@m�1��I�����%�!��8�P����&j��
��p�e���d?P�S��v�T
w�m�)X��K���r_��cY(cbF��1�49��&PDK+������9���nY�E�/�����sF�=���=�&:�EYY2*\&����������������y��j�8�;b"~��Y�C6T
	�_<�j��
��2^pj%��j9�VR@����B�N�=��b��m��T��'2�O<�uj�*����c��Y"u!z1jn��h����
{D�R�3O[��Y�����Z��w�gV�B���� #�ue�2�rj��f�PN7uY�q�f;��.*z����_/|id!r'E��w�{���
�CEQ�_�	T~g�5/��6�8foT"����=f�=�����4Ps�B���ZXV�D�-����CMQ:\f�.R�#l��"�5�sD-t��g�HBa����	���]�:�"�Z���X���+�4MK4l��`��
i��_�S�������K���������;mC���`a{��B��+�j������'�$�~iM!���Hm����>���	�N������A��Vd�b��������e�%}��.��&��������`�5��)��5ipA�S�Em�����<�w;��������B(�-<��R�B_�fiSO�&;��G^<��g�K��U
o����9�`������-?U�
�T+���Z�����~��xVp������[�	���&�FaPOn
Ps�l,�\0�kGY�DO��NM;�~OH�k��P
������i�L�t���8|�U��4�=c�=��e�}�x�����6����3�A�K��}��,��ICn��`{]or���|H
V�O�c��	4�f���c�E�8���S[��-��>����lH��J�����vQe���6q�c�����P���od��^�"�>e���i�<2�L���BL�b�a`���M�+�Ed~j�)~�k��RQs�<���!2?5��P����=Ud��M�V��E*��
v����7Bz�^�;���D�QZl�S�X�����3%�"�>�REe�E�+��n���L���<^��w��U[�P<b��+��^b�1X3�%\�yQ�����.��_Z(�����^g��v�%��-EC5g�h��4���H�"�����F*���+R���V����Z������w�����R����}�������h���=�4�]x� �w�� �W��b�F�E�Y���vv���`[K��!��=���+��I���1F�v�o��a����"
T�
�7��He�]��P�������C7���1*[5���vQ��X�}9�����Gy4J|.��/T[���.�w�\�F�	0F����%�D*����%��%������V���4�Z�d�������1�]�/��7|��W��h�p�;�\�L������LW��'��c�^��^)��t�{�0F�pa�u�;�z�5�]>��o�vrp�V�H�`�5�6!gZcHM������^�I
3��R�T����q�5F�i����N�v���n$���2W��LK��L��$ygZ��i�~��FW$U��8�xq����[9�Lk��xYF4�i\��4��V��=�:�|��c���1��w5�C+�kGY�L��%R=�jN���;�JwSU�fZ�����������P���i!&=�.�g ����x�Z��{ML�n�Mo��� ������;3y4D������"U��vP9_7��W���������@���}��;�}����E5�;D��h���w0�����C�/-;�Nc��k^�wW���1�3��gUb���������K��[��4��;���w�j��nV)�������������5���������
�N�+�6����Uk�
_.5��w�w/Z�����w�^���k��w����?O4��9O����1t���gU(@�5s�1��9�zS��e{�k�)~�Kl4W&5OC������l�9�����y6�$�^3����� �g�o�<�lq���k��V�Z�*_|��V���5%������n*f�S]����2�����?>�=��m�A�1,F�s�9"R�E�8��&P��y�8s~�hF���Y�-Oz�l`������37~%����*n���`���j���je����y6�,�N\n�;s~���G��tnQr�u4�#;��g�v�{��J���,<��4�J��������k%mU��'_?T-�R�����/��e+�e�J��j���Ql=_n���2�<�y�k�n|V�B��+�u�_��Bl7�=���`[���0�G2K�j���S�5���k���d�A9��Wd��:P��S'�]���Eo������Y��@��-�]��y��1������}�#��m>���u�3K�U_7��#
�G�W�"7��1g7�������l���B_���5�<����I�H�>M��1����y��;]Z�^|���?1F�.,�r#��Z5��.�}a���jc�W0T+k=CR�F�����|����6�M#�%Xo8�]ox�U��lz������k���C-�-j��/��e�,�^��|�@t)�
���"�
���M���6;��LS�P][�+���F�v_~�b�W��,�E�I�����
+{D)s�h���0O�!�:H�[Y��
�U�����w�7�"����'SiF���S:��O�&j���R����;�
���H��\���2n\�O�P��w;%�������3*4�g���=}]�Aw%�SD�0$F�����������5�{<���{����������'y�x�w�������x�����"�/s9��S�C�������_���#��L����O���F^b��4��N35��T�@�d&U�y����{�1#�2/�����W�����H.����[���.��Ffb& ~�~/!n��Ey�R����
�c�����Y7'=*�R�������u&�K��:�P�����q����XWGi\�?���x�/�7~��������]I���Z�i�����l�����K��'J5R��������
�_�������:Y�=�\��s�j;[�O�-q�qf��s����WG��6<
0C��������������"���%�wTx
�#��8���w����oY=J�=���v\����v�5D?��C�>��.Z[J�yke8B<0���,g��D���.7����|�x�/yY�����[�����1<�-���)�	y��������=e�����z}m��)��]�@no*_�vfd����,x��p�5s�}C:���]��b�B�u�
�������c���)�V���iG�,!P�;Q�M�-R���S �|�-9
#H<1�Z7t�fC�:k��
~�:;��i���B�N�-Dn�HUR�u�:�@��z$����4�1�V
X����#�$�P��u��ls�mn-Z�-oQ!W�Q�R��}��r[�UX���C�RTG<(D�p�e��Y���#�u�H]-��x.&@H�=�6,YV���}W,S��z�*]�6|���6�;��_a<_j��_��b�Vn��E}���$W4I�jU����!���f��#���\[��J^n �_�"q�a�9��������<F�2�GN������G����?�_T>9���j@C�������7_��u���x�������2�$j�(�Ws{ppU]�#@+;�}�$UQ���Nm�})+�}�/"���������"��X�r:�+_E�����F=A5���4P��B�t5�,*�J���I�{���8���&8�pm��9�!��Ow���Ue���v/��.[V9Rr��]���
3��"+Z����5��X:;V>����5/n'�_Z�����m��9����q�2$�3E*��k�r��+�����36Q���U����1�[�vr��.&��cC���b����"�p���N�kl���c;:;b��_�?3���.��~�h��6o'��6��SS([�������TOj����}��}�@W�QuN�k���R�T��6����32���n�3��L�V�&������8*y�1%�)�n8v���.3&1��Euep����?�|����"t������T�Q
����+7p�����c�����#7��d��H�yt^s��J�_.�n�d��k���k��u�7�K��L;���+�����8"^;J=R���iSf\�8cq��n������p�j�S�|F��c	�iL��6:J�[���P)g\���xl	T7��iJf���}���hLw����wLc:|9�+��H�7d�I��k!������c�2y�R�T7y�c�������y�+duL�WP:���v��%��s\�T�_n�nW4#��@u5t\�����������[�^�!������R�TWC����y���8����F^w�=���������u��jh���9�@p0�����
�3��W��Sk!;�6x�x*��);��9m����v�a��tcj��P�L@�u\~`*,f~��S���@���'�'����&�����k�Ac�Aq��2��Ro*3��+������?�k�2�$u��U�K��5F4�,;�]�\�59���
���Z
��8�����_3U��� �gl����Z���b��;����A�z���2'O���1�����������.[��\����J��b�����$5�	�����G�I&A�� �Q�|S5���f�p��-r������+��'+I�y����J������W���6�tQ����������	(/��G�<��3�]���r�=�K�*k����#1W�����2��|������^y?�B.�l
b��zc�;������o:�j�Z�VV*��S��-{�tf�����}�V���B��W��V�Krw�D'=w���Q�VH!�5q��:g���k\w����=��R�q��u���y~���cz��TW1���x�v�,��6��U���,�;�����6n��2����������j����z��7�	��=��'�Q=*���&.P����,t\N]@��l�N�^��/��v�fK�j��;�1|�J>if��9���/��%,L����\��x��M�������6�d���,F����o���,�,]�����%m���tc;Am�-�����`Y��%��q���U����/5����5uE�qOG���(��u���P	Z^��C
�/�vQ�MM��g����`�JF<d�:��1Vr���7J"�{���~�[�������(Yo�8�;Rg��d���7���[������J2_���xw�(�!Y��^T����������<e�:�f�������*R���A�S���K��%i������
_���qW�S�k��A�H����m^QfnuR?|�	1�\#���o���6K���a�5����^7b�1K
zX�lu�`O�b�u�cl�X�lF�l����[�z�o����E�/jj�9yNY������_~�����rz\A�q&�<�e���]�vE�'%����r=����w���D5D�*������y|��������J{�����3 �������Vb���}�3�y��K+�}-�y��6y����B��������h#lS�0�������$�S�A��x�8p��"�q�X�g(����f�V�lx���^Y�W�3�E�������0����vPGl ]l����P6�����e������������.�m�#0,p=���?���F �a�}s5��d����ki>T���a3�����=e�_5c(�Pn7��vL�8D���y��8\����U�����t������*C6�^x-"�;J��������P=��$����n��
kr�����u�����2��4�/��C���w�!,������E�7t�����7;d��9P�S��V�����|�����K*����Zi�>5;w�
t@D��6<�������,�a�����H�D�Q�6h�B�_Z(;P�N��g����EM�6���Q�N1��N��
_Ra��!�F�T��lc��3�7�k��i�;zr��Y���6H��
�h���F��B�M�
��j�gD��q�������]?
W����x���������ws�������9[)�n�^O
ws���SZ�o�s~�J���[R�%���S�g�����m������?��_�r�������,y�=�y�] ��@��w��3���]`��@��_z��/����oe(��.P~�]����Rw�*u���u�]�~����{���?���_�v�w�]�. ����e�)��|�]@��. ?e����J��o��v���.�f������mh?�.���V�����������.�o}���.���~E��buF���c�u��3~�����)v�gW���o��6�������9�����%�����|�]`���>oX���^��r�6�w����P�6���Qz����o?�2�+�>.-���V�����.�*nRmf������v�����o���}�G��������!?v���.�c��~|�����c����.������J��nI������������f��x{K�a=��>���k�������\���kwa���"~�B���~�~������Yh"��MG7�%t]E��0D�F�i` �	���`�2������FqAt#D����)������A9�(PU��p�
��&B-UE��T]�1T�
U���	|�p����h`@0&������afI���t��a�4o�:�.���A��	���:�����E�]�u��������������0�HG	�	����N���^.Z�5\7�8\:�;\=�>�>�t����<�|"��������x�bQ���������r���[���A��s��R�1{0���G�W�M��H=��x������.�j��b��qZ�5wE����Z�w�x��gb�r�j���r�*n�.Qo/u����.Aj]	��b���l��--�L��K�T�Y�bk���F�Qk/U��
���H=s_�SN��.��������ae�����D���}-
n-pG��5C�3t���j���w���]^N��?��Tn;&�u)f�vhp��Oe�K}��_n���X���������5�����s�������jx�f����1�i
����]�C�g P�C��-[Q����K�*��e^�(���[�*[���Ay���+n$�Mf�b�:������DK"U�r��Y�T��]�V9�>.���E���"���Q��Q��������d�����TwH�.��L���[V
��MD���>�J4�1d��#�������C�|e6����g���6 y���@���G��V�I�;����<��]�T��x���;"�B�2���Z�!L<x~�S�QRi��ZE�����W���:V�4O���#�V?��/�DGd1��lAd@�#�p3��K�������N�}|�f��b�w��z��a�����K�x�������_\rlY���e�^y�����Yw����l�<�$l�����5h�bs�v[�'�}���mDj.���1�t,�5u��Z���7�V9��R�0o�3�.�����!9Rk���[�%���k��*��\N�W�B�'��j��v���d����h+�U��ke���gT}>z��z7��������1n���Y7l���d��7n���+����R_��-��&l_+&����i�(G�����Je0v*��_2 �^����Zf4���A�-/6,����-] 7Zv�L�I�������6��[uT��c@V�
h�v��2����6"U�S�JO:@-+��J
(r�eg4 �	���0V��5�U����c��cD�l��vh@�{��i�k@�D^�������-�G�-3�<��dkso5GZ��������j]Zf|������^s�R�������(���+�`��`GdS@�H.�3�:#��P�p�C�E�0���X�kw�|L�w��\��m-0���!�0*
��F�;��+���"o���;����7�,��4^��O����?�=�C�u�|B\��+l�������A�H`���`��`���B�V���z}�ey�!��lX���67��`\�>M�np�)Z��
�yU����;����9����J���`H���>8�lY��`��#����>k��FCn�����Z>����y��B��{�!�>,���AW�qVf����Ct����+���,��C7��a�,56�W*��2�r�Q�)���+f�>��0X��
E���u��*�-K�W�g@e�T',��[3~7[�5E*���U�8�`�}���0X�j�����9�&��KT�Km�����t~c�#
�r��a��2��u'U*���]8�W��"��XXW���2�6�|��u��}b��SOP�C������|����Xd����	T1S|j��*8A�2����4)3�^����({h!S2$�T�����I=y��!r��y��j=�8��vs��Vx1W�l�7�r���!���Sk}-���a��+_?�����u���v����i��W�����U�T������H�SH��%�
����8]����h��.�)�f�����V��hN��h���1����3������$�2��r$��Ni~�?�����lOB�W���RIfu�K�5|O���q�y�����j�-�NHnsp�&��4�@�����{:q��NE�0W���^L��N����P�r��{�
�~�5�]YQ��4�w����mi�/m@F/
j�����f�D~����I��5���	��7�>{�S�j!��[!�m���x��`�K�_����a[���`�5oA2FZ�VT���q#� /��G�D��"��G�ua9�	��~}���6��8�8+9o?����� >��]p����Tx�����e��5�L��9����g�{w���G�v4�^�hj��M���R5���K���4���?��_?0�����S.���y�J��q8T��Xg�f��?;��|i�����P�N��Q6'm�w�MJ���N���C~~2}�1�\�z����DV(
bIv�C�r&�1��Xv[��pg>������Wf!�1�@�
�x����1��:���8��'�����P��A����L������;��O����p�E[�N��X!N�r
����x8�&=��/�n7c4��#�|�%�`��M/���~�b���E�.�/��6]����i�=,��?����������X�r���TR�Kg/� E��9?����5�;���S�N��mPt*����F=;����P��J��=��������fQ��~]�:���������u8�
�S�v���e�&�C?�����E�W8dz���5@�����y�n-;������F��h�8M��j�G��
 5����t��@;J����L6(r~��������2���y����_lj���K3�n��
Cu���d�OGA����s��h�O`�%?Z�nkDjc�������_�yXz��f^�4l�T�1`^�����Kw�z�#����;,���o.��s� ��s��mlw<�!P��
���k����V�!��3R���t/y���p#�[V��nyz%��@�LBZ��	�xe�u�
F�f����
��~e^qB3���~�R��~O\� [��*l�/J��2&�����yZ�sI�9P����x��l���t�P-P[�����b^�Q8�;��b�pj���*B,~����$U�nA�~w�U|^?����P������fz"���T2z��g@sFjF�����f���`�~����ms��1F���}��u��xz�pue�S��]N���F����w-~��_1 �G�p[�O�g�RN;7{UNv����&�p
��*h�4}�@���C�=��8�u���E+�d�������`B��do����
7V#3��|�v�,�����������z�I��'C%�-t��B��n�mq�����y�'i��������Y�r`��h�v���j**�6�>$�%���U\����@[o������h�C+���������W������NmX[A,�&���#���3��hohag
#��-u��VP����������Q���h
iK%����C�����
X����~R26�����kN�%co�h��d�
�/��7��?��=4!��.4���+��:u`"k����h�@K���)v����������u ��,�/����;�!�~C��7p��i"�����k�O������m��0�+�T�Y����E�%h�/v0;Dv�\���5�&�����V�&�C����
i�n%~\�����O�*��P��3����q���9��g�~����I���r���?��v��F����G&t�|�Y�:[�=���V�����u��g��9",�`�o��c>����,�@Kf���������x[������KK��n��n+HW
d����EW����	�gg$J^wH	r���^��?s����g���0�m���w��0v`3���@3v!���hz����
�=��������Y�)!}�ix��O�]���u�^������4�d%G���/��Y�-�����"�+6�^8�i���
��6Mx�!��3��!�m�������j��z�e��.�g�|C��cyq�NW��\|H�����)��qC�6)Z����hP��,���9��m��S	m!
9$-���O��
�|p�3Z�!��-�V�Y��p��L_t���a��.u{��@k%���N�G�	w8�wi������uc/>�QN��3�m]Q,���
�������O�M��+���c!��L������iq�`���1����5�5U�eM��:l�����1V%�n�>�#����GU@3KB��_@so���H
�.��C>K�����9�A�^�@��y�s%o
tKm���=�e)��#K�'v^�Z���'.ui�k��p��^��
i��@C�������(/-���3;M�w�om
�#�oZ~hu3[����K�����n����6�)H����2�#��:
��3i��d��-�4�C��8����)��d��[0�]�#fh�;bXr��/� ��Ge�Q�nNi�3z L��@�z�����S������7;���I1'�����	R���hF)���;��#��p�Tz���9I��@`u�9	��cU)�3'�=�I�N�fx��h
������2AqN�l��yF��9�C>��$�1d���8'��1Bz��e�;'��Z�}9f�B#%{��s��K�����#(������J����%�>�t�Z�w�=����e�n,��m��8'�;��1n�XO_���9�@�b�1,}���ha�a���FEh�������n7��:���<���F���h�;�:�jMs�@Z�4K����
@�K;^��z��	H�{d,���������%�#t������|�9 ����r�WZ�>Y���O�4���6�*�w:0��|<���Q���hT�7*�\�Kl:}�w��l�9?�V���h ��
@6��wbm"��h1_�F��="D3�$r�1CLG�L�Y3g��I��ayA~h��r�<u��WL)F��t'�V�Dz����I��g9��<hq9$L"`�����^s9$L"�<�H���j����-N"G��!i�N"/l���&��	�H~�iqy��X\B�0�bch-��0����i��u�%N"��I��X�D	�H��&�.�S`�3�&�C��]����8�$�I��)�(�i���8�B�`�c���a<����EK������L"��h�
�6��(��a}����f�,��I���$��@����rMB�(o?m�������vp:��J��5�\��Ph�#9FW���C"�6��h��������m�����B�{�������
��O��0VL��C;
1W�,����/c��aT���x�3������Kk5�k+��&]x����g����[;}����9�������jvQ��B���NrW}R�aR��0�e�/��P���Y�}1���l�}!?�u�u�����7f~V�� [�s���46�LS�l/~��V�{�K+hK����l��.���x�i�����h���/:�L��,����1#b@2�B���r��8��Vh�w�����V�2������X�X�Ri��,��Y�)��3C�N����YB -���i�0��}�N��$�������e;<�<3��j���0CqW���YpOQU�6{�V"���n�]6�&{m�=����l��Y��O�:�;��E��g��������gc����Nn��/�=F��0"��5�e����X�������a;���`�Y��q�:�[�[��7
��-�9��s���c$���I�����O���[
h&S��d5�-�D�'�+��2����a?E�Wf&��������O2��q��j�Wf��<�L/��03�jv���Ez[$������H��4���8�3>�u?<7/��"/���E�_K���'����^>N^������-�0ro����n��<^�O����4&T0`��o�cRn�����^
��0-��z�N��y��p���%ky`��������a{���a4����C�������������QW�G�m� [c�`Y_7Vuc�|r;����l���~7X���&o��~e�=��f���x�������\]pjhx��p ���Wp���:��$Z3S�A0X�:b����i�����jzH��Q?},�TS�d5��^M	|���M�m6�3��G2������#�!��7��)�w�|��Qa���mX�O��,`��%�5�-o�������U�Q�/���-�o0.��������?M"���Gz*wAj��S'���%���2N�����O[T����[m�C��
�T���kP�@�����K����Y�x��Pp���d��������I�I�6�v�W�0I[�=��Q����^���l��
W����n�vxf�Qp�AFb}�7z1�_x
�Km����J���N}2�h������!�������?��%�S$x�E_����^�l����	����-�qk30����@�rfm�e��5/���)�\�������P��3�`���gb[���
��Pg�P���K�?�Jv?�Hk�G��x�jh%i�m���:G�(�:����X;�Z�u;+���NY#+��|��"e�(�:�6d�"*����'rpKpp��P�3;����X���b��g�D��gzk�����^B?F��0[5�C���l�u��@k��$��-'5���_�����O������&a�3
u2\��y��aVE?Hc|_@wir�J7���� h#z}0.��������1#���������$����7U}����U��@]��_8]�*�mjP��7�*tdV���]���P�J�k���'s�NZ0�8����������������xh���C����I/���G9����~�.� ]R��Qp�4��7��h�PU����P�����B94���w�L�����.*�h�����5���qz�+�{�N^��(	u�B���^������ko�����9��6~��=�i������F���U>�MR�]�3�����t�R1��]�4�Ta`Zpn��5!T���0y%�����2�������t�,H�l�O"���J�g��K0Xx�0L������=���W�����o�Zzi��PM)���=������O
��b�%��	<-9�-��S}p�hf@���i�`2#�yj��`��������,	<5���>�o���l-�5���}�p��,v���G��DM}m���n� �n� �����4	n��b5+�������q�
�d���
4���a��<�(�E�"���NA��DN�
?��C5�sX���e��E�A���`�s0�v��I����J�;��_yZ�_�i4�nK��'��t�b&�mm���hq�����y@�s2XMoVt��?��V�a�Os
<m��<�������/��.� ^� �^x���t�@�!,8������g5#F���\�u�h�������-�3�=���9i=:��(S���>v�0S�����:�!��r�&���c=<���9��af��F��0,$���h��6��{�c���r�?u�i+�&�9�8�1��g�X@?�u8|�3�E�X1A���[g
�����@C`W\d����4Z�X����f��z���`��pv�D]�D����&7T���=)��������C����D�mL��9-�`����n������y���C�y�R�'Zlgz��R��Kk����/��-��rY��^I��.�<}&�}�-] 2���?�w�n5�������okT�F��R�h!��y�=�
�i�T	7��&I�Pn���-a�*��by���j����SMY;�e��%���h3�oK58p����X-q��W�������Q�1S�9���(��?�����Z5����8o���<��=+y�	���z��}���)�FH��H~x�%��3�����hNH-�'��D�-��(�H��hV��*_�&�B5b	��	�e��@+x��pz�����lJs����xd'���f��^� �W�h�W��O�9�o
�\,q+�,��m����
�A`t�2>;��H�v�Ip����sV4�u���kUa�� ��F_�r����������40j9��m9���j��fz5���h���sC���y���4��+�
A��QIpTY��`�������^T,a$�g�d�Q��X�j���,�gvM�j�v��f�UT�b_����iM��\=U]��|�:S+��o������MlZ.
��7?��J���KE���Y�0����i�R��0P���.v-iJG�`�lk�]J�YJ����G���6�v��l!{��5��]��:T��]���Gi7��h�:Y�}�![��=���I"E[L��)Z:
�M��=���)7�:���nY���+�H��{�T��������X����=
���������c -�)��I��\_�'�
}x�}��X�O�i5z��Yn�Y���y
^N.��#����qk�����������r�?_+d����>*���U����c��z�:����5|@�3+5[b~��C��5��qS��P��B��c���r������:�q��=���F�����Xz�\	���H��I3�Tbb}M*O�m���j(�	�Q'�q�4`�|���L�C<-���u��;uw��Ny��"gX_��m����Xf�K��Y�����,e!4'M�[�3L���/[
4Qpg����`�qWOAY,�^�[fHH�~]��+�3yi7�����&��u������������b)>����K������E�p1�MP��c��6�������hY������!�9�C���O�T}&������gjg��B�5=[\m:���4�$���@y�5�Y���a���]�B�?���M3��������i�iK+��-?4��kvt���)�v���%��o��%��D�v	��^B������)��p� �%�|.!����-�_������T�_I����������-}��������������}.y�>�G�r��@�y���.���] �����y(���+e����_f9������e(?�.PS�j��@���^w�:�.P��������������_�����z��o�����]@��. �e���?�R��o���7�h�@�mh���[�������������v��6�����~����]���@���5�x�-�����?����z����}�^l���������nc�o��]��?���.w��� �������}}����f��������wpA���o�����������Q�)��
����\��������t.e�;����f���������q�c����\�H?�_���������m�o?v\��m��~�.�l9��&�����WExId���5v��.��.H���u�����F>xy�D��P*���~p����f��h�6�W[�%t]E��0D�F�i` �	���`�2���s ���� F�T�QS����)���CG��LT,(�GM����T]�1T�
U���	|�.������`Xjd08�n���%M�
�U3�I��a�0{��8upt p&p,p2p8p>��>�[rw�7����n�.ps���#%�&�:S8V:Y8\8_8bze�hu�p�t�p�p�p�p�t8����)����=j�����{�wG-��K�s����������d|���
�u�G��B��������K��h�Ip�JlhK�rYs�R���t����uJ���������G�/��/�3�����w5�J6����{���'G���@H����{��M��@^_g�vV�Q����P�C+-���'9���_-T�������h�����6���������u���$7�iY����M]�5�������S
\[���R�)|~ZK�4tw����Wh
��&�9�������ZLJ5Z�J�|�DM��}������3_�&���P�a�*�OR�A���#�j%�^��ZM�������5y�l9|�y[Z�����6����j���a�����H�,��/NO�o�<�������-j�����q��������|��f�oZ������ mT�7��^��z��w��`w��%W��������i�N�T�������?�����q����\2�a��x���cDP;�?�v���q��Gd�U��3�3��`S�l*�15���d��&Ho�h��,�G����k�a��Xi�$/`�{�/�u�gWa�Xb01�-@uz�i�C��H�r���� ���*Z�bl���;�
#x��B�;@i68aS
�8����*�����ZS`��=E��4_���Y�P��*R�?����t��$	�M� ����W��+(���6�He���E���I������w|O�/�����v�j7_��t~R�����%ZMA|:b�_A
B�<�0�_�g�`%K�n���;7w�C�N��
������������O����=3w�
0{���y��uJ��Yw;������x��,���W$�1���������AU�������n�CB�����o�R���K������1,���g��+��m2�h3cXG/�7��?z_��>������.J��P�%��A�n4�_��v��i2��-������`�����g,7�1,����.�O8��a�!�bM[���lk��6�SnU7�W�?Y����� }
�Bc�wK��U�k���n;���v��`�������/��a����F4P'��������u�o���!������:}x'����9}�'��f�|�����r��5�d8�
�kZ�����6W�J��<�����< y�������ZS���mO���e�~�vi��~Gy2���2�/��?�n��y�����o�]��H�|������R�
��n*G{���=��!��d@�CK���5�x4 o-������+H�������8�=I>����|?�`Z6��y���z4�
�k�P@���7���s���Z�i��}��l8�+�9^ ����r�g�N�K��^�fn�^�
����|�����u�W�l�����l��Vx�������p4�r}��#�/�%S�����<wQ�e�h���4A%>����yAj�tv�:��������+�P����naz%���m�K�(	�������m%�r�$������H�-N�{�R~
�P���D����H���K����X����]���Pg��^�5�F. ��;5���lF.����~7�)Fj3��P�?�#k��n��Z�Cs9�VA�SI������^��MQ��A���`��x���-hCw�-��#k������4�A�@�X�[6D[��� �Y{��[��������C|���{D{h�z�O��A�]�NM�_qI@��<4D�x={j0V�.>�|��sp�%����}��NT7y\���\�&����E\�����Kg!w��PsJ��+Fs�ed�F��MP�/u��Pk�Y��(f���%R�D�d�����\J�}�x�:I������xd\Z&��H��-;��)�|��b6����<�U�<C�dR��n��}��mF�G�>s���R���B-D��N��p��Mk����+*@����T�i��{�c�Jf[����/]-9U�suI�����ugm�GP����4��q7��+���O\#5�H
_>'�������>1��J|P1j�n�'�7~K���ju�s����i��C=L"����������������:U��C%O�t��)Q��~�^+�P���
v�(��^��[aJP���2��G@����/������mIk./�c��H}��E���!~7Gjo�&�f"�.q���������V�J�����VR���te���2���-j����c��=�#;���Q��Jv���s��(�M}�B���Q��`hEN*)Ruh������D��
&P~�H�����q^6vj�������ui�(�U�FGjpADs����6�1u'�K�G��l�Wd��������0.e��0��ci���;&���.�ukE�����J�������������zTr�f���JC]��e48�����:�����8��'�^�q2LpU�G�Me������i}���@e������2}�)o��>_jGM������
���J3�oZ�=b�{�\o���I��W����nMFp��.7�G�~W_�'W��+��5/���\���3Ys��n��P��\UG�6����b,CT�K��5��1����^��#���� ��h%���q����1-�����O\T:�E\��	��$�pN���iG�[��������Y0m�t����&�mo�e|�}���7�k���"fX��[��5+�-Me���X�2���@�Q�T�B���v��%8��e�>0�{f�juI1�;�bu3�
�t�����}��R�%�qj�n���x��2>T���;��G�Pu1u�a�xe�u?�mu��@$������H8���5�K��n�����}���CQ8\�=z�>m����@6 $���y�rh3S@Z�w��E��d1�z�g���xZ����U�?L��w��3m��>@g��q��,�=e�V��\���������i2��0�������	�k��
��\i���f�C-��1���DQW�T�B���]b+9B��7�wC4a���-${*g}�O�*fdi�[:	��N��e��P��T��X�����f,K���[���:R�*��:����je'�Nk�"5������N�@�F���E�����%��J�*	�����4;W��![j�---��Y��TT
��*jfhsq���^�D��x��]*Z����=�P��h�W�jV����5}�������_�������_���mLQf��R����l�UM�0Yx����|����=���N�$0�l����>dGle�T�([+{�zG+�x�T�
4��}(���b�S�2,v�!�^��5�T�1��������TWT�0%����Z>�3R�����;��_R��=4��A#uL��luz��t*���K���N��y������@D< ��Z��J�*W��l�(�i[��i�DB���K_.�	����3)Z&\Pg7q�j�uA�i�����Z���P�H-B��H()uiM���l�V#Ur-�
���qH��/u��i���X�����-��x���#xZ��6�a�t�}�V��:�-K�<s�{�A�2���@��||t�|''+��2ml�yB7��< ����`	�Lx@��M"�����ue"�����[q|�0^}�9h,B�+a�|�������/��
J��Q����rM�6��cm�/�g@`�a���X�k�3�a@�����bu�|V�Vww��������;T�Z8�b�;��[Fc�vq�x�<T���� }������Q�E������4��k��D�]�5�ye2h��b�����<��R��e���[��Ed^��-R�Fx��g�������R���vdy���v�<�Ne�T
^P3������=O��*c���{��r�Y��g���)�-2���T�2�oF�+��^*"���Q<^��g��U����z���i}�r�)�f$��j{������bYD��Km^lc�2�(]q��=o�Y3�n�@7�v�����=%��u7M"Fd^�E����R�G���0w��Y"Z�c��-����g�����QRi�����P�_��k�v^#x  U���54N�yt���j���GxB��������J����3�������TF����bXxV��w�Q�aE����je��&��u��E=NP�E5�-���j�H�f�����iXZ��<&��w#��z�����63������$R�z��$]��%����+lU���,����]�~���X�`"g� �$��Tl&�2��#���������tE�p�/6��(L0��/I*=�[��9��`�u��im���6�������p�V�H��fZ"&�3�q�A�f�}|��w�%��q"���D*fZ�����-rh�yG�	�J2��Z��+Eq�e��L��$ygZ�1�:(���3-[T�lIf�P���[fZ"�D�,#�3���h&�0�2d����w1���������i��
�\QW0��3-�w�%xa�3-[����0�:��3-�8�:(���T�e���VKf����H�+�x��
��a-��l��%n�.�b_|��s9;����b�K��v���������J���~��h�ja#�A�/���lf���i�xw��E=��A%�wH`#��.�;\#T��������j�LJ���z���.��������L�����,��)�|mT&5��l�C
�;�!m��w�[s�;$����e[��xg����e[��#���7��y0�8�m��/�����;���w�+�[��x�JX���9����[�3�VlN��s+
�����*������6cY��o�-��b���-F������~������:��O��a�����9�g�
y����a$i%��[yg��*�>3g�����3���C��7����E9�T��/^hG�;O�����2��[��#|��L����k�a&���Em5��N�����y��\+�)�Q�ic#��Y����s�3���b�}�K��>3��1s>�fh��v���;��=���U������*�3F;���tf����rD�3s��C@�~����4����>�������������U�c���I���Y{s��E�/�����9*�������d�c��D�Y�9��e�Jt>��M*7�Q�) ���s`����uP�Ko�ClU5��_������9���o��RUe���f��w*��q��O�W{����e������:$����y��w��"�������m���b����V�W*�D�eN���j�bN\�2�v��,����3������N5o���G�����|,�8�|��/����[��x�c���8��c�����OH���E�yDG�W�����On����#�X�A��������z2%�z��g�����QD}{Oq��<�G��{����B���q�2�,�)g��>B z�o.��0�7�������5�1�<o��{2�Dj���u��������\t��r�e��5�Y������G����T����<Hm������r+;���.�m��'>NL�}2�F���.3�W�I�@�\_�V�-&��f[o8�?�\`�'��WW�=:�I��c�Q��2��b��JEP���?���|�����O���5]ul���'s�������H���#w�$��]u�1n��~�w���rw3�rL��"/��f�eM9�����N)��f8dh�9������i��d>���/�?�����|s${�d�����P�2�j����T�Rs*������I�}��2c/�}#�/�1�����F~\|�)�\���-!n�|���?#\U�"V���{����8{@���m�;>�I��v�|L�%}���!\8��a�_����Z�����M��o��)���D�����1o;o����	^��'�J5R�m���a
��O���,t�.��u�#�U�;W���O+R���*9�U4�/�U�����Q{���a��H�Q�X������b��"�R�������J"��k�~G�V���)K�q�����)_nV<c������zm��:�e���?8A2
�x>��s/���8�����g��E�y<��p����������U>9����e�[���O	d�C�6�DP��\��"D��@�x��5M~R/*Q������,x�G�����y�K��oBYo��|Q���"����u����s�x�[���*\6��P���k�����k����]�%��2	�H`u�jXRc�b����fq
�s����89�!��^*%�CV�8i�Hm�H]u�U�x�������������NN�B
Z�z�:�=>u�F/3l�����(��S��}�!�U�x���*�P������uC��M��a�2cS*r����� ��:���uZ&�*���2������rH\��'�
��Q�KT��7�I]>uk��VT����� uZ���kHzY3���w�6�������� ����
�i���/��2�f������	J2k��-����C����N���f'��%}����7_�:�
�����C��\|Z&�c����{%���?��Z]��8-��MvjQ�$���}cE�/j��+�/��JxJ^��?#`�x@$�
WNGN��A������T�j��,/��m��3^e�v�#SI-��v���B�d�&8���������C�]���%�+�$�������v�9���]��M�f��f��h�7�W�C�`�����7��M5����<�X�.�nE%��,�6�&)�t�x�H��=b��\�������$���K5L>�d��v�v1��d�N�!:���]j��8j���q���v�N�vS>�#nv��
��1��Rl�n88�]I���#uy;����W�ZL-v�-�������j�v���~���jY�c�\;(�3�T#�f���{W2����C�>u�L�u]/+�����b�����c��"��2�v1���P{�n�+8">3���]��
QN#R9'��R9���P ��
�X��z���'����_^�y]���VG�u�X�6"�Kp��k�Q����['#�������v���C"���s�vm���������F^9�m(3�����}*+�Xj��c�u���Y^^����~����6v�2�(.�)�� b�?"O�%�%P��:���%���-"��g���1�)��^g���T|9�������w������k/T��5�����9��k&0�����f�]��9�p�������	J�
]T��T�q;v�����+��<$��@u3t\!9��\����]����"��!h%Qj��fxb�j��O2c�{��v\���"7k��P����������4�#k��<�c=F�,|e(}1�k<K�l����W���E��uO�ei�63�Q�N����P��� �a��#�]<a��m6C\��Je���@9;g������I�eG�����6�����i00[�9�m��{���Gh�]#�J�'����\�C%r^M�+ ,[\\4���g�(��~����V$Q�C�o�y��_��&�H%��]3b�[4�^j�T�n�io��^s6�l%�r%7�6LR�g���}��$�$�6'�/�
�t��B�t[��(VT/6y?��VIu���e:��S;�~7n���[�Xm'���=�3Z�E���O�a{�eE���uD�|��1f���h�-�w��*~],e��B�=�6����u�t���������#Ja
��.U������lP;�!��^|G��RK^7+��s!�0��e����Lq�$j���3����u����b�Krw��nz�d��@]�i����g���K�������+S�Q����d��\��u�lRyZ��fu��S�:��@�&5~�B��D-���d�wl5������2����W�������k}x���/�a�b�����L`xr�����z�K-�T�q�u��_���e���]_L��D���x=���{w��lif!��w])�boY��{���k����u�����<�m|�����k2��X���C-�e��l�Q���I��,E����${��b'���e�630�����ZZ,��\�����nvK�J��Q�� E��������KiH���C�/5
O�y���/:�#P�cz�=�I�����z�Q���K�5�?�;]Cu�����cE��������7�l�r�=}�

���vd�.������b��le��`��"�SqqW��e�c��-��Z�g�r����d����(�H-.�����[B�>��� :�^7���cfEU��7�*[]!������E���'�R�!r�Gj�o=��:F\S�(�EM-:'�uSf�q:�o~�qy����M��$�����6v��	��^[��y4���w����)���n�=.uy�6�%E�/7&P��S���f���/7�H<�|��^�����s���+�_Z���h���z��CE]����i���+�6��A1���Xw�Tr�����g@�o�x]DuD�4�l����_j=r���������}��h�B�Z3�����1�PG|�Q��^`�l�_uG'&�y��2Y��y����;�'8��������8�:��k�_a�+�z���`S[�MCh|�u�Om���C��_������`�C����<�T���0�y��8\�Dy�����.�&�b���U�J�zBJw�lW����uX��3r2����R�2�ka������;����yi�j�o�j��[V$�,�/���s��/n]���N��f�x�>��o�_�MRK���J<j��Z����I�����0Gg�3w��\���3tf�R����\J~5��Ke5���P�HE�S���m��PG�Z��_u��1j�D���m<�UbY:A������IF_�����F�$}��P����l=��j��4��j�gD�y����}W%�h����?wsNN�x7g,����9��n~�����Ov7G�J��9���)����9�~��o�-����d�����3���[���~O~�$���K�����w���.�g������y�?�.�k�v�)������2���G�Vv�����g�j��@-u�Rw���.Pg����_����������k�z�U�����]v���79�e��w�4����8Wq�+7���7np�f3d���v���}��g?]���.���]�����Hce�C�.0������6�����?~�����]`sd���v�������os���.0�������*k�~���V_���kX��.���]`�\����.�y�l����F����O��|��|��m�'���S����v��?��?��]��o���������~�s��{^��o{���xI��x�K�e�������c�1L�����sy���s�k+����r�������.`�5�_i��w�~��������Z���_�"��_�����CB�L+�]3�4����,4���������������60
3�X0W�Q�X "���!R/DM���T(
�F�D���A��|�D���(���5�JC���P{5��cn0
��R#����v�?�,i�0W���1/���a�0{��8u��g�'�������%wQpWp]pcpipo�����7�?�9�Q�i���3�c�������#�W��Vw
�M7��W��!@�����#�M��-}�O��V�������&����������2��w��E���Pu��T���?�Gb3_i������'v%�8��imU���^��P�C3�L�o/{Gv���9N���G����j����K/����r������c]{�����H�|���v,;j�����z�N�2/{pjbz�9����^���7��+E�9���������U>_�]�I�;�@V���I��K�N�����^z�J����?��DW��W���5�vy99S<z��m�d���3(Fe��q��3
�fh4�������='3��u��*���7����:����Rwn���0�j����7]|����B-c�����u�H��y����2j@�R���u���Q�w���>T�	c�kP^s��.7�����SlRk��@��~�v�
�}]���
S�f��9�2Lbr��ZE*��.qR� #*������!s��[]���MU���Q��)R�m�H]�	����_�*��ul���"\fT�4��lhR���T���	��������\�"�.��A��h����3��H�
�Ht��B;op1x����wb�c�He������w��`�g�<��@�C�x<��n���6�3z��x��]S�J�&m��`=H1^
V�~�_4�U(�E6�,�-��|dX��n�1�&�(7���6E������\ER�;�>l4l���g�H��R�Yw�jn�#��5�����{E4[�j?��������#O��(��^<0hv�/c�(W���F�iu����	��	�8���w�o�!g�*�|��6��M�U�$��4�������
m�6z��
�K�{��:Ej/Q8�����$�xB�Y����j������d����\$��>���V��U��k
U�{���<j�6?������;0V36l����lRI��QW�q��9~�5}J���oHg����u��U[������k�!�c���/_/wrLU��p�XMdBTn@^��eE�s]n@�N�)��4��=#7���k��U����M��N��^���z4�����m�������*a���d�
�q���.��a��f8T�V���}���U�M�V����|9+��#��:�-�4��h@�n@��+��+������h@;04��-��l���`���S�5�a��x�2`�3��0D_A���`0���
0��t@5��V@uFj������4�h`�m`��w�H��C��`�mr1���P��
0n�0">^�Z���!������7�`@�l��c��`H7��g�����u4��`\*�?�8��2���0�Q0�D�
!D7�������t���(���67�L�PfTW�0pA��+�U��/'�P&��vq�`H��>�m�P��o7�X�T.����V���"�������|-���R���g�=�(�Y�C�}0���AW�qv�K��>��g�`\]A��/Y�!��`��8���+������U��a��u�Y��q�X���1����/u����W���R��l^o����fo��T�1�L(6�H������0���@$g��a5q������x�
AQ�Q5������2Z�-��,�^nt�h�����P�<D,VWD+RU�G�U�)q���/uD*���������"���l��#���Z��T��5��.�\�T2x��dF7Ny�iRf����l�l��2�e���.uX����	�sR?
tl�\�p��H��n?zGT�K����c����N���n��Y�%��`�w����d�����	�'u�vNV�n�>;����'��������t��$������K$����Hf�/�7�v�|iI��5#�d��$���+�h����c4]iD
#��B��T�_Z�\
�<%��94,�������?�=���z��3���K�5�O������e��j�������
^��y���[W
��}�gg���T��#���K��Z�����VMV�@+ivK��@FGT������b������QhK�}qh2z1Pk�=d5�&����/^M��	���u���*�p�5��p@w[�m�6�x'��`�K�_����a[���`�5o"C;-]+*�c��G�<��K.[W��_2	P�D��J���(O�y>�����CxK�,��Z#������������h52��4{���_V�]�������p����?��Yw7�_�������r���f�K'e*
�����	��hm<��i��h�Cuy	���q_��g6,)�j{�WA����4�yZ�f�3�Y�&�zh�f�L�L�=f���
�r������:	YAZ�r����Ws�c������t;���*�n�)����F��a�X��l?��'�����PI��uuu�=�]�Vx�=mLG��iS(6����.Y�j�5�|�X!N�r
���q�(Mz`�����.����j`o~X��Wi�]�J!j--EQ�8K���tY���f�7����L������}L:���X����nA�yM%%�q�b�P��/E�F�����|(?9FS���l���A1P;jr}��O��Q���>K�����5���������E��S���6�N���;�t���k�#���kY~�C�WX���q-��Ct�080\/G�5���iZ������4.QP��<�8�\6.�p���s)%����A�/t���8��9	2����?!I?lR��'��q��K��W*�����%s|:
�D�>��l)sA���i~����jb�������_�yXZ2"l�O�`^�����qr
X����	��������7��q*%�x��x��1�9Z�������6�7)�W����6��P����F�y�"��������8h�r/�+w'�����������<7�+��/��q��SCW��D�����'�3��-@�vV��2&��Z�lG��$�����9aV��ya�m�P-PS�����b��Q8�;���
cSIwU��rx,E5�I���(����$�=e�V��\�9�uU�zr���[.:z�H�h�H�������}��Hyy�Si���\�C-��u��xz�u�N��t9-�6�;�[�����?X�d@�����O���j5�V��ZiX|Z�!�Y����^�-�v���J����q�:�����F���.��Ua��d�t�S���
��>�t��9m����:�{pV��YL�E����+��N�-���tw���Y�'i��^���0��2b�-�V���4�����FZ{hKz�$�%,�]�����j������)����e����!Y���Ot��
k+�E�$+-[;������!n=�Z�]��wKMdB��\7�����a�6;Ac�6���*/kZW������r����;T{�l!`����������|����n���C$(�����E����.����b4�`���:h��/�O��](���XG�j �d-����~����7�������e0 ����<C{Jy�Zz��
����7K����D���\�awU����U��A�;f����Hf�A~$��h��B�?���	���O��m
��5�l���\2)���m
�i�M)�g����Io����V���C@f����+�}(j����r��R�b�.��0|�]�v�_�������������R�'!l�_Vg����?K�a��q�A\Y��1���l5mF�jA��.7go���k;gx����3�(�f�����}������]��/�ui-��
*����i[�57&�;{�
���Xo��8|����/v{���<�%�f�l�9�����PIk�g�4����umD�����v.{����"��s^{VmKH�U-;��3<Y'���Ka�5���}�������*���������|9����%����J��N�9�������k
4,�����J���A~hu�r|�Gu���%n47��aX�V��a��u&�k���]|h��hk�%nZ~�o-
�%nE^@-q����uP�S	mq������k?��|'Z�K\g���gk���'��A�E�����T-ti���9
����J�*�\nloh�.q�5=�z�
�8K�
o0-q9,�*��/q+������s1_���s[��GK\2��Pm�Z����$f���mMZ�&-q����`!@i���]�Vd+�L}%�-s�"I���4�_�P/��:&��C<Ku2
;��+�i�\��S���]o�`"���+�)w.l�3�@9,�?��
B�O\`�e�������/C�������V�V�z�%�N��m��e�8b��b�����[�a8`<�FZzhk3��z���f������v���\\�[�z����r��$|�3i���R���a�����u��8Eip�=FP��o��~�k��rX���+�EE+
�ST��S:}��%%+6W�\m�d5a�5�������{B�IZ{�$xBA��h�����9���*���F���ye���'�S��hs�4�qO�,�-�)k��).����k�S�%to����������=�C>R�$��=Ik�P�[�i�q����=������n���}����pI�`�@�����}���I�������T�;\���-�I�=�"��xL5���'i�����{�$�5mQ���Iz�2' BL@�^v{��PO<l��3gsL@���3��9<P�<���a�3P�h�-�@��~�i��	M�w���v�L2=q����L��t������3���Z��O$�=L2=qn$m���U�h�N@	���������z�yl��g�S��@�)��������HZ�P�lK�`��x��g��hw��g�g:B��D��t�0��������#B��e�.f��/b:,����B5�����|7�rO{~Fx�Y�M������;5l"{�dLZ�D8��� ?�:B9l"����������p��&�8�B�g���m���e5�D�6��p��&����t�M���������}�q��8-n"������E�F���D^�#m�6�'�	w�@����������v��nuZ��i�m:^����ia���_z}6�^��D�������`msZ~��AD�&�t�j�xDD��8d��M$�6���4?�8�����^�Md�T�	>(X�-XO$u�kQ6;l"{	�H��$���
4�_�����Z8�����"������x���hXH���J�o��)��R�d�:����������C_:�������Fl(��9_���Y�x�-Z�'.����	��^e�-��Tx4_{b�������31��I�~h&�'�M!#
���fWM������������K�5��;�i*-��~�'��a�Ek_���@����[���fj��M�u�l��B��K$����e���K;)���Q��L��h�D1��������u
���
���.�D��\���+KX�x[��cK�}im3���4����6�N���*'�q�n�I��(�D��.���a^���.L����ht%P����C�|������DC�pode��"�D���|�y��1C��7��h�������[��d�������/�3�w�����G�b���8f������=h��6#���!�N���^��G�]o(�z�a���Rc�0J#��d�8;;i�S��a��V������S,��D�����k���Ak
��a�������������B�d3c�G�1��[�o���o	���j�k�H��'�>��}s@��:��[
h�=E�S�D)P��c�cfKE���7���Z}��������,���lE>V�z�m���_�s�>������H8������������IG��/�h�yj���9����d�]�����e���� [�wyU+_#?F�g����� *��a5|���i���Sw��g*�v����@81?�\�����E�F�x���3��p��)�A�3�K���h���x��p])��vE$0t(����������&V����:�q�����Fh@4�bZ{i-��kx�_lx���f8�:��#���f����V8���he�Yg������w�b [���{<T=,3�T�y�,>2e�^�o�6����>�U��O8,�0=]���0��]�&�K���]��������|w�T'^�>3�O�����V�/�7h�S�@�&�'hfrj��UJ4{,�������]�e�����k�LT-�\�U����N
�F[v���s�xAi3��h��Y@A�-���o�����O��RDs��Q
���K@�5i�������gW�s;���O`s9X��n�g��������ME,�R���V�i����7z�x��N@������Y�� `�'2��8V�K���F0K}�5X�I[�)�W�������Xx�W����1�M`�������-�p�r�:�M%2����ro��N~O�M/���9x�~�9��8��&���]�����AB����|������q.]>�Jh���08@D���:K�,�:�+��[��UmB��6��>�FVl����� m�(Wu�\l-U�un��a�N�\N��#�f������B5c����8dE��<u�h��px�����f������F;�����9\�����RT�}W�K+����u'����w�f��k_�!�As|�m�����8��4��h�n"���6�w�kY�k���&���M�����5#���nk�/8��&��/�7�l��&�T!}������U:*��%(s�M	�w���V����'�fgEn���a\��]k����9�6-�Q L�[��	��)��M�}�t��C�R���t00���|4A8�o�u��&��g^O�!�#*u7��(�:��@�� P{�Z�(��j`�)P��h��Y�l&?`H����m�q��L���B���n^�gW
uV�Y��|7�p�����y7�M������yu�������������w���t�RH��%����i�����ra�/���K�2\P�C�����S��P�~�>����Y��K�n�zm^	�yuX%�����^�z����<O�e���V�4��47m�f������3[:W�� yZtX���i�i
[�O�&��j{xZj�)&�i���liO/�=l5�T�y�,6���+��h}i��]O�����_)��K�o_�������6�����=|�����jZ�G���=|��5Q���hv�MT�d����k0Qv �9�?�%h��$��XW����r�{\�uN&�~��z8M�n�0p�>�]�iT����Db+����L������A��������d�$X%7-���������QO����������on�e�R������"����G5�m4�	�,<I[������'!���\�u��v	��*�����)�q7����
	}'����}8P��F�-'u���Sj�������s?<[��9��aF9Z{��=�@�X?�@�X��!����*���A;�m���c���:���L�1=Ol��L���������H�R7�i9��Sg��]���H4��-*���anQ���*�GZ��I$�L(�Cc�5�F��)qID�"���.����R)g���j������j�g�Pgm�����3�����`5�yQ�x?B��!mU%X/m�#-�Sog��F�^Z��������D��lAY��W���[i}>C:�d���V� @T����R��j��N�X�������\��s�BQ+����;�x|X�&����5Y��?��
6�5`�=������m�`�acQ�#���6��V
��&��6�U���g^A��Q���������cZ(������������V�Y��@���19O2fT�i=�����i����R�u��t�x
��t�7-?<e�*�����$]�V��Z���a����6�?4������	�r�j�M@4"m�\��G�����>�yh|��a�>>M�1v
��0�M�x`^���W������9�o
��)q+�,�d|�������A��2>;��8J������������r�{-�=H������g�N��cpm��M��Q��h���m�!�������h
�z,��l|��V���T�� U|��.���B�g�q��m+30��hC�H���`_���Cc�j����)=�K��y�M>�4k�H3	xk��NK6|���H+�K�akEqo������X��8��s����������{ja@�2����fM�Ju�i0�D�+��-g��#t	p(����q�������7]�ge;�r��B@V�@K����eurQ�BwW�qM�+B�������w���I"�����QT:
���?.�f��B��SN��:��]aR�Th�Z���}�4���d��h������6�������
���iIZ	}����rc?�;��`��z��iV�/���b���u��3gNs'��r���!
�_��Zk�
��������^
@���x%����b�H�����L26.eX;��V�x�)�/7�F�J�L�T�D@~k
vg�T��\�Y%��"�<����&��s"\�2ox(����e��_�,��^��v(��Mh`��}F���6������P��u� �D@��3�,�g��� 7�P[��tw�[���\�\��J��DZ3F�1i���|�Zw����}���������~q!
��v����`�y����A�����,c�5]V����v�����m�`�����?�<~�t����^d��^Z�u���;���&�H�9r����m�
sd	4��K���,��	(��I���B����)�!"�v���W+���,s�(�6d�1(���K(����;��:�Z����d!�?���/������k��4��|��Khg��m7��V0��rn�`/� �����p���x���_�>�� �U��	B(}�������������oK��w��������W���������?����?9���s�����[��#
��?����@�=
�?���������������(C����O��{�(�O����@-�S���)PG���~
����������g������O�?>U
��?���}
��>����@��}
�?��=�t-~��Dc ���!ia����h����aa����QX��l�y@����_��G�>G�������D4���A 2���~_�+�a�}����~������S`�����������D|����a�W|��t�_�>��}
���}
�;��S������n�������^��_�����������������|
|��S���O�C>>�����)������?�|�������?>����������O�?�����O�?~��S��?�������GD>>��������r��i�����O�??���Gb?�~����g�?�~�������?����i���O���t�����CB��*�G����SS�,4�����������b���40�c�d0����
�C�a����b�9��~�@P8 (���0Q� d8%bi"���.�" ���!l��E��@��LP,S2(�������T�����JS���P{��304 0&0,02080>f�~;f�M�L�L���:�=����q�����5c
�J#��CL�m���f&��fS�M�}0��z{�S���
��]��,�B.{�7�@��>�?���;����4[*u���lu�����rz���V+����y+��Z�����\��������C��������Tn��gk}i�zg�-zOx�U���x-���D�������ewx����"0������^_g�vV�����K��C����w��N��Yu�Z�l�����3����l�4�C6Z�X����vzh����.M� v��a��W�!���xD��7H6`��k[��������Z����]�}�-�{�+����������:d�	��QZ)��iK_O�(i����&�#�5h����Lc���+�=�UxU.������ WS�[V������������s�^���H+/��n����jK��0���Iy$�fVZ����<����a��-j��<��8�mi�R���1+�3���������7��������`�����Z]���Mh/��P�2���I=�z���HC%z����fP�3�����a�z.�Z�?�%�����^R�����T	�����0'�l*�M�%�����n���5P��M%H6���k�`��hY^A������rk��=1<����a��4+g�6y�� 1Z�Y���@���zmhu��7��<h�+�_���	��l���hm�'�j��A�3y{l��m5��Q+��4��Q�h��3_O	���J�����v��f����$K#�r�R���lC����T��S&r�-{�hv���"�����p�:dp�N����v6�v�H��w�l�=�����������<#_�������Y�|Y8t�erg��fk�J;�������������&�J({�C��,���:�����p&\3�vv���7�����������Y|G��rSY_���]�?..#�;W)�_)��4v�A���.��2L^N&�O�gP�e��ieeX�6Q��x�������`g�W��r�J
��/������~Qr���e�G�`�:f���2L*
��y�r3(������C�����0eXr�)j�r��fw�wZmO�V\��vY��+�+� ��a�2��%R{�*�����NW�u����2,�O�2��j��{�2L*����;��#������cX���)C�C�)���Ou��N���Os���:�w7�~���nKo�W���>��ui�I~/�m��I���p�I��<�O�����#
p�;�G��Aj���V��o?V�4c���<����f��������<��5�|��+�����L�|������f��������KN�x\��t5I���������|T0>�Z�sD����M�{�$���;bOj?����u�0mM�{��p�-������4��y���I;��RmS��5!��e!^�����=�95���[��K�|o�&���Wx�<d��/6��9?��
���Y?��M����}k�/�������7]�����y{����Al��f�#����i�#3V!p|i��lg�%gN�Rh\=Cfw�sa����q�&%�������P'-���a����3�
�
+��$�3aC�z�m�?<��I>cWcg��	n[��������q86:��U#
@v��Z�6/��W��g|�����u�i�&n�n�rb�{���������u�:����dUj^�lo��j�C�qrlt�F��[�@������&m��v�����Mv�E-�#>z���<[���}�% �@[8�[����Z}pi��T��k�K���s���<���������6z�'��[S)vP�W5�_��MM������������z��\�w��y�����dP�����c]_�������o��ui�X�7���4|����cM@�����X8�`A���F�u����FPuiU�7#��4����dMA����&� k�fk������l��� ��d]_������oF�uiY�7#��4����dMA����A�GpU[}5����D]�� ��d]_� ��DU_� j�DM_� j�DM�����2��I�����������q:����c�G#��9���$�v�yN�8�n���	��bw�h'�5RK��7B���]m����v^�0���H��
�qG�i��y����=���������������g(7+XHx��mk������<&��>v>'�d�j:Z�=@+�V@�S�bVgq�N��$	G���>���7���7 c8��1���P��q�^l�h����i���+�/���a�d� 1�H��g��zZ�;_|Z��U�!���)C�������2dK�����2d[�S�T�+CVO�2X��U�l���-Zzh��YB���Y\r���hy���P���y�A|1exx�r�*��'����2�se(v�~�!�f@�o���i#e��s)�+e�KXT�>�e�0�I�d�!�
���<x$�.P�,%���&)C��oA�`�D$��f)�d��py=������@ ���E'W�"�~
/�2X@���P�
|��n.����!�����Z��AK��V%�P<�D�/A3�-$��
����EZe(��Q��3��Ae(j(^t�2{N����f@�o���i�Q��\��P�
K
e�+X��2�����������pe�+Qx(C��6zP�b��P�����@��x�����yT�S����V���w�P��t|/���J��=�yg�OC���r�H���@4���)W?-U�^����@�$�c��}VB{<�&��>?����r����`�g~��o������s�F*�R!��"z��!��� �3�r�e@��Z4�S���eJ�E3�\&��������@.BS��#�vK��-�P�2%���x�]*_xJ,{�KA����:���R�����uG�2���U����-��<���@�2a�@�Z5�m1�����h���T�+�`>W��Z:�e����-�L-����!�rJg����U���	h#?�>����h�?Q��	NK�5S�4�u�T�����i�UW��S
�5�g�bZ-��!P3�[A7�i�L&x�j��OX�y��H������J�wk���;(�\{{k��E��O��!��M.[S���0�&�q�7Y'�om��r�@c[Tn5���������(V�qZ�Z'�2b���5�M���%:h�'�:�~���4���a��qV]Zu��s<������S��keY>����#-=�i%.A��G��h�h���?mq���]�
0���h�`��e����]s��[M��s����'U����<��kz��()L[���%�Q[D��3Z�����6T����� �OV�"M�]���x���
<��o��`���aC9����m*�
����S��,�P����}����Vn[���H�����~�.BX�&2����C��f��D_x���:������>�p�7��}AHw
���/�l�o(k��4Z��Fs�q�q����������H�@��i����U��,�h���J	4��Q����H�!��Kah������f�j����{VyZ��2��O�Pt��/�����f��`F���<Q<E�����5-~���fT
�S��i
���S�	-;�~�'�>��o^Q����Yl|�a�U�����`~����Vn5k���h���3��S���EF�y D�[�Os
4��l�.�S��x��`��\M:�Gsyx�K�ir���j�i���h=�f�r���t���-�D������te�����������������')g��&h�����8Y��g6���s������/HQu���`k1����j�4�������'{��*�U�����7vmu�fMK:���-&���\v\�������E���	���v��������sc��s;�-t	��?d�F���3��{Y�1q��K�����
g�b�r}�I��y�g9\Y� �mg�����sz�p���8������su!�`���U���D���z�h�)e���Le�����P���U_<Wn�G�A^��x`ZgP�j�]�"����J�6VP;�2iM'�z���W1�
�@e�����|���Wq��se	�7��\����������@�J�y#S��^��yt����Qse��7B�g;�J$�jA��D\Y��&���P,
�+���K(�Rg=���8|}���28�y��A�w�N�K
����VgP<�@eh0�BSO�8?�xp=�����
��$��m������������P�?��Pe~;i���9ul�re �2T�R~0�]�]��P7��7����F�3�X�����M~hO�^V�������24�RP�����'.(�WX.�@������K(T�m� eW�j1�v�!e�>�����N��8|{z��w
�����|�U����"n(�xi��E��
�@K�hza��NX9��/=����\:�"�X�r9/]"QY���u�+uUk)�+�G2�Z[�G�>^ZF���!���g��	�m�����Z�\����,yAt��Y2����L4s���]�V�8g�3h��t9�<��r������m�
I�X���������O�8�)��i7��Zo?.�i2��Z=p�� �q�6���.��W������r���
��@W6���fo���Nl�n?�J;�1��w���$'�m��Tl���(�����|�S~`�!����q������������p/���5�@������-����p��+N���LM�P&����`5=�e��i>��:�im�`�@���&-A���������-Z�Qkd}�T[o�n���r�����N�8Ay%������r���_�2�����^���@��I�ht�M�4�� &��z�un��"���;�D����\c.L��7v��lw�Q;������@����l�#A�������bn:�P���~�,������9_�	�46����i~j����h3�����+�E���,����V�rt�Q�v���M��t��b`n:{��"h��a���,��o���a�D��nY���$+�Ds���F�����{C �!�-x3��3��^e�rD���K�j�g������)����������>���R}X�[3#%�~����m�#�����j~��sj��r������y�b��t"�<�5��'�#6{�O���P�]b$5�9M�0�������-K�`T3���<���T��b)�vF�����n'����|8�����h��,���8����#��������0r'��������
T!�Y������|�,�4�lI"U>M��cD5������K55����Vu���6��?�p�������������y� ���,<�N������;?[������
b����+ ��]����4YW�	e��{=����m5���"xBvW� +�6���9xCvwh�F��6^�C���m�]�]b pG�)�}�@%X�������y�`p���y?]��������#���kb����,�P�u!Pk�T9��tK=�����faC������[��t��f��R����*{�����.���K�>}�w���Q�P8Zu���q��4zE�K4���3A��d�����L���x���uQ)����x������uD]j��
:P�l��(���T�����~=_��n�}�����?���8I��9��]�j��S�G�y�l~��5�`��}����.o���O� �����3|��i�9	NC�(-�:R�r�_���8 ��c�~1 5��
ue�\�@�#R{}��kVMy��e��P�$h98�o;�-E��n�_�XG)Ej���g��O����[�.��qf���tG��"�f��VZ���;���^j
�����/���B]�mWzz��S�K��u4��/����6d�89������+m5h���5��j��! ���E�4����`'��<.Z�'��b�6�o�vO9=q�8��y��8�N�{���5I�^W@���Y�k��5���i�T�Y��*/K�j�,4~�nP[���w�`�3N�3�+�������\�tq�qQ�Z�Q�����x��]���$q����O��]nS���C�5mJ�w�T������g4�wy�x�����t5��s�$l��B����#����1�+�T����������fG����-PG�������N!��]j�/z��M����2CN��(&��������T��!�y&�<���T�-�[	���qcY��Lj����:"�w����������p���o������S����!��v
��~��~4���MW���n�ZV:��v�
�x�.�+�7�����AJ����7~�9ikd7��L�AZ�4R�|q���3E���D�Q �x��D���?*%R������CY;��B���f���as���VG��y����0$&�b(x�^.1��J7���������_��7���p�z���[N���}�E�E�6m�����N���E^�p������L����qBn{�����wyyP5��v��*^_l+�-�^�����:��S�J��T��,��9�Y��y�����Z����6c�G�����"7�_>����k	��;J�H���r�}���Kwf���8������;�pofCT99��V�n��(�V��%�������������I�	��]�j���m�g�,�;�~�|pM@�6\��;���t���t���&�������?t�D������:]�vW����e���]:��#���H���y7��UJ�:�y'?k�9+������[g����/��lSwY�~��qow���eC4���~?��	�o�a���f������~���>��!���%�1��=���I��BwW��>o���p�w�]���+��K��W�*j>q�������y������J!N�q��d����-�������x���}����u����b���+�7�8D�8�����f*N���+�l�+Nv�`Pk���5����W>`(��6�����A�Q�m���ohn����;��K#��n����H`xG�
�<uw�[�3����@U���~EN���T���0������fW�"nx��cn(J,p^%���G���\����x��Bt�a/�]WP�"���b�@1����c���%*��#P��L�)PU�P)��|O5*P��)P�X)�HA���GY�*�c��7B��a90����t��
���qs��K�!��������W��J����'�=��������#���eRS�U�;P�=����#U!�T���O�`d]E�zTWo���O)2��W�(��a�o���&���&A������A���G��h3�(/�����=��F�A��$6�~���1P)����;��	T���J���3��W�Mk�A�<�i�U��=i��9�!����7��6������z��9�$���&���>���f�i��$�2���F]��~Q!^����~X���{��������F�:��9�
����vS�y�����
��j?�:���{�d�����8��#������i���ib�O�X_�!u)�n8
��}@c��U����x��:?S�R���������O���U��N��C]uS1���M
Cq�w��������)���r���-i��G����N�i���4-�UU�z_W����qJ������f� G�]�<@b����K���<$Hm�-RoA����+�\�S�����nGhG
�dQ���~��R�aSu�J�k�f��{4K���`���6kG��)wA����_�yi"���������������Y���zy��bL���7�r�<R0y,?�V"AP�l�I�c�a����4��,�����-���*G-��������e�UJ'�n��z��l�:<?�Py���
-��M�8��p�e���g��&N���2r]L�p*YaU+�*!�a��+RK���S��!7�F�*�A�.^�����j�?������*wJ�����C��MSY�7vt����&xE/�;�,�,���wGa�lL�����"�
����C�K�+�L�K��T�%IR{x9�nS�@�Jv�,u�h��@��l���^�)��]�R���/��!��`��5���o�
4�vdR�����d��)�_JS��|&x����V��P��Z�j�;�����������%��!&��nYW�%���1y.y6�����@�=�I
Q1��u�1HAVhI�3���Cc\b]�|&��$�_)P�������W0h�
�"[�T���"R�}s�*;�i�Jns���Y��}�����	�?j��Z�Y
tjvwo�+��d)�l��7�?��m��)����R��)�VJ*�����]�2w��}P+�C������Y]Z���(�EP������@LwG�	��#���(+T�-�#U����{����2���}`zWv�}@�
��0Q���w
��Df�+o�U�'1��s	J0���$u�Rv>5��z��T6(�}��ZA�X��}���j�r�l�Vr�P���F�O������r����g�sn��]�I���$7!�"��Yb�&<��a�O[8��R;��3a�yY3R�V�����-����������P���C���%[^�f���G���H]���q�cV�W[4�z?cE^���s�$�����I�9��.�
%���KY��f��PM�����u]�W��Q5
yG�B[D��H?�Q ��%���WF�����G�1��J]��)�������:a\��'v���	���7��x�Q�G4!�B}i��zZ����XUd�b�L<��;�Y�}zag/�s��$�+�F��i�~6�����Q�p���4��]Y�2���w�:�"�L\|�=NY�e#5�5�AY�����|��mV��m�����e�4S����o���#U!�����b��>]k�����2�	�g���q�>��m�g��#�L�B����S���'��F�	<�Ej�/�?��cp��>��j����|��^��O(����E���]=�R�����0{���������\G���a�bc����Q��v�a6`��N���2�����w�Z��������k�*3�a(j�\W\���8����T���	�i��"U��eHI���P7���u�S3���!����R��T�vq������<#����@���~=IT�h�n�N����dox��A����V"���Zj���f~J�s�~�����������%��B.��*st'5E�������@�C��'�I�7��"~�;��e�����v�X���z�*=j2!����bT���E,?��K^��22f��<3;!�{2��������h��"!�,�M�w�&�F?E�����.>�;A�G���p���n����S�15i��BS^�s��#��P}pl�2�^��������[��u-zx07����X��U*m����:����0S-_�4R�|q���f1��hQ5�
�*���6?���HU�������l*��y3j�y��v
u���CZw������M]����a���_���}m�
�G�����b������_�!�8�g��WIH�+]c�+��J�T��_l�^o���j���a���y�����7�;%3G�8�/�y���� .E�]��������M����z����+KZ;����z?��O%L�a�vTZ�:���<a ���+klG�\3��7c����D�����}�%W���:d�7:�����w	��u.8��/�v����T�.NR���y��ff}�8�e+��`�u�����E�p�N/��V-��6�{��������VF����]>Z_^%�;yZ�B�����u��m���w��I��7�����}�~��P�i�e��;��W���e�O��=c�|w����0��o�|������dEe'@*W��,������"Y����w�r��gyR�Q��`L��}��B�q����@�s�o����n�����VB�hy���#�r��VR+����u��(�HM���1�h%y���to����"�x��
��T����w'�U����@���pw�Co|\����ni��A�}�:�N7i���:��g<�Sb�J���P������c�T3h%O��mW�(+��S��!���AH�B������8$�
�m�����
�cR�/��F�E����(�"�T���c,���N�1i�-*P�'������H�X��=�R3-'��+�N��7	�RW�V�|���
�<��A�g�E��n�.'Y6�"	'�����{()��
x�d����@z"��G*yY�,�.�����7I��1��c,�j��Ft��x�z�,Z|��������X������)��x����$���Q�� �c��e��r.>,+H^��;:v�[�d�j��A-���������R���h��x�OG�7��Cm=���].��?�*������$Ui�E�/94�K�+�� ����i��G6^���(��N����k���_�����E�*��3aQ+o�Vr���;
�]�K������h�B]�y�h�������x h�=�j��S���o�[E<��e������%�D*s��LEf����M>���G�'��3�P������4����w�;Z%��e4�x-�LR�#u|���������h�B�l5G|��8��?�VQ.vR���RA�pb��R|y[�8���Z%��m��g������X��F��@97-?xGcc
n�KG�G�dm�]���nS�r1N��L��q�b�\\qT��u|]���=���H����gu�'khi�+F��<���q���K�����$�p!��F��['8�g�v(<�#;�>r�^ukx��KQ���x;���@��q���ZS��U_!�dy�T�
��"�5Ut�<���]��z?i��9S[����R#��T��Ry]�]�x3<U�=t���V�z����a��QJ~t����D�F*P�Gy�h�`*����uE*'��Qal!o��/5�y�Lj����@Q(:_�:�C�K���|nJ����o���CL���Q#U��T:���R�t����*�@+��]:H�V9j����S�9�U�CN����:�����Rw������Q�-��
��N������������_����~U+�r%�A�u��Q����������H�e�W�e��k��zoz�G�=����N��+@m������6|�;�HR
I�����T/���Fa�l| ��7���RR�ST[��:�{��A+Dp��zM)h�ES������#��!���Z����j
4��C����n�]����u�.��Gp7B���
9��!�+`S ���
y�LpVwoU�t���r�K������~�j(Dp�=�+ *�cS�)����L����mW� +T�����.��Gp
\���2"����e(Dp�Q�(�J��R�S�STg��:��L�+x��R�5Dp,;2�*��H�h5�\+pm����j
�i5�Z�=���"�Na~�-��_U�������
9��!�+`S�)�~*�'!���-�j�;4�>������&�{����S�&��.{u�[�hy�*�;DpY�<f���
��|��.��Gp
\�+��2"������
��0Q����
�t��Ca���b���]5s�9bpc����n��.f���z]������/�|�Q��O<���1��b����Y�!M���b������-�!m��mFj}\�Qw��a!�}	f(xG������/�<��K�����}}G[������{%sd��<��������1�����	E�b��?b����m���
kT�6La?���Q����f���T���i����^�N�>�gT���:��������P�[V!-�Y����V�A����_<1{��"UO�����>	(�H
���?�L\�	�\<0n%x�z�hj�m#��o����{��L�6�5R�z�)P���f���\Vu��]��E|�%n������z���U����g����T}�L�$#����6W���`��^]?�K�����g���'����o��:�nr��f4-��\9�2g!U�'P��|�����8�'�
����V)D#��H��-[S�Yh�B����=�k�f�a���L�/�5������l����q~:vQ�����x�).��<O�xW|y�W�T�&'S*���R��#u�b�C����OI���T���m��*-0�!�Y,3�X��1����0��Gf#��I�<�U�$V�#~�k���-K~��a���V�K��E�xe����������.w�_jG���hm�C�WLPy�67���=�1<�%�H�.������?UlE�����
�����yT�&1�SA���R���??#�&
��d��6������|�>86]
��0�J�������-�����nj�����f�:>�i\���wx%}��:�����F��/R<�j+R�!�f=��,,KT�4 �:Q)�:�c����S�����q�'J���d�`]�
��c�B�Hm�tL�����/Ow����4*��Yozp���hHp�=3�s��b��m��B�Pi�J������`x��gs��y}��2T^^+njBn�����wyy�����h�^}��k���!�B^��g�x�#�\t����7^;"��N����N����`����Aw��Dn����*xB����jB�Q9���o��E�?#�<��W����������Z�*�H�c��Q;n�g��B^�n�[�K�_�f�<��6j��8]-�ZU�����t�;��G���n���|��n"���y����i�����^:FN�����a��h����JO��P��������pP����=��k��b�,s>���w^XO�D�Gm�����V�wr���g;�����z�eC�M���/���~d�wH�BYy��wTxk3����w
��g���q�-6b�T;(R�\j�3�=z�nVd�R�7��W���#�z���jo����!z���n^��to@����gx��
4�lT �����/��)�^LZ����e����	J��V�T��P����*���!	�!z����3�\���#8�y�T O����*eEe��Nj����z���=c���C!z��2�@K�M3���{����+�W �<'/!z���}����=cg�#RW����y��1�g�4���V@�F����#��"
4��m���3�fW�-q#�����G�7B����
9����my������n=c�
�3�=^&�!���;{��D�I�?��G�8�]L��=�5S���:��t�����c<�=�W���[�U�$����=c|�3aTL��}��N�i
t��+��U[��I;5��e<r��$�V���HM=R��)4����k�G�����������m���U��qm����B	j7b�A+.�.f�I���4b�����O������'qt����o�h��2\�?~��M���*o���\70�����A�y\Y=����[��k�;��y�;^��%�	p8��?7������8�3�2��1[�G\�����:��=qY_��i<�����![p������U����x��85��S���#A����j�r:�g���p�eu�><p�����G��>�K�����Q%����Qe��f@[�����<��2]�D�rtt���b(~�����Xv�K|8�`��]�<
�i��fG������D��/��]���b�3x�r���%��~��#D�F��}�w����P�v����j�n(��`���6kF*��qA�;<o$�Ss�cg���/s�x�����k�zt������!��u���]�km�498�H�w�q�`z�~v)qu"U�s�Q;�RGh���^���^�no�%w��6����h�K�j�T�o�F������$���g�{l��yK���zF;xxZ�J?��}��C-�@��_u8�|���a�F��=}���E��������G�R��34������Z��J�7�,[���"i�_��$�U���RBY����d��'���?Y!r!`����v=x`*����@�tj��=r� %�V��#Z!r��Z����j
��K��*��L���@���������#�!r�yE��d���)P�P��n�'x�{��V��K��Z��u�c��v+pciT�G.��K]��u�r����`�r�	�B��Uj	��=r�P�\0�x����`�����+���D����+��
��Du(m-hh�0J�L�S
�
��=r��=#S�mS����
4=`c����j
����Zu�&{�]�����"���`���+*P�$�����M���{�@��p�w�Z�j����>��sE���c�=r�P�\0�{�B@T �+���@������+��>�QV�@C�'j�\��z����`���C!r�8���B�B���w��T��y��
��6��\�$�[��!����%�������H�+'����`���-;�1[���r������P�/T���X����p�th��c�����3
S�G'W�
jH�k5��9��1#�V�:e��/|n��bNF~��S��>�D4#�����$N�T��>TW�C����������}��2��:o��nMg[�T��^�j����	Ys�*�1��7o(�Ky��;�����?��
�l�rQ���:5q�	C+��<��}�[Y"UBj%��VpVow<Ts����k����TV��RY#U�0�TZ���+_����r�L�cs��-���Wl.�o���fj��Cz\�#��I
�W�l.�q�!�-k����*Mm�\���d.����������,'��|W��H���>��f�Z?�V_\Y�A�������_;7n�H��;�T}T0��"���he�8s\�?a��<0nzKf�k�	f�IQ
����w���>i&�'�p�T-�D�5z��t����j���]��E�l.�f��5������U0G�����q�DK+[��������������7����/Yg�t��X��3��bs�7�o�����Tb�;�A�]�A��T���0T9��
��}1����[����*�7�5"U���}h(��u�lz���8����E����B&��������ri��IM��G@yF�����>�8I�H����w��E�%{Jt��h���[���_j}�1����)��a/��JV?���u���������
���wR�&���Dn�R<���Oe=��jv��6�B�y����k6�|�.]��U9RoA����;���A1���N��KCu��J����k&�O��&���w��hiFv�X��&��T��n.�+�T���N�\C��;���/�->?�3bjRs�kI�Tn�sk4���MW�������F��ao�u��?����3����15���X������z��}��H���A�;�:�a�����P+C��KTn*���J���;��Q�G�,>�?���d�`]%������%,��oP�-=��XWZ���Y3�
�G����<`��<]O��;�[;������F1G�������"�n�[���'����=��
�%E^����P����N��������������Vb��N�Cu^;6^w����kGyy}_N0�[�T�D�kG�E���1mJC0\c�o�>����-d�?����9"5>��_��N����>��.���q���;o�"����N�v/�����J`9I�S�]v�D�T��k��[�b��4{����8���<
N!Q�}�]"�������5xn�~����r�*�U��[��'k���c��0�0ix�}����yE������E��1^V���=�T���f�,S������:L�a��z��������������?:����_������P�QV������r�M���F��/o������;oB��t\E�
4�m��	Av��=[t�.�k��y9���;�+w ��I�{r���}v'}os�wg�G�1/�q�;��@�����UC�wT ���p[�C��a�y�v�ak�;]�>T�-
�.��y	���1/�\���9�����n�y�V��DY�����I
1/��r����Bx�b^x��
4H0�;*�������[�b^����!��N�}��3��b��=R�Q���1/v��"S���q{0B������t�W�R��r�v�������hI����|P��t�T�)e���yy9��!��1h����v:�x%Xz���������#����M����Yj|��G��%���B���LZrz�~��*eEes�!����1/�B��q�c^x�hj�\3�����[�;F_*��l�����1tk9�+����d��T��u�e�6I�U������<z�./��`��D�N�kr�57Q���?�:\�T��Tz����2���h�H��"�Z�P4���9$�[OI�[�T����J�{�Z�kc�<T.w���c�fy/lh���L���%:�*���Q�U���%+Z����Ie��5����9R7
��L�?e�w*�f�U���%x>���{��hIQA����f��~QR�a]�"�,v�k�PG�#��F���.8���5]�7f�&x�l���=��<��WGIU^r�q�Va��v��c��Q��w�2>�C���W%Ny��<w���-���%�����{��7���0z�N�����~�uK�@I�8��;�M���~�b{\q����:�U*�k��V�����������c��G�=��q�&{��U	q�����,�v*�	�zgK��}���1���('_�ZS��{���oQ��8O@r��e�q�6�FMT�k��z,��|�����u�C4��k�p4�Lu<^r�������������2|8X��s�/���"U��UR�(���W�:p[|
T�]#��)���/�k��Mm�#R��L��0������tL����c@����
����/��
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
125342
%%EOF
v20-intel-core-i7-3770-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20241008165642)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 124641
/Filter [/FlateDecode]
>>
stream
x������������XO�o�B��8��mIn�:
5nTeeI��t������cL��vi������X���uN�����>���>�����|l��8>��o��w�����?�?���YJ���������W*��v~��V��yJ���/�����G~�}r!����h������pM>�=^g_�&�������\��)�R�\�'��+o�������k�n.��&�nI�:����U��k�	���������>���{z�%� �������'���X���V^�R ����:�3���k������L�Yt���W�
���QNg3�u�2@�O����UB=@��sX���=��Y����6/���G}��[PP�W�
���3��,PP���2��
��W]l\�'��k_l\��)��lb(���W[lg���W!my:)�av<�E�,7B����H���'!2]	'��K�Lg���{ �;A���r(D~���.����)D�S����
��V���_A���,D�k���}��\8�}��d�"?�_�,C�<��b8�}Cd:N~�� Yn��� �� �O�\����k�+g���
r�n�����r�8���!��>�r:�}�� �n������� ���\����{�+����r�~�����r�@��"��>m79!���BD�����������'"2]'�����MHi:#y��:~�Z���x#B��w���G��?�h:$�~�!!�=���H��K"�.����8�}���tJ��S"����J��["�n����8�}���tL��c"�<��L��k"������8�}���tN��s"����N��{B�����O~�?!X
�8(�C�}�`�(?��LE��}������"0����R��B�n���S~�O!X�
�8*�S�}O�`�*?��L_E��}�urVd�=��8������V���"������8�}%�4�7����D�G���_!�Eh�W�~�_q�����W-E����������������h�+B���8Z�����+B��B����������h�+B���8Z�����+B��B����������h�+B���8Z�����+B��B��
�������"�����Wv��������B��+?��,������_�E`�+�����
��+�_!�}�`�W~�_X�
���+�������W~�_�]��
���G�_�}Eh�W�~�_q�����WJ�F�p�\�Y�W���"�����W�~�_q4�G���8������W�v��'��������h�+�~�_q4�G���-E���������h�+�~�_q4�G���-E���������h�+�~�_q4�G���-E���������"0����W��B�����W~�_!X�
��+�_�}�`�+?��LE���������"0����W��B�����W~�_!X�
��+�_�}Ev���u�+��������������h�+�~�_������`SyT�7��s�.��z���4�����k_�&��#�`����+���#��u�`�O��Bl���#!��?�����M>�G�;�&��WO��G�����F��_�e������A>��c�|���8�&���4B�O�k���!����n�����,��`�p��Vuw�j����:8R��=@e�F,��'����E����������o�\tm���{����\v{Op����^�	.�5q��=�E�&.��'����E����������O�\ti���{��M\twOp������.�3r��=�Ew&.��'����EW��h�n��N��clj�M>��`� �?�k[�����+-�	�#���\�#�G��U�����cX=����_��n��g�e��.h����W��M?�n�����/	�/�2-n�3�4��m�t�
0Q?���1&�g��+��A����1�`A�~fh,�G���A��)lA�~�gi�M����>}����������)z>���������\�{��S|��nO\��Op����.��}�;��!��s2z�G������2:<'�?|���Ndv�����9��#���7�3|�\oCN�!��s2��G��������q�txbG����>An���	�����W��M?����N������xA�~�\�}x�~]_��6�z�}|�~�_��6��W���V�
�t~����~]n���A��zC�~}`�JG����������A��(�3�r��~����m�������3��6ZE��,�t��~�+��T�*�u�:=�#�~�H���2:B'��|�{]^?T��|��n���%!���*u����	:}�#�/��Lt����:=�#��~�R����?>BF��dt�O�������rZ��9>B.�P���G�������2�>'�g|�|�V��E��!+��O�k�}��~���W�zC�~m3���g���)���)���-��t�_��g���-����:oh������,�g&ln��������[�3h[���M?���G����=�>nCX����v��E�:�����A��mm���A���i�g��m���y�?
�LWP�[�*�u�:=�#d��NFG������O>2�0����M>BF7�d������}K��#dt�NF��\�o��|dv����V�9����A>BF�d������9��#�c�R�������!�u�J}�#d�}NF�����W�g|�|��V�!��)��������-6�#�\r��������M?�n�o[������-�gVW��?�����3��:�%a�������3�~��E��|���3k����-�g��Uoh������-�g��6�E���}��~�o�!,�g����-�3��6�E����cS?�>nCX��������]�#�nY-�����:�#��~�R?��\�o��|dE�A_��^�2zA'��|�\��[�#!������G�������o��}K�#dt�NF��y_�o�{|���Q+��������:�'���Df��}���5>B��Q+�����:+[�#�c�R��%������:&�hc9�����?^8�8.��A�qW}j�k�86���d��7��I��}�f�A�a��J3���%n�F�77��8.^t7+���:m�U�O��	��J��*�k��f������B��b�A����slY5t�m�n��VV��<���C�~�����d�#.�5�@U�u���d%��!���O@d-������c5�s����O�c=�������lcE�3��E'����D�pM��a�*:=,\Ut�����
�?a���OX
WU[D��?�H�E'�k�������w���O�Qm�)3���g����,�pm�CT[tbH���<����-:�B��gW�k�N=Pm���������h�pm�k������������������������{��������;y���N�����U���~������Y[��t��h�d����-�s��E{��k��.������k���-"���kT�}}������-��7������s�L�S��[?�|�w�����7xt>}��G4���>���d�Om�__��O���* ��h����BF��CV
�|��������1�(�~����w���Y�w�����o[6�~�x�C��w���7y�~�H�x�_����oS��!��d��N��������������@��@��o�����?���S�S#!s?�����wbO����o�[�I��������8@��p���w�o�+�[�Kl��'�����kI��g?�������nT�k%�������7�Re���{j�f�[Gb��6�������Q��(���~�M��!�r? �������"���7�z����g9='�#��2c}���f��|�I���.U��B?5�4'��##1��P�f�~�X�8�p�mj�b��Ms��!����R�E<o;�>6F5'��.od�"��2g}2�
 3������
���yN1Iov��V~}��c�����<��^����~"��U��r��'�N[%�+��~&�pU��p��g�R�G��I~t*H_:9�I'�����R?�x0�H_8�3������cP?�t�)I_9��I�����CN?�x��H_8��3�g����#L?�td)I_9��I'����J?�x �H_8��3�������G?�t�(I_9m�N���}�p�O&J���stv(8_9:��G�����B��
�W���A��|��;G�~���c??q:��$�����y��TOp�r��'�$�gx�9:�������#:���	�w�N��+r~��Nr�p����_�m����q��I<^S�/������4I��a��I��F����|���dg%��5��DiN��'��A)V��tMJglJg��tV���Y�4+�
��b��+bY:�������h\:+`]�$_��bE�K�d`��0�E�Y�Y42��2}3�L�"v�X24��X���������,��
X������X{S��ip�8E��)R��$IF'I�S$��"�N�;O�.#by�D�S���I��O�"��H4?E
��$�%)b��DT��
�I�4BI�X�"�)`��$C���%*MQ���/^�1*�!b�:������X2H��X���y#dlR�jM�tD=�lR_�A�T��M*�lR�"6��h�:+`�:�6��6��9�MJV�&K6�X��Y�I��I�E��Y��W��&+b��%�T��M�,���
����M���M���h���I��M*V�&umRglRg�&uV�&�;�I����ZE����M*mR�6)I�II���"�&)`�j�W�u�T$��"lR�d���IE�M*R�&%I6)I�T$��"lR-��MJR�&�6�H��$��$ElR�h���I}� mR���Y�I��I��M*V�&u��~$+b�j��l�q~��I��Q6)Y!��,�I�
��b�&+b��%�T��M����I����d�MJV�&K6�X�T,��bElR�[�MJV�&%�mR�B6�X�I����b�&+b�jU�lR�B6)Yn���I��M*V�&K6�X�TsNe���I��X6)P!��$��$ElR��&)d��$����M�e���e�lR�d���IAr���MJ�lR�"6)Hn���II�MJR�&��u�� �lR�d���IAr���MJ�lR�"6�V��&���I��M*V�&%�mR�B6�X>���M�3�i����9���w�M*V�&K6�X��Y�I��I�E��Y���O�MJV�&K6�X��Y�I��I�E��Y��w��M*V�&K6�X��Y�I��I�E��Y�����M*V�&K6�X��Y�I��I�E��Y��WM�&+b�jS��DElR�h���II�MJR�&�6�H�T���[��IE�M*R�&%I6)I�T$��"lR�d���IE�M*R�&��0�II���"�&)`��$����M*mR�6��wC�T6C�&umRglR�d���I��hblR��C�t��{�;��'b��#K��J�Pr6(9�@�	���b���qB�'8�<�������$'`s�C������=�im��5���	N��$�V&9�Z���KnM���m	�,Kp"v%9�*�	�����$'`Or1Z��DlIlgMK�0;Z��lH���4J�~��#(�;s��y�����j%`3E�Q"�"(�A	��F��h���
�DP6"6<��h��}
�CP��Qd%b�B���M���i������$'`�#K��H�@r6�vv�x`��=�@�"v I2I�X�"�)`�DcP��5���i��I�AHR�"�&�H�P$�"�B�@����]H�C�"��H4
E
��"�8)`�0��$E�C�d ��E��(R�F�F�H+Q�V�L$)b'�p�E,Erh*�����N�Z$��"9{��U��#�X���d$'`3�#����H�Frv#82��X���t$'`;�8��D�Grh>����	N��$�&$9R����d��"E�)R��$I�$IKR$��KRd}�����qrz�O��-Z�NVh}:Y�>����t��>]���t��>]���t�G���`��������
�OK�����OK�����O�i;Z�NVh}:Y�>����t��>]���t��>]���t�%���d��������
�OK�����OK�����O���Z�NVh}:�H��t�B��I��t�"��A��� �������$E�����t�2B��I��t�"��A��� �������$E������A
�O'I��I��O�9[Z�Rh}:IZ�NRd}:H�>���t��>����t�����B�����t�"������d�����{��Y����h�����\4�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N}�Z �bk����@d�����@bE����@bE��L;�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N��Z �Bk����@d�����@bE����@bE��d�"+��'j-P��@$i-I��@ �Z �Bk�H�Z �"k�x�b�u��@$i-I��@ �Z �Bk�H�Z �"k�@��@ �����@$E��4K�)��$�")�$_Rh-IZDRd-�N��Z ���@bi-�X��@d�Z �Bk���3Q�����Zt%�+��>��@d����k��
�Kk����Kk�������ZVl-Y����Z ��H��Z ��H��Z ���@d����k��
�Kk����Kk�������ZDVh-Y����Z ��H��Z ��H��Z �m��@d����_�*��$�")�$_Rh-IZDRd-�1N�.#��$�")�$_Rh-IZDRd-H���Z �����Z ���@ �����@$E���k�@
�"Ik�H���Y�ZD�!�H,�+��,_DVh-�XZ$V�&��?����e�~5������
p��:�IFHy9���im�$QFH�����%#��u�$��*L���_.#��w��2B�Gk4I�R>�$QFH�r��/��e��:I�Ry���JFH�u�$��
�~�(#����, ]N|^H�R~K[ !�WYj�d�d�6O��%uY�_���vU��F�A�R^���2B�F{�(#$k�'�2B�F{�($4�N������$���I������$��X�h��2@B��$���I������$���I������$�	���$#$k�'�2B�F{�(���z(�@op���Oe�t����IF������e�T_i�5%#��X�^����b�JFH�rP�/�!?*��b����"ZX�!��*7u���S�Ma]VJZ`�!V��������vb��s-b��:��!��}��E���������^X�����z/�HOa
�$QFH��Oe�sH�Q��\FH��Oe�d
�$QFH��Oe�t,'��r���=_�,�����EbY{���C�����k���dI�X��/,����n�!V�;��!����:���|aQ�F������=_X�V��Ab�H�����X�!V�K�X������C#��6X�:���|cQ�X�m��u��GAZX������V�Y:�������!V�
���W���C����Ea���9wb��{�:�*7�u���D��Eb]}�j7K�X��Mw���n���P[X���������Eb����t�e���������������Eb���e�!����:�m�����u�e������m��u�e������}_X��������]wb����:���}aQ�X��/,������C_���qwa�rxv����W�X�!V�������m��uhG��?��������C�zvb���������������6��u��o���C,�����C��}�Eb7��u�������+�|w�!����vB:�j��^�!�q��]�X�}��t�-,��h�������EbY����C�~�v���n���C,k�u�Uo���C,k�u�u���]���l�`�C�|�vbY����C,k�u�u�|w��������wwbY����C�v�&b7��u�u�'�IG�)]7��t�����OsbU�W�,�����]�X�m<�uhs�i��!V~��j�����]�X�6�:�:_������n���C���7u�����]�X�������x��k�n��������������:�j��c�C������_�����������4�!����:�j��h�!�y�v��l��2��:���}aQ�X�6�:����h�!����:4G|��G���}_X�!�~�vb����:�:n���#,���%bY����C�������m.�������,���\1K���Q_�`U�8TE	$!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re��EQN����(�I�Eu_�!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re���	�W�j����]P�7)
7& �*����@E8��@�[��`Cq�nG@U������p��8P6"*��6�@8����[��`q�"l? T�����
p��9T6*����@8\��V^2��sA��(#$,hre����&7�)#$,hre��MN������I�49�2�a=�t��C,�g�,���&�:��z��������Y�!�3Mu�Un�����f���&�:��z���y���:K�XX�4Y������U���v�@E8��@��7���@E8��@����`q�"lA T�_���0A�H�}�I�!�pd����!q��(C$�:�$���>�d�Ton3e����"a�'A�|�ts�)C$�4�$��������'\�4Y�!V��J�XX�4Y����|�uba]�dQ�X�m��u��uI�E����9@Oba]�dQ�X�6��:��������.i��#,�Kr�t��nn����o�!�%Mu��uI�Eb�7��u��T�9��Cma�
S�z�:�$����)C$�8�$��8w^�%C$�6�$�i_�%C$�4�$��8>���|�	�8	2D*���d���"a'AFH�]@$�)���d�TVw[2D��N������ C�su�%C_���vKFH\o�}�t��z������h��C�~.v�I�n���C,�7�,�����]�XXo4Y�!�y/v�{��fW���m��u���F�Eba��dQ�X��'waq����C�t��]�XXo4Y�!V�O�����O�:�:����CmaY�%C=vpd����"�uY24�"����!vpd�T�qd�	;8	2D:�qd��L�m�w%"�uY2D��N���o�� C�c��%#$� e��V�[2D�~N���m*e�t���d�t��cQF�	q�O�����:��*��J��&�:�j��c�!�y?v�%�uDs�0u��uD�Eb���������]�XXG4Y��y��m��u��uD�Eb���c�!V����C��6~�:��:"gI�XXG4Y�!�~��]�X�6��u�u�|r����hb(e��(ko&"a�'A�HmG���uY24���c�	{8	2D��8�d���qd�	�8	24{[��%C$��$�i_��%C��z��!���#KFH�	@$�	�8	2D�W�[2Dj�.��X=o��<������������]�`��������$e��m��� C����I������!���g2AE8���HP����L"�PI���xI���t�����/\�	0���P����H�&�8Y�.���X�2.�
�X�R.�<�g_vF
�T����t�T�I��u�T�I��v�,w��Hyk���/�~�Kl^J��[m�"R���OV����/V����/V���5����^a!�J<Q�O�J<I�O�J<I������)�b����c�YG���^��l_�C%�Y����x����*�dy�'+T���z�e7��K<P���x�B%$/� �J<K��x��P�'k���=U�j���^N%��4��P�'�K<Y�/�J�X�/�J�X�/�<��H�'K%��H�'I%��H�'I%��H�W�R�W���x��a�`EJ|�9:���~*��n����b�HI�T�DJ98��'R��m}p"��8��L�d��A��j��[:(����N���Hin�]��r��8G��V*�GYJv����Pi&I���Hy&I��H�&���.K	��T���jpT����kpT����l�$m��H�&���-KY��'��������o)8��o+6�B����o!��[�
���5O�+4����o��[@
�����- ��[X�|��%+4�B�<�
���Y�{��������>���'X1��,�>�
y�d��IV��$k���-���X�}�>Ar����	�{� ��O�,�>Y�B�'Y���m9���_����|2*���%!���}��>�r�����I�{�d��O���$+�}���'P!�$�>A
y� ��	R��d�r��%+�}���'Ya������;ui�~��r~m��5e�T�dZ���������@ }��J ��6�<�Frn��j6���jp���j�(��_n)���e���v��d��^
���k.b]��z��t���m��,��o_����~%e�4 ��$����Y��C,���Ea!�&K:����d��o*u�l�t;��u�u�:.���o]�������u�����i�H����RG��m9��:�:o���������=�m9������������?SG�W=og'�������ol�#����3�V/���u���/�������S���y;�u��|[������o�y�{�Oc�-g�p���o�����w/���ey��)���J{m�3��#�Zm{�y�u���[��:���]_:�����Ce��maQGX���,�����Da!��3�R�O��L���v�h��#}��E�o�\�K��It�}���.�/������;�2@�����PHm]�������4�
p8����P��P*��p�8P�t�T�Cg���Z���|�3�{�g�S�z��/?������Ou�E_~���tV��Y�����U�y}��A5�%(R�^�P����4�M2D�h�� #$���.��G�|oc�������hO���'��sO�������A�������b{����>�,��^J����4k�����ci��'d�Dp$�����������8��;C�h��14���F{-���>������u�L�_��S{|�E}�oGa�_�����~K���3���-�������i��3��2T"�u��d���3��
2B������G{/���NA%�{i�L$��ML}��C����Ou�E}�/Ca�G���T���u}���G
�]��'��N�������*1sd���2�E2B�h���!q��W��h���2'A���O�������[��?�H�,b�d���2�����J�Ov�[�'?u��,�������S�����O����H����B��`�;�I��0o��������s����O�[��?����;�d3�5���	����O��3�h�?-��7����������N��yv�;m��o5��g	����R�N���k�;���/v��f���R�������o���h��k�t��u`C��>��6U!�l#�WH����������c��}�u)�;��+6D}]7��n��{�!c�!�����>l�9��
���8�B��m����C�
��{v<'C�����5$���3������s�k�A[B�-�����9�5�����u_C�,���m����2��#d�3��������5���z���#�-1+�l�O�����6R�c	����\WFn�T1O�9Q�����;zh��=��{�u��W2�����M�>��� 0�*F?o���������+��{k#=~-�D��:F����Fm��]["��kd`#a$��s�����W	U��e�&�Y��]Wdv�Z)���<�~NU��]�oo���|����*�rYUi3�\�W�Q���b����e��t�5~Y�T���
d�e�`XrV��B���������y���9�d+\����^�Zu��B�u�k����
�t�PG���9m�������k>�*�e��B+#d4�����gH���)o�IFa����H���^5R�q������m���*�~��!�
��%ME�t]���3������X������C`�"m����P�Z�]��v���kcu�����h��v���L�z7z���}�X�^�K����V)IY~o����&�G���m�������T}3}��xtn�c2B���7������L/=L����������6i1(M���I�t����{����5��Rz��7��"�k�V�����a��s���d�������k��++��I��� �`_��Lx\[R�26-��s����.��Fop��������]���&u����:��u��f�����u�sl'SfT�=������#����5���(pv���L��>�|��b�fw'�PH���_�:�k�5q�� �-��@=-��>����'S;Le�fo
v?������/�M��r�!�r�y;���r!�D��V���e�
o����x����B�6C6�j�������4T���tl���OvRT��;�|D��}qn�h\��I�KH�!-]���
S�%��gj<���!�K��*�W��ey��%>T��CZ��dg�Lu�������%m}6�A�u]B�a@!)e�T���(�[��5,������ED��Q�=��m��z�,��=Te�Y�{:���/>���h�@-��!�T�5����J7��1�.x�('����m&v{@���4@b�
�6�2����w�9m]Vb�n�N �\��+���x�
��T�r���u�vmq��bC.4w���G�j���>r+/9���l3$�Y�����9���p����;��>��J� ��t��(��y��H�����2k��&���5BN�v����rl3����g;�m��(��������
���m>��?���xc�'��p5VN+���2�&I��_��[aHi�����M]=�_���\������"������Q�y�10������ojub��&���"��!U�N�r��������pm�;fcp��'~w��G�����Ik6��0�r��K��-d��HE��qOel�����3�
�e���m�p$�����6h���%O���9�'P�Y*�xR1M~mO�3��N�Ok����j����o�������K�R��ZOR���L6��c������7m�
�K������L�{6'N	2�������6�?�8�%,���"�8 F�T��9����x�1���1�$��L<�=�/KeF&=lJR�v��,�������W.��3��m���4�e@,����Y�������������Y�y�����cve���I�8���R0d;��z	U�a�o�$�b�KX��fG�c�L�����'�s�KX����h������L`�X]���kj������Xz��Dt��#��#�yA��V��5�8o��,J�'o
,�en�(��L��e��� &�������=�de�33����m
�K�����Q��-8����������bW�f��2h&�L�j��|�Y�f{6%���"a�����FX��r�c�g��K�%�$��)���{�m����\�{cbaG�M�"I�Y�e)Y����nK�����J�����Qq����)����������,��pi�N9�DT��C�=��"i�iFm��r�����cDi�r�c�g&�d���<3RsVs��:����8f�}��9�G$�T��
;�[f���F���%z�����g��*��h�����\��(L�qMOxr��e����a;��f�����v�������Od��T���c[^�`���]aE� ���\���m	�H����;�(���,��~�������T�cV�,��1��D���j����X�h�6J3jg2�mI&��s��;�a��*�iI��oac\���**���.%;�[-Ck�����~�KkkO��5�Vi��1���=�?uK�N����*;��kJ�)�|���|�����:��)e��I�
c!�|<��n�����m��v��y.a�;@6	������N�6�������Rb/����dd>��j�Ce������1�+�H^����4�$�a8���;�[<1i�,.J>�?(L~2�;�&�B�GY,�
����O���5ZX��m���e�C6�pGD�q�8��B��/�'����5ewwZ"|";�H��s�a��3��ZcB���v�I��bv���h��Fj�nj�,/9}�K�>�%Oo��8��^aI�u|QM7�d������)���Y��>�$����R<��]r�$�X}��~EM�xw���<]�q���c���4=�bQ67K~Zi���P�o1��3��Z_�������(y������t~H������$e��c�avrxj|M�n>�����$����b�IF��VDj���H�S��A{�W�o�C�*
�2�Z��[S��o���-���tD�P�J����e���T�k��3�6u2��V������Jt"j���4H����}	��,F�3w=/������|*]�YaYA\����cw�aIR��H9a�"�a�]��|��vj���ja{_�z��w��B���amv@�+.�������J�,�Y��*]c�W����6|���(��w��R���)]C��CK���Od�R�yv@zCv@z�8���
(5��I9�E0��D�C�zcV��O:�����X1W�P�;��MQna�����_����y��y�`XYZ�cq"'�����8.AS#���D�C?&7�����v���Nd9�V{�{�3.
S����9
Cd	�mK�����~3E�na�DNy���G��D��X���9_�`��Y��9��Q��Y��F��D.r[�C}�G`.Ndqc�6���,��D�C�Sc�5w�qs"g�!lu"�4'r��~c9nN��M��d2'r��N��I��D��'��Y��9������k��W��A��U��n'����S���#�kU�}��%�"aa4�F���l�C��b��])4���b0}�V
���:G����dfo.�/Q�f\��%�M~aG���QXA��*��>�j
&�{��a4<l'����Sv��S�U��)������a�����F�E����$9�9���>@=�~���1���<O^���y	���'m���d�C��Bq�,���'���W�,!P	U���Wez\��{�x�z��f\NK�u O�Ba����wi����������
���}X	���L������@qaU=,o5Q�V-.���ebW��������8�e1�g�q5��&%�(5��y�S^u�6w3Hj[2�6%	R�i�a�&�v���V?r�����
�����Gn���f�������@�1�J���a�G�Kfo��p�/O4�k�!]��t$!���)��
����-���QC��`��V����i�����@��w���l��������%���*J�������L� �R��2-a�\2�t����c��>�����*v4H,[�Y��I_q_����*��:��"���l����?��t��`��|�O�����^�a4[����o��?|���h����?���������������w���?��������������G�������7�����G�k�����������~�M7��)n����?����~���t����n1`<���o?~��_�k�q�q]������2�{���R�"�
���?t��������g�w������h\���}����/�����������/O�8�z����\���&;o�2a�q� a9c�<�V9���hN�����G`�_�NO�� -j�~��A��������\����*��7k/���!�1y���c��,a�cC9>mfT(��bOU~�n4F��S�2�-�TL�n6��a��>���/��7�!������b_��0N.�d�0�2�!��t�]��J]�2��!,!��E�_N)-6?������X���%M]*M���n[���p5!o�!��-Y�l����|�wa��"������*i�1���)������'��	klb+�0���9���}"��'[�|�lNV7U*�Q���o��),��a�6/G�6�)�=l|��6���������L|��(�-�y\s�v��;Y1�y��#�g��"��^m4��$�!����q$�%I����{�%������l�����#��<B#�����;����c�����m�l�����%����1�8OfJ[���,X�������>�nax^c�f������(gU����B���������M0�?-��n������YWb�GEN����q�5J�m.0��bm�9g^��M�����T�UkF�n���3j0�����~�J���+V����P�&����Y;�[�Hv� �K�����t���/��q��o��
�����pr�<������.����!�m�zAK�N��
0���������4f�-
��b!��.���]V��0v7U�����6��.�����������	�s���������YS�Nl�i���)e��inX|�[c5�
�y�vY��n-ex��D����R�v���]���w|�t�S	���"a�6Y��6��Ys�9V�H`����D������<��n��)��2�NF�U��DX>����qh�e����1�����*�G�M�1��$����MW�����Tm7�[\�cy��D%����� �(A�&����7���e|?�&���P�b�lo�yZ���t���ZVTxg�����`.�-���8�0��.�����m�` ��+�].�$�h���j����s.��K�0�T�\��("��8?�E�s6|(�p4u����j^�0��%'�!r>��� &qy�p�x�}�����0>O�����n��~�|/z����Qle	��z���f�}�N7�l�<9��T��3g�x���=����-+^�~jr�?q����6��c�}
S�vY��w�|1������&���KXZ������������r���I�#���aN�4�iI�������iI����������4m��>>�m��Z���f���0��K�u�������>X@�c��]85wOSH�C&����}�iI��(uy�z,i�Ri���n���i�1�[��	�)������9��z����y�]���06{S����=�r"���m}����1_��foJk�8�������@�O��8V�"dg]03��M�����)������r|1O2�+g�e����"��)-��
�!��s(����?�[��v���lnBO��a�NS����q�����4���x,a���H�U�)�}	cu�E�.�����
[[��ef[���%M7o�/~oT��A�:<�)������'R�rL�J��Jf����a��>�����v������W�4���J��[��%���v���������0Z��������U���d��0&'��'�YwgS���u�if�%S�r+�o�f��6�P��D;�� J��=���<%����6����,y
������a�%��6�ry%�"��O��=O��U��X�h;2���z�mM&�m	�g��;�b.����%=�������93����H����$f��0+>4��w���pt���A��?j��f�@�A`g"�,"KO^���u�:�.i�0yOmI���`O[nU�f/�\Z��q���92X������a��L�����D�K��&�.��_�~N5Fm7�tp���Hw)�u�w���m���vL���Cl^c�1�2V����eg�,������	��F#g����~��9W���5bn�HO�{�V��z��,U*T�FV���R�����5w�S6D�@���t=�9I�x��>����9�����9c{!1g�KR�R������{��A	���m�:W�r�)�-����y��������,1v�;�0�7���_s�)�C+3�l��y]g��t��T�EC�v�"�l�����q�"�����
�u�?��"��/m����{���!6��R![��
�s���9a>&�K��7a�zL,L4������=	�>����x�VPKs����wk�
I1L\����]��6���|]?���$"{.5q?����;$2$��*��Fi�5����]���jU�l�v][�d)�HY�  '���89�;F}��y���B������5��D�3�u,��2R����R�������*��e���:���R��M�T�v��h��j�(5��u
�vO(gKk�]�����D�c_pl��9s=u��S!|��,:���X�5'w�*]���GF��%�����r�!������u*3$3���9b���]�b�g��uj��
e��Y�,����+��e�k8bO�#tj�b�!	��Vux�aA�:�B�}6�����Pe%>��}z���"�!�6]���6��:�����6J����3�s*���v0�$d+C�F����fE���V�=�P�0�������W�=$���V���c��ie�i}���w���N�w�uc��}(�w�9��Vy�
9p���r�b�,��B-��������9U�w������������|��>��4��e�SQ\�M��(x����=U�mf��]��[G����T.7�l*����,$��f�Z�#�v/�h�N�-��mq���\�|�����S�,���N`�8�FZ���&�Qhy	!�!�F����/��m1
�S�O��HY4���uJ��-)T�+��������������2���-o�z�]E����P��9BJ����5��&Ecdw7
j�o�u�
W������`�����i�g�u��2�`&��I�t4D����S��|����4=�B���n!e��������i	�.y��X*��nz����&�d��c���y_i�yb�0�Q.K�)�>��iPX�r(�Xv��h���e1��oj�%���60<�����b�CK��Ti�]��:�
���~�������sH??��%]{��
�*�Y�����K�m�u��s5�\�}9��'�O���?����g����e}������y���]����[���[��m[��=����������������?�L[�~�r�~���t��Z�nHG�nH�����=]7����"_7\��uC���}n��}>���o��|�������#_7��\7�\�J-�
����r����[�~_�����G����?�X_7\���z�������z����[�n���uC�Q���~�~�����~����_7��~����_7�������~�p%�u�����|��]���=�x��[�nh��uC������z��
������uC?�uC��_���������W����J���+��
�����w���q�p|?�����s;�����~�o�u������8��������y�p�8��|�n�����J���W���_��
�]������~���u����c�@�������u����������~����������W��.3�����J�&�*�����|K�?6�2��~���p�o��uX��OV{`�-����z������Ub�+<��Y��,cY��%?��������!n0�!| Wt,�8n�5,����^��4@�X� ��hH@$&�����6���Y��B�!�����jf���o*,(((4V�P�X�P�P�P�XQ,��������H�x����[�6*�WTTT T&T,�d�p�|W���Z������Z5F�f�FUG�G����5h4���1A��F
k���f��(4Wh����IC�fM�=6�WjS����&PkL����E���
1[e4��\��f3�&�;�z4���;�Z���M�9L4�����k���������%��	�� |����f<us
(�0�yX�}�Nb������+�����b���YXE\.�f
��%��v��\�ncxC^�Q����g/t��a����a�v|�9��)l:������y6���C�i�l�%������v_?��v�;����N;GFy�Ce���������U�q��nN��f���<��SI�1zyv�ZX�i�`yk����)�����:?�\��y��"�����;�k��Y�q_��l�d)�Q
�J/"~Z����0{_��7M,���[�Q�{X�R��p�(fG�?��r0����������
9���\o,�����S^+v�a�Y�;��b|$	;�FS�D�]	<E?na�,�)��lmy^#S�����x��
gV=��<�L�����"�4A,�������vD/X�x�+z/j�.�k�)f\�����h���N���mDp	�`�x$a���-���L�&�(���Od���W��7��J�^�.a����������yXj4�(�=,-�y�����&����I��<^bfK�la��bW�;]�0�L�@����V}�2�/���J$�!���%���������R�\^
`�9@�e�h:{./��%��=��$���f��l
b�I�X����U���=�x;���3���Kv�|����V��S��P&�	7e�,��J�*}��t�����}5�s���s:%;G�����a{��Q��?���}��+N��{�8�%�F/@=����v	;>����)�5)
��N&Zo�gE��T�SZ�RW����B�M|W�����x9�i��q��B�7%*NEN���f<vB����e6�3�����YlR43��e��4����sERn�;2���E���z��z:���m�!�.a��^�����<	��"�������e�`<�b����%&}�G����[���j�^��O��9��d�dm;�u���1��s�������~K�n���_�2}GEep�x��T{���u,���P��(���2T�Q���S��\�2T|�Pe��E\\���G�{e�ZDx,h��PQi���\Q��N�(Ke�t����i���R\nV�5��N9��.3N��~F�#��%�xK��m^����{�����[X�~�*C���Q�<U����_��0��X���T��o���f1P%�,���2M9��gv{�i����|x�s'���W;��;wHv���w�s�d�^�Oz�����KX���)���}�:;�!�:w��!�s�;���srW��������y��T�tJ;K�A�^�8��EZ�:��sG��2����6"i�X�s�<���;����]FrZ�R�gcv?��6�"Cl�s��R+�Y�����f��t���s���L���/��a��=���W�����3��	��L3�aj�4�)KS�^�'��"���/e�NE���h�+Iu	�y��{�u�J���������=E�K�����N:��fu�:���;j�,26?!�����s�6�����:�jkf��W�������;�m�Io{��!�����_�������;��H��Ix+�a�~��D����(��|,�����iy^V\���g�������a�2��*��=a�KX������<���`0���8�"����c���S����������7X��!`%B����s�Lk���Y���J`��?*^VOu��~y����9�X��!l�o���-�85Ym�)��1.�V�r��^�p�5jf�Yf'�
�X�������l�v�h��8<}TY�0�c/I;k���9"�������u��n�R�(d�R�L��v�V+�7�^����3�K�����'�����m�����ra�6����O��l��G���w�6�k��~�L��E��Y'�����%n����>&;\����pR��>6���6v�Qu�,�HT/a���n�>6��������.����'��K�$7�������{�K�;��{�M3\����eZ�^��y^7��������p~�����������%���k��;�y������WN�`OLO��#4g�4����2��i���y�k��NLh��/'��Q.�B����}�3m�V*�����0������\Kolk����9�_.l��Fp�����4�m�}|���c���,��Y�<<��O�����O���7�U�V�.�o\l�gK��KK����Ny�~��c�q9����=u��Jc_H�,�4vA4pG�q�z������*��)�G���D�x���Y0����
���}U�����T[�m���dk��_���`pX�����N�������}l\v;�������x�5��U������h]qyn�w;��Z\�c��#.-�w�{����}�H����:�'��xJ���Q�|�:���O��\�������J�������{,D�����ht���%Ct�|�&�j"������:�L��>����'��91��"W|mC�"��n��@����i�$NO2��DNn'9�r��1,�S'�'����Sh7��1��d{���v:^�2��������X�<�g��Y�r*�n%w��U�LD�=YId"&K�2KD��DI���>Qce�H�ul��+^�c�u����\�&S�/����m7eK2�:!:�rFK0�������4j)�kK�:C���q;�Z�����!lv��l�y�+��C��q��}����fs}���u��\�j.��Q�%��/��s����h&2��-I~�f�c��v�����q��Uj��������g�3m��8�D���1�e�iG�Y�4�;�1�e��2�!�\3�������k������|Zj�-Wn�Z�%�=��l�����jU��9sr�[�����[l(14���Wy)�[�m�l�U)k�r�Xc;�����m���"*["�����p�sN�jRu��s�l������%=f���mO,w���!�R?��=k���,\���#���k�!-O����g%[G��a�b��sY���BR���l;��a�����o2�Vo�1���,�$��C���	_K��Z�����*z&���1����y�����^j��D{g�pM��C�6����U��6�S�Sn1��;�n]����5�1Sld�H��"sx;�80�x��e���d6t����6%��y}3�sF���h�aZM�#O��WV�m�at�e�!������s����5����=�;p�����J{�9�3��>�����B[��k����M;*���[�~��I�r�}Z���m�i�
V�����eZ�^���Zaq�D�
&���Q��g�>#�.��l���md/g�<���6T���������_�6QQ�jQm8v,"i��b�"^�a�d2G��\X��%,z�c��Z��Ue�;.�n/U#�<��\3"����K���?���g�f���-�l�T��>��{;8$���v$�����r[��N�}Cb:<q��f�6�
�����Bf�Z`��
Qk�P�.���UKZq�D����}C�[���%���3�
������{�~�����G���}�����"����A������e/�&��fi����w�y1�!���hf]���d�$T����I{���E[�b�:�_�|][NRq�������/apl�\��$��2v�mv~P��v&~�C�MX��~3��D5y[[U.3���+K����C�P!u�����l�����_R��Kwkd�F�#c*7`E�U3�rf����u/�
��0\��|����T���q��5[%W��������AS1���=���'~i`H�ga��n��m������:����5���i��G��wh�����
���O�f�xL�c	9�Y8mS������;<��
�GA����b
��|Yh8���y�Xw��at n
�a���3$����:������i��<������B,>�R�������zI��I���	�?����V�&6�XW���:��e�,�~���6���w�������l��3�T<�[��#y����?�?9���l���D5y����f,P��|�����!lrb?��`<�c��Mih�M5f���p�3�������r<[�c���zhs�t�����=�_�|����Rf+����^�l�mj(i�����U�����n!gr���9��nUR6��eh��x.��l��<c���[�)��a'����)b�^���!4]u��Fx���k-�:��1�l��,�m�]0��rm!i�!������-�����i2�aKf�j*�H�jy��3�P����dU�3�^e>��7��S��y+WY�N�yq����ni�� �l'����T{�YJ��'
A~o,���6;t��X#p`��h�~I������6�n!KE;����a���d��a��M��wK�T�n���o��:�3�G�r�k���P�-�.����9Y��[8���-���:�p����d�v��&�l���6[��8��"���Rf��{��4
s�v�0�n!�#�s�c�[���������C���S&�_+�����o��M���(m����g�����3����(Oq�n����.��-}��������|�����1���P�7�1_�a���r�)o[�w*���}������ec��M$�i�c�kY�ecV4�BY���*� 6�]����3d�O5O��v)E�������a���`�gY���1�����F>�n�z_S�/n�,��6�����y����Im2��b�1e|�r��C*�zg*�z/�Q��_�i�;|���&7���z/�WZ�9������L��l����`���6�D
�P�L��:Yu�T�2���5�c;)5L
D�@e=�������b���M����z��9`8��;{K�����E;CjS�tz���(���#>���4a{�6����6�t������nm��~�o!c8���IA�[+6���XxRn!i��Xa/O�62U��2
��5�'��*]�^A��gH/�=�+]+�C!�y�P:c�Y���:���<��,����{�t�)Okg�Pl��z���qWZUW��n�#u�G���#���#0���r����?5�1fD��3����P������S���BP����`�8f�uZCJ����h����T���6C��S�����6�S5n^��S��������?U:�x�q��T�5�����i�|<G��@!l�n���h(@��`�!����RfZ�?���=���$�k��S��1u���?UNz@����?Ud�"d��\�s���E�������)?��rL��MP
m�2���n���<A��Oy�1j�%��?�q����rN���[���q��T9�?U���*���<�7�R�hZ����a���_(�gsW��vlw������/���*#����|7h�����Uy�3�j�x���[5���t&�����U����'Bj�!^eH���_�a����q��������]��!$Tv�8�I�]B���]����2&�j��
B��#
���V�du��
��kx���-d����W�Y�d*�r��_��������ZUQ7�:S��b@�R���!h���R�f�(3�X����J���RW:M�v���j�����l��/����1
mW��gi*�$��n�����iK	��S���m����-�]=�w6|�:���jGVz�QMO�cmb��]�oIe�%�.���:&/����,WH�����*[e&#K:�\\��������#K:���g�e���f��I��)�Y!us_����X*���R�ZlK�������a��V���U����H�������1e|�>C�C%�.��������
n�{N�b�uu�d��i�d�k����9l�e��=d�}����ZcZ�����7�+5���e�-���'���}�Y��\��V�Q���m�"�����7���T?���m_���PcR�M���R��n��jk��#f;b��_���������sAhm���eS�u��u����;��Sw}[7 ����I�6�����7��	���I������^����!���?�m��b��ocDlj��!������.s�'L�F��T���Rv�,6����p����L��Y���R�w�:Nb ���q<���W�r�)r��.
'���8�a����a;g��p���c���3����9�n3��J�n��$�8@�/NY��2���/8��C�R�0%o8���3 v�Rz�������7o����D#�C���.m
��3P�_@`�dGK��W;�-���qOEH�T����I�9b��5�v`����vRJ;O�q]��C�X���|�I6a��
~
U2�_�prW��������T������5?�����oI���8�V����[���$���Z��N�����Vw�}C<6^[��!v���;����}�4�a[�5#Qq<�xGn�^����=��Q���b�sZ	��A[u�0�g�Dx	�e��c��M��*�l{$[��ma�F��[jB��x�CC+����j���v�#��b�-&�m���1�S.��c;W���w�#�oz(D����:?<�*�a�AHY���1;����+N4�$����f�����!nK�O����]���M!r�n���G���T���U���|9(�?�&~��T[������*��2�cO���[jz�>�#����g�������� U�����X��^�vP�dW�L�}�S����A;+m�;� `p0wf��������k���
�3��C���T�*�sf��c��I�zoTh�u[hzS�j�4��gy�br�~y�m��X��L��t�~���v�!v��������b�Um���Y4�^�1��_���"y���N���9��T"!�*��5��2�w	���m��*\�cM�X��+3���ND������+�&����~�L������lls����v�f}�]��������|�z�Y�q�=��s���v5���7����=w�������m���u)����o?h��� ���b�J�%~��UaXV�;�Yg{�������gvb�"z��pl(g>6�q��)�����z9g�����E�Uv�����P��R�b������B;r��d���&WSWf
>f���QT@PQ9l����q�E��
2������C��a6�</����P�ircd�lR�	A�%p��1���<GSk���4&t��<�q�i2�
�<C�����r��O����������:���No���{�� ��kH�g>�����=�q����uik��S��M$����s�n��<u������X��cE�'?N����������|������I{�,;rH�?VK�<��W���_�����03�U]�Nd�9*��%��D�I%_�����8f���EY��Fq7d5L����6�|��g�x��-���md�Jwqu\X�3�]�<�W�x�8Z�"�	�u5�v�v{�����x��,�3kq(�����N�0
<�#D�HW�8��N������r�R����v5_�g����V:��6jh����������Su�K�f*��nc�Dj����T���������b����,s��Y3�f���b��;���K����>�:=
!I��k�6$MA�Y����,��,X����)��/�0����8��WfU�V��,Ao�������wBY5���:#��G���Y0����� ���
�#A������L>,;9��C��W��X���g%Po��)w<O�0[<���E]-\	J�
3�;&m�X��S
B��h[��`�<��XH����N��sG��%�M�A�M������ k�Q�-�k���0�=f��L���9�Bw�25��j	�r]��|)��"�,L�����y����U-69O���������XzT����>]
��S&\(���������f�wJQ�{^�t1�����)��7����({L�!{|�Y�"]-���;�42���)��2EZZ����Q�w���f}k���J�^�����EY�I�oX5�����[���E��p�o���|&��#f��_�2�~�D����
����b]0�~t��z�����qy�F�93�Jf^��@�c!|4'+0��{f^(b3vF���y!D��o�����������P�s���G�K��i�gF�>z�$��ls\�I���9��@������g���~!	�~����i�O=��n&��zv��kv-5+�:�\����G�����2?��<�-������c	<�x]��_To$�i6ddF�*jT��w>n�{E�H���#��+��#q��o��	X�2�n�~98�.��M	UwU�Q�Q��)3L2L�(�P8%���Si����<=�����f%�a|W����;Fyeg�
�0N�YKuu������g �a��"�-@�(��=��2[��:�|��kM�}f�z[|T��qfG���O��f��,`�g�F`W������~!��~���r�8K��G��e���zV|�����,�{�����3n���][��g�d;�|�l-^h�|������3$?�|��G�X
����S�L�<y"�B5���=C��NP���n���|0�gh����uc�)gW��d%&�����U��
�B���u+�Q�������s(hl�����Pg���l�zg�����|��~���J���~Q���g���Qt��?�H�����V�DVUk�����h�����a�j��c������|la"n�^W���m��l�&o��b=�Z���������������0'�Z����2�1��O�(����?����|��3�c�������|4�,P���RS�Fgk��j}@�9������EP?�{f�/�����gp��Y�Js���{�l�sr�aE�
���^~N��4�>�D
���p��
���W��:g��g	a9V���F`��x^>��;
C��	��s�{��S�P���I��\��eBRg��d����Q��� �Ik��O�zj����x�����u����qs��/���/-0�6���V�C��?i`�_������w��EV���o[o2�*�~�A����kz���*l����u��_�6�����~�n�PW	������'��l7ev`v��5�$3���0q�{1�w0��J���9�nq`�V9���lAb�3b-��o�r����Y������{�>3� J������`#lgZQ������E�d���_�h�}�c4��>���������s�;BJ���'q��~<O<,��������VtZ�����8.���������s^����#e2�'#�2�*#�2�-#���aFJf�gf�f$nFg$tFrgK����L�d�HmI�?N�hOm���V�)��n����)����g=�����I�������I����a#16�d3c6�g#�6�j#����F�m��FJn���T�'q�'����H��D�H���H���H�s�. }8S�#�8R�#�8R�#
��$Gzr�*g�r$1GBs$7G�sKz��L����H�n	�?N�tO�ni��b����zi���������_�H����H��D�H���Ho���$�	��=���V)��n�R�#
=�m����>��q�����8��l{<��S���a��?]���A�'�Q*���yt;X������x����n�K���n�`�1�"��@0���pc����"�� :�"5�B�������E���A��XP2(����4��Ru��Pi�7Tjo&�q�������`Xfd08����%M�
�53�I��a�0{��8spt p&p,p2p8p>��>�[rw�7��f�n�.�����#%�&�9S8V:Y8\8_8bze�hs�p�t�p�p�p�p�l8�����e��U�Ty����B~�,x'�?(O���y�����n_J�2JDV�n|���N���V�Y���#�Q���Pz�q���������}��=a)5��V�8����?�q��gbu�����������"��7�a�iLy;�=�[?����K�=����V?�Y�!j�L������s� ?<{�$����<�[B
������{l���L�|�����)g�#��Z��3��6����������w��vk��%nK�^�a�����yZ[��|Z<���Y���3zTDQ��v������UP
��u��yu^i��Slg�g| �>@{�?_M�8��9��C����,}���B�]
�+���
����G��r��Wm���4�`]
Z#���zm�"�R`�kte�T�����A��4����1"��+��&S�������[�g��n�\����l���ge�b��u)7W7�����(��J���\���~�v)m�2�]v��M&��5P��^�t�(�.�J�y�����vJ+���s�gf���spb�@
�����)�I����3�� �-�k���(h�RS�ru��GJ�L\��Y�(9���*��;�wa`�p)n��"���8��/Z��>7����t��GF������Mf{�@���ks�<�L�&���&��uQ���b���Hb��?LL��^X���#���	��V ���T�]�k�'�����g#��E���9x	��������!�T������)yRH��vvfP���*��v�eX���c�7nE����wlz)=6-�0S-�DN��bBT���D�"�V�m�"I�3<��$�;J�:����bO��l�&n�����1h-�%�v)��2m+��v��w�������Ep~(���.2��������d��;H!�������1�K���i`0�L'@"ZlNa���T�o�����"��+�Po�/��]��A�NWlK.����b7�/7���"��s�~�����N��Y��g�b7��T��-�mJ�29_���+�*�B��b���w��afXW��}�������=����M�0�<��[���5_J]������*6Z�x�N�R{�"�����{��q]W�-s<��Q�7�����~���S�-9m�0�a-��w��4&�oW���^?#����j�����LG���c�%�Z>�bt50}e����������8����}�mY�3�x����Y}���g
�N�%R�P�~'�([a����Q�\�;;��4���/~��1v�u����1���3\@����l���<ov��������e�P��a���i���g�����L��U��3�>hL6�lI����e����=��x1#���&
���m�sl��|����{/1�`K�QK��r��Rnl���{y��a-����S���(#^c�h���0���j�u�W����)�9�^Y��kpp�5Yov
V��HnX
���k_N���h2���>�,�T)L��gyK�l��9�����9R��eR��az��h��Z���l�6��2���O��������
��a����.i��r3���Y�NY��m7���������\��`��~0����,�����K��)T�_.fv���Z�.a\��S��X)�����k��*��+���}�Mm���h-������y������4�]����!
��?��n�����D%��p2�M���pZ���9,�����)�������/ei�V���%-��j����QMk����h�_�����eG�~�-M���l��h`���Y�/�g\v3��2�#��d���egA����8���I'��v.�,�Z�9��%`>���D��,sq�F�5�:h6O^�Y��%3&��E+����������5���3�?�GZ}�X�ed�,'���5}0_����fz�s�8W09��4���r��y�4�H~�'����8���U��l�=�o+/��o0�N,��u,�/Zv1e�I/��t��?-���K~)����4���=�Pn�,)�p5h���z���j�=_����r�4N_~G������N����<�g��K;�D�x3�1����o<���������)
�$nA���B6-*���`e�� �J`2���e��#���vZ��{{�9���.K�o8���=��	���$��"���������zq��{��H=�������Sya�l���p�+�
���h���,b+��P
-|�}=���\��N����K�:�y�� �hk����_�Uq��1�g`!<��2����l]���=���G��`����r%M|0VwA#?'�Gh��N�^PR���k�i�*}A����&���@��2�zhg�1�X���	BU��!&�-�,�Jc�U�������)qL/�wG#J�X�K��2����y��&��T���}~(�uX!�g������Z���^�'���r[���e�-u	�m@����Z�A��|��FM+_����<2���Y�����s��nz�6�E����|�4a.����5��tI���-�=�
��'���s~^P��;���b�6�����<�N#ja�c|Y/Z�20�"vk���\��RS���>[�\^g7����a6��X�<%/)��e���WA��0V7���������6��D��e���h�x_����9�7�A��.����/+4�7ar����a�*��\e��:���S	�kU�W�&L��W,cZ�{����W��f��i?�(��1
AZ"���H�V����`�V�g9��Y��
����p�*~j�����B�#�Y���������b�!�[�%��r~�r~�j1�.�#���W[-��]9��E�}~D5I<	���rI���u.��:[�J���H�%��A�X/���
�g�_I���|��hmK���v^���X��?&�
�*�P����L�ZB��@�X���PB������C���]+#]�F�A���p�V�����/
���+�u��;}���sGY>�\��E�XW��W���3����v5"��f;��}	7]�����1��K���t�=u��1uPN���8~��5c@��iw�~x$�w���c�8�B�����faB
�X
Q��)��E�+���x�=����#�����y��������:+�5T���B�6[�Y����GC�J��u�l/����op��P��x�V�j��W�rb[D��,��w���0@k�F�I�����^�e���m�/C?����l��B������b�W
��C���Pg��H#�oZ2Z�&i���vn6,�T[R��U�b&���l������h���"�������&i��4��D[]Fw��,�a3k���J�]����f���2�hI�d��7�]o�%���=���mJ�Hpc^:���-��K�vvU*��h�L/~x6d�S�����;����@�Y�W�	�>���#��5��@k�Ed�{����6v������/v�H������x���DXd��z.<[.Q�*��.�vGfnX��?�i�H�F�[&���d�F�Sv��c��?��R4���+� F����4��������
2;H|�-��%t	��6�l��3��~;���� �1G�]4zTkZB;m�oWD��fy������:_��T���(Y����,�.{dd�����
�R�MbW
k5����=�r0�����Y����B��s"��UL����e��6���oV���k��5H��9�?�P���;�i^����6��9S��:���Z�k�N���� ��u�vpM��D���;������mQ��������$/����5��,9�{5-������a�#��$��Y���<��>8��d�����)�zQ�������(�"T���bY����{���7�)j���0�~��]U��vsb�P�}�;�r�Y����p�lo����-T�����^{�O�C�������g��*B���T����#�����d�/{S��l8������f�����P�g��k���5GD�~Q}�|S��LI������ef���t�k�����8�9�M5�%��(�q�0���m�xWS����|Q���V�f�w������E���xW��2����R�������h�^��E�4���c��\��j�t����J�_i��dx@
u|�($FT�2��#��7-WsP��T*�T;8}8A��D��/�]��zS{��j���
t�L��A5'8eUT�pj���E�/*mU�,l|g�)���-}F��	�y������^a]dR���|�H�>
��K\IE��+�]3���w��)t�E����]3j�C�q�9�|9��������
q���9T5��u����U�+��D[��������R�v>n!l�x��)��Z$|WI�e�a������w�t[AF��V
(�H-P���L�k����q���_\2Y}�d�pQ���2o��$��k�$gW���l(���IU�c�-��>�
}`+7���q�d�����+(�;T�FG"��8&��*�0W�9���U��
��6����t���.����q�o��������;jl�o�4��2��x�� ������2?�u��.w4V�b
k���}���O��r�/���4�D.#������6}����+I�;�4��^#�����M>�]��A=�����R+[5�x���$���.w�|��w�w�
����A=���w�w�7��|����u�y`M�e����%r�V�
�0���VH���1�!���;����]f�)�wy���R�����(��N�����>�8.N��R�;D��x���3�y�X�]�5����6���^9_<���m��M������3��*�w��a�P}S��e{{��S|o�����m#F�<����\U6���|��~>P_+�<�����8>�sP
#I���
�]B�U���/>cm�����e�"��r��r�(�7+��i����}����V�0��o�pg\9��^9����w^+���Q��?�)�]�;��X6���/]N�%o��y��s���
�V�HI@��� �Xv�����������r��D*{����r��V8��9O�vj�=���ZCno�-Z�;��r~����$
�<����gK�����T���*����i��N>H����
t��A=U���J�.PC�tv��C5�<��9e���)U*��4�@T��jo
�v��+��-8�b5���GrK����K�����5��(�7��L�����;~e u����$��W�}i�:^��@��_<Q��ox�����&��9R�oCS�ed���4���Y"��zS{��Pqr�0���/�M���T~���tM����x-5o�6�����w>�<�����������0����IGq��T-[r!5��Q�r[Ek_����������&i��[�v���^�>����C}��5�V��p��vi2��N�� ����l�N�9�Bj��q�T���S?�����&HG�E*�7��;H.��P������2Dw�3���{�A>��syE�9I^�������pP�%���B�C�=�Z������iP90y��1�!7�������S����w.4i^��������j��jG]������\�-�|��d��FOS��q�v��r�4.����J�n��������2"��cD�a\�$^��5��>��+D������h!N27��%D���&�&k��	'NpN�+L0���������")�������"Lj����T����G���&�"�2+~� �����-��whX����Q��"��_�U>N�T����������/��"��-��|?�#��J5��N�o��K�7�B.x�
�;@����}}(4����'�6���z�Hk�@wX�W�7z����"�����PMG�^_�@�K�������Q�@4|�>/�����q�^=���[�O;�yA��V���	X�y�j;�p��	�������6�QK+���� �~����H9�7��jM�.8=�R1\��
9�1���=��U���Ox��'OT�V����_B�F{���A5W<uXY�Xl|�%���)\�5������y�5�N�XC^`�M�X�����`�*7�qD��m��P��P�����!&���o�|�n:���O?�����Pq70HCA���/��f���]�@�:*����_AJ��;����k�P�V8��wY��5�P7�x/����u�xo���{��mU�*�v4Pk���I����z��M�V?	OHp��
��h��yJ7��
SF��C�3=Z'k"7f��.-�1�|�_q��`j!�WC_T�w+�H~�_H
y�I:����Y��W���o����������n\j��/�����]����`�k��x���
T�
�
2���#u�X��HwD�^��*�u��1��u�Uw����_P9�m��^lG���6����5���MMuE�����SU*dg6*���y����gE��t'X�`�e�!��#���\g�:I��� ���/�����W_T7���c�
G�����A�w?�%������cQ��������(T;�]0�<YWGi$���#`�L��l�z5W�����>O��+�����}��w�b�oj�ze�eqn�}�����I�L�f��+���r�SN�D���!�.�:4P���B*��P�f��T2�������@�D�:uy.�(���*�'�znq�������5�Q��!o5���24��#i��f��8��c�����7���t?jt/J��H�����������������}=�E������:S���1#�����d��z�|�u���0���wsL�6�D
H������>�QQ]����.W;���]c;\���q@q��>_^�>������[�6o'��"X~T�?S3��)u��I�R�6����\�X�|T������SVD�FjU��W��_������n�V�a9�a-M*���������*�cj��L�oN��.��G�Eucp\���?�|����.D9�H�5	�b�P���c�����%�ijDk�k��k������-E^O�GP�y�)�7������������^T��c�-���R#7s����`��=��4�kG�G���1}���O8�p���������.7��<U����z=������B^��:�0�Y���i�0!s�_Tw���Jf������v����#���������n�����������`��R9_�<�:�������9J5R��96����m:�9��b�U
�T����n-x��e��Z��MeG���^u5���%�����:����r������Q]yF*������_3t�z���o�����}J9�8�7�s��^�{/��X>����
}����������'�]|N�\��.��P`�2S��4b�9s�E���������Qv�j��}��Q�hbN>�'R+�e�R����(�sZ|�"�_r�@ml��{���h���`I_��DR�,+��I\O���7��l�e��������D�&	��b���%�!:7����e�z��R�..�+��m��f8�����z����}/��&-���������w��qz�NR)+R���s
lC(�����)%j���5gI�pn������
�}��q���^�=j�6'�W�F�t��CTNr>���M�6��DN>ch���xu�t:7��wr�H*��n92��~}�8}����75|o���L&*��#�$�����W�6��8y����
��N�������b$�Z<����������;�+$VsB[yk��������-�b�8��^r�f(�d��eX������-���������Y���b�&�m�W�_"������}^��^a0
n� ��^�C�-
N���� ��?u�mC���5�Ex�`����W��q[��l��VC/�xu�y��|���7������Z>_��5sB��l�8��x,�Kk*����[�W�����F�!��5_
�k!8���=�
p�����H����"�\S��=�{�O�e^
<_�@�t���F^2�C��h����C+�U������vb
%t� �*=I�s����t�6XN!;���]�C������-�r��xJ�v� ^ _P>=&`)�B�����/Z�k�`��^�X$�e�	���B�

�	�G�f��RKaT�,����yux�P,�O�E�6����|���s@�x�����q�]�'���b�_�h��
(���:�\e8�i�,��S.�4������N�Z�,o�&��
��O�?PB5Q7����p��f��A���fg����h?���`E-��7-��Qx�����5������/_��j�^q�GN��^9���=��0�86~���_f�C}��6P�O��F������:i�����50_
����&�����%�q�W�
}�����_}�=�q�WAc5����%|���iNc]?k:N/���$���_�����_�K�����@C
a���\���7���R����HK�
mV���E
T��s�I��M� �,u�o�'?`�����8���)���B��x��l����1C���qb��_��U1�5wA�C.�+#�@�iUN�F��&A����c����F�}u����w�r{9o��Q�[9��K��p���hg�%�������)���]�6X��Fm9��s~�	��X�V��rLc*�8���f���?��0=NJ&�i!���l�M[>
�-���m�.ml�_>������2%iM�
��*��Vc���]�
�iv�[�e�'�v��z�U�,�i���.�l�:'Ef�&D����J&�	��"�+�f���+=�G��'0),Ij���W9�������4�3��TRkw��g)p�e�o�*ms�`��9%���F���/�2�g�vb�x���]�����/���\����4|b��!�~!�����G�xA$��pC$�"���uE�������oI������;�x�]i=�~K�������?�����)?��%?���i��#?��O��-?����?�S���)�L������e���e����[y
���)P~��@M�)PK}
�V�u��@]�)P�����{}~_�sI�i�S���)����G{
����[{
���)�~��=��������}��@�)�W
�o�)����@���C�O��O��&�����������!��8�H�L�����S`�9t��7Npu��<]x��x8R��O�������X��S`�\�v���w��zK��M�R��O��m?����o�<�|�}���0O���?5�.�6������Z�_����2�e���k��
�����U!�z��w~�<�V?�������~^�#�H~#�}�h��c�x
����)�����~�����#\zX�t����u����	�����x���������Oc�������@�Q�2��7�����j
�nV���������6y�s�(2
3�X07����o|At#Dj��=(����C
A���@iL��LT,(�GM�Z��B]��Pc�4���7��E,F�1����`p4���2K�(��kf��y��a�p�p�(�4�@�L�X�d�p�|�}��.
�
�n.
��\�]���9G:J8M8Ps�p�t�p�p�p���p���������������1�p����l�[���g�#>{X;<�_�
O�gS�cJ��>���Y�m�����>#��P���'�t��t�`*��a�7�U���bx>}aS�;�B����n����V�^�f��Q�T����Z�~������~S9���NH�����QB|o����e�y�[�PzS���[;�;���:�7��5�����V#��GM��Y�K�vQ�wL
���e)�	�H#R��/�nmH�9z����J��w�j�{���V�Co����v��f�:`i��Tr�q�uPg3�_����lI��F*�<��������2�n������A���n���HvO4!��T���R�~�qio#8�Es�����d��l����,"m��}
�kn��y�����RlRWWM���K�V�"�gGj��|j]����@�UN�/�Hn�Dq�R\���!%Ri]���*�M������g�	�fQ9$�=�!�{���j���.�������^K&�D���^��M�2�)������fR� �	�p�s��x<E�.�zK���"9	\:�N�P��)�v�He������;"�B�������WN����J����$z�[�~������m{�;�1<9��%l~U���6�
a���XH�"�����o"��)h�X�����,c�O��3�?�E<������o!�w;RS�5��N��K�-+����b��V�T�!����4�������!���OXf���{���8����v�HC���v�:l����Y�+{I����������5��B�3���5�H�%��[�Y���-�</y�`���,�����Y��5>�f��*P1�`g�m���N^�W�J�� u�:��P�������;��V��E���-�$�f�5D������QW|��F/�o�����1m�u�B3y�-�$j�n����%���������h@E[�4 �T����P���n0����|7�"1*��'S*��T���T�!�V9��:6���r*��Ma���
�����9���Td^KS��(r�����'�_�GTW����U�t��}P+W���c���97��)]rDr<�-�Tt2!a
�F4�"��3�JV���������������|
�h3��#B5���o�L�|e��&��7����0���M��XS�����Em�:��p>�h�A�8�88��N0���u^$��u}�9
�N0.�L(P�N0b�g�q��e�-�g��b����:y��H�-�5�h��[�iM0�43WsO>h\ac�q�c�t��`4~;��M����������l<���6*�`s�������������S�z<�-&
��9���q�qz9y��6p�,����.g���'W}�������5Rg~��T����6x��{��>�%R��P++1y�y��3�,��`�������
���c��p����+���O03@k��q>���/Lh^>�2���I	~�0�AZ���oP���������e��*?Q}S���[��w�%��oU}QsTM;kj�c�>u*&Tf���h|����8���^�V�TN]v��i}-�=��"Z���������v'4>Q���I�p~Q{��"�za����W\���������N}�-r�F��7�l������H]/*[5����h2ER��;��)���[�GC>Ew�*r���>����M9*J���Hz�(�D�wh�.Q;������
^,�6gs�st'���l���b9��5�T��H�&������+_>�\?�}��}x���Xa����������M�`���~�A����%�+:����wK<�d��fs�eg��l�g������.��zK<�i���!#Pz�����
!9�=�%�cK��di�Z�yJ�'����b�L����p��%�f2n7��s~Qj��i+�m {�3.�Q����1�rjk��,�%P��"$l���d�d�m�<F��i2}f�u�4���v|���hHwiWK$�l��<�������x>�����7��3�{oF�Q_�Y
����;��W��<l�v���E�)r����xH���YE�����g�	�� ���k:%������i��?Q��E����������vN�_������Uy�&�9E��>�@}���f���V�#���R;��z�3R�� �M>�����s��H��e���E�&6O��P�J�Qq/�#�����^���dV3���9�`��2�;f�H�5�i��7�������XW������:%��L�,x��l1�l�	�L���n2Ef���X"�c���7l8Z����fO�'+���T����G�������C��U�}�J���<����BS��t������G2xF���<���Sw+�&���MgS�A��W��N�B��I��/�[7�4-�0FS����n����i��F��m���VC7��V���i�6n����E1�7����.�,���
R��n:$�)�19�2t�[=]��]	SK�U���o_�VYHW[�LDJ49�O���x���$�a�~uJ4�� ���-\����h�F���&Z�O�H�+/�,��hp1�VN	�������B���x~� 	X� O�!#8l��e;��0����NA�j��.�z�(�?������k���l���8<�EI>w�Y+v
�O�I��J�;_��R\�������o3 ��k�r&m��<���;�(�iry�d�x��bn:�4���U*�������Bt*T�����)T�}Z�k}����W��z��r�d��
P��� ��em��������$�C0v�%�0����&/��O%�V�0��@�+B��[��N�
XI��!Z�*g��_�XGhOK��Z��� �Q66.V������^����^!&��*�����2���<qH�i{J�8k���ZM]2��U�s�m���uw%k���KKt� Z|�\a[����L/�� >�)Z����l�[[�-8S���	���"%��s��$���sZ��-iW}5m_���"���!���3t�c�3��K�=��d��lv�y����U�MkMQ
4[��f�ad���,��1��Kb�te��~g������t��0r_9|�,�����i���-v�,�Q���F��(g_A����9��@R��s�s��q�������{��"
;���NwT, ���X�>����.��(��(�Co��j���=xF�	�s��r���\�����if7�����T��z�m�|���.K�u)xf���/w��^�r4Q��3~7eG���\������z);���R=."<���)RN��}�V��U{�����y�OKi
�Kp�����
W���9.-.���-��S*�P��$�;����J�ZNA�;���Vs��� �b:�M�����J�z���k'�@��Z
K-Fq�Z��������-�m����)E�m��6;�Z�,%���l"&b����a����m�TY��������UtC��zj�����o�]��O]_'R}��x�����vo�y}�������Z
c����_6,�/��+nK�;�[L5O)�U�]�
�(u�*wE~.|��U6����g%�gz0G�,j[X�����+ve�F�m���m ���SD�������b���f<��>��x����bt��&�w���8KFR nR�6��.rq_J�W9-�\1K���t����������_��������a��, ��IbL&g�)	�w���K�����n������W0����B��"��q~��lZG��U��W�a������&p���a`2�v5��B������"�������
�p�]<�C�@�3��tB��,_c1n�mQ �\P���w�
WM�
_���8z!��"/�9x!G����1�
�������>���_3E���� �����};H�9�_4}��>y�u��W$P�N��H��3�[�+�����d��}U��V�O#�k���	0@��Y-�����V����>M,o[HK2�7?i����o4eU��7�h���p��M�`��hY;|J��R��:���uY���#m��B~����dH>��X�!!R��*K,m�k�f����	%?fi�yE��g���A��������i��l5
F7���
|�������9��������4i2�����|��L��9���C&�qe�3��
D;�4���:w�V@��Vf<>�Y

�Vg"m�@��y�~��)�N��qS`����E�-�:h��eF��_����:�E����5�'��������h��w����7����}}��9���. ���i�k���u{�.?�L�u(y�
�����E��+��L	��?cq�?����+w�:����$�����(/X:���\��^��o;y�>������������F�]��b���%��v�ZXP�Nx�%����n���N_U�8�����U_X�+�{���/�����V���������8�Z�|�0.d"	NK$iLY2���������V��ia��<Xj��]�l_US2��m(�CXo�\p�������%�U��YZ��0����0P�,��;����t���`����EA_�N�q8�!���am�(w������D ��@y����w~�x������F#����(w�����������h�dUuw$
@��f��U.��} ��a���J&Zy�R�As����7���}��9!���rH���I����Z�.����@�Pl��N��@ypX�;>bc���P��r�CP��_>Q~q��G�ET�@yp8,�E�{�(��7Z���<^������6�r��<^��<�"��q������VG(W���������."�aXD��^gR��������S^�������}XD:<��lW|y�����o���6�=��\��;����@��Hg���gk��'_�|���@�a�]b���y���%��"2k�-@z������W�����~�.N-"���<9y����<�
�HY#_Pn�gZ���[�F�3,"�$N��u�iw���igy�����>-Q�K�2���&�"2z�����r�����q����1�TmEn��B&R��w���@��v�U�R��p\0�U����q����:�\*U{D*�����[��8�d����/��!i��9��]�B�}�E���K������i"`�h����(K������n���\?;`���X�,��7������}�4�{e��~i�@������9�b��`�|��U�����^l����>%��(�r�'���M�%��}��n}�_��M�5m'��clu
`�����J{9W�
~nS��>?����noK�y�����%]�R.�H�|{���������62��.��N���*��lD(�U���H���\�	���m�V����f��V�g ;�����:�z�V���hXe��;3�$�=��9��5��J�|�����������q���U������dd(�nw���W���K���vz��V���V����7��#_z� �x97-r:���XeC���v5�*��R��?H���X��5��x���_��O���kw�.��n���� `�A��O��aN��E�����b�����N8J�p��q�[R\�3+�7*�8Q�s�_A�7F�
a]D�D�L��Bc��x�c���?�~����5��Az��,p���#��a?�O-(*E�PR�'p����A��E��WDS�e��O'�(�i�v������K�67S,��"���r����i��D��6j�3���&wZ���Y�D��=���:q�������%�������6�wN,97���b�T3�!<�Z�lg�+����sv�����Bh�P��cK�G�lq�����g�S��V�%6��u�|p���0p�A2�5��\br�d�\G�Xb2�y>-��|%c��]���=1��.��9���S'���gL����Q�>AoF�ei�k+_�	e���<�%r����R.�k(���y���@5��`�87�6��|��< �"�~��W����:5����	;���M�
Z�Pm���0�mmZ���j�}9�l�Z���:s���_�z�
���Mf�T��wP�����H�t���b�U��6A3����]����}^�\�����A����z��Ov73��^�9-�@s����\�@�����Y���8e�p%	����Lp�{�����_��j&`�g�Y���>����+��r�3�\�^4����k{� �7���B��2�K]>���}h�����4_�UD�T�K�`+_�{�H�,k+�k��)�Y���Y@GYT������F(���u
�}�mz9��J���>�P�3�������h������Y������f����� <;���@����W$@���5��� c7�������'����@+�ng����:����;_��H���������IH39�f��0�^�
I��	��v����<���T����W�d�<g������2�xA��3�u�~�,Z0���������@��E�Y�ux�hm�s��2����������g-�H�c+�������%�)��+?�����vM�k��I#A�q��t
u�hSG5���D$�N����u����?�f����K������Q���A�9�U��VQ���1K>����Vk���n���{W��������p���h}�h[���S)�M�������_T���]� ]� �(8t�9�+tu�+��)�q��m��w�r(���w�Lj���������hM��Wo������%��YT��H�i�`>��+�)8��q?�(
��	g�0�q@����?�#��;���V���F��jr���4���j�&He�����)�Z��+�@/�-Rm�5��2��6������\��6�d����Cb<X��.A��H`	��e
���x*�������onS���E�������z������O���/ 8Y������x:����0a@Y�v���mE��T��`�����.d��S���$���2!���Z�3�/������N�;�,�R�>��G�5}���iw���t{x��=���l�������8�VKpQ�k\�������:�t�.j�<�.jsR���A���5`�)�y��.y\�R�;N�6W�Y��������������~��~������ y5.�m����c���3�0>d�������oE��������E�����x�{���,������������-��K��8���p��7h�NKs��q\}F�#����h�]n�:i�� _������Y_Nw�
���d�g����P��
�����%�D���*�������������aff��vr�����w��kDQ;1*x�X���Xn�W�+���5]�
��)Q}���F����Q�o0\tN�v��
�1�XD��:�Cvlr����>��9����� �-Q,����f�����v6Xg�%�
'�����"X�PE��l��t�������P�_"��V[(W$j��5��h�qN}W%��H�$R��������a�MC�9�rw3B[R��G4T�^&�{����K�	K8��K@�.b��f�������t���gE������E�����n=+��3��6XP��qi�
�����*h.f5���,������i<3���.N���+�x��|�@�J��������
C��Y�E
R�e����7��T�<<+�H�D�.��a�(��d�h��l��Q
�����=�!�����*���Jf�><���6��!��;�[AY���@_��Z��C�D>��;�t���YX|�i�1~��j2�]Jc�T�@&j
����Gu�r��
�6|58�����p�6����%�����C���g�mCn��A����3��s����XicdN��E��7��f���m7f?���x-�`���������h��Q��n�;kx5�Q��^�7>��/<����no&����u�t��j��n����Ki
�h����3�a����6j��������@&��������?�r�m7"4h]J�������������M�={X�i�_���<KH���M(]*7�������l%�2�U�P|���?j�`$������:jS$��6BY��A9S���i�h��>eTw:h*���h0�W�>$���.���+�!�F)f��\� r�S:~%E�~#*-w�][��t���?��	#7�{x�����V���0
�8-
��Q@�1����;N}���U�.D;��O��2��>��|F4j����
�{����|��<`{�wZnk*n����#{��c�c�>�m�i2��$��4�����o�,y�(N���S�r���v]��O}{���{����j���?P���'��M��������������y\��^fJ�![�Q�e�4��i��az�m�w]����D���9�����s2n������2��%:��z0x����%���h��Y�s!Z���<)P���%�*���RoE<&R������[;H{�9`e0��s�����t���Z�gL�����@I��MC��j,o��&��x����4����Y>]��R�=�2j�w����g|9��/��4D���AD��s{Q|J�����Ai%R�&��1U�C|j���I��D��>�%����w�:qhv-9��F7��|�F*8RL�#�$���[�49��h�s�o��axnQ��2/�y�=kP�;�Q��!��M�J�34�_J���#�{/��N��)Vg�A�k����������8q�/J���-�����Ha0T���Ey�Ipj�|�H�������:������?N�?n�'�������s�������w*�<����G:��WZ�����������������s���s���s{����O���S �O��=?���xj~
�����V���Q���U���o�)P���@�Y���T���R����@�)PW}
�o��}�^������?�>�������G{
����������G������������<���s~�q�0��s��x
���)0�<���|
�6�s���\�)0����������Of?����~���q�����������9��qN����{����������#�����C��?�~~��|�������=�����+�����������k���k�����_���������~�u����S���S�a�S�a�S�i�S���)���������?����?����?��������)�c�x
����)��������?���=y
<r|~�����������O����������}��h���G����<�{x��������1���?]x��?���*@eV1^�>/�PS�,4�����������b���40�c�d0���qD�b�� .�b�HM�5����!��r@Q�4�@P&*�
��&B-ME��FU�
U���	|��	������`Xfd08����%M�
��M3��}�=\�A��Ag�'��c��7o�����������������>���s�����5g
�J'��GL�m���n.��nC�
_���<�=���C�:`�=+��m"{�e#mi�b�#lx��R�����g�������BX�������Y�<���R�~B�H��nRV�����B�',���������J�&\}&7�v�����m��c��A]/ZC�d�k�!22%�!�/Zi�r�4�'$����P�JF����������wO�[�Y���
x�e��o,6�xm/��x��
d�X�E�6M��I�1qpg��]�r}U���{+%n��l	����w��g
Z��Wk�l����4�4tw�w/��0+��`%-S�Y����Z���5��U���K�4���g��}���rf*����W@H���e��A��gs5���6�x�z	���������eF�x�d������m��[>�����$muh;�}���-&6����&����g�?E[�V��R�7�R	H���V>_�i+�2�\.�U�����T@�L=)pO���%g��������^g��z�T"
 �i)�'^1�2?�������
gfd"K�1���atb�j�[m�DFZ��D���8�� ���/�59�))9m��M��hL��!�����j��g+��(j,�B����|��"���I�Z@&����Q�s'sm��J��
�,A�?#�9������!I��%��o0���;���`S���]Nfi��v���r��W�i�`��=e��Zmg�{^x���,.�g��_�79�g��)�ac���O��2���J!���A��b����|���'�UuKj0�b�C��J
�&7����8&n(������'i��a���O`�����MQ����l������������ps_�>��d���V��?O���rj���h�]_�^����8����;����9&{���8s_|�vv�$�����t3��������8��k�R���������w�������9�`g����\f9�S0�br�6o����od��^�V�i��C�]
7�j����@I�Fc�T��p��h�C1�uZ�A����Ph(C�Y�C����16O�^�1��Hb���M+���l5m�@[�Unw7��Y��C��,5������p���]#C����N7��|i�c(�[@c(q��`vc�[��
�h�Nl���b}g�����!�&�f�1n�ax'��n��c���4���Gx���RO�|�����P���y�8��9�� i)�i�UkZ/Xjh�Ux[r����1����d�[�f�����w�+k���}@�WvYy!|�9R��!I�`o�k��n��u�����R�d	D�]Pm�h����8'>�3����!�����+1(���|��v�w����5�G.��yJ�j m��L����h3��M������X��y~^����J(�,�4���3�r�7���B��=E������X8���2����o
����j`��~���>_"����(��b�BT����@Ok'p'|i
�h�h���A~���R}�����s�Z#-�ip���\w �P0@cp����+�`��>`�(�.P��Yf���`��x��8
9}�~��Au�|B����k��)�z�4���������k���r�=D�]��y���M2Z,[���j�����.��7��:������u�+'���w+��p�u�� '<�5�;��K2P����m���J�Tb�*e�Yo6���bOhb��k��U~

��>M����L���������/:8�e�-G|����t��s!�{�������=�]R�e��cM\@q�=����~����!j�({�n�(���k]j�����2\���k���as����B��8��������5q��Qo�]����I�6�	g����lh��7u��
���K���3����j��;���V��H�X!��H��]v��R r��uo�39C�HjU'����:��)CX�6pqo��5���qu�QQ�0e)���k1B��m�����PQ����>��{�c������o[�Z���o����~��W� �iq�>�LXAb#CC��'�1�:�@�k�����'���Y� �Wl��#�B��������OD��_W�}r��(%B�2"5�7���.��k�-�����^A����EO^�%^��o���yl�����_W���2q#)�Mo�(L	
t��`����=|������e����\�T�'��A*{2,���a	��+jz��#�L��%.�xI�57����VQ[��:��������
������o�R�i�6���G&j����`�����LX.���>����
�w��oG����}TR�����=p-�cIAHc{o�&�H��+��z�p�����n�oT6G9�J��3���>�����;	=Z>z�O���D[�~���YPvB�'��g�6
��w\*)R�V+��;�G}K�����}���Z%m(Q*N���+�5�V���l%������]���#��0�|B�
��*��6�m�Z��fq9��5wzm]�Y���X�0k�?>_�@Mn�s~�z����T�yC�����'����w8d|-N��W�M��M���O]�W�������TLT�l���WF�B~��8C�-�:��H���%��>���:����Q�o*]�qkm2�"�|s�6�+w��Vjf��v�z���s28��7�����)�;���>q�P��97�p�����E�[��c�^X��%[�N��W�&���w���|��������������"��>/�����Fsr6��d�g��7P�T�t�+��I���2C��������o�l��M\B��n��k�T��X�����j$RS�{!kC����-d��v/���8�������uY�z��[6_��X�����kq{��E�'5��=��8�� ����X>0���������c�V]�6���<�|�`)���rP8CN�/5�(Zf,�GNm�p�������,n��1��R8����5@;2�"�E��H��$Mr��}�"��y8��VU��j��pwL���R-�T{�#�1qOJ
��P{��v
�:|�g�< �*-��=�|���k^
O;
�jnT�r��N�\V��/�����>���EY�Q�BM��v����~��=*�&���wh���]�?�0c�E*$��aVL�@�u�ZH}��~i}FToj_�,��k�)~��l��P�F����d�k�����-HR��j��Z����md T�*� %�#�5l!F59���Y�+���6���l�Ic�V�����;`7����&�6�H���.,v8�lG���EE������5b������m��+2����H��(�&P�����e����U�~9�U��c60���9�W5'G�F>���^U�1r���yW��zQ���VRg)w��rS-�ZEr��8���6���!�V�C�l��n9���|�4m1a`��1����x�5������A��\��g@kEjy��w���;A�dB&�_F�b��ZI���U7��I��tjNIE
Xu����[V����^������^�}4�����"�Y"��l�����?�,�i����3�9X����u-Y��)�R��u�n~���v4:os��
���$���^�/j��	y�UH�/�b�-y�A.N�l���s0c�3C��3�OU��8��y������u��,������m/sL�B$�x���e+� ��'2�R�r
2��QV�1q�>PST�����|�{q�FeA�hr��(��8|�U��4�=c�M�
`�}������k��`�$�9��:�}tD&-�
�G�f����3x�HVh��S]sG�u���n/_D�-�;�C���SV���8��2{��2�}t�.���%'m������eM�l�`�\E�s���o�
E�����J&"&x1�`a�A����"2?5����I"�D��g������R�,����*2�R��EW�H��i��h�����������������UN�_|F�=��X����� D��H���"2?x�eG��/��Vm�C10�$��>����j^�b����%\�uQ�����[����6o�1�1����cy}��������@�}
]#J*��!I"Fd>�B���t���]�=D��/}��-<���J��U���q�Tf!�!E*����
�cW�g�N������;��@������	��5���:�!�l�r!�:����[������B��bj���h�7[��
�WG���-��=�M��HR��b���e�����Zy��XEeTK�.���.��W��4��������Gy4J��������K�����p��Q�#R�����I��WR�?��f���4�:�d����I�cp&�CFi|��
O�0�3����5�8�N��5C�2]Uc�Xw�=.|Q�R�s����a�`���n<��	���3���[�i���%R9�i����t����3���
2b���A�E*fZki����0�z��-x\�P����q��cq��W�i]�dY��Mr�V	��xgMER���3�5�L���[9/�5�Z��~�����+1�i	)�9��8f�i�f����gZ<4������`j�9V�a��C�GV�����$���@��X������y�������Y����l����.�	j�n74V�n��i��� ���n7-mNQ�|��%r�#R�|�������>_I�:6�#���fB�=��o�w�/�W^���{qr�v���/���������
����4f�w}����|w�����w����(��3�eN����ro��$	�n7-�g��an�(�P�������m\�v�q���������W�m������
���^<���&3����v��/]������9������y�}:��_g������8�,���s@����b�|j�)~3�������d�8s>5W�
3�������I@�f����4�L4�M���dw���N��*��*_|���Eq���wF�5s�0s>(��������f����^3�����~��w�3�=d$Y��3��/�yQ��j�e��>�Xh�5s�>uy�]�]��/_�2��4G#f������\������w}���,U�=��y��g������C�N��3��-jCn���z����h���3���l�%*
�=����
^��2\/�YT�yF=����E[�������{,0������e����dQ�\�X���g_�{QqjK�J�RE����F���y$�G^p>���A�d"�Z����k����������r����\>"�/�H-�vR�E������A@}���b��VU��^Vg�]����&��������P���Y"��U��HC��h����Kl�(�h�r��e�f��|F��j��7�B�6xu�:eeG�6�De�E>�u����������e=�����qIW
�U����'_��m��P�w�����#�ij�#/���
��&�B}��Uy+[o�n�TMK,Jzq
CU5�!S������R�.?��"NZ8�M�g���q��I���@:J-R-L��n +���P���]e�H�[����������������dY.jMr���n4U�d�,��P�Z��jeQ�B����*(W�M����`���?1J��^�hI��I�D�\_Z�yr?vGYY[=Z��i�R��$�qcDY��?�����2�(	cF������g���=�\�Aw%��>o+���?��f�����;��������H��8�L��-yo[��'��x�x���rx3�.R��|�������"�����~z�y�_$��������0k4H@��(�o)�c���+�rL��#%3~�����5���L�1��e1Fa�	�����������\f���K���}���8�Y�&� U��X�Z�vU���9��iK�q��.�e��2�����q�������wIm���e��(��M���sL/~�.�:��F�J���`6�����R�(�H��]vy���e��t�������(�:Y��qQ�5���H�����J�q�8L�/��Hl*6X ������+82RW�j8e��[ Pk�T��������$��8���w�lu�w���=�I�E��N5r3��k<�-j��o�X8�nKI��9��������C
E��;�� m��%/��!�]��a���R�1������O	�C�Ni"��f���l��~��_R3�1K�V�]0$~;�|���a����,x��p�5s)��hR�{���VY��/T�w��U�"6�d��	R'�8�}|Z��f�<30��N:u�H%���lO�7��
�$��Q�Qc��y��5��[����k���,	�{7|�����Oj�1e\���"H�hW^j�cr�z$����]���J�3����.*��!u��.�\c�vVf%y�
�:��.8�h�7OnX�m���c�������)lb�e]Q�K���Q��Z�lF���)ks7D�]�c��.@E[����,��n�wA�K���'�:9A	��Q���&��������sE"d�>
2���"W4A%�#RiN�����c��|oj��:i $�cG)�~q�a�9����VtU����PV��	B�� �u|�A����N�����$�����P�|5�l�t�zL����l-��iw�����hW�U<���3����?�'Ej
�"����{,�9�u�"F����j������g@<'�E��Y5��v9��v��Tu�������51��r9������8���&8�p5m��2�!��Ow����d���v/����t��r�J���
3��&+Z����U���������
�sT%�r����K��7�G��Gu��;`s�d������v�j�r�����K�')����o�Cs�
�������
���.t�.�cC���b���e�Q�:��������w)+5��c��\��yu���<fx����R���xu(�n:�����������:�G?������c�\;(L��j�j�~p[~`�����������3AX
VvH���1R��Kq7�k#~���]f�fL��Euep\�����>stkG�8�H����@/�(��C�0cv_����N���{�����#�;�[��]y�]A�;��s��f��]��9��v�U]T��c�����Y7����.�[�J�s^�yM��fX��&f����t����#�;�������5�^F�����tzh���G0~���!�����:>[����:O]-�����nL���S���:�1�������
�[������+8���k,-X��-D54y�R�T7y���-Mw�����K2.�)�
J�&���������j���u�8�������%P]
W��fF������5z��Q
��J5t�z����X����O=�kVu�y=�����8��5R�}S
2Yt�'b�a
C������_
_J/y������)e����/e�U3��_z���@�e�
k�4��+�/u��LR��:������l��;
�$o)������1��8�p��Q�7���e-�G�2+^��oX���b��M2o�h���=��d�k.;R����+��\�p�����A���;X����{v�����.j�kV��.��$�He���+��P���BsSJ���k�����e���%
�T�������Q�����_��n�$�L���qE����cW�L7����9�T��\<[n��de�������e�����HM5���c���6����y��:Y��{h���_ P^���ly��#~5��_T�2�=��RU�"��'#F]��_�Y�N]f��K���)�N��M�7%+�-b��s.����c��o�Z�>Y��,��e =[����&���'Qu9&�
�8�����-����E��'F�[�������3����K��q}�����qeJ:��'�+N����k����l(��k�k��A��5��cT1�	�������j��}j������3�_�F^#@@-�za�u��j8 33�+1�9����4q��e�d������������e�����m�*��m��;�q4�������.1������>�����Sl�����`aN�`#Jf�j�b�	���0��eei�=�|�Z��>=�{Tp�S}*zV�v��e=�d�>�}SK�e���i�_]b����{�:�F>���=ppuP��D����h]0j{[T��}7G�B������h���H;��h�_���|���M������,�����S���#�7��r�>}�

4��nd�.zq�
��b�R,��vA�i�
�N��u��U�v�f�������*�Z�kHyj>(�H-��_��0�S	=��_������NFy���r�N�'�*[]�t&~����>Qx��uGj�oO�����g@��^�q�������?N���Z�|����������<�$K��6��;���cI����-M�u�1�;��n'v{�`*���m7Y��_�.�p'�2��[��g@�#��n�U/����}+�y��K;�}�=�y�W�
���<.������\���<,Vy�s|�S�#=���Gz0
[8p�u9�3r���l�#��/�t�`�[
}����B��+���EC�m�g��{����KCb����_��F��v����<���Yj��'��qL�1z`h��"#\�����fc����&���,l(	��}Gj�`�_.�~���:���`s@��2���M�[���u>���!U�x��z�~�����Bl�E�x����jx-"��%���.X���Pk�����sj����I2�b����9���y��~o�����������B]'tz
k����O����7+������o�_�MQ��K*��`�x���Z������>���2��� g	R�J4��L�����uET.
��5�(�H���C��D=J���2����w�zrx�%�N��B������2��������%��1@]����I:	i�����Q�Q8��j�l�}i�-��������;
S����W��n���p7�����_��<B��9�.���9���S��o�s��;=�<K*�����w���]i=�J=���_���������������y��@^�)���O��#?���xj~
<�y
�V���Q���U�����S��(O���<j�O�Z�S�����>��O��W}~_����W�����O��O�O������)�V{
���S��hO���=��?���?����?��O���S�����G
�_�)�0�)���)����~<�<�x�p��<�_���{<m��{����K;�������������������/�M�S�Be�~v���w���w��O�=�S`�����������~
<��^Tz��GO���?5�]�.$���V�bV�y�+T�*�kS���v�����3�O���O��!O���O������������~�����������O����S�����������?�?�|/c=��}������������a�������no�������m�J�z��KZ?��=�~�����"~o�2�8^{?����Yh"�kMG7�%t]E��0��F�i` �	���`�1����t����!=�4��?
Bca�`A� p>J"��D�J���� �u������A9�(P(�)\���Q��fH-��PW���1T��
U�����8������1�a������1C���%7Q0W0]0c0i0of�`�hn�8�P�h���1�a�������!�U��6s
�M3��S�`���[����7������-��������a�����z�������6)�z���-�Fr>����/Y���_="����f��k������^�x���d��{b���W<��r�.Y�J�Z'�f�%��	�#$38x���������a>z8��;R�
/k���f�tS�P�D�q��`z��v��&tS��5����=jU����g�k5q�F�)jAY�>d#�H��S�Q�����v�>\��J�T���t�|�@��'��/-��W;�-Y���n ��S����u����$1;���2�gKc�J�����=h����C�����,obc`������%���T�%�n0����uSg�e�e�y������B�����y�kn�]W�R����LMlRkSM����=�
���&C4kS5c���j�J,�'�V�Z�w4���P"5E��
��
�H-����]�4�+�.�_�.A���]���R�k��6C����o��8�w+^�8T����cY~ia�U��c�.mk�����v�Yqe���&��w��&����pr�"9	\:�N�P��!�V�He���0R������0�$�
R��6����n�A��&�r��cW�i��]��s�iLZx5�b��k[�l(���E+�U&�
8E*�8#!h����r�c�&<����oV�����#S�p
��_B�BV�����b�v"�����-��z�!�����#�����15��|��tl�����',��~�[��|8k����|�����z�����$M��:j��J_z�V����n;�	�<�6�p��E�����5-�s3F�>8���;�dY�F�'zm��[�	c��s������ K�K��D���cK�����<@jQ�/���la���m����lp�5#���\�y���F�z��oIg��d�p��b�� L��8�Z9�K��(���������r)������`����f��
�a��ZKT���(��(���R��)�+P��c�Q��e��@/�S���k��i���rV�V����^K!y���'Yv:8��� �����f��Nv��0���uD������p���@�Z��5�(���)P�~�+P�z�e%��y\�H�zQ8ib8��$�K2�<����<��!#GaB�W���`��H�`4��q`m���`�-L���Em�:��p��Kx�;���;�`����������Z4�`���=��F����!�hC�!�z�(_����
00���OFx�����"�hS����=y�����Ps?O�+�hX;a��"��SU��~Wv����6���)�hC���l�R���3��`��E����'�������q����A����F_{p����^+�H�;�e���A��]�����,��|�x��L�9f�|wr}��������T���.+0�DL����q���S{�w��������C�&�8M��LYM��C��.K���P��e����5��[�U��� �/�B�XsrgE�C������u�&:�~���������(����l�B�UC+'�e����1Z�6'T>Q�
_���G�	����������"5��5���=�\�}�?#����`�#"u\T�$�	3T�RER��'��*�1��':
y���{1�jS2j��WHR
#J*�p2����������|�c�w-E*
�T��r7.
v�0��(D=���p���uMG�Q��l�������d��j���yR�@�Z�X����Zu7g��l��������V��x
�a���DK<��>Lo���c�@{�|h�@�kF����o�����84j'��,~r��L��%??����TNK:6���p�?�����loB�k���Z���< ��Z������-'9���:=�f��-�g�|�y����������6q��������ut��Q_��G�~:p4�[%]'���V�=f�n^Y��������}�Y	
XK��8���@�����l���[c�w5�[�q&�O���i���#��5�Q
�Y�|���C{��#���s��yh����w��t9�X���O��~��UT���� ��_jy|e��]K���eZ�,Gy�W�%]�������d��h�c�u��_�"�p���e���/�_x��J�j8�p�
��t_��V�>�G��$�cc�R����Kx���J<�;�yx���&��Z��uT�?�)�22/���l��P���?|?�:��U�`�
> ��pde����
*�vh�Sb�p~2*�������~ZAdi�gK�,�#_e��>�����/|�x�����@{������p�����O>>��`�s�"���.�n��x�A�w<���N�����iX�z�B�O�`�:_��_+Fk#��9�S�u|/�V=���d��t��_��&�=��N����M��QM���/��y������dB�'����;�~�~�%�
���yU#%]�2�u��q)�^S>��U���P��@��)�@M�`�N�[��(�Hu���������(�z��^��#A����\����Z{���xXFb������{+?�C��{�v
x��X��H����h�_�|�wh
�8���k�G��h
�2P?&8]�'�w������q�C�/t�V��l����#��/l&��K'���/��*(�i��5?i"f;P�	����K��l�HM�m�w��������o��+�� ���b����]m�!6����oJ`��4v�&f�9� _�R�1n��Xw<����
��V
����:����-*r��t.y��F���W?-C.��nd�Q����������F���[nt|uYn �/���NJ��@��CmC���� [��l���Q���]�����*�K����d�'�e1���7-�����VZ�OI���V��.���*\�1�U��P^���w*\�*��J:���K}�V��j�A��X���=��H�h�H��j�cV���n�lx������9�P��H}�U�4W����0%�
�
WhrzmLv��7Y�G�?���o���p[�O�x1��@��[}�����b��]'v���@K���wx��|����GTgY�{\��w�

��������T��?-���n�g1,�����J@k��'��%�d�]��|2t�cQ��7l��M����m`������������+h���H���m����d5��?���.���2�������/Z��,���-�j������=�d�6��a����������&n,�C�z���p��DD�}�N����V*��}�lb�L���"���o5
J�d��
*�IEr��&�l� `���$�f��4���'��n�5"9��	��Nl^K�9\��4g��3�D) T*������t�a��U��Kj�m���6����
n7&���n���g0��v��B{J��Zb?��xh&��&���|��l
`���Cd���x�6��6���|<�L
h+sA[K:=3�����'F���H+i�<_�.��E����ioh��L[�'����rLn�����������0bS_rlK��@T��^�������2�G� �|�;���O���ikY����fo�s�ii��� �#x
��V�u"����oe���i!�g����Ah)�.�W�`}f�v���CD`*����9?��/^#�x�o*����=sH{f�e���/��Am�=#���9�O{
6����~,FHI� �Hj�����E�3��w���q%�&N�H�C��\0���R����A�������s{>��M[���eo��y���!�3��(�}�#
J���q���P!��YV�B���?��	q'��!��:�������.>�<=%�Z'��rU��Z|C\�6�!��)#��i���-N�2��\��`?7�i����H�����d5;� ���Z.�J5�����h'�Tk�T��\2�&���N������`�N{����rX�*�`oQ��4��y>�h�c�]�yB\2���������R`{F^R���sL
{�^��K!��~�
��{J��j��������Q��II��`4��L��q��5��Y*�(�9�Mx�a=]�j;�^�Ix+0�<Z��]�~|!��}�����h	FV�E��[�kKiT�y�1$_�@x����4�Y��K6�z�������	Y
q��������:e\�z�R�-��s���?(7��O�{]����t�.�6#�0�r�c>~��4�P��h`>�3�!��)�fB��^V���yeI�����bXr%�O�+2��ST��S:�����^dF������EQc����Q���s��}�|�$xBA�4�9���`�a�>U��I��$��O^����c�3'Y+�I��2�9�Em9s��k��fx�����d�0'Y�A)gS_�g��)	��8�#qN���9����d�0'9�V�f��9�R����Ws���I!���
s����J����$l��$/���w��3�I����I[���Gv������Z�i��8|�m<b/D��y
w@v��
�n��p@E�@��]hn\���a�m�\��-�@�M6m9���d"4��qI�h�A����r�,�BcT������'�+�L�|������`����
��������qA�k7�~�f��!0�:|�����v���[�:h7z��q�2;�n\+���L����J���%�t�����������q@/r@o��q@�����0���=��5�<�mf�&�,�1&���I���D��'���VG(�I��YV�&���I�7����$��L*w&��_���e�A����i��=L"ZJ���$rw	a��&�i��h=o~.��$����8�t6�x�v�i�p��0���'��k���.
5�L"��Ac�&�{\���x[4�t�,�����m����_���`�w�qD�� "X���0���^�y�{�aE�i��&:��$&N")$�)p�$r*�/
|'�{0�H�.c�%�-sZ�D�����IdI����/3��)+���	�����v&
���|i�,��@�
��R� y`juv�`���y0Z#3���X��Y�K/(g���-L~�����7^{�6ZYg�	��M�'�m�����fb��0�}��h$iO�c^8
vv��Un��9��Z/�@}@�i��r]m��S�{'h��D�lO����o��Y�9�oa��8�j���)A|r�aR�r���J1��{�o ��=���	����.irwT[�c4���������?�	��F�%���-Kq����el7.�=%�m;r����������eG��M���7�e�,��q�����H���\��9�Mmu���������e�7�}��Y���e���z���~*�����,��v:gq�i��]��6�{4�bS_RlK��u'_w�*g������	������i��	�V�f����c�M�e���e��YX=���j5Pura����Pf�L���Q${z���	HfN��#�����`w�������Z�iX�8�gex�.��<
a�5��mf�HH!�1���+
��-�{B��j+��#	tKJ�_7�O���������f2���8������j�[�3�d8��O��������re�E.��>^����)��E6�3F�Y�������n�/2�"�mL��\��n�l���M����,��/����������(?<�.��
��-w�����)�-��k@��Ys����j���f�L�En/\:��<�����{��L����r���3�x:���9��E���h�@������S{���vh_mY�� ���S;E�|v��`hP�[caZ\?'���US�j����Z�q��us��/X5q�����<ce=l
��}�'�m����'P�E�~���N��zn�d�:l�Gx0x�:��a`����6��O��}W�*f���^�������YO���b)�m��f��3�����5���Dx�8�����&�=��[����Oh{�O�\�lyk����s��h����P�w�|�p�V'�
4k���%��h\�%-�|���([q��-����Vz;�����9��1o����l���-�����4�o��c��,)����:���Ml.�|[��\
��M���3��h`.��3��Ya��c��N=��e�t������M�B����a���r�
�����3����i���<��T�r��E������������U�@�YJ��lg
}�z�������zg��w���7w�3)��e=��	L�p�f'��m8������
��h���)W��0�����r.������CY&�~^�
Nj6v�a���4��A��8|>�C��%V�|��?���c�
�D
7jn�Y�����'��s�@��n�����#���o����MA*8����!��U�4�����\����/8|]�*8�DG�B��A����!YW�I�~|��@���Sq%\m���f�2�FfUS-Y9�XM
��/Z:�rb������o��=����O��X�n:� h_��y����u��lp7�����c _ZA+�W4d%��}�����1#������^f�����jz	�i4Uu]����k�/��R��mJP;�7��i�"����#�@��h�����<+nl��V��`F��C�	�l�)h��q�}^�-������IU|�q���x7�Q�$A��N��z�A�Qi�	�It�4���(�����%P����J0���'��=|d�@�j�K�QS4����@��/�
���Z���g���|
N����!>��Na��h��:,CG���	�V�L�����0�PG�t[�;�z��Nh������^]��h��b���.��W��5L:x�D4�V�M"���J��in����^�z�����O�*��H����N����}~?��@X�X]#[)�T�<�Z,���9.����[�bAQ5X�!
�<-=�1����S@����.D��x*�<u���������'�� Ge����r1t���������	Z�Q��
>A�����s�YM�~T0���������D-�q���.WD���<����Z�%�T��D@�F�$hqXt�uZx5WC/��_1�[�r��f�`��4A�]���~
\P�y�B�Q���
p&S	�}���b��=���NX	�:iYpE���/��m^��)�p��S��j�|���[����o���e�W�������$j����E�����8��Y���Q�y���N�.a�B_��Nm����u�f7�<��%��4D��f\�PA,k
�S��> ��R����i����r~NfFp�Y.F3���-2,�DU�;���-���?X�$Z�09�:����ir����d�����`��\�`:&�X���G6m����E�v�������#"3���EEH�u(V5���8�{��2��6��nk�1i\W��%���"b��4���.������P���/Zm�\�P�[��:5��i#FK�:������$eW�p^'�P=zhK��	�#�l���[���o]yG���	�e�;@��\
����sba95�Q� ��z������S�Y"}B`�[�;�������K���<P�W���;|��f��1��4k���L��g���rb	y������dU	?���3�>--Jpp2���J58�RWxv@$�O{�����p���Y��cZ(���*�q�V�iJ���[4�>.�����y�_X�����8�)������EiW���`�!Mx���S��%(O�J��������S]"��L56�id�h*wh�m6�1���O8m�\��G���`+o�<�`�>>��9v
��0��G\i��?}����E�'j��[%oL�J90Y['��6���<`.G����!MG~t���E�B���:N�(����A���.m%�y��dCOs�*���&Fmg��}o�9��dP#,����^s@
�f��o[�{s+�d}��Qq���4��uC�!���}����rC��:�N�Q@&;���`8�RU������%��y�M>�4k�H3	x��NK6^�����V`�@�����]'�����:����'?bB���t��Z�������Xw��{�~j�>�FS���8�c}[�<� Z���i?�tq�h�!��E��W�v�%���#Y���t����iQ��+.6��ua
<kI����o'�|u}��0�JG���7{��)7��4��Nfb��0�ij�J#���$M���l���
}a%���~5������X+��3=Z	}�g.N���O���U,�q���{�Y5z-������;��9sb���%���G������Z�
���������F ������(�n/<��/.�O���0����a��S#X�LS�����w3m��t�&K����`w�IN�B9���:������Kp�"�����������m��m ��S�F���Lh ��}Z�k2�������HkW�4H�P����0a�Y9�.C�%��n�8s�
�g'`["�#��4k�\������p�u����x�������8i�Ycgw����YP,�o���U_L�~L�[?h7���z��/��'m�@�L�^���?��?E:u�lX���a���Xg�����q6��� >�$m���:>�G4�C����b�4�eR>I3�X�@�Dd�/b���N���m�6������M@1o���)7���Y�S?��0�������~�fEU�A��J�^��-��v�|��SWzt����[;��x	�d�o�%�R���.!�����%��I�B���B~/!�>��-���N�?���������i<WZ����_������W����9��������}��@�)�W~
���S ��O��+?���Og�����e���e������(?�S��*O���S�����>��O���S��U�����}�U}�������S�S�=�<G{
������h?�S��j�z���{���{��O�>�S���t����O���?�<�V?���������o�_�)0~����5~�k~��.Z�Z��k�W/~�����|��0�)�p��m\���\���~�-�����h��5�xq�>���3��m���~'�i�nf|�j���������U�����b��������o������������.��3�O���O��!O���O�������������?����?����?����� ?������~�������_~3�D��|�>�~�>,y����)�T������#�'���;!��������+&��~���%� ��(�
P�U������?�6M�Z�
v	�CW�m�1��Qdf��`2n��x���C����a1�6�j����_��p@P 4&@�<�A� |�D���(�����w� �{S��W!\9�(P(�	�eJ���=���ZRE��P]Sc�4����	�=�q0C�Ac�#��c���5Kn�`�`�`�`�`������>���q�����5c
�J#��CL�m���f&��f.�����.L����qL��7�C1G���������n���;�,�Q����r{�}�4�f�I��E�b�x��q�=����Z��gp�Vt>^a���o�� �r�+��63{�$�>�^������6.���/�j��G�����������VM6�Qg' m>���0���`�=B|oZ;��hZ���h����5���h����'T��k�@�6�i�k�u����O�v���I�&#=�Qy[��|1��S�(�����]�|�k7*�nopf�5���Q�-|~�Kb&{o�����=�|��a������H�#{�k��(�h�*���%�����������|�8s���+��*�d3�C�N
5��7�:@��P��u����-#��M�T�Sg�hm�<w���#IZmT0���~;��-��Za�D+6�|�8w���������n(��@�i�D�i+�2���I^�2�@�L�>����w���Z��\MT���r�>��f/� ���
=��O���_��� �7�3c����w����=�����<�V�������B�F�B��jn�.xkrd���>R�&��/Z#Mb��]����������K�x�(���'f��]�ub���0p[�f�l�&%��Nh`�4+GO��!���Q�f��
��6y�Vw���.��M]4|-��h=�i)�j����1w�j��]�8`D�e�B5�����|�%t�����p~��T�N��1���uIz�}�r�R�l�lC7��M*d���������Ws�{:��@kR�V������
�Y����g���h����a����R9�X����r��v�������!Q&��Bh�lA.���)W����:}w��]ieoqH�����S'�y�{�ql�����Sxt��~�����-l�ny�e�E�`�R|������������z�����tep��p��������;(���uh`3���W�2dn�o=���+���w�����h	�hT{�(��u%e����riE����5�5QQ��j&)C�����P��t~�Y��5k�������b�
�:�r��2�����mWWA�����{��]{��(C����N)C5�h�(Ye�9�S0��5Q���J4�|8���X�1,k�O��bOs����4��wb�w{�S������
i�#<.j9���|�jr�{���I�,q�<�;y���z�< �<�;�C����P�9�'����?m5G�~�|h|a��<������=��'�����zwh�����,\}��~a��7����[�Nu����+�����*��y��6�-[UmH��Gp�O�Js�{!�2�D���b�{��t��
:���������^8�B�O)�f�m�%��>�����M���������y@O��E9ga��d}������A������/���~����8~�C��B��I5���~+�5�����_�'B0�i�����
���C�

��j8$�-�P.��N����+GZ�i0����1�Y��c�hu�:C�i�N�F��@��[9���>I
gX2�ii�ON�}��a��l�������h�E���a����;�,�;OVm	@����^Oa��]�;���N�UR�1H���HT���e���~����=�v��a��
2����_���H:�D���F��=M�m3�G$��R
4����;x
�w�-��=]"_��	���n���.d�:,�����4@f���f�*�����W2 ���k�f��
u��	�xY�w���q�=��-��K�x�um��|s�V�EZ<6�b>�@jjG���w)�E������&P��=G*kf��s|��:n������n��[�
u!R�E�7���z�>�p��LgD���l��;��h��x�$�1��#F�z��e�9��8����b����S��V�2F�,I
��4G����S\z�{:u{JqcS
�����f_����^���!��b����3M��<N��x_���o]1y�����&��o~��XZ���V������%�k���
��O\#���8|�M���pVK���`|�Y��EM��Q[b<��G\U����m��Db^��n*1�^Hh�+�jb��n�;i��,��E%O��[�v�)F�=�uxLl������f{�������@g����O��=���;�����>�-�KVs��������������)t}�������������;�E*����b�S��8Tn5Ty�E*x��^���`���NV�}�6�1�2�+W�Vh��L��		p��!���<�h��'�c6���.���J�����e�9��$���!*a��A����[>�jV��
^&C���*�����Q9�������N������������8�x�3��/
���7����A���zh�O��l�A������BL����>b�S��4�8*N��qI%�	;R����J������;tm���'�Q�qm��xM��wu�y��L������qkn��:,�$�K�h-�����y#++�����DG5�T��F��j���
ME�l13^������6�I|����GC��1P��I��B>��1�(�{��3��r�������t��1�g�H�bXcB���2De��J�������Z������D���;��3��w��N|i._��	��[�0�-`��r�����s�5�L;r�"f_kK��+kK�$�u�H�,��V��y����>� ��?3,����/��L[�1j��/�w����� �H�wG�jO�<A��~������@�X&n\\T�rl��B(�W��C/�J�u���[V����^����6qB]��\�56����4e���j����pb��`c��P��>�����������!�Xr���c�m��S��,��Z&��4�������>��BA�/"p���B6���I�7�lL<5�hG�A�p=��������>x+�E�;�E�2&fT���3M���	��V��{�x�k^
^7
�,������u��9#��u���K����,.���xh��JzH��}GE��<���������?���,[�!����/F��P�M�E��R-�#�L
����bY������]����\uNeqv�!���CX����
��8V��@�%R������f�����4*��1�e?~��*���UN}�~f�,D���2r`W`/.5uQ��
(���,�8x�U��n=�jG���4���"u����b��6��"����/�*�3��kfS���*���E������P�_��g�kDI-,+I"��}�k���(.�l��NI�"�5�sD-t��g�XBa����	I��]�:�"�Z���X���+�4MK4l��`��
���_�S���� ���K����������$mC���`a{��B��+��j��g����p~���Z�k��vS[�u�_�}Z�Dr��LdWl���vQ+2R1`w��c�������s��3>hR_*�����	6^��S�L/�I�j��Sh@��u�������V���R��b!�����/M��Y�������Ns�����p�������FlU�[3�5.�ym���q�OU��8���x��V��u��~��xVp��������	Y��&�FaPOn
Ps�l,�\0�kGY�DO��NM;�~OH�k��P
������i�L�t���8|�U��4�=c�=���e�}�x�����6����3�AL��}��,��ICn��`{eos���|P
V�O�c���4�f���c�E�8���S[��-��>����lH��J�����vQe���6q�c�����P���od��n�"�>e��5�i9<2�L
���BL�b�a`���M�+�Ed~j�)~�k��RQs�<���!2?5��P����=Ud��M�V��E*��v����7Bz�^�;���D�QZl�S�X�����35�"�>�REe�E�+��n���L���<^��w��U[�P<b��+��^b�1X3�%\�yQ�����.��_Z(�����^g��v�%��-EC5g�h��4���H�"�����F*���+R���V����Z������w�����R����}�������h���=�4�]x� �w�� �W��b�F�E_v�at�����!�:��R��H�b�&/���hR��v����[�`X��$���D����M�%RYs�w;���f���j��M�hu*B��V
!��]T�9�f_Noa�{�Q���=��V���K�>���E�Q:3�iI!��`|`|�||�+��e��U�&��7�&)4�E��rL��@F��Kg��
�c��U�3�"��%<W�"8��/�U5��u����%�W�.]��9��5\�i���t��F�O�������%R9�i
�Q���R���a�5���tR�L���"3��l�i�gZj����������[�o�����8��0��8I^���0fZ��3��IU�#��^�a({��V�8�C+1^�MwW@5*
=�U�q��&����i�f���]����
��QV0�zq��D������������C�����q�5�|t���4��_gZ�I���H���������^����x���� �����1;��L
���w�x�H���T�������$��=����2���n_��j_���{Q
��<��.�Lj�������A����������������6o���3�Y��b~�e�������V��M?�q����Z`���U���;���� ��w�j�r�����{{�������M<�xp�g��K
�������V�w�����}�������au�O���f�o�qn�:3�Y
�z��a�4s����b����{�����IM���j�|j�*f�o��8s��=	���y�8s>�����[vO2[�9?��9�U�V���17��"b�EEMI"%<"5������T�k�|�L�5s~�����4���#�=���u�5GD���G��j�9�g���h�Z�9k��I��
��5s~{x���$9"7��V���9����]M�wU����9�&���I��M}g�o��(�1��-jCn���vd�|����|/�XI���~OC����_Ia�k��W����H�r� �[�o�zP�B}Y��X��|���f���3��`��,S�������g%-T�J���Zg���-�vS��Q+i����	z$����&�8�_s����OF��M}E����;u����)\�V��=;����P���b������m���7�9�����[�^�;�D^�uS{=�Py$z%)rCs6q���<zY��;�+��Jn\S����Q����������	j��(������w�8�c���B��k7���U���R�F�h|�6�yC���3$un����-�W�
�h��P�4rYB��������}uz�����>��&_�?���R�V?��"NZ��r���|�'@DW���@:J-R�����Dm��l��;�4e������
�q#n�/?s1���I����$gi^����=��9]4�h�v�'��|$���,~�T�*[�c����V��xc����4#���)��'q5s}i�����e�
o�f��\.�|N7.��'�|����Q��cF��z���3F�Y����K��;��)"{ #l�������3x�~M����n��1rx��9�m(�I�=�$�9���Wv���H�k��831���C��7Y��7�����1!4�~����tx��5_t,`������~��������U�
s+�,�O���:f�_�_�fz���H����C�^������-�����{�q��0���B�D��p����&v��9�Q����_��-u��3Q]�����vW�����:J�z�2���M�������R�|����%�cj���o��������/a��(�H�j���cos�7��S�B���d]�`r�����@lu:T<i?��u0�u�=<_��nW�g\����DL�<�vW��nSOkGB�V�T����Q]�5���������SG�eu�(��L���q��J�f���x�P�}����h=l)	�u�9<���|�P{����r�����x�����u��ey8$��{+n�O�Z������O��&�!�j�o�b����Z:�m���3 ����:��T�P����S��Y����k���t8���,[����������+�3j��c�
R���e���jYB��w����[���U�@�u[rF�xb7�n����&u��%�.uv5�F���V	�,[��h�:���#�$u�J)$�H�E}#i<(cH��:�5�G�IZ���nu����Z�2[��B�����F-���
d�z�������xP�����JQriQG
�	����Z,��l*L���{�mX��H5�)��X�V9��T��m6��w
m$w����x��TW�������j��&��#I�h����@�9XC��e��mG�7���H-4���@��2E�F�&s��7�-K�y�ed����A�����_P��|z���	2���~������o��'�2;����cE!�e�I��Qb��������G�Vv�0,Y����e���.j�RV���?D0O��?#`E��p�t4�W���;�I\�z�jP5Ii����T�&j�YT2��y���w���qb'aMp��*��Ks�C�]���5���
�_��^��]��r���-#��UM(f�)fEV��w�kW3�tv�*|�cCk^�N����Me���P
�s��$eH&�g�T��#�$�`;=V�K/�gl�,S����cZ�*���]LP��8������]EL�bW�Z��;�.vt(.v��W��f�/w]H�����Cm�NP;~m6�)��P�8cMAA�����t������������
�i����l"�{gd�G���g�j�� ��M6��
��CQqT�(�cJLS$�p�r��]fLb�������C�;~|����E�'R9'�C���J=R�W:n<�W!0���#��W�+Gn�	T�^�J���>�u��\��.�Z-�tQ������o^���v���WNu�#�q.D�v�z�:������7p�����"�W�5��f��������~��vmt���8\]��R���3�����nL������"LIo��:�:��/���t�r�Wr��&o�p��N?�:B�10�u��G�e���n���@�k/5�?�\W����1��t�uU��-RK;���4�����h<F0-��j���#��_5���%�+�H��C�Q-G
�����)�;.����q�7�s����{��U#��;��y��7����Ysl��`�a
Y9��9f�����<�Bv�m�,�Tx+j�Rv\5s�>I�����g��������*��/����TX��&��
u���O8O({
�MU����������d�eG��Tf��W�5}���De$I�p��"4|���k�h8Yv����.*kr^m�P�7���;�:���LU���"���_����/5����%iD*c��2b���S��v��;47�Di��f���V�,Wr�������(9��(I�nB���'��i�IP� �tTD3�T������'�A�j��t*c����(�����E�w�_9(�Rs����G������)]T���:#�Z���Vo&��x�����G��w
�.�A��0/���Y�OF��\=�_[F�P�=�K���z������5�����I�HGF���[~����R��|-���V;f�����#�1����!����O!��[�#:����oO���r@
����g�9��_��s���qe�2��'��N����k���e�����P��k��g�3��Q�H�*D^g������>�qs����9d$�F��^H�wP��F��K����H��-c���G��@�x��@���Z�D�q9u�s��:5{�����	�-���Bp,�����Q+��������%F��[��0�������Sl����e���v�F�������;�����Z�e��t�Q�B���},|t������������C,+��$�8�w���c���fZ`~7���H5��(_�E����*A�KQrH����.j��iz���� lQ������@�BC�8�J�5��DI��c�r��/vk��`p3u��NG�Q�T_D-X����O���>>o}��h�+]�|]�v������d�S{QY�2�B�nHw*����J����[��*�S�H���Y��)�-�n��!��ngO��1��[BX��{���ZV�K?|��	���d�rkv�k���/����a	=�4��F]t����C�_"fbIA������>�f�u��&l�X�lF�l����[�z������E�5���<�,My��G�/�KnD^};=���8�d�������|�"���kkY�M�V�;��x���kuy�V�q�<�XL@����xq��=��_n��x���n�����.o���}^����o�G�}f�M*���P=�nh�>7�,����ba��x�	Hb;�or�����AD���E�����P���K�Z�F���G��V��g:��)���5�+$`fY������(@���C���l�����e�������/v��L�s�6������{��#�����[r2|PZ���4*���B�����P�BmO���f����P������aB�5/�{����@�S�� 859�[�P^e����E�tG�vp����������������TaM���ZU���q_SFx�����v����.<�eY�X��/�yC�n�_{�C�
��;��k�_�/���F-�]R�pv|i�������6�����0Gg�3w��\��O��3#��OD���=
5|i��@�;�����6�5���fRG�:���:��+d|I�l��h5RE���5����8�������Y�f=rr� Ak7��=7{��g7�6���!�}i3��k������~����3�*����)#�	����9����9[)�n�^O
ws���SZ��.���O�������+I�����;�������s���~��ONy�>����#���] ���y�?�.��]`��� t(R��K/��e��������g���rn����Rw�*u��v��R��������_���?��V���]@�����. Sv�!����]@~��@Km����������]����mh?�.�~�]`3d��>�rv����g�n>�������O~�g�\���8u~����s���_�ta3�\z�<��=��������_��]�Ze�s����gZ}�k�]`�X������_��#���7������w7{��u��E���f�]#^N�����)�H��W��:]�:�l9�����f�.�[���w����������������������������]����.����w��������]`��.�Ud�r�m�Y���[����+���U-\��E�����������v�v�������_Z1>���XS�,4���������������40�c�d0\��qD�b�� �x�"U�B����a
A���@iT��LT,(�GM�Z����s�*
���C��>�A�q�P`40 K�G����0����\a�j�0i�7Lf@���N���N�G��qK�����������������nn�s�����Ug
�J'��GL�����n.��nC���GXS�k��o��HM��_\�W,�w�s����'�>�x�� q�9_}����`~����;��&��H�(����V�6��������c
����H��UK��t�Y\��H������
����R;9���}�+)f��"uF*[�eK�5J/u�w��f������B��/�������`���3�Ir�%_�Q{3�(uu��I��z���V�Q�� Qq��?�
N���r�Q����uy��Y�?���O;��mFj��������������DT��v���M�a��ZP����������CMH5�w��d�)���!��h>�aMGB�K����u����|����d������v��L�T�����Ay�b�7����&3M�I��ju��]�9#U�T��Y�T��v1Z����DrC
JQ6���H-4�f�iuT�K�]����O�	�e�rH�v��C���5i�H]�-K�f�*^�0�E�2[��I�_����)�Wf<i|�w� y����&5C�DI�> �������]}xW�w5R����_W���
whWY��0���*���J+tK������+�tM+y�'���������W��@�pD>�l��1�p3��K���`[t�H�SQF��Y�c��q�^�nX��#F!�R;^su�c�;��[V�mw��WD�E�f�C]�}K>�}{�I��c�Xf�~�{�R�8�����S�N�b��VC52�z�c��5u��Z���7�V9����>~A|<WhsF�:���5E�����������J���I��X�Y��Qj�^�@�4��v�cw���x�`��9R����G�5SO�����'8�fk�C��-$�f����r������;������R_��-��1-l_+&�*�66j�Q�5,����Je��+�o_/wrLU-3�
�� ����1$Rg��t��h��0%'��K:h�8o�EP���YY7���i"���[���TqO	*=���h@�+5��I����'���X]"��V8T�V���}�V���EZ�������5�9y�c��n@���������������=�
ha����&��u
h��%��k@�z��Je����_�g��D\[0�-���'R�Sq�W�#�H���8u0����g0�n�|i��o�4[���n�aT({�X��Q����-+l�-�{E����g0 �W6�U��?��q9��0d��O�����6�K�c����t0d�0��a3��.f�	e��u�@	�60���j@\�pk��
?$G�>M�n@�)���������;�I����k�Cz�,vx�q���k�B��=Gj�o�Au�$H�Y]!N��g@�D��j���;=���2l}�9���.2#�5}��n`D]��rjW����]3�	{�������������1����VC�y_���,�_���Zf,[�[s�������l��=��c�>�2"�����sZM`%~�H�Ke�2WT��;���6��\�[�Tu��2��u'U*�����'G�TU��f]=��{�`��e�-C�w�	
s(������|����Xd����K��b���,7��)���Sf|�e��k��peKE�� Q�
���r&��A.�D���/��"�������]t�qF%�9@�O�����n��6�T�N�V�sdNM��|�L���.��	�O�������H<���9�*[5H���\<Q8�$;�d�8\�@�l���%�,�������Kk
��u�~��|���/�<�i-�,~r*��L��%??)�����Iv�S��4�x�3�����d��T�Y����j
�����C�[�x_G��W�n9uB�p����0�V���z��.���s]v*J��
g_�bZ]v�hi���ZI��-U-A�����++*?����5T�T�-����
��EA�����L����b�}5i�����?�a���gOv�Z-�@4t+��-���b5�qi������e
X���@Z��$c��kE�y@7���R����?Q�� �i]X�>BB��Fx�{hi~�q�qVr�~����A|������9~�����k_�m��5�L��9����g�{w���G�vx�^�hj��M���R5���K���4���?��_?0�����S.���y�J��q8T��Xg�f��?;��|i�����P�N��Q6'mG��MJ���N���C~~2}�1�\�z����DV(
bIv�C�r&�1��Xv[��pg>������Wf!�1�@�
�x����1��:���8��'�����P��A����L������;��O������N��X!N�r
����x8�&=��/�n7c4��#�|�%�`��M/���~�b���E�.�/��6]����i�=,��?����������X�r���TR�Kg/� E��9?����5�;���S�N��mPt*����F=;����P��J��=��������fQ��~]�:���������u8�
�S�v���e�&�C?�����E�W8dz���5@�����y�n-;������F��h�8M��j�G��
 5����t��@;J����L6(r~��������2���y����65����%�[7H|���:��Z2����M���9�v4�'0��-v�5"��l}[]����o_�<,=Wv3/@�[*�0�ne����;b�������I	��������7��9v���9��6�;���h���5�I�{+�J��G�J��<
[�G�W�-��m�<��s�f&!���i������f3�
�Jp�K�2�8��W�H�}��b�'�s��-@���%YG�w����<���$����zz<F^��pN:y���G��L_1/W�(��]�k�U85T�]!�EP
q��A� J�;��*>���m�z�����wZ3=~[M*=l�3�9#5#��f��X���_0u��?i���9��#R���k�:�P<=~��2��pE�.���Fu�#~�c���?�������{���'��Z�����*��BQ�Yj8�i�D��|�A�����a�:�����h��KC�p�V0��t���d�t����e>�i;mV�\�{�^���z=��������:VN!q�cZ[�v���s��I�|��9��/-��i�-�V���Q����D�xh��8�l�.Wu^����}F[o������h�C+�������������S�V��I����E�"�o=�Z�Y�HewK]d���������a�(y�B���������!�N���k�����F?)�����5'���7c4XR2�����|��Lj�����Dx�t���`Q�:0�5�t�a4�������;�n�H��p�`�:��K���Rn��^������F�4�O�`@��������A��UG���h����x���"����?;�"�M.�����gK�R@��M������m�\�o���n[����hK�4`n��2<����0`;�87�`�s��pv��X�p!�|��-�\����jaG�1m�,�zdB7���5��5����i�]]n�Z��
}���#�bF��h�1�#�_P��
�d�Lq����IK�y��uL
0�o:!�����6��j&c���,�=��*��W?!��������@J�����|��C����?;�l�1m�u���������3������u}D��G�m0��p5����N	��N���gx������Zu@��OoO��$+9z��0�}i��Z�h���\��^�����L���m�����i�Sq7���0!nC�����V{(���,3|��p�?���6�C��u�R���Cz-OO����I�����E��@$g���1�m���Jhi�!i!��}�6V�������
q/l���B\����`����f~h+%t���h�Z+��w�<rM�;���K7�u���P�{���r���!n���b�7�m8���M��|�l"�0^�D�q]dR\�,�uMC���������!��*/k��a���d��*Ywk�Qi�|8��YB\���{�o�PGR(u��Y*�(�G�0��
�����.��+yk�[�h����,K�-Y:>�����=���=q��K3]�-������lH{h����]���X�@yi�/�h��i:�k~kk�};��C�+�`���^=pP^������u������NA��8n��!��i���I�%{-m�������)���>N�48xx� �
��)��1CC����+�E��?*S��wsJc��a��j�����|��6��|o�����>}NB�9Io��O(��:=��G3J	4����	���{��#�=�Iz����Ils�J��9I�aN�v�7��Fk8���7�	b�sg��/�3�%�I���8'9PC�=�s��q�#�7�^�s�����=�g�c+4R�w	;�!|�$�I�=�[����O��9I�\��#�A��@J��y����X���e�n,��m��8'�;��1n�XO_���9�@�b�1,}���ha�a���FEh�������n7��:���<���F���h�;�:�jMs�@Z�4K����
@�K;^��z��	H�{d,���������%�#t������|�9 ����r�WZ�>Y���O�4���6�*�w:0��|<���Q���hT�7*�\�Kl:}�w��l�9?�V���h ��
@6��wbm"��h1��F��="D3�$r�1CLG�L�Y3g��I��ayA~h��r�<u��WL)F��t'�V�Dz����I��g9��<hq9$L"`�����^s9$L"�<�H���j����-N"G��!i�N"/l���&��	�H~�iqy��X\B�0�bch-��0����i��u�%N"��I��X�D	�H��&�.�S`�3�&�C��]����8�$�I��)�(�i���8�B�`�c���a<����EK������L"��h�
�7��(��a}����f�,��I���$��@����rMB�(o?m�������vp:��J��5�\��Ph�#9FW���C"�6��h��������m�����B�{�������
��O��0VL��C;
1W�,����/c��aT���x�3������Kk5�k+��&]x����g����[;}����9�������jvQwa=�i���U�h�Ty9LvY'�Kk%��}hi�CLDm"-[d_�Ol]k�0ypx������#��\�<8��3��%��������
���u.<�-�K�:%�v�����62��.��N)��1�&�,{f����|�Pf���\�;%N+��Z���ia>�U�t�:m� V'��TZ��7K�a�}������{h�s�H���k0��i��46	��<c�qg��6��`��"a �P�U�,{�ST������H���{����^�e�B�.(0[�a�=m�S���N�p���Y���q5�,{�����u���}��j������{�i�&9�����cu9�gc�Nr>;�aG@2v�������M���������Z��1�@K�$�������'tN�[
h&S�_$Y��;fnE������4�H������������Fyb���c���ec�Y���b�?��6f&��L1��v��	o�Ws�����^��I��x�/S��"50k:�������eb$���,���Wu�^�������1���5|��r����jP���f����cBF~
~~����iZ��&k�9�8���!<���k���t�����P��C���nkuux��
�5���5pcU7V�'���-�8��M��w�UOo��\�WV��h)��Gj��9=���g����'��
�����y��Nf^�>p�@�`��u�6����@�}W����*���~�X�����j<5����&���>�l4g���d��u
G2NC�/o�SB���n[���5�o����:��Y��
K�k�[���--5�;W���P_���[�`\��/3cGi�.�<p�4��������O�,�V����&�8��:;�?mQH�g�o9�E��6@S}���A=�7���/=�>�Cf���|~@��sf"��&����%���l�N�O�,��������I���i��r����
��f[�m�r��t�w	4�H��F/��Os��-�3�\���OF������=D59�@���G���v����3u���k���|s�>��r���7�am��P�P��m����z��Z�6%��x3u����r��\���Cl����a��,��@�qi��W��'i-��(q��B�
�D#m�-��P�(Yg1�s�kg�@+�ng��7��#kd�B��/�T�LET����UD�\[`X��C�ni���af�1���B�<sk_�E�������8d{X[{	��Z��l�z��������C�H����@s�[f�b�?j��D����4��p����Yi� ��}
�M��5+��&W�����
��H���
4�8T��/���r^p�g�~��T�M��JWU�um�r\C|q�t
����A��l���EX�:| ��Vt]��{\@*���J��):i����C��.g��b�>x:h��-kvNH��&�X|�?���zW��$�tI�vFA�������0P{��BT��:��B��>�
��
�
0Y[�O&�� l���j�&�8�Z���Q�<�	�;y=��$��}Fkz�r��w�&��q�Ov���SX����@������G�.���V�L4I�Ftm�<b��R�uK�hzv��R��i��5�� �Pe0P�C����WV�� w���/w��� 
�U?
���*1w���.�`���0�b���:�^M|��v��h���kC5��/����FK�
<5H��-�$�&������O��Q��es�C������4��A�����n�_�$��`�j�t�UN����@������O�	��Y�~�=�5=��]>\��=�����T�/�$�=����8����6��a7��U;(+��.W���:�|������:��9}+�<B���9`�sx��);=\�)�����$���&�V�C+1���J~Q�iM0�~�B����-�O����y��L���&K���o6�����`5�Y������Z���><�5��]��kt�3Z��eN�4�x�O�Hkx������-��tp�����sz������r=���E�>8�iH>,��� \�(��f�8�����L53X�p�A�L�[[*V������e�l�F���lN��`f���b43y�"����Z�z���z������U�|����9f�����@���`JT�ac]=�������D}p Z`�hQ,F+o�)tl�*�
�]q�w��|h�b�/����������-u��JbH��"��PE4c/\��X�z��:h\�Z�F~u�iX0�x��#�a�:��
���G��n�U�1x�K1��h���mgJ� /�E����d��S�e�;@{%Y��Y��9�dP���tA������T��j��'����9���f����x�:BP+��4{�P���n0=M�6n��v�#[�@U������ Y�����vd�06K�p3�f���jp�<��]�Z��2�H%�`_��i�<�c� �sF
�Qp�
�y5��j4�?4�q���y*�{V�4�--9�������S��������4K��g#L��1|���ZPO���0[j�Q����)����U��M(�1�j��N�('�V�����$�u
(��#7S���X��	�{Px��X^��e^
<?a����50r�������u�#J+���4�����#@��'��O���Y�t��Q�s�U����4}%�y[����\[nr3����L��/����v3��6�����R��(R�
Aru�"����\W������ ��y�\��/���X�H��	���58�T���YJ���������,���+���e������z�����u �V,��:��������\��o~�=�����~/Z��a�?|oi�����a��T��]�Z�2���%�n��D��\������~��m&���-6�B��Kk�����u2�X��gu��nvE��u�^��C�D�{����D�����S�t��"�u{
'��Sn\7tj���>��	Z%�Wj���� �h�7d��9��KIA{P���[�[���@ZRRB�[���O��8�>�8,'���@�j<�:M�0�>�;��9s O�K�m����<�[3����+��{5>������x��/�CKN�fH��l�y�1�g=x���r�> ����-1?����!��������	S(�N�e�1Sh�a�pMq�X�a�8���G~��}���
B,=e���CN��E���i*1��&�'�6A~i5�������8g�~�A�P��!���D�:j����;�u�<US�3�/B��DZRF,3����,��Y��F��������-��t�����(�����^������,Z��-3$$Z��K��������S���I������qV��x�t�FS���U����Xg�F�"]���&�H�1r^�����}�cd
4�����E}������`t�'i�>�}��MyT�3�	���M����-�6
Ej~�yP�k��<���������w���d!������T	^Sm�
F��4�����������5;�n���{;�����7g�BE�n��@x/!��_.!�A�.!�%�p	!�K�����?���o�-����d�����3���G����L?��_��?�����s���Y>�.�{����@��w��3��W�v��@���_)������2���G�Qv�����W�j��@-u�Rw���.Pg����_������������]`W�����v�d�. ?d����/�h��������|�]�����v�����g������^�V�����������.�}�?�.��s�"����_��c?����9~�����fv����_�r������g�������%�5���\��M�_������7��N����5�.���6����]���
����v���_��u�����������#�\�8w26�w������?������__/}|�����.���{����������]`�������/zln���%���+���������e���s'���6���B��N��D>xa��CB�L+�G����k
��&���tt�]B��Ut�<C�9`���`,��+�?�(\,��A����7r ������E���A��
�*Y�#DM�Z��B]���:���W��]$F�1����`p4���3K�(���f��y��a�p�p�(�4�@�L�X�d�p�|�}��.
�
�n.
�M]�]����9G:J8M8Pu�p�t�p�p�p���p���������������1�p���S|��e���<��ts�e{�S��6�����-nY������rb�� �@��A����FGMO�*�Z� mj9}�R��Z��E�U����5@��g
6����)$me[��m9�����q����@X�^?���:����{�����!��! m>���6M��!�W���d��e�>�����}�g�s��h�%{lU'-��Zc��[�(���Z���j�)m�O�u������n|1��S_Z������=�|��)��n��6��U�4$|~�#�3���9�^,�a�7�
����W�]���`-���9��V���%j����mg�U]����b(K�7������t�pi�������Zh��r��)-|O�--��K3s�u{ZL��0���II�6
�/NO�o�?���'��������==��=3��8�F�e}_�K&`�V�����M�"mZ��������]O*��T��m���K�)�V��4Y�*�h�K�[�kC�Ot��[�����#�����X���������%�i��&�La�l��M������>${:-�&�=4>?�!���%�\��_��+�`I�����z���'��������`b[���t�&%~���i9:Y	4A^�����5������f%����J��	��hx5��8M�W������K�)������"@�4���j�V���������u4
6�X�-U�������2S�zi](@*���-����I�����pa�����tA	~���v��J�� ��NA6)5�h5���}~5a����Q9���J���z��wn���\��B��i=Z�O�5�M���G��]i�37���kw��{��=����a�������a�c������WW����h�>6n]��;�����x��e�H|��`�;�0C�����3��{xi3cXG/�7��=���C������Ei9��X��A�n4�_��v��i2��-�=5�}�a�P&p���`��'&����BqcXv����o���mM#�f{�������'k�1�1���Xh�n����r�a�P�m������A��5cX����e�1,�������q�����u�w���!������9}x'����q�$N�pD6��3�r�kb���)6��i��A~i$�A�y���zy@�>�MG�K3�����=���y�Zf�����F}�'�_Q�7��R#���6�k�>��+;<��B��F��_�0���h�����[79��wM��-��xh�j�J�G��"���������R�5J��b���a��:K�b�	07�7HVM�J�bM�o��oZf����h}>�Tn��������������,��e!�m��ww9��P���V��L�k�:�+�6�?
QA���/)'�)]L�6����(��>�|{�/��!�����W�wzZ+�;�KTb��h5��Z��\�O��'�=�5j
44�����9�@B}��+�hs����QU��M?��VP�u����6�)Pn[��'�e=}����'T�4���y���QE?#.�.^�x�3�dZ��7������54��lF:����~7�^�����TU������:����{aT0:��b���	2�����d�%�Bdz�������Hx*1�"h���7ka�B�]5O`b�������
4{�&c������`Lg��n�{���'�<�z.�O��H�"O���
��������\d��=5(	{(��>�%�9pv�������t\������r�������a���r�;�T|�#�h���.W��`��q+q�vE@�����BY����Q�V�!RK�+������;/���t!��Ru����m��qy��V#����D�@��%>����6kU'�]O&wP��&H�����f�zD��3�**�:++�B�=��d��������x�p��T�]hIE��n��<N��a�����}�������Kj���;k���f�
>Gr�����:�\��5R�����s2�?�l-�����C!������6��x�������V�9_�<��P�<�s�$R���<_\Kl����]�+�S�>?T�$J��O������b�����V�SE������
S�f�i��\<r��X}��?�-nKZsy�;�����,j6��
��9R�x�6�5�w�=�4��\%��UR������
n�+�|8r�	��nQ[e5��|�;������DT���%���El������=C+��PI��C�������� ��s���)R��|EC{\����Z���dh/zm�1�iU���\�\���@��&FL�I�����7���$�x&w$%�Ke$���XZ@����I���Km�Z���=�R!��j����a�2m���zw��P��t
��.'+���o��Gt2�y���Wo�\��dS��<d���vZ�y�F,P�sM�����L�|��D������Q�{|},Cwh�������VsG������"f|�1��|�y�[�\��K�
�Q�����I��%a�� �|�2"'�+3�E����c�2T��v,W��
5%3������R�uM2��2��n��W7�H�l�8H��4(axMN�+��/�i! �9��p�'.���".����AA�i8�[���#�-b���_�+����d:m��P����2>�>|���7��*"fX�\��5;����}�����������t�6��:��q��5rLpD�s}`D����b�w���f�������W����6K���6b��;�,�e|�����f1�����,�������~K��8�@$������H<���u�K�7o�����}���CQ8\�=z�>m����@6 $�����rh3SAZ�w��E���1�z�g���xZ���O.�
3�.�i���}�������IZ�{������T�oYS�����d��aP���9P���9�<-<:������+���Z��c*�'&:�����p!�.�C��Vr��oo���h���-ZH�T�����U�X��7���^��e��P��T��X�����f,K���[���:R�*��:��a��je'�Y�.X�����8���PIH��i>�^��'�8��\i^%!C�>�y�f��67d�@�z,@�>|�g=UC������\�#5��:b8^lG1�_���V-k���g�=��?������j>xx�E��>��#�P�BM(���������e��+�
�/�^�4��W.�����UOq��$l��7.�N^��4N�N�/����[Y"�=�������
/�,���v}�3� �����k���s���|�5�nL��|t1���ty���3LI.�F�������T}��w��.	����,l��}�H�@���[����^4C(���b��R/��S~q��e���.Q���Vd����U�(�o�w�GH:��XNs&�U�X�rqN�x��I�2��:�y��V3p�ZN�_n����V����Dj��,�� ��~�_k�6.e�����hq`���T�CbT~��WO�����?����.�jm����2�����u�[��y����me"�s�B���X�NNV�Ae��2P��nL�y@�sE]�D���Nm#��D�]/�+��D"X}�W9���0a���s�X��W*�����;T���?^�X��q�����Lm�1����_����$��/>��6��gj��/T��c��#������X{!Aks�w��p��VwJ/�=�����.���"y��k�A���#�o���B��/>�y��i�����vk,"����N�5���8�y@����"2�5�����v�[����<���!2�5W+K�:�w���n�y��y@��&���f�!/u�3z���U�����([�T������+SC[d^�
�Fe��*VW@9�TD�/��x��_�He�����������0�RRx�HX3�%<��P���/5������&����e�Q���{���$f|���n��QG��z$J*c�n�D���v��+4�;b;��z���a�f��D�B�;[2M�9?��!�k���
�_�!�^��=�$�.�N��@@�PPkh�T��S:H����%�!��g�[��H�aK��einP��s�T*#���v1,<+I�;����"��j�Vj����w�����H�P��jFQ�w!Fe��!R�C��ci�pzV�V�(�I��a���PO`{�;���c�R����Dj_o�y���\���T��u��*�>�E�qr������kL�������j��DY�}D�Z�s~=_<��.��A�F���	����EI����ck�;�!bs��.>3�������zx������\��LK��wfZ"�6(�L�������Y;N�Q�H�L��8���Em6�(7�TI�PP�4w�(���W�i=�$��L�0fZ����w�%b�
�-��l��>x+�LK����eDsfZ���fZ�,��X�.�b0���1���c3-[�+�
fZ"q�%���/�p�%bk|�8fZ�sq�%gZ�������9�j�l�]�[��:����w-��
�2�������9�]����w��}��si�.���	1�;�k��2�b+i�g�C��;�j�
��_���lf���i�xw�|������;����~���9R�f�w�ea��A5�w&%�w}��r��1���8���8�>R)���[��n��\�6*���x����@����yl�C��;��l�g����;���`�k��}�������z��k���6�����xw������;���w��}o�k%�������[yg����s+6'���H}f�s�{~FT_j��,f�����w1sn�#H}f��J�b�����b���X�0sn����[�3�����n��0��g���3gk�S���qs�V������R��Q�����^*f�/�����V�LZ[g������}����[m�5�0�VT�P�C�3���q�|k�h3�Jg�2C�u���Hze�!�g����'���X`��H��g�|1f����S���y���G�9�j6��Y���Rv�h���3���C�9�V�H}f��s���|3�������s�M����ia�:�i[�8��|A�T�l�u����^��P�e��Q������%���&��j���,�U��Y�nR��P���KQ���m�l�w�Ko�ClU5��_������9���o��RUe���f��w*��q��O�W{����e������:$����y��w��2�������m���b����V�W*�D�eN���j�bN\�2�v��,����3�/T��|���U�R���m��|~>�e�E>����X����-[\<���L��l�l��1n�V��'�O��P�m�Q�uPwc+l��wz|�-�}�9��x��9��L	��p�Yo8��sQ��S\�>O��Q�'[�!�N�R���8���ie9M9#_�	��.xsA^���a�7��-8���z��_��=�k"�z�����Tn�m��g.:xu9��\��,��Yo��#��_s�Y��a�6_	}�V��jA���\�h������
'��>�J#R�w����$n�f�/M���m��7���RKp�=�RT_]����&UN�MGv�����+A�+��l@���1"��6"?E��t��)�������&>�#q��w���,�w�)��I��I���������cF����a�a�-�D���o>,K/$��Y������	���i�|����GH7LrH��@3�������
�P����*�wF�d�^3,�D��	����9�C�d��ER`����(��b������j���x���%��X����'bd��j^��:v���2i�=T�-u�g0�X�������o�{;�7l��t����N|�7�~����'����_R����!*��'x�Z��(�H��]��s�5��?q��O;��-�����qV=�\���>�H/��(W�`��,x_9���+WG��
��	��#mF�b��k;�!P��TJ
K~G��F+��+N���1[����,��eD^;v^�|�Y�����_���o�hx�U�����4�����tC����2��7�������_����Cb����V�������
n�~�#?%�����Am��s	
O���u�-W�4M�I��|������f�Y���b�5gk����o����*������"����u����s�x�[���*\6��P���k�����k����]�%��2	�H`u�jXRc�b����fq
�s����89�!��^*%�CV�9i�Hm�H]u})K<@ExFd�}fl���P'�y��K=z����Q��6ZT��pl����������W�~xp�k��xP�X��������`��0u��)��nY�W��w�u��-l��]g[���_P9$�����AS����%*�����.���rZ�*T�Dju�:�U�Jw�5$��XV��X�g��Aa��Gt��qE���4e��7�m�u3�t�ey�%�5����zG����Q�
��XW��y���������gN������c�B.>-;h�v�k�W��������U<���-�����H2�W��7fQ��PK�^Y|��W��������"A`l�r:p��ZHgW
W���T���dy!�l����:{�C��Jj��D�#gb'�6��X��=��/�f���t��(�_�� �����7�����	�j�m�@5sL5��E���Y��jKg�U/�I�l�)��O����v�v+*a��d���I6I���#E*���$�b==�� ��+����4le�w��M�Y����v�.��C���j���[WP;F�T�)���7;R��j��j)6X7���h���������E��R-�;�f�R�w@m5R;��G?��@�����B���P��j3��e���+��Qg�!D���:}&�����j�L�]1Svj}����?��eo�����=T7����w�����(�����C��G�p(f��}�tL=_���Q�q�/�s��.���C�#��x,
j��%�K�5�(]l�����[mC�Cu^;�A�!�����`��vbuI�T����R#����6������>�{,5����:���,/�s���	��L�C;J�j��Lp���������L�q��{��x��Fg����I�3uLg*��Q���uyb����k���5�*��]^�H����5��X]^��.���8^[[T
�T�����.�FA��8���\W�r]��kt\K��:�����L��
O��.T[�Y����(�Hu3��h���'����D^;�VWm���D^�(���c�Mw��Nj�D�<�C��d��}������PX�m�,q�u"�������0L}9����Y��Pl<G�;U8����C�n&�T��j���.t���.��ap�3+�A�2�|��i��'���R+���b�f���la���]*�^3���t��*us�,[�[s��y5����lq12W_|�����1���Q�aE���j~k������5�E*����+����R�BwSL�{�������`+Q�+���a�
=c����\'�&q�9y9l����������D���z���Y���J�S��.�'�����q#L�����k;Y���H���/��>mf��m������Tm��R� P�<F�ly��#�HU���b)��R������dd��+��k}�'��/����P
S��v�,���d����
���p\����?�K-y��T�N����lyY�uf��'Q"G��y� ��ALuI�.��M��S��9 
y�1b�r#~I�#���\��reJ:����L[��k��n�M*OK�����>b*T�H���/UH���[������Y���r�B��1���5�zZ"=Cy��o�6�m3�P������	O; 4��T/{�%�
:.�.��K�����_����L��������w�Z�-)���.)�boa��_c����u�����<�m|�����k2��X���C-�e��l�Q�B������f�D]�=�b�������n��DT�K--�uo��q��z~7���K%��(_n�"�\g}�KQ	V^�%�4$_��P�KM��g����F������b�_�e�7j"�{���.��g
�O��E�P��_�Q��UD�R���Z����-S������b������^\1X����,Ul�{Wdw*.���T��{����]���UN�6���������c����`K���aW�D����C�_r�������Te�+�~2�����C��VJ1D��HM��g=U��k��/���sb�Q7e��C�����W�N���t�I2OkYmncW�]��I������Gc��G�����[n����RQ��nXR��rcU_<��lV���r����#��n�U+��]�>��������>��<�W�>T��q���������h#l�3J���Xw�Tr�����g@�oD�>{]DuD�4�l����_j=r�������-Do3����y
}�k��J�0/H���B�Q`F9#cx8�a��_��NL���e�&���5<t!w�Op��9B�Q�q�-t���^�=��Wl'���-����+����6*�2�� �����/����_jF����n�`�n*��w�����a.w��Q���x��S�Q
�UU�*��a%x=!�;J����Nx�:�T�9���gU)R��0I^�����q\�
���4���7y��-+k���:o�����[����S��Y!���k���|�����������P�Ssy�/�3��P���z�nt����}&���TJt>�kC��|i�l�&����hsjQ��->��Qk5��N�7Fm�h��uC����J,K'�/X�q9��+p�8{��������J����G�P-����V
���K�G�n��wUR�{�(\�s7��$�ws��=|��|����_��l}��9�U"����nNi�����?i��K*��$�{���Ls���~��?����W���?9���\��}�����w�<�.��] ���@��w�]�.���]�H��/����Y��?�����e(��.PS�j��@���^w�:�.P��������_���?��V���]@�����. Sv�!����]@~�/�k�K3���=�����������~�U���s�f�{��u�E�>������}���.0��F�.��>v�1��<?����5N6�w���]`�z�U�s���]`��?�.�s�J>��T_���kX?�.�~�]`�Z����.�y�l����F����O~�������c�+���U�������M�5��������_?�:��~�u���M���N�a�[N�nU�s�;_��^��w���7�x�K�a�[X�[�[X�!������~��l���m���m��s.c��������������v�v�����*@eZ1>���XS�,4����N������6y��B���i``�2F&�����#
DqAt#D����)������E���A��XP2(���n�A]��Pc�4���W�8��C����`L0,52�o7����&
s����v�����?�sPG�Ag�'�������%wQpWp]pcpipo�����7�?�9�Q�i���3�c�������#�W��Vw
�M7��W��!@�����#�M������������e��{io�L�~���x�����Pu��T����`�Gb3�	����G�'v%�J=�z�=045(<���^�x��>(�57EXF�:�>�,�N��.{p��pE��w0��8���jL@�hpq''�]�����\=�^����&$_�����k6�^���&v���n��.��|��G�5GnxW��s0g��3SY��3��5�qG���eM����#U������3S���z�Oj�#���]@�����8��K{��`�b����4.������8��t;6�������d�:���O�_;�&��"u�wC�v����{K�������'q���P��mP�P��
�:s�R��1t�����/u�X�Y��{���V���4\os��5�}w��T�PLf�b�Z��j���p�����T�n�*�����g�j���}"k�x:�����%C���TC�lG��*��b��b:���!�_&urH�v�~������H�e����<���]\fT��u����w���	�	M��2;���e*2y��F��h�����
=�J{�{cW�}^-�6`8.�|'����j�c�He������wmF+t|NL<�~���0X���*�
���9:\��+�tM
+y������ �lx5���\����)���B��8BD#�Lz�@�`�>R`k{�-�����U$��#��F�fX{��qF�T�/��u7��<�mY�:��/��^����uu1i�������5�c�x���b�&�\q�u�O=Rs5��2�V]�1,�M>��T���<����������5�"L�&�+�9#U��x�T�{�Q�S������JP��I��g ��%N��+�Zw2�t��L.Ro���yD�����B���/g+Opl�6?�������D��
�9l�7�T�wG��l��nNF���>��lp�7��qcb�:'[�F8
���kl	�{��4��[�����SU����)�6V����WrjY���\����d��z5
hb��
hb���rDUu���n@/��D��W�6��k��d�5 �7���J�.'YvDr��@h��� �����J������#�J4���*��/ge\r$�R��e��&\
hb?�
h�y�u%[��<�
hb�4���-7V���_rj�4�������������"�uL"�-�`������T|�+�I�v��_���y��������7����`H�e����z
����F�#��!��n�Dq{E����g��+��*�����kdn����\o��+l�����&|\�t2x���xP�g��Ou���x��6*��`��usX��	7���t|�KE�qE�C�O��
�y�	������D���{���87���0���G�B|�J+R��e�.V9�;��N`����F�T�{���wzN�0d��>(uE|�;.�1}JE��,����C�h3�7�`@w����={T>_};�0����n��As@���Y]�}�+�eT�3ZC�������\r�n�V�He}�0iP9��|��2"t9G	�8H�H��j�[�wI}�l�����>O��PhU�������F��f{����W0���pr�HUE��`�%q���/uD*�����4���Hm�-K7�n5w���Ce��K���TX���
�dF7Ny���&3�^��u!��=�9���uTk]��8����������U�v,���T:�a}����`��|P�z��������������92�&�W�&���(��yR��o�d�8����v�GWeOn+����`��j�I�c���e�H$��%�T$3���h;Z���@��`�Cp��a��	y4��t�1��3HaD�P���
�KK#�K���$;6���p������3����=��wi;��� ��ZC�d>��8�Yh�Z_O�����5������y�u�`��xvf��NEaGb�����=}���U��+�J���-'����++*����>�{�pU��4��6 ����C@V3h"�_����$��0�O�X��������Q��[�o��hS��w����������	�����x �y�i�ZQq�>R���_r�������I��%��V�}Dyj������l�[t`���i�w�n5�p�nu��U����[yv
3q�������cwf���n���m�����R5��d�N�T8-8`o��{9��x�5T�>/X)�2�����3�����lXR������/��if��:q����gm��T����=3�3�;����*��q�v6?'���$@di]�I�&s$_�)�uow�#8�������4�h���-
�
dc����@^��Z���B%y�����Lv�[�i��1u��M���;t� 
=���
q��kp|���kEi�+���ti
��U{��zh6�J���U
Qki)���Yr�e������4��q>�f������c���O�R�]uR�k*)�%��{��"�5/x)�70".���C��1�2�MeC��
���Q�;��7j�����T�Y��u��Y���_���$�|(�x-�W���uj�������4&\����_�"�+�p����6`��kqe��������z9�i%7N�j���q���j����9��q���[>��#H)����r~�����!�I���fw���H�a��e>����S6_r~��PA���-���Q�&b��gK��M0
���G�����&��o�K�|������%3!r�vi�dO������'��- ����y���HM�xs1/@�R���z�3���!�@=G+�?�RpT���&%C�j�����J��<��u#oQ����5}=����W���s��d]c�4^�|�s�Q����y%x���5�8qj�
{h�K=GE�=q��en�_��[�zt�1�~�jf;��%��@M���	���c��%��C�@M-�Vg���K�G�8��b��*�M%�Ub����'�t���3x�����[	�s��<�U�a���N�o=���!#�9#5#����5*#�
��N���GW<p��D��I����C�:�:������p`�o�2��wC�`���i4���"<
_����[=�[h�a�ii��f�:Z{i�D�Y�k*��V{(�q��,3|��V!~��6T��:����OM>T4�6���x�����=&�����9�qf�g1QO��Xy���p"�m�����3~}��>I�����f�	4�8l�����9����5��C[��3'�.��|��K;��V���~��I�YZvAzhb��>�N�Dg�����X�N����S�;}���������e�{��D&��u����jd��f'hL6���@U�eM�*���v��SNT�]{�j/�-lv5�[�Y���{������m�Q�!�]h�u���BWt/�t�A1T0^@�T���������z�#Y5_�����q����
����@f�p��2�ZS~`��=�<m-=��`��6�)��#�o��p���q������������a��4��X h��M�nJ�\�����I��7�$:�*|	��u�DH��|���K�z��N����gX��	`����Io����V���C@f���.�}(j����r��R�b�.��0|�]�v�_,>�����������R�'!l�_V�]_��������8� �,x�X���l5mF�jA��.7go���[����hv�-�)�@Y4��\6�C}�6dg/�b�}��9�,&Z��T����� �!5knL2Zw��'��5���q�|����=s{v��y�w��������M��5�3c�������6���@�Q;�=I�`A���9�=��%��������������0������>z[K�GiW�e�j�l���|�Bd^���eo��~'��X���Fb���5�yX��A%nx� ?�:B9>��:�
������0,q+�����:�������.>�CF�5��-�����"/���xn���:�����8����s�V���up���%��i����MK\���������jzhX���4��������a%@�G�	7�7�~�����
=��O�%n�7���L�x����_X������DY�������%�iX�6
u-w�[W�	3����&-g���u�LL����m��.q+��`���]��9
R�$����[�/S��y���!�����A���U����\����Q�<�V�R�\�*g��rX^��������2].���_��7���');�r�V��K2�:���K�|q����m����V�p�x`�����
4(f���X8(/��O�}=��U������
ic?���I��f��CI��-	<�����)���q���4{�� �
��)��;�����'W����V��|7�tn4KJVl�6����=�t�k��=E������|����{���=	�P� 5Z���8f4����-7��Q(���C^�p?�I���$��2�y��4�jG��v���y�K3'o.�Z�Ti	���'q65�%���gO���T�=IkaO�7��Fo�w�f�iwOr���/�[�'a��'�+)\�9X=��'a�q_��{���r�$�-U���o��@�{�fO��f6S
���IZ{�$x�C���=	yM[���{�����	�����^r��[1�������L@2`��3��h���+�q@�5����l�nB���dz��?�LO�.m;-S11859(/�L@=s�������LO�I[��a�#Z�G�����#,����vu�����%��z�a��:|�87����3���3��-����>���z�Y�����;Q&0�>�;q�4�t����r�������z�����CM@��&��1�M@������f�gy�o"{�N
��^8�7�m"/���P�H����=l"{�&����������D��t�(v{Y�7���Md/�����%l"`��l"���&�@�D~@�D�-N��H��-n"{����v7��H���M���j����3��&�4{h�x��]#�[�Vy��rZ`�����$�GZ�D:<��^�M��y6���`��0,X������ai���<]��(��1iqI�Md/<�O+���p���g�+�n���
h�I��Z����^�&��"I��z����s��-��2�����"������x��M4,�H�a������D)xL�N��0�~z���p�����6�la��
�`N��flq4�r������vh���W��_K4!����2���;�4�LL�b��	����eS�H�:|��U������vs���b7��z
��u�J�����	~iX@`���=32���b�����-���z���@,+�l�h�O���������^�(O[&�R�@��@��^���:�xh�{��
D�u�.���pz�������1����V��1�q�KsY��(m���I��r2��&�����HTh��	�������������I�FW�[~�?���h
���L4�[�F�Q�-M���w��3�{���v�8!8����I�����:���<c�qw��.{$.V���a��N
A����f�i3���b��.���.{$���r�v�>,5�	�4M���C���f;����h���~��0�B:n@Dj������j�d���z�8����=
=�(�\@63v|4��������������xh���v�$�-y��X�7�89�s����~2�T������"5���o���$v�Q��2)���e����4�H��T�O���W��2����-&����"7+S5[jX�v�}���'��Q���������E���o�xcs��G�����V�������#�3@DdU{��0���En�4PK���W�3T;�����	���'c�/�u��y�0���_�g4A=�������3�K���h���x��p])��vE$0t(����������&V����:�q�����Fh@4�bZ{i-��kx�_lx���f8�:��#���f����V8���he�Yg������w�b [���{<T=,3�T�y�,>2e�^�o�6����>�U��O8,�0=]���0��]�&�K���]��������|w�T'^�>3�O�����V�/�7h�S�@�&�'hfrj��UJ4{,���e���]�e�����k�LYQ-�\�U����N
�F[v���s�xAi3��h��Y@A�-���o�����#�������h����;��6k�,�E?`����
��
�v���O`s9X��n�g��������ME,��������i����7z�x�.<����$g�����MK?�q���B]���4��X�����BL��L��r�4��/��������7��mS=�����r�^�r�:�M%2����ro��N~O�M/���9x�~�9��8��&���]�����AB����|������q.]>�Jh���08@D���:K�,�:�+��[��UmB��6��>�FVl����� m�(Wu�\l-U�un��a�N�\N��#�f������B5c����8dE��<u�h��px�����f������F;�����9\�����RT�}W�K+����u'����g�����}	�|�����n�.�F��O���/����4���,��U�eq��A��[���4��3��X^6�����|O�~��d�M��LSU���+W���O����6%(��7�Zi�"������	t���p��v�%�Jz�$��`G�<0�o�'ds�H\�7
x���A�mK-������kd����R���M�C����x=q�$�������h8��h�j�@�j�G�7����@	b��
g�����!�C{v����-O25��
u^��y=�]5�YMf�6�����������6��S�GX���!{���!����J�B�*����v��J!eG��j�G���VS���)����,!��qA
�WBl^O5#C��U�|���f�^/
���
8�y%���a�,Rl�~z�J�aO�<-��f�[���������y���CW0�l�\����i�aI�j��E�5l�
<���K���i����LV����e<�(;����SA����@{�������kw=�3@�J�~��_.,]�}m���fO���j|T�f��y7{7�iqLj+��E���D5�V����5Q��u�b��D�e�LT�@\��L��IP����b\kC/���q��9�p��+��4A������\P�v�B�Q���
�����Z�2����j��-��[����9��`���Z�����BG	<m���%����Z�����Ku2o��~����H����&��T�$El�{z�jv�����r=�iC�%LC�P`����$��,��6$��4n`��p��p@7��L���XrN�6.��F���l-��df��h��s��!�� ��!~E�z��U�9�i�v���A�r�?u�i3�&cz���p�#�,�!�?.�!��n�5�r�������b��h��[T�i����U
T������Hn�P�6��nk���S���`EB�!\b/
:��R�@����]�������������gNq�e�j����~�*.C�
�J�^��GZl'��������i�K{����^����
P�$�O���|�t2���+��tA��&%�������/�>!��{��5&Y33�4�����Vd��mw8�2�6�<M�5n#mk�Nm4�l�k��zB���mM�������G7m"$����M�Ym��M���Z3�P����C��P8��7!��O��[Mg��M�����<��Q����~�B��%��BK�S�Y����)�fH����������S��te�Z�Nj�r��g��S�����T��*_�&l�1t�i7����r-�
��_�������_������c����������5My��y�j`�	���y��@���B�L����m�`��+��C����]��j���^��*�[��r�{-�=H������g�N��cpm��M��Q��h���m�!�������h
�z,��lL�N+�d}�hS�*>�O���P�����`�������V�!a����i��@���1U5�|�J����%����&]�5l���5��N�%���Y��%�������N�m�{r�e[�v�9n~��`���KM�=�0 S{�Pg��u���4P"�������{���8�c�H��y����dq��.����C9�[! +F�%��M��:��X�����������]�ua
\s�����$��ZL��(*�w`�\�gp!��)�mk�����0�i*�J-����H�V�]��[4�	����T:Y5��dox���HK*�J�#���rc?�;�q"
�8�"�^B	4���^�z�r������3��hy�������l��f��������������������G�R�5�.���KV�>@0��c^nJ�����Q����6�,��Z���7U8!�pV�g`��%O�>���Ip�F(���J2,�w2�:3���'�� ��7��E�6�i�F���n��VC9n�I�4�>��������H\Cm����9n-�s�sY?+�i����Y���9k��B3��N6�R��r�y��4��V�5v���]o�Zh���g�����tY�R�^�]��S�F�h�	��/|���|�)���V,z�5r@{i9�����`b.� "���t�Fwd��+��%�0d#.]|�K~D��'&T�4�'i&>u������p�] v�^��^��������U�� ��G�.�L�V�T��j������\�X���`0�������?����iK/��=?�����Z��������|�&S�I�?o�
B��	B����NTyB�'����B���I��>K*��-�������J���_�_�����?�L�����?��%~��o�S ��)�W��������)������?�����V>�/�|~_V�������)P~/����)PS���~
�V?���u�O�����}��~~_�����O�������h�m�����)�~o�����@O���^������?��'4a�O����)���{���%���v{���2 V�7F7 |i&�g�6�/���}����O>�>��Q������7����_�4~�0� ��DX�;>���0���O�?���|�������>�����T�����?����)����O�����������������O>2�)��O��?>����S�S������>�����?����Q���������?>�X|
���?>����O�?���S�#~�������^~�a��������?����?����H���g�?�>�������������|�}
����?��?D!T���b|��|�75��B�\k:��.�{�*�M�!�0�L�L0L�������a�a�0tF�
/������7	���At�j X2����D���+Eb�� �{S���D�����((��
G��4�7!��B]����Pi�7Tj@{�`�F���F���o�,��������I�y3S�G���o2�4�0�0�fLaXidapa|a�i�a��\�t����������c
�������^o�t�txo��t�S/��Y�&���te��(9L�d���rs�-����/[�h?���9�/��@��
�Y[��z���Y!,�Z����e[���D�-Z��O�.��/q!���[��u=4{!��Fzb�e�o�����u=�����>��Xn�����=B|oZ;��hX��3�������}�g�S�}V@]�,�����k�@�676����?pm�����jm�2i�)D��bx�����.i#�j �v;���eo>[����{�-�~Z�g�����t���$�%����x��9�5�vB��x��eh�V
�i����%J��������*��<Ca�Fq�A��r>@���� WC�[�/����z	��[g��{��R#��4����h��D��_���G�j���V����m�}�
;��|�<���\	n[H3��h���M�$�o�l"��#��
���%�4�s?�H�2���n��%gE���Z(g��U���N���V��-z����Eu����aXl&1%�pr��������S��*A�6\��B�����#���w��4���E�+HS�(��&�����k�`�����x���.A�i��|iO�O3�?Db�e������
��`s'���4+GO��1���N�jwu��������A@[]	�
�uMN��e�8��@k��89�P��"���cs�m�9��ZF����jF#���zJ�v_�IS�c�v��vb����$�M#�r�R���lC7���T��S&r�-{�hvM�fx��;qnP�l�������7.�{$��;|6������i
.J�<#_��������*�y���]��(�;���6[� �@�3����#/�����x+-��-���x7z�����K�O�f�����[���������-\�n���8��f���/k��L��qqY�i�n��R{i�*�`��3GP������������8�����&J/���u�����8�2,;��h	�hT�seXGf$����T.��({<��Is����B�p����0�?���P>g!|$L��l���\���]��V�S�W��]����� H�bX��n���^�����(����a��C������v�m�^��J������P>���z���5�w����iwv���>���N����6q�
G�=���;#*������I���f�I�<�O��8���9��$i�Y=�Y��L������m����`�K��>����P�o��m��~���y��'�r������L#R��o��!��5Y�T�DZ�������i�C���m>4�x�����*6$c��>��f�J��7.l1���r��0�g�m~��&�H�fB$}��[0�K��l��iZ���M�{��{i�Y�wx��qAO��-�D�e!&k����b��A��@��|��T��A�mg��A l�7<4��@�C41�j����q���v�������FFN{����i�+`�*n�/m�
�6��N� ?�4B�T�:����|�=w��aN[0���tc�$o��r!����NV���l��$j�.9����r+�:���q6h)Pn[H����d?}o�c��MX5�di��y���QD�z0,�v{��C�q&�����\�^wa[���l����'����=�&��R�S��5g_��w��
����2���aHZ(e��M[�R�/ujM��n�k�xz-�'>s�)Q���������O�������|�>H�}��5��e��NaN���L���bx�������!<����J)������������MM�r��"�o���������H����w���������P�����c]_�������o��ui�X�7���4|����cM@������8�`A���F�u����FPuiU�7#��4����dMA����&� k�fk��������� ��d]_������oF�uiY�7#��4����dMA����Q�GpU[}5����D]�� ��d]_� ��DU_� j�DM_� j�DM���l�2��Y��/���q�;����}L?������ �����*��t�v��p>q��-��D9SK����-vq��\��C;/~��WAD����#�4�����x^���kmQgi��D����T��g(7+XHx��mk��=���<*��>z>'|m�z:Z�=@+�V@������:��wbwW�,����V�rt}W�x����_�����c���]L��@+���O���^18|�'�
� ���Ed��������q����$��B�y<D�P�:~d;C��v}i�e��<�2��&W���e�(�����a[������z�-��2��F+;������|n\�S��g(7�2\x��g�*C�{gP�b���2d��m6��#m����&e {�x���������3)��2d[��2�/������D��z���$e(x.�,���~����	�A2He���V���w�P R�G���+C�Q?����\
,�hke(n>UW7VgUO��T|\�P������vj�j(z�����
hm���bT�"��2}�(C�����2	5�/;Q�=���P`3 ���l��4�(��M��w(C���2�5,W�GXN�Pd�m�ko_�2��(
����H�@=(C�wh��z�bP��P���P��<*�)ep^O+w��;e�j���]hY4J�g{�����4X9����7�H��!�h&f8�S�&~Z�����M��&I6������M�y�~:%A3�5H���������<��ag�=�����R!��"z��!���(�3�r�e@��ZT�S���eJ�m�/<G�e����n��=�"4�L8�o���	-sQ2@+.���������Ly����
-EZ�O9Zw�)S_ZE9���j����?�/���U��[�)���qAJ�&n/M����s��@��C[v��I-�"���j�Q�B-�t���P_�����6�C�3������ej���Z3��A�Y��O��Z?.��vYuE�;���Y3(����\5s�4q#����d�W��1������uA�g�h����jy`���q�����"�����v\g\�d!i��;��5�[�#za27~�u���~�Q.w
4�E�V�://m�?�b5�E�u�(#�|~\c��T	i\��6�q����g�� �@��:��g��U�=���+Nx;%j�V��3.km=��C��V�ti)����fmM���x�q�]�s1\X�V1vuW����5�����$�;��<�P�R5��sr?�y��^n���G
���~�b��j�h�Fk�����j��z~�����jV����K\=Ow?���G���D,f'p�P�f"�{���{����h���T��oq��������o�,��*f�/�?w��k�D�6�u}��4���;uR�;y;|�����F5�/�N���<���|Z�1����������h\��b��5�%|�C+�+���A���qh�',�4Z����RM/bi��/z�+�R<�+�v���Z�0��)��U���1�L���0����ya(��Y?.��f����'H��t�&gM��a:�YU���=�CZ��2�T�BA���������<��Wz�iv�z�y��:e41��(#�4��[�Z��5ak)��4����r�Q`���V���\��-����Ai�&�:�)�a%W�N���\��x���6s�x�p�*Z����>�%��)�1�;�����Ak>]Y<0�:�;`���d>r�y�I�C�h����	������9,NV���M"��~|�|�x
RT��� �Z���&��-�����3��������r��'�n����G[��Y��7{h�	�����%��W|~����dQq�d�n���?�-4������8����r]�1��Y���e�dn{��c�T�
�����3n���������X�r��hA,�� ��)��i����L�q���3��B�3�����%��9�,A�{�*�S�P����P-G�s���G�>�x�������-��������(�E�����m��v*e(��N�����b����`�W���S�=��Bm��xov�����9�-W-I:����2Ts=�2H�������]�����P�o��vJ
�H���2������M����X:zW;��2P��z���q���yep���9�2T�����8���xb���`.�����Mp~|��z.-y��I�;���|��o��������.����v����s��<��@e����`��24��w�n�xov�{��gF�h+)��������\A���eh���x/��O]P���\��f)C�Q�x�6�A���"\��C�P}K�����q���>S�N�	-��y��
����yC���,�|n�ZBf���t��Y[��v���2�1�+����y���Z%h���_�s�ZKy`]�=�I��b?����2�J�h���n',�-��Kj�/pU�[������g��"�3��}��X0w�Z���5����X�`���!{��B��Y6$�?`���h�*�jg?����Z��d�h���@����r���O��O\�����v)���*�7�/M�S��nH���q�m4;x�5n�pb[0t��T���Q�KP��9�m;H����`�������\fF�����S���.��5�x�df������cx9e*J2P5���(iU��'1��t/����	E�`����`5=�e��i>��:�im�`�@���&-A���������-Z�Qkd}�T[o�n���r�����O�8A�%������r���_��H�����^���E��I�ht�M�4������un��V�����?���\c.L~���b[�����t��K�X��v�q��� ���O��|17��g(�wu?LA��N[��/��o�t�V�4?5
�f�����L�C��t���z��%+wO�"m%/G7�iW���tEW�+����{+�F���X���Z����FMD����^�O�r<@47��kO�q�j��7B����7��>s�?1����@W���60����P�����z�0�\�n��PK/�!�5�53$Q��WQ���+�F82��������;���{(��/L�1W-��J��Zl?y���}�N�Yt�`T15�9M�`|2u# ��W�e����~�w�������[,����z}d��4[8�����{8ow�������R
�\�V���W
r�:��s����^���S�+P�@f9��Z��������%�T�4U���$�_��PK/��$K��Z�����,���C<���N��_�z6n�g��N�l�|8!�w�g���l�
��gw(�}���z���ww�v���d]
'��~��Px������]���	m�]�����X�f���
m������x����G�aw�v�U��&"�c���`�~F|�V��q���1.�������x�]�Ml�W;�EU`��.jm�*?��n��]0�X�Y�P}�%E*��V�9�/�Y�����e��^+o�B�Y�%R�~������d>J
G��n���>�#��F�(~�&��w&�4�,[�����||OR��.*e�������x�w���K����A
����e��j_^�������
q!�/�2w���g���'��5���k_��sj��1������`��l��o�/�����b����d�����x�O���!�>'�i(�eRG�T��� ��D�pl)0����������}Dj�o��b���)/��,j�-��m'��HU����@���(�H
�����L\�	��0��q���6�#x������W����!Q�J�Pu��P�KM�����%��_�k��JO/Rp�q�5����Cu�E=�R���'������cs��������\�4�}�����_ZX�����Ek�U^l�������)�'�g�8�����}�S;��&���
��}q5k�a���V�;��*7�[�e�Y����/�
j������y��r��#u���#�K�.N2.���8�3R]��!�+~��$N�W������c���x`(��M)�n�*u=������.��>}�^��F�pN��-0q@H�X<vd1]�:�v������RY��]������3����V3�R��)�V�K��E�6����}Cf��IX�$����`�w��9C=�9���s�J��s+!�4#;n,Ks�ImT�u�OG����T�`:wU����TR�m�W���C3�cj�v��#$��N!��O�����C�����v���_�J���ao��x����vw�>�AI�����5'm�������r�eK#�����:S�*J�b���KT���#�R"�������<�����-d��n����1GoOku����\N���Cbr
q ��w���s�|�t�
��z9y�����)p�y���Gji��������^TZ�j�v1[}���{\[�u
�.�+����^^K'��^_��y����Q�=j'�|�������2-����;2[;�u����:��d+Y�e�s������)+��9����Om���pW]�En^�|������w���&/g�&������va�q�;���swe���{�0�h���IG�rvC�Cy����-���6,$��
(�HM�O����jUsONo3=������sg����	����w�����C{�I�{�	&���-���]9�p7z'���N��U�$%EjY��q����904��`�M:h���k���k��i��h(���Ce��K*=��]�L<�����\�f��!�|p���������|}C�B@@��O�]Wx����������������\e���+KV�7N�W
8x�;���.`{t��
��%����+o�5�8�
P_x�
��J~���V�'�8�p2��l��EnFhG	NN��q��>T�g��:�[VN������T"W���Q^3'����T
��'�k0�5��v��c���+0�x�E�q��� ���6����747R�g���%��y�{���x$0�#u�P����-��R�mS��V�i�"'�����T*P�X�Mjr�io�+P	7<�
��
7%8��nF����{�@E�|<�o!������+(A��`m�T�~`|��lE����@U&��*V��Hu������x��z���������H������!�����B��a:p�u�Q����c�������XF��+��qm�a�@��>��}
Cl�p�W���2�)d���(�Bh������F*�k���b0���.�"k=����Pi�����+\�_j�0��Se}g�n� ��P�Ke�I� kA���_w��h��J�����L���lnl�So�������_�*�WE�l`�c�����5� h�4�*��6h�����]~��}������~�^��n�]W���@���J3��QX��c�x��}}�����Eb�?,��W��K��C����?#n�����suI�N�)���`����ud�m��s��u2Nln�vY���������X�41�']�/����s7���>�1_�*j��G<��y��)q)b���TlS��	��H��*�y'������\q���!�8�;c�VqdW����r�^9�R���4`u��cX@['�4OgE�����N����A{	�8�\�VMUG3�
�#��c �UMG�%��X�6�����rve���o.�)��ZQ@�#�#�
��jeX�m_)����:@%�5R3n�=����x0�wW��#u����s�j����4�gR�m�WG`���������,��Sp���l1�{P�a�b)�����+� �r����1��}N�C�HU�j���RGh���^�Yr������*�L��r�����F��a��<�dv�����?Qy8�����3�c�_qb9�.&N8�����~��0���%zm�)��	��K���	e��m�t���R5��fN�cYj�;%Y�����������,[�;����q�����r�P�������0Q6&�����	�qrLQ�!�%�T&�%oU*���$�=�L�)S ^%;S��m
��
W���w��QK/�h�.~�U������r�R���C����^�~;2)��_^N�l��	��/��@K���mQU+�e(�A�l5��sy��r��
�I���
�J��+���y�x���<�<�ME�fW����������
�� +
4�$������1.��@>
ec���(�`���Du�+�
��S�-�?*�VP����I��4}%�9V����G�>H���T����R�-��ZI���";�Z�W�*�l��7�?��m��)����R��)�VJ*�����]�2w��}P+�C������Y]Z���(�EP������@LwG�	��#���(+T�-�#U����{����2��t01f�m�����PV�fyGe����h%��6W��!��'Nb(���`d!P�H����|j*/�y�lP��v���"�D�-��5����������(�����4��u�����3����� ��c�<��9�YInB8E\���NM2x�_30�2X��pD��v�9g�.��f�����tY=[���W��������
ZYK��b��s-�x)��N��~1��������h��~����=R��ZI���9I�sB�]�J4����na�D���"{��G�������j��T���*��~8
�@l�K~�C�������JcT�����S�U��AJu��fOO���D�7np�������6hB6����������"���~��x�w�������^l�H�)H�W�������lZ��c����>cui�Q���#dbu���u�E���{����Fj�k�����#U�������K��+�ri�V1,����vqcG�BZ��C�J)R}�����3�e�������}�O�����G��^=���1|����O���xp���_j����j�}��@�3���r����P�o���C
��z���u9��a�bg�uE7#����C�����(�%���<����l�-���#dO��)�r�R���3^�'u�HUf�P�������}q�K���}a��$�kE�=*����#4~�nP��=:���fN?=:C>����*5�<��$��i�EyF�����>���z<���������_w�������S��Dj�/�>�������T�@�J%���m���w�K!�.\\AU��Nj�XC�;�{�����:�O��Zo��E��v�y�*�A5#(b
�22��'���Tz�"dB!���5\L���B&�p�rP3�C���������XS^���dy4Pn����S��&��|����"d����Tf����#�f~�SIM�U_��������4}�!�)������|�>86]��/��J���C���-����=<�����}���*�6�c\H�NPG���/[�w�8h�X��u{������Q�re�J��TJ�*d�b���_6������jw;������!�;~]�h���.n�g��uL�/�����L�I���P����z�C��/��b��3s��$����1�C@�E���/�V�7d�Q��x����K���gG�������#U���J��^ayy���.�Z�Z��R�&y��x�dZ���%����M�t����0^;*-R���iS�0��G���5�#�J��������o"�Z����X��+dB��2����zq�����:[���Q�^[X��\'�rs�
�<�U3��n��KG����_����^8r��JW��Jx����cvRR�bPu+#�l���.��/����<�Z!������:W���_���m�$^��ny��>T�wz����������
�+��L����'Y��1_�����m}�7j�^Rl������� ����_��[tz�b���syY�;}����<)���n0&����z�����]BP�����nV�mw7�qf�qG+!x
�<u��l�qG+�K�{���_�W�&���w��<�Jhs��psF��G�iq�O*`�U�������OT �wZ�;�!�7>�@[fM�4�� �>T}���n~R~�3�)1i%eP^([b���{�1H�
��'�V���L���)N���d�� $C!
�x�aH�B�]����fzG�w�1����]#�"]�ywc�V
*cg�1i�u�����(�x��}�X��b,����[����N�b�V���[��@+�@>�J]Zm���3�"�WI�p��,c����Rv�E�=�he<P	�|Ak�}�=�J�#���^�H�������$�
��|�1I5S��#�iQ<Q�m�->��T��{o,��F�E���hy��r��E��J���t\��1�R��D�G9�
$/n���-J2������_�r�b�vQz�vfY4kP	<�����P���kn�.�C�wgWYz`�����������xQF�w�4^�#
/b�Q�Ry'�D��5�L��a^�z���c�������A+9{W����������w�]�\4�.�<��Jx����
T<��m�Y��)g���7��"A��v_E����K��T"�9��j�"�����&�	C������q��z(wN��XT�y������or�2�M��?S&���:���VUi�YX^4�v���#>�G�R��i�(;�
d�t��Y81�`)���Um�m���6v�3F�S��[,�k#�b���������17��%�����C��p�.��}�)@�'kH&~�����P.�8*n���.{�����P$hG���:v���5�4�#�b�?A�8�W���oL��UKq���vj�v���3L������o�n��5�r���M��Y����o
 ��8�R�L�������b�<J�����P�������z�����v���c����_�A{��z���m��.�.V�
���*���N+T�GV�����(%?�[|O	T�]#(����_4s0n����"��g��0���b����<Y&5�V}u���/~��!����>7���Q�����!&uO����*��M*�����)g�jV�O}�[�.
$[���R�{�)������!'�f�Q��oRu�;�_O�l�����y�|m'Y�]iF||�M���y�
�����~���V��:������(pciT��qB�{$���+��t�5L=�7������AVJ'U�����h�SU
����
$�����I�Y���t�
�0Q6>��dCi)�@�)�-Dp�=���"��A����
4�"�)�������\��up�r��K5����M�eH���@��w�:B���#��!��yE��d���)�_�S��<A&8����V�V��Z���N�X���a5"������)��[�~j�Mw�S���L�*���
RC���#��.��Gp
\�Y��2"��(L���|�@S���@�)�3Dp|U���~u)��"���F��I��?�u�������K5���K��rbm\�0?y�E��*���F�}yE��d���)��W?���N�N�T���b���P��|�=����
�)Z�^�����-�
�<l��"��U��mvZR>QC���#��.��Gp
\�Y��r�u�Q�({��KZ��������y�q�����9�1�1[��v7{P3�WQ�����T}yx
�O�����'����������\����&�pp�
�|N������6��6#�>.���o����3��VBG��h��J���%���O����-��������9�G~���������Mx����D����qe���������5�O�������z��N���@*Ci�4���o/d���3�?��Hw�?��B�n{��-����`��R+����S�{�/��=�X��'|���o��R��q���q&.��e.���m�5�����7`X�S���L&�w���i�����}3��F.��������"�������Cu�E=�R������3`o�u�>H&Z
��FsW���NC��m�����%�l�v��3b�V����bs�7�o�v79
b}3��g�M������J}>I�^W@�����C��@����Zg�����)�,4~�nPK���5X3�����|�B&���DU�wPy6��I�8?�(�Hu�w<��Il��]�+�<�+b���)\�n)����~1����n���z�W*����H�����,�Y�t��{�w���#��J�$U�*������UY�������0���zU������G<�2��Xg�Q�V����/
���Hm���!�+&�<h��T�����[�b�y���d��*�"����`�
��u�p�<�|��?���^^})n����S��g�?B2�u�?��t�h>T���tqn�����`��f]���7�[�]�[3x��4.u��;��>�}k��eK#��)�X5����U�jV�%*O�j���H����c���)�S�K���%��}�d���m���S�V���:��L�N�������������7=�L�R4$����k���F�D�6�^����H�Cz�luh0<c���9u����o*/�75!����b����<�KQ�N��S/�>T��c���i!�G��v<��^��G^E����C'HSVB'Jhuh0�c�c�����U"7o��SX���wwu5!������w�������w���+G������t�]-q�[��1S����7�3�Q!/G7������/z3tJz�5�D���]�����mN:�p�#u�z��D\>�Y7�z��J~n��j���\/#�N������n�v�ck���}�~��P���t8(_�t��t�5�A�P�9�K�T�;/��n"���Q��Pa��;9������TzNy=�����k���xOA?2�;$k�����;*����W������3����A��?�u��d.����=c7+2e����+D���]���O��G�X�=c_r7/os�7 eDj�3<�v�R6*�{S����V���?/�-w��}�2�n��%XJ+j*�}�~��P�
Ue����=c|��G�@������f*�����Qs������l'5D�X=z�P��1�x���=�{W�%����Q��LL{��m��+�c���=c��>���t���3��+D����G�
�3v��]�FR+�@#y���P^�
����j��o�+�����B�����g�!z�yE���[w
A����L�v�h�_7���V���/�ox����a����h��gI�.&�S�����@�i�h��DYQ�1j���
�+�V
�-�*���B��a��1>���0*�@q���['
�4�x
�����-�Y���Y�2�dYR+����S������_�\���#����ptdR���6���*�]���6b�vp��1��\���J�V�et�v��W���P��8��t�]�7g4�c������LQw�7e�B����xU� ���<���O�g������z��������8
������X@[g�
�������-�#������x������,����4��su���-8ZMqer�*jY�G<��y���

����������x5R9�����p8��:s8`c���z�#�c���n
������hm����B3��C�c�Y��f��h�s9:���xq1��qxXG,;�%>v�U��c��4�X3��k�]��Y"��T���w��<��u�ku���sR���"U#w�>�;��Mh��D�Fj�]�G7�0�wW�5#�O�����7�����������9r��������V=�nno���]��:������6y
���K�����p0=C?�����:��������A�#��QK/��k/K�7���Z{���vz�����A��7�Q�������^N�W~��3��=6D���_�F=�<<�j�l�>����p�n��:�w����0}�P��>���"c{����x�#c�U�d����K��|���a���Fp�4�/Mp��*�w|)�,��wyGe�l���������0Eu���Z�<0a�AW ^:�����p�W������p��r��K5���Xj��Q��fW��I�@��V����������EN�l�\��K	�@]�����GU+��%�A�l�����~���4*�#j���t��u9qe�w�\�V��Y�u�*�����`(D.w<r�P�\0Nz�����Ga�lL���
Oerl�:���
44o��%g�
�)u����p���)�6�)��\F�����K5��|K��I����@C�Fj��_�\0n���(r�eC�B��@C�=T Oe8�;y�U���Vc���"�^����`(D.�=r! *���nYW���Z�~��F�(+T�!�5D.X=r�P�\0�x����`���C!r!��D�;F_*�������o��P.K���\�U�w���P�RIZ�������D�z������-�ln9�]Cl�x��*�a{�y}�_8H:��_�1�������)��������k5����y���J���b�H����>7R1'#?T�)YT�c"��j��W�f��l��U*���!��z{H�^��g�>Hk�Dj��f����-G*QY/����T�w����H������7���<�	��\Q�_�O�_6H9��S�D��8����|_�t�����,�*!���D+8��;�9�XY��a�jm*�lw���*�N*-����/M��X�n����������+6���WG3�e�!=.�o�����+�6���8��������A����_.R�^X2�������\��LfV���Fj�+�V$���[j�e�G
�A�/�,K��Vq��ab����7f����A*�>*PJ���P����9.��0}v7�%3�5��~������n���c�t�4����f�D�N���=�L:���e5R������6�\3L���W�J���*����ln���f�����A�_[ln�u�`]�s�r������3�:lF,���Wy������nN�C*1�����.��j�
�RoC��?u����k_L����}h�����G�T�>4����Q6��c]Ee���z^cC!�?P�KU�qP�4���&��#�<#����@z�$~$Qy������"��=%:@K�cS�-Ej�/�>��A����T���J%�����yx�Ygi�qU��;�R�fTE"7R)�Fm�����a5;�w�|!��e�v�5�S��.���������\��������r������V�T�~Vy�5����Ss����;�p�4#;n,Ks�����|7���*S�q�U�!����
��������15���5�$f*7�����g��+Ml�b��@#o����7��Y������k�����c,H��NPG����li�������C��0��h
Qo��!��%*7��G@�D�T���_�(�#D����}2c��������@�7(����h�+������L�I���P�F��z����_��������\e���y�qK~Qi�J7����]��Kc�we����"�{��o(G^�h'PK~y]r�u�KC�mW+��z'��:���Ly�C������/'���w*a"����"�y��6%�!���7V��x��2�tSP����/oy'���e�{�}����d��7t���Cq�|��pIPG�T%����)�.�K��j�����-[�tp�=o|@~�Ko]��(���.���t��Z��<�x?B�I�a�w��*��G�����5�I��1�{w�4���`�^�����K�C����J�/+�t��t*��{�P��BK�T��]����c�Q�l���ZE��������FI�/���t�tYQ���(+�wH�BY���wTx�W�����T�w�g��7!��w:�"u��J�� �M��-:d��������TC����;�������=9N��>����9����#u������VP �������!�;*�g�\�-�!�����X;������.C��������n�J��G�@���b^{��}7��X�\e����M������p�
y�mqV���
1/��s
$������a��-�1/w����b��>���v�y�����(�	x���KX�)K���=!���Y�@:�+R�@K9A�Z��I���
�$ne�\>(�D:f*���uQ�����d����
4CX�z�o<�,=bQ[�C��K����^�&NwZ�,5�{���|��z�|o!��k�-9=n�Kq������?��b���C!����1/�Y
45k.��f���J�-��/hy6�i��������IwR��L*������z�����yq�e�~k=~�L��@U"`��5���������.S���B*�UqHT�a���v�fxl-p(�[V�����$���r*gk�	l��=W-���1\*���I�1a���?4QyS&�v���n��U���*����-�A����k����D����Zc&����;j��*U|��<���=�z����vnwP��n��(����V[;�5s���[Y#U�v`�dn��.��3R<�?���VkV����*/���b�0Q]����_�(��;V���������{Z���g�����o�f��=��c�{=_�CTj�j?���Q�$N	[p����u��1�=�8�U�z�*���5HI�
`�hy�k��WQ��?�1_�����8�g��=~������8\h��a�U;���w��%��>�l{��Z�n��/E�)���=�^��(mu�' �����8X��C�&*��I]=��n>p�Fs��:�!����5s8�O�:/9RoA���C��bew>���9��TWo����*�z�g����b�-�*�������
O����5���6��|H�iT�SCC�|:&�zy��1�{�T�{��n���
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
125265
%%EOF
#176Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#174)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Oct 07, 2024 at 03:23:08PM -0700, Masahiko Sawada wrote:

In the benchmark, I've applied the v20 patch set and 'master' in the
result refers to a19f83f87966. And I disabled CPU turbo boost where
possible. Overall, v20 patch got a similar or better performance in
both COPY FROM and COPY TO compared to master except for on MacOS.
I'm not sure that changes made to master since the last benchmark run by
Tomas and Suto-san might contribute to these results.

Don't think so. FWIW, I have been looking at the set of tests with
previous patch versions around v7 and v10 I have done, and did notice
a similar pattern where COPY FROM was getting slightly better for text
and binary. It did not look like only noise involved, and it was
kind of reproducible. As long as we avoid the function pointer
redirection for the per-row processing when dealing with in-core
formats, we should be fine as far as I understand. That's what the
latest patch set is doing based on a read of v21.

I'll try to investigate the performance regression that happened on MacOS.

I don't have a good explanation for this one. Did you mount the data
folder on a tmpfs and made sure that all the workloads were
CPU-bounded?

I think that other performance differences in my results seem to be within
noises and could be acceptable. Of course, it would be great if others
also could try to run benchmark tests.

Yeah. At 1~2% it could be noise, but there are reproducible 1~2%
evolutions. In the good sense here, it means.
--
Michael

#177Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#176)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Oct 8, 2024 at 8:34 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Oct 07, 2024 at 03:23:08PM -0700, Masahiko Sawada wrote:

In the benchmark, I've applied the v20 patch set and 'master' in the
result refers to a19f83f87966. And I disabled CPU turbo boost where
possible. Overall, v20 patch got a similar or better performance in
both COPY FROM and COPY TO compared to master except for on MacOS.
I'm not sure that changes made to master since the last benchmark run by
Tomas and Suto-san might contribute to these results.

Don't think so. FWIW, I have been looking at the set of tests with
previous patch versions around v7 and v10 I have done, and did notice
a similar pattern where COPY FROM was getting slightly better for text
and binary. It did not look like only noise involved, and it was
kind of reproducible. As long as we avoid the function pointer
redirection for the per-row processing when dealing with in-core
formats, we should be fine as far as I understand. That's what the
latest patch set is doing based on a read of v21.

Yeah, what v21 patch is doing makes sense to me.

I'll try to investigate the performance regression that happened on MacOS.

I don't have a good explanation for this one. Did you mount the data
folder on a tmpfs and made sure that all the workloads were
CPU-bounded?

Yes, I used tmpfs and workloads were CPU-bound.

I think that other performance differences in my results seem to be within
noises and could be acceptable. Of course, it would be great if others
also could try to run benchmark tests.

Yeah. At 1~2% it could be noise, but there are reproducible 1~2%
evolutions. In the good sense here, it means.

In real workloads, COPY FROM/TO operations would be more disk I/O
bound. I think that 1~2% performance differences that were shown in
CPU-bound workload would not be a problem in practice.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#178Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#177)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Oct 10, 2024 at 3:55 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Tue, Oct 8, 2024 at 8:34 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, Oct 07, 2024 at 03:23:08PM -0700, Masahiko Sawada wrote:

In the benchmark, I've applied the v20 patch set and 'master' in the
result refers to a19f83f87966. And I disabled CPU turbo boost where
possible. Overall, v20 patch got a similar or better performance in
both COPY FROM and COPY TO compared to master except for on MacOS.
I'm not sure that changes made to master since the last benchmark run by
Tomas and Suto-san might contribute to these results.

Don't think so. FWIW, I have been looking at the set of tests with
previous patch versions around v7 and v10 I have done, and did notice
a similar pattern where COPY FROM was getting slightly better for text
and binary. It did not look like only noise involved, and it was
kind of reproducible. As long as we avoid the function pointer
redirection for the per-row processing when dealing with in-core
formats, we should be fine as far as I understand. That's what the
latest patch set is doing based on a read of v21.

Yeah, what v21 patch is doing makes sense to me.

I've further investigated the performance regression, and found out it
might be relevant that the compiler doesn't inline the
CopyFromTextLikeOneRow() function. It might be worth testing with
pg_attribute_always_inline instead of 'inline' as below:

diff --git a/src/backend/commands/copyfromparse.c
b/src/backend/commands/copyfromparse.c
index 1a5e1ef711..9f8f839d6c 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -861,7 +861,7 @@ NextCopyFromRawFields(CopyFromState cstate, char
***fields, int *nfields, bool i
  *
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  */
-static inline bool
+static pg_attribute_always_inline bool
 CopyFromTextLikeOneRow(CopyFromState cstate,
                       ExprContext *econtext,
                       Datum *values,
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index aa99459b26..fde2d41316 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -170,7 +170,7 @@ CopyToTextLikeOutFunc(CopyToState cstate, Oid
atttypid, FmgrInfo *finfo)
  *
  * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
  */
-static inline void
+static pg_attribute_always_inline void
 CopyToTextLikeOneRow(CopyToState cstate,
                     TupleTableSlot *slot,
                     bool is_csv)

In my environment (RHEL 8.9, Intel Xeon Platinum 8375C, EC2 m6id.metal
instance, GCC 12.2.0), the performance got better with
pg_attribute_always_inline. I've confirmed that for the case where
there is a performance regression, that function was not actually
inlined by checking the object file.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

results_v20.pdfapplication/pdf; name=results_v20.pdfDownload
%PDF-1.4
% ����
3
0
obj
<<
/Type
/Catalog
/Names
<<
>>
/PageLabels
<<
/Nums
[
0
<<
/S
/D
/St
1
>>
]
>>
/Outlines
2
0
R
/Pages
1
0
R
>>
endobj
4
0
obj
<<
/Creator
(��Google Sheets)
/Title
(��q!�L0n0�0�0�0�0�0�0�0�)
>>
endobj
5
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
842
595
]
/Contents
6
0
R
/Resources
7
0
R
/Annots
9
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
6
0
obj
<<
/Filter
/FlateDecode
/Length
8
0
R
>>
stream
x���a���v%V��u������������$J$�/c����`���8���0���0�r����9G�k��xHU�X���{[�E�-����M��?}:=
�.��&�����O��ixZ�vJ�=<�8N�i���s�]�<�����i�?���i��e.�H��������KJ@?�N���������?���������������8���U�G����)r��OK<���/�$��!�T�r�4LO��2��S���������4��������;��
�5g�������0�B>\!�SK�u=.�t����m���l���2{.��m�D��������+.����sIF���
�!\�y�������ev���2R��$������\,lw���V���&okC`�%�,2�4����.���L���CC��oe��5���+]7���
����b�����t}x�)\����a��%�|8�����8���b�Q"��-n��S�[����R�!rg#�:����m����r�����bR�������4��e�r����V.-�������4�Na&��n). <wt�������S������b���y�mA��X���rb�����9�d/� �X�;7���Q|�:������h&B�
^��t���TDi�>��@�5�0T`���=��E��k{�ZE�f`��"H/�v���-HU����*
t�f!U`aPZ���V/���`b�l!.`����ss��J�?T=2|�����1<9=g�Ck�����Ww�z[P�� H��$#���o3K���jM4\�e$�R�Qa�,r�������cP�L!��$��sW��CUu�&:.�2~)��-�=(�/!�2��\�[s<.�043UW{�q�'P,�p����_����i�����E'(\@���-�Z��#�v5-��B�+�ZK[sw���bZ.��. �����_n3=,Um7�a&���I
�-nV�K�\,�P�4]-A���@�5�,���������0���c��we�Z��KT��`��P-����1�5

W�s32(��P�dp��P�:2m�q�:'�f0Q[��d�n�����kAW��7�ZH5X����U�)7v���l�][pr=�ON�G����''���$tc�e,���ZLA������d����������D����/%�5����pdZ-����{�'�%�0�9���I5��8#����d���T������Su������eD��i�}��]:�5B��YS^$(\��5�X5`p��Z
�@��. T+N����5,B�5�Md"�H��|
��A����t�R���+n��0s��u
�a&���I
�����i��F$b1���w"���e�&qn�1��0���
������\�B��b��PM�l5����v����@�5�0� G�6�E%5�n���f0Q����(}�r��B��R
�G��r��\M&6�6�p��[�����������$xC�������|���)�92��#�������������D���.%�-�9h��CSw1=G��<}.������;���#����d����k�j����T�5���!e��`��~kk���J�a
R���.`qs�Sv5�>JP��l�4
��k�)��7��8W �����d4��i;LB�5���������_����L��. \��ERm�N�a2��D���_�5��f/�d/�&��,�����������zM@�j���M��A&�*��*�0�����8�$�W��k&�j1Q�s
������� �Z,.��j"� [��PJ@�a0�A� ������F}j�L����I��LyC1>9g$%��h����A��-�8���c�����MB�g��&:�T98~)���yU�D������T�r���$#�17XQ���I:l��#K���d��^P=�t��"��)����;�6�6����Z�A�5A�!����s� �Z�=�4��@��. �s]����&�ZLB�5ANd#�H&g��E��#&6���"T\d�I)\@n�M��b��b����|�[��bj�I�D6B
�I/�:] GN��`�`����]����W���{��P�E�x�l���P�dp�_1lv.�K][0iW���F�k�������X����P-�$������b
��
�)\@�
������{\���Gd��?�!=��3B���=[X������#U>9�\�Qa����e592m�)Qs$���������
��3=z(8R��	����wR4�c"�H�'G�K2*��8����T�55�1��2b{6j��p�����kf��B
����I�����ER���=����-���'��k�]�4�6��b
�i1�b.\���OJ���IUh�3�tK�p���M'��Sy{oM�'2*���^y����r5F2|+��,
������@��b��R��X�������P�lp���W�d$��\�%j����}��pjp�8hR�7��X�=��>�bb�l".`i��t�63�B���IyF*��������|��p��Fz|r�R�Qa��aZ��z#A�^J2bc/D��)(9����sIF-6&  �bM������$#���}��:���kv�#D�2"{Q���)}���5����>FP��������J
{1�����������>�Cv5	%��8��8W ���N�m#H���kbL�(������q7�a&��nI
�0�	W���0y��rM�'�j�E�4[�go!�0F2|C@�=�M����\��@�'��5�h�I�k�f0d0PcC
r���dc�o~�rN)���lz��1��0�`��n8�-
w@��j����%
���f2�I�!�Xt9���DM�7R��#o(`]�p����������C"�#2������
C/�.:
kY�a-#�������6�1��j�&�>"cN�?�d����o=��M�a,k:�e$�R��\h�G��b�>j���C�2"k��p.^�����@�����3��:r
��b {�

��Y�.�s�F�F��:
Tq�@28/�~�ey�hD!"
����(&�p�5h�eo']��f.�d.�I�����<�F��:,
T����^�U�r��]�����
P��l������b��PM�l��{��^�^�f�${S��m>7�M�����D
B���5��Yg�Z�aq�T���~I�FBtY
&6��p�N�=@�~TM��JE= ]����������f�aR�t����$#6��x5%:�t98r)��L�s��������#[N�>�d��t
p6��j1%"�Dyr�R���u��������><�,#2����ft���J�9h���>@P��o�?�iX��,F'(\@���cY����k���B�+��v6^-B�5M�[����|�;sf0�d0�=I�r���J-���%Od"�`�W�6s�_�7�a$���.`a�u����@�'��5�_�@�����b���$����7{���@50� G��-!�bq�pT���Sh6,&��&�p���A�OON�W��J�?g�FR���4d;[��#_>9~)������HPM�aLD�rp�R�s/�����M)A��1�:����sIF|g������CSyX]G�<9~)����.q[���*������/6:����k����X��>q��j�'T�a/�}��p��KoBA�� D]�D�\�dp6��'��Q�\�nQ
��Z�t�L��. Y��
t>��IC��$d]���l�����*�&�H&�o(\�F�6����b0P
�B
�z�����zQ�u���P��n�$���
�k��j1Q�s
Ba��9�:��[(��@�An���'��^b{l@
������R]w��������S^G�K2B��%0��l������sIFl���Pm�%���98�\�Qq_~��[��k�v6EG��<�V�Qqc/-��h�1td����%yc��-7����\3f�,���/u^�j1%�t�G�. 6Z�P�W����@�)\�2 _x�b-!��-'��kX�t���j�!�d�n0.`���?a���P�^��^���X8���� L�4\����
,���
� ��F�|��,����A��`��R�YX|���@��
8Lja����N��=Q����
,��.!j��� ����Z��H��n���
��\���A�Jl���A���7�k����j9)��D��Y$��@��MA�����dT��wH�����,�D��G.%��J��vI�� �H����%�5������� �)k���#����3�v��X�[*�����������DYB�5�!��l�������f02}��p�`�	*��~v�,���'2�
,���]o��b���0��. [��p�G=47�a&��nJ
���3�f1��Lx"�����3�a$���.�3Y��X�u��Jj���]�����*�0(��P�����x����[�^ja�A6���B���B�
�R
rS����,��%���p7X]�q����OH~7��8)�HJ^�����l
�������$#6�B��:�-Qn����KIFlkti�� �H|�'�%����/Ej,�,�D���N�^J2r�^����J�&�>.�,#�����*�X�^k��C�X�{�q$c ��
�,�-X�9�W�$�E�&��L��>m,QUI�lM{��p[�����So�f����p�����vh�&���|K�V���0���c����/FC��d�Pm��n����U�a)P����zs�����L�a��7�)Pb��P@��T�d��M1�����"���,���:9�g�F���5/����Bs���9lA������dT�za�.H��F���d���4�q6�F��<m.����%���1j����������IY6:�\k��CC�2b{/�JAk�k�v}p�pgZPk��c����E(\@���NU�c���\7��8W�����X�Xk�K�(��j������0f2���p_��T���[S���C
����:�b�b�
���+��Cg���T��M^+�A1����0�	����[+V_��Z���L� �\�l�u,���$j
8���ds��J7��
�)\���{���=}���@���n(�%oR����a�^���\lA������d��\�����;�
�� �H��������"!�(gb6����rIF|��o�F�;9z)����6�Qb��2�y�)��m��R,� ����P@�w'���0��>P��d�����n�$�Zs�D6�\���?���=����t�R��l��=r �0f2���p[}GC� �br���D&B
_���@�r�y�o(\�76�X�E��P�������@��
6ja��fK����!�|��D�"�5��^�%'Q�X(��B���t5Pd�Kl���p���7u��?4�Ny�(62����������P�z���i
�r6�F|r��$���K3��bL�pp��$����{@��5�8R������
k/l��[��H�'��K2j���q��Z�I���\�Q!���N��b
J�)�)\���K�e�5�@�)\@6h_�m�@}���k��B��aq�N��A�[��{Pr��s�����T��3�tC�p��|�M�j1	%�4x"�[���RH5���
�p[�a]� �b/P�)��
l���rA��Se5�0T`����UV�
L��^�F�
lv324lI�*
t�f!U`��m3{_/�;]W��
��\��e�����)>��g��>�EmR���,������9���H�O�[J2bK�_E�N�)�p$���KIF�� �H9�@��'O�K2�;r�V��((��Fr<9z)���W=�{�����&�>,�,#���4]�A�53����d��Ss3�>DP�������
-���'2�
,���O���-����=J���u�D�\��\�;��l�����I�&��5X��������P��6���@��\�.P�C
^we�i9�fX
Y
��P�ok�����)�����\�l����D�a�T���O!������lxt��8��iD�'$�Z��5)�h����x�UY��vOH�O�^J2bc��^WkY�a-#�������������l8y�\������h�I��,�0���KIF��#Qb1��4�1!e���~���OW{"��'P,�p�������^�����_��wVE�aO���8W`��t�[7tuo�����5�	�.`�QW�C	V{a&{��G
�h���o���I�j#�`1�{Jn�H�o(\���t�0,�+�D���[�O��\�\�V�ds�X���)��L�.�\�oj�"���P���T�l�M
��WJ�dR����t�����|���/��7�*6)�HJ�i�� ���O�^J2bc/�C����7�����$#������������g�%���=<Wc��H�'G/%N|��o��Z�	��)�����G4�Z�A�5�1��d�/>��\�bd1�HA����n���q55�l8��8W`0�Y<�� ���
J���UO��`��`�;��t�/�+;�[3���B
����b��h3���(\�"$_|DN�b�~PM�,,�.Vq��0��@1�,���>��b�t\
&ja��f7�z_>Q+X(��F�A6��3z�3&6��p�N��y��������d���������P�J�m�)��5�9��p#>9�\�Qa��
��bL�qp��$����q}����H����J2*���UqK"���'��K2��^|FT�5�a��2*n�	����jr���
)\���+���`d0����d��-���\���Zk2��B��a#����G�U���Zsa��\����l�R��b��b�;��X69��Yc�����p��'�*������j�o��}#��|K+Wys�:K��*���[G]�
7l
�0T`��^z�����L��\�ol�f1�P�4�K�{��<�d�p����������>���4l�����R`��������q�2\H����<�'���"�8����,����������
-��^&�A���^F_;�V;�V��'�'_�4����)���0�D1.�b\\-�Q��(��Q����`q�BKtKt���bY�"&G��� :�=�x|�
>�<\�b�a;�Xe�#w�"�x�������2�b���Ef���'�PL'�H������3�b���Eg���E'(V����H.:3@-.:��r�9�. �^���}�x
\t�b�������\(:���s�. �������i�������!���V
5��5G~Ws�)���hvQ�@;���5��������_��XQS�:��h.L@�C|{�Y�.5�M�,B�����v�;�e2��_I}�#_��������A�s��C�f���j��G^W�����g=���M���?����������}#.��]�U#���7��{���G.����p��gweV�����&��G��\X'k����Y5b+.8��4k����5X��������[q��Nw�V��\�[Wkz����Y5b+.8���
����k���.��]�U#��������
o���k��d�6_���2�Fl��X�u4xLGG^��lM��gweV���.8�<;r�V�������h����k��IV~&��G���5PG���dp���\���^���2�Fl��s��h2���#�n~�������[q�����`���\���^���2�Fl�g���&���;r���z=������atM[}w��m����KxvWf�����
����lm�2�Ti��I�
���d���������2�?���0Z�Ky����2iy��g�,f�I��r(��]���LW�Ik�������n}�e1v�g�nC:6���#��ad
S���PH��Ztd,G!c�$`s-:D�����Apu�+K��(d4���},�
�sAI:
|x'^OJ��Q�Cx����
��P
N����b8���yR�����������F^�"�P`0Q\`�(V
�FD�"�P`�R\`t��P�z�X�H�d����x���J.(C@��w�������PD��N%
�!b,�
(��t?{��$����(f�F�N���X\@2�):!��"��d�PtBA
U��#�Qu�"'h�������vHy��k2RU��a�<a�<��k2Ry;m]����� j��x�L�P��@����a4<c�<c�<s�5�����y���,���H%eW����'��&#�=���G$-#�]����e����� ���5�) );
�g<�}��M?Pc���>�v�T�Qv�<���
��[���2�N�G�iv���"�L�Q���}AeC����8���)O�\���2����>�8���)O�\�����x���+d���>�me��&�:q<C�=R��Gp�f�g��G�}h�x��{(w����e}<��}H�e}<���34\j29���)��#�@3�3��#��>��p<C�=�*z�Z@Sx-�CZ�p��U�!dc"�1���v�T�����@d�@�h��������T��x���/>��Hy^K�FC��wHy^K�F&���o=R����	���\�����kd���L�#���/�
9�������g���<�L�sY�C�����h��Q�wHy�����/>�Hy�KG���/>�<���x���/>�Hy&�:q<��;�<�Gp�&�g|��g�\��������$�Z9�U�����W�	���t��GW�kd���\�#�Y|h�xV�wHy���-�*��G%~�W�	��Sw��g�\���Y�!��}h�xV�wHy��9�U�R��#�@��
�C�1�_�5t���>�M����U�!d|�
��4�_(�'hd�@���?N>���� H�8�W�e=d\�8{FC�#�������d�������,�&#|�]=��������T�Q6z��� ��&#|�M�2.hL���
����Hy��k2�8~ �)�z�5�����yD����d������I�������L�Q��3d\��#�@'�g�G�|h�x��{�<����g�G��|h�x��{H|���e}<C�M>�t�x��{�<�����|��'�.�����<��\��	>��xN��_x������4�x��KMF#�3�#�Y|h�x��{�<�Gp��g�G�Q��Uh���}H�����
8��lLD6&"��.��
�0Y�l�vM������OA*�i�BN����Q����y
�!�Ax���L����y �!�rMF&�Rv�<��^�&#|)=C*�[MFN��lr<*�!�2#�\���� �rMF��
�C���5��K���@�3�����L����y �R��j2r�/e}<��g4�.���Y�!�	>�4q<��;�<����g|���k22���>�U�7���d�_��xV��h�\���
�C���.��������D�Z8�U��J�V��|)��Y?��Gp��g|��g�\���Y�!�Y|h�xV�wHy���-�*���~�Z@'�(�C�_����C,��Ddc"�9Q��� ������jP�B���OA��ik"�L�Q��@����a4<"�)�|MF*�(�x�qA��k2R�G���������He����k22�G��x ����y��KY|��'�&��������'_��
>���Gd\P}MF*�(;y�49H|���e}<C�M>�t�x��{�<�Gp�&�g�G���.P�x��{�<�Gp�V�g�G������L�Q��3d\��#�@'�g�G���.�����Hy��������g�xF��\��	>��xN��gH��08�!�)��#�@#�3�#�Y|h�x��{�<�Gp��g�G�Q��Uh���}H�����
8��lLD6&"��.��
�0Y�l�vU��M"!�������	>�z���q�<���G�#�����He�#2.hY|MF*�(�z�qAq�5���l�<"�A�sMF&�(�d\��<#|)+�������d4q�@�=R���k2R�G�����J���He'��&���5�����g����Gp�N�|��'�.�
>��x��Z}(p<C�=R��#�@+�3�#�@�sMF&�(��2.h�\��3�#�Y|h�x��{�<�Gp��g�G������L�Q��s|<C��������Hyf�9�!�)��#�@*�(��9->�!�R������<���jM���i�p�1W�X�����Dds��SA"���.�	��J��#G?��.������CZ�6�
������6��<:T�el3�ck���-e�i-�L����CZ�6����V��uahQ�L��fZ���y0T��m3-m�imX#��P�!���\ *��*8�<EYGh����-��i��L��zbh��L��fZu��y0T��w3���i�X'������i��L������CZ�7�������Y�
�o��x3��+��h1�L��fZ�V�g*��������&��:T�ey3���iaX9�u�@k�fZ�7����X���>�u�@+�fZ�V�g*�*������N��:T��z3���i�X9�u�@��fZ�7��=�r<�P����jo�e{`�x�����i��Lk�����CZ�7�������#��
��p��U�!d*�B>@�
x)�r��,D"[�]@*�mG��~�����mjF �t[9=��N!�P�b�&����Z�@���.wAb�v{�jZ	�s$i�'�V����NwA�����j��D5������(�_�g/�=���"#]��������=�z:�����&����^�(�v�
z��g�Z�&Gbk�M��y�}�V��H�*zS�g�Z��#�u�&��h�-��V���?{��
�:[Ko����V+Pt$���T������P2���$����k�Y��6A�h���uk�M��=�jr�V���?���N�"��:��9�<BG
���s���EY��g�}MFc�#��G��_��*>�.�G�X����d�������n���)ch�����R#qP_�'"�>���C�����t��l�vU�����/<8�)G�(�i)���P��\�@�(K<#�����h,x$=R�%���4Qv�<`���k2�PD���Hx��{�c��Z::*�.�1W5�x"�1�L?~	5Q\B�����.�����n<r�S�}������A�/��B1�g�)�/�h,x�)�/��B1�g�)�/��B1�g���5��p
](�ttT��������(����)j�B1�3R�F���C
j(�/�\xp���H��o��5��wL$���"�4Q�xF��g_��X�H(z�<K�5i(���y$����d��������#���-�ttT]�c$�j(j�Ddc"��~�j(���"A#[�]@�Bn@��#|���a(���P�H�s�������q��=R��4�h,x����{EA��i����4�^�#��^N�p�lk������u?�a��n��zE���M���m���zE�F6��_B��i�^���a{�a�A���x��0B�m�"�kj(:�_AB�-�5�P\�3M������h,x�)�o�������iz�<�e�F�����zXco���E����Bq�g��*��"�'"C(.�L�h���3M�F��[��P�����������"�k"=�OdI����i(�,���3��&����P�Hy��k2�PD���H�	����HCeW�#�%F���Z(j���4��H\�P�����Dd3��%�PDq	E�F�T���	s�8��}i,������~C
���kd���d�G���K�5��C���K�5�PL~2�#�A���Y(&?���zXc/����"JGGe��h2\�PD�Dd�D�9�]@�D�9��������'��9~��!�I�_�cD���F�����fBq&�l��v���xhdK����DP|!2l'"0.T������D�=E�����8��n[�=�m,<F&,��-�53��g��+l��v!���J������O�~~�p������J���*��!:�t����wC�%��x7���v�*��z7������VwC���F��4�����
�����1v����P�n��� ��q����n'���!���v����mDF��?q���+D�-nT�8W����s#�F���
K2�[�L5���6�,���i���]�F�*4�[����}��B�|.n#eLJXb����Q�6R��%vq)sb�5N�\���K����?����k�z�4��]�Z��8��L6�T��cI������@�hq���!n��j���W"C���5N��vq�����#���Vk$f3�W��5���:0C�-n�'�72��!"5��U���Pi4P�����Eq&�l��v��q���-�j���"C�
��.��-��D���k�����V+D�gq<F&,����H�8&f�9>���-j n	;�u`���
��m@@��F��NU��
>5P�5�����bq|(j��� �]�i�����B�r��L�6�P�@��B�{)�4n�D�����
Q���\��C������%�����q����.n����;F�S~UD��m�~�F���8D����3���*��|����(�d#��3�.�X�!n=4�%P�Z���Bd�[�q����E�����z�Sq~�]�j���,n����%�������3����E
�-a���Pb��f�����Fj8]!�nqK/�j��S��u��=342
�p���$�����5P��]������j8U��[���3Cs��i8U��[�
�s���i8U��[��s����q�]������5N���-n�>����8D���_U��
�����?��m����l��v��q��?��v-n�@���B�hq�-��z���/(��t���P<F&,��m��;����
[�~)��c\f(���0h��j���B�i�nq|(j���B��#�ld2
T�^wI�q|(j����CA�q|(j������L�6�@��-N����L��6P*�8-��@,5n������
��
.���5N��������`8��C���U��M>5PS�@����<42
�+p,�4n�E@
�+��m�y0�L5�
tq�h�Cs��i���6��{.�#�8M��]�&w�v�3��vq�x��c�8M���gxd6���P?�1�W��k�.4%�����
t��qs���L�1�8�d������D�k��F�9�g�F�_���
t_�p3�������y�`��?��\`G�����*v������v�3��v�����v����y�b��(��dqK=���+D�-n�-w�KZ+�:��6q�r������>t�q����
�;��M���.i�@�����q[��KZ+�>{R�m*���_��V���I�����]�Z��(E��"n��uIkk�n���=�cebt9���LX��}<�Zi��U$C�3��g}��<� �Y&��L�f�F����c��S�54yA�s�'���V�=��7��/���Fj:W0��(���Jd37�.D������l�fS�����������"��F"����!9<Q�Rc)�}C.9hd���^B����1P�gh�KHahd+~�V����Z��(�3��%�0��L'jj�+H-`:-`��dh�KH-`��0jZ�R�B���Z@�V�����hS����.!�@��R�G
��%9hd3��y�������������K��R��9R�#���0���Ox��W�Z@����i�j��Z@��>�i�j��Z@�����i�j��Z@X��>�i�j��Z@�Ep��4h�]Bj�P���O�nX��h�A#��g>c
RXB���>
Z�R4���������'-�}��������l��>�k�Z��j������J-�}4� �@#K���@c
R��}
���:KH-�
g��o��
������h����v	�Y���k�Z���/���W�Z v43m0��%�Z���{����08[���%8���g�8[����8����3\����y�����8�_���=�%�
�<����xN�kN\��X�GH�bI��	��W8�"J#0���_���{N�������e���������4l���?����)|�����O����.��\Pn���i��Y������4��R���$g������/T�,��ZG�v_�s�-�<i�'/�2�-&/s���p��������.�z����9G[m8��	a4�������o�9cY�;�N��~���p�<�s�6�S��Om����S�S�d�Ne�S��OM�;u���
�T�w�����mv*#���-g�S��rF8��[��������%{�S���o9#�Z�-gt�����i���3���wf�����d�[s�v&���]ArF:����f4z&>#�\r*�sK��� �������eM����������8�s��������?�,����sq�����];����?7&.�\����zF8w��������=#=��g��V�����=#���\Fzn�����[��g��������cH�]vZ�3����<9sY��g2����<5��.A��Fw��\�����#��#q~��}{��e�������pn��s[���6�s��Q����?�!=�|��������g�������O��{��O=i4���`� �l��h��20��N	�s���V'�����z*��}��Nm`t���S���z*����m�h!}��:j��>�w�8�����_�3`�S`���w-a���w-b���w-c����2�9�2�9�2����3�\�]��7���-t�s0 ��!pJ�9pJ���9pf����9s��9��}]���sC��}8�[��IF�@��r��s��s��s��5�s��F�)�-H�G:Z�����X�
5F�S�'�tV��gOtV�34�8s��9��gb�31G��-�����n`l�O��8���XNbx,'e|,'1@��2B��"�I#�I������I&C��?��������\Xe��Ob$('u(�O����39A���BN��`>�	:�Nb8('u<�O�������#�|r%'��p;�!���1a>9�tP�Or��
�������|2�t\����PN��0���	:2�'r�
��HN���#i+���Ym��tV[! ���-�.����Hg��@:kf�Y5+C:9�����j���Y@:kf�h'7df�Y3+���Y�tV��@/v~|�����@B�������<���
�Y�t��
��fV �5���.32�)���l�d6E2�"�M^�12��Wo���Y@:�f�����P�i-�M���G���O��S�bfK�b�)g1�%g1�������|�YLq�Y?�Y���gu*g1�%g1���2Bq6�3��rVE=�����D����l o@�qv%o@�q6�7 �rV�9yC�]���
�v9��7T��Y�;���
�;���
�;�.�
�;�F�^�����Px���x�
�
h<���
���U��g��8;�7 �8��y�]�z�M�
(=Z������M�����B����l$o@�_�x_�?M����&t������
�au�*�s2��>kh�d��}�����}d�>g�9��>i�$bv��������2�9�1������_�s����[�s�O������O�����\��k?���>m�^"�[h"x�i���o}�������\�$��)��Jn�����KJ.mRe������Q��352T~������UG���O�4��0������E9����('#
�����4��(������D9hXI��t������=����������s��������:������m���4������o��3����~�������t�wt�������Gwp����~����������������7g������g�w������og����V������w�����L������_�=����������\�Bt��l��������*������~>�����_���_��~�����o�x��K#�����?:_���l����������7s�����9�����3��o����w���K�i{��m�������������/��t+��w����}��.7���O�������;��O����l���������x��k����8�vY���������t�S�X�����c�z�u=�.�0��_���C��2���=v�[2��{�z�������w/��Ma��My��0�)�5�tZ���Z@��6����4L�xz��?�.�A����%�z��?�������tY�s��p|��?Mi'��E��2"��?�{���o���~��������G��k]���4��=����)M1��_����������>�el�w�>��������42*8���&��hi�y�9�16H���mD~���X��8gx� ����,f��_�Y�������K��|���~:���eP������a������;�����>��{|���������eZv���������K�����]��sX�Y�x�e�<s�=��{�U�6�4�]��]�~N{!yiO��������Qv�����Q�s����_-��/{����&�E?���T�
Na/0/2�����!������8�n��:��0����f��������v������_�^���������!eJ���sHY%���c��C��5�����%6�l����WRV�/S��2�l��88NoC�*���c�a����Ix��uY��:����r
�=O��w�ek�����p����#|}�1f���x�1f�|���({�b>L�����~��_A�������1�x��� C����7��{W�x���~���O���;
�2n��^V����-J�1g��}�b������s6u��^���c6�l�X����9M��/4u�Y��HK����_���������o����?y8<��r��|	��������z�}C��C���=���W�7X{����G����[�N��<��a��������_��o��|;�;�f�w���)������y�v{�Q$�7��7
����C���3k������4lc��U�.��i�c9L�^�`x�y�:����~�bZ�����y��C�>�&�L�KO�g���].{���v��g�Y��Vk�,1t�4i�SxM`Z-��k|���-��]������o�C��:�����d/D�/���k�|x��u��j����]���	R������-=m����u��k�j�t�6Y
����E���e�����N��)���:������}h�IW^�T����k�pOG��!���y���vC�����������>E+`��r��u<nC���lu��'���]��))\���3���>�hS}��#9�<o���{��*�Q��gJu����R�C���D��U��m]Z�S+K��}��%dU�K����������WXBV5p�������������	Y���<��������YBV�����&d����[BV��tn]����5�����O�f���q�%d���~	Y��}�K,!k����'V��5���y��5�;JK��2���y����|��q�������S!�������	S��x���/'�o�q�<���"9���t�J<;�3����0���R��CjI_33O�T���L�9�z(�v��Q��_�q���O-����i65��|3�f��A
2���^�Qo�Ye}������\�]2�*���.�����e��/0���F��iV���{�
X�Y5p������e�
?�q�{<����IVO�Z��hb��r}�4-�o��e�
��g��i6��kW��y7<�����
������}��,�l��{����j��|��l6��C_�)�w�5��kW#v�fS��.j��hg�}����M!��>��B��F�a�>����\�����2)\�y}:�2�\��}\��7�8I�K�������"�����f�W����F\J�qH.������*��q�k6T�����8��~Jm!��.�>�,`��r�����Y��q�[5�5�T��\���u������
����������V���,
;�nc�*�e��7���n���Z���r�Jr���������������m�g.�����/�J�<��4�j�A__;:B�4����fz,
m4�/�k�N{�?:��5��9�P:�,+m4��b����.+m��_$��XN��C�o�P���e��&����%u�6�eku������:3w�J����N�e�
�����3����rg��G>�S�R��K|::����e����/�c�rb�/�GpN�^��������q�����='b�N�	8qN�kR��N�����������)8N&���Sa��������=��������0�����~B�������H�j���q��8�P�/C/�SR��=�Qje����8���S�_��6��9�Pg}�\�f����?:��g���?oc���������2��k ?�y���u����s��<B�������Y���_�'%�y������qv��]uRo��y�V#���^y<���t����$���t�q��-�x�O�[�c�^<�=����x��j������n�������A����r���VS���f�d�J!�O���g6����_��?n��B�v^��a��'r��S�p{�gE���7��0z�a�C\��y*����q�LH[Sn�-W����d�����T.\�������~'Z��
�
91�D����6h^�5�rb����e�>�v�/%�8L}�k�J���(`�������]�n�q����d���o����v9N�����������12������*��mt�3��J�y���m��TH~[�p=�����}EO�E��������4`�����u^�j�~���eAy�@^���9���T
\���Z�k�"U_�_��y�F��[���;�4�[t� \��/G4o�i�%����/�&K�
��k��&K��6
zk�RWuy����_�r3'����z���Y���FK��%����;����F[�/��nf�p��]w��������I�O�`.\@)|hfc�rM]��an�qy���9 8N�z*.`�����+�+no���3e�G������'��T�N����0��v7x�8N���8���0V`����PS�n��1f|�qy>H���~<U`��dz�9l��)p��Q��9 u\���0T`���5G!W{a���R���9 8n�o��)�v8N�������no�q2����s@��'�c���e�i�o�+o�(0%4/��r�SBU���|����H������2z����c�t���Y��<o�;�a���m�?T5p���=�l$��X����j��6k��/�u{M�gR����u���Wem�oM�^��{y��e�f����]���������y^�j�����O�7g��l�z�����O���f��;SS^��I�^}���O����m�o�O7�h��o��L����\�m.(����sA���B�����r�L��1$n�^�����</����^'��az���8.��~�*��q2��=��L$�w�q���TO��{������/����q�w�8����2��Sv8N�����o����;p�L��5���P�=��B������+1�#�����F�z*�
�p��5��{Y-q�}�w�8����2��X�=�����
�[l�o�X��0�9=Z�z'���?�����6~�j\���Z�dP��Cg�k�A
x�������:�&6T5�e�=��z�������Y�e�?U_k�}�����&3����q���v���T�?�G,����?
_e���������������R��&��t�n��j�a{��{��O�����W�$�M�T-|�~�wz�����o�����0s#d��6�+��0�$�<M��z�qC���!�\��	TO���q\��iA����v��8N�r���))\����Nshu���
9.��q��6���0V`��������v��1��q2��eOI�v8N�vC��m��Vr����q���P�=������C�������0���S)U`��dj���<���o�q��Q���!<%����,>�������e�O���4�P<Z���x7����?�.����?��U���+���k2�;�Tg����������Z~d�������m��i��-����������7���.����o��a��}�E~����I��*�����D��n[OW��;��*����9�fC����m|[�}��m|���'L�k2�V��n�~����zf�N�i7J{�Y�v��������[�K�����?������R�m=v�-��N�q��n������������~�s�;�����:7�
a7>d�����2����K?����|�{�����s������9�l�����W�C���zz���t^�
=[�W����u������ S��u��/o�����C�#{c�w�k����n�c�C<������qQ� E�����3���g���<���g��u�c��������������?�-�k|���vK��X������uv�����Z�����Z��G�������h��u�9��h����xt_�����������G����(�f�R1��'?{�A���Ns�������u#_K��'�l�:1O��7�^�����m&�w��]�(k��LC���Mk��������~�2�~����� c���u�]���Y~��z������3��������3[�l�}�/��|��c����������h.�h}_a�\���z�o��4XO�Z.�������4�W�B�����~�Q���k`]��������6���������������5��md���v������.���f�r�f;��Q�{_�)<�w�2�w��	0.�>���^�q�k���/s\����S�p{��3��+�x���C�)���J�;'Yg����W��<�q�Z�qN��X�=���fS��>�r3�{������+b��iVY���,��_�,�8��4�4���2���f��oa�iV��wN�Z�Y�����<��L�a�������n�~���R-�l�R��L���>Fe�f���"-�l6��l��n�:����G���l�4w�W�{�i6�c���4�-���k�i�������9�4�m���6�4����=�i���;<-k6������N������(L����g��L3��������->(�������P=���q9�����l�����R\#P=�Rv8N2������F�G8NRK8.��~�����i65�j���q�[5�4���i��L���;Nu�f������.������e�U����t��:���M�w�t�e�[���jV
�o��t�j��f���m��w�t�n�K�8�R�z��M�����nb=k<,�l���%*�j6X���u�������%�;-���=K6�M�K_�`�f�����.�l4�����p��u���l6�Y�K�.�l*Y��[����nr����������*P
P
���
��8�1'i3���~<U`��$�n8���t��'i3\��z*����E�t�7�T����6�k��R���I��b7��c8N�f8.�U�+��q9�n���������5d�i��xo]g�]�nYt����X�oW�tf(�wk�>oE��,�����{��M]5����LdX�0��s"����������]M��ds�w������>Gmit����7cit���<o�}[��X�<�%�;M�k��%�;m�/U_w��{}"��t��=t�g�D�����]���m��u=��Dz��*�y����r[k��f�5���ti��#h��#��s�J��;���&���N��0= ��������<[�����l��v���8Q�
�����T�N���!��O
a2����&C�T*��qy����o���n�q)y�a�@\#P=�Rv8Nf��������0��T�aR?�
�q�Q{4r�{n�ux*3�i�
[:g�����A������c��}�������c��e�^�h�~�2�p=��&:uP7p��Qt��]7�E��wx_7����u?����=��S�Vv�����A�����}i7��E�:y���z����A��}�K�u�`��un���}�^������v������,��;�O�[-��;=�uS����|�d�j��Q2�o��'��pQ���Q�t�f��
8NF�p��S�p{�gB�]��{7��0z�a�C\��y*����q�L�^��!N�8����6�������<���x�&#p�Lw�54O��v9.LM�e��z���w�;�5��R��=�[D|���[oB'�p\Z��r�v9N���q�������:��L�T��_�LH�U�w�N����Z��S!
��Y�M�4<���/��<�v�G
�TH�����w��<���_���]�i,�?���*N�d�M�T
|���z24�
i4���M���nfW�����M��4���k���k~���~��&k63�ls���Z�^���Ymf���:�^n3#�f���K63�lw������F���V�f��I�y���p3��p��(�����6�gq�8������r��8.O��t�7��Xfq�qy����pV?N��8��i��nx�����q2��	TO��{��|^�e��8��Q��9u\����T���)��D)S�r\�qy�G��z*���,>;#��}OMfq�8������R��������TU��Q��9u\���1V`����4���7;;����<a����;�Sg����L�H�V�/?�z�C����To����$�6��0��s�+��i�.S2�s>U_��T��i���x��w�9�������o2`s>U��w�eW�V�����e���m����js6�ls}���a�m�j5�����N���l���_�7��fdl����:�Kl���������O����mPhs>��w��S�4�����l��|�\��R�c��U��C����eJG��	q�@�Z.\�'����������'>p\���q������N���S:�8L��k���X�=���?;�v��v�9N&|�����;'�?M��~����d���P=�
�q\��(��
/?�)q&|�5�S)U`��d�ggpu���0�������~����,>�1���o�qo�R��0�9�[����e�����y�/�4��F�k��vng�>
��I����m����+��O��}����j�a�S��"�����M�t��3���o�+tL�������s������s���0���T���l������G���fC��]u3=;-�k;
��i6���n����~������4������K�����^m��q�N�&w�M`���.�4�\O��^�N���d�F�0�#l�S�p{��wvz�[�G':p\���.`��d~g�����51e#d��6���0V`��������v�)8N&t���))\������H����0��dB��P=�
�q\����������0���S)U`��d~��!�M6UL�(�B������q\��H���~�(�c��������%e7���P���B�8=�������u�����?�������������.��r��Gvo��������sXH���R3/q\Z��L|>������`�r4a�G����5���pNay�����qx���$=n���`������~��4�=v���-CN���;^�H/{�����.��z������4-�������|
����_u^^�?�.��~�����2�&fN-���3�2��'83�w��6jN�:��J���X�ej�C��������?tk�.��1��u��wU�v��:
���#��NC�v��W�v�9�V}z�-������H���n��+~���J����~]yy9�En����E�m���`�h��{�G��n��}�6��7C0q���C9�N���_J��=�c����M���w���N��~�nq���/<��U�m���n���~��7��q����������?��[��p_h����/GS~�=�������[z�������n���������r�f>�\���H�:'nm�w�=�c�v��&88rs��w����f������]�hM��?����9:7q�s�A�7qk�P�����������{�&?������Ge���M�p����87q�#?��C��x�|�Y:q�����d��pre���&nm���'p��G���m�=*�*n5r��%���}��G�������D��[���h_h��w���������a�\�B�{q�p��[����hY^���v��>�q[��������[�]�A�Tq�!���C~t���m����� *np�N�v�^q�����%;W�!n��t�N5���cl7��{���������
�����*t;�?�>9T���q��n���A�v��+t;�_�N����^y�����P���8_\b)��~�N9k�������r~�)g����������{�h��*y��
��p������|z�-��_�T�l��������m���L-����jj�G��@o7Zz���+����%�z�������37��{���C��@o���GL���E'n{W��@o������*n5��������/�hZxM�Aia�E��#7�k��?��%?�r�
�^G��Z�y��+;n���C��{����w���^B�,������H�k���;dqm�w���#?�+:��#�^s����9����~��r�������L��ny�9�=�w��y��}��M����������{&nm�w������
��w���d��%VG+���)\����M~8�2��#?�N������������n��;���w�S��+?8�4�k��33�k����=��rS�6��e��p{>�V�=�t+�y�S��h9H���yg�i
���?o
�����a�h������$��+A�)�uR��z���mV&�U����du���[LVw�g&��N�]������;�����^���r �;>?��du���v/����E������]���ev��WN!��W��8�6���!���B�����J���8qk�]r��m��7g�%�}��J�9���m���K��K�}��K���o��p/n�����=dL��~����-&nA��&���m����8���w����?�\�m����+D����R%�{���[��h�t��G������B���y��-�~����.�w'�� 7qk���3qk��xr���G���o���;i~@+r��Wn������&np��+��p#2q�kD]���vb����9�����!s�#?��8q�#�]�W%��m���3��K�]��K~�/4q�#�}�����m��;s�#�]���n��G��I�G���m��{��}D#2q{r�[���X��}/>8qk��C��G��K��op��m��_������}������w��y���}�������B���)L��\������/�&tA�B����b������k������J����	��������oU���]���	��_z���K�����
���7W t�����}@+2q����,�#�E��#�U�>���}D�/����)��F���.N�qJ����������~:�k�DBW%7�k���K��~9������_�un��[���{?������5XB��-�i�D�i���{��hQ�y{n9�i!�����U1�������y��S����;';��3����B�G��X�J��W����t't�K��r��[������������iB�G����EK�����;���Vd��n1q��F��*���=�>q[?`�*�{=��!���6y��U��Z
�K�����_���]z�R�]������K�v��R8dq����������]����>"rL��T�����8�����n���D�~*1}�~*
��gs���������M��c���M_���?���KwV�w��/[~�_L��������������n�-�[����;���h1���Fdb�w��Y�����U?�_����U	0�
endstream
endobj
8
0
obj
26573
endobj
9
0
obj
[
]
endobj
10
0
obj
<<
/CA
0.14901961
/ca
0.14901961
>>
endobj
12
0
obj
<<
/CA
1.0
/ca
1.0
>>
endobj
7
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha0
10
0
R
/Alpha2
12
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
11
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+ArialMT
/Encoding
/Identity-H
/DescendantFonts
[
13
0
R
]
/ToUnicode
14
0
R
>>
endobj
14
0
obj
<<
/Filter
/FlateDecode
/Length
17
0
R
>>
stream
x��S�j�0}�+��}X�$�-�P�|���~�&�V�1D���o����l@���sr&L�m�T�vd���U	#kZ���)`5�Z���V�����lzr9
#t�i� �X�����&�z�}
wA��4�����k[���[���EA�3
�z��k���.�������?��d�q�c2�z
����� �"�r�=��`�U="V�P��m|�������:Q���`��/�3�FX�}�/�6S��q��� 
��|�0)�E����v8�I�I2$"J*L
NI��\���	�N��"����kd&���$J�sQy#*%�F71���5L�����pCm'�F���eO		�������i���9?��zp���m
��������
N
endstream
endobj
16
0
obj
<<
/Filter
/FlateDecode
/Length
18
0
R
>>
stream
x���	`T��8>3���������d7��l @ ������ � 7��*(JP9��h+��7x�bI-�zPhUZiUjA��k)�@v���/$�����_�9��k�3�{>�@!�@��C��[������o��B���g��`y��P?
��Y7-���V�"�5 ����S����
B7��=}fC��"�����`�����T]�����~��iS��JB��=U��O]����5"��8�>�p����G�����9.�EaH�e��P��W�N�2='s���%��n�&�6����:��������hjA�FA4����E"�-��1����8�iA��Y���� \{��E���D�����HC��J4
-@�a�[�d�9������B����y0�H��"���:���(����`�[��?��p���	�9~�����F���h1z���qfV�� �n�>�h8:��H
�>}�Cx7��|�9s���z4=���*|I�3�3Q������v�����bU8�y!s�Q����~���t��t-@L(uC�pf�9z�I��@P���)����P/4z�2��%�'�~+���!��py�B�
�Gp9�'�ndy�[�dxc/�MGs����?�)�����<�*^�I��`F��O�O�/�#��%�n|��$S�O����-����0��|�z�{p?<_�g�x-~?����$���#��w�ln�&?~c�%�=��~�dzb�@���fzg����������ad{�!�	�>G_`;�~q������?������o9���������O$Q� ��K���6�c�9����/.��s)���������������G�C|��[�(<#l^�N��t���.<�^��Y���7���[2F~��@!�@���o.��F����C��"�_��d���x^��?�_d}��P�=�����sRE������ ���i!G�9N�����s��U\=7�[�-�6r������Y��2�����|��������O�_�_	�����"������H}�+�Q�h�^zH�%}$7v��D�Q�?|�[�
�v�I&�!�|���s�	`*����;q)������t�/X�M�!g�e�p<�EsI/�i���������x�2Q�w��Dm��T�;���S���(�9��g�y�)�27
��M�
a"JpO��q���h'��r^^x<�|a���2�##��rA��y����:����B�
�}�^��&�,��~�.��7/nA������|�^\�=)~G>A��C��>�^��"?�����1x6P��h
Z�Y�����Y��P!��
�7��r%p����vu�>p%7ZB�9�/��x~������_\�7�EGZ�,���� ����&e^BOdf��3�����fV�7��!��N���\����0a9$�t'M�2�l�:��BB_��gpp��j�����������%�a�@7�k�q������6T�A�e�pa������3yXA�37��hzQ�T)s����� c2K��9��
&@��?�������������W��[UY��W����R��J��
���x^nN,	�����1t�KS��C�D��Fe��C��E
�|Q�������Th�����9MC�^�o`���^i��3/����4;��z��t/�N��J�[�������d]���g�
��A=����C���qC|p��[g7
n���T&�P���m��N�5�����UHpp�m�t�9�4�9�D{���:�y����E���e�x�����(9���b����5���f��&>����V����UG76�����S'Ol����w)x������C�����v>������aS��x���;�M�������!
MC����C���mdu��f�^�#����7#9��4��7;�����6��D����������'sE���ML&�k�����b�|�i��a3�z�{�6������VT�seF�9Vc����1���G�k!�������IS?������������]��aF�4;64��i;��Y(���� ����o��L�����?�R<�@58o��S���R�"�@�S�����{���$�\�����Q��u�������[Mt#47��h������,O�5�z��>�O�4�g:noH&� �������n=�<�3���a�:69t�����M
Y����:���\���8���l�D9v�rr���`����?�!��VI�d-8>�Yo�����D�ySk�4��o�v�����e]��tOm��� *������t9�f���l��ML�6��@����5�����h�	 H/�����].�f�u�G��{�`tMMC��!M
MS[3�7&�z�iy����pp��8����G����X����(�-����f�uc'M�����n�����
�����{�����V�H��
�0��Df�G��5��<k`��Z1bm�����Vb��v�6�j3Y��<f�������d]w�F���- ��%�F�(������.�:��<E�H�&
��HG��J�#�#����+v�g\2��!=��q:�8�5���C)�l}��S��S�����WO\���Q��O�
Q��_���G3|��U��/O�p*=z���=�~�p]��7�L���]�?�TKH�N����A{�<�a([�3�
.��]'���C���*�[4�U�1��B��]y.�z���c
�.��7����"�U@���}N��//�}��I��G�c����ll�����G�M������?���}��;��b+ea�������O�?t��	m�	��|�q����3��S5z
���~Jo?�
Ou��U~�(���w��Q�����<���������{�����r������[�	�o�������OY��{��A:�`��j�,���A\����j��������0����r��a\
(�!�;��I���������\��9�[�[+�H����PL����-���7��	��|�B�dq��[U�����9`���9i�X�cI�y��:i��
���M0>&����\�i��Pt7�H./�r5-������h�0�J[P@U!Wi*8�A��Pt���O:O���|b�o���)�G����Js������l�a=
���9��$$w��9���u�u�w]�Cr��`�0�����q�����1�y�<�4�M�y���rr�x��v�Z�qi��n�(9"q����.�-�$T�o�`����)��a&��=9ta�W0���
y��EO2m4� `�fn�#�o�H�W v������`���S��j�"V��/B�������R�J����OE�@�'&����z��wC/J�K��yn�u��s?|������b��-w����|�y|�kSv�3G���/_|7�i���N��=��9k(��w�NAG�A��s�+l����5
�s�fT��W���2��H��J�{
�B��0�O��c��@�k�`�c��b�sn�)����%�
@�}��>K�q��v��5x5
�F��~H��oQ��F5�'����IC�*`�|���{�����W����U�M�^��J�\��$�
�2JFn�Vh��0���������k!�W�Q�1V��t�:�r}B.�� � 7������L�JG��J�0U���<� $������4?��)��ji~�7%?��B��!����m�=�L��K���h}�vx�5Bq��A�?��R$}}{���2�2�
a������nL�F�S�����]�{n�����99=Q�;w{IT��9z�.�<s�x�P:`�#��.��{��/����O9��\����c���V�IG�h�w`�*6�*6�*�P7S�?����� �P����;k����%a/)@y��m����	�MQ^�������T{�q�Cq���)�fK� ���z\�8K���DQ_��>}�*�������Z�x�B_,|���6?q��O�=�~����_~������~e������9�GO5y}���_������(N�|��R�ebL�5������v�C&��PaJ)p������(���1>�[L��%55= �Sj�KE��pyQ9e���y�kkA����?�����Z?��M��Ah��5?����5��	����M��-����|�E_�!�1�s����0��9�����(5\������&�M�R�nj{�=�{:x�g����8��(��%�R��T��TZR��vFEz����M�*��=���m���~ ��Lg��P���bG���,?>���`���)]��A����,��\��:�^�}�3���vTm��"�%��&��=:o�������8����;g��%�����7o���7�O�E�zbm��+��=M��9��{���|g���S������m�|I��p,]�|[��� 5s�|��G�0.��a�s����,wX������%&�d�j��Y.�\d����X�LTg�O�[�wUa7L�1�y���*r��89	������>��9
U�%�
��A��d*����������A1s�*[p(�V�*�2�Bi�}MM2���Rc�J��&������'�7�{�r|���t���l���2���3��k�/u&6�35gk�j:���k{�x�n���=H�S
��#�YQ��w�������:@������ZmU��E�j~����w�������U����'
��dc����?z���t��"����/��V�h�<�'�~�^B������������SR��v���AZ�2���r.d+4����h���E��!6��"6�]����/���\�?��"��������H
��g�%�0�E��8�������L���	A7��F��4�l�����zD�cTvxC����)�t������������r�\^����1��#�kX/.����N�v��C��@����1E_����y�����S	a�C$d3����g�Bn�(P^��������ue.]�K=�b��08���_+�H	�r�� &}�"��.E�����7�Op�h��'�fX4�M�7��������ly�|��{���ay�g~�����<������?��o��>��w�~�r���_~�C9��p{@�>�`c�f+qZ�])��(��F	�>a��!��q��(�I�^�iyn���`GKrM
kh1Q!?��)���.f���A��T�I� 3O�Y[��G�_��UJ?POq���0$��A�A�I�q�y�ti�<�3=�T�%�Z^;"0�8��b�g�t0 �h-�NH�Dq<O���(�@?��C�;�R�f�S��v� *�1���
����J����O������8[?����:�1�\�bs[q��_�\\����2(��`��4�J
v�:,
K�uF�S�Pc����3z)h���X+���D%��j:�|d�}�\��Nh���*�f��+��H��7�������9}����|����#�������~�kn��=���O����]����P�o����.|Z�J]���o�
�
�- ��4��t�0���;@xPF��`��jK8�P@�d:G"ny��oh$ ���B��(����L����gN���Rk���T�6�-��[�����d���Tn�����}�{���~�����=���|��y�������j�(�zrC���m�G�BY������r�w���n��������g��8���n6�ug���rv�����q�'�uG�q7�����F]�N�.��Es{P�
v���'�+
%�-�j�qpf����GP�t������g;�8�*�����J/��'�M�/��:��r������uD�;"Z9�|n[�g�O��r�������N?�:~6����_���������U�-pM���/���=���N��_*/r.Vo�n����z~���y��F{ �������c{,�E<^N���"�S���*�
!����i����l$���Ds��w`�^2�����R�&��m����1r�n�n����!�`B����	-i�0�Jf��v���,`'��mC<�7�����;�lc�94�t����S]��H5�,�ar�~�"���?*E�.*���ZW��������s:3 <w�M_�o�z�����~�I���7��7{�}3g������6�~����h���n:�����u+;�n_a���/�����3e��{/d�o�R���l��q��sAn���@*I
���dy��t�D)t����Z�3�,fy��L%Ktw@��}-O����=�������I���Y��!K���i��"x�`n0��2�R��\����\.�13$5��c��S�N��T}o&%z������SI���:�:qQ�3K��g0��/o���K^U��Efe������>p]r&wS`~dV������#��>���:�e�l�{y�������")��bh+��������)T5��W�GYb��v"���<�|�l/O�^\����N
fz�i�vRimtU7�Q
��
�����Q�l	~���� ��T:I���,u(���F��p}����Z�����Ji(���`��"�����g���S��9�����]���C�����{�(y�����oYq��x�~���V�a��0���O����>�Uz���s�?�u��� ��33_	�
�����idn�����w��Bkq�[����9����
�I�U�Em����F�s��c�<9FNW*���x�U��u�	�����;<�{���p=��_ ���]^�C��Gx���^R�pxpI��F����Esy�^����"yA�|�l6�
S���2����*����6�i	�9
�SzT�Z��L8E�������'������|P*�@&~����oy���/O�J��'[������.�_�����e��/�<�!��;�|��N������}�#���{���_��Q�>��s��/
��,I��s	&�#��d���\�TJ��k�J\#JD�l��a�`�t��6�u��e4�*Y���������E�<�
�����]����j��N-g�3��5H��5`L��Ya�U�M����R>������}-��=���:�s��l�I�c�0���$�$$��e�t
#����r���:���^H)���l�>�p�4���c��z�L:[���
�f$���IC1�A�bWP�� )D��!���c1���@�;0.*.,�:��fAP9k2�� �q����8�FJ�eY��Q6�jT��dqc1.�a �a �a �)�+Xa��0i����]�����g���0����y@����USmy�rs���"�p��"��_�W$�E�����@�7��q	�����9�	�3 �u$���1���ke5��ts�U]�,�z�2�D���@g}
n��P���?��i��G���)���q���o�������:}�}
�[�d��G���Y�?���q��{G�{�@����}�A����|JyX�N�63��W�\�C��V�"��eA��L��L�S�`�$.I"uV�����T�C���"U�J)Z��N�X�F/q�	s�	s�	s���'m�]�_ ��E������p\�q�Z��Y]����n6����
;dK����P���
hR��"��z�]���D&�Bv�������q8�6��Db�'������/�r!.�r8}��V��y���2BW�v����������=����U&�2'�*Ck�T�+��a���zmB��/G&�>G����C��	���5��76����M	��;����.��E���A���[������1u02�a�Qx�K�{n@n#��R����6UL�$�y������D,0r98����^D�,�)���pv�����8�u��m|��z���)M<������\�T�R't���v����K37hAE��`%��z�i��r���p��� �S�#p����W��E�r���|�c�����.��(�mk�n�n�T��/���$6A"�9��,XN��L�aB8��.fP2�Pa�di{���<�� `5�x*�,Ta�dd38}����A& ��S�J#���XDM����3la����L}'la25W"��}$*���k�_(�k�k�\7�P+sM���o����j��r���5��I�<\�R'Op���f�eI����S >A 2�=��:�=��Yv(N �K����i��^�i��v!.��^f@u(
[BP�C�TW:�s/���pi�����83�a����Xo%v���Q�#�w�5�i�G}M�����HX?G�N���Q�3���E�S�h|��;���E��hh�s������&����y��#�d���u<�Y�s%p�r��������+Q�*K0o������}Yugwh�z�Su���E�TG��8��'�C�$6�����p���7���'
{�����~�]87��|�|����@{�T��P��7��>_4������Ag����z����(����H����(Lt\��7�x'��&D���|���\���:~[F�m��3���(�����)�I6��,�/�|�PZ��K�J�ZF����f������=�]D����4$v��pl�E��V��;���_
�WG�����#L���q��J
7����>��!���w�?�����8�����}�7�����|����/���������~��g��������	����}���i(�N��3�y>2T��^���;U0\](��R�
�.+����I���V(e=�h������H<��_$�1�id����������m�>B_d�6V[MgR4,@���\0ZH"a@��S�����I�G���H���w����������}�^�g���o���_�������k����u�a���f��taO�������<0��d��rPo�vi��
���8�
���H%��w�W�8��R���l	���#��:�����7��J��������������e�����:�c�w����+�<?n�}��6���%�H@=4�B9�`$��=�F�O'!D�|������sm��������E��D;�J������L+)X��x����� ?D:������"������e�����%���P6<�r�,��R�pP]�"%�@	�#����*?�"��j������\/b<���������p����U��>Hy��Y������]1��$��2&b2O_�Y�t�����px��a�3o�����������8����=��#���#9�#nI/���]��)���U�]~�l���}/`��>3�"���r�����RE��J�AK5hM �<G�VQ��d���a�[�cRN}���Y����d�(g��{[Y�������-%�>Q��Dg�
�$������Y\dmVQ������b%�t���
�����;���z
@���� =+��L6��6��tQ����n,S�b�D���U�p]z;�������E�'�������r��~�~ZW���W�x��D��f��c;����#[��@n�
O��hv��I��nR���U������;�������d�$�8�,<��+�s�q�����./w��������o���G�Vy��m�]����O\G<_�'���/=e"�RSAa�4w�4���a�dUK���>=����u��."�!Y!��q��	f--�f�(��[Q8�z���iX�5���:aF���T����N����#�!G4-�r>U�����j��"�����`$��*Q[���qe���pJ+n�9�<C(_��"���(����p���Q��+�l 5�L$<��>t"|��T=TF�1����|�0��NE�����^��kj���8p���K�t #cN`�p5���V{��.Z��
�.E���h5�}��U����X�XIs�5^O x���������=<�LO�S�I\�QN�����5��6o�h�@��Ju^�^�iHa'�V�q���A-���E	;H���V�&{
��������Cy�^��r��<����Q�����/��8�W��Mc�:�nP�J��9�%�,g�D�`&���bxT�cK����@{|Vg�`;��a��[�����/S�Gc$+;�s�ep�W;<AJj_�.��a�8�9�d
1*��yT��<@|r�R��g���l�g"O�Z�%�(:D�����q���@�DGyK��rq�}�`Qu��%v���	f`:0OW+	��t�1�F�)�@�T��3�<�pz����l!h:U�l��,#%�]�+���aRnyJo��/)�������F��d�j�sV[�:p`���� �	1�Zd���{3g�9���u`c�@���h-CD�l[�
����d6o��W����opb��7�����|nxz��K6��v���V���9����81U\�HD@a~��,T>�e�}�%=����Nvm�$��@%�/�l�94GiX��v�JK�8����/���^�/���)m������d�'�-���v���pZ{)�J���%��J~���D�tu�.j��=��`��<{$���B����j������	r]j�<'u��V}W���������y���2�;�M����+w��r=����g\[]��8�}+�$�s�k{/�3A�l]l��%��0W�"[�s�b\���bj�2�L=���$��u4�X������S;[�?�Dw���R��Xa������i�r��
�{�.fXfSs�DE=�X�
l�^�J�7]�&�W��,�Z$TS��"��Z3G��fY��fkt�����m�dS5��a��<�� �����*S9[w*g�cy�~��H��Z��>���� >����6��G15�-����]L%e�b�W���Bkm�W�R:0L�~�V*S��H�8AM����S���Vlq���,?�N��&�����B�zE��e���b+��
B�)���&�8QrkA.�j����u�UK���wt��n��������[��(����x`������~�(���C^]=b��K�*7w��nQh��C����Xv������OKbz�����y�m���5�Q����w`AuU�`A��k�#yy��������
yboM�&2,0,R/�k���"s������7G��>Q�����~�&���cy��p\(w��z
�nS�%�����?������Ec z�����!{�2D�~!C���N�;Mg������Xa'��G�5���u��������QNt�i�9���s)0'�����Q�<�8xF�ih��cH�Y
	i�x����i���Z<s�*��n0������f�T�����Q}���6�4@��Cl��G_���W��l�0�Zl�Z������]���#�3��o����E��Qa���
������/�)����-����u�����}�H���o}��[n}M�����F>����w�#?���������f��FeNr���F���� X���9� �`����S�g#�*]+�����-�X=��9�P�wb�_�)�$0����=@�3�:����c���M]5������@���X��`��!���I����*kae.���nQj��K�N�.e���5�_����^�^���������W����6�c�4Xn�]�c�n#��"$�w�Kf|9?�,�36W��\�p������16])PSL��L����a����j������������I8O����b>+��&1�$Y����R�h��c�B�N"���Y�k�:8��]�_l/���z�q�G1�j�v,Z1r�l�NvI�bS\����~v4������?�m
�������� ^�}�`�5LVm}6:��_~x�����\�x�<g��B!�V�Uj�4��W���S����f����4_C�-�#�c��������`�%����P�44B����h=�I�6������]�L�fi'�������������8%���0�v3�SA����l
�}AW$(fHP���
���`4��(�Z���P�`0qL��!R<7�2���G�E�������<����R��n�E3l�H,���_:$}.e$���H��r�0�'�Zt�p�)R��L8�rT'NC��H�`.��Fg���9n1��.��)NTQ����`;�s0S�V~|����i�X��=��-�����e��yz�����\��+�������_�}��T"
��������C1?h��B�c�s7OX������O���Z���pW�'�9�����?�+v�gx���h�����T�����2q��,9�Q��`pT�!�0�b�
�&��:�)�K^�Tbs�6�M����B�������5Al�?1��f��kT���g������Y�Z$�.�U�r7U��p^����,:��b�:�u���^ ����\[Toq�x�y��y�xE��8[1���U������8��ef���08a���/�a6����F5��6[���>)�B�p����
{������w�����_8�l_=m}�Q2Z�7��[����-8d��K����������]3p�K�Gs_&��R�+���|e�B�0�`���	��9�|e�jg���!�	�D�l�9�~W�dY��+��o(�T&�I��V[6�9$1�����ns�i�i�����L|����D+��R�JL4�q��	�F��#�����.�bnep~LU�����[���7u�`�M$���� ��f�!�����%��w2���A�h�3k����*���Ak��U���w���pn���<�)yS�n��wr����<w�{$H>k�-�n�3��w>k��7[���W�����	�.R#.�����������Ng�^���H����E R��@��m��h.�5�U��.�9s�����w�����<}�o�w�K3����_?���+6�~���#�{O����~\��������-{�+�m��~��/���!�����{P��d[��!P�Wq�������peP6T��	�c��s*�-T{��W�,e��B�Y��2��m` `��u���G'�A-*��3����9��I��������Jv���]l�vD�r�n�}*��da`S�9�	��cS�cS�c��+�b+t��i��;�{�li%�^8gi����L;�x{���KaF$aj��U�B��E);�bQ�LW����X:)�B�����
]�����bD��P��d��T�@�o$
6���X�rW��?�r��Q��^��#�/<�>�<�������p�u0�54.I�e3L+��Y�,������m�^�7Y�i�,V��`�r���3��j�U�v{��U����X���"�%>��`{���`W����MH}(�G:6869�m���r�9:�d��92%�����!rt�������(��"J����7��|����<A|�?G<o���9;�<�~^���},��r?����g�T(*�#�K�`q
�`Sm�������;;��y�*�������o����E��R*���,�f��u��.�����4[]f����y>���t,0��H�������*����*����X�[��>�����<a��(dhK!�En�I���U�� ���L{?\���N������L!�ii$��K�S�F�]���uLd�p������ia9/�@�&�{�7���Nk�V��+96�bv%jW"v%���d����]���^C������������]����xmV���]1��f/��v�:|��N���?�w�9x".|,����O:B������1�O����d$�+����M��0��
7���Jb�<��1��������F�b�2��y�{Q��z������i)�!k�pCG��/��D�ii�D��2Z������UQ��o(A�"��db"��D�F���$����?�S,�dKH�W��73�r�BK=��>& ,�d2�
[�����j	���)�|��f����l�fX�555�O����F�s@�K�y�|���o�[�o���@e{��l��.�n�,g�����[�����_���|���L�>lU���Sn��w���b�����������e�F=�p�'Y��K���fzN���z���+�i��W�iC>��r?�eB|\��|hXh��R]6��l�c��<F!!�I��V�d�����}����3�]�]��*:WN�"�^J�v�d.'SY��9G�(�*��E�t�,m
5��B|�#�������@��d�p���R(��F'���r�6�s��2"�v
t�YJ��ft9����b��S���h8Y�N�����b���"��]:�"�Y�k'�X��-�6<;JWZJ�]��e������}g�����W>�A�>j���f^Ca���m��Z;������Z�I	�W�W��:y�8G�+�������`}�gh`ph�0�1F������������������!
���8a�r�z7C����*�/��|6��l���*�^�D��e�#u|�Db�����v��J6��P�
�b0|
+{JI����n�^���W���+�]]\��>����.���a��9�P�a3N���qK�v|"^GA���~t�-��^j�f?7��x�?�����v��S�����X��������C/����[@;��^��W��;�v���S{��]�}�����?xk����v7������_��tvmz����\��\�������:_o���x75����;g@������?�?zm��h�|�:989:W������E���>
}�0���x��x&H�)=�����C�k�I�	��r���pq�u������\a!�6B����P+8�`]1��Q��-�f��_Z��J({l��v���\�
��*��{+HE�5e9�,U!B��Gn���N�q��k����q���������]|��������gnq���S�k������\�_�B�Gf�;<������P��[�����%��s�7�F�^�y�������o?��p��������F�X��0���^��:��|%?����������C�
q2v�	C��d�����{I~��.Y�a��V\�&��itb�"#�.r�2���D�2�<W�O��q���b�;�����X��]�b���q�-M�[�~���+��^�\v�/�/zv���_.���aq�G����In@�'���d);a��t�moU�:m.?c��*I��oWv�n�7W2�,����q�cP����+:�-x��j�[��FB��C���(O��+���d�de�s�:Y�+�u�U�:��s����bwqQAqA�>��:����%K�K~�<�>R�X��=_P����P���WE�[���+I�R`W���!���D{�"U�?3=�����BU�#�"?������ps/�k�#�S�[����;�^�<���
����~�G��4}�r��=��0&������T2���2*1�19����K����l�/m;�K�K����p�Ep� lzC����U�i�CVN�:�����;�qzW�����������K�GR��]�@/(���U.������R;����E.�����t��>�4�z�(.�l������n�MzS�l
Y*,���|b}����aK�[�aa��������g>0���m�,l>�
ca+����Z3A�^Y_j���g:I`��S�G�K���"�Q������-)�9�El��m��X��)h�3fq����++2t���91_�G��D�b�;d�>8L��Q���T���%�EL�Q���P�����2�*��V�Z�:�Qj��_l����������~�)L������Z����������
��#��W���;��d4�K����G�����9o�y�|yl���.O�
{_�j�U�K�RW�1+4f����X�W)��r��I�\�����I��
�<�%���_�c�R����U������H�6s,T�aUS0��#�V@frN������E�)�SqF�;7H�Fi��#P~6I�R�tXY8y6��CV����ii��J6���=�VQQ51�]YJ����E!�g��K�{�uH��v�L
[�i��B�������Z�Va�dU���}y�m#'zdX��7��{���;����g�������K7�X����e�}^}�����=(B�(��J�h��i3��U���@�T�
8A�?T�����|:��@a(H
��b��~	z���#�$��W��r	��.��'4��� �\4
�L�qpD�Nl15Z"�#dadS�9���t��i�T�j�A�!H������c�aRG� ��f��e�]���s�:F��8`���7O,����k���b���KskD�dQd0Qx5�4��"j�������kj�0��%�>��������G���q���^��T���GV-!���x��U��>��T�?
3�^o�Q����������+�I��%�
��-�	d�d��9m2R z���� #E�� �!�������OVR��6��J�(��V�H��j���2��t�8[*�;��MT������/�D����yWI�J���vC%�"�U)W���	x��':f��d�<����o#��e����x-Y��'���?E�;V^C�)o���6�]�+�(�X��E9��(e0%�J	*R�*#��8��8���a<t������}�1�@aA���J��Z� �N!�i
`�`�`
���2l��}I����PGh|>��#
h��L�	%��!,��X��M�t4��w��NSh�5�'&�w~�;���"�����H���zk���#��������e��.�u�VNWxi(�����o�����P��=�����{g-w+Ygyni�n�4�0eB6�Y�[(�����m����K�\�,������
���Y����\a�� ��'����u5f�E-d�Y\��g#I/\��t�����1$w��>b��_y��	���gO�����1������^&�l�E���:c�n$+�N�Z]����g6h�@\�N���,�}�YNk�����HE�n@�������	�����JZ����x9�9����R,d1jE~�����r�q����q��t��G�v�~9�t�%*�XN1�����y���:�b��<�E����=:�r>)&G�9�T(��)W%������qW��4\������s�{�g�4]��Y.�.-���{��<��;J�F	*��]%�bO�����M^#?�=���7������h����k�����$�����x�s�
(*�u�
���9����vTq�y2dI.���.j��$N�j���9b��2Ae���}^QqEJ���Q&7+�&C1�N�51A]����G����gi{�/j�8A� 	E�����'Cw�J�5�L��������dx<)A�	���y.�\>Ms����Rd���v��<��6T����9J��@���M��)������F��Z������J�L����^`�4�A������������L��������('�}�%����/�2�d�|m�H��`%���\z
M�N�����[��'�2���9�\��-��;t|��{<uC�+��]���I�C#��;����@��c���������z�+�
���v�'}�v������������>#sl����}�����+��.O5*���{1~�Z�����Zv����e��#{��-'�bM��wK-_�e�3U����nycK�����q�=rs���$3�%+v^8�:��}�:B�����h3�����gV����C�-��\���\|,�,5K�lL�jg�`Y�!G��9'�=�S��w�i�q7����T��H�`$���y!s��p�h��g��Xu�o�{�����&�xI�J�f�������Y�k}�>Z��	�Y�)�^���y��s<s�s���[���������&c�g��>���f�>�
c��k�+�?�v�_�L,�f
�3������9w��������h��n��E����B����
$W�T�W�4��)���#���1k%�;���J���Z��!S<�=����r�|48��SZf\���T�Qj������&���h|��}X� ��^��~�x�~I�T$��b5��������@2se�����2��8�~,����9�;c�/�����J~�j�'w����6�:�#P'��b-Jy�����tc��T��'�W�.+��:h	����>M�����������+&T�gm�K
���9|I���Zq+�w��[��e��GB����/�����������_�Ki����v���>KG���W9��`�IW�G��::����:��w�iub���L��L~�n�� ?�k�t�0M�k�$�
ZA��L�5��}���r/���sH5�&@�d��C�
i,=�k��{��sX�M���aB���Qx���4�����6��h>�����K��{6������)8?
���r"?��p_�l�!=����$B{7x����s�@}�%�?�X����BZ��HC�/� ����u���spJt�-m�4([^
�Y
�k��8�����RR	y
U�e9��:k���A���;�������������MHIR�9��S�.M�\���*P#�� E!�&�|~��'���	0���3H����8����Bz�C���L;����A�����F�t�w/HgQ9�u�J��A��U���g�d�0�������?�ph
�����l8Q���*��1���"������yi�t�������;����k��5�i�� K0v���z?<�0���],�sp��cP����vbx�Mp�mxN�)RH' =i����B*�w#x/��p��&��
��!����5���|Z4�l�Y�=	�54/����^(�B_����4Eq�.~�cx�-'���h������� ��]R��>Sz�J�:(�<���,��]R�P\c0���5������B�,��c�6,:���xf�x#��M�j~)��{���F��n����`<pm3�#��
���p��%��4I��B��U������E��$������
�+�J�b�+/M��:GK�:���m�I���*��W3_g20�G(MH�=!����Cj��	~\��[��H������&��������-@�x��h?����8�	nD��c�F���d#�4x9����>������]�Kvi���%��Y���R��M6�����x4p2Le��L>���������|���6~^���.�O�R���d���M������S�Hy����Q>c_i���&�
�1����,]�g����/��|���LF�yYl�l�<�����3�����:����^H�a$71	CT�� 5(���Xj��U*������\��,��
��*U��}j-J����_{��\	�����w�����g������C�;�.�q|���cj�������X*���=�����?{T�7'�>1�N��so���S(w��"�UD~"��Y��u�
���X��0��D�Q*�<&�#�y,ZM���^���(Y��4i�'�0��d?�t����r���kwS���������O������@���(� D��z�a��B^xf�u�2���6�0!JQ������a�����&	{����J���6y���=m�=�w<�pS9-�E�����h_+�7�@�C����N[�=7�_Fy��R]a������c�s�1�(�u�}?�a�'����YT�^@�����~���;�~���Dx���	q��?��e[�mn/��s��@"
l� ~�#�d����y������4��`�D��(VI�_��Z7#�����A�&bhCd��������(����L���������D*7��Cf-�b���z|�3�-�� ����&��s�����r�4����xs.��\w��d"�	�W�}@3�ih[w������8���3�X�'�E!�j�H�^���2Ez����"������L��w�{�u���o�XGA)&��i+���M����'�:�k����ns�v+�o���m����M�a�
�w�2����X��H���,��<^��E��4����Uw��Y�5@���c������o�y�U��.�g�K���Fjo��:�9���hO�R�A�?[K����Q���F�< ;~�F�K56|��}WP�K�D���:�:Dm�#�Q�i�J2�������O����V�;�u�8���N��\[s�5T�]���4�1s��n�>��_����v�����c��4��<���@==i��a��@�� ���"|�a��2�3�����C���������:��.�\������429r2�x[F�Yg�u��}Is:��1��w�mg?x����K#�U��Ga����<��r�
���K��[�M��=�0z7�	�O��!!:�%�o��a���]i��+;�o�
�U��,��z���/�6�T�����������������|~����p�5���@v������a{��y��.��|[	�e6���5/�[�s�o-��lE:�v��&��R��L����D�}�5��%��!s�u6�lG�-������7a�"^���d���W���~��$�\"=Sy�/������U����$�U��9�����ID��s�G���i� ��D�u��w��|�4�/�1��[��c[��o�����aL�Q�;h��f�b��������<��0FG������m�FS�	Yu��.=�h����{�n��q�n�]b�����Y�l{�ui�����[��6��v�����)7��0������+
`������7��}�r�~`�l����An�V���u����d�.tK��gg�e�\���3�����l0����Z��y����1��<��a}i�U9�~��;�D�������C�8��C�C������g�v�"t����E4��u�a^��^kz
���@����1�o�������<^/�j���,�	���1����x��=�&������6T�����k��>����?%�u��u�h�9�
@�)��������W�������y������q/�zoy�������v�=���vg�������cb3k����qMS}��&��I��zLt�v8o��bJ�c�b�`������W��wZ��u�yj���q�w���������5�-�G�
�N����;.����l!�6��t��'�{x
�]�>\����Dy��2s%�
'r�[;M�?�o�}�:���\{�s�6��oA=��uh+���Z��w�����o��r���W�{G6��	���T��@��Y����N��W�c���l��)bM�iO0��%��{�S���L��J��
!\"�u���6�����H�F�t=�Q�'�����\5�i,���}�e7��H��S�9�f�T�hE��HX���1��������3xO��W���tJ��P{��F����}�2u�&��7�v�wT��(�g�N��!�|��k�F��Ih�*E/�s:���\�aYf;�?�N�'�g�������%������	���C:Zzo��g�#}�N�_|�h)�3��?����	�/s����
{17}
�j���H���q���5W����~0��~	0W����,�/�������D�>H�<�a�c�}�4�m�%��8jd��OC��pw��D����Af�u��V�x#2�
k��|�E�H�&!�rr
�J�=���.��J�����o~����/���:���0V��TIi��.}��3���E�=!�;}�(�q'�y���n�>�5G������D�O�����1r�/Qg�_����
������Eb_��~�mc%]
�^������iy�3�~I�N{��H�/�s��R�����=�7�����-�k����z��b����i���4������8����>H�=}�_E�C��-�]�� ���q7��{�=����Q��7Y��f�v���u{������
�������db�N����Q/Ol�lZ�J�_�;��S����\��x���C�ZNA{���3�y
��������n��y�^L�Zj=�Q�����0���N����m
�F���`$�����d��!�v�>�@Y��'�D�R�I���F]R�����{�-4�}'Mv]�|iG�={(�3�R�>�x�]w-�����E'Ses�j�7nKcT_����d{�����m���:�5�������T��>.�/��*�O�Z��G���'��@����R�y�l����S����kh���LU3{�N�r��������n��vJS�OY"��
Y>�����������+-�g9�+��-�<�b�+�6��iEF��i����m����Zs�b�f��5�&�>k�-E����X����}~>�s�p�u�L�1|��9�I�5g���q�A8��;��� ��I���(63���40�������u�G/���x�I����A���������`<�w�Xc����v���>�w�kL��z��[��n�|_�}��G���������M7�G��8KSE�n��.��W�e�V��Y%c��q^�1�Y�`5���r��7n7,;O�l|�GBe���g����2���i{�������U}_f\	mR�d���`��v>�|���i�Y��|���q��d�"*�_�~��}�g�+�����C�O�Q�~�6u�-�W���`n������){���$
��M���^�_��S�Y�/
��u�9s������a/�~�q%���a�m�gnnV�ey��]HI���x"�}��>W��.��X�o��{������!�8��g�L��g��.20�pM@�������!�*��Cz��|��g��|�
�;��#������<n���������	�k�.��]�;�X%��b���*`W�}R��#qS��[W����AO�L��EatP�n<_�p�r���
�/��:qM:�O�(~.����V�+���>�Q�JF�&�!(�j��v�A������_w�����t=M�]Q?�i�GQ��(�W��+�z�K0�=E\�F�������,�a����m�.�q/��!��
[�[�����*�#q�^c�m�����i�����)������Xu�{���
��g�s����(M�q<�j@nY�&�oh\{e�g��n)[A���7y^k
��
���k����y�����^�|8j���{Kw�C��_������j��>�=�����r��v����_���6r��zw�u������>��dYb}T�k+�6h��0G�jM��I����������}�}S�\���Q�� �Sym��R#U�D�{
���j�V��D�:�`��}-��b�����������E�G��od��Eb]2i�R��}T��Oq� |�Z��h�}R[�g���r��W�WiF���d���/���W��i1���O���k�O����!q/~E���
����f/)�r�C��ekv�
�U�9[_��`,i'����7��m�w
g�?���x�6H��o���rB��}�9/��.[{N/��E�r��9�
�,��%"�qb����B���'�QO�j���s9{�A4�\O�?�-4��$���������8C��g�!��:���qC�!/�7������Nu�-��!�����>?���u������Pgw��W�0�����^#~w��
����J^����U��%Q�"���#��Q>����O�f������(}z
�w���}�]���W���}M�L���nm�2����Q���oK�=���`6��/Jcv3���;�.D>���d4�#�Q��&
�%c0N��M��K'I.Cz&!�������)DW�d�k1b��#F�1b��#F�1b��#F�1b��#F�1b��#F�1b��#F�1b��?����N�(z�<�Se����|��o�E�N�b��	���x��M��n���J��4zi�#��Z#�&�CNb^?#��e�k��`�&���O�u)�m���D���X6�c��H3|�R^O�3�vF�NtX� ?��`(k��z��,��3�$dt��w����.!j��&G8����?���eR^:Q��qR�B�6p����/e��R���	��O�����������_����H��F~�ht��
��	)5���
��I��U���mh�	�9y�������?�O�Ok�&�l���O�@=0����'�O�T?�y�k.���Ap��c�y?���R��G���l��8���5I?��E\�>��Q\��w�Y��������������6"g����V7���SWu��1�V��do�� J5j���F� �{u���Z#�z�|��AM ��1o�~�"@GJ!�C%`��qwwG(�A�����~�8B@���F5���V��y����	9�������{�|UI�}��������~�k���0I�I��x��_��L�[y�z=���k6�@9X�z�����������^�f5}$�������P�bT�_�^�;\66�P��_��������/�;V��/�[n�_����;�+��_�3�q����)���V_�\fO��	�@^�~r�&��M�����o�:ir����9�.����?\��������f-<G/���i�QZ�
-���}Z8]���.m8�"���9�9"����k���p�j�Z8S�a�Z�[��AB
Q�������}�n��n����'��zX��R��T����{M�\��a�������b�C���h^�/H�5����8������5���k6��`)8�"9��NU���e�DO`��?���M�JK�%e%�5����tmB������(%��\�%��g����@qyq���JCA������i�Z����.^��n��i#(���N��=�|^����o����MC���`_���C���������V���v��5�j�a�l��?�[���]�����Z
�. Tw�����/To��u��%,v���7���'�����+�����������*���\��QRk����$d��>Hlo��4#]�p��Zm^���O�g�g�'��������y�z�{S�I�����^���5�����k�c�,�����=��tkd��$����O�%���x��3�����Zqd�l*�*�jrF�?qF����ER��xJ~dxVq����U��\^�]��.�oD_Q����Z�b�e]#)��$MK^��+�^�V��Qj�sSsSF'�(*h�2K]���f��i��'�F���"9|c��G�N�,����>+,��}���t�1Z;Q8����ee���4�G�s���|.���Y��t��N��@x�e��^\�z=���������������B�S�*�Ne�@������C�t�~���c�u"�����t�P���O���.BeZ�J�RY���R�dhM:>��p��I8�s�u�3������jF���Y8'�pVF�0+r���R#�������A bg]5{�+�D�2�Dfg��������xdF�v�Y8�t����������W���)<���V6�5�������s\c�5�x?�q
���q\cBcD\$�xI�v/��]<S��M<�������;&]?ZT���R�t������*�\��I��_^�<~�6����;Q=J]2�[�:�	�(	�����hq�bJ-�_ ���?x-Z�.�Y�-����H����ED��>��#�g�n�x�;�?)r����Ma��[z�����i���7���������XI�Wo���-��-��2#�^<EGW0e�u���:�R<<T��+�,��~�J��;�,��m-Vw*/))C"H��%��8��sl^H�
{7�f
endstream
endobj
13
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+ArialMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
15
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
0
0
277
]
4
10
0
11
12
333
13
14
0
15
[
277
0
277
277
]
19
28
556
29
37
0
38
[
722
0
666
610
777
722
277
0
0
556
833
0
777
666
0
722
0
610
]
56
58
0
59
60
666
61
65
0
66
[
556
0
556
556
500
556
556
0
556
556
222
0
0
222
833
]
81
83
556
84
[
0
333
500
277
556
500
722
0
500
]
]
>>
endobj
15
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+ArialMT
/Flags
4
/FontBBox
[
-664
-324
2000
1005
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
16
0
R
>>
endobj
17
0
obj
371
endobj
18
0
obj
25846
endobj
1
0
obj
<<
/Type
/Pages
/Kids
[
5
0
R
]
/Count
1
>>
endobj
xref
0 19
0000000002 65535 f 
0000054599 00000 n 
0000000000 00000 f 
0000000016 00000 n 
0000000142 00000 n 
0000000237 00000 n 
0000000402 00000 n 
0000027179 00000 n 
0000027049 00000 n 
0000027070 00000 n 
0000027089 00000 n 
0000027351 00000 n 
0000027141 00000 n 
0000053864 00000 n 
0000027495 00000 n 
0000054360 00000 n 
0000027942 00000 n 
0000054557 00000 n 
0000054577 00000 n 
trailer
<<
/Size
19
/Root
3
0
R
/Info
4
0
R
>>
startxref
54658
%%EOF
#179Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#178)
15 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAdj-EJOH1o2fTLke-uskSvuenT--fKW9nkLzYcLwU_eg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 4 Nov 2024 22:19:07 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've further investigated the performance regression, and found out it
might be relevant that the compiler doesn't inline the
CopyFromTextLikeOneRow() function. It might be worth testing with
pg_attribute_always_inline instead of 'inline' as below:

Wow! Good catch!

I've rebased on the current master and updated the v20 and
v21 patch sets with "pg_attribute_always_inline" not
"inline".

The v22 patch set is for the v20 patch set.
(TO/FROM changes are in one commit.)

The v23 patch set is for the v21 patch set.
(TO/FROM changes are separated for easy to merge only FROM
or TO part.)

I'll run benchmark on my environment again.

Thanks,
--
kou

Attachments:

v22-0001-Add-CopyToRoutine-CopyFromRountine.patchtext/x-patch; charset=us-asciiDownload
From 960414f4d256b0d250a70156aac50f88e07de19a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 4 Mar 2024 13:52:34 +0900
Subject: [PATCH v22 1/5] Add CopyToRoutine/CopyFromRountine

They are for implementing custom COPY TO/FROM format. But this is not
enough to implement custom COPY TO/FROM format yet. We'll export some
APIs to receive/send data and add "format" option to COPY TO/FROM
later.

Existing text/csv/binary format implementations don't use
CopyToRoutine/CopyFromRoutine for now. We have a patch for it but we
defer it. Because there are some mysterious profile results in spite
of we get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          |  24 +++++-
 src/backend/commands/copyfromparse.c     |   5 ++
 src/backend/commands/copyto.c            |  31 ++++++-
 src/include/commands/copyapi.h           | 101 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h |   4 +
 src/tools/pgindent/typedefs.list         |   2 +
 6 files changed, 159 insertions(+), 8 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 07cbd5d22b8..909375e81b7 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1635,12 +1635,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1780,10 +1790,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1801,6 +1814,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d83..b104e4a9114 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1003,6 +1003,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d96751..405e1782685 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -776,14 +780,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -810,6 +822,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -891,6 +905,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -912,15 +928,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	if (!cstate->opts.binary)
 	{
 		bool		need_delim = false;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..d1289424c67
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,101 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO/FROM handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* These are private in commands/copy[from|to].c */
+typedef struct CopyFromStateData *CopyFromState;
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1847bbfa95c..a8422fa4d35 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
@@ -503,6 +504,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v22-0002-Use-CopyToRoutine-CopyFromRountine-for-the-exist.patchtext/x-patch; charset=us-asciiDownload
From 78ed1bf847051f09f417980931c031cfa5d93e4c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 16:44:44 +0900
Subject: [PATCH v22 2/5] Use CopyToRoutine/CopyFromRountine for the existing
 formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 530 +++++++++++++----------
 src/backend/commands/copyto.c            | 477 +++++++++++++-------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 5 files changed, 790 insertions(+), 442 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 909375e81b7..e6ea9ce1602 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1547,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1578,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1736,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,23 +1768,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1785,23 +1905,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1814,8 +1918,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b104e4a9114..0447c4df7e0 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -741,8 +741,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +759,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +813,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +823,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +839,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,221 +1117,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1092,7 +1162,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1100,7 +1170,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1167,8 +1237,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1183,7 +1253,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1260,7 +1334,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1299,7 +1377,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1327,10 +1405,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1344,10 +1422,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1355,15 +1433,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1375,7 +1453,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 405e1782685..46f3507a8b5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,317 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +506,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +540,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +727,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -775,27 +1075,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -808,58 +1091,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -898,15 +1130,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -922,7 +1146,6 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
@@ -931,69 +1154,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f5382..f2409013fba 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v22-0003-Add-support-for-adding-custom-COPY-TO-FROM-forma.patchtext/x-patch; charset=us-asciiDownload
From 328bb34d626fdbcc2cb2e2013c46e24e6123faef Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jul 2024 17:39:41 +0900
Subject: [PATCH v22 3/5] Add support for adding custom COPY TO/FROM format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine and a COPY FROM handler
returns a CopyFromRoutine.

This uses the same handler for COPY TO and COPY FROM. PostgreSQL calls a
COPY TO/FROM handler with "is_from" argument. It's true for COPY FROM
and false for COPY TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY TO/FROM handler.
---
 src/backend/commands/copy.c                   |  96 ++++++++++++++---
 src/backend/commands/copyfrom.c               |   4 +-
 src/backend/commands/copyto.c                 |   4 +-
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 ++
 src/include/catalog/pg_type.dat               |   6 ++
 src/include/commands/copy.h                   |   2 +
 src/include/commands/copyapi.h                |   4 +
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../expected/test_copy_format.out             |  21 ++++
 src/test/modules/test_copy_format/meson.build |  33 ++++++
 .../test_copy_format/sql/test_copy_format.sql |   6 ++
 .../test_copy_format--1.0.sql                 |   8 ++
 .../test_copy_format/test_copy_format.c       | 100 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 21 files changed, 313 insertions(+), 15 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3485ba8663f..c8643b2dee7 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -462,6 +463,87 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -505,22 +587,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e6ea9ce1602..932f1ff4f6e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -247,7 +247,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 46f3507a8b5..1f1d2baf9be 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -431,7 +431,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index f23321a41f1..6af90a26374 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7761,6 +7761,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to/from method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2409013fba..63f3e8e1af7 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,8 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d1289424c67..e049a45a4b1 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,6 +27,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated with the relation's attributes writing to.  `finfo` can be
@@ -69,6 +71,8 @@ typedef struct CopyFromRoutine
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated with the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index c829b619530..75b6ab1b6a9 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..4ed7c0b12db
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,21 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..e805f7cb011
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,6 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..f6b105659ab
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,100 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v22-0004-Export-CopyToStateData-and-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 682b868c825409d44aec0d3ad32ece63aaed309f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 14:54:10 +0900
Subject: [PATCH v22 4/5] Export CopyToStateData and CopyFromStateData

It's for custom COPY TO/FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except
CopyDest/CopySource enum values. CopyDest/CopySource enum values such as
COPY_FILE are conflicted each other. So COPY_DEST_ prefix instead of
COPY_ prefix is used for CopyDest enum values and COPY_SOURCE_ prefix
instead of COPY_ prefix is used for CopySource enum values. For example,
COPY_FILE in CopyDest is renamed to COPY_DEST_FILE and COPY_FILE in
CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY TO/FROM format
handlers as extension. We'll do the followings in a subsequent commit:

For custom COPY TO format handler:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer

For custom COPY FROM format handler:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/backend/commands/copyto.c            |  77 +-----
 src/include/commands/copy.h              |  81 +-----
 src/include/commands/copyapi.h           | 309 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ------------
 6 files changed, 323 insertions(+), 323 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 932f1ff4f6e..d758e66c6a1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1716,7 +1716,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1844,7 +1844,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0447c4df7e0..ccfbacb4a37 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,7 +171,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -239,7 +239,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -331,7 +331,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1179,7 +1179,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 1f1d2baf9be..fb68f42ce1e 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -460,7 +399,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -507,7 +446,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -541,11 +480,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -929,12 +868,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 63f3e8e1af7..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,90 +14,11 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_SILENT = -1, /* logs none */
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages. As this is
-									 * the default, assign 0 */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	int64		reject_limit;	/* maximum tolerable number of errors */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
-								 * NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index e049a45a4b1..206d4c9fac9 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,12 +14,84 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* These are private in commands/copy[from|to].c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_SILENT = -1, /* logs none */
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages. As this is
+									 * the default, assign 0 */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	int64		reject_limit;	/* maximum tolerable number of errors */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
+} CopyFormatOptions;
+
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 /*
  * API structure for a COPY FROM format implementation.  Note this must be
@@ -65,6 +137,176 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
+
+typedef struct CopyToStateData *CopyToState;
+
 /*
  * API structure for a COPY TO format implementation.   Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -102,4 +344,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v22-0005-Add-support-for-implementing-custom-COPY-TO-FROM.patchtext/x-patch; charset=us-asciiDownload
From 3f9b4a8caa33960fe11512883177a96939186373 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 23 Jan 2024 15:12:43 +0900
Subject: [PATCH v22 5/5] Add support for implementing custom COPY TO/FROM
 format as extension

For custom COPY TO format implementation:

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()

For custom COPY FROM format implementation:

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 14 ++++++++++++++
 src/backend/commands/copyto.c        | 14 ++++++++++++++
 src/include/commands/copyapi.h       | 10 ++++++++++
 3 files changed, 38 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index ccfbacb4a37..4fa23d992f5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -730,6 +730,20 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * CopyFromStateRead
+ *
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index fb68f42ce1e..93b041352c5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -496,6 +496,20 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * CopyToStateFlush
+ *
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 206d4c9fac9..2de610ef729 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -302,8 +302,13 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 
 typedef struct CopyToStateData *CopyToState;
 
@@ -405,6 +410,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v23-0001-Add-CopyToRountine.patchtext/x-patch; charset=us-asciiDownload
From 79470eab70ba8df417796cc9e66eca41b97e74b5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v23 01/10] Add CopyToRountine

It's for implementing custom COPY TO format. But this is not enough to
implement custom COPY TO format yet. We'll export some APIs to send
data and add "format" option to COPY TO later.

Existing text/csv/binary format implementations don't use
CopyToRoutine for now. We have a patch for it but we defer it. Because
there are some mysterious profile results in spite of we get faster
runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyto.c    | 31 ++++++++++++++---
 src/include/commands/copyapi.h   | 58 ++++++++++++++++++++++++++++++++
 src/tools/pgindent/typedefs.list |  1 +
 3 files changed, 86 insertions(+), 4 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d96751..405e1782685 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -776,14 +780,22 @@ DoCopyTo(CopyToState cstate)
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryOutputInfo(attr->atttypid,
 									&out_func_oid,
 									&isvarlena);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+										   &cstate->out_functions[attnum - 1]);
 		else
+		{
 			getTypeOutputInfo(attr->atttypid,
 							  &out_func_oid,
 							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		}
 	}
 
 	/*
@@ -810,6 +822,8 @@ DoCopyTo(CopyToState cstate)
 		tmp = 0;
 		CopySendInt32(cstate, tmp);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToStart(cstate, tupDesc);
 	else
 	{
 		/*
@@ -891,6 +905,8 @@ DoCopyTo(CopyToState cstate)
 		/* Need to flush out the trailer */
 		CopySendEndOfRow(cstate);
 	}
+	else if (cstate->routine)
+		cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -912,15 +928,22 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
+	/* Make sure the tuple is fully deconstructed */
+	slot_getallattrs(slot);
+
+	if (cstate->routine)
+	{
+		cstate->routine->CopyToOneRow(cstate, slot);
+		MemoryContextSwitchTo(oldcontext);
+		return;
+	}
+
 	if (cstate->opts.binary)
 	{
 		/* Binary per-tuple header */
 		CopySendInt16(cstate, list_length(cstate->attnumlist));
 	}
 
-	/* Make sure the tuple is fully deconstructed */
-	slot_getallattrs(slot);
-
 	if (!cstate->opts.binary)
 	{
 		bool		need_delim = false;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..5ce24f195dc
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1847bbfa95c..098e7023486 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v23-0002-Use-CopyToRountine-for-the-existing-formats.patchtext/x-patch; charset=us-asciiDownload
From 8743273a660c75b49862dbb18991c74131ed776e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:26:29 +0900
Subject: [PATCH v23 02/10] Use CopyToRountine for the existing formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyToTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyToTextOneRow() calls CopyToTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyto.c | 477 +++++++++++++++++++++++-----------
 1 file changed, 319 insertions(+), 158 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 405e1782685..46f3507a8b5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -128,6 +128,317 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -195,16 +506,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -239,10 +540,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -430,6 +727,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -775,27 +1075,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-										   &cstate->out_functions[attnum - 1]);
-		else
-		{
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-			fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
-		}
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -808,58 +1091,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToStart(cstate, tupDesc);
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -898,15 +1130,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
-	else if (cstate->routine)
-		cstate->routine->CopyToEnd(cstate);
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -922,7 +1146,6 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
@@ -931,69 +1154,7 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (cstate->routine)
-	{
-		cstate->routine->CopyToOneRow(cstate, slot);
-		MemoryContextSwitchTo(oldcontext);
-		return;
-	}
-
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
-- 
2.45.2

v23-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From aadcd4bb260d14fc40ab69178fcc85271307b4a9 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:40:54 +0900
Subject: [PATCH v23 03/10] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 82 ++++++++++++++++---
 src/backend/commands/copyto.c                 |  4 +-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 251 insertions(+), 14 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 3485ba8663f..02528fbcc1f 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -462,6 +463,73 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -505,22 +573,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 46f3507a8b5..1f1d2baf9be 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -431,7 +431,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 81df3bdf95f..428ab4f0d93 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index f23321a41f1..6af90a26374 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7761,6 +7761,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..793dd671935 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f5382..7659d8ae32f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5ce24f195dc..05b7d92ddba 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -26,6 +26,8 @@ typedef struct CopyToStateData *CopyToState;
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY TO is started to set up the output functions
 	 * associated with the relation's attributes reading from.  `finfo` can be
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index c829b619530..75b6ab1b6a9 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..606c78f6878
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..9406b3be3d4
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v23-0004-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From eedabed5e0e1a9f8f9e5591b806c6f606229874a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:56:36 +0900
Subject: [PATCH v23 04/10] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  |  77 ++----------------
 src/include/commands/copy.h    |  77 +-----------------
 src/include/commands/copyapi.h | 137 ++++++++++++++++++++++++++++++++-
 3 files changed, 146 insertions(+), 145 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 1f1d2baf9be..fb68f42ce1e 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format routine */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -143,7 +82,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -151,7 +90,7 @@ CopyToTextLikeSendEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -460,7 +399,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -507,7 +446,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -541,11 +480,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -929,12 +868,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7659d8ae32f..dd645eaa030 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,88 +14,15 @@
 #ifndef COPY_H
 #define COPY_H
 
-#include "nodes/execnodes.h"
+#include "commands/copyapi.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/*
- * Represents whether a header line should be present, and whether it must
- * match the actual names (which implies "true").
- */
-typedef enum CopyHeaderChoice
-{
-	COPY_HEADER_FALSE = 0,
-	COPY_HEADER_TRUE,
-	COPY_HEADER_MATCH,
-} CopyHeaderChoice;
-
-/*
- * Represents where to save input processing errors.  More values to be added
- * in the future.
- */
-typedef enum CopyOnErrorChoice
-{
-	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
-	COPY_ON_ERROR_IGNORE,		/* ignore errors */
-} CopyOnErrorChoice;
-
-/*
- * Represents verbosity of logged messages by COPY command.
- */
-typedef enum CopyLogVerbosityChoice
-{
-	COPY_LOG_VERBOSITY_SILENT = -1, /* logs none */
-	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages. As this is
-									 * the default, assign 0 */
-	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
-} CopyLogVerbosityChoice;
-
-/*
- * A struct to hold COPY options, in a parsed form. All of these are related
- * to formatting, except for 'freeze', which doesn't really belong here, but
- * it's expedient to parse it along with all the other options.
- */
-typedef struct CopyFormatOptions
-{
-	/* parameters from the COPY command */
-	int			file_encoding;	/* file or remote side's character encoding,
-								 * -1 if not specified */
-	bool		binary;			/* binary format? */
-	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
-	CopyHeaderChoice header_line;	/* header line? */
-	char	   *null_print;		/* NULL marker string (server encoding!) */
-	int			null_print_len; /* length of same */
-	char	   *null_print_client;	/* same converted to file encoding */
-	char	   *default_print;	/* DEFAULT marker string */
-	int			default_print_len;	/* length of same */
-	char	   *delim;			/* column delimiter (must be 1 byte) */
-	char	   *quote;			/* CSV quote char (must be 1 byte) */
-	char	   *escape;			/* CSV escape char (must be 1 byte) */
-	List	   *force_quote;	/* list of column names */
-	bool		force_quote_all;	/* FORCE_QUOTE *? */
-	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
-	List	   *force_notnull;	/* list of column names */
-	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
-	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
-	List	   *force_null;		/* list of column names */
-	bool		force_null_all; /* FORCE_NULL *? */
-	bool	   *force_null_flags;	/* per-column CSV FN flags */
-	bool		convert_selectively;	/* do selective binary conversion? */
-	CopyOnErrorChoice on_error; /* what to do when error happened */
-	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
-	int64		reject_limit;	/* maximum tolerable number of errors */
-	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
-} CopyFormatOptions;
-
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
-typedef struct CopyToStateData *CopyToState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
 
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 05b7d92ddba..b6ddb5f6216 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,10 +14,82 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/trigger.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* This is private in commands/copyto.c */
+/*
+ * Represents whether a header line should be present, and whether it must
+ * match the actual names (which implies "true").
+ */
+typedef enum CopyHeaderChoice
+{
+	COPY_HEADER_FALSE = 0,
+	COPY_HEADER_TRUE,
+	COPY_HEADER_MATCH,
+} CopyHeaderChoice;
+
+/*
+ * Represents where to save input processing errors.  More values to be added
+ * in the future.
+ */
+typedef enum CopyOnErrorChoice
+{
+	COPY_ON_ERROR_STOP = 0,		/* immediately throw errors, default */
+	COPY_ON_ERROR_IGNORE,		/* ignore errors */
+} CopyOnErrorChoice;
+
+/*
+ * Represents verbosity of logged messages by COPY command.
+ */
+typedef enum CopyLogVerbosityChoice
+{
+	COPY_LOG_VERBOSITY_SILENT = -1, /* logs none */
+	COPY_LOG_VERBOSITY_DEFAULT = 0, /* logs no additional messages. As this is
+									 * the default, assign 0 */
+	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
+} CopyLogVerbosityChoice;
+
+/*
+ * A struct to hold COPY options, in a parsed form. All of these are related
+ * to formatting, except for 'freeze', which doesn't really belong here, but
+ * it's expedient to parse it along with all the other options.
+ */
+typedef struct CopyFormatOptions
+{
+	/* parameters from the COPY command */
+	int			file_encoding;	/* file or remote side's character encoding,
+								 * -1 if not specified */
+	bool		binary;			/* binary format? */
+	bool		freeze;			/* freeze rows on loading? */
+	bool		csv_mode;		/* Comma Separated Value format? */
+	CopyHeaderChoice header_line;	/* header line? */
+	char	   *null_print;		/* NULL marker string (server encoding!) */
+	int			null_print_len; /* length of same */
+	char	   *null_print_client;	/* same converted to file encoding */
+	char	   *default_print;	/* DEFAULT marker string */
+	int			default_print_len;	/* length of same */
+	char	   *delim;			/* column delimiter (must be 1 byte) */
+	char	   *quote;			/* CSV quote char (must be 1 byte) */
+	char	   *escape;			/* CSV escape char (must be 1 byte) */
+	List	   *force_quote;	/* list of column names */
+	bool		force_quote_all;	/* FORCE_QUOTE *? */
+	bool	   *force_quote_flags;	/* per-column CSV FQ flags */
+	List	   *force_notnull;	/* list of column names */
+	bool		force_notnull_all;	/* FORCE_NOT_NULL *? */
+	bool	   *force_notnull_flags;	/* per-column CSV FNN flags */
+	List	   *force_null;		/* list of column names */
+	bool		force_null_all; /* FORCE_NULL *? */
+	bool	   *force_null_flags;	/* per-column CSV FN flags */
+	bool		convert_selectively;	/* do selective binary conversion? */
+	CopyOnErrorChoice on_error; /* what to do when error happened */
+	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
+	int64		reject_limit;	/* maximum tolerable number of errors */
+	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+} CopyFormatOptions;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
@@ -57,4 +129,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format routine */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v23-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 90174da9f00b736b7c4900f046fcceae8cce74d5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:59:34 +0900
Subject: [PATCH v23 05/10] Add support for implementing custom COPY TO format
 as extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c  | 14 ++++++++++++++
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index fb68f42ce1e..93b041352c5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -496,6 +496,20 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * CopyToStateFlush
+ *
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index b6ddb5f6216..310a37ba728 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -190,6 +190,11 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v23-0006-Add-CopyFromRoutine.patchtext/x-patch; charset=us-asciiDownload
From e5a3351614bea13c8e5857c5f05bbc656ce5f34d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:06:20 +0900
Subject: [PATCH v23 06/10] Add CopyFromRoutine

This is for implementing custom COPY FROM format. But this is not
enough to implement custom COPY FROM format yet. We'll export some
APIs to receive data and add "format" option to COPY FROM later.

Existing text/csv/binary format implementations don't use
CopyFromRoutine for now. We have a patch for it but we defer
it. Because there are some mysterious profile results in spite of we
get faster runtimes. See [1] for details.

[1] https://www.postgresql.org/message-id/ZdbtQJ-p5H1_EDwE%40paquier.xyz

Note that this doesn't change existing text/csv/binary format
implementations.
---
 src/backend/commands/copyfrom.c          | 24 ++++++++++--
 src/backend/commands/copyfromparse.c     |  5 +++
 src/include/commands/copyapi.h           | 47 +++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h |  4 ++
 src/tools/pgindent/typedefs.list         |  1 +
 5 files changed, 76 insertions(+), 5 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 07cbd5d22b8..909375e81b7 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1635,12 +1635,22 @@ BeginCopyFrom(ParseState *pstate,
 
 		/* Fetch the input function and typioparam info */
 		if (cstate->opts.binary)
+		{
 			getTypeBinaryInputInfo(att->atttypid,
 								   &in_func_oid, &typioparams[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
+		else if (cstate->routine)
+			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+											&in_functions[attnum - 1],
+											&typioparams[attnum - 1]);
+
 		else
+		{
 			getTypeInputInfo(att->atttypid,
 							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		}
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1780,10 +1790,13 @@ BeginCopyFrom(ParseState *pstate,
 		/* Read and verify binary header */
 		ReceiveCopyBinaryHeader(cstate);
 	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
+	else if (cstate->routine)
 	{
+		cstate->routine->CopyFromStart(cstate, tupDesc);
+	}
+	else
+	{
+		/* create workspace for CopyReadAttributes results */
 		AttrNumber	attr_count = list_length(cstate->attnumlist);
 
 		cstate->max_fields = attr_count;
@@ -1801,6 +1814,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	if (cstate->routine)
+		cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d83..b104e4a9114 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -1003,6 +1003,11 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 
 		Assert(fieldno == attr_count);
 	}
+	else if (cstate->routine)
+	{
+		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+			return false;
+	}
 	else
 	{
 		/* binary */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 310a37ba728..81b2f4e5c1f 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -90,6 +90,51 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
+/* This is private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
+/*
+ * API structure for a COPY FROM format implementation.  Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.  `atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..509b9e92a18 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 098e7023486..a8422fa4d35 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.45.2

v23-0007-Use-CopyFromRoutine-for-the-existing-formats.patchtext/x-patch; charset=us-asciiDownload
From 89a406fde3ea0dc013d8747b2130353dd911c4c0 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:09:29 +0900
Subject: [PATCH v23 07/10] Use CopyFromRoutine for the existing formats

The existing formats are text, csv and binary. If we find any
performance regression by this, we will not merge this to master.

This will increase indirect function call costs but this will reduce
runtime "if (cstate->opts.binary)" and "if (cstate->opts.csv_mode)"
branch costs.

This uses an optimization based of static inline function and a
constant argument call for cstate->opts.csv_mode. For example,
CopyFromTextLikeOneRow() uses this optimization. It accepts the "bool
is_csv" argument instead of using cstate->opts.csv_mode in
it. CopyFromTextOneRow() calls CopyFromTextLikeOneRow() with
false (constant) for "bool is_csv". Compiler will remove "if (is_csv)"
branch in it by this optimization.

This doesn't change existing logic. This just moves existing codes.
---
 src/backend/commands/copyfrom.c          | 215 ++++++---
 src/backend/commands/copyfromparse.c     | 530 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyfrom_internal.h |   8 +
 4 files changed, 471 insertions(+), 284 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 909375e81b7..e6ea9ce1602 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1547,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1578,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1736,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,23 +1768,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-		{
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
-		else if (cstate->routine)
-			cstate->routine->CopyFromInFunc(cstate, att->atttypid,
-											&in_functions[attnum - 1],
-											&typioparams[attnum - 1]);
-
-		else
-		{
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-			fmgr_info(in_func_oid, &in_functions[attnum - 1]);
-		}
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1785,23 +1905,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-	else if (cstate->routine)
-	{
-		cstate->routine->CopyFromStart(cstate, tupDesc);
-	}
-	else
-	{
-		/* create workspace for CopyReadAttributes results */
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1814,8 +1918,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
-	if (cstate->routine)
-		cstate->routine->CopyFromEnd(cstate);
+	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b104e4a9114..0447c4df7e0 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -741,8 +741,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +759,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +813,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +823,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +839,267 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * CopyFromTextLikeOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
+ *
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,221 +1117,21 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else if (cstate->routine)
-	{
-		if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
-			return false;
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1092,7 +1162,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1100,7 +1170,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1167,8 +1237,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1183,7 +1253,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1260,7 +1334,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1299,7 +1377,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1327,10 +1405,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1344,10 +1422,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1355,15 +1433,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1375,7 +1453,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index dd645eaa030..e5696839637 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -35,8 +35,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 509b9e92a18..c11b5ff3cc0 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
-- 
2.45.2

v23-0008-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From de95d4bd606519df51c8d68b5ab2f3009dfd0cf7 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:17:53 +0900
Subject: [PATCH v23 08/10] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 52 ++++++++++++-------
 src/backend/commands/copyfrom.c               |  4 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  5 +-
 .../expected/test_copy_format.out             | 10 ++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++++-
 7 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 02528fbcc1f..c8643b2dee7 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -469,8 +469,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -501,12 +501,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -515,17 +512,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e6ea9ce1602..932f1ff4f6e 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -247,7 +247,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 793dd671935..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 81b2f4e5c1f..e9c01492797 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -87,7 +87,8 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* This is private in commands/copyfrom.c */
@@ -99,6 +100,8 @@ typedef struct CopyFromStateData *CopyFromState;
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Called when COPY FROM is started to set up the input functions
 	 * associated with the relation's attributes writing to.  `finfo` can be
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 606c78f6878..4ed7c0b12db 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (format 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 9406b3be3d4..e805f7cb011 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.45.2

v23-0009-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 0f4d74f1750467f4ac3b87b24e03271579793651 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:28:02 +0900
Subject: [PATCH v23 09/10] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. This changes COPY_ prefix of CopySource enum values to
COPY_SOURCE_ prefix like the CopyDest enum values prefix change. For
example, COPY_FILE in CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY FROM format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   5 -
 src/include/commands/copyapi.h           | 168 ++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h | 165 ----------------------
 5 files changed, 174 insertions(+), 178 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 932f1ff4f6e..d758e66c6a1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1716,7 +1716,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1844,7 +1844,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0447c4df7e0..ccfbacb4a37 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,7 +171,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -239,7 +239,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -331,7 +331,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1179,7 +1179,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index e5696839637..e2411848e9f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -19,11 +19,6 @@
 #include "parser/parse_node.h"
 #include "tcop/dest.h"
 
-/* This is private in commands/copyfrom.c */
-typedef struct CopyFromStateData *CopyFromState;
-
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index e9c01492797..0274e3487c3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -91,7 +91,6 @@ typedef struct CopyFormatOptions
 								 * NULL) */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 /*
@@ -138,6 +137,173 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ * Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc0..3863d26d5b7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -19,171 +19,6 @@
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v23-0010-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From f9908c010646fdf182615a2e3632395ae9d9c4f3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sun, 29 Sep 2024 00:32:31 +0900
Subject: [PATCH v23 10/10] Add support for implementing custom COPY FROM
 format as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 14 ++++++++++++++
 src/include/commands/copyapi.h       |  6 ++++++
 2 files changed, 20 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index ccfbacb4a37..4fa23d992f5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -730,6 +730,20 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * CopyFromStateRead
+ *
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 0274e3487c3..2de610ef729 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -302,8 +302,14 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
+
 typedef struct CopyToStateData *CopyToState;
 
 /*
-- 
2.45.2

#180Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#179)
3 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20241105.174328.1705956947135248653.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 05 Nov 2024 17:43:28 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've further investigated the performance regression, and found out it
might be relevant that the compiler doesn't inline the
CopyFromTextLikeOneRow() function. It might be worth testing with
pg_attribute_always_inline instead of 'inline' as below:

Wow! Good catch!

I've rebased on the current master and updated the v20 and
v21 patch sets with "pg_attribute_always_inline" not
"inline".

The v22 patch set is for the v20 patch set.
(TO/FROM changes are in one commit.)

The v23 patch set is for the v21 patch set.
(TO/FROM changes are separated for easy to merge only FROM
or TO part.)

I've run benchmark on my machine that has "Intel(R) Core(TM)
i7-3770 CPU @ 3.40GHz".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

v20-result.pdf: This is the same result PDF attached in
/messages/by-id/20241008.173918.995935870630354246.kou@clear-code.com
. This is the base line for "pg_attribute_always_inline"
change.

v22-result.pdf: This is a new result PDF for the v22 patch
set.

COPY FROM:

0001: The v22 patch set is slower than HEAD. This just
introduces "routine" abstraction. It increases overhead. So
this is expected.

0002-0005: The v22 patch set is faster than HEAD for all
cases. The v20 patch set is slower than HEAD for smaller
data. This shows that "pg_attribute_always_inline" for the
"COPY FROM" part is effective on my machine too.

COPY TO:

0001: The v22 patch set is slower than HEAD. This is
as expected for the same reason as COPY FROM.

0002-0004: The v22 patch set is slower than HEAD. (The v20
patch set is faster than HEAD.) This is not expected.

0005: The v22 patch set is faster than HEAD. This is
expected. But 0005 just exports some functions. It doesn't
change existing logic. So it's strange...

This shows "pg_attribute_always_inline" is needless for the
"COPY TO" part.

I also tried the v24 patch set:
* The "COPY FROM" part is same as the v22 patch set
("pg_attribute_always_inline" is used.)
* The "COPY TO" part is same as the v20 patch set
("pg_attribute_always_inline" is NOT used.)

(I think that the v24 patch set isn't useful for others. So
I don't share it here. If you're interested in it, I'll
share it here.)

v24-result.pdf:

COPY FROM: The same trend as the v22 patch set result. It's
expected because the "COPY FROM" part is the same as the v22
patch set.

COPY TO: The v24 patch set is faster than the v22 patch set
but the v24 patch set isn't same trend as the v20 patch
set. This is not expected because the "COPY TO" part is the
same as the v20 patch set.

Anyway, the 0005 "COPY TO" parts are always faster than
HEAD. So we can use either "pg_attribute_always_inline" or
"inline".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

Can we proceed this proposal with these results? Or should
we wait for more benchmark results?

Thanks,
--
kou

Attachments:

v20-intel-core-i7-3770-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20241008165642)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 124641
/Filter [/FlateDecode]
>>
stream
x������������XO�o�B��8��mIn�:
5nTeeI��t������cL��vi������X���uN�����>���>�����|l��8>��o��w�����?�?���YJ���������W*��v~��V��yJ���/�����G~�}r!����h������pM>�=^g_�&�������\��)�R�\�'��+o�������k�n.��&�nI�:����U��k�	���������>���{z�%� �������'���X���V^�R ����:�3���k������L�Yt���W�
���QNg3�u�2@�O����UB=@��sX���=��Y����6/���G}��[PP�W�
���3��,PP���2��
��W]l\�'��k_l\��)��lb(���W[lg���W!my:)�av<�E�,7B����H���'!2]	'��K�Lg���{ �;A���r(D~���.����)D�S����
��V���_A���,D�k���}��\8�}��d�"?�_�,C�<��b8�}Cd:N~�� Yn��� �� �O�\����k�+g���
r�n�����r�8���!��>�r:�}�� �n������� ���\����{�+����r�~�����r�@��"��>m79!���BD�����������'"2]'�����MHi:#y��:~�Z���x#B��w���G��?�h:$�~�!!�=���H��K"�.����8�}���tJ��S"����J��["�n����8�}���tL��c"�<��L��k"������8�}���tN��s"����N��{B�����O~�?!X
�8(�C�}�`�(?��LE��}������"0����R��B�n���S~�O!X�
�8*�S�}O�`�*?��L_E��}�urVd�=��8������V���"������8�}%�4�7����D�G���_!�Eh�W�~�_q�����W-E����������������h�+B���8Z�����+B��B����������h�+B���8Z�����+B��B����������h�+B���8Z�����+B��B��
�������"�����Wv��������B��+?��,������_�E`�+�����
��+�_!�}�`�W~�_X�
���+�������W~�_�]��
���G�_�}Eh�W�~�_q�����WJ�F�p�\�Y�W���"�����W�~�_q4�G���8������W�v��'��������h�+�~�_q4�G���-E���������h�+�~�_q4�G���-E���������h�+�~�_q4�G���-E���������"0����W��B�����W~�_!X�
��+�_�}�`�+?��LE���������"0����W��B�����W~�_!X�
��+�_�}Ev���u�+��������������h�+�~�_������`SyT�7��s�.��z���4�����k_�&��#�`����+���#��u�`�O��Bl���#!��?�����M>�G�;�&��WO��G�����F��_�e������A>��c�|���8�&���4B�O�k���!����n�����,��`�p��Vuw�j����:8R��=@e�F,��'����E����������o�\tm���{����\v{Op����^�	.�5q��=�E�&.��'����E����������O�\ti���{��M\twOp������.�3r��=�Ew&.��'����EW��h�n��N��clj�M>��`� �?�k[�����+-�	�#���\�#�G��U�����cX=����_��n��g�e��.h����W��M?�n�����/	�/�2-n�3�4��m�t�
0Q?���1&�g��+��A����1�`A�~fh,�G���A��)lA�~�gi�M����>}����������)z>���������\�{��S|��nO\��Op����.��}�;��!��s2z�G������2:<'�?|���Ndv�����9��#���7�3|�\oCN�!��s2��G��������q�txbG����>An���	�����W��M?����N������xA�~�\�}x�~]_��6�z�}|�~�_��6��W���V�
�t~����~]n���A��zC�~}`�JG����������A��(�3�r��~����m�������3��6ZE��,�t��~�+��T�*�u�:=�#�~�H���2:B'��|�{]^?T��|��n���%!���*u����	:}�#�/��Lt����:=�#��~�R����?>BF��dt�O�������rZ��9>B.�P���G�������2�>'�g|�|�V��E��!+��O�k�}��~���W�zC�~m3���g���)���)���-��t�_��g���-����:oh������,�g&ln��������[�3h[���M?���G����=�>nCX����v��E�:�����A��mm���A���i�g��m���y�?
�LWP�[�*�u�:=�#d��NFG������O>2�0����M>BF7�d������}K��#dt�NF��\�o��|dv����V�9����A>BF�d������9��#�c�R�������!�u�J}�#d�}NF�����W�g|�|��V�!��)��������-6�#�\r��������M?�n�o[������-�gVW��?�����3��:�%a�������3�~��E��|���3k����-�g��Uoh������-�g��6�E���}��~�o�!,�g����-�3��6�E����cS?�>nCX��������]�#�nY-�����:�#��~�R?��\�o��|dE�A_��^�2zA'��|�\��[�#!������G�������o��}K�#dt�NF��y_�o�{|���Q+��������:�'���Df��}���5>B��Q+�����:+[�#�c�R��%������:&�hc9�����?^8�8.��A�qW}j�k�86���d��7��I��}�f�A�a��J3���%n�F�77��8.^t7+���:m�U�O��	��J��*�k��f������B��b�A����slY5t�m�n��VV��<���C�~�����d�#.�5�@U�u���d%��!���O@d-������c5�s����O�c=�������lcE�3��E'����D�pM��a�*:=,\Ut�����
�?a���OX
WU[D��?�H�E'�k�������w���O�Qm�)3���g����,�pm�CT[tbH���<����-:�B��gW�k�N=Pm���������h�pm�k������������������������{��������;y���N�����U���~������Y[��t��h�d����-�s��E{��k��.������k���-"���kT�}}������-��7������s�L�S��[?�|�w�����7xt>}��G4���>���d�Om�__��O���* ��h����BF��CV
�|��������1�(�~����w���Y�w�����o[6�~�x�C��w���7y�~�H�x�_����oS��!��d��N��������������@��@��o�����?���S�S#!s?�����wbO����o�[�I��������8@��p���w�o�+�[�Kl��'�����kI��g?�������nT�k%�������7�Re���{j�f�[Gb��6�������Q��(���~�M��!�r? �������"���7�z����g9='�#��2c}���f��|�I���.U��B?5�4'��##1��P�f�~�X�8�p�mj�b��Ms��!����R�E<o;�>6F5'��.od�"��2g}2�
 3������
���yN1Iov��V~}��c�����<��^����~"��U��r��'�N[%�+��~&�pU��p��g�R�G��I~t*H_:9�I'�����R?�x0�H_8�3������cP?�t�)I_9��I�����CN?�x��H_8��3�g����#L?�td)I_9��I'����J?�x �H_8��3�������G?�t�(I_9m�N���}�p�O&J���stv(8_9:��G�����B��
�W���A��|��;G�~���c??q:��$�����y��TOp�r��'�$�gx�9:�������#:���	�w�N��+r~��Nr�p����_�m����q��I<^S�/������4I��a��I��F����|���dg%��5��DiN��'��A)V��tMJglJg��tV���Y�4+�
��b��+bY:�������h\:+`]�$_��bE�K�d`��0�E�Y�Y42��2}3�L�"v�X24��X���������,��
X������X{S��ip�8E��)R��$IF'I�S$��"�N�;O�.#by�D�S���I��O�"��H4?E
��$�%)b��DT��
�I�4BI�X�"�)`��$C���%*MQ���/^�1*�!b�:������X2H��X���y#dlR�jM�tD=�lR_�A�T��M*�lR�"6��h�:+`�:�6��6��9�MJV�&K6�X��Y�I��I�E��Y��W��&+b��%�T��M�,���
����M���M���h���I��M*V�&umRglRg�&uV�&�;�I����ZE����M*mR�6)I�II���"�&)`�j�W�u�T$��"lR�d���IE�M*R�&%I6)I�T$��"lR-��MJR�&�6�H��$��$ElR�h���I}� mR���Y�I��I��M*V�&u��~$+b�j��l�q~��I��Q6)Y!��,�I�
��b�&+b��%�T��M����I����d�MJV�&K6�X�T,��bElR�[�MJV�&%�mR�B6�X�I����b�&+b�jU�lR�B6)Yn���I��M*V�&K6�X�TsNe���I��X6)P!��$��$ElR��&)d��$����M�e���e�lR�d���IAr���MJ�lR�"6)Hn���II�MJR�&��u�� �lR�d���IAr���MJ�lR�"6�V��&���I��M*V�&%�mR�B6�X>���M�3�i����9���w�M*V�&K6�X��Y�I��I�E��Y���O�MJV�&K6�X��Y�I��I�E��Y��w��M*V�&K6�X��Y�I��I�E��Y�����M*V�&K6�X��Y�I��I�E��Y��WM�&+b�jS��DElR�h���II�MJR�&�6�H�T���[��IE�M*R�&%I6)I�T$��"lR�d���IE�M*R�&��0�II���"�&)`��$����M*mR�6��wC�T6C�&umRglR�d���I��hblR��C�t��{�;��'b��#K��J�Pr6(9�@�	���b���qB�'8�<�������$'`s�C������=�im��5���	N��$�V&9�Z���KnM���m	�,Kp"v%9�*�	�����$'`Or1Z��DlIlgMK�0;Z��lH���4J�~��#(�;s��y�����j%`3E�Q"�"(�A	��F��h���
�DP6"6<��h��}
�CP��Qd%b�B���M���i������$'`�#K��H�@r6�vv�x`��=�@�"v I2I�X�"�)`�DcP��5���i��I�AHR�"�&�H�P$�"�B�@����]H�C�"��H4
E
��"�8)`�0��$E�C�d ��E��(R�F�F�H+Q�V�L$)b'�p�E,Erh*�����N�Z$��"9{��U��#�X���d$'`3�#����H�Frv#82��X���t$'`;�8��D�Grh>����	N��$�&$9R����d��"E�)R��$I�$IKR$��KRd}�����qrz�O��-Z�NVh}:Y�>����t��>]���t��>]���t�G���`��������
�OK�����OK�����O�i;Z�NVh}:Y�>����t��>]���t��>]���t�%���d��������
�OK�����OK�����O���Z�NVh}:�H��t�B��I��t�"��A��� �������$E�����t�2B��I��t�"��A��� �������$E������A
�O'I��I��O�9[Z�Rh}:IZ�NRd}:H�>���t��>����t�����B�����t�"������d�����{��Y����h�����\4�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N}�Z �bk����@d�����@bE����@bE��L;�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N��Z �Bk����@d�����@bE����@bE��d�"+��'j-P��@$i-I��@ �Z �Bk�H�Z �"k�x�b�u��@$i-I��@ �Z �Bk�H�Z �"k�@��@ �����@$E��4K�)��$�")�$_Rh-IZDRd-�N��Z ���@bi-�X��@d�Z �Bk���3Q�����Zt%�+��>��@d����k��
�Kk����Kk�������ZVl-Y����Z ��H��Z ��H��Z ���@d����k��
�Kk����Kk�������ZDVh-Y����Z ��H��Z ��H��Z �m��@d����_�*��$�")�$_Rh-IZDRd-�1N�.#��$�")�$_Rh-IZDRd-H���Z �����Z ���@ �����@$E���k�@
�"Ik�H���Y�ZD�!�H,�+��,_DVh-�XZ$V�&��?����e�~5������
p��:�IFHy9���im�$QFH�����%#��u�$��*L���_.#��w��2B�Gk4I�R>�$QFH�r��/��e��:I�Ry���JFH�u�$��
�~�(#����, ]N|^H�R~K[ !�WYj�d�d�6O��%uY�_���vU��F�A�R^���2B�F{�(#$k�'�2B�F{�($4�N������$���I������$��X�h��2@B��$���I������$���I������$�	���$#$k�'�2B�F{�(���z(�@op���Oe�t����IF������e�T_i�5%#��X�^����b�JFH�rP�/�!?*��b����"ZX�!��*7u���S�Ma]VJZ`�!V��������vb��s-b��:��!��}��E���������^X�����z/�HOa
�$QFH��Oe�sH�Q��\FH��Oe�d
�$QFH��Oe�t,'��r���=_�,�����EbY{���C�����k���dI�X��/,����n�!V�;��!����:���|aQ�F������=_X�V��Ab�H�����X�!V�K�X������C#��6X�:���|cQ�X�m��u��GAZX������V�Y:�������!V�
���W���C����Ea���9wb��{�:�*7�u���D��Eb]}�j7K�X��Mw���n���P[X���������Eb����t�e���������������Eb���e�!����:�m�����u�e������m��u�e������}_X��������]wb����:���}aQ�X��/,������C_���qwa�rxv����W�X�!V�������m��uhG��?��������C�zvb���������������6��u��o���C,�����C��}�Eb7��u�������+�|w�!����vB:�j��^�!�q��]�X�}��t�-,��h�������EbY����C�~�v���n���C,k�u�Uo���C,k�u�u���]���l�`�C�|�vbY����C,k�u�u�|w��������wwbY����C�v�&b7��u�u�'�IG�)]7��t�����OsbU�W�,�����]�X�m<�uhs�i��!V~��j�����]�X�6�:�:_������n���C���7u�����]�X�������x��k�n��������������:�j��c�C������_�����������4�!����:�j��h�!�y�v��l��2��:���}aQ�X�6�:����h�!����:4G|��G���}_X�!�~�vb����:�:n���#,���%bY����C�������m.�������,���\1K���Q_�`U�8TE	$!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re��EQN����(�I�Eu_�!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re���	�W�j����]P�7)
7& �*����@E8��@�[��`Cq�nG@U������p��8P6"*��6�@8����[��`q�"l? T�����
p��9T6*����@8\��V^2��sA��(#$,hre����&7�)#$,hre��MN������I�49�2�a=�t��C,�g�,���&�:��z��������Y�!�3Mu�Un�����f���&�:��z���y���:K�XX�4Y������U���v�@E8��@��7���@E8��@����`q�"lA T�_���0A�H�}�I�!�pd����!q��(C$�:�$���>�d�Ton3e����"a�'A�|�ts�)C$�4�$��������'\�4Y�!V��J�XX�4Y����|�uba]�dQ�X�m��u��uI�E����9@Oba]�dQ�X�6��:��������.i��#,�Kr�t��nn����o�!�%Mu��uI�Eb�7��u��T�9��Cma�
S�z�:�$����)C$�8�$��8w^�%C$�6�$�i_�%C$�4�$��8>���|�	�8	2D*���d���"a'AFH�]@$�)���d�TVw[2D��N������ C�su�%C_���vKFH\o�}�t��z������h��C�~.v�I�n���C,�7�,�����]�XXo4Y�!�y/v�{��fW���m��u���F�Eba��dQ�X��'waq����C�t��]�XXo4Y�!V�O�����O�:�:����CmaY�%C=vpd����"�uY24�"����!vpd�T�qd�	;8	2D:�qd��L�m�w%"�uY2D��N���o�� C�c��%#$� e��V�[2D�~N���m*e�t���d�t��cQF�	q�O�����:��*��J��&�:�j��c�!�y?v�%�uDs�0u��uD�Eb���������]�XXG4Y��y��m��u��uD�Eb���c�!V����C��6~�:��:"gI�XXG4Y�!�~��]�X�6��u�u�|r����hb(e��(ko&"a�'A�HmG���uY24���c�	{8	2D��8�d���qd�	�8	24{[��%C$��$�i_��%C��z��!���#KFH�	@$�	�8	2D�W�[2Dj�.��X=o��<������������]�`��������$e��m��� C����I������!���g2AE8���HP����L"�PI���xI���t�����/\�	0���P����H�&�8Y�.���X�2.�
�X�R.�<�g_vF
�T����t�T�I��u�T�I��v�,w��Hyk���/�~�Kl^J��[m�"R���OV����/V����/V���5����^a!�J<Q�O�J<I�O�J<I������)�b����c�YG���^��l_�C%�Y����x����*�dy�'+T���z�e7��K<P���x�B%$/� �J<K��x��P�'k���=U�j���^N%��4��P�'�K<Y�/�J�X�/�J�X�/�<��H�'K%��H�'I%��H�'I%��H�W�R�W���x��a�`EJ|�9:���~*��n����b�HI�T�DJ98��'R��m}p"��8��L�d��A��j��[:(����N���Hin�]��r��8G��V*�GYJv����Pi&I���Hy&I��H�&���.K	��T���jpT����kpT����l�$m��H�&���-KY��'��������o)8��o+6�B����o!��[�
���5O�+4����o��[@
�����- ��[X�|��%+4�B�<�
���Y�{��������>���'X1��,�>�
y�d��IV��$k���-���X�}�>Ar����	�{� ��O�,�>Y�B�'Y���m9���_����|2*���%!���}��>�r�����I�{�d��O���$+�}���'P!�$�>A
y� ��	R��d�r��%+�}���'Ya������;ui�~��r~m��5e�T�dZ���������@ }��J ��6�<�Frn��j6���jp���j�(��_n)���e���v��d��^
���k.b]��z��t���m��,��o_����~%e�4 ��$����Y��C,���Ea!�&K:����d��o*u�l�t;��u�u�:.���o]�������u�����i�H����RG��m9��:�:o���������=�m9������������?SG�W=og'�������ol�#����3�V/���u���/�������S���y;�u��|[������o�y�{�Oc�-g�p���o�����w/���ey��)���J{m�3��#�Zm{�y�u���[��:���]_:�����Ce��maQGX���,�����Da!��3�R�O��L���v�h��#}��E�o�\�K��It�}���.�/������;�2@�����PHm]�������4�
p8����P��P*��p�8P�t�T�Cg���Z���|�3�{�g�S�z��/?������Ou�E_~���tV��Y�����U�y}��A5�%(R�^�P����4�M2D�h�� #$���.��G�|oc�������hO���'��sO�������A�������b{����>�,��^J����4k�����ci��'d�Dp$�����������8��;C�h��14���F{-���>������u�L�_��S{|�E}�oGa�_�����~K���3���-�������i��3��2T"�u��d���3��
2B������G{/���NA%�{i�L$��ML}��C����Ou�E}�/Ca�G���T���u}���G
�]��'��N�������*1sd���2�E2B�h���!q��W��h���2'A���O�������[��?�H�,b�d���2�����J�Ov�[�'?u��,�������S�����O����H����B��`�;�I��0o��������s����O�[��?����;�d3�5���	����O��3�h�?-��7����������N��yv�;m��o5��g	����R�N���k�;���/v��f���R�������o���h��k�t��u`C��>��6U!�l#�WH����������c��}�u)�;��+6D}]7��n��{�!c�!�����>l�9��
���8�B��m����C�
��{v<'C�����5$���3������s�k�A[B�-�����9�5�����u_C�,���m����2��#d�3��������5���z���#�-1+�l�O�����6R�c	����\WFn�T1O�9Q�����;zh��=��{�u��W2�����M�>��� 0�*F?o���������+��{k#=~-�D��:F����Fm��]["��kd`#a$��s�����W	U��e�&�Y��]Wdv�Z)���<�~NU��]�oo���|����*�rYUi3�\�W�Q���b����e��t�5~Y�T���
d�e�`XrV��B���������y���9�d+\����^�Zu��B�u�k����
�t�PG���9m�������k>�*�e��B+#d4�����gH���)o�IFa����H���^5R�q������m���*�~��!�
��%ME�t]���3������X������C`�"m����P�Z�]��v���kcu�����h��v���L�z7z���}�X�^�K����V)IY~o����&�G���m�������T}3}��xtn�c2B���7������L/=L����������6i1(M���I�t����{����5��Rz��7��"�k�V�����a��s���d�������k��++��I��� �`_��Lx\[R�26-��s����.��Fop��������]���&u����:��u��f�����u�sl'SfT�=������#����5���(pv���L��>�|��b�fw'�PH���_�:�k�5q�� �-��@=-��>����'S;Le�fo
v?������/�M��r�!�r�y;���r!�D��V���e�
o����x����B�6C6�j�������4T���tl���OvRT��;�|D��}qn�h\��I�KH�!-]���
S�%��gj<���!�K��*�W��ey��%>T��CZ��dg�Lu�������%m}6�A�u]B�a@!)e�T���(�[��5,������ED��Q�=��m��z�,��=Te�Y�{:���/>���h�@-��!�T�5����J7��1�.x�('����m&v{@���4@b�
�6�2����w�9m]Vb�n�N �\��+���x�
��T�r���u�vmq��bC.4w���G�j���>r+/9���l3$�Y�����9���p����;��>��J� ��t��(��y��H�����2k��&���5BN�v����rl3����g;�m��(��������
���m>��?���xc�'��p5VN+���2�&I��_��[aHi�����M]=�_���\������"������Q�y�10������ojub��&���"��!U�N�r��������pm�;fcp��'~w��G�����Ik6��0�r��K��-d��HE��qOel�����3�
�e���m�p$�����6h���%O���9�'P�Y*�xR1M~mO�3��N�Ok����j����o�������K�R��ZOR���L6��c������7m�
�K������L�{6'N	2�������6�?�8�%,���"�8 F�T��9����x�1���1�$��L<�=�/KeF&=lJR�v��,�������W.��3��m���4�e@,����Y�������������Y�y�����cve���I�8���R0d;��z	U�a�o�$�b�KX��fG�c�L�����'�s�KX����h������L`�X]���kj������Xz��Dt��#��#�yA��V��5�8o��,J�'o
,�en�(��L��e��� &�������=�de�33����m
�K�����Q��-8����������bW�f��2h&�L�j��|�Y�f{6%���"a�����FX��r�c�g��K�%�$��)���{�m����\�{cbaG�M�"I�Y�e)Y����nK�����J�����Qq����)����������,��pi�N9�DT��C�=��"i�iFm��r�����cDi�r�c�g&�d���<3RsVs��:����8f�}��9�G$�T��
;�[f���F���%z�����g��*��h�����\��(L�qMOxr��e����a;��f�����v�������Od��T���c[^�`���]aE� ���\���m	�H����;�(���,��~�������T�cV�,��1��D���j����X�h�6J3jg2�mI&��s��;�a��*�iI��oac\���**���.%;�[-Ck�����~�KkkO��5�Vi��1���=�?uK�N����*;��kJ�)�|���|�����:��)e��I�
c!�|<��n�����m��v��y.a�;@6	������N�6�������Rb/����dd>��j�Ce������1�+�H^����4�$�a8���;�[<1i�,.J>�?(L~2�;�&�B�GY,�
����O���5ZX��m���e�C6�pGD�q�8��B��/�'����5ewwZ"|";�H��s�a��3��ZcB���v�I��bv���h��Fj�nj�,/9}�K�>�%Oo��8��^aI�u|QM7�d������)���Y��>�$����R<��]r�$�X}��~EM�xw���<]�q���c���4=�bQ67K~Zi���P�o1��3��Z_�������(y������t~H������$e��c�avrxj|M�n>�����$����b�IF��VDj���H�S��A{�W�o�C�*
�2�Z��[S��o���-���tD�P�J����e���T�k��3�6u2��V������Jt"j���4H����}	��,F�3w=/������|*]�YaYA\����cw�aIR��H9a�"�a�]��|��vj���ja{_�z��w��B���amv@�+.�������J�,�Y��*]c�W����6|���(��w��R���)]C��CK���Od�R�yv@zCv@z�8���
(5��I9�E0��D�C�zcV��O:�����X1W�P�;��MQna�����_����y��y�`XYZ�cq"'�����8.AS#���D�C?&7�����v���Nd9�V{�{�3.
S����9
Cd	�mK�����~3E�na�DNy���G��D��X���9_�`��Y��9��Q��Y��F��D.r[�C}�G`.Ndqc�6���,��D�C�Sc�5w�qs"g�!lu"�4'r��~c9nN��M��d2'r��N��I��D��'��Y��9������k��W��A��U��n'����S���#�kU�}��%�"aa4�F���l�C��b��])4���b0}�V
���:G����dfo.�/Q�f\��%�M~aG���QXA��*��>�j
&�{��a4<l'����Sv��S�U��)������a�����F�E����$9�9���>@=�~���1���<O^���y	���'m���d�C��Bq�,���'���W�,!P	U���Wez\��{�x�z��f\NK�u O�Ba����wi����������
���}X	���L������@qaU=,o5Q�V-.���ebW��������8�e1�g�q5��&%�(5��y�S^u�6w3Hj[2�6%	R�i�a�&�v���V?r�����
�����Gn���f�������@�1�J���a�G�Kfo��p�/O4�k�!]��t$!���)��
����-���QC��`��V����i�����@��w���l��������%���*J�������L� �R��2-a�\2�t����c��>�����*v4H,[�Y��I_q_����*��:��"���l����?��t��`��|�O�����^�a4[����o��?|���h����?���������������w���?��������������G�������7�����G�k�����������~�M7��)n����?����~���t����n1`<���o?~��_�k�q�q]������2�{���R�"�
���?t��������g�w������h\���}����/�����������/O�8�z����\���&;o�2a�q� a9c�<�V9���hN�����G`�_�NO�� -j�~��A��������\����*��7k/���!�1y���c��,a�cC9>mfT(��bOU~�n4F��S�2�-�TL�n6��a��>���/��7�!������b_��0N.�d�0�2�!��t�]��J]�2��!,!��E�_N)-6?������X���%M]*M���n[���p5!o�!��-Y�l����|�wa��"������*i�1���)������'��	klb+�0���9���}"��'[�|�lNV7U*�Q���o��),��a�6/G�6�)�=l|��6���������L|��(�-�y\s�v��;Y1�y��#�g��"��^m4��$�!����q$�%I����{�%������l�����#��<B#�����;����c�����m�l�����%����1�8OfJ[���,X�������>�nax^c�f������(gU����B���������M0�?-��n������YWb�GEN����q�5J�m.0��bm�9g^��M�����T�UkF�n���3j0�����~�J���+V����P�&����Y;�[�Hv� �K�����t���/��q��o��
�����pr�<������.����!�m�zAK�N��
0���������4f�-
��b!��.���]V��0v7U�����6��.�����������	�s���������YS�Nl�i���)e��inX|�[c5�
�y�vY��n-ex��D����R�v���]���w|�t�S	���"a�6Y��6��Ys�9V�H`����D������<��n��)��2�NF�U��DX>����qh�e����1�����*�G�M�1��$����MW�����Tm7�[\�cy��D%����� �(A�&����7���e|?�&���P�b�lo�yZ���t���ZVTxg�����`.�-���8�0��.�����m�` ��+�].�$�h���j����s.��K�0�T�\��("��8?�E�s6|(�p4u����j^�0��%'�!r>��� &qy�p�x�}�����0>O�����n��~�|/z����Qle	��z���f�}�N7�l�<9��T��3g�x���=����-+^�~jr�?q����6��c�}
S�vY��w�|1������&���KXZ������������r���I�#���aN�4�iI�������iI����������4m��>>�m��Z���f���0��K�u�������>X@�c��]85wOSH�C&����}�iI��(uy�z,i�Ri���n���i�1�[��	�)������9��z����y�]���06{S����=�r"���m}����1_��foJk�8�������@�O��8V�"dg]03��M�����)������r|1O2�+g�e����"��)-��
�!��s(����?�[��v���lnBO��a�NS����q�����4���x,a���H�U�)�}	cu�E�.�����
[[��ef[���%M7o�/~oT��A�:<�)������'R�rL�J��Jf����a��>�����v������W�4���J��[��%���v���������0Z��������U���d��0&'��'�YwgS���u�if�%S�r+�o�f��6�P��D;�� J��=���<%����6����,y
������a�%��6�ry%�"��O��=O��U��X�h;2���z�mM&�m	�g��;�b.����%=�������93����H����$f��0+>4��w���pt���A��?j��f�@�A`g"�,"KO^���u�:�.i�0yOmI���`O[nU�f/�\Z��q���92X������a��L�����D�K��&�.��_�~N5Fm7�tp���Hw)�u�w���m���vL���Cl^c�1�2V����eg�,������	��F#g����~��9W���5bn�HO�{�V��z��,U*T�FV���R�����5w�S6D�@���t=�9I�x��>����9�����9c{!1g�KR�R������{��A	���m�:W�r�)�-����y��������,1v�;�0�7���_s�)�C+3�l��y]g��t��T�EC�v�"�l�����q�"�����
�u�?��"��/m����{���!6��R![��
�s���9a>&�K��7a�zL,L4������=	�>����x�VPKs����wk�
I1L\����]��6���|]?���$"{.5q?����;$2$��*��Fi�5����]���jU�l�v][�d)�HY�  '���89�;F}��y���B������5��D�3�u,��2R����R�������*��e���:���R��M�T�v��h��j�(5��u
�vO(gKk�]�����D�c_pl��9s=u��S!|��,:���X�5'w�*]���GF��%�����r�!������u*3$3���9b���]�b�g��uj��
e��Y�,����+��e�k8bO�#tj�b�!	��Vux�aA�:�B�}6�����Pe%>��}z���"�!�6]���6��:�����6J����3�s*���v0�$d+C�F����fE���V�=�P�0�������W�=$���V���c��ie�i}���w���N�w�uc��}(�w�9��Vy�
9p���r�b�,��B-��������9U�w������������|��>��4��e�SQ\�M��(x����=U�mf��]��[G����T.7�l*����,$��f�Z�#�v/�h�N�-��mq���\�|�����S�,���N`�8�FZ���&�Qhy	!�!�F����/��m1
�S�O��HY4���uJ��-)T�+��������������2���-o�z�]E����P��9BJ����5��&Ecdw7
j�o�u�
W������`�����i�g�u��2�`&��I�t4D����S��|����4=�B���n!e��������i	�.y��X*��nz����&�d��c���y_i�yb�0�Q.K�)�>��iPX�r(�Xv��h���e1��oj�%���60<�����b�CK��Ti�]��:�
���~�������sH??��%]{��
�*�Y�����K�m�u��s5�\�}9��'�O���?����g����e}������y���]����[���[��m[��=����������������?�L[�~�r�~���t��Z�nHG�nH�����=]7����"_7\��uC���}n��}>���o��|�������#_7��\7�\�J-�
����r����[�~_�����G����?�X_7\���z�������z����[�n���uC�Q���~�~�����~����_7��~����_7�������~�p%�u�����|��]���=�x��[�nh��uC������z��
������uC?�uC��_���������W����J���+��
�����w���q�p|?�����s;�����~�o�u������8��������y�p�8��|�n�����J���W���_��
�]������~���u����c�@�������u����������~����������W��.3�����J�&�*�����|K�?6�2��~���p�o��uX��OV{`�-����z������Ub�+<��Y��,cY��%?��������!n0�!| Wt,�8n�5,����^��4@�X� ��hH@$&�����6���Y��B�!�����jf���o*,(((4V�P�X�P�P�P�XQ,��������H�x����[�6*�WTTT T&T,�d�p�|W���Z������Z5F�f�FUG�G����5h4���1A��F
k���f��(4Wh����IC�fM�=6�WjS����&PkL����E���
1[e4��\��f3�&�;�z4���;�Z���M�9L4�����k���������%��	�� |����f<us
(�0�yX�}�Nb������+�����b���YXE\.�f
��%��v��\�ncxC^�Q����g/t��a����a�v|�9��)l:������y6���C�i�l�%������v_?��v�;����N;GFy�Ce���������U�q��nN��f���<��SI�1zyv�ZX�i�`yk����)�����:?�\��y��"�����;�k��Y�q_��l�d)�Q
�J/"~Z����0{_��7M,���[�Q�{X�R��p�(fG�?��r0����������
9���\o,�����S^+v�a�Y�;��b|$	;�FS�D�]	<E?na�,�)��lmy^#S�����x��
gV=��<�L�����"�4A,�������vD/X�x�+z/j�.�k�)f\�����h���N���mDp	�`�x$a���-���L�&�(���Od���W��7��J�^�.a����������yXj4�(�=,-�y�����&����I��<^bfK�la��bW�;]�0�L�@����V}�2�/���J$�!���%���������R�\^
`�9@�e�h:{./��%��=��$���f��l
b�I�X����U���=�x;���3���Kv�|����V��S��P&�	7e�,��J�*}��t�����}5�s���s:%;G�����a{��Q��?���}��+N��{�8�%�F/@=����v	;>����)�5)
��N&Zo�gE��T�SZ�RW����B�M|W�����x9�i��q��B�7%*NEN���f<vB����e6�3�����YlR43��e��4����sERn�;2���E���z��z:���m�!�.a��^�����<	��"�������e�`<�b����%&}�G����[���j�^��O��9��d�dm;�u���1��s�������~K�n���_�2}GEep�x��T{���u,���P��(���2T�Q���S��\�2T|�Pe��E\\���G�{e�ZDx,h��PQi���\Q��N�(Ke�t����i���R\nV�5��N9��.3N��~F�#��%�xK��m^����{�����[X�~�*C���Q�<U����_��0��X���T��o���f1P%�,���2M9��gv{�i����|x�s'���W;��;wHv���w�s�d�^�Oz�����KX���)���}�:;�!�:w��!�s�;���srW��������y��T�tJ;K�A�^�8��EZ�:��sG��2����6"i�X�s�<���;����]FrZ�R�gcv?��6�"Cl�s��R+�Y�����f��t���s���L���/��a��=���W�����3��	��L3�aj�4�)KS�^�'��"���/e�NE���h�+Iu	�y��{�u�J���������=E�K�����N:��fu�:���;j�,26?!�����s�6�����:�jkf��W�������;�m�Io{��!�����_�������;��H��Ix+�a�~��D����(��|,�����iy^V\���g�������a�2��*��=a�KX������<���`0���8�"����c���S����������7X��!`%B����s�Lk���Y���J`��?*^VOu��~y����9�X��!l�o���-�85Ym�)��1.�V�r��^�p�5jf�Yf'�
�X�������l�v�h��8<}TY�0�c/I;k���9"�������u��n�R�(d�R�L��v�V+�7�^����3�K�����'�����m�����ra�6����O��l��G���w�6�k��~�L��E��Y'�����%n����>&;\����pR��>6���6v�Qu�,�HT/a���n�>6��������.����'��K�$7�������{�K�;��{�M3\����eZ�^��y^7��������p~�����������%���k��;�y������WN�`OLO��#4g�4����2��i���y�k��NLh��/'��Q.�B����}�3m�V*�����0������\Kolk����9�_.l��Fp�����4�m�}|���c���,��Y�<<��O�����O���7�U�V�.�o\l�gK��KK����Ny�~��c�q9����=u��Jc_H�,�4vA4pG�q�z������*��)�G���D�x���Y0����
���}U�����T[�m���dk��_���`pX�����N�������}l\v;�������x�5��U������h]qyn�w;��Z\�c��#.-�w�{����}�H����:�'��xJ���Q�|�:���O��\�������J�������{,D�����ht���%Ct�|�&�j"������:�L��>����'��91��"W|mC�"��n��@����i�$NO2��DNn'9�r��1,�S'�'����Sh7��1��d{���v:^�2��������X�<�g��Y�r*�n%w��U�LD�=YId"&K�2KD��DI���>Qce�H�ul��+^�c�u����\�&S�/����m7eK2�:!:�rFK0�������4j)�kK�:C���q;�Z�����!lv��l�y�+��C��q��}����fs}���u��\�j.��Q�%��/��s����h&2��-I~�f�c��v�����q��Uj��������g�3m��8�D���1�e�iG�Y�4�;�1�e��2�!�\3�������k������|Zj�-Wn�Z�%�=��l�����jU��9sr�[�����[l(14���Wy)�[�m�l�U)k�r�Xc;�����m���"*["�����p�sN�jRu��s�l������%=f���mO,w���!�R?��=k���,\���#���k�!-O����g%[G��a�b��sY���BR���l;��a�����o2�Vo�1���,�$��C���	_K��Z�����*z&���1����y�����^j��D{g�pM��C�6����U��6�S�Sn1��;�n]����5�1Sld�H��"sx;�80�x��e���d6t����6%��y}3�sF���h�aZM�#O��WV�m�at�e�!������s����5����=�;p�����J{�9�3��>�����B[��k����M;*���[�~��I�r�}Z���m�i�
V�����eZ�^���Zaq�D�
&���Q��g�>#�.��l���md/g�<���6T���������_�6QQ�jQm8v,"i��b�"^�a�d2G��\X��%,z�c��Z��Ue�;.�n/U#�<��\3"����K���?���g�f���-�l�T��>��{;8$���v$�����r[��N�}Cb:<q��f�6�
�����Bf�Z`��
Qk�P�.���UKZq�D����}C�[���%���3�
������{�~�����G���}�����"����A������e/�&��fi����w�y1�!���hf]���d�$T����I{���E[�b�:�_�|][NRq�������/apl�\��$��2v�mv~P��v&~�C�MX��~3��D5y[[U.3���+K����C�P!u�����l�����_R��Kwkd�F�#c*7`E�U3�rf����u/�
��0\��|����T���q��5[%W��������AS1���=���'~i`H�ga��n��m������:����5���i��G��wh�����
���O�f�xL�c	9�Y8mS������;<��
�GA����b
��|Yh8���y�Xw��at n
�a���3$����:������i��<������B,>�R�������zI��I���	�?����V�&6�XW���:��e�,�~���6���w�������l��3�T<�[��#y����?�?9���l���D5y����f,P��|�����!lrb?��`<�c��Mih�M5f���p�3�������r<[�c���zhs�t�����=�_�|����Rf+����^�l�mj(i�����U�����n!gr���9��nUR6��eh��x.��l��<c���[�)��a'����)b�^���!4]u��Fx���k-�:��1�l��,�m�]0��rm!i�!������-�����i2�aKf�j*�H�jy��3�P����dU�3�^e>��7��S��y+WY�N�yq����ni�� �l'����T{�YJ��'
A~o,���6;t��X#p`��h�~I������6�n!KE;����a���d��a��M��wK�T�n���o��:�3�G�r�k���P�-�.����9Y��[8���-���:�p����d�v��&�l���6[��8��"���Rf��{��4
s�v�0�n!�#�s�c�[���������C���S&�_+�����o��M���(m����g�����3����(Oq�n����.��-}��������|�����1���P�7�1_�a���r�)o[�w*���}������ec��M$�i�c�kY�ecV4�BY���*� 6�]����3d�O5O��v)E�������a���`�gY���1�����F>�n�z_S�/n�,��6�����y����Im2��b�1e|�r��C*�zg*�z/�Q��_�i�;|���&7���z/�WZ�9������L��l����`���6�D
�P�L��:Yu�T�2���5�c;)5L
D�@e=�������b���M����z��9`8��;{K�����E;CjS�tz���(���#>���4a{�6����6�t������nm��~�o!c8���IA�[+6���XxRn!i��Xa/O�62U��2
��5�'��*]�^A��gH/�=�+]+�C!�y�P:c�Y���:���<��,����{�t�)Okg�Pl��z���qWZUW��n�#u�G���#���#0���r����?5�1fD��3����P������S���BP����`�8f�uZCJ����h����T���6C��S�����6�S5n^��S��������?U:�x�q��T�5�����i�|<G��@!l�n���h(@��`�!����RfZ�?���=���$�k��S��1u���?UNz@����?Ud�"d��\�s���E�������)?��rL��MP
m�2���n���<A��Oy�1j�%��?�q����rN���[���q��T9�?U���*���<�7�R�hZ����a���_(�gsW��vlw������/���*#����|7h�����Uy�3�j�x���[5���t&�����U����'Bj�!^eH���_�a����q��������]��!$Tv�8�I�]B���]����2&�j��
B��#
���V�du��
��kx���-d����W�Y�d*�r��_��������ZUQ7�:S��b@�R���!h���R�f�(3�X����J���RW:M�v���j�����l��/����1
mW��gi*�$��n�����iK	��S���m����-�]=�w6|�:���jGVz�QMO�cmb��]�oIe�%�.���:&/����,WH�����*[e&#K:�\\��������#K:���g�e���f��I��)�Y!us_����X*���R�ZlK�������a��V���U����H�������1e|�>C�C%�.��������
n�{N�b�uu�d��i�d�k����9l�e��=d�}����ZcZ�����7�+5���e�-���'���}�Y��\��V�Q���m�"�����7���T?���m_���PcR�M���R��n��jk��#f;b��_���������sAhm���eS�u��u����;��Sw}[7 ����I�6�����7��	���I������^����!���?�m��b��ocDlj��!������.s�'L�F��T���Rv�,6����p����L��Y���R�w�:Nb ���q<���W�r�)r��.
'���8�a����a;g��p���c���3����9�n3��J�n��$�8@�/NY��2���/8��C�R�0%o8���3 v�Rz�������7o����D#�C���.m
��3P�_@`�dGK��W;�-���qOEH�T����I�9b��5�v`����vRJ;O�q]��C�X���|�I6a��
~
U2�_�prW��������T������5?�����oI���8�V����[���$���Z��N�����Vw�}C<6^[��!v���;����}�4�a[�5#Qq<�xGn�^����=��Q���b�sZ	��A[u�0�g�Dx	�e��c��M��*�l{$[��ma�F��[jB��x�CC+����j���v�#��b�-&�m���1�S.��c;W���w�#�oz(D����:?<�*�a�AHY���1;����+N4�$����f�����!nK�O����]���M!r�n���G���T���U���|9(�?�&~��T[������*��2�cO���[jz�>�#����g�������� U�����X��^�vP�dW�L�}�S����A;+m�;� `p0wf��������k���
�3��C���T�*�sf��c��I�zoTh�u[hzS�j�4��gy�br�~y�m��X��L��t�~���v�!v��������b�Um���Y4�^�1��_���"y���N���9��T"!�*��5��2�w	���m��*\�cM�X��+3���ND������+�&����~�L������lls����v�f}�]��������|�z�Y�q�=��s���v5���7����=w�������m���u)����o?h��� ���b�J�%~��UaXV�;�Yg{�������gvb�"z��pl(g>6�q��)�����z9g�����E�Uv�����P��R�b������B;r��d���&WSWf
>f���QT@PQ9l����q�E��
2������C��a6�</����P�ircd�lR�	A�%p��1���<GSk���4&t��<�q�i2�
�<C�����r��O����������:���No���{�� ��kH�g>�����=�q����uik��S��M$����s�n��<u������X��cE�'?N����������|������I{�,;rH�?VK�<��W���_�����03�U]�Nd�9*��%��D�I%_�����8f���EY��Fq7d5L����6�|��g�x��-���md�Jwqu\X�3�]�<�W�x�8Z�"�	�u5�v�v{�����x��,�3kq(�����N�0
<�#D�HW�8��N������r�R����v5_�g����V:��6jh����������Su�K�f*��nc�Dj����T���������b����,s��Y3�f���b��;���K����>�:=
!I��k�6$MA�Y����,��,X����)��/�0����8��WfU�V��,Ao�������wBY5���:#��G���Y0����� ���
�#A������L>,;9��C��W��X���g%Po��)w<O�0[<���E]-\	J�
3�;&m�X��S
B��h[��`�<��XH����N��sG��%�M�A�M������ k�Q�-�k���0�=f��L���9�Bw�25��j	�r]��|)��"�,L�����y����U-69O���������XzT����>]
��S&\(���������f�wJQ�{^�t1�����)��7����({L�!{|�Y�"]-���;�42���)��2EZZ����Q�w���f}k���J�^�����EY�I�oX5�����[���E��p�o���|&��#f��_�2�~�D����
����b]0�~t��z�����qy�F�93�Jf^��@�c!|4'+0��{f^(b3vF���y!D��o�����������P�s���G�K��i�gF�>z�$��ls\�I���9��@������g���~!	�~����i�O=��n&��zv��kv-5+�:�\����G�����2?��<�-������c	<�x]��_To$�i6ddF�*jT��w>n�{E�H���#��+��#q��o��	X�2�n�~98�.��M	UwU�Q�Q��)3L2L�(�P8%���Si����<=�����f%�a|W����;Fyeg�
�0N�YKuu������g �a��"�-@�(��=��2[��:�|��kM�}f�z[|T��qfG���O��f��,`�g�F`W������~!��~���r�8K��G��e���zV|�����,�{�����3n���][��g�d;�|�l-^h�|������3$?�|��G�X
����S�L�<y"�B5���=C��NP���n���|0�gh����uc�)gW��d%&�����U��
�B���u+�Q�������s(hl�����Pg���l�zg�����|��~���J���~Q���g���Qt��?�H�����V�DVUk�����h�����a�j��c������|la"n�^W���m��l�&o��b=�Z���������������0'�Z����2�1��O�(����?����|��3�c�������|4�,P���RS�Fgk��j}@�9������EP?�{f�/�����gp��Y�Js���{�l�sr�aE�
���^~N��4�>�D
���p��
���W��:g��g	a9V���F`��x^>��;
C��	��s�{��S�P���I��\��eBRg��d����Q��� �Ik��O�zj����x�����u����qs��/���/-0�6���V�C��?i`�_������w��EV���o[o2�*�~�A����kz���*l����u��_�6�����~�n�PW	������'��l7ev`v��5�$3���0q�{1�w0��J���9�nq`�V9���lAb�3b-��o�r����Y������{�>3� J������`#lgZQ������E�d���_�h�}�c4��>���������s�;BJ���'q��~<O<,��������VtZ�����8.���������s^����#e2�'#�2�*#�2�-#���aFJf�gf�f$nFg$tFrgK����L�d�HmI�?N�hOm���V�)��n����)����g=�����I�������I����a#16�d3c6�g#�6�j#����F�m��FJn���T�'q�'����H��D�H���H���H�s�. }8S�#�8R�#�8R�#
��$Gzr�*g�r$1GBs$7G�sKz��L����H�n	�?N�tO�ni��b����zi���������_�H����H��D�H���Ho���$�	��=���V)��n�R�#
=�m����>��q�����8��l{<��S���a��?]���A�'�Q*���yt;X������x����n�K���n�`�1�"��@0���pc����"�� :�"5�B�������E���A��XP2(����4��Ru��Pi�7Tjo&�q�������`Xfd08����%M�
�53�I��a�0{��8spt p&p,p2p8p>��>�[rw�7��f�n�.�����#%�&�9S8V:Y8\8_8bze�hs�p�t�p�p�p�p�l8�����e��U�Ty����B~�,x'�?(O���y�����n_J�2JDV�n|���N���V�Y���#�Q���Pz�q���������}��=a)5��V�8����?�q��gbu�����������"��7�a�iLy;�=�[?����K�=����V?�Y�!j�L������s� ?<{�$����<�[B
������{l���L�|�����)g�#��Z��3��6����������w��vk��%nK�^�a�����yZ[��|Z<���Y���3zTDQ��v������UP
��u��yu^i��Slg�g| �>@{�?_M�8��9��C����,}���B�]
�+���
����G��r��Wm���4�`]
Z#���zm�"�R`�kte�T�����A��4����1"��+��&S�������[�g��n�\����l���ge�b��u)7W7�����(��J���\���~�v)m�2�]v��M&��5P��^�t�(�.�J�y�����vJ+���s�gf���spb�@
�����)�I����3�� �-�k���(h�RS�ru��GJ�L\��Y�(9���*��;�wa`�p)n��"���8��/Z��>7����t��GF������Mf{�@���ks�<�L�&���&��uQ���b���Hb��?LL��^X���#���	��V ���T�]�k�'�����g#��E���9x	��������!�T������)yRH��vvfP���*��v�eX���c�7nE����wlz)=6-�0S-�DN��bBT���D�"�V�m�"I�3<��$�;J�:����bO��l�&n�����1h-�%�v)��2m+��v��w�������Ep~(���.2��������d��;H!�������1�K���i`0�L'@"ZlNa���T�o�����"��+�Po�/��]��A�NWlK.����b7�/7���"��s�~�����N��Y��g�b7��T��-�mJ�29_���+�*�B��b���w��afXW��}�������=����M�0�<��[���5_J]������*6Z�x�N�R{�"�����{��q]W�-s<��Q�7�����~���S�-9m�0�a-��w��4&�oW���^?#����j�����LG���c�%�Z>�bt50}e����������8����}�mY�3�x����Y}���g
�N�%R�P�~'�([a����Q�\�;;��4���/~��1v�u����1���3\@����l���<ov��������e�P��a���i���g�����L��U��3�>hL6�lI����e����=��x1#���&
���m�sl��|����{/1�`K�QK��r��Rnl���{y��a-����S���(#^c�h���0���j�u�W����)�9�^Y��kpp�5Yov
V��HnX
���k_N���h2���>�,�T)L��gyK�l��9�����9R��eR��az��h��Z���l�6��2���O��������
��a����.i��r3���Y�NY��m7���������\��`��~0����,�����K��)T�_.fv���Z�.a\��S��X)�����k��*��+���}�Mm���h-������y������4�]����!
��?��n�����D%��p2�M���pZ���9,�����)�������/ei�V���%-��j����QMk����h�_�����eG�~�-M���l��h`���Y�/�g\v3��2�#��d���egA����8���I'��v.�,�Z�9��%`>���D��,sq�F�5�:h6O^�Y��%3&��E+����������5���3�?�GZ}�X�ed�,'���5}0_����fz�s�8W09��4���r��y�4�H~�'����8���U��l�=�o+/��o0�N,��u,�/Zv1e�I/��t��?-���K~)����4���=�Pn�,)�p5h���z���j�=_����r�4N_~G������N����<�g��K;�D�x3�1����o<���������)
�$nA���B6-*���`e�� �J`2���e��#���vZ��{{�9���.K�o8���=��	���$��"���������zq��{��H=�������Sya�l���p�+�
���h���,b+��P
-|�}=���\��N����K�:�y�� �hk����_�Uq��1�g`!<��2����l]���=���G��`����r%M|0VwA#?'�Gh��N�^PR���k�i�*}A����&���@��2�zhg�1�X���	BU��!&�-�,�Jc�U�������)qL/�wG#J�X�K��2����y��&��T���}~(�uX!�g������Z���^�'���r[���e�-u	�m@����Z�A��|��FM+_����<2���Y�����s��nz�6�E����|�4a.����5��tI���-�=�
��'���s~^P��;���b�6�����<�N#ja�c|Y/Z�20�"vk���\��RS���>[�\^g7����a6��X�<%/)��e���WA��0V7���������6��D��e���h�x_����9�7�A��.����/+4�7ar����a�*��\e��:���S	�kU�W�&L��W,cZ�{����W��f��i?�(��1
AZ"���H�V����`�V�g9��Y��
����p�*~j�����B�#�Y���������b�!�[�%��r~�r~�j1�.�#���W[-��]9��E�}~D5I<	���rI���u.��:[�J���H�%��A�X/���
�g�_I���|��hmK���v^���X��?&�
�*�P����L�ZB��@�X���PB������C���]+#]�F�A���p�V�����/
���+�u��;}���sGY>�\��E�XW��W���3����v5"��f;��}	7]�����1��K���t�=u��1uPN���8~��5c@��iw�~x$�w���c�8�B�����faB
�X
Q��)��E�+���x�=����#�����y��������:+�5T���B�6[�Y����GC�J��u�l/����op��P��x�V�j��W�rb[D��,��w���0@k�F�I�����^�e���m�/C?����l��B������b�W
��C���Pg��H#�oZ2Z�&i���vn6,�T[R��U�b&���l������h���"�������&i��4��D[]Fw��,�a3k���J�]����f���2�hI�d��7�]o�%���=���mJ�Hpc^:���-��K�vvU*��h�L/~x6d�S�����;����@�Y�W�	�>���#��5��@k�Ed�{����6v������/v�H������x���DXd��z.<[.Q�*��.�vGfnX��?�i�H�F�[&���d�F�Sv��c��?��R4���+� F����4��������
2;H|�-��%t	��6�l��3��~;���� �1G�]4zTkZB;m�oWD��fy������:_��T���(Y����,�.{dd�����
�R�MbW
k5����=�r0�����Y����B��s"��UL����e��6���oV���k��5H��9�?�P���;�i^����6��9S��:���Z�k�N���� ��u�vpM��D���;������mQ��������$/����5��,9�{5-������a�#��$��Y���<��>8��d�����)�zQ�������(�"T���bY����{���7�)j���0�~��]U��vsb�P�}�;�r�Y����p�lo����-T�����^{�O�C�������g��*B���T����#�����d�/{S��l8������f�����P�g��k���5GD�~Q}�|S��LI������ef���t�k�����8�9�M5�%��(�q�0���m�xWS����|Q���V�f�w������E���xW��2����R�������h�^��E�4���c��\��j�t����J�_i��dx@
u|�($FT�2��#��7-WsP��T*�T;8}8A��D��/�]��zS{��j���
t�L��A5'8eUT�pj���E�/*mU�,l|g�)���-}F��	�y������^a]dR���|�H�>
��K\IE��+�]3���w��)t�E����]3j�C�q�9�|9��������
q���9T5��u����U�+��D[��������R�v>n!l�x��)��Z$|WI�e�a������w�t[AF��V
(�H-P���L�k����q���_\2Y}�d�pQ���2o��$��k�$gW���l(���IU�c�-��>�
}`+7���q�d�����+(�;T�FG"��8&��*�0W�9���U��
��6����t���.����q�o��������;jl�o�4��2��x�� ������2?�u��.w4V�b
k���}���O��r�/���4�D.#������6}����+I�;�4��^#�����M>�]��A=�����R+[5�x���$���.w�|��w�w�
����A=���w�w�7��|����u�y`M�e����%r�V�
�0���VH���1�!���;����]f�)�wy���R�����(��N�����>�8.N��R�;D��x���3�y�X�]�5����6���^9_<���m��M������3��*�w��a�P}S��e{{��S|o�����m#F�<����\U6���|��~>P_+�<�����8>�sP
#I���
�]B�U���/>cm�����e�"��r��r�(�7+��i����}����V�0��o�pg\9��^9����w^+���Q��?�)�]�;��X6���/]N�%o��y��s���
�V�HI@��� �Xv�����������r��D*{����r��V8��9O�vj�=���ZCno�-Z�;��r~����$
�<����gK�����T���*����i��N>H����
t��A=U���J�.PC�tv��C5�<��9e���)U*��4�@T��jo
�v��+��-8�b5���GrK����K�����5��(�7��L�����;~e u����$��W�}i�:^��@��_<Q��ox�����&��9R�oCS�ed���4���Y"��zS{��Pqr�0���/�M���T~���tM����x-5o�6�����w>�<�����������0����IGq��T-[r!5��Q�r[Ek_����������&i��[�v���^�>����C}��5�V��p��vi2��N�� ����l�N�9�Bj��q�T���S?�����&HG�E*�7��;H.��P������2Dw�3���{�A>��syE�9I^�������pP�%���B�C�=�Z������iP90y��1�!7�������S����w.4i^��������j��jG]������\�-�|��d��FOS��q�v��r�4.����J�n��������2"��cD�a\�$^��5��>��+D������h!N27��%D���&�&k��	'NpN�+L0���������")�������"Lj����T����G���&�"�2+~� �����-��whX����Q��"��_�U>N�T����������/��"��-��|?�#��J5��N�o��K�7�B.x�
�;@����}}(4����'�6���z�Hk�@wX�W�7z����"�����PMG�^_�@�K�������Q�@4|�>/�����q�^=���[�O;�yA��V���	X�y�j;�p��	�������6�QK+���� �~����H9�7��jM�.8=�R1\��
9�1���=��U���Ox��'OT�V����_B�F{���A5W<uXY�Xl|�%���)\�5������y�5�N�XC^`�M�X�����`�*7�qD��m��P��P�����!&���o�|�n:���O?�����Pq70HCA���/��f���]�@�:*����_AJ��;����k�P�V8��wY��5�P7�x/����u�xo���{��mU�*�v4Pk���I����z��M�V?	OHp��
��h��yJ7��
SF��C�3=Z'k"7f��.-�1�|�_q��`j!�WC_T�w+�H~�_H
y�I:����Y��W���o����������n\j��/�����]����`�k��x���
T�
�
2���#u�X��HwD�^��*�u��1��u�Uw����_P9�m��^lG���6����5���MMuE�����SU*dg6*���y����gE��t'X�`�e�!��#���\g�:I��� ���/�����W_T7���c�
G�����A�w?�%������cQ��������(T;�]0�<YWGi$���#`�L��l�z5W�����>O��+�����}��w�b�oj�ze�eqn�}�����I�L�f��+���r�SN�D���!�.�:4P���B*��P�f��T2�������@�D�:uy.�(���*�'�znq�������5�Q��!o5���24��#i��f��8��c�����7���t?jt/J��H�����������������}=�E������:S���1#�����d��z�|�u���0���wsL�6�D
H������>�QQ]����.W;���]c;\���q@q��>_^�>������[�6o'��"X~T�?S3��)u��I�R�6����\�X�|T������SVD�FjU��W��_������n�V�a9�a-M*���������*�cj��L�oN��.��G�Eucp\���?�|����.D9�H�5	�b�P���c�����%�ijDk�k��k������-E^O�GP�y�)�7������������^T��c�-���R#7s����`��=��4�kG�G���1}���O8�p���������.7��<U����z=������B^��:�0�Y���i�0!s�_Tw���Jf������v����#���������n�����������`��R9_�<�:�������9J5R��96����m:�9��b�U
�T����n-x��e��Z��MeG���^u5���%�����:����r������Q]yF*������_3t�z���o�����}J9�8�7�s��^�{/��X>����
}����������'�]|N�\��.��P`�2S��4b�9s�E���������Qv�j��}��Q�hbN>�'R+�e�R����(�sZ|�"�_r�@ml��{���h���`I_��DR�,+��I\O���7��l�e��������D�&	��b���%�!:7����e�z��R�..�+��m��f8�����z����}/��&-���������w��qz�NR)+R���s
lC(�����)%j���5gI�pn������
�}��q���^�=j�6'�W�F�t��CTNr>���M�6��DN>ch���xu�t:7��wr�H*��n92��~}�8}����75|o���L&*��#�$�����W�6��8y����
��N�������b$�Z<����������;�+$VsB[yk��������-�b�8��^r�f(�d��eX������-���������Y���b�&�m�W�_"������}^��^a0
n� ��^�C�-
N���� ��?u�mC���5�Ex�`����W��q[��l��VC/�xu�y��|���7������Z>_��5sB��l�8��x,�Kk*����[�W�����F�!��5_
�k!8���=�
p�����H����"�\S��=�{�O�e^
<_�@�t���F^2�C��h����C+�U������vb
%t� �*=I�s����t�6XN!;���]�C������-�r��xJ�v� ^ _P>=&`)�B�����/Z�k�`��^�X$�e�	���B�

�	�G�f��RKaT�,����yux�P,�O�E�6����|���s@�x�����q�]�'���b�_�h��
(���:�\e8�i�,��S.�4������N�Z�,o�&��
��O�?PB5Q7����p��f��A���fg����h?���`E-��7-��Qx�����5������/_��j�^q�GN��^9���=��0�86~���_f�C}��6P�O��F������:i�����50_
����&�����%�q�W�
}�����_}�=�q�WAc5����%|���iNc]?k:N/���$���_�����_�K�����@C
a���\���7���R����HK�
mV���E
T��s�I��M� �,u�o�'?`�����8���)���B��x��l����1C���qb��_��U1�5wA�C.�+#�@�iUN�F��&A����c����F�}u����w�r{9o��Q�[9��K��p���hg�%�������)���]�6X��Fm9��s~�	��X�V��rLc*�8���f���?��0=NJ&�i!���l�M[>
�-���m�.ml�_>������2%iM�
��*��Vc���]�
�iv�[�e�'�v��z�U�,�i���.�l�:'Ef�&D����J&�	��"�+�f���+=�G��'0),Ij���W9�������4�3��TRkw��g)p�e�o�*ms�`��9%���F���/�2�g�vb�x���]�����/���\����4|b��!�~!�����G�xA$��pC$�"���uE�������oI������;�x�]i=�~K�������?�����)?��%?���i��#?��O��-?����?�S���)�L������e���e����[y
���)P~��@M�)PK}
�V�u��@]�)P�����{}~_�sI�i�S���)����G{
����[{
���)�~��=��������}��@�)�W
�o�)����@���C�O��O��&�����������!��8�H�L�����S`�9t��7Npu��<]x��x8R��O�������X��S`�\�v���w��zK��M�R��O��m?����o�<�|�}���0O���?5�.�6������Z�_����2�e���k��
�����U!�z��w~�<�V?�������~^�#�H~#�}�h��c�x
����)�����~�����#\zX�t����u����	�����x���������Oc�������@�Q�2��7�����j
�nV���������6y�s�(2
3�X07����o|At#Dj��=(����C
A���@iL��LT,(�GM�Z��B]��Pc�4���7��E,F�1����`p4���2K�(��kf��y��a�p�p�(�4�@�L�X�d�p�|�}��.
�
�n.
��\�]���9G:J8M8Ps�p�t�p�p�p���p���������������1�p����l�[���g�#>{X;<�_�
O�gS�cJ��>���Y�m�����>#��P���'�t��t�`*��a�7�U���bx>}aS�;�B����n����V�^�f��Q�T����Z�~������~S9���NH�����QB|o����e�y�[�PzS���[;�;���:�7��5�����V#��GM��Y�K�vQ�wL
���e)�	�H#R��/�nmH�9z����J��w�j�{���V�Co����v��f�:`i��Tr�q�uPg3�_����lI��F*�<��������2�n������A���n���HvO4!��T���R�~�qio#8�Es�����d��l����,"m��}
�kn��y�����RlRWWM���K�V�"�gGj��|j]����@�UN�/�Hn�Dq�R\���!%Ri]���*�M������g�	�fQ9$�=�!�{���j���.�������^K&�D���^��M�2�)������fR� �	�p�s��x<E�.�zK���"9	\:�N�P��)�v�He������;"�B�������WN����J����$z�[�~������m{�;�1<9��%l~U���6�
a���XH�"�����o"��)h�X�����,c�O��3�?�E<������o!�w;RS�5��N��K�-+����b��V�T�!����4�������!���OXf���{���8����v�HC���v�:l����Y�+{I����������5��B�3���5�H�%��[�Y���-�</y�`���,�����Y��5>�f��*P1�`g�m���N^�W�J�� u�:��P�������;��V��E���-�$�f�5D������QW|��F/�o�����1m�u�B3y�-�$j�n����%���������h@E[�4 �T����P���n0����|7�"1*��'S*��T���T�!�V9��:6���r*��Ma���
�����9���Td^KS��(r�����'�_�GTW����U�t��}P+W���c���97��)]rDr<�-�Tt2!a
�F4�"��3�JV���������������|
�h3��#B5���o�L�|e��&��7����0���M��XS�����Em�:��p>�h�A�8�88��N0���u^$��u}�9
�N0.�L(P�N0b�g�q��e�-�g��b����:y��H�-�5�h��[�iM0�43WsO>h\ac�q�c�t��`4~;��M����������l<���6*�`s�������������S�z<�-&
��9���q�qz9y��6p�,����.g���'W}�������5Rg~��T����6x��{��>�%R��P++1y�y��3�,��`�������
���c��p����+���O03@k��q>���/Lh^>�2���I	~�0�AZ���oP���������e��*?Q}S���[��w�%��oU}QsTM;kj�c�>u*&Tf���h|����8���^�V�TN]v��i}-�=��"Z���������v'4>Q���I�p~Q{��"�za����W\���������N}�-r�F��7�l������H]/*[5����h2ER��;��)���[�GC>Ew�*r���>����M9*J���Hz�(�D�wh�.Q;������
^,�6gs�st'���l���b9��5�T��H�&������+_>�\?�}��}x���Xa����������M�`���~�A����%�+:����wK<�d��fs�eg��l�g������.��zK<�i���!#Pz�����
!9�=�%�cK��di�Z�yJ�'����b�L����p��%�f2n7��s~Qj��i+�m {�3.�Q����1�rjk��,�%P��"$l���d�d�m�<F��i2}f�u�4���v|���hHwiWK$�l��<�������x>�����7��3�{oF�Q_�Y
����;��W��<l�v���E�)r����xH���YE�����g�	�� ���k:%������i��?Q��E����������vN�_������Uy�&�9E��>�@}���f���V�#���R;��z�3R�� �M>�����s��H��e���E�&6O��P�J�Qq/�#�����^���dV3���9�`��2�;f�H�5�i��7�������XW������:%��L�,x��l1�l�	�L���n2Ef���X"�c���7l8Z����fO�'+���T����G�������C��U�}�J���<����BS��t������G2xF���<���Sw+�&���MgS�A��W��N�B��I��/�[7�4-�0FS����n����i��F��m���VC7��V���i�6n����E1�7����.�,���
R��n:$�)�19�2t�[=]��]	SK�U���o_�VYHW[�LDJ49�O���x���$�a�~uJ4�� ���-\����h�F���&Z�O�H�+/�,��hp1�VN	�������B���x~� 	X� O�!#8l��e;��0����NA�j��.�z�(�?������k���l���8<�EI>w�Y+v
�O�I��J�;_��R\�������o3 ��k�r&m��<���;�(�iry�d�x��bn:�4���U*�������Bt*T�����)T�}Z�k}����W��z��r�d��
P��� ��em��������$�C0v�%�0����&/��O%�V�0��@�+B��[��N�
XI��!Z�*g��_�XGhOK��Z��� �Q66.V������^����^!&��*�����2���<qH�i{J�8k���ZM]2��U�s�m���uw%k���KKt� Z|�\a[����L/�� >�)Z����l�[[�-8S���	���"%��s��$���sZ��-iW}5m_���"���!���3t�c�3��K�=��d��lv�y����U�MkMQ
4[��f�ad���,��1��Kb�te��~g������t��0r_9|�,�����i���-v�,�Q���F��(g_A����9��@R��s�s��q�������{��"
;���NwT, ���X�>����.��(��(�Co��j���=xF�	�s��r���\�����if7�����T��z�m�|���.K�u)xf���/w��^�r4Q��3~7eG���\������z);���R=."<���)RN��}�V��U{�����y�OKi
�Kp�����
W���9.-.���-��S*�P��$�;����J�ZNA�;���Vs��� �b:�M�����J�z���k'�@��Z
K-Fq�Z��������-�m����)E�m��6;�Z�,%���l"&b����a����m�TY��������UtC��zj�����o�]��O]_'R}��x�����vo�y}�������Z
c����_6,�/��+nK�;�[L5O)�U�]�
�(u�*wE~.|��U6����g%�gz0G�,j[X�����+ve�F�m���m ���SD�������b���f<��>��x����bt��&�w���8KFR nR�6��.rq_J�W9-�\1K���t����������_��������a��, ��IbL&g�)	�w���K�����n������W0����B��"��q~��lZG��U��W�a������&p���a`2�v5��B������"�������
�p�]<�C�@�3��tB��,_c1n�mQ �\P���w�
WM�
_���8z!��"/�9x!G����1�
�������>���_3E���� �����};H�9�_4}��>y�u��W$P�N��H��3�[�+�����d��}U��V�O#�k���	0@��Y-�����V����>M,o[HK2�7?i����o4eU��7�h���p��M�`��hY;|J��R��:���uY���#m��B~����dH>��X�!!R��*K,m�k�f����	%?fi�yE��g���A��������i��l5
F7���
|�������9��������4i2�����|��L��9���C&�qe�3��
D;�4���:w�V@��Vf<>�Y

�Vg"m�@��y�~��)�N��qS`����E�-�:h��eF��_����:�E����5�'��������h��w����7����}}��9���. ���i�k���u{�.?�L�u(y�
�����E��+��L	��?cq�?����+w�:����$�����(/X:���\��^��o;y�>������������F�]��b���%��v�ZXP�Nx�%����n���N_U�8�����U_X�+�{���/�����V���������8�Z�|�0.d"	NK$iLY2���������V��ia��<Xj��]�l_US2��m(�CXo�\p�������%�U��YZ��0����0P�,��;����t���`����EA_�N�q8�!���am�(w������D ��@y����w~�x������F#����(w�����������h�dUuw$
@��f��U.��} ��a���J&Zy�R�As����7���}��9!���rH���I����Z�.����@�Pl��N��@ypX�;>bc���P��r�CP��_>Q~q��G�ET�@yp8,�E�{�(��7Z���<^������6�r��<^��<�"��q������VG(W���������."�aXD��^gR��������S^�������}XD:<��lW|y�����o���6�=��\��;����@��Hg���gk��'_�|���@�a�]b���y���%��"2k�-@z������W�����~�.N-"���<9y����<�
�HY#_Pn�gZ���[�F�3,"�$N��u�iw���igy�����>-Q�K�2���&�"2z�����r�����q����1�TmEn��B&R��w���@��v�U�R��p\0�U����q����:�\*U{D*�����[��8�d����/��!i��9��]�B�}�E���K������i"`�h����(K������n���\?;`���X�,��7������}�4�{e��~i�@������9�b��`�|��U�����^l����>%��(�r�'���M�%��}��n}�_��M�5m'��clu
`�����J{9W�
~nS��>?����noK�y�����%]�R.�H�|{���������62��.��N���*��lD(�U���H���\�	���m�V����f��V�g ;�����:�z�V���hXe��;3�$�=��9��5��J�|�����������q���U������dd(�nw���W���K���vz��V���V����7��#_z� �x97-r:���XeC���v5�*��R��?H���X��5��x���_��O���kw�.��n���� `�A��O��aN��E�����b�����N8J�p��q�[R\�3+�7*�8Q�s�_A�7F�
a]D�D�L��Bc��x�c���?�~����5��Az��,p���#��a?�O-(*E�PR�'p����A��E��WDS�e��O'�(�i�v������K�67S,��"���r����i��D��6j�3���&wZ���Y�D��=���:q�������%�������6�wN,97���b�T3�!<�Z�lg�+����sv�����Bh�P��cK�G�lq�����g�S��V�%6��u�|p���0p�A2�5��\br�d�\G�Xb2�y>-��|%c��]���=1��.��9���S'���gL����Q�>AoF�ei�k+_�	e���<�%r����R.�k(���y���@5��`�87�6��|��< �"�~��W����:5����	;���M�
Z�Pm���0�mmZ���j�}9�l�Z���:s���_�z�
���Mf�T��wP�����H�t���b�U��6A3����]����}^�\�����A����z��Ov73��^�9-�@s����\�@�����Y���8e�p%	����Lp�{�����_��j&`�g�Y���>����+��r�3�\�^4����k{� �7���B��2�K]>���}h�����4_�UD�T�K�`+_�{�H�,k+�k��)�Y���Y@GYT������F(���u
�}�mz9��J���>�P�3�������h������Y������f����� <;���@����W$@���5��� c7�������'����@+�ng����:����;_��H���������IH39�f��0�^�
I��	��v����<���T����W�d�<g������2�xA��3�u�~�,Z0���������@��E�Y�ux�hm�s��2����������g-�H�c+�������%�)��+?�����vM�k��I#A�q��t
u�hSG5���D$�N����u����?�f����K������Q���A�9�U��VQ���1K>����Vk���n���{W��������p���h}�h[���S)�M�������_T���]� ]� �(8t�9�+tu�+��)�q��m��w�r(���w�Lj���������hM��Wo������%��YT��H�i�`>��+�)8��q?�(
��	g�0�q@����?�#��;���V���F��jr���4���j�&He�����)�Z��+�@/�-Rm�5��2��6������\��6�d����Cb<X��.A��H`	��e
���x*�������onS���E�������z������O���/ 8Y������x:����0a@Y�v���mE��T��`�����.d��S���$���2!���Z�3�/������N�;�,�R�>��G�5}���iw���t{x��=���l�������8�VKpQ�k\�������:�t�.j�<�.jsR���A���5`�)�y��.y\�R�;N�6W�Y��������������~��~������ y5.�m����c���3�0>d�������oE��������E�����x�{���,������������-��K��8���p��7h�NKs��q\}F�#����h�]n�:i�� _������Y_Nw�
���d�g����P��
�����%�D���*�������������aff��vr�����w��kDQ;1*x�X���Xn�W�+���5]�
��)Q}���F����Q�o0\tN�v��
�1�XD��:�Cvlr����>��9����� �-Q,����f�����v6Xg�%�
'�����"X�PE��l��t�������P�_"��V[(W$j��5��h�qN}W%��H�$R��������a�MC�9�rw3B[R��G4T�^&�{����K�	K8��K@�.b��f�������t���gE������E�����n=+��3��6XP��qi�
�����*h.f5���,������i<3���.N���+�x��|�@�J��������
C��Y�E
R�e����7��T�<<+�H�D�.��a�(��d�h��l��Q
�����=�!�����*���Jf�><���6��!��;�[AY���@_��Z��C�D>��;�t���YX|�i�1~��j2�]Jc�T�@&j
����Gu�r��
�6|58�����p�6����%�����C���g�mCn��A����3��s����XicdN��E��7��f���m7f?���x-�`���������h��Q��n�;kx5�Q��^�7>��/<����no&����u�t��j��n����Ki
�h����3�a����6j��������@&��������?�r�m7"4h]J�������������M�={X�i�_���<KH���M(]*7�������l%�2�U�P|���?j�`$������:jS$��6BY��A9S���i�h��>eTw:h*���h0�W�>$���.���+�!�F)f��\� r�S:~%E�~#*-w�][��t���?��	#7�{x�����V���0
�8-
��Q@�1����;N}���U�.D;��O��2��>��|F4j����
�{����|��<`{�wZnk*n����#{��c�c�>�m�i2��$��4�����o�,y�(N���S�r���v]��O}{���{����j���?P���'��M��������������y\��^fJ�![�Q�e�4��i��az�m�w]����D���9�����s2n������2��%:��z0x����%���h��Y�s!Z���<)P���%�*���RoE<&R������[;H{�9`e0��s�����t���Z�gL�����@I��MC��j,o��&��x����4����Y>]��R�=�2j�w����g|9��/��4D���AD��s{Q|J�����Ai%R�&��1U�C|j���I��D��>�%����w�:qhv-9��F7��|�F*8RL�#�$���[�49��h�s�o��axnQ��2/�y�=kP�;�Q��!��M�J�34�_J���#�{/��N��)Vg�A�k����������8q�/J���-�����Ha0T���Ey�Ipj�|�H�������:������?N�?n�'�������s�������w*�<����G:��WZ�����������������s���s���s{����O���S �O��=?���xj~
�����V���Q���U���o�)P���@�Y���T���R����@�)PW}
�o��}�^������?�>�������G{
����������G������������<���s~�q�0��s��x
���)0�<���|
�6�s���\�)0����������Of?����~���q�����������9��qN����{����������#�����C��?�~~��|�������=�����+�����������k���k�����_���������~�u����S���S�a�S�a�S�i�S���)���������?����?����?��������)�c�x
����)��������?���=y
<r|~�����������O����������}��h���G����<�{x��������1���?]x��?���*@eV1^�>/�PS�,4�����������b���40�c�d0���qD�b�� .�b�HM�5����!��r@Q�4�@P&*�
��&B-ME��FU�
U���	|��	������`Xfd08����%M�
��M3��}�=\�A��Ag�'��c��7o�����������������>���s�����5g
�J'��GL�m���n.��nC�
_���<�=���C�:`�=+��m"{�e#mi�b�#lx��R�����g�������BX�������Y�<���R�~B�H��nRV�����B�',���������J�&\}&7�v�����m��c��A]/ZC�d�k�!22%�!�/Zi�r�4�'$����P�JF����������wO�[�Y���
x�e��o,6�xm/��x��
d�X�E�6M��I�1qpg��]�r}U���{+%n��l	����w��g
Z��Wk�l����4�4tw�w/��0+��`%-S�Y����Z���5��U���K�4���g��}���rf*����W@H���e��A��gs5���6�x�z	���������eF�x�d������m��[>�����$muh;�}���-&6����&����g�?E[�V��R�7�R	H���V>_�i+�2�\.�U�����T@�L=)pO���%g��������^g��z�T"
 �i)�'^1�2?�������
gfd"K�1���atb�j�[m�DFZ��D���8�� ���/�59�))9m��M��hL��!�����j��g+��(j,�B����|��"���I�Z@&����Q�s'sm��J��
�,A�?#�9������!I��%��o0���;���`S���]Nfi��v���r��W�i�`��=e��Zmg�{^x���,.�g��_�79�g��)�ac���O��2���J!���A��b����|���'�UuKj0�b�C��J
�&7����8&n(������'i��a���O`�����MQ����l������������ps_�>��d���V��?O���rj���h�]_�^����8����;����9&{���8s_|�vv�$�����t3��������8��k�R���������w�������9�`g����\f9�S0�br�6o����od��^�V�i��C�]
7�j����@I�Fc�T��p��h�C1�uZ�A����Ph(C�Y�C����16O�^�1��Hb���M+���l5m�@[�Unw7��Y��C��,5������p���]#C����N7��|i�c(�[@c(q��`vc�[��
�h�Nl���b}g�����!�&�f�1n�ax'��n��c���4���Gx���RO�|�����P���y�8��9�� i)�i�UkZ/Xjh�Ux[r����1����d�[�f�����w�+k���}@�WvYy!|�9R��!I�`o�k��n��u�����R�d	D�]Pm�h����8'>�3����!�����+1(���|��v�w����5�G.��yJ�j m��L����h3��M������X��y~^����J(�,�4���3�r�7���B��=E������X8���2����o
����j`��~���>_"����(��b�BT����@Ok'p'|i
�h�h���A~���R}�����s�Z#-�ip���\w �P0@cp����+�`��>`�(�.P��Yf���`��x��8
9}�~��Au�|B����k��)�z�4���������k���r�=D�]��y���M2Z,[���j�����.��7��:������u�+'���w+��p�u�� '<�5�;��K2P����m���J�Tb�*e�Yo6���bOhb��k��U~

��>M����L���������/:8�e�-G|����t��s!�{�������=�]R�e��cM\@q�=����~����!j�({�n�(���k]j�����2\���k���as����B��8��������5q��Qo�]����I�6�	g����lh��7u��
���K���3����j��;���V��H�X!��H��]v��R r��uo�39C�HjU'����:��)CX�6pqo��5���qu�QQ�0e)���k1B��m�����PQ����>��{�c������o[�Z���o����~��W� �iq�>�LXAb#CC��'�1�:�@�k�����'���Y� �Wl��#�B��������OD��_W�}r��(%B�2"5�7���.��k�-�����^A����EO^�%^��o���yl�����_W���2q#)�Mo�(L	
t��`����=|������e����\�T�'��A*{2,���a	��+jz��#�L��%.�xI�57����VQ[��:��������
������o�R�i�6���G&j����`�����LX.���>����
�w��oG����}TR�����=p-�cIAHc{o�&�H��+��z�p�����n�oT6G9�J��3���>�����;	=Z>z�O���D[�~���YPvB�'��g�6
��w\*)R�V+��;�G}K�����}���Z%m(Q*N���+�5�V���l%������]���#��0�|B�
��*��6�m�Z��fq9��5wzm]�Y���X�0k�?>_�@Mn�s~�z����T�yC�����'����w8d|-N��W�M��M���O]�W�������TLT�l���WF�B~��8C�-�:��H���%��>���:����Q�o*]�qkm2�"�|s�6�+w��Vjf��v�z���s28��7�����)�;���>q�P��97�p�����E�[��c�^X��%[�N��W�&���w���|��������������"��>/�����Fsr6��d�g��7P�T�t�+��I���2C��������o�l��M\B��n��k�T��X�����j$RS�{!kC����-d��v/���8�������uY�z��[6_��X�����kq{��E�'5��=��8�� ����X>0���������c�V]�6���<�|�`)���rP8CN�/5�(Zf,�GNm�p�������,n��1��R8����5@;2�"�E��H��$Mr��}�"��y8��VU��j��pwL���R-�T{�#�1qOJ
��P{��v
�:|�g�< �*-��=�|���k^
O;
�jnT�r��N�\V��/�����>���EY�Q�BM��v����~��=*�&���wh���]�?�0c�E*$��aVL�@�u�ZH}��~i}FToj_�,��k�)~��l��P�F����d�k�����-HR��j��Z����md T�*� %�#�5l!F59���Y�+���6���l�Ic�V�����;`7����&�6�H���.,v8�lG���EE������5b������m��+2����H��(�&P�����e����U�~9�U��c60���9�W5'G�F>���^U�1r���yW��zQ���VRg)w��rS-�ZEr��8���6���!�V�C�l��n9���|�4m1a`��1����x�5������A��\��g@kEjy��w���;A�dB&�_F�b��ZI���U7��I��tjNIE
Xu����[V����^������^�}4�����"�Y"��l�����?�,�i����3�9X����u-Y��)�R��u�n~���v4:os��
���$���^�/j��	y�UH�/�b�-y�A.N�l���s0c�3C��3�OU��8��y������u��,������m/sL�B$�x���e+� ��'2�R�r
2��QV�1q�>PST�����|�{q�FeA�hr��(��8|�U��4�=c�M�
`�}������k��`�$�9��:�}tD&-�
�G�f����3x�HVh��S]sG�u���n/_D�-�;�C���SV���8��2{��2�}t�.���%'m������eM�l�`�\E�s���o�
E�����J&"&x1�`a�A����"2?5����I"�D��g������R�,����*2�R��EW�H��i��h�����������������UN�_|F�=��X����� D��H���"2?x�eG��/��Vm�C10�$��>����j^�b����%\�uQ�����[����6o�1�1����cy}��������@�}
]#J*��!I"Fd>�B���t���]�=D��/}��-<���J��U���q�Tf!�!E*����
�cW�g�N������;��@������	��5���:�!�l�r!�:����[������B��bj���h�7[��
�WG���-��=�M��HR��b���e�����Zy��XEeTK�.���.��W��4��������Gy4J��������K�����p��Q�#R�����I��WR�?��f���4�:�d����I�cp&�CFi|��
O�0�3����5�8�N��5C�2]Uc�Xw�=.|Q�R�s����a�`���n<��	���3���[�i���%R9�i����t����3���
2b���A�E*fZki����0�z��-x\�P����q��cq��W�i]�dY��Mr�V	��xgMER���3�5�L���[9/�5�Z��~�����+1�i	)�9��8f�i�f����gZ<4������`j�9V�a��C�GV�����$���@��X������y�������Y����l����.�	j�n74V�n��i��� ���n7-mNQ�|��%r�#R�|�������>_I�:6�#���fB�=��o�w�/�W^���{qr�v���/���������
����4f�w}����|w�����w����(��3�eN����ro��$	�n7-�g��an�(�P�������m\�v�q���������W�m������
���^<���&3����v��/]������9������y�}:��_g������8�,���s@����b�|j�)~3�������d�8s>5W�
3�������I@�f����4�L4�M���dw���N��*��*_|���Eq���wF�5s�0s>(��������f����^3�����~��w�3�=d$Y��3��/�yQ��j�e��>�Xh�5s�>uy�]�]��/_�2��4G#f������\������w}���,U�=��y��g������C�N��3��-jCn���z����h���3���l�%*
�=����
^��2\/�YT�yF=����E[�������{,0������e����dQ�\�X���g_�{QqjK�J�RE����F���y$�G^p>���A�d"�Z����k����������r����\>"�/�H-�vR�E������A@}���b��VU��^Vg�]����&��������P���Y"��U��HC��h����Kl�(�h�r��e�f��|F��j��7�B�6xu�:eeG�6�De�E>�u����������e=�����qIW
�U����'_��m��P�w�����#�ij�#/���
��&�B}��Uy+[o�n�TMK,Jzq
CU5�!S������R�.?��"NZ8�M�g���q��I���@:J-R-L��n +���P���]e�H�[����������������dY.jMr���n4U�d�,��P�Z��jeQ�B����*(W�M����`���?1J��^�hI��I�D�\_Z�yr?vGYY[=Z��i�R��$�qcDY��?�����2�(	cF������g���=�\�Aw%��>o+���?��f�����;��������H��8�L��-yo[��'��x�x���rx3�.R��|�������"�����~z�y�_$��������0k4H@��(�o)�c���+�rL��#%3~�����5���L�1��e1Fa�	�����������\f���K���}���8�Y�&� U��X�Z�vU���9��iK�q��.�e��2�����q�������wIm���e��(��M���sL/~�.�:��F�J���`6�����R�(�H��]vy���e��t�������(�:Y��qQ�5���H�����J�q�8L�/��Hl*6X ������+82RW�j8e��[ Pk�T��������$��8���w�lu�w���=�I�E��N5r3��k<�-j��o�X8�nKI��9��������C
E��;�� m��%/��!�]��a���R�1������O	�C�Ni"��f���l��~��_R3�1K�V�]0$~;�|���a����,x��p�5s)��hR�{���VY��/T�w��U�"6�d��	R'�8�}|Z��f�<30��N:u�H%���lO�7��
�$��Q�Qc��y��5��[����k���,	�{7|�����Oj�1e\���"H�hW^j�cr�z$����]���J�3����.*��!u��.�\c�vVf%y�
�:��.8�h�7OnX�m���c�������)lb�e]Q�K���Q��Z�lF���)ks7D�]�c��.@E[����,��n�wA�K���'�:9A	��Q���&��������sE"d�>
2���"W4A%�#RiN�����c��|oj��:i $�cG)�~q�a�9����VtU����PV��	B�� �u|�A����N�����$�����P�|5�l�t�zL����l-��iw�����hW�U<���3����?�'Ej
�"����{,�9�u�"F����j������g@<'�E��Y5��v9��v��Tu�������51��r9������8���&8�p5m��2�!��Ow����d���v/����t��r�J���
3��&+Z����U���������
�sT%�r����K��7�G��Gu��;`s�d������v�j�r�����K�')����o�Cs�
�������
���.t�.�cC���b���e�Q�:��������w)+5��c��\��yu���<fx����R���xu(�n:�����������:�G?������c�\;(L��j�j�~p[~`�����������3AX
VvH���1R��Kq7�k#~���]f�fL��Euep\�����>stkG�8�H����@/�(��C�0cv_����N���{�����#�;�[��]y�]A�;��s��f��]��9��v�U]T��c�����Y7����.�[�J�s^�yM��fX��&f����t����#�;�������5�^F�����tzh���G0~���!�����:>[����:O]-�����nL���S���:�1�������
�[������+8���k,-X��-D54y�R�T7y���-Mw�����K2.�)�
J�&���������j���u�8�������%P]
W��fF������5z��Q
��J5t�z����X����O=�kVu�y=�����8��5R�}S
2Yt�'b�a
C������_
_J/y������)e����/e�U3��_z���@�e�
k�4��+�/u��LR��:������l��;
�$o)������1��8�p��Q�7���e-�G�2+^��oX���b��M2o�h���=��d�k.;R����+��\�p�����A���;X����{v�����.j�kV��.��$�He���+��P���BsSJ���k�����e���%
�T�������Q�����_��n�$�L���qE����cW�L7����9�T��\<[n��de�������e�����HM5���c���6����y��:Y��{h���_ P^���ly��#~5��_T�2�=��RU�"��'#F]��_�Y�N]f��K���)�N��M�7%+�-b��s.����c��o�Z�>Y��,��e =[����&���'Qu9&�
�8�����-����E��'F�[�������3����K��q}�����qeJ:��'�+N����k����l(��k�k��A��5��cT1�	�������j��}j������3�_�F^#@@-�za�u��j8 33�+1�9����4q��e�d������������e�����m�*��m��;�q4�������.1������>�����Sl�����`aN�`#Jf�j�b�	���0��eei�=�|�Z��>=�{Tp�S}*zV�v��e=�d�>�}SK�e���i�_]b����{�:�F>���=ppuP��D����h]0j{[T��}7G�B������h���H;��h�_���|���M������,�����S���#�7��r�>}�

4��nd�.zq�
��b�R,��vA�i�
�N��u��U�v�f�������*�Z�kHyj>(�H-��_��0�S	=��_������NFy���r�N�'�*[]�t&~����>Qx��uGj�oO�����g@��^�q�������?N���Z�|����������<�$K��6��;���cI����-M�u�1�;��n'v{�`*���m7Y��_�.�p'�2��[��g@�#��n�U/����}+�y��K;�}�=�y�W�
���<.������\���<,Vy�s|�S�#=���Gz0
[8p�u9�3r���l�#��/�t�`�[
}����B��+���EC�m�g��{����KCb����_��F��v����<���Yj��'��qL�1z`h��"#\�����fc����&���,l(	��}Gj�`�_.�~���:���`s@��2���M�[���u>���!U�x��z�~�����Bl�E�x����jx-"��%���.X���Pk�����sj����I2�b����9���y��~o�����������B]'tz
k����O����7+������o�_�MQ��K*��`�x���Z������>���2��� g	R�J4��L�����uET.
��5�(�H���C��D=J���2����w�zrx�%�N��B������2��������%��1@]����I:	i�����Q�Q8��j�l�}i�-��������;
S����W��n���p7�����_��<B��9�.���9���S��o�s��;=�<K*�����w���]i=�J=���_���������������y��@^�)���O��#?���xj~
<�y
�V���Q���U�����S��(O���<j�O�Z�S�����>��O��W}~_����W�����O��O�O������)�V{
���S��hO���=��?���?����?��O���S�����G
�_�)�0�)���)����~<�<�x�p��<�_���{<m��{����K;�������������������/�M�S�Be�~v���w���w��O�=�S`�����������~
<��^Tz��GO���?5�]�.$���V�bV�y�+T�*�kS���v�����3�O���O��!O���O������������~�����������O����S�����������?�?�|/c=��}������������a�������no�������m�J�z��KZ?��=�~�����"~o�2�8^{?����Yh"�kMG7�%t]E��0��F�i` �	���`�1����t����!=�4��?
Bca�`A� p>J"��D�J���� �u������A9�(P(�)\���Q��fH-��PW���1T��
U�����8������1�a������1C���%7Q0W0]0c0i0of�`�hn�8�P�h���1�a�������!�U��6s
�M3��S�`���[����7������-��������a�����z�������6)�z���-�Fr>����/Y���_="����f��k������^�x���d��{b���W<��r�.Y�J�Z'�f�%��	�#$38x���������a>z8��;R�
/k���f�tS�P�D�q��`z��v��&tS��5����=jU����g�k5q�F�)jAY�>d#�H��S�Q�����v�>\��J�T���t�|�@��'��/-��W;�-Y���n ��S����u����$1;���2�gKc�J�����=h����C�����,obc`������%���T�%�n0����uSg�e�e�y������B�����y�kn�]W�R����LMlRkSM����=�
���&C4kS5c���j�J,�'�V�Z�w4���P"5E��
��
�H-����]�4�+�.�_�.A���]���R�k��6C����o��8�w+^�8T����cY~ia�U��c�.mk�����v�Yqe���&��w��&����pr�"9	\:�N�P��!�V�He���0R������0�$�
R��6����n�A��&�r��cW�i��]��s�iLZx5�b��k[�l(���E+�U&�
8E*�8#!h����r�c�&<����oV�����#S�p
��_B�BV�����b�v"�����-��z�!�����#�����15��|��tl�����',��~�[��|8k����|�����z�����$M��:j��J_z�V����n;�	�<�6�p��E�����5-�s3F�>8���;�dY�F�'zm��[�	c��s������ K�K��D���cK�����<@jQ�/���la���m����lp�5#���\�y���F�z��oIg��d�p��b�� L��8�Z9�K��(���������r)������`����f��
�a��ZKT���(��(���R��)�+P��c�Q��e��@/�S���k��i���rV�V����^K!y���'Yv:8��� �����f��Nv��0���uD������p���@�Z��5�(���)P�~�+P�z�e%��y\�H�zQ8ib8��$�K2�<����<��!#GaB�W���`��H�`4��q`m���`�-L���Em�:��p��Kx�;���;�`����������Z4�`���=��F����!�hC�!�z�(_����
00���OFx�����"�hS����=y�����Ps?O�+�hX;a��"��SU��~Wv����6���)�hC���l�R���3��`��E����'�������q����A����F_{p����^+�H�;�e���A��]�����,��|�x��L�9f�|wr}��������T���.+0�DL����q���S{�w��������C�&�8M��LYM��C��.K���P��e����5��[�U��� �/�B�XsrgE�C������u�&:�~���������(����l�B�UC+'�e����1Z�6'T>Q�
_���G�	����������"5��5���=�\�}�?#����`�#"u\T�$�	3T�RER��'��*�1��':
y���{1�jS2j��WHR
#J*�p2����������|�c�w-E*
�T��r7.
v�0��(D=���p���uMG�Q��l�������d��j���yR�@�Z�X����Zu7g��l��������V��x
�a���DK<��>Lo���c�@{�|h�@�kF����o�����84j'��,~r��L��%??����TNK:6���p�?�����loB�k���Z���< ��Z������-'9���:=�f��-�g�|�y����������6q��������ut��Q_��G�~:p4�[%]'���V�=f�n^Y��������}�Y	
XK��8���@�����l���[c�w5�[�q&�O���i���#��5�Q
�Y�|���C{��#���s��yh����w��t9�X���O��~��UT���� ��_jy|e��]K���eZ�,Gy�W�%]�������d��h�c�u��_�"�p���e���/�_x��J�j8�p�
��t_��V�>�G��$�cc�R����Kx���J<�;�yx���&��Z��uT�?�)�22/���l��P���?|?�:��U�`�
> ��pde����
*�vh�Sb�p~2*�������~ZAdi�gK�,�#_e��>�����/|�x�����@{������p�����O>>��`�s�"���.�n��x�A�w<���N�����iX�z�B�O�`�:_��_+Fk#��9�S�u|/�V=���d��t��_��&�=��N����M��QM���/��y������dB�'����;�~�~�%�
���yU#%]�2�u��q)�^S>��U���P��@��)�@M�`�N�[��(�Hu���������(�z��^��#A����\����Z{���xXFb������{+?�C��{�v
x��X��H����h�_�|�wh
�8���k�G��h
�2P?&8]�'�w������q�C�/t�V��l����#��/l&��K'���/��*(�i��5?i"f;P�	����K��l�HM�m�w��������o��+�� ���b����]m�!6����oJ`��4v�&f�9� _�R�1n��Xw<����
��V
����:����-*r��t.y��F���W?-C.��nd�Q����������F���[nt|uYn �/���NJ��@��CmC���� [��l���Q���]�����*�K����d�'�e1���7-�����VZ�OI���V��.���*\�1�U��P^���w*\�*��J:���K}�V��j�A��X���=��H�h�H��j�cV���n�lx������9�P��H}�U�4W����0%�
�
WhrzmLv��7Y�G�?���o���p[�O�x1��@��[}�����b��]'v���@K���wx��|����GTgY�{\��w�

��������T��?-���n�g1,�����J@k��'��%�d�]��|2t�cQ��7l��M����m`������������+h���H���m����d5��?���.���2�������/Z��,���-�j������=�d�6��a����������&n,�C�z���p��DD�}�N����V*��}�lb�L���"���o5
J�d��
*�IEr��&�l� `���$�f��4���'��n�5"9��	��Nl^K�9\��4g��3�D) T*������t�a��U��Kj�m���6����
n7&���n���g0��v��B{J��Zb?��xh&��&���|��l
`���Cd���x�6��6���|<�L
h+sA[K:=3�����'F���H+i�<_�.��E����ioh��L[�'����rLn�����������0bS_rlK��@T��^�������2�G� �|�;���O���ikY����fo�s�ii��� �#x
��V�u"����oe���i!�g����Ah)�.�W�`}f�v���CD`*����9?��/^#�x�o*����=sH{f�e���/��Am�=#���9�O{
6����~,FHI� �Hj�����E�3��w���q%�&N�H�C��\0���R����A�������s{>��M[���eo��y���!�3��(�}�#
J���q���P!��YV�B���?��	q'��!��:�������.>�<=%�Z'��rU��Z|C\�6�!��)#��i���-N�2��\��`?7�i����H�����d5;� ���Z.�J5�����h'�Tk�T��\2�&���N������`�N{����rX�*�`oQ��4��y>�h�c�]�yB\2���������R`{F^R���sL
{�^��K!��~�
��{J��j��������Q��II��`4��L��q��5��Y*�(�9�Mx�a=]�j;�^�Ix+0�<Z��]�~|!��}�����h	FV�E��[�kKiT�y�1$_�@x����4�Y��K6�z�������	Y
q��������:e\�z�R�-��s���?(7��O�{]����t�.�6#�0�r�c>~��4�P��h`>�3�!��)�fB��^V���yeI�����bXr%�O�+2��ST��S:�����^dF������EQc����Q���s��}�|�$xBA�4�9���`�a�>U��I��$��O^����c�3'Y+�I��2�9�Em9s��k��fx�����d�0'Y�A)gS_�g��)	��8�#qN���9����d�0'9�V�f��9�R����Ws���I!���
s����J����$l��$/���w��3�I����I[���Gv������Z�i��8|�m<b/D��y
w@v��
�n��p@E�@��]hn\���a�m�\��-�@�M6m9���d"4��qI�h�A����r�,�BcT������'�+�L�|������`����
��������qA�k7�~�f��!0�:|�����v���[�:h7z��q�2;�n\+���L����J���%�t�����������q@/r@o��q@�����0���=��5�<�mf�&�,�1&���I���D��'���VG(�I��YV�&���I�7����$��L*w&��_���e�A����i��=L"ZJ���$rw	a��&�i��h=o~.��$����8�t6�x�v�i�p��0���'��k���.
5�L"��Ac�&�{\���x[4�t�,�����m����_���`�w�qD�� "X���0���^�y�{�aE�i��&:��$&N")$�)p�$r*�/
|'�{0�H�.c�%�-sZ�D�����IdI����/3��)+���	�����v&
���|i�,��@�
��R� y`juv�`���y0Z#3���X��Y�K/(g���-L~�����7^{�6ZYg�	��M�'�m�����fb��0�}��h$iO�c^8
vv��Un��9��Z/�@}@�i��r]m��S�{'h��D�lO����o��Y�9�oa��8�j���)A|r�aR�r���J1��{�o ��=���	����.irwT[�c4���������?�	��F�%���-Kq����el7.�=%�m;r����������eG��M���7�e�,��q�����H���\��9�Mmu���������e�7�}��Y���e���z���~*�����,��v:gq�i��]��6�{4�bS_RlK��u'_w�*g������	������i��	�V�f����c�M�e���e��YX=���j5Pura����Pf�L���Q${z���	HfN��#�����`w�������Z�iX�8�gex�.��<
a�5��mf�HH!�1���+
��-�{B��j+��#	tKJ�_7�O���������f2���8������j�[�3�d8��O��������re�E.��>^����)��E6�3F�Y�������n�/2�"�mL��\��n�l���M����,��/����������(?<�.��
��-w�����)�-��k@��Ys����j���f�L�En/\:��<�����{��L����r���3�x:���9��E���h�@������S{���vh_mY�� ���S;E�|v��`hP�[caZ\?'���US�j����Z�q��us��/X5q�����<ce=l
��}�'�m����'P�E�~���N��zn�d�:l�Gx0x�:��a`����6��O��}W�*f���^�������YO���b)�m��f��3�����5���Dx�8�����&�=��[����Oh{�O�\�lyk����s��h����P�w�|�p�V'�
4k���%��h\�%-�|���([q��-����Vz;�����9��1o����l���-�����4�o��c��,)����:���Ml.�|[��\
��M���3��h`.��3��Ya��c��N=��e�t������M�B����a���r�
�����3����i���<��T�r��E������������U�@�YJ��lg
}�z�������zg��w���7w�3)��e=��	L�p�f'��m8������
��h���)W��0�����r.������CY&�~^�
Nj6v�a���4��A��8|>�C��%V�|��?���c�
�D
7jn�Y�����'��s�@��n�����#���o����MA*8����!��U�4�����\����/8|]�*8�DG�B��A����!YW�I�~|��@���Sq%\m���f�2�FfUS-Y9�XM
��/Z:�rb������o��=����O��X�n:� h_��y����u��lp7�����c _ZA+�W4d%��}�����1#������^f�����jz	�i4Uu]����k�/��R��mJP;�7��i�"����#�@��h�����<+nl��V��`F��C�	�l�)h��q�}^�-������IU|�q���x7�Q�$A��N��z�A�Qi�	�It�4���(�����%P����J0���'��=|d�@�j�K�QS4����@��/�
���Z���g���|
N����!>��Na��h��:,CG���	�V�L�����0�PG�t[�;�z��Nh������^]��h��b���.��W��5L:x�D4�V�M"���J��in����^�z�����O�*��H����N����}~?��@X�X]#[)�T�<�Z,���9.����[�bAQ5X�!
�<-=�1����S@����.D��x*�<u���������'�� Ge����r1t���������	Z�Q��
>A�����s�YM�~T0���������D-�q���.WD���<����Z�%�T��D@�F�$hqXt�uZx5WC/��_1�[�r��f�`��4A�]���~
\P�y�B�Q���
p&S	�}���b��=���NX	�:iYpE���/��m^��)�p��S��j�|���[����o���e�W�������$j����E�����8��Y���Q�y���N�.a�B_��Nm����u�f7�<��%��4D��f\�PA,k
�S��> ��R����i����r~NfFp�Y.F3���-2,�DU�;���-���?X�$Z�09�:����ir����d�����`��\�`:&�X���G6m����E�v�������#"3���EEH�u(V5���8�{��2��6��nk�1i\W��%���"b��4���.������P���/Zm�\�P�[��:5��i#FK�:������$eW�p^'�P=zhK��	�#�l���[���o]yG���	�e�;@��\
����sba95�Q� ��z������S�Y"}B`�[�;�������K���<P�W���;|��f��1��4k���L��g���rb	y������dU	?���3�>--Jpp2���J58�RWxv@$�O{�����p���Y��cZ(���*�q�V�iJ���[4�>.�����y�_X�����8�)������EiW���`�!Mx���S��%(O�J��������S]"��L56�id�h*wh�m6�1���O8m�\��G���`+o�<�`�>>��9v
��0��G\i��?}����E�'j��[%oL�J90Y['��6���<`.G����!MG~t���E�B���:N�(����A���.m%�y��dCOs�*���&Fmg��}o�9��dP#,����^s@
�f��o[�{s+�d}��Qq���4��uC�!���}����rC��:�N�Q@&;���`8�RU������%��y�M>�4k�H3	x��NK6^�����V`�@�����]'�����:����'?bB���t��Z�������Xw��{�~j�>�FS���8�c}[�<� Z���i?�tq�h�!��E��W�v�%���#Y���t����iQ��+.6��ua
<kI����o'�|u}��0�JG���7{��)7��4��Nfb��0�ij�J#���$M���l���
}a%���~5������X+��3=Z	}�g.N���O���U,�q���{�Y5z-������;��9sb���%���G������Z�
���������F ������(�n/<��/.�O���0����a��S#X�LS�����w3m��t�&K����`w�IN�B9���:������Kp�"�����������m��m ��S�F���Lh ��}Z�k2�������HkW�4H�P����0a�Y9�.C�%��n�8s�
�g'`["�#��4k�\������p�u����x�������8i�Ycgw����YP,�o���U_L�~L�[?h7���z��/��'m�@�L�^���?��?E:u�lX���a���Xg�����q6��� >�$m���:>�G4�C����b�4�eR>I3�X�@�Dd�/b���N���m�6������M@1o���)7���Y�S?��0�������~�fEU�A��J�^��-��v�|��SWzt����[;��x	�d�o�%�R���.!�����%��I�B���B~/!�>��-���N�?���������i<WZ����_������W����9��������}��@�)�W~
���S ��O��+?���Og�����e���e������(?�S��*O���S�����>��O���S��U�����}�U}�������S�S�=�<G{
������h?�S��j�z���{���{��O�>�S���t����O���?�<�V?���������o�_�)0~����5~�k~��.Z�Z��k�W/~�����|��0�)�p��m\���\���~�-�����h��5�xq�>���3��m���~'�i�nf|�j���������U�����b��������o������������.��3�O���O��!O���O�������������?����?����?����� ?������~�������_~3�D��|�>�~�>,y����)�T������#�'���;!��������+&��~���%� ��(�
P�U������?�6M�Z�
v	�CW�m�1��Qdf��`2n��x���C����a1�6�j����_��p@P 4&@�<�A� |�D���(�����w� �{S��W!\9�(P(�	�eJ���=���ZRE��P]Sc�4����	�=�q0C�Ac�#��c���5Kn�`�`�`�`�`������>���q�����5c
�J#��CL�m���f&��f.�����.L����qL��7�C1G���������n���;�,�Q����r{�}�4�f�I��E�b�x��q�=����Z��gp�Vt>^a���o�� �r�+��63{�$�>�^������6.���/�j��G�����������VM6�Qg' m>���0���`�=B|oZ;��hZ���h����5���h����'T��k�@�6�i�k�u����O�v���I�&#=�Qy[��|1��S�(�����]�|�k7*�nopf�5���Q�-|~�Kb&{o�����=�|��a������H�#{�k��(�h�*���%�����������|�8s���+��*�d3�C�N
5��7�:@��P��u����-#��M�T�Sg�hm�<w���#IZmT0���~;��-��Za�D+6�|�8w���������n(��@�i�D�i+�2���I^�2�@�L�>����w���Z��\MT���r�>��f/� ���
=��O���_��� �7�3c����w����=�����<�V�������B�F�B��jn�.xkrd���>R�&��/Z#Mb��]����������K�x�(���'f��]�ub���0p[�f�l�&%��Nh`�4+GO��!���Q�f��
��6y�Vw���.��M]4|-��h=�i)�j����1w�j��]�8`D�e�B5�����|�%t�����p~��T�N��1���uIz�}�r�R�l�lC7��M*d���������Ws�{:��@kR�V������
�Y����g���h����a����R9�X����r��v�������!Q&��Bh�lA.���)W����:}w��]ieoqH�����S'�y�{�ql�����Sxt��~�����-l�ny�e�E�`�R|������������z�����tep��p��������;(���uh`3���W�2dn�o=���+���w�����h	�hT{�(��u%e����riE����5�5QQ��j&)C�����P��t~�Y��5k�������b�
�:�r��2�����mWWA�����{��]{��(C����N)C5�h�(Ye�9�S0��5Q���J4�|8���X�1,k�O��bOs����4��wb�w{�S������
i�#<.j9���|�jr�{���I�,q�<�;y���z�< �<�;�C����P�9�'����?m5G�~�|h|a��<������=��'�����zwh�����,\}��~a��7����[�Nu����+�����*��y��6�-[UmH��Gp�O�Js�{!�2�D���b�{��t��
:���������^8�B�O)�f�m�%��>�����M���������y@O��E9ga��d}������A������/���~����8~�C��B��I5���~+�5�����_�'B0�i�����
���C�

��j8$�-�P.��N����+GZ�i0����1�Y��c�hu�:C�i�N�F��@��[9���>I
gX2�ii�ON�}��a��l�������h�E���a����;�,�;OVm	@����^Oa��]�;���N�UR�1H���HT���e���~����=�v��a��
2����_���H:�D���F��=M�m3�G$��R
4����;x
�w�-��=]"_��	���n���.d�:,�����4@f���f�*�����W2 ���k�f��
u��	�xY�w���q�=��-��K�x�um��|s�V�EZ<6�b>�@jjG���w)�E������&P��=G*kf��s|��:n������n��[�
u!R�E�7���z�>�p��LgD���l��;��h��x�$�1��#F�z��e�9��8����b����S��V�2F�,I
��4G����S\z�{:u{JqcS
�����f_����^���!��b����3M��<N��x_���o]1y�����&��o~��XZ���V������%�k���
��O\#���8|�M���pVK���`|�Y��EM��Q[b<��G\U����m��Db^��n*1�^Hh�+�jb��n�;i��,��E%O��[�v�)F�=�uxLl������f{�������@g����O��=���;�����>�-�KVs��������������)t}�������������;�E*����b�S��8Tn5Ty�E*x��^���`���NV�}�6�1�2�+W�Vh��L��		p��!���<�h��'�c6���.���J�����e�9��$���!*a��A����[>�jV��
^&C���*�����Q9�������N������������8�x�3��/
���7����A���zh�O��l�A������BL����>b�S��4�8*N��qI%�	;R����J������;tm���'�Q�qm��xM��wu�y��L������qkn��:,�$�K�h-�����y#++�����DG5�T��F��j���
ME�l13^������6�I|����GC��1P��I��B>��1�(�{��3��r�������t��1�g�H�bXcB���2De��J�������Z������D���;��3��w��N|i._��	��[�0�-`��r�����s�5�L;r�"f_kK��+kK�$�u�H�,��V��y����>� ��?3,����/��L[�1j��/�w����� �H�wG�jO�<A��~������@�X&n\\T�rl��B(�W��C/�J�u���[V����^����6qB]��\�56����4e���j����pb��`c��P��>�����������!�Xr���c�m��S��,��Z&��4�������>��BA�/"p���B6���I�7�lL<5�hG�A�p=��������>x+�E�;�E�2&fT���3M���	��V��{�x�k^
^7
�,������u��9#��u���K����,.���xh��JzH��}GE��<���������?���,[�!����/F��P�M�E��R-�#�L
����bY������]����\uNeqv�!���CX����
��8V��@�%R������f�����4*��1�e?~��*���UN}�~f�,D���2r`W`/.5uQ��
(���,�8x�U��n=�jG���4���"u����b��6��"����/�*�3��kfS���*���E������P�_��g�kDI-,+I"��}�k���(.�l��NI�"�5�sD-t��g�XBa����	I��]�:�"�Z���X���+�4MK4l��`��
���_�S���� ���K����������$mC���`a{��B��+��j��g����p~���Z�k��vS[�u�_�}Z�Dr��LdWl���vQ+2R1`w��c�������s��3>hR_*�����	6^��S�L/�I�j��Sh@��u�������V���R��b!�����/M��Y�������Ns�����p�������FlU�[3�5.�ym���q�OU��8���x��V��u��~��xVp��������	Y��&�FaPOn
Ps�l,�\0�kGY�DO��NM;�~OH�k��P
������i�L�t���8|�U��4�=c�=���e�}�x�����6����3�AL��}��,��ICn��`{eos���|P
V�O�c���4�f���c�E�8���S[��-��>����lH��J�����vQe���6q�c�����P���od��n�"�>e��5�i9<2�L
���BL�b�a`���M�+�Ed~j�)~�k��RQs�<���!2?5��P����=Ud��M�V��E*��v����7Bz�^�;���D�QZl�S�X�����35�"�>�REe�E�+��n���L���<^��w��U[�P<b��+��^b�1X3�%\�yQ�����.��_Z(�����^g��v�%��-EC5g�h��4���H�"�����F*���+R���V����Z������w�����R����}�������h���=�4�]x� �w�� �W��b�F�E_v�at�����!�:��R��H�b�&/���hR��v����[�`X��$���D����M�%RYs�w;���f���j��M�hu*B��V
!��]T�9�f_Noa�{�Q���=��V���K�>���E�Q:3�iI!��`|`|�||�+��e��U�&��7�&)4�E��rL��@F��Kg��
�c��U�3�"��%<W�"8��/�U5��u����%�W�.]��9��5\�i���t��F�O�������%R9�i
�Q���R���a�5���tR�L���"3��l�i�gZj����������[�o�����8��0��8I^���0fZ��3��IU�#��^�a({��V�8�C+1^�MwW@5*
=�U�q��&����i�f���]����
��QV0�zq��D������������C�����q�5�|t���4��_gZ�I���H���������^����x���� �����1;��L
���w�x�H���T�������$��=����2���n_��j_���{Q
��<��.�Lj�������A����������������6o���3�Y��b~�e�������V��M?�q����Z`���U���;���� ��w�j�r�����{{�������M<�xp�g��K
�������V�w�����}�������au�O���f�o�qn�:3�Y
�z��a�4s����b����{�����IM���j�|j�*f�o��8s��=	���y�8s>�����[vO2[�9?��9�U�V���17��"b�EEMI"%<"5������T�k�|�L�5s~�����4���#�=���u�5GD���G��j�9�g���h�Z�9k��I��
��5s~{x���$9"7��V���9����]M�wU����9�&���I��M}g�o��(�1��-jCn���vd�|����|/�XI���~OC����_Ia�k��W����H�r� �[�o�zP�B}Y��X��|���f���3��`��,S�������g%-T�J���Zg���-�vS��Q+i����	z$����&�8�_s����OF��M}E����;u����)\�V��=;����P���b������m���7�9�����[�^�;�D^�uS{=�Py$z%)rCs6q���<zY��;�+��Jn\S����Q����������	j��(������w�8�c���B��k7���U���R�F�h|�6�yC���3$un����-�W�
�h��P�4rYB��������}uz�����>��&_�?���R�V?��"NZ��r���|�'@DW���@:J-R�����Dm��l��;�4e������
�q#n�/?s1���I����$gi^����=��9]4�h�v�'��|$���,~�T�*[�c����V��xc����4#���)��'q5s}i�����e�
o�f��\.�|N7.��'�|����Q��cF��z���3F�Y����K��;��)"{ #l�������3x�~M����n��1rx��9�m(�I�=�$�9���Wv���H�k��831���C��7Y��7�����1!4�~����tx��5_t,`������~��������U�
s+�,�O���:f�_�_�fz���H����C�^������-�����{�q��0���B�D��p����&v��9�Q����_��-u��3Q]�����vW�����:J�z�2���M�������R�|����%�cj���o��������/a��(�H�j���cos�7��S�B���d]�`r�����@lu:T<i?��u0�u�=<_��nW�g\����DL�<�vW��nSOkGB�V�T����Q]�5���������SG�eu�(��L���q��J�f���x�P�}����h=l)	�u�9<���|�P{����r�����x�����u��ey8$��{+n�O�Z������O��&�!�j�o�b����Z:�m���3 ����:��T�P����S��Y����k���t8���,[����������+�3j��c�
R���e���jYB��w����[���U�@�u[rF�xb7�n����&u��%�.uv5�F���V	�,[��h�:���#�$u�J)$�H�E}#i<(cH��:�5�G�IZ���nu����Z�2[��B�����F-���
d�z�������xP�����JQriQG
�	����Z,��l*L���{�mX��H5�)��X�V9��T��m6��w
m$w����x��TW�������j��&��#I�h����@�9XC��e��mG�7���H-4���@��2E�F�&s��7�-K�y�ed����A�����_P��|z���	2���~������o��'�2;����cE!�e�I��Qb��������G�Vv�0,Y����e���.j�RV���?D0O��?#`E��p�t4�W���;�I\�z�jP5Ii����T�&j�YT2��y���w���qb'aMp��*��Ks�C�]���5���
�_��^��]��r���-#��UM(f�)fEV��w�kW3�tv�*|�cCk^�N����Me���P
�s��$eH&�g�T��#�$�`;=V�K/�gl�,S����cZ�*���]LP��8������]EL�bW�Z��;�.vt(.v��W��f�/w]H�����Cm�NP;~m6�)��P�8cMAA�����t������������
�i����l"�{gd�G���g�j�� ��M6��
��CQqT�(�cJLS$�p�r��]fLb�������C�;~|����E�'R9'�C���J=R�W:n<�W!0���#��W�+Gn�	T�^�J���>�u��\��.�Z-�tQ������o^���v���WNu�#�q.D�v�z�:������7p�����"�W�5��f��������~��vmt���8\]��R���3�����nL������"LIo��:�:��/���t�r�Wr��&o�p��N?�:B�10�u��G�e���n���@�k/5�?�\W����1��t�uU��-RK;���4�����h<F0-��j���#��_5���%�+�H��C�Q-G
�����)�;.����q�7�s����{��U#��;��y��7����Ysl��`�a
Y9��9f�����<�Bv�m�,�Tx+j�Rv\5s�>I�����g��������*��/����TX��&��
u���O8O({
�MU����������d�eG��Tf��W�5}���De$I�p��"4|���k�h8Yv����.*kr^m�P�7���;�:���LU���"���_����/5����%iD*c��2b���S��v��;47�Di��f���V�,Wr�������(9��(I�nB���'��i�IP� �tTD3�T������'�A�j��t*c����(�����E�w�_9(�Rs����G������)]T���:#�Z���Vo&��x�����G��w
�.�A��0/���Y�OF��\=�_[F�P�=�K���z������5�����I�HGF���[~����R��|-���V;f�����#�1����!����O!��[�#:����oO���r@
����g�9��_��s���qe�2��'��N����k���e�����P��k��g�3��Q�H�*D^g������>�qs����9d$�F��^H�wP��F��K����H��-c���G��@�x��@���Z�D�q9u�s��:5{�����	�-���Bp,�����Q+��������%F��[��0�������Sl����e���v�F�������;�����Z�e��t�Q�B���},|t������������C,+��$�8�w���c���fZ`~7���H5��(_�E����*A�KQrH����.j��iz���� lQ������@�BC�8�J�5��DI��c�r��/vk��`p3u��NG�Q�T_D-X����O���>>o}��h�+]�|]�v������d�S{QY�2�B�nHw*����J����[��*�S�H���Y��)�-�n��!��ngO��1��[BX��{���ZV�K?|��	���d�rkv�k���/����a	=�4��F]t����C�_"fbIA������>�f�u��&l�X�lF�l����[�z������E�5���<�,My��G�/�KnD^};=���8�d�������|�"���kkY�M�V�;��x���kuy�V�q�<�XL@����xq��=��_n��x���n�����.o���}^����o�G�}f�M*���P=�nh�>7�,����ba��x�	Hb;�or�����AD���E�����P���K�Z�F���G��V��g:��)���5�+$`fY������(@���C���l�����e�������/v��L�s�6������{��#�����[r2|PZ���4*���B�����P�BmO���f����P������aB�5/�{����@�S�� 859�[�P^e����E�tG�vp����������������TaM���ZU���q_SFx�����v����.<�eY�X��/�yC�n�_{�C�
��;��k�_�/���F-�]R�pv|i�������6�����0Gg�3w��\��O��3#��OD���=
5|i��@�;�����6�5���fRG�:���:��+d|I�l��h5RE���5����8�������Y�f=rr� Ak7��=7{��g7�6���!�}i3��k������~����3�*����)#�	����9����9[)�n�^O
ws���SZ��.���O�������+I�����;�������s���~��ONy�>����#���] ���y�?�.��]`��� t(R��K/��e��������g���rn����Rw�*u��v��R��������_���?��V���]@�����. Sv�!����]@~��@Km����������]����mh?�.�~�]`3d��>�rv����g�n>�������O~�g�\���8u~����s���_�ta3�\z�<��=��������_��]�Ze�s����gZ}�k�]`�X������_��#���7������w7{��u��E���f�]#^N�����)�H��W��:]�:�l9�����f�.�[���w����������������������������]����.����w��������]`��.�Ud�r�m�Y���[����+���U-\��E�����������v�v�������_Z1>���XS�,4���������������40�c�d0\��qD�b�� �x�"U�B����a
A���@iT��LT,(�GM�Z����s�*
���C��>�A�q�P`40 K�G����0����\a�j�0i�7Lf@���N���N�G��qK�����������������nn�s�����Ug
�J'��GL�����n.��nC���GXS�k��o��HM��_\�W,�w�s����'�>�x�� q�9_}����`~����;��&��H�(����V�6��������c
����H��UK��t�Y\��H������
����R;9���}�+)f��"uF*[�eK�5J/u�w��f������B��/�������`���3�Ir�%_�Q{3�(uu��I��z���V�Q�� Qq��?�
N���r�Q����uy��Y�?���O;��mFj��������������DT��v���M�a��ZP����������CMH5�w��d�)���!��h>�aMGB�K����u����|����d������v��L�T�����Ay�b�7����&3M�I��ju��]�9#U�T��Y�T��v1Z����DrC
JQ6���H-4�f�iuT�K�]����O�	�e�rH�v��C���5i�H]�-K�f�*^�0�E�2[��I�_����)�Wf<i|�w� y����&5C�DI�> �������]}xW�w5R����_W���
whWY��0���*���J+tK������+�tM+y�'���������W��@�pD>�l��1�p3��K���`[t�H�SQF��Y�c��q�^�nX��#F!�R;^su�c�;��[V�mw��WD�E�f�C]�}K>�}{�I��c�Xf�~�{�R�8�����S�N�b��VC52�z�c��5u��Z���7�V9����>~A|<WhsF�:���5E�����������J���I��X�Y��Qj�^�@�4��v�cw���x�`��9R����G�5SO�����'8�fk�C��-$�f����r������;������R_��-��1-l_+&�*�66j�Q�5,����Je��+�o_/wrLU-3�
�� ����1$Rg��t��h��0%'��K:h�8o�EP���YY7���i"���[���TqO	*=���h@�+5��I����'���X]"��V8T�V���}�V���EZ�������5�9y�c��n@���������������=�
ha����&��u
h��%��k@�z��Je����_�g��D\[0�-���'R�Sq�W�#�H���8u0����g0�n�|i��o�4[���n�aT({�X��Q����-+l�-�{E����g0 �W6�U��?��q9��0d��O�����6�K�c����t0d�0��a3��.f�	e��u�@	�60���j@\�pk��
?$G�>M�n@�)���������;�I����k�Cz�,vx�q���k�B��=Gj�o�Au�$H�Y]!N��g@�D��j���;=���2l}�9���.2#�5}��n`D]��rjW����]3�	{�������������1����VC�y_���,�_���Zf,[�[s�������l��=��c�>�2"�����sZM`%~�H�Ke�2WT��;���6��\�[�Tu��2��u'U*�����'G�TU��f]=��{�`��e�-C�w�	
s(������|����Xd����K��b���,7��)���Sf|�e��k��peKE�� Q�
���r&��A.�D���/��"�������]t�qF%�9@�O�����n��6�T�N�V�sdNM��|�L���.��	�O�������H<���9�*[5H���\<Q8�$;�d�8\�@�l���%�,�������Kk
��u�~��|���/�<�i-�,~r*��L��%??)�����Iv�S��4�x�3�����d��T�Y����j
�����C�[�x_G��W�n9uB�p����0�V���z��.���s]v*J��
g_�bZ]v�hi���ZI��-U-A�����++*?����5T�T�-����
��EA�����L����b�}5i�����?�a���gOv�Z-�@4t+��-���b5�qi������e
X���@Z��$c��kE�y@7���R����?Q�� �i]X�>BB��Fx�{hi~�q�qVr�~����A|������9~�����k_�m��5�L��9����g�{w���G�vx�^�hj��M���R5���K���4���?��_?0�����S.���y�J��q8T��Xg�f��?;��|i�����P�N��Q6'mG��MJ���N���C~~2}�1�\�z����DV(
bIv�C�r&�1��Xv[��pg>������Wf!�1�@�
�x����1��:���8��'�����P��A����L������;��O������N��X!N�r
����x8�&=��/�n7c4��#�|�%�`��M/���~�b���E�.�/��6]����i�=,��?����������X�r���TR�Kg/� E��9?����5�;���S�N��mPt*����F=;����P��J��=��������fQ��~]�:���������u8�
�S�v���e�&�C?�����E�W8dz���5@�����y�n-;������F��h�8M��j�G��
 5����t��@;J����L6(r~��������2���y����65����%�[7H|���:��Z2����M���9�v4�'0��-v�5"��l}[]����o_�<,=Wv3/@�[*�0�ne����;b�������I	��������7��9v���9��6�;���h���5�I�{+�J��G�J��<
[�G�W�-��m�<��s�f&!���i������f3�
�Jp�K�2�8��W�H�}��b�'�s��-@���%YG�w����<���$����zz<F^��pN:y���G��L_1/W�(��]�k�U85T�]!�EP
q��A� J�;��*>���m�z�����wZ3=~[M*=l�3�9#5#��f��X���_0u��?i���9��#R���k�:�P<=~��2��pE�.���Fu�#~�c���?�������{���'��Z�����*��BQ�Yj8�i�D��|�A�����a�:�����h��KC�p�V0��t���d�t����e>�i;mV�\�{�^���z=��������:VN!q�cZ[�v���s��I�|��9��/-��i�-�V���Q����D�xh��8�l�.Wu^����}F[o������h�C+�������������S�V��I����E�"�o=�Z�Y�HewK]d���������a�(y�B���������!�N���k�����F?)�����5'���7c4XR2�����|��Lj�����Dx�t���`Q�:0�5�t�a4�������;�n�H��p�`�:��K���Rn��^������F�4�O�`@��������A��UG���h����x���"����?;�"�M.�����gK�R@��M������m�\�o���n[����hK�4`n��2<����0`;�87�`�s��pv��X�p!�|��-�\����jaG�1m�,�zdB7���5��5����i�]]n�Z��
}���#�bF��h�1�#�_P��
�d�Lq����IK�y��uL
0�o:!�����6��j&c���,�=��*��W?!��������@J�����|��C����?;�l�1m�u���������3������u}D��G�m0��p5����N	��N���gx������Zu@��OoO��$+9z��0�}i��Z�h���\��^�����L���m�����i�Sq7���0!nC�����V{(���,3|��p�?���6�C��u�R���Cz-OO����I�����E��@$g���1�m���Jhi�!i!��}�6V�������
q/l���B\����`����f~h+%t���h�Z+��w�<rM�;���K7�u���P�{���r���!n���b�7�m8���M��|�l"�0^�D�q]dR\�,�uMC���������!��*/k��a���d��*Ywk�Qi�|8��YB\���{�o�PGR(u��Y*�(�G�0��
�����.��+yk�[�h����,K�-Y:>�����=���=q��K3]�-������lH{h����]���X�@yi�/�h��i:�k~kk�};��C�+�`���^=pP^������u������NA��8n��!��i���I�%{-m�������)���>N�48xx� �
��)��1CC����+�E��?*S��wsJc��a��j�����|��6��|o�����>}NB�9Io��O(��:=��G3J	4����	���{��#�=�Iz����Ils�J��9I�aN�v�7��Fk8���7�	b�sg��/�3�%�I���8'9PC�=�s��q�#�7�^�s�����=�g�c+4R�w	;�!|�$�I�=�[����O��9I�\��#�A��@J��y����X���e�n,��m��8'�;��1n�XO_���9�@�b�1,}���ha�a���FEh�������n7��:���<���F���h�;�:�jMs�@Z�4K����
@�K;^��z��	H�{d,���������%�#t������|�9 ����r�WZ�>Y���O�4���6�*�w:0��|<���Q���hT�7*�\�Kl:}�w��l�9?�V���h ��
@6��wbm"��h1��F��="D3�$r�1CLG�L�Y3g��I��ayA~h��r�<u��WL)F��t'�V�Dz����I��g9��<hq9$L"`�����^s9$L"�<�H���j����-N"G��!i�N"/l���&��	�H~�iqy��X\B�0�bch-��0����i��u�%N"��I��X�D	�H��&�.�S`�3�&�C��]����8�$�I��)�(�i���8�B�`�c���a<����EK������L"��h�
�7��(��a}����f�,��I���$��@����rMB�(o?m�������vp:��J��5�\��Ph�#9FW���C"�6��h��������m�����B�{�������
��O��0VL��C;
1W�,����/c��aT���x�3������Kk5�k+��&]x����g����[;}����9�������jvQwa=�i���U�h�Ty9LvY'�Kk%��}hi�CLDm"-[d_�Ol]k�0ypx������#��\�<8��3��%��������
���u.<�-�K�:%�v�����62��.��N)��1�&�,{f����|�Pf���\�;%N+��Z���ia>�U�t�:m� V'��TZ��7K�a�}������{h�s�H���k0��i��46	��<c�qg��6��`��"a �P�U�,{�ST������H���{����^�e�B�.(0[�a�=m�S���N�p���Y���q5�,{�����u���}��j������{�i�&9�����cu9�gc�Nr>;�aG@2v�������M���������Z��1�@K�$�������'tN�[
h&S�_$Y��;fnE������4�H������������Fyb���c���ec�Y���b�?��6f&��L1��v��	o�Ws�����^��I��x�/S��"50k:�������eb$���,���Wu�^�������1���5|��r����jP���f����cBF~
~~����iZ��&k�9�8���!<���k���t�����P��C���nkuux��
�5���5pcU7V�'���-�8��M��w�UOo��\�WV��h)��Gj��9=���g����'��
�����y��Nf^�>p�@�`��u�6����@�}W����*���~�X�����j<5����&���>�l4g���d��u
G2NC�/o�SB���n[���5�o����:��Y��
K�k�[���--5�;W���P_���[�`\��/3cGi�.�<p�4��������O�,�V����&�8��:;�?mQH�g�o9�E��6@S}���A=�7���/=�>�Cf���|~@��sf"��&����%���l�N�O�,��������I���i��r����
��f[�m�r��t�w	4�H��F/��Os��-�3�\���OF������=D59�@���G���v����3u���k���|s�>��r���7�am��P�P��m����z��Z�6%��x3u����r��\���Cl����a��,��@�qi��W��'i-��(q��B�
�D#m�-��P�(Yg1�s�kg�@+�ng��7��#kd�B��/�T�LET����UD�\[`X��C�ni���af�1���B�<sk_�E�������8d{X[{	��Z��l�z��������C�H����@s�[f�b�?j��D����4��p����Yi� ��}
�M��5+��&W�����
��H���
4�8T��/���r^p�g�~��T�M��JWU�um�r\C|q�t
����A��l���EX�:| ��Vt]��{\@*���J��):i����C��.g��b�>x:h��-kvNH��&�X|�?���zW��$�tI�vFA�������0P{��BT��:��B��>�
��
�
0Y[�O&�� l���j�&�8�Z���Q�<�	�;y=��$��}Fkz�r��w�&��q�Ov���SX����@������G�.���V�L4I�Ftm�<b��R�uK�hzv��R��i��5�� �Pe0P�C����WV�� w���/w��� 
�U?
���*1w���.�`���0�b���:�^M|��v��h���kC5��/����FK�
<5H��-�$�&������O��Q��es�C������4��A�����n�_�$��`�j�t�UN����@������O�	��Y�~�=�5=��]>\��=�����T�/�$�=����8����6��a7��U;(+��.W���:�|������:��9}+�<B���9`�sx��);=\�)�����$���&�V�C+1���J~Q�iM0�~�B����-�O����y��L���&K���o6�����`5�Y������Z���><�5��]��kt�3Z��eN�4�x�O�Hkx������-��tp�����sz������r=���E�>8�iH>,��� \�(��f�8�����L53X�p�A�L�[[*V������e�l�F���lN��`f���b43y�"����Z�z���z������U�|����9f�����@���`JT�ac]=�������D}p Z`�hQ,F+o�)tl�*�
�]q�w��|h�b�/����������-u��JbH��"��PE4c/\��X�z��:h\�Z�F~u�iX0�x��#�a�:��
���G��n�U�1x�K1��h���mgJ� /�E����d��S�e�;@{%Y��Y��9�dP���tA������T��j��'����9���f����x�:BP+��4{�P���n0=M�6n��v�#[�@U������ Y�����vd�06K�p3�f���jp�<��]�Z��2�H%�`_��i�<�c� �sF
�Qp�
�y5��j4�?4�q���y*�{V�4�--9�������S��������4K��g#L��1|���ZPO���0[j�Q����)����U��M(�1�j��N�('�V�����$�u
(��#7S���X��	�{Px��X^��e^
<?a����50r�������u�#J+���4�����#@��'��O���Y�t��Q�s�U����4}%�y[����\[nr3����L��/����v3��6�����R��(R�
Aru�"����\W������ ��y�\��/���X�H��	���58�T���YJ���������,���+���e������z�����u �V,��:��������\��o~�=�����~/Z��a�?|oi�����a��T��]�Z�2���%�n��D��\������~��m&���-6�B��Kk�����u2�X��gu��nvE��u�^��C�D�{����D�����S�t��"�u{
'��Sn\7tj���>��	Z%�Wj���� �h�7d��9��KIA{P���[�[���@ZRRB�[���O��8�>�8,'���@�j<�:M�0�>�;��9s O�K�m����<�[3����+��{5>������x��/�CKN�fH��l�y�1�g=x���r�> ����-1?����!��������	S(�N�e�1Sh�a�pMq�X�a�8���G~��}���
B,=e���CN��E���i*1��&�'�6A~i5�������8g�~�A�P��!���D�:j����;�u�<US�3�/B��DZRF,3����,��Y��F��������-��t�����(�����^������,Z��-3$$Z��K��������S���I������qV��x�t�FS���U����Xg�F�"]���&�H�1r^�����}�cd
4�����E}������`t�'i�>�}��MyT�3�	���M����-�6
Ej~�yP�k��<���������w���d!������T	^Sm�
F��4�����������5;�n���{;�����7g�BE�n��@x/!��_.!�A�.!�%�p	!�K�����?���o�-����d�����3���G����L?��_��?�����s���Y>�.�{����@��w��3��W�v��@���_)������2���G�Qv�����W�j��@-u�Rw���.Pg����_������������]`W�����v�d�. ?d����/�h��������|�]�����v�����g������^�V�����������.�}�?�.��s�"����_��c?����9~�����fv����_�r������g�������%�5���\��M�_������7��N����5�.���6����]���
����v���_��u�����������#�\�8w26�w������?������__/}|�����.���{����������]`�������/zln���%���+���������e���s'���6���B��N��D>xa��CB�L+�G����k
��&���tt�]B��Ut�<C�9`���`,��+�?�(\,��A����7r ������E���A��
�*Y�#DM�Z��B]���:���W��]$F�1����`p4���3K�(���f��y��a�p�p�(�4�@�L�X�d�p�|�}��.
�
�n.
�M]�]����9G:J8M8Pu�p�t�p�p�p���p���������������1�p���S|��e���<��ts�e{�S��6�����-nY������rb�� �@��A����FGMO�*�Z� mj9}�R��Z��E�U����5@��g
6����)$me[��m9�����q����@X�^?���:����{�����!��! m>���6M��!�W���d��e�>�����}�g�s��h�%{lU'-��Zc��[�(���Z���j�)m�O�u������n|1��S_Z������=�|��)��n��6��U�4$|~�#�3���9�^,�a�7�
����W�]���`-���9��V���%j����mg�U]����b(K�7������t�pi�������Zh��r��)-|O�--��K3s�u{ZL��0���II�6
�/NO�o�?���'��������==��=3��8�F�e}_�K&`�V�����M�"mZ��������]O*��T��m���K�)�V��4Y�*�h�K�[�kC�Ot��[�����#�����X���������%�i��&�La�l��M������>${:-�&�=4>?�!���%�\��_��+�`I�����z���'��������`b[���t�&%~���i9:Y	4A^�����5������f%����J��	��hx5��8M�W������K�)������"@�4���j�V���������u4
6�X�-U�������2S�zi](@*���-����I�����pa�����tA	~���v��J�� ��NA6)5�h5���}~5a����Q9���J���z��wn���\��B��i=Z�O�5�M���G��]i�37���kw��{��=����a�������a�c������WW����h�>6n]��;�����x��e�H|��`�;�0C�����3��{xi3cXG/�7��=���C������Ei9��X��A�n4�_��v��i2��-�=5�}�a�P&p���`��'&����BqcXv����o���mM#�f{�������'k�1�1���Xh�n����r�a�P�m������A��5cX����e�1,�������q�����u�w���!������9}x'����q�$N�pD6��3�r�kb���)6��i��A~i$�A�y���zy@�>�MG�K3�����=���y�Zf�����F}�'�_Q�7��R#���6�k�>��+;<��B��F��_�0���h�����[79��wM��-��xh�j�J�G��"���������R�5J��b���a��:K�b�	07�7HVM�J�bM�o��oZf����h}>�Tn��������������,��e!�m��ww9��P���V��L�k�:�+�6�?
QA���/)'�)]L�6����(��>�|{�/��!�����W�wzZ+�;�KTb��h5��Z��\�O��'�=�5j
44�����9�@B}��+�hs����QU��M?��VP�u����6�)Pn[��'�e=}����'T�4���y���QE?#.�.^�x�3�dZ��7������54��lF:����~7�^�����TU������:����{aT0:��b���	2�����d�%�Bdz�������Hx*1�"h���7ka�B�]5O`b�������
4{�&c������`Lg��n�{���'�<�z.�O��H�"O���
��������\d��=5(	{(��>�%�9pv�������t\������r�������a���r�;�T|�#�h���.W��`��q+q�vE@�����BY����Q�V�!RK�+������;/���t!��Ru����m��qy��V#����D�@��%>����6kU'�]O&wP��&H�����f�zD��3�**�:++�B�=��d��������x�p��T�]hIE��n��<N��a�����}�������Kj���;k���f�
>Gr�����:�\��5R�����s2�?�l-�����C!������6��x�������V�9_�<��P�<�s�$R���<_\Kl����]�+�S�>?T�$J��O������b�����V�SE������
S�f�i��\<r��X}��?�-nKZsy�;�����,j6��
��9R�x�6�5�w�=�4��\%��UR������
n�+�|8r�	��nQ[e5��|�;������DT���%���El������=C+��PI��C�������� ��s���)R��|EC{\����Z���dh/zm�1�iU���\�\���@��&FL�I�����7���$�x&w$%�Ke$���XZ@����I���Km�Z���=�R!��j����a�2m���zw��P��t
��.'+���o��Gt2�y���Wo�\��dS��<d���vZ�y�F,P�sM�����L�|��D������Q�{|},Cwh�������VsG������"f|�1��|�y�[�\��K�
�Q�����I��%a�� �|�2"'�+3�E����c�2T��v,W��
5%3������R�uM2��2��n��W7�H�l�8H��4(axMN�+��/�i! �9��p�'.���".����AA�i8�[���#�-b���_�+����d:m��P����2>�>|���7��*"fX�\��5;����}�����������t�6��:��q��5rLpD�s}`D����b�w���f�������W����6K���6b��;�,�e|�����f1�����,�������~K��8�@$������H<���u�K�7o�����}���CQ8\�=z�>m����@6 $�����rh3SAZ�w��E���1�z�g���xZ���O.�
3�.�i���}�������IZ�{������T�oYS�����d��aP���9P���9�<-<:������+���Z��c*�'&:�����p!�.�C��Vr��oo���h���-ZH�T�����U�X��7���^��e��P��T��X�����f,K���[���:R�*��:��a��je'�Y�.X�����8���PIH��i>�^��'�8��\i^%!C�>�y�f��67d�@�z,@�>|�g=UC������\�#5��:b8^lG1�_���V-k���g�=��?������j>xx�E��>��#�P�BM(���������e��+�
�/�^�4��W.�����UOq��$l��7.�N^��4N�N�/����[Y"�=�������
/�,���v}�3� �����k���s���|�5�nL��|t1���ty���3LI.�F�������T}��w��.	����,l��}�H�@���[����^4C(���b��R/��S~q��e���.Q���Vd����U�(�o�w�GH:��XNs&�U�X�rqN�x��I�2��:�y��V3p�ZN�_n����V����Dj��,�� ��~�_k�6.e�����hq`���T�CbT~��WO�����?����.�jm����2�����u�[��y����me"�s�B���X�NNV�Ae��2P��nL�y@�sE]�D���Nm#��D�]/�+��D"X}�W9���0a���s�X��W*�����;T���?^�X��q�����Lm�1����_����$��/>��6��gj��/T��c��#������X{!Aks�w��p��VwJ/�=�����.���"y��k�A���#�o���B��/>�y��i�����vk,"����N�5���8�y@����"2�5�����v�[����<���!2�5W+K�:�w���n�y��y@��&���f�!/u�3z���U�����([�T������+SC[d^�
�Fe��*VW@9�TD�/��x��_�He�����������0�RRx�HX3�%<��P���/5������&����e�Q���{���$f|���n��QG��z$J*c�n�D���v��+4�;b;��z���a�f��D�B�;[2M�9?��!�k���
�_�!�^��=�$�.�N��@@�PPkh�T��S:H����%�!��g�[��H�aK��einP��s�T*#���v1,<+I�;����"��j�Vj����w�����H�P��jFQ�w!Fe��!R�C��ci�pzV�V�(�I��a���PO`{�;���c�R����Dj_o�y���\���T��u��*�>�E�qr������kL�������j��DY�}D�Z�s~=_<��.��A�F���	����EI����ck�;�!bs��.>3�������zx������\��LK��wfZ"�6(�L�������Y;N�Q�H�L��8���Em6�(7�TI�PP�4w�(���W�i=�$��L�0fZ����w�%b�
�-��l��>x+�LK����eDsfZ���fZ�,��X�.�b0���1���c3-[�+�
fZ"q�%���/�p�%bk|�8fZ�sq�%gZ�������9�j�l�]�[��:����w-��
�2�������9�]����w��}��si�.���	1�;�k��2�b+i�g�C��;�j�
��_���lf���i�xw�|������;����~���9R�f�w�ea��A5�w&%�w}��r��1���8���8�>R)���[��n��\�6*���x����@����yl�C��;��l�g����;���`�k��}�������z��k���6�����xw������;���w��}o�k%�������[yg����s+6'���H}f�s�{~FT_j��,f�����w1sn�#H}f��J�b�����b���X�0sn����[�3�����n��0��g���3gk�S���qs�V������R��Q�����^*f�/�����V�LZ[g������}����[m�5�0�VT�P�C�3���q�|k�h3�Jg�2C�u���Hze�!�g����'���X`��H��g�|1f����S���y���G�9�j6��Y���Rv�h���3���C�9�V�H}f��s���|3�������s�M����ia�:�i[�8��|A�T�l�u����^��P�e��Q������%���&��j���,�U��Y�nR��P���KQ���m�l�w�Ko�ClU5��_������9���o��RUe���f��w*��q��O�W{����e������:$����y��w��2�������m���b����V�W*�D�eN���j�bN\�2�v��,����3�/T��|���U�R���m��|~>�e�E>����X����-[\<���L��l�l��1n�V��'�O��P�m�Q�uPwc+l��wz|�-�}�9��x��9��L	��p�Yo8��sQ��S\�>O��Q�'[�!�N�R���8���ie9M9#_�	��.xsA^���a�7��-8���z��_��=�k"�z�����Tn�m��g.:xu9��\��,��Yo��#��_s�Y��a�6_	}�V��jA���\�h������
'��>�J#R�w����$n�f�/M���m��7���RKp�=�RT_]����&UN�MGv�����+A�+��l@���1"��6"?E��t��)�������&>�#q��w���,�w�)��I��I���������cF����a�a�-�D���o>,K/$��Y������	���i�|����GH7LrH��@3�������
�P����*�wF�d�^3,�D��	����9�C�d��ER`����(��b������j���x���%��X����'bd��j^��:v���2i�=T�-u�g0�X�������o�{;�7l��t����N|�7�~����'����_R����!*��'x�Z��(�H��]��s�5��?q��O;��-�����qV=�\���>�H/��(W�`��,x_9���+WG��
��	��#mF�b��k;�!P��TJ
K~G��F+��+N���1[����,��eD^;v^�|�Y�����_���o�hx�U�����4�����tC����2��7�������_����Cb����V�������
n�~�#?%�����Am��s	
O���u�-W�4M�I��|������f�Y���b�5gk����o����*������"����u����s�x�[���*\6��P���k�����k����]�%��2	�H`u�jXRc�b����fq
�s����89�!��^*%�CV�9i�Hm�H]u})K<@ExFd�}fl���P'�y��K=z����Q��6ZT��pl����������W�~xp�k��xP�X��������`��0u��)��nY�W��w�u��-l��]g[���_P9$�����AS����%*�����.���rZ�*T�Dju�:�U�Jw�5$��XV��X�g��Aa��Gt��qE���4e��7�m�u3�t�ey�%�5����zG����Q�
��XW��y���������gN������c�B.>-;h�v�k�W��������U<���-�����H2�W��7fQ��PK�^Y|��W��������"A`l�r:p��ZHgW
W���T���dy!�l����:{�C��Jj��D�#gb'�6��X��=��/�f���t��(�_�� �����7�����	�j�m�@5sL5��E���Y��jKg�U/�I�l�)��O����v�v+*a��d���I6I���#E*���$�b==�� ��+����4le�w��M�Y����v�.��C���j���[WP;F�T�)���7;R��j��j)6X7���h���������E��R-�;�f�R�w@m5R;��G?��@�����B���P��j3��e���+��Qg�!D���:}&�����j�L�]1Svj}����?��eo�����=T7����w�����(�����C��G�p(f��}�tL=_���Q�q�/�s��.���C�#��x,
j��%�K�5�(]l�����[mC�Cu^;�A�!�����`��vbuI�T����R#����6������>�{,5����:���,/�s���	��L�C;J�j��Lp���������L�q��{��x��Fg����I�3uLg*��Q���uyb����k���5�*��]^�H����5��X]^��.���8^[[T
�T�����.�FA��8���\W�r]��kt\K��:�����L��
O��.T[�Y����(�Hu3��h���'����D^;�VWm���D^�(���c�Mw��Nj�D�<�C��d��}������PX�m�,q�u"�������0L}9����Y��Pl<G�;U8����C�n&�T��j���.t���.��ap�3+�A�2�|��i��'���R+���b�f���la���]*�^3���t��*us�,[�[s��y5����lq12W_|�����1���Q�aE���j~k������5�E*����+����R�BwSL�{�������`+Q�+���a�
=c����\'�&q�9y9l����������D���z���Y���J�S��.�'�����q#L�����k;Y���H���/��>mf��m������Tm��R� P�<F�ly��#�HU���b)��R������dd��+��k}�'��/����P
S��v�,���d����
���p\����?�K-y��T�N����lyY�uf��'Q"G��y� ��ALuI�.��M��S��9 
y�1b�r#~I�#���\��reJ:����L[��k��n�M*OK�����>b*T�H���/UH���[������Y���r�B��1���5�zZ"=Cy��o�6�m3�P������	O; 4��T/{�%�
:.�.��K�����_����L��������w�Z�-)���.)�boa��_c����u�����<�m|�����k2��X���C-�e��l�Q�B������f�D]�=�b�������n��DT�K--�uo��q��z~7���K%��(_n�"�\g}�KQ	V^�%�4$_��P�KM��g����F������b�_�e�7j"�{���.��g
�O��E�P��_�Q��UD�R���Z����-S������b������^\1X����,Ul�{Wdw*.���T��{����]���UN�6���������c����`K���aW�D����C�_r�������Te�+�~2�����C��VJ1D��HM��g=U��k��/���sb�Q7e��C�����W�N���t�I2OkYmncW�]��I������Gc��G�����[n����RQ��nXR��rcU_<��lV���r����#��n�U+��]�>��������>��<�W�>T��q���������h#l�3J���Xw�Tr�����g@�oD�>{]DuD�4�l����_j=r�������-Do3����y
}�k��J�0/H���B�Q`F9#cx8�a��_��NL���e�&���5<t!w�Op��9B�Q�q�-t���^�=��Wl'���-����+����6*�2�� �����/����_jF����n�`�n*��w�����a.w��Q���x��S�Q
�UU�*��a%x=!�;J����Nx�:�T�9���gU)R��0I^�����q\�
���4���7y��-+k���:o�����[����S��Y!���k���|�����������P�Ssy�/�3��P���z�nt����}&���TJt>�kC��|i�l�&����hsjQ��->��Qk5��N�7Fm�h��uC����J,K'�/X�q9��+p�8{��������J����G�P-����V
���K�G�n��wUR�{�(\�s7��$�ws��=|��|����_��l}��9�U"����nNi�����?i��K*��$�{���Ls���~��?����W���?9���\��}�����w�<�.��] ���@��w�]�.���]�H��/����Y��?�����e(��.PS�j��@���^w�:�.P��������_���?��V���]@�����. Sv�!����]@~�/�k�K3���=�����������~�U���s�f�{��u�E�>������}���.0��F�.��>v�1��<?����5N6�w���]`�z�U�s���]`��?�.�s�J>��T_���kX?�.�~�]`�Z����.�y�l����F����O~�������c�+���U�������M�5��������_?�:��~�u���M���N�a�[N�nU�s�;_��^��w���7�x�K�a�[X�[�[X�!������~��l���m���m��s.c��������������v�v�����*@eZ1>���XS�,4����N������6y��B���i``�2F&�����#
DqAt#D����)������E���A��XP2(���n�A]��Pc�4���W�8��C����`L0,52�o7����&
s����v�����?�sPG�Ag�'�������%wQpWp]pcpipo�����7�?�9�Q�i���3�c�������#�W��Vw
�M7��W��!@�����#�M������������e��{io�L�~���x�����Pu��T����`�Gb3�	����G�'v%�J=�z�=045(<���^�x��>(�57EXF�:�>�,�N��.{p��pE��w0��8���jL@�hpq''�]�����\=�^����&$_�����k6�^���&v���n��.��|��G�5GnxW��s0g��3SY��3��5�qG���eM����#U������3S���z�Oj�#���]@�����8��K{��`�b����4.������8��t;6�������d�:���O�_;�&��"u�wC�v����{K�������'q���P��mP�P��
�:s�R��1t�����/u�X�Y��{���V���4\os��5�}w��T�PLf�b�Z��j���p�����T�n�*�����g�j���}"k�x:�����%C���TC�lG��*��b��b:���!�_&urH�v�~������H�e����<���]\fT��u����w���	�	M��2;���e*2y��F��h�����
=�J{�{cW�}^-�6`8.�|'����j�c�He������wmF+t|NL<�~���0X���*�
���9:\��+�tM
+y������ �lx5���\����)���B��8BD#�Lz�@�`�>R`k{�-�����U$��#��F�fX{��qF�T�/��u7��<�mY�:��/��^����uu1i�������5�c�x���b�&�\q�u�O=Rs5��2�V]�1,�M>��T���<����������5�"L�&�+�9#U��x�T�{�Q�S������JP��I��g ��%N��+�Zw2�t��L.Ro���yD�����B���/g+Opl�6?�������D��
�9l�7�T�wG��l��nNF���>��lp�7��qcb�:'[�F8
���kl	�{��4��[�����SU����)�6V����WrjY���\����d��z5
hb��
hb���rDUu���n@/��D��W�6��k��d�5 �7���J�.'YvDr��@h��� �����J������#�J4���*��/ge\r$�R��e��&\
hb?�
h�y�u%[��<�
hb�4���-7V���_rj�4�������������"�uL"�-�`������T|�+�I�v��_���y��������7����`H�e����z
����F�#��!��n�Dq{E����g��+��*�����kdn����\o��+l�����&|\�t2x���xP�g��Ou���x��6*��`��usX��	7���t|�KE�qE�C�O��
�y�	������D���{���87���0���G�B|�J+R��e�.V9�;��N`����F�T�{���wzN�0d��>(uE|�;.�1}JE��,����C�h3�7�`@w����={T>_};�0����n��As@���Y]�}�+�eT�3ZC�������\r�n�V�He}�0iP9��|��2"t9G	�8H�H��j�[�wI}�l�����>O��PhU�������F��f{����W0���pr�HUE��`�%q���/uD*�����4���Hm�-K7�n5w���Ce��K���TX���
�dF7Ny���&3�^��u!��=�9���uTk]��8����������U�v,���T:�a}����`��|P�z��������������92�&�W�&���(��yR��o�d�8����v�GWeOn+����`��j�I�c���e�H$��%�T$3���h;Z���@��`�Cp��a��	y4��t�1��3HaD�P���
�KK#�K���$;6���p������3����=��wi;��� ��ZC�d>��8�Yh�Z_O�����5������y�u�`��xvf��NEaGb�����=}���U��+�J���-'����++*����>�{�pU��4��6 ����C@V3h"�_����$��0�O�X��������Q��[�o��hS��w����������	�����x �y�i�ZQq�>R���_r�������I��%��V�}Dyj������l�[t`���i�w�n5�p�nu��U����[yv
3q�������cwf���n���m�����R5��d�N�T8-8`o��{9��x�5T�>/X)�2�����3�����lXR������/��if��:q����gm��T����=3�3�;����*��q�v6?'���$@di]�I�&s$_�)�uow�#8�������4�h���-
�
dc����@^��Z���B%y�����Lv�[�i��1u��M���;t� 
=���
q��kp|���kEi�+���ti
��U{��zh6�J���U
Qki)���Yr�e������4��q>�f������c���O�R�]uR�k*)�%��{��"�5/x)�70".���C��1�2�MeC��
���Q�;��7j�����T�Y��u��Y���_���$�|(�x-�W���uj�������4&\����_�"�+�p����6`��kqe��������z9�i%7N�j���q���j����9��q���[>��#H)����r~�����!�I���fw���H�a��e>����S6_r~��PA���-���Q�&b��gK��M0
���G�����&��o�K�|������%3!r�vi�dO������'��- ����y���HM�xs1/@�R���z�3���!�@=G+�?�RpT���&%C�j�����J��<��u#oQ����5}=����W���s��d]c�4^�|�s�Q����y%x���5�8qj�
{h�K=GE�=q��en�_��[�zt�1�~�jf;��%��@M���	���c��%��C�@M-�Vg���K�G�8��b��*�M%�Ub����'�t���3x�����[	�s��<�U�a���N�o=���!#�9#5#����5*#�
��N���GW<p��D��I����C�:�:������p`�o�2��wC�`���i4���"<
_����[=�[h�a�ii��f�:Z{i�D�Y�k*��V{(�q��,3|��V!~��6T��:����OM>T4�6���x�����=&�����9�qf�g1QO��Xy���p"�m�����3~}��>I�����f�	4�8l�����9����5��C[��3'�.��|��K;��V���~��I�YZvAzhb��>�N�Dg�����X�N����S�;}���������e�{��D&��u����jd��f'hL6���@U�eM�*���v��SNT�]{�j/�-lv5�[�Y���{������m�Q�!�]h�u���BWt/�t�A1T0^@�T���������z�#Y5_�����q����
����@f�p��2�ZS~`��=�<m-=��`��6�)��#�o��p���q������������a��4��X h��M�nJ�\�����I��7�$:�*|	��u�DH��|���K�z��N����gX��	`����Io����V���C@f���.�}(j����r��R�b�.��0|�]�v�_,>�����������R�'!l�_V�]_��������8� �,x�X���l5mF�jA��.7go���[����hv�-�)�@Y4��\6�C}�6dg/�b�}��9�,&Z��T����� �!5knL2Zw��'��5���q�|����=s{v��y�w��������M��5�3c�������6���@�Q;�=I�`A���9�=��%��������������0������>z[K�GiW�e�j�l���|�Bd^���eo��~'��X���Fb���5�yX��A%nx� ?�:B9>��:�
������0,q+�����:�������.>�CF�5��-�����"/���xn���:�����8����s�V���up���%��i����MK\���������jzhX���4��������a%@�G�	7�7�~�����
=��O�%n�7���L�x����_X������DY�������%�iX�6
u-w�[W�	3����&-g���u�LL����m��.q+��`���]��9
R�$����[�/S��y���!�����A���U����\����Q�<�V�R�\�*g��rX^��������2].���_��7���');�r�V��K2�:���K�|q����m����V�p�x`�����
4(f���X8(/��O�}=��U������
ic?���I��f��CI��-	<�����)���q���4{�� �
��)��;�����'W����V��|7�tn4KJVl�6����=�t�k��=E������|����{���=	�P� 5Z���8f4����-7��Q(���C^�p?�I���$��2�y��4�jG��v���y�K3'o.�Z�Ti	���'q65�%���gO���T�=IkaO�7��Fo�w�f�iwOr���/�[�'a��'�+)\�9X=��'a�q_��{���r�$�-U���o��@�{�fO��f6S
���IZ{�$x�C���=	yM[���{�����	�����^r��[1�������L@2`��3��h���+�q@�5����l�nB���dz��?�LO�.m;-S11859(/�L@=s�������LO�I[��a�#Z�G�����#,����vu�����%��z�a��:|�87����3���3��-����>���z�Y�����;Q&0�>�;q�4�t����r�������z�����CM@��&��1�M@������f�gy�o"{�N
��^8�7�m"/���P�H����=l"{�&����������D��t�(v{Y�7���Md/�����%l"`��l"���&�@�D~@�D�-N��H��-n"{����v7��H���M���j����3��&�4{h�x��]#�[�Vy��rZ`�����$�GZ�D:<��^�M��y6���`��0,X������ai���<]��(��1iqI�Md/<�O+���p���g�+�n���
h�I��Z����^�&��"I��z����s��-��2�����"������x��M4,�H�a������D)xL�N��0�~z���p�����6�la��
�`N��flq4�r������vh���W��_K4!����2���;�4�LL�b��	����eS�H�:|��U������vs���b7��z
��u�J�����	~iX@`���=32���b�����-���z���@,+�l�h�O���������^�(O[&�R�@��@��^���:�xh�{��
D�u�.���pz�������1����V��1�q�KsY��(m���I��r2��&�����HTh��	�������������I�FW�[~�?���h
���L4�[�F�Q�-M���w��3�{���v�8!8����I�����:���<c�qw��.{$.V���a��N
A����f�i3���b��.���.{$���r�v�>,5�	�4M���C���f;����h���~��0�B:n@Dj������j�d���z�8����=
=�(�\@63v|4��������������xh���v�$�-y��X�7�89�s����~2�T������"5���o���$v�Q��2)���e����4�H��T�O���W��2����-&����"7+S5[jX�v�}���'��Q���������E���o�xcs��G�����V�������#�3@DdU{��0���En�4PK���W�3T;�����	���'c�/�u��y�0���_�g4A=�������3�K���h���x��p])��vE$0t(����������&V����:�q�����Fh@4�bZ{i-��kx�_lx���f8�:��#���f����V8���he�Yg������w�b [���{<T=,3�T�y�,>2e�^�o�6����>�U��O8,�0=]���0��]�&�K���]��������|w�T'^�>3�O�����V�/�7h�S�@�&�'hfrj��UJ4{,���e���]�e�����k�LYQ-�\�U����N
�F[v���s�xAi3��h��Y@A�-���o�����#�������h����;��6k�,�E?`����
��
�v���O`s9X��n�g��������ME,��������i����7z�x�.<����$g�����MK?�q���B]���4��X�����BL��L��r�4��/��������7��mS=�����r�^�r�:�M%2����ro��N~O�M/���9x�~�9��8��&���]�����AB����|������q.]>�Jh���08@D���:K�,�:�+��[��UmB��6��>�FVl����� m�(Wu�\l-U�un��a�N�\N��#�f������B5c����8dE��<u�h��px�����f������F;�����9\�����RT�}W�K+����u'����g�����}	�|�����n�.�F��O���/����4���,��U�eq��A��[���4��3��X^6�����|O�~��d�M��LSU���+W���O����6%(��7�Zi�"������	t���p��v�%�Jz�$��`G�<0�o�'ds�H\�7
x���A�mK-������kd����R���M�C����x=q�$�������h8��h�j�@�j�G�7����@	b��
g�����!�C{v����-O25��
u^��y=�]5�YMf�6�����������6��S�GX���!{���!����J�B�*����v��J!eG��j�G���VS���)����,!��qA
�WBl^O5#C��U�|���f�^/
���
8�y%���a�,Rl�~z�J�aO�<-��f�[���������y���CW0�l�\����i�aI�j��E�5l�
<���K���i����LV����e<�(;����SA����@{�������kw=�3@�J�~��_.,]�}m���fO���j|T�f��y7{7�iqLj+��E���D5�V����5Q��u�b��D�e�LT�@\��L��IP����b\kC/���q��9�p��+��4A������\P�v�B�Q���
�����Z�2����j��-��[����9��`���Z�����BG	<m���%����Z�����Ku2o��~����H����&��T�$El�{z�jv�����r=�iC�%LC�P`����$��,��6$��4n`��p��p@7��L���XrN�6.��F���l-��df��h��s��!�� ��!~E�z��U�9�i�v���A�r�?u�i3�&cz���p�#�,�!�?.�!��n�5�r�������b��h��[T�i����U
T������Hn�P�6��nk���S���`EB�!\b/
:��R�@����]�������������gNq�e�j����~�*.C�
�J�^��GZl'��������i�K{����^����
P�$�O���|�t2���+��tA��&%�������/�>!��{��5&Y33�4�����Vd��mw8�2�6�<M�5n#mk�Nm4�l�k��zB���mM�������G7m"$����M�Ym��M���Z3�P����C��P8��7!��O��[Mg��M�����<��Q����~�B��%��BK�S�Y����)�fH����������S��te�Z�Nj�r��g��S�����T��*_�&l�1t�i7����r-�
��_�������_������c����������5My��y�j`�	���y��@���B�L����m�`��+��C����]��j���^��*�[��r�{-�=H������g�N��cpm��M��Q��h���m�!�������h
�z,��lL�N+�d}�hS�*>�O���P�����`�������V�!a����i��@���1U5�|�J����%����&]�5l���5��N�%���Y��%�������N�m�{r�e[�v�9n~��`���KM�=�0 S{�Pg��u���4P"�������{���8�c�H��y����dq��.����C9�[! +F�%��M��:��X�����������]�ua
\s�����$��ZL��(*�w`�\�gp!��)�mk�����0�i*�J-����H�V�]��[4�	����T:Y5��dox���HK*�J�#���rc?�;�q"
�8�"�^B	4���^�z�r������3��hy�������l��f��������������������G�R�5�.���KV�>@0��c^nJ�����Q����6�,��Z���7U8!�pV�g`��%O�>���Ip�F(���J2,�w2�:3���'�� ��7��E�6�i�F���n��VC9n�I�4�>��������H\Cm����9n-�s�sY?+�i����Y���9k��B3��N6�R��r�y��4��V�5v���]o�Zh���g�����tY�R�^�]��S�F�h�	��/|���|�)���V,z�5r@{i9�����`b.� "���t�Fwd��+��%�0d#.]|�K~D��'&T�4�'i&>u������p�] v�^��^��������U�� ��G�.�L�V�T��j������\�X���`0�������?����iK/��=?�����Z��������|�&S�I�?o�
B��	B����NTyB�'����B���I��>K*��-�������J���_�_�����?�L�����?��%~��o�S ��)�W��������)������?�����V>�/�|~_V�������)P~/����)PS���~
�V?���u�O�����}��~~_�����O�������h�m�����)�~o�����@O���^������?��'4a�O����)���{���%���v{���2 V�7F7 |i&�g�6�/���}����O>�>��Q������7����_�4~�0� ��DX�;>���0���O�?���|�������>�����T�����?����)����O�����������������O>2�)��O��?>����S�S������>�����?����Q���������?>�X|
���?>����O�?���S�#~�������^~�a��������?����?����H���g�?�>�������������|�}
����?��?D!T���b|��|�75��B�\k:��.�{�*�M�!�0�L�L0L�������a�a�0tF�
/������7	���At�j X2����D���+Eb�� �{S���D�����((��
G��4�7!��B]����Pi�7Tj@{�`�F���F���o�,��������I�y3S�G���o2�4�0�0�fLaXidapa|a�i�a��\�t����������c
�������^o�t�txo��t�S/��Y�&���te��(9L�d���rs�-����/[�h?���9�/��@��
�Y[��z���Y!,�Z����e[���D�-Z��O�.��/q!���[��u=4{!��Fzb�e�o�����u=�����>��Xn�����=B|oZ;��hX��3�������}�g�S�}V@]�,�����k�@�676����?pm�����jm�2i�)D��bx�����.i#�j �v;���eo>[����{�-�~Z�g�����t���$�%����x��9�5�vB��x��eh�V
�i����%J��������*��<Ca�Fq�A��r>@���� WC�[�/����z	��[g��{��R#��4����h��D��_���G�j���V����m�}�
;��|�<���\	n[H3��h���M�$�o�l"��#��
���%�4�s?�H�2���n��%gE���Z(g��U���N���V��-z����Eu����aXl&1%�pr��������S��*A�6\��B�����#���w��4���E�+HS�(��&�����k�`�����x���.A�i��|iO�O3�?Db�e������
��`s'���4+GO��1���N�jwu��������A@[]	�
�uMN��e�8��@k��89�P��"���cs�m�9��ZF����jF#���zJ�v_�IS�c�v��vb����$�M#�r�R���lC7���T��S&r�-{�hvM�fx��;qnP�l�������7.�{$��;|6������i
.J�<#_��������*�y���]��(�;���6[� �@�3����#/�����x+-��-���x7z�����K�O�f�����[���������-\�n���8��f���/k��L��qqY�i�n��R{i�*�`��3GP������������8�����&J/���u�����8�2,;��h	�hT�seXGf$����T.��({<��Is����B�p����0�?���P>g!|$L��l���\���]��V�S�W��]����� H�bX��n���^�����(����a��C������v�m�^��J������P>���z���5�w����iwv���>���N����6q�
G�=���;#*������I���f�I�<�O��8���9��$i�Y=�Y��L������m����`�K��>����P�o��m��~���y��'�r������L#R��o��!��5Y�T�DZ�������i�C���m>4�x�����*6$c��>��f�J��7.l1���r��0�g�m~��&�H�fB$}��[0�K��l��iZ���M�{��{i�Y�wx��qAO��-�D�e!&k����b��A��@��|��T��A�mg��A l�7<4��@�C41�j����q���v�������FFN{����i�+`�*n�/m�
�6��N� ?�4B�T�:����|�=w��aN[0���tc�$o��r!����NV���l��$j�.9����r+�:���q6h)Pn[H����d?}o�c��MX5�di��y���QD�z0,�v{��C�q&�����\�^wa[���l����'����=�&��R�S��5g_��w��
����2���aHZ(e��M[�R�/ujM��n�k�xz-�'>s�)Q���������O�������|�>H�}��5��e��NaN���L���bx�������!<����J)������������MM�r��"�o���������H����w���������P�����c]_�������o��ui�X�7���4|����cM@������8�`A���F�u����FPuiU�7#��4����dMA����&� k�fk��������� ��d]_������oF�uiY�7#��4����dMA����Q�GpU[}5����D]�� ��d]_� ��DU_� j�DM_� j�DM���l�2��Y��/���q�;����}L?������ �����*��t�v��p>q��-��D9SK����-vq��\��C;/~��WAD����#�4�����x^���kmQgi��D����T��g(7+XHx��mk��=���<*��>z>'|m�z:Z�=@+�V@������:��wbwW�,����V�rt}W�x����_�����c���]L��@+���O���^18|�'�
� ���Ed��������q����$��B�y<D�P�:~d;C��v}i�e��<�2��&W���e�(�����a[������z�-��2��F+;������|n\�S��g(7�2\x��g�*C�{gP�b���2d��m6��#m����&e {�x���������3)��2d[��2�/������D��z���$e(x.�,���~����	�A2He���V���w�P R�G���+C�Q?����\
,�hke(n>UW7VgUO��T|\�P������vj�j(z�����
hm���bT�"��2}�(C�����2	5�/;Q�=���P`3 ���l��4�(��M��w(C���2�5,W�GXN�Pd�m�ko_�2��(
����H�@=(C�wh��z�bP��P���P��<*�)ep^O+w��;e�j���]hY4J�g{�����4X9����7�H��!�h&f8�S�&~Z�����M��&I6������M�y�~:%A3�5H���������<��ag�=�����R!��"z��!���(�3�r�e@��ZT�S���eJ�m�/<G�e����n��=�"4�L8�o���	-sQ2@+.���������Ly����
-EZ�O9Zw�)S_ZE9���j����?�/���U��[�)���qAJ�&n/M����s��@��C[v��I-�"���j�Q�B-�t���P_�����6�C�3������ej���Z3��A�Y��O��Z?.��vYuE�;���Y3(����\5s�4q#����d�W��1������uA�g�h����jy`���q�����"�����v\g\�d!i��;��5�[�#za27~�u���~�Q.w
4�E�V�://m�?�b5�E�u�(#�|~\c��T	i\��6�q����g�� �@��:��g��U�=���+Nx;%j�V��3.km=��C��V�ti)����fmM���x�q�]�s1\X�V1vuW����5�����$�;��<�P�R5��sr?�y��^n���G
���~�b��j�h�Fk�����j��z~�����jV����K\=Ow?���G���D,f'p�P�f"�{���{����h���T��oq��������o�,��*f�/�?w��k�D�6�u}��4���;uR�;y;|�����F5�/�N���<���|Z�1����������h\��b��5�%|�C+�+���A���qh�',�4Z����RM/bi��/z�+�R<�+�v���Z�0��)��U���1�L���0����ya(��Y?.��f����'H��t�&gM��a:�YU���=�CZ��2�T�BA���������<��Wz�iv�z�y��:e41��(#�4��[�Z��5ak)��4����r�Q`���V���\��-����Ai�&�:�)�a%W�N���\��x���6s�x�p�*Z����>�%��)�1�;�����Ak>]Y<0�:�;`���d>r�y�I�C�h����	������9,NV���M"��~|�|�x
RT��� �Z���&��-�����3��������r��'�n����G[��Y��7{h�	�����%��W|~����dQq�d�n���?�-4������8����r]�1��Y���e�dn{��c�T�
�����3n���������X�r��hA,�� ��)��i����L�q���3��B�3�����%��9�,A�{�*�S�P����P-G�s���G�>�x�������-��������(�E�����m��v*e(��N�����b����`�W���S�=��Bm��xov�����9�-W-I:����2Ts=�2H�������]�����P�o��vJ
�H���2������M����X:zW;��2P��z���q���yep���9�2T�����8���xb���`.�����Mp~|��z.-y��I�;���|��o��������.����v����s��<��@e����`��24��w�n�xov�{��gF�h+)��������\A���eh���x/��O]P���\��f)C�Q�x�6�A���"\��C�P}K�����q���>S�N�	-��y��
����yC���,�|n�ZBf���t��Y[��v���2�1�+����y���Z%h���_�s�ZKy`]�=�I��b?����2�J�h���n',�-��Kj�/pU�[������g��"�3��}��X0w�Z���5����X�`���!{��B��Y6$�?`���h�*�jg?����Z��d�h���@����r���O��O\�����v)���*�7�/M�S��nH���q�m4;x�5n�pb[0t��T���Q�KP��9�m;H����`�������\fF�����S���.��5�x�df������cx9e*J2P5���(iU��'1��t/����	E�`����`5=�e��i>��:�im�`�@���&-A���������-Z�Qkd}�T[o�n���r�����O�8A�%������r���_��H�����^���E��I�ht�M�4������un��V�����?���\c.L~���b[�����t��K�X��v�q��� ���O��|17��g(�wu?LA��N[��/��o�t�V�4?5
�f�����L�C��t���z��%+wO�"m%/G7�iW���tEW�+����{+�F���X���Z����FMD����^�O�r<@47��kO�q�j��7B����7��>s�?1����@W���60����P�����z�0�\�n��PK/�!�5�53$Q��WQ���+�F82��������;���{(��/L�1W-��J��Zl?y���}�N�Yt�`T15�9M�`|2u# ��W�e����~�w�������[,����z}d��4[8�����{8ow�������R
�\�V���W
r�:��s����^���S�+P�@f9��Z��������%�T�4U���$�_��PK/��$K��Z�����,���C<���N��_�z6n�g��N�l�|8!�w�g���l�
��gw(�}���z���ww�v���d]
'��~��Px������]���	m�]�����X�f���
m������x����G�aw�v�U��&"�c���`�~F|�V��q���1.�������x�]�Ml�W;�EU`��.jm�*?��n��]0�X�Y�P}�%E*��V�9�/�Y�����e��^+o�B�Y�%R�~������d>J
G��n���>�#��F�(~�&��w&�4�,[�����||OR��.*e�������x�w���K����A
����e��j_^�������
q!�/�2w���g���'��5���k_��sj��1������`��l��o�/�����b����d�����x�O���!�>'�i(�eRG�T��� ��D�pl)0����������}Dj�o��b���)/��,j�-��m'��HU����@���(�H
�����L\�	��0��q���6�#x������W����!Q�J�Pu��P�KM�����%��_�k��JO/Rp�q�5����Cu�E=�R���'������cs��������\�4�}�����_ZX�����Ek�U^l�������)�'�g�8�����}�S;��&���
��}q5k�a���V�;��*7�[�e�Y����/�
j������y��r��#u���#�K�.N2.���8�3R]��!�+~��$N�W������c���x`(��M)�n�*u=������.��>}�^��F�pN��-0q@H�X<vd1]�:�v������RY��]������3����V3�R��)�V�K��E�6����}Cf��IX�$����`�w��9C=�9���s�J��s+!�4#;n,Ks�ImT�u�OG����T�`:wU����TR�m�W���C3�cj�v��#$��N!��O�����C�����v���_�J���ao��x����vw�>�AI�����5'm�������r�eK#�����:S�*J�b���KT���#�R"�������<�����-d��n����1GoOku����\N���Cbr
q ��w���s�|�t�
��z9y�����)p�y���Gji��������^TZ�j�v1[}���{\[�u
�.�+����^^K'��^_��y����Q�=j'�|�������2-����;2[;�u����:��d+Y�e�s������)+��9����Om���pW]�En^�|������w���&/g�&������va�q�;���swe���{�0�h���IG�rvC�Cy����-���6,$��
(�HM�O����jUsONo3=������sg����	����w�����C{�I�{�	&���-���]9�p7z'���N��U�$%EjY��q����904��`�M:h���k���k��i��h(���Ce��K*=��]�L<�����\�f��!�|p���������|}C�B@@��O�]Wx����������������\e���+KV�7N�W
8x�;���.`{t��
��%����+o�5�8�
P_x�
��J~���V�'�8�p2��l��EnFhG	NN��q��>T�g��:�[VN������T"W���Q^3'����T
��'�k0�5��v��c���+0�x�E�q��� ���6����747R�g���%��y�{���x$0�#u�P����-��R�mS��V�i�"'�����T*P�X�Mjr�io�+P	7<�
��
7%8��nF����{�@E�|<�o!������+(A��`m�T�~`|��lE����@U&��*V��Hu������x��z���������H������!�����B��a:p�u�Q����c�������XF��+��qm�a�@��>��}
Cl�p�W���2�)d���(�Bh������F*�k���b0���.�"k=����Pi�����+\�_j�0��Se}g�n� ��P�Ke�I� kA���_w��h��J�����L���lnl�So�������_�*�WE�l`�c�����5� h�4�*��6h�����]~��}������~�^��n�]W���@���J3��QX��c�x��}}�����Eb�?,��W��K��C����?#n�����suI�N�)���`����ud�m��s��u2Nln�vY���������X�41�']�/����s7���>�1_�*j��G<��y��)q)b���TlS��	��H��*�y'������\q���!�8�;c�VqdW����r�^9�R���4`u��cX@['�4OgE�����N����A{	�8�\�VMUG3�
�#��c �UMG�%��X�6�����rve���o.�)��ZQ@�#�#�
��jeX�m_)����:@%�5R3n�=����x0�wW��#u����s�j����4�gR�m�WG`���������,��Sp���l1�{P�a�b)�����+� �r����1��}N�C�HU�j���RGh���^�Yr������*�L��r�����F��a��<�dv�����?Qy8�����3�c�_qb9�.&N8�����~��0���%zm�)��	��K���	e��m�t���R5��fN�cYj�;%Y�����������,[�;����q�����r�P�������0Q6&�����	�qrLQ�!�%�T&�%oU*���$�=�L�)S ^%;S��m
��
W���w��QK/�h�.~�U������r�R���C����^�~;2)��_^N�l��	��/��@K���mQU+�e(�A�l5��sy��r��
�I���
�J��+���y�x���<�<�ME�fW����������
�� +
4�$������1.��@>
ec���(�`���Du�+�
��S�-�?*�VP����I��4}%�9V����G�>H���T����R�-��ZI���";�Z�W�*�l��7�?��m��)����R��)�VJ*�����]�2w��}P+�C������Y]Z���(�EP������@LwG�	��#���(+T�-�#U����{����2��t01f�m�����PV�fyGe����h%��6W��!��'Nb(���`d!P�H����|j*/�y�lP��v���"�D�-��5����������(�����4��u�����3����� ��c�<��9�YInB8E\���NM2x�_30�2X��pD��v�9g�.��f�����tY=[���W��������
ZYK��b��s-�x)��N��~1��������h��~����=R��ZI���9I�sB�]�J4����na�D���"{��G�������j��T���*��~8
�@l�K~�C�������JcT�����S�U��AJu��fOO���D�7np�������6hB6����������"���~��x�w�������^l�H�)H�W�������lZ��c����>cui�Q���#dbu���u�E���{����Fj�k�����#U�������K��+�ri�V1,����vqcG�BZ��C�J)R}�����3�e�������}�O�����G��^=���1|����O���xp���_j����j�}��@�3���r����P�o���C
��z���u9��a�bg�uE7#����C�����(�%���<����l�-���#dO��)�r�R���3^�'u�HUf�P�������}q�K���}a��$�kE�=*����#4~�nP��=:���fN?=:C>����*5�<��$��i�EyF�����>���z<���������_w�������S��Dj�/�>�������T�@�J%���m���w�K!�.\\AU��Nj�XC�;�{�����:�O��Zo��E��v�y�*�A5#(b
�22��'���Tz�"dB!���5\L���B&�p�rP3�C���������XS^���dy4Pn����S��&��|����"d����Tf����#�f~�SIM�U_��������4}�!�)������|�>86]��/��J���C���-����=<�����}���*�6�c\H�NPG���/[�w�8h�X��u{������Q�re�J��TJ�*d�b���_6������jw;������!�;~]�h���.n�g��uL�/�����L�I���P����z�C��/��b��3s��$����1�C@�E���/�V�7d�Q��x����K���gG�������#U���J��^ayy���.�Z�Z��R�&y��x�dZ���%����M�t����0^;*-R���iS�0��G���5�#�J��������o"�Z����X��+dB��2����zq�����:[���Q�^[X��\'�rs�
�<�U3��n��KG����_����^8r��JW��Jx����cvRR�bPu+#�l���.��/����<�Z!������:W���_���m�$^��ny��>T�wz����������
�+��L����'Y��1_�����m}�7j�^Rl������� ����_��[tz�b���syY�;}����<)���n0&����z�����]BP�����nV�mw7�qf�qG+!x
�<u��l�qG+�K�{���_�W�&���w��<�Jhs��psF��G�iq�O*`�U�������OT �wZ�;�!�7>�@[fM�4�� �>T}���n~R~�3�)1i%eP^([b���{�1H�
��'�V���L���)N���d�� $C!
�x�aH�B�]����fzG�w�1����]#�"]�ywc�V
*cg�1i�u�����(�x��}�X��b,����[����N�b�V���[��@+�@>�J]Zm���3�"�WI�p��,c����Rv�E�=�he<P	�|Ak�}�=�J�#���^�H�������$�
��|�1I5S��#�iQ<Q�m�->��T��{o,��F�E���hy��r��E��J���t\��1�R��D�G9�
$/n���-J2������_�r�b�vQz�vfY4kP	<�����P���kn�.�C�wgWYz`�����������xQF�w�4^�#
/b�Q�Ry'�D��5�L��a^�z���c�������A+9{W����������w�]�\4�.�<��Jx����
T<��m�Y��)g���7��"A��v_E����K��T"�9��j�"�����&�	C������q��z(wN��XT�y������or�2�M��?S&���:���VUi�YX^4�v���#>�G�R��i�(;�
d�t��Y81�`)���Um�m���6v�3F�S��[,�k#�b���������17��%�����C��p�.��}�)@�'kH&~�����P.�8*n���.{�����P$hG���:v���5�4�#�b�?A�8�W���oL��UKq���vj�v���3L������o�n��5�r���M��Y����o
 ��8�R�L�������b�<J�����P�������z�����v���c����_�A{��z���m��.�.V�
���*���N+T�GV�����(%?�[|O	T�]#(����_4s0n����"��g��0���b����<Y&5�V}u���/~��!����>7���Q�����!&uO����*��M*�����)g�jV�O}�[�.
$[���R�{�)������!'�f�Q��oRu�;�_O�l�����y�|m'Y�]iF||�M���y�
�����~���V��:������(pciT��qB�{$���+��t�5L=�7������AVJ'U�����h�SU
����
$�����I�Y���t�
�0Q6>��dCi)�@�)�-Dp�=���"��A����
4�"�)�������\��up�r��K5����M�eH���@��w�:B���#��!��yE��d���)�_�S��<A&8����V�V��Z���N�X���a5"������)��[�~j�Mw�S���L�*���
RC���#��.��Gp
\�Y��2"��(L���|�@S���@�)�3Dp|U���~u)��"���F��I��?�u�������K5���K��rbm\�0?y�E��*���F�}yE��d���)��W?���N�N�T���b���P��|�=����
�)Z�^�����-�
�<l��"��U��mvZR>QC���#��.��Gp
\�Y��r�u�Q�({��KZ��������y�q�����9�1�1[��v7{P3�WQ�����T}yx
�O�����'����������\����&�pp�
�|N������6��6#�>.���o����3��VBG��h��J���%���O����-��������9�G~���������Mx����D����qe���������5�O�������z��N���@*Ci�4���o/d���3�?��Hw�?��B�n{��-����`��R+����S�{�/��=�X��'|���o��R��q���q&.��e.���m�5�����7`X�S���L&�w���i�����}3��F.��������"�������Cu�E=�R������3`o�u�>H&Z
��FsW���NC��m�����%�l�v��3b�V����bs�7�o�v79
b}3��g�M������J}>I�^W@�����C��@����Zg�����)�,4~�nPK���5X3�����|�B&���DU�wPy6��I�8?�(�Hu�w<��Il��]�+�<�+b���)\�n)����~1����n���z�W*����H�����,�Y�t��{�w���#��J�$U�*������UY�������0���zU������G<�2��Xg�Q�V����/
���Hm���!�+&�<h��T�����[�b�y���d��*�"����`�
��u�p�<�|��?���^^})n����S��g�?B2�u�?��t�h>T���tqn�����`��f]���7�[�]�[3x��4.u��;��>�}k��eK#��)�X5����U�jV�%*O�j���H����c���)�S�K���%��}�d���m���S�V���:��L�N�������������7=�L�R4$����k���F�D�6�^����H�Cz�luh0<c���9u����o*/�75!����b����<�KQ�N��S/�>T��c���i!�G��v<��^��G^E����C'HSVB'Jhuh0�c�c�����U"7o��SX���wwu5!������w�������w���+G������t�]-q�[��1S����7�3�Q!/G7������/z3tJz�5�D���]�����mN:�p�#u�z��D\>�Y7�z��J~n��j���\/#�N������n�v�ck���}�~��P���t8(_�t��t�5�A�P�9�K�T�;/��n"���Q��Pa��;9������TzNy=�����k���xOA?2�;$k�����;*����W������3����A��?�u��d.����=c7+2e����+D���]���O��G�X�=c_r7/os�7 eDj�3<�v�R6*�{S����V���?/�-w��}�2�n��%XJ+j*�}�~��P�
Ue����=c|��G�@������f*�����Qs������l'5D�X=z�P��1�x���=�{W�%����Q��LL{��m��+�c���=c��>���t���3��+D����G�
�3v��]�FR+�@#y���P^�
����j��o�+�����B�����g�!z�yE���[w
A����L�v�h�_7���V���/�ox����a����h��gI�.&�S�����@�i�h��DYQ�1j���
�+�V
�-�*���B��a��1>���0*�@q���['
�4�x
�����-�Y���Y�2�dYR+����S������_�\���#����ptdR���6���*�]���6b�vp��1��\���J�V�et�v��W���P��8��t�]�7g4�c������LQw�7e�B����xU� ���<���O�g������z��������8
������X@[g�
�������-�#������x������,����4��su���-8ZMqer�*jY�G<��y���

����������x5R9�����p8��:s8`c���z�#�c���n
������hm����B3��C�c�Y��f��h�s9:���xq1��qxXG,;�%>v�U��c��4�X3��k�]��Y"��T���w��<��u�ku���sR���"U#w�>�;��Mh��D�Fj�]�G7�0�wW�5#�O�����7�����������9r��������V=�nno���]��:������6y
���K�����p0=C?�����:��������A�#��QK/��k/K�7���Z{���vz�����A��7�Q�������^N�W~��3��=6D���_�F=�<<�j�l�>����p�n��:�w����0}�P��>���"c{����x�#c�U�d����K��|���a���Fp�4�/Mp��*�w|)�,��wyGe�l���������0Eu���Z�<0a�AW ^:�����p�W������p��r��K5���Xj��Q��fW��I�@��V����������EN�l�\��K	�@]�����GU+��%�A�l�����~���4*�#j���t��u9qe�w�\�V��Y�u�*�����`(D.w<r�P�\0Nz�����Ga�lL���
Oerl�:���
44o��%g�
�)u����p���)�6�)��\F�����K5��|K��I����@C�Fj��_�\0n���(r�eC�B��@C�=T Oe8�;y�U���Vc���"�^����`(D.�=r! *���nYW���Z�~��F�(+T�!�5D.X=r�P�\0�x����`���C!r!��D�;F_*�������o��P.K���\�U�w���P�RIZ�������D�z������-�ln9�]Cl�x��*�a{�y}�_8H:��_�1�������)��������k5����y���J���b�H����>7R1'#?T�)YT�c"��j��W�f��l��U*���!��z{H�^��g�>Hk�Dj��f����-G*QY/����T�w����H������7���<�	��\Q�_�O�_6H9��S�D��8����|_�t�����,�*!���D+8��;�9�XY��a�jm*�lw���*�N*-����/M��X�n����������+6���WG3�e�!=.�o�����+�6���8��������A����_.R�^X2�������\��LfV���Fj�+�V$���[j�e�G
�A�/�,K��Vq��ab����7f����A*�>*PJ���P����9.��0}v7�%3�5��~������n���c�t�4����f�D�N���=�L:���e5R������6�\3L���W�J���*����ln���f�����A�_[ln�u�`]�s�r������3�:lF,���Wy������nN�C*1�����.��j�
�RoC��?u����k_L����}h�����G�T�>4����Q6��c]Ee���z^cC!�?P�KU�qP�4���&��#�<#����@z�$~$Qy������"��=%:@K�cS�-Ej�/�>��A����T���J%�����yx�Ygi�qU��;�R�fTE"7R)�Fm�����a5;�w�|!��e�v�5�S��.���������\��������r������V�T�~Vy�5����Ss����;�p�4#;n,Ks�����|7���*S�q�U�!����
��������15���5�$f*7�����g��+Ml�b��@#o����7��Y������k�����c,H��NPG����li�������C��0��h
Qo��!��%*7��G@�D�T���_�(�#D����}2c��������@�7(����h�+������L�I���P�F��z����_��������\e���y�qK~Qi�J7����]��Kc�we����"�{��o(G^�h'PK~y]r�u�KC�mW+��z'��:���Ly�C������/'���w*a"����"�y��6%�!���7V��x��2�tSP����/oy'���e�{�}����d��7t���Cq�|��pIPG�T%����)�.�K��j�����-[�tp�=o|@~�Ko]��(���.���t��Z��<�x?B�I�a�w��*��G�����5�I��1�{w�4���`�^�����K�C����J�/+�t��t*��{�P��BK�T��]����c�Q�l���ZE��������FI�/���t�tYQ���(+�wH�BY���wTx�W�����T�w�g��7!��w:�"u��J�� �M��-:d��������TC����;�������=9N��>����9����#u������VP �������!�;*�g�\�-�!�����X;������.C��������n�J��G�@���b^{��}7��X�\e����M������p�
y�mqV���
1/��s
$������a��-�1/w����b��>���v�y�����(�	x���KX�)K���=!���Y�@:�+R�@K9A�Z��I���
�$ne�\>(�D:f*���uQ�����d����
4CX�z�o<�,=bQ[�C��K����^�&NwZ�,5�{���|��z�|o!��k�-9=n�Kq������?��b���C!����1/�Y
45k.��f���J�-��/hy6�i��������IwR��L*������z�����yq�e�~k=~�L��@U"`��5���������.S���B*�UqHT�a���v�fxl-p(�[V�����$���r*gk�	l��=W-���1\*���I�1a���?4QyS&�v���n��U���*����-�A����k����D����Zc&����;j��*U|��<���=�z����vnwP��n��(����V[;�5s���[Y#U�v`�dn��.��3R<�?���VkV����*/���b�0Q]����_�(��;V���������{Z���g�����o�f��=��c�{=_�CTj�j?���Q�$N	[p����u��1�=�8�U�z�*���5HI�
`�hy�k��WQ��?�1_�����8�g��=~������8\h��a�U;���w��%��>�l{��Z�n��/E�)���=�^��(mu�' �����8X��C�&*��I]=��n>p�Fs��:�!����5s8�O�:/9RoA���C��bew>���9��TWo����*�z�g����b�-�*�������
O����5���6��|H�iT�SCC�|:&�zy��1�{�T�{��n���
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
125265
%%EOF
v22-intel-core-i7-3770-result.pdfapplication/pdfDownload
v24-intel-core-i7-3770-result.pdfapplication/pdfDownload
%PDF-1.4
%����
1 0 obj
<<
/Creator (GKS)
/CreationDate (D:20241113113912)
/Producer (GKS 5 PDF driver)
>>
endobj
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Outlines 3 0 R
>>
endobj
3 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
4 0 obj
<<
/Type /Pages
/Count 1
/Kids [5 0 R]
>>
endobj
7 0 obj
<<
/Length 12
/Filter/ASCIIHexDecode
>>
stream
000000ffffff
endstream
5 0 obj
<<
/Type /Page
/Parent 4 0 R
/Resources << /Font << >>
/ExtGState <<
/GS255 << /CA 1 /ca 1 >>
>>
/Pattern <<
>>
/XObject <<
>>
>>
/MediaBox [0 0 392 294]
/Contents 6 0 R
>>
endobj
6 0 obj
<<
/Length 134635
/Filter [/FlateDecode]
>>
stream
x������:����O��`��E��1�*�Y�����F����`�m�6p���c� ��AU��:?r����'�������?��������#}��k?�����?��_��������:K)���/����R�H�x��������S�������������|�{n��M.���:��5��x�}��|������s)���Jur!�����-\�Op�W������J�\��%��,g�Op�W=��'��k_���Z^�lw(�����|�|���z[�&����c)�p[yKy�|�;��l�����}6fP�S�2�f��z��_}6dP�SG9�����u���>�*KKW	����Y`������f�z��^�l������gnA=@=^y6\P�S��*�@=@m�2��6�V_u�q!���}�q!���j���|��^m��!��^����D�\����A����#H�#!����t%���/!2�	'��M����O�$����Bd�N~���N����*H�[!�~�r,D~��������-D�s������^���A���0D�����}��d8�}/�d�"?�g�,G��<
r�j������
r�6���!����r8�}�� �.������� ���\����w�+���<r�z������r�>���!����r@�}�!�.���� �����v{��n����CH�#"����tE���/��6!����-��	gDhy#B?��-wD��G�q�������8�}��h�H�~�#Z.���$��O���}G�)q��N���J�~�+Zn���%��_����G�1q������L�~�3Z����&��o���}G�9q������N�~�;!Z�	��'�?�}��`9(?��LE��=������"0}���Q��B�N���R~�K!Xn
��)�O�}?�`9*?��LOE��=������"0}���Ud��Y�]����hz+�~�[Z����+��������\����W����W�v�����_!����W�~�_q�����W���
�O�+B��B����������h�+B�����
��+B��B����������h�+B�����
��+B��B����������h�+B�����
��+D�������W~�_!����W��B���
������"�����Wv��������B��+?��,������_�E`�+�����
��+�_!�}Ev��+���W-E�����_!����W�~�_)yu���ru|g}�_Z����+B�_����W����h�+�~�_!�����W���"������8�}���W���"����W���"������8�}���W���"����W���"������8�}���W���"����W���B�����W~�_!X�
��+�_�}�`�+?��LE���������"0����W��B�����W~�_!X�
��+�_�}�`�+?��LE����u�Wd�=��8������W���"������8�}�j'��v�M�Q��l��Q�k�	l�.��B>��}�|���h�M>��|.`�������M>�
�-{�������"�6�x���|��_=�&�:�!|���N0�#���K����l�p���||���A>�i�'�|�_���A>���4B�O�����Z����!�o�B��HE����������w]�\tn���{���M\t|Op����~�.{6r��=�E�&.z�'����E����������W]�\vj���{��>M\txOp������	.z4q��=�E�&.z�����eg���������7]�����y�':�����	6��J��~�|��L�mC>���&�����r�� �WY�#�G�V�	|`��^~~������A�1~��M?��_��6���#���$<������I����h���g��6�D�������A��A?�>���m����ti�~����m�����6{�'�X�}��c|���O\��Ox������[|���O\��Op����N�	.�=q�'>�E�'.��G|�y���K|��.���!��s2:�G�������	2�;��>BFw�d�����:����r�
9�/|������
!��s2z�G���m���#dttNF?����'�Gz��^��6���?:A?�>�W�m��Op�����t}���3������t���3_%�W[�+�g���W�
�t�}��~���
m���
+}`���v��~�n�T����m���t3/��g�W�zW�����h�3��m�������>P��|��EW�d������#;�G����~���uy�P�n�2�A'��|�����I>BF'�d���|�D�0�E>BF�d�������J�#dt�NF������=>Af�'2{�G�i�R����CU�!��s2��G���������X�c|dAZ���/>A��������^}�
m���,^���A���,�g����,�g�y,Y���A���,�g�����M?�>o��������&JS?���oY���m���6��cQGwl&���
aQ?����[�3�t��~������~��s���A�!,�g��}�4�3]AY?l��|��EW�d�����:�#��~�R?�����~�R7�����K>B���-u����	:}�#�s���.�����:�Z=�#��~�R����?>BF��dt����u�J��d�~"�s|���Q+������9]�#�v�^������Z�c|�|��X�_|b�nN�����,s��fP?�����6����mQ?�>o����Y]�����*�����X��A?���o[�������3���oh���e�n����A�W��M?��o����A���3���m���������A����|������3�v��M���
aQ?�^�/�Bv����e��S>BFO�dt�����}K��#�s���n��Y�}Iz�G����N�r]�o��|����[�"!�t2z�G��m��-u����:��#�}�����r_G��;>B>��[�� ���}�#d�}NF��y_G��3>Bn��lu����u�J��������_tL���rH?&2��[~�p�q\�	�����������ql�}�$�+nl8�*�����
����f�A�K���o$n2�Cp\�>�nV?�;\#t�4���6�:V����U�
��j������e���r�5����j��p�����:�5\;x�'��N��q�
�G\�k��"����
�J�gC�+����Z�' �k����j�������f�z�����������g��+�NTcM��j�����XUtzX����)��;�+~�+����,"����-~2�j�N&
�?G�E���k��2���Sf����RQm�Y*���'������pm�y�-<�#\[tv�j����z���S�����Wm�����"�������gm�}����wgm�������8gm�=����w�fm��������fm�����E�I��h7�pm����-�99\[��.k���
��]���w�
�U[D|�{��x���{�W�;Z��ohqo�k[���|�^��~0��xm�'>�o��|�>��h��}}���d�Om�__��7y�s��o4��K
k!���!+�C>�q�I�����o�U�����;���,�;������-�L�E<����;����<C�C�_<��yf�����_��7������o��\��p ��"S�<�<�� ��77��,�;5<52�#(_�8'�t�N���u����~�8��!��n���}������������|}R��e�\K��>���rz�7�Qe����ov��W_`W��J���������zlu���d�w�{gG-K�L�Cl��7�~������w�:,���h�g.�X3���	<�����rzN�G��d������.U������]���7�~jDiN�]GFb�����6���q�2���;�Zo��R�C���G�~�x�vB}l�jN2[\���	D��d��$*d�@f����_����yN1Iov��V~}��c�oa�y�����c�D���$}���O$��J�W[�L���"}�l��$��*��R����T��tr�'�NJ%�+�~&�`T��p.�g�A���~"��S��r��'�N9%�+��~&�PS��p��g�0�G�~"��R��rb�'�N(%�+�~&�@R��p�g����~"��Q��r�����E�����8<L��/�%z���Pp�rt�'�
%�'��9:������@���9�w����+�~~�t�IN����y��TOp�r��'�$�gx�9:�������#:���	�w�N��+r~��Nr�p����_�m����q��I<^S�/������4I��a��I��F����|���dg%��5��DiN��'��A)V��tMJglJg��tV���Y�4+�
��b��+bY:�������h\:+`]�$_��bE�K�d`��0�E�Y�Y42��2}3�L�"v�X24��X���������,��
X������X{S��ip�8E��)R��$IF'I�S$��"�N�;O�.#by�D�S���I��O�"��H4?E
��$�%)b��DT��
�I�4BI�X�"�)`��$C���%*MQ���/^�1*�!b�:������X2H��X���y#dlR�jM�tD=�lR_�A�T��M*�lR�"6��h�:+`�:�6��6��9�MJV�&K6�X��Y�I��I�E��Y��W��&+b��%�T��M�,���
����M���M���h���I��M*V�&umRglRg�&uV�&�;�I����ZE����M*mR�6)I�II���"�&)`�j�W�u�T$��"lR�d���IE�M*R�&%I6)I�T$��"lR-��MJR�&�6�H��$��$ElR�h���I}� mR���Y�I��I��M*V�&u��~$+b�j��l�q~��I��Q6)Y!��,�I�
��b�&+b��%�T��M����I����d�MJV�&K6�X�T,��bElR�[�MJV�&%�mR�B6�X�I����b�&+b�jU�lR�B6)Yn���I��M*V�&K6�X�TsNe���I��X6)P!��$��$ElR��&)d��$����M�e���e�lR�d���IAr���MJ�lR�"6)Hn���II�MJR�&��u�� �lR�d���IAr���MJ�lR�"6�V��&���I��M*V�&%�mR�B6�X>���M�3�i����9���w�M*V�&K6�X��Y�I��I�E��Y���O�MJV�&K6�X��Y�I��I�E��Y��w��M*V�&K6�X��Y�I��I�E��Y�����M*V�&K6�X��Y�I��I�E��Y��WM�&+b�jS��DElR�h���II�MJR�&�6�H�T���[��IE�M*R�&%I6)I�T$��"lR�d���IE�M*R�&��0�II���"�&)`��$����M*mR�6��wC�T6C�&umRglR�d���I��hblR��C�t��{�;��'b��#K��J�Pr6(9�@�	���b���qB�'8�<�������$'`s�C������=�im��5���	N��$�V&9�Z���KnM���m	�,Kp"v%9�*�	�����$'`Or1Z��DlIlgMK�0;Z��lH���4J�~��#(�;s��y�����j%`3E�Q"�"(�A	��F��h���
�DP6"6<��h��}
�CP��Qd%b�B���M���i������$'`�#K��H�@r6�vv�x`��=�@�"v I2I�X�"�)`�DcP��5���i��I�AHR�"�&�H�P$�"�B�@����]H�C�"��H4
E
��"�8)`�0��$E�C�d ��E��(R�F�F�H+Q�V�L$)b'�p�E,Erh*�����N�Z$��"9{��U��#�X���d$'`3�#����H�Frv#82��X���t$'`;�8��D�Grh>����	N��$�&$9R����d��"E�)R��$I�$IKR$��KRd}�����qrz�O��-Z�NVh}:Y�>����t��>]���t��>]���t�G���`��������
�OK�����OK�����O�i;Z�NVh}:Y�>����t��>]���t��>]���t�%���d��������
�OK�����OK�����O���Z�NVh}:�H��t�B��I��t�"��A��� �������$E�����t�2B��I��t�"��A��� �������$E������A
�O'I��I��O�9[Z�Rh}:IZ�NRd}:H�>���t��>����t�����B�����t�"������d�����{��Y����h�����\4�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N}�Z �bk����@d�����@bE����@bE��L;�"+��,_DVh-�XZ$Vd-�XZ$Vd-�N��Z �Bk����@d�����@bE����@bE��d�"+��'j-P��@$i-I��@ �Z �Bk�H�Z �"k�x�b�u��@$i-I��@ �Z �Bk�H�Z �"k�@��@ �����@$E��4K�)��$�")�$_Rh-IZDRd-�N��Z ���@bi-�X��@d�Z �Bk���3Q�����Zt%�+��>��@d����k��
�Kk����Kk�������ZVl-Y����Z ��H��Z ��H��Z ���@d����k��
�Kk����Kk�������ZDVh-Y����Z ��H��Z ��H��Z �m��@d����_�*��$�")�$_Rh-IZDRd-�1N�.#��$�")�$_Rh-IZDRd-H���Z �����Z ���@ �����@$E���k�@
�"Ik�H���Y�ZD�!�H,�+��,_DVh-�XZ$V�&��?����e�~5������
p��:�IFHy9���im�$QFH�����%#��u�$��*L����.#��w��2B�Gk4I�R>�$QFH�r��O��e��:I�Ry���JFH�u�$��
�~�(#����, ]N|^H�R~K[ !�WYj�d�d�6O��)uY�_���vU��F�A�R^���2B�F{�(#$k�'�2B�F{�($4�N������$���I������$��X�h��2@B��$���I������$���I������$�	���$#$k�'�2B�F{�(���z(�@op���Oe�t����IF������e�T_i�5%#��X�^����b�JFH�rP�O�!?*��b����"ZX�!��*7u���S�Na]VJZ`�!V��������vb��s-b��:��!��}��E���������^X�����z/�HOa
�$QFH��Oe�sH�Q�?]FH��Oe�d
�$QFH��Oe�t,'��t���=_�,�����EbY{���C�����s���dI�X��/,����n�!V�;��!����:���|aQ�F������=_X�V��Ab�H�����X�!V�K�X������C#��6X�:���|cQ�X�m��u��GAZX������V�Y:�������!V�
���W���C����Ea���9wb��{�:�*7�u���D��Eb]}�j7K�X��Mw���n���P[X���������Eb����t�e���������������Eb���e�!����:�m�����u�e������m��u�e������}_X��������]wb����:���}aQ�X��/,������C_���qwa�rxv����W�X�!V�������m��uhG��?��������C�zvb���������������6��u��o���C,�����C��}�Eb7��u�������+�|w�!����vB:�j��^�!�q��]�X�}��t�-,��h�������EbY����C�~�v���n���C,k�u�Uo���C,k�u�u���]���l�`�C�|�vbY����C,k�u�u�|w��������wwbY����C�v�&b7��u�u�'�IG�)]7��t�����OsbU�W�,�����]�X�m<�uhs�i��!V~��j�����]�X�6�:�:_������n���C���7u�����]�X�������x��k�n��������������:�j��c�C������_�����������4�!����:�j��h�!�y�v��l��2��:���}aQ�X�6�:����h�!����:4G|��G���}_X�!�~�vb����:�:n���#,���%bY����C�������m.�������,���\1K���Q_�`U�8TE	$!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re��EQN����(�I�Eu_�!aQ��(#$,�re��EQN����(�I�E�$!aQ��(#$,�re���	�W�j����]P�7)
7& �*����@E8��@�[��`Cq�nG@U������p��8P6"*��6�@8����[��`q�"l? T�����
p��9T6*����@8\��V^2��sA��(#$,hre����&7�)#$,hre��MN������I�49�2�a=�t��C,�g�,���&�:��z��������Y�!�3Mu�Un�����f���&�:��z���y���:K�XX�4Y������U���v�@E8��@��7���@E8��@����`q�"lA T�_���0A�H�}�I�!�pd����!q��(C$�:�$���>�d�Ton3e����"a�'A�|�ts�)C$�4�$��������'\�4Y�!V��J�XX�4Y����|�uba]�dQ�X�m��u��uI�E����9@Oba]�dQ�X�6��:��������.i��#,�Kr�t��nn����o�!�%Mu��uI�Eb�7��u��T�9��Cma�
S�z�:�$����)C$�8�$��8w^�%C$�6�$�i_�%C$�4�$��8>���|�	�8	2D*���d���"a'AFH�]@$�)���d�TVw[2D��N������ C�su�%C_���vKFH\o�}�t��z������h��C�~.v�I�n���C,�7�,�����]�XXo4Y�!�y/v�{��fW���m��u���F�Eba��dQ�X��'waq����C�t��]�XXo4Y�!V�O�����O�:�:����CmaY�%C=vpd����"�uY24�"����!vpd�T�qd�	;8	2D:�qd��L�m�w%"�uY2D��N���o�� C�c��%#$� e��V�[2D�~N���m*e�t���d�t��cQF�	q�O�����:��*��J��&�:�j��c�!�y?v�%�uDs�0u��uD�Eb���������]�XXG4Y��y��m��u��uD�Eb���c�!V����C��6~�:��:"gI�XXG4Y�!�~��]�X�6��u�u�|r����hb(e��(ko&"a�'A�HmG���uY24���c�	{8	2D��8�d���qd�	�8	24{[��%C$��$�i_��%C��z��!���#KFH�	@$�	�8	2D�W�[2Dj�.��X=o��<����������?�]�`��������$e��m��� C����I������!���g2AE8���HP����L"�PI���xI���t�����/\�	0���P����H�&�8Y�.���X�2.�
�X�R.�<�g_vF
�T����t�T�I��u�T�I��v�,w��Hyk���/�~�Kl^J��[m�"R���OV����/V����/V���5����^a!�J<Q�O�J<I�O�J<I������)�b����c�YG���^��l_�C%�Y����x����*�dy�'+T���z�e7��K<P���x�B%$/� �J<K��x��P�'k���=U�j���^N%��4��P�'�K<Y�/�J�X�/�J�X�/�<��H�'K%��H�'I%��H�'I%��H�W�R�W���x��a�`EJ|�9:���~*��n����b�HI�T�DJ98��'R��m}p"��8��L�d��A��j��[:(����N���Hin�]��r��8G��V*�GYJv����Pi&I���Hy&I��H�&���.K	��T���jpT����kpT����l�$m��H�&���-KY��'��������o)8��o+6�B����o!��[�
���5O�+4����o��[@
�����- ��[X�|��%+4�B�<�
���Y�{��������>���'X1��,�>�
y�d��IV��$k���-���X�}�>Ar����	�{� ��O�,�>Y�B�'Y���m9���_����|2*���%!���}��>�r�����I�{�d��O���$+�}���'P!�$�>A
y� ��	R��d�r��%+�}���'Ya������;ui�~��r~m��5e�T�dZ���������@ }��J ��6�<�Frn��j6���jp���j�(��_n)���e���v��d��^
���k.b]��z��t���m��,��/_����~%e�4 ��$����Y��C,���Ea!�&K:����d��/*u�l�t;��u�u�:.���o]�������u�����i�H����RG��m9��:�:o���������=�m9������~������?SG�W=og'�������ol�#����3�V/���u���/�������S���y;�u��|[������o�y�{�Oc�-g�p���o�����w/���ey��)���J{m�3��#�Zm{�y�u���[��:���]_:�����Ce��maQGX���,�����Da!��3�R�O��L���v�h��#}��E�o�\�K��It�}���.�/������;�2@�����PHm]�������4�
p8����P��P*��p�8P�t�T�Cg���Z���|�3�{�g�S�z��/?������Ou�E_~���tV��Y�����U�y}��A5�%(R�^�P����4�M2D�h�� #$���.��G�|oc�������hO���'��sO�������A�������b{����>�,��^J����4k�����ci��'d�Dp$�����������8��;C�h��14���F{-���>������u�L�_��S{|�E}�oGa�_�����~K���3���-�������i��3��2T"�u��d���3��
2B������G{/���NA%�{i�L$��ML}��C����Ou�E}�/Ca�G���T���u}���G
�]��'��N�������*1sd���2�E2B�h���!q��W��h���2'A���O�������[��?�H�,b�d���2�����J�Ov�[�'?u��,�������S�����O����H����B��`�;�I��0o��������s����O�[��?����;�d3�5���	����O��3�h�?-��7����������N��yv�;m��o5��g	����R�N���k�;���/v��f���R�������/�������T�������}��m�>B��F:��b�����K�
=��G���R�wT�3Vl���n��T��C�p=B��=
�	�}�6�sR][�q<���9�9t=h�����xN�q�uikH>�=�g�=��*��\�����[i��s�k�/~7������\Y������e$2�G��gH/�=�m)�k���v9�G�[b0VZ�F�����m�h��3!�����F�b�rs�>�)X���?v��(I{^U�����d�1����}���A`�U�~����o�����W��1��Fz�\���u��1�C��J��D�3D���F�H>^o��'�-����b�e�&�Y��]Wdv�Z)���<�~LU��]�oo���|����*�rYUi3�\�W�Q���b����e��t�9~Y�T���
d�e�`XrV��B���������y���9�d+\����^�Zu��B�u�k����
�t�PG���9m�������k>�*�e��B+#d4�����gH���)o�IFa����H���^5R�q������m���*�~��!�
��%ME�t]���3������X������C`�"m����P�Z�]��v���kcu�����h��v���L�z7z���}�X�^�K����V)IY~o����&�G���m�������T}3}��xtn�c2B���7������L/=L����������6i1(M���I�t����{����5��Rz��7��"�s�V�����a��s���d�������k��++��I��� �`_��Lx\[R�26-��s����.��Fop��������]���&u����:��u��f�����u�sl'SfT�=������#����5���(pv���L��>�|��b�fw'�PH���_�:�k�5q�� �-��@=-��>����'S;Le�fo
v?������/�M��r�!�r�y;���r!�D��V���e�
o����x����B�6C6�j�������4T���tl���OvRT��;�|D��}qn�h\��I�KH�!-]���
S�%��gj<���!�K��*�W��ey��%>T��CZ��dg�Lu�������%m}6�A�u]B�a@!)e�T���(�[��5,������ED��Q�=��m��z�,��=Te�Y�{:���/>���h�@-��!�T�5����J7��1�.x�('����m&v{@���4@b�
�6�2����w�9m]Vb�n�N �\��+���x�
��T�r���u�vmq��bC.4w���G�j���>r+/9���l3$�Y�����9���p����;��>��J� ��t��(��y��H�����2k��&���9BN�v����rl3����g;�m��(��������
���m>��?���xc�'��p5VN+���2�&I�����[aHi�����M]=�_���\������"������Q�y�10������ojub��&���"��!U�N�r��������pm�;fcp��'~w��G�����Ik6��0�r��K��-d��HE��qOel�����3�
�e���m�p$�����6h���%O���9�'P�Y*�xR1M~mO�3��N�Ok����j����o�������K�R��ZOR���L6��c������7m�
�K������L�{6'N	2�������6�?�8�%,���"�8 F�T��9����x�1���1�$��L<�=�/KeF&=lJR�v��,�������W.��3��m���4�e@,����Y�������������Y�y�����cve���I�8���R0d;��z	U�a�o�$�b�KX��fG�c�L�����'�s�KX����h������L`�X]���kj������Xz��Dt��#��#�yA��V��5�8o��,J�'o
,�en�(��L��e��� &�������=�de�33����m
�K�����Q��-8����������bW�f��2h&�L�j��|�Y�f{6%���"a����?GX��r�c�g��K�%�$��)���{�m����\�{cbaG�M�"I�Y�e)Y����nK�����J�����Qq����)����������,��pi�N9�DT��C�=��"i�iFm��r�����cDi�r�c�g&�d���<3RsVs��:����8f�}��9�G$�T��
;�[f���F���%z�����g��*��h�����\��(L�qMOxr��e����a;��f�����v�������Od��T���c[^�`���]aE� ���\���m	�H����;�(���,��~�������T�cV�,��1��D���j����X�h�6J3jg2�mI&��s��;�a��*�iI��oac\���**���.%;�[-Ck�����~�KkkO��5?Wi��1���=�?uK�N����*;��kJ�)�|���|�����:��)e��I�
c!�|<��n�����m��v��y.a�;@6	������N�6�������Rb/����dd>��j�Ce������1�+�H^����4�$�a8���;�[<1i�,.J>�?(L~2�;�&�B�GY,�
����O���5ZX��m���e�C6�pGD�q�8��B��/�'����5ewwZ"|";�H��s�a��3��ZcB���v�I��bv���h��Fj�nj�,/9}�K�>�%Oo��8��^aI�u|QM7�d������)���Y��>�$����R<��]r�$�X}��~EM�xw��?=]�q���c���4=�bQ67K~Zi���P�o1��3��Z_�������(y������t~H������$e��c�avrxj|M�n>�����$����b�IF��VDj���H�S��A{�W�o�C�*
�2�Z��[S��o���-���tD�P�J����e���T�k��3�6u2��V������Jt"j���4H����}	��,F�3w=/������|*]�YaYA\����cw�aIR��H9a�"�a�]��|��vj���ja{_�z��w��B���amv@�+.�������J�,�Y��*]c�W����6|���(��w��R���)]C��CK���Od�R�yv@zCv@z�8���
(5��I9�E0��D�C�zcV��O:�����X1W�P�;��MQna�����_����y��y�`XYZ�cq"'�����8.AS#���D�C?&7�����v���Nd9�V{�{�3.
S����9
Cd	�mK�����~3E�na�DNy���G��D��X���9_�`��Y��9��Q��Y��F��D.r[�C}�G`.Ndqc�6���,��D�C�Sc�5w�qs"g�!lu"�4'r��~c9nN��M��d2'r��N��I��D��'��Y��9������k��W��A��U��n'����S���#�kU�}��%�"aa4�F���l�C��b��])4���b0}�V
���:G����dfo.�/Q�f\��%�M~aG���QXA��*��>�j
&�{��a4<l'����Sv��S�U��)������a�����F�E����$9�9���>@=�~���1���<O^���y	���'m���d�C��Bq�,���'���W�,!P	U���Wez\��{�x�z��f\NK�u O�Ba����wi����������
���}X	���L������@qaU=,o5Q�V-.���ebW��������8�e1�g�q5��&%�(5��y�S^u�6w3Hj[2�6%	R�i�a�&�v���V?r�����
�����Gn���f�������@�1�J���a�G�Kfo��p�OO4�k�!]��t$!���)��
����-���QC��`��V����i�����@��w���l��������%���*J�������L� �R��2-a�\2�t����c��>�����*v4H,[�Y��I_q_���w��������}�,�w�_���~Z:y_0�_������[�C��0������o������?~�o��i����������?���~��_���}��������?������������?��������c;��_�_��������|�����������mk������|������O�����5]���������p��_�_~������]w]�����������~?�_1���r�~����a��_����}�����~�������r��~�����_���m�m�M��[�"S~/�+���Z.\=���?~����o�o��o��*���v�u�ue��^������C���~�������������?���<�����
sY�������������
�`\�kX�,��9!�r��I||�;=�n��8��g�U�9,�^b�
�>
�s	^B�����@�2F\������G��)����
��,��Q��_�=U�E����N�l�TS1-����������,��2n���O���Xb��2n�}
��8�����������v	+u	�L������5
|9����X$b���[�cy���4u�4U[�m�������U����d}t����CZD�E��Y�����C_���}�<�O��'�s>�T�&������D�f��O����l]��1�9YX�T�,lG��������s�Us��Us�P������Y��3�[K(�[�3���x����q�)�=���d�������*���{���f���@Cd+N�}���|$	���a��c�����*3�(;��T#sGv�`��w<�u���w�-d����fG����<�<�)m�
2�`mR�*Z+��$���y�y�Q������U��>
}��j#Z��7��#��T/��kw�z��f]��9i�����(�������Q��ym�6u�kK*RaW�a�u�~�.���z��v�}*�2�X�:��B��T��ga��Nly"�-��/1�{_
����d�Q����*,�{�n��M�v3���8���`�yN�-,�~8�u+w4��CcC�B������4 |���XK��
�wYuS�8��T�2pK���h�\�f��66'���S;:0��wgMi;�e������	�r���=`�in��,6��5�e!&���1P����Ka�-l[�v�2��
�N%l������d���ljg��[�X!#�)/��W-V*����/�N�h^�l;8�Vu�Ra�XZ������m0V����K�����Q6%�x^�����6]���{S���nq����mS��n�^�\����z�;�${������@OW[@��!��y�i������kyXQ��2��h�0[c��\�d���~0��I�	�Xg�xw�Dh�\�I:T���wR���PKp,��S�rY�cT�p�����X���@l�Q�\��<���6��y��|/������2����}�)���`NW_��<��b�Rl�=������=g��F��%L��)��	��G8�������kR��f��-���W���j+^�,�x����a��=�b��\��)�5L��e�������3�W����"/ai5�g��K�n����%b�&A�����9��4�%MO��f�%M�S����������@�U�k;���b_���.1���
����`1�A�w���=M] M�l;#�%�%�����
����K�iNK�������\n�Vl&���.��63���3�9SN�3��w�b_���MYlFX�3W���������mJk��|�:��)����?�'��I>�nS�Xe4���u���c6QC�j�����&j���<������=���(����7��X:��d���S��n7�AN\b��	=����:MY�cf��^�����NcF���1c0S�#�V����%��iJ��4
���7lmIS�E�mI���4���?���Q��)������vSZ�J�Hy�1�+��+��C"��C��g~�bd�y����r_����v+�nY���o��WXv�
�^�;�he�j�Z\VO���.��8��J��f��ME�r�)��
�L��-�������� CIn�|?�(����~����v3p��8�W���5������=�\f�l�����8n?�Fd�<�sWY��c	����vc�
�5�TD�%L�E��j�����v���l&r^��������"��ck�������TN|���"�a�����~(�8�Q���Y���\��,=y��[���������=�%]���=m�U���(spi���M�w���`I�R<���Q�[3��r_�i/mw�t`�6��1�A��d��Ex�b#��l����Ij�}�nl�1	c��y���XP�8Xa�b����H��F��&���}�N'��!F�\YCj����#=m�[���r��T�P�Y��+K�^'����y�O-�q��f����$�/�9��d�Zr�L3g���������.I�JYJn�w���%x��]�\5�����\G|�n0�i���o������H�8����~��������-��u�ig�Y�R�
���������\�����k��6���*���?�%�B�������oK�lm��6���ZcN�����#,������1�0����~7��$��,6���u[q@-�	�sb���6$�0q�wb�vq�+�@���-dt�Xk���� ����2g�f�����{��X����X���v+3�U9�U�umi���"e����0B������-����z�KHZC6��H������@�H��O��K������\�s�k3�4[>�K��r7Ru���Y������3��5�=��-�v
X�wp���}��Ih�������N���:����[ci�����t�S�b�O�x��jb�Q�X���v��������J3nX��u��vY��=p��=(6�mcgE�h�;�������1��=	0������}�$�J[������t���pk?V(�B����[��Mg�����t
�_��F���;���(�6C�v����l�K��T���I ���jW���#Z�/��C��tz�^?��nk\�����g�[]��r��}����>����;Y�����3����i�h:Z��6��];��Ag�m���
�8�gg�NKd��T��iG��j��zo+{o�mw�<cV� ����NEq�6U`[�������T���y�vt�'na�b�R��x���#*��x��j��������:������-�s��m2�Zg�NI����;����QhU����zD��%���LM�_�[����n�a�4OV<�6"e����y(���PY�Tn����f�C�#d_Bvl��vl��m�Avk�vdC���)e�N:�t������(�1��
+\�&�����9�������1h���r��k���S&]���C~�Omp��w�����KH����������_�%����b�`Cl��yvdw��Q��F`>�}�e�����G�,,#� n�H�j�AaIb���c�i�"�
�����j��<����{����^�V��-	S��v�V�x+0V����������!��X��t�-�6`��fq����.��Ih��9�;���s���X��>m?�4��*�Eo�&�i�iL��{�������}=��c������c�8f�c}��������/��g���>M���������#_��������k���cN�V�$�\���Z���c��:�}�~���W��.�uC����m�i<���_���{���}����~����_7��~�����_��������J������������Wh��uC���:���i�}��
=���^�uCo�������������}���W����J���+��
��������~\7��
�����s;�����~�o�u������8����u���y�p�~��WZ�	W���[������%~���/s�e\�������_�_�OK~�e��UF���+'�j�J���+��D�z�w�����k)�o��<'|��	������v����������/H�
�������Wjk����R���������^��J��?�r��]����������?.����?�W���? ?�Mf`<����WQ Z�"�kQ�k���zxU�6�	b���b�!��HX$2����
�d�Y�l\V� �����T X8PPPh��0�`�������$�XZEqe�E1F�F�FQG��*�mT��(�4�@�L�XV�P�X��hS�dEuE��j�*�����j�&��k(�h�Ac���4>�}��6Qh��t�C�����:4{l������
%�e�V6�hp���!f��&���f3�&�;�z4���;�Z���M�9�a�\��jw|�8�[{�����w|B9N��_[.y����+�w�p�9o��������+�����b���Y��Fe��OaV��W��C�8��\�ncxv�X����l�z���c�l��'�|v(S��EZ�����mp��C�a��Ct	</-avP���'t�)QnaW�u_��=�����R�������z��_W�����9
&O�?^��t*):F/�8��sH�-E9oau|��f�O����b����������6�2����M�[���?\t|?l�����x��a|]������T�����J��E����R����\:f>���5��D������|�m�!;�a1>�*��d������~TM��|��0��~Lasz$��V���C^^Fr/��gZ��a����fa��%���������>����}
�����\t��y�S"�X�L#=Oo������O���� Ma��S�+���j����|K
���t��U��o�]��-M�}�V�wW�Yt�b����+������~2�
�bs����Pol�Y$�U�Y\���vH���aN4u�_����&mu]���8sqF�`�nh���l�ZE�������%��z�,�J^e%=e����"����3��!����;�H/i���� [<=c��5�y���e�c�-1����n����L�%��;[G
�3,��������=�t[�d�-���^��S��Q���D�����=p�1s���%f�S�*+��&��)��v�\�%LnK��l���l����}c�q�Q�El���-��x�~��<�aY����z��_W�WY30��f��Z��0T�U����-n/X>��)J���������� '�|]�5���-1��}���:��dS��������=�����-�0��>-"`��1E;nag�-��,[�J����t�-����>��D\P����aKX~�nK��%�H�B|��oz�3�7ek��"2�l�^�� ��:B������,a�I��
b��!��n�l��[�����o&��"���\-���)�s	�����*�+��|�'He>���im��-�f�-[����w�q�:�����V������oo�gRl�f��
�&EE�`�����P�����+�/�gi�
�1��)���v�I�R�I���`���]����]��Zf*�"�������e411�����"/1E]��N/=��o�����?�Y8%���krvI6m����D��V"�%,a��);�
8�H�&g���>|�H�7R�?��B������{�m[��|��*�}�
{�+���{��~0U�������v�T��>%:��	gu�ZyV49E5)�%,ue 
kE����w�6�TM��8��qqQ�-l�~_r��`�R��L�������U<�8�&����:vL �4�}�V�0r.Z
����E�����49�,Y3�l�R]��3�.���7y��JS�z������d2kl9GmO�T��5�[���j����&wu^��4��3�d�uL���9s����`_�/R�f;�2�D<|����l�:�Bze�hNV�R�
���g�S��\�2T�+Pe������@t9*C�U���m�2TTZ�mk;W����?�R<]6�ng����T���}�$�Ge���PD�x����+i	+���u�Ww%���2��������P5mT>O������W�(�g:���/����>*C�L�YT��ba���.N������G�%}�J;�������Q���
���C�s��|��������	���!QfX���?��=e�2;�������e������Vg�^l}5;w��=l���;w��O%G����s����{��@��T-�sG��2�����y+?��:�A��sg��U��D��a�/�����Q������/��YF�I��i��z\\���������s����'�w�C������,�s�L�t�78��{�K�>���|V,]�;���;b3�����=,{1���6,S����B�0%�
�	��U7�s���{��I����3,{�����fu�^��W[����n>��Y��:��zKz:���;wO������`��k3��������8��c��%w��(�3�<-������`��*>
t31�����@�o�9�(3�@V7�.�����(���Od,H
9�������@���y*�G[��=��Y��Jtr|�x���E�[�Y�<O�/l��{����va{Ui��vxt�������B�?6��.[
���������y��-.��,�a3��?���|?��7V��)w���n��o@v��I�����n;0--]�ZcBK����������9�6$m��������
��� ����"����&��X$�������	���62Jb_�I��L���m~m�!<l���m�����`|`C��8H;����X���nC �o��
��\���d?ZM�+��:�O���2�m�!�:���~��2�o�!A<mEi�0tr9}��,&����4}��
��b�.�3��b����;���F����Ix�H`���B�6b3�����%,��>��N�� LIX��c
�a����F6���S6���*��K1��A��Z��*�#�^`C���/�r���?i��zon�1��A�/��!6$�F���Hj�~����\�&�n��8�`o^U�(K�|���������Wi3�o��c��4rG4E�e�,N����2�)��1A�9�p.a���)IM�&s[����i�*�x�s	S
���CfR�������g������v��:�������
|!6�XXr�X�G��d8G�6V�����z�K�y�b�Z����;����~���
��>�������u���H,}paUW�:��!6�_4�5������}�X��k�`���q�h��2�m
�5�u���?:>t������z,�G�@\�b���e��a�3�Y�%������;�y8|hOd���`?������~4���9�	O���j���-���������rtr{
{�M��4'�u�sM��G���g�
��+�s��?]�����6,��[m�������$��w^���f]���!����,�5��E`�!
�KWO?.	����\����A��W2_	?�(�{���#����{+�}!��������u�����w�u����������%y.�6�f:m���c)��E;�*�������������dk��_���`'X��3.7F1��(�����F8l�{["�Kn���_Ej�����
�+.���n�rZk�Kql�/�
�KK���^�%��A�����������"����j-G�����sK�cS�S`�g��G���^���w�=��������*8������7IW�O�'S�8nf����14xrO:�xnLH>�:l�������[�����ya�/�Cq�*<���I����D�������4V�����hL�!��g�{m����X��
|��C���s-qV�e*W��Vr��L�������'+�L�d)Qf����(i�X�'��}L���c�9����������cZ��l����8���vS������*g������|����m��kK�:C�Z�q;�Z�����!lv�N�����A���m��]6sqc���������35�<���C4F����2�_���e��w���<������g��m�=v�l����x���J��~�s���qT��OJY�4�+�7�H7���4`G3V2l|7D�K�R���v�{2�{�V>��f������w�[JAm	�����f�����99�-\{�S�-6���`�3����-�6C6���5v�}�1
U.,��	��Oujo*�� i���@��v��&UgH;g����\aw�������qh��]�xmK����Ea�����cV?������P�y�����';�Mu���M/V���1�������BR���l;��a����]MdL��"cl�5�2�n�!�P&q������%�����5x��g��9����lh������v�
�4�<$m3�� o���fb{�`��[6���[W������X��s!Z������80�x��e���d6t����6%��y}3$�F��:9�fi,<#n;��ze���F]����z8�&'���Xs8���/�3����^����>s��(�6���G~Nq9#6�|G��y"��������c�?��3V���Mv�����4�����'�|L�!(�Q��S;���9"g��O�r9���Wl\est���O'������6���ZT;�0s�p��SG�����sM`O�L��:��mlC��,D�e�����j�����[Ht����~t���m����G�"m���
���/�����H���:e���q�-o���!�����
��7��wfFC!��
��F�Akn	as��{�
Mk#
%z�����2��-���7l�\�����>��ql�I��}����������::j/q�K�	��YZ�ay��k^�r�|�:�YW��P2o*��
����F��O�����R][NR��������/aj;��)zmXM����:�^X;����&lK�N2��D5y[[U.3���+K����C�P!u�����l���(�?�����uio���_F�T���,��rf����u/���qm�i�/�v����l�hl�k�J�Fk�<�_��-Bq�������'|`VH�ga��n�����J�ji���{��S���0eb�����N�"��6p��\#�a���9����������H��L��C� �D����S�,4�j�F�0���d�[��0��C��z�b��8�j^�V��c���*�+��S-�Q�J�����������}�`��
{��9�?�
>��J�F�Oj�2Cm�nm���&W�;��S���m����6�-o��������V�����0��B6kX��&�>l��i�UJ���U�9����''��8��S9�MX�Ho�1�xR�9��L��a������IT��1���X]�5��y�6-�9����J0����3�q[K@��{�2,c37e^V}��3�����\cb)�<n�2��p�%w��l��<c���[�)��a�����)b����!4]u��Fx���k-�:��1�l����m�]0��rm!i�!�����-����h2�aKf�j*�H�jy���e���I���<9fL��|�=o����m��\e�:=D���s8Qkl���I�R\�[l*����,�y�� �7�R�T[N0�p�8,���)�.��l
���-d�h';`���O���m:�yaX@������R>���=0��#J�A��qK�Z��y�%�:��xd�9CN`3��$+;{�*���-$�qL(��!�u����s0Nv��2d���r����p
�[������X��ql����}�������	����d!����Bg�C'J'��!�i`�S�p�V��~��O�)Nw��4~:|
����UV���\c�O� �����g2L}�R�c�o��Ne�{�c��q$
��ll��7�6�wi$��l��f'� �O�@��&��^}�l�d�i;������Q�6�1�[��!��^6f���������mZ�k���sxd����>�x�OQ��3���vY�3��O_B9HEY�LEZ�%a�Os������#���lr��[����q|����M'%�K�����
�,
��lsH�`���H��U�KU)3}��X�:�A���S�@e=�������b���M����z�Ka�p!w&����;�v�������1,j��<���#>���4a��6����6�t�����a�o����-d'w>�!(<���_�C�-$�+���F��:�BFA����$yT���+���e���b�k�{(�4�Jg6KxP'������������Zc+���!�i��F�������������;d>	�RF���|#��9�����z��##�OMu�Q<�����0�ns����T982�T"|�?�2�Y~�����=��)Z>�s0�`�����T9�?����T��;�Q�T9�?5f"n�O���0��k��'�wMp�?�	����&��b�V��n���t(
�B��1@�`*eV���S�:�s8�O�����?���S�����SX��
z��T������r��y��h��*2�w�����1��r�6A5��O���p.���<A��Oy�1j�%
��r�r��T���Z����z������Oa ��c���1�)�����#��u8�{�����sq\]U�V��#Ik���s����Se��0����M��[��*��c&^��x�;������7��*t���DH�3���i5�k3L]]�1���3�vV���r6������:�P�;������������Pw6�ACx2�U=Y�5x�����r���|��iV!����u�W���C�o�C&�VU����T~�P�T��f��$�T�Y*�9�{*���������NS�����E����p(���K�n�pLC�U��Y�
/I��[�2q2u�RB��T18d[�u��d�|W���M����#�i�����������F�����2��6�X�)O��1:%<��5|n!���V�����/W�����e�|�����s�b�QmM�7<0��T����R7��jS�\GH^+�H�4���C+}KWW�R��-���'K�*����7c���}���J�]�o�7�oY�j���1<����.�BC#����1�0�/�s�|����g�_�c�����V�'-��M�JE
2�F�����h������}���p�L_��kc?c�^�pP?��������������0��
G�MG\m�9:h�������9������{�c�s�k��s�t�;�s��������I{�����&��;6��}��);��a����`��u?}���k�H��=��������b������~y�o���m��}�a����}�����k����l����m�{D�7_��6O'������l�C����
�%����q�6�J��"�9=@jl�
�����8��y$�+�i�$sa�Omv�0�
�����3dL����lrr����gt�����K[��53�R�l?G��ae����;m^����laJ��-(�N'm6!X!����m��6T�qh�9����!8P
���l�h#���k)u�d�S�,Um<x��rR�o���}����7*y������'����Xq��k{�/��F`�}��^=���.���?b���\�
	BH��8Y���$�:em:��o8YL����E���G�ee?��F$������Yw[���-������n!��l�} /`��=}���@[(-q~�����/rj~�\��� E�C��49o�ME}��@���C�x0;��L���Cm������e�wG����"��"��6X�D
��$��I�$��Av� 4o���q{'���g��
f(�!�#���e���x�$��h��k�8|�|��������l��sU��|^����R���ch�l��Pv@����y�KT�<x�������"!Y5�Z�UKb�w�$���JEfnRL����
��9e�@��>OvHb���/�2r/�&�S�s2�cO�^FVG�M��E������s�2�3�!M��P�?B���
��&$MuN����V��I[�6����
��,��
aw�$����q:�m-�@%�7&��z����8�h<xODda��!������+�gg�|��4�r�;���,�Y�%6�*[6�p�bP{��,��_EE��o���G��sRQf
E��`l�b�N�J������5^���
�,��F~�����������px�����L�r�C;I�T�E��y�����R�:+2��K(e�����w'P��v
�iC�]�G�i�/z�{�:w2�:���
|��.uET�}}���:�:dE@�p(��}�Z
U����"��+�N^����hD3oC�"�|�q�mH
M�\a�#e;��H���h��l	�+���r����ur�=�zdq�9���GW|/��FQQQtE5��Hz
����m��QQ����t}%Qm�%�sH�Eh��a����}�`-�2V3�L��=z���^�1����)����)\�)���\k���/��M%��/\�������i4��ws��R{��������M��6tU7�\G�`�����D=�8o_�����7�������U=]�)��9Z�Zlw����#�Jv�-�dY���rl��,��PL
I
SW��9�������U�w����{r�m�8G��tW��5`��j�q�2�w��
��"�������Gm9�)����9���l�9���N�$�((C���|hqdI;Q-[�:�r�)TP���D����g����V*(G5�f
�Pb�LqT���z�KQ��B
,e�A�e*�J0�>;�6(�Q3���CPE����wZC�Y�����K#D'��R��"SX8������:"E��L��#�u*��^�a,���8���+�U7�V�pZ���%����;EYkH��:#�LG�~oZd�����c�	��L"�Bi���L}~�%�y��(;��"���C	;T�ws����������.��wP������8��h�4�Rf�p������2u�e��;rg-���dEe�k`��
�Y�����B�.�!����==S�tpN�P�LM��Z��*1���()�$��L/�;�rUm�&����t�9p��kC��r���'�p�c���(<��������R�=]�6Ul��1��m������eZ{��{��,r����(;�$c���)�y��RZ��W��R��]�@j�Y��r�g%�\�l
�������b{X5s�F��[����9s���(5�C��uA�B�*@&x���H0`1����v�Fp�n?�A�����J��T���3���"��"P��!|%��zr���El�=�#��3/�h����x�_
��~�5!����!18�� {�|1BRF�>Z���l\�Vi��4�{�M����9��TR�0,��R���5���p(�I��%�����x���o.Y����P�V����>2���r�����c	<�x]&�o�����ML����QE�������.q�'o6����X��}0G�����N�j��lS���{�Bx�pmc���2F�7�db
����
�d���f��|3�YCt����I���,�L0�%���<2�����>�Ba�*����M�&��g���x��;���W�o����-��
���Q�_�@�>3y�%>���8�#��=���'�{��B0�y��-���,�C��Z
�uS�����q���q���ME�#��Kg\��b�e�5�]�_��0���u���b�l�9�2�/�m>����!�b4/��G\�����~X=���AB���@	������fz��&����c�B�o=Md�3~Q!�pv
r���d06m4�@p�+kCB�EY�����������6�(������Pf��Y�h��(��;��\%i�D���J�e�}s���O�U��!�L<y�BX���?�i"�V+�����h�����f_jR�c]�\]N�+sa"n�����>fo�To��)��J�Q���C����t��a�p����R�����l}XH2�)[�(��������]k��~3������
��|������|���5�U��@s����E��������b�q���8 &�5N1�Pi�5���G�@�)��W����q�S4�@�A��9��(n��������3�������G#��x�/������!!z��9����)|�G���%�L��eB����I�Dc����r�t&][ln�2����s�������t��K���>_j�^Z`v+l��{����� ��_�����>n�;r�"k�]�%�Hf|U����A�c�W��1����}7�;�-�h�6|���Q��K0��U�{l������3��2;0;��2	����������\
7���C=E~O�K����*��dA"�3b-��o�p���(Y�f})A��}f>�A�T����{�����iE!^�����L�\9��]�m�/{����Wx������X{zG@�gU[�N\��_�w$
�i�!��������_��������M��p���K���p:��K*�����w�q�]i������y���~��ON��>�|~��G>���@^��?�)�?�)��S��|
��������2��}Y�����(�@�,�@�]N���)PK=j��@�����G=���������?�����8U���w��h���G;�g;��v^�S?��������O�>�)�W?��~
��~
���89N�O�S���8����]?�)0>�)0~�S`�y
�2����c�s�S`�����s�����v�0;���rx����{*?����8��\�����v��������>�=s=�)��>��}r�O;�}FRO8�\��������!q�g�y`|������<�}Oa�1p�����������[�m��</��~���*�����_vH���ui��u
����ig�q����>�z��g�y���������#U�g���x���u�w�y�ws�w
�s�p��?���*@eR1^��?�L9��&���tt�]B��Ut�<C�9`���`,���?p ���!�pa�0�R����x�����C8 ( B���Q!�"�W�.�"
���C�e
|�	a���	K&&'�i��NKNQLWL]����������P�P�(�4�@�L�X�d�p�|D}\�d*
�
�j*
�MT�U����*G*J(M(PQ�P�T�P�P�P���P���������������a�|�u�I�Z�!nCC67���&����&��S�-c�3��@+�:��I��S���u���e&�����\Uu�{$�b�l�P���K&<����KH"�i�2R�H��1O�lNAn��$iHO����g���-gy�dV�!�Y���-Y�S�(��2SZ=���s� �;�h�W�zYG!Y�6Pz��j�������22M>E��yf��2o�g����%�,����t��B�N�sHC'�����z������Z^Q.Q���R����-3�����[��=*JA�2�^�S���s�����P.Q[iNA�5��Q��n�k5����n��f3�;v��4Zs���SPRE�����F��{3><����%;�}�$k�6��dV2qbr���1J�e�����R��������F�M����u%�T3(L��D��������m�]������I��k�Yr"�W9��w�P�����e4N4�$f{��'�d��"COU�i��6�w�{�R��y�6I��3(NQ	��w����~�R�,B�,$���M�B5OM�5��6�YUoi��%i�!j�0M�H����*W�)uS��,*��2)-V&��k��/U��u��R�qyO���IO)�W�W���,�}����Qi�;�x`���K����)3�(!�c�g��F���)���������9~�vw9g������>���=����)xX~���&�*-��v���y��,�E�e�cE�l���y����{
��g��F�����|ymx��5/,t�C������z����R0>�B.��O~�=���#�
������Z���N���mHRq�v��m�n<���2D���"	e��\��R
T&mw_L;)�� |����j�IA���RCM/{n#R�[�������hB���nR�N_����b�{�v�A�f��E�������s���>k2[A�Ax�T���z�3���������Fi`A3{�e������&s�0�R�rz�v���a6�/�g����@Hw����y�TG�U	�F")�U�����w�W��fc
���l�U�N�igo������Ob�u�`CW�(������MZO�
NN�G�hx�2?J��k�i"[�}1�;z���Z�!W0j�!?b����5�q��}����YB��������	>�T��Q6	7�sl�j���a!�d��v$�}�d����W}�=���"E�P3��9�1;��������{_T�������Q���������l;�Sza�?�:����l�
���>q�g����a���������{�m�oG�1��dTx����
:+rvJ��?L�=;e����������{�s�C�H�c�=O�=%&�4�-��Oi���p^SO��D��!*��83g�1<��]�;�5z�MR���SC�p �W+��
V&A��`����9�/#:~J�r��j�y>3��������l��@���Mc����u��8c��/v������X�)WDa#f�����7������_���������[QC��4�*�?Sn��`7�J���Q|y����p�v�l�[��qH��$�@��`C�%8�&��M��L:���8�'�`Krl��q��;(S\�+Or��s�&��=�"��M����k-������b�6T������U�5\�NQ.�����)��.�&��pD~�my9%w�&��;{�faL�%���D�d��
��������aX���oG��a�a���bX�`Xw1�{K�sqJf
wE�
�	;���_��RI|V�
�P1��3��;�Y
�Qza5�V��n�ae+��Z��|������3��l���0�[�s��hn�T�Fe�� �g������'I
��q�����������	��f���S2�B��T�q����l�����"��O���,0��l�@�="wT��bN��7�N��3w��$5s��V�=(&��V���/#�ugnp���A
�LW�j���\�����z��un�!�+>��&hQJ�I�������N>�R�.�����������u��h���iX��������8��GIv��sfvd��[�J�{���2�R�wUT�.4uy���+�R��~�O�NK&������)�����,���#��Y�n@
Bj6�,bQ�{TH1��H��
�U�����=�H��=�/%U)b�L�4*���Pf,�M�u|��gJD�]�K����������2E��]��n7�{��X�~�bg��Y����e3$	�VQW������rl�����g=���h��� �o���I�is�op%3�����n���[��~���c��7�L~�*�{L0�>�$<^��M�`�f���h�	��;�-���k��N�����������`��)Q�N�?�_�[Cnf�/��k���acV��m��-O@�����x��T���T��t���o	r�E��0���bT��s��!���1��V���NC��@�,Y�E��-8��K�
��4MMD��(�>�)4[W�-�J	���7-�+h�������mNa�aXF1�/��h�e��[gr�b���+���^����X@��@\��+/�54���H;�����3��MG�����i�M����N���27�uu��� ������� �7������\� �U"��jD85�Z������#C���w���������S����h�C�z���8|_t���o�����7��?~�.�r������4�+6�)��A[��6d!��� ������sw�xsK|�O�,������F�1��,�u�K�"���bIxy_�T �^��&^������rP��v}�&�,w������>����Ky��'�uVa/�)����^�����o�G;��*
d�0�|�rr^���#��#<�]��������%��^��i�V�Idb���Y�����K1"K#��D�Xp+#r��I�4���4�1��-8OK�o/DQX�d�=��2���L3��9w���q���f'.�[N�
Pz��&~���v�.$~�^��X���@�&)�7��v�f�����(�e�%^23�b�B���x*�
��V	,�J c>��KND!j�}�W��d�cm���4�	<i�@>������1h��������-<7{��-u���CQ�@����W�T+M���G��sC�,4��6�0t�S��3|+��z��G�4C��>��Z� �YE���c�m��?YWD��8�e�v����/��s$k'���"h��G��20�S`I+;��P���S-��E.-:()�����i�t}Ab�%+��Y�,��&�e�$��\��a�:����H88�-�,�Ha��kdE��^��h�KaX�%��
j*�Ok����l�P���Y4m��lAX��
e}64+^��E�������rR�g7���d[t�K`����X��$��k�����8��;���B��\�� �B���������q�ak���:ZM �l0��Vs�N4�P��AM��F���K�"�&��0�Z�z�/�A�S'���k���\�QR���>	���6Q0��cX���M��b%	��,d��U�g4������{xe?h���@i��1��������	=����5�x�,���C4��B}}�A��myU�����W�&�Tf���uU�W`N��.[��h?����6_�f�7S2������ �+�B���F�P0H���@49a������*~*i�$��B6X�I>���0k]S�bFV��>��V�������U��:�#���G[o�!��H[����$��c�V��4�l[����1\�r� t6�Y���gO��RS�r��@������Xf�$��Rg}i;�6i@�>������
�5Z�a��P]B��|�����!'N���P������l��rp��+����UM�N��r��n{��3d�
�Bly�MwD��������X�<2T�� �A�@�W�m��]�I�����X���P������AU�d=����{�9������$�����Ghp\�Dg,l1v��&�����W�W�A�+���X�=��a���J�������S>�y����9�s5?-��	+M2z
��%d����-}�{p�r�HP����!Xy���mQ����t��w9�z�TZ�4�NZ�j���-1�������4�e���E��z���j����U�:#�EA~���
^0I���s�a)�|m���&��!�9���!���:���Ze9��D�u6���R��f}�H6�����d3�`���!����0#r���c����'�f|�k�������qwF�K�s����]We`��.��w]���M���4��QX�{�`����c��G���a�V��� u
t��@�G����)d�{�i��b;���x�E��X�V>r3����1�
a�	����a+<P#�W0m���jX�S��;�@���S|��}Nb����vW��4����0�Z���]1�
�Il���	�����U�"�12>|O����o>�����P���6(Ggpv���5�8K��)�wE�.H�5M�jA��Q��KUX�hF���.]a!��r�6���Z'~T(��=����Ad�}a���nE�x�����B�����*vT�8������o����&�V#
}f�lC$�����F*$���J�4}fL������7G$�S%!��E���5���8Sr{�\B���0Z�Z�jl�H:�������,9�i5-�T�m��WP�0�5���T	��,_~��������[AS��A]�����V���>�}������{���:���R�k���;�l���������^���J��H�B���f{R�
>����������CZEj���������"�wG*�G<��G����.�����)�T������I�P�_�����H�-�L��5GD�~P�j>�	TS��v��������P�W�~
c60�\�9�M5���1���bYUI��%����Z+T�(k+9g)w:���z�����U�]�
�����}�NM���c����z�M�4�n������jj���M�L�&��^N�d|�&�j�����8�B�X��;uR,m�X�Ja���rh"�K�/�]�������n�������E%8uRT����%��m�xP�h�J����,;uT���^�E�y	��+=��1�+��dT�S�����|��l|�+��ee�j����b*S$�����p�G�dt�(9<�8��3�/])]����-��G�LS��'��c���Z����s����rD�v��t5�x��{�
ZA���"�b_%]�I�M��h�y��J�0m����t�J-Rr�Z�)�k��l�q���_\2��*��p�����J����,���I����#��P���IU�c�Zd+��
}`+7���q�$�����+(�;D������1L��U�`�Ps\GI�l!demRs{P���f_L	
�)�����K����)Jl��Q��M���]F.Y�w��=�u{�;���W��9�`;��� n-���n;�C�4�#����:��m�����v�[�����k��	���d��Q��z5���J�0V�j{wqPK�w'�w�w�w:*�w�E������������a��+�<����C����%���f��`���V�>��a��N������L�{��n,.��f�n�r�w:�j���m���	���!)���<��A�k�����\�?��{�.�����Ds?U6h����X9#CT�r�N�jX9T���b���5���Ul����K�G\9{�U���s���32u�c���n�\3��
�����R�$y��6�w)
�"u�V~�k�<t��l�V�>V��;�����b������r�7+��me���{H�;��9���9O]
np��r��hP*Q���b��|�����s�������Z�<��9O����V���F��A^��RN�B|��V�����e�T�(k+���g��+�<���9�������s4�8M���C���I�<�#q|��Rmm �/U}���
������W��>� ���$�����V�ea�J��@
5SE�!`�ep��h��7�J��|E�����vCU���F*WF�I�rU��,o}/��z�*bi���/�=�_��b���r~R������Yy�]R'�][�Z������j��+�x�f����y-��:��9R�}��4�����{��(+��'�W����������\6�=8R�Cae��:���/*��Xjz�6����I��J�/>J��5A-�9
��a.���TFq-�T]��BjR���[���0�z��/jc�RPT����|��L��-�W\U��5��J����~��;�����tp������L���Q��G!�������YZ��gW�_��vR�HC�E*���)H.��P����U5eU��~�4�)�\�?�+���I��<�o��o�(z���_�v����V����Vv;m*
��m�����uTh>�%(��JVvD�s���e��������f]\�(+�o�=���e����(�pc>'=�*'��N�QzI����
>*T�>F�}����$��9�h5�%�w��&�����T�??&�Gq���/!2���U�Y��Re��*9���*����P��#I�$�p��%��,��a�&@R&����7#������H!�"�T|0E�V�\�Y?��.�K��,nN��"����9&v�d�Q4m����SM �SSH:
P�JS��JR����G��_����9������GZ�t�7��a�3}�D��7�8�	�t������H.g���r^i���/�����q�����_�8��@��V��M	\O�X��U��s�>��:Q�5`C\mi����b49Z�r�*B�Mgo�����m��Hk�Z��r����0>�����h���r>Yx*2E +u����!b�=�o� �+���FY,|�%�Tb�:�'���k$�����i���<@�;��o�w�_���8"����5���P=����!�LG�[���5����O~um�^�����a
��7���`J��M�@�:*Q����@�Ie�Z��_�
���m=��U�Y����A�{�]���3b�u:�{���V��e��jM�@u8i�<"�\�z�cS����0��#������8IY�T��{+��j�R>S�5p�fE�����U�8�0F3��W����RH�K��*��
4�����������d���C��iV����f��c�_��cTq�Lx7�g���.d Ud���:Q
��1nhY�����S���	����F,+6�T������eM���0��5�US����/�4{[^�r$����������i]q`qnw����"$g61e�y�
���"���T��d`c��C���M�\g�*��\AV���`k���7�
5��p�Q�f>Q1��
��-�u�?��n�R����:���l��&b8O��Q9����-S/D[6��+��U����I����]��>�T�U��Im#R},��m��w�'M�z����\N|��O9a��� s�Ij(.jdy!�]m�Y=�D*�J�|���e�f"�N]5O����O����!yoW�v��������Fzb1,C
)92�������@3�3�WmO��_���p��(��#�V���h��%G������E=������'u�H��;b.F��_�1g��z������t���v3L�6�� 5����C�A5�3,b��L�$�u��0�3lbG�bb7�_^������n�[�6k'��C��������?�r*u=���S�6����\r,u>����N����U{��*Xvg����o5N,��XK����(���84�T�z&�aJ�TO�oN��.���_��&�a�}Kf��f_�K;�"�S���X���+���f+
7O-�OS-ZC]3E^�VW��l)�z�|U9�o���kUZxsY�v���j�T��a�-���R#7s����0�9��k��P^J=R����S��}�Y�G{F^�VWrn]�T5>�G�k�7��2�FB�`@�g�v���15fp�����a��Y�p�MM�v�~��p������S�n�����j
��P{�TnX��T���]GTy^
U��T#�T�aQy[��M�p�0
q1�E�0Ec?������2��T]��������z�c��]=,����a�g�FKS~����m�h]yF*MQ�����44�z��4��VH�^�>�{�����G^/�=��z,���z��7�&��5dQ���a;����#�v1,��.��J_��^�9�"��/s�u�Uv?j��}�J�{%1'����J!BY_*�:��`��w�:��%���6/}/����{y,����HJ�e�9����J}R+�F/K������_S�~$UwL����D��cD���s=k^)R��+�%R�~R%b�y�_�������^kM��#����A�������;��"U?Fiu;sCQzR�CuSJ��/k�:*���r'7�4T�rFo?�{��(I�mN�_5�e��Q9��YQ���T���O�dC���*�|���aG��)ER������(.��-pz=���'5�����6S�)�K��$�qz���M7$N^8� n�_"2����� rY^��X���(����r�F����@b57���&I�,a=��? �]�i f����%l�����f)w�e��_"�%���
�� XU��j3�"���*������jP�����|���n�0p�=�8pLm
���6p[����O����
x��O�M����?��d���z�����bf�[G��x*��h����zL������!�����x�b�9�i9��L�2X��?'ViB�Z�n@^	�)�g��+�a2_�E#�cW$������Rf�@#�T��z��`�������;���%��
cU��p�Ay�nL��N�s�&)rX{����:F,�!;�L�
r�C������-�r�	�xJ��[/�/(/�	X
�6�A�������00{�)��FD�
l�B���:c�'����J-�Q��2�/���ex�P$�O�A�6���x=�����b,�q��|�]r�����4���U-��
ye�N+W�u�������m���v��4�k����a21^S�Cf�����
PB5Q7���E�ma�������ac�3{��
��h?���`E-/�IK=h
<�������
�D����w#��\�8��J��^9�4S{
����q����0�C�:m�s��F���F�L������h@o/M���V������}+�q��+v~�q����}�}T�K"��'a�c�����~�tt/��MR����������]��B��VC��������#�_�WxcKf���I9��3�khs�j��$j��k�3N�����1�8`o�%?`�A�4oa����NO!�2�1s6��1��!P���������{{��������B�C.
WF:�nnUN�F��& ��+�OZ����N�l�j���/,$4�=��e�OE-wlUQ[�T���[_�����>S^7���d6��dm���6Zh�X�%���� h����R7�"a@�vW�6�/����"�I�	�[�r��:�x��������@h����V�e�]��S�D ���@C��
�I�����.�A�4������f9���q��
�����C=����!�rC�k��LBS������6ttU���Qb�	8�%)���@k�Q��'j9x�Q�!�U$u���,����S�ss�0;sJP���c� �e�W�v�M�y�jW��k;��x=$W����!
[�v?�.���]9��"Y��"��)}��+"�������r�m��G������G�q��L������?�����s�����V����+��G>�g>��|
��O��������2��}Y�����(�@�,�@�]N���)PK=j��@�����G=���������?�����8U���w��h���G;�g;��v^�S?��������O�>�)�W?��~
��~
���89N�O�S���8����]?�)0>�)0~�S`�y
�2O���)0�<�����1����<������a�)p8r
�V���S`����?�)�>�)�~�{%���]���>������^��g����\O9�����a���i�]d��e��?>���4�~&�.�~�?��S���������e>�u�{��W�����E�����������~���*�����_�o����{�F������S��H�[@��so��.�KJ����O���\^�]���{>�#�����{�I�"~�B��*��(����C��f��h�4=^cb��Ut�<C�9`���`,���V�����a�a�0tF�/���~����M
�F(����A� |�D���(���1�HC�!�{�wB���D����d���I�	��w�����S�SW�1�4�7�:�=T���(
(
*(((((QDW-��������J�zU�Gx������J
T�)+�,.�/1�2T��k�n�q�t�w�z�}�1o�f�=�9�����������g1���y0�pt|�Z���:�.���H#��H�G9�f,����K�C\t�`��k��L�|O��UDA�����_R��d=i6KY-I;2RVN�2�"�E��He���mf������.O�&'��B64�.��=�C��"U(��L����'�^���y,`�*wE�f�a�����2Im���������j�K�����Q`��z�:���OT��*	_�.p�`D����fHpUY�|wP]�|��@����v��*zQ��;J�Q������[�����)�Y��5c����g:��Fj�<K���M����L�*�M\b��HG�U(�?B���������F���RT��Y����@A�2�����u�{V��`@�^���2�.k&��
�8��f�D�Qy�W��������|�@t��]��+�������0����Q�+�N��zRe�.������o�'wH��N�����Mp�����r���$Q�)��a��������Sy'=�2�z�D����������T
)�Ws>����D.��N�PW��L����9�������>,-���1T�j;Frel��&�9R��V�t��8*�[(�x�Ik^6*CQ�6H���[u�kR�����cf|~S5�v/���U���os���������/�Sb������%2�&P����E���6�����������\<�+�6�����)��xa����`����	T�ost�r�#���m����{��"�@�Z����dM��PzR��e�Y��6o�m���a7���FjC�����k�_��u�����R��$o�8��Im�}���	5C��F�����B����,O��l n[���{M������#J�Q�����I;r��XO����P�������<�Zs��Z0���,5������������^���,�,S�Q�m����1�W�6'�5"u���X6k�K6���z�H�d`w�Hj/C]'����?)�.HK*�wB�k�����Q����m�	�vb5W>H
��	[�N�Y'�Dz�9��cVVlG��4�|�����*TRw�
�	���D��w8�Y`�2���T�Y`��|ow�q�l�N�����+�G�;w(�4����G��������n��i^u�-b����f�������g/J�6�[M��}�W�B��K��+���V��W[q��X����W�"5�H�^��vW����'�`��~�� ��S�W����K������cGj�Q���������2���)���|��I�u�������x��\�p<!?G�l�W�g��H6�F��1tp)�<x�]�HW�����w����*C-?�i����A�E�\[�3�����Z���UV����K5y����,�3^���N�68��M7C�V�u��T���}�V�$&�����I�����Uo-��#�j��9�lq-6)���<�eZlp�g���z$������Ca��e��R!�9�
,���,B�\�����~}���@E�q��V;Qu�x��	��*���%�)"��q?2�B�8�*N���8:�V���	TqX�&P��S�m�	T0����y�u�^K0�*a��9I^�8�'�_��j]m�*f
tl���}�V���l��}7��)�2�	dxN/[���F:Bk�	Ttz�e%k������*8��	TG<g�@EOB�v!s�����|��D�>F���������p_D`u0Z�e�v`uZ����j�s_�nF]*Bp0��e�u0j�����"-8ws0���pj�Z��XwZO|oY��v_��"��������h<��_9U��|G<�9�j�����	���
��c���������Ej���T1��q�k[��[e��'5�2�._�.O�6�����}h�`T�#����c����9���nw���B]�WW�,v�������v�>X+G��i��n@]�Knls����
��$b�����XON�bFK�=8��!+���"�9��`4|j��e�B
�P^�%����qe�9��@�(�fF����`�`|?0���TTKw]PT�N0�`��pq�! r����EgC�e!ML��F��y��5W?Z���0�u(r��
��\��EcM4��:i��s��h��C�Q��Z���,�"Edh�T(�+����j���j�������jM�b�)�t�����It��?s
1*��
JH
�m����}�k�;e�c�sw�"�W�P�T[a|�*��q,q��A��9\PF�]�j�X���������s����4�}\��;���a���;��zupg��!�(��\������D�W���;��;,w�v�;�;��N�T���9�3sg���qj�Z���XwZO|�oYa/t��N4��zP%u��3����+w��9�����WA��p��'L�6�������L���|�c�K����3}��k`��:�T��
A�/�������M��q���>�pgz����Q|p�����n8�pG��{����8��PM\��A�B���F������r��<y�_�K��Yv�k0)����;�:���t��w�����pg.���(+R���A�Y�����<��(�+�������k�C��OuI���/3%}��GW�{�J�fwo�`�j���+�����-���)�'�0L}��ZM�A�dK<�@�Y
Uq�J���"��(���9���-+&�����W�v����xT�����s��w����{��8�U@~;������q���x��������N�X�rm�, �_�Y}\CG-���/���P��C��r4�Q����p:���r�P���2���L�@��)}O$��9?(I��aI���>��'�=m��;���D��/���X�������i+�m�h��g�RJ�K�VFvom�e�:>@	���}�%�k�8��|[��_Y����0�����%���v�<�KT��������#*�h�2�n��/w<���[���W�G@R��-��r���9l�����|[�}{$��������G���L2�1N#a��"����4Jx�����9��:#�d<��7b�c;������d��U(��#�!��
�g�9�">�@|��'~E@�k+�+�}f�����\g���a|�6�$�u�?������4��m���tE/�o^�����L��YFG�US�Rx�?3FJ��"���{���[�[��D��2s����JqJ�e�Z<��R�d�O(��V���Ki������'�N_M���q�:t @��H�6�H~���=�h����[z�=��R,:H2]�#����y�[�T�L�t������32���K>���nn���L����6�Z�/B��*���$d,�h���~k���nK�)j��P��������7��ayK�6K
]$rJ�j��P��~7�oV�(����rs.�Y��PH����p���0���k������+���p��x��+�������Dl�w�M�H2a$��=��o�K����'ME��?1	%�y6K:��b�(��V��O��YA��j�hP18a���TtI7.$I���"h���4��r��0��i ��3���g�H� ��^�-�Vi�<��ad�8��{e���#����wW�3Z��"�s/HZ�k�|�F��Vj�����b�h���0����(k��Z�I�D�xE��h(I7�<Y�dx�F��o:�4
J���(�4`���Bt*T�����9�������hi�G��
#�c32��Q_�B�@�z�h%d~o�K�`�<cZBN�3+�������������_2��BET�U���T�J�Y�	-�G�w�#���G[%���� ��6.V����x[����S�b��+U��������S�C:mO�?��3�b,\/)����9x[�����du����i�����7W��v��\E���wj��P��`l��#���(�V��-(i}����M�$�y��\�]���h�v���rQ���!��j�3d�c�3��N��b��dzU�dF+C���ls��(�-�@���:uq�d:�c1���Y��UUt�&D*��eP�t��`�}��!��:���T�c����}�Li�h@W�aw����#%q����s���e������=���D9FAk��a�P�AkK,sw��,($N��r��(������%���=xF�DE7"���(<8��06��qq<[�"Lh���K(�/��$
;�J�3[����Y�)�bh���g�n�����?���>�tU��PFn�\tTDx�
�S�������%	��iM��yI���&��|����+D���i���$������F�(�q�����/�HZaT)W�(hu�R�s�\C�3HQ��2�����3�z���'J�x'J)fj�����_fv�]mnH��m�o@��8��2m\$�X��B�_�,CL�^��������#��.��
�Hi��-AW��n�A�t����6_}�H���GS��3v��>\�@��y;EDUj���\~o��1���oE�j��<!�,ZC����!�����Z8HB���rW���v���	���:�X�zV"|�3t��-Q�K���]qT�J4�FY�8]����!����76?�����&<��:]|<Cw�'!&��I�tz�`&#�-N7H���\�N�����H���[�L��u���f�����S�,`Q��iY�������IbdL�rSGX�'K��}���$����G�p"]{�eL�r�U8��W����r1&�����0��?���8����L��M����2U���NQ�c���m�TM�e��2W��%R	����9geZh��)rL�"�zg��r4�m�A0-���P��=o���4^Hqm�~3%P���1@���m&O��)
��6�@��i���$z��M7��9�^gY�}E�SZ5R���u� l�e� �x����������a�S��B
�j��JJ5�?��������t�=��H+��;� )8���G�4�+gp�����i-��:v�J�����uZ��:���i�<L����v:��y�:,���h{�(�����I�iJ�&Jnf���C��3X��z����K�����/mZ��K��4L�	>f����^�����W�W�K���T*p��f|�����d
gE~d�X���5���jz5��-����U0x��`e��aO2����:hc��r��t�V�$c,�3�����x�A�-�:h��!f��N���e$���g���������G��'-ZE9�;�?�����IX}__�vN�����~mq��5�V�V�?�L�t(Y�H���b��+��R��t����X���4���?���P��Q�����K'�`�115��B��{�����0��y����p�}�68�!Fb��b���t�v\NH��haA!����K
��SE����u��B�����
)Wma!����v\Z0o��V\\H�tu!}o�E9��2�M�c���p�<�tKt���d�9�I��2#4[S��H+
���RC��5a���c�)�z�
�N�;�>_qH[t��b0,I_�����e���`�k���W���5>�!���S�qx3���M6D���v����i�a����d1@��^�7����s�k�S-hc'�$�M5@T72��=0�^
NV�����@y�$����J�fH�a02�S��V��h���1���&y��}=�91�K��!�n�2:^n�1�:��U����<��k�n��
P���Ml�<p�_kw�l��P�;��jB���",N��0X�*��������
{�(��7���P�E�C4s,wa���|Y(^�y�E���y�E��������������B��Hk�y�E�����/"�|,"�T-Z\D��}y�,"
�Ed��������gy�"���6T{>��H�n�n�V��E��i����M�'_�|��j�����.1����<���G������o+
 =hc�rC��W�����~�6����3,"����y<�"�v6,"m���rCy��w��Q��H
����nm�/"
�'�."o����l�h��]�,#M����/"�6x����/h��]s(�1�����R�S�Z+���"�?��X'�A�J������/W#��9�E7��u&�s��R���H��l�����5�L�A�3$�;�S��+U���C���;�K�������D�~��s�~��\�
zv+��������"����O�|N����u��V���F&/����N��2~�N���3P��V]|NZf$+b�UG�hX�[9��I�����>�H�����JiM?'���X�T�����n+��xL�6�)��x����eI?w[[��=��V�����H�\*�:6~;�Z}L9���v�JyS)5��*��l$��Uvi>+Eq��V��hU����^?G�sH�t��i�x��V��[%���f9SfXI�{h�q'Hk��U%`�n��T65���������
�U��W�E�dd�n���j�+io�R�FZ
_z��V�����K�^o(E��}X��b�l��"�c8q��l�3W�&XeC�;-���A
��[��B.�1���{m����U6ym�����O�3l�1!0���g'N����n��E�����6��������6�$DZ��4�����'�7�MN�+�
�O<r��4����/�c������|HE�g�������*bZ
T�>.`��S�E
V$��,F��$2�(��<1���$HH�T��P?��Hy�4H|��6��������C.�T���L�!�z+Q�^��~��#���e#h��i���F�o����O�@�_Z��Y����)G������6j�R����w��B;�W�L,9�\p"E�To}�T)���xE[����;�;�|�=bCh��"_�%=���+rN�7>�wjpYj�^� ��������r��(�02�����KlC�:2�\G�H^m"�s�k^GF�/����gi�*N�e��!��>����Jy���%jL����w�2k0Nn�op]'Q)�)���-�er�B���y��C����������-��/���M��r��c
y����~���)��gW�<�A[�3��p�A�A.(��i}��\8t�;H=�R I(����u�^.������\e�?i4�m~�-����Edi��?�7��<���O��I���f�yf�<
���	�*R>��N�^L��N6����UN7��4*!�C������������lZ�r�	���vNy_��L���u�:T���:���}h�a9�����T���a�0W���.�|��/�m
��Pf��l�
:��O/���5B�&YX��Oa�V���r����8TU������Mq/
�w2	�u�|�6@��MZ<9���B��|����YC��^H�:hep������m6���E�Yg��nc����:����_�$Y��c����uS'��8�&��ad��$����P�15v���rb������� ��4�D~MoTu< �C@�:b?�
3Za�j��CRNi�&Z�y	�����h����l�#���Xaz��
��HP(�V������J]�~*mP�g�y�CDt��=�M9����S94�	�w�M=��P8�� "�M�@+`����� x3�����Zf=�\"�k�/$��J��$Ha�m�Y��*u��f��##s��d�G����fX��j��XWw\��A�������mk�s����0�|���|~=��M�\�P%)�Jd
���
U��:�J��1���>�����
�	`��.]��?�`��j�Z�����5Nb�7��YB9L��g/�0����~��6�\`����Z8����dm�>��h�	F���B��E��QM��.'����VFSHa�tL����I��AA�,R"2�)�������E������y9W���
rf�*Aa���z1ie
���x�0[55����lN�$�-�OKo,����CKk<UH�N���2<-5�-��������	�U��a<��V�OR�z!�]��x�0[5��6�L����������>�'�,z�p���X�Q��{>
L��jO!���aT�
�=������j��������qT����6���a��(
�:�t�*J�����t*�t! [�P$hs
X����$�<|�r�wt�6W�Y��h�I+;�v=���5�]hv���i�VA�jl�$r�N���ZM����U'�n�Iw�V��t�}A��^�^�z������.g1F�o��1�<����/}�q.��=�a�-n����9�p\U���W��D�Qi�Yn�:i0r�/�}����^_N�g�6"m�1��^��fx(E�
�ZC��%�D���Z.�b�=��gk?'�`�,�v�9�KTI�;��Q����
�=Vu��Xn�G�+�����@��� B6�V8���G���9��fMz�P�Ei�Q'z���M&"�;p�Q����������a��_j�"i}�jg��Pv[��B�@$a��7��-e/:�lR��OH(�;��A�-�+:���5N�����}�HR��'R����d����������2u3B[R��Gi��=�\���f�Y�	K8��K@_�8��}f���S&B��<k� ��-��a5��a���4�L�6HP��qtI���@C0<<�.74%�[����>�L��$(����/�8�N�����+U�d/�
C��Y�^>�R$�����L
��g
1�:�����
���A����3�J��l�FFkH���/{�#RFSZP�w�����>�
%[�*�N��AY�������Z��C�D>��;�4�~oZH|�)���s5��	����X�(rFO�����q6��h�J����j�
Ny� 12ln�r���D��~w�C���g���ln7y��5`>�n}�������12'd�Q��M��	en��r.��L�����g�?�������<��y���2���(ZxN+R��PF[�eh��z�3(�)��VnI�6bn�f�5;�x��g��Q�S�H��H*
��&:Cb����� HF��e�f�c�_��v�����F�fl�`�����^#�J{�����]�We�{���S�_���<KH�)���t�q�%���\$+�������|��-�dy�6,�^Gm�rjEYe�A9��a�2��="�$ggHJ<�@���IEFZ��V���!�B)2	o��A�V�t�J]������;P��'J�|]��x������������su���_����spF�Yu�j��7���[�d�k�}��3�7�2����H}������vQS�<���Z^���=��-�5�=��}���Vf�X���'���>MFC��2��n��{e��B"Z������_N������q������{���Vk��j�b�]N
��7-�����������/>��D��2Sc�zTh�!�1���}�0-�6�sU1-43Q�2:�Q[����	2hC�����F��F�����6g�^����N$��hIt<C��@�3��d��W����e4�1����3�U��a �yh�)��Q��>5���A���p��>�m����iK����2Y�y��+��Nl�P���K�e�Z�Ni�l������vO6|�r������b��ei���A1�N�'����H��Km�����w��M
�uA����=(9�����0�#@���s���2v#�SK�A���>���m��6efb4w�FX�{a���.���7��e���LdW��\������Ni#�A<s�~��!�C��)c��
�A�j�Yc�<�l��yF�1?(�?(3��o[���`�:L-�F1������<}z�5�X����;��I���x>�+
�(|�G�K��,��N%��oK��;�8�����?����g�<��N���'�|~�K�G��i����O���)��S �O=�~j>�������}����r����(��(��)PS=j��@m����u�S��������������?�>N��@;��G;�jKO���v
���qO�z/�ho����}�e��?���w��O�v���y��qd_����>���n�������2��� G�����
�E�{��v��������>����^��?�)�?�)��S���)px}
����F����o~����q
������~�?��S�g����������������������.9�8�����a�)pZ}
��O��������y������W�u~��}�:~�_���������)����)����S���)pD�8�x~x}~r�pZ}
��O�������?��,G�i}�U�8��W ����W��������R�������<$�������g�����y�{x�����������S��3���� ��(�
P�T�F�����v��B�]�:��!ax*�M�!�0�L�L0L���g*lZ0E�.L�S*�����?�>T (����!��A�(�KQ�+Eb��x��7��6���@i�E(.���Q��n|�u������@���P{��104 0&0,02080>b�>�Y2s�3��&�f�&����GJMP1�0�4�0�0�0���0�b�a�i�a�a�a�a���|�um�� [����|���R�����W��|7i�������t��h')���H�>y�%�j�;�%�iY���|�Hq*yb�1�Nr1��0Pf�%��K�<f)=�\��/�����R
y��%���_��$��L.�M���%M���K�V�U�HJ�9^��6f(gY��l`����9$��	�Hk���y�;�����L��]^c�J�Rn#���S����-��-���r������r�[`�l~X!1�[�w�4c�3H���p3���(�<@�m��)������-������5$J����4�z��k�	A+Z�D��tX>��~�w5�=����,�2y�����/�D����.�0R���~[�v�����UZ���
���g�������l�6��$oB���.�[��I����B���� ������*�N�m
j�h�#�9�~:�&�����VM5*��+��i4=(g&D>_����	n>5�"iL��ljb�z�|�����~�F-�3�]�JVGS����-�n+���:e}���.����-�������L�-�%���TVt��hk�\��9{�4A����<��:3R��T�Xo����,�2�5I+�b!�+?��'b���W��j,�����\I}���$3`�j,�p��t�f9�4���}!�c����X�s_����|9(=�&tX��,y$��P.�)��N;����/t��5`�	�lK���dw�:�<�38�H{���uX{�-��xA��Kc	�%:�5���/�Z�1X��QM9����5�}���Rnw��}i�p��x,q~�������E^���"1e���$�L��}i2f�%:����WL8`����+"z ��L��X�l�D����m��e,�4�s�kH*>��c�.��Z,qF
���.5�#e�t���/�=:-��.����s���P�BV�r�;m�]�c������hmjL��vI��q���j�/�s�=c��\�^x3HO�7
���fH`��Dl�����y"�~��5�����y�+�7g�Lm���������)@b��%���
���rK���l8���m�P��-���c��������`��
w!v���!Y� p
��P�c�Qi��}3F���Q8�eL\�����/������^W������~�W�x@�P��|4���y���Z]�h����z�el���4\��M@+8	?l���Y$��7M���Y��|���K
�)��k��3��#���FT�y~M���6�a��(������4�m�2���&��A��&���������\oJvY����D�-�0p�� [b�q
����=b����A��N�%LN���4{��4lX�����)f��	�14c���%.�\&����m�N��6�UnB�`C0���^�'��+_{�r]c9��u�h�TL������Q ���f�L�MF�*]K}����-�Gx��]�fe=�6o*C�y'*���5�L�g�����V������e(<1F.T��(C���U�Hq�P��������~�2QZ��$I����2T1K6e<#_rP@*C�����a�P�Z�k����][)�����n��c7�d�Pi9�
ik�
�Px��]#(C��l��)������2��Oe(�p��l� o��2*7�p�m�����y�/����\��; ��.��#��.����8"���~��:�����I����}���I�aq���-�7�9w���r��c�i]����2����`�
�w���5���o���:�*���6g�xm�)��icp��#��;���s����w	��{y9�3��z�-3m�x�4�i�dnr:w������z
�R����d� �������"-.sFH h����]&��	���M���6�Un��q�c���4����N+�m(�m�rBu�:wd4��qAl:�������!^�%�3���[�O�6T~�LS������u���������n�\8�]��D&K)Q��T��a<K�\��aXR�@��	
�qTT�:��������M���E Fz9���5:#i�1r2��k:vL��������5�2��N,L��~�flo�������~�!�U���G��N�?��q���K��S��X
B�`b2�)#�]t��0�e�Ll��-*�3|�<d���{�5�n��	,@Rr�(��F����G���c�*�����\S�|E��G�#���nC1�Aa+@p�T��o�~.��#�M�C#���wH��DPF\��BOSYP�|8�j��VwZ7.5������5�Q)Z��������q���/��+b���1d���}:�dCx�:�N�����2�Zvm(#
i�v�i��r����pC�+%��y��B��|K��
q��#Ly�G6.N����_���R|R���"�E)$������k������hVvB�!Dn��"������i����O����4��O���t��r��H�U?k�0�M���Tpz��7���xDpr>o�����}|���c������5�0��T�!��]���#�H=���`�r�Z�U��;�K{����8�%]��j&6ad�w<ho�>+Ch����E��;E�+�5.x����0�.*��g���f�7�G�h�T�I��������U��^E�����7��*�\����<UDJ��������<�����O��uk�MC8^���j��>h(�O�=a����C�Hj���|/�u���}_B<�&"H�~"���Q�f��zM�>a���*�A���5�y�����.�GH����.�\�w��Y��kzE4o�,;������������-}Os�'�@��.����Y ��%�����Ax�b$�U'�VIu��	�p%K8���������(�({���%B�_y62���gU,��zR9&����y��F%���M��V��4#I���o6y�2%�.H\�����*�i02PO�������v���ON��Y�A�W0��J�PN<��Dd�P�q��O�x}VM��t���M%��K�qm�gu��n����/*xr�.�R�~�����`�������SE�x�"�Mk�L	t��`����,|��tJr����tIj.7���d�+��,���L��]�*5�e��5Y���/)b�
chq�U��Dj��x+��Fa;���YyINqI����c�OB�2��6d�x�<Yd��L����j���~�(�����-�HG{TR���)���#e�%Yn�����T#U����t��p&5/�pK�����^%�����������P;U����0�e����lV���!o1	���1�N����c��,�e�����J����A������BL�1�>b�S{��P��5C�|VX��R����J�������I�����S��T[��&2m�ZGB��xh�Obn��^[�2��#rT��K^z`��d�(i��zpT�M��7�o�������x���U�Z��W���i��f0��.<��#����L*U)��z���#�B���8C�%!�Pk�R]����nG��T	��2De�T��c�����f��Y��=�K�L��n���{'��-h�+<�\|��!��a(��%������3�Z&��L��9�d�8��-�%�i���	����u��{o*�B�:9��1�"dR<�������1�8��I� A����
<AP�T9�����bb��p,)���cg����p�y�'��
�h��=�t�(�+c<��������b���^�{&�C������
�]�����?8���o�1ai�n]�
[T�tR2m�GB*L��&{`�3�9F�5g>!t����s,[qL�s�Nu��\�Kim%���p����i����l"0���!�x7r�e����~�4��	��������,��Pj�=N��.�)p��>}�< �*-�$qL�s�F�5/
O;
��������<L.+RO�QS�!�'u����p#�&�B��^r������&������r�+b�flX��ST�tgA���E@����H-���N��Toj_�,��j�)��}6T�T����2��j�ZV�B���x ��Y���}d T�=���|C8�XB�*rVUz&��XV�`��6d�H-�#RuG���x��"�^T��������n��f���~4E�u����~l�z�8B��8����V���Qq�����o�*�Q�7�r�lcS����/������
�w�o��������!r#;�afUa��;�j�����zQ9�����R�T��M���+�k/�3�����1E�ew*e�hXl����v�M���	;V������r���&$��)$_�M8g2�+��p�H�9��X2B�{�������c93[���^X��1i���S�VM<�N���4��u���C)���������9P+��=8�l�s����Y\�D��s,������?���S����6�9X��V��u-����Pq�:���vR��FG`}T��H1
@�{��h�U��Tr�jI�K��F��C^!G��I�m�k��1fd�U�8����~P��r�x������q��x��7p�i"Y�dJL"����-,[i��j���r��F�QV�13r�95E���G�A9�JV�� I49�d��a8�+CU����>Go*�� ��1�#���>.umT,�TeU�������n�����G��t;��j���;�k�h�k����A��u�������������=c�g�.����vQ�>.u�"�qn�������c���hd>�Z"�
����d�����	$�vToj_�,"s����."s���%Zf�Fd�5W-K���`z����Q�.��E*-OC�D���
n�-�%0��L����������{Of�����wE*�y�#Rs����o������2����~h���>��0�B��y1�@��.����woj�,�U�B�7�����K��[^������d���4Ps���%�q�PI"Fd>���5E�0�e�*G�!2_8I�s-t|XI�cUy��8S*�"�!E*���[�����L�����>��Hju�����-H����j�sIk�{�S9�R9>�_L�X���[([L�A�3R��f/b��� 
TRjS,hF�P%)���](#���o�����T�A��vq�duU�z�[�'��w��:+�uK���QO`��.o�������B��[
Zvy������������i�����i&S$�����p;gr:d��g���)�c���xg
�pO���� m���qL���F]�������a�`���7���f���9�WZk��������+�]+���Jk-���J�Qj����Z��i����Zx���#��9�Zi�WZ<ga��
+���,���I������|����Te?�Jk����1X/�E�VZ�������ZL���"�w��+-�+�5��Mr-�}��`j�9���J��$]V���l�$���@��X��|VZ~�s����Uu�.��7����<Am�������{�(��A���nmN���%���=8�HU������v��JR�aA=R�mn&����;x��s��Q�.���;8�G�v��v�mQRs�w�Z�U������]@����x�+�}>���[�[g��H��.�pz`�l~��{A-�������t�=+��f�
5��n�{���K ��6.�������������4��������C
�NG��n�{���{�n�{��������y#e9������q�|W�E��r����bY�����b�X9�W��Gx�����k�Z6��t��w7O��r�]=IC�D���
nP��Iv7qmhw*
�2�Z���XW�g�3R����+gG9�T��o��Z9{��^+�3��&��+����y5��y���A�u^T����bY*�-?�|���-]���|W��eU"\��������!r�G*�B�JR���g�]�D_+g���bDX9��:��Y��rSO{h�SU�@��!�[GI�V�n9��q�\RV�(��>�<R���a���������0O���>�Z�S�9�����c��(��+I�]�����������d���mc��b��"�~�*�[K�vS�y�Tt
��]n�'�HM��^u���9��kp�5��9��(��z������Y{�]R��T~"�����#�O�uSg�e���Zx-��`[zuQ�}�������P���Y"��W��KC��h����$��
�I�Q�C��YW���"�Fn��B�6x�F���#U?)�q�<�=^���F3f2*W���/+'�%u�5�^Q�f�h|�6�y���v������4����� 'i���I�Po���J��&U�%%\�TU]��)��5���R�.;�q-����g�D�A\3vR��2��R�T	S�����62�}6vW5M��O�3������xE�9������,���h�����r����}���,��0�����k�M����oL��/C��W���z�"n�f�/-�y�{������hE*�eKk��@��e�N�,H��N�QFI�3Jl���4��9�wz��.%��<J$g}N/%�����6����N����k�s<���+N0#�SK��I�k��u'�SN�+�3�X�$�@��-��`�DX����?EjdcA��daa�2�����CZ@�����,1STL��$P�Z~��t0����4�:��*�=#IgP�$����6��	r��l��Y�$�� ��^�dZA�@N n'c�{�RN:D_�y�x�t�
RE8�
��[#S���13C��6��n�N�KD�Q��e�h�8p���_�=
�7.�XNEqWl�3�|�.N�l�����S{
��gUtZ*��R�������<�(7(����pC���d]��EQ���P��$��iYP�9�x][�=��/Tl8�@�/jC6��+82R�W�j8e��[ Pk�T�����Sx�^��8���3b�:�{Ly��I���x�j�fJ��C�)(5���:���V�p�����e$��
e�R(��Yz�_;���;�dey8$���/L8�8$���������(��j����vH�<�p:���~��_R3�1���<�fo*����o�@�Ie�Z�������JM�#be�WR������n�[�T�FK��i�L;���`�.�y?xf`nE�:�4���J�W���O���V�$�Q�Qc����5k*l���cdz�Al��V	�\I�1����2�K��"H����������zQ��2���B�p���#�J7:�.��e�k��������B���y�����yrCr��T���:\Q
a�S����5E�3J�����ZT���/�^�E�	 �v
��eM��Nlm���,��n�{���%���OL�:A����mM�#Q���a�:�������:�N�uET�="����z9~�C���M��F�N����T�~q��#s����V��"O��PV��	B��ATH��zG���3�O�]�ma�� e�8�.������8�;]���s��F!��g�����t������u�����������I������r[s����	QG��1�U5�F`��b9qz�sR�d���UCPMjWGqo���M���\73����L%�\��"7>c8B��X8�e�����R��!i��;�G��jj��fv/����t��W1k�T����5�������Jp5�:s�j���>@U^�6�u��������e�����9`�He������H�E�c9=V���-R��������w���u����Ct�.��]�nC��jbg��e�Q�:������K���)+5��a��\}���aB��v��m�<T|��xuhL���#��Cx
X3�s:up�v�s;�U�r���/�T#UW����{>3��N<���wP��y`5X��\�#Ej��p��m��{���`���ihsQMWp�����}�.���8O)R�&�z��k����@X�+6_i��V����=�8���yG^w��&7�F�u7}�����%���Kw���l�������
� ��v�����w�uq��T������k"�5�J�51{]�=&�6i�G^6^�����k���-���tZh�G)]0>������m^��-�j��p�^WG>�S����a�)?scj��t�v�W.3�������C���lz�5�Xc��M�BTC�g(�H5�gXL���n�C�%�������a������^����X�|�������.q^w��5�LK����9]���`��m�h]�G*]��[�TCC�G���o���m�c�)�X�a���"�����(N����Co�!^�}E�wX���+ 3,�������z������S�o�:���W�\�����v�pf�UQ�?���-�A���|���d���X���/��fU�����K���
:lym#h|wP9�p��P�7���e-��e�x��x����SoR�&���(���\�X�eG*71��Jq�Tn[F6T��A�h��>����"���^:�]�v��j�xg�4#�1��kF�4���M-���R�4p�VsV����P�;�Y�a�
9c���]�=Jw���W�F7��$�L���qG��J�����n�E��-r�����y��(6�d��E�����������������{�U��g�3�r0�NVu�=����/�P^������?#>���*�d�9��>U�����0�J%���:�u�a��1y)��~-yu+�S�|��EltI `���
KFN����Ju^��������%2a��5 P�a������F��V����E��=�������~M�^a^��-	��U����v�+������u�����y��<J/���Z7uP&��y�1�����������k��cj���$o0d/�_�F^�)��Z���Z'���j8 3�UWb>`x���k����uj�A�������uX������g[}HU>�����x����Y�0�%#�f�-�[���D�6E[2�k�0�/����v5e1��~oX�}�E_ei�uT�Q���1�'(����������mN�,k�I6`�Q�7��X�|�����"{��J�Yz��Y��>�X��p\���~"���MM�.����-*Y��n��BjZ���]t�FI���r���5.�0�)�#"�K�x�W�����)���#�7�/��>�����D�������f\hCQ`�Q)S�vA�i���
�uz��I�Y3��k��i��*}��1H��Q��Zt�}���a*�>�9�b�5��L,@��_��.�tJ�7U��
�3������)���HM���z�Psy��Q�0�q�����|�jo��7�������[Qy&I-��j��������*�4lij�X������������y3PQ��n������0�Rw�-��'��jq^u��z�c��Xq�;�-�|�y�8���Up*���P��o=��u�,���./ca����*���/����4l��#��P��#����}D���-��^���-�1�����>��W4%
��,��g��y���/����A��M�Vw4b-���\e5��������>��n��D���+2�5�K_��04�a���;#+���}Gj�d�_P\.j�F�u|����p�2�|��"�,������PU��pP��~d���dvE��E���`9��E��^��6pv�Z��#����<o>��T�p=,��;�g�;���l�T���4�E�w��b�m|�.��f�Z���m���5gE� �$�5���k��Pj�vIE>>�h|����r���W@��v�Ee��,A*W�&��D��)�����������E�i�e=$8�J��$
M@Q)�F�:�&�C��n����u[u�E����A�`Et�y��6	�mPc�ys�NB�}G����P��h8o���l����Y6�S��`�Mc�����9%#+���9A�ws��.��n�#���S��O�������������Oz�=K*�����w���]i=���_����w���ON��}.��}n��7i���C�����S�S���[����2�������\�)��S��.���8z�G.�������D�<�~
<U?����;�S���h?�S��jO���=
������������}��@_�)���@����w
<y
<�~
<5�+D�?�H�1~����5���x
�4���2���6�s���\s��"\d:���!���0��P�g��N�����v�I�����]=��H��>��~���������������w�p�������~���J?��sI��|
�l?�M���)�s�|
�����6�"���j��%\Rzr�0=�~�>u?�����~�m��O9��>����?C/@�V�������)���S����3�M/I=9Cxz�x�~
�~��y$�������g�����y����??��+T�����!<��?D!T���b4���?�+����J�1	��P1l���Qdf��`2.����2N�����4bJezy+
����P��p@P 4"@&
���$B,EDy��1�HC�!�{Q����r@Q�4P (K�
G�{���jI��BuE���To�:�&���A�
�	�����l��������I�yS�G�p�C�#
%�&�SVY\_bZe�h1�0�4�0�0�0�0�p�>��G(���as���R����
����T|�[�����nQ��@���+���K7���>!K���k��}�;�������[�e�	IFgO8>�K��L���~���;}��ex�� ��S��v6�F��?�{��$��dR�����O�%�Y�uu��,���fE��.��<�����.$M�E�h�ydm��:K��Y�����N��R*3�n�Q��������:�@u�TI�,u�[i�!�����.R)���'M�/��6wpk�����}�cG�"��s_�1�G<�Qwunm�|)]\N�����z��=B&�����0���nCHlx�����x��L�#P�gTQ���!�q`�T��"s$g�c3�&3\Mk��3j��H����VVO;����H�9��f0�Z3&�&<��SU�=P���r���t��j����Y>*1�u�]�����F(L���oO8�E��5���d�Ul�=RU�&�T�*�P<��mc����������>{L�t���������UI�f�Ebil��P�T����N��w�����T���`j�5�J�����?�Oh�����m���3Uf�E��X<��R�|����Pv�!�y��tEaV��
OM�[*{�R��Ie����o�����:�����6���H������r�������YlcTX�4���m�������~�����
�h���c�2a$�Ic��������S���k*��&P���c����������� ��cHYc"�@��^X���.5l%9J7u
�m���x������f�m����#�*��u�W�����^m��2>�;�:�J
�qS[���`&���,�	�	��P�{z�������m�)?��i��#J��N����9�x����sk�t�������gY�p�H���5K��u����62��c(}.�[6�|ar�����	��c�C�����ys7/��n|��N���@��Y/C�
�xl�Od5�J��1�5�v��
(�H�e\$
�ek5��H'�&l,�i�wb(�_���/q���y�_
�0�4����2�W��Q�I
*�u���h�Tv������wz�X����8X��� ��0+�pRUq�eP�.C�;�Y:A�f�5"A�s�����8Z�U_�%X���^����_UY%@��):N����4i��1��H�����c�	�,V	'el���bA�m1�B�"5�H�x:<�	#�G�l���z���^v�IliW���u�T,�t)�O_���7j�uK��Y�g�S�o��Q�=	|O�u���q���v���\�	��|�d�V6�f�Y��2�K;Rs���TC4(�%^b,���~�]��^�W�Z��i����H�g������n���������i�89�+n�9'Y������im �l3Dl%���t�Z}
`���\"5� ��\E�
�0�V�$�h�/��^��+����V�b���\i��^�j�R};����YAV
O
U
���
����<8�Y�����=z6SP ��i'�����fe(�*���@�o�(�E*P�v(�t�)P��>����(P�S�,Y(�x
�s���^;Z��d�T��rP �U��wN��
�8����Y�kwS���(w���8��|_�ZGT��3T �=;g�v2��M�����@Y�Y�e��M���W�QV��9��Z���@�
gR'S��T�l��G���#�k��2��+��?U�x<�h	�k4�hI7�OwZ�e����lQ��f]2;��j���g��
�Iu�
�`�vO�5nKw�����? 0�������F��h������!tT����wk0*O����OF��`_�jF��e���M6��&�������K��b��n�p1�`��}Su�AX�B1=}����T>�0*6``�����uN�+��C7b���,vZ��v=�@���z�\"5� ����Xr�8[���
�l<�n�&Afk
��X�-q3�FK�P<?��T��0#'&+0Z��FK�#N�1���gA73�����*��.�*RQ�n����f,��4��9�w8M���U�>�[46�i��t@@t1��*OBJYU������`��*�B���C(�n��B�
��h��V����09#���U���)��5����0����l��ySw�v#��t���&A�S{Q�e`�������a�'������o���(�@����nw
zU�J%u���QvoV#����� H��1�7.e�}c���um���o���%Cu�}�{8��1O�k8���{	'�����{G��~Q�nJ������]������#��\���^8�p�w,��y8������3^7�������!n�]=��uQ�qcg0����p��������A�\t��d8c��p�����z8��~=/��O�l��������qS�Va�����an��~��3�2������]�q���C^u,�#'�q���"q��f{���q�o�[|w�~�1��(��w(���w]����J��W@(���Rv�mb�C���N?����������g.*%+Y8c��p��f�L�Y�L��I�<<�,�#�����5��O5�[m����>m��)��J���yQk���Ex�'���,g�o\�������U;���+�3���3�HfQ����2(pj�Q�k������3u�e�Q)��j<��K����_��o<&������[��i]�%}��&z+�Q���i]B��OK9�s����s��fh�����S�%^�����ak�h�3mNK���1�����������p'�4���-�-���������v������]�@���]9���w��_�Y��z9�7���^��e���E�Gz��D���rK�Y�k�?@>W�Xk��X^�$�����q o�<����"?�Y�������V�=N�n�����jb��g% =����d��V! ��T��[c���g�����|\����H�$�W@��Wvc���7�m;�����b����a����_`��6?!�������v�z�3@{������O�p�,#�rg9�{�j-�����TtNK�8��c���w�7��=��������������z-	��v�u�x���	�V�v����q���r�����;�x���J��z`yi*	�����t������h�7��^�`���:���iu^����J4�����z��1+�T���O�������t
L~�jy.���DV�~��f��|U�<�_v�f�g0����[o�?VmrWTF_��Z��x�T�2w�����?K*���I^G5q5��_-�[�"M���6����-�S�p�n{� �:_�����X���)�:��-9{�-��*]�k/t���T'g���H���DI+�ba����o��?�O"�_7����x�����`������G5��Ie}
�p)/�)�+?��2�C%��N1Pj2;�}O��PZ�j6�a|��#�]��v�:�3Ad���\����Z;p�p6�Ne�Ii�	��������'����d�:����]���z��w���9m���Iv��H�����������a.��zJ	�s�d��Pk�u� -[�R�g�����76
��l�#'����wp�i�4���/CA��9�Tm3!���b3[+R~[���2^��~��t��8��~�b{s')��#Y�Z�bAHU�d��g������[���cTJ�?�c�C���
����I�}�W���d�Qo��I������b�xh5���gx
���`uT���i�������q����_]-7&�/Z-���:��L����JNmC'���A2���p�����eL(�j�G�J�U��>jR�>�.���>�s��Yx�i���������'�x�����+�0!XwE��=�y�-�R��U����������zI������#
����=��H�h�H�x����^5��t�a�N��'�s�P��H=k�?���d<Y�0%�
�
whrzmDv���!}qV<~X>��^�,��r|�W�Hxx��t�H����T���'�+m��H;��;�J������h�e���i%i�����������	��:��;#��]���c���jc%��d�)����#�|��U���'s��i*�i��4��{"J{�el���J��
�H��6��/���4��G��h[~��1$��6��@��XN�<�R�V#
 ]4&���c ��@>-�;L�V��ia��"?��=���!��(�����|�G����g`S?p���)������A�����
�q��d��Ez��A��u��T0�U�/��5x��l���0����,��Z��'H����1���+*;3�(����f�s�����S8ER�@>h5���=�#<����0q�D���1�
<�d��ZS�`I�?�]}-qE��4mT��������_{�}�2��GS�=�6qN�s���6�YM
h+sA[Kuzf�`���,"���YT+ih��W5���lSR@����OK��T��8b�V}�&?6Ip3��K'A�������=����8�5�v���`����q4Ez��]���F��L�����:�����3=��|�I�QN_�c���5�<vL�9%d>p1�:����RP]	B~����+a:D��{a���s0%��+����0��a����Z;������/9�D�7P�6��)#����O{
67�i?#��� �H����=��Q���szj���6qO�0�����)���|%�q�@3{��-�-�&��)��q.I���;��iCN;�<���g�8���q�y��A�hu�rq���B{q�&��V<��<\%!����\6}x���g`�����S]�@�k���H�n!��Y���Bk�����x�s������w�AX����G�4
q
NV��
�E��r�Vb�i���k(m�|���4U~��D5K���<�5�d�)�����gz4����U�x�pQ��4��y�����0�|%�������t���A��O
c}�U
��&�a����rt��(�7� �9�S���f�����b|�MJ*�@3k�f�����$~dVeH����M�'����A�H7;p�
�
:M�>RX����/D�J����r��g�%Y�u�.��������.D����,_g�F�:�f ��Sgs�@�i�	3E���wHz&m��S��VoZ
��r������A�i�<I��:��MO����:
�g+�,&1`��I�%��
�	�q
�|�j�D`5?���C~1���%�w���Z�P9R���N�2�k�{��Ef��#�=y�FQc����p�Q�$�X������$���4�5�y����S������h0���hh��w��$�Q[��3�,]X#���IN?�����$g|�&9c�H��b<���mMb�9�����k��|X��������]���$K#G>����I{��dV4�IlZj�sX���&��N\w���&9�Z�����&A&J�I[���2;,i(U�Uk
��-
�������!������v���n��p@�������<h7n�u�a�m�\Q�Z�F%�����(�d"��qKNh�A��[��r����QU6�9kN��i��!�!
�i��(7�������c�v��*��n����t�C`*u*��[�o4w@u@���o�<���c�h7��.����h7������������R4w@�q�p�G�h�k�5�=����tx���E��~���E��T@,"w�H����aiu���"r�����a�{XDZ�I��"r�k��Zy��"rwZy��E�����"S���]����I�}1����EZXD���@��Hc���gk�."
NV�l�hq��nS�0����E�4h,7�"r�k�5�V@�h'~�rpj[������ZDn
�{��.�����.���E�������
;rM���B�3�)Ab�"�BB��XD�A��`���
�"r�I��X�D�.A���������,)����X���W�5��k>	��xZ�;��@Jh���r��M�T ���<QV�!\�L�{���� �FfJ�a���Y7�(�����
&?)�k�*�AyO�p�2u|���H{����E?�~���31��0�}��9C������@������nT�9���(t��A�i��r]�R5N��<h��D\�I��]�o�N.Y�5��a��8�*���RA|r�aQ�r���J1��=�����M��2�����*MF��-�O�s4��������b��O�O��|��Q��^��,�{��V�����H{j�tn��Y�F��L�*�fC��&�M��'���V8��de(�gX}F*��B��m����~�?a>g�q��EB4N�5ne�l5��*����_���e;g�O�,!�uiEm��=AeS_R�K���N��}�+�������Z�U�t��7����i����pW��^��v��V�����urc�����1�����G8cX��= ��0��� vp"��{]i����5���5���+���u)��Q9���n���w�6����b��KxNh�\m�Rb�0jIs�����0'�QN�;���0WR��/�� cKH�rr�0A�C��c�Y��yd������"�a�}��N����b~�)*C���G �/��Jc2��W�����a)^�=	e��%��T�-��i�d>N�in����"��Jr2ZI��c@����9pXKV�S�Q�����k���~����U�9��jx�Y���&���)��s�����f"s����}�|[�o����������99�M�<�K��W>9�I0�;�B��I���}s�l��j*������n����9q���8t��ss�\��E,������{����l��q����P.�Ha�&N����O�v&�Yg���������*3��\�Q�q^��YP�*4����7y8@iA���/�G���|&B<�b������������U[j@?�ooB�u�-����6p�\6-�a���P`�7huR�@����^2������e����;�j+p�P�� �j[9����N�x�4y���i_����~�0�-�����GO?h����M|\��aK��Od�{��t�m�@s����f���_���3�p�M7$`�
G���[�rV��Y�"���r
���������)k������4��6@������e�1:�BT���RR��~�0��@�x��pB�d��F3]y��������q���`�H7hr�M�
'�M�L��P��V����+�K�u*`{
��r&����=�PV�Z_��@�����l� �%���� m�84�\�P�y�B>���]��X�^���57�,�9�j���-��5mB��r�T�0b�:���_������"8XEC�&�[�b�2�k��4'�%U��':�%pZ������*M"��W���?W���U5�	����
�VS4Z�rJc5)�R�h�i�c������7�����}�"�������3
�����Bh�A�d'i����
�&���\syhM9Z����U�_7�w�����p�1fDx��>]h8.�u���jz	�i4Uu]����k�/�|�5F�����7��i�"�J-�#�@���*W
&_�yV��R�Ze�����Z'��0�>�y*���mU��:�w�M�����7����IRH�����SO0�v"*M3
h�M��@���	�$�p�Z�(��jJ
�0i_�-&��ReMs������s�.?���Qn�-W=��{�����5��������9���*���W�e��*g��9��*[���s��:�%]���Vo`�Zm�{�z��	��:.��X�.��	����4_����I���j�C���y��`E����i��(R#���i���H*?T��|��S������n�����u��`+�*$O�n��d����ye��s��h5��!
d<-=�1����S@���k&D�^<Uh<5��G
�h�i���_rV�O�������c�����S�����YA4{h�����jZ��
���kxv[9���5ne��L���f�����Z�%�T��D@�Faa���NKY���5�
9�+{��@N���*��F�B��]���~M\P��F!��NS�
p&K	���fh�f�V3z��?P��Hu�m�i�N�i���y���0��Of������/��h!�~K�.���
�:d"K5B���a������5=�j.F�J�w�����*LC�PI�
fj_���o����=����qN�4�L�>K�����`b9������wz��gk?'_F0�Y.F3���l2,
����7 6w#(�[=��9�S��6���8�:����i2���������v	F���>C��.��8�x�\x���N���U'����\Df�!�3���6�,��XU@���T�Dr�	E|�1e0v[��F�-<	@���""�B_�wq������r��}��o��N5�u��S��6b���U��P7�R�T�C-i
0^'�P=z�K��	��4��.�������������	x�
�3����}������Q��	�W�D5���>����%�&,}��"��� ���K����P�G�
��<R�Eq�}}�5���L��g��H���)m)$�J��F��������K���S��Y��"��U��x�{h"����Cof�&��Ba�����4N�
?M)T�8`yM_T��y��j<���6�����/C���)FQ�5�bO���Lx���S>KP.��)IS����<-(���"�/>56�w�_4-�49�bO��fo-�������@+H�������y�`�6?�/5r����6q�y���~z����E`
j��z%o|��r`��N��-���y�Z�����i:��]Z,9
��D�1ZF9{{�	�=H���V���>�d�i�S%`_���Q��(c�[�9��_P#,����^3@
�&���/�����4�>M����O}4��:�Pa�����m��,7�6�k|��G��E�����j�|��I�b�����"]5k�L��6��FK2_���H+�K�ai�r��{gloh����N?����P�=l:�?-���m|���Xw}���p@���o��M_(�aH�C�X�2${g=�h~����!4�!�����d;�~h���NZ���5x�1-J�����ua
�	�����/o?yt}(ga�9
��/f�W���.X��K��5M��ViD�4oA��Z=d63���J.e��@-/��u������1N�0�rc_M���],�q��L�J�&�X��d+���sI}v�^.n������`{��u�0�������j����$)����?������k&	���
v0�V�'���4�����j���!|,��Z����T8a
��F���2>/���'h%N�xDu����qo�-��y�����	$���@�2cM
  �6A�i5��U'
�(ni�/�B���xR����Po�-n��r���N��DZF�1i����g-���p`u����x�������8i�Uc�p��w�,h,�o���U_|h�M�[_���a��b������s�m>�^4�-�~
?~����&�Rl��h7-�:�=����	pv[x�I"i���}$���d�G]l��B�EfiB��|�&R�8�v��_*�N�����r��~"�x���	(�-�v�rC���+����ao���/���r����;�r��i���b�y������/����z�f�T���e��P2�_�%�R���^B�K���K���%�"��B>�J��Bz�=K*�����w���]i=���_����w���ON��}.��}n�)�G~
����G~
�_�)����S�S��S����������r����)P~��@�]�5��@-�)P[}
�Q�u��@�Q���_��}�]�����)�T�h����hO���S��hO���=���4�S~�K~��G
���}��@����W
���)�0�)���)����~<���k�!��)0~����=�3���,�)0�|
�1�s����1���_����=�f?�<�^?������������z
���i`���~���~����c?��O��c�#��/\���������������O����q.a|�x�=�������?�?�������)���lzS���ynm������������y�����������a���a�^�xj~
�z�����e��!Fp�c�s�p����^��]�QyD�\|yf���p[��|�����������*K�T��J>x����!
�T&�6�4��]a��EtW��apH��a�`H�:C���`&&�����36-�"L���)���Ts��*
�F�D���A� |�D���(���1�HC�!�{Q����P(
��%��Q��n�ZRE��P]Qc�4����	�=�qC�Ac�#��#����%3Q0W0]0c0i0ob�`�hn�q�����c
�J#��CL�-���f&��f.@���[��u�e��pxn7q����.�v=i�2�x��u��.Y�0��0�&�`�(�k�	&}������=��~V��h�K��R��@K�2Y�,�(2�5����&��%��6�[�\d
�/3_����]�C
�"�OC�P$lI�wJ���q+7%��D_�EhoJ?���D���A�uf������L�]�cG�X�����Y�&��%[/Rn#��YS)+,����b�eK������QB5*���.Qv�����=�"�Z�~�0C�+����5���p�8S���%�����L�%Q�Yg%HQ[4I���h4�s�kH�4������1�/��\.���qSQ��0���JV�a������HfL�/S����#E*x���,�0��u��-�	��E�L�<�~���)�����R�i�_�\H�:5Ws�~.��=/	�E�Y��3k�n$�4����e��T��)rTp�=��(��jT@�z�4��K���65�U�B7�Y5/i6����d��j^j7K��%��
��f~��q��H������9�Nr;�	0sK���l�M�=z���.r�j�mM�W���b+�Ja��:i�]���L� ���e>a�:�<o`S�z`=hE�-�
7������[�r}]�|��������D�c��M���b��b	���:X,�4�%�j��mK`;�b	�Db,��K�x��m��hSu��%����OF"��X�ig|���x���C�OJ�t�%��wJ�}bK�gp���P'��G�4�����\�f,imk,`��������%T�_�@3Y�F�����"�vWO�����$�b,q~���X,��!��5^�����D��$�L��}���L��_|C�^����%��"���(h��1�{Ie�%����f�l�NC?W��D�����X���K�����]:���BO������=�>�5��'���t����f3�dtZ��������/���	N?->ZA,�eF�:B���kd1�Y�f �p{"^J��|��S]e���k��yM 	&�+���Gm�BU��h�H��MG�g_
�}���&�����6�o)�����p�<�IVW0��.�>m�Kcwc�����h���U� ����h_����@O�1q�6r~USi��J���&�����n�/}��/��S�o�Cs"G+li�;��q���Z]�h
��:�z�L�qL�c�"����6[B��W���^uZO,GZ
����g�������	�M�8��4y;�<�x~M��������(��2���4�t�j���$�~H�z�RX����l;J��t��O"�h�j�	%���!��73�gV��B`!,iX=����������0	�������0V����v���#X���L����m5�Z�^�d�}]����S�o�${k�	&��n����G������;���CT���v��g��$�3�_���k0#\����E��\�<��UVy�;\�p*�����y��� {QN����Re�<�Fe��&U�m�� Y)u��hTI��� )U2%�i�����uI���5QQ�J�L��g,�]�5�)GcaWe���5���	�u�+{W��q�k���m���ML��me�<�&��}W�LE��OU�*��Zue ���KRRe��J�T��D�����1.�wL���I�[����
pUw��t��p���.z_G�H+�&�����$��������]�	?#,��w���"0����X����*�=���k��{_���8��x�;w��������<y��:�"��k:gp�6�p�N��h�}#m&��������s��wW�@�k�hY�K��6�Se�T�`��48w�Zq�����}�����3�0�x|4�SsF;��q�;����L�Fa�n7eE.�����#�Y�
1�i��4����N3��r�����O�^�.)����j�,���s'
��UW��.��l-8�]�gK�b[0#�?�o������6�w�{%��"� ��N�.@��:��p�s�x7�@tF��Q������::�j4y\m�z�P
tq�Y�kP@�h0����a�Xb�=�`ltF�1�D (�h����4i�i{0z������O��~�flo����u�~I��4���Nz�S�����	�U�?��Z5V�0��r4X���5aE�Ll��}dBt��,bg���~�D����]�)9�Vx��5:�i�f:u�C]e���nQ����uk��JE3�8h�z��)f8 (l��j;����^8k4q���s�(���9�
d�g�u{H!��1�������"�����S��3���~�������T������q���/N�y�q�z�"h�+m6��1|�dj�:�f.g�dk�:u��4�]�9�9'�-R���A���������"�/!���1G��j�|���>����eQG)���&D���7iW�����1�r�Dj��,b���7����k/C���z�]�n5K�y�'��Q����N����y�6*B���"4��#.+�FW
G������	yB
G�g�f�����d���Au���yS�O����D�-���������#5�L���������;�pI���_�U�����V��i6�1�-��ZTxwW;8�@M3��a�;��{F��~�GU��uL����?m��/��7W��,����9�����\����"��%����.<3�G^MA;��x�w���!/q,��+L���6���x�b�g��4��hh?��9X��M��l7����s��f�p������z>�V�\�����7�uE����oje�����_l���_D������;m����|��s�t�B����e7<��G6��'�A_^JE�2f�,�Pz);�[_��)�;8L�Z�������Bpc2����+On~��+b\�d�b�/�z�1��F��6*���o����JI��u��&���N$.���I��4��&��F*�;)-�o�����d�+�?p��X�T\2jkCOD�w��W��4�2�[Db^��n*1������j��Y�����
��l��<��,�������}�<&�/������A��w:������j�O��r������T��}���b�$5��J�Q��KV��S��G��$I��J��v��9���+�m��������XF�x�� I\����]6�X3��K\`��V���2�-��>��T~��������
�,�?�e��O�3��2��Vy�iz��).�����K�;����O*e���8��\S��H��e��#e�%9�������D� ��W��>Lj���.�U#F9�J�Yjp�T\���S���?F��{w���T#^�e��@�		�1��~x�:����u f��n|���
1Mg����5O��jC�R1����K+�:�������T���k!���3��#�:������j*s��L��84��B5������,��]K�Qr���X��^��:�$	W�j�����[Zs�����DP��-c��uS�4��f0����/���v%D��vS��M]0��(�t��8C�%�0lpZ?Lf�Y�T9�(eu��e������)g���]�����
~��wqg�v��N�����	8w��}�-`��z�����s�5]�
�ns�G���Q����sIuZ�cFjg�~����=�7'�D�@1>�3,B���o����mL���o�yI� �p~,lr8��*g�">�������V�	��D��y�*��O<�p���a�uV��yE���Tb�[�(\[�Y�w�G4s�.n
���{p�l���X�j���j:��rqB�.��D�F�����#Tai@R����C�Li1�R�I�f�Nu���`1��m��8u�s����G-&��M��)�@�x��dYp#'�(��pG?z��9��>�,��-��z�/���,�1������]W0BQ(��t.���9��4x�4j��~�>/��������>�X��-��R��m��:{I����T4��>�w&.�Y���#>bn�������;B�w��~�E��R�y|�����bY����Sl�l�V��#��7$�����5W-����g<�^��J���@]@�pE.����f���������1)�$�)�CGze���3+W!������@������R��PN7uI��x�U�.*F��
�^hidE�N��=����5�/0N��Ju�P�lg�5/��>�(�*�W��[f�����Z��gE�DI-,��D,O���1���v���_�rD�r����w�8
7�3��Wg4���wre]�h�T�B��n9�nW�4MKh���c��
/��ST|�W%�yWN�%Rq�H�d�����h���&���������h|]����������"���Hm�����_+�{�����|�����vQ+)f�n�e��x�Z�$�9��O�xk���j?�8{��Wa?�-�A5�pA�S-�Am��w��=i/p~�'������R�T9�fe2@IK����YgSO�62��u�E�o�p�D�lmi�W#��!�(|��c��j)��?n�S���N��0�1��=�_&���,���;�FW�t�P��'$R���|o� ������
�XZs�D����-��3NM;L����E���t�m5*���jr��(Z��\��T�����@} ��G���}`��>����Sf���)��f�0�Y^�IC����c;�5����1+���c����f���aE�
8�s������ap���=:��������vQ�>��NZ�9��M�NT�����w�����O�D'�>�+u]��BL����Toj_�,"s����nW���J���tfGd�5��P�N��+���s�V��E*"sG���	wx����U�����������X�����3[�F������R��PN7u�4��Y��_�He���Cc�G���/Xq��kf���q.����j~���Xv)���B��>�(3zi�a0����6��FCk��@�i(�$:�k�F����_cc�����Q�^���������q��#��t}���I{��j���[�����L�h`�^T�lt8�:�jX (vn4��8�4:��
�BH�X�R�Z�rb��^���h:���c�H������g'� *TRjU,���^"�5wm�c2v�L�~Pe�i0Z����WC{�.*�9�f��b�{�Q�R�����.���t���Z"A�$������[
�T��%2�WR1>�J�^H���3��)4�E{���
���./��7|�����h�wl���c[Do'���1��G,�u���5��;�1��+-�g���k�5��4�P�I��]"�"�Jk m=WZc�4YZ6������NjXi9J-R��:e�Jk����>�u|pr�9����g�[�����R^a�uq���+-�Xi�~��F�H��q�5��������q�5���XYF4�i�U�4�Pv����rL�s�c��5c����Jk�\;�
VZ�HM��Zs2�/��QW��rL�k�5z\i��>��[*
e��J1����A�G��x�Z���E�\��c���;GPl��������1S�������w�T�|�N���f��JR���yvQ�Ee ������9j?���T��C�������I�����w�e��Tf�w������t�yC�3��g�(D��[+[������[��t���H�w��f�w���;����;�����R�w�`z������cF����U�8Z.5�������V�w:b�wN/��������aw�;���^+��t�\cn��r�k�c�+���M�+�������nW���2�)xB]9{�U����IZW�VO��r�-������r>eW�$H����]+g������g��a��8�qQQSR�R<"5�����cN�k��-�z�����%E!
n3�j�a1�_Y��:.��Q75�W�������������[=��l@��������G����U�F��c����)��j/�E�V�������.7����x����c�[�
��s47���������I���Q�H|NC���?����y�p����q�s%
�H���A*?e���Q�A=,[IY��l���f��^������2�y�yYI�*-�v���@T�?!�Bl7���ZI�`[��\0`Dj0���)�N��\�������(G9���2+��onq�F��v�T,}������������b����������m�n�)Q�l3�VN/��,�W}��^]*�D���a��9�r��\<ZY��;�U��Jn\KM���b��zGj�e����	j����ri�{��������	PU���lm��}A�D����+��u?C����1"�������>��z��eU�78>�
0��7<8x�Ut�C����>K�Z���A\�,-������-����Ui(�H�~�*������>����Q]��W63����}���^9'Y��Z���y=�
+[D��t�P���yr��A���b�@��\�V���|���U�}��b�b*�H5�sI��e������������;�
�V��0*�����$�p�2v�����n��(���Qc���R��v��z���I���L";E4NK��6�_��N����5�9�c���a�uj��:�(��u'�SN�[Z'&.�t$��HS�0��$Wa�P����YW����E�"����D��?'�	S�Hv$$Ta6d=��O����y`$?��� A��EB���L"��IH4#)fN��M���6�z�,H��T��A�!I��T6�|H
!I�������=��J��^^��1� ��f4�������R
��������L�.}�#�.��X?7���:J�z�2���&�:3z0�����S��l������rEW�~�?���>���U�e���	c����_z`ah��N�u<����E�urj����[\�)�!��[���W�.WC��6d

��!��r��������)B�V�TJ
[~G������8���+bj�����5Y2��
W��Dn�y�e�T�Co��9��C��p^G��C��=A�(��\T���.?<������-YY��zo�
y3EJ8��������)�	}��J�M��#�KhAvI"P�E��w��7�T93��@#4�T������}C;���]��b������_�WPg�[b�����+\6�~4P�R*y��ySs�Tr��)�-�2$H<!��Y7����L����n�]��!�L�|.�J�d��������Q��NR�"P�����^�I#�� ������#R�����nV�}.���E+��[T�U1��q��yr��*����C�:Q
��q��1���:����Hab�:f���fY|�(�v�K�U���mWY��2��T��-6���C������2zKM��u�Z��[{}��xb$�+��n�U����!���f��#�����H-4*���@�x�)7>2G^��nYg7"O��PF��������cK����E�3?_��L��4��x���~��d]bg����5
q��iL�=%�j�`W�kZ(eG�C^I�(dd�Fm��(�S#��?D0CR2`���(��+�\�|���q�9)�U�T����*Y^H����{V*�J�����+Mcb'���q,�*�jKs(��][��5���$����tc�lY���#��hjVu�@53L5+jEk�q�qMw5[gnU���T������i�����oA58�Q4�)Cu�x�H��=b]�8��c��`��������t�j�h���U�����I��6�P���v�E�*b
S������0�3ljG�bjG�u��}_9������G#�����v�ZlN���J�����k��.'���e[�V�<���|T=�����sZD�F����J���K�[�����wP��y`�l��m0�*G%}���4���]�u����h��~Qm2���m�-�]�Q]r"�kr;��5J��P��#�|����q�#1vv\���I'PU���T�G���K�UJl���_������j�6L^�~������#�%�2��=��B���R�T��a��w��X�=�-��p���rnV]�Tu>�F�[�7�i��F�R����;��3n��~
���S�4%3Gqu�D�)�-S�]������1������h��j�I��k!�X���	M��T#�L��h�x�5
���<���j�+(�����-RK;�\�Ni�����h<F0-�j��pGte�����
�,��r��k;�H��44�z��44Lm�qC�G]}�����5����^V����P���CoNCy�L�#��k�x�#]�a�������T���:�6x�xjx������j��}�J���vP��S�
e}�j����S�b�o2m�pQ�\����d��}AU�l�kA��������J��|9&_Q���(�����RI�:������i�*#N����y�����W[�
����l��������5�*b���{v���j���G�)�_yg�4"�1h�2b�|��Dsm����������m|l��DY��f��J�=�D�!uGMjt:^�?���:	*7���7U�m�+k�g�u�EN�1t�v�(6�d��E�����(��r��{�;�W������)]T���:#�����/��c4|-�+b�����o���OU���{�s���F�T��=jK���u�������t������������%o}������|�-[z$s�xt����#�0����B������Krw+���y����F�[��Td�&n� �9cK�/�����-W�RF���u�����_�\w|�-��+G|
���N����?����l���D�uV�{�jS7��
���������H�P������zs��,	6�#��@����T+���U
��m�������_o?�,�J��0�_�aR+����$3Y?��������_3�����-2];��Q��]�<�w�{��C-��(K�UC�Um��tc?Am�Z,z2�����eun�#�8�����:��l�Q3-0��6SW�
�,=�o��u��FP	��}RQ�Am5��4����5�(lQ�x�~����Q��8xV	�5�V�#��Vl�8���f�f1���2<w���O����zS�x���m�_!h�W���u�����,IYl�^�,Ul�y�w*��e�>�����\���O{E*�\�c��k6�k����n�y���y)�_c�&�����C�-�a��V{]!��L��U^��1Qy����V�v��^==U\St�PS������T^��3�����Wo?���u�IRK���xgw���`I�a��ls�&u��83���h��EE]�`�@T��4&��2�/2����:���^5�8��Q��<�=����w�[����q�S�oouY\(R>h�1w�,���H�X���NM@-�S���/+8p��"2�F��+���n�k�eRvdL�������Lc��	}�k�hJ`f������� ������P6�G����e�����M�������n��=0f��"#[�����A@S��U1������V���uQ!L�	�����j���5��f(�M��~,z"����{9�G��e���������t�������!�rod�H��dw��,E��������X�:�m���X��,`�V�!������l���j?5����,�Z���������Ssv���s���|�������i������~���G/��f����(_������gfFWq�m�����J��+�2m���'Z�(;Q����3R����&
]�,��RWS��N�B�L*`�R��Q#���lg����uM��l���el6"'�:	�vE)����Q].d��@W�f{E����k}�n���(L�u7g!+����)����!��9����9�R�������s7����]������{��T��-���H����z��J��������'��������\����>�S ���+?������)�����S��a��{������r.��r����
.��?�����R�%�V�����\���������C�=U�[$��x�H.����w�p	��z��O�>�S�������$����O?���<�~?��������g�U4>���3�i&���KJ��$7���y�3}�O\d��{C�t�{F�O��Gr�h}�O�[��G�����}��w���O��k?��>w���?v�����9:���O��~=��z��?������W����������~?~��������s����3^�z$��}���}X�w���������������_��<��������d���_O��>��{N��=y
<r|~���\�zX����/������wy������#��?��<�|��t���S��g��?@�Q�2�������
��.���u�C��0T�<C�9`���`,���?�(L,��A��������T(
�F�D���A��|�D���(��Au��Pi�7Tj/S��7�090Q0i0�0�0�d��b&�����������2�1�9�1�1�ah`p]a@`L��E1D�,������a�`�p�P�M���5�4�0�0�bLaXidapa|a�i�a��\�t������������;�x�aMC^�X��;�'��	_��>�3���A��u#:8X�_�����!P%W�Q�1���x=�|�]��F�B�����O��c��#���Sr�$Qg�O/�fd����
�M�j��8���H;��	9K��&�]n�&'��B�Y�.��#�M�+RK��2�)kVTo�]B�%���|�%�h��:[����YgIm!��p�y����U*3�n�{N$���i"�*X�T�M��R�*�h3��_��U���w?����9����1�dX���u_�*�g��0�����������10�J����P���`��y�p�W>���*����^��x�����F@�
&B>Z�g��DM�t���p@�F�D��X���3jn�HM���]vU��h�M��3��G4����X0>&*�w��k�K���P;k6N���>S	��������/����P�7U�RW0�K'���_T�^�R��k�PI�:��{Fc$I.��"W��fK�M*SzO�b��&��R)f�EcilU����n���S:��8��
�g���cK-�tL��Z���4��
j^�}�16�L��\����"h��=E�n,�����I�)
R1j�6��A�kZ�~he����o�&��%u|wxu�m2�yvM�� �&��'$n.]m.��6�:����5O�kil#���X(���6��E/��
������6%5U/|>H������b�@��6�@������EM���6�4�G��"�@��^X��^���(��5�R	f����h����
o��zv�R^urc�_���^m��2>����$W]�����������!�m5C�k�����^��_|�l0����{|R!�2�~X��"U���xM�������;;��k����q�e����9�`���Yj�{��%�Qv�md�Y���L�F���������;�����`�<���,*�������]�"���2�uB[��EMl�o�b���E	�+ �5b����d��X��Gd�	�N=�x0��q)���eDN�[fnB��4��c�O{��E���
���T6���K���1YYp:7�Y��`��6���4u�FX�EW�S�nP�v�Pg�����e�xEtV��Y5u��L���n���������m*�0�-�	�FZb���q�)R(�����u�Y�b�J8)c+��Gd�e����O�L��p����8/���/;�$��)��x��y([j�>}:u ��Q
[�i�������~�GEd1�����xN'�z��'��0O�O��2[����������HM�K��jPo'f��5t�2?��P[��W�Z��i����H�E^)�>g<j��`��E�$0*Y=S�Q8�����$���Z[���j��6C�V��N���W�1h/G������s���8��V��xv�v<k�/��^����Y�5�HT��ylF]1;�s��S��e�w�A7�JEh��U�J���K�\x(p�R���e���P�@���e�	��}<���8�6��QW�h���	���"����;8�Za=8O��#���3���M�-Y��V���>#�����t�Zv�@���m+�$��8�'�_��j]�����5{i6;�A{9g��'��N �=�i��'���n��^�x���O���6��N�<��d���5�	�qV�h_gR�W�'���g��<2��B	_���D�5��?U2qz����h��FK������ED��j]qD5P���_�nF]�B0��e���<���x�`�-��C�(P��Xw7.9��Wx��<�Q�g
I��pQH���
0�*���g��n�2s����pa#�p�����IT
0Rg%���:��vm�<y��}S�/#������>y��T����\�h�.����Iweu{�F��j����N0���W��r�H+���#���%7�v�tZ��,H"�f�����'ef���M?n���ByE�=�`4I��F��
*��v�v��,���? P
��Q|�o���}��
e��%X���l\��W�����m1C����p��8Me�Fn���Py0P�uR�T1uj��^�h��auc��"uGj#�-����&���N:>gD�V7�����Z.j���e��"CGT���
�����"ob������I�j�5C���\UA������YP�>�)5O���(�0^�	���([�6�:jx������
�5���T$pN0��A�����q1��j����u����\{����Ld��p��c�k8��FuS��rG\Q�9��"��)x~�+�Y-�����G���p��������9�3g�<�Q*���p&�����YY�YA����W���r��H���
g���w�������=�Qq�E���8�y�+63_�����ly�S�p����z�_�qS�V7��O���3��h8�T��k�E8���D��C^u���t������#�8g�bj���p�
c�^��c�e'��;���y,p�� ��d���Z�6��$��p��p�c�t��b��+R���p�O�����
*C��^mo�{�<�Q�~����������/���x��_j�����i�UM���Y���yQk�j��3(��q����r���p��rS�ir{��V���&�b��l&�v��� ��
��GTw�������������-���J�������GT�4)��~H;�E����o��O��E�;@���V�31���tO�U�i	�(�������"�X�a��X{@���������������f�d�v=�4�w�Z!���H�9�Pg�[|K /
�7-��?,���	�u�����4����"${[�K<"�f�@�i�����O�2&>7��&�e��lD��1=��0�V_��!0������K=��@.Z�����3X�b�U9r�H�:!���K���]~(���{(�) �����X��Y���+#d5�S���1o���\u�d�pL}�#�F�K�2Cl��m0�nV�`M�����O��v`�������� �g�TT��}��~�7�����"�M��H��h#Z�U��>A[�U�B����q(����A|��p�=H���3S�y���������p�is����������-�A`VXi2���h��KU���NK�F���_�/'
Lo�hi_����&��9-�f^���J�k�^�{:��5��$�D�=���S-�����X�/����~��?����\zL������DV�abI�����t�s�ew����4*�~����]Q}	�!�n7�*p�c�;���r��J9��	�����������N�p��d���6����-�S�p���q�����?���)�6+�����L��Jh/<�����f��%���E�{��N�z�
�&g=���V���L��������$��;�V�_�O2����y/� E���^��F��s�����sH��T��t)�?����4��R�����
(�H���������j��Q��~��:��W@y:uc%��w0j��a���:eX��&?�������C��[X������]�no�����E��*Mb��4�w���4�( 5����4��3���(���>@��C�|���;-u{���?�`S
��8"0c����*��\��'k�m"��G�����g,�b3[3R;����e��1��~�a�yq*�������c��G����1��`A��NF|�h�HM|��1��9W��g%���%�]���
�����E�g�"��+R����o)���p#�-������U�1jf����!�[6�[n0ju�� _��@�fU[.Nh�W��*,�g�d
�q.��B���EI:P������c3O�l-�>jR�^�.���n9���,T�>�hq�����+:O�;}���^��II�+B����j��D
�Q��
����~�����nSG[�I��D�mU�d���W@kEj�ok��W��4��T����~�>�����s����,:����+K�
w$hrzmDw��[�
�j�0}��L�����8����p��]:S�86��V'��m�
Z"M�����|����G���B{��j���i���jX���o�3i99$;�-��|��ajmV���=<�i���p�iq�C�<���m���Yf_�&�����i�eo�4�i�U�)&�i;�4����j*�"m^�&?��dE
�}�;��l7y���0�4���sMrTc���:�c}��i[����K��H=>��)�q��J�F2��VPN�"_I�%{����U���H��1�NLa�����"2h'[��%��[���ho����T�1�hf
��'����k��vM6�ZR�����T��J����h�@�D�����-����#)�����mS|	=��t�n7p���.����=�Gh����m�Y���}�u���4QmV�<��������o���3���4 �����IM
h5Q����~�0�'��
�����7�s�/��@��Aax���kS'����c��kN?6���0!(��2B_N�B3���(����m�{��d������q4��@X���7�jw]>���`�d��l��l�����x?V��A9}�'�����:{B�|�V5�:���������q$h�[dR��,�9�{���{�������(y-w�.9����e�ga�:��g8\����������]���1M��C�t����9��/��<�BSC���i�N���3d\wZ�A����3���N��%���j�����zKf�7�)B����!
���O���s5�]�!n�8��4�yq;��D�� _�:B9��V'� �������=��<\� X�4������IM�8c�:=��<�� �5(����"[:���8�S	}!
)4���/���|��)mx���G�4
q
NV��D�F[��1�laHC3{�h��rp���x*���n9mz�k���Qn({��@9IN��[tE�,q;�� ������������D��A��Mm
4
!n��4&+`�+��� C��sL�a����g�W%n����
�yqy�Ci:����/��5x3�4��m�Y�
 !s���5u���q�@�YD���H��w��Y3N5z��&�9���j�FD]�����<O$��i"[�h���:\I/�XOA�i�%����$�.
���c�`D��@���@���:�jq��r��fc��o����Gm
���s�Dsi�N&?�L�(i�;�E���kH��Z��1�k�W\�7��!V�2=���C��1v���1s�s"����E�L�Z�^�@LM���0B���qh�g�{_����`kB�IF��$��B�tSs>�hX�3Y����J�`t��&C7�N_��3(J1�5�aM�~�5CvE����lt��1�5����/�3�%�I2[h\�(!K���5��s�\wx�5���I�X�G�F���H�k$�dHf`�@��s��:�e
k�1��u�����T�%��r;���M5�����1�I����?�f����E���I&R��"�[��y���Z�a���hV��b:��<�������j��hb��m�@�$��a��?
{���.Z�4KU���: ��+z@ut�0Gb���X"-]4D9�A��[G��M;
Y{}]���k�Y���V�OZ���I�
L~U����������p@6u@�r�hV�7+7�L���:cX��(?�8��+��]���&��:��:`�����(����S���|G�n�E��~�^����������5,"��VG(W�UgY���J1s�%_DXuiu&-�����E�lj�A�����"��Ol>�T���E�l�"�}!������@���YumHZ�E��i;�tip����d�F����m��-	����W��c���6"
 ]���E�la9�������"���E�����ZD���12n6�f4&��"�P�������6iq9'������l�'���h��]�,#�^�H��4���pe;sX<no%��h��+��\�IH�H���U��P'��c���#0]�{��V����3�����9�kv�

�H���h0�����N��@pm�(�)�ZQ��4!��p{r���a�S�i�����E��hG!V�����5���,\�F����-�.V�7��P��P�L��C�:�y��h �����T~�.��@f���V��z���XO���\}R�aQe���e�7��P���k$c1�����}!?��Z�T����o�|�^9@����'�il���.�����Z-�1�nZA_�r�����ti�Q�Ah��|M9���~�Iy�(eNh��	��^+"$+��*\�H�i���:@��5i�Oin�V������,�V��[%���>�F0f���=��8�C�e���0�����T65��x�r�W��6��`��"�f(�.��^���+i��"�DC��u�M��*{���r�V�KW<��\f�
7M��^[0�S����
�mh�����~MZ��$���n�����Z�����}2<Fr]���zd��S�������Y�����Z8W�_F��,�����F��0���`�4/����S���d/�C���|����ja���_$�9�;&���~*8�u'�y�A��+���#��,��i�������2V���?��G�\�s������	i��F��h������T��F2�0����[iA���s8Tr�}�Y]b2@S>����Co���<��o�
��jx�Y`=��$�D��G���t)Y����l���!!<�?��6w������]�Z�<T w��q�0,i�������QX�}��5V
eU{�v���Y?S���C/����h�9M!'������\Mp
��h�@O�g��<d�������������J��`?�������~wUXUo�b#_�7zP���:Of����}���@3�}$�<�/{(8�q:���
x0� �����=*|�����S�}���%�u�-��{[K��eV|�� ~������2_�(�E���O@k��{�#���s�z�����;���/^����o*im\���04�o�M��_�H����.���/d:>�k@�
.��@��6/Zn��f=�Dkj���~��/��S��m�=��S�lO�^������W����nzxF.�9
2j:�!�F� �z�)�EC?����/��ub*��RW��~����������������0W��z/�`|���1�m
��P6�PNg���68�F������Z('���Nh�`�VN��u�lO9������ciP��������y��i�K����Q;@����m�%�6���^�u�|�����-�
f��B�7�i�5�bc���7)s�"�3����U������,�.�?iN�����������m!4�d8��:2M"��gZk�����Q�8��m0k5�B�SNi�i����Ek���r��q�m�m�}�#��w:D��C�4(��p�
���Yh�$��}
�M�5�V�a��\Q�6�5(�'���4]��/�|�������6_o��&�M������7P��_�L�*�mjP���}m4dV�NsC������� �P�v��V�dN�EV�j�p���Y�7x6�i������91t8 -�M�&���o�w���IRH�T9�(tN�*7i�h�P
E��8uS(4���yS(��P0��P�I��l19�B�8������g�����O������j�N��SZ�+�3����x�~?�a��Naaicn9B[���V9�;��V�J�����=���*JM�O*J��kNSHehL���u�!�(��:.��X��S���Ui����dAV�v�=Tb��"�L���C�a	>�j8F8B,j0[59�
&��VG���f�
��Z,��
%���x��<m�Y��������<�r��4�@Y
�l��Jg�"�x���`���!�����x�0k5c�*�	Y{:j�U��y8������E���J��0��|p��=��w3�t�V��`�nV��UH�7t
��n�'�z&��@��\Q�u���L�l�����O����y��A�k�����mSlz��R�#{��$�������Vb=8+�bkWo��n"��i�VAz���N�):e��
h5�Z\�����,a:)��7;�=.��;�0�����vg1��F��r������$[3�������x��7h9����C��N��yVs2bTZ���X��/0�I�'!���N��p=�����\��6����2e�)����V*C�R�S�1 ��Z.�b�;=�������/#�,����C6��DU�7m���S=/���*�8����s�H��4�����By�S!�?��S^�C{�]�IG����	�X�V�:S.��*2
�]1�3�
��h�bi_5���5�,���*�
#��K\�"X�PEh�^��E�4�h���q�k_��YT�C�aa���3��L�`�x6�
N�>�^l:���0����h����gJ��nZ��7�'��OM�-+���<U��n}'�	�'��
��sA�x9�g��<R�j�i
����G��h���\Z%�n��V���nP��%|��g��s�S=�>(
z`�w�0������Sy�vf}al,����D�	�������u������J��_�����r	�/Ap�f�T7���U3Y�������� �.����v`�W% O3�W�)��N{�#,���t�7-_<�-��^#L�k2�9��������0����h'�M�@�rN��������W��"4a��r-�
���� 'i�<�
�y����^j<�k��c�n�yh����2��M(�9��
&y��[�gv��d#B�;���I���g�4��]X��(��������kU`y9H���V������i+��mSn���2�������&���j���h����&s��i�>�����@�dU�
"�/k_4��dF��M��0��(A
���S�������4��w�E?���"�����N�u_7�u�0�u �V,7�:�m��
��8
��>�����/m�^���������u}��	���2�ab���B�C��Z�!%�,�e4��s�sq&���/�����N�����-u2��a�
W5���u�&�d��a��u��/o?����,��>Ga�Tp�'p!�9����S������
K�+�R�4i���"�z��lf����\J���Z^�����3��7�J#��[���&�c��O�1N}�X�G�I5z�&�0�r.���;/7������run�0������o���,>�u�X �?��2������F[��	`+ �Z/7�����Y�Y��:�ax ���3��p���Q��z�'4���pUqg��cvP�D�G�8�g����� �>O�+!���i`<iE�H��X���v� ���������8gN`i�C�P�a!���B�
�����dM��q�d��J#`_"-	#�N�-��*������-,���b��u�x�%�����@k|�X9\;����p���=��N$<���K���
��4C-������t���hqv�������&b)�������c��m�tab�MP�n>r�����l�
>�D6b�b�>cuNib��A�$M�gq��j��p��v��j�^�3��
���4�"���@k�*�Qg5s�`{�?�J2�_,7�S������`��H�W_�� _4}SW���]3Sf�`/�K�/��������_B��\Bx��^B8[��B>�J��-���{��T��-���H����z��J��������'��������\����>�S ���+?������)�����S�S�<����<�/�<�/�<��(��S�|��@�S�5��@-�)P[}
�Q�u��@�U���������>�����S���)������m��@�����=���4�S~�K~��G
���}��@�����?���x�xz�xj~~?���5������)��3���,�)0�|
�1�s����5������~��g��G�O��O�O���{��ZO������z�i?��e?���c?��O���S`��O������~
<r|
<�~
<y~�t���S�����>}��r/#�~
�.���������{�}���~?��������?��y
<r|
<�~
<����S�S��������4�W�+�E����_O���_��]\$������(�]�������!��T���zq��]~\s�Wk�����zJ���B��I������?��
��.���u�C��0T�<C�9`���`,���?�(L,��A��������T(
�F�D���A��|�D���(���5�JC���P{�gB���D����d���I�	���t�C�%�(�+��LcLiNoLuL{��104 0&0,02080>b�>�Y2s�3��&�f�&����GJMP1�0�4�0�0�0���0�b�a�i�a�a�a�a���|�ua�YW�<�w�cH���`�i���%wk9`k��';OF�\S�d�=���M3�mz��jK���]������mK_$5��2-!e�DU-y�\d�k�K��hj[�!m`�����~X�^BdN�S0�2�%Cn��@C�V�H�&�B�/�@{E�9TF�r����0v����	�+�0v������	�R��r����J�H��$�-[�en���Qu��u���7��X�q-c�M�!��fl^{�W�
Q���Q�F��E��8�]�����z�-Z���h�"��q
��f�{;]r��i�����-kv��mK���[�78
B���4	�6r��|�&����hf���"e.���,�0��y�[��T`��Jw�`�P'�.k0����p�����xW^��:5Ws�~.$�m#h�qZ?�v(�v�m
j�hZu�?
8�H�D�d=�QI/IS+�.N3!��LM�,��|j^R��!U��d��j^�Xg��d�n�D�3���Y�*�mQ{7�$���1�����F}`
���m�V�d��,�����TVt��\����k��W�i4��\���:�������z�5�z���A��rk��?��'b���G"��j,���S�%��z���K��K,��h��K8mH�M�����Ll�}!]c��t��%:w)/ta���mbK,�w�-���G
`������NL���V)��P�K,��-��c��%�38
�O�kz���#l�����.�/�a]�����/-���>=��{9���]����=��r�����h�P�1�8?���,�pZ���c�.;��*;{M�������K��t�h~�
�N��1"�K��L�6�,��������4��%�V��U�!Q+l|�%����K�ItZ���s����t�3�;�t��F�hj�1l��n�)��V9m�\�v���}��.HL���i�Ex���H$w�g�U�k�eA��D{��sU��1�=/��"��<X?���y�/�p�C,����6m�y��H[+��~b��`��&�=���I���X&�o2��y*!^_���3&X%L0��x������VPE������!B_��
�Z�/���������2&v�����ENkpd��)�h��/^�|�_��'�o�Cs"G+���Fx���Z]�h
��:�z�l���|��c�
6���-!q��+{���hr�h��Uk,9�����]�}q�N��3Q�9�!<����Mr��$�.`��d9�4�T��s�I}�h �UN�P!���$�h�<�$����&�q��2`�n����73�G*���7�XrZMA|�wqO@
BX<��`4�g����3up��X8y�Q��d8S��]9����M�l�>��+�������w+�5�C�]�;0�U�������-N��vM���w��g^jP������E:>��oK����z.MoN����Aa�G�4�$���p�*�r�h+����^�d�<�.�t�<'C�4�6�d���@	1X�&�dXV��������J���i�d2��%>6'�bT���YW�����S���f�a�Q��]����m������UnW�`os{��M�
ik �����d��i>6'��~�d�WV-�� 	�u2�x�P��m2lN����$�F��q����u��� �e���w���s�s�E�}�����&���&(�&��_����[���0|�}���F�aq���-��sW�xs�3�kM���s���v���0[�Xp���<��_��S�c�T��vsb�d&V��)��i�Q���wQ�>1-�G�~�SENR����<-���"is�S�P��3�):w��D+��������d� ���������vu����(�C�Z{�Iq�P&�vS7r��u���f�6����%���~:����)W|�rB,�	}����Ow�j`�h���~`V���
My&
��fdVu���f��^�����s/����� ����u�:��:@���������,uT>pqb�a������Z�J�:�*�o��*��|}���C��@k������lO@���I�<F�h%��t�����M���kpT���N�d��~�flo�������~m��C����N���N�����*����t�TS+��T�qR�`|��Y���\�Ll����|f�Fyn� w��#Q�0�s�;��u�7������M��#�t���U���-*��|V=����-� f�~YAQ�
��d���`9��u���DN�C�� N����0��_��!E�^c
"*�*a�ZXq������!����~�G�hE�>6��J����/N�y�q�z�,����z��S��-AF�����0##g��aR-��@idj'2���r����pC,4�W�>/te��5E�K���)s��W_�#'��	�wH/�9-_��X��o����VU����s�������
!r��(�r?qe�s�n�����?MO�li�a-���QWlgE�=�%�4�t��Z5�X�Y<"8i@"}N�T���2z��������/�_�=2|
�"��~Q����Uq��9R������x.���W�bl ��S����/d��^)�D���pbfQeG%L;<n��>���}����gu{�������F5/{k�x���T�)���iC���������O�K�
~G�p<"Q��3��AhrK��	��;�y��
�KVe����R�]�a��3��~f��)���`u�d��"��h�-��v������'�d@����|u���z>�zY|���B�`��)"�D�c�.�b�����_LJ�58�ySeg��;���c�����F��w��1tH���K\:�_^JE�28yl��{��n���]C�A�����Bg�h��m�B�=!��+�&_y�:��������BO*�4Yw�#�
S�O�[_?�����\�J2�/�u8��r;�<����������O\#5�H
-�������d�+�?
q��$�����P���j�n�j���%��h)B�rQ���Jlu�u�Zb��%����QA������'Q���!x��������������`��2�NG����Q��0�,���-
 ���znZ���a�l��$5��J�q��*��,0K�>El7Gj�w��b�D�.q��[���k���Jm)Rk��[I7��=��q��,�1��+�9����F��[�xk���	�J�XM��
\����@a�F(;r�hEV���������2���C�
�'�H�*�gbEq��;�f�I�U�%-�(�WI�#5� �q�6 ��)FL�Ihi����]�� ����d����QvB�����XwT*�d9��E�J�{��BL�1�>b�S{���#*9R3����Q�|������J�����E���^��j�kz������TU��,d:���1G�7��y9�-g��@
G�(��K^z`��d_�'r]c����i�0��5��A�������N��1����y�Yk3��S��
��v��S��5�����O/�������3Y������0<�c���H��)�$����Q�7��ijS�j�4k���#�����6qB'TcxMNN�wFKX�������;�p}�q�fnZp
-��s�5\�
�ns��I��|
�sIuZ���&��w��|�cxs�w�����3,BRO���<����2��|[�`[�N|y0V�TF�#U�_����� =:���	�n�.V���_��onrM����d�c:����F�3���t"^�{���o���X�juqS��s�4n��o�!�4��7�d
��.��\&l���TI���bt����������]�#Z���m.�s�Nu�oN�����9���4�sj�Q���(=�����fx5�^�S
y%����R�)Y�,/�0�������I�Sv�%l�S����z�W��-��r)��Q���j|�������i�!��+�~�t���qQK��X����<Q�n���Xh��KzH��p��	�[[�������E�H�5OQelw���Y��@�u�ZH�����:�zS��e�^VsO�]��!kU���Y�K����5W-��������w��+�[�F�@�F����#�s|B��N����$<�_e%Qn��6d�@���^�^|�rR?c��|QQ3C�#Rs��!���~E�u�����~l�z�8B��(	�*):�����\$=�E�9R����lG���kfS���4*��0�T��Y�G���c����QsJ�.���e�r8�}cc�����Q�^�������jZ��g�Sp��"���g!�b�
T�+���2�	C��#�-xA�������*���T*ky�CD��qL_�X��	)���8�S�����(|]����nec�(�"�N���pw�c�;��{V���U���]��G�����e��x�Z�$�9��O���Y���e�\��&�,����u
����P7��s~�,�����J-R���A9�@�{�lZ���R{����h����!T���T�4���WH?
_�������������d���R���pT@��r^����T��6P������
�@���?����aPY�[&j^���5OHt��+��(8���>��_��"�B�����t���$��i:��dF�E��Ri,�}��L���L��c����4�����>���9��xp3��LR��������]���V�v
���5g�Yk�������,��6��Qk�)�8��3Nf�wif�����vu�G�/��)��
52w|"��T���{����,"��<AF�5�u�8�y@����"2��{��"2�C���#,OepD�^s��T�{��`��a��EW�H��j&���npcE�S�e��wj=J��2�������+�id^��T�2��JmZW@9�TD��7�Q,^��W��W[���z�8��cX��)�f$��.j��]��MM�,"soi���}LQf��g��V�%��74*��
����K��2��I�����h�B��!�c:�F���N57�%�,4�0�6�L�w��s��!�{���Y���-G���{���[/*�4�(T��:��Zt�Kz0�����R9>{���%+'v���Q��
����#���3�O����V,�MJ-��H�*h�V
(���0��G���VuRT��F�Q�����zQ1��5�����[�i��<*�*'��A=���w���g��j�E��[��}�]$92�WR1>���@�����i&S���-�+L��
� �$�O��l�2�3�W����u�itA���-ONl��PX`�����>���{�0Z�5
VZ��J�A�J���-|kj;)���K�r�+��T|g����
�vU�c�[�WZ�k?N��(�H�J����jM�9�Y�ck0FmI
jYj�����
+����U\i)�J����:�WZ���VK�a� ��1X/�J�53�Z��Yi97�J%��i��X����`��5c����UWZ����QW��j-��Z�WZ
�W��jM���r6����J����:(��\*�e��J�'���w?�H���W2��:n���1�����-v�;GPl�����[�S���X{����g��7�nsl��������<��&�h�������k�i��s�~P���Y�����2�������E�>��<��T��S)����z�����}>F��9��{�(�������R 2��W&5�`��@�swp5��N>���u����u��N5��g��3�W�[�X0�=�������������y�y��;���k����z	�c���s/�����r�E��X9�������`�r�WD����b��5������� �Z9*���5W-��+�A|��
+�^4������rv4�M��'<I/q����r�^�Z9+7�6��^9�/*U�+�W��r��X9;��G�_�z	+i�e\9�b_�����2�n�/@���������/j\9�@�+g�y���+])�QW/�n��l�Jt#��{A�h��{��~��(����1V���G���v��._W���r�U��gu���0��T�w��c�+�������-G������R�(y�>�������_���Z���<�m��J���.x7NWG�UXf[��J�q��.�/Y�E,5�eZs�e�W%���&��R�����90�����������nS�^U�_����z�~MN�9�����l���-������!���K�[��[�;?P_7u�Xv������lw�7��2y�f[�n�9��8 �����Py$��
���)�~�H����T���"�An�{�����B��;/���)Je�E>�q���a�����x�c���������1n�^q�/H�h��6�yFC������>���<v;�k6����,�{Fn$U�78>�
0��7<8�U�_��-��TG}w+�&p���Z���|�_��g������O�t���[&I�A#���HU�I!uy��A\�,��2��|�@pDLE=yV���o8e{0��0t$��=�L��\��
�q#������$�rSk��4�g�a$�(3��fE;t�<I������/��r�]������oI���)�/���T����5|7Q3���j�f��m�~�H� .�8b$�����.HR��X2J?p`�(��o���P���?+����R"���DEd�Lu������^�:��~M|�#���;��N-�Y�jK�y�u�]����g��p����������r��
^��k4�)�o*��o�N|�����_��T�g�v���k8,fo���<\�x���_����b�L$�kx���j��o�|�#:|�����w�2����{�.<���|���kG`z��)�v^������-�a[!�"F
�j�Elh�������
���MG���dR��=�P_j6��w�7���6
_����A�!|e���"u�����n;��jC
8�����P��Zo����{�������0�]\'�:����kf!�iGj�������3�/[��W�F������
��\�����b��`p�!P��T�����N��$��8���g�luN�>�{\f��c�u����A������zu����n�����~!�d	>����!�7���O?x��/���y�����!�]����M%��X���v���2�!�Z�4��9����$�;P-�v�4�eN���F����K	5�U-�����.�~���*����uGjUT���FC�����vX.q�+�
��n;��8��Zu�?QG�Tr��k�����0��=j����4���&��w�����mT��U'���K�2����_k�]�������OP����k�Y��L.Y��K#Z����Q����-*�j:
����e� $7�/BT�JQ1P�������"}�U������lF��E}�b�*@��u<�-��5����:��*�����)q��xb�4	J(�0��(���pE�>
�r���j"��:I]jU���`	S/kn;�����F����0�
�x�"r�!�2��Cq��nz����l�� $�����4�;�/����#��uuE��K��^���
���M�
��aA�����%�Ip����U�z����Uu���l��Y�Dy!-��U���,��o��w,>��J����W�p����u��+��'����vU��:��j��@%����Ss�]G�C�b*�%���Gc|'a-p.������K��C�]_��%�+�
�_��^z��v�9��`Ob��T��9��eY�����_�N5x��Z��oR96U?��,pS���nC%L�-����E��L����#�"�b��v�;Kx��&������l�n���y=��~�B�R�6�QQ]��y�
bG��b���K���B�8�P�c]��&�����B��������,�_mU>uS�[X���j��:�G��UYUX!�J�
(�H�����<`��Lu��#����._	��ke[�8�~W���Z_���)�����6���3��W@�Euep\���+#�����Y��4#�k���u�C��b���1�|�w��D��y�y�G�uq�/������4�}F^�`.Q��t���k''#�ZS����v�@��"���sAw�w��Z�T����R#�������b���w���=n5����:�������A��%���6wmJ�j��%XC b�?��:�[����:o]��|j�!�5S�4�'���1�i�������5����4����*fs�&�cHh���u
���L^�r����?���E�1E�����������j=ng�>�;�q��=��x�`Z���q��ie�q]�x�7q�j;��vHk��V����w#�n����b�G��v\UW����D^7�P������N��-jE�<�c���!sla�]�+]��!���`,q�>������U3aJ|9���xZ���(��Q�.u���P���$�n�)�#�]����m�"L�{f��I�RP��NL�z��wP�l�����7���f�k��i
�����~��Gx�`��n�4r�4d8Y��w�e��D��������x
���A�z��Y4D���o����w�y��_��$�H%��\�c�YJoj����I����^s�|O�e���%
�T�����r������������||���6F�;�k�_�C���d��m:q���f�a�����_�d�R��"uEm�����fz����#Uh�F���>}�����b
����8#U����R�=V��'�&������������P�=+�_r���P��2<�)Y��u��;��!\���"g6�Z��Y���y���-�!�l��p�$j@����?/�F5Sy�T�����nz�$��@]�)�y���W�9����u�8�����)�8����d������n���R������
��Pp e��T1��Z���$�3���f�m�9�nV�2�_�F^/%�j�����[�>V����Y]������Bc���e/�d���r����t�����[�>L��D���x-�����Q+Yif1����h�����F����u���K�z
��6��K��-�l�	�����ee�]uT~�Z�v{{�PW;QW��h�(2�������f�>������5���E�������R�=����QD�u��
����(9�P���^������3�w�E#c`u�tL1�����%�V�=��V���Y���s�=TG�.���#u�7�9x)�/�T�2�^}�8���1_�@���Z
,vj�*KQ[h�
�N��u^������qZ����S��jm�!d�5;�5R���mFf����sLa����M�x���YQM�����VW��LZth�-+��	�lE�����[�zj��/��QS���iF]������_����8=�F��$K��6��;���`I�a��l�Ec��F������]������.��&pK�������}����Mu��{�
������{�K��h�>�����K;��<{��T�R}QQ���6��vZ�s���fX�/�����#=��������p���ETg�HG�f/���K}D�t[��>���{[��4�S��_{ES���ycd|�(��Vgd/
`jl�ouG#�����2Y��<Jc
]�;�'������j�t
]�����0f�q�ha�0�����%������.�����xyH��F�������l�+�D;���B��&��.�G���](?�z�~������Bl����*��a��zBJw��W8�`��T(�+r2�7�M�H���"x�;��;�����y��bo�[���lk��6~���:�q���uv������uM#��oZ�Z��K*�|Q�o��������W@�E�x�������U�����3R9���Q�4�����/m�-�$I����6�%ih��PFE�U�o2I���1��Z7��/�.�,���`E����Iz_���}R#r�6��.��>w$[��E�;��^���+���<�5�����R��kGa�_wsNN�x7gn�����{7���n�#O��cY%���|���>���9������������i<WZ������������G���_9��������}�O�<�S �����S ����G~
<5?'�)PZy~_Fy~_Vy~��|/O��Gy
��)PS}
�R����@�)PW}
����}��>��?��o����)�T�h����hO���S�}oO��G{
���@O��}/��}o��S�����?������@���C�O��O������������>����?�S`���e>f�O�9�S`�����_'�?�����n�����k�����?�������������m?��O���S`�O���~
���!zF���p������*:��py������������]�����������-����<������.��Z��g$u����p���p��n5�Fn^�����K����_~���m���?t���s���0�p[W���2�P������n~�
��3���?������?����P�qf�#����oj
��&���t^�B��=t�&�c���f��`2n��v���C����a1�6�j������A���A�(X2����4��Rt!�i�w�L�v�����A��X�dP8*���oRK�(��kj��zC���0�0f(`4h@`L`X`d`p`|�};f�M�L�L���:�=�����di(a4a@������������*�D������I�y�����`������n1d�b�E|�*N��LY8K[v���s��6�����e��mG�:�
+��Wj��3�eG5���Ss!���9lY��"�����h.��y�9^ZC/�b)�l�mo�Nk3�$E��������m��h���i�
��&'���,'�k�G8+]:~[H�|�3����S�,T���C�p��&�@Y8�^�Z��*o�l��_��K����e������D���c�1�I�s�`�>P�o*�X^8�^x�j��(������������]�{�������E��v��i^*���/b�E�h�F��rkK:��u����gC{E��z����m���l��iE��K|�B�W��8����4��b0��T�����Kg�N�Bl�0NE�t��Hm�vF�U����Z��l-��J��H��5^�&�5s0�L��������r�O��B������d��.�o�����C/.��AC���M��~
	�d+��C��k�J�k��Kx���Gcd����%7�4���=�s��@���u��c�}!��5F2��N(��y���<zqB]fo{;�5���8n�.�{�;���I���Z]���P��5���)�-3RkW+�T:�)�>*��e�L`�y��T�0*�G�0R���Ke�M*k�z��C�d����s��W�os����<'��q$|��K��%r���COB
d���y����h��(��|�������
���8'�6%�+^�� �1gs"�m����@��^_����} �6�4������#�m�|
��Rs,kOqc�?��������Fp��s�z����
��N�z��R�:��%Y�s��������#�D=�%��Pojk��9�<!�U��;u@����wO_o���������.���	u;���p_o^*������z�
h�7u���!�@�D��\�����]���E��j_�������_��:�e��e���P��9��-�7�����c_��'���9*f77/S,*�����������/G]
�xl�'���0���D�������v���rn7R����a��4aSZT�C����`f�=F���{�f���7���������c�+/j����
Ke�NJ���T�RF�N����,�~��9�0=��"�����)�&�<�A!?���!� ���E��G�v��Q�$��7��Fw��%[��W�������*����u��J�n�}e:��_y
����za�8�h���"e|���pD>���,:P���:�b��
�s�� �������5-�7���us�^8��="��7��uc��x��2�S��x#�����$���M�����xG.�\��| �l������
�r�K#Rs��r���Tt���:j���J����r�����[DG�9�WhsFR[�;��QzCn���rf*qp�W�z��$�-�d?=Hk1�nm b+������6��_Y�H�3�>f���G��������Pko�D���r�X��u��mD5*��`3�J��������sT�7vy�Z7B���KE|��A��'��{T��
��H���U ���{`
�LE��h�*9���@�
��H�,�lS��K\�N��*GU��@,�
d����,��P������R���*�DT�+��*a���d��q���n���YS����J���S|�Z[T���*��/g��
���7u�[�h�TQ�"\���+�(+Ym��EMQ�b5�@�^��2+�����v!C�����5��2��+��_8'{�r�\X���e�q)�#��y7��j��B%8H"$� ���`T�<���m�*�3����Q�uN9@�����P��u0n�p0">VL-��q�
�����5F���``4�c���j��E<�;H�s
'&�;�p0.5�F����Z�.���]��q!�*Gu���.#�����u�t�2Q�`����q'��q�y����������\���,v����^�
}�����<���
�K��T�le��W@n���k���������FKZ(JV|�</u������;WV�` ��������4w0N��{T�2����������������`��o���4��h;�6$��5���&�/0i���V�@����br>e�2��0M����.0mA�V�.��n(��g[�`���W��)�qj;u�Dj�T����ea"("C=�PpT�����W�Ml����k�����-��cW��:��%��3�?�oG;\�>$)���
T�U��([�;6��+9HX}@���g�p��r{���-�������X�����g��k�]2�����\w����ug����)�pDqG���Q�M���3�Y����:,GA{��;��Nt���9�3����;t��K=��^w��
w&�3j����T:,�WD�E����3����+w�[x���5�'C���r�S�l�3�����3}����c�����3}����V����xS9�6���]0<}�6�~'NQ�����;���8�;s�������g�Q$N����g!b��[�-�;�]��w&v������]��s��U�+ w��w���mb���;�g��XR�(+�����7���L���e������+���C�N&��������O�K��'_<e��l�O�J��	.�Ei/*��+����Z#5|y��I�R�l��o\��������S������m��������	��N�����b�-�.�������WB;R�'qt9����7�iE���~��-����E�
�M<�D6�Z��;(��������I�jn&����V�4����\�<�g�.-h�%0�WK������Yrif7D��d�%m��B�MK3�K��"�uoX
w�/����B��5@���Nb�L������������&��@�UnY�+x
���t%���W��������z�VW�������3�g	g��U�u��Y��1:C��q���e�]�/8E5`-����d�b��z{�j&U��[c>���v���_�p-���G�<�H��n����@[|x��`�K�_|���a�j��X�R���c�t��8�����D���
���]:c�"@�i�T�mDy��������������c�u�Mo��9��0��Ym4G����S�J���~�u�x�������
_�������r�j�V�v��1m�����1��h}��uT��.�)�2�6����3#���O:�R����_
V���ei��YYW��5�U*����=+�+�������4��]u�<'���$@di���tU��|�Q��^v�n�g0����[7��VL��f�����h~������w?����������H�:���������i����:��n�i���m��&9�Y�s?��u>����b�6+������:��-���!��*�����iKOq�5�%Z6i���VMW�����ba&M�������lz�q+j�ACN�	%NIw�O��A�����Ob(_�����=����DF�7��5)�@Mn�O�S3��(�Hu������j��������	"���7.1�q�;�r���lm�f[��f>������������!�{�|���[{���u�
�.�3��Ur�4�f��g�`��h
�24/~�[?.�p�����_��`����Vf;�8xJ��/u��##�{�/6�\�����8e�����
�4/h��_��4���6V�|~���i~I���_������2��}�8�a��8���GX9wN�<03�d���xlhyr��|e@cGjb��������4[����'-%A�$����� YQ������>�y�����ts��F���W�-� ��n\cS���i������h���s�
F�.��dF��9����ik�0���Z�Ms�KP�K�����A��Q���]��v_K����d��������[h3��j��zZ\6*I��8tE��S^�W�07�twE���r��O21r���+X��d{�������������xr�3�[w.zHO�h�H�H����}����rw�R��KV�q/j��o�����(+4*�u�����1�����z.����A��H�6^����4|�l�O����:l>mlu���v��i�D�9��p*���P����,+|��V�!~�E;;���T���l?�X�������t���Wy����=H���l�@#��"�X���X��mS�l���Q�i���~�3�@�1b�;�=�v�)����j
Z#��h�~z�$�%�i����sv�r�o�Ne,��V����60,m���>1X�5��0,�R�hY��rG���y�=m��m��IC��������d��f'HL`�J��#7�-3�~�A��st�5�l��i��f76����DoV_@sk��=)��n6k8Dn�b
��Tl[����P� �����^���?
�_pA�9��T
�/���M:�q��d7pI�4�m�
<�P��_�WhO)����A��D����5!"C���rh��@ �����Y,��%���@��p����2�'_����vK+im�_2��E������� c*�)�(v���Z���&��/<�� �M�|�mY�=��:<�/QQ���^�b�,�l���XkB���i�Y^������k��fx�����t�^�~G;���P�
�Y��`�_$�4K�%�EH�e���� ����d����O4�2Xk`=�:�q���N�����!��y�Z����sZ������	��&{�`�@�=��?]�F��b����I�ERK�����>'lV����=����5��Q�C�)�`�=�Gok��(����Y��-�Z���C�[�rq/\��w�w���\7�6.�k
4�ypq��7<N�_�:B9�T�:�
���[�
ih\���*sq���r���!;����m����������:<.nEZ{��x-�nlT�TB[�Fe|�s�V���up��_���z����&��d53� ����^4����.
5{5�a>�r���H�����������������;���qq+bz��rX0U�
{wq+Bx�������[���V$����CF�������u��N��!��O����z�fb���M+�����[q'3�����i��$�����|�XA��1���U�� �C�'����J?��x��z�H��Y�r��V9���c8�u�h2�^�=�T�4����+>l�[�U���/M/�&�������i�fZ����mz����0l0X#-�hk3��z���f�'�}��9��#un��
ic��-�I��f��CI�{�-	<�����)���]�B#���Wp[O��~�>CG9���b(t�A�G�p��g_��e��J��l��*�������|���S���N���}��I�&i��&���FK7��������T��F�5
���c�W��$x)�k�c�JW\���(}�Xl��^W���+�5N��Y{�I�M
|I�-��&q�7�����&i�j��7�;n����&iM�ND���hv\���O�dV4�IXn�G'���|��5�iK����`�S�9�����K�����TC,�k��^k<C)�o�5	yM[�����'�=M@���.0���9'�����	�g�������3��9<P�����a�3P�h�-�@��~�i��	M�w���v�L2=q����L��t�����ig���Z��O$�=L2=qn$m�
^�h�N@	����a����j��Q��aMyX_m�W9�V����F����zf[x��3�<c�G�P��+<��}' �&���y' ��f�nbW.ct1}�aA/0U�z�	���5��	�����+����ZD���^�R�"�N���E��C����VG(�E��YV���pNZ\D��
GS��ZDv{���n��"������?���E�,"�Ed�����<����H��iq�}_��Ed/Z7���"��i;���t8YM8�8pZ\D�f-O��jdw��*�XN��x�+J�z��E������ZDz�g�7�����4�����������������ZD�������K
�/0{}-"{��M������"���E�����%,"]*�$��hn
>��mY������xAF/:R���/\�clV��.i;x�����NN��e����i������������Qg��eS�]���+���Y���-Z�'.�s��ws�2���hB*"��=��w�Otw��&��)VL���f��s@a�2���o5�j�v�0�n�O�.V�oZ��\��NSi����"�/
�������L���[��	x[��`��p+�l�h\O�����M;����Q^m��K��D1��F�^���:�x�
��2<L-��o�'c46���,�C��@U;��z���e�`\�����'����]��r2'�&�����HTh��	��������cz��$�@c(��-?�r�1ZC�����V�����:�E�����|G��5J#.�{��rv �iu���H��
}F���������vxV�#�Y�*{$N�lj�)�k�����H�zo��S�l�W���h���hXe���X'��H�4�6��J���*{X��k���q�/�����.6G����?�`���0�q�Y���z�(�B@6�HuK�����_1�_Kx"�W�_;�F-�F�Y��	�q�0��{����	��A�C<|���M<r^���������*b�xY$���}��
�����	��W��Y>�b��	��K)�:
�e�.x`�����{�����b������=��U���������y�����4/�|�,H���l	~�Y<��
8���m��PK���W�3T������O�e}~2���8nnBj�4"Df���F��9��F-�&�(��r��Fmx�K'E��X@Z�%w����!����jbU��v���C�������h�������Y�;��, 8�f8�:^4�@O�����g�g��6����4����M�i�PN�U�dKsz�"���2O����#S'j��fy^�3���|K��m�����.�s�,|����~�@���<�?B�a�5�m-U<(`���pj��[?`���N���xT0�K3�Sc�lJ��C8W����a"w�B��8r�r	m�u���l�e�PNm9���7mF��Z;h#���ptdm��1���p�����h����;��6k�,�A?`��wkL�u��lw~O�g���}�3�$�8T�i��=����F����i�]p�f�f�����8�`[�.��R�`,Y�a�`!&my��
\�v�������j\m�h<i��TO7h=m�tW�\�mS��fW�o9[��N~O�M/���9x�~�9��8��&���]�����AB����|����%6���T{~'+�M���26�F���:K�,�:�+��[��UmB��6��>�FVl����� m�(�:A:[�J����b��S������C������8-T3���.�&+2U����Dk
��izx[�E�����0���.Rs��#m������z��V�9�a�N��x����f���/�PL����2�����h�I����Hs-��.����,�V�5hvt�|A���u�C�|�����i-��{Z$��%�&�mr�d���^�����KGE}�ez���|�o����EXE->4�+r�|%
��w�ZK����I�h��y`���'N�L���7
x���A�/��Z�M�����	2�h�p~(�v�&�!L��gQO\!)"*u7��(Z��@�� P{�Z�%P�����S���l���YL>`H����m�q+�L������v�'���:����F��W^q�z������s���Z�:d}�?Zu�_i[Z�+Y��:R)�����^m���������1��|�.D�_���a�J����fa�w�j��w��,	��a�z���Z�:��E@����^�z����y���b3���5��in�P��se�&�+f�t��SA��h�$y5�����f��I�����i����LV����e�zQv�a�����Sg����[�2���f�]�W����Ja�\p]�}m���fO���j|T~3{���=����8�
&��k����k�m��l������:#>1�`��0@&�s n|b&J�$�s
HVu�
����������uN&�~��z8M�n�0p��.(~�F!��NM[���R�n-W�F�����A������g�d�$X%7-�����E[�����k�*�����������Cu�h�K�DZ��W5�m4��tKOR����g�f�N�h�]��:mh��i�5f�-�Kr@\���5�������l��[Tp��j��N��sJ��p��4z���r~NfFp�Q��^:w7 �lh�
m�W������M�c\V�8�+�Ug��6�i2������?�H�I���F����H�R7�i9�������b��h��[T���anQ�|U��#�{�$�[&������m
����bJ\x$�%���sX*�4�_
����_��Y4�Y���:5��i#z]�1/��G���0�����M[�H���c��l;����#������5��R��7�O���<C:�d���V� @T����2��j,�N�X���fh�I���\�-r�BQ+����;�4uf��<M�5n#mk�Nme�9��2�s���������t[��g�}�X���f�M���U��W���*q���+�5����}��r`h��
�9��&��u�i?���t�j9��]P��y�1�:O������MK�?CK�S�Y����S�����i��S��"(/�2��+���tR����"�����F�M�.�k�)dgS��SM�	�F�
�k�V�|��0v����?l���)S#��!���)���k��j����"�5�����7%n����O�1���<�Y��z!L�Q�.�E5�d/g��I�@C9���
��������g�N��cpm��M��Q��h���m�!�����gZ
��d=�zn�M_Z�&�S@��T�~����
������_����dF��
	#nL�}Z�/SU���Qi��3�$~�����K���4���Fp���d��]<������V���g[��k���v����9<y����d*c��l���TwO�%J��wv�P:B��r�I7� Z���G�����v��o������C71���S�BwW�������]�ua
\s�����$��ZL��(*�w`����3������2��Neb�G��4Z�i�yw���z]�z`��"����2�����|]����V�c"-�@+����Tn��'�}�H�>N���gY��q�kY/V}\|s�s����\���GHC�W�����B�w~���� ������(��,6�3@�O��]7����a��S#X<���D�`��L5+��1mS�1�]k�;z��B�pV�g`��%O�>�P�.����qP��$���q���/tfl11O�M@��oB�m�3�P�`���&�oZ
�\�Q'
�HT`�<3�B~�/kr!p
���Nw���6
�:�[?+�i����Y���9k]_��P'M�[�g���y��4�I+��{���.���/���Y�3�Y��k��\�_�7������m�`�������b�?E:u���A/�FhoZ�u�www01�M��s�
:e�;�����h�]��_"Y�*P��4��:�}�S�CD��.;}�VJ��Y��Q\m�*hcP�#m�P&k+w�Au���W��B�?���/���oU����4��|������_�����Z��������|]Bx[R�N��y/!�K��o�Y�%�s�<\B��B������_����-�<[j�����w������?�H<���S~~�K~~�����#?��O��=?��)�������}�=[i��/�<��V���@��<�����>j�O���S��:t?�~������X�Q|�����O����@{�=G{
����{{
�?�S��h�z���{���{���}��@_�)����@��?����o@<�~�>u�6�J|�%^��7pw��������oo����o�p��,�*�;���X�E��v������+�N��������?�S��������$�%��|���������V�{�?E�-�3�3t�76����E��9]xd�)���S�a�S�a�S�i�S���)�����������g��������
�B���������|
����O�?��x��)���S�������?9]xZ�x�~
�x���H���#U���?�=������������������_O�?����*@eV1>�>����Yh"�kMG7�%t]E��0��F�i` �	���`�1��
�C�a����b�9���o
Bca�`A� p>J"��D�u;(\��xC�!����B�r@Q�4P (w�p�	��4����d*
u���C���Pu�=L���

3D��Yrs�3��f�f�&���7GJMP3�0�4�0�0�0���0�f�a�i�a�a�a�a�1�t���Sxu��qxv�m�4��_v����l�e���m%�5���1��4s�Z��q�wt�����s�^$}|��=��]Z��t<�	Pf�%=��W����d��5�O�5=��G���/�2��St�^0��6�*p���	F;~C\��Y	��h3��M��_�m�{��94F��g�����/h���{���!i��U�����B�zP�$N�:�[/Vn�
��^�,x��v!Z���[�v�i#�j$��|�D���"dx�]�����M����WK�t��S������~���|^er-���-z$�����ilZ��%J���������M_���\�|7%�a���m�7\a���n�x�`��O����z������_���V��\-�N��^��g�{�_�����G������_�\xuV���v.���_���Oqf=k�����a��e�'�Q
�KE�C�
hx!u�@�����X��L$���S����7�[���`Q����u�VK�F7l������5�"UJ/���.���nNb}����7RG�QJ�����$�������>�,�X�%�eZ�4�W���.M���r�����h�����z�l�z���w�������������p_<$r8�|��
0�'�F�<�|�K m�#���
>��4��/�-�:}���<
|�n���Kt�R�_x`�_�hS:���}^��
;���|
������M)��}B�������K��sJ����%|f��G����1��:�{�M�b�/���i��Ek;�]m�)����S�a�D����@7��i�1����X���Kt8��_�%��Ki�9@�.i�D2�_�������� ���=������}�9w|~1�|	���<"�����x���{^e�%�yH��g��K\�46�������o|�3^����-�"����e;���I�d�/1.;��Ks��������]H�7�f������Kk('+N;��.�E3�`>�i��'6x����H�D����)���F����'W������R��1e�i��~���8prm�a� -|�'��j��+J��Lz?�d��E#{�U���}��a��ow)��v�z��~��>q�LA�l�>�Ri
&~
��� gL��s�Oc��t��$
��otG�3�[fW��-]����8�����i6e#Xl�j_�f��Yz��� ��-��h��B+|i�+��f�duZ�5f�u�i�,��eqO���A@+X	�|	��+6\�3���X�f�Zm��p&o�����~ ���}�4�Q�h��k>6���jJ��v�����b^|�&�j\���\9�\�X����J�v"���'g�&����8()�d�4on����Q;_�^���w�����x'��ND\0��3���]\��b���8_�`�K�2���n��+���g(�������vYXc��c�!�[#�n����:u�k{��n;���`�}�����m����.-��Z��f������0�(�^�������&���S�A&C�L�����`������L��a1��\��F)��D^eXv���()��(�����H�%��\AQ�xI�^��3WP�IE�t8�Xne��r\�}(�����K��EM[.���.��@��U�W��]����� H�bX������������(���������2�#!e0$���\&�hI���M)���b}���������mi�����9���m���:b[�=�(�f��?�M���a��l[�������g��N�;�R[�'�K{fs�����j��L�3��6��~������2L���k���������5�%��'��cfV���M���+�'�] �6��r��grG�8��ve�����,��l����:����p0��f��Z��\��� �/;H�g>��r�#�����w�a�M�;kCb��L�La��nbE���g(g���6,3|�&���U������gE������6���]R���������i���`}�A�Alr��yf������_W}3
��~��}8�Oq�W���)����eJ�5Ig��p���-��q2:�Y��n�m��2���	89d��,��==Y�~�8Mo��]��@y�V��mk�m�:.�+`[���l,)�h�5�4���{��N@|�?��������n��s�k��[�4I��u
��6�U�:T5~���p
���f�/���g}�Z�4�Ll?��Ld����m�S�e�k$�t�!,��4uX7���j�W	�z{�5����2h�g��0����5�x��E��8hk=}.�G����|�����|�,o� 7�'!N�����
���}]
�'�D�T�I�|��1������1���g�����WB+R�1u�.8���7���"��`�Y6>��;�6���6'#Ps����a�h"���=��������F�j�m����46��RW�m^t���T�&�o.��.�#y�p9�s��y�ke��a�T]"������E����_��H�3�5_�jn��a���U����n1�n��2K�yk&�4���_�������:~S}���n�QV�1����
�P���� �#�G�fb��~���r���2�SJ�S��and!��E���_�_����c�#�K~O�G��_[�n-	��v��]�8S�v��ij]�j;*A�l�����;��)����e���]f�Uy�[��I]��E<���[C/��,����<�����:����ml���x�����5��WoP�G5��4��	��������*o�|PS]bM�����5���}RO�5������V=@���-������#��\�����O��|�;7dS�D�Y��7��H�U�\u}"��K"��>�q�%!W]�H9�����O��5I�Y�'���$���YgMv����KF%���O���I�#y/xY�#yg].���#yW]�w�����.����D�U��]u}"��K���>�w�$ygM��;k����O��5I�Y�'�.��KF?�����������'���\�Y�G���$���yW]�w�����.����D�Y���U}"��I���>�w�$ygM��;k����O�]2*y��~$��������]�H�y���u}&�����u}$�����u}$�����u}$����U}$����5}$����5}$����5}$��Q�w���,��������\x����������x�l�D�W����
����W��v�Q>��7h�����4��#����p�$||c'�XD?�rAK/�y��.6�@A���i�=17�������Y'�5O����@���Xm�o�D����`!�y�6C�i?=��#!I�]�^E����hMh��DZ�c{'�,���]�������V_����hU'^m�S�H(�����������G��F�����^�d�%�OL�A
���� ��/�������N`I*����Z���du��v��I���z�`BR��������v�}�����-�h��YB���Y\r���hy��S�P���y�A|1ex���U��C�6��P��
�����6����H)(����2��R���28h�E[�
���!��O)C�5�+������@���Z�2�De(vk2�,���~���,e�R.�������2����@<���Pd�����sW�(�A�[������:�zz����R�j�-�h��*��2�ew
|	�am� ��V��b��R���P����g(��28<�P$�P<�Ne(��*C�����f�i+�4�4v7�2x����P��R�GXN�Pd�m���ue���x(C��6zP�bOS�����@��p��������y=�����������p����J��3�-�OC����4�H��!�h&f?�)=�����a@��A�$[���}VB{5�&���<����r����`�g~���<��ag�=����7�J�ho�������r/n�8,gU���As�_e?
�(S"8l���s�V&���;��Q�7�]����#��D���L(h�N���$^`q��vW�=�V�Qg0Z���_�h�Q�L}y�*�Q}�V���o���s�0w�My�v)��L����)���4U�3�O���������Z�EP�)j�Q�B-�t�����\��Z��6���g�u_3��'��2�i)�fj���������Z_�H���"���P�����j�f.����
���H���������'��<�R��t�V��J�wk���;(��=���pE�����!����5�[�#za2~�u���~�Q.w
4�E�V�:/o�6Z1��`���I����q����JH�����������A��&�u8��=��K^�=�K}W��vJ�t�,�g\��z���FZ�.���R�������9�F�BI�|��j��a�`�J����-����$u�B270t3��$��^}?cM/7 �-��[|o���-����A\p|Dh�p�����]
R��`5+�d��%zO'f��og�����l]Sw�P�f"�{���{-��lL��,�oP����u����Vn[>	�JZ����WC-IaM��pS&����i3�h�/<�I�����Z�W������ �'[w�B����c~W���� :��h\v�I8�5�%|���h�� M��8���E�r����@��EZp���������`z�y�������Y-n�&{��H��Yt�!��h�_�#C����`F������"���M��j���SF����������g�%����������
�yE��fg�����W��SF���2Os��j����h���3��S���YF�	Z!D�[�/��h�o��]��J4��!L��\M��Gsy�4����,��c�����U�zX�~�7-��/E����R��0�h��+���]�Ln6���#�������v�gkA��b	��F����|�����~|q��STh�� �j���l�y������L��}bP�VQ�r���yV���~��I�5-is����PX
XXPr�p��������N&������B�+�k������X(��%l�o�p��]ZV��5]x��r�T�
���C�=n��������W-~��XG-�A����WM1
M[���gz�{�w>�s�.d������P�����2�%#�*�S�P�N���������e�����r�>Z�
��
�:�2T;���I���W
���2�>���Hk:i�nn�����P�h��P�&
��n�]��}e	�7�j_��l�����*"����2T�l@e �28{9,���y�2���{��Z����2(�h�e(nqd�_6q&W�b�O�2�^���2(ep�c/����{�+(�C�����z�mw���x��iue���T�s!.4�t��5?��q=�����
��$��m������������P�G*C��������-x�����P5K��twehvx�B�`3 ����
�i��7H�������e������-(C�,e���x������4s,���@�24{�5�A������2�������^���{�����L�k��'����
����p����'FX���@	����.l��	+gwpK����T����(�����.���%��J���[�:�����+�G2�Z[�G�>^Z��>�C�����l',wB��u�A��
���W�O��D�n�%Z�)��f���4��B�-/��ym����"�{�t���
:�gv��M�'h����_�lU���~Z��O	�N��
�z��@�����l8��
�s�b�mD��]��5�
��m�K��+��-��lW�6�h�;���~u*���(����
:~�6�;Tlm���7�X.��jro�|a�!����q��G]$���y�w�^N�z�T��=���"��6'1Q�������j��.|���H������[�O�Z��6�F�k��L�������6_�6���@�0j��/�j������/�Vn[>�@��3�N��2������p���_xr=����{����g�7O����B2@S���!<'��R�^a��g��k���a:�l������)�=���l�Q;�����@����l?#97�V�����ba:/������
�i��c�x���7�M�|�l����f�ic�g���C��{��a���7KV���E�J^�a:�����=����s��b`a:{y�"h��a�����=Dk���&"�u�b/�'Y9n Z�����rw>r1��@HB[�f~�����e�
D9�)A:�
g�g>���f��|P
!�7�i��7���S�q�i��������:{3W���e�=vy��5?��9���C��|�Q?%�Zl��Nc�v�+h�y���}�A��B��qzI3��T
���	O�g�%�����=���"���T��b)��F�B���n'���|8�����h�,���8����#�������0r� �������
T!�Y�����|�,�4�lI"U1M��cD5����j�M55����Vu���6+�?�p��o��g��G=7B���
�^�d����JHIs.���A�HY������
b��E�G@���@;�]i����v?�zQx�C����]��	m�C�����X�f��
m����!�x���BD�a�v���;
e�}�@%X�_�����yl�`p���y>m��^<��_��_������b��.jm��?��a����`0������������[��t��f����%�-;U�Xy���p�������|g�m%
����n���1�#��F���Mb��LPi>Y������||OR��.*e�������x�w�G��V1J�`���@���
\O5�/�j������
���y���K����{����������G����"j�J�b��=X��
[�����M��f���d���o$�>	Cj�4��
�Gi���"����X��(���vS����>Y��#R{}��)��;4�M�,K'C��%AK6v�Im)Ru�F��EKs�(�H
�@o���L\�	3�0��q���6�#D�����3bj��+Q�J+Pu����75j���/���F]�����E
A=.��������CU2N��G�?CsW��U���fl�����w��q�bT�i�-!H-(����	���E��N�����-�0q�p1N��^�vEMR�����j�$��1`
��wZ#Ua�-���2��5�����77X����Jo�������tu�8�{Q��Q�����x��C���$q����O��.������C�5mJ�w�T����E�������������j���N��$��cG3d�chW)>�,!P�\!�5y�5n���]��[L����i���ye
�U�Rc���h���o_���$��b�n~l��f�j�P���$�����T�-2
%cs�����w>��<|��������
�t��TY~�o��������m{�8f����q�H{��SH��d$)��>8����3�v+�	I�
�x�.�W,o��������ym|���C�IK#;�0|g��mi������Pg�T]���1���%*m~�
��He�r��x('������2g�n����1�hOku����\N�w}��<��1�S
/������0�������[�t
�l~����#��`����Pi��E��lu����S�qm��)���4#7S{�Z���=��b���^2��K;%�J����{���L�B�^�/y 33�?����:��d+YFC*9"�em��MY	��������f����������O��#�Z������)�Y�?s�!��]����lg��C�y&��<�s?"UAN��U�[7��Z�����[b�6����W�&�'tFw��y$����m{#j���:��<OP�P������II{��=�$�#�-\���S
������5p�������S��"��[���@Wp�	F~,�e�V)��������f����z
%��:�|���}Ied����8���{{�5Nv(�1��[��L�������OhV�p��o��g�:d���d&;��kvrR��0���%����+\
8x�;���,`��+����~�/\Yx��9���l����W�U����nU
�'lNf��
��(��(!��g0����������.���t�����T"W�����f*NF��+/8P5�fW������pw��;��F�=`�������fQ{\b�H>*<��c��	����+������~�G���x�H`xG�
W	���
��xgJU�M��Z����9���+R�@���lR�GN{�]�J�q����@~w������������R���=W��p>���p���_/�YWP�����b�@����9�����@~�
Te"L���
����T�����+���@}�����HU����/7���~��8��K.��@>*'0w�>T�.B�z�m,�m���8��0c I����<�Wlls��r�v��t
d���;P�=����#UW:����
�����:��,TGo�E��Rd��V�(�����N��M���M�<����T^0id9�>*�uG��FySi^���c�i���Mb��w��8*{a|{��p����R60��c����kA����P��kK�����T����������������� �\u5�_����4�M�%��9��7�������Uy�H�������<w���[=z�W��s��c���.)�n7��g�p5u�AY�+��{:�[;��Vo���q����1#�>V5ML�I��cH]��}7l�2�>�1��U����x�7�&t~M�K7���N�m�:1��)R5���s��v�UW�Tz�8��B����d�8�+�q�F9w��|(j��4����1,���k�'�
�{UU��7�������R.u���������17��������p,��6�����rve���O.<(����������EU+����S�fSu�J�k�f���m��[��8�]m���S���1���^��D��.�>�S��v�>�?{i<�B���g�1=�����'�g�`%U�v�Tf���yH���X����B��r���z\ny�Y�Z�t���Y��O��ak�������OfWh�\lz���'Y��E|l��#N���������V���b���"����9�=�rciT��2�,����nY�^�f����q,K���� +�<�����i�/�V���a�s�=�	^1���9K(�Mt���Q�(�~b�����9���p�%�T&��hU*�R�$�=\x9�aS�@<Jv�,u�h��@��l����TS�����V)�_B������
�.�X�U���#�B������,n�l
���T����	������2��V�5��sy��r��
�I���p&��nYW�����7b�\�l6a�]��G��n�X�U �A
����$�:��j�K�+���D����#�w�~El��L�b���V�h�R����I�9/j$�9V����G����B�����ZzS�-��:5{����h��d�*�Po�
�R7S��m�����@�M��PR�<���z�/s��`���r�����|�7f����-O�w�"(��G��IW �����������(+T�-�#U������C�e����������V�gBY���=*e�}�@+Id���Q�9qC=��#��@R�oe��f����-/�
Jp���VP$��<E���������J�������������w����s�Y��Ss�A�g;�<+)L���F����B��k^����-�|S;��3a�yY3RV������oYq5�QYY1�?�~Q�@+�e�+��5��/E��)R�o�t��1+��-o���"�v�T��VR��rN�$��Pb�d�Mj��,/��f����"{��G�������j��T]mU#}9
�@l�K~G�^�gZ������Y����[E-!	�{����_������=C}>p0���Q�Q����y�F��j�:�#7�[���6t1�[�����+����=h���;����#�gP&6N��,L ���2q����3�rzs��8�H?��?�:pR&~�.�������A���g�FKicU��L�����()�n��-��Bz�3��n"<�����+�L��1gPk���8�qT����7�m�6�KIi��Q�]�K�����7���3gz����9���v��;�����v�8�����;'�u�	|qui[���#cpV��Fk��e����{9����\��-��8���m'�Zc�_&�n,5�T�@�`|q����	����f_�D�`��a.-z��'eb6�B-��T�N�j���*�)]�����������+6����J)�&�=�`c��\�s��������C�IWJ��=$���g|~�'C�Oi;��C�R�5	B�����.����o����Y>���'��������z��������SZ�W��6?��o�~d�]f���]o�����KJY9�Aj���y����"����<�i�|���\9;��mI{`�I����2�21�
��t�7���M�qR&^�����M��r�v�������9C��^����7)s0K��>�b���I�x�b���\���\�I���}�����c���6�����G��rv���cX���\$^������/C��� �2�O�s�N�7Q���?�}M��?�S�;o�~�7�q��k�)����:�TH���Eky�"��t�-C)�z=�,�2)��z��2�q��_��T�T����zJ��������������@��65jkg�E7�|{��\�*b��C�4�����D����!����/�n%���4�c�=��L������
d�U3�t���R\��v�����2o�R�|�S]����/�QT���Q�����lB�����^��id�G;u�K����S���k���T���r�@^�}�{�aN�����r.���M�������uR&�?�L ��Y7n�%�D�13�5�������<�����R��f�����U_W�~1�I��S�7�cY�3]��Ri�QBc�v�I!E�AaT����s�����;9F5�������:�U��_#��.Fw�M�����s(�;Rd��-3�3f5�xe�%9�-�I>�3�[�J���!�}e�;K
�����V��<H�����m��z�3�HdSd�w�r�[����o�A/�a�kg�|;n�%�-��_���-���;�r����<�4U:r��l���8�I�^�)�����2�yG�b&�cc�vn�vc!�"ZG)`��R��G5��R����Y3">2����(���=�B���9Hs�'��������9H�b��m� m�?�Ab�i@�RQl�h�d|�0�G���A�����XH�+��	�A�bz��������0�����qC���H�2�	��s�&n���8i�.��L�E�{�\�9i�b`eTj8i�����;��m.RF�����|�Jm�b�4��\$��bnkm��D|1�����q(��Ix���-��:�JSL%�������#zms��d@��{s.{��Fi!���1��&.��y����"��p.RFOh@S|�)��"q����[i ���C��d����U�����������"��=JN���--��6�Ni�,~5`b���y�>��y����q�����������l>��&Cc���?$a�|.����1��)�I��3~
���un/^�����;����(���Q��]�wl\.zT��������%��s�/�|���]��Z|F�cf�z�3<G���
iT�����_��=�{O"��������3=_�|��/���}lB���NR�)��=�u>������|�����.�y��Xu��	�*���`���%m,�zF�8V];>[k�CJ"+?�$�f�����h-y��Z�g4v����r��8��vP6N�i-�!F�4���.�}v���f��������$�l�����&~��D������K���nw��s��#�����m9�~����p2;�F�qP6��� 5�K���tKoNC��M�#	5�@������]'��M�RX<
ov�s���0j����Km��3���o=�8q�R�55����/��L��#,��
R�T���%xp�5�pOG;�OZ�3^��_�BG�S\���R��R.��������J4C-���BR���
Gi�^������O)�@��4	(S,�G�����c.���xV�p�����nH�=���$����1�G���H�5�FJ��Q"����(&/j*���^\���)�����b�t��
�?]���X�v������)}�c���������h���z1���2��9_�nm�e���^��I�U*���7�E��N�������Tp���Q�C:,&�_ 2mL�\x|e���G����m���zx��
���2�m�<
R�+RZ-�1�JU�����J��bE�C��������_{#���A�Y�$��Z����&����1�^����4x#A�P���G�cp������uJ���y`@C�����|WJ�1�b�bp�6��%]��\�hk.�a@
���:3AFj����Q*���Q���Ck+��k cp����2L�XG�0��d?�h�dl�������+�+W cp�v��
d���\���eoad[�,�#,5�R��z�6��M��}��$8H�1�^�}d��{�)�CKH�1�^L���2T�S�����j����������O�hai*T�s������`@�I�5��0���~�����/-(��|�z?��b�R�bpI�2 �h���N�;���me@S�U�ocp������e@��G�1�b�bp2W�J�@��
����+�[�v��
h2��C�XW����7w��_�wl�VN|)�>�������3\�'w� =��}����'~7��t���e}[����bk8r��K��+���:\Z��p���2,���`�,;��,�����B'�v�u���/���������n�����o���H�������a��H�wZ����8�:p�a���F����}���N��f�HA�	o����^0^d�����.|����������zH��-)-�3���)-h���_+n>��b���t)���|�}b��\j�����
����l���=����a(��X�������n�5a�m��K�yJ/�>G�[`�i��t�s\�1�H+7�"7�T�s;���
��"�������_�-��&����.�v|Sw�/�~���l�8���8�V���9q$����qW&
���W��oe�L�����R�>�6�e�{�+��00�9*������R�������/�J���S_=��J�d��O�=Q���)�o�Q��q�Nl�{�T�/�s�^l+��N;u��x��c�e�)��n��]:m��zkm������#��r��_�.��L%��yS�}��Y�=_�v��J�{dTH�<!e�3��A=���U��m�����<L������R�o�n�H��s�Z������oO�Gi.��m9C�+FJ�hR���k���rW�����-������M�{$�������������w�C;%�[W.7����1,��R��H�R�s�w�L���qH�[�$t���K����`���������7��F�zsr������-�]���8��-���x����O���A)�z�3��LJ�i�R�@�����;@�?|,���%�����a_Y���N�t���T+H��
c�r'��Ci��ua��8�HH7_�!r�E6dj�_�a��x��ooCq��e��.EB�a��	
����N���}�V���5yS#���(6�u����p�ur
�u���C*]��;����/�q���\a�]w��C�B�u�ip��G)G�����g���7���67����
�����X]���(���?O�o�����?.�r�?J���R-�
uW�21�����-#�3�����~k�b���l����l��q�Z6��(�_c������igx��#�����^JW�����:3n#�R8k��7]���U�1�a��1J���9��)�*�������/z�3(f�E���q�����`$9j+{�*���}��-3�!E�������,M7��'!N�<2�=W����v�������\�c
;��q��h���E��P����f���b�DD`�R&���o=�=.��_����K��hk��x���4�kG@�����3�r���
�l
���j�T��4���x+�.Fq�&����hE>�C�R�l����N7�L�]�!�0��-�O=��T6vqFU&�k�m����gb�b�2�LhG��@��A\F4��4��� .�e�?2��KF$?�c�������ic�����t{&��b�2�Lx���_EP�D�_����4�~�$����3�hq�AZ�=�{&�a��
����13����0�e���U����g�/cs��I���.&j�����=#D�z��=��a@�j�h�d|��m����3����K�/j���\I��3���	={��J����[_|q#h��+��U�8�2o��~�X������jAa���Ws�=��7�<��N�:G��+E�4�����Uk���T`����cf����������E��uu��}����)t�o71RqgG�[�t������G���+���
9#0��xD����E�����kE:t��\����� ]��R�����-��I���wX��p��������������#�&����48�������%]���L6�G���}����OP�NE�.\����{���P�����jm�s�"���s�^��7�|���C�-��]� ��	We�A�����c__���(�Dop�7�������t��m�n�KgF��
���qy�x����1���{�)�X�oZV���u�/�V�������v1D
#�����/�	6��R�U\zg�Z��G���@z����R\����txD$��s�egwJ��>t�0������K)�t=����)D�9��C���Tf
�y����
��#3��_��X�����sKH
�>�v�P�N����io�$�Zk�H{{g�����Z����OH=GF����S���������@H���5"�w����Q���s���!}���/t�K�H{���l����t���X������19*e��Z��������|E�[`�-�
K��'��$�U��|��m�^��V�Z��[�;�i��X����4^x&���2 �%m�\,���X��=1^4����e���)
j����Q^{�2��"@)�-*�s!�a��
��D[c.j4Pc~���(��_|e=�;m�Wt��1�V���j9���me@�I\7��1bT2[+0�����>�\,�B c.�v�\d�������Hoad[/���u�2N���Y�����,���)M�4�B`1^��+Ew��
~�`@C���e�^�4H��&G��&k�2���i5�B�W����1�+�km��`8���R)���c�Z�(���s�(�t��a�b.2�B�]�C0 �y��2�.����+����k�i|�s!�+�B c.�v�\d��������`oad���>4����3^���P(�%��Z��TQ���2��7�\R�r���F����v�n6�9�r��@U?���q��=����&��@�c��0!��_7����X��Kh���p))����3��WH��/��;���
���������R}c
��B��ql��$����!���q0���"�7��J�/�Y��������)�l�]
��S��Gz�w~	��CS�w�m\w�`�O�9��}_2��/��_�
�lp��F%E�U�I-��T��x�F���B%����,��8��dm�k��im��l��,.e>L�;�L��W>����r-�&�H�/�b�o)�g��\3���!}S��x�nC����#e�Ex�����#���}�ri���\.H��)�/~T��P�����E[N*��>9�����s�!���-���2�V�qA[����(�����p)/�����c�����zO���7���#g�p����d��L���E
l9��#w'����X���q)N��C�k�:������v���h������qHM��G�����Fc��x5�O�4nd��K��>:'u�UT�>�2S��O��hH�t��E��s�H��g���q�4��t�M�����S����
��2���qn8����>��/G}�1�Ky)�����_��m�S{�o�����k�*��!}N)K��G�FM��8����2��sh��|��Y'������q���A�����w�\Z�)-��+(k�\�����$������^����x��������4�R2�+�X�!��S���}D�Bxne.��-���s$���H��Q�.��M)���/>_���/%���:����,����5���ScA�������"W��vss�0��z�����R����N5S.VD��NI���������vK�J��E�������qH�[�TC����F������U�\9�����6]���WH����^�8��-���x�~�+��c����A��Z�?)��������tp��}���/�n��������������[}���c��?(����������83tn�b��!E�����\O��.%��8�/W�oU�������7z�K�Fn8F�X<AO�}���*�^/���Y��@��z��R������u��xh��������R�Z8t���@��1�����9!lo��2]=����0��!.>����8��~�
�/����kt��E\�c�wd~�R����8�&
7D�"�������K(A2����,�c0�+bI�Oe���t�b���[u�
���l]��/+ORJ��|��Y�.-����&�Rv�tu)�q���d#aR82f�Q�d�����e
#���CQ���"?Fm��}m�_�
5���l�R���R�]��1,�X��y����B�y9�
�2=�	��/������B��_X+�{���m��{�o��2�?�R���o�
�� �#��PP�j���\�2���g:��vM�#����q^�e��)tO�^t�1q���[I���cg�����P���������1���;��u��5���%�aY�1J%]���E&�p����b��|+�8/B2 a��6�K`q^���y�Q�d|�0��|tH�����3slQ��
 �e�D�d@�D�q�o�f�F��q^�������\���i�%�����(�������J�����A7���G�/R��.�M�mUU���,�\n��_�hd9f���5J�8/�&��8/�0�a5`��K	t�x�L^bQ���0��,��_/���R;�2KC����;���{5��z�M&=.�Rd2�V��n��8/1_q^�%�#�"�f@�_����_��|+-���}h@S��G�f�P��q!�eEw_�b�7���O�:��n��e����m�:{�����+�,,)R���\)-���"�2�Rt���VM'Q�#�74�K��"X<�`i.�����,^%Q��JR|��'�X��
���k�9�8�J��������t�DA��������+�Q�6��
�\+<����'���{���^�n�.l�|g��hK���z.4���a��4�����&
5�
w�g��~�QHYa���*v�k�P�94!�����v�����M��.��1\ze����.Z�vZ�Y��B����������W>t��bY�X��0�:���_�?�=M���vdDK���������w�8���V<����(
���%rG8h�?qY��O����^V����4T����ZH`j9��g������?q'�����;�`��,��&�A�~��C�h�q����w��E
��>��z����]_'.�J�a�=".��(�'����������N�J�R��!���6m�D�v��
����cy�xUS�����{�)�XN�K�*bz�Kt�j�����@�KyV:�p*��m�F��������m�j�xR����^9��]��d*�
(8��k=���;�[W�E��Wp�=��a�
endstream
endobj
xref
0 8
0000000000 65535 f 
0000000015 00000 n 
0000000113 00000 n 
0000000178 00000 n 
0000000224 00000 n 
0000000359 00000 n 
0000000547 00000 n 
0000000281 00000 n 
trailer
<<
/Size 8
/Root 2 0 R
/Info 1 0 R
>>
startxref
135259
%%EOF
#181Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#180)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Nov 13, 2024 at 11:19 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <20241105.174328.1705956947135248653.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 05 Nov 2024 17:43:28 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've further investigated the performance regression, and found out it
might be relevant that the compiler doesn't inline the
CopyFromTextLikeOneRow() function. It might be worth testing with
pg_attribute_always_inline instead of 'inline' as below:

Wow! Good catch!

I've rebased on the current master and updated the v20 and
v21 patch sets with "pg_attribute_always_inline" not
"inline".

The v22 patch set is for the v20 patch set.
(TO/FROM changes are in one commit.)

The v23 patch set is for the v21 patch set.
(TO/FROM changes are separated for easy to merge only FROM
or TO part.)

I've run benchmark on my machine that has "Intel(R) Core(TM)
i7-3770 CPU @ 3.40GHz".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

v20-result.pdf: This is the same result PDF attached in
/messages/by-id/20241008.173918.995935870630354246.kou@clear-code.com
. This is the base line for "pg_attribute_always_inline"
change.

v22-result.pdf: This is a new result PDF for the v22 patch
set.

COPY FROM:

0001: The v22 patch set is slower than HEAD. This just
introduces "routine" abstraction. It increases overhead. So
this is expected.

0002-0005: The v22 patch set is faster than HEAD for all
cases. The v20 patch set is slower than HEAD for smaller
data. This shows that "pg_attribute_always_inline" for the
"COPY FROM" part is effective on my machine too.

COPY TO:

0001: The v22 patch set is slower than HEAD. This is
as expected for the same reason as COPY FROM.

0002-0004: The v22 patch set is slower than HEAD. (The v20
patch set is faster than HEAD.) This is not expected.

0005: The v22 patch set is faster than HEAD. This is
expected. But 0005 just exports some functions. It doesn't
change existing logic. So it's strange...

This shows "pg_attribute_always_inline" is needless for the
"COPY TO" part.

I also tried the v24 patch set:
* The "COPY FROM" part is same as the v22 patch set
("pg_attribute_always_inline" is used.)
* The "COPY TO" part is same as the v20 patch set
("pg_attribute_always_inline" is NOT used.)

(I think that the v24 patch set isn't useful for others. So
I don't share it here. If you're interested in it, I'll
share it here.)

v24-result.pdf:

COPY FROM: The same trend as the v22 patch set result. It's
expected because the "COPY FROM" part is the same as the v22
patch set.

COPY TO: The v24 patch set is faster than the v22 patch set
but the v24 patch set isn't same trend as the v20 patch
set. This is not expected because the "COPY TO" part is the
same as the v20 patch set.

Anyway, the 0005 "COPY TO" parts are always faster than
HEAD. So we can use either "pg_attribute_always_inline" or
"inline".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

Can we proceed this proposal with these results? Or should
we wait for more benchmark results?

Thank you for sharing the benchmark test results! I think these
results are good for us to proceed. I'll closely look at COPY TO
results and review v22 patch sets.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#182Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#181)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Nov 14, 2024 at 4:04 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Wed, Nov 13, 2024 at 11:19 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <20241105.174328.1705956947135248653.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 05 Nov 2024 17:43:28 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've further investigated the performance regression, and found out it
might be relevant that the compiler doesn't inline the
CopyFromTextLikeOneRow() function. It might be worth testing with
pg_attribute_always_inline instead of 'inline' as below:

Wow! Good catch!

I've rebased on the current master and updated the v20 and
v21 patch sets with "pg_attribute_always_inline" not
"inline".

The v22 patch set is for the v20 patch set.
(TO/FROM changes are in one commit.)

The v23 patch set is for the v21 patch set.
(TO/FROM changes are separated for easy to merge only FROM
or TO part.)

I've run benchmark on my machine that has "Intel(R) Core(TM)
i7-3770 CPU @ 3.40GHz".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

v20-result.pdf: This is the same result PDF attached in
/messages/by-id/20241008.173918.995935870630354246.kou@clear-code.com
. This is the base line for "pg_attribute_always_inline"
change.

v22-result.pdf: This is a new result PDF for the v22 patch
set.

COPY FROM:

0001: The v22 patch set is slower than HEAD. This just
introduces "routine" abstraction. It increases overhead. So
this is expected.

0002-0005: The v22 patch set is faster than HEAD for all
cases. The v20 patch set is slower than HEAD for smaller
data. This shows that "pg_attribute_always_inline" for the
"COPY FROM" part is effective on my machine too.

COPY TO:

0001: The v22 patch set is slower than HEAD. This is
as expected for the same reason as COPY FROM.

0002-0004: The v22 patch set is slower than HEAD. (The v20
patch set is faster than HEAD.) This is not expected.

0005: The v22 patch set is faster than HEAD. This is
expected. But 0005 just exports some functions. It doesn't
change existing logic. So it's strange...

This shows "pg_attribute_always_inline" is needless for the
"COPY TO" part.

I also tried the v24 patch set:
* The "COPY FROM" part is same as the v22 patch set
("pg_attribute_always_inline" is used.)
* The "COPY TO" part is same as the v20 patch set
("pg_attribute_always_inline" is NOT used.)

(I think that the v24 patch set isn't useful for others. So
I don't share it here. If you're interested in it, I'll
share it here.)

v24-result.pdf:

COPY FROM: The same trend as the v22 patch set result. It's
expected because the "COPY FROM" part is the same as the v22
patch set.

COPY TO: The v24 patch set is faster than the v22 patch set
but the v24 patch set isn't same trend as the v20 patch
set. This is not expected because the "COPY TO" part is the
same as the v20 patch set.

Anyway, the 0005 "COPY TO" parts are always faster than
HEAD. So we can use either "pg_attribute_always_inline" or
"inline".

Summary:
* "pg_attribute_always_inline" is effective for the "COPY
FROM" part
* "pg_attribute_always_inline" may not be needed for the
"COPY TO" part

Can we proceed this proposal with these results? Or should
we wait for more benchmark results?

Thank you for sharing the benchmark test results! I think these
results are good for us to proceed. I'll closely look at COPY TO
results and review v22 patch sets.

I have a question about v22. We use pg_attribute_always_inline for
some functions to avoid function call overheads. Applying it to
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow() are legitimate as
we've discussed. But there are more function where the patch applied
it to:

-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int
*nfields, bool is_csv)
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)

I think it's out of scope of this patch even if these changes are
legitimate. Is there any reason for these changes?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#183Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#182)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoC=DX5QQVb27C6UdpPfY-F=-PGnQ1u6rWo69DV=4EtDdw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 18 Nov 2024 17:02:41 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I have a question about v22. We use pg_attribute_always_inline for
some functions to avoid function call overheads. Applying it to
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow() are legitimate as
we've discussed. But there are more function where the patch applied
it to:

-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int
*nfields, bool is_csv)
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)

I think it's out of scope of this patch even if these changes are
legitimate. Is there any reason for these changes?

Yes for NextCopyFromRawFields() and CopyReadLineText().
No for CopyToTextLikeSendEndOfRow().

NextCopyFromRawFields() and CopyReadLineText() have "bool
is_csv". So I think that we should use
pg_attribute_always_inline (or inline) like
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow(). I think
that it's not out of scope of this patch because it's a part
of CopyToTextLikeOneRow() and CopyFromTextLikeOneRow()
optimization.

Note: The optimization is based on "bool is_csv" parameter
and constant "true"/"false" argument function call. If we
can inline this function call, all "if (is_csv)" checks in
the function are removed.

pg_attribute_always_inline (or inline) for
CopyToTextLikeSendEndOfRow() is out of scope of this
patch. You're right.

I think that inlining CopyToTextLikeSendEndOfRow() is better
because it's called per row. But it's not related to the
optimization.

Should I create a new patch set without
pg_attribute_always_inline/inline for
CopyToTextLikeSendEndOfRow()? Or could you remove it when
you push?

Thanks,
--
kou

#184Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#183)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Nov 18, 2024 at 5:31 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC=DX5QQVb27C6UdpPfY-F=-PGnQ1u6rWo69DV=4EtDdw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 18 Nov 2024 17:02:41 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I have a question about v22. We use pg_attribute_always_inline for
some functions to avoid function call overheads. Applying it to
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow() are legitimate as
we've discussed. But there are more function where the patch applied
it to:

-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int
*nfields, bool is_csv)
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)

I think it's out of scope of this patch even if these changes are
legitimate. Is there any reason for these changes?

Yes for NextCopyFromRawFields() and CopyReadLineText().
No for CopyToTextLikeSendEndOfRow().

NextCopyFromRawFields() and CopyReadLineText() have "bool
is_csv". So I think that we should use
pg_attribute_always_inline (or inline) like
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow(). I think
that it's not out of scope of this patch because it's a part
of CopyToTextLikeOneRow() and CopyFromTextLikeOneRow()
optimization.

Note: The optimization is based on "bool is_csv" parameter
and constant "true"/"false" argument function call. If we
can inline this function call, all "if (is_csv)" checks in
the function are removed.

Understood, thank you for pointing this out.

pg_attribute_always_inline (or inline) for
CopyToTextLikeSendEndOfRow() is out of scope of this
patch. You're right.

I think that inlining CopyToTextLikeSendEndOfRow() is better
because it's called per row. But it's not related to the
optimization.

Should I create a new patch set without
pg_attribute_always_inline/inline for
CopyToTextLikeSendEndOfRow()? Or could you remove it when
you push?

Since I'm reviewing the patch and the patch organization I'll include it.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#185Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#184)
4 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Nov 18, 2024 at 8:44 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Mon, Nov 18, 2024 at 5:31 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC=DX5QQVb27C6UdpPfY-F=-PGnQ1u6rWo69DV=4EtDdw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 18 Nov 2024 17:02:41 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I have a question about v22. We use pg_attribute_always_inline for
some functions to avoid function call overheads. Applying it to
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow() are legitimate as
we've discussed. But there are more function where the patch applied
it to:

-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int
*nfields, bool is_csv)
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)

I think it's out of scope of this patch even if these changes are
legitimate. Is there any reason for these changes?

Yes for NextCopyFromRawFields() and CopyReadLineText().
No for CopyToTextLikeSendEndOfRow().

NextCopyFromRawFields() and CopyReadLineText() have "bool
is_csv". So I think that we should use
pg_attribute_always_inline (or inline) like
CopyToTextLikeOneRow() and CopyFromTextLikeOneRow(). I think
that it's not out of scope of this patch because it's a part
of CopyToTextLikeOneRow() and CopyFromTextLikeOneRow()
optimization.

Note: The optimization is based on "bool is_csv" parameter
and constant "true"/"false" argument function call. If we
can inline this function call, all "if (is_csv)" checks in
the function are removed.

Understood, thank you for pointing this out.

pg_attribute_always_inline (or inline) for
CopyToTextLikeSendEndOfRow() is out of scope of this
patch. You're right.

I think that inlining CopyToTextLikeSendEndOfRow() is better
because it's called per row. But it's not related to the
optimization.

Should I create a new patch set without
pg_attribute_always_inline/inline for
CopyToTextLikeSendEndOfRow()? Or could you remove it when
you push?

Since I'm reviewing the patch and the patch organization I'll include it.

I've extracted the changes to refactor COPY TO/FROM to use the format
callback routines from v23 patch set, which seems to be a better patch
split to me. Also, I've reviewed these changes and made some changes
on top of them. The attached patches are:

0001: make COPY TO use CopyToRoutine.
0002: minor changes to 0001 patch. will be fixed up.
0003: make COPY FROM use CopyFromRoutine.
0004: minor changes to 0003 patch. will be fixed up.

I've confirmed that v24 has a similar performance improvement to v23.
Please check these extractions and minor change suggestions.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

v24-0002-fixup-fixup-minor-updates-for-COPY-TO-refactorin.patchapplication/x-patch; name=v24-0002-fixup-fixup-minor-updates-for-COPY-TO-refactorin.patchDownload
From 257a284447e64753277f7bc08b387e901bcab8bb Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 19 Nov 2024 11:52:33 -0800
Subject: [PATCH v24 2/4] fixup: fixup: minor updates for COPY TO refactoring.

includes:

- reroder function definitions.
- clenaup comments.
---
 src/backend/commands/copyto.c  | 242 +++++++++++++++------------------
 src/include/commands/copyapi.h |  23 ++--
 2 files changed, 121 insertions(+), 144 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 46f3507a8b..73b9ca4457 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -65,7 +65,7 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
-	/* format routine */
+	/* format-specific routines */
 	const CopyToRoutine *routine;
 
 	/* low-level state data */
@@ -118,6 +118,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -125,49 +138,55 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
 /*
- * CopyToRoutine implementations.
- */
-
-/*
- * CopyToTextLikeSendEndOfRow
+ * COPY TO routines for built-in formats.
  *
- * Apply line terminations for a line sent in text or CSV format depending
- * on the destination, then send the end of a row.
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
  */
-static pg_attribute_always_inline void
-CopyToTextLikeSendEndOfRow(CopyToState cstate)
+
+/* TEXT format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* BINARY format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return COPY TO routines for the given option */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
 {
-	switch (cstate->copy_dest)
-	{
-		case COPY_FILE:
-			/* Default line termination depends on platform */
-#ifndef WIN32
-			CopySendChar(cstate, '\n');
-#else
-			CopySendString(cstate, "\r\n");
-#endif
-			break;
-		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			CopySendChar(cstate, '\n');
-			break;
-		default:
-			break;
-	}
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
 
-	/* Now take the actions related to the end of a row */
-	CopySendEndOfRow(cstate);
+	/* default is text */
+	return &CopyToRoutineText;
 }
 
-/*
- * CopyToTextLikeStart
- *
- * Start of COPY TO for text and CSV format.
- */
+/* Implementation of the start callback for text and CSV formats */
 static void
 CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 {
@@ -203,14 +222,13 @@ CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 				CopyAttributeOutText(cstate, colname);
 		}
 
-		CopyToTextLikeSendEndOfRow(cstate);
+		CopySendTextLikeEndOfRow(cstate);
 	}
 }
 
 /*
- * CopyToTextLikeOutFunc
- *
- * Assign output function data for a relation's attribute in text/CSV format.
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
  */
 static void
 CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
@@ -223,13 +241,24 @@ CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 	fmgr_info(func_oid, finfo);
 }
 
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
 
 /*
- * CopyToTextLikeOneRow
- *
- * Process one row for text/CSV format.
- *
  * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
 static pg_attribute_always_inline void
 CopyToTextLikeOneRow(CopyToState cstate,
@@ -271,36 +300,10 @@ CopyToTextLikeOneRow(CopyToState cstate,
 		}
 	}
 
-	CopyToTextLikeSendEndOfRow(cstate);
+	CopySendTextLikeEndOfRow(cstate);
 }
 
-/*
- * CopyToTextOneRow
- *
- * Per-row callback for COPY TO with text format.
- */
-static void
-CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
-{
-	CopyToTextLikeOneRow(cstate, slot, false);
-}
-
-/*
- * CopyToTextOneRow
- *
- * Per-row callback for COPY TO with CSV format.
- */
-static void
-CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
-{
-	CopyToTextLikeOneRow(cstate, slot, true);
-}
-
-/*
- * CopyToTextLikeEnd
- *
- * End of COPY TO for text/CSV format.
- */
+/* Implementation of the end callback for text and CSV formats */
 static void
 CopyToTextLikeEnd(CopyToState cstate)
 {
@@ -308,18 +311,12 @@ CopyToTextLikeEnd(CopyToState cstate)
 }
 
 /*
- * CopyToRoutine implementation for "binary".
- */
-
-/*
- * CopyToBinaryStart
- *
- * Start of COPY TO for binary format.
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
  */
 static void
 CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
 {
-	/* Generate header for a binary copy */
 	int32		tmp;
 
 	/* Signature */
@@ -333,9 +330,8 @@ CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
 }
 
 /*
- * CopyToBinaryOutFunc
- *
- * Assign output function data for a relation's attribute in binary format.
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
  */
 static void
 CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
@@ -348,11 +344,7 @@ CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 	fmgr_info(func_oid, finfo);
 }
 
-/*
- * CopyToBinaryOneRow
- *
- * Process one row for binary format.
- */
+/* Implementation of the per-row callback for binary format */
 static void
 CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
 {
@@ -385,11 +377,7 @@ CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
 	CopySendEndOfRow(cstate);
 }
 
-/*
- * CopyToBinaryEnd
- *
- * End of COPY TO for binary format.
- */
+/* Implementation of the end callback for binary format */
 static void
 CopyToBinaryEnd(CopyToState cstate)
 {
@@ -399,47 +387,6 @@ CopyToBinaryEnd(CopyToState cstate)
 	CopySendEndOfRow(cstate);
 }
 
-/*
- * CSV and text share the same implementation, at the exception of the
- * output representation and per-row callbacks.
- */
-static const CopyToRoutine CopyToRoutineText = {
-	.CopyToStart = CopyToTextLikeStart,
-	.CopyToOutFunc = CopyToTextLikeOutFunc,
-	.CopyToOneRow = CopyToTextOneRow,
-	.CopyToEnd = CopyToTextLikeEnd,
-};
-
-static const CopyToRoutine CopyToRoutineCSV = {
-	.CopyToStart = CopyToTextLikeStart,
-	.CopyToOutFunc = CopyToTextLikeOutFunc,
-	.CopyToOneRow = CopyToCSVOneRow,
-	.CopyToEnd = CopyToTextLikeEnd,
-};
-
-static const CopyToRoutine CopyToRoutineBinary = {
-	.CopyToStart = CopyToBinaryStart,
-	.CopyToOutFunc = CopyToBinaryOutFunc,
-	.CopyToOneRow = CopyToBinaryOneRow,
-	.CopyToEnd = CopyToBinaryEnd,
-};
-
-/*
- * Define the COPY TO routines to use for a format.  This should be called
- * after options are parsed.
- */
-static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
-{
-	if (opts.csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts.binary)
-		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
-}
-
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
  * in past protocol redesigns.
@@ -555,6 +502,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -1143,7 +1119,7 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
 	MemoryContext oldcontext;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5ce24f195d..99981b1579 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,31 +27,32 @@ typedef struct CopyToStateData *CopyToState;
 typedef struct CopyToRoutine
 {
 	/*
-	 * Called when COPY TO is started to set up the output functions
-	 * associated with the relation's attributes reading from.  `finfo` can be
-	 * optionally filled to provide the catalog information of the output
-	 * function.  `atttypid` is the OID of data type used by the relation's
-	 * attribute.
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
 	 */
 	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
 								  FmgrInfo *finfo);
 
 	/*
-	 * Called when COPY TO is started.
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
 	 *
-	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
 	 * is read.
 	 */
 	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
 
 	/*
-	 * Copy one row for COPY TO.
-	 *
-	 * `slot` is the tuple slot where the data is emitted.
+	 * Write one row to the 'slot'.
 	 */
 	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
 
-	/* Called when COPY TO has ended */
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
-- 
2.43.5

v24-0004-fixup-minor-updates-for-COPY-FROM-refactoring.patchapplication/x-patch; name=v24-0004-fixup-minor-updates-for-COPY-FROM-refactoring.patchDownload
From b6b5c0409eed0558320e39bd642b2be17f17f590 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 19 Nov 2024 13:46:06 -0800
Subject: [PATCH v24 4/4] fixup: minor updates for COPY FROM refactoring.

includes:

- cleanup comments.
- reorder function definitions.
---
 src/backend/commands/copyfrom.c          | 161 +++++++++++------------
 src/backend/commands/copyfromparse.c     |  78 +++++------
 src/include/commands/copyapi.h           |  26 ++--
 src/include/commands/copyfrom_internal.h |   2 +-
 4 files changed, 121 insertions(+), 146 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e77986f9a9..7f1de8a42b 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,31 +106,65 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
-
 /*
- * CopyFromRoutine implementations for text and CSV.
+ * built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
  */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
 
 /*
- * CopyFromTextLikeInFunc
- *
- * Assign input function data for a relation's attribute in text/CSV format.
+ * COPY FROM routines for built-in formats.
++
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
  */
-static void
-CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
-					   FmgrInfo *finfo, Oid *typioparam)
+
+/* TEXT format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* BINARY format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return COPY FROM routines for the given option */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	Oid			func_oid;
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
 
-	getTypeInputInfo(atttypid, &func_oid, typioparam);
-	fmgr_info(func_oid, finfo);
+	/* default is text */
+	return &CopyFromRoutineText;
 }
 
-/*
- * CopyFromTextLikeStart
- *
- * Start of COPY FROM for text/CSV format.
- */
+/* Implementation of the start callback for text and CSV formats */
 static void
 CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
 {
@@ -162,24 +196,37 @@ CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 /*
- * CopyFromTextLikeEnd
- *
- * End of COPY FROM for text/CSV format.
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
  */
 static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
 CopyFromTextLikeEnd(CopyFromState cstate)
 {
 	/* nothing to do */
 }
 
-/*
- * CopyFromRoutine implementation for "binary".
- */
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
 
 /*
- * CopyFromBinaryInFunc
- *
- * Assign input function data for a relation's attribute in binary format.
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
  */
 static void
 CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
@@ -191,72 +238,13 @@ CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
 	fmgr_info(func_oid, finfo);
 }
 
-/*
- * CopyFromBinaryStart
- *
- * Start of COPY FROM for binary format.
- */
-static void
-CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
-{
-	/* Read and verify binary header */
-	ReceiveCopyBinaryHeader(cstate);
-}
-
-/*
- * CopyFromBinaryEnd
- *
- * End of COPY FROM for binary format.
- */
+/* Implementation of the end callback for binary format */
 static void
 CopyFromBinaryEnd(CopyFromState cstate)
 {
 	/* nothing to do */
 }
 
-/*
- * Routines assigned to each format.
-+
- * CSV and text share the same implementation, at the exception of the
- * per-row callback.
- */
-static const CopyFromRoutine CopyFromRoutineText = {
-	.CopyFromInFunc = CopyFromTextLikeInFunc,
-	.CopyFromStart = CopyFromTextLikeStart,
-	.CopyFromOneRow = CopyFromTextOneRow,
-	.CopyFromEnd = CopyFromTextLikeEnd,
-};
-
-static const CopyFromRoutine CopyFromRoutineCSV = {
-	.CopyFromInFunc = CopyFromTextLikeInFunc,
-	.CopyFromStart = CopyFromTextLikeStart,
-	.CopyFromOneRow = CopyFromCSVOneRow,
-	.CopyFromEnd = CopyFromTextLikeEnd,
-};
-
-static const CopyFromRoutine CopyFromRoutineBinary = {
-	.CopyFromInFunc = CopyFromBinaryInFunc,
-	.CopyFromStart = CopyFromBinaryStart,
-	.CopyFromOneRow = CopyFromBinaryOneRow,
-	.CopyFromEnd = CopyFromBinaryEnd,
-};
-
-/*
- * Define the COPY FROM routines to use for a format.
- */
-static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
-{
-	if (opts.csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts.binary)
-		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
-}
-
-
 /*
  * error context callback for COPY FROM
  *
@@ -1578,7 +1566,7 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
-	/* Set format routine */
+	/* Set the format routine */
 	cstate->routine = CopyFromGetRoutine(cstate->opts);
 
 	/* Process the target relation */
@@ -1918,6 +1906,7 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
 	cstate->routine->CopyFromEnd(cstate);
 
 	/* No COPY FROM related resources except memory. */
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0447c4df7e..5416583e94 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -141,12 +141,14 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 /* non-export function prototypes */
 static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
+static bool CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls, bool is_csv);
 
 
 /* Low-level communications functions */
@@ -740,6 +742,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
 static pg_attribute_always_inline bool
 NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
@@ -839,20 +843,30 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
 /*
- * CopyFromTextLikeOneRow
- *
- * Copy one row to a set of `values` and `nulls` for the text and CSV
- * formats.
- *
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
 static pg_attribute_always_inline bool
-CopyFromTextLikeOneRow(CopyFromState cstate,
-					   ExprContext *econtext,
-					   Datum *values,
-					   bool *nulls,
-					   bool is_csv)
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
@@ -1001,43 +1015,10 @@ CopyFromTextLikeOneRow(CopyFromState cstate,
 	return true;
 }
 
-
-/*
- * CopyFromTextOneRow
- *
- * Per-row callback for COPY FROM with text format.
- */
-bool
-CopyFromTextOneRow(CopyFromState cstate,
-				   ExprContext *econtext,
-				   Datum *values,
-				   bool *nulls)
-{
-	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
-}
-
-/*
- * CopyFromCSVOneRow
- *
- * Per-row callback for COPY FROM with CSV format.
- */
-bool
-CopyFromCSVOneRow(CopyFromState cstate,
-				  ExprContext *econtext,
-				  Datum *values,
-				  bool *nulls)
-{
-	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
-}
-
-/*
- * CopyFromBinaryOneRow
- *
- * Copy one row to a set of `values` and `nulls` for the binary format.
- */
+/* Implementation of the per-row callback for binary format */
 bool
-CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
-					 Datum *values, bool *nulls)
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
@@ -1130,6 +1111,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
+	/* Get one row from source */
 	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
 		return false;
 
@@ -1237,7 +1219,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static pg_attribute_always_inline bool
+static bool
 CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 224fda172e..ff269def9d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -63,38 +63,42 @@ typedef struct CopyToRoutine
 typedef struct CopyFromRoutine
 {
 	/*
-	 * Called when COPY FROM is started to set up the input functions
-	 * associated with the relation's attributes writing to.  `finfo` can be
-	 * optionally filled to provide the catalog information of the input
-	 * function.  `typioparam` can be optionally filled to define the OID of
-	 * the type to pass to the input function.	`atttypid` is the OID of data
-	 * type used by the relation's attribute.
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
 	 */
 	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
 								   FmgrInfo *finfo, Oid *typioparam);
 
 	/*
-	 * Called when COPY FROM is started.
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
 	 *
-	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
 	 * to be copied.  This can be used for any initialization steps required
 	 * by a format.
 	 */
 	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
 
 	/*
-	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 * Read one row from the source and fill *values and *nulls.
 	 *
 	 * 'econtext' is used to evaluate default expression for each column that
 	 * is either not read from the file or is using the DEFAULT option of COPY
 	 * FROM.  It is NULL if no default values are used.
 	 *
-	 * Returns false if there are no more tuples to copy.
+	 * Returns false if there are no more tuples to read.
 	 */
 	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
 								   Datum *values, bool *nulls);
 
-	/* Called when COPY FROM has ended. */
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c11b5ff3cc..55fe24d728 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -187,7 +187,7 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
 extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
 							   Datum *values, bool *nulls);
 extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
-- 
2.43.5

v24-0003-Refactor-COPY-FROM-to-use-format-callback-functi.patchapplication/x-patch; name=v24-0003-Refactor-COPY-FROM-to-use-format-callback-functi.patchDownload
From e1f2e5f906443487229b4c6aa664bfa9e3c7fbdc Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v24 3/4] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed up to a 10%
performance gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyfrom.c          | 201 ++++++++--
 src/backend/commands/copyfromparse.c     | 487 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  44 +-
 src/include/commands/copyfrom_internal.h |  12 +
 src/tools/pgindent/typedefs.list         |   1 +
 6 files changed, 501 insertions(+), 246 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 754cb49616..e77986f9a9 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,157 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+
+/*
+ * CopyFromRoutine implementations for text and CSV.
+ */
+
+/*
+ * CopyFromTextLikeInFunc
+ *
+ * Assign input function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid,
+					   FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromTextLikeStart
+ *
+ * Start of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * CopyFromTextLikeEnd
+ *
+ * End of COPY FROM for text/CSV format.
+ */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * CopyFromRoutine implementation for "binary".
+ */
+
+/*
+ * CopyFromBinaryInFunc
+ *
+ * Assign input function data for a relation's attribute in binary format.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyFromBinaryStart
+ *
+ * Start of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * CopyFromBinaryEnd
+ *
+ * End of COPY FROM for binary format.
+ */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/*
+ * Routines assigned to each format.
++
+ * CSV and text share the same implementation, at the exception of the
+ * per-row callback.
+ */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/*
+ * Define the COPY FROM routines to use for a format.
+ */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1547,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1578,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1736,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1768,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1905,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1918,8 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d8..0447c4df7e 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static pg_attribute_always_inline bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -741,8 +741,8 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  *
  * NOTE: force_not_null option are not applied to the returned fields.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +759,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +813,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +823,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -831,233 +840,299 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 }
 
 /*
- * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ * CopyFromTextLikeOneRow
  *
- * 'econtext' is used to evaluate default expression for each column that is
- * either not read from the file or is using the DEFAULT option of COPY FROM.
- * It can be NULL when no default values are used, i.e. when all columns are
- * read from the file, and DEFAULT option is unset.
+ * Copy one row to a set of `values` and `nulls` for the text and CSV
+ * formats.
  *
- * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  */
-bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate,
+					   ExprContext *econtext,
+					   Datum *values,
+					   bool *nulls,
+					   bool is_csv)
 {
 	TupleDesc	tupDesc;
-	AttrNumber	num_phys_attrs,
-				attr_count,
-				num_defaults = cstate->num_defaults;
+	AttrNumber	attr_count;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	int			i;
-	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
 
 	tupDesc = RelationGetDescr(cstate->rel);
-	num_phys_attrs = tupDesc->natts;
 	attr_count = list_length(cstate->attnumlist);
 
-	/* Initialize all values for row to NULL */
-	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
-	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+		if (fieldno >= fldct)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
 		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
 
-			if (cstate->opts.csv_mode)
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
 			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
 			{
 				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
 				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+				string = NULL;
 			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
 			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
 			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-				cstate->num_errors++;
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
 
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
 
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
 				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
 
-				return true;
+				/* reset relname_only */
+				cstate->relname_only = false;
 			}
 
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
+			return true;
 		}
 
-		Assert(fieldno == attr_count);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
 	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
 
-		cstate->cur_lineno++;
+	Assert(fieldno == attr_count);
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
+	return true;
+}
 
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
+/*
+ * CopyFromTextOneRow
+ *
+ * Per-row callback for COPY FROM with text format.
+ */
+bool
+CopyFromTextOneRow(CopyFromState cstate,
+				   ExprContext *econtext,
+				   Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/*
+ * CopyFromCSVOneRow
+ *
+ * Per-row callback for COPY FROM with CSV format.
+ */
+bool
+CopyFromCSVOneRow(CopyFromState cstate,
+				  ExprContext *econtext,
+				  Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * CopyFromBinaryOneRow
+ *
+ * Copy one row to a set of `values` and `nulls` for the binary format.
+ */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+					 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
 
-		if (fld_count != attr_count)
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
 	}
 
+	return true;
+}
+
+/*
+ * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ *
+ * 'econtext' is used to evaluate default expression for each column that is
+ * either not read from the file or is using the DEFAULT option of COPY FROM.
+ * It can be NULL when no default values are used, i.e. when all columns are
+ * read from the file, and DEFAULT option is unset.
+ *
+ * 'values' and 'nulls' arrays must be the same length as columns of the
+ * relation passed to BeginCopyFrom. This function fills the arrays.
+ */
+bool
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
+			 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	num_phys_attrs,
+				num_defaults = cstate->num_defaults;
+	int			i;
+	int		   *defmap = cstate->defmap;
+	ExprState **defexprs = cstate->defexprs;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	num_phys_attrs = tupDesc->natts;
+
+	/* Initialize all values for row to NULL */
+	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
+	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
+
 	/*
 	 * Now compute and insert any defaults available for the columns not
 	 * provided by the input data.  Anything not processed here or above will
@@ -1087,7 +1162,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1170,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1162,8 +1237,8 @@ CopyReadLine(CopyFromState cstate)
 /*
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
-static bool
-CopyReadLineText(CopyFromState cstate)
+static pg_attribute_always_inline bool
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1253,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1334,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1377,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1405,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1422,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1433,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1453,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f538..f2409013fb 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 99981b1579..224fda172e 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -56,4 +56,46 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Called when COPY FROM is started to set up the input functions
+	 * associated with the relation's attributes writing to.  `finfo` can be
+	 * optionally filled to provide the catalog information of the input
+	 * function.  `typioparam` can be optionally filled to define the OID of
+	 * the type to pass to the input function.	`atttypid` is the OID of data
+	 * type used by the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Called when COPY FROM is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row to a set of `values` and `nulls` of size tupDesc->natts.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to copy.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* Called when COPY FROM has ended. */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..c11b5ff3cc 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,6 +15,7 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +59,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +187,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* Callbacks for CopyFromRoutine->CopyFromOneRow */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index e3334d9485..7fab5c479e 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.43.5

v24-0001-Refactor-COPY-TO-to-use-format-callback-function.patchapplication/x-patch; name=v24-0001-Refactor-COPY-TO-to-use-format-callback-function.patchDownload
From f75c34d7420ed7fc47be30e4ebfbff855d0cb2ff Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v24 1/4] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed up to a 5%
performance gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 462 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  58 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 382 insertions(+), 139 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d9675..46f3507a8b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format routine */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -124,6 +128,317 @@ static void CopySendEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * CopyToRoutine implementations.
+ */
+
+/*
+ * CopyToTextLikeSendEndOfRow
+ *
+ * Apply line terminations for a line sent in text or CSV format depending
+ * on the destination, then send the end of a row.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeSendEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextLikeStart
+ *
+ * Start of COPY TO for text and CSV format.
+ */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopyToTextLikeSendEndOfRow(cstate);
+	}
+}
+
+/*
+ * CopyToTextLikeOutFunc
+ *
+ * Assign output function data for a relation's attribute in text/CSV format.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+
+/*
+ * CopyToTextLikeOneRow
+ *
+ * Process one row for text/CSV format.
+ *
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopyToTextLikeSendEndOfRow(cstate);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with text format.
+ */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/*
+ * CopyToTextOneRow
+ *
+ * Per-row callback for COPY TO with CSV format.
+ */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * CopyToTextLikeEnd
+ *
+ * End of COPY TO for text/CSV format.
+ */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * CopyToRoutine implementation for "binary".
+ */
+
+/*
+ * CopyToBinaryStart
+ *
+ * Start of COPY TO for binary format.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/* Generate header for a binary copy */
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * CopyToBinaryOutFunc
+ *
+ * Assign output function data for a relation's attribute in binary format.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/*
+ * CopyToBinaryOneRow
+ *
+ * Process one row for binary format.
+ */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CopyToBinaryEnd
+ *
+ * End of COPY TO for binary format.
+ */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
+
+/*
+ * CSV and text share the same implementation, at the exception of the
+ * output representation and per-row callbacks.
+ */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/*
+ * Define the COPY TO routines to use for a format.  This should be called
+ * after options are parsed.
+ */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +506,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +540,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -426,6 +727,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1075,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1091,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1130,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -906,71 +1146,15 @@ DoCopyTo(CopyToState cstate)
 static void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..5ce24f195d
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,58 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/* This is private in commands/copyto.c */
+typedef struct CopyToStateData *CopyToState;
+
+/*
+ * API structure for a COPY TO format implementation.   Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Called when COPY TO is started to set up the output functions
+	 * associated with the relation's attributes reading from.  `finfo` can be
+	 * optionally filled to provide the catalog information of the output
+	 * function.  `atttypid` is the OID of data type used by the relation's
+	 * attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Called when COPY TO is started.
+	 *
+	 * `tupDesc` is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Copy one row for COPY TO.
+	 *
+	 * `slot` is the tuple slot where the data is emitted.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* Called when COPY TO has ended */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 08521d51a9..e3334d9485 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.5

#186Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#185)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoA1s0nzjGU9t3N_uNdg3SZeOxXyH3rQfxYFEN3Y7JrKRQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 20 Nov 2024 14:14:27 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've extracted the changes to refactor COPY TO/FROM to use the format
callback routines from v23 patch set, which seems to be a better patch
split to me. Also, I've reviewed these changes and made some changes
on top of them. The attached patches are:

0001: make COPY TO use CopyToRoutine.
0002: minor changes to 0001 patch. will be fixed up.
0003: make COPY FROM use CopyFromRoutine.
0004: minor changes to 0003 patch. will be fixed up.

I've confirmed that v24 has a similar performance improvement to v23.
Please check these extractions and minor change suggestions.

Thanks. Here are my comments:

0002:

+/* TEXT format */

"text" may be better than "TEXT". We use "text" not "TEXT"
in other places.

+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};

+/* BINARY format */

"binary" may be better than "BINARY". We use "binary" not
"BINARY" in other places.

+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};

+/* Return COPY TO routines for the given option */

option ->
options

+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)

0003:

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 99981b1579..224fda172e 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,4 +56,46 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be

Should we remove a tab character here?

0004:

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e77986f9a9..7f1de8a42b 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,31 +106,65 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
-
 /*
- * CopyFromRoutine implementations for text and CSV.
+ * built-in format-specific routines. One-row callbacks are defined in

built-in ->
Built-in

 /*
- * CopyFromTextLikeInFunc
- *
- * Assign input function data for a relation's attribute in text/CSV format.
+ * COPY FROM routines for built-in formats.
++

"+" ->
" *"

+/* TEXT format */

TEXT -> text?

+/* BINARY format */

BINARY -> binary?

+/* Return COPY FROM routines for the given option */

option ->
options

+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0447c4df7e..5416583e94 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
+static bool CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls, bool is_csv);

Oh, I didn't know that we don't need inline in a function
declaration.

@@ -1237,7 +1219,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
/*
* CopyReadLineText - inner loop of CopyReadLine for text mode
*/
-static pg_attribute_always_inline bool
+static bool
CopyReadLineText(CopyFromState cstate, bool is_csv)

Is this an intentional change?
CopyReadLineText() has "bool in_csv".

Thanks,
--
kou

#187Alvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Masahiko Sawada (#185)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

I ran `make headerscheck` after these patches and it reported a few
problems:

/pgsql/source/master/src/tools/pginclude/headerscheck /pgsql/source/master /pgsql/build/master
In file included from /tmp/headerscheck.xdG40Y/test.c:2:
/pgsql/source/master/src/include/commands/copyapi.h:76:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
76 | void (*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:87:43: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
87 | void (*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:98:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
98 | bool (*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:102:41: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
102 | void (*CopyFromEnd) (CopyFromState cstate);
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:103:1: warning: no semicolon at end of struct or union
103 | } CopyFromRoutine;
| ^

I think the fix should be the attached.

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"In Europe they call me Niklaus Wirth; in the US they call me Nickel's worth.
That's because in Europe they call me by name, and in the US by value!"

Attachments:

copy-headersfix.patchtext/x-diff; charset=utf-8Download
diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 9e2896f32ae..bac31315fcb 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5416583e94d..f80bdd5ed4e 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 73b9ca44577..345ba48c3f9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,6 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
 #include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ff269def9dc..4c3413841ae 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,12 +14,10 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
+#include "commands/copy.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
-/* This is private in commands/copyto.c */
-typedef struct CopyToStateData *CopyToState;
-
 /*
  * API structure for a COPY TO format implementation.   Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 55fe24d7284..1ca058c6add 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,6 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
 #include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
#188Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Alvaro Herrera (#187)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Nov 21, 2024 at 2:41 AM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:

I ran `make headerscheck` after these patches and it reported a few
problems:

/pgsql/source/master/src/tools/pginclude/headerscheck /pgsql/source/master /pgsql/build/master
In file included from /tmp/headerscheck.xdG40Y/test.c:2:
/pgsql/source/master/src/include/commands/copyapi.h:76:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
76 | void (*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:87:43: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
87 | void (*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:98:44: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
98 | bool (*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:102:41: error: unknown type name ‘CopyFromState’; did you mean ‘CopyToState’?
102 | void (*CopyFromEnd) (CopyFromState cstate);
| ^~~~~~~~~~~~~
| CopyToState
/pgsql/source/master/src/include/commands/copyapi.h:103:1: warning: no semicolon at end of struct or union
103 | } CopyFromRoutine;
| ^

I think the fix should be the attached.

Thank you for the report and providing the patch! The fix looks good
to me. I'll incorporate this patch in the next version.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#189Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#186)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Nov 20, 2024 at 6:55 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoA1s0nzjGU9t3N_uNdg3SZeOxXyH3rQfxYFEN3Y7JrKRQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 20 Nov 2024 14:14:27 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've extracted the changes to refactor COPY TO/FROM to use the format
callback routines from v23 patch set, which seems to be a better patch
split to me. Also, I've reviewed these changes and made some changes
on top of them. The attached patches are:

0001: make COPY TO use CopyToRoutine.
0002: minor changes to 0001 patch. will be fixed up.
0003: make COPY FROM use CopyFromRoutine.
0004: minor changes to 0003 patch. will be fixed up.

I've confirmed that v24 has a similar performance improvement to v23.
Please check these extractions and minor change suggestions.

Thanks. Here are my comments:

Thank you for the comments!

0002:

+/* TEXT format */

"text" may be better than "TEXT". We use "text" not "TEXT"
in other places.

+static const CopyToRoutine CopyToRoutineText = {
+       .CopyToStart = CopyToTextLikeStart,
+       .CopyToOutFunc = CopyToTextLikeOutFunc,
+       .CopyToOneRow = CopyToTextOneRow,
+       .CopyToEnd = CopyToTextLikeEnd,
+};

+/* BINARY format */

"binary" may be better than "BINARY". We use "binary" not
"BINARY" in other places.

+static const CopyToRoutine CopyToRoutineBinary = {
+       .CopyToStart = CopyToBinaryStart,
+       .CopyToOutFunc = CopyToBinaryOutFunc,
+       .CopyToOneRow = CopyToBinaryOneRow,
+       .CopyToEnd = CopyToBinaryEnd,
+};

+/* Return COPY TO routines for the given option */

option ->
options

+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)

Fixed all the above comments for 0002 patch.

0003:

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 99981b1579..224fda172e 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,4 +56,46 @@ typedef struct CopyToRoutine
void            (*CopyToEnd) (CopyToState cstate);
} CopyToRoutine;
+/*
+ * API structure for a COPY FROM format implementation.         Note this must be

Should we remove a tab character here?

Fixed.

0004:

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index e77986f9a9..7f1de8a42b 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,31 +106,65 @@ typedef struct CopyMultiInsertInfo
/* non-export function prototypes */
static void ClosePipeFromProgram(CopyFromState cstate);
-
/*
- * CopyFromRoutine implementations for text and CSV.
+ * built-in format-specific routines. One-row callbacks are defined in

built-in ->
Built-in

/*
- * CopyFromTextLikeInFunc
- *
- * Assign input function data for a relation's attribute in text/CSV format.
+ * COPY FROM routines for built-in formats.
++

"+" ->
" *"

+/* TEXT format */

TEXT -> text?

+/* BINARY format */

BINARY -> binary?

+/* Return COPY FROM routines for the given option */

option ->
options

+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)

Fixed.

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0447c4df7e..5416583e94 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
+static bool CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+                                                                  Datum *values, bool *nulls, bool is_csv);

Oh, I didn't know that we don't need inline in a function
declaration.

Removed this function declaration as it's not necessarily necessary.

@@ -1237,7 +1219,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
/*
* CopyReadLineText - inner loop of CopyReadLine for text mode
*/
-static pg_attribute_always_inline bool
+static bool
CopyReadLineText(CopyFromState cstate, bool is_csv)

Is this an intentional change?
CopyReadLineText() has "bool in_csv".

Yes, I'm not sure it's really necessary to make it inline since the
benchmark results don't show much difference. Probably this is because
the function has 'is_csv' in some 'if' branches but the compiler
cannot optimize out the whole 'if' branches as most 'if' branches
check 'is_csv' and other variables.

I've attached the v25 patches that squashed the minor changes I made
in v24 and incorporated all comments I got so far. I think these two
patches are in good shape. Could you rebase remaining patches on top
of them so that we can see the big picture of this feature?

Regarding exposing the structs such as CopyToStateData, v22-0004 patch
moves most of all copy-related structs to copyapi.h from copyto.c,
copyfrom_internal.h, and copy.h, which seems odd to me. I think we can
expose CopyToStateData (and related structs) in a new file
copyto_internal.h and keep other structs in the original header files.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

v25-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchapplication/octet-stream; name=v25-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchDownload
From 52179f342febc11fbdc6d3a372e8b85ef9395f33 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v25 2/3] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 468 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 474 insertions(+), 249 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 9e2896f32a..bac31315fc 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 754cb49616..c84081c3ba 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return COPY FROM routines for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d8..fdb506c58b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -831,233 +841,277 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 }
 
 /*
- * Read next tuple from file for COPY FROM. Return false if no more tuples.
- *
- * 'econtext' is used to evaluate default expression for each column that is
- * either not read from the file or is using the DEFAULT option of COPY FROM.
- * It can be NULL when no default values are used, i.e. when all columns are
- * read from the file, and DEFAULT option is unset.
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
- * 'values' and 'nulls' arrays must be the same length as columns of the
- * relation passed to BeginCopyFrom. This function fills the arrays.
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
 {
 	TupleDesc	tupDesc;
-	AttrNumber	num_phys_attrs,
-				attr_count,
-				num_defaults = cstate->num_defaults;
+	AttrNumber	attr_count;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	int			i;
-	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
 
 	tupDesc = RelationGetDescr(cstate->rel);
-	num_phys_attrs = tupDesc->natts;
 	attr_count = list_length(cstate->attnumlist);
 
-	/* Initialize all values for row to NULL */
-	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
-	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+	fieldno = 0;
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
 		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
 
-			if (cstate->opts.csv_mode)
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
 			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
 			{
 				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
 				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+				string = NULL;
 			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
 			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
 			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-				cstate->num_errors++;
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
 
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
 
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
 				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
 
-				return true;
+				/* reset relname_only */
+				cstate->relname_only = false;
 			}
 
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
+			return true;
 		}
 
-		Assert(fieldno == attr_count);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
 	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
 
-		cstate->cur_lineno++;
+	Assert(fieldno == attr_count);
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
+	return true;
+}
 
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
 
-		if (fld_count != attr_count)
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
 	}
 
+	return true;
+}
+
+/*
+ * Read next tuple from file for COPY FROM. Return false if no more tuples.
+ *
+ * 'econtext' is used to evaluate default expression for each column that is
+ * either not read from the file or is using the DEFAULT option of COPY FROM.
+ * It can be NULL when no default values are used, i.e. when all columns are
+ * read from the file, and DEFAULT option is unset.
+ *
+ * 'values' and 'nulls' arrays must be the same length as columns of the
+ * relation passed to BeginCopyFrom. This function fills the arrays.
+ */
+bool
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
+			 Datum *values, bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	num_phys_attrs,
+				num_defaults = cstate->num_defaults;
+	int			i;
+	int		   *defmap = cstate->defmap;
+	ExprState **defexprs = cstate->defexprs;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	num_phys_attrs = tupDesc->natts;
+
+	/* Initialize all values for row to NULL */
+	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
+	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
+
 	/*
 	 * Now compute and insert any defaults available for the columns not
 	 * provided by the input data.  Anything not processed here or above will
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f538..f2409013fb 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eccc875d0e..19aacc8ddd 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc78..1ca058c6ad 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index e3334d9485..7fab5c479e 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.43.5

v25-0001-Refactor-COPY-TO-to-use-format-callback-function.patchapplication/octet-stream; name=v25-0001-Refactor-COPY-TO-to-use-format-callback-function.patchDownload
From 0315144c7983da31f6aeac4eaf318fd9e8bb5f5d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v25 1/3] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d9675..f81dadcc12 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return COPY TO routines for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 0000000000..eccc875d0e
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 08521d51a9..e3334d9485 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.5

#190Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#189)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBNfKDbJnu-zONNpG820ZXYC0fuTSLrJ-UdRqU4qp2wog@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Nov 2024 13:01:06 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

@@ -1237,7 +1219,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
/*
* CopyReadLineText - inner loop of CopyReadLine for text mode
*/
-static pg_attribute_always_inline bool
+static bool
CopyReadLineText(CopyFromState cstate, bool is_csv)

Is this an intentional change?
CopyReadLineText() has "bool in_csv".

Yes, I'm not sure it's really necessary to make it inline since the
benchmark results don't show much difference. Probably this is because
the function has 'is_csv' in some 'if' branches but the compiler
cannot optimize out the whole 'if' branches as most 'if' branches
check 'is_csv' and other variables.

I see. If explicit "inline" isn't related to performance, we
don't need explicit "inline".

I've attached the v25 patches that squashed the minor changes I made
in v24 and incorporated all comments I got so far. I think these two
patches are in good shape. Could you rebase remaining patches on top
of them so that we can see the big picture of this feature?

OK. I'll work on it.

Regarding exposing the structs such as CopyToStateData, v22-0004 patch
moves most of all copy-related structs to copyapi.h from copyto.c,
copyfrom_internal.h, and copy.h, which seems odd to me. I think we can
expose CopyToStateData (and related structs) in a new file
copyto_internal.h and keep other structs in the original header files.

Custom COPY format extensions need to use
CopyToStateData/CopyFromStateData. For example,
CopyToStateData::rel is used to retrieve table schema. If we
move CopyToStateData to copyto_internal.h not copyapi.h,
custom COPY format extensions need to include
copyto_internal.h. I feel that it's strange that extensions
need to use internal headers.

What is your real concern? If you don't want to export
CopyToStateData/CopyFromStateData entirely, we can provide
accessors only for some members of them.

FYI: We discussed this in the past. For example:
/messages/by-id/20240115.152350.1128880926282754664.kou@clear-code.com

Thanks,
--
kou

#191Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#190)
8 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20241125.110620.313152541320718947.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 25 Nov 2024 11:06:20 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've attached the v25 patches that squashed the minor changes I made
in v24 and incorporated all comments I got so far. I think these two
patches are in good shape. Could you rebase remaining patches on top
of them so that we can see the big picture of this feature?

OK. I'll work on it.

I've attached the v26 patch set:

0001: It's same as 0001 in the v25 patch set.
0002: It's same as 0002 in the v25 patch set.
0003: It's same as 0003 in the v23 patch set.
This parses the "format" option and adds support for
custom TO handler.
0004: It's same as 0004 in the v23 patch set.
This exports CopyToStateData. But the following
enums/structs/functions aren't moved to copyapi.h from
copy.h:
* CopyHeaderChoice
* CopyOnErrorChoice
* CopyLogVerbosityChoice
* CopyFormatOptions
* copy_data_dest_cb()
0005: It's same as 0005 in the v23 patch set.
This adds missing APIs to implement custom TO handler
as an extension.
0006: It's same as 0008 in the v23 patch set.
This adds support for custom FROM handler.
0007: It's same as 0009 in the v23 patch set.
This exports CopyFromStateData.
0008: It's same as 0010 in the v23 patch set.
This adds missing APIs to implement custom FROM handler
as an extension.

I've also updated https://github.com/kou/pg-copy-arrow for
the current API.

I think that we can merge only 0001/0002 as the first
step. Because they don't change the current behavior and
they improve performance. We can merge other patches after
that.

Regarding exposing the structs such as CopyToStateData, v22-0004 patch
moves most of all copy-related structs to copyapi.h from copyto.c,
copyfrom_internal.h, and copy.h, which seems odd to me. I think we can
expose CopyToStateData (and related structs) in a new file
copyto_internal.h and keep other structs in the original header files.

Custom COPY format extensions need to use
CopyToStateData/CopyFromStateData. For example,
CopyToStateData::rel is used to retrieve table schema. If we
move CopyToStateData to copyto_internal.h not copyapi.h,
custom COPY format extensions need to include
copyto_internal.h. I feel that it's strange that extensions
need to use internal headers.

What is your real concern? If you don't want to export
CopyToStateData/CopyFromStateData entirely, we can provide
accessors only for some members of them.

The v26 patch set still exports
CopyToStateData/CopyFromStateData in copyapi.h not
copy{to,from}_internal.h. But I didn't move the following
enums/structs/functions:

* CopyHeaderChoice
* CopyOnErrorChoice
* CopyLogVerbosityChoice
* CopyFormatOptions
* copy_data_dest_cb()

What do you think about this approach?

Thanks,
--
kou

Attachments:

v26-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From d146c9f428163be276b7fac6b046dabe3d466374 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v26 3/8] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 82 ++++++++++++++++---
 src/backend/commands/copyto.c                 |  4 +-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 251 insertions(+), 14 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 2d98ecf3f4e..d4906b44751 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,73 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +587,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f81dadcc12b..ce3dd252c32 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -176,7 +176,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 81df3bdf95f..428ab4f0d93
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index cbbe8acd382..959d0301c20 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7771,6 +7771,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..793dd671935 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2409013fba..6b740d5b917 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 19aacc8ddd3..36057b92417 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -24,6 +24,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index c829b619530..75b6ab1b6a9 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..606c78f6878
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (format 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..9406b3be3d4
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (format 'test_copy_format');
+COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v26-0004-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From f7b968816fdff0c3ae3f113ed2404a9f5aac72e9 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v26 4/8] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  | 77 ++++------------------------------
 src/include/commands/copy.h    |  2 +-
 src/include/commands/copyapi.h | 62 +++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 70 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ce3dd252c32..96b5e144a1d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -36,67 +36,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -406,7 +345,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +392,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +426,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +451,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +459,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -904,12 +843,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 6b740d5b917..98aa5707102 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 36057b92417..1cb2815deab 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
@@ -56,6 +57,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.45.2

v26-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From c7eba0bf7bf4c42933b71d98aa6d519af0ce0121 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v26 2/8] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 504 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 492 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 9e2896f32ae..bac31315fcb 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 754cb496169..c84081c3ba3 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return COPY FROM routines for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d83..fdb506c58be 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +840,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1095,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f5382..f2409013fba 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eccc875d0e8..19aacc8ddd3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..1ca058c6add 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 8edb41cce2e..e09407c7463 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.45.2

v26-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From b95060713e5cfccc8b3db5acb34d352f18a8b1e2 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v26 1/8] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d96751..f81dadcc12b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return COPY TO routines for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..eccc875d0e8
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b54428b38cd..8edb41cce2e 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v26-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From b42052e4372871d10449ba2d70b738c6970d5d42 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v26 5/8] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c  | 12 ++++++++++++
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 96b5e144a1d..cb9bfa0053f 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -442,6 +442,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 1cb2815deab..030a82aca7f 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -116,8 +116,13 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.45.2

v26-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 38efc9937a0cff782683080bc8b9fbe62290ff6c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v26 6/8] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 52 ++++++++++++-------
 src/backend/commands/copyfrom.c               |  4 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copy.h                   |  3 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 ++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++++-
 8 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index d4906b44751..5be649c9c89 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -515,12 +515,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -529,17 +526,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c84081c3ba3..a4cdab75879 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -155,7 +155,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 793dd671935..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 98aa5707102..e07988a0c74 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,8 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* This is private in commands/copyfrom.c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 030a82aca7f..fa3d8d87760 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -129,6 +129,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 606c78f6878..4ed7c0b12db 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (format 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (format 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 9406b3be3d4..e805f7cb011 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (format 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (format 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.45.2

v26-0007-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 07638006a825fbd3c141902ad87736bd7ca00e7f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v26 7/8] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. This changes COPY_ prefix of CopySource enum values to
COPY_SOURCE_ prefix like the CopyDest enum values prefix change. For
example, COPY_FILE in CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY FROM format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   1 -
 src/include/commands/copyapi.h           | 166 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h | 166 -----------------------
 5 files changed, 173 insertions(+), 174 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index a4cdab75879..e1fef1b95a5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1704,7 +1704,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1832,7 +1832,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index fdb506c58be..1c68b0d2952 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -170,7 +170,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -238,7 +238,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -247,7 +247,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -330,7 +330,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1158,7 +1158,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index e07988a0c74..50af4b99258 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -91,7 +91,6 @@ typedef struct CopyFormatOptions
 								 * NULL) */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index fa3d8d87760..335584f8877 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "commands/trigger.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -171,4 +172,169 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1ca058c6add..23760eb0e02 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,174 +15,8 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copyapi.h"
-#include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v26-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 9a50895abd2db7b6d6d90f0a98c9370a809cb328 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v26 8/8] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 12 ++++++++++++
 src/include/commands/copyapi.h       |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 1c68b0d2952..0a7e7255b7d 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -729,6 +729,18 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 335584f8877..caba308533d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -335,6 +335,11 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

#192Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#190)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Nov 24, 2024 at 6:06 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBNfKDbJnu-zONNpG820ZXYC0fuTSLrJ-UdRqU4qp2wog@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 22 Nov 2024 13:01:06 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

@@ -1237,7 +1219,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
/*
* CopyReadLineText - inner loop of CopyReadLine for text mode
*/
-static pg_attribute_always_inline bool
+static bool
CopyReadLineText(CopyFromState cstate, bool is_csv)

Is this an intentional change?
CopyReadLineText() has "bool in_csv".

Yes, I'm not sure it's really necessary to make it inline since the
benchmark results don't show much difference. Probably this is because
the function has 'is_csv' in some 'if' branches but the compiler
cannot optimize out the whole 'if' branches as most 'if' branches
check 'is_csv' and other variables.

I see. If explicit "inline" isn't related to performance, we
don't need explicit "inline".

I've attached the v25 patches that squashed the minor changes I made
in v24 and incorporated all comments I got so far. I think these two
patches are in good shape. Could you rebase remaining patches on top
of them so that we can see the big picture of this feature?

OK. I'll work on it.

Regarding exposing the structs such as CopyToStateData, v22-0004 patch
moves most of all copy-related structs to copyapi.h from copyto.c,
copyfrom_internal.h, and copy.h, which seems odd to me. I think we can
expose CopyToStateData (and related structs) in a new file
copyto_internal.h and keep other structs in the original header files.

Custom COPY format extensions need to use
CopyToStateData/CopyFromStateData. For example,
CopyToStateData::rel is used to retrieve table schema. If we
move CopyToStateData to copyto_internal.h not copyapi.h,
custom COPY format extensions need to include
copyto_internal.h. I feel that it's strange that extensions
need to use internal headers.

What is your real concern? If you don't want to export
CopyToStateData/CopyFromStateData entirely, we can provide
accessors only for some members of them.

I'm not against exposing CopyToStateData and CopyFromStateData. My
concern is that if we move all copy-related structs to copyapi.h,
other copy-related files would need to include copyapi.h even if the
file is not related to copy format APIs. IMO copyapi.h should have
only copy-format-API-related variables structs such as CopyFromRoutine
and CopyToRoutine and functions that custom COPY format extension can
utilize to access data source and destination, such as CopyGetData().

When it comes to CopyToStateData and CopyFromStateData, I feel that
they have mixed fields of common fields (e.g., rel, num_errors, and
transition_capture) and format-specific fields (e.g., input_buf,
line_buf, and eol_type). While it makes sense to me that custom copy
format extensions can access the common fields, it seems odd to me
that they can access text-and-csv-format-specific fields such as
input_buf. We might want to sort out these fields but it could be a
huge task.

Also, I realized that CopyFromTextLikeOneRow() does input function
calls and handle soft errors based on ON_ERROR and LOG_VERBOSITY
options. I think these should be done in the core side.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#193Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#192)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBW5dEv=Gd2iF_BYNZGEsF=3KTG7fpq=vP5qwpC1CAOeA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 25 Nov 2024 23:10:50 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Custom COPY format extensions need to use
CopyToStateData/CopyFromStateData. For example,
CopyToStateData::rel is used to retrieve table schema. If we
move CopyToStateData to copyto_internal.h not copyapi.h,
custom COPY format extensions need to include
copyto_internal.h. I feel that it's strange that extensions
need to use internal headers.

What is your real concern? If you don't want to export
CopyToStateData/CopyFromStateData entirely, we can provide
accessors only for some members of them.

I'm not against exposing CopyToStateData and CopyFromStateData. My
concern is that if we move all copy-related structs to copyapi.h,
other copy-related files would need to include copyapi.h even if the
file is not related to copy format APIs. IMO copyapi.h should have
only copy-format-API-related variables structs such as CopyFromRoutine
and CopyToRoutine and functions that custom COPY format extension can
utilize to access data source and destination, such as CopyGetData().

When it comes to CopyToStateData and CopyFromStateData, I feel that
they have mixed fields of common fields (e.g., rel, num_errors, and
transition_capture) and format-specific fields (e.g., input_buf,
line_buf, and eol_type). While it makes sense to me that custom copy
format extensions can access the common fields, it seems odd to me
that they can access text-and-csv-format-specific fields such as
input_buf. We might want to sort out these fields but it could be a
huge task.

I understand you concern.

How about using Copy{To,From}StateData::opaque to store
text-and-csv-format-specific data? I feel that this
refactoring doesn't block the 0001/0002 patches. Do you
think that this is a blocker of the 0001/0002 patches?

I think that this may block the 0004/0007 patches that
export Copy{To,From}StateData. But we can work on it after
we merge the 0004/0007 patches. Which is preferred?

Also, I realized that CopyFromTextLikeOneRow() does input function
calls and handle soft errors based on ON_ERROR and LOG_VERBOSITY
options. I think these should be done in the core side.

How about extracting the following part in NextCopyFrom() as
a function and provide it for extensions?

----
Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);

cstate->num_errors++;

if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
{
/*
* Since we emit line number and column info in the below
* notice message, we suppress error context information
* other than the relation name.
*/
Assert(!cstate->relname_only);
cstate->relname_only = true;

if (cstate->cur_attval)
{
char *attval;

attval = CopyLimitPrintoutLength(cstate->cur_attval);
ereport(NOTICE,
errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
(unsigned long long) cstate->cur_lineno,
cstate->cur_attname,
attval));
pfree(attval);
}
else
ereport(NOTICE,
errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
(unsigned long long) cstate->cur_lineno,
cstate->cur_attname));

/* reset relname_only */
cstate->relname_only = false;
}
----

See the attached v27 patch set for this idea.

0001-0008 are almost same as the v26 patch set.
("format" -> "FORMAT" in COPY test changes are included.)

0009 exports the above code as
CopyFromSkipErrorRow(). Extensions should call it when they
use errsave() for a soft error in CopyFromOneRow callback.

Thanks,
--
kou

Attachments:

v27-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From b95060713e5cfccc8b3db5acb34d352f18a8b1e2 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v27 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f55e6d96751..f81dadcc12b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return COPY TO routines for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..eccc875d0e8
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b54428b38cd..8edb41cce2e 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -503,6 +503,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.45.2

v27-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From c7eba0bf7bf4c42933b71d98aa6d519af0ce0121 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v27 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 504 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 492 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 9e2896f32ae..bac31315fcb 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 754cb496169..c84081c3ba3 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return COPY FROM routines for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d1d43b53d83..fdb506c58be 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +840,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1095,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4002a7f5382..f2409013fba 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eccc875d0e8..19aacc8ddd3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index cad52fcc783..1ca058c6add 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 8edb41cce2e..e09407c7463 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -492,6 +492,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.45.2

v27-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 6cb25f8b8f76ff40a667485b09f5886a63f6d9bd Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v27 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 82 ++++++++++++++++---
 src/backend/commands/copyto.c                 |  4 +-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 251 insertions(+), 14 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 2d98ecf3f4e..d4906b44751 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,73 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +587,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f81dadcc12b..ce3dd252c32 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -176,7 +176,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 81df3bdf95f..428ab4f0d93
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index e189e9b79d2..25f24ab95d2 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index cbbe8acd382..959d0301c20 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7771,6 +7771,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index ceff66ccde1..793dd671935 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f2409013fba..6b740d5b917 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 19aacc8ddd3..36057b92417 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -24,6 +24,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index b665e55b657..103df1a7873 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index c829b619530..75b6ab1b6a9 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.45.2

v27-0004-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From d0d842e37c7ec59bf7c77df3e6518ce80ec59575 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v27 4/9] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  | 77 ++++------------------------------
 src/include/commands/copy.h    |  2 +-
 src/include/commands/copyapi.h | 62 +++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 70 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ce3dd252c32..96b5e144a1d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -36,67 +36,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -406,7 +345,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +392,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +426,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +451,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +459,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -904,12 +843,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 6b740d5b917..98aa5707102 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 36057b92417..1cb2815deab 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
@@ -56,6 +57,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.45.2

v27-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From ac79ec655da666e4f03ac865d15821f4ac883cc4 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v27 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c  | 12 ++++++++++++
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 96b5e144a1d..cb9bfa0053f 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -442,6 +442,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 1cb2815deab..030a82aca7f 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -116,8 +116,13 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.45.2

v27-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 859faaa4d19e3c659afec43267eae6b7788bf964 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v27 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 52 ++++++++++++-------
 src/backend/commands/copyfrom.c               |  4 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copy.h                   |  3 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 ++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++++-
 8 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index d4906b44751..5be649c9c89 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -515,12 +515,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -529,17 +526,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index c84081c3ba3..a4cdab75879 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -155,7 +155,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 793dd671935..37ebfa0908f 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 98aa5707102..e07988a0c74 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,8 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* This is private in commands/copyfrom.c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 030a82aca7f..fa3d8d87760 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -129,6 +129,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.45.2

v27-0007-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From 81cee5244c5f7bdd52745cea09c98991d47207f5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v27 7/9] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. This changes COPY_ prefix of CopySource enum values to
COPY_SOURCE_ prefix like the CopyDest enum values prefix change. For
example, COPY_FILE in CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY FROM format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   1 -
 src/include/commands/copyapi.h           | 166 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h | 166 -----------------------
 5 files changed, 173 insertions(+), 174 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index a4cdab75879..e1fef1b95a5 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1704,7 +1704,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1832,7 +1832,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index fdb506c58be..1c68b0d2952 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -170,7 +170,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -238,7 +238,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -247,7 +247,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -330,7 +330,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1158,7 +1158,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index e07988a0c74..50af4b99258 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -91,7 +91,6 @@ typedef struct CopyFormatOptions
 								 * NULL) */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index fa3d8d87760..335584f8877 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "commands/trigger.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -171,4 +172,169 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1ca058c6add..23760eb0e02 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,174 +15,8 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copyapi.h"
-#include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapper during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.45.2

v27-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 1500fa121c6d3028db4673ab595d2ba79c55cbf7 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v27 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 12 ++++++++++++
 src/include/commands/copyapi.h       |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 1c68b0d2952..0a7e7255b7d 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -729,6 +729,18 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 335584f8877..caba308533d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -335,6 +335,11 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 #endif							/* COPYAPI_H */
-- 
2.45.2

v27-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From 407dc990b071b7938606b2f8082c8e9a09652d6b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v27 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 82 ++++++++++++++++++-
 5 files changed, 199 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 0a7e7255b7d..713a000fe5f 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -852,6 +852,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -960,42 +1005,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index caba308533d..09585163e0d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -342,4 +342,6 @@ typedef struct CopyFromStateData
 
 extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..f0f53838aef 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -32,10 +32,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateRead(cstate, line, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.45.2

#194Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#191)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On Mon, Nov 25, 2024 at 2:02 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <20241125.110620.313152541320718947.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 25 Nov 2024 11:06:20 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've attached the v25 patches that squashed the minor changes I made
in v24 and incorporated all comments I got so far. I think these two
patches are in good shape. Could you rebase remaining patches on top
of them so that we can see the big picture of this feature?

OK. I'll work on it.

I've attached the v26 patch set:

0001: It's same as 0001 in the v25 patch set.
0002: It's same as 0002 in the v25 patch set.
0003: It's same as 0003 in the v23 patch set.
This parses the "format" option and adds support for
custom TO handler.
0004: It's same as 0004 in the v23 patch set.
This exports CopyToStateData. But the following
enums/structs/functions aren't moved to copyapi.h from
copy.h:
* CopyHeaderChoice
* CopyOnErrorChoice
* CopyLogVerbosityChoice
* CopyFormatOptions
* copy_data_dest_cb()
0005: It's same as 0005 in the v23 patch set.
This adds missing APIs to implement custom TO handler
as an extension.
0006: It's same as 0008 in the v23 patch set.
This adds support for custom FROM handler.
0007: It's same as 0009 in the v23 patch set.
This exports CopyFromStateData.
0008: It's same as 0010 in the v23 patch set.
This adds missing APIs to implement custom FROM handler
as an extension.

I've also updated https://github.com/kou/pg-copy-arrow for
the current API.

I think that we can merge only 0001/0002 as the first
step. Because they don't change the current behavior and
they improve performance. We can merge other patches after
that.

Regarding exposing the structs such as CopyToStateData, v22-0004 patch
moves most of all copy-related structs to copyapi.h from copyto.c,
copyfrom_internal.h, and copy.h, which seems odd to me. I think we can
expose CopyToStateData (and related structs) in a new file
copyto_internal.h and keep other structs in the original header files.

Custom COPY format extensions need to use
CopyToStateData/CopyFromStateData. For example,
CopyToStateData::rel is used to retrieve table schema. If we
move CopyToStateData to copyto_internal.h not copyapi.h,
custom COPY format extensions need to include
copyto_internal.h. I feel that it's strange that extensions
need to use internal headers.

What is your real concern? If you don't want to export
CopyToStateData/CopyFromStateData entirely, we can provide
accessors only for some members of them.

The v26 patch set still exports
CopyToStateData/CopyFromStateData in copyapi.h not
copy{to,from}_internal.h. But I didn't move the following
enums/structs/functions:

* CopyHeaderChoice
* CopyOnErrorChoice
* CopyLogVerbosityChoice
* CopyFormatOptions
* copy_data_dest_cb()

What do you think about this approach?

Thanks,
--
kou

I just gave this another round of benchmarking tests. I'd like to
share the number,
since COPY TO has some performance drawbacks, I test only COPY TO. I
use the run.sh Tomas provided earlier but use pgbench with a custom script, you
can find it here[0]https://github.com/pghacking/scripts/tree/main/extensible_copy.

I tested 3 branches:

1. the master branch
2. all v26 patch sets applied
3. Emitting JSON to file using COPY TO v13 patch set[1]/messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com, this add some
if branch in CopyOneRowTo, so I was expecting this slower than master

2 can be about -3%~+3% compared to 1, but what surprised me is that 3
is always better than 1 & 2.

I reviewed the patch set of 3 and I don't see any magic.

You can see the detailed results here[2]https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing, I can not upload files so I
just shared the google doc link, ping me if you can not open the link.

[0]: https://github.com/pghacking/scripts/tree/main/extensible_copy
[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
[2]: https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing

--
Regards
Junwang Zhao

#195Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#194)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3LUBcvjwqgt6AijJmg67YN_b_NZ4Kzoxc_dH4rpAq0pKg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 27 Nov 2024 19:49:17 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I just gave this another round of benchmarking tests. I'd like to
share the number,
since COPY TO has some performance drawbacks, I test only COPY TO. I
use the run.sh Tomas provided earlier but use pgbench with a custom script, you
can find it here[0].

I tested 3 branches:

1. the master branch
2. all v26 patch sets applied
3. Emitting JSON to file using COPY TO v13 patch set[1], this add some
if branch in CopyOneRowTo, so I was expecting this slower than master

2 can be about -3%~+3% compared to 1, but what surprised me is that 3
is always better than 1 & 2.

I reviewed the patch set of 3 and I don't see any magic.

You can see the detailed results here[2], I can not upload files so I
just shared the google doc link, ping me if you can not open the link.

[0]: https://github.com/pghacking/scripts/tree/main/extensible_copy
[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
[2]: https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing

Thanks for sharing your numbers.

1. and 2. shows that there is at least no significant
performance regression.

I see the patch set of 3. and I think that the result
(there is no performance difference between 1. and 3.) isn't
strange. The patch set adds some if branches but they aren't
used with "text" format at least in per row process.

Thanks,
--
kou

#196Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#195)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Nov 28, 2024 at 2:16 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3LUBcvjwqgt6AijJmg67YN_b_NZ4Kzoxc_dH4rpAq0pKg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 27 Nov 2024 19:49:17 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I just gave this another round of benchmarking tests. I'd like to
share the number,
since COPY TO has some performance drawbacks, I test only COPY TO. I
use the run.sh Tomas provided earlier but use pgbench with a custom script, you
can find it here[0].

I tested 3 branches:

1. the master branch
2. all v26 patch sets applied
3. Emitting JSON to file using COPY TO v13 patch set[1], this add some
if branch in CopyOneRowTo, so I was expecting this slower than master

2 can be about -3%~+3% compared to 1, but what surprised me is that 3
is always better than 1 & 2.

I reviewed the patch set of 3 and I don't see any magic.

You can see the detailed results here[2], I can not upload files so I
just shared the google doc link, ping me if you can not open the link.

[0]: https://github.com/pghacking/scripts/tree/main/extensible_copy
[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
[2]: https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing

Thanks for sharing your numbers.

1. and 2. shows that there is at least no significant
performance regression.

Agreed.

I see the patch set of 3. and I think that the result
(there is no performance difference between 1. and 3.) isn't
strange. The patch set adds some if branches but they aren't
used with "text" format at least in per row process.

It is not used in "text" format, but it adds some assembly code
to the CopyOneRowTo function, so this will have some impact
on the cpu i cache I guess.

There is difference between 1 and 3, 3 is always better than 1
upto 4% improvement, I forgot to mention that the comparisons
are in *sheet2*.

Thanks,
--
kou

--
Regards
Junwang Zhao

#197Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#196)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3+BmNeEOLmApOCyktYbiZW=s95dvpod_FxJS+3ieVZQ7w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 28 Nov 2024 19:02:57 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I tested 3 branches:

1. the master branch
2. all v26 patch sets applied
3. Emitting JSON to file using COPY TO v13 patch set[1], this add some
if branch in CopyOneRowTo, so I was expecting this slower than master

You can see the detailed results here[2], I can not upload files so I
just shared the google doc link, ping me if you can not open the link.

[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
[2]: https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing

Thanks for sharing your numbers.

1. and 2. shows that there is at least no significant
performance regression.

Agreed.

Can we focus on only 1. and 2. in this thread?

I see the patch set of 3. and I think that the result
(there is no performance difference between 1. and 3.) isn't
strange. The patch set adds some if branches but they aren't
used with "text" format at least in per row process.

It is not used in "text" format, but it adds some assembly code
to the CopyOneRowTo function, so this will have some impact
on the cpu i cache I guess.

There is difference between 1 and 3, 3 is always better than 1
upto 4% improvement

Can we discuss 1. and 3. in the [1] thread?

(Anyway, we may want to confirm whether these numbers are
reproducible or not as the first step.)

I forgot to mention that the comparisons
are in *sheet2*.

Thanks. I missed it.

Thanks,
--
kou

#198Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#197)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Nov 29, 2024 at 9:07 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAEG8a3+BmNeEOLmApOCyktYbiZW=s95dvpod_FxJS+3ieVZQ7w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 28 Nov 2024 19:02:57 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

I tested 3 branches:

1. the master branch
2. all v26 patch sets applied
3. Emitting JSON to file using COPY TO v13 patch set[1], this add some
if branch in CopyOneRowTo, so I was expecting this slower than master

You can see the detailed results here[2], I can not upload files so I
just shared the google doc link, ping me if you can not open the link.

[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
[2]: https://docs.google.com/spreadsheets/d/1wJPXZF4LHe34X9IU1pLG7rI9sCkSy2dEkdj7w7avTqM/edit?usp=sharing

Thanks for sharing your numbers.

1. and 2. shows that there is at least no significant
performance regression.

Agreed.

Can we focus on only 1. and 2. in this thread?

I see the patch set of 3. and I think that the result
(there is no performance difference between 1. and 3.) isn't
strange. The patch set adds some if branches but they aren't
used with "text" format at least in per row process.

It is not used in "text" format, but it adds some assembly code
to the CopyOneRowTo function, so this will have some impact
on the cpu i cache I guess.

There is difference between 1 and 3, 3 is always better than 1
upto 4% improvement

Can we discuss 1. and 3. in the [1] thread?

This thread and [1] thread are kind of interleaved, I chose this thread
to share the numbers because I think this feature should be committed
first and then adapt the *copy to json* as a contrib module.

Committers on this thread seem worried about the performance
drawback, so what I tried to do is that *if 2 is slightly worse than 1,
but better than 3*, then we can commit 2 first, but I did not get
the expected number.

(Anyway, we may want to confirm whether these numbers are
reproducible or not as the first step.)

I forgot to mention that the comparisons
are in *sheet2*.

Thanks. I missed it.

Thanks,
--
kou

--
Regards
Junwang Zhao

#199Sutou Kouhei
kou@clear-code.com
In reply to: Junwang Zhao (#198)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAEG8a3+-3fAmiwD5NmE7W4j5-=HLs2OEexQNW9-fB=j=mdxgDQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 29 Nov 2024 10:15:04 +0800,
Junwang Zhao <zhjwpku@gmail.com> wrote:

This thread and [1] thread are kind of interleaved, I chose this thread
to share the numbers because I think this feature should be committed
first and then adapt the *copy to json* as a contrib module.

I agree with you.

Committers on this thread seem worried about the performance
drawback, so what I tried to do is that *if 2 is slightly worse than 1,
but better than 3*, then we can commit 2 first, but I did not get
the expected number.

Could you break down which patch in the v13 patch set[1]/messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com
affected? If we can find which change improves performance,
we can use the approach in this patch set too.

[1]: /messages/by-id/CACJufxH8J0uD-inukxAmd3TVwt-b-y7d7hLGSBdEdLXFGJLyDA@mail.gmail.com

Thanks,
--
kou

#200Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#199)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

I noticed that the last patch set (v27) can't be applied to
the current master. I've rebased on the current master and
created v28 patch set. No code change.

Thanks,
--
kou

Attachments:

v28-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From 016ccfc63d2faa441a6996e3dcfd3cdbff7c185f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v28 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99cb23cb347..a885779666b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return COPY TO routines for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..eccc875d0e8
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index d5aa5c295ae..18b2595300e 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -508,6 +508,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.47.1

v28-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From 366b5d3aea0d727f113bdd6b0388e0ce86e0868c Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v28 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 504 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 492 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 678e754b2b9..323c43dca4a 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0cbd05f5602..2e88f19861d 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return COPY FROM routines for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..65f20d332ee 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +840,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1095,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eccc875d0e8..19aacc8ddd3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..e1affe3dfa7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 18b2595300e..25a96d65e91 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -497,6 +497,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.47.1

v28-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 8e757ddfc36be227f76f6739632b41cb227ad374 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v28 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 82 ++++++++++++++++---
 src/backend/commands/copyto.c                 |  4 +-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 251 insertions(+), 14 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..332dfdc9a53 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,73 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* default format */ return;
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +587,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index a885779666b..58ffded4370 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -176,7 +176,9 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyToRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts.binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 7c012c27f88..5d53d32c4a7
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 18560755d26..74884eb9d34 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7784,6 +7784,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7bc044e2816..b869431f086 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 19aacc8ddd3..36057b92417 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -24,6 +24,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index f3dd5461fef..09f7443195f 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 4f544a042d4..bf25658793d 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.1

v28-0004-Export-CopyToStateData.patchtext/x-patch; charset=us-asciiDownload
From ed93a031732deabd7fb923b11f74b42f393d9172 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v28 4/9] Export CopyToStateData

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c  | 77 ++++------------------------------
 src/include/commands/copy.h    |  2 +-
 src/include/commands/copyapi.h | 62 +++++++++++++++++++++++++++
 3 files changed, 71 insertions(+), 70 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 58ffded4370..1e75e07dc0b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -36,67 +36,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -406,7 +345,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +392,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +426,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +451,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +459,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -904,12 +843,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index b869431f086..26b0f410918 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine (can be NULL) */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 36057b92417..1cb2815deab 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
@@ -56,6 +57,67 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.47.1

v28-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 45eb64e68925fa895dc7efcbe38ba11f371e04b2 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v28 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c  | 12 ++++++++++++
 src/include/commands/copyapi.h |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 1e75e07dc0b..7487190bdd6 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -442,6 +442,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 1cb2815deab..030a82aca7f 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -116,8 +116,13 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.47.1

v28-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From f0ac9317f3af79369f51ad793211aed606bf23de Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v28 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 52 ++++++++++++-------
 src/backend/commands/copyfrom.c               |  4 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copy.h                   |  3 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 ++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++++-
 8 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 332dfdc9a53..a50f99ab60d 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -515,12 +515,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -529,17 +526,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 2e88f19861d..1f502d746f9 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -155,7 +155,9 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(CopyFormatOptions opts)
 {
-	if (opts.csv_mode)
+	if (opts.routine)
+		return (const CopyFromRoutine *) opts.routine;
+	else if (opts.csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts.binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 26b0f410918..f764a6ac829 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,8 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine (can be NULL) */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine (can be
+								 * NULL) */
 } CopyFormatOptions;
 
 /* This is private in commands/copyfrom.c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 030a82aca7f..fa3d8d87760 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -129,6 +129,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.1

v28-0007-Export-CopyFromStateData.patchtext/x-patch; charset=us-asciiDownload
From ff83119977d4a87bd1e15315ca077042c5e37732 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v28 7/9] Export CopyFromStateData

It's for custom COPY FROM format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopySource
enum values. This changes COPY_ prefix of CopySource enum values to
COPY_SOURCE_ prefix like the CopyDest enum values prefix change. For
example, COPY_FILE in CopySource is renamed to COPY_SOURCE_FILE.

Note that this isn't enough to implement custom COPY FROM format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY FROM format handler
2. Export CopyReadBinaryData() to read the next data
---
 src/backend/commands/copyfrom.c          |   4 +-
 src/backend/commands/copyfromparse.c     |  10 +-
 src/include/commands/copy.h              |   1 -
 src/include/commands/copyapi.h           | 166 +++++++++++++++++++++++
 src/include/commands/copyfrom_internal.h | 166 -----------------------
 5 files changed, 173 insertions(+), 174 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 1f502d746f9..401cef7cf99 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1704,7 +1704,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1832,7 +1832,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 65f20d332ee..5fcdbea2c2a 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -170,7 +170,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -238,7 +238,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -247,7 +247,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -330,7 +330,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1158,7 +1158,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index f764a6ac829..029a1538f7c 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -91,7 +91,6 @@ typedef struct CopyFormatOptions
 								 * NULL) */
 } CopyFormatOptions;
 
-/* This is private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index fa3d8d87760..9358515c6f6 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "commands/trigger.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -171,4 +172,169 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+
+	EolType		eol_type;		/* EOL type of input */
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapped during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool	   *defaults;		/* if DEFAULT marker was found for
+								 * corresponding att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	/*
+	 * These variables are used to reduce overhead in COPY FROM.
+	 *
+	 * attribute_buf holds the separated, de-escaped text for each field of
+	 * the current line.  The CopyReadAttributes functions return arrays of
+	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
+	 * the buffer on each cycle.
+	 *
+	 * In binary COPY FROM, attribute_buf holds the binary data for the
+	 * current field, but the usage is otherwise similar.
+	 */
+	StringInfoData attribute_buf;
+
+	/* field raw data pointers found by COPY FROM */
+
+	int			max_fields;
+	char	  **raw_fields;
+
+	/*
+	 * Similarly, line_buf holds the whole input line being processed. The
+	 * input cycle is first to read the whole line into line_buf, and then
+	 * extract the individual attribute fields into attribute_buf.  line_buf
+	 * is preserved unmodified so that we can display it in error messages if
+	 * appropriate.  (In binary mode, line_buf is not used.)
+	 */
+	StringInfoData line_buf;
+	bool		line_buf_valid; /* contains the row being processed? */
+
+	/*
+	 * input_buf holds input data, already converted to database encoding.
+	 *
+	 * In text mode, CopyReadLine parses this data sufficiently to locate line
+	 * boundaries, then transfers the data to line_buf. We guarantee that
+	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
+	 * mode, input_buf is not used.)
+	 *
+	 * If encoding conversion is not required, input_buf is not a separate
+	 * buffer but points directly to raw_buf.  In that case, input_buf_len
+	 * tracks the number of bytes that have been verified as valid in the
+	 * database encoding, and raw_buf_len is the total number of bytes stored
+	 * in the buffer.
+	 */
+#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
+	char	   *input_buf;
+	int			input_buf_index;	/* next byte to process */
+	int			input_buf_len;	/* total # of bytes stored */
+	bool		input_reached_eof;	/* true if we reached EOF */
+	bool		input_reached_error;	/* true if a conversion error happened */
+	/* Shorthand for number of unconsumed bytes available in input_buf */
+#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+
+	/*
+	 * raw_buf holds raw input data read from the data source (file or client
+	 * connection), not yet converted to the database encoding.  Like with
+	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
+	 */
+#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
+	char	   *raw_buf;
+	int			raw_buf_index;	/* next byte to process */
+	int			raw_buf_len;	/* total # of bytes stored */
+	bool		raw_reached_eof;	/* true if we reached EOF */
+
+	/* Shorthand for number of unconsumed bytes available in raw_buf */
+#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index e1affe3dfa7..8cc71c12b5d 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,174 +15,8 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copyapi.h"
-#include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
-/*
- * Represents the different source cases we need to worry about at
- * the bottom level
- */
-typedef enum CopySource
-{
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
-
-	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
-	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapped during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
-	bool	   *defaults;		/* if DEFAULT marker was found for
-								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
-
-	/*
-	 * These variables are used to reduce overhead in COPY FROM.
-	 *
-	 * attribute_buf holds the separated, de-escaped text for each field of
-	 * the current line.  The CopyReadAttributes functions return arrays of
-	 * pointers into this buffer.  We avoid palloc/pfree overhead by re-using
-	 * the buffer on each cycle.
-	 *
-	 * In binary COPY FROM, attribute_buf holds the binary data for the
-	 * current field, but the usage is otherwise similar.
-	 */
-	StringInfoData attribute_buf;
-
-	/* field raw data pointers found by COPY FROM */
-
-	int			max_fields;
-	char	  **raw_fields;
-
-	/*
-	 * Similarly, line_buf holds the whole input line being processed. The
-	 * input cycle is first to read the whole line into line_buf, and then
-	 * extract the individual attribute fields into attribute_buf.  line_buf
-	 * is preserved unmodified so that we can display it in error messages if
-	 * appropriate.  (In binary mode, line_buf is not used.)
-	 */
-	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
-
-	/*
-	 * input_buf holds input data, already converted to database encoding.
-	 *
-	 * In text mode, CopyReadLine parses this data sufficiently to locate line
-	 * boundaries, then transfers the data to line_buf. We guarantee that
-	 * there is a \0 at input_buf[input_buf_len] at all times.  (In binary
-	 * mode, input_buf is not used.)
-	 *
-	 * If encoding conversion is not required, input_buf is not a separate
-	 * buffer but points directly to raw_buf.  In that case, input_buf_len
-	 * tracks the number of bytes that have been verified as valid in the
-	 * database encoding, and raw_buf_len is the total number of bytes stored
-	 * in the buffer.
-	 */
-#define INPUT_BUF_SIZE 65536	/* we palloc INPUT_BUF_SIZE+1 bytes */
-	char	   *input_buf;
-	int			input_buf_index;	/* next byte to process */
-	int			input_buf_len;	/* total # of bytes stored */
-	bool		input_reached_eof;	/* true if we reached EOF */
-	bool		input_reached_error;	/* true if a conversion error happened */
-	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
-
-	/*
-	 * raw_buf holds raw input data read from the data source (file or client
-	 * connection), not yet converted to the database encoding.  Like with
-	 * 'input_buf', we guarantee that there is a \0 at raw_buf[raw_buf_len].
-	 */
-#define RAW_BUF_SIZE 65536		/* we palloc RAW_BUF_SIZE+1 bytes */
-	char	   *raw_buf;
-	int			raw_buf_index;	/* next byte to process */
-	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
-
-	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
-
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
-- 
2.47.1

v28-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 4a52c7c6917f4fe23880aacf3ada904d7bdb3943 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v28 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyReadBinaryData() to read the next data as
  CopyFromStateRead()
---
 src/backend/commands/copyfromparse.c | 12 ++++++++++++
 src/include/commands/copyapi.h       |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 5fcdbea2c2a..d79b6ebe8a3 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -729,6 +729,18 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyReadBinaryData() for extensions. We want to keep
+ * CopyReadBinaryData() as a static function for
+ * optimization. CopyReadBinaryData() calls in this file may be optimized by
+ * a compiler.
+ */
+int
+CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes)
+{
+	return CopyReadBinaryData(cstate, dest, nbytes);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 9358515c6f6..6f158272829 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -335,6 +335,11 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
+extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
+
 #endif							/* COPYAPI_H */
-- 
2.47.1

v28-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From c16a63d3b3db3e5ee236f05affee2261a8f86e97 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v28 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 82 ++++++++++++++++++-
 5 files changed, 199 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d79b6ebe8a3..1f78c5b6a9a 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -852,6 +852,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -960,42 +1005,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 6f158272829..9aba51a242b 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -342,4 +342,6 @@ typedef struct CopyFromStateData
 
 extern int	CopyFromStateRead(CopyFromState cstate, char *dest, int nbytes);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..f0f53838aef 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -32,10 +32,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateRead(cstate, line, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.1

#201Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#200)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 23, 2025 at 1:12 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

I noticed that the last patch set (v27) can't be applied to
the current master. I've rebased on the current master and
created v28 patch set. No code change.

Thank you for updating the patch!

While 0001 and 0002 look good to me overall, we still need to polish
subsequent patches. Here are review comments:

---
I still find that it would not be a good idea to move all copy-related
struct definitions to copyapi.h because we need to include copyapi.h
file into a .c file even if the file is not related to the custom copy
format routines. I think that copyapi.h should have only the
definitions of CopyToRoutine and CopyFromRoutine as well as some
functions related to the custom copy format. Here is an idea:

- CopyToState and CopyFromState are defined in copyto_internal.h (new
file) and copyfrom_internal.h, respectively.
- These two files #include's copy.h and other necessary header files.
- copyapi.h has only CopyToRoutine and CopyFromRoutine and #include's
both copyfrom_internal.h and copyto_internal.h.
- copyto.c, copyfrom.c and copyfromparse.c #include copyapi.h

Some advantages of this idea:

- we can keep both CopyToState and CopyFromState private in _internal.h files.
- custom format extension can include copyapi.h to provide a custom
copy format routine and to access the copy state data.
- copy-related .c files won't need to include copyapi.h if they don't
use custom copy format routines.

---
The 0008 patch introduces CopyFromStateRead(). While it would be a
good start, I think we can consider sorting out low-level
communication functions more. For example, CopyReadBinaryData() uses
the internal 64kB buffer but some custom copy format extensions might
want to use a larger buffer in its own implementation, which would
require exposing CopyGetData() etc. Given that we might expose more
functions to provide more ways for extensions, we might want to rename
CopyFromStateRead().

---
While we get the format routines for custom formats in
ProcessCopyOptionFormat(), we do that for built-in formats in
BeginCopyTo(), which seems odd to me. I think we can have
CopyToGetRoutine() responsible for getting CopyToRoutine for built-in
formats as well as custom format. The same is true for
CopyFromRoutine.

---
Copy[To|From]Routine for built-in formats are missing to set the node type.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#202Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#201)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDyBJrCsh5vNFWcRmS0_XKCCCP4gLzZnLCayYccLpaBfw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 28 Jan 2025 15:00:03 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

While 0001 and 0002 look good to me overall, we still need to polish
subsequent patches. Here are review comments:

I attached the v29 patch set that applied your suggestions:

Refactoring:
0001-0002: There are some trivial changes (copyright year
change and some comment fixes)

COPY TO related:
0003: Applied your copyto_internal.h related,
CopyToGetRoutine() related and built-in CopyToRoutine
suggestions
0004: Applied your copyto_internal.h related suggestion
0005: No change

COPY FROM related:
0006: Applied your copyfrom_internal.h related,
CopyFromGetRoutine() related and built-in CopyFromRoutine
suggestions
0007: Applied your copyfrom_internal.h related suggestion
0008: Applied your CopyFromStateRead() related suggestion
0009: No change

I still find that it would not be a good idea to move all copy-related
struct definitions to copyapi.h because we need to include copyapi.h
file into a .c file even if the file is not related to the custom copy
format routines. I think that copyapi.h should have only the
definitions of CopyToRoutine and CopyFromRoutine as well as some
functions related to the custom copy format. Here is an idea:

- CopyToState and CopyFromState are defined in copyto_internal.h (new
file) and copyfrom_internal.h, respectively.
- These two files #include's copy.h and other necessary header files.
- copyapi.h has only CopyToRoutine and CopyFromRoutine and #include's
both copyfrom_internal.h and copyto_internal.h.
- copyto.c, copyfrom.c and copyfromparse.c #include copyapi.h

Some advantages of this idea:

- we can keep both CopyToState and CopyFromState private in _internal.h files.
- custom format extension can include copyapi.h to provide a custom
copy format routine and to access the copy state data.
- copy-related .c files won't need to include copyapi.h if they don't
use custom copy format routines.

Hmm. I thought Copy{To,From}State are "public" API not
"private" API for extensions. Because extensions need to use
at least Copy{To,From}State::opaque directly. If we want to
make Copy{To,From}State private, I think that we should
provide getter/setter for needed members of
Copy{To,From}State such as
Copy{To,From}State{Get,Set}Opaque().

It's a design in the v2 patch set:
/messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com

We discussed that we can make CopyToState public:
/messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com

What does "private" mean here? I thought that it means that
"PostgreSQL itself can use it". But it seems that you mean
that "PostgreSQL itself and custom format extensions can use
it but other extensions can't use it".

I'm not familiar with "_internal.h" in PostgreSQL but is
"_internal.h" for the latter "private" mean?

The 0008 patch introduces CopyFromStateRead(). While it would be a
good start, I think we can consider sorting out low-level
communication functions more. For example, CopyReadBinaryData() uses
the internal 64kB buffer but some custom copy format extensions might
want to use a larger buffer in its own implementation, which would
require exposing CopyGetData() etc. Given that we might expose more
functions to provide more ways for extensions, we might want to rename
CopyFromStateRead().

This suggests that we just need a low-level CopyGetData()
not a high-level CopyReadBinaryData() as the first step,
right?

I agree that we should start from a minimal API set.

I've renamed CopyFromStateRead() to CopyFromStateGetData()
because it wraps CopyGetData() now.

While we get the format routines for custom formats in
ProcessCopyOptionFormat(), we do that for built-in formats in
BeginCopyTo(), which seems odd to me. I think we can have
CopyToGetRoutine() responsible for getting CopyToRoutine for built-in
formats as well as custom format. The same is true for
CopyFromRoutine.

I like the current design because we don't need to export
CopyToGetBuiltinRoutine() (we can use static for
CopyToGetBuiltinRoutine()) but I applied your
suggestion. Because it's not a strong opinion.

Copy[To|From]Routine for built-in formats are missing to set the node type.

Oh, sorry. I missed this.

Thanks,
--
kou

Attachments:

v29-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From eef8c0bc18a489fea352db242dd9e16003132243 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v29 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99cb23cb347..26c67ddc351 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..be29e3fbdef
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index a2644a2e653..1cbb3628857 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -508,6 +508,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.47.1

v29-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From a4e1392e26f96a645bb327119838830c553a7c69 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v29 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 504 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 492 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 678e754b2b9..323c43dca4a 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0cbd05f5602..917fa6605ef 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..65f20d332ee 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +840,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1095,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index be29e3fbdef..51e131e5e8a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..e1affe3dfa7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1cbb3628857..afdafefeb9b 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -497,6 +497,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.47.1

v29-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From cb4937aed8565e620715e03ae3b469341ab5ae65 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v29 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 97 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 20 ++--
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  4 +-
 src/include/commands/copyto_internal.h        | 21 ++++
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 +++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 +++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 +
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 21 files changed, 295 insertions(+), 24 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/include/commands/copyto_internal.h
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..9500156b163 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,7 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,79 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	bool		isBuiltin;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	isBuiltin = true;
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* "csv_mode == false && binary == false" means "text" */ ;
+	else if (strcmp(format, "csv") == 0)
+		opts_out->csv_mode = true;
+	else if (strcmp(format, "binary") == 0)
+		opts_out->binary = true;
+	else
+		isBuiltin = false;
+	if (isBuiltin)
+	{
+		if (!is_from)
+			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +593,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -685,6 +747,13 @@ ProcessCopyOptions(ParseState *pstate,
 					 parser_errposition(pstate, defel->location)));
 	}
 
+	/* If format option isn't specified, we use a built-in routine. */
+	if (!format_specified)
+	{
+		if (!is_from)
+			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
+	}
+
 	/*
 	 * Check for incompatible options (must do these three before inserting
 	 * defaults)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 26c67ddc351..f7f44b368b7 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,23 +168,23 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
 	.CopyToEnd = CopyToBinaryEnd,
 };
 
-/* Return a COPY TO routine for the given options */
-static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+/* Return a built-in COPY TO routine for the given options */
+const CopyToRoutine *
+CopyToGetBuiltinRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyToRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -703,7 +705,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = (const CopyToRoutine *) cstate->opts.routine;
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 7c012c27f88..5d53d32c4a7
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 5b8c2ad2a54..b231e7a041e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7803,6 +7803,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7bc044e2816..2a90b39b6f6 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 51e131e5e8a..12e4b1d47a7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,7 +14,7 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
-#include "commands/copy.h"
+#include "commands/copyto_internal.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
@@ -24,6 +24,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..f95d8da8e3e
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,21 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+
+const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
+
+#endif							/* COPYTO_INTERNAL_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index f3dd5461fef..09f7443195f 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 4f544a042d4..bf25658793d 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.1

v29-0004-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From d17d5dae6865de82997a8511fdc097b1c64ccd73 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v29 4/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 77 +++-----------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyapi.h         |  2 -
 src/include/commands/copyto_internal.h | 64 +++++++++++++++++++++
 4 files changed, 73 insertions(+), 72 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f7f44b368b7..91fa46ddf6f 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -36,67 +36,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -406,7 +345,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +392,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +426,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +451,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +459,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -904,12 +843,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 2a90b39b6f6..ef3dc02c56a 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 12e4b1d47a7..5d071b378d6 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,8 +15,6 @@
 #define COPYAPI_H
 
 #include "commands/copyto_internal.h"
-#include "executor/tuptable.h"
-#include "nodes/execnodes.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index f95d8da8e3e..2df53dda8a0 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -15,6 +15,70 @@
 #define COPYTO_INTERNAL_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
 
 const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
 
-- 
2.47.1

v29-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 6cc082a9398998aa37dbc57568ffa784c9cd7625 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v29 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 91fa46ddf6f..da281f32950 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -442,6 +442,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5d071b378d6..f8167af4c79 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -54,6 +54,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 2df53dda8a0..4b82372691e 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
-- 
2.47.1

v29-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 8bab77b24f3795ea7c1f5ee16860348998355ccb Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v29 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 60 ++++++++++++-------
 src/backend/commands/copyfrom.c               | 23 +++----
 src/backend/commands/copyfromparse.c          |  2 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copy.h                   |  2 +-
 src/include/commands/copyapi.h                |  3 +
 src/include/commands/copyfrom_internal.h      |  6 +-
 .../expected/test_copy_format.out             | 10 +++-
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++-
 10 files changed, 107 insertions(+), 41 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 9500156b163..10f80ef3654 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -515,18 +515,17 @@ ProcessCopyOptionFormat(ParseState *pstate,
 		isBuiltin = false;
 	if (isBuiltin)
 	{
-		if (!is_from)
+		if (is_from)
+			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
+		else
 			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
 		return;
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -535,17 +534,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
@@ -750,7 +766,9 @@ ProcessCopyOptions(ParseState *pstate,
 	/* If format option isn't specified, we use a built-in routine. */
 	if (!format_specified)
 	{
-		if (!is_from)
+		if (is_from)
+			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
+		else
 			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
 	}
 
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 917fa6605ef..23027a664ec 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,8 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
-#include "commands/copyfrom_internal.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
@@ -129,6 +128,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +137,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,23 +146,23 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
 	.CopyFromEnd = CopyFromBinaryEnd,
 };
 
-/* Return a COPY FROM routine for the given options */
-static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+/* Return a built-in COPY FROM routine for the given options */
+const CopyFromRoutine *
+CopyFromGetBuiltinRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1567,7 +1568,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = (const CopyFromRoutine *) cstate->opts.routine;
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 65f20d332ee..4e6683eb9da 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copyfrom_internal.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
 #include "libpq/libpq.h"
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index ef3dc02c56a..586d6c0fe2e 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to]_internal.h */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index f8167af4c79..bf933069fea 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
@@ -62,6 +63,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index e1affe3dfa7..9b3b8336b67 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copyapi.h"
+#include "commands/copy.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -59,7 +59,7 @@ typedef enum CopyInsertMethod
 typedef struct CopyFromStateData
 {
 	/* format routine */
-	const CopyFromRoutine *routine;
+	const struct CopyFromRoutine *routine;
 
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
@@ -194,4 +194,6 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+const struct CopyFromRoutine *CopyFromGetBuiltinRoutine(CopyFormatOptions *opts);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.1

v29-0007-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From b96cc379092fd7e177fa8d65aa56796c1b7332be Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v29 7/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 23027a664ec..3f6b0031d94 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1703,7 +1703,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1831,7 +1831,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 4e6683eb9da..f7982bf692f 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -170,7 +170,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -238,7 +238,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -247,7 +247,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -330,7 +330,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1158,7 +1158,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 9b3b8336b67..3743b11faa4 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.1

v29-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From b52208e7f5292bcff38c353fbf1bba48a1f429d8 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v29 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f7982bf692f..650b6b2382b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -729,6 +729,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index bf933069fea..d1a1dbeb178 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -105,4 +105,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3743b11faa4..a65bbbc962e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.1

v29-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From 7496b8bcceb5434a7005fbdf2ecea485f82b9fde Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v29 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 82 ++++++++++++++++++-
 5 files changed, 199 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 650b6b2382b..b016f43a711 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -851,6 +851,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -959,42 +1004,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d1a1dbeb178..389f887b2c1 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -107,4 +107,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..f0f53838aef 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -32,10 +32,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateRead(cstate, line, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.1

#203Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#202)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Jan 30, 2025 at 7:42 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDyBJrCsh5vNFWcRmS0_XKCCCP4gLzZnLCayYccLpaBfw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 28 Jan 2025 15:00:03 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

While 0001 and 0002 look good to me overall, we still need to polish
subsequent patches. Here are review comments:

I attached the v29 patch set that applied your suggestions:

Refactoring:
0001-0002: There are some trivial changes (copyright year
change and some comment fixes)

COPY TO related:
0003: Applied your copyto_internal.h related,
CopyToGetRoutine() related and built-in CopyToRoutine
suggestions
0004: Applied your copyto_internal.h related suggestion
0005: No change

COPY FROM related:
0006: Applied your copyfrom_internal.h related,
CopyFromGetRoutine() related and built-in CopyFromRoutine
suggestions
0007: Applied your copyfrom_internal.h related suggestion
0008: Applied your CopyFromStateRead() related suggestion
0009: No change

I still find that it would not be a good idea to move all copy-related
struct definitions to copyapi.h because we need to include copyapi.h
file into a .c file even if the file is not related to the custom copy
format routines. I think that copyapi.h should have only the
definitions of CopyToRoutine and CopyFromRoutine as well as some
functions related to the custom copy format. Here is an idea:

- CopyToState and CopyFromState are defined in copyto_internal.h (new
file) and copyfrom_internal.h, respectively.
- These two files #include's copy.h and other necessary header files.
- copyapi.h has only CopyToRoutine and CopyFromRoutine and #include's
both copyfrom_internal.h and copyto_internal.h.
- copyto.c, copyfrom.c and copyfromparse.c #include copyapi.h

Some advantages of this idea:

- we can keep both CopyToState and CopyFromState private in _internal.h files.
- custom format extension can include copyapi.h to provide a custom
copy format routine and to access the copy state data.
- copy-related .c files won't need to include copyapi.h if they don't
use custom copy format routines.

Hmm. I thought Copy{To,From}State are "public" API not
"private" API for extensions. Because extensions need to use
at least Copy{To,From}State::opaque directly. If we want to
make Copy{To,From}State private, I think that we should
provide getter/setter for needed members of
Copy{To,From}State such as
Copy{To,From}State{Get,Set}Opaque().

It's a design in the v2 patch set:
/messages/by-id/20231221.183504.1240642084042888377.kou@clear-code.com

We discussed that we can make CopyToState public:
/messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com

I think that CopyToState and CopyFromState are not APIs but the
execution states. I'm not against exposing CopyToState and
CopyFromState. What I'd like to avoid is that we end up adding
everything (including new fields we add in the future) related to copy
operation to copyapi.h, leading to include copyapi.h into files that
are not related to custom format api. fdwapi.h and tsmapi.h as
examples have only a struct having a bunch of callbacks but not the
execution state data such as SampScanState are not defined there.

What does "private" mean here? I thought that it means that
"PostgreSQL itself can use it". But it seems that you mean
that "PostgreSQL itself and custom format extensions can use
it but other extensions can't use it".

I'm not familiar with "_internal.h" in PostgreSQL but is
"_internal.h" for the latter "private" mean?

My understanding is that we don't strictly prohibit _internal.h from
being included in out of core files. For example, file_fdw.c includes
copyfrom_internal.h in order to access some fields of CopyFromState.

If the name with _internal.h is the problem, we can rename them to
copyfrom.h and copyto.h. It makes sense to me that the code that needs
to access the internal of the copy execution state include _internal.h
header, though.

While we get the format routines for custom formats in
ProcessCopyOptionFormat(), we do that for built-in formats in
BeginCopyTo(), which seems odd to me. I think we can have
CopyToGetRoutine() responsible for getting CopyToRoutine for built-in
formats as well as custom format. The same is true for
CopyFromRoutine.

I like the current design because we don't need to export
CopyToGetBuiltinRoutine() (we can use static for
CopyToGetBuiltinRoutine()) but I applied your
suggestion. Because it's not a strong opinion.

I meant that ProcessCopyOptionFormat() doesn't not necessarily get the
routine. An idea is that in ProcessCopyOptionFormat() we just get the
OID of the handler function, and then set up the format routine in
BeginCopyTo(). I've attached a patch for this idea (applied on top of
0009).

Also, please check some regression test failures on cfbot.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

fix_format_option_process.patchapplication/octet-stream; name=fix_format_option_process.patchDownload
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 10f80ef3654..6dd5c5bcf28 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -40,6 +40,9 @@
 #include "utils/rel.h"
 #include "utils/rls.h"
 
+static Oid LookupCustomFormat(char *fmt);
+static Node *GetCustomFormatRoutine(Oid handler, bool is_from);
+
 /*
  *	 DoCopy executes the SQL COPY statement
  *
@@ -477,95 +480,6 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
-/*
- * Process the "format" option.
- *
- * This function checks whether the option value is a built-in format such as
- * "text" and "csv" or not. If the option value isn't a built-in format, this
- * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
- * format handler is found, this function reports an error.
- */
-static void
-ProcessCopyOptionFormat(ParseState *pstate,
-						CopyFormatOptions *opts_out,
-						bool is_from,
-						DefElem *defel)
-{
-	char	   *format;
-	bool		isBuiltin;
-	Oid			funcargtypes[1];
-	Oid			handlerOid = InvalidOid;
-	Datum		datum;
-	Node	   *routine;
-
-	format = defGetString(defel);
-
-	isBuiltin = true;
-	opts_out->csv_mode = false;
-	opts_out->binary = false;
-	/* built-in formats */
-	if (strcmp(format, "text") == 0)
-		 /* "csv_mode == false && binary == false" means "text" */ ;
-	else if (strcmp(format, "csv") == 0)
-		opts_out->csv_mode = true;
-	else if (strcmp(format, "binary") == 0)
-		opts_out->binary = true;
-	else
-		isBuiltin = false;
-	if (isBuiltin)
-	{
-		if (is_from)
-			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
-		else
-			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
-		return;
-	}
-
-	/* custom format */
-	funcargtypes[0] = INTERNALOID;
-	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-								funcargtypes, true);
-	if (!OidIsValid(handlerOid))
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY format \"%s\" not recognized", format),
-				 parser_errposition(pstate, defel->location)));
-
-	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
-	routine = (Node *) DatumGetPointer(datum);
-	if (is_from)
-	{
-		if (routine == NULL || !IsA(routine, CopyFromRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%s(%u) did not return a "
-							"CopyFromRoutine struct",
-							format, handlerOid),
-					 parser_errposition(
-										pstate, defel->location)));
-	}
-	else
-	{
-		if (routine == NULL || !IsA(routine, CopyToRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%s(%u) did not return a "
-							"CopyToRoutine struct",
-							format, handlerOid),
-					 parser_errposition(
-										pstate, defel->location)));
-	}
-
-	opts_out->routine = routine;
-}
-
 /*
  * Process the statement option list for COPY.
  *
@@ -609,10 +523,25 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
+			char	   *fmt = defGetString(defel);
+			Oid			handler;
+
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
+			if (strcmp(fmt, "text") == 0)
+				 /* default format */ ;
+			else if (strcmp(fmt, "csv") == 0)
+				opts_out->csv_mode = true;
+			else if (strcmp(fmt, "binary") == 0)
+				opts_out->binary = true;
+			else if ((handler = LookupCustomFormat(fmt)) != InvalidOid)
+				opts_out->custom_format_handler = handler;
+			else
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+						 errmsg("COPY format \"%s\" not recognized", fmt),
+						 parser_errposition(pstate, defel->location)));
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -763,15 +692,6 @@ ProcessCopyOptions(ParseState *pstate,
 					 parser_errposition(pstate, defel->location)));
 	}
 
-	/* If format option isn't specified, we use a built-in routine. */
-	if (!format_specified)
-	{
-		if (is_from)
-			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
-		else
-			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
-	}
-
 	/*
 	 * Check for incompatible options (must do these three before inserting
 	 * defaults)
@@ -1104,3 +1024,63 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+/*
+ * Return the Oid of the handler function corresponding to the given format
+ * name, if exists. Otherwise, return InvalidOid.
+ */
+static Oid
+LookupCustomFormat(char *fmt)
+{
+	Oid		funcargtypes[1];
+	Oid		handlerOid;
+
+	handlerOid = LookupFuncName(list_make1(makeString(fmt)), 1,
+								funcargtypes, true);
+
+	return OidIsValid(handlerOid) ? handlerOid : InvalidOid;
+}
+
+/*
+ * Workhorse for GetCopyFromCustomRoutine() and GetCopyToCustomRoutine().
+ *
+ * Call the specified custom COPY format handler function to get its
+ * either CopyFromRoutine or CopyToRoutine struct depending on is_from.
+ */
+static Node *
+GetCustomFormatRoutine(Oid handler, bool is_from)
+{
+	Datum	datum;
+	Node	*routine;
+
+	Assert(OidIsValid(handler));
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+
+	if (routine == NULL ||
+		(is_from && !IsA(routine, CopyFromRoutine)) ||
+		(!is_from && !IsA(routine, CopyToRoutine)))
+		elog(ERROR, "COPY format handler function %u did not return %s struct",
+			 handler, is_from ? "CopyFromRoutine" :"CopyToRoutine");
+
+	return routine;
+}
+
+/*
+ * Return CopyFromRoutine returned by the copy format handler function.
+ */
+CopyFromRoutine*
+GetCopyFromCustomRoutine(Oid handler)
+{
+	return castNode(CopyFromRoutine, GetCustomFormatRoutine(handler, true));
+}
+
+/*
+ * Return CopyToRoutine returned by the copy format handler function.
+ */
+CopyToRoutine *
+GetCopyToCustomRoutine(Oid handler)
+{
+	return castNode(CopyToRoutine, GetCustomFormatRoutine(handler, false));
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 3f6b0031d94..257cda99b25 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -154,15 +154,17 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 };
 
 /* Return a built-in COPY FROM routine for the given options */
-const CopyFromRoutine *
-CopyFromGetBuiltinRoutine(CopyFormatOptions *opts)
+static void
+SetCopyFromFormatRoutine(CopyFromState cstate)
 {
-	if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	if (cstate->opts.csv_mode)
+		cstate->routine = &CopyFromRoutineCSV;
+	else if (cstate->opts.binary)
+		cstate->routine = &CopyFromRoutineBinary;
+	else if (OidIsValid(cstate->opts.custom_format_handler))
+		cstate->routine = GetCopyFromCustomRoutine(cstate->opts.custom_format_handler);
 	else
-		return &CopyFromRoutineText;
+		cstate->routine = &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1568,7 +1570,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = (const CopyFromRoutine *) cstate->opts.routine;
+	SetCopyFromFormatRoutine(cstate);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index da281f32950..86d01a0d9b3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -115,15 +115,17 @@ static const CopyToRoutine CopyToRoutineBinary = {
 };
 
 /* Return a built-in COPY TO routine for the given options */
-const CopyToRoutine *
-CopyToGetBuiltinRoutine(CopyFormatOptions *opts)
+static void
+SetCopyToFormatRoutine(CopyToState cstate)
 {
-	if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	if (cstate->opts.csv_mode)
+		cstate->routine = &CopyToRoutineCSV;
+	else if (cstate->opts.binary)
+		cstate->routine = &CopyToRoutineBinary;
+	else if (OidIsValid(cstate->opts.custom_format_handler))
+		cstate->routine = GetCopyToCustomRoutine(cstate->opts.custom_format_handler);
 	else
-		return &CopyToRoutineText;
+		cstate->routine = &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -656,7 +658,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = (const CopyToRoutine *) cstate->opts.routine;
+	SetCopyToFormatRoutine(cstate);
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 586d6c0fe2e..f11173cc9ef 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine */
+	Oid			custom_format_handler; /* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to]_internal.h */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 389f887b2c1..9567b993b87 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -105,6 +105,9 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern CopyFromRoutine* GetCopyFromCustomRoutine(Oid handler);
+extern CopyToRoutine * GetCopyToCustomRoutine(Oid handler);
+
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
 extern void CopyFromSkipErrorRow(CopyFromState cstate);
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index a65bbbc962e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -197,6 +197,4 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
-const struct CopyFromRoutine *CopyFromGetBuiltinRoutine(CopyFormatOptions *opts);
-
 #endif							/* COPYFROM_INTERNAL_H */
#204Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#203)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBpWFU4k-_bwrTq0AkFSAdwQqhAsSW188STmu9HxLJ0nQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 31 Jan 2025 14:25:34 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that CopyToState and CopyFromState are not APIs but the
execution states. I'm not against exposing CopyToState and
CopyFromState. What I'd like to avoid is that we end up adding
everything (including new fields we add in the future) related to copy
operation to copyapi.h, leading to include copyapi.h into files that
are not related to custom format api. fdwapi.h and tsmapi.h as
examples have only a struct having a bunch of callbacks but not the
execution state data such as SampScanState are not defined there.

Thanks for sharing examples. But it seems that
fdwapi.h/tsmapi.h (ForeignScanState/SampleScanSate) are not
good examples. It seems that PostgreSQL uses
nodes/execnodes.h for all *ScanState. It seems that the
sparation is not related to *api.h usage.

My understanding is that we don't strictly prohibit _internal.h from
being included in out of core files. For example, file_fdw.c includes
copyfrom_internal.h in order to access some fields of CopyFromState.

If the name with _internal.h is the problem, we can rename them to
copyfrom.h and copyto.h. It makes sense to me that the code that needs
to access the internal of the copy execution state include _internal.h
header, though.

Thanks for sharing the file_fdw.c example. I'm OK with
_internal.h suffix because PostgreSQL doesn't prohibit
_internal.h usage by extensions as you mentioned.

While we get the format routines for custom formats in
ProcessCopyOptionFormat(), we do that for built-in formats in
BeginCopyTo(), which seems odd to me. I think we can have
CopyToGetRoutine() responsible for getting CopyToRoutine for built-in
formats as well as custom format. The same is true for
CopyFromRoutine.

I like the current design because we don't need to export
CopyToGetBuiltinRoutine() (we can use static for
CopyToGetBuiltinRoutine()) but I applied your
suggestion. Because it's not a strong opinion.

I meant that ProcessCopyOptionFormat() doesn't not necessarily get the
routine. An idea is that in ProcessCopyOptionFormat() we just get the
OID of the handler function, and then set up the format routine in
BeginCopyTo(). I've attached a patch for this idea (applied on top of
0009).

Oh, sorry. I misunderstood your suggestion. I understand
what you suggested by the patch. Thanks.

If we use the approach, we can't show error position when a
custom COPY format handler function returns invalid routine
because DefElem for the "format" option isn't available in
BeginCopyTo(). Is it acceptable? If it's acceptable, let's
use the approach.

Also, please check some regression test failures on cfbot.

Oh, sorry. I forgot to follow function name change in
0009. I attach the v30 patch set that fixes it in 0009.

Thanks,
--
kou

Attachments:

v30-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From 4435e1d3bff645b84bb9fe1eb4da33e158ad2f9d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v30 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 358 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99cb23cb347..26c67ddc351 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..be29e3fbdef
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index a2644a2e653..1cbb3628857 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -508,6 +508,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.47.1

v30-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From 6e23a4faa3af71c2ad9cba733c547cfa78de99c0 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v30 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 190 +++++++--
 src/backend/commands/copyfromparse.c     | 504 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  13 +-
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 492 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 678e754b2b9..323c43dca4a 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0cbd05f5602..917fa6605ef 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..65f20d332ee 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +139,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +739,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +760,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +814,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +824,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +840,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1095,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1141,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1149,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1217,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1232,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1313,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1356,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1401,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1412,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1432,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index be29e3fbdef..51e131e5e8a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -54,4 +54,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..e1affe3dfa7 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1cbb3628857..afdafefeb9b 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -497,6 +497,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.47.1

v30-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 666dd4bad571674c9e8be296a911acc92e50e440 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v30 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 97 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 20 ++--
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  4 +-
 src/include/commands/copyto_internal.h        | 21 ++++
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 +++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 +++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 +
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 ++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 21 files changed, 295 insertions(+), 24 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/include/commands/copyto_internal.h
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..9500156b163 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,7 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,79 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	bool		isBuiltin;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+	Datum		datum;
+	Node	   *routine;
+
+	format = defGetString(defel);
+
+	isBuiltin = true;
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+		 /* "csv_mode == false && binary == false" means "text" */ ;
+	else if (strcmp(format, "csv") == 0)
+		opts_out->csv_mode = true;
+	else if (strcmp(format, "binary") == 0)
+		opts_out->binary = true;
+	else
+		isBuiltin = false;
+	if (isBuiltin)
+	{
+		if (!is_from)
+			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%s(%u) did not return a "
+						"CopyToRoutine struct",
+						format, handlerOid),
+				 parser_errposition(
+									pstate, defel->location)));
+
+	opts_out->routine = routine;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +593,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -685,6 +747,13 @@ ProcessCopyOptions(ParseState *pstate,
 					 parser_errposition(pstate, defel->location)));
 	}
 
+	/* If format option isn't specified, we use a built-in routine. */
+	if (!format_specified)
+	{
+		if (!is_from)
+			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
+	}
+
 	/*
 	 * Check for incompatible options (must do these three before inserting
 	 * defaults)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 26c67ddc351..f7f44b368b7 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,23 +168,23 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
 	.CopyToEnd = CopyToBinaryEnd,
 };
 
-/* Return a COPY TO routine for the given options */
-static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+/* Return a built-in COPY TO routine for the given options */
+const CopyToRoutine *
+CopyToGetBuiltinRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyToRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -703,7 +705,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = (const CopyToRoutine *) cstate->opts.routine;
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 7c012c27f88..5d53d32c4a7
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 5b8c2ad2a54..b231e7a041e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7803,6 +7803,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7bc044e2816..2a90b39b6f6 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Node	   *routine;		/* CopyToRoutine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 51e131e5e8a..12e4b1d47a7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,7 +14,7 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
 
-#include "commands/copy.h"
+#include "commands/copyto_internal.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
 
@@ -24,6 +24,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..f95d8da8e3e
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,21 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+
+const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
+
+#endif							/* COPYTO_INTERNAL_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index f3dd5461fef..09f7443195f 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 4f544a042d4..bf25658793d 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.1

v30-0004-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 1b991a14a53e26e9a46ae4bbe054cedffb84b1b3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v30 4/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 77 +++-----------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyapi.h         |  2 -
 src/include/commands/copyto_internal.h | 64 +++++++++++++++++++++
 4 files changed, 73 insertions(+), 72 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f7f44b368b7..91fa46ddf6f 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -36,67 +36,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -406,7 +345,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +392,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +426,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +451,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +459,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -904,12 +843,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 2a90b39b6f6..ef3dc02c56a 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Node	   *routine;		/* CopyToRoutine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 12e4b1d47a7..5d071b378d6 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,8 +15,6 @@
 #define COPYAPI_H
 
 #include "commands/copyto_internal.h"
-#include "executor/tuptable.h"
-#include "nodes/execnodes.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index f95d8da8e3e..2df53dda8a0 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -15,6 +15,70 @@
 #define COPYTO_INTERNAL_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
 
 const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
 
-- 
2.47.1

v30-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 597ce8280f57884978ee427486509be2660affbc Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v30 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 91fa46ddf6f..da281f32950 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -442,6 +442,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5d071b378d6..f8167af4c79 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -54,6 +54,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 2df53dda8a0..4b82372691e 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 const struct CopyToRoutine *CopyToGetBuiltinRoutine(CopyFormatOptions *opts);
-- 
2.47.1

v30-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 167c7173e2657d0a88237c5ce3b91739a8ce19fe Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v30 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 60 ++++++++++++-------
 src/backend/commands/copyfrom.c               | 23 +++----
 src/backend/commands/copyfromparse.c          |  2 +-
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copy.h                   |  2 +-
 src/include/commands/copyapi.h                |  3 +
 src/include/commands/copyfrom_internal.h      |  6 +-
 .../expected/test_copy_format.out             | 10 +++-
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 +++++++++++-
 10 files changed, 107 insertions(+), 41 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 9500156b163..10f80ef3654 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -515,18 +515,17 @@ ProcessCopyOptionFormat(ParseState *pstate,
 		isBuiltin = false;
 	if (isBuiltin)
 	{
-		if (!is_from)
+		if (is_from)
+			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
+		else
 			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
 		return;
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -535,17 +534,34 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	datum = OidFunctionCall1(handlerOid, BoolGetDatum(is_from));
 	routine = (Node *) DatumGetPointer(datum);
-	if (routine == NULL || !IsA(routine, CopyToRoutine))
-		ereport(
-				ERROR,
-				(errcode(
-						 ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY handler function "
-						"%s(%u) did not return a "
-						"CopyToRoutine struct",
-						format, handlerOid),
-				 parser_errposition(
-									pstate, defel->location)));
+	if (is_from)
+	{
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyFromRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
+	else
+	{
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%s(%u) did not return a "
+							"CopyToRoutine struct",
+							format, handlerOid),
+					 parser_errposition(
+										pstate, defel->location)));
+	}
 
 	opts_out->routine = routine;
 }
@@ -750,7 +766,9 @@ ProcessCopyOptions(ParseState *pstate,
 	/* If format option isn't specified, we use a built-in routine. */
 	if (!format_specified)
 	{
-		if (!is_from)
+		if (is_from)
+			opts_out->routine = (Node *) CopyFromGetBuiltinRoutine(opts_out);
+		else
 			opts_out->routine = (Node *) CopyToGetBuiltinRoutine(opts_out);
 	}
 
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 917fa6605ef..23027a664ec 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,8 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
-#include "commands/copyfrom_internal.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
@@ -129,6 +128,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +137,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,23 +146,23 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
 	.CopyFromEnd = CopyFromBinaryEnd,
 };
 
-/* Return a COPY FROM routine for the given options */
-static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+/* Return a built-in COPY FROM routine for the given options */
+const CopyFromRoutine *
+CopyFromGetBuiltinRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1567,7 +1568,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = (const CopyFromRoutine *) cstate->opts.routine;
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 65f20d332ee..4e6683eb9da 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copyfrom_internal.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
 #include "libpq/libpq.h"
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index ef3dc02c56a..586d6c0fe2e 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Node	   *routine;		/* CopyToRoutine */
+	Node	   *routine;		/* CopyToRoutine or CopyFromRoutine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to]_internal.h */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index f8167af4c79..bf933069fea 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
@@ -62,6 +63,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index e1affe3dfa7..9b3b8336b67 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copyapi.h"
+#include "commands/copy.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -59,7 +59,7 @@ typedef enum CopyInsertMethod
 typedef struct CopyFromStateData
 {
 	/* format routine */
-	const CopyFromRoutine *routine;
+	const struct CopyFromRoutine *routine;
 
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
@@ -194,4 +194,6 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+const struct CopyFromRoutine *CopyFromGetBuiltinRoutine(CopyFormatOptions *opts);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.1

v30-0007-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From 4668d3707000b833cb4ef9800f3fc7e6a69c8c45 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v30 7/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 23027a664ec..3f6b0031d94 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1703,7 +1703,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1831,7 +1831,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 4e6683eb9da..f7982bf692f 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -170,7 +170,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -238,7 +238,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -247,7 +247,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -330,7 +330,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1158,7 +1158,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 9b3b8336b67..3743b11faa4 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.1

v30-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From d1eddd43103df14867e45e36d4d16aa91b244a4e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v30 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f7982bf692f..650b6b2382b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -729,6 +729,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index bf933069fea..d1a1dbeb178 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -105,4 +105,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3743b11faa4..a65bbbc962e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.1

v30-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From efd8de92afa74f0712f2fb540ffe6550e3d815e9 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v30 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 82 ++++++++++++++++++-
 5 files changed, 199 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 650b6b2382b..b016f43a711 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -851,6 +851,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -959,42 +1004,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d1a1dbeb178..389f887b2c1 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -107,4 +107,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..d72d5c33c1b 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -32,10 +32,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.1

#205Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#204)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Jan 31, 2025 at 3:10 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBpWFU4k-_bwrTq0AkFSAdwQqhAsSW188STmu9HxLJ0nQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 31 Jan 2025 14:25:34 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that CopyToState and CopyFromState are not APIs but the
execution states. I'm not against exposing CopyToState and
CopyFromState. What I'd like to avoid is that we end up adding
everything (including new fields we add in the future) related to copy
operation to copyapi.h, leading to include copyapi.h into files that
are not related to custom format api. fdwapi.h and tsmapi.h as
examples have only a struct having a bunch of callbacks but not the
execution state data such as SampScanState are not defined there.

Thanks for sharing examples. But it seems that
fdwapi.h/tsmapi.h (ForeignScanState/SampleScanSate) are not
good examples. It seems that PostgreSQL uses
nodes/execnodes.h for all *ScanState. It seems that the
sparation is not related to *api.h usage.

I didn't mean these examples perfectly apply the copyapi.h case.
Again, what I'd like to avoid is that we end up adding everything
(including new fields we add in the future) related to copy operation
to copyapi.h. For example, with v28 that moves both CopyFromState and
CopyToState to copyapi.h, file_fdw.c includes unrelated CopyToState
struct via copyfrom_internal.h -> copyapi.h. In addition to that, both
copyfrom.c and copyfrom_internal.h did the same, which made me think
copyfrom_internal.h mostly no longer plays its role. I'm very welcome
to other ideas too if they could achieve the same goal.

My understanding is that we don't strictly prohibit _internal.h from
being included in out of core files. For example, file_fdw.c includes
copyfrom_internal.h in order to access some fields of CopyFromState.

If the name with _internal.h is the problem, we can rename them to
copyfrom.h and copyto.h. It makes sense to me that the code that needs
to access the internal of the copy execution state include _internal.h
header, though.

Thanks for sharing the file_fdw.c example. I'm OK with
_internal.h suffix because PostgreSQL doesn't prohibit
_internal.h usage by extensions as you mentioned.

While we get the format routines for custom formats in
ProcessCopyOptionFormat(), we do that for built-in formats in
BeginCopyTo(), which seems odd to me. I think we can have
CopyToGetRoutine() responsible for getting CopyToRoutine for built-in
formats as well as custom format. The same is true for
CopyFromRoutine.

I like the current design because we don't need to export
CopyToGetBuiltinRoutine() (we can use static for
CopyToGetBuiltinRoutine()) but I applied your
suggestion. Because it's not a strong opinion.

I meant that ProcessCopyOptionFormat() doesn't not necessarily get the
routine. An idea is that in ProcessCopyOptionFormat() we just get the
OID of the handler function, and then set up the format routine in
BeginCopyTo(). I've attached a patch for this idea (applied on top of
0009).

Oh, sorry. I misunderstood your suggestion. I understand
what you suggested by the patch. Thanks.

If we use the approach, we can't show error position when a
custom COPY format handler function returns invalid routine
because DefElem for the "format" option isn't available in
BeginCopyTo(). Is it acceptable? If it's acceptable, let's
use the approach.

I think we can live with it. All errors happening while processing the
copy options don't necessarily show the error position.

Oh, sorry. I forgot to follow function name change in
0009. I attach the v30 patch set that fixes it in 0009.

Thank you for updating the patch! I'll review these patches.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#206Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#205)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoA3KMddnjxY1hxth3f4f1wo8a8i2icgK6GEKqXNR_e6jA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 31 Jan 2025 16:34:52 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Again, what I'd like to avoid is that we end up adding everything
(including new fields we add in the future) related to copy operation
to copyapi.h. For example, with v28 that moves both CopyFromState and
CopyToState to copyapi.h, file_fdw.c includes unrelated CopyToState
struct via copyfrom_internal.h -> copyapi.h. In addition to that, both
copyfrom.c and copyfrom_internal.h did the same, which made me think
copyfrom_internal.h mostly no longer plays its role. I'm very welcome
to other ideas too if they could achieve the same goal.

For the propose, copyapi.h should not include
copy{to,from}_internal.h. If we do it, copyto.c includes
CopyFromState and copyfrom*.c include CopyToState.

What do you think about the following change? Note that
extensions must include copy{to,from}_internal.h explicitly
in addition to copyapi.h.

-----
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 10f80ef3654..a2dc2d04407 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -23,6 +23,8 @@
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 3f6b0031d94..7bcf1c6544b 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -29,6 +29,7 @@
 #include "access/xact.h"
 #include "catalog/namespace.h"
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b016f43a711..7296745d6d2 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -63,6 +63,7 @@
 #include <sys/stat.h>
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
 #include "libpq/libpq.h"
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index da281f32950..a69771ea6da 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 389f887b2c1..dfab62372a7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -14,8 +14,7 @@
 #ifndef COPYAPI_H
 #define COPYAPI_H
-#include "commands/copyto_internal.h"
-#include "commands/copyfrom_internal.h"
+#include "commands/copy.h"
 /*
  * API structure for a COPY TO format implementation. Note this must be
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index d72d5c33c1b..c05d65557a9 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,8 @@
 #include "postgres.h"
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
+#include "commands/copyto_internal.h"
 #include "commands/defrem.h"

PG_MODULE_MAGIC;
-----

If we use the approach, we can't show error position when a
custom COPY format handler function returns invalid routine
because DefElem for the "format" option isn't available in
BeginCopyTo(). Is it acceptable? If it's acceptable, let's
use the approach.

I think we can live with it. All errors happening while processing the
copy options don't necessarily show the error position.

OK. I attach the v31 patch set that uses this
approach. Mainly, 0003 and 0006 were changed. The v31 patch
set also includes the above
copyapi.h/copy{to,from}_internal.h related changes.

If we have a feature that returns a function name from Oid,
we can improve error messages by including function name
(format name) when a custom format handler function returns
not Copy{To,From}Routine...

Thanks,
--
kou

Attachments:

v31-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From 7c9a6d7be003f5a63d12e4c3c3a30231c726c794 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v31 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  55 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 356 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99cb23cb347..26c67ddc351 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..de5dae9cc38
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,55 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index a2644a2e653..1cbb3628857 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -508,6 +508,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.47.1

v31-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From 89f7a7b007ab5958dce18987ad397f6b62f5aed1 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v31 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 192 +++++++--
 src/backend/commands/copyfromparse.c     | 505 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  11 +
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 493 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 678e754b2b9..323c43dca4a 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0cbd05f5602..8b09df0581f 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,7 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..c1872acbbf6 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +740,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +761,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +815,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +825,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +841,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1096,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1142,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1150,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1218,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1233,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1314,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1357,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1385,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1402,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1413,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1433,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index de5dae9cc38..39e5a096da5 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -52,4 +52,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..c8b22af22d8 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1cbb3628857..afdafefeb9b 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -497,6 +497,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.47.1

v31-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From c4a358d58553bec6e9efd5fc497b0c8e71781f7b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v31 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 70 +++++++++++++++----
 src/backend/commands/copyto.c                 | 36 +++++++---
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 ++
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 +++++
 src/test/modules/test_copy_format/meson.build | 33 +++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 +++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 ++
 20 files changed, 264 insertions(+), 21 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..77a35831d05 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,61 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +575,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 26c67ddc351..18af2aaa2f9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -174,15 +177,32 @@ static const CopyToRoutine CopyToRoutineBinary = {
 
 /* Return a COPY TO routine for the given options */
 static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+CopyToGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts.binary)
-		return &CopyToRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyToRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts->binary)
+		return &CopyToRoutineBinary;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -703,7 +723,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = CopyToGetRoutine(&cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 66bbad8e6e0..173ee11811c 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -49,6 +49,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 7c012c27f88..5d53d32c4a7
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -61,6 +61,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -85,6 +86,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 5b8c2ad2a54..b231e7a041e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7803,6 +7803,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7bc044e2816..285f2c8fc4f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 39e5a096da5..c125dc3e209 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index f3dd5461fef..09f7443195f 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -11,6 +11,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 4f544a042d4..bf25658793d 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.1

v31-0004-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From a1b7b711aeec2bc52bc50e2e9182182200459ec5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v31 4/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 18af2aaa2f9..16d3b389e97 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -424,7 +364,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -471,7 +411,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -505,11 +445,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -530,7 +470,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -538,7 +478,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -922,12 +862,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 285f2c8fc4f..be97b07b559 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.1

v31-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 37d2ac9d84288852ad049db1145104d52f065b14 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v31 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 16d3b389e97..20d49d73e38 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -461,6 +461,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index c125dc3e209..d0da9e07a0d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -54,6 +54,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.1

v31-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From bb6976fc15bd576b40d5820a9e6a0f49bfbd759d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v31 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 36 +++++++++++++----
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 82 insertions(+), 21 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 77a35831d05..05cc5d1232a 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 8b09df0581f..37647949bfc 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -153,15 +156,32 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 
 /* Return a COPY FROM routine for the given options */
 static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+CopyFromGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts.binary)
-		return &CopyFromRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts->binary)
+		return &CopyFromRoutineBinary;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1567,7 +1587,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = CopyFromGetRoutine(&cstate->opts);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d0da9e07a0d..103eb21767d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -62,6 +62,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.1

v31-0007-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From 8ba32b6d9892011d651ead5fef317c57255f5bfd Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v31 7/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 37647949bfc..29e2a7d13d4 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1722,7 +1722,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1850,7 +1850,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index c1872acbbf6..75b49629f08 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,7 +171,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -239,7 +239,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -331,7 +331,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1159,7 +1159,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.1

v31-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 6f0bf00c95964077ce070313f58876e87665842e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v31 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 75b49629f08..01f2e7a8824 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -730,6 +730,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 103eb21767d..ac58adbd23d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -104,4 +104,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.1

v31-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From bec62135de0224c9bab139bc86b2263854a5b1a1 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v31 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 ++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 83 ++++++++++++++++++-
 5 files changed, 200 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 01f2e7a8824..7296745d6d2 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -852,6 +852,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -960,42 +1005,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ac58adbd23d..dfab62372a7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -106,4 +106,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..b766d3c96ff 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -32,10 +33,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.1

#207Vladlen Popolitov
v.popolitov@postgrespro.ru
In reply to: Sutou Kouhei (#206)
Re: Make COPY format extendable: Extract COPY TO format implementations

Sutou Kouhei писал(а) 2025-02-01 17:12:

Hi,

Hi
I would like to inform about the security breach in your design of COPY
TO/FROM.

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in
PostgreSQL kernel.
I think, it will start competition, who can find most dangerous routine
to call just from COPY FROM command.

Standard PostgreSQL realisation for new methods to use USING keyword.
Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods), it assumes some SetOptions interface, that defines
an options structure according to the new method requirements.

I agree with the general direction of the extensibility, but it should
be secure
and consistent.

--
Best regards,

Vladlen Popolitov.

#208Sutou Kouhei
kou@clear-code.com
In reply to: Vladlen Popolitov (#207)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 03 Feb 2025 13:38:04 +0700,
Vladlen Popolitov <v.popolitov@postgrespro.ru> wrote:

I would like to inform about the security breach in your design of
COPY TO/FROM.

Thanks! I didn't notice it.

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in
PostgreSQL kernel.

We require "FORMAT_NAME(internal)" signature:

----
funcargtypes[0] = INTERNALOID;
handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
funcargtypes, true);
----

So any caller can call only routines that use the signature.

Should we add more checks for security? If so, what checks
are needed?

For example, does requiring a prefix such as "copy_" (use
"copy_json" for "json" format) improve security?

For example, we need to register a handler explicitly
(CREATE ACCESS METHOD) when we want to use a new access
method. Should we require an explicit registration for
custom COPY format too?

Standard PostgreSQL realisation for new methods to use USING
keyword. Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods),

Ah, I didn't think about USING.

You suggest "COPY ... USING json" not "COPY ... FORMAT json"
like "CREATE INDEX ... USING custom_index", right? It will
work. If we use this interface, we should reject "COPY
... FORMAT ... USING" (both of FORMAT/USING are specified).

it assumes some SetOptions interface, that defines
an options structure according to the new method requirements.

Sorry. I couldn't find the SetOptions interface in source
code. I found only AT_SetOptions. Did you mean it by "some
SetOptions interface"?

I'm familiar with only access method. It has
IndexAmRoutine::amoptions. Is it a SetOptions interface
example?

FYI: The current patch set doesn't have custom options
support yet. Because we want to start from a minimal feature
set. But we'll add support for custom options eventually.

Thanks,
--
kou

#209Vladlen Popolitov
v.popolitov@postgrespro.ru
In reply to: Sutou Kouhei (#208)
Re: Make COPY format extendable: Extract COPY TO format implementations

Sutou Kouhei писал(а) 2025-02-04 13:29:
Hi

Hi,

In <d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru>
"Re: Make COPY format extendable: Extract COPY TO format
implementations" on Mon, 03 Feb 2025 13:38:04 +0700,
Vladlen Popolitov <v.popolitov@postgrespro.ru> wrote:

I would like to inform about the security breach in your design of
COPY TO/FROM.

Thanks! I didn't notice it.

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in
PostgreSQL kernel.

We require "FORMAT_NAME(internal)" signature:

----
funcargtypes[0] = INTERNALOID;
handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
funcargtypes, true);
----

So any caller can call only routines that use the signature.

Should we add more checks for security? If so, what checks
are needed?

For example, does requiring a prefix such as "copy_" (use
"copy_json" for "json" format) improve security?

For example, we need to register a handler explicitly
(CREATE ACCESS METHOD) when we want to use a new access
method. Should we require an explicit registration for
custom COPY format too?

I think, in case of USING PostgreSQL kernel will call corresponding
handler,
and it looks secure - the same as for table and index methods handlers.

Standard PostgreSQL realisation for new methods to use USING
keyword. Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods),

Ah, I didn't think about USING.

You suggest "COPY ... USING json" not "COPY ... FORMAT json"
like "CREATE INDEX ... USING custom_index", right? It will
work. If we use this interface, we should reject "COPY
... FORMAT ... USING" (both of FORMAT/USING are specified).

I cannot recommend about rejecting, I do not know details
of realisation of this part of code. Just idea - FORMAT value
could be additional option to copy handler or NULL
if it is omitted.
If you add extensibility, than every handler will be the
extension, that can handle one or more formats.

it assumes some SetOptions interface, that defines
an options structure according to the new method requirements.

Sorry. I couldn't find the SetOptions interface in source
code. I found only AT_SetOptions. Did you mean it by "some
SetOptions interface"?

Yes.

I'm familiar with only access method. It has
IndexAmRoutine::amoptions. Is it a SetOptions interface
example?

Yes. I think, it would be compatible with other modules
of source code and could use the same code base to process
options of COPY TO/FROM

FYI: The current patch set doesn't have custom options
support yet. Because we want to start from a minimal feature
set. But we'll add support for custom options eventually.

Sorry for disturbing. I did not have intention to stop your
patch, I would like to point to that details as early as
possible.

--
Best regards,

Vladlen Popolitov.

#210Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Vladlen Popolitov (#209)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 4, 2025 at 2:46 AM Vladlen Popolitov
<v.popolitov@postgrespro.ru> wrote:

Sutou Kouhei писал(а) 2025-02-04 13:29:
Hi

Hi,

In <d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru>
"Re: Make COPY format extendable: Extract COPY TO format
implementations" on Mon, 03 Feb 2025 13:38:04 +0700,
Vladlen Popolitov <v.popolitov@postgrespro.ru> wrote:

I would like to inform about the security breach in your design of
COPY TO/FROM.

Thanks! I didn't notice it.

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in
PostgreSQL kernel.

We require "FORMAT_NAME(internal)" signature:

----
funcargtypes[0] = INTERNALOID;
handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
funcargtypes, true);
----

So any caller can call only routines that use the signature.

Should we add more checks for security? If so, what checks
are needed?

For example, does requiring a prefix such as "copy_" (use
"copy_json" for "json" format) improve security?

For example, we need to register a handler explicitly
(CREATE ACCESS METHOD) when we want to use a new access
method. Should we require an explicit registration for
custom COPY format too?

I think, in case of USING PostgreSQL kernel will call corresponding
handler,
and it looks secure - the same as for table and index methods handlers.

IIUC even with custom copy format patches, we call the corresponding
handler function to get the routines, which is essentially similar to
what we do for table AM, index AM, and tablesample.I don't think we
allow users to call any routine in PostgreSQL core via custom FORMAT
option.

BTW we need to check if the return value type of the handler function
is copy_handler.

Standard PostgreSQL realisation for new methods to use USING
keyword. Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods),

Ah, I didn't think about USING.

You suggest "COPY ... USING json" not "COPY ... FORMAT json"
like "CREATE INDEX ... USING custom_index", right? It will
work. If we use this interface, we should reject "COPY
... FORMAT ... USING" (both of FORMAT/USING are specified).

I cannot recommend about rejecting, I do not know details
of realisation of this part of code. Just idea - FORMAT value
could be additional option to copy handler or NULL
if it is omitted.
If you add extensibility, than every handler will be the
extension, that can handle one or more formats.

Hmm, if we use the USING clause to specify the format type, we end up
having two ways to specify the format type (e.g., 'COPY ... USING
text' and 'COPY .. WITH (format = text)'), which seems to confuse
users.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#211Vladlen Popolitov
v.popolitov@postgrespro.ru
In reply to: Masahiko Sawada (#210)
Re: Make COPY format extendable: Extract COPY TO format implementations

Masahiko Sawada писал(а) 2025-02-05 08:32:

On Tue, Feb 4, 2025 at 2:46 AM Vladlen Popolitov

Standard PostgreSQL realisation for new methods to use USING
keyword. Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods),

Ah, I didn't think about USING.

You suggest "COPY ... USING json" not "COPY ... FORMAT json"
like "CREATE INDEX ... USING custom_index", right? It will
work. If we use this interface, we should reject "COPY
... FORMAT ... USING" (both of FORMAT/USING are specified).

I cannot recommend about rejecting, I do not know details
of realisation of this part of code. Just idea - FORMAT value
could be additional option to copy handler or NULL
if it is omitted.
If you add extensibility, than every handler will be the
extension, that can handle one or more formats.

Hmm, if we use the USING clause to specify the format type, we end up
having two ways to specify the format type (e.g., 'COPY ... USING
text' and 'COPY .. WITH (format = text)'), which seems to confuse
users.

WITH clause has list of options defined by copy method define in USING.
The clause WITH (format=text) has options defined for default copy
method,
but other methods will define own options. Probably they do not need
the word 'format' in options. The same as in index access methods.
For example, copy method parquete:
COPY ... USING parquete WITH (row_group_size=1000000)
copy method parquete need and will define the word 'row_group_size'
in options, the word 'format' will be wrong for it.
--
Best regards,

Vladlen Popolitov.

#212Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#206)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Feb 01, 2025 at 07:12:01PM +0900, Sutou Kouhei wrote:

For the propose, copyapi.h should not include
copy{to,from}_internal.h. If we do it, copyto.c includes
CopyFromState and copyfrom*.c include CopyToState.

What do you think about the following change? Note that
extensions must include copy{to,from}_internal.h explicitly
in addition to copyapi.h.

I was just looking at bit at this series of patch labelled with v31,
to see what is happening here.

In 0001, we have that:

+	/* format-specific routines */
+	const CopyToRoutine *routine;
[...]
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);

Having a callback where the copy state is processed once per row is
neat in terms of design for the callbacks and what extensions can do,
and this is much better than what 2889fd23be5 has attempted (later
reverted in 1aa8324b81fa) because we don't do indirect function calls
for each attribute. Still, I have a question here: what happens for a
COPY TO that involves one attribute, a short field size like an int2
and many rows (the more rows the more pronounced the effect, of
course)? Could this level of indirection still be the cause of some
regressions in a case like that? This is the worst case I can think
about, on top of my mind, and I am not seeing tests with few
attributes like this one, where we would try to make this callback as
hot as possible. This is a performance-sensitive area.
--
Michael

#213Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Vladlen Popolitov (#211)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 4, 2025 at 6:19 PM Vladlen Popolitov
<v.popolitov@postgrespro.ru> wrote:

Masahiko Sawada писал(а) 2025-02-05 08:32:

On Tue, Feb 4, 2025 at 2:46 AM Vladlen Popolitov

Standard PostgreSQL realisation for new methods to use USING
keyword. Every
new method could have own options (FORMAT is option of internal 'copy
from/to'
methods),

Ah, I didn't think about USING.

You suggest "COPY ... USING json" not "COPY ... FORMAT json"
like "CREATE INDEX ... USING custom_index", right? It will
work. If we use this interface, we should reject "COPY
... FORMAT ... USING" (both of FORMAT/USING are specified).

I cannot recommend about rejecting, I do not know details
of realisation of this part of code. Just idea - FORMAT value
could be additional option to copy handler or NULL
if it is omitted.
If you add extensibility, than every handler will be the
extension, that can handle one or more formats.

Hmm, if we use the USING clause to specify the format type, we end up
having two ways to specify the format type (e.g., 'COPY ... USING
text' and 'COPY .. WITH (format = text)'), which seems to confuse
users.

WITH clause has list of options defined by copy method define in USING.
The clause WITH (format=text) has options defined for default copy
method,
but other methods will define own options. Probably they do not need
the word 'format' in options. The same as in index access methods.
For example, copy method parquete:
COPY ... USING parquete WITH (row_group_size=1000000)
copy method parquete need and will define the word 'row_group_size'
in options, the word 'format' will be wrong for it.

I think it's orthological between the syntax and options passed to the
custom format extension. For example, even if we specify the options
like "COPY ... WITH (format 'parquet', row_group_size '1000000',
on_error 'ignore)", we can pass only non-built-in options (i.e. only
row_group_size) to the extension.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#214Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#212)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 4, 2025 at 9:10 PM Michael Paquier <michael@paquier.xyz> wrote:

On Sat, Feb 01, 2025 at 07:12:01PM +0900, Sutou Kouhei wrote:

For the propose, copyapi.h should not include
copy{to,from}_internal.h. If we do it, copyto.c includes
CopyFromState and copyfrom*.c include CopyToState.

What do you think about the following change? Note that
extensions must include copy{to,from}_internal.h explicitly
in addition to copyapi.h.

I was just looking at bit at this series of patch labelled with v31,
to see what is happening here.

In 0001, we have that:

+       /* format-specific routines */
+       const CopyToRoutine *routine;
[...]
-       CopySendEndOfRow(cstate);
+       cstate->routine->CopyToOneRow(cstate, slot);

Having a callback where the copy state is processed once per row is
neat in terms of design for the callbacks and what extensions can do,
and this is much better than what 2889fd23be5 has attempted (later
reverted in 1aa8324b81fa) because we don't do indirect function calls
for each attribute. Still, I have a question here: what happens for a
COPY TO that involves one attribute, a short field size like an int2
and many rows (the more rows the more pronounced the effect, of
course)? Could this level of indirection still be the cause of some
regressions in a case like that? This is the worst case I can think
about, on top of my mind, and I am not seeing tests with few
attributes like this one, where we would try to make this callback as
hot as possible. This is a performance-sensitive area.

FYI when Sutou-san last measured the performance[1]/messages/by-id/20241114.161948.1677325020727842666.kou@clear-code.com, it showed a
slight speed up even with fewer columns (5 columns) in both COPY TO
and COPY FROM cases. The callback design has not changed since then.
But it would be a good idea to run the benchmark with a table having a
single small size column.

Regards,

[1]: /messages/by-id/20241114.161948.1677325020727842666.kou@clear-code.com

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#215Sutou Kouhei
kou@clear-code.com
In reply to: Vladlen Popolitov (#209)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <eb59c12bb36207c65f23719f255eb69b@postgrespro.ru>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 04 Feb 2025 17:46:10 +0700,
Vladlen Popolitov <v.popolitov@postgrespro.ru> wrote:

I think, in case of USING PostgreSQL kernel will call corresponding
handler,
and it looks secure - the same as for table and index methods
handlers.

We use similar approach that is used by table sampling
method. We can use a new table sampling method by just
adding a "method_name(internal) RETURNS tsm_handler"
function. Is it not secure too?

If you add extensibility, than every handler will be the
extension, that can handle one or more formats.

Hmm. It may be a needless extensibility. Is it useful? I
feel that it increases complexity when we implement a custom
format handler. We can just implement one handler per custom
format. If we want to share implementation details in
multiple handlers, we can just share internal C
functions.

If we require one handler per custom format, it'll simpler
than one handler for multiple custom formats.

it assumes some SetOptions interface, that defines
an options structure according to the new method requirements.

Sorry. I couldn't find the SetOptions interface in source
code. I found only AT_SetOptions. Did you mean it by "some
SetOptions interface"?

Yes.

I'm familiar with only access method. It has
IndexAmRoutine::amoptions. Is it a SetOptions interface
example?

Yes. I think, it would be compatible with other modules
of source code and could use the same code base to process
options of COPY TO/FROM

Thanks. I thought that there is a common interface pattern
for SetOptions. But it seems that it's a feature that is
implemented in many extension points.

If we implement custom options support eventually, does it
satisfy the "SetOptions interface"?

Thanks,
--
kou

#216Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#210)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDCH1io_dGtsmnmZ4bUWfdPhEUe_8VQNvi31+78Pt7KdQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 4 Feb 2025 17:32:07 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

BTW we need to check if the return value type of the handler function
is copy_handler.

Oh, can we do it without calling a function? It seems that
FmgrInfo doesn't have return value type information. Should
we read pg_catalog.pg_proc or something for it?

Thanks,
--
kou

#217Álvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Vladlen Popolitov (#207)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 2025-Feb-03, Vladlen Popolitov wrote:

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in PostgreSQL
kernel.
I think, it will start competition, who can find most dangerous routine
to call just from COPY FROM command.

Hah.

Maybe it would be a better UI to require that COPY format handlers are
registered explicitly before they can be used:

CREATE ACCESS METHOD copy_yaml TYPE copy HANDLER copy_yaml_handler;

... and then when the FORMAT is not recognized as one of the hardcoded
methods, we go look in pg_am for one with amtype='c' and the given name.
That gives you the function that initializes the Copy state.

This is convenient enough because system administrators can add COPY
formats that anyone can use, and doesn't allow to call arbitrary
functions via COPY.

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"I can't go to a restaurant and order food because I keep looking at the
fonts on the menu. Five minutes later I realize that it's also talking
about food" (Donald Knuth)

#218Vladlen Popolitov
v.popolitov@postgrespro.ru
In reply to: Álvaro Herrera (#217)
Re: Make COPY format extendable: Extract COPY TO format implementations

Álvaro Herrera писал(а) 2025-02-05 18:49:

On 2025-Feb-03, Vladlen Popolitov wrote:

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in
PostgreSQL
kernel.
I think, it will start competition, who can find most dangerous
routine
to call just from COPY FROM command.

Hah.

Maybe it would be a better UI to require that COPY format handlers are
registered explicitly before they can be used:

CREATE ACCESS METHOD copy_yaml TYPE copy HANDLER copy_yaml_handler;

... and then when the FORMAT is not recognized as one of the hardcoded
methods, we go look in pg_am for one with amtype='c' and the given
name.
That gives you the function that initializes the Copy state.

This is convenient enough because system administrators can add COPY
formats that anyone can use, and doesn't allow to call arbitrary
functions via COPY.

Yes! It is what I propose. This looks much safer and already used in
access methods creation.

--
Best regards,

Vladlen Popolitov.

#219Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Álvaro Herrera (#217)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Feb 5, 2025 at 3:49 AM Álvaro Herrera <alvherre@alvh.no-ip.org> wrote:

On 2025-Feb-03, Vladlen Popolitov wrote:

You use FORMAT option to add new formats, filling it with routine name
in shared library. As result any caller can call any routine in PostgreSQL
kernel.
I think, it will start competition, who can find most dangerous routine
to call just from COPY FROM command.

Hah.

Maybe it would be a better UI to require that COPY format handlers are
registered explicitly before they can be used:

CREATE ACCESS METHOD copy_yaml TYPE copy HANDLER copy_yaml_handler;

... and then when the FORMAT is not recognized as one of the hardcoded
methods, we go look in pg_am for one with amtype='c' and the given name.
That gives you the function that initializes the Copy state.

This is convenient enough because system administrators can add COPY
formats that anyone can use, and doesn't allow to call arbitrary
functions via COPY.

I think that the patch needs to check if the function's result type is
COPY_HANDLEROID by using get_func_rettype(), before calling it. But
with this check, we can prevent arbitrary functions from being called
via COPY. Why do we need to extend CREATE ACCESS METHOD too for that
purpose?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#220Álvaro Herrera
alvherre@alvh.no-ip.org
In reply to: Masahiko Sawada (#219)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 2025-Feb-05, Masahiko Sawada wrote:

I think that the patch needs to check if the function's result type is
COPY_HANDLEROID by using get_func_rettype(), before calling it. But
with this check, we can prevent arbitrary functions from being called
via COPY. Why do we need to extend CREATE ACCESS METHOD too for that
purpose?

It's a nicer UI than a bare CREATE FUNCTION, but perhaps it is overkill.
IIRC the reason we require CREATE ACCESS METHOD for table AMs is so that
we acquire a pg_am entry with an OID that can be referenced from
elsewhere, for instance you can't drop an AM if tables are using it; but
you can't use COPY in rules or anything like that that's going to be
stored permanently. Perhaps you're right that we don't need this for
extensible COPY FORMAT.

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

#221Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#216)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 4, 2025 at 11:37 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDCH1io_dGtsmnmZ4bUWfdPhEUe_8VQNvi31+78Pt7KdQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 4 Feb 2025 17:32:07 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

BTW we need to check if the return value type of the handler function
is copy_handler.

Oh, can we do it without calling a function?

Yes.

It seems that
FmgrInfo doesn't have return value type information. Should
we read pg_catalog.pg_proc or something for it?

Yes, we can do like what we do for TABLESAMPLE for example:

/* check that handler has correct return type */
if (get_func_rettype(handlerOid) != TSM_HANDLEROID)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("function %s must return type %s",
NameListToString(rts->method), "tsm_handler"),
parser_errposition(pstate, rts->location)));

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#222Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#221)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDCd9pKZ2XMOUmnmteC60NYBLr80FWY56Nn3NEbxVxdeQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 5 Feb 2025 12:29:44 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It seems that
FmgrInfo doesn't have return value type information. Should
we read pg_catalog.pg_proc or something for it?

Yes, we can do like what we do for TABLESAMPLE for example:

/* check that handler has correct return type */
if (get_func_rettype(handlerOid) != TSM_HANDLEROID)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("function %s must return type %s",
NameListToString(rts->method), "tsm_handler"),
parser_errposition(pstate, rts->location)));

Thanks! I didn't know get_func_rettype().

I attach the v32 patch set. 0003 is only changed. The
following check is added. It's similar to TABLESAMPLE's one.

/* check that handler has correct return type */
if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("function %s must return type %s",
format, "copy_handler"),
parser_errposition(pstate, defel->location)));

Thanks,
--
kou

Attachments:

v32-0005-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From fae5ed7cd759ef77b28d69400f0ebdf9fbfd7c4d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v32 5/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 16d3b389e97..20d49d73e38 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -461,6 +461,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * the line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index c125dc3e209..d0da9e07a0d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -54,6 +54,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation.	 Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.1

v32-0006-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 298fb99716c7d392e10f5f6d24346b7c0770c05a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v32 6/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 36 +++++++++++++----
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 82 insertions(+), 21 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8d94bc313eb..b4417bb6819 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 8b09df0581f..37647949bfc 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -153,15 +156,32 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 
 /* Return a COPY FROM routine for the given options */
 static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+CopyFromGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts.binary)
-		return &CopyFromRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts->binary)
+		return &CopyFromRoutineBinary;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1567,7 +1587,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = CopyFromGetRoutine(&cstate->opts);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index d0da9e07a0d..103eb21767d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -62,6 +62,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index e064f40473b..f6b105659ab 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.1

v32-0001-Refactor-COPY-TO-to-use-format-callback-function.patchtext/x-patch; charset=us-asciiDownload
From bc750922725287eb51659eb4726c2801bcb39c49 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Sat, 28 Sep 2024 23:24:49 +0900
Subject: [PATCH v32 1/9] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 441 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  55 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 356 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99cb23cb347..26c67ddc351 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +452,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +486,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +501,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +702,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -771,19 +1050,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -796,56 +1066,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -884,13 +1105,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -903,74 +1118,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..de5dae9cc38
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,55 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row to the 'slot'.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 9a3bee93dec..6b2f22d8555 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -508,6 +508,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.47.1

v32-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchtext/x-patch; charset=us-asciiDownload
From 2555f313a45ae162e71c89322dcf8321d9408d98 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 18 Nov 2024 16:32:43 -0800
Subject: [PATCH v32 2/9] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei
Reviewed-by: Michael Paquier, Tomas Vondra, Masahiko Sawada
Reviewed-by: Junwang Zhao
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 contrib/file_fdw/file_fdw.c              |   1 -
 src/backend/commands/copyfrom.c          | 192 +++++++--
 src/backend/commands/copyfromparse.c     | 505 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  11 +
 src/tools/pgindent/typedefs.list         |   1 +
 7 files changed, 493 insertions(+), 267 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 678e754b2b9..323c43dca4a 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -21,7 +21,6 @@
 #include "access/table.h"
 #include "catalog/pg_authid.h"
 #include "catalog/pg_foreign_table.h"
-#include "commands/copy.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "commands/explain.h"
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0cbd05f5602..8b09df0581f 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,7 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1396,7 +1535,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1428,6 +1566,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1583,25 +1724,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1634,13 +1756,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1775,20 +1893,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1801,6 +1906,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..c1872acbbf6 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +740,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +761,17 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +815,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +825,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values
+	 *
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -830,6 +841,244 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	return true;
 }
 
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		if (fieldno >= fldct)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
+
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
+		{
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
+
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
+			{
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
+			}
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
+			{
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
+			}
+		}
+
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
+
+		if (string != NULL)
+			nulls[m] = false;
+
+		if (cstate->defaults[m])
+		{
+			/*
+			 * The caller must supply econtext and have switched into the
+			 * per-tuple memory context in it.
+			 */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
+
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+			cstate->num_errors++;
+
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
+
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
+				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
+
+				/* reset relname_only */
+				cstate->relname_only = false;
+			}
+
+			return true;
+		}
+
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+	}
+
+	Assert(fieldno == attr_count);
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	cstate->cur_lineno++;
+
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
+	}
+
+	if (fld_count == -1)
+	{
+		/*
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
+		 */
+		char		dummy;
+
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
+	}
+
+	return true;
+}
+
 /*
  * Read next tuple from file for COPY FROM. Return false if no more tuples.
  *
@@ -847,216 +1096,22 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
-	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
-
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
-
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
-
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
-
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
-			{
-				/* ignore input field, leaving column as NULL */
-				continue;
-			}
-
-			if (cstate->opts.csv_mode)
-			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
-			}
-
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
-
-			if (string != NULL)
-				nulls[m] = false;
-
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
-
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
-
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-				cstate->num_errors++;
-
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
-
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
-				}
-
-				return true;
-			}
-
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
-		}
-
-		Assert(fieldno == attr_count);
-	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
-
-		cstate->cur_lineno++;
-
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
-
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
-
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
-
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
-
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
-	}
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
 
 	/*
 	 * Now compute and insert any defaults available for the columns not
@@ -1087,7 +1142,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1150,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1218,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1233,11 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	/*
+	 * is_csv will be optimized away by compiler, as argument is constant at
+	 * caller.
+	 */
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1314,11 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		/*
+		 * is_csv will be optimized away by compiler, as argument is constant
+		 * at caller.
+		 */
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1357,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1385,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1402,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1413,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1433,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index de5dae9cc38..39e5a096da5 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -52,4 +52,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation.	 Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied.  This can be used for any initialization steps required
+	 * by a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM.  It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..c8b22af22d8 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 6b2f22d8555..a456981ca0f 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -497,6 +497,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.47.1

v32-0003-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 0876e1bfdd0c35a08aece68b059daf21487af6b3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v32 3/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 79 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 36 +++++++--
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 273 insertions(+), 21 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..8d94bc313eb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,70 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	/* check that handler has correct return type */
+	if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
+		ereport(ERROR,
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("function %s must return type %s",
+						format, "copy_handler"),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +584,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 26c67ddc351..18af2aaa2f9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -174,15 +177,32 @@ static const CopyToRoutine CopyToRoutineBinary = {
 
 /* Return a COPY TO routine for the given options */
 static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+CopyToGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts.binary)
-		return &CopyToRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyToRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts->binary)
+		return &CopyToRoutineBinary;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -703,7 +723,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = CopyToGetRoutine(&cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 1a657f7e0ae..fb90635a245
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 5b8c2ad2a54..b231e7a041e 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7803,6 +7803,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 7bc044e2816..285f2c8fc4f 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 39e5a096da5..c125dc3e209 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index c0d3cf0e14b..33e3a49a4fb 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -15,6 +15,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 4f544a042d4..bf25658793d 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -14,6 +14,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..4cefe7b709a
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2024, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..e064f40473b
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2024, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.1

v32-0004-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 92ffd2446cc17e657e2816a29930c8a31464cdb3 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v32 4/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 18af2aaa2f9..16d3b389e97 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -424,7 +364,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -471,7 +411,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -505,11 +445,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -530,7 +470,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -538,7 +478,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -922,12 +862,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 285f2c8fc4f..be97b07b559 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.1

v32-0007-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From d113e8d9777b789d51b8cf04e869b99e74a6c669 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v32 7/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 37647949bfc..29e2a7d13d4 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1722,7 +1722,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1850,7 +1850,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index c1872acbbf6..75b49629f08 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,7 +171,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -239,7 +239,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -331,7 +331,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1159,7 +1159,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.1

v32-0008-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 65c85cbf6f2d147923352af7272a34de506cb3a4 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v32 8/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 75b49629f08..01f2e7a8824 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -730,6 +730,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * Read raw fields in the next line for COPY FROM in text or csv mode.
  * Return false if no more lines.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 103eb21767d..ac58adbd23d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -104,4 +104,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.1

v32-0009-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From 2a9d0d48a21c91eea7a7f623e45da11672d0d9f8 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v32 9/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 ++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 83 ++++++++++++++++++-
 5 files changed, 200 insertions(+), 38 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 01f2e7a8824..7296745d6d2 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -852,6 +852,51 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool i
 	return true;
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -960,42 +1005,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index ac58adbd23d..dfab62372a7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -106,4 +106,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index f6b105659ab..b766d3c96ff 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -32,10 +33,88 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 }
 
 static bool
-CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext,
+			   Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.1

#223Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#214)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBkDE4JwjPgcLxSEwqu3nN4VXjkYS9vpRQDwA2GwNQCsg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 4 Feb 2025 22:20:51 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I was just looking at bit at this series of patch labelled with v31,
to see what is happening here.

In 0001, we have that:

+       /* format-specific routines */
+       const CopyToRoutine *routine;
[...]
-       CopySendEndOfRow(cstate);
+       cstate->routine->CopyToOneRow(cstate, slot);

Having a callback where the copy state is processed once per row is
neat in terms of design for the callbacks and what extensions can do,
and this is much better than what 2889fd23be5 has attempted (later
reverted in 1aa8324b81fa) because we don't do indirect function calls
for each attribute. Still, I have a question here: what happens for a
COPY TO that involves one attribute, a short field size like an int2
and many rows (the more rows the more pronounced the effect, of
course)? Could this level of indirection still be the cause of some
regressions in a case like that? This is the worst case I can think
about, on top of my mind, and I am not seeing tests with few
attributes like this one, where we would try to make this callback as
hot as possible. This is a performance-sensitive area.

FYI when Sutou-san last measured the performance[1], it showed a
slight speed up even with fewer columns (5 columns) in both COPY TO
and COPY FROM cases. The callback design has not changed since then.
But it would be a good idea to run the benchmark with a table having a
single small size column.

[1] /messages/by-id/20241114.161948.1677325020727842666.kou@clear-code.com

I measured v31 patch set with 1,6,11,16,21,26,31 int2
columns. See the attached PDF for 0001 and 0002 result.

0001 - to:

It's faster than master when the number of rows are
1,000,000-5,000,000.

It's almost same as master when the number of rows are
6,000,000-10,000,000.

There is no significant slow down when the number of columns
is 1.

0001 - from:

0001 doesn't change COPY FROM code. So the differences are
not real difference.

0002 - to:

0002 doesn't change COPY TO code. So "0001 - to" and "0002 -
to" must be the same result. But 0002 is faster than master
for all cases. It shows that the CopyToOneRow() approach
doesn't have significant slow down.

0002 - from:

0002 changes COPY FROM code. So this may have performance
impact.

It's almost same as master when data is smaller
((1,000,000-2,000,000 rows) or (3,000,000 rows and 1,6,11,16
columns)).

It's faster than master when data is larger.

There is no significant slow down by 0002.

Thanks,
--
kou

Attachments:

v31-intel-core-i7-3770-result-1-2.pdfapplication/pdfDownload
#224Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#223)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 7, 2025 at 5:01 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBkDE4JwjPgcLxSEwqu3nN4VXjkYS9vpRQDwA2GwNQCsg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 4 Feb 2025 22:20:51 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I was just looking at bit at this series of patch labelled with v31,
to see what is happening here.

In 0001, we have that:

+       /* format-specific routines */
+       const CopyToRoutine *routine;
[...]
-       CopySendEndOfRow(cstate);
+       cstate->routine->CopyToOneRow(cstate, slot);

Having a callback where the copy state is processed once per row is
neat in terms of design for the callbacks and what extensions can do,
and this is much better than what 2889fd23be5 has attempted (later
reverted in 1aa8324b81fa) because we don't do indirect function calls
for each attribute. Still, I have a question here: what happens for a
COPY TO that involves one attribute, a short field size like an int2
and many rows (the more rows the more pronounced the effect, of
course)? Could this level of indirection still be the cause of some
regressions in a case like that? This is the worst case I can think
about, on top of my mind, and I am not seeing tests with few
attributes like this one, where we would try to make this callback as
hot as possible. This is a performance-sensitive area.

FYI when Sutou-san last measured the performance[1], it showed a
slight speed up even with fewer columns (5 columns) in both COPY TO
and COPY FROM cases. The callback design has not changed since then.
But it would be a good idea to run the benchmark with a table having a
single small size column.

[1] /messages/by-id/20241114.161948.1677325020727842666.kou@clear-code.com

I measured v31 patch set with 1,6,11,16,21,26,31 int2
columns. See the attached PDF for 0001 and 0002 result.

0001 - to:

It's faster than master when the number of rows are
1,000,000-5,000,000.

It's almost same as master when the number of rows are
6,000,000-10,000,000.

There is no significant slow down when the number of columns
is 1.

0001 - from:

0001 doesn't change COPY FROM code. So the differences are
not real difference.

0002 - to:

0002 doesn't change COPY TO code. So "0001 - to" and "0002 -
to" must be the same result. But 0002 is faster than master
for all cases. It shows that the CopyToOneRow() approach
doesn't have significant slow down.

0002 - from:

0002 changes COPY FROM code. So this may have performance
impact.

It's almost same as master when data is smaller
((1,000,000-2,000,000 rows) or (3,000,000 rows and 1,6,11,16
columns)).

It's faster than master when data is larger.

There is no significant slow down by 0002.

Thank you for sharing the benchmark results. That looks good to me.

Looking at the 0001 patch again, I have a question: we have
CopyToTextLikeOneRow() for both CSV and text format:

+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, true);
+}

These two functions pass different is_csv value to that function,
which is used as follows:

+                       if (is_csv)
+                               CopyAttributeOutCSV(cstate, string,
+
 cstate->opts.force_quote_flags[attnum - 1]);
+                       else
+                               CopyAttributeOutText(cstate, string);

However, we can know whether the format is CSV or text by checking
cstate->opts.csv_mode instead of passing is_csv. That way, we can
directly call CopyToTextLikeOneRow() but not via CopyToCSVOneRow() or
CopyToTextOneRow(). It would not help performance since we already
inline CopyToTextLikeOneRow(), but it looks simpler.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#225Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#224)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAni3cKToPfdShTsc0NmaJOtbJuUb=skyz3Udj7HZY7dA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 20 Feb 2025 15:28:26 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Looking at the 0001 patch again, I have a question: we have
CopyToTextLikeOneRow() for both CSV and text format:

+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, true);
+}

These two functions pass different is_csv value to that function,
which is used as follows:

+                       if (is_csv)
+                               CopyAttributeOutCSV(cstate, string,
+
cstate->opts.force_quote_flags[attnum - 1]);
+                       else
+                               CopyAttributeOutText(cstate, string);

However, we can know whether the format is CSV or text by checking
cstate->opts.csv_mode instead of passing is_csv. That way, we can
directly call CopyToTextLikeOneRow() but not via CopyToCSVOneRow() or
CopyToTextOneRow(). It would not help performance since we already
inline CopyToTextLikeOneRow(), but it looks simpler.

This means the following, right?

1. We remove CopyToTextOneRow() and CopyToCSVOneRow()
2. We remove "bool is_csv" parameter from CopyToTextLikeOneRow()
and use cstate->opts.csv_mode in CopyToTextLikeOneRow()
instead of is_csv
3. We use CopyToTextLikeOneRow() for
CopyToRoutineText::CopyToOneRow and
CopyToRoutineCSV::CopyToOneRow

If we use this approach, we can't remove the following
branch in compile time:

+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);

We can remove the branch in compile time with the current
approach (constant argument + inline).

It may have a negative performance impact because the "if"
is used many times with large data. (That's why we choose
the constant argument + inline approach in this thread.)

Thanks,
--
kou

#226Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#225)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 20, 2025 at 6:48 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoAni3cKToPfdShTsc0NmaJOtbJuUb=skyz3Udj7HZY7dA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 20 Feb 2025 15:28:26 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Looking at the 0001 patch again, I have a question: we have
CopyToTextLikeOneRow() for both CSV and text format:

+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+       CopyToTextLikeOneRow(cstate, slot, true);
+}

These two functions pass different is_csv value to that function,
which is used as follows:

+                       if (is_csv)
+                               CopyAttributeOutCSV(cstate, string,
+
cstate->opts.force_quote_flags[attnum - 1]);
+                       else
+                               CopyAttributeOutText(cstate, string);

However, we can know whether the format is CSV or text by checking
cstate->opts.csv_mode instead of passing is_csv. That way, we can
directly call CopyToTextLikeOneRow() but not via CopyToCSVOneRow() or
CopyToTextOneRow(). It would not help performance since we already
inline CopyToTextLikeOneRow(), but it looks simpler.

This means the following, right?

1. We remove CopyToTextOneRow() and CopyToCSVOneRow()
2. We remove "bool is_csv" parameter from CopyToTextLikeOneRow()
and use cstate->opts.csv_mode in CopyToTextLikeOneRow()
instead of is_csv
3. We use CopyToTextLikeOneRow() for
CopyToRoutineText::CopyToOneRow and
CopyToRoutineCSV::CopyToOneRow

If we use this approach, we can't remove the following
branch in compile time:

+                       if (is_csv)
+                               CopyAttributeOutCSV(cstate, string,
+                                                                       cstate->opts.force_quote_flags[attnum - 1]);
+                       else
+                               CopyAttributeOutText(cstate, string);

We can remove the branch in compile time with the current
approach (constant argument + inline).

It may have a negative performance impact because the "if"
is used many times with large data. (That's why we choose
the constant argument + inline approach in this thread.)

Thank you for the explanation, I missed that fact. I'm fine with having is_csv.

The first two patches are refactoring patches (+ small performance
improvements). I've reviewed these patches again and attached the
updated patches. I reorganized the function order and updated comments
etc. I find that these patches are reasonably ready to push. Could you
review these versions? I'm going to push them, barring objections and
further comments.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

v33-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchapplication/octet-stream; name=v33-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchDownload
From 1d2873a9e33fe2784aa6131e8b3973be9afe81b3 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 25 Feb 2025 13:58:58 -0800
Subject: [PATCH v33 2/2] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei <kou@clear-code.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Tomas Vondra <tomas.vondra@enterprisedb.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyfrom.c          | 192 +++++++---
 src/backend/commands/copyfromparse.c     | 443 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  48 ++-
 src/include/commands/copyfrom_internal.h |  11 +
 src/tools/pgindent/typedefs.list         |   1 +
 6 files changed, 453 insertions(+), 244 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 8875d79d59a..4c2479974c4 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,7 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1403,7 +1542,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1435,6 +1573,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1590,25 +1731,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1641,13 +1763,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1782,20 +1900,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1808,6 +1913,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..d5d5fda0ae5 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +740,11 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +761,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +811,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +821,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -847,233 +851,274 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
+
+	/*
+	 * Now compute and insert any defaults available for the columns not
+	 * provided by the input data.  Anything not processed here or above will
+	 * remain NULL.
+	 */
+	for (i = 0; i < num_defaults; i++)
 	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+		/*
+		 * The caller must supply econtext and have switched into the
+		 * per-tuple memory context in it.
+		 */
+		Assert(econtext != NULL);
+		Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+		values[defmap[i]] = ExecEvalExpr(defexprs[defmap[i]], econtext,
+										 &nulls[defmap[i]]);
+	}
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+		if (fieldno >= fldct)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
 		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
 
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
-				/* ignore input field, leaving column as NULL */
-				continue;
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
 			}
-
-			if (cstate->opts.csv_mode)
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
 			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
 			}
+		}
 
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
-			if (string != NULL)
-				nulls[m] = false;
+		if (string != NULL)
+			nulls[m] = false;
 
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+		if (cstate->defaults[m])
+		{
+			/* We must have switched into the per-tuple memory context */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
 
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
 
-				cstate->num_errors++;
+			cstate->num_errors++;
 
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
 
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
 				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
 
-				return true;
+				/* reset relname_only */
+				cstate->relname_only = false;
 			}
 
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
+			return true;
 		}
 
-		Assert(fieldno == attr_count);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
 	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
 
-		cstate->cur_lineno++;
+	Assert(fieldno == attr_count);
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
+	return true;
+}
 
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
 
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+	cstate->cur_lineno++;
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
 	}
 
-	/*
-	 * Now compute and insert any defaults available for the columns not
-	 * provided by the input data.  Anything not processed here or above will
-	 * remain NULL.
-	 */
-	for (i = 0; i < num_defaults; i++)
+	if (fld_count == -1)
 	{
 		/*
-		 * The caller must supply econtext and have switched into the
-		 * per-tuple memory context in it.
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
 		 */
-		Assert(econtext != NULL);
-		Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+		char		dummy;
 
-		values[defmap[i]] = ExecEvalExpr(defexprs[defmap[i]], econtext,
-										 &nulls[defmap[i]]);
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
 	}
 
 	return true;
@@ -1087,7 +1132,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1140,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1208,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1223,7 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1300,7 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1339,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1367,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1384,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1395,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1415,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index eb09271d94b..fc114079d5a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -52,4 +52,50 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied. This can be used for any initialization steps required by
+	 * a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM. It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/* End a COPY FROM. This callback is called once at the end of COPY FROM */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..c8b22af22d8 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b0c97b0fb85..eca93ab9553 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -501,6 +501,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.43.5

v33-0001-Refactor-COPY-TO-to-use-format-callback-function.patchapplication/octet-stream; name=v33-0001-Refactor-COPY-TO-to-use-format-callback-function.patchDownload
From 6c2d95044ef89295bde30ccb0a0dbedeb6cb94ca Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 25 Feb 2025 13:58:41 -0800
Subject: [PATCH v33 1/2] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain intext or CSV mode.

Author: Sutou Kouhei <kou@clear-code.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Tomas Vondra <tomas.vondra@enterprisedb.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 440 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  55 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 356 insertions(+), 140 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 091fbc12cc5..a74a7e763dc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +65,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +118,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +138,254 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overheads.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			/*
+			 * is_csv will be optimized away by compiler, as argument is
+			 * constant at caller.
+			 */
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +453,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +487,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +502,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +703,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -772,19 +1052,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -797,56 +1068,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -885,13 +1107,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -904,74 +1120,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..eb09271d94b
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,55 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row stored in 'slot' to the destination.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/* End a COPY TO. This callback is called once at the end of COPY FROM */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1649f5e1011..b0c97b0fb85 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -512,6 +512,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.5

#227Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#226)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBjzkL2Lv7j4teaHBZvNmKctQtH6X71kN_sj6Fm-+VvJQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 25 Feb 2025 14:05:28 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The first two patches are refactoring patches (+ small performance
improvements). I've reviewed these patches again and attached the
updated patches. I reorganized the function order and updated comments
etc. I find that these patches are reasonably ready to push. Could you
review these versions? I'm going to push them, barring objections and
further comments.

Sure. Here are some minor comments:

0001:

Commit message:

or CSV mode. The performance benchmark results showed ~5% performance
gain intext or CSV mode.

intext -> in text

--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c

@@ -20,6 +20,7 @@

#include "commands/copy.h"
+#include "commands/copyapi.h"

We can remove '#include "commands/copy.h"' because it's
included in copyapi.h. (0002 does it.)

@@ -254,6 +502,35 @@ CopySendEndOfRow(CopyToState cstate)

+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * the line termination and do common appropriate things for the end of row.
+ */

Sends the the line ->
Sends the line

--- /dev/null
+++ b/src/include/commands/copyapi.h

+ /* End a COPY TO. This callback is called once at the end of COPY FROM */

The last "." is missing: ... COPY FROM.

0002:

Commit message:

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

COPY TO -> COPY FROM

--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c

@@ -1087,7 +1132,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,

static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)

@@ -1163,7 +1208,7 @@ CopyReadLine(CopyFromState cstate)

static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)

We may want to add a comment why we don't use "inline" nor
"pg_attribute_always_inline" here:

/messages/by-id/CAD21AoBNfKDbJnu-zONNpG820ZXYC0fuTSLrJ-UdRqU4qp2wog@mail.gmail.com

Yes, I'm not sure it's really necessary to make it inline since the
benchmark results don't show much difference. Probably this is because
the function has 'is_csv' in some 'if' branches but the compiler
cannot optimize out the whole 'if' branches as most 'if' branches
check 'is_csv' and other variables.

Or we can add "inline" not "pg_attribute_always_inline" here
as a hint for compiler.

--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h

@@ -52,4 +52,50 @@ typedef struct CopyToRoutine

+ /* End a COPY FROM. This callback is called once at the end of COPY FROM */

The last "." is missing: ... COPY FROM.

I think that these patches are ready to push too.

Thanks,
--
kou

#228Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#227)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 25, 2025 at 3:52 PM Sutou Kouhei <kou@clear-code.com> wrote:

Thank you for reviewing the patches. I've addressed comments except
for the following comment:

--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c

@@ -1087,7 +1132,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,

static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)

@@ -1163,7 +1208,7 @@ CopyReadLine(CopyFromState cstate)

static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)

We may want to add a comment why we don't use "inline" nor
"pg_attribute_always_inline" here:

/messages/by-id/CAD21AoBNfKDbJnu-zONNpG820ZXYC0fuTSLrJ-UdRqU4qp2wog@mail.gmail.com

Yes, I'm not sure it's really necessary to make it inline since the
benchmark results don't show much difference. Probably this is because
the function has 'is_csv' in some 'if' branches but the compiler
cannot optimize out the whole 'if' branches as most 'if' branches
check 'is_csv' and other variables.

Or we can add "inline" not "pg_attribute_always_inline" here
as a hint for compiler.

I think we should not add inline unless we see a performance
improvement. Also, I find that it would be independent with this
refactoring so we can add it later if needed.

I've attached updated patches.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

v34-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchapplication/octet-stream; name=v34-0002-Refactor-COPY-FROM-to-use-format-callback-functi.patchDownload
From 7be14abbee2f77b953af176221ac05ce74cdd590 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 25 Feb 2025 13:58:58 -0800
Subject: [PATCH v34 2/2] Refactor COPY FROM to use format callback functions.

This commit introduces a new CopyFromRoutine struct, which is a set of
callback routines to read tuples in a specific format. It also makes
COPY FROM with the existing formats (text, CSV, and binary) utilize
these format callbacks.

This change is a preliminary step towards making the COPY FROM command
extensible in terms of output formats.

Similar to XXXX, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei <kou@clear-code.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Tomas Vondra <tomas.vondra@enterprisedb.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyfrom.c          | 192 +++++++---
 src/backend/commands/copyfromparse.c     | 445 +++++++++++++----------
 src/include/commands/copy.h              |   2 -
 src/include/commands/copyapi.h           |  50 ++-
 src/include/commands/copyfrom_internal.h |  11 +
 src/tools/pgindent/typedefs.list         |   1 +
 6 files changed, 457 insertions(+), 244 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 8875d79d59a..4c2479974c4 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -28,7 +28,7 @@
 #include "access/tableam.h"
 #include "access/xact.h"
 #include "catalog/namespace.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */
+static void CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+								   Oid *typioparam);
+static void CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromTextLikeEnd(CopyFromState cstate);
+static void CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+								 FmgrInfo *finfo, Oid *typioparam);
+static void CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc);
+static void CopyFromBinaryEnd(CopyFromState cstate);
+
+
+/*
+ * COPY FROM routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromTextOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromInFunc = CopyFromTextLikeInFunc,
+	.CopyFromStart = CopyFromTextLikeStart,
+	.CopyFromOneRow = CopyFromCSVOneRow,
+	.CopyFromEnd = CopyFromTextLikeEnd,
+};
+
+/* binary format */
+static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromInFunc = CopyFromBinaryInFunc,
+	.CopyFromStart = CopyFromBinaryStart,
+	.CopyFromOneRow = CopyFromBinaryOneRow,
+	.CopyFromEnd = CopyFromBinaryEnd,
+};
+
+/* Return a COPY FROM routine for the given options */
+static const CopyFromRoutine *
+CopyFromGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts.binary)
+		return &CopyFromRoutineBinary;
+
+	/* default is text */
+	return &CopyFromRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	AttrNumber	attr_count;
+
+	/*
+	 * If encoding conversion is needed, we need another buffer to hold the
+	 * converted input data.  Otherwise, we can just point input_buf to the
+	 * same buffer as raw_buf.
+	 */
+	if (cstate->need_transcoding)
+	{
+		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		cstate->input_buf_index = cstate->input_buf_len = 0;
+	}
+	else
+		cstate->input_buf = cstate->raw_buf;
+	cstate->input_reached_eof = false;
+
+	initStringInfo(&cstate->line_buf);
+
+	/*
+	 * Create workspace for CopyReadAttributes results; used by CSV and text
+	 * format.
+	 */
+	attr_count = list_length(cstate->attnumlist);
+	cstate->max_fields = attr_count;
+	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+}
+
+/*
+ * Implementation of the infunc callback for text and CSV formats. Assign
+ * the input function data to the given *finfo.
+ */
+static void
+CopyFromTextLikeInFunc(CopyFromState cstate, Oid atttypid, FmgrInfo *finfo,
+					   Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyFromTextLikeEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
+/* Implementation of the start callback for binary format */
+static void
+CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	/* Read and verify binary header */
+	ReceiveCopyBinaryHeader(cstate);
+}
+
+/*
+ * Implementation of the infunc callback for binary format. Assign
+ * the binary input function to the given *finfo.
+ */
+static void
+CopyFromBinaryInFunc(CopyFromState cstate, Oid atttypid,
+					 FmgrInfo *finfo, Oid *typioparam)
+{
+	Oid			func_oid;
+
+	getTypeBinaryInputInfo(atttypid, &func_oid, typioparam);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyFromBinaryEnd(CopyFromState cstate)
+{
+	/* nothing to do */
+}
+
 /*
  * error context callback for COPY FROM
  *
@@ -1403,7 +1542,6 @@ BeginCopyFrom(ParseState *pstate,
 				num_defaults;
 	FmgrInfo   *in_functions;
 	Oid		   *typioparams;
-	Oid			in_func_oid;
 	int		   *defmap;
 	ExprState **defexprs;
 	MemoryContext oldcontext;
@@ -1435,6 +1573,9 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
+	/* Set the format routine */
+	cstate->routine = CopyFromGetRoutine(cstate->opts);
+
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1590,25 +1731,6 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->raw_buf_index = cstate->raw_buf_len = 0;
 	cstate->raw_reached_eof = false;
 
-	if (!cstate->opts.binary)
-	{
-		/*
-		 * If encoding conversion is needed, we need another buffer to hold
-		 * the converted input data.  Otherwise, we can just point input_buf
-		 * to the same buffer as raw_buf.
-		 */
-		if (cstate->need_transcoding)
-		{
-			cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-			cstate->input_buf_index = cstate->input_buf_len = 0;
-		}
-		else
-			cstate->input_buf = cstate->raw_buf;
-		cstate->input_reached_eof = false;
-
-		initStringInfo(&cstate->line_buf);
-	}
-
 	initStringInfo(&cstate->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
@@ -1641,13 +1763,9 @@ BeginCopyFrom(ParseState *pstate,
 			continue;
 
 		/* Fetch the input function and typioparam info */
-		if (cstate->opts.binary)
-			getTypeBinaryInputInfo(att->atttypid,
-								   &in_func_oid, &typioparams[attnum - 1]);
-		else
-			getTypeInputInfo(att->atttypid,
-							 &in_func_oid, &typioparams[attnum - 1]);
-		fmgr_info(in_func_oid, &in_functions[attnum - 1]);
+		cstate->routine->CopyFromInFunc(cstate, att->atttypid,
+										&in_functions[attnum - 1],
+										&typioparams[attnum - 1]);
 
 		/* Get default info if available */
 		defexprs[attnum - 1] = NULL;
@@ -1782,20 +1900,7 @@ BeginCopyFrom(ParseState *pstate,
 
 	pgstat_progress_update_multi_param(3, progress_cols, progress_vals);
 
-	if (cstate->opts.binary)
-	{
-		/* Read and verify binary header */
-		ReceiveCopyBinaryHeader(cstate);
-	}
-
-	/* create workspace for CopyReadAttributes results */
-	if (!cstate->opts.binary)
-	{
-		AttrNumber	attr_count = list_length(cstate->attnumlist);
-
-		cstate->max_fields = attr_count;
-		cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
-	}
+	cstate->routine->CopyFromStart(cstate, tupDesc);
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1808,6 +1913,9 @@ BeginCopyFrom(ParseState *pstate,
 void
 EndCopyFrom(CopyFromState cstate)
 {
+	/* Invoke the end callback */
+	cstate->routine->CopyFromEnd(cstate);
+
 	/* No COPY FROM related resources except memory. */
 	if (cstate->is_program)
 	{
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index caccdc8563c..7b14ef699a9 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -62,7 +62,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
 #include "commands/progress.h"
 #include "executor/executor.h"
@@ -140,8 +140,8 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate);
-static bool CopyReadLineText(CopyFromState cstate);
+static bool CopyReadLine(CopyFromState cstate, bool is_csv);
+static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
 static int	CopyReadAttributesText(CopyFromState cstate);
 static int	CopyReadAttributesCSV(CopyFromState cstate);
 static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
@@ -740,9 +740,12 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
  * in the relation.
  *
  * NOTE: force_not_null option are not applied to the returned fields.
+ *
+ * We use pg_attribute_always_inline to reduce function call overhead
+ * and to help compilers to optimize away the 'is_csv' condition.
  */
-bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+static pg_attribute_always_inline bool
+NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done;
@@ -759,13 +762,13 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 		tupDesc = RelationGetDescr(cstate->rel);
 
 		cstate->cur_lineno++;
-		done = CopyReadLine(cstate);
+		done = CopyReadLine(cstate, is_csv);
 
 		if (cstate->opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
-			if (cstate->opts.csv_mode)
+			if (is_csv)
 				fldct = CopyReadAttributesCSV(cstate);
 			else
 				fldct = CopyReadAttributesText(cstate);
@@ -809,7 +812,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	cstate->cur_lineno++;
 
 	/* Actually read the line into memory here */
-	done = CopyReadLine(cstate);
+	done = CopyReadLine(cstate, is_csv);
 
 	/*
 	 * EOF at start of line means we're done.  If we see EOF after some
@@ -819,8 +822,10 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 	if (done && cstate->line_buf.len == 0)
 		return false;
 
-	/* Parse the line into de-escaped field values */
-	if (cstate->opts.csv_mode)
+	/*
+	 * Parse the line into de-escaped field values.
+	 */
+	if (is_csv)
 		fldct = CopyReadAttributesCSV(cstate);
 	else
 		fldct = CopyReadAttributesText(cstate);
@@ -847,233 +852,275 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				attr_count,
 				num_defaults = cstate->num_defaults;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
 	int			i;
 	int		   *defmap = cstate->defmap;
 	ExprState **defexprs = cstate->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
-	attr_count = list_length(cstate->attnumlist);
 
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
 	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
-	if (!cstate->opts.binary)
+	/* Get one row from source */
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+		return false;
+
+	/*
+	 * Now compute and insert any defaults available for the columns not
+	 * provided by the input data.  Anything not processed here or above will
+	 * remain NULL.
+	 */
+	for (i = 0; i < num_defaults; i++)
 	{
-		char	  **field_strings;
-		ListCell   *cur;
-		int			fldct;
-		int			fieldno;
-		char	   *string;
+		/*
+		 * The caller must supply econtext and have switched into the
+		 * per-tuple memory context in it.
+		 */
+		Assert(econtext != NULL);
+		Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-		/* read raw fields in the next line */
-		if (!NextCopyFromRawFields(cstate, &field_strings, &fldct))
-			return false;
+		values[defmap[i]] = ExecEvalExpr(defexprs[defmap[i]], econtext,
+										 &nulls[defmap[i]]);
+	}
+
+	return true;
+}
+
+/* Implementation of the per-row callback for text format */
+bool
+CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				   bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+bool
+CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+				  bool *nulls)
+{
+	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+}
+
+/*
+ * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overhead
+ * and to help compilers to optimize away the 'is_csv' condition.
+ */
+static pg_attribute_always_inline bool
+CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, bool is_csv)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	ExprState **defexprs = cstate->defexprs;
+	char	  **field_strings;
+	ListCell   *cur;
+	int			fldct;
+	int			fieldno;
+	char	   *string;
+
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
+
+	/* read raw fields in the next line */
+	if (!NextCopyFromRawFields(cstate, &field_strings, &fldct, is_csv))
+		return false;
+
+	/* check for overflowing fields */
+	if (attr_count > 0 && fldct > attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("extra data after last expected column")));
+
+	fieldno = 0;
+
+	/* Loop to read the user attributes on the line. */
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-		/* check for overflowing fields */
-		if (attr_count > 0 && fldct > attr_count)
+		if (fieldno >= fldct)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("extra data after last expected column")));
-
-		fieldno = 0;
+					 errmsg("missing data for column \"%s\"",
+							NameStr(att->attname))));
+		string = field_strings[fieldno++];
 
-		/* Loop to read the user attributes on the line. */
-		foreach(cur, cstate->attnumlist)
+		if (cstate->convert_select_flags &&
+			!cstate->convert_select_flags[m])
 		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			if (fieldno >= fldct)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("missing data for column \"%s\"",
-								NameStr(att->attname))));
-			string = field_strings[fieldno++];
+			/* ignore input field, leaving column as NULL */
+			continue;
+		}
 
-			if (cstate->convert_select_flags &&
-				!cstate->convert_select_flags[m])
+		if (is_csv)
+		{
+			if (string == NULL &&
+				cstate->opts.force_notnull_flags[m])
 			{
-				/* ignore input field, leaving column as NULL */
-				continue;
+				/*
+				 * FORCE_NOT_NULL option is set and column is NULL - convert
+				 * it to the NULL string.
+				 */
+				string = cstate->opts.null_print;
 			}
-
-			if (cstate->opts.csv_mode)
+			else if (string != NULL && cstate->opts.force_null_flags[m]
+					 && strcmp(string, cstate->opts.null_print) == 0)
 			{
-				if (string == NULL &&
-					cstate->opts.force_notnull_flags[m])
-				{
-					/*
-					 * FORCE_NOT_NULL option is set and column is NULL -
-					 * convert it to the NULL string.
-					 */
-					string = cstate->opts.null_print;
-				}
-				else if (string != NULL && cstate->opts.force_null_flags[m]
-						 && strcmp(string, cstate->opts.null_print) == 0)
-				{
-					/*
-					 * FORCE_NULL option is set and column matches the NULL
-					 * string. It must have been quoted, or otherwise the
-					 * string would already have been set to NULL. Convert it
-					 * to NULL as specified.
-					 */
-					string = NULL;
-				}
+				/*
+				 * FORCE_NULL option is set and column matches the NULL
+				 * string. It must have been quoted, or otherwise the string
+				 * would already have been set to NULL. Convert it to NULL as
+				 * specified.
+				 */
+				string = NULL;
 			}
+		}
 
-			cstate->cur_attname = NameStr(att->attname);
-			cstate->cur_attval = string;
+		cstate->cur_attname = NameStr(att->attname);
+		cstate->cur_attval = string;
 
-			if (string != NULL)
-				nulls[m] = false;
+		if (string != NULL)
+			nulls[m] = false;
 
-			if (cstate->defaults[m])
-			{
-				/*
-				 * The caller must supply econtext and have switched into the
-				 * per-tuple memory context in it.
-				 */
-				Assert(econtext != NULL);
-				Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+		if (cstate->defaults[m])
+		{
+			/* We must have switched into the per-tuple memory context */
+			Assert(econtext != NULL);
+			Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
 
-				values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
-			}
+			values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
+		}
 
-			/*
-			 * If ON_ERROR is specified with IGNORE, skip rows with soft
-			 * errors
-			 */
-			else if (!InputFunctionCallSafe(&in_functions[m],
-											string,
-											typioparams[m],
-											att->atttypmod,
-											(Node *) cstate->escontext,
-											&values[m]))
-			{
-				Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+		/*
+		 * If ON_ERROR is specified with IGNORE, skip rows with soft errors
+		 */
+		else if (!InputFunctionCallSafe(&in_functions[m],
+										string,
+										typioparams[m],
+										att->atttypmod,
+										(Node *) cstate->escontext,
+										&values[m]))
+		{
+			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
 
-				cstate->num_errors++;
+			cstate->num_errors++;
 
-				if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-				{
-					/*
-					 * Since we emit line number and column info in the below
-					 * notice message, we suppress error context information
-					 * other than the relation name.
-					 */
-					Assert(!cstate->relname_only);
-					cstate->relname_only = true;
+			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			{
+				/*
+				 * Since we emit line number and column info in the below
+				 * notice message, we suppress error context information other
+				 * than the relation name.
+				 */
+				Assert(!cstate->relname_only);
+				cstate->relname_only = true;
 
-					if (cstate->cur_attval)
-					{
-						char	   *attval;
-
-						attval = CopyLimitPrintoutLength(cstate->cur_attval);
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname,
-									   attval));
-						pfree(attval);
-					}
-					else
-						ereport(NOTICE,
-								errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-									   (unsigned long long) cstate->cur_lineno,
-									   cstate->cur_attname));
-
-					/* reset relname_only */
-					cstate->relname_only = false;
+				if (cstate->cur_attval)
+				{
+					char	   *attval;
+
+					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname,
+								   attval));
+					pfree(attval);
 				}
+				else
+					ereport(NOTICE,
+							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+								   (unsigned long long) cstate->cur_lineno,
+								   cstate->cur_attname));
 
-				return true;
+				/* reset relname_only */
+				cstate->relname_only = false;
 			}
 
-			cstate->cur_attname = NULL;
-			cstate->cur_attval = NULL;
+			return true;
 		}
 
-		Assert(fieldno == attr_count);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
 	}
-	else
-	{
-		/* binary */
-		int16		fld_count;
-		ListCell   *cur;
 
-		cstate->cur_lineno++;
+	Assert(fieldno == attr_count);
 
-		if (!CopyGetInt16(cstate, &fld_count))
-		{
-			/* EOF detected (end of file, or protocol-level EOF) */
-			return false;
-		}
+	return true;
+}
 
-		if (fld_count == -1)
-		{
-			/*
-			 * Received EOF marker.  Wait for the protocol-level EOF, and
-			 * complain if it doesn't come immediately.  In COPY FROM STDIN,
-			 * this ensures that we correctly handle CopyFail, if client
-			 * chooses to send that now.  When copying from file, we could
-			 * ignore the rest of the file like in text mode, but we choose to
-			 * be consistent with the COPY FROM STDIN case.
-			 */
-			char		dummy;
+/* Implementation of the per-row callback for binary format */
+bool
+CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
+					 bool *nulls)
+{
+	TupleDesc	tupDesc;
+	AttrNumber	attr_count;
+	FmgrInfo   *in_functions = cstate->in_functions;
+	Oid		   *typioparams = cstate->typioparams;
+	int16		fld_count;
+	ListCell   *cur;
 
-			if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
-				ereport(ERROR,
-						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 errmsg("received copy data after EOF marker")));
-			return false;
-		}
+	tupDesc = RelationGetDescr(cstate->rel);
+	attr_count = list_length(cstate->attnumlist);
 
-		if (fld_count != attr_count)
-			ereport(ERROR,
-					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-					 errmsg("row field count is %d, expected %d",
-							(int) fld_count, attr_count)));
+	cstate->cur_lineno++;
 
-		foreach(cur, cstate->attnumlist)
-		{
-			int			attnum = lfirst_int(cur);
-			int			m = attnum - 1;
-			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
-
-			cstate->cur_attname = NameStr(att->attname);
-			values[m] = CopyReadBinaryAttribute(cstate,
-												&in_functions[m],
-												typioparams[m],
-												att->atttypmod,
-												&nulls[m]);
-			cstate->cur_attname = NULL;
-		}
+	if (!CopyGetInt16(cstate, &fld_count))
+	{
+		/* EOF detected (end of file, or protocol-level EOF) */
+		return false;
 	}
 
-	/*
-	 * Now compute and insert any defaults available for the columns not
-	 * provided by the input data.  Anything not processed here or above will
-	 * remain NULL.
-	 */
-	for (i = 0; i < num_defaults; i++)
+	if (fld_count == -1)
 	{
 		/*
-		 * The caller must supply econtext and have switched into the
-		 * per-tuple memory context in it.
+		 * Received EOF marker.  Wait for the protocol-level EOF, and complain
+		 * if it doesn't come immediately.  In COPY FROM STDIN, this ensures
+		 * that we correctly handle CopyFail, if client chooses to send that
+		 * now.  When copying from file, we could ignore the rest of the file
+		 * like in text mode, but we choose to be consistent with the COPY
+		 * FROM STDIN case.
 		 */
-		Assert(econtext != NULL);
-		Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);
+		char		dummy;
 
-		values[defmap[i]] = ExecEvalExpr(defexprs[defmap[i]], econtext,
-										 &nulls[defmap[i]]);
+		if (CopyReadBinaryData(cstate, &dummy, 1) > 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+					 errmsg("received copy data after EOF marker")));
+		return false;
+	}
+
+	if (fld_count != attr_count)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("row field count is %d, expected %d",
+						(int) fld_count, attr_count)));
+
+	foreach(cur, cstate->attnumlist)
+	{
+		int			attnum = lfirst_int(cur);
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+		cstate->cur_attname = NameStr(att->attname);
+		values[m] = CopyReadBinaryAttribute(cstate,
+											&in_functions[m],
+											typioparams[m],
+											att->atttypmod,
+											&nulls[m]);
+		cstate->cur_attname = NULL;
 	}
 
 	return true;
@@ -1087,7 +1134,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate)
+CopyReadLine(CopyFromState cstate, bool is_csv)
 {
 	bool		result;
 
@@ -1095,7 +1142,7 @@ CopyReadLine(CopyFromState cstate)
 	cstate->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
-	result = CopyReadLineText(cstate);
+	result = CopyReadLineText(cstate, is_csv);
 
 	if (result)
 	{
@@ -1163,7 +1210,7 @@ CopyReadLine(CopyFromState cstate)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate)
+CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1178,7 +1225,7 @@ CopyReadLineText(CopyFromState cstate)
 	char		quotec = '\0';
 	char		escapec = '\0';
 
-	if (cstate->opts.csv_mode)
+	if (is_csv)
 	{
 		quotec = cstate->opts.quote[0];
 		escapec = cstate->opts.escape[0];
@@ -1255,7 +1302,7 @@ CopyReadLineText(CopyFromState cstate)
 		prev_raw_ptr = input_buf_ptr;
 		c = copy_input_buf[input_buf_ptr++];
 
-		if (cstate->opts.csv_mode)
+		if (is_csv)
 		{
 			/*
 			 * If character is '\r', we may need to look ahead below.  Force
@@ -1294,7 +1341,7 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \r */
-		if (c == '\r' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
 			if (cstate->eol_type == EOL_UNKNOWN ||
@@ -1322,10 +1369,10 @@ CopyReadLineText(CopyFromState cstate)
 					if (cstate->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errmsg("literal carriage return found in data") :
 								 errmsg("unquoted carriage return found in data"),
-								 !cstate->opts.csv_mode ?
+								 !is_csv ?
 								 errhint("Use \"\\r\" to represent carriage return.") :
 								 errhint("Use quoted CSV field to represent carriage return.")));
 
@@ -1339,10 +1386,10 @@ CopyReadLineText(CopyFromState cstate)
 			else if (cstate->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal carriage return found in data") :
 						 errmsg("unquoted carriage return found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\r\" to represent carriage return.") :
 						 errhint("Use quoted CSV field to represent carriage return.")));
 			/* If reach here, we have found the line terminator */
@@ -1350,15 +1397,15 @@ CopyReadLineText(CopyFromState cstate)
 		}
 
 		/* Process \n */
-		if (c == '\n' && (!cstate->opts.csv_mode || !in_quote))
+		if (c == '\n' && (!is_csv || !in_quote))
 		{
 			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errmsg("literal newline found in data") :
 						 errmsg("unquoted newline found in data"),
-						 !cstate->opts.csv_mode ?
+						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
 			cstate->eol_type = EOL_NL;	/* in case not set yet */
@@ -1370,7 +1417,7 @@ CopyReadLineText(CopyFromState cstate)
 		 * Process backslash, except in CSV mode where backslash is a normal
 		 * character.
 		 */
-		if (c == '\\' && !cstate->opts.csv_mode)
+		if (c == '\\' && !is_csv)
 		{
 			char		c2;
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..7bc044e2816 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 						 Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
 extern char *CopyLimitPrintoutLength(const char *str);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index bd2d386816e..2a2d2f9876b 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -1,7 +1,7 @@
 /*-------------------------------------------------------------------------
  *
  * copyapi.h
- *	  API for COPY TO handlers
+ *	  API for COPY TO/FROM handlers
  *
  *
  * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
@@ -54,4 +54,52 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * API structure for a COPY FROM format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyFromRoutine
+{
+	/*
+	 * Set input function information. This callback is called once at the
+	 * beginning of COPY FROM.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the input function.
+	 *
+	 * 'typioparam' can be optionally filled to define the OID of the type to
+	 * pass to the input function.'atttypid' is the OID of data type used by
+	 * the relation's attribute.
+	 */
+	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
+								   FmgrInfo *finfo, Oid *typioparam);
+
+	/*
+	 * Start a COPY FROM. This callback is called once at the beginning of
+	 * COPY FROM.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation where the data needs
+	 * to be copied. This can be used for any initialization steps required by
+	 * a format.
+	 */
+	void		(*CopyFromStart) (CopyFromState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Read one row from the source and fill *values and *nulls.
+	 *
+	 * 'econtext' is used to evaluate default expression for each column that
+	 * is either not read from the file or is using the DEFAULT option of COPY
+	 * FROM. It is NULL if no default values are used.
+	 *
+	 * Returns false if there are no more tuples to read.
+	 */
+	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
+								   Datum *values, bool *nulls);
+
+	/*
+	 * End a COPY FROM. This callback is called once at the end of COPY FROM.
+	 */
+	void		(*CopyFromEnd) (CopyFromState cstate);
+} CopyFromRoutine;
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 1d8ac8f62e6..c8b22af22d8 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -58,6 +58,9 @@ typedef enum CopyInsertMethod
  */
 typedef struct CopyFromStateData
 {
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
@@ -183,4 +186,12 @@ typedef struct CopyFromStateData
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+/* One-row callbacks for built-in formats defined in copyfromparse.c */
+extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
+							   Datum *values, bool *nulls);
+extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
+							  Datum *values, bool *nulls);
+extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
+								 Datum *values, bool *nulls);
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index b0c97b0fb85..eca93ab9553 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -501,6 +501,7 @@ ConvertRowtypeExpr
 CookedConstraint
 CopyDest
 CopyFormatOptions
+CopyFromRoutine
 CopyFromState
 CopyFromStateData
 CopyHeaderChoice
-- 
2.43.5

v34-0001-Refactor-COPY-TO-to-use-format-callback-function.patchapplication/octet-stream; name=v34-0001-Refactor-COPY-TO-to-use-format-callback-function.patchDownload
From 4a95959a25680474fced6fab892d8a43b1166b57 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Tue, 25 Feb 2025 13:58:41 -0800
Subject: [PATCH v34 1/2] Refactor COPY TO to use format callback functions.

This commit introduces a new CopyToRoutine struct, which is a set of
callback routines to copy tuples in a specific format. It also makes
the existing formats (text, CSV, and binary) utilize these format
callbacks.

This change is a preliminary step towards making the COPY TO command
extensible in terms of output formats.

Additionally, this refactoring contributes to a performance
improvement by reducing the number of "if" branches that need to be
checked on a per-row basis when sending field representations in text
or CSV mode. The performance benchmark results showed ~5% performance
gain in text or CSV mode.

Author: Sutou Kouhei <kou@clear-code.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Tomas Vondra <tomas.vondra@enterprisedb.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Discussion: https://postgr.es/m/20231204.153548.2126325458835528809.kou@clear-code.com
---
 src/backend/commands/copyto.c    | 438 +++++++++++++++++++++----------
 src/include/commands/copyapi.h   |  57 ++++
 src/tools/pgindent/typedefs.list |   1 +
 3 files changed, 355 insertions(+), 141 deletions(-)
 create mode 100644 src/include/commands/copyapi.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 091fbc12cc5..721d29f8e53 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,7 +19,7 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -64,6 +64,9 @@ typedef enum CopyDest
  */
 typedef struct CopyToStateData
 {
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
@@ -114,6 +117,19 @@ static void CopyAttributeOutText(CopyToState cstate, const char *string);
 static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
+/* built-in format-specific routines */
+static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
+								 bool is_csv);
+static void CopyToTextLikeEnd(CopyToState cstate);
+static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
+static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
+static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
+static void CopyToBinaryEnd(CopyToState cstate);
+
 /* Low-level communications functions */
 static void SendCopyBegin(CopyToState cstate);
 static void SendCopyEnd(CopyToState cstate);
@@ -121,9 +137,251 @@ static void CopySendData(CopyToState cstate, const void *databuf, int datasize);
 static void CopySendString(CopyToState cstate, const char *str);
 static void CopySendChar(CopyToState cstate, char c);
 static void CopySendEndOfRow(CopyToState cstate);
+static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+/*
+ * COPY TO routines for built-in formats.
+ *
+ * CSV and text formats share the same TextLike routines except for the
+ * one-row callback.
+ */
+
+/* text format */
+static const CopyToRoutine CopyToRoutineText = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToTextOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* CSV format */
+static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToStart = CopyToTextLikeStart,
+	.CopyToOutFunc = CopyToTextLikeOutFunc,
+	.CopyToOneRow = CopyToCSVOneRow,
+	.CopyToEnd = CopyToTextLikeEnd,
+};
+
+/* binary format */
+static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToStart = CopyToBinaryStart,
+	.CopyToOutFunc = CopyToBinaryOutFunc,
+	.CopyToOneRow = CopyToBinaryOneRow,
+	.CopyToEnd = CopyToBinaryEnd,
+};
+
+/* Return a COPY TO routine for the given options */
+static const CopyToRoutine *
+CopyToGetRoutine(CopyFormatOptions opts)
+{
+	if (opts.csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts.binary)
+		return &CopyToRoutineBinary;
+
+	/* default is text */
+	return &CopyToRoutineText;
+}
+
+/* Implementation of the start callback for text and CSV formats */
+static void
+CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	/*
+	 * For non-binary copy, we need to convert null_print to file encoding,
+	 * because it will be sent directly with CopySendString.
+	 */
+	if (cstate->need_transcoding)
+		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
+														  cstate->opts.null_print_len,
+														  cstate->file_encoding);
+
+	/* if a header has been requested send the line */
+	if (cstate->opts.header_line)
+	{
+		ListCell   *cur;
+		bool		hdr_delim = false;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			char	   *colname;
+
+			if (hdr_delim)
+				CopySendChar(cstate, cstate->opts.delim[0]);
+			hdr_delim = true;
+
+			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
+
+			if (cstate->opts.csv_mode)
+				CopyAttributeOutCSV(cstate, colname, false);
+			else
+				CopyAttributeOutText(cstate, colname);
+		}
+
+		CopySendTextLikeEndOfRow(cstate);
+	}
+}
+
+/*
+ * Implementation of the outfunc callback for text and CSV formats. Assign
+ * the output function data to the given *finfo.
+ */
+static void
+CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for text format */
+static void
+CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, false);
+}
+
+/* Implementation of the per-row callback for CSV format */
+static void
+CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	CopyToTextLikeOneRow(cstate, slot, true);
+}
+
+/*
+ * Workhorse for CopyToTextOneRow() and CopyToCSVOneRow().
+ *
+ * We use pg_attribute_always_inline to reduce function call overhead
+ * and to help compilers to optimize away the 'is_csv' condition.
+ */
+static pg_attribute_always_inline void
+CopyToTextLikeOneRow(CopyToState cstate,
+					 TupleTableSlot *slot,
+					 bool is_csv)
+{
+	bool		need_delim = false;
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (need_delim)
+			CopySendChar(cstate, cstate->opts.delim[0]);
+		need_delim = true;
+
+		if (isnull)
+		{
+			CopySendString(cstate, cstate->opts.null_print_client);
+		}
+		else
+		{
+			char	   *string;
+
+			string = OutputFunctionCall(&out_functions[attnum - 1],
+										value);
+
+			if (is_csv)
+				CopyAttributeOutCSV(cstate, string,
+									cstate->opts.force_quote_flags[attnum - 1]);
+			else
+				CopyAttributeOutText(cstate, string);
+		}
+	}
+
+	CopySendTextLikeEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for text and CSV formats */
+static void
+CopyToTextLikeEnd(CopyToState cstate)
+{
+	/* Nothing to do here */
+}
+
+/*
+ * Implementation of the start callback for binary format. Send a header
+ * for a binary copy.
+ */
+static void
+CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	int32		tmp;
+
+	/* Signature */
+	CopySendData(cstate, BinarySignature, 11);
+	/* Flags field */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+	/* No header extension */
+	tmp = 0;
+	CopySendInt32(cstate, tmp);
+}
+
+/*
+ * Implementation of the outfunc callback for binary format. Assign
+ * the binary output function to the given *finfo.
+ */
+static void
+CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	Oid			func_oid;
+	bool		is_varlena;
+
+	/* Set output function for an attribute */
+	getTypeBinaryOutputInfo(atttypid, &func_oid, &is_varlena);
+	fmgr_info(func_oid, finfo);
+}
+
+/* Implementation of the per-row callback for binary format */
+static void
+CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	FmgrInfo   *out_functions = cstate->out_functions;
+
+	/* Binary per-tuple header */
+	CopySendInt16(cstate, list_length(cstate->attnumlist));
+
+	foreach_int(attnum, cstate->attnumlist)
+	{
+		Datum		value = slot->tts_values[attnum - 1];
+		bool		isnull = slot->tts_isnull[attnum - 1];
+
+		if (isnull)
+		{
+			CopySendInt32(cstate, -1);
+		}
+		else
+		{
+			bytea	   *outputbytes;
+
+			outputbytes = SendFunctionCall(&out_functions[attnum - 1],
+										   value);
+			CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
+			CopySendData(cstate, VARDATA(outputbytes),
+						 VARSIZE(outputbytes) - VARHDRSZ);
+		}
+	}
+
+	CopySendEndOfRow(cstate);
+}
+
+/* Implementation of the end callback for binary format */
+static void
+CopyToBinaryEnd(CopyToState cstate)
+{
+	/* Generate trailer for a binary copy */
+	CopySendInt16(cstate, -1);
+	/* Need to flush out the trailer */
+	CopySendEndOfRow(cstate);
+}
 
 /*
  * Send copy start/stop messages for frontend copies.  These have changed
@@ -191,16 +449,6 @@ CopySendEndOfRow(CopyToState cstate)
 	switch (cstate->copy_dest)
 	{
 		case COPY_FILE:
-			if (!cstate->opts.binary)
-			{
-				/* Default line termination depends on platform */
-#ifndef WIN32
-				CopySendChar(cstate, '\n');
-#else
-				CopySendString(cstate, "\r\n");
-#endif
-			}
-
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -235,10 +483,6 @@ CopySendEndOfRow(CopyToState cstate)
 			}
 			break;
 		case COPY_FRONTEND:
-			/* The FE/BE protocol uses \n as newline for all platforms */
-			if (!cstate->opts.binary)
-				CopySendChar(cstate, '\n');
-
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
@@ -254,6 +498,35 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
+ * line termination and do common appropriate things for the end of row.
+ */
+static inline void
+CopySendTextLikeEndOfRow(CopyToState cstate)
+{
+	switch (cstate->copy_dest)
+	{
+		case COPY_FILE:
+			/* Default line termination depends on platform */
+#ifndef WIN32
+			CopySendChar(cstate, '\n');
+#else
+			CopySendString(cstate, "\r\n");
+#endif
+			break;
+		case COPY_FRONTEND:
+			/* The FE/BE protocol uses \n as newline for all platforms */
+			CopySendChar(cstate, '\n');
+			break;
+		default:
+			break;
+	}
+
+	/* Now take the actions related to the end of a row */
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * These functions do apply some data conversion
  */
@@ -426,6 +699,9 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
+	/* Set format routine */
+	cstate->routine = CopyToGetRoutine(cstate->opts);
+
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -772,19 +1048,10 @@ DoCopyTo(CopyToState cstate)
 	foreach(cur, cstate->attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
-		Oid			out_func_oid;
-		bool		isvarlena;
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		if (cstate->opts.binary)
-			getTypeBinaryOutputInfo(attr->atttypid,
-									&out_func_oid,
-									&isvarlena);
-		else
-			getTypeOutputInfo(attr->atttypid,
-							  &out_func_oid,
-							  &isvarlena);
-		fmgr_info(out_func_oid, &cstate->out_functions[attnum - 1]);
+		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
+									   &cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -797,56 +1064,7 @@ DoCopyTo(CopyToState cstate)
 											   "COPY TO",
 											   ALLOCSET_DEFAULT_SIZES);
 
-	if (cstate->opts.binary)
-	{
-		/* Generate header for a binary copy */
-		int32		tmp;
-
-		/* Signature */
-		CopySendData(cstate, BinarySignature, 11);
-		/* Flags field */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-		/* No header extension */
-		tmp = 0;
-		CopySendInt32(cstate, tmp);
-	}
-	else
-	{
-		/*
-		 * For non-binary copy, we need to convert null_print to file
-		 * encoding, because it will be sent directly with CopySendString.
-		 */
-		if (cstate->need_transcoding)
-			cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-															  cstate->opts.null_print_len,
-															  cstate->file_encoding);
-
-		/* if a header has been requested send the line */
-		if (cstate->opts.header_line)
-		{
-			bool		hdr_delim = false;
-
-			foreach(cur, cstate->attnumlist)
-			{
-				int			attnum = lfirst_int(cur);
-				char	   *colname;
-
-				if (hdr_delim)
-					CopySendChar(cstate, cstate->opts.delim[0]);
-				hdr_delim = true;
-
-				colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
-
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, colname, false);
-				else
-					CopyAttributeOutText(cstate, colname);
-			}
-
-			CopySendEndOfRow(cstate);
-		}
-	}
+	cstate->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -885,13 +1103,7 @@ DoCopyTo(CopyToState cstate)
 		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
 	}
 
-	if (cstate->opts.binary)
-	{
-		/* Generate trailer for a binary copy */
-		CopySendInt16(cstate, -1);
-		/* Need to flush out the trailer */
-		CopySendEndOfRow(cstate);
-	}
+	cstate->routine->CopyToEnd(cstate);
 
 	MemoryContextDelete(cstate->rowcontext);
 
@@ -904,74 +1116,18 @@ DoCopyTo(CopyToState cstate)
 /*
  * Emit one row during DoCopyTo().
  */
-static void
+static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
-	FmgrInfo   *out_functions = cstate->out_functions;
 	MemoryContext oldcontext;
 
 	MemoryContextReset(cstate->rowcontext);
 	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
 
-	if (cstate->opts.binary)
-	{
-		/* Binary per-tuple header */
-		CopySendInt16(cstate, list_length(cstate->attnumlist));
-	}
-
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	if (!cstate->opts.binary)
-	{
-		bool		need_delim = false;
-
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			char	   *string;
-
-			if (need_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
-			need_delim = true;
-
-			if (isnull)
-				CopySendString(cstate, cstate->opts.null_print_client);
-			else
-			{
-				string = OutputFunctionCall(&out_functions[attnum - 1],
-											value);
-				if (cstate->opts.csv_mode)
-					CopyAttributeOutCSV(cstate, string,
-										cstate->opts.force_quote_flags[attnum - 1]);
-				else
-					CopyAttributeOutText(cstate, string);
-			}
-		}
-	}
-	else
-	{
-		foreach_int(attnum, cstate->attnumlist)
-		{
-			Datum		value = slot->tts_values[attnum - 1];
-			bool		isnull = slot->tts_isnull[attnum - 1];
-			bytea	   *outputbytes;
-
-			if (isnull)
-				CopySendInt32(cstate, -1);
-			else
-			{
-				outputbytes = SendFunctionCall(&out_functions[attnum - 1],
-											   value);
-				CopySendInt32(cstate, VARSIZE(outputbytes) - VARHDRSZ);
-				CopySendData(cstate, VARDATA(outputbytes),
-							 VARSIZE(outputbytes) - VARHDRSZ);
-			}
-		}
-	}
-
-	CopySendEndOfRow(cstate);
+	cstate->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
new file mode 100644
index 00000000000..bd2d386816e
--- /dev/null
+++ b/src/include/commands/copyapi.h
@@ -0,0 +1,57 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyapi.h
+ *	  API for COPY TO handlers
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyapi.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYAPI_H
+#define COPYAPI_H
+
+#include "commands/copy.h"
+
+/*
+ * API structure for a COPY TO format implementation. Note this must be
+ * allocated in a server-lifetime manner, typically as a static const struct.
+ */
+typedef struct CopyToRoutine
+{
+	/*
+	 * Set output function information. This callback is called once at the
+	 * beginning of COPY TO.
+	 *
+	 * 'finfo' can be optionally filled to provide the catalog information of
+	 * the output function.
+	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 */
+	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
+								  FmgrInfo *finfo);
+
+	/*
+	 * Start a COPY TO. This callback is called once at the beginning of COPY
+	 * TO.
+	 *
+	 * 'tupDesc' is the tuple descriptor of the relation from where the data
+	 * is read.
+	 */
+	void		(*CopyToStart) (CopyToState cstate, TupleDesc tupDesc);
+
+	/*
+	 * Write one row stored in 'slot' to the destination.
+	 */
+	void		(*CopyToOneRow) (CopyToState cstate, TupleTableSlot *slot);
+
+	/*
+	 * End a COPY TO. This callback is called once at the end of COPY TO.
+	 */
+	void		(*CopyToEnd) (CopyToState cstate);
+} CopyToRoutine;
+
+#endif							/* COPYAPI_H */
diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list
index 1649f5e1011..b0c97b0fb85 100644
--- a/src/tools/pgindent/typedefs.list
+++ b/src/tools/pgindent/typedefs.list
@@ -512,6 +512,7 @@ CopyMultiInsertInfo
 CopyOnErrorChoice
 CopySource
 CopyStmt
+CopyToRoutine
 CopyToState
 CopyToStateData
 Cost
-- 
2.43.5

#229Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#228)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoB3TiyuCcu02itGktUE6L4YGqwWT_LRtYrFkW7xedoe+g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 25 Feb 2025 17:14:43 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've attached updated patches.

Thanks.

I found one more missing last ".":

0002:

--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c

@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo

+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */

copyfromparse.c -> copyfromparse.c.

Could you push them?

Thanks,
--
kou

#230Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#229)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Feb 25, 2025 at 6:08 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoB3TiyuCcu02itGktUE6L4YGqwWT_LRtYrFkW7xedoe+g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 25 Feb 2025 17:14:43 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've attached updated patches.

Thanks.

I found one more missing last ".":

0002:

--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c

@@ -106,6 +106,145 @@ typedef struct CopyMultiInsertInfo

+/*
+ * Built-in format-specific routines. One-row callbacks are defined in
+ * copyfromparse.c
+ */

copyfromparse.c -> copyfromparse.c.

Could you push them?

Pushed the 0001 patch.

Regarding the 0002 patch, I realized we stopped exposing
NextCopyFromRawFields() function:

 --- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState
*pstate, Relation rel, Node *where
 extern void EndCopyFrom(CopyFromState cstate);
 extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
                         Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-                                 char ***fields, int *nfields);

I think that this change is not relevant with the refactoring and
probably we should keep it exposed as extension might be using it.
Considering that we added pg_attribute_always_inline to the function,
does it work even if we omit pg_attribute_always_inline to its
function declaration in the copy.h file?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#231Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#230)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDABLkUTTOwWa1he6gbc=nM46COMu-BvWjc_i6USnNbHw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 27 Feb 2025 15:24:26 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Pushed the 0001 patch.

Thanks!

Regarding the 0002 patch, I realized we stopped exposing
NextCopyFromRawFields() function:

--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState
*pstate, Relation rel, Node *where
extern void EndCopyFrom(CopyFromState cstate);
extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-                                 char ***fields, int *nfields);

I think that this change is not relevant with the refactoring and
probably we should keep it exposed as extension might be using it.
Considering that we added pg_attribute_always_inline to the function,
does it work even if we omit pg_attribute_always_inline to its
function declaration in the copy.h file?

Unfortunately, no. The inline + constant argument
optimization requires "static".

How about the following?

static pg_attribute_always_inline bool
NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
{
...
}

bool
NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
{
return NextCopyFromRawFieldsInternal(cstate, fields, nfields, cstate->opts.csv_mode);
}

Thanks,
--
kou

#232Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#231)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Feb 27, 2025 at 7:57 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDABLkUTTOwWa1he6gbc=nM46COMu-BvWjc_i6USnNbHw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 27 Feb 2025 15:24:26 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Pushed the 0001 patch.

Thanks!

Regarding the 0002 patch, I realized we stopped exposing
NextCopyFromRawFields() function:

--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -107,8 +107,6 @@ extern CopyFromState BeginCopyFrom(ParseState
*pstate, Relation rel, Node *where
extern void EndCopyFrom(CopyFromState cstate);
extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
Datum *values, bool *nulls);
-extern bool NextCopyFromRawFields(CopyFromState cstate,
-                                 char ***fields, int *nfields);

I think that this change is not relevant with the refactoring and
probably we should keep it exposed as extension might be using it.
Considering that we added pg_attribute_always_inline to the function,
does it work even if we omit pg_attribute_always_inline to its
function declaration in the copy.h file?

Unfortunately, no. The inline + constant argument
optimization requires "static".

How about the following?

static pg_attribute_always_inline bool
NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
{
...
}

bool
NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
{
return NextCopyFromRawFieldsInternal(cstate, fields, nfields, cstate->opts.csv_mode);
}

Thank you for the confirmation.

I initially thought it would be acceptable to stop
NextCopyFromRawFields exposed since NextCopyFrom() could serve as an
alternative. For example, the NextCopyFromRawFields() function was
originally exposed in commit 8ddc05fb01ee2c primarily to support
extension modules like file_fdw but file_fdw wasn't utilizing this
API. I pushed the patch without the above change. Unfortunately, this
commit subsequently broke file_text_array_fdw[1]https://github.com/adunstan/file_text_array_fdw and made BF animal
crake unhappy[2]https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2025-02-28%2018%3A47%3A02.

Upon examining file_text_array_fdw more closely, I realized that
NextCopyFrom() may not be a suitable replacement for
NextCopyFromRawFields() in certain scenarios. Specifically,
NextCopyFrom() assumes that the caller has prior knowledge of the
source data's column count, making it inadequate for cases where
extensions like file_text_array_fdw need to construct an array of
source data with an unknown number of columns. In such situations,
NextCopyFromRawFields() proves to be more practical. Given these
considerations, I'm now leaning towards implementing the proposed
change. Thoughts?

Regards,

[1]: https://github.com/adunstan/file_text_array_fdw
[2]: https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2025-02-28%2018%3A47%3A02

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#233Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#232)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDr13=dx+k8gmQnR5_bY+NskyN4mbSWN0KhQncL6xuPMA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 28 Feb 2025 11:50:39 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I initially thought it would be acceptable to stop
NextCopyFromRawFields exposed since NextCopyFrom() could serve as an
alternative. For example, the NextCopyFromRawFields() function was
originally exposed in commit 8ddc05fb01ee2c primarily to support
extension modules like file_fdw but file_fdw wasn't utilizing this
API. I pushed the patch without the above change. Unfortunately, this
commit subsequently broke file_text_array_fdw[1] and made BF animal
crake unhappy[2].

[1] https://github.com/adunstan/file_text_array_fdw
[2] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2025-02-28%2018%3A47%3A02

Thanks for the try!

Upon examining file_text_array_fdw more closely, I realized that
NextCopyFrom() may not be a suitable replacement for
NextCopyFromRawFields() in certain scenarios. Specifically,
NextCopyFrom() assumes that the caller has prior knowledge of the
source data's column count, making it inadequate for cases where
extensions like file_text_array_fdw need to construct an array of
source data with an unknown number of columns. In such situations,
NextCopyFromRawFields() proves to be more practical. Given these
considerations, I'm now leaning towards implementing the proposed
change. Thoughts?

You suggest that we re-export NextCopyFromRawFields() (as a
wrapper of static inline version) for backward
compatibility, right? It makes sense. We should keep
backward compatibility because there is a use-case of
NextCopyFromRawFields().

Thanks,
--
kou

#234Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#233)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Feb 28, 2025 at 1:58 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDr13=dx+k8gmQnR5_bY+NskyN4mbSWN0KhQncL6xuPMA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 28 Feb 2025 11:50:39 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I initially thought it would be acceptable to stop
NextCopyFromRawFields exposed since NextCopyFrom() could serve as an
alternative. For example, the NextCopyFromRawFields() function was
originally exposed in commit 8ddc05fb01ee2c primarily to support
extension modules like file_fdw but file_fdw wasn't utilizing this
API. I pushed the patch without the above change. Unfortunately, this
commit subsequently broke file_text_array_fdw[1] and made BF animal
crake unhappy[2].

[1] https://github.com/adunstan/file_text_array_fdw
[2] https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=crake&amp;dt=2025-02-28%2018%3A47%3A02

Thanks for the try!

Upon examining file_text_array_fdw more closely, I realized that
NextCopyFrom() may not be a suitable replacement for
NextCopyFromRawFields() in certain scenarios. Specifically,
NextCopyFrom() assumes that the caller has prior knowledge of the
source data's column count, making it inadequate for cases where
extensions like file_text_array_fdw need to construct an array of
source data with an unknown number of columns. In such situations,
NextCopyFromRawFields() proves to be more practical. Given these
considerations, I'm now leaning towards implementing the proposed
change. Thoughts?

You suggest that we re-export NextCopyFromRawFields() (as a
wrapper of static inline version) for backward
compatibility, right? It makes sense. We should keep
backward compatibility because there is a use-case of
NextCopyFromRawFields().

Yes, I've submitted the patch to re-export that function[1]/messages/by-id/CAD21AoBA414Q76LthY65NJfWbjOxXn1bdFFsD_NBhT2wPUS1SQ@mail.gmail.com. Could you
review it?

Regards,

[1]: /messages/by-id/CAD21AoBA414Q76LthY65NJfWbjOxXn1bdFFsD_NBhT2wPUS1SQ@mail.gmail.com

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#235Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#234)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoB=FBiUB-ER7dmyE-QBBytUxqmv-sgbeP0DKTvYKXsOEA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 28 Feb 2025 14:00:18 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Yes, I've submitted the patch to re-export that function[1]. Could you
review it?

[1] /messages/by-id/CAD21AoBA414Q76LthY65NJfWbjOxXn1bdFFsD_NBhT2wPUS1SQ@mail.gmail.com

Sure! Done!

/messages/by-id/20250301.071641.1257013931056303227.kou@clear-code.com

Thanks,
--
kou

#236Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#235)
7 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

Our 0001/0002 patches were merged into master. I've rebased
on master. Can we discuss how to proceed rest patches?

The contents of them aren't changed but I'll show a summary
of them again:

0001-0003 are for COPY TO and 0004-0007 are for COPY FROM.

For COPY TO:

0001: Add support for adding custom COPY TO format. This
uses tablesample like handler approach. We've discussed
other approaches such as USING+CREATE XXX approach but it
seems that other approaches are overkill for this case.

See also: /messages/by-id/d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru

0002: Export CopyToStateData to implement custom COPY TO
format as extension.

0003: Export a function and add a private space to
CopyToStateData to implement custom COPY TO format as
extension.

We may want to squash 0002 and 0003 but splitting them will
be easy to review. Because 0002 just moves existing codes
(with some rename) and 0003 just adds some codes. If we
squash 0002 and 0003, moving and adding are mixed.

For COPY FROM:

0004: This is COPY FROM version of 0001.

0005: 0002 has COPY_ prefix -> COPY_DEST_ prefix change for
enum CopyDest. This is similar change for enum CopySource.

0006: This is COPY FROM version of 0003.

0007: This is for easy to implement "ON_ERROR stop" and
"LOG_VERBOSITY verbose" in extension.

We may want to squash 0005-0007 like for 0002-0003.

Thanks,
--
kou

Attachments:

v35-0001-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 5ccc5d1a54d0f6c7c47381533c879a9432fb925f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v35 1/7] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 79 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 36 +++++++--
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 273 insertions(+), 21 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..8d94bc313eb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,70 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	/* check that handler has correct return type */
+	if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
+		ereport(ERROR,
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("function %s must return type %s",
+						format, "copy_handler"),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +584,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 721d29f8e53..0d33d101735 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -174,15 +177,32 @@ static const CopyToRoutine CopyToRoutineBinary = {
 
 /* Return a COPY TO routine for the given options */
 static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+CopyToGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts.binary)
-		return &CopyToRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyToRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyToRoutineCSV;
+	else if (opts->binary)
+		return &CopyToRoutineBinary;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -700,7 +720,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = CopyToGetRoutine(&cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 1a657f7e0ae..fb90635a245
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index cd9422d0bac..9e7737168c4 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7809,6 +7809,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..332628d67cc 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..4f4ffabf882 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 4e4be3fa511..c9da440eed0 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -16,6 +16,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 2b057451473..d33bbbd4092 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -15,6 +15,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..a45a2e0a039
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..b42d472d851
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v35-0002-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 45b0c1976b7e2b758745222ddec9194dba45f8a5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v35 2/7] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 0d33d101735..17d89c23af0 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -421,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -468,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -502,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -527,7 +467,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -535,7 +475,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -920,12 +860,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 332628d67cc..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v35-0003-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 6750a77f22b65464685f0d855ebcf69ebf25a135 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v35 3/7] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 17d89c23af0..35f9035141a 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -458,6 +458,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 4f4ffabf882..5c5ea6592e3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v35-0004-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 53cdd9defcee3c6f0f2e2743d885cec3d16f6b9f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v35 4/7] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 36 +++++++++++++----
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 82 insertions(+), 21 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8d94bc313eb..b4417bb6819 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 198cee2bc48..114ea969dfa 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -153,15 +156,32 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 
 /* Return a COPY FROM routine for the given options */
 static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+CopyFromGetRoutine(CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts.binary)
-		return &CopyFromRoutineBinary;
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
+		return &CopyFromRoutineCSV;
+	else if (opts->binary)
+		return &CopyFromRoutineBinary;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1574,7 +1594,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = CopyFromGetRoutine(&cstate->opts);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5c5ea6592e3..895c105d8d8 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -64,6 +64,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index b42d472d851..abafc668463 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.2

v35-0005-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From aad169e8d9701649f3451e567fc2a56ba53647c4 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v35 5/7] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 114ea969dfa..9b9b44aa17b 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1729,7 +1729,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1857,7 +1857,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index e8128f85e6b..17e51f02e04 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.2

v35-0006-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 4db2a85dfec5376a63fdb65c3bb2221ba8b12540 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v35 6/7] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 17e51f02e04..d8fd238e72b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 895c105d8d8..2044d8b8c4c 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -108,4 +108,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.2

v35-0007-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From 8066477384ad660bfa5438f0b42ae5a24c3f17fb Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v35 7/7] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++++-
 5 files changed, 198 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d8fd238e72b..2070f51a963 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -938,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1044,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2044d8b8c4c..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -110,4 +110,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index abafc668463..96a54dab7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -34,8 +35,85 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

#237Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#236)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Mar 1, 2025 at 10:50 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

Our 0001/0002 patches were merged into master. I've rebased
on master. Can we discuss how to proceed rest patches?

The contents of them aren't changed but I'll show a summary
of them again:

0001-0003 are for COPY TO and 0004-0007 are for COPY FROM.

For COPY TO:

0001: Add support for adding custom COPY TO format. This
uses tablesample like handler approach. We've discussed
other approaches such as USING+CREATE XXX approach but it
seems that other approaches are overkill for this case.

See also: /messages/by-id/d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru

0002: Export CopyToStateData to implement custom COPY TO
format as extension.

0003: Export a function and add a private space to
CopyToStateData to implement custom COPY TO format as
extension.

We may want to squash 0002 and 0003 but splitting them will
be easy to review. Because 0002 just moves existing codes
(with some rename) and 0003 just adds some codes. If we
squash 0002 and 0003, moving and adding are mixed.

For COPY FROM:

0004: This is COPY FROM version of 0001.

0005: 0002 has COPY_ prefix -> COPY_DEST_ prefix change for
enum CopyDest. This is similar change for enum CopySource.

0006: This is COPY FROM version of 0003.

0007: This is for easy to implement "ON_ERROR stop" and
"LOG_VERBOSITY verbose" in extension.

We may want to squash 0005-0007 like for 0002-0003.

Thanks,
--
kou

While review another thread (Emitting JSON to file using COPY TO),
I found the recently committed patches on this thread pass the
CopyFormatOptions struct directly rather a pointer of the struct
as a function parameter of CopyToGetRoutine and CopyFromGetRoutine.

Then I took a quick look at the newly rebased patch set and
found Sutou has already fixed this issue.

I'm wondering if we should fix it as a separate commit as
it seems like an oversight of previous patches?

--
Regards
Junwang Zhao

#238Tom Lane
tgl@sss.pgh.pa.us
In reply to: Junwang Zhao (#237)
Re: Make COPY format extendable: Extract COPY TO format implementations

Junwang Zhao <zhjwpku@gmail.com> writes:

While review another thread (Emitting JSON to file using COPY TO),
I found the recently committed patches on this thread pass the
CopyFormatOptions struct directly rather a pointer of the struct
as a function parameter of CopyToGetRoutine and CopyFromGetRoutine.

Coverity is unhappy about that too:

/srv/coverity/git/pgsql-git/postgresql/src/backend/commands/copyto.c: 177 in CopyToGetRoutine()
171 .CopyToOneRow = CopyToBinaryOneRow,
172 .CopyToEnd = CopyToBinaryEnd,
173 };
174
175 /* Return a COPY TO routine for the given options */
176 static const CopyToRoutine *

CID 1643911: Performance inefficiencies (PASS_BY_VALUE)
Passing parameter opts of type "CopyFormatOptions" (size 184 bytes) by value, which exceeds the low threshold of 128 bytes.

177 CopyToGetRoutine(CopyFormatOptions opts)
178 {
179 if (opts.csv_mode)
180 return &CopyToRoutineCSV;

(and likewise for CopyFromGetRoutine). I realize that these
functions aren't called often enough for performance to be an
overriding concern, but it still seems like poor style.

Then I took a quick look at the newly rebased patch set and
found Sutou has already fixed this issue.

+1, except I'd suggest declaring the parameters as
"const CopyFormatOptions *opts".

regards, tom lane

#239Sutou Kouhei
kou@clear-code.com
In reply to: Tom Lane (#238)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <3191030.1740932840@sss.pgh.pa.us>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 02 Mar 2025 11:27:20 -0500,
Tom Lane <tgl@sss.pgh.pa.us> wrote:

While review another thread (Emitting JSON to file using COPY TO),
I found the recently committed patches on this thread pass the
CopyFormatOptions struct directly rather a pointer of the struct
as a function parameter of CopyToGetRoutine and CopyFromGetRoutine.

Coverity is unhappy about that too:

/srv/coverity/git/pgsql-git/postgresql/src/backend/commands/copyto.c: 177 in CopyToGetRoutine()
171 .CopyToOneRow = CopyToBinaryOneRow,
172 .CopyToEnd = CopyToBinaryEnd,
173 };
174
175 /* Return a COPY TO routine for the given options */
176 static const CopyToRoutine *

CID 1643911: Performance inefficiencies (PASS_BY_VALUE)
Passing parameter opts of type "CopyFormatOptions" (size 184 bytes) by value, which exceeds the low threshold of 128 bytes.

177 CopyToGetRoutine(CopyFormatOptions opts)
178 {
179 if (opts.csv_mode)
180 return &CopyToRoutineCSV;

(and likewise for CopyFromGetRoutine). I realize that these
functions aren't called often enough for performance to be an
overriding concern, but it still seems like poor style.

Then I took a quick look at the newly rebased patch set and
found Sutou has already fixed this issue.

+1, except I'd suggest declaring the parameters as
"const CopyFormatOptions *opts".

Thanks for pointing out this (and sorry for missing this in
our reviews...)!

How about the attached patch?

I'll rebase the v35 patch set after this is fixed.

Thanks,
--
kou

Attachments:

0001-Use-const-pointer-for-CopyFormatOptions-for-Copy-To-.patchtext/x-patch; charset=us-asciiDownload
From f21b48c7dd0b141c561e9c8a2c9f1d0e28aabfae Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 3 Mar 2025 09:13:37 +0900
Subject: [PATCH] Use const pointer for CopyFormatOptions for
 Copy{To,From}GetRoutine()

We don't need to copy CopyFormatOptions here.

Reported-by: Junwang Zhao <zhjwpku@gmail.com>
Discussion: https://postgr.es/m/CAEG8a3L6YCpPksTQMzjD_CvwDEhW3D_t=5md9BvvdOs5k+TA=Q@mail.gmail.com
---
 src/backend/commands/copyfrom.c | 8 ++++----
 src/backend/commands/copyto.c   | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 198cee2bc48..bcf66f0adf8 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -153,11 +153,11 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 
 /* Return a COPY FROM routine for the given options */
 static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyFromRoutineBinary;
 
 	/* default is text */
@@ -1574,7 +1574,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = CopyFromGetRoutine(&cstate->opts);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 721d29f8e53..84a3f3879a8 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -174,11 +174,11 @@ static const CopyToRoutine CopyToRoutineBinary = {
 
 /* Return a COPY TO routine for the given options */
 static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyToRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyToRoutineBinary;
 
 	/* default is text */
@@ -700,7 +700,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = CopyToGetRoutine(&cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
-- 
2.47.2

#240Junwang Zhao
zhjwpku@gmail.com
In reply to: Sutou Kouhei (#239)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Mar 3, 2025 at 8:19 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <3191030.1740932840@sss.pgh.pa.us>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 02 Mar 2025 11:27:20 -0500,
Tom Lane <tgl@sss.pgh.pa.us> wrote:

While review another thread (Emitting JSON to file using COPY TO),
I found the recently committed patches on this thread pass the
CopyFormatOptions struct directly rather a pointer of the struct
as a function parameter of CopyToGetRoutine and CopyFromGetRoutine.

Coverity is unhappy about that too:

/srv/coverity/git/pgsql-git/postgresql/src/backend/commands/copyto.c: 177 in CopyToGetRoutine()
171 .CopyToOneRow = CopyToBinaryOneRow,
172 .CopyToEnd = CopyToBinaryEnd,
173 };
174
175 /* Return a COPY TO routine for the given options */
176 static const CopyToRoutine *

CID 1643911: Performance inefficiencies (PASS_BY_VALUE)
Passing parameter opts of type "CopyFormatOptions" (size 184 bytes) by value, which exceeds the low threshold of 128 bytes.

177 CopyToGetRoutine(CopyFormatOptions opts)
178 {
179 if (opts.csv_mode)
180 return &CopyToRoutineCSV;

(and likewise for CopyFromGetRoutine). I realize that these
functions aren't called often enough for performance to be an
overriding concern, but it still seems like poor style.

Then I took a quick look at the newly rebased patch set and
found Sutou has already fixed this issue.

+1, except I'd suggest declaring the parameters as
"const CopyFormatOptions *opts".

Thanks for pointing out this (and sorry for missing this in
our reviews...)!

How about the attached patch?

Looking good, thanks

I'll rebase the v35 patch set after this is fixed.

Thanks,
--
kou

--
Regards
Junwang Zhao

#241Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#239)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Mar 2, 2025 at 4:19 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <3191030.1740932840@sss.pgh.pa.us>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 02 Mar 2025 11:27:20 -0500,
Tom Lane <tgl@sss.pgh.pa.us> wrote:

While review another thread (Emitting JSON to file using COPY TO),
I found the recently committed patches on this thread pass the
CopyFormatOptions struct directly rather a pointer of the struct
as a function parameter of CopyToGetRoutine and CopyFromGetRoutine.

Coverity is unhappy about that too:

/srv/coverity/git/pgsql-git/postgresql/src/backend/commands/copyto.c: 177 in CopyToGetRoutine()
171 .CopyToOneRow = CopyToBinaryOneRow,
172 .CopyToEnd = CopyToBinaryEnd,
173 };
174
175 /* Return a COPY TO routine for the given options */
176 static const CopyToRoutine *

CID 1643911: Performance inefficiencies (PASS_BY_VALUE)
Passing parameter opts of type "CopyFormatOptions" (size 184 bytes) by value, which exceeds the low threshold of 128 bytes.

177 CopyToGetRoutine(CopyFormatOptions opts)
178 {
179 if (opts.csv_mode)
180 return &CopyToRoutineCSV;

(and likewise for CopyFromGetRoutine). I realize that these
functions aren't called often enough for performance to be an
overriding concern, but it still seems like poor style.

Then I took a quick look at the newly rebased patch set and
found Sutou has already fixed this issue.

+1, except I'd suggest declaring the parameters as
"const CopyFormatOptions *opts".

Thanks for pointing out this (and sorry for missing this in
our reviews...)!

How about the attached patch?

I'll rebase the v35 patch set after this is fixed.

Thank you for reporting the issue and making the patch.

I agree with the fix and the patch looks good to me. I've updated the
commit message and am going to push, barring any objections.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

v2-0001-Refactor-Copy-From-To-GetRoutine-to-use-pass-by-r.patchapplication/octet-stream; name=v2-0001-Refactor-Copy-From-To-GetRoutine-to-use-pass-by-r.patchDownload
From c1fb9b2e93920e400a3cd3bcfbe593163cb1b2aa Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 3 Mar 2025 10:50:09 -0800
Subject: [PATCH v2] Refactor Copy{From|To}GetRoutine() to use
 pass-by-reference argument.

The change improves efficiency by eliminating unnecessary copying of
CopyFormatOptions.

The coverity also complained about inefficiencies caused by pass-by-value.

Oversight in 7717f6300 and 2e4127b6d.

Reported-by: Junwang Zhao <zhjwpku@gmail.com>
Reported-by: Tom Lane <tgl@sss.pgh.pa.us> (per reports from coverity)
Author: Sutou Kouhei <kou@clear-code.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Discussion: https://postgr.es/m/CAEG8a3L6YCpPksTQMzjD_CvwDEhW3D_t=5md9BvvdOs5k+TA=Q@mail.gmail.com
---
 src/backend/commands/copyfrom.c | 8 ++++----
 src/backend/commands/copyto.c   | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 198cee2bc48..bcf66f0adf8 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -153,11 +153,11 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 
 /* Return a COPY FROM routine for the given options */
 static const CopyFromRoutine *
-CopyFromGetRoutine(CopyFormatOptions opts)
+CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyFromRoutineBinary;
 
 	/* default is text */
@@ -1574,7 +1574,7 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(cstate->opts);
+	cstate->routine = CopyFromGetRoutine(&cstate->opts);
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 721d29f8e53..84a3f3879a8 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -174,11 +174,11 @@ static const CopyToRoutine CopyToRoutineBinary = {
 
 /* Return a COPY TO routine for the given options */
 static const CopyToRoutine *
-CopyToGetRoutine(CopyFormatOptions opts)
+CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts.csv_mode)
+	if (opts->csv_mode)
 		return &CopyToRoutineCSV;
-	else if (opts.binary)
+	else if (opts->binary)
 		return &CopyToRoutineBinary;
 
 	/* default is text */
@@ -700,7 +700,7 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(cstate->opts);
+	cstate->routine = CopyToGetRoutine(&cstate->opts);
 
 	/* Process the source/target relation or query */
 	if (rel)
-- 
2.43.5

#242Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#241)
7 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAwOP7p6LgmkPGqPuJ5KbJPPQsSZsFzwCDguwzr9F677Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 3 Mar 2025 11:06:39 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I agree with the fix and the patch looks good to me. I've updated the
commit message and am going to push, barring any objections.

Thanks!

I've rebased the patch set. Here is a summary again:

0001-0003 are for COPY TO and 0004-0007 are for COPY FROM.

For COPY TO:

0001: Add support for adding custom COPY TO format. This
uses tablesample like handler approach. We've discussed
other approaches such as USING+CREATE XXX approach but it
seems that other approaches are overkill for this case.

See also: /messages/by-id/d838025aceeb19c9ff1db702fa55cabf@postgrespro.ru

0002: Export CopyToStateData to implement custom COPY TO
format as extension.

0003: Export a function and add a private space to
CopyToStateData to implement custom COPY TO format as
extension.

We may want to squash 0002 and 0003 but splitting them will
be easy to review. Because 0002 just moves existing codes
(with some rename) and 0003 just adds some codes. If we
squash 0002 and 0003, moving and adding are mixed.

For COPY FROM:

0004: This is COPY FROM version of 0001.

0005: 0002 has COPY_ prefix -> COPY_DEST_ prefix change for
enum CopyDest. This is similar change for enum CopySource.

0006: This is COPY FROM version of 0003.

0007: This is for easy to implement "ON_ERROR stop" and
"LOG_VERBOSITY verbose" in extension.

We may want to squash 0005-0007 like for 0002-0003.

Thanks,
--
kou

Attachments:

v36-0001-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From 479c601915b30e4f67e5ed047c6fbf3e35702ec6 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v36 1/7] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 79 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 28 ++++++-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 269 insertions(+), 17 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..8d94bc313eb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,70 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	/* check that handler has correct return type */
+	if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
+		ereport(ERROR,
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("function %s must return type %s",
+						format, "copy_handler"),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +584,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 84a3f3879a8..fce8501dc30 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -176,13 +179,30 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts->binary)
 		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 1a657f7e0ae..fb90635a245
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index cd9422d0bac..9e7737168c4 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7809,6 +7809,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..332628d67cc 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..4f4ffabf882 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 4e4be3fa511..c9da440eed0 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -16,6 +16,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 2b057451473..d33bbbd4092 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -15,6 +15,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..a45a2e0a039
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..b42d472d851
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v36-0002-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 8768ecf89603767a3a3f9f96d569e5bc8c8f0c81 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v36 2/7] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index fce8501dc30..99c2f2dd699 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -421,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -468,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -502,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -527,7 +467,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -535,7 +475,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -920,12 +860,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 332628d67cc..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v36-0003-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 427ec09b5cb438e7884d04027acdc207e9d4c80e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v36 3/7] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99c2f2dd699..f5ed3efbace 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -458,6 +458,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 4f4ffabf882..5c5ea6592e3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v36-0004-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From fb9fb349e1d08a1adaf07658ccc46e8ea1439a80 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v36 4/7] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 28 +++++++++++--
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 78 insertions(+), 17 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8d94bc313eb..b4417bb6819 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index bcf66f0adf8..0809766f910 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -155,13 +158,30 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts->binary)
 		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5c5ea6592e3..895c105d8d8 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -64,6 +64,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index b42d472d851..abafc668463 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.2

v36-0005-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From dcf1598a31557af0ade5758430884489a7c8e610 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v36 5/7] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0809766f910..76662e04260 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1729,7 +1729,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1857,7 +1857,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index e8128f85e6b..17e51f02e04 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.2

v36-0006-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From d8657b0d0d295c82ec2807a9767bb7fbe18c85fa Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v36 6/7] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 17e51f02e04..d8fd238e72b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 895c105d8d8..2044d8b8c4c 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -108,4 +108,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.2

v36-0007-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From ddd4b9f09dfe7860195adf82dbaab5ee46e91cf0 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v36 7/7] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++++-
 5 files changed, 198 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d8fd238e72b..2070f51a963 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -938,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1044,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2044d8b8c4c..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -110,4 +110,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index abafc668463..96a54dab7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -34,8 +35,85 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

#243Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#242)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Mar 4, 2025 at 4:06 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoAwOP7p6LgmkPGqPuJ5KbJPPQsSZsFzwCDguwzr9F677Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 3 Mar 2025 11:06:39 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I agree with the fix and the patch looks good to me. I've updated the
commit message and am going to push, barring any objections.

Thanks!

I've rebased the patch set. Here is a summary again:

Thank you for updating the patches. Here are some review comments on
the 0001 patch:

+   if (strcmp(format, "text") == 0)
+   {
+       /* "csv_mode == false && binary == false" means "text" */
+       return;
+   }
+   else if (strcmp(format, "csv") == 0)
+   {
+       opts_out->csv_mode = true;
+       return;
+   }
+   else if (strcmp(format, "binary") == 0)
+   {
+       opts_out->binary = true;
+       return;
+   }
+
+   /* custom format */
+   if (!is_from)
+   {
+       funcargtypes[0] = INTERNALOID;
+       handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+                                   funcargtypes, true);
+   }
+   if (!OidIsValid(handlerOid))
+       ereport(ERROR,
+               (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+                errmsg("COPY format \"%s\" not recognized", format),
+                parser_errposition(pstate, defel->location)));

I think that built-in formats also need to have their handler
functions. This seems to be a conventional way for customizable
features such as tablesample and access methods, and we can simplify
this function.

---
I think we need to update the documentation to describe how users can
define the handler functions and what each callback function is
responsible for.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#244Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#243)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDU=bYRDDY8MzCXAfg4h9XTeTBdM-wVJaO1t4UcseCpuA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 17 Mar 2025 13:50:03 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that built-in formats also need to have their handler
functions. This seems to be a conventional way for customizable
features such as tablesample and access methods, and we can simplify
this function.

OK. 0008 in the attached v37 patch set does it.

I think we need to update the documentation to describe how users can
define the handler functions and what each callback function is
responsible for.

I agree with it but we haven't finalized public APIs yet. Can
we defer it after we finalize public APIs? (Proposed public
APIs exist in 0003, 0006 and 0007.)

And could someone help (take over if possible) writing a
document for this feature? I'm not good at writing a
document in English... 0009 in the attached v37 patch set
has a draft of it. It's based on existing documents in
doc/src/sgml/ and *.h.

0001-0007 aren't changed from v36 patch set.

Thanks,
--
kou

Attachments:

v37-0001-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From bd21411860e1ac8f751b77658bc7f1978a110d5f Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v37 1/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 79 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 28 ++++++-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 269 insertions(+), 17 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..8d94bc313eb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,70 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	/* check that handler has correct return type */
+	if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
+		ereport(ERROR,
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("function %s must return type %s",
+						format, "copy_handler"),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +584,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 84a3f3879a8..fce8501dc30 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -176,13 +179,30 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts->binary)
 		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 1a657f7e0ae..fb90635a245
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 890822eaf79..7c2a510fa3f 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7838,6 +7838,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..332628d67cc 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..4f4ffabf882 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 4e4be3fa511..c9da440eed0 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -16,6 +16,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 2b057451473..d33bbbd4092 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -15,6 +15,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..a45a2e0a039
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..b42d472d851
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v37-0002-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From e59ca937314580133c4590350d9f9d67bb417b2e Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v37 2/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index fce8501dc30..99c2f2dd699 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -421,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -468,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -502,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -527,7 +467,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -535,7 +475,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -920,12 +860,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 332628d67cc..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v37-0003-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From 40bade7212e8894220d7901fe9bb2a2eb07572cd Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v37 3/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99c2f2dd699..f5ed3efbace 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -458,6 +458,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 4f4ffabf882..5c5ea6592e3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v37-0004-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 7025e1ca17b8c1693e94560c499b814b45a7cc45 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v37 4/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 28 +++++++++++--
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 78 insertions(+), 17 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8d94bc313eb..b4417bb6819 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index bcf66f0adf8..0809766f910 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -155,13 +158,30 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts->binary)
 		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5c5ea6592e3..895c105d8d8 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -64,6 +64,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index b42d472d851..abafc668463 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.2

v37-0005-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From 82e7ebbdd3323b05706cce573d8d293c3b559f2c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v37 5/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0809766f910..76662e04260 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1729,7 +1729,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1857,7 +1857,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index e8128f85e6b..17e51f02e04 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.2

v37-0006-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From 97a71244245787f895fcb4f05ee0b212e78c863c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v37 6/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 17e51f02e04..d8fd238e72b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 895c105d8d8..2044d8b8c4c 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -108,4 +108,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.2

v37-0007-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From e6bf46e4006b25c0de110e14b8c2d57247f48b42 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v37 7/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++++-
 5 files changed, 198 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d8fd238e72b..2070f51a963 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -938,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1044,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2044d8b8c4c..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -110,4 +110,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index abafc668463..96a54dab7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -34,8 +35,85 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

v37-0008-Use-copy-handlers-for-built-in-formats.patchtext/x-patch; charset=us-asciiDownload
From 9a4dfa53cdd1683c9386644886654f3f7ee3e49a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 18 Mar 2025 19:09:09 +0900
Subject: [PATCH v37 8/9] Use copy handlers for built-in formats

This adds copy handlers for text, csv and binary. We can simplify
Copy{To,From}GetRoutine() by this. We'll be able to remove
CopyFormatOptions::{binary,csv_mode} when we add more callbacks to
Copy{To,From}Routine and move format specific routines to
Copy{To,From}Routine::*.
---
 src/backend/commands/copy.c              | 48 ++++++++++++++++++------
 src/backend/commands/copyfrom.c          | 48 +++++++++++-------------
 src/backend/commands/copyto.c            | 48 +++++++++++-------------
 src/include/catalog/pg_proc.dat          | 11 ++++++
 src/include/commands/copyfrom_internal.h |  6 ++-
 src/include/commands/copyto_internal.h   |  6 ++-
 6 files changed, 102 insertions(+), 65 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index b4417bb6819..24bd2547e3b 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,9 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -500,24 +502,15 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	opts_out->csv_mode = false;
 	opts_out->binary = false;
-	/* built-in formats */
-	if (strcmp(format, "text") == 0)
-	{
-		/* "csv_mode == false && binary == false" means "text" */
-		return;
-	}
-	else if (strcmp(format, "csv") == 0)
+	if (strcmp(format, "csv") == 0)
 	{
 		opts_out->csv_mode = true;
-		return;
 	}
 	else if (strcmp(format, "binary") == 0)
 	{
 		opts_out->binary = true;
-		return;
 	}
 
-	/* custom format */
 	funcargtypes[0] = INTERNALOID;
 	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
 								funcargtypes, true);
@@ -1067,3 +1060,36 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+Datum
+copy_text_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineText);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineText);
+}
+
+Datum
+copy_csv_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineCSV);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineCSV);
+}
+
+Datum
+copy_binary_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineBinary);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineBinary);
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 76662e04260..2677f2ac1bc 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -45,6 +45,7 @@
 #include "rewrite/rewriteHandler.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/portal.h"
@@ -128,7 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
  */
 
 /* text format */
-static const CopyFromRoutine CopyFromRoutineText = {
+const CopyFromRoutine CopyFromRoutineText = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -137,7 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 };
 
 /* CSV format */
-static const CopyFromRoutine CopyFromRoutineCSV = {
+const CopyFromRoutine CopyFromRoutineCSV = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -146,7 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 };
 
 /* binary format */
-static const CopyFromRoutine CopyFromRoutineBinary = {
+const CopyFromRoutine CopyFromRoutineBinary = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
@@ -158,30 +159,25 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyFromRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%u did not return "
-							"CopyFromRoutine struct",
-							opts->handler)));
-		return castNode(CopyFromRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
-	else
-		return &CopyFromRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(true));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyFromRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%u did not return "
+						"CopyFromRoutine struct",
+						opts->handler)));
+	return castNode(CopyFromRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f5ed3efbace..757d24736e3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -32,6 +32,7 @@
 #include "pgstat.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/rel.h"
@@ -89,7 +90,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
  */
 
 /* text format */
-static const CopyToRoutine CopyToRoutineText = {
+const CopyToRoutine CopyToRoutineText = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -98,7 +99,7 @@ static const CopyToRoutine CopyToRoutineText = {
 };
 
 /* CSV format */
-static const CopyToRoutine CopyToRoutineCSV = {
+const CopyToRoutine CopyToRoutineCSV = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -107,7 +108,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 };
 
 /* binary format */
-static const CopyToRoutine CopyToRoutineBinary = {
+const CopyToRoutine CopyToRoutineBinary = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
@@ -119,30 +120,25 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyToRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%u did not return "
-							"CopyToRoutine struct",
-							opts->handler)));
-		return castNode(CopyToRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
-	else
-		return &CopyToRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(false));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%u did not return "
+						"CopyToRoutine struct",
+						opts->handler)));
+	return castNode(CopyToRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 7c2a510fa3f..0737eb73c9a 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -12485,4 +12485,15 @@
   proargtypes => 'int4',
   prosrc => 'gist_stratnum_common' },
 
+# COPY handlers
+{ oid => '8100', descr => 'text COPY FORMAT handler',
+  proname => 'text', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_text_handler' },
+{ oid => '8101', descr => 'csv COPY FORMAT handler',
+  proname => 'csv', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_csv_handler' },
+{ oid => '8102', descr => 'binary COPY FORMAT handler',
+  proname => 'binary', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_binary_handler' },
+
 ]
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index af425cf5fd9..abeccf85c1c 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -197,4 +197,8 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineText;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineCSV;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineBinary;
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index ce1c33a4004..85412660f7f 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -83,4 +83,8 @@ typedef struct CopyToStateData
 	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineText;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineCSV;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineBinary;
+
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v37-0009-Add-document-how-to-write-a-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From deb16adfcdba9ae9cac0d1c4e55b9cf35ba2a179 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 19 Mar 2025 11:46:34 +0900
Subject: [PATCH v37 9/9] Add document how to write a COPY handler

This is WIP because we haven't decided our API yet.
---
 doc/src/sgml/copy-handler.sgml | 375 +++++++++++++++++++++++++++++++++
 doc/src/sgml/filelist.sgml     |   1 +
 doc/src/sgml/postgres.sgml     |   1 +
 src/include/commands/copyapi.h |   9 +-
 4 files changed, 382 insertions(+), 4 deletions(-)
 create mode 100644 doc/src/sgml/copy-handler.sgml

diff --git a/doc/src/sgml/copy-handler.sgml b/doc/src/sgml/copy-handler.sgml
new file mode 100644
index 00000000000..f602debae61
--- /dev/null
+++ b/doc/src/sgml/copy-handler.sgml
@@ -0,0 +1,375 @@
+<!-- doc/src/sgml/copy-handler.sgml -->
+
+<chapter id="copy-handler">
+ <title>Writing a Copy Handler</title>
+
+ <indexterm zone="copy-handler">
+  <primary><literal>COPY</literal> handler</primary>
+ </indexterm>
+
+ <para>
+  <productname>PostgreSQL</productname> supports
+  custom <link linkend="sql-copy"><literal>COPY</literal></link>
+  handlers. The <literal>COPY</literal> handlers can use different copy format
+  instead of built-in <literal>text</literal>, <literal>csv</literal>
+  and <literal>binary</literal>.
+ </para>
+
+ <para>
+  At the SQL level, a table sampling method is represented by a single SQL
+  function, typically implemented in C, having the signature
+<programlisting>
+format_name(internal) RETURNS copy_handler
+</programlisting>
+  The name of the function is the same name appearing in
+  the <literal>FORMAT</literal> option. The <type>internal</type> argument is
+  a dummy that simply serves to prevent this function from being called
+  directly from an SQL command. The real argument is <literal>bool
+  is_from</literal>. If the handler is used by <literal>COPY FROM</literal>,
+  it's <literal>true</literal>. If the handler is used by <literal>COPY
+  FROM</literal>, it's <literal>false</literal>.
+ </para>
+
+ <para>
+  The function must return <type>CopyFromRoutine *</type> when
+  the <literal>is_from</literal> argument is <literal>true</literal>.
+  The function must return <type>CopyToRoutine *</type> when
+  the <literal>is_from</literal> argument is <literal>false</literal>.
+ </para>
+
+ <para>
+  The <type>CopyFromRoutine</type> and <type>CopyToRoutine</type> struct types
+  are declared in <filename>src/include/commands/copyapi.h</filename>,
+  which see for additional details.
+ </para>
+
+ <sect1 id="copy-handler-from">
+  <title>Copy From Handler</title>
+
+  <para>
+   The <literal>COPY</literal> handler function for <literal>COPY
+   FROM</literal> returns a <type>CopyFromRoutine</type> struct containing
+   pointers to the functions described below. All functions are required.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromInFunc(CopyFromState cstate,
+               Oid atttypid,
+               FmgrInfo *finfo,
+               Oid *typioparam);
+</programlisting>
+
+   This sets input function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY FROM</literal>. If
+   this <literal>COPY</literal> handler doesn't use any input functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid *typioparam</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to define the OID of the type to
+       pass to the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromStart(CopyFromState cstate,
+              TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY FROM</literal>. This function is called once at
+   the beginning of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data needs to be
+       copied. This can be used for any initialization steps required by a
+       format.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyFromOneRow(CopyFromState cstate,
+               ExprContext *econtext,
+               Datum *values,
+               bool *nulls);
+</programlisting>
+
+   This reads one row from the source and fill <literal>values</literal>
+   and <literal>nulls</literal>. If there is one or more tuples to be read,
+   this must return <literal>true</literal>. If there are no more tuples to
+   read, this must return <literal>false</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>ExprContext *econtext</literal></term>
+     <listitem>
+      <para>
+       This is used to evaluate default expression for each column that is
+       either not read from the file or is using
+       the <literal>DEFAULT</literal> option of <literal>COPY
+       FROM</literal>. It is <literal>NULL</literal> if no default values are used.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Datum *values</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store read tuples.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>bool *nulls</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store whether the read columns
+       are <literal>NULL</literal> or not.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromEnd(CopyFromState cstate);
+</programlisting>
+
+   This ends a <literal>COPY FROM</literal>. This function is called once at
+   the end of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyFromStateGetData() and CopyFromSkipErrowRow()?
+  </para>
+ </sect1>
+
+ <sect1 id="copy-handler-to">
+  <title>Copy To Handler</title>
+
+  <para>
+   The <literal>COPY</literal> handler function for <literal>COPY
+   TO</literal> returns a <type>CopyToRoutine</type> struct containing
+   pointers to the functions described below. All functions are required.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToOutFunc(CopyToState cstate,
+              Oid atttypid,
+              FmgrInfo *finfo);
+</programlisting>
+
+   This sets output function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY TO</literal>. If
+   this <literal>COPY</literal> handler doesn't use any output functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the output function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToStart(CopyToState cstate,
+            TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY TO</literal>. This function is called once at
+   the beginning of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data is read.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyToOneRow(CopyToState cstate,
+             TupleTableSlot *slot);
+</programlisting>
+
+   This writes one row stored in <literal>slot</literal> to the destination.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleTableSlot *slot</literal></term>
+     <listitem>
+      <para>
+       This is used to get row to be written.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToEnd(CopyToState cstate);
+</programlisting>
+
+   This ends a <literal>COPY TO</literal>. This function is called once at
+   the end of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyToStateFlush()?
+  </para>
+ </sect1>
+</chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 25fb99cee69..1fd6d32d5ec 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -107,6 +107,7 @@
 <!ENTITY storage    SYSTEM "storage.sgml">
 <!ENTITY transaction     SYSTEM "xact.sgml">
 <!ENTITY tablesample-method SYSTEM "tablesample-method.sgml">
+<!ENTITY copy-handler SYSTEM "copy-handler.sgml">
 <!ENTITY wal-for-extensions SYSTEM "wal-for-extensions.sgml">
 <!ENTITY generic-wal SYSTEM "generic-wal.sgml">
 <!ENTITY custom-rmgr SYSTEM "custom-rmgr.sgml">
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index af476c82fcc..8ba319ae2df 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -254,6 +254,7 @@ break is not needed in a wider output rendering.
   &plhandler;
   &fdwhandler;
   &tablesample-method;
+  &copy-handler;
   &custom-scan;
   &geqo;
   &tableam;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 500ece7d5bb..24710cb667a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -28,10 +28,10 @@ typedef struct CopyToRoutine
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the output function.
-	 *
-	 * 'atttypid' is the OID of data type used by the relation's attribute.
 	 */
 	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
 								  FmgrInfo *finfo);
@@ -70,12 +70,13 @@ typedef struct CopyFromRoutine
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the input function.
 	 *
 	 * 'typioparam' can be optionally filled to define the OID of the type to
-	 * pass to the input function.'atttypid' is the OID of data type used by
-	 * the relation's attribute.
+	 * pass to the input function.
 	 */
 	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
 								   FmgrInfo *finfo, Oid *typioparam);
-- 
2.47.2

#245David G. Johnston
david.g.johnston@gmail.com
In reply to: Sutou Kouhei (#244)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Mar 18, 2025 at 7:56 PM Sutou Kouhei <kou@clear-code.com> wrote:

And could someone help (take over if possible) writing a
document for this feature? I'm not good at writing a
document in English... 0009 in the attached v37 patch set
has a draft of it. It's based on existing documents in
doc/src/sgml/ and *.h.

I haven't touched the innards of the structs aside from changing
programlisting to synopsis. And redoing the two section opening paragraphs
to better integrate with the content in the chapter opening.

The rest I kinda went to town on...

David J.

diff --git a/doc/src/sgml/copy-handler.sgml b/doc/src/sgml/copy-handler.sgml
index f602debae6..9d2897a104 100644
--- a/doc/src/sgml/copy-handler.sgml
+++ b/doc/src/sgml/copy-handler.sgml
@@ -10,56 +10,72 @@
  <para>
   <productname>PostgreSQL</productname> supports
   custom <link linkend="sql-copy"><literal>COPY</literal></link>
-  handlers. The <literal>COPY</literal> handlers can use different copy
format
-  instead of built-in <literal>text</literal>, <literal>csv</literal>
-  and <literal>binary</literal>.
+  handlers; adding additional <replaceable>format_name</replaceable>
options
+  to the <literal>FORMAT</literal> clause.
  </para>
  <para>
-  At the SQL level, a table sampling method is represented by a single SQL
-  function, typically implemented in C, having the signature
-<programlisting>
-format_name(internal) RETURNS copy_handler
-</programlisting>
-  The name of the function is the same name appearing in
-  the <literal>FORMAT</literal> option. The <type>internal</type> argument
is
-  a dummy that simply serves to prevent this function from being called
-  directly from an SQL command. The real argument is <literal>bool
-  is_from</literal>. If the handler is used by <literal>COPY
FROM</literal>,
-  it's <literal>true</literal>. If the handler is used by <literal>COPY
-  FROM</literal>, it's <literal>false</literal>.
+  At the SQL level, a copy handler method is represented by a single SQL
+  function (see <xref linkend="sql-createfunction"/>), typically
implemented in
+  C, having the signature
+<synopsis>
+<replaceable>format_name</replaceable>(internal) RETURNS
<literal>copy_handler</literal>
+</synopsis>
+  The function's name is then accepted as a valid
<replaceable>format_name</replaceable>.
+  The return pseudo-type <literal>copy_handler</literal> informs the
system that
+  this function needs to be registered as a copy handler.
+  The <type>internal</type> argument is a dummy that prevents
+  this function from being called directly from an SQL command.  As the
+  handler implementation must be server-lifetime immutable; this SQL
function's
+  volatility should be marked immutable.  The
<literal>link_symbol</literal>
+  for this function is the name of the implementation function, described
next.
  </para>
  <para>
-  The function must return <type>CopyFromRoutine *</type> when
-  the <literal>is_from</literal> argument is <literal>true</literal>.
-  The function must return <type>CopyToRoutine *</type> when
-  the <literal>is_from</literal> argument is <literal>false</literal>.
+  The implementation function signature expected for the function named
+  in the <literal>link_symbol</literal> is:
+<synopsis>
+Datum
+<replaceable>copy_format_handler</replaceable>(PG_FUNCTION_ARGS)
+</synopsis>
+  The convention for the name is to replace the word
+  <replaceable>format</replaceable> in the placeholder above with the
value given
+  to <replaceable>format_name</replaceable> in the SQL function.
+  The first argument is a <type>boolean</type> that indicates whether the
handler
+  must provide a pointer to its implementation for <literal>COPY
FROM</literal>
+  (a <type>CopyFromRoutine *</type>). If <literal>false</literal>, the
handler
+  must provide a pointer to its implementation of <literal>COPY
TO</literal>
+  (a <type>CopyToRoutine *</type>).  These structs are declared in
+  <filename>src/include/commands/copyapi.h</filename>.
  </para>
  <para>
-  The <type>CopyFromRoutine</type> and <type>CopyToRoutine</type> struct
types
-  are declared in <filename>src/include/commands/copyapi.h</filename>,
-  which see for additional details.
+  The structs hold pointers to implementation functions for
+  initializing, starting, processing rows, and ending a copy operation.
+  The specific structures vary a bit between <literal>COPY FROM</literal>
and
+  <literal>COPY TO</literal> so the next two sections describes each
+  in detail.
  </para>

<sect1 id="copy-handler-from">
<title>Copy From Handler</title>

   <para>
-   The <literal>COPY</literal> handler function for <literal>COPY
-   FROM</literal> returns a <type>CopyFromRoutine</type> struct containing
-   pointers to the functions described below. All functions are required.
+   The opening to this chapter describes how the executor will call the
+   main handler function with, in this case,
+   a <type>boolean</type> <literal>true</literal>, and expect to receive a
+   <type>CopyFromRoutine *</type> <type>Datum</type>.  This section
describes
+   the components of the <type>CopyFromRoutine</type> struct.
   </para>

<para>
-<programlisting>
+<synopsis>
void
CopyFromInFunc(CopyFromState cstate,
Oid atttypid,
FmgrInfo *finfo,
Oid *typioparam);
-</programlisting>
+</synopsis>

This sets input function information for the
given <literal>atttypid</literal> attribute. This function is called
once
@@ -110,11 +126,11 @@ CopyFromInFunc(CopyFromState cstate,
</para>

   <para>
-<programlisting>
+<synopsis>
 void
 CopyFromStart(CopyFromState cstate,
               TupleDesc tupDesc);
-</programlisting>
+</synopsis>

This starts a <literal>COPY FROM</literal>. This function is called
once at
the beginning of <literal>COPY FROM</literal>.
@@ -144,13 +160,13 @@ CopyFromStart(CopyFromState cstate,
</para>

<para>
-<programlisting>
+<synopsis>
bool
CopyFromOneRow(CopyFromState cstate,
ExprContext *econtext,
Datum *values,
bool *nulls);
-</programlisting>
+</synopsis>

This reads one row from the source and fill <literal>values</literal>
and <literal>nulls</literal>. If there is one or more tuples to be read,
@@ -202,10 +218,10 @@ CopyFromOneRow(CopyFromState cstate,
</para>

   <para>
-<programlisting>
+<synopsis>
 void
 CopyFromEnd(CopyFromState cstate);
-</programlisting>
+</synopsis>

This ends a <literal>COPY FROM</literal>. This function is called once
at
the end of <literal>COPY FROM</literal>.
@@ -232,18 +248,20 @@ CopyFromEnd(CopyFromState cstate);
<title>Copy To Handler</title>

   <para>
-   The <literal>COPY</literal> handler function for <literal>COPY
-   TO</literal> returns a <type>CopyToRoutine</type> struct containing
-   pointers to the functions described below. All functions are required.
+   The opening to this chapter describes how the executor will call the
+   main handler function with, in this case,
+   a <type>boolean</type> <literal>false</literal>, and expect to receive a
+   <type>CopyInRoutine *</type> <type>Datum</type>.  This section describes
+   the components of the <type>CopyInRoutine</type> struct.
   </para>

<para>
-<programlisting>
+<synopsis>
void
CopyToOutFunc(CopyToState cstate,
Oid atttypid,
FmgrInfo *finfo);
-</programlisting>
+</synopsis>

This sets output function information for the
given <literal>atttypid</literal> attribute. This function is called
once
@@ -284,11 +302,11 @@ CopyToOutFunc(CopyToState cstate,
</para>

   <para>
-<programlisting>
+<synopsis>
 void
 CopyToStart(CopyToState cstate,
             TupleDesc tupDesc);
-</programlisting>
+</synopsis>

This starts a <literal>COPY TO</literal>. This function is called once
at
the beginning of <literal>COPY TO</literal>.
@@ -316,11 +334,11 @@ CopyToStart(CopyToState cstate,
</para>

   <para>
-<programlisting>
+<synopsis>
 bool
 CopyToOneRow(CopyToState cstate,
              TupleTableSlot *slot);
-</programlisting>
+</synopsis>

This writes one row stored in <literal>slot</literal> to the
destination.

@@ -347,10 +365,10 @@ CopyToOneRow(CopyToState cstate,
</para>

   <para>
-<programlisting>
+<synopsis>
 void
 CopyToEnd(CopyToState cstate);
-</programlisting>
+</synopsis>

This ends a <literal>COPY TO</literal>. This function is called once at
the end of <literal>COPY TO</literal>.

#246Sutou Kouhei
kou@clear-code.com
In reply to: David G. Johnston (#245)
9 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAKFQuwaMAFMHqxDXR=SxA0mDjdmntrwxZd2w=nSruLNFH-OzLw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 19 Mar 2025 17:49:49 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

And could someone help (take over if possible) writing a
document for this feature? I'm not good at writing a
document in English... 0009 in the attached v37 patch set
has a draft of it. It's based on existing documents in
doc/src/sgml/ and *.h.

I haven't touched the innards of the structs aside from changing
programlisting to synopsis. And redoing the two section opening paragraphs
to better integrate with the content in the chapter opening.

The rest I kinda went to town on...

Thanks!!! It's very helpful!!!

I've applied your patch. 0009 is only changed.

Thanks,
--
kou

Attachments:

v38-0001-Add-support-for-adding-custom-COPY-TO-format.patchtext/x-patch; charset=us-asciiDownload
From a9aebf329a5388173b78b20922e19904ce833e9c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 12:19:15 +0900
Subject: [PATCH v38 1/9] Add support for adding custom COPY TO format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a COPY TO handler returns a CopyToRoutine.

This also add a test module for custom COPY TO handler.
---
 src/backend/commands/copy.c                   | 79 ++++++++++++++++---
 src/backend/commands/copyto.c                 | 28 ++++++-
 src/backend/nodes/Makefile                    |  1 +
 src/backend/nodes/gen_node_support.pl         |  2 +
 src/backend/utils/adt/pseudotypes.c           |  1 +
 src/include/catalog/pg_proc.dat               |  6 ++
 src/include/catalog/pg_type.dat               |  6 ++
 src/include/commands/copy.h                   |  1 +
 src/include/commands/copyapi.h                |  2 +
 src/include/nodes/meson.build                 |  1 +
 src/test/modules/Makefile                     |  1 +
 src/test/modules/meson.build                  |  1 +
 src/test/modules/test_copy_format/.gitignore  |  4 +
 src/test/modules/test_copy_format/Makefile    | 23 ++++++
 .../expected/test_copy_format.out             | 17 ++++
 src/test/modules/test_copy_format/meson.build | 33 ++++++++
 .../test_copy_format/sql/test_copy_format.sql |  5 ++
 .../test_copy_format--1.0.sql                 |  8 ++
 .../test_copy_format/test_copy_format.c       | 63 +++++++++++++++
 .../test_copy_format/test_copy_format.control |  4 +
 20 files changed, 269 insertions(+), 17 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..8d94bc313eb 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,6 +32,7 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
@@ -476,6 +477,70 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
 	return COPY_LOG_VERBOSITY_DEFAULT;	/* keep compiler quiet */
 }
 
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false). If no COPY format handler is found, this function
+ * reports an error.
+ */
+static void
+ProcessCopyOptionFormat(ParseState *pstate,
+						CopyFormatOptions *opts_out,
+						bool is_from,
+						DefElem *defel)
+{
+	char	   *format;
+	Oid			funcargtypes[1];
+	Oid			handlerOid = InvalidOid;
+
+	format = defGetString(defel);
+
+	opts_out->csv_mode = false;
+	opts_out->binary = false;
+	/* built-in formats */
+	if (strcmp(format, "text") == 0)
+	{
+		/* "csv_mode == false && binary == false" means "text" */
+		return;
+	}
+	else if (strcmp(format, "csv") == 0)
+	{
+		opts_out->csv_mode = true;
+		return;
+	}
+	else if (strcmp(format, "binary") == 0)
+	{
+		opts_out->binary = true;
+		return;
+	}
+
+	/* custom format */
+	if (!is_from)
+	{
+		funcargtypes[0] = INTERNALOID;
+		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+									funcargtypes, true);
+	}
+	if (!OidIsValid(handlerOid))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", format),
+				 parser_errposition(pstate, defel->location)));
+
+	/* check that handler has correct return type */
+	if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
+		ereport(ERROR,
+				(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+				 errmsg("function %s must return type %s",
+						format, "copy_handler"),
+				 parser_errposition(pstate, defel->location)));
+
+	opts_out->handler = handlerOid;
+}
+
 /*
  * Process the statement option list for COPY.
  *
@@ -519,22 +584,10 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
-
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			ProcessCopyOptionFormat(pstate, opts_out, is_from, defel);
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 84a3f3879a8..fce8501dc30 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -150,6 +150,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +159,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +168,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -176,13 +179,30 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyToRoutine struct",
+							opts->handler)));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts->binary)
 		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	else
+		return &CopyToRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 7e3f335ac09..29b7180c8ee
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 890822eaf79..7c2a510fa3f 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7838,6 +7838,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..340e0cd0a8d 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a copy to method function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..332628d67cc 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,6 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to].c */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..4f4ffabf882 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 4e4be3fa511..c9da440eed0 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -16,6 +16,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 2b057451473..d33bbbd4092 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -15,6 +15,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..adfe7d1572a
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,17 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: atttypid=21
+NOTICE:  CopyToOutFunc: atttypid=23
+NOTICE:  CopyToOutFunc: atttypid=20
+NOTICE:  CopyToStart: natts=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..a45a2e0a039
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..810b3d8cedc
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,5 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..d24ea03ce99
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,8 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME' LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..b42d472d851
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,63 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+
+PG_MODULE_MAGIC;
+
+static void
+CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: natts=%d", tupDesc->natts)));
+}
+
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u", slot->tts_nvalid)));
+}
+
+static void
+CopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = CopyToOutFunc,
+	.CopyToStart = CopyToStart,
+	.CopyToOneRow = CopyToOneRow,
+	.CopyToEnd = CopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v38-0002-Export-CopyToStateData-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From b1a433daaf8296248c22c34f4a27a9db27633506 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v38 2/9] Export CopyToStateData as private data

It's for custom COPY TO format handlers implemented as extension.

This just moves codes. This doesn't change codes except CopyDest enum
values. CopyDest/CopyFrom enum values such as COPY_FILE are conflicted
each other. So COPY_DEST_ prefix instead of COPY_ prefix is used for
CopyDest enum values. For example, COPY_FILE in CopyDest is renamed to
COPY_DEST_FILE.

Note that this isn't enough to implement custom COPY TO format
handlers as extension. We'll do the followings in a subsequent commit:

1. Add an opaque space for custom COPY TO format handler
2. Export CopySendEndOfRow() to flush buffer
---
 src/backend/commands/copyto.c          | 78 +++---------------------
 src/include/commands/copy.h            |  2 +-
 src/include/commands/copyto_internal.h | 83 ++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 70 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index fce8501dc30..99c2f2dd699 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,67 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -421,7 +361,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -468,7 +408,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -502,11 +442,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -527,7 +467,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -535,7 +475,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -920,12 +860,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 332628d67cc..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -90,7 +90,7 @@ typedef struct CopyFormatOptions
 	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..1b58b36c0a3
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,83 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v38-0003-Add-support-for-implementing-custom-COPY-TO-form.patchtext/x-patch; charset=us-asciiDownload
From d205c641dc9913d7a8e0e81a7b614f9e79d13390 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:01:18 +0900
Subject: [PATCH v38 3/9] Add support for implementing custom COPY TO format as
 extension

* Add CopyToStateData::opaque that can be used to keep data for custom
  COPY TO format implementation
* Export CopySendEndOfRow() to flush data in CopyToStateData::fe_msgbuf
  as CopyToStateFlush()
---
 src/backend/commands/copyto.c          | 12 ++++++++++++
 src/include/commands/copyapi.h         |  2 ++
 src/include/commands/copyto_internal.h |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99c2f2dd699..f5ed3efbace 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -458,6 +458,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 4f4ffabf882..5c5ea6592e3 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 1b58b36c0a3..ce1c33a4004 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v38-0004-Add-support-for-adding-custom-COPY-FROM-format.patchtext/x-patch; charset=us-asciiDownload
From 60527d56abfe49aeb114236c14001baf71b38ba5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:11:55 +0900
Subject: [PATCH v38 4/9] Add support for adding custom COPY FROM format

This uses the same handler for COPY TO and COPY FROM but uses
different routine. This uses CopyToRoutine for COPY TO and
CopyFromRoutine for COPY FROM. PostgreSQL calls a COPY TO/FROM handler
with "is_from" argument. It's true for COPY FROM and false for COPY
TO:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY FROM handler.
---
 src/backend/commands/copy.c                   | 13 +++----
 src/backend/commands/copyfrom.c               | 28 +++++++++++--
 src/include/catalog/pg_type.dat               |  2 +-
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 10 +++--
 .../test_copy_format/sql/test_copy_format.sql |  1 +
 .../test_copy_format/test_copy_format.c       | 39 ++++++++++++++++++-
 7 files changed, 78 insertions(+), 17 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 8d94bc313eb..b4417bb6819 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -483,8 +483,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * This function checks whether the option value is a built-in format such as
  * "text" and "csv" or not. If the option value isn't a built-in format, this
  * function finds a COPY format handler that returns a CopyToRoutine (for
- * is_from == false). If no COPY format handler is found, this function
- * reports an error.
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
  */
 static void
 ProcessCopyOptionFormat(ParseState *pstate,
@@ -518,12 +518,9 @@ ProcessCopyOptionFormat(ParseState *pstate,
 	}
 
 	/* custom format */
-	if (!is_from)
-	{
-		funcargtypes[0] = INTERNALOID;
-		handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
-									funcargtypes, true);
-	}
+	funcargtypes[0] = INTERNALOID;
+	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
+								funcargtypes, true);
 	if (!OidIsValid(handlerOid))
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index bcf66f0adf8..0809766f910 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -155,13 +158,30 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(
+					ERROR,
+					(errcode(
+							 ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function "
+							"%u did not return "
+							"CopyFromRoutine struct",
+							opts->handler)));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts->binary)
 		return &CopyFromRoutineBinary;
-
-	/* default is text */
-	return &CopyFromRoutineText;
+	else
+		return &CopyFromRoutineText;
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 340e0cd0a8d..63b7d65f982 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -634,7 +634,7 @@
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
 { oid => '8752',
-  descr => 'pseudo-type for the result of a copy to method function',
+  descr => 'pseudo-type for the result of a copy to/from method function',
   typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
   typcategory => 'P', typinput => 'copy_handler_in',
   typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 5c5ea6592e3..895c105d8d8 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -64,6 +64,8 @@ extern void CopyToStateFlush(CopyToState cstate);
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index adfe7d1572a..016893e7026 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -2,9 +2,13 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
-ERROR:  COPY format "test_copy_format" not recognized
-LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
-                                          ^
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 810b3d8cedc..0dfdfa00080 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -2,4 +2,5 @@ CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index b42d472d851..abafc668463 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -18,6 +18,40 @@
 
 PG_MODULE_MAGIC;
 
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+			   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}
+
+static void
+CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: natts=%d", tupDesc->natts)));
+}
+
+static bool
+CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+CopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = CopyFromInFunc,
+	.CopyFromStart = CopyFromStart,
+	.CopyFromOneRow = CopyFromOneRow,
+	.CopyFromEnd = CopyFromEnd,
+};
+
 static void
 CopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
 {
@@ -59,5 +93,8 @@ test_copy_format(PG_FUNCTION_ARGS)
 	ereport(NOTICE,
 			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
 
-	PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
 }
-- 
2.47.2

v38-0005-Use-COPY_SOURCE_-prefix-for-CopySource-enum-valu.patchtext/x-patch; charset=us-asciiDownload
From 48a363f84799bb4a4323e90bd425d2fd54c2eef2 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:19:34 +0900
Subject: [PATCH v38 5/9] Use COPY_SOURCE_ prefix for CopySource enum values

This is for consistency with CopyDest.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 +++++-----
 src/include/commands/copyfrom_internal.h |  6 +++---
 3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0809766f910..76662e04260 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1729,7 +1729,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1857,7 +1857,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index e8128f85e6b..17e51f02e04 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
-- 
2.47.2

v38-0006-Add-support-for-implementing-custom-COPY-FROM-fo.patchtext/x-patch; charset=us-asciiDownload
From a52949f4b6410bebbca4ef8ef026944ad0ad6fff Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 14:21:39 +0900
Subject: [PATCH v38 6/9] Add support for implementing custom COPY FROM format
 as extension

* Add CopyFromStateData::opaque that can be used to keep data for
  custom COPY From format implementation
* Export CopyGetData() to get the next data as
  CopyFromStateGetData()
---
 src/backend/commands/copyfromparse.c     | 11 +++++++++++
 src/include/commands/copyapi.h           |  2 ++
 src/include/commands/copyfrom_internal.h |  3 +++
 3 files changed, 16 insertions(+)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 17e51f02e04..d8fd238e72b 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 895c105d8d8..2044d8b8c4c 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -108,4 +108,6 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
-- 
2.47.2

v38-0007-Add-CopyFromSkipErrorRow-for-custom-COPY-format-.patchtext/x-patch; charset=us-asciiDownload
From d1a14456b1bd27a10769fbf47d5a47800bd16e0d Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 27 Nov 2024 16:23:55 +0900
Subject: [PATCH v38 7/9] Add CopyFromSkipErrorRow() for custom COPY format
 extension

Extensions must call CopyFromSkipErrorRow() when CopyFromOneRow
callback reports an error by errsave(). CopyFromSkipErrorRow() handles
"ON_ERROR stop" and "LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 82 +++++++++++--------
 src/include/commands/copyapi.h                |  2 +
 .../expected/test_copy_format.out             | 47 +++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 24 ++++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++++-
 5 files changed, 198 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index d8fd238e72b..2070f51a963 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -938,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1044,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2044d8b8c4c..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -110,4 +110,6 @@ typedef struct CopyFromRoutine
 
 extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
 
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 016893e7026..b9a6baa85c0 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: atttypid=21
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: atttypid=23
 NOTICE:  CopyFromInFunc: atttypid=20
 NOTICE:  CopyFromStart: natts=3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: atttypid=21
+NOTICE:  CopyFromInFunc: atttypid=23
+NOTICE:  CopyFromInFunc: atttypid=20
+NOTICE:  CopyFromStart: natts=3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: atttypid=21
@@ -18,4 +63,6 @@ NOTICE:  CopyToStart: natts=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
+NOTICE:  CopyToOneRow: tts_nvalid=3
 NOTICE:  CopyToEnd
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index 0dfdfa00080..86db71bce7f 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -1,6 +1,30 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index abafc668463..96a54dab7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 
 PG_MODULE_MAGIC;
@@ -34,8 +35,85 @@ CopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 CopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

v38-0008-Use-copy-handlers-for-built-in-formats.patchtext/x-patch; charset=us-asciiDownload
From e0240eec67a6a88d3daa2caa2bf48b45880a697b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 18 Mar 2025 19:09:09 +0900
Subject: [PATCH v38 8/9] Use copy handlers for built-in formats

This adds copy handlers for text, csv and binary. We can simplify
Copy{To,From}GetRoutine() by this. We'll be able to remove
CopyFormatOptions::{binary,csv_mode} when we add more callbacks to
Copy{To,From}Routine and move format specific routines to
Copy{To,From}Routine::*.
---
 src/backend/commands/copy.c              | 48 ++++++++++++++++++------
 src/backend/commands/copyfrom.c          | 48 +++++++++++-------------
 src/backend/commands/copyto.c            | 48 +++++++++++-------------
 src/include/catalog/pg_proc.dat          | 11 ++++++
 src/include/commands/copyfrom_internal.h |  6 ++-
 src/include/commands/copyto_internal.h   |  6 ++-
 6 files changed, 102 insertions(+), 65 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index b4417bb6819..24bd2547e3b 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,9 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -500,24 +502,15 @@ ProcessCopyOptionFormat(ParseState *pstate,
 
 	opts_out->csv_mode = false;
 	opts_out->binary = false;
-	/* built-in formats */
-	if (strcmp(format, "text") == 0)
-	{
-		/* "csv_mode == false && binary == false" means "text" */
-		return;
-	}
-	else if (strcmp(format, "csv") == 0)
+	if (strcmp(format, "csv") == 0)
 	{
 		opts_out->csv_mode = true;
-		return;
 	}
 	else if (strcmp(format, "binary") == 0)
 	{
 		opts_out->binary = true;
-		return;
 	}
 
-	/* custom format */
 	funcargtypes[0] = INTERNALOID;
 	handlerOid = LookupFuncName(list_make1(makeString(format)), 1,
 								funcargtypes, true);
@@ -1067,3 +1060,36 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+Datum
+copy_text_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineText);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineText);
+}
+
+Datum
+copy_csv_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineCSV);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineCSV);
+}
+
+Datum
+copy_binary_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineBinary);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineBinary);
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 76662e04260..2677f2ac1bc 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -45,6 +45,7 @@
 #include "rewrite/rewriteHandler.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/portal.h"
@@ -128,7 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
  */
 
 /* text format */
-static const CopyFromRoutine CopyFromRoutineText = {
+const CopyFromRoutine CopyFromRoutineText = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -137,7 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 };
 
 /* CSV format */
-static const CopyFromRoutine CopyFromRoutineCSV = {
+const CopyFromRoutine CopyFromRoutineCSV = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -146,7 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 };
 
 /* binary format */
-static const CopyFromRoutine CopyFromRoutineBinary = {
+const CopyFromRoutine CopyFromRoutineBinary = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
@@ -158,30 +159,25 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyFromRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%u did not return "
-							"CopyFromRoutine struct",
-							opts->handler)));
-		return castNode(CopyFromRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
-	else
-		return &CopyFromRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(true));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyFromRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%u did not return "
+						"CopyFromRoutine struct",
+						opts->handler)));
+	return castNode(CopyFromRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f5ed3efbace..757d24736e3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -32,6 +32,7 @@
 #include "pgstat.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/rel.h"
@@ -89,7 +90,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
  */
 
 /* text format */
-static const CopyToRoutine CopyToRoutineText = {
+const CopyToRoutine CopyToRoutineText = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -98,7 +99,7 @@ static const CopyToRoutine CopyToRoutineText = {
 };
 
 /* CSV format */
-static const CopyToRoutine CopyToRoutineCSV = {
+const CopyToRoutine CopyToRoutineCSV = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -107,7 +108,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 };
 
 /* binary format */
-static const CopyToRoutine CopyToRoutineBinary = {
+const CopyToRoutine CopyToRoutineBinary = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
@@ -119,30 +120,25 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyToRoutine))
-			ereport(
-					ERROR,
-					(errcode(
-							 ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function "
-							"%u did not return "
-							"CopyToRoutine struct",
-							opts->handler)));
-		return castNode(CopyToRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
-	else
-		return &CopyToRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(false));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(
+				ERROR,
+				(errcode(
+						 ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function "
+						"%u did not return "
+						"CopyToRoutine struct",
+						opts->handler)));
+	return castNode(CopyToRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 7c2a510fa3f..0737eb73c9a 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -12485,4 +12485,15 @@
   proargtypes => 'int4',
   prosrc => 'gist_stratnum_common' },
 
+# COPY handlers
+{ oid => '8100', descr => 'text COPY FORMAT handler',
+  proname => 'text', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_text_handler' },
+{ oid => '8101', descr => 'csv COPY FORMAT handler',
+  proname => 'csv', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_csv_handler' },
+{ oid => '8102', descr => 'binary COPY FORMAT handler',
+  proname => 'binary', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_binary_handler' },
+
 ]
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index af425cf5fd9..abeccf85c1c 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -197,4 +197,8 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineText;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineCSV;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineBinary;
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index ce1c33a4004..85412660f7f 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -83,4 +83,8 @@ typedef struct CopyToStateData
 	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineText;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineCSV;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineBinary;
+
 #endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v38-0009-Add-document-how-to-write-a-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From f7d63bff2f0870987e231c8a4dbfc54b61505792 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 19 Mar 2025 11:46:34 +0900
Subject: [PATCH v38 9/9] Add document how to write a COPY handler

This is WIP because we haven't decided our API yet.

Co-authored-by: David G. Johnston <david.g.johnston@gmail.com>
---
 doc/src/sgml/copy-handler.sgml | 394 +++++++++++++++++++++++++++++++++
 doc/src/sgml/filelist.sgml     |   1 +
 doc/src/sgml/postgres.sgml     |   1 +
 src/include/commands/copyapi.h |   9 +-
 4 files changed, 401 insertions(+), 4 deletions(-)
 create mode 100644 doc/src/sgml/copy-handler.sgml

diff --git a/doc/src/sgml/copy-handler.sgml b/doc/src/sgml/copy-handler.sgml
new file mode 100644
index 00000000000..5bc87d16662
--- /dev/null
+++ b/doc/src/sgml/copy-handler.sgml
@@ -0,0 +1,394 @@
+<!-- doc/src/sgml/copy-handler.sgml -->
+
+<chapter id="copy-handler">
+ <title>Writing a Copy Handler</title>
+
+ <indexterm zone="copy-handler">
+  <primary><literal>COPY</literal> handler</primary>
+ </indexterm>
+
+ <para>
+  <productname>PostgreSQL</productname> supports
+  custom <link linkend="sql-copy"><literal>COPY</literal></link> handlers;
+  adding additional <replaceable>format_name</replaceable> options to
+  the <literal>FORMAT</literal> clause.
+ </para>
+
+ <para>
+  At the SQL level, a copy handler method is represented by a single SQL
+  function (see <xref linkend="sql-createfunction"/>), typically implemented in
+  C, having the signature
+<synopsis>
+<replaceable>format_name</replaceable>(internal) RETURNS <literal>copy_handler</literal>
+</synopsis>
+  The function's name is then accepted as a
+  valid <replaceable>format_name</replaceable>. The return
+  pseudo-type <literal>copy_handler</literal> informs the system that this
+  function needs to be registered as a copy handler.
+  The <type>internal</type> argument is a dummy that prevents this function
+  from being called directly from an SQL command. As the handler
+  implementation must be server-lifetime immutable; this SQL function's
+  volatility should be marked immutable. The <literal>link_symbol</literal>
+  for this function is the name of the implementation function, described
+  next.
+ </para>
+
+ <para>
+  The implementation function signature expected for the function named
+  in the <literal>link_symbol</literal> is:
+<synopsis>
+Datum
+<replaceable>copy_format_handler</replaceable>(PG_FUNCTION_ARGS)
+</synopsis>
+  The convention for the name is to replace the word
+  <replaceable>format</replaceable> in the placeholder above with the value given
+  to <replaceable>format_name</replaceable> in the SQL function.
+  The first argument is a <type>boolean</type> that indicates whether the handler
+  must provide a pointer to its implementation for <literal>COPY FROM</literal>
+  (a <type>CopyFromRoutine *</type>). If <literal>false</literal>, the handler
+  must provide a pointer to its implementation of <literal>COPY TO</literal>
+  (a <type>CopyToRoutine *</type>). These structs are declared in
+  <filename>src/include/commands/copyapi.h</filename>.
+ </para>
+
+ <para>
+  The structs hold pointers to implementation functions for initializing,
+  starting, processing rows, and ending a copy operation. The specific
+  structures vary a bit between <literal>COPY FROM</literal> and
+  <literal>COPY TO</literal> so the next two sections describes each
+  in detail.
+ </para>
+
+ <sect1 id="copy-handler-from">
+  <title>Copy From Handler</title>
+
+  <para>
+   The opening to this chapter describes how the executor will call the main
+   handler function with, in this case,
+   a <type>boolean</type> <literal>true</literal>, and expect to receive a
+   <type>CopyFromRoutine *</type> <type>Datum</type>. This section describes
+   the components of the <type>CopyFromRoutine</type> struct.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromInFunc(CopyFromState cstate,
+               Oid atttypid,
+               FmgrInfo *finfo,
+               Oid *typioparam);
+</programlisting>
+
+   This sets input function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY FROM</literal>. If
+   this <literal>COPY</literal> handler doesn't use any input functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid *typioparam</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to define the OID of the type to
+       pass to the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromStart(CopyFromState cstate,
+              TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY FROM</literal>. This function is called once at
+   the beginning of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data needs to be
+       copied. This can be used for any initialization steps required by a
+       format.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyFromOneRow(CopyFromState cstate,
+               ExprContext *econtext,
+               Datum *values,
+               bool *nulls);
+</programlisting>
+
+   This reads one row from the source and fill <literal>values</literal>
+   and <literal>nulls</literal>. If there is one or more tuples to be read,
+   this must return <literal>true</literal>. If there are no more tuples to
+   read, this must return <literal>false</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>ExprContext *econtext</literal></term>
+     <listitem>
+      <para>
+       This is used to evaluate default expression for each column that is
+       either not read from the file or is using
+       the <literal>DEFAULT</literal> option of <literal>COPY
+       FROM</literal>. It is <literal>NULL</literal> if no default values are
+       used.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Datum *values</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store read tuples.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>bool *nulls</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store whether the read columns
+       are <literal>NULL</literal> or not.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromEnd(CopyFromState cstate);
+</programlisting>
+
+   This ends a <literal>COPY FROM</literal>. This function is called once at
+   the end of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyFromStateGetData() and CopyFromSkipErrowRow()?
+  </para>
+ </sect1>
+
+ <sect1 id="copy-handler-to">
+  <title>Copy To Handler</title>
+
+  <para>
+   The <literal>COPY</literal> handler function for <literal>COPY
+   TO</literal> returns a <type>CopyToRoutine</type> struct containing
+   pointers to the functions described below. All functions are required.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToOutFunc(CopyToState cstate,
+              Oid atttypid,
+              FmgrInfo *finfo);
+</programlisting>
+
+   This sets output function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY TO</literal>. If
+   this <literal>COPY</literal> handler doesn't use any output functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the output function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToStart(CopyToState cstate,
+            TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY TO</literal>. This function is called once at
+   the beginning of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data is read.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyToOneRow(CopyToState cstate,
+             TupleTableSlot *slot);
+</programlisting>
+
+   This writes one row stored in <literal>slot</literal> to the destination.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleTableSlot *slot</literal></term>
+     <listitem>
+      <para>
+       This is used to get row to be written.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToEnd(CopyToState cstate);
+</programlisting>
+
+   This ends a <literal>COPY TO</literal>. This function is called once at
+   the end of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyToStateFlush()?
+  </para>
+ </sect1>
+</chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 25fb99cee69..1fd6d32d5ec 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -107,6 +107,7 @@
 <!ENTITY storage    SYSTEM "storage.sgml">
 <!ENTITY transaction     SYSTEM "xact.sgml">
 <!ENTITY tablesample-method SYSTEM "tablesample-method.sgml">
+<!ENTITY copy-handler SYSTEM "copy-handler.sgml">
 <!ENTITY wal-for-extensions SYSTEM "wal-for-extensions.sgml">
 <!ENTITY generic-wal SYSTEM "generic-wal.sgml">
 <!ENTITY custom-rmgr SYSTEM "custom-rmgr.sgml">
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index af476c82fcc..8ba319ae2df 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -254,6 +254,7 @@ break is not needed in a wider output rendering.
   &plhandler;
   &fdwhandler;
   &tablesample-method;
+  &copy-handler;
   &custom-scan;
   &geqo;
   &tableam;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 500ece7d5bb..24710cb667a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -28,10 +28,10 @@ typedef struct CopyToRoutine
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the output function.
-	 *
-	 * 'atttypid' is the OID of data type used by the relation's attribute.
 	 */
 	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
 								  FmgrInfo *finfo);
@@ -70,12 +70,13 @@ typedef struct CopyFromRoutine
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the input function.
 	 *
 	 * 'typioparam' can be optionally filled to define the OID of the type to
-	 * pass to the input function.'atttypid' is the OID of data type used by
-	 * the relation's attribute.
+	 * pass to the input function.
 	 */
 	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
 								   FmgrInfo *finfo, Oid *typioparam);
-- 
2.47.2

#247David G. Johnston
david.g.johnston@gmail.com
In reply to: Sutou Kouhei (#244)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Mar 18, 2025 at 7:56 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDU=bYRDDY8MzCXAfg4h9XTeTBdM-wVJaO1t4UcseCpuA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format
implementations" on Mon, 17 Mar 2025 13:50:03 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that built-in formats also need to have their handler
functions. This seems to be a conventional way for customizable
features such as tablesample and access methods, and we can simplify
this function.

OK. 0008 in the attached v37 patch set does it.

tl/dr;

We need to exclude from our SQL function search any function that doesn't
declare copy_handler as its return type.
("function text must return type copy_handler" is not an acceptable error
message)

We need to accept identifiers in FORMAT and parse the optional catalog,
schema, and object name portions.
(Restrict our function search to the named schema if provided.)

Detail:

Fun thing...(not sure how much of this is covered above: I do see, but
didn't scour, the security discussion):

-- create some poison
create function public.text(internal) returns boolean language c as
'/home/davidj/gotya/gotya', 'gotit';
CREATE FUNCTION

-- inject it
postgres=# set search_path to public,pg_catalog;
SET

-- watch it die
postgres=# copy (select 1) to stdout (format text);
ERROR: function text must return type copy_handler
LINE 1: copy (select 1) to stdout (format text);

I'm especially concerned about extensions here.

We shouldn't be locating any SQL function that doesn't have a copy_handler
return type. Unfortunately, LookupFuncName seems incapable of doing what
we want here. I suggest we create a new lookup routine where we can
specify the return argument type as a required element. That would cleanly
mitigate the denial-of-service attack/accident vector demonstrated above
(the text returning function should have zero impact on how this feature
behaves). If someone does create a handler SQL function without using
copy_handler return type we'd end up showing "COPY format 'david' not
recognized" - a developer should be able to figure out they didn't put a
correct return type on their handler function and that is why the system
did not register it.

A second concern is simply people wanting to name things the same; or, why
namespaces were invented.

Can we just accept a proper identifier after FORMAT so we can use
schema-qualified names?

(FORMAT "davescopyformat"."david")

We can special case the internal schema-less names and internally force
pg_catalog to avoid them being shadowed.

David J.

#248Masahiko Sawada
sawada.mshk@gmail.com
In reply to: David G. Johnston (#247)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Mar 21, 2025 at 5:32 PM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Tue, Mar 18, 2025 at 7:56 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDU=bYRDDY8MzCXAfg4h9XTeTBdM-wVJaO1t4UcseCpuA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 17 Mar 2025 13:50:03 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that built-in formats also need to have their handler
functions. This seems to be a conventional way for customizable
features such as tablesample and access methods, and we can simplify
this function.

OK. 0008 in the attached v37 patch set does it.

tl/dr;

We need to exclude from our SQL function search any function that doesn't declare copy_handler as its return type.
("function text must return type copy_handler" is not an acceptable error message)

We need to accept identifiers in FORMAT and parse the optional catalog, schema, and object name portions.
(Restrict our function search to the named schema if provided.)

Detail:

Fun thing...(not sure how much of this is covered above: I do see, but didn't scour, the security discussion):

-- create some poison
create function public.text(internal) returns boolean language c as '/home/davidj/gotya/gotya', 'gotit';
CREATE FUNCTION

-- inject it
postgres=# set search_path to public,pg_catalog;
SET

-- watch it die
postgres=# copy (select 1) to stdout (format text);
ERROR: function text must return type copy_handler
LINE 1: copy (select 1) to stdout (format text);

I'm especially concerned about extensions here.

We shouldn't be locating any SQL function that doesn't have a copy_handler return type. Unfortunately, LookupFuncName seems incapable of doing what we want here. I suggest we create a new lookup routine where we can specify the return argument type as a required element. That would cleanly mitigate the denial-of-service attack/accident vector demonstrated above (the text returning function should have zero impact on how this feature behaves). If someone does create a handler SQL function without using copy_handler return type we'd end up showing "COPY format 'david' not recognized" - a developer should be able to figure out they didn't put a correct return type on their handler function and that is why the system did not register it.

Just to be clear, the patch checks the function's return type before calling it:

funcargtypes[0] = INTERNALOID;
handlerOid = LookupFuncName(list_make1(makeString(format)), 1,

funcargtypes, true);
if (!OidIsValid(handlerOid))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("COPY format \"%s\" not
recognized", format),
parser_errposition(pstate, defel->location)));

/* check that handler has correct return type */
if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("function %s must return type %s",
format, "copy_handler"),
parser_errposition(pstate, defel->location)));

So would changing the error message to like "COPY format 'text' not
recognized" untangle your concern?

FYI the same is true for TABLESAMPLE; it invokes a function with the
specified method name and checks the returned Node type:

=# select * from pg_class tablesample text (0);
ERROR: function text must return type tsm_handler

A difference between TABLESAMPLE and COPY format is that the former
accepts a qualified name but the latter doesn't:

=# create extension tsm_system_rows ;
=# create schema s1;
=# create function s1.system_rows(internal) returns void language c as
'tsm_system_rows.so', 'tsm_system_rows_handler';
=# \df *.system_rows
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+-------------+------------------+---------------------+------
public | system_rows | tsm_handler | internal | func
s1 | system_rows | void | internal | func
(2 rows)
postgres(1:1194923)=# select count(*) from pg_class tablesample system_rows(0);
count
-------
0
(1 row)

postgres(1:1194923)=# select count(*) from pg_class tablesample
s1.system_rows(0);
ERROR: function s1.system_rows must return type tsm_handler

A second concern is simply people wanting to name things the same; or, why namespaces were invented.

Yeah, I think that the custom COPY format should support qualified
names at least.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#249David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#248)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Friday, March 21, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Mar 21, 2025 at 5:32 PM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Tue, Mar 18, 2025 at 7:56 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDU=bYRDDY8MzCXAfg4h9XTeTBdM-wVJaO1t4UcseCpuA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format

implementations" on Mon, 17 Mar 2025 13:50:03 -0700,

Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that built-in formats also need to have their handler
functions. This seems to be a conventional way for customizable
features such as tablesample and access methods, and we can simplify
this function.

OK. 0008 in the attached v37 patch set does it.

tl/dr;

We need to exclude from our SQL function search any function that

doesn't declare copy_handler as its return type.

("function text must return type copy_handler" is not an acceptable

error message)

We need to accept identifiers in FORMAT and parse the optional catalog,

schema, and object name portions.

(Restrict our function search to the named schema if provided.)

Detail:

Fun thing...(not sure how much of this is covered above: I do see, but

didn't scour, the security discussion):

-- create some poison
create function public.text(internal) returns boolean language c as

'/home/davidj/gotya/gotya', 'gotit';

CREATE FUNCTION

-- inject it
postgres=# set search_path to public,pg_catalog;
SET

-- watch it die
postgres=# copy (select 1) to stdout (format text);
ERROR: function text must return type copy_handler
LINE 1: copy (select 1) to stdout (format text);

I'm especially concerned about extensions here.

We shouldn't be locating any SQL function that doesn't have a

copy_handler return type. Unfortunately, LookupFuncName seems incapable of
doing what we want here. I suggest we create a new lookup routine where we
can specify the return argument type as a required element. That would
cleanly mitigate the denial-of-service attack/accident vector demonstrated
above (the text returning function should have zero impact on how this
feature behaves). If someone does create a handler SQL function without
using copy_handler return type we'd end up showing "COPY format 'david' not
recognized" - a developer should be able to figure out they didn't put a
correct return type on their handler function and that is why the system
did not register it.

Just to be clear, the patch checks the function's return type before
calling it:

funcargtypes[0] = INTERNALOID;
handlerOid = LookupFuncName(list_make1(makeString(format)), 1,

funcargtypes, true);
if (!OidIsValid(handlerOid))
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("COPY format \"%s\" not
recognized", format),
parser_errposition(pstate,
defel->location)));

/* check that handler has correct return type */
if (get_func_rettype(handlerOid) != COPY_HANDLEROID)
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("function %s must return type %s",
format, "copy_handler"),
parser_errposition(pstate,
defel->location)));

So would changing the error message to like "COPY format 'text' not
recognized" untangle your concern?

In my example above copy should not fail at all. The text function created
in public that returns Boolean would never be seen and the real one in
pg_catalog would then be found and behave as expected.

FYI the same is true for TABLESAMPLE; it invokes a function with the
specified method name and checks the returned Node type:

=# select * from pg_class tablesample text (0);
ERROR: function text must return type tsm_handler

Then this would benefit from the new function I suggest creating since it
apparently has the same, IMO, bug.

David J.

#250David G. Johnston
david.g.johnston@gmail.com
In reply to: David G. Johnston (#249)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Mar 21, 2025 at 10:23 PM David G. Johnston <
david.g.johnston@gmail.com> wrote:

Then this would benefit from the new function I suggest creating since it
apparently has the same, IMO, bug.

Concretely like I posted here:
/messages/by-id/CAKFQuwYBTcK+uW-BYFChHP8HYj0R5+UpytGmdqEvP9PHCSZ+-g@mail.gmail.com

David J.

#251Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#246)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 19, 2025 at 6:25 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAKFQuwaMAFMHqxDXR=SxA0mDjdmntrwxZd2w=nSruLNFH-OzLw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 19 Mar 2025 17:49:49 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

And could someone help (take over if possible) writing a
document for this feature? I'm not good at writing a
document in English... 0009 in the attached v37 patch set
has a draft of it. It's based on existing documents in
doc/src/sgml/ and *.h.

I haven't touched the innards of the structs aside from changing
programlisting to synopsis. And redoing the two section opening paragraphs
to better integrate with the content in the chapter opening.

The rest I kinda went to town on...

Thanks!!! It's very helpful!!!

I've applied your patch. 0009 is only changed.

Thank you for updating the patches. I've reviewed the main part of
supporting the custom COPY format. Here are some random comments:

---
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */

I think this comment needs to be updated as the part "If the option
value isn't ..." is no longer true.

I think we don't necessarily need to create a separate function
ProcessCopyOptionFormat for processing the format option.

We need more regression tests for handling the given format name. For example,

- more various input patterns.
- a function with the specified format name exists but it returns an
unexpected Node.
- looking for a handler function in a different namespace.
etc.

---
I think that we should accept qualified names too as the format name
like tablesample does. That way, different extensions implementing the
same format can be used.

---
+        if (routine == NULL || !IsA(routine, CopyFromRoutine))
+                ereport(
+                                ERROR,
+                                (errcode(
+
ERRCODE_INVALID_PARAMETER_VALUE),
+                                 errmsg("COPY handler function "
+                                                "%u did not return "
+                                                "CopyFromRoutine struct",
+                                                opts->handler)));

It's not conventional to put a new line between 'ereport(' and 'ERROR'
(similarly between 'errcode(' and 'ERRCODE_...'. Also, we don't need
to split the error message into multiple lines as it's not long.

---
+        if (routine == NULL || !IsA(routine, CopyToRoutine))
+                ereport(
+                                ERROR,
+                                (errcode(
+
ERRCODE_INVALID_PARAMETER_VALUE),
+                                 errmsg("COPY handler function "
+                                                "%u did not return "
+                                                "CopyToRoutine struct",
+                                                opts->handler)));

Same as the above comment.

---
+  descr => 'pseudo-type for the result of a copy to/from method function',

s/method function/format function/

---
+        Oid                    handler;                /* handler
function for custom format routine */

'handler' is used also for built-in formats.

---
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+                           FmgrInfo *finfo, Oid *typioparam)
+{
+        ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}

OIDs could be changed across major versions even for built-in types. I
think it's better to avoid using it for tests.

---
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+        ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u",
slot->tts_nvalid)));
+}

Similar to the above comment, the field name 'tts_nvalid' might also
be changed in the future, let's use another name.

---
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+        .type = T_CopyFromRoutine,
+        .CopyFromInFunc = CopyFromInFunc,
+        .CopyFromStart = CopyFromStart,
+        .CopyFromOneRow = CopyFromOneRow,
+        .CopyFromEnd = CopyFromEnd,
+};

I'd suggest not using the same function names as the fields.

---
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+        CopySendEndOfRow(cstate);
+}

Is there any reason to use a different name for public functions?

---
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread,
int maxread)
+{
+        return CopyGetData(cstate, dest, minread, maxread);
+}
+

The same as the above comment.

---
+        /* For custom format implementation */
+        void      *opaque;                     /* private space */

How about renaming 'private'?

---
I've not reviewed the documentation patch yet but I think the patch
seems to miss the updates to the description of the FORMAT option in
the COPY command section.

---
I think we can reorganize the patch set as follows:

1. Create copyto_internal.h and change COPY_XXX to COPY_SOURCE_XXX and
COPY_DEST_XXX accordingly.
2. Support custom format for both COPY TO and COPY FROM.
3. Expose necessary helper functions such as CopySendEndOfRow().
4. Add CopyFromSkipErrorRow().
5. Documentation.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#252Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#246)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 19, 2025 at 6:25 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAKFQuwaMAFMHqxDXR=SxA0mDjdmntrwxZd2w=nSruLNFH-OzLw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 19 Mar 2025 17:49:49 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

And could someone help (take over if possible) writing a
document for this feature? I'm not good at writing a
document in English... 0009 in the attached v37 patch set
has a draft of it. It's based on existing documents in
doc/src/sgml/ and *.h.

I haven't touched the innards of the structs aside from changing
programlisting to synopsis. And redoing the two section opening paragraphs
to better integrate with the content in the chapter opening.

The rest I kinda went to town on...

Thanks!!! It's very helpful!!!

I've applied your patch. 0009 is only changed.

FYI I've implemented an extension to add JSON Lines format as a custom
COPY format[1]https://github.com/MasahikoSawada/pg_copy_jsonlines to check the usability of the COPY format APIs. I think
that the exposed APIs are fairly simple and minimum. I didn't find the
deficiency and excess of exposed APIs for helping extensions but I
find that it would be better to describe what the one-row callback
should do to utilize the abstracted destination. For example, in order
to use CopyToStateFlush() to write out to the destination, extensions
should write the data to cstate->fe_msgbuf. We expose
CopyToStateFlush() but not for any functions to write data there such
as CopySendString(). It was a bit inconvenient to me but I managed to
write the data directly there by #include'ing copyto_internal.h.

Regards,

[1]: https://github.com/MasahikoSawada/pg_copy_jsonlines

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#253Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#251)
5 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAfWrjpTDJ0garVUoXY0WC3Ud4Cu51q+ccWiotm1uo_2A@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 23 Mar 2025 02:01:59 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

---
+/*
+ * Process the "format" option.
+ *
+ * This function checks whether the option value is a built-in format such as
+ * "text" and "csv" or not. If the option value isn't a built-in format, this
+ * function finds a COPY format handler that returns a CopyToRoutine (for
+ * is_from == false) or CopyFromRountine (for is_from == true). If no COPY
+ * format handler is found, this function reports an error.
+ */

I think this comment needs to be updated as the part "If the option
value isn't ..." is no longer true.

I think we don't necessarily need to create a separate function
ProcessCopyOptionFormat for processing the format option.

Hmm. I think that this separated function will increase
readability by reducing indentation. But I've removed the
separation as you suggested. So the comment is also removed
entirely.

0002 includes this.

We need more regression tests for handling the given format name. For example,

- more various input patterns.
- a function with the specified format name exists but it returns an
unexpected Node.
- looking for a handler function in a different namespace.
etc.

I've added the following tests:

* Wrong input type handler without namespace
* Wrong input type handler with namespace
* Wrong return type handler without namespace
* Wrong return type handler with namespace
* Wrong return value (Copy*Routine isn't returned) handler without namespace
* Wrong return value (Copy*Routine isn't returned) handler with namespace
* Nonexistent handler
* Invalid qualified name
* Valid handler without namespace and without search_path
* Valid handler without namespace and with search_path
* Valid handler with namespace

0002 also includes this.

I think that we should accept qualified names too as the format name
like tablesample does. That way, different extensions implementing the
same format can be used.

Implemented. It's implemented after parsing SQL. Is it OK?
(It seems that tablesample does it in parsing SQL.)

Because "WITH (FORMAT XXX)" is processed as a generic option
in gram.y. All generic options are processed as strings. So
I keep this.

Syntax is "COPY ... WITH (FORMAT 'NAMESPACE.HANDLER_NAME')"
not "COPY ... WITH (FORMAT 'NAMESPACE'.'HANDLER_NAME')"
because of this choice.

0002 also includes this.

---
+        if (routine == NULL || !IsA(routine, CopyFromRoutine))
+                ereport(
+                                ERROR,
+                                (errcode(
+
ERRCODE_INVALID_PARAMETER_VALUE),
+                                 errmsg("COPY handler function "
+                                                "%u did not return "
+                                                "CopyFromRoutine struct",
+                                                opts->handler)));

It's not conventional to put a new line between 'ereport(' and 'ERROR'
(similarly between 'errcode(' and 'ERRCODE_...'. Also, we don't need
to split the error message into multiple lines as it's not long.

Oh, sorry. I can't remember why I used this... I think I
trusted pgindent...

---
+  descr => 'pseudo-type for the result of a copy to/from method function',

s/method function/format function/

Good catch. I used "handler function" not "format function"
because we use "handler" in other places.

---
+        Oid                    handler;                /* handler
function for custom format routine */

'handler' is used also for built-in formats.

Updated in 0004.

---
+static void
+CopyFromInFunc(CopyFromState cstate, Oid atttypid,
+                           FmgrInfo *finfo, Oid *typioparam)
+{
+        ereport(NOTICE, (errmsg("CopyFromInFunc: atttypid=%d", atttypid)));
+}

OIDs could be changed across major versions even for built-in types. I
think it's better to avoid using it for tests.

Oh, I didn't know it. I've changed to use type name instead
of OID. It'll be more stable than OID.

---
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+        ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u",
slot->tts_nvalid)));
+}

Similar to the above comment, the field name 'tts_nvalid' might also
be changed in the future, let's use another name.

Hmm. If the field name is changed, we need to change this
code. So changing tests too isn't strange. Anyway, I used
more generic text.

---
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+        .type = T_CopyFromRoutine,
+        .CopyFromInFunc = CopyFromInFunc,
+        .CopyFromStart = CopyFromStart,
+        .CopyFromOneRow = CopyFromOneRow,
+        .CopyFromEnd = CopyFromEnd,
+};

I'd suggest not using the same function names as the fields.

OK. I've added "Test" prefix.

---
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+        CopySendEndOfRow(cstate);
+}

Is there any reason to use a different name for public functions?

In this patch set, I use "CopyFrom"/"CopyTo" prefixes for
public APIs for custom COPY FORMAT handler extensions. It
will help understanding related APIs. Is it strange in
PostgreSQL?

---
+        /* For custom format implementation */
+        void      *opaque;                     /* private space */

How about renaming 'private'?

We should not use "private" because it's a keyword in
C++. If we use "private" here, we can't include this file
from C++ code.

---
I've not reviewed the documentation patch yet but I think the patch
seems to miss the updates to the description of the FORMAT option in
the COPY command section.

I defer this for now. We can revisit the last documentation
patch after we finalize our API. (Or could someone help us?)

I think we can reorganize the patch set as follows:

1. Create copyto_internal.h and change COPY_XXX to COPY_SOURCE_XXX and
COPY_DEST_XXX accordingly.
2. Support custom format for both COPY TO and COPY FROM.
3. Expose necessary helper functions such as CopySendEndOfRow().
4. Add CopyFromSkipErrorRow().
5. Documentation.

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

We can merge 0001 quickly, right?

Thanks,
--
kou

Attachments:

v39-0001-Export-CopyDest-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 76f8134652f14210817e872daab3c0a8b3c0318a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v39 1/5] Export CopyDest as private data

This is a preparation to export CopyToStateData as private data.

CopyToStateData depends on CopyDest. So we need to export CopyDest
too.

But CopyDest and CopySource has the same names. So we can't export
CopyDest as-is.

This uses the COPY_DEST_ prefix for CopyDest enum values. CopySource
uses the COPY_FROM_ prefix for consistency.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 ++++-----
 src/backend/commands/copyto.c            | 28 ++++++++----------------
 src/include/commands/copyfrom_internal.h |  6 ++---
 src/include/commands/copyto_internal.h   | 28 ++++++++++++++++++++++++
 5 files changed, 47 insertions(+), 29 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index bcf66f0adf8..f58497d4187 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1709,7 +1709,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1837,7 +1837,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index e8128f85e6b..17e51f02e04 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 84a3f3879a8..05ad87d8220 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,17 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
 /*
  * This struct contains all the state variables used throughout a COPY TO
  * operation.
@@ -401,7 +391,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -448,7 +438,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -482,11 +472,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +497,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +505,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -900,12 +890,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..3a306e3286e 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..42ddb37a8a2
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,28 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v39-0002-Add-support-for-adding-custom-COPY-format.patchtext/x-patch; charset=us-asciiDownload
From bcc2c19e59b4dbc15fcfd3b5c7d4837314e00518 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:14:43 +0900
Subject: [PATCH v39 2/5] Add support for adding custom COPY format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a handler returns a CopyToRoutine for COPY TO and a CopyFromRoutine
for COPY FROM.

Whether COPY TO or COPY FROM is passed as the "is_from" argument:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY handler.
---
 src/backend/commands/copy.c                   |  31 ++++-
 src/backend/commands/copyfrom.c               |  20 +++-
 src/backend/commands/copyto.c                 |  70 +++--------
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 +
 src/include/catalog/pg_type.dat               |   6 +
 src/include/commands/copy.h                   |   3 +-
 src/include/commands/copyapi.h                |   4 +
 src/include/commands/copyto_internal.h        |  55 +++++++++
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../test_copy_format/expected/invalid.out     |  61 ++++++++++
 .../test_copy_format/expected/no_schema.out   |  23 ++++
 .../test_copy_format/expected/schema.out      |  56 +++++++++
 src/test/modules/test_copy_format/meson.build |  35 ++++++
 .../modules/test_copy_format/sql/invalid.sql  |  29 +++++
 .../test_copy_format/sql/no_schema.sql        |   8 ++
 .../modules/test_copy_format/sql/schema.sql   |  24 ++++
 .../test_copy_format--1.0.sql                 |  24 ++++
 .../test_copy_format/test_copy_format.c       | 113 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 26 files changed, 549 insertions(+), 57 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/invalid.out
 create mode 100644 src/test/modules/test_copy_format/expected/no_schema.out
 create mode 100644 src/test/modules/test_copy_format/expected/schema.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/invalid.sql
 create mode 100644 src/test/modules/test_copy_format/sql/no_schema.sql
 create mode 100644 src/test/modules/test_copy_format/sql/schema.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index cfca9d9dc29..2539aee3a53 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,10 +32,12 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
 #include "utils/lsyscache.h"
+#include "utils/regproc.h"
 #include "utils/rel.h"
 #include "utils/rls.h"
 
@@ -531,10 +533,31 @@ ProcessCopyOptions(ParseState *pstate,
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
 			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			{
+				List	   *qualified_format;
+				Oid			arg_types[1];
+				Oid			handler = InvalidOid;
+
+				qualified_format = stringToQualifiedNameList(fmt, NULL);
+				arg_types[0] = INTERNALOID;
+				handler = LookupFuncName(qualified_format, 1,
+										 arg_types, true);
+				if (!OidIsValid(handler))
+					ereport(ERROR,
+							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+							 errmsg("COPY format \"%s\" not recognized", fmt),
+							 parser_errposition(pstate, defel->location)));
+
+				/* check that handler has correct return type */
+				if (get_func_rettype(handler) != COPY_HANDLEROID)
+					ereport(ERROR,
+							(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+							 errmsg("function %s must return type %s",
+									fmt, "copy_handler"),
+							 parser_errposition(pstate, defel->location)));
+
+				opts_out->handler = handler;
+			}
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index f58497d4187..91f44193abf 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -155,7 +158,22 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
+							get_namespace_name(get_func_namespace(opts->handler)),
+							get_func_name(opts->handler))));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts->binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 05ad87d8220..b7ff6466ce3 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,56 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -140,6 +90,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -148,6 +99,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -156,6 +108,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -166,7 +119,22 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
+							get_namespace_name(get_func_namespace(opts->handler)),
+							get_func_name(opts->handler))));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts->binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 40994b53fb2..d7e8d16e789
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 0d29ef50ff2..79b5a36088c 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7838,6 +7838,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..bddf9fb4fbe 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a COPY TO/FROM handler function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,9 +87,10 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..53ad3337f86 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
@@ -60,6 +62,8 @@ typedef struct CopyToRoutine
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 42ddb37a8a2..12c4a0f5979 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,6 +14,11 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
@@ -25,4 +30,54 @@ typedef enum CopyDest
 	COPY_DEST_CALLBACK,			/* to callback function */
 } CopyDest;
 
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 4e4be3fa511..c9da440eed0 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -16,6 +16,7 @@ SUBDIRS = \
 		  spgist_name_ops \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 2b057451473..d33bbbd4092 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -15,6 +15,7 @@ subdir('spgist_name_ops')
 subdir('ssl_passphrase_callback')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/invalid.out b/src/test/modules/test_copy_format/expected/invalid.out
new file mode 100644
index 00000000000..306c9928431
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/invalid.out
@@ -0,0 +1,61 @@
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+SET search_path = public,test_schema;
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_w...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wr...
+                                         ^
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_type');
+ERROR:  function test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_w...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_type');
+ERROR:  function test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wr...
+                                         ^
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyFromRoutine struct
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyToRoutine struct
+RESET search_path;
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_schema.test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_c...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_schema.test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'test_schema.test_co...
+                                         ^
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+ERROR:  function test_schema.test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_c...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+ERROR:  function test_schema.test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'test_schema.test_co...
+                                         ^
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyFromRoutine struct
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyToRoutine struct
+COPY public.test FROM stdin WITH (FORMAT 'nonexistent');
+ERROR:  COPY format "nonexistent" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'nonexistent');
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'nonexistent');
+ERROR:  COPY format "nonexistent" not recognized
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'nonexistent');
+                                         ^
+COPY public.test FROM stdin WITH (FORMAT 'invalid.qualified.name');
+ERROR:  cross-database references are not implemented: invalid.qualified.name
+COPY public.test TO stdout WITH (FORMAT 'invalid.qualified.name');
+ERROR:  cross-database references are not implemented: invalid.qualified.name
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/expected/no_schema.out b/src/test/modules/test_copy_format/expected/no_schema.out
new file mode 100644
index 00000000000..d5903632b2e
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/no_schema.out
@@ -0,0 +1,23 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
diff --git a/src/test/modules/test_copy_format/expected/schema.out b/src/test/modules/test_copy_format/expected/schema.out
new file mode 100644
index 00000000000..698189fbeae
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/schema.out
@@ -0,0 +1,56 @@
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- Qualified name
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+-- No schema, no search path
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test FROM stdin WITH (FORMAT 'test_copy_format')...
+                                          ^
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+                                         ^
+-- No schema, with search path
+SET search_path = test_schema,public;
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+RESET search_path;
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..8010659585b
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,35 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'invalid',
+      'no_schema',
+      'schema',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/invalid.sql b/src/test/modules/test_copy_format/sql/invalid.sql
new file mode 100644
index 00000000000..e475f6a38c6
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/invalid.sql
@@ -0,0 +1,29 @@
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+SET search_path = public,test_schema;
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_input_type');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_input_type');
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_type');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_type');
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_value');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_value');
+RESET search_path;
+
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+
+COPY public.test FROM stdin WITH (FORMAT 'nonexistent');
+COPY public.test TO stdout WITH (FORMAT 'nonexistent');
+COPY public.test FROM stdin WITH (FORMAT 'invalid.qualified.name');
+COPY public.test TO stdout WITH (FORMAT 'invalid.qualified.name');
+
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/sql/no_schema.sql b/src/test/modules/test_copy_format/sql/no_schema.sql
new file mode 100644
index 00000000000..1e049f799f0
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/no_schema.sql
@@ -0,0 +1,8 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
diff --git a/src/test/modules/test_copy_format/sql/schema.sql b/src/test/modules/test_copy_format/sql/schema.sql
new file mode 100644
index 00000000000..ab9492158e1
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/schema.sql
@@ -0,0 +1,24 @@
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+-- Qualified name
+COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format');
+\.
+COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format');
+
+-- No schema, no search path
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+
+-- No schema, with search path
+SET search_path = test_schema,public;
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
+RESET search_path;
+
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..c1a137181f8
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,24 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_input_type(bool)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_return_type(internal)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_return_value(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format_wrong_return_value'
+	LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..1d754201336
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,113 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+#include "utils/builtins.h"
+
+PG_MODULE_MAGIC;
+
+static void
+TestCopyFromInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static bool
+TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+TestCopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = TestCopyFromInFunc,
+	.CopyFromStart = TestCopyFromStart,
+	.CopyFromOneRow = TestCopyFromOneRow,
+	.CopyFromEnd = TestCopyFromEnd,
+};
+
+static void
+TestCopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static void
+TestCopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: the number of valid values: %u", slot->tts_nvalid)));
+}
+
+static void
+TestCopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = TestCopyToOutFunc,
+	.CopyToStart = TestCopyToStart,
+	.CopyToOneRow = TestCopyToOneRow,
+	.CopyToEnd = TestCopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
+
+PG_FUNCTION_INFO_V1(test_copy_format_wrong_return_value);
+Datum
+test_copy_format_wrong_return_value(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_CSTRING(pstrdup("is_from=true"));
+	else
+		PG_RETURN_CSTRING(pstrdup("is_from=false"));
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v39-0003-Add-support-for-implementing-custom-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From f0fcd9ee75b82d7365306317f99dbe1efff1f34b Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:24:15 +0900
Subject: [PATCH v39 3/5] Add support for implementing custom COPY handler as
 extension

* TO: Add CopyToStateData::opaque that can be used to keep
  data for custom COPY TO handler implementation
* TO: Export CopySendEndOfRow() to send end of row data as
  CopyToStateFlush()
* FROM: Add CopyFromStateData::opaque that can be used to
  keep data for custom COPY FROM handler implementation
* FROM: Export CopyGetData() to get the next data as
  CopyFromStateGetData()
* FROM: Add CopyFromSkipErrorRow() for "ON_ERROR stop" and
  "LOG_VERBOSITY verbose"

COPY FROM extensions must call CopyFromSkipErrorRow() when
CopyFromOneRow callback reports an error by
errsave(). CopyFromSkipErrorRow() handles "ON_ERROR stop" and
"LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 93 ++++++++++++-------
 src/backend/commands/copyto.c                 | 12 +++
 src/include/commands/copyapi.h                |  6 ++
 src/include/commands/copyfrom_internal.h      |  3 +
 src/include/commands/copyto_internal.h        |  3 +
 .../test_copy_format/expected/no_schema.out   | 47 ++++++++++
 .../test_copy_format/sql/no_schema.sql        | 24 +++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++-
 8 files changed, 231 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 17e51f02e04..2070f51a963 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
@@ -927,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
+						   (unsigned long long) cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1033,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": \"%s\"",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %llu for column \"%s\": null input",
-								   (unsigned long long) cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index b7ff6466ce3..23cbdad184c 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -456,6 +456,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 53ad3337f86..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -106,4 +108,8 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 3a306e3286e..af425cf5fd9 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 12c4a0f5979..14ee0f50588 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/no_schema.out b/src/test/modules/test_copy_format/expected/no_schema.out
index d5903632b2e..05d160c1eae 100644
--- a/src/test/modules/test_copy_format/expected/no_schema.out
+++ b/src/test/modules/test_copy_format/expected/no_schema.out
@@ -1,6 +1,8 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: attribute: smallint
@@ -8,7 +10,50 @@ NOTICE:  CopyFromInFunc: attribute: integer
 NOTICE:  CopyFromInFunc: attribute: bigint
 NOTICE:  CopyFromStart: the number of attributes: 3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY test, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY test, line 3
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: attribute: smallint
@@ -18,6 +63,8 @@ NOTICE:  CopyToStart: the number of attributes: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToEnd
 DROP TABLE public.test;
 DROP EXTENSION test_copy_format;
diff --git a/src/test/modules/test_copy_format/sql/no_schema.sql b/src/test/modules/test_copy_format/sql/no_schema.sql
index 1e049f799f0..1901c4a9f43 100644
--- a/src/test/modules/test_copy_format/sql/no_schema.sql
+++ b/src/test/modules/test_copy_format/sql/no_schema.sql
@@ -1,7 +1,31 @@
 CREATE EXTENSION test_copy_format;
 CREATE TABLE public.test (a smallint, b integer, c bigint);
 INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY public.test FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
 \.
 COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
 DROP TABLE public.test;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index 1d754201336..34ec693a7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "utils/builtins.h"
 
@@ -35,8 +36,85 @@ TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

v39-0004-Use-copy-handlers-for-built-in-formats.patchtext/x-patch; charset=us-asciiDownload
From 78c7ba67fb58ff44b492a207cf1833e296547175 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:56:45 +0900
Subject: [PATCH v39 4/5] Use copy handlers for built-in formats

This adds copy handlers for text, csv and binary. We can simplify
Copy{To,From}GetRoutine() by this. We'll be able to remove
CopyFormatOptions::{binary,csv_mode} when we add more callbacks to
Copy{To,From}Routine and move format specific routines to
Copy{To,From}Routine::*.
---
 src/backend/commands/copy.c                   | 101 ++++++++++++------
 src/backend/commands/copyfrom.c               |  42 ++++----
 src/backend/commands/copyto.c                 |  42 ++++----
 src/include/catalog/pg_proc.dat               |  11 ++
 src/include/commands/copy.h                   |   2 +-
 src/include/commands/copyfrom_internal.h      |   6 +-
 src/include/commands/copyto_internal.h        |   6 +-
 .../test_copy_format/expected/builtin.out     |  34 ++++++
 src/test/modules/test_copy_format/meson.build |   1 +
 .../modules/test_copy_format/sql/builtin.sql  |  30 ++++++
 .../test_copy_format--1.0.sql                 |  15 +++
 11 files changed, 209 insertions(+), 81 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/expected/builtin.out
 create mode 100644 src/test/modules/test_copy_format/sql/builtin.sql

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 2539aee3a53..2bd8989b1ae 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,9 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -521,43 +523,45 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
+			char	   *format = defGetString(defel);
+			List	   *qualified_format;
+			char	   *schema;
+			char	   *fmt;
+			Oid			arg_types[1];
+			Oid			handler = InvalidOid;
 
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
+
+			qualified_format = stringToQualifiedNameList(format, NULL);
+			DeconstructQualifiedName(qualified_format, &schema, &fmt);
+			if (!schema || strcmp(schema, "pg_catalog") == 0)
 			{
-				List	   *qualified_format;
-				Oid			arg_types[1];
-				Oid			handler = InvalidOid;
-
-				qualified_format = stringToQualifiedNameList(fmt, NULL);
-				arg_types[0] = INTERNALOID;
-				handler = LookupFuncName(qualified_format, 1,
-										 arg_types, true);
-				if (!OidIsValid(handler))
-					ereport(ERROR,
-							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-							 errmsg("COPY format \"%s\" not recognized", fmt),
-							 parser_errposition(pstate, defel->location)));
-
-				/* check that handler has correct return type */
-				if (get_func_rettype(handler) != COPY_HANDLEROID)
-					ereport(ERROR,
-							(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-							 errmsg("function %s must return type %s",
-									fmt, "copy_handler"),
-							 parser_errposition(pstate, defel->location)));
-
-				opts_out->handler = handler;
+				if (strcmp(fmt, "csv") == 0)
+					opts_out->csv_mode = true;
+				else if (strcmp(fmt, "binary") == 0)
+					opts_out->binary = true;
 			}
+
+			arg_types[0] = INTERNALOID;
+			handler = LookupFuncName(qualified_format, 1,
+									 arg_types, true);
+			if (!OidIsValid(handler))
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+						 errmsg("COPY format \"%s\" not recognized", format),
+						 parser_errposition(pstate, defel->location)));
+
+			/* check that handler has correct return type */
+			if (get_func_rettype(handler) != COPY_HANDLEROID)
+				ereport(ERROR,
+						(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+						 errmsg("function %s must return type %s",
+								format, "copy_handler"),
+						 parser_errposition(pstate, defel->location)));
+
+			opts_out->handler = handler;
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -1040,3 +1044,36 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+Datum
+copy_text_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineText);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineText);
+}
+
+Datum
+copy_csv_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineCSV);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineCSV);
+}
+
+Datum
+copy_binary_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineBinary);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineBinary);
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 91f44193abf..7244eb6368a 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -45,6 +45,7 @@
 #include "rewrite/rewriteHandler.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/portal.h"
@@ -128,7 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
  */
 
 /* text format */
-static const CopyFromRoutine CopyFromRoutineText = {
+const CopyFromRoutine CopyFromRoutineText = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -137,7 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 };
 
 /* CSV format */
-static const CopyFromRoutine CopyFromRoutineCSV = {
+const CopyFromRoutine CopyFromRoutineCSV = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -146,7 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 };
 
 /* binary format */
-static const CopyFromRoutine CopyFromRoutineBinary = {
+const CopyFromRoutine CopyFromRoutineBinary = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
@@ -158,28 +159,23 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
-
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyFromRoutine))
-			ereport(ERROR,
-					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
-							get_namespace_name(get_func_namespace(opts->handler)),
-							get_func_name(opts->handler))));
-		return castNode(CopyFromRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
 	/* default is text */
-	return &CopyFromRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(true));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyFromRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
+						get_namespace_name(get_func_namespace(handler)),
+						get_func_name(handler))));
+	return castNode(CopyFromRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 23cbdad184c..b244167a568 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -32,6 +32,7 @@
 #include "pgstat.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/rel.h"
@@ -89,7 +90,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
  */
 
 /* text format */
-static const CopyToRoutine CopyToRoutineText = {
+const CopyToRoutine CopyToRoutineText = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -98,7 +99,7 @@ static const CopyToRoutine CopyToRoutineText = {
 };
 
 /* CSV format */
-static const CopyToRoutine CopyToRoutineCSV = {
+const CopyToRoutine CopyToRoutineCSV = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -107,7 +108,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 };
 
 /* binary format */
-static const CopyToRoutine CopyToRoutineBinary = {
+const CopyToRoutine CopyToRoutineBinary = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
@@ -119,28 +120,23 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
-
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyToRoutine))
-			ereport(ERROR,
-					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
-							get_namespace_name(get_func_namespace(opts->handler)),
-							get_func_name(opts->handler))));
-		return castNode(CopyToRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
 	/* default is text */
-	return &CopyToRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(false));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
+						get_namespace_name(get_func_namespace(handler)),
+						get_func_name(handler))));
+	return castNode(CopyToRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 79b5a36088c..09bacb80084 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -12485,4 +12485,15 @@
   proargtypes => 'int4',
   prosrc => 'gist_stratnum_common' },
 
+# COPY handlers
+{ oid => '8100', descr => 'text COPY FORMAT handler',
+  proname => 'text', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_text_handler' },
+{ oid => '8101', descr => 'csv COPY FORMAT handler',
+  proname => 'csv', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_csv_handler' },
+{ oid => '8102', descr => 'binary COPY FORMAT handler',
+  proname => 'binary', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_binary_handler' },
+
 ]
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 6df1f8a3b9b..4525261fcc4 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Oid			handler;		/* handler function for custom format routine */
+	Oid			handler;		/* handler function */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to]_internal.h */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index af425cf5fd9..abeccf85c1c 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -197,4 +197,8 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineText;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineCSV;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineBinary;
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 14ee0f50588..1bd83fa7f14 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -83,4 +83,8 @@ typedef struct CopyToStateData
 	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineText;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineCSV;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineBinary;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/builtin.out b/src/test/modules/test_copy_format/expected/builtin.out
new file mode 100644
index 00000000000..11b1053c84e
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/builtin.out
@@ -0,0 +1,34 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- public.text must not be used
+COPY public.test FROM stdin WITH (FORMAT text);
+COPY public.test TO stdout WITH (FORMAT text);
+1	2	3
+12	34	56
+123	456	789
+COPY public.test FROM stdin WITH (FORMAT 'pg_catalog.text');
+COPY public.test TO stdout WITH (FORMAT 'pg_catalog.text');
+1	2	3
+12	34	56
+123	456	789
+-- public.csv must not be used
+COPY public.test FROM stdin WITH (FORMAT csv);
+COPY public.test TO stdout WITH (FORMAT csv);
+1,2,3
+12,34,56
+123,456,789
+COPY public.test FROM stdin WITH (FORMAT 'pg_catalog.csv');
+COPY public.test TO stdout WITH (FORMAT 'pg_catalog.csv');
+1,2,3
+12,34,56
+123,456,789
+-- public.binary must not be used
+\getenv abs_builddir PG_ABS_BUILDDIR
+\set filename :abs_builddir '/results/binary.data'
+COPY public.test TO :'filename' WITH (FORMAT binary);
+COPY public.test FROM :'filename' WITH (FORMAT binary);
+COPY public.test TO :'filename' WITH (FORMAT 'pg_catalog.binary');
+COPY public.test FROM :'filename' WITH (FORMAT 'pg_catalog.binary');
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
index 8010659585b..86ba610d4ff 100644
--- a/src/test/modules/test_copy_format/meson.build
+++ b/src/test/modules/test_copy_format/meson.build
@@ -27,6 +27,7 @@ tests += {
   'bd': meson.current_build_dir(),
   'regress': {
     'sql': [
+      'builtin',
       'invalid',
       'no_schema',
       'schema',
diff --git a/src/test/modules/test_copy_format/sql/builtin.sql b/src/test/modules/test_copy_format/sql/builtin.sql
new file mode 100644
index 00000000000..2d24069b538
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/builtin.sql
@@ -0,0 +1,30 @@
+CREATE EXTENSION test_copy_format;
+CREATE TABLE public.test (a smallint, b integer, c bigint);
+INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+-- public.text must not be used
+COPY public.test FROM stdin WITH (FORMAT text);
+\.
+COPY public.test TO stdout WITH (FORMAT text);
+COPY public.test FROM stdin WITH (FORMAT 'pg_catalog.text');
+\.
+COPY public.test TO stdout WITH (FORMAT 'pg_catalog.text');
+
+-- public.csv must not be used
+COPY public.test FROM stdin WITH (FORMAT csv);
+\.
+COPY public.test TO stdout WITH (FORMAT csv);
+COPY public.test FROM stdin WITH (FORMAT 'pg_catalog.csv');
+\.
+COPY public.test TO stdout WITH (FORMAT 'pg_catalog.csv');
+
+-- public.binary must not be used
+\getenv abs_builddir PG_ABS_BUILDDIR
+\set filename :abs_builddir '/results/binary.data'
+COPY public.test TO :'filename' WITH (FORMAT binary);
+COPY public.test FROM :'filename' WITH (FORMAT binary);
+COPY public.test TO :'filename' WITH (FORMAT 'pg_catalog.binary');
+COPY public.test FROM :'filename' WITH (FORMAT 'pg_catalog.binary');
+
+DROP TABLE public.test;
+DROP EXTENSION test_copy_format;
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
index c1a137181f8..bfa1900e828 100644
--- a/src/test/modules/test_copy_format/test_copy_format--1.0.sql
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -22,3 +22,18 @@ CREATE FUNCTION test_copy_format_wrong_return_value(internal)
 	RETURNS copy_handler
 	AS 'MODULE_PATHNAME', 'test_copy_format_wrong_return_value'
 	LANGUAGE C;
+
+CREATE FUNCTION text(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION csv(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION binary(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
-- 
2.47.2

v39-0005-Add-document-how-to-write-a-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From e35257a1f7b9ae8aec73c4cbf41428f7acc10823 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 19 Mar 2025 11:46:34 +0900
Subject: [PATCH v39 5/5] Add document how to write a COPY handler

This is WIP because we haven't decided our API yet.

Co-authored-by: David G. Johnston <david.g.johnston@gmail.com>
---
 doc/src/sgml/copy-handler.sgml | 394 +++++++++++++++++++++++++++++++++
 doc/src/sgml/filelist.sgml     |   1 +
 doc/src/sgml/postgres.sgml     |   1 +
 src/include/commands/copyapi.h |   9 +-
 4 files changed, 401 insertions(+), 4 deletions(-)
 create mode 100644 doc/src/sgml/copy-handler.sgml

diff --git a/doc/src/sgml/copy-handler.sgml b/doc/src/sgml/copy-handler.sgml
new file mode 100644
index 00000000000..5bc87d16662
--- /dev/null
+++ b/doc/src/sgml/copy-handler.sgml
@@ -0,0 +1,394 @@
+<!-- doc/src/sgml/copy-handler.sgml -->
+
+<chapter id="copy-handler">
+ <title>Writing a Copy Handler</title>
+
+ <indexterm zone="copy-handler">
+  <primary><literal>COPY</literal> handler</primary>
+ </indexterm>
+
+ <para>
+  <productname>PostgreSQL</productname> supports
+  custom <link linkend="sql-copy"><literal>COPY</literal></link> handlers;
+  adding additional <replaceable>format_name</replaceable> options to
+  the <literal>FORMAT</literal> clause.
+ </para>
+
+ <para>
+  At the SQL level, a copy handler method is represented by a single SQL
+  function (see <xref linkend="sql-createfunction"/>), typically implemented in
+  C, having the signature
+<synopsis>
+<replaceable>format_name</replaceable>(internal) RETURNS <literal>copy_handler</literal>
+</synopsis>
+  The function's name is then accepted as a
+  valid <replaceable>format_name</replaceable>. The return
+  pseudo-type <literal>copy_handler</literal> informs the system that this
+  function needs to be registered as a copy handler.
+  The <type>internal</type> argument is a dummy that prevents this function
+  from being called directly from an SQL command. As the handler
+  implementation must be server-lifetime immutable; this SQL function's
+  volatility should be marked immutable. The <literal>link_symbol</literal>
+  for this function is the name of the implementation function, described
+  next.
+ </para>
+
+ <para>
+  The implementation function signature expected for the function named
+  in the <literal>link_symbol</literal> is:
+<synopsis>
+Datum
+<replaceable>copy_format_handler</replaceable>(PG_FUNCTION_ARGS)
+</synopsis>
+  The convention for the name is to replace the word
+  <replaceable>format</replaceable> in the placeholder above with the value given
+  to <replaceable>format_name</replaceable> in the SQL function.
+  The first argument is a <type>boolean</type> that indicates whether the handler
+  must provide a pointer to its implementation for <literal>COPY FROM</literal>
+  (a <type>CopyFromRoutine *</type>). If <literal>false</literal>, the handler
+  must provide a pointer to its implementation of <literal>COPY TO</literal>
+  (a <type>CopyToRoutine *</type>). These structs are declared in
+  <filename>src/include/commands/copyapi.h</filename>.
+ </para>
+
+ <para>
+  The structs hold pointers to implementation functions for initializing,
+  starting, processing rows, and ending a copy operation. The specific
+  structures vary a bit between <literal>COPY FROM</literal> and
+  <literal>COPY TO</literal> so the next two sections describes each
+  in detail.
+ </para>
+
+ <sect1 id="copy-handler-from">
+  <title>Copy From Handler</title>
+
+  <para>
+   The opening to this chapter describes how the executor will call the main
+   handler function with, in this case,
+   a <type>boolean</type> <literal>true</literal>, and expect to receive a
+   <type>CopyFromRoutine *</type> <type>Datum</type>. This section describes
+   the components of the <type>CopyFromRoutine</type> struct.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromInFunc(CopyFromState cstate,
+               Oid atttypid,
+               FmgrInfo *finfo,
+               Oid *typioparam);
+</programlisting>
+
+   This sets input function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY FROM</literal>. If
+   this <literal>COPY</literal> handler doesn't use any input functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid *typioparam</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to define the OID of the type to
+       pass to the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromStart(CopyFromState cstate,
+              TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY FROM</literal>. This function is called once at
+   the beginning of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data needs to be
+       copied. This can be used for any initialization steps required by a
+       format.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyFromOneRow(CopyFromState cstate,
+               ExprContext *econtext,
+               Datum *values,
+               bool *nulls);
+</programlisting>
+
+   This reads one row from the source and fill <literal>values</literal>
+   and <literal>nulls</literal>. If there is one or more tuples to be read,
+   this must return <literal>true</literal>. If there are no more tuples to
+   read, this must return <literal>false</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>ExprContext *econtext</literal></term>
+     <listitem>
+      <para>
+       This is used to evaluate default expression for each column that is
+       either not read from the file or is using
+       the <literal>DEFAULT</literal> option of <literal>COPY
+       FROM</literal>. It is <literal>NULL</literal> if no default values are
+       used.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Datum *values</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store read tuples.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>bool *nulls</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store whether the read columns
+       are <literal>NULL</literal> or not.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromEnd(CopyFromState cstate);
+</programlisting>
+
+   This ends a <literal>COPY FROM</literal>. This function is called once at
+   the end of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyFromStateGetData() and CopyFromSkipErrowRow()?
+  </para>
+ </sect1>
+
+ <sect1 id="copy-handler-to">
+  <title>Copy To Handler</title>
+
+  <para>
+   The <literal>COPY</literal> handler function for <literal>COPY
+   TO</literal> returns a <type>CopyToRoutine</type> struct containing
+   pointers to the functions described below. All functions are required.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToOutFunc(CopyToState cstate,
+              Oid atttypid,
+              FmgrInfo *finfo);
+</programlisting>
+
+   This sets output function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY TO</literal>. If
+   this <literal>COPY</literal> handler doesn't use any output functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the output function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToStart(CopyToState cstate,
+            TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY TO</literal>. This function is called once at
+   the beginning of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data is read.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyToOneRow(CopyToState cstate,
+             TupleTableSlot *slot);
+</programlisting>
+
+   This writes one row stored in <literal>slot</literal> to the destination.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleTableSlot *slot</literal></term>
+     <listitem>
+      <para>
+       This is used to get row to be written.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToEnd(CopyToState cstate);
+</programlisting>
+
+   This ends a <literal>COPY TO</literal>. This function is called once at
+   the end of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyToStateFlush()?
+  </para>
+ </sect1>
+</chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index 25fb99cee69..1fd6d32d5ec 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -107,6 +107,7 @@
 <!ENTITY storage    SYSTEM "storage.sgml">
 <!ENTITY transaction     SYSTEM "xact.sgml">
 <!ENTITY tablesample-method SYSTEM "tablesample-method.sgml">
+<!ENTITY copy-handler SYSTEM "copy-handler.sgml">
 <!ENTITY wal-for-extensions SYSTEM "wal-for-extensions.sgml">
 <!ENTITY generic-wal SYSTEM "generic-wal.sgml">
 <!ENTITY custom-rmgr SYSTEM "custom-rmgr.sgml">
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index af476c82fcc..8ba319ae2df 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -254,6 +254,7 @@ break is not needed in a wider output rendering.
   &plhandler;
   &fdwhandler;
   &tablesample-method;
+  &copy-handler;
   &custom-scan;
   &geqo;
   &tableam;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 500ece7d5bb..24710cb667a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -28,10 +28,10 @@ typedef struct CopyToRoutine
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the output function.
-	 *
-	 * 'atttypid' is the OID of data type used by the relation's attribute.
 	 */
 	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
 								  FmgrInfo *finfo);
@@ -70,12 +70,13 @@ typedef struct CopyFromRoutine
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the input function.
 	 *
 	 * 'typioparam' can be optionally filled to define the OID of the type to
-	 * pass to the input function.'atttypid' is the OID of data type used by
-	 * the relation's attribute.
+	 * pass to the input function.
 	 */
 	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
 								   FmgrInfo *finfo, Oid *typioparam);
-- 
2.47.2

#254Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#253)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 26, 2025 at 8:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

We need more regression tests for handling the given format name. For example,

- more various input patterns.
- a function with the specified format name exists but it returns an
unexpected Node.
- looking for a handler function in a different namespace.
etc.

I've added the following tests:

* Wrong input type handler without namespace
* Wrong input type handler with namespace
* Wrong return type handler without namespace
* Wrong return type handler with namespace
* Wrong return value (Copy*Routine isn't returned) handler without namespace
* Wrong return value (Copy*Routine isn't returned) handler with namespace
* Nonexistent handler
* Invalid qualified name
* Valid handler without namespace and without search_path
* Valid handler without namespace and with search_path
* Valid handler with namespace

Probably we can merge these newly added four files into one .sql file?

Also we need to add some comments to describe what these queries test.
For example, it's not clear to me at a glance what queries in
no-schema.sql are going to test as there is no comment there.

0002 also includes this.

I think that we should accept qualified names too as the format name
like tablesample does. That way, different extensions implementing the
same format can be used.

Implemented. It's implemented after parsing SQL. Is it OK?
(It seems that tablesample does it in parsing SQL.)

I think it's okay.

One problem in the following chunk I can see is:

+           qualified_format = stringToQualifiedNameList(format, NULL);
+           DeconstructQualifiedName(qualified_format, &schema, &fmt);
+           if (!schema || strcmp(schema, "pg_catalog") == 0)
+           {
+               if (strcmp(fmt, "csv") == 0)
+                   opts_out->csv_mode = true;
+               else if (strcmp(fmt, "binary") == 0)
+                   opts_out->binary = true;
+           }

Non-qualified names depend on the search_path value so it's not
necessarily a built-in format. If the user specifies 'csv' with
seach_patch = 'myschema, pg_catalog', the COPY command unnecessarily
sets csv_mode true. I think we can instead check if the retrieved
handler function's OID matches the built-in formats' ones. Also, it's
weired to me that cstate has csv_mode and binary fields even though
the format should have already been known by the callback functions.

Regarding the documentation for the existing options, it says "...
only when not using XXX format." some places, where XXX can be
replaced with binary or CSV. Once we support custom formats, 'non-CSV
mode' would actually include custom formats as well, so we need to
update the description too.

---
+static void
+CopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+        ereport(NOTICE, (errmsg("CopyToOneRow: tts_nvalid=%u",
slot->tts_nvalid)));
+}

Similar to the above comment, the field name 'tts_nvalid' might also
be changed in the future, let's use another name.

Hmm. If the field name is changed, we need to change this
code.

Yes, but if we use independe name in the NOTICE message we would not
need to update the expected files.

---
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+        CopySendEndOfRow(cstate);
+}

Is there any reason to use a different name for public functions?

In this patch set, I use "CopyFrom"/"CopyTo" prefixes for
public APIs for custom COPY FORMAT handler extensions. It
will help understanding related APIs. Is it strange in
PostgreSQL?

I see your point. Probably we need to find a better name as the name
CopyToStateFlush doesn't sound well like this API should be called
only once at the end of a row (IOW user might try to call it multiple
times to 'flush' the state while processing a row). How about
CopyToEndOfRow()?

---
+        /* For custom format implementation */
+        void      *opaque;                     /* private space */

How about renaming 'private'?

We should not use "private" because it's a keyword in
C++. If we use "private" here, we can't include this file
from C++ code.

Understood.

---
I've not reviewed the documentation patch yet but I think the patch
seems to miss the updates to the description of the FORMAT option in
the COPY command section.

I defer this for now. We can revisit the last documentation
patch after we finalize our API. (Or could someone help us?)

I think we can reorganize the patch set as follows:

1. Create copyto_internal.h and change COPY_XXX to COPY_SOURCE_XXX and
COPY_DEST_XXX accordingly.
2. Support custom format for both COPY TO and COPY FROM.
3. Expose necessary helper functions such as CopySendEndOfRow().
4. Add CopyFromSkipErrorRow().
5. Documentation.

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

Can we merge 0002 and 0004?

We can merge 0001 quickly, right?

I don't think it makes sense to push only 0001 as it's a completely
preliminary patch for subsequent patches. It would be prudent to push
it once other patches are ready too.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#255David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#254)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Friday, March 28, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

One problem in the following chunk I can see is:

+           qualified_format = stringToQualifiedNameList(format, NULL);
+           DeconstructQualifiedName(qualified_format, &schema, &fmt);
+           if (!schema || strcmp(schema, "pg_catalog") == 0)
+           {
+               if (strcmp(fmt, "csv") == 0)
+                   opts_out->csv_mode = true;
+               else if (strcmp(fmt, "binary") == 0)
+                   opts_out->binary = true;
+           }

Non-qualified names depend on the search_path value so it's not
necessarily a built-in format. If the user specifies 'csv' with
seach_patch = 'myschema, pg_catalog', the COPY command unnecessarily
sets csv_mode true. I think we can instead check if the retrieved
handler function's OID matches the built-in formats' ones. Also, it's
weired to me that cstate has csv_mode and binary fields even though
the format should have already been known by the callback functions.

I considered it a feature that a schema-less reference to text, csv, or
binary always resolves to the core built-in handlers. As does an
unspecified format default of text.

To use an extension that chooses to override that format name would require
schema qualification.

David J.

#256Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#254)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBKMNsO+b6wahb6847xwFci1JCfV+JykoMziVgiFxB6cw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 28 Mar 2025 22:37:03 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've added the following tests:

* Wrong input type handler without namespace
* Wrong input type handler with namespace
* Wrong return type handler without namespace
* Wrong return type handler with namespace
* Wrong return value (Copy*Routine isn't returned) handler without namespace
* Wrong return value (Copy*Routine isn't returned) handler with namespace
* Nonexistent handler
* Invalid qualified name
* Valid handler without namespace and without search_path
* Valid handler without namespace and with search_path
* Valid handler with namespace

Probably we can merge these newly added four files into one .sql file?

I know that src/test/regress/sql/ uses this style (one .sql
file includes many test patterns in one large category). I
understand that the style is preferable in
src/test/regress/sql/ because src/test/regress/sql/ has
tests for many categories.

But do we need to follow the style in
src/test/modules/*/sql/ too? If we use the style in
src/test/modules/*/sql/, we need to have only one .sql in
src/test/modules/*/sql/ because src/test/modules/*/ are for
each category.

And the current .sql per sub-category style is easy to debug
(at least for me). For example, if we try qualified name
cases on debugger, we can use "\i sql/schema.sql" instead of
extracting target statements from .sql that includes many
unrelated statements. (Or we can use "\i sql/all.sql" and
many GDB "continue"s.)

BTW, it seems that src/test/modules/test_ddl_deparse/sql/
uses .sql per sub-category style. Should we use one .sql
file for sql/test/modules/test_copy_format/sql/? If it's
required for merging this patch set, I'll do it.

Also we need to add some comments to describe what these queries test.
For example, it's not clear to me at a glance what queries in
no-schema.sql are going to test as there is no comment there.

Hmm. You refer no_schema.sql in 0002, right?

----
CREATE EXTENSION test_copy_format;
CREATE TABLE public.test (a smallint, b integer, c bigint);
INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
DROP TABLE public.test;
DROP EXTENSION test_copy_format;
----

In general, COPY FORMAT tests focus on "COPY FROM WITH
(FORMAT ...)" and "COPY TO WITH (FORMAT ...)". And the file
name "no_schema" shows that it doesn't use qualified
name. Based on this, I feel that the above content is very
straightforward without any comment.

What should we add as comments? For example, do we need the
following comments?

----
-- This extension includes custom COPY handler: test_copy_format
CREATE EXTENSION test_copy_format;
-- Test data
CREATE TABLE public.test (a smallint, b integer, c bigint);
INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
-- Use custom COPY handler, test_copy_format, without
-- schema for FROM.
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
-- Use custom COPY handler, test_copy_format, without
-- schema for TO.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
-- Cleanup
DROP TABLE public.test;
DROP EXTENSION test_copy_format;
----

One problem in the following chunk I can see is:

+           qualified_format = stringToQualifiedNameList(format, NULL);
+           DeconstructQualifiedName(qualified_format, &schema, &fmt);
+           if (!schema || strcmp(schema, "pg_catalog") == 0)
+           {
+               if (strcmp(fmt, "csv") == 0)
+                   opts_out->csv_mode = true;
+               else if (strcmp(fmt, "binary") == 0)
+                   opts_out->binary = true;
+           }

Non-qualified names depend on the search_path value so it's not
necessarily a built-in format. If the user specifies 'csv' with
seach_patch = 'myschema, pg_catalog', the COPY command unnecessarily
sets csv_mode true.

I think that we should always use built-in COPY handlers for
(not-qualified) "text", "csv" and "binary" for
compatibility. If we allow custom COPY handlers for
(not-qualified) "text", "csv" and "binary", pg_dump or
existing dump may be broken. Because we must use the same
COPY handler when we dump (COPY TO) and we restore (COPY
FROM).

BTW, the current implementation always uses
pg_catalog.{text,csv,binary} for (not-qualified) "text",
"csv" and "binary" even when there are
myschema.{text,csv,binary}. See
src/test/modules/test_copy_format/sql/builtin.sql. But I
haven't looked into it why...

I think we can instead check if the retrieved
handler function's OID matches the built-in formats' ones.

I agree that the approach is clear than the current
implementation. I'll use it when I create the next patch
set.

Also, it's
weired to me that cstate has csv_mode and binary fields even though
the format should have already been known by the callback functions.

You refer CopyFomratOptions::{csv_mode,binary} not
Copy{To,From}StateData, right? And you suggest that we
should replace all opts.csv_mode and opts.binary with
opts.handler == F_CSV and opts.handler == F_BINARY, right?

We can do it but I suggest that we do it as a refactoring
(or cleanup) in a separated patch for easy to review.

Regarding the documentation for the existing options, it says "...
only when not using XXX format." some places, where XXX can be
replaced with binary or CSV. Once we support custom formats, 'non-CSV
mode' would actually include custom formats as well, so we need to
update the description too.

I agree with you.

---
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+        CopySendEndOfRow(cstate);
+}

Is there any reason to use a different name for public functions?

In this patch set, I use "CopyFrom"/"CopyTo" prefixes for
public APIs for custom COPY FORMAT handler extensions. It
will help understanding related APIs. Is it strange in
PostgreSQL?

I see your point. Probably we need to find a better name as the name
CopyToStateFlush doesn't sound well like this API should be called
only once at the end of a row (IOW user might try to call it multiple
times to 'flush' the state while processing a row). How about
CopyToEndOfRow()?

CopyToStateFlush() can be called multiple times in a row. It
can also be called only once with multiple rows. Because it
just flushes the current buffer.

Existing CopySendEndOfRow() is called at the end of a
row. (Buffer is flushed at the end of row.) So I think that
the "EndOfRow" was chosen.

Some custom COPY handlers may not be row based. For example,
Apache Arrow COPY handler doesn't flush buffer for each row.
So, we should provide "flush" API not "end of row" API for
extensibility.

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

Can we merge 0002 and 0004?

Can we do it when we merge this patch set if it's still
desirable at the time? Because:

* I think that separated 0002 and 0004 patches are easier to
review than squashed 0002 and 0004 patch.
* I still think that someone may don't like defining COPY
handlers for built-in formats. If we don't define COPY
handlers for built-in formats finally, we can just drop
0004.

We can merge 0001 quickly, right?

I don't think it makes sense to push only 0001 as it's a completely
preliminary patch for subsequent patches. It would be prudent to push
it once other patches are ready too.

Hmm. I feel that 0001 is a refactoring category patch like
merged patches. In general, distinct enum value names are
easier to understand.

BTW, does the "other patches" include the documentation
patch...?

Thanks,
--
kou

#257David G. Johnston
david.g.johnston@gmail.com
In reply to: Sutou Kouhei (#256)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Mar 29, 2025 at 1:57 AM Sutou Kouhei <kou@clear-code.com> wrote:

* I still think that someone may don't like defining COPY
handlers for built-in formats. If we don't define COPY
handlers for built-in formats finally, we can just drop
0004.

We should (and usually do) dog-food APIs when reasonable and this situation
seems quite reasonable. I'd push back quite a bit about publishing this
without any internal code leveraging it.

We can merge 0001 quickly, right?

I don't think it makes sense to push only 0001 as it's a completely
preliminary patch for subsequent patches. It would be prudent to push
it once other patches are ready too.

Hmm. I feel that 0001 is a refactoring category patch like
merged patches. In general, distinct enum value names are
easier to understand.

I'm for pushing 0001. We've had copyfrom_internal.h for a while now and
this seems like a simple refactor to make that area of the code cleaner via
symmetry.

David J.

#258David G. Johnston
david.g.johnston@gmail.com
In reply to: Sutou Kouhei (#253)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 26, 2025 at 8:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

I don't think this module should be responsible for testing the validity of
"qualified names in a string literal" behavior. Having some of the tests
use a schema qualification, and I'd suggest explicit
double-quoting/case-folding, wouldn't hurt just to demonstrate it's
possible, and how extensions should be referenced, but definitely don't
need tests to prove the broken cases are indeed broken. This relies on an
existing API that has its own tests. It is definitely pointlessly
redundant to have 6 tests that only differ from 6 other tests in their use
of a schema qualification.

I prefer keeping 0002 and 0004 separate. In particular, keeping the design
choice of "unqualified internal format names ignore search_path" should
stand out as its own commit.

David J.

#259Sutou Kouhei
kou@clear-code.com
In reply to: David G. Johnston (#258)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAKFQuwYF7VnYcS9dkfvdzt-dgftMB1DV0bjRcNC8-4iYGS+gjw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 29 Mar 2025 09:48:22 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

I don't think this module should be responsible for testing the validity of
"qualified names in a string literal" behavior. Having some of the tests
use a schema qualification, and I'd suggest explicit
double-quoting/case-folding, wouldn't hurt just to demonstrate it's
possible, and how extensions should be referenced, but definitely don't
need tests to prove the broken cases are indeed broken. This relies on an
existing API that has its own tests. It is definitely pointlessly
redundant to have 6 tests that only differ from 6 other tests in their use
of a schema qualification.

You suggest the followings, right?

1. Add tests for "Schema.Name" with mixed cases
2. Remove the following 6 tests in
src/test/modules/test_copy_format/sql/invalid.sql

----
COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
COPY public.test FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
COPY public.test TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
----

because we have the following 6 tests:

----
SET search_path = public,test_schema;
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_input_type');
COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_input_type');
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_type');
COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_type');
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format_wrong_return_value');
COPY public.test TO stdout WITH (FORMAT 'test_copy_format_wrong_return_value');
RESET search_path;
----
3. Remove the following tests because the behavior must be
tested in other places:

----
COPY public.test FROM stdin WITH (FORMAT 'nonexistent');
COPY public.test TO stdout WITH (FORMAT 'nonexistent');
COPY public.test FROM stdin WITH (FORMAT 'invalid.qualified.name');
COPY public.test TO stdout WITH (FORMAT 'invalid.qualified.name');
----

Does it miss something?

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

Thanks,
--
kou

#260David G. Johnston
david.g.johnston@gmail.com
In reply to: Sutou Kouhei (#253)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Mar 26, 2025 at 8:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

---
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+        .type = T_CopyFromRoutine,
+        .CopyFromInFunc = CopyFromInFunc,
+        .CopyFromStart = CopyFromStart,
+        .CopyFromOneRow = CopyFromOneRow,
+        .CopyFromEnd = CopyFromEnd,
+};

In trying to document the current API I'm strongly disliking it. Namely,
the amount of internal code an extension needs to care about/copy-paste to
create a working handler.

Presently, pg_type defines text and binary I/O routines and the text/csv
formats use the text I/O while binary uses binary I/O - for all
attributes. The CopyFromInFunc API allows for each attribute to somehow
have its I/O format individualized. But I don't see how that is practical
or useful, and it adds burden on API users.

I suggest we remove both .CopyFromInFunc and .CopyFromStart/End and add a
property to CopyFromRoutine (.ioMode?) with values of either Copy_IO_Text
or Copy_IO_Binary and then just branch to either:

CopyFromTextLikeInFunc & CopyFromTextLikeStart/End
or
CopyFromBinaryInFunc & CopyFromStart/End

So, in effect, the only method an extension needs to write is converting
to/from the 'serialized' form to the text/binary form (text being near
unanimous).

In a similar manner, the amount of boilerplate within CopyFromOneRow seems
undesirable from an API perspective.

cstate->cur_attname = NameStr(att->attname);
cstate->cur_attval = string;

if (string != NULL)
nulls[m] = false;

if (cstate->defaults[m])
{
/* We must have switched into the per-tuple memory context */
Assert(econtext != NULL);
Assert(CurrentMemoryContext == econtext->ecxt_per_tuple_memory);

values[m] = ExecEvalExpr(defexprs[m], econtext, &nulls[m]);
}

/*
* If ON_ERROR is specified with IGNORE, skip rows with soft errors
*/
else if (!InputFunctionCallSafe(&in_functions[m],
string,
typioparams[m],
att->atttypmod,
(Node *) cstate->escontext,
&values[m]))
{
CopyFromSkipErrorRow(cstate);
return true;
}

cstate->cur_attname = NULL;
cstate->cur_attval = NULL;

It seems to me that CopyFromOneRow could simply produce a *string
collection,
one cell per attribute, and NextCopyFrom could do all of the above on a
for-loop over *string

The pg_type and pg_proc catalogs are not extensible so the API can and
should be limited to
producing the, usually text, values that are ready to be passed into the
text I/O routines and all
the work to find and use types and functions left in the template code.

I haven't looked at COPY TO but I am expecting much the same. The API
should simply receive
the content of the type I/O output routine (binary or text as it dictates)
for each output attribute, by
row, and be expected to take those values and produce a final output from
them.

David J.

#261Masahiko Sawada
sawada.mshk@gmail.com
In reply to: David G. Johnston (#258)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Mar 29, 2025 at 9:49 AM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Wed, Mar 26, 2025 at 8:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

I prefer keeping 0002 and 0004 separate. In particular, keeping the design choice of "unqualified internal format names ignore search_path" should stand out as its own commit.

What is the point of having separate commits for already-agreed design
choices? I guess that it would make it easier to revert that decision.
But I think it makes more sense that if we agree with "unqualified
internal format names ignore search_path" the original commit includes
that decision and describes it in the commit message. If we want to
change that design based on the discussion later on, we can have a
separate commit that makes that change and has the link to the
discussion.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#262Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#256)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, Mar 29, 2025 at 1:57 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBKMNsO+b6wahb6847xwFci1JCfV+JykoMziVgiFxB6cw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 28 Mar 2025 22:37:03 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've added the following tests:

* Wrong input type handler without namespace
* Wrong input type handler with namespace
* Wrong return type handler without namespace
* Wrong return type handler with namespace
* Wrong return value (Copy*Routine isn't returned) handler without namespace
* Wrong return value (Copy*Routine isn't returned) handler with namespace
* Nonexistent handler
* Invalid qualified name
* Valid handler without namespace and without search_path
* Valid handler without namespace and with search_path
* Valid handler with namespace

Probably we can merge these newly added four files into one .sql file?

I know that src/test/regress/sql/ uses this style (one .sql
file includes many test patterns in one large category). I
understand that the style is preferable in
src/test/regress/sql/ because src/test/regress/sql/ has
tests for many categories.

But do we need to follow the style in
src/test/modules/*/sql/ too? If we use the style in
src/test/modules/*/sql/, we need to have only one .sql in
src/test/modules/*/sql/ because src/test/modules/*/ are for
each category.

And the current .sql per sub-category style is easy to debug
(at least for me). For example, if we try qualified name
cases on debugger, we can use "\i sql/schema.sql" instead of
extracting target statements from .sql that includes many
unrelated statements. (Or we can use "\i sql/all.sql" and
many GDB "continue"s.)

BTW, it seems that src/test/modules/test_ddl_deparse/sql/
uses .sql per sub-category style. Should we use one .sql
file for sql/test/modules/test_copy_format/sql/? If it's
required for merging this patch set, I'll do it.

I'm not sure that the regression test queries are categorized in the
same way as in test_ddl_deparse. While the former have separate .sql
files for different types of inputs (valid inputs and invalid inputs
etc.) , which seems finer graind, the latter has .sql files for each
DDL command.

Most of the queries under test_copy_format/sql verifies the input
patterns of the FORMAT option. I find that the regression tests
included in that directory probably should focus on testing new
callback APIs and some regression tests for FORMAT option handling can
be moved into the normal regression test suite (e.g., in copy.sql or a
new file like copy_format.sql). IIUC testing for invalid input
patterns can be done even without creating artificial wrong handler
functions.

Also we need to add some comments to describe what these queries test.
For example, it's not clear to me at a glance what queries in
no-schema.sql are going to test as there is no comment there.

Hmm. You refer no_schema.sql in 0002, right?

----
CREATE EXTENSION test_copy_format;
CREATE TABLE public.test (a smallint, b integer, c bigint);
INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
DROP TABLE public.test;
DROP EXTENSION test_copy_format;
----

In general, COPY FORMAT tests focus on "COPY FROM WITH
(FORMAT ...)" and "COPY TO WITH (FORMAT ...)". And the file
name "no_schema" shows that it doesn't use qualified
name. Based on this, I feel that the above content is very
straightforward without any comment.

What should we add as comments? For example, do we need the
following comments?

----
-- This extension includes custom COPY handler: test_copy_format
CREATE EXTENSION test_copy_format;
-- Test data
CREATE TABLE public.test (a smallint, b integer, c bigint);
INSERT INTO public.test VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
-- Use custom COPY handler, test_copy_format, without
-- schema for FROM.
COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
-- Use custom COPY handler, test_copy_format, without
-- schema for TO.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');
-- Cleanup
DROP TABLE public.test;
DROP EXTENSION test_copy_format;
----

I'd like to see in the comment what the tests expect. Taking the
following queries as an example,

COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');

it would help readers understand the test case better if we have a
comment like for example:

-- Specify the custom format name without schema. We test if both
-- COPY TO and COPY FROM can find the correct handler function
-- in public schema.

One problem in the following chunk I can see is:

+           qualified_format = stringToQualifiedNameList(format, NULL);
+           DeconstructQualifiedName(qualified_format, &schema, &fmt);
+           if (!schema || strcmp(schema, "pg_catalog") == 0)
+           {
+               if (strcmp(fmt, "csv") == 0)
+                   opts_out->csv_mode = true;
+               else if (strcmp(fmt, "binary") == 0)
+                   opts_out->binary = true;
+           }

Non-qualified names depend on the search_path value so it's not
necessarily a built-in format. If the user specifies 'csv' with
seach_patch = 'myschema, pg_catalog', the COPY command unnecessarily
sets csv_mode true.

I think that we should always use built-in COPY handlers for
(not-qualified) "text", "csv" and "binary" for
compatibility. If we allow custom COPY handlers for
(not-qualified) "text", "csv" and "binary", pg_dump or
existing dump may be broken. Because we must use the same
COPY handler when we dump (COPY TO) and we restore (COPY
FROM).

I agreed.

BTW, the current implementation always uses
pg_catalog.{text,csv,binary} for (not-qualified) "text",
"csv" and "binary" even when there are
myschema.{text,csv,binary}. See
src/test/modules/test_copy_format/sql/builtin.sql. But I
haven't looked into it why...

Sorry, I don't follow that. IIUC test_copy_format extension doesn't
create a handler function in myschema schema, and SQLs in builtin.sql
seem to work as expected (specifying a non-qualified built-in format
unconditionally uses the built-in format).

Also, it's
weired to me that cstate has csv_mode and binary fields even though
the format should have already been known by the callback functions.

You refer CopyFomratOptions::{csv_mode,binary} not
Copy{To,From}StateData, right?

Yes. I referred to the wrong one.

And you suggest that we
should replace all opts.csv_mode and opts.binary with
opts.handler == F_CSV and opts.handler == F_BINARY, right?

We can do it but I suggest that we do it as a refactoring
(or cleanup) in a separated patch for easy to review.

I think that csv_mode and binary are used mostly in
ProcessCopyOptions() so probably we can use local variables for that.
I find there are two other places where to use csv_mode:
NextCopyFromRawFields() and CopyToTextLikeStart(). I think we can
simply check the handler function's OID there, or we can define macros
like COPY_FORMAT_IS_TEXT/CSV/BINARY checking the OID and use them
there.

---
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+        CopySendEndOfRow(cstate);
+}

Is there any reason to use a different name for public functions?

In this patch set, I use "CopyFrom"/"CopyTo" prefixes for
public APIs for custom COPY FORMAT handler extensions. It
will help understanding related APIs. Is it strange in
PostgreSQL?

I see your point. Probably we need to find a better name as the name
CopyToStateFlush doesn't sound well like this API should be called
only once at the end of a row (IOW user might try to call it multiple
times to 'flush' the state while processing a row). How about
CopyToEndOfRow()?

CopyToStateFlush() can be called multiple times in a row. It
can also be called only once with multiple rows. Because it
just flushes the current buffer.

Existing CopySendEndOfRow() is called at the end of a
row. (Buffer is flushed at the end of row.) So I think that
the "EndOfRow" was chosen.

Some custom COPY handlers may not be row based. For example,
Apache Arrow COPY handler doesn't flush buffer for each row.
So, we should provide "flush" API not "end of row" API for
extensibility.

Okay, understood.

We can merge 0001 quickly, right?

I don't think it makes sense to push only 0001 as it's a completely
preliminary patch for subsequent patches. It would be prudent to push
it once other patches are ready too.

Hmm. I feel that 0001 is a refactoring category patch like
merged patches. In general, distinct enum value names are
easier to understand.

Right, but the patches that have already been merged contributed to
speed up COPY commands, but 0001 patch also introduces
copyto_internal.h, which is not used by anyone in a case where the
custom copy format patch is not merged. Without adding
copyto_internal.h changing enum value names less makes sense to me.

BTW, does the "other patches" include the documentation
patch...?

I think that when pushing the main custom COPY format patch, we need
to include the documentation changes into it.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#263David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#261)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Mar 31, 2025 at 11:52 AM Masahiko Sawada <sawada.mshk@gmail.com>
wrote:

On Sat, Mar 29, 2025 at 9:49 AM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Wed, Mar 26, 2025 at 8:28 PM Sutou Kouhei <kou@clear-code.com> wrote:

The attached v39 patch set uses the followings:

0001: Create copyto_internal.h and change COPY_XXX to
COPY_SOURCE_XXX and COPY_DEST_XXX accordingly.
(Same as 1. in your suggestion)
0002: Support custom format for both COPY TO and COPY FROM.
(Same as 2. in your suggestion)
0003: Expose necessary helper functions such as CopySendEndOfRow()
and add CopyFromSkipErrorRow().
(3. + 4. in your suggestion)
0004: Define handler functions for built-in formats.
(Not included in your suggestion)
0005: Documentation. (WIP)
(Same as 5. in your suggestion)

I prefer keeping 0002 and 0004 separate. In particular, keeping the

design choice of "unqualified internal format names ignore search_path"
should stand out as its own commit.

What is the point of having separate commits for already-agreed design
choices? I guess that it would make it easier to revert that decision.
But I think it makes more sense that if we agree with "unqualified
internal format names ignore search_path" the original commit includes
that decision and describes it in the commit message. If we want to
change that design based on the discussion later on, we can have a
separate commit that makes that change and has the link to the
discussion.

Fair. Comment withdrawn. Though I was referring to the WIP patches; I
figured the final patch would squash this all together in any case.

David J.

#264Sutou Kouhei
kou@clear-code.com
In reply to: David G. Johnston (#260)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAKFQuwbhSssKTJyeYo9rn20zffV3L7wdQSbEQ8zwRfC=uXLkVA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 31 Mar 2025 10:05:34 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

The CopyFromInFunc API allows for each attribute to somehow
have its I/O format individualized. But I don't see how that is practical
or useful, and it adds burden on API users.

If an extension want to use I/O routines, it can use the
CopyFromInFunc API. Otherwise it can provide an empty
function.

For example,
https://github.com/MasahikoSawada/pg_copy_jsonlines/blob/master/copy_jsonlines.c
uses the CopyFromInFunc API but
https://github.com/kou/pg-copy-arrow/blob/main/copy_arrow.cc
uses an empty function for the CopyFromInFunc API.

The "it adds burden" means that "defining an empty function
is inconvenient", right? See also our past discussion for
this design:

/messages/by-id/ZbijVn9_51mljMAG@paquier.xyz

Keeping empty options does not strike as a bad idea, because this
forces extension developers to think about this code path rather than
just ignore it.

I suggest we remove both .CopyFromInFunc and .CopyFromStart/End and add a
property to CopyFromRoutine (.ioMode?) with values of either Copy_IO_Text
or Copy_IO_Binary and then just branch to either:

CopyFromTextLikeInFunc & CopyFromTextLikeStart/End
or
CopyFromBinaryInFunc & CopyFromStart/End

So, in effect, the only method an extension needs to write is converting
to/from the 'serialized' form to the text/binary form (text being near
unanimous).

I object this API. If we choose this API, we can create only
custom COPY formats that compatible with PostgreSQL's
text/binary form. For example, the above jsonlines format
and Apache Arrow format aren't implemented. It's meaningless
to introduce this custom COPY format mechanism with the
suggested API.

It seems to me that CopyFromOneRow could simply produce a *string
collection,
one cell per attribute, and NextCopyFrom could do all of the above on a
for-loop over *string

You suggest that we use a string collection instead of a
Datum collection in CopyFromOneRow() and convert a string
collection to a Datum collection in NextCopyFrom(), right?

I object this API. Because it has needless string <-> Datum
conversion overhead. For example,
https://github.com/MasahikoSawada/pg_copy_jsonlines/blob/master/copy_jsonlines.c
parses a JSON value to Datum. If we use this API, we need to
convert parsed Datum to string in an extension and
NextCopyFrom() re-converts the converted string to
Datum. It will slow down custom COPY format.

I want this custom COPY format feature for performance. So
APIs that require needless overhead for non text/csv/binary
formats isn't acceptable to me.

Thanks,
--
kou

#265Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#262)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDOcYah-nREv09BB3ZoB-k+Yf1XUfJcDMoq=LLvV1v75w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 31 Mar 2025 12:35:23 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Most of the queries under test_copy_format/sql verifies the input
patterns of the FORMAT option. I find that the regression tests
included in that directory probably should focus on testing new
callback APIs and some regression tests for FORMAT option handling can
be moved into the normal regression test suite (e.g., in copy.sql or a
new file like copy_format.sql). IIUC testing for invalid input
patterns can be done even without creating artificial wrong handler
functions.

Can we clarify what should we do for the next patch set
before we create the next patch set? Are the followings
correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
* We can do only 4 patterns in 16 patterns.
* Other tests in
src/test/modules/test_copy_format/sql/*.sql depend on
custom COPY handler for test. So we can't move to
src/test/regress/sql/copy.sql.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file

I'd like to see in the comment what the tests expect. Taking the
following queries as an example,

COPY public.test FROM stdin WITH (FORMAT 'test_copy_format');
\.
COPY public.test TO stdout WITH (FORMAT 'test_copy_format');

it would help readers understand the test case better if we have a
comment like for example:

-- Specify the custom format name without schema. We test if both
-- COPY TO and COPY FROM can find the correct handler function
-- in public schema.

I agree with you that the comment is useful when we use
src/test/modules/test_copy_format/sql/test_copy_format.sql
for all tests. (I feel that it's redundant when we use
no_schema.sql.) I'll add it when I create
test_copy_format.sql in the next patch set.

BTW, the current implementation always uses
pg_catalog.{text,csv,binary} for (not-qualified) "text",
"csv" and "binary" even when there are
myschema.{text,csv,binary}. See
src/test/modules/test_copy_format/sql/builtin.sql. But I
haven't looked into it why...

Sorry, I don't follow that. IIUC test_copy_format extension doesn't
create a handler function in myschema schema, and SQLs in builtin.sql
seem to work as expected (specifying a non-qualified built-in format
unconditionally uses the built-in format).

Ah, sorry. I should have not used "myschema." in the text
with builtin.sql reference. I just wanted to say "qualified
text,csv,binary formats" by "myschema.{text,csv,binary}". In
builtin.sql uses "public" schema not "myschema"
schema. Sorry.

Yes. builtin.sql works as expected but I don't know why. I
don't add any special codes for them. If "test_copy_format"
exists in public schema, "FORMAT 'test_copy_format'" uses
it. But if "text" exists in public schema, "FORMAT 'text'"
doesn't uses it. ("pg_catalog.text" is used instead.)

We can do it but I suggest that we do it as a refactoring
(or cleanup) in a separated patch for easy to review.

I think that csv_mode and binary are used mostly in
ProcessCopyOptions() so probably we can use local variables for that.
I find there are two other places where to use csv_mode:
NextCopyFromRawFields() and CopyToTextLikeStart(). I think we can
simply check the handler function's OID there, or we can define macros
like COPY_FORMAT_IS_TEXT/CSV/BINARY checking the OID and use them
there.

We need this change for "ready for merge", right?

Can we clarify items should be resolved for "ready for
merge"?

Are the followings correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file.
3. Add comments what the tests expect to
src/test/modules/test_copy_format/sql/test_copy_format.sql.
4. Remove CopyFormatOptions::{binary,csv_mode}.
5. Squash the "Support custom format" patch and the "Define
handler functions for built-in formats" patch.
* Could you do it when you push it? Or is it required for
"ready for merge"?
6. Use handler OID for detecting the default built-in format
instead of comparing the given format as string.
7. Update documentation.

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

Is the 1. required for "ready for merge"? If so, is there
any suggestion? I don't have a strong opinion for it.

If there are no more opinions for 2. and 3., I'll remove
them.

Thanks,
--
kou

#266jian he
jian.universality@gmail.com
In reply to: Sutou Kouhei (#253)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Mar 27, 2025 at 11:29 AM Sutou Kouhei <kou@clear-code.com> wrote:

We can merge 0001 quickly, right?

I did a brief review of v39-0001 and v39-0002.

text:
COPY_FILE
COPY_FRONTEND
still appear on comments in copyfrom_internal.h and copyto.c,
Should it be removed?

+#include "commands/copyto_internal.h"
#include "commands/progress.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
#include "executor/tuptable.h"

"copyto_internal.h" already include:

#include "executor/execdesc.h"
#include "executor/tuptable.h"
so you should removed
"
#include "executor/execdesc.h"
#include "executor/tuptable.h"
"
in copyto.c.

CREATE FUNCTION test_copy_format(internal)
RETURNS copy_handler
AS 'MODULE_PATHNAME', 'test_copy_format'
LANGUAGE C;
src/backend/commands/copy.c: ProcessCopyOptions
if (strcmp(fmt, "text") == 0)
/* default format */ ;
else if (strcmp(fmt, "csv") == 0)
opts_out->csv_mode = true;
else if (strcmp(fmt, "binary") == 0)
opts_out->binary = true;
else
{
List *qualified_format;
....
}
what if our customized format name is one of "csv", "binary", "text",
then that ELSE branch will never be reached.
then our customized format is being shadowed?

https://www.postgresql.org/docs/current/error-message-reporting.html
"The extra parentheses were required before PostgreSQL version 12, but
are now optional."

means that
ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s",
format_type_be(atttypid))));
can change to
ereport(NOTICE, errmsg("CopyFromInFunc: attribute: %s",
format_type_be(atttypid)));

all
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ....

can also be simplified to

ereport(ERROR, errcode(ERRCODE_INVALID_PARAMETER_VALUE), ....

#267David G. Johnston
david.g.johnston@gmail.com
In reply to: jian he (#266)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sun, Apr 6, 2025 at 4:30 AM jian he <jian.universality@gmail.com> wrote:

CREATE FUNCTION test_copy_format(internal)
RETURNS copy_handler
AS 'MODULE_PATHNAME', 'test_copy_format'
LANGUAGE C;
src/backend/commands/copy.c: ProcessCopyOptions
if (strcmp(fmt, "text") == 0)
/* default format */ ;
else if (strcmp(fmt, "csv") == 0)
opts_out->csv_mode = true;
else if (strcmp(fmt, "binary") == 0)
opts_out->binary = true;
else
{
List *qualified_format;
....
}
what if our customized format name is one of "csv", "binary", "text",
then that ELSE branch will never be reached.
then our customized format is being shadowed?

Yes. The user of your extension can specify a schema name to get access to
your conflicting format name choice but all the existing code out there
that relied on text/csv/binary being the built-in options continue to
behave the same no matter the search_path.

David J.

#268Sutou Kouhei
kou@clear-code.com
In reply to: jian he (#266)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CACJufxG=njY32g=YAF4T6rvXySN56VFbYt4ffjLTRBYQTKPAFg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sun, 6 Apr 2025 19:29:46 +0800,
jian he <jian.universality@gmail.com> wrote:

I did a brief review of v39-0001 and v39-0002.

text:
COPY_FILE
COPY_FRONTEND
still appear on comments in copyfrom_internal.h and copyto.c,
Should it be removed?

Good catch!
I found them in copy{from,to}_internal.h but couldn't find
them in copyto.c. It's a typo, right?

We should update them instead of removing them. I'll update
them in the next patch set.

+#include "commands/copyto_internal.h"
#include "commands/progress.h"
#include "executor/execdesc.h"
#include "executor/executor.h"
#include "executor/tuptable.h"

"copyto_internal.h" already include:

#include "executor/execdesc.h"
#include "executor/tuptable.h"
so you should removed
"
#include "executor/execdesc.h"
#include "executor/tuptable.h"
"
in copyto.c.

You're right. I'll update this too in the next patch set.

CREATE FUNCTION test_copy_format(internal)
RETURNS copy_handler
AS 'MODULE_PATHNAME', 'test_copy_format'
LANGUAGE C;
src/backend/commands/copy.c: ProcessCopyOptions
if (strcmp(fmt, "text") == 0)
/* default format */ ;
else if (strcmp(fmt, "csv") == 0)
opts_out->csv_mode = true;
else if (strcmp(fmt, "binary") == 0)
opts_out->binary = true;
else
{
List *qualified_format;
....
}
what if our customized format name is one of "csv", "binary", "text",
then that ELSE branch will never be reached.
then our customized format is being shadowed?

Right. We should not use customized format handlers to keep
backward compatibility.

https://www.postgresql.org/docs/current/error-message-reporting.html
"The extra parentheses were required before PostgreSQL version 12, but
are now optional."

means that
ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s",
format_type_be(atttypid))));
can change to
ereport(NOTICE, errmsg("CopyFromInFunc: attribute: %s",
format_type_be(atttypid)));

all
ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), ....

can also be simplified to

ereport(ERROR, errcode(ERRCODE_INVALID_PARAMETER_VALUE), ....

Oh, I didn't notice it. Can we do it as a separated patch
because we have many codes that use this style in
copy*.c. The separated patch should update this style at
once.

Thanks,
--
kou

#269Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#265)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Apr 4, 2025 at 1:38 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDOcYah-nREv09BB3ZoB-k+Yf1XUfJcDMoq=LLvV1v75w@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 31 Mar 2025 12:35:23 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Most of the queries under test_copy_format/sql verifies the input
patterns of the FORMAT option. I find that the regression tests
included in that directory probably should focus on testing new
callback APIs and some regression tests for FORMAT option handling can
be moved into the normal regression test suite (e.g., in copy.sql or a
new file like copy_format.sql). IIUC testing for invalid input
patterns can be done even without creating artificial wrong handler
functions.

Can we clarify what should we do for the next patch set
before we create the next patch set? Are the followings
correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
* We can do only 4 patterns in 16 patterns.
* Other tests in
src/test/modules/test_copy_format/sql/*.sql depend on
custom COPY handler for test. So we can't move to
src/test/regress/sql/copy.sql.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file

Agreed.

We can do it but I suggest that we do it as a refactoring
(or cleanup) in a separated patch for easy to review.

I think that csv_mode and binary are used mostly in
ProcessCopyOptions() so probably we can use local variables for that.
I find there are two other places where to use csv_mode:
NextCopyFromRawFields() and CopyToTextLikeStart(). I think we can
simply check the handler function's OID there, or we can define macros
like COPY_FORMAT_IS_TEXT/CSV/BINARY checking the OID and use them
there.

We need this change for "ready for merge", right?

I think so.

Can we clarify items should be resolved for "ready for
merge"?

Are the followings correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file.
3. Add comments what the tests expect to
src/test/modules/test_copy_format/sql/test_copy_format.sql.
4. Remove CopyFormatOptions::{binary,csv_mode}.

Agreed with the above items.

5. Squash the "Support custom format" patch and the "Define
handler functions for built-in formats" patch.
* Could you do it when you push it? Or is it required for
"ready for merge"?

Let's keep them for now.

6. Use handler OID for detecting the default built-in format
instead of comparing the given format as string.
7. Update documentation.

Agreed.

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

Is the 1. required for "ready for merge"? If so, is there
any suggestion? I don't have a strong opinion for it.

If there are no more opinions for 2. and 3., I'll remove
them.

Agreed.

I think we would still need some rounds of reviews but the patch is
getting in good shape.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#270Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#269)
6 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

I've updated the patch set. See the attached v40 patch set.

In <CAD21AoAXzwPC7jjPMTcT80hnzmPa2SUJkiqdYHweEY8sZscEMA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 23 Apr 2025 23:44:55 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Are the followings correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file.
3. Add comments what the tests expect to
src/test/modules/test_copy_format/sql/test_copy_format.sql.
4. Remove CopyFormatOptions::{binary,csv_mode}.

Agreed with the above items.

Done except 1. because 1. is removed by 3. in the following
list:

----

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

----

0005 is added for 4. Could you squash 0004 ("Use copy
handler for bult-in formats") and 0005 ("Remove
CopyFormatOptions::{binary,csv_mode}") if needed when you
push?

6. Use handler OID for detecting the default built-in format
instead of comparing the given format as string.

Done.

7. Update documentation.

Could someone help this? 0007 is the draft commit for this.

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

Is the 1. required for "ready for merge"? If so, is there
any suggestion? I don't have a strong opinion for it.

If there are no more opinions for 2. and 3., I'll remove
them.

Agreed.

1.: I didn't do anything. Because there is no suggestion.

2., 3.: Done.

I think we would still need some rounds of reviews but the patch is
getting in good shape.

I hope that this is completed in this year...

Thanks,
--
kou

Attachments:

v40-0001-Export-CopyDest-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From a81eb07a4c92b8b34ed6fbe6610c54bb9b3bb2e4 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v40 1/6] Export CopyDest as private data

This is a preparation to export CopyToStateData as private data.

CopyToStateData depends on CopyDest. So we need to export CopyDest
too.

But CopyDest and CopySource has the same names. So we can't export
CopyDest as-is.

This uses the COPY_DEST_ prefix for CopyDest enum values. CopySource
uses the COPY_FROM_ prefix for consistency.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 ++++----
 src/backend/commands/copyto.c            | 30 ++++++++----------------
 src/include/commands/copyfrom_internal.h |  8 +++----
 src/include/commands/copyto_internal.h   | 28 ++++++++++++++++++++++
 5 files changed, 49 insertions(+), 31 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fbbbc09a97b..b4dad744547 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1709,7 +1709,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1837,7 +1837,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f5fc346e201..9f7171d1478 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index f87e405351d..d739826afbc 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,17 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
 /*
  * This struct contains all the state variables used throughout a COPY TO
  * operation.
@@ -69,7 +59,7 @@ typedef struct CopyToStateData
 
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
 	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
 
 	int			file_encoding;	/* file or remote side's character encoding */
@@ -401,7 +391,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -448,7 +438,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -482,11 +472,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +497,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +505,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -903,12 +893,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..24157e11a73 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
@@ -64,7 +64,7 @@ typedef struct CopyFromStateData
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_SOURCE_FRONTEND */
 
 	EolType		eol_type;		/* EOL type of input */
 	int			file_encoding;	/* file or remote side's character encoding */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..42ddb37a8a2
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,28 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.47.2

v40-0002-Add-support-for-adding-custom-COPY-format.patchtext/x-patch; charset=us-asciiDownload
From 398994b555e3b508ce26fc33199bf9badbfc82d5 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:14:43 +0900
Subject: [PATCH v40 2/6] Add support for adding custom COPY format

This uses the handler approach like tablesample. The approach creates
an internal function that returns an internal struct. In this case,
a handler returns a CopyToRoutine for COPY TO and a CopyFromRoutine
for COPY FROM.

Whether COPY TO or COPY FROM is passed as the "is_from" argument:

    copy_handler(true) returns CopyToRoutine
    copy_handler(false) returns CopyFromRoutine

This also add a test module for custom COPY handler.
---
 src/backend/commands/copy.c                   |  31 ++++-
 src/backend/commands/copyfrom.c               |  20 +++-
 src/backend/commands/copyto.c                 |  72 +++--------
 src/backend/nodes/Makefile                    |   1 +
 src/backend/nodes/gen_node_support.pl         |   2 +
 src/backend/utils/adt/pseudotypes.c           |   1 +
 src/include/catalog/pg_proc.dat               |   6 +
 src/include/catalog/pg_type.dat               |   6 +
 src/include/commands/copy.h                   |   3 +-
 src/include/commands/copyapi.h                |   4 +
 src/include/commands/copyto_internal.h        |  55 +++++++++
 src/include/nodes/meson.build                 |   1 +
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  23 ++++
 .../expected/test_copy_format.out             | 107 +++++++++++++++++
 src/test/modules/test_copy_format/meson.build |  33 +++++
 .../test_copy_format/sql/test_copy_format.sql |  52 ++++++++
 .../test_copy_format--1.0.sql                 |  24 ++++
 .../test_copy_format/test_copy_format.c       | 113 ++++++++++++++++++
 .../test_copy_format/test_copy_format.control |   4 +
 22 files changed, 505 insertions(+), 59 deletions(-)
 mode change 100644 => 100755 src/backend/nodes/gen_node_support.pl
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format--1.0.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.control

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 74ae42b19a7..9515c4d5786 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -32,10 +32,12 @@
 #include "parser/parse_coerce.h"
 #include "parser/parse_collate.h"
 #include "parser/parse_expr.h"
+#include "parser/parse_func.h"
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
 #include "utils/lsyscache.h"
+#include "utils/regproc.h"
 #include "utils/rel.h"
 #include "utils/rls.h"
 
@@ -531,10 +533,31 @@ ProcessCopyOptions(ParseState *pstate,
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
 			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			{
+				List	   *qualified_format;
+				Oid			arg_types[1];
+				Oid			handler = InvalidOid;
+
+				qualified_format = stringToQualifiedNameList(fmt, NULL);
+				arg_types[0] = INTERNALOID;
+				handler = LookupFuncName(qualified_format, 1,
+										 arg_types, true);
+				if (!OidIsValid(handler))
+					ereport(ERROR,
+							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+							 errmsg("COPY format \"%s\" not recognized", fmt),
+							 parser_errposition(pstate, defel->location)));
+
+				/* check that handler has correct return type */
+				if (get_func_rettype(handler) != COPY_HANDLEROID)
+					ereport(ERROR,
+							(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+							 errmsg("function %s must return type %s",
+									fmt, "copy_handler"),
+							 parser_errposition(pstate, defel->location)));
+
+				opts_out->handler = handler;
+			}
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index b4dad744547..3d86e8a8328 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,6 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -155,7 +158,22 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyFromRoutine))
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
+							get_namespace_name(get_func_namespace(opts->handler)),
+							get_func_name(opts->handler))));
+		return castNode(CopyFromRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyFromRoutineCSV;
 	else if (opts->binary)
 		return &CopyFromRoutineBinary;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d739826afbc..265b847e255 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -22,9 +22,7 @@
 #include "commands/copyapi.h"
 #include "commands/copyto_internal.h"
 #include "commands/progress.h"
-#include "executor/execdesc.h"
 #include "executor/executor.h"
-#include "executor/tuptable.h"
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "mb/pg_wchar.h"
@@ -37,56 +35,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -140,6 +88,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -148,6 +97,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -156,6 +106,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -166,7 +117,22 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
+	if (OidIsValid(opts->handler))
+	{
+		Datum		datum;
+		Node	   *routine;
+
+		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
+		routine = (Node *) DatumGetPointer(datum);
+		if (routine == NULL || !IsA(routine, CopyToRoutine))
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
+							get_namespace_name(get_func_namespace(opts->handler)),
+							get_func_name(opts->handler))));
+		return castNode(CopyToRoutine, routine);
+	}
+	else if (opts->csv_mode)
 		return &CopyToRoutineCSV;
 	else if (opts->binary)
 		return &CopyToRoutineBinary;
diff --git a/src/backend/nodes/Makefile b/src/backend/nodes/Makefile
index 77ddb9ca53f..dc6c1087361 100644
--- a/src/backend/nodes/Makefile
+++ b/src/backend/nodes/Makefile
@@ -50,6 +50,7 @@ node_headers = \
 	access/sdir.h \
 	access/tableam.h \
 	access/tsmapi.h \
+	commands/copyapi.h \
 	commands/event_trigger.h \
 	commands/trigger.h \
 	executor/tuptable.h \
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
old mode 100644
new mode 100755
index 77659b0f760..d688bbea3a0
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -62,6 +62,7 @@ my @all_input_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
@@ -86,6 +87,7 @@ my @nodetag_only_files = qw(
   access/sdir.h
   access/tableam.h
   access/tsmapi.h
+  commands/copyapi.h
   commands/event_trigger.h
   commands/trigger.h
   executor/tuptable.h
diff --git a/src/backend/utils/adt/pseudotypes.c b/src/backend/utils/adt/pseudotypes.c
index 317a1f2b282..f2ebc21ca56 100644
--- a/src/backend/utils/adt/pseudotypes.c
+++ b/src/backend/utils/adt/pseudotypes.c
@@ -370,6 +370,7 @@ PSEUDOTYPE_DUMMY_IO_FUNCS(fdw_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(table_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(index_am_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(tsm_handler);
+PSEUDOTYPE_DUMMY_IO_FUNCS(copy_handler);
 PSEUDOTYPE_DUMMY_IO_FUNCS(internal);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anyelement);
 PSEUDOTYPE_DUMMY_IO_FUNCS(anynonarray);
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 62beb71da28..ba46bfa48a8 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -7888,6 +7888,12 @@
 { oid => '3312', descr => 'I/O',
   proname => 'tsm_handler_out', prorettype => 'cstring',
   proargtypes => 'tsm_handler', prosrc => 'tsm_handler_out' },
+{ oid => '8753', descr => 'I/O',
+  proname => 'copy_handler_in', proisstrict => 'f', prorettype => 'copy_handler',
+  proargtypes => 'cstring', prosrc => 'copy_handler_in' },
+{ oid => '8754', descr => 'I/O',
+  proname => 'copy_handler_out', prorettype => 'cstring',
+  proargtypes => 'copy_handler', prosrc => 'copy_handler_out' },
 { oid => '267', descr => 'I/O',
   proname => 'table_am_handler_in', proisstrict => 'f',
   prorettype => 'table_am_handler', proargtypes => 'cstring',
diff --git a/src/include/catalog/pg_type.dat b/src/include/catalog/pg_type.dat
index 6dca77e0a22..bddf9fb4fbe 100644
--- a/src/include/catalog/pg_type.dat
+++ b/src/include/catalog/pg_type.dat
@@ -633,6 +633,12 @@
   typcategory => 'P', typinput => 'tsm_handler_in',
   typoutput => 'tsm_handler_out', typreceive => '-', typsend => '-',
   typalign => 'i' },
+{ oid => '8752',
+  descr => 'pseudo-type for the result of a COPY TO/FROM handler function',
+  typname => 'copy_handler', typlen => '4', typbyval => 't', typtype => 'p',
+  typcategory => 'P', typinput => 'copy_handler_in',
+  typoutput => 'copy_handler_out', typreceive => '-', typsend => '-',
+  typalign => 'i' },
 { oid => '269',
   descr => 'pseudo-type for the result of a table AM handler function',
   typname => 'table_am_handler', typlen => '4', typbyval => 't', typtype => 'p',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..6df1f8a3b9b 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,9 +87,10 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	Oid			handler;		/* handler function for custom format routine */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..53ad3337f86 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,8 @@
  */
 typedef struct CopyToRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
@@ -60,6 +62,8 @@ typedef struct CopyToRoutine
  */
 typedef struct CopyFromRoutine
 {
+	NodeTag		type;
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 42ddb37a8a2..da796131988 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,6 +14,11 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
@@ -25,4 +30,54 @@ typedef enum CopyDest
 	COPY_DEST_CALLBACK,			/* to callback function */
 } CopyDest;
 
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/include/nodes/meson.build b/src/include/nodes/meson.build
index d1ca24dd32f..96e70e7f38b 100644
--- a/src/include/nodes/meson.build
+++ b/src/include/nodes/meson.build
@@ -12,6 +12,7 @@ node_support_input_i = [
   'access/sdir.h',
   'access/tableam.h',
   'access/tsmapi.h',
+  'commands/copyapi.h',
   'commands/event_trigger.h',
   'commands/trigger.h',
   'executor/tuptable.h',
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index aa1d27bbed3..9bf5d58cdae 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -17,6 +17,7 @@ SUBDIRS = \
 		  test_aio \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 9de0057bd1d..5fd06de2737 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -16,6 +16,7 @@ subdir('ssl_passphrase_callback')
 subdir('test_aio')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..8497f91624d
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,23 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+EXTENSION = test_copy_format
+DATA = test_copy_format--1.0.sql
+
+REGRESS = test_copy_format
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..3916b766615
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,107 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- No WITH SCHEMA. It installs custom COPY handlers to the current
+-- schema.
+CREATE EXTENSION test_copy_format;
+-- We can find a custom COPY handler without schema.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+DROP EXTENSION test_copy_format;
+-- Install custom COPY handlers to a schema that isn't included in
+-- search_path.
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+-- We can find a custom COPY handler by qualified name.
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+-- We can't find a custom COPY handler without schema when search_path
+-- doesn't include the schema where we installed custom COPY handlers.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+                                        ^
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+ERROR:  COPY format "test_copy_format" not recognized
+LINE 1: COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+                                       ^
+-- We can find a custom COPY handler without schema when search_path
+-- includes the schema where we installed custom COPY handlers.
+SET search_path = test_schema,public;
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  test_copy_format: is_from=false
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+RESET search_path;
+-- Invalid cases with qualified name.
+-- Input type is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_schema.test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_cop...
+                                        ^
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+ERROR:  COPY format "test_schema.test_copy_format_wrong_input_type" not recognized
+LINE 1: COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy...
+                                       ^
+-- Return type is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+ERROR:  function test_schema.test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_cop...
+                                        ^
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+ERROR:  function test_schema.test_copy_format_wrong_return_type must return type copy_handler
+LINE 1: COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy...
+                                       ^
+-- Returned value is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyFromRoutine struct
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+ERROR:  COPY handler function test_schema.test_copy_format_wrong_return_value did not return CopyToRoutine struct
+DROP TABLE copy_data;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..a45a2e0a039
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,33 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+test_install_data += files(
+  'test_copy_format.control',
+  'test_copy_format--1.0.sql',
+)
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..b262794f878
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,52 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+-- No WITH SCHEMA. It installs custom COPY handlers to the current
+-- schema.
+CREATE EXTENSION test_copy_format;
+-- We can find a custom COPY handler without schema.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+DROP EXTENSION test_copy_format;
+
+
+-- Install custom COPY handlers to a schema that isn't included in
+-- search_path.
+CREATE SCHEMA test_schema;
+CREATE EXTENSION test_copy_format WITH SCHEMA test_schema;
+
+-- We can find a custom COPY handler by qualified name.
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format');
+
+-- We can't find a custom COPY handler without schema when search_path
+-- doesn't include the schema where we installed custom COPY handlers.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+
+-- We can find a custom COPY handler without schema when search_path
+-- includes the schema where we installed custom COPY handlers.
+SET search_path = test_schema,public;
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+RESET search_path;
+
+-- Invalid cases with qualified name.
+
+-- Input type is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_input_type');
+-- Return type is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_type');
+-- Returned value is wrong
+COPY copy_data FROM stdin WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+COPY copy_data TO stdout WITH (FORMAT 'test_schema.test_copy_format_wrong_return_value');
+
+
+DROP TABLE copy_data;
+DROP EXTENSION test_copy_format;
+DROP SCHEMA test_schema;
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
new file mode 100644
index 00000000000..c1a137181f8
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -0,0 +1,24 @@
+/* src/test/modules/test_copy_format/test_copy_format--1.0.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "CREATE EXTENSION test_copy_format" to load this file. \quit
+
+CREATE FUNCTION test_copy_format(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_input_type(bool)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_return_type(internal)
+	RETURNS bool
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION test_copy_format_wrong_return_value(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format_wrong_return_value'
+	LANGUAGE C;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..1d754201336
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,113 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+#include "utils/builtins.h"
+
+PG_MODULE_MAGIC;
+
+static void
+TestCopyFromInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static bool
+TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+TestCopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.type = T_CopyFromRoutine,
+	.CopyFromInFunc = TestCopyFromInFunc,
+	.CopyFromStart = TestCopyFromStart,
+	.CopyFromOneRow = TestCopyFromOneRow,
+	.CopyFromEnd = TestCopyFromEnd,
+};
+
+static void
+TestCopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static void
+TestCopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: the number of valid values: %u", slot->tts_nvalid)));
+}
+
+static void
+TestCopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.type = T_CopyToRoutine,
+	.CopyToOutFunc = TestCopyToOutFunc,
+	.CopyToStart = TestCopyToStart,
+	.CopyToOneRow = TestCopyToOneRow,
+	.CopyToEnd = TestCopyToEnd,
+};
+
+PG_FUNCTION_INFO_V1(test_copy_format);
+Datum
+test_copy_format(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	ereport(NOTICE,
+			(errmsg("test_copy_format: is_from=%s", is_from ? "true" : "false")));
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineTestCopyFormat);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineTestCopyFormat);
+}
+
+PG_FUNCTION_INFO_V1(test_copy_format_wrong_return_value);
+Datum
+test_copy_format_wrong_return_value(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_CSTRING(pstrdup("is_from=true"));
+	else
+		PG_RETURN_CSTRING(pstrdup("is_from=false"));
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.control b/src/test/modules/test_copy_format/test_copy_format.control
new file mode 100644
index 00000000000..f05a6362358
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.control
@@ -0,0 +1,4 @@
+comment = 'Test code for custom COPY format'
+default_version = '1.0'
+module_pathname = '$libdir/test_copy_format'
+relocatable = true
-- 
2.47.2

v40-0003-Add-support-for-implementing-custom-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From 18618368721678d78934251ff8243705013458f0 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:24:15 +0900
Subject: [PATCH v40 3/6] Add support for implementing custom COPY handler as
 extension

* TO: Add CopyToStateData::opaque that can be used to keep
  data for custom COPY TO handler implementation
* TO: Export CopySendEndOfRow() to send end of row data as
  CopyToStateFlush()
* FROM: Add CopyFromStateData::opaque that can be used to
  keep data for custom COPY FROM handler implementation
* FROM: Export CopyGetData() to get the next data as
  CopyFromStateGetData()
* FROM: Add CopyFromSkipErrorRow() for "ON_ERROR stop" and
  "LOG_VERBOSITY verbose"

COPY FROM extensions must call CopyFromSkipErrorRow() when
CopyFromOneRow callback reports an error by
errsave(). CopyFromSkipErrorRow() handles "ON_ERROR stop" and
"LOG_VERBOSITY verbose" cases.
---
 src/backend/commands/copyfromparse.c          | 93 ++++++++++++-------
 src/backend/commands/copyto.c                 | 12 +++
 src/include/commands/copyapi.h                |  6 ++
 src/include/commands/copyfrom_internal.h      |  3 +
 src/include/commands/copyto_internal.h        |  3 +
 .../expected/test_copy_format.out             | 50 ++++++++++
 .../test_copy_format/sql/test_copy_format.sql | 35 +++++++
 .../test_copy_format/test_copy_format.c       | 80 +++++++++++++++-
 8 files changed, 245 insertions(+), 37 deletions(-)

diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 9f7171d1478..de68b53b000 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -739,6 +739,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+/*
+ * Export CopyGetData() for extensions. We want to keep CopyGetData() as a
+ * static function for optimization. CopyGetData() calls in this file may be
+ * optimized by a compiler.
+ */
+int
+CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread)
+{
+	return CopyGetData(cstate, dest, minread, maxread);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
@@ -927,6 +938,51 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
 }
 
+/*
+ * Call this when you report an error by errsave() in your CopyFromOneRow
+ * callback. This handles "ON_ERROR stop" and "LOG_VERBOSITY verbose" cases
+ * for you.
+ */
+void
+CopyFromSkipErrorRow(CopyFromState cstate)
+{
+	Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+
+	cstate->num_errors++;
+
+	if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+	{
+		/*
+		 * Since we emit line number and column info in the below notice
+		 * message, we suppress error context information other than the
+		 * relation name.
+		 */
+		Assert(!cstate->relname_only);
+		cstate->relname_only = true;
+
+		if (cstate->cur_attval)
+		{
+			char	   *attval;
+
+			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": \"%s\"",
+						   cstate->cur_lineno,
+						   cstate->cur_attname,
+						   attval));
+			pfree(attval);
+		}
+		else
+			ereport(NOTICE,
+					errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": null input",
+						   cstate->cur_lineno,
+						   cstate->cur_attname));
+
+		/* reset relname_only */
+		cstate->relname_only = false;
+	}
+}
+
 /*
  * Workhorse for CopyFromTextOneRow() and CopyFromCSVOneRow().
  *
@@ -1033,42 +1089,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										(Node *) cstate->escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
-
-			cstate->num_errors++;
-
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
-			{
-				/*
-				 * Since we emit line number and column info in the below
-				 * notice message, we suppress error context information other
-				 * than the relation name.
-				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
-
-				if (cstate->cur_attval)
-				{
-					char	   *attval;
-
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": \"%s\"",
-								   cstate->cur_lineno,
-								   cstate->cur_attname,
-								   attval));
-					pfree(attval);
-				}
-				else
-					ereport(NOTICE,
-							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": null input",
-								   cstate->cur_lineno,
-								   cstate->cur_attname));
-
-				/* reset relname_only */
-				cstate->relname_only = false;
-			}
-
+			CopyFromSkipErrorRow(cstate);
 			return true;
 		}
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 265b847e255..d6fcfdfb9b1 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -454,6 +454,18 @@ CopySendEndOfRow(CopyToState cstate)
 	resetStringInfo(fe_msgbuf);
 }
 
+/*
+ * Export CopySendEndOfRow() for extensions. We want to keep
+ * CopySendEndOfRow() as a static function for
+ * optimization. CopySendEndOfRow() calls in this file may be optimized by a
+ * compiler.
+ */
+void
+CopyToStateFlush(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 /*
  * Wrapper function of CopySendEndOfRow for text and CSV formats. Sends the
  * line termination and do common appropriate things for the end of row.
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 53ad3337f86..500ece7d5bb 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -56,6 +56,8 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void CopyToStateFlush(CopyToState cstate);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -106,4 +108,8 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern int	CopyFromStateGetData(CopyFromState cstate, void *dest, int minread, int maxread);
+
+extern void CopyFromSkipErrorRow(CopyFromState cstate);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index 24157e11a73..f9e27152313 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -181,6 +181,9 @@ typedef struct CopyFromStateData
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyFromStateData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index da796131988..3bd9d702bf0 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -78,6 +78,9 @@ typedef struct CopyToStateData
 	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
+
+	/* For custom format implementation */
+	void	   *opaque;			/* private space */
 } CopyToStateData;
 
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 3916b766615..47a875f0ab1 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -4,6 +4,8 @@ INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 -- schema.
 CREATE EXTENSION test_copy_format;
 -- We can find a custom COPY handler without schema.
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=true
 NOTICE:  CopyFromInFunc: attribute: smallint
@@ -11,7 +13,50 @@ NOTICE:  CopyFromInFunc: attribute: integer
 NOTICE:  CopyFromInFunc: attribute: bigint
 NOTICE:  CopyFromStart: the number of attributes: 3
 NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  invalid value: "6"
+CONTEXT:  COPY copy_data, line 2, column a: "6"
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
 NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  skipping row due to data type incompatibility at line 2 for column "a": "6"
+NOTICE:  CopyFromOneRow
+NOTICE:  1 row was skipped due to data type incompatibility
+NOTICE:  CopyFromEnd
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+NOTICE:  test_copy_format: is_from=true
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromOneRow
+ERROR:  too much lines: 3
+CONTEXT:  COPY copy_data, line 3
 COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
 NOTICE:  test_copy_format: is_from=false
 NOTICE:  CopyToOutFunc: attribute: smallint
@@ -21,7 +66,12 @@ NOTICE:  CopyToStart: the number of attributes: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
 NOTICE:  CopyToEnd
+-- Reset data.
+TRUNCATE copy_data;
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 DROP EXTENSION test_copy_format;
 -- Install custom COPY handlers to a schema that isn't included in
 -- search_path.
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index b262794f878..c7beb2fb8ae 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -4,10 +4,45 @@ INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 -- No WITH SCHEMA. It installs custom COPY handlers to the current
 -- schema.
 CREATE EXTENSION test_copy_format;
+
 -- We can find a custom COPY handler without schema.
+
+-- 987 is accepted.
+-- 654 is a hard error because ON_ERROR is stop by default.
 COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+987
+654
 \.
+
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+\.
+
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore, LOG_VERBOSITY verbose);
+987
+654
+\.
+
+-- 987 is accepted.
+-- 654 is a soft error because ON_ERROR is ignore.
+-- 321 is a hard error.
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format', ON_ERROR ignore);
+987
+654
+321
+\.
+
 COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+
+-- Reset data.
+TRUNCATE copy_data;
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
 DROP EXTENSION test_copy_format;
 
 
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
index 1d754201336..34ec693a7ec 100644
--- a/src/test/modules/test_copy_format/test_copy_format.c
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -14,6 +14,7 @@
 #include "postgres.h"
 
 #include "commands/copyapi.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "utils/builtins.h"
 
@@ -35,8 +36,85 @@ TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
 static bool
 TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
 {
+	int			n_attributes = list_length(cstate->attnumlist);
+	char	   *line;
+	int			line_size = n_attributes + 1;	/* +1 is for new line */
+	int			read_bytes;
+
 	ereport(NOTICE, (errmsg("CopyFromOneRow")));
-	return false;
+
+	cstate->cur_lineno++;
+	line = palloc(line_size);
+	read_bytes = CopyFromStateGetData(cstate, line, line_size, line_size);
+	if (read_bytes == 0)
+		return false;
+	if (read_bytes != line_size)
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("one line must be %d bytes: %d",
+						line_size, read_bytes)));
+
+	if (cstate->cur_lineno == 1)
+	{
+		/* Success */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		ListCell   *cur;
+		int			i = 0;
+
+		foreach(cur, cstate->attnumlist)
+		{
+			int			attnum = lfirst_int(cur);
+			int			m = attnum - 1;
+			Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+
+			if (att->atttypid == INT2OID)
+			{
+				values[i] = Int16GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT4OID)
+			{
+				values[i] = Int32GetDatum(line[i] - '0');
+			}
+			else if (att->atttypid == INT8OID)
+			{
+				values[i] = Int64GetDatum(line[i] - '0');
+			}
+			nulls[i] = false;
+			i++;
+		}
+	}
+	else if (cstate->cur_lineno == 2)
+	{
+		/* Soft error */
+		TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+		int			attnum = lfirst_int(list_head(cstate->attnumlist));
+		int			m = attnum - 1;
+		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
+		char		value[2];
+
+		cstate->cur_attname = NameStr(att->attname);
+		value[0] = line[0];
+		value[1] = '\0';
+		cstate->cur_attval = value;
+		errsave((Node *) cstate->escontext,
+				(
+				 errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
+				 errmsg("invalid value: \"%c\"", line[0])));
+		CopyFromSkipErrorRow(cstate);
+		cstate->cur_attname = NULL;
+		cstate->cur_attval = NULL;
+		return true;
+	}
+	else
+	{
+		/* Hard error */
+		ereport(ERROR,
+				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
+				 errmsg("too much lines: %llu",
+						(unsigned long long) cstate->cur_lineno)));
+	}
+
+	return true;
 }
 
 static void
-- 
2.47.2

v40-0004-Use-copy-handlers-for-built-in-formats.patchtext/x-patch; charset=us-asciiDownload
From ed454fd1998bca012182b977c227b4a0caa3ccd6 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 27 Mar 2025 11:56:45 +0900
Subject: [PATCH v40 4/6] Use copy handlers for built-in formats

This adds copy handlers for text, csv and binary. We can simplify
Copy{To,From}GetRoutine() by this. We'll be able to remove
CopyFormatOptions::{binary,csv_mode} when we add more callbacks to
Copy{To,From}Routine and move format specific routines to
Copy{To,From}Routine::*.
---
 src/backend/commands/copy.c                   | 101 ++++++++++++------
 src/backend/commands/copyfrom.c               |  42 ++++----
 src/backend/commands/copyto.c                 |  42 ++++----
 src/include/catalog/pg_proc.dat               |  11 ++
 src/include/commands/copy.h                   |   2 +-
 src/include/commands/copyfrom_internal.h      |   6 +-
 src/include/commands/copyto_internal.h        |   6 +-
 .../expected/test_copy_format.out             |  35 ++++++
 .../test_copy_format/sql/test_copy_format.sql |  32 ++++++
 .../test_copy_format--1.0.sql                 |  15 +++
 10 files changed, 211 insertions(+), 81 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 9515c4d5786..38ed8bccacd 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,9 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
+#include "commands/copyfrom_internal.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -521,43 +523,45 @@ ProcessCopyOptions(ParseState *pstate,
 
 		if (strcmp(defel->defname, "format") == 0)
 		{
-			char	   *fmt = defGetString(defel);
+			char	   *format = defGetString(defel);
+			List	   *qualified_format;
+			char	   *schema;
+			char	   *fmt;
+			Oid			arg_types[1];
+			Oid			handler = InvalidOid;
 
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
-			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
-			else
+
+			qualified_format = stringToQualifiedNameList(format, NULL);
+			DeconstructQualifiedName(qualified_format, &schema, &fmt);
+			if (!schema || strcmp(schema, "pg_catalog") == 0)
 			{
-				List	   *qualified_format;
-				Oid			arg_types[1];
-				Oid			handler = InvalidOid;
-
-				qualified_format = stringToQualifiedNameList(fmt, NULL);
-				arg_types[0] = INTERNALOID;
-				handler = LookupFuncName(qualified_format, 1,
-										 arg_types, true);
-				if (!OidIsValid(handler))
-					ereport(ERROR,
-							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-							 errmsg("COPY format \"%s\" not recognized", fmt),
-							 parser_errposition(pstate, defel->location)));
-
-				/* check that handler has correct return type */
-				if (get_func_rettype(handler) != COPY_HANDLEROID)
-					ereport(ERROR,
-							(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-							 errmsg("function %s must return type %s",
-									fmt, "copy_handler"),
-							 parser_errposition(pstate, defel->location)));
-
-				opts_out->handler = handler;
+				if (strcmp(fmt, "csv") == 0)
+					opts_out->csv_mode = true;
+				else if (strcmp(fmt, "binary") == 0)
+					opts_out->binary = true;
 			}
+
+			arg_types[0] = INTERNALOID;
+			handler = LookupFuncName(qualified_format, 1,
+									 arg_types, true);
+			if (!OidIsValid(handler))
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+						 errmsg("COPY format \"%s\" not recognized", format),
+						 parser_errposition(pstate, defel->location)));
+
+			/* check that handler has correct return type */
+			if (get_func_rettype(handler) != COPY_HANDLEROID)
+				ereport(ERROR,
+						(errcode(ERRCODE_WRONG_OBJECT_TYPE),
+						 errmsg("function %s must return type %s",
+								format, "copy_handler"),
+						 parser_errposition(pstate, defel->location)));
+
+			opts_out->handler = handler;
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -1040,3 +1044,36 @@ CopyGetAttnums(TupleDesc tupDesc, Relation rel, List *attnamelist)
 
 	return attnums;
 }
+
+Datum
+copy_text_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineText);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineText);
+}
+
+Datum
+copy_csv_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineCSV);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineCSV);
+}
+
+Datum
+copy_binary_handler(PG_FUNCTION_ARGS)
+{
+	bool		is_from = PG_GETARG_BOOL(0);
+
+	if (is_from)
+		PG_RETURN_POINTER(&CopyFromRoutineBinary);
+	else
+		PG_RETURN_POINTER(&CopyToRoutineBinary);
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 3d86e8a8328..74a8051c24c 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -45,6 +45,7 @@
 #include "rewrite/rewriteHandler.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/portal.h"
@@ -128,7 +129,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
  */
 
 /* text format */
-static const CopyFromRoutine CopyFromRoutineText = {
+const CopyFromRoutine CopyFromRoutineText = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -137,7 +138,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 };
 
 /* CSV format */
-static const CopyFromRoutine CopyFromRoutineCSV = {
+const CopyFromRoutine CopyFromRoutineCSV = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
@@ -146,7 +147,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 };
 
 /* binary format */
-static const CopyFromRoutine CopyFromRoutineBinary = {
+const CopyFromRoutine CopyFromRoutineBinary = {
 	.type = T_CopyFromRoutine,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
@@ -158,28 +159,23 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
-
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(true));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyFromRoutine))
-			ereport(ERROR,
-					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
-							get_namespace_name(get_func_namespace(opts->handler)),
-							get_func_name(opts->handler))));
-		return castNode(CopyFromRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
 	/* default is text */
-	return &CopyFromRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(true));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyFromRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s.%s did not return CopyFromRoutine struct",
+						get_namespace_name(get_func_namespace(handler)),
+						get_func_name(handler))));
+	return castNode(CopyFromRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index d6fcfdfb9b1..4e1b154cad2 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -30,6 +30,7 @@
 #include "pgstat.h"
 #include "storage/fd.h"
 #include "tcop/tcopprot.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/rel.h"
@@ -87,7 +88,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
  */
 
 /* text format */
-static const CopyToRoutine CopyToRoutineText = {
+const CopyToRoutine CopyToRoutineText = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -96,7 +97,7 @@ static const CopyToRoutine CopyToRoutineText = {
 };
 
 /* CSV format */
-static const CopyToRoutine CopyToRoutineCSV = {
+const CopyToRoutine CopyToRoutineCSV = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
@@ -105,7 +106,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 };
 
 /* binary format */
-static const CopyToRoutine CopyToRoutineBinary = {
+const CopyToRoutine CopyToRoutineBinary = {
 	.type = T_CopyToRoutine,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
@@ -117,28 +118,23 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (OidIsValid(opts->handler))
-	{
-		Datum		datum;
-		Node	   *routine;
-
-		datum = OidFunctionCall1(opts->handler, BoolGetDatum(false));
-		routine = (Node *) DatumGetPointer(datum);
-		if (routine == NULL || !IsA(routine, CopyToRoutine))
-			ereport(ERROR,
-					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-					 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
-							get_namespace_name(get_func_namespace(opts->handler)),
-							get_func_name(opts->handler))));
-		return castNode(CopyToRoutine, routine);
-	}
-	else if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	Oid			handler = opts->handler;
+	Datum		datum;
+	Node	   *routine;
 
 	/* default is text */
-	return &CopyToRoutineText;
+	if (!OidIsValid(handler))
+		handler = F_TEXT_INTERNAL;
+
+	datum = OidFunctionCall1(handler, BoolGetDatum(false));
+	routine = (Node *) DatumGetPointer(datum);
+	if (routine == NULL || !IsA(routine, CopyToRoutine))
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY handler function %s.%s did not return CopyToRoutine struct",
+						get_namespace_name(get_func_namespace(handler)),
+						get_func_name(handler))));
+	return castNode(CopyToRoutine, routine);
 }
 
 /* Implementation of the start callback for text and CSV formats */
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index ba46bfa48a8..e038157eb74 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -12572,4 +12572,15 @@
   proargnames => '{pid,io_id,io_generation,state,operation,off,length,target,handle_data_len,raw_result,result,target_desc,f_sync,f_localmem,f_buffered}',
   prosrc => 'pg_get_aios' },
 
+# COPY handlers
+{ oid => '8100', descr => 'text COPY FORMAT handler',
+  proname => 'text', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_text_handler' },
+{ oid => '8101', descr => 'csv COPY FORMAT handler',
+  proname => 'csv', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_csv_handler' },
+{ oid => '8102', descr => 'binary COPY FORMAT handler',
+  proname => 'binary', provolatile => 'i', prorettype => 'copy_handler',
+  proargtypes => 'internal', prosrc => 'copy_binary_handler' },
+
 ]
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 6df1f8a3b9b..4525261fcc4 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,7 +87,7 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
-	Oid			handler;		/* handler function for custom format routine */
+	Oid			handler;		/* handler function */
 } CopyFormatOptions;
 
 /* These are private in commands/copy[from|to]_internal.h */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index f9e27152313..51d181c3ab4 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYFROM_INTERNAL_H
 #define COPYFROM_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/trigger.h"
 #include "nodes/miscnodes.h"
 
@@ -197,4 +197,8 @@ extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
 								 Datum *values, bool *nulls);
 
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineText;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineCSV;
+extern PGDLLIMPORT const CopyFromRoutine CopyFromRoutineBinary;
+
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 3bd9d702bf0..9faf97c718a 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,7 +14,7 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "executor/execdesc.h"
 #include "executor/tuptable.h"
 #include "nodes/execnodes.h"
@@ -83,4 +83,8 @@ typedef struct CopyToStateData
 	void	   *opaque;			/* private space */
 } CopyToStateData;
 
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineText;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineCSV;
+extern PGDLLIMPORT const CopyToRoutine CopyToRoutineBinary;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
index 47a875f0ab1..aa51e480b1d 100644
--- a/src/test/modules/test_copy_format/expected/test_copy_format.out
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -72,6 +72,41 @@ NOTICE:  CopyToEnd
 -- Reset data.
 TRUNCATE copy_data;
 INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+-- test_copy_format extension installs text, csv and binary custom
+-- COPY handlers to the public schema but they must not be
+-- used. Builtin COPY handlers must be used.
+-- public.text must not be used
+COPY copy_data FROM stdin WITH (FORMAT text);
+COPY copy_data TO stdout WITH (FORMAT text);
+1	2	3
+12	34	56
+123	456	789
+COPY copy_data FROM stdin WITH (FORMAT 'pg_catalog.text');
+COPY copy_data TO stdout WITH (FORMAT 'pg_catalog.text');
+1	2	3
+12	34	56
+123	456	789
+-- public.csv must not be used
+COPY copy_data FROM stdin WITH (FORMAT csv);
+COPY copy_data TO stdout WITH (FORMAT csv);
+1,2,3
+12,34,56
+123,456,789
+COPY copy_data FROM stdin WITH (FORMAT 'pg_catalog.csv');
+COPY copy_data TO stdout WITH (FORMAT 'pg_catalog.csv');
+1,2,3
+12,34,56
+123,456,789
+-- public.binary must not be used
+\getenv abs_builddir PG_ABS_BUILDDIR
+\set filename :abs_builddir '/results/binary.data'
+COPY copy_data TO :'filename' WITH (FORMAT binary);
+COPY copy_data FROM :'filename' WITH (FORMAT binary);
+COPY copy_data TO :'filename' WITH (FORMAT 'pg_catalog.binary');
+COPY copy_data FROM :'filename' WITH (FORMAT 'pg_catalog.binary');
+-- Reset data.
+TRUNCATE copy_data;
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 DROP EXTENSION test_copy_format;
 -- Install custom COPY handlers to a schema that isn't included in
 -- search_path.
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
index c7beb2fb8ae..3b7f6e72e13 100644
--- a/src/test/modules/test_copy_format/sql/test_copy_format.sql
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -43,6 +43,38 @@ COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
 TRUNCATE copy_data;
 INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
 
+-- test_copy_format extension installs text, csv and binary custom
+-- COPY handlers to the public schema but they must not be
+-- used. Builtin COPY handlers must be used.
+
+-- public.text must not be used
+COPY copy_data FROM stdin WITH (FORMAT text);
+\.
+COPY copy_data TO stdout WITH (FORMAT text);
+COPY copy_data FROM stdin WITH (FORMAT 'pg_catalog.text');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'pg_catalog.text');
+
+-- public.csv must not be used
+COPY copy_data FROM stdin WITH (FORMAT csv);
+\.
+COPY copy_data TO stdout WITH (FORMAT csv);
+COPY copy_data FROM stdin WITH (FORMAT 'pg_catalog.csv');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'pg_catalog.csv');
+
+-- public.binary must not be used
+\getenv abs_builddir PG_ABS_BUILDDIR
+\set filename :abs_builddir '/results/binary.data'
+COPY copy_data TO :'filename' WITH (FORMAT binary);
+COPY copy_data FROM :'filename' WITH (FORMAT binary);
+COPY copy_data TO :'filename' WITH (FORMAT 'pg_catalog.binary');
+COPY copy_data FROM :'filename' WITH (FORMAT 'pg_catalog.binary');
+
+-- Reset data.
+TRUNCATE copy_data;
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
 DROP EXTENSION test_copy_format;
 
 
diff --git a/src/test/modules/test_copy_format/test_copy_format--1.0.sql b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
index c1a137181f8..bfa1900e828 100644
--- a/src/test/modules/test_copy_format/test_copy_format--1.0.sql
+++ b/src/test/modules/test_copy_format/test_copy_format--1.0.sql
@@ -22,3 +22,18 @@ CREATE FUNCTION test_copy_format_wrong_return_value(internal)
 	RETURNS copy_handler
 	AS 'MODULE_PATHNAME', 'test_copy_format_wrong_return_value'
 	LANGUAGE C;
+
+CREATE FUNCTION text(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION csv(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
+
+CREATE FUNCTION binary(internal)
+	RETURNS copy_handler
+	AS 'MODULE_PATHNAME', 'test_copy_format'
+	LANGUAGE C;
-- 
2.47.2

v40-0005-Remove-CopyFormatOptions-binary-csv_mode.patchtext/x-patch; charset=us-asciiDownload
From 6e014bf226713a2c9f37da4c4f337128c4392212 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 25 Apr 2025 18:49:41 +0900
Subject: [PATCH v40 5/6] Remove CopyFormatOptions::{binary,csv_mode}

Because we can compute them from CopyFormatOptions::handler.
---
 src/backend/commands/copy.c          | 61 +++++++++++++---------------
 src/backend/commands/copyfrom.c      |  2 +-
 src/backend/commands/copyfromparse.c |  7 ++--
 src/backend/commands/copyto.c        |  4 +-
 src/include/commands/copy.h          |  2 -
 5 files changed, 36 insertions(+), 40 deletions(-)

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 38ed8bccacd..21db5e964cf 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -38,6 +38,7 @@
 #include "parser/parse_relation.h"
 #include "utils/acl.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/lsyscache.h"
 #include "utils/regproc.h"
 #include "utils/rel.h"
@@ -508,6 +509,8 @@ ProcessCopyOptions(ParseState *pstate,
 	bool		on_error_specified = false;
 	bool		log_verbosity_specified = false;
 	bool		reject_limit_specified = false;
+	bool		binary = false;
+	bool		csv_mode = false;
 	ListCell   *option;
 
 	/* Support external use for option sanity checking */
@@ -525,8 +528,6 @@ ProcessCopyOptions(ParseState *pstate,
 		{
 			char	   *format = defGetString(defel);
 			List	   *qualified_format;
-			char	   *schema;
-			char	   *fmt;
 			Oid			arg_types[1];
 			Oid			handler = InvalidOid;
 
@@ -535,15 +536,6 @@ ProcessCopyOptions(ParseState *pstate,
 			format_specified = true;
 
 			qualified_format = stringToQualifiedNameList(format, NULL);
-			DeconstructQualifiedName(qualified_format, &schema, &fmt);
-			if (!schema || strcmp(schema, "pg_catalog") == 0)
-			{
-				if (strcmp(fmt, "csv") == 0)
-					opts_out->csv_mode = true;
-				else if (strcmp(fmt, "binary") == 0)
-					opts_out->binary = true;
-			}
-
 			arg_types[0] = INTERNALOID;
 			handler = LookupFuncName(qualified_format, 1,
 									 arg_types, true);
@@ -562,6 +554,11 @@ ProcessCopyOptions(ParseState *pstate,
 						 parser_errposition(pstate, defel->location)));
 
 			opts_out->handler = handler;
+			if (opts_out->handler == F_CSV)
+				csv_mode = true;
+			else if (opts_out->handler == F_BINARY)
+				binary = true;
+
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -716,31 +713,31 @@ ProcessCopyOptions(ParseState *pstate,
 	 * Check for incompatible options (must do these three before inserting
 	 * defaults)
 	 */
-	if (opts_out->binary && opts_out->delim)
+	if (binary && opts_out->delim)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("cannot specify %s in BINARY mode", "DELIMITER")));
 
-	if (opts_out->binary && opts_out->null_print)
+	if (binary && opts_out->null_print)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("cannot specify %s in BINARY mode", "NULL")));
 
-	if (opts_out->binary && opts_out->default_print)
+	if (binary && opts_out->default_print)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("cannot specify %s in BINARY mode", "DEFAULT")));
 
 	/* Set defaults for omitted options */
 	if (!opts_out->delim)
-		opts_out->delim = opts_out->csv_mode ? "," : "\t";
+		opts_out->delim = csv_mode ? "," : "\t";
 
 	if (!opts_out->null_print)
-		opts_out->null_print = opts_out->csv_mode ? "" : "\\N";
+		opts_out->null_print = csv_mode ? "" : "\\N";
 	opts_out->null_print_len = strlen(opts_out->null_print);
 
-	if (opts_out->csv_mode)
+	if (csv_mode)
 	{
 		if (!opts_out->quote)
 			opts_out->quote = "\"";
@@ -788,7 +785,7 @@ ProcessCopyOptions(ParseState *pstate,
 	 * future-proofing.  Likewise we disallow all digits though only octal
 	 * digits are actually dangerous.
 	 */
-	if (!opts_out->csv_mode &&
+	if (!csv_mode &&
 		strchr("\\.abcdefghijklmnopqrstuvwxyz0123456789",
 			   opts_out->delim[0]) != NULL)
 		ereport(ERROR,
@@ -796,43 +793,43 @@ ProcessCopyOptions(ParseState *pstate,
 				 errmsg("COPY delimiter cannot be \"%s\"", opts_out->delim)));
 
 	/* Check header */
-	if (opts_out->binary && opts_out->header_line)
+	if (binary && opts_out->header_line)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("cannot specify %s in BINARY mode", "HEADER")));
 
 	/* Check quote */
-	if (!opts_out->csv_mode && opts_out->quote != NULL)
+	if (!csv_mode && opts_out->quote != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("COPY %s requires CSV mode", "QUOTE")));
 
-	if (opts_out->csv_mode && strlen(opts_out->quote) != 1)
+	if (csv_mode && strlen(opts_out->quote) != 1)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 				 errmsg("COPY quote must be a single one-byte character")));
 
-	if (opts_out->csv_mode && opts_out->delim[0] == opts_out->quote[0])
+	if (csv_mode && opts_out->delim[0] == opts_out->quote[0])
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("COPY delimiter and quote must be different")));
 
 	/* Check escape */
-	if (!opts_out->csv_mode && opts_out->escape != NULL)
+	if (!csv_mode && opts_out->escape != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("COPY %s requires CSV mode", "ESCAPE")));
 
-	if (opts_out->csv_mode && strlen(opts_out->escape) != 1)
+	if (csv_mode && strlen(opts_out->escape) != 1)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 				 errmsg("COPY escape must be a single one-byte character")));
 
 	/* Check force_quote */
-	if (!opts_out->csv_mode && (opts_out->force_quote || opts_out->force_quote_all))
+	if (!csv_mode && (opts_out->force_quote || opts_out->force_quote_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -846,8 +843,8 @@ ProcessCopyOptions(ParseState *pstate,
 						"COPY FROM")));
 
 	/* Check force_notnull */
-	if (!opts_out->csv_mode && (opts_out->force_notnull != NIL ||
-								opts_out->force_notnull_all))
+	if (!csv_mode && (opts_out->force_notnull != NIL ||
+					  opts_out->force_notnull_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -862,8 +859,8 @@ ProcessCopyOptions(ParseState *pstate,
 						"COPY TO")));
 
 	/* Check force_null */
-	if (!opts_out->csv_mode && (opts_out->force_null != NIL ||
-								opts_out->force_null_all))
+	if (!csv_mode && (opts_out->force_null != NIL ||
+					  opts_out->force_null_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -887,7 +884,7 @@ ProcessCopyOptions(ParseState *pstate,
 						"NULL")));
 
 	/* Don't allow the CSV quote char to appear in the null string. */
-	if (opts_out->csv_mode &&
+	if (csv_mode &&
 		strchr(opts_out->null_print, opts_out->quote[0]) != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -923,7 +920,7 @@ ProcessCopyOptions(ParseState *pstate,
 							"DEFAULT")));
 
 		/* Don't allow the CSV quote char to appear in the default string. */
-		if (opts_out->csv_mode &&
+		if (csv_mode &&
 			strchr(opts_out->default_print, opts_out->quote[0]) != NULL)
 			ereport(ERROR,
 					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@@ -940,7 +937,7 @@ ProcessCopyOptions(ParseState *pstate,
 					 errmsg("NULL specification and DEFAULT specification cannot be the same")));
 	}
 	/* Check on_error */
-	if (opts_out->binary && opts_out->on_error != COPY_ON_ERROR_STOP)
+	if (binary && opts_out->on_error != COPY_ON_ERROR_STOP)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("only ON_ERROR STOP is allowed in BINARY mode")));
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 74a8051c24c..b09b6b3e101 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -275,7 +275,7 @@ CopyFromErrorCallback(void *arg)
 				   cstate->cur_relname);
 		return;
 	}
-	if (cstate->opts.binary)
+	if (cstate->opts.handler == F_BINARY)
 	{
 		/* can't usefully display the data */
 		if (cstate->cur_attname)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index de68b53b000..148fa1f2062 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -73,6 +73,7 @@
 #include "pgstat.h"
 #include "port/pg_bswap.h"
 #include "utils/builtins.h"
+#include "utils/fmgroids.h"
 #include "utils/rel.h"
 
 #define ISOCTAL(c) (((c) >= '0') && ((c) <= '7'))
@@ -171,7 +172,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = (cstate->opts.handler == F_BINARY ? 1 : 0);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
@@ -758,7 +759,7 @@ bool
 NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 {
 	return NextCopyFromRawFieldsInternal(cstate, fields, nfields,
-										 cstate->opts.csv_mode);
+										 cstate->opts.handler == F_CSV);
 }
 
 /*
@@ -785,7 +786,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 	bool		done;
 
 	/* only available for text or csv input */
-	Assert(!cstate->opts.binary);
+	Assert(cstate->opts.handler != F_BINARY);
 
 	/* on input check that the header line is correct if needed */
 	if (cstate->cur_lineno == 0 && cstate->opts.header_line)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 4e1b154cad2..4f8f5813172 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -167,7 +167,7 @@ CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
-			if (cstate->opts.csv_mode)
+			if (cstate->opts.handler == F_CSV)
 				CopyAttributeOutCSV(cstate, colname, false);
 			else
 				CopyAttributeOutText(cstate, colname);
@@ -344,7 +344,7 @@ SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = (cstate->opts.handler == F_BINARY ? 1 : 0);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 4525261fcc4..04f8f5ef1b2 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -61,9 +61,7 @@ typedef struct CopyFormatOptions
 	/* parameters from the COPY command */
 	int			file_encoding;	/* file or remote side's character encoding,
 								 * -1 if not specified */
-	bool		binary;			/* binary format? */
 	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
 	CopyHeaderChoice header_line;	/* header line? */
 	char	   *null_print;		/* NULL marker string (server encoding!) */
 	int			null_print_len; /* length of same */
-- 
2.47.2

v40-0006-Add-document-how-to-write-a-COPY-handler.patchtext/x-patch; charset=us-asciiDownload
From 421c34b76a5e9fe45b49bdbe52ecda4d0f638617 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 19 Mar 2025 11:46:34 +0900
Subject: [PATCH v40 6/6] Add document how to write a COPY handler

This is WIP because we haven't decided our API yet.

Co-authored-by: David G. Johnston <david.g.johnston@gmail.com>
---
 doc/src/sgml/copy-handler.sgml | 394 +++++++++++++++++++++++++++++++++
 doc/src/sgml/filelist.sgml     |   1 +
 doc/src/sgml/postgres.sgml     |   1 +
 src/include/commands/copyapi.h |   9 +-
 4 files changed, 401 insertions(+), 4 deletions(-)
 create mode 100644 doc/src/sgml/copy-handler.sgml

diff --git a/doc/src/sgml/copy-handler.sgml b/doc/src/sgml/copy-handler.sgml
new file mode 100644
index 00000000000..5bc87d16662
--- /dev/null
+++ b/doc/src/sgml/copy-handler.sgml
@@ -0,0 +1,394 @@
+<!-- doc/src/sgml/copy-handler.sgml -->
+
+<chapter id="copy-handler">
+ <title>Writing a Copy Handler</title>
+
+ <indexterm zone="copy-handler">
+  <primary><literal>COPY</literal> handler</primary>
+ </indexterm>
+
+ <para>
+  <productname>PostgreSQL</productname> supports
+  custom <link linkend="sql-copy"><literal>COPY</literal></link> handlers;
+  adding additional <replaceable>format_name</replaceable> options to
+  the <literal>FORMAT</literal> clause.
+ </para>
+
+ <para>
+  At the SQL level, a copy handler method is represented by a single SQL
+  function (see <xref linkend="sql-createfunction"/>), typically implemented in
+  C, having the signature
+<synopsis>
+<replaceable>format_name</replaceable>(internal) RETURNS <literal>copy_handler</literal>
+</synopsis>
+  The function's name is then accepted as a
+  valid <replaceable>format_name</replaceable>. The return
+  pseudo-type <literal>copy_handler</literal> informs the system that this
+  function needs to be registered as a copy handler.
+  The <type>internal</type> argument is a dummy that prevents this function
+  from being called directly from an SQL command. As the handler
+  implementation must be server-lifetime immutable; this SQL function's
+  volatility should be marked immutable. The <literal>link_symbol</literal>
+  for this function is the name of the implementation function, described
+  next.
+ </para>
+
+ <para>
+  The implementation function signature expected for the function named
+  in the <literal>link_symbol</literal> is:
+<synopsis>
+Datum
+<replaceable>copy_format_handler</replaceable>(PG_FUNCTION_ARGS)
+</synopsis>
+  The convention for the name is to replace the word
+  <replaceable>format</replaceable> in the placeholder above with the value given
+  to <replaceable>format_name</replaceable> in the SQL function.
+  The first argument is a <type>boolean</type> that indicates whether the handler
+  must provide a pointer to its implementation for <literal>COPY FROM</literal>
+  (a <type>CopyFromRoutine *</type>). If <literal>false</literal>, the handler
+  must provide a pointer to its implementation of <literal>COPY TO</literal>
+  (a <type>CopyToRoutine *</type>). These structs are declared in
+  <filename>src/include/commands/copyapi.h</filename>.
+ </para>
+
+ <para>
+  The structs hold pointers to implementation functions for initializing,
+  starting, processing rows, and ending a copy operation. The specific
+  structures vary a bit between <literal>COPY FROM</literal> and
+  <literal>COPY TO</literal> so the next two sections describes each
+  in detail.
+ </para>
+
+ <sect1 id="copy-handler-from">
+  <title>Copy From Handler</title>
+
+  <para>
+   The opening to this chapter describes how the executor will call the main
+   handler function with, in this case,
+   a <type>boolean</type> <literal>true</literal>, and expect to receive a
+   <type>CopyFromRoutine *</type> <type>Datum</type>. This section describes
+   the components of the <type>CopyFromRoutine</type> struct.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromInFunc(CopyFromState cstate,
+               Oid atttypid,
+               FmgrInfo *finfo,
+               Oid *typioparam);
+</programlisting>
+
+   This sets input function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY FROM</literal>. If
+   this <literal>COPY</literal> handler doesn't use any input functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid *typioparam</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to define the OID of the type to
+       pass to the input function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromStart(CopyFromState cstate,
+              TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY FROM</literal>. This function is called once at
+   the beginning of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data needs to be
+       copied. This can be used for any initialization steps required by a
+       format.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyFromOneRow(CopyFromState cstate,
+               ExprContext *econtext,
+               Datum *values,
+               bool *nulls);
+</programlisting>
+
+   This reads one row from the source and fill <literal>values</literal>
+   and <literal>nulls</literal>. If there is one or more tuples to be read,
+   this must return <literal>true</literal>. If there are no more tuples to
+   read, this must return <literal>false</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>ExprContext *econtext</literal></term>
+     <listitem>
+      <para>
+       This is used to evaluate default expression for each column that is
+       either not read from the file or is using
+       the <literal>DEFAULT</literal> option of <literal>COPY
+       FROM</literal>. It is <literal>NULL</literal> if no default values are
+       used.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Datum *values</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store read tuples.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>bool *nulls</literal></term>
+     <listitem>
+      <para>
+       This is an output variable to store whether the read columns
+       are <literal>NULL</literal> or not.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyFromEnd(CopyFromState cstate);
+</programlisting>
+
+   This ends a <literal>COPY FROM</literal>. This function is called once at
+   the end of <literal>COPY FROM</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyFromState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY FROM</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyFromStateGetData() and CopyFromSkipErrowRow()?
+  </para>
+ </sect1>
+
+ <sect1 id="copy-handler-to">
+  <title>Copy To Handler</title>
+
+  <para>
+   The <literal>COPY</literal> handler function for <literal>COPY
+   TO</literal> returns a <type>CopyToRoutine</type> struct containing
+   pointers to the functions described below. All functions are required.
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToOutFunc(CopyToState cstate,
+              Oid atttypid,
+              FmgrInfo *finfo);
+</programlisting>
+
+   This sets output function information for the
+   given <literal>atttypid</literal> attribute. This function is called once
+   at the beginning of <literal>COPY TO</literal>. If
+   this <literal>COPY</literal> handler doesn't use any output functions, this
+   function doesn't need to do anything.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>Oid atttypid</literal></term>
+     <listitem>
+      <para>
+       This is the OID of data type used by the relation's attribute.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>FmgrInfo *finfo</literal></term>
+     <listitem>
+      <para>
+       This can be optionally filled to provide the catalog information of
+       the output function.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToStart(CopyToState cstate,
+            TupleDesc tupDesc);
+</programlisting>
+
+   This starts a <literal>COPY TO</literal>. This function is called once at
+   the beginning of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleDesc tupDesc</literal></term>
+     <listitem>
+      <para>
+       This is the tuple descriptor of the relation where the data is read.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+bool
+CopyToOneRow(CopyToState cstate,
+             TupleTableSlot *slot);
+</programlisting>
+
+   This writes one row stored in <literal>slot</literal> to the destination.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+
+    <varlistentry>
+     <term><literal>TupleTableSlot *slot</literal></term>
+     <listitem>
+      <para>
+       This is used to get row to be written.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+<programlisting>
+void
+CopyToEnd(CopyToState cstate);
+</programlisting>
+
+   This ends a <literal>COPY TO</literal>. This function is called once at
+   the end of <literal>COPY TO</literal>.
+
+   <variablelist>
+    <varlistentry>
+     <term><literal>CopyToState *cstate</literal></term>
+     <listitem>
+      <para>
+       This is an internal struct that contains all the state variables used
+       throughout a <literal>COPY TO</literal> operation.
+      </para>
+     </listitem>
+    </varlistentry>
+   </variablelist>
+  </para>
+
+  <para>
+   TODO: Add CopyToStateFlush()?
+  </para>
+ </sect1>
+</chapter>
diff --git a/doc/src/sgml/filelist.sgml b/doc/src/sgml/filelist.sgml
index fef9584f908..700cf22b502 100644
--- a/doc/src/sgml/filelist.sgml
+++ b/doc/src/sgml/filelist.sgml
@@ -107,6 +107,7 @@
 <!ENTITY storage    SYSTEM "storage.sgml">
 <!ENTITY transaction     SYSTEM "xact.sgml">
 <!ENTITY tablesample-method SYSTEM "tablesample-method.sgml">
+<!ENTITY copy-handler SYSTEM "copy-handler.sgml">
 <!ENTITY wal-for-extensions SYSTEM "wal-for-extensions.sgml">
 <!ENTITY generic-wal SYSTEM "generic-wal.sgml">
 <!ENTITY custom-rmgr SYSTEM "custom-rmgr.sgml">
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index af476c82fcc..8ba319ae2df 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -254,6 +254,7 @@ break is not needed in a wider output rendering.
   &plhandler;
   &fdwhandler;
   &tablesample-method;
+  &copy-handler;
   &custom-scan;
   &geqo;
   &tableam;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 500ece7d5bb..24710cb667a 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -28,10 +28,10 @@ typedef struct CopyToRoutine
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the output function.
-	 *
-	 * 'atttypid' is the OID of data type used by the relation's attribute.
 	 */
 	void		(*CopyToOutFunc) (CopyToState cstate, Oid atttypid,
 								  FmgrInfo *finfo);
@@ -70,12 +70,13 @@ typedef struct CopyFromRoutine
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
 	 *
+	 * 'atttypid' is the OID of data type used by the relation's attribute.
+	 *
 	 * 'finfo' can be optionally filled to provide the catalog information of
 	 * the input function.
 	 *
 	 * 'typioparam' can be optionally filled to define the OID of the type to
-	 * pass to the input function.'atttypid' is the OID of data type used by
-	 * the relation's attribute.
+	 * pass to the input function.
 	 */
 	void		(*CopyFromInFunc) (CopyFromState cstate, Oid atttypid,
 								   FmgrInfo *finfo, Oid *typioparam);
-- 
2.47.2

#271Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#270)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Apr 25, 2025 at 5:45 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

I've updated the patch set. See the attached v40 patch set.

In <CAD21AoAXzwPC7jjPMTcT80hnzmPa2SUJkiqdYHweEY8sZscEMA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 23 Apr 2025 23:44:55 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Are the followings correct?

1. Move invalid input patterns in
src/test/modules/test_copy_format/sql/invalid.sql to
src/test/regress/sql/copy.sql as much as possible.
2. Create
src/test/modules/test_copy_format/sql/test_copy_format.sql
and move all contents in existing *.sql to the file.
3. Add comments what the tests expect to
src/test/modules/test_copy_format/sql/test_copy_format.sql.
4. Remove CopyFormatOptions::{binary,csv_mode}.

Agreed with the above items.

Done except 1. because 1. is removed by 3. in the following
list:

----

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

----

0005 is added for 4. Could you squash 0004 ("Use copy
handler for bult-in formats") and 0005 ("Remove
CopyFormatOptions::{binary,csv_mode}") if needed when you
push?

6. Use handler OID for detecting the default built-in format
instead of comparing the given format as string.

Done.

7. Update documentation.

Could someone help this? 0007 is the draft commit for this.

There are 3 unconfirmed suggested changes for tests in:
/messages/by-id/20250330.113126.433742864258096312.kou@clear-code.com

Here are my opinions for them:

1.: There is no difference between single-quoting and
double-quoting here. Because the information what quote
was used for the given FORMAT value isn't remained
here. Should we update gram.y?

2.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

3.: I don't have a strong opinion for it. If nobody objects
it, I'll remove them.

Is the 1. required for "ready for merge"? If so, is there
any suggestion? I don't have a strong opinion for it.

If there are no more opinions for 2. and 3., I'll remove
them.

Agreed.

1.: I didn't do anything. Because there is no suggestion.

2., 3.: Done.

Thank you for updating the patches.

One of the primary considerations we need to address is the treatment
of the specified format name. The current patch set utilizes built-in
formats (namely 'csv', 'text', and 'binary') when the format name is
either unqualified or explicitly specified with 'pg_catalog' as the
schema. In all other cases, we search for custom format handler
functions based on the search_path. To be frank, I have reservations
about this interface design, as the dependence of the specified custom
format name on the search_path could potentially confuse users.

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

Custom copy format modules could be loaded through
shared_preload_libraries, session_preload_libraries, or the LOAD
command. Extensions could register their own options within this
framework, for example:

RegisterCustomCopyFormatOption(JsonLinesFormatId,
"custom_option",
custom_option_handler);

This approach offers several advantages: it would eliminate the
search_path issue, provide greater flexibility, and potentially
simplify the overall interface for users and developers alike. We
might be able to provide a view showing the registered custom COPY
format in the future. Also, these interfaces align with other
customizable functionalities such as custom rmgr, custom lwlock,
custom waitevent, and custom EXPLAIN option etc.

Feedback is very welcome.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#272Michael Paquier
michael@paquier.xyz
In reply to: Masahiko Sawada (#271)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, May 01, 2025 at 12:15:30PM -0700, Masahiko Sawada wrote:

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

Hmm. How much should we care about the observability of the COPY
format used by a given backend? Storing this information in a
backend's TopMemoryContext is OK to get the extensibility basics to
work, but could it make sense to use some shmem state to allocate a
uint32 ID that could be shared by all backends. Contrary to EXPLAIN,
COPY commands usually run for a very long time, so I am wondering if
these APIs should be designed so as it would be possible to monitor
the format used. One layer where the format information could be made
available is the progress reporting view for COPY, for example. I can
also imagine a pgstats kind where we do COPY stats aggregates, with a
per-format pgstats kind, and sharing a fixed ID across multiple
backends is relevant (when flushing the stats at shutdown, we would
use a name/ID mapping like replication slots).

I don't think that this needs to be relevant for the option part, just
for the format where, I suspect, we should store in a shmem array
based on the ID allocated the name of the format, the library of the
callback and the function name fed to load_external_function().

Note that custom LWLock and wait events use a shmem state for
monitoring purposes, where we are able to do ID->format name lookups
as much as format->ID lookups. Perhaps it's OK not to do that for
COPY, but I am wondering if we'd better design things from scratch
with states in shmem state knowing that COPY is a long-running
operation, and that if one mixes multiple formats they would most
likely want to know which formats are bottlenecks, through SQL. Cloud
providers would love that.

This approach offers several advantages: it would eliminate the
search_path issue, provide greater flexibility, and potentially
simplify the overall interface for users and developers alike. We
might be able to provide a view showing the registered custom COPY
format in the future. Also, these interfaces align with other
customizable functionalities such as custom rmgr, custom lwlock,
custom waitevent, and custom EXPLAIN option etc.

Yeah, agreed with the search_path concerns. We are getting better at
making areas of Postgres more pluggable lately, having a loading path
where we don't have any of these potential issues by design matters.
--
Michael

#273Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#272)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, May 1, 2025 at 4:04 PM Michael Paquier <michael@paquier.xyz> wrote:

On Thu, May 01, 2025 at 12:15:30PM -0700, Masahiko Sawada wrote:

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

Hmm. How much should we care about the observability of the COPY
format used by a given backend? Storing this information in a
backend's TopMemoryContext is OK to get the extensibility basics to
work, but could it make sense to use some shmem state to allocate a
uint32 ID that could be shared by all backends. Contrary to EXPLAIN,
COPY commands usually run for a very long time, so I am wondering if
these APIs should be designed so as it would be possible to monitor
the format used. One layer where the format information could be made
available is the progress reporting view for COPY, for example. I can
also imagine a pgstats kind where we do COPY stats aggregates, with a
per-format pgstats kind, and sharing a fixed ID across multiple
backends is relevant (when flushing the stats at shutdown, we would
use a name/ID mapping like replication slots).

I don't think that this needs to be relevant for the option part, just
for the format where, I suspect, we should store in a shmem array
based on the ID allocated the name of the format, the library of the
callback and the function name fed to load_external_function().

Note that custom LWLock and wait events use a shmem state for
monitoring purposes, where we are able to do ID->format name lookups
as much as format->ID lookups. Perhaps it's OK not to do that for
COPY, but I am wondering if we'd better design things from scratch
with states in shmem state knowing that COPY is a long-running
operation, and that if one mixes multiple formats they would most
likely want to know which formats are bottlenecks, through SQL. Cloud
providers would love that.

Good point. It would make sense to have such information as a map on
shmem. It might be better to use dshash here since a custom copy
format module can be loaded at runtime. Or we can use dynahash with
large enough elements.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#274Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#271)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBuEqcz2_+dpA3WTiDUF=FgudPBKwM+nvH+qHT-k4p5mA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 1 May 2025 12:15:30 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

One of the primary considerations we need to address is the treatment
of the specified format name. The current patch set utilizes built-in
formats (namely 'csv', 'text', and 'binary') when the format name is
either unqualified or explicitly specified with 'pg_catalog' as the
schema. In all other cases, we search for custom format handler
functions based on the search_path. To be frank, I have reservations
about this interface design, as the dependence of the specified custom
format name on the search_path could potentially confuse users.

How about requiring schema for all custom formats?

Valid:

COPY ... TO ... (FORMAT 'text');
COPY ... TO ... (FORMAT 'my_schema.jsonlines');

Invalid:

COPY ... TO ... (FORMAT 'jsonlines'); -- no schema
COPY ... TO ... (FORMAT 'pg_catalog.text'); -- needless schema

If we require "schema" for all custom formats, we don't need
to depend on search_path.

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

I don't object the suggested interface because I don't have
a strong opinion how to implement this feature.

Why do we need to assign a unique ID? For performance? For
RegisterCustomCopyFormatOption()?

I think that we don't need to use it so much in COPY. We
don't need to use format name and assigned ID after we
retrieve a corresponding Copy{To,From}Routine. Because all
needed information are in Copy{To,From}Routine.

Extensions could register their own options within this
framework, for example:

RegisterCustomCopyFormatOption(JsonLinesFormatId,
"custom_option",
custom_option_handler);

Can we defer to discuss how to add support for custom
options while we focus on the first implementation? Earlier
patch sets with the current approach had custom options
support but it's removed in the first implementation.

(BTW, I think that it's not a good API because we want COPY
FROM only options and COPY TO only options something like
"compression level".)

This approach offers several advantages: it would eliminate the
search_path issue, provide greater flexibility, and potentially
simplify the overall interface for users and developers alike.

What contributes to the "flexibility"? Developers can call
multiple Register* functions in _PG_Init(), right?

Thanks,
--
kou

#275Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#273)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoB82+MoP_RJ=zzhO9KaHK4LbfGjORkre34C7g-xsCdegQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 15:52:49 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Hmm. How much should we care about the observability of the COPY
format used by a given backend? Storing this information in a
backend's TopMemoryContext is OK to get the extensibility basics to
work, but could it make sense to use some shmem state to allocate a
uint32 ID that could be shared by all backends. Contrary to EXPLAIN,
COPY commands usually run for a very long time, so I am wondering if
these APIs should be designed so as it would be possible to monitor
the format used. One layer where the format information could be made
available is the progress reporting view for COPY, for example. I can
also imagine a pgstats kind where we do COPY stats aggregates, with a
per-format pgstats kind, and sharing a fixed ID across multiple
backends is relevant (when flushing the stats at shutdown, we would
use a name/ID mapping like replication slots).

I don't think that this needs to be relevant for the option part, just
for the format where, I suspect, we should store in a shmem array
based on the ID allocated the name of the format, the library of the
callback and the function name fed to load_external_function().

Note that custom LWLock and wait events use a shmem state for
monitoring purposes, where we are able to do ID->format name lookups
as much as format->ID lookups. Perhaps it's OK not to do that for
COPY, but I am wondering if we'd better design things from scratch
with states in shmem state knowing that COPY is a long-running
operation, and that if one mixes multiple formats they would most
likely want to know which formats are bottlenecks, through SQL. Cloud
providers would love that.

Good point. It would make sense to have such information as a map on
shmem. It might be better to use dshash here since a custom copy
format module can be loaded at runtime. Or we can use dynahash with
large enough elements.

If we don't need to assign an ID for each format, can we
avoid it? If we implement it, is this approach more complex
than the current table sampling method like approach?

Thanks,
--
kou

#276Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#274)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 2, 2025 at 7:20 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBuEqcz2_+dpA3WTiDUF=FgudPBKwM+nvH+qHT-k4p5mA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 1 May 2025 12:15:30 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

One of the primary considerations we need to address is the treatment
of the specified format name. The current patch set utilizes built-in
formats (namely 'csv', 'text', and 'binary') when the format name is
either unqualified or explicitly specified with 'pg_catalog' as the
schema. In all other cases, we search for custom format handler
functions based on the search_path. To be frank, I have reservations
about this interface design, as the dependence of the specified custom
format name on the search_path could potentially confuse users.

How about requiring schema for all custom formats?

Valid:

COPY ... TO ... (FORMAT 'text');
COPY ... TO ... (FORMAT 'my_schema.jsonlines');

Invalid:

COPY ... TO ... (FORMAT 'jsonlines'); -- no schema
COPY ... TO ... (FORMAT 'pg_catalog.text'); -- needless schema

If we require "schema" for all custom formats, we don't need
to depend on search_path.

I'm concerned that users cannot use the same format name in the FORMAT
option depending on which schema the handler function is created.

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

I don't object the suggested interface because I don't have
a strong opinion how to implement this feature.

Why do we need to assign a unique ID? For performance? For
RegisterCustomCopyFormatOption()?

I think it's required for monitoring purposes for example. For
instance, we can set the format ID in the progress information and the
progress view can fetch the format name by the ID so that users can
see what format is being used in the COPY command.

Extensions could register their own options within this
framework, for example:

RegisterCustomCopyFormatOption(JsonLinesFormatId,
"custom_option",
custom_option_handler);

Can we defer to discuss how to add support for custom
options while we focus on the first implementation? Earlier
patch sets with the current approach had custom options
support but it's removed in the first implementation.

I think we can skip the custom option patch for the first
implementation but still need to discuss how we will be able to
implement it to understand the big picture of this feature. Otherwise
we could end up going the wrong direction.

(BTW, I think that it's not a good API because we want COPY
FROM only options and COPY TO only options something like
"compression level".)

Why does this matter in terms of API? I think that even with this API
we can pass is_from to the option handler function so that it
validates the option based on it.

This approach offers several advantages: it would eliminate the
search_path issue, provide greater flexibility, and potentially
simplify the overall interface for users and developers alike.

What contributes to the "flexibility"? Developers can call
multiple Register* functions in _PG_Init(), right?

I think that with a tablesample-like approach we need to do everything
based on one handler function and callbacks returned from it whereas
there is no such limitation with C API style.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#277Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#276)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBGRFStdVbHUcxL0QB8wn92J3Sn-6x=RhsSMuhepRH0NQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 21:38:32 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about requiring schema for all custom formats?

Valid:

COPY ... TO ... (FORMAT 'text');
COPY ... TO ... (FORMAT 'my_schema.jsonlines');

Invalid:

COPY ... TO ... (FORMAT 'jsonlines'); -- no schema
COPY ... TO ... (FORMAT 'pg_catalog.text'); -- needless schema

If we require "schema" for all custom formats, we don't need
to depend on search_path.

I'm concerned that users cannot use the same format name in the FORMAT
option depending on which schema the handler function is created.

I'm not sure that it's a problem or not. If users want to
use the same format name, they can install the handler
function to the same schema.

Why do we need to assign a unique ID? For performance? For
RegisterCustomCopyFormatOption()?

I think it's required for monitoring purposes for example. For
instance, we can set the format ID in the progress information and the
progress view can fetch the format name by the ID so that users can
see what format is being used in the COPY command.

How about setting the format name instead of the format ID
in the progress information?

I think we can skip the custom option patch for the first
implementation but still need to discuss how we will be able to
implement it to understand the big picture of this feature. Otherwise
we could end up going the wrong direction.

I think that we don't need to discuss it deeply because we
have many options with this approach. We can call C
functions in _PG_Init(). I think that this feature will not
be a blocker of this approach.

(BTW, I think that it's not a good API because we want COPY
FROM only options and COPY TO only options something like
"compression level".)

Why does this matter in terms of API? I think that even with this API
we can pass is_from to the option handler function so that it
validates the option based on it.

If we choose the API, each custom format developer needs to
handle the case in handler function. For example, if we pass
information whether this option is only for TO to
PostgreSQL, ProcessCopyOptions() not handler functions can
handle it.

Anyway, I think that we don't need to discuss this deeply
for now.

What contributes to the "flexibility"? Developers can call
multiple Register* functions in _PG_Init(), right?

I think that with a tablesample-like approach we need to do everything
based on one handler function and callbacks returned from it whereas
there is no such limitation with C API style.

Thanks for clarifying it. It seems that my understanding is
correct.

I hope that the flexibility is needed flexibility and too
much flexibility doesn't introduce too much complexity.

Thanks,
--
kou

#278David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#271)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thursday, May 1, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

How does this fix the search_path concern? Are query writers supposed to
put JsonLinesFormatId into their queries? Or are you just prohibiting a
DBA from ever installing an extension that wants to register a format name
that is already registered so that no namespace is ever required?

ISTM accommodating a namespace for formats is required just like we do for
virtually every other named object in the system. At least, if we want to
play nice with extension authors. It doesn’t have to be within the
existing pg_proc scope, we can create a new scope if desired, but
abolishing it seems unwise.

It would be more consistent with established policy if we didn’t make
exceptions for text/csv/binary - if the DBA permits a text format to exist
in a different schema and that schema appears first in the search_path,
unqualified references to text would resolve to the non-core handler. We
already protect ourselves with safe search_paths. This is really no
different than if someone wanted to implement a now() function and people
are putting pg_catalog from of existing usage. It’s the DBAs problem, not
ours.

David J.

#279Masahiko Sawada
sawada.mshk@gmail.com
In reply to: David G. Johnston (#278)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 2, 2025 at 10:36 PM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Thursday, May 1, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

In light of these concerns, I've been contemplating alternative
interface designs. One promising approach would involve registering
custom copy formats via a C function during module loading
(specifically, in _PG_init()). This method would require extension
authors to invoke a registration function, say
RegisterCustomCopyFormat(), in _PG_init() as follows:

JsonLinesFormatId = RegisterCustomCopyFormat("jsonlines",
&JsonLinesCopyToRoutine,
&JsonLinesCopyFromRoutine);

The registration function would validate the format name and store it
in TopMemoryContext. It would then return a unique identifier that can
be used subsequently to reference the custom copy format extension.

How does this fix the search_path concern? Are query writers supposed to put JsonLinesFormatId into their queries? Or are you just prohibiting a DBA from ever installing an extension that wants to register a format name that is already registered so that no namespace is ever required?

Users can specify "jsonlines", passed in the first argument to the
register function, to the COPY FORMAT option in this case. While
JsonLinesFormatId is reserved for internal operations such as module
processing and monitoring, any attempt to load another custom COPY
format module named 'jsonlines' will result in an error.

ISTM accommodating a namespace for formats is required just like we do for virtually every other named object in the system. At least, if we want to play nice with extension authors. It doesn’t have to be within the existing pg_proc scope, we can create a new scope if desired, but abolishing it seems unwise.

It would be more consistent with established policy if we didn’t make exceptions for text/csv/binary - if the DBA permits a text format to exist in a different schema and that schema appears first in the search_path, unqualified references to text would resolve to the non-core handler. We already protect ourselves with safe search_paths. This is really no different than if someone wanted to implement a now() function and people are putting pg_catalog from of existing usage. It’s the DBAs problem, not ours.

I'm concerned about allowing multiple 'text' format implementations
with identical names within the database, as this could lead to
considerable confusion. When users specify 'text', it would be more
logical to guarantee that the built-in 'text' format is consistently
used. This principle aligns with other customizable components, such
as custom resource managers, wait events, lightweight locks, and
custom scans. These components maintain their built-in data/types and
explicitly prevent the registration of duplicate names.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#280Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#277)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 2, 2025 at 9:56 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBGRFStdVbHUcxL0QB8wn92J3Sn-6x=RhsSMuhepRH0NQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 21:38:32 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about requiring schema for all custom formats?

Valid:

COPY ... TO ... (FORMAT 'text');
COPY ... TO ... (FORMAT 'my_schema.jsonlines');

Invalid:

COPY ... TO ... (FORMAT 'jsonlines'); -- no schema
COPY ... TO ... (FORMAT 'pg_catalog.text'); -- needless schema

If we require "schema" for all custom formats, we don't need
to depend on search_path.

I'm concerned that users cannot use the same format name in the FORMAT
option depending on which schema the handler function is created.

I'm not sure that it's a problem or not. If users want to
use the same format name, they can install the handler
function to the same schema.

Why do we need to assign a unique ID? For performance? For
RegisterCustomCopyFormatOption()?

I think it's required for monitoring purposes for example. For
instance, we can set the format ID in the progress information and the
progress view can fetch the format name by the ID so that users can
see what format is being used in the COPY command.

How about setting the format name instead of the format ID
in the progress information?

The progress view can know only numbers. We need to extend the
progress view infrastructure so that we can pass other data types.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#281Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#280)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDnY2fhC7tp7jpn24AuwkeW-0YjFEtZbEfPwg8YcH6bAw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 23:02:25 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The progress view can know only numbers. We need to extend the
progress view infrastructure so that we can pass other data types.

Sorry. Could you tell me what APIs referred here?
pgstat_progress_*() functions in
src/include/utils/backend_progress.h?

Thanks,
--
kou

#282David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#279)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Friday, May 2, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I'm concerned about allowing multiple 'text' format implementations
with identical names within the database, as this could lead to
considerable confusion. When users specify 'text', it would be more
logical to guarantee that the built-in 'text' format is consistently
used.

Do you want to only give text/csv/binary this special treatment or also any
future format name we ever decide to implement in core. If an extension
takes up “xml” and we try to do that in core do we fail an upgrade because
of the conflict, and make it impossible to actually use said extension?

This principle aligns with other customizable components, such

as custom resource managers, wait events, lightweight locks, and
custom scans. These components maintain their built-in data/types and
explicitly prevent the registration of duplicate names.

I am totally lost on how any of those resemble this feature.

I’m all for registration to enable additional options and features - but am
against moving away from turning format into a namespaced identifier. This
is a query-facing feature where namespaces are common and fundamentally
required. I have some sympathy for the fact that until now one could not
prefix text/binary/csv with pg_catalog to be fully safe, but in reality
DBAs/query authors either put pg_catalog first in their search_path or make
an informed decision when they deviate. That is the established precedent
relevant to this feature. The power, and responsibility for education,
lies with the user.

David J.

#283Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#281)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 2, 2025 at 11:20 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoDnY2fhC7tp7jpn24AuwkeW-0YjFEtZbEfPwg8YcH6bAw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 23:02:25 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The progress view can know only numbers. We need to extend the
progress view infrastructure so that we can pass other data types.

Sorry. Could you tell me what APIs referred here?
pgstat_progress_*() functions in
src/include/utils/backend_progress.h?

The progress information is stored in PgBackendStatus defined in
backend_status.h:

/*
* Command progress reporting. Any command which wishes can advertise
* that it is running by setting st_progress_command,
* st_progress_command_target, and st_progress_param[].
* st_progress_command_target should be the OID of the relation which the
* command targets (we assume there's just one, as this is meant for
* utility commands), but the meaning of each element in the
* st_progress_param array is command-specific.
*/
ProgressCommandType st_progress_command;
Oid st_progress_command_target;
int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];

Then the progress view maps the numbers to the corresponding strings:

CREATE VIEW pg_stat_progress_copy AS
SELECT
S.pid AS pid, S.datid AS datid, D.datname AS datname,
S.relid AS relid,
CASE S.param5 WHEN 1 THEN 'COPY FROM'
WHEN 2 THEN 'COPY TO'
END AS command,
CASE S.param6 WHEN 1 THEN 'FILE'
WHEN 2 THEN 'PROGRAM'
WHEN 3 THEN 'PIPE'
WHEN 4 THEN 'CALLBACK'
END AS "type",
S.param1 AS bytes_processed,
S.param2 AS bytes_total,
S.param3 AS tuples_processed,
S.param4 AS tuples_excluded,
S.param7 AS tuples_skipped
FROM pg_stat_get_progress_info('COPY') AS S
LEFT JOIN pg_database D ON S.datid = D.oid;

So the idea is that the backend process sets the format ID somewhere
in st_progress_param, and then the progress view calls a SQL function,
say pg_stat_get_copy_format_name(), with the format ID that returns
the corresponding format name.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#284Masahiko Sawada
sawada.mshk@gmail.com
In reply to: David G. Johnston (#282)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 2, 2025 at 11:37 PM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Friday, May 2, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I'm concerned about allowing multiple 'text' format implementations
with identical names within the database, as this could lead to
considerable confusion. When users specify 'text', it would be more
logical to guarantee that the built-in 'text' format is consistently
used.

Do you want to only give text/csv/binary this special treatment or also any future format name we ever decide to implement in core. If an extension takes up “xml” and we try to do that in core do we fail an upgrade because of the conflict, and make it impossible to actually use said extension?

I guess that's an extension author's responsibility to upgrade its
extension so as to work with the new PostgreSQL version, or carefully
choose the format name. They can even name
'[extension_name].[format_name]' as a format name. Even with the
current patch design (i.e., search_path affects handler function
lookups), users would end up using the built-in 'xml' format without
notice after upgrade, no? I guess that could introduce another
problem.

I think that we need to ensure that if users specify text/csv/binary
the built-in formats are always used, to keep backward compatibility.

This principle aligns with other customizable components, such
as custom resource managers, wait events, lightweight locks, and
custom scans. These components maintain their built-in data/types and
explicitly prevent the registration of duplicate names.

I am totally lost on how any of those resemble this feature.

I’m all for registration to enable additional options and features - but am against moving away from turning format into a namespaced identifier. This is a query-facing feature where namespaces are common and fundamentally required.

That's a fair concern. But isn't the format name ultimately just an
option value, but not like a database object? As I mentioned above, I
think we need to keep backward compatibility but treating the built-in
formats special seems inconsistent with common name resolution
behavior.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#285David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#284)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Saturday, May 3, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that we need to ensure that if users specify text/csv/binary
the built-in formats are always used, to keep backward compatibility.

That was my original thinking, but it’s inconsistent with how functions
behave today. We don’t promise that installing extensions won’t cause
existing code to change.

I’m all for registration to enable additional options and features - but

am against moving away from turning format into a namespaced identifier.
This is a query-facing feature where namespaces are common and
fundamentally required.

That's a fair concern. But isn't the format name ultimately just an
option value, but not like a database object?

We get to decide that. And deciding in favor of “extensible database
object in a namespace’ makes more sense - leveraging all that pre-existing
design to play more nicely with extensions and give DBAs control. The SQL
command to add one is “create function” instead of “create copy format”.

David J.

#286Masahiko Sawada
sawada.mshk@gmail.com
In reply to: David G. Johnston (#285)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Sat, May 3, 2025 at 7:42 AM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Saturday, May 3, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that we need to ensure that if users specify text/csv/binary
the built-in formats are always used, to keep backward compatibility.

That was my original thinking, but it’s inconsistent with how functions behave today. We don’t promise that installing extensions won’t cause existing code to change.

I'm skeptical about whether that's an acceptable backward
compatibility breakage.

I’m all for registration to enable additional options and features - but am against moving away from turning format into a namespaced identifier. This is a query-facing feature where namespaces are common and fundamentally required.

That's a fair concern. But isn't the format name ultimately just an
option value, but not like a database object?

We get to decide that. And deciding in favor of “extensible database object in a namespace’ makes more sense - leveraging all that pre-existing design to play more nicely with extensions and give DBAs control. The SQL command to add one is “create function” instead of “create copy format”.

I still don't fully understand why the FORMAT value alone needs to be
treated like a schema-qualified object. If the concern is about name
conflict with future built-in formats, I would argue that the same
concern applies to custom EXPLAIN options and logical decoding
plugins. To me, the benefit of treating the COPY FORMAT value as a
schema-qualified object seems limited. Meanwhile, the risk of not
protecting built-in formats like 'text', 'csv', and 'binary' is
significant. If those names can be shadowed by extension via
search_patch, we lose backward compatibility.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#287David G. Johnston
david.g.johnston@gmail.com
In reply to: Masahiko Sawada (#286)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Saturday, May 3, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Sat, May 3, 2025 at 7:42 AM David G. Johnston
<david.g.johnston@gmail.com> wrote:

On Saturday, May 3, 2025, Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think that we need to ensure that if users specify text/csv/binary
the built-in formats are always used, to keep backward compatibility.

That was my original thinking, but it’s inconsistent with how functions

behave today. We don’t promise that installing extensions won’t cause
existing code to change.

I'm skeptical about whether that's an acceptable backward
compatibility breakage.

I’m skeptical you are correctly defining what backward-compatibility
requires.

Well, the only potential breakage is that we are searching for a matching
function by signature without first limiting the mandated return type. But
that is solve-able should anyone else see the problem as well.

The global format name has its merits but neither it nor the namespaced
format option suffer from breaking compatibility or policy.

I still don't fully understand why the FORMAT value alone needs to be
treated like a schema-qualified object. If the concern is about name
conflict with future built-in formats, I would argue that the same
concern applies to custom EXPLAIN options and logical decoding
plugins.

Then maybe we have the same “problem” in those places.

To me, the benefit of treating the COPY FORMAT value as a
schema-qualified object seems limited. Meanwhile, the risk of not
protecting built-in formats like 'text', 'csv', and 'binary' is
significant.

Really? You think lots of extensions are going to choose to use these
values even if they are permitted? Or are you concerned about attack
surfaces?

If those names can be shadowed by extension via
search_patch, we lose backward compatibility.

This is not a definition of backward-compatibility that I am familiar with.

If anything the ability for a DBA to arrange for such shadowing would be a
feature enhancement. They can drop-in a more efficient or desirable
implementation without having to change query code.

In any case, I’m doubtful either of us can make a convincing enough
argument to sway the other fully. Both options are plausible, IMO. Others
need to chime in.

David J.

#288Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#283)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoD9CBjh4u6jdiE0tG-jvejw-GJN8fUPoQSVhKh36HW2NQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 23:37:46 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The progress information is stored in PgBackendStatus defined in
backend_status.h:

/*
* Command progress reporting. Any command which wishes can advertise
* that it is running by setting st_progress_command,
* st_progress_command_target, and st_progress_param[].
* st_progress_command_target should be the OID of the relation which the
* command targets (we assume there's just one, as this is meant for
* utility commands), but the meaning of each element in the
* st_progress_param array is command-specific.
*/
ProgressCommandType st_progress_command;
Oid st_progress_command_target;
int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];

Then the progress view maps the numbers to the corresponding strings:

CREATE VIEW pg_stat_progress_copy AS
SELECT
S.pid AS pid, S.datid AS datid, D.datname AS datname,
S.relid AS relid,
CASE S.param5 WHEN 1 THEN 'COPY FROM'
WHEN 2 THEN 'COPY TO'
END AS command,
CASE S.param6 WHEN 1 THEN 'FILE'
WHEN 2 THEN 'PROGRAM'
WHEN 3 THEN 'PIPE'
WHEN 4 THEN 'CALLBACK'
END AS "type",
S.param1 AS bytes_processed,
S.param2 AS bytes_total,
S.param3 AS tuples_processed,
S.param4 AS tuples_excluded,
S.param7 AS tuples_skipped
FROM pg_stat_get_progress_info('COPY') AS S
LEFT JOIN pg_database D ON S.datid = D.oid;

Thanks. I didn't know about how to implement
pg_stat_progress_copy.

So the idea is that the backend process sets the format ID somewhere
in st_progress_param, and then the progress view calls a SQL function,
say pg_stat_get_copy_format_name(), with the format ID that returns
the corresponding format name.

Does it work when we use session_preload_libraries or the
LOAD command? If we have 2 sessions and both of them load
"jsonlines" COPY FORMAT extensions, what will be happened?

For example:

1. Session 1: Register "jsonlines"
2. Session 2: Register "jsonlines"
(Should global format ID <-> format name mapping
be updated?)
3. Session 2: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)
4. Session 1: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)

Thanks,
--
kou

#289Sutou Kouhei
kou@clear-code.com
In reply to: David G. Johnston (#287)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAKFQuwaRDXANaL+QcT6LZRAem4rwkSwv9v+viv_mcR+Rex3quA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 3 May 2025 22:27:36 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

In any case, I’m doubtful either of us can make a convincing enough
argument to sway the other fully. Both options are plausible, IMO. Others
need to chime in.

I may misunderstand but here is the current summary, right?

Proposed approaches to register custom COPY formats:
a. Create a function that has the same name of custom COPY
format
b. Call a register function from _PG_init()

FYI: I proposed c. approach that uses a. but it always
requires schema name for format name in other e-mail.

Users can register the same format name:
a. Yes
* Users can distinct the same format name by schema name
* If format name doesn't have schema name, the used
format depends on search_path
* Pros:
* Using schema for it is consistent with other
PostgreSQL mechanisms
* Custom format never conflict with built-in
format. For example, an extension register "xml" and
PostgreSQL adds "xml" later, they are never
conflicted because PostgreSQL's "xml" is registered
to pg_catalog.
* Cons: Different format may be used with the same
input. For example, "jsonlines" may choose
"jsonlines" implemented by extension X or implemented
by extension Y when search_path is different.
b. No
* Users can use "${schema}.${name}" for format name
that mimics PostgreSQL's builtin schema (but it's just
a string)

Built-in formats (text/csv/binary) should be able to
overwritten by extensions:
a. (The current patch is no but David's answer is) Yes
* Pros: Users can use drop-in replacement faster
implementation without changing input
* Cons: Users may overwrite them accidentally.
It may break pg_dump result.
(This is called as "backward incompatibility.")
b. No

Are there any missing or wrong items? If we can summarize
the current discussion here correctly, others will be able
to chime in this discussion. (At least I can do it.)

Thanks,
--
kou

#290Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#289)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 9, 2025 at 2:41 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAKFQuwaRDXANaL+QcT6LZRAem4rwkSwv9v+viv_mcR+Rex3quA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Sat, 3 May 2025 22:27:36 -0700,
"David G. Johnston" <david.g.johnston@gmail.com> wrote:

In any case, I’m doubtful either of us can make a convincing enough
argument to sway the other fully. Both options are plausible, IMO. Others
need to chime in.

I may misunderstand but here is the current summary, right?

Thank you for summarizing the discussion.

Proposed approaches to register custom COPY formats:
a. Create a function that has the same name of custom COPY
format
b. Call a register function from _PG_init()

FYI: I proposed c. approach that uses a. but it always
requires schema name for format name in other e-mail.

With approach (c), do you mean that we require users to change all
FORMAT option values like from 'text' to 'pg_catalog.text' after the
upgrade? Or are we exempt the built-in formats?

Users can register the same format name:
a. Yes
* Users can distinct the same format name by schema name
* If format name doesn't have schema name, the used
format depends on search_path
* Pros:
* Using schema for it is consistent with other
PostgreSQL mechanisms
* Custom format never conflict with built-in
format. For example, an extension register "xml" and
PostgreSQL adds "xml" later, they are never
conflicted because PostgreSQL's "xml" is registered
to pg_catalog.
* Cons: Different format may be used with the same
input. For example, "jsonlines" may choose
"jsonlines" implemented by extension X or implemented
by extension Y when search_path is different.
b. No
* Users can use "${schema}.${name}" for format name
that mimics PostgreSQL's builtin schema (but it's just
a string)

Built-in formats (text/csv/binary) should be able to
overwritten by extensions:
a. (The current patch is no but David's answer is) Yes
* Pros: Users can use drop-in replacement faster
implementation without changing input
* Cons: Users may overwrite them accidentally.
It may break pg_dump result.
(This is called as "backward incompatibility.")
b. No

The summary matches my understanding. I think the second point is
important. If we go with a tablesample-like API, I agree with David's
point that all FORMAT values including the built-in formats should
depend on the search_path value. While it provides a similar user
experience to other database objects, there is a possibility that a
COPY with built-in format could work differently on v19 than v18 or
earlier depending on the search_path value.

Are there any missing or wrong items?

I think the approach (b) provides more flexibility than (a) in terms
of API design as with (a) we need to do everything based on one
handler function and callbacks.

If we can summarize
the current discussion here correctly, others will be able
to chime in this discussion. (At least I can do it.)

+1

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#291Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#288)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, May 9, 2025 at 1:51 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoD9CBjh4u6jdiE0tG-jvejw-GJN8fUPoQSVhKh36HW2NQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 2 May 2025 23:37:46 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The progress information is stored in PgBackendStatus defined in
backend_status.h:

/*
* Command progress reporting. Any command which wishes can advertise
* that it is running by setting st_progress_command,
* st_progress_command_target, and st_progress_param[].
* st_progress_command_target should be the OID of the relation which the
* command targets (we assume there's just one, as this is meant for
* utility commands), but the meaning of each element in the
* st_progress_param array is command-specific.
*/
ProgressCommandType st_progress_command;
Oid st_progress_command_target;
int64 st_progress_param[PGSTAT_NUM_PROGRESS_PARAM];

Then the progress view maps the numbers to the corresponding strings:

CREATE VIEW pg_stat_progress_copy AS
SELECT
S.pid AS pid, S.datid AS datid, D.datname AS datname,
S.relid AS relid,
CASE S.param5 WHEN 1 THEN 'COPY FROM'
WHEN 2 THEN 'COPY TO'
END AS command,
CASE S.param6 WHEN 1 THEN 'FILE'
WHEN 2 THEN 'PROGRAM'
WHEN 3 THEN 'PIPE'
WHEN 4 THEN 'CALLBACK'
END AS "type",
S.param1 AS bytes_processed,
S.param2 AS bytes_total,
S.param3 AS tuples_processed,
S.param4 AS tuples_excluded,
S.param7 AS tuples_skipped
FROM pg_stat_get_progress_info('COPY') AS S
LEFT JOIN pg_database D ON S.datid = D.oid;

Thanks. I didn't know about how to implement
pg_stat_progress_copy.

So the idea is that the backend process sets the format ID somewhere
in st_progress_param, and then the progress view calls a SQL function,
say pg_stat_get_copy_format_name(), with the format ID that returns
the corresponding format name.

Does it work when we use session_preload_libraries or the
LOAD command? If we have 2 sessions and both of them load
"jsonlines" COPY FORMAT extensions, what will be happened?

For example:

1. Session 1: Register "jsonlines"
2. Session 2: Register "jsonlines"
(Should global format ID <-> format name mapping
be updated?)
3. Session 2: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)
4. Session 1: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)

I imagine that only for progress reporting purposes, I think session 1
and 2 can have different format IDs for the same 'jsonlines' if they
load it by LOAD command. They can advertise the format IDs on the
shmem and we can also provide a SQL function for the progress view
that can get the format name by the format ID.

Considering the possibility that we might want to use the format ID
also in the cumulative statistics, we might want to strictly provide
the unique format ID for each custom format as the format IDs are
serialized to the pgstat file. One possible way to implement it is
that we manage the custom format IDs in a wiki page like we do for
custom cumulative statistics and custom RMGR[1]https://wiki.postgresql.org/wiki/CustomCumulativeStats[2]https://wiki.postgresql.org/wiki/CustomWALResourceManagers. That is, a custom
format extension registers the format name along with the format ID
that is pre-registered in the wiki page or the format ID (e.g. 128)
indicating under development. If either the format name or format ID
conflict with an already registered custom format extension, the
registration function raises an error. And we preallocate enough
format IDs for built-in formats.

As for unregistration, I think that even if we provide an
unregisteration API, it ultimately depends on whether or not custom
format extensions call it in _PG_fini().

Regards,

[1]: https://wiki.postgresql.org/wiki/CustomCumulativeStats
[2]: https://wiki.postgresql.org/wiki/CustomWALResourceManagers

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#292Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#290)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBrSTmPyDai_QVR-XOe7PL722Dazm70A+FpvGy2hfSV9g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 May 2025 17:57:35 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

Proposed approaches to register custom COPY formats:
a. Create a function that has the same name of custom COPY
format
b. Call a register function from _PG_init()

FYI: I proposed c. approach that uses a. but it always
requires schema name for format name in other e-mail.

With approach (c), do you mean that we require users to change all
FORMAT option values like from 'text' to 'pg_catalog.text' after the
upgrade? Or are we exempt the built-in formats?

The latter. 'text' must be accepted because existing pg_dump
results use 'text'. If we reject 'text', it's a big
incompatibility. (We can't dump on old PostgreSQL and
restore to new PostgreSQL.)

Users can register the same format name:
a. Yes
* Users can distinct the same format name by schema name
* If format name doesn't have schema name, the used
format depends on search_path
* Pros:
* Using schema for it is consistent with other
PostgreSQL mechanisms
* Custom format never conflict with built-in
format. For example, an extension register "xml" and
PostgreSQL adds "xml" later, they are never
conflicted because PostgreSQL's "xml" is registered
to pg_catalog.
* Cons: Different format may be used with the same
input. For example, "jsonlines" may choose
"jsonlines" implemented by extension X or implemented
by extension Y when search_path is different.
b. No
* Users can use "${schema}.${name}" for format name
that mimics PostgreSQL's builtin schema (but it's just
a string)

Built-in formats (text/csv/binary) should be able to
overwritten by extensions:
a. (The current patch is no but David's answer is) Yes
* Pros: Users can use drop-in replacement faster
implementation without changing input
* Cons: Users may overwrite them accidentally.
It may break pg_dump result.
(This is called as "backward incompatibility.")
b. No

The summary matches my understanding. I think the second point is
important. If we go with a tablesample-like API, I agree with David's
point that all FORMAT values including the built-in formats should
depend on the search_path value. While it provides a similar user
experience to other database objects, there is a possibility that a
COPY with built-in format could work differently on v19 than v18 or
earlier depending on the search_path value.

Thanks for sharing additional points.

David said that the additional point case is a
responsibility or DBA not PostgreSQL, right?

As I already said, I don't have a strong opinion on which
approach is better. My opinion for the (important) second
point is no. I feel that the pros of a. isn't realistic. If
users want to improve text/csv/binary performance (or
something), they should improve PostgreSQL itself instead of
replacing it as an extension. (Or they should create another
custom copy format such as "faster_text" not "text".)

So I'm OK with the approach b.

Are there any missing or wrong items?

I think the approach (b) provides more flexibility than (a) in terms
of API design as with (a) we need to do everything based on one
handler function and callbacks.

Thanks for sharing this missing point.

I have a concern that the flexibility may introduce needless
complexity. If it's not a real concern, I'm OK with the
approach b.

If we can summarize
the current discussion here correctly, others will be able
to chime in this discussion. (At least I can do it.)

+1

Are there any more people who are interested in custom COPY
FORMAT implementation design? If no more people, let's
decide it by us.

Thanks,
--
kou

#293Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#291)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAY_h-9nuhs14e3cyO_A2rH7==zuq+NPHkn9ggwyaXnPQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 9 May 2025 21:29:23 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

So the idea is that the backend process sets the format ID somewhere
in st_progress_param, and then the progress view calls a SQL function,
say pg_stat_get_copy_format_name(), with the format ID that returns
the corresponding format name.

Does it work when we use session_preload_libraries or the
LOAD command? If we have 2 sessions and both of them load
"jsonlines" COPY FORMAT extensions, what will be happened?

For example:

1. Session 1: Register "jsonlines"
2. Session 2: Register "jsonlines"
(Should global format ID <-> format name mapping
be updated?)
3. Session 2: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)
4. Session 1: Close this session.
Unregister "jsonlines".
(Can we unregister COPY FORMAT extension?)
(Should global format ID <-> format name mapping
be updated?)

I imagine that only for progress reporting purposes, I think session 1
and 2 can have different format IDs for the same 'jsonlines' if they
load it by LOAD command. They can advertise the format IDs on the
shmem and we can also provide a SQL function for the progress view
that can get the format name by the format ID.

Considering the possibility that we might want to use the format ID
also in the cumulative statistics, we might want to strictly provide
the unique format ID for each custom format as the format IDs are
serialized to the pgstat file. One possible way to implement it is
that we manage the custom format IDs in a wiki page like we do for
custom cumulative statistics and custom RMGR[1][2]. That is, a custom
format extension registers the format name along with the format ID
that is pre-registered in the wiki page or the format ID (e.g. 128)
indicating under development. If either the format name or format ID
conflict with an already registered custom format extension, the
registration function raises an error. And we preallocate enough
format IDs for built-in formats.

As for unregistration, I think that even if we provide an
unregisteration API, it ultimately depends on whether or not custom
format extensions call it in _PG_fini().

Thanks for sharing your idea.

With the former ID issuing approach, it seems that we need a
global format ID <-> name mapping and a per session
registered format name list. The custom COPY FORMAT register
function rejects the same format name, right? If we support
both of shared_preload_libraries and
session_preload_libraries/LOAD, we have different life time
custom formats. It may introduce a complexity with the ID
issuing approach.

With the latter static ID approach, how to implement a
function that converts format ID to format name? PostgreSQL
itself doesn't know ID <-> name mapping in the Wiki page. It
seems that custom COPY FORMAT implementation needs to
register its name to PostgreSQL by itself.

Thanks,
--
kou

#294Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#292)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, May 26, 2025 at 10:04:05AM +0900, Sutou Kouhei wrote:

As I already said, I don't have a strong opinion on which
approach is better. My opinion for the (important) second
point is no. I feel that the pros of a. isn't realistic. If
users want to improve text/csv/binary performance (or
something), they should improve PostgreSQL itself instead of
replacing it as an extension. (Or they should create another
custom copy format such as "faster_text" not "text".)

Patches welcome. Andres may have a TODO board regarding that, I
think.

So I'm OK with the approach b.

Here is an opinion.

Approach (b), that uses _PG_init() a function to register a custom
format has the merit to be simple to implement and secure by "design",
because it depends only on the fact that we can do a lookup based on
the string defined in one or more DefElems. Adding a dependendy to
search_path as you say could lead to surprising results.

Using a shared ID when a COPY method is registered (like extension
wait events) or an ID that's static in a backend (like EXPLAIN
extensibility does) is an implementation difference that can be useful
for monitoring, and only that AFAIK. If you want to implement
method-based statistics for COPY, you will want to allocate one stats
kind for each COPY method, because the stats stored will be aggregates
of the COPY methods. The stats kind ID is something that should not
be linked to the COPY method ID, because the stats kind ID is
registered in its own dedicated path, and it would be hardcoded in the
library where the COPY callbacks are defined. So you could have a
stats kind with a fixed ID, and a COPY method ID that's linked to each
backend like EXPLAIN does.

One factor to take into account is how much freedom we are OK with
giving to users when it comes to the deployment of custom COPY
methods, and how popular these would be. Cloud is popular these days,
so folks may want to be able to define pointers to functions that are
run in something else than C, as long as the language is trusted. My
take on this part is that we are not going to see many formats out
there that would benefit from these callbacks, so asking for people to
deploy a .so on disk that can only be LOAD'ed or registered with one
of the preloading GUCs should be enough to satisfy most users, even if
the barrier entry to get that only a cloud instead like RDS or Azure
is higher. This has also the benefit in giving more control on the
COPY internals to cloud providers, as they are the ones who would be
in charge of saying if they're OK with a dedicated .so or not. Not
the users themselves. We've had a lot of bad PR and false CVEs in the
past with COPY FROM/TO PROGRAM and the fact that it requires
superusers. Having something in this area that gives more freedom to
the user with something like approach (a) (SQL functions allowed to
define the callback) will, I suspect, bite us back hard.

So, my opinion is to rely on _PG_init(), with a shared ID if you want
to expose the method used somewhere for monitoring tools. You could
as well implement the simpler set of APIs that allocates IDs local to
each backend, like EXPLAIN, then consider later if shared IDs are
really needed. The registration APIs don't have to be fixed in time
across releases, they can be always improved in steps as required.
What matters is ABI compatibility in the same major version once it is
released.
--
Michael

#295Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Michael Paquier (#294)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jun 11, 2025 at 7:34 PM Michael Paquier <michael@paquier.xyz> wrote:

On Mon, May 26, 2025 at 10:04:05AM +0900, Sutou Kouhei wrote:

As I already said, I don't have a strong opinion on which
approach is better. My opinion for the (important) second
point is no. I feel that the pros of a. isn't realistic. If
users want to improve text/csv/binary performance (or
something), they should improve PostgreSQL itself instead of
replacing it as an extension. (Or they should create another
custom copy format such as "faster_text" not "text".)

Patches welcome. Andres may have a TODO board regarding that, I
think.

So I'm OK with the approach b.

Here is an opinion.

Thank you for the comments.

Approach (b), that uses _PG_init() a function to register a custom
format has the merit to be simple to implement and secure by "design",
because it depends only on the fact that we can do a lookup based on
the string defined in one or more DefElems. Adding a dependendy to
search_path as you say could lead to surprising results.

Using a shared ID when a COPY method is registered (like extension
wait events) or an ID that's static in a backend (like EXPLAIN
extensibility does) is an implementation difference that can be useful
for monitoring, and only that AFAIK. If you want to implement
method-based statistics for COPY, you will want to allocate one stats
kind for each COPY method, because the stats stored will be aggregates
of the COPY methods. The stats kind ID is something that should not
be linked to the COPY method ID, because the stats kind ID is
registered in its own dedicated path, and it would be hardcoded in the
library where the COPY callbacks are defined. So you could have a
stats kind with a fixed ID, and a COPY method ID that's linked to each
backend like EXPLAIN does.

Good point.

One factor to take into account is how much freedom we are OK with
giving to users when it comes to the deployment of custom COPY
methods, and how popular these would be. Cloud is popular these days,
so folks may want to be able to define pointers to functions that are
run in something else than C, as long as the language is trusted. My
take on this part is that we are not going to see many formats out
there that would benefit from these callbacks, so asking for people to
deploy a .so on disk that can only be LOAD'ed or registered with one
of the preloading GUCs should be enough to satisfy most users, even if
the barrier entry to get that only a cloud instead like RDS or Azure
is higher. This has also the benefit in giving more control on the
COPY internals to cloud providers, as they are the ones who would be
in charge of saying if they're OK with a dedicated .so or not. Not
the users themselves. We've had a lot of bad PR and false CVEs in the
past with COPY FROM/TO PROGRAM and the fact that it requires
superusers. Having something in this area that gives more freedom to
the user with something like approach (a) (SQL functions allowed to
define the callback) will, I suspect, bite us back hard.

That's a valid point and I agree.

So, my opinion is to rely on _PG_init(), with a shared ID if you want
to expose the method used somewhere for monitoring tools. You could
as well implement the simpler set of APIs that allocates IDs local to
each backend, like EXPLAIN, then consider later if shared IDs are
really needed. The registration APIs don't have to be fixed in time
across releases, they can be always improved in steps as required.
What matters is ABI compatibility in the same major version once it is
released.

+1 to start with a simpler set of APIs.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#296Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#295)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBwxgfkMYxgPWyrLG-r8-ptVKjd=jhncY_QAaVJYhQQdw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 12 Jun 2025 10:00:12 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

So, my opinion is to rely on _PG_init(), with a shared ID if you want
to expose the method used somewhere for monitoring tools. You could
as well implement the simpler set of APIs that allocates IDs local to
each backend, like EXPLAIN, then consider later if shared IDs are
really needed. The registration APIs don't have to be fixed in time
across releases, they can be always improved in steps as required.
What matters is ABI compatibility in the same major version once it is
released.

+1 to start with a simpler set of APIs.

OK. I'll implement the initial version with this
design. (Allocating IDs local not shared.)

Thanks,
--
kou

#297Michael Paquier
michael@paquier.xyz
In reply to: Sutou Kouhei (#296)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jun 17, 2025 at 08:50:37AM +0900, Sutou Kouhei wrote:

OK. I'll implement the initial version with this
design. (Allocating IDs local not shared.)

Sounds good to me. Thanks Sutou-san!
--
Michael

#298Sutou Kouhei
kou@clear-code.com
In reply to: Michael Paquier (#297)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <aFC5HmZHU5NCPuTL@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 17 Jun 2025 09:38:54 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

On Tue, Jun 17, 2025 at 08:50:37AM +0900, Sutou Kouhei wrote:

OK. I'll implement the initial version with this
design. (Allocating IDs local not shared.)

Sounds good to me. Thanks Sutou-san!

I've attached the v41 patch set that uses the C API approach
with local (not shared) COPY routine management.

0001: This is same as 0001 in the v40 patch set. It just
cleans up CopySource and CopyDest enums.
0002: This is the initial version of this approach.

Here are some discussion points:

1. This provides 2 registration APIs
(RegisterCopy{From,To}Routine(name, routine)) instead of
1 registration API (RegisterCopyFormat(name,
from_routine, to_routine)).

It's for simple implementation and easy to extend without
breaking APIs in the future. (And some formats may
provide only FROM routine or TO routine.)

Is this design acceptable?

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

2. This allocates IDs internally but doesn't provide APIs
that get them. Because it's not needed for now.

We can provide GetExplainExtensionId() like API when we
need it.

Is this design acceptable?

3. I want to register the built-in COPY {FROM,TO} routines
in the PostgreSQL initialization phase. Where should we
do it? In 0002, it's done in InitPostgres() but I'm not
sure whether it's a suitable location or not.

4. 0002 adds CopyFormatOptions::routine as union:

   @@ -87,9 +91,14 @@ typedef struct CopyFormatOptions
           CopyLogVerbosityChoice log_verbosity;   /* verbosity of logged messages */
           int64           reject_limit;   /* maximum tolerable number of errors */
           List       *convert_select; /* list of column names (can be NIL) */
   +       union
   +       {
   +               const struct CopyFromRoutine *from; /* for COPY FROM */
   +               const struct CopyToRoutine *to; /* for COPY TO */
   +       }                       routine;                /* routine to process the specified format */
    } CopyFormatOptions;

Because one of Copy{From,To}Routine is only needed at
once. Is this union usage strange in PostgreSQL?

5. 0002 adds InitializeCopy{From,To}Routines() and
GetCopy{From,To}Routine() that aren't used by COPY
{FROM,TO} routine implementations to copyapi.h. Should we
move them to other .h? If so, which .h should be used for
them?

Thanks,
--
kou

Attachments:

v41-0001-Export-CopyDest-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 78b0c3897e3c78988239dd149753ab55336d060c Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v41 1/2] Export CopyDest as private data

This is a preparation to export CopyToStateData as private data.

CopyToStateData depends on CopyDest. So we need to export CopyDest
too.

But CopyDest and CopySource has the same names. So we can't export
CopyDest as-is.

This uses the COPY_DEST_ prefix for CopyDest enum values. CopySource
uses the COPY_FROM_ prefix for consistency.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 ++++----
 src/backend/commands/copyto.c            | 30 ++++++++----------------
 src/include/commands/copyfrom_internal.h |  8 +++----
 src/include/commands/copyto_internal.h   | 28 ++++++++++++++++++++++
 5 files changed, 49 insertions(+), 31 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fbbbc09a97b..b4dad744547 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1709,7 +1709,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1837,7 +1837,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f5fc346e201..9f7171d1478 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ea6f18f2c80..99aec9c4c48 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,17 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
 /*
  * This struct contains all the state variables used throughout a COPY TO
  * operation.
@@ -69,7 +59,7 @@ typedef struct CopyToStateData
 
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
 	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
 
 	int			file_encoding;	/* file or remote side's character encoding */
@@ -401,7 +391,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -448,7 +438,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -482,11 +472,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +497,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +505,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -902,12 +892,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..24157e11a73 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
@@ -64,7 +64,7 @@ typedef struct CopyFromStateData
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_SOURCE_FRONTEND */
 
 	EolType		eol_type;		/* EOL type of input */
 	int			file_encoding;	/* file or remote side's character encoding */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..42ddb37a8a2
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,28 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.49.0

v41-0002-Add-support-for-registering-COPY-FROM-TO-routine.patchtext/x-patch; charset=us-asciiDownload
From bdd45f68d7026fae757bcd7d6aec8f2b6644a846 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 18 Jun 2025 11:43:09 +0900
Subject: [PATCH v41 2/2] Add support for registering COPY {FROM,TO} routines

This uses the C API approach like custom EXPLAIN option. Some of this
are based on the custom EXPLAIN option implementations.

This approach provides C API to register COPY {FROM,TO} routines:

    void RegisterCopyFromRoutine(const char *name,
                                 const CopyFromRoutine *routine);
    void RegisterCopyToRoutine(const char *name,
                               const CopyToRoutine *routine);

(They are based on RegisterExtensionExplainOption().)

They assign an ID for each name internally but the current API set
doesn't provide it to users. Because it's not needed for now. If it's
needed, we can provide APIs for it like GetExplainExtensionId() for
custom EXPLAIN option.

This manages registered COPY {FROM,TO} routines in a
process. Registered COPY {FROM,TO} routines aren't shared in multiple
processes because it's not needed for now. We may revisit it when we
need it.
---
 src/backend/commands/copy.c                   |  16 +-
 src/backend/commands/copyfrom.c               | 108 ++++++++++--
 src/backend/commands/copyto.c                 | 161 +++++++++++-------
 src/backend/utils/init/postinit.c             |   5 +
 src/include/commands/copy.h                   |  11 +-
 src/include/commands/copyapi.h                |  13 ++
 src/include/commands/copyto_internal.h        |  55 ++++++
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  21 +++
 .../expected/test_copy_format.out             |  19 +++
 src/test/modules/test_copy_format/meson.build |  29 ++++
 .../test_copy_format/sql/test_copy_format.sql |   8 +
 .../test_copy_format/test_copy_format.c       |  91 ++++++++++
 .../test_copy_format/test_copy_format.conf    |   1 +
 16 files changed, 466 insertions(+), 78 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.conf

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 74ae42b19a7..787a3bdf8a4 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,7 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -524,13 +524,21 @@ ProcessCopyOptions(ParseState *pstate,
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
+			if (strcmp(fmt, "csv") == 0)
 				opts_out->csv_mode = true;
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
+
+			if (is_from)
+				opts_out->routine.from = GetCopyFromRoutine(fmt);
 			else
+				opts_out->routine.to = GetCopyToRoutine(fmt);
+
+			/*
+			 * We can use either opts_out->routine.from or .to here to check
+			 * the nonexistent routine case.
+			 */
+			if (!opts_out->routine.from)
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index b4dad744547..72c96fc6ff6 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -103,6 +103,22 @@ typedef struct CopyMultiInsertInfo
 } CopyMultiInsertInfo;
 
 
+/*
+ * Manage registered COPY FROM routines in a process. They aren't shared in
+ * multiple processes for now. We may do it later when it's needed.
+ */
+
+typedef struct
+{
+	const char *name;
+	const CopyFromRoutine *routine;
+}			CopyFromRoutineEntry;
+
+static CopyFromRoutineEntry * CopyFromRoutineEntries = NULL;
+static int	CopyFromRoutineEntriesAssigned = 0;
+static int	CopyFromRoutineEntriesAllocated = 0;
+
+
 /* non-export function prototypes */
 static void ClosePipeFromProgram(CopyFromState cstate);
 
@@ -151,17 +167,87 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 	.CopyFromEnd = CopyFromBinaryEnd,
 };
 
-/* Return a COPY FROM routine for the given options */
-static const CopyFromRoutine *
-CopyFromGetRoutine(const CopyFormatOptions *opts)
+/*
+ * Register a new COPY FROM routine.
+ *
+ * When name is used as a COPY FROM format name, routine will be used to
+ * process the COPY FROM request. See CopyFromRoutine how to implement a COPY
+ * FROM routine.
+ *
+ * If name is already registered, registered routine is replaced with the
+ * given routine.
+ *
+ * name is assumed to be a constant string or allocated in storage that will
+ * never be freed.
+ *
+ * routine is assumed to be allocated in storage that will never be freed.
+ */
+void
+RegisterCopyFromRoutine(const char *name, const CopyFromRoutine *routine)
 {
-	if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	CopyFromRoutineEntry *entry;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+	/* Search for an existing routine by this name; if found, update handler. */
+	for (int i = 0; i < CopyFromRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyFromRoutineEntries[i].name, name) == 0)
+		{
+			CopyFromRoutineEntries[i].routine = routine;
+			return;
+		}
+	}
+
+	/* If there is no array yet, create one. */
+	if (!CopyFromRoutineEntries)
+	{
+		CopyFromRoutineEntriesAllocated = 16;
+		CopyFromRoutineEntries =
+			MemoryContextAlloc(TopMemoryContext,
+							   sizeof(CopyFromRoutineEntry) * CopyFromRoutineEntriesAllocated);
+	}
+
+	/* If there's an array but it's currently full, expand it. */
+	if (CopyFromRoutineEntriesAssigned >= CopyFromRoutineEntriesAllocated)
+	{
+		int			i = pg_nextpower2_32(CopyFromRoutineEntriesAssigned + 1);
+
+		CopyFromRoutineEntries =
+			repalloc(CopyFromRoutineEntries, sizeof(CopyFromRoutineEntry) * i);
+		CopyFromRoutineEntriesAllocated = i;
+	}
+
+	/* Assign new ID. */
+	entry = &CopyFromRoutineEntries[CopyFromRoutineEntriesAssigned++];
+	entry->name = name;
+	entry->routine = routine;
+}
+
+/*
+ * Register built-in COPY FROM routines.
+ *
+ * This must be called only once in the initialization process.
+ */
+void
+InitializeCopyFromRoutines(void)
+{
+	RegisterCopyFromRoutine("text", &CopyFromRoutineText);
+	RegisterCopyFromRoutine("csv", &CopyFromRoutineCSV);
+	RegisterCopyFromRoutine("binary", &CopyFromRoutineBinary);
+}
+
+/* Return a COPY FROM routine for the given options */
+const CopyFromRoutine *
+GetCopyFromRoutine(const char *name)
+{
+	for (int i = 0; i < CopyFromRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyFromRoutineEntries[i].name, name) == 0)
+		{
+			return CopyFromRoutineEntries[i].routine;
+		}
+	}
+
+	return NULL;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1574,7 +1660,9 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(&cstate->opts);
+	cstate->routine = cstate->opts.routine.from;
+	if (!cstate->routine)
+		cstate->routine = &CopyFromRoutineText; /* default is text */
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99aec9c4c48..7ef690981cb 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,12 +19,9 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copyapi.h"
 #include "commands/copyto_internal.h"
 #include "commands/progress.h"
-#include "executor/execdesc.h"
 #include "executor/executor.h"
-#include "executor/tuptable.h"
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "mb/pg_wchar.h"
@@ -37,56 +34,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -99,6 +46,22 @@ typedef struct
 static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
 
+/*
+ * Manage registered COPY TO routines in a process. They aren't shared in
+ * multiple processes for now. We may do it later when it's needed.
+ */
+
+typedef struct
+{
+	const char *name;
+	const CopyToRoutine *routine;
+}			CopyToRoutineEntry;
+
+static CopyToRoutineEntry * CopyToRoutineEntries = NULL;
+static int	CopyToRoutineEntriesAssigned = 0;
+static int	CopyToRoutineEntriesAllocated = 0;
+
+
 /* non-export function prototypes */
 static void EndCopy(CopyToState cstate);
 static void ClosePipeToProgram(CopyToState cstate);
@@ -131,6 +94,7 @@ static void CopySendTextLikeEndOfRow(CopyToState cstate);
 static void CopySendInt32(CopyToState cstate, int32 val);
 static void CopySendInt16(CopyToState cstate, int16 val);
 
+
 /*
  * COPY TO routines for built-in formats.
  *
@@ -162,17 +126,86 @@ static const CopyToRoutine CopyToRoutineBinary = {
 	.CopyToEnd = CopyToBinaryEnd,
 };
 
-/* Return a COPY TO routine for the given options */
-static const CopyToRoutine *
-CopyToGetRoutine(const CopyFormatOptions *opts)
+/*
+ * Register a new COPY TO routine.
+ *
+ * When name is used as a COPY TO format name, routine will be used to process
+ * the COPY TO request. See CopyToRoutine how to implement a COPY TO routine.
+ *
+ * If name is already registered, registered routine is replaced with the
+ * given routine.
+ *
+ * name is assumed to be a constant string or allocated in storage that will
+ * never be freed.
+ *
+ * routine is assumed to be allocated in storage that will never be freed.
+ */
+void
+RegisterCopyToRoutine(const char *name, const CopyToRoutine *routine)
 {
-	if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	CopyToRoutineEntry *entry;
 
-	/* default is text */
-	return &CopyToRoutineText;
+	/* Search for an existing routine by this name; if found, update handler. */
+	for (int i = 0; i < CopyToRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyToRoutineEntries[i].name, name) == 0)
+		{
+			CopyToRoutineEntries[i].routine = routine;
+			return;
+		}
+	}
+
+	/* If there is no array yet, create one. */
+	if (!CopyToRoutineEntries)
+	{
+		CopyToRoutineEntriesAllocated = 16;
+		CopyToRoutineEntries =
+			MemoryContextAlloc(TopMemoryContext,
+							   sizeof(CopyToRoutineEntry) * CopyToRoutineEntriesAllocated);
+	}
+
+	/* If there's an array but it's currently full, expand it. */
+	if (CopyToRoutineEntriesAssigned >= CopyToRoutineEntriesAllocated)
+	{
+		int			i = pg_nextpower2_32(CopyToRoutineEntriesAssigned + 1);
+
+		CopyToRoutineEntries =
+			repalloc(CopyToRoutineEntries, sizeof(CopyToRoutineEntry) * i);
+		CopyToRoutineEntriesAllocated = i;
+	}
+
+	/* Assign new ID. */
+	entry = &CopyToRoutineEntries[CopyToRoutineEntriesAssigned++];
+	entry->name = name;
+	entry->routine = routine;
+}
+
+/*
+ * Register built-in COPY TO routines.
+ *
+ * This must be called only once in the initialization process.
+ */
+void
+InitializeCopyToRoutines(void)
+{
+	RegisterCopyToRoutine("text", &CopyToRoutineText);
+	RegisterCopyToRoutine("csv", &CopyToRoutineCSV);
+	RegisterCopyToRoutine("binary", &CopyToRoutineBinary);
+}
+
+/* Return a COPY TO routine for the given options */
+const CopyToRoutine *
+GetCopyToRoutine(const char *name)
+{
+	for (int i = 0; i < CopyToRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyToRoutineEntries[i].name, name) == 0)
+		{
+			return CopyToRoutineEntries[i].routine;
+		}
+	}
+
+	return NULL;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -693,7 +726,9 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(&cstate->opts);
+	cstate->routine = cstate->opts.routine.to;
+	if (!cstate->routine)
+		cstate->routine = &CopyToRoutineText;	/* default is text */
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index c86ceefda94..d566f542d62 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -33,6 +33,7 @@
 #include "catalog/pg_database.h"
 #include "catalog/pg_db_role_setting.h"
 #include "catalog/pg_tablespace.h"
+#include "commands/copyapi.h"
 #include "libpq/auth.h"
 #include "libpq/libpq-be.h"
 #include "mb/pg_wchar.h"
@@ -1217,6 +1218,10 @@ InitPostgres(const char *in_dbname, Oid dboid,
 	/* Initialize this backend's session state. */
 	InitializeSession();
 
+	/* Initialize COPY routines. */
+	InitializeCopyFromRoutines();
+	InitializeCopyToRoutines();
+
 	/*
 	 * If this is an interactive session, load any libraries that should be
 	 * preloaded at backend start.  Since those are determined by GUCs, this
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..88fa0703d0a 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -51,6 +51,10 @@ typedef enum CopyLogVerbosityChoice
 	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
 } CopyLogVerbosityChoice;
 
+/* These are in commands/copyapi.h */
+struct CopyFromRoutine;
+struct CopyToRoutine;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -87,9 +91,14 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	union
+	{
+		const struct CopyFromRoutine *from; /* for COPY FROM */
+		const struct CopyToRoutine *to; /* for COPY TO */
+	}			routine;		/* routine to process the specified format */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..39253d616d7 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -54,6 +54,13 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+extern void RegisterCopyToRoutine(const char *name, const CopyToRoutine *routine);
+
+/* TODO: Should we move the followings to other .h because they are not for
+ * custom COPY TO format extensions? */
+extern void InitializeCopyToRoutines(void);
+extern const CopyToRoutine *GetCopyToRoutine(const char *name);
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
@@ -102,4 +109,10 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern void RegisterCopyFromRoutine(const char *name, const CopyFromRoutine *routine);
+/* TODO: Should we move the followings to other .h because they are not for
+ * custom COPY FROM format extensions? */
+extern void InitializeCopyFromRoutines(void);
+extern const CopyFromRoutine *GetCopyFromRoutine(const char *name);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 42ddb37a8a2..9dbbbc592b7 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,6 +14,11 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
+#include "commands/copyapi.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
@@ -25,4 +30,54 @@ typedef enum CopyDest
 	COPY_DEST_CALLBACK,			/* to callback function */
 } CopyDest;
 
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index aa1d27bbed3..9bf5d58cdae 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -17,6 +17,7 @@ SUBDIRS = \
 		  test_aio \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 9de0057bd1d..5fd06de2737 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -16,6 +16,7 @@ subdir('ssl_passphrase_callback')
 subdir('test_aio')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..85dce14ebb3
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,21 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+REGRESS = test_copy_format
+REGRESS_OPTS = --temp-config $(top_srcdir)/src/test/modules/test_copy_format/test_copy_format.conf
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..163ff94fa41
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,19 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+DROP TABLE copy_data;
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..723c51d3f45
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,29 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+    'regress_args': ['--temp-config', files('test_copy_format.conf')],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..6d60a493e0e
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,8 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+
+DROP TABLE copy_data;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..70b7a308d8a
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,91 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+#include "utils/builtins.h"
+
+PG_MODULE_MAGIC;
+
+static void
+TestCopyFromInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static bool
+TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+TestCopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.CopyFromInFunc = TestCopyFromInFunc,
+	.CopyFromStart = TestCopyFromStart,
+	.CopyFromOneRow = TestCopyFromOneRow,
+	.CopyFromEnd = TestCopyFromEnd,
+};
+
+static void
+TestCopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static void
+TestCopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: the number of valid values: %u", slot->tts_nvalid)));
+}
+
+static void
+TestCopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.CopyToOutFunc = TestCopyToOutFunc,
+	.CopyToStart = TestCopyToStart,
+	.CopyToOneRow = TestCopyToOneRow,
+	.CopyToEnd = TestCopyToEnd,
+};
+
+void
+_PG_init(void)
+{
+	RegisterCopyFromRoutine("test_copy_format", &CopyFromRoutineTestCopyFormat);
+	RegisterCopyToRoutine("test_copy_format", &CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.conf b/src/test/modules/test_copy_format/test_copy_format.conf
new file mode 100644
index 00000000000..743a02ac92a
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.conf
@@ -0,0 +1 @@
+shared_preload_libraries = 'test_copy_format'
-- 
2.49.0

#299Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#298)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jun 18, 2025 at 12:59 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <aFC5HmZHU5NCPuTL@paquier.xyz>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 17 Jun 2025 09:38:54 +0900,
Michael Paquier <michael@paquier.xyz> wrote:

On Tue, Jun 17, 2025 at 08:50:37AM +0900, Sutou Kouhei wrote:

OK. I'll implement the initial version with this
design. (Allocating IDs local not shared.)

Sounds good to me. Thanks Sutou-san!

I've attached the v41 patch set that uses the C API approach
with local (not shared) COPY routine management.

0001: This is same as 0001 in the v40 patch set. It just
cleans up CopySource and CopyDest enums.
0002: This is the initial version of this approach.

Thank you for updating the patches!

Here are some discussion points:

1. This provides 2 registration APIs
(RegisterCopy{From,To}Routine(name, routine)) instead of
1 registration API (RegisterCopyFormat(name,
from_routine, to_routine)).

It's for simple implementation and easy to extend without
breaking APIs in the future. (And some formats may
provide only FROM routine or TO routine.)

Is this design acceptable?

With the single registration API idea, we can register the custom
format routine that supports only FROM routine using the API like:

RegisterCopyRoutine("new-format", NewFormatFromRoutine, NULL);

Compared to this approach, what points do you think having separate
two registration APIs is preferable in terms of extendability and API
compatibility? I think it would be rather confusing for example if
each COPY TO routine and COPY FROM routine is registered by different
extensions with the same format name.

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

I'm concerned that the patch has duplicated logics for the
registration of COPY FROM and COPY TO.

2. This allocates IDs internally but doesn't provide APIs
that get them. Because it's not needed for now.

We can provide GetExplainExtensionId() like API when we
need it.

Is this design acceptable?

+1

3. I want to register the built-in COPY {FROM,TO} routines
in the PostgreSQL initialization phase. Where should we
do it? In 0002, it's done in InitPostgres() but I'm not
sure whether it's a suitable location or not.

InitPostgres() is not a correct function as it's a process
initialization function. Probably we don't necessarily need to
register the built-in formats in the same way as custom formats. A
simple solution would be to have separate arrays for built-in formats
and custom formats and have the GetCopy[To|From]Routine() search both
arrays (built-in array first).

4. 0002 adds CopyFormatOptions::routine as union:

@@ -87,9 +91,14 @@ typedef struct CopyFormatOptions
CopyLogVerbosityChoice log_verbosity;   /* verbosity of logged messages */
int64           reject_limit;   /* maximum tolerable number of errors */
List       *convert_select; /* list of column names (can be NIL) */
+       union
+       {
+               const struct CopyFromRoutine *from; /* for COPY FROM */
+               const struct CopyToRoutine *to; /* for COPY TO */
+       }                       routine;                /* routine to process the specified format */
} CopyFormatOptions;

Because one of Copy{From,To}Routine is only needed at
once. Is this union usage strange in PostgreSQL?

I think we can live with having two fields as there are other options
that are used only in either COPY FROM or COPY TO.

5. 0002 adds InitializeCopy{From,To}Routines() and
GetCopy{From,To}Routine() that aren't used by COPY
{FROM,TO} routine implementations to copyapi.h. Should we
move them to other .h? If so, which .h should be used for
them?

As I commented at 3, I think it's better to avoid dynamically
registering the built-in formats.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#300Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#299)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoA57owo6qYTPTxOtCjDmcuj1tGL1aGs95cvEnoLQvwF0A@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 24 Jun 2025 11:59:17 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

1. This provides 2 registration APIs
(RegisterCopy{From,To}Routine(name, routine)) instead of
1 registration API (RegisterCopyFormat(name,
from_routine, to_routine)).

It's for simple implementation and easy to extend without
breaking APIs in the future. (And some formats may
provide only FROM routine or TO routine.)

Is this design acceptable?

With the single registration API idea, we can register the custom
format routine that supports only FROM routine using the API like:

RegisterCopyRoutine("new-format", NewFormatFromRoutine, NULL);

Compared to this approach, what points do you think having separate
two registration APIs is preferable in terms of extendability and API
compatibility?

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

I think it would be rather confusing for example if
each COPY TO routine and COPY FROM routine is registered by different
extensions with the same format name.

Hmm, I don't think so. Who is confused by the case? DBA?
Users who use COPY? Why is it confused?

Do you assume the case that the same name is used for
different format? For example, "json" is used for JSON Lines
for COPY FROM and and normal JSON for COPY TO by different
extensions.

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

I'm concerned that the patch has duplicated logics for the
registration of COPY FROM and COPY TO.

We can implement a convenient routine that can be used for
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine() if it's needed.

3. I want to register the built-in COPY {FROM,TO} routines
in the PostgreSQL initialization phase. Where should we
do it? In 0002, it's done in InitPostgres() but I'm not
sure whether it's a suitable location or not.

InitPostgres() is not a correct function as it's a process
initialization function. Probably we don't necessarily need to
register the built-in formats in the same way as custom formats. A
simple solution would be to have separate arrays for built-in formats
and custom formats and have the GetCopy[To|From]Routine() search both
arrays (built-in array first).

We had a discussion that we should dog-food APIs:

/messages/by-id/CAKFQuwaCHhrS+RE4p_OO6d7WEskd9b86-2cYcvChNkrP+7PJ7A@mail.gmail.com

We should (and usually do) dog-food APIs when reasonable
and this situation seems quite reasonable.

In this case, we don't need to dog-food APIs, right?

4. 0002 adds CopyFormatOptions::routine as union:

@@ -87,9 +91,14 @@ typedef struct CopyFormatOptions
CopyLogVerbosityChoice log_verbosity;   /* verbosity of logged messages */
int64           reject_limit;   /* maximum tolerable number of errors */
List       *convert_select; /* list of column names (can be NIL) */
+       union
+       {
+               const struct CopyFromRoutine *from; /* for COPY FROM */
+               const struct CopyToRoutine *to; /* for COPY TO */
+       }                       routine;                /* routine to process the specified format */
} CopyFormatOptions;

Because one of Copy{From,To}Routine is only needed at
once. Is this union usage strange in PostgreSQL?

I think we can live with having two fields as there are other options
that are used only in either COPY FROM or COPY TO.

OK.

Thanks,
--
kou

#301Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#300)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jun 24, 2025 at 2:11 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoA57owo6qYTPTxOtCjDmcuj1tGL1aGs95cvEnoLQvwF0A@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 24 Jun 2025 11:59:17 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

1. This provides 2 registration APIs
(RegisterCopy{From,To}Routine(name, routine)) instead of
1 registration API (RegisterCopyFormat(name,
from_routine, to_routine)).

It's for simple implementation and easy to extend without
breaking APIs in the future. (And some formats may
provide only FROM routine or TO routine.)

Is this design acceptable?

With the single registration API idea, we can register the custom
format routine that supports only FROM routine using the API like:

RegisterCopyRoutine("new-format", NewFormatFromRoutine, NULL);

Compared to this approach, what points do you think having separate
two registration APIs is preferable in terms of extendability and API
compatibility?

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think it would be rather confusing for example if
each COPY TO routine and COPY FROM routine is registered by different
extensions with the same format name.

Hmm, I don't think so. Who is confused by the case? DBA?
Users who use COPY? Why is it confused?

Do you assume the case that the same name is used for
different format? For example, "json" is used for JSON Lines
for COPY FROM and and normal JSON for COPY TO by different
extensions.

Suppose that extension-A implements only CopyToRoutine for the
custom-format-X with the format name 'myformat' and extension-B
implements only CopyFromRoutine for the custom-format-Y with the same
name, if users load both extension-A and extension-B, it seems to me
that extension-A registers the custom-format-X format as 'myformat'
only with CopyToRoutine, and extension-B overwrites the 'myformat'
registration by adding custom-format-Y's CopyFromRoutine. However, if
users register extension-C that implements both routines with the
format name 'myformat', they can register neither extension-A nor
extension-B, which seems to me that we don't allow overwriting the
registration in this case.

I think the core issue appears to be the internal management of custom
format entries but the current patch does enable registration
overwriting in the former case (extension-A and extension-B case).

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

I'm concerned that the patch has duplicated logics for the
registration of COPY FROM and COPY TO.

We can implement a convenient routine that can be used for
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine() if it's needed.

I meant there are duplicated codes in COPY FROM and COPY TO. For
instance, RegisterCopyFromRoutine() and RegisterCopyToRoutine() have
the same logic.

3. I want to register the built-in COPY {FROM,TO} routines
in the PostgreSQL initialization phase. Where should we
do it? In 0002, it's done in InitPostgres() but I'm not
sure whether it's a suitable location or not.

InitPostgres() is not a correct function as it's a process
initialization function. Probably we don't necessarily need to
register the built-in formats in the same way as custom formats. A
simple solution would be to have separate arrays for built-in formats
and custom formats and have the GetCopy[To|From]Routine() search both
arrays (built-in array first).

We had a discussion that we should dog-food APIs:

/messages/by-id/CAKFQuwaCHhrS+RE4p_OO6d7WEskd9b86-2cYcvChNkrP+7PJ7A@mail.gmail.com

We should (and usually do) dog-food APIs when reasonable
and this situation seems quite reasonable.

In this case, we don't need to dog-food APIs, right?

Yes, I think so.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#302Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#301)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoC8-d=GF-hOvGqUyq2xFg=QGpYfCiWJbcp4wcn0UidrPw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 24 Jun 2025 15:24:23 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think that API that can be understandable without the
additional note is better API than API that needs some
notes.

Why do you suggest the RegisterCopyRoutine("new-format",
NewFormatFromRoutine, NewFormatToRoutine) API? You want to
remove the duplicated codes in
RegisterCopy{From,To}Routine(), right? I think that we can
do it by creating a convenient function that has the
duplicated codes extracted from
RegisterCopy{From,To}Routine() and
RegisterExtensionExplainOption().

BTW, what do you think about my answer (one feature by one
operation API is more extendable API) for your question
(extendability and API compatibility)?

Suppose that extension-A implements only CopyToRoutine for the
custom-format-X with the format name 'myformat' and extension-B
implements only CopyFromRoutine for the custom-format-Y with the same
name, if users load both extension-A and extension-B, it seems to me
that extension-A registers the custom-format-X format as 'myformat'
only with CopyToRoutine, and extension-B overwrites the 'myformat'
registration by adding custom-format-Y's CopyFromRoutine. However, if
users register extension-C that implements both routines with the
format name 'myformat', they can register neither extension-A nor
extension-B, which seems to me that we don't allow overwriting the
registration in this case.

Do you assume that users use extension-A, extension-B and
extension-C without reading their documentation? If users
read their documentation before users use them, users can
know all of them use the same format name 'myformat' and
which extension provides Copy{From,To}Routine.

In this case, these users (who don't read documentation)
will be confused with the RegisterCopyRoutine("new-format",
NewFormatFromRoutine, NewFormatToRoutine) API too. Do we
really need to care about this case?

I think the core issue appears to be the internal management of custom
format entries but the current patch does enable registration
overwriting in the former case (extension-A and extension-B case).

This is the same behavior as existing custom EXPLAIN option
implementation. Should we use different behavior here?

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

I'm concerned that the patch has duplicated logics for the
registration of COPY FROM and COPY TO.

We can implement a convenient routine that can be used for
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine() if it's needed.

I meant there are duplicated codes in COPY FROM and COPY TO. For
instance, RegisterCopyFromRoutine() and RegisterCopyToRoutine() have
the same logic.

Yes, I understand it. I wanted to say that we can remove the
duplicated codes by introducing a RegisterSomething()
function that can be used by
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine():

void
RegisterSomething(...)
{
/* Common codes in RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine()
...
*/
}

void
RegisterExtensionExplainOption(...)
{
RegisterSomething(...);
}

void
RegisterCopyFromRoutine(...)
{
RegisterSomething(...);
}

void
RegisterCopyToRoutine(...)
{
RegisterSomething(...);
}

You think that this approach can't remove the duplicated
codes, right?

InitPostgres() is not a correct function as it's a process
initialization function. Probably we don't necessarily need to
register the built-in formats in the same way as custom formats. A
simple solution would be to have separate arrays for built-in formats
and custom formats and have the GetCopy[To|From]Routine() search both
arrays (built-in array first).

We had a discussion that we should dog-food APIs:

/messages/by-id/CAKFQuwaCHhrS+RE4p_OO6d7WEskd9b86-2cYcvChNkrP+7PJ7A@mail.gmail.com

We should (and usually do) dog-food APIs when reasonable
and this situation seems quite reasonable.

In this case, we don't need to dog-food APIs, right?

Yes, I think so.

OK. I don't have a strong opinion for it. If nobody objects
it, I'll do it when I update the patch set.

Thanks,
--
kou

#303Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#302)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jun 24, 2025 at 4:10 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC8-d=GF-hOvGqUyq2xFg=QGpYfCiWJbcp4wcn0UidrPw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 24 Jun 2025 15:24:23 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think that API that can be understandable without the
additional note is better API than API that needs some
notes.

I don't see much difference in this case.

Why do you suggest the RegisterCopyRoutine("new-format",
NewFormatFromRoutine, NewFormatToRoutine) API? You want to
remove the duplicated codes in
RegisterCopy{From,To}Routine(), right?

No. I think that if extensions are likely to support both
CopyToRoutine and CopyFromRoutine in most cases, it would be simpler
to register the custom format using a single API. Registering
CopyToRoutine and CopyFromRoutine separately seems redundant to me.

BTW, what do you think about my answer (one feature by one
operation API is more extendable API) for your question
(extendability and API compatibility)?

Could you provide some examples? It seems to me that even if we
provide the single API for the registration we can provide other APIs
differently. For example, if we want to provide an API to register a
custom option, we can provide RegisterCopyToOption() and
RegisterCopyFromOption().

Suppose that extension-A implements only CopyToRoutine for the
custom-format-X with the format name 'myformat' and extension-B
implements only CopyFromRoutine for the custom-format-Y with the same
name, if users load both extension-A and extension-B, it seems to me
that extension-A registers the custom-format-X format as 'myformat'
only with CopyToRoutine, and extension-B overwrites the 'myformat'
registration by adding custom-format-Y's CopyFromRoutine. However, if
users register extension-C that implements both routines with the
format name 'myformat', they can register neither extension-A nor
extension-B, which seems to me that we don't allow overwriting the
registration in this case.

Do you assume that users use extension-A, extension-B and
extension-C without reading their documentation? If users
read their documentation before users use them, users can
know all of them use the same format name 'myformat' and
which extension provides Copy{From,To}Routine.

In this case, these users (who don't read documentation)
will be confused with the RegisterCopyRoutine("new-format",
NewFormatFromRoutine, NewFormatToRoutine) API too. Do we
really need to care about this case?

My point is about the consistency of registration behavior. I think
that we should raise an error if the custom format name that an
extension tries to register already exists. Therefore I'm not sure why
installing extension-A+B is okay but installing extension-C+A or
extension-C+B is not okay? We can think that's an extension-A's choice
not to implement CopyFromRoutine for the 'myformat' format so
extension-B should not change it.

I think the core issue appears to be the internal management of custom
format entries but the current patch does enable registration
overwriting in the former case (extension-A and extension-B case).

This is the same behavior as existing custom EXPLAIN option
implementation. Should we use different behavior here?

I think that unlike custom EXPLAIN options, it's better to raise an
error or a warning if the custom format name (or combination of format
name and COPY direction) that an extension tries to register already
exists.

FYI: RegisterCopy{From,To}Routine() uses the same logic
as RegisterExtensionExplainOption().

I'm concerned that the patch has duplicated logics for the
registration of COPY FROM and COPY TO.

We can implement a convenient routine that can be used for
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine() if it's needed.

I meant there are duplicated codes in COPY FROM and COPY TO. For
instance, RegisterCopyFromRoutine() and RegisterCopyToRoutine() have
the same logic.

Yes, I understand it. I wanted to say that we can remove the
duplicated codes by introducing a RegisterSomething()
function that can be used by
RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine():

void
RegisterSomething(...)
{
/* Common codes in RegisterExtensionExplainOption() and
RegisterCopy{From,To}Routine()
...
*/
}

void
RegisterExtensionExplainOption(...)
{
RegisterSomething(...);
}

void
RegisterCopyFromRoutine(...)
{
RegisterSomething(...);
}

void
RegisterCopyToRoutine(...)
{
RegisterSomething(...);
}

You think that this approach can't remove the duplicated
codes, right?

Well, no, I just meant we don't need to do that. Custom EXPLAIN option
and custom COPY format are different features and have different
requirements. I think while we don't need to remove duplicates between
them at least at this stage we need to remove the duplicate between
COPY TO registration code and COPY TO's one.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#304Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#303)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoC19fV5Ujs-1r24MNU+hwTQUeZMEnaJDjSFwHLMMdFi0Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 25 Jun 2025 00:48:46 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think that API that can be understandable without the
additional note is better API than API that needs some
notes.

I don't see much difference in this case.

OK. It seems that we can't agree on which API is better.

I've implemented your idea as the v42 patch set. Can we
proceed this proposal with this approach? What is the next
step?

No. I think that if extensions are likely to support both
CopyToRoutine and CopyFromRoutine in most cases, it would be simpler
to register the custom format using a single API. Registering
CopyToRoutine and CopyFromRoutine separately seems redundant to me.

I don't think so. In general, extensions are implemented
step by step. Extension developers will not implement
CopyToRoutine and CopyFromRoutine at once even if extensions
implement both of CopyToRoutine and CopyFromRoutine
eventually.

Could you provide some examples? It seems to me that even if we
provide the single API for the registration we can provide other APIs
differently. For example, if we want to provide an API to register a
custom option, we can provide RegisterCopyToOption() and
RegisterCopyFromOption().

Yes. We can mix different style APIs. In general, consistent
style APIs is easier to use than mixed style APIs. If it's
not an important point in PostgreSQL API design, my point is
meaningless. (Sorry, I'm not familiar with PostgreSQL API
design.)

My point is about the consistency of registration behavior. I think
that we should raise an error if the custom format name that an
extension tries to register already exists. Therefore I'm not sure why
installing extension-A+B is okay but installing extension-C+A or
extension-C+B is not okay? We can think that's an extension-A's choice
not to implement CopyFromRoutine for the 'myformat' format so
extension-B should not change it.

I think that it's the users' responsibility. I think that
it's more convenient that users can mix extension-A+B (A
provides only TO format and B provides only FROM format)
than users can't mix them. I think that extension-A doesn't
want to prohibit FROM format in the case. Extension-A just
doesn't care about FROM format.

FYI: Both of extension-C+A and extension-C+B are OK when we
update not raising an error existing format.

Thanks,
--
kou

Attachments:

v42-0001-Export-CopyDest-as-private-data.patchtext/x-patch; charset=us-asciiDownload
From 48b99b69b4be26bf6a4e2525d3de28a96e2b241a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Mon, 25 Nov 2024 13:58:33 +0900
Subject: [PATCH v42 1/2] Export CopyDest as private data

This is a preparation to export CopyToStateData as private data.

CopyToStateData depends on CopyDest. So we need to export CopyDest
too.

But CopyDest and CopySource has the same names. So we can't export
CopyDest as-is.

This uses the COPY_DEST_ prefix for CopyDest enum values. CopySource
uses the COPY_FROM_ prefix for consistency.
---
 src/backend/commands/copyfrom.c          |  4 ++--
 src/backend/commands/copyfromparse.c     | 10 ++++----
 src/backend/commands/copyto.c            | 30 ++++++++----------------
 src/include/commands/copyfrom_internal.h |  8 +++----
 src/include/commands/copyto_internal.h   | 28 ++++++++++++++++++++++
 5 files changed, 49 insertions(+), 31 deletions(-)
 create mode 100644 src/include/commands/copyto_internal.h

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fbbbc09a97b..b4dad744547 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1709,7 +1709,7 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	cstate->copy_src = COPY_SOURCE_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
@@ -1837,7 +1837,7 @@ BeginCopyFrom(ParseState *pstate,
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		cstate->copy_src = COPY_SOURCE_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index f5fc346e201..9f7171d1478 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -180,7 +180,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
+	cstate->copy_src = COPY_SOURCE_FRONTEND;
 	cstate->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
@@ -248,7 +248,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 
 	switch (cstate->copy_src)
 	{
-		case COPY_FILE:
+		case COPY_SOURCE_FILE:
 			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
 			if (ferror(cstate->copy_file))
 				ereport(ERROR,
@@ -257,7 +257,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 			if (bytesread == 0)
 				cstate->raw_reached_eof = true;
 			break;
-		case COPY_FRONTEND:
+		case COPY_SOURCE_FRONTEND:
 			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
 			{
 				int			avail;
@@ -340,7 +340,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 				bytesread += avail;
 			}
 			break;
-		case COPY_CALLBACK:
+		case COPY_SOURCE_CALLBACK:
 			bytesread = cstate->data_source_cb(databuf, minread, maxread);
 			break;
 	}
@@ -1172,7 +1172,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->copy_src == COPY_SOURCE_FRONTEND)
 		{
 			int			inbytes;
 
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ea6f18f2c80..99aec9c4c48 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -20,6 +20,7 @@
 
 #include "access/tableam.h"
 #include "commands/copyapi.h"
+#include "commands/copyto_internal.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -36,17 +37,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
 /*
  * This struct contains all the state variables used throughout a COPY TO
  * operation.
@@ -69,7 +59,7 @@ typedef struct CopyToStateData
 
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
 	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
 
 	int			file_encoding;	/* file or remote side's character encoding */
@@ -401,7 +391,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -448,7 +438,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -482,11 +472,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +497,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +505,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -902,12 +892,12 @@ BeginCopyTo(ParseState *pstate,
 	/* See Multibyte encoding comment above */
 	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..24157e11a73 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -24,9 +24,9 @@
  */
 typedef enum CopySource
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
+	COPY_SOURCE_FILE,			/* from file (or a piped program) */
+	COPY_SOURCE_FRONTEND,		/* from frontend */
+	COPY_SOURCE_CALLBACK,		/* from callback function */
 } CopySource;
 
 /*
@@ -64,7 +64,7 @@ typedef struct CopyFromStateData
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_SOURCE_FRONTEND */
 
 	EolType		eol_type;		/* EOL type of input */
 	int			file_encoding;	/* file or remote side's character encoding */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
new file mode 100644
index 00000000000..42ddb37a8a2
--- /dev/null
+++ b/src/include/commands/copyto_internal.h
@@ -0,0 +1,28 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyto_internal.h
+ *	  Internal definitions for COPY TO command.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copyto_internal.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYTO_INTERNAL_H
+#define COPYTO_INTERNAL_H
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+#endif							/* COPYTO_INTERNAL_H */
-- 
2.49.0

v42-0002-Add-support-for-registering-COPY-FROM-TO-routine.patchtext/x-patch; charset=us-asciiDownload
From c71a8265d3fd81317e22494cdc25de4ffb0378d8 Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Wed, 18 Jun 2025 11:43:09 +0900
Subject: [PATCH v42 2/2] Add support for registering COPY {FROM,TO} routines

This uses the C API approach like custom EXPLAIN option. Some of this
are based on the custom EXPLAIN option implementations.

This approach provides C API to register COPY {FROM,TO} routines:

    void RegisterCopyRoutine(const char *name,
                             const CopyFromRoutine *from_routine,
                             const CopyToRoutine *to_routine);

(This is based on RegisterExtensionExplainOption().)

This assigns an ID for each name internally but the current API set
doesn't provide it to users. Because it's not needed for now. If it's
needed, we can provide APIs for it like GetExplainExtensionId() for
custom EXPLAIN option.

This manages registered COPY {FROM,TO} routines in a
process. Registered COPY {FROM,TO} routines aren't shared in multiple
processes because it's not needed for now. We may revisit it when we
need it.
---
 src/backend/commands/copy.c                   | 120 +++++++++++++++++-
 src/backend/commands/copyfrom.c               |  27 ++--
 src/backend/commands/copyto.c                 |  80 +++---------
 src/include/commands/copy.h                   |   8 +-
 src/include/commands/copyapi.h                |   5 +
 src/include/commands/copyto_internal.h        |  55 ++++++++
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 src/test/modules/test_copy_format/.gitignore  |   4 +
 src/test/modules/test_copy_format/Makefile    |  21 +++
 .../expected/test_copy_format.out             |  19 +++
 src/test/modules/test_copy_format/meson.build |  29 +++++
 .../test_copy_format/sql/test_copy_format.sql |   8 ++
 .../test_copy_format/test_copy_format.c       |  91 +++++++++++++
 .../test_copy_format/test_copy_format.conf    |   1 +
 15 files changed, 392 insertions(+), 78 deletions(-)
 create mode 100644 src/test/modules/test_copy_format/.gitignore
 create mode 100644 src/test/modules/test_copy_format/Makefile
 create mode 100644 src/test/modules/test_copy_format/expected/test_copy_format.out
 create mode 100644 src/test/modules/test_copy_format/meson.build
 create mode 100644 src/test/modules/test_copy_format/sql/test_copy_format.sql
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.c
 create mode 100644 src/test/modules/test_copy_format/test_copy_format.conf

diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 74ae42b19a7..60c00b9698b 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -22,7 +22,7 @@
 #include "access/table.h"
 #include "access/xact.h"
 #include "catalog/pg_authid.h"
-#include "commands/copy.h"
+#include "commands/copyapi.h"
 #include "commands/defrem.h"
 #include "executor/executor.h"
 #include "mb/pg_wchar.h"
@@ -39,6 +39,107 @@
 #include "utils/rel.h"
 #include "utils/rls.h"
 
+/*
+ * Manage registered COPY routines in a process. They aren't shared in
+ * multiple processes for now. We may do it later when it's needed.
+ */
+
+typedef struct
+{
+	const char *name;
+	const CopyFromRoutine *from_routine;
+	const CopyToRoutine *to_routine;
+}			CopyRoutineEntry;
+
+static CopyRoutineEntry * CopyRoutineEntries = NULL;
+static int	CopyRoutineEntriesAssigned = 0;
+static int	CopyRoutineEntriesAllocated = 0;
+
+/*
+ * Register new COPY routines for the given name.
+ *
+ * When name is used as a COPY format name, routine will be used to process
+ * the COPY request. See CopyFromRoutine and CopyToRoutine how to implement a
+ * COPY routine.
+ *
+ * If name is already registered, an error is raised.
+ *
+ * name is assumed to be a constant string or allocated in storage that will
+ * never be freed.
+ *
+ * from_routine and to_routine are assumed to be allocated in storage that
+ * will never be freed.
+ */
+void
+RegisterCopyRoutine(const char *name, const CopyFromRoutine *from_routine, const CopyToRoutine *to_routine)
+{
+	CopyRoutineEntry *entry;
+
+	/* Search for an existing routine by this name; if found, raise an error. */
+	for (int i = 0; i < CopyRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyRoutineEntries[i].name, name) == 0)
+		{
+			ereport(ERROR,
+					errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					errmsg("cannot register the same COPY format name: %s", name));
+		}
+	}
+
+	/* If there is no array yet, create one. */
+	if (!CopyRoutineEntries)
+	{
+		CopyRoutineEntriesAllocated = 16;
+		CopyRoutineEntries =
+			MemoryContextAlloc(TopMemoryContext,
+							   sizeof(CopyRoutineEntry) * CopyRoutineEntriesAllocated);
+	}
+
+	/* If there's an array but it's currently full, expand it. */
+	if (CopyRoutineEntriesAssigned >= CopyRoutineEntriesAllocated)
+	{
+		int			i = pg_nextpower2_32(CopyRoutineEntriesAssigned + 1);
+
+		CopyRoutineEntries =
+			repalloc(CopyRoutineEntries, sizeof(CopyRoutineEntry) * i);
+		CopyRoutineEntriesAllocated = i;
+	}
+
+	/* Assign new ID. */
+	entry = &CopyRoutineEntries[CopyRoutineEntriesAssigned++];
+	entry->name = name;
+	entry->from_routine = from_routine;
+	entry->to_routine = to_routine;
+}
+
+/*
+ * Find COPY routines for the given name.
+ *
+ * This returns true if the given name is registered, false otherwise.
+ *
+ * If the given name is registered, registered CopyFromRoutine and
+ * CopyToRoutine are set to output parameters, from_routine and to_routine.
+ * from_routine and to_routine can be NULL if they are not needed.
+ */
+bool
+FindCopyRoutine(const char *name, const CopyFromRoutine **from_routine,
+				const CopyToRoutine **to_routine)
+{
+	for (int i = 0; i < CopyRoutineEntriesAssigned; ++i)
+	{
+		if (strcmp(CopyRoutineEntries[i].name, name) == 0)
+		{
+			if (from_routine)
+				*from_routine = CopyRoutineEntries[i].from_routine;
+			if (to_routine)
+				*to_routine = CopyRoutineEntries[i].to_routine;
+			return true;
+		}
+	}
+
+	return false;
+}
+
 /*
  *	 DoCopy executes the SQL COPY statement
  *
@@ -520,17 +621,28 @@ ProcessCopyOptions(ParseState *pstate,
 		if (strcmp(defel->defname, "format") == 0)
 		{
 			char	   *fmt = defGetString(defel);
+			bool		is_valid;
 
 			if (format_specified)
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
-			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
-			else if (strcmp(fmt, "csv") == 0)
+			if (strcmp(fmt, "csv") == 0)
 				opts_out->csv_mode = true;
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
+
+			if (is_from)
+			{
+				opts_out->from_routine = GetCopyFromRoutine(fmt);
+				is_valid = opts_out->from_routine != NULL;
+			}
 			else
+			{
+				opts_out->to_routine = GetCopyToRoutine(fmt);
+				is_valid = opts_out->to_routine != NULL;
+			}
+
+			if (!is_valid)
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 						 errmsg("COPY format \"%s\" not recognized", fmt),
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index b4dad744547..e872815f015 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -151,17 +151,22 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 	.CopyFromEnd = CopyFromBinaryEnd,
 };
 
-/* Return a COPY FROM routine for the given options */
-static const CopyFromRoutine *
-CopyFromGetRoutine(const CopyFormatOptions *opts)
+/* Return a COPY FROM routine for the given name */
+const CopyFromRoutine *
+GetCopyFromRoutine(const char *name)
 {
-	if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	const CopyFromRoutine *routine = NULL;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+	if (strcmp(name, "text") == 0)
+		return &CopyFromRoutineText;
+	else if (strcmp(name, "csv") == 0)
+		return &CopyFromRoutineCSV;
+	else if (strcmp(name, "binary") == 0)
+		return &CopyFromRoutineBinary;
+	else if (FindCopyRoutine(name, &routine, NULL))
+		return routine;
+	else
+		return NULL;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -1574,7 +1579,9 @@ BeginCopyFrom(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
 	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(&cstate->opts);
+	cstate->routine = cstate->opts.from_routine;
+	if (!cstate->routine)
+		cstate->routine = &CopyFromRoutineText; /* default is text */
 
 	/* Process the target relation */
 	cstate->rel = rel;
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 99aec9c4c48..a54abbe6853 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -19,12 +19,9 @@
 #include <sys/stat.h>
 
 #include "access/tableam.h"
-#include "commands/copyapi.h"
 #include "commands/copyto_internal.h"
 #include "commands/progress.h"
-#include "executor/execdesc.h"
 #include "executor/executor.h"
-#include "executor/tuptable.h"
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "mb/pg_wchar.h"
@@ -37,56 +34,6 @@
 #include "utils/rel.h"
 #include "utils/snapmgr.h"
 
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
- *
- * Multi-byte encodings: all supported client-side encodings encode multi-byte
- * characters by having the first byte's high bit set. Subsequent bytes of the
- * character can have the high bit not set. When scanning data in such an
- * encoding to look for a match to a single-byte (ie ASCII) character, we must
- * use the full pg_encoding_mblen() machinery to skip over multibyte
- * characters, else we might find a false match to a trailing byte. In
- * supported server encodings, there is no possibility of a false match, and
- * it's faster to make useless comparisons to trailing bytes than it is to
- * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
- * when we have to do it the hard way.
- */
-typedef struct CopyToStateData
-{
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
-	int			file_encoding;	/* file or remote side's character encoding */
-	bool		need_transcoding;	/* file encoding diff from server? */
-	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
-
 /* DestReceiver for COPY (query) TO */
 typedef struct
 {
@@ -162,17 +109,22 @@ static const CopyToRoutine CopyToRoutineBinary = {
 	.CopyToEnd = CopyToBinaryEnd,
 };
 
-/* Return a COPY TO routine for the given options */
-static const CopyToRoutine *
-CopyToGetRoutine(const CopyFormatOptions *opts)
+/* Return a COPY TO routine for the given name */
+const CopyToRoutine *
+GetCopyToRoutine(const char *name)
 {
-	if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	const CopyToRoutine *routine = NULL;
 
-	/* default is text */
-	return &CopyToRoutineText;
+	if (strcmp(name, "text") == 0)
+		return &CopyToRoutineText;
+	else if (strcmp(name, "csv") == 0)
+		return &CopyToRoutineCSV;
+	else if (strcmp(name, "binary") == 0)
+		return &CopyToRoutineBinary;
+	else if (FindCopyRoutine(name, NULL, &routine))
+		return routine;
+	else
+		return NULL;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -693,7 +645,9 @@ BeginCopyTo(ParseState *pstate,
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
 	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(&cstate->opts);
+	cstate->routine = cstate->opts.to_routine;
+	if (!cstate->routine)
+		cstate->routine = &CopyToRoutineText;	/* default is text */
 
 	/* Process the source/target relation or query */
 	if (rel)
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 06dfdfef721..64a9ced0de4 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -51,6 +51,10 @@ typedef enum CopyLogVerbosityChoice
 	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
 } CopyLogVerbosityChoice;
 
+/* These are in commands/copyapi.h */
+struct CopyFromRoutine;
+struct CopyToRoutine;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -87,9 +91,11 @@ typedef struct CopyFormatOptions
 	CopyLogVerbosityChoice log_verbosity;	/* verbosity of logged messages */
 	int64		reject_limit;	/* maximum tolerable number of errors */
 	List	   *convert_select; /* list of column names (can be NIL) */
+	const struct CopyFromRoutine *from_routine; /* routine for FROM */
+	const struct CopyToRoutine *to_routine; /* routine for TO */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
+/* These are private in commands/copy[from|to]_internal.h */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..e06ab93eaff 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -102,4 +102,9 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern void RegisterCopyRoutine(const char *name, const CopyFromRoutine *from_routine, const CopyToRoutine *to_routine);
+extern bool FindCopyRoutine(const char *name, const CopyFromRoutine **from_routine, const CopyToRoutine **to_routine);
+extern const CopyToRoutine *GetCopyToRoutine(const char *name);
+extern const CopyFromRoutine *GetCopyFromRoutine(const char *name);
+
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyto_internal.h b/src/include/commands/copyto_internal.h
index 42ddb37a8a2..9dbbbc592b7 100644
--- a/src/include/commands/copyto_internal.h
+++ b/src/include/commands/copyto_internal.h
@@ -14,6 +14,11 @@
 #ifndef COPYTO_INTERNAL_H
 #define COPYTO_INTERNAL_H
 
+#include "commands/copyapi.h"
+#include "executor/execdesc.h"
+#include "executor/tuptable.h"
+#include "nodes/execnodes.h"
+
 /*
  * Represents the different dest cases we need to worry about at
  * the bottom level
@@ -25,4 +30,54 @@ typedef enum CopyDest
 	COPY_DEST_CALLBACK,			/* to callback function */
 } CopyDest;
 
+/*
+ * This struct contains all the state variables used throughout a COPY TO
+ * operation.
+ *
+ * Multi-byte encodings: all supported client-side encodings encode multi-byte
+ * characters by having the first byte's high bit set. Subsequent bytes of the
+ * character can have the high bit not set. When scanning data in such an
+ * encoding to look for a match to a single-byte (ie ASCII) character, we must
+ * use the full pg_encoding_mblen() machinery to skip over multibyte
+ * characters, else we might find a false match to a trailing byte. In
+ * supported server encodings, there is no possibility of a false match, and
+ * it's faster to make useless comparisons to trailing bytes than it is to
+ * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
+ * when we have to do it the hard way.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 #endif							/* COPYTO_INTERNAL_H */
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index aa1d27bbed3..9bf5d58cdae 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -17,6 +17,7 @@ SUBDIRS = \
 		  test_aio \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 9de0057bd1d..5fd06de2737 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -16,6 +16,7 @@ subdir('ssl_passphrase_callback')
 subdir('test_aio')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_format/.gitignore b/src/test/modules/test_copy_format/.gitignore
new file mode 100644
index 00000000000..5dcb3ff9723
--- /dev/null
+++ b/src/test/modules/test_copy_format/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/src/test/modules/test_copy_format/Makefile b/src/test/modules/test_copy_format/Makefile
new file mode 100644
index 00000000000..85dce14ebb3
--- /dev/null
+++ b/src/test/modules/test_copy_format/Makefile
@@ -0,0 +1,21 @@
+# src/test/modules/test_copy_format/Makefile
+
+MODULE_big = test_copy_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_format.o
+PGFILEDESC = "test_copy_format - test custom COPY FORMAT"
+
+REGRESS = test_copy_format
+REGRESS_OPTS = --temp-config $(top_srcdir)/src/test/modules/test_copy_format/test_copy_format.conf
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_format/expected/test_copy_format.out b/src/test/modules/test_copy_format/expected/test_copy_format.out
new file mode 100644
index 00000000000..163ff94fa41
--- /dev/null
+++ b/src/test/modules/test_copy_format/expected/test_copy_format.out
@@ -0,0 +1,19 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+DROP TABLE copy_data;
diff --git a/src/test/modules/test_copy_format/meson.build b/src/test/modules/test_copy_format/meson.build
new file mode 100644
index 00000000000..723c51d3f45
--- /dev/null
+++ b/src/test/modules/test_copy_format/meson.build
@@ -0,0 +1,29 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_format_sources = files(
+  'test_copy_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_format',
+    '--FILEDESC', 'test_copy_format - test custom COPY FORMAT',])
+endif
+
+test_copy_format = shared_module('test_copy_format',
+  test_copy_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_format
+
+tests += {
+  'name': 'test_copy_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_format',
+    ],
+    'regress_args': ['--temp-config', files('test_copy_format.conf')],
+  },
+}
diff --git a/src/test/modules/test_copy_format/sql/test_copy_format.sql b/src/test/modules/test_copy_format/sql/test_copy_format.sql
new file mode 100644
index 00000000000..6d60a493e0e
--- /dev/null
+++ b/src/test/modules/test_copy_format/sql/test_copy_format.sql
@@ -0,0 +1,8 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_copy_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_copy_format');
+
+DROP TABLE copy_data;
diff --git a/src/test/modules/test_copy_format/test_copy_format.c b/src/test/modules/test_copy_format/test_copy_format.c
new file mode 100644
index 00000000000..dd63ccf2e0f
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.c
@@ -0,0 +1,91 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_format/test_copy_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+#include "utils/builtins.h"
+
+PG_MODULE_MAGIC;
+
+static void
+TestCopyFromInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE, (errmsg("CopyFromInFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyFromStart(CopyFromState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyFromStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static bool
+TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls)
+{
+	ereport(NOTICE, (errmsg("CopyFromOneRow")));
+	return false;
+}
+
+static void
+TestCopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyFromEnd")));
+}
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.CopyFromInFunc = TestCopyFromInFunc,
+	.CopyFromStart = TestCopyFromStart,
+	.CopyFromOneRow = TestCopyFromOneRow,
+	.CopyFromEnd = TestCopyFromEnd,
+};
+
+static void
+TestCopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE, (errmsg("CopyToOutFunc: attribute: %s", format_type_be(atttypid))));
+}
+
+static void
+TestCopyToStart(CopyToState cstate, TupleDesc tupDesc)
+{
+	ereport(NOTICE, (errmsg("CopyToStart: the number of attributes: %d", tupDesc->natts)));
+}
+
+static void
+TestCopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: the number of valid values: %u", slot->tts_nvalid)));
+}
+
+static void
+TestCopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.CopyToOutFunc = TestCopyToOutFunc,
+	.CopyToStart = TestCopyToStart,
+	.CopyToOneRow = TestCopyToOneRow,
+	.CopyToEnd = TestCopyToEnd,
+};
+
+void
+_PG_init(void)
+{
+	RegisterCopyRoutine("test_copy_format", &CopyFromRoutineTestCopyFormat,
+						&CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_format/test_copy_format.conf b/src/test/modules/test_copy_format/test_copy_format.conf
new file mode 100644
index 00000000000..743a02ac92a
--- /dev/null
+++ b/src/test/modules/test_copy_format/test_copy_format.conf
@@ -0,0 +1 @@
+shared_preload_libraries = 'test_copy_format'
-- 
2.49.0

#305Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#304)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Jun 25, 2025 at 4:35 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC19fV5Ujs-1r24MNU+hwTQUeZMEnaJDjSFwHLMMdFi0Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 25 Jun 2025 00:48:46 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think that API that can be understandable without the
additional note is better API than API that needs some
notes.

I don't see much difference in this case.

OK. It seems that we can't agree on which API is better.

I've implemented your idea as the v42 patch set. Can we
proceed this proposal with this approach? What is the next
step?

I'll review the patches. In the meanwhile could you update the
documentation accordingly?

No. I think that if extensions are likely to support both
CopyToRoutine and CopyFromRoutine in most cases, it would be simpler
to register the custom format using a single API. Registering
CopyToRoutine and CopyFromRoutine separately seems redundant to me.

I don't think so. In general, extensions are implemented
step by step. Extension developers will not implement
CopyToRoutine and CopyFromRoutine at once even if extensions
implement both of CopyToRoutine and CopyFromRoutine
eventually.

Hmm, I think if the extension eventually implements both directions,
it would make sense to provide the single API.

Could you provide some examples? It seems to me that even if we
provide the single API for the registration we can provide other APIs
differently. For example, if we want to provide an API to register a
custom option, we can provide RegisterCopyToOption() and
RegisterCopyFromOption().

Yes. We can mix different style APIs. In general, consistent
style APIs is easier to use than mixed style APIs. If it's
not an important point in PostgreSQL API design, my point is
meaningless. (Sorry, I'm not familiar with PostgreSQL API
design.)

As far as I know, there is no standard for PostgreSQL API design, but
I don't find any weirdness in this design.

My point is about the consistency of registration behavior. I think
that we should raise an error if the custom format name that an
extension tries to register already exists. Therefore I'm not sure why
installing extension-A+B is okay but installing extension-C+A or
extension-C+B is not okay? We can think that's an extension-A's choice
not to implement CopyFromRoutine for the 'myformat' format so
extension-B should not change it.

I think that it's the users' responsibility. I think that
it's more convenient that users can mix extension-A+B (A
provides only TO format and B provides only FROM format)
than users can't mix them. I think that extension-A doesn't
want to prohibit FROM format in the case. Extension-A just
doesn't care about FROM format.

FYI: Both of extension-C+A and extension-C+B are OK when we
update not raising an error existing format.

I want to keep the basic design that one custom format comes from one
extension because it's straightforward for both of us and users and
easy to maintain format ID. IIUC we somewhat agreed on this design in
the previous API design (TABLESAMPLE like API).

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#306Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#305)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jun 30, 2025 at 3:00 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Wed, Jun 25, 2025 at 4:35 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoC19fV5Ujs-1r24MNU+hwTQUeZMEnaJDjSFwHLMMdFi0Q@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 25 Jun 2025 00:48:46 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

It's natural to add more related APIs with this
approach. The single registration API provides one feature
by one operation. If we use the RegisterCopyRoutine() for
FROM and TO formats API, it's not natural that we add more
related APIs. In this case, some APIs may provide multiple
features by one operation and other APIs may provide single
feature by one operation. Developers may be confused with
the API. For example, developers may think "what does mean
NULL here?" or "can we use NULL here?" for
"RegisterCopyRoutine("new-format", NewFormatFromRoutine,
NULL)".

We can document it in the comment for the registration function.

I think that API that can be understandable without the
additional note is better API than API that needs some
notes.

I don't see much difference in this case.

OK. It seems that we can't agree on which API is better.

I've implemented your idea as the v42 patch set. Can we
proceed this proposal with this approach? What is the next
step?

I'll review the patches.

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

I've implemented a draft patch for that idea. In the 0001 patch, I
moved fields that are related to internal working state from
CopyToStateData to CopyToExectuionData. COPY routine APIs pass a
pointer of CopyToStateData but extensions can access only fields
except for CopyToExectuionData. In the 0002 patch, I've implemented
the registration API and some related APIs based on your v42 patch.
I've made similar changes to COPY FROM codes too.

The patch is a very PoC phase and we would need to scrutinize the
fields that should or should not be exposed. Feedback is very welcome.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

0001-Refactor-CopyToStateData-and-CopyFromStateData.patchapplication/octet-stream; name=0001-Refactor-CopyToStateData-and-CopyFromStateData.patchDownload
From f80e7ea77a4faa2abd64782e9bdfc20ad8d0eff3 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Sun, 13 Jul 2025 06:50:40 -0700
Subject: [PATCH 1/2] Refactor CopyToStateData and CopyFromStateData.

Author:
Reviewed-by:
Discussion: https://postgr.es/m/
Backpatch-through:
---
 src/backend/commands/copyfrom.c          | 238 ++++++------
 src/backend/commands/copyfromparse.c     | 446 ++++++++++++-----------
 src/backend/commands/copyto.c            | 111 +++---
 src/include/commands/copy.h              |  55 ++-
 src/include/commands/copyfrom_internal.h |  22 +-
 5 files changed, 457 insertions(+), 415 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index fbbbc09a97b..03779838654 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -168,6 +168,7 @@ CopyFromGetRoutine(const CopyFormatOptions *opts)
 static void
 CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	AttrNumber	attr_count;
 
 	/*
@@ -175,24 +176,24 @@ CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
 	 * converted input data.  Otherwise, we can just point input_buf to the
 	 * same buffer as raw_buf.
 	 */
-	if (cstate->need_transcoding)
+	if (cstate->edata->need_transcoding)
 	{
-		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-		cstate->input_buf_index = cstate->input_buf_len = 0;
+		edata->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		edata->input_buf_index = edata->input_buf_len = 0;
 	}
 	else
-		cstate->input_buf = cstate->raw_buf;
-	cstate->input_reached_eof = false;
+		edata->input_buf = edata->raw_buf;
+	edata->input_reached_eof = false;
 
-	initStringInfo(&cstate->line_buf);
+	initStringInfo(&edata->line_buf);
 
 	/*
 	 * Create workspace for CopyReadAttributes results; used by CSV and text
 	 * format.
 	 */
 	attr_count = list_length(cstate->attnumlist);
-	cstate->max_fields = attr_count;
-	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+	edata->max_fields = attr_count;
+	edata->raw_fields = (char **) palloc(attr_count * sizeof(char *));
 }
 
 /*
@@ -254,48 +255,49 @@ void
 CopyFromErrorCallback(void *arg)
 {
 	CopyFromState cstate = (CopyFromState) arg;
+	CopyFromExecutionData *edata = cstate->edata;
 
-	if (cstate->relname_only)
+	if (edata->relname_only)
 	{
 		errcontext("COPY %s",
-				   cstate->cur_relname);
+				   edata->cur_relname);
 		return;
 	}
 	if (cstate->opts.binary)
 	{
 		/* can't usefully display the data */
-		if (cstate->cur_attname)
+		if (edata->cur_attname)
 			errcontext("COPY %s, line %" PRIu64 ", column %s",
-					   cstate->cur_relname,
-					   cstate->cur_lineno,
-					   cstate->cur_attname);
+					   edata->cur_relname,
+					   edata->cur_lineno,
+					   edata->cur_attname);
 		else
 			errcontext("COPY %s, line %" PRIu64,
-					   cstate->cur_relname,
-					   cstate->cur_lineno);
+					   edata->cur_relname,
+					   edata->cur_lineno);
 	}
 	else
 	{
-		if (cstate->cur_attname && cstate->cur_attval)
+		if (edata->cur_attname && edata->cur_attval)
 		{
 			/* error is relevant to a particular column */
 			char	   *attval;
 
-			attval = CopyLimitPrintoutLength(cstate->cur_attval);
+			attval = CopyLimitPrintoutLength(edata->cur_attval);
 			errcontext("COPY %s, line %" PRIu64 ", column %s: \"%s\"",
-					   cstate->cur_relname,
-					   cstate->cur_lineno,
-					   cstate->cur_attname,
+					   edata->cur_relname,
+					   edata->cur_lineno,
+					   edata->cur_attname,
 					   attval);
 			pfree(attval);
 		}
-		else if (cstate->cur_attname)
+		else if (edata->cur_attname)
 		{
 			/* error is relevant to a particular column, value is NULL */
 			errcontext("COPY %s, line %" PRIu64 ", column %s: null input",
-					   cstate->cur_relname,
-					   cstate->cur_lineno,
-					   cstate->cur_attname);
+					   edata->cur_relname,
+					   edata->cur_lineno,
+					   edata->cur_attname);
 		}
 		else
 		{
@@ -304,21 +306,21 @@ CopyFromErrorCallback(void *arg)
 			 *
 			 * If line_buf still contains the correct line, print it.
 			 */
-			if (cstate->line_buf_valid)
+			if (edata->line_buf_valid)
 			{
 				char	   *lineval;
 
-				lineval = CopyLimitPrintoutLength(cstate->line_buf.data);
+				lineval = CopyLimitPrintoutLength(edata->line_buf.data);
 				errcontext("COPY %s, line %" PRIu64 ": \"%s\"",
-						   cstate->cur_relname,
-						   cstate->cur_lineno, lineval);
+						   edata->cur_relname,
+						   edata->cur_lineno, lineval);
 				pfree(lineval);
 			}
 			else
 			{
 				errcontext("COPY %s, line %" PRIu64,
-						   cstate->cur_relname,
-						   cstate->cur_lineno);
+						   edata->cur_relname,
+						   edata->cur_lineno);
 			}
 		}
 	}
@@ -448,6 +450,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 						   int64 *processed)
 {
 	CopyFromState cstate = miinfo->cstate;
+	CopyFromExecutionData *edata = cstate->edata;
 	EState	   *estate = miinfo->estate;
 	int			nused = buffer->nused;
 	ResultRelInfo *resultRelInfo = buffer->resultRelInfo;
@@ -469,8 +472,8 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 		 * We suppress error context information other than the relation name,
 		 * if one of the operations below fails.
 		 */
-		Assert(!cstate->relname_only);
-		cstate->relname_only = true;
+		Assert(!edata->relname_only);
+		edata->relname_only = true;
 
 		while (sent < nused)
 		{
@@ -514,7 +517,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 
 					ExecARInsertTriggers(estate, resultRelInfo,
 										 slot, NIL,
-										 cstate->transition_capture);
+										 edata->transition_capture);
 				}
 			}
 
@@ -528,14 +531,14 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 			ExecClearTuple(slots[i]);
 
 		/* reset relname_only */
-		cstate->relname_only = false;
+		edata->relname_only = false;
 	}
 	else
 	{
 		CommandId	mycid = miinfo->mycid;
 		int			ti_options = miinfo->ti_options;
-		bool		line_buf_valid = cstate->line_buf_valid;
-		uint64		save_cur_lineno = cstate->cur_lineno;
+		bool		line_buf_valid = edata->line_buf_valid;
+		uint64		save_cur_lineno = edata->cur_lineno;
 		MemoryContext oldcontext;
 
 		Assert(buffer->bistate != NULL);
@@ -544,7 +547,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 		 * Print error context information correctly, if one of the operations
 		 * below fails.
 		 */
-		cstate->line_buf_valid = false;
+		edata->line_buf_valid = false;
 
 		/*
 		 * table_multi_insert may leak memory, so switch to short-lived memory
@@ -569,14 +572,14 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 			{
 				List	   *recheckIndexes;
 
-				cstate->cur_lineno = buffer->linenos[i];
+				edata->cur_lineno = buffer->linenos[i];
 				recheckIndexes =
 					ExecInsertIndexTuples(resultRelInfo,
 										  buffer->slots[i], estate, false,
 										  false, NULL, NIL, false);
 				ExecARInsertTriggers(estate, resultRelInfo,
 									 slots[i], recheckIndexes,
-									 cstate->transition_capture);
+									 edata->transition_capture);
 				list_free(recheckIndexes);
 			}
 
@@ -588,10 +591,10 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 					 (resultRelInfo->ri_TrigDesc->trig_insert_after_row ||
 					  resultRelInfo->ri_TrigDesc->trig_insert_new_table))
 			{
-				cstate->cur_lineno = buffer->linenos[i];
+				edata->cur_lineno = buffer->linenos[i];
 				ExecARInsertTriggers(estate, resultRelInfo,
 									 slots[i], NIL,
-									 cstate->transition_capture);
+									 edata->transition_capture);
 			}
 
 			ExecClearTuple(slots[i]);
@@ -603,8 +606,8 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
 									 *processed);
 
 		/* reset cur_lineno and line_buf_valid to what they were */
-		cstate->line_buf_valid = line_buf_valid;
-		cstate->cur_lineno = save_cur_lineno;
+		edata->line_buf_valid = line_buf_valid;
+		edata->cur_lineno = save_cur_lineno;
 	}
 
 	/* Mark that all slots are free */
@@ -778,6 +781,7 @@ CopyMultiInsertInfoStore(CopyMultiInsertInfo *miinfo, ResultRelInfo *rri,
 uint64
 CopyFrom(CopyFromState cstate)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	ResultRelInfo *resultRelInfo;
 	ResultRelInfo *target_resultRelInfo;
 	ResultRelInfo *prevResultRelInfo = NULL;
@@ -801,10 +805,10 @@ CopyFrom(CopyFromState cstate)
 	bool		leafpart_use_multi_insert = false;
 
 	Assert(cstate->rel);
-	Assert(list_length(cstate->range_table) == 1);
+	Assert(list_length(edata->range_table) == 1);
 
 	if (cstate->opts.on_error != COPY_ON_ERROR_STOP)
-		Assert(cstate->escontext);
+		Assert(edata->escontext);
 
 	/*
 	 * The target must be a plain, foreign, or partitioned relation, or have
@@ -913,7 +917,7 @@ CopyFrom(CopyFromState cstate)
 	 * index-entry-making machinery.  (There used to be a huge amount of code
 	 * here that basically duplicated execUtils.c ...)
 	 */
-	ExecInitRangeTable(estate, cstate->range_table, cstate->rteperminfos,
+	ExecInitRangeTable(estate, edata->range_table, edata->rteperminfos,
 					   bms_make_singleton(1));
 	resultRelInfo = target_resultRelInfo = makeNode(ResultRelInfo);
 	ExecInitResultRelation(estate, resultRelInfo, 1);
@@ -968,7 +972,7 @@ CopyFrom(CopyFromState cstate)
 	 * transition capture is active, we also set it in mtstate, which is
 	 * passed to ExecFindPartition() below.
 	 */
-	cstate->transition_capture = mtstate->mt_transition_capture =
+	edata->transition_capture = mtstate->mt_transition_capture =
 		MakeTransitionCaptureState(cstate->rel->trigdesc,
 								   RelationGetRelid(cstate->rel),
 								   CMD_INSERT);
@@ -980,9 +984,9 @@ CopyFrom(CopyFromState cstate)
 	if (cstate->rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
 		proute = ExecSetupPartitionTupleRouting(estate, cstate->rel);
 
-	if (cstate->whereClause)
-		cstate->qualexpr = ExecInitQual(castNode(List, cstate->whereClause),
-										&mtstate->ps);
+	if (edata->whereClause)
+		edata->qualexpr = ExecInitQual(castNode(List, edata->whereClause),
+									   &mtstate->ps);
 
 	/*
 	 * It's generally more efficient to prepare a bunch of tuples for
@@ -1025,7 +1029,7 @@ CopyFrom(CopyFromState cstate)
 		 */
 		insertMethod = CIM_SINGLE;
 	}
-	else if (cstate->volatile_defexprs)
+	else if (edata->volatile_defexprs)
 	{
 		/*
 		 * Can't support multi-inserts if there are any volatile default
@@ -1038,7 +1042,7 @@ CopyFrom(CopyFromState cstate)
 		 */
 		insertMethod = CIM_SINGLE;
 	}
-	else if (contain_volatile_functions(cstate->whereClause))
+	else if (contain_volatile_functions(edata->whereClause))
 	{
 		/*
 		 * Can't support multi-inserts if there are any volatile function
@@ -1150,7 +1154,7 @@ CopyFrom(CopyFromState cstate)
 			break;
 
 		if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE &&
-			cstate->escontext->error_occurred)
+			edata->escontext->error_occurred)
 		{
 			/*
 			 * Soft error occurred, skip this tuple and just make
@@ -1158,14 +1162,14 @@ CopyFrom(CopyFromState cstate)
 			 * don't set details_wanted and error_data is not to be filled,
 			 * just resetting error_occurred is enough.
 			 */
-			cstate->escontext->error_occurred = false;
+			edata->escontext->error_occurred = false;
 
 			/* Report that this tuple was skipped by the ON_ERROR clause */
 			pgstat_progress_update_param(PROGRESS_COPY_TUPLES_SKIPPED,
-										 cstate->num_errors);
+										 edata->num_errors);
 
 			if (cstate->opts.reject_limit > 0 &&
-				cstate->num_errors > cstate->opts.reject_limit)
+				edata->num_errors > cstate->opts.reject_limit)
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
 						 errmsg("skipped more than REJECT_LIMIT (%" PRId64 ") rows due to data type incompatibility",
@@ -1186,11 +1190,11 @@ CopyFrom(CopyFromState cstate)
 		/* Triggers and stuff need to be invoked in query context. */
 		MemoryContextSwitchTo(oldcontext);
 
-		if (cstate->whereClause)
+		if (edata->whereClause)
 		{
 			econtext->ecxt_scantuple = myslot;
 			/* Skip items that don't match COPY's WHERE clause */
-			if (!ExecQual(cstate->qualexpr, econtext))
+			if (!ExecQual(edata->qualexpr, econtext))
 			{
 				/*
 				 * Report that this tuple was filtered out by the WHERE
@@ -1266,8 +1270,8 @@ CopyFrom(CopyFromState cstate)
 			 * we can just remember the original unconverted tuple to avoid a
 			 * needless round trip conversion.
 			 */
-			if (cstate->transition_capture != NULL)
-				cstate->transition_capture->tcs_original_insert_tuple =
+			if (edata->transition_capture != NULL)
+				edata->transition_capture->tcs_original_insert_tuple =
 					!has_before_insert_row_trig ? myslot : NULL;
 
 			/*
@@ -1379,8 +1383,8 @@ CopyFrom(CopyFromState cstate)
 					/* Add this tuple to the tuple buffer */
 					CopyMultiInsertInfoStore(&multiInsertInfo,
 											 resultRelInfo, myslot,
-											 cstate->line_buf.len,
-											 cstate->cur_lineno);
+											 edata->line_buf.len,
+											 edata->cur_lineno);
 
 					/*
 					 * If enough inserts have queued up, then flush all
@@ -1440,7 +1444,7 @@ CopyFrom(CopyFromState cstate)
 
 					/* AFTER ROW INSERT Triggers */
 					ExecARInsertTriggers(estate, resultRelInfo, myslot,
-										 recheckIndexes, cstate->transition_capture);
+										 recheckIndexes, edata->transition_capture);
 
 					list_free(recheckIndexes);
 				}
@@ -1468,13 +1472,13 @@ CopyFrom(CopyFromState cstate)
 	error_context_stack = errcallback.previous;
 
 	if (cstate->opts.on_error != COPY_ON_ERROR_STOP &&
-		cstate->num_errors > 0 &&
+		edata->num_errors > 0 &&
 		cstate->opts.log_verbosity >= COPY_LOG_VERBOSITY_DEFAULT)
 		ereport(NOTICE,
 				errmsg_plural("%" PRIu64 " row was skipped due to data type incompatibility",
 							  "%" PRIu64 " rows were skipped due to data type incompatibility",
-							  cstate->num_errors,
-							  cstate->num_errors));
+							  edata->num_errors,
+							  edata->num_errors));
 
 	if (bistate != NULL)
 		FreeBulkInsertState(bistate);
@@ -1482,7 +1486,7 @@ CopyFrom(CopyFromState cstate)
 	MemoryContextSwitchTo(oldcontext);
 
 	/* Execute AFTER STATEMENT insertion triggers */
-	ExecASInsertTriggers(estate, target_resultRelInfo, cstate->transition_capture);
+	ExecASInsertTriggers(estate, target_resultRelInfo, edata->transition_capture);
 
 	/* Handle queued AFTER triggers */
 	AfterTriggerEndQuery(estate);
@@ -1536,6 +1540,7 @@ BeginCopyFrom(ParseState *pstate,
 			  List *options)
 {
 	CopyFromState cstate;
+	CopyFromExecutionData *edata;
 	bool		pipe = (filename == NULL);
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
@@ -1560,15 +1565,18 @@ BeginCopyFrom(ParseState *pstate,
 	/* Allocate workspace and zero all fields */
 	cstate = (CopyFromStateData *) palloc0(sizeof(CopyFromStateData));
 
+	edata = (CopyFromExecutionData *) palloc0(sizeof(CopyFromExecutionData));
+	cstate->edata = edata;
+
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
 	 * avoids memory leaks during repeated use of COPY in a query.
 	 */
-	cstate->copycontext = AllocSetContextCreate(CurrentMemoryContext,
-												"COPY",
-												ALLOCSET_DEFAULT_SIZES);
+	edata->copycontext = AllocSetContextCreate(CurrentMemoryContext,
+											   "COPY",
+											   ALLOCSET_DEFAULT_SIZES);
 
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+	oldcontext = MemoryContextSwitchTo(edata->copycontext);
 
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
@@ -1617,19 +1625,19 @@ BeginCopyFrom(ParseState *pstate,
 	/* Set up soft error handler for ON_ERROR */
 	if (cstate->opts.on_error != COPY_ON_ERROR_STOP)
 	{
-		cstate->escontext = makeNode(ErrorSaveContext);
-		cstate->escontext->type = T_ErrorSaveContext;
-		cstate->escontext->error_occurred = false;
+		edata->escontext = makeNode(ErrorSaveContext);
+		edata->escontext->type = T_ErrorSaveContext;
+		edata->escontext->error_occurred = false;
 
 		/*
 		 * Currently we only support COPY_ON_ERROR_IGNORE. We'll add other
 		 * options later
 		 */
 		if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE)
-			cstate->escontext->details_wanted = false;
+			edata->escontext->details_wanted = false;
 	}
 	else
-		cstate->escontext = NULL;
+		edata->escontext = NULL;
 
 	/* Convert FORCE_NULL name list to per-column flags, check validity */
 	cstate->opts.force_null_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool));
@@ -1663,7 +1671,7 @@ BeginCopyFrom(ParseState *pstate,
 		List	   *attnums;
 		ListCell   *cur;
 
-		cstate->convert_select_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool));
+		edata->convert_select_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool));
 
 		attnums = CopyGetAttnums(tupDesc, cstate->rel, cstate->opts.convert_select);
 
@@ -1677,7 +1685,7 @@ BeginCopyFrom(ParseState *pstate,
 						(errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
 						 errmsg_internal("selected column \"%s\" not referenced by COPY",
 										 NameStr(attr->attname))));
-			cstate->convert_select_flags[attnum - 1] = true;
+			edata->convert_select_flags[attnum - 1] = true;
 		}
 	}
 
@@ -1694,14 +1702,14 @@ BeginCopyFrom(ParseState *pstate,
 		cstate->file_encoding == PG_SQL_ASCII ||
 		GetDatabaseEncoding() == PG_SQL_ASCII)
 	{
-		cstate->need_transcoding = false;
+		cstate->edata->need_transcoding = false;
 	}
 	else
 	{
-		cstate->need_transcoding = true;
-		cstate->conversion_proc = FindDefaultConversionProc(cstate->file_encoding,
-															GetDatabaseEncoding());
-		if (!OidIsValid(cstate->conversion_proc))
+		cstate->edata->need_transcoding = true;
+		cstate->edata->conversion_proc = FindDefaultConversionProc(cstate->file_encoding,
+																   GetDatabaseEncoding());
+		if (!OidIsValid(cstate->edata->conversion_proc))
 			ereport(ERROR,
 					(errcode(ERRCODE_UNDEFINED_FUNCTION),
 					 errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
@@ -1709,17 +1717,17 @@ BeginCopyFrom(ParseState *pstate,
 							pg_encoding_to_char(GetDatabaseEncoding()))));
 	}
 
-	cstate->copy_src = COPY_FILE;	/* default */
+	edata->copy_src = COPY_FILE;	/* default */
 
-	cstate->whereClause = whereClause;
+	edata->whereClause = whereClause;
 
 	/* Initialize state variables */
-	cstate->eol_type = EOL_UNKNOWN;
-	cstate->cur_relname = RelationGetRelationName(cstate->rel);
-	cstate->cur_lineno = 0;
-	cstate->cur_attname = NULL;
-	cstate->cur_attval = NULL;
-	cstate->relname_only = false;
+	edata->eol_type = EOL_UNKNOWN;
+	edata->cur_relname = RelationGetRelationName(cstate->rel);
+	edata->cur_lineno = 0;
+	edata->cur_attname = NULL;
+	edata->cur_attval = NULL;
+	edata->relname_only = false;
 
 	/*
 	 * Allocate buffers for the input pipeline.
@@ -1727,17 +1735,17 @@ BeginCopyFrom(ParseState *pstate,
 	 * attribute_buf and raw_buf are used in both text and binary modes, but
 	 * input_buf and line_buf only in text mode.
 	 */
-	cstate->raw_buf = palloc(RAW_BUF_SIZE + 1);
-	cstate->raw_buf_index = cstate->raw_buf_len = 0;
-	cstate->raw_reached_eof = false;
+	edata->raw_buf = palloc(RAW_BUF_SIZE + 1);
+	edata->raw_buf_index = edata->raw_buf_len = 0;
+	edata->raw_reached_eof = false;
 
-	initStringInfo(&cstate->attribute_buf);
+	initStringInfo(&edata->attribute_buf);
 
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
 	if (pstate)
 	{
-		cstate->range_table = pstate->p_rtable;
-		cstate->rteperminfos = pstate->p_rteperminfos;
+		edata->range_table = pstate->p_rtable;
+		edata->rteperminfos = pstate->p_rteperminfos;
 	}
 
 	num_defaults = 0;
@@ -1818,26 +1826,26 @@ BeginCopyFrom(ParseState *pstate,
 		}
 	}
 
-	cstate->defaults = (bool *) palloc0(tupDesc->natts * sizeof(bool));
+	edata->defaults = (bool *) palloc0(tupDesc->natts * sizeof(bool));
 
 	/* initialize progress */
 	pgstat_progress_start_command(PROGRESS_COMMAND_COPY,
 								  cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid);
-	cstate->bytes_processed = 0;
+	edata->bytes_processed = 0;
 
 	/* We keep those variables in cstate. */
 	cstate->in_functions = in_functions;
 	cstate->typioparams = typioparams;
-	cstate->defmap = defmap;
-	cstate->defexprs = defexprs;
-	cstate->volatile_defexprs = volatile_defexprs;
-	cstate->num_defaults = num_defaults;
+	edata->defmap = defmap;
+	edata->defexprs = defexprs;
+	edata->volatile_defexprs = volatile_defexprs;
+	edata->num_defaults = num_defaults;
 	cstate->is_program = is_program;
 
 	if (data_source_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_src = COPY_CALLBACK;
+		edata->copy_src = COPY_CALLBACK;
 		cstate->data_source_cb = data_source_cb;
 	}
 	else if (pipe)
@@ -1847,7 +1855,7 @@ BeginCopyFrom(ParseState *pstate,
 		if (whereToSendOutput == DestRemote)
 			ReceiveCopyBegin(cstate);
 		else
-			cstate->copy_file = stdin;
+			edata->copy_file = stdin;
 	}
 	else
 	{
@@ -1856,8 +1864,8 @@ BeginCopyFrom(ParseState *pstate,
 		if (cstate->is_program)
 		{
 			progress_vals[1] = PROGRESS_COPY_TYPE_PROGRAM;
-			cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_R);
-			if (cstate->copy_file == NULL)
+			edata->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_R);
+			if (edata->copy_file == NULL)
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not execute command \"%s\": %m",
@@ -1868,8 +1876,8 @@ BeginCopyFrom(ParseState *pstate,
 			struct stat st;
 
 			progress_vals[1] = PROGRESS_COPY_TYPE_FILE;
-			cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_R);
-			if (cstate->copy_file == NULL)
+			edata->copy_file = AllocateFile(cstate->filename, PG_BINARY_R);
+			if (edata->copy_file == NULL)
 			{
 				/* copy errno because ereport subfunctions might change it */
 				int			save_errno = errno;
@@ -1883,7 +1891,7 @@ BeginCopyFrom(ParseState *pstate,
 								 "You may want a client-side facility such as psql's \\copy.") : 0));
 			}
 
-			if (fstat(fileno(cstate->copy_file), &st))
+			if (fstat(fileno(edata->copy_file), &st))
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not stat file \"%s\": %m",
@@ -1923,7 +1931,7 @@ EndCopyFrom(CopyFromState cstate)
 	}
 	else
 	{
-		if (cstate->filename != NULL && FreeFile(cstate->copy_file))
+		if (cstate->filename != NULL && FreeFile(cstate->edata->copy_file))
 			ereport(ERROR,
 					(errcode_for_file_access(),
 					 errmsg("could not close file \"%s\": %m",
@@ -1932,7 +1940,7 @@ EndCopyFrom(CopyFromState cstate)
 
 	pgstat_progress_end_command();
 
-	MemoryContextDelete(cstate->copycontext);
+	MemoryContextDelete(cstate->edata->copycontext);
 	pfree(cstate);
 }
 
@@ -1946,7 +1954,7 @@ ClosePipeFromProgram(CopyFromState cstate)
 
 	Assert(cstate->is_program);
 
-	pclose_rc = ClosePipeStream(cstate->copy_file);
+	pclose_rc = ClosePipeStream(cstate->edata->copy_file);
 	if (pclose_rc == -1)
 		ereport(ERROR,
 				(errcode_for_file_access(),
@@ -1959,7 +1967,7 @@ ClosePipeFromProgram(CopyFromState cstate)
 		 * should not report that as an error.  Otherwise, SIGPIPE indicates a
 		 * problem.
 		 */
-		if (!cstate->raw_reached_eof &&
+		if (!cstate->edata->raw_reached_eof &&
 			wait_result_is_signal(pclose_rc, SIGPIPE))
 			return;
 
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b1ae97b833d..595dc84b172 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -126,12 +126,12 @@ if (1) \
 #define REFILL_LINEBUF \
 if (1) \
 { \
-	if (input_buf_ptr > cstate->input_buf_index) \
+	if (input_buf_ptr > edata->input_buf_index) \
 	{ \
-		appendBinaryStringInfo(&cstate->line_buf, \
-							 cstate->input_buf + cstate->input_buf_index, \
-							   input_buf_ptr - cstate->input_buf_index); \
-		cstate->input_buf_index = input_buf_ptr; \
+		appendBinaryStringInfo(&edata->line_buf, \
+							 edata->input_buf + edata->input_buf_index, \
+							   input_buf_ptr - edata->input_buf_index); \
+		edata->input_buf_index = input_buf_ptr; \
 	} \
 } else ((void) 0)
 
@@ -180,8 +180,8 @@ ReceiveCopyBegin(CopyFromState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_src = COPY_FRONTEND;
-	cstate->fe_msgbuf = makeStringInfo();
+	cstate->edata->copy_src = COPY_FRONTEND;
+	cstate->edata->fe_msgbuf = makeStringInfo();
 	/* We *must* flush here to ensure FE knows it can send. */
 	pq_flush();
 }
@@ -246,23 +246,23 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 {
 	int			bytesread = 0;
 
-	switch (cstate->copy_src)
+	switch (cstate->edata->copy_src)
 	{
 		case COPY_FILE:
-			bytesread = fread(databuf, 1, maxread, cstate->copy_file);
-			if (ferror(cstate->copy_file))
+			bytesread = fread(databuf, 1, maxread, cstate->edata->copy_file);
+			if (ferror(cstate->edata->copy_file))
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not read from COPY file: %m")));
 			if (bytesread == 0)
-				cstate->raw_reached_eof = true;
+				cstate->edata->raw_reached_eof = true;
 			break;
 		case COPY_FRONTEND:
-			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
+			while (maxread > 0 && bytesread < minread && !cstate->edata->raw_reached_eof)
 			{
 				int			avail;
 
-				while (cstate->fe_msgbuf->cursor >= cstate->fe_msgbuf->len)
+				while (cstate->edata->fe_msgbuf->cursor >= cstate->edata->fe_msgbuf->len)
 				{
 					/* Try to receive another message */
 					int			mtype;
@@ -297,7 +297,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 							break;
 					}
 					/* Now collect the message body */
-					if (pq_getmessage(cstate->fe_msgbuf, maxmsglen))
+					if (pq_getmessage(cstate->edata->fe_msgbuf, maxmsglen))
 						ereport(ERROR,
 								(errcode(ERRCODE_CONNECTION_FAILURE),
 								 errmsg("unexpected EOF on client connection with an open transaction")));
@@ -309,13 +309,13 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 							break;
 						case PqMsg_CopyDone:
 							/* COPY IN correctly terminated by frontend */
-							cstate->raw_reached_eof = true;
+							cstate->edata->raw_reached_eof = true;
 							return bytesread;
 						case PqMsg_CopyFail:
 							ereport(ERROR,
 									(errcode(ERRCODE_QUERY_CANCELED),
 									 errmsg("COPY from stdin failed: %s",
-											pq_getmsgstring(cstate->fe_msgbuf))));
+											pq_getmsgstring(cstate->edata->fe_msgbuf))));
 							break;
 						case PqMsg_Flush:
 						case PqMsg_Sync:
@@ -331,10 +331,10 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 							Assert(false);	/* NOT REACHED */
 					}
 				}
-				avail = cstate->fe_msgbuf->len - cstate->fe_msgbuf->cursor;
+				avail = cstate->edata->fe_msgbuf->len - cstate->edata->fe_msgbuf->cursor;
 				if (avail > maxread)
 					avail = maxread;
-				pq_copymsgbytes(cstate->fe_msgbuf, databuf, avail);
+				pq_copymsgbytes(cstate->edata->fe_msgbuf, databuf, avail);
 				databuf = (void *) ((char *) databuf + avail);
 				maxread -= avail;
 				bytesread += avail;
@@ -399,12 +399,14 @@ CopyGetInt16(CopyFromState cstate, int16 *val)
 static void
 CopyConvertBuf(CopyFromState cstate)
 {
+	CopyFromExecutionData *edata = cstate->edata;
+
 	/*
 	 * If the file and server encoding are the same, no encoding conversion is
 	 * required.  However, we still need to verify that the input is valid for
 	 * the encoding.
 	 */
-	if (!cstate->need_transcoding)
+	if (!edata->need_transcoding)
 	{
 		/*
 		 * When conversion is not required, input_buf and raw_buf are the
@@ -412,8 +414,8 @@ CopyConvertBuf(CopyFromState cstate)
 		 * input_buf_len tracks how many of those bytes have already been
 		 * verified.
 		 */
-		int			preverifiedlen = cstate->input_buf_len;
-		int			unverifiedlen = cstate->raw_buf_len - cstate->input_buf_len;
+		int			preverifiedlen = edata->input_buf_len;
+		int			unverifiedlen = edata->raw_buf_len - edata->input_buf_len;
 		int			nverified;
 
 		if (unverifiedlen == 0)
@@ -421,8 +423,8 @@ CopyConvertBuf(CopyFromState cstate)
 			/*
 			 * If no more raw data is coming, report the EOF to the caller.
 			 */
-			if (cstate->raw_reached_eof)
-				cstate->input_reached_eof = true;
+			if (edata->raw_reached_eof)
+				edata->input_reached_eof = true;
 			return;
 		}
 
@@ -431,7 +433,7 @@ CopyConvertBuf(CopyFromState cstate)
 		 * previous round.
 		 */
 		nverified = pg_encoding_verifymbstr(cstate->file_encoding,
-											cstate->raw_buf + preverifiedlen,
+											edata->raw_buf + preverifiedlen,
 											unverifiedlen);
 		if (nverified == 0)
 		{
@@ -444,11 +446,11 @@ CopyConvertBuf(CopyFromState cstate)
 			 * least one character, and a failure to do so means that we've
 			 * hit an invalid byte sequence.
 			 */
-			if (cstate->raw_reached_eof || unverifiedlen >= pg_encoding_max_length(cstate->file_encoding))
-				cstate->input_reached_error = true;
+			if (edata->raw_reached_eof || unverifiedlen >= pg_encoding_max_length(cstate->file_encoding))
+				edata->input_reached_error = true;
 			return;
 		}
-		cstate->input_buf_len += nverified;
+		edata->input_buf_len += nverified;
 	}
 	else
 	{
@@ -462,31 +464,31 @@ CopyConvertBuf(CopyFromState cstate)
 		int			dstlen;
 		int			convertedlen;
 
-		if (RAW_BUF_BYTES(cstate) == 0)
+		if (RAW_BUF_BYTES(edata) == 0)
 		{
 			/*
 			 * If no more raw data is coming, report the EOF to the caller.
 			 */
-			if (cstate->raw_reached_eof)
-				cstate->input_reached_eof = true;
+			if (edata->raw_reached_eof)
+				edata->input_reached_eof = true;
 			return;
 		}
 
 		/*
 		 * First, copy down any unprocessed data.
 		 */
-		nbytes = INPUT_BUF_BYTES(cstate);
-		if (nbytes > 0 && cstate->input_buf_index > 0)
-			memmove(cstate->input_buf, cstate->input_buf + cstate->input_buf_index,
+		nbytes = INPUT_BUF_BYTES(edata);
+		if (nbytes > 0 && edata->input_buf_index > 0)
+			memmove(edata->input_buf, edata->input_buf + edata->input_buf_index,
 					nbytes);
-		cstate->input_buf_index = 0;
-		cstate->input_buf_len = nbytes;
-		cstate->input_buf[nbytes] = '\0';
+		edata->input_buf_index = 0;
+		edata->input_buf_len = nbytes;
+		edata->input_buf[nbytes] = '\0';
 
-		src = (unsigned char *) cstate->raw_buf + cstate->raw_buf_index;
-		srclen = cstate->raw_buf_len - cstate->raw_buf_index;
-		dst = (unsigned char *) cstate->input_buf + cstate->input_buf_len;
-		dstlen = INPUT_BUF_SIZE - cstate->input_buf_len + 1;
+		src = (unsigned char *) edata->raw_buf + edata->raw_buf_index;
+		srclen = edata->raw_buf_len - edata->raw_buf_index;
+		dst = (unsigned char *) edata->input_buf + edata->input_buf_len;
+		dstlen = INPUT_BUF_SIZE - edata->input_buf_len + 1;
 
 		/*
 		 * Do the conversion.  This might stop short, if there is an invalid
@@ -501,7 +503,7 @@ CopyConvertBuf(CopyFromState cstate)
 		 * after the end-of-input marker as long as it's valid for the
 		 * encoding, but that's harmless.
 		 */
-		convertedlen = pg_do_encoding_conversion_buf(cstate->conversion_proc,
+		convertedlen = pg_do_encoding_conversion_buf(cstate->edata->conversion_proc,
 													 cstate->file_encoding,
 													 GetDatabaseEncoding(),
 													 src, srclen,
@@ -517,12 +519,12 @@ CopyConvertBuf(CopyFromState cstate)
 			 * failure to do so must mean that we've hit a byte sequence
 			 * that's invalid.
 			 */
-			if (cstate->raw_reached_eof || srclen >= MAX_CONVERSION_INPUT_LENGTH)
-				cstate->input_reached_error = true;
+			if (edata->raw_reached_eof || srclen >= MAX_CONVERSION_INPUT_LENGTH)
+				edata->input_reached_error = true;
 			return;
 		}
-		cstate->raw_buf_index += convertedlen;
-		cstate->input_buf_len += strlen((char *) dst);
+		edata->raw_buf_index += convertedlen;
+		edata->input_buf_len += strlen((char *) dst);
 	}
 }
 
@@ -532,18 +534,20 @@ CopyConvertBuf(CopyFromState cstate)
 static void
 CopyConversionError(CopyFromState cstate)
 {
-	Assert(cstate->raw_buf_len > 0);
-	Assert(cstate->input_reached_error);
+	CopyFromExecutionData *edata = cstate->edata;
+
+	Assert(edata->raw_buf_len > 0);
+	Assert(edata->input_reached_error);
 
-	if (!cstate->need_transcoding)
+	if (!edata->need_transcoding)
 	{
 		/*
 		 * Everything up to input_buf_len was successfully verified, and
 		 * input_buf_len points to the invalid or incomplete character.
 		 */
 		report_invalid_encoding(cstate->file_encoding,
-								cstate->raw_buf + cstate->input_buf_len,
-								cstate->raw_buf_len - cstate->input_buf_len);
+								edata->raw_buf + edata->input_buf_len,
+								edata->raw_buf_len - edata->input_buf_len);
 	}
 	else
 	{
@@ -560,12 +564,12 @@ CopyConversionError(CopyFromState cstate)
 		unsigned char *dst;
 		int			dstlen;
 
-		src = (unsigned char *) cstate->raw_buf + cstate->raw_buf_index;
-		srclen = cstate->raw_buf_len - cstate->raw_buf_index;
-		dst = (unsigned char *) cstate->input_buf + cstate->input_buf_len;
-		dstlen = INPUT_BUF_SIZE - cstate->input_buf_len + 1;
+		src = (unsigned char *) edata->raw_buf + edata->raw_buf_index;
+		srclen = edata->raw_buf_len - edata->raw_buf_index;
+		dst = (unsigned char *) edata->input_buf + edata->input_buf_len;
+		dstlen = INPUT_BUF_SIZE - edata->input_buf_len + 1;
 
-		(void) pg_do_encoding_conversion_buf(cstate->conversion_proc,
+		(void) pg_do_encoding_conversion_buf(cstate->edata->conversion_proc,
 											 cstate->file_encoding,
 											 GetDatabaseEncoding(),
 											 src, srclen,
@@ -589,6 +593,7 @@ CopyConversionError(CopyFromState cstate)
 static void
 CopyLoadRawBuf(CopyFromState cstate)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	int			nbytes;
 	int			inbytes;
 
@@ -596,45 +601,45 @@ CopyLoadRawBuf(CopyFromState cstate)
 	 * In text mode, if encoding conversion is not required, raw_buf and
 	 * input_buf point to the same buffer.  Their len/index better agree, too.
 	 */
-	if (cstate->raw_buf == cstate->input_buf)
+	if (edata->raw_buf == edata->input_buf)
 	{
-		Assert(!cstate->need_transcoding);
-		Assert(cstate->raw_buf_index == cstate->input_buf_index);
-		Assert(cstate->input_buf_len <= cstate->raw_buf_len);
+		Assert(!edata->need_transcoding);
+		Assert(edata->raw_buf_index == edata->input_buf_index);
+		Assert(edata->input_buf_len <= edata->raw_buf_len);
 	}
 
 	/*
 	 * Copy down the unprocessed data if any.
 	 */
-	nbytes = RAW_BUF_BYTES(cstate);
-	if (nbytes > 0 && cstate->raw_buf_index > 0)
-		memmove(cstate->raw_buf, cstate->raw_buf + cstate->raw_buf_index,
+	nbytes = RAW_BUF_BYTES(edata);
+	if (nbytes > 0 && edata->raw_buf_index > 0)
+		memmove(edata->raw_buf, edata->raw_buf + edata->raw_buf_index,
 				nbytes);
-	cstate->raw_buf_len -= cstate->raw_buf_index;
-	cstate->raw_buf_index = 0;
+	edata->raw_buf_len -= edata->raw_buf_index;
+	edata->raw_buf_index = 0;
 
 	/*
 	 * If raw_buf and input_buf are in fact the same buffer, adjust the
 	 * input_buf variables, too.
 	 */
-	if (cstate->raw_buf == cstate->input_buf)
+	if (edata->raw_buf == edata->input_buf)
 	{
-		cstate->input_buf_len -= cstate->input_buf_index;
-		cstate->input_buf_index = 0;
+		edata->input_buf_len -= edata->input_buf_index;
+		edata->input_buf_index = 0;
 	}
 
 	/* Load more data */
-	inbytes = CopyGetData(cstate, cstate->raw_buf + cstate->raw_buf_len,
-						  1, RAW_BUF_SIZE - cstate->raw_buf_len);
+	inbytes = CopyGetData(cstate, edata->raw_buf + edata->raw_buf_len,
+						  1, RAW_BUF_SIZE - edata->raw_buf_len);
 	nbytes += inbytes;
-	cstate->raw_buf[nbytes] = '\0';
-	cstate->raw_buf_len = nbytes;
+	edata->raw_buf[nbytes] = '\0';
+	edata->raw_buf_len = nbytes;
 
-	cstate->bytes_processed += inbytes;
-	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->bytes_processed);
+	edata->bytes_processed += inbytes;
+	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, edata->bytes_processed);
 
 	if (inbytes == 0)
-		cstate->raw_reached_eof = true;
+		edata->raw_reached_eof = true;
 }
 
 /*
@@ -643,24 +648,25 @@ CopyLoadRawBuf(CopyFromState cstate)
  * On return, at least one more input character is loaded into
  * input_buf, or input_reached_eof is set.
  *
- * If INPUT_BUF_BYTES(cstate) > 0, the unprocessed bytes are moved to the start
+ * If INPUT_BUF_BYTES(edata) > 0, the unprocessed bytes are moved to the start
  * of the buffer and then we load more data after that.
  */
 static void
 CopyLoadInputBuf(CopyFromState cstate)
 {
-	int			nbytes = INPUT_BUF_BYTES(cstate);
+	CopyFromExecutionData *edata = cstate->edata;
+	int			nbytes = INPUT_BUF_BYTES(edata);
 
 	/*
 	 * The caller has updated input_buf_index to indicate how much of the
 	 * input has been consumed and isn't needed anymore.  If input_buf is the
 	 * same physical area as raw_buf, update raw_buf_index accordingly.
 	 */
-	if (cstate->raw_buf == cstate->input_buf)
+	if (edata->raw_buf == edata->input_buf)
 	{
-		Assert(!cstate->need_transcoding);
-		Assert(cstate->input_buf_index >= cstate->raw_buf_index);
-		cstate->raw_buf_index = cstate->input_buf_index;
+		Assert(!edata->need_transcoding);
+		Assert(edata->input_buf_index >= edata->raw_buf_index);
+		edata->raw_buf_index = edata->input_buf_index;
 	}
 
 	for (;;)
@@ -669,7 +675,7 @@ CopyLoadInputBuf(CopyFromState cstate)
 		CopyConvertBuf(cstate);
 
 		/* If we now have some more input bytes ready, return them */
-		if (INPUT_BUF_BYTES(cstate) > nbytes)
+		if (INPUT_BUF_BYTES(edata) > nbytes)
 			return;
 
 		/*
@@ -677,15 +683,15 @@ CopyLoadInputBuf(CopyFromState cstate)
 		 * multi-byte character but there is no more raw input data, report
 		 * conversion error.
 		 */
-		if (cstate->input_reached_error)
+		if (edata->input_reached_error)
 			CopyConversionError(cstate);
 
 		/* no more input, and everything has been converted */
-		if (cstate->input_reached_eof)
+		if (edata->input_reached_eof)
 			break;
 
 		/* Try to load more raw data */
-		Assert(!cstate->raw_reached_eof);
+		Assert(!edata->raw_reached_eof);
 		CopyLoadRawBuf(cstate);
 	}
 }
@@ -700,13 +706,14 @@ CopyLoadInputBuf(CopyFromState cstate)
 static int
 CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	int			copied_bytes = 0;
 
-	if (RAW_BUF_BYTES(cstate) >= nbytes)
+	if (RAW_BUF_BYTES(edata) >= nbytes)
 	{
 		/* Enough bytes are present in the buffer. */
-		memcpy(dest, cstate->raw_buf + cstate->raw_buf_index, nbytes);
-		cstate->raw_buf_index += nbytes;
+		memcpy(dest, edata->raw_buf + edata->raw_buf_index, nbytes);
+		edata->raw_buf_index += nbytes;
 		copied_bytes = nbytes;
 	}
 	else
@@ -720,17 +727,17 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 			int			copy_bytes;
 
 			/* Load more data if buffer is empty. */
-			if (RAW_BUF_BYTES(cstate) == 0)
+			if (RAW_BUF_BYTES(edata) == 0)
 			{
 				CopyLoadRawBuf(cstate);
-				if (cstate->raw_reached_eof)
+				if (edata->raw_reached_eof)
 					break;		/* EOF */
 			}
 
 			/* Transfer some bytes. */
-			copy_bytes = Min(nbytes - copied_bytes, RAW_BUF_BYTES(cstate));
-			memcpy(dest, cstate->raw_buf + cstate->raw_buf_index, copy_bytes);
-			cstate->raw_buf_index += copy_bytes;
+			copy_bytes = Min(nbytes - copied_bytes, RAW_BUF_BYTES(edata));
+			memcpy(dest, edata->raw_buf + edata->raw_buf_index, copy_bytes);
+			edata->raw_buf_index += copy_bytes;
 			dest += copy_bytes;
 			copied_bytes += copy_bytes;
 		} while (copied_bytes < nbytes);
@@ -770,6 +777,7 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 static pg_attribute_always_inline bool
 NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	int			fldct;
 	bool		done = false;
 
@@ -777,7 +785,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 	Assert(!cstate->opts.binary);
 
 	/* on input check that the header line is correct if needed */
-	if (cstate->cur_lineno == 0 && cstate->opts.header_line != COPY_HEADER_FALSE)
+	if (edata->cur_lineno == 0 && cstate->opts.header_line != COPY_HEADER_FALSE)
 	{
 		ListCell   *cur;
 		TupleDesc	tupDesc;
@@ -791,7 +799,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 
 		for (int i = 0; i < lines_to_skip; i++)
 		{
-			cstate->cur_lineno++;
+			edata->cur_lineno++;
 			if ((done = CopyReadLine(cstate, is_csv)))
 				break;
 		}
@@ -818,9 +826,9 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 				char	   *colName;
 				Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-				Assert(fldnum < cstate->max_fields);
+				Assert(fldnum < edata->max_fields);
 
-				colName = cstate->raw_fields[fldnum++];
+				colName = edata->raw_fields[fldnum++];
 				if (colName == NULL)
 					ereport(ERROR,
 							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
@@ -841,7 +849,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 			return false;
 	}
 
-	cstate->cur_lineno++;
+	edata->cur_lineno++;
 
 	/* Actually read the line into memory here */
 	done = CopyReadLine(cstate, is_csv);
@@ -851,7 +859,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 	 * characters, we act as though it was newline followed by EOF, ie,
 	 * process the line and then exit loop on next iteration.
 	 */
-	if (done && cstate->line_buf.len == 0)
+	if (done && edata->line_buf.len == 0)
 		return false;
 
 	/* Parse the line into de-escaped field values */
@@ -860,7 +868,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 	else
 		fldct = CopyReadAttributesText(cstate);
 
-	*fields = cstate->raw_fields;
+	*fields = edata->raw_fields;
 	*nfields = fldct;
 	return true;
 }
@@ -882,10 +890,10 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
-				num_defaults = cstate->num_defaults;
+				num_defaults = cstate->edata->num_defaults;
 	int			i;
-	int		   *defmap = cstate->defmap;
-	ExprState **defexprs = cstate->defexprs;
+	int		   *defmap = cstate->edata->defmap;
+	ExprState **defexprs = cstate->edata->defexprs;
 
 	tupDesc = RelationGetDescr(cstate->rel);
 	num_phys_attrs = tupDesc->natts;
@@ -893,7 +901,7 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
+	MemSet(cstate->edata->defaults, false, num_phys_attrs * sizeof(bool));
 
 	/* Get one row from source */
 	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
@@ -946,11 +954,12 @@ static pg_attribute_always_inline bool
 CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 					   Datum *values, bool *nulls, bool is_csv)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
 	FmgrInfo   *in_functions = cstate->in_functions;
 	Oid		   *typioparams = cstate->typioparams;
-	ExprState **defexprs = cstate->defexprs;
+	ExprState **defexprs = edata->defexprs;
 	char	  **field_strings;
 	ListCell   *cur;
 	int			fldct;
@@ -986,8 +995,8 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 							NameStr(att->attname))));
 		string = field_strings[fieldno++];
 
-		if (cstate->convert_select_flags &&
-			!cstate->convert_select_flags[m])
+		if (edata->convert_select_flags &&
+			!edata->convert_select_flags[m])
 		{
 			/* ignore input field, leaving column as NULL */
 			continue;
@@ -1017,13 +1026,13 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 			}
 		}
 
-		cstate->cur_attname = NameStr(att->attname);
-		cstate->cur_attval = string;
+		edata->cur_attname = NameStr(att->attname);
+		edata->cur_attval = string;
 
 		if (string != NULL)
 			nulls[m] = false;
 
-		if (cstate->defaults[m])
+		if (edata->defaults[m])
 		{
 			/* We must have switched into the per-tuple memory context */
 			Assert(econtext != NULL);
@@ -1039,12 +1048,12 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										string,
 										typioparams[m],
 										att->atttypmod,
-										(Node *) cstate->escontext,
+										(Node *) edata->escontext,
 										&values[m]))
 		{
 			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
 
-			cstate->num_errors++;
+			edata->num_errors++;
 
 			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
 			{
@@ -1053,36 +1062,36 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 				 * notice message, we suppress error context information other
 				 * than the relation name.
 				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
+				Assert(!edata->relname_only);
+				edata->relname_only = true;
 
-				if (cstate->cur_attval)
+				if (edata->cur_attval)
 				{
 					char	   *attval;
 
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					attval = CopyLimitPrintoutLength(edata->cur_attval);
 					ereport(NOTICE,
 							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": \"%s\"",
-								   cstate->cur_lineno,
-								   cstate->cur_attname,
+								   edata->cur_lineno,
+								   edata->cur_attname,
 								   attval));
 					pfree(attval);
 				}
 				else
 					ereport(NOTICE,
 							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": null input",
-								   cstate->cur_lineno,
-								   cstate->cur_attname));
+								   edata->cur_lineno,
+								   edata->cur_attname));
 
 				/* reset relname_only */
-				cstate->relname_only = false;
+				edata->relname_only = false;
 			}
 
 			return true;
 		}
 
-		cstate->cur_attname = NULL;
-		cstate->cur_attval = NULL;
+		edata->cur_attname = NULL;
+		edata->cur_attval = NULL;
 	}
 
 	Assert(fieldno == attr_count);
@@ -1105,7 +1114,7 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 	tupDesc = RelationGetDescr(cstate->rel);
 	attr_count = list_length(cstate->attnumlist);
 
-	cstate->cur_lineno++;
+	cstate->edata->cur_lineno++;
 
 	if (!CopyGetInt16(cstate, &fld_count))
 	{
@@ -1144,13 +1153,13 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 		int			m = attnum - 1;
 		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-		cstate->cur_attname = NameStr(att->attname);
+		cstate->edata->cur_attname = NameStr(att->attname);
 		values[m] = CopyReadBinaryAttribute(cstate,
 											&in_functions[m],
 											typioparams[m],
 											att->atttypmod,
 											&nulls[m]);
-		cstate->cur_attname = NULL;
+		cstate->edata->cur_attname = NULL;
 	}
 
 	return true;
@@ -1166,10 +1175,11 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 static bool
 CopyReadLine(CopyFromState cstate, bool is_csv)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	bool		result;
 
-	resetStringInfo(&cstate->line_buf);
-	cstate->line_buf_valid = false;
+	resetStringInfo(&edata->line_buf);
+	edata->line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
 	result = CopyReadLineText(cstate, is_csv);
@@ -1181,19 +1191,19 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (edata->copy_src == COPY_FRONTEND)
 		{
 			int			inbytes;
 
 			do
 			{
-				inbytes = CopyGetData(cstate, cstate->input_buf,
+				inbytes = CopyGetData(cstate, edata->input_buf,
 									  1, INPUT_BUF_SIZE);
 			} while (inbytes > 0);
-			cstate->input_buf_index = 0;
-			cstate->input_buf_len = 0;
-			cstate->raw_buf_index = 0;
-			cstate->raw_buf_len = 0;
+			edata->input_buf_index = 0;
+			edata->input_buf_len = 0;
+			edata->raw_buf_index = 0;
+			edata->raw_buf_len = 0;
 		}
 	}
 	else
@@ -1202,26 +1212,26 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * If we didn't hit EOF, then we must have transferred the EOL marker
 		 * to line_buf along with the data.  Get rid of it.
 		 */
-		switch (cstate->eol_type)
+		switch (edata->eol_type)
 		{
 			case EOL_NL:
-				Assert(cstate->line_buf.len >= 1);
-				Assert(cstate->line_buf.data[cstate->line_buf.len - 1] == '\n');
-				cstate->line_buf.len--;
-				cstate->line_buf.data[cstate->line_buf.len] = '\0';
+				Assert(edata->line_buf.len >= 1);
+				Assert(edata->line_buf.data[edata->line_buf.len - 1] == '\n');
+				edata->line_buf.len--;
+				edata->line_buf.data[edata->line_buf.len] = '\0';
 				break;
 			case EOL_CR:
-				Assert(cstate->line_buf.len >= 1);
-				Assert(cstate->line_buf.data[cstate->line_buf.len - 1] == '\r');
-				cstate->line_buf.len--;
-				cstate->line_buf.data[cstate->line_buf.len] = '\0';
+				Assert(edata->line_buf.len >= 1);
+				Assert(edata->line_buf.data[edata->line_buf.len - 1] == '\r');
+				edata->line_buf.len--;
+				edata->line_buf.data[edata->line_buf.len] = '\0';
 				break;
 			case EOL_CRNL:
-				Assert(cstate->line_buf.len >= 2);
-				Assert(cstate->line_buf.data[cstate->line_buf.len - 2] == '\r');
-				Assert(cstate->line_buf.data[cstate->line_buf.len - 1] == '\n');
-				cstate->line_buf.len -= 2;
-				cstate->line_buf.data[cstate->line_buf.len] = '\0';
+				Assert(edata->line_buf.len >= 2);
+				Assert(edata->line_buf.data[edata->line_buf.len - 2] == '\r');
+				Assert(edata->line_buf.data[edata->line_buf.len - 1] == '\n');
+				edata->line_buf.len -= 2;
+				edata->line_buf.data[edata->line_buf.len] = '\0';
 				break;
 			case EOL_UNKNOWN:
 				/* shouldn't get here */
@@ -1231,7 +1241,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 	}
 
 	/* Now it's safe to use the buffer in error messages */
-	cstate->line_buf_valid = true;
+	edata->line_buf_valid = true;
 
 	return result;
 }
@@ -1242,6 +1252,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 static bool
 CopyReadLineText(CopyFromState cstate, bool is_csv)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
 	int			copy_buf_len;
@@ -1289,9 +1300,9 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 	 * For a little extra speed within the loop, we copy input_buf and
 	 * input_buf_len into local variables.
 	 */
-	copy_input_buf = cstate->input_buf;
-	input_buf_ptr = cstate->input_buf_index;
-	copy_buf_len = cstate->input_buf_len;
+	copy_input_buf = edata->input_buf;
+	input_buf_ptr = edata->input_buf_index;
+	copy_buf_len = edata->input_buf_len;
 
 	for (;;)
 	{
@@ -1312,15 +1323,15 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 			CopyLoadInputBuf(cstate);
 			/* update our local variables */
-			hit_eof = cstate->input_reached_eof;
-			input_buf_ptr = cstate->input_buf_index;
-			copy_buf_len = cstate->input_buf_len;
+			hit_eof = edata->input_reached_eof;
+			input_buf_ptr = edata->input_buf_index;
+			copy_buf_len = edata->input_buf_len;
 
 			/*
 			 * If we are completely out of data, break out of the loop,
 			 * reporting EOF.
 			 */
-			if (INPUT_BUF_BYTES(cstate) <= 0)
+			if (INPUT_BUF_BYTES(edata) <= 0)
 			{
 				result = true;
 				break;
@@ -1366,16 +1377,16 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 * best we can do.  (XXX it's arguable whether we should do this
 			 * at all --- is cur_lineno a physical or logical count?)
 			 */
-			if (in_quote && c == (cstate->eol_type == EOL_NL ? '\n' : '\r'))
-				cstate->cur_lineno++;
+			if (in_quote && c == (edata->eol_type == EOL_NL ? '\n' : '\r'))
+				edata->cur_lineno++;
 		}
 
 		/* Process \r */
 		if (c == '\r' && (!is_csv || !in_quote))
 		{
 			/* Check for \r\n on first line, _and_ handle \r\n. */
-			if (cstate->eol_type == EOL_UNKNOWN ||
-				cstate->eol_type == EOL_CRNL)
+			if (edata->eol_type == EOL_UNKNOWN ||
+				edata->eol_type == EOL_CRNL)
 			{
 				/*
 				 * If need more data, go back to loop top to load it.
@@ -1391,12 +1402,12 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				if (c == '\n')
 				{
 					input_buf_ptr++;	/* eat newline */
-					cstate->eol_type = EOL_CRNL;	/* in case not set yet */
+					edata->eol_type = EOL_CRNL; /* in case not set yet */
 				}
 				else
 				{
 					/* found \r, but no \n */
-					if (cstate->eol_type == EOL_CRNL)
+					if (edata->eol_type == EOL_CRNL)
 						ereport(ERROR,
 								(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 								 !is_csv ?
@@ -1410,10 +1421,10 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 					 * if we got here, it is the first line and we didn't find
 					 * \n, so don't consume the peeked character
 					 */
-					cstate->eol_type = EOL_CR;
+					edata->eol_type = EOL_CR;
 				}
 			}
-			else if (cstate->eol_type == EOL_NL)
+			else if (edata->eol_type == EOL_NL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 						 !is_csv ?
@@ -1429,7 +1440,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 		/* Process \n */
 		if (c == '\n' && (!is_csv || !in_quote))
 		{
-			if (cstate->eol_type == EOL_CR || cstate->eol_type == EOL_CRNL)
+			if (edata->eol_type == EOL_CR || edata->eol_type == EOL_CRNL)
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 						 !is_csv ?
@@ -1438,7 +1449,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 						 !is_csv ?
 						 errhint("Use \"\\n\" to represent newline.") :
 						 errhint("Use quoted CSV field to represent newline.")));
-			cstate->eol_type = EOL_NL;	/* in case not set yet */
+			edata->eol_type = EOL_NL;	/* in case not set yet */
 			/* If reach here, we have found the line terminator */
 			break;
 		}
@@ -1465,7 +1476,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			if (c2 == '.')
 			{
 				input_buf_ptr++;	/* consume the '.' */
-				if (cstate->eol_type == EOL_CRNL)
+				if (edata->eol_type == EOL_CRNL)
 				{
 					/* Get the next character */
 					IF_NEED_REFILL_AND_NOT_EOF_CONTINUE(0);
@@ -1492,9 +1503,9 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 							 errmsg("end-of-copy marker is not alone on its line")));
 
-				if ((cstate->eol_type == EOL_NL && c2 != '\n') ||
-					(cstate->eol_type == EOL_CRNL && c2 != '\n') ||
-					(cstate->eol_type == EOL_CR && c2 != '\r'))
+				if ((edata->eol_type == EOL_NL && c2 != '\n') ||
+					(edata->eol_type == EOL_CRNL && c2 != '\n') ||
+					(edata->eol_type == EOL_CR && c2 != '\r'))
 					ereport(ERROR,
 							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 							 errmsg("end-of-copy marker does not match previous newline style")));
@@ -1502,8 +1513,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				/*
 				 * If there is any data on this line before the \., complain.
 				 */
-				if (cstate->line_buf.len > 0 ||
-					prev_raw_ptr > cstate->input_buf_index)
+				if (edata->line_buf.len > 0 ||
+					prev_raw_ptr > edata->input_buf_index)
 					ereport(ERROR,
 							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 							 errmsg("end-of-copy marker is not alone on its line")));
@@ -1511,7 +1522,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 				/*
 				 * Discard the \. and newline, then report EOF.
 				 */
-				cstate->input_buf_index = input_buf_ptr;
+				edata->input_buf_index = input_buf_ptr;
 				result = true;	/* report EOF */
 				break;
 			}
@@ -1572,6 +1583,7 @@ GetDecimalFromHex(char hex)
 static int
 CopyReadAttributesText(CopyFromState cstate)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	char		delimc = cstate->opts.delim[0];
 	int			fieldno;
 	char	   *output_ptr;
@@ -1582,31 +1594,31 @@ CopyReadAttributesText(CopyFromState cstate)
 	 * We need a special case for zero-column tables: check that the input
 	 * line is empty, and return.
 	 */
-	if (cstate->max_fields <= 0)
+	if (edata->max_fields <= 0)
 	{
-		if (cstate->line_buf.len != 0)
+		if (edata->line_buf.len != 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("extra data after last expected column")));
 		return 0;
 	}
 
-	resetStringInfo(&cstate->attribute_buf);
+	resetStringInfo(&edata->attribute_buf);
 
 	/*
 	 * The de-escaped attributes will certainly not be longer than the input
 	 * data line, so we can just force attribute_buf to be large enough and
 	 * then transfer data without any checks for enough space.  We need to do
 	 * it this way because enlarging attribute_buf mid-stream would invalidate
-	 * pointers already stored into cstate->raw_fields[].
+	 * pointers already stored into edata->raw_fields[].
 	 */
-	if (cstate->attribute_buf.maxlen <= cstate->line_buf.len)
-		enlargeStringInfo(&cstate->attribute_buf, cstate->line_buf.len);
-	output_ptr = cstate->attribute_buf.data;
+	if (edata->attribute_buf.maxlen <= edata->line_buf.len)
+		enlargeStringInfo(&edata->attribute_buf, edata->line_buf.len);
+	output_ptr = edata->attribute_buf.data;
 
 	/* set pointer variables for loop */
-	cur_ptr = cstate->line_buf.data;
-	line_end_ptr = cstate->line_buf.data + cstate->line_buf.len;
+	cur_ptr = edata->line_buf.data;
+	line_end_ptr = edata->line_buf.data + edata->line_buf.len;
 
 	/* Outer loop iterates over fields */
 	fieldno = 0;
@@ -1619,16 +1631,16 @@ CopyReadAttributesText(CopyFromState cstate)
 		bool		saw_non_ascii = false;
 
 		/* Make sure there is enough space for the next value */
-		if (fieldno >= cstate->max_fields)
+		if (fieldno >= edata->max_fields)
 		{
-			cstate->max_fields *= 2;
-			cstate->raw_fields =
-				repalloc(cstate->raw_fields, cstate->max_fields * sizeof(char *));
+			edata->max_fields *= 2;
+			edata->raw_fields =
+				repalloc(edata->raw_fields, edata->max_fields * sizeof(char *));
 		}
 
 		/* Remember start of field on both input and output sides */
 		start_ptr = cur_ptr;
-		cstate->raw_fields[fieldno] = output_ptr;
+		edata->raw_fields[fieldno] = output_ptr;
 
 		/*
 		 * Scan data for field.
@@ -1757,7 +1769,7 @@ CopyReadAttributesText(CopyFromState cstate)
 		input_len = end_ptr - start_ptr;
 		if (input_len == cstate->opts.null_print_len &&
 			strncmp(start_ptr, cstate->opts.null_print, input_len) == 0)
-			cstate->raw_fields[fieldno] = NULL;
+			edata->raw_fields[fieldno] = NULL;
 		/* Check whether raw input matched default marker */
 		else if (fieldno < list_length(cstate->attnumlist) &&
 				 cstate->opts.default_print &&
@@ -1767,10 +1779,10 @@ CopyReadAttributesText(CopyFromState cstate)
 			/* fieldno is 0-indexed and attnum is 1-indexed */
 			int			m = list_nth_int(cstate->attnumlist, fieldno) - 1;
 
-			if (cstate->defexprs[m] != NULL)
+			if (edata->defexprs[m] != NULL)
 			{
 				/* defaults contain entries for all physical attributes */
-				cstate->defaults[m] = true;
+				edata->defaults[m] = true;
 			}
 			else
 			{
@@ -1794,7 +1806,7 @@ CopyReadAttributesText(CopyFromState cstate)
 			 */
 			if (saw_non_ascii)
 			{
-				char	   *fld = cstate->raw_fields[fieldno];
+				char	   *fld = edata->raw_fields[fieldno];
 
 				pg_verifymbstr(fld, output_ptr - fld, false);
 			}
@@ -1812,7 +1824,7 @@ CopyReadAttributesText(CopyFromState cstate)
 	/* Clean up state of attribute_buf */
 	output_ptr--;
 	Assert(*output_ptr == '\0');
-	cstate->attribute_buf.len = (output_ptr - cstate->attribute_buf.data);
+	edata->attribute_buf.len = (output_ptr - edata->attribute_buf.data);
 
 	return fieldno;
 }
@@ -1826,6 +1838,7 @@ CopyReadAttributesText(CopyFromState cstate)
 static int
 CopyReadAttributesCSV(CopyFromState cstate)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	char		delimc = cstate->opts.delim[0];
 	char		quotec = cstate->opts.quote[0];
 	char		escapec = cstate->opts.escape[0];
@@ -1838,31 +1851,31 @@ CopyReadAttributesCSV(CopyFromState cstate)
 	 * We need a special case for zero-column tables: check that the input
 	 * line is empty, and return.
 	 */
-	if (cstate->max_fields <= 0)
+	if (edata->max_fields <= 0)
 	{
-		if (cstate->line_buf.len != 0)
+		if (edata->line_buf.len != 0)
 			ereport(ERROR,
 					(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 					 errmsg("extra data after last expected column")));
 		return 0;
 	}
 
-	resetStringInfo(&cstate->attribute_buf);
+	resetStringInfo(&edata->attribute_buf);
 
 	/*
 	 * The de-escaped attributes will certainly not be longer than the input
 	 * data line, so we can just force attribute_buf to be large enough and
 	 * then transfer data without any checks for enough space.  We need to do
 	 * it this way because enlarging attribute_buf mid-stream would invalidate
-	 * pointers already stored into cstate->raw_fields[].
+	 * pointers already stored into edata->raw_fields[].
 	 */
-	if (cstate->attribute_buf.maxlen <= cstate->line_buf.len)
-		enlargeStringInfo(&cstate->attribute_buf, cstate->line_buf.len);
-	output_ptr = cstate->attribute_buf.data;
+	if (edata->attribute_buf.maxlen <= edata->line_buf.len)
+		enlargeStringInfo(&edata->attribute_buf, edata->line_buf.len);
+	output_ptr = edata->attribute_buf.data;
 
 	/* set pointer variables for loop */
-	cur_ptr = cstate->line_buf.data;
-	line_end_ptr = cstate->line_buf.data + cstate->line_buf.len;
+	cur_ptr = edata->line_buf.data;
+	line_end_ptr = edata->line_buf.data + edata->line_buf.len;
 
 	/* Outer loop iterates over fields */
 	fieldno = 0;
@@ -1875,16 +1888,16 @@ CopyReadAttributesCSV(CopyFromState cstate)
 		int			input_len;
 
 		/* Make sure there is enough space for the next value */
-		if (fieldno >= cstate->max_fields)
+		if (fieldno >= edata->max_fields)
 		{
-			cstate->max_fields *= 2;
-			cstate->raw_fields =
-				repalloc(cstate->raw_fields, cstate->max_fields * sizeof(char *));
+			edata->max_fields *= 2;
+			edata->raw_fields =
+				repalloc(edata->raw_fields, edata->max_fields * sizeof(char *));
 		}
 
 		/* Remember start of field on both input and output sides */
 		start_ptr = cur_ptr;
-		cstate->raw_fields[fieldno] = output_ptr;
+		edata->raw_fields[fieldno] = output_ptr;
 
 		/*
 		 * Scan data for field,
@@ -1972,7 +1985,7 @@ endfield:
 		input_len = end_ptr - start_ptr;
 		if (!saw_quote && input_len == cstate->opts.null_print_len &&
 			strncmp(start_ptr, cstate->opts.null_print, input_len) == 0)
-			cstate->raw_fields[fieldno] = NULL;
+			edata->raw_fields[fieldno] = NULL;
 		/* Check whether raw input matched default marker */
 		else if (fieldno < list_length(cstate->attnumlist) &&
 				 cstate->opts.default_print &&
@@ -1982,10 +1995,10 @@ endfield:
 			/* fieldno is 0-index and attnum is 1-index */
 			int			m = list_nth_int(cstate->attnumlist, fieldno) - 1;
 
-			if (cstate->defexprs[m] != NULL)
+			if (edata->defexprs[m] != NULL)
 			{
 				/* defaults contain entries for all physical attributes */
-				cstate->defaults[m] = true;
+				edata->defaults[m] = true;
 			}
 			else
 			{
@@ -2009,7 +2022,7 @@ endfield:
 	/* Clean up state of attribute_buf */
 	output_ptr--;
 	Assert(*output_ptr == '\0');
-	cstate->attribute_buf.len = (output_ptr - cstate->attribute_buf.data);
+	edata->attribute_buf.len = (output_ptr - edata->attribute_buf.data);
 
 	return fieldno;
 }
@@ -2023,6 +2036,7 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 						Oid typioparam, int32 typmod,
 						bool *isnull)
 {
+	CopyFromExecutionData *edata = cstate->edata;
 	int32		fld_size;
 	Datum		result;
 
@@ -2041,24 +2055,24 @@ CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
 				 errmsg("invalid field size")));
 
 	/* reset attribute_buf to empty, and load raw data in it */
-	resetStringInfo(&cstate->attribute_buf);
+	resetStringInfo(&edata->attribute_buf);
 
-	enlargeStringInfo(&cstate->attribute_buf, fld_size);
-	if (CopyReadBinaryData(cstate, cstate->attribute_buf.data,
+	enlargeStringInfo(&edata->attribute_buf, fld_size);
+	if (CopyReadBinaryData(cstate, edata->attribute_buf.data,
 						   fld_size) != fld_size)
 		ereport(ERROR,
 				(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 				 errmsg("unexpected EOF in COPY data")));
 
-	cstate->attribute_buf.len = fld_size;
-	cstate->attribute_buf.data[fld_size] = '\0';
+	edata->attribute_buf.len = fld_size;
+	edata->attribute_buf.data[fld_size] = '\0';
 
 	/* Call the column type's binary input converter */
-	result = ReceiveFunctionCall(flinfo, &cstate->attribute_buf,
+	result = ReceiveFunctionCall(flinfo, &edata->attribute_buf,
 								 typioparam, typmod);
 
 	/* Trouble if it didn't eat the whole buffer */
-	if (cstate->attribute_buf.cursor != cstate->attribute_buf.len)
+	if (edata->attribute_buf.cursor != edata->attribute_buf.len)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
 				 errmsg("incorrect binary data format")));
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 67b94b91cae..e90fab6d958 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -62,40 +62,24 @@ typedef enum CopyDest
  * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
  * when we have to do it the hard way.
  */
-typedef struct CopyToStateData
+typedef struct CopyToExecutionData
 {
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
 	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
 
-	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
 
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
 	/*
 	 * Working state
 	 */
 	MemoryContext copycontext;	/* per-copy execution context */
 
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
+}			CopyToExecutionData;
 
 /* DestReceiver for COPY (query) TO */
 typedef struct
@@ -193,7 +177,7 @@ CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
 	 */
-	if (cstate->need_transcoding)
+	if (cstate->edata->need_transcoding)
 		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
 														  cstate->opts.null_print_len,
 														  cstate->file_encoding);
@@ -401,14 +385,14 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->edata->copy_dest = COPY_FRONTEND;
 }
 
 static void
 SendCopyEnd(CopyToState cstate)
 {
 	/* Shouldn't have any unsent data */
-	Assert(cstate->fe_msgbuf->len == 0);
+	Assert(cstate->edata->fe_msgbuf->len == 0);
 	/* Send Copy Done message */
 	pq_putemptymessage(PqMsg_CopyDone);
 }
@@ -426,32 +410,32 @@ SendCopyEnd(CopyToState cstate)
 static void
 CopySendData(CopyToState cstate, const void *databuf, int datasize)
 {
-	appendBinaryStringInfo(cstate->fe_msgbuf, databuf, datasize);
+	appendBinaryStringInfo(cstate->edata->fe_msgbuf, databuf, datasize);
 }
 
 static void
 CopySendString(CopyToState cstate, const char *str)
 {
-	appendBinaryStringInfo(cstate->fe_msgbuf, str, strlen(str));
+	appendBinaryStringInfo(cstate->edata->fe_msgbuf, str, strlen(str));
 }
 
 static void
 CopySendChar(CopyToState cstate, char c)
 {
-	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
+	appendStringInfoCharMacro(cstate->edata->fe_msgbuf, c);
 }
 
 static void
 CopySendEndOfRow(CopyToState cstate)
 {
-	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
+	StringInfo	fe_msgbuf = cstate->edata->fe_msgbuf;
 
-	switch (cstate->copy_dest)
+	switch (cstate->edata->copy_dest)
 	{
 		case COPY_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
-					   cstate->copy_file) != 1 ||
-				ferror(cstate->copy_file))
+					   cstate->edata->copy_file) != 1 ||
+				ferror(cstate->edata->copy_file))
 			{
 				if (cstate->is_program)
 				{
@@ -492,8 +476,8 @@ CopySendEndOfRow(CopyToState cstate)
 	}
 
 	/* Update the progress */
-	cstate->bytes_processed += fe_msgbuf->len;
-	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->bytes_processed);
+	cstate->edata->bytes_processed += fe_msgbuf->len;
+	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->edata->bytes_processed);
 
 	resetStringInfo(fe_msgbuf);
 }
@@ -505,7 +489,7 @@ CopySendEndOfRow(CopyToState cstate)
 static inline void
 CopySendTextLikeEndOfRow(CopyToState cstate)
 {
-	switch (cstate->copy_dest)
+	switch (cstate->edata->copy_dest)
 	{
 		case COPY_FILE:
 			/* Default line termination depends on platform */
@@ -565,7 +549,7 @@ ClosePipeToProgram(CopyToState cstate)
 
 	Assert(cstate->is_program);
 
-	pclose_rc = ClosePipeStream(cstate->copy_file);
+	pclose_rc = ClosePipeStream(cstate->edata->copy_file);
 	if (pclose_rc == -1)
 		ereport(ERROR,
 				(errcode_for_file_access(),
@@ -592,7 +576,7 @@ EndCopy(CopyToState cstate)
 	}
 	else
 	{
-		if (cstate->filename != NULL && FreeFile(cstate->copy_file))
+		if (cstate->filename != NULL && FreeFile(cstate->edata->copy_file))
 			ereport(ERROR,
 					(errcode_for_file_access(),
 					 errmsg("could not close file \"%s\": %m",
@@ -601,7 +585,7 @@ EndCopy(CopyToState cstate)
 
 	pgstat_progress_end_command();
 
-	MemoryContextDelete(cstate->copycontext);
+	MemoryContextDelete(cstate->edata->copycontext);
 	pfree(cstate);
 }
 
@@ -688,16 +672,17 @@ BeginCopyTo(ParseState *pstate,
 
 	/* Allocate workspace and zero all fields */
 	cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData));
+	cstate->edata = (CopyToExecutionData *) palloc0(sizeof(CopyToExecutionData));
 
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
 	 * avoids memory leaks during repeated use of COPY in a query.
 	 */
-	cstate->copycontext = AllocSetContextCreate(CurrentMemoryContext,
-												"COPY",
-												ALLOCSET_DEFAULT_SIZES);
+	cstate->edata->copycontext = AllocSetContextCreate(CurrentMemoryContext,
+													   "COPY",
+													   ALLOCSET_DEFAULT_SIZES);
 
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+	oldcontext = MemoryContextSwitchTo(cstate->edata->copycontext);
 
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
@@ -895,19 +880,19 @@ BeginCopyTo(ParseState *pstate,
 	 */
 	if (cstate->file_encoding == GetDatabaseEncoding() ||
 		cstate->file_encoding == PG_SQL_ASCII)
-		cstate->need_transcoding = false;
+		cstate->edata->need_transcoding = false;
 	else
-		cstate->need_transcoding = true;
+		cstate->edata->need_transcoding = true;
 
 	/* See Multibyte encoding comment above */
-	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
+	cstate->edata->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->edata->copy_dest = COPY_FILE;	/* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->edata->copy_dest = COPY_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
@@ -916,7 +901,7 @@ BeginCopyTo(ParseState *pstate,
 
 		Assert(!is_program);	/* the grammar does not allow this */
 		if (whereToSendOutput != DestRemote)
-			cstate->copy_file = stdout;
+			cstate->edata->copy_file = stdout;
 	}
 	else
 	{
@@ -926,8 +911,8 @@ BeginCopyTo(ParseState *pstate,
 		if (is_program)
 		{
 			progress_vals[1] = PROGRESS_COPY_TYPE_PROGRAM;
-			cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W);
-			if (cstate->copy_file == NULL)
+			cstate->edata->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W);
+			if (cstate->edata->copy_file == NULL)
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not execute command \"%s\": %m",
@@ -952,14 +937,14 @@ BeginCopyTo(ParseState *pstate,
 			oumask = umask(S_IWGRP | S_IWOTH);
 			PG_TRY();
 			{
-				cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_W);
+				cstate->edata->copy_file = AllocateFile(cstate->filename, PG_BINARY_W);
 			}
 			PG_FINALLY();
 			{
 				umask(oumask);
 			}
 			PG_END_TRY();
-			if (cstate->copy_file == NULL)
+			if (cstate->edata->copy_file == NULL)
 			{
 				/* copy errno because ereport subfunctions might change it */
 				int			save_errno = errno;
@@ -973,7 +958,7 @@ BeginCopyTo(ParseState *pstate,
 								 "You may want a client-side facility such as psql's \\copy.") : 0));
 			}
 
-			if (fstat(fileno(cstate->copy_file), &st))
+			if (fstat(fileno(cstate->edata->copy_file), &st))
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not stat file \"%s\": %m",
@@ -991,7 +976,7 @@ BeginCopyTo(ParseState *pstate,
 								  cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid);
 	pgstat_progress_update_multi_param(2, progress_cols, progress_vals);
 
-	cstate->bytes_processed = 0;
+	cstate->edata->bytes_processed = 0;
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1042,8 +1027,8 @@ DoCopyTo(CopyToState cstate)
 	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
-	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
-	cstate->fe_msgbuf = makeStringInfo();
+	/* We use fe_msgbuf as a per-row buffer regardless of edata->copy_dest */
+	cstate->edata->fe_msgbuf = makeStringInfo();
 
 	/* Get info about the columns we need to process. */
 	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
@@ -1062,9 +1047,9 @@ DoCopyTo(CopyToState cstate)
 	 * datatype output routines, and should be faster than retail pfree's
 	 * anyway.  (We don't need a whole econtext as CopyFrom does.)
 	 */
-	cstate->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
-											   "COPY TO",
-											   ALLOCSET_DEFAULT_SIZES);
+	cstate->edata->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
+													  "COPY TO",
+													  ALLOCSET_DEFAULT_SIZES);
 
 	cstate->routine->CopyToStart(cstate, tupDesc);
 
@@ -1107,7 +1092,7 @@ DoCopyTo(CopyToState cstate)
 
 	cstate->routine->CopyToEnd(cstate);
 
-	MemoryContextDelete(cstate->rowcontext);
+	MemoryContextDelete(cstate->edata->rowcontext);
 
 	if (fe_copy)
 		SendCopyEnd(cstate);
@@ -1123,8 +1108,8 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
 	MemoryContext oldcontext;
 
-	MemoryContextReset(cstate->rowcontext);
-	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
+	MemoryContextReset(cstate->edata->rowcontext);
+	oldcontext = MemoryContextSwitchTo(cstate->edata->rowcontext);
 
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
@@ -1151,7 +1136,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	char		c;
 	char		delimc = cstate->opts.delim[0];
 
-	if (cstate->need_transcoding)
+	if (cstate->edata->need_transcoding)
 		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
 	else
 		ptr = string;
@@ -1170,7 +1155,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	 * it's worth making two copies of it to get the IS_HIGHBIT_SET() test out
 	 * of the normal safe-encoding path.
 	 */
-	if (cstate->encoding_embeds_ascii)
+	if (cstate->edata->encoding_embeds_ascii)
 	{
 		start = ptr;
 		while ((c = *ptr) != '\0')
@@ -1312,7 +1297,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 	if (!use_quote && strcmp(string, cstate->opts.null_print) == 0)
 		use_quote = true;
 
-	if (cstate->need_transcoding)
+	if (cstate->edata->need_transcoding)
 		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
 	else
 		ptr = string;
@@ -1342,7 +1327,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					use_quote = true;
 					break;
 				}
-				if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
+				if (IS_HIGHBIT_SET(c) && cstate->edata->encoding_embeds_ascii)
 					tptr += pg_encoding_mblen(cstate->file_encoding, tptr);
 				else
 					tptr++;
@@ -1366,7 +1351,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 				CopySendChar(cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
-			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
+			if (IS_HIGHBIT_SET(c) && cstate->edata->encoding_embeds_ascii)
 				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
 			else
 				ptr++;
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 541176e1980..1fd44a132be 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -14,6 +14,7 @@
 #ifndef COPY_H
 #define COPY_H
 
+#include "executor/execdesc.h"
 #include "nodes/execnodes.h"
 #include "nodes/parsenodes.h"
 #include "parser/parse_node.h"
@@ -87,13 +88,61 @@ typedef struct CopyFormatOptions
 	List	   *convert_select; /* list of column names (can be NIL) */
 } CopyFormatOptions;
 
+typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
+typedef void (*copy_data_dest_cb) (void *data, int len);
+
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	struct CopyToExecutionData *edata;
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
+
+	CopyFormatOptions opts;
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+} CopyToStateData;
+
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
+	struct CopyFromExecutionData *edata;
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+	bool		need_transcoding;	/* file encoding diff from server? */
+	Oid			conversion_proc;	/* encoding conversion function */
+
+	CopyFormatOptions opts;
+
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+} CopyFromStateData;
+
 /* These are private in commands/copy[from|to].c */
 typedef struct CopyFromStateData *CopyFromState;
 typedef struct CopyToStateData *CopyToState;
 
-typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
-typedef void (*copy_data_dest_cb) (void *data, int len);
-
 extern void DoCopy(ParseState *pstate, const CopyStmt *stmt,
 				   int stmt_location, int stmt_len,
 				   uint64 *processed);
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..b91b907e8eb 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -56,29 +56,17 @@ typedef enum CopyInsertMethod
  * This struct contains all the state variables used throughout a COPY FROM
  * operation.
  */
-typedef struct CopyFromStateData
+typedef struct CopyFromExecutionData
 {
-	/* format routine */
-	const struct CopyFromRoutine *routine;
-
 	/* low-level state data */
 	CopySource	copy_src;		/* type of copy source */
 	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
 	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
 
 	EolType		eol_type;		/* EOL type of input */
-	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	Oid			conversion_proc;	/* encoding conversion function */
 
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
 	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
 	Node	   *whereClause;	/* WHERE condition (or NULL) */
 
@@ -96,8 +84,6 @@ typedef struct CopyFromStateData
 
 	AttrNumber	num_defaults;	/* count of att that are missing and have
 								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
 	ErrorSaveContext *escontext;	/* soft error trapped during in_functions
 									 * execution */
 	uint64		num_errors;		/* total number of rows which contained soft
@@ -164,7 +150,7 @@ typedef struct CopyFromStateData
 	bool		input_reached_eof;	/* true if we reached EOF */
 	bool		input_reached_error;	/* true if a conversion error happened */
 	/* Shorthand for number of unconsumed bytes available in input_buf */
-#define INPUT_BUF_BYTES(cstate) ((cstate)->input_buf_len - (cstate)->input_buf_index)
+#define INPUT_BUF_BYTES(edata) ((edata)->input_buf_len - (edata)->input_buf_index)
 
 	/*
 	 * raw_buf holds raw input data read from the data source (file or client
@@ -178,10 +164,10 @@ typedef struct CopyFromStateData
 	bool		raw_reached_eof;	/* true if we reached EOF */
 
 	/* Shorthand for number of unconsumed bytes available in raw_buf */
-#define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
+#define RAW_BUF_BYTES(edata) ((edata)->raw_buf_len - (edata)->raw_buf_index)
 
 	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
+}			CopyFromExecutionData;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
-- 
2.43.5

0002-Custom-COPY-format.patchapplication/octet-stream; name=0002-Custom-COPY-format.patchDownload
From 322512cbcf4b2e6c07e6bd8f9d4b2afc2c400193 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Sun, 13 Jul 2025 10:09:57 -0700
Subject: [PATCH 2/2] Custom COPY format.

Author:
Reviewed-by:
Discussion: https://postgr.es/m/
Backpatch-through:
---
 src/backend/commands/Makefile        |   1 +
 src/backend/commands/copy.c          |  73 +++++++++------
 src/backend/commands/copyformat.c    | 134 +++++++++++++++++++++++++++
 src/backend/commands/copyfrom.c      |  26 ++++--
 src/backend/commands/copyfromparse.c |   7 +-
 src/backend/commands/copyto.c        |  28 ++++--
 src/include/commands/copy.h          |  18 +++-
 src/include/commands/copyapi.h       |   5 +
 8 files changed, 244 insertions(+), 48 deletions(-)
 create mode 100644 src/backend/commands/copyformat.c

diff --git a/src/backend/commands/Makefile b/src/backend/commands/Makefile
index cb2fbdc7c60..30693ffba27 100644
--- a/src/backend/commands/Makefile
+++ b/src/backend/commands/Makefile
@@ -24,6 +24,7 @@ OBJS = \
 	constraint.o \
 	conversioncmds.o \
 	copy.o \
+	copyformat.o \
 	copyfrom.o \
 	copyfromparse.o \
 	copyto.o \
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index fae9c41db65..4e482955544 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -514,6 +514,8 @@ ProcessCopyOptions(ParseState *pstate,
 	bool		on_error_specified = false;
 	bool		log_verbosity_specified = false;
 	bool		reject_limit_specified = false;
+	bool		csv_mode = false;
+	bool		binary = false;
 	ListCell   *option;
 
 	/* Support external use for option sanity checking */
@@ -521,6 +523,8 @@ ProcessCopyOptions(ParseState *pstate,
 		opts_out = (CopyFormatOptions *) palloc0(sizeof(CopyFormatOptions));
 
 	opts_out->file_encoding = -1;
+	opts_out->format = COPY_FORMAT_TEXT;
+	opts_out->format_ext_id = -1;
 
 	/* Extract options from the statement node tree */
 	foreach(option, options)
@@ -535,16 +539,29 @@ ProcessCopyOptions(ParseState *pstate,
 				errorConflictingDefElem(defel, pstate);
 			format_specified = true;
 			if (strcmp(fmt, "text") == 0)
-				 /* default format */ ;
+				opts_out->format = COPY_FORMAT_TEXT;
 			else if (strcmp(fmt, "csv") == 0)
-				opts_out->csv_mode = true;
+			{
+				opts_out->format = COPY_FORMAT_CSV;
+				csv_mode = true;
+			}
 			else if (strcmp(fmt, "binary") == 0)
-				opts_out->binary = true;
+			{
+				opts_out->format = COPY_FORMAT_BINARY;
+				binary = true;
+			}
 			else
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-						 errmsg("COPY format \"%s\" not recognized", fmt),
-						 parser_errposition(pstate, defel->location)));
+			{
+				opts_out->format_ext_id = GetCopyFormatExtensionId(defel->defname);
+
+				if (opts_out->format_ext_id == -1)
+					ereport(ERROR,
+							(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+							 errmsg("COPY format \"%s\" not recognized", fmt),
+							 parser_errposition(pstate, defel->location)));
+
+				opts_out->format = COPY_FORMAT_EXTENSION;
+			}
 		}
 		else if (strcmp(defel->defname, "freeze") == 0)
 		{
@@ -699,31 +716,31 @@ ProcessCopyOptions(ParseState *pstate,
 	 * Check for incompatible options (must do these three before inserting
 	 * defaults)
 	 */
-	if (opts_out->binary && opts_out->delim)
+	if (binary && opts_out->delim)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("cannot specify %s in BINARY mode", "DELIMITER")));
 
-	if (opts_out->binary && opts_out->null_print)
+	if (binary && opts_out->null_print)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("cannot specify %s in BINARY mode", "NULL")));
 
-	if (opts_out->binary && opts_out->default_print)
+	if (binary && opts_out->default_print)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("cannot specify %s in BINARY mode", "DEFAULT")));
 
 	/* Set defaults for omitted options */
 	if (!opts_out->delim)
-		opts_out->delim = opts_out->csv_mode ? "," : "\t";
+		opts_out->delim = csv_mode ? "," : "\t";
 
 	if (!opts_out->null_print)
-		opts_out->null_print = opts_out->csv_mode ? "" : "\\N";
+		opts_out->null_print = csv_mode ? "" : "\\N";
 	opts_out->null_print_len = strlen(opts_out->null_print);
 
-	if (opts_out->csv_mode)
+	if (csv_mode)
 	{
 		if (!opts_out->quote)
 			opts_out->quote = "\"";
@@ -771,7 +788,7 @@ ProcessCopyOptions(ParseState *pstate,
 	 * future-proofing.  Likewise we disallow all digits though only octal
 	 * digits are actually dangerous.
 	 */
-	if (!opts_out->csv_mode &&
+	if (!csv_mode &&
 		strchr("\\.abcdefghijklmnopqrstuvwxyz0123456789",
 			   opts_out->delim[0]) != NULL)
 		ereport(ERROR,
@@ -779,43 +796,43 @@ ProcessCopyOptions(ParseState *pstate,
 				 errmsg("COPY delimiter cannot be \"%s\"", opts_out->delim)));
 
 	/* Check header */
-	if (opts_out->binary && opts_out->header_line != COPY_HEADER_FALSE)
+	if (binary && opts_out->header_line != COPY_HEADER_FALSE)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("cannot specify %s in BINARY mode", "HEADER")));
 
 	/* Check quote */
-	if (!opts_out->csv_mode && opts_out->quote != NULL)
+	if (!csv_mode && opts_out->quote != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("COPY %s requires CSV mode", "QUOTE")));
 
-	if (opts_out->csv_mode && strlen(opts_out->quote) != 1)
+	if (csv_mode && strlen(opts_out->quote) != 1)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 				 errmsg("COPY quote must be a single one-byte character")));
 
-	if (opts_out->csv_mode && opts_out->delim[0] == opts_out->quote[0])
+	if (csv_mode && opts_out->delim[0] == opts_out->quote[0])
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
 				 errmsg("COPY delimiter and quote must be different")));
 
 	/* Check escape */
-	if (!opts_out->csv_mode && opts_out->escape != NULL)
+	if (!csv_mode && opts_out->escape != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
 				 errmsg("COPY %s requires CSV mode", "ESCAPE")));
 
-	if (opts_out->csv_mode && strlen(opts_out->escape) != 1)
+	if (csv_mode && strlen(opts_out->escape) != 1)
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 				 errmsg("COPY escape must be a single one-byte character")));
 
 	/* Check force_quote */
-	if (!opts_out->csv_mode && (opts_out->force_quote || opts_out->force_quote_all))
+	if (!csv_mode && (opts_out->force_quote || opts_out->force_quote_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -829,8 +846,8 @@ ProcessCopyOptions(ParseState *pstate,
 						"COPY FROM")));
 
 	/* Check force_notnull */
-	if (!opts_out->csv_mode && (opts_out->force_notnull != NIL ||
-								opts_out->force_notnull_all))
+	if (!csv_mode && (opts_out->force_notnull != NIL ||
+					  opts_out->force_notnull_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -845,8 +862,8 @@ ProcessCopyOptions(ParseState *pstate,
 						"COPY TO")));
 
 	/* Check force_null */
-	if (!opts_out->csv_mode && (opts_out->force_null != NIL ||
-								opts_out->force_null_all))
+	if (!csv_mode && (opts_out->force_null != NIL ||
+					  opts_out->force_null_all))
 		ereport(ERROR,
 				(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 		/*- translator: %s is the name of a COPY option, e.g. ON_ERROR */
@@ -870,7 +887,7 @@ ProcessCopyOptions(ParseState *pstate,
 						"NULL")));
 
 	/* Don't allow the CSV quote char to appear in the null string. */
-	if (opts_out->csv_mode &&
+	if (csv_mode &&
 		strchr(opts_out->null_print, opts_out->quote[0]) != NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -906,7 +923,7 @@ ProcessCopyOptions(ParseState *pstate,
 							"DEFAULT")));
 
 		/* Don't allow the CSV quote char to appear in the default string. */
-		if (opts_out->csv_mode &&
+		if (csv_mode &&
 			strchr(opts_out->default_print, opts_out->quote[0]) != NULL)
 			ereport(ERROR,
 					(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
@@ -923,7 +940,7 @@ ProcessCopyOptions(ParseState *pstate,
 					 errmsg("NULL specification and DEFAULT specification cannot be the same")));
 	}
 	/* Check on_error */
-	if (opts_out->binary && opts_out->on_error != COPY_ON_ERROR_STOP)
+	if (binary && opts_out->on_error != COPY_ON_ERROR_STOP)
 		ereport(ERROR,
 				(errcode(ERRCODE_SYNTAX_ERROR),
 				 errmsg("only ON_ERROR STOP is allowed in BINARY mode")));
diff --git a/src/backend/commands/copyformat.c b/src/backend/commands/copyformat.c
new file mode 100644
index 00000000000..6d1c40833e9
--- /dev/null
+++ b/src/backend/commands/copyformat.c
@@ -0,0 +1,134 @@
+/*-------------------------------------------------------------------------
+ *
+ * copyformat.c
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ *	  src/backend/commands/copyformat.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include "commands/copyapi.h"
+#include "utils/memutils.h"
+
+typedef struct CopyFormatExtensionInfo
+{
+	const char *format_name;
+	const CopyToRoutine *to_routine;
+	const CopyFromRoutine *from_routine;
+}			CopyFormatExtensionInfo;
+
+static CopyFormatExtensionInfo * CopyFormatExtensionArray = NULL;
+static int	CopyFormatExtensionAssigned = 0;
+static int	CopyFormatExtensionAllocated = 0;
+
+/*
+ * Register new COPY routines for the given name.
+ *
+ * When name is used as a COPY format name, routine will be used to process
+ * the COPY request. See CopyFromRoutine and CopyToRoutine how to implement a
+ * COPY routine.
+ *
+ * If name is already registered, an error is raised.
+ *
+ * name is assumed to be a constant string or allocated in storage that will
+ * never be freed.
+ *
+ * fmt, from_routine, and to_routine are assumed to be allocated in storage
+ * that will never be freed.
+ */
+void
+RegisterCustomCopyFormat(const char *fmt, const CopyToRoutine *to_routine,
+						 const CopyFromRoutine *from_routine)
+{
+	CopyFormatExtensionInfo *info;
+
+	for (int i = 0; i < CopyFormatExtensionAssigned; i++)
+	{
+		if (strcmp(fmt, CopyFormatExtensionArray[i].format_name) == 0)
+			ereport(ERROR,
+					(errcode(ERRCODE_DUPLICATE_OBJECT),
+					 errmsg("custom COPY fromat \"%s\" already exists",
+							fmt)));
+	}
+
+	/* If there is no array yet, create one */
+	if (CopyFormatExtensionAllocated == 0)
+	{
+		CopyFormatExtensionAllocated = 16;
+		CopyFormatExtensionArray = (CopyFormatExtensionInfo *)
+			MemoryContextAlloc(TopMemoryContext,
+							   CopyFormatExtensionAllocated * sizeof(CopyFormatExtensionInfo));
+	}
+
+	/* If there's an array but it's currently full, expand it */
+	if (CopyFormatExtensionAssigned >= CopyFormatExtensionAllocated)
+	{
+		int			i = pg_nextpower2_32(CopyFormatExtensionAssigned + 1);
+
+		CopyFormatExtensionArray =
+			repalloc(CopyFormatExtensionArray, sizeof(CopyFormatExtensionInfo) * i);
+		CopyFormatExtensionAllocated = i;
+	}
+
+	/* Register the format */
+	info = &CopyFormatExtensionArray[CopyFormatExtensionAssigned++];
+	info->format_name = fmt;
+	info->from_routine = from_routine;
+	info->to_routine = to_routine;
+}
+
+/*
+ * Get an integer ID of the given name of an custom COPY format extension.
+ *
+ * Within the lifetime of a particular backend, the same name will be
+ * mapped to the same ID every time. IDs of COPY formats that are not
+ * loaded during shared_preload_libraries time are not stable across
+ * backends.
+ */
+int
+GetCopyFormatExtensionId(const char *fmt)
+{
+	for (int i = 0; i < CopyFormatExtensionAssigned; i++)
+	{
+		if (strcmp(CopyFormatExtensionArray[i].format_name, fmt) == 0)
+			return i;
+	}
+
+	return -1;
+}
+
+const CopyToRoutine *
+GetCustomCopyToRoutine(int extension_id)
+{
+	if (extension_id >= CopyFormatExtensionAssigned || extension_id < 0)
+		return NULL;
+
+	if (!CopyFormatExtensionArray[extension_id].to_routine)
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("COPY format \"%s\" does not support COPY TO routine",
+						CopyFormatExtensionArray[extension_id].format_name)));
+
+	return CopyFormatExtensionArray[extension_id].to_routine;
+}
+
+const CopyFromRoutine *
+GetCustomCopyFromRoutine(int extension_id)
+{
+	if (extension_id >= CopyFormatExtensionAssigned || extension_id < 0)
+		return NULL;
+
+	if (!CopyFormatExtensionArray[extension_id].to_routine)
+		ereport(ERROR,
+				(errcode(ERRCODE_UNDEFINED_OBJECT),
+				 errmsg("COPY format \"%s\" does not support COPY FROM routine",
+						CopyFormatExtensionArray[extension_id].format_name)));
+
+	return CopyFormatExtensionArray[extension_id].from_routine;
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 03779838654..fc38caaca24 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -155,13 +155,25 @@ static const CopyFromRoutine CopyFromRoutineBinary = {
 static const CopyFromRoutine *
 CopyFromGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	const CopyFromRoutine *routine;
 
-	/* default is text */
-	return &CopyFromRoutineText;
+	switch (opts->format)
+	{
+		case COPY_FORMAT_CSV:
+			routine = &CopyFromRoutineCSV;
+			break;
+		case COPY_FORMAT_TEXT:
+			routine = &CopyFromRoutineText;
+			break;
+		case COPY_FORMAT_BINARY:
+			routine = &CopyFromRoutineBinary;
+			break;
+		case COPY_FORMAT_EXTENSION:
+			routine = GetCustomCopyFromRoutine(opts->format_ext_id);
+			break;
+	}
+
+	return routine;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -263,7 +275,7 @@ CopyFromErrorCallback(void *arg)
 				   edata->cur_relname);
 		return;
 	}
-	if (cstate->opts.binary)
+	if (cstate->opts.format == COPY_FORMAT_BINARY)
 	{
 		/* can't usefully display the data */
 		if (edata->cur_attname)
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 595dc84b172..0b94d8851f3 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -171,7 +171,7 @@ ReceiveCopyBegin(CopyFromState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = (cstate->opts.format == COPY_FORMAT_BINARY ? 1 : 0);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyInResponse);
@@ -754,7 +754,7 @@ bool
 NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 {
 	return NextCopyFromRawFieldsInternal(cstate, fields, nfields,
-										 cstate->opts.csv_mode);
+										 cstate->opts.format == COPY_FORMAT_CSV);
 }
 
 /*
@@ -782,7 +782,8 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 	bool		done = false;
 
 	/* only available for text or csv input */
-	Assert(!cstate->opts.binary);
+	Assert(cstate->opts.format == COPY_FORMAT_TEXT ||
+		   cstate->opts.format == COPY_FORMAT_CSV);
 
 	/* on input check that the header line is correct if needed */
 	if (edata->cur_lineno == 0 && cstate->opts.header_line != COPY_HEADER_FALSE)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index e90fab6d958..842c5efa8d5 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -160,13 +160,25 @@ static const CopyToRoutine CopyToRoutineBinary = {
 static const CopyToRoutine *
 CopyToGetRoutine(const CopyFormatOptions *opts)
 {
-	if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
+	const CopyToRoutine *routine;
 
-	/* default is text */
-	return &CopyToRoutineText;
+	switch (opts->format)
+	{
+		case COPY_FORMAT_CSV:
+			routine = &CopyToRoutineCSV;
+			break;
+		case COPY_FORMAT_TEXT:
+			routine = &CopyToRoutineText;
+			break;
+		case COPY_FORMAT_BINARY:
+			routine = &CopyToRoutineBinary;
+			break;
+		case COPY_FORMAT_EXTENSION:
+			routine = GetCustomCopyToRoutine(opts->format_ext_id);
+			break;
+	}
+
+	return routine;
 }
 
 /* Implementation of the start callback for text and CSV formats */
@@ -199,7 +211,7 @@ CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
-			if (cstate->opts.csv_mode)
+			if (cstate->opts.format == COPY_FORMAT_CSV)
 				CopyAttributeOutCSV(cstate, colname, false);
 			else
 				CopyAttributeOutText(cstate, colname);
@@ -376,7 +388,7 @@ SendCopyBegin(CopyToState cstate)
 {
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
-	int16		format = (cstate->opts.binary ? 1 : 0);
+	int16		format = (cstate->opts.format == COPY_FORMAT_BINARY ? 1 : 0);
 	int			i;
 
 	pq_beginmessage(&buf, PqMsg_CopyOutResponse);
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 1fd44a132be..73660e694ce 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -49,6 +49,17 @@ typedef enum CopyLogVerbosityChoice
 	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
 } CopyLogVerbosityChoice;
 
+/*
+ * Represents the file format processed by COPY command.
+ */
+typedef enum CopyFormatType
+{
+	COPY_FORMAT_CSV = 0,
+	COPY_FORMAT_TEXT,
+	COPY_FORMAT_BINARY,
+	COPY_FORMAT_EXTENSION,
+}			CopyFormatType;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -59,9 +70,10 @@ typedef struct CopyFormatOptions
 	/* parameters from the COPY command */
 	int			file_encoding;	/* file or remote side's character encoding,
 								 * -1 if not specified */
-	bool		binary;			/* binary format? */
+	CopyFormatType format;
+	int			format_ext_id;	/* custom COPY format id, -1 if format is
+								 * built-in format */
 	bool		freeze;			/* freeze rows on loading? */
-	bool		csv_mode;		/* Comma Separated Value format? */
 	int			header_line;	/* number of lines to skip or COPY_HEADER_XXX
 								 * value (see the above) */
 	char	   *null_print;		/* NULL marker string (server encoding!) */
@@ -163,6 +175,8 @@ extern uint64 CopyFrom(CopyFromState cstate);
 
 extern DestReceiver *CreateCopyDestReceiver(void);
 
+extern int	GetCopyFormatExtensionId(const char *fmt);
+
 /*
  * internal prototypes
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..b9e29dddd5b 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -102,4 +102,9 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
+extern void RegisterCustomCopyFormat(const char *fmt, const CopyToRoutine *to_routine,
+									 const CopyFromRoutine *from_routine);
+extern const CopyToRoutine *GetCustomCopyToRoutine(int extension_id);
+extern const CopyFromRoutine *GetCustomCopyFromRoutine(int extension_id);
+
 #endif							/* COPYAPI_H */
-- 
2.43.5

#307Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#306)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoB0Z3gkOGALK3pXYmGTWATVvgDAmn-yXGp2mX64S-YrSw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 14 Jul 2025 03:28:16 +0900,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

FYI: We discussed this so far. For example:

/messages/by-id/CAD21AoD=UapH4Wh06G6H5XAzPJ0iJg9YcW8r7E2UEJkZ8QsosA@mail.gmail.com

I think we can move CopyToState to copy.h and we don't
need to have set/get functions for its fields.

/messages/by-id/CAD21AoBpWFU4k-_bwrTq0AkFSAdwQqhAsSW188STmu9HxLJ0nQ@mail.gmail.com

What does "private" mean here? I thought that it means that
"PostgreSQL itself can use it". But it seems that you mean
that "PostgreSQL itself and custom format extensions can use
it but other extensions can't use it".

I'm not familiar with "_internal.h" in PostgreSQL but is
"_internal.h" for the latter "private" mean?

My understanding is that we don't strictly prohibit _internal.h from
being included in out of core files. For example, file_fdw.c includes
copyfrom_internal.h in order to access some fields of CopyFromState.

In general, I agree that we should export only needed
information.

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

The built-in formats can keep using Copy{From,To}State
directly with the accessors approach. We can avoid any
performance regression of the built-in formats. If we split
Copy{From,To}State to Copy{From,To}ExecutionData,
performance may be changed.

I've implemented a draft patch for that idea. In the 0001 patch, I
moved fields that are related to internal working state from
CopyToStateData to CopyToExectuionData. COPY routine APIs pass a
pointer of CopyToStateData but extensions can access only fields
except for CopyToExectuionData. In the 0002 patch, I've implemented
the registration API and some related APIs based on your v42 patch.
I've made similar changes to COPY FROM codes too.

The patch is a very PoC phase and we would need to scrutinize the
fields that should or should not be exposed. Feedback is very welcome.

Based on our sample extensions [1]https://github.com/kou/pg-copy-arrow/[2]https://github.com/MasahikoSawada/pg_copy_jsonlines/, the following fields
may be minimal. I added "(*)" marks that exist in
Copy{From,To}StateDate in your patch. Other fields exist in
Copy{From,To}ExecutionData. We need to export them to
extensions. We can hide fields in Copy{From,To}StateData not
listed here.

FROM:

- attnumlist (*)
- bytes_processed
- cur_attname
- escontext
- in_functions (*)
- input_buf
- input_reached_eof
- line_buf
- opts (*)
- raw_buf
- raw_buf_index
- raw_buf_len
- rel (*)
- typioparams (*)

TO:

- attnumlist (*)
- fe_msgbuf
- opts (*)

[1]: https://github.com/kou/pg-copy-arrow/
[2]: https://github.com/MasahikoSawada/pg_copy_jsonlines/

Thanks,
--
kou

#308Sutou Kouhei
kou@clear-code.com
In reply to: Sutou Kouhei (#307)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <20250714.173803.865595983884510428.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 14 Jul 2025 17:38:03 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

In general, I agree that we should export only needed
information.

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

Another idea: We'll add Copy{From,To}State::opaque
eventually. (For example, the v40-0003 patch includes it.)

How about using it to hide fields only for built-in formats?

Thanks,
--
kou

#309Andres Freund
andres@anarazel.de
In reply to: Masahiko Sawada (#306)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

On 2025-07-14 03:28:16 +0900, Masahiko Sawada wrote:

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

I've implemented a draft patch for that idea. In the 0001 patch, I
moved fields that are related to internal working state from
CopyToStateData to CopyToExectuionData. COPY routine APIs pass a
pointer of CopyToStateData but extensions can access only fields
except for CopyToExectuionData. In the 0002 patch, I've implemented
the registration API and some related APIs based on your v42 patch.
I've made similar changes to COPY FROM codes too.

I've not followed the development of this patch - but I continue to be
concerned about the performance impact it has as-is and the amount of COPY
performance improvements it forecloses.

This seems to add yet another layer of indirection to a lot of hot functions
like CopyGetData() etc.

Greetings,

Andres Freund

#310Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Andres Freund (#309)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jul 15, 2025 at 5:37 AM Andres Freund <andres@anarazel.de> wrote:

Hi,

On 2025-07-14 03:28:16 +0900, Masahiko Sawada wrote:

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

I've implemented a draft patch for that idea. In the 0001 patch, I
moved fields that are related to internal working state from
CopyToStateData to CopyToExectuionData. COPY routine APIs pass a
pointer of CopyToStateData but extensions can access only fields
except for CopyToExectuionData. In the 0002 patch, I've implemented
the registration API and some related APIs based on your v42 patch.
I've made similar changes to COPY FROM codes too.

I've not followed the development of this patch - but I continue to be
concerned about the performance impact it has as-is and the amount of COPY
performance improvements it forecloses.

This seems to add yet another layer of indirection to a lot of hot functions
like CopyGetData() etc.

The most refactoring works have been done by commit 7717f6300 and
2e4127b6d with a slight performance gain. At this stage, we're trying
to introduce the registration API so that extensions can provide their
callbacks to the core. Some functions required for I/O such as
CopyGetData() and CopySendEndOfRow() would be exposed but I'm not
going to add additional indirection function call layers.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#311Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#308)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Jul 15, 2025 at 12:54 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <20250714.173803.865595983884510428.kou@clear-code.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 14 Jul 2025 17:38:03 +0900 (JST),
Sutou Kouhei <kou@clear-code.com> wrote:

I've reviewed the 0001 and 0002 patches. The API implemented in the
0002 patch looks good to me, but I'm concerned about the capsulation
of copy state data. With the v42 patches, we pass the whole
CopyToStateData to the extension codes, but most of the fields in
CopyToStateData are internal working state data that shouldn't be
exposed to extensions. I think we need to sort out which fields are
exposed or not. That way, it would be safer and we would be able to
avoid exposing copyto_internal.h and extensions would not need to
include copyfrom_internal.h.

In general, I agree that we should export only needed
information.

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

Yeah, while it can export required fields without breaking ABI, I'm
concerned that setter and getter functions could be bloated if we need
to have them for many fields.

Another idea: We'll add Copy{From,To}State::opaque
eventually. (For example, the v40-0003 patch includes it.)

How about using it to hide fields only for built-in formats?

What is the difference between your idea and splitting CopyToState
into CopyToState and CopyToExecutionData?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#312Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#310)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAQkjU=o0nX4y0jtX0BnsrqA04g2ABqrUwjT88YeEWarA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 17 Jul 2025 13:33:13 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I've not followed the development of this patch - but I continue to be
concerned about the performance impact it has as-is and the amount of COPY
performance improvements it forecloses.

This seems to add yet another layer of indirection to a lot of hot functions
like CopyGetData() etc.

The most refactoring works have been done by commit 7717f6300 and
2e4127b6d with a slight performance gain. At this stage, we're trying
to introduce the registration API so that extensions can provide their
callbacks to the core. Some functions required for I/O such as
CopyGetData() and CopySendEndOfRow() would be exposed but I'm not
going to add additional indirection function call layers.

I think Andres is talking about any indirection not only
indirection function call. In this case, "cstate->XXX" ->
"cstate->edata->XXX".

It's also mentioned in my e-mail. I'm not sure whether it
has performance impact but it's better that we benchmark to
confirm whether there is any performance impact or not with
the Copy{From,To}ExecutionData approach.

Thanks,
--
kou

#313Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#311)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoAZL2RzPM4RLOJKm_73z5LXq2_VOVF+S+T0tnbjHdWTFA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 17 Jul 2025 13:44:11 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

Yeah, while it can export required fields without breaking ABI, I'm
concerned that setter and getter functions could be bloated if we need
to have them for many fields.

In general, I choose this approach in my projects even when
I need to define many accessors. Because I can hide
implementation details from users. I can change
implementation details without breaking API/ABI.

But PostgreSQL isn't my project. Is there any guideline for
PostgreSQL API(/ABI?) design that we can refer for this
case?

FYI: We need to export at least the following fields:

/messages/by-id/20250714.173803.865595983884510428.kou@clear-code.com

FROM:

- attnumlist (*)
- bytes_processed
- cur_attname
- escontext
- in_functions (*)
- input_buf
- input_reached_eof
- line_buf
- opts (*)
- raw_buf
- raw_buf_index
- raw_buf_len
- rel (*)
- typioparams (*)

TO:

- attnumlist (*)
- fe_msgbuf
- opts (*)

Here are pros/cons of the Copy{From,To}ExecutionData
approach, right?

Pros:
1. We can hide internal data from extensions

Cons:
1. Built-in format routines need to refer fields via
Copy{From,To}ExecutionData.
* This MAY has performance impact. If there is no
performance impact, this is not a cons.
2. API/ABI compatibility will be broken when we change
exported fields.
* I'm not sure whether this is a cons in the PostgreSQL
design.

Here are pros/cons of the accessors approach:

Pros:
1. We can hide internal data from extensions
2. We can export new fields change field names
without breaking API/ABI compatibility
3. We don't need to change built-in format routines.
So we can assume that there is no performance impact.

Cons:
1. We may need to define many accessors
* I'm not sure whether this is a cons in the PostgreSQL
design.

Another idea: We'll add Copy{From,To}State::opaque
eventually. (For example, the v40-0003 patch includes it.)

How about using it to hide fields only for built-in formats?

What is the difference between your idea and splitting CopyToState
into CopyToState and CopyToExecutionData?

1. We don't need to manage 2 similar data for built-in
formats and extensions.
* Build-in formats use CopyToExecutionData and extensions
use opaque.
2. We can introduce registration API now.
* We can work on this topic AFTER we introduce
registration API.
* e.g.: Add registration API -> Add opaque -> Use opaque
for internal fields (we will benchmark this
implementation at this time)

Thanks,
--
kou

#314Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#313)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Jul 18, 2025 at 3:05 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoAZL2RzPM4RLOJKm_73z5LXq2_VOVF+S+T0tnbjHdWTFA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 17 Jul 2025 13:44:11 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

Yeah, while it can export required fields without breaking ABI, I'm
concerned that setter and getter functions could be bloated if we need
to have them for many fields.

In general, I choose this approach in my projects even when
I need to define many accessors. Because I can hide
implementation details from users. I can change
implementation details without breaking API/ABI.

But PostgreSQL isn't my project. Is there any guideline for
PostgreSQL API(/ABI?) design that we can refer for this
case?

As far as I know there is no official guideline for PostgreSQL API and
ABI design, but I've never seen structs having more than 10 getter and
setter in PostgreSQL source code.

FYI: We need to export at least the following fields:

/messages/by-id/20250714.173803.865595983884510428.kou@clear-code.com

FROM:

- attnumlist (*)
- bytes_processed
- cur_attname
- escontext
- in_functions (*)
- input_buf
- input_reached_eof
- line_buf
- opts (*)
- raw_buf
- raw_buf_index
- raw_buf_len
- rel (*)
- typioparams (*)

TO:

- attnumlist (*)
- fe_msgbuf
- opts (*)

I think we can think of the minimum list of fields that we need to
expose. For instance, fields used for buffered reads for COPY FROM
such as input_buf and raw_buf related fields don't necessarily need to
be exposed as extension can implement it in its own way. We can start
with the supporting simple copy format extensions like that read and
parse the binary data from the data source and fill 'values' and
'nulls' arrays as output. Considering these facts, it might be
sufficient for copy format extensions if they could access 'rel',
'attnumlist', and 'opts' in both COPY FROM and COPY TO (and
CopyFromErrorCallback related fields for COPY FROM).

Apart from this, we might want to reorganize CopyFromStateData fields
and CopyToStateData fields since they have mixed fields of general
purpose fields for COPY operations (e.g., num_defaults, whereClause,
and range_table) and built-in format specific fields (e.g., line_buf
and input_buf). Text and CSV formats are using some fields for parsing
fields with buffered reads so one idea is that we move related fields
to another struct so that both built-in formats (text and CSV) and
external extensions that want to use the buffered reads for text
parsing can use this functionality.

Here are pros/cons of the Copy{From,To}ExecutionData
approach, right?

Pros:
1. We can hide internal data from extensions

Cons:
1. Built-in format routines need to refer fields via
Copy{From,To}ExecutionData.
* This MAY has performance impact. If there is no
performance impact, this is not a cons.
2. API/ABI compatibility will be broken when we change
exported fields.
* I'm not sure whether this is a cons in the PostgreSQL
design.

Here are pros/cons of the accessors approach:

Pros:
1. We can hide internal data from extensions
2. We can export new fields change field names
without breaking API/ABI compatibility
3. We don't need to change built-in format routines.
So we can assume that there is no performance impact.

Cons:
1. We may need to define many accessors
* I'm not sure whether this is a cons in the PostgreSQL
design.

I agree with the summary.

Another idea: We'll add Copy{From,To}State::opaque
eventually. (For example, the v40-0003 patch includes it.)

How about using it to hide fields only for built-in formats?

What is the difference between your idea and splitting CopyToState
into CopyToState and CopyToExecutionData?

1. We don't need to manage 2 similar data for built-in
formats and extensions.
* Build-in formats use CopyToExecutionData and extensions
use opaque.
2. We can introduce registration API now.
* We can work on this topic AFTER we introduce
registration API.
* e.g.: Add registration API -> Add opaque -> Use opaque
for internal fields (we will benchmark this
implementation at this time)

What if we find performance overhead in built-in format cases after
introducing opaque data? I personally would like to avoid merging the
registration API (i.e., supporting custom copy formats) while being
unsure about the overall design ahead and the potential performance
impact by following patches.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#315Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#314)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Jul 28, 2025 at 12:33 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Fri, Jul 18, 2025 at 3:05 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoAZL2RzPM4RLOJKm_73z5LXq2_VOVF+S+T0tnbjHdWTFA@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 17 Jul 2025 13:44:11 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about adding accessors instead of splitting
Copy{From,To}State to Copy{From,To}ExecutionData? If we use
the accessors approach, we can export only needed
information step by step without breaking ABI.

Yeah, while it can export required fields without breaking ABI, I'm
concerned that setter and getter functions could be bloated if we need
to have them for many fields.

In general, I choose this approach in my projects even when
I need to define many accessors. Because I can hide
implementation details from users. I can change
implementation details without breaking API/ABI.

But PostgreSQL isn't my project. Is there any guideline for
PostgreSQL API(/ABI?) design that we can refer for this
case?

As far as I know there is no official guideline for PostgreSQL API and
ABI design, but I've never seen structs having more than 10 getter and
setter in PostgreSQL source code.

FYI: We need to export at least the following fields:

/messages/by-id/20250714.173803.865595983884510428.kou@clear-code.com

FROM:

- attnumlist (*)
- bytes_processed
- cur_attname
- escontext
- in_functions (*)
- input_buf
- input_reached_eof
- line_buf
- opts (*)
- raw_buf
- raw_buf_index
- raw_buf_len
- rel (*)
- typioparams (*)

TO:

- attnumlist (*)
- fe_msgbuf
- opts (*)

I think we can think of the minimum list of fields that we need to
expose. For instance, fields used for buffered reads for COPY FROM
such as input_buf and raw_buf related fields don't necessarily need to
be exposed as extension can implement it in its own way. We can start
with the supporting simple copy format extensions like that read and
parse the binary data from the data source and fill 'values' and
'nulls' arrays as output. Considering these facts, it might be
sufficient for copy format extensions if they could access 'rel',
'attnumlist', and 'opts' in both COPY FROM and COPY TO (and
CopyFromErrorCallback related fields for COPY FROM).

Apart from this, we might want to reorganize CopyFromStateData fields
and CopyToStateData fields since they have mixed fields of general
purpose fields for COPY operations (e.g., num_defaults, whereClause,
and range_table) and built-in format specific fields (e.g., line_buf
and input_buf). Text and CSV formats are using some fields for parsing
fields with buffered reads so one idea is that we move related fields
to another struct so that both built-in formats (text and CSV) and
external extensions that want to use the buffered reads for text
parsing can use this functionality.

So probably it might be worth refactoring the codes in terms of:

1. hiding internal data from format callbacks
2. separating format-specific fields from the main state data.

I categorized the fields in CopyFromStateData. I think there are
roughly three different kind of fields mixed there:

1. fields used only the core (not by format callback)
- filename
- is_program
- whereClause
- cur_relname
- copycontext
- defmap
- num_defaults
- volatile_defexprs
- range_table
- rtrperminfos
- qualexpr
- transition_capture

2. fields used by both the core and format callbacks
- rel
- attnumlist
- cur_lineno
- cur_attname
- cur_attval
- relname_only
- num_errors
- opts
- in_functions
- typioparams
- escontext
- defexprs
- Input-related fields
- copy_src
- copy_file
- fe_msgbuf
- data_source_cb
- byteprocessed

3. built-in format specific fields (mostly for text and csv)
- eol_type
- defaults
- Encoding related fields
- file_encoding
- need_transcoding
- conversion_proc
- convert_select_flags
- raw data pointers
- max_fields
- raw_fields
- attribute_buf
- line_buf related fields
- line_buf
- line_buf_valid
- input_buf related fields
- input_buf
- input_buf_index
- input_buf_len
- input_reached_eof
- input_reached_error
- raw_buf related fields
- raw_buf
- raw_buf_index
- raw_buf_len
- raw_reached_eof

The fields in 1 are mostly static fields, and the fields in 2 and 3
are likely to be accessed in hot functions during COPY FROM. Would it
be a good idea to restructure these fields so that we can hide the
fields in 1 from callback functions and having the fields in 3 in a
separate format-specific struct that can be accessed via an opaque
pointer? But could the latter change potentially cause performance
overheads?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#316Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#315)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBa0Wm3C2H12jaqkvLidP2zEhsC+gf=3w7XiA4LQnvx0g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 28 Jul 2025 22:19:36 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The fields in 1 are mostly static fields, and the fields in 2 and 3
are likely to be accessed in hot functions during COPY FROM. Would it
be a good idea to restructure these fields so that we can hide the
fields in 1 from callback functions and having the fields in 3 in a
separate format-specific struct that can be accessed via an opaque
pointer? But could the latter change potentially cause performance
overheads?

Yes. It changes memory layout (1 continuous memory chunk ->
2 separated memory chunks) and introduces indirect member
accesses (x->y -> x->z->y). They may not have performance
impact but we need to measure it if we want to use this
approach.

BTW, how about the following approach?

copyapi.h:

typedef struct CopyToStateData
{
/* public members */
/* ... */
} CopyToStateData;

copyto.c:

typedef struct CopyToStateInternalData
{
CopyToStateData parent;

/* private members */
/* ... */
} CopyToStateInternalData;

We export CopyToStateData only with public members. We don't
export CopyToStateInternalData that has members only for
built-in formats.

CopyToStateInternalData has the same memory layout as
CopyToStateData. So we can use CopyToStateInternalData as
CopyToStateData.

We use CopyToStateData not CopyToStateInternalData in public
API. We cast CopyToStateData to CopyToStateInternalData when
we need to use private members:

static void
CopySendData(CopyToState cstate, const void *databuf, int datasize)
{
CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
appendBinaryStringInfo(cstate_internal->fe_msgbuf, databuf, datasize);
}

It's still direct member access.

With this approach, we can keep the same memory layout (1
continuous memory chunk) and direct member access. I think
that this approach doesn't have performance impact.

See the attached patch for PoC of this approach.

Drawback: This approach always allocates
CopyToStateInternalData not CopyToStateData. So we need to
allocate needless memories for extensions. But this will
prevent performance regression of built-in formats. Is it
acceptable?

Thanks,
--
kou

Attachments:

0001-Split-CopyToStateData-to-CopyToStateData-and-CopyToS.patchtext/x-patch; charset=us-asciiDownload
From 4f1ee841677774cdc36091066020674d300714db Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Thu, 14 Aug 2025 15:21:50 +0900
Subject: [PATCH] Split CopyToStateData to CopyToStateData and
 CopyToStateInternalData

---
 src/backend/commands/copyto.c  | 133 +++++++++++++++++----------------
 src/include/commands/copyapi.h |  21 ++++++
 2 files changed, 91 insertions(+), 63 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 67b94b91cae..8c58cb18a4d 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -21,7 +21,6 @@
 #include "access/tableam.h"
 #include "commands/copyapi.h"
 #include "commands/progress.h"
-#include "executor/execdesc.h"
 #include "executor/executor.h"
 #include "executor/tuptable.h"
 #include "libpq/libpq.h"
@@ -62,40 +61,27 @@ typedef enum CopyDest
  * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
  * when we have to do it the hard way.
  */
-typedef struct CopyToStateData
+typedef struct CopyToStateInternalData
 {
-	/* format-specific routines */
-	const CopyToRoutine *routine;
+	struct CopyToStateData parent;
 
 	/* low-level state data */
 	CopyDest	copy_dest;		/* type of copy source/destination */
 	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
 	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
 
-	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
 
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
 	/*
 	 * Working state
 	 */
 	MemoryContext copycontext;	/* per-copy execution context */
 
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
 	MemoryContext rowcontext;	/* per-row evaluation context */
 	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
+}			CopyToStateInternalData;
+typedef struct CopyToStateInternalData *CopyToStateInternal;
 
 /* DestReceiver for COPY (query) TO */
 typedef struct
@@ -189,11 +175,13 @@ CopyToGetRoutine(const CopyFormatOptions *opts)
 static void
 CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
 	 */
-	if (cstate->need_transcoding)
+	if (cstate_internal->need_transcoding)
 		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
 														  cstate->opts.null_print_len,
 														  cstate->file_encoding);
@@ -390,6 +378,7 @@ CopyToBinaryEnd(CopyToState cstate)
 static void
 SendCopyBegin(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	StringInfoData buf;
 	int			natts = list_length(cstate->attnumlist);
 	int16		format = (cstate->opts.binary ? 1 : 0);
@@ -401,14 +390,14 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate_internal->copy_dest = COPY_FRONTEND;
 }
 
 static void
 SendCopyEnd(CopyToState cstate)
 {
 	/* Shouldn't have any unsent data */
-	Assert(cstate->fe_msgbuf->len == 0);
+	Assert(((CopyToStateInternal) cstate)->fe_msgbuf->len == 0);
 	/* Send Copy Done message */
 	pq_putemptymessage(PqMsg_CopyDone);
 }
@@ -426,32 +415,39 @@ SendCopyEnd(CopyToState cstate)
 static void
 CopySendData(CopyToState cstate, const void *databuf, int datasize)
 {
-	appendBinaryStringInfo(cstate->fe_msgbuf, databuf, datasize);
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
+	appendBinaryStringInfo(cstate_internal->fe_msgbuf, databuf, datasize);
 }
 
 static void
 CopySendString(CopyToState cstate, const char *str)
 {
-	appendBinaryStringInfo(cstate->fe_msgbuf, str, strlen(str));
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
+	appendBinaryStringInfo(cstate_internal->fe_msgbuf, str, strlen(str));
 }
 
 static void
 CopySendChar(CopyToState cstate, char c)
 {
-	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
+	appendStringInfoCharMacro(cstate_internal->fe_msgbuf, c);
 }
 
 static void
 CopySendEndOfRow(CopyToState cstate)
 {
-	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+	StringInfo	fe_msgbuf = cstate_internal->fe_msgbuf;
 
-	switch (cstate->copy_dest)
+	switch (cstate_internal->copy_dest)
 	{
 		case COPY_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
-					   cstate->copy_file) != 1 ||
-				ferror(cstate->copy_file))
+					   cstate_internal->copy_file) != 1 ||
+				ferror(cstate_internal->copy_file))
 			{
 				if (cstate->is_program)
 				{
@@ -492,8 +488,8 @@ CopySendEndOfRow(CopyToState cstate)
 	}
 
 	/* Update the progress */
-	cstate->bytes_processed += fe_msgbuf->len;
-	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->bytes_processed);
+	cstate_internal->bytes_processed += fe_msgbuf->len;
+	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate_internal->bytes_processed);
 
 	resetStringInfo(fe_msgbuf);
 }
@@ -505,7 +501,9 @@ CopySendEndOfRow(CopyToState cstate)
 static inline void
 CopySendTextLikeEndOfRow(CopyToState cstate)
 {
-	switch (cstate->copy_dest)
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
+	switch (cstate_internal->copy_dest)
 	{
 		case COPY_FILE:
 			/* Default line termination depends on platform */
@@ -561,11 +559,12 @@ CopySendInt16(CopyToState cstate, int16 val)
 static void
 ClosePipeToProgram(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	int			pclose_rc;
 
 	Assert(cstate->is_program);
 
-	pclose_rc = ClosePipeStream(cstate->copy_file);
+	pclose_rc = ClosePipeStream(cstate_internal->copy_file);
 	if (pclose_rc == -1)
 		ereport(ERROR,
 				(errcode_for_file_access(),
@@ -586,13 +585,15 @@ ClosePipeToProgram(CopyToState cstate)
 static void
 EndCopy(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
+
 	if (cstate->is_program)
 	{
 		ClosePipeToProgram(cstate);
 	}
 	else
 	{
-		if (cstate->filename != NULL && FreeFile(cstate->copy_file))
+		if (cstate->filename != NULL && FreeFile(cstate_internal->copy_file))
 			ereport(ERROR,
 					(errcode_for_file_access(),
 					 errmsg("could not close file \"%s\": %m",
@@ -601,7 +602,7 @@ EndCopy(CopyToState cstate)
 
 	pgstat_progress_end_command();
 
-	MemoryContextDelete(cstate->copycontext);
+	MemoryContextDelete(cstate_internal->copycontext);
 	pfree(cstate);
 }
 
@@ -631,6 +632,7 @@ BeginCopyTo(ParseState *pstate,
 			List *options)
 {
 	CopyToState cstate;
+	CopyToStateInternal cstate_internal;
 	bool		pipe = (filename == NULL && data_dest_cb == NULL);
 	TupleDesc	tupDesc;
 	int			num_phys_attrs;
@@ -687,17 +689,18 @@ BeginCopyTo(ParseState *pstate,
 
 
 	/* Allocate workspace and zero all fields */
-	cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData));
+	cstate_internal = (CopyToStateInternal) palloc0(sizeof(CopyToStateInternalData));
+	cstate = (CopyToState) cstate_internal;
 
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
 	 * avoids memory leaks during repeated use of COPY in a query.
 	 */
-	cstate->copycontext = AllocSetContextCreate(CurrentMemoryContext,
-												"COPY",
-												ALLOCSET_DEFAULT_SIZES);
+	cstate_internal->copycontext = AllocSetContextCreate(CurrentMemoryContext,
+														 "COPY",
+														 ALLOCSET_DEFAULT_SIZES);
 
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+	oldcontext = MemoryContextSwitchTo(cstate_internal->copycontext);
 
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
@@ -895,19 +898,19 @@ BeginCopyTo(ParseState *pstate,
 	 */
 	if (cstate->file_encoding == GetDatabaseEncoding() ||
 		cstate->file_encoding == PG_SQL_ASCII)
-		cstate->need_transcoding = false;
+		cstate_internal->need_transcoding = false;
 	else
-		cstate->need_transcoding = true;
+		cstate_internal->need_transcoding = true;
 
 	/* See Multibyte encoding comment above */
-	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
+	cstate_internal->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate_internal->copy_dest = COPY_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate_internal->copy_dest = COPY_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
@@ -916,7 +919,7 @@ BeginCopyTo(ParseState *pstate,
 
 		Assert(!is_program);	/* the grammar does not allow this */
 		if (whereToSendOutput != DestRemote)
-			cstate->copy_file = stdout;
+			cstate_internal->copy_file = stdout;
 	}
 	else
 	{
@@ -926,8 +929,8 @@ BeginCopyTo(ParseState *pstate,
 		if (is_program)
 		{
 			progress_vals[1] = PROGRESS_COPY_TYPE_PROGRAM;
-			cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W);
-			if (cstate->copy_file == NULL)
+			cstate_internal->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W);
+			if (cstate_internal->copy_file == NULL)
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not execute command \"%s\": %m",
@@ -952,14 +955,14 @@ BeginCopyTo(ParseState *pstate,
 			oumask = umask(S_IWGRP | S_IWOTH);
 			PG_TRY();
 			{
-				cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_W);
+				cstate_internal->copy_file = AllocateFile(cstate->filename, PG_BINARY_W);
 			}
 			PG_FINALLY();
 			{
 				umask(oumask);
 			}
 			PG_END_TRY();
-			if (cstate->copy_file == NULL)
+			if (cstate_internal->copy_file == NULL)
 			{
 				/* copy errno because ereport subfunctions might change it */
 				int			save_errno = errno;
@@ -973,7 +976,7 @@ BeginCopyTo(ParseState *pstate,
 								 "You may want a client-side facility such as psql's \\copy.") : 0));
 			}
 
-			if (fstat(fileno(cstate->copy_file), &st))
+			if (fstat(fileno(cstate_internal->copy_file), &st))
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not stat file \"%s\": %m",
@@ -991,7 +994,7 @@ BeginCopyTo(ParseState *pstate,
 								  cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid);
 	pgstat_progress_update_multi_param(2, progress_cols, progress_vals);
 
-	cstate->bytes_processed = 0;
+	cstate_internal->bytes_processed = 0;
 
 	MemoryContextSwitchTo(oldcontext);
 
@@ -1025,6 +1028,7 @@ EndCopyTo(CopyToState cstate)
 uint64
 DoCopyTo(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
@@ -1043,7 +1047,7 @@ DoCopyTo(CopyToState cstate)
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
 	/* We use fe_msgbuf as a per-row buffer regardless of copy_dest */
-	cstate->fe_msgbuf = makeStringInfo();
+	cstate_internal->fe_msgbuf = makeStringInfo();
 
 	/* Get info about the columns we need to process. */
 	cstate->out_functions = (FmgrInfo *) palloc(num_phys_attrs * sizeof(FmgrInfo));
@@ -1062,9 +1066,9 @@ DoCopyTo(CopyToState cstate)
 	 * datatype output routines, and should be faster than retail pfree's
 	 * anyway.  (We don't need a whole econtext as CopyFrom does.)
 	 */
-	cstate->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
-											   "COPY TO",
-											   ALLOCSET_DEFAULT_SIZES);
+	cstate_internal->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
+														"COPY TO",
+														ALLOCSET_DEFAULT_SIZES);
 
 	cstate->routine->CopyToStart(cstate, tupDesc);
 
@@ -1107,7 +1111,7 @@ DoCopyTo(CopyToState cstate)
 
 	cstate->routine->CopyToEnd(cstate);
 
-	MemoryContextDelete(cstate->rowcontext);
+	MemoryContextDelete(cstate_internal->rowcontext);
 
 	if (fe_copy)
 		SendCopyEnd(cstate);
@@ -1121,10 +1125,11 @@ DoCopyTo(CopyToState cstate)
 static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	MemoryContext oldcontext;
 
-	MemoryContextReset(cstate->rowcontext);
-	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
+	MemoryContextReset(cstate_internal->rowcontext);
+	oldcontext = MemoryContextSwitchTo(cstate_internal->rowcontext);
 
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
@@ -1146,12 +1151,13 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 static void
 CopyAttributeOutText(CopyToState cstate, const char *string)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
 	char		delimc = cstate->opts.delim[0];
 
-	if (cstate->need_transcoding)
+	if (cstate_internal->need_transcoding)
 		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
 	else
 		ptr = string;
@@ -1170,7 +1176,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	 * it's worth making two copies of it to get the IS_HIGHBIT_SET() test out
 	 * of the normal safe-encoding path.
 	 */
-	if (cstate->encoding_embeds_ascii)
+	if (cstate_internal->encoding_embeds_ascii)
 	{
 		start = ptr;
 		while ((c = *ptr) != '\0')
@@ -1300,6 +1306,7 @@ static void
 CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					bool use_quote)
 {
+	CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
@@ -1312,7 +1319,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 	if (!use_quote && strcmp(string, cstate->opts.null_print) == 0)
 		use_quote = true;
 
-	if (cstate->need_transcoding)
+	if (cstate_internal->need_transcoding)
 		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
 	else
 		ptr = string;
@@ -1342,7 +1349,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					use_quote = true;
 					break;
 				}
-				if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
+				if (IS_HIGHBIT_SET(c) && cstate_internal->encoding_embeds_ascii)
 					tptr += pg_encoding_mblen(cstate->file_encoding, tptr);
 				else
 					tptr++;
@@ -1366,7 +1373,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 				CopySendChar(cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
-			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
+			if (IS_HIGHBIT_SET(c) && cstate_internal->encoding_embeds_ascii)
 				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
 			else
 				ptr++;
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..b818e13cd1b 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
@@ -54,6 +55,26 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	int			file_encoding;	/* file or remote side's character encoding */
+
+	CopyFormatOptions opts;
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+} CopyToStateData;
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.50.0

#317Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#316)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Aug 13, 2025 at 11:37 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBa0Wm3C2H12jaqkvLidP2zEhsC+gf=3w7XiA4LQnvx0g@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 28 Jul 2025 22:19:36 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The fields in 1 are mostly static fields, and the fields in 2 and 3
are likely to be accessed in hot functions during COPY FROM. Would it
be a good idea to restructure these fields so that we can hide the
fields in 1 from callback functions and having the fields in 3 in a
separate format-specific struct that can be accessed via an opaque
pointer? But could the latter change potentially cause performance
overheads?

Yes. It changes memory layout (1 continuous memory chunk ->
2 separated memory chunks) and introduces indirect member
accesses (x->y -> x->z->y).

I think fields accessed by the hot functions are limited. If we
assemble fields required by hot functions into one struct and pass it
to them can we deal with the latter? For example, we assemble the
fields in 3 I mentioned above (i.e., built-in format specific fields)
into say CopyFromStateBuiltin and pass it to CopyReadLine() function
and the following functions, instead of CopyFromState. Since there are
some places where we need to access to CopyFromState (e.g.,
CopyGetData()), CopyFromStateBuiltin needs to have a pointer to
CopyFromState as well.

They may not have performance
impact but we need to measure it if we want to use this
approach.

Agreed.

BTW, how about the following approach?

copyapi.h:

typedef struct CopyToStateData
{
/* public members */
/* ... */
} CopyToStateData;

copyto.c:

typedef struct CopyToStateInternalData
{
CopyToStateData parent;

/* private members */
/* ... */
} CopyToStateInternalData;

We export CopyToStateData only with public members. We don't
export CopyToStateInternalData that has members only for
built-in formats.

CopyToStateInternalData has the same memory layout as
CopyToStateData. So we can use CopyToStateInternalData as
CopyToStateData.

We use CopyToStateData not CopyToStateInternalData in public
API. We cast CopyToStateData to CopyToStateInternalData when
we need to use private members:

static void
CopySendData(CopyToState cstate, const void *databuf, int datasize)
{
CopyToStateInternal cstate_internal = (CopyToStateInternal) cstate;
appendBinaryStringInfo(cstate_internal->fe_msgbuf, databuf, datasize);
}

It's still direct member access.

With this approach, we can keep the same memory layout (1
continuous memory chunk) and direct member access. I think
that this approach doesn't have performance impact.

See the attached patch for PoC of this approach.

Drawback: This approach always allocates
CopyToStateInternalData not CopyToStateData. So we need to
allocate needless memories for extensions. But this will
prevent performance regression of built-in formats. Is it
acceptable?

While this approach could make sense to avoid potential performance
overheads for built-in format, I find it's somewhat odd that
extensions cannot allocate memory for its working state having
CopyToStateData as the base type.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#318Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#317)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCCjKA77xkUxx59qJ8an_G_58Mry_EtCEcFgd=g9N2xew@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 8 Sep 2025 14:08:16 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The fields in 1 are mostly static fields, and the fields in 2 and 3
are likely to be accessed in hot functions during COPY FROM. Would it
be a good idea to restructure these fields so that we can hide the
fields in 1 from callback functions and having the fields in 3 in a
separate format-specific struct that can be accessed via an opaque
pointer? But could the latter change potentially cause performance
overheads?

Yes. It changes memory layout (1 continuous memory chunk ->
2 separated memory chunks) and introduces indirect member
accesses (x->y -> x->z->y).

I think fields accessed by the hot functions are limited. If we
assemble fields required by hot functions into one struct and pass it
to them can we deal with the latter? For example, we assemble the
fields in 3 I mentioned above (i.e., built-in format specific fields)
into say CopyFromStateBuiltin and pass it to CopyReadLine() function
and the following functions, instead of CopyFromState. Since there are
some places where we need to access to CopyFromState (e.g.,
CopyGetData()), CopyFromStateBuiltin needs to have a pointer to
CopyFromState as well.

It can change indirect member accesses (built-in format
specific members can be direct access but other members in
CopyFromState are indirect access) but it doesn't change 2
separated memory chunks.

If this approach has performance impact and it's caused by
indirect member accesses for built-in format specific
members, your suggestion will work. If performance impact is
caused by another reason, your suggestion may not work.

Anyway, we need to measure performance to proceed with this
approach. If we can confirm that this approach doesn't have
any performance impact, we can use the original your idea.

Do you have any idea how to measure performance of this
approach?

We did it when we introduce Copy{To,From}Routine. But it was
difficult to evaluate the results:

* I don't have machines for stable benchmark results
* We may not be able to use them for the final decision
* Most results showed performance improvement but
there was a result showed mysterious result[1]/messages/by-id/CAEG8a3LUBcvjwqgt6AijJmg67YN_b_NZ4Kzoxc_dH4rpAq0pKg@mail.gmail.com

[1]: /messages/by-id/CAEG8a3LUBcvjwqgt6AijJmg67YN_b_NZ4Kzoxc_dH4rpAq0pKg@mail.gmail.com

Drawback: This approach always allocates
CopyToStateInternalData not CopyToStateData. So we need to
allocate needless memories for extensions. But this will
prevent performance regression of built-in formats. Is it
acceptable?

While this approach could make sense to avoid potential performance
overheads for built-in format, I find it's somewhat odd that
extensions cannot allocate memory for its working state having
CopyToStateData as the base type.

Is it important? We'll provide a opaque member for
extensions. Extensions should use the opaque member instead
of extending Copy{From,To}StateData.

I don't object your approach but we need a good way to
measure performance. If we use this approach, we can omit it
for now and we can revisit your approach later without
breaking compatibility. How about using this approach if we
can't find a good way to measure performance?

Thanks,
--
kou

#319Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#318)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Sep 8, 2025 at 7:50 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCCjKA77xkUxx59qJ8an_G_58Mry_EtCEcFgd=g9N2xew@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 8 Sep 2025 14:08:16 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The fields in 1 are mostly static fields, and the fields in 2 and 3
are likely to be accessed in hot functions during COPY FROM. Would it
be a good idea to restructure these fields so that we can hide the
fields in 1 from callback functions and having the fields in 3 in a
separate format-specific struct that can be accessed via an opaque
pointer? But could the latter change potentially cause performance
overheads?

Yes. It changes memory layout (1 continuous memory chunk ->
2 separated memory chunks) and introduces indirect member
accesses (x->y -> x->z->y).

I think fields accessed by the hot functions are limited. If we
assemble fields required by hot functions into one struct and pass it
to them can we deal with the latter? For example, we assemble the
fields in 3 I mentioned above (i.e., built-in format specific fields)
into say CopyFromStateBuiltin and pass it to CopyReadLine() function
and the following functions, instead of CopyFromState. Since there are
some places where we need to access to CopyFromState (e.g.,
CopyGetData()), CopyFromStateBuiltin needs to have a pointer to
CopyFromState as well.

It can change indirect member accesses (built-in format
specific members can be direct access but other members in
CopyFromState are indirect access) but it doesn't change 2
separated memory chunks.

Right. IIUC the latter point is related to cache locality. But I'm not
sure how much the latter point affects the performance as currently we
don't declare fields to CopyFromState while carefully considering the
cache locality even today. Separating a single memory into multiple
chunks could even have a positive effect on it.

If this approach has performance impact and it's caused by
indirect member accesses for built-in format specific
members, your suggestion will work. If performance impact is
caused by another reason, your suggestion may not work.

Anyway, we need to measure performance to proceed with this
approach. If we can confirm that this approach doesn't have
any performance impact, we can use the original your idea.

Do you have any idea how to measure performance of this
approach?

I think we can start with measuring the entire COPY execution time
with several scenarios as we did previously. For example, reading a
huge file with a single column value and with many columns etc.

We did it when we introduce Copy{To,From}Routine. But it was
difficult to evaluate the results:

* I don't have machines for stable benchmark results
* We may not be able to use them for the final decision
* Most results showed performance improvement but
there was a result showed mysterious result[1]

Perhaps measuring cache-misses help to see how changes could affect
the performance?

[1] /messages/by-id/CAEG8a3LUBcvjwqgt6AijJmg67YN_b_NZ4Kzoxc_dH4rpAq0pKg@mail.gmail.com

Drawback: This approach always allocates
CopyToStateInternalData not CopyToStateData. So we need to
allocate needless memories for extensions. But this will
prevent performance regression of built-in formats. Is it
acceptable?

While this approach could make sense to avoid potential performance
overheads for built-in format, I find it's somewhat odd that
extensions cannot allocate memory for its working state having
CopyToStateData as the base type.

Is it important? We'll provide a opaque member for
extensions. Extensions should use the opaque member instead
of extending Copy{From,To}StateData.

I think yes, because it could be a blocker for future improvements
that might require a large field to CopyFrom/ToStateData.

I don't object your approach but we need a good way to
measure performance. If we use this approach, we can omit it
for now and we can revisit your approach later without
breaking compatibility. How about using this approach if we
can't find a good way to measure performance?

I think it would be better to hear more opinions about this idea and
then make a decision, rather than basing our decision on whether or
not we can measure its performance, so we can be more confident in the
idea we have chosen. While this idea has the above downside, it could
make sense because we always allocate the entire CopyFrom/ToStateData
even today in spite of some fields being not used at all in binary
format and it requires less implementation costs to hide the
for-core-only fields. On the other hand, another possible idea is that
we have three different structs for categories 1 (core-only), 2 (core
and extensions), and 3 (extension-only), and expose only 2 that has a
void pointer to 3. The core can allocate the memory for 1 that embeds
2 at the beginning of the fields. While this design looks cleaner and
we can minimize overheads due to indirect references, it would require
more implementation costs. Which method we choose, I think we need
performance measurements in several scenarios to check if performance
regressions don't happen unexpectedly.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#320Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#319)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCidyfKcpf9-f2Np8kWgkM09c4TjnS1h1hcO_-CCbjeqw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 9 Sep 2025 13:15:43 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I don't object your approach but we need a good way to
measure performance. If we use this approach, we can omit it
for now and we can revisit your approach later without
breaking compatibility. How about using this approach if we
can't find a good way to measure performance?

I think it would be better to hear more opinions about this idea and
then make a decision, rather than basing our decision on whether or
not we can measure its performance, so we can be more confident in the
idea we have chosen. While this idea has the above downside, it could
make sense because we always allocate the entire CopyFrom/ToStateData
even today in spite of some fields being not used at all in binary
format and it requires less implementation costs to hide the
for-core-only fields. On the other hand, another possible idea is that
we have three different structs for categories 1 (core-only), 2 (core
and extensions), and 3 (extension-only), and expose only 2 that has a
void pointer to 3. The core can allocate the memory for 1 that embeds
2 at the beginning of the fields. While this design looks cleaner and
we can minimize overheads due to indirect references, it would require
more implementation costs. Which method we choose, I think we need
performance measurements in several scenarios to check if performance
regressions don't happen unexpectedly.

OK. So the next step is collecting more opinions, right?

Could you add key people in this area to Cc to hear their
opinions? I'm not familiar with key people in the PostgreSQL
community...

Thanks,
--
kou

#321Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#320)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Tue, Sep 9, 2025 at 7:41 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCidyfKcpf9-f2Np8kWgkM09c4TjnS1h1hcO_-CCbjeqw@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Tue, 9 Sep 2025 13:15:43 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I don't object your approach but we need a good way to
measure performance. If we use this approach, we can omit it
for now and we can revisit your approach later without
breaking compatibility. How about using this approach if we
can't find a good way to measure performance?

I think it would be better to hear more opinions about this idea and
then make a decision, rather than basing our decision on whether or
not we can measure its performance, so we can be more confident in the
idea we have chosen. While this idea has the above downside, it could
make sense because we always allocate the entire CopyFrom/ToStateData
even today in spite of some fields being not used at all in binary
format and it requires less implementation costs to hide the
for-core-only fields. On the other hand, another possible idea is that
we have three different structs for categories 1 (core-only), 2 (core
and extensions), and 3 (extension-only), and expose only 2 that has a
void pointer to 3. The core can allocate the memory for 1 that embeds
2 at the beginning of the fields. While this design looks cleaner and
we can minimize overheads due to indirect references, it would require
more implementation costs. Which method we choose, I think we need
performance measurements in several scenarios to check if performance
regressions don't happen unexpectedly.

OK. So the next step is collecting more opinions, right?

Could you add key people in this area to Cc to hear their
opinions? I'm not familiar with key people in the PostgreSQL
community...

How about another idea like we move format-specific data to another
struct that embeds CopyFrom/ToStateData at the first field and have
CopyFrom/ToStart callback return memory with the size of that
struct?It resolves the concerns about adding an extra indirection
layer and extensions doesn't need to allocate memory for unnecessary
fields (used only for built-in formats). While extensions can access
the internal fields I think we can live with that given that there are
some similar precedents such as table AM's scan descriptions.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#322Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#321)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBb3t7EcsjYT4w68p9OfMNwWTYsbSVaSRY6DRhi7sNRFg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Sep 2025 00:36:38 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about another idea like we move format-specific data to another
struct that embeds CopyFrom/ToStateData at the first field and have
CopyFrom/ToStart callback return memory with the size of that
struct?It resolves the concerns about adding an extra indirection
layer and extensions doesn't need to allocate memory for unnecessary
fields (used only for built-in formats). While extensions can access
the internal fields I think we can live with that given that there are
some similar precedents such as table AM's scan descriptions.

The another idea looks like the following, right?

struct CopyToStateBuiltInData
{
struct CopyToStateData parent;

/* Members for built-in formats */
...;
}

typedef CopyToState *(*CopyToStart) (void);

CopyToState
BeginCopyTo(..., CopyToStart copy_to_start)
{
...;

/* Allocate workspace and zero all fields */
cstate = copy_to_start();
...;
}

This idea will almost work. But we can't know which
CopyToStart should be used before we parse "FORMAT" option
of COPY.

If we can iterate options twice in BeginCopy{To,From}(), we
can know it. For example:

BeginCopyTo(...)
{
...;

CopyToStart copy_to_start = NULL;
foreach(option, options)
{
DefElem *defel = lfirst_node(DefElem, option);

if (strcmp(defel->defname, "format") == 0)
{
char *fmt = defGetString(defel);
if (strcmp(fmt, "text") == 0 ||
strcmp(fmt, "csv") == 0 ||
strcmp(fmt, "binary") == 0) {
/* Use the builtin cstate */
} else {
copy_to_start = /* Detect CopyToStart for custom format */;
}
}
}
if (copy_to_start)
cstate = copy_to_start();
else
cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateBuiltInData));
...;
}

(It may be better that we add
Copy{To,From}Routine::Copy{To,From}Allocate() instead of
CopyToStart callback.)

I think that this is acceptable because this must be a light
process. This must not have negative performance impact.

Thanks,
--
kou

#323Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#322)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Sep 10, 2025 at 10:46 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBb3t7EcsjYT4w68p9OfMNwWTYsbSVaSRY6DRhi7sNRFg@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Wed, 10 Sep 2025 00:36:38 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

How about another idea like we move format-specific data to another
struct that embeds CopyFrom/ToStateData at the first field and have
CopyFrom/ToStart callback return memory with the size of that
struct?It resolves the concerns about adding an extra indirection
layer and extensions doesn't need to allocate memory for unnecessary
fields (used only for built-in formats). While extensions can access
the internal fields I think we can live with that given that there are
some similar precedents such as table AM's scan descriptions.

The another idea looks like the following, right?

struct CopyToStateBuiltInData
{
struct CopyToStateData parent;

/* Members for built-in formats */
...;
}

typedef CopyToState *(*CopyToStart) (void);

CopyToState
BeginCopyTo(..., CopyToStart copy_to_start)
{
...;

/* Allocate workspace and zero all fields */
cstate = copy_to_start();
...;
}

Right.

This idea will almost work. But we can't know which
CopyToStart should be used before we parse "FORMAT" option
of COPY.

If we can iterate options twice in BeginCopy{To,From}(), we
can know it. For example:

BeginCopyTo(...)
{
...;

CopyToStart copy_to_start = NULL;
foreach(option, options)
{
DefElem *defel = lfirst_node(DefElem, option);

if (strcmp(defel->defname, "format") == 0)
{
char *fmt = defGetString(defel);
if (strcmp(fmt, "text") == 0 ||
strcmp(fmt, "csv") == 0 ||
strcmp(fmt, "binary") == 0) {
/* Use the builtin cstate */
} else {
copy_to_start = /* Detect CopyToStart for custom format */;
}
}
}
if (copy_to_start)
cstate = copy_to_start();
else
cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateBuiltInData));
...;
}

(It may be better that we add
Copy{To,From}Routine::Copy{To,From}Allocate() instead of
CopyToStart callback.)

I think we can use a local variable of CopyFormatOptions and memcpy it
to the opts of the returned cstate.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#324Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#323)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoCfqD=f2ELqPxg62+_QADhHi_kJXCDMhAerBtvxudd-xQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 11 Sep 2025 13:41:26 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think we can use a local variable of CopyFormatOptions and memcpy it
to the opts of the returned cstate.

It'll work too. Can we proceed this proposal with this
approach? Should we collect more opinions before we proceed?
If so, Could you add key people in this area to Cc to hear
their opinions?

Thanks,
--
kou

#325Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#324)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Thu, Sep 11, 2025 at 5:07 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoCfqD=f2ELqPxg62+_QADhHi_kJXCDMhAerBtvxudd-xQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Thu, 11 Sep 2025 13:41:26 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think we can use a local variable of CopyFormatOptions and memcpy it
to the opts of the returned cstate.

It'll work too. Can we proceed this proposal with this
approach? Should we collect more opinions before we proceed?
If so, Could you add key people in this area to Cc to hear
their opinions?

Since we don't have a single decision-maker, we should proceed through
consensus-building and careful evaluation of each approach. I see that
several senior hackers are already included in this thread, which is
excellent. Since you and I, who have been involved in these
discussions, agreed with this approach, I believe we can proceed with
this direction. If anyone proposes alternative solutions that we find
more compelling, we might have to change the approach.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#326Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#325)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoADXWgdizS0mV5w8wdfftDRsm8sUtNW=CzYYS1OhjFD2A@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 15 Sep 2025 10:00:18 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think we can use a local variable of CopyFormatOptions and memcpy it
to the opts of the returned cstate.

It'll work too. Can we proceed this proposal with this
approach? Should we collect more opinions before we proceed?
If so, Could you add key people in this area to Cc to hear
their opinions?

Since we don't have a single decision-maker, we should proceed through
consensus-building and careful evaluation of each approach. I see that
several senior hackers are already included in this thread, which is
excellent. Since you and I, who have been involved in these
discussions, agreed with this approach, I believe we can proceed with
this direction. If anyone proposes alternative solutions that we find
more compelling, we might have to change the approach.

OK. There is no objection for now.

How about the attached patch? The patch uses the approach
only for CopyToStateData. If this looks good, I can do it
for CopyFromStateData too.

This patch splits CopyToStateData to

* CopyToStateData
* CopyToStateInternalData
* CopyToStateBuiltinData

structs.

This is based on the category described in
/messages/by-id/CAD21AoBa0Wm3C2H12jaqkvLidP2zEhsC+gf=3w7XiA4LQnvx0g@mail.gmail.com
:

1. fields used only the core (not by format callback)
2. fields used by both the core and format callbacks
3. built-in format specific fields (mostly for text and csv)

CopyToStateInternalData is for 1.
CopyToStateData is for 2.
CopyToStateBuiltinData is for 3.

This patch adds CopyToRoutine::CopyToGetStateSize() that
returns size of state struct for the routine. For example,
Built-in formats use sizeof(CopyToStateBuiltinData) for it.

BeginCopyTo() allocates sizeof(CopyToStateInternalData) +
CopyToGetStateSize() size continuous memory and uses the
front part as CopyToStateInternalData and the back part as
CopyToStateData/CopyToStateBuilinData.

Thanks,
--
kou

Attachments:

0001-Split-CopyToStateData-to-CopyToState-Internal-Builti.patchtext/x-patch; charset=us-asciiDownload
From 20539ad10512ef45785c4bd70b93f94eec1125ba Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Fri, 3 Oct 2025 15:23:01 +0900
Subject: [PATCH] Split CopyToStateData to CopyToState{,Internal,Builtin}Data

---
 src/backend/commands/copyto.c  | 282 ++++++++++++++++++---------------
 src/include/commands/copyapi.h |  53 +++++++
 2 files changed, 211 insertions(+), 124 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 67b94b91cae..30298c0df0c 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -37,19 +37,36 @@
 #include "utils/snapmgr.h"
 
 /*
- * Represents the different dest cases we need to worry about at
- * the bottom level
+ * This struct contains the state variables used internally. All COPY TO
+ * routines including built-in format routines should not use this.
  */
-typedef enum CopyDest
+typedef struct CopyToStateInternalData
 {
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* parameters from the COPY command */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+}			CopyToStateInternalData;
+typedef struct CopyToStateInternalData *CopyToStateInternal;
+
+#define CopyToStateInternalGetState(cstate_internal) \
+	((CopyToState) (((char *) cstate_internal) + sizeof(CopyToStateInternalData)))
+#define CopyToStateGetInternal(cstate) \
+	((CopyToStateInternal) (((char *) cstate) - sizeof(CopyToStateInternalData)))
 
 /*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
+ * This struct contains the state variables used by built-in format routines.
  *
  * Multi-byte encodings: all supported client-side encodings encode multi-byte
  * characters by having the first byte's high bit set. Subsequent bytes of the
@@ -62,40 +79,16 @@ typedef enum CopyDest
  * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
  * when we have to do it the hard way.
  */
-typedef struct CopyToStateData
+typedef struct CopyToStateBuiltinData
 {
-	/* format-specific routines */
-	const CopyToRoutine *routine;
+	CopyToStateData parent;
 
 	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
 	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
+}			CopyToStateBuiltinData;
+typedef struct CopyToStateBuiltinData *CopyToStateBuiltin;
 
 /* DestReceiver for COPY (query) TO */
 typedef struct
@@ -118,6 +111,7 @@ static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
 /* built-in format-specific routines */
+static size_t CopyToBuiltinGetStateSize(void);
 static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
 static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
 static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
@@ -150,6 +144,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +153,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +162,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -185,18 +182,27 @@ CopyToGetRoutine(const CopyFormatOptions *opts)
 	return &CopyToRoutineText;
 }
 
+/* Implementation of the allocate callback for all built-in formats */
+static size_t
+CopyToBuiltinGetStateSize(void)
+{
+	return sizeof(CopyToStateBuiltinData);
+}
+
 /* Implementation of the start callback for text and CSV formats */
 static void
 CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
+
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
 	 */
-	if (cstate->need_transcoding)
+	if (cstate_builtin->need_transcoding)
 		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
 														  cstate->opts.null_print_len,
-														  cstate->file_encoding);
+														  cstate_builtin->file_encoding);
 
 	/* if a header has been requested send the line */
 	if (cstate->opts.header_line == COPY_HEADER_TRUE)
@@ -401,7 +407,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -444,16 +450,17 @@ CopySendChar(CopyToState cstate, char c)
 static void
 CopySendEndOfRow(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
 	StringInfo	fe_msgbuf = cstate->fe_msgbuf;
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
 			{
-				if (cstate->is_program)
+				if (cstate_internal->is_program)
 				{
 					if (errno == EPIPE)
 					{
@@ -482,11 +489,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +514,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +522,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -561,9 +568,10 @@ CopySendInt16(CopyToState cstate, int16 val)
 static void
 ClosePipeToProgram(CopyToState cstate)
 {
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
 	int			pclose_rc;
 
-	Assert(cstate->is_program);
+	Assert(cstate_internal->is_program);
 
 	pclose_rc = ClosePipeStream(cstate->copy_file);
 	if (pclose_rc == -1)
@@ -575,7 +583,7 @@ ClosePipeToProgram(CopyToState cstate)
 		ereport(ERROR,
 				(errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
 				 errmsg("program \"%s\" failed",
-						cstate->filename),
+						cstate_internal->filename),
 				 errdetail_internal("%s", wait_result_to_str(pclose_rc))));
 	}
 }
@@ -586,23 +594,25 @@ ClosePipeToProgram(CopyToState cstate)
 static void
 EndCopy(CopyToState cstate)
 {
-	if (cstate->is_program)
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
+
+	if (cstate_internal->is_program)
 	{
 		ClosePipeToProgram(cstate);
 	}
 	else
 	{
-		if (cstate->filename != NULL && FreeFile(cstate->copy_file))
+		if (cstate_internal->filename != NULL && FreeFile(cstate->copy_file))
 			ereport(ERROR,
 					(errcode_for_file_access(),
 					 errmsg("could not close file \"%s\": %m",
-							cstate->filename)));
+							cstate_internal->filename)));
 	}
 
 	pgstat_progress_end_command();
 
-	MemoryContextDelete(cstate->copycontext);
-	pfree(cstate);
+	MemoryContextDelete(cstate_internal->copycontext);
+	pfree(CopyToStateGetInternal(cstate));
 }
 
 /*
@@ -630,11 +640,16 @@ BeginCopyTo(ParseState *pstate,
 			List *attnamelist,
 			List *options)
 {
+	CopyToStateInternal cstate_internal;
 	CopyToState cstate;
+	CopyToStateBuiltin cstate_builtin;
 	bool		pipe = (filename == NULL && data_dest_cb == NULL);
 	TupleDesc	tupDesc;
 	int			num_phys_attrs;
+	MemoryContext copycontext;
 	MemoryContext oldcontext;
+	CopyFormatOptions opts = {0};
+	const CopyToRoutine *routine;
 	const int	progress_cols[] = {
 		PROGRESS_COPY_COMMAND,
 		PROGRESS_COPY_TYPE
@@ -686,24 +701,34 @@ BeginCopyTo(ParseState *pstate,
 	}
 
 
-	/* Allocate workspace and zero all fields */
-	cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData));
-
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
 	 * avoids memory leaks during repeated use of COPY in a query.
 	 */
-	cstate->copycontext = AllocSetContextCreate(CurrentMemoryContext,
-												"COPY",
-												ALLOCSET_DEFAULT_SIZES);
+	copycontext = AllocSetContextCreate(CurrentMemoryContext,
+										"COPY",
+										ALLOCSET_DEFAULT_SIZES);
 
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+	oldcontext = MemoryContextSwitchTo(copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &opts, false /* is_from */ , options);
 
-	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(&cstate->opts);
+	/* Get format routine */
+	routine = CopyToGetRoutine(&opts);
+
+	/* Allocate workspace and set known values */
+	MemoryContextSwitchTo(oldcontext);
+	cstate_internal = (CopyToStateInternal) palloc0(sizeof(CopyToStateInternal) + routine->CopyToGetStateSize());
+	MemoryContextSwitchTo(copycontext);
+	cstate = CopyToStateInternalGetState(cstate_internal);
+	if (routine == &CopyToRoutineText || routine == &CopyToRoutineCSV || routine == &CopyToRoutineBinary)
+		cstate_builtin = (CopyToStateBuiltin) cstate;
+	else
+		cstate_builtin = NULL;
+	cstate_internal->copycontext = copycontext;
+	cstate->opts = opts;
+	cstate_internal->routine = routine;
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -835,19 +860,19 @@ BeginCopyTo(ParseState *pstate,
 		((DR_copy *) dest)->cstate = cstate;
 
 		/* Create a QueryDesc requesting no output */
-		cstate->queryDesc = CreateQueryDesc(plan, pstate->p_sourcetext,
-											GetActiveSnapshot(),
-											InvalidSnapshot,
-											dest, NULL, NULL, 0);
+		cstate_internal->queryDesc = CreateQueryDesc(plan, pstate->p_sourcetext,
+													 GetActiveSnapshot(),
+													 InvalidSnapshot,
+													 dest, NULL, NULL, 0);
 
 		/*
 		 * Call ExecutorStart to prepare the plan for execution.
 		 *
 		 * ExecutorStart computes a result tupdesc for us
 		 */
-		ExecutorStart(cstate->queryDesc, 0);
+		ExecutorStart(cstate_internal->queryDesc, 0);
 
-		tupDesc = cstate->queryDesc->tupDesc;
+		tupDesc = cstate_internal->queryDesc->tupDesc;
 	}
 
 	/* Generate or convert list of attributes to process */
@@ -883,31 +908,34 @@ BeginCopyTo(ParseState *pstate,
 		}
 	}
 
-	/* Use client encoding when ENCODING option is not specified. */
-	if (cstate->opts.file_encoding < 0)
-		cstate->file_encoding = pg_get_client_encoding();
-	else
-		cstate->file_encoding = cstate->opts.file_encoding;
+	if (cstate_builtin)
+	{
+		/* Use client encoding when ENCODING option is not specified. */
+		if (cstate->opts.file_encoding < 0)
+			cstate_builtin->file_encoding = pg_get_client_encoding();
+		else
+			cstate_builtin->file_encoding = cstate->opts.file_encoding;
 
-	/*
-	 * Set up encoding conversion info if the file and server encodings differ
-	 * (see also pg_server_to_any).
-	 */
-	if (cstate->file_encoding == GetDatabaseEncoding() ||
-		cstate->file_encoding == PG_SQL_ASCII)
-		cstate->need_transcoding = false;
-	else
-		cstate->need_transcoding = true;
+		/*
+		 * Set up encoding conversion info if the file and server encodings
+		 * differ (see also pg_server_to_any).
+		 */
+		if (cstate_builtin->file_encoding == GetDatabaseEncoding() ||
+			cstate_builtin->file_encoding == PG_SQL_ASCII)
+			cstate_builtin->need_transcoding = false;
+		else
+			cstate_builtin->need_transcoding = true;
 
-	/* See Multibyte encoding comment above */
-	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
+		/* See Multibyte encoding comment above */
+		cstate_builtin->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate_builtin->file_encoding);
+	}
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
@@ -920,18 +948,18 @@ BeginCopyTo(ParseState *pstate,
 	}
 	else
 	{
-		cstate->filename = pstrdup(filename);
-		cstate->is_program = is_program;
+		cstate_internal->filename = pstrdup(filename);
+		cstate_internal->is_program = is_program;
 
 		if (is_program)
 		{
 			progress_vals[1] = PROGRESS_COPY_TYPE_PROGRAM;
-			cstate->copy_file = OpenPipeStream(cstate->filename, PG_BINARY_W);
+			cstate->copy_file = OpenPipeStream(cstate_internal->filename, PG_BINARY_W);
 			if (cstate->copy_file == NULL)
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not execute command \"%s\": %m",
-								cstate->filename)));
+								cstate_internal->filename)));
 		}
 		else
 		{
@@ -952,7 +980,7 @@ BeginCopyTo(ParseState *pstate,
 			oumask = umask(S_IWGRP | S_IWOTH);
 			PG_TRY();
 			{
-				cstate->copy_file = AllocateFile(cstate->filename, PG_BINARY_W);
+				cstate->copy_file = AllocateFile(cstate_internal->filename, PG_BINARY_W);
 			}
 			PG_FINALLY();
 			{
@@ -967,7 +995,7 @@ BeginCopyTo(ParseState *pstate,
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not open file \"%s\" for writing: %m",
-								cstate->filename),
+								cstate_internal->filename),
 						 (save_errno == ENOENT || save_errno == EACCES) ?
 						 errhint("COPY TO instructs the PostgreSQL server process to write a file. "
 								 "You may want a client-side facility such as psql's \\copy.") : 0));
@@ -977,12 +1005,12 @@ BeginCopyTo(ParseState *pstate,
 				ereport(ERROR,
 						(errcode_for_file_access(),
 						 errmsg("could not stat file \"%s\": %m",
-								cstate->filename)));
+								cstate_internal->filename)));
 
 			if (S_ISDIR(st.st_mode))
 				ereport(ERROR,
 						(errcode(ERRCODE_WRONG_OBJECT_TYPE),
-						 errmsg("\"%s\" is a directory", cstate->filename)));
+						 errmsg("\"%s\" is a directory", cstate_internal->filename)));
 		}
 	}
 
@@ -1004,12 +1032,14 @@ BeginCopyTo(ParseState *pstate,
 void
 EndCopyTo(CopyToState cstate)
 {
-	if (cstate->queryDesc != NULL)
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
+
+	if (cstate_internal->queryDesc != NULL)
 	{
 		/* Close down the query and free resources. */
-		ExecutorFinish(cstate->queryDesc);
-		ExecutorEnd(cstate->queryDesc);
-		FreeQueryDesc(cstate->queryDesc);
+		ExecutorFinish(cstate_internal->queryDesc);
+		ExecutorEnd(cstate_internal->queryDesc);
+		FreeQueryDesc(cstate_internal->queryDesc);
 		PopActiveSnapshot();
 	}
 
@@ -1025,7 +1055,8 @@ EndCopyTo(CopyToState cstate)
 uint64
 DoCopyTo(CopyToState cstate)
 {
-	bool		pipe = (cstate->filename == NULL && cstate->data_dest_cb == NULL);
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
+	bool		pipe = (cstate_internal->filename == NULL && cstate->data_dest_cb == NULL);
 	bool		fe_copy = (pipe && whereToSendOutput == DestRemote);
 	TupleDesc	tupDesc;
 	int			num_phys_attrs;
@@ -1038,7 +1069,7 @@ DoCopyTo(CopyToState cstate)
 	if (cstate->rel)
 		tupDesc = RelationGetDescr(cstate->rel);
 	else
-		tupDesc = cstate->queryDesc->tupDesc;
+		tupDesc = cstate_internal->queryDesc->tupDesc;
 	num_phys_attrs = tupDesc->natts;
 	cstate->opts.null_print_client = cstate->opts.null_print;	/* default */
 
@@ -1052,8 +1083,8 @@ DoCopyTo(CopyToState cstate)
 		int			attnum = lfirst_int(cur);
 		Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
 
-		cstate->routine->CopyToOutFunc(cstate, attr->atttypid,
-									   &cstate->out_functions[attnum - 1]);
+		cstate_internal->routine->CopyToOutFunc(cstate, attr->atttypid,
+												&cstate->out_functions[attnum - 1]);
 	}
 
 	/*
@@ -1062,11 +1093,11 @@ DoCopyTo(CopyToState cstate)
 	 * datatype output routines, and should be faster than retail pfree's
 	 * anyway.  (We don't need a whole econtext as CopyFrom does.)
 	 */
-	cstate->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
-											   "COPY TO",
-											   ALLOCSET_DEFAULT_SIZES);
+	cstate_internal->rowcontext = AllocSetContextCreate(CurrentMemoryContext,
+														"COPY TO",
+														ALLOCSET_DEFAULT_SIZES);
 
-	cstate->routine->CopyToStart(cstate, tupDesc);
+	cstate_internal->routine->CopyToStart(cstate, tupDesc);
 
 	if (cstate->rel)
 	{
@@ -1101,13 +1132,13 @@ DoCopyTo(CopyToState cstate)
 	else
 	{
 		/* run the plan --- the dest receiver will send tuples */
-		ExecutorRun(cstate->queryDesc, ForwardScanDirection, 0);
-		processed = ((DR_copy *) cstate->queryDesc->dest)->processed;
+		ExecutorRun(cstate_internal->queryDesc, ForwardScanDirection, 0);
+		processed = ((DR_copy *) cstate_internal->queryDesc->dest)->processed;
 	}
 
-	cstate->routine->CopyToEnd(cstate);
+	cstate_internal->routine->CopyToEnd(cstate);
 
-	MemoryContextDelete(cstate->rowcontext);
+	MemoryContextDelete(cstate_internal->rowcontext);
 
 	if (fe_copy)
 		SendCopyEnd(cstate);
@@ -1121,15 +1152,16 @@ DoCopyTo(CopyToState cstate)
 static inline void
 CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 {
+	CopyToStateInternal cstate_internal = CopyToStateGetInternal(cstate);
 	MemoryContext oldcontext;
 
-	MemoryContextReset(cstate->rowcontext);
-	oldcontext = MemoryContextSwitchTo(cstate->rowcontext);
+	MemoryContextReset(cstate_internal->rowcontext);
+	oldcontext = MemoryContextSwitchTo(cstate_internal->rowcontext);
 
 	/* Make sure the tuple is fully deconstructed */
 	slot_getallattrs(slot);
 
-	cstate->routine->CopyToOneRow(cstate, slot);
+	cstate_internal->routine->CopyToOneRow(cstate, slot);
 
 	MemoryContextSwitchTo(oldcontext);
 }
@@ -1146,13 +1178,14 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 static void
 CopyAttributeOutText(CopyToState cstate, const char *string)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
 	char		delimc = cstate->opts.delim[0];
 
-	if (cstate->need_transcoding)
-		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
+	if (cstate_builtin->need_transcoding)
+		ptr = pg_server_to_any(string, strlen(string), cstate_builtin->file_encoding);
 	else
 		ptr = string;
 
@@ -1170,7 +1203,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	 * it's worth making two copies of it to get the IS_HIGHBIT_SET() test out
 	 * of the normal safe-encoding path.
 	 */
-	if (cstate->encoding_embeds_ascii)
+	if (cstate_builtin->encoding_embeds_ascii)
 	{
 		start = ptr;
 		while ((c = *ptr) != '\0')
@@ -1225,7 +1258,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				start = ptr++;	/* we include char in next run */
 			}
 			else if (IS_HIGHBIT_SET(c))
-				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
+				ptr += pg_encoding_mblen(cstate_builtin->file_encoding, ptr);
 			else
 				ptr++;
 		}
@@ -1300,6 +1333,7 @@ static void
 CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					bool use_quote)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
@@ -1312,8 +1346,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 	if (!use_quote && strcmp(string, cstate->opts.null_print) == 0)
 		use_quote = true;
 
-	if (cstate->need_transcoding)
-		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
+	if (cstate_builtin->need_transcoding)
+		ptr = pg_server_to_any(string, strlen(string), cstate_builtin->file_encoding);
 	else
 		ptr = string;
 
@@ -1342,8 +1376,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					use_quote = true;
 					break;
 				}
-				if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
-					tptr += pg_encoding_mblen(cstate->file_encoding, tptr);
+				if (IS_HIGHBIT_SET(c) && cstate_builtin->encoding_embeds_ascii)
+					tptr += pg_encoding_mblen(cstate_builtin->file_encoding, tptr);
 				else
 					tptr++;
 			}
@@ -1366,8 +1400,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 				CopySendChar(cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
-			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
-				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
+			if (IS_HIGHBIT_SET(c) && cstate_builtin->encoding_embeds_ascii)
+				ptr += pg_encoding_mblen(cstate_builtin->file_encoding, ptr);
 			else
 				ptr++;
 		}
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..7c536c74a18 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -16,12 +16,65 @@
 
 #include "commands/copy.h"
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains the state variables used by PostgreSQL, built-in
+ * format routines and custom format routines.
+ */
+typedef struct CopyToStateData
+{
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+	CopyFormatOptions opts;
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	/*
+	 * Working state
+	 */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 /*
  * API structure for a COPY TO format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
  */
 typedef struct CopyToRoutine
 {
+	/*
+	 * Return state size for this routine.
+	 *
+	 * If this routine uses CopyToStateData as-is, `return
+	 * sizeof(CopyToStateData)` can be used.
+	 *
+	 * If this routine needs additional data than CopyToStateData, a new
+	 * struct based on CopyToStateData can be used something like:
+	 *
+	 * typedef struct MyCopyToStateDate {
+	 *     struct CopyToStateData parent;
+	 *     int define_additional_members_here;
+	 * } MyCopyToStateData;
+	 *
+	 * In the case, this callback returns `sizeof(MyCopyToStateData)`.
+	 */
+	size_t		(*CopyToGetStateSize) (void);
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
-- 
2.51.0

#327Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#326)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Fri, Oct 3, 2025 at 12:06 AM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoADXWgdizS0mV5w8wdfftDRsm8sUtNW=CzYYS1OhjFD2A@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 15 Sep 2025 10:00:18 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

I think we can use a local variable of CopyFormatOptions and memcpy it
to the opts of the returned cstate.

It'll work too. Can we proceed this proposal with this
approach? Should we collect more opinions before we proceed?
If so, Could you add key people in this area to Cc to hear
their opinions?

Since we don't have a single decision-maker, we should proceed through
consensus-building and careful evaluation of each approach. I see that
several senior hackers are already included in this thread, which is
excellent. Since you and I, who have been involved in these
discussions, agreed with this approach, I believe we can proceed with
this direction. If anyone proposes alternative solutions that we find
more compelling, we might have to change the approach.

OK. There is no objection for now.

How about the attached patch? The patch uses the approach
only for CopyToStateData. If this looks good, I can do it
for CopyFromStateData too.

This patch splits CopyToStateData to

* CopyToStateData
* CopyToStateInternalData
* CopyToStateBuiltinData

structs.

This is based on the category described in
/messages/by-id/CAD21AoBa0Wm3C2H12jaqkvLidP2zEhsC+gf=3w7XiA4LQnvx0g@mail.gmail.com
:

1. fields used only the core (not by format callback)
2. fields used by both the core and format callbacks
3. built-in format specific fields (mostly for text and csv)

CopyToStateInternalData is for 1.
CopyToStateData is for 2.
CopyToStateBuiltinData is for 3.

This patch adds CopyToRoutine::CopyToGetStateSize() that
returns size of state struct for the routine. For example,
Built-in formats use sizeof(CopyToStateBuiltinData) for it.

BeginCopyTo() allocates sizeof(CopyToStateInternalData) +
CopyToGetStateSize() size continuous memory and uses the
front part as CopyToStateInternalData and the back part as
CopyToStateData/CopyToStateBuilinData.

Thank you for drafting the idea!

The patch refactors the CopyToStateData so that we can both hide
internal-use-only fields from extensions and extension can use its own
state data, while not adding extra indirection layers. TBH I'm really
not sure we must fully hide internal fields from extensions. Other
extendable components seem not to strictly hide internal information
from extensions. I'd suggest starting with only the latter point. That
is, we merge fields in CopyToStateInternalData to CopyToStateData.
What do you think?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#328Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#327)
1 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoBkA=g=PN17r_iieru+vLyLtGZ8WvohgANa2vzsMfMogQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 13 Oct 2025 14:40:31 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The patch refactors the CopyToStateData so that we can both hide
internal-use-only fields from extensions and extension can use its own
state data, while not adding extra indirection layers. TBH I'm really
not sure we must fully hide internal fields from extensions. Other
extendable components seem not to strictly hide internal information
from extensions. I'd suggest starting with only the latter point. That
is, we merge fields in CopyToStateInternalData to CopyToStateData.
What do you think?

OK. Let's follow the existing style. How about the attached
patch? It merges CopyToStateInternalData to CopyToStateData.

Thanks,
--
kou

Attachments:

0001-Split-CopyToStateData-to-CopyToState-Builtin-Data.patchtext/x-patch; charset=us-asciiDownload
From 325f56d4b4372f7b90b88c9c9068d253fcc9f39a Mon Sep 17 00:00:00 2001
From: Sutou Kouhei <kou@clear-code.com>
Date: Tue, 14 Oct 2025 11:08:23 +0900
Subject: [PATCH] Split CopyToStateData to CopyToState{,Builtin}Data

---
 src/backend/commands/copyto.c  | 170 ++++++++++++++++-----------------
 src/include/commands/copyapi.h |  66 +++++++++++++
 2 files changed, 148 insertions(+), 88 deletions(-)

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index e5781155cdf..176d98f866b 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -21,7 +21,6 @@
 #include "access/tableam.h"
 #include "commands/copyapi.h"
 #include "commands/progress.h"
-#include "executor/execdesc.h"
 #include "executor/executor.h"
 #include "executor/tuptable.h"
 #include "libpq/libpq.h"
@@ -37,19 +36,7 @@
 #include "utils/snapmgr.h"
 
 /*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
+ * This struct contains the state variables used by built-in format routines.
  *
  * Multi-byte encodings: all supported client-side encodings encode multi-byte
  * characters by having the first byte's high bit set. Subsequent bytes of the
@@ -62,40 +49,16 @@ typedef enum CopyDest
  * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
  * when we have to do it the hard way.
  */
-typedef struct CopyToStateData
+typedef struct CopyToStateBuiltinData
 {
-	/* format-specific routines */
-	const CopyToRoutine *routine;
+	CopyToStateData parent;
 
 	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
-
 	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
+}			CopyToStateBuiltinData;
+typedef struct CopyToStateBuiltinData *CopyToStateBuiltin;
 
 /* DestReceiver for COPY (query) TO */
 typedef struct
@@ -118,6 +81,7 @@ static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
 								bool use_quote);
 
 /* built-in format-specific routines */
+static size_t CopyToBuiltinGetStateSize(void);
 static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
 static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
 static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
@@ -150,6 +114,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -158,6 +123,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -166,6 +132,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToGetStateSize = CopyToBuiltinGetStateSize,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -185,18 +152,27 @@ CopyToGetRoutine(const CopyFormatOptions *opts)
 	return &CopyToRoutineText;
 }
 
+/* Implementation of the allocate callback for all built-in formats */
+static size_t
+CopyToBuiltinGetStateSize(void)
+{
+	return sizeof(CopyToStateBuiltinData);
+}
+
 /* Implementation of the start callback for text and CSV formats */
 static void
 CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
+
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
 	 */
-	if (cstate->need_transcoding)
+	if (cstate_builtin->need_transcoding)
 		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
 														  cstate->opts.null_print_len,
-														  cstate->file_encoding);
+														  cstate_builtin->file_encoding);
 
 	/* if a header has been requested send the line */
 	if (cstate->opts.header_line == COPY_HEADER_TRUE)
@@ -401,7 +377,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -448,7 +424,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -482,11 +458,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -507,7 +483,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -515,7 +491,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -631,10 +607,14 @@ BeginCopyTo(ParseState *pstate,
 			List *options)
 {
 	CopyToState cstate;
+	CopyToStateBuiltin cstate_builtin;
 	bool		pipe = (filename == NULL && data_dest_cb == NULL);
 	TupleDesc	tupDesc;
 	int			num_phys_attrs;
+	MemoryContext copycontext;
 	MemoryContext oldcontext;
+	CopyFormatOptions opts = {0};
+	const CopyToRoutine *routine;
 	const int	progress_cols[] = {
 		PROGRESS_COPY_COMMAND,
 		PROGRESS_COPY_TYPE
@@ -686,24 +666,33 @@ BeginCopyTo(ParseState *pstate,
 	}
 
 
-	/* Allocate workspace and zero all fields */
-	cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData));
-
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
 	 * avoids memory leaks during repeated use of COPY in a query.
 	 */
-	cstate->copycontext = AllocSetContextCreate(CurrentMemoryContext,
-												"COPY",
-												ALLOCSET_DEFAULT_SIZES);
+	copycontext = AllocSetContextCreate(CurrentMemoryContext,
+										"COPY",
+										ALLOCSET_DEFAULT_SIZES);
 
-	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
+	oldcontext = MemoryContextSwitchTo(copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyOptions(pstate, &opts, false /* is_from */ , options);
 
-	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(&cstate->opts);
+	/* Get format routine */
+	routine = CopyToGetRoutine(&opts);
+
+	/* Allocate workspace and set known values */
+	MemoryContextSwitchTo(oldcontext);
+	cstate = (CopyToState) palloc0(routine->CopyToGetStateSize());
+	MemoryContextSwitchTo(copycontext);
+	if (routine == &CopyToRoutineText || routine == &CopyToRoutineCSV || routine == &CopyToRoutineBinary)
+		cstate_builtin = (CopyToStateBuiltin) cstate;
+	else
+		cstate_builtin = NULL;
+	cstate->copycontext = copycontext;
+	cstate->opts = opts;
+	cstate->routine = routine;
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -883,31 +872,34 @@ BeginCopyTo(ParseState *pstate,
 		}
 	}
 
-	/* Use client encoding when ENCODING option is not specified. */
-	if (cstate->opts.file_encoding < 0)
-		cstate->file_encoding = pg_get_client_encoding();
-	else
-		cstate->file_encoding = cstate->opts.file_encoding;
+	if (cstate_builtin)
+	{
+		/* Use client encoding when ENCODING option is not specified. */
+		if (cstate->opts.file_encoding < 0)
+			cstate_builtin->file_encoding = pg_get_client_encoding();
+		else
+			cstate_builtin->file_encoding = cstate->opts.file_encoding;
 
-	/*
-	 * Set up encoding conversion info if the file and server encodings differ
-	 * (see also pg_server_to_any).
-	 */
-	if (cstate->file_encoding == GetDatabaseEncoding() ||
-		cstate->file_encoding == PG_SQL_ASCII)
-		cstate->need_transcoding = false;
-	else
-		cstate->need_transcoding = true;
+		/*
+		 * Set up encoding conversion info if the file and server encodings
+		 * differ (see also pg_server_to_any).
+		 */
+		if (cstate_builtin->file_encoding == GetDatabaseEncoding() ||
+			cstate_builtin->file_encoding == PG_SQL_ASCII)
+			cstate_builtin->need_transcoding = false;
+		else
+			cstate_builtin->need_transcoding = true;
 
-	/* See Multibyte encoding comment above */
-	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
+		/* See Multibyte encoding comment above */
+		cstate_builtin->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate_builtin->file_encoding);
+	}
 
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
@@ -1146,13 +1138,14 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 static void
 CopyAttributeOutText(CopyToState cstate, const char *string)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
 	char		delimc = cstate->opts.delim[0];
 
-	if (cstate->need_transcoding)
-		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
+	if (cstate_builtin->need_transcoding)
+		ptr = pg_server_to_any(string, strlen(string), cstate_builtin->file_encoding);
 	else
 		ptr = string;
 
@@ -1170,7 +1163,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 	 * it's worth making two copies of it to get the IS_HIGHBIT_SET() test out
 	 * of the normal safe-encoding path.
 	 */
-	if (cstate->encoding_embeds_ascii)
+	if (cstate_builtin->encoding_embeds_ascii)
 	{
 		start = ptr;
 		while ((c = *ptr) != '\0')
@@ -1225,7 +1218,7 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				start = ptr++;	/* we include char in next run */
 			}
 			else if (IS_HIGHBIT_SET(c))
-				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
+				ptr += pg_encoding_mblen(cstate_builtin->file_encoding, ptr);
 			else
 				ptr++;
 		}
@@ -1300,6 +1293,7 @@ static void
 CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					bool use_quote)
 {
+	CopyToStateBuiltin cstate_builtin = (CopyToStateBuiltin) cstate;
 	const char *ptr;
 	const char *start;
 	char		c;
@@ -1312,8 +1306,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 	if (!use_quote && strcmp(string, cstate->opts.null_print) == 0)
 		use_quote = true;
 
-	if (cstate->need_transcoding)
-		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
+	if (cstate_builtin->need_transcoding)
+		ptr = pg_server_to_any(string, strlen(string), cstate_builtin->file_encoding);
 	else
 		ptr = string;
 
@@ -1342,8 +1336,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 					use_quote = true;
 					break;
 				}
-				if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
-					tptr += pg_encoding_mblen(cstate->file_encoding, tptr);
+				if (IS_HIGHBIT_SET(c) && cstate_builtin->encoding_embeds_ascii)
+					tptr += pg_encoding_mblen(cstate_builtin->file_encoding, tptr);
 				else
 					tptr++;
 			}
@@ -1366,8 +1360,8 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 				CopySendChar(cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
-			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
-				ptr += pg_encoding_mblen(cstate->file_encoding, ptr);
+			if (IS_HIGHBIT_SET(c) && cstate_builtin->encoding_embeds_ascii)
+				ptr += pg_encoding_mblen(cstate_builtin->file_encoding, ptr);
 			else
 				ptr++;
 		}
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..aece73f4ca2 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -15,6 +15,7 @@
 #define COPYAPI_H
 
 #include "commands/copy.h"
+#include "executor/execdesc.h"
 
 /*
  * API structure for a COPY TO format implementation. Note this must be
@@ -22,6 +23,25 @@
  */
 typedef struct CopyToRoutine
 {
+	/* ---
+	 * Return state size for this routine.
+	 *
+	 * If this routine uses CopyToStateData as-is, `return
+	 * sizeof(CopyToStateData)` can be used.
+	 *
+	 * If this routine needs additional data than CopyToStateData, a new
+	 * struct based on CopyToStateData can be used something like:
+	 *
+	 * typedef struct MyCopyToStateDate {
+	 *     struct CopyToStateData parent;
+	 *     int define_additional_members_here;
+	 * } MyCopyToStateData;
+	 *
+	 * In the case, this callback returns `sizeof(MyCopyToStateData)`.
+	 * ---
+	 */
+	size_t		(*CopyToGetStateSize) (void);
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
@@ -54,6 +74,52 @@ typedef struct CopyToRoutine
 	void		(*CopyToEnd) (CopyToState cstate);
 } CopyToRoutine;
 
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to frontend */
+	COPY_DEST_CALLBACK,			/* to callback function */
+} CopyDest;
+
+/*
+ * This struct contains the state variables used by PostgreSQL, built-in
+ * format routines and custom format routines.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
 /*
  * API structure for a COPY FROM format implementation. Note this must be
  * allocated in a server-lifetime manner, typically as a static const struct.
-- 
2.51.0

#329Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#328)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Oct 13, 2025 at 7:15 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBkA=g=PN17r_iieru+vLyLtGZ8WvohgANa2vzsMfMogQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 13 Oct 2025 14:40:31 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The patch refactors the CopyToStateData so that we can both hide
internal-use-only fields from extensions and extension can use its own
state data, while not adding extra indirection layers. TBH I'm really
not sure we must fully hide internal fields from extensions. Other
extendable components seem not to strictly hide internal information
from extensions. I'd suggest starting with only the latter point. That
is, we merge fields in CopyToStateInternalData to CopyToStateData.
What do you think?

OK. Let's follow the existing style. How about the attached
patch? It merges CopyToStateInternalData to CopyToStateData.

The basic idea of this patch makes sense to me.

Andres, I believe that the current idea deals with your concerns about
performance overheads. Particularly, we separate format-specific
fields (c.f. CopyToStateBuiltinData struct in the patch) from the
commonly-used fields (c.f., CopyToStateData struct), but the whole
fields are stored in the contiguous memory. While the patch needs to
be polished much, could you review if the basic idea of this patch
addresses your concern?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

#330Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#329)
6 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Wed, Oct 29, 2025 at 1:41 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:

On Mon, Oct 13, 2025 at 7:15 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <CAD21AoBkA=g=PN17r_iieru+vLyLtGZ8WvohgANa2vzsMfMogQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 13 Oct 2025 14:40:31 -0700,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

The patch refactors the CopyToStateData so that we can both hide
internal-use-only fields from extensions and extension can use its own
state data, while not adding extra indirection layers. TBH I'm really
not sure we must fully hide internal fields from extensions. Other
extendable components seem not to strictly hide internal information
from extensions. I'd suggest starting with only the latter point. That
is, we merge fields in CopyToStateInternalData to CopyToStateData.
What do you think?

OK. Let's follow the existing style. How about the attached
patch? It merges CopyToStateInternalData to CopyToStateData.

The basic idea of this patch makes sense to me.

This thread has involved extensive discussion, and the patch needs to
be rebased. I'd like to summarize the current status of this patch and
our discussions. I've attached updated patches that implement the
whole ideas of this feature to help provide a clearer overall picture.

In commits 2e4127b6d and 7717f6300, we refactored COPY TO/FROM code to
use a set of callbacks for format-specific operations like data
parsing. These callbacks are currently not exposed and are only used
by built-in formats. The next step is to allow extensions to register
their own format implementations, which these attached patches
accomplish. The registration API can be called in _PG_init() as
follows to enable users to specify a custom format name ('jsonlines'
in this example) in the FORMAT option:

RegisterCopyCustomFormat("jsonlines",
&JsonLinesCopyFromRoutine,
&JsonLinesCopyToRoutine);

However, before introducing the registration API, we need to resolve
an issue with how we currently use a monolithic struct
(Copy{From,To}StateData) to store COPY TO/FROM state data. This struct
currently contains both format-agnostic fields (e.g., target relation
and source file) and format-specific fields (e.g., input buffers and
EOL type). Patches 0001 and 0002 reorganize these fields to separate
them. Specifically, format-specific fields are moved to a new struct
while Copy{From,To}StateData retains format-agnostic fields, as shown
here (e.g., COPY TO case):

typedef struct CopyToStateData
{
/* format-specific routines */
const struct CopyToRoutine *routine;

/* low-level state data */
CopyDest copy_dest; /* type of copy source/destination */
FILE *copy_file; /* used if copy_dest == COPY_DEST_FILE */
StringInfo fe_msgbuf; /* used for all dests during COPY TO */

(snip)

/*
* Working state
*/
MemoryContext copycontext; /* per-copy execution context */

FmgrInfo *out_functions; /* lookup info for output functions */
MemoryContext rowcontext; /* per-row evaluation context */
uint64 bytes_processed; /* number of bytes processed so far */
} CopyToStateData;

typedef struct CopyToStateTextLike
{
CopyToStateData base; /* embedded */

int file_encoding;
bool need_transcoding;
bool encoding_embeds_ascii;
} CopyToStateTextLike;

Extensions must specify their required state struct size (like
CopyToStateTextLike for built-in formats) using new callbacks
Copy{From,To}EstimateStateSpace, allowing the core to allocate the
appropriate amount of memory. This approach offers two advantages:

- Format processing implementations only use the memory they need
- No additional pointer traversal compared to using an opaque pointer
for format-specific data

Patches 0003 through 0006 implement the following:

0003: Introduces the RegisterCustomCopyFormat() API
0004 and 0005: Enable custom format implementations to register their
own COPY command options
0006: Adds regression tests

With these patches, here's what we can do using the 'jsonlines'
format extension:

-- COPY TO
CREATE TABLE jl (id int, a text, b jsonb);
INSERT INTO jl VALUES (1, 'hello', '{"test" : [1, true, {"num" :
42}]}'::jsonb), (2, 'hello world', 'true'), (999, null, '{"a" : 1}');
TABLE jl;
id | a | b
-----+-------------+----------------------------------
1 | hello | {"test": [1, true, {"num": 42}]}
2 | hello world | true
999 | | {"a": 1}
(3 rows)

COPY jl TO '/tmp/test.jsonl' WITH (format 'jsonlines');
\! cat /tmp/test.jsonl
{"id":1,"a":"hello","b":{"test": [1, true, {"num": 42}]}}
{"id":2,"a":"hello world","b":true}
{"id":999,"a":null,"b":{"a": 1}}

-- COPY FROM
CREATE TABLE jl_load (id int, a text, b jsonb);
COPY jl_load FROM '/tmp/test.jsonl' WITH (format 'jsonlines');

-- COPY TO/FROM with custom options
COPY jl TO '/tmp/jl.jsonl.gz' WITH (format 'jsonlines', compression
'gzip', compression_detail 'level=2');
COPY jl FROM '/tmp/jl.jsonl.gz' WITH (format 'jsonlines');

To demonstrate the functionality of both current and new APIs,
Suto-san and I have created several experimental custom COPY format
extensions:

Apache Arrow (developed by Sutou-san): https://github.com/kou/pg-copy-arrow

JSON Lines (developed by me):
https://github.com/MasahikoSawada/pg_custom_copy_formats/blob/master/jsonlines.c

These implementations serve as good examples of how extensions can use
these APIs to define custom COPY formats.

After offline discussions with Sutou-san, we believe the current APIs
work well, particularly for text-based formats, though we still need
to verify there are no performance regressions.

One potential improvement would be adding support for random file
access in COPY FROM operations. For example, with parquet files, it
would be much more efficient to read the footer section first since it
contains metadata, allowing selective reading of necessary file
sections. The current sequential read API (CopyFromGetData()) requires
reading all data to access the metadata.

For future consideration, we could look into supporting file
reading/writing from external sources like S3. While this is outside
the scope of this patch, we discussed that allowing the core to
delegate I/O operations to custom format implementations might be a
good starting point. We can discuss this in a separate thread.

I welcome your feedback on these proposed changes and APIs to help
move this patch forward.

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com

Attachments:

0003-Support-custom-COPY-format-for-COPY-FROM-and-COPY-TO.patchapplication/octet-stream; name=0003-Support-custom-COPY-format-for-COPY-FROM-and-COPY-TO.patchDownload
From c1ab564adbe8db74c97c1d0e4ee6ec552457474c Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 10 Nov 2025 11:26:10 -0800
Subject: [PATCH 3/6] Support custom COPY format for COPY FROM and COPY TO.

This commit enables extensions to register their own COPY format
implementation for COPY TO and COPY FROM. If extensions register the
custom format during _PG_init_ time, the format would be available for
all backends whereas the backend can LOAD the custom format.

Author:
Reviewed-by:
Discussion: https://postgr.es/m/
Backpatch-through:
---
 src/backend/commands/Makefile             |   1 +
 src/backend/commands/copy_custom_format.c | 142 ++++++++++++++++++++++
 src/backend/commands/copyfrom.c           |   7 ++
 src/backend/commands/copyfromparse.c      |   9 ++
 src/backend/commands/copyto.c             |  17 +++
 src/backend/commands/meson.build          |   1 +
 src/include/commands/copy.h               |   6 +
 src/include/commands/copyapi.h            |   9 ++
 8 files changed, 192 insertions(+)
 create mode 100644 src/backend/commands/copy_custom_format.c

diff --git a/src/backend/commands/Makefile b/src/backend/commands/Makefile
index f99acfd2b4b..74668d4ac9d 100644
--- a/src/backend/commands/Makefile
+++ b/src/backend/commands/Makefile
@@ -27,6 +27,7 @@ OBJS = \
 	copyfrom.o \
 	copyfromparse.o \
 	copyto.o \
+	copy_custom_format.o \
 	createas.o \
 	dbcommands.o \
 	define.o \
diff --git a/src/backend/commands/copy_custom_format.c b/src/backend/commands/copy_custom_format.c
new file mode 100644
index 00000000000..8bef6e779ac
--- /dev/null
+++ b/src/backend/commands/copy_custom_format.c
@@ -0,0 +1,142 @@
+/*-------------------------------------------------------------------------
+ *
+ * copy_custom_format.c
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ *	  src/backend/commands/copy_custom_format.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include "commands/copy.h"
+#include "commands/copyapi.h"
+#include "utils/memutils.h"
+
+
+typedef struct CopyCustomFormat
+{
+	const char *fmt_name;
+	const CopyFromRoutine *from_routine;
+	const CopyToRoutine *to_routine;
+}			CopyCustomFormat;
+
+static CopyCustomFormat * CopyCustomFormatArray = NULL;
+static int	CopyCustomFormatAssigned = 0;
+static int	CopyCustomFormatAllocated = 0;
+
+static char *BuiltinFormatNames[] = {
+	"text", "csv", "binary"
+};
+
+void
+RegisterCopyCustomFormat(const char *fmt_name, const CopyFromRoutine *from_routine,
+						 const CopyToRoutine *to_routine)
+{
+	CopyCustomFormat *entry;
+
+	/* Check the duplication with built-in formats */
+	for (int i = 0; i < lengthof(BuiltinFormatNames); i++)
+	{
+		if (strcmp(BuiltinFormatNames[i], fmt_name) == 0)
+			ereport(ERROR,
+					errmsg("failed to register custom COPY format \"%s\"", fmt_name),
+					errdetail("COPY format \"%s\" is a builtin format",
+							  BuiltinFormatNames[i]));
+
+	}
+
+	/* Check the duplication with the registered custom formats */
+	if (FindCustomCopyFormat(fmt_name))
+		ereport(ERROR,
+				errmsg("failed to register custom COPY format \"%s\"", fmt_name),
+				errdetail("Custom COPY format \"%s\" already registered",
+						  fmt_name));
+
+	/* If there is no array yet, create one */
+	if (CopyCustomFormatArray == NULL)
+	{
+		CopyCustomFormatAllocated = 16;
+		CopyCustomFormatArray = (CopyCustomFormat *)
+			MemoryContextAlloc(TopMemoryContext,
+							   CopyCustomFormatAllocated * sizeof(CopyCustomFormat));
+	}
+
+	/* If there's an array but it's current full, expand it */
+	if (CopyCustomFormatAssigned >= CopyCustomFormatAllocated)
+	{
+		int			i = pg_nextpower2_32(CopyCustomFormatAllocated + 1);
+
+		CopyCustomFormatArray = (CopyCustomFormat *)
+			repalloc(CopyCustomFormatArray, i * sizeof(CopyCustomFormat));
+		CopyCustomFormatAllocated = i;
+	}
+
+	Assert(to_routine != NULL || from_routine != NULL);
+	Assert((to_routine == NULL) ||
+		   (to_routine->CopyToEstimateStateSpace != NULL &&
+			to_routine->CopyToOutFunc != NULL &&
+			to_routine->CopyToStart != NULL &&
+			to_routine->CopyToOneRow != NULL &&
+			to_routine->CopyToEnd != NULL));
+	Assert((from_routine == NULL) ||
+		   (from_routine->CopyFromEstimateStateSpace != NULL &&
+			from_routine->CopyFromInFunc != NULL &&
+			from_routine->CopyFromStart != NULL &&
+			from_routine->CopyFromOneRow != NULL &&
+			from_routine->CopyFromEnd != NULL));
+
+	entry = &CopyCustomFormatArray[CopyCustomFormatAssigned++];
+	entry->fmt_name = fmt_name;
+	entry->from_routine = from_routine;
+	entry->to_routine = to_routine;
+}
+
+/*
+ * Returns true if the given custom format name is registered.
+ */
+bool
+FindCustomCopyFormat(const char *fmt_name)
+{
+	for (int i = 0; i < CopyCustomFormatAssigned; i++)
+	{
+		if (strcmp(CopyCustomFormatArray[i].fmt_name, fmt_name) == 0)
+			return true;
+	}
+
+	return false;
+}
+
+bool
+GetCustomCopyToRoutine(const char *fmt_name, const CopyToRoutine **to_routine)
+{
+	for (int i = 0; i < CopyCustomFormatAssigned; i++)
+	{
+		if (strcmp(CopyCustomFormatArray[i].fmt_name, fmt_name) == 0)
+		{
+			*to_routine = CopyCustomFormatArray[i].to_routine;
+			return true;
+		}
+	}
+
+	return false;
+}
+
+bool
+GetCustomCopyFromRoutine(const char *fmt_name, const CopyFromRoutine **from_routine)
+{
+	for (int i = 0; i < CopyCustomFormatAssigned; i++)
+	{
+		if (strcmp(CopyCustomFormatArray[i].fmt_name, fmt_name) == 0)
+		{
+			*from_routine = CopyCustomFormatArray[i].from_routine;
+			return true;
+		}
+	}
+
+	return false;
+}
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 0c51e5ba5e1..592be4fcb5d 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1619,6 +1619,13 @@ create_copyfrom_state(ParseState *pstate, List *options)
 				routine = &CopyFromRoutineCSV;
 			else if (strcmp(fmt, "binary") == 0)
 				routine = &CopyFromRoutineBinary;
+			else if (GetCustomCopyFromRoutine(fmt, &routine))
+			{
+				if (routine == NULL)
+					ereport(ERROR,
+							errmsg("COPY format \"%s\" does not support COPY FROM", fmt),
+							parser_errposition(pstate, defel->location));
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index 669dbfb8459..30d8047f21a 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -228,6 +228,15 @@ ReceiveCopyBinaryHeader(CopyFromState ccstate)
 	}
 }
 
+/*
+ * Exporting CopyGetData() function for custom COPY FROM format implementations.
+ */
+int
+CopyFromGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
+{
+	return CopyGetData(cstate, databuf, minread, maxread);
+}
+
 /*
  * CopyGetData reads data from the source (file or frontend)
  *
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index 6a0a66507ba..b1b3ae141eb 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -435,6 +435,16 @@ CopySendChar(CopyToState cstate, char c)
 	appendStringInfoCharMacro(cstate->fe_msgbuf, c);
 }
 
+/*
+ * Exporting CopySendEndOfRow() function for custom COPY TO format
+ * implementations.
+ */
+void
+CopyToFlushData(CopyToState cstate)
+{
+	CopySendEndOfRow(cstate);
+}
+
 static void
 CopySendEndOfRow(CopyToState cstate)
 {
@@ -631,6 +641,13 @@ create_copyto_state(ParseState *pstate, List *options)
 				routine = &CopyToRoutineCSV;
 			else if (strcmp(fmt, "binary") == 0)
 				routine = &CopyToRoutineBinary;
+			else if (GetCustomCopyToRoutine(fmt, &routine))
+			{
+				if (routine == NULL)
+					ereport(ERROR,
+							errmsg("COPY format \"%s\" does not support COPY TO", fmt),
+							parser_errposition(pstate, defel->location));
+			}
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
diff --git a/src/backend/commands/meson.build b/src/backend/commands/meson.build
index 9f640ad4810..827f809eb53 100644
--- a/src/backend/commands/meson.build
+++ b/src/backend/commands/meson.build
@@ -15,6 +15,7 @@ backend_sources += files(
   'copyfrom.c',
   'copyfromparse.c',
   'copyto.c',
+  'copy_custom_format.c',
   'createas.c',
   'dbcommands.c',
   'define.c',
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 30a1d2bff6e..82f07b05823 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -120,6 +120,12 @@ extern uint64 CopyFrom(CopyFromState cstate);
 
 extern DestReceiver *CreateCopyDestReceiver(void);
 
+extern void ProcessCopyBuiltinOptions(List *options, CopyFormatOptions *opts_out,
+									  bool is_from, List **other_options, ParseState *pstate);
+
+/* defined in copy_custom_format.c */
+extern bool FindCustomCopyFormat(const char *fmt_name);
+
 /*
  * internal prototypes
  */
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index c3d2199a0b6..2090a4e1c61 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -111,4 +111,13 @@ typedef struct CopyFromRoutine
 	 */
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
+
+extern int CopyFromGetData(CopyFromState cstate, void *databuf, int minread, int maxread);
+extern void CopyToFlushData(CopyToState cstate);
+
+extern void RegisterCopyCustomFormat(const char *fmt_name, const CopyFromRoutine *from_routine,
+									 const CopyToRoutine *to_routine);
+extern bool GetCustomCopyToRoutine(const char *fmt_name, const CopyToRoutine **to_routine);
+extern bool GetCustomCopyFromRoutine(const char *fmt_name, const CopyFromRoutine **from_routine);
+
 #endif							/* COPYAPI_H */
-- 
2.47.3

0006-Add-regression-test-module-for-custom-COPY-format.patchapplication/octet-stream; name=0006-Add-regression-test-module-for-custom-COPY-format.patchDownload
From 2718f015e44354dca5ba99927d6ef0aa2dbb3b1f Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 10 Nov 2025 22:18:28 -0800
Subject: [PATCH 6/6] Add regression test module for custom COPY format.

---
 src/test/modules/Makefile                     |   1 +
 src/test/modules/meson.build                  |   1 +
 .../test_copy_custom_format/.gitignore        |   3 +
 .../modules/test_copy_custom_format/Makefile  |  21 ++
 .../expected/test_copy_custom_format.out      |  97 ++++++++
 .../test_copy_custom_format/meson.build       |  35 +++
 .../sql/test_copy_custom_format.sql           |  34 +++
 .../test_copy_custom_format.c                 | 217 ++++++++++++++++++
 .../test_copy_custom_format.conf              |   1 +
 9 files changed, 410 insertions(+)
 create mode 100644 src/test/modules/test_copy_custom_format/.gitignore
 create mode 100644 src/test/modules/test_copy_custom_format/Makefile
 create mode 100644 src/test/modules/test_copy_custom_format/expected/test_copy_custom_format.out
 create mode 100644 src/test/modules/test_copy_custom_format/meson.build
 create mode 100644 src/test/modules/test_copy_custom_format/sql/test_copy_custom_format.sql
 create mode 100644 src/test/modules/test_copy_custom_format/test_copy_custom_format.c
 create mode 100644 src/test/modules/test_copy_custom_format/test_copy_custom_format.conf

diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 902a7954101..710ccb74990 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -19,6 +19,7 @@ SUBDIRS = \
 		  test_bitmapset \
 		  test_bloomfilter \
 		  test_copy_callbacks \
+		  test_copy_custom_format \
 		  test_custom_rmgrs \
 		  test_ddl_deparse \
 		  test_dsa \
diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build
index 14fc761c4cf..5a2e4e03b80 100644
--- a/src/test/modules/meson.build
+++ b/src/test/modules/meson.build
@@ -18,6 +18,7 @@ subdir('test_binaryheap')
 subdir('test_bitmapset')
 subdir('test_bloomfilter')
 subdir('test_copy_callbacks')
+subdir('test_copy_custom_format')
 subdir('test_custom_rmgrs')
 subdir('test_ddl_deparse')
 subdir('test_dsa')
diff --git a/src/test/modules/test_copy_custom_format/.gitignore b/src/test/modules/test_copy_custom_format/.gitignore
new file mode 100644
index 00000000000..8d3af519eb1
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/.gitignore
@@ -0,0 +1,3 @@
+/log/
+/results/
+/tmp_check/
\ No newline at end of file
diff --git a/src/test/modules/test_copy_custom_format/Makefile b/src/test/modules/test_copy_custom_format/Makefile
new file mode 100644
index 00000000000..8ad1cebaba6
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/Makefile
@@ -0,0 +1,21 @@
+# src/test/modules/test_copy_custom_format/Makefile
+
+MODULE_big = test_copy_custom_format
+OBJS = \
+	$(WIN32RES) \
+	test_copy_custom_format.o
+PGFILEDESC = "test_copy_custom_format - test custom COPY FORMAT"
+
+REGRESS = test_copy_custom_format
+REGRESS_OPTS = --temp-config $(top_srcdir)/src/test/modules/test_copy_custom_format/test_copy_custom_format.conf
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = src/test/modules/test_copy_custom_format
+top_builddir = ../../../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/src/test/modules/test_copy_custom_format/expected/test_copy_custom_format.out b/src/test/modules/test_copy_custom_format/expected/test_copy_custom_format.out
new file mode 100644
index 00000000000..a91ac293447
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/expected/test_copy_custom_format.out
@@ -0,0 +1,97 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+COPY copy_data FROM stdin WITH (FORMAT 'test_format');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int 0 common_bool 0 from_str "(null)"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_format');
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  common_int 0 common_bool 0 to_str "(null)"
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+-- Error
+COPY copy_data FROM stdin WITH (FORMAT 'error');
+ERROR:  COPY format "error" not recognized
+LINE 1: COPY copy_data FROM stdin WITH (FORMAT 'error');
+                                        ^
+COPY copy_data FROM stdin WITH (FORMAT 'text', FORMAT 'error');
+ERROR:  conflicting or redundant options
+LINE 1: COPY copy_data FROM stdin WITH (FORMAT 'text', FORMAT 'error...
+                                                       ^
+-- Option handling, COPY FROM
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 10);
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int 10 common_bool 0 from_str "(null)"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int -10);
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int -10 common_bool 0 from_str "(null)"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 'a'); -- error
+ERROR:  common_int requires an integer value
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'true');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int 0 common_bool 1 from_str "(null)"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'false');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int 0 common_bool 0 from_str "(null)"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'hello'); -- error
+ERROR:  common_bool requires a Boolean value
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 100, common_bool false, from_str 'from option');
+NOTICE:  CopyFromInFunc: attribute: smallint
+NOTICE:  CopyFromInFunc: attribute: integer
+NOTICE:  CopyFromInFunc: attribute: bigint
+NOTICE:  CopyFromStart: the number of attributes: 3
+NOTICE:  common_int 100 common_bool 0 from_str "from option"
+NOTICE:  CopyFromOneRow
+NOTICE:  CopyFromEnd
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', invalid 'option'); -- error
+ERROR:  COPY format "invalid" not recognized
+LINE 1: ... copy_data FROM stdin WITH (FORMAT 'test_format', invalid 'o...
+                                                             ^
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', format 'text'); -- error
+ERROR:  conflicting or redundant options
+LINE 1: ... copy_data FROM stdin WITH (FORMAT 'test_format', format 'te...
+                                                             ^
+-- Option handling, COPY FROM
+COPY copy_data TO stdout WITH (FORMAT 'test_format', common_int -10, common_bool false, to_str 'to option');
+NOTICE:  CopyToOutFunc: attribute: smallint
+NOTICE:  CopyToOutFunc: attribute: integer
+NOTICE:  CopyToOutFunc: attribute: bigint
+NOTICE:  CopyToStart: the number of attributes: 3
+NOTICE:  common_int -10 common_bool 0 to_str "to option"
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToOneRow: the number of valid values: 3
+NOTICE:  CopyToEnd
+COPY copy_data TO stdout WITH (FORMAT 'test_format', from_str 'to option'); -- error
+ERROR:  COPY format "from_str" not recognized
+LINE 1: ...Y copy_data TO stdout WITH (FORMAT 'test_format', from_str '...
+                                                             ^
diff --git a/src/test/modules/test_copy_custom_format/meson.build b/src/test/modules/test_copy_custom_format/meson.build
new file mode 100644
index 00000000000..6cc6c8b60fd
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/meson.build
@@ -0,0 +1,35 @@
+# Copyright (c) 2025, PostgreSQL Global Development Group
+
+test_copy_custom_format_sources = files(
+'test_copy_custom_format.c',
+)
+
+if host_system == 'windows'
+  test_copy_custom_format_sources += rc_lib_gen.process(win32ver_rc, extra_args: [
+    '--NAME', 'test_copy_custom_format',
+    '--FILEDESC', 'test_copy_custom_format - test custom COPY FORMAT',])
+endif
+
+test_copy_custom_format = shared_module('test_copy_custom_format',
+  test_copy_custom_format_sources,
+  kwargs: pg_test_mod_args,
+)
+test_install_libs += test_copy_custom_format
+
+tests += {
+  'name': 'test_copy_custom_format',
+  'sd': meson.current_source_dir(),
+  'bd': meson.current_build_dir(),
+  'regress': {
+    'sql': [
+      'test_copy_custom_format',
+    ],
+    'regress_args': [
+      '--temp-config', files('test_copy_custom_format.conf'),
+    ],
+    # Disabled because these tests require
+    # "shared_preload_libraries=test_custom_copy_format", which typical
+    # runningcheck users do not have (e.g. buildfarm clients).
+    'runningcheck': false,
+  },
+}
diff --git a/src/test/modules/test_copy_custom_format/sql/test_copy_custom_format.sql b/src/test/modules/test_copy_custom_format/sql/test_copy_custom_format.sql
new file mode 100644
index 00000000000..b6564f0355b
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/sql/test_copy_custom_format.sql
@@ -0,0 +1,34 @@
+CREATE TABLE copy_data (a smallint, b integer, c bigint);
+INSERT INTO copy_data VALUES (1, 2, 3), (12, 34, 56), (123, 456, 789);
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_format');
+\.
+COPY copy_data TO stdout WITH (FORMAT 'test_format');
+
+-- Error
+COPY copy_data FROM stdin WITH (FORMAT 'error');
+COPY copy_data FROM stdin WITH (FORMAT 'text', FORMAT 'error');
+
+
+-- Option handling, COPY FROM
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 10);
+\.
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int -10);
+\.
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 'a'); -- error
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'true');
+\.
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'false');
+\.
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_bool 'hello'); -- error
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', common_int 100, common_bool false, from_str 'from option');
+\.
+
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', invalid 'option'); -- error
+COPY copy_data FROM stdin WITH (FORMAT 'test_format', format 'text'); -- error
+
+-- Option handling, COPY FROM
+COPY copy_data TO stdout WITH (FORMAT 'test_format', common_int -10, common_bool false, to_str 'to option');
+COPY copy_data TO stdout WITH (FORMAT 'test_format', from_str 'to option'); -- error
diff --git a/src/test/modules/test_copy_custom_format/test_copy_custom_format.c b/src/test/modules/test_copy_custom_format/test_copy_custom_format.c
new file mode 100644
index 00000000000..a63390e875b
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/test_copy_custom_format.c
@@ -0,0 +1,217 @@
+/*--------------------------------------------------------------------------
+ *
+ * test_copy_custom_format.c
+ *		Code for testing custom COPY format.
+ *
+ * Portions Copyright (c) 2025, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ *		src/test/modules/test_copy_custom_format/test_copy_custom_format.c
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "commands/copystate.h"
+#include "commands/copyapi.h"
+#include "commands/defrem.h"
+#include "utils/builtins.h"
+
+PG_MODULE_MAGIC;
+
+typedef struct TestCopyCommonOption
+{
+	int			common_int;
+	bool		common_bool;
+}			TestCopyCommonOption;
+
+typedef struct TestCopyFromState
+{
+	CopyFromStateData base;
+
+	TestCopyCommonOption common_opts;
+	char	   *from_str_option;
+}			TestCopyFromState;
+
+typedef struct TestCopyToState
+{
+	CopyToStateData base;
+
+	TestCopyCommonOption common_opts;
+	char	   *to_str_option;
+}			TestCopyToState;
+
+static Size
+TestCopyToEsimateSpace(void)
+{
+	return sizeof(TestCopyToState);
+}
+
+static Size
+TestCopyFromEsimateSpace(void)
+{
+	return sizeof(TestCopyFromState);
+}
+
+static bool
+TestCopyProcessCommonOption(TestCopyCommonOption * opt, DefElem *option)
+{
+	if (strcmp(option->defname, "common_int") == 0)
+	{
+		int			val = defGetInt32(option);
+
+		opt->common_int = val;
+
+		return true;
+	}
+	else if (strcmp(option->defname, "common_bool") == 0)
+	{
+		bool		val = defGetBoolean(option);
+
+		opt->common_bool = val;
+
+		return true;
+	}
+
+	return false;
+}
+
+static bool
+TestCopyFromProcessOneOption(CopyFromState ccstate, DefElem *option)
+{
+	TestCopyFromState *cstate = (TestCopyFromState *) ccstate;
+
+	if (TestCopyProcessCommonOption(&cstate->common_opts, option))
+	{
+		return true;
+	}
+	else if (strcmp(option->defname, "from_str") == 0)
+	{
+		char	   *val = defGetString(option);
+
+		cstate->from_str_option = val;
+		return true;
+	}
+
+	return false;
+}
+
+static bool
+TestCopyToProcessOneOption(CopyToState ccstate, DefElem *option)
+{
+	TestCopyToState *cstate = (TestCopyToState *) ccstate;
+
+	if (TestCopyProcessCommonOption(&cstate->common_opts, option))
+	{
+		return true;
+	}
+	else if (strcmp(option->defname, "to_str") == 0)
+	{
+		char	   *val = defGetString(option);
+
+		cstate->to_str_option = val;
+		return true;
+	}
+
+	return false;
+}
+
+static void
+TestCopyFromInFunc(CopyFromState cstate, Oid atttypid,
+				   FmgrInfo *finfo, Oid *typioparam)
+{
+	ereport(NOTICE,
+			errmsg("CopyFromInFunc: attribute: %s", format_type_be(atttypid)));
+}
+
+static void
+TestCopyFromStart(CopyFromState ccstate, TupleDesc tupDesc)
+{
+	TestCopyFromState *cstate = (TestCopyFromState *) ccstate;
+
+	ereport(NOTICE,
+			errmsg("CopyFromStart: the number of attributes: %d", tupDesc->natts));
+	ereport(NOTICE,
+			errmsg("common_int %d common_bool %d from_str \"%s\"",
+				   cstate->common_opts.common_int,
+				   cstate->common_opts.common_bool,
+				   cstate->from_str_option));
+}
+
+static bool
+TestCopyFromOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values, bool *nulls,
+				   CopyFromRowInfo * rowinfo)
+{
+	ereport(NOTICE,
+			errmsg("CopyFromOneRow"));
+
+	return false;
+}
+
+static void
+TestCopyFromEnd(CopyFromState cstate)
+{
+	ereport(NOTICE,
+			errmsg("CopyFromEnd"));
+}
+
+static void
+TestCopyToOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo)
+{
+	ereport(NOTICE,
+			errmsg("CopyToOutFunc: attribute: %s", format_type_be(atttypid)));
+}
+
+static void
+TestCopyToStart(CopyToState ccstate, TupleDesc tupDesc)
+{
+	TestCopyToState *cstate = (TestCopyToState *) ccstate;
+
+	ereport(NOTICE,
+			errmsg("CopyToStart: the number of attributes: %d", tupDesc->natts));
+	ereport(NOTICE,
+			errmsg("common_int %d common_bool %d to_str \"%s\"",
+				   cstate->common_opts.common_int,
+				   cstate->common_opts.common_bool,
+				   cstate->to_str_option));
+}
+
+static void
+TestCopyToOneRow(CopyToState cstate, TupleTableSlot *slot)
+{
+	ereport(NOTICE, (errmsg("CopyToOneRow: the number of valid values: %u", slot->tts_nvalid)));
+}
+
+static void
+TestCopyToEnd(CopyToState cstate)
+{
+	ereport(NOTICE, (errmsg("CopyToEnd")));
+}
+
+static const CopyToRoutine CopyToRoutineTestCopyFormat = {
+	.CopyToEstimateStateSpace = TestCopyToEsimateSpace,
+	.CopyToProcessOneOption = TestCopyToProcessOneOption,
+	.CopyToOutFunc = TestCopyToOutFunc,
+	.CopyToStart = TestCopyToStart,
+	.CopyToOneRow = TestCopyToOneRow,
+	.CopyToEnd = TestCopyToEnd,
+};
+
+
+static const CopyFromRoutine CopyFromRoutineTestCopyFormat = {
+	.CopyFromEstimateStateSpace = TestCopyFromEsimateSpace,
+	.CopyFromProcessOneOption = TestCopyFromProcessOneOption,
+	.CopyFromInFunc = TestCopyFromInFunc,
+	.CopyFromStart = TestCopyFromStart,
+	.CopyFromOneRow = TestCopyFromOneRow,
+	.CopyFromEnd = TestCopyFromEnd,
+};
+
+void
+_PG_init(void)
+{
+	RegisterCopyCustomFormat("test_format",
+							 &CopyFromRoutineTestCopyFormat,
+							 &CopyToRoutineTestCopyFormat);
+}
diff --git a/src/test/modules/test_copy_custom_format/test_copy_custom_format.conf b/src/test/modules/test_copy_custom_format/test_copy_custom_format.conf
new file mode 100644
index 00000000000..fb7cf22a3b1
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/test_copy_custom_format.conf
@@ -0,0 +1 @@
+shared_preload_libraries = 'test_copy_custom_format'
-- 
2.47.3

0004-Refactor-Copy-option-processing.patchapplication/octet-stream; name=0004-Refactor-Copy-option-processing.patchDownload
From 362ceb242c7b026bcbb077c910b26512b08e1e9d Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 10 Nov 2025 14:53:51 -0800
Subject: [PATCH 4/6] Refactor Copy option processing.

This commits refactors the COPY option handling to support custom COPY
option callback. Since extensions can define custom COPY format with
its own state data, it's necessary to pass the state data to the
option process callback. This commits separates ProcessCopyOptions
into ProcessCopyFromOptions and ProcessCopyToOptions and passes a
pointer to Copy{From,To}State respectively.

The subsequent patch introduces a new callback to allow extensions to
define their own option processing callback.
---
 contrib/file_fdw/file_fdw.c              |  2 +-
 src/backend/commands/copy.c              | 18 ++++---------
 src/backend/commands/copyfrom.c          | 31 ++++++++++++++++++++++-
 src/backend/commands/copyto.c            | 32 +++++++++++++++++++++++-
 src/include/commands/copyfrom_internal.h |  2 ++
 5 files changed, 69 insertions(+), 16 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index af2d86e5b5c..447fcb44241 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -338,7 +338,7 @@ file_fdw_validator(PG_FUNCTION_ARGS)
 	/*
 	 * Now apply the core COPY code's validation logic for more checks.
 	 */
-	ProcessCopyOptions(NULL, NULL, true, other_options);
+	ProcessCopyFromOptions(NULL, other_options, NULL);
 
 	/*
 	 * Either filename or program option is required for file_fdw foreign
diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c
index 28e878c3688..d4ee649c3c6 100644
--- a/src/backend/commands/copy.c
+++ b/src/backend/commands/copy.c
@@ -546,10 +546,8 @@ defGetCopyLogVerbosityChoice(DefElem *def, ParseState *pstate)
  * self-consistency of the options list.
  */
 void
-ProcessCopyOptions(ParseState *pstate,
-				   CopyFormatOptions *opts_out,
-				   bool is_from,
-				   List *options)
+ProcessCopyBuiltinOptions(List *options, CopyFormatOptions *opts_out,
+						  bool is_from, List **other_options, ParseState *pstate)
 {
 	bool		format_specified = false;
 	bool		freeze_specified = false;
@@ -559,10 +557,6 @@ ProcessCopyOptions(ParseState *pstate,
 	bool		reject_limit_specified = false;
 	ListCell   *option;
 
-	/* Support external use for option sanity checking */
-	if (opts_out == NULL)
-		opts_out = (CopyFormatOptions *) palloc0(sizeof(CopyFormatOptions));
-
 	opts_out->file_encoding = -1;
 
 	/* Extract options from the statement node tree */
@@ -583,6 +577,8 @@ ProcessCopyOptions(ParseState *pstate,
 				opts_out->csv_mode = true;
 			else if (strcmp(fmt, "binary") == 0)
 				opts_out->binary = true;
+			else if (FindCustomCopyFormat(fmt))
+				 /* just validate option value */ ;
 			else
 				ereport(ERROR,
 						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
@@ -731,11 +727,7 @@ ProcessCopyOptions(ParseState *pstate,
 			opts_out->reject_limit = defGetCopyRejectLimitOption(defel);
 		}
 		else
-			ereport(ERROR,
-					(errcode(ERRCODE_SYNTAX_ERROR),
-					 errmsg("option \"%s\" not recognized",
-							defel->defname),
-					 parser_errposition(pstate, defel->location)));
+			*other_options = lappend(*other_options, defel);
 	}
 
 	/*
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 592be4fcb5d..6ca5466f244 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -1705,7 +1705,7 @@ BeginCopyFrom(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
+	ProcessCopyFromOptions(cstate, options, pstate);
 
 	/* Process the target relation */
 	cstate->rel = rel;
@@ -2028,3 +2028,32 @@ ClosePipeFromProgram(CopyFromState cstate)
 				 errdetail_internal("%s", wait_result_to_str(pclose_rc))));
 	}
 }
+
+void
+ProcessCopyFromOptions(CopyFromState cstate, List *options, ParseState *pstate)
+{
+	bool		temp_state = false;
+	List	   *other_options = NIL;
+	CopyFormatOptions *opts;
+
+	if (cstate == NULL)
+	{
+		cstate = create_copyfrom_state(pstate, options);
+		temp_state = true;
+	}
+
+	opts = &cstate->opts;
+
+	ProcessCopyBuiltinOptions(options, opts, true, &other_options, pstate);
+
+	foreach_node(DefElem, option, other_options)
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", option->defname),
+				 parser_errposition(pstate, option->location)));
+	}
+
+	if (temp_state)
+		pfree(cstate);
+}
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index b1b3ae141eb..ea31fa911f9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -84,6 +84,7 @@ static void CopyAttributeOutCSV(CopyToStateTextLike * cstate, const char *string
 								bool use_quote);
 static void CopyRelationTo(CopyToState cstate, Relation rel, Relation root_rel,
 						   uint64 *processed);
+static void ProcessCopyToOptions(CopyToState cstate, List *options, ParseState *pstate);
 
 /* built-in format-specific routines */
 static Size CopyToEstimateStateTextLike(void);
@@ -785,7 +786,7 @@ BeginCopyTo(ParseState *pstate,
 	oldcontext = MemoryContextSwitchTo(cstate->copycontext);
 
 	/* Extract options from the statement node tree */
-	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
+	ProcessCopyToOptions(cstate, options, pstate);
 
 	/* Process the source/target relation or query */
 	if (rel)
@@ -1570,3 +1571,32 @@ CreateCopyDestReceiver(void)
 
 	return (DestReceiver *) self;
 }
+
+static void
+ProcessCopyToOptions(CopyToState cstate, List *options, ParseState *pstate)
+{
+	bool		temp_state = false;
+	List	   *other_options = NIL;
+	CopyFormatOptions *opts;
+
+	if (cstate == NULL)
+	{
+		cstate = create_copyto_state(pstate, options);
+		temp_state = true;
+	}
+
+	opts = &cstate->opts;
+
+	ProcessCopyBuiltinOptions(options, opts, false, &other_options, pstate);
+
+	foreach_node(DefElem, option, options)
+	{
+		ereport(ERROR,
+				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+				 errmsg("COPY format \"%s\" not recognized", option->defname),
+				 parser_errposition(pstate, option->location)));
+	}
+
+	if (temp_state)
+		pfree(cstate);
+}
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index d2d19536151..f457e2bee50 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -100,6 +100,8 @@ typedef struct CopyFromStateBuiltins
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
+extern void ProcessCopyFromOptions(CopyFromState cstate, List *options, ParseState *pstate);
+
 /* One-row callbacks for built-in formats defined in copyfromparse.c */
 extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
 							   Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);
-- 
2.47.3

0005-Add-Copy-To-From-ProcessOneOption-callback.patchapplication/octet-stream; name=0005-Add-Copy-To-From-ProcessOneOption-callback.patchDownload
From 819a96d8cac5d41eae1dd2b32cdfd817199dd5ad Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Mon, 10 Nov 2025 15:05:05 -0800
Subject: [PATCH 5/6] Add Copy{To,From}ProcessOneOption callback.

---
 src/backend/commands/copyfrom.c | 15 +++++++++++----
 src/backend/commands/copyto.c   | 17 ++++++++++++-----
 src/include/commands/copyapi.h  | 18 +++++++++++++++++-
 3 files changed, 40 insertions(+), 10 deletions(-)

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 6ca5466f244..c23c4b1188a 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -132,6 +132,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
 	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
+	.CopyFromProcessOneOption = NULL,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -141,6 +142,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
 	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
+	.CopyFromProcessOneOption = NULL,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -150,6 +152,7 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
 	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
+	.CopyFromProcessOneOption = NULL,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
@@ -2048,10 +2051,14 @@ ProcessCopyFromOptions(CopyFromState cstate, List *options, ParseState *pstate)
 
 	foreach_node(DefElem, option, other_options)
 	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY format \"%s\" not recognized", option->defname),
-				 parser_errposition(pstate, option->location)));
+		if (cstate->routine->CopyFromProcessOneOption &&
+			cstate->routine->CopyFromProcessOneOption(cstate, option))
+			 /* custom option is processed */ ;
+		else
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY format \"%s\" not recognized", option->defname),
+					 parser_errposition(pstate, option->location)));
 	}
 
 	if (temp_state)
diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index ea31fa911f9..9136098a0ed 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -122,6 +122,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
 	.CopyToEstimateStateSpace = CopyToEstimateStateTextLike,
+	.CopyToProcessOneOption = NULL,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -131,6 +132,7 @@ static const CopyToRoutine CopyToRoutineText = {
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
 	.CopyToEstimateStateSpace = CopyToEstimateStateTextLike,
+	.CopyToProcessOneOption = NULL,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -140,6 +142,7 @@ static const CopyToRoutine CopyToRoutineCSV = {
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
 	.CopyToEstimateStateSpace = CopyToEstimateStateBinary,
+	.CopyToProcessOneOption = NULL,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
@@ -1589,12 +1592,16 @@ ProcessCopyToOptions(CopyToState cstate, List *options, ParseState *pstate)
 
 	ProcessCopyBuiltinOptions(options, opts, false, &other_options, pstate);
 
-	foreach_node(DefElem, option, options)
+	foreach_node(DefElem, option, other_options)
 	{
-		ereport(ERROR,
-				(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-				 errmsg("COPY format \"%s\" not recognized", option->defname),
-				 parser_errposition(pstate, option->location)));
+		if (cstate->routine->CopyToProcessOneOption &&
+			cstate->routine->CopyToProcessOneOption(cstate, option))
+			 /* custom option is processed */ ;
+		else
+			ereport(ERROR,
+					(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+					 errmsg("COPY format \"%s\" not recognized", option->defname),
+					 parser_errposition(pstate, option->location)));
 	}
 
 	if (temp_state)
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2090a4e1c61..e19279d0c3d 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -27,6 +27,14 @@ typedef struct CopyToRoutine
 	 */
 	Size		(*CopyToEstimateStateSpace) (void);
 
+	/*
+	 * Process one COPY TO option. Return true if the option is processed,
+	 * otherwise return false.
+	 *
+	 * This is an optional callback.
+	 */
+	bool		(*CopyToProcessOneOption) (CopyToState cstate, DefElem *option);
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
@@ -70,6 +78,14 @@ typedef struct CopyFromRoutine
 	 */
 	Size		(*CopyFromEstimateStateSpace) (void);
 
+	/*
+	 * Process one COPY FROM option. Return true if the option is processed,
+	 * otherwise return false.
+	 *
+	 * This is an optional callback.
+	 */
+	bool		(*CopyFromProcessOneOption) (CopyFromState cstate, DefElem *option);
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
@@ -112,7 +128,7 @@ typedef struct CopyFromRoutine
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
 
-extern int CopyFromGetData(CopyFromState cstate, void *databuf, int minread, int maxread);
+extern int	CopyFromGetData(CopyFromState cstate, void *databuf, int minread, int maxread);
 extern void CopyToFlushData(CopyToState cstate);
 
 extern void RegisterCopyCustomFormat(const char *fmt_name, const CopyFromRoutine *from_routine,
-- 
2.47.3

0002-Separate-format-specific-fields-from-CopyFromStateDa.patchapplication/octet-stream; name=0002-Separate-format-specific-fields-from-CopyFromStateDa.patchDownload
From 54a307c3932d9fb080fdec3ce8b1068138f35f24 Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Fri, 7 Nov 2025 15:33:32 -0800
Subject: [PATCH 2/6] Separate format-specific fields from CopyFromStateData
 struct.

Previously, CopyFromStateData struct contained all state variables
used throughout COPY FROM operations. To support the upcoming
pluggable COPY format feature, this commit moves fields specific to
built-in formats into their own dedicated struct.

This commit also introduces a new CopyFromRoutine callback named
CopyFromEstimateStateSpace, allowing format routines to estimate and
return the memory size needed for their state data. The format's
state data must embed CopyFromStateData as its first field, and the
returned size must be equal to or larger than
CopyFromStateData. While separate structs for core and
format-specific usage might seem feasible, using contiguous memory
avoids overhead from extra pointer traversal.

This commit mixed many changes but the main goal is to move some
fields that are used only for built-in formats from out of
CopyFromStateData so that format implementation can use their own
state data, similar to what we did for COPY TO. Here is the summary of
changes:

* Introduce a new callback CopyFromEstimateStateSpace.
* Introduce a new struct CopyFromStateBuiltins for built-in format
state data.
* CopyFromStateData has fields used by the core.
* The new struct embeds CopyFromStateData at the first field.
* line_buf, raw_buf, and attribute_buf and their related fields are
now format-specific fields.
* Move some initialization steps (e.g., encoding convesion
preparation) to format's CopyFromStart callback.

Callback refactoring/handling.
==============================

One concern is how to integrate the error callback with
custom format. Currently, COPY FROM's error callback
CopyFromErrorCallback() is set right before the main loop in
CopyFrom() for COPY FROM command and unset after the loop, whereas
COPY command API allows users to call just BeginCopyFrom(),
NextCopyFrom(), and EndCopyFrom() (i.e., without CopyFrom()). I
initially thought we can think that the error callback is
format-specific function so we can set/unset the callback within the
COPY format callbacks (e.g., setting the callback in CopyFromStart
callback etc). However, I found out that it's not straightforward for
example because CopyFromStart can be called multiple times by
file_fdw.c. The current idea is that we allows format-implementations
to update the core's cur_XXX fields so that the core's error callback
can print the details. IOW, the error callback function is still a
core function that allows format-implementation can access and
update. While it looks working, one concern is priting the input row;
now that the input buffer and line buffer are format-speicic fileds,
there is no way for the core to access them to print the actual line
being read. One trick I used is to have the format implementation set
a pointer in the core's CopyFromStateData to the line_buf in format's
CopyFromStateBuiltins.
---
 contrib/file_fdw/file_fdw.c              |   5 +-
 src/backend/commands/copyfrom.c          | 253 ++++++++++++--------
 src/backend/commands/copyfromparse.c     | 292 +++++++++++++----------
 src/include/commands/copy.h              |  12 +-
 src/include/commands/copyapi.h           |   8 +-
 src/include/commands/copyfrom_internal.h | 104 +-------
 src/include/commands/copystate.h         |  97 ++++++++
 7 files changed, 436 insertions(+), 335 deletions(-)

diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 70564a68b13..af2d86e5b5c 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -766,7 +766,8 @@ retry:
 	 */
 	ExecClearTuple(slot);
 
-	if (NextCopyFrom(cstate, econtext, slot->tts_values, slot->tts_isnull))
+	if (NextCopyFrom(cstate, econtext, slot->tts_values, slot->tts_isnull,
+					 NULL))
 	{
 		if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE &&
 			cstate->escontext->error_occurred)
@@ -1246,7 +1247,7 @@ file_acquire_sample_rows(Relation onerel, int elevel,
 		MemoryContextReset(tupcontext);
 		MemoryContextSwitchTo(tupcontext);
 
-		found = NextCopyFrom(cstate, NULL, values, nulls);
+		found = NextCopyFrom(cstate, NULL, values, nulls, NULL);
 
 		MemoryContextSwitchTo(oldcontext);
 
diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 12781963b4f..0c51e5ba5e1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -30,6 +30,8 @@
 #include "catalog/namespace.h"
 #include "commands/copyapi.h"
 #include "commands/copyfrom_internal.h"
+#include "commands/copystate.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "commands/trigger.h"
 #include "executor/execPartition.h"
@@ -129,6 +131,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);
 
 /* text format */
 static const CopyFromRoutine CopyFromRoutineText = {
+	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromTextOneRow,
@@ -137,6 +140,7 @@ static const CopyFromRoutine CopyFromRoutineText = {
 
 /* CSV format */
 static const CopyFromRoutine CopyFromRoutineCSV = {
+	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
 	.CopyFromInFunc = CopyFromTextLikeInFunc,
 	.CopyFromStart = CopyFromTextLikeStart,
 	.CopyFromOneRow = CopyFromCSVOneRow,
@@ -145,54 +149,129 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
 
 /* binary format */
 static const CopyFromRoutine CopyFromRoutineBinary = {
+	.CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,
 	.CopyFromInFunc = CopyFromBinaryInFunc,
 	.CopyFromStart = CopyFromBinaryStart,
 	.CopyFromOneRow = CopyFromBinaryOneRow,
 	.CopyFromEnd = CopyFromBinaryEnd,
 };
 
-/* Return a COPY FROM routine for the given options */
-static const CopyFromRoutine *
-CopyFromGetRoutine(const CopyFormatOptions *opts)
+/*
+ * Common routine to initialize CopyFromStateBuiltins data.
+ */
+static void
+initialize_copyfrom_bultins_state(CopyFromStateBuiltins * state, TupleDesc tupDesc)
 {
-	if (opts->csv_mode)
-		return &CopyFromRoutineCSV;
-	else if (opts->binary)
-		return &CopyFromRoutineBinary;
+	/* Use client encoding when ENCODING option is not specified. */
+	if (state->base.opts.file_encoding < 0)
+		state->file_encoding = pg_get_client_encoding();
+	else
+		state->file_encoding = state->base.opts.file_encoding;
+
+	/*
+	 * Look up encoding conversion function.
+	 */
+	if (state->file_encoding == GetDatabaseEncoding() ||
+		state->file_encoding == PG_SQL_ASCII ||
+		GetDatabaseEncoding() == PG_SQL_ASCII)
+	{
+		state->need_transcoding = false;
+	}
+	else
+	{
+		state->need_transcoding = true;
+		state->conversion_proc = FindDefaultConversionProc(state->file_encoding,
+														   GetDatabaseEncoding());
+		if (!OidIsValid(state->conversion_proc))
+			ereport(ERROR,
+					(errcode(ERRCODE_UNDEFINED_FUNCTION),
+					 errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
+							pg_encoding_to_char(state->file_encoding),
+							pg_encoding_to_char(GetDatabaseEncoding()))));
+	}
 
-	/* default is text */
-	return &CopyFromRoutineText;
+	state->defaults = (bool *) palloc0(tupDesc->natts * sizeof(bool));
+
+	/* initialize variables */
+	state->eol_type = EOL_UNKNOWN;
+
+	/* Convert convert_selectively name list to per-column flags */
+	if (state->base.opts.convert_selectively)
+	{
+		List	   *attnums;
+		ListCell   *cur;
+		int			num_phys_attrs = RelationGetDescr(state->base.rel)->natts;
+
+		state->convert_select_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool));
+
+		attnums = CopyGetAttnums(tupDesc, state->base.rel, state->base.opts.convert_select);
+
+		foreach(cur, attnums)
+		{
+			int			attnum = lfirst_int(cur);
+			Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
+
+			if (!list_member_int(state->base.attnumlist, attnum))
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
+						 errmsg_internal("selected column \"%s\" not referenced by COPY",
+										 NameStr(attr->attname))));
+			state->convert_select_flags[attnum - 1] = true;
+		}
+	}
+
+	/*
+	 * Allocate buffers for the input pipeline.
+	 *
+	 * attribute_buf and raw_buf are used in both text and binary modes, but
+	 * input_buf and line_buf only in text mode.
+	 */
+	state->raw_buf = palloc(RAW_BUF_SIZE + 1);
+	state->raw_buf_index = state->raw_buf_len = 0;
+
+	initStringInfo(&state->attribute_buf);
+
+	/* Initialize state variables */
+	state->base.cur_relname = RelationGetRelationName(state->base.rel);
+	state->base.cur_lineno = 0;
+	state->base.cur_attname = NULL;
+	state->base.cur_attval = NULL;
+	state->base.relname_only = false;
 }
 
 /* Implementation of the start callback for text and CSV formats */
 static void
 CopyFromTextLikeStart(CopyFromState cstate, TupleDesc tupDesc)
 {
+	CopyFromStateBuiltins *state = (CopyFromStateBuiltins *) cstate;
 	AttrNumber	attr_count;
 
+	initialize_copyfrom_bultins_state(state, tupDesc);
+
 	/*
 	 * If encoding conversion is needed, we need another buffer to hold the
 	 * converted input data.  Otherwise, we can just point input_buf to the
 	 * same buffer as raw_buf.
 	 */
-	if (cstate->need_transcoding)
+	if (state->need_transcoding)
 	{
-		cstate->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
-		cstate->input_buf_index = cstate->input_buf_len = 0;
+		state->input_buf = (char *) palloc(INPUT_BUF_SIZE + 1);
+		state->input_buf_index = state->input_buf_len = 0;
 	}
 	else
-		cstate->input_buf = cstate->raw_buf;
-	cstate->input_reached_eof = false;
+		state->input_buf = state->raw_buf;
+	state->input_reached_eof = false;
 
-	initStringInfo(&cstate->line_buf);
+	initStringInfo(&state->line_buf);
+	state->base.line_buf = &state->line_buf;
 
 	/*
 	 * Create workspace for CopyReadAttributes results; used by CSV and text
 	 * format.
 	 */
-	attr_count = list_length(cstate->attnumlist);
-	cstate->max_fields = attr_count;
-	cstate->raw_fields = (char **) palloc(attr_count * sizeof(char *));
+	attr_count = list_length(state->base.attnumlist);
+	state->max_fields = attr_count;
+	state->raw_fields = (char **) palloc(attr_count * sizeof(char *));
 }
 
 /*
@@ -220,6 +299,8 @@ CopyFromTextLikeEnd(CopyFromState cstate)
 static void
 CopyFromBinaryStart(CopyFromState cstate, TupleDesc tupDesc)
 {
+	initialize_copyfrom_bultins_state((CopyFromStateBuiltins *) cstate, tupDesc);
+
 	/* Read and verify binary header */
 	ReceiveCopyBinaryHeader(cstate);
 }
@@ -308,7 +389,7 @@ CopyFromErrorCallback(void *arg)
 			{
 				char	   *lineval;
 
-				lineval = CopyLimitPrintoutLength(cstate->line_buf.data);
+				lineval = CopyLimitPrintoutLength(cstate->line_buf->data);
 				errcontext("COPY %s, line %" PRIu64 ": \"%s\"",
 						   cstate->cur_relname,
 						   cstate->cur_lineno, lineval);
@@ -1113,6 +1194,7 @@ CopyFrom(CopyFromState cstate)
 	{
 		TupleTableSlot *myslot;
 		bool		skip_tuple;
+		CopyFromRowInfo rowinfo = {0};
 
 		CHECK_FOR_INTERRUPTS();
 
@@ -1146,7 +1228,8 @@ CopyFrom(CopyFromState cstate)
 		ExecClearTuple(myslot);
 
 		/* Directly store the values/nulls array in the slot */
-		if (!NextCopyFrom(cstate, econtext, myslot->tts_values, myslot->tts_isnull))
+		if (!NextCopyFrom(cstate, econtext, myslot->tts_values, myslot->tts_isnull,
+						  &rowinfo))
 			break;
 
 		if (cstate->opts.on_error == COPY_ON_ERROR_IGNORE &&
@@ -1379,8 +1462,8 @@ CopyFrom(CopyFromState cstate)
 					/* Add this tuple to the tuple buffer */
 					CopyMultiInsertInfoStore(&multiInsertInfo,
 											 resultRelInfo, myslot,
-											 cstate->line_buf.len,
-											 cstate->cur_lineno);
+											 rowinfo.tuplen,
+											 rowinfo.lineno);
 
 					/*
 					 * If enough inserts have queued up, then flush all
@@ -1512,6 +1595,50 @@ CopyFrom(CopyFromState cstate)
 	return processed;
 }
 
+static CopyFromState
+create_copyfrom_state(ParseState *pstate, List *options)
+{
+	const CopyFromRoutine *routine;
+	CopyFromState cstate;
+	Size		req_size;
+	bool		format_specified = false;
+
+	routine = &CopyFromRoutineText; /* default */
+	foreach_node(DefElem, defel, options)
+	{
+		if (strcmp(defel->defname, "format") == 0)
+		{
+			char	   *fmt = defGetString(defel);
+
+			if (format_specified)
+				errorConflictingDefElem(defel, pstate);
+			format_specified = true;
+			if (strcmp(fmt, "text") == 0)
+				routine = &CopyFromRoutineText;
+			else if (strcmp(fmt, "csv") == 0)
+				routine = &CopyFromRoutineCSV;
+			else if (strcmp(fmt, "binary") == 0)
+				routine = &CopyFromRoutineBinary;
+			else
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+						 errmsg("COPY format \"%s\" not recognized", fmt),
+						 parser_errposition(pstate, defel->location)));
+
+			break;
+		}
+	}
+
+	req_size = routine->CopyFromEstimateStateSpace();
+	Assert(req_size >= sizeof(CopyFromStateData));
+
+	/* Allocate workspace and zero all fields */
+	cstate = (CopyFromState) palloc0(req_size);
+	cstate->routine = routine;
+
+	return cstate;
+}
+
 /*
  * Setup to read tuples from a file for COPY FROM.
  *
@@ -1558,7 +1685,7 @@ BeginCopyFrom(ParseState *pstate,
 	};
 
 	/* Allocate workspace and zero all fields */
-	cstate = (CopyFromStateData *) palloc0(sizeof(CopyFromStateData));
+	cstate = create_copyfrom_state(pstate, options);
 
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
@@ -1573,9 +1700,6 @@ BeginCopyFrom(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, true /* is_from */ , options);
 
-	/* Set the format routine */
-	cstate->routine = CopyFromGetRoutine(&cstate->opts);
-
 	/* Process the target relation */
 	cstate->rel = rel;
 
@@ -1657,82 +1781,10 @@ BeginCopyFrom(ParseState *pstate,
 		}
 	}
 
-	/* Convert convert_selectively name list to per-column flags */
-	if (cstate->opts.convert_selectively)
-	{
-		List	   *attnums;
-		ListCell   *cur;
-
-		cstate->convert_select_flags = (bool *) palloc0(num_phys_attrs * sizeof(bool));
-
-		attnums = CopyGetAttnums(tupDesc, cstate->rel, cstate->opts.convert_select);
-
-		foreach(cur, attnums)
-		{
-			int			attnum = lfirst_int(cur);
-			Form_pg_attribute attr = TupleDescAttr(tupDesc, attnum - 1);
-
-			if (!list_member_int(cstate->attnumlist, attnum))
-				ereport(ERROR,
-						(errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
-						 errmsg_internal("selected column \"%s\" not referenced by COPY",
-										 NameStr(attr->attname))));
-			cstate->convert_select_flags[attnum - 1] = true;
-		}
-	}
-
-	/* Use client encoding when ENCODING option is not specified. */
-	if (cstate->opts.file_encoding < 0)
-		cstate->file_encoding = pg_get_client_encoding();
-	else
-		cstate->file_encoding = cstate->opts.file_encoding;
-
-	/*
-	 * Look up encoding conversion function.
-	 */
-	if (cstate->file_encoding == GetDatabaseEncoding() ||
-		cstate->file_encoding == PG_SQL_ASCII ||
-		GetDatabaseEncoding() == PG_SQL_ASCII)
-	{
-		cstate->need_transcoding = false;
-	}
-	else
-	{
-		cstate->need_transcoding = true;
-		cstate->conversion_proc = FindDefaultConversionProc(cstate->file_encoding,
-															GetDatabaseEncoding());
-		if (!OidIsValid(cstate->conversion_proc))
-			ereport(ERROR,
-					(errcode(ERRCODE_UNDEFINED_FUNCTION),
-					 errmsg("default conversion function for encoding \"%s\" to \"%s\" does not exist",
-							pg_encoding_to_char(cstate->file_encoding),
-							pg_encoding_to_char(GetDatabaseEncoding()))));
-	}
-
 	cstate->copy_src = COPY_FILE;	/* default */
 
 	cstate->whereClause = whereClause;
 
-	/* Initialize state variables */
-	cstate->eol_type = EOL_UNKNOWN;
-	cstate->cur_relname = RelationGetRelationName(cstate->rel);
-	cstate->cur_lineno = 0;
-	cstate->cur_attname = NULL;
-	cstate->cur_attval = NULL;
-	cstate->relname_only = false;
-
-	/*
-	 * Allocate buffers for the input pipeline.
-	 *
-	 * attribute_buf and raw_buf are used in both text and binary modes, but
-	 * input_buf and line_buf only in text mode.
-	 */
-	cstate->raw_buf = palloc(RAW_BUF_SIZE + 1);
-	cstate->raw_buf_index = cstate->raw_buf_len = 0;
-	cstate->raw_reached_eof = false;
-
-	initStringInfo(&cstate->attribute_buf);
-
 	/* Assign range table and rteperminfos, we'll need them in CopyFrom. */
 	if (pstate)
 	{
@@ -1818,8 +1870,6 @@ BeginCopyFrom(ParseState *pstate,
 		}
 	}
 
-	cstate->defaults = (bool *) palloc0(tupDesc->natts * sizeof(bool));
-
 	/* initialize progress */
 	pgstat_progress_start_command(PROGRESS_COMMAND_COPY,
 								  cstate->rel ? RelationGetRelid(cstate->rel) : InvalidOid);
@@ -1833,6 +1883,7 @@ BeginCopyFrom(ParseState *pstate,
 	cstate->volatile_defexprs = volatile_defexprs;
 	cstate->num_defaults = num_defaults;
 	cstate->is_program = is_program;
+	cstate->reached_eof = false;
 
 	if (data_source_cb)
 	{
@@ -1959,7 +2010,7 @@ ClosePipeFromProgram(CopyFromState cstate)
 		 * should not report that as an error.  Otherwise, SIGPIPE indicates a
 		 * problem.
 		 */
-		if (!cstate->raw_reached_eof &&
+		if (!cstate->reached_eof &&
 			wait_result_is_signal(pclose_rc, SIGPIPE))
 			return;
 
diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c
index b1ae97b833d..669dbfb8459 100644
--- a/src/backend/commands/copyfromparse.c
+++ b/src/backend/commands/copyfromparse.c
@@ -138,21 +138,20 @@ if (1) \
 /* NOTE: there's a copy of this in copyto.c */
 static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 
-
 /* non-export function prototypes */
-static bool CopyReadLine(CopyFromState cstate, bool is_csv);
-static bool CopyReadLineText(CopyFromState cstate, bool is_csv);
-static int	CopyReadAttributesText(CopyFromState cstate);
-static int	CopyReadAttributesCSV(CopyFromState cstate);
-static Datum CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
+static bool CopyReadLine(CopyFromStateBuiltins * state, bool is_csv);
+static bool CopyReadLineText(CopyFromStateBuiltins * state, bool is_csv);
+static int	CopyReadAttributesText(CopyFromStateBuiltins * state);
+static int	CopyReadAttributesCSV(CopyFromStateBuiltins * state);
+static Datum CopyReadBinaryAttribute(CopyFromStateBuiltins * state, FmgrInfo *flinfo,
 									 Oid typioparam, int32 typmod,
 									 bool *isnull);
-static pg_attribute_always_inline bool CopyFromTextLikeOneRow(CopyFromState cstate,
+static pg_attribute_always_inline bool CopyFromTextLikeOneRow(CopyFromStateBuiltins * state,
 															  ExprContext *econtext,
-															  Datum *values,
-															  bool *nulls,
+															  Datum *values, bool *nulls,
+															  CopyFromRowInfo * rowinfo,
 															  bool is_csv);
-static pg_attribute_always_inline bool NextCopyFromRawFieldsInternal(CopyFromState cstate,
+static pg_attribute_always_inline bool NextCopyFromRawFieldsInternal(CopyFromStateBuiltins * state,
 																	 char ***fields,
 																	 int *nfields,
 																	 bool is_csv);
@@ -161,10 +160,10 @@ static pg_attribute_always_inline bool NextCopyFromRawFieldsInternal(CopyFromSta
 /* Low-level communications functions */
 static int	CopyGetData(CopyFromState cstate, void *databuf,
 						int minread, int maxread);
-static inline bool CopyGetInt32(CopyFromState cstate, int32 *val);
-static inline bool CopyGetInt16(CopyFromState cstate, int16 *val);
-static void CopyLoadInputBuf(CopyFromState cstate);
-static int	CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes);
+static inline bool CopyGetInt32(CopyFromStateBuiltins * state, int32 *val);
+static inline bool CopyGetInt16(CopyFromStateBuiltins * state, int16 *val);
+static void CopyLoadInputBuf(CopyFromStateBuiltins * state);
+static int	CopyReadBinaryData(CopyFromStateBuiltins * state, char *dest, int nbytes);
 
 void
 ReceiveCopyBegin(CopyFromState cstate)
@@ -187,8 +186,9 @@ ReceiveCopyBegin(CopyFromState cstate)
 }
 
 void
-ReceiveCopyBinaryHeader(CopyFromState cstate)
+ReceiveCopyBinaryHeader(CopyFromState ccstate)
 {
+	CopyFromStateBuiltins *cstate = (CopyFromStateBuiltins *) ccstate;
 	char		readSig[11];
 	int32		tmp;
 
@@ -255,10 +255,10 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 						(errcode_for_file_access(),
 						 errmsg("could not read from COPY file: %m")));
 			if (bytesread == 0)
-				cstate->raw_reached_eof = true;
+				cstate->reached_eof = true;
 			break;
 		case COPY_FRONTEND:
-			while (maxread > 0 && bytesread < minread && !cstate->raw_reached_eof)
+			while (maxread > 0 && bytesread < minread && !cstate->reached_eof)
 			{
 				int			avail;
 
@@ -309,7 +309,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
 							break;
 						case PqMsg_CopyDone:
 							/* COPY IN correctly terminated by frontend */
-							cstate->raw_reached_eof = true;
+							cstate->reached_eof = true;
 							return bytesread;
 						case PqMsg_CopyFail:
 							ereport(ERROR,
@@ -359,7 +359,7 @@ CopyGetData(CopyFromState cstate, void *databuf, int minread, int maxread)
  * Returns true if OK, false if EOF
  */
 static inline bool
-CopyGetInt32(CopyFromState cstate, int32 *val)
+CopyGetInt32(CopyFromStateBuiltins * cstate, int32 *val)
 {
 	uint32		buf;
 
@@ -376,7 +376,7 @@ CopyGetInt32(CopyFromState cstate, int32 *val)
  * CopyGetInt16 reads an int16 that appears in network byte order
  */
 static inline bool
-CopyGetInt16(CopyFromState cstate, int16 *val)
+CopyGetInt16(CopyFromStateBuiltins * cstate, int16 *val)
 {
 	uint16		buf;
 
@@ -397,7 +397,7 @@ CopyGetInt16(CopyFromState cstate, int16 *val)
  * On entry, there must be some data to convert in 'raw_buf'.
  */
 static void
-CopyConvertBuf(CopyFromState cstate)
+CopyConvertBuf(CopyFromStateBuiltins * cstate)
 {
 	/*
 	 * If the file and server encoding are the same, no encoding conversion is
@@ -421,7 +421,7 @@ CopyConvertBuf(CopyFromState cstate)
 			/*
 			 * If no more raw data is coming, report the EOF to the caller.
 			 */
-			if (cstate->raw_reached_eof)
+			if (cstate->base.reached_eof)
 				cstate->input_reached_eof = true;
 			return;
 		}
@@ -444,7 +444,7 @@ CopyConvertBuf(CopyFromState cstate)
 			 * least one character, and a failure to do so means that we've
 			 * hit an invalid byte sequence.
 			 */
-			if (cstate->raw_reached_eof || unverifiedlen >= pg_encoding_max_length(cstate->file_encoding))
+			if (cstate->base.reached_eof || unverifiedlen >= pg_encoding_max_length(cstate->file_encoding))
 				cstate->input_reached_error = true;
 			return;
 		}
@@ -467,7 +467,7 @@ CopyConvertBuf(CopyFromState cstate)
 			/*
 			 * If no more raw data is coming, report the EOF to the caller.
 			 */
-			if (cstate->raw_reached_eof)
+			if (cstate->base.reached_eof)
 				cstate->input_reached_eof = true;
 			return;
 		}
@@ -517,7 +517,7 @@ CopyConvertBuf(CopyFromState cstate)
 			 * failure to do so must mean that we've hit a byte sequence
 			 * that's invalid.
 			 */
-			if (cstate->raw_reached_eof || srclen >= MAX_CONVERSION_INPUT_LENGTH)
+			if (cstate->base.reached_eof || srclen >= MAX_CONVERSION_INPUT_LENGTH)
 				cstate->input_reached_error = true;
 			return;
 		}
@@ -530,7 +530,7 @@ CopyConvertBuf(CopyFromState cstate)
  * Report an encoding or conversion error.
  */
 static void
-CopyConversionError(CopyFromState cstate)
+CopyConversionError(CopyFromStateBuiltins * cstate)
 {
 	Assert(cstate->raw_buf_len > 0);
 	Assert(cstate->input_reached_error);
@@ -587,7 +587,7 @@ CopyConversionError(CopyFromState cstate)
  * beginning of the buffer, and we load new data after that.
  */
 static void
-CopyLoadRawBuf(CopyFromState cstate)
+CopyLoadRawBuf(CopyFromStateBuiltins * cstate)
 {
 	int			nbytes;
 	int			inbytes;
@@ -624,17 +624,17 @@ CopyLoadRawBuf(CopyFromState cstate)
 	}
 
 	/* Load more data */
-	inbytes = CopyGetData(cstate, cstate->raw_buf + cstate->raw_buf_len,
+	inbytes = CopyGetData((CopyFromState) cstate, cstate->raw_buf + cstate->raw_buf_len,
 						  1, RAW_BUF_SIZE - cstate->raw_buf_len);
 	nbytes += inbytes;
 	cstate->raw_buf[nbytes] = '\0';
 	cstate->raw_buf_len = nbytes;
 
-	cstate->bytes_processed += inbytes;
-	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->bytes_processed);
+	cstate->base.bytes_processed += inbytes;
+	pgstat_progress_update_param(PROGRESS_COPY_BYTES_PROCESSED, cstate->base.bytes_processed);
 
 	if (inbytes == 0)
-		cstate->raw_reached_eof = true;
+		cstate->base.reached_eof = true;
 }
 
 /*
@@ -647,7 +647,7 @@ CopyLoadRawBuf(CopyFromState cstate)
  * of the buffer and then we load more data after that.
  */
 static void
-CopyLoadInputBuf(CopyFromState cstate)
+CopyLoadInputBuf(CopyFromStateBuiltins * cstate)
 {
 	int			nbytes = INPUT_BUF_BYTES(cstate);
 
@@ -685,7 +685,7 @@ CopyLoadInputBuf(CopyFromState cstate)
 			break;
 
 		/* Try to load more raw data */
-		Assert(!cstate->raw_reached_eof);
+		Assert(!cstate->base.reached_eof);
 		CopyLoadRawBuf(cstate);
 	}
 }
@@ -698,7 +698,7 @@ CopyLoadInputBuf(CopyFromState cstate)
  * would be less than 'nbytes' only if we reach EOF).
  */
 static int
-CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
+CopyReadBinaryData(CopyFromStateBuiltins * cstate, char *dest, int nbytes)
 {
 	int			copied_bytes = 0;
 
@@ -723,7 +723,7 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 			if (RAW_BUF_BYTES(cstate) == 0)
 			{
 				CopyLoadRawBuf(cstate);
-				if (cstate->raw_reached_eof)
+				if (cstate->base.reached_eof)
 					break;		/* EOF */
 			}
 
@@ -739,15 +739,21 @@ CopyReadBinaryData(CopyFromState cstate, char *dest, int nbytes)
 	return copied_bytes;
 }
 
+Size
+CopyFromBuiltinsEstimateSpace(void)
+{
+	return sizeof(CopyFromStateBuiltins);
+}
+
 /*
  * This function is exposed for use by extensions that read raw fields in the
  * next line. See NextCopyFromRawFieldsInternal() for details.
  */
 bool
-NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
+NextCopyFromRawFields(CopyFromState ccstate, char ***fields, int *nfields)
 {
-	return NextCopyFromRawFieldsInternal(cstate, fields, nfields,
-										 cstate->opts.csv_mode);
+	return NextCopyFromRawFieldsInternal((CopyFromStateBuiltins *) ccstate,
+										 fields, nfields, ccstate->opts.csv_mode);
 }
 
 /*
@@ -768,35 +774,35 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
  * by internal functions such as CopyFromTextLikeOneRow().
  */
 static pg_attribute_always_inline bool
-NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields, bool is_csv)
+NextCopyFromRawFieldsInternal(CopyFromStateBuiltins * cstate, char ***fields, int *nfields, bool is_csv)
 {
 	int			fldct;
 	bool		done = false;
 
 	/* only available for text or csv input */
-	Assert(!cstate->opts.binary);
+	Assert(!cstate->base.opts.binary);
 
 	/* on input check that the header line is correct if needed */
-	if (cstate->cur_lineno == 0 && cstate->opts.header_line != COPY_HEADER_FALSE)
+	if (cstate->base.cur_lineno == 0 && cstate->base.opts.header_line != COPY_HEADER_FALSE)
 	{
 		ListCell   *cur;
 		TupleDesc	tupDesc;
-		int			lines_to_skip = cstate->opts.header_line;
+		int			lines_to_skip = cstate->base.opts.header_line;
 
 		/* If set to "match", one header line is skipped */
-		if (cstate->opts.header_line == COPY_HEADER_MATCH)
+		if (cstate->base.opts.header_line == COPY_HEADER_MATCH)
 			lines_to_skip = 1;
 
-		tupDesc = RelationGetDescr(cstate->rel);
+		tupDesc = RelationGetDescr(cstate->base.rel);
 
 		for (int i = 0; i < lines_to_skip; i++)
 		{
-			cstate->cur_lineno++;
+			cstate->base.cur_lineno++;
 			if ((done = CopyReadLine(cstate, is_csv)))
 				break;
 		}
 
-		if (cstate->opts.header_line == COPY_HEADER_MATCH)
+		if (cstate->base.opts.header_line == COPY_HEADER_MATCH)
 		{
 			int			fldnum;
 
@@ -805,14 +811,14 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 			else
 				fldct = CopyReadAttributesText(cstate);
 
-			if (fldct != list_length(cstate->attnumlist))
+			if (fldct != list_length(cstate->base.attnumlist))
 				ereport(ERROR,
 						(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 						 errmsg("wrong number of fields in header line: got %d, expected %d",
-								fldct, list_length(cstate->attnumlist))));
+								fldct, list_length(cstate->base.attnumlist))));
 
 			fldnum = 0;
-			foreach(cur, cstate->attnumlist)
+			foreach(cur, cstate->base.attnumlist)
 			{
 				int			attnum = lfirst_int(cur);
 				char	   *colName;
@@ -825,7 +831,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 					ereport(ERROR,
 							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 							 errmsg("column name mismatch in header line field %d: got null value (\"%s\"), expected \"%s\"",
-									fldnum, cstate->opts.null_print, NameStr(attr->attname))));
+									fldnum, cstate->base.opts.null_print, NameStr(attr->attname))));
 
 				if (namestrcmp(&attr->attname, colName) != 0)
 				{
@@ -841,7 +847,7 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
 			return false;
 	}
 
-	cstate->cur_lineno++;
+	cstate->base.cur_lineno++;
 
 	/* Actually read the line into memory here */
 	done = CopyReadLine(cstate, is_csv);
@@ -877,8 +883,8 @@ NextCopyFromRawFieldsInternal(CopyFromState cstate, char ***fields, int *nfields
  * relation passed to BeginCopyFrom. This function fills the arrays.
  */
 bool
-NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-			 Datum *values, bool *nulls)
+NextCopyFrom(CopyFromState cstate, ExprContext *econtext, Datum *values,
+			 bool *nulls, CopyFromRowInfo * rowinfo)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	num_phys_attrs,
@@ -893,10 +899,9 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 	/* Initialize all values for row to NULL */
 	MemSet(values, 0, num_phys_attrs * sizeof(Datum));
 	MemSet(nulls, true, num_phys_attrs * sizeof(bool));
-	MemSet(cstate->defaults, false, num_phys_attrs * sizeof(bool));
 
 	/* Get one row from source */
-	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls))
+	if (!cstate->routine->CopyFromOneRow(cstate, econtext, values, nulls, rowinfo))
 		return false;
 
 	/*
@@ -923,17 +928,19 @@ NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
 /* Implementation of the per-row callback for text format */
 bool
 CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
-				   bool *nulls)
+				   bool *nulls, CopyFromRowInfo * rowinfo)
 {
-	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, false);
+	return CopyFromTextLikeOneRow((CopyFromStateBuiltins *) cstate, econtext,
+								  values, nulls, rowinfo, false);
 }
 
 /* Implementation of the per-row callback for CSV format */
 bool
 CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
-				  bool *nulls)
+				  bool *nulls, CopyFromRowInfo * rowinfo)
 {
-	return CopyFromTextLikeOneRow(cstate, econtext, values, nulls, true);
+	return CopyFromTextLikeOneRow((CopyFromStateBuiltins *) cstate, econtext,
+								  values, nulls, rowinfo, true);
 }
 
 /*
@@ -943,22 +950,25 @@ CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
  * and to help compilers to optimize away the 'is_csv' condition.
  */
 static pg_attribute_always_inline bool
-CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
-					   Datum *values, bool *nulls, bool is_csv)
+CopyFromTextLikeOneRow(CopyFromStateBuiltins * cstate, ExprContext *econtext,
+					   Datum *values, bool *nulls, CopyFromRowInfo * rowinfo,
+					   bool is_csv)
 {
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
-	ExprState **defexprs = cstate->defexprs;
+	FmgrInfo   *in_functions = cstate->base.in_functions;
+	Oid		   *typioparams = cstate->base.typioparams;
+	ExprState **defexprs = cstate->base.defexprs;
 	char	  **field_strings;
 	ListCell   *cur;
 	int			fldct;
 	int			fieldno;
 	char	   *string;
 
-	tupDesc = RelationGetDescr(cstate->rel);
-	attr_count = list_length(cstate->attnumlist);
+	tupDesc = RelationGetDescr(cstate->base.rel);
+	attr_count = list_length(cstate->base.attnumlist);
+
+	MemSet(cstate->defaults, false, tupDesc->natts * sizeof(bool));
 
 	/* read raw fields in the next line */
 	if (!NextCopyFromRawFieldsInternal(cstate, &field_strings, &fldct, is_csv))
@@ -973,7 +983,7 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 	fieldno = 0;
 
 	/* Loop to read the user attributes on the line. */
-	foreach(cur, cstate->attnumlist)
+	foreach(cur, cstate->base.attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
 		int			m = attnum - 1;
@@ -996,16 +1006,16 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 		if (is_csv)
 		{
 			if (string == NULL &&
-				cstate->opts.force_notnull_flags[m])
+				cstate->base.opts.force_notnull_flags[m])
 			{
 				/*
 				 * FORCE_NOT_NULL option is set and column is NULL - convert
 				 * it to the NULL string.
 				 */
-				string = cstate->opts.null_print;
+				string = cstate->base.opts.null_print;
 			}
-			else if (string != NULL && cstate->opts.force_null_flags[m]
-					 && strcmp(string, cstate->opts.null_print) == 0)
+			else if (string != NULL && cstate->base.opts.force_null_flags[m]
+					 && strcmp(string, cstate->base.opts.null_print) == 0)
 			{
 				/*
 				 * FORCE_NULL option is set and column matches the NULL
@@ -1017,8 +1027,8 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 			}
 		}
 
-		cstate->cur_attname = NameStr(att->attname);
-		cstate->cur_attval = string;
+		cstate->base.cur_attname = NameStr(att->attname);
+		cstate->base.cur_attval = string;
 
 		if (string != NULL)
 			nulls[m] = false;
@@ -1039,73 +1049,81 @@ CopyFromTextLikeOneRow(CopyFromState cstate, ExprContext *econtext,
 										string,
 										typioparams[m],
 										att->atttypmod,
-										(Node *) cstate->escontext,
+										(Node *) cstate->base.escontext,
 										&values[m]))
 		{
-			Assert(cstate->opts.on_error != COPY_ON_ERROR_STOP);
+			Assert(cstate->base.opts.on_error != COPY_ON_ERROR_STOP);
 
-			cstate->num_errors++;
+			cstate->base.num_errors++;
 
-			if (cstate->opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
+			if (cstate->base.opts.log_verbosity == COPY_LOG_VERBOSITY_VERBOSE)
 			{
 				/*
 				 * Since we emit line number and column info in the below
 				 * notice message, we suppress error context information other
 				 * than the relation name.
 				 */
-				Assert(!cstate->relname_only);
-				cstate->relname_only = true;
+				Assert(!cstate->base.relname_only);
+				cstate->base.relname_only = true;
 
-				if (cstate->cur_attval)
+				if (cstate->base.cur_attval)
 				{
 					char	   *attval;
 
-					attval = CopyLimitPrintoutLength(cstate->cur_attval);
+					attval = CopyLimitPrintoutLength(cstate->base.cur_attval);
 					ereport(NOTICE,
 							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": \"%s\"",
-								   cstate->cur_lineno,
-								   cstate->cur_attname,
+								   cstate->base.cur_lineno,
+								   cstate->base.cur_attname,
 								   attval));
 					pfree(attval);
 				}
 				else
 					ereport(NOTICE,
 							errmsg("skipping row due to data type incompatibility at line %" PRIu64 " for column \"%s\": null input",
-								   cstate->cur_lineno,
-								   cstate->cur_attname));
+								   cstate->base.cur_lineno,
+								   cstate->base.cur_attname));
 
 				/* reset relname_only */
-				cstate->relname_only = false;
+				cstate->base.relname_only = false;
 			}
 
 			return true;
 		}
 
-		cstate->cur_attname = NULL;
-		cstate->cur_attval = NULL;
+		cstate->base.cur_attname = NULL;
+		cstate->base.cur_attval = NULL;
 	}
 
 	Assert(fieldno == attr_count);
 
+	/* Set output parameters */
+	if (rowinfo)
+	{
+		rowinfo->lineno = cstate->base.cur_lineno;
+		rowinfo->tuplen = cstate->line_buf.len;
+	}
+
 	return true;
 }
 
 /* Implementation of the per-row callback for binary format */
 bool
-CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
-					 bool *nulls)
+CopyFromBinaryOneRow(CopyFromState ccstate, ExprContext *econtext, Datum *values,
+					 bool *nulls, CopyFromRowInfo * rowinfo)
 {
+	CopyFromStateBuiltins *cstate = (CopyFromStateBuiltins *) ccstate;
 	TupleDesc	tupDesc;
 	AttrNumber	attr_count;
-	FmgrInfo   *in_functions = cstate->in_functions;
-	Oid		   *typioparams = cstate->typioparams;
+	FmgrInfo   *in_functions = cstate->base.in_functions;
+	Oid		   *typioparams = cstate->base.typioparams;
 	int16		fld_count;
 	ListCell   *cur;
 
-	tupDesc = RelationGetDescr(cstate->rel);
-	attr_count = list_length(cstate->attnumlist);
+	tupDesc = RelationGetDescr(cstate->base.rel);
+	attr_count = list_length(cstate->base.attnumlist);
 
-	cstate->cur_lineno++;
+	cstate->base.cur_lineno++;
 
 	if (!CopyGetInt16(cstate, &fld_count))
 	{
@@ -1138,19 +1156,29 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
 				 errmsg("row field count is %d, expected %d",
 						(int) fld_count, attr_count)));
 
-	foreach(cur, cstate->attnumlist)
+	foreach(cur, cstate->base.attnumlist)
 	{
 		int			attnum = lfirst_int(cur);
 		int			m = attnum - 1;
 		Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
-		cstate->cur_attname = NameStr(att->attname);
+		cstate->base.cur_attname = NameStr(att->attname);
 		values[m] = CopyReadBinaryAttribute(cstate,
 											&in_functions[m],
 											typioparams[m],
 											att->atttypmod,
 											&nulls[m]);
-		cstate->cur_attname = NULL;
+		cstate->base.cur_attname = NULL;
+	}
+
+	if (rowinfo)
+	{
+		/*
+		 * XXX: We used to use line_buf.len but we don't actually use line_buf
+		 * in binary format.
+		 */
+		rowinfo->lineno = cstate->base.cur_lineno;
+		rowinfo->tuplen = cstate->line_buf.len;
 	}
 
 	return true;
@@ -1164,12 +1192,12 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
  * in the final value of line_buf.
  */
 static bool
-CopyReadLine(CopyFromState cstate, bool is_csv)
+CopyReadLine(CopyFromStateBuiltins * cstate, bool is_csv)
 {
 	bool		result;
 
 	resetStringInfo(&cstate->line_buf);
-	cstate->line_buf_valid = false;
+	cstate->base.line_buf_valid = false;
 
 	/* Parse data and transfer into line_buf */
 	result = CopyReadLineText(cstate, is_csv);
@@ -1181,13 +1209,13 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 		 * after \. up to the protocol end of copy data.  (XXX maybe better
 		 * not to treat \. as special?)
 		 */
-		if (cstate->copy_src == COPY_FRONTEND)
+		if (cstate->base.copy_src == COPY_FRONTEND)
 		{
 			int			inbytes;
 
 			do
 			{
-				inbytes = CopyGetData(cstate, cstate->input_buf,
+				inbytes = CopyGetData((CopyFromState) cstate, cstate->input_buf,
 									  1, INPUT_BUF_SIZE);
 			} while (inbytes > 0);
 			cstate->input_buf_index = 0;
@@ -1231,7 +1259,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
 	}
 
 	/* Now it's safe to use the buffer in error messages */
-	cstate->line_buf_valid = true;
+	cstate->base.line_buf_valid = true;
 
 	return result;
 }
@@ -1240,7 +1268,7 @@ CopyReadLine(CopyFromState cstate, bool is_csv)
  * CopyReadLineText - inner loop of CopyReadLine for text mode
  */
 static bool
-CopyReadLineText(CopyFromState cstate, bool is_csv)
+CopyReadLineText(CopyFromStateBuiltins * cstate, bool is_csv)
 {
 	char	   *copy_input_buf;
 	int			input_buf_ptr;
@@ -1257,8 +1285,8 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 
 	if (is_csv)
 	{
-		quotec = cstate->opts.quote[0];
-		escapec = cstate->opts.escape[0];
+		quotec = cstate->base.opts.quote[0];
+		escapec = cstate->base.opts.escape[0];
 		/* ignore special escape processing if it's the same as quotec */
 		if (quotec == escapec)
 			escapec = '\0';
@@ -1367,7 +1395,7 @@ CopyReadLineText(CopyFromState cstate, bool is_csv)
 			 * at all --- is cur_lineno a physical or logical count?)
 			 */
 			if (in_quote && c == (cstate->eol_type == EOL_NL ? '\n' : '\r'))
-				cstate->cur_lineno++;
+				cstate->base.cur_lineno++;
 		}
 
 		/* Process \r */
@@ -1570,9 +1598,9 @@ GetDecimalFromHex(char hex)
  * The return value is the number of fields actually read.
  */
 static int
-CopyReadAttributesText(CopyFromState cstate)
+CopyReadAttributesText(CopyFromStateBuiltins * cstate)
 {
-	char		delimc = cstate->opts.delim[0];
+	char		delimc = cstate->base.opts.delim[0];
 	int			fieldno;
 	char	   *output_ptr;
 	char	   *cur_ptr;
@@ -1755,26 +1783,26 @@ CopyReadAttributesText(CopyFromState cstate)
 
 		/* Check whether raw input matched null marker */
 		input_len = end_ptr - start_ptr;
-		if (input_len == cstate->opts.null_print_len &&
-			strncmp(start_ptr, cstate->opts.null_print, input_len) == 0)
+		if (input_len == cstate->base.opts.null_print_len &&
+			strncmp(start_ptr, cstate->base.opts.null_print, input_len) == 0)
 			cstate->raw_fields[fieldno] = NULL;
 		/* Check whether raw input matched default marker */
-		else if (fieldno < list_length(cstate->attnumlist) &&
-				 cstate->opts.default_print &&
-				 input_len == cstate->opts.default_print_len &&
-				 strncmp(start_ptr, cstate->opts.default_print, input_len) == 0)
+		else if (fieldno < list_length(cstate->base.attnumlist) &&
+				 cstate->base.opts.default_print &&
+				 input_len == cstate->base.opts.default_print_len &&
+				 strncmp(start_ptr, cstate->base.opts.default_print, input_len) == 0)
 		{
 			/* fieldno is 0-indexed and attnum is 1-indexed */
-			int			m = list_nth_int(cstate->attnumlist, fieldno) - 1;
+			int			m = list_nth_int(cstate->base.attnumlist, fieldno) - 1;
 
-			if (cstate->defexprs[m] != NULL)
+			if (cstate->base.defexprs[m] != NULL)
 			{
 				/* defaults contain entries for all physical attributes */
 				cstate->defaults[m] = true;
 			}
 			else
 			{
-				TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+				TupleDesc	tupDesc = RelationGetDescr(cstate->base.rel);
 				Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
 				ereport(ERROR,
@@ -1824,11 +1852,11 @@ CopyReadAttributesText(CopyFromState cstate)
  * "standard" (i.e. common) CSV usage.
  */
 static int
-CopyReadAttributesCSV(CopyFromState cstate)
+CopyReadAttributesCSV(CopyFromStateBuiltins * cstate)
 {
-	char		delimc = cstate->opts.delim[0];
-	char		quotec = cstate->opts.quote[0];
-	char		escapec = cstate->opts.escape[0];
+	char		delimc = cstate->base.opts.delim[0];
+	char		quotec = cstate->base.opts.quote[0];
+	char		escapec = cstate->base.opts.escape[0];
 	int			fieldno;
 	char	   *output_ptr;
 	char	   *cur_ptr;
@@ -1970,26 +1998,26 @@ endfield:
 
 		/* Check whether raw input matched null marker */
 		input_len = end_ptr - start_ptr;
-		if (!saw_quote && input_len == cstate->opts.null_print_len &&
-			strncmp(start_ptr, cstate->opts.null_print, input_len) == 0)
+		if (!saw_quote && input_len == cstate->base.opts.null_print_len &&
+			strncmp(start_ptr, cstate->base.opts.null_print, input_len) == 0)
 			cstate->raw_fields[fieldno] = NULL;
 		/* Check whether raw input matched default marker */
-		else if (fieldno < list_length(cstate->attnumlist) &&
-				 cstate->opts.default_print &&
-				 input_len == cstate->opts.default_print_len &&
-				 strncmp(start_ptr, cstate->opts.default_print, input_len) == 0)
+		else if (fieldno < list_length(cstate->base.attnumlist) &&
+				 cstate->base.opts.default_print &&
+				 input_len == cstate->base.opts.default_print_len &&
+				 strncmp(start_ptr, cstate->base.opts.default_print, input_len) == 0)
 		{
 			/* fieldno is 0-index and attnum is 1-index */
-			int			m = list_nth_int(cstate->attnumlist, fieldno) - 1;
+			int			m = list_nth_int(cstate->base.attnumlist, fieldno) - 1;
 
-			if (cstate->defexprs[m] != NULL)
+			if (cstate->base.defexprs[m] != NULL)
 			{
 				/* defaults contain entries for all physical attributes */
 				cstate->defaults[m] = true;
 			}
 			else
 			{
-				TupleDesc	tupDesc = RelationGetDescr(cstate->rel);
+				TupleDesc	tupDesc = RelationGetDescr(cstate->base.rel);
 				Form_pg_attribute att = TupleDescAttr(tupDesc, m);
 
 				ereport(ERROR,
@@ -2019,7 +2047,7 @@ endfield:
  * Read a binary attribute
  */
 static Datum
-CopyReadBinaryAttribute(CopyFromState cstate, FmgrInfo *flinfo,
+CopyReadBinaryAttribute(CopyFromStateBuiltins * cstate, FmgrInfo *flinfo,
 						Oid typioparam, int32 typmod,
 						bool *isnull)
 {
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index d75a70715a4..30a1d2bff6e 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -48,6 +48,12 @@ typedef enum CopyLogVerbosityChoice
 	COPY_LOG_VERBOSITY_VERBOSE, /* logs additional messages */
 } CopyLogVerbosityChoice;
 
+typedef struct CopyFromRowInfo
+{
+	uint64		lineno;
+	int			tuplen;
+}			CopyFromRowInfo;
+
 /*
  * A struct to hold COPY options, in a parsed form. All of these are related
  * to formatting, except for 'freeze', which doesn't really belong here, but
@@ -89,8 +95,6 @@ typedef struct CopyFormatOptions
 
 /* defined in copystate.h */
 typedef struct CopyToStateData *CopyToState;
-
-/* Private in commands/copyfrom.c */
 typedef struct CopyFromStateData *CopyFromState;
 
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
@@ -105,8 +109,8 @@ extern CopyFromState BeginCopyFrom(ParseState *pstate, Relation rel, Node *where
 								   const char *filename,
 								   bool is_program, copy_data_source_cb data_source_cb, List *attnamelist, List *options);
 extern void EndCopyFrom(CopyFromState cstate);
-extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext,
-						 Datum *values, bool *nulls);
+extern bool NextCopyFrom(CopyFromState cstate, ExprContext *econtext, Datum *values,
+						 bool *nulls, CopyFromRowInfo * rowinfo);
 extern bool NextCopyFromRawFields(CopyFromState cstate,
 								  char ***fields, int *nfields);
 extern void CopyFromErrorCallback(void *arg);
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 3b9982d54b8..c3d2199a0b6 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -65,6 +65,11 @@ typedef struct CopyToRoutine
  */
 typedef struct CopyFromRoutine
 {
+	/*
+	 * Estimate and return the memory size required to store the state data.
+	 */
+	Size		(*CopyFromEstimateStateSpace) (void);
+
 	/*
 	 * Set input function information. This callback is called once at the
 	 * beginning of COPY FROM.
@@ -99,12 +104,11 @@ typedef struct CopyFromRoutine
 	 * Returns false if there are no more tuples to read.
 	 */
 	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
-								   Datum *values, bool *nulls);
+								   Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);
 
 	/*
 	 * End a COPY FROM. This callback is called once at the end of COPY FROM.
 	 */
 	void		(*CopyFromEnd) (CopyFromState cstate);
 } CopyFromRoutine;
-
 #endif							/* COPYAPI_H */
diff --git a/src/include/commands/copyfrom_internal.h b/src/include/commands/copyfrom_internal.h
index c8b22af22d8..d2d19536151 100644
--- a/src/include/commands/copyfrom_internal.h
+++ b/src/include/commands/copyfrom_internal.h
@@ -15,105 +15,23 @@
 #define COPYFROM_INTERNAL_H
 
 #include "commands/copy.h"
-#include "commands/trigger.h"
-#include "nodes/miscnodes.h"
+#include "commands/copystate.h"
 
 /*
- * Represents the different source cases we need to worry about at
- * the bottom level
+ * COPY FROM state data used for builtin formats.
  */
-typedef enum CopySource
+typedef struct CopyFromStateBuiltins
 {
-	COPY_FILE,					/* from file (or a piped program) */
-	COPY_FRONTEND,				/* from frontend */
-	COPY_CALLBACK,				/* from callback function */
-} CopySource;
-
-/*
- *	Represents the end-of-line terminator type of the input
- */
-typedef enum EolType
-{
-	EOL_UNKNOWN,
-	EOL_NL,
-	EOL_CR,
-	EOL_CRNL,
-} EolType;
-
-/*
- * Represents the insert method to be used during COPY FROM.
- */
-typedef enum CopyInsertMethod
-{
-	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
-	CIM_MULTI,					/* always use table_multi_insert or
-								 * ExecForeignBatchInsert */
-	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
-								 * ExecForeignBatchInsert only if valid */
-} CopyInsertMethod;
-
-/*
- * This struct contains all the state variables used throughout a COPY FROM
- * operation.
- */
-typedef struct CopyFromStateData
-{
-	/* format routine */
-	const struct CopyFromRoutine *routine;
-
-	/* low-level state data */
-	CopySource	copy_src;		/* type of copy source */
-	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+	CopyFromStateData base;
 
 	EolType		eol_type;		/* EOL type of input */
 	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	Oid			conversion_proc;	/* encoding conversion function */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDIN */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_source_cb data_source_cb; /* function for reading data */
-
-	CopyFormatOptions opts;
 	bool	   *convert_select_flags;	/* per-column CSV/TEXT CS flags */
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-
-	/* these are just for error messages, see CopyFromErrorCallback */
-	const char *cur_relname;	/* table name for error messages */
-	uint64		cur_lineno;		/* line number for error messages */
-	const char *cur_attname;	/* current att for error messages */
-	const char *cur_attval;		/* current att value for error messages */
-	bool		relname_only;	/* don't output line number, att, etc. */
 
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	AttrNumber	num_defaults;	/* count of att that are missing and have
-								 * default value */
-	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
-	Oid		   *typioparams;	/* array of element types for in_functions */
-	ErrorSaveContext *escontext;	/* soft error trapped during in_functions
-									 * execution */
-	uint64		num_errors;		/* total number of rows which contained soft
-								 * errors */
-	int		   *defmap;			/* array of default att numbers related to
-								 * missing att */
-	ExprState **defexprs;		/* array of default att expressions for all
-								 * att */
 	bool	   *defaults;		/* if DEFAULT marker was found for
 								 * corresponding att */
-	bool		volatile_defexprs;	/* is any of defexprs volatile? */
-	List	   *range_table;	/* single element list of RangeTblEntry */
-	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
-	ExprState  *qualexpr;
-
-	TransitionCaptureState *transition_capture;
 
 	/*
 	 * These variables are used to reduce overhead in COPY FROM.
@@ -141,7 +59,6 @@ typedef struct CopyFromStateData
 	 * appropriate.  (In binary mode, line_buf is not used.)
 	 */
 	StringInfoData line_buf;
-	bool		line_buf_valid; /* contains the row being processed? */
 
 	/*
 	 * input_buf holds input data, already converted to database encoding.
@@ -175,23 +92,22 @@ typedef struct CopyFromStateData
 	char	   *raw_buf;
 	int			raw_buf_index;	/* next byte to process */
 	int			raw_buf_len;	/* total # of bytes stored */
-	bool		raw_reached_eof;	/* true if we reached EOF */
 
 	/* Shorthand for number of unconsumed bytes available in raw_buf */
 #define RAW_BUF_BYTES(cstate) ((cstate)->raw_buf_len - (cstate)->raw_buf_index)
-
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyFromStateData;
+}			CopyFromStateBuiltins;
 
 extern void ReceiveCopyBegin(CopyFromState cstate);
 extern void ReceiveCopyBinaryHeader(CopyFromState cstate);
 
 /* One-row callbacks for built-in formats defined in copyfromparse.c */
 extern bool CopyFromTextOneRow(CopyFromState cstate, ExprContext *econtext,
-							   Datum *values, bool *nulls);
+							   Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);
 extern bool CopyFromCSVOneRow(CopyFromState cstate, ExprContext *econtext,
-							  Datum *values, bool *nulls);
+							  Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);
 extern bool CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext,
-								 Datum *values, bool *nulls);
+								 Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);
+
+extern Size CopyFromBuiltinsEstimateSpace(void);
 
 #endif							/* COPYFROM_INTERNAL_H */
diff --git a/src/include/commands/copystate.h b/src/include/commands/copystate.h
index 7561083a323..145dccd0f8f 100644
--- a/src/include/commands/copystate.h
+++ b/src/include/commands/copystate.h
@@ -17,6 +17,8 @@
 #include "postgres.h"
 #include "commands/copy.h"
 #include "executor/execdesc.h"
+#include "commands/trigger.h"
+#include "nodes/miscnodes.h"
 
 /*
  * Represents the different dest cases we need to worry about at
@@ -65,4 +67,99 @@ typedef struct CopyToStateData
 	uint64		bytes_processed;	/* number of bytes processed so far */
 } CopyToStateData;
 
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_FILE,					/* from file (or a piped program) */
+	COPY_FRONTEND,				/* from frontend */
+	COPY_CALLBACK,				/* from callback function */
+} CopySource;
+
+/*
+ *	Represents the end-of-line terminator type of the input
+ */
+typedef enum EolType
+{
+	EOL_UNKNOWN,
+	EOL_NL,
+	EOL_CR,
+	EOL_CRNL,
+} EolType;
+
+/*
+ * Represents the insert method to be used during COPY FROM.
+ */
+typedef enum CopyInsertMethod
+{
+	CIM_SINGLE,					/* use table_tuple_insert or ExecForeignInsert */
+	CIM_MULTI,					/* always use table_multi_insert or
+								 * ExecForeignBatchInsert */
+	CIM_MULTI_CONDITIONAL,		/* use table_multi_insert or
+								 * ExecForeignBatchInsert only if valid */
+} CopyInsertMethod;
+
+/*
+ * This struct contains all the state variables used throughout a COPY FROM
+ * operation.
+ */
+typedef struct CopyFromStateData
+{
+	/* format routine */
+	const struct CopyFromRoutine *routine;
+
+	/* low-level state data */
+	CopySource	copy_src;		/* type of copy source */
+	FILE	   *copy_file;		/* used if copy_src == COPY_FILE */
+	StringInfo	fe_msgbuf;		/* used if copy_src == COPY_FRONTEND */
+	bool		reached_eof;	/* true if we reached EOF */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDIN */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_source_cb data_source_cb; /* function for reading data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+
+	/* these are just for error messages, see CopyFromErrorCallback */
+	const char *cur_relname;	/* table name for error messages */
+	uint64		cur_lineno;		/* line number for error messages */
+	const char *cur_attname;	/* current att for error messages */
+	const char *cur_attval;		/* current att value for error messages */
+	bool		relname_only;	/* don't output line number, att, etc. */
+	StringInfo	line_buf;
+	bool		line_buf_valid;
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *in_functions;	/* array of input functions for each attrs */
+	Oid		   *typioparams;	/* array of element types for in_functions */
+	ErrorSaveContext *escontext;	/* soft error trapped during in_functions
+									 * execution */
+	uint64		num_errors;		/* total number of rows which contained soft
+								 * errors */
+	AttrNumber	num_defaults;	/* count of att that are missing and have
+								 * default value */
+	int		   *defmap;			/* array of default att numbers related to
+								 * missing att */
+	ExprState **defexprs;		/* array of default att expressions for all
+								 * att */
+	bool		volatile_defexprs;	/* is any of defexprs volatile? */
+	List	   *range_table;	/* single element list of RangeTblEntry */
+	List	   *rteperminfos;	/* single element list of RTEPermissionInfo */
+	ExprState  *qualexpr;
+
+	TransitionCaptureState *transition_capture;
+
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyFromStateData;
+
 #endif
-- 
2.47.3

0001-Separate-format-specific-fields-from-CopyToStateData.patchapplication/octet-stream; name=0001-Separate-format-specific-fields-from-CopyToStateData.patchDownload
From 7d8ac622144e20c9e3aaf958bc0644a3c74fffea Mon Sep 17 00:00:00 2001
From: Masahiko Sawada <sawada.mshk@gmail.com>
Date: Thu, 6 Nov 2025 00:02:03 -0800
Subject: [PATCH 1/6] Separate format-specific fields from CopyToStateData
 struct.

Previously, CopyToStateData struct contained all state variables used
throughout COPY TO operations. To support the upcoming pluggable COPY
format feature, this commit moves fields specific to built-in formats
into their own dedicated struct.

This commit also introduces a new callback CopyToEstimateStateSpace,
allowing format routines to estimate and return the memory size needed
for their state data. The format's state data must embed
CopyToStateData as its first field, and the returned size must be
equal to or larger than CopyToStateData. While separate structs for
core and format-specific usage might seem feasible, using
contiguousmemory avoids overhead from extra pointer traversal.
---
 src/backend/commands/copyto.c    | 249 ++++++++++++++++---------------
 src/include/commands/copy.h      |   6 +-
 src/include/commands/copyapi.h   |   5 +
 src/include/commands/copystate.h |  68 +++++++++
 4 files changed, 208 insertions(+), 120 deletions(-)
 create mode 100644 src/include/commands/copystate.h

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index cef452584e5..6a0a66507ba 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -22,6 +22,8 @@
 #include "access/tableam.h"
 #include "catalog/pg_inherits.h"
 #include "commands/copyapi.h"
+#include "commands/copystate.h"
+#include "commands/defrem.h"
 #include "commands/progress.h"
 #include "executor/execdesc.h"
 #include "executor/executor.h"
@@ -39,19 +41,7 @@
 #include "utils/snapmgr.h"
 
 /*
- * Represents the different dest cases we need to worry about at
- * the bottom level
- */
-typedef enum CopyDest
-{
-	COPY_FILE,					/* to file (or a piped program) */
-	COPY_FRONTEND,				/* to frontend */
-	COPY_CALLBACK,				/* to callback function */
-} CopyDest;
-
-/*
- * This struct contains all the state variables used throughout a COPY TO
- * operation.
+ * Struct used for text and CSV format.
  *
  * Multi-byte encodings: all supported client-side encodings encode multi-byte
  * characters by having the first byte's high bit set. Subsequent bytes of the
@@ -64,41 +54,14 @@ typedef enum CopyDest
  * invoke pg_encoding_mblen() to skip over them. encoding_embeds_ascii is true
  * when we have to do it the hard way.
  */
-typedef struct CopyToStateData
+typedef struct CopyToStateTextLike
 {
-	/* format-specific routines */
-	const CopyToRoutine *routine;
-
-	/* low-level state data */
-	CopyDest	copy_dest;		/* type of copy source/destination */
-	FILE	   *copy_file;		/* used if copy_dest == COPY_FILE */
-	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+	CopyToStateData base;
 
 	int			file_encoding;	/* file or remote side's character encoding */
 	bool		need_transcoding;	/* file encoding diff from server? */
 	bool		encoding_embeds_ascii;	/* ASCII can be non-first byte? */
-
-	/* parameters from the COPY command */
-	Relation	rel;			/* relation to copy to */
-	QueryDesc  *queryDesc;		/* executable query to copy from */
-	List	   *attnumlist;		/* integer list of attnums to copy */
-	char	   *filename;		/* filename, or NULL for STDOUT */
-	bool		is_program;		/* is 'filename' a program to popen? */
-	copy_data_dest_cb data_dest_cb; /* function for writing data */
-
-	CopyFormatOptions opts;
-	Node	   *whereClause;	/* WHERE condition (or NULL) */
-	List	   *partitions;		/* OID list of partitions to copy data from */
-
-	/*
-	 * Working state
-	 */
-	MemoryContext copycontext;	/* per-copy execution context */
-
-	FmgrInfo   *out_functions;	/* lookup info for output functions */
-	MemoryContext rowcontext;	/* per-row evaluation context */
-	uint64		bytes_processed;	/* number of bytes processed so far */
-} CopyToStateData;
+}			CopyToStateTextLike;
 
 /* DestReceiver for COPY (query) TO */
 typedef struct
@@ -116,13 +79,14 @@ static const char BinarySignature[11] = "PGCOPY\n\377\r\n\0";
 static void EndCopy(CopyToState cstate);
 static void ClosePipeToProgram(CopyToState cstate);
 static void CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot);
-static void CopyAttributeOutText(CopyToState cstate, const char *string);
-static void CopyAttributeOutCSV(CopyToState cstate, const char *string,
+static void CopyAttributeOutText(CopyToStateTextLike * cstate, const char *string);
+static void CopyAttributeOutCSV(CopyToStateTextLike * cstate, const char *string,
 								bool use_quote);
 static void CopyRelationTo(CopyToState cstate, Relation rel, Relation root_rel,
 						   uint64 *processed);
 
 /* built-in format-specific routines */
+static Size CopyToEstimateStateTextLike(void);
 static void CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc);
 static void CopyToTextLikeOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
 static void CopyToTextOneRow(CopyToState cstate, TupleTableSlot *slot);
@@ -130,6 +94,7 @@ static void CopyToCSVOneRow(CopyToState cstate, TupleTableSlot *slot);
 static void CopyToTextLikeOneRow(CopyToState cstate, TupleTableSlot *slot,
 								 bool is_csv);
 static void CopyToTextLikeEnd(CopyToState cstate);
+static Size CopyToEstimateStateBinary(void);
 static void CopyToBinaryStart(CopyToState cstate, TupleDesc tupDesc);
 static void CopyToBinaryOutFunc(CopyToState cstate, Oid atttypid, FmgrInfo *finfo);
 static void CopyToBinaryOneRow(CopyToState cstate, TupleTableSlot *slot);
@@ -155,6 +120,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);
 
 /* text format */
 static const CopyToRoutine CopyToRoutineText = {
+	.CopyToEstimateStateSpace = CopyToEstimateStateTextLike,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToTextOneRow,
@@ -163,6 +129,7 @@ static const CopyToRoutine CopyToRoutineText = {
 
 /* CSV format */
 static const CopyToRoutine CopyToRoutineCSV = {
+	.CopyToEstimateStateSpace = CopyToEstimateStateTextLike,
 	.CopyToStart = CopyToTextLikeStart,
 	.CopyToOutFunc = CopyToTextLikeOutFunc,
 	.CopyToOneRow = CopyToCSVOneRow,
@@ -171,62 +138,77 @@ static const CopyToRoutine CopyToRoutineCSV = {
 
 /* binary format */
 static const CopyToRoutine CopyToRoutineBinary = {
+	.CopyToEstimateStateSpace = CopyToEstimateStateBinary,
 	.CopyToStart = CopyToBinaryStart,
 	.CopyToOutFunc = CopyToBinaryOutFunc,
 	.CopyToOneRow = CopyToBinaryOneRow,
 	.CopyToEnd = CopyToBinaryEnd,
 };
 
-/* Return a COPY TO routine for the given options */
-static const CopyToRoutine *
-CopyToGetRoutine(const CopyFormatOptions *opts)
+static Size
+CopyToEstimateStateTextLike(void)
 {
-	if (opts->csv_mode)
-		return &CopyToRoutineCSV;
-	else if (opts->binary)
-		return &CopyToRoutineBinary;
-
-	/* default is text */
-	return &CopyToRoutineText;
+	return sizeof(CopyToStateTextLike);
 }
 
 /* Implementation of the start callback for text and CSV formats */
 static void
-CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+CopyToTextLikeStart(CopyToState ccstate, TupleDesc tupDesc)
 {
+	CopyToStateTextLike *cstate = (CopyToStateTextLike *) ccstate;
+
+	/* Use client encoding when ENCODING option is not specified. */
+	if (cstate->base.opts.file_encoding < 0)
+		cstate->file_encoding = pg_get_client_encoding();
+	else
+		cstate->file_encoding = cstate->base.opts.file_encoding;
+
+	/*
+	 * Set up encoding conversion info if the file and server encodings differ
+	 * (see also pg_server_to_any).
+	 */
+	if (cstate->file_encoding == GetDatabaseEncoding() ||
+		cstate->file_encoding == PG_SQL_ASCII)
+		cstate->need_transcoding = false;
+	else
+		cstate->need_transcoding = true;
+
+	/* See Multibyte encoding comment above */
+	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
+
 	/*
 	 * For non-binary copy, we need to convert null_print to file encoding,
 	 * because it will be sent directly with CopySendString.
 	 */
 	if (cstate->need_transcoding)
-		cstate->opts.null_print_client = pg_server_to_any(cstate->opts.null_print,
-														  cstate->opts.null_print_len,
-														  cstate->file_encoding);
+		cstate->base.opts.null_print_client = pg_server_to_any(cstate->base.opts.null_print,
+															   cstate->base.opts.null_print_len,
+															   cstate->file_encoding);
 
 	/* if a header has been requested send the line */
-	if (cstate->opts.header_line == COPY_HEADER_TRUE)
+	if (cstate->base.opts.header_line == COPY_HEADER_TRUE)
 	{
 		ListCell   *cur;
 		bool		hdr_delim = false;
 
-		foreach(cur, cstate->attnumlist)
+		foreach(cur, cstate->base.attnumlist)
 		{
 			int			attnum = lfirst_int(cur);
 			char	   *colname;
 
 			if (hdr_delim)
-				CopySendChar(cstate, cstate->opts.delim[0]);
+				CopySendChar(ccstate, cstate->base.opts.delim[0]);
 			hdr_delim = true;
 
 			colname = NameStr(TupleDescAttr(tupDesc, attnum - 1)->attname);
 
-			if (cstate->opts.csv_mode)
+			if (cstate->base.opts.csv_mode)
 				CopyAttributeOutCSV(cstate, colname, false);
 			else
 				CopyAttributeOutText(cstate, colname);
 		}
 
-		CopySendTextLikeEndOfRow(cstate);
+		CopySendTextLikeEndOfRow(ccstate);
 	}
 }
 
@@ -294,10 +276,10 @@ CopyToTextLikeOneRow(CopyToState cstate,
 										value);
 
 			if (is_csv)
-				CopyAttributeOutCSV(cstate, string,
+				CopyAttributeOutCSV((CopyToStateTextLike *) cstate, string,
 									cstate->opts.force_quote_flags[attnum - 1]);
 			else
-				CopyAttributeOutText(cstate, string);
+				CopyAttributeOutText((CopyToStateTextLike *) cstate, string);
 		}
 	}
 
@@ -311,6 +293,13 @@ CopyToTextLikeEnd(CopyToState cstate)
 	/* Nothing to do here */
 }
 
+static Size
+CopyToEstimateStateBinary(void)
+{
+	/* Binary format doesn't require additional fields */
+	return sizeof(CopyToStateData);
+}
+
 /*
  * Implementation of the start callback for binary format. Send a header
  * for a binary copy.
@@ -406,7 +395,7 @@ SendCopyBegin(CopyToState cstate)
 	for (i = 0; i < natts; i++)
 		pq_sendint16(&buf, format); /* per-column formats */
 	pq_endmessage(&buf);
-	cstate->copy_dest = COPY_FRONTEND;
+	cstate->copy_dest = COPY_DEST_FRONTEND;
 }
 
 static void
@@ -453,7 +442,7 @@ CopySendEndOfRow(CopyToState cstate)
 
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			if (fwrite(fe_msgbuf->data, fe_msgbuf->len, 1,
 					   cstate->copy_file) != 1 ||
 				ferror(cstate->copy_file))
@@ -487,11 +476,11 @@ CopySendEndOfRow(CopyToState cstate)
 							 errmsg("could not write to COPY file: %m")));
 			}
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* Dump the accumulated row as one CopyData message */
 			(void) pq_putmessage(PqMsg_CopyData, fe_msgbuf->data, fe_msgbuf->len);
 			break;
-		case COPY_CALLBACK:
+		case COPY_DEST_CALLBACK:
 			cstate->data_dest_cb(fe_msgbuf->data, fe_msgbuf->len);
 			break;
 	}
@@ -512,7 +501,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 {
 	switch (cstate->copy_dest)
 	{
-		case COPY_FILE:
+		case COPY_DEST_FILE:
 			/* Default line termination depends on platform */
 #ifndef WIN32
 			CopySendChar(cstate, '\n');
@@ -520,7 +509,7 @@ CopySendTextLikeEndOfRow(CopyToState cstate)
 			CopySendString(cstate, "\r\n");
 #endif
 			break;
-		case COPY_FRONTEND:
+		case COPY_DEST_FRONTEND:
 			/* The FE/BE protocol uses \n as newline for all platforms */
 			CopySendChar(cstate, '\n');
 			break;
@@ -614,6 +603,54 @@ EndCopy(CopyToState cstate)
 	pfree(cstate);
 }
 
+/*
+ * Allocate COPY TO state data based on the format's EsimateStateSpace
+ * callback.
+ */
+static CopyToState
+create_copyto_state(ParseState *pstate, List *options)
+{
+	const CopyToRoutine *routine;
+	CopyToState cstate;
+	Size		req_size;
+	bool		format_specified = false;
+
+	routine = &CopyToRoutineText;	/* default */
+	foreach_node(DefElem, defel, options)
+	{
+		if (strcmp(defel->defname, "format") == 0)
+		{
+			char	   *fmt = defGetString(defel);
+
+			if (format_specified)
+				errorConflictingDefElem(defel, pstate);
+			format_specified = true;
+			if (strcmp(fmt, "text") == 0)
+				routine = &CopyToRoutineText;
+			else if (strcmp(fmt, "csv") == 0)
+				routine = &CopyToRoutineCSV;
+			else if (strcmp(fmt, "binary") == 0)
+				routine = &CopyToRoutineBinary;
+			else
+				ereport(ERROR,
+						(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+						 errmsg("COPY format \"%s\" not recognized", fmt),
+						 parser_errposition(pstate, defel->location)));
+
+			break;
+		}
+	}
+
+	req_size = routine->CopyToEstimateStateSpace();
+	Assert(req_size >= sizeof(CopyToStateData));
+
+	/* Allocate workspace and zero all fields */
+	cstate = (CopyToState) palloc0(req_size);
+	cstate->routine = routine;
+
+	return cstate;
+}
+
 /*
  * Setup CopyToState to read tuples from a table or a query for COPY TO.
  *
@@ -718,9 +755,7 @@ BeginCopyTo(ParseState *pstate,
 							RelationGetRelationName(rel))));
 	}
 
-
-	/* Allocate workspace and zero all fields */
-	cstate = (CopyToStateData *) palloc0(sizeof(CopyToStateData));
+	cstate = create_copyto_state(pstate, options);
 
 	/*
 	 * We allocate everything used by a cstate in a new memory context. This
@@ -735,9 +770,6 @@ BeginCopyTo(ParseState *pstate,
 	/* Extract options from the statement node tree */
 	ProcessCopyOptions(pstate, &cstate->opts, false /* is_from */ , options);
 
-	/* Set format routine */
-	cstate->routine = CopyToGetRoutine(&cstate->opts);
-
 	/* Process the source/target relation or query */
 	if (rel)
 	{
@@ -918,31 +950,12 @@ BeginCopyTo(ParseState *pstate,
 		}
 	}
 
-	/* Use client encoding when ENCODING option is not specified. */
-	if (cstate->opts.file_encoding < 0)
-		cstate->file_encoding = pg_get_client_encoding();
-	else
-		cstate->file_encoding = cstate->opts.file_encoding;
-
-	/*
-	 * Set up encoding conversion info if the file and server encodings differ
-	 * (see also pg_server_to_any).
-	 */
-	if (cstate->file_encoding == GetDatabaseEncoding() ||
-		cstate->file_encoding == PG_SQL_ASCII)
-		cstate->need_transcoding = false;
-	else
-		cstate->need_transcoding = true;
-
-	/* See Multibyte encoding comment above */
-	cstate->encoding_embeds_ascii = PG_ENCODING_IS_CLIENT_ONLY(cstate->file_encoding);
-
-	cstate->copy_dest = COPY_FILE;	/* default */
+	cstate->copy_dest = COPY_DEST_FILE; /* default */
 
 	if (data_dest_cb)
 	{
 		progress_vals[1] = PROGRESS_COPY_TYPE_CALLBACK;
-		cstate->copy_dest = COPY_CALLBACK;
+		cstate->copy_dest = COPY_DEST_CALLBACK;
 		cstate->data_dest_cb = data_dest_cb;
 	}
 	else if (pipe)
@@ -1233,16 +1246,16 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
 #define DUMPSOFAR() \
 	do { \
 		if (ptr > start) \
-			CopySendData(cstate, start, ptr - start); \
+			CopySendData((CopyToState) cstate, start, ptr - start); \
 	} while (0)
 
 static void
-CopyAttributeOutText(CopyToState cstate, const char *string)
+CopyAttributeOutText(CopyToStateTextLike * cstate, const char *string)
 {
 	const char *ptr;
 	const char *start;
 	char		c;
-	char		delimc = cstate->opts.delim[0];
+	char		delimc = cstate->base.opts.delim[0];
 
 	if (cstate->need_transcoding)
 		ptr = pg_server_to_any(string, strlen(string), cstate->file_encoding);
@@ -1307,14 +1320,14 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				}
 				/* if we get here, we need to convert the control char */
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
-				CopySendChar(cstate, c);
+				CopySendChar((CopyToState) cstate, '\\');
+				CopySendChar((CopyToState) cstate, c);
 				start = ++ptr;	/* do not include char in next run */
 			}
 			else if (c == '\\' || c == delimc)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
+				CopySendChar((CopyToState) cstate, '\\');
 				start = ptr++;	/* we include char in next run */
 			}
 			else if (IS_HIGHBIT_SET(c))
@@ -1367,14 +1380,14 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
 				}
 				/* if we get here, we need to convert the control char */
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
-				CopySendChar(cstate, c);
+				CopySendChar((CopyToState) cstate, '\\');
+				CopySendChar((CopyToState) cstate, c);
 				start = ++ptr;	/* do not include char in next run */
 			}
 			else if (c == '\\' || c == delimc)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, '\\');
+				CopySendChar((CopyToState) cstate, '\\');
 				start = ptr++;	/* we include char in next run */
 			}
 			else
@@ -1390,19 +1403,19 @@ CopyAttributeOutText(CopyToState cstate, const char *string)
  * CSV-style escaping
  */
 static void
-CopyAttributeOutCSV(CopyToState cstate, const char *string,
+CopyAttributeOutCSV(CopyToStateTextLike * cstate, const char *string,
 					bool use_quote)
 {
 	const char *ptr;
 	const char *start;
 	char		c;
-	char		delimc = cstate->opts.delim[0];
-	char		quotec = cstate->opts.quote[0];
-	char		escapec = cstate->opts.escape[0];
-	bool		single_attr = (list_length(cstate->attnumlist) == 1);
+	char		delimc = cstate->base.opts.delim[0];
+	char		quotec = cstate->base.opts.quote[0];
+	char		escapec = cstate->base.opts.escape[0];
+	bool		single_attr = (list_length(cstate->base.attnumlist) == 1);
 
 	/* force quoting if it matches null_print (before conversion!) */
-	if (!use_quote && strcmp(string, cstate->opts.null_print) == 0)
+	if (!use_quote && strcmp(string, cstate->base.opts.null_print) == 0)
 		use_quote = true;
 
 	if (cstate->need_transcoding)
@@ -1445,7 +1458,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 
 	if (use_quote)
 	{
-		CopySendChar(cstate, quotec);
+		CopySendChar((CopyToState) cstate, quotec);
 
 		/*
 		 * We adopt the same optimization strategy as in CopyAttributeOutText
@@ -1456,7 +1469,7 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 			if (c == quotec || c == escapec)
 			{
 				DUMPSOFAR();
-				CopySendChar(cstate, escapec);
+				CopySendChar((CopyToState) cstate, escapec);
 				start = ptr;	/* we include char in next run */
 			}
 			if (IS_HIGHBIT_SET(c) && cstate->encoding_embeds_ascii)
@@ -1466,12 +1479,12 @@ CopyAttributeOutCSV(CopyToState cstate, const char *string,
 		}
 		DUMPSOFAR();
 
-		CopySendChar(cstate, quotec);
+		CopySendChar((CopyToState) cstate, quotec);
 	}
 	else
 	{
 		/* If it doesn't need quoting, we can just dump it as-is */
-		CopySendString(cstate, ptr);
+		CopySendString((CopyToState) cstate, ptr);
 	}
 }
 
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 541176e1980..d75a70715a4 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -87,10 +87,12 @@ typedef struct CopyFormatOptions
 	List	   *convert_select; /* list of column names (can be NIL) */
 } CopyFormatOptions;
 
-/* These are private in commands/copy[from|to].c */
-typedef struct CopyFromStateData *CopyFromState;
+/* defined in copystate.h */
 typedef struct CopyToStateData *CopyToState;
 
+/* Private in commands/copyfrom.c */
+typedef struct CopyFromStateData *CopyFromState;
+
 typedef int (*copy_data_source_cb) (void *outbuf, int minread, int maxread);
 typedef void (*copy_data_dest_cb) (void *data, int len);
 
diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 2a2d2f9876b..3b9982d54b8 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -22,6 +22,11 @@
  */
 typedef struct CopyToRoutine
 {
+	/*
+	 * Estimate and return the memory size required to store the state data.
+	 */
+	Size		(*CopyToEstimateStateSpace) (void);
+
 	/*
 	 * Set output function information. This callback is called once at the
 	 * beginning of COPY TO.
diff --git a/src/include/commands/copystate.h b/src/include/commands/copystate.h
new file mode 100644
index 00000000000..7561083a323
--- /dev/null
+++ b/src/include/commands/copystate.h
@@ -0,0 +1,68 @@
+/*-------------------------------------------------------------------------
+ *
+ * copystate.h
+ *	  Definitions for state data used by COPY TO and COPY FROM.
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/include/commands/copystate.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef COPYSTATE_H
+#define COPYSTATE_H
+
+#include "postgres.h"
+#include "commands/copy.h"
+#include "executor/execdesc.h"
+
+/*
+ * Represents the different dest cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopyDest
+{
+	COPY_DEST_FILE,				/* to/from file (or a piped program) */
+	COPY_DEST_FRONTEND,			/* to/from frontend */
+	COPY_DEST_CALLBACK,			/* to/from callback function */
+} CopyDest;
+
+/*
+ * This struct contains the state variables commonly used throughout a
+ * COPY TO operation.
+ */
+typedef struct CopyToStateData
+{
+	/* format-specific routines */
+	const struct CopyToRoutine *routine;
+
+	/* low-level state data */
+	CopyDest	copy_dest;		/* type of copy source/destination */
+	FILE	   *copy_file;		/* used if copy_dest == COPY_DEST_FILE */
+	StringInfo	fe_msgbuf;		/* used for all dests during COPY TO */
+
+	/* parameters from the COPY command */
+	Relation	rel;			/* relation to copy to */
+	QueryDesc  *queryDesc;		/* executable query to copy from */
+	List	   *attnumlist;		/* integer list of attnums to copy */
+	char	   *filename;		/* filename, or NULL for STDOUT */
+	bool		is_program;		/* is 'filename' a program to popen? */
+	copy_data_dest_cb data_dest_cb; /* function for writing data */
+
+	CopyFormatOptions opts;
+	Node	   *whereClause;	/* WHERE condition (or NULL) */
+	List	   *partitions;		/* OID list of partitions to copy data from */
+
+	/*
+	 * Working state
+	 */
+	MemoryContext copycontext;	/* per-copy execution context */
+
+	FmgrInfo   *out_functions;	/* lookup info for output functions */
+	MemoryContext rowcontext;	/* per-row evaluation context */
+	uint64		bytes_processed;	/* number of bytes processed so far */
+} CopyToStateData;
+
+#endif
-- 
2.47.3

#331Sutou Kouhei
kou@clear-code.com
In reply to: Masahiko Sawada (#330)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <CAD21AoDCEfe0PQhMEx8G1rpS7RrzGCJPobeqm3Mpn2bgbUH9nQ@mail.gmail.com>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Fri, 14 Nov 2025 12:19:47 -0800,
Masahiko Sawada <sawada.mshk@gmail.com> wrote:

This thread has involved extensive discussion, and the patch needs to
be rebased. I'd like to summarize the current status of this patch and
our discussions. I've attached updated patches that implement the
whole ideas of this feature to help provide a clearer overall picture.

Thanks!

I'm not sure whether we should include option parsing
feature to this patch's scope or not but I'm OK with this
approach.

Here are my review comments but they are minor
comments. They don't require design change.

0001:

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index cef452584e5..6a0a66507ba 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -155,6 +120,7 @@ static void CopySendInt16(CopyToState cstate, int16 val);

/* text format */
static const CopyToRoutine CopyToRoutineText = {
+ .CopyToEstimateStateSpace = CopyToEstimateStateTextLike,

How about including "Space"
(CopyToEstimateStateSpaceTextLike)?

How about renaming this to
"CopyToTextLikeEstimateStateSpace" because other functions
use "CopyToTextLikeXXX" style.

@@ -171,62 +138,77 @@ static const CopyToRoutine CopyToRoutineCSV = {
...
 /* Implementation of the start callback for text and CSV formats */
 static void
-CopyToTextLikeStart(CopyToState cstate, TupleDesc tupDesc)
+CopyToTextLikeStart(CopyToState ccstate, TupleDesc tupDesc)
 {
+	CopyToStateTextLike *cstate = (CopyToStateTextLike *) ccstate;

How about always using "cstate" for "CopyToState"? In other
functions in this patch, "CopyToState" is referred "cstate"
or "cctate".

We can use "state" or something for
"CopyToStateTextLike". (0002 uses "state" for
"CopyFromStateBuiltins".)

+		cstate->base.opts.null_print_client = pg_server_to_any(cstate->base.opts.null_print,
+															   cstate->base.opts.null_print_len,
+															   cstate->file_encoding);

We can use "ccstate->" instead of "cstate->base." in this
function.

@@ -614,6 +603,54 @@ EndCopy(CopyToState cstate)
pfree(cstate);
}

+/*
+ * Allocate COPY TO state data based on the format's EsimateStateSpace
+ * callback.
+ */
+static CopyToState
+create_copyto_state(ParseState *pstate, List *options)

"Esimate" ->
"Estimate"

How about using CamelCase like "CreateCopyToState" for
function name like other functions in this file?

+ Size req_size;

"state_size" may be better.

@@ -1233,16 +1246,16 @@ CopyOneRowTo(CopyToState cstate, TupleTableSlot *slot)
...
 static void
-CopyAttributeOutText(CopyToState cstate, const char *string)
+CopyAttributeOutText(CopyToStateTextLike * cstate, const char *string)
 {

CopyAttributeOutText(CopyToState cstate, const char *string)
{
CopyToStateTextLike *state = (CopyToStateTextLike *)cstate;

may reduce "cstate->base." and "(CopyToState) cstate" in
this function.

BTW, could you remove a needless space after "*" in
"CopyToStateTextLike * cstate"?

0002:

diff --git a/src/backend/commands/copyfrom.c b/src/backend/commands/copyfrom.c
index 12781963b4f..0c51e5ba5e1 100644
--- a/src/backend/commands/copyfrom.c
+++ b/src/backend/commands/copyfrom.c
@@ -129,6 +131,7 @@ static void CopyFromBinaryEnd(CopyFromState cstate);

/* text format */
static const CopyFromRoutine CopyFromRoutineText = {
+ .CopyFromEstimateStateSpace = CopyFromBuiltinsEstimateSpace,

How about including "State"
("CopyFromBuiltinsEstimateStateSpace")?

@@ -145,54 +149,129 @@ static const CopyFromRoutine CopyFromRoutineCSV = {
...
+/*
+ * Common routine to initialize CopyFromStateBuiltins data.
+ */
+static void
+initialize_copyfrom_bultins_state(CopyFromStateBuiltins * state, TupleDesc tupDesc)

* How about using CamelCase like other functions in this file?
* How about using the same name as the struct?

InitializeCopyFromStateBuiltins?

@@ -1379,8 +1462,8 @@ CopyFrom(CopyFromState cstate)
 					/* Add this tuple to the tuple buffer */
 					CopyMultiInsertInfoStore(&multiInsertInfo,
 											 resultRelInfo, myslot,
-											 cstate->line_buf.len,
-											 cstate->cur_lineno);
+											 rowinfo.tuplen,
+											 rowinfo.lineno);

How about passing "CopyFromRowInfo *" instead of
"rowinfo.tuplen" and "rowinfo.lineno"?

@@ -1512,6 +1595,50 @@ CopyFrom(CopyFromState cstate)
return processed;
}

+static CopyFromState
+create_copyfrom_state(ParseState *pstate, List *options)

How about using CamelCase like other functions in this file?

CreateCopyFromState?

@@ -1138,19 +1156,29 @@ CopyFromBinaryOneRow(CopyFromState cstate, ExprContext *econtext, Datum *values,
...
+	if (rowinfo)
+	{
+		/*
+		 * XXX: We used to use line_buf.len but we don't actually use line_buf
+		 * in binary format.
+		 */
+		rowinfo->lineno = cstate->base.cur_lineno;
+		rowinfo->tuplen = cstate->line_buf.len;
 	}

How about always setting "0" to "rowinfo->tuplen" instead of
using "cstate->line_buf.len"?

diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index d75a70715a4..30a1d2bff6e 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -48,6 +48,12 @@ typedef enum CopyLogVerbosityChoice
...
+typedef struct CopyFromRowInfo
+{
+	uint64		lineno;
+	int			tuplen;
+}			CopyFromRowInfo;

I don't have a strong opinion nor alternative but I'm not
sure whether this name is suitable or not...

diff --git a/src/include/commands/copyapi.h b/src/include/commands/copyapi.h
index 3b9982d54b8..c3d2199a0b6 100644
--- a/src/include/commands/copyapi.h
+++ b/src/include/commands/copyapi.h
@@ -99,12 +104,11 @@ typedef struct CopyFromRoutine
 	 * Returns false if there are no more tuples to read.
 	 */
 	bool		(*CopyFromOneRow) (CopyFromState cstate, ExprContext *econtext,
-								   Datum *values, bool *nulls);
+								   Datum *values, bool *nulls, CopyFromRowInfo * rowinfo);

Can we add some docstrings for "rowinfo"?

diff --git a/src/include/commands/copystate.h b/src/include/commands/copystate.h
index 7561083a323..145dccd0f8f 100644
--- a/src/include/commands/copystate.h
+++ b/src/include/commands/copystate.h
@@ -65,4 +67,99 @@ typedef struct CopyToStateData
...
+/*
+ * Represents the different source cases we need to worry about at
+ * the bottom level
+ */
+typedef enum CopySource
+{
+	COPY_FILE,					/* from file (or a piped program) */
+	COPY_FRONTEND,				/* from frontend */
+	COPY_CALLBACK,				/* from callback function */
+} CopySource;

Can we use "COPY_SOURCE_" prefix instead of "COPY_" prefix
such as "COPY_SOURCE_FILE"?

0003:

diff --git a/src/backend/commands/copy_custom_format.c b/src/backend/commands/copy_custom_format.c
new file mode 100644
index 00000000000..8bef6e779ac
--- /dev/null
+++ b/src/backend/commands/copy_custom_format.c
+/*
+ * Returns true if the given custom format name is registered.
+ */
+bool
+FindCustomCopyFormat(const char *fmt_name)
+{
+	for (int i = 0; i < CopyCustomFormatAssigned; i++)
+	{
+		if (strcmp(CopyCustomFormatArray[i].fmt_name, fmt_name) == 0)
+			return true;
+	}
+
+	return false;
+}

How about using other word than "Find" here? I expect that
"FindXXX()" returns a found value instead of "whether found
or not" as bool.

CustomCopyFormatExists()?

+bool
+GetCustomCopyToRoutine(const char *fmt_name, const CopyToRoutine **to_routine)
+{
+	for (int i = 0; i < CopyCustomFormatAssigned; i++)
+	{
+		if (strcmp(CopyCustomFormatArray[i].fmt_name, fmt_name) == 0)
+		{
+			*to_routine = CopyCustomFormatArray[i].to_routine;
+			return true;
+		}
+	}
+
+	return false;
+}

How about returning "const CopyToRoutine *" instead of
"bool"? We can use "FindCustomCopyFormat()" whether the
given format name exists or not.

+bool
+GetCustomCopyFromRoutine(const char *fmt_name, const CopyFromRoutine **from_routine)

Ditto.

diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h
index 30a1d2bff6e..82f07b05823 100644
--- a/src/include/commands/copy.h
+++ b/src/include/commands/copy.h
@@ -120,6 +120,12 @@ extern uint64 CopyFrom(CopyFromState cstate);

extern DestReceiver *CreateCopyDestReceiver(void);

+extern void ProcessCopyBuiltinOptions(List *options, CopyFormatOptions *opts_out,
+									  bool is_from, List **other_options, ParseState *pstate);

It seems that this change should exist in 0004.

0004:

diff --git a/src/backend/commands/copyto.c b/src/backend/commands/copyto.c
index b1b3ae141eb..ea31fa911f9 100644
--- a/src/backend/commands/copyto.c
+++ b/src/backend/commands/copyto.c
@@ -1570,3 +1571,32 @@ CreateCopyDestReceiver(void)
 	return (DestReceiver *) self;
 }
+
+static void
+ProcessCopyToOptions(CopyToState cstate, List *options, ParseState *pstate)
+{
+	bool		temp_state = false;
+	List	   *other_options = NIL;
+	CopyFormatOptions *opts;
+
+	if (cstate == NULL)
+	{
+		cstate = create_copyto_state(pstate, options);
+		temp_state = true;
+	}
+
+	opts = &cstate->opts;
+
+	ProcessCopyBuiltinOptions(options, opts, false, &other_options, pstate);
+
+	foreach_node(DefElem, option, options)

options ->
other_options

(This change exists in 0005.)

0006:

diff --git a/src/test/modules/test_copy_custom_format/test_copy_custom_format.c b/src/test/modules/test_copy_custom_format/test_copy_custom_format.c
new file mode 100644
index 00000000000..a63390e875b
--- /dev/null
+++ b/src/test/modules/test_copy_custom_format/test_copy_custom_format.c
+static Size
+TestCopyToEsimateSpace(void)
+{
+	return sizeof(TestCopyToState);
+}
+
+static Size
+TestCopyFromEsimateSpace(void)
+{
+	return sizeof(TestCopyFromState);
+}

EsimateSpace ->
EstimateStateSpace

+	if (strcmp(option->defname, "common_int") == 0)
+	{
+		int			val = defGetInt32(option);
+
+		opt->common_int = val;
+
+		return true;
+	}
+	else if (strcmp(option->defname, "common_bool") == 0)
+	{
+		bool		val = defGetBoolean(option);
+
+		opt->common_bool = val;
+
+		return true;

We may not need to use local variables:

opt->common_int = defGetInt32(option);
opt->common_bool = defGetBoolean(option);

One potential improvement would be adding support for random file
access in COPY FROM operations. For example, with parquet files, it
would be much more efficient to read the footer section first since it
contains metadata, allowing selective reading of necessary file
sections. The current sequential read API (CopyFromGetData()) requires
reading all data to access the metadata.

This is outside the scope of this patch but I've created
a custom COPY format implementation for Apache Parquet:
https://github.com/kou/pg-copy-parquet

We need to start parsing from footer as mentioned above. So
the implementation reads all data before it starts parsing:

https://github.com/kou/pg-copy-parquet/blob/7da367ea81d8964f5045fe0b1514a798d4ecbbc7/copy_parquet.cc#L410-L434

If we have random access API, we don't need to read all
data. It improves performance.

Anyway, this is outside the scope of this patch. We can
discuss this in a separated thread after we merge this
patch.

Thanks,
--
kou

#332Tomas Vondra
tomas@vondra.me
In reply to: Masahiko Sawada (#330)
2 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

On 11/14/25 21:19, Masahiko Sawada wrote:

After offline discussions with Sutou-san, we believe the current APIs
work well, particularly for text-based formats, though we still need
to verify there are no performance regressions.

I got pinged about this patch off-list. I won't have capacity to do a
proper review, anytime soon, but I got a bit of time to do a simple
benchmark (which seems useful as that was one of the concerns in this
thread, it seems).

Attached is a script that does COPY TO/FROM with the built-in formats,
on table with 1, 10 and 100 integer columns. The data sets are between
10 and 1M rows. The table is UNLOGGED, to eliminate WAL overhead.

The attached PDF summarizes results from my ryzen machine, for master
and patched build. The final columns are comparison (i.e. copy/master)
of the timings. Values >100% are regressions (marked as red).

It seems quite "red", but it's not particularly conclusive. The
differences are mostly within 5%, and that could be caused e.g. by
changes to binary layout. And some of the cases got faster too.

It might be interesting to get results from other machines. The script
may need some adjustments, but it should be too difficult.

The other thing Andres was concerned about is "the amount of COPY
performance improvements it forecloses". I have no opinion on that, as
it depends on what improvements Andres envisioned.

regards

--
Tomas Vondra

Attachments:

copy.shapplication/x-shellscript; name=copy.shDownload
copy.pdfapplication/pdf; name=copy.pdfDownload
#333Sutou Kouhei
kou@clear-code.com
In reply to: Tomas Vondra (#332)
13 attachment(s)
Re: Make COPY format extendable: Extract COPY TO format implementations

Hi,

In <c36d218a-bb38-42b9-9076-cb75b8984a39@vondra.me>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 17 Nov 2025 18:04:46 +0100,
Tomas Vondra <tomas@vondra.me> wrote:

I got pinged about this patch off-list. I won't have capacity to do a
proper review, anytime soon, but I got a bit of time to do a simple
benchmark (which seems useful as that was one of the concerns in this
thread, it seems).

Thanks!!!

I also do the same condition benchmark on my Mac mini:

Machine:

* Apple M1 (8 core)
* Memory: 16GB
* macOS Sequoia (15.6)

Parameters:

* N integer columns: 1 10 100
* N rows: 10 100 1000 10000 10000 100000 1000000
* Formats: text csv binary
* Operations: FROM TO
* Patches: 0001 0002 0003 0004 0005 0006

I ran 5 times for each parameter set and choose the median
elapsed time.

I used
https://gitlab.com/ktou/pg-bench/-/blob/main/copy-format-extendable/run.sh
. I attach it.

I measured 6 times. See the attached mac-mini-result-${N}.{csv,pdf}.

A PDF has 3 columns. They are text, csv and binary formats
from left to right.

1st row uses COPY FROM and 0001 patch.
2nd row uses COPY TO and 0001 patch.

3rd row uses COPY FROM and 0002 patch.
4th row uses COPY TO and 0002 patch.

...

Each heatmap visualizes (${elapsed_time_patch} /
${elapsed_time_master}) * 100. 100 > (red) means slower and
100 < (blue) means faster.

It seems that they don't show any reproducible trends.

For example, the binary cases in mac-mini-result-2.pdf show
that patched cases are always slower but the binary cases in
mac-mini-result-{1,6}.pdf show that most patched cases are
faster. The binary cases in mac-mini-result-{1,5,6}.pdf show
that 0006 patch is slower than 0005 patch but the binary
cases in mac-mini-result-{3,4}.pdf don't show it.

Another example, the text cases in mac-mini-result-1.pdf
show that patched cases are always slower but the text cases
in mac-mini-result-1.pdf show that most patched cases are
faster.

I hope that these numbers help to proceed this proposal.

Thanks,
--
kou

Attachments:

run.shtext/plain; charset=us-asciiDownload
mac-mini-result-1.csvtext/csv; charset=us-asciiDownload
mac-mini-result-1.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����-9�:�S�����O97`���w`x`�]����/��>�#��}
��������(��_���S?��������������?_?��O����������������������_���������}�����u~��}���k��@�_��0��s"�H���}NlGN����"�>9�h$�;'����D��x>9(%nS�6%5'��}J����k�h$n���"��i�����IW��k��3'�S��k��*m�u�{�]h������;%D�SS@$��LiD#q?r"�HD~#h$^-'��)�u�k�2�����D�����!�Sn���v_9h$>[N��}��>�v�r����~���|���?>
��~�
6:r��H4��z�5����Q$�Y���sG��~�9=�"��k�h$NBYg�l���Y|�����lP���J����w�����}J�����W��j�
4R���~e=�Uk�����5RC�f���j�v�s�e{���6��H�����j���a#u����������4n���v��t��sN;rs��������(�$M��1��4V�MC�1��4R�M�1��4N��L��1��4J��L��1��4F��LC�1��4B��L�1�K��IZ��|L��G�c��<8�������$��$#c0����mc|��)C�iX��4��<��8���H���#m�Q�GZ�d�s�r^���4�x<��T%�#-����L���#m�>G�������s>�9�2�����s�O����Z��A������cg���~>t��{-_��@P���
�N���A�S�����q#L�j���D�}����|�G/0���w|����:zw����q�j����Di����O�>�$t�E� �m{�x����KB����3���|F-
hu�~g��?��Z����|�"?��?����|����\���_���H�r�zZ#��@�����`�L���[IaRPf��@��j	��\���_��P����")�}�V����oZn��P�>�=x�IzyW������\����Q^2���~}���B|x@��+�[���3�7=;jf;kB�s��@'�e��u��WR��>��������S���.� ������?�>�.Db����a�&�A�E.��c���^[���(�_���d�j�p1��*�����+!��^ta^������r�@(�3q��7�u��}:��>���z�)��L|��<a�����S����[��+a�K�C�|��u�����|[�RVY+�:�3���fu`����[6U�R��4%?*�����r�6��*@������Z�JLx �P)@���kN��G�
�������2��QCO���*:��3#{����>�_8�u`j�	[��4��~C�Y;|x`*���*zL��s1�
PV�:��������ed�����L���Woa�tU��2���ssLth�w�=j����D�Q!"�W�7+a��1���6et���g�4H|pq"%�6Fm�*��B|��o%t�M���3���5�`��m��p�.�t�Q`��i:�^��t��	:���!�'h����99��\J���Y����|��K&MW8a�����f}�jO�QFk���^�	'#��ak���;z��p��o}�O8���KZ�^|�)���1��#�����(��e��T��HUR5����#h<T0���^������=��jV��x��|*��.���^)�
OG���d0�5��t��u���0vL��3�2Z�P��Z�"�2_�@�j�S������D�n�~ S,�����D����`Wb�{9`N�#�K=������������XsMC�LC�Z?��H�.C����
E_�1�_��>�������K��;�`���������>����)lF��P;m4���w;�&,�{`�&��UQ\�c�w%L���!����x��
��gl3��K�6!Fi�LH�[�-��G���j��o�U6�o�Z�����j�|��_����_���n4�}��#c�w>y_�3m�z�Ag S�7��s� |��iw
�����@'����f������G���e�5=���c�I���uw�<�M3�j.
�c����P�w�fl�,���;�'���[�ha��>�&������`����O�������,[�	�3.Q"=|Cy}Pw�<aoB��TU�p_CB����d��wJ��uD�~0\�3�-y�Of����k����w�fq�:�A���
rH{l�3>v'l����������0�����4�&\�4��:�c�Id���X�����{�N .NH�v�rVC!�	c�������)0y�����|��.Y�{u�.X���3�?�d�D�/x��s�)���	�2c�o	����zk��w�_o�{�2���4�l�htDVwVdL��7t����6��������;��:�S�ihx����w4���
l:��S���Y��1M~�o�F7���3����@����x�%t�c�Hv�����Y��q?����*J�]0;�@�����r@��?�nn�
����������,-��5x��7#�)6��sb:c3�o��'�&k������u�*VI�������#�@djK���NK��$'�^A���pqb��MC.������&�@���0V�{��Ho���`G�N�L�f��w�r������3{x�3F���%�����xluy�}e�����m"��Y��\���O'�.n�z{���z��v[��b��*����nu��m��edU��h�4��!������G^����_C�+��g�-���I��<	k�1fc�����ec����=����.X�=�M�\cmH���!��`Mt�<��2����f�^k��	�d6��k�G&���e7��������r|��gt���W��"��V`Aa��!;�}���a�3��J,F��Z�A�+e&>�������n��fv��n�O�<7.���$�g��[Wt���20]W�2[;���&xn\��	�Yj�������:�:�zU3&x�*����qC��}�%�h����ZOa-�������'"�k�!�>�����^v��g]�qk�y!-��<�&X���A���/��3�������0��g.����1�o�uH����~j�7S���[>n�����������Ix�w%���h6�A(�waP�fU�P����h�D��7�O����A���bA�����CgB�vLs&�3��
�_c�����1��������}G��6����Sm�r=�2Sc�.p�I�Smy�j�k�8f��\����`���\�j��{�N���6�^Dq�0-�F�Z�M��2�OW�%�O�:"���j�s!*�m o�����0�L����'c]���1X7��hk��EW���H��"���O���:��p��t�!�S�zX#LWOI�,�{��:��0�"
�4��v�aAS� |���la
��	;���Bhj��s�Z���f������jW����W��J\���a7W����Pl��	�k�&:^��.�;�eHj��3���-t.4I�J���<��E,M�������as�����Z8�e��� ���<?\Vq*?�E�x%�*�?�)�m\t�65a?Y������re��[/����
�0���+��`,��GO�{�Q�,�z�\�l��}>m���?T��������)��S�2b���G$�'���1��a���t���-�������0��bJP�������$�������/���a���Y��AL	
������w0�?+�.����gDh��Q�3cKT�M1��������h��|>��N43���k����`Cp��P���`�x������c/���23��(��A�'�1OT�����/V��������\<L�"������Ww�.xd5 =�U�K1%(��k�A����
��aH(k���>4�����tan6:a�f��s~�[C�g&c���������i���9���TS���z�N����-���{���c��%P���eB����`���	zM?i���N�A�*���2v�5��C��L��}@����*?(������.-�xs���U����0�d��:;�W�����L�6z�tB`�cT�_^�����r���O';��G;S��v��?������!3�G~O�YA�?���#��K-�������	������oj>�0�������L@���sus!j�Uer��L��c>/g��|�PZ�!�H��-����?(������t0���xd�ri[�T����lLD~T�S'��i0�z��J�)vk-"�>�C�>��)�a�/�a��e�',c�L���#����a�/�a
Z�O�B�&r4�v�� ��o��;��	{1f&c��O��6�L O!:�a��K*���k���m���<f��Z����zv�}�)�5��W����PC�,L}N�>n<gx4��Z���`
<gH/G�G^}���}c���5��3�0�if�7Uw��,������"��<k��L��^���0�]@�`u��y��
�d�l�lgVQRSs��Hp�p��^	A���w��tU��j�����?�r��AU~P��M�oT��?&���X�()������5P�*��m�S8N����%����������U��������}(�A53,e}��)�$Tc��'�iM�����Q����;�����Z��lu��pP-����CeR�<c�
*<T!��P�bI���n2��&c�Y���R�(#��!R��v^��I3Cnep��� ������1����w�2.L!��n������2�a�����>pa��� '���l���L����7�f��k	�u*=����}iD�f:W���d�n!p�~�F�������p�w=3����(��%�>���u����W1�en�ZX�����\�4�H3.=��c������X%^A�mFh�R���A:!����3�8#�/Iv\�^�����.�
��[����yvI���B�����\?����]f��.D��/���3\�F2h0��X���ve��9�%/�{n�]'���	�m+�8�����EH�����n	"�`<�X�VV��������:2�z&�{������#�[=B�a��Z�����7������'whj�-�b�0x�E�nt��{���Tn���!��]��~t�����[Q�#�q�1rq�iG��f����n���v0��.D���=���$�����<�N+���f�_n:�c����X��d���E��;��a.�+aP�3�����L���N��K�����Iv���p553\�� _&��m��ro������55Q�����4�6����k"(�%�#�E\�����,��A��C���{�Elm@�Eyl�)A�k�k���j3��Z����e���A&n��Py���1�}0��i�4��#W���n�e�{��?~�����C`�d��!2�H�Sh�����t�����#����g|�Y~?#S�2�G8�vow:�����T����������c�w?��07l�����>��T0�CY��_���.D�]k�����)3a��35mxl6�=>B���Z���[cX��A���5l����=����1���	c�}�Z��������3PO����;�g��3��5��2�i��}�g���f�����
��ufa&���n�6��R���z�k���VfG��2`���B��Z�����Fw�x�!@��������	@ Sz��[�������1�y$e�0������K����7�]]�H���?l�����b�p6u��;�LX�}��`��<A�	Y��[��%�C�^�:����g'����/�"�������|���a�o��*X�{��S��1�oc=�z��0�w��dx���~��}?��GGHL���q�d}q��0W5���gM]g<����Z�8>��9��|/��A���\�0L��b�*�E��D{���*b&�����3��X�X�}��4h��
�.E"V ����Ch;�%��a3�+H� �������cv������&�0�lj�;v�`[��l���X����Y�h����DZ�S���I�p�����5!��3�����%�����������j��w�r�}�9��7�G���]'R&����}����5������a#JW��$C>���|"��F�
 3�w��$�������A���?vT�/?����'�_S�&��0V��u��@��c�����.U�1���O%���9�|Wj��f�������Ni;fMY���,�)���sM�e�M�v�6����0f� |j�A{m���	�����M�a�����Ob�hN������ZRc���G�?p�x�����|������D�Q��FO���U�g��c�w�Z�����S�#�_�ABQ@��(lD+�����h��da$&�����A��v�B���B`��M?@��!�w���ER\��1W}Wj��K�("���a�{��%�	��`��S�T�����U�B�(F�L<��}C}��l���0����-h��P�n.w<9!�d��&�yG �����0[�vD0�����	6J ���ab�z�y�{�^l[�f�
V�3��=��F�l���1M�|>!���L�@:�F�=4��� ?is��WG���]�q�j�i'v_�1����_=SCI5�Z�B~��T�LT��xY��k������;���3��_+30"J��F�-=E�eL�,N�`cx��fbZ�9h����L���_�5.z���S�)A���hs�Rx�z����e�&����t�A\nU���!,��1T�2��23�!��j~��{���R#���n�!��3SR#3.�*��:�����u�����82�}q$�$E�z���M\�P]j��S
)|���<��������?��u4��P�u"_���Q�%��A�vE*�Zy0{�B�R�]�o�LQ�����>��E��3� ��L}M��1�Q����10��z���:�5tr�7����(�N�)�h#�Aygb�e�]Qy�LKE{3�����]j�,�Ty����7����������Q�h7����6���cXs��q��MO����g���a��-pn������l��p�e ��@�@��^#�����X�e�D�dx���j�����-�:v
�F������7�Vs�22��A��57�e����a������7�Z����+!��L�!�}�7�
R5|m��-j�7��]e�a{e&pTTm_nn;~0n����������x�6x�;��`���pmmIXvw3��[{��2��{Y��f��-j��k{�i���=Vx	��p{�A���	����67_�@����*���YTX��$>���0�!>��f��2�-{�k���$������j��
l��[�(����!U&p+F�������r�Y����G`�gx�}������TWY�<��N�
�
�
2m��d���g�D	�x�:�����$���w�v��n�0����G|��)��
i�qW����<����z��\��;����G��<5*
��}3�"�.��+�6l�)���|I����7K,L��wk��5	�3k��U����K�?3�
��;(w��`T�28Uh�zTPf���L�C����&�mx.���F#P*7�Sc��|���	��:PK���fx��!��
dJP0��lz���.����sJ�R:���`vm���~=s)������o�d�����-t�E~FYz����kL��/lf(�e��i���2�}�5>	!���2�����l��!|W��m�>7�����~��h��#���]n2k=e1n^�<���uc:����eK�#n�L��Tm�#�[������X>�'#~��@y�_a�{�Sr"�h���e0�(�yibvpH��O}�`0�j	V����%8�O���d���n$K#6Z��#��� x
�@@LV��v��D��5��i���'0������.�O�I��S|���NL���`4��>�T�D&xR���RY6����Y�G���z?1�>n��8���c���0�~I�V���8�bl:\h�ef�C�yI����\wr
��'�;���N��]Wq��������`��~���Z�5��Q�1zN��hj�j9VT�w����� `����1r�H?z*��aav�������(�/���0����h�K!���wgwc��f�kX��zG
�#��Ob����	��F�`�V����G������)a^yp��1@�	�Mc�s�%&x���g������q��<�'f`��^��3�~e��zO��E]{�f�M��-KX� ��^��n'��_�e�1%����cz��L��%������R�0��������~.F���3C�YN�9:K�)�[t(��� �xf��t(��+���w��7�)��-+�{�ws�:4��id�:�	��x�G�R+���	������
��Q/�u��p��[��v=VT
uR}3c��c��{��P}}��U�����f����Y�uLC�MD@W}=L��8S��+��o�A���ff��g�$E��DY����7��[�QfA�\������0��[4T����I�-��R}���9�q��D1_GR}��cR}��%i�'�����1g|�����'��T�����0����U?t����r�73�;i�N�1���1<�$��[�xL>��s����{%4��iFy.����O;�����M	j��\c�	a��`�yW^�4���C�'l��0_1������[l~�|B�O0>m������n%�)�V�s8���/of��F����������-����z/����{�g"&om,��1�x��{%8�p�Yd	�~���j<�Owg"�_i�y�s��(:	�c��qF1�1cM0���K�;_>�x.yU/��p���*EK���;V�����M��g���ji��P�3���&J�,^1)�����}��&	�4������JM"��d��m�B�Z����{x���S�3m��������+�(JP1��j8�o
|�������]�U��|3���1{��o�9G���d�O| �'�]�m>����l\�,N�V�d"�I�}|�s��4E�O$�K��5<���	N"L�}i���)D@N�"������[Z4[�,c�,[��:<p��e!4o�Nw�i�s'~"B������TN�6�����d������m��q.�j����O�������X>���UZ���M+�<���4C����2��B_r���S�
;��Xj�[�����gv���cD�Y�#(��������Z��j\�73�O�t� ��;&L�<>u�������|�P�g�0|W����
�����ib���-i���W� ����U�7��;/7~|���H���cl�H(�u8z��F�L�
�2cL�:4�I��!���U����r��W�������-	��
������1m8�[b��E��w"�%f������$�3D��us���lf��H���������������dUD�.�2[K�'�t�Sx,cf�&5c����p�(�:x�D�u
�6/E�{jd/���8P��M�4-t��/\T�P��zd
�lf�~��S'�ei�#�`���7\�C��u����j|L������&��4	<7E)qF�Ol���yg�����.']��<��U����-`�8����*��'��)��9�`L���<c.�p*�����B9�;�&�	��/�S?n~�E������c���L�<�9��}w���-S(�Ub��I�>��I^��KL!Q���e!��%���Y�N�IR� �!V<���$1��Ir���I����e<�Lq%��1���6�G�0Pd��K��������#���YH�i�(IZ�2t��]<�<$m�}�����.���a~���a�C���~��K�D��wA�E(��E���=wwi�D��st��������B�d{WB.|G�&�Y�&����s�c��r��B`�aV�W�+��v%�����(s�������+,'B~�����?*Q5%�m��z]���Y���;����D4���1S����l�Z���@GL���qBg"�Mo=�`�l�}�����'��~t�U�O�=:��.��J�*����?���=���D�nyC��7�l��K�Cy^�I���7��?�0,� �d�����x�����V�D�'>Ax��r����-������=:������������~���iU��*q{���Uu�"�<�b�0M�Pu�Gh%�Zb*n4�T��Z��"�(�Z���
4R�Fb�x��9���O�=���c��z<)��>��xRF�}����l{����L��<z
�7�m$�4�v�i��.�e���D�R[{N�k������Sn"U�������)GC������i��-?������������n4�90�~�t��;���_����,����O��\jN���o���m��~��o��?�������������D�1&�z�)���Ae�����aUK��	�Lq�\;�n�������+5p�	q�D�"��0�m��G��~V+6n�'uY���'�2q+_������������Rv����n�~t�ae7�[JNv|6zDg#��C�=�_�<���^���XSu~�dC2���
!nH�������n06�.���
�^��fTP��/��y�P�z'�Ewf���(8��dwf�ET!��������H����&����S�2��t���"����J����9#�<���D}�I.N�~r�u���c���};Q�xe(8G���1�{�%�#D2S��223���hy����X��(�Y�!���������l�pfSbb^UD�8��#�Tt������|����.oH�$a~u&2D.���
X��NN��k%g!��4�G�	��1%����-=z#���"��Eb]vm�xUG��Q=�i`E!��Vn�����|1\8~6F�[�1�7������Q��	��G�5A�/�HD�Y��J&h�L���E�f6K���������Uf���2����A4�b���~6��
����{��������u���3l}�Eb�����T��1��
wT��/��_�Mu2�����g�"l�C�j�����ba�"
��<��@�:^gJPU���|A�H�q�we*�J��6�cf������u��(�?��@f&|*O����/xy7b�ynJe�jV����2�����L��Spb�]O0UnI����R|9�we$�GM?��/����Mi?�lG������E�:��"=j����{�L]���0.���&Io/L�y<p�8Fe
�.�|�E2pcan���/�Z��@�R���R��)��<9�\��'��~�_�%A�u#gD���,���m}3�l��xd�;d�C�Ld�T'�C�?�+Q_��
S��V^��i"������(�n4��	8O����}����&����� Q��
��p�����+'31Zl�Ux��K�N:�������f���tea�������dp�
�pM��>��:N��0����.5d�_���[P����{���!��L�L��P��TB"���;�
.�4���3Qot. ���u��L GR�7���	
�1e1|>D������.����"P�Bf�w���d��n�|�����|8�������Rc���o-Ns�����
���F_���0��ai>K|����[��p8�/���=$��'Ybc����1�!t�`���^	�����C��|Yd����<����������D�I�����Q��I��
�Q�xI�e��(�Y^�7��0n��q2��
�!2�}��r�@��8%K��;�r-�����G��q��|em�����?�I��u���������C�/�Zb�����n���$��L�|�D���I�
��2|]C�&}A�����V�5�'���lajoQ}��rh��H���?������Z�u<S{�
�8��� �n�
�^;]1<�o�a{�Pg��x�>x��,f����5v�.M�D�K��ofp#oT����URKzWJ���9R�f72�9[�bx��0�#�l��n�i��D�}�A6������Ig�o������H���x�������w
7i�����������@�{�
>�c_n��-�A _��7�������0���Q����f���9^������nq����=���cwM����}�=@��7��v�>pp������h<�����+�tsNA�f��5�� ;YT�pI�UCR���~���r2}��=�-�`\#���p��s�`�cx�7*�'��`H���=~/L��N�������5���Ghs��D�N�(��	_GEb���I1q<���u�����f�����5��n����N�K���gF�������9'3����}��B��(?������g��I����:y�0�Q��]��c�L
�c���Ph�_d�=i����1~��i�������[k<\e��!ta��X6�������K�}}vw�pix�����a��N��9���u���+�{���Da�����eUIz�$������?{xG%�d�����g~�|����HG��+<��`��d��,��D������a���])�r��|oC+�bE��d,�.���H����C-��~�g�z��Pz��a���o����]��K�DXg�-(l��K\N&����>��\�B\��G!>�ET�i�������+�!��O8��9M�@���N���>��;ofB�k���O�����1�3���dv|�gZg6����]����D0S���N��4�����=��s�p��$��3�S������F���(�Y����v�0�F{M��J]��0k�����Vy�M���������~�{�%b��x��C�����
�k�Z�Z4�f�\������H����k�Q:����t�X�a�a�W� {���}K��H�[�G|��Uo�AaO���R������f�3,�x�����L<:������rlG��[%m�]������.����Q��<}jb�I&(�`�Rs�(��Z�A�� V���1���02�������'F�}�e��-���0����S�lL��bp�������t;��������:��^���[�]�c�TN�~=�S��O���
t�C�����LI�/q�]?�����������q�x�ON_���f#��5"Z��u�\�\s#��3�cNWg�F��Aeh7�
z��0jp��w�v������e�Y�W��@%�������C��m��O�j��F�a��U��xE��c���"`�^����;u�
(�8c���x��{^u�u���:�����~��Ec�k���������l�����S>�K��Vf�&[���l��'� P
+���	��Y��2�H�������Q`�-�E���R��1^)��F-����*-�A!h���L�!��2��R�H���u�/�Dw���i�CzM����sN&���
��2m�%b�;���U}Q���k��Y{�b��B�o���*&�VFXk�h��d\u[���`�<mO8�5�6���
���B��$��f�>��b������D�I���9[3cm�����H%U��KV������tl�^�l�W���%r��H�-�xW����e������2S�2����n�!�3���{5��0M�[�V���7`�VCs�b'.N�FZ�%�W��F���O��G~/���|N����D��c^�n��a��Da9��%W[l��f��1���c��=��!�	k-���Tk�{%S3SR�7{��Bg�T�u���F�B���i{�w���l��mr��J�B�2c��z��Pt�G�H�2c�]��\}�� �bJPF�F�;'�����h�E���WKw�S� O��(V�o0e��f��av��L�[�W�0�<�����T0h��?���
3Q��C:7���n��0W"�t�H�����@T0.��pf	�\d�t�/w�l���Z��h���=����?`�6x����u�3����>ouq�eF���N��Z���Q��������lSH�j�������\`-)�Ni�7szD�x��:�2�R��y���)�����k�����m�>v��+
%��n1���J*����������'� �t��[V������=-��d�^rk�;,�wB�]�T+8�.9�n9���P������[�]	�>���/��2j����4�$���%���q���2=��h�7�h��)���H6ES����a�g���K��)�"�D�����o^���J�Ds��"|�;p9��wxM=�|!�1�z�� [~Ph�4,C�z��!�_>������Q�@'kar��^	��5��YU%���m�}+�
���2\�g��=V��j���niS��	Mdf����0�E[���.����<�`��1����p�=�����}��M�?��A���MF������a&���Wx�|(W�O��d.�d�MD����������k�����Fp��I�ax�/]������4�f��8��x��5��~�;?�����K�V=���PB�o���������r��A�
����]���p���5���\8^����0l���N
�"��Z�psk���ZWW��J�zC�����~�q��j��i�6�B���C������yT+��[�;~����t��$�y6�����(�	l�5��
��I�
!��v������i�C'�f|�.�aXom�=��:A^����s�J��<��o��
tz�1v1������D��m�Q���c%��$�O�D���<�P2fu-D������'�������p������C0�x�XS�4�8c,E��T�o�3��N��Y�P'(������@����rhv�;�������(
�7q	"J��ri�a�Q��<}H���_�D������M~�&����������>zj�6��*����H�5&�w�� v���3����{%����r��-B������,�����.�d���h�:N�`|&��/k�]~��3����+e%S
�����/�:'79������v���`��\�6d������-�[g����f[	����o)z�n\� ��W���QMA�&\��={D��5�X�����,1���t�(�@T]Mcw_)�L+c�6A���;
��0�ZA7 �D��C�����u�7��ti�Q��J��9e�\���@�W��g6������,�`�a���IDt=��t�G�h��y�������s�n��&��m�x
7�U�J��D���R�A�:�r��pRC����&5�z���6� ����59���r��#A������J�9yy��_�����N���)�L8�����>cI����rx�le�U�~u��o�	XI8�uv7�c��L8��if������/�/�=����	2���{/&y��������Q5;v��/�����]��Y���p�D�E�g�b�v��yZ��N������fL���u�]�Q�J$`CoO=� #*��W�[�2f�����4�_���i��4o9o���7IN��GtLO�<9��;N9���S��	�0t�"[��DJF�#�e�Q|�I����rx�-�W�;�R������ss�T�o��}r��Z����Wg��� ���"W�D��.|�/�2�>�*,��=�^a�[?	"6I��[Ns��Hg�V��U���T;�[�I �V��5�NE���<�[J�r�f�F���{�y���������wT�h�:Cunn/��0dwN	-��if� P�&�	�Je��X��K�$3���Y��D�!�4<c�z��t$jb0�*B��lEE�@�����J��B�D���w	�t|����4��a�X�W�P���!��H��/u�@j4����`�z�����Z��1���h~>�G7�:�5�'���
����ur�v�������u�2��!?��Z~/OyO��<|���#����&X�����dO���x�	o�����DY���n(�����r�r+��o����[�0�`*���xv�����
ymg�N)�A�x8Q��
�R��2��@�
�u������Qo6�]bD���/����]������q�����f��"(uw�tn���[~f<�i�#��}g"�[�7-^a4g|�F����VB�X�=C.����q�kP������	v���u���RS���H����pN����w��#�� ?m Mrso� ����.e�k��XCQ�JIm���g$5�8�B��~�]�}R�;���Z�.�p��E�uz���{��Y�.{�����������s(����f�(j���f��=���gU��v'|�;���C����D��e,�G{�pl�#�f��E�gx�3Q+�����12������n	m���D�����2!�g��3�|P�Z��HV�Z�9��V��w!�L��\Fjy������'�I�������N�U%���W+����I�3<t]-b8�]���|�|����h��������0"i��&M��
[<u	1����'@Z�]��5�;��x��g�]��������D��+C��@��>�H�����7�]p���tu2�|���f%�4�����T�p9a����23I�	�"m����;7y����D��v�A�	�~q_�;	�o����� ���������y1U-�{%�)9 �s��������q����E4��=\�e%��q��U�K��'�����t��gL�B�����QL]x;��%M���A���@."t>�c2����4����2��/��:�Y<\��KH�����_�8��lVqp��6�3����!���Qd����bQqe�)���i���~O|����j(2�;C�&���E�
XIW8z�g��]��W�mL�����]a�\$�w���/L����}�e��p����������]��I<]�4���+�'b����I>"A+b�5E��5cL���Z�� �:c+����?p9A.'���o2�L��:v�S��j!x�Z�7�ojT�U1cG�,�q��	�Z����|�3����	L���V��,>���sQ�v�,8��/�g���L��I��*<�V�u� u��.aO?�P��p�z.�x����U���z��X�n;g��&�^p �������g���D�#����!��LT���w�U����W^��WcV�B�����	CF������3�f�;��GY.|P��R��4����S�?��2�����7�n�{zp���F��A���p�PXj�����sr�%����[���-q�|�`���������Z9�V���!�pb�ET����T3��>F��F��b���9�����%�.����H|B���;c/8���R�7���T��l/���W��B�j��hX�����N|��&�	��
\����j���1��`�5������d��������V<��%����^���D*���3�P���*����q��������a��P���F��(1�\�9O�jc��a�������k~n���[��s�'!n;������!����	�>9�:0���U��������5�_�����`F��:�/g|�,UT_���Q3�yS�w���M�7���i���f3viuXUq�S��`��3
��P��	W��r���\=e�OX�\����$DC�|�\��p��~4�9�����4>��-�qo���i��zoZ_�M�O�.�M��?�����)���~}>���K�����~�|��y��y��rH��\#�(�gN=�)�yR��Li���XZ������G&��;�Y[�9���1/��YR\�m�pe�MOFP��r���L�U��7Osj3f�q�������i�~��pC%\���9�����[���/w
�7;�1"�S���2���~��Q��
�
��mwl�����*��Z�b�rc����e���'^ce�c���G��p�m������
����X�
�C*�H�
N����"b�5m�%���G�� ��������'����<���3.���zRM)4��)�0�o�]���OE����.��4��Z3D��j��������#x�o��%�8�����9������D��]Rx�A�)� 6	����5)v��#W1��*&an���}�t�����Z����O�N�!X��2���fB��{K�h�m�E;p�].F��v�~8a������n9��1��k�:���`.�\��n��>tK�pJ��fB��]������r����r2C�2�.�Y�+bh��
�^��bT�V�*L�K��F:,W.�yl�G'J�1m_%����L�K����r�z�B����
�h<�
�W0:����{C��]��+O���.�
3a��|�T*u��	b$_�Y��e&���[����:��������`(�����D��>P�C�d,���D-������i�P2v$%sC����]Bch�%c�i��E3_�E��v�~�u�\t��k1A��w��/:��-]�L|��2�^�~���E}�����aD~��^.�C�$�����������������%l�K4����|�D�L����(u��	c�;��J��p�Bq���C(�,�u�Fh��.�o"p�g��GC�d�W2�~��T�>#���v�l,�%A?^����0tK�(�F	<4�����|���_�j��w�s1v-�D� $�q��RdzW-F#�b1��6��D��=�+�_P�d9������&�/F��=m_��~����0�J/U�/�)&�����L���+�|M��h��T�Ve����������!�o��F��
�������~�S�N��
��m]�)�+�s�wP����el��YF2_��L���7�����q�������q#_`���QY=���2����q����O����B.x��/7"�����C��?4������������j+nO�aI+�]~��1�r0#��.�(���'�W�	�H1��vA��y����T]��i�,�n��A'����}���~*J����D��h��T�T�� ������o�����M\DDm���;�!G������q�gVq��]�.2J�+(��fX(M�L����������]
�:�{u/�W$�j|=��s����=t@?��Qb���;�I�C��V2�0�s$A����&�=
�o�Q���������D�uW�^N��&�����O����7��g�`J�����^�3���[?��7G<���2�D��	3v�!����p�`	��s{�w>e��h�2����%	069�Z�<�B��pk���}G��{'���n��6a��wyel�Ss��-��FG��8
l�]��$$�� ���A��Ai�0��6j.J\R��n�3J]H��l(3���>���g9�F���=NL��_=Z31pcK�L�F&!
�r��l���50���\,�6�Gi��"pkc���}U�y���e*G�_3�����`j��F���%1���J����*W��{���!�)���|=�K�������0���TN�w�
T<�@���1�'���|x����������X����w��k��	]!	����]A������!:R���q���D2�v9���ed��������]%;����g�!>|)�L�%�+a�(� �#+����q ����:fM�'\���nI�'t����9$!��u����/0w��������';�9�]�OF97D���q�u�����G����H��:��m�]OD+�U���q���q��6`D�0��h.�$4�b�)��`�ue �J|��B��(���8��"�Q<���Cc5F�	#?��b������#6�q���8!�HC��#��	�d	�v�L�	W<��<*���
�x���
��������Jh�
�F�@'����$��;���!xsoPF����n���0��
��E�b��`�G[>��=0~Ip�����h���6�O>f�Q��!��p��\lU�"� �O F<=b���
� ���R��d_ �����(X��pE�C8%bK��Glp�Gg�����<����3�������
���$s�
����Z�O����mL�:�}��cF�:m@]Ts�����	h������#��K�[y��h�>{��<a��?nT�.�'�MIiP����h�������6���/����&��Np�^�]2�v�52���M��H$�����o��VE���W��aX�zO&�2�����k��+y�W�.f�nQ<���C�g!n=��o^4Z��]������p�<�D�������=��c�Z=95�����i�Z�:_�EV�����&��
���D����y$���uC��x��g����h����q������3Fnx�3����!�����8��"��"����YyN�*��R�3�;/������vG�����9,pyl>a��?V�e s��\$C�
����w�V�$�����`��?V��
���e!,�:�+�0��D�`�����N�����$���m�Q�z?��X�%�5aB��9��d��GO���dr�p:���a��}���;��RN3o�hCLh`� ���H1���
A!y�~D��3���>b]���&.��f�����p~��?D�~g����ba�Q2�!�A��A�Gi�M�z����5:|�vj5>|)��_/���R����E��B�y��v�[��@�[q���89��cK�z���:#l>������Y��j����y���4#��&%n����n:1��-����X
��������O��!�������Z�����(V]�@��-,6� :����!?P���w�Q��ZN��~��MAC��!���u�mribB[�p?���R�=����r���Y��x�q��G�jH7(���h����M����A������Y@�����`���R@��`g�|��5����\��L�6�}UQ����#���Qq'�Z���;:*�Uwp)���G�

�|^=����`�O���������
<���|���!��}���|���z����x�w���=3c���0F;`g�.��'�f��n"w��A�e ^��+���5�7�Z�����f�]�r�:��;j�#���D�1p���hXomZ�t<�!c��n���/�x.��7
����m��LS���*8-
�i�����z���1���e���0-j��G�#A\#�y���J� ���i����=�@��HOG?%�iQ��%+�|���	|���1&�E	!;5�EDiZ���5�����$(!�=�\��bM����i�f1�����O�bw��15J��\15�U.~�w�_~���Fo��F�v��N	�+��%G���f�k}���=�C&�,�L>6�n����N��<�r�3��V���S�}N���}ImGNJ�v�H���D*QJ�5��
�R��S�>��ON=�%u�R�9��9(��S����\WD)u�uE4R����i�Li����\M�\KgN;��#W�1����o��;�$�D!��!4'����h$�&fO���])�h$[N����F���s��9e��3t����Fb�5D4��^sn���D���[N�Sn�9����{����~3�~�14����(����(��5��k��-�$��zg�p��a��w�{o��1����F�$��,��$F�,F���K�B}g�kO�@���{���O���:�J���{��:tp��up���:8k�H
��n���Zw��5:tp��up����/�5����Y�F�6����9-tp��tpR��v��t��sN;rs��������,�,K�x������7��R�f<W����L���\�3�+�o�s���x�����7��R�f<W����J��x��?��L��x��?��L��x��?��L[�siS
���1$�h>�����|������HK���#m�>����t} i9����3�����n�GZK��!=�r>�9�i��!|��A�G����y���s>�9�q������ |���n��8v�����N�V�
����2�y�)W�Lb|�S��}sT0R|�`�[�1r���$3�����C���f@D���d[<���C��W/��O|�A�_g���+
��yz��d��q0��L������?>�������F�
L�g0'w |�L���j�2s�����>\��y#Di���!M��[X#Q�>�M��i��r5�����Gk����D>��oV����'��E@;���E���f�}��V��t!V�:�q�:��E$3�����$��h1%��o���o���C$��n���
���p�v��D��d�pcc���+s�&F�$Af[,��`X����U�T;�8xc�%O;�}�+3$�W"g,y���ZG���+�>_y=��������Y�Ca�����~�64�Tn��	�����f1���zH�4-�0��\��uA��7������%��}oq}}|"P���D��������~f���)��
��Y]��kZ�?	��=�����W�X]���s]���)���%��������9��j���y5m"�����M��_K�:�x"/�H
��`�S�C�t;�z)*����f�� 4f�d	���y�s��4�)\�����\��q����v�������\&Y�c���
�������0�A���7�������nu�����������m���3��R�w/N���QE��0">-�N#\�3,�8�v��O��p��m-� ���^63���&�R�0��7>���$�U�������*x@
\v�MO�����"�:��0)K'�b������}�0�N��?���a|2�.�b�������0%��N���OD�0����<�:��~Ep�:��0=Q�����od]��@~�/�X����j� �kf���E�~0����p�@� F���>^
'�2�X�2�*�uE�B``��K�&^������)A�<�I�6���r8`~j�_U[[T[e3�r-����L	
�n��yi&�~0�er����U��V&
��4���kR�����p�	zG�4��Ih~�����GQU����VM���G;Y(bEf�����r������~��,�_o;%c����G,�D�v���C��	}�o�6�����CnM;�3$�_D�N�G6�@	bdj��3[+P�3�4���O����*������$x��"Za��"�������c5�(��p
�I��7c�cu}�����k
Gq��� ����
M�c���2>�%��o7�G�C����1�$"���V�xY�G^�9&r�{eD��f$X����)o��ys��]sQ�Fg�w���[o����+Q`�l�y�����G.:�n���c�
���	|F ����>�������?f*��3�P���S���D��B�!}����`2��-^�;aFYI������B�V
)YM}��wB��@��8T�Cy7��T��;C��j�l�~H`g6�m�MC-|�	�m�����w&2��4��j�]�;f>.<���YvPv��D�$�4m�K����'���1/��y�d�v3�w��P#���]	#6����EC>��=<��@�ZV�(���;�(�v�
?�i���IT��w>�[���1T����&"�G^�OG���3Y���QS��O]7v�G;����x@���0�C�����[����M���"��aG���Wm5F�������}��vo�#8������L���.���*�w%�v����}�{��[��
~�AD0t�@pe�y��P+�W�c�|!W���&S��E}D���]�����/�r~
T�����_�����Hmt�EMo��|�'��kW��v���G��jtBVduG�y�X����9��q{[o2Nw<�}"l��^	|�d�~�����/�H�<�E��y��6h�+`k����^��5����v]�>k���[��
�{,J��A(��$3���TX��^;K�����������S��{����(9���������H8-��]��f{�E"
���5-�LeC��+��r���?�Pu	��������oo�6��}X�J��G3� 	Om�X�����z��IK����J8lOh#V�X��}�"����A'8�B���)����3^��8�Y���g��~s���_c�)[�����i�o�Y�Z�=���X.���m���<�������E6�^vpaT�A����Y����-8x:+87���
�K�s��(P,Q'ozB�X�Vw��u����o�ae�����8�$c��f��H8�f`�nz4xSs��p�NLQ;_T�\�]+��"k.��'�.�l��[g�r�����SS�n�(�)A��O����Q�'����	�����2� �,ikB&@���v]6���0��=J31 ���u�/y�&��)�(~�2���^]��)�����#+c5�6����I��Rl�tn���-���M�A,�#�lw��2���s����:g*I����$�Pv���c�n�j�~zJ������-�#5�Y������+30u�ahW�$J0�v���>=7��xe��q�vp�2���f�6xj�(�(��qJ|�����+c�t
��������{�����������������|p���j�+��0����'�B���7q��]E��+�$�1�t�����7$� ��H�����[R���6�kF{���Jda�g,*����!@�����)l�'t����1 t0^�U�D0;REl#]h:xe����$�:�����v��1-�P��v��P��N0���el�b�CCR��1d�l�~�I����L
���]������W9+�L8x���v��,���dJP�����[�W��6�����"i-�����Iso�����M+g���5_�^���+x�z����8y������wL%=�R�5�&��>�f
q@eM6��1�|�{JL	����0��2��g�V4J#���oe����=��d�tY�S���N�o�Q���li�i��W�V�0�����&"�u*FD��)��ze� ����Zy{T�����Gd�[������:F�����N43������}�36��u1z�}D�#S�#^l�\��/�����(��A�'�1wX�����q�f���ra5c.$
�2��Brh�����]��j@:L��1%(�1
Kf���%�6���bS��G�}hja�����A'�����4+����L�0F��
�O�]���qi-4���$�n�*��r�H�����~��v ���A-���;6�
�+S$�5��Pom\��o�X��3G��@gj�����d�����o�A�NU����]����"�8T����0�d��S;,y2ezSk��r�������9�p�Q���22������Y����?�6N�8n����}�����������h�#�G�F�%5:���k p�*g"
0���d���1N��0�2�6��3q���jr�7�-~�X�(g��|�PZ�!�H��G�3qyP����&,5������-�(��S����m��(��s3pz�����U��O)L�VC��!v�7e5���1�y�����������B�����[���HHH4.�*���A\�����|�cmKkFT�*��Ng�Y���G�Z.����G��?1�](h�3�C1�G� G������Ql~���/�?cd*����B��	�)D'
��T�R�Xw�����jk�Cq�MMLb�����24����3��v~�+x����5��q�S�Kdjb�*�5��!��Hdh���41�?����LM�a���M-�#\31��B���"�8c��>JY�����. �
s2�O��
�3a6�%�9���45��I��k�`�?3!���<��y�2@5`C�K�z.�AnO�:S�������}�@�l~7��t@IIe 5�/��������,A�n������H��T>nw��d������h�p�u	P����n�:��������a�T0�C��Z=5U�������hlu��PM���#B����%CTNE�*���Q,��&���nI3�O'���8��\���-0�>�,��#ieh���u�^��<S��
���T��e���DQ�S2�qnf������0�&�`K�� [�pV�-�4���7�7�	���x��[��
�S#R5I�����T�n"z�����5a��Y�2����GL����X��K�dk�5�����r)=yZ3c����+��4��
Za���73vj�Wt����� �����n��gVL����?cd*�w��7(�Q���Q�~G��h�=V:���i��<d&u"*�p�aN z�VL�n�8d��;b��f���n@��1�s�g�v".&���m���X�)7�)���'>�Y�_U�%��y�KP`E[Y��o<w��,D����o�K4��Q
^0`+�����#������2��]Q����9#��O������'^�=A��60K�n���!���l?�_
��\������Q1Jq�nG��f#�"~2b��"�Q�%i�)v��`a+z�a��+����a}���D@*�1yu���(��1|�����A��B�qsQ�����<}bs�B%�2����?�8���	.==�/j
�N$�+����{@�kj��ek�{������BP����Xq]��
���`Fm���m�?	|��%�ZT���%��Z<\��=V[�V����
����K��:���������6/K4�Ie��M�#�����,��=
+�OG%K�g%��8,1�����?X���{bd�g&2�A�%&P�b�����FZ���:��t��m)j&jc{�6����x�.��I�q�����t��~��/H��m����B�*��r&��R6��n<�w"rt���I�$7�)22��5�!mkh��3so�4$A�z��=3�-����G�P�^�m����|3cc�����*D����+��S�����UsV��c2��1t��p1��~=E�w�����X=����H~�)VR���\�_��cB���_�!l���y�:J�'���c���7�E��d�p��D��3������ZT0��Gr�>���/vi7����b���/
��)�Zk�����X���D6��?Vd_�%��B�!�	|����AK�����X�F��N�,_�o���������r �t���_AKV�_G�uf��gm���l�2�N�]!N_�����+���x���02c�v����q#�R�p]��r]G��LOv�hs]����������$���TYjbBL�B����h����"���\+X�)���m�FY�`8��&"f �}
5g�a������[G�hB�.��;TK��i��7L@���"���[O�`���j���X�S��Y�h����nw��1v53E`��b�������8�����/	+6�]�����-V��� uo����z��qk����D�8q���!��%���b{���6�t�m�6�.����|����@\i�-�:(�f�|�����~���`~���@�r���o�a�	��;�����.U�1��N�FL�;&*E��XR�����z'j�v>�<Z��S�~�$�Y�2��w�<-�>y�al����U����S��B��bdC��y��������SQ;�1��g�S��g�0FA�BN�Eb��O���9����;Kb�������&�c�c��C�Z'^��[��h���j��H,lD�"�F�k?���Ta$&�{�w�'��]��O��|'b����t��N��H{G0�����&j�\���<(���^%�~���T+5�w�k��V!�	x��D<�*��W�d�T�I��hA����N�e��?����wt�g���`��X�8�s���FI�(����a`�z���I{�E�d���G�L�p��4�h���.�n������>�m�����u���J�^�B=3�~�u��D�6'n�������W/��PR-��P\e�c7f&��YE�uFs��h���;')�����:��x��Fz���YQF����������6�������|�#6���l������*1KP�"�1����
7[�����/'�i��w�^��~}p�������8��1T�2��22�!��/j�c
Y������qh�[z����,���ok�D�	�F���	N�����Q���#�&y�-��q�B
<R�gj��3cJ������X�u���u���P�D����Q�)�s��x������$V8���y��;�@�(�<-���>=�Ef	
_.Er���)�:1�9*
��4��S�;B;P���n�W-=o`(
��vd�4h#�~F����x;W�C�h�a^����K�^��*o���[����L�nx�!�O���0����6����a�J�x{��\��(��3n�W�yYZ����
�D����U���
�xk ��������63b"{�����v���?gFf���?5��	�aY�Y������22�TA����V�og*�1�3'��|������m�k��������{�q�pc� UC�k�oQ�i^���'l�����j������/�
p����7a�]�h��q��D�g�Twa�=�0n�eC�7���;S?nQ��^k/���#��%(���!->��M�����@
�=���d�;�*���UX��$>��gb��f|b��V����a�!�����O����n<t�(���MG�������OX1���8�N�F8t�Z�U�i�y�q��
=��#���`C�2Uy���r�d�����_~Q���$�``�]�'��}���� Y�<����S���������Y
��x���f����^/�Y'�7�-�P�Q��b$X�����j�����Yz��e:���D\~$�q�u�$#3����5�����|����D��:�|dqDw�CPi9~�}�28)�7k>3�fM&��\���4Pl�s������TR�Sc�q��w&
��u����5,��q�����p��R�`����-����	�O�O���$�������eY���>~�� o��k$K�C�?�F����)��w�o��)>����uI��3IP����2����j�5P��X��A�n���f�	���LP�-%C�����M��'��s��Y��Mf
��,��k������-��Aw����-$o ��������G��.d�����nd������S����8�4
f�!�8fG��������'��s����%�k��
?^)��@!05b���F�O�{,�����O>n�j
,[S-HuK��1�[��������E�ZS|���NL��x2?tb���)g��Qf���lL^R�Y��V>�~��>n�T�L��1���1lk\�f���G[����m��$>��sK�=������S�<�y�:f�*B:nG$���e0�������)�����n6�V�
W��?�=aQ4��Z�O�
��T������/FA����*n,F��[��+>$�"
��m��f<
[�R�
���8�57��70����b_i�w���1F61T��<��{P�#��dV�{��YG�OG�0bNch�3}�b��}HG��#C�p����=�-�����u�/L�C�K�wL���[�0~��t�_�5�&hd���^��m:`wf<����r���i>8�9�1���l@�6���#��N���]SN�������r&��nP�����4�����G&���?�$S���U��-��c~g� :��V������8]���42y���AI�����B���A��t_�Pd�����������&��]�-��VU���@�iy��^�%T����K��
O��8���������r`
�7���5L_�8R��+��' �`����*�X,)���D�����6��[�QF��Z��K��T}c�EC�]�E�MLb��K�����xKQ}��P}�^�71��cIMU�ob#_����[��BQ*��}W�~8�����~��W��@l��~�J��bxx'(2
�7�q:��{����w&�y����K�D�����_��M�k�W.1!,�,w|c.��Br0����t9V�mu�c����'D���i�u�[�l2��r��������f�r7��!����d	�[�����E�b�5�#����R���jM��h�������3�6(}�W����;�������t�c����Hq�XF��,���#�E�U}\�#����E��y�.3���S�����G<�Kz+�j��X[��#���&J>-��kl�p�/n�cQ�a,N������;w"RZ*'b]eL�l�\d�u��M�BD�i������u���t2D�K�����0G����R��;���?Q0������;��}�?�6-O�]���D�h����j%���&A�1�q���i"1�H�K�����(F�ND�dK���~�
�B��P�@,���������b�V���C�^�w��
���tl�^�!x��TV!�����t�]�L�����]W%����w������	�X��i/��'&I��Vo�va��2&����r��(S������Xj�[����#�{;��<a�h#��;B!\�(v�:������|{kw��2�O������+L���n���bN��(��?_�P|g���@;����i|���[r�	���s��4�wA�O��@�7�,����*QP��p�N8
ye�L��A9`8P4�I.�8B��Y���~����s�O}j�$����8����mI\�-�zXD�	�E>���������� b�$�c���AI��v�7e�T���
�*OZh;�kz'L�mK�'�ic�pLcMj���8B��(�:�7����
��(�v/��� {�� F�@���.��-t�`,\Tx�nd]M�Q�e���:�.K����!�i)�8$q,��tO��t�5�����@r�4���>�p7��m*sO����X4���	�-�j�f.��	'�}<4���G8U��I-����7-��a�����g�B~]!��)�}����#���S?�|K�;m�!�������Ou�3��q����e
y������	�}��I|�SH�V�����B60
�����)e�iDb��+<{���z���9JB��S�*ND9�y�D���s����:�]�b��P�l�G�����-���Y���"i��-����E�����@�?Z��[~F�"i��?R����II��!h����:	��!���#{<�o��� �G����B��}��H(�h���,qS����rcGb��Y!0xRfs��@��<�$���SbI��Z������NBq{�+z�T1�w$~<b��.����?u��G�������;�<fh����]�F"��;tF�����
����5FO�}t�k���i����#��I�,Nb��DGV�CG
�L����3(n��+�Cy�
?[�~���s
��������YWY�0Om��zX�����]*g��Owl��ft��Tq�����F�h��>5�X��3�Q;���U^��%�r�\�S�J�]�pL�=�z�y��Z��v��@y���|�JT��(��
�W������l�|\@���t��P^]Uyu5���^^^�������Q^^Uyy1��k*/�M��k,^���C~� �!��_c"�8yt� ��u��;��c�	�Ci�X^�{(O\����]B�P��1��������da���a}�]��?���9Sw���sp��9����_����c�m�[>�m?���A�A���L������g�O�������?����?�����g�(N$�����5�+f{#�=�2f[�~1�&�*�fD�{y�a����;�����X���w�?��+���F� Vcn���[�*a���R9����0V�[��>��_�9�+�~t:����.�[��v7���M?�Y���@���3�qZ�NO�Y��A
���`�����'�!y���
�,����h	��.�kh'���9E��q��oE*�������
��w`\tG���lF����"�#c��S��
Bt�7	7�'�@�F���7��Y�2iEKd������BD��@<h����A&������<q�������:�8�7xe���R{#c���%V"p�x�edd�!����iU%EG �[���G=�s��t����U�d��#c��������L��v)��p�"�+�������
�����D�(%O�^�`�����[�5�3���l�	��
1KPy���kj.���T~1l��3����fL��G����O����%�S��.����MD�p����i/CbC>J<�D��D��v
���"�Y���J�,���yb�m��h4iz��7�����m[���pb�
S�����y������G���~R�1��e������(��yi�%�|��^	*j���/��o�
�*����x~e�����x��z����S
��<�p���z��,A���e���#��k�wfN������#��p?_'�zE��*3�Se�9*}�~Q���k�KC��<����y�!U������:�9�CLt��s*Zi�O;'���D�h�'�����5�Gi���q�q������n^������������G��e_	�a�Bm+�R�����2��#�%��K�.Q�Vp~��$���T-�L�D��.��*-Ff)��L��k���h�{2���JR"��=c�v[��,=�+:n���!s�F� �+ubt�Ku��qzK�����LN����������H�x>$����m�cx������ �8c
5�@y�������[�!�x�/�N:���Q��O�0rW&���<�W���T0�[qW��-�h����T����������A�g�*��A�������X�����S`~T��J(�y����v����9���1�#<��3��R��Jp��P�tP@��b���	<�*c�S���@Q�f!3�{BM�dr��"xt=���3�i�~����2�O5��������Z����1���:O81,��3���9����-��G��1�="@�1�����>���a3 ��M�����p���<4**�EfI��n<�L��{
�E�P�P��[��v&�


�M$�a����Q%�$�e��(����dB�a7Wl�8�C�����aw���2P=�i%�*
�{�+"�����ak�q�u����%o������+��, pnrWr��Q@�sp��ldt�GI������|~g�@�
����Yq�_W��/�V&��*������h8���>���������tU~sz2T`�����H%����K����Q;��$��)�v�PgJ�x�>�tWr.���8=�S%<���72H��t}�r�K�[��)��}�Kx(�$j�K��������y���ge7\�pp �>�A8���x\�����]�o<]��vd�B:�=,�eZ��p����{H��8��A�9�?k�
�r�N?n�xr� P���a��������H��U�M��������(��T�����;e�{b�>�g���q������'\)���y�������D���t�DB����9��62�O�#�q�N�������6�T��7��#��d$�hM{P����$�ydG�^�9G��2��RI�Z3�!)�+��wb*����������fvSo�+���d L�����v����EbrD��b�8������3!X��))��������z_~�%edN��JI8"���r������Go�t�Gt��"��Q�0����\��N
~�v"&����$G-v�
"���J�c���M�3^Zs�9��g�_���^��g��h�q��CUq@<���:1�Z=&���Z����\�1��4��0p�+�r��9~���4|V��b�?g����92�����)����B��92�b^G�3��>x����-n�!x
� \~+�T�g������@���b�/U~��='�bd/?�E<:���)eh����ih��0���
Vp7'��5�R-��h�d����z1���Jo�'$��k��\?"C+������KP���O����A��=�P!~)?S�7W�tf��'���;"��Dpj����H����w3��)�H(����1{�������3c�=���d6_��V�>9e�B�*g������|�4����8�g��<�;YJ��������q�~u%����G�]3D@Ot/��7��w��Y����oZ�171�����/�����)$�U��2������}N]�U��������7@a��4]�����A]y]����A����`���0�l��_��%R��r�;�}X�6Nb��k*�
��_�0����z��#���Za����s����nK;4�3�U��VD�ca��oE2���%&��T���K�-���j5w����f�4�QS!��<�_��{�H�t�(��T)kMa��/&��^~B����a%a`S�(����2��tWu1��M
�.��U*��z=n!�u�U��1Bx�6��ILIR,qW
 Q��2w#��������L�����6���H�~���i��^.E����������YNi���v����#Q�7�x'�LG�>~�{=^M#�|?�H�Z�=tx����Z�-�Qf{�c�tn��uo��&"���P����0Y�������gz��k^��u�����o�tKG���'�����0{o�3�i��ke�'�b��� ���']����%�L����`�L���N���`���l9���L�����{~gj���R��/F/]�l's-M�A!(�~E!m��23�_m3H�T�;�Ux"Ru(�$���YzM�=��i�hgn��43g�1�k]�U~�)�:�a��v����,��X���O�WHULLp����D?
p�kL�q�mf.�A�����l��6���

A�i"�9�� ��'Q�Xu?�������1������-<���6������	H%�{�/��+���
�y���w"`��-��E�9�����Ab��)df&��#.�U9��G!1KPF�6d��"�q�����I��i���O63�/=aG�Bs�b'^�0���\Ai����'�`W�KO���$g���e-9f�w�>�v$��>�YrV#�����f���3�9����C��
�9���{)S�������$��p����5\,��8-�7����k�w���%������ZIW�VeLR�'~�Pt"F�%\�1�!@[���YO��,AA	���~���&_O���#;PT0(�:������)#�60�P���fO^<3���$������1h��?�����X��@@�@�U�#�x�$���g-�K!}�QBM�2l:�'����gme��������@�?`�VD���u�=���}^��)8W
{c����Z�%�'�
����� a(�dcp��������O��Z�����bvI�����23�R�Xy���)�n���X���ib3���m��%oV����I�-������������Z�����(��K�����d��f#>`����;��=�V,�a���SYo��P�����^���0��.����(Y���_�_����eM�W(�Y�[�;��F��y�N�b��G�)C?�G�0���H�Tx�D�0�^�=����Wf�W��P���R>��Y03������L>�g�^�>�._����'�y�����Q�t�(��!a����\��A����BU���n����~Q���S�1��Vt�X}p�(�*�J��	+�/��`��q�D@/^��
����3�l�Xt�?��H�oo�s#��]�Y���MF�AK=�<���<<OT��'��d!�
d�
�R1��M��# 33x�1@h?�x�~AC��aD���>�'�5}qa��Zk�4���T����f?�.�OG���V��m��zx`dT���](uW����l��E�Q-��P���f�N0�5Q��a�-��P���r���o�����c����$F����1�v�ZT0�q,��H���;z���vnP@�����y���w&"E��4����������6��@�he7�0����M=��D~�d�|q��}h+����QD�
���u�t���21V<�e�e�%m��(��P���������?��������L�\�e ��S��B����-��:�����{�Z�G���,M����z�"��oL�$��2�.d��)�p\,���A�m��8��^q�Tfg��
��Az�$�`�:���K2��"m�A�<jn���^/�Y��$~g"{vb)��Y� ����x�����[���bQ�Dq���Y��j����O����PK�G�bJ.�ys��X����x���s�Q�f�c�w��~C$�����Y��[��a���L$��A9��A�s�-u��<!]�2���T�@/��K�G~D�3]�_�R���t'�/�E�����Ob��3�w,�f�;�Hc����S���y"g8���tYe������1�K�~&"�F8[�+pO
$��ri��������CZc����e�������F�_���e0�S���M��w��A��q����^��]����m�V �-��V�;tu{!8�4��f=�!
��T��#~�_0v]1[w��=1e��v�����Il�q\�L�Thn����
����"!����I2�-�R�#-�%��[������K���(�.�a����aXlWS��d�E�����-�(�!�h?tfv;��"�����:jfsl��j�����3�
<o����t�nf����Eu��Kf��)yQ�^�/���\\g47�e�����L���
���k������R�m�p)w�I�(���K���*d6O���Tf���1%{>�e����k����]�����`tyX&�m�:����={v��P������Z������36����/>����1����x�h�������s���L%>�I��N �����a��)7\2P�NX��b0����~�}NH�d�X���R�L��i� u����Q�(7}�1�����R�LV�mM����,A�[.�<RS�Q��	�$`����,�z��s��'A��aJ��"���P��)�<3a��<�^~�"����� ���-�)I���+�����/k���S*>K��oE�+�xMU�Gr������vb��*�9�����iV��2�L6��������#���k��10lepi����vh���%(��z���?��<Y��V�'F��T�w=P0�'��#-��JG6����fd�1n K������4�X�N8��)"SSG
��'�r������=b+q 'W��Nv��o�i�\z#WrN�B�"�o+�������x�c�K�R!F��\�+�>�N�;��a"����5!����w�d�z�������l���t$X$|�b3�b�w&���B������L����W�4�'���	S����"���/�0t��`{���_$���d�-3#����K��G�]#�����%����8E���i��(�4W��L)����������Yo��yqB��)���^�n� 4\*�*�&NEW�o�
��I�m���A����	��[���z���`���0n����
5��$��=P��/��I)�=����ZpcW���6����;����}3�"dx;8�m����UH�Cu��'��Y�����>����
�#��g@�OZ�n����d���;�V��3EK�*pWEk��D��z`5O���f�L�����*C�p��0��^fj*|o���x�G�P�@Z��Z.�����h,�w���e��2��0����{�ff�OO��#�WT��8�`�F<�3Z(s�����~&"b�oZ0-�[�3����a{�u���jV�;��N�$���V��]���W
�n;7�
x����,A���fb���WE�5lW��wb���������L�������/z��u���D��%t`����V����T
�W3����A�K��~G{������J���ps���D��.n���1�x�X�pR��L��Y���~1�o�+*����SQ�T�#k`�$(x���m+�0�u1�_����@ ��{���� ���D������T{j��_��X��d��'���y��V:�S����|=���[�0�T�Y��\��_��#�x���f=o����w����2����Q�bD��X��A�_K|����Xr�3:���c�O�b~d*�G�K�'�G�jA����F�h{�����T7�>6��������>���t�X�*I��j�x�A@�l��Nl���Q6
�����f&����)�]=������"%j����"=j�Y4���[���a�+�HV����+������o�B"bq&;��>��T|�>��z�\�D�����DG�06:�b%�6HcH��{�'r����*�GT0��'��@�-m�b���,T�'�K���w��I�6��e������-q��}[�,��d��)�|s����"���"a�bb�@t6�'��bvl{+�8H����`�}�m�s��v�vi[@�s���<bl��/��t���Go;v\|����vn������L$�ZJ.��n�n�1l���p����uV�-���=��l�����y�h�C�/@,pqah�o��	
���x����pSyW
��-����b�8NV��0������@p�m0KP��la�D��+s2��q�|�����)���vk}�����2P��B�~4|{���-�W���
��)�bl������SSeT��3��=
�G����bXc*'��$A�;3s�yq(,��[J��^�y���YJ����g�y�rdjp���-� B�z������3�7|0"�8�4��A�OV������v+�.
��!����sH��.���(��_*L]���b�r����������pM����Ep{`�.laPY6����q��x������[�'T��:���C�1b�_�;S��X1��me�g��J�MDm7,���I6�up>�??A��W�����'�
8���k���S����2L`�6��#�����w"J�%�wx�f)�|�A�;�"��gNL;�2����\M92������
k����������
D��w�R����CS�3�@��R��|��6�@ s���{6?*���Pa<������(qA�bBE&cn�������y���Kr��~l`&����i7�y!�:'����O�~��������_���������e������l��f�<z d�����r��\=�z�8�������,Q}\�k���	�<��?v��z�lw���U� K�MB+����F���
A���|�<
�3K8����8�r��l.��yb�&�GL0��/"�
aES��$������eL�*X�T��|��(�%?��)����p��1����F�b��{~�Wd)�
2�6��0%a�����������xj^��005����/"��>5����&Z�C�O��_h����on��[�y���yr��Es���N������|�B�MP��I��9O����E�O�!�t�����!
y�x
�m�(��Q�6�(�)V�o8����a{�����c~���
�f9%P}8��<H��0�K$fG�R#*!�k�;�v9���K���Zx,�a�A�z)�ds\�CU�:^B��4�[t8���
`'��3���|`��TA���]�Q������@��rea��?=24����x����\�Th�]�ZN"m��*F�E34$�j�i���7��ZzJ
f����(\?
���l���k��D$6d_��[���)����fh�����v���!5S������B�T��f���On�
ES1�m���&Z��0S-f4]�R��h�p8��;G����kN�f�?��9��d��%:�5E����
�i����@W38&�L��������6�������`���u��4=)����T��^g*���<��4���\�4�;:d�2`�����b��k�����kR�T�������xR�$�����e8S�Z����JJ�4"�����d
t +����K�2���a�T�2��J�@dZ�t����}+��~��}�����w�#\t����������i�*f��pR��hq#�J����6(�,h�M��/�I�`�ka��������F���)S����)sbU%��2@�� x�];�&�K�hg��M�&�R�pc�k���K&��A�,'�FEq�8E��!����/��������~'�PQ#\��GW`Uk'��%k��n��0"�8\�����}u+�W83c��N/���[�S�/���?J�i1�w�Va�[aw���S��|�.}�'�T��V��������VV�#O�H�qe@�L����~���
�b������9�D��K���������GhW����
#�t4cA���0yg^��={O@O�i��r�:^����y<u�0�x���fbk@]��������&��H8����a7�[!���%@����U�C���9��c��'b�w�t*����L�A�Q�g��j�a���jD�����:8'7�L����D���,?a�$��WB���`�i���w�JD�����(��Z�����D�����n�,����H�$X(���/X @������R!r(��zq�2����k*Fb���q����$��go���:Q����cR�(�V�����q����,�Zo1P�u��)�J���"�s9����p��){*Fy~���=&\R�m���������rx�9o�[;��W��!hWOhd��5��^�������dO
�fj����l�%j�/g��#�@/9Wl����g9��V���|�'fJ�,N+^9@�.?��yG�����<�6����L��S��C��F�b����������E(?a>hU*����������l%�q�B��t�`�j|���7[�xi�>C����St����8��
=��������rY�A����z�L�pQ�\18���Z�* �@U���a`�[�,�O���du�+;����.B��x�X��
0����f���:|Ax�����������#��	Md!�����2�#�B@P��(��[�nL���/�1>�. ��U`�����%A���<����1dm�v�a��'Tk�/sB4�$�����"��7G�dU�i'pJc}�b}�;��<y�z������@�����AX�g)i�>�e	�B'y*6G���\�R��
-���Td�
�3�
d���R�O5�~'lH�+7��0�Cw!~�S��n
��J����@��FT�+Fy��n���n�:tw����
�Qi����.2�a�A�1������8�Q�*<�e����p��K�	|*��?����xh����hs��-��+����i��0!��0W�
R@���%���dF	
:J�G����y�|1�����c��~����ar�T!�P�b��vX�}�Q�w���OgK.�g.��`L����Nt�l�E#��~�hU��

�{2k���(\��a��n���GG���*Rm�}|js�_�7��0?vs�>�Z��7��kq/&�8��bt�5-���C���J���7�u���n�4tm1��z�h@�O����)�5a6v����Mg�E{��oX$�V��E�2+<�x��d�����N��P�77A46��5����K��{��;a{�Z��A�Ee9kC��e���I+��D�h��aY�.�m�hf	g�&6����p����
!MB/��j�K������������F�zv"�����D�4!����7@�-L\�p�������!������69�L�;���

l4������E�'�}~���7c���
�d��)���#x���QR�}L��CT�H��p���z�^�9z'������&�p��&����,8N����c���f����i���=�D��7��0:c��2b�jt��Pn��>`�q�DnJy+2c�����]�`U4<3qA��=�#C\����u��d���B_���~7S��#��+�2��c�����nT+3H������v����2c��Q�Y��U�w�=�D��*
0�W�*/E!����&�,��_1�e���K���0`��"z����|�����B�Q�����g�,_WN��x��&G��1����0`C���T77u	�eL��JU��EC�^�ta��gI`w�{�`��MD�*��6�-�7��`������>�=$�F�>�)���N�!��q�Cd
Ud7�F��C���L�����gr��������@������P����0�M�U����(`E$������S9��9�	�3�b��,���V����Pyo@�!�_|�7�UH����2�J����aa�G�Z��D"���a�'�)B�<L����_��;����H��S!�B�in������@�m��M��[/" �0T�;e��,��
�0=�_�9/��3�����KwYL�A1��&K���[6Q���S������r9H|��[]s<i>4���?T#�VQ/J��.��<����<�Icp9��x�d�@���
�l���Cl{
��_#�������5��1�����N�L�<���efr���
qi�cc"��~��}������'S�<����������k�^<���(`w8�G�\�G"/��!�\e����������C��8�Z��x��\�72GTm���Z��T���3M�`�x|��P?�3Sm<O�S���1jT�O����S���v�y@��$w3>~"�@��fLt+oe��f@��vq�gU�$����DG��E��R�x"��Dx�Pe���7���s�����1�����\�oM������|~���?���2
[���|���c/���}���e�r�x���y���2a�l���e�r�~���3^>�p����u�����6\,����>]nC����Pk�y�W�x�9���.^C�]c}���s�xuy�U�5�GEwM��t\��y��BM����/����~�(/�)y(/W�������}(P��u/W��v��=^�,X.�R�r�\���2`�<\0/���m,��������?R�\C7 ,��
�JX��5��k�������=��{T�����o�h����V&Q^$�����U�KE�20*T�����m
X���Cc::�������:{��y=�����zj�AO��P�������M��Cq��\��9U7����u^���m��T������T}������q5�wU�q��j�����c��c��}��}�j.r�>J�h"���X��/����}���b���Y��/�����m���b��?[��/�����]���b����^��Q�k�	x��&���"��?�>�RZnl��R��k�M��k9f�-�����@^���-�����
��V���r�Z�>����a����W�=^��u� ���&@��c~X�j-���7�2������������Y��2��'���!��C}����
������6��
L��B��q�"�Gg��$EGFxaT#,���!�1l���-�q� ��\��~q�t���C.���������
Bjn=�-���q�75�2�&B6�RS�e5l����$����;3��T�Rf^������V��T���qd*�4��������`������V$���Px�`�����Ds�;����&" �(��<)l (�!�����	��0h�W�� A8�."�ypJ����5?B���)�����w���������������,,�M�Eq�X*>Y6+�A����G)p-
}���&�x������[Z����I�a��x�<��9Z�LJ,'F*vy�L�\���4�<3����5.�G���3a2g3�91���JO���Ri�k����L������)�,a��9x���<�����Y@������&ecb�w&��!$'
l�^3�+fD�~��P�q��.����8I�l�}��{�v�����w��:g0~�x������E���uM�C�����B���*U�q�`j�B������{���u
��S�������9dO�maW�6����c(�9@���bJH�z0��b ���_������y��]gD��$�����������8.�C88�3a��S��L��S���E�~A��5��G��C�+#��GX���*���J��l����qU$���1�����$����8�v��3����BThS�J�����F������[�Y�+��V�mW^��r �j�&����\��~�;89���i^OM�LL)�	��$�~1��*n:����bQ�����	���tO��������)��8�| *���]�FD��Y$0�#���������Q�%P���~��z"�VT��<.t�
>��$JP��2E�O	�Ng~����|��b4�yk���s�~1�o,�5�*���i"0�>�K�/f#�l�b��d��Q,���3����)���p�vL��eH3���n1\��,
��������_�Hs����i��_LT�0���#�h�9P<��� ��1�������io�y?n�K^f&Z�`T�a�2Q�:�v���g��>4�LL|�o��Dp�&�����@��8����h��qg�K�.���i�T��7���v���(f����:���[�_�B�L�rWb�
�<�4�4p^G����C�`��S>zl�����
D�B��E	�)�a���(� ���Q����c@���Q�����8�I�7b��+�|��D��V ��\m�NLE7OR/p���1���
�aa�&��h�������X�
�v_`��c\+]���~$t��
�T������v�X�d���8|gb�}���y*^�&	t��
'k��A��|F ����>=*Q ��c���<���Nl1�|�C�vq�Z�9K��[h��I��
��`*����F$@��e_�x��ud���^D��j�S��2����)��T�����)���r�D�����b?�a1m���[���PSy���@Tx����j�]�;f9.�J������]�%Q��#�x�E�AG���]�q�������k������w&|���g�i����G�����(a��;�(CKw�QL�nN�����I��n����B]�6vE�l���Y,OB�����]W�	�Zn;��V�	�R������h�a��q zKD�����l<�4�)���*�]��l�;��P���<��ts�N����D�/�,5?n�l������M��e�����������[��&�|g��%o@'*���G'�Z�~PV*���M��!.(��O�NX���a,�]���^j�-	�|�-)e(���^�.��Y���������G��ZtBVd�@�E�T
?%8\�q{��dS[�����w&�n�����r1�d���G8��u��qh������W��5[�q����D�����-j��sRb "�zBlS�7�b)�	��iH��-s��U����7���p��?i
���I�D�r�����Z����013$e���&
�����+��}�Z�3d���� CU��"�!�}�p���{Z�J<�G3� 	m��O&!�-�@��4�C��Z�=����S|�:L�_��6�#xG�0!Qs^6�,�N��G��.��y��a���������cM���Sk�+�����5)v�Yk���t�M��Q+��c�Z�����z��9a�������sz���}X#�c��Gl3�wLuN�c�Q$+�D����%�
��X���:Dv�,��o�:i��/���o�b;��06G�pl��/B�G=����p�Y����
����[g}NDB�am��������b&��������Df	
_�[~]V�>~ �����FOL�+�9��g���teG�
��$L����H$�$�q�/E���)�������@;�B����<5�;3V�l��8��nt���b#��s�DZ�X��o b��d������3�(#�a#���{���T�>w�lB���[6Z�i5�-�����������X��Ws�U�!E�NLb�`&�,*�����m���4�E�L_iK	/ ���g����t���2DA���a���}������k`���*�#�^<i��|'��rQ�S��>����N���<B�,c���{;S��;1�����I^>�W<	]���:x$b�����}|�
��j'����P	a��(��.U��`:�����}��'fa;���	��'"!t0WU�@�8RE{g�,��:xf�����UjV�+��1���cZ.��'����T���r<`C��*�s1h(�CF�-�o�A��k%��J�����w��������Q���1�����sy��%�z����G�:@yfl���q�`a���ddSs&�'��p1���h���!#S1f�H��u�w$�2������1I,�~��X��d��cmv��CEY�
D��g���eR]���a"~:�����[�E��%�{3��[v�A��<Y.0KP�������T&��9�,��B��a����?(F���'��,������]>�#B+�]_��>��	M1���������k�v�Y��hd�8	��x�b�#6�����7��`���?�1�m���WTe�O���~R��U�r���Za�R��_9�Z1'��Ah�w&9�\�����p5 ��5A��������B5(�G���J�3�"������ka�U�M:i���w�b[���TLc������!�U%�:XC���9�m��f)���#'d���0�Z�����������n���eB��
�3�H�[�����d�I�����#�9��5����|z]�����8�J��I��e'"���h�U��'al�N����������/����d�9�q
Ax�Q���42��O;������r�{���?l^����2�d�1+����Z���q��tYR�I����OU9����'�:�d�$�~1����`���#1���f�tM;~��Y�������4cC��0��M��{}�(�����\�A(��gV���*���{���6�@,���������&��.a�]
�Y��'���cAJ!�b��u�n�,c�L���-����a�O�a
Z�6������0�� 1����A��>5x��/�?cd*���B��	�)D'
��T�R�Xw�����jk�Kq3M�Lb�����
34E"CS�5��3��_L�([�C#�����`
�=��#���=4e�����A�����4��ZGtjb+BeOt���W��xcv�G��	�L���v�V��^��rg�l"��*�J,����M��\[[��	A����t�i����}G/��t%����E�����}Y=���0!��n�U�����tef���5P����m��N�n������H��T>n�
�W2@u��89v������+[/����PM��{�����0��R�,�O����
f#j�����O<@53�C�G� UQ<D��3)��PMbI�7�n5��pL�Y>�^��A0���N�����c����:P4����y�^@\wN�?_��&���Tz�d��J���sj	n���s��-�U73�-L��=^7�>�Q
ZR��}71z�[h��vJ-��}QBi�X��u�Sci���_`��Ka�'��/
�k��OT�[9�|3��_��
1�G!���1���S��_�{�q��b�Lb������3bU4��(����F]���3|Q�k�Q_����V2">i��;���b��w�g�S�.�9�7�mA<������
��7y�33`��2���v*��`�G�����F��(n��I�iA0<3�����`1������'?�0�\
��{4��b\}"�E�,��{x����00����/�p���P�����V]Gk����b��i������Rlu�cqn�G�g�bD�=�������Or�&VC%��� �SKp�m����Q p8����4���!����h#�h�S2�4�3���Ro�)��P�,^���6��:<����:�T�����g�-�C�)ID�5�8Gfd����������w��d�(��J`O�k��E;�`P,�/y���[(��*2��/R�k<yf(�]�]���{{�f�{F������u������Q�p,����r�����HQ6"jLA82��5�BK����1�FR����#�W���Ms�_pf]p��P���>d��F���/�CEYVB�,�s�D-]������i�-������������tZd����"������XV�?_L�<�X���p<���S3HHh��>l:��$�������>���ID������*��$�F����e)��������9,��)`_�'�W<n<�{f�5�� �X��61�z66�#b�������/���0Q�G+!��8�|�5��]
��8p.(��p�+FO�842*���/�����
b�� U��� ���G��9D~��Z����;�T��J�7m��Tme�k<c���8Wo:�4���>H�Q+������X���T��:�r��;.EC��z�������(��O��_F��������j&���$�vl����JO�G�L,��h�f������A�}!��M�p��3�S�)Eo�iN�r�!����~`��������M�@����?��;�[[��H�|���G�)���-<�t[�x�o��:-���o"~��N!�h|�J����@�G��Y����
��k��G��G�O�X�k��l����x���gm��BP%��d�b�f��p�,��5N�t���V� Z����4;���� b���!j��]g��"��S83�O�������<9��E��Av�Vn��?JJeeQ�m-�d���)������5~�L���j��j;�yz�o��0v3����R�"0�LLB��PF�D��'$��>>�&&��/��^B\����{��}B�x���E�R b��
6l��
�Y�/
��}�8���T�>�H�u�������v:�)'{�(V���s7���7���H�g�a�n��+E��H�����Tt�&�R��l.�<�8B�|}�q�l�I���������RB1�3�/��$��D�����I:tdlg��u��!)�a���"��g6|0sq��nG�l�������0b����]��z�����l�E��y�{��S_��=�B����v">�K��K���>�%���K[!���{������������"�d��+���Ul���j#��%(6�}����IXI��B
���������Y�{W�?�_M�Y+�`�u%��pt�;�������Q�h�B2.��X����b������'�~S�#V��
����45��N�sx��>�J�]9Z�D�����u��u����?^�I�����;���A�'Ok%~�/J�U �_�M#����c�<�M��������/&�]E����N�b18��x�Z���^_4��[G~Q�T����J\��E
DhKv���L�ppHL�>����t#�j��g%=���K*+��,��
*~�F=�Y]����|Q����8#�����f�������k�,c�H�0� >��w%���]O`+�Lhg�p�������v���=��	@��w�L�$�	��I�#��Te������:�+���`����H�@)��kL��6���i*�P��Je%�Z�+"�;��D�R�@�����[��U96U����x����:>�(����lc�i�W�2�������rT)��&}��k�C2��V��q�z���B\�Z{�;]#��I����7���&�� ]t���v��N	����q��}Ns�
s���c'�"�I 
n��7?-JU)I�4$&.!|�C��`b�j��Q�t��6�N�)~�S����t-o
�AT��`P��#������C{�r9�����S�������z:b�;��$�V�>��m��<�6�F��h�^�������1y��# =��w���)7�Z����=1�ip��i�U[?R)�ip���o�T�~��5{/N��4
��i0��t�a��L%pti���Z���a��k����K����-_\s�U�6��$�o��������i�:T���|g���k9����ke����J+�Q0��-&��`�}��A�q!�;rv��7��y�2G����y�[�<$��Y�����p��]��:L��L/��3�[��"=�$��+���4���=7��MLW�z�R�|��Tb��n_TOO�	����������+d�y�����l#��;8�Z�k�s��������j��9d{�s@��a_�C�B������t.3l���I��dX������T����L+Eka��P%���W	�c���:�m�����t#v�F�)�������yV��t�?~CM#��r����R��N�����j�J��j��<�k5�B.(����V0B��D,������M]`�3�W�A].��7�z�|!�{z���N-�Es6�����U��M�}� T�0!ZZCL�s�m�>�f����7�6������,^�6�%0b�7W
U�&���������r���&�?y:��92���|���1G;�����0�{�]�t�*��K�/��	���G�p�B��*��{��k���(��9v����B��YT��q�C�=��/F��
�T����(���~����u���L�{O�1���?zfq�+��	����������$���h���y�K\����\\����p.#A��+'���������cl�8;��<x��7�1��K��pD2?�Rah�>`������E�$~x�;�0����
9z\���8��I���]�_<�YW&b~��w}3|�n�y!CZW~��F��	|��&3�Re��w
��XO"�.���)�����>���A��tp
�o�iO��
	��JVg�����bJFb�
qxC�V�_2r4���.���H����YlCE��	@x����)41���)�����B�O���=���a����$�����*�E{�Tc[����O/��n�5<������^E{��>F�$��?n�xoTT�6������������3�]�O����*q���[��r+LL������i��Ur��%�VJ��j2nBd���v8���hm���Gk_��nR1!b5�<?����Q�B�����l%+������k�i�X���:����H5�B�
��p�
��:�o�������4������~�����!��aP����_\��#�M��5W����>��O'��OO�S��t�@Tuz2#EQ�#������4��-����MAf)��PAW8�V�*`�5�R��JG��J��Oj�
j�����:��>J7R 8X�j=��;5�@�`/��ZO�9]�F��2��B��������I�-l���rM�%K�P�&%W4��xs��s0�JE.�M��=u���#�9�#&"OM�TM:R �����������.�\!B��%pM�M����`���-�t�XGQ�Q}-���#�}vm����9������DQ���3� ��P��Fp>n����Z��q�N��%m�"��b����@��g�o�6�/�Q|��J
������k�t<����8��c��Z�L�k�Wp2����N��jt��4��8��&P������S@�x�QN�@��)���3v�%�Y�>�w!ID��l|�#j;��-D������m�	���y�f��1or��M��4K���.��M��I�������2?1iJX�v;b��(+H�	R.\�b������4ejN������#�}ti�W�S3
9~I�����0��$��M����[*�6������D���$���,)#��Q0c���I��l/�fb>0'���z������� |�3�`��	���R��
{m&$����3e����� p�4F-TL�2�����|^$�76�F1	���7��1���A�I��c�y�� ��S�F����B��h�cy�F�	�ZTL�BDem���T��6Kz���m��X��9��s��MJ��G���|�br�m1���~1��������V�'C���^L|>�:�T��
P�*#~��7���a�06���)��':'�F-��i���6G���}���kG���~�kH�X=Q	M�o�4�q����a�]f�V��|�je~M��9�������[�w%hI��!���0/L��]p����/���x�m,X��s�=|/��+�g������������c�=��c](���ed�iazg��@�'��cCK3�3cZ!v�n����mN��Jp��gA��Vq�[ -41����=c|g�)��h6�a�w�Y�W���������� k���CMI���p����y��-!�\�������&�1:a������Q��������n �=�b����Kp�f���j��J(������!����PZ_�.���������0`�QZ7���l����PjaW�?�'�V��7�3G���j����B4������y��%�.]��,q��dL���/&>1a�����eF�`����P��mn� a�`/�8Le�iq�v���8���xx���������l{��f*�����:r����i�;0P����b�Xal��s]��1�J!��f���;�U>hJ0���C+�w%�1�����q��	��~��3<c~�������f��x��i�f�����L�6��0��x���#��N��6��0>���|��~�M&�d|�*x/0m,VfSC�webzK�Z��Lo]�l��V������-�8q�9K#����!j�cfqLg��G�G�T��c&��)�S��%y����.�d���8���Gn�`L +���Y"�j�,���`����,���D"�e���`V1+~�"��&�Dvx�H�i�N�$���}v!�E�b3��$����'�2�w;���z�hd��s���I����XHI�l&�\Hq��B�����2
���+A��i?<Z�s�D
�"�w[
�m�#��Y��
l��~"����`PB�������D��m������x��I#�����v!�{���D�j6�/q�%��0H���3���`1���K�$�%Ru'������(%c���$��������F���\��m����m�/iCft��q�h�-��3aD�X+�����g.$N^����f��.nf���-������/�|t�>[)�n�!�
�����2|J��!�U����	������W��16��L�\i>~4R���#B�v�!�y��8��k�j	cb��p]�3�u���~�|0_�����t]B��eE��$����4�f�1���.%�U�W���j���(5�����e�U������R^���yZ��f�����k�7��4?��P\]�my����#�K�<:�]��W��Z�/Hx�r���_����A*�'�;�,�������������G�AG���������?�����}n�\������g��C���k������?��??J�?�����&���m���+�`��-��Xu�_�������:��'�%�D�>����
�~W*��#��
9�2�;I�4�N6�G���L� $�d�<�PI����/��o����L9���^2���z���@�u-�	.���?Q�z�!���GB�#X#
O(��;��t���.J%�I���r�!�e�`A���$�����
����!O���O}���f��5���z�t.��D�2�d�K��[Lv+3�"d�PE��A�a!����C�c���4���TN�'��O0�7�2�� ���y�U�� �\=�)��
r�[:g��~�h��
V���j�2�5�����H#*���PFF�X[�b|�$)X�o���zNsq|���O��UP7��2�!��Y�@4c�
��S�������]�O�������|k!2D)/��%����R��n,�-�@T�����v��Ls*nA�{�j5�E"����zE>~ k�cqnB�<2f��g2�'��������sC ���P�B\����!� %�\"�\�t�~�A�������-8��2��Z G����O�&;_q���5��������1U39�G��p�2��&�]${��B�!��Vo9+<����\�'n!`�!#xnh�7(���0����xp5ie�����2	�����B3<]���H#��l�kLsJ�A�L�=�Z���N�2��)����caO|��������o�~�xAf
,��6�G��D(<Y7B�Yi����R�7��Qi�-�`����S��0�x��3��R��08����2�3nY�/����?J{���r�fFy�z5���<}�T�BCFIS�}�����f����+3��3�T���D��a0���k1p|Fe�����jyWBK�[�Dt��b'���-�p�y��v�\3n	2�}E*����0�K���m���h�e��]�8�B ��:�7�`�������)�c�^��W�@8��O�e��
���!Aeo?��2��7��'c���
U5�����7�?��-D��~7�b��K�K�;f���tea�����?�������A�i?�T��0�y7����pe��:��Y~���O;��w�����2	�G��TB"��X8�z��Q�s�)G%���@��tv��������q�b��DLY�Y��*?��`��|>��n���]���O�$+s�|\{�ax>��H����V*cM�*x����F1�`�LK��2�5j���\05�f�~�s/�n���p0�/��i�d�-����Y������u����u�`K�,0-�'$��Y���8�aMz���c	�)m�o"��4�Q&���d��F�dD�av��8��C�������St~7
T���hY�kw]D#���5$uSq�����t�V����$���v�0M	
�?�������+LYwhm�*/�J������]��o�O���lJ�u�p}���
�2|z��,1�f^�W��]#h�&���T���t�����D��+������V-��Z%��v�oAX���B�$�q�>���,�7?��`�
!��a�'�\zV�������3/<�T70�+����q}���Z�:�9f���l/����=��M�n��8D��t��������#t�d��>�8��S���f������;,{j��P�-�<d?�8����������of�X�r'�\��O0����?�5`"���c����H��	�r/L��r�|v��^�}��������M����p�L�fC�NL0`4P����o1Ow%���f�u�q���'����.�E�	�,��Hd.(6�5md��TB������ (o��1�\���'~F�`\Ox�7(��k���117H�.L��r=����,�`5������9���S%2w����5�(&��?!&�CJ��N�����\7�0j�2��\�L n}�-�YN���:>1��+�D��)��2��YFo������������L-���ZyQP���E��I��t����k#b��T`�����c��h1�c�}�����O���.�����$���4 ^n��Z����af��Che&r��z��K��ce���}%���6u��3������g��<zVf��/�B
��*%=Q�+#=���{Gm��9SJ��!|��FO'L~3��%K��)�[m�-���-����ge2���8SA���g=�����K�1zB$i����7��:x�Zt�j��o�z����p����h����<��p�t�$���m
Z�����B����9�A�V~�'��Ll��h�`�]���z�s����r�J�����7��8�+�M��u{]��U�o-�`��;�(���i	��)��,V�B����x5���B�g+��k'-�n�XN�-�3���_]��8)5C�i�J8�9.o���.|WJ1jYC��U�k�x=�5F}��uk�D��l����j$�ek`[S�b��hsp����'����H
q���y��@��yv_�Qg��9�3�\X	��Q����.+��[l���Uk� 1����c8t�~1��z��,��bb�1
����mebl�����n�]	�[�?�(Q<jak���d<��!&��T���I�M�$�j�v3����,�ye2��?����D`�@���{����T����=�u���J4g�+I��y�����+#�dKOV�<���E0�R�<���3+d�S�9��w�=\�����$�������3�4��C}�"��2&�J��da�B!���(���eRd���x=��Y�(�?p��v���(�����M<�_(���~��zXM�*�~Z%X-ww�D�5��@��e�G>6�s!G�X��Qp!�^�������5�#X�%�_E���W��Xw���x�M	�N�.����,XDb����������I��� �+S��������qB��D%���J|$�{���E����g��#����0L���R��h�B�~1|i+��_���H�
�y��8G�0*�~�� =7{�����x��d�D����i�?�)?����Y+3�S3| ��\��T�d���a�Y{��Z��wjp��T�����sMT��@6�~��w��M��'�Pi��O��gp�|�
�����[����'��G�'%�������2�f�o=w6�*�������}��3|�~Cc����M��]�VQS��?����~ie?��1'�#�z��Lsj���"�i��BL	~p9l�a��<x�2�/>��\s�bW�����7��'RW=���WB����O���I�����Z2�]�-��-DC	1���P��
��,�0�A�2�����T�$��8����J���L���?��U��8u@.��n���U4+!��vx��K�m�;���iN	Qk��.�������At�G3)\��3\�0j�Paq��4�����3����+�P���9�����9���A~o�b��)C�V|�
j[��_�`����������S�	�����0M��q�h;i2�4daTD�X�Q	��g�4H9cR�h��*���U��!A�l���c���u���_a���@�='"*��5���}���_��:-�X�t��@�E)�6��sR'B���R�����b�6����-N`��&�E7�j�.3����0.�S��C#_T!N���
����S�#����}R���&�{7�J#���T��v`j�o�����(����F��y���bZY!�(��m�N���8��R#W�����dl{��o�?����cu�+�E�`]j�?!�En���
���}�bZ�/�l������N����>�rZ)%���2:�����J�1���n[Joo�����o7�h��\�53
�xc��g�d���,��"�\"�t��>��o�����g���"�MtQ�>lQhG[�����-7�����I�P;�d���	&�NNP�~1��m�z��LJ;�\S��/f�N��Q�zE�����/��/A>��L���������~�����5������u�z1����r{�zU�*v�b����B�9�aN���2����	,s!�������z�E�x��!1���T��A�����A_^z��H	�u��\)%t��Yb��tGF	�]9%%�Q�d��p�^m��#v�2���Zv�ua�.���/�0��/���k8-�����41����PsF�������9��h�4R��R�b�S��d���F������F 2�_L`dt�'SI�J���q���������8:Q�*,�H�}s�m!j�l�0l��5�R�H�L�U�
f6
%�� =��`(�� �IW�o��x�V���'kE�(�1����o[)���A����O�F��l$~I����Z�X"����V&D�#=i&��C�l��2�7�6a��*3n9�^��n�����:��]���'�=��d!(�(�X�.�'�nI���E����1'Djey�eB����J6u�����h��
�������;���P��X��|����N#��L�+=;0��������o��Q��,s��i�I��p����.N���V�'��[�n��p�F-�n�L��\�|I�r�%���(q]���]�V���;��{	�!s���3��f�N�����rp�����@�E�B�0����2� p��p�b`HX���B`$h���i`����:�0��D�h_�t�'b>�b��$�������d.����G����#�f�MgUv0~��@O=���t`��b��������87T�o�8�I�����Ms^�S���9��p�n����W	|ag�`�	��n�6�x�I�Z����������O���(���q�KJ=�e���2;�����{�R�����;�^�����s��I��b��qx�1��0�)���>�N�2w4$#�B��I0�I�R(�gX,����Yq?��a�R4(4��Sj���`����c2N����n�E����/���2�d��������Z�����o.���N��R.��f
�K�M�VF��2�X7{yIe������	��o2�)�����P,)���b/���'�	����iVF^
}��[�p��nX�o|��y�`�4��FY4�x�wT�����������x�@����54lrettyP&�mq0�V�
�ePT={*�&J�Ui7�����-M�2�e���7Om>�����ob��69��qs�7�Kp�q�������E6I�����j�?n��I7\4P�yH�~1:����nv��b9�dQ���������Q�x0�H�����uQ����RT&*���0�8 ^���|�e����"��C���C:�X���`"�����<��i5��A��������[7i��n���;:�F9��z
���cJ�z�������G<�50�_L��(%*~O����[�
}���kj�-l��(�T���<��Z�4dP1���e$t@cw���4�D+���������:�{�wt�,���iN�m0���|��	m�BD!N�����#Hf2��$�	d�K����M�1`�9���J� �y1�0!������;�coZD9l::)d�>�/x���qYS=O��B �ZF*�����D����cI�^|���i��B��NQ^n�d�����B]�����K����N��+�D=�'v���p�V6����f>�4[�g�w��k��!��&t�t��@����9a�+q�r\@�cM6?9Q��ZgB�+��uYe���8q�v����s�J�K���`�/���	����u�����B��D����2���j��{c�J��=o�oLz��6Dd&����^x��L��7d��PV�D�.T�1a��Y��.E��O���q?�'$B��R�#���� T��	���Z�M��k-�B�Ex�7��V[�*�=I�{BU2�K�2�C%��0����	��
��rsh���iC��=s�
qc/�=Kb��bK�B(���:dN����EEo}8�%c9R�/F}��u�S
���u+2s�(rhC���p;��R����p��o��s�S��>�����m~�q,��� �����+5�Q����ie�)<�.���
7�������n��������3-�d&���c�j�NI�L�-�v��D��q���Z#����?�x��Q��?�>AB9�%w�V�����l^N�/6����L�Z����X���!P��Ot���9�L+�
��Q��H��+#���N�]�b�����e��BH+0+=��)���bt�Cd�%�7�n�������2�j!2|,�h�s����ui�#�a����7�f}���������^!0�!}�����Eb?B,���"���.z1H�1�_L���

�_�K�����y�G��j�	hoTmKL7�t2�_�������]�q'��G�r�aA�2�?��������dk�������2+�I�z`4^��/�5e���l=�M�}5�W�Y�)F5X�Z�Hi���w������
�����A����O�XY�[��&�����"�iN��a�l�lW&cx�U��`�[�Wq�t?�R�@�]uO,�w�n����&7��
�V���qy?�Y��i���j�n����k����xh,o-�C��G-L��=K*�@�{C���:���Du��Q�������q�>m�M��p������zft*��u�/��K?p��D3&:��V���0��V�P�\�-&�[��h����3�=S�`�R��B�8�!/��n�
6��O���h����4(���z0l�2��r����i��xp`B�m�1���/�$_G$I�:tJ�[��v
�I��7���I��dn=����H�
�E�E�1C���
c�;��G��S��CF����A��>��z
��mi��qd��+�����_��n��M$���>+�����A��6;���w��B�v;	���(l&�n7������o�h^�;��q(�>x�f�����8��MN!c��<�S�	,�8����� %��nFT%��1������nz$�����{����UZa�P�q����0�?obv@d����])�M1�ck�n��SfX�M�U�?�v��#�����XN���j���X}���CaK��T2%2�I@wK�0-�
= ����\���e	
�6�jm6����S��H��x��]�A�� �'*��bbO�~��N
���C����sP�o.��u�P�_�V����������~�*2s�4U`(�X�+L���[P�;
�J�����]�TE������'P�;MO��%��
�����9���)x�=�A���8b�OCe���L���]g��~� 0��2�/��8ch�N�E���/���/�f9b($���X��aq�u�.Dr����i�DH������R(�&����Zm�}7����J�y��y��j!3�!d��|Fj��w�B����K��QGIg�6`<�4����i���4�2��-�s��j21
��E�P�I������Pr�Xk��r�XFk�J��##k�y�J��+k��f�����Z���?���������������������&���>%������S�������s����������W%[H\U$W=���^�Sk���`CXt�g����`I��!�v�������� �q"��G4�c�	A��C������]�d�������W��f��5��g���Dl5�����,���Ejy>O��Swh?<:�
 ��!�l��{+��5�M����cX�N�]�-v��rc��2����
6`�x�9�vuQoW<;N�����r�n�JAX��3�<�b5��X80��f����i�9Ue���Q]��\� A<�3�_L���d���7�nu$�T
�1@��*g�����b)C����ED~,w+�+Pk��h#��T�]Kd�QC��ulD���I?�G�(x"%0�Jh+��6����dIB�"Z�h���P,2�C2K�������i��+��;����)��eB���VH��g�Y�	��r8�s�
s��t
�a�S��L�L����TJB�~Y�55�u=S)G"_�����:%Az��:��U�����Z%�$����T���*EM��(	j2\�{)&�On)�BA#�V{���>�aN�&�\�S����I�r���:�`A�c�U]�dh��DXNW,����dXT���c�Y
�/�B}�����F�e1��|��K�*B�<y�*�4L��N�1%� 7�dF��L&��*=�1%�z&�	j&��������L���eN����IP�v�-��8�o��L�����Hmi�o%>h`O
��[��IP����|\��j��4��M�psh��gM�$(E�.@��_mH�B!�����_�j2���r�(7_@��a�A����S����4���lN�rvmS� �}Q0T�n�W}�W>�?��$G�*_b����P6��s�6�@��M�x�X��mt���&�����B(�!'L�DE`Uaj&c��v	>����a
�e�0�H}S�g
����NP4g�P��1��%C���(b�g2F7���C(�'�L�&.P3Y����H�(���B�G�"��Nn02�,�P2�)�<g�%�`\��uD5V������h�T���m����nd�	+S��2xF�[

S����N<Y*�q1�X*m�9������ko>�4�G,HW�pTD�
��i�^Y=�L;1����-X���B��,!��"2�v���[qMh����h3=+��I��!��|Jr����Q$��b�j(>=#�r6-�``M�'�2r�aU�)�[�����B�zOH�V'�`�Z5a���&���>_*�d�?�����q=��Rd��'Q���������@Hw���E�NQ2����%p�0*uD���:�.��o�f>�Lh�A5	$��0�i0�

���|�X
���-P7O.0�f�����}�D�[�o/ph~����k�z�Z-������.2n
���5E������qd$��J�Xz��
��x���i�P�d�'�^P�����>�����7�<jf+���DK�������(S��GIw�8�����a�P���B�T�,NG����.,/��60c-�����Zxf����n���3�_9�T�'{��=�'�� ����{������:K�����-�'@+�Y�"T
�����2�|[RaS4�d����'!)�iY"�L`�
��y������F5 ��������)7j��QKOnv�X�J��2�6*����0}�V�H�]Z�������H���U@wrQ����	h4D���3�L�O���&���;+�;i���Bq��3�����i�	���a��%��0����n���'�sV=H�V���',�������%=��^Ey���>��p���b�[i�C��HK*C��-q���
T�gR� �z����^\^6t�!:z��
��<�����?���b���@T$j����Xv�^N2���/���"E�4�j.�P{B�_>q�nr}j�����K�9'e���b��S}��x���?0g�����L�S�Z��.~|��Y�<u]��s�>FjA>�d��5���M������,Y�&g��sx!ya��R�<�*X�O��P[�F����"�����d�{�3n	�LS���f�"�|��������n��6b����@I���-��@��q��P�L`�X0��4��C������2,XP��5oGZ�8�`hhb���>�5�5	�qM5H�\P��tt��a��;���a������-)��1\�����W�?���6��~>�<j��q�����-��I����5������1O��h�!��NKV#p0@w���i����,�_��gV���tkCQ�K���i�
J!�E���l����w4#�~
p3�����.�1;�U������7o��S"4ZFCg��t���5M�
�����M��b�a#@@�2`�r����HK�fm�B��vl�K���	�v�280��q4��9g��XSzC;jLw�\1	ZK��Q�r������O[�;1��Oj��!y���y��N'���Y��e'�y�/�&�d"������z��4)�����Hg��K��O0';[��:h���,��_7_���k2�Ew���7��D�N�hib2���T�$BZ��#���;���K��;��}Z(%�	���&������($6^H-���@������V�����Yo~6o��5���<���K��t4��'�����<]J`CT9��S�K���6�L3��b2�J������iN[����H��������m#�P�|��	��q����I <Co[����T\�&�6�^��dtOf�&���V�G�EN)�Y����+�hj�8���+t3���[6���[/P`=nku�$���8����{<#�N�v~��+�
'���k�u��(�� ���3r�����c�������K������AuH�j�Bhu�"���AgB���������rn�+K���K�Yq���������fI�+�����fR5���J�n3���T;�=x��X��p�;���������7�d<���lF42�d-�@p>i�P�5�Mn�B����������	��-�"��H���+z��s������>m��������Bl>��8��X���@'����~@n���A�����5(6�P��V#�����/W
+��r�
���I#�����;�I�����@�h!u�P.7[_�f{Wl<���n+�����b�66V�2������!�����nD3C��P���Jz`6�y���hQ����a�(��L��bi��D&YP&��o�}�V�f�b�3���������>���F	�t�S��4>�������w%6s�������E]q)o����.�����gBR�����������������4�9o6�����'Uql�@{� 3]$���>x�0d��'����u(U:�Xq!��08
�����p>"7�6�-��(����M�-]�y�B[33C2��L�eD#����A'�
�P�u��
i����cPs<�I��$���	3�h?��)nxXRu]
/�A���F��
1fZ�$`\�<�uj�����v�����Q���Y� .�T,b�������$�x�/�Vt��T�2�G]�����r��`y���1��b�@�V�{Pm�=�C	�H����!`�2kG|������C��d}!����e�A�}��p�n���"=���L���V`�����q��
5����n�dB?��m�6���}�N]��3�����^��]�G����B'�@ %�]	�s]�}���,bA�[%�.Z~�N"iU��? �#�V������(����|!~<���
)��a��c�o`��
��m ��E�=�b7��g�=��(i��$���b��vZJ��K<�F*
�0�w,�����d�M�����.
��=������H7��2��yM����)�m�;mb����bq����*�pS��:��")D�j�B��y�=����p��� Ph�m6�.m<vw��1C��p[�pc����4~<M�m�X��������"��_������.R�0����g��1���zM+���c���o��*/����	Q����
g����p��Y~Y�5���Q������Rcb��
2��2-��@�~�L(��?��N��)��8�d8aE:Xa��#��@g0�O2�M��f����[9�!(������(���t����L�[��G�)���}*�|n�"�F`}g�@3Fr�K�j���c���~�������������u*����G���!�i�z�'1����
9����\�����L�h���jS�&���/4�Ft2�D�<���r�>Y
��N�M?���{v��Xa���0	H����Q�wy�f�o�����P�ma�6x��=����T�
�=��Tu��<�A14������4G]���@��u�4#s����b:���<c�o����v�^r��Yw�N���K�|������?�zH~����/�G����^/=_<z���|q��9�E����K�����a����8�|q<��9��s��[�����\����k(.n����b��"P\�����(.^�����(G�x����=W_�H����JP��=m�� �i�-�� ��*v(]���qUQ�z>���tU���U�,�����R����XJ������t��jJWK�����������������j/e�K�{)s_��1��E�����+?Pt�=K)P�Uz�U{��UP���P\<r?�o)�=�wJ����G�����H�Q��X���V_��:<k^��r����r���r�/W]_��U��������++����k�����������������9��[�����\���=�U������V�*���(]u�|9JW�\W���*��c�z������_��/�X�U���~V�*��Y%���g��2��U���~VY*�Y%���g��2��U���~V*��Y%���g��2��Uz��~V�)�Y%���g��2��Uj�h~V�)��Y%���g��4z�Pn�Lc��v-�D��Z�c(��i�������0�r���m�~�x_J|�RK���C�_�����R�c)s�c(��i����5A)s_��K��Rfy��dD3�;�����$�2�����`V��%5!�l���X�����w�7��FH��2W]����q�
O�J���}*ekb����)����Ct���;@0�B��:�#z�o=H���� �����k����c��JH��1��"ih3f t���BHtmT�"?29����?C�*e�HP%�R��BY:(�)���@����"]��k1���]��[�����`�"Wl�@U��
K���;�+z�;�4D��%����'�9Z�����|��;"�BtlP(Q.�����]T����WB�4�����tX)4H�]�WF�h*B}����	�+�pi����"p�Q�X����3�����B�>��&�hW5����.�.z���.�B�ew�.�#�a����l�ML	������y!Z��bNx�N>9a�c����OJ;��VF`g�pn�p����p������c9^���=�`t��tx��84�y��9q�OE�R�����]�g���J�W�m��;Wnrr�K�N��_*�JL8�H(����5��@<��`w���t�#������U�(����RWf��L���wl{$���g���90�X�X���hl�N+E���)����LC�]O���e�Y��OZ(�u��f"A�\��f��1z�$^tp?��N��F���]���	-c9�w��TVqG�����<8Hh�p��z�]�QxX��u�xBO�mx^M�����������b���uK���8p�bG�Y{���Zh���+	�����+�qP�!���n0Nt�k�����W��Q�������)X�����A��+k��P{�A����Q�H�
y��ZI���@Z�^��F� Z`�5��Sf"U���H6A��aR��\�������Z
C�5����p��p$���7�����
�S�Q�jxW��u���a.�3����h�^!��B8�<U�A��&h!:��
|�Ot���5��
��>��_�N>lJD�o��]�����YFG/e��,;���
�����HPs�y"m�j[�a��M����]�7c��M_���bX8���7�������a�����_��$E�b�&�r`����`��������M�� .��J������e�C�����7��T\��;s���[G�z�BP�K�#�a��v��/��k����[{��I��������/|�o�P��_��Ts�����4a"0����iNB�����O��
q?��06^t7���	�&����������3XR�����)������	���Y��T}�������W��s����'+�zCc����#���X�{]D�`���cB���S��Y���k
K�/�|>����qrCj%Z��&$l1��]��nzaV�~	��_�����tM=��� /�!m�{G��wa~a���
�Y�Ne�}�nv=t"�>�F�L��5��#��p�V�9�q��
Bp"���U���������������}�.a�x`sK�����Lt,�b�hGfg���J�]����2.��w%8*8���4,��������P�ox���5��2#'y���q�1\;,|#�>�@�
<P0EM��	�D,�~s����>6+���_�c�P�7���J�X���u z�U�C�y*>����y*�C��:d��S�B�n}��x�
���� 6�����=�f�����x�`!���p�E��Z�o������h��x���.�$7q���(H���.���v�w����z������Pz���{W�^���6G���dj���M:�8-�eB�d5��&mA@������4��qrB�jv��{1#��B0���6�8�X� l�@d�gA�*��~<��
Nn�\�}3��j-�xy����kX kT���^�Jt�JP=-�#�WF�x(�-'�w���;��H�5��es~[	��4\�������]	G}�iE�sYx�����#8�j��2l��X}5�v���yI�F�[�<�X�s8�U�)&��*��e�P��06eJP���?
t��5yi���m���1m������|�"�Bk�'�����������2���{�irv<V��S����W#��y�����I@�������{����8�iH�<������'�	�z��Y��J�����{�,��s%.�H,?=x�h��E��8"��cD'��J��p�
M=>C�*�|��F��+���d�����6��dG��c./�����=t^��u2�
���w�����wG|�V	G8�����|��Y��������m�!�?qr��5�����0�}�|�x��|+������Z:B�i!O����#��&�vDP��l�� p;����7�P>W�n�P����x#�����dq>�z����0�}����^Z����:P����7�r�~����1�������&d��R�yS���zZ�2���� =.����A:�}o��k� W}���4��2=�2��1�.0�	�9�s��t�����
�3WF�5#5-*���H2U�[A�iIb��I4c���1��v���>WY{�>��b���t�>���=�e�l����P���SE����fS*ma��iQm�]�Zte����*/9��.D@���xj�a*!P�B@�*���6J4g�Ft��}��U�����LU������W��"����2L	<]�d�_��������E�j������P���`[��]�}��;S�Q%�nWF��+�ar��](�C��s��������� E�3M��!������u.�f��V*O��"�z2j�|(d=��i��se�!�l��a�Ls*��11��3w���#��j��7%4�-���#�3�?�~0X*
�p@_j�����,L�j��#��b�Z��=�Kl�DK7���3k���������rf�:NU"CK��r�'�LsJ�v3I�qpv|a����[�0c���F�I��a|���@�:��o�����If�X\�r�����z	����d�S������|/�e'�F>��������V�i����Z8�(&�?`~��#F;=��xx'�L�S���#�
67p��d����Nu�~�iq�}�a�f�^VQ��<!
J�N�'��QB2�r����aE�6�v
,~f� $�l���+A�i0���zEu�������iNI�qX��8�����`A�+��D��6�h>����J���A����`����W&c5F�,%kqNNK:n�����*LKK��89�s�H�J-��������{-�D�1Z�4���J�~�+�(�{�����c�!���2����j0'��N{���'��%�#����?`-��Mt!j@ <Nv~�����';�;
�%��[tm��G�g *�Q
�~�f��������~�� l�#�� l���������i~��$z��XA�_��\.F�7VF��������*�M1���d��2&I�_1M@<�1�M%��V����`+5�������%�CCi��h#���������EI��[�����,5�Q���m��w��=�sf��M�dEh���9;uF�����@�Rh��E��O|�������V���<�V�4��$�?��V�?����lB���F%b4�����J$���i�'l�Q��a��#�l�Jh�\t��&H���������W�H{���kja�555�irM)�\S|%-1��8�������c�C�'���6U���.��@�kj^����}^4��3�0�af�o�vw����J�h��a��y�P��4�I�����_�`]���yX� �L�M4��[R�h��1�[$?�w����9e�#����AU� �����|� tP�/J�������B����!V�RJ2�R��R���8�v����6��G����D@���q��{%Ts�������rPU_���n�:q���{����0
��C:�uj5Oh*�}	�������O�A�0*%�_=TFf�Q��r9����%��"����SD�0��Q$]�CD�t�E�`���f�H�p+s��*��*�������P�w�2.L��n���`��[b7��1}�O
�����#[�p�R]�;#`0C+n!�!f��(���2�5*�����mi��&����o�i����P��G�9%���kV
�J4}�E,����t�o��G;���5kae��5C.A@ ��K7��3+ne$��U��6!8`��*!N����]�d��BW�i�el�Q�����3��Z�3���l��qK��k�ks}5�4���8A]���p0Wu�n���V���LG��\�+#���11��s��5����Mn[��t�=����DDq`h�����q�I�cz[Q��o���{�{u%�z��8���x�J�\f����cja�L�/�nZ��������!�D]s�-#^p�]�A��V����~bf�ylW&��W�7�cK���Q2�R�����
3[?��
�����������D��=G~�
;q�|P��c�*��
�)Bc�'
8�w�4�
�J��L'n&�������a��
�d�I:~�qxw5U
.fz"_*��m�*��Tv�nU��B)��u?����s?�_Io	��/�����`�`*s �9<�
m��?���h�H��1���
w-�6_mF���n��uk�`�7\gRy�����beT��-�Ii��
#�����������K������?��KW���V�n�||d�{%��-&8�s���QB��'<���4:��F����i�����F����[��;v�n�c�	��_����������>6�|�q��~`{�,
L%t���>�
���G3�5� �G����
��-�`N��a}p�^����C�3����u#��p���w����	���|�!�hWB��g=rpn+�;��gfr��y�pZ�&�:]������ *p��\��~��R��X=��	�_L��q-���fC���t�@�v��;�
����E+��+�P�&��;|y���O�3<� ��7Zb~��2�7�a��6�]�����&�H�����oK���}c��3���������<���d*2��K�a����?	g�^5�?44����+��������/������0u]�}�����#��Qx�MH�c.�����g��>]��L�z��w��?�2(��SW/3���7c&�V���ji"��jk+�y����A&V!$'$����W��C[GX�X�X	�����}�����+�?��4�K��M��������=6��Z2�N#����dV!����&�}'���J��`,��@\i��4
���X^�F��.�$a�����4�:q+v���*�K����Y���+V�Y���3@�ns`~_T?��c&����g��q���v��
������� �Bw���������
���8bu�:�NC�2��W���*�����?��w�L�B3���@;���W��{��Xm��LS���>����u`���T���?T�������z�RF���G�+��d��h>*���9%�l�������lu�Q	��������9s��_TF����'.O�_]� �����B�cf��n��VF����
2�\^0p(��~a�O�����Io%Z����x����b�{d��#�����}3�5��"�%A$4|��DC#�M�t�0Y��d�*BHD��c�P�	���I^8�D�.DS��z��{h�w�����X��\�]��Up/�����H���@%y:~��D�`+�Do[i����x�_����l��B�T��k-x!��`������(���YGq1����X:XuF ����]	4���!��
��2�-�-"��iqS����
��z�t��:M�l>A�>g�[T�F�,�[ek�������+���7��U}=����n:R�d�j�*$U�j��U�E�X�V��	��:bM,M#�&�������V&�F����I_=�9%��>X�`1�T�#Ta�0���;�S,���h
���Q0�4�:=�>���p��`Ab�vD�S��:��n�Ch���
z�?d�St*�2bl��`H�����,`�D��*������?f~V��FFH�U�vZ��V�!D���>�G��G\M"��`��������C�=�RCX0\�P���*��������hp���G#&p^@��5�9%�M�3w��k��b[TF}$������
��8~u�i��!x��/�"�f�k��.Lg�E�������v��A
a�7���@`'���|b���������wX�i�ho��(��`�g����b���@R�7&c3�$���0B��dh��s[0�Jc�)��EO��'��c��x�2�,pf���|��4��f�7�iZn[�����#���`�i��l�s\�\�Q���Mmb3,�C�;C�"4�+�B��nJ�
�m-%`d���X�A��
���2n}F45�
�+A��B#>�m�3�B5��b�*��y��M��^�q\+j?~��6�~1f�k]?fpF��ql�;�oU�F8J�Nu����0k��F�`u��+�c�H�����4_4y1�4��
�����4�4����
����1�$�p#\EM�]U��� fs;��s����f�������n�7�fx@k�����h�2�Z���Lu�0���a�������W��2kE�1��[��3<�<�cT�����jK�'�(���c�6xf2��#���p� �3j�]
���M��J`�L�X�Y�=]� ���|��������Dp���xX����2��z���
q:T`��4R����0��va�,��j�m:��5�/_�x�7zz���ij��b`M*��#�?����D��jV��P#'>�N%F`����m����2�{e��l������f�%
m8|�y��A(����2b#������;��J$H���ZJvW!P��5^�s���9�&������5����B�������$��-3�/�d�����+.�q���7G�@���{]��2��S0,J=q�Fj|��U�������q�2*�����/"i����V���4���|W�-1��i��xnL����#���]f2s���<������&��Dmpw�+��K��E#�Z����a,�I���0��G���y�9%�������:����� M�N�����L�Hp�!N3K�EGB��93��J�f$B�Fd�>�����J �[�	���������Z�P�VT�yQ��#�0gdg�1�d>��]����S����'����`8�y
�(g�8�����-��$,���q�������f*m%V��#X��Q�V�R!�8�bh8\`�e&p�d+�)&D�NF����G���!��0;"�u5��?L&�����~���XR4�"F���6zB����6�2|"*��R	��9�Xh}�:��J^:X\���0���3>)��"r��le=:6�$H	F�&	Z�����2����b���'{�����ld�>�5�6�&h�O72��[����G��Xe��)a$u8/�c����>g�K����m{�,Ns�>� ����Kx$�N?x����n=��t��	��T�[���b�.�y1��N�5?�c�AN@�����^�	4 ��v��[JF'+]��4��M���2&�[7�rj��*��ov�P��	l
+Y>�{
��+�?,S$�W��)��-+�{s�wc��5��qd�:��@J<��oG�}�����s��L�z�[��x�!���������a/��2�1����t/q�����S�8�up��8��{00��+�CS}��
���R�/S2O���I�UF��@�L�}�(��������\<�R����������0�u�������C�-L`���������%���\�I�����3�_h��]�t_e�3>����k�I� �O�}�m�t_!�E�M�=nA���������F���b��$��[�8&}��\L>�D��b8�����-���6�HP����)cL�0����x�}��|C�����B7���@�Et�]"H��m�6��|,� Z�ll�������A�`��m����`v���0n��gP�4�He����<>�[�-�(�:�@���CB����`�a��~V��S���z����wa[��<���gdl��7�����x$�{�(�>���v�9�q�\�����z��dCJ+�����~��'�`���T���e�C6*��m��s57? �0>�H�T)��+�l��1�'!FG�b��Kb�!���1����fB�+�<������:����Vki��=<j��+��������6���7ZM��*���"�4��6�~�v��6o'B����ro�n}��IGg<�wel������2�~16��IGV��t�I���+���_&l��%�1���-����rtL��v���_���!��o<[�>������lp�r�_�/�N@p�h�)����H���Q\�|`��Q��f?����*�
�"�5�����mVX�������f��k�	��N�b�j<��1V�3�����N�����(�2�=�����i�if��U�D�����-zl�'���Iyxe�Nl$X5�~1��kG�O���O�{�����J��f�'2H���B(�cO�C��5����H�Kx:d�Vo���U���Z��=�X��s�i�&Ah����i���4�0iw���L��~)�#�@A4_|r������������i,�?b
��'y�������}��R�@ji�?��As��k|��
���2��=�����L���{����-�c�����?10*���S	������O
a�D�Bn��EEgI.�b����D(l����~
������a���3��V����C�u�K���@����v-��B�,��_�4���Ci8}�_���3��+����Cd��]	�&��Q�m;��
���
v�bL������f�&e�����
�T9��������h��p�ic���3�kal:�����mR���O.��w�����H��e>
�i2`Q�V!+�Q<nK��0&���UF-�"��g��4"�gHf<f�L���I~�`�"�� L����!�����h2�a&~���>�<cY��9�o0I$�
4���v����D^��T��`7~��Q$�
B"��!%2`,o)�$�0>1�\�7l�@�C��@��[��4,�4���+�L�1��eoY|��Ml�a���	�K.O(~|1B�LA4[�`%�� ��������_ze|D��B%�-2���|��������W^��KT	[�p�k��6A��&�b���U&�#�����>���������w��$fD���O�Ie��q�5���c:�{/�6�'c)�4l�:��}qB��u�Z�t�����b[�P{�B3�NS�C����>(f����i�j��3Y��in��<kC�~1�4�1b&���	c�4�O;G��������:!6�a!B�mkf���� �g��>|��D��f= 	gZ�Na�z	8�{���PT�������zja�*P�z�����*���*P�*qc��"�z��Xg/%>g*��Ky���{�R�s���������g/%=g*������<���������U".�y��!��]/Wk�\�L���*e��DW)�<#�J�B�������� 	������r���{cX�
v<�Ly
�������������6��sy|���>��*�y�������?o?����������o���E�
W�>lp��=@���~��z�/a=���A/'��}��[��&n�3��w���z{����$�~��3l�v�-2��+���g23�V��>�k��f����� ����Z!%B���|�'�|���3�� �����hw��Rh#i_�{2�RI����'9
��
\.=g�	��t��B�4B��S���5�@�����x�=�-��ne�����y�d�2�%���.��n{�xl2�	J���������d�SBh��G�^��q�+����B� }�"�\=����p<7>��~������*�QMR�UF�F�5��i86�[����Ck��,Z����PGW=����t�?>��W�Z��+#����i0��|�&���kO��g�a������.6�=$a��j)��9�
X?�S��ypk!v�Bz��I����iN�-�#�jjl�_��b6=(��'��Y����:f��������N���'��-D�:S�����
��(��MK�%�[��@���_���f�l��y�����9����r4���o���Ffy\����w��K\kyzC$f��m�5�g���1��rVx<�/�s��%����
PT8����=|�7�
;+j ���N�2��{���2	����L �3�< ����0�1���'��,S�����Vf�	B��}�������8���q���
��`� 3�I#��=�E"������4mG�oT���'mTo#X�������b�]���.Q����b`>�we(���~R��j�UC���KN9�Z�_�~��jxsi�vI�-f�\P����BtW�6�,Io/�.1�{�t��J�nf}�Ct��0�w��no`��+�%J-&>fn10-��N'�k��f��d�	��$�^!a�5Z����\�K=�*�o)��a����������0�.5��D��6�\��{%�U!����`�:��UB�gC���(<�~1��Q�F�:D3F*T���������wL,*�-�`�q�/�NZ���G%,r��H��`8]Y�6�>��O7C���}�&�j���6��sh����w7�>�����Q����7��������21Z���$5�R	������^oCc���#N9*!�<}������`r�Jh	���o���	�1e<f���� 3���3���
�������]��?E���I�jz�c&'�����X�#
l4j��(f�|�i)x�WF�����#��O�L������[��p0�/��ip�'Kla�?�AP��u�����pHW�����������/��u?>{�3+l�gs�Q�Z�S�`�D�C���W�����dT��^����0(K'��qh��n#����n�6g�ei��}���.������z���8u������jx���^�q�-LSB#KO��d�4�E��3d;���0��$����Z��o�O��sO.���
�*�jeQ!���>=�p�g�?�W�aD
M�0������U�c��H��J%���0ve������}���w��17s����<T�3�<��w����9���rB��DO�����*�����ogg~��TxW����s<D�*����\,&�����E��������'��>Q��p���1���=2�o��x�0Y�k{a4�v,{H����M�C-�0���H��c��c����FF��7���	-��� ��96�g�L���(-�������Dx�&c�I�0�U8�F���c?�m2?�c��A��HM�lH���	�
O,$O�����J�
f�1^e>y����DYT�0I���I$�.(o�a#��I!�h
{�9E5	J0��+#�����������mvm��n���b���I'}$$$�
D��: .
x|f�1�\�����^c$3q�r��?U�������\3�!)��vB�.L��C������f�Wo�3���d"L�Zx������"1�c��b"��d����+!��
�-����5����z_~'�%ef���O�>�����oi���Gof�_Gt�����Q~0.S3c��k^4%�'�3����$G-v�r"��3����g���0�����'�4�Bc�3�H��.T��n��5n���n�k]O>��|^��0���GP% ��a��2���>�
���	>'t�d�?G��k�\�7�����eUIz�$��<�I����%�L�nqC�xwAJq���P����yw���;h�-���%������d����H&X��g=�	��{�DZq&*�k�X���y�
?�j��P�d��=���Fj(���0�|l�������%e"�3�����%.'a��w��I�)�U�}����p��i08��b6������]�-������8�Q�,h&
p��=V�k�F�[S���K2;^���1��T�C����D�P����WH������\��������n����[z3�c6�_����Z�Yl�p��������R��e��<f��&f��u��q��,C��Y"BHn���
*"�eo`_S�b���gx�\������H����k�,�tPWfIW:=�0Y���pk�p&������ty��4��ND`V��Q�E<�������/F�Uo�w����3��������ee*�5~s�����j���G��0���f2���%&��T���KM�Q�{��Z�y�}�������������i��uEk/�h������7����w����`�T6��2x�2c�TK?�.N`���B��pl����_��S����������:w�2����=�����*W��g�����q�x�O��mS����q�r)r�}^�E3����Q8~D�
c�0��D��d�5�eX(�������x5�Tr��L�Z�:<�lk\���
l�/{���o|>�{K��o����C�Sg:E���P����������!>�A����T���1L
�  ���7I����{e�'Ms�MA�Vf���GV�gV��j8Y	�d%�&��=Xe�"��w��3�y�b����w�&\�gT������e"��v2�B2-��U!�prY�����L��^w�,�BAT��E2M�����g����$��K��Vf��D��5�U}Q���k��Y{�b��B�w���*&�VFXk�h�;�����2�{�h�����cm���$���B�gxC�y��?�J�\�$;ny>)���O��X3cm���
O�$J�����<�U�
����w!
�e
�h��F�\��#�u�7&�Y����#1��5e"�el����Cbgb����@�L�4�/�0[���p�P��a�'r��
e�]��a������?^'o��kI^��0ng���������
��,�2���q���G[9�8a����kB+���L�LM�T~�,	�����'����q���F�B����~+��u?T���`�2"O��J�B�2c��mF�s4��+3�}
�v��������HA	'�b���6!���:�@Q��L��(n]�5���C}X8�:j����+c^��2xb  �����ot�L`���A���@��bg"�p�����:�
&d�f	�\d�t��:]�9��U�������t������aV������?�������L�eF���N���=��'�
���
���}l����0��&BM���4�{9WXKJ�S��7sz(����t<de2>�����])�S�����]{��0�`������P����� �����M��^|��x"v 8�.��r�wis�����;����Y��f�a9����/���o������)$�y1�|���Db"���z�|3�������_����eU�w(�)�-�@�;���(�tf���9�M�3lA���1���5���*��u�Z5�^�=����W%���TL(��=U��p'�:��p�i���C�/`C������Bs�ay��Qz�I�}��q=��@T5����!a����,Y�`v:��D�Y��o��ay�(�u{��<b�M�6������H�*�L���	+�o��`���>���^��G|_#��>�����3��������"����:Z�t�L4�����x7nr_/�M�d �l"J�|�{L�,�vN��S<U����4h1���d��AX<�/E�]��I����Mk�=�$3v����m�.�Zu�W�C	���E=|`fT���.+��	o�D��)6��j�h<w��
�5�BS8^�c�ga�xe�!��E��.�2}T�x�??�2������U�J���+'�r�v�T��xz���_w�f#�Q����������O��l��i�������I�~����0�D����^�5�z3�JB����p�@�G%x3tg6
.�;B%wK�'�W�ck�S����
��w��?l���=����R�'f�*��D�n��Y]� ���i�
�?a���DF�����x1��?D�*!���51-���c)rj��^��D�`J�
Uq�=�	
pZ�3
Ro!/�I�f�����fx�7>����_�����0������!�!�����y-��<�(�t�=f
���U)}���r���[��Hy b��;�b��������"���D��Kg��w�^�/�����������q�d����z�"f>7,LL���4x���������&\\)�2���������pr�Cg`�� ��kW:<L#����!N;���r�L� �5�J@�;2��������=������^UQ�&\~��;n�F����5�\�5tgY��.(�|b|�@T]�����K"]n�o���&�c3x��D���R�L>
�P��&0�:�����4���=}
����-:���a������{��]�*s��k
W��0z��a&����Y��#��k���<��B�j�t������I��������`3� ��T����LJ.��P}&x���v=��\�y}Z|�kr&�]Lt�H6w���b]�.">���1S���������3��[8z�+>cIS�3�6�Vf\�6�[���gV��� ���]x&j��T��������VF�N�� W���
z���U3[�*�2�$�O��2��A	�L�����?y���m�����A��M��w���q�E��4iT�.�!�ig��de�t�[J�=�d|�^�S�XZ���a�] ��]�oN$����p���	��'�>��D�^ujrt�.��,��H�-U[�)Cx4��Nec9f�Ou��������Xk�;��7:8*��U�V���Z7T��(��+�x�o���L���
�C]��T������$�F�r�
�a���Uf��i�r�2���������t����m��'��u6���M#�W������@�\U����9��� �p�GM�N�+w��!�f^������a�����M���p����If"��^���9C��l�W�jh8�H��`<m�^^�{6�x���^	���3��s�YB�������O3�����,�!��a���(f��?0���zO���35���&-��v��T��>�G)s!��MG�������Gy�n��������qS�4�g�����S�.���X��<��������Q��7}�2�\'�%!�(��\b*(������N���=�w��up)x��
�R�;c�\�B�;�K���� ��T8J��:o����V�I6��L�wL��9�G������g|y�\���z<����#.Y�k9/��*���.Nn���-?3�4��Qc�}g"��
ST�0�3�J��hA��%d��g�����=@yg|G�X{'�
��;������o�~���@���^:����W�J��� ?m 9���M[�
C�-eth��XCQ�JI����c5G%09�^?�[� �
�=���oL�X����"���h��o������+2��;�i��OH1��XQ�9��b�d�-D��^����#�jZE��p'6?JZ/	�t����A�q�< Z�7���lx&v=�E����H����n	m���D�n����2!�{��g">��)-{a$�S���F��V��w!�L��\Fj������V��&�~&�#��-�r`��el���'WO>������Y�
� �v����46��Ad ��x H?� SwF$����8�6lM�){3W7or�5y��i�1Y4�A-���+a3���cv/;�N�2a�
4[v ���2_cSgg#�W�E;���L�{<*6�^�_���b
�|����Rf&i2\�������aI��������2#�G���w&�oh�Z� �o��^Q��!g^LU��]	��S���n�������7��wLA��p�S���6���p�O}<�+����7cNA,D,A�=����3�Z���^��r�4�����r��I`L�V2�-tZF�1��5j����N��1�#OF9���Up������0����M���03���Y}�s�U�Q�_���o�j�d�w�<@M���?�l�J�q|>0�&��t�5_}��'\���a�\$v,*�3��S��hs��Z��Fz8�
Xh���������2Q7�G�T)M��b�����j��O��	�'V��6���Wf�������5t���.&f8�v?p9�c�>�#������F�d�B��y�
��W�QAV��������&��yp6�=�2p�':� R$�9[Z�G��gX|h?�����txd�_�$<��}<a�&����`���X�
���K��h(�����\�`���n�wj��7��}��,�������R^{�x&�Mtb���^}�a&�&�R�9������W&o�����!TY����!#�of����T(��k'��-
>({a���4����S�?��2�����������8��������7��t�LL�ziO	�j/��#����&f���@�YS�F��9I��p�%��v�`���!�S��*VfX��kLP��.����j�qTl�2:M ���A�{������L����T=�����u�<*{��HU�s>Q���2V���
��a���O��]	9�	�Q�Cv����`�k��~6v�[����V<��=FI��$~W"�D@*���U��Jh���*j�u5��o�2�����L����B�F����Ggk�&�@�h�d_���k�0���	���K����r%����+���<v������!�5�u'�.�������1�"!��|��r�w���W���
�<z%>��r�L�z�	5n�>���������-�m��	�MWQ��f3viuXUq��.��������C�C&\g_xp#]��s.aM��x|n�aHB4D�7�e��i��s��i�|�N�?���>(2��_���5u���D���������������?�lm?�K����D������z �������*Q�z���yNW-u��J��Z��q��F����sl\�����[�gy�|/��T�����#F>2
�6�3��\#���<���a$�����j����;5'�#��&���ai�\�_�zq�}3�}��7��Z
�=x�c��
:,�eo�����y�_L����7�FT�I2NTe��.��R��-���LIM�-�$�
��|���?��������\�������k�h]�"hs���#�q�����������	y�yd����X�z1��af?��]��_`��)O������}��L�i����)z���P����Bwb�-�+�������'OMU�i���fm�y6�&n�����@./��Ss_���@J��J`����+���""H�v���G���D�c���9f9f�3��C
�D@)�CN��$�P�M����;f%83H�f��[�p=83J6�`WcF�w�F����W������T���,�B�����;)AER�O�i����� ��� G��u`���u<C~Z		��S����
������	8��� ���t�DD������E}W����`��m�PM�U�;�=h�I�5��@r���=�+��0R��t
p"�k@<o���D �������%L�����w������P3c��@Z���fye��%�<��j��������f����)��SRY���I��,�
g�����A/83��w��Z�5h��ZRr�2��P���[5p�SI��%�b�������y|0�BZ���sR�3�<:�0	KV
q�**��`g���'������z��Zp&�V����A��j���%=�����CNLI�-E8�����&������s� ���1�(U�7����a�51��\Qu�W���,x&��&U�0�6���.�����3��&���e��3!84a�e��D23�"��
{��84���O�Q7�$��L��2�%%8h���Q��`Y��UC�M�%���@R.�WP�}�x53���F������W	��Xg��kcb��X�~�����^��U��

we
G|����8(1L�����5Ao�+���,�0=)������J3����*2���I�3n���-��a�f�i;J��S'^��-�����%F?wFec;=�T��@��V'|��
SR�4��U�������0aC�S���J�r�@�Wz8�X)x�G������w��I��1���T�>��f���x����xW��G"IU�����x�lf�"�.n�:gHb����x�����Cf�9��2������E���E�����q��aV�����bH/Si�`{B(���O�%#.���Pl�I�����$�Ou�$F�T������1L���&����)?L�qO?�$@�a�'������(�'����l����}Bi;5_!+�a���3`��'$���M,����k	!e��'c��1s�)����D00SC�}��"H���Ka�^H����T���ufx��#���(p��2��WLD�+9�F"�}�"����.������w�D������jl�@�oE�F(���:5���n5�X����'���������-��f�S���.M%lX��,��p��>�1�nv�������=�����4P���z��.R�<���>����+��l$Vy�.��03����%�&cU�����[�P�l�f�q�tWt�Lp�[���IA�q��9�����A��n�~��a�Hs�>k�I�?i��is���('j(���/B��L���������b�w�`�{��8������Q.3��z��f|}f������1��� Z���L�k�68Q��iaXa���f��|O6����c���K�9���J��$v����H7���z�w:���=�@��;��c����`XZuS�zz����b�����	��<~0=82�'|h��&x�MZ�2���0�)Owe�O����w"������-�_����x�Z���bL�>�Y���Q�\����p����jZ���<7�={�e���x|�Ck�����A����:���3���y��9j4��+��t�W|���\���v7g,�xJ����4����!z���������(�a�x����������{=�<X����9w��CY{�������]�����I����(��0b2�&9Q��v��~�}(;�����#$�����a�Us��f�(�r����2�W��&�'�PV�Ge�=��MqFT��8a�Oi�����C,O��7�P>he����p,�^[+�)��H��|�����iz��%p]5y3��B��^�l�&k���1|�rw�~�K{�h&��aMY�#n�A1�ge~���mwS���k+�Q)��)*���������/d�_��|��#�V�6����!��u�:|"2D���� ��:�_���@���I�v�c����]�~����>U�3Q�M��������5j<k��;�*���������g|f����|8;~���;@g�s��	r�s>Jb,A�cn��]	��HPY��\��I/��HC&;�=&���
�(	�����^C�#Lu���R-��[���L���XQ��Ue�w5���4{�rV��*�l�����+��{�]�M�[/�%OMC���~3��=	���������-��&��=�D�^�}�i<y�������}M�^9������g��p����k,�K�*�?<�`B�����E%���"������v��}�������	���8����pb��}/`x��_���%�|����D:�'��Hh0y�3��>o��T�s��g�5������u��=������W��xf
$��c0�q8��x�,�-���k���3�dq�;c?��0�����[;B��m�~�n������z�����W����\EB��
���Z��
4��O�J��Z(�q(]�=_�}���|������W�g��MW���1]=��5�Q����"W�'_%JW�3_�������(]m���\=sM��G�I"\E,$�I�!�����@�����(]eRI�
4�6K7W��U�V\JW-���
��NenK��T������}�J�����������R����U�t���U�tu*����Oe�K�?���������*W�D���,�D�/\S���g}E�d�g�A����w'�����E��\�D��$�m��k��k��>��Z�P�Y5�mw���P�w�t�����P�w�t5�h\���++����j(����j(����j(������,W���6_=���r����:�����u5�(]
E}JW�\WCQg�W�r��59uV�q��;���y�r5��/�������b�����o�������b�����/�_�����b�����/������b�����/����������Q<9
����I� ���j~5����i�@\M�yqu*s[���R��Ty�@\�s]9��S����y�@\MC�0��T�k)s����2����3������ Z�BX����*�^����"JE�"�����N�#����\�}�
���`t���. ��P��k����  �f��y���D`�8n{�Q��7�b��r	7F��Y�����b��!u���&E(��J��B���@!�Y�������Qqs&9�����+S@ /��j�2�S�����E���x�n���2C�v��#����UY�o�a�����(�t�g�����\�C�!�9AY���+"B���Xg�K�H��B%�Be������1� �*�g�
�|����)�je,%L��H^u�L�
z���f�=�3��qc���z���9����OQ�},^�`����1���vq29<
L�D���<������U�<LL�����U��+��Db��p����]	n��b��[�V):&�u�4D��xH��d����.���3N �������2�*<��2��.��2�?
�+�l���J��F(
�`�/��0D4�W2��;D_9�9I���~��>AKLW=A(�����xl)k��uM�CP�]_L?~�U�Z�����
j�D$�HB
1y����h���?�C�������;dO7})\��	j��L��!!:o`
�>�B<���n�< N��^H��!k�8u�s�q1h!0"2�Sy|<�w%Lpd@D�����/
�j�	��Vm?!��f�#��=V��i�T��?��T����*"���F���M�]
�(�8�v��=����Ddh�%
J�����f�����5�����w{�6�[��!'��$�2�
��G��t���K�.�T���IE:	�EI��bh�%��f��vt�t��?a��ad�S����U������!�)i����~������~�G"�P@q����<U�B�����2>�|�>#(e���$��D!��/=�zN/(�hp��'��8�+3����wQ�����f_��x1y�'�S��y<4�.Y��[�����)FXN���}Qm{(CT�b�:��:S�B�C��Mo�OM��b�E�CE$EF�M!�V&
��4�2��|���O�r=�3l�&w~��z�K�{x9E�[�h��Q���w���NA&����R�|&��7�f!<��L����������Bx��s?�R��]~8������!����3$���E�N�[6z5bd���,V$��Lq*p�����Oh��;���~(8q��h�I"�xh����g�Q�[��Q�3���_fY
�_D�U�yqp�_��E 2��������������qN�� �G6��3����c�1����|���O�4�P�TF�}g����_p�#b���Qt���������S�2�����4&��Gb`�l���e�w�eS�B�=PL�C@>�O8!���gx�Ss�{�7�@U_�}w�����������|����t2�l�?����t��f�R�4��>Ks<��sH�1J��X���3�
�}��*K�����J���s~���d��dY�8��3�PP�{�w!h>���K�f�����G�>IG^�x��X�������!��f@*7�[�����kf�T'��N��%R�`\�}q���N%�w���������y��7�2hx�����alR�w%|N>�W���*_�
��}O����L�'����U�����+��F��������)(��N���3Z�Bh\���i�P����pbl�����38N��ub~��&2%(�Q|j��Rt���y��x8�p��p��1��7��[T��q�#|�~"B<���	{��D���x�K��'�����R�2����R��8��q
TT�L����c���8��XS�<��:��=���we<�=J������A��K����!�1u���Ov�E�N�}���B@����P�B_��]�~�����[��"�~�v�<x��q�R�9��3���C��g��c�Q��q���U��A
��� S�G���vk1��(���	���D����?<6�btP��pbB�<�1�i|I�)W���������dgT��vaa#~������(�BpR��T�8S������'ZM=�ac�Jq��U�����d3>b&�Ab��t��'����L�5n�C�i�+���9e��U=�t��2xd�=��V��hJ�����CVX������6P^|y����h�o��ho��@�[�r�����[%��-}S&FF*q�~1��t��%91�^yr�W�A�o�j�I�����3Q��J����A	�ZeY��<0��w[���7��Z
�IM{b�@���0��=�+ #;~��uum�����a��#����_ty>.�
�tU�%�����'�����[1�NG�����+)V{�����d�r��L	
_����T9���0�����F�L��u/ ���/��}|��������8���Q�4k61,P����q�����g]�iLo����%+c5�6�L����J�,�EWf��+���M����'��<p{��j������J�����J%���fN�	m��o:H��M��u��7��������a���{���9t��L�xji�`%�������C����	\@�\�L�[�u���a� �8c��������^��50@��~Uu$D��'��P�ae����KYY�����iv��)�2@���`���+�M\�Wx��'��B(l�����a�a��
k|�U�.�RV��I����a��0�O|�v
,*�����i�[���)l�'t����1 t0�U�D�8REl#��C�LC����G��^�n�8��Jx���J��	�Pt��
]�w�`HjR�3���=�o�B���L
���]�IW���4�R1�`�����8�/�?���-V��w*�rj��-��ACV��*�@=���;���4���8��?p���=o(����������G��m��c�i^��E��c�(�~��\�h����6;������Y��g�k�0�=���������S����[�+�s+�[��4�2���vO����9�.��o�mz�_��Q��N�(����w��	�.<&��TS���US)|��4So�#- B+o�>>3����!��\<��T�c��[�E'���m��;�L?���O�b�b�v�o0e����������+*3������O2cYe3F�N���.�p���U���l���Z.���v�.x5 �;vN,�e5�aI[5(�t�0w�'��o{��)�fee��07+�0G3.�����-�|f2�6n��d�h�p����R��!������$��WE��n�m�7x�!$���D�bP�2����;��+S$�5��To�\4�o�X<����A�����w�z]���E�NU���^��W�
�~���
3n�2�ym��a��)�-p���[����Q����x8�q�\F��_��p���t8;]����t�����_�2�X��1+����h�#����S�%5:ibj ��U�D`�S�d��d2:C�_��L@>��q�y!���]M�ofv���.�������bC��0��G�s��+e�Z����I(��G����P�;�����T�Q��t�_���w�B�/�Aw)�vgC����y�*jX�c�~����e,�IV�Z'V��v���S�
�&r4�v�� ���e�'��13���
�n����vA���/��s����������YLM-�������15"MM�-���5��_L��F7���3Sc�U
w��^�h$����hc1� ����Z�4��Rk���Y��5CeOt���+�ol�p|�����4�-�a���~�8aC�L�N���e%0%55��E��k���VB�#'<��q
�'�&l�{)���<N�h��|Q
����F���'��`��)V�JJ2�a}���Z�8���)�)#��9�}zj&���x��*�_�	�O������L��&�f�_Y�4�uTc��[�4�` ��(�k��{��/a6�:*[��$&�R�����<�P��S1Cr��Y,�������3�OQn��?D�IW����G�E3s$�
���������3���`kI5`�.��I�fL��p+#��j,��[�u�>�����R�1A�i0����F��"a���S��S�����T� .���d�n!�<?m��w;NL	�W�3c���������^�&[��Y������������1��7��Db�q���pDu��[�)��f�,o��0�I���-O��v��e�e��13���3��(�����R��R��u�\�h������)39���M'��O��S�F�2h�1�k3��]�n@��1��x�����Z���m���Q�I7��v�'$b���*n	"���%(�f[Y��ol�O��Q���'���H���c�����-�[=B�a91�0V�'C7T��=gf�	{"��|�V�/N��1��=mbJ�n���!>c�2��8�j�sq�glEM� H�(����o�9���3fl�����������D����4�f�v���f}����d��*$��+E��w�a.�+aP�3r�\�g&�{�+�/l^���L����8�PS3#���g�A����}4���t�����D���7{�6����k"(�%�+�E\���&X�,���E�3��m���}�kQ3�����k���Z��s��oN�#|Wo�v�A!:�������po�/�<m��&�}��v�1�q�Z������(���?��L��bJ���)9��)�����/��V��Y��	����#�bJPF�g����k>�s��we��������N:���8�`{u��U���_�������]f��9��[���X�x!rt��7�}���>��!��mT3�Z������0�����1|kC�Il��(V�&l��G��y�N\����hT���qb!�]GF�#�����M{f�����1t��p1��~�I�w�X���z�j;}Y)V�X=4Y�~��f%rx�������Z���@�;�Gw��"�_�bxZr!�L��\^����T0��G�u]��[�\vi7����f���/��)�Z{�m���4�%T(�]�����7~	����L�8�O�"�8i����s'
�xh7����(_�o�	���@_ie�H6����P	��l�ut]W�����D+M�����	�����~���_c��<��L�6���/�������e��:����d��6���9��|/��A���\�0L��b�*���D{��0T�D����3J�X�X�ng8�~���91*"V ��������lB�@,DW�-@�����R`v���
3QX���5�N�_�Uj6�sQ,�N���Q���l"��q�je�$�|[�����	1�;�@��^�[�����:��=V�U���3H��}`}��}�Dt{sx��=.@���$���l�+�F��>v"w�������JL���*��u�*Cof����;���V�p�'��.�4Ql����q��I]o&z�P@�w7M]�2cx��B��J+N(,�=�?�bI�7�G�5m":�$������3��Es�.	dJPF�v���
z��z�8����~��zc�)'�3cz7����S�$zc�Z{��_��Y+-��1�Q�����v���Cg�w��^rzg����x�����~a�{l��`t�1��t�uj���K�6H��Da#������9��1T�-��tw�"�0���>�xJ�]��]������.�f���a�W}Wj�\���<(�����FI~�_�~��JU�-a�\�*D��,���W!ra��MR=&Uv��x�������(#X��x��@������X�S0�P���-,e����Pp�wa�z��E��1���]���L�p
�������v����	�9�t��Co�Ka����J�6�5_��]�q
�p7���nf&���51�T�T�_h^�P��/&���u��:��il4b�	�v��������\��9��S����2�F]#�^f�������4%����C�fkP���K@L	�k&8F��/}C�b�����b0���w\�����Q��2����C�W�[f�0%��%���,pAD��*�T'[�K��������*��:-���QG4���#1pd�}q$�${&��7q�B
�R��N5���1L%�pO�U;��]��1��+�Q�P;�Ds��QFt���
�����X�|���;�
E����n���g���8:�/�"����i�uasT>4k��O���@�b����&��@;��lm�f���*����xcLC�h�a]�]���V�BI�7�������2pg2v��B�77��.F��!�84�
�WZ����SO����g����eiZ�"�7HY1�ox��J���o ��PaG���6t=a����23&�<���(���k�sedF���%dj�a��Y��9���22�� ��V�k���3�d4�gg��wa~��6��k�����]&�3�}�q�pc� U���6���&�i^��;l������������/�
p����7�h�:n�
��A��#!#�%������3���hH��1e����[�&���$�%��#���[����B�+!+<P�@j�~;Y�N��z6Y4�
3���\�,L�g�S��Xf�o��c ��d�;#3|@o�-��Sq�E�U�o:��]����Q��������NT���"�I������|cf���I�,U�lp��G����6xf2��_�g��D	��h�!��S]CO�`��Y�?�\�tm�Aq���AbJ"�BO�mke�L�����u"���j`T����	�i��p��8�Gle`�^I�a�N|����$> bx?�Hee
l��!��$`e����'RoU ��D8������$�~1��2��l
��2�f�L�\�Ft�-Ql������<@��V%�T*Z����	���2e��&��1"��=�KATE�n��bLK�w%`��q?]D�{������7Ju���_q�5����5�
�C���lde�o����H������f���%����apr���?�$��l����O�weP�;���F�����t�7��������f>8�v�r�Y(k5n��x�q�M������%j�5$o"rDB�����#�qr�]}��N73P�m��C�>)9c��Z�2�q\������cv���/�����#���f	������<Z��3V�fK#6Z���#��� �Fp�	 C����|Vk"`��j�@���zD�����w�W��`v�/�kO9p����e�(����sO���0����9+��E��6k����3��O������C_� f���/���EpaZ��B�
m16
}R�b���3��,�B����,��R��CH'����������e��>�������fC"heX�p�b@<='��hjw���
��T����N�Cx�M�H_�U����0]��3>%�1E����&z���I�-����6�Ov�`L������%��w���1����$�
E����|'F�j�I}�����1�9������c�����}��.����o{�Z.N��s|�A>1Z]���c28��e��zO��E]{�f��R�[���0�+���+w\����~����5��=�i�!rl@�6���3��.�����f��0�i��wf��� ��O���l
�Q
pf��6EI
H&)�k�+��K��C���AtJ�=+�k�wQm�����GMu>%�����)-3Y��}�C�)�^��>{��d��0(_w=VT
5���1���1RK���%T���a��J6�=�h���g����q`
�7���-L��8S��+��O`4�P}cU��XRd����0�'ey)�]��Y@]�]���oac�h��K�>��[����.%[��+����.e�p�g�>'��0���MU�oac2>�cEW��DQ*���.%a�p"�E����-,(��������p��]y"���N�dzo���|�
��x�~�9��0b�Es>D����E�b�S�t�0��;a0�{�|��1����f!��!bl�}l������`�Z�(���j���������m������e�B.�+
��H���e���y$|�%�B;�#X*M���`����������pI*?�he�c��p=���wf�����a��<1�x����H:r<2��%0<�!�t=��p=�� h6��;V����w%��gMX��R	s?�\�m�xf����X;�!����	�#�R�cVr�c��w4�e<����dax��Y��3�� yF<W�<�	�c�b��3��:��vD���tf��H���|�M�~��p;�M�i���G�H���{��w����}6BN�:�/�b6�z���0|����N��>j������1����������x��c���	w:P�g8�U�!�����0���+�$�Ig�7�����!��72����P�
�ZIy�;�w���������H�5u�l�
�IW?���q�L���@�Y/�(����?���w(�-����}4�����-c\Xi����F�!�@��L�ny�����[7O3�#Q�ti'��v��?=w���gI9�}1������/��U��.7L�In4�����X��+y��O>�4���$�_�=yjg�
^��J$%<��g�o�u�����:p�nj,,���x�s14���.����������Ib�?A�l�9f$�%�#]�A����*����LQ�T�6\8j���9�2K�����{��j\�w�\l"g�}�
��G&T�M�A����+A�6^��0����L��a�vU��t	���t������ag&l�D����q!�X*��M/):M��L.�[p���d�-��=AY��CT0>d��!���:�%/T��z>��hf�
�^��(VJ��b�M���36�%\��<��p%�v�|m��]	�b��Q���m��}��l~��=�K����f����pWx��{:���q����?`��6�4s�3�kf�������c����:����� ��+S�!�P�B6��!x�����8���E:Ic���,��9���'��,���a�$y�����L�8�I��=��D�t�h�����_m������q�������0Kd���dl���,��	��<k.��p7���}�H�6��������$��H�,h�A`[�3�G�c�nf��k_�0�M+b��s��BD��������\��D�N�\jyX��A���iE���J���Y�VP_o���W�;g���J���qhg���p}���������h"|q" �y�gZ��k}����������k���������x���|�-N&i}�_�88��b:K^� A{j����aca|qb��{3�H_������e�?��u���p�.D�Mz��l�V����5izy��%C�I��N?��?ci��tbJ���N�z��_�/Md���I�ki�-M<��a��:a&��y'����������	C�g7�	v��31�o���3-LNa��p�#�BQ���7W������*Q�j�_�U�q�����D���W��'�����Me�U�YW����e��Qf]U�u5���^f^e�U�YW�2�U���P�t�Q\E���*����UGLl�I���?���5�*]S����5�*B�	]S�B������k�����{�����������f���������������?�G�}v��z�\���A�Y��������B�����y������������_���?�]��WK;�J�*�����Y�������q�S�^1A��}���*�������+�������1f������0�g�2a���R��t"3g��ns�������	�Sq>�?;;�Y�������]?A��S�G���""�3���J?���������RY�k���llH�J��!$1I�q��ysa��B���Q�����oF� mq+������q��{�@%�����a��+�-o����E�;����~�YL	��c�q.�>��u}e"�GF����"�@&��Q��L��g������~�(���2�$���Fwt�������q�{H`����eIQ��|�t���P�K��������l�pfSb�1S?�(����������c���]������0�:�����m'X��~*�^s{v-l-D�����}w�~�EL	*n��GHSs�B���l8?���=5���y�����z�Z�S�j����"���~�!3�4f������!%��D���%��k����^����<'Y2�cb+��cD8l6K���S�I�+.�l%��F%\|��T���+���'"1M���a���c�2e���a$��_$�i]^�$23�7BS�B8��v��-���*�3<�p��g�!�C��������f����ax&�
�C2�3%���r�
���;�N��L��A�x�������q���:Q�
���xAf&�T&���B.Q�<�����4�18�����lTocx�Su�T!���@�L�L�a� i�O���H4��~2i_h�UC��Mh\���<7�z
����<
����
�K�m�����a�Bmk�%���A��#��:0Fe
�����Z�>cf�H��7�Z��@�R�]<k�Z�LI�(u���YO�����pIP��4Yf���1�������^�q�����P7�/��yP�R�~��{�p�q`�^K�5�tpO;8�����Ceo��|���>�MF7u���U(���,����t,f"Z��p\����.mn}T	�����+c�]������&5��ry����=m�[��~&C�w�����v���X�"���iW1��]��YbP���$8>�9�JHD���#G�u8G���\��0x������Y;(��T��h@�A1\L==D}O?��a|K���@Q�V!3��CM�dr7�|X^V����p�������R���h��8�2����'���d���L���0���|�]DT��� ���p8�/LiD��
Kla������B��`4u��=oUR���"S�{b�k���!��dV"��}����K�A����w������������I_���N&��yX5NC�P� n��o�]t}�TO�����c���"Z��>���S N����@�d���<��y���7
�S@`V���p�EO^�2�����oeW2�����D�:	�oO�))��u�p���jeQ!#���'���la�N�AC�&��,����wYW��$���D�:�����)�e�o3���}��������M��

fL�C^�c��_1��rM�E���������d8�}�U�_�
�J�0q��^��X3��=�V��1��0�iAif����6�]�� �4}�j�����6��p���76�Ee�����y����K�����C�����#������W0��4|�q�Y��@�~Op����?�7`"���Q�v�9��G/1f�&cxl]Y��D�� ��&���g�|����=n@��)R�nv�>p���\��L�t�-1�=z�t7�$of��F��(�A�xx��NS�h
*����$9�	�>Z�����e0��gy��{�w�O�_�#��fCR�om��]������9��Ar��'1�B�KN&B�:4��������SY��*9������+!��M�����%���,�����rI�d�y�N�gLe������[��c������n��k�h�O�dja,I{�����I���:��0�i�:v�r"��3����{���0(���1�?#��Dh���<��G�@e���������������8|��>���'�����	������R�J�����L�g�@wM���bE�G��A��-�~wZV��'�G��a��<z������SJ��!@|�� �8��L��d	����N�nK&*q���;���0c������W�D���
o-��V�	������&wq�@��FR-��H&>�7�C��k����Q��-W��?"C+������[P���/���L�A��'=W����)��D.�0"��`��]�if��T����HT��D������!4�j����]+?~�ue���������Ec,Y�P�
����`��-���Fq�3&�y����IIS7�XN��U7f�l�:��Y�=>���a"nR�r�����])`��F��*����0x�>k��b?;��BbA,�	�!CED��
�k�Z�Z4�<E.���-o�����g��-$��yb���
��[��~������o���%R��t�;�}X�6D!����R�������a�|�
�,��(�Oo9|
�XV����}4h'�B�?M���DGa�]3����L��}����S�}��"j��[�/�����0���	�������������?a4MDCdR��e]���]pb�T�#�O5���+�E�Quq[�B�U�8)�\(��1%(�l����-49�����zA��oOt!-y�E}^i�����q�x�O��mS����q@�r)r�MCz��4WgcI�]�2���aww�����P��L��l
��?����x5�Tr��L�Z�:<�lk\���
m����(�Lk���e[����B��au6dYQ�i�
a�9��.�������4:^Z1��W>�`S��[W����X%�^Y�I����me&���p�t��L�����n���w�DV��U�/B]��3���w�o������0�D�����K�Dp��d���0(D-uE!��rY�����9���q^�!��'N&��D��k}�0/�$��K!�V�=�l(|m:�����`.�r�;k/Y�3Q���O�gHUL,p����D?
`�/�q�me.��q���jLl��6���
A�i!�9�'� ��'Q�Xu���~n�7#cz>Im?�����e����<�*H�i����K.:�����f~��G��*j��U��.��7��Y����������2S�2�f� �d������{5B�0M�K�V���'(ThnX���	������a
�\�_��+����u��;����c0��0ng���������
��,�2���q���G[9�8a��������2�0e4�����$�������#Zt�b@?�F�B����~+��u?T���`�2"O��J�B�2c��mF�s4��+3�}
�v����d1%(#h#� a@V���n���:�@Q��L��CL��
�61�P�����=�����1��1�1�� ��z��
3Q�91t��6x4�<�����h&��*H��Y�L�$b�jZp�a����t����*8��g��t����A	��F�;f�y���E���c�������1�v�]5��'�
����� a(�dcpX�BB����/��^�����bvI��r_:�2��R��y���)�n�������ia3;����+
%��n1���J*����������'� ����.��r]5��0���`n�����
h�8,�wBW�fg�����T�����P�����Db"���z�}3�������_����eU�w(�)�-{p��Y���M����3��������1���5�3�����Q�}Q����~�7���~��	������D������5�xD��lc���A�|Qh�4,C�4�p��(��C�
DU��_@��09�K����`����YU%����������������J�Zm"��c�A'�6U���#3VF�������>���^��G|_#�g��+�����H�� �FN�	S���]F�AK=�<���y��'j����dS.�2���1���������� ��x�~AC���[K��`��^
r�0D�rCkYlr��'���#��������V����PB��rQ�����tJ�h��.�l�����Z$�g�5�8�G�k>f}V��W�	�^��rn�Ju�2����������@�+�Zw�ZT0���#G���8z��	�7���2��=O���D ������"4��~���Gc�;T���z>"��p*�+��^�O�p���~�a����>E<<�+��u���ee�����b��1��A��Q�OvF@5� �;F������2C�"�� �������2�_�0�u����S�u����HE�8a*�.��a+$�������P�(>t@
Qa���~1h��![!�����+sp��
Y�Az�$J0qCc(��}�Q�?w���G��};���$���g,e���1*����$������}_3��Z!6%,D'�\u���o=h�Q%��d�qf2��6P|E�������~�j��]�2���w��~CdG��������4�>
$~Wb��=(��d�!bBt.&�s��<�_��j	��K�#A�b����H����kW?�������H�?A0.�>/��W��(�����T�'��q]�y"�3Y���(����(�+C=u;V����>�&"���&o���=���|�����l���]sZ��'���;��tK����8v3�/<T��Kg�����w�B]�W	��L���2GD���}�V�]��lI2����(S)��f�.q(�K0��=��s��uwy���y�'�%L�F�q��0%�����h���_������
��?L������)$J0Y�g��>�.M��T��u��Y����M���-�^�9n�E!��"6�=�2���,�A+	�����{�-���J�s�N�zj@���n����/�EuS�KV��6K�a��j1%�q��
�b�����B�\U?��Pe�������&�aI>�����q�)�y�9P�`��YJ��~1��da���z|w������g7=��13]n�Ij����
q��l=���Xj
'1c(�����8���Tee7�.�gn>�����.>���c�o��{G���+�>�cM~����;�|��	�x��i��H<������+�~1J�!(���zk�$����B����beRf
����S����� ��J�/����;"��'�S���\^�x�����������j�a&U=��tBmg$�4L�V5s~j��6M8�L��m�,J75�&7"\��).*C�m�)�`�Snn��7�x����~1��G)Y�[���VD�x� �Kj�m�Y��V�FO�m1��$sV�c���2���nV��q�D��%�R���0�:Q��{A���S��m����|x�9�1
q0z[&�A2��s���c��2uK����M�1�L>����	�A�������wG�"��p�0u����}2�-W�8.#��s+a�Y�����_1�
� -�Ko�N��a�5����o�������x�0�%��Ri�FV�[��3A��I���&Bg�l���|v�o#,#�h��m]O�La�a�DV��`������0�w%���	!��}r����G3�n�}f���TA�������Og���I�`?�b0��O��,r�eedb�P��&��v����P�����q�H�����M���leR�.������d|�zc����w��M��������;
�JMK��K����D�+����;C/t&x��'(�o	�^�Iv�-�������J��c&)w���J�~9�LrKIad&���+����}gb�y��TU�0�f"PE��l��c���s������J?�q��a�����kF��/4����=u<R�����n��K#�<�F��R��U�6�,��]O��<�������?�4x�e�����i��i�&3�}�<���5��K"Nmvu-7���~Q4��;Sw�i�'3���f���EZ�	��0�8�{E%*��fk�'|f�o.��1����B����Nf�Dq)� u���rW�y �����i���0����V��C���I K���q+^���$�L5���~��+#��f��wa��Lu�E��[u���N�������E����q����PB'�`�@>�:�7�j��;8����A������������6_����M�{A_�qqS����Ebmj�sQ�����((���/f�H�J{4�;L��c�9`�AP�B#����������b4�]&#���W&&�?�1����2U�<��/D�X�d��'����qGs+���gu����rg��=���B�"�Zy�g�x���f/e�B�����Ll�Y����G���8�cee�5m`�[C�:��!{���;�b~f2���X�<���s�?�4�;�=Tw���.�-kDPdk�������g[���-V�J~G5�
jG0�a���x b6����~T��\����rT��wa8���sxF]����oL�b��Q3�b�F�_|&�f�O����?3pe![U���]��#$"�3�s����I�V&c��mLafk�A��b�um�0v:�b�=K�<u����I�&ruL���#�GT0�nE:�J�j��V���0}�;I=8�83���C��e��xP916Z�=���;2�l�'0g�;�����x�v���mH�|�D���C�r�xhA�8N����$�6������`���M��=L�C�c��~�}����n=z?p���mi���`f$~Wb@�����Pt��������A>��>+���{.�Y����^��L��)�`.��0��7���kBG��u�8\U�MC�`
Cfb��+��L<g���e�h�~4L	*����-#���|!!l
�h|(���u�zi�����2P��D�~���pV��/����w��+��bZ�vmjQ���SfT�DU�Aws��'���a����W2j����+X����0�o*��$���n/LIusi�~���X�LnnY�<�"t��Yk>2�{�����L��TLdx��z����������]v.�y�����{��Ku�������O~��8��M������>�[K��TE��JLsl?S� 3���L_.\�
����
��q�CQ�/�~�{e�'�"3LS�"[<�]����,��v�"tqS�����O���3��8�h���3S��H5�����3�����|b*[nlf��M:����?�d��'=�d0J]jy����w����e�
@,M�Th�T�C'��D��K\o�0���|�������*'��w�L����n����kJl+��,�2cB�J�3P��=3B�xco\z�
�l���;nf�B�0Z��%�0���c�4mF&F�:J2�p����i/Y�az�.�$_�!y�O_sn�/�������55�9���O��RC����������{�����k���������s��	�v!��>i*M-�GO�@�t�s���R�>�(�k.U$�����}'d���	���o�-�)�LsJ��� %z`��g&�a���|�R?/F��8�?NX�w��h����L��+�����S����3B����rk%B~{�[NT������'MD�����,w�>��Ye�������j����g'�LK]}���$���"d�{&��A?���Y�#4����V���X�@~�U��@/<�1�S�J�`x��Pkx9-i�� Z��ly�3"��Q���M�t����b&��A�.��V��s�������t�
',V
��b����e�����<��o�	��[��'Be�<q�Z��mf�&��;��y1**��~�qp��4�%~�L�#2�T�DF�I�%��]�_ �mz�{Y��)�AN�v�$���&F��T�&}�|'�P�|�=E��\���
��J�������>��������|'CcI�l%�T~�n��1sx����bz�}c��2����F��S;������9���+LcWS���mnO	�W����IGG�y���������t�cLKj;*]��&�I��x��%��V�z��u���N�s��`Z�����{�M�U"������0�l:����:�/���z'�0���Y\�M��M�l��23f�W���N������]�
lM1�78bB�U�{�}7���}�	A��+b
�7��$����I�ML`��[�<�u��?IJw$��S�������#�'?Nj�2��=x�W]�6��N�8�����	+�y�����%��2�Mr�.T!�w$���d���r�Ua!��nB@��&�&+P?���D3&��0���?�&2}X��0m@�f�g}81��p]C��	�+DP�O�9��7S	s�	��Mx�BVFS���q�B�Q���OL����B������*���hu�d������*�x��"d��,��B�7x�+�]��P��W���h�P�`��NG�JpbTN�fJ���4�
�DH�I�����k�^����=�C�?2Y}fB2���'�<zk��M�Po_�������'AW���
��+�+�8�kc"D�"f�"e�K�`�&�^���e�k�#��Q�|T���J#dG�A�\!��B���.xK����y����sb�V�pE�A*��x�"zd��;���E2�om.Z��Y��"|�-������j�� �*������cb%�B����%3��a��������$��-�T��c57
����8o��%!HKa���o������8o'>A�����6P���WM?���#3n��cSGv���6G�0u�i�����N�Sca�'������{��b���7�x�D8d�S���}��p��#Z���v����71H���~�����$9� ��F?��>|&u��p����������A0K�%���!���=$d�����������x��<;L-LA�8��Kv?(��sw�E"����mi"tK�b_�����X��/�,�A4g4�����������	��^�U��{��qN��bq�AI*L�?�-�vBl�`�J#�f	� </���1k-���>�|	�G�������>�K�l;��R�s������A����\���/[SU��C�._S�o:�<��s��!D4i�T4��CP/w���N��i!��v�d��������t���?�m'}3k��?3s�d2�!c,��fB��j%��iHM�������������^��@���!H�9������12T��������L_��0�}����|)�Juv;J�28Ez+~r���H��0�B���[�L���S����8�=�9��p��|����S�q`�F�r�3�7lI0
�c�C=?/��&�A������`��R/�D����x� ��w/D�b+��g������N���'T�h����m����������N�����C�>F�Kl���nz��!����GA>3���o/tZ���x����|�%B�~%��4�Yi/w�o��/�gP[���S�wsaC}��Z���	���Ijk�����g]���g����o!�E��s�����Z��
�3�K�Q���X����'��*88������B���
���31�w��1Q;-{@"4��u��� ��:�S�N���8x���u*�_nz��R�s���Ora���+`9*����'����n��;v~Cs�|a�N��=*	l4�2��9R���	�����6�`�l>~*sb�I���/�f1���v����J`8<"��h�����].w�Wk�D���=�VDT��L�`H'|���g$��e�ps�Mb���3��:���a����(pV�N���Q���K{s=��P���	�Z����Yr���L�!c�������v;1�-�'�C���J�����L��9����������`�3�%b���;<�������T��Ob�
"CEfN�O��<���b�n�r����4&�;
&F��fX����Pec���x9'��V�����L��<Z�YY�/��Nt�Q�E\O-�[�����j����0�*sZ�	3�>S</�������n�u���=���bN�dm"R�i"����K��6G�n��� ,�83_��A$���G���q�z��{���+�TNl�9���:=�	Bh*a�tXg��v���[b�L(Bd���L4`*{���;V&c�OpJ�(g4��������A��:��V��L��`_S���f�w����=u���{��c6��5�8�g��/,������f�F5[_]��,���������f���4E�{��&��8�tc����l#��
�;�
��B��e}a���E{}���S�H4c��7d��@����L�@6{����q�Ol��N[�.�;^u>�Cu��W�6���|{o����>���K@�1����k-�j�6�[)V��u��b�Q��R��%�E*V����_W->�R|��X7G�>���/�x���T�K�����`o���{/��^���j������T��FL�[iT@-�MN�BNo����R��e(�"A��*��!�s�(���z��T���TQ*-uS�G���j��R+&���*����K�	s��D�������+������������������9�L��)LC�����F�Z�`��(�T����d��<_�}��FJ�E��$�})�F�[�J�\3�����a���u��Z/�<����;�]�U����.��P�E�G��������{Q�Q�����(��\���e*�j�6���~���N��ej���Z:�h�(w%_�z��S���G�1���}C���[&~�V���,��I���X,��A����(��9���X,��1����,��)a��$X�C���#X�3��"X�#���!X���� X:��
������&e����-+�&C^�&�0 �4)�0 ���yLu�Vc�U����*����K�Fy����bHD���;-S������z��;.]/�]��'�^W��dh�7�-���rF�d�����G��P����$��S��8r��b��/x*v{����`l��H��bS4`�`�/�$b���3�79�}��G���6	�{��I�V��s�Q�+U����i��
+��z3`�:.0���	�������i��Y���~K�?_�1J���di��a���nA��������D7f��Zy�l�L����D*�`;\y*�D8�y��E�8�������y���|fB���Q��u�C
���dF�n"���C���������m��~b�w���	�89&����M���Q���$&����	�e|�n�E�3�f�f�>	�]���6��3x�z�$�kn� n��kcq*O~�5��	�����<d&��z1*���af0�e�E������3"s���1�.�NE�����J��l��W&�s�/�b�{��!Q=�T��t��v
� 1M��CR��`������L��W!�:u�q�����q��@�!��!)U��������4D]���&�e�e?\��� �3:l�H���T���5LA�j���V��Z���CGN$���MD�"��g%`��������|ah���y1:RW��r�y[f��mG�����-cHH�������7������!���<&�7���Z��t�A��L����wz�2�i|fBG�	��������(�_�u��M7[{��g�=h��.��+���o�
r���yM��b��}��('�$��Q�v��]�j�Q"2�
Mk���6�*#X�Io��@p�v_p�rA� ��iYU�;`��,�i��?�J��.E����>�����D���gw��y��:)gt�,��yqx�c�lbZ�������y!2����5E�z���5I���
�����HD����?����������MT�����An��$y�) <W��y1:����h�l���������b��D��$'��M�N�7��B�y�,�����;e������IN�����0��O�mwe3
;�DY�t���QR:�4������%����!�
b�A�R$z^L�TG�b�v������z��Z��;���ag��o��5�������<l�����9;7�=3�����a�|�\k~53�������f��h��������N��z^���ye�\~9.j�6���7V����.Q8�]�x�_�^M�:3��f��em�Pq����7��'�����Q�Ls�f�u��sx���D�B��FF�@����1��*�J�[��D�~��v��7����z����=��[�H��&������G�lk���<G�|��[f�g�f%���x���,I�Kx�����J�C���/ig^��;o���F���y��v]�F���>/�9��.6fz$F��e�������t���U�I{H�O�'���T�I��k�����x+�|��B��LK/l?AZ)���!���3s�c3��Q����1k�fP�x^�b�����t��{A�SO�Q]������E�9u�XH�7UR7�L��h�6\=Y �	�7����W��D�|@����W�����tm���v�Z�W���wl����*L�]����cPd���������[�y��� �,/xm:�l��33&�=��s��C�$����������.�a�����	��;���Q
��Pf4�����-��������/��C���K�
��b>���}�'^)U���|��������S�����B8>7z�;�����u�-Fm�5 s��iN!F�m�[pUU����!o�a`*�"f_	��:|��~�iN�K�;^����p�XO�&i�{���KP�eM�<�e
��d�2��\!��p���!q?�ZX<��,�3a�z��a�E�P�`.�������������9��t��o" �w������B���\1[���s����;|^�VBE�����*m�J>���a�AJ��ox&��z�v�< �qR1do�G�u���c�+��s�����h�-VQ*#Xg��uG�����>��6���&�|��u{��Q��[h�0����g_W8�����Q�\����Zs"2q�����&���t�\��M�Zh���9B�4[�R &�Z{3K��V[��6�Z��$��3��W�
�nX�$U����z2����v��"V.a1e��YG�n�#������~����Y9�aH�����}�rK8Y<��:��"�XF.2�����k�w�o��1�q��s����E8bIv���
���43�u�4aI&#��r��/	�r���n�K�#��s�J4��Ju!�$Xw1\��;1����*������IWX+fPs�q^��+U�=��C�t����7tA��V�~P��t������,��uZx�2��|�}{yU��_<�k"�S'!t�������j��S�C��S02�)}�����q�����sx]�<e���XP]��p���ye��8rL��hQ�J��%���Q���B$V__3k�!^��?Bv��]�i��D3#-�>	l����u*:a��f�l8x 
�B��ZM�;���373*(���R�i��<���O���dS��,��S�?} [���	@*��'���Di�%H��t���F�����h��G��>Hb�4���0��)�~0<3C�T��N��@�#X�����=<3���
���R`C���N!4�;C�x�u)�#k��������8+�61��w �h��c]�L�N"���#��J4<��'��J��0�����U����Ets�17�6�D$)��v�
&���To��U��y��'�������Pu��.��B�:TE�@���<3��8��*5������eq��p���T��~�F(�1`�.X��v�
��B�2r��~E���k)��
����b��w��X��M�i1gf�c��a�����Ls*_�kw�-O����F�5bm�)!�	�Ie�����h?0�E�o�k���L�������[V{F��H�����xk����e���>;9�UEI�"C�3�Q���iN
?#G��$bg���X����)a�%�[������^G���iN�K�����7�LT�����U���mag.�iN�-6�D~��]�3#/��gP�e��|������'��3��'x5����#��Qe�C�[�nUpW,Hv^���������k����P���!
Jt'����U��k��zd�@�8Tf��`y��Lbj91���3������##�K�9%-�ii�������,mE8�AE�6�{�k!��3���t�M�������ye2�1*��F4��xb��N/e�����k���$�f��tBz�Q���{rmW�<l���%�h+���n(*��K��L����:{1Ui��cf��7��7����B�=����X�~���?��t��#x"�X=,�}/��[�
c�v������@v�D]k�'bK�������4A�l��l9�����������S�T��O�S�>���9��2�s�3#V���Z��;���!*��=4���*�M1�I2al2	N�����=��'��'b\�SL�q1��e��	�Y�|���P���g�hGe6J����(i����H�_?a��
,&m���\����m�B4�������;
���O�@s)D�f�1���);+F��'F0�hZ�	�X���t�Z�~K��'F�	�~5&
�/
!�A`����W"������6����6�up
5��Z'��	R�-�1����������q3M�L`�����CEh
D���YK�e��y1��}�8��xdjb�*Rk�.���@Dh�^$|�s����������������f�J�h~�a�p��P�'b�,%�rD��y1�M@�si������3!6��d%������$	���z���Lb�OG
a3@U� �ry�n�{����|��E���!B����4)%�Q�A{ixJ:�sIc�>GRB����	Zx�����T�H��2�����������n�6��������4}����)�C����
=W}	������'���\/.�J�|q!*��	9��$�P~��f�g�����3sr������:3�f\_��{j�`���/�Z�
nJX�����W_��4*<H0I
��(3��j���N�����j�����&Q����/�{��T�h�Mod���T�c/�K�c� |V����Z|3�WF�����aN*��^��%�1�������}�I,��HM��1�GH�_p��E)qm?f�e��LX~���|x�
����#��yT%*���{�0��H�����Qa*�_��,��R�
���7N����z��qT?���>�f[��x��s�iGZ�����,�	%�ia`�"��N�H�%l�����Y$�$)3`A <3_<���`2��\G�����T/�S�-������r�W���m6��T��
���i�\�x�q�`�
�����me�t4���9!���.G!k�j��
�z[=����3��DD
#�������Op�"4C&��� �Q�����*����(%�.�������o��W�b�h�qMfX���h�%~P�4�x����I�0��;~0n�1t �F�K�����"*:S��kR��&Le�iK�����e��o����{�������6���B�l����`����&*�x�X�L�x��@�c�67���v��2+C���9��o��}�'��0��vn���c���*��lx���G��q�\K����Vd#(m���"�W.�@c���m8��r{QZ��>idh�+oyQ�*���g����}'�l���4�6���Y7�'>T3;:T3���P�T��C5���t9��v����I�yIp��R�9el:�����yR��m���s_f��(�A��j�E%B�D7�x�[�+��k�s�2�oN�Q��b��G�v<v�>3�9�K�_�n�6�M0� 3���tK���@X��	�����������=���B���]�0��8�����v�ax�C�a�t�Z��h-m�(%�b3t��%YM|-2x�Y������-���	������	��b���N�����s$�|���a�����$�N�L�E�kK0���d��:~�A��EI9�p�x���+��~�(�K=�
s��,�=S)%�*�Q����&)c0�i���&=���3�EC�����Tr�Y��h�m#�����xc�Qh*E�������~�����<�S��j�����	���L	������	�@l����>�L)�-����]���cT��J���������{�=�>z&�e*U���1�pY�Q��z=|t������q� pn�}7��v����U����(q� ������T]H�i=�����(�O9�`h�73��+��B�v�ST��Mgn+oB�K83���m��E#~bE�E%�J	�A�/�&�uEA����d���)miFW{�������������i1���R���,&|�����61�Z #��{��P(r�l]G_���4SJ���
&���)`[�^��5������L6���U��'�m%�8���T��K�xY�!��f;,=�O�����&8l�&5��|������.]}�g
Ba����e�S�����
/��X���}w���Q��1��GZ�������	���I~�F'!%�3���!f���)x�����v����0r��&�
������G���b���m���eY%�UJ	U���`�O����0$������,+��RB']y������dw"�[�����i>��T\rS����0u1Q�r�j�
$��V��k�L)!��2�ih�.�Ls
��7t�s"&|�T!h��z�����(��x�����j�V9��t������'=���	�f�\,�E3U�8m�m`���B����a�� �7e?B������	��$��p�P�)��kI��Q��"}t/�nj�/.��R�Y#a&�S�r|�����n��H����JPs��y*cz#��f(��-/+NJ����	|f��JD��D5���x�j�"U���L�7��U)6*|�-�xQ�pm�����c�)��:$�fO�����6��yfb�]�-�d���w���`P��g:�]0�7���yQ�80�n���a��n.�SF����'�4�UJ	�b�c({cj��P���%�����<��Sf�4�����Z)�B��7=}����	l3����9~�4�P�����Z'M`�RC$�=��l#d�0�1u�vn��n��A5��������W��h�/��ZsS&�����>U��rj�B����^�����Z�Z��c�L:<f1QJh�G*��������(%.j��
wo7�#��#�ko7��2��q�c���{�o���E��#tp�w�@�H���~`�s�Z���u��.#v� ��F��S��+����PC���
�P�.��-w�/R���"������$���B�=(g�7�7��@��m�y
�%�9��q����\L.d�|cT7���\��L7�A0�������{^L7�A����-��D� ��6�c��z
d��n3 <�}���=Sf�����v��d���N��`9wl���4������;T�Eb�iP"<��ts��*���i(��^+��*wu51���Xa���
F��K�������o����I}����V��n�y1�\��7@58��>�X,/�8��Y;3�}���p��e�����l�������O�������<��v��zR=pv�u�� w��Pe�;�l&�Y��f$���c���$�N�A*���{0"{�"����*h��^�T7G@�oO����D��D��2EiqD��F����J�:����R��ak5>f;��`T4�M���D����9h	�s�T!�7��� �fJ��>:�:��"~^'����Ho��e�)X��(�&�y^\&��n��l��r�W5��5�wH���L���Ax#h+��o�i�XE6�8Q����p������������s},]�9C��4��e"��-��}<��dS'F����O�������|_>z��X������w�b����"T���B�N����X��(0�����mI��c��6p�����4�|���4B���Li����a
a��K���G%daw���B5���\=����*#���h�����y���tu�*�f���D�J��:�(m��m������]�)H��M�
-Ixt�`{�=s�����b8z�+���!���y1�
�bEO�����S�e��gr�3���wU?��@�Wx���c���'�������%�f��U*�v>NL��X�N���sl�8wL;���q��M�.���p�d
�����c����n�Hr6�@�w�g<C����e��c��!��bUG�iz�Drch]���$����fp�M2	s��@�������L�k3�\�
�����gi:#�u�%�Ob`/h,���

;�
}�Ek�SblP�^HY���F":Q(��J�fq|�'wR9ko�������M�\3�`�� ��L(T�����&�p��dS(*x�$���[a��+�0�b��kw���yS�8`��$#�{�V&p?��w�\�V<��T���������_�����"�$�Z�6��8u�akbU4|eaUj9���2q$b��{��2+�����@G�����(4�5����DfjI�H#s���8���1�Dk�P� �z��K
��"�zfBb�bb$*W��81�f�����&l����n5MZc�\��0�+�-�Z+�V�]K{j��/�V����k]/�A
�=�<O�:%&?L}��I���u�a��c���>=:v���J���g�}:qJduzln�:��bn�{����o*W�;'@�
0-)��D���ZI��0��/��-1I�V*�J6
���T��tW�u�3���RJ`�r�zhv��I��'{�N�z���g�����)�I.�q�]�&�%�4����b�t��8MS
�R�&M
.i��i2]'�TJ
��EU�;�k��(��n����^5i������-�������D�&e�4��o
��;x�&M:Qh�=)Eo>�t��8���m	����F���*=h���0����K��oeez�n���W-S��
k�Wp2��u�A��jt���Am_�&j>�7e�����Y}�,1�Ae,)3F���E�����8���6�� �^%Z���j���|
L�P�m�vj�M�t��$�i��9&�P�B���b_�V"���U�y����\�J��}���%��W&<�e�e�r�����MzHj��'��2q{�_��B(����;|�J%��V\�JB���P�=�\�W��\��2��=�������E�l0��O�~�?��~�a�J��	J_~O.�5����}��--K����	j��WB��%>��T���Wp�wJ��w�C��rs��~&&��0��JFr��g�w{s����W�>��(���"|���	�:1�;�z���e�������	���Us�P7���������D�} ��2��-��e��4~����]�n
�J���^<'����h��Lj�r��6
^R�OnUc�yN�o[K�V���AO���]�1��0�7�@���$DZ|�]h�%A�~^b\�&�ws��%
��Lb�����3+����(`���@�F�g&h��������'
F���9a�K���J`@�]mk�D���,^q��)~������mgU�9����k����;Q0���LPu����ySJT�n�g��M���W��h
��{��N60�m%����'��Z.H�M�
��^�r�L�N�w�� �l�$��"+a������7��+(�x�^�7�d�aI+����D]w���IU?la��jN��+�����*��C��9HT��d��N�lp���w�:��e����/�P8�?�-��Ac7�K,q�U|U�R�&_����BQ��2��n���->�;+0�N���1�Tu�E�
�f?h�n���R	�Ib8 z��m��2M�����E�".�6�e����$��Z��!h�+��%l�A��(1\X3apg������;]hr�cn]��I'
s�����;����3���k&l�Qp��6{�;f��ms/��M��M��m�nP,�
;2�����nM�`�#6��mc_�����V��H-�c�������1.�1�r�)�;��	�[��[(Ew�z{f��.�&��]��e�
s���r��D��h	$&�c�e�
�����w���nR�wS�^�X�nO���L2��l�`9��r+�f��B[)X����c����Yl��u�1���_&a}���-�+f�-L�:�3�QYjXqY*er[)�����n,�[������=�q�J)���/(�8����k��������y�jUp+e�T�m�F*������X=�9Q�X�s%,	a�V)�6]D���z���%bw�}*��H����FI�����+�>F�uL�bDK�}�'�n�=����2����J%�v=l��;����\%�P�n�x���t.�D��9����B$��j����V���v�M��D����E������}��J����qEH�WY#"�m�(&���R�@��jo3�MK�����%"���6u���?
,L�"��������\&,,M�"D�/E�}7aV�j�}d�?Snt����-��/_���3!��<��j�u.	�lUI�A����@$���$��K���\���C[�6E�1����GL���<��^���$o9�� �C����
S�~��0���9�\a*�4����r�#��j:�-��w�W�=KYy�z�QjUGi����8K��(�j�4j�RV��S�����,{*5���/%�cu��[�`{8�&�����It�����Dg�����fq #�YkrH��.��l���k����QR���f���~����zn�${���������?�W����o��-\�@����m������_������c��?������������?����I����<�c��&33bN~^�`��6�[>����8!P�����;�:q�F>3�0l={�}[.�JT�������h&$l/�d�A~����}'/����2���/��c����3����8�Fj�<�3xH�������q�=�!���'4�:+���h���D�Vr��t��G�Hd�)X���1I���%�T�����}"�z���]��?5m@=(�/��U3o��D�2rd�K�����VF�	��K���'nsG&"A����������4���X�~_-�`�\|�D������DN��Dr�S������8�/�1�Xc�4��z��G��HH��$Jv�S����Mk��<�&I
z��PGW=�9L^����mX>j�F�$r��}cd����h���~4O
�gf����#�&���Bd�Z�<���6��e�nS�X����������Xd�S~���j�����}'b���ys�|�6u��@1�l�<���y*���`�����ND�����=�	��,q�
K_5�K�Y�����xg,��L�������3l�����I�#N<QXkp��owb�8�j,y����V���E���cL��������no nI��E&F�(*�H?b�#|�'���N��e33�Au����8f��,��]��'���������g���G�f���������2~��=&F��{���u;|�h���/�L���gB��"
wE6��jV�6,������r(���3#XNLN��_�a��tgc��5����<
?3C����I�BkO���l�V������cz�^\E�<���_b���=�:���Btj��E'�]�q8��	�3�-���y�o�,���L�.�
{���	�Q�����y��_����-�vR�}���%�tm�)�#���.�v���G6�/9��.s��
!�;�6���F��	!P�0'��J��B8�iz�
��Q!�z6%����������m-p��M���B0����n����
���'�{�Fm�fo,�t�s��O;1tW&F��<�7��H7�0����Y-t��i�'2<&&C5���}�<rf��j4��������!����l/&�x��M���qd
�vzTU�A�����}w�)�����i�+�5����yZ��(.��c����dF�ZN�O����+x��j�[%�f#�
��0"�$������X�����c���(ft���b�3#XO{+|�����}!��|�j��-�f��<,"bC�%,��|@�i6��*t�3]}f�!CY_�sVd,L���QX�:W�^�J�u���#�3��&�j��8��BA�1�)!LFu��GdDa'���<��C���`s���4P9�ei�����`�hbok�|=\��8m����X�j����d���LLSB�&B>D,����F���f2��%�~2����o�O���O����*���'"Z�p���Yb8�M�8Oo>��f�4���M��H�����MhF��q����cf�x��V��m���voA�xC���B���q���2WV=�����U�=�����&������M5��3S�U����Z#X�6�L�������k���\�T��5�G\��k_k�*�X~�>}"�<��mO��3�=$�rX��p������3�}���D�>*p	RO^�����Nh�>�w0����?�u`"���c�t��H����rOL���<��������,�dq����@�H�H
^lH��F����H�]���J4�3����mhe�y���3���8a���2�
3CP������rR	�6[�<of�&�`L#WF������:��Jj��!t}|��?���������L�`5������9���S�D�@g��P������')9�:�g&����Im���=�7��X~
e�Se���wL��2Q9���K��c����<�gy����e�251C���E�/^�"R�$���I�c���4�W*a���3qhb����9�^���Dp��\q~W��\Q�y�:\UaB<���)�2��\���u1�She�im��,h��a��2|���1����2u��3cEwO��u�������������JIO�����M�-���GGm���)�K�>�C���	��L4�i�R����B�nI&*p���+��Y��E+^8��:��C�<{Z$��!�Hc�,�H$�cfpW/$s&�Z4j���']���Z�p����h��%7y�����IJ!d0���n�%&'�h�;p�s8>���D!b��:��*.�.�0|f"C��^�����\�5�9u�
�4:s�U�)�\����kp������6���I�����%���Tjc%�zXTJu��(�GP���)������v�R����\���1��}�B4�I���*�_C���_���R�VVZ^P�r_�������1��l�>K���i�2<B��\llk�\���z�X��qkZ��i!.��("t�P:w��
���3�\.���{-��mK������%�D8�i��8�FLb�s)�L��C���;_�`q%����J��.=Rsbbn��7��!|fB���1J�2���/F2����B@*l�����Q�G5	�\��p�����P�9���mL�t�,�[<|��T�Y��A��*Fs��l�$��n����@����==�\`�����!���*��~=|"C�95���{A��q�13�8l���!�%Om��	�-�z�E�gfL&b��zi�q����sF�WC��4)2����������Y��D�6�i���P�9����!�u�w6���41����U��rm������y(��`�����F��SH�{��8m/�}�w��`y�h�F@����}cw?6�x�7ow �-��g���������R�`���33"s�W�~2�<x����#�������8�����@D#>����d|��3��xud����;�e�
V;���y1��L`�m���_���W+�q�UR��n3��q�[�
�a�m�L{"B�'`�L��Yz�=,�/�+���<nlf���BpU���1C5`����4��
���>O����X��b��J�`7o���fF��lcl�6��K�e_At�*�����y��?�����;���OJ���'k�Ve�����g�,@*����f+�#�n�
������D4����5��J�K�D$w_pC���	��L�`ZIQ��iN	��� R�&�-�������?����>y�]����7#b����@�/��X����������X�<�
k%����`[�q[������P��
��,51���1���a[9\��^���.�J/��5�*L���]%��7�N��E� �CiVb��+�zq7F�u��q�lPC��J���H��VfDR|C�������peF��eW�v��v��<|����}�5 ����*z���v (g�N��-�]4e��
��iA
bk���V/# 
��N���&���
���bf�)���RG��DC7dbTD����D���!!�������
-Xe��������_~)��B�>�p9���s4��GX+�+������qZ�c
�
��R"m����A��fJ	:r��@�����I�'0���W��O��x��L��2���.��q�>����*�noyR�o��A��T�����oE���S�DT�a����I�@*�E�
0��*����O��Z���J)�!�)db�2M��;�>N��$��WTo.'�����T������=lh��A�@�-�@I!�G.|_)`����}�jZ�7[l������N�N��)�fJ��2,��W���@����{��W����������|_�v��������i �a�wFw=�#Rf
���jJE�%�I
�S���B��	�vc�7v�L�&�h��_���~A,�}�ZN�eA���z#�����CL����2����1om�zOJ;�\S^�/�� ����z��v\'_��gZ�0P��De����0��fFkk�=�������z	�$%�S��In��d�����9�2�LP����r��j�}���$6�&����_H�?��2vs���`�n��?O�I��4��%������p���C��)�����3��.0�����%�Ru��8�(��}�R��?S_���z��Zv�ua�!�w�������z�b����x�&��pC0�xm(
��>M�[]���C@��I�"J���N��?��?��1��u��~��I|�|^L`d��td���Y�����r������������(����y�z��7H���=���Zc���^����]������,$2L�L���,�;O���o��S.�z����#���W�*�Q��/�����TOsK\��r�S��S$+���~����X�"_+?;���i]3�f.��\<�]�0�e���|�aQ7qK�������LL�����n�Y2�`TJ,H����n]{0�����5]�<�4!����T�����A4g����2tRF��D\'�t�*4���6M���������K4����?�9�xE`�_��V�����]����pq�f�Y��n|�A�����_�[tce2��^zh>�C��4���r�J��W~f�b���@����o�P���{�y�������3cx@��9M]����8r�$��t�>	�)����C�2��3AK�����HC�&���2}���aD{1�����������03xFS,��?�9l*N�&�wv,1�h�`b��t�d��#���m�J'���+�O�����j`S�+�U������$�J~���9OLy��OL���� VGoVo���i0�Q�g7%V������.L�?�z����w]��*Z��Kn�s�Z�D\t�v|n����� U������/��d��]��OL����-��0���T��4�\s���$��u���xCGb��*���O��XLr�B���bi�d]�G��Z�S��Aw�K}��~���`�����(3�W}��j\B��1Fni����{��A��m����4�~q�w?�4x4~a���q���&�9{3��~ll�^R�k�fA�F����Ls*.���P-��������'�����43#U},_J_[ip����%��/�?O#l��x�PMk{\>:*#X���|�����`E���zv�
N�3saS���j[�x���C�U��
��R`U�
�u�y�������[����}�S�������������!�[�n��p�%D��x7'w���G����EB&]p�@���������KH��B��Q&�u
�b�r����1f��L��RM2��6���.���Q��D�mT�W
4xs7��%�������^��	�$�0b�i�0�M]���Q���7����GgP�b8u?��g�MZf��_�H����OF�u�i�%�)A����?�������|^Lj��%~I���<�o)G��-���o�Q��V������C�4i�U�]FB't�����\��h�t-y;D��&m�yA��6~rY��688��|�	m�BD%6�+���g��d<6��0�'��-,�J�6��=�bdJ��a����	��	����E�[C��N
�'�,#G�eM�}{l��<0R�����;]��b9���6� 1
�&o�Eudx�����W*u.���/��l��z3�^	X'�s�{5.��b�?��H�g�E^�|������,�������c3;�b�g&�������~Y�{����_���=�tYe���,
0U5����r23�BRV���;�	o�E���MlT
�$��{�]�	�V�5�Jx�$��=-z�0Y|�l��L�����=�p%R��oZo������R�>1����mo'8]�:��`�;�m�����H���__���x�=���?@��)�|�%n���w��;�Z+Q{$��B�J�~��LrSInnd����;��|W�T���<����=-U��DH}��������P�u��`���yQ1Z/NCH���$_�qk��JL5����\��e�����<3�X"�6�i�s!�w�u?���E3g&c����w����z�cwZ����k�<���h�K".n�
-gsp{^�%@����wZ��Lj��5k�Jjf
�i�������c����j�X��Z(�`�Do�{U�L��	�;&)\�]A4c.=\v����L�}�LG�L����*P��7~�N��*r��}W��aeZ!T����H��-�	I&���,$��7V�j_��e
��M!��^�/�|����Z��8k$�����F�u�Yh��7�j$��!����5��S���;�����FB�j�����b�w�_t���t+�!���~�X��������~k�H���������vpG,)g2��<�MT���
@{�j[b��d����F�[!4��ntU���4c����T�s��/�G�7[���������0+�J��p�h<^	_�k�X�)�Y��'��L�^�f-��`-k./�2��g������
���K��QuF�6�X�����;���g���`2������c��;3#*|��m!8�&F�U�:>?�pV�����q\$tI�5��VY�:��nf��%��m�nZ"~����j8���w`=�[���P=�h��	�9�������gb0�Jl�1����B�_,���*\`��}���7����)�����+�������u|�B������U������V���\�-�k��-��l�����q&��3�
�e���'B�j+�*
���G��Q�Z�c�j��V�iP������
��v�I?�L������vhO�G��-"^TI,�
��_7�fj�[��v�����QD����j��n*����8����H��?���pn0����4!������d�C��O:������M�y?-�YW|2����L���w�V6�HK�@w���i`���#��C_qn�
�P����Y;DTa��.����������><D��p*�1��!&�'��3��|��5���?8���T��&)YFX3�*�P�m��YB�%�z��,2������������K����/o���ys�+�O��yf
#E��~aS��[��b���)qD����~d>/-�z�v�DP�NL���[�
�Z�|R���p$���|bZjF@R�1b91�t�:}:���8lf ��"�������2����{J���;5X?S� 3���L_.\�ck�����
��q�CQ�/�~&�7��T����C��B]a�.\�"��\hhV"���E���*b�E=/��@�/4=�����4)��
F��|���=�A�O$*5w�]�rc37l���E�q�fp�G��z�c���7�F�K-��z��N�y1�C�e��+�
-:��X����|��
�YQ �/2�}�~c��*'NL���9����)'��]SBm^=�,�2cB�J�3P��=3B��`o��\
�l���;nf�B�0Z���L�0���c�6mB&F�:J2�p����	%{_O�\�e;�+o�]�������<m�^��[y�y+��������~����������Y~-?�����?|o�����_�;�"�������s����}����s9`.���Q�P�=���������	��5{�w�J���iNi�D�g4I����5������6�{W��$*!p���e�&y��
'��,��@=�b�M��[f"��Y�YN�5�6y�l%���7�������
���O ���"����y1��R�|',!'�]O�P��@v[pX�%��O�R��:������R�:�{�����#����Dh�M���r�h[N;�b��d�6�=��&Wl�����/|�4B���[z;gF3%��L��9�z��0�)!v�:�K��
��D@�������	@9�u�!���y��n��*��<0@�0o����gF3��7�$��@�(c�3�K���}�9]�;��������h�V �b�B��2�3T�|"�f�`�4)�GV�pH����I��h������T�RY�UF�z;nJh����*#�^��;��������C�P8�;���h��a��9�W���$qh�}	7To���`'g�W���}��Jy�>0�����C���b%�W�}��OR���zL�U�`��� ���#u^��_��]���(�-�'���
�3�c6�_!�g�+�>�x1=��%S�������-��	���Z��'�wp��k���]=�6k�P~����/3!� i����XG��}�@�i�gbJ����t����",c���O���Y�MLH$�_P&=K�?:��#�����	l:k�Y	r�<���o*A��+ciBC	���-��JhV�1B2�k�@����u��=�IN�f�<M	��])LL`����B�h�X��Pl�S(�Bhb�3ac���3��725x��	5��M=Xe��rE����)BMe��`!4��Hv�>L���4��|hj�[��x9�<�����zJR��4��
<��_2A�*D�d��M�B
�������
m����S;�[,��5[�l���������A�{�{��������P��Q��*������A���o�V��G
XD�i�[[�ykM��8�31"6���=�����z;���������xZue��O��c��
gNn��b�"=.��Y��$�����}��HJ�����s��=��`d�����M��}�x�J�l�����=�a��E�l�n������$����Mvo�b`�DjL���Jh�X�Y�<Ik?d�<.��R|�����oZ|���m�db9:��dF��,�{U'_L�g�c�A9#)� �<����c���A�'����M����N�*gV���E�&b�����^��7-��
`������G���'Oc����j/��$2�N���F�����L`���m[��R]t:;���-sfZ���71M���?�y������,^|��{����
h9���*a)�6�����)8R�%����3���*��n��_��"�St5]o���<��X�B��na��	4p>�1~��������O�e�������#F<F�Kv�e����/�\6�U�'oQ��'��}>i]T
U����u�<UB3.�� J����:�'���L��bS���cTH��2����-���2H�hF�����>8���,
�qb`r��(D(x$��
��;vMi�0���X���Q�e������-�W��j��I(�P�=Ifvd���,��Ja���:l�y��3�/ w�����(�w�����>�����h�#=�Z�l�r�9���sa�����iK�Q�q_PF����7���{�A������T�D��M��#X���6����X	=�#�d�v'�iN����S�J9��1�9��@g��E%��UON��}#�a?:��`<�d�t���/&c��h�A����$3�����=�cL��%���[)7]��VY,^o������gp��Q���K8Qq_���a�*2��:�4������Q#�~��!�'\�94?�c�7H.��O���NRB:�����a����L7��|�n�@S�sJ������L������r�T��DI�����Y2'�8�/�\G>�Z&"!��2�p�����M��!�������O>�+�YL;��X�-��{b����F �����p 2�Ov�a��������2�I����jXd�H�vh�L�5x��VjK�3pW	B� �s_]{�!���:u���
+z�D��34���2������'�s++�����Y��=^s�"���6���ac��5�	~f�`d�gl�&ub�� �U��H�����}6H��L�^�}�&�c��Zy^����C������#����'���_H�^�1�����!YF��}	����\w(h&#������:�n�#"8ObB�T�FRp	g����0K0.92<U�C����R?�3��2�\�����2�����_L�b�1�����f&�����383{��h�=&k&���D�@'.KH�����+��S��X�@"2D��J�0
}���)�NT$BT
Q�����sb��&���1Yij�z�q�����/%�"��2�	�i��!A�1@�9��-���q�]U�S�����D�~�/��o��n"��_p:�����N�%�b8�c���,�^eZzw�;p�����X����w��  ��d�����GC�]F������A	���o�s�xQ������p��m���40 �d;��g�D���/���P �z�h:�p�y'�E0l���*�m��(
�E@SB�(%.S%���x����� D��0�D �Q��J����o����61�$>�������o2���5�
7��r?Q�����r���y5�N��S*1'W�^T!��7�]%�zb��4��d�|#��^+���1���/lyj�I��R�1����W.���[��7��M
&��,0L�������L���(��R����o��,��k��,
���;��+L+��f��f�>G'��D�1��/�O�^�.�������D�����cK�w%,���*3������tx�����j��z@h�������L�f����f{,Ti\M��]X��F�����8'�U'�Q)%,����!�e����B ��?�����P��=��R��c��&�|���3%�f�5RW,����g�~����u��
jf:r��L�����RJl��U��6
W	�s�,j���`s�n���f3��6�R�fP't��V�AO~Sh����0�^��,��#_��q���u>�����^�#A\,K�0����$�	�<J�_v����r[mFf�iO�mPJ�`!L��{�m�LUL�p��BQ)�������g��#U�����}{sB���������W&SJp��3��j�mJ!1�+g�����/b{�B�8Q��s��gE�����v�m���E���D�F���/�f@�#����M)��M"���.��Q�1�G����3W	Ld�����TC��z^9�Ew~�L)����7�q�rF1L�[�{c�_8���nS
;
/�!2��B��N�9��F��?m��zc�
����������e�4C�h�i��]���g5������q��PK_���.kt!�������wOb*>�=�X="s����<U�->����%��|�
qR�V&��s!�#w���(]e���	h�n�hR-]�N��W1�Ny�/y_=��w�������;��V�a�i[Sk6~G�R���Oonk"�L��W�l����4�?���}@)��F|������_�p�}�����L���v�6G�S�=��n�p������.{.\�\�_�z!Pjb:/T���+
E�q���*������'ZQ��R������B@Q����s�B�(��\�(
��B@Qx��������p��w�'�'����\���+�)�2]
�2Q��t�B�T*��E��T�}���R�$��RE��T�O5^K���V_U�K��-7P*-u^�:�*�^�(��%�*����y����:oS��_����������g)
�?�h<�h\�J
A��z��5��x�R���g_s��"�}�����:��Vz}��+��y���Q��+��Q*�J�6��*>�R����(
e|���8�_/um����:��K]g��{m����������u*���B'g5��Km�����T�j�t�J��V���*��c*�sK�f���K�2�L��*Uev��L��}�U����S���*Mef��,��}��T����Q���*EeV���I}�T����O���*=eF����	}��S����M���*5e6�����|�S����K��}*�{����r+K:��r+��wL�^�&����4M�1�{iR�1�{i�p�j��Z�S���S��n��yi��:�9O�1�{i��c*wMP��Mu�J����~����u����	M�R�������W�.$����������'IV,H�s�+���E����k�3	���7�������%�r ��K�D�`����}���J�
z�6��(��<�3�����d3���	������7,��\-!�������M�����1>���L��c�M`&��%R��
����|��	����P(K17��>]3������4l��5j_BP*�iP��+?Y#�� +6���uw� ]��Po�eo���m�����QH�.%�mt�33�o�?a��kM{����[����		��e�1@�O�4������'�k1���ZU�*�8��$6�ck�7�1����<h[=����7h�v%p�1�1x��P3����	tX�]bZ���b}���]pc-"�i���.nXj����r5b&�C�Lp�&h���K)��0����4|���7zj�����E����Pe$��.�QFJ�5e1��G��� �$�y�q�pf6�,dm���d��p{$�?�=��f-��.�������n��|2��)�1kg|l��@����	����w!�*� %?*�7�1U�+7;N���-<���P�	��8T��N���n`A
�{h��]��m�	Y�?;X%����������3�61�u`j�	7�����7��<x��Tb���bc+:���o�)T��*�BX,�-#D"�<��B4E+�z�(]����f"A����Rb�9zX�n*��tD�Y!$~W��[���1�.�?�qc�����A�`E��X�����eKDc2��N>���|l�`z]<����ur�����C�+�O$����q����YF����j���xI�q]J�Rx-DS�Q��Bq�$�I&�SD���f}x�� 3QFk�����NF����������^�~q�.�
��q�%-S/>��ZIX��AY�Q��G�A���HoNU��T%U3��A��A�[�-=:�C)��&�N" 3m��Si�g�t��M���SU�`&hkz>6��ob+�a��K�!��BD5aP�R�T�a��_��������7�,} k��H����
v%����4:b�����WM!����+�Xs����m�+8bf/�.C���k��8��9�����>��-1����~0�[W<��a�?��$Y��3�����^D!���_��;<�vo..�.������d�!c�����l�?���?"�}�!m�	�v��sO��Qf����$��e���z�
�I��+����!����_7���W8!h.��4��&L'=��R�4�
B�������I<��Mg����`�1"��0�s�/�(�)GI=�"��o0�H�U?�!(��x�E
]g��4���v:7�Du�.�F���<m���I�������X�N8������4e����T����b�
�@A��6���OD�#���H��]	�&2�����[9�:2^G4����2�����	EYK�1�����J��w��Q�l��eS����������J}�zg�9����Rp"�K�UT�]b�J�r\��s�n��uWi��pI��v����C�3����c�
^c���Z+��Ks�V�+�Q!����3���M�+�1��G����n������e�����Zj�DhG��o��*:Y_N$��0MM��n�mx���]]��Y�L��E�J����D�5��=
D�pU�P���k�jpO�cG��z��v���D���S���������]0
bG�^@J�7n����'<u�c!��J����P���;C���<��(��t]�"�_��@�����$`�+�B8:������`�}�z�M%��Z/�AE�{P�^��@~��A�r��c��t&��eb�T5���DP�{��S�������
B�������l��
���z�� R��!=��=c�������y,D�����Zm�F�	w
T��X��]����	��� ,�waP�'m��@��M�_�6��Yn�����a�og�5u��E�=h�m����H{1-%�^�6���V�=�cqnj��Y��WTCB����|nR0r-L��p7���/d�{r�(�����)A�{�4�
4�vy)��6�.D����*>�.��4A7��X�w�
9��efEYyi���q9��w�2�����5��Vc��q���a���'��%�C�G���yq�<B�/������+�8�	�z��Dw)3q���!s(r��gf|ji��x���x}���BXT\+���������(�9w����!�s�/b����b��I7tTu���b�L�R���'��Z�u[��O9]
����uqVK���i�Lb�YKo�r��3>��bo��(��%��?qhJ�3j��q1��������w��Z��� '3b��<73?���:/�\@3T�q������]�	i���>X��7c�0>��rW����88UM�7��4�*����;.���`�L���!)��b&/���D�N[��+�$�3!U��8K���U(���
����_�����
����6H�������-zre��4]��D	�VZ�����
��2���. P��8W�V�mw�i����y/��Xo������T�+c�t�	P����^GD��x����V�.p���
��b�T$����P*ea���(���eh���&.R���|���w!<���?O�a{!�W�5�� ���6�7^Yu�+Q�s��y\�v�aAS� ����oa
��	;���Bhj��s�Z���fQ��m��jW�2�d	�U�ve���&����vhO�\k'�aF�����z�-
IM:w���s�M���-+5jwK��ZE���%)�x_�n���!c��S��� �I<�T����s��F/a�(����;k*�x���T�-c�$���KX�03z�2��nv� P�=-J�SDI7���3��g����i�}W����S�!�N E'����)A��b?�Zr�~1�����pc�����{����F	�'�����|��MO��%���r�(�/��a���Y��AL	
�h�	�D)N?��0K{lGd�7"�2��/L�Ki����N��`�?��>F;�|D'����Ai[�
<cC��L��
�s��L��g;�2#xyEef4�DD
B?���k_0��t7B�D��kp�3c~q���w%5
f?���w�Q��/��oTL	�jL���;8	��p�&��\x����M#������s4�B8���U�������=@%�!�1�shZ�x;��-4���$��^�C��-w��@ji�^�G�j��_�r�3�e��w����O�we�������W��V�xP0Bg���w%����.w~V���MU'��D"���)�m��}*"��!�5��{S�K�L�n��!bua���+:��T��G=������� l�#�� l���������i~����d��YA�_L�W���e��eI�N����Y�LD�)�'���`4I��b�e�l�����vYU&��s+���|^���qCi��d#aP��l�������k��ON:��Rs<
p��-T�M��G�	&�?���HX��`6�Z�>�0�ZE}�K�>����a�/�a��e�',c�������-����a�/�a
Z�O�B�&r4�v�� ���T���������i��#w�m��@�Bt��.H����{�u��W�X{����kja�k����k�a��pM}������k�+S���O�My����"X�����pM=�c;�kP�gja���o����X����=T$�3U!�c�z���i\[�����`u��y��
�d�l�����������E��kg�?+!���f:F�U��	�^
��sh1F��EU�V����������X�()������si�)2%(#|����=5�=5W]�+��z��81>���T3���Or7y�����9��4���29��S+1���0Q����~�����~x�f�(�E�Tx�B������o�d��)��0��Q$]�CD�t�E�`������434�Vf?�W�C(��gEcX+��<e\�B"���)���2�a������>pa��� &�n�}Jum����4Yqaq#�`�������t�Nw�����A���/�M��0�~�.��v������g�����!7o��M�VY���-���*��ZX�wC.A@$��n0+n<�����8.^A�m;�n+n!�	���e���a�����2�����a�����[����evI������s��������]f��.D��N0��Zw���[#461�k3t���a7 0�1��xO��B�<��~���Q�I7�g~X�OH�(��*n	"���%(�������7����u"z�L�7���5�:lE�[.�z�\��1�0V�;C7T��#z����!�D����V�/������ yO��������{lWf����o..��V�t�8d�R4���{K������
�=���%i�%v��`a3�{~'�v4���>��v! ��
�(�E��;��=3�_���	M�\�g&�����/l6/�`X&�N����[�����r�g�A�n����>r��;5w�zMM�l����j����&��^>b_�uyK��z�����;d�:�7� ���>���<�����k�k���j3�����������n0(�M��U���7\��y��M*��U��c��v������`����/Y���7��)~_����}�����1�����A�-&<�C�e��p8���1�����7���L�im�{t�1p��z3��3MyA9������`�p����3�;T9|���5����y��0��y,vmx���]B�G��ZEg���1i
��a{ew���1���Q�DM�����G��0�|#l��c�!�h���eD=R5��j�
L|P��3��Z3�b�����XW���y�,��i?{Y)V�X=4Y�~����R9�m>�P�'��������*�����H�������B��j�,����Ic�H.`������3�.�f�w?�lvu�"�����C��Am��������mS��3aE��_��o�a`2N�����Z�
c�u�0���pv���a�Fh����+��������/������8u]�m�	���#����&$�c.\����vg���>`f2��^<����q3�R���F�5u���f�d��������&�^�X�X��������!f�BXNHtt�CE��A0X���%��h����5?�D�@��C�!�K��&Tp��h
����=v��������o}����(,b�5���_�Uj6�sQ,�J���Q��oy6���F��.�$��7�b��o��p��8���B������.�C����*����Z�9��oT�>"��L�=��o}����5������a#JW[�BC>�n�?b�O#t��;MqGv��������?6�$�V�p��oW�&��0V��u��@<�=����o7M]�2cx�S>��J�r����=�?�bI�7�G�����Y��-��)���@%	dJPF�����J�����0�U���^kWe�a�����	?����p��hJ�������t��a���ya
�e��]��������w&���������(��������bY�!���S�-�_�A���Da#��:w��Dme2�����v�;�a!u"Ex�Q���7������)+q����+5a�%c�)��B�@��6��(�O����O�O�Rz�BX3W�
Q#P���0x�U
�;��l���0����-h��P�n.w<9!�!*���R�
�yG ������X��"T��l�P�l�@'������I�I��f���e�F�?"J0q�9��F�l���1M�|>!�?��n�6t��pz���)�A�����83�~�u���a��n3�d����J�9����4���2Q�����:cM,Mc�&��������ge>�I�s���"S�2�F�F�1���a3��g������N9aCM�fk0���_Q0����<�1���x�z����m��T�:�q��G��[t{�?S�*�2��23�)��i������h���n�!��3SR#���*��:-r��������>G��GBM2�kW����j�Km�u�!.��a*��h������}a��!�
��N���|^ ��[����5j��b���x������l3��%����E��/�"�������0�9*�r��2������cXC'����71�I�Q���vx&�/�5��2-��������PR��b;���SR��L�nxmoE�v\��oCqhn�\ia�����ki<p�-��^���.�-��_2�w}�\�J���o ��Pa{���6���0��Y�2O���������u?Z���-��e�~d}gh�4?��D��. ��d[[	ka2�1H[p{�NLX������w%d|��@����i\"����y8�k��oQ�i^7}S�+3a�����������qu����M8���h�'��}k&d��Dp���Tw3��[{��2�
+}�B��Em{m�7��Eg��SL	��p{�A��	����67�����*�)@Vf8��������
f��2��x{���CD2���>���?a7��G��[���#����f��bhuq&+���p�D���X/R��n�#<�C�s?��D��@LY�<��N�
��=d�����_~P�y�B%x�I��m��w%8H&#�:���Tg�6��8���AbJ"�BO��ja�LU�zP�:��a��50� 2�L��SQ�U��va`�^I�a�N|����O@��~"w���z��Z��v \���?>'Ro�Y�. �_wF�������k�D |q<d�����#�`8���i�����>o4� �2�[��������+�����4���`�g�(��rC�L	
&��M��+�����~N	lM��j��4m����z�����
��������/�W�L{wy���R?��L7S|���k'W��87�Af �pp�!d
P��A�����f@k�w%(�S|��q��A�W��8��,��&����K6�j����qc:����eK����7+����aD{���r�'����������;%'b�V\kZ3�����&fG�41;x������`����D_g����<~f�@�[�������0���x:&z�`��s<���t��D4%3Hu���c�3����_1�]��h�S|���NL���`4��>�T�D!xR�|S�[6�I���#��O���s��T�Jq������.L�pA�����b�x�d�G��).DJ �,|���i���N��]Wq�������RePmR�o7A+���+f�5F���[M�S-��Q!��J���[��A����	W a|����f��i���!
Q?n+'�i8b6)�����-M����i�����a�?�5�c�lb�>��QFgP�#�����v?���:����1�S�L�p��1@����B(���q���1Z.w�9ny�O��;W��Hv�a��-5���=]�uM�	�:4���,a���]�b|p;i��4�A�������0l@�6���#��.&+�]S�4������rf��� ��;Ggi6x��83�d��;�������aV���&� :%��e�wo��n.W���7�L^�3���%��Z�B���A��t_�Pd������������]�UC�T���@�	b��^�2T_�.a�*<u���Y-=+G�~��P~�U_S�7?���J���i/����*�Y,Wd_&��4�0
|o�)����q���n����[��-���^H�oa�����z��[���>�P}�{�T������4�]�u���3>����+�I�(�=�>�6L�o"�E�]����\����N�������w!Bw�IF��9�����}L>��������c@M>��}Q�&"|���E�b�S��>�a������� f��qB�,ti����T��}�7���>�p������>>���<tq[������
��/k�� �R3/��f�2����<2>�_���#X*9t�����&�a^�N=\���*Zy�1�mL=�������y�9�0,��C�O<B�8�H:�x$d���y����S����S��������J�T{��o���J���8�����af��c�b���D&&	��;�2���*d��D#�Q��a��K���3���b��i�a�s���3>�����y�3��:�4��>j��g&�	C���g�v��i�A�b���"�4 1&�}FI|��@����t�cl��3�i���=&��#O:����R��������5��*��g4��Z�����2�������������S��g�O��$����<�2��F���s������f	V.t2%(L@x�����r��]�����S��W6�����[�l�:�53e" ����f=3Q�g�qCg��C�{};�D��G����1���G��E#�� pe�p�oy�:�B����������D����HL����?X#w���gI��������_<�Mu��`zOr�c�O���J�����7���$�_�=y�3�	.���D�Q�#�
x����N	r��:��uj,,�a.�8��� ��u����S���[@���=LC�	�}`CO������:�p��xWa=����N�?��5O��q���c"j�;�R�q��[����+)��T���P��� ��+A���[a�����@��n�4�*=���L��'�J�4���yI�	lP+���p�����d?��rb��"����l���w� �3,�ZcD���!�Sq�C�u�K����@��*�������>��:g^s&��	��r�f������
W�i���8���w%�a?G���c+T"b*����8��e�E��f�'eS����r8#3�f�~��F>����q�d ��|�r-LLG>���'�t����li�����������lB*�Z�l����i[�6	cb|����"��Q!&�4����>2���dq���'�c�=N��$�!���d*�!���	��.��~����'y���p?@����Db?n���'��D&�%�b��\���n��}�H�6��*$r���&I���D�r�� ��I�uV��-L����.M���	1n���=�,�_��&[�pI��D���'�{,F��i��'TI�B���z�����/�fM��@1*'07�i5���}��'����pO����8��gZ��k}��z�����3�����>q�����J�c�����8��������+�_�@g��$h�����k�X_�������X���;'P$�#`�fE>����k������������\�`���)�s;��.���	HwX��)a�:�#�~1�4�1��f���	g�4a�i1�${t����;!7��s��f�-L�y��:igL���;�I8������Mg[����Wk�W����B��U�t���@��e�W��U3���#��:�T��I>�T��I�=�T��I�=�T��IE=�T��I=�w9�A�b���������qU(��!�_u����k����Z����!���)u�P\���Bqu����{��Z���~���a����U���i�������������?���n�[>�����y����+��q�y�)���~�����?��K���?���"f��j�[�4�������������q\S'�^1A�A}m}xS0q'z�.���J��QE�=�L�~��3l�~�-6��+��Jg2��V��>�!��~S�#�~'��� ���`$V�������� ��S����!�8c��:����B;&Y�]���<(m���
��6�l!	�"�`.�2^{">��������-nm<y�G���;3��{Jb$�����+dW�[� �O"A���3��US�2�W:7�'�����2�x�@�����DuH.��v�p�������~�(���2�$���F�[	+B����q�{H`����eIQ��|�t���9�K����n���l�pfSb�1s<�(�����d��/�#��������.5�?$a�u&2D)���
X?�S���jk!�N!��G-��1%�q��Dh5�E"��l8(��g���aE�z���
��o�X�)AU9'c���o!2�L������7l�G�>��{��Q�qK�&��/����e��	�[����P#l�~������h���Fey\|��T�]����ide�v4�],�����_g�|�1����HL��pI6>dfo���=��KT��
����r��3���z�RWc��q��L S������:
�:S��:g�f���;o[��6���{��cf�~���=��D�7p�������2!����~����k�KCP*c~�z�x�F���0�-Xi�N��z��r�F��K������h5�d������6��0$�q��^�~�*��P�nW��E��=R����DT�j[^��������w��@�14(�=�T��X����%��jyW%J-v��Yj12%���N'�k��D���!&\|�$H^!�0�-Le����[;WS����[��C�8��D�_!���0A�z��DTD\�r���1��r]M�@<!��5�2�F3����`�r4�F�_LE(�	n2��3Hg�`T:X������
��C������m���7Wc�L;1��,�a����'���0�����C�iw�C�]�a��
��OmqY��~���73z;(�$�����$8>�iK%$�"9HM�<D�s�Ah�1��	Q�����3Q�4T���?c�bLY*#�f�E�2c��1�)?�@A�����
5�)��� ��������p�a�����R#=��S�&�=3����'����}e#���0���e�]���^�n������0���x�t���>����t@��\W�+P��<4*��E�����0$��Yw���Y�P��-|G�k�A����+���q�"W��L	��Q��>��o �a����d04]�Md�]�-�G�L�,
���W�E�0����������<g���X�+z���wb
D�~�~����,e+C,�R�g��-6!��L$��a��;rO.����5���E�|�J�1=�p�
gS�����A�&�
!���s)3T`��H���JX��+v��o���}���5�v��<�oJM>Th0�y<S�|*�F?���rM��%��>w�y��R�G��,��R�TxWJ�{z�;F�f���\,%����1L�H�m+�<��A�}�.p���y��M�8|{��O�E���*��p]�a��������C��������@�{�
��:�r�����r�.������������
�+�9?=z����^����V����^$��������'����"�u�#���
]�.���o	O�L�r�9�hx3��YGt�,*A��\����"T4��#���D����`g��,(�q�<3��]/��y���������\3�!)�];�~&C��?�7�b23������m.9���y����uT$&{�?)&����y��w%s�i��T{3c���V�_���D�����6��a�]Y.*����-��c���Y���F�'�>��ejf,{���!��D
���g���e��4��T���n�����TZSi����1~��i���������
�����!ta<�|,?M��B�������4<V��y�P�1~���s�@�&�_+Fi�\�7�����eUIz�$��<�I���QI:�2�����3)�AH~'B���,��+<��@�m�D%.Y~u�=&c�w�9��
����r�����ih��0����s7dk$�Zj��������^#5���ODn[���D���pI���l���K\N&�>[������+R����(D�gvg*�G�A�������'�S��vM�@���N���>�M��f�W��c�J'�_L}����$��%>�2�O�j*W'���DXd�B�U�D���<7�N�oP��;�����Wg�g�v��5�D8���O���w��Q�!��*k3a���5f}��5o�D��td���2TD����������Ash�����-o��������E���Y����?p�=>g��\8�>=���./����[|��Uo�AaO���R��������m��o��x&��j�B��,�bY@������ ���V��
|��U~����&��d�R��.5�����E�����vH&C3�5��>10:���h-��=���0���u|/�P1�]�1��$l��e��d����~T]p`w�rXt��R9]����7�	8U�.��C�c��|���.t���'���<�n9��C}�E�we\&�����6��l"u�FD���2�����G�tu�4
��(C�al��u���P��L��i�#�3��z��f*��e&T-wD�5�>A��������v���l1 �B�[���b:E��t�0�����C�36���C��b�U��`S�q��aN�I����{e�'�|�������{�#+��3�d�@5��Z|��3&���Ye�"�����������	�=�+5��=�R��/F/-���lTaP��ZV����ee _m����^��,�B��y��E2M�����=\�0�v�T�����["�X�������`���c��=e��D!�;��R\+#�5Q4@�e2����������=������+�+H�O�g1�7h��'Q��+&����OJ�����>kf�������I�����}��s�i�a0g\�[�p��*j��U�>"Y�Xpc����<>�]��\&bJPF�6�V&�;{m�W�2
��?u�le_zBC�Bs�b'.N�:wP�������0�����#�������Zr��p7��0ng������%g5���Yje�=��k{��r�q�ZA�#�kB+i�+���2������$�:p`@�p����h.�����6����^����,QFd�Z��+D+3&)���<"���<��v��
FS5������H��������1��;��Nu ����A���6|�2e��f���B{������W�0f�����T0h��?���
3Q��b��Hx4�<�������	���yDR�9�,�����������{��-�������[�����,���=�����?�������8�2��ea��u��{	�	��1�i��xvv��dcpX�BB�PSg�/��^�����bvI���OY��A�u�<xW���f�����k����fL;��WJ�Q�b~3$�T2��iY���OQO�Av�-@��:��~K�3���`:]����X3�a9����/���7��{*�mb
	u^(�5/���>���/��2j����k��hw�Y���;����} a�fy3�6��b��dS�t������^#7��S%���A���Z�C?���*1�_�bB��RE�w ���wxM=�}!�1�z�� [�(4W�!\=f���v�fDU��_@��ar��]	��56�dU��#���VL���2\�g��+mj��@g��7������&23ae��U��w!���Q��Hc���,N�m����������4�S���&�n���8�
31 B�>Q>���+�E2�K��&�d������Cfa��c��~t�T�����A�����>��'���.LqJ�����5�+�$3v����m�.�Z�U��}�4E��	03*�
wW��l�����l���"�xz��
�5���\8^����0l���N
�"���������~*7�:��O�l�Z(���J�����7\�t>��;n=�_�J�F��Z���u�	"�
di	.���;m�4>�F>�>���x�#�;�7�<��vdUd��{�	��JBx��{�|g����	��	�I&���P��%��+�qe�B@���a������D��e�8��m+�.%�}b&*U����)fu-D�����(�O3�w&2�Y_�������l.	�u��;��.K� t�=��l%�.%+��8�u��'�L�t!/�I�3a���s<#���O!�%.A��d�Zw�p�)/C"��&�]p��� n�\[�.��������*���j(�mg�n�"�	B ���;�b��������e�����H�Bv��@�]�^�/���������-Z��T2���QH�Y����0!�������q3#�M��R�e�a=��!��]�q������A��WU:<���ukCH��e��r��+����H�C����R��b����y�����.6E��p�������\�'�a�bH���;�B�<+�s7�j �.OK�qG�%�.��o���&�c3x~�"�'�	�3���|��Xp�N����[�������k��T��j/�^)/������T��.X.\���I���M"��U��]�o�k���<��B�j�t������I�������;�l&�n�2��  '5T�	�}R���>��g�����??Q���d�[��s����P���E�'��3�8��
.@m�����#.�p��>���%M�&#^B����""mB]���gVlB�0��D@m�����0x;��3��M�	BA���^L��wv��s;�f" �d��|�$��,_�����{&*w ~ �����������NS!�_��1���P�6EU���0� ����AY��)���� c�m�J��:��`������<1>��t$���y�#:�'\6�f��&G�^���`�g�,��H�-U[LS<��hR.��Xo�m��z����X�����������G������o��W���/�\�����i�R�b��D��
�n�$��$�7�������gC��m����c�|�3��v(�;Gs �V�s3'�&d{|Z� ������h�P��.X�r������wT<�{�!�Yw{q�[���@��"?>Qf��s���k�l��`�����.�r�$�������:M�t$jb0���^^��l��n�J��B�D�O���b:>��v�	T�-[3�>j�](	�7�}��A�G0�b(:S�I�a������6�Ajo��'�(e�#���9�'l�	��Gy�n�������Pme�KC~�	���<�=�2���9&V��'�`��3[���P� p�	o������u<����s�r+��o�������ey�������1��`2�)��e!8H<�O��qkM~��j��L�w8z��G������~�_�%�a�d=nm����8k9N��*���N:7�A����g"�������DB��+E�Fs��R�k��������w�\���;��c�tA�s��Lp���X�|5u+* �����K'x+a������1��FH����&��i���K5���P��RR�E2���
����_?���N����c��L���c]�6(����E3�~�M���������{d�����b���#�����u�X����!�����#�*��l~��^&��(cq=������Bh9�L[���L��0�J
���J����%���e��cv������	/r��F�:���i$���
4H�f���2R�#0���>�Mr��L��L�pb`o��l��rR7�\=���m�|g�4�>��s��(�a��"��xJ'!x�f<����L�M�����4�h�	�P�}V7y�	��d����C�h�F-���+Q��},�������8���-k���D������q�.�2�/��wG�/���T��jv|Wp�����c+����p���W)���6��p����;����w�A�w&��p���%���v���0��b�Z��J�Sr@L����������MK��7��=\�e%���q�*�����d��c.���fL�B�T����Le�q��F��asZ�E���g n���dj!�i��m�2��/�C�4Q���p	)�8�vOF9��lV!oW��w&~h
2�V�.���\��Zprm�[u�I�����`[�d�w�<@M�	�5�����Z�����	��g�n��&m���+�#Y�"l��D���;?H���67��%�����	Z9q�r�+��%�L�M���UJ�mX~gb��-���|,D������b)k��������Alw
��}��	����K<p9�3��}�.��S���uD��ky�#o��O�-�*f,�dYP�n�&�����Q�h������1��I�Z�o������8UjYp���$<��}f�6�M��w���{��n,���.a����w���\&���%�`I���z}�X��+g��&�]p ���8#�C�3��h��5�l��f�n�-�.���kg\y����~1���`�N2���g��O��V�
:�N��[.|P�����I�qH�:U���|�^�D�o�����p��@��	~��@(���YO�)�&�� �� �O�n���9cz*�V�����Z�!w���U��
���<!O��ziL����3>����}��lx �S���Y����2��O�S���3�gm�J���w&R�Z3��v���2�WmP
�0<����Jh"�P�������*#&3�L�^cnYO9�x`����X�R+[
j����"~W�������U��	%d�#'TT}h]���[}�A��>~�}&\yVf|������DM*�r+����ml�8�uSf5�������� �8����1�|���z�D�BA�(6�j�j^;c*Gc�V�X	q���k^N��P3����
�f�6J����`N��U��ww��Q3�yS�w��k�:o�Ek��GF�����CZ�*n�|�]L����a��L�2���q#�)�k�\�r��x����$!"��������f��#y���S���l��i����5u��������&R���?������{����O7��_J�~���v��R�����!��������G�W�6]��;]%JW�����H���X�Qf���?_��<�b)���u��`bJPHo��7>O���!/�~1��&�F��y$�/������v<o���|�&����Z2�|e\�3�%���']Z��L���W@Wf`���-c�v�=��N����6�~9������0M��^�A"�q/8��
Q�
��D�83�1�Wi��Cy�����(	�5u��4,��� �k�v�<��*H���A������Ayj{���~�8������&�����o��`�@K��]�}����
%���(h
�0(�-:nrq����Gd�K�ME�<�k�������G���w&��}������we���`�j���Z�X����*k��:�u1�ifA���Kx-�[Go�pfv
���Y>t
HoW(8���p&���%��0�����^�{����xW�C�]������������T~V"��f`)?f�
��`a��g(�����[��!���_2�>Jf����C�=�<d�71%5�t�,��N����8�fV|3c��P��6~k��i�K�4��L��R5�!Z����g�2���()��0�����J���#3��5���w��h��o&�,��5��T��
xU��[�VR"�������T1I.L�~s��)�P���HJ���)u��'�n���lv��gR���"t�I�L���`Qfz���R�5=!T��,xY�
T��,�~=
Y���g��b�e����C�����.	|Tz&�'�=i?��N�of��M?�e�~~���c�~<���_&�������yd8Hx&�<He�?1��.��	�w�WB��D�j�E��|
�7�eX~��I.�a*DW�n�~v�P���T�|�t�b��LX�����wK����9��������C�]�C�e,T�������G:��zi ��+_>Z��������|��L�� +��a���������;�g����oa )O2���c���9C��f������i��	��dzf>%�L\���u����@��Xb�����4)k~�pf�&���!#G���kO�]��Y�k1g��>	Gz%��z�$v�w+
�=lo�23�}xS�Zb��6'&�7��������/�0�g�<��-�$&Y�4�a;D�G�)S����#�z���A���i����#I� ���@���L�����w�>-���L�E�����$w0�(8�]�q���XI}��7�+����Gr��UV{�da,-���m���(�'�
LbG�u$��X��d���[�����{}�@������*��&��x�T�j���<�D�c^�P�7lLX�%�����{B�V�3��6��=vz�O��O���e4q-�p�}��z>��~yKc�/���a����RI��p�����_�i��c������R�!8�~3c;�(�����d�X>�`+1���99�T���_���	>����N/`K��������0Xe���k�N��\�M����+�m���Ho��%c�Xy����
��!dY�'DJ��=������:���N
\�������2���n��!�!������5����p�B�j%3Q&6:�0�!�XNW����K�����E�m���~���w��*��J���N�NM�lw���]�S"a��b������0����������3��n��iB�~
h��~89�L���P����2�uJ��=Ln��X���2p��2�q��FY���
n��0b@��ilzV��A����v��17G���� v���	 �v�����7�������|���ig�*����<V�O��������M����ea2�q�����c�L��O�q�:S�[8a��_M��&�2D'
t	�i:�=���(h&@���N�90s$��*~�=[ZS{���-z����3�_�������ku'8�R>�N)��'���6����|"2�.��;{�+Y�P����7������:�P"��]<�q5�b������AN�^&������@+l���%_/�:@
�q�zdf�UeZf%wr3��eV��F,��
|@p^gJP����?[�>�kd�y��/�=�r����T�eW�u�d7E����������3����N��(3,e������;�V_����jg-Q5���w�����1�4IS�h�g�
I)�3�qQ�����i�L WZK5��j\���Q������P���_���>R����W���t�o{�~���LU,��l������kp
S�?���V1��U���Erc[�t+4��g�K�O/�q;g��T0��������F�����d�Q�95��faPF������Na�0EY2p��6xe'�D)����0��������^s3S5����<��������}��m���h!>��k�J����^ap��
����jav������$���"N������y[�S����������qJ�������=���Wj�F3f�~Q���}j�m���%����d��b�wb%+�D���30�I�B�E�
�Q�,B?]�a����?0aI��%��R}���w"�1�������!u���g�Y�`������3�pobb��0����L��K��H[�G6��;M����<��	$�;r��/��/��&��]s�Q5���pIY���;��Mi.*+�����oH��'3n��8yK�>I\2F.���$0�|�C`�	y����
n���@2�'{��qsq��
g��E����e��������P�;������5�u��J,R��&g,r����#S,����>�Fn�G#<B!*$���IJ�{�x�n&Jd�1���W�3m� ���9i�`|��@�Q�����/��W�$���]ym~a�������7���6D/���)�-If[��]��=��SIf��rH�KX�I��d'\Z�j��	�e"*�w�|/���E/@4��4�]Tea 0Z�`����dB>�ss��&e�C��A����k0�O��l&��m��T��sq��S{��k��yR��1]�����^U���l_��?��@au�(��`������p�����8��t�L�A8Wf`�F��{�^�
�pOsE��s���(�����m]M��N7��~�`���%+B���>j}��������e�������W�7L��Z�z%�,�x��xs.�����2a���\�Z�]��N�E�O�JybX�s�cI`�7d�p��K`"���1�pL����j������"<:�?(�vD5�5�R��J`�B���������y��2�������DR���a��{�e�o�����;���.����G�	(Z���}��TgWZ�;��q��4?��D�d�1'��,L`�6�����lEU)gb"�0�d?'x��5�>&���/���}�k�#j�a~W
X���45�m��13��6�gK�A�!�0��i�[�2�=����[3�o=��Qw�������B�.]�r���D��al�@�._�y<a��X��1����/���`gJPiu&"C�a�d�������<3��������/���{��O��,"*�'a�������_��o�n`O5��������b������O�o������7�g�r�_�9�"4 ��
O��J��bS�hn�V��wd"������F���)��>�^1A@zh�2����>��1�b5My����k�wu�D��:��('������n���U������v-��������iU�h�(�����o�B�z�fg��U��p�� ����Twa,KW��o#>�y�K*���S�}l��^����D����ib�<ni�����h�6��LV��/���Q���U���2c�to�����.�(bMS��1�M�Ou��a'���_���.�}���R�i����E��~������a]���"O��F��+Mw����������c����k�;H4���>��I�`��w�!���:�l�Kp���@
'�?Ff3������������������z�|����6]m�U3,�U�t�N<��@�����D��mW�����W�k�z���y�W���}���|(]����r���"JW�\WD�����D�jo�jo��+�Q�zNW����k�(]m�&�p�<�L
�<l���
���,�D�*N��U�q���W���c�W��U����@��T�s)�9��\Ju�����{�+�tu*�����z�
���=_JW�2_K�����R����y�:��#i���R��Yb�R_��z-=t���(����Q������j*s��[sM�������^�\]�\�S���
%�U�?�8uV�q5uV�q�-WCQ�@�j(�h\����uV�q5uV�q5uV�q5uV�q���t(��WV�Y5��}�Zs]
E�Us\�����JWCQ�@����j(������\=rME�Us\ms�r�:�,W����b�����/�������f�����/�������b�����/�������b�����/�������b������l����9����0�j���W��?�����a�����W�2�K���T�R�<� ���������R�<� ��!qu*������|/e�@F�g>/yt3���q4�V	T�-�����a���Y�q�n&
1�G��>;�0T�!\��V��0/����a$X���9��p��c�v&F�
�����ee��K��+��~��v�[J�����71(Ba� �xj&eVgS-l\N��������8���]�i$U���'�[���p<�����83C�p��w�]D�P8\����V�$��t��[f���]J$0�=�Z6X��CK3$�A��3Ah��	v��V.�w%Z����Az�ws���s�o��z;O���A���O�^������]0D����g1��` �
�e���(� J�'�fe4���+s(��Z}���EX����c����h�� &�.�M���s�X�!�<���ab��G�7y:W�}�:��0~~��_��J���Kt`��<P�K�C�U&�xH��d|�UT��8a���/s�>�Gw�PX���K"bo�B��xE"��!$
�����zrQ��_�'�a��W���y��!�'����t�^�7���'�@g Q�����J��l��mX�%����sw}Y�~�V�T����X���MD�&��gm.��Z��)�8�H
�~1���C�t�|)������ �mf�d	�y��fT�w%�����)P��KOtyb1"������*���ph!0"2�,���q�����!AD���U,���n�������������i��U*p�O����/�}V��/�0B�gla/%�Q��n����Ox��(�~���,����1l�d�W�0��7����$Lc}zCNT�AXe0.Hb���b�v)�p3���2�H
Jq�RSf��9�?��3�F�aG ��t��?��t�����aaJj�&��8�|"2���?J�fQp�"�.	�H~��6��>L�D����~o|�|&�V��+��B%��w��^3���I@�JB��b���'���2A���>�_�2s/�aT��������/m�x!)�������d
�K/��Y�nD�����}Qm{(C�iVjiW
dJP�wH]��������b�E�C�8L��(����A�����wM��Q�����>A���������K�{�~E�_�h��Q���'i���
`{2L���K�k�Y���������If&J��rd5�Pl!`$"e
v8��r�S~������o�5�dP��q"^��-L�12�J��m/PD>�4����9���	m�xlN����n�gh �&�,b��M�����2
�"�ou����_7��������v�"��4�e,Q���>��}�S������p�A�<�����J(�3�7�����	��0N1
�
@e��w���D?�zD�v�1$�S���/Jc��^���x>��;~�-�������=�����VV1%(���b��A~�	}F)�1;kw7�.�V�7v���A��CR-LI����L��=�!�M's��l)�}�����m�X�3h%,/|�|<��cH�1J���X�p:xg8��)�M�����f�2�����w���w5��d��d����T��=��4X}��%�3�������;���Q��wc*i�����k8�'�����P��"3��:��l�S1�kI[��`\��x�YN����qa��]>�g^�M;�V
�0���0�}��f"�'�+�����F:��'�ItW&�9�>�����,\aT4j������=f�3���	S5_�����jrj�{�'����\� 'b�{m����dJP�Q|jg�*��=��2�vL�1�H��W�o���
�)��o�G���OD���S2�i����]/A�������}L�/�(#��MD���&�1
7h�/7���G����q>�1�z���`n@�	'�A���A���}WV���������#�<d0\���X�����F��wb�~��}a@R�JA_����~g;%����,D(��v�.y�
�8��Z�q���������?���E=#f�U��1�)anJ���u*T�	(����6D;4*����|!����/L(�.�Q��%}4\�'������g��U���09Y��+f����]	:�XIu�3fPI���ui���F���)+��VV���jc��L�3��6����=I��������-w(7�c�2�S�����}���P=)0d�e�-��`��L	�8^�=!�& a	'"��O�.*�N"��'�����v7��6�k]�i����S@pKmz�3�a-�����a,�&lV�W\�a�S��69�fE����(�X��9�7�]w,�.�q4�w��V��%��Mw����iO<?P!�'�"a�������b����2�@h����ck~�I�
�C�\���S����'j����X�1��E��c�9VR���<od�2t���L	
_����T9���0��h�}���a���X�:����|f��6��G�	��l&�$�q�/y�&��)��|�7(��L�=�}�gy~��Q�I�f`�>|W��pt�����:��M�AlG@1���#�e (zm)�����K����UN3'���[�7$����~�>�?l�OW��i?]����q5����c���we�6M�*�D	��x�����1����+c�l0��*xe�
K���
� 
"�3���.|�����+c�t
���_U	Q��I�3��BXY.�s�R�G��+�����;
\���1X����>�.C���7q��]E��#�$�1�t�����'$� ��H���U�[R�l�[�����5������]C�
����`��:xa
��	<���B��e<,�T������+c�|����JB	��a7}�rJx���	%l�d���x�X�P�����g9�P��$}�Z�z���A�.bi��Kt�.geL?������1���z'�-lbJP�$��Gz����3-������&v"���9+�dO�����5u��D���������qj��f�w�d�\�iQb��"J��_-8�<���}����(k����
��r�'LL	������a"�vec_$q��%�B��i��N)�s�t��)A�[,�lzb�/��(��I�(�����a���Y
GL	�TT+��US)|����4�09�f^�>>3g���4��w�s9u�1�mg�Gt����@�=�v���{��l����Cq���7�2n��v��)x��������
���d���/�j�1����5�x�1���FYA-�������
����bJPVc��6�&+�.����bc�m���>4�0�J�f�1�h��p�ke�.O����=@%�!���(?"o��������$���K��-w��@ji�^�GH#��_��gP�2��NE�
����	zM?9�[7.��7�����':�^�+q*�\@����U�(��AS�	����xr�������a�����z�c�%O�L�`j���o�����Q�K��G=�������:�=f�:�����pv������_�w���(��1+����h�#���NS�%5:���k p�*g"
0O�h>�07��I��#,��`��\b^��o2(�����_0�.��_1n(���l$j�#����_��k��On:��Rs��K�B���5uO��&��lKQgO��f��l��~W��O)L�VC�����w5���1�y����e,�IV�V<2���1�BA���u��?9{;l~��7W��l���3f&c���iz�6�L�L!:Q`��K�b�=�:���m�����5�0�5�O��)�5���SLKX���V�~1gg �a(J�L-�aWE�,[���#����c{�2��3�0�if3_����Y����B.���"Q�1��4��+fd���������"cC>�0����I	LDIM���"	����������i3�����j�����?�/���AU�(����Q=���0!��n�U�����@jX_pO1��OrOyB ���iO�t��LH��x\u������aqb4�7����&�_Y��n�:��1|�	rZ3�iR�?er(G1�V������0Q���~�����~x�:�D���r*<T!��P�bI���n6���f�Y�r���!�M���(70�>�,��#ifh���un^��<���a-����qa
��v3�d���w�5a�-��:l����
g���A�i0����F��"a���S��C��ki�U� N����d�n!�����I��'�e�����1u�`d��D�[/a(^d�:����]����n-�����!� 
 ��K7 ~a<������B^ALW�!4`y�M�A8!����3�8#pVv\��3�1������(�����R��R��u�\�h�����r��&��!�[~0�u+f�n�8d�`����]�+c�
n�:��s��B\�M%F�m�t��(��l;�xX�OH�(����%������������x6w��Q���'���%o��p^�a+*����r
K���X��X�I��G���'l��X��'^t�����w���w���z����s ��,�MA�������������/�7��`N��I�lv7/$�i������������c��������n�A ���v���e�V�WFl����DTxI�c���G!X���m~+�
;v���>k�v" ������w��K|���
�@����7�������"�(�*��W�����5���Hp��!w�	j
�N$�+����{@�kj��eka��O�ha��x-%})��u��-��)fd���]�������'n[B�EEl�Y���������c�����]�+����.�f�	L��u���@��%����\�&�L�b���Z��9
+�OgJK�gJ��8S2���L�?X�wc����{&2����@i�Y�2�G8��5P�a3��(�9S�3���|�o�t���qfc��A������9��4���
�O�w"�������8p���a��%��Nr�a�������V��?38�s�G:A��i������V|d�
5`l��V�@6�N�����S�5V!b��|�^����������j���#2�n:.�p����u�f��H�r���]\N��+)gMV����vJp�������'��D{��<z?�C��h������@ Sz��|��:�G��>ws�2�H�:�O�Y�/vi7����b���/
��)��s��I3�1�e	
JdS��3aE��_��/��q&b��Foynj����qe�;����VS������a��1�M��+��-�M�����`u��ut]g����|N+-����e�����~P�{�2X`���F�b��1 s}���T-\�(�\��7���+�\����&�Z����������}BL�B�������EE�4�.7OI�)���mGY�p�k.80MD�@��j���/������[��hB�.��;TK��i��7L@���"��W�H�}�~0V���3�I���,S�F�4��D��c�jf�$�|����_�	�q -��h-��_'6�]��Z~r�X�{|:������������]��������{�����}���@LQ����1�.�����O#��+MwT@�y�&Cod��W���*����1�����I)
�!g��v������C�~�i�RU���j�TZ�Ca�R�0�0�%��(�?Z��a4�~���#�#Q��u���w�2KPF������'S��.��0�Yu;������a+N�/F�0�n������P?���i/���=<k�%51�1
�7�r|����#�O���v�����X����r�[��;��������������������/� �?�x<_�`%m�[y�g�b�� 1���x�p'����s�(B�N��U���8���!D�v.����;S����u��@����LMI���F?>�JM�]&����U�vR3O��'������0���-xPw��N?�e�����H���������q����&��������a`�z:�E&��1�yg��-b	&n8Sn`�hbC�7�tB�Nn�6t��p�X��YT�|���5���]�����z�a��O��~|�A�z���jA����*�N��`�Z�LWp�Z�`47��F���o���L���sx�����;eL�,n�`9���a3�	��9h���9bC�~��x��w��u+�M��o���*6d���3����7�{����UA���J�����P���c����;������ ��}�jG�U��-=D�sd���<�a�D�Y�F���i�����Q���#�&/Z����}�,A����
5�	��1L%����������>1����<
��N�8�/e�-���`�Zy?��
g��2��xG(e����Q��"��/�"����q���7�`m������cXC7����70�I;��6v�s.o�B�>����i�-=�+��w���PR��b����PR�w�b7�������0����6����a�J���+�\��(��3n�W�yYZ����o-�t{%��n��4�@��Q#��
]�%�<^f�D?���&��wo����Qw���Lma7,�%��B����B��� ��V�k���3�d���x����r��0b�4��3!�{��[�q�pc� UC�k�oQ�i^���'l�����j�������
p����7a�]�h��q��D�g�Twaif	���!i�F����/��Mb�5�p����;�
_�r+�r��C��3!+<s�����NV����,�Q��~��������4�0����m�|4�b�;#3<����a7:�Y�[�����G���L��bhuq+���p�D���X/�.�.n�^���ycd�Ro��e��b�;�68
�W���+S1��Q���3�X���w�������z 8H#�:��x��[�oP�{�=~P���!�'6��53^��z��g������C%FxZ��`�6*
��Y�Mk�ff�UT��,��q���	�buO�23l�[C�I��I�G������� ���1���#������.��t�>3j3h@�����s@(��9����FNP*g�Sc�q��{&
��u����x�x����xR�]`n�az���3����`N���w���eY��W��	k�7���5�%�����<�z'FE�����t{�����uI��+��8W�Ae ��8�zY,���Z7��d3`����	��E���
�7qW&��@3�qo�r��v�������|��tGcr�]����}
���:P��F������i,���}�N72P�g���y7JD�V�k�3����W��#@q��������
�#7K�#k��
�+=bFh$05b���F�O�4�,`\�'��j
,[�����=�q�i���~g���L��A�ZS|����J��x2_tb���)g��5g���lL�R����G������=�>A�����0�"-�W�pQg��-�Fa���Xeor�9�t-����D����I�n����p;"����8~�L2��A��������B�������v����$ES���x���L|0��A�8�����p$�/�U�X�01�V�W|HD#D������x*��l��3Xs�{�{c����HK��w����;�P}C��7E>��HFa�����u��td��l���g�����������K8xV�5C���rA�s��A�0�7�.=��1L��oia�4����kbM��0�)��V	[u��x3����U��|p
r*���V�
�"��|��������k�IkX�tdM*�h:� n�
��zpt�fS�]4��$���d�(@2E^�U�hO�O�7�)�����-4�����|��zo��G��$�!���U�7Hv��}�C�Y�^���K��R�M�w�[T
����1���1��R���K��k�a��I��;q6���gmG���r`
�7���5L_�8R��+��'�@H�71V�%Ev}�(cxP����rj3��"����R�>U���jQW}��71���.Y��sK����������S�M>�XR�E���������5����R����d�e?kQ�Ci�k
��wd 6wj�k�	�]��1������8���s�\:Wg��`�|$��a���2��F����T�k�*����qe�	�e�����F\i���
{oH��a��0z���pb)����>�}�O������K^��Q �r]c�A�GT�t3�2
Tx|������J]lc���8P�����K��5�Vu=R����]F���Lb&jq���DH��w<B��g9����G�$]�3]�J����zrg�J�3��pW{��oz�L��\t5���&�t>�5����D&&���H��mXI$��^[��F���a���,��a����?���"@�<��W�<�q��������Vk�������td��(��<��!���\�H�E��?@"���Q�e9Pe{4BN���/9#������t���t�q��z��r�~0�t$��QU>�g�t>O���U������aX5;r9��t9c?�;SE����F�0��gM���Q��wB�4�i&��-v
�@jVf[#z',c���T���&�``���g#�6��Y�L������(S��v7t���
��[����#�{�F1���'VZ�p|���eH��Y�[��
V��}E��������/�����?X#w�����$���/f�u�~0����[��r����Fc��Zw�E�������������A!��p�je�<f�{&
�U�co���q`KX�#�������-K��\$��o#�i�<��KK@���&������2`C}���p�t�9��TX�M�E�S��t��Q�����,-����(�#�V�
�[�b�\B��*X��J��OY�;��ks��E�Ux��/�q&�OGM��R�)O����Rn�OL�J�4���EI�	lP[?.����]:��w����.�[p�">i�M��3@f��~���`r��Z�5i���x�����O�4�B�z<:+%�P1��l����
^��<�Xp%XV��8��qK�H��"�G�S�\
U�pE��Fq��K��b�+�N�@�+z�2��NOS��i� o�����ngN�g)���;Z�N��}Bt��si�
0�����?����j��
����u�d\G� ��[T����R�x����^��2�{���[�.8� �!X��f��������l2nr�j��
�����p=@����D�Pmq�����:Z%2��H?�.K62\�?�g$��
R"��:$2aNo�)90���@���Y �]qp�����3���S��afB��t.{��(�:1��p� �$��!������S�c`Jb�����b�����>��/�
fM,9A����4a
'�}b8?����/��3��W����M������T��S�&&{�����c~�NB4q�=�������I��p��'�+�/��@g��$h�!�����6&�''o\��G�4�w���X<n.�xD����@,�I`���tfZ��	|(hzyb;�2�S��v��]����;���,a���#�~0>5Q1�����	g45ap�dN��NX	�h�	��� ����ML�PP��'�+L���;���"�eb"�cu��{=���x���*P^���\%*W����
�W-�x^%*Wm�}^B����u��Pf]U�u5���^f^�2�����Qf^�2�j�YWUf]��W�"3C��UGqy��P&�,~�Q&6������5It�C�� c��:�2�����B(�NR�c��WW�����dc��?����������x�Y��m_�s�����g��?}�__������������/���o6d��S%�����o����������?c���_��w�Qn�����6���}e�1����1��c�6�b�0���Z�x��N<��T�����g}��X��pk[|��}���B�J%����<�6~P?��q��y\��;���y0��C0�2J��`cx�OpH�����������8B���O�����i����T��������dC2U��
!�AH<A�L������'�����-�@������G���;2���*�B(�;2�-�W�� Dwy�x�G���@������w0�Y�2�Xp�?>������0h������������]�?%A������w�����L�����NJ���a��"q��x�edd�!�����V%EgG�[���G=��?t�??\���nL��aJ�'f�'�3����������3c�|��O��jHH�|�HT�R���%V���?@���M[qjs���}O���"f	*o��p"�������l�?��g���O�����
�S]��uf	�T�2���O���
�@qQ�^����|�x�=�K/K���k�8������'�T���f���&�����h����o4F	n~��?N�Ac*���G��<�dfN-tx�-���[�,�-��g�EaN��/E��CF��Jh*�Q�7p������(�s>���9qD�^����=�L���Mo@8B�d^g��Nm�3l�'�E����f���A���
�12���q���ub�7p������T�pM_�_��n�Z��,'�g�v�x�F��61��{�N�*�������F�S��	�3#�<Z���}��g
���/���Qkb�K��y�:~����O������G��e_	�a�Bm+�R�������J��12�Xrh��$�ah1q~���H��oP��3���o���������5�z���Y^v�R�"�tGc�v[��R{�Wt����C�8���A��W��N6��v�O�A{�W�D����k q�8��s�a7	��3��Q�_��`��W��$g�B��L���������yM���u������<�7=���]����_���T������{�����}OL�0�.����Z�23(#��T�
�oe�>vPAV����3S`~T��J(�y�J�����I��	���A����#�E�_<
(��>�qt��������$P�Y�L��P�?E2�KB����f����|J�_�LU����O5��������Z����9�IDf�F,���'���:����-:������ A!+����<y�`�CB��BW�3P���[�e�Y�=�)�����^�B6	5��E�h�jPh�O"!��Qe%�e��(����dB�a7��8�C�����aw���2P=ml%�*
�{�+"������$������<v z��IZ�'z���w`8p�++��( ���f�X62:���J�^P"����w$
���O���]>(���5���I��h�{�D�Ya4�M�yQ}�yhhj�['��*��z.T`��(���*�����,�mdPP� w{D����������B����H���]Yx�a
�k ,]�L�$<���72�p�t}��;�K����)%N~�K<���d��K��������y�����C-���A)|�.p�����&�8|{��O�Ee���iK���4\a��&���2�?~�z�����\t��q�����r}O��}�n�����@���BmJs�O�^&"��S1R��������A���q���M�����pn|B�����t0`4�����["�=	�Bn7�tH��>u����|�����!)�BP����L���0��5������EP�q�<2�#\/����q_�_��z����G��'�B���������a���v�B�KN�d*��v����EbrD��b�8������3!X�
7��������{_~�%ed�����rQ9���[�A���7�������h�/�djb,I{���?x���u�la���L9Q���*Xc���Ph��s�9��g�_���^��g��h�q��CUq@<���:1��>&��S��BG����zz��S��93���1�
��y�:��Y1������1����� ��Zl��L�J�����0�{=�����y�S*��!@|�� ����o%�C���|��s�4�ZLT�������sb*F�wn��\��G=�sR�=�"
�8&�xR�
���D��FR������~�=���F�Pz�?!�x_k���ZA���uf_��V�|���d ��N<���
�C��B����s5���d�G�{&*D4�����_�-��;���fLcU��X����1{eX�4�������$�����~�B�*g����i�|�4����8�g��<�;Y�x��[z3�#����\�Z�(�k��p�t)Xw�;u�;S���'��U�s#q"��Qc����mV�;����2������}N]�U��������;����X
i���G���N���1��`��>�����0�l��_��%R��r�;�}X�6Nb��k*%���0����z��#��
�S����ef9������9|gr�����>��$F���d<CKL*A��	{��[FI��"j��o[B�S'�B3���{�H�t�(��|�F�@�<�{�u|/?�b�{	����0�)���h�����O�{}�����	t��R9����;Op������R�-�v��I�.t���]HS��n9�C}�I�wf\&z���s��l"u�FDl��\�\s�nQD�tu�S��D,��06��<�HT��M&��l
�����^�W��@%��2��{D�5�g�V{m����Qp�����MDB����|��YE,�f@���G��F{sGl��;���f���+�T0���
�m�=�3�������On�$��63FO�4qyh++� P
+�T���_]1�5��*��r��^�(�-�3���;S����"�~0z�2�`���j"
Aa�+
i{����h<�j�A��z��-�����O�	�����#�)M��9u�����K"F|���lg�Ec�g�ce�)�u$b���	HULLp����Dm����4g�f��}�st�-�r������B�}�<�o�� ��'Q�0�'�d�g�'�����mX�01�fC��'WeU�(a�����x����<8��{"`K&.��E�9��?�O���s��Lb�q�JV�\
��Y�2��� sE��k=}���4L������1|�	8�`
�
��xq� �YNn&[����4_?��^z:��:y�^K�i��	`�#�������p=b�?K��a�gsn�k)�'�49�7�J�{)S�dSw�U3I�=�Y�8P����*�a��rxs�����}W	I�(#j`�V��U��XP�]�&:����� �Z}��C��,A��^������L)>�T�(*�I����-SF�m`��>,`{����Y�g�0���2xr 8b4��������/�a%`d�c���k�����������q��t��	)��@����e�t��:�6y^M�����3Ms���8(�b����C=��{�������Sp�2�&�pY]w��KO�a�v�H;rI6��YH(j��������`M)�N!f���-���!3S�!(����L��������\���ib3;��m�U��7�[�we��R��
�oZV���ST�a�];�{�@�u���<��;��+?��H�`����;��=�T+����N�&f!����{�K$�������dM?^^|M"|�Vg��5�n\�$fn������V�m:1�����h<��~��f���
/��Y����k��~|V���,�*�?�U*�G��fFx����T��'��!������Bs�a�=ZI����G����������_@��09�K�|���R5�TUU����3���6\��p[{��3f��j���neQ�[	92#ae|��a�D@/^��
����g��'�h9�>#���A���J"f	�6����a+��3���v���M~�sp��Dx�n� �l ��1<l���23����c���4��Ft�[��8yr����Yx���Z��`�c?����1������Z�~��U��~���n����9V���7\!���
���5Z;��wbX��.hF�G�gf�x��C8!�������m=
h�(b�?���
��=������`#���������{���Aadq WB;��>5�5���f�ga���S��#��cn�G�h����Kvf��7���!�S$�I�<��� ���>E4�hJ��M�.3c��A�7�1�����(��K�����d�Y�7V���0w����IQ���~D���)an������rzo�r���M��#u�P�c���=1\�V$v������Pf��o� e�Sz�|0h��![�+.���TY!� H���L�p@Tw��E�
��s'm��O�Y 4��CcV|&������X���GV$��x:'�}���}�Li�s�X�0E�N�f�g��S�n<�r�f-�n��)�p��"��������O>���e �=�I�N8J�	���>g.�/.����H������L�� &DG�q�d]��/?��{�r`(���K'�#�����Q�LW�WS?�������HJ$bc>����wU����k���T���E[9�'bq��N<[��U�������
��u?C�E�W�+p��$��ri������]s�`��Ko���s@*.��	~��*������wW�I�:N��.+�rN�z�G���
������v�3�y�.>��(���7���_f�E��{	F:�.�`��b�n��=1e��&�6�P�$��8�R&f	*4�NkO����T�G��Bh[�$���g)���L����x������i�M9{�����fj���y��Eo:{=n�E!���h>���2{��x��'��������&Uq�it���
<O����u3�o�.��V^23V���M@b_^-f	*o�:��X,���~O���
�y*�jef����e�.���2��I��X[u#�%��Y&���w��a(���/���]X������D�����.J�!�����B�@�@�g����J�oO���8U�A���4��|��S�����.���S��#�}��m��+�5S�ww���5,�c�;-1��K
���E�Wf��3:�ut��y�A,xbM�u�R��)}<�������(7}�1�����R�LV�zM�I��,A�[.�<RS�Q��	�$`�pVmKs����n?�|��`�if)_9?V�R�p��0iu0���E�
\}1(�3@&��OI�UExt�?�@�k��Z���d��R2�c/�]��O�
<����m��
1�i�����#��$sV��2�L6�������q��2�K���������v/hSb6�����T�s�A	�� Db��m�xb�L�}�3~�QhKK�Y�W�D�� u�QdIx���
\y���+:^��g<K00u����}2������2:����0������K�3���b��F������l��:*�������x�c�K�R!F����V4}$h�0�:���D�Y+�k�BD38�����G�n�z�d
�����v$X$|�b3�b�w&���	��.N;�3l��qE3�������c���TE����cf3��K�
��p�/�I���]��������BY�%l�#���I��P��@}G�(�����2psU���"���)�������D�'���"��t@.#x!��}��p�����8]��MO(`�&=G|F� 	�x�����?��K0�ZO�;l��M4��V�����'*Y�e�4�#%��aP�S7v����D�y��TU�0�f PEH�n��a�;�{��b"�}������H��Aeo�QeH�B��� ������}���f��)�41���E_�L��
�U�Z�2�����>h��T��������2�w�Os�.35��7��Q<���P�@Z��Z.�����h,�w�����OeJ=!�k���E��?=�#��^Q�
�(�����h����<���_1A�7,���sbq�04��
�����/���0���;05��V��]���I�|�7:���M?(�2�H����B^Y��]����/�G�s,*p�c3�
(W��.����`0�a2���=���1x�@Z�
��S5g�zg� ����#�.�����M+����ps���D��.n���1�x�X�����_0)�Q��U����t�����;L��1r���j�N�o��V��P)gFQ�e ��=��D���D������T{j��/DD��]2���������p+��*��x�g�DL�-`a���{�
�K��V��X���Y
^��2GY{���',�Z@��G!�85*F�}����1����[*_���T���[�Y���/	�X��u�.���@����9q�Ius���"(�)���������w��b��$�7��o��7X�������'f�l��G�L�}U���������!�b`;��K�j�~c �[�G�<��&y�>�"L8bE������2pe![����]��[HD,�d�\���������g�X���;:����h����)����\�b�l�Wz" W�9y�=2}D��~�	r>J���f��>I\R���L�=,'l�5,�����#��@K�=z�����J�Hf�����7�Nky/P!�Na���-�����N9�c�[�A:}0$�c�����p0������lhb2�������������o+�@����1x�����\K�E��6\�$��@���0��1]60���f+��&���;�@@��|b1��Ck~��LP����_'g����j(@\���,V����G�L�2^�S?��i�`���->H�4B��h�������n��WD��;�>]����T*�����������p�l%����bO�!�]Z��vkWQL�Q/ ���v)���w���kL����$�qg�b�`�#��X`�K�@T���6O�=1K��S���;�X�Lm.Y�����������G����>�x��U�IE���'+��`rMI;u�kg�Tf���9$�wVl�N������5y((x���;�����9 MU0Y����[���u���uNbP/P{�����O����&�����������aZwS�&�Z�|&�>���2���%7>2i�&��nj���D���b���D��lN���b�_>�-��TfY 1�;B���8:!|'�_�~��k�BP�����M�L�p���]*�Z�n��rdd�- �M���P��!����
D��w���;�U����g��]�Z����m��@�dM��Ta����B��@��"��]�	���Un�A���2�+=d�|��!u�W�jn��!�����������=5d�����������?_?���?.m��?�>���bJ��B*M\��Z����^��p��w�JT�Z���
dW#�%r�������62�9�h��8���4�����Zh��kz���w��c��[b��y�����'=�S��cc���"g��q<}��,��0����g����Kb�����\�d��F�:*��>61(��s����������u}k�?�+��|�~��y�T%'I��V���Y�d����gB����4��8�C���Y�B��������������'���i)Y���a;�#�N9=W�������QPb�'
��u*���<g�JygBp�X�|�
��#���T��Y\1��/�eu�3�8g�u���`����yLTW�~f���`�U��g_[�� ��QS���A<}jb�8�eUn�G'`D���Iad��Q6y��,���q�cK��&&������E��Z^�O�C�a!O�~F��
O�_�����V���8����������a���}O�H�7y�4���j>��k��k>�(M�W		Mj�<tXK(��1��EUb����G&T�lWj�s��6��Ff)MM
8I���
p�����71���)Z�D�������������z�Zj!\�1���8'
�imP�#c�O����y�����h�S��kA��"!���������c���1%�#���O���j�ezpb�|q_Ij�LE81���z����2����)����R�����pb 4z"������'&$��p�R�D��� �%T58]	�<Y'u �%U�G�Q�q�kU�#��[�&�����������]
^~��W=��zmb
5x5���zpb� %Y�C!�D@)�K��C	�X���V�g������#���{@��=��+6��qx�vIHfq*Z*p�>��'T�@������3��|(Y�w�;3H�������Z��6���p���BN$�(�k��I3p�������]��`���s�7yZ���vV3p����������F9[�j�]����O������v`%�pD�k?T��o N�gI;����F&R�o�O���[�?�;\D~�L��������^Kv6����P"�iA�f�6,O�r�,(d�a�;1�1�fD����V�����P����|+@��{�����������A-�.�G��X����[?�i����������	Z���w��F�0�t���K�z�lg_�)���=V�����6�=�k�b|�5������6�:c���I��k�xb�B�������#e�0�}���mS���#�A�9�_4O�0?1&�R�����bd�bU��������^��D�Vu#���di�T�NYq���h�0�cr7�{�v�x�	���:'�I��`�z�����*��q0+����
��b����Z�A���t����X��L$�=�����I1#/�5T����8�VK��$n�t?oCtv5%����_�[�n����i��yit��U�/N��h��9�;���3���p���I�����p�1������"e����_2k�%,tq��!?dA"���/��{�6��#���<�iG�YL��/
��>�x��3re,I�>&������N������G2�� �����#��w�N#���kl�d���9�XS�J`i�Q!s�>\�c��l�.N����R%~
V{��?���)��3c����0���
}x>������>�3���|$������F����2�l��f:�J��:������z��>�Q}����,�*�d�[�j�}(+S_]�6��`��#����
8�
TTR�����&dI���������JQo�vmdPF��l���'���AD'y�}��2��/@�EL^�t���
3c��]��U���J	�t�{l
Z��)`�~��/%��21���L�%���lI��NB�����T��%��76�r�U�~���r�_^��Tl&����A�$����dT��<�<���A�W�C6���M�6w��`��5?w��-*T�
h�A�e�Ja�DH��	���$*�$�<�1������s����Q*B�?��5���V#k"<[��GG��2'�����8���~�����(�,��|$h��gT�L�9�M� �on��r#�l|�r���}��eh�)~H������#e����n�<�gA&�#	���x^��wh4��d���ji�.z�g�Lb�/k��?"�����_���:�3����]~1�:�����VqT��
4�TRq��A�F9��^�~�����rE �qt$84#q����u���ex�����E|u+�f��3���W���0�~F��<���
�<�U��7��#���<�hb�Vk��&v���k�����
j2URm^��nx�M�����c8f�o&����j��Q�&�.��i���>��MS�
9
��-�����M��6Mi�t��w�F����bN�����i���7�������0�c9}��lJ\?R�{o�;��Pa����"�.3���f����cN(�n&��Km��srI����;���)$�x��1|F��)g�0;��H��2vv�=,�-�zc���H��l@{��
�2x���iG����:�p�W�w������;W	2^�_(WbW��76��vw��D,������m�S�����A���}OyR���������3�+�x��u�v�[����Y���@�o�������p����)-�:�x����
���XO?�cd}i�'������d!2~�d�)��232��P|����g'�����2S0�z>G���]�l�p�pAXR�G�q���(6�s��U=2�E���s9���3�-��$�,:f�9��C�%���y���{=�d�����q�gt+�B��)��[�X����u�O*s��/��|r�bn��1��8���hO�X�1��JU���D$�y��.��@�!�������a ��m���h��B���r��#��[n����0V���� 1����=z#���|��}�]�SH�3�������O7023�n4��������G��,���r�!9�x���/�M�e���m;3��2���{a�W03������� >n�p"z"R�Ob~���J-��xc��>���j�Y�����uR�D��U�L/�����~r��?$�����w _\wz��{f�� [��b�w��a�e�{����*YU����u*��rd��rq7-/��'�}jhK�������k����'�B�vY]�=��p��_[5Q{0���=��,$.b����8\�L�3���B�%AD���Q(�;j���"5��g�j����D�QCY�xV��S�->qA����������S��Z�D@Y���[?[s��
^��+��1�cM3c����F�����B��0��0EFb��E����.41hk[��M�m1�A��r�R���@dS�5�����i�T��>3���
�?�6i�E������"��f���O���+���{&}AB�#^;Yn��.�e������u���w�����2�(I!P����������JA���*�'�od$	��\Of1kn�m�x\oA�)����|��s�U�J��J��"�
�L�m?��W�b��~�����Z����M���&��,��U�}�Z=����s5�,w%�}������
{��[���G���0K!0,7�Q�Z�83?8���x��+T������c��Ac�����5��Te.������&�Q�Tq�l?�>(A>V:�t�*;�
�=2E����tb�d�����Xq�-y��h�tL���6��)GL0c�<	���2��UGsC��W�p��p��@��s�r������p3qE�"�T�����p��~�k��2+��a
t::2�|��;WUO����1���RzE���v�}q�7�7+�����e ��d��������#��c�
��G�\_��_�gO��';����j��=��r���%9��}��`�O��
X�h����O�5��'��S�
?<~b��QE��yp6��V&���������_�=���1�
������q~6&���n���?�}�����r�tk�h?���
��6^����t�2����2�Q�e��|��2a�l�F�e�r�����5^>���y��m�d�|<������m��M��Pk���:�a^��p��\~�����������s�|N���R	��}�TB\>�"�D)������@��]e��\E�6�2�W�)��JT��[�
T����*P�:��Oe�C��T���{�,X��{�����Pp�z�v������}��c�>_�\oc��T��w�>�(zg�"�E5�A�	K���{M�w�a�{P,���6��"kC���h��V*Q�:Hq������	�%b.Y���5`}P�u^�>(�����C��z(�A������.����e��C��<��r�y^�>���~L����C�=�o��6�_j�A���u������:~��y=������5�_�y^?���P�����������=�(}�M��1)t�/�����������7sBW�bM��_�	]��-��1%t�/������������3�W�fE��_�]��
��1!t�/��N�kfG��2��W��M"���-
�ZM�4 �jx����E��W�2���}(U�J5X�������{�><`^/C1 �z������L-3��M���O�~^�3�=0��'�T�}&����9}���`[��
��)��X��>�^%��T0��mCGFx���w�wHe�r�?�����?8�(��]�M��f��O�0��3y���|{�[���q,�V
5�R�'�V���1GpV����K���`L��w���%U�����)y��p+�IOcx��qd*�4��o�(����`�2;)�AI,�����(�}��:�g�	��������]Ry�@P~�������%�����-�����o��ak%�������Ab�������bx4G��!�WE�?����
���,�\��Ib��d�P��G������x� ����;���DY;I��1�.y��sN=�LJ,'*+vy�L�+�bx����a��Nl�!.��=�;&s6%��@@���Rt8i�`�4+��
N�����6�!7BJ�+�EDiS��o���O�bW���8�k8^Q({	�D���5�:��~B�p�������8I�l�}��{�vt�����wZ�/g0~�x�����6�������ss}i����*U�%��I�iQ �Yz����h���w��"-�����n���`���6���`��rQ�H,SB�k��)��gJet�n��_������2xwvZ�}un]���8C��PO'���0����	qh����T������}�lzT�=$�2�lA�5���1m���'�A��/�}V���0�+Tl��^�u"bq����g��G��{wQ����^62�-?Q���B`�����`6�#���y��� l2�
����K��"�v)���v��LL)��S�ve?��gk^��3�_/�e�O�[���:��&f)m�K}9�/�
i85�)0"� �&����/��_R@�~�G!�T@q���|�O��
���,U0����z�L��]���������|�2@�;o���y?��'f�
�JN�a����*���/OW.f	J�qj�C�xi3��� gj��f!\��j;B�L;��zOq
��������4��]�9�����/.I}?�2��a�����>Ge�O@w=�#lOap|��������|\543���:�N1xg�X9�^a|�Z�C�����~��L���R��)�6l60M�6,��y��]~;�{�J���O�5���!QLc��!u�S�`�C����w �HPy"~�i ����L�C�`��S>zl��^�34�
U"1�T����>��QFA���;��������`��Q!�����gq~� N�7[Su���n��U]3�����y��_�P�>�="H"���'��8-D�[r�,����z�nzD�v\,�����/I����������~����������c��}ig��%(����=�|���R�c����=v�?�������������|��D�������L6��sM�[E�N
�����U�0������!�b<��#����K�'Bp�(��fqby��*���%(�;�#����0�Z�t���j"1���������D�|`��������/w�Qyw���Q��w��<�S�n��fI�m��0�`8;Ee��:�������%((������#���3����O���I�[��l�3��o��a8��3�1��^�\�M�v��h@����=�����}������)�b�
��Q+�#k�����JA��6`����I&B�^+!C�{o	����kc����8�U���9 w��^��p|��a����3!C����	��E!��2|kv����A1KP�������@�xl�b��NH�|���x�+������C�DyDn ��x!q�!y
�K��
GV
�F�n�L�T`d�����N������������Uu-�o!(������9d0B���X��=�M|c��;0�
�
��8 i�(�OX��}�A�JJom���P ���]���D���Q��q�8����&8T�C�5�{���E��
���}����A���29m���F���
h���
�J���g?2�p�V_�Gr�;�Gs��H����M%x\�!<���}�L�Z�����T�E��=ti�����n�,3��VV���j9�V&|�J�����B�
�V������b����;��F���,����g���>[yO��2�W��(�V��($����i1`�%\�*�h�\%��O#2�30����vnT��5/�k����4'f�%<��V���<3��e�
x���;'E�H��#��]f���#��f���04����X~n{��yQ�%��-wx-9VPs��[[���{�,�����NZ���yvbW��	f��H8�f�����<��/��p�Y����
����[��ODB%F1a�p7G�J�:���0e�w��Y�����_����������O�L�+�y�]���	Q&�
������f#�g��q�/E���)���!��s�L����Q��c5�6)�����b#��s�,��	��7�����o�#�`f (z�w����D�w���qby�Mh�Y~�V�?m��C�P��a@���-y5��u�kRt��$�f����A,�<��r�>�J��xf��tj{�����g��\w!�u4{������������-O<3KC��;O�I��W�Q��I[O�;V������+YBj�����yu�N(�eb�5u/�?U�N�7���w����U�DB����~�	��]q���OR� R�U� ��V*a"�����v�
�aA�� ��u��,l�:8���D$��L��*x X����x�^�����)J8�$���v��1,�T��v�{*����R���z�
��E2rn�~;�@w]+Q�T
��(�P����������p�CkSF�+i��0{�\��=��S�����<u����n���Y@ ������1��*8��?p����p�����L����#��������gO�G�$�����c�[�}�����nPEY�
D��g���f�C���x�\wf���T23��'^@�e��f���M���9b���,A�[�sx�_R�,�I�-���l3c��%1��OH��G����4K���g�>d�������k��W���*�����T_s�[����D#�xGF%{��a��!�,���`������g;fnn<����L6�NQ���O*c���Q�]w� �h8t
�+�X0r�|�� �����z���&���p��%(�1
K�A�jP��*8�!�����3x[�j�C��1�W57i�9Z�B8�����>.O����hGn�p�l������vikh��Y������	Yk�(�����~��T@t���|p�,�~��~gf�����K�u��I��cf�x��F;��Q��!?��'��%����q��:���WOD�������A���=1��U;�V�NK�f ����!`�h�EWt���&��8ZN#c�/���;��?m�.W����\��V�?��]=��S�0f}0��`7R�,���w��@�����X���F�d�\d����FX& ���?9�<��dP�7m�{�_0����o1n(���l$j�V�/�e�������S�Rs�X]�&�|�\������ca���+�w��j=�{&�Ka"5������X������?1]XX��X&S��r��xdX�c���V�.�c�b �L��ao�����Ft��`�����6�~�6�H�L!:Q`������{�u��G�X{iYb��f&1CS�2<QN�"��)�W��0W�~0��Xm��I����1�����Cz9��:��CS��|l�i'#Sc�f6�'����$V����~������Z<��'<2�kc��}:S�����;f���sP�XJS���$�?�����	A������T#6������J-T�e��������	��wS�J��T�3M_��m#���%(#����=<5	���5��x%Tw���a�|j�F�_�z	7y�d�jb�����a�	��)�V��������`6�&:[���T3)����@�l�Q���r&��I,��&�����I3��g���:3�^���90��z���P����Cl^������A���j��:�N�I������$&�SKp�M���l!���na-$���q�C��%U(�w���v�l��2���Ch�p+��.rj,
�����N�f�(�������'����L����/a����Q��Z� ��y��p���q�a�UL�ILZ~����|F�����#��z��h��`�/*q�5��T��`��@��@�'��@�{�����1����]\sPnp��xl��
9��co�tgf�����;�q`0��#sn@�T#��H�$��� �������`1������'?�0�\
��{4��b\}"�E�,��{x����00��u�����*�V��4@����7sF��u]��8����R���c�����3|1"��w��x!b��M��J�}�Ab���J�2���5'��@`�����4���!����h#�h�SK���.2��[b�?:T2�|������������c�@;5����|(��3%���&�h���U�����^yB�.����xV	��s�{�h�1��K^v����
o��������O�JyWl��������Q������u������Q�p,����r�����HQ6"jLA82��5�BK����6�FR����#�W�b�|�/8�O���Bin�������D���PQ��P=���B�QFKF���t��xu�{��C5����C5��?�Y���P�?9(�wy�����|" #B�d8�Z����$$4�H���Jn.�j	��9�6�hM�6?�B��"	�'�/�H��wu&��a�L��<��q���3���@W�&�XO��k&,�y?8�
��@s�a�2�V<B�+qd�*5j4�a���=���@�v��]�=�����t�|�����
uW(����v��M�[�3E�1�1�cO�wf�6����B�A���pg�t�P�1R\��(��?���� �F��BB���^`�?S�Z���w��
�p�����+��Q(��2�	��h!�����VY�Z���2�D9��-��7V�I�����%����lRr��=3(�/�s�i!�wqfq�U ����5�In?D�����"�S�>��?<M�i����2�+�urk\����V��3b_s����nK�S�-wY�"=��M�O`���D4>z%�cFj ������u�W����������'�
�����_���Nh<���Y��4�A\2H1s�|r8U�'u:fd�}+G
-r�ff~�Fk��p#b���!j��]g��"��S83��w_��I'�rF��*;_A��w��>i���>���BM3�Z�\���K�&��������&�Jc7���-++���$��eDKtB�&�������x�K3��W�0�d�L��&�V{��D�@��l�x��<
�&�q�=�5��1��G�[�$�������IS9��A�
����*"1V[��=#�t�N^)
�G�/��o���71<��^fs���Q������C}`�MZM����8�������jtrS�����v����vs���r�&�-��y��>(�����`,o�VS��]������]	����n�b�g�K��S�}P |?�u-$���[v'�r��d�s|��Of	*o������t���(|����J��ZDt��Wt�@��������p1KPl`|3��V��j d�8��x������V�?�_M�Y+�`�u%��p|�;���7���h�L
�d\6����/3�����[|����I��X��7`|gB����;�Zf
��+1wQ�h�.00=N�g��ET��Y)���+1	7q�b����b'>�3��CG�����*p��L?�qf\��G���&T�������?��g�"�;	���``��O$�
jo�z
���S�-~P�T����J:F�������r�(.�]>����t#�j��g%=���K*+��8��PP���0��4�w�����
q�[=u��\�=��NG]�e�F
��9������W<����V:9m�p��T~Z��h�-�������T+xp?���8&�&&��`gS�����5v���b�F^;e)�"9�q�fRV�C�����%U�V2�%�"t??�D�R�@�����[��U96U����x�������,�5�hD8�Xg����7Q�:q�I��YL~�G��h����!��qK����E�A�L\!�|
������a�$��s����=�}�z�.���C��|'���B�����>'��9����g��E�$�Y�������G�>��Z]01�:9��_�v�E��
�C�)~�S�����Z�~��&����5:	F��7Q����b���"��7N5w����8�i�8�v��}X�~0��|��n�j���&���[���f�5����# =��7���)7���SQ�{b���T��0`;�o���48���7B��	?T�����Dz�i�4�Y:
���0�bzm p<ko�C-Ls�0��
��n�Sq�%���t�������k�K}�'�?Rl������4w*�	ap�3E|���^pqjZY;3-|���t��i��j��l_k�L���n����;��C�(N�'��C��'!F{�G�F���`���^�azdz��I���5��$��=XA��xNT�a���lb�
���K�j����������
q��l�3[�-b��P��x���l#��;8�Z�k�s�������-Q=�l/y(`_1��s��@�*K?At�)`;8��������F��R�=<�2�����BU�	b��4��c�����0z�9������AF
�`!,�M"*�D�����g��|��D�l�J��������
�s�V�.���!zkk��w"��OO������Y�?�)��C�����������fQd��2p����n+=L."�~Rl�3�����"�S��m�O �Y�����������1X����� 
�s��2R�Z��`Gp�	����r��
a�|j�v6jq�L���+_?id���$�����x�"���Jf����~bV��QNT���b_�]��o��E��|�!J�l!��,����8�!������|�`GzKb�k��`g��U�K&����T�����Y��J!rb�.���9��{p�0��V$���~�<	�%.�}gw�.�Hqd8���J���SFF��CgD��1�z����q�����n�K��p�ds��T�����<���lN�8��^�0L�9��B�����C�qK=~1��3��L�|�B��d���2s��0 �~0��36p������Ji�%����tF$��bM�Q���*^YY�s9�f���7�������}H�duK�l,F�d$V���1����9[>9@�T�M�[�y`d�,�!���� <�cU��\�;���()x+$�4����>d���f����L���I������E[����W/M������$e�<����+�&�1*$��I����J�[����E#f6P�����G�!:���P(����4��
:�����b���j���Hb���������]�,�(Z�j���g,�������P�}01
U�M3��\���Q�r,��	*�����&�5�>x���i@�T�xp!d�pX	w�pj���v������LSe���G�y�(�_��9%�W�u�nS:b���>=�:v���*����g��t�@Tuzrf����f�v|T]�����	Ezh�� �Ez����'�JQ��v�&]
ST�H�U��J��|�Z�*=`��N<s����V�ZOd/�t c�nR����<��L��]�Nr���;51K!\��[�*�I'
����K����hRrE��J�:�L�R��x���C�+4��WsE��	�6j������O�\<�t��
�T��\�~R,��6��� :X4�D�&����VZt�GS ���T���H|��JO�w��w`�����KOm�������S�o�Z�L���T��T�J����7��,����:w����>���{P���2f�����U�����Z����z$������z#��Z�0��|.�aE�B9�.�3�aZ��&](�UWp���t�-:�?U���>
%Q2��S�>�H�	�pW�����P�}�9���f-d%��wn�0S���C��)���OW����B�Z�+_�����
TxO)����$LxO[�	�������_��>�O���?����a�B��I
�����
�u���.�Z<zP����Z�\+3u��S#U=���u���r��^��~���[�S��q�x���>e�����+����|%#|k�D��D�07;O���I�)�C��E��+}�J���z��q��e�jZ9/(�^]'1�����yf����w���g���|����$�����8���a(���������gV�Q7j�F{�!M�"�����,H��=|�h��J�� ��9	q��s2
���`��k���+7ij� �|e<�qT�q�9)�m.����>/-��w���������J~�i�EW���|�qq�\��i���(t�2U�nQe�S���e�����
'�7>3A[�|�T6G=Q0�.v�	�Z���U"�jK&�-%��7���c_��m9�2�)�?8d^#�8�����8h�f�B~����Rb�hF0���{�n�g��B�G#�}�L!����j]��Hw-'$�&���Yo�H��W�� �l� ��"+a��������+(�x�^�5�d�aI+����DYw���IE�mb����dKW.�
��YTq��cs��Dy�Ne�Y���)�J�V�l���
o�B������������B������O��6z�P���L����s|��p��s�pZ���y���-TT�As��{k>J%�'�a�X>p��M)�������d3���
�zdBAOP-�d�����b�Y%l�N��(q��f"��b�c��>�/������1�.E%^�&�(�
w�QU��z
?;Six������#m��i�eo{�c�Z���&N���G��4*��L����:S:��-4�������8/�2�[��
����%~t�[*L���	��&�\n2����Y��r�	���Ro�Lx��PO-���4���9n7��vkMx 1�@�V�?�������&�~7�%���v���m�$�A��V
�s-�bh��,���e��D#�����b�x��5��b;�2	[���B�H+���0+w���h�Ej�	�T$���R��k�R8T'f�-Lx
A\�Eooz��Rz����|�����[�������^�D�>��V�����*�T�/MD��zhs����mW�d���YA�*����(g��\O�j3D��]b�
W�$R����^��p��
!��j�y"-�����|�~�����n�7�[��Y��1���M�[9Kt;�l�s��f�QK�NA����f�N�+�Ma�\�
��&��Y��G.�i/*�~0>&6�M��Y"�'�x��V��bV�"����e\���C�m��i����r��e3�M]RT��bV� :�-f���>��Z�K�nai�	���D�p�MA����j����)7�w��n�i����7i��LH87�,��s+'���v����[��&�s�"g�N]L���������Ck�E�1�S
��8O������z���b������+L������u9#]W���z~�_��%�x��P���|���]��������W���%�U�W���j���(5����:���y�eOW
�U9�%�����M�k�`{8�&�����	t�d~f<P\�r�X"������L�s����D����*�7)y}��?.��������%�F���g��s����t�����?���}r�������������'3���������\~������������k�����'q�
��-[V��=��s��b�n��o�*���8!P���F���:q���|f*a�a��
AG~'�����q-��a{F3!a{y%�
rgOfn�;yQ_�q;�����Y(��M���K d�%B����'��ss�}#�C�#XOh��� �`8��oS,�~O&P*9�E���+4$��,H���$��n��T�����}"�	z���]��?5�@=(�o�����z
c�[y2�%��[Lv+#X�������������HPr�t��}�id�SBh
,�Kp�'���2���@:�{�7��D�*��������1�1�7Xe�4�T{��G��HH��ze�03�����8��?y�M���o���zNs��t��mpE�=0"I�*3t���+F�=��|��J�Wf���M��"���o��lHH`����'��%���X���T7&'B *vQ���o�"���[n]�fOT�f�H���S�����6u��@1�l�<�Z���0���H��o :j�F����7d��]Jt[��(Q����aN���o����	��3��vr�]o��h��'�(�%�����;1�
S5��N��<�!3��D�E�~�����cL���n����.o nI��C&f ����4�
J4g�����d��'�ff���j�JO!t\��ib��k��+�������)X|T��;,���}^���k��11��c����cD�7`�xAf
>X&=j,�/�pWd��f�h�����
��xf����:u���@�pf0F+X��8���33�=n��/�����J��	��a���q�tL�W�{���xj�����<��.�r!����������8�2%�	�#���J}h8���F�2p|Fe��7���	-Qn����y�������5�z��N�5�p0]cJ*��071�K��a!�����[������B��N�N�l��������H
�Fu��+Y���i��Q!�x6$�����[xgFp�
\htSg�<��T��1�v�7�?�)ND4 N�"n���I�6�>z�(���Cweb��|c7E2�A��}�&�j�4O��>���31�yw�����!�3�e�o?X~���%F�^L��Q�O���qd
�zzTU�A�����}w�)�����i�+�%����yZ��(.��c����dF�ZN�O����+x��j�[$�f#�z�c�����X�
>�h����u��	�����z��X��~15��y&�7/�n�B�p0�O��aA���&F�������=�0t��	�e�H��bY`Z�''�U,�un�� ��k��cG�g$J�M���v�(�6�iN	a2���<r'#b;�D��Ig`R�M`���������-K������
��&Fp�R���7���W|��W��T��������iJhZ��D�����e��`�����QM&������g&���>�/�<Q��3����&�T�h���g��p61�<����m��'�5U���+U��m@3"��+���73��[e��fh��c���	7$�Pc"x\�/���U��=��rB2��D�BzV�������#u�}��yf���S�����kb����i"�=1�)=�}m��[�=�b�D
:��6fX\��BWI��k��	��vfxh{b���Q������K����������G�����W�dO
��qc	���r}&F�`��a3k�D�\��2��Q������0�#���c_m�8�ev��Y$B�n�lH��F����H�����J4�3����Z�w�#�4��E�	���/s�01e�~�('�h�5����a�i��4re{���>��q��_��F�B�����w���������L�`5������9���S�D�@�#�c�QLN�BL���y��3����8�*�^e����x���S(��*#�u�c�P���.��rd3�����;�K�m$.3������.x��H)����&9��a�>$�_��9�_�����bn#�x���1�r��]rE-�u���t�����r������[��|������	������_(a����3�+��d�_�����Y�q�>�)H����D�N��<��y��<:j��EO)�b��i���N��f�)NS���]���tK2Q�[�_��F��d,ZQ���P���{=-����S�1zbX������
��v����"��O�C���j�p����h����<��p�t�$���m	
Z}����B����9�V~�9
3��Yd�g&2�h�����{��-*Q��S{�@Lca��J4�+��u����Yl~kb�������K��F�]
�Y��R8��
�F1�S�q/%rsc���8��n��h�~u!����-�*a��nHy;��]���b��[w���Us�x�5F}��uk�D���j?ex�5��5���s�jb�9�)b���'i�fb��8]c����A7'M���O�h��6���ta%�[y�mK��DLl�n1'��
���A4b�.�S)�`���bT�8���+���jdm%gs��Q��]�v�7_��g&Tn��D�QX��b$�.M1)��&�Mj.%�W�����mo;�2�9��~������.E�/��h*�@���������*Fs��l�$�n���o.���;[z��4�}sO�Dh��J�ss����iN�{c\��8�h��7T&0��a���w!Nyv���)�z�I�gfL&b��Zi�q����sD�OC��4)2��������Y�(�?p��v��P\�*�!7�x<$`�0��������&FU�u�J�Z��:��lk�w�R{
6�l�|m9��s��db���\u_��N1X#�1�C�L����}c=7W<�we�O#�X�������k�s������qho
����������$w�;3kO�9q���D0Nh5��5P�}u�@����_$��n{xf�8��N����2Q��h�B����l�/v�B$R�y�^H�w�ff`]�Zf�dP�^�a��D��Y��I2U�g��
���2�}%�������+E��������0U
F��\����Y��h�|��y�T�����sNT�K�4g�&F��lctl�c=:�]� �>UB���746�`�[]�=w�
9��Rs�8�2�f%n=V6�*�����X=|��3��zCcn=��3M��]�fQS�|�����nH[53�q��L+�}
C&�������m`�T�Ib1pv��&&��
j3#��4v1\s�bW����<��)���_�i���<�J��O��g�N�t�����%��	`��h(!|8]
%GSpX�b��l��a��
[�1����'Gt�UZ�~��TaZ4�X��U���u@.������*��xs9���R~[��5:`�SB��Z���E+3")��^W���x�fP�2#�B��*X����8$_���nk����oN�W"�&+���@�A9�ebPx��QS���0�P� ��!~^�`�2�������Hm��[�n�������h�5���08��
���	�J$���!!��K���*���U��n����sr�����-r{}��to��h,������x�w����i�)HW(4/J���N��:NK�)%�d�:}�6v���%N`�]��O��x��L��4���.��q�>�i�Eb��<��{~{P(1��n�W�mH�;sJ���f��i����]��S���X_������/[���b�BV!�(�d.�J���}>��O����Ll�5����/X4������u�?���()�����������.^Lk���e��r9�Y\������c
��Rb�������S�7�D�3��V�ZmI���u�b����Fi0��kfl��X]������'���JF4��'�4�N���
!�&X����6�S���.�����v��_�g���xY�f����y�ki��F''��>/&ct���ZO��$���s�)/_�F'����z�u:���<����"�;�IK7���_�-�m�}q^��Uo�NR�:t=���L��c�q�*��������Ts���4$�a���$|��3},c7��/
��vk����	Ls*��h���zQx����!%`���6s���	dt�����#���S���D;J�,������/q���-vp@�ua{Yw�������x�b����x�&��pC0�x�(
��6M�[]���A@��H�&J��1O��_d��v
��,�~��$>d>/&02a]r���U���'��`MXt����=�j�n����x���?}��$B�����%�W���'���j��k�k3���� �a��7A�-��yP��	�w+Rf.�T���i��z^��h�_�-q�\�5�F�W���h�';r4se�bI�|��v03!
+��f?$�\��Q���	�\V�q�������<G)�����LL��X�%v������Pzn�����[�S�������5����4!���j!W>�>9����`i�5������b����z�9��g���D���T;�^�"!~^��:G/���&&5�1��.�r�c�8J�u�����x�����U7V&cH�N�|H�r�f��/���k��33���z&�%|C����/������a�g&F���s�� �q�9���$��t�>�)����C�"�����H�R112�#���	5~�L_�}f�^�t�'�hf`j�:�I���)�|��N���8!x4{��`��D3���-���l���3=u�����\�����s�T����7&�"�o99������4��$�����p�n9
bqq�f%���UL�As��h�P���Ti��n������'�,�o���*Z���.�|.&>��(�B�$����\.�T�Ws�:�J���N���w��4��+k �+a�wS)��r�}���mx�<��d�G
�:T!���$��5���B���bi�d]����V�S��Awh���~fF�Zl�`����cLK���p��4����o����������A��w��h��(��`
����73������Y�K*s1m	�5����e11*n�
��P,-�����k�O ,;T�l!>�kd���Cg�[�p��*��.~�B��d72�
i��S�q���wTF�*���/;��/l��z
5d��3����2Qm�w+���
��8� ��D)�*�����8t������]J��S�}sjc����C��C�qp�7��;y����Y{^T�nN"����W����EB&�p�@QK����/\7;���a�@�W.��������|�r��IF"���;:�I���"JQ����J�0�]zu7��-���>���^��	�$`���]�L�Vu�[U����
������^%��`�zf����5���0�Q3���.iG�S�@��"�<h��X�!�y1Q����:�dg&��By3m���[;0
=�*��~x@���&i�<T%v	���7����D+��k��!�,e0i�����q�	����{��?�mY�(��s�2q����G�	#~�QhKk���M�1�'�@�L�Id�/�&�2kti��g�����5������}"�2��������J!"x`��<<���;��	a��|�u�i��B���.�O�q2S���@��e�^������^�W����;����p�V����f�Ox�-���;���4��]jOC\	I���d	"|fB�_u�C���"��X��~z[�x�e�qSg��U��~q���F�\��M���_������y�����B!�D�{��2�1�j^���'��|�/L�^6Dd&������+��d|�zC�]���B%
X&��/�Y��.u���`�;��MOH�B��G8�F?���x�=���?@��)�|�%n���w���j+Q{$�v�B�J�~��&��$���15��� ���J���'}�U��@�ZEH}��
�z����$B!����q��u�������8��'�<��qk��JL5���m���5:�����������R,��+�0��������G���3�����k��b�����fj2s!&�iO��~Y���������=/
� }g��+M�d&������������oZ>n9�VQ��1���y�F,�S-��1y�����~&�c���.�{��V����:��_��@�IP�����X������d������S���bD+�
�B���b�"6]'$���l��F�X�	9
��Q���BH+�\�)V�����\��8K4�l����_��V��}c�F���zfB���n�#]�����+n$J������z����B�!}����_.���~��p�;V!��F���������l��"��3�/��G��j�hoTmK�0�v��J91�r�B��w7�*�A��C3:�vH^��;���	��nS�6=�}�es��c7+�L�:q�h�^	��k�X�)�Yz����j&e�D��S�j�������6��0e�)���B���<hT�|}�����'l��~���`2���=���7��;3��S��}obT^E�o�~za�����������)���&Zdi���R�������.�Xu���d7��������X�C����q8TO?*hb��=S*���=�!U���i5����oB�b��x�W1�#�_�
��p����b�X�����*[���]���-$�1�9��z���Xg���/�\n!�\CLl�NG��.#��3�
�*e�]��r������9�j�����@������n��ZU�Ay N���+������}����`��S;�%����//�$_��u����%"���r�-��n'�e���@C�t�`\$X�������m����g�&s����|�6h���Go]w������l+�����3z�;�
�w�������A�p�:+m�mq��0���f�'�6_Q�n;!^�����a]���L@�
��������������bbb�X8N&����j�o��/b�(�4��-6H�t�:�����S4���Zq`
#������IW��������j���p&F��E����z`�3S�)������m=�b���)qD�������N�����XN5�A�;1k���s(�b)�I%�2�G����OLKu�H�;F,'&7��-4�0t���q��@|�E����_��2����kJ����)B���o�sP�/.��}_U���
c����h�c�grz�>��V3����^c��0I��-U����Y	��_x������f���OT����A-Q7���L�#�L>���5�A�O$*57�]Yrc#lj��-�\��������1Q�<F�K-�^=|y'��X�������O�aq,t�LD
����,�(���J�9���P8i��k�o��V_M91�������aq��[��t>�5}�3SI�
sPX7�z��J:K����� ��8�������I+���Pb,���M��(pB'cBI&}n���5���n�g�\e9�+o����n9o�y�J����r��V������\���������������v���������}T�����y�W�������L������{���q�����dK��u��9��|����	�e��Em���%��]3�c0s�z~^�`�|��Ly�-��C$&F�k��#A��XjM]NF����D�HL	�����D��z�dQ`�����XFd	����F�4��R_y2��.�6����U_���5��������oB�Ri+m<�����/��/�������3-��O�j�LY�b���A�&P�w����X�_Ib5�.aA4��N�ce�>������	�����zC�w�������;�z�n�]60P�h]|$�)&���<��]2M|e���c�V�����3��#�����N���{�{{�w]ccZ0�5����11�����g�PR� �k�o!n88��'RlN�w�|��!=���6���.Y�q�K��[{{h5	U�W�Ww�Kw�J�2��Vz�+�}��[�+����$\�x;&������I^5�O��bS��zg(<���v�a}�	���*c�������5^!��L������.�/:���:��^���U^���)<�\��+����GRw7E���{f��C��ZZC��z?����/i�J���[(�1.�7���(�s�����a�=y��f�71�%*�jO�L]az�R��%k6TLV}�A��V�x�Y�UF��J�Sp�v�~�(<�P�7�L�����\����7G����q���4��U�%�.l��'&0���N@��J$��PE�\��H��t��>��L?�FJZpb���}	-xP�]
8��� "
E����"���>���8ae�"<5��4����������n�9J�*����5�nf�i�J\���o4)\�I����p�z�4a!Z���_,�sR�#X����g���	](��L�TKk1g R�r�	���.���>��Lc'�TR���2<06�.L��&<��	=�����������nE�Lu�$i����`2!��'F[b�wM���`&4WV6�(�����H�����1dE~�B��AVi��%X����Q���>(�;��p#��z��� �D1��>��un`�������8��'&���!3M���yuF����L��6�LX��J�:��<�g=N�|���I����"*��C�����b����#�f*�����S�Lx�b�`9Y�������b����`=p$e�B?�g3���h35���i��	����D�7�w���]��6&^������B5��x��F��|���%`�����&v�(I���
v�����#��+a%�D�
mL�`>C;�u4H�.Ez����������+�-��m������/7<�VM����J���?�]J��3��;�����0J��4�����X��w7rr����'i|����5��">hruuu6��.����?in�=Bm���x�����<~���M�%�m}����aY3��O��#�&jF<N�[:G\�'����n��_
��N��=���^�*}��i.��Jh��oo	�SiW3���G.�@�V���T�� CI+��O�����E���*?�&8���_���L��a6�i]����	��9��0��t'�2�R�����/BW��B���"��_�2�m0V���&K��	�:�Dh�Y�xG�iF<F�[�^ "���`b�	��^���TB�<�h+�j�������VF�i�g�k��(��B���������������
��Ln��H�;)�}��#�TL��(�C��g(}&&C���Jz�����2��>5>��w":���+W�Y����X�]iW$�YL����C�H�{��t�lb[��R[��)����H����)�:�Z7������'��IyV
WVL�Hnw�����B�@�������?LwR��������M��\��)<}�w6�&F1�k�X�iN��/2�_.����mq����`��T��x�[��4=����I��D���wt4|���G}�����
��!=�rp�J��E���iJ���O<�D-^U
W���\��7K��#MU���9+LQ�Xy�U���D+#9WQ2X��w���ZF�-��.��A��^w�S'������x�J�����7�f��+��@u��3��11�>��XP�P&�[d�������������2��Y�O�8��
�L\�����@�b��jY�M;�xb���?Y���S	��Q����k'Re���F\O��C�K�?���?����UFsMc
X�|x����63d<?|c��Jh����Z=�A;��0g�-��q$��1�/��>r{��&����	{&�]�b�(�2�&s&�����AS��w&�5��R�V�\����0��	�i�t��'�4Fp���Z����X���h��|�g>�,�'�Z���o�o3%��}7��@��$w�������r��C�z)�V���-se0Hs�9����3��3���h�(>bh�������|x�_sA��7�,>}c�5l^������ ���C��1�D*����\�Fp���h�;~:��������3x�d����V�H���k5���m�,��U
!�4M��"�9���p�|3�8s�z���x1C�9U`e�~��*����$�edb��������TF����=��D���XA��j|i&,����&0%������{q�(l�>�2��c
i8AW���-zV�qt��d�\�&/-p�	������h��z&���MG��>��B"YuBP�X��c�Lv�3
CH^c�������e���X�5G]y��������f�f&8����a�s�Qg�S'���!G�e��I_����X��	Y�v�c�?n>��;�Tg�����_��a��-���C���Z���M��eKp���������%9Dd��>0��$���z1�	��0@L�ZJ��h������k�n+"�:������ms��&�*��X/���������6������}m���s�;}�J�0@)�L	x�tj�v|�k���E	�C%1TjR��h�5���Vs��+c���L<��<��Cj��*:��9���>�TBS����q��%��v����T2ocf2DkEd��Z'F�xma�����������W��7u���Pn^T�s���K
��[61�]��Ob��WF>�:��1��fb�����q�raF�[�?$���Ea�KJ�����#�������e��u
�m"e:�Uoue�\�!�LD+	�.W����2V(��men��+�
�������BF�h���5-����t�Q?I[��2��_�����B`4����/Q�	]�q�|�*������+�e=r������������R����i���-�,��Q�}
�twi��(%��X	���g<Q�w����s�(x��E)�X�����g$F���~�D���oKSE�����C�tF��IE���%��Z�K��aTv��m^����87�����h���36i����?41-��%�=�W�PX�!ofF/����oYmU��5���h��;�D�g�(�F3c�U}�����)-����X9?����K�T)}p�+� ���foO�n����3�N(�Y�jr���a�>��yQ�P�L��1�����!�'�0�����y8��!Si�a�g��gf��:�+e�`�L��W�h�^\�L~ 'b:�}���r���[l!��9��I�3��r���T[��9hS.��/����Q���w�Vkb���R�V}������z�\%������o�(_P���c�N��s����Ba.�a5�TJl@0h�������pm�+TcS���#r�o��V�#�T?R��`{�T%n��s����2��feT�@���f'M��P�@�;c�att�I_8�/�3e�\v������t��,�xT���P�4������	����9��?(1ht��Y
L������SJ�R���t�����bVd���e��X����J��Vm�eP�"L��7�r�L�E
�]�����I�%Wz�w��L���\&B'7,k1�m=�af
6�d��n��\9�H5/�
I�y^����-3W,O;�	�I�S�#�n��AM��yS�����,�oQo��J����.��Ns���?���??�$c�0����"'��=+R�x�����n�L��*W	�/]l��
i�aq�����sD8W��� �+�lE�D�00�����m����VJ���V�-��l��@�/��[���������Ax~�B��0�q����E���_Vbt-+1�z�
�N���u��h��X8e�Fa�X���
!�� (�K;�?X����_��;l�u39\��|����d�?�l��T�rUY�+��^��m9�i}q5�b��]mm��}�����}����=Tr�lg
)�{���k�H^��:��(%_c����������������1���T�:���w��B�
���G�J��xR�L=�&f���d�j���#���	�]����E
��s��\�/x��a&���Y��-�9Wn���&W�T�P2�&�����s*�D��V	�������)1�������\�43��O�2%pp��iVCe�y��6���'�6oD:��ME�X�E2MSo��X(T��#aH��F���k��R��w��/�������-W�-x��_]�>3h�{�173m�b��r�;>,�8�f`rI�B��o�O��B���>G���c���+���J��g���WY���������=yTJ���vs��6�<����>���+��m�{K���ySB|�m���s�)��������N8vWB5�������f������,,;�J�,�QS8yJ�g����b���|-i��x*����/��c����K����>]��ry[�����K/��Q.����"]V�.�*�tYa�|���q���U.�W�,�F������zy�.��������_#_����/*��g�0��x��G������=�����N4���P46�F]D��E�&��(.��e�U�tYWJ�����:]V�.����0]��^�ro�h�T�m���t��
L�k�����,�J���z�]\V�{-y�J�k��T��E;�h���g��%�*X�ry-��.g����[���C@��G����;z|S-�^?x�Jm��U��I��*d�$d���\0��Ec�}g����g�|���}��:����?����������3`��z����"?����������3`�����|}-���������u~:JW]�����3W](�����1]�s��J�Z�����L��I����O�V-�}��j0���U{a�$���$g�Z�')���>�X��I����O�U-�}��j(��lU;a�$��	�$W�J��T#a�2Ul��JT1�*O�B��4a���,7��i`u���%m���]��@�~5a��4��e�W�������S��R�m*U��*��=W�!�Z��Me�F@�~5�a��(e�S�{)s���G�v,���e8��Oa4�7r���������r9�
����g�T�)��v
S>8'���S�>/����������)L��/�����z�O��$������mgFr>~4�h�2q��/OH�������P�8��BM��������i�n�
x�%|h�g�����&DG�C�f)��-y�~b�]qx�W'&c����2!�9���U�yKIt����>g�4h!L�Q�^U�Zj��0����E@,�(��@t�����(����L�����&��\�,����H\���C����x���Nu,�V1�WG�����K��ga1=�`��}ke�:�7+N"Z���M��F����R_8����������%J��k'�j�2�,���sL��LH,��d�Qbu��1~��������tF���;��Ww��������x�R+��$�B�-�����f2m�����>U:`������$4��V��.�(3Z�n]R��$Te"3>|E&�0!�TY��9M	l='�L������_��;s-��k�Q������Ms(M��P��z3�8�O���������K5,:K��������n�������V�xN�j�L$(�lzV�z�kS�F�3�r��i�5��b���:��%]Tt�h��E��,�Q �U�e,�C�
�����*�/�Y��;�w*���d����cy�������~���zfjGJ$b��D�H�1�sZ
P0-�>�P���l����Ixa2V��3�spA�L�X��[�8�o�jN}��?B�>a]�p���J@�����.x�p��e�C
��,z)g����������N7V,�N��;�{4�0��e����$��]��M6��-Q�cM��17�����\_���C�VJ{���,��,���<x�E3��l3���D�j8]\ GxYL��:�z������g&�Z�:�.;��2a��`Z�Q�SQ�T`��E	6����RK+��~~^O�v�/����c18��������
���J�;��	Xo���f����T�iA�<6
�/&��pfl�[p"Q+T����H�M�b����~��Ox3�+?/�_���p��U�'��>/&
���G�#u�u��aj[�Ab7��
=�q"�_s���H�%Y�Lnf�U�:�C�3S���?��gK�F�_����,����1���_�K�'B�D�M���8���.����O�������L�v,2"���0�bd��B,��@T����i"����5�_l�d�p e���`<l@��P$��Q�ES��>��A�Q�)5�I�n�q�_7�����R%x�`�=�Dho��V�n�X72>3��-A;�@wQ=cC�g�m��a��F~��	{Yp���t��7-��������k�P�w�CT�.��8Bb����z]���������}I���������-��NGMAg�-��CP������HZ@�����P~sa�.�����H�&�6�"-����C��g&���/w�&3���������u=}���]FS��S�����89V<���z$��j����84�����s��������-*ts�T�O����
Bp'"����V����&�a� -���Zy���D�$.�m4���\�3�1��Mw�.�P%�P�c�t7�?1����{�"{��O$�����zb����1��2��DVi��7���^��P��l3"����������>���18����������;��R$rl���i��@�DD��*���
��,�b�����z����!-����6l��z���g�0�
�8�y����T�L��'wn����q;���,v^���������a���f���iP�U�Vw��(Hz,�3�dc�Y�D��ij�t�\;+���RT�n����#U	�`/��&����n��p�@-z$�I�<��(�^�hYp8���fw|z��0�'��������.����d���yx9�������:�v�>vxqQ�D8�-��ZkX�Zp��@�������D%:���$�m�2z&F��P[N���P�K����3��Q��W�4TB�"���<�S�@��")_m6i`�Pj2��Rnl4�X�A�����^J������b�s8�U�	�r4����d��1*A��
��Yx(/������4m���)�����"�bs��}O�"Z=�]�qwi�F��=�p9;����_H��9���0������p��'#��9��&��������t9Z���n��:3���b`9�M1r���%�k�q���nAhI���I*�c������Mu����G�������'�&0~�DY
q�P�k�0��L_��5��b�q���@��oH	���/��{;�+D�wb�YSJ���;1s|�H�4;�:I���o������9���`8J`ZP�M���R���+��8������4��'����
�@%����+K�9u��a|�� #JPO
<,�(x����CsAb���i�L���D�>4���,O����o�I`���"!�������(\���W�&S�����>rn�����V�!�_�Z8zq���E��*���^���a���]��������/k���_�����J&_�v�~_T"����q�������W�p����%�	�L������kU��6* ��D)��3���&Y�V~QM����#�T�*Y��P��Li���E�����:�/N��n����Y
f��yqY:�}��:��^T�8NK�c��S2#x��)�kal,�����*�*��3��6�"o�cZ��/J=4���
�7�����Gh��W����T�.%2�=Z����27p�QR�n�"{ j����z2������jh��_�+����'B u��B'Qg-�r0N����D�'���*��`
M�_�W7���u^W^�nE�N�n��D�����
�����Lj��dW	&oW�J��;��M	��KD<z�R�/{�������V�I�X�����������Oj.��oA�[����j�okn���u�M�2���6{�E�H������pN��H<oJ�S��qs�����u3Hy�U&d4a��B�B�����
��Q��d���{QB�TK�f��>/�����<Jc��g
��mP��o�I��T��Z�*Xu ���Ty��-���c���������	�7������4g�~������'�J�`�F-tq�t{sI�6H���:�x�����]5�������J��-����;uN��b
>�m��|���
��s��m�s��T�
~�2v�����K%��\ {��Es���2g��7�ln5WBa���@������*���������b�������s�����m���3�h#��L��s�?����Po��i������u�U`��(t3��lf���s�����������s&��`�L��N���Z�=/N	��'�9���3l���&���Hw����y��=���V8���yq:��7���M3AY.��1V���H��0�m�v��������c;_�m����}�TI��S)1�>oj���4�t�/���}}���(�w�[m���t�3A#�)z|�Zp�����<�jb���<���7]80�����ng�9�v����N��wvF��3%����������DI�������#O�.a�L��a��]&%eN��w�.0�wW��[����k���
���L	����L��2s�P��ue�������������L�-���C��T
����t ����j�QoE�Q���L����e/��
oXB�����|7���f!/���T"�����M��3k���y��M��Lc��1f�n��p���G�9�w�����}1����>0|7l�^��f*��c�F�R�������� �L5a\��+��Bf
!��!Q�_�iL$t�P�!pcgI�ON�R$�g�2fot�x��{�O���P��fJ�#}m�0��J��lG���>oJ��8�2Nxo��p��o{�R#�����H�8�`1����so�����:J1��S���o@�`� ��W_q��y���@�SZ!xP����(������=�7Q-�'�x��B�V������_O���;�'_��<����8�1��](�/j;n�i�M���P�/J��vl�v%��2Y������aYn:�9#�h����k�-������v.����(Z���e��l��st���}�	;k��7�R���x�)#��$�3�
/f_�(!\��c"8���3#/?
����k���"���+�t��ZyQB\n�WkL*�"�ez���/J�I����jal`d�N�`Daq.�T���XLP8a���f!��&�����l`��o1����)��
n�(��B��/m&
��D��3S�D�����G�I�h�0��V�R	�Se���(!�����0����3���H���X#�dZP���(O��s2���m��QZ��^k��7�q��jQ�(�+����I��aA%����B���t��u43����bF{9
���U�eFC��XN�2>3�O���N�=<N.�tp��	7!��PR-���g��+��(!p$
�#M���p����c_+���, ����������4s�������_�&^�>#u���F/�`c�V�)
�2R�s����$����8�	31����O	�G�g\�vR����s��^���B)-�/4��
�����q�o8@ E�gF�|X0�}�{tz�o:f��	c��u���j�����t�_s�&�>hKM��FD�Uv����*���&��e��yQR�'��w��{�s|�������\4J-�F��'��)*,	b�)��zz"�h�QrN��y���o'vf��#;��_����;��7�o<��V���0R��`up��v�)d���]1�����7�mvv�����Q-��{D4��#�� N�����v�y���'[���W�V�9����"A�:�s�����\6�)����lf�t��v�f�����S��gF��3���m��ny����+T!����'��*��T�����#��;��bWAeP:]&��.Zr�eJ���V��E�6���+�D^S���;�i�8�Y��~��1S��4��4�K^;��n�K�;�}�k�A
��0M	���=�S��L��R}��
*�sU*���Bv�^����B��)�����};�L	�V����H���3���6��
w\�'�xW���b����'FJ��	�7[��g�4��
L)���n���������"j�s�^j�o=�u�/��^���>�qg	�@���
�E	�-z��GeJ�!Uo��
6!��o����p��
��/2a3Q�Pf�<�����&
�����'�
����u������l�����D��~P��4P{sr�/�V�ME�1#�7�a�EL�L�7��B�b��W)��3��~�e&+����3�b
���H1����t��P�MM��6�B�b	�%5��jb���g&��ly��h;�Ve�o��t��$&x�B����611��2bK�o>!�o�C&L������=~~m�0V�2���3����k)��=����b�H|�Eu;�S@
=����#�=��S@x$���K���q	t�z�,�����*8|.'j�w��'�zWv�f��P�<�_�D{�&6u�fF���8*��k�:qJl�5nA�gS@3�����$�P�������g��+�C'����!�U�LR7��	��:OE;J`��t&F0�P�KX�����M�P���a�O�d`���5X|=�������(!0����M	��c��D��+�8<����iA�-'ydJ����.fJ>Ngm���~.�N����M	�],a��e���iAi��.l��d��U(�'B���7M�`��*}bPpF`��`z"�����g&"�&�W>�0<nq�
�2~����Q���M
`Q6�9=����X�p5����j
��������J=u(���.P=����=7* �t�����c+3A'(D9>oJ;����� +O��7f
��0��$91�s��z���	Q�:�D#���	�'�ZAx{'B��bh`�4���cT�7A��h�����)T*_�����~��D��%���c���j}������M�T�<��SyV�LEeo8�6���6��a:�����??/*]���PW�L��j�	{������&J�b��0����g&v{Z��H��<8O�8!�-��c���}NJ��@��;�F
��&&��`�U�i���;q ����F^;1�MT��+�hZ��i�nm������v��eC)�dP-�$0�^B�_Y�$��h�3i�U>6��\�+^t�Fem����m#���:�|�Q��D�j�i#�e1���)`�����A�t����i���Qo�G&.��Bko��51Z:�z�y���Y�o��L�����9��S��@426��a�q�M_�G�����c'��LS�p��!y����������St���1��Q����u�gh�I�������7U�����d:�H�� ��!����;�}�����Lo�r�!�7PW�q ���`h���O=�������s���yf�|�z�������@&n�!,c�\��2�nvN�yd��`�9
��cu�D��(���PU���7S���M�EP�=���� �m��`89
��k����c	53���k�9��6U�.A��[�^��
Zu���N���
�A[`�q?��y1�:$�	��|f��}!tz��ia�ef�w�V6GAN[��;"��22���O��V�E�� �a���|��<�-p�U�'2241�<�)�E��f$����w���{ �0�A
���{0"{�&hY�t�b]/����e��s�f*��Ldm�����Z���d�x���l��1k�^���;U}�i�-�=�h/x,��a�C�
�z��,o;����'���&>��b8(��T�K��eZ�n���\W�X��^\c�������!{3eF�jN��4�5�D	�>�����;��o�i.��Y�$��R��,j����,�z_�V0����>qJ�
ck�['R������g�<l�����7���DM������)9������"L��0���
2�P�>oJ�����L���=�T:�8.aN 9���������1X��L=c��>�R�)���bj���W��o9ml
B����+��P�����kL�T�����A3pz���f�UfP8~�l�qM���'*D�V1���*^�'X�g�J��C����/��|71Z���_A�O�t����O��Y�Q]:�'�F���C](�i&=����\�U�m���P9���7@�+���q��]`�[+�#�JDO<���K0Q:2S���-T�����k��'�,�g�}�7�������Sz��������c,��n;����:RD���ev��,�����~�`�2j��6�b��
��:�J��'1���7��e����E�
 ~^���#�S-fr^������5:�C��bMV���Q����r9�	�v����7-�N��A�{I���[,a#���z�F,T"V�1��O��r����?��&�m������i��Q}fB���o@���������~�B����h�&F��0s /FtX7��JD��nc��cu���~<v)b�ws����b,y�W4D�mTH���"��_�}&m��	��sJl
�X�@�b�?/.=\���_��T�F&�ig�����n�dJ��YK����T�vs�����`�L3JEkcW�0�}��3��!R8W=�-��J� ������7�m���|E�	;�M�5�>x.YI<o���A���a������v��,�t������-R��w_�<S�vu�i�apE,��������m�@[������u������<����������V������N�%����eFS��Qd�M�E[�Z���T6�lE�N�`���}`�q]2S��*���jSpL\����i�7M:Q]Wg�-3HW�4i!�`��j�����V7e:�~���KT����I��UL�N�X����;gM:Q�����1�&N����:�i����g`���6O�t��@���A���H���LP�^���4��j(��5�|�^5�LiM�~[\�n���n�H"����cT�I�{�C�r�kR����F��.��q���D�d]Y����|���vEj��Z���5:�|xPc`�j8Pc��|^���+�u
��$�8O$�wJP��_$�1�<�!}� �i��7�U���>��Z��g>	s�"V�!G�����H�����%��%��@Y����f�
��e�I	j������A���e���yH�x�y%��w~���a��'8��b�Q���,Z�3
q�h��|��	��<��cU#�1�����IZ�v���&��
�H�R|�3$�c]A�^<XO?t}���� �����k�'�}f*a,���#M�FT'1t��
��u@�}��������Rj�D�{�UX��nN���a�_�%��#>���bD�Y���f6z<������������p����zx���q������&e�G��!a>�@]�JC����"�����i�Wf[�I���^N�������~��s�n
X���\S�-���Kx�q1Y���CF����k��/6Q�%��f��~��)\������Jx�������a�/���%3ww�Z���]�F�+�;d�����@��i
$t�46E|S�/N3_���
�1�2�*��@[P/���5{\ 5�U���{mi!���Qa{a���Qsmp8>a�u�LR��[����1S�:�b��������u):��TS�L�zxe��wDd�y1���w�Tg���g�{nU?Yc�����l�7L�_������=3	w,�(D�^��!��z������B-��o74��<U�b6g#m��bY'��CO�����c&� ��X���|q��us`�t�o�s��i,��k7x���bLfa�0�jS���r\Q�;�N��C�*��L&X�-��P�Z>3_3<pQ$O0�-��D���1�2{!�cL�[���p�!�v����BX�����Z��� .Ls�9,�AS+l��t��!��;9��*�LY�)�i��/y�;����������B��_<���P2��&,����.��7����0-��V/}f��	��5Z�_��v� �=6�a���-|Q2�L�SVwE���8��������
��&|�6��e�.M�g�kb�Mx������C��K�k���W���fs���R�f!+��s-Ec�	+�i������4����>�XZ�1�8f���H��p�-$�(�X�$�2E�<�;P��N�-'�<��wI�1���9d�<4l��CU��@c�16O&�L�I��xl.Ye����{+�kz��Hk]"���2I"���	�$h��a���q,����hS�=��H�r2f����"������&�&���p�����'8��D��
T�j�ZP��l���g�����6�rc�g1��,se0�!-����)��U�3���x�lF3�f3�����I�*�������}2�+j*nf����%"3������X]�4���a_f,���)��4����5lL��^8�T����0���es(��q;VT
�|�B�M����Zy^L`M1=�^��A�3;}�.>b�B�����4�ewn���!~^��Td��Y�c��NS�����NX�h�	�l���*�'��}h����D�8���p����t�[�GH��"��6^_�r]a��h����z�[\W�������U�W�����Z�}�����{��{���G.��k������R�}���]^��9`�%]4�W5��_%�S�4��]5�g�Mu����y��^J�i�zM
k��o5��A��������?�_�c���Y^#�����7f�Fr��g�e�����?���~���mr����||�m�����C��o_����?.?��������.�����7�)���V��Uq���B���ySB`�&���n��m\3#g?pA���'�k��w�|�5=��a:�����;�A�pV6"��^����$o��S�i����������l=����/��'�r��x�����G8���������fN`����$��F��_gw�Q�������=t7�J���&;'��?�9u���CVlw\�p�
�Nqx��[m�<I��9����� #p��Z4qB�qE.��!�F���o�U�w'��mgQB =���&G��r@�+#Xw������V����"i�q[����S?3���cg�$�1QB�Hko�n�')�B�,F%
B%c��X�,��$�&�v &���7����/y�7�z��%x��P���T���G���o�����F�>F������7��&�`�k?��_��x}��>��L���j��V��yg�6�j���.l�����ef=-q��I��`��N�����vv�N[�.�
Tn=��_�P��p0���3�N��C�g&�0t��]����M�Y1����d&U�����t]���
![���{��z�O|�_���/VY��\�b8�/J���q��^<�A�~xej����`����o�ioN�}���~��V[<P��*�>j��X�elp(�>�U*���;xr�lG��j�CF �%q�5���M�v���~�v%Y�2����Y����)���g�-��Y"��M���r�z^���n}c�-��7��d�M��_��$��eR��;��<��4+�_a��J�����3�2�Y������bygje�W	=	�4�h�c\���w��:]������`0��@hE�����qJ���X��s�A��dO@�I����,h������5
3�G7�Bl���.3Q�q8��Hi"nEf�%F=J{(��y1Z����bG�G[��Mg'�'�4jI��pl5:��5 s���]�vd��������z]�V���� 	+��k
Y�!��+�������?ILS�1��VM��[�&"A���e|��]�b�'2ZP^D��e|K�Q����-�@�L�g�F�V�������'&�����jk�wJ;�eRL��L���)=�6�\R�;-��fJO��>�a����&��'��\�	��y������?3�P\#� �=$�B����p7�j^�r�2���>WJb�l����=p8T8M���41�� ������0��� �EW.d����R|��qW8f3�@_���LB����D�3��� "��aH�c�v���D
�G��*�{�����N��j`X%+����/J��6X�_bX�`T0�u{t��N����j�x����Pa��u���S�1?�x�ob3�w
��{^��|.�����hs�u/Xc{��R������bzY�=�%�����;u�'�2�J�9��3%��"�(!<(�;����h3*����Gl�%��$T�x^�O�L2C�S��3t���~��@6��V�������7�,�}��I�Sz�����T�
`&�vz�����"X5T������^�����)�3��[T)��m���1SBlf��;aCgK����J��cc=,�^��y�����^�*���`0�^��w�q������P����W5R)�>O7"��Z�N�����b�����t�f
���D�}a��3�q�����r�������o������g��A%���P�`|���as���N����Wq���m�gH	q���;y$�-�eJC&��:�q�0�����]vm�a0���b�@�}�%��Ag�A�A�t��J�;�������E�>=(��go/Y�(��0Z]��-��75f�up��Es��5��}�e�/}���Lv�Zf�?���{b*aE��[.�~�AF+SpZMJ�=gs	a�,�*��.j��8BR�%'Jf�/$d���Ne�N���Z+OW�/����61]��vMSL�zh�4��M�����J�>N�� 1=B���������k7����d�k�>+�d���m��Z�����5i&b����O�wU-�,F���P$>+����X3�X���ImM5� {|���K=32]Z��x���G)L�$���]Z��c��3!����y	��-1����������d���
�W�E�����a�4�T�a��/FU�_$B��~������"��It�GD�i�|5'��f��^��{���G��i�@��}v���V2���=�����n�8����^���|���r����.�7r��=��v���{y8p�Z����!u}!"�3��p������eW�A������& fv��]��w�����n7���6
F�B���!�;�x;��l �� ���-^E{�����O�j����E�� �L3������g[\�6���[����]������k_G
�UM]HN��Z��L�
X{;k'���S����V�v�`����������������x���m�);�8eT.����VL����Eo����n�d�����Z#�l��n�����@�!�yl>S`�e&!w3�$���/$�u�'[��V������9	�c�a��
;�sf���i�	�Y��_u����	i�J0�P6�i�
[����lfsF
����Dd���o8Z��c���|y��|�?�����o&���c)����T �}X6��m7��P����o��;
8L����P1+/���
f�����8�b��������[(����J�
�Yz�	=i5i&��O��%,@���q%"�t���]F�HJ�|������AkE	h�k�q��X������A)m��d�[*d�#��6�D-�`o\x�B��h�5p����g%�����tu[�y�l�zl=O`���
06*�MS#��!����i��S�Z32�>�t�_�D��F����S�/��b;�l�i�?,3J�s��.�1TS�L [�������&���X���p�O�y1���'���$_e e��������.�vp���h�V�d,�;����x�1R	`������(�,_��|��c��phx����CD%0���7;6_����S�_�������)���������I�z������Z������~bB�\2*��T��H��M`�F�$�b��X���=�o%"��j�����l�_��NG%�CE��]w�>+��DV�+�(�m�.���;�xn�[3=�������^\��B|m�����Z��l?��d��l������	�	ML����f�	d�wl#f0�tOKJ2�hp%E����}��|�����G�9� ���V��K��07��?#�����H�-~^Dd�>
����������|��~/}���?�i�Wu�-�G�#���17_��u��W"�qe��PO���P�r�g,�1������/$���w�=����>9��8��M�\�������G���J�J�����V�h	�����)U��Y������&�y���e"_���$�������x��0P	���ol���)�b�3c�����}���<�e|+�t���)69U��Se�]#w�50������s�W<Ys�V$`���~�\���|��eo�3+��+b����@X@m�T�L�H��,�9v��$�^�	_.d����g��x����ZO4��EDF�R)l����
���T��G�K�Z�7d���f��z�������.&�Gm�����f�����fax�"��N��#x��;�;�9p�?������4'�>lE�2��sr��x�	�Q�8�_16h�CT�)� �X��&�|i�)�@�K�P�]�.�B����ug������i��i�����������O+M��������lV�-�@W���(��i������5R�-���h���L}2�XW�f\�\|.GY<]�# �}xW��"V��g�_�E�3R��z����H���$�Z�-�
�{�6$�
�`���u=��3���$��>���r��<I=����^G��k�����d����������������'�4����F�~�����-��nG��p�W��1���
Z��Dmr�t��$JC���m*��)0F��2��a3��!rF�s�f)�X��{#G��0�'����3&F�Ag�� M�%y��3�"��e9��>9:/WK{gyO����I'78��h��q3	�1�����0*op����������0X`%If�}����n?���M�P�D���T����-��|��To�?z��r��;�e_�L�����q*�����T3���N6n�a\���*�k ��z&If97���P���� �<��X���i&��e-�.ZQ�<��i&Z�0��$��6i�*#���/�����3Q^�!�~/3��EBF���y6�
����e�]H���z���wW]�>�nztI��O���Yn�� E������h�^�!�
6�|~,o��rIwKk2���P�l�n��"!��v&?����������e���$��RF�k�\��
��\������[�lS����H|��T�\{��D��Y��w�Q�+�m#�l��G�L�(���
���	���kqf����)��}�����|H`>9$$)i;O�^@A�M����&a4>�&����E�:��Tg�����tJ���(>�f�m��@IUq2U������D]��X
8)���D�g���U�����dS��=�������=p�S��d�XI�UWO������d��E�������g%eb��7O����(�Kdn�~y�d��`�#�|��
B�A��4��$�9��t@��������|���������L3����G������2���b�dy����x�����O��R���YN����S����*DR3f�Sm��8i",~��$�x?W��&vyI���R��^2d��r|��~���]z@A?�];P�,c���LW��Y&�M�,�:�d(r��x���L+[u�(����'����xm<��Y�NS%z%����"�q�X�<��
4s�fx�7�%[��8�2V���z�,r�l�+q�{�^F�w[����mS:q�2yB��"Y�D@Z
�8Yh��ai�d����,�����*3������U$+�*�%8C��y�"
��VL�;�D�j������#��.bu$��zy����U�����0l;�������q������K4�������M�Y�n�U.�B)�Z��E�7�����
�7�f�s��fM&�L��z;R9�[*��'S!�����Z(
�6������g�����Og�|�Y���M,.�i�4j�!Y�OrI��i�^y�$���Y�LxnY	���4.iz�������W��^�=���VO�\D��Y�I�A�d����D�I��EnL�\1i���&>+����`+�(����;�_A����c�t��4�"��"[/d+<�p!!I����x��H#^UPs7�?+H�8���
,��C����M�N{-bmuY����l��w�otg�����	�Xr�w+/��#����_@c��1l�d��"Y�IK"�z�
����:��}�u�Es��u.r��?�����o��&�Y
NO�1�+O�y
�e���@l6�(���3%n�t�|���q�2!o���uD��:�����Z{����� �3;W&[G��x!Y�:�VE��4#�/�-4�������#NH,L���:�:�""�U�����V��fRl6�:�c�nLxI
5����a��MD"���g?�T%q)n�)ldXw@�(���x��@���z��J*�_���"T<;�;���E�������k"�5/����J k3��aW�������]�wp�;E�"���Lb�����+��s��J����W� #����3���������dYn�Q!��n���Y�{���}���-���������At3z!���e�fP���is�d�tI��E!q�ub����� ����)j5��?�,�\^�����Y��\~��h����h��.�n�������VR�i���������1}��$s��Z���X���s7���3��������'�P�,��p��������\:�TW��I�gU�,��3�sU.c[��8��i�������e���������a��i	��)�t*W���/w�U.�w�_\=i�����d���N$��H���O��Q1�@��Y
������|�<��Z����l�����n���D������1��Q���y��>�79e�3X��EK21���1���p��D�]:����7���e�A�p1������a�NlC��Iz����ev��oy�H��0���t�X��E��- ��d�e*��Y���.������O��"0'�����hb�e�!��IS��(��'�!UoF�v��/`�=�eS�, ��1�F��o�,d����D��E?�>~����s�/v�-^���B�f�e]��R9;}b/��?�Ol��/(��Is�,$��w�������|Q�O��}U��Bk8Y��x�7d]"��Z�����_�M��h��}
�*y���v���'�����3$����Uy,�����4HS^(d3
����V\Q�����lg�����,�a�W��0W������D7q�\k��\�t�O;�y%�
k~M<,���(����qG��3��(���=�AS<���(RE�����g7�d�Rn�:����������.���WM��s�|4��(s����$���{z�d ���O���6����`��O�|����"	���#��3�}����3Q
J�-0�c���Z��'��9��3��j�e[K��)��`V����������%qcX!7M��*���htXPY�X������3���H�&sL"Z�J��u`�ea�����s6�����40�����uD�R���f���`����z�Q�@�oJ6k ��YG�.��F��B?��������
t�uP��!�M���nBx�NZ�pl�'������z�������:��S���3Z�}���L���J}:�����7�l��7f�CE~�}���E���p�/?��
�[I75���v��_���j��q��a�����L����G^��{}�����~s�/��vD)��_�CG�e`���������?�j�Dxw�e����2��c��cn��b�g��;7����n_&�,�E��x�U,��,��J/w�,���$Q����]�����YN�HzwY�a&Q4����x�������8h�����g�i����c�������z8�����8�I�A�D&�3��Vo�8�_�T���f'�C�T�	
����J�	{�2[�MK��@a��u�4y���f"
n��n��,$�2�i.��%;��3��$>��b�q�>bia�2�G�<�_�z�_�0
�����v�|������:N�S3�c����6N����r�H�\pt��4���@A,F�Y����������%�p�?:h�-������^L����Ro�u��K����ba�V�TY�:���w����n��/d��������3�F����}�<VP_X���^�>��3��q�g�F
�@N�-t/VtN
����<�����@��4�w��	O��<g���Nz�IC���������������W�_������|�����sV�<+����&Y����|b�~������q��������*�UO}�W���
������mc"�h�[�HR�7,��~�C�z6��E�e�@K�Nd'������Y]�P����xEe��"�������c"j��
kv)��'��Zr�{G��2��]��'�"}[���d�[	24�y�7��7N�~��������?�D�LM�y�����O}�E����&�]d����6R��JD�\��.����mP-CR2��w��X-��\��������uq$^��/�DdMU��U���^�}�_hD������?z�m��B��I����F/D����)t�l����!}�oa��������ED�D�(���F��zI��7{n�E�Z:�w��49w�U���8u}cA���e���k"&�&-E��Y����<����4�����
(a1{V��V���L4���rQ����3a��0����^A��F}03�E���dg
{���b�	�hF��d���y�d�0!���L4��b�t{=��,k��s�
��]/�@�b�?4L��x>����	P,f�d' �����Z�w�Y���t�a�����Y�t��`�G��3Q���n���EB*�Z%7�&���bP�wL�o���v��<��;v~�H�{��qC�d�7�u:�g�7U�;�?]&e��3��F�����l�f�L�4�z���X�~3	����JzUc���N0L�LB6#�Xm����l�
#'{;�#���h���Hf)���dz���l��YA�����Z�
6])���4c�� �������r�v�!�B��	��d�������vn@��	�jf���E;�$�a}���)�c����x2���3��,a��G2�YM#Ma��-_�_$��h����C��t]g �6������1��BQ��O�pF*�����Cj�p�6�~�L�B�H-L!6�fK8mS#��$���
K�J]�����+�#l`��5��%�iV�a�X��QM��^�l��H�7��Ffa��� �����Q���v���9��.�1�R�������yD�:Y�������N� ]�@���ab$(���R[�������% D4����5��

�`��9�>N�?�n	m�*X��)�'����Qc���m��	�}�$�����x��Sd����2Mh�e�a��<�z!������e&>+P��Dx�<����f����:>D�<�$��nFK���b�������8�
8�4�i�m����j!�������D�u�}�����G����1��� �-������/+��z���l����
vDg�Z�K����SCH����M-��T��z�����R���b���;qD�f\�m��0�j�\��2FO�U!��w�x�~N��w��`��	���]�,=��T-�������'����<4Am[��a/=.��W�^�c�Y�0��SV2��D�]l��IQ N����,8~T��f1�������m65vl'x!{��W/ ���$s�S������[C�:a���v�B�l4�'=gw���a"�U��`�|�_"�������c7���T��\T`$k�!�&?+)?v�i�	t�l���SJ��U7���N�f��:��mm��C�.����J"��'�m�xZ?h�:����H�z��N�%I� ��F�������HI��S5�~���H@u�5i���T
<��-��+�7k����	�t�i1�b.^�5��4���G�7�z��k�����'��K���Zqb:�>�c(�+�iE����&>�����'�=XLt��<���<�Z��R3��f@�*���k�!���M��m �[-BYt2��Kj���z�����6F�'_}�tK�k�[S���~��F3�/v`�G��������o�y�}�LNF�g���7�q+�#��F���s'g��y��������Zz���8�����|�������H�������y=������_�{��$���m���������I���z9z^��^.d��2a/'h\�o�I�3Z�Y�^.�E���0<6[#�����BPap,�O�������*�OX�������/Z=2zC���Rp?�J=~�e���xW�j-8��!�����Z���?���a�x�������cz^DO4��|�Xd��%����'��{.�ZH���3E��>�Y��%g;��G�����|^$���V~1;�>!%�����j�0"��U���~V3M�9���t$1�����3QQu�2��UM��2��������_�����E��k��^��<����MW���	e�k����
��/^4-x�F�T'�z�Vl��!����'"�������'c���p&[������F�M����?������Z�>�c`a6��,W�T����=�@��p�*Z�v�/�TjZ��	�g�F2"'����.ajv{�
��~���N�J�����z��-�Xm�!���6,�����8�_E���e�OZ=:v�6v�����V=��w/��k�w=������w[�J���/NA V��Y���-H�*����
;?�/V����GiO���@���)Y)��
L�1-3c�&������6�-����]�`DB�4K)3�_���95�q;�z����8nr�.��6���bY��e��YrU��kU=M��To�#����.�+6����!dM�>^�����9k��
�`N���opo��-�M�	���3�h�_x��4����%v������)b��B|1��`��B%�����$6��y=��.�D��]&m��U��C&D�ag3�,�k[�07�]������t���0��"�BXh�"
	?�e�4���,3-HI_:n��I�������^Em�yj�������D
g�!_l���y�z9�~��c�G���4>63�F��Ms|�6��#�c��#��6�E����P�X�#`�di�`��Q2�W/`#�	�$[��#�L4K�D.�0�K��#`�}����[��#�D��3	����N#�T�f3��iu��L�q��������F�3�
i|0�#`�>��:>t�O�������1��Nb�6��cq��=��7u��.���X��mx�����?��]�����v�����6_����|�\��t]�|]V���*�����C��%�H��b���t���z����^�_m�~������*���|�X��S�A����� ��1�eH�j?��~�W�\u���:]���+W+�t���
I���b(�u�����r��b��l�vY��\%�Q\��.�b�e�e}���b�<��.%�s��R�{��e���1��ty.������tY�t��e�����R�6��-%���c����G�@uj!������>k���s���Ob���
�t���?)�\�|�~�}�U�����u��{V�{Q�6��Z4�&�.���s�����s�~������u��=�t=,|1_w�C������u��=�|�-|1_w�C������^���?�������������.��w���������\�r����6���K�3���E����������*����
��'�����U��?yv�O^�]��Wa���U��?yv�O^�]��Wa���U����
^��W���*x�^��������0Km�?9���S��dz���������f"
�����'�j���N����u)s�JU�Re�!|	�z��2��Ne��2g�!	��<��#��T�{)s����2�6������X��.n��:7dT7q��_p�_�@�\�,�~cM�?I��g�J����n���y�2�`����t�����-@�9������G�|2�yd����.�����������a%��"���z�J0+�1x����eI�Bd��T-���j�2����&*�=�!n#�T	���*J�����;?3��(��&�
wp��	W���u���D�q���G}�k�������}�����4��7Ns��e]�0Le4���9�HV%4-�fA~���=����c�w]��S�&$��n3��1�-u�M?/ty��M�t�Sv�2��G��������B��'�O��38�\�d�B�����GT�]�_Q�KQg8��"���
k����,�"@���|�G�`I���~P���,�t��P�m0��B0;�FO�<���diF���7,e7^'�a���� ��,h�������OX���b��^���\(�BN6nt"Bt5���Y����u��;m�;�{�-��J��iy�dJ{�"hK��7���3�u����hu�Y������)���:��z�TKeQ������������_l5�wxc�w&Y����z�o7
�K��]8NO��D{�����.�U��b7�\�Z��%����+�(��*�}uh���A�"�]�����a���d��	�:��zvw���G��2�0qh�p�y�-�
�2�)�uw��x!���3���n��t^l��;}p��8�������B�4��]v�L�\��g��D��m9�d����Y��Y�������f��V�$P'���(	H�l�k0F�`FR�]���R�D
�Ey��Opb��BJ����mx0��E����V�L*7�%�����%>%*���m�+�M��$WX
�B�+x^"^3�d=?W�]cUy�������S�n��T�d�p(�d�0��������L��e����G�,����$��'4��&	������"#5��`����T����c�OP�B	\�VF��bB��hg��7:�8���mD%���a@���}�/�=����X��%��?���3���7���T��?��\�7�F��0'b��j/�;�1����c���\����Y\"������y�BR(��������P|�P�;O�~^�����$��#�8pH��{�?[��EJ %P������_�:�8�������P���9���_��8���N�'x�H��c�y�<�L�b�r���0}�u�j�M�Hyu �W���� �|~V�����3������2���fZ���a���t�rD>��6T���&mW��{cHG���C��3�.?/b�)���>�ZO����Z�1��wq��D�o����4'������[+A�b�w>�;Q�� �����}{�r��J.��-�*����	��ID�mL���i�K�I�#m�����J�>Lr��]��;��&��X�Q�C���U��6������������8��
 +�OG�Q�s���]��e������;}�>&��B;��f"�P,*S�	�,zqC���z��W�n&R��T��:�&=���{�x��%}��1���D����4����`�����L=_�$�?T��ke0Yt���@�.�j���'RBm7�opd�h[j�`�(��F$����% #�G������vE����S��E���#,�	��r���������#� ����f*\dE6��t�22�B|;�l��V�������h��Mn2e�h��ol����Bj��>�0�'�.����B����k���#M�@�4pQ ���:Q������!�L���%�j��p$`bA�T9)	��%r�l�����G�{�����qK���`�C��a��^kzITu9R�rD�f��d��	�x�5���)?>|���i�a*D��a��&Y��� 1��A����{��f*������D�o��w�gV���7h~/^;��P�(|&�+���!G�w
-�w���BU�j�t�T�6g'�����\����zV�����S,�w�r���8��b�0���uC���DY{�$c�]������"]N��q�M3`���K���)G���B��4��p����W�||!23���2�>>a���m���n@���'u�=�<t��<�a�c��0��*�N��Zt��p�X&���>%�
�����fG��Gq����=DL�&`�mi_��'{x �%��:xfI���{9)����Fh��<^@Vh�
����O:��u��G@��4�8�x���m�U��(�b	Q%��6�b�X��L'P[`��8�M"�L���Q��9kQtO�B�����M	�R��^�u�������%*�����0xzX(�x~�P6,�h���J�<ot]�g����V��X�8�����aW"k�E�:c��Q1-8�����O[)�x�J���-B��"�3�Bc��a���Y�lT�im�=�5W+c&"�U���M6����w�X��%�����D%�d,�:8�lA��$y����R
��&���Q��:������AJ mw���OJG���T3>@Q�T5�o�B�q�Np�k!�����"�1~��x����zA�J\S5��
.�i���-()��!���N�t=m�u���4
�~�����"_�mF�����v���I�`@�5r�^VT�f6��X�d�_H��2AN@��/T���M{������"�������I1`�_���;`�]2��a��q���HK5�gT�d�_�[�=�E��3b+y��������������Y�~���^^(���(�
��|J&"#���v!����D��j���l������4�a�_H��K�vU2�����<O�L{��r,(���R��-��\n���3��m���%�Udv�y1���e�}E�a���9�m_���
���N��d�A��#����>Y�M��f}�_������|�A<�=H��B������:��f��O���g^Hv8a.~�\N�z2�UW2�x,���Tn�0O�9�WT&�-Ik
*���|Y�<w�������[�������|8�����u�1g2�b���-�GT�U�A�@��2���������E�;�X8�Bu���"o�t����uzl����G]��iz�8|!��`�0k��bx����?O���+�k���J�' l��
\P�3 Ym ����=��[������p�d3k1�A��9i_v�NGE�x����dB�0C����7K��
��y><oTw%5���_�X=7fClv�+Obw��5+�����?��t��.s�Eg(�����o}�����3�q����$*����'�����<����{wo����{�����(N�\�
�N��OMTa?3��m���3����QF����o6����[y1�{��[G3���u�/�f�����F}3ws�f�f^H�#�4J�a��U&?/���I��m��^L�����d[����
�$���������i|Q�
�@1{��������=Z�vP#\���������8��=C �p=D _���|��c~A��v��z�K�y���
M�=2�13}j�+�q=���"���0g@'�G|C%�t���P
.L������\Bo_�)@��������N�o{��IG���)#{�Ie��(h���������8��H�=F~��|��'Y������jLQU"�]�m�"��f�x��6��r~=�~X�}��"p����WV6��s}��"�N��~���pe!"s��:����G;����J���LDG+�d7����h�\�X�i��o��0�����_����K^c����`��WlK���|g+��y��y���qM�����H�4�Dz5g�nF_Y���]����[���@�w��pFkE	0�'��0�x3Ry;s*e�L�VT��
��*;r��	���!���n
)����E�0v���m^����]Q���������5��}YD�"��"5�m�0����u�f������#x��v�X�L'&$�u��e���(����3-��)�[�#qg���H[���8���[��v���
���jAx+~����>+���v(�>(���"��+�d���Y|�A�����-�[:����������zBT���Q��ogD��X~�b��wO���u����-��Blz�e���+�J0%��O��K��XN7���=&t��\��{�aEF��[���x����].r��B���s4��/��������o��4wt����5����Y�b��	pcz�p�'�9�+��M�{)�������u��!�y+/$���?���@J�|�������#��ztO�����DdDa�7����YL���	���`N�^iA���gs%Z�+�8�o�V��4��N�������7���D��W2�
��_���h���\+R	��2D�_H�{0?2�k ���6���g+�AJ�|K����N&�\c��[���
��^�W)o��1K(]p&�L�}4��[<[H�8��Z��]�{`�F�,��}����N���6�������8n�b�+�f�-������d�&�L�]H�
�`��"�-��W!8T��.���pQ��k�v�Y@�h���Y��ZnsokP�|��na���#���0:�x��[��(���$��CF4wE��)�%�..�LD���@>������&�7(l����~��>H���N�
���P����U��H�JT����O�N���4&������maW���3A�pj��c����������T7"���pY�����r����f�~^�[�{3K�M���$R@�[��K%�]^HJ�h�ZV����7/�]�E#n�"���H�%�KwZ���n��z�l`�v�l���9������6@����f^��/�d���G��`B�;�D��3�����r�eq&*��q��AE���/���u>����/$ ��=�0�~Q��V$�/���7�Z����u>Bd]�{[����lO�.T�[&�S_���X�Y��%�V��nO���Mh�h�O o�MKH}'=�N+�����BP:]&A[����H�fK����������$��������R�u�~����/�jK��h�������|�����$C�N
u"E�M��3��~f�e|��/w���(�����x��j����P.����1M��}��	p��Z-�jLM�D���c�*�\�ebU���oL�@����bB�����s�H�#�3����a�vKT����?��1N�z����$��V�`��B�F���0��b		�\�]1F!�Eov��4%������M@���D�DX�������Y�t�����*��vhHW���=����:py�q~�N��l����P�p�C��@���Hiz�f1]��13�����"&�V�d+S^�" ����Tv�)��sY1�����b
���U1�B	�Q	`�������E�ZEy]��FR���&��<>+��e����og�����,k������W6V
������:bK�;������u@&$���3�v���o�*��1��0��3�"���j�jg�)����]%>�B������G8�5�g�E�����#A�d\}�
1j&qAZ����D����b��A�I���F>!�<6����c#��V�����U[�u�:3�o��h�l
hE%i��-�3�(���V��c����L�����y��Tw�������G�5�f</"2�P�8�����-�L=o$�;����	>H�gO���y���F�����E~�������a�����>H	� 1�B=��6s�"y9��9�0�����+zB��%Y���q�?H	���t�w�>o4��S��/�Dd��{b��e���A��,CO�I�V "�l'��A���&7��l���"-�:�g��(�>����G�������@�`����'E���OJ{�z��	�DT��+��^4@R�������++1�8�����6��&���<2�1#|�$�pN;�s%�sl�U-�l	Q���+�j-g��Tk�����7����jc"��P�o�y5��+v^<���P���z�N��B0k�`���cYQ�	5����V�J� ��y&p�Sq4�Ee#G��1T|3��*��sE���P�6���.=���m�L����u���-H����c7}2��D<�	�J�S �a�P	�,��}�������L@D��O�X��o2���Ve����5v����Mxg������x����������������5�J�%�`Ipl�KI�W��5��J�����l��Mh>W���F*fk{98�DZ#�z���u��^Ce��V�@���Y�bE���TWb��B2+��������vda	��z{]����k��v���H��l�=�:0��2t��8�.���e�'���s�}n�j>����DF����/�cR�N��~(V�D�B+W�U�aAO���Cu������#����M1n �a��uv>H����|����6t��\Hrc��@[���D�u���4���">l���1l`�<+�1������q���H����#�ml��~!s���c��#�<h0d��,���cw��A�!����9��_hz�
�H#4�YLN��|���p��<�F���@d��6�{��
�&�0$8�1�+/�������A����b��_���q��E|�����z���~|� @�\�6�ZVc���(����| �}o#�����������At�U�O9�\�Pa�ZH��T����d�����{���G 	��A
z�4z0�G�&XY�9T��u�4!��]%����_(��M�~T��{1�c5��xn��l���e����Y���������K��C|/�X@d���aB@=�0���-+R����v�����;eH�2���^��N��z--W�e�J(/``
<+����/�S���N�i�>���
&�U��a�NB�Z���eAv�?|!u���LbqW�����~L22����_�����C����	@�����y������
����{�	��:�t3�J8��{���1,*�)khb�7��[Wp��:pQ�F���$s�	��gE���]�������A��2a�<!����6������[��Mt����<���QS��_cy��4+�,X�r�3����2A������hbG-t��Puz�\���x�?�r>c������i7�[+�D���c��r�+���Ac�'��	���W���I����lP
���g�=��+�Y�w{f�'$�k*�A�b�`p�*(��9d�.���+Q���&-��9�!���g��L��{lwB�g�\�Nt��.68/t1y�y����������SzB.��2Q�x�I�T*^���4��R��x�o(��Qv��$������D�p�F�E3~Y.8W�$�D���7i�2Q@Fj(?/��X������B��,Jc9a��thT�Em����V�L�)�XYr�l(�;\����7m>�R_��|�k�@��K-�#�c!qB	�cpK�<I�����?�����>Sh�L���I�	���@������i����9;	��k!��:�sG���(3������F	�p����~��:���x�R������b,y���.\��<pW^4�1���g�������?9%���M,@�������!����>���"�`���s����:i����D�:I'KM�M�%@;qq�I1��u��ZZy�-��	�|�����J��.FF	���������Y�}j&�S�b����iM�
�[�C���<��t+��f�/uQnpd����b�3�������%�+�a��6�a�"�:=/��u�f3)���'{:�a�=]P��7OG��te�9���gt�����Z2���mi�����1C�D|�S����
�kJ��f�M�BD�w��,�%+J�T�z�0�X��%�x��J� �J"�
�[���=��L+�N$u3��^�Ot4�UV2-����BK�"X����������H������Wia
f�{����.Dd�����y���+j�h��%%�SO��X�����3K�B%��%e�lIW�5a�ms=L�5W_�	3 	�[2���L���������;��h�'S�������H5�%czo��lG@I���u�F��Y��K�c5���j4���p���m��$������(IO�/��2F=x�-B���DL�^t�K��$��m�T��=3��ID�
Q&�x����h����	�hI�dtQ��R��'%Q�'��S:FP�Me�����|�G���G|��57|��j}8�������T~V��#�P��q�~&!#����D�
U&���k�?IA'��n�d5�i���B%1R��`Hd�u(
��l�#%��	��F_���|��gEI�R?�x����I�C��JfkP`����d�R-��J��Oa��s�e9>,W��_>F=Bd��������g
�f6�x��xG�����6s��D���<���
s��I^��5�rl�#"��b��E>� F3"����V{e�EQ:�r���r��\������|_yXC�+���k��a�LlH���b������3*������2��
-�������	p����0Fdu*�%
�?�v��K�0�/}���%�,����(22��G:�����F2LH�"�HR�l4�"r�>Jc;�EnL�I���xz �,�����]N=N�:�jlz~_� ���;��i�������6��p�N:4& e�e\{��&T~u������*a��f�R&�����j��[�gQ������E��C��W��������}���Z�E�JP�x�����y�� ����2��������:�3H���r���|C�'��(7��:~��X��U��dl���������%�G���Krf���,�8g�����x]7&�����rNy&��c�k�`Q�O21���sc�Q��^���W0f�L��
��3��k��<1���@��,V\������'W�����F��c��[�CF%��' �6������0�.�^�:�N����=�{���>�B�|�I���� T$�D���|n����_�^��(�j��k&6
u�F�W�ID>%�qh��S�|�e�}�MD[�F1-����z���b���5Z�y=+��h=8s��(�cQ�O6(��E�Aw���Zq��
�&����eD���g*�L|8�����mP���.��-���W��3s?+)> �R�J6�G]���k��1�)�L�#���a�j�F����=�\GV��X���.����I'@1�#��%}�w��'��b2�A��K�=�)�L��!kd���Y#���
t�]�"���A\#�<�l&�R1���4R@�Hl�s�1���$���D\!gE�e���_��y�n&._8���4D���#����qB#i�B0��b�T��DLq�^r�Ce��'��;����7PI��3��6U��S���IFM�4����2�qC>�����|�?i��M�3!����g3����f�_=ZH|�'�,�'3������
L��������3Nd�<��A�Eq�BK���?�5k����X��^�|`��>�&���WL���_����aw����c�"��������EBf���$�_�z����~Y1]����t"�}�����b(?/b3Y�Y�d�9wa��"����N�0��b����Y����H6��Z'�$7�P�n- )g��N'���i9_�E=���%KZ��b���w�1_��t]��>���)]�D�qU%�<zM��]g��n�Yv��e�u+;�G��:�n����ne��(;��������R��0ZF�j�_��~������e��I~��\����~�Q��5�+,���\�&��{��c�__��4�o^��B\�������������/���#���st���s�b~�����~������}r��z�^<�������CS-��A�������o?��������������G�1?�WK�N��76n
���}�7��E�����]+GBpsAYz�O���0��|W[�����15���GX`b��ma��tZ�����[M>%��#������Y��K��I4��"EC��Uv+��[��6K�����8>���H�3�IT����ogw��|�#JV��o����g@��!�u�c{:�g"�.�^�<d�.x!��n�,J��LC�;p�<��������A�=���R��&@O1r=�jn�� %P�E��\���w���B�5J�����
�B�g"�n��zfwk�[eQsl���@�t��U?+)	x���<�r,�^O���P����E\��hAU�A������t�N-�7��X��f�x����p�Z�b_$�����++�d�~z
�XC�hN8V#��PIW����bo!����z���������w
�W[I��c{�!�	�~#�,���#��~sC�Jj�|��UE_��������'>;�C���95��V;�=T
�e�d�u@#�����w���>�1N��7��,���3��*h����+�_h_�De���n�}�������Z��7F���}�;�
�7�����P�E���$qV����9{1�"=��U[S0��*�^jA6��7�(���iFI����d�������=����B��OX��j���
zkG�`��.3���2��z2����+����Y~��NR���t]�+r�w��M���������g2*��+���G��LT� Z���Ic�b�^��ibZ�8��pW�2m�d�'����eT�U��u�^�<��M-~`����,��7�w��X! �JTo;X��i������P�;;L1���}�w[�:����1:.Z����Y��83�#��@�^dE%	�CYO��h�����c��`�&;�>�����4I%
����F����Th��W�IT�d#uVaE�w�����W�3tU��W���J��w���)
pJS�G�@��AH"�����umhz7SA�hA�{Q5�/�;e
���s���0;�J�E�Y��������&�n/_[[����+���BFs�H�Hc.)�M$F+��1��>�R���?���M�:����/�
ZQAq
hA�}�	�g��q6������Rrz�q��������[���3�b���LY���N^��/DKr�~���V@���A��D#I��\10[���dQ:(�KE={��oAD;aH�T�u�Y����z�hF�{�T\� ���*���v��x�����\����@Aj�<����m���;�����%�jg*����tR/���L=��e������x�W����A\����\�k[����;����G��������,o�U�(�A��X ���6��F�4Q�D��xA��I9`HV$���.Z?�5���b�Gl�<���Tnx��)��C���,��6���P��a36���z�7���E�y��5����y��>jn �8��)+��
p����Bn�����Z���
}-S;c���3#v�+���*E�����#VT��)��u����.(k�v�������v�w�����&[i"4�H�d�z�X��+�������������	iRz#x��tA�Z���������9�Z���� Nc�M�%�[���= *���Y���x�k���T�P�A|������������w��O����	�����F$��}��������}c6s�-�.P�(�`�[��,��D�qN��S.3eh�����Ddo�����W���T��& s	�Rb���o'���8�L
4��\�BT�38U��wQ����z-8�P23�x!!{5w*�u�F����C��K�<����.�e��)����*-Ddwn;<���#��.-H@L�tw8���4e������(�.�����&Y5��>�4+�"7c6�����&�D����i���E�+s�%Er��R�\�.�5S��enZ���{�H��%�G�R��L�T��������MP��.-n�������z}��=���x+��H�����s{[���d���uOc�E�����!?��V���M����������������gr
\v�"���u��b �N����9Iv7�z�	��)���;�	����Nr��5l#{���S;l;&�;�����I�,���M�!g�����3����h�{A���p�Z����!���Lj_g������',_u����Pu'����M@�l�8
3�"-��{�n3�nf"���>�2�u
Y�zo��ng��Iv�o�*:��n��}�UKF'-,bu1e����;�~�l�k��3Yv�;�������}M�����a�U�8�I��4kog����zZT�6���N�����`�5:��@����jo�p@c�������t���3A�hQ��=|:�[3����������VO3[�i�[e "2��b��1���3fXfr7��AK��B���h����&br�cC���������l�i�3��FM��N�������h��WOpHT������N��Y�I��l�e���)�I����>b�[w�U�����'V�Uo��
��M2�l`�pZ�Dg���Y���fp�st����k������?I��PC�xA�\W���X�$��T���\(����I�I3�~��-a�9�l��6��k\F����������=�%���y���b5w�f"���i������
	��x�M;QK3�������t
��t��Y�6*��4]���r����h�9���/`lT0��Ff�RCl13��:����&�m���7���|�H�}�w
8���Xl��m�y�b���{�����<�`=�L [�������&���X���p�}�y1���'���$_e���g��}��qq�!z.�+W�d.��
�0�U\��Hq$���SO���(n8_��|�����phx�7Y�C��`��)oV�/�������/DPH���Y��W{%Z-+E���]O>~�d	�����|�/��%=�Ax��i���&���W@��I,�x��H����l���k��_��NG%���Wd[�u�����������j�K�E��y����;�x���1L/,h�7���q��_�`��/��eE*�O5b�a��yH�,nX�&�'41I�B�m&�����1�����{ZR�	F�+)��EY��|�����G�S`aX��,��K�X��:����%F�l��""{X�:@��Q3
�����|��~/}���?�i���:<b~��^(�~so��S�4H��b����^���t{&�Vcy��O.n�|!w^�so�%Tm�3Q��^�~CX�P�Bc%"��������/�fY��~�V��PTN���*��,Xs�B�N�<^|��2��c�T���3��T��eE��ES�7������	����P�JD��MDb�2��k�^H����M���2���;W��QQ��S���+��9x/$`���~�\���|��e�}fe�� tE,�5��6��@qu�h&��`���T	�k/��/�wp��\��L?o��7X�������Hd*��0=�z���^�*���8Q�o��2��BYuQ������]L���*�U����C)���n�0�II��K�����1��������e��5�9!��+��q~�����S^H���������@;�L���2�61�K�_H���]�����v��������8��'�%�NC�}�FTgQ��	p]��i?���O�D�]��T6��E����|k�Zm lmb�Td�E����-���S������2������sC�w=sF@=��6�}E
�.����_�E��5��w�����H��[nu��k��=w�b��	8��_E=��b�$�'_�<c\��������x_{����^'Rp�}��o���W��j�PB#�t�����M@��^n� �5��^�����~��J*hQ����q��$JC���m*��)0F��2��e3��!rF�s�f)k,w���#�K��J�c6���(?�L�����$��y&�!�B���,���'��B�%�ji�,��	�_��o'w��dD4���-$d�4D�4��tED%�}��,�`a��$�"�>�BJ��c%^6=
#Kt��@������ ���^.�\��Ns�W$�*p���8�u�d��b�J���a{,)����UT�b������I��D��F�;6?/��5�2���-�o�	j�vY���V�)��o��V7B�l��x��&�]e���E��.�v2�^���!3����#���i(��^HRQ5=�D�:\|~�1,�'������+dM0�����D����v�2�"D'���iZ������a{!'�o���|�@���d���H�m�i
��b[T��k�v��9��"�HC.>5���9wA�����A/���)U������,/T��`���-$5���AW7���	\��M@,�[���MR�y�I���u{���YQ����m��s��|d�"��7��y�2������#:5��w��G�����$d���jv�2�E\�_3Z}A��1O��^�S^(UT���Y���{�1� +}���m�:���"I7.��&�-i%�,Q��K��US����v��1��T�"3����Hdd �
lPp'�~�`�M��~�D�b���n8L����[�^�Vs��y�$Gsbg�[Y�.�(t��N�����z��,�:D��$�����BR�sG��|`1Nt;�����j�1x���5��x,�eT�Kg���Cu�2���sZz�d����J�uQ��Xm�Q�oB������[&���h��X���	��Y5
j�\�:���>rWL�������
�~��d��fO9�q�c�8R�_��s���W��^�)������7{"kL9\r3C&="�d;��&�9�]f���g%�-�)3�b^��1��B�Xl��a�[�v�S��,�KF�����n�'�>o4y���(�W�f �����s
��9�t�?���;(3�b��I��i�G�v�p7�x���KC��*o�'��9�RR�Z��������PU�N�������bIQ��*�7�������N���#S{��FR�������9.��v��n�}�������b�����h��� fm\��"�D4��(��^(�*A��\ �ly.�*�m���VoM3B��t���5*�W6&{���Xi6E[^L�����K�l_g%���V�}Af���2����?/��\����o�F=3i��s��+��Q/z.���"+��O`G���ep���<��"�|�e���t�=��F��h�0��S���`q>�'6���j�J�d!��B���6��2�W��q���
�����P�O��/�lv���n�,��k`�.�S�|��Q^�2L��������������H����').[M�]���f�~_��)4��q�i���63���/e��|�wOU�#��G�>QT*�������A[����r��a|P���m���_��CP��)�w�H;��I����D�+������3�KY\)���������"��5Zs`oa8`&��Dh6w��G"�M�3'�jr�����'Sr�t�Ecs�!����D����l���N�	�� Z'Gs�����c������
�f������0���r�i2|��~�u�M2���!��:��;\���������O!.��@�
�X�waxj����.Jc5m��dJp��I�L�md���r�z_�UjO���
os���x���h}�����qUn%#$@�W��G����g�}|��Cr����k}^H�L�8aM{�{V��D�#��t�^D%X������9�/���is_N�[@2���� �l�"Q	6�"�N����.��Cm�4�������������z�}��<�SH�rK�4�����h�a���.�^(�S��@�+�D���1��ZTbA�XM�K2�Q[O�<�tt����%������������1�u��pea6[���lm�=Tm�*>��,�����!=9B�w���R;��Po���&���{ �L8�=Tc��L�J0!������IG���O�]����*��$H�%9[�dk�r��6�k��JDev�����0����	)0#����_�yP�0��N�Fv�5�ifW_�e�������R%�����i��b3�#9k�;�7������Sd���S�ic�<u���?+����
���}���>C�fR��������y�u������!0���������V=����`����&X��e��LN$����5>��LN�
�
�I�T���G�yj�r����=o��N� X4�H/��[�U�P5��04�����iKW"2����5,����_���j�����G\�\Ra�=\-W�����-�������32�����=}�(�x�*�Z������&�(-ws)0���W�Nnh�~6���K4���]Q�N�M1wpZF�����6M'��w{~�!+�����@Q�a�����$���b�2�C�g&�{�.l�O�pY�4�T�����bzA�Nj ��I�.j������F}��sE����{�4�BN�~^�,i��>G���������[�� Ul�u����N�hz.���9-�������<Wf����~��6���yG�x�G�����!�q4�}	��^�@6�9�u���D�k���$���[kA�6���������]��eE�[:����	��]�H��bvpnv%�����I�|�0��|���O�����3�ys^E�@�E����<�'�w~��8�����u�����^�������b�P���4��(�ms���w��2�`�*<3V�������Y�;*�����J�C��`(`�f���yB�+������"0W}�>���d�8fR>�9B��$)l������z�A�������;g5a�}�Q�/T�V�4���Y���������o��
���@]Q�Yib��������y��o��A�����;�|���u0����q�v�3hR��v�Au`������63B���->cZ�6�L�P6��3O��_�G �/
����mj�r��o�i���aC�����i��������i%�Q��D�*��3�:����gu��Jr_�r��{���������/M���9�s���Np��i�=��a��"6[
���y#iY����g-�����%>�)]���4y�,��������=XCT���0�h�=��6��J���F���P���j�.��d�4���q�i�K���t#�_S����/��YK��	A���[Qqf��(�P}����
[��}qQDt����C}\,
�8�����
�)u�����Z/g�_/,�6����b��v�Fh|;�#+��y��h�;:�P�*��(94)�W`i�F�#1�E2�������o��Wgi����hk�4��V���H2�����8��V���8�E�{��+q�6-����}��D(��� {`��K���(�j�"������^H�)c��s���m����f�tV,����+63+	�*��=��V������l!
����
V�����m����~P&���]w>�[���t	y$����"P$ITe
�kK����#����*iN�:�(�2"���������!����\�!�5��w��~�������/���|}����������u7l���?�pQ�H��[�����������1��gH����*���eu>����14������S��>t]2I14��Kp����Y]|V0���Q.���e@�yG$S���s�0��M%��[��)_
H���]����R������9(������Dk��a��6����((�G��
������hn�(���!���BK0?�4-�����M���2)�Sx��	�c>kl���
(y�]yb�m��%V2�Oi���]�z�����T�b=UW�@�,��Y�GZeG�����c�,R���������U��f�<+�X�^7��Ed&��L���V�)�X�Ds��p����BF�jQ�yI�{J�Q {������N�/\>kK�`Y���v,��=D�	v���n�	��T�f���i��z"����3�pO��%�[�VF��2����]��	�o!���Q����r�7�.47|W�)U��dI�7�;3{3[c��-d����0�1�>���d2��%AT�}QF�@4.Z�K��[��3�r��d����K>������A�}�~j�����48f�p��'I��6/���F�A�q�����
UT�j�+��'*k�Ok
V/MojFo�c��{�7{\G�{&����E1{��3xe2e�b�.9=Tm_�(n�.��e6����B4/�b	~���D�F�������}���
� 4��������vk�}�]���L\i�����-�<��4�`��2���u���o��<�QC+�f0��o���^���f0�)�l���U�^���\XL��?�%�D�R�NKX���0�����`
/,"��[��.����0�)��^����)QK���/�:��x�RE��C���K��0�d���!�|�.D�������A��Ar{x�I8n����k�(�|��v�1�D��^���t�������zV7��F��V�F;�����������H���Pj$���-�$��#�
f ���n/�C����I7�!X�W�@�Fp!�'���b��`3p�cR����n�j�4�85]ucjt&.7���F��$)������!�)�:i��������A�M+�Z���F������7�����(22e���Ygo��E.�����;���S0E~�S��D�4�y$o�H���5B�+�t�;_O�8��&?�@rR?vMJ�y�J�<��R�r���2e�0d;=T|V �%F4�og�a�J�����Ft4P\eq�:�"��*�+�j���k���	��������>Q�;�1���9�
��)�t���A"%�scC�lFXl�$�uF��
����?���@��x��}W��{��@���(���2���������kn���������)8���8�$\Vu��; "##�/����y8V���
�n��[��jdg������|���������IN��c:91}fDr���I�"�L;���}���|��|���1���j��l������"@2��C�TE�J�v�
W7��M�2i|�L�U�-�,g�.rq��k7��t��LYG�*K�?�3��4�h
9Z=[���|h����V�,��LlL��0o��Pq���E�o�������k���������'���
��Y�WzP�J��2�d������V%*���Mb���
6��f���5��DL�E`7f�pd�"��������w��\�����U�x��H��mO����]P��C-���d{������JM��
![����ZtF"\�A�mU�%�<�	.��/�R�7b��T�#5���<2��j�z+����%%���2M��9�b��m���~��h��78�p�1���U��5��K50�U��,�`�\�
i�O����nzj&j�ny��Ds�lwrj%s�
�}V��kG���)��&~�������}�������~�D2YT#Gs�$��_��xdhR�0����s�Q��'��#�:>A$)��@u��q�(�t�$���}x������_GU �n��T�]O�����n�-�:}����0Q6�k�'Q�oH�J�O@Dh�5u�B�E|��kiH���8���8�Zj�C����	��#�4
���E4����;Z���"��_B@����|) ����@��(�Y�b���\.����,���%-���E���3��c��\����Jm��F�Q.��X���Y}��e�Xu�Y	(>+���c���g!I<�tu��� ��k?������&��pL"gYo:��8`&)�$B���t����8�b�Nfk��JD[���Er��"O+}Z,u��cN���(jn��p@M�dI���FyRx����`s:1�~X{K�5�x����@�5�GU���8H���r�\�s��a�J�w���d��f���i���\/�uQ�9�S���Y<n+�f�����A.z�<��Y��&H����8����.���%�Vz�����bn����t��O�>�1��4�b�\Xb������w��F�p�m1'�1���j����a�F�������u�J�^���H�^�&��?�7A�}��]�f�	��^� Ut��1���$�����E����������ZDa���%G/`q��������e��*.j��SW")}��+Q	���K1Ak�Y�4�����~z����L�oj�"q�NK�t�� ���f>:N�=/2���m^8^flzf2�3O;=����[�|����A?�emC���~�����x�Bq��4����&R���V�]&"s���Js�U&����W��]�Lh��}���x^2������Z����������{^���,�eZ@t5jO������#H�f����-���t0������������\7�UA���]~g R��|�4����`��i8���U��2�G ��_"(�i���D}b&Q�"�ha�dD�lihn~�j���f����0�Q$�����Rw���Y2�����|r1�~��:f	!.`�g��My���53�e����e�����\��+�L��k,�u��Z=6=X1��1�;e�K�����Vk)�����]�B?�SDEV3�8\�Y�E��um'2�y ���=E�-�����Lk�]��+�ua�<$W�vK�*{�em�G����������������z�<o����m��X.8�f��x����9���.�F�r�`�C��/��|�}.�W������/h�r���"����}�����/�rMB��H��������?_�!�?�������jb��������Q�!���n5�Y���;5����L���<�/�3���y�F��������g��s��R���6��}���N9^P�|A��r�)����x������D����.��[��->����z�#��37����=_P�f�li����k6������A��q
�� ^-J��
����{,��#(c�/*�+���YW����r�\N���@���+����u����z���+�K�}�_�}B���)�^ \a�B���-�~ \������WX��{�p�����:��!���m�S���Rw���!���k�M���s�{K��D�����DU5��h������S����)������oN
�������E�������sP����'������o����7�D���o�?������x&��/�	���_��������W�f]%{r���'��3�.��5t����_����5�����_��ww����<�2�T���*9����;�����S�M���#8"���x?����o�[�\����v�vKKy�2E�7#�2�����e�����l<������1��]��L�B
~�ehT�����Ki3*��1�r����Jh�5>�\��7��U�B�M��H*O6!y��!��_���!��� 	�]Djm<��-��,�Im#]�u�����Zv�>�j��y��0GT�!r4�_F4�xR�^�8�?��?���O?���T�%�Cx`"��D�:�g�t)rV�y$�������	����5X����C�Vb��?��:T@��
��7�;��F�����K$���<�~>P���&�CJ�G��2���{�^�[��M�f�S��AIHnbo}`gC[�h����V�v+W$Q>!�9)S�:,���k���i��}7�yyw��vS��
�k��)T�����9Qq�K���d����i�����r����P����|}��e4uS��u�E��u���q��a$4�% ���vjF1Y����bU����!�w�����`��%�DN6��62�J�ZX`#m�p������.���*�z�T:k)5X�����k�z��;�r��<:j���S�Iu��e[����E��e_=���	.�p�[
.�M^XF
�I�gk0S=j�������-Qu���4��d�
9`����& V��dg����8��@���S�}X��D�!�kr{�������H��?�����7�Ez�C��2��sP�����L���D"���9VW����'�������d�Oy��1�z���4!���~W��"������h������t��,����>d�������\0f;=�i.H���N NEsQ����z�O�#���4�����(Wz������v���bu��y�v�P��'I�"�o����K�!g��6�u�4�wa����W���@�&2I��3���������������d(��>�<�H��F��x�����YM>��Ig�"l
%���P�7Y����EDb8�A�?��m<����{�|���
��z�	PG��W"�yg���#s�����3����4����A_�z�i�����7
�������������V�6������<o$����#����������d�������x���%�4st�l��aH�G}��D����������:�'������m$Y���������w�m%���8���"p.��]�+''l��>���P�s�`�@Tv��|���y#���,�����+zQ4��oD���,��Pf�$@��:�����|Z�	�=)�_��~���3������� ��uX�c���<�1nq�=�AE�P�8e�c���H����0/��n]q��L)������$�h/(�Y>����W�x	��O4�9/.^j=�x%�],r�#��<u�0��ejR}{	U����E���i]��8�����$��J�Q3Z���H��!���%��Q���sw�'������}v�*�FV	���{!%����=���5�+�O��c�}��t�,�2KaN�������VI��k��\����Ed�����E+���.�L�HR�_��i��J�"��.��1�n���!��<��y7�Y��T_�Ae��L�|}iPA*��(��R�WwZds����J���n�����7�H0@�Rc#��J9	Do���$�G����&G���j��U�n�l�sF�	����+�/�o���C�����0�y�(\�{�S!
����Y�Vb��������9��d�R�R+:T���!?������d��G�.��^
!P�{O�5Y�h���_�`,���DY�V[e�L��QIE��|j��#�z7�YG*4L�}���]�N���G��C�}D�K\��`��3i'Z�P`m��6� ���!�}�=�p�DQ��a&j�p��G�_��u;���%�0�g�����!*����2�q�-����s����D�o�����UW�����k����g��G��b�|2��
�%%��_D
!���Qw�u��svs��^���*RK/n�Z���R�N}���C�r������g��Y�yv�*?/2e���,&����m$R���t9�~�}X���Q�//d�jv�
db�fc��E{���yE����E��)���]��	���t/���z@��T�:d\��O�h��|���"�:��������l$"��@���$�a��V�|s�I1��\f��C�dm��-������p�lI&�Q��2�e^N"�K���s�p������-��}�Y��S��qfs�8�O�D
�j<tJ��c/WT�p������6\�'b���(`&@��yp��d�s*e�e9��U�"[2R`�����p��Mb���2�f�B.^IO�F����G�B���`f��a����W����y�~0�e�*����<x�'�g^��a����_���J���	�$�<i,��A�Bf�1�}c�v���[���3��Q����bed2e��)���6�D�`!�;m,�����Qt����al��K�Q� �B��<}x(�p��g�H�n*�T����K�	)���
6�����y�Y��XE��I'a�hE�qZ'���$������)c"�Bt0����zA�J\S���D�����������38����!����,��c3G��O�9��������F�7u���h�%�e��eEr������������(�x���F��B���p��� ��?+�^���}lA1`�_���d��&�q[����Q(qZ5����a.�g=h2���S�>\�[����.)
{����E
�Y_U�C�u//��'�7t0��CWe����1�'�i_��;(�jn��e����G��[p�C��/�����v�9��m!�-��=�j9�
G�qm�Z���*5iw	�������{��^Ej��`��:Qj�W�����/?����b�����e��qK4���f}�U�>�Q�V}AI_a���������an'�-�%���v����bg���_,l���6��z!;�H��(��<o��T&����7$��i<��G�PID��;��R�3��i�d���\x�Kpo;�'}��1�p�k^j>�����I��K���hQq6�,���\��n=��&���I'1��^hl���>xG2�P�,9� <��[%��Q�$N����/4<�X7v�����w�x1+�nX^��N9W�`�7T���\���b���	&���B�*S�kv���z��������5���)�R���<IxKB�0��<��B,,(���7.5G����&�	�LP��w�(�M�������'��_�I��$�B��\����.���dn��e���D��p~J��}�������Syp����$*��\�'f��^s"��E�w����%�|��%�WGOP�H������s��C&!�m���3���QD����/6������bR���Kp�u����B���_�iG��������f^H�3'i�������y��J��=�Z�w��y1�g��Ee]����
��$��������a|1x�����20tw�/D�n��Z{P�'��>������'���G���t&A��O��4��yi�����f4]��7�xb�4��q�m}EX\�@�v��h��i�#��n�#�oE�Y���s�
S�+7��O.��F�[����[c�d'�����Mu�8�}�2��]�L����.&�aHh�Kb��_�����^r���}��LY�K5� �J������U �<�����CiBo��x���y��"Y;u��Z��WV���W��6^YWH���}���pe!S���A;���d�5����'�VVT�������V"�3�b��`���47�����/��h�K^c����q����c�[���dez��y�h����x1�w+���x"�p5g�.�����){��ox�nE������x+
�A���H�A��D����������Lb*��nv��3	L�C�����^�
���S+�xk
n��K����+���up7&4���)z������V�X�Mp��
F{��(�~&15���D�j���M��[�6�;�([/�(#�����Bf��5Xcx7&�coE�G��Y����G�ml�����������a�4���)�tS�R��BO�!Q$���k��@
���D�� ������e���������yS���JW�x��O�e����#t����|3I|�u.��Kc���o&D������yC�h�3�.��o��F���osE��LF��s~X�@
��`a�3�����{���R�Vw�Q'���GJ�=��]���Hv���	}1j��K+�z���]��R�
B������2�3��o����	�m��Y���X�.�V�����.�/~���S��	@���6{�������s���^��v�f6:�+b��W��b���H��EE�Q��k�7��$�/�v)~��Eg%d��Q��$6����� ����A�����A�������P�9'<�k[��C�D�<����5r��|�$���fx��T��C��5�6n���_�j�\��j��u���^vn���lv�7�����j�]���se�H�]���\qWfH��`���y8O5X��y�1�����~�D�Y3�������Ke���?��S��	��&�v�C�-�bS����	T��M]C���' ���{d�����������z�g�WV�@1'D���D-H����,@��G�4�L������a�gS�Ki���������� 8������A}��
�������>��i&l����L�Z4�HG���\�i	c����Aw<=	�1T�E(��fh���}���FT��>�7Y��
�g�%��WT�I�n�F�����!�����
��6���J�f����h��v�ah��9�i`t�t�n����t�?����j���e/�i��Q�q���J�
I�7��Q������sp��1���~�8�0��&�}��5xvX��<d6~3�c��D=�������H���$�u���@V�7������\�|i*�� 	�����C��p��������BgB�.��3��4/(v�+���s���I�e����'A8
i�����V����L�i��t!��Z3_��Jjt�"��U/���{uS�������E��Hc%]����G>���4����D4�(��e����G�;��\�2��J�\�g���A����M=W�f�fB�K��S���������%@;9�;RB���j���a������V��t����B�5����T
D�/���qc���3~�����U�14�b�����0�4����L;{��3�bB
c�7�A������;��"j2��{��b/�YY��z�����{�PN�����^E��U� }�_������t�8{�H6�:h�u���_r07�j�7r�M�R��dwi$h/�;=.� _�s����F�;������h��>�G~q-�Ez������s���B(5�������y�������;IXA*NHF�u�!�>Q�`��%U:x���G����Z&VB�����D�v��S�����X0^�B���
��2�z�4��sc~`Bl(sb���[wl����h�"
e�'�'��6�������,-���s�yz6����j��������%�����w����}���s�i���'T@t1|U���s���&&d���u�A��:�fA�7TN���Y�fym�(75
��6[��2����w�&��
?����4�E'9��g9�7h'�����
^3��@>�E'�`���l74�I^�t��.<�����|���q�i��K����p���e�4�qi[�1yS�7;�i�a��XY.�V�tu��C^�����,�%��ne� ��x:�$�{8 M������q�'��r��".4AI���������C�#b���2a{P�����fe,�������<��fe���o[U~^DT��w��&x�<�����S-0h�����Ln���Fl~���81!���V��/z��u��������hO�q�d�B��Q�# ��kd�M�Z����{��%���"h��7�����!����St�MGq$�_�L��]MG����KjhNj��N����>���23���/HJ��C}��X1&�"�Y�<�����4+���0�Y {�����9;������:c_��)��
A�uy8�efH�3v�N���D�C���7g#`��@gB�v�R�����@�� ����N�m.tE\:���,�%��-�m��lnV]�U��!�N�M[���Pa7}��m�o�Ez�+�
r�����F�7�&��|�\a��]�����T���%�l>���������������	��FZ��i�}[�feB�%=x�a�K���	�����z�=�J�L���'��u�� ��N]��R�F4.�2����kX�Gkk����Bg�{p�k���
3w��6�?4��A��~P���V��z��Ee��
T��������f!�zN����8��:t+w�eb^����K����d���FK�L��������O���u)y~`��;$a�3���T�L@�r��^s�*��U������5�T�L�#���?�|�$�C{Zk���"�~��
��������X��
��d!��n�2�6d�d��H���o�	}i�<�w5�
�D���u</���d�6d[}GTm�2wIFtmy��,����C���bd1eu���M:�Q��YYn��w�.�zU�D C�	��L�<��
y&�d�)�f'�(sG9h�7��L���yf;�t����=�����`��<�a������FU�<.c|3k������$YLk��4�!�@�%q&��S �=�����t����U����l�n����������n�V_}��0^v��:�nNX"���N����c`�\X�!OM�|��Ze�����{�@i���F<,�w�#��2a�t��>��=/ �`;wN�I�����y�<������-��c8���������~��=6L��8�RN;�^���8G~�x��D$u44!��6�/��B�c�2!H�c����R��sS+��4��Y{3�������)����	r�A�����c�8�����f���<?0��� �w���Wbb��:��cBZ��lg^&7�4��4>9hH+�@h�p�b:�gV�[QI��/�r�NjF|
�������+-L�+��O����*W�h��X6.t=�_Yq4R������O0�Dqh��e�4�0�0�6R�h9�6�wa1��.k�ue���^��n�����
a�AJ��S:���)����|�����x�����x�>r|�D�h��AKm�7�|�0D����;��`���7�h�
kN���J C��:7�������0"j�P����2���jA��Q���
���=5;�W����
}XK���&��4Iz3X9�?�<�������\r'r����N����IPC�e��$]�������	�M���nl�D���z}GtJ�|#}v�����B��F��n��� Z��J�3R��� �4�l�����o���P'��"�G���}R����)u����^�����X$�s�[b����>oHGL^�T�k,��'T��n�^���[""#�q�ve1�����Pf���������h���:0v�3���Erp��z1F$��}7mm�M��N�yAT<�uD�;�u8N��T�;��Xj���Z:Sy��bu�j����������tk����<	Wp���Hs����t�j��5��4,L��ED3��yfE���
�������&`�g>5k��H���lZ��rc�,�?|��ab()�����;��o+C����\Y��T��2l�t������8EY!�`#���Z��/��#�`�Kh4_��2!���0������0�5�c��o����L�|V����ye��y>��4���$�|���u������Z2�A�����&=mIv���5�����e>��fo��	�C7��2	�ya��e>���e^�|G�z���AjK���S�s"�}�P�T�zO Q'�6�z�V��]m0�
@
��#�P2���.�)�eo�I��3X2��A��������2!���������p��f>f��r�l���0s�C2���a���0k>�h����l�O= ���f�Pn���e���a�)�C���6�j�2�8"�-��U���g$�0�[�8S��b�W���m>w:vn��ZM���=���y�q����c��}��U.6��d���@l���h���S��It�6E[�F9.���#)j%�\����F�����\���s����|2|p��
���k0*?�:��:�EY2����j,��	�~G6�#�iB��GyJl�&u9���u��a~�Y��x��^��Q�^���w��at7����h\��Q��eeE6�s��.jr"��$�s�������N�F��1��r���*�K�o��a�I :,+x��sZ=���`Q�W��C�e�a'��V��=S9����!�3��c���\�)C5m��B�w�����Fn�����f���q�6�n�]��`"�����F�{ 6\�����y��Kk���r�Lt���a%�HR�#�Hl�5e�\x��bh���l�tFT5��:l���84��`��+FR����|x<�-�'�)�A��]���]��"�IQG�M���Dt0&
Y�}r��hqJ~����_/5N�0�w���
�`%ph�\���]��-2����D�]��
���$C�o��_|���s�%��Xh�T]�� s��Ov��I�)b�zz]�,����]�������.~��p�����$-H�@���X�C��
3��."W`B�m�R�T0��s�QF ������8��`��+_�5�t�W�-A��������0#|�>p�����(��[O�f_S]�OZH1/��6��	E?4H~b�j��3�����a������u�D#�K�ur�|�N�gT�`��c]�w8q?�����-l�
�h���Ul�@F,&_�9j���c[C����5�o�����s��t�*�]CJ���O������.@o	�
�&���uY��"MF��E�"`j�����#��<�J�H+!��B��nb�i]cRnS�\�\.|6:���
�))�&p�r��;��B�`~lQ�N��V7��B������5_=mmsN6�����3��6�0�n��l�"oG0����~9�n�����h�$)�x���{%%�q&�����O��lCn�0�&�N����!����p�M�yuG Cl<�O*��p��;�a7@vKMX @OP�V�c�=���q7���u1���y�m��k�Eg��f����3�r0sT����c�p�-+�<�����.�sd�T�j���-OPj�H�>��1O,�Z;�����" ����Qw�Z(����&��7����cYK;��c�QK&}����R-*���������x��6k#��KG�|�87m.�A�����n���y����U�z���y�A3�}�Xu�I���Z���&�:��j���t�IyVPu�H^��������F�jPL%�������*g������)����%R9�T�9$(r�T"�:�4��'ud��-���|�(��(
�jC�(#��9�:���&�UN&�=��s��}��$%U���s;��2��j�:�j%N���r�e�Q�I�j{>�:w4e��WZ�>/���9G4A_D����P/]��l
��GdNw��
t�HI��x�$=�@���Eg��UNM��9&Io"Ug��|bw��I�In�
�r�h�Z8��t�����m��8����s(�r@�<x�d�!�+�qf�
���u�+ �+��W���� �b��~���(Y��t�e����w�������W���
��|�������^z����_���_)Y������d�t��WJ~B����ZS��]j�b��s�R�Z*��]E�{������r�S��x��&�����w�8~��W�rw��y����
R��mz{�q�~�t����������(r��������]�0����]R�K��i������������7��>����Y��������q�2��qOmB���~�	0�(B��p���"S�7�8�k��20`������{yN�!,�Cs���~���}�����d2����5�*�P}��0���FcnV���!��G���~��`��_�s�B�z�&���o�V2e��������X.Q�7�ny;�
D���8c|������p���gW��;��O"��X�|H������1\x�8��Mnnd��f6��T�4��A
N�������M �L�)��+�Hq/�#�C��t=S��&@�>7`�a��u���P�L�,N���3�Z��E�j7�S$��tM#�H^�{%%�=u+X�M����tn���ku��h>��h��EtIO���X��dCz������w���"sA��H���++J�x�������r��gF����������t!Is=,y
�@�����>�u
�\�hA�8�"�7l���p�-K���b!��H�K��-��dp��]O�Z���
���������'�`�*����$�'�RLG�o�b�`��
�\����X4��^Y�!d�g"	Upc	a"i�P���W�]o�����.�0�����yE��p�`s~��j�����a(��{��m�)=$��b�"�=��F�

���b�R+�`�,1&;� zV�������j�WM�����A��K���9&������7N�T5����M����
+��l�&�����"����}��m��j�[����,�A�&��A��HDn���t��i�P�xu�d���\���+B�d�,T2���b��":�)\Y�S��GY��
�m�l���������:���$T|��M
`��S�,:T�����d2e��f��|��!,h�'���zt3�2����l�z��@d��>�����-}��X��l��mi���A������9�� 2���mG��!����u�
��c���_=]W�_=CSb%��;i���R ���(
t���� �
y��]�w��HA�{5�/C�������M4;��J�E��SC���\��t%�k�X����������xQ-D�1��&a�5K����aE�8�R��\�`��w�����,���K�z���+*(�)�������f*V�t��\���
��VJ �l��JV�<U�M�p���)cGF$X)16,�_����~�+\1�*,m@"�#��3����&�1wF��r�4�������S��vF���ud�]&B8$��2�0��~N�GT@X%�O1k�������
���2�2
�d\�EW�<]{���N,��v��t��{�+���-��7��sL��%�[����]�

�=/&��1���]�����D>�|���5��������<$���9�b��Q�h�ei���������J�/G���M`A	�k�v���,$j���a�z�h.���rp��`��L�1�
�����f������:��_<�C�S�@=�V3P�5tO��UVe�&u=���&�.�����Z1M/+4-��c,v���\��.�Rt��.A�>bE���I�b@�������Ty��|y1)s�����V��KO��������W4���i��w��$���#XT�tAehzE�������7�^+�A��z��������;��|�g���I��]�:���u� 5����<04t�`!"�������)����[3_Mp���;�Hh-��A�������\[u��[]��Qh2Y��Y4���qfR�)MM^��z��B�����{�O���V���K�5�)&��v`�������q:����$}%��^o������L(��S���x
s*�u"m���cJ�K�H��MNT�A�Z�b��u�T���k���y8F�Y;(
�~A�RV������a�d����(�.����{EI��4C����Z���\T��{GMZ�������C�]Q� O#oqd(���rdztY���t-s���jtAT�(�5��z2�.�h��������M������6�*�����q��������f�Y�Q�X&�n>��S�F��y��_�U���/4�n��*���5�"�{%�/"���'N���WDq�J��@��/�h�}��F���ds3��^�W���o� ��N@���� {�}�md�}���[3X�}{;��:�Y0�]lzg�ibR���L����f��4�9���eC��L��g����'��^��]i��F�_�7K@:lM6�fvER�-��:��v&Su�]��!sY��)h�
;����#�� ���%VE���M�RS�jrR7:aa���*S&���])����&5���K��X�����t��x;%-��.��_$��`�U�N�H�gx�K�������)������	t��s�+���hl�O��Q�{��K)�t�����t��a��}:�[����xV�����V3[���[��#2R	$E��<�������{��	��_V4�^�����O�XLch������a�~�H����%�3+�����~~[=�C���lL�29�5�����h����aYFAX���L�f�$�����C��>x4�.���z�mA����6�'W����3��P���;^��;��������>bVVo�u0�g��Dd:��d/�e�+�P���R���X(��������H?����%�@2e�N��&�L
R�Kd��=�X�C[Q��n��k,�mn\&S���l����5���BNI�	,�6;��9F�����&h����fD����iT��i��.�<Pq6���R0x��9L�������kFMdZ���7����m�~C��_������[��A^H��vN������$���>y
f!��Sc_����	I7>�*�!���l����+�z��XH�UN Z] 8K/���,��S��LW�� sA[���yMR��[{��S�����"�y`��$�E,h����k��)o6�-����ml����H����8�n%�k�����r�M��B\��r��zs�g��H(�k.��
��>�'W��8�VIE_'���8�����d�l6;Lp��;�X��jq�<��[k-�������h�K�?�O"_h�>��������6,h��l�u+���&(���F���Hd�i9�$�4��l�8����}�Mhr�tEc0{�
��|���9���@8\H��p���=v�s8���z
,L#�����l��fc7�;�_��X(�����L����O����n�,>Y������K?*����t�n��Q$�{�.���x��Ry�	����^��Fu;�U2���q3��)i���.�DCO�"�,�����	���XH8��S����REt��}b:���x4
���;���5w+��W.���l/�xS$r��	�>�7��,*����p�������u,q���O:����9����T9�&l����M�b���$�����#��W��S/o�Y����z+�3u���*��'^��3����|��6�A��X8m0�������L.H�A-�8����$�^�_�e�����l�#�|(^r���Dc}^����,'�io�����p�~���Sm(��7se�p�iReqV}���m�a�����s�M��{"���e`�5����s��dG������R�s
lf����������-61U�bBt�$��oW�k���+$������t���u���D���R�5n�z���V����X��Pv�O������'����dd@�����uz+��Zb��n� ��iT���pL���Q�<�)�e�1�[�������N��"i�kp��E�H��9�_5M���oe>S�@Z����!���A$@7X�w�����G��2�Qc1�DUG����bB�;����<�%S���sF���^������X��?m����v�&e�����F/������t�����!���e"kT�:�X�"_����5� ��H`c0��%�����:5�C��l�� '�h����t�B�����;6�{�z���!1!U�v^b%�����s�<�����N�G�U`�2��v� {���QT��tW7��������i=8�����K���0U�0�t��J�������z$|XQID��U\��G^��y�����J� �]��Qm���G����2����yh���w>�����Z��/&�T��/\�M���Fn�8����| ?���-a��H�Tm�z�����PMN����_�����B���scY���3V�!|D4p�$�x��� &�����?�'}���_��5:4��7
�!~{�y����&���r����a���jNX�oE�n���+<+)$����r]>��5/y|�
��}r��+sAF�=�1���\���d�����'����
+��)�?�+������"G���NHhW����)�~	��6�k����S�7*AW��%��$���u^����'I@+xA	L���|��C��|�H���F���:�YQ����Vu���8?\>���f7�IFZ.�~������Xy�X&.�~^��C�Z��Re�������4F�|��	/
�]^(T�������{�1�a^�B��md���"A7���[R&I�������:M-6t�����4�J*��T~���n=�G�A����VT����~�@e���[�B�������$l;��	�7'vWe�h�"��'v��]�
X{�b,�:v�v;H/~;���\�p!�X(����4��kc�_icx���H�n�5��2Noc���#k���Z����H���9��W���2�����;�J���@�s��"�����$�]�����J��X��+�Ag��b���D-L�V��w}�H������ )�9�V�Btco2���eba%f��H'i_�=/��,i���� �z�JE�g>d�De��|��EWe�S����Y��(��b���i�5����v�w��O:���\:�x��];5(H7���8��<�{NN�{s��Wc�;(5��(7��=qD����5C�vv��P�x���Kc�K�\�����i~�k�q�~���
[n���p<��1�E=���@��+�bJ�l�I#e|��F���;OsO1R�+����.S��u����.(_��_'���W�)����X����V��F���7����N|��b�3)TrL����i�)#�=M������_v�">���t����ta��c���N&��g7,��Aj����P���c����"}�O��-ufh��9�&����m�(�d=�f�ZY�����!a/�wy�(_��u%x�H����i����8h�p��6.�!*���p3g�\�J�*f^"�y�X7^����/U���������s��Bb���xy7��V��{���
�|"k�fq�F��
������Oys��u
hP�JH�������{|)y��g\=TI�������G#���5�57�n�5x��U������d8G�O��T��7l#����8���p�e`�0�J�|��Y�YS�[�t�D+wP����S�:0�����$t��
���j��pQ?��������!����4�.�h�b�0����4}�M���a�*�yX{u�����9���?z�1��.�����\LI��)�;>=�C�\r�������&�E��u�3��9\	e��/�t�r�)XB/����z���N OU��1�����M��H\	��������`<]�~9B��~�D�A��6�C p�!?/"��b2�,�}Q�����c�vZ������@��y�*��q`��J{���[~��7�	��n�x�#�Cu�bD�����@�u_(����6n
'�- ����yH���$*��� �j�0;��d��<j{�1UB���i����7���_D��>28����\�?������G$���j	�i�B)���j���0|e�����XP���+7�R������t:�Z�����J���.���/�������pjw(���$-����P��d�����`'o�}���,}���O�v;���iv���d2a�P,����P�����xu�z�M��a����O�L���o��g Y��h����E����m.*���J\G:�]5�f��F����_M=�:To���H/i�Os�� 8o�5X���
3r	�J��2�
��e�����b��������i,l������E�����J<�Jy.��?w}s!����N��eq��t��Uc+�2VL����wP3�,?X���A��V���@�Y�HTsnM�V,�7E"��"�v��P�����B�8�X�6D�u6�����h�o-���F2�$
B�6����Y����GQC�<��j,^������^WrfH������^���+	�L�<�����k��'g(�0�AM��B�W��(<��0�������(���(�x�(�X������(��4�J�����l7E�a�p�.��-���t�>�������T��c��t��[�gI��~#:-P�E�D�q�DL&A>�e\ZR9}g���/@�����M���l��nM�<���H�Cg���Q;M�}�'�4���rE���U�`Ze�<���Y��
���]S��A�(-7�`�]��MGd<0O(��|����g!hsRZ�}u3���X��BR��K]kT��E0pA�R�����LD���o�}	��VD l����G��D"��D9�4j���d�������pz�wT����oi�[Clj;�!�,��/�7� l���L�Q��'���daR�l�+���� ���mn]�nR&,P��g�J��	A��,��o�/H��9�l
�vo����'t��c��}Zs��\9�-�P+�[����*�@�F�N>,D
� K�RN��WV��������q�}�1�/Tn���4���Y���������o����������71��ug��������7���}��m��@�_��:_h:\��5]��v����1P�5��F��[�a�C;A��j�`2C�T��0<U�~q����-�E�������Q(���F�n�51+*�UU���g��_�wz�J���c��UD	hg���]�:!��,��ly]wui	���A��������H��12�{[�F���3i��^�fk{���  iY���a�����%>�)]�[v=TY��������=�CT���$���=���tp%m&%��4�i(hE��
Bu�p�N�*nm�w�%o�k�����f�[�4h	�U!(�}+*�>
�D���{��-�;#*Fn_\Q]�=�������Z�*�IjS�e���+�^���^(X<lX�3���e�����v�GBN�p���w[����Utz�nM��������X���Q�X��P����`9��,���zmm�&���J�I�_����I�@��Y�G���h���H��g�-N�rY	��J�d�������)�,k0
���������x�U�spvr��LC�7s��;)o��(`3������8�Zm��Vt����(8����+��KbF��A�c��A�H\
�v�9�(U�K�#����w��"I�*kP^[*�T�I�\�~Y��:O��5�%_u���?�ek�K^���mM������k�_�����������/_���~T��?|s`��q2�t�.#�5���HW@NW�=_��|^� ���[������~z&���f6���q[m#�}�"e�bH���%pf�O+W�Y�?F^�2��G���c2���
s�03���r��lj (J�<�S��m�,��"�M-`4��;��� ��'\�Z2+����@���`�
��NK�F�	�������@� O�~�U�����?'�`19��y�J&%|h�{����G�l�$��"�t��$����Y,@RI��m�zl��z�S$U0O��0����b2e���E����5=�g!��w�^���[)���$ ����N���kP1�
\����K���;@F�L�;����M��3�{�h ���ZT~^D}�.��P&�$�"%�1�r���P������o9�y��BD_x��w��V4�5��JLq@R�O���<� ��s��_&��5�
l@1���O�M�j��e2��qP.�(#��L�L�w�[����3f�p��?$:��/I-=����%`��K��t�dd�FS�;��LF��YQ����1�������G�����eR�Cj���z�5~�Xh��| ��BV���:!�u�Y�Ea��y%��Z5]!�5����K`4Je���m�s�y�)�1xf�T6�����O��E������������+�
�$q��Z��/�Y��P*����[�|�}��k8hE���gB��������Mf��X*���F��%-���#M[70��bQA4�L��Vp�`�0��`&�����)���
�@$��6�����i�3�������
\���^�d3
q�vP�EG'�(���n��'7�	H���
aa~�`�<?��c3�����A���?6�`��+d�0�d5��_4��$�~�\x^�{}��`	������Ru�2P,S��pR��.D2r���/u��Q����������0��D����`":���3���,D�=z�R#�& ��1brp��L`&���M 6rD��sZ�L���f�T��v�Vnp��L��4L��������J����qz��������l�[��*���n���s�r]c�X�*���Qy�����p���|/f�<O���Q�(Q|PD������C�u�`����f&rv��=!�'�����.Mw������
���4KKS�S��
r�B����S�M�,��������cKw��[�b��dz���&�Y��
Q�Nut��w�A�.6W^�<l���/ �j(�gN����_�(�G<�`�W2��M�I>��.�W���� �8S�l���V2e�s�<�D
1i��#LQ,�G��#3`����~�/��,�����5I|�By�lx����`��P'�i����,�Yt���@��)���.ps�W�y>����.�[�/����}�v���8w\���o����9���W�Y��/I���r"W�
�^�p���MD���[�����&yl~&`@!�o��:��H^���|����qr�8�VD�/�z��?�@	2G��`0IOb\���,��
�T3 
�8�u5��.1^��4B�����G�rc����M����H�{�W�N��fw����B�Ct;�-����P�����O����$a�0{�L�h!4�&���MO7RXx��2YC���A+��n*3�����C[��g	Hc���h7�1P��;~����M�@��	���>��@��(\��p1o=�k!HB��3Y�������[����~tF(R���@���)I��p��T��&%o��J�����c������5����J�����I��'�E�&d*}���Jr0r�	#AwxA��*��w�'����iee"e��O]����{�������'�k�$�DcOx��	��0MX�S*���6��1�h'~��"�E��}�;Z�Q�����$+�i��������RIN�u&�9��j��L��Q.:}������M>8�MR�KdX5��O�_��E
�lcIh�Hn��'t�I144_�'����B��T�j���|�.x� s��#��N�t>6�!���h|6�E1|dC����H�w�Q�mf��t!SVG�z�W�%��K��;��w�E2�����H2e�y���!)�b�/aG��L�j�&u�dt�0����[��o��(���z��z�_��r�m5Y#k31��Mgv��iXOi��������<������P0E5����i,��#�$��%�H�Us�e�BuX�%����9�s���(�L��4�9���1��IrTE��o�����g ���:�������H��}���?7���p�c���OU����1G�w�D>�F��	�8����@��$�)�������5ltq0D����f��a	Q2�2I�U+�HOY�8�:,3��kW����,$��#�I�����g&��"��y:o���'�B���@u�-TA�y	�+J2���oT����)�a��F}��m��������Fzj�[�D�)Y��{�+y+����6s�n�/5��2e�<Tf����a|��;�s���,�
�2C.
4��|-I��@c�l!S�u"V,TG����O&H�5�-�u����z�~��K,�������|/`�����V��g"9�.*���_:2�+��g%.�a�#�M�v���H����5�Jy�P���O�%q}�<��]&$����M�~����
��J9m���DD��R���TW\UN��LU�]�`��w\��+��l�`W[8�#���zHb!.�������A�����L��#n�[�'S[�WR���[�dREt"6�/H���b���!���9��y�g%%�{��t�n�_,#���S�^�3D'�&�f�{���m�0
3$�e��I:3I�����A�c����:���j��G��P)�e��m"hF� ���G���N�>��\�3m8+ECC%D����	Q���/$�VSrP>����[�CET/V�����������	h�O+m �5H|���������b��� ���-G���AW�

����]�����4����tc�v����_-E���q�;t~e��O�0wS���)�f���R���Z��j��CU=��3�}d�V�,/$��"��������4��(t�)���������9+��%�r	Z������S"�������*pj���X�{�@��2���G%|A�O����.l��EP��ms�o����B5�@�\m�&'L�+�	[Zo(5�H?/$�<
���##D6��	���3����F4�%�C�����H(
I��&<���7����Ik;�6�b��Y�W�4��C��}�����p���]F�M�UhM�Bb0���Q���/9�-U��e�0�	���n�]R5����2�N��p�^H�������~���xs�#����#�
n|X����* ��/������u�2���O{iC<�h���L����+i���(�t�O�
�1���CN(~�T��\,��/o6���v�wlI��D$�iN��j��Qv���-[/z�/d�:N3�\���u���]����z���L�A.���}�[g�n%�b2��M�^�����6s�,� �����e��Lv\�S��g��[t�7�H"<'/�X&2"2\��)�6�g�w��@��p�QX;{���Tjn���*�.�$6�K;���5��PPI�?�9j����kX=�����J���������������;N�%�:�����'$������M���������&��fg������n��e�0�QerV��%��F6�(��q���@�z�p�~�Z�O����	�OT�E����N'�?�!���%�]��j�b�1�y6��
Z����fM���AD��@����&"#�~�uX����,�?���6�(�W[w�/����
��E���������p�q.����c�?#�y���?o��[����?o����������}s]E�@�KR����x`d����w�����������GX�Uu�*EQ����|�e���&0��*���B$]V1]>�r�8���,���^�������G�<��[�5���V/�ZO�1]�{��b�|�Z��.���\�K�BL�g���;�O|��i����W!�Ud6����jO/.SL��^�CL�U��:�t��:�t�����|c-�O/P�CL�g�:��z-�X�?��\������u�q}�������������G��?a���\ &3��FCL���-�\Zr/bR�����(v ���|_���R�����}��Q�n�Z7�V�J�}D1�r�b~���3�|}���u}�����[�3�t=L�b����1_wc�����?C�����!��n����Q����V�/,~����Ra���u7�g���Y�/�~��q�X���~��K�gm��~��}�����.��h^�0�E����/ZW��}���^���U�b_��:��m���]����hZ�,�E��c�/ZV��}���V���U�b_��:��]�����.��hV�(�E���=9w��P��ll������H�_�Dr(�z���C���-O�_���k�G-�X�W<��P��Y��E�^�?��"9~={��p�R�?���Z���� ��!�����S�&�Z��=�.�T��&{�4�C�djP��2XY7�U�T������w��`���@n2V�<�t�t�+�<:M������t�&J(a��3o�pn�&�y�i��5�0�C7���$in{�'�G�Q�L=p8I:LN�p#NT���K�fM���W�L|sh��e2,k��MN��
��h�����jN��,�P��d�@�����at*n�:O�Ge�D52BI&nv�\�q����N��*0E�S�~~[��Q���(5y�U�g�m,d2�������)�q�H41]Y�p�.}YT�������� S��ie��G�'���C���lD���L]C�����u)�D_��?.J^;	����`����������5v��Y�X]Jc$n@T8
|s;�J�E���b��&��'0�vy�>?y �I-L��#:C6�_I��Z���D�?$����X��c~�M�x�RMk�bE��,5&N�Od0��@��,W�0fM6c9�PH�����������~����������o/`��L!����8PAA���+��2��j8X4��n������R
��_���Z����M�ji3H����Y	�]��54�*����?/2u�����d%����v!#�
t�**hY
���������t�*�l����;
G"�S$M�3qP���'�y��_z���Q��i�����"��_�TW�jM��(����9W�e�K&CA;S�U��������CmM�w�j��
�?��E����g$�������QY�9����(Z���THI�[ws��&N{Y,��I�����LA;f�C�F}��n~�D3��#���_T�OO����q%���|a�H���.H���?�%��^���J�%���_���,����*{LD��yC�:��������%Y���a
T�+�L/6�{�������(A�n���Z�_�;�����L�}���Oy�&��E[�����*N��2OvQL�L�����N�ik��V]�����Y�}3]���+�NN��n��m%!c���Y"�H��6 ��L:>4��"�D��j��lp5��z�LR���k��AO]{e������
���c�:t]��_7�z
]6=��J������;����T�d����|F*��%�+�7��S�����,���/Q[���3�C`�S)r�/��x�;��-�-���Q2�|�-7\��3
���`�����JY�0��*D
��5y�8Y�6pRO���W(�@Tm�)��6��A�Q����T��&F����r1�'���Al�U���"��������L����s��w2���~!�+i��*O�����P�O�'�s�Aj�AQjK���/r�GXo�h�!
�� ?
�s��JT=�?�T���d���,�k�5c��\@�j'�	�u�EN�O7�g$��:czh���oHo�c�?+i���'<_���!����;w1���Q�E��,[)���
�{^�Z���|��B�2�A�*.|���uQG�*V�����@��7LRw����y�(��yz���d2Fvf�R���?P���2�|%E>9no�����_&�8��pi5E�����9�4W����W�E!�SF�y}xU���"����Q��!^}OK�bS�G�;?��i��B�L�G�t����M����<E����o��
���
�I��f��,k���X�#y����Z��Kt����3mB�r!~�d��Y>��/��'�p�o������pQ�t�V�1�a0Hs4o���s�T�?+�#ob��	��%�����{�v�q��-|���@�~�1?��&;��4`m/kz!B=F�����LMP�e���
\�ftP�a�sP��tn@�
��"K��&���V2�>�H�p�{2?d%�~o����lU���f0y���c����.d23��vS>���O!8`i%3x<�c��	+5�������m`n0�A�n�p����$��"�0���R�
���Ef=������L>�d�8��@A���p9��L��	�S�_B���T����B��`}=���(B�r����/&M�k��
� +�������,@�ZZ$�Fs��}��d]����b�a����&�?��.���w��`@�
`�s��d�`���O�Ii�������>s�����e��<5�E���Eg���f��X%�c��s�y�T���-������N��v�b�����Y����0w��;o�=]H�%'��U��y���e���2Z���_�]7��(a���E��94�1Kub�l\�p�t�J���q�(�u��;HBFPS�(+>���{��HX�p�H��){M����=E��W*�A?;��Q�/���i)w�^H�7������;1;~m8|!����l�����l�51R`d}�s;���6���K����`��T�%]�����?�cc������9Is�����#���-��SU�0�F�m�<�@5V^��T�y3�]A�6����Y�(^d�0=���#a� ;�*��Q�R�
��&2��O�:��Z����W���h�]e���j�t/
F\�N��k���������t�����o��������&���f����P{�����K��s�]����7�/$��f�71s�B�_X�C�,�a��*,He���(��tV��Z��s�l�[�����O����T�����a~��R��/.80������3kq����e�x�EE�;�!T��BI�e�#��s�)���cq������m!REXIbo|f{��Z�-|a�8:���c9���d�]3�/���	����t�(��������h�N�-:�����/$5���.�P�-����z?f�W�����\� |*���H���t���%S�@��a�;s~'S�����������U�e�x����Yl��z�%�P�.��YZ����L�/$�n0A�s��`
|�H�q�X���T��!�&��~/�
���f�d�J/D7�y�1�����[�l�Z��A�1_�o���P['��*)�D��~�oD-�5z;$�N���F]ot��,��/��4��G�e�!��f`P����
b��k���+��	����fBw?/��L��� ���V���9�SEq&[�#;V������j���#�Op�G�Y1�y�������97�T��c�v�/@D]�xmh�tj��RP�X0���T��%��	o�AF�7�gKW���_���Mi��T�2�I�������D�9C������1���p1��BR���!d��e}��
DD��|p�y1I��)9�O<����\��qS���r��u�>�<���i�b�h�a]?������m��B��f��8��s;�H5�����7/��zk/�uo>�u�K�	>o�fa��|l��7�$r����p����4�A�B��w��~��O�X��
�J�8����DW0_��T�J���Bm�14�������<3��ch�AY.���>V��WO�O��u�{���=]�u�{�����F��Z%�����%�~�~��i��!�n�Zh�+�Qw�[mE"��9`��N�#���
�`����L�������i<���mD��f�6��7'������!����4ed/�"���N���!8:���8��H��<�%O]�'YHgZ
T���G�%�������D����x��6��r�x��f�����0l�����WVV���x��WV$�}>�x:��W"2���i�h�"�6`O;�8ZYQ+DG+����B�p�\,{�����-�)��1�K�?�|�a�E���(�E����D�$������y��u9�~X�����[�7hZL=x�ea���Y��������R�nE�������!FkE	0���1�a�"���;�g�A&�x+j�y�_Mv��3���!1���z�6(�wh�����ON�R$��������3P#�W�����O������H���6U�uE�$�(bi��7R��N����6U��N$�usd�#x%�<���"%�����������i|r4��(�����U����A_-�cEI|qy��@D�S�P
<(���"����� �3i#������A�EaK++���'�����E���'����\��c9�3F���c�B����EnN��x����v��;�J�LI6�@u�cI��r�)�yb�V�����o9��=����"�-!z����3�Q���9����h;8�R1�7Q)����$"��?��{1����1=�p�'�9�+�?M�{)�&�EM�n��6D6o��\��W�H�o�2=����C��zt�Z�u����V���S�o��b���`�2���T��/<8;�+�����Q|S6���N�������7���D��WRd�����G��R4\�n����T��/$�=�y�k ��q��
�2���@���(O��u2I��X7��nQ��*8�X�Z�J{3}�YB���0n"���������c{X��t���h&�^��bF{;
��*j�h\�Q,��O���N{x�,�t`��]H;s��K��l��� �	��/��t9�/\T�����lR!�����g��z�O������T"�/q[��{}$"u���u������jOQp��"_1��h���%�%��.�BD>�B>>��q�sx�i$poP��������>H��&�����_(t�B���%������l�������������m�Vk]�5�L�0\�Z����4=�p�A_jA��VE��M�������5e�Y�?/$�Kp
�."���9��O������6W�x��������h$��S��0� ��|/�icW���y�����i�����q���M��_�6�e�"��a���^$�HZ�����q�)d��:��N�d�qE?�M{�������P6�f�
p>�WvE	��5���B��VO�����X�����E�:���AC����*����f���	�{s�a�$ Y���X��������u���&���WP������:n|�R{G8M�c��K\������/`�D���H�fK�P
W�"b/���� ����O-2�U�2���(�m7V�jK��h�����c������9�_�wRh
�46+��]��SI��K���;T���(�����8}z�B�ra���*oF���H�{e�j'#.�m��������/�R��~n��L�)�/&�<l��i��
�(���i������'��E��gK����z�m�/����>��#���BB%�xW��_H���M��)�Q���+�����M�O���G4@���^fA`7�������h�l��t�^|���+�
��K�����w��gk�}��pH�i�N�7�s�������*��Y���{�
,��mn����C'\@,6����6SO����f���s!�<�����b���yA��	�Z��o�v�48�/$5��j"i��g��ly�3��lZ�1��e���EM�+
����BB�����-q���D���2!���V4�������X��[|�T���Z�DAs��?�Xl�����3Z1���&���0�L�`
���
�� Z2.��pC��5�� ���
�h�i;q��	�w��/������uN|/���������G��Vp1����`�|
hE-43@����.J�cD���OM�cCR��CdxW?�,5�p'�L�nN�<������Z��XC���gg�?Z����:��7<�'�d r~f'�V�����:������D2q=��{�|V�S� j�syr�o��9�[d9���������<y��O-":1-��	�&�d����$������NK�`&�*F���W�K'�N����<!�p�����@{��?+a�y �X��\Q�����������h�Kk���	|����?������z�!NJz�S{!������������qw�}^iH�U�f�Y��?����.N D9��H��?��H�V�2�1#|�q���<-s!�sl�z��b	Q�:�4a�y��gR���;OC���>�Z�	���AWlN;�rE�T��1Z���]Pf-,�:�M�P�9Ym+���0���nO�)/��q�a�*����H�5�R���^(����{"��`�������������2�����{���M���hU����|��S 2��{��M�{�v�e��3*�� '^_G�.{����l=�eUvX����z26����Nt`�1����|�X�i�&���b�v|���Rx�@-XR���R���w��ZAy�Q�6[�}S�����"�{�����L�5r[�p�Zg<�����hU
�����X�S=���TWb�a!����f��N�G��YX��Bo�s��-�i=2=�[��[����9��B���L��t2��]����'dO�k�k�]���&	�M��%w��^��,������4��).D�F+w�U�aAO��yCu���P����Xs��
D6l�	8�[���[����$�7�|����h�8p ������������E|���s���5�Y����cq\�xB��H���= G�~8��B�������I4�AC���gs��A�!���)sp�Q~+*@6�!�id��8�	����!�2�i�P���j&>Y��rne�`��C�i/�a]{17h������7�q�~��������C�'����*�����^0u��_y�`$���m� ��+�A����=���OeHR�B>x��pG�r<�-<����<������a��^��=�<i�`$�+iX�H6z���;���C�	V�d�b�.�}��ep���+J�p��w���zoF|��F��
��mA;��Z���G;��>0h�_"��{a�����c�PP�l������V���	Y�:N6��"��!��T�K��gZ���ZZ���X��^,L���>v"����P�I'v�E�� ;u�T���0'!�
-���EA���v[�:�g1�X���d:����8��~����}!��uc=�C��"��x�����Ddd0���H]��m�7�L;���/��� ����o���&��F�5���\���=R�P����@r�����"{ag���\=#H~!`�/���Q��Cg!({���������O������~J������*�h�&X�r�?fH���2��=
d������Z�pA������OM�f��|�T�>D��?�2����u=�X��\�
`c�D�z�>a���������= ��
�BAOs��e�r�V��=3��i�6]�p^����N��t����������D�#b�D����9
	�=�QeXt��W+F^Q�1�v��v_]lpNt1y�9q����p���y�)=�x4�(�������
S���H�DG
�wO�
%;������`������f|0��8W�$������dr�D�0�P@��"��h��Om����4�y��@:4:�Em���8�<��S���8�r�&Pw���t��5�p/
T]}�%|D~,��#���0��M�m����Y�����>Shs%�eZ��G��~V`9�TF���������k!��:��#
LD��T0@^���n>o����n}�>����b_�5�os����1��=���.�2[������DR��%m�~N���N�-�aH{��b�B<|��C��-2	���?G������V��d+qXR*��&�&����\0B��j
6U�c@+o�E�6!����R���bd��\�sy������}j&�S�b����iM�
�[�C��y88�9+�V��_j�|����?�d%>T�7=R���/y^��&�4�a�LfZ��X����MQh5{zY�{�������bO&������0���|]��^[��I���������i�-d���iJ���t!"�����L���(�R;����DV�E��ML=�Y�	@�� H��,i"Fg��i���B�W7c���DG��QmE!�%��W1K� X����;gK� �t�nq���������%]��8�-�e�$aIW$�fw�]\;�=���2�%�����PC	�lI������+��0���&���/��������P��k�WM)��&SZ��cdhKap��3c� ��+����O����fHM[7k4Y�aFW�O#��`�jA�����ler����)��GPI�<%�/�����?"�r$��%V���Y�m�$���C(�<�!��B�N���C%1���z[����f���S�����X���$6V�7��b���p���	i]>U�i$���I���]�M����n/�+��P�4~r�
�Y-(�
������x�����c������)��%���y?)8��I������O��/0I�c�B&5����PV=�7J�9Z���Oe_>�M��,���ZPA�_a�4�<|O�����c%k�����~��/���OC��z�P�K�dx�c%��"��h"l�b�q�:;�yH�e�{a_>v��m�kU�����im����y�D�c �m�Lp�i����4��i[E��Twq����s/#'CZ���]R�.n�!�8J�����j���I��SI��F�yN�hQZ,��7iC���i�X36�`IQ���A��;M��
M0U��r�&�����(�~��I3!~V@_�e��}����I��q.�.%��X� �Sme���S�i3��Wy
\�����m5������W-%�s���?����}|�
8U����M���i��\�f��|�������O[/S��\�t1��s��D&��Si99���>�Z��k :�#t+��zs���Z:�M�V���������B��7�����X�r�0"C������y�T����FLM3�!�M��y1�h2HfD��k3cf�C��pEVX���������}��{�9[��1�� �m��I�Mn��� �=G�0��W�~��6��|/P
7�������vvf�LnW�5���'��A�"�l����C�����#�j|����eq$�8jqSTB��1�L$jd�f����Ie� ��Y�����|��%�&��@x��y���.H���c��yO>�.(u��7r�@�$�_z�<�������~�Z��h�rm�'�]z�o'�]���Lm��s�)G���k�LN���H�=l���`��P�?`�]����G>lWLIr�|b��J���`6sb��|!1�NCl<���4>��3�a7@vkMX �@�U���w�~�u�M��n*�K�����k������������+/�Ei���|p`/\��OV���o�9R�}��@����\�������1O&�OZ{Z^�P��Lo+�� �t �ML�[I��x����Z��R��a�Io���*n%:����&����=i���x��v�F����	��4�i��Pw+YF��r}���MW������|���L
��~���D
��#�2�sD����BZf��I��=�o~� ���8���f���Z�ba>K4���|���%WSD0!EN3D>C$�M�`��������
����Y"9�X����B.����2��oA1K��f��!m_e������s��_Z��O9�	!}�M7fSDZ6��0$E������`r�p��8Wka0,�d~@�/2JD��O� ����A�t����DFr�����-d8K=�M�	"�'g�����J|�H���4A$�a�JlzHD-�%f�����P��ZL��<=������� o�urQ������u�uD��:�|]���u��!G��u���$oO�U��{9�o�������Z���E�g-�������{r��YK�?������~����[���_G\�n����$?v�E?�p��Y�/5�sg-�g��k�^����L��/}����Q~�������������o�2�#�{��.C�����_���|������}z�������"J�����f���F������}��������?��������3(q�u��t��l�����g��F���������3��q2�x$p3y�l&�a��]���>�:,;R%(Na��x!�$-D�����~�;~�[fX���F��8���=���-_��0ks��B��f!��}���Dd��|�C��%j�F��o�w)Qy�G��8Uw8�|F��j\wN�@�S��k�W"�8�@������R�8Z���Fh>O�#ffj� y�n2�sO�����	���\�Mv57`C�(�"c��{G��x!H�%{dq�h(�������g'��,������/���R\�U$����JZV;v2R����;L;�9i�q�-H@5c�Q9I����|�Y;��jjr��)��^��VK���������tmEEV�Z���N���|�F�oC-��i��7�L�)2���b��>^��S�������t������;��E����x��?�����������!}
����<��t?x����}<s�����*������8�dv��dj�
D�n��E;�E���Ye�%�&�T'�J�!� �(ML���o���;��������Ona!}��5%�|������E?���y&S:5r�b
�Ew��7�Xr�*��b��$`�,}��z�~��$�d2���j�fQ�����`@�<����Q+�v&���]E��=cV���Zpt��q��C{���K���,�Nz������u�u?�������-���?�Q[����V��(�w���p~�=��{������J��\��'=�Jf{z,k������d����-��X�����6]�������a���W�O;�����������P�a�f����������E�R���~u�f�`��v���T���7�
pY/����p�����[�-K)�x������$P>j)��p�jlh�����f�������$�T�nV��*$eE�z��U�r:�7%V��t�<b!M��ox4.����$2��e����s�@A���������
��Z�i.���fg!R���2'�Z?��`w�J���)q�k�u��[�NN�.I��\+��1���n��V����G.��������N�0So�������e��PCq
hA�}�6��G$:j^�r�8�o���R��<}����4hJ�c������p�����%�s�r��1�K����Se��u=��<��t��oM�<���D�3���+Yw��L����7�@����,���J:����/$������.W,���GfX���GW`���k��XPS���X���	8hK5��2���q�G�2���1w�����)�6�=���!���~��r�[�������$�9������?d��.k��SC���G@�Rp�#���n7$�A	�U�n����$k���a��S��M`6W��~3y�D�!}8����{�	@�������C�Y�����{���N�`�_mEYV�n����B~���
V���Z��t�c�������=�Jao;M9��	���`���6���Jo;��������=^?����Lh��A�1��a�+���������=�;4#���
#x��tAM����������}�A����Kz���z�ue�2/��Qs�yl[����i����I@E%a��'���BT����w��;�n�D���EO#�����G&��6��=����C({7u8���9L�g!M���)�KD_ozT����h��V�W��T��
��bD�8h���)�G�R�)������"us����]��O
q2!'Zf�/$�VE�;��:���j�u�/�c��61]*e���}xh�T���&�v*{R��'S']ZP��4=Bp��a���)�
��)Ue�������WTd�$���Z�y#�1W�=:
jR%b��l�����I#�qd(���
�z4<�LE���=M[�F$��g@��'}�OE�K�����(�i������m����8�a<�1#!S�u9�u/o,g�����g�bL��&�E�u����l�5��j��x,��OU�_$B��~F������,FA�#��u�NC-�d�����W$�,S���:�
T���N���J�l���������~f�����YV��<C�v������Av����.V$��������}�y����8?��'��X���]���N�_�7+@�,7e3�"-��{��g���.DT��i0�2�u
Y�zo��ng��Iv6n�*�aC7{J/�j�����E�� �L��!�sg�l>�����L�����b5u�6�?��I��C&����_��:4`�u�N�I���J�&{0�s31�B��nk2t�%���8����p@c����:Ny[J���VL�V�����o?������?g�g=���z��n���2TH3������g
��T�eF���[��������u1���!%-��3��#f��}�L�������*���QE���z�CZ�L?�
�u��|�H��f�0��� ,MY%���(sj<W��c�����?�/�������o
��c/��=��@&�
<w��j�Y����N@��UX���0X���l���L'�:���%��|%��
2�XJ��J�bS�Sr�P�*�>���d��\��6��ak�q���������y��ZQ��.��{.��n\%"{PJ����L��^���~D��&��N��}��!��������g%�����t��<��@-Xn�.���<^��x�`6M�}/���b0f"�:�O{3h����SLs����%5J�{���?^H��v���zX*����,�sx��z�J [�������
�O���*���h������_+�z���$�*����������nc6��d����J��uc�6��u�i��{���m��(n�_��|����B��
~�@c8T�p8�io66_����3�_����7�������h������|�v��BB|6����,���'
J����gOE��*�oO�$�f��X��������+�F���'���CV��s���"���6������
���]��4��A�h���3�^hl��������Q�\��B|m�X�I���He�i��$��'d��D-X�	3�|B��/$���2��3�	:���L0\I��p���!�c8�B��Xp��V��K��0�u�D�5c���<[�y�=��t�5��G�i���oW"���~/}�Q����?����E�J��������@jo&��	��_dC�^��3��`;�k���y����%h�������o(�6;Wh�D���E�#�qc��%�����+ZB(*��bJ�n��{!�N�l/>�G����y*�����1�)���"���ES�7��e����g�B=8�+��m"�����X��BJl�T�>/���F�\=���������_q���	�H@���{����>����������+b����@X�q�S3�"��0��VS-H���	_.d����5g��x����Z��8�JDF>Y)�
��Xo����J�?�D�j���}�����9c�*�;����T���W=���#�c�����&E�%�n�G�z�?w�3�9p��~���2��4b�"y��sr��x�	�Q�8�c�����`J,�,�q���--~!6w)jr���R/T���<������[�����5�:��^L���vN������&�����Tv��E�����|k~Z6s lmb�Td�E���:
������uo�����s9���l�~n	��o�j�W���R�,����'j���T���F1��7;-��V�k��=�
I������j}�q���?�����+��].��������:����z-�)��&�W�{�W,H_����
@���������
�>b���N�����F�w�W��1���
Z�e�69d:��$JC~�ii�TR�)0F�/�e4�a3��!rF�s�f)g,w���q�Y��if�6y��(?h%j�TiS�W�|
��l!RZ_�co���a���q��g��{����L:9���h��q��������2�x��l���17Fw,	`a��$y����X)���P"^6	B���(���wk0H�F����(=�a.��`R[���8�5��������~G�����pW$�c��
�HJ]W�d6�����{!���P���sh���7��`��e�E+����o��V��,��$��V�v�x��/��w��i�]��W�L�E��"!#�\�,�e�� �r�������������C���M�.i^�kr����U\AmwFO.Lx��a�c^jU��,���rKwKk2���*���	�Q�zU����8�����z&�1�7�������tK&��5�1��
����b7�:������k3�]N������J'����T�����*\I��|~|�+,�"mT���,bb�us�Z�
BW7��)��}�7w�&q�����BF�~Bh�I���nF�U6i�^bU���R�
n�����?m���M���
�W@KU�;��g*�����[�>)����{���*�(~��$�:5��3�lz���7Q@=���� +����D�>��Vn@>�_����j~������9�w��Q����i���=���3uG6��+�[
����O��s�,>j�i9`������J����V���4�(�[}�>���-��0�+6��A��!�O���X�0��tq�L���YN�$X<nLeV�GU��f�����s��}����m=J���sLYa���S;/M��^2d����~��g����~H�6P�,c������f��6Y5�d(2��x���L+{��!�:�Ve0�/�0[���J�JVGa�E���W`��$�7l���D�n�H[��"<U��;�z�,�a��W�F�`	����y�M�o�gq-�6o,4\H�ql;l����� ���Ty�����1�4i�����V�-��T������?H�����\���A+
8�w�G����sD��ud~��]c������&�A���Ko��t�*��?����z�w/��d_���n#6}����\J�R`��?���0��:*��y��8g!��5�2+}�^G�*Gq����8L!��d��p\����F~d���_lO/��|4���/��X\��ji�C��/rK��i��~� �"���Z�LxZn[�
��>P�\����wc'}���������F�~>�T."luYZP�A#����`��$��E������ \8j�gX��`v�{K_�u�_��.�X�5����"��"�2d+<�p!�DT�����}�F��p���;N}�� ��P6{�~c1(�wM���V��T�2�aG.0W�������7����������[�c�m#�����FI
�T��e��,��%�N=��'��{��ujEs�������v����?��M"7��$�|B}2O:���!�Q��f��Nt�|u&,��o81���! �t��o���m���"��kQ��^�p���� b�fC��d��x��<��"�w�-4���r8��#NH�LpY?5�:�""�U���qp��\hb&��fs�c<fP?���j~0fQ�����4��S�
�6R���9B"b#���F��e��R@Gy������
��,3��~00]�N�RdU��V{?��V�B�k�8�&���VY���n�<DF�XdnG���1E�"�<-��6�sW��WE$��`����B-�}���k�����R�
��d�f���lQ�,_�Q!NS�'�W�^���.��'B������D�����U����isq0P��$��E!����*>�P��1?E��;��*�G� ��o~���,���]~��\K�}@_8�P�=�	�����T���Z�
n??��~7=��M����~j��E��HUN��o�n:e�YHt�&v���.�
��Y@���rT���v����ij>n��dy����������-i�ns������/�!NS���c���mW�l�����;v&�[�r�H��;I8d�d����eL�uk>�T��������L$�L�������k�D�MW�g]W�;��a#QZ�#&=A ��FJ�$^��79e�f�$�w��db~-��00\�87f���J�la4H\�y�=���Y�t�'��g�������<C$�^(�G�N�Ca5���$�������gg� J��o_dyE`&�|��8����7�;2�MS��h��'$2�F�k��/����V�T-�"~L�������t����H�$#,P_dYp|�e;6.^L�����tT��v���b����s�������g�{.N(���9�,$��w������I����Er_e��������K�P@��xt�GV;��e`���%���
<�;y����ix�$n���v������
��
�����'��
XqMe��Y�}��*L�����.���BiD�^�&v�����b'v�hMl���4W��N�E����$�hi�l��l�A%��%��y��4�E��G�Qd��qrU��x�.%����:2��.K���A�U��;������27�V�d�~����#��t�jd�j�'�FW;�F��]�I��i6�(��A���'������ol����%7"�KNj-���?�`��Xp#�Q�m-kT�(��Yud�iST�:��<�K��X�p�t[�����Kz?+8�>�N�;���74��H�&3��VA�������<gCk�x�=����T���:"�Y9���GF9�l�xp������X�����j ������~��F�����~��_Q�m��]�-oHs�S��M��I+��}�n��W"����������t]�@q��?����i�J���J����J���:3��?�8��������E>0�qa�/��
�����tm[���`&�C�����NX�;����y����DF���~������^G��U:rn6]�n�v��	�!L�w��vX���*j��XF�>q�R��y��j�5v�/xuJn�$��������{!Z?V�qgL, �%��
t]^��UsUN���nZ����
REaD��T�z�B�X�o'w������������'����������$� ��"�%����S��Y�6�XIRQ$(t��n>�+}�H���
lZ
�
�vY�M�w��[@�L��&��clf�[@\�sK:��3��$>����w,-��<��yl#����@4�.�	���*�D�(tK�
�u����J��Y�������v8�0m�!1��X��g�wnG�"��x�,i��Q�!��[Fv��1�����J������v������X���'U6�V�V�������q���������T�������c�k1��S$*�E�GA}f�IA�I���������k>���H���Jj�|�	O�#y�P���6t�iC������~�??������������S�_�G������A��j�Hxz\!j�U\����C���^���^���C��5�j\WQ�{TM����7h�?o�����7��7���F7�/x1M�y�|y�J�T#���$��:�LF~pd����A	zb�4���&<�"�YQ$
Y��qq��ss�i2?u#�&���VU�7J�x�����S�6\J�y
�8M����L���)��;�7H+����������p��,�,Cs��7��;�Wm����2�M�����,3�w�������f4e-A�[	`V�i"���lj8[�Z��:7G��v}3WfEM���B����Xzt���L�0�h0+���`�AT���<�4�b��Z�98��3+�a&;��*�@TZ���4��\a�*����4�l����;�m��`��NA��RNH�q��w��}<eK%-Tm��R`����N��#��9{�3��=]��3�i<q�k���g�z�6���H���������yO�-4�'
]2�+������<j8��%��1�Z��?q�r�O2���#��	��aH��<�JD��lG���l����^��.z���������hf���]�L��=7�Z��+����*���8fe����QL�BD��+���w�v�����o����3�	}V����g�${�"-�0{�U~b:)��i5�w2�VQ���M��G��'�����)�T���&u!"�����2��2��1��L*O��6���7f��6��2L����sZW�uE���{��"�dIOq��Q<���!]�'o%h�����tA���%=���8�]�?�e�b��;��1]���[�dc����rW���mEZ�#��'N\�����{dkz2�_X���<�'��s������0����Ov���J2������=]��D���\����z)Nf�7��i��s���2[�5!������ek� �K��4��\������;���������t�B]���lH�U`#l���������-E%��H��@��@C�E��vP-�����n�����T��y+�$Q�Q���[����bGot�M��]PH(�#��@���B
���_[�?/"2��d?���-�nA��uX�T���Y���$��}/D��������h�\I�"�����Qf�OZ1/]q%/��G��k�A<s��	yz��c��2�f�9�����Y���=������)� �J���&H��of��-��*J��S�"2���R}��34+8F������l�7;+���9��{�V��A
Wm��'�>��� ��M:�LD�����1,��O
���E��&5��Q.�����osk�i�~�;V����G�ay�3��������@���0��'r,���m���L{���_����osy����`�t����E�����+����tP�-B)<�seh���@Clxn��d$m{DF����p��B���������=/�)�<�DD��x@����$�P�^�z�Y�3�"f�n��)���H4��7,�yF(�4=iU{���"mL�W�=Nl���rxj�cOW����x��H�<���1�m����h~�I[O�����|VN���
�7t�i������#G�:?��� ��g�,���Z����4����C���Q��p���!?��4�h��
�D���X����}a�p���4��
�){l��*/H���Qe?
X�o���
@B>&����n���X����/p��Dj���}�����'N,H�n�k���d�������WBeFV��v�2Q������;M�0�P�o�>���p�N���R3�X��$�y�&d����
��|��S5f������6�������:x�d�UI�/��J6@;9��qE���g`&K����������@�r���P�^uKW����3"V�u��R��B3�vy8C����gp1��I`��+B���6g�����`9H	�h���j,�=X�`t��H�n�r�*��Ih�7��2����C�lL����A�vt?�����8~�cdh��n���0]��;�2'�m����exK��u����a�l�v$�>c0�D�����g������A����t��q�u��0�����7��n���.������_��B���s��a)6,�K#5K�,�c��BZ�%�&vIF?q�-0����0��y�~�fs
�c�����f�v������'�-_V�����Y��
�����?JHe������Ez�����[�mD_$��������`@���%�yy����* 2|���y�z4�y#dWL�l�%�y�/�+;�����2�|�����MD�F%B�[��5'g�&������z����fr<���q�����?��E��
|�H�����h~�%�MH�g�:��h�$��4��T����`��$&��W����`���������e�w�������B�GZ�~�i����{�����_��R��F����Wv_�Y���7����k=G� ��Z�%_+��%w���k�=��z�aCj����qo+�����GA�m1�kx[�P
�.D��Y���=�|������Q��\P�nG�<O�3;�ih�IodNE��H��;����������>��G��s��J+Q�b#�m!�h�@�����^��6"j��J��}K��'��+i�;~z��_�6�kd���S'L�����ey�������T���@� �0�_,-���4�#��}��K: ;�*�:{�"��H������S~��&N���6��[`���1�Jt�p������)��-p��}[kq�qE>��*��8
�^���b�o�����n���<����;��d��p��&��s��Y����ehG��1j������/��5�@�:-�m*� T���T!�T�I����Ds�f��e���i��T�J4ew�����Y��4�����K�/�r$�$���w
pk���{���W!��h���4M�g�E�!��4��EP�_mz���A��@����<y����6���0����J<��OZ	�W�����$�i��E=����1��o�:��f�L�vx$fpoW����t�D5h!O��K?l��e���J��:���X�i�_u����uPk�;�����i5^��LT��4_4��v���(�R�����I��f� ��,jk[B"7�����I2	���'3���������H��Y��3h��
���
��/+�$s�PK}��������:6[s��>��tN���x)�}��]1��	�/��b�����o��$��Ca��ci��_\��x������Y%"��eu����G�Q1y��iF���a�*Q&���x������/������y�g[Q|�U�V�����-(��`����l�
��l=�p!Z'��b2f���NFc���b���8����i����4��+��H�
���a��E�W�y������&��gg/��e+C��-r�������|�n����}1$���N��}�LX�t�= �x��?���)�A�~7h����(�`����j��"'�����:5;�W6��j/��cy9k:����$�8B��f>���]�/`�����G��f_��`�9�z,s���G��dG[L� �������-�)ylm��y�~&�y#}�#�#V��W���^�f�����3����Usc�e����E�s��==P�v��A�&��XH�����eJ�I��5!�U*v��xV����Q}�C��R�8� �}���T����2R�
juv#��������|������Q�����C29O|7}�:m��V��X|^#Pcg����
��&Z%�|[�a�w�����E^h��u��[�N2R�%y��d�edc�>��)5�m�q�Qf"��H�a>\_��h�@���68��
/D���������Q|�������F<�"���sW�@�4p�/]��/GL�bL�	��+����uL?Nt�iL�"��F��#mr�x�tR��G���8���W�0��P��{Y�d$�����UR��q���#51#�93mFH���Q��n�9�1}Z����uL7�~���F�"�Nf0q�+i��y}�S�0���s+�����~�H���X����d$�����z�����x*g�����[
�J4��d#���>�jIa��K��;����.���L�����7x��~����w=���;�������]�O�>��������V�o�u]��UL��S�C��%�q��b�~����/���\?���~����\�W��b�>���^�J�A,��z}����������w_���� ��G�~���R���Y��^?���C{w�4��CL�����u,t����������}+�!���^�CL�k����G-�����=_����R��Z�s-�)��u����v����Z�s-�U�������G����u:J����G/�
1�����sm��X?�Y{�b} ���X��}���v����.�t�j��j�Y��\�����*�w"����w��A�
�!���^��[��-���CL���C����C����C����C����C����C��G�>��[�����O����n�1_�n�1_?K�E7P�~\?��{�������si���\�oqC������'7����
��rCx��n�]��b������?�!v�On�]��b������?�!~�n���
��rC������'7����
���b��E~������eNn�_��brC�z�;���s�����-rC�z-������;���#�!~}��s�����k�������������Z�s-�U�������dHxg��4d^�.8_�>��������a�+�@$HYd�3�F�����%`a��0U��B����Sv
{PA4&$@NL�������H�Q�|'"g�h�������K���y�aK�N���z|�3/�����D��,"L��7,��S�S�p=t�e��L��!z�l�
H��F@�^�(!�_���xc�r�����*@NNp� �=YbE*kv���������k<�N7�m������,�uy{8y���o���hg�!SD��$e�iQ�#��"s%&�o d[Z�������r3��@/$`�c.h��]��r����x�q���&O����`x�2��Q�f{�Z0��2�L���?/���
�(G}%"2����]U��G`�Q������0I��\j��7��/���6�wg"�����$��;�,�y*���a���D��,��s�O�Nmw��s�X�1.�@���X��vM��������	���hW����c�v;���-��J��d���g�����tlvm���d����D�����-��#@Z�Y���5�����%?�/@���n��L�[
��[���q�~g�ei
n�%�aF�������<����7�&>\F����O��Y�Z��%;��I5�(��*��C
���wm���<�is�D5���m��������R8����K�e"��Q�����y�-�t�2�)��/���+RO
?s�w�Gx����
���FXv��i���y���^��'������H��zJDOi?�Ik%j'O{��+�Y���������`xy3Rk�Y�����.JR-��.#Y=�~�����#D
�N���'�����Aw����M/e��%T���`��#�
.ap�+�Sz�i��W2;����_ae������D�&*)�f\�'�[.6I���9;N�U�d�p(�d��n�Ukp�����L��`w��tO���MX��J�k��Ro��>������8�����?��6�w?EL��B	L�1!u��Q�7�hg~�nt����D�������0 �tv�f��U��q��|��6@_�L�vH����j����o����6��*@F��b����S��9�d���E��?�����y}�_C

�b'��~.��
�O��X�9���O�QT����X�B�����26.�i��-�$i<�q%��"���M�>������.`�T�a����A�y#��F���
g�}*�l��y :L_d�5�\��1�;��3��|x���a�'�_��~���3����6I�I�����]�}�K7[��I���;y��i��J�tX����v�J|��;U�=�>��>� ����4D{���;���t|I��������XAg���o�2�eI�������\���F=~@��^���F�EmO<jD������>Q`zg��(���?T�(!��3�S�����LmIz�����r_�`�~��s_���,)=Mq?f�7�PA�~(1�,w�(,��C}tI��m�;�uz<�e������-=n��5'N�����	&����7�Y�=��Y�&h�s�>/��_��a���u�?/�q��,�E��}��,�>/�W`�N����
��8�(X�+��0���J���/"9��0�m������"4r����������F��9�5r����6N����/p14������y�N��l�{���#���J:�/�u5T��8��R+����e���j�,&���8<�� �8����q�JR��JK'~k��#��k�'�����++��;f�8�vr�1Dj����]��?/bC�l% �G���'��T�Tk�1�����1;_�t�1�P�1���<'�b��d��H����H�iE+��1+	yp�#'�����;�Z���Q�4,3��Vn�^&�����a�c����_�r��D���g��V��C+�}�n�MUh��M����AA���W 98������ia��HzLjW`��#�������O�YHR�Y1�O�B	\>�������}N���@m�~A�=��j-_=_�+���1=���~�2�b,��d�<��$|!xG���e1
��,����Z�k)��n�%H�e�4��r��b��ak��LqylM
����U��y��|v��h���0}�_�N���H����8���-�q����u��i)?W�������f����4������Z?���r?vc��]�������1���t����&�5�F�Y�l�@U���X�P/l��w!��K�6g{Z��5%X
r��bYa��K��B0���T���s^�Dd�f�5����������4�J<��G���>K��}��]um�cr�J��{��0:,���@S[T��a%��C�QI=�������e �9*��A�����+9U�F�_��*j���S�|�R���LV�����&�1u%RhL�_��'zvM��vj�1�������beT"2_�`
�a���B�;m,�NQ��"Qt"v:����$�����E�huW
��m����]Tn�����%�i���=l�wQ:��I5�c4%������7����;��������������������Ec7���+���'J���s��������*����������_%]�u�J\����v���I�4���eo+:��>l���,�0�/t�2�B��g��B��i��^�.�2VO��=)L�5!�[v���-�E�t}�x��V��*�T����������3b+�oa���i�������J�Y�~����^(���)�
�s�)������v!����D������j�?+R�/L��X2,�	�M�f�U���f�_H?��=�f9�d��xf���r�I����$l�I
�������������2����4�0������/@D�j�U��Pa�A�#�����X�e}�Y_�W��K����;��^�����'%��t�d{����s�����_Xl�s�J��
|���s��
����|�Cd�]V�P+D[R�Jv��B�p3�'
���>~���|���'_s7��o+��"�����!Q&D�+��@�t�y�/$+t/.��_�f_�����2�t���Y?�<���*�����`4������xn	�n��
[3�W���4�?bEx�i��t|��o��	_���m����CGO=�v0��]>lfW�G�H��_\�u���=
t��RP�<�fg2�O{��|p�.�p�y#8�����E��hJ�.)@��};/�,��"�h6g�����8nw��I.��_H*�:��F�[���Q}&��>����:��!Srf���gs������{^�*T���������L�;]L����`�y��[P�6�l��RwnG����?����Po�������n4s,S'������n�v4j��~�lU��s��a!��H����,���1]����V��b
�7���m%�J �+0�It����\�J���Bm�14��������#�vq����\�_�k��s��}=�~����-K��F��F��Y���SAR���3�1H����8�n~���%�")Y�8qc1<�#q���qaF��������������[��S�������d?;����i���l����x^�A�v��Hd�4���;b��c�L�.jx��b�J�~��%��������n�{�M�~�Dd{J�oVSF��+��>�	P�2O�!�/��q�_��6F|����d!"��j���dU�,�����
D�������v�]9�n�����H��W"�xee	h�2�����`F�C�������&���C�d�m/��4Z�����J"�t�:7���h�\�X������k�S��1�%�F���-����M`��������[��-Z9"*N�|v�����F��b&�V$�
�z"��j��]F_��y�������[��AO��n����`OO'�I��T>j@{�A&�x+*B\�p����u&=�����m�4�S3����[�y)���wEQf�G��^"���)<9+��(��rE2��
F{��*��$1u���T�������BoE<��W�=��Q����gz
o!R2~�l9<)|��`6qA�G��y����5��;X����+v31Sx�h�M'��XC�lf���!��x����$��J�O&���-�,;��n�5����
�u+���_��������a�N����sxM�\4K��xoH�M��l�~%Q�LI4�	@u&r��(8���&�9���:�+��~XQ�h�}��\3�- z����3�Q���9:���m��;�6�h��(���'�%"K�,�<�
/�_nH��6�9����\��x3Y�oS���_�5��W������lH����������%�6N�98��j���\���Fk�LDF&�v�S��vXN������L�^iA	h���������>L�f�M�|/p�D��-�*��f���Jd��$K6\�~=N��Bns�$��Se��oH�{0�?2�k ��������
�2������%�����u"	���D7����*hc���V);���%�!xf�L�}4�vZ>[��8��ZH�=�=0�n������`���I����Q�DS��X��c9�����<C��{x�,^����	��d�P�,�-��8}eI�
	��AhG�v��*X�~���:D���8��3�
���;��CRX�tG�4�������FG�`ct���WI��s������^����D�*�x�z�0��e��P������P�1H���*������
M�T��t���D�|X2�}�zvz�=3SdB��{;��-�z�u�H�1\�Z����L,]���Z����p�"��'��tc���5e�Y&�?��f)�	��N"���9�$�}`Z3���L4J-�E|���
�Pa�H��S��2�?A-��^����xuC���^�!��u����_����}��_�W>�����w#A���l���De2!>��G���������^,��1T&{�{�0Q3A��xCtM���e^��i�������:g�"�}�$��Hm��l%"s$�VY����l%*�d��I?��lL���0tVT�t[�*�����K(4�a�mp�
��p�T�H�����8������6b�E��	o�+7qf�9�*�t&����BJ��G(z�g#B���N��q���X���s��U�9|�B�&R�d�[�8�O&QFK�����/�i1�2D1�"V�^};���B���@���!��3z��(ze�k��|y�y��l����m��8�J����\���=�9��`%Rz_LH��u^�Iq�U`FQK�� ��W=�n�Ycl���������xA����"d4+��Q,SB%?�]�o��W�t�n���>D��7�`"�g�O�����7�ue`/��4F��Y���?5���������=��_�:p9��8���4����Y�
M�Y �R�*;�
�����t���Dd����1	��W>h��Q��&:� ��f�'(�\V����v\s
�������@��	�Z�ek�u��IM3�HX��Y�4�-�mg�����,�������WVM���L�?/�<}�g"z�����zX0N���{y���
��PR�%>C*r=R��J$�����j_����^��S@*z���g�j�S@x$����DK�%�n����f�U������:ec�����^�������R��i����~��ja+�n�C3Sp��u'��O��L
����0������=�t�%a+I�����~��ey�	#�'p������W�����&��>Oe����HLw��M�>7g+����������AW?�/
�3��^��pe�|�-����L4/y`���a�������t��j&�h-";��NH�v� �0T7)i���.�������`dl#&�~)��Ap��B-��2]��`z�OzB�g""�VdA�hC	@��g�����H���W>�uj��&V��<M��@����X)q�����OJ�zt�d"���+�yo��p��
	�������L�,������Ml�S��3d�cDh� �TI���Jh��#������������L��:�����x,&"�*�"�W�o�b�r��
�R���U"��Y��0k�dAe�XV����z�=[m+���0��mO��	���Z��@Rqo3���sE���P�v��T��
��4� �����9�-H��s��0]y~�D���R����*���f�1m�c����$ ���[�N���d2e��U�c�gx�=p.:s>y��lA�E|��|Mm�+��>�(&�F��6��K*�@��)	����g�fP�|kX��U>6%��\������X���&��6"<g�3��*�"ZU�F�f9�	@��6L�j^�%�dV$�5�6N���7�#�����;t-DKgZ�y����pZ�oEZf���=t`�we
�L@'���Em]�(N'VT����g����!2�d��A���Ru�|�C��`%*Z��\�tQ�6��	q����=���-�
D6��q�A�+������\.$q�1��C��V1p ��AdX���O�6�a��O�ak���Dl���=�<j �t���j�����vu0Z��$
�,h����<7J��/��@��
7��n�b!��4"��A��0h09
��M3v��cF��x �~��H;R�`(�!A�DXW6�q�V�y�� ��gG3n���x�@���\)���Y������S���d���(����<�n�����?��E?;��At�U�O9~	�*��Z��T*{2�3z!z02�7h�	�H=HA��1z�����PA+��RB���%��=7��&��	o�����r�~2�V�!vp��f?S�;�U� h�-#��^�X���>"��@=4�n������ �]�cg�g#�!��T�Kx�g��k���\o��*�l,x����;n��
��tb�Ydk�	`�U��������y��(�8��pC�<�d&��+X�4�:�$���>l���)x^�� ��V���1����SG"2N���'l����m�5�6���*<�	�cXT��3yhb?;��}Vp��2u��De�����	$'��?+J�vq3A���3�#H������_�?��,e��/�66M��O������F}����J��V�,��9�)0fH/��"A�x�|��1��QK.h�:�b.�SS|�-X�gL�{�!w�c1����H��/>n-�XL:����O�=X�Q]:�O�D���C�(h3��Cv"%V@�j���v'$��*�A�b�`r�t*��Xg����Z�#b�D����9�����2,�X��$#�(���\�N����!&����H��k�E���r����c$YP�x�rI�����rOb��Pr���$�$b����f�^�Z��3~�)c$p�TH~��w���'�E�&��g#��z�#�S=f�Y;���HC�g��]�����:�+�!��6���C�yT?�""�k��S^I���Z�Gdc!	1��1�I_�8
@�������j���g���	|��d����h2z��8��;��9;��k!���������,3��������.��6���[>���KQC�6�5��s���w�]e�Q!w�EC�#~��L��='���������H{����B���!@D�����>G����V�;��x�N��R�vs�NT.!)�T�.vU�#��f���|�����]��88h���:�Sv��wj&8R�b��N���&������#OO`�
�_#CK��_8���k��k&��N�����K�W�aWe�f�P�r�������m�B[�9A��a{��@{��;r��+�i;��rs���7��vE[���i|�����7H�m!g+^��T��)]��hX����S�*+�fS�+����&�0�[������Dr�ctK���s��|�i���Db��1]��h4�UV4eZ�vL_��tE�^�-i������H���������0��6n�>-�B^=p����)h6O2-�������A�k�}$�l,Z�f���%�PA	�hI������+��0�v���/\������P�L������������6�/W����lLW���c�zS6�#�C��zX����ft��A]����>?;���A	�l�,������_,����m9��a	��gCfP���}L�[��x%2��B�!���@�G��J���%��x�d���'��)��,�;���`�OZo��x$�u9���H<
q`���W]tzx��m��?M���5��N��XI���xy��z�X)hr&=Y�s��~6����'�O���' ��Pq0I����H��B(�����2AFK���g6#(�D[*����S
���5b�t�;�b�b%�����vot���� �&�-;�1=�XI��[�'���y�y����c�iB}y��l�N���r�L:�lXL��E�_c�D�1��2<x�gcX��[�S��9���!r��9�z�@py��IR���p��FIq<i����EN*�>�$v��F8)�EZ?,�;���#�!n0�^��XP�{W�4��3h�G�(�J�2��S��H��3��(��&���B����H�2U�����Iz�s.�.%�l,���\��"���}&�M�����)
��\����;"�~�����?�����}�4uO���L����V������;Q�DMl�^&�����T�7�$"Q��J����#�
|�x������[��{���F�oW�
��^>-�He��.
�a��.�����2Q��~��S�l$��������^�����O��$Sf�dF�\f�'�u��P|V�"$+�lP�����8��b�`o����6�K����*�_�i������P�]	�~�e�����_������zd�����L��sG+�7�-U�["A�8����\6��}��x�5�j|���h�I|�p�W���{�"���u���@3eM`���]�lZ\~�A�d�p�RL�yX�IW�c��c��yOg'���k�Tw��e������&F�w��j�h�r����m�64��t��}���7��2Z����39�";�c�LJ�U*�9mn)�r?'��=�&	!7�O"lfBnF�b?v��Jf�Bl�%���4c��� ��Z��d��,�����E?�wy�M��41����\�v,:�����sJ��cQ��g_�����j;��?�yB������%P��'�O���>�	����D��N�3hE@���ZS:&�&��dF
~Do��1���h8�����Y2�WV�L4�����Uw���Y<�z�h#����a�����6�@�� �{}��i*j�AA�W�3D\Sc?Y�I"t�+{	d.���Pm���2��O��)|�f��n>;����G��F������,���<O���9E�BP�0CD�3D"�T
��lm�XL�(��%�nl��o�����q0_���[��%Rss��!�_i�����|pk��K��SD\�J<6���"��1jCH�L2-�'�D��(����Wka0-m�Af|Q� RMa�H����	��}�Cu� 2+/\����	�0���1� �rVI������'�D~�+L	a�gb�C"Zj�A-��m�22����8N���}���������������x��*������C�?{������l�2�1�]O��WQ����>~��2��������������������w/?�n���g���,��}-���D?�����]���P\����"������� .�k�����K��\>�H���{>��D�{�'��_��6�����������l����������?�[���q�������u�(��q����?��?����E���_/������K�>����������?��������������A����_�#���Ek�d3!q8v$��%��{��������~�y��|c�a)�Um}v��?���I��t�`_�����H�_~�Ne��@?%��������.)����>*��G����n7���Rp�M��U�YKW�M�����;>O�e.�����W���R���F�3�nl��>v>c�����tl@��H���+�����@���;�O�N������G�yrfbd����� ��J�Z��c���dWs�����%rX��OJ�n{lH���O�������g"�n�0E�Y���<Y���$�^;ld"}�����vl��`9$��{;<��s�"N�F5Z���eA3n�A'���)/2k�XM=3e7������|�� ���7��^YQ��l�{p?!�����j$�1T�}���o .$�j�?��o���^�[��}p�q%�}�w��=���L.j�I�|���EV�<v�h�!���c��mS�����v`[dkRT&{,�k#T
���$��I�h���N"�0�s��C�h���e[L���$TA��Dil(���l�����O�P���kI^�1�l����
��D�as��p��
=��EL�5�o4�	>eg
�E�z�iGVb�Ln�{�	8(�����Eo	(��U�r�-���%�Gw��r���p����V��V�}@om�|Jf��L�;���]�������%�x����iA
t�����E~�o���|^BM���3��<�;[�>�Q$*���a[+�"��On���������W�2]o�d��a�9�����=�S��e���x�; �t6��
��Hbt\��l�Ok�	��S:���C%�5�f`!"sl4�n��0 ��i��9�iQ�hA*cG���l��"+*�Ha>t�qw������_#�%X���
 5jN�E��j6^-��<���h��8�qAEI4���*����I��q����b�Z
]����"��M#R`���qx������#�
m�z�u�hA}xQ5�����
�tQ]n:,(��Y�T2-�w��Q�|�������lim���s?�Z}�"b��"#�\R�f�G+p���e��h����p
�
�:��65��$���������T/�D�Y�c����xy�UJ�<�p��R����������^3h
�1�BD������}���hI�8�4�>����o���	2vM����p�r'��A97M����"�S@m���q���e�������GT@X%'���szx(�
��$�L�M���gW�<��ny�N,�(�~��NKB�w�"m)�>������(�/���B��|�8=�����j1�d��c�`<�=mny�k&���IS�B����?8H�Mp�����1���k���M���1M��!Q)����rB���xRB&��a��,$j��������Os��CL9�L�<�e"��DO��f�$GHtZ��%������G�Ps'�������(�@7�����������bq`�V+��Lo�1��8p��y�Y�8_�dy�+p�����:K@��.(����������������:������(�7��Ko��</���}<`�L��fr��HB_��0b��Z�.�aH�|������kEh��4�^�c,_��A�v ��= *���Y{x6������T�T�I|�`"�;X���wz��S�a��A�����4��CDBk	�O�LmT?xV�9��=�.P�(��c�tw�h���H���f��[�Xoz��������+��W;����% s	����}je
���dj��L��%,D�':O@Ul��E�37#$�Z&�dB��������u�r���-�Z_n��-�����;	u)��NSL�� Ui!"���l���J�V]Z��9=B�����na������Lv]2�pH��������H%�J�H@�V��m��L�N���S�6��ZY�����H|Vj"���s�T�{��~��Y�p�f@��-���tiA����=Ka�� OMviqt�/����������������_�y�7���YK�&+6�)^�C��1�j�s�_�kj
���J�/�NG�b�������58.�_EY����|�g �A���Ls��n���z���1�(������A�#�3m#G�����������'6^g$��Y]o�9��l��o8����D�
�zX����.X�~{�c����y���n>������Gt�'pUw����,1��;w�?;��q��>�mfv!���=�l)s]�el�������DfgA����X�iC{��j��u�F',,buLb�����~�l�k��3Yv�;���n7�b_C������-��F���i�����i���������t�W�����5:��
*|v$��hl�Oy�(�����t�
�i�LP:ZT���&�����=��zw��Z=�l��1�*3#�J)��>�y>S`�%�)�f�=I`G�oH�^w���E0��CJ�D�����
����5jz�oOV����Ek~_=����"w�
e��N�q�v�I��l�e����)������`
|5��[,xR$�����v���� �x������@60z��*s�������$2h�9���Yya�./�f|����t"�/�Q���W�:n� ���T�S��B�+���I�I�h���%X���d����*�Z�M}H�D�q5U��������>p��X���LD���t���������<��H���t�C {�B�
=��I���X���V����9MW����G*�=��Q�������T0����}RCl93�i������ ��SLui����%5J8���
A6��r;���9/]��8U�C�@��S0�l��R�?�����c����=B��1�wVO4�D_E��m.���/�:K�� C\��d.�����N#��zoX����%Q��~"����B���6Y�����.� ����Sv�_�����7DPH�������n%Z-7+E����~��Y���Z������~"�P.Y�)��>.�'W��:�^I�^'���`�'M\�����tj�����k`%�;� �{�I��U���j-���X����j������,���wT�����1L+����j�:�
	��	`�*]��"�����d��l��L.�6>��I�
	x�c	��q��~�ZZR	���}�}Q�!�nH������fbat_r����6��Ik�%F�l�g#"{X�N�5^x�k�o��LD��T�M�*�_�i��ux��Q�����O;��U�F\�xoc��������t;�v<sy���snH@��w�1��G;z&*2�T�
`���
���<|^�?�7V�o(�W#>��>V��PT��bJ��,Xs�!�O'9<_�xS$�:6Ouk��3����,*BG%,��{���[�cY�_>s.������&"9y��k�6$ �&S�ib��1U���A���A
��(����\���5O`CN�,����k�/a�����3�9�+b���t�����T�L.H��,L��T�$���-7e�l��}�#�6/i��k=+�+��Ja;L���l���J��n�U���<���l*�n?�������I���������x���N���E��K:\�M�i���}Ns�������e8���L�c���e����n���
	���;
�8?.����L����bO����R`3�p�"�&OT���������~= -�
���kDu�lL���NgM+M?�*�����Tv���"��������s �mb�Td�E����
l����u;�����g��N��]�F@=��>�}E
�.u��o��7Q�M��C=���bZL�o�mZY�c���<-$�
�
	�^���z��>I�&_�<c�g/?��Z:�n{_O[���^)
�}�5�����	�+ZyuT9�xt������6��Xw�;�N�����Y���oH�1���
Z���6�3����t�a]K���4N9�1��H��
n��V��i�8Gh�����N���
m����m�3'F����!S�EI\a�I�!�B���,���'����K����(�}�����;�]�����1n!SFNCd�S}�"*���bv�)�	,
�� ��oPk)%��c%^6IB%���2Q�D����`�jG����(=��\�	���������*�)����v�:9,�����v���������:� ��\�!K�����{!�<��X���4��}e-�.ZQ�<��4�n
����
2�a+KZ��H���/���r���8w��?�pn��������8���lH
{��4�����O��Y�1�Dd��6e=�E��!�z����[�)��������������g�f7W�$�#�m�'��ZH	�����8��=�+���PX�mZ��S��s�DN��8�����4}j��'"�}�������5�
���6�1������O���0��Y`�!��������_Pb����F�Q7h����$�x�������Em?�����0�f�ybD?eg��W�qV��N3I�j6��x�&=~�=��d�8#^���2�E\�_�{��Q�Be_�K���
����5ya�i%lvF	�B]�#���F�nT������$KVo3�bi��bj���u�61�J*���@��?eE"�|���wriB��P�,]t���2e����0�_��uud��+
: ?	��N,>�zB4u���YW�f���S��Q�h;�(����0���q!�X�3�{i���i���K.h-����c�!�!@\b�8�?%��yT���sZzd�����`��,Vs��c_��|��
�������q�H����%�8��!��
4�
u�Y}�����#U�����&�6�x�+8\@5�����7\��6���5y�7�zPPI��{SD�'��P�-)>$e"�d'��.|�����Y	F�n�����[�x��h�g�����i�yM��ev���#�T�8�����J@�`���,	P�����$��i��s5�y�2,F��!������!p$���4)�
�Sv6]�$h/�_|CutN�	Qk�yp�cK�6��g�;�OW�weQQ+������A1��g����=��#�����
�^�^����V7�9�vA����+��5�Dlw�I�r�V��|"u�V�5�����_�@h�y.�*��t8���7e������{��"���G�~5��=E�h��t�,���:+���aX��
y�}�l	������1����M���:3���s<2�4����pQ=��Am'�{.~6�i!0y2�;��S6�FO��s���t��3.@L�;���=��<����j��d�B���������E2_��!h��`�+��B}b��2������h�,���c�.�S���LQ��Y����j x�7��gm���?���s��>�4^,|d���t�o��5
L������	p~����R$��7��z����FK�F���Q��u��km�<��*Gy������������������6��<=f��0T�J����c�W��f���R�RW��b:��R^���:�90��0�I ��������pQ�F�SM��$�����4]t�8��!��k|�db �	�b���n��N0�	������"�l�b�p��_�@�yx��JD�p|z��rI5�S�~��&�ED�z�'�In�p%��������������D����	�����S]���t���T�['�(�?~��'_c~9R�H��	��/e�����������1�����M$@c
��7����aPq����XH�<��p�����;��H���e2�T�YL{��f\ 
����P�����- ��j�y$Ho[�HT&K?�����vhC	��*}0��
1UB
0�A�g����6��lD��>2�Wx
IY.�?������G$:~�x�%�j���oj����'����c�������\�{�`f�Dm=�����fu��%�8�[Hem�`��f+��������:8�df�0����)�a������`o�}=���,��P��73�L����~�8'���+�C�0����)Q�L�cz�8G�>x������e� �~��ZIp�tX����v,Y>�������@T�p�y�/��=KH�I�4����:���]9�%w���n�eKp�x��\B���$c��l,�>��F���#�j�{��"��-���O<E�V]���������/|���d��
�	�
��y��W,�IO��lDd]�.2&��	�����HD��G{u��{�@�X���1PV��"�8��"�����3�
@�X_�t����8�����_��#�t���)x��2+�}-U�=2�K������a�JD����\�R-mm�J"����;g����@�D��������U�%Q�����O�����=��(5EX�v�<�������\
L�q>!Q�m"���0w��u��+��	�h�T;�xCs��^ji�tB=}���t�M�;��i��=�&
�?���I���@����r(��DSp;
����P���LB]VV�W�6,�����3AP�J�X4����0����MGY����erq������<�^_t� �"Q(�9/��<R��\��2x1�^M�e�,}�m�xi �����Z�f�s�QM�?A�8�|���?}�D)����K`U�!-Xgw�|��C�&�5[xa^tj�5�����m�g*��&���f����o��_`(8�v$�!���./�7Dvqnv%�S_}NU����~	��%V�����(l��U��H�h�����U�nlPRUb����e���*�&�V�V��v�z}���tTx�����"pWc�W������fR����v_W���������Z��KP��.�RM��/�jyC��g�QK�����?za\����Oa�U�*P7��W��s������_���qy�9�}��@~6����e������I�������o��� sv����"��p�M;�u�L�P�&�g��:�~���l�E����z"����H�]���,����45
`��D�J��M)ak�tP6��r��qV�H������aW���~�]O��_����M�F�������-�2�v��.b�Eh(_j�i�����yc���~w�o	���u�b,H��W�R��|�^��`��2Y�����+iC�.��]H�`$M�Lm(TV�t�V'gY�P�7�Mo,y�9��lM3�����g-��OH���~��<9�����`�*>]J����"��[�����#������qAZ���:�,���p��k��?
ov��3ec��������H������}����yCa���@��C�6~\���I�����v�P���v����?�F_�-,���$=F�1�u��?�5��)�1<�#��^���������E�<�5�H�gb��K�������u�$�����yrT��Sc���J����������t�X���aWnV���|��j�����o�?z������D��Qe���r��2��|���3�)�V�-!���_Z�Yd�$���Ay}�xR���Q����������l�|�'����Dd�d;�^OD��;;���|������/��������?��r���@��9�c�z�4�^{���~������~�'�b����w�?�����G�J�]��98�rY�$�a����T�[����r����� ����gE
��s�$@��	]��Q�{0e����XD=7���r��jC�6���#����QXg&@��+l>+Ba�����!�\o��#���_��R�|��������Q�B��@A�J�_GlJ���3u�X�_#�Q���cu���KV��8�EK���M]	�1�+����F���~V_�f/�V|0��#Q�+�G1���X\���vSB�����:��>[��U�^<����o�E����6������������9���D���=��4�L2~v���C��������g����I����p<2G�8\������L%Us�6�������y���-��9pS�pq�������"�iu7�`K3�C��dH8?��.H-���z��T����\4���������N��.(��
��hGBY[0��D3�"��r�j����BD>[��?���taQ3`OWM����Q��B�Hc�pYd��+��!hN��k�"�=a�Po'v�Z���~>MjFE�~�:m*��hS$@��iS�����kX{������D��Kw^��>v�U]�V�
$��L�/^T������
T&S�k�wL���U�a��l��`�hXW�zeQ��0 u�Zvf
k�5�3N�]t^�*���V5��M���=)��r2aH~Cm���l�k����1fV$������q�=�H�M�SZ�v"������_��B�L�*�|�#�1R�M���j�;���hT�GGW�q>�m�&5�:�I}����U�J4����YK�+4c��fR"0����dR3����E������9���r��4�����~2�/b-4~]��T��9�����}�	��������� �������<�1���[��5����Hk�G��a���Q���=���N����������vk������y����d[j�������<��JT�)���-��
c���e{��J���?+�2���iJj&p>��D$��C	(H������M�f����b%z��u��'�6^I�h^RyDn��p���rXg�M���������G�7��a|�a��%�K0g<6���z���<�eE��rQ�Zy�Br����y<�|� r������q`�u������L���XN������������N��.��^Ce�Q]���5(��<�:������@�kX�"CUl�~C�b��H����#7n�vri�gG�Y��P��_
�X������g�v��(�w��B{C7���,���%���E���	d�����%�Y��FU^h������[�(7���D�&���\��&��`�
�{��,U�dK�46��v������)���vs3��-��k�%1c��e�����a�n&jwvL�<jYn�< �����$�8�X������g.;0��Es~��|+:��L���o�1����gc��=����1b��DT�@]]9�@�3���^���Q�j���{�L�!N���?�z8�V�����cp>W(�������_��C/P����X��������Ox�O*��� =>w����7h�@��=��N�{S�vB.�;���cl"?V���;���CH���Y��);%~AZ�H%C�vr��'^�
�Z�T&���KU/6�����-���rP���������z}�u��F�&������7D}��t�����c��$YO�y�
>c-���8	+�G�������J`p�lH����R����%Z��r�d�1g���g����dr����{"��}����-�v�����O0NH�B�50k���,���6{61����f�?�
���V[8��oe^��>f�y�7�ag�'$����A���u
&u�;�M�5��|�������pg��s��#�S��:��Z����f��rr��=�_�0��;����	���N����?���Nv���	4���4z/;K ���J�_�D�g�P���|v�p���j1N	�`QO��b ����P� ���*h���n�@��N���.q�\��]�g��em��T@��^�ez������;��Be���m�����z��>q.oFInTa�����l�9�7>T|_��������t���D?�v�0Mg�|���L��=��	�'��:KiT[l����!��s����A��]��L���Y�����������K�����LD���~���vO�7-������QW_�������
�`����Zxf�:�s
#A��Jv�w�'(�B����Z&��@�]P����]
/=Ur��'Sz>��"��o}Q30GgM�����i����������j�5��N�^��f-%��EUno�����z����Xe���j����
q�y���A�nK!�
�v4�q9��<�I�Y���>*��Nd\ck�P������=v�/�����>/��)#s�d�Ok��p{���>��g��?��cVF8n�"q������=������+��4���#���$���#�J�#'/�h��.��Y���VM[
��U�;��5��i��C��g�)z8������%8i�iAr�b0�8���3��D�f����������u;�1��V$@���~���0�;�a~!��c���:�v� �����Q�p�,��P��p���	���{W\
gS��������!T+�l)�������BD�L�x��&nHyZgB��$o�a�@{��K��k�e������l$���E����+@'����!��6UiAj�b\�N��Tv&`��9c����Tv&�]@h>�=��k�34��K��RN�N-�@�ZuZ�e���<o��B�*!5�m�/��V	�1�w�*I���NeEhTf6����#,'8<Q��~���O��)�G�%�=������h�V?���<�)�cv����rv�'��I�����L��=��*;�T���a���	��X ��A�(�H��S7t���gE*w�t��6�xWB�pL�=�u'�����{��'/��-�?+R�Z����H��^�P!6#��Q��O5��y�Mq��^(�uZ��zG�6�\k�<9le����.oh�
91O�[�&(|���,�_���6TD�F����������jIM�f�J2��5O�rJwC�/4C�a�}��H@����M��uA*���D���k����4~]���wZ�.������Q��*���W"*yx��Z�����Z��,���V4[��c�|��\1V���%�c8+���UX����}p�����>z&������ST7��=���&)
�Q%���J�����z�/:�[!<�2f;�����>��,Zu�|\�cW��OP�xFh�TB
�T:WN�-wA��B��eQ�����\!dZ���4��I9���Y,�+���<�!���yV$����NX
��3����C������i���}�����y�L��Ad
8+�:d���p%Q�dg��Xg��3
����'63�����	;788!+��u'�F���_���%9��:����I���U�3��Bce��(yl!�����*k��7�@����������$��&���U_w����870����<��8]��@k���<�Z�EZA��,D�y�l��Z�L<}�9���Y��2����E��I��v��j���P��y��h��gzu�L��V>S��y9M�+s�=��������F]{��G��H;��^�)|E,���c�q����'�u�De�p�z��W��|eC_���b��)M����i�q�����.�SHU��4S���i��a2M�$��.V���n�^�v�k#jB�������I���Gp��
��c~��$�=g�2b����7�N���N���^oH�����=_��'�Fb��O��g������)r�U$����#���k<A������O��Uw$o��k�������N`��,��DP��
���!�\��/#h�;�Oc#(G������p��I��lH���z ��[l�O���$�
����l�5{�L��1��'�s?+T�}�����g�M[#,
�!,hh������1�8������|�G��X��WW��)�}F��wl>��x�����1����U�e�$z��y�xU��3��"��T�V�?s��
C����(�9��M��Q�3j�v����^���o��q��;e��.�#_P�r��\pm��r�.�.�#_9^ ���T��w�����'_�<�w��m�������r��^p����.8����F�r�����~.�\����r��^p���/���!��5�������w���o���� ��3_�b��)���+�b�����;���\�������|�q�x������W��zE~	���Ea�r�B�O�r�"�����sy�s}���1�w�?��zr�����5r�Tm��m��g6���B��<A�\�v��o��W�8RES�?V�?���&�vX4f+�8y��K�c��a>h�
4�(���+���c���
^��F(�s��#E��G�<T�+|��cE����<X�+������+|���E����8r���#���N��+����p�!y�W��N� �+���;��E����K�55�u������������������������������������������������������������������������e��se���d��sd���c���cV�E~����V<�1��8�7�������������{#����k�G.�X�������+�7_q���%�<��nKtc��m�n��"�����Z��\��7�3q��e��f�)���K���X9�{?���l"��,����N�,��g1���������J&2E @�rnn������J�7�����C�Q�3�$?����=nH�y%����G)6"
 �|uf��,z��Y�I��iG�<QO�K�rau���)�Y�`���PCt��p��
���m�(��_��?_x �v�����.((r=����T�:<u��q���}�f}�q�e��������p
���|�$��)w��Ae4����*�++��f��1R�%2%�"'/����$@�V��Z,��(��DP�1/��>]��t��{��vv��&W��n�����$�D�g����d�}2�L��P�lD�}��
{)��
Dd����U>���dS�e�J[&� w�[
��\s�!��js7��:e�F�n�D�8�]�J���4�R���r2���h7~v�XqSV$2��������{��dC*;���H�&Z�Ff�C����sQ���<�}e��v�!W��2�:L������`�3�u����hu�Y�����=�@�D:DU���6�Z����F��r,k���7[
�'���ig��H�,��M�dB�(XJ�L���<-�9�gG��/��+����X�&�V�f��,��%�2Q�*tbI�����=��C=�5,�T31���'�G��n/��{��o/v��!����j�p���-l��2�)l��^��oH=)�Ls?�[#|����1�v��4������kg��Xi@?;p���
����~W�v��C��v-]P����l�w����c	����.JR-�?^#l6W����5�7��>����DJ���8O������,6n���I�
��pp�����4[BAT&�v����8��Y�
�V�����$�Rp�v/��{.�3R�CO+�@j���E�����O|��E���s�g��{8�,\��,�$��J��_(�G�N,��H
G��g����<T����0n(��3�PG�k%W��yg<���8�vs�Q����i@n����h7�#��
�z/vrG4����3M�);���g���?~��.����S�%M"����kDq y\��?��;A�sx^b��?����0����^"~����UB��@h��o��)�I��3�/ps-���{���ra���2Q����:/��ubq�����s@��S;..����:�q+�;��L����_W�1�SKgQ.;��/D��E���Pn�4Ab����
���c'�bH���YU�gj=��_X���D�F)?�c�}!�q���WH}�$f��P�5�����L�R]��^n��������A����L�������Z��]�Sv����u':��/)���o�6�|�
NV_.s�"�c����v���A���P����>$��H��cd�	?�Fm����W��Dw0"(I���j%�����I@{q�(=S{��K�I>��E|}v��{r����,(�y�'WX|v��,���PbnY$��;��A����j���yU�|��T���O�K(������m�N"���B�4mgq�U�*��������E�;:9i��)6�y�k,�u�pQ���?����|=_a�%k��3k����p�� W�6�
��~��{c1��f���>_`��:9��l�dR�zN����p�������*]=���*������m{�r�1/^����r�3�FD��Qs������J`0O�;n�7�
�����ZN���'��Ht�@h�ol	��0�b��e��~k�gj��p|�Lm���G?1;gA��T�3dj�Q4Y�����g#�Pf/�3>��]>/��*W����E���/��s�d*�u:t���{l@�c���B"�zx�LF��%����L���m�����;�Z����t�C���!��<�26��4{!�Qy����}$��;��i�:OO�����6U���8I���3	a0>�@��|f �>?;�����.x[l^�
�0rs����G�	!���q�qo�
��d2����,��4H|Dd�}|�y�Y������]X�}u�:�!m�2�blyu�����D3C_��}�r���*���jL�d���r���� �yV���(V�H��&-�!�}�u
�$��A>��wlq��A����D���s��
�/�8#Y1���=�q��_W�=�_�l(��-�&`�@[��4d���������5]����4�kA>%�?z0��r5��]�h�\�,z�Jf���}b�%�{�k�$Bh�K�6g�l��%X
��{���:p�m��!�	@6�R��\9�O"�T���F�<B����.�(�Tb�B����,��z��R
R��N'�J��k��0;\o�zy�F(V�����tN��Q���>��M�n.	�@����� �v���6���b*q��������y*+	��PV�xL�)4��_��g�}]IT&��gx�P]��LD��b�M�>�3��i���)JQ���a"�L&D'!��([�q!S�����p\�3�h�^*�VG�j�f������
v������#�f4@Q�y`!���H��
��;�x-+3�
�S��+��ARU��1l�
8X��V4������3��t=|����/w�e��~�����/���~�2�>*��L��&0�>:��[���>�5l��v���oh�'��d2�-����w�.�c�6[��X=A�>��0�*���4��&�q[��0���kL�Y��*����!�Q���TG���w�4b�<�I�a�~6Uf}U����l(��r^�:���������1|$�i_��~]�����S��T�S�fs��oh�Fe�vU2����
i�i��l�cAAV��gF��-���:PR�K�m����[��t���gc
�3@'�l��
��`���sf�X"r4�e���P��8���38���`�������/��V}U��U��I�Gbw�xkA������+��]e6�������<+eC�2P3��L:��H�q��g�M���C$�N�?7TAO�������h�j��Z������K�����A�1i8i�f�Cm�4f&Ik%�?niC�2���p��h�^�v|C�B��fHB��EjvCC��{��<������'?��[%��Q�$
�`���-�
�d�l���Kn���#V���6���b����q�4�(cG�6n����q���x���
/v�1�Ap���r�D���/�Q�30$�%�P	�?��F�XXP>l����#z�_&(�����)��b	Hv�|k����F���m���������I^��7$�h����x�Fg� "��dn���9���
�����sd�^s*���������%�|��5�R�j�bS/d����������-h�6�l�C��QD���;_}y��lL��<����c�:�gG��u�vtj��~ymU���9C��B4��t�^n����/.�l��2�lL�9��l+�W�\�M���_�y�U�3�j��A1{��7��{EG����	8��\'�c,��u$���7��������!����~��GS�������d?;�15M?����B__�x��q���*+�?��9:����*����C5�XA������>�+�K���<������I�o��P]0��F��)#G�Ie��h�y:	���x�W4�3�Kb���,Dd]W��8��*�q7W��|���v=�.�+���������	`���J��,�W�s=^Y��Hz��>4'�,Dd5���h%#l�a���J�VVT�h���3ZY����eO���
/��9��C[ro4i�f9F��mhf��4H�a�nE"�dez����h����Y2�|1�w+�M=�wL5g�.�?C�
�2"#0���	��������L��(&��1#&�2R��q��� �I�!�B���@�:����&�<jN$�E�|�9���]SpK3/E�Q��(�H�	����-@�����a�����<�mC��^g�Jr=IL���#��3f���N�X�M'�A]��������?�Sx����g���X	sx+������:
9��)xk�=60�`A�WK�k��v�<K�-@D�n:�X�:sx��"�	�T�,?�$��J�O$�V��-�,;��n�5��m���}c�x��s��^��}��Cxfp0w�%��9���,;�3%6W>��z�	?;$��=�R`6�����4}V����m�����?S�(�}�/�g��]d�0;���k�Y���=z���T�-���&���GJ�������'�H.��	����n�Jw�Q$0�DW�7lF�Tlj+�7e������|��)y=VX����X7�����tc��y}�������)@��j�?��KL	>n�s��|������X*��M�[??�5b����tTkMmc�I2��P:
(��/��~vr�����yCr}c�}"�q�{Az}C_0��#�^��J@�+�c����>��X@����;C������dg���2��C|(T�&������jL�+�Q�1�N�����=���#C��/91���l7D�`�\Y$��^����<�n����d��s�t�u����/�����V&�a��!����f�{��lW�K�7���?�T��W����|;�����������`@��!��-U}��	H���=i��ndto����ep��l�����<P��)�d�9QR�����2����&�I?X����yc�PJ_Uy�O�+��h��R�B���f�z�|�}�)1���4����n&l-�_d?A�xZs-a��2��:2����CO�8*�"&Xu3���}�e�FU��1�7�$���a��Q���3-����V���7$>�0DCsN�O�w�C3��YF�b��:����o�
���������6���n��W�yr�|�wA�~������1i��[="%6�����mk��u8�+r�����HZ���JB8CY�O���i�%�d���'����a��H���$�u�M�X+��)�@�4�#��C�271#O��x-�m8;S��A':y�<��72��4��n�l�$r��v�*�����CG6��zq
{��E����f&�
�v�����d�[h-�L�*�{4�p��~����n�/����2���X�az\�E�qV�ew�5���?63Ms�"6�C���e������;�`��r}���S�o��J�(B.����k�s���w���D�;�|Eg�v_D0	�;���#I���c�[/v��.3��#}_]��G����7�jC�3��d7c�;`�!���!�.�B�2�P������	�M��9%�������|s�#6��Z�d�����`V<#o\��$d:�d(��������eV�n�j=��{���9���KxKG,$V��Y>h���Ymy�O��,N�)i�-wl��AlSN���
�nIV*�b-�]������������(��u^�����������Y���/�����&�Y������pf�9m�f��<*-�����L�?��B�
RuB2�f�����Ym�����%UBk�#��AC�+�����&U"[;��)���VA�F!s��e+1�����-#��OA��+w��/L��2<���Ow|�mgJlx�e����\X�l�s	h�S�����ws�mg��������3%g_�t�q���n�\�!��C��	[������vML���6���-�	��M�����_�"fy�b�of���;�J/YP����W��j�
��G"��y��M=�'>^^Q�z���#�Q%����#H�f�m�|�����v?}6���I^����(O���J��KkS9�"�ZBcE< �,����%�
:�7�y���J�"-C�qV���WF�C]m��aCh{,��\�o%bt��L4�.Dc!�{H�R����C�q��O+�(�E�f tA=]������w!O����e��`�}m\f�2�Q����-D	������X��&6�*rZ;R���r�S6���~�eM;�)*������M�h�����v����z[�6{����D�������o{:����+w���1�.K�]��)h`�d�$����=t�OI/0��E�m.�<'�T�@T���z3r[G�������}�T+7��-i�9�i@��	.��a�L�/s��I��xAZJ����
/���Z4s'��ep����am#�<�������v��~�����T�A�u�!p���
��3~�M����D�jOA�=v�����G�S2lx��{��5�c)�h�P�L��BW�c��L����� ��>�h����)?;a�q�	3���J	�
������Y�7��� ��g�"�h��E�$�)�<���%
6�h��MNK���������	QC���\j��SbF����8l7O��L	�`�k&�u1
+�C�*z��)y����9��������]�ItAO�b�{���*'���EW�z1s��W]�h��~��@��x`k������?t��A��U���N��A���je������"����)M�s��7�h�v�Vw�e�^�n����|6����FO�6B,�]X�wj�m���e��;=�!	��s19=�@���e�T5�����}9<��c& ���m�h���N�d�n#-����/�\��@��i:�u�|v��+������1M[Fhx}�/9t%�D�v��Y&����u8��1�n�'d��l��4Y�
G#����NZ�+�����c���c���g��b����</�"�|vV�����e�^D�G<h�#�K�,�1tz�#�9�p�oy�MG9h�!6S��s�<���Jx������\��;g�#��,�>|vtZ�3e�7�X��e���kI�����h���,��c$C3x
���G�|YBH����vZ��=Z����-������w��X�3�1/{�>o�'�< �i�;�j�,��ra��<	��������s�J�A�xX���#��2a�t����s�����s����������Sow���R�`�:�������}�~a>{pKce�Y�a-��1x��������PGv���p��/R�[�Z!S�S~�|biA4�J����]���t;Gngp�_+u@s���g#A~=h5���,�)�(��<D�����(�1��9/;�-�����2���a2���(��Or��@h��������J�*�r��f�W'5#���UD8`G��HL�GxL?Uf6�$�*-^$aS�x�iJ���F*:��$��J�%)�<%K<3��G�+'�f����b�]vlW���>��^@��L��/��7�;jn���0jJ�Q�z|W�����d7�����d222"o��P�Pkg�����u�t����
a�A�^��vB?_g��>����]����-l<[��>2��drk��~#h��6x����!�(T�_=�cV�������a����5��%,���?����d�u����u������s�A�Q���
s������_}z����K���S�A��0*��:�S������;�����$x�|�_Rt �4�b�������0!0mHl�1�Z��s:2WO���;#�[�F�,H8k0>o�!�|�,@�?�Bg�T�$�����g�6����E�
�y_Y3�1������ucS���r)�g�?�^z������ZX&\�.�����
�����
36�z_�����#��F�o�������E0���3�s��C��k��1�M����Jh�q��i��,�A[�b�,}~a1�;[btp�5��g���N�z�p�p�r5M~�=�R�Ff��b����5���V���������;b���-%�h�I�����E���tY�A��=��zt���&���ffp�LG���
����m��i |��(�� ���Z���������1�sXJ�G�is ��o<��u��aW���.�J���t�;s�F�Yq��A|����{�D�o����0�g#��w�m�)G�<T[a���C�M�}��51��f!�sg��y>yXy1�
��|���u�hQ#�?:�iN��_a��i�b���n�����Y����,,��d���-3����|g�z&��
s� ��`�n2��,�c<����~�H�	����U*� �in(3���G�0�{�P�����'!x2��n���0��������3%{Gt�anH��_%�|��O�����0L���{�aVV
�����vf��JzT�|���l�;C���\C[�e���a�)�aF�
�m5a�O��������+RU��.f��C�����{w���N�.,sAY�i����*��G���]�9�'���/��@�
�}3��3��H�+/��<���������q Q����	��cE (�fH�@�(���3z"�)(�����zM-6m[v#f�$m�S9,%�4e�f1�����x�%4��V�������:�a�J��-�j����}�1��X&��-���5��0��_���R�������7�(P�������|������>)Z��P�.�����=:�����q�|q���8P��W��-����_�y�f	w[��s)"����d���y���V������erq���=!������)������@B�����V������,�Vi���2��"�e�{��p�Ic�	�a�3�D�l)������wewf���k��]G���Y��}�^ks����~E�����]Uf�� ylZ��Kso��?-�4�9�FX������?�inx��S_c4���z+|
��i0�{����V��1z������A�;�;�eu21����Z*`+�|�Ag��nk�� �v�����	ZOz��A[������;���x
�LB:Miu�����O�48��X���S���?w��lO�������)��2�L�R��a� se(������|z����PF4�a0V�_Tx���,�G"��W�
��L
X:���t�;�v��X;��|�tM��TW���I�����>��7T�������R'�_-�����|���CK���Ss�:���B��f������d[����q+$��{��Qy�����K�z���<����1��?�/�1���Y4��GtG4�$9la9�����<��N�F�-��5N���+|���G�&r�[h�(V94���j���e�%�����'b�}��$P�6�z3�d��]��,�\}b�1���� �!�����
�1�<O���2��a��o3�������g/�
z�2����a1�PF4�������B&�?
��"���{�2�@^s(Hv��b��7+����C�YhuhhIc�f��6�@����+��&o����m_1�@�y!N������P�i�KeC	`�o�k�9�B��*�=��4�	m
��`�>G_��t��0?��k_p-�5�k���\���������n�����F"`N�`����3*����
��<�)�wAi�Z|g	��S�[F#��*Rf��
�qwU�	��� �Y�?����+xb��<��*x� ���M�b����'�f����W�g�E���������6��s_��3��m{�8#'dm�t`_��"��\n��y���#�������X�1���+zY����9���"7����K�}�M�� �|�M+��d�:���H�N[Z�y9��6\��fsu�T���:I��>�M�t�Y9h|����t�����rY!;K�!�u���������������ee�����6����z����E�j&�:��m�_:�����u����nbN��h��:-$:���79�<���t�-�����p�����M�	IaQf,����"
�<�4���"`8.�G48�|��������R��z�M�i��m� ��7z������>!��f�t"K�����f�+I�}3��^&��]��@��&A�r'y��m�w����Y��\��a���������\���z���o{�#G���ob��"v�����5x=����%�����+�z��]���^~�n�gC[�|�E���~��8���J
����:6y���:�x�ZFO�A1����&�u+S�,K9�xi�%������5e��I�j����(7�����z�p1�G#�]��qZ��?}�������z��
������(���	�������Y��?�_����������������uqu�r6��&w<$���	�.����������y��'��7b`x��D6�?0�����?G��:-Y]%(N����B'�e"��e���n�Kf����o4\4���(|T\�E	�`�l+)�w4��Upi���	���ND���:�n�&Z���[���R����(��u~&�+@��7�t�Xq��O!����d�*��b����R�8����c�<�U���yC���d��?����7�g�����jn��)�%P�E�d
�u:;��� ��l��}o('�������g�^[��9��x��>���<�W��d��j��DK��!������H'-�OJj��<(�j���t����7��hVSsU�M�?�)����M�^�6$'j��\:*�����_'�h�TT#���%����o�g)��k}���@����R�w
���d�U���	����;X���4�uz��=I����<�f6y
F���F��p`��?'�ag��O6m��z�.��I�u�G�E�}��I`����O-��a�\��i���#����$U��)�B��P�
�z����x���]����Z��o������n|n�6�[#u?�e4mA�~0I'�;�����M����7�X��TrX���:�R����'D}:J2�E���~8��BS�^�r���.���u4-��~�<x"����V���ZpV�� �L'�t�/y�Y&�x���AT�.���w<�M �B�BM}��g2Z9�+��<��2Q��h-�U�|WEH��i�����>��P&=r>U2���$�M��)�u����K73�6@�������
N&QQ����y���M`A�6���C%�5��f���7�q���S���<O ���E=�O����H2�`�7��{���Dd0!:-�h#Z��-n/���{��&�g�@� �9���0D?����E&��6�v��mhQ��@���

��c���_=CW�_=SSb%��b��QY����^�[w�4�D����a]���hA�{Q5�/s��Z�M��h���f��dZ�SWQ�w`����������kk��������BF��:0S�%%|���#[��\��K�~l�N�0qz���<-C�3�J���5���^�@��l�X��h�����$9�p�^)�H�&�%�����4%�����_&�L�_�DKr�~�G�!�ZX��T>g�qaf	�!�N��A9_�������� ?��	���-Yw��M��`�Y����x>������*���v�)y!8����(`Z�`�(��v]Q�t����;�����%~5l�������2��z�i���G�	��}�0w��{�S0,���k�#~�����<b`���#u`�$�S���(kr�Y ���6�3�O�����#V�/��!�H�J�z}��Gq��b����Ie�p1E�+�&<�,���4��:�����aR/$�Bd9Qp�S�j*�0���*0�ut���Z:��
t��8�p]��U��Q���Bb�����qf����y]Q��8/;=������i��]��P����VjGp����bZ�-^?����D�(_v�wj��EW>.���n�u��zbp��HA?��0"���Z�6�aH���y����:@��?�)y�����1q�}g�R�����L�5�>P0lpf�7	�{��$�A|� ��4�������c����dD�2�t����(��z��(I��g���������P���/��$s�g%�>�0S�����z������2�K��{|*��d.�����8X�o'�`�8�L
�>R`s	���^�RU���.j�9!�kq���%3s�I���Ne�N$�p��Cd�K����MAL�
A��2�tM��J���n���Kr�����d�����Gw8���4e����RU&�.9�r����,�dY���TG���jq=�Q@�;�%B���Z$Y���#C���T ������HW����#k���	��3�d�L_�Su�#��v�>Ja����3������~q&~<�B63,��XCS�������X%"�j��;xZg�/���?����!w�N�������%���d�E&�/L���Rv�"��6����"�N���!~�iN��fX�����L���� ��.@����$G�}�md�}�����Ex�}G;���")�e�v��3�4�	���ox��}���u�
	p��������<�1]�D�:�|_n>y�zC��kv���;a��Y�a_���H�����g����DT���"����k���{��p;��,H��q�U�6t��l�V-ul��������1O����g[\����[��hVS��)���NMZ��#{v�_��:4
���X;�&����Mvrl�aJ�F�����E6m�9��������<v����VL�V����b���If�*��Z����}�z��n���2#2Z	$�!�<���ai$��F��A���_:����`�uL����%��+���a�>g&I���-�U����*�����Z���iS ��c��>o$uf�eX���AX��FD�Y9�|�X����D��H�-�?��O�h
	����6�'7����T�i-�%:��|��d���+��
�1+/\L�?��t���t"�/�^���;Q�� ��V*yT.��n�/MjD����$�u�����t-��Sv�,��-�j�l����Fw{���b]��U"�JI��W�
�[*d�$�cm��>�����������W�pOQ'�����t=�<�����Wn���z,�L���x/�����45�p��b�1Y�)|�7����m�~�����E����S�!*/���vN���z���'��QP�`�l��R�?�_(H����`3��~�l����X=�l4�}��^.���_��,iK`��K2�N��u���0�HN�8@�
	���pIOh@D>s{�(�k����|3�;��c��gy��������M�!��D[����;�;��
y��L����O#!J�3�������R�&��(������ud��{�����n�xT2��������
�%t����d~��	i��Vk	e
E��
����G��j�
I`�?��1�/4�fz8��mN7���qt$��&�Ut������O�Fd�>��C��R>7q
���2<���1-*o9b�������D
6��s�kh7��v$�)�6a�s�%WV�����E�5c���<[�y�}���Az�Of�)��ED�G��KT���i�����H��B	���9-Q�s`iy3�LLO/_dc�]��S�ly�v���>_H�U���N4�BT�����I��Vh4"��y����R��n,�OL��3��Eep*.�T��f����X;
��x��e"_���t6]>����x�eExP	MS���r�u\	�����ztP��m"2�1g���5]	(c���t`��b�L�k�����I
�hQ����s�W�9z	�l���M^��>�����]��<�����X8k0�����U��f�!��0����� ���&|�����n����`��x���p���8A#"#��������1��H�?�	_�exC&�Z�,�U^k���@��,��z�v���js�8��[�O��60�5������+Zc�c�����G�(g�����)I+:!�����Sb1��I"�^��0vHb��28#��!Er�u����R�3��D�bKC�f��m�B$��[����R���bJ\�u�Tk=�2V��k�Av���U:0�h��������Q��R�-{�Y�m�.��}�l���L���uK����?������X�L�	�_�% �U�N0	�O���[�g�e[��<�>3�g������Qm�2���)�����r�y���s��5r[�Zb�AhI�����^����M�?���G*���J�����+�{�I�^�]����:������V�7�7��6�k�%�t�UM]�Z���iMO����&��mh	VnrC�A�b@38����c=���0%���N���-�w�c>��m���������E��
����^�X�����-�&��Mp���6�3�pF��~H_�P������P�R�?������Al�����c��h���V+�B>z�D�:���n�a���7����N�![�m���k�����<;t[}pBm���/��4��/,U���b�!7b��3�|���N�������M��6�_r�?����99q��2m���wF���e��BE�����k�{c����#�/�f����o���=O&���<��+B�7��7J``����R5[�m��	@��[7=�|N��e��6�~���I�DC�7>$�E��D��j�M>8�#D'��+oH�t�M��2�6�$�Fc���jdI`��}��N�@V���PX1A*�?�Y W.�����s���Z��d��+��_�@��qMn�y�%tE����t&����:/]]���`�Pb���A;���J�_����e�^uu�����+���}���[�$����~���Hz���MG
���7�H���G :	J�jv�2o��_����G��{��� ����
���1�	���y��~��S �/�tc�i��%URdq|P1��XU1�L'>�G�MLmC@�o�����Z:����_�
w��`���%X���O�Ei �y
�B�������N����|�H��9����?�v9D�[�.��]���z��Y�u�g��$��L����~���y�B��v����������K6D�v�W�vh�q �1�8�J������,����^;����p'��(�jZ-��#�h�7!�b�v�'��L�#>�@��*�b����s���T����+&�������
����d��fOE�e�l�c�F�a�_��s��N,t��^D:I{�BD�(�&�����TL�8C���RE��	#��������c����rNW�P�s�B��8g�v��x�2����=�4���\I�Pc�����/��`H��@�GxNA�{s�5vc[;(3�b��ba��7B�����s7|R��gy�pip	!�k�S�=W���C���L�{���J'��6w?���T���:Xe��v��<��#�����I���oX��q�M�+�au�o��]P��R����9��� U�yq�UG��h�/i�I���P
��@���\JU������<�5U����>�{Q��3S�
�U�M//�]����K�_�����
��> O��	x�p1����BL�y1����OW�-ueh��9��a�9�m������i>pF��6����C�Q�����|�S����F��@� ���Iq0�	���\�s�(ga!�p�����A��n��+��y�@�-s�DiJ����� R�k/_����>�>�x���Y�|GB�p�����j"x���������t�5�aT�",a�[X����
L�
��iCL���;��2�w>���Iupc�b�h`������:X�V�OtL�
[��^Q�(���`i/0!�9���@������rj��i�\C��P]���wR��bg�3��'��6?p[>3Uw���A�i����[��V�:��
"���G"�M��W0�jr'i�*cJ�.�h�b���5��`b"h:�fw�U��z�����&Hi��4���#��1�q`E�4����:�a��	>D��a2|������o�\D��B�*_�pT�����h����%���@���x��I��S���tQnV�j�J&���`��f�H�^�1��C�:�l6��
o3���x�����Mq�
�88�p[UC4���J�>;�g�}���>N�Cz�[�����'���U�	�Y��-�".��m�|���y|�x�@2����1@z�ZJ�%X�3yu��j�]�����)�*H�������|�
�@�/���3+{z
��n�?������h�a��-	�^(�S��@���_�o�u=�J4T�����R���z�q�bb�z:�Y��~IFK���W�
N��o b�����<�;�l�T��l7��6N6|,�i;����Cz����/�����n��@59��jn�t2aO�����P>���x��x;=������xC��^.�a���+I��AKr�����v������>����nu\G;��4�g�
R`F���L����iz{�Fv�Q����
�y�l��)�4#WP��#�I����b<���w������%����XX���}��"�.����I�R~&|�q��+Y���
�j����y��y����TV���5t�A'7����8���>��X�IU�{�	��LT�Ld�n>
���u�Z�t�J�m����
�����}�H'��AX�,�u�L#"����
U����|���\����mI��c��`��~m��DT�7n�}���W��� B�=��V���w��Q�C	?�P���~-��b���P�g�y�ps�Q:Jk;��R?�W�nn���0l8�.��v+oCy:��sc�n���*�Z�4�06���&!�sGlZ`Q�a?��!�$����|)�P�]	V��P�Z�7U��r�Z��-��|'j ���7�x���4QU���0�����M/$���t VY���'�/o�c�n�-���`�QZn�Q���m:h<���c����O#hs(�l������/��|!���i�5�	��E8�$�����2+Q���~y�K�U���as�|���q�L�����������;������MM8=�_l:z�t��n
Q���(HCv]�'/�7D���l%���Rl�0��O����,��9?_	F���������C�DL���Y%��K���+KV�Z$�������BF�
�=)�cz^��
'��7`5�X���o���cUrc����9S}l��-�Y�(���Z��K�P��v� ���{�c�_h���:iiUcs���C���0
.|�}���t��
�zp���������������������;�|�H��/6�y;;8h�����~�+���l�G��[�a��a�6_S���d�OmI�`�@�_XE����Hy����i��n�&��%����4�p���k�� KB��X�*�:���L��y8�C�@Ur�����B��������������@7���V�m6���A7
�m7��"4��
c��m;4�v�0����d�
J5h��D���j�����z���O8L�h	Vn���x����Q��+i+Y*�E��
u�*�CA�N����F��]t�[��a��k����
����`[e�@����;������F��
�^���2������{���E�?���*���
�)=�����-�^���^(Y�lX7g�K��vo�����H#��4��M���J]�M���e��S�^���B�I����
���BE����vv�����a�5�D���z�"ck��7��9��)�:}����F�J�M�k���?M�q"���� ����oY���W�4��I�m0
��f�BGZL��6���)�?��z�7�s�R>��cu�RP�Z'�8�Z=��W�A�Gq�SD�������t�h�x+dz9��A���|���p��6��+��/��*�eRDS����T���?4����W�lV�z%l�{~��6�H����6_=a����X������������^������~���e[����g
���M[��y�;���; �;���ql��}����I��PY��$�s���}���y#?��=H���\yy�9�
����~|�H��{����7��H���
�X��'�����4�,g"�����U/�h���AM�����U�����Hx���g�Y�[-���}=��L�t�(��w�7\� `C:�JD��g���U��g�(
��cG4m��Qb_�
�OGY��X� �]�-Bty��8�t�Z�#��V���c'j����R]�-��2W\�3o�o���$zD�@~9-�a?�D�������x-}��6��~7�Gud����\��E�_��X6�F�������D��[�ce0��1W�5v�7zj�8��~��_u�KlP6Dn<������w�x��%���Z���]/�E���� ��s��m�AXQ�^�hc�R\-C��^2�h%"���h<�mhC�����6�X�����"����*�d@;�l3f@�QL���h@Oc��r�E��a
y�r��
	��M�����JD�����"f2s	��,�MhS�!-���H�f?�\g�Y��8�.�'����������m�I\�)x�E=t�q6���vi����(`2�	�n�Mh���P�fE��0�nE;p���nE��fmhF;�jX��dE���7����q{6�
-��w6��<M���/+,����{�-�c���T,�.F����Y���Q-����]��s�R2�9p�*Ku�dQ���&��u<�0Y����k�K%�M��MYte.0l�i�:�jA*Se�����lVZ����R��Ym(3��2�(V��&Rk*��-Z�3[��;���L,�
�z���J����E���z��vu�����k���.��8�5�����:8��U��^��6����L�[uLs]�M|i�%���R~�m��0�8�����&�J�i]����>��v���V5<o�EBUs�-���&��y�zK���[�i�f:X��*�L?�af��W��lT+�4i3���'���j�����d��t�Zj6�i1��W�z���X�4��
���u��(��B�WH���y�k@*P<�_��y<���&'����e�����5���E�t��#��o�m!�	x����E2K�1/\1m�S�?�a<3�t$@�������$0O=K��rK�l#�LC��y$�aC|$3iDd��*����7&��a�@�_Ddv.+C��1�r��K)��W�^���Z:*���%y*^�+	�7��� ���>���d������>i��F�D���d��6<���B�r�M�O��D+U}�g/�a1��_H�zZ��Q��a�y���~�'V�~^�=��K��
��6��!�{7���Ff��|�����������"�~MX�-l,C������[�;'�1��=������mzN��%2�uI�Lg�H�/�����@O�����a$ �Z�������}
��%%j���NA����=./f?�X��
�)���p����!L������y�Y�D��.?�������6ZW�{���Y�t�����!8��@m�O����*��������8f�i�|��:�
z7����G���8H���IZ{Wb4��4�<G$������w��f|7W��e���h� ��Y�np�I�����9��D��F�:������-�"R���Ho_�V���`�2����:������f��M���%��iN����d1�o���!�ucbK�l~���b�DME��>�W�fd�H}�7)�����T��C���
����*�oIfn1��W'Z�>�s�M=8R�v�����Qe:������3��D�E4��X������(�ch�/�n����B
D��f:�����~��d���L}�����c��H%���P�!I���M����7$�t%�E>�PG{<��������G��!n������L�c$�'��\A�8c������y�G�d0i�����-���`������l{4�7pF��"���90���i�U�Q��%Wp�����ji&;�<��l9��
����S�ux����\EdF�F(#�m��<��LT�|�������;��
�|���� �����?��F4s��y���2oX��������1�P!K�(�&vI���nL/*B��0	7~���uw�=w�!BL������?4$ l���A�i������*��v��czJw�����o,v�k@�z�G�rC���E���R��K`����_�u�L��*�����������S���'?u��5F��[�ih�d��������p�p�_�������n�j8�\>**�/�`���\6�b:��8"6�y�����<l�����P���m��e�nH�r���7�������7�c�gY�d�}7��1!��C��5x"U'"s(T�E��5�s�;���'�����,A�#nmM-9d��v�����y��o$ V� -���F��y+�Up�@�ww��9���#�W@K0��C��J�`����%I����Jc��H�����
�UZ�L�����g���5�C-�'y��At$`���b����#��5���t�����h�0�HG�Y�3�r%��wX+�$�+���f��w�Kt?C'*[��<��U��jc
�3+�S;�'�P�E�������O��soD� ��o��q$ZH1Xm�
i�����	Ki��|{k�3��0�����l�O��VK�n���FD��=F ��?��f1��S=��}�=���c1'
��~Y�[P?�-h�)^�R��:Y��:���\�:��@N��I�SC
��2D�uu���ND�:@(�}au[��eCVY	P��lL�fhI��7Q�.S	mjH�yz�A�j����J�2_M�������c�L��$�J�e�*������V��H!�b����C�NN��.U"O��r��_)�X���~K��� ���c�,�G�5��#�v��-���U�����"}x"]����7����3c�41��G&:�����2
�Bs^���	;&�>Ea2�������(�L���{K����u��n�a`�����yK��rd�,x�I�	-��t������p���e�Nuw���m~L��+
��wK
/��$��#����D�>��Rwn��W����������#�i�\r����M;'J����9�����M�9����f�5Aj��aK����-[���&,�HC�+�O���sy}]$\�8`��������O�c��������U�-v��]�N���RAE�wL�f���BZ�����Z��|�����i�(�Q�-4+��)r��V�����`�sm>u����wL-��������B>/2-gI����0\7W�j��t"��M���~�S0l]���=m�Z�L����1�r��s�^H����9L^�>��R��7��ly�+*��U���v�u��`�E(#UM,)����T�~���V�>���Y�\�Wt��!��2�{�8J���4���;C��L~���fCoV	�TO)q����mFW����-l���RZ{G�b_C�,�%���l��Q�}���}��)x�S���}�,�n� c�1%>�t�YB���*��0:���P���?Xr��<I�4�4����#�f���A{�G��:�=����f�]?��wt|��9�|��}�]{NGY�0��E|��p��S;C���4���2����6�b�kaz����y#�n�0y�.���DlL�e%b!^f���A���I�������L���/�����-�0�kL�~����Z��r�)��O�_�kA�?3��*���_F��|�Y&;S���0���
�x�7h1��.�e&�L����S�4��Hw��>(�s��H'x���46�k�H�6!���m��3��F����XR�L�'����W���i������ *���8��3����4�9Nhqn��� ��3C"�gn��=>���d�[;�Z�A�=�uM�/�@U_0�K�=�}e��'������o,bcJ|��G9�n�YF
|Or�f"=��)���7k�yH��]2�|@����d!+c%q��� ���9�W����f>
�]L�f�����E5��_K���=;�d��,{C
��Y�|7�����2�F�����!D��y1���8���G ���@��!�j� ����+�6���9�r�z3X%�vH���N�330�Q�&w�Qwn+[ZWu����?��q=����q�������}�~e��������6�����=�l���>�<;C��u��Y�O���-�y�P+x++��VA���\���������?_	%G��m�R`�c��e ���X-��'bb��;����c��w��Y�#(L�� ����>����������`K��(�,��)�J����&���_��i8�c���-@��<`f�D�R��*��|�|��~�/�2�}U(��_1C������}��b�V��T_5� ;�����'�O�U�q�f��r��F/o�7�������d�����������������*������Z�Kl`�7���z��l�&�.S�,z��d%���>H���.L���]��(L�k�i�n��a�����F���:����{��L��9{�e�uA���i�������}�]F�+%���X)>���SX��x�M4�����
Z@����la���Z������q��[l�+���h��
��:C��-QD�������WkL�������
o�d�����i��2���F�p`���2
�i��l�5�8S�3g��u�����Y[|0�d���l��G���V���}��������@����&�i�'���WJ����������f��w���dE���8�#�N3}��,�;���S�H%�B������e�~��h�+���G�b��6��7r�W��c������A�<�I�[��-�K!�>����]l�r��
l��}��I��/3�����R
��
�����f���<����{k+����E�G���6Jj=-��'j"=-�G��|��?~~��*n��_:Q~���)��S/����.o�\�f��n������,�!���^.��.��\V1]>�r�<���,���^W�<�zy���vy-�1.����t����~y���z�*�1]>���]>J�BL�G�������OT�s�:��\�
)�"��]�W����)��Z��1]�#�u��:���u��z-��K�����|�6�u���(UG1]���{�wY���CL��Z�C�������Z�����5�)�����Agi.�)
1���������8�Ie�bd ��{��^��G{��]�bo��U���V�U���u�j��t�I�.7^!����B���z}����_!��n����0�W�����+�|���b����
1_ws������B���z}���Ra�����a��������Z����U�/�~��q����R�a�������AS��i_�1��{��8��U�hzW��i]�/��s��8��U��h�V���i[�-��k��8��U��hzV��iY�+��c��8��U��h�U���iW�)��[��8�fU��hz�]�p(������fc�]-Dr(�z� �C��s�
��myr(�z-��K�����|��H�_��\����{/� �C����
�(�������^~?~p��}"q��Bt����#�LB���
?w�9���E��E�|b,*���: ��p|��~��@��sO�<��B���<�/��j�XYk7|'0u|�M���|�������AO�I�n���}A�����������B�89���<�Q
fA������� ��w'���o��Z&q�[���H�S��
G�hc#YVmB�:�2o�8H���HIt�]��^gn���L��F��B�]��`
��c�T!�z&q�C�Kfb�\^���`�y��y���g�m42�W��3E��*�q���%�����jxl.}�<p�EH�?Kc��02�*@*K��'q��$�d�������������(����!.,~}�z�~S��IYw!�� ����c
����fy��b;I���Q��'v2n���$�����l�	������[g���I[�-1d��N�,�JO���~jtN�y���d������(^#Z�aMR����=��Od0�+���Ww�$�E6�9\Mss*k0��-sn�_ZU��]�!�5��Al���je5��8������?������EFc��&�.���^J����YUS+��ua�^-mIu6;{��gO6��N������E���DmK2�/���.����P���X�Q��e����ZEFGQ��(s��'��|�p$�?"i�u;�_�����x��/�LY�v>;y?D����6�+�74��O�wf�`��N��~��P���*��Y���qL�w�Z}�?Z�&o;��H����O�wvGdQ�T�D������*J"�z3!���Y,�`F����!+S{P��0S��tI�j~�@3Y���-�y�-���0;<��e��T�D����������"�2&�:��\:��t�Eu�p������<a�N�����,I�����*�E���t����1�%X���RK�����y�a�����O���d�R�w���T	��t ����"��<m���

�=6p����H����N�2�`�:	���f]�]�,���U��e��������/ra}���lj�w��2I��|z��AO]{e�������c�:`�_/�o��������W
�i+?>��'H����|�T��[W;�7���iGt�do�~���L��ceg����G�@d�/{�y�;��-\��"4
����[�@!�g��$�U7���*eej` �Iu8@���	�t�m�f�$����W(�����S��6��A�Q=��;���&������dQ����'��X�`H��mbF��X��?/b���;}�I�����\���:"��5�o�����f����(��5}�����a�F�i(���Q���?�nyr�G�j������"�k�?j�h�\@C��$������nJ���OZ9v���(3w�H�Fc�?�,����'��0���tt�nn�2�!*����e+��<�`q�K_c<._�k������ .��
��*zq]��]���@O
4�O">0I�K�&k7<]<�.}�y �x����W'K=�h��O�>���.C�;)���}A����l���n-�.�?��v�����B��� {�(dp�Yd4#��v}:�~���/F9c��"�{�n6Uy$����|.d0��)�
��h��:�6&O�+�^�������i��I��5��,�	=Z�6g�p)KEk��X�6k��E� K��D0I�i�0�@�k�E[��IC8�7���kz��1���h����,�,���c����n&~:�#o�r`���\d`���7fG(�������_��
�������vC`m/kz!B=������M��e�������!��la�sP��tn@�
�O����:.?XN���c�*�&���7Q�D����?h�Vu���T��%j�c���6t]���.�9�M�`z�L��_d�������ENX���
�v(���.��`��������qH������7W��x���g�31��"��T�����j(��in���`	}����v��z!���e�}#np�$���(�\�=���q�P�%xl(Y)��#ry��i@��H:���{{��d�Q;��V{7Od��2���.���w��  \
`����4����*�Sg&>$K���0�f=��\f`���2�q8"[R������l&��*Y|L\��:C#{�
�z0�y1}�4r��,�L����������0/w���:���+Y`I����f�������n���������/t�����
e��\1|&E���
�1K�D'w���Y�NNn���)*�%��w���A�s����CG���E����u���y�_ �z*�������_�n�?(�6��pk,���e����i,������&�"6���=�X_`�f��l�l)pd]dDw K��&�v�r���^NEY�u�|�F�
0K��b�N����jDN�8:y*�����Q�B��%��4"�������vI�Xy}l���B����mh��=Y�(^�`��d��#�<S[98,���+u��U�����K��)"��vb��n�9��Y������2�aM7����7me�m{�,���q���q���q�W�m�n��}�4����!^:���j��<���Z�����������m���8��"��+ msC*c~���lI`�_hr�Y6�-U.n����(3����T�����a~��R]�'�m�D�m
�,N?�����e���Y]E�whC����[���N�iDd��c�Z��e����TV��_�/�y_�2����~!���V%��5��B��gX����LW�2Vn\.e��-���Q���AX��ps�����nr�����-�@c�)�/����i���KtZ�C7� T��=L���'��}��@MuobWs����
�	���6$�]��l@��-oVs��s-Q���LP��!�>o$�8�x,�BE*�����^h)������t#Z��s�1�0s�>~��Z�n���~�����P['��*)2��������L�=����S"�����X��;����d��4+s6�C��������>�V�|�5"��`s|/$�Z����w���
{��4���#���N��G��8��m�)�YV���0y��=��8������������0���h���Q�0^�gd�<���?)(*���>��B4���2��f�V���B���U#Z�{�/\�o�M��t0	�����L��~�"_h6W����Rn`��2�e�S���$�h�N3AVO���DD��|r�u���7����������k�@��Q���.o
�D�'�JQ��+���pZ�����w�����B��f��@��e����b�7o@�-/�uo>�\�|���/�fa���F�y�O&�����9�/,������G���I��/'�?/�q�)&��N �+����
�{��)lw��Bl��;X�^&������1��;�`�r�����j�����1�npO�����_7����np�-�~���Ks�$.��m������
L��;�� �l���D��f���tG���
-��M�C5�y&Y#�cn���=�
��tn$�����"rp�9�.�1�y#����'��<$t%�8�o��k���B��IyZ�hd��G�,�;��q�����������������
��JG8l@� �W:+@MW<����`��C����x�����j8�=�JE8m�>�v�0Z�h)D�y�N�B������e/���
oX��R.C�������m��G�:
`�w����c�w
�|e+#Yf������yr�I&>.�����A�b�3���w���z�>x�##0����p�!����C�!��� �<�#`�U��:r*eA&�:Z��
�W���L"z0$�q�^�%��0��c���'�y)2���$� ���w1�W�������g��1����mS��^W�J��E,���F�W����y�����u$����'9F�*�2F���>������8�7y�{��H[���q^Gi�1�����:��� ���G��^"�������Y���"�7������Z��b��/lie������p�~?�(]����t����~q,����}wAp,_h?�i��
��x����v��;�J�%�~��k��:���$J�e�������U�����[
@����~�1�-!z���A�(�i�
�����h;�x��o�R��;�����h�����������
p�'�9����L�{)�����5�������x+/$�v�����@�@�q/�3��|!9D��G���X��/����I�Z����k�1AaB�g�f�J
���f'Z�#�8�o�v�=�7�S�r�b�f�!m(�b�N�,��0����Di4\�a���T|���/$�=?2�k`0���:�kc(<�X�����gy����I*��uS��6
�BZ�l����,o��1K(]p�
B#�e���x��;���7���=0�n������1���l��*Z2�!py,ND�1�Nv���p��{Lo�W���Q
�+dG�-����p�N_� �	��/��t�W��El�~[��Bd���^�+��|��\�^��YX������7��D��`>���l���=�����|�2Fs;�F�q�;W���n��x<j-�6��b�H�Y����M�CC�` -�/4�
�
��q
�9u#���6'`#���NO��������m�Vk��5�L�0\�Z����2=�����TC�1���pX������B���������.��S���"R���<�������B�u��@��N��������H�������~��[b��u���������MS�����q���M��_�6�%@�L�	����$��X����i
Y���wt�z��~G?�M{��sc����%����AExl�lG	��5���B��VO�����X����
���"l��u���FDfO.VIe]�u���:Q����7�',�����>3�X��������u���&���WP����&���6��<���N������%��~Q	J�e����'�]FV[Z�j��("�B���$T����E���J���3�~����Pm��m���v�c,�4�<w<�����ZC!����m�.F��$������;T��;�����-��W/%���Ul
i��������Dwl�H�{e�jG"V�HDN�a�o*v��a�2�*{��j�;7�7"�����w[��Cu@GZfu����������'���b��gK���?�<��V� �{�����<�-�KH����������2%�!���y����ob�D�G����4Tv����jD�g�,�+��3FO��7�\.��{g��I>����Y�
�Y �9�:
����kL��,�MW�mL#"�6��mn����r%8�b�	��He��z��@����d����v�SL��P</hL��)��PV~#�;����|!�i��&��<~:��e������iU��u��bC
45�_YiXuh|i�E�������OH@Do��	�u�F������
cu(Y�->C��SZ-U��1��v,�����^h���R��q�0����O�H���$���K���;fA�$6�Up�!��l'��b������������u.|/����^'zFzl�Q��\�����5n���)�����:��f�)��=y�=t����6Rd��y�wEG�ch	&D7'���J
v`P#"c
�>��u\\fL�?jHLw�7L�	>��v�Z
����t��>��@�������2llhp.���A�@q���,�\C�EG�r:k3N��z1�3	+� ������8m7��C�����8�4����/T���S��/5"2N��j�E�!�p�����@{��q�D�0���b!<R��T�/����-i��'���������#V������@�`�qP�C����?�(%=��Q���qw�}��y'��W�����y4gtqa�������D�������s�x"���<-��9�H=��YB���8
����"!�I�6��	�x�:0pYLD�1���`^M�^}(�pC�T��s_2�����
0k�����q�h���>������5$��9�{*N1x�������A��7�i��T�B�������Y1m��1X���&��#ff�}XC�������M���hU ��'�+]�a��1�6��}�����L�@D���
��'4��`�U�a���;p����	���vR��6��8_3N��J�O(]������^2�,�NXy)	~e�]S�V��<p���Vy�T���*7�������^0���c=���:�agDK��V��e=�ic	���pP]����d:�y�c��q���������)����|������ ������:�z0[t��B'�|;Sw :+��~]�8����	_s�mh�L�Xq���.y�����=f!��Q�|cL��Z�s���T<�
��Iq��������)#<n ��AD�k0��������s!���!2�������"�:��~��v���A�����5���b�\�/�eQI�p�d�p=��_�\����h-B �A�!���?���C��PS�����=��Bid�A�������4�[v|�8W�jj&����
��6*�FH0��-/�q�V��y�`��F7���<N��y�<(�<h��/���������N"v��l��N[t�A�����.���T�d�/�������<R���������j$�!��^�aD 3EFB���m�$`��tR�` G�&XY�*h��]*�}�c�����;J�p����m1���Y~<7�V��;��Z�?3�;��>��/�#��^�X@�o@�PP������m]:R����v���yv���e���<�3-h�z--�]e�JX^,L���>v"_G�T���;�"�ihhr��T���1'!������eA���������LbqW��h���E�������7������,�D�Ei?�Y;�:����G=����������iG�a��e���A����
�@h�0�%t��2��&�K2'����wTd/ls+A���3��v����~��Y�^�W����)�.?�S7~��40zf)���l�T�O���`�f�!0�fHw��2A�����c4��6t�P�:�b.�SS��O����j��C�H��/��������[����%�������W������;�N���g�]��+��j��v4��U��Z��Z�������N�1���~�}%J��i�Ok�4�=�YeZ��c�������D���bs�9���������H��=�E���r�����sYP]�vl�,����"^�7��kZ����<��GG+Q/\�������(a��*�w"C[��n�X@nDj(^��S����=f2/�m^�� 
��xQ�X��'u�WVC.�m��L���n"�������o������A(������#���Q��4�������I�)���2K��G��~:��������+�SV����j<"���&���P�a���������[��I�u��}����!�6w�������Ew�6�S�����#����a?'��	���j�����=��X[����y��B�L�ig������d�Ur�l%NKJE�j�n��\�;��,�T�v6UF@+o��BA>"5��Y���QMa������������� P_ae�3��!�	��k�zH�y#`�
��_3��:(�pd��f��C5f�	�}����4�l���fZ��X��1������aOok�aO
���{���bN'����V"�}'s*�y�-M���i|���+;@�7����49�CS*���bJv�-��H����)���fSF:����&��,iC��!R�'KZ����C���b�a!Y
��6��O4�w�Z:
�,���Y���e�����t�lI�:A��6�W�1���<m=,i#"�8T������%�hh��-)��z���%`���ufI_hA	�lI����aI;��0���&���/���������L�����R.wM���qYJ��4j�$���O�c����	���)���hUf����)�:'6����h>�od��A	�m�,����yJ�/�cEb�������F����,E�,�0	@.�F<���B���w"�G�D%��[��=��Y�<~J2R ��%|J%�X��<|"��Ik�������.g�}	��|!)�w�kcSez*��K�J�J���SS�2��@�p���\�W�GO�����&W��S�5K��"?)8S�$��%~�b������I
2a0����BY�|�(,d�$_�;���<�M��,���j(EP�+L?r
�D��I� �!V�f�i$����iF
�I4�gy�N�1V��q1z���Y������L<v
����Zwc_;e�6���*a����bZ^��#�N$�l!3���}^,�����U�!�R��;EN��DN����^wK�Rwq�I9`�����'���I��SI�����"���N�O��]��M���7	��,B3�u���M����55M08��S�4M��fEQ��&�fB�t@_d�2U��)���I��q6Y��^�m���2�!��~�L*x}
\A�(
��������������k^��G��������K5j��\n�v����������������O[/S��\�t3��<R$��:�TZN0k����%��5���@|����$��[G��~�g6p��8h�#�YX�j_�]��PFd(�bv!^$}��;#��H"r>�~���
�����iFTo�W3�t��>�
;�`��
J�x���D��Wqx�7������B<�*��h0�0^����P��
r��v����^����3h�y���E�j���U2��luG�7��*�O2A���|��-�z��U������{������eq$�8Z������c����5��y�N*k!^�z���~y>���l���@x��<��I8�`K>�c������R�hy#[�'�����h�@O������jy�M9E���c�^(����:|�����2Z>N_�grZ5&�Dmw�`��P��jsK�D�}���r������6+I!��l�b�������@�����;J�1�����5�����
d����u�.��g����q7���T��&�����k���������sNJ���)mC�����i��pE*���!����Lu�M���@mO�����6���y1)}�Z���6!���l-�)�&&��$�\p��c������{��'�R��W��Dc�#+n��4Qu$-�~#��Lo�6���t4M��cC�%pq�'����e������:�y#�!r �B���*�$��'��D����|��������f|�|��7���������G���j���,�OX��r����\IL9��9����6U�@#+[e��O,&k��D��h���B!O���ebo_C1K�����!m_e������s��_j�������>��3�)"-�6���� S#>A$��D��>�\��2����	��"�4A��>��6��r���Fu� 2�+/��$�	�Q�Yl���M�<8���A�x;�	"��mODB8�W�M�hC'j���9=d$�����8O���s�F=�[NyqQ����m-�UL�/��~b�.��u��S�j���u��U��G9�������?F-�1s��QK~�\�c�r3������>�oe���6�������qip�:E��#��]7���jt���F!]{-�g��k�^��^3���_�8��\�[}�U[��������������������.k���]O{{���?}������}z�����~zT^QZ����q�X�Y��?�_����������������3(q�'�a���y�7� �,��H6�,Jt��o��Dd���X���f�4�L��$~����������'�`�hz!�$-D���/[�E���^2;52�~��D6��������/�`'����!OeGv�g!l��sb$��q��sZm���-��o���v~�#�L{&QG�p
��p|��(���\8%����K��w"�p�!|�(u��%n���$9bf��
��{��{B��	{�]�u Lk��X7��8�g������0@P��Q�; �\>_���������^�$_���r���A��I����jn��2 %P�}q������	@�.���8��4(�HD��B��5��Yb�E��#�3c�����O���d`�c'#%�1!8p�������q7����AT3v;*'���o2k0YM
���������M�^���������teF����n|����"�*�w���o�'2�0���_��X>�oY���&gRm�m1���/�,�d�xNo�/d&�������/���v�L�������'�\%*����Z�@���3d��w1:�|��'��c��r���z�2�����$eA�Z���K�����+Z���'��W�����d���r�A�-qU�R��6���O�Q��j[��t���L��#GSpN����VT����������������4Q6W"8���L3!K����[P�#`�<��j��x��U;�c��O���1K\f�-8:��������]K��?�0;��&T/;����q�g�w.�&n���r�&�2��_�+}��	�j���v;�_a�vcX��
=#�IOzN����-j���
/��Z]�SK��X����F����b��5xj�cy�4�����e�+5�rN,:T��S>~$"�m4�n�N�A�Q��1�����&�2�n��OspY+2��B��C�����&-���}���Eg�
9���8�;���"#����j;b9N�(�F ��[��{���]�k��Z���3I@�7O��HQ����y4.��5�$r���x\�qn(�&����^2�a�Pn:�m�)���H�����������3g�J�����F��Vn9�9w�$tB�s�H���\�k�y �C�����\.[�K��x~�=���d�e�����T�\������e=�����w��FP*���c��D�i��{�6���D�g���z��@pn���>M��������U���Tn�(��c6#T'���r��(�y���&D�3I�r��:�����g+����n��>��,a��v��X�����<�q��K(
���GW�eH���	���^�W�
B�w8#���o��7�?���H��U���{���>�,�`��D��������;��/$�];.}�^V��Y ��Z7{��o�z$2��vy@��		�A�9�^��#��b���0���!��&0��+�F��2iH��:��[�		@������eCYsa���u���t;�G��
(�*�M���$���*8Z���
}-S���b�����G��*v;M9��	���S-���$�utF	��v;������4�5>?}���Lh��N�1���zW>.?����k]�g�����+7�F�QP��	!�R���W|7�^3@�`�������������E^������
�����g�&��{%���'���D��!n�o����w��\��SO=�����G&��6�%s�����=�~3�����,��D�r��SN3e��h�M�FR����ysiUx�q�O%�h��v�����b�NL�a�h���#6�0�_�n@Ul����}R�c]8�P23�x"I�,j�TF�d�g��h��$p,Z�� �KA��a��7oM�FR{7��S��*�<�:�����Aw����LS&��3d���K�Q}f4��I'����������
5i$b��l�kwU-�,F����H|V*����c�T�}����d����H@�b@��'��;"��	���l�}���iB�1���m����8�a<1�cFB�x������/���6����0�{<�\�qW��C�B^��V�w_�k���E�3���A�������S���Y���
070�F�60��LsBv7����\���s���x{��do����~��N���9������$������r���X/&�/r��>��z1#�t�8�.Y�g�.u}""�3������XL��eW:�����ee3���
r3;#M��[��g���N�>�:S.����k���z��p;��,H��q�eQ
��S����1�NZX��b�41=7����-�I��d�-�\��NVS;p�)���'
�5
,��-�^>d�0�*s'����"���6���L7������}=���n�����p@c�_�}G��<��Rx�K�}G������o?����I}�q<�aK��X����@�� @�!�y�}���HB��h� ��V_��� Tl��irHI	$������l�a��IR��A~�FEk�Q�������`ZP��i��2/�g�f$yf�e��y� ,M�HD�Y9-����~���y�����A���[��~3 ����=���
d���G�i-���'�f�w:�0�+��
�1+OZ>�����3Q�N����l%��|&��6dr�R��J�bU�Sr
�&��r�9��,����3���t��e��yIJ�|���O��=�%�������d5w�FRyl@���xCwK��~D|�MQ���W�/�>>�d���t����V*��4]���r���MFiD��<^cA	t*�MS#@�������a��[V�y2h>�tL%�]AO��%l��Q��R`c;�l�a�?XF��'q�9C�5����-5�3��i3�LY�]8��.�������H�����������]�m�N��$+�'�d,����:���N���H��]��};�$�[�' "�Yq(��v�e� 4������[V�o��;>gD/�������)8�n&�-'3��$_����H��}��1���R�d��US���WrA���2	���$�_-��!:�LDF���V��o�p��LTw:2��*��~3��\K(k(�^�*,��*�(�e�
�>�~G;��[�����;������8$��&�U��Z��l�V�H2|B6IT�����M�Ohb�tAn�L ]�}{b}?A���$�gR�9��_'^�]wt$�������{���/���\���Ii�#y��]��>��t�9^���4��������~�>~U�������u��QDp[P8���R�N��RY�z&����"��D�z����;wm.H����5����>9��k
����3��y��=n��_P�e��w��%���s*.�d��f���	�zd����?�DJ���d�M�����x��p#&M�ol��)��L$�����zpPg"r�m"2�!�[9��kA���!�t`�]�*S�!�b���fT�����\Z�s����T�,����s���0�\V-�g6�9tBg��Y�����v�S39#��0�S-�J�!��&�\�����!*���x���p���q����x�����Xk�0�'�J��OT-�2�OYY(�.*�TY��Y���z�������L<��k�w���M��&�.�#LY}��WLs��~{�7
{�4�6lF�2��sr����	�^�8�_16h�CT�)�Af���O����)�@�K�P���.�������#�=!M�5���{Z#��(ea\W�q��������s���Me�J�(]=�}�Q�����	`mk�"k,������gf}2�^��e����\�8���z�1������q��3R`y�m�~��%r��1"���G�_�L+�@�e����,�c��}g�.)V�-H�}�����(�w��'$�x�:����BKo��m�����G�_���)
���
���7���'Zz�U(�o�	�Z?+�X�=6����wF�m�����w~FZ�y�T�FY�&�L���D���U-��J�v���g!YF5�m [=������Y�#�;U��8�,��af�6���Q�H�����$��y�.�D$��,���'��B�%�ji�,�u����L9��b����$d�i�����5�����Fw�:�$��������E�x�dj��0*)��-h�|��V�/=]F���Us�g$�*p���8��3�OY��f�R���l���Z����*�k �z$If96��?�P�.��!�<����-�2��`��e�E3����2�D�[;D6�����&6h�,c���_t��R+���>���Z�������{�(��u��T������=.�?w��t��~���%�F�O���,��Vq��6�����	���qpnu�>?��W����6����Q���	�_L$n�����������s��I����G�}�1J��Q�	>3�<^@e1�g/���B��Y"�\{a�t��f�����2�p&�6�]z�m�G�<�,�Q�gY������2<������_���J����N>$0�7�><x{oO	��Q6	�����w���w�a���4J��W�[^
�m�@I�wD����A�uE��Z�>I����3/�o�����w&Y������d�b��v��F���{�����M�_�2��xL����`T�3�21\����3�)\DFN����L6��=���|f�b�A���l�"���4�TM�j���VW�����j����L3����G������2��X���Y��(w
G��<����?�x�8~&Y��,'�	���S��L�I�������'�C��o��(I.���Q-��$vyI���� ��#C6k���Y;G���.=��i�v�:��i���j;���i��Q;��AD�vcl{�ie�����.�lz@X�%faG��T������D��>3���$Kh�f���;��{����$c��n=M�Y,����m����c���&������S�7N$�8�����,4�l��3��>�f���pc�������g&���5��LU.��A@'�
P��4<Z1��q7����c��f���:����us��j�W�Jh�X�z��M�2Tq��~�c'$���\�a.e_�>�j=6���,Y.�B*�Z��I��@Y�v�lq�Dj5k�������*bW9�[���8L!��1��(`m����+�|�aG����3T���r[������VS����� �$J������"
1��������p��X\R����X�-��Z������]��K�"��nJ�7�����D{%��$�o�p>�����CB��q/Q�'��_�=;�sL���	G��q/�~-c)��������Q������"�XV��e����$Q���������gM��(�EH�I��#��w�otg�����������[y"|�����n�x$$I��l�"��E.��C��������}&yjIs��u.r��?�����7�r�h������4Q[cBx�yE�X���V/��+?������.���q�e���7jT������i���F��x���4�,#O�c]��d�9�@y���T>iD���to���	�>������S����[���*D3W-|#����ds�}<FPGEiA���c��X�zf�D����J��hx�����0���'[��EdY�����()1_g�1}Ehxv��)�|�*�F�}�q+�@�4Ol�K"���@V��x���A���ld��x�F"Z�Ln�%*��]Ax� �v<��w�P`��td���yr����d�f�D��(Y��(T�������G�^����s�|�	��c����s��_��ft�H+��N[P6��-N����HbW/
�6�\�NDD�4���>?E���g��������_g�G�vyu7C���w?X���M7���T��m�FTp{�����w���t%������N2E�rj�������;�hM�Tm]<���:Ot:�-����=�� ~������,�j�Yl[��W�2�	x�C�n��/�������yB��Ko��6�rd��P�T�D��+��r�KG��h]u�L���$��H�V}XT�
��#�1Ka~�is�L����"�/t`KT�tEpr�u&�������=c��#D��8�;�w������9X����db~-��0p�dr"�.�"(q����
�Ajp1���9������~��4D�;�<]���� ��{a_	:q�Z	��#mH�*��n��z{�q6�z��qr�� �'�s\:{�����(�zC|#���_Q8�����z#1"�{J��:1eS�L �x��F�o�L�rD�H�P����,�;>��b�������MG��N�uV��K��8���&��g.�P"X�����H�w�������|R�+N���*��Bm�L�L|�7d��~XdU�%����v�e���I������H�-�p�� 
����������|��4eA!c�o|��6a����f����>���&~F����������-�&v���p������F�z��GP\�������yI���o�_��`$?v��=�87��i���Ej���Y{���	\%�O�����/v)��=C���������j�ke�yo��Q��;�$��@�?����V��la������`�E:�[l^qGD�'��gU�q�V�kw&��Q����Gj����#��g�5]�Y�� �Z
��NQN@;��������t����	]7�2����.t�]�_�
�����g��l4C��Mw�j��5l%d�:0����`��s64��������;�~�������oT�Q6c�8`�b�p��X'pa6�J6j ��QG�.���iF��������h)
���:h\������������
�c���~��B���f�i����:��S�x��X�z���H���J����J���*#��/�8��,�Z��g�1Y�o~GY�ZJ75�Z����O�L~��%���0�O:����G`����6F����vs�O�U��?q(��������)���n���	4+�����G"��6Qk�2u�H�,I=����8����SvO$m�����W��������E01�$�(�?����T���$=I�vhIdRF�G<���z�B*,�@c$�����y�AUc[}9�>x{d��=gX���J�w�2��C	j������S/7��!I*j������Z��B����Z`�R %PX��m�����f^8��M�e��L$�2�����Tg(�;H�Q/z;�XZ��>O���K�����(���&P�,1�P-|7H	T�[��:G{�p�����3��E�����$��( ��|r;R��'��@���p�=�h�-��N��(#�_�����y]��7V�p����>)��ti%��������'R��P����D|a���PPy��~����^4?��3���(��,=i��+$C�������AA��x���G����A���v�������_����-K��>�
��;���|�����������7G~��R�����h�%��N���w�l��~����s���x�=g�1_?�p]E��P���S��������`�X���
�6���^4���Hti�Z���5���D+��m����+-����%���T�9"����^�BDF�7��0��fS�J�gH^�o��"R�E��V�t��x"�q��Hf�p�����x""kD��G�6�{�1�����U3a��g�B�%��_2�0�	!�a��		@t�����ug,���$Wt{�~1��������)�7������F�];FB��b]����p����)5+0�����x�����.n1�~BL*
�~.��*�`V���;+<��$e_�I�.�����	S�{.�S���Qu~X�u�b�N�������Y�+������g���>�:#�����y��U���nS/�����lQlEH��l��4��@�lX^�Y����z[A{���,����*�g�:!
Pw�U-.g�2����2�
�k�$��eFayN`6���~�u����$�:��I&�[~��f>_C%�TW����AK�����vM���X����Dd�{�EmP�lQq�jTn�����&��e��&��.2�uB�\aN����=�����k��^W���L{��5���D�o>�dk�M&�5���B57��w%�`�i?�t�![�At#�)N�Luw"j�c
��'ec����6s���r���������.����0���3D&��0�r&��
�M��Fl�`��>LFuFS��e$�R������}v�n�����T���8!���h��-{��M�Qv�������H�3����s�:�j��������h4�}�V�a����N,����+x{��� ���r�j6�3��W�9�,��4g�3e���#R��0��=�i�TesO��QS���H���TBk��O�w��u.�����^�lDE�~'�zcD���z��M���Ee��[�����5�������������aR'Ru��(a��nS��M���uV����SG%Ljh-�N�Z��j��k�G���b�
�I'4�n�5>j',����hpJ�"�X�n�]�F����<V{Z��y�MM��rf�g����-[v�����9���y_�<#��i�����0&j`.�%�m�8�����	��T���^���L4����R��_���dq��Od��?�+S�
��pA��&�a���4�jUU���� 3R@M�
�|���d/��y1�5-����<��ia�XVw�S��`�#S��e�E��bF%Tu�A7}F)y$���"0�{�--\Z�2<��Y&$�
��Q|P���^%f�'��0-�2f���yY�n�l"���Q������El��)#��0s��DF���������V��v�Q�rNO(��I����`@Z�����X=�ha|h�1M)w.��ef�
�����H�Y���^Y��=A��&�x��75ST�	��sO�����;�$���[�4<����e=���G�f��?�<7�oZ3J-����S���AX�D`}�;2���b���_��^����;:��UF�������)zL���u�Dd_�$���
%+�,������H-�/q[Y=`&���s��������FR�w�o"I2�wZ�%��������F�?������c+U��[)�r�Sm��W��iuc�&�r����b�w����p��oj�`�gB"�3�@5:G�6����j�f#w��������k��6x?I��������_����:��S����!��;��D{L�l�����4�n��J
������L4����!��sF��V�Y��/�����4�I���$��2
(�� �,���<LH���W����3B��oRA�z]��o�PL����/2<
�b7�xW$��Z^�O�l
1!�@�yF]�Rf�]r]�#��t#A3"��\��6��b8�����,��<����	�ww������������D#,����9ld����g�sC���a^]�([��A�%
��jH��I hP$�8c���bD�� �-�z���Z��1�� �'ZT��������T���O�=q��D[��5����M$I�������fF����?������\��M*���������F���b,��3�MJO������M�d�ND�� �8�'��kRg��M�M������{2Q�=5�B��KQ�&��;l�D�l���������;n�m"��BD-��sP�)?)_��k���'=���h#�!R#Y�������H�l�������lf6�4
���8h� �������H�8n�!1ZB��Z#nF7���CLHcS��n�"��&��,u���anB��+���k����F
��"rh�f/b�H#Q\��x���(gw��s+�05��RyWt��=#&4*	]����@������6sY-m�l1�C�*B	}W$���u�8n���4��1���4��a���Gk3Y����X��WS��T�>*#�c���]���liK5��H�}�Gn��#b��u��"0�V�!y>����^=��#�m�x�a00�c!f��	����x�	n�`=�m�MOT����E"�H��BI@����#��B�8$cA������1@��<�b&{m��s�v�'(�K�N#����U��ES����82tf�j/�u3�/��%gt6�{B|p?m"������l�|�i�}L�������`�N!]LV3�@������?zl��������S�4��v{{������
�k�K2c�tv~�'����9�^��[� <��]#/{T[L��V�}0Vl�z�
0y��W�������a���<�k]?�2�f!�zL�7�,R&)�n�&7���a�=���EA?�����u��>���N��cKo1I
4�rYv���M%��}]�&���1�n���P��I{�	���2�h��`�~!�J.[�w�w@R�,��A��4���'�a+�O�>:�2��7�0������`G"�	�%����������>sE�&��m�����Y�������?#����f����g$�?jO}����-�����^���1>��}��Z����@c_�B�������F2��w_�lO�`9���D�!�L���JM��'�Qd��0���&������W�Q���7�"��H7i �g��k����?#�O�6L�}�	i������s�X��'�
�rW�13u�:
H4��/!<�����]��v��wls�Q��c�WF�t���oe=Dc�?��>O�����s��(�������G�����}��mh�u�u�~��*���3\���K��t]�|�>���1]o�p�����
��6]?������>^���������1_����\����t��b����m�~�1_?�����[��K1�����:�t��O1]��:����$�:�t]7��u���jJ\�����os����6�O7q�u���>��t}L�5�_��������!��c��9����{N��{�<���$����q�.�vC���k�5��:X?�Y{���@����:$��?���_��������f��F��f��G�X����`���b~�7=�|}���uoz���7=�t=��b���@1_�f����{3�C����!������}�����!����_�f`��q�/����6]����f`��q����!��~\?��h�w��Mn�]��b������?�!v�On���
��rC������'7����
��rC������'7�������?�!~�n�]��b������?�!v}vC�������vrC�z���
���]Ln�]�������n'7��g����>����oc������Hn�_���s�������~GrC�z�;�����_s��1���~?A���������N����<������Iw��,�@�8���q�o"���Y6<�F)?*#�	[���:g�$�K�e��+���Wz�|2yxf���A:V��������>��H�b������YZ�G��_!�E
�!�S�l����y���	`�5Q����8�6 J�[TQ�~�����s���Ei'4U���
t`dF*cc��g���C��6"m�oD��������9�3��oD���(�TCt��%���,���)�-��qg�y ���pg�[�;g�`��N�2�i}Ju�%(�
����m����&�?=<#����I�D�����R������y��������/�a7���DNm+�A�;�D�!*�B�e��5(�D�|�4��������P=*�@���M�<���4�cB��n�M�<n\�d�eB�N�vj�X�Qft�����nXT/�TGe$�����g��F�D�U-9EI���|*+����F���J
���<��kJE�vf��ZVr�(�,kPl9o���EP���:�f=�\��1)�^^Dh���&��X�/�\�����N��I��6����3
����i=y �%��i�]F���/��;��'S�F�k %P�EUh��X���w����pH�������d��������:��OO���&�q��i�e��.Dt����v

�[q������k��q�
�AP��
��a)&�	am��v< >���Y������,w��������!{��Oh��dlI	��^5'��V�'P'���(	H�l��a�p��%�M�Hk	���\��Tl.�H�`s�D�i?gt
��a��T0n�)v��~[�i�Lk��_���Z����"��Rf��D<'F2�z���X��5������{.�U�d�p(�d�D�}���f�.�fey<g�K7a
hJI��
��Q��#t'���H
��d0���s�;�K�6k�)WFXP��!y�3"�L�1����{�cA2�J0����������wE����;`\��N�(�n�0��
RY��V��������+�JU�������
�3����s!Ww.�6����Z�����E|�B8�Pn6"~6�������@�v��2�S��e+;#�;7b�(��3�l&�W��@�f�_�<Vb&�����o��}>�==��3���*;�o�w��C��H��}�y�<��b$�����h7}��Ds�M�"���<�,7o;A:O>?��~B�Q���b�,���$������a�Kc�V=
}��������{O]}��F��R]YrW��XMM���U�-�>�Y�2 o5��������)�Xw�3a��������lA��Ae�u�d�;�����1��\�7�B=~@�a�<��"���g���r7j�H����;�h�� �C��2�|o����Qj��$,$y�
7��	v�Nm���6����t�4w*`�]�e��%��e���~cFp��>���b������,��*��w�KJz���Z�����>������2���*����4[|�+�xv���=�w!��9���j�o��:���,4?m)Sv���6X�vu�(��+�W�hP�����E��F�.��'k���a?���#]��,���wE��9���:Y��6>�? U|��_
r�6/����-s�-�FF������]�-d���p�P�U�<1G�2A�k6�6&���8}�aB�p�:$B������6���F6���-�����Z�bh�H�����bv��~�#5R(;�K�=�w!���ZrD�(w����"�5x
�`�M���t���I(���������	y�M2�gO��=F2.K� �0�HB������X�qGZs33j�v�wp�i����l�bS�LH�b7d7*��}��g�U����������fEYmlS��e�$��>C0 4F��+�����D���"M�����NjS`��{��=7�M�O��w&�K-�����t�+J����4����|N���@D������g�&�RE��~�c�$����Mi�4�����s���rd����� xG�t��1
��,�V���h��(��rv�%H�d��J;Oj��4��	��	�+�C��`s"P��A�Y�o�z7:���N�������k����T�����X�n�9(�
���{�E)�Q�[Jl���4m�g3�p�����S�	PW���z�b��5!����n��Y�.��]�h�\������V	���m�uU��<��"��s����^vx�����p�����Ym���� �	O�������>����"�0��kR0}:��S��9��kY.����y���z�0����{,�pt���)y��6�d�q�2�xWt����A�
��4�@��w��bl�����*���3|�aK!.�:��o����$���$S�7��@���z�@%���S�[sv13F"2?��|��e���D��6&D�(�I�@P	&D'!4�$_6�8�$w�	x(�p��5A4e7�[���E�D��H������#xW$���(JtXG�f��#�G������^_��D�L������*���RU������p%��}�pBIi;z�����z�m��~Yw�_������_%]�u�J\���m���[3�
@�.���e/3j�m���$�0���x&8[�-����s��������R�'h�[M�����*6������m.�����'L�;#M�`��A�Q_�7�{��t#6��&]
�o��~�UB���"x��?��a���{:�����2����-���Ha��}q��;#����q�F������mo���t���fGQ�����cBY�S�����O@��&
��'�m_P������,2��.L�{b�D�m�QAOw)A8g�����Zv�i=��;�U���UWs��>�A_�����q�g5�Z�fG3�� ����'��g3���ee��O��#�$������L�t6����94�caF��m���~Fe Z�,�f�n/J�1"�UO$>;��{��16y*-����4O3j��0G2�b���6lHT�5;�J��\����\���(J������Zm��b��t���l_�:<��W
����Ig4}���.H<��7��wax��_��Sjl�����5���	[�!'���IFL;�?����-|jY�6������`e5��3(-��s��T�'��#:D���<���?Pd��`��^T��%���Z
j�������<���pQ�T��������fv������js����2��~��Xv��T��$��{:2��>8/#�g��E���1Q��1{x��-�{�#P1�/
����nZ7���\H����'���:[~���v�7��m���3v��\�2R
gc��!@�u3���4����;�9���+B���_�iG������
Z�>������K�N!��.�1�w�����|�qc��d[�>��
�(]�~�P�	�����P��v��ebh:�,�}��	mlA�.�'�m,���%N=��O\���'.��������z��o=h��}U�/#q�>+����4�������>#>.��g�Uf$2_�st����1T�
7]x�`�
������e�M��b������~#�D�o[�n�}��;��������$��;
n��y������~����y�GJ�Z}������&��L��D��;�n�"��fr_�P����_���h���H�
�_���+3��W���_���Hz��4'�]���hj8{(z+#��Vx�[������ho��0���LD���������9�<���ZhR����������]o��F�&$���L��i�wE���4/�����ASO������W�������1���	`�:�u��CX3J��x�X�coD*oGn@��L���q��r�����!�����c"aC��|�f�;k
~r��"�Q��(�6��#��D���Cx����P���H@K_�2��zD�${����+R��y�[�������{�coDY��?���&")��g���Ex�1�i
|�h��Q�����e��;���������U����6�T�X�����b�#"���F�x*Y_1�7�/l��F���������(�t������_������������]m����l�{Alz�e���+�J0%����K��X7]����X�D�~XQ�����W�c<�[B�.'��gx"m��9*������;�6�h��hH��-�$"3B���Y�b����1��	p�'�9�3��_&��-
�u�)����_�;lp���	���exc %P����9b�����#��4'�F+����Q����j��6�;n�u:��O���~������&�5����)(�
���<��X�_�L
���>�A��p�g��Di4\�i��t��TF�$�=?����`�L����
�2����@���
O��9��t�8L7%�F��Yp=���
��/Lc�P��HL������[��l!�����������6��-�����������Lt\��tl|&"_<C����x�~�q�#2pW����J�T����+_���r����.�`���YG��:D6 �v4{eu�/������*T"�	~�m��z~$"yx�OGo�`����i\ud���C�h�������6�0#���x�j�c�����@������{��m0�&���
�
_P��
��N#�3Q-l0�u�����~�8�dB���;��-���U�LP1\�Z����2=���F_jB�1���pZ��n���z��=g��	}wmf)�	6�=�0�-��%�2�]$��9�(���V�,H�
��|���f����SsZ���n���~�n�`�z�n���Y�q���v�����X3����$��l���D%�oN�#Q`�����a@7���`��h�i�&����J�|��D�g$ ���hbb���Y�Hd_*	`+R/�N6�[�j��pSY��JR��_d��=A�Pn�t���0>|f�}�N�aFEI�U���8=}
m�	�/��d�p�T�������w&H�	�/h�z���l��J��>iQ�7��P�K}�A��K)�J�����F�lK��h�������|����o�k��
u E�M��G���$�(��/w��a(�����x��������./������}��^��Z�B&;�;�+���SP��j�6�
N+�X���[�"�����w[��!�G�f��������'��G1j���V����\m��~����b��nmKH����>��6zS��aJ�%o��
6��o���a�~�h�t�`3�hfn��*�&�vhHS��g=}���<py�q~)')<[k��@
�Y�����O������Z�b<t���Dd��c��1	4���l��p��D��&���L����9���8�+��n;�+&@�*�N������([�(��~W$9���D���wRX�<�9Pv6��1��e�P�rQ�e�a���29��:bK�;����^��C&$�<����[���6e�CIn�R��m��T��G�)����]%>�������>�p�-��|�N�����_DS�%���'fA�$NH��bE4�7���	�}��/���H����p�zl����L�����ja+�N�CG�`��u����fT�
����0����h�WR�oa3���!2�+o�*�����G�����@=GI3���b��U�hF
�MHLwox�'(2����-<0hu��7+��"ht�{��@_�<ygp7����!�����@q�	,�P�8�\�H�����SP41:����bI�f�h<0����5]��f��
F��1���������q'!e&��`z�O�����f;N�.�Et�|��qo��4i��j�s$���?b�7`5���(A��xP��W3��+�>e=�XF"���^�'
�q���	�������(�gEZ�O�Ll[;x�3d~cF(�$V�
�l:�9����a���yu�t��#	yO�U���b2t`�Y���5T��`^M>��;O]2�/n{�����
��%v��n�Pc;=XmK��4��QFp�Sqd��"�
`**�e&��#K^���,(�����P�����l�L��1�mn�&$@�������z"��R��@{
�`�
�{���e�s��@D�����_2���{,�N�?���	��sl�#����MH��7{��xX�dr�����ew[S
/�K*��(	~e�]�����|h��g��m��sUnx/����>0��H���1�0�k�7�����6�����8��;�����
��H�mV���k�����%P�)����}��3��q���Y�l�oF�f��g���|g��@t26��E-]�����n��N5vB��4�<>��$���������S����3Q����:�3,�����pu�N�7���zfv?��)�
D�m�;	����w�~X����$�7������h��q ������}�)]�w!�m����m`��3�>��q�N����^I�p�d���s�2���z��C ��C�i�����7J�4r�_L�;�pA��P����{�x�A����`r�4�[vM�Z�e��B� �n_��
�C��%8���+�~�f]���`�]Q����'P~�]�$��|g��}:����9�2��;D)�� ��3�N����=\XI��Ln���;�������������"�
�D�M$:B*�`����������a�{ 	X�A���{0�{�&XY��U��u�4 ����%��3���&���K�#�wP#��s�mi��.3��5G��"�OtZ���=�(/���[�}�4��Eci�����yAV�~����.��2$x��q�O�Lt�z-M�=�X�P����c;O\�9j9��f��@&$�u0�D�4���~CKs��L����R���$w%+9�}�}�j�w;�f
�m�XM����/�H��>�����3�#��@]��mo�%&�/�gYF����!B;Sg2����|�Ns]B� *����2'����f4����	�n��� ��{*R�
���3�����tk���S<���T,XbJ^���>i$�%l��9��3����2A�����}4��6t8�Puz�\���x��`9�1���9���i3Q��f�y���pk����d��2�An|���%k���}�= �+���^����H��,��=3�����*�A�b
����rSAM��EZ.����(�GL���x[u�.���eh�L������r������D��4���y�����}V���=���^��x�\�2���g�e���9 ��UR�(�A��JN���2�h<��GGG�^�Z��3~Z�18W�$�D�]+��e����E�	��.��>#�S=f�H���3��Q��Ns�Yz2Q�xcf����M�p��@��I7	P_��>�5h tuQK��,,B�GP���0����T������O5���3�6��Ldm����t0��0p��:��9;	��k"�O���[���(3��������*�ukcNz��c���x7w�x�������� �l�B����r���
d������&TN�M�a;�.��wa��B<���]��
-2	���?G�����f��d+�u�N����00����#$������jc�����������HN����l���(����_u`��-+�m���	���X��N��4'X�-�!��"`�
�k_3CI��o8������\G�]���Gj~��K�g����u��0tE��z���x��
mC��=}�b�=�P��OG��tf�9�*����ND��N����-M��o3����)Q��
"��:`V��N�f8@��%��%3J�T�z<a6e`f��;��+����		�(	�l����@�h�!W3�Xs8��fL'��O�7�Uf2-)�BfK:#X����!-�%���	�g���/���������aI'"2�CuKz�<IX�	@����A��{K�.,����3K������2<l��3��4�"�*���}�&��$pl�l��J0U_���\����H��Y}o����p�,�'��u'czm��lG@I����vtRf5����T{�I5������Y���L����f�2�T�5l������"��������F����#(���&��o&������2](#�Dn�9�$�P���{��;�?%1������Sb�����D�'��;w��xOH��e�Fb(�I���*����-�7��B)S��=���'��}y_I���x#����%�JI�G���$k<'*���?)h��$�=C�	��O�8�0I�c�B&�~���P�=���2A���T��>��A�&�R	&��NM(���W�0}��}��N�B,�C_���;�\��n����$Hz���%�8<������{O46s��������<����=��;e�6���F��������h���u"�>���e&8��wa� �?v���*�sR=�S�I�u='C�lv��d���	!�������'������G?���]'E4��u�������"���$ �^��XR�cU������NS�REA�i@88��S�4�]Y���(�~���B!�3�/R�L�n6E=#u�n����K����@*D~*W&��=�o�I	?W{��}?W�^��H���d��/�fwF�>>�\�>V���L��<L�V�ws�����s�&6[/3���b�T�7�Id��;��C�x
�|��@4�g�VQz<v^{����H�?��P�<#���4�������z�JJ�|���8C~��^����}��h����������ev�������u]�����a������x�"��W����c���m��p���pR|FH�}�NZ���~5 �ox`���RYG~��;c�p�\o���m�h�H4�����7��*�O2A����x���������AT#�c�G�&I�:*�&����#�2�Q#�4g�%�f�:�/�E�vs�/����������h}�i�~l�u7����J���5�S�'���������&����k�&��m���}6����o'�M���L��}r�){�_�����V�	ih�>3)�]E������H���6N{��$u�I>���HR��m�H�v4�>��u'�.6�:v�Sj���g������[N� @&��PG9�>��-�q��n"�wS�M����\��M:������sNJ�����R��x&�����OV��w�\�R�}HJ�|��f��P����T��Kd��t>�V$dz;"[bJ���IqG�����M��1=
�����2����;�K�Yq�\�D�����"�O��N�Hc��h� jg���	%�3�|2H��^_F�m���lP���Q�=4�E�$R@��`-���	���������f|�|O��_i���]QX�h3BR�6j1��%jrl-=O�jIIL9��9����6U��FR������lR��%j'�D�[���`�����Q���9|FH��0GD�SD��]��K��)�{X�f��������6tI���L�	"�m&
���jM,K�l���_d�&�T��4A�U�����}r��O���nB��t�(�,>Ad�&�D>8���A^yg�D"���	"!�������6���K�m�CFBM/�1Y����+{>g����W�zN�k����b�~]g�1_�xNq]�t��Q-qb����u5�9��wmL�]g������-�����L�]�������#�v����s��:��z�������S��B��u���������}L�]71��1|M�����D�>�'�������w����O�^'�����U<v;����]�?�(��q�/�����?���7}o������"����f�@�U^��������n?�������o������?���hJ\-����;�lH���`�-@Q���}��LD��������j ����R~�]m~N���4i$H����A�`:��7[TFn���0��Y��s{��k^CxU,�"��qp���~r�����#�U��K��e"2w���dpq,�����[���R���B��A'G�������!~��N�����\�t~&���3
:����Q�<����G�y313S�	��N{��B��ML��1�zn�������@�	�rrK����Y��@6�`�A�G���1�����1y,��96�����\l$�~�g&%�;0)Y�		�9�^�uNZ����F�P�8���Kv�L����d55f�jJ�.�'�>�f���	����7��^�� klZy������}�F����~����8�AVs�<D���|�7?8"p�����4��ww����#*��MM���cOn�IkmT7�g0lV�c�f��<nvDv?y+Q	�l��Z�N3�� �H�������$ �7C}LZ��PNZ�T�Q�S�5��,hXB=�44���l�z��o�+_t�������_������f���6�!y�xe�l����5k=��C���������a%F�ic5!ei\����'	%�f��<nK���[��������&��I���Q��Co��l%��e���u�N��L'V7��%y�Y���MR�g�t]�-���xZ��i�q5u��5��4�
'[�;��LT>!Z���V�ng��+�����7I�i��1�Y��s�Q�Qg�S���5�o����M��`����@�E��hg�.;���4�OI��Yt������LDd��f�m0*53j��C������4!�q�{��l��"3*�����n"��\�����,�da
9�!D�8�;���E��q4�v�x�PQ��@�k�
3�~� $eE�z��b��#U%f�������O)
p�����^�K�mM �8ByX���w1P�&��Us/��l�7��6���LD2���N'r��q������l�;�����r7�C��5#O�sI
/�@��0#5��\�>�-l���{�7��x^v�y��<jA�5�	���=���Z�c����xz���$9��9�LID�v�Pb��'zE�)��&������\��~"��3�+OC�0�w��_�d���	���N&��r.�(����"����$��[w�M������@�k|+N�G&T@�%�Oqk���	�qy��[���%��
���GW�<I� ��p'&T�x����
B�w8#��-E ������i���G�&2����yk�;��L�a}.�����1{"Z���{���IQ�B�����l���9!�@\��n���i���L���l�t�!�Qc4A��F1�m��G���d�ah��#��M`�S��G�w�t���4���v��[�		@����W��!����@+�F�����X��O�Q�U��dGn/��t��*8Y���
}-�}D�
gFl8g��3�
�m�,G1#��{��`�Y�::����Y�>,_�i�������&B�|�p�ZzZ����g���vi���132��|[7"���Z�N�a������������{����|��7�w��d����L�����7~�M�@EJB�7�O�����|{��{��;���"p
�O=�Hh-��A������c������1t1��Gq?K����Es��U��}�i��5�z���������p�Ux�q�O%�h2�p[GL{wb
G����G
l.a"�������x��ZgN���k	�����9�I�e��Ne���.9[o��%���r���4������@��DDv7�����*]<�:�����Aw����JS&��3d���K�T}f4��I��Y�	�pT���
5i$b����kwU-�,F����H|V*����c�T�s����ik����(��zRI�#2]���<����G)L�&$��]��]��3��0z�QzQ�f��������#si"������
`��=�\�qW��C����5��*������E|������Gr
\v�"��&���>�#�F���LsBv7�Z�	5L�X�]���x{���h�[�F�����6�v��7�-����#��YlV��<C�;!k�G�/r��>�l
����8
?:q�]����.���HZ�g�1Hlz]��'����J���U�	��������g3;#M��[��3�ff'�x�d�m�\�5dYk�ag��
dv$��������S����1�NZX��b�41=7�}�����g��w.&������}MoM�
&��2�:4
�����|�f���U�����xu)
�����E6m�9�	�A4��U�w����;,1��	RG�zcX��Ogvk$��q<����X��	��@�� @�!�y||���HB��h� ��\_���.j�;5Mq1���9����~�l�a��IR����FEk�Q�������`ZP���������I��l�e�4KS6�}VNG8���X����H�-��v��%mB���i{�%7�������Z@%�O����d�aW<GcV�����}�OQ�N����l%��|&��6dr�Ru��������@MI����,��-�3i8�\e]��r�j���@�q5U�A�E	4Vr6�5'��7���O�[�����
����X�6�R]/�������V�s��L�R�=����<��@%X{6k�&���n,(�N�ij��[�b�19�Sx���5yn���{e������{��A�8����lc�K�Q���i�@�`���b��5jlK���va@��?SxNC�����g`�D�1����D�gi�����sZ'C�<��JI2�=�:����5R�����:��\\���y�����u9\�je2#=����T��l�3���L��9������}�_�bh7����"V��Kwy�I��\������^1��.Y�)���T�'g4ud=��}Nb����?�&�D�8�L�����<����NG&��������*�����"���������w�l��#��h�Q{j�cz�cA���Q���cA|m�X���u������F2|B6IT�����M�Ohb�tAn�L ]�k�1�����kXR�	z�3)�v�EY�E�uGwpAR}Xx,�\,<��\q`A~���*���%F�l���}X��/��m�O}�HD��P�E�*��oZ��7��E`�%��~��b�J�~��{@�����E6��#���{������ W^�sm�$4��#Q��K�[-�6Wh�D���E����RA	 �����%-!$��Sq1%�|7��-H��� ��_�Q&R:6Ouj�9��O��YV��0i
~c[^N��e"!^|f,���:��o�1����5]0�M����T�b��W50���GO���R<�s�$��dY�M.�So��y��)Z��l�s������
��f��48U4��|0s<�r�r/nB���
�53��~���-~���;�	f"2��Jb;L�c������*~��i�e�B��)+e�E��*�;����T���n}U���U)��Y�Y���o�)�?�p���=�9p�?�����z��b;#y��9�Z�x��X���
����!*��� �X��c��xA
l�R&��@;�K-h'����HoOHSl��x�b������	p]����J�7��y3"T6��*-�t����G1��9��&�HE�X��_�����OF�U�,����-��U��������q��3R`y�m�x���������#�{$�
 �~Yg�Jd�k��;�uI��mA������[��;�V�3�g<g���r���������o����s�����d������}���-������7��e��
@�{�
/�:�������s����Wi@m��@n�f\�F�"?V��n*�)0F��d����l�0rF�s�f)[,w�^�qZ��ff�6���(t$j�TiQ�W��a�l"�Z_�c_���a���q��W��u��������8��F#�m�DB��������"*��}���=��I��7���!%��1O�B
F%%P�E��wkp�jE���e���^5�}F0��{���8��3�OY��f�R�q�m���Z��iQE�;l%���H��*������]�wC�yM�c�EV�� l����hF��<V��hvk��#[Q 16�Akgo�����s;��>����B�,����1Fzn;����#X�
���J�����s<��Y�r"2b����_����)
4����hC>8�"D'���i��[��Il������m!o<{j"%���<ED`��������^:d#rG�y,�
9��"���HGt��JK#"����@O����*�@�W�f�������,�^��Xtu������'4�L|nA!h���Y�g!����t[6I�����_���N��b@<1�OY��>��Us=<�{A����+���������\U�U�.Sf����k��/�Z�7F1#xS��%��u�b�i&,VF�d��m��S ���n|-��hM�� ���b@���bU��b����0�&�vB��7�
�������P��
������P	6�t��#Hi��d��������������,$����E�"��'D�[<���Y�Zka����E����2����v�E�U���ho��m>rDA4m7%�6��C�Y~�x�!3T���s�zmd��������,V3����#*�M����vG��I4���'>k&4��-���Y�����y����+R�p�Za�w��L4�,��� 8��x�G
���1c�<�������N�>{!��'�F(m�S� %Z�JE��
W��0��C"�������x�y!���W�������`�����^��.���������p�tA���A���3�t����S���h@��3���2,Fyg[�������dh{)R��[V.
�V���/�����.���3pi�%vJ�����n��,+��,�/�����������=�]���yz��>��t����7{}�rA����+��5�Dl�2�H��qM�����7��I�bXP:����5���E8�_�c��k����4�G��#2�W6��m�'m���-�&�3ul [��2P�a5�'���{� �H���q��]>D#�z��e�J=2����H%����.��q<y�����wal��#7��F@>eAY��)]O
��H��q���~�~(��G�������y}=�|�l��*�0���I�p#({���;A�������&��`�,~SUC��(�R�'�<�'t��qS
Qq��t���;VEfb�pv$A�@�C�Xm�����K ��Q�����f]T��
���p��>�{���	�|3��^���p�����f�xq�&�����}"�4�Z%$�C�`�{�_�D���=����g���a���B�{u
lG�],��m
�{y��>�e"x����+�<�
y�/Iq$U����va���$�����B��.�����0�u���q~i�U������ 4���[$"j��A?xW�=�4z�1!'M]41[���5�!�Ha���������_��D�%��<�l�1�Fr�qd����d����a��	^����2|�[�i��DS�A�,��p%��n���������I �����f��@������Ey�L��+������r����o.�~9B������A��4�_�����.D�6�d�?%#s4��)xX���<q���b���O�pJ�8��b�=Hhf?q���wV�L<���:�e/������=-u��es��;N��@0���� =u�"Qq�~�W�vhA	��*�1���9UB`Z�(�Gl^����w!�������������4���������YK6�P
��k�vS�D��k�u='��P�yj	���^ b������V�0�$��q�R�;8�W}>�������������fkS��p��c��DP�����n�}6_.(���������9��^�b���X�]����8�R=��F�>X��/H���d� l~���IpdX�����O�4��X��ZT "s������j���%$@�$+WU�N��jW�=�FZ�Lc����y����gX�K(4���H2�
��2h=:k�E'_-x/�S����S��h��lS��g&PU��/u�����>E�8y�_���k8!�B�,[����l3�~��H�
:N���;��5e�,����^�������[r �d4���-���Q9E#)����h���]�,:I�`�<{x���y�����R��D���t&C��=,���Z���+	Q,���������Ra��M-g�����=E8H��0��G��|���wE��SD��j��JQZ~�%@��	�~�6D�a�p�.��*�;����B�vph���R�����r����g�dd�k"�,P�G�B�Q�3� ��2/-��~3������~h�]��LB[�lknM6<���H�C���x;�c�DLo������w�hZ�p��[;g!;O?/+s
������bBd�Ba�YD��LH[b]�����Au��\�w"�s��%���r��3sA�
��S]k6���w$�8� ������>f"
���~��K�M� ��������	q�Hd��h�.'�������<��~P�`Q.��*��2#�-
�����d�.g���b�smv&�������baT�l�[��g�h���U��
H�H�@���6�lPRS����#�pG��n���J\]�v�P����7���dT��}l��E`����Q+�!��IyEW}��}%�HeO��?�w�����������L�y�z����!��F-�j�.@����:�:�ip�����x)~8�5��&�.W6��~��G_~3n�
�G����� ?�/��~\����T���~P}0�9����63���Xa����,1������j�/�#���@�h���Z;�\��G����)���GU�4w������7�����R)�t0�����7Wu��J��=���B�M�����D�q��������9zpo���Qq&��B�����x��%�X=p`FxG�o	��?d�b�t��#���v?�Xwx��e�k���T��v�����B;i'R2�I�w��k�r�4'+�Q���'g��^��-�M7��6�L�i�����?!(��**�,8���]Q�|;>]J���Ee�4��z�<�>��5�r��4�v��Y�A]�B����gA��9`����P,�m������Lh�i�+������[c�&�mz����L����Q�\�,(�{~wM�Y�?�F_�����g&z�$c��~��mL��:[�p��]�����HF�w�-N�zy	��J,�����|�u�$�����qTX�TS�bu�N�����z�������O�CKlfV�]B�YL�z����'�=���-�u_��3:X�
2o���D�R����{�S>i*�B�E�����IUY���V���K��g��fE���Y���=�D�H�Y����m�����fD�?������������?����/�n?���9��q ���]�t������w������~n������w���gKq��r;_��S�/.'��"g��������\Vv]�lu��@k����!��+7�s4^��b����>N��)1�
&$��7
Y2\2Z��-T3���GA+\�������]N�8���������9u�VGi���
�y��Hd�����/G������y8x$���fT4��)���ae��?eA&����'��:SNh9���
A���o��L&/�u���8�ef����}�DT~�S�M�<��"�?5�l$C>���8���*
-g2���[6���3!T���<ln�)�Y�f$���K���T������;���C��D��!�q�l�dG}2dY"���5�_�)8@ND��r���s�F+i�R�b,�-2�Mz�L���K����i�&�E3��8��.�d�S�I���%��
 �vrC4�`��~,��]i��U$�|�hFZQ~(���F���u��7�[D+�e�������n�@��#io���tF�=5�}0�=X�[^��]��]��|TT+hF[z��A0����L�*G:!���&�Y�����]�z��al��o*��<�������X5:@�1�dz����nfT�[��P�����3:�����?�b}"G���{�������v+�����NH������ZC��q��v|1`��k�tC�MoS�t�)�P�_Z���|���j?/���`Ngd�����$�;���T���<���U���
�1�H#Z�	
@�f��Wn�iFHV��{z��hX'T$�fk��R��uB�a�y*T0�<�V�������[�eM�8�;~
���� �n�QG���$�zt����vT\������9(�S	�l�}��`^gT$����z�P����h���v���D��mY�t���[��1���G@u"��[��7���������~����	�^g�No�{��
�?�����]E��"m��
}��f��3����:��e"y�u^Y�88�?��&������fe
�'Y�LJ�Xf���|����2���� ���J	:�|�H�8!�M�S�0�����d�X����T�^�!��VN�8~�9�v��m����e"�����Z��|���>f)G{3fu��Pi��j�b�����{Z#�y��za"��v�������`D"Q���A[�T!�|5t�C/I����,��~W$_�L������OB����g�p�M(�7R/�����wE������������G6�����{���L�������O�Z��ci��=��H@�~���T4u#k1�k��9���Ad{&��N��������Dr����;�<7�]X��c0D��l$b_�
��V�:xW��,�5�U�y��+w$��MT�p�����
���i���SW|���Gg����u;!$�6U;�M��&�$�U':��X������y�,�����g�h���Y�4e��h'��d3�	��X&sq����tN�4i�N��	YR�
��8�8~���i��w�x#���.�&j"'���V���J��]C~rX��U�vU�cLH����b���t
dj��	]<B=�#���'�8!00����=�{��V�
l�&�o <N�
��P"����	`> Y�3qk��do�]�7�cN8���~"�5H���A57$2�������!���lZ��9��h���S"U���pJ^e���`a��.�wH�g�#y�Jc>�$Q�;�8C�w��m�|E��^`W�r7���$����F����a���&4�E����/���y������g�L�eO�c���he�8�I&�m�������	Ir'Z�
�:|��@�4O����qBhLw��y�O��4������A��j[����V�@Mz<�I�?!f4L���m��.i�d|!��5��8Ry����7��!MSk&��z��OO���L��4+���0�e��.y�M�����E")�����3�'��D�L����f�<�����
(�I8��=#WUH�sx���8z3�b/���IB�L	�XV2���R[;���!�#���NK��	0���e*~��.9�����,z:���H�2��V5#G$����o�E������Ml������A�4��D�y ��g�`An:q�.u���F$�$]`$�84<�-����p��i��n��
�yY8]~2d���Ae���(�!��HU!��k�J2Z�J\O�w!�j��&���3��(��]�S��6��j�E& ��7����/H����U�Yo}�L,O���;����NB�������.�����9#Yw���q�^�*�B������������/��������A��g2�{y	[v�b���3��#u�b����|�c���U��4�$k��7
U��A^h�H^����LH�	r��-����\��w!��3�W�f�� 	RM3��5	W ��/�_���u�����J;���X=�.��t������]�&���l?,�d�D6�*��������:���3&h�p���^J^�D�r�*��c
j#G4E]���m.���B4������p!n�e�ud"/Ew�(�ne��^EF���C���t��^��W������Mh�dp�D�����y�S _�A�-��q4v���H��=���aeu&���5G��!Q�DDV����S�3�\BP��}��^�����������$��Ld���5S4LL��#����O�!��]�t���D+�>����wa�N��Z�eX�x*���"&u��m�����%4��B���/�������������p�j��bllH�u�Nf��&�>�]n��g���"�����y4[�#���Tu\���[_���@]�������c����MT"sS��g=�S�B����������d�57C�8��?�����v��P���(y<�eyc��/n�=�:(�@4<�����l0�E�dh����L���q�P�,�����0D[��e�U&e���b/1����j���2����Ug��0���Twp��e���@�v8ia�8#��"�C�O�����_������omF���Pe����B��8Q��}������)lI����������4x%F����gi���"��n�|%�my�I�5����
H��������b}�Wi��qh 4��Q��M�qT�L�l����3D�,���B�������l��&�����7�$q�����I���G��1����\������2����<.�G��6���\��\@�X@�C�C�O�M �#k\, r,���sL�3����4o(p^S���D����>�rKB$�u(9hS�����T��-	9���\��M
98rSC��5��kt����!��?�GPo=�����|��w������1�}���1�=������~}�_��#P9��O.Q��D~�c�{�% ���K@�%���J��Y��,��1�������
r�>Y�!�^wO=��{~�&rT�'�'����mG�����h���b�{��>k|��J����1Km��c�(�o.�����6h�Q"���6l��
y�%l������#����y�%l��cE(acG,B�sn~=X�F�<\��Rb�m��G0�� y�%�Zb�Jls�;���!y�%����[�G�<l���oUM�1i�������������������������tj���i��ri���h��rh���g��rg���f��?:3��?�2��?�2��?y2��?92��?�1����Q�o��?������G+��{K��O~Kpc��q�n��=����������=�����nKtc�D}r���%�C��%���/����x��(.�������bG4�|�b�OF��I�e�����x��9�
 is�<�V��5���,�����wA%�8@�)=�Z�]�����,Q� $;���3����F�4!��_����C�d����(_��E.1fu��I���.2�|h�����Y���2,Pj����
�D���EG���~��������J;��p���if$��!BE��%����P���e���!G����2����xn�L\~�$���������X�u����_%%���*2������	
 ���M������S�5���I�"�K5�%(����w��6v�	�&h?9�-���I�/��
4dl)$*��&�!/����(��g�+�`eo�@���fXM���-����8s����ST�L�� �J���}&���P����?\�n���MY�u�1���l���qT��j��2��?;�5��)32�� ���~�t�PB��2�
"[���D�Q��� ��A��wf��z�!��|@����S�2��H�h�&k��g%��O�����t��S���"���mH�\��v/}D���Lp�-�_l5���+_�6��H�<z���	Q��a��1�'�[���]�t��d�
9��>��& V�d��,�xg��(�
U,��6z;�~�d��!3����&�F����z��G>�^8GH�`4�,�C����B�n�p8�1N�(�����O
?s���%��ee	�mD#4���4!e��qWO,$����~W4��v
D���d����[o���GcBY�'0&�>�kNH��$m '���(�f�X~{`����!����'q��?)Wz��/����6��qz��qInA^7|Fu+N�
z!��0PyJ���(��3�a�����������7�/k�L�<*.��aSY�e� �<�l���ECv�=��$��!�>�����.�f5�{��NT��B���&��J�&[�#4#:��H��#8������<}��tx�\��aA����h��;%g"�yc���#y��	p��3���������.�F�a��s��+
���x�9��{oY��V9�����;�'xW$�������!��y��������� bm�pr��c�+�_C
<m�� bg-?6^%��<�q=�$��]�����N�=����3���M��{V�G��A*����8�Hr�����P���P���/@Tvn�L��'��]��_{�1�HZ�f��$���@d�>��\YZ�LR���@6@�N��ec'HC���gV�_�z��`1ppPfi��;�^b��w/�>H�3Z�e���T.�2�����������G�.�U��#����1%!��}�B[X������HX;>��6<��� �3fP�|����0�F��>����f���
���t��U��]�xQ[���H����9��~���� ��AI�g<�8B���A��7��gJO����J^c�_s����}=z��ON�?|F���BY!�!D��H��gl=��t��on&��R���L��\&�Y.��^\�"_�&�����h�j1�M_C��M����u?������9�����B$����U�n
�{����iO
 9`�n^���G4w3�7!S�qX��6A�[u�^�:�8���)�w�]�-#tr�4�b��Q�+���fS��t��a��D1�M1E�bc^,����qy���"wd�\<!@��%�������Mc��Q�H���L��v5��&$�C ����IC��Y�[�X���k��#BhK���9��W�����"j���Rv��"�������Pf/9|~��|���k;��g�������9F�
�KN������������@�p�H��UK��13q�r
�3'�V �H_���{8M��9K*�/�Tf��b&$s����o�1��D�~�=m�6g������jlSZ���$���B��`�
$��g2��wER�����<�������*�>���m"aJ}a�d�l��(��i����mM���@����#v_��o#_�
�O��8]���2�b|�?�gV"����hS�-�T������v-D�G��q/A %��j�E���6��	���y�q
��� �������x'��i���z��9Em��mdz�(��n�Q�����{�=�$YP�YJ�r�����oOW�� ���N�	PW�T*�@���%![���8��z����V�$���1*�������-y���2%����C�lo=	~FEv��8�g���PD�,^�X	`$���|p]�d����,a��D�qT���XJ�qn���r�*���qat�0�r�FzCk7�����@O��u�N�������wE���9H���U�����+y�,��yv]G�PQ��x���\�B�<�u&.?���$6����4���6���O,��3i�^����bcd2d>�!�6�p{Ld����%��G�H��*��Ei�=��F'd���M���n?�Dj�P��9�6���b��H�]ggmI���f��(B$<#`3��3,��oK���Zf4d�����]��S� Q%l�qP�(`gSr�0���r������,��������w�?��%����/��_�~���FE9�0��9P�.y��e/3j�������X;�
��x$����/��#$7�]��!g$2vO���-(L��J��5
,�Jf�&`"L��n�n��I��}F%���O��`��s�d�&2���.is[�����J���*���}�$I3r�]�:���4iP�m�g���Od4�
��S�
���Hd>0����[��
+�f���{*��/H^qw���Y�	EY���7��e�@��+�M�T}���/��P7���Dj���	0OL�(��3*xAG�G�_,��������%��f]c��U�g���O(�+����b�g5�X�����`�>>����I�iW�Q��,�S^��w���a������1���]�0��mk�E���M�;��\PI=��^r�Jg�y,�u��yp�����"�c���B���������|H�/3�$k5\��D�� �^1�&������G;t�z4�9��.�o�:��p% �ee	<W�m��J������hx]]P���6��>3���U��P�>bFx�C���-��oh�	���w����q�/(�[Y�+�j���t���u��������6�	Q����FaY�!�%	y#���r��
1��|8R@
�]��������x���N�+������729��w!I��mn��������m�����d	�F���74��}���"�Oe!��;���
��;����kN@D/_�}G��j]B	�g�1R�CE+&^H����{k��c6oB��p��f�J=�E$���f�;@���I����4tslS'xW�na����N�5�7�� �O���t�/��W<�m&x�dk��9��0��g-*�N��@VW`�+�]�OZ��(m
���'����a�x�|#���#�	pe��<qc1<�#q�A?��g���o�z~C���������p�Z5:�?
��wE}l�PM�����E���g4��E�h��������9:��8��UT��B7�C5���`&���e|�N�\�cp#�
D��t������Z��eg�5'���3NgSB#^�G�
p��	G�O2�!��ji�>DU�tw��Q
�?��j���t�U9?�sj�m�2�6�|%���,���}m�2��"iS���9���D���&����b�����'��8[�QIDf+�����D�r�\�{���������rz�&��6����r��-��w�y�e�G�f4�;Y���i������x1�w3��x"Ow5g�.����S��]�81��������k����f�x��6F/#��#���t�� ��� �B���@n:��m24����KL$�A�|���r�USp��^
�HN(��
 ����{�K��VX�	
p��

F{��(�~%1u�wE�W5F������t�N$4�M��=���(����=-�7�Q3~��1���BoF�{��Y���<G�mn������������u�wC���
��>V��)3$��k�dMTO�s���D}��������e����\����`�X���\��������u;7�a���>d�6S���X���	��rj�B�@�h�3�.��+��-�:|�W����3�����a�j��E�2����������W.Lj���������=�P+~�����,E���N���
ftomt#ESOtF|�[���EmG����z��o�2!��&��;3��D�_�\pIVpx����m����� |������KL>n�s��?^�����GuF�����w?���QpYT��ooS���$u2��dp,#?�n���TGM&h�����+@���������N����>&XPc�2��i_k8TXY� �ox

��-r��|l$��2�Jm���R��4��?�w����l]�D}A-vm���lv��}H�p_5���Z��9�H0����jqWfH��`���y8O;5X���U�������o=�q�Lc�+���A�$��2$]*�g�>�9t6��]�V��.P�g�5
UWo���YO^3�D�������F��C�2���������18!,W'jB�-ne��=j���e�6V�:���=[B?XK�u�28�WV���4�?�����F�v��B���KL���O���]fO33�{�����	�o��o���-R�1{������'��J.���k��t'������_6f�� ������l��cR���Qif��O>�_�.�#���
�����������?�aj��������i������C�?�6�mr�������gE��C��u�m� 6v�G$D2��Z�X��9d��?�AN]M�&�����JB�v3�-��g���������|Of��G$����>�[�X+��p�����e���(9#��x]��6��	���Y<Ea�9��t��t�DN�h��"�$�_'����L��[�DC��0��O|d�&�����l�������F�0����u��S�E ��C�e�[��d`l��<.
wG�+��W�?����L��H�.D�� t���;��R�N>�.+�|<��aK�O��J�B��������j���L�y�pw��w��"�IP���Y<Ga����u��v5���<��������t���
� ��X{e'�T'N��7B��C4}
�e,�PW�
��������IXSrq���}���X��C�X�o���\��	x�.?!!��� �A�G?d���=XfeB�v��l�m��s�z��,��/�Q41��$�ky�V�(�U����������[����v�c��T���+=X�R�h���H,���n����l �������>v�H]jYE++��C7��At`�H+	���]+����|w�N�F�{��!#���>� a�8!�k�����k��jC�T	Q�E��[
�,8��2C?b�D�t�x��"�Y�4�[,/�!H������oQ=m	W����_���\v��zS�O��^����I�IN,���}	h&�sp��������ufh��]o�O�$jeBj�����^������������'T@t3|U���s�i
����>m��7�-�����N�I�?fe���C�|���g|v�^2���3��:-Z1C!����#f>���>^�Q�~���Z���{��_�� ��L����7�o����&L�Y�@!����rg�����L�x�\�v
h�(����������u3�L&O*�f��1�<�!y������d�;.�� �{l�<.l�W�qv7�L$�>��q���	p��(����T�;�Z�2�7��Jv�w!"#y�<�<!���	��:���m63c�M?�S]$�wee���w[U~"*R�=R>v*���O�#������igh��3QP����}�����&��������A���0������O�:������� ��(pY9�����L�k6[U�Y��
�ob�X|�OpeDdl�O�U�;y�0��+�[�j:v,������Y��9�<	CYq����E�������\��V V��I�H�6.<z�Bg�
lX2���<�����������,��~����"�d.^���Cp(3+@2���t�`�8>n&"z������f�	�3!]�wi������;H1$@&	��Bd[�Q��~�"�	�pB}��F;m.���0c�1���rUJ��p��M9u�0���g�g��Z��R<��d�2�U��aI��.(�����n�=����r��C�P����S+r�~aB�H+�6�/��L�`����2�pnW��:��!�UA�v{����^��������9B5��m���G��#��E���������[1�!�����m;^��Q�P���ge�$�Ae�_�Y�O���VST���0���\��*M�s��7�����[q��,�R���v�_�.@�m��������������9t)y��j��0�D]�D��w�m��a�1S������v��p_i�w!�f;�=�v�v����L���H�i���m����y�w�e:��(yW��V8]'G����-�jS�A6�������L�K�d�&Gr�^���?2��(x����pR#�[��;�j����dB��g;�2y8�9�i-*6AV�u�f������Lj�������x"�)��z�SE��<�`1��Y�I�<��Q��� �R4��S��n�+�a�8�76J�~a��<�f'�e��wEU�<.�a��HYf�l�$�Lk���4�!��]]�8��)�j��Q�]B����_X�IO:���v��wy��U����	\<����Ga,v��'���< ���N��[/�x`��X�)O�������c���s��f<
m���>�np��X&l�F3��g{ 	-����6��]�������4�918*{�Y�t��Y�>]�����gX*+��M��=Gc���	a����F�qlA����&/����[��'�����'6F�+�x�k����B���[��G�J��<������I�������8�(5��L�A�~a�eBH3�n�yY���[�89����~
&C���"9y��!gqB�u�=]�3+���$��������z��[��F
�S?o�.N������6�>� �[WU��V�S����7�O0�D�k��e�4���0�6S�h=�4�W=��ZC�3�@�������W�vf��7��B�q� �y;�]^���\:����wE�����������-��wE��C���:�:
QG!�����X<�w����a����49�I�����0Y��G���aF��:��LW������	�cE� 9g��0�u�y��@���i.}`Ks�%�0q�K����@�yj�w�=���N�S�2�Z�o�%A'RJ%�����n|���Hl���+hq"�nH]=Q����~aEz/	$��v����]Q���)@��H��B�4I���N�/l�K��m�����-32eb�W }�*+01!��@)K�?u���U{���-"8G�5�@��=	'����Iw}WHGL�T����O�'+\$�����DDF��x��!�]����#�a������)�h�&dD�%<tbl���~a�TL�|�����yd#����Ul1:��5���#D��m&�j�
8N��T���Xj����T]�|�R�9t��`�D���ER��9�N�}��V��;���<���lR�6z����f&&���"��������};;���������|)j����l������|���m�7?ZtCMq���H��;��f���P���G�Ac1�r������8EY!��I��=��x���MG��y<}�q����	�@���G1T�a���������I�y��Z7�3�������y� H������[��
���L�9�C��r�|�H[�]>9��]>�w`�/��h�* |af��D�<�H�2_l�h�'�:?��^��0�<A��N��U0���1@US}�5�D-Q�|�Q[�A�"��	������(�kw���6��y'$��RO�
�u�#0�z}��f&�q�1�|�0OH��_�|���Y���0�L�����<$�,,f-��YvF�<1�����:9
�yfh5��k�d��Ec1�<Er����F������p�|q�u���*��5���>���A��h�����[���V�Y��Vy�qxu|���WGw���lH�������#��H�;/��l7d��� ��t#���RnV��o�?�Ox8%�D�(N�F���'�8v��%�X���'������?'��F����tX&t��'M�dN��;(��T��C�~a6T�T�+��,�u7��~zdcb�0��M���<	��9��/'|Q�
s�x��v�B�+�Y��������,|�m�c��Q��9%�8��8k"�-{�,�O'�����md�������>��:�+��y`"����{�"'�Tc� �i���H��K���9a7�8�A�|a�\�|o��t�?>	���Q����g��GvOZ���f&�3�l���n������n�{���c���4n��q'bd%!
M��w�*{f:�c��{�s���3�����O��=�f���w�?>����4\e���$i������OH�R���s����;�D6��3����q�1F�Q��/
��~�58�k[�W��%���1z���o�����u����,�����*�\��`f����x#��8���	zO���A+�e�����#�o�p��i�^��R�F�?}i��~�����q>TJG���vu@n:��zDz������i&�~�73��2w�R��|��(��M��x�q&0.�\\*T�~a�=�}�rs{[����i0�d<
�;�v�bl�H���&Ep�+���Jl����>��O(�����XS���RO��/��0�n��X��$���wA��S{���nk���Y�XE�F+�5{�(���]>|����,��K�g��c�������-�_�����z�X1.N�:H2l�9�;���Y��8����_>�_�]��$x
�b	�hg�w9L
s��m[�~K�~a����>B�	T�.�_���)��+�DJ<�_^��a�AL�Z�<dX����O#O���;�"Lc��&u�TXF�U���U8/��81�*����~a!������"����ug����p �zU~W��}g�qma�fD%��M��5�@CD��f�������V<�@�.��p��2
%�����VJ+��O�5�D��
cA���4�0��%6��
�9���%�����_0-�=������nO���<�=)��09�L.%>a��'�v��f�7"�YbP�;6~F�N(|���Y/��=���)2��	�vOV��<!����H���<0S�F#�<C��%��I�b�0�1 ��E�����~O:�;��E�u��:�E�g����qEn�mZ��q7�Y��b�XX������$W[��S�H��/ea�N��q�
Y1Z��?�o�nr�Q�5�K���>��)���Z��]�t�~aU���|S�X� I��G,�����A��:H\������0�
9��s�E{�Z�u�@�V@������@O�ku������:��~�HW���F����2�M���t`o�����lY8�ju��u�E9y�+��U[��$�T�Tk7�G��F�uIn�0-���:����&ot��$�q������dqb���A<���FGH%g�=tyO�L��	Q���s��%���+��H7�1G����v����u�9�����_��@��&a�d2N�d���"��}��S	��PB�X��7��S���%D�|�G:r��O~�;D�n����c����w>������G���	��|��\�;�j���3�]E�;���)V?����U�KS�sS��\GK�A���s��h�:����������K�YS����4��n�q�?����k���7����+�����������)(�>>�}n�e����/�I�g�������������7������W��sv�.�Z�����/������W�E�[�/P����������7��X����#r��NMV�	j����ux��	�"��e���/�~Kd�V���:�e]N���X�y$�~7%UC��
��E��'�����E2d��0�p��`��w�=�tVJ��'_���v�Pg���P3�
S�97��A�M���6f�����D?�oG���[���F���T�'4nt��\�S�|W6��5gz�����L�G��H�u�[������qg��)�8�Q.(y&C��O\��],�����8�!�^�&yr$��;������,��@�{�G:h��%��F37r �a'E]�3�b!�v���\U�)��|Z�?�7i���tB�D�o@<�2�$KN�qW�u�W2���~�x���o�g'�d1��R��	�=�G��lP�2�L�����Z��,v��UY(�.��'�I�I?5��|�6�b���g��d�}O@O�o'�a���O�5X�#T�L�I�%�3�M�}��0D�Z����T���w�qD\��HB\X�M��%�?�uT�M/�����n���u���'F�bA�<:���f��5���b���H^�H'9^���C�[X�,?�{��c;K�����C�h���L�qB�;� ?h�1k� �p	sA]�^�r �� b,����fi�]q�AL�O$\��4��_��Nl���/�Lf�L3 Q5�h?�����>��^�����3��\�
u���Q$"���!�J��lW<��C�����w�3B�������OM����k�{I�,Q�Z���B���od���`����`�N��g�/=���l���9��P]<dQ>�!sl4�����aB��x������w���DF����o��"*��y���i���H���<�yq|�'O�B��$��B�r<��q�� �L��6�v���P�@hk�
�<c��r\�\We\�BWb#��b���()pv]�;�-_�L �8�Dny�����l�$RQ^D����fw�J*tLm:)���d42-�)�(�=pp��3	o�B����wg���0u��"��kF�0�5l���aF�8�2Y�\�����P����,�����]b3*����=�n�u��e?������7�d�~����[�����G���)��&2d|/	��n
�/�Djr�q�G�aUX��D�z�q�O�f4!42)�s���z����OE>�	C@w
�]�czp���2�<�7�nz���6I�]��a�dA���X�]���@N��[tE���_��������� �y�3��-�7��s,�z��M�e��>��cp����:��{�9"~���yz`M����*�� 7������7<�9�tY��}���(�|�(8b��rB��
`A��__^��\��DmQ�"6�RD�&�L�b���	���&0D��Y��}f3p���@���,'.u�7I��0�����j��kX���2�(�@7I��_����ZT0[1M����9��8p����7)�[F�1bF�������Cg	�����^�Gp[X�,L�\���CY/
D���gy�^z�����3�H�mW��ypG�HB��4��EA�I'T�&�B[|^���ss�5�h�SO�9Ea���`�z�(kj8_= *��&�����C�3�	@D
%a������DD~���w��v�<����k�sS�'�Hh-��A����FI���bh���bE�b$��c������9��3�"w9���!|��Md����3�K|c[J�Qc-����X8(���	84�6���Z�DD�Z�*^,o����3$x-��P"S�x"AV��������f�:�Y������MNT�A����tw�J��	�G�������`�'4�/�4s8��[X2�`�zj*�U�p;����<4I2K6��wE0a'�B3r�&M�3�dwE-�<�����HlU����m�f*�=�M��L���ufi
���skw��.��kk�	���zW4����6H��/����x�����H����s�f���Z�L�|d+f�����:�����>�/���u�o��k�_<����?�����P�;�����Q{S����'":h��1�
���ln����NK��c$�	����d������2`k���':^g4*���Mo�
9Ml@jc3�^ia�y<����0�����q��m���������s������[��+��T�����d��udfvFR�-����mv&Cu�S��!s���!��
;����#�� ��zm��m��w��U5u�������D�)�aZ���V[L�N[��"�\LVS&p�)�5�.IZ�3���]H�%4
���l�XH��{�K����<Li9�"���Y_@���9�,�a��6����r���}3A�hQ�e���ne����Ym3��Z-�l�Pu�J�Gd�H���y4�Q�2�o�fA�[�/3�m/�����d���G����t_
;�uF�h,U���h�_W����	��vf�9m����x[��F��j�e���)���mUN"���~?����'A�v����h�&4��y�n�FrU�H +�-.k�c1����C��G1+����������L'����%�+}&��
R��j5n+��(_�%
�&MD:�a��p�>�w!C��4��`��� �Q,2\M�5���(�t�
�5V�27.�![Pjt
y4hf����h���A�i�vq��8U7��7�W��M�L�Sq<��j�=��@�Yo��
7������L����sAb�5�&2�Sx���5qm���f9������9���CT$@c;���CGX���a��y	f"�uP�X����	�0��&�)���n���?3�v���H�U��3�.���/�8K�D���Lx&A�����d�@Fr�b�KR����Sk��&��k��=+B��U�"&4�a��o:x��z�
���'���
������_��D��d�����-�M�	bG+�����M"�P���st�z��O�(qd���>N`��`���_4�t�������{>`T�M��]��h��(��Z@QC1�UX�Q����M-v#}����c��)���z7���>�
`{�*�t���D��exG�	T��B���w_��"��x|Yt<��+��}�������D����}��������h���c���}�-WZ�M��?��snJ&q��]��-��4� =����]H�2�~�>~T�_��t�����H���p�K�����$�TV6=���6��ng��9#��G{���>4��6�t.t�DDdp	�o�E�CwhLd���E�#�qs�����e�7_���;#T����b�&��Y��nFh?u�Y���E�t9]��������x�EEx���������L�E���7��A�H����!O^��S����)6��M��D�����W�Qb���s�[<�r�f4@�����\���X�mg�)��q��}���	�r�adGCp��8U4��vP#�;Z�8I�����\�N���v?���b��p���8�D��T���
���h����D�p��yb���2UY�+���2������]�������	�M��wQ���l!���kX���SA�/vTY.�����\s`33f+vt�Ab�	)�s�1&
��5�p
�I4�<�3�R�!�3c�n]�(U"<+��Q-�L����|mG�D`���'8�x �@��&�4Y����>���.�EXXK���U�D�Q�����3�N)FKd�l9Ru\T�)8�7�C&G�X$����w�?�����|�<@�f��`�!�6�,0
b��/tBt�����y�y�}dx� �u�16�Tu6�L��?	��.���B�L���:�G�U3������u������I�K�n�y�����Zs�����P62�����X&�G����	��wj��b����'�i0W�%��p���;5�]��ti!q�WQq�
�!D8��N�fx�OU�>$&�����K�������X�ZJf���#��.�T-�����?nE���~�Mp������1�V����1�N(DQ`i�c�)Ti�rjH�Kt�0�0������ZcY7�jF^I�!jH��z���h��'���������t ��U3C/LH�y�G��j���0!��]���D������/��q�U�p�&�j���K�S]s�/��jv,���t�_�����B���uc[���n��R��|��l��[xy$���b��@L�_������pK������@H�F���v�o�~2�����
��w���:���8�����WQ���gY
�o4�$�"@r���J�U>��v��G�!j�#��5�����kFgty�Z)n���������uKHZ@*+{E�x<@�&@�\�G�Y��#��oK��y���BO�j�c���mT\Wn�vH�����s�AW7�� 	hO(�a�x��� w�f!�I�v���7v�3
�>6�n����+����~���e$=�s��$�������I2��<�^����.jv�2��K��K�k��V��o�� �eA�,8`��X�	�;����7$�^�)����n<8K?��L�<"�����U�_�|^�#�6L����#g���O����|����F�����,:���Q�	��V��&������q�����8���.������3���	�����sM�.���#L1G�L��d�	��Hw.��"��������jL�,}��������!C�E����b,��pd]f��	DQ�O��2�\��g����C���V�/�J.�\�`���"��x||���
J���*��c�����m�z�	��Z�H�����4�H�i��_����Cmw�F����W����m(31s?D:I�����9��%����Ra$�T�}t�CMT����L0Z4Uf�E�~���(����jn�Y����v���#�t\q�t&���]5(u/v���<���O����f|����ll��x���/�U��gA���n��P�x����1�-���jOB���&����n�[P�,S<�v�Xsc������	t;#(��1��8W���+z4K��}u\X�4;�m�������[�;v�����Yp"@����~��'�Q�F�
���	p���G.n�<�B!��H�������i�����7��3S��y��w����0�k�!���L ��aX��	��}���Si�.�	���A�=���n��3C�V^�:6�6Q�
{U�f\�Y�N�y��!a��oYP�ozJw���p�r�9�ep��wu��	��
?D��[��],&h�X���=������[��	����'��.�4�@��@�����}���)F~C���nk{����@��O������UN:����Gw�������2w���FAT���IG�����K��3����B����������B�{u
lG�]�9[������79�sa~P&������W0~��� ����p�d�U$U����va���$�������.�����0���_P����K;�:0�E��fj��!lX��(e���g��Ue'I�*eBN�.�hb�0��k\C01t��tU�����-$���/�����[b��	_��dz��<�e+��/�T�P���?�4�M"���)� W�os��`�_b�n���S��^=	�1��yrQc"OU�����<l�M��H\	�����{��TF�r��:��6.�
O����x��B�=`SL��qpE���2�8ky����@��y#�|j������4���8�MF�;�[&��P���Qq�����$�f@���#��M��'�M ��]C�������8K?����jvhB	��/�1���9UB`Z+�s�!x������7�z��BR�"����O�~D"���g-��B)����M�a���Q���TbB	X���%�z�q�f�����9.>����q\��wpb�|;�[�v��q���lW����9����
>A�.^��3�7���k
���h���@19�]��#YL��=��k;�ta3�w�C]�J���>X��������A�������AT/���[��B�t��m-*�9�J\G�]5�V��F����_�zP����G#-r�1������Q�`G�3��%�D$2�X6(���s��Ba�W���i,l������G������x@�r����[�\Hq4l ���}���N���15d���@��D67�X��qW��,��-D]/�D�[EV��-�0�o|6�Qm��������h���]�,:I�����^�=�D��<_E
U��k�X�?*��C?z���a�a���*��(���\}�_o�pq��S��4�-4~V�������8���G��|���wE��SD��jfng��Di�K3��
�*������?N��%�W��N(.'��l���6�O��
L��r����g���������.��PpT]��$�G����*��~3�n���`��
��M�����,����y�'	5�@��p�+�N��4QTvUOi�Y{�������U�Y������\Cw|����.fDP@$J+��E�ag$�-����cg��/93���j;N������/��\��H�Nu��L�;��`���|���/~���(B�e�/�5���b�#���'�m"��Z����f�no��lB�4��F��IM�<�+�D�����4�OClj;�)�l��'�$l���L�S�F����j�X��/������|&�&@a/[[������T���i#�w�%5���%�A�;�_6���X��k�N
��Q��z���
��O@[nb�+��e���d�8S^��C}t�a"R���(?2F���iGRU�`�Twm����'���f5V k��r�4�����r�T��@MQ�9nb��re����|��7��������N �	������������Ie?;��s���L}lf��E�� �VmL&b(O��3O��_�G ��f�~�1�>B�Z�G?��q���[mO���GU�4w���m�~#% ��J%���� ��R	��� +R�7
���w����0���#1:G��m�5�T�I�~��-���o7I��Q�8�#��#���B�2����~5k,����j�����!*�R!���}+w�z�*w�fR2�I�w
�(4CAhNV�����'g��^d�[|�n��m���O<-k	>�BP�9�UT�u�r���(X���'�����2h�Q=~����Xq�����	�+5�����Z/g�?
�;�����`Yo�Fh|o�G&BN��\�����yBa����4�vh��_�.�gb�V��2��eAI���kzv�:�q�0��6L�??3A��'�X��C0��1���l�"�-�wE�J�O�k#���I�8�ea$�X*��V������)�,k0
���������tL��Cl��[V�N���|�{���JB�Khk��Z�����O�?z��K[�����~$ft�zd��������kW�����ty$����";P$ITe
�k[����-i�k�oO�<��5a����{L���,_3�,	��9a��������������+��?�|�����������|y-i�G�������(q�'���J�[.qnS�����T�l�����%�)ke�6h�?+2pv|s+Iy�h}vnW.+��7N��<���*��,�D0<�!?8Af"C���c1r���9�����D�������;����T3���#F�S�N�
�����sr�KZv��6���DVDl|�&���FjfY�Nd���\����i�Q9+K(p���E����EOpM����3��LT��=�%s�Xf"y�O<�N���6���H��u>�*�6Z�2�Gv fT�k�QA"������N~&/��#Mf4��
A����zy����O�q8����+����E��0������z�f*NB��B0��xk%��1yK�%9���g4�Q��H�s�+s�K;��3#Q)���9����.f���3��"#����#��.{s�5���fKO|bm���Kzb��"Cv��Nh��	���Dk:���F����g}# %XSD�)�)Ds:!I`�����5��e����i7_�,���RM)�hJ'�O|F��g��t"���23�c�����|�`LM-�'QKp���G��Hq`�t(����tF������p�dMczb{0���j����c!6�����-�d���1C������l�+@Fw7���]�gM(�4�7��[�L�jW-��"��,���`��I�A�J���yb2�
�tB�T���5��5��L�,�XS�F/��bS��Rn�s[:����*nK]uaL'�Fv�Y��9}���tB��r�C�Ng6�0n.�8M���4�dr��ND�9�,�f:�iF?��,���
�E�Q�������M�Q����zw+�*r��	��fv�tnV)HO}�|���
}g0^��Q����]��M�*5�������9(�U,�845wjV�'5Z�D�_��hV;.��	I&��F��A��zSVj����j	f���a����\������h�1;�]-�C��E����eV��z!M�Y��y�:�!���k���f2��M��Y�����;=��e0�]�k3����y=�==m�uB���-j�W��a�����,�iVa��B����B>�L������1x�;��X�!�s�C=5������'������<��{?-��3�}7h�B�,.�������&��5�������_XxUd����S�lm4�.��%��_u�}��"b"Cn�����H���[JWlz���}d4I���iu��G�%��]PA��'���c��K3���M��pB�Dc��HEeI��Te"���@P5s$%���6B?�[P��.$�o����(2G����;�<����(��������TO��Z�nL���>I���&�c�I����N{wi��H���b�O�%��]��aG?���w��P3���3��9���%�@}��SU����Mo�IfyK�3{��[8|uKO����+Ln�w��@����]L�`����7�1��D�|h{u�������^>���;
� �E&�=p#�d�kO��O���������=�-f*��_wp����E����u�D��-�H���e�L�a��T��[��{�b��]\�e��[�__����a�Y�����G#@B��'���L���d������� M_��3����v�.�oz�����t=��oI����.V�m��T��o����.H�7�+����X�$���w�5�zFHq{�|��j�'�y�<��+����C,�[��c�R����W��]c����
p���T�����WK�K��`�z6�:�H^f$yz��$E�P���AS�F�T����V��s'4T�7�{��n0Tdj��/}k$.�qjr��I��L$9{>��U[1�������%�#����rK��S/����� 'pJ2��D.��H���e��,��0I/yY�j�D"�kB�H��z.���nI�|iZ��HZ��$@~h8Y=���/�����?2e���=�zAp1K���s03��	
leQ���In�;7����M��F2dl��1�1��}�d����>��]��R{�����X��1��^�Rw��R�]-�} �����+����������0��o���*���<����s�0���C���,!�Q�<�h������!�����y�
�j���������^�uq��)�@���5t^5>�/���J��j(�������!Y4&"I��+a��\{�f��6X�`dcf�I&�#�~I,�������v��(��5mr�Gj��}������������o�Qb�BM�k���D������w��d���~��T�/y�#!!1h&�����
D3��g9�?n����S�e��Ng8_��;��Q�z�����^�������p ��	{D]�(����o	I��������X(�r�R�m��&��_�b��4�������U5���P�����F��,U�
2e�Ld�#���
����w)J��*�fn��I���q�j.?��+?7��e#(�Jv����3���FC
�tiDHw�C��U�B��;1��I|�,I�)�a��"��feY�Q4��q�A�p�$�os
{�j�����F����,aE�i�LF��Yd��������Q>9�R���[����=��K���LP�,
r\�m��7������-����+����
��(�$]^Z���' o��o�/[��:A[���{��/4��Z�������f
���<9������;L�q��dm�;�������C���O-z;���&M3������3>���ET&��z����x/bZ��_�6�6���d��_7M���X��6��x!���vi���=�wxDf�X>o��~w�G�ZK7b����U;`�mFT�+}�[��O����� I�v��,��<��6��z!:?p3��(�\���dR�I��w�V,D�Z�]��M������Ln*����RVo��I2�i��B�C4e_�y"[����J�GD���L�oLky��K��@T�����0�/�:�-7����%��*3�m~l��U^L�-J`��eO�e9
h�Ref����+'4nD����8���<���H
�����9�]R��yUh�O9u��o�Y�$�V����E�c����3�,����U���)��|[�(���,�iFE����tF��&�(#A��q��f}��Q#���-�@g%�F�H��HK��0!��fh0�� ��	9�u�����r�2�Ix"�a�q��y��\|�S��n��
���eK��~��[|#=��u�ro�fF��jr<��`���]c�B��XY�
v_����V��k�����D�_�sf���zYeU��h����q)=���u9�)|����]$&$E�vGO2���}�}��6�671���LC��&1����'����^J-�^�!�hF�fA7S{Rbx�r����3C�n�b!{��ZQ����\��yG9��y#������b��
���#%�Ib�U��&t�5.�\G^6-�����o&d�� [�d�gaB,��Ll���u�c�7�i���q�VR!t<��������6������(����~/L:�? �>[['�X(k�U����jb[�y�������
P� ��@4���2��~y�.l��$�f�-�u;�����q�V���ZH0
�iH+�f���y2�R��o9����*�������!��;�kq���y�c���w�^��wX��<cG�G[/X+�&W2q5�AnXF�����w��tw�b:���S(�M���$
�*�#�FLX�}��\"�%>`���;����m)�	��}�����t�%io�JD���F����v�����X2����2�9u��]h������t�������
P��8@��	�z|9�YA����fw1Cl gg�n��������w�R�=��r�1����{4^H�Zf �dGi`��"%"sm�P�rs}U7�%��
��Y�x�C�5������K�Yu[���Y������X�{�Sj����[
���m��uPv�����%r��l�:/�'��E�=���}5��*[n���|	�m	�����2Vw���[��,����4����tS����N�����K����v�MQ�WY�d!G3Lh^~����wY~���u��m_�{a�>`h�l���Gk�{l3�	���@�.jp-��l���,������?+����`�� �3�_W��/�����s��O�~��	������t���r���r�^�r���mK��-^�s	�_�.Kvj�,b�<���"��{O���/��.��/�=]�{�����\��tyK�V�;��p������y��"��G�5����/����*b��S�^v(����Z\mZ������D�]���_�������>�u�u9�����-]1^���k�[._[���&��z/�{�����k��m-;�t]�x]Z�_1\���}-���k��_�}OK�����=6��L����5�>rK>��\�t�&�m��@�[��^��cy��R�B���R�U�[���j]�Z�*�u�������.��-_o�u3�����Y��E�L��b�n��p1^7c����?\����.��f��������v��[��`���+_���f���#��[�d����^�~��'K��{j��~c���c�E���1���X�.;c���_�E��{1����X�-;c���[�E��k1M���X�,;c���W�E��[1
�^�X�+;c���S�E��K1���X�*��P��c'��^���
��<��P���A����88v=���P��\��������|���]���L����m-� �Ca��
�(��}-���k��\�i'�kV�C�ND������$��
���2�O�w0/�R�A�J����(���y�`�;��!�|H"�E�l&�)���<~k�>\L����C��G������ O�\�iO{A����H�j]�x�����j���W\����	��}VR&�����U�����y���u�mF!f�����h���<'�:��Q�q<���5K2#Z7}���#�2e"	)�M�s�`"�$D!6��K@T�Oi�1����*>+����R��3���Yl�8����<�'2��)�:�� ��j���]c�i��j ']�>6��
b��P��K�fE����t�!���S���D^6��NJV;���bb�c;�����4v�!�Qn�X���o��l/����+�'u|cf�.�&��f@GD����:��0t*7i�_vY�%Q��jljb�sa ����$��d~���g%R��MrZ�y�����?A�UI�[����OCdd�K���0,�m3��D��_S"�m�R[�$���er��8@F@q2��*��s�?�ag�X��I�����Y��`V���2�G�Q��q�3����ih
!��fE����t� �(mi��N��������R�=�X�A����� 2:�:Z��s��ss����#�A���y���'�~����j�3d��:�
�(3H��*�U�ZC�;��x{�;��$���t���vdY����t���,�0k��(�?��E����3��?��JrcwA��q�p�	���H�f� ���:A.K�<-L���}T~�:O��b��Ly���������������Mg%R����U���"���'�����d�Is�������0�1U���Y
3�}VEq�N�d��5�@���D�]��G�?%�s�U��@E@_Qdz�^�CV�����V���"��*�W�r�y����*��W�$�A�R� �w%.WQ*��-���EE�9w*�/����X��X?���Y����)c��J������k����e���!��R�v�5�,���R�y�~�Ev,6�8&�i�I�T�k�q���W��Z�����rH�`��!�P������@>�S�R�������������U?+�O��� z��B�������~�op�Z��(��e�x��|{ccgTe���
Y���u���r���$D�F��\����o������rYH�H��B��L��k���D�7Vk�u��C�H��];4�
I#��->�oi��%���>A��76��_?]+�+���An���
~ql��9z�7f�h�e]����h?G�X'#����'������r���,�[�{�:�x��^�K�9�W"��E������_Q���+c���q'�J:���f�G�j��t�dqM�S�2��^o�c��,&�!H��'9H�nJ���O:n�.p�=�.G��T�62�Q�YI���0���/�$b���;wr����(�"�~��r@L�</y-�xL>�i��{M�@�*�&<Y���(�D��
d�����#�x�$U��E���������,�@��)%�)E�0���g�>���&C�W�������;u������?y�S
([�����ZH1�=p��@�F�H��T�se��E��I�p���rzu�y�=%��G�;������D:s6]�%gVv�8��3r����^�w���R�:
�����
C+��DH��Nk��r�Y+g�0�����()~"�Q�in8�t��5l�\���C8�7Z�j]Z�Ep�([j���hl")�:W�^
�\;��������e`���mp��WS>1;B�rHqo�#_����|e�M������M�E�G��<U��}(Q���������:1��T��
�]��,�d����\W�`%��O�6a��d��L��^�����UW��F ��.���u"�0L��n����"���y��#��x�{3�Vb4xG;MKuK��`�N���0���qy�8��Lt|z���h<^d���tW�y�~�Gr�^&��y '��w�p9Gg	:}�����/!^������~!fp�6b1{�!�y����f�S�\r� +����|�Z���H�7�����V�5tyI�w�G}z����]�$���W�N6����`9�����n]������ ������ia3�h�y���8wFSdKry�`�Rl&�eR,&.n�]#��@Q=8��9��N#g����9�r ���(�����N���)�>�2��\5p�����0�@�g�\��*'	���"��	2����'�2e�R�������]�L��"��(��u��;@L>��7����qO�	kN�;0p����������y&����K������sx��m�^H�w>%E��r'f���`��a@�X_�������'�M��:4��(�������|�P9x���/'�\�u�|�����0m����9I1�T%x������\�+8�8(���I@�r24v������`x;�"m�f���>Q~^d\�&.�We�C���@X�!+u��eP����C��qi�9�x%SQ�S}��4(R-��=�����Qf�������a+������nW��= \����p�V��:����}���'f���j������\�b���&8��N�M��P�'���"Oy�^���d$2��i�k
���B�V�9�Y6I-�T�I�������")U����d�_�[�#�b���M+�r��6�7?�������D�T�6�^^�e�jf���O�d���h�'�����2�+I���h��Z���/L����B����%��U��B��o��.K��e���L���
�\���W��Yfn��{���M�=)���v|E��n���OES��)��c������)1 j�77�b��`��J�*�|�_�������^o��<1D�6tA�K$#�d]\y�d���)�^h���	j!�q��7��8,�BF"���F��~/T��4�
*��������1�������e��������p�����y���)�$�����k���8����I����S"x�h��(B��E8�����je�H���YsP{�[%��Q�$����s|/4\�X7�����+9C�K�+�W�����J������UM�,6�?��3C���U�9l��v���Mb�����Y
�/`������,'�����E�/��`���S*��\���j�M �^f�����(�T���y�.���l�U�y�$h6����WI7��&cY��3��B�����i�������Y}�w.�g!4so���'n���k�@D��`���*����m�"�c��y������_��<��-(���������QD����6�~��[y���z��K�=����,�Uil��7|"�%,/$�����aiC����B��W��~/�������H�O]����
4|Y�|V���(m
���{3P�^����rC������e�d�g�c�{~����?mp�#�?mp�����=^���?�����j6��M���F�:\�d7G�)5.�Zh�+��� �h�����?��bt�
q��QT���<�jPyZ�B��n�/n�\��H>����Sdp�1X}��'x�hVv5'@���
	�xIl�W4�q��%]�'YHeVT���G�t7��q�������CiBo��z��������&`����t����ln���xeE\{������+�2��F��b�����~<�D����J"X�\���he!R8S.�=
V�mx����r��%�m~���E���(]��#*D�4�#Z�y�w�Wy�����L,.����&0�va���9�w����S���}p`�����v2|w�>Da�����cm� ^F"o=v���A&�x+*����:;r���h�����s�]�����6E�0v���P/e��~�(�����w�p�3��7o	���!���h�=�m�0���DI����l�7��1�w4���&�A]oA�^FQF��i!������cx�������I�c4��(��&��Y����A_5/c��Z��&��`�:�T����#�(���%k��4��[P��� ������%���'���'��:�(^���Er,�~��}wBp,_��������`a�_h��6Y�;�J��LH4�	@u�cI�t��w���h��\��k�-'�h�|�vl�������A��mW{���Bm�-��Tt�M�J�s��_��g�,�\����B�1=�p���:�+��PY����_���5����jpL����4�?���@��x������^��<D��G����r%SF&�c���o�Mc����{��`&������
����)�p5����	(�sJD^�����f�Cj(Q��+I���}�~-N���u�dH�]����/4�y0��Z0|%�k�6..�uA��w��(�2'�/{�HB�*�M��k���
�{���R�L��P�`+�������[�xv�
p���F�8��h6�[l�!���g�%�`���Q	!��X���1��L�`�-����e����[�j��\!=���8�o�pv���A�����;��P-5Q
���`�
�d�=�WV�|�����),x���a�j��������q��4���-W�O�CF4wE����@��ta�]<��G�e�Z�;�FRLn�h	WRI�l�Q�o��[(����3.:�"�+i��	��[t���t�L��p�����8g.?/��a2���������w�R��w��a���D�z���f�����8'����9��o�����4J-��(���7��B�������f�A�-�^����x�u��OG�����6
��x�i����M�4@����x�_$��F
�����v�)d���N�N�d�vz?�M{M��9�D���8�}�8�h���]Q�@�������	���u�������|AS�E����8x��B���\z�)����`���	�{�]n�d��b,|��c������K���V���/�����&�O��
�hN����v�Wl����2A�m��.�	6]Z�j8C{!�./q�?d&���I�[;���n�X�-twS��-��|������{��6���)t2vnk6��O&Q�/��/s��GW��!N:�n���� ��%l��oF���h����v��n�HDF�a�o:784�87�dM�D��������f�����bB�M�y�P�bH�@���Y�:���yXZ�$����<[�e����l��x��������&�H� �P���c���k���GiJ�!���q�a������d�����,(����q��B�x��bv�V|���+�
��S�����w���Z�,��C���&��@������~�']E�1��m�Q��Ens[H��.W�>�/6���l6SN��;'�Pa_�B:�y�) �����QM�	�Z��o�v�48�/4k���@���g�c��������*c|+Z���&�+
����BL�����.q����hm[d��:l#[Q�:���
��R�-6C*��Z-U"����v,�����^���������=���-2�GR���'R2.��pCO�U�� ���
)i���)/6A���~i�F��|��s�{�&6��D�H��8���k�]��f[�*��M����X�ftQ���o�����,��$��{L�U�USvs��&��	�'�5���A�2�P4n��Ge�-h��n�p�O��@��8[�qH��w��x�M�Nw��Q��A�<+�W�}Eip&W��A�#��� ����b�.�/'�6}���cct�kr��@�X���Cw�)�����%u��,�����o��z����)������R��eNt-��e��=�$���~����#����\Q������i����h�����x��?b����U�gS	�~@����T^��L<�-���ZH��y%|^�[�j�T?�����9#���Q��I#��DRy�/d�cD�\.���yZ�Bh��"������e��c/��q��������bH`��1����������Ey(���P���{+lvT��Pk�`A�������Z�������-hV�<�T�b�BV�
Z��������i:������?/�&�j0��n�x@��$�w�;����>lA���;>v���1ZL����8S=�A��8�f�>�����32�������d�����;Ye2f�/�o9��`l�:#����-h6��8_���J&�&���v�v������������.YZ3(.7���U�7%�m�����Ph����I�\�#�5�;#*�&ZU���Cc+��D����N�0������wp�.�M�����)��n�"�S��A����n{��:'��wn�7�|W&�@p2��(�G�)6$��2�~���n3M��q�]r�u&zA���r�����|#�����^W}�]T��
���:>n0��������L��E6��~
���H_����<�$�7�t����h�0pP��a���,#~^D�
x���
Z#�
8Q��1y�	Q5(����k��i�y#�v_Y���AI4��!��b���(a�`H�b��Q~+J@6��F���A�w�p�?e4�[>��{�>B�D"���D�-%pbH��1�+/��T]m?:H0��������T~^D�Q�Z��G�dz���d�e%6v�����N[�H���vG�e�OfHl�B:x�
���9��
'S�PA����Bl� �S��9�����#.�A�*��@��A
�.=��t���������]��~�D0�p���db����O�j	;��������-c�Yk�g�����;-�K��C�^9���t�9$��a�X���eE�|�����S�yt���eb��u�Q�+�\��r�Y����b���=�D��������"�Y�l�P%'��?+�ohiN�]����V$������)n%��WmI����i��/L�~j7V�,�V���c<m��SG2ed0���� �`nk�i0�H8L~zVe����N�������+���'"��Hr� s���gEI��.�`&(��zJ���j���H��=��;v^@��?�-��M������W$��N>~��+e�h�I�N�e8���6_E�����������\����uu����X�Br���KEf�[��u�c����''@�d��1�$�|��������}�= ��
�DAu��e'Rb��K�����f�D��,D�hr3��[x@��Xg*�~�~%J�$�%���}H� ��,��_�M(���\�Nt��.68;��8�����F28l.��<�����"�����:���L�hH�N�J�aC�@^�$�$������j0���}e����J�\��|i����s�D91�@�y����o>��c&�������H�F����X��'q�7V�\&�
����	7M���My%
]}�%|DnfE
>bB\ct��bV�,L�yU���>�ks&�eJ��=�P���o�NoLL���R�)��9�~Z(0���o�������
���1�bu��b?�5���Y�a+R�X�v�_�]����B��O
e������aiE�?6N�-��
H{�~���R����6���"�`�yp��:��"����Vb��T$KM�M�@;Q�`��(�jl���vT]��"����RNXY��uX�\f
y��I�L������9M��`<����i88uV��h����|������d%6T�J����-y^��:�4�a�t���XT�K�MRh
5'{z�a{����^���=]�����m�9�d�����E[�~j�Q
�\{�k� ����X�s(�PaV��.d��.�����9�)=++�fsFV&E=�M=�Z�M��N.x�nI��w����V�9L$|u3��^�'2�7�*+2�,����Z�Mp4u�`I��)Z��:A�l6����d��$2��.�������<�:O��tE�@f���'z^,Z�S��%}���hI�h�`IW��Y*�;4!5��74�	3 �-��GQq&���WL��0���L��f�����'�Ec� ��3����M�\��jHU{/m4Q�aFW�#���&�0��n4���JeAM�t�,AY����X�(�LQ�#������0��d����	��h!6��2��:�R�C(%�@9d�C�KN�����g6~
2R ��i�J�c��
������8|Rb#!��;�6�����B���x�����TT������+e?]�(.�ZPHnc��PI,;#=�^r�49=Y�$QQ�����=��&��4~���	���Yh_�I�dlx��PZ=��e�-]r|NA���jj�.�`�m�������W��)��i�A,��XI������m��a�4�M�.o�`x�c�	�3nE=�D�,���c�u$6vr��K[��~l���.���C'�mXX�u��V&6���	:���X���V�*� ���3��&8F9)�z`G�����Tw~�I�()�''��������f��yN�HQoZ�,�;7IC>��i�{AjeAQ�[��������k
�����*�T��&�����(��&�fB|V@_�D��=l�zA�$��8Y��?/��4��T]�� ���m&|O��+8?�������_��jJ�{����w���V7���Uv3I��f�NM3*�b}������������D.c:�Ft���$"��J��f-W�(*�&�����V��:s��f��#\�|��^���������BP�7�����C�d���x���>\~^$}��C��5�9/Z?���������kW#*������{�t�+B�B������ES���n��[�-��oa��W����PL}$�����Q���~����l�o�xe$jzN�j�#S����2�j���h�H*�?�
�&y�e]6u���
]�*����F��n��5�#�c��M^	X��c����6�q]%�Ae����Y7u�w��i�m2�	�wy��>���op?�����d���B��y#�TN��COG�=Mm��k�Vd�m�a�=�]z!o ]��e�:�\g�����O��jL�-��YII@w����sK���{���6�&	Cn�O":��$����{X�����;���<���������a�-5�A�H|=A���}��{����n"wS�^������\��e��H�W.H<���\yq/J� �����]{��D�����ls���CR�[��;sy��f�
:�cLJ�����6 ���t-�*b��f���F�K��\�A��w��'�dr�����XjD�
r
U#h���t<�z�j#��KG��5N
m�(����84�f^_D�m���Yg�7�"sRH5���M	�|�h�\�� �#B�U��2��O��)|�#�i�<o=������X��]�l�@<��E|��&���a���f���S5hDe�,~�����Y�k�����\�l�/�{���Dbn���I�JsD$6E��������������y�"��O�`H:.�bDS��(�����ZXK�l�>��(L���a�H����	��=�Q�&��������<���W� R�DS��U�j�w%6A4���0A4��a�Htzh�Z�QK����!%�������qz��=����A�����<^��t]D�^o����)���H�E�/��u���L���8��t��������=�}�������;|�\�q�b��K=�X���Pf�
�ZN����*�uI���)��&I~���v�U�=__j�QS�<cE��S��h�[�H��]�c��q����'my��_~������������^��-�~���v������?��e�'�|���Qya����7��f���y~����n?�������oC�o����o���Z���.[W��{3�����&��Z�"D�K�&��L'sp�G������L�'�5���
�C]�#e���$l
/�����p����~�;~>%�!#�����8�����G�/�`;���:�E��M�Y�]�o_���L�8_���`g����m����%D���8�y;NA����%C����P~9d��J�C*#�D^�w]x�8�GK����������/h>h����*�<ha�aR��*��+��Hqo�c���J[�H�5�"������P�L�,�-�H=���Oy�9v�_��v�*�H^��������,��&�������������F�r ������KzxL�I��b5%9��������A��L���	p�����teEI�z?yp�#��X�@E%���o��L�I���j���������)`�q%���Dcd����ET���6��c;�����V�b6�z0?����d�wK@���&$�8�����*��cKW�d	���	����T�#+���6�E����e�%�L$�
�J'�!�%0cQ���z��'��W���XF��$'�[�_H�G�q	C'O��:�(z���-�`3!�1���������
?z��%%���/��	6��o0Q��?	(��n��Zs�����������]���ZQ=x&���bv"��i�"�j��9sW�j:��aE��#�H���wZ�9������L��@�(�BM}��g"*��+au��"y@������S��z�[�;$��,����^�$'=�Jf{:5k��*��d�VV����Qo��od�.�������f��	�;��z��}SX�)�sa����U��f �)k�H�~����!�����h��]��Y��8��B6�]{��@d��=���v���o9����-���������\�(����Ef�c���\�*B�umVaE��BPV��gu]��i��kM��$ ]O�XH���.n�u������O��u
��9��Z�2����nXVT�M}��������J�E�v~���s���������������4���u-D�1��&���k��P�F+���1��:� �{<?�f�
�8���^~�4���
��@
b�S����g��qD��b�Mwa����w_+%�Y���[��8��M�p���)�1�����d���HIF�WN3�Taiy�����|`��	x2��E�D9��8��p��-���@:�`�e�3 ��fH�~�]?'�#* �������$�M�s����/��J0�
����EW`���k��XPb���5e���&�iK�������[,����;ou7�{^L@�1���������D>���<����h~�?� ����l�ur��������
�qQ��D���G��	fH4�%dV����V ��-*[��9�OKf6��L9x6���-�"
��3���m���~A W�������!���b�����j�!	�}~���,�$=[��&����
f���Z��e�����qF��sE�j^��8/=M���M����J�:K@�FW[����ZX����������V	��}�m�MGW�_Q�w�P|��whF2��
t����Z�*�pH��������kE�����$�^�Q�o:�(k�%�= *�&�������k��A"j(	^'6y�H�"�i�w���c����@Di��
#�����tG&��5S����p]�b�bE��:���an�a �8)����/�}��Q&S��F�<����f���V�����L�W�c�V&�kMVX�@�"���������(mfp���8�P"S�x!A�*�����y�%V�����K���MNT�A�F�b�v�U�2���	\����U<�:����5���e���S&X���NU������lT�%+D��5�y�h�gb�Z�(�I�L;-g�������4�G�"�Y)G�G�b�T���M���T��8�,6��ckW��T�T� 5�K��-J����	�����6�r�?8���=��F@�x���ycl����)�d�����M���k����]$�� *���5���U�_B�B��8&�_��)����D�i�x�j���f��^�G����E��ig �i}v����f��t���V�������^��>��M�!G����bAxC'8���l+����&�E++(��B��g��f���X,_u���Su#����% �5��]��w���m3�jf2U�:k�5d.��\�����������;��hU���>��Z���nt��"V�U�L*6f��l��4i��,���n��VSpoS���w���X0�cnz��H�qf�����C����zv�ti�;c;�-���&���:w���&������l���v]Ja��ZL�f�����1��������G�g�������n:��R�THQ4A2����a���]��	4��M����z;69$�8�����{�����3��FC��&�gE��,������<s��|(���C��Q[��3�-��:!KS���mVg�������O����D��e=���Ih�X�n��U"����2��P���o��;H����E��
3xf�
fy��JD�q�xA�\_��q
��/�:�����qxZ�jR&���}�,@����T�!2��mR�U5V��BoA2���=�P���w����e2eJ������8^{H��	,�&��f{�W���Cu
\��\���iT��i�.]�y������
z������x�N*�NS#A��!�����N�)o��s���Nk����u$�>�:���B4���m���#��Q4�'OP�-��=V&��Sc_����	I7~/U`C8�������'��L��r����g���3S� c�s�B��um�:l�uz�C�{����K��U~S�37�?	]�����&�1��:x����tG�����"($�����'��D�e�R���.�����B-���Lk�B�\7�-����|���M+	����x��odG\���ln�;[;p�P����\�����:���Z(j��k�*<����S��lH"9��P��z/��S����65���8^h[��V���.+Y��hD�a��yH��,�d+4}B��/4���	0���~iII$
���s8������������	��@�0�v�E�k�%q��y�)[�i@j��G�j�w�y�)K���������IK��[7�E�
��|UJ��!�T�lz&���l�
u{!�v_���-�r��Mp��;�z����'""�K��2�?���m�"�#�qc���c�Q�O���- ��Sq1�Ud�Y����&�v�d�x��E2���SI�m~>���-,*�����7��eL�X���g�B=8�+��e�D$�Q�V��z�	Rl2U��e�]#��nj`DE�EO����i�����d��T.VSO��ug2�����X� tE,�6W���S3�"��0�P����T{~�������!*��C����Z��8�J��a�����7�Y�%��"FS�����S���U�[TY��U��I�Q[���Vu&Y��&��,n��$S��$���;������?��oZ]�	�[�q��9�YI<��&�Q�����o.����8�A�i�M�����3�p�"�&;��.�B	���D= )�v�����Y��b��J��jZi���P9oF��&�Y��8�z���G���f3���M�Q��*�����Q���OD
�*�,��n|.GQl��z# [���A��a�	���>����kd$�u�����������)�/������:$�
��@_�P��_�I�}��g��fpr��k��;��}-��ut�K�&Rp�~��
���+&$������N�x�B�Xo:$��%0U�����A���g��o.���;�UPA��t�&�L��f��l��6-����+�)0F��2�A��h��u��9B����;Uk�r�Y0�]�mr��Q~�L����"$��y��l!���,G��&��B�%�bi�(���������dd4b�q���1�f��of�"*�Z�4�����V�����R:.�C�x���� �aR�[��n
��H��0��������	0�����*����`WC)�q����M8�+��c��
�z��V���M�o:����y1��,����F���F�Z�]������\nnB]�T��4�e$����v�x����O��iO����S+�c�|^�e������������9���nH|��9��]�'�s2��J�L��m�2�K�fP[���	��N�xl��`kV�?�%�=[���RYV��a����p�n��#�99����Of�<.L�g�����._+?x��T���	>+��g�/���
��_p���
g�*���G��k/T�Z���D��wWU��ZuzU���G�,2/���
�(�������t���UV������J>$N��7	�<rv.t0�rb���B�����x�)�H�~r	�����i�N�X.���x3�t#\%4[���z��On6l����o��J�Y�}�y `��_��DQvA-�L&�^6�k�:
x�������(��r������-o'~@�IT�����4\�77��I���%2s��x�`��{�����Ek4�;V�E 1����U5k�����cue&f�M�����,���|f�Qz7��z����\�8��/�|V����	b���O���J��2�A@w������,���������s8�@�DX���%�����8���� �y�j���.�5�1�~����k�D���Je.����x�Lb��<��d(�b�Y����|�:��e0:��s?9����j?�~��B��Iv+�|V�Hy��7,��M����co-����Uw��4X�]s!�����C'\�ta�u�D�y7IK��B��D��W~��'- ��zg��������)ZwL(��YI�tx;N<�UUv��FB#�
P�E�������y7��WC]��:2�`�L����T�Wk"�:����:[@e�b/�9�]���1�Dw�m��B*Glx�z��|�
��j���\7]�:�sk�s���DjUk*�c.�r���U��Y�]�O���WVUWd�(�6fv&����f/��KO�:�6�C��N,.[��4b�!i�'�q�i8	cJ7T'�4�8��:��[V�s����5���A�)�I�6g=4�d&��Q�oR�����iAI��!+>�A�\M����	���'�[����?�������FU�L�q/����,~�v�\��m�����^�����,�C8�d"��]���}�F��p���X��� ���,���A������
�_[-bmuY���\��{������i
�����[9�>IG�"�0�&��5H�pXq7v�TD��XM������?Y��c�Y����DU�L�"S{�P7����	R����c>�'�Wd��kQ������\��LX�6$�p`$��C@����m���a��]�I��k�b�:���2!b���t��(�T�g8e$����������p7�8!�3����F��r�}��f��ZL�>���1���T�x���$�E�;cY�5Q��H3�1�z2�RWi���)ldX�������HQl��r��J(��YfN�)�xv���e��+�7����r%��L8D��J k��q!��a�427����BD/	�-�Dem�����$;���j��GG�����T#��X���N\�c��E���
���
����y��3|�<�Z����F��_I43ZiE�l���J|�t�L�(]@/���GflX�,�Y#(V�S�j�\�dy~ry���_G��l��O_j��~2�Z���������_+&����lV��G��(A�h?��g�O��|w��;����x�b�j�:�$�j6�=�Z�,_��6i.��&����A���y��m#8_��`-i�.u���g!?�C���v��.�����t�9L9/�]�Lw�b�Z���b�{WY4�b0��DY����j�����A��]16���}�B���sUM����s��KT�ty�9���Zi~��Diu�Oz0�@������x�\O�������5Z��-]�s���p��D�S�Ep���e��,���|�$��]��c��'I��g�u�q��ou�V������L�]a%��� ��
�D������*���o������]fo��8��r���F����(��$!Qo�v��Z�T��_��eQ��hd�}se!����MEo���$y.8���
w�}^@en:�VV����b�S���K������]Z��X�D�����YH��-��� ����"�W�2�Uh
����3�'����%���\����M3�ER���j��Hnc�#���<S��o�s��XV+��O�)/�2V��[W�	����R
V�����)~�hj��C;����L�{i����&���8����N�����S6.J3Q�9/ �s�48�v]~��TO��4����c5��$�����f*2lV\��Q2,��:��8���%���3~V� ��A����6�;��
��������?h�"���$��������\{���w�']>�St^q~�}g�oVe�{����#�Jt B��D����!6tF�Q���k)X�2E���#��NQ��l�dp�.M7F+�����M�_&
��X�������n�&.`���p�_��2(.���A�J�,�;�P.%��t`����g�g�p���o~d�#��a��6=�u8�T�,k ������C�F��W�6���;�%_q�K�%�v.o�������&���	+��}�f�>+p��dYN��6�q� �(Y�K^��D���s�Q���_@e�A��,����N3���E�1�1��_~�,
Y����ti[U���&�B�����FX����K��#/0����}�����~3�z.E��@E�87��m�<����;G��~�����f��3�P�}�s�*#=�9�0w����s��KV�s�R��X�5,��,D�GK��(���Q����
]�`���,�zW5���W
��0"^@�h9c!|,Z���*�������b�������xy�p~�
s�S1�
�
�I��P�X�Z9��s��W��0&��XWlld�P�6��^��"noLf+�i)���-���6M��on3w�c&u�cl�f�}��vnI�#���������aR_Z��$���s�F�W����8&Lv���Y���(bFa��� �Q��m'#�W��6R,�%�f�(��( =�<�)�|��!��$����������m��b�{��zP�k�B������?�X���'T6�fV���v<���&Rf�6z���������a�@�t47�"�A�8
�3Jw�@��u�Wt&�G�y��~,qh���k�P��G�HX���dYC�-���cM�?�w�6������������_~�_���V���?���{C���tQ����z{�:�x���z������:�x}������%@�d������~��^qL�qsmby3I�9���|���R����f�K�C�d �R^?o4��*5�8�����<D�Y�%
Y��~��|D���$�7r���?DY'�_���qM���y_R�6��X�k����j�q@/�g%�0:�w�7H+�IF��E$�&�Le���^�%chN�S��:R���'Lsq����+ry>���;��*����=�o5���H��|eU�^���������/7ueVT���8�xY;O{��G7���k���TP�������ZSG_����2���X.�~v�5'���M0�w�������+-�"��$_��k�=�,2V����fW[��"�w��V�
v�L�)�}h���%v�v\!K&��R�dR��b[���H��2�r�M��
@�)����ta�����\�=]H=���X�fMW4���Q����&"yO�-4���S��	��ZM)@�#+2`��)��j�dw3zTm�4���;��	x���C�`H3�����&��,�Md�fI=�o�3(XY��nF��(��M�iR��gH�]��V1V\�q0+�/��v��dJ2e��2KzT�RqS����7U
UBv����E����'���HJ���H��'��������VA��x���H��`RWT�;E���e�&u!SV/�B=�e�E��%�E���R�z3�X��7�U��K��t&uQ��������(Z�ck:�,�!g��Q����!]�&oU�D��E7�����X�C��}����TMQc�V��.YR�--�1]�7���kniY�w�~�!��=�D�������rk��)#����c�qrk��k��UE����.�d������tE0����.����zINf�7��	I��s��2Z��I��)[A���������kz0!����4�=.�����j�P��:
���
�c�M�%8=SV[���� G`��@��@'C*�����h��(��?��8��+e�f������
�F�uVt�a�2�U}��K5���4�L��ylO'�R$�U��i]�a���B$��F�u8��%LkDd5�L�2�R	Xt$l�t';2����gY�H�)0�6�&\s�m�U�2�����P��bXCh����u�n��%D$���*�mPP�l{�����D\M�w�G���	.�8<�rBU+����D�5}�Uw���������5�g��������)���O�q<��e>���'I$'J�j�'����Wg��?!1��BI��=�B������$����d�����:g�B��gY6FO��l_���������X�"��U
�iA_@cX��3� ry^H2���J�mM1� ��S],)������}�������	���"�.#���'�5�����E-�iY��`h,GY7�^�{P%�����(3R���@qB#�QD$/����Jh��Ff'$S��=�#t�^Hd�����Aw6�+*�lg���6�&(_��-Kk����z����20�����=��~^|k�U
��	�"
G>���:o7B��������'�������:�q�r/��@�Pj�Yh,%��.�GI��E�
�d��p����
�'oP�>|J����{��x���>>�s2y�~�Lf�.�r��@
�7����pc��<��9��	�W��J����X��&X�[`_fT/
�_��H�WJHR���5�#�p���<8\�Ns�e~!��b@V-������R����kc~���&�{�L���6����:��cd�����|�����4���5E��T<"X�LA')���M�M����@U"�����O����O������sy!Ic�`6�����$��U2���%2NH��vg��Q���D�-FKW{�\k/#<s�Yx[/g�����2r���m���3=��\m)���@�tw09X��8�����j�E�����e�y�/:Kr��9�[o��T"����d���Q��L
g�y�����C^���*�~0��`�>/��1����G��j�Y�2�)�IJ�ve��oh���D�{����F�~!�I	�d�tos�~����	���f��f
�����j-����LY����BL���|����g���2��k��n-k$
-�|e����}��Q����t\N����*��~��
��LG����1_+�X�g�������C{������L���*�����$���1}^��n��
7]�'��Q��\P�n��/����,V4;���U6q*�heEm�8XW�r����Ly\����j����|���.��=E0Kv�����o��oznQq�4N��=����	Dce)�Z�5��W2et�6���&�
��&O3���Kh��M`o�L
 �����<�.��8He"�����*��=�N}i��gK�j��LtH+QK}3����s��"��GI1�n���~��X{���8[4Z�;��ODx]��h�ZK�WTmpd�L��G�]c���#���&���e������+4�$�8C%8|vO7O@tmz!MJ�(x�����i��g>i�o�(�U���RU)�RDA�)����)Vm&�N�le�%}�Q�/�6Q�2�}��4E�6\���L����M^|���0s�1�#�!�-I�F����O"R�����`��A�+��;��$�FP�l�[�����G���j(��O���}�������hu�h�J�
O���+���M$AfN�jAQK���"�B���nM[�[�m����������4]]�Y\����+I�q����YK*wb��G2�u�?��
,����W�z�,�������\����6vX���-�4�)�2�1
�Q����u���;#�@Q�R
�m	Y�tp�)b�&�^\�`1���VOoKs@+i�����|��_���M>�-��4��f�%u�g}�xsKHqo�m����d�	����U�� ��D�v�������Tb��)��/4�������_��<�o�H�����L�|��E��z{���)w�b$���Q3l�"*�&��!^��������:�*K�&alc���"��o�j�v(J��d6k������7�z��-T��H�x����M���(�t&�a�`�4��L{�����J�����N$[����~K�9�ws��% �A&P�N_�������N|������1|������le��cNC�}�L�Xv�
= �x��DT��� [>��M�BbH&���L��������Q�SR��S�8�4�[^	x6��Q�en��D>o4����e��c#j~��4����'� M�~�V^h�6H@U}x�it�������a��j�O� ����T����S�O5d=4�������K�����^��N'{�xJe������_������6�k��h�mwu�]:5��2�h%R2�\U#Mi����2	GZ�����L�lQ}��Nu�s��}��+U���i���
�uv!�����4a�|a��D8M`Q�����C"�r��.�*y����"O���D���H3������@W���V@%��.��b"���v����*�d�y
r��De�&��c�@����v�QF2e��$��o�=`��H ��
��~E18���l% �����������y�i��Q;
���CW2���'u1���c���~��2�o�v�6�_��]��-���x�t���[���8����0��(����,rrbv���I��M����y:��i#B������l%��Hak���|y��M6�o��g}��s/��mW\�s�?��H/��s;sg^��}�h)��'���'��Hn�#���@4���yMu\_�h�]�Yf"yN{
#6�*Aa��C����������Q�]c�<,���np�V�������I~=�)���N�8������s�����^��p]�x}��
�E�����S��g>�p]�x�l�����{O���\#]c���t]�x���m��������^w�?�����_���N��{�~��������^�~!��=�/D���Q{!�3
[�.b�~%����g�~���>��_���-]1^�G�.b�������s���|N��������hK����Z�cf��E�����_m�����?s�������<���?�u�c�������o�v�Gn��������l���%Y��zK�!h_.�]�~M�1^�����}d�;V�;�v��g�H������� �.�������u����u��~=t����u����u����u����u����u���z���z};��-�_�.��+_����
\.��G�?������z}���n �}��sC4�}���
��sC������77D���
����!z�on�^�����������!z�on�^���������_���77D���
��sC������77D�/n�r����n�]��9�!v=���
����n�]��vpC�z���
�����Z�=�o_�����������D�����O~GpC�z�;�b�s����g.�������W}o�'$�W2��kr�b��h�����t<�3����-���"L������L���Op���k��p�����O�#H�zI>�\���B� 	���/a���}+����(���H9K���e�h��24�����0U��y.���K!�.@�J�B
���m@ 
=5���3�����/d��*O�]P�p
�fX��Hd�O�r�a��:�+�qW:��7��U6?���\�ON�����F���Y�@
���� �,��ES~��tK�\l���<�-�h����3t����$8)��&����:��AI7`����>';��hrG����4+W$Q�!�����D��h�
�u&�q���w�_��N�^_�d=���t����!����{���0	�,�.����/�Q�6���oX�Ly6���	HK:�J�i������@��,(�c�O�N�cMY����b]��@f��JH���d\��bc�$�X���E��t%P-�?��[	��feh��+����Q�g����R�$���S��j�y��3�}@�� ��tQY���j�Y6/�UO�����`,������L��v�~G���TK0C���#��I;�!�%��7�&�LF��c���X�X����Y��Hqo���8���N����c`����[��o"�����������2��()��Fe�^uh�m��"S�p�����������������]�n��}��1���lp�d���t}9K�/�J����)9��`Z����<�!���-(��sE��hV�����&q�(�������o'��\=>��T��<��D��\��l�����~�����yl��FV��.�V��-K7�B�
��p>���%l����le��6�j�N�%��+��x!��;����D&I��8������\n����eBT��>�<�H��d��X��O���E���u����y8���o�y�^�T�	�z�e��.#:��H�qG������ib�[�w����S/N��uT���"��_l��{�,84�:QqF>�F�����i�*�����N�Q8�J^@M�tH������c����U��F��j����h���bG~�~�7�8�v�"`��iq	'�Kr1�@R(';�zqZ���P�M�����9���~;%�
K�_����~����@��x+�*0[�8�H�m����3@����>	�?Qq��z��!�$��F��,�����+zQ4�����{M��$a8�uP�cDy���D����������7,Rbe&A�Ol�;�}����V�P�d1����'��>\e2,��T�fv�J<od�*A�����`�Y�(� G��7K�O���	K����
/�k�^��TV��d�+��_�h���0��VT��7����<o$^�vg������Q�oG��;
L��:	�$�6Q�(nq2�V|A�-SZ����1�n��+hz��qs_��b�����)�"x�HCY
<��nY$��;^w�p��%��D�>�.�g�LU�Mz�\b��v�-8��!t�M[-&��k��jRn<�`>�����!�<��a���u���8B{��"�t����d������
X��?�����i2�����T�3�"��E�!�[6���[Fh��{x����zu����p���|>X���Jw�'$��`h�k�!���-���T����nD������t�_���(��qB9�����lv5�y�<�Q��w���9���b����
�������m�NV����J��J�q�d��Q�HP�ZL��6�wE�q�9B�����>���Nv���/��&�����YWV���������H�T���zi'p�]�
A(���c|��|NU�N��P,%��\����c$C�6:4���[l@�b��9B �zx�HF��%����y�$GN��@���R������iVPR��7������������
�r����H��7���Xq�Z��*w�m�B��8I]����u�W 99��|���43hF���v6�x�$��l�|����!u��� _<vA�>����o��9
#6���>n�9|VkB�U�|�)�����wEZ#7d��X��7�Z�H��hd���;j����4���a�.F��]Q���?�gR"����r�e�r	����8�|�&
���=���:�N��x'��i{��z��9�:m��A2U2q�[T5��"����������f�����3�@[��4�O[R��kQ|'@]=Sz���w����|JBt���U�sw��Ir
��cT2[%����j�d����H�s����V��bFE	V�TH,+�6$�-$3��nAl���ID�
�"k������L���J���B��T����u���-� �
��Bzc��������J���Yd��a%���)PH������% �9*��AH��������Le�G��P�
�BO_~�R����g2�g�PV��1u&�iL�?�@���F�@e0-���o�����Dd~*�� �+������������A�u"��`Bt�����jQ�������R
��f��C��������
 e mw���%�#xW$���(Jp�Z�;,�����U\a!��Y{-33����Y3�K,���Ec����aRN6Y8���F�I�9�Yt=���q���;��U�������~��w_�xo���L���i���(X�2�����F��|�}A�^5�K&����/��� ������
�;#��z�����b��/�����d�m&�����>L�;#�U��(�d��)��x�����LD��a���ph���waA`�����@�������
]o|K$�]��]���0�3�"��!�����;#�����,B������mW%���m_�Vq�}�n9&e�����x�,�4_n�P{��� )��-����wa
�3@'�l��
*����K
�9�m���u�f�U��XQ7� n�gs����%�>���j�g��������;�����l��������aW�P��,)��^;ihA��K(���tv������ka2R����;��\PID[���,Tz"���sl��|t\��x�16y������6/3j��23I�X+�q������q��;�{A�B���B��EhvA�dw���'��ee	|jzm��J�����`4|���.H<�X6;t�]^s�)y<���G��yZ�*��a�7���]o?L��@�6����{=�v'�y�{l8H6U�����z��e�Q��V�Q�'�����F!8��6xk�BLl(_��Z
��	�s�2AnL[]�:��TK@�������B3IrE��C����0�.c��8��}YBR���������K"��(?\^�r,�2��}��=�{��8�,��[��P�y������������K>����6oBA�+�%i��L�QD����+�y���V�eo�����L��]������s�o$�*hA�=�Q�8,{5��'�����C����]�<�9j���J��@6W�@��*����L@�v��������]�������&����q����{�{�0�����0��������N\�����G��3�����	�K������������H���g$��"Z�[eF"��9`��N�#���
��R���P
v� ���6����>w���mC�F���m�q<�)%�y�2������N���q::��<>��#P{���d���LDd=ON��OQU"�]�m��r3y�z�MhU�������Wf$�a�W"�������x��Wf$��i�����pe""��	�:���d�c/��t�G+3*��h����}�2��+��+�5LpsJ9U���ZiR���=z7��k7v�����D����Qq��]��\�������7h���g�9�w}d=l�Z��`�f$���B���&�����km�d��H�����
2��Q�*��nv��3	���!���6J��4��+������j^���~�(��������e �h��k��������������H��������"��=F�x��"x3�������eeD��������{�-���.��f�-��h��Q��ML�sf���f}� ��[���^"�t��������]���M8�x*Q_����4��X�t�Vp�~<J+�������:J�'��c��}wBp,T��KZ�"�Z�{Alz�e���+��`J�1O�3�;�D��L���g��X�D�}�aEF��[����o���^������f���T/��������o����[��HD�6Y�7�^��\�7��O�s<���9��j����������������c��,H���������b�K+�18������xt����F3Q���o�g�f1��!6���L�>iB	h�����9��5�xd��MAI	�)Qy���?��T��m>�$K4\�~=N��B.s�dH%���
_��`4~ ���@0|&�~�k#e,�)�$�����s"	��q�n��E��EP�,x��RV��1K(]���0���h���x��1��:K!�z7��(���a3��>f��;���ZF%����8O�b�3�2x���|���}�q;F1D������`�n���+�/HN
@=��0-uQ��k��u�, �~4ze{�+ZK5w�Z�
�0���fa���#)����2�l�FoV�!
�:��>����4"�������5.
T��Qk���f��mP����O��S�` ���;:���/(�8C���)>��n�h�������913E&����������YS�
�e��/�������7}�	�n��*�emr{L7�$��){���}2W7������Hqoy�/	|n���$7�R�j���fA�UX4��y;��zK�����+�{�0@����8����������
�����(�����U�^H���([}��QL�w���(�~��9�0��%����`�q�T4���.F�S_�<#������u�jF"�RI[�Zy:�LDfO.;�T��������mK~�-�n�~���g8x�0��(i�
Ut;����P���'���A6�N������E��� wX&�O�=��"z��7���8���������C��n\�H�@Q��WnY�-tw���k'_c1����@��*5���&c�3���de����*lXDe�bBE<}z�i|""�����U��b������F�+�V�S�j��D�D���}�"�96��f��=�@�9���)3y��*�������H���{;��u��A�/z�o<4��8:l5������x��oA���Q�0��b
���1������P�z�r�'�`F�����{�:�2�J�>fB	�/fn��� �=��!]�g�c�����e�r*q~�'�<_km�@
�@�9�:
TV&lS��bt����d"���1`�EL���
Mq5����D��&���L����9��<8�kL�BzW4�N������([�(��~W$%��j a��;�,[�O��M�2�7���+5��l4�/q��?�#����
��m[dB�:�������F�����XJJJ�3�"�[j�T���3�B�r���Z�c�b
HE�#�|�a�3&�) ���v���9��nh��f'�EP�������0{���Kk�	i����R�t�7=���Q��\����)8|{���S@3*A�uh�_��I�?F��Y�8v�cC'����!2���������	��	�6yx���3;����hX���'[�>4!0�t&�����/��rz��:.H:]���@e�����2�����w��A�@#�	,�P�<�\�H>NgmN�_�RDt���mbA�n��x`HH+��%���w�+JF��+�_�Dd|�0�7wRf�T�B,C�Io(xg "�l���b"�-(�������y3���|^:�������oV�n�;Q��*�I��_�H��~R�S���M Q=�����h�����-H��`!@g D9�W����cb���g>C�7F��
�����MgB;�y�e��%�N>����!�A�v��D���n��JN������������P���Q"�xX��0k�`���c���jG�/�m����<���82aA^�<	`��:�^����-(�M�Ue���n��M�	�����c����&$@���c7}���	�x�PK�S G7���X���������YI@D��O�;���$�![�Yd�i��[�i6�=vFV:���6��8_#������	E1y����^2P,����)k�z�ke��|������r�[�=k�88�DZ"�z�{�e��^C%%�U5��'�,f1#��&}��C23��U�;�}�������[��u�&��3��8����3�7#-�E���1�;3p���D�]�(N�������b'��L��;�E�.��c�'�1)E��G?�f�r����Y�aA'���7��78J��A=3��X���C6��~
����pX�{�4k���8��C�	h�N�Ob�a.��S�v�Bl���i>l�yg�1����A�qf�����= F�p.{At�>r�h�FF���
I��[s��A�#����9��
����!��4"�A��%����1hHIT�8��=c��
T��k��-%�`Hp�bXWf��~|� ���"7��/'��.��Q>)�������
tz���a�e&>v����N[����u��XI�f&��Wd�}�wTW�#��3�M����ydh">xPrR��9��I�'C����>	��������A=�D��&_<_����N����Dp���p���/��k}/Fl�#��s�my��.���g�;���>1h�5F��0r`�v�9$����X�)�eF�|V�j�+N���.�2%x�zB���2�4������'�X�P���k�� :��tbO��V!�68�DO�0' <CK��w�����R��&3����L@G_��d\��;�f
����=��~�3�H��1����SG"2n�hm����m��*o�	�sk�� ������C��H����e����k�it��H2'�����(�����y7W�� p�/'�����A�����_c�f}�z%������Q�)��W�>)��2��4�<������W� s|B���M���'4T�^1<�o��.�s��������
��n�4-����[���6&�aO��7\>X�^]�wH�jp�A=�h5��]v"%�e����c���DN���B��u ��$�TP���^�~��%��i�k�cH0!��,��7��&{F��]'������]Lp�H��"C.�<l:Z<+W�LD}���,���x�r������[����W�&�$��I����B�Wkt�4���2F�J��;�����[&
��Q����B0k�!��y|#��Ko��tht��AK���D�N������e�@a���M��_�DD��8��J]]�>"*�D
>bB4�1n^Lv����db�����n>���6g_�$Y{$��;
Fw��m4��1g' �w���W�#��=v&e���6�����l�
 'd���\\��.��b�������|E��K�z|���(��
�+�A�������UyT��qJlR
�X8�t����pmc����"*��$�v��d�rW'"-��G+�`����$-s�N�\0BR�jl�����m��l>DKB������(��	@{���++{��f�=%,�Y�i����`���+�pp���[��52��E��#���s���jg�Gj~��K�g����m��0EN^[�.,*p�f��B�	��v6�`O'�i���{:��,�q�-}��ND��	������`4CZv�^ e�E=�@���fe���<����,i��m���)�'�fS�3��>�&���[�&��u��D��ctK��������i���DB��1����h�5���e��u�
-���z�aI+/�
�tFR&���&�\��)���l\nI'"��:,i�y�aIg$_�
��a���]X���.�3K���^������aIg�%a�ms=�5_H���-���PL�������0�h��Hm��V����p���'���cZ7zS6�#�C�����DeV3��|A��M�a�:����le�A	9l�,AY�M��X�(��h��LK`���2����ic�$@�����P"#xhC(#ce�;��#�L�J����K���)���	oL���������Oc�������	iY�,�4�B�P���j������n�����P�0~j������m_>Vpp5^F>zr��X)hr&>z
���DE}��'w?	�{?��	�&��X�	C��!�����L��%�U�g6FP���T�Y��S
#��L9�D���� �a�d���H���n��a�$HF�����XIw����'���y�x�����N�<������;E�6���2���y�<����x+�lCf�o{�i���m�P#'��'���+��i9�#8��� ��F"\i������T�T��FN*�6�Il��B8)�Y�6���w&6n����q��1�����E=V5N�&�w��
M	%p2��S��J��2EQ��&���B|g@_�D��}����Iz�qN�.%��4��V�L��{J�62~���_p��~����|G���u����������������n�s�I����������\>3u�!���������E.c��1��a$�:�TZLT^o�5Tb"/��a�C��w��yA>�#��Vl�x�R�<#�Y�4�������z�J�@1���y
�]H��6����/=r6Z?��zw�� �E����zg���
g�`��
J�<�|"���x�`����{c!�}
'�g�l���4��Na����\������7�T�������Tm;�A�h�����h���T�
bO��?s��������� ������&I�:*!��,�c�"���5����e���o�E��9��������c�]�I4�>���o~l�u7����	���������~�i�h�BOG���k�&��m�a�}]<viAc��v]�/3���u�-D[�grX5��ki��$`��P�W���L�����2�!7Ir�|'b��L����H�v\v��L��;���<���1���v�a���&�H�Z�������n��+���|�M�[41��]=��m�t6 ��	����+/���R����
����=����\s�2�&)�$P��7����tbe6}4im���" ���l-�)j��f2F
n���^c9?�����O��I;��f�c�+*n��0Qu-�^���\o'm��]t4L������������{���6�zF>C4�14���O)�[~��pA��|��������f|�|O���0de��(,z�!�T�ZL��f���J�S��]��"r�	!(r�!"�"�m���l�u���lR�1K�.h����!7�f|o���,�����g��}�9"�"�����/M����8���m�1�1E�y��
C��1�4� �f��J_�\��E����	�����jzD���O�����}��H*���pn���	"c6A$��Y�m?B���O�|�G� �X�!��B7J	Wo�����������qz��=����������<�]�_Wq�}�������w����2�1�]��WQ����9~�y������������!��w�������-����������O����
=��n���n����z����D��\���s�R�{��8H���{���D�{�7������?��?���G�Y��O���������.vw;�����Br|����_���?}���	5�'��%�~�Q���9�"l��y���w����}�����O�������*��?�GS������uGk{�e3!q8�W$�m��E�{�f"2����*�T�=�
��;����`�����.M���#�=>�L�(�������@�%�K��+��M�c�U���X�y^�����H�p}������4��q��HD���M{�n�r�
�h{��<��/V��t�p��06�r��k\w��&Ru��L�%;�(��p�w��fQ�'N:��?���;#35������q(Tj}���S��&���H(&��Z.l)�F��&$wz��LE?��
%�Dd=�a�����u�XeQsl�o�%�m�����=�����,���r���uZt���F�
��q�	:A��L�����d5���������~�k��}�����PW��(�z7��(�^�����m���n��.@�H��\�~E���|��<����grss�j�
��`De��HoW
�=�]d&�m���F"�^�������~�;"������`�m�5��
��i�3I�F��T��j����
���������h�Y�S�g"	Epa	u"i,(���l������w�P���kN~1v�/H�������p���}�
���zT�\k�{4���2�$-<��+1J&��}��l��opQ�\�����\Yt��j�S{��d(�O!�b�:��vT~{��vP��Y�"�b��:zA�i��f����Cv�N��	)�3r��$��o��M�4�������g"*��N�ju��HT� Z���V��l�\�����~�o���t<������qF7��
�*N]���A^c1�3~ �t����
��H�w��]��O����S���C%�5�f`""[�H�^�8��!�������E�z��@R'�7f���Q	D���]w7�Z��z����.�b"�6 �T!(9�B�c�q�qk�\�Eu��A�q�����hBY�U������j=���}�ghJ,$=�U1��gh�������@14�W�����U^�E���E��k��1*)�9=���fg"R������B���\�is&�6q��T���3B��y��-D�1���z��B�E�#�	����es)�*�������Y�j�����T�]����3;��k��oJ�$���9J ����{�>8�k���i""�����\���
����c�+���aU��'�+��	2NM�	���N&��r.�(�����dD�3���Rs��:/�ZYz_p�<��������Hv����>t�&:,�kX$���~6���y�����%�.��nA(�gt?��U^����{���TO�����>��pxx�]����\�{�1�U��hu�G#���H�������O[�9x��a�1���c���M���0M��!Q(8���rB���n��\��h^����I��=b������6���rT��x����C.�:�������OH��h���6���0���3��t���*3��
t����	���,L�l�>��9��gD�8gt?�(Rt���<��	8���~ev�%��F'��R;����ea��}|~�(o���(?��J/]y\~F�s��]#�O�3#	}���x��tBE���������9����)
���|��D��f2����L���wSo�l�<�@E%a�;�OdsQ��F���Ow�1��� "5M>�0"��
�;'S�y�~D�m��������q-���n�a �8)���LZ���M�2��-�c��h�!�O%�(�Kx�GL����G����#6�0�_��<U�bz��\!��2'Jd�O$�VD�;��u>O����H|������u)��JSL�� Ui""��P����J�V]���1=B������a�d�����Lv]2p����%Y5	��k��"Ge�Z��QP�2;�G���~W�"�b�=�Er��R�]k�"]����G�X|�������CM��.MH~|���G)L�&$�>�]��]��3��0�>�>�0"����nGp��?���m""���
`������_�T����C�n����tM��f�����d�E$�/���������B|��;m�������'$��)��;�T|������a�c�n?���C����G;��:#�����zg��ad�uF��A.��������Su����he1��t=�����9������JK�n���U�	��������\�s~Wtc�.���3�ff'r��([�\�5DY��agp;;��Y�`gG+�s������R�k��	�X��2er���Q)�mqM:|&���s0YM���T�k��z�`@U��|/$��`��,��H����M�al����������E6m�9���A4���|�(���>����`�7���E�M2����Z�g��>��Z��B�>�*#"�B)�$��}��K&C��h{���\_���?"����O))	�c��=c6����$���w�&pgE�~�Y�����6v�L+��:9&����H��f��,�� ,MY&"���F8[������I�[b?�����������'7����2��P��wLf�wp������"f�����`5>�=��t"��^���g�:n� ��)W�]�b��������Ln�M�prK�LD��4]������%)�$�j�lAkE�����������LD���4����&:/IH�����K ��+p�n����:��f����9MW����Gh�W����~�@��T����*�MS����!�����N�-+����m���k&7�k�=�#�)�@�)���m�q�K{(NU�?�#���ce�:5����~!!���T>��+�����?3�r���$�*�-.���/�8Kr�Mr��L��uz6��w�5R�����:��+�Dq�D�;7��/���fu2#4��n&��!�������;�GG/���h���,�8�n&Z,E������~'��R�����rA1_�KF�?-����PG�	���~<���&�Dd6��j��`;����NC!��^���~
��R(j(r<��j������,�A�w��������X�V77�;�q,H��M0����.3R�~��I����!��`!��	�	ML�.H�c�	d�W�}� `�'��%%�`48����p_�E~���.H*���B��|<3�O�"�����H�-~"��uM�Z��=��Q��BD>��~�>~T������Oc~�-(��S7�{U�y�.�[�z&���/�1���n�X�c�-t�f�	�q�N�F�pkC�DE�p$�L�\�1�����G���J�p��C�O�?�e- d��Sq1��|7��-H���A6�W>����S]�v�1����,*BE!L��gl��%��Ld�7�9��A������H�C>��r`M����d*6
,�Se�F�\uj`DE�GO���Z<Yr�$`���v�\�����e��)Z�����0�3g
���F�A���	i9��9�n%UI�7�����u3��~��b��g��sG�`&"��Y�l�����u���T����R-��������z�����,�.&�Gm�[��f�qz��3�}���t
������lc������>y��9����	��8?���J�)`��O/$��\��QL���2�>1fK���f�.EBMh�v�%p�+�ug���4��i��/`��Y��0���9�gZi��J�9oF����[�E���_�*��m��	`kk�"[,��u��Q�(�����XY;�kx�x��.�~�H�G@������H����Y�G�{>���������U�@�e
��H�X+l����+�$�x\�(���{�hU>#yG��n�Z�m�}�������k*�D��o�������>1!�D���*eh�!P������c���N|g�}�(s���Wi@-�r�4�2jg3�4�nMK����O9�1�^H��.��V��a�8Gh����vo�zZ0�����{L��B3QC�J�����M�C��Hn}Y�}�ON�����Q>�	���O'w��dd4���M�e�4D�<U�eRDe�z��i�00� 8oP_k!%��1��79)$Jt���b����� ���G/��/zz���3�I�M�!�:Ne����,L�m�R�Q�d��&����*n���VxYgd6����8��{��=�e�C��-Zdu	J�vY����)O�:�D�[D�l�
���%��e���A��*�v�zCY��d�.�f}�(�1��3��%���$�=��H����~���=�@�����;������o4�$��@o���~2?��1!��>Y�^#�P��r����r�<{j"%�&�sq��G������V�-*7�:_����HFq�K�bcz������R��B�^����*������,*CW���W��VX,�����$p��'��X&�����
R���$o�t[�&h}BA�k�wS�)�Z
�O����L+��2������#	���7�|H���~�w!.?PjU�j��qB��oLv�h��x���8�wYP0��o�e�	���QY�"m���t
�{!C7>�Ak��f�d��-T,�VUL-nB��x�bS;���7�
��~�����~����oCe���:�Oo�TL �u�O�d��?}u�un�-;���y4'v�Y��.�h���g]�n���z��,�:D��	@{����~�
r�b����G{wp?��V�>2�A4o��E����C�Y�)�P����&E����k'sW���]e���m�Q��p%V�v�:��HFG���K&�5L(���U/��E����2h,��cWL��H��Ej������D��
��
np��nVh��J�f�Y�����{�$��0D�D�J�2��T��'����4a=��e��|��E3e�[���/����xh����a���z�r��G��o:����N��m% �0���qg������� ���	8����`1�/��/u-HI9�pG�R������h#A}���:{�u;B��4^\z�����9�O�v�����,2������=�C���]���uy���b�`���`������^��On�"Q����h��)������iF��h�/i�A�jXP2�@�ly.�"���p=�}xk�eO�}��<FA�/���H��fS�ea��5��]d���@fJ7������������1��0|���U���:3i�����������y������wa\���x����,�|�E��S�}�]�v7z�e��	�Cq.�z�yB#�.�!*�
q
��[7���d|�T�@�c�Xn��e�@
;�Z J�Z����u����;dP�u�{(�gx�����o���*R�p���I�k��x��C�����sG@C��UB�?\<����_�D���;jepc[`�4L��(������s����\�����(r�����L�!�9�p���������:���.iCU8�2�\xM�L�\m�l?��������1:QQw�|���5Zs`:�0�I�
B��[��G"B�v��o5y���:Sr�t�E���=i�o!�Ha�����^������������o�������_X��w�������0��/���4�S�~��&�E��U����WB�K����
q��=
��2ho��@���;g�����6�W"	JpH�P�5��@�4�� t���W�T}"��f���x��B�<`S\��qp+�@tLq^�l��;��3�>�����_'��,H|~�{���-���4���Ql�����9�
`�������M ���B��^�^���~�W����EU�b���T	)�iE�Dl^�A�{!�����y����)��iF��]?"����k/Xr���������<���s]�I%&���j���0�^ j�����C�����DTb?nC*��k�'0��<}Z��c������{�����
Kn&���|�ucH�:��rA���P��[������@:�p{��Z�������g�sTl����Z]����*���A�9Z�`k������5��E�2�[��h�~�f��YB
�H2s���e��Mo����%�R�fvuAp�([��=�f�
�����i���Z����Q�	�W���Y,l���}�-���e���f2�&?����'{�_(b"��'�Z�^�����%���!�1�]Y'O{�����?2N��8��.Ps���U���HT�&2k_��8)��s���!Iq$��Q�o-~��"�t���)x��13�y~-T}�&JI���>mc�LD��==�va�Aj����j���f����@�@rwW�Ym���rK���;�����u��A�����)��j����JQ�J��\#IqtbC�������]�ym����t�����-^��*87��a:����Y�C#�q��O�����(���c=B$A������]b>��3�����y?��n}S&�,w��]6,�����=@P���1i"���z�H��:W4-He��z���������

=�%6��]L����(��Il9��T�5�u�<�T�K�e~'�6��^xh ��+3����p��Z����|G��c�����1U �4��{_+�h�*�#����6�h���g��;����~�\	iJ��	�������2��[:8����vA:do;?�_�A�����+Q�daP5�,�����Yba���LM��^>��.��)
���3�B��
J*J�u��wf����
pR+qw��C�'�o��	i�p�c,��E�����L+���IT��C���$��A��=����,��/�e/����aG-/����4jiVcs�������1L�����f���*P3�pV��}y����Sw���qy��`���@�����a������A�������/��C'�W����"�^��M��5�L�P^&�g���~��|/�E����z ��e}cO�Mw�>D�P��nj�p���m�7m����)P�����i���U��f��NG��@S������0���@jt���[����������bh��c��,���f��;�}K(���]�m�4���,����������!*��D�e��nXI2�a%�DJ=i��P��Ba��.��d�,����h��K�Bm#=j���^_��iYK��	A�6���2�G��B��+
�o���D���(���{L�q:�lk��'�EhM�q��o0��z
����`�`��9�P,��������Lh�i�;������[
c�]H��������d8.�1�.J������A�������mz����� ����y�m��������$;�����"x%�M�k�7"���q"�k�� ��R�I����Q��:E�eFi��u�
�l�Xl�\iZ9������l8���iyX���JBc���=��T��������88����+�bF'��A�k��A�h\
������#����?�~iyg�
(�$������I�����Q%�y����;�-����W"$���=l���u��?�;�y�����������_�>���+��������9_}�z�����[
��~�������~��C��v��U�����z�T�����W��
� ��m�r����{�|�6U.z6��H"zNd
��$��{�&$@��<�?h^6����G�2c�����`���m�b���n�6�rzW��mX2'@;�&��w�C!���m;xI4��xW�[_�K���
�P��x�gv^%� �<(�Cf�%����z�.��m�8�$��K��4��Kf"�.k�!��k:g$�!K�W#���4{Y�����V_�B����Yno��|h�/{(!����C
Ei�&e��wk�WE�3����Gv������f$E�������r#(Q�b��eY�F�Y���v�J*��o������z!�s)�9xd���qz���t��jB%�1n(����.����tF���\����������E	�F[��^�|'Cz����tBh����V���&�r�z�����!�Dd]E5�(�AMvtB���F;��Z�A����%3:#:��4�cvt""�5�����-��P�����w�;�X���nL��<Z�	��4�
T��5������`C��8�jf
���}0������:l*-��NH�������[{��4^z.���X��jF��~D��)�dU'�qD��*�������g�������T�-Me�����Qu��	����i��
��T��%jYoH����
��a����'���k��U�d�fS�X�����hQ9�0$��G�:!�[��&7{���	������u���)�J�f
C�Z�t)��	�����j�nP&b��Ty�=��H6�no����FuBzu��2�G�Z2�	���=����(�^�D�
5p�����=h�D����	
��fb�����l��6��aP��r��Pf{P?����X
����A��*�0�������:#:4s{j��j�Q�aO�F�k�����z����k�5����9����|���NL�q��-;��:h$z��F7��i"���RE���m������0��	�=9�D%�R�\����0����U�����q��6��d�=������"���2���#�]�.���
�+�p����e�{��(�=��N(��O�-���(�zPx��-����		@�MW�m�//'�}G����D�Qe�� -���gBz���;�������42�*�*�rM�o�t�[,�LD6��2�������r]e-qGWj��>0j�5AU�]~xVnV�����Q�O�9��M����qz'����r����T���f	#1��}��[��9^���q�nY����%��\���|�z���{��!���`�����+��,�(��`]�W�j.��wz����mw)OH��)g�p�s���<o��#�5|!�����`���O�]���Vn������T>�l�m�	���?G�����f��U�v3�? �g\d��SRb�\I�q�w3����w��x)�F>8�(������t��������0���2���F����9�3�����D�W`�=f�&�.v���=�	���m�`�(������j���&�&n�F���W����B}�_��+���	��=�m�p��Z�Z�� _v1].���i�DY]���1�"���������P~#�F��ZaF�����Ln�K�2.����7�!*�	�����<�!��'	pG��H��������}����%n�S�.7�D/����:���������V�� f"*��e�f�����v^��r�#�<����T>v�W`�����vX]��	�c1b�����Qf���c>1h,����
��k���%�R��"�RL�n<I5�=H4vr6p6>N�����G�'�`�������n�_���m#�q�aZ"���OdR�,�^m��:�[
�\0��[l"�&'t��4�qc���p�g7�$7��;����L�v��k�x-m���&dW����k������G}��'M���wV+#��+d��dW��k������IN���;�f�gy�����.������K`j"�V�$��
���3��_�9MHd��F)=�������v7� X������nN���O�"�W�6���"(������B��b���p�U���p������*��T5�gBm���T����=v�M����Y��WPz`��	�N��`
��k �V��.�c��}x8�`e�K��#��X��A���}��Hpb"zz�`���n}��J���S'{�p��E9��k����mO�*�������e�C'����%R�
1w=��e������\L�&n|��$�B�D�jQ�����kB�Y�E�r���4(!�lftcX;�^S7����D�-���Qt69�N~""�;���������M��5z"����d��CS�2g2����H`���B ������>�{""{$@<B�7���.!�l����i�-���Az��1f��)���{!I�P�69dz�LH�8��3ta8�"��JR��@���l*SY��U[�"oD���2��b��3�=�<C���0�*EujB��*lHj5!�t�g5D�JH
u���:y�Uz��JAR*��SD�K�.3!�F�t��Q�>~���O��]�[K`�f~t�)\�R�~���y��$�hn?E���/�����kAt�Th������*���^�&�]c�P��G�r��$q�����"�n�t#�;#���tO�m����r��Db:��	��u��f�����wF*����~$~��+��x���G�jo�"������F����H���k����M�5�loB�Bm��R6P�E��Yv�g�,�������������6���>>?��J(�(������	8}9�
�7�M�j�	ha�&_kn�0����F�Z�u�����0����,�������6�4~"}"JIzk?��W"*����Tz�De�@��aK�X�������C<Kd������9�c8
m;����%$e�3����VZy��D��������������z���v� ���Bg�d\������*��h�6��@�%9v�Pq��2�h�����f-vF
�E�G��O%��J�s��
L �Q�w����~;*�~����A#��������	��#�3��u���D�_��"o��e�^����L�fT�?T�\q)�/���Ad
��
e�Q&��3�����C����L� 4��8�caZKW�'x�ftBf$'Prr�	�q� �8U�i>.���Zy��+�����QQ�����{�WY�'`����-w���v���H��n`��oQ���`j]D���d��j��\H���l��N�L@Kq��<�j�EZA��L��\��M��Q]��5�3�Gj�,\�����nwf�Mn���=d�3�4m��L���;��wa
<>/w����o��t3*R��������/&��6.�+<�R��X�ZO�6������jA�2XH����@���n�"���x2���&D��`�EX��51�s
�
c�m5�K���Olf!�t�L�^��Y5!3��z���%x�GMH�[��2���=����f6h?��%L-Hp{��e����7�w���]'�E���V�������cF��y�\m������7����JI������n��d�����'����;�������|��	�nW�� ��'DP<���+�&'"���?���e����4jlB��-u�����wA"�Z�kc�\c�}�W� �� Zd��g���-k��}oCG���		���FXCXP��>;�+���c�9!���a")�6=e+�����HT��]����;�����XX�^�����,��O�����%�>�5�-L�l���m��l1�=����'����_�<��]��y���>}aG������qKp>9��L	�)�1'��	T�	dh�<|<���rL ��*���<���>s���\WNp]S���	T�	�)�1'���`�%���J�rL��mN�����S��KrLpO	�9���rLp����	�'j4����������Oj��[Og����U3�����<��w����������������>�o��3&��R�ON�?s���S
�wS��R<WN�rJ�?�rL�O�����q�z��n�O�_wjT��q�9�6i|�S��s��kN�g�iD�<A�	�l;�F��H�U#�T������Y��-�$�T��,y�'������^��Sx��{���XRx���m�~"��~#w�"t��)���]EH�]G�+B
�;rgR\���{���#w!������b��4t H1:��c�mI�]Sx������e::���W.����n#�8s�u5m����gc��cc��_c��[c��W������������������������������������������������������������������������'7��������7���xpc���/
n��=�-�����?�1���G7����������>�/�-��)�'���9E��!��m�n�H������S�<���-��-~t�������:k�;#
y�����x"F����l �1����:)�Y�<`���0/�����L��2@�%$@��(���0���"y���H/E[��H�< ���������H��D�k�+�>����kP��D��~���?�b�Z�b9�.BY�YJ�B
�S%C2 '4?���~���>P/���
Q^Q�	%�C�@w��He-C	�7����!o�i}��N}��������X3���-�d�3mPY��N@5�Q��<HM~���doA��������\�.�"�%8�cAN{�m�v_������^���&��|������W$Q�!JnU��{�2�j_��2����w!���	�Cy�W "�^
����|����v���uT�L����B�+��,&c��\����6��D7e�,�K���4�.��UDt�eB	�?;�EO���Df����Q��.2�����l�8CO�T���_���hW��y�vw�}<3�h{
�+�?�g����Rt�S�w���d������+�������a_-H9�.��/KhC��fV�yY
�v.��:�������0�zOE�4��I��5���H��
K	�i;���%�xW�M�p�B�f��Uoj%/���2�%)�$P!l�R���{��PO�f���F.>�>#���%x���$���H�`����������-j�2�)�]o��/H=)���~\�J������5�vi��4�!�<Cs�GE��Xh@�+����c���1g�v��K�����P��.�px~#Rk����G�]��X6��#��c$+H� ������'�~��L����08�5y����n&OK�$�`H��������%De0ma���C�S��^��e���K"�$K���=,*o���H==��n�h�n{�{@�;&2�C�o3u��7�������NN'�n�$9I��P*7���9��EDj8j���?s�
��n�n�;d�M��(�]g���v����v��
p�s�K'���NDe0�����D��N7"�Q���0��d'W�E��2s�c���2m�z�D�����!xW��j/��z�p�����~]��|�#dw.�v���a�!�������0��[Bv"~G���UB��@cq��o��-m�I��3�pq-���w��f�xrH(&aA�J��'���k�u�0��uO����2���*;�w�;�oJ��H��#����%��#+v!����'Y/�@	�I����;��������A���kV���������$(3�)eX�c���F�c�t ������$��������<�L���F����c��c���*A=����>%!�5�}����,��_�Nt$�?R�
`{��x�v_�s�"�kt�s����:�|T���3(�������5�����>����w��J��
����8	h+n�ejK:t�=��,%��;��j��oC��P�j����"�Y(���~��[������gP��>���V� 	�<��2U�v��r�Y��8�����wE
7���h���2�~	N+B��J�����!�D!;��1�w!G8V��Y����O!"�\$��x��sV�@c�F7�������+x}
:a���V�gc��S��-����-#4r�N��G��;��y7�n�\^lZ�����R��04��m!��b���\L���Q7"����g���$��P�qB=�Cf�%�����XL����+���!��W�$��84k�d�������&6B[F��k���w����G(�"5R)���N����Pf+9��(w�4���"��Z����k.~Pu�1��@��F����x�
�[l��?GdP�����$Z3�!o����	���;�Z����5M�������e^�+fB:{ �Q�Y���}$����h�8w�lV���6U���vn����]:���
$��g"���"}���~���e�����#7�M�On:�HR��{�|�l�p�d"���XmsFlDe+}l�<��VF�U�|�)ly9*��_���
�~��99-x�G,������������Pq6���L�k!���r�%�D�c�U����6��	z
q����?�{T}���5��N����F��&��s��u��8#�*�8���-���A�n�qD�spq'��8�R�U:�
�;�G���C����;����c��q��5!���!T������V�$���1*�������O�������H�s����V;nxFE	V��$t]�!���� �	@�R��|r^�D�vA�0�y�C�Y���)
0�Xq���e�>K?�v���j1H�B.������������VV=�l#�
+Y���B�xW��Ck&���@�q ���{t�_�K'A���&T��������R��[f2�g�PV���z"�iL�?�	��=������������X���OE�	x�a��H=m��NQ��u�@e0!��D�s�Z�q"A~�%��T����Ds�P��8N�6�v�HH�]gcmI��I1���=VH#`3���AEm����^��D�L?�PP]��6/���T��h���
U�����aFAi���I�9�Yt=���q���;��_������������P����I�Q4���,{�Q��*6���W2����Dz��e_P�v���i��^��MHe���i�[P��!�[v���M�D�t}���	g��J�����>���E��]��M��n}
L�p�`���
�Y�U�C�u/2l�7t0�Y[����=!M�D:��/NE��&�2?�2��}A�V�mW%���m_P��?f����cBQ�K����O@��&����~���/HJ�-pK�gv�]�����2�>��
:{0���93_,����N�h�;�������z�
��O(�+����j�g5�X���\��`�.��&$�=)v%Pq��������;�JY�l��JP�:;xW$�8�������T~�%2�N�?TAK����������yj������`���S�He�PqR�����:��L�,��o�~���De0!gg�M�Ee�������C��/B��X���������;���W%��Q�d0>�fE$�[,.�y���|J���3�g�����b��
8!����d���m<���-���������p�l$�=B�z��e�Q��V�Q��u>��(U��Z��WqH��=�wE��^#��i��Z���*V$ ���FvK|/$����?�JJ�l��e��T��e	I!Z��
����X���������}]De��e��f�6��T������bB	�g�Xc,Y=�W,c��t��+�[�>���	��X����3IhG�����l|��(��0-{����f�e����,|����h��#}#�UA��|>�(��E3����_�����0z��t�Z(?��}&��8P%�J����*��j��A1{��'������&����q����{�{�0�����0���������o������F����U��~g$.�����
M�M@��<_l�3�t�2h�n������9:��8��6TK�*�C5���`&���u}|��#������;���9�
�B�NSF��3����	P;�t>$t2r���?"�����.�'�H����'��*�
�.�6R��|��<V=�&�*���}.���Wf$�a�W"�������x��Wf$��i���4'>\����j�N{)F+���<�D����J":Zynv�>Z��f���yO��&��9��*Ckr�4��j1F��-(D��\4H�a�nF"�deZ��yW������x1�w3�M=��5g�.���4v2�wm��`�f$���B���&�����k��0�����;P)(d2�7�"�UO=��]g�C���%�	6DQ0�uL��}�<R�K�p���A<:q`1�	�8��<�y�1bxp��
F{��*�q'15�wE�W{��I��6�t�N$$�u����(����;=�7��>[������Q<6�h��Q��ML�sf���L�jAx+>
6�Bx���v(��(���9RE�32XS����x3*Q_5�7�/lif����`�����`������R�������k�#t����\��^��#NH�X,�����\�f��'|WH�{&���l��{����s����9���LF��s~�55p�"��Y^�^��L�f��*������A��2�Q�7��w�2D����0j��j���H`����_X���Em�����	����Y����
�k���ep���Q\pIVpx����z�u���o@���������`s;��L��e8����GuF�����5���Bb��=*:��jS��b�6�_P�
S��.�}Wr����������+@���������N����6,(Y�_�����p3����WX�}e(�����.���UfS����`M������;c]��l���|AKvo����v���rt�~���Q+�>g���n��vx���#��:4��p�5j��y����?0��DW�Y3���L	�+J��rm���&Wm��_�D�Y(���w��M��)U�G�7���}C~�Y�z����gd9���f�Fz���x(Q���F\�X����{r�&��nq)�a�QsM,��1��G,�u����P'���zce�� 0������� ���Z�==t������O�4�	_e�47�������<��� ������3����^G%'����wK���fhT�o���@�M�ry�/a�@���L��04�w��}}�����#�+p�|b�y�H����{�b�������NN�ON)~<m8�����W;O13����"�� ��
��-��n����:2��}�c�4V'�B.�M�&�p���JBU��������KL���o:�5��2�_�Ib�l��V��)`G�P����%��Y���$��\��<pV����Nt�q����LI�e���FFgs2V'��Q��EV��^\��
����nF��3�4q�
�]!�f�X,��Z2t��Tb��4�@�j-(��k���^��e`,�0=�
W#y����������y����H�MDK@hp%�:��s���� ��r�����+�d�R�Lz��=|eJ�KTwG�������&�|gXn�����=����b}�0��3�����=J?�����PB����*�8��p���o>��r(�}�_8�z��@M,L���K��9%��������r�#���0��{~��`V<#O\��$D:�d(�����#���LH�x9�u;��
�|�v�O���)��H,�R������Z}y�M��,L�)��-7��@S��b�F��V*�b���)��bmAp�b/���X��c)p||���:�VV��-��i�lia%"�B%�Y�&�!��;�'C��5�V��i�g�w��`W�wAZ������V��f0taQ��Z�����P���L(3���Z����fo	De�
�-V�Xb�x�Az���"d{����S�x������)��n7�z����f�������qz��@'��^��	���\p~���1�l�uf(���7��o�Z���M`����s���0����ZKO���b�����]�+hbJ���w���'�V4['�fM��1�s��|���S���J&����(���+�U+f�D7�8b�.����yyF�Y^��_7���S��u���X �r��`�n���Wc���e�ve����S�`;��:�C����-�'�C���Z\=�Oai�����NGFFD��$W(��|�@��:z^�+��6ca+�8�o����(,e�0�\_��u0�L&o*�f����zEZ��1��e�*#��nl������1sp�E(���2���\���7��$����<E�h)�V.���H��t��EDF*rh��g/�	��:�����9c�M��U6�@�7k��]�����"�"�~G��S�?a����2^5ma�&�9�����������fOG��=�E��_G��|~ah��>�v��������c�\Y��^#�d2W�DU���!�}B���X�o�Y\��Z�/u;y~a�j{��j+7��_RSsR�,�c����9����E��[D\���#���_W����I�H�6<t�J�3���P�F�y
d�z���s���Y$���4������e����[���Qf��$���t��_�>���>o_�P�~�c�L����T�����@�� A����.�XhE�~� �v	lp����z;�.���0^��c�fcsUJ������o�UO5���+�
���Z��R���d�rG,�����?P��O��_����7��iB�������Z����	Q#�����mo���L�`.%�.�a��a5BgBN5���`�z{��X�~��O�zk�X�)�[��������h^�2�������k�jk����D��=���|8�;T����rC��~��Ae���V�A����8����>��Zd�z���$=�A.�!D;�}A�B�c,�Re��k�_���lp{
�=���h8[X�w��k�sCt���j����!�b$�j�#������i|�P.l�h/G��n�$�j�#��=����_2	��=-��/9md�?��~��1�1���~Z�t�l%~]n�2Z5d��L��t�7���4w��N���v��� �1�����d�6�0m�wD�-��iB���c���c���e�
d1����vm"�<o���Z�K���^D�F<	H�aN=c�ch��GsL�NK81�1f�r��7Bt����Bi��J|�=����U�_�j1�<l��,�@���f�%���Z�,�d6wM���A��e��#���)�U�)s���|?%�/le����F\�g.�[������[��\-�1/n���d�1����V{�[�����y2���c��UF�0��(F<-�aQq7�$�	����=��=/ Z\��d����H������9���Ql0g����gW��>����>������Ky���8y���	�9A������m4_��B6�Qk�RO�.����4�+��%��-����7��|j_)�Y���H�wZ�D�[�3!8����c7� y~aZ� 31�����K���]3���h?�!���"����![sB���=�3+�Q��������I����
�\�}����q����3����W9�E3l��Bd���`;^�@w*:��
���ZoMR���&n5��"�����os��s���Tke������N����V��p�A2_':���i���t>g���_�7jl<k�K�>��/�Hvi��7��m�'�|h��BF��\�`���7�h�
sN���HNN>���}?���!"��:�P�V�py3�������e���m�������K�a)�����A�$�IO���|���`�cy����v�+�����
GJ4%�tN�N
�VM�$6m[y��8��mH]=Q�OD2�����D��I��� x�hEpyi@�=HCc�TzH��gR��� Kl�M�,�����'eb�W _}[V�0!��@)[�?u������{�WH��{M,��s������yC:b����7�{���Zp��M��
����qpC������G�B�!������q���m�ph`���1jo�� h�^��������������b�1=Jb��Q��R��Zo��/���S,�kdA-�EG*��bup���i�����������g:��'�L]��l�q�� ����vC���LCaBx0]D43+�T��l��O�2�E^f	����
EI���k�1�b��e�[�8�s�J�G�:r�������P3�jW��(Uh�L�����4R�*��
�n:����}A��B�+����i��	AGbJ�Q#�j3L�~1�\T�����L�����<W����3}�s� �:��y?��51v��Ls�@��vP�d�7��f�7�X�f)Z��?�Yf#�2�[���-sa(����
3���Gt����aN���q�j�w�'��f�wn��+���u�\�3�{�G�0��](S����'� �`���a�=���/>[eB.�>�6�G7�	���`�7���0������a�x�r4���a���0����0��n�0����a�5��rqm-��j4^���H���m�X�e�1���y���f����,nS�L��m��wF��w:vn��jN�\�V��<bx�X���Fs���,$�q�D�F0#�809����V�EpS�9k
�|(A;N��8�(]�����&��cy 8����� Q}":<�I(�����z9Z��e��xi�O� 0�H�)��������x�)T���T����x�E�>���(PUR��9�Q��n��{xf��HVN��o�~� ��c@W_|Q�
1`�I�v�B?o�Q���������,}�u�cQ�,��P�.�5�a��E�51�_�z��<��j�c�����������N���)2�s)"����D���y��f�u����E�:��&�e��x(MI��'[�G��������.�`�J��N�+�#�	6O��t�Ia�M`i�g"F����?{�U��i��&�Zc���-��4��>���\0��y���a�������m$���=5��4��B��:��
��Y�'@#��]��r�
�B��������C�k	���_b����=I?X�����d���S�!?/B_�e�V��t��������A��8^O#���h�����J���}�X|�=����T�q���]V(�#�V�I������|(�������9� ��t�������I��nk*C��3C)����� ��x�E�@�F�0�>0T������D����M�7����3���������/c�Dr���iRD��b��I,����������{g5.���WGO��o��!��hI1\�c�Q��B������
����:g��y-$t�{�M��|������=��|�f_.}��Pl��������@����z�����l���d�B�<����cQ�t���9����_8_�y#�9�5��W�D;C>�� (��W�Z�z�-������v��z���n����MW&�"�9z�4��=Q�jY��a`����_z��z�{�'D���]Mj���Tx��)���'KY|�_�gRVaN#������W�D�G.$|*����8uf��8�P�-_�}�,[g�!�sj������R M-����'#�l�f?!����e���+}�MS	|�S��JS	`�7���s"��cI��84�4�#� L�'C6��f|�$6�������i���\�nf�]<���7�r��]B�qW�+��90�;�����v�D~��2�zs����	�B���w���{f#��)2����3+�
�<!�Y�=H��Y<0Sp�He���+�zQ��X.�5���c�����Y{����>3hy����#V5#\Y$������$K��q7�Y��b(,����6W����
�	�9R�<�#uD����"W����o�y�;�� Zm�M*����y~�)����]+��tMe���]sf���2I�>�EH[��4>����q�K&	�#�
YY��1�K{�X��aC��o����q���+��)[m�N���c����j�:B��
�/_a��K;�K]|31�
G��@����]����j�t��
��G�Y<a"���!�IBXK��y���&o�Kb0l��������6L�����l4:B*9[����e���'D��F�p�Cr���k�h�A�)��k;�M'�g�yg$��=
�y���������������W��w�
���}�x�t�z�+D�W\s��p�tE��"�y�#m9z�3����/������5����w�������W���
��|�{)����j��-[����w9���N��.���T��x�1e���1�cMe��;(�����*��Y���,e���������4e��I�j�w��8/��?��\�������D�}���uZ�����?��M.���|�����)�v�_M6/������m��^~�����?�����_���?������k�F��2��������y�	���	�m��y�)c�._
��Y� sQ�c��Wm�9�"�h�au��t�1���
��� �/�i�\��i�mV�H��t���(<"��Gn	e���V�������M2�'�b-���"���q��'��+����r���UBD���Ym�:�R���p����0��m�^��DY�Q�|��='&��w]x�8�[�8���7���L�����M�`���t��f�^s��*��+�`
�9���C��:A�QiM��������XC�����$��D�������(j�-0�E�C��z��#y�O%-��-X��d*�~���9�Q�8�1�QE�AD3l���K�T�H�@��rV�����0�Q�uK��L�\��o�x���$�����-�9)���Q��}��8x��$����h������g}\�)`����S�13k�.Y�u��p�&A�?vpMR%���<_�zw�<�����*��x���58{���d������
`����$Yr>�4���NS�n��E����E���#��".�L$�
8�3!/�@?!k��^z���+��O]���|c$*^H�G��{E�a��Y��}��nN(���I�����io&`+r��Motk�������h����L��C�SQ�T�dI.��~%�	���&ac��U4���6��&"����E-\dR-������ROj:1�"~�-��'��;U$@6��d���O{�M�N]�K��o�&�V����Q�ux;�D�
��<�r�Z,�+�B�!9����u��L��|�d��S���f�[��,�����Q.�n�m�l��T���
f�D���cE��[�75�	��8��|�z�4�LY�F5���~�
����8hQ��>��C&.<-��z��Z 3����z�h!R��-7,/N�r�Ncv��g@� �9��x1DQD�t�G���D#���BA�wLBPV�������{hJ�$�\�:�#J!M����=��������<rh�����I��������fw�Z�h��
hv2��L��Y���`p%�kn8�<mi��q�<��S1��h�;�\���z !T4�c.�5� ���?��dq<w=!�Z9K����*�����VXG�Y�clij�Yy�UB��ox�Z)�����������x4����)o�EH$���:�~�)���n��������Y���U47!4R������z���oA��	S@����t`�7�@�i?V�On{$T�@X%+�b�#%/4���N������'�Q_ '��-�"��+��w��&��%���2��"������d�9�]����2�}_y�>���Ze��\3�wt�����D>�|��k��
�O�	�)���Y�ur���	L��m���2���-V�/'t�!�hKJ����a���Ee���IE�p��S��p�d��HCz"����l6�z�	pZ�����]��E�By1���5�\C��`��VQ�E�����������`�8b�^VhZ��c,v�����>�Rt��n��}DEt���_q����m��������o/&e^���KY+
D���{y�Vzhtey������]2����5#	}�[���*-�M���p��������	h�Srp|�GY��<��G���Q36	�5>0493xO"j*	�<p�c��|Z�����v��z.�G|:CDBk	�'_&6j����qvo1t1��Gq�<���bn�a l��4y���/�}=����g�{�p/����PBE	���SO���A��L��<�8-S�c	���kK����z��l�����`B�L��B����6��['�0�w�<����h���DP�-
1�u�T�B�ln���KR�zq��`����G.s8���0d������TV]2��|���<5i���79*U�<��jq\�Q@�
�vZN�pqh�+j��8<�E2`�R�L��5S��26}���^�M��g@��;|�'#�RE7�\V�@�mY
���&���z�
r~�/����8�g}�aD�F��������Y�Q�X&S��0#�a���_�U[}��ss������z�_�z&�%�/"���70����Q�sSp�u��"�izb�]������k4������2H����>;��c�n�c�f?����"��>��h��,��,mzG�ibR��pO����f������C�7M�a!��z&S�#�_p�����;�����
U7`�n��u{���>423[��wI���t[���T��\��)s���)h�
;����#�� ���%ZE���E���Z��c����E�'�L�LCp����l��4i��,����b5%�{��i_C�m�CK:�����$YR�����/����������<���&`�92�8��q��	,�a��6����	�r������t������tj�2��%����|Kh]ad��V)���TIS4A4�&jX
qy���,I�k���	X���|]68$�9�����������3��Fs"q�`���������fOhH{c�c��4������7�u��e��q�$,LY!S�Q9�p^���C��<x4�N����-ZAX�ce��'W�������Z@�;�O���w3������E��
�9�x~F�����D�;^��g�W":�� ��R���X(6EY&�4�T�4�a��0d��"S��4��`��#;@��x�t5E���������q��X��q�L��R�i�����,N�$��rm����k���`S��~�yU�U"���9M���C9����=��+��7;8�?�pR�t��p��b����L���f��8�m�OO9�D���4�`����	�����qh��KB�|��0r��a`�Ud��������BB����
,�;/+[d0�gZO0�D_E���g��}�������>�$��PG�������Er|��qXz�.N����I7�e���LB�n1/��	h��K�!����}������M� �F"����%���J�Z6V�xJ*����SH/�����Ck_(��F:��~/�OV��8�VI7w�}^,�x���?4�L��+�q0�
�O��@�KCm���S�X)��Z@QC�H�*,��R���so&�B3��j���� ��}�����v�fTW��Q�67A��J��U$�����(��;�qH��,\�9lw�M�V4�����-�� 0��?����0,��s�Khww�V4?��sC���bS��0�v����iX��>I-~^d��F}8p<��L6�����OL�^��U����Su7���/�;�o=(��H �7�e7�;��a�lT�3�����(`]����&8������
=�\�w4m���(d�����G���L���1e��|`:�OE(*���b�*��,�sW��N�,�/>xS$��c
QF���c|S���"���)�G��l�:�B\��y�D=:��L��e"3�1_��rpNWE��d�6I,</&���FO\�������N�K��`���h�U���r��z�%�;���.�3w�9��p�`dF�
�R���������~S-�������\�N���f?����%��\��y�B����ga/��[{3�R����8���
88VY�+�l�VTY������uY,l��?���X<�h?�@.��a�.���A�v�2\��_T����ff���LH���&�M;������vIS��va��D��s�	M)r���X�C�e��D�'V`+Q�X+h[���F,D`(��'��x"�@��^L�i��: ��}+k�V���� ��z�"m�4�t�y���"l�����l�����i]�K��`��0+�7���q
��S��������@&�n�	�_��H+X���>?hAt��~�u�s;����A�;�$c��"h�h�'-���~&��[�-�#0��L�sok!����P!-�U��g��������#�n������}����"����g�p��e2��P�v�@E>S3}[j����w�&s5_2���[f�f 6���'��` �OE�Y��!����F��;6�{�|���CbBV}w�y�9��;�>����{�fN���-��,�tjz9|�����(j�"]�M����6gg�j2�1���0�"�Cc�8�P��d�����ka����7��Gk.�`[�(R�{��)���{���'���M9�p�]k�Z�:}�EO�~1!W��N����?��	������
��x#bt�q�);>���M�n��"mR����K�h1��ya�/y�[�W��#b�P����zse�2C��1�>I�x�2U�@N�_����)���sO8M����[0+��Q+���ll��]��8�n���"�����UO��(
��<O�e9hH~��Ci�L�YV)������{��W��%3/��dZ��x�l�&sb�SI`N3���!�)�![�O���V����	B62�@v>T��%��4y���A7���sS�9����\WlE�:W�Cc���.��I�
.(�i����� w(����$y����s��$�
�~\|o�;�G>��#��7�����C������)�F�����0��>C����y�f�*��xK@�9��j
Q+�l�'�q�O{�`��/�����q�y�"����S �q��3��5���I�g��e@�����NS{bSyY�q^bjJ*~��K��O�h�8|�7�@��`���9Km#���,J�����	`���~{����2m;v: �	�7'v���]O�\�v�l���Y���4c������	@z�����~g����D!�v����'g�6��������]���.c'@x���?5Y�y�YQ��)�t2��q�J�uQ���Z��D-_��@����E��~ ��v
%p�g���c����.��u����y#Q����o�T�V<�9B�P�}i��o����Vc�:���J��O�NR������,�j�'��A�#�d+��&,�p��;���������2�}�fQ0'+�:��t��kkYf��-b�'�=v#�F/������AY{���e0���gXa��{NN�{#����jls�x��'0�-�O�MGr�Y��j��7s���><W�'�s�R��s�F���)���
#�'��W��_��ue��h[S�1��6:?|��F�����w+h�
����a
�i���~��[�&h��_EF��z���}���OD����d�0�w�r�p������N�c��n�)#�=Mw���"�����)��t����taK�.��L ��nX���V��uCi��6�����E�?]��h���Q����l���&�z���qh�[a�#B������������^(�=��^<o$���U�i��W�
S��<��c���3���X<���XL%�
F^"�q�X7^��B}b���)���8����&�8��'P��'�m�����@��g������W���oG@���}�1>����o���	
�V	I��!������K��;o|�q�:�����a'������X���X��<w�*Gy6����
�Q��	�WV��7�����{s$Ua�e`����J�|h��?��,�)��1:���2$^��]�:07/���I(��a�*�cy�E��3��������*eB6�.�h�b�;�4p���LM���b�*�K�r��S��qi��y�8;z��2�p��<������d���OO��K�������R�$"��Y'��|���P�~��;�^
���'�<�+>�]'��V��������E��H�tK;�����5�� u��)d�q��lx��S p�!?/"��b�6��2GHL�u�y��naP3f��64$GXjq�=Hh���%�GV�L<��P���Qs�q��`�h3�����5��;�L���y$H7�KI����A���bv��d��<j���*!0��9��<������7z���B��%����O�~D"�������U
��k�VS�D���{�u��J���j��%��Y/5+2��G��x�Q������``}�n���1y$��s(IK��{@��`g���BP�����v������/�ygo��"�����{u$�	=��S�5���(j��u�z��������O=L���_���$8��r������"�,��t�
Ddv�������f��YB�H�p�����z��n���^��>��jAp�(k��=�#r	�J�D���2�����b��������i.�xJ�}�l�C�P�������f�;����4G�T�9���&9t�y�)���)�w|]��;QT2eh�h�	 �
����D5���������,��GBa
��q�t�J���h�`���/�O-���F2�$
B�vs>��L!S>�_EMU�t����%�Q�\]�Z��a�%��8�M������]G���f�� :��uS�������_���$�4�n��|-9�L��������fn+J@��\i�J}�_:��ND�a�p�.��-oAq8Adcc�n� *������~[��}�z���GtX�	@�����O��#D�8�<dc�����}_(��ZX�o�$���j���C��w�T	th����������o���F��/�hz��(����U�(�sg��f����3�`�I4���5�%l��bK����>9�������6����"��b ���/$� ��u�YM���H8�A�����X���(R}������")������~��M$�_K��c��k]?��� y�y��kEQ��U���"�-
l�H���}!	�����7D�ml6�`%,�f��I�"�9K�l��g�lv��Ut��:�LN=}�����d����r���Y� ��������o-�C�7K��'$��Np���
��\9�-_�>V&S�-0���;��C
��n�%Gy���;��?�c;�YM���n�B��%�QK���������0
.|��pA�_�^�@�����\^����}�z�_~3NZO����	��"A>�_�t�x�v�1i���m���1��Nf=,2��"����M[mL&b(7��3LO�A�`�@>/
����ij=B�.�&,E_��H�]mNLE���U�4w���k\�i%- l���J@;���L�NHs$@Tr���.,���_�����z��4-��9�3�����f���3i��^�f��p]5�W��,�����<�����%j�K�D���5������������5g�"���s���-�I�I��N��j*��PYL�:Y8f'bo�6������5�H��T3-K�W�,�BR�r�Q��}�����y�`���{"�O.�(�K�=����>.&~���Y�IjS�e���k�^�>?/,�6��#���e������)��������m�sA������t�P�W���Gb���e��������;u��w�������}��O%Hz�I�8���!N�53&��Y��p���+�����8@��FNn~�ly"���H�=���%��~�w�N�dY�Q�.��
I1%[8����.��������S�tq�����|��rr�C����Z��-���5����~$g4X�2{������k/:!�d����gb�/��,�E�DU���6U<��?r������l^e��z`�]�3W����_��k�k�6_�����������������o������Y~���.?���Y+�G�y���2��8��:�����W��\q�#]9]���
��v����6�7���������2����LU�������y#Ip�|';��'6��h����/7���Q���d$���LYv�8=CfT�P��s�5��T\�:���\�����_�r�4�w�DJ;�Z:����J�����p����#S��;~S��G��P��E�S��:RE[�3�A�7�A�����<{@�Bm�^7E���x�hE�;S�v�~���B]�%�e���g�z�yD<����yC��C�7�)9$}c%��r�Zz�
�6���@����RM��+s�e�<M�y���t�^e
���%��"l�+)�{���nl�@�$�W]�+����O�����������3�V6Z����8d:3��kp�hE
@�(�v�V��y��X7����[�L�<7�N@��hC����u����l&4�$4�gAZ������k������M�'��l�C���9b���b�m��M��'��3��Ly��=�c���^f��`&��
~���c��~����3�)KK	����E�Y���uI�1�����
p%���"��h!�]�������	�[7�@����(��n�H��M������,�Z�����d%YQ���E0}.K�MiAM���������f2�C���i���E�z���6�B7���D��UU]�����E��1���LjE����GG��?�"�	uF�s�����V$����e��4�Z���6u�O�F5!��2jV��_2�5L�~��nV2�f���(V,�r�m���a-�I���o���]-D��E�tN4�1fU�A�jU�r
�i��:5x��s���=������1��iL��"��L�[vLc]�E|i%���G~��9PnZ�yx2������im��wh��H����r��7�"���r�6� i��4�y�z���[���w��
F�9�O���=�U�=�0]�V�J���O���h���+�zE��*
Z�Z���g�*�f���r*J �9\~1�w�Bd�����p�vp��c!��!��n6]�zF;O1��������m�wU}��
����/���v'eYv5�K1��^P���;��g��A�)�Z��G�_�|�m��E\F���2E���]s��zg�c�J4W���O�~a��[��#����Dj �b���-���:���N���6��
�N��t�Qg���'������9\2�2��_�W9)��f�8�Z����y���+8�#�����g�/w����5Vu�������G�nZn�|!9Y[��C������E������+$��l=��\�,�Uzl�i>V�%-]b��9�~�sBR��#����(��5�j��+��Vy��K����8B�hQ��&�4,H�V�q"e�p�5Q��JD�q�5�Xl�[��$YO�L��R�����c`�K0����Ej�`�>?�H�Z�sC�����Ru���E��2-�.Ox!9�{w������)�i1$n�����{����2�����+t�S�Os�[��|�qE����Q��6y�4�P��?y��'cJ,F��X"\K\��[(��,���V�h�5J�,>��1����?/��������'oO��`o�]~j$zF��08�R�5g�h�����w����&��x8A��%z|A���j��e:�BZ�`�����#�H�ie}#�~p���7%$��+������"9W�?,�����
��0rl8�����;"��#V�F,�L|^@Up��i9�7T^�2��AK!r����<����X0G��;�k��LC'i���E�Q���IP�����I8q����%��9s���L}����	���-���U?�����[��t���X[���&x�eN����.��aOD����`���73���s������S�WM��%������F����O�-#7F�L-	uS����H�wT1�I�P�8�w��,#�Bk�hV����9PqP����Q��F���yH��z�z$8k�b��xk+x�H�.�����6=�> ���k�ToD�-h���O���H��J������T����+S���}
���L�9�)��y�q�J�����[&=P�fx�]���V|�����]������suO��F�@���F��/}�6=*|���^e�U�
7G�����PJl����;XN��:7f�N�e�������t�=�Ujo&�ZoY����
�������I.�vM0���X�f/�T�c0��Tp��a�`&���[7�<�V��G�f"�`m�r���)�� Y�8��q�L��Dd�9xL�0Ue�Z��=���+w�W�>I��)CG}�6���9#������y���r#,H���Y���R#���7E+`���h�����"��c�=�;;Q�\��B��O��Qt/O;�&�����������p��Q��KN��~�|�h��L���N���QE�9p�,�K�T���m=�����:Jj��) E��}`���������L$�8C-(�]De:�S��T��n�Mj��>e2-�Q���<N��]tT�dZP)�]�@�BE�����]j5�Y�%��s��%Q�d�#�R&��>�D�b�"��_��%I��s�C^_�<�u��������]_t���OB�����0��I�S$�LND�����bj�����tC����]��T��������]f�]�yB�����FR����,��z>dA,=��A�A-Wf82t
���g������h�������8r�����%1*z���/&��\Q��(x��8k��}�p.c�pK�^H�	�i�u���}1�I������;^��4&���oT
][���w���`��2`��|��2Gy
��`9?0x��� -]�����ur��HA�����	�@t������<��t��>�96�����V�:K
�����2_<C��%�1��x6yER�S������<�X�r_:|�9`��F�2��N� �U�����4���y�1�'"��*j�E5M��r�X��"�n���@�
��Ijs�M�#9���D���{^L�M,��/w�����T��5���e���lW$����=Tn�O���d�y�U�c?3J�;d�������Jn��I2Nr���\sBb�K��?Zy�`���yJ������4����o�1y;/H�\��[z&��.'r)����e�C\o��8��T�b����~��o�w#��q��M1E��L�o�%�M��h_����F��Jdx��W=�2C�q��i:��P#�B ��g)�D@E|TH�l�������+(���*{���#�f���A=&�QEf�6{��(-�q���I9��4f/��w_�b����2���6z
[���u��N�v�"	��S�5��~����Z��.�l<o$��		����+��MD��d�Q �9� O��
�EfL<G����2-��/���%��5�P�+L����%��)}I�
2l�����I��~3�r���1�����y�H���k,p�T��
q.��_������zpgd�d��a"��a�S�W�����G�����,��~&i���&���c��n��oS�:uH����3/#R��*N��)���a?�Dd�;���w��EC�c�������f
��~�)���
+�DvC��+�����ZaW��V:�I��������]����<�r�a�l9��E,L�
����hu�m	�)�8j2��s�'@����"a�7-�����o�����md�$.�iI�����W��P�N��Sh��'b��������eWG�t�U\����4�q�n6����"�F�����)DY2���M�=wZC�@������L�-���Q��I��g���rOk���z;$�G�X�T�u�����E0�6�V���t^z��F�AFE��q�:�����-��zx}�K=o��A���a����������X�0��u��Y�O���N���P:i�ZYB���M[�]?j9U�8wZM��'��g$�o[`�]>'�)�Bz�{t�"�QY�+��'/�0�:������Y�����g_�A�3N
|!=����K9�]]���DeB�#�6o���_�K��	cz�{f
�����@����2��UY����C,�?���{�A��6b���Yj�����,:�)�j�AV�	����'�����?�{V����U��!�������]�[�5����Y^~y��Y����Hi^}�
��j��5H��l��j\v�P�d�e� 1!}�hn]k�T�X�d�e��Y���>����1Fx�	�sd�.���.�/1�#[�����cs�$�GdDd���f�M�^M�?81.#F�}/(V��I#D�/���/�h,�
zk�J��h7��tb�0mM���o����o��]v���<��CV��n�t�(��ge�w�j����Ue��:������2�;O���Fy����,|�	V�4 ��l�84LQ3&�F�h��X���M��>x�)k��Cy�i�h�3B��:#[�`j`���h����c
���IN#���G�`�Y����������'z�9#�y�v�����H���F���6���V_���T9�C���0w�����	���?o8��^	k��yr�]2k@��Nr��������$��9��w9������� ����I�$��a�����~+`��|ofvvm���f;|�`���~�����g���<�U6��b���l&�U�1?�����:��>6�=dO��f�y���������y=���3���w�3���+���^����g��1�y���{��F��6���.K��c������yI������� �?_��W��y�?��|�Z����?���[�T���#U�j����;����Nev�����^�_!�_����?S�O����]����e���b�{.�ZK�s�z-�����C��(�����Z�>����C���w�����?j�G.����:��=���n���\ +�$��Z��[�QZ�������������%��[�=�*�����k�����W�Y+^��N"��y��b|��������������.����?\����������������b��Y����w3�����f���{�{�_R���O6���&?y��U�nF�p1��H��V?�y��^����u��,��}�6�����>�Vt/�[���alE��������Vt.�[���]lE��s�m���Vt-�[���YlE��c�-�~�Vt,�[���UlE��S���>�Vt+�[���QlE����>9v��P�_��u�B��<��P���
�{���Ca��<8��\�������Z��A���>R��h���������=z��0���?j�G.�����&�};A���7|-`�������o���CDF���L�7�Y�8�����[$!���t�D���������8�o>$��)|"���DTq&6N��Nz]���� ��'d����_0��(�����'J>�L�z�
�-=�4?r����z5�q6������QNp����6��7�VU-�q�[��i����.�>}���(�6���<����)K�}���%YV^�)2���L��FBF�D=1�����"�.[v& *0�$�A���K7��`��\Jm����g�m2pN$~���<�'26\��nh`�dQ�m5�)��],�t��05���YRYs�}�'��]�6�("�EW2d�Hg}a�Y���w"/���'%�����?�c�����1T�i����������]�_��a��<��i�+�B�h2�Ue6����<�G^�Ma�Tjn��$��j%Q��J6�]�~bt@p;Zi_3���r��$�W��jh��Vd��"�OD0nU�KF�f�>�	��"#�iD���W�y�����PInw���t9&��Y�g�;!
hN69T~r������3}b����m^��^�B���*�vv�����bi#�Tg��3�f�VC�h��1"�Y]~^d��<*J[�Zh�o��\��mc��$b�G-�SCN�E�M7�9F>��
���#�aLI6��.�"nZ�������.(������(V\~m��JWkHvc^Y�=��rUe�KSA+��dy`����
^2�dy�YC��GQ�i���v�����7�+���QQ�c*SP&�2"#C�<���^�Ar�V�"O3p��W^�!3��v���a���r��SH/�K���2��T"%j����*Q~^d`n��=y�;IsYx��	3���c�������}*��8N'<�)[D��qA���~u="��iA^>l���@}�)����2�_��_�\\UI������\~^�[���-���$q���,O��JL>Q����Ae��"\m-������Wj�,*4D�X-��P�$Y�vr��`�*q�f�����i�f�[:��I�C��'_d������`���x��N��j�������t��M��)W�D
6�1D�;����A>�S�����J�����\Wt�OE"�	3��w>=�_�����'�S��
q3hQ���_<E��]���3Ze���-X(2�?O��'��-o-�z�F�n(E~��E�L+��D����qQ��L��DI��5��8i�6�����vh��F6Q[|�����5:J�g�}���=������DQ� ��_��`hFo���)�c�T~^D�9��:y�N�?���\w��vD2��P�O�'�s��\� +5@|���Q�W}��v�F)�P�Os�+W�T2�@���q�	�zD2���N��&�Q5F7�4[�@1��th'�� }��i�����b�B��SG���m$�Q�����-8�O�K��D\����X�e�!J���e-�	�A3�K^9����C��E%@l��
�	O��*J�.��U������x�$�&=E����w������r��0p�+�pw�)@�V��`2���$��*����Ge6�W8��3r���T!����8�"[�Hdp��,��9��h�S���
�`�3V���y'��|$��M=�|Nd`f�W>��w�{L������)zE^��O���:
��OO>�����(K�����"���Z9;���������%'��A�i^qi����.Z��'�p�o����,�28
L��*Z��1 �� �O;�~1����n(>��W�I��l�E�_M�����p�Hs/�#6�����t&7,�Q�m/mz.B=���pTI���E���T\oZ3�51��T��
�]��yps�/���P���"�&���'6Q�D����/�g��U�o��W��an^tPS������n����E2���"�t�x�{7�Vb4x����]W!`�wZw�����~���f�a����4��O��,c&*?/2.�H.��w�5�d��;]�m��>j�T��/!^�����38����=����B�k.��M���N]Kpi�	�����"��X�S�$��H���w�h+�����t��vWO�U�Efj_�:�D��@�_Ui�tF�U.�M��%]���6r���g������"[��SG������X&�r��s����2���@k�M����Y��i�b9.����D	�����������	0%`�>>�l�l��"�� �}`DF��8�K�I"S��6�GOM�4� +{2hS�(�����Y��V�c������;}��'\�2I�����{��H��pbM��}�L~^d�b�(�]iD�]L�N��)g�nX� "���4~gY�?�\��q���oD_��n�]��V�3�SFt�qm��M�v�r��l����sJ����E����X�i�v��(�D�$�����x�Df�
p�����O3����f�Nj�|�C����vM���VwE}���O�����#i '�"�Q0SG^m�>���.m#;��V�a��*�l_(���^
J\�d�������7,e�my��:����_[��}y���f�����N���ML�
��q�h]w�}��u=8��L�MpP3����9~�u=1�ye���Hd���(�k�X�j��f�MRKU��<Nwe"J��S��*YYTP2�/�-���9�@mS%S^����I��L��bQ���~�6��^(�7����j��+O!S�09LOFXw������YE�I�o|D{�j-��0e,�6��&�XN��(�����O|��������Xoy����)���
�Vn�_h����+�@��p�yO
��������M�����h��"m?V�b�L9�Q���)st���P�W�	[�W�&V5�+����)O������9�g/@���7K@�{�sW�B3�������f<o$��vg���]�H�S"[�D��~/������YY]()����5��f���.��Qm����c�>��k��G��.b!I��#z���x#j�$��y��q�];�[���H���Ab�,��/��K��^�����%0W���^�V	�|�5�D�^���^H�@������>/���%k��4��d��9�S���}[�=@*�tF����qL�!IQh�*�G8nkv�s�_�/��}��YM� ��"����&HxKB^	p�$�zP!
�w�T4IJ���d���JP�q���)ah;���kOd���E���.�G��.`�M����T��f	I�B��}�������s��M�����!rD���g3�9&UnX����������zl�O@3���FWw�����t[w�`j=����D���l|�����bR����f�}p����g����J ����O$:����9��A�l��><�B4������y1�3H\�	��@VW�����s��)���!���wM�e`�:�(w��N�*�=(�%{=�>V��WO���u�{��]�������_��A_�k�lT3�.�����pM�'0y[�h�����jM�?�{�@'�#����,]t�9T��{��^��a#���@����'��^`�L������`<o4+{5'@�����F�$G�[4�����<��OR��o�����D�m�m\2���d��4��r~=�{�B[�R�L0^�@����x��k�JE`��B�{�9�p��)��	`�PD+a��x�D�h����D+�����h�)�)���{^��9��>�|��G�_�kv��w���=�"*d�
����<e&��<o��#d��2��0�w���M<��C�.��|��K�����wM�U�L����SX�$�|�E�H�e$�2bzod2�WQ��Tw
t��3	L�����}�.9�!@n�]�VM�-�z)3���(3�w�h/�)z����1#�9��&����
���H���IL��y#��5f���I��U4�u�G�2xE<���
Y������1^�C�"i�w��Y�^a��e�
�T}�$�����g)���cJ+�B�C���(��$�=h=�WP���$^�_����c���E����sQ���;����s�/�e����w'�������)7]��������j��W5g����yPG�X�2]4����1Zq,+��}KY�$�R�o-����vD��<�<�
e������P�u���3�~���\��o��g�l�\����B��H��q�1g�`V2�PY�U���������d!�����U���g�Hs/��������FV=2\-�'wrS&SF&�c���=��9AqF�J����
J����:��H�6Wc/�*���x�sJD.�bZ�_�����Jd^I�e�n.o=�"
�p]_�5�-�f5�G6��:}�n��~hrT���t�?]S�Q���NG�P�d,�'^�:�x���n���!���.@���U���c�J��q�PH��[�|�$q,7k!�~��Q4��������mI��xE-I���bG��W2���3���b����������B����4t�����'�_hl���H�CU�D4]/�3#�""M�J?zD�l��>V�A�U'�Ow\�&^�>�u�����
g0	N�.��|�2��A#R�k�O��)d�G��'��Qm�V�����8��f&\IS$���F����T���xr&���[��l������302E6��2�p�6[����G��a2���������w�R�nx�[a�6)1Q��?e��3�F@�p!NA��I����|�M�����B�4'�R��(D��IW��H������f����L|����+��nP~��4�nm��}k���_�6�%@���x_$�8�������C�����������~�����s`��GQs6��#pP�]+[QHL`C_8u��&p�7������V�����l�"t���s��B���|��Y�;;�JD�'���~�e����	��������K���R�6+_B	�G��
 ���s�Ep�������b�E&(�	��EG���&Xtj��YD���6�X��<|�$cIP&-,�����p�"T[���6K�;�(�%����Y��BkH�	������Do?�DY��X��C�5����q��)^����P.��`P���C���M`^����4����4l�M����n�dMe��X[?M,\L_�,�M&��u�6�i��
�(�����
������&�so����G��]u�b����M��nAl.����+b��`h�f�MiH�!���q�!��{<2��gd���e
J���pG{"��E�+��3F�h�LN�/kg��i~<�k��@/7���T�7��S��b�t��2e[@�@S�\�V��z;p�'��&�0#��f�.S���.+7/+d`�'�����P�/h�:�P��
BY��`�N��G��fM3�H���T0?�N�����2�WY��5P�����Jj��"�DGt���'0Ek��M������14���
����%6B*��Z-U"�1��v,��D��^h�����w��F��#)/�~����S����GA�$$Up�!%�;t%N{�	�+���vm�	����:��-b�`�������Z���~ha�-�[`�l��4TF�����%�Q��%���l
I����2��~������M"�:w~;���+?�)d��C�~zn.����~�h��n^p�-�d ��-�HZ
Kz�K��ht��}�&?sc�t�������M#|���/����3:��������
��&�����3�^hibA�nh]�/�9�,���-���3A_(��^M�_*d��!vt����)�p�k�LC�I6�*�"�l�#�����(��C}����ZER4q����3x��7��w~�U����
�8(��N�����O�JA��uT!S���B?��i�f�/��	M�������q�,����o�M6"Y��/d�cD�\.b'E�[f!�sl���C���yq��h31y,A�V��L�`1$1phLD�(j�"1�&w�bc�M.+B�������m�[Pj-�,�[E����_V[KW���y��S���y�c_��1�T|��#��=0V�������gS]LA<���I��Xw�kg�}XAul��c7�On���8t�Y?����K���lh���4l�<e�����������a�'���`'�l���;V3�������uFZ;�+� M��R8��D2l@q��
����^2Pst���$�K����Asy�V�:Ze}S:<�&���X���&����5�7;#j�"ZU���Cs�'?��TW1�kJ�"�r�V����������Bo�b�U��N������������9��Bo��V&�@p2�j���}d�bG$����-��a#MH�J����i������}Td���9�BDn�r�Z���x��	q��������##,n ��a���$L���"�
@�\v.$��Qd�C7/��b�@b���a��_����"6��\6�F�
4���+c���4j �v����up,�������E�Ii�e���:�(1hPd��b��V~% �h� �"�H,h��;!hP9
���O���^�G��X0eY������AQ'B��/������
Ruk�� A��F7��?'P~^�B� ���e�c��2�`�t0�R����5P���Y0u�X�6��|2�a�/d��|�w�@���]��AE�
������$�����G w����
[,	@��Y�~��AA��E��*3T��5����~[�`�����d��n_}mJ,v#��g�[�Vb�Yk�3cO��"����%�9��B�����#rH(��Fc�������< �]���S~^��2$x��q�7�L�������Y	���xx��;�U�N�XN:�C-�~��&`t�*��z��	�����]����*���h&1�+X�$�Z{����u�&���0��nl
�\��;�H��O�����n�+�)6h�����/�x�H�L~zVeY��{p�M��F�}�
6u]\6'"����xA��6�OEI��g0�]]=%8��Z�S�H��=��2kLe��#^rh��@����+�sB]w*���.���7��M�N�e��jH��W��p|����b�iG5uX��:�bN�S��-���L���CdK����<����������W���Q�(�|�f������}�5 6R:=�P��]v"-V��j���v'$�D�Td"��M;���\�
:M��E�]���W����&-q���!AA�3�Y�E?-��P�1X�Nt��.6�]L8�������6���dS�(���;�s���: ��DC':A��x�o�p�i�[�yp���f"^�X��3�y��8W�$�@Vi]o2�d����"�P~^��������F���J����$���/�Akb��D"N���b�e��0�0���ED��A�{i���[-�#�cq�c��	p2��%}�I�g�����WU���3�6g_�%Yz$��S�$�o���7L����������cg"Yf(���dF�u��Q7�u�cp�MK������TC�6W�*x^�����w�]����B��O
e������������9$VTC:�L���b�B�|��B��-2	���>G�����N�Vb�C�HJM�EH�@;�p�IS��P�S�������l<��	R�\���(���\��y���D`�	���Xc7�� �	��c�zH��������nE�����6�'Y���'�Tb�������>l�sEv
�i�aEOZz^,����&)����=�,����Snx��ia2#6����-7�����3��s��4H2)nDC:�Z�5~
���BK\4�\�Li!2enW
�)fN��TL�|���l�,@e�'mb������nW�G�K��,o��)�I�IO!���1-z�[$�7�j����r_E-iA2Q���K����%-�3�M��U*L@��'w[wKZ�Ij��L'qKZ����%%XCO��X���P����J�EK����%�HjB��bzlk��pF@K0����L�W���RNw
�4����|w��>.w���$�uFcz�����Z
�j���&*3�h��A�-u��
]h>�7�Je��&�:R�EPA�sJ.�,��D��)�t$���I�
f��,�(k�$�x1�"�
;�`�����6g����O �E�x5���[��{�MG���)�8	OL�S(��J������'��3�OJ,����l�H����E��"��T�^���'W�?��z�W�
�Xi���xY�dz�X)hr&=YNI��>/b���=�O�w���~?��~4`���	�0j|�-�PZ=��i���d�;GPd?A�;��*x^(DP~����)i�$��,�qsz�~
��}�����D3����,���c%���H��"FO4:
s�����NnB}i�.��b��Fp�V&6\�L���E�?b�Db1��5d&�x��bh����R��J�f �9Mpl)rR������]s�.\���0J�����j�i�$�����[#}^��"R�[C��aug�q�4�3�M�����`����I��7�&�wM�
����*�P�l�vtM�IEy�79xh&���"-�T�aC���tj�,�L%^,i��:3� ���m&|K�����(
��:����Er��]&#��w���x�p�Fq��S#���5�H~��+w"N�8t�L&r��cD��Y$�8�TZ��r��/�p���n�_���Ky��� ���]���b���Df
`"���~MsY7�C����x����\~^�����i���DB����b��HeHjD���'cE �\��XVX�����A).+<���~�{�:[2k2^�$����A��PL}v���Z�JH���Tf���5g�p�\����w��g�����}n�:Rsd�L<20��m����U��u���d���ikQT��*��<S����*�9K6����T�$�����|��-�X�*Mf,�x�D5c��N��8<�Z����j��s�D�F�h�1Z���wf=\l��{>���l�yL F���cL:!nk�c�a#�=������FN���KO���=M���������m����7��B�o'�]���L��������W�5|&�UcJ��}f�
�]E��}��R%�r����]n��r�|
1g���r��fn.����'^wp����vGi���3
�{��vV�$h�����~���^�n"���x/M�~��'��-Ug3�����sRZ���'������{����|g�
y��5G��I�o����j[�m�I�dR���'�Im2�������1��61)n%�58����~�1V���p�a�Io���*n%�K�Yq���D�����F�O����Hc���4A���B�3J`�n%N	X|����6]E�������2�}���D
F�����9"T[�Y!-���$����7?�����F	`����G����|��K�K�<Q��F����LA�����lS5p4��U�����d�r�,Q��'���B!_��ebo��b�H�
�Gd:��U��H|�(:�_����������tc&1E�e���t�d��O�l3QJ�q���2`X�f���Q� RM���6������}��H���	I���c�	"c6A$��Y�������'�D>��&��0�W�M�h�������2j�[��Z���\��9{[=�[NyqQ����e��*���f����uM]�UL��|��1_������r}/���[-�~���[-�~���[-�~���[-�~�b�[-�~�B��oe������Y�|����4�~��_��u���F�z}�QH�RK��(�����D����D&���>n���Q~��������������o�2�{A��[�����������/M��{��u3�]QZ����q��������������o������������A�������{3�����`c-@S���}��LD��������i ��t�$~�]���?�Zv�JP:�$�m������	��/[�E�����0k�y�~l8���=�G��/�`��+�E�����H�Jki��G���S��v��5|����������#Jr������g@����u��)��BN]#?yH�a���$���R�8Z�����|�$G���|B���d��P��A��I����jn�\�(�"YY���6�B��K�"\M_��%�Dd=o!D����1K,��9v���Y���U$���g&-�;)Y�		����6;�9i�q�MH@5c��r�.��1�&�v����(oS��^��C�^��������������Ih����������"�j��N���d:�H��\w���7@}�^�[t��qr�q&�v�m�#$`���Z�t��{W��+������VTw�k0?����f"��`ga��g��`����C%�����YCFBN���~'�n���<j�6�r���~VgI���$U�������x�����}��x���C'Xt]Kr�������}��;�
�hH����2���E?��/;�dJ7����}������:�\�Jv�{�		X(K���v<��P�V��s�d���JA�<��������Q3�'��'��N���1+\fZ-8:g�(�'3�X�0#~�=����I�4�~���CW[���L\�MTn��������D�����t�u���C������i�B��-l8���=�������'=�Jf{:-k�����h�M]��[��X�����6]�������f����L��v��SX(��sb	p@%��Q9�@%"[�H�nQ��!��_��9XiQW;�gB*����l��"3j��;zZ^��h����sd��-�����	����\�(��
IdF:���#�����lR]�U�Q�������CW�>]=5%V�������$����q�����	$�>�#7����.f�"��z�"j_�6,j��m�������H%�"~�iG��\�;s&�kn��[�6ZwA����g�Gh!#�\3p'�K���{3������\
�`��'��L�I���e�����^���� �>�6��pD�����w�$9����JID�v��a��Gw���}������p��\�����_�x����&��qW���c6#<����t��oM�<��"��C@������x&t`���U����9��L���J:����/$���n�u��bc����B��GW`�Fka81����%��� ��g$��-���*S�1��x�o"!3�w�6�`x�y1��\��F�`��e��[��/X��$���d=�]d��NN���c	]��9RC}B�# Q)8���rA��		����*�������-&{��9�/O�6��\9x6�`��	�HCz�����6cao?!�1���:-0��5_�F�{��4��&���f�e8L���_H���Z�`�80M��Z����b��;���F���v�r�3��xO���:[B�Fg�[��C}=,�^L�����KY+��FY�`�V��w�q�u�V����#�C3R�W>���QP��	5!t)W���M�kF��9��^�k>��M��e���D���V$���m��h�$8�A|� ��LD��=~��|����ay���e�i$����my,c �oS5���`a�h1b��`>���h��YH���f�����U"��7Z���U1��{|*aF�\��L��8h���)�,�&S�#6�0�_�n@U�x���fvzH:j	�����
�'�d�����:���j=x��	���)��R!(�^������R%"�0`�S��*�<�:��������������LX��T���K6d������I;V��Y�	8q&���5���z6}�����I���I���T ���c�T�u���ik���:����o�[�*%d�4!��;;n�R�6M�k���i���L������02����CHo�}���&"�V�XS������"����p|q/�5��ji|q[:_�T��"�/�gtP���+�(�Q���:`���'�j�&���}��^{F�7�L���G��iW���}v���VRf��t���Vo��E;a=!)�%au��3�h�]Lod��{���bF��X�h�Aw�����<����\g����'��������\����noV���{57������K�}o��63;��s�"[�\�5dY��ag��
dv$�������
]�)����o���:��2U"�`���^|��5i��,��0���T�mJ���N��C&�'�^���`�u�N�I���J�&{0�s01�D��nk2t~Q�M�qrFVz8���?��� ��n��`�����@X��1���J�}�x�}���Zw���MW�DD��	(����3,������ ��V!�{]$�g�'�n,�q$���������>g&I�6M�[�Qm����}~_=A���e��N����b|FmFRg6[�ew
���U"���i���b�[w8O��r���=�bS��y�l�����@6p�
8���������N@��UX���0s�����$�9��� {	�/������L>�R]G���bS�Sr�P�*����m���{9�m:M�2��i�HZ�|�5U�������]�q�\���q���A)i�j�a��B^?"k�N��=����$`7�@��9��|f����9M�����Gj��=�W@����B	�T0��F��RCl13�e����Z�������X+Qy3O�}�w
8���Xl�0��Y��KE�|�X0ra������/��g����R��i����`��X=�lT��*z��k��������.�9z��??3I2���f��� ~�4G8z[�,;�Dq��D�3��������M^H�W��J,;�!���������\��B�D4P�������h���Y�������$�B-�����a?QP*�,��f�E7��/T������u�?�=�@v����f3`�_;0p��LTw*A��fmUVTY�%�5I/f�+�(�i�
�tD�-<S����2�c�������u/$��&�UZ8�n3R�~Z5"�0�	�<$Q�n���_���$}!�m&�y����~����$x�3i����,�����G9� �XK`���n��H�f,�0�g������OZ��t��]���-����_���oZ�U����(2��P+;�$��#���LG&��t�E6����}��=�B��|!g^����4�BTdp�7Qs��s��LD�}^�?�#n����m��1�V��PT:�����n��{!�N�,/>�G����y*����7��XVD#fM�����]�c�H�Lk�c��3y�6�y���k�^H@�M�j����b�L�k�����M
��)��)������E���n�e8H���YSO��u���Z"�<���������S�pPU0�3�z0�;V���R{q�\�����!j��C������3�d�������fmOH���h�exC��io��E�U�u80���T��:�U��f�U��	_}7)�/�p�?B��#�c�w������a�s@� �a3��q~�����S^H�yEz��6h�C��)� �&���1[Z�B
l��L���n�z�v��i��~=!-�u8�|MkDu����U��e���?��y3"46��*�D8���O>�5�Y6��L���6��n`a�]/�(�u~2�XW�f,�\|.=�,��)z#���O�-t�_H��%������kT��w���3�i ���i)��J�X+l���%�
�`��u(��/��?�����+��].��������:����z-�)��&�W���+��h�EV��7�T1�������
��c���N|f�v
_k���H�c^��(�����t��I��|[����1xE?����"YF3Xm [=Dn��q��,����7r{�u3�C����(?h%j�TiS�W�<��%���������tX��d\-��������?�N��$#���U2c��'�E����b���� �$��2���{���1/���DB��QI�oAd�5,H�F����(Fz�mC�	�I���ph����Y~��	8�P�w]l���z!9#U`��m%��u%I�(�b���
����xd�s,S�M3A-�.k�j���nB��V7"F����x�����2o��E��n���*�g�w�}1��EBF���X���� �r�_z(�W<n���+�>t�{?����*%��z&�B�
1�\��� OXz�#�8��XV�_�����d��RU6I�o^6��l3l%?\Z/�*��?</L�Wy0?�y����P(eT�f1&���/�r.���X8��r�C�?��T����T�����H���;����t�����$��YdQ�dQ'&\7��kq*p]��{SV��N8kN>$,	)d��oO�!���Qsr�I���l��zy!���-/���`�/9���FG]�x��6��RU������?D]c�	���EI|f��_v+V�����Iu�d�t��e��v�?�����H�UW7d����r�1�"/���5���I+@6��7!=��%|�����_�3��C���|f����+�"���8��4���W�`ue%n�]T+�?Xe�y���>JF�^���8����� ��0.=��8*:l�?�x��L���YN�$X<LeV�GU��f�����M���!����(In��X��D��	$���K������������Q|f�K(���k+J�e�4��j��������O����\��V6dZ�C�R� ��[�M��5^"a�����8�~���+E��>3�Hy�o��D3k�;C����{�Y&��p�i����B������/[���6Q�E��p-�6o,4�H���v-d�,4�l��]�m�=�Y��1\����)�����[:<��u���,9*8��E�H����t+��WCO����#��.b�9��c�&�A�����77l���C��<0vBR����l�}��D�yl���~U��
��j�&�3ae� ���cv�%��Y�MWl�����4�Q�����0��:pB}_�������I�N��/�_ZFn:� �l���M,N�i�4j�!Y��%Q�4fu?xJi�q@�w&<-��d`��>P�\����w�Nz�J�C/�=�����t�\D����� ~�������D�$��$_Lo-�A�@A;��.�5	>������h�2����'�sL��������^�|[�RV�
.$���w�g^W'^Uf��5���(���?��~_�OM���^�X[�&���\`�R�=�p8�z{�K�g�������V�'��G�Q��!���[�"�<iI��C�����h���D�N�h.���"���6���7�&��NE�����<�'�w,�����Ob��E7t�|u&,��o8�����e���7jt��~�����G?�E���y�h�L��E�.s�'��{�M�N����`����#e��'�}&�~[�:���q�O��"���\hb&��fs�>3���[H�R��YT��D�&��+��������P�!��a7�'����#�������h�0��2s���.5�2(�|���_�j�q+W!�k�z�,b�4��y��8D�
*����x�M�BD/�	�-�De��4���c��
��N5���W� #�ZU]l2��0�:1��-J��+>*���m�I���(W>���s��@pqA��n�����"�]iE�l�e��h�����N �CGQL�|c��3���������8B�TY>�\^�j���Y��]~��h��(�g��������t���/U7���FVp�<��	���G��N�%��~j��$cQ�*�v����NY=���N��u�E4J���{+G��u�8�
���|��dy�����
Fp�"��M�[��
8u�����Xq��;��&p[Z�����\�lW!2;���V�t�9��U����i!YV�S�h|��"��b��c�5f)l��D7��'?q_s�������`���Lz��Y���]c���xm�����k=q�S��%��[�$��6�S�L����J^z%U�0�C�m�{�}E�#lC��I����$��u��:��0D����m���0�i�@U�v�e*��Y���.��}�~�"�+���v�����7QeYo�w�����-��	i�_���ZS�'�uO�b��	d?��������t����H�P�����W8���h���3��:s�Q��������w��`�L��`���'6������s�9|&�E�;nHQq��I�v���%��WE��*m
$���o�8�D�k��xtw�	H![�L�(�_%o���3�!�<H�c� ~��b�[������4H�^(d������	����Z
V���>�L&~��j�3W�	3��{i��It\������������Nd������i�h��'�D���N^D.?��g�%���yp.Mq��^W{�"�f�Z�UY��(V�y���H�z�����`p�n�U��;��u���2wY<3J26G���zD0 ���jD*]���"O�=������N�i6�(��F���;������/l����Jt BM_b����!>�t��Y��lk)X�:E9ufu �n6E��s�>��;tI�1V!�4�&p�Uv	��u��e���;y���L�w�j�Y��VA�c�K���s6�����������$�I����o=�h��K<O�r�!\�(�	�����U
D7Zu��v�����n��~su�����X�00t����
�o�=u�t��w�J�~b���~��BD���������:@���]�e����6-T�6:X�~�s�Q����@g�A������������$pg\����*�Bv+��&]�V�9�	���P�$2�������K��#/`����>FC��sN��*��qc����}W���6ol��
cRS�v��&bt��>�����@'x����-��3���_��})��S��%}��]����D�~�t��"��@5JjO[nt]V��IN���n�@C%Q4���G<�T�z�B�X4��K�;���������c����IQ=��G���=YI�;��y0���p���R���a,��$��	
����J�	{�2[�MKY�;
��[�M��c�7���;N�q���16	���������|s���A�~D�9��x�����k�<�m��/X��2�<��3����\���b��;�u��[K�N#"8������H��hbQi�!1��X��3�;�#e���S<r�4����2h�-����snb������L2�Q���@���\��`�O�,l� ���[}^v��D:�j���,������c��7]�y��r�g��(��,�)�9IT���X�Y�o����k$�H�:�
�[~t���
�J�5To�����6��_<m��������������Y�Z~�������g;�KPJ!	O�+DM����8�u���6��m��r�a�1_��r]E��	P��Y�����F	`��]���\�����4�������aL|f ���[�\�MH��w�rO�z]����?JHe�&�����0�2��Dd���u �z�������
}�n�^��f?e���T��{�	�7��� \*"�#�V%"���ea�E�{�0���bYt��KS�;z>
P���M$D�N���>�� ������ug,����V��[}c���[��3S�w6������T������p�ur����nU�'���X�O��d]=����8���N���tb��h���,����"���uw��$U_���.�NN`���e�T��������`�Qu���5�~.�����R��Cx����\_ Ue���,I}�:#����H�����N$d����T��-��3n�@�H�bS'����H�8�1fV'd	1��^����\��$�)�YU.��fuB��n3��������2�
�c�%��eFayZC6��t���
��F1�h���N&����s0��j�����NZ�_��~�������w�&����
�z�(�dQq�jTn�����'��e��&��.2�uB�\aN���&,���4?���=upY�	%��[k�9�D�o��ekz!������
S�uG�����mT����5����0�8}3��4��5���0�j���'5�1=l�e���;7��Z6�����U�aNg�g�L��0�J�L��N���3���G6�O�JFuF�S���T����H^J�>��k���#��T����^8!���h��%�T�M�Q��3A��jE*��`^X��l�D��uEe!�qg�:�������<`)
T'�U�fu��'2B���J2���	�dXg$@b�aY/��%�:#��2�LUgC��T>�^���a���O�(��T/,q��uFl�N%�����@��\�]�VzEZ�����J���*�dW'��0�6������o�k6���&�Z	cfcO���&u""k�l�����MK6�Z�����+�O�0����:Y���&egbRv0�HL�H���Ns�7iLb���Y�8x�Lq"�W���mB�2����"K�g)=���)���x����2Y��i"��PI����E�l��0����4	)WaxP80��u�F������F-��cWk8��c9=����j���8j�O��5����jgB� �F�o����{���T	cWs�����i�Zs���um%��E��]��7�0��M���I���|�&P�d9:S�$����j����e��Dd
2P�hI7��b��z-gB1��*8h�.������Y�p��<���@�-����?�Y�4�"�MJ\��A�%1���.�N��h�U�pF%H�BY
���*�6Cd7Y���<���(*sK��&��1j�E�����{i~qy��NX!1�pL��1��f$2M��m��W�@�k1��-o:)
��� f���v�k3{��4���]IB�TQI&�D��c&�9��".<�A�����k��n��f�2�q ��
���gd���|��h��������'9����@q�?�����g��������gF����M��^g,96�aU������~<o$��]o��E\�BL�s����v��m3����N�-5S%HfaFM����m�b���������f�wH���?	�g�|��[�E�.K9T������*rx~�i�3�O��G���r���':T���U�����A��B6��=�	���QmV3��D�G�#��;zT�����y�a�K%j����u�+�-L��$w����/��f%_�Z��.9!,��?:������|Z�A~����K����t�FQX�m�o�.��G@�HN�6�&����K}!=vL�\{�Rg����/�����.'��1R�*dxp��4!=���0�R��������3�/:�H�PA��^��3�O�q��]�����,X�54�G��H�O��T�n�e'4����(�����Z��b�w�M�#/��|hv�Q��������p;����u��2�;���Fz@���f_-������V�� 1����M'����Fjo�E�����DD�����a%%4v��Q��MF�>	�W��w?�]Psf�������W���+(}��+\�S�V��J�����@����'��e��[�
�j�!�]O,l&}!����&�&���f1��_��C���rFh���L��:E��GK7���>/�*�2mgf�g�`I�\�<N2�$"'�p@���b���~��x>���F������>l�l����,���A�[��,�b+��"���=���������:���~#V�d��f������N� |'���/�X�q�,^�|Y=���[����:�)�V����L��	��a���C*jJ�p6����'�MD���N�����m��i�=�B�q���x0Ny
LV3���
8/V��f��4�����*��
:nA+�)@D.�`�K2R_r!#E�������}�B�>���.��Z�&${2����VOn~!+�y��W�����c'�c�)&������yjF�}!��^LJ��L�7��>���	��GKm
�-�I�B�3��X�h��m��@��k��h-����y1��u�h�#����vF��e]�}O`���	�`�Y0�-��11�y#iSV~���\�gv3k��a7[v��&8`�	�J���aO_[h���r�/��t?��N{n�J�������@���l�~&��g$���G�������dkU����m����_�=4_���c��G���_��-��U_��������*)�~�����f����&y#�DEH�p\��|�|��x*��W��_�����Zw���:�_QTF��������*H�2�lw��5�N��g$��$n���	_BZ��K�|�T���OD������s����h�O�����z�p�����j]�v[�.�t�
q,��6�B��X7���?���Xd�c���!�_���,��s�����|�_�����*�~qb�>��������t��������Z��t}���}��o{��b�����|})�1]G2c�1_����_�\��t�,�1_?��c�������o�~!�����K1�w?�rb�>��SL����C���j�_����K�1]�qb�^���?j���|'7��:�t}-�G1]��?���r"�1]k�1]��?��_���\�ot�2\�#Y������,E�!��u��}�������b} ��k�I�j�����{�]��z��c���j�9k�U��U>�D���G��A�
����^_���
����F��������R�/�u�F���w#�|���b����1__��u�����n��}��@��q}���!��g��������|}/��@��q}�����M�7
C����!v�O����a��qb��4�����?
C����!v�O����a�]��0���i�����?
C����!v�O����a�]��0����3�.��s���!~=[�4���_L��^�i��s���!~=[�4�����\������W�i���R.��Z�s.w�a�_���4�����\��������hwOwtF���������v�su�vX(�,����eMW|0�7���E�,$tj���B����������^�9�d����"d��dr����!i���M��V����`3���eCD�=<R�}	feYo&���-5^��3���s}Q-_F]&��D���B��� c5���|�E?��B&��xd�(��
P�[��px���f�����1�D����kH�D����3���������|r"g&!H���(�TC4��.�s)�C~��r������py ���h�LTV��+g�`���js�<����C��
�4���}'/�����ty��+�,���#j�v����Yg������{�+�����n�E��t�MD-Xh��qN
3�$X��
0��B0j��en8��diF���sK�4�.�y�bI|7�h.*����Sr�U��,���n�<�\\��B66n$����h#+���5t����N�#!�������nL@�mL<��[J_�z;3Yk�?o��}UY3�v��
�i����(�me���������ku�4����������d�w&Y����Z�fv99�vrCK�<o�M|u�BO8;y���J�,�QeL���@�U!����y�D�!R4n8�A��md��d����������k_y�ri�L�]0*c�#�6N2R~^Dt'��~
3*��)/�#)�����a�Ff�+��a��O�&�v��w��,�+
��F�S":�v�����<�!��Q'Te=�g��^�����i�:���C��Z��\0F�����}����@����;G��~vcs�DZ�����8�����l�P�Z����&�d`�.�e��L[�������2+�"����2�����z��z�������5D:�@>7��Q�g�(��c*�>�|�a�.�2�h<l�K7�����.������a81�"#5��A��m�Tz��w�E�yL�8��.@��\�t&��6���{&r�LqD-�����p���qx�����b�6�u��o�������9�z�����Vd����<o����
�x��n/�;�����������C���%��>���8�_C

�b'�t^�_�<�q�$</����e�vF�V.�Q�����L..�i��-�����z&:��I��/=zT�|�{z������*;���R^<o���Zet���Vz�(�e\�Q7}��Dk�MW7y��\Y>��9<�����	��g��w&e&�:l��0��R�C7�o9�ARd5�b�u���$W�G
��[�+Kxp:��y#�T	Z�dv<��F�!j�	��C��
�S��>�����K���\������Ag�
�%�Y�ru��0��f���7���V�<o������&������}C�9:S��F����Pm�NQq*�V< J������$��r^������;S����ti��cK�y#e����e��A}�qWp��>���d�t���\��.=Un��~;Vu�������'*���\f��tC�*��b��>��A�C���a���(?/�q��
X46�|���	�?���O�X��0��R�����	����u��!�Yy+�N"��"�lyX�w�^o�����h���<o�=����F.6-�����R��04�$+���y�N����;�nd5W
��)CWC����*=���8�����j�,&����7���!�����g��P<�N6���/��V_qvk�����#����9:�@-"5�Y�V��N`
�ysA(��l�e�C>���E��c�+7�cv���#�LB�VN9�y�N��&�-6������5"������e�9�&�	�����;v(���d"?���
�.e�-�MfB��]�������}&���1h�:��V���b����/�$Q]�����>�@�r>3y��ia�t���U����n���2�����
I.��s����P�O6p+���>�A�s "[�cS���Z�WE����{���B�E�cg�zX�ed��F�V�FG����QsvkcD�����[������^d�I-��&�2A���>SB���� ��g�?�t��o���'Z�7!L��W���<�N������f��k���k�=��?�V���V@�@���h������S�	PW�r?�������KA>%�?����r�>rw��Ir
2�1+�������u������D
�K�l����g��`5��s3e���[������I#.��y��>��R�"ki���R��1��S�'��5�(��y�����U�A�r�Jz�=���kv��|��
P6�d��!	��<o��L�A?��	�@>^�Z������<BE����@�.o��R����$���`5I����L��EPOg�T�z�@-�����]su�2*�����v$B�#����<�*�%�&��DX*egBtB�`��E'��S[J5\V�� Z��������"s"AI���fcE��7�j���9��3S�F�f�3a<�������������3m����'���Ec���O��z���	%%=�I%���������*H����*����U��_���u_�x������J�]�Z#��mF�r����>�$�0�/$�x&���e�c���f�E>���9�R�'h���������-�Kf�&�"L��5 n��i��}F��B���/.�(1#6��&]>����~?/�5@��KE�;�/v~�������,Ca�g"2[f��XO�>�"��7�l?3R�/L�������MBb�]�L�m�vM{��rL(�zt�>3[�	h������/	��B�2���{f��S�#1D�m�Q���0��18�m����
���N]�0� T��5����Q������Y��W��j.���h&��7~���Ii�t�d{����s�����_Xl�q�J��
<ot�94�ca*R�����]S7���-Ik
*=��i��y��y����o�c�������k�@1�:���Y����iaC���3���`�d�w����hJ|������A�t���Y_�Z;��
b��k���+���	��-�
&o������%��l�����u���	[��'t���$�
�o��xp�����u92`�������p�G�8�{;�v��q�2�	����LD�O=�K������7��AiL�]<����
$:���v�04�"��g�����
,��Xv+��noV�T�u~�@�[���K"��(�*����:pxC���c����G���7���[��
�1sGV-�f�b�Q��k7gk�_��<��M(���eI�hn���QF����O6���
���bZ�6���9��<o�f����iG�>�";[�B���������BF�y��H����y1��A��d[�>�6X�It���C]&ppqMx�)H	�����u\Y�}��	m�AY.��>���'��������t����_O\�������S�K-H�d�7����4�t\���m}F<.�`d��f$2�s�;���1����N<�j�`�L����K��+q�������F>����Dd�K�on���eg$��}��b��]B'^����?"�2 ^�p]bL2�u]�V�=DU�������D������CmBo���p�j�veF6�����+3+@��x��+3�Iw=�Fs���DDFW����C��T�c/��������B�[<�>���h�\�X�������5�)��1�K�?�|��b���Q���;�R�nB"�����N�<ot�Kz�V������7h:W�9�w}e�����1�D�nFn����I5BX3J�A�1��a�"��-w�RQ�d2�7�&�Uu�#�)@Dw�d|��W���

��7v���i�	G�3�,3�7NX��yko��EoF�����h�+R%Y�"�f����U�<�v�&�v����S��Y�^EYF/�i!��H����bx�9KSoF����:J1��)��*�o�������W_�����3m��C)��5����"�o4�7���M�e�Do�_���������b���QZ���Gi��������k�1B�]�/t����M�iX�`��.�u����S��yP�@>�$J�r�)��1������c��[���y����-!�.'���pG���hx/t��W���iE��D�4;������i��u/6�|!nL�{��	f�����&����;�W�EM����f�1�������U�h�����q���ax�Br��W�n�b�}�JDF&�s����`�1!���f�J*@���3�����Q|S6������o!V��o&�C���gRd�����E��R4\�nC+q��T��/t��(9.��X�����Es�Px������\Gy����$��xvKE�(�i��,x�������%�.��B%�>}[-�-$<��f-t�G`�F����}�3������g�2���<��X|&"����
�=.o�#"nkTC>b�P�t�l��� �	��A��r�j�������W��:D�E?�Ge���X��i,x��aa��������?��x���jOQp��"�1��h���%�%���0��|�E�
���q[��l	�
{���f?�i���uG�����_(�8C�'�W�	��j�m�h�������
�Lb��k�����kXS�
�e��/�9O�WKMHu#"���Q_=NTn�������u#�o���,�0���E����<��J������b�QjY-�UV���v�8}�|�f�Do�����6v�s������M��g�������?k���vU��"IF�([}��Q&��S�(�~��Z�0 �D�E!�Z�K�i�4Q�����/����>����3V���0�~Q��f$�/���'O'�����e����\�<������?��I7j?/���g��0��)�
Ut����WP�h�O �<s�,�N��{Z1���&��a���m���.#�-��j�w�"j�&r*�4f�u��DZ��5����B���N��\����X�i�s�����N
����&c�-��~*�2������a(���������5��\/]�Z/��������2k�<��"9��mc��k��
v�2�*E*�,��/DJ��	)���KB"i��
�(����	��!���?��1�{����`�n+^����e2>+��Yl!���xW��/$`��M��)����r�l��o�a�zF4@��e&T���x0�pY���h�l��t�^|���������e`��w���k�m���,����:
��L������9TS������1	4�K64��(b���MHe��2`CV����q\1t��\1�B	�Q	��B����ek�u��IM3��HZ���@>�-��7|;�Ve�ofYt\�R��B����6�1��:bK��������!����)�Z����M��P��->C*���VK�(���N!t,��*�9����_L��q��qDa���IyY�G�h��z�0��YP3��*8�������b��r�KWk���1�C��������sT-l�n������������Z�P���ftR��=x������
�H��c�1���>�Z0!�9a��&��R��=�3k(�KX�cc�?����n�p�����\����A����R�f$������gn����upe�r��>$-P����Za��q�����t�f�����"� ���hK�vC��@Z ���z_�n��w=oT���c�6~�?�Dd��rQ�;dNu-��e�	�=i��g""�&g����h��1��qo���h:���
Z���F�#V���M|f J��B�(����|�OJ{�z��	T"����yw�m��k/$���Y�	p�.������3�m��3�!�3��Jb��a��MgB;�y�e��5��|������l�k9:��D<Y
�<�Z�I���;�b���G_��>����x�����t��.�P[/�r��V�	I5`�3����#^(*���������I���������P=Q�:N������i2!�xwtYg}���_���9�' �fO�W����j�.�{������g�M@Dw��������T��`7�LL����n�up1����j'u`�&���k��u���'����v�u�%�`I'p�KI�W��5�k-d57��Vy�T��sUnx����X��aLt�A^����0�k���hU
�I7�Y��:l���a�W���ZbHfF.�jw������L,�z�S8�t�&��3��8�����n�����wm�7�|g���0�XMk]��i�a������:��	]>�$����v���?!h�YH�:U>�C��`&*7Z����:�xr��I~��l<�gf����o 2�AD�kt����;�`].;���r�!��7�V�q q�AdX���o��yw�}F�
��g��x�=�;��r��$n8��CX�������:.x��!�d���9
Y��ee�b��!��)s`'�Pz��
�����:K@����4�[V|�8�^�jj&��X��*9��6*��K����k/�~�V]_�I0��Q�
���(?/��C�7�:�|f����:8���t2�2���+�Q�i�� �}.w;VR>��M�7r�A�c8���rv�8.�U�'224�p�lT�b�{���`$�=iXp$����H����=��`eM���ri��F����-��g�P������{3���Y~<7�V�	�wp��f?��w0U��i�_"{���9���v��
*�p�X�)�mF:�<!�]�i3�yv��0���>p��iA���Z����X��^,8@��'O|!T��� v3�ldB��J4K��w����\�]�������Y�$w%+Y�z_}-2R-���������n�'���?3�H�A��y��3�#��	t1��[�M'��$������3r��<4����=f���%t`�2����"s�	��gFE��N��JPv�A
��rA:^?�x��Y�^�g�eX�@������� u��]
<���W����U�:��C�7~�!]�����_������Z�pB��s9���������v�|�������D�V������bX�����%����|�	�;K��Kc��{@T
66�=mH�.���+`�j��p����5]��r��fp�TP�O�H���q�}%J��i�/k��LH{�������v�=#����������.&;�����:�k�M:�'d��Q&:&��"�*w���4���<�x�o(��2�����<��G#���(\���T��+U�O"8V�M.n�h �5���?6*���8b&��X��?#u��xQs�X��'/�,�\.�
�_mZ:~�n"�c���)������Zb����!�1bA	\cpK�<I������UM7/��B�+�X�Y{$��3
F��NG4����NB��ZH���#��=v%e��m�@����n�7J��p��9��:��~<v)j���NQ�1�����8\���y
���� �����a?'���oN�M�a+�.����2�������]��-2	���?G���P'#����V��:I'SM�M�%@;�p�I3�����Z-�0}���C�&���DFbd���	@{���iov�>5�)a���M��`<����y88�
V��X����N��@�����k%��mG�6n�|���������������y����5���j.���d{:�hOO������dszv����ND��J��\�-M�uZ������O��[H��u��JF���������3(q[2�`J����Df�E��M<So����<�-�#F����=�n�k�_�������]���B�%=�����H���%=y�s��3���1l���Pib
��=yh{X�����P���6O�tF�8x�l�����=/�-�i�����PC	�lI������3��0���&���/����%���P��k�W���]S��D�6������8��	�f]���GS6�s.��4����5���jF_:�<�~c{G���@����yP&�%d���L��J��M�X���?"�r$��!�����"��I������P"#xh.��p��|9�s�$\(��{��D����OIF'<��O�$������'�p����>qOH����O#1�����2d����K���J���~���O($7r_I���x���zI_)ir%�=%Y�9QQ�q�I���'�]�' ��Pq�0I�c�B&t�_~O.�U��F	`� �%����W�h�-�@�o�;5��A�_�a���}�|'�A,���d���H�����f$�I�x��7K`cx�������'�����x||���NaR}y��,|��Fp�V%t�X6,��������D�>���2�x��bX����V�	���T���9	8��9�z`G�z�� ���MHi��^R�ON�Tc�<'��?���yN�hQos���]��M����7	��,B3��+�
%����N�XRC��TP��:U.@S��7S/���79�-�3�EZ����MQ�HI�5�I�����U 
"?�+f�#�o�I��k�
rOQ���j��2����u��|�����H���
N>v���S3p�h�X��}��t8Q�DM�l�L.r������<�Lt�N������C-��5C�5t+��z<_=��v�3�;�	\|(Z����]�����YwI��(�(�b?��!?/E��!����'�.����y�S���L��(naZ�t��>�
g�`��
J1����D��_�����[�j2�� ��W����PL{�4����� �o��������p@-4�F��{�j�
�D����������
�'��A�"��eS'�k��)��Q����-�$������@��=b�H���>FK`3e- D�x��������%*&����.�n#@��H���6Zw=��]P�w��:P=	���6{�;z��m���U��{�����o<v����N@��������s�)�e����"�UcJpv�g&��U�J���-U.�>8e�.7Ir�I>���YIr��AG��c���3	�;��xju�Si���3
� ��Z�$�}��u�.��g���{��������4�����\��L:�����t����+/�Ii'�#����a���T��������#������@m/f(���6����?-Z;8�LZ���mE������Iq+	�����K��Z������Oz�d�Uq+Q_j�����&�����72��v�F����	�����P8�'�,>���G���6��zF>C`
�}���D
8,��J� sB>G�j�?6+�e��8����g���y�(,z�!����������/����h���LA�����lS5p4��M,���&��Y�������|�����}3�Y"57p�LY�W�#"�)"���_�����Q�5��a�������^\��b�i">A$��Da(���Z��ai�
�EFi�H5�ND�|�_��wnT�	"#���&$JO`[��Q'�����g�����;� ��k� �����D����ZB�m�2j�[��Z���\��9{W=�[NyqQ����e��*����T~b���r]�t�k��1_�������v/����Q�o�Y~����u+?�G��:�o����n���(�]g���\~�N�{�����&�u$�������?v�D�>�/E�>�/�s�����)�����D�~�E&��Y?)�\��~���������sr���������f�kH�]oe�����?����z����nWD���oVM��������o���������������������M����7�~8Nn�,H��7���M�����w3vp�Gs����K��wm�sp�F��jI�*A�p�v����B$�/�lY���2���y��k+�5����[���b\<�F����3��i�W�`-��(�c���\�v�r���r���]JT��%g���Qu���3�d�_��3px���S���D�qF����/	����)N�tpp4�'9335��<h��q(Tj}���S��&��0���H���[J�ag�����-
W����r@�+Y�a�z��nL�,j���L���n�F��~f�2���������C����C��qz7����AT3v;A'���)�o2k0YM���6��m?8����NHN��
�P������V��_�Dz�QTDC-�������)����S4�
P�W��#�89�8��6�m��vd`���Z�tv��cWn��qX�Q�H����Y��)����q;�#����X�Z�����C%��4��Y#IBN���~'��h�C�hqS?��#���d��`��B�i�P��z�>�O������?,��%������B�>������5����^���.��$����\<�������Got`%F�d����������
.��K���(����q[�����CO��r ��v1�NjF��?N��3�S�y1���#{�6��L'V7��_r�d�w�;MH���3t�����nm���-���?�Q������VH����;Dky8�j�V,�+���C�6��A�&��L�U+����d�3:,�,@Sq����<��MW�6@����,��7���
:z���i�4pJ��YP��:��Y�&"���4��J���s�!GvZ��N���8�} 0��n���Z"�G�COKw7-Z��R����,�di(5�)DQ8~5:���E&��8�j;R<N�)�F ��[�}��IY���[����sKM����"���FL�)�Z��v��5�$�8}�f]���D]$ZP�^T����>fC���M��S�3�dZDYs�Z?��`��L����H�~mm��q<Z=B�����;�\R��F �!�H@�>���s)�O����t�&Y��j>,�z�������,^�@�Y&�������7���x�{�+%)��C��n/��NS"��&"��>\��'S�O�`6��WN�>���Wv�O��I2NM�lFx`��I���/M�a���L�! ���u����,J{�
4_03��s��Pa�t>���>^H���U��J0
�����y����jJ�]����|t8#m)yw�}���[<�7���������g�`3�K"~�>S�'��[^r���w ����$���\�{Y'���	p]����h4L�dHT
d�\�a�dF<(!�����(���W���d��0������&0��)��#�s�L@D�^��>�{�		@
��������'�|1���jn�M,����(�*p�dGn����b������i����2][�X�83b�9����J�q^v�r�3��xO���:[B�F'���R;��������=^?����Dh�/�j.�t7����3:��v��_gw����/s#x��tBM]��k�{�����)
���|����+��2��Qs&��������MT���������@6w0�/o���c�;���"p����<ZK�d�>�6�Qca�,�%Z�c��7o��0�;>��9L�g!M���)Ck���������2�}$�f���fT��%\���~;1���dj��H��%LD��P7��������Zp2�ef���$����Ae���j�Z/��_����7u��m/SL�� Ui""�0�����*�<�:������������LX��T���K6$������I'��Y�	8qT���5���zd}�����I#�qd(���
�z�{����Os��a�5:!=>Jv��K=�.MH~<������Mpl�.M�]��`�;���ty��oF�X��A��K���&"�V�XS��I�b|wm�s8�������}����bXr:�/��l|�	�cK��}\�EY���G������j�&���}�a�������n
,��N��GwZ�������������a�!��a�N���H
f�Y]o�9;�����od��{��:�		�A���Vv�����Wr�y�y�n>y����U�<������u{�������s~�H����w�L���������B���!�"X�
;��l �� ���-VE[�����K�ZZ�0:ia�#�)S%bF�����-�I��d�->����:poS*�5��7��!{a>/Rd
M��:k'���sE�k���9��n"MA�5:�(���89#�=����r�Q��QK�Ya0�[	JG�z ,;bLgv��c�����if7�1�2TH3$����g
��T�nF���r������y]8>9��p����b6l���IR�Ms�pTE��:�h��WO��j��C�#��c���7�:��2,�)KSV�1<*���1�X������;8���+�����e��'7���{T�i-���'�f�wp������"f����x�?����$r���^�����Du�BA&S�����B�)������J��o�}[�+�d�Dd�N��.��������PSezX+J@��w���|W���������[*��#��6�D-	���P����h��Vgp��L�Q�?���<��@-�q/�+��78x��%pR�l�y�^��������N�io��s���No�����'�>�;�B
,�s�m�y�f���G���u
f"��Sc_j���
�n����]8M!����5�'��J�XE����@,��E����������+M$�\Pw�v:=F�#�!|x�'�Dq�D�3�g��������H�Z�����;D��7;n[�]����_���h�;���@��h�����.�����H/�����a?QP*�,���E��[�'gT�d��3�=/�<{����3���N�;~y������T������U�^k��P�Px��
���]��e�j$�~G��{�����X���\��.\��B|m�X��C�6#����Qd��l��K7a
����$�	�l3��~��c����,)���L�>���(�����p_H>�(���2�E`������{X7�G$_3�X�������A`]@k���.����oW"����������MK������H��B	��s����'i����LLOw_dc�]�����[����/$���w�%��Cz%*2����0i��Bc&"�>/��7V��P�z|b�:�h	��tNe�)U��Y����X;
�x���e"_���vm;[��T��eE8P	���ol��.��M$�����z��D���D$�!/�[9������d�6
,</���F�\���������K�����H��t�,���k�����\^EK������p�`���'���frBZfa��[M� ���&|�����nf���`��x����Z�q����4�R��s[ov��'�J�?��'���
����Y(���2��^�.&������g���E����u���M��K:�����Tz����_����}��������������4��B�+��B"���|�Z0%d��}b������p)jr����^���oyZ��_OHKl�����Q�Ei/&�uU;�����O������Tv��E�P�>�(��aI���~Xkk�"[,��g����QZ��:�U�Y?W�l�����{a$�#`������H����Y}��_�R_cB*{W��QL����x�	��������\R�p{!���WQ�%��SD��3�g�{���v����vp��z�����k���������c�ap�b�X����W{��������F�u���EW'>3�|�>:����/��1���
Z�eCm�e�7�F�!����m*)�����d�`��l��
��9B��G,w���qZ����m������!HS�MI^a�B�l"RZ_�co���a���q��g����/����[;'az�}�DBFLCd�S
&�"j��u��.f�``&I�8oPk!%��1/������(���j�5,H�F����(Fz�mC�	�I�n����&�i/&�0C��Q�d1w����U��6[	�u]I��D��<���C�.�2����-Zd�4�����y�(S���i&Z�p��������e��������ecz�O��G�f}�(�1�}Y�$�2��� Q�����|�.>?�}[�U��!'"#�Z���Ec�!�4��B��-|��1!:�,H��`���������������Si	��Y����x*�i
haO�-*������-�����S�p)�W�o@�5���F�lo�l��!=����F�u�(��o2s0��`0�d4d����E��������-��R���=���) �����,����8�?���N,]����$p��'���L�o�K�Q7TH�g!I��t��
�;��������S~�5 ����L^��e���s��$t��t�7N�?���9��H\��rQ�[�Y,�����o��:���sl������r���Xe�	�;��d�7���z�)!���n<8�=�I3I���-tX�_��0��
����4�0�J*~!o ����h������J.|$�QT��B��?
����U������S�Q�j�A��� {w�`�l�QO�\�x.�)��Iju�)���C��N2��oO$�;�w\�
�q|������)�9��!3r"u{x��Xd��0/QT�����LU5�(���^�����L0tQV3��~�GTr!��
��u����#�zr :4L(��#�$��M ����m�z�	��Z�H�����4�H�i��_A���9$)��W����m(�����"��}~�\�do���t�����!�!F�JE�G��0�2G�@>3�h�T�q�B����cq���q�n�Y���ev���#�t\qa*�wE	���A���3�`LP��t��Ipo�}6�y�R<���$�������H^'kXU���2wi���}���:z�r��C�	��[�@���C���k��pguc���luFPLI�lqf��}W4��<�~]A�GP���vS�S�f�}}/�_���c�����H��*�Tz��4#�D4����A������~��f�3)4�/���W���������
��lL�����w�%��0�k�!����@�����rW��
88w����� �)�^]~�����N�>��������0Q�DGZ����wa4���gc��@�)��MO�����"n$�e���	��8���]�'t�q�f�8sq�����VEf��� 	Z�6�Fk����8,�rK�)��n}-������N1�	���p�}�����W0���U�����Hq�n��<�/+s���4z@C��UBR?�v�������H��O��n�
�Y`zi�2�����^]�Q��s��nkp����90?(�t�p�6���_��!�ox^!��_��0T��.��i�g��[���3����R>:�� ��`W�I���V��"dj��lV���(e���g��Ue'�^hL�I�E
C����F\���`b ����*�nXu������&�?zL�������3��L���0��/�T�P���?�4�#���)� W�os��`�_b�����S�y�$��d������0<U�;G�����6W"	J �C��X��7�Q���k�N!kX4�
O����x��B�=`SL��Q�)��dNqVky��j��b���o�pJ�8��s�����]�Hpgu�����X�"*�|^0^��"PgpAlX6�I���T�	��ih�S�+g�gyUpt��% �����,���*!bZ�J�!x����B�m=�cw!)S�iF��M?"��C�������oj0+dy�'���]���9����X�SK0�[O�<�t4����%�8��������W}>�������������fkS��J��b������b/�}���l�\P���������9��^�b���X�]����8�R=��F�>H��H���d� l~���IpD��-~��}*���M���������ud`�U3l�,!j$Y���u�U���yp4�"g���.�e
p����\B�����e���Z���nQ�	�W���i,l�����,��!������TU~�K�-�>8�O�����x��Xp�1��w!C���C�b6�`?xI$C���Rl��k�AMY*�vs�,�E"��"�����3
�)��3KB�r�FR�����/->��"Yt���	x��03���*j��gd(JE���>���������j����$0D�x�g��#�zrwHq�)w7���?+�a���|3���[��	�����)��b��nq�	%�(-���J���D?h��0l8c����>��	,�k��-^�/���������g��xYq��OD���](�;bf����K��z}2������������������Y��M6<���H�C���x�c�DLo������?�����(��v�Bv�~^V4�Kp���	�1�5g��3!Ql�u�'����s��������������I+�k�wu��L�;��`�������~���(B�a�/�6���b�#���+�m"��Z����;����&$O3�T%X������J����}K�C���#!����G�b�smv&�J\�XT���%`{����>?D�����b��m@�D��|�����[�������Y�;�t�$V��Z���v��}{�Q�"��	��f��r[.��22���Wt��G/�W��T�������z���,��/�H::�	3�]�Z^P9�����Y���������i\����S/UQ�����41�u�����C�<��7���z��h�@>	������������Ie?����2����63���8>�� �V/�f���<U��0<U�~��|
����cj�r��oi�����(*>UU���'���7�i%% M�J%���� \<���C$*y��a�N��4, _h�U�����y����9zpo���Qq&��B���~A��$=KF�Zq`Fx5���B�W���.����+e��+���p`
Qq�
a�Q��u���
�|fR2�I�7��k�r�4'+�Q���'g��^��-�M7��6�L�i�����?!(�}g�r���(X�
�.%�����2h�Q=Ft��w9NH�P�R�,��.\��r��YP�x��N� ���z�7B�{"<2Zp����&��F���_phB���?�]������e�������ww�� ������km���f��GO2��6��4U�$~0���n�+�W�}Z\���N���P/#A��R�E����*_j�"���d��G�I5e.�5�4�9���������
[��=��ff%!�%�!��Z�����O�?z��C[��}3C��`�6����~P&����5����IS��H,�%��Ev�H�������'���*~�*iV��L�SNd-�#��ZJ��d����y�3"���������������_����_��o�n?���9�����+v%�4���+�b��������^��1�}$~
q��r;_��S���{E���d��u�P.+��8�;�M~r���a�#Wn��h�(�K��V�1{��Y�����D���!K���-���-T3���GA+\�������]N�8�a��K��9u�VGi���
�y��Hd��Xq2^�X���r���c	4��M0i
��hX�1�wYP�;o{��#���C{F]���{W1�zM$C���<�*��\��,3��v �P�k� �����l*�qEv���9e#�I�P
���l�WQh9�q�����Ef�	�j��bs_���,}3�V���z�f*NB��B$q�/���%��0�Cp��4���.d��D"u�kf��Sp���6�-�\����V�l�@�X�Sd*���*'u���-�� RP3��8��.�d�S�I���%��
 �vrC4�`���-��]i��U$�|�hFZ����dFg4�����\��2l7��7�����P7�H���%�)��eO�zLi���h��)mX�V��.��"������`�S3	r��!�M��,;��Pf}6ZV���5���h5��Ty$��#:��j&��j����f&�{7$P+:�:�?���NlB�	+:���,�D��{�P�)���V�Y�������E;����'��!�����}�
iFT4�	L)���tBA_iI6�eS:��H��/�9�Q4�7��D�tf�S���TC�VuB#7$v�D"Q�hU'4
���[_���!Ye������a�P�T���j��	�����P���$[uR�[{��VlI��5�"@��Z#5�A�������{I�����y��]��-���f��TBQ��zc�2��I������'�.��3�z���a=��z[V*��g���EmkF�={G����A����-��E��Z����U�����w:!������s�w:��'�U6Z��h�X�������j&�Y93���}�smQ&�W[�������Q�mb���iV��~�E��D
e���������s��>���F����A��ibXu/���@r��]TYR�H-��en������g5W���2���5A������:���C[7�M�:!$�����n�y���
}"BW�IF[�������-��d]�=q������F7E���T.<Kl�S�����e��~��A��IS���/�o���?�]�����G��|���z��
@c��c���_$3���[9�{$�	d�*��%$��v�:9/�bZ	����aB�J@��������p�St1��>)����^s7'�@x�0ym��D���U��!#n&*u���P*xW4z����2�H&H���&�T�����t(C��vYln%���[�:&�8G�
@SP��d2$%��\HJX����u�LW�;r�7s��1^�(]��`A�i��T���B�"�s�y��*RI��K���	%����&4�MU����G��ee4Y�x���<��d��R:lL;$K@
�I��m������	I&Fv��7>����oC��i�Dd@�&��}�����z�'L/-�.���w�"�I�&=>���`BL���?�9��	
������kY&2"o��&B�]�f��H]T-�b���  m��N����0�e�����iqx<�N$���O�=�!-�)'D<�M�&u`�;��&�m<�g$f	y)�S�2�J�=���$�j�M% +�ee4�8n~����]������.�sC;�{���e�dl�x�������,z:���HN ��tz�|$r�����j0k��p���gp�����#����7�~:=�(?�S��, �T���I%�g96f!�$]�H8�����cG�Og�����@`�� ���w!C�o�T:��D�YD��b��%�d�Z�I���Bn��[-&Zm�K
3�����=lq�,�D�f��"]�[Zs�� 9���z�i�[(K� ����/�������1�F %��?�#�u�HD�%V�3.TI�W�;y��vs;:�O/K8�	����A{�f2��{����E��� /�c�H&y
S?���q�M2y/@��I�5WW��k�/4���@�8\����� q}��>x�^$��� m�$_e��������b���f�	�5�?��T(��[�h��������IB�3z�!T`K�h������<A��;2�P3*��2-o�Y�9�#�F2�d�����,�����8�u6#�2,�.(���T+�Z�z�
?�����X��u�\��c�{��K��g���m���Z
>�t�����Z�����z^�	
�h^�M�.�)��t
��nf�Q��A����%D"I���CWn�U'�����kN�D8�{""�x���)��Q)!(��~��^����������u	hz)/�M~��\�=2q�	�H�J9|���B���|&Zi���|�wa�N���$K'$.��������Y���'?Jh���n}���g�9RK7��V��V���Q@������]���v�	����g���"��ixX�����M���2�"���b	��6�����$X�����7Qe��M%���hN�
����GG0�a����v)��si��mW�A�))���S[�7&8��-BV'	����������`�� f�����L���qE��,�Xe>���!V]a�e�U&e�����S��Z-sVf�:8�����V�����p����P���N��g$�,�9���nX}�0��Y���Ml�a��ETB���WU�t�������D������
�=�Q���+1�u7����+��.R���h�Wr����Z�
@/l��DN����d}vFe�[�J;,�0�7����D�.��Z�=:1���3���DZ�����=oc��/S�e�������&I���}����l��*�1������q��'���Z���Z��s���
�S�}. <�������c�6hK�m*�M��<u*p����O�#8���q�"��T`�l�%!�������@�<-x�T��-	9���\��M
98rSC��5��kt�k�;���'�����]����#����b�����1�]>���C���s�{�_����X@�X�>�D}��!T�%����c���% ��QT%��,u~��������u�N9Z�-k<�������s���DBN}&�'����mG�����h���b�{��>k|��J����1Km��c�(�o.�����6h�Q"���6l��
y��>n��"�hk�m*��%l�`	:�XJ����P����G���#�����r����/�H1B����!�%l�cF(q�m��K\K�3���"y�%������c������������������������������������������������������������������tf���e��re���d��rd���c����V�D���c�V<�1��8�7F������������{#�c���s�{�_�������x�����K��p�KD�%�1^"�-����Q\v{5=K�����m����b�wF��I��l~�}\������#2�������D
~���m@�>*���A��N]o������,_� d��D��$���diB�%����|�0��$���H��[�����K�$M����\��Yv�Z�f�No��@IT�!rE(4��R�U��_��_����B�Ci'��Q#NZf$���8��I��#��?���Bq��oz�����P[m\�yH�L\��$����DCF��M�Wu@�v�����H.Uyp��]��&4�,L��6�Ve��M��YP�t������T_��
H.d�acG��h������"��^�D��(�@W'^E�Y�L�cm&15��B���
6�C��+��9n��,Jw��W@T��v�%�{T�L�|!m@���}&���P����?\�n���MY�u�1���l���qT��j��2��?;���cSf�x��t��@b��O��Jh���{�-
e���P�j���[	�wf��z�!�H|A�)x�S*�,��d����D�����,R7~�R�u��GhC��bU�{��O��n&_:�b�a��p���~G���T�H��
;�I?���U�����&�W��n���7��'kveg��G�T�bAt�������Cd�=��������5��5��D�����V/�$C0������n����[8	Id�S87k�j�����WEE����-+K@o#�'�ON2�V��z<���Y��)9���H�1����do`����\O8`8���5'$�VN(''���(�f�X~{`�$9��l��;"��\��3�a��ce"%�f�3S�6.�-��6���j��%�1��`(�3�
T	y�6
��Lz��������*�q.��2@��Z"�$��K�{�T�syT8�xH����!���E�vLd���w���Eb��&;N�����P����N(��li������""1w���?s�zj����;�����`s����6�7������p�s�������8S�
�I��+��.�F�a��s��+
���x�9�&���Lz+r\�������+�NUK�N~�D�����q�@r����E����pr��cg����x���A�}l�J�_yh����0��m=��������>#�O�l&���8�E�8��{����h��>�����I�������fz��(��d����!P�Z���U�,b"2M�d9�-`&��P ��C��ec'�����gV��k=^���884(3�>��|b���B��>�p�B��$�0��[����f���(�i������yli�u���lP%(>��}/S�Q*�'p����%���m������C�k�=yA�g�������wa��|]�T��Y��{T���3(��������z����f�zw$��@����x��AI�w<�(M�8	H/nG����������R!<�&L��dj�b,(�z�z$��"e���u�"1wP������G�g���6��x��T���7�%V���,��b������h�j1�M_C�C���3nh~PDpf�}1��U~"q�}��v�P����
XH{>�P�����1j�o{��,��\�oF�F��^$!$E�r�d���/�v��\���<�H��:xWd#�M*7V-�T���	�b��b>����X�!&[����##��	:�/�uU�@g�p���f]��E���fz4&��`�+���!�����g�P�2
������C[u��Rm)qY����W�����"j���R*�_� ���.D� ��K�Eb.�����[U���THos��n�#q��������� C�������jI�0f&&��5H���Z��#-���1N���J* _������������fT.����>����h����B+�����MQhm/.�TF�a0���@��zf �y>+���T�{;x �u�=���d��������)uE����N[l@����E�����Y[_����[������#�a�����\�����R�C�G��0�D�v>�#.|V>�k�s�u0��Z�bWx���D��)�r�VEk	���q��<���	��kT�i�3�#�	luZ������|�_�A[R��^2
q�{�9����{�=�$YP�YJ�r��{X����+�p��N��N�	PW�T*��+�%�����^�!��M�h�L�t��Lw	d�����w��LI����C�lo=�xFEv��8js���PD�\�X	`d���|p]��!���F:�cO�"�N��R���9�^��V�g����h�����7��h�`t�8������n�����M4Ru����4'9m}�z��x=x��J"K';�M�&TT:��'��7�*�I�y�� �Mbs���Jci���
={�K��LZ����������Z�����a������"�Dy�h�:@�� �!m�GY��	2��T�m��q"5{���v�z'Hq$������t����*(B$<#`3��3,��oK���Zf4d�����]{���� Q%l������M�y��������s��z�����_��������_�~	�����oT�M����@�.ID�e/3j<��lt��}��/���(�d��-��:��5��59��wF"c�M{��b��/�r�e7I��L�I����M�;#�U��h�d����,z��QbFl"C�[0�<������0����wh_4#������0C�>�!#�e��D�>��D�7�'NM6��;#�����s X�
 '��m%��5�� y��M{��rL(�r���3Z�	H���5�y���u��jv��H���0��)���}F/�����N�L}�Z�:����%��f}�����cf�U�P�W��I���j���};����>�������}za	�������-h|8��W������wE�����$��7���sA%�$�~������<�������f���X�1Vyz!�e�������J�u�ef��a��l%@��8��,����uP�3�4v��<�hs~�]P�u���#Y�(+K���m�=UB�umLF�lUtA]v���6b{���j\��y����1T���p[��'�79I&�b����a�AQ����]`��6��f�'�2"4����
vC���7�Q@V`HxIB�x�����BL,(��PxW4K$�����(�]	;���F&i�>I2o{��m%`�M����d�|A�u��

�c_ol�������#�7{�:��!r'��#�{�	������i�bB	�g�1�)�W�b��t�/��6|^f�&t���$�4�EB?��#���7;�����,L�^=����c�:��"t��5�vt�����]A���*���ES��G��O��l��`�.L�i����;�gY]��Dv�?<i}�����'����a�x�|#���#�	pe��<qc1<�#q�A�~~��p?�!������=���t��k��Tg4\��������G@������������V������0G@'�g|E�Y*t�>T�
;f��[��%~)��I���F�	D���q<���y�2r���h�jN��u<zS�i#^�G�
 ;�C"J�I&�%��z�}���$��o���O3������V��z��������`����t�2�d����������M=�����+2���Co��JF80C_��V"�leF%��<<��g+���r��i�bO���S��e��\_�x���5z������/�<z7�!�����L���?}�0%�3x7����'�tWsF�2��m�-��%:�#x7�:=-���~���� �������H����h(�d2�7�2�����Ag�M����'�%�A�|���r�USp��^
��M(��
����&0D�������F�uB��x�O��:#Q��Jb����D�j��5�=
�
`��c��E�2�2"x~O
�Md���>k��	�{���Hz`��8k���������
�;��U��2W|l���&0D]n�P
�c��2C�H�fL�D�4>� ��J�O	���[�Yv,=���?�K�~0W,���\���u;7�a����d�6S���X���	��rj�B�@�h�3�.��N��{��+���
H
���������5p�"��Ynf^��J^j��+&��o��B]�R�Q�?jW�re�"�uR'ta�3��6��"��':#>��d(�����������'P�feB�+L��wf���������.���4k/����S{�	@��7�7��]��|�N�4�'2�#o��V��n�q�|[D�eQQwT{���-&����2�u!\F�v�w� �:jc�&�V�\_X2��.��^^_�tV��K"��`A	<W�m���p���PA���SX�}eh�;�C#=��de����1��JEk�l��4>�C�B|V�um���������}DW�%��(5���Z��9�H$�.���jqWfH��`���y8O;5X���U������/L�z������W&�%�ZY/��Cu�u���u"�X(��/����[������>C��i��z�$�z����������F��C�2���������18!��DMH����,@��G�4�L��
\G�X�k�ji��^�������!0�������!�����{X���u�	Q��i4���if&t/��?A�
<�mZ�X�E�c90�����'��J.���k�'�Nd_���U�l��A��0����0J�^Q1&�z����
C+�@�%V`���~��!�043`?��E�y�S�?�6'F��6K�~�p(�����\���ys���E�,���B^����=<"�h[k�c����N�9u5������V�Jl)�<�^����7�t��{2�V>"���D���r�ZyW&����(��Cu�Y��,H2�kAf��Y���S�6��s0!M��J'H���6�*�b|�<Cg,�2!��n9K
�w�H7#<��e�8f�~W��F26�m��i&Tb��e�=�TkA����|��V&>2,�������J*v�U��|��������]�CT��e�����:w��vY���][b~��TbE�l�����\����	1/Q�A���nz]D0	�;���GGa����u��v5��#y�]9>�����79jAh5���N��N������h�8����8���V �&6���%L������3���O�p�����|c�_�2��H�w�		���<�!��D��2+�pn�f�v�=G��~��m�E��M� ��ouy��Zm{�.��,�k���-7��@S����f��`�JeT@��%�J#�X@[P�o0�^�"�7�<�,#f���7R�ZV���j�3�����"-�$�^(�;4����Pk�;Y'C��=����I�g�W���]��d$�Q����U�]XR%D�=�om4���0��]�H��7�K "�U����[�b�x�Az���&d���iK��j����������.	��{��
���L�/�N��$�$'�,����?B�9���@U_sV�:3����7��}�2!�M���}/z]�|oa������{zBD7�WU�<w����	�����y#�R[�[Y�lY��5�kV�Y�;�0�'�;v���^2�����DmD+f(D>� ���z�7|�<���,���L=��W����u��vY _������]����	3�/PF������w���~&_����;{��-|����s�u�2��k[�1yRY7;�Y����k�L��WF C����e��c3�q��|C�gw3�d��B���A��p�"8���i;N~�I���e*�o"A���w!"#y���>[X&����6�b?��u7���;�"��++��������Q������S�	���e�(j������������W����26S���0zzTm�[���u��������i/�}����=F���r���E4�h2G���lU�>d�OH+0��p�����2"26����Sgq$�/o�J��������7��9iiV@&c���0����_Hv�OHj��a�[�����Y$rv=J���J�d��#�y&�����`������w���0��%�w� ��|�:��2�$��N����D�C���wm��ao��:�ux���p�����Cd���)�.�:�v��\�
v���&���5�v�\ %�a,��c�f���*%T@8L���������YT���j/TK� j���s��4�����x����#�� ���-�t�����\�_�5���M����53�(������{���F�L����W���5VbcZ������6�>N��mo��\G��i�?^dh5gw��+���n���Dgoz
��EH��f���g����ge�$�Ae�`o���z���ufQ��c���+3=��*M�s��7�����[q��,�R�����_�.@�m�����������������K���6�!	��A��H��|g��[V��H@yb�f;�p������j���f;{;���K&A�t���fo�m����y�{�e:��(yW��s�t�%�7mU����N�����eB_�'[79���*0�n�%X��\G�� ������a��f�U�� _Iftoy��,����C���bd5[gk�]�H ���t�V��{������'����g:�QTm�3sL�n8��G�;�A8�DW�fV}�3����)��)a�ol������y��N:�2��+�:�q��q[��e����A����IPO��N�������@�MzF��'=J�_X�IO:���v��wy��U�y�3���XV��(��v���$����V��)V{�e���:�I��;W�^al��s�����G��xX�K�
�x����hf/�l��$�E�8^4�J����O�z�����=��a:�����T����~��gX*+����{���~V&�y�"Bi���2�/���J�cn�G=��,?f>�)0�\!��\��H�4����&?:V��fd|�W��&�j"����Lr��C�Xg
���mQ&�4���FL����~������`2�M�(��wrg �[W�3��<C�E%Y/�����������`�U��&&����~��]��[�c�k��/��[WU��V�S����7�O0�D�k��e�4���0�6S�h=�4�W=��ZC�3�@�������W�vf��7��B�q� �};�]^���\:����wE����������7�Y���>����NC�Q�(>���7��]��@�o�sb�2M��Drs����d��E���I7��2]����^L+�7�2��a����H��~��\�����J~~a�8H��7#�����E�����;�O]���"hY����H)MP���N�
��		�M;�4���RWO���Q��"��z�"�� xWT1�lF
�e7����P+M�g�S��D��f�.'�}c���A����_��"�����V=�N/�K�o�@p��kb�<��p���q7���
�����
w����	��d��d�;|����u�0��K�?�yD�!R]�[2�~��nBF�mP�C'�N���,��/R|;�'���y�w�*�����������6�S��'�_n��
�S,�kdQ-��T>�Tj��?�0���"�a���u��>tF+O��PM�t�KR�6z����f&&���"��������};;���������|)j�������l���t��UZ��qG�01����u
�����o3C�p��\Y��������Qw�HsV���o�$���Z��O��#��O��c�q����	�@���G1T�a�����I�-x?u�a�/����"Q�|���d�'���u0���9�"F�.:�i�h��.cVX�]>9��]>�w`�/��h�* |af���<�H�2_l�h�'�:?��^��0�<A��Nvx�n�)�c4�����k�:������R��j�4O(5���G�0_��P�����;!x0�`�0_=���/>���`�D@�������`�O���0��������0���d��e�l��0k��h�'����0��9'�<3�����u�����V�"9��2�%�|����w]�n�����nQ�L��m�t��������eN(j5������K������Ux��������<� ��m3"�F ��w^��n��gMA�5P?����D�7+r�7����'�<��p"H'��>]>�I(N����zI-������,0&i�O�I`���)�7����N����I�"��I�vE_@��77���Y���*_q�g���qX�����E�qc�N���<	��9��/'|Q�
s�x��v�B�+�Y��������,|�m�c��Q��9%�8��8k"�-{�,����y�x�6�M���C]mw�$�C1���N��?��	 ��;H1����H��C���9a7�8�A��"9<��� �Y�|(]I��{����������.LLg��*u71��7!��m�:����&�i� ��N��JB��{o�U��t��.�Z�z�g��)����1{j��#�����/���p������������>!��I�����6B'�����O,�g���/�1�
�%}oq��]�S���~��_b������o�����u����,�����*���`f����x#��8���	zO���A+�e����g~$�
�TB:����UJ���/�4�O���R>��J�H?<���M�P�H��9�!"��<����Os��J����;� �6u����PD�hp��\��l�U���b{"�n���������i0���+
�;�v�bl�H���&Ep�+���Jl����>��O(��/|Hb�(<Z$H=	��+�d���b�r����wA��S{�'���gabq�$o��9��@D������W9
LY.�����`;&�
��w��7���;��`�)�h�ppzg�A�a�y�7�6r�-��F�*��6.���WxW��#	^�XB7��]����qTm[�~K�����G���5�Z�@����e����C�"L�Dpr3�u������EA�C��U�:��0��	��>S<!�4�jR���A�edOQ�#Y�*p����Q�����y�1nq�Hd|@��xD`������CAM�@��,��/�la�fD%���(�Hbh����l6Y�O-����u�����+}�LC	��;1�����o���s"g����G@\�F����}�C����x/	0��g��:�L�u��6�v`����?+7OwO�=1LE�>�K�O�#�I��������w�XTo�vO��P�P�����������E���{�������FO���j7��@{f���'���3i���	�^����V����g�{]I�'���A�������(.�)���o��"�_n��q7�Y��b�XX������$W[��8��rU���(K���SM���.����/�E����!�Ln��71%R#�Z{ic5����Z���'�5H���!li�rT�w&q�N�Y��0�
9�����W�	ku��!��)
�������~@���������|i�e��f`h#�m���2�M���t`o�����lY8�ju��uN80�Or�u:�j�t�� <~�X�]a"��%9���E��V���Q��q���O�����w8�,N��2]"��b���������.�mu�}>!��uzN�$�o�U]��g4�������q?���'gbY��"���xh��$���L�I�,��\B�X��rS	�����J�K�q~S(9��?��?��}�#G���'���A�����>��O��C����w}���@��������S��
m;��U��#���b�S[�_�ZPe/��1e+1�1�{�u����9g���w���,K�K,K�����5��]��f��
�/������B�z�<�������~��_~�����HA)�- 1�_�8���6�:��������s��������_�����?�?������k�N����_<'4����W�E�[�/P�������.���7�O,u���9�C�&�����A��:<���x��r��f��n�B����AG����^K�#��2�y�����h�]/�=!����(�!����'��_������RBD>�G���:�����p��!o�����,�o"�|�1�q�����.�Ym��o
<<f���j#S5�P?���.�)	g�+@��3=W��\�N�@��Xd$�:�������
�\�������XG����Y�?q�zv��v�7����G)�S�<9�G���D���g��1��w�����Ztp�<���:�?�����.�P��Z;��jJ������t�P��&M?�Nh���O��(��|�����t����>�J����/�g'�d1��R��	�=�G��lP�2�L����$j�~�HT��B�L���;�I�I?5�s����b���g���[zz���������j�8pd�L�,1�An��['�!�0�r���b��P���#���D���m"��,(�����zmz����?t����KM>1���a�W4��i;O[P�
E��F:I��xw���	8'yo��ulg)���0|�uDO`y[O���(�8�b����%�u9{	�q���C����Q� M�:b�|"����YpV����8�tb#���&�x�f2�g��9���F�!?����	d]�"��U����L��U8��]��"���=�U���B��)��t�������$G��Ff�5����F������'��P������c8�-�w4�&gj8��;��_z��S�P+�sb���0wf?���ulT�����aB��x����u�w���DF����o��"*�������4����wy����.O�4f�4�I����x*c�DA� T�m��H�;�"$���n&�}�$e��z����z���F����v^H����R8���	����m�z�vH"��E����nv��B�t�����LF#�"���B�|<��6�iz���3B�~���Cq�5�z�s�6�@l�0�j�s��s.�
���'�a�� ��yi���q���
��@*b��Ye�g��[�
�o,d�~����[�����G���)��&2d|/	��n7�_����L�
�������|�,�B���hBhdR:(���_��77���|�3�����,�t���e y���ub>2��&���Y;��,h�C�p��]���@N��[tE���_��������� �y�3��-�7��s,�z��M�e���C�
����	8t�5"~��s0D�"��=�����oCT\I�o������nnx s4������r�uQ���Qp�*���.5$3��c����3�����El����M��"���y3KM`�4����g6�I-hdi�r"�R�z�T(P�����:����EY�Iz����^W\����X�a�.�cq������}{�b���`t#f�� ��:K@�G'��R=����eaR����zi j�o=�;��[gW��Q9�N��#���0#	}����&�P�S��g����kF� ����s����c�/�<Q��p�z@T�
BgM��9xM"j(	^'�x�H�&"�c��{��c����dD�i��	3ZK�`�>����gg�'u��{]��Q|[��
l�f����I���j��>�S�&2d{n���%���-%�(����hFZ,���GK�E
t-a"Y�KT���M�>sr���Jd�O$�j��9��;�T�^g>{8�/j���DP�3-1��@��D�ln@��%qdm<">�	
��#�}��L6X���Je�%����Q��&��xdZ��h&��Z��
h�D����.:��Z�K��*��V���k�"�������z�Nh���5�{xSoF���wpr��(�j�����Z�����3��0���>�0"R#6����y�Y;-��V,�!��0#v����_x�c����t������c�_<����?�����P�;�����Q{S����'":h��1�
���ln����NK��c$�	����d������2`k���':^g4*���Mo�
9Ml@jc3�^ia4�9
���������)��z&C�+��m����Oou���Su#������i���I}�4��J�
���mOM���e_C����7��������;�E��.������V���nt��"6�U�L�!hq0~N[m1M:m%K��s0YM����t��x�$ii@���g!I��4[��ub!i���.]�3�s1��D���{2d}q]6����5�a��6����r���}3A�hQ/�e���ne����Ym3��Z-�l�Pu�J�Gd�H���y4�R�2�O�fA�S�/3�m/�����d���G����t_
;�uF�hl$.\Y����,����:����E�DX��[�xW4�LW��-�� ,L�D�l�r�l����w7�<	�rbr����h�&4��y�n�FrU�H +�-.k�?���F�!���#
���U�>x�F9�x&�FC���%�+}&��
R��j5n+��(_�$
�&MD:�a����>�w!C��4��`��� �Q,2\M�5���(�t�
�5V�07.�![Pjt
y4hf����h���A�i�!�zMB�Y4��i���o�f"���9MW���\G�C�������<9\<oA�T0]�F��!�����O�-+����m{��`&":��l�QY���\j�`I(��F�K0����R�?}\HH��>5�M��fu��������D��r�:���YZ������G2����FV����$����6,=��-Q<`C�=G��� p��n^��`��Ns�8"x��z�
�	��'���
������_��D��d�����)�M�	��V��[?��DB�^
�y��?�O�(qd���>N`��p�o�xd2dv��l�@�q	3�ih���������&5'�*,��(�W����
z���h�1�����c������n��cF���J]�2#����FD����Cg�����4�H:�_Oy�
�~�����| �
N��}8���]�}������Kh)�0��s`�o��J+��0�G4��o�PW������hO�s��I~��B���~�>~U���i�P���G�qA����5Qr� ��
@�D���M6���������?�\�w���}H�����%���hSu��D��m]�?b7w��(�[{����L�3BU99.�h"���{�f4��S'���o^�x;�N%������/��a�\�����:���H_��F=:�r��DF�c<�}��=]3 �&S�I`�]�(�5Bp{��S#*B,z:|.y�[������X�v�������L�%t1�y��q:!VN;��h���Q��frB�ja�yGK'������6��0s��G0yQ,r����'�����yT���t�8���(.B�H�O�dTee��r���������R���mU�'�6]��D-?�B�����v�����|���r�?�Q��563�`�2!aGg$v1���0!:G�q
��5�p
�I4�<N���"9�+u���-���
l�GT+:�� _�+�����~,�7�����	1M�S��},cc]�����d�[�,��H�J7��3?f$��r-���r����VRp|�'1l
��E��{��1~'�+mi��	c�n6�Vi��������������n^cg�3�xF�d,�QU��2�����O���q�y�3����N��v��3�%�F��sc'���gR���n��0<��\�_D56���'�P-,������t3��������+�;�	l��x��:���N�@l@��'	��0X����,2C� p2�����>����}HLH�g����C��������6�<�O�G,�]`�Zz�}�=���**S!����Z�6�`Z.j"�1��	�_��p�Ti�_rjH�W$>��$RqD��ZcY7�jF^��RQCRg�k�����q�I��Pcd��TLt ��O����v����������/L��fo����^�������o���*���l�	��B������Gs�/��j>8�K��k���wDl������B��Uf��4���#�//S�^b����_��<�b����/��3R�}V�����O&~t����������,*�+�f��(
���� K�!����RHN�QW������Ad�>>rE��[���k&�	�����r�Z)�v���3�!���-!i��=L����v��{E�������-IDR���=����qt�o~h����2��o�'&����u]����$�
<����}^���BB>I�v�����v	�O(h�������_y
�wG�)+���gI�����#	=i�3V^$����zM$.c�@��Ve�����4xc��t��	���� ����P��+`3��`g����dN�)!���n����`O�$�#���aj����>����%�6L����?HyI��)32���6(���~g��y�OC|g�u�d��������s�' q��,$���8X\z���n]piM�.���#L1G�L��d�	��Hw.���6
���������Y�2#'R��W
�C����E�X������tg����H�e��.����I�"�jZ+��D%B.�0�\��o��@,_����
J���*��c�����m�z�	��Z�H�����4�H�i��_������_%��������
eaa&f��H'i��=1G�$��n.��G�*u]��E�9:��	F�������3�cq�Al��n7�,sY�2��G��w:�8�\:�XP�������Yc��@��{NN�{s!��ll��x�����[L&4�q�b�+�Z�ee��������� g[k�1�����61=�v�_�S�������	t;#(��1��8W���+�~�V����#���B�)��m�������b����oEF��z��������"�OD�.�7��&�l������gRh"�s@���Zo�mO�]�s���_vf��qe����qY�a������N&���0,������`����
wL��.r����w�N�:���h�9�
E@�����+B3����<C�V�OYP�ozJw���p#j���y�g�x��yB'�����3���XL��`-f&�V^"�u��6^�	�����%����P�����FbT���

p���m�}�����W0;�mq����yq�������@Y����I��
�V	I��#�t��7�.D���=����'�������(4�W��v�����������&G}��D�2���
��T��7�k,��_��0T��.��Y�g��[���3�?���O]�2�_P����K;�:0�E��fj��C��:�_�(e���g��Ue'I�*eBN�.�hb��4��=A��0{v�UY��%#�;�8�������GC�)����'�����L�5�!c8>=�K49T�h|�?M����"b�z�0>A���J(��~���i��O�z�$������E��0<U�;G�����6W"	JP1Y�����Oe�/'@��S�j�A��4�_�����.D�6�d��+
d��9�Y���G�M;��1�>�M�)9����}H>?t�#���-vp��bU��8�y��3�f@���!��M��
'�M ��MC�������8K?�������P��Kn���=�� �U��^�|��g!�������������4���������Y��s���R�75������+�F]�sR�	%`����d4�����E��t4����%�8��U|��}��9��l=��j�s)Ik����O������g"���K`_w������
��r���}��������,&�������j���;�S���F�>H��H���d� l�M��L�� {��-~��}*���M���������ud`�U3l�,!j$Y���u�U���yp4�"g���N�e
p����\B�vD"��e����0�],|���,N���&Oi�O;{�![�����T)�_�8���G��T�GV��"qB��Y��Y���j��32�>��w*�R!Q��8Q��"�V�U{xK(�D��2G`����h��f���|l�->��"Yt��U����Ld������j��a-��G%r}�G�32��a�5l����_I`�b�����G����W(�0��AM��B�g��*|���x��^����N�@� O�����Q��/��R7��@?���0l8c����>��	z#[;��
�����9������g��xYq��OD���](��.�d���d,�@�L��wAl8X�[a��'������Y��M�<���H�CW��o�vL�(*��'�4������
GY�40���Bv��^V4G8p�����rg�v��bK�k����D�_�����������������I+�k�wu��L�;��`���|���~���(B�a�/�5���b�#���+�m"��Z��;R��N~�K�	���o]+&5��0��=/3r��?
���HH����������6�I��/U����~��%66��3A4
{��*����L$X���LI](�)�,��2����i���J\]�v�P��_���
��O@[nb�+���R+�!�LyEW}�����HeO��l�#���Y@�_��Tu4f������'�QK�����r�4���k�9^�>�@MQ�9nb��re����|��o��A����>:�|����S������A��~v���@'�z��<#�0�_�A6��6�L�P�*�g��A�`�@>�f�~�1�>B���U�8�H���'fF����j���D�6Z�7���c�R)�t0�d:uB���[�.�r��{���|=�W�? ]���9�s����M#[@��t�G��bjX7
��Hz��b���;�����%Z���D��M�U�����Zx��e��t���THb?v��s'�U�3��AO��i(hF��
Bs�r�N�&>9���"[���t#�oS��d
���%��
A�������48���]Q�|}O���Ee�4��z�t�q�)p|��]�3�&���8��3�Wh��}~,�v��+ea���������L�������?m����Pq�;6phv�����]������e�������ww��%������kb"���	�=�X��|?��������������"x%��������$[����0d,�Xd�������)�,k0J��/��0#����6���g^_�]�ee�tn��������$�����[B���>7�I�G1pi�?�� ������}��D�R��7�����ty$����";P$ITe
�k[����C�(���������)a����/{-a�W�|�(�$l>������k����?�����������������R�������/�GE$��Y]F�k����J@N%��Km*Q��J@N%$)w(!�(aI�G�ZD7�=����7���w��[�v��2Ip�4���v��.���I�`x~���$�!K�i�����TF�M�^d?LHd�^l4����!c3�L�����������m�wE`���u��m�����������D#r��]�H�,+������� ��x7�?*gei� 3��rd��'������q�L&.v�Y2���e&�w���m�>:l0����IZ���i�U 31|dbF����$�l(9��g��8�dF��TAixm�W����8}���!3]��X�FU��/���g$����6Sq�.�k�|0��X+QT��[�/��u�����.Dr��\���}������^������f�T3sU��KY��nz���\Yv�Fk:�iKO|bm���Kz�n���tB���OE��a�5��M_�X�[�����)R�k�d
��NHXw��%�nM3qYm��z�v�%(����-������tB���`������t"������;����|�`LM
�'QKp���G��H���t(����tF�������z�dMczB��Y�V�������mi&��m�Rd5�-��N�scq0�M�5� �����nI3��]�DKz���hI'4��L��6������;s �`L'M���Y����w3�G`M��$c*(���P�����&nK
����0��r#;�����>�E{:���r�C�Ng6�0n.�8M���4�dr��ND�9�,�f:�iF?��,���
�E�Q������ �M�Q����z/���]���n3��%��D
�S�=_����&0^��Q����]��
N�USZ�IWp��	�*�fLV��<���&�j�F���p��NH2�_5ZH�
�v���R���dWK0�D�
��4���^�[���h��:��P5aT��n�YU����4mfU/����D���{Z���w����6�[g�jP;N�w�t���&��U�C�L�,{��==m�uB���-j�W��a�����(�iVa��B�:F����'������;[�n+ABn3k�_[G���$�>�xv5��f�%U�$�������]�hVu�u�z���%�0��Ap�I&I����w���4�{&C���,I�%�Y�G/��,6��6�.n��n�uiV��xW$����E��A��8������ ��L��I�'5��0{�&�$�����oj�a�A���yHY�-t����_�Ef����!�CR�������i�>��O"�U�e.!I;��G��<H�� �U�h����fTL��4�ps�JY����YP��Z��[�v�3 Z�~k"M�� y�O�W&E�\H��C��\��T�� �}�z��Q�Ez���ktH,.�����B:��1-~�����`g.W�<�5U�c������%�k�*IxUBlW������2#I^��$���L�.M�� #a~����R�O���Pe5�������u��j��_�����3���g�d^�HZ^�Q$G�F���c�����`f������DbY{GW�c�$�mw"Mhd1��,s��T��I���jW#�'�^��i`��%$uK���88��wF�
�%��@�1���1�/;�+=���S�x)B���aw�Q�Fa��?�\6�jT=���W�:pcc/~Rj�B7>�XX)r��<��"
;���p�����s2	p��������&�<kM�Y-�e&"c����6��st�c�bn�{��i�R������R$K?
�OR_7=m�����<'��}@�����^1��gI,KL�/��3E�-���s�yb�[�#�1��� M�w_1�I�H�*��6��"6�u3y���K�T���Rh���{���*�d
��/��N�T���S-�eZ�z�*�35F��H�F#�9��z������4��gt�����;jz�����/G����F����n1z�H�Vf���h�.�o�}����
�|�:f�;�n5il	|��`id��h�;��Q�t�X������+2�HHCK&�m)�6��r"���\���g�D�j�}�����}�����~��%��MJ�w�����4)H��j��+!j:z�\�sx��t�������e��JXA����.C �������U�Dy�8���?��+����,�J~��V��u��J!"dF��!F��K�q�N���2�l@1:��lW�y;z�8�-�����`tR;Bv��@�;��������o�+���"��2j��"3u��:�gf���*��^'��D#��%"i(
w0k���B����������������5!w���Q����C�����J(vC��LL
{�);k�
=��*�v;B��};���B �	-��&`��q��6�4�b��@J����������X���,N�������"�n|6O���"��-�A��� Iy0�	��
������<�����|?>E�_z���)3��:�e���9�6.�o���K��z
�u�UF��v'
��/�A��Y-��7�y����%�#y�!���(����~@�[&
?o�����$XJ�p+yl�K�#N��
���f5���[�?����_����#����6$r,X����i=���M$��i�[v�z{��K
=t�
,_/+
c�2�bo�\=���09�)EM���B�N��ay1>S����&���HHGt�7K@u�G�8�r�t�NT�gD�
8{y�����s����6S��,Wy����|{������|�<�wep�t<�F����!�&Vz|w��������"�=�_E�hGr8�/���2���+gs-�p����8|�#�O���F�	OJQ���P�)93C�[�������$���Z����:Gf�L�=�G��o���7���^���}���_�����YaJ|F��l(��.��nV�`��j@����*:m�iC������{��6=g��:C�m��^��F�_�sUy�bS]z������E��8�=�R�fg��������EaJ�����%�9�A/�M�P-lV�������2
�������J����z)�`�f��*��p��:��
����!%>����B����!{���(���q�|��EG)e�~#�����bs
����j��5��\��rXk\��u-�~g�������q�b�=�)�qU�'��m������Z��c���BX<����:����etb�����/Oc�y���|����f��V�y�C����=X>o�YB����f�2�W�5�l)Kp�Y%:[��s����R�3��T�~�x��A��vb���g~������9Mgm�Y%�VO�W��V�_u�O1��x
��� ���e�|<��d��Y���-���j����8x��V����0%er��P��w���&u�������������AEaR.k%%|��1�1e)��.7�	��M-���^(��/���N�&�;���ZB0L�-�6R�w�r��(p5����mW��	�����U��X���B+��B����>��*[������p�H����{
�5��i�&��%\��-QH{W/%�����0%����:�p�����s(90�4p�!#*s9�0��Ti�����`
��
��5�$Pkf/N��+���m����������}���B��_���X�,����Zq�������|�m<�����g{�E���]V�'F�^����#���M�[,Ax<k�4W{z���Y��0�f)g��M�|<��n�3�q�ix.��)�%P|�%�ms���E|��6I��fX���2������!<���J������s�A����m�IO3���gn3�)���D��p-Y�j���,��������@���%���K�>e=�L�%���S���?����s�_�9C�?��y�����G�<���,���\>�;_��.����.k����b����k�|l������(��Q/+��s���^��Zj
b\��Rk���^����*�UL��Rk���^����^����R����?��T����W��~R\�D�]�W7�<�L1]�#M�u�����I�!���(�!����[/����|zvW�1]���(������\g�1]�rb\��������^�'�y����6�(�b�"k�h��5��%��%o��AL*{#1]��{������Qj�b�^�z�Z=����u�j��t�I�.7�!���?C��G�>�u7�g��zX�3�|����~�m�b����k����1_ws�����?C��G�>����_X�b��z��b�������?C���Ra��������Z���
����	�oo�W}���^u1��y�����UcoZW����\u/��q�����U�bo�V}���Zu-��i�����U�boZV����Xu+��a����~U�bo�U}���Vu)��Y����^e�����;aw(�j6��P���A�C��E\�=p8q=��p(�z-��K?j�F/_� �����T��q����"���=�p(������������aK����y���?��(e[AM��'?}-7�~9��������[&+XT����A.+G��:���"�	�'�2����Q�'��1�LQ�vLJ�
�	�����<�4���S`���I���G!�rv{�'J?��4x���>I:��j���0��d�����}w������e��5��e�T8WlE���F������*����m�$"k��(�-%�-W{�g�Ge�D52���h��6�"v6M�q�<^�S$MW6o�����`�q��y]9urX��"�)'���Gd�v�6�,�&��TV5�7�>M�:m������2@A&�>Je�\K�'�%���MsD���N&6A�(��%9?��l�\��v���C��y��u~���X�\��A���XF�L&G�w���d^��L�1q�e6�&G�M��;���0t&-a�VJ�i'YkeI���q��V���s2_���5����$���Q_jL0���`>�$�.��8GaQ��4DN&�^��6��fO��B����n�l����W*��2�#"NUP��qr�����R
���u���z�p{)���/fUM�t�����`i3H����Y`�6Ckh�4,��l!^db1EmK2_+�c�]���@G���%��!�UFGQ��WWQf�&7W���p$�0E�dF�����[q�����U;���C��O@�\��V\m��jW�hrg�����E��dY������{;�lg��������&�;H
-��
�?Z�&o���g$�������QY����U�(Z�����I�[o� $y�8�^d�0�gw��Y���."np�)��'��H/�K���t:�-����*Q����z��/����q�
isY�'��@������dZ��
�E?dQ�������a��{s=2��Y�,����*�E��=u�QG!c�1JpqS'��6�W���"�'W������SD;=T��E[��I�P*���<�Ee0y��6^��A[�Fm��ICt������';�NN���^������r@Sg�~��YM*��L��y�y�E&�N,�����e�:���=�=u�����nj;,@�������a/��z�|����B��P���j��N�����He>A��$F�3R�wn��$��;�M'���`�2�\�bu�v���h�;W�Bd�/�x�;��-3�'Dh���Z|�-7\��3m\����IMn\�250��+D�76k�u��C�:C�j�a������->�m��$%����I��o"��Q^q�"�'���An���_��fhb[��H�k�`��E����x'��vLB'�+i��*O�����P�O�'�s�A�������������#���h���}�c��x�q��	��������:�t=2�<<)����G��e645���$������nJs�7�8v���)Kk�!mx�qL�t����0����!����;wq���Q�E��,[)���
����0�����v(�����d������Q\5zW��*�h��o����O��c����'���2�dg^1�7����uX}�.C�;)���}A�]���������-C�y�N5�����3���E!���8�Q�����]���_��'�����y�=K�'���w~�����Ld����"�}����1y�Q�W�����9
�������:������ks$��T����!���&�,q�m�a��j��Vx�v1�{��>i��F�����.J��V�a�a0#G�+P��V�S=B�t@G��e�.M�=����+�/��P~�
d	�o�#v�F�p���B[����^"��B�zl��Q%uZ�����
\�i�tP�0��9�Ze:7�v������^B��7�:�8#XD�����1+��{��o�g����o������y�A�.d��9�Myc:�L��_d"��.r�J�o`�C��t����`�����0!� !O����WaX|<^d������y��t�IFV7X>d^�;]�}��>j�Tl�/�^'�Dfd���2���=�!W�C�Ll ��a�����6�����#ry�j@��H����w�m%��.��$qb�a����&wQ�c�.���w��L[4���n�����M�B\���[63n�C��e6�,-C���l��B�75��mg3a4V��c��s���T�����Fh��i��S�.�L�������%��r�M�������E��S-���MM�����d�%�2Z���_�{�E�a��������Ed�R������U�M�v"'��H��{�K��'�25�+>�������	k.���3I����c����z&����k����eo�]����T��v#���s��_����y��B���X���~s���	�o�����h��D�]��|;��(������4�o@V��b�����jDN�8�����G9j�@����a>����x�Bc��LE�;��+X�
=luw�'���o�&.#����<����a	�O�(X�c
��EdL��u�����;�;E����3�J�p������>M��tS��K�V�������o���m���o����l�v�vf~_(�
Q�!^:���jvu�N.kqS�BNjf~3�/�m���"�|X��CO*R��4���tV��!��e��R5�"L�>n<a�?i���E��B?�:�_p����ND������t��M�����x��"��(��BI��������Dd��2s-��2�vkD�+I���l��^��/l2���B4�3��J�������?a��|�	6�����[�������������!�7�w�=�Zm�&����1;���4�0���S��7 "m��r�i����8P5:F�r5Gw2��*������nN�j.�����)/��bC��'\"��
�uq���,�s����_hC�N���;8k��Fh��ca*R����9Z`��-�hK+[��R����h���������-X6j-�}|������������6�J��g��a�ioDK0!��M���)�v(FG���p�wg1��B��<�!���
���co��X>��Z�`s|/$��Z�����3�Wz�I��V�w������an2���t�
�����@�6�s���zV�`��fwx0��G�&�"0v����D�5���f)@�&H�'E%8����T������[�7��^V��\����)ah���g��R�/R����?z/��e,��r�7+H*�:��F�[���Y}���Rg!�po����'���k�@��Q����**@}�q`�u��X���u�;������6����;�s�F�����2R
gg����7�����7�����d����_��\%�a�z��O"�����9�5��6�AM#G�C��e�y1���-p����DW0�R�@�vK����c8X�^&�������w5����#W[����'��@���=E��npO�����������>B��Q��H\��7��34Mwsl��
L��;�� �l���D�O3`��Nz D|���`���a�����F���<=����mD��f���1tF������yG��)#{����7w����H*���G��)/y2tq������h5>
`|�������������o=�&�V��a:��t$��d`�Jgh����x�#�Q��g���+����&�>���V*�i��4Z���JGK!��c��J#Z8W.��+�6v���r��%�M����E��(��1'F�kH�3[9�;��|�h�c[*�qa�u$�
�z"z>9�����~�SW5�����n�:�:�]��{lbau���3"�U���m{_(eA&�:Z6K�5���� �C����c"nC��|�" ����?9�K���?e��xr���7��y��������u�=���mS��^W�J2�"�f�y#��-��1��H#x	��n�,�^EY�^<���������,
i�#m�O��:Jcx�)�f�=6�w����5V|v�<��@D�S���������"�ot���s� ^CK�O�5��-��8���\���'����\���zr�/��8���w����q{M��8m�����T��;�J�%��l���$d�%Qr,�M����9Zu,;y���F��[�s���o���lr�pG���hx/4����G-��&*�9�S��Ddi�K"\:��	pcz>
p�'1:���s�{)�����5������V^H�������,��-�����{�B�Q=:]-�:F~�FD�(L�s�������	�e^s0�Wj��/ 3�-�j��weS���)Q�}���|3��>����"c�n��_
'J��Bvs�R�1U�����lp��;��rq	�y���� K�|�N,�o�LR�f���(�
�wU`���U�7\C?l<
��ydS��l!q�k��q���Qt�Sl�!���1���8�����L.:�<���;����@�=No�g�������3X��`�����s��+!8���.���pq��^��'	`�
�
�j?zf�l����r�;xZ�Jda��_�6L�y}$"u��0���'*��E�b��A#��������g^����Qk�U�d�H���yq$��bH��&�=���P��������w2N\���pvw��-���
i�'��Z�mM=4���<�<Ml���/���F�p�"��&��t��B������u#!y\�`��E���
\��O����\hD-��=p!�*l4`�)�{���zK;��t���������MS�����q���M��_�6�%@���F�"�f'!��F
�����q�)d��:��N�d�qE?�M{���9�����l��~
*��a{e;J`�������2w$ ���k�?�ZK��E�:�s�AC��l�C�GDVw����u��=Awo�;,�����>3�X��������u���&���WP������m|<����H�6�X�����tX&�A[t���H�jK�P
WE�^�����$����E���J���3������Pm��m:��v�c,�4�<w<�����ZC!����m�.F��$�����Js��Gwn����[r'V��wq��*6�4�r!R>��v��!�V���Wf�vr$���D�D�����a�n���ESy�A^<��aF�����bB���y�P�����@Zfu��������������1��z���<��V� �{�@|$�G�%q		�<�]����i�7��L	}��-W^�& E��71~"l�=F����e*�����C�9���6YHWh��=^1n@�\�_�����|<_km�@/�����TN-o&�S��bX��6��}�Z�6�F�����. ����Tv���L��sYyxY#�<�����b���yA��p�je�7�A�b	�����O"i����X�<���v6��1�������&����U���FB�����-q���D�����X�md�i��m�0V�����3�*���R%
�3��a���Hl������) }a�/�F����#)��$���K�'��+fA�$6�Up�!���8��	��*�_:���������^��M��N������ja+�v���)�5n`�aS@-ICu��/�hS�#z����7lh#E��=D�w5.����02![��v2��lamDd�B�KX�����?jHLwox�O��@�9&|�������;�<��s.
�376J70O��P
�a���[���,�@�f��#y9�������Idj�%'{�y�4�$k74���W����7��;���B_����s�_jDd�G�yBf�T��-X����z��D�0�x�����H��
P?�g�Ls�t�ESx�;�Z�����G���p3���(�f����:-/$�a?�(%=��Q���qw�}^iH�U�j�Y��?����.���Q��7�F���� ��'�B�;f���(E����[���,!j^g�N:��"!?I�6��	�x�:0pZLD�1������<��������>����G�6T�YK�2t\:�>�6N�r��V���0���nO�)/�����c`P����D�+���B	���vuq��ch	&��wG�u���5$@�����M���hU ��'�+����@K�i�����d�qfB"��=p�k��?���c�b5������C�O�Mxgd��:����x�������M&�'����v�u�����`��x)	����fi�`qy�8J�f��o*`�t��]��Bcm/�Hk����j���3���D�j���t��EG0�3�8-��N�t��H�eV��(oQojGK������t5��3��A�'��q�`_GZf�����s��)�;��:�I����xO�k�k�mh�L��p���.y\6���,������4�SlD��V���>��6Oa�qCuR�`���d�{c���,l���:����W�r�������<������"�:{�MB���x���sG���t`1��z����'DY�@7��!\�y#s�������$
�,h�����O7J��/@MY?����`x���
p���S��o�4p(�}D���"���B���
�
�L{A�u��y��U��/|�(���������!����Ak}y� @�\���t��ep��#D����`b%��2$�~!�A;�Q����������j$�!��^�aD O���<��m�$`��t�)z0���|����b�.������d0�p����dru�y?��%@<vP#�������b�Yk�3�(�����
AK�9r��������G�PP������m]:R����v}��O��"��!��T�K��gZ���ZZ���X���X�O�=�D����P�I'v�E����o��Y�?�ohi.�.r��n��|3��]�J���6��c����oL�qY7�%Y��Oi?�Y;�:������uQp����3�H8L�����!�a`Q�7��B�y#��G��.�{�it49^�9���M���"{a�3X	�n��$�0��R�(��������[N����S<u�w.H��)>�y�+U2��7�:��C`4��!_e���d���hbGm���Puz�\���x�?�r>c���G�����~�L����XL���j�,|����������= ��
�BAOs��e��
V��=3���d����.DPy����
n��.c?�~����(1"�IDK<�9GH�����"���>�[P�1��Nt��.6�]L8'��~#
G��8:�'d7�(�������J��I��H�A�.������E^�����~p������Tu���$p�TH���8Z�M&�L, �5�?/�x��@�����3X��6/�W��FG��]������:�++�!��6��q�mZ�K3n:<�R_�
��@���Z�G��� |��89��-}�$��������R7�L���L.����HP�O:��0pzFs`b��`����O�G��=v%:��@^�a�|�(����1����b_>vy�\[rr����q,y}�_�]e�^!w���!H���$m�~N�����k�aH{�y��!���!@F-2	���?G������V��d+qXR*�V�v����Q�'�!U���jc�h�c+p;���C��pH���.FF	�������7���C�{JZ������&��5�!���|88�9+�V��_j�|����?����N�����K�;�X��6�0��d����e}=������aO/k�aOJ��)<.��1��>�
sZ��}���^k��I��7��RI�1��)@���j
D2�l4+nJ�����q[�Q0��f��)��iQ�lSo���yZ�� �Y�,i��Sgy3��5����n����D�y�����������%mH���%�����6$u���m�/�Rc
���Vk\fI���%�l�$,iG�kvr6���q��>/�-�e	����������.���iM�}[]�m���n�HsMf�ch	��k�WM)��&SZ�|m6�����;83�
�f]�����|���6Cj�zZ���3�u>EP��M�)��o4��7�������)��#�$k����1�"��GD[�drZ#��HhX�Rd��l��2j�C���zl��De�;��#�J"��qx��K?x��d�@�K��Jb��y�D������'#	i]>U�i$�O����)~2d����K�J�J���]N��2���H������xy��z�X)ir%=%Y�$QQ?/����#�O�m�b������I
2a0����BY�|�(,d�$_�;���<�M��(��{�JT��9�O"Y�$?��~���Y��0h��f��I�D�7K`px��������M���\l<�_g��S��T_�����)�\�U	C'�M�Z����9t"�Hd�	6<��b	�6Hc���*�B��
��"'�^"'CZ����$�]�	��0J�����j�Y������kx#��'E����������&m�W�����K�����M����55M09��S�4M��fEQ��&'�fB�t@_d�2U{�uC�$]�8��K�?/V�6��T[���{J�~+�,��+�E���V��X]bh�^|�Z�|����6���cn���P@�O�h�����eiF����3u�!"�0�a�e*p���.�}�Id��;����Zn�ch�7y
�k��n%_oc.8� ��6��~��P�����,
y���.��u(7#2�o���{������tC��+��������f�t��Q��Z�X�u��Pl+��V6(����_$ �3�{�9[��1��A��^������*Hv������ �oz`�j����Z�M; H=���"S����*�j?��h��
�������|��-����U�����#�j�����N��8|-q�WB��g�1�Ld���~�K��ZA��Yy������l���@x��y���6�}C����yOg��G��:P=	���6G�;z�m����u��6�m���.�P��	h���2S�w�3e��#�>���1%���w'K���.i�|�G"r�����$)�&�.���JR��3������;o$��b��5���x��wa7@
��+m��$h[�c�3�n�����DwS�^�X�nWO�m[��fd�+R�9)-W^<MiR�~>
�W4��=�m��7����I�@����\�������1O&�OZ{��Lj���mE����j��VQ���M��Kc�<;
����lK%���[��R{V�$oi�jOZ��FO��vm��}�h� ����6;J`r�'����e�����Su��F>C�@&�Lc?U�I"w����
��m�Y!-���$����o~� ���%�E�6#$�F-�Y�]����D�o��+�)"��"�"�!��jhde�,����r�,��C+�,/��q0_&��5�Djn�/���U��H|�(:�_����|���M�cm�1��"��1jCH��dj�'�D��(��{���X��� _d�&�T��4A�M��������Q�'��������<���w� 2fD"O�*��H��� ��F� �a�JlzHDZ8PK����!#���ZL��<=������� �9��xzN��W��b�~���!���^�������~b�.�u�u��^���g-�������}r��YK�?�������\�}�R�O.�>+�_��yN����&�u������@��n�_����[�Rzj�<c��O-�_7����sM|j�B������_����_����\�����2�#�����������_����������O��������D�������������������������8����}����J\]6���[W��{3����`c-��D�K�&�ND��������i zV)L�w�k��`[V��f��*A�p�����N�Bd8_~��/r�����������c�8��v�!|T\�E����6R4���H��?��^%7kiL�Q&"��W�:2��%Z���K���R����(����z��%�y��;'N	��)��5���C6F d��
�SE�S-�`r#4�'�335oH�����*�>�1z�������,�Y�[$+���#�m�
��$�������
���W"���"�l�n�.�����7�'0-�H }��N��v�d�d9���;L;�9i�q�5$
��1����KvxL���@����mJ�������U/��!8~�7�>��Q�5	�<�~q���gN}Z������t�H��\o���o��x��O}0�?����l������w���h	�n�4�����t���VTw�k0?�m�u�����,�{���DK���w��J`���N��CF�����`j�
D�n��E�E�����8K*�L&�
�J����
d���������?t��E��$�[�_H����gC��
���?PF�-l�&��t3��Y�L���q�?z�
K.�Jv�{��6�l�{'Q6W"9UEI�Yu���w�����G�@9�
a�y�:������N���1+\fZ-8:G6qM�i��:����Y���N
)����dH���q�6�c��j�[���hi��_��{�v���;Dky8��>�X�W���C��?�n��P&=�9U2��aY;�lxY�����:��c,�t�oT������Ko`I�w�h;�|O���RSgc	�����WN3P���7����S�:����9�������8���l�z���Dd� zX^�F�h�[^��,:��@� �9�����1��Df��3�v�rlhQ��@�k�
mW���_���U�O���+I@�w�����e�;�S7h5�D����i]����\$ZP�^D�����eCK�i�?Z-(��iD*�����Q�;���$}M��j_�� m����1��c��<)����t1!t$`�1��s)�C����;�!��:���^~=X�B�k@b�C�)�?�v|a�������Ir��3{�$"e;x�������"hJ�1S#"�1��0O��\��hI���\<f���&���T��E`���L��)�*�[E=�0�?�L�C@������T��RoV�&�.N���;Z@X%����/$����<V%�o
�]����<����;�����%���A(�;p��j�n������[|����9�wYC�����i1���]w�`��D?�$!_c`��;�:0o��C�{�(���Y ���6��P?!������~���
IC|PBf������$k��>b����s��l�<�f��Dd���CZ�����}C�+�fv����!���b���[����X�����,�@7���~!?��
V������ebg�;���qv��#��m�)G���a���+�u.	y�(�����a����{�w"U/e�4�{�a,�tXt���mz�X��v�1�C3R��|X�GA�JZ6m9���|�3���WGh��t�%���X����l��b��hq&����$��^o���
����$�A|� ��4�qn2�7��U1p[^ ���\^��)"1k�X�pd�mj�~���b�w��@�����3����Y4��X�,d���f�����U"��7Z���U���=>��Q2�p[�FL,���)�6�&S���\B#��H���h���v��'p2a����F�lUt�S����\����/�c��61]*e���}xh�T�v�&�v*{R��'S']jH@L���p�{�i�d��{JU���d` �wGEVM�s�Z�y#'��6�����&U"vZ��qZ��j�d1�>�Er��R�\���5S�F�����5W���l�P��I_�S��RC�=��q�(�iSC�Y�Rst��/��xO������)^C��&�A������y+���lr�_�]�?������[���i����cY���xbP��E"�/�g�)p���,�b�8���As�
���LsBv7��vG�2���s�]�����g'�{l%e���A���i��a?3�	����`����&���]d�v��0�����f�����0p�]����������u�Y7��^/|��]i��kv���;a��Ybf�w��9�H�������n3������Vd2�u
Y�zo��ng��Iv6n�*����������o���:��2U"�������l�k��3Yv�;0��jj�6�?��Io�&Lh�M/�/Rd�`�m��|�V���M������t�,
6[����l��s�	�A4���<v�����VL�V����bW��If�*����g=��>����-�t�[e FdP	 �!�<^>S`�����m$���/$�u�����"���!%K g�?<G��M���$5�����*�����}~_=��������CY ��c��>o$uf�eX���AX��JD�Y9�|�X�����"��~�����)H��<^��{rS�L x�
8��Dg��o��;p������b��/��xM��DT�qxA�\_����
�|�R]��������
�&U�
|��]������m:M�2�<��H�@�q5U�AkE	h�����r���q����R�4��x���
y���X�v����\��Bv�
4p��ss�O'�����t��<�����W&��m��N&��x�J��������������N����&�m��;��V���H�}�w
8������a�qZ�������9-
�L#��Sc_j�g�i7��*�Ns�}^������f����hW�r��Yz�E�.cdL�[�|u�d,���`P,|�,��{��f�AA����
��g^7�����M^H�Ws_��3"�,o6V[�]��3�_�`!
���)8������"�#]�����HO����}1���r�P�]FS��|���$��^'�����_�����l6�)]}���C:Q��Q	�"����O�\Vk	e
e��
���]��4���ND�
]��{��^����fT���8^H��M0���]��#���U#���!��`�&�a���$}!�m&�y����~����$D��,����,��;����p���(@�0�u�E�5c���<[�y�}��@k|�]����]��c�����G%����������(2��P8��G�l�������31=��/��n72��{��rM����y����K8��Q�K�~���^�B����������/��D���1�V��PT��b�T��f���`�4����'�(�:6O�#o��,�7�k,+��Jh����-/�X����Mg��zpP;��m":����X��B��d�6X���*S�!8c���f�(��S��6��,[�	�l��&/^S�|���M�d��[�v��Y��@x�p�*�������C��Z���K7��K�wp�f�g��x����ZO4�����|�R������am7�J���C�D�`i��gy�PV=g����]���z��r_��8���>|7)�/����s���#��>���������al}@� �a	��8�����������#m.���h	����2����/��f�.eBMvt=�.�B�|��:��~=!-�u�������,��b\W�s[Yi�I�����f���t�����b�O�f$��M���l�����gf}g�b]��%p����2������4�y0���Z��X]j����\�5*R��z����H����x�X+l��YH�n/$�^�P�_�SD��
�3�}���v���<�$��������V��,
���?��^��W���gXB#>��%�oT����
/�:��d�)|�T���w��1��L0?bhc�L���Di��5-���+�)4F�/�e4�a3��a�6���R�X��y#��ga^'���������!HS������SC�F���,���'��B�%�ji�,o�	�_�3��N2b4B��JB�������F-��\mt��^�0@'I^y2�������/��'�$���%P�����A�7��]F������w$@'Ud����,�C���3�J��R'���p;��1bQ�z
 ��+I2��\-g�����xd������^�M3A-�.k]�3:-7�v�����#[�A�xXcEk���������.��4�z���������E\����YPO��l�;�~��q��u���.r/���]��.��[�8��UH�dP�"K.7k�/w!���%�e��U^����L�x�T�M:eX�;�E�f�J�����c��8�(��w����,��s�n�RF�kc�������;c���!;t�)eE�f$>��T����T�����H����eTa'�m���#�H�EQ��Aub"t��Z�
BW�+����xcq��o�O	)dt�-t���B����&!��I����xn��i�f�/9+����L%F�ov�F��T�#j���OQ������OQ����������,�.�f�t��e�~��������c�����D�>�����|L����?8n���d)@6��7!}��%|�����_�3��C��$���A��"h����O��s ��i�a9`������J����V���4�(�[}�>���-�q0�+6��E��!���,���7O��$�x��$�;A��c�Tf�yT�Hj��~l�\�����GI�����,�I�]n ��v^��5�d�f
�]�0��(~:���C���Rg;��gn5�7��������'Ca�Q�+}�L+{��!�:���& �/�0[���J�JVG�a�&�'�����'���'���������$��"qt������&�|X.�N��8t"���y�M�o��<\���
����������fm{�<G�	�����)Z�d�K�F6K�w ��c�2Y�	��7@�+��8hE'�n��R$}��#��.���_��=���H�k���J�[���T�!���<0�!��}�=I�u��l��;o����TZ����4yc���� ��1lqN#�f�t��M}����U���UO�?q�B^2Sn��E[����$�j�s�[�K�?
�b��\V76����ji�C��/��D������A(E�!��������$��T?�4��A�]�I�l���:��������E[]��o�����������|1�����GM�tp1��I����%����+�����
x��#r��}���![����Q�����E�����.�:H�8��?�bP�}��h�.��Z����v�s��������s�����K�;q�r�	�I�����G�Q��!��>m�"�<iI��������hb��w#Q�V4M]p��L�i��\��0/7��t*��7&x��<�|C�X��@l6��D��Wg���� ����=�L���F��:��wV�=�a-�=���G+He��]����,?4�g8U��N#��{��/W'p�}�	i�	��VD������f�}Q�����I���j��������8fQ�����2o��>�4M�����F��O"KOz dq����
,�0?�2s��p��Y�`��u�jV{��[�
I_s�]�I���	d����:���2b7`#s�\�D�H&L���u���8�������P
���72b�o��T�q,��R'n�c%���4u�q�%���g���\4�����e���_E43:��b�l���
��hq�\�9P�@o��������O#"�I������V��w��# ��u�����;���O�`-����6a	�����Ru�_[RVp���#���M��|��$3�O-��d,�T����6��SV�F�4q�j�:�"z���������u�?G�457nN�<���b��T[D,ck�[����8���?�|yq��'��x,�:�H�r�`�
w�L"�����b/���S�Dg��i!Y��S�h|����wElJi�Y
��7����4�)N�7��V`KT�tE�q���
)�TD$J����G���ueX���79e��`I��6Z���-������%���waA�K���6����1'�����a����=iH��i2�_�Ggy�H��P��n6�/fQG�H�*���Le�=�8�YU��o_dyE0��anQY�&���4.N�������t���f��e��
l���b�������i���F6����H�P�����
sb�����i������U�N��+�����������
|w`�x�D������H���!E������8"�i�\�K��U�H�_��C��%x(�
��������l�2��2���
|$w`F2��i��/��0�x�\y,��>�w:H��P�����	�����f-��f�0����F���	3��{i��It\���$�r��s=�D�
�P6l�s��97�D����^D.?����D��+��AS\Dnz�E�����81J�%�^�?)���������mx�}�$o��1�;��
������q�`�1��t�jD*]�����k*x�������W�����O<k��n_|e��D4*��j���Z
DC�}&��
nd5����`��e��#3�MQ���T��.�c�M�K'Be���� +����O�������#U��("ZXK��uh�w,�2��h����s��
��XG$1+;����T�<�q�������X�FFS����F������{�:��W��\owl�~E��[wX�P�������^��V*l�I���� D���e	�m�&V��N���k`�����*�F+���\`T6��7�1�����P��~���w��3.���O�U!7+��&]��fs�
����fId�E'�����K���������Z�&��*���pjW7�L��m>�ty�vl��h�o�Y�C�w'";����WT���X�G|��e����������N�j��=^w+�^}7����wq�DI�QR{�z���@�nr��������J�*�)7U"�RE��;`qP8�u����0H�8�6��b�$�Q=���\an{V��f���B�|s(A���p���R��6�XIRQ-�����J�/��e�#��Y�E��i��M�
���8�M��cl	�<q|��~n��|s�R�A�q�3�!�K,E���~�� ��`a ����j@C�'��QX-}7�h�n�c=8"xg�������������lC�@
bc�>M��)�|���C gIG8�?Z/b��ed����	/fp?V[���y]+��N~ye�/�+Vl�I������ �c��>O;L��
[�@��7���']�a���^x�:����u�	,>������] '���+:�����<�>"q���Q{�P��K�Hx������-���gO�?�w�6���������������_?]����l����k�%(�&$��q���Vq���|b�>�r}^���l�:�|}?�u��'@�d�����y��Lr,b_������iJO�����:0a��F����2Q�>�����=(A��(��e�E�
E�@�5<.���E /������81)�6��B	`�>v�%����x^�}��������F5������.k������>L�(���qh��Y�F�2����-��u{���?e��y}^�^h����%��a:�XV��4��W65��NjUn��9��
Y��2-J�m�^�h�����oD�2�TP7���>����8���t��4�
�\h-�9k
������
����D��[t)`2?&2G�+���n%�iv�J?/�)pw��
z��;8u����wK�L�l��
_�$K�Z���|�#�ge�tzs{\��
%`��g�{��u��4�8�5��F�s�z�6��v$�F���������yO�-4�'�EfS���n���Q���t�M)���j.�(��$�xr�m��	���0��u�!�D���v��0�����,�-i���q%[	��(e3�����v�\M���v$@gY�*���pLg���38F1�����aI��L�������������	}:�2���3O�=�HK7��h��8l5�����;G�(�Ry���������v��w�&���waR���
�a-3,�c
�,�c.��T���l�����B[iS�.��6���������hQ�=YS�dI���������0�
y�V$�e-�)mH���qo�g�-�i+>�e�b��;��1mYR�-]2c�PfL�+����#-����'.g{Z���=�5=��/�i#"��I���5�(k�iW�	���
%���D"�lO;��������=mH��8���������]:���iC��=������lM���aMOs�5�~��9iJOz\aIA����yzo6�
i���x�������-��T��i�Z�!t1�8@>��T�-��E�n
��hG�L���<�U��h�(�h�a�2\U]��m1&�'�m�M; [�o�%[�L�=�\{Ja�7�H3�7=$�hD�Z�<�"s&��"_G}����R��00�������nlt+s&���l������O/$��Z�>�|�Hr��X���bB�d6Y4;���,7D������k3����m'"�!�4��5&X�6�YT�>���Z�Us����G�W>���hI�G������)M��OK���E'2�.%Ef�bw-NS�D���(q�f�[���6�F�dZjl���a�vwW

�G���F����:���5��[>��4�w
y�J,qgC�����v��&SU��O4w�6���R�����6!5���C&"s�O���~�_	h	&�:��	���w��F���.C9��y��@'�iD��d���yq��q��7����b�=�Y�;���m$���u�tS5����6��B&rt�b���6�:;�����c-�h(��X~y�>���/F*�iu���`�6����|e�>�����
p����z��(���BE�5�7VQ�&������%5�����F��/�C[��4����7C~,h������h�H
�6�
Y�����B�l��e��[���6?���uX�v��� ������?/��*\�_���Dj���{���<�'2,h������,��;y���M���2#��~;X2�
/�E�y��v���Yz��ot�M~�������xt�B*k������>o�l�����)���<ub89=b����-�f��T�Y��O ��B��~�*����k;*���H�j������w��H�����~�����x<{7!tl��
	��\��Y�I}��=L��{��L[�G�IZ>��P���;���Y� ��p��,���=���]����0gAN�z*A�c�r�������2�t$����0!�||a��W&�����O-�v�M���y������f��;"��t����[��KG"�1��=�<����b�lZp�@�h���_8.^�SW�71�[�f�P�-�#�XW}{x��lv���@T���4����#�uL�T��{	���D��O\aL%*B���*j�)_�`hNaw@�8}//����2�|>�o�DC�f�^*�1S��^����� �������6r�V�-�=����{\����oI���4=zS��+Z�,���s�� �S�qSM����lz�����NG����>/���g%
��_
-�0��92��sMD�F%BZ������r�}~��k��8�/�`&��
�6h���#�Q����UC��YX��4+��+���[���T�5Ky��r�E�!M����'���=3:)����fZN��#>����lcg��B�Z�~�i����{����	��&�K���K�Z4}��k=�}�~#O���s��}���P.�ZI�-��~W_��9�3�
<����
��V��y[A��Bo���%\�|���l��e�L���o��O!��l������H���;���h{�|�3c�1%+��������AN���D�������������t���F�9�B�Q��e5�����^��:�C�r?)���e���8����E��`�OK%Fo����+?�������]���B0<������1G����2@Z� <����2PW�1��,�D���`�r��^:���5�l�v f�J�R?L���x�C }�o#��r,�������L�1Lx�I��(����8@���Z���������U�.$Z!�v����;o�`~o.8��yN}�+4�N.��1�$��oB�����������X�	��2(g�=g��/��5��*u�r
S)�R�\�
Y*@5����J4�m6NZv[Ul�mE�*��ES]A����H�����-^|��� i��#�p�n����}��}JdE6���mQ���E����Ml{!M�g#(�w6}���:�,�<S���h�i���)�f��e��d�al���t�����J��"�d��c�9��/���%>���:�i��J"r��s�V4�kq�� ���j�������-�_CZ�mD�������$	Vo�G���z><������*��HT�Em�DU���CZ5�>��1A�DS��R��I����A��Y�z[Bb5n�A��F����l��%�;}��;1�+����c�H����3h���(��L?��t$I�����v���)�(����Xm2��z�R�q"N�KA�#�����'V�Pz���5F|K<� w�������|���#=.v�f�*��/���#���FD�y�S���an�h	&��C����l�S���
����:��>[G����X�v<Lo�nA�|���/�eso��f�����h�D�����~;����9�#��F�!Q7����s���C�B�
h'R��i{nX�����x�����1c�{��[B�w��;������|������}q"�F����0h�b&[,��C�i<��d��)� [?����Aj�s�Yb8��w���I����N�,|�l��� r���mlc�������I>�q��	�<�����0lf��aD�Tf_C+/$��
r�mX&���Z��E� �3��.A� ��5�(yl�������|�H�����U�����k1o���i�=�}g�Z�OGU�_���c�V�k������X�F���iC��23��T`���2��HT~C��V�;����J4J�������2����w���'�����/���FB��5m�
c��A=�m���!��E6Jp�w��|H&c�e�{�W��VF��U#���!��3
j��7i�`��4l5xTy1.3\ ���dL���|]#T0:�H5��a�I��uzh��T��0�f��Dd����������	�Xm{W�c^� N����8��!y���'E����<wE�N���J�9bR1}&��;���������E��;��`4�i�]�S��iS���g
��5����jL?���)���+�y���,���������`0�B�����5�������+���7�|������M���}�o$*��dn&�c%�6�;��y�OYBd&��v\^��������'����$��~G�
�aq}#�Z�q�����-�n%�jy��[�e�����0���I�GS����?&��<���
�b������}��3��R\�Q�����\�G�>����og��b�~�v\��������KJ�t]�r}���v����ck��Q���]��\W1_�����R���)�1_����_��r�������|}������^o���R���qd�������tb�~����?W�1��y��:�t]�$�CL���\�������G-���w�p�N1]��(����g/�y��:�t��:�t������j��^����y�}�#Y�������E�!��u��}����1k�Y��|}��������_+�K1]��}t�>���]�����y'R���x�����b�>����{7p���G7p��������{7p�X������{7p���{7p���{7p����z}��k��������
���~���;�|�(��@��q}]_��V��
�!��B��g��������!v�on�]����uC������77����
��sC������77����
��sCx��n�]��b��������!v�on�_��b��b��������pC�z�������/�����nH\��v�!q=[�pC�z-������|��7$��R&��Z����������w��k��^��������������X9d^�.8�d�X��"�O�0�"��7�,!����F���dH��`����JdrV���(x�A	�1!r���&��K��"��%���dB���@c!9��~��:���E�)>R�sfe���+��(����
K�@-R�p=t�eH�K�PC���t���0�{��������@e���b�T���T�~��Y+�a��#���T�[K�Ch�$���lt��o+�p����=X�����NB��k*�c8
��Lu�W�����?F�r�v�8�R����'��:!:.�����i��������`)7��Q/{ �x!�������/W&Y> �ad"c��L����:��p��"������r�W""��`��*��#�o�h	����q�@aI�������=~!��
j�yp&R�,��!�Mh00i��T�M�<�\��H4��
8w���z`q����,����4���U^H�d�>q�������J�+�j!c������l:C���R{8WL
�+��I-�+�vf���}��V�Ue�[G��,�����eM�%�r�(l^�����M0�i�b�a�5���]1���dYZ��j�0�ps��1m'��D[��i.�Uh���ilP+��dG�1�����

lORpM���h;�3���M�j&#;�&�9���h��R���v#�#��Q:	�{\����N?�tT�m'�J�RO
?3����#<�8�b�cT#,�bp��lo9���G�s'������H��zJDOM?������=d�������i�&��T0�����,t��Qt%��������-���W���D
�Ny��Opc?b#K����~p\���B^6VMu[�dL7��v�K���`��1ma+�Jf��<�+��x���K&^�Y�s
N�����D�yh�C'D�(�3��$����'�x�����Y�pG�O�4�K�,��5��$��*�����#�N,��H
��dPf��A�����)���w/���;&��4Y	�&��o6���=R������%���a@u�\�����G�7a\G��o����(/`&[;�����jR�s��W��>o��j[*@��s2a�������Lz�v�"h��>.dwG�����),;O�syUP|�P���b�[f|�DQY�og�_`pixG�����:9��
d	�oaE i��3;Q'V�q��D?�|�{������P��@�C*[��i�5��.P���^1�b���F4Lo22h
�Iz�_�;�
��f��������WW���z|�?������d�<���a������g����z�mr��o_G�'�q}�����p6YY�=ya�$����M^��~���<�uU�*��HJ%�Y����GD��������u���/���"T	��n���Y��Z�1�X{[Y|�?���LX:����^���-�������g��_������(��/x��m��2��8��gE�E��xM�q7jc��~���� ��Q�V���Pm���eSeKQ&���C���=I��5�qV.��8�rH@�`J��,)=�C����<�E��J�-���A}�>*hw����4{����|��T���O��\t�\�7�e��Hc�r�i;6�Y�G���*�|r�@y��Aa@��W!���g!�G8W���[���yL�}Y�B���|�������
��i�OL(�a6�`�[H�"M!b�)���������V:9�=�}�-b������������*}y�� U�SS\�y�1/_����r���#���M	:�/�u5T�`�P|�[���7���jz-'��`|V��C"�������C_|�4
�����8R[��.�-#!��J���s���`��H��N\�3��B,��^rD|���|^NU�C[�r�=��5�3	�o�X�cN��&�=6���#%2��Gd2������$��9HFNV�D���Z�����N�W���[&�y�bn�	i,�Bv����_��L��w>��Xu�Z��)�m�B��l��>�4CP���
$�33���^�����������t	#7�����]`&�Bj!:+����`����
����a�>�A�s "[����������]����y���E���������23lD3C'_�'>0�A�9�u2�V�Z�b�%w�Z�D�xl���zP+m&H[����~�d��#�����z6�k�:���g���6�M����q�����q����n�9(�
?��{N;�sF	n)��1m�g3�p��=v����u�*��k��p�kB>%�?�3��r5��]�h�\�,z�Jf�����:��^u5$�N"��^6g��8�mJ��a�bYa����}A0��~-(�����>��R�"k�>�nl��rLdS����#u`-K�Y�����U�A��������0;,���@�'�T��a%��=�QIG���d��'�v�
t�_�<|��l�@'km�<BE�iA��0��_���|��$�#��$SW"���~C'�z6,r��im�#�5W+����/�M����H{LD�igAt�R�L��!:D[0!:	�upf���I��=����L-�K���8����!: [ �w����#��H���uq����aB���6�X
��_F{�f$2f�F�{�^e��,HU	���M�np%R{|�pBIID�E��,������{Yw�o}������*���~����z�3��L���ikd�}�������������/H��LF;�e_��k�h���zep���T��	�v�Mp��i_�&�q����	����;G�����T�>���Q_�O��|��%f�f"���I�����������Y_T�C�u��d|�)�
��|J&"#�e�]���0�3�*��!{�^��gF*��M�%��/H�~to�]�L�m����G��$���P���4}f���r�IC�1.	�� �����������'f�N���mh�k�q��sF�>=���n�U�B�0� T��3����^������Y��W����?V]����E�.�`MH�������](�����xn���$�a�A�L�M:����}�F�X���T~�!`����
��t��%�N��������g�5�'.�c����\NZ����������b��2-mH�r
^$������Y���m�\�;�H�.H�5�����t�c[Y?�<��[��Q�$M�`��@�-��e>�c.�%�����3�k^6���' l��
���C��������	�3;�	pY�������p�������u�/'u�j�7
t���������SbbI�����#���`�BP��w��m����Hvp�d�c�fR��n�B����\�b��e��N�[W�7;*��>8/�������7��:�{��e�����^s*�������bB��,O�1��_���b����|�����	%��Qw�i/I�(#�p����zy�m[���y�oG7�2u����-<��0���7���UA���>�M��E<������c�c�����>S�{^F-&�J��@6W�D��*���\&�J{��Bm�s:��^&�������?B�GP�K��y���<��)��}���p�q!������q���}C�p&_A��}���\���G@���ni����x^�A�vk����i��I������\��+f���m.���_���
}��6�g��my�ip����������w�|����G�	hc��|;C�I&"����	 �JdA����UJD��L��jZ�����'��� m`�J����W����H@J����R�2�9��/{(������5�F+0Z��V�F+���E�2-�+�^�{��sJ�4����h����={7������K��	�����#��4�gEOy:q&�/f�nF���'��Psf�*����4/��'\6�#y7#���w�>R���`���d���He�o����2����&�Uw�<��3�����gr%r"nC��|�" ��5�4�R$�����$�f�^"F��^o����d�o�*���"U��)b����^9�g�����xPw�Y�^EYF/�i)��H������:���)�7#��#g���Rob
����;�����+vlx)�
D���J�u�)�G�H��h�?6rxoB[�O$�&��-��:��n����[i�����V���[i��X����0v�rA����&�Y�{Alz�e���+��`J�1/���9�D��,5y���X�D�#��M�u�-�sF>�[ �.'��gx�l��st��F�V���B�������'�$�C��A�EG�/$��i�Obt0g"?�L�[����������v#�qoeA^���od�/��q�����\��f����	���Z����	�v���v�	��u:��+M��_xpv0g���C����l
�r�;%*Om!V��6���T"c��Y���{J#@f�(e����ZIH���}d�$�=��5��I{^�C����e� [�|���'v�LR�6�ME�,���
���%��U���c���	�P���f�<�-$"�}�
jOw���hn�0�0bF{
���*�2��<��X|&"7&�������g�������BL�����E:[��,	� �5�H���.�`��q�{"K�b�^�Q�����l���X�rG�4��������FG��`ct���W)��9ddsg�(y/���T"r��x<j=cX�_�	�
����e?taV���uG������%g*\u�d�g�O.a�pyvz�=g������v�u[��v����c����1��X���/5!���p�"��'��tc��?e���u#�����,E7���E����<���LkER���F�e��oY}� *,	�|���f�����i8�8��n
P~�k7�������^�������%@y�J����������>���h&��S�H�8{����|Dx�Bm����_��&��C�%pkz@�O}�(����kC�u�jF"�RI[���;�LD�H._����u������lO�!T�[&�P��0�>3�X���0�MI�U����^��
@��>��p�
�@�;iZL+�����DP:,�;h��\w�z����
E�,��o"'I�5�Zd�pi"[�ek*���F�jK����ER��c,_t���WN��A
�Z���&c�+��*�2Z��aJ��/�i1�2D1�"^>��v����H���f�_��	�zj�2����L�<���W6J�I�6�tZ�c��Z&V��Fr�iFNw!����R>m��n�D�9�*0�(�%�f�!��7E�[��f�o�X��/���Z��f���6�[H��'�1��\��9xS���K���M@������{��	�
���P��������
���/4d(��[���B.�/��/�$��k�mhA	`H@3�T�������~���b��JD�oqXj�@3y���8�b���MHe���	
0�s@3y�WL��?WL�,(t*L����P��([�(����Hj���D������ly���v6������_��	~e�a���6�1��:bK�;������5 ���{
zO���mS��:�l��!��K��J�^�K!,�Ubs@zm�_L��y��w<�F��%:�GR�O�� Z2.������5�8!����T4�?��&��U���N^�6���p�z|���Lt���:G��Vp���V������64�-i��M�3:)��}��U;5���)���!2���5My�	#�'����}Nj��������5r*�,ex��=Do����/v��}n��HZ�����������>mS����b{���a�oI��A�@~��9-�z��
�eB�r:ks���Mk�	VtA��%Y�!lInm�c4�6���qI������`dl#������A�����(#dNu-]�e�	�?��*���4���*A�hA@��g�{��LH���� ��	|V��X��0�3Q���E��_�H��~R�S���]�Q=~]��{�]7_[����JL�.��Y��i'�y��������������S%�e���v�=�Q�P-!j^�|]�e%!��Z��w"6C��DC[�H���7]1���R����e��Y��
0k�d���q���jbq{�V�J7!��y&p�S�e����q���H*�m&��C7�DP�������S]�c�x�����������2��		�� >�'������=��9r��m�^K������E~aV
Q��[��<�M*q�G��*��?�jH�yy0��I�����������Y�����K����^2�,T���,J������l.#,{}����^��r�����X���&��6"<G�3����E�������,f$���������ZbJfF�c^1��{�i������%��)��^]����k�C�P������-az��=t`�wf
�$'�a�}t�"B}u���;��g�$\�T�!��m�'�1)U��G?�f��F+��>��N*��[���C�?�{f���"n ��AD�k0�����C.�<���!��h�8�x� 2��m����>��A��G�����b�z>�|a�*�H���# #]Dx�����v��T�u�Hr�`���,�����Qb�`��]�`;.���Bid�A�.�="h09
��M���S-B������B�^�C�	.{A�u��<n��;�/|Vq�����q��B<tH�EQ=����<v���gV�����D���@AW��%v0�A��v�GVR~*���W���<��;���r�."T�'234��\T�b#z)z0��4��$���gO���=��`eMf���v� ���-��{.(��M�q<���f�c5�l<7�V�	!vp��f?s=%v0U} h�-�#�h/D,���>"��
@=4K��v��:�
��u�P�?��	^�z\���<��^[���z��U	���xz��dN�ZN:��Ydk�		`�*�S���I�����]�q����yn�LbqW��h�u�E�Q����g��ym;��_�~f���1�����3'G��'l����m�5��6����,#�a`Qq������H����m�K��De��8��	$'���3*�vr+A���3�#H������_�?��,e���/�66������gE�Q
���+U�Z��`�f�!0fHO��2A�x�|��1��QKN(T�^1���)��,�3��=�����M���zi&Z�'��_,&K��(��'�,��.��;]�jp�C�(h3��Cv![������3#�.H2'�Ut!���
 ��\rSAM~�"A�~��%F�4����u�	&�#�SeZ����������y�����9��0�����u�+���y�A�����e�>�E�T*������4�������7@pdn��"b����V�^�Z#n
�T���*�w���V����
�E�&��g!��z�#�S7z�`�4v�����FO��]������:�;+�!��6�����6�~�/z<�R_�z|��h tuQK��l,$��#�@c�����T������W�n���B�+�/�YG$��g���$N{t��5g'!�w-��S������2C�. 3:�����p�m���um����s����m~)j�� �������p���)�]�k �q���
�sBN
�9%6��M,�@�����e�#�|��C��6ZdL;��-���NFZ%��V��:I'SM�EH�%;q
.!��j����F@{
[�;#����=�y���Q���\|'��V��wj&8R�b��4MHk�}��Y	>+�tpsV0����Z���������s��C5)��'�o�|���4�����!�xl�gaY_�u����j.�tX�{:�hOwG��tf�9ms[nN'"��&s��lK���o3�����d���M�A~E�hV��NDd�K�w`��-�Q0���k���,����o��-��V�		�S��1�%��m{�!fZ������fL'��-��Fm3
���������H���%m��9Y��z�l���Wib
��m�u.�����%m6O�tFpp�������>}�-i�����.hC	�lI��jIg�5a�mw=L�5W_�3 	\{2�C[0U_��Z\���o%����7�K�=8��	�f�������M���!umm�i�2�]t>EPw�G�)��;����,�29"(!���e�T�������@�X�#�-G29-�2.�
Y�V���0	h-�P$B�����PF"�2�����C%B�]�{�D�3����3��m��&%����<|"��Ik�������.G�}�G!v� ��'C?��-�W��P�?���XB:N��XI���xy��z�X)ir%=%Y�s��~����'�O�Q�' ��Pq0I�c�B&�6���B(�����2AFK���W�h�-�@��;5�A�]�~�>�d��� �!V�n��HV��n��)|$��?��8�c�$�_����M�����<�_g��S��T_��+��)�\�U	C'�
�i�h��:�x$�����YX��4��>�S�	m9���)r��9�z�@pz�mAr���p��FIy<i����EN*�q;�g!������]��M���7	��,B3�u_��M�����:
���
��U��rz���2��(��&���B������e��iS�3R'���9������
�C��re���S��g��_�5��=E����Y��|G��2���}�����������A�1?5#�E#��U���g��8D�5���2��eL�'���y$��:�TZL4o�ch�y
�kr�n%�w`�y� �:�H��	�|(6Z����]���Z�]�[=i%[�|���u��YH������������O����m����(.9�X�u��P|V8#$+�lP����	�8�_����a��~��/a���pR|F(���NZt
Cmwd�M��6���p@[0h�y��G�j��
�D��1w�B����
xK&�G����������9��F��=v���&I�q����@��=r�H��:�����i�Z@���6n��&�6C����<'����D�����H���c7Zw��<�.(
��N����H���#M������M��m�)�����2ai(��t��}���7��2Z������i���Wk�{&[�U*�~mn�����S�r������6+I!��2��������D��Bl<����4c�E�
����M�e����u�.��g��7u9�&�����hb��]=��m�t6!��	�����+/���R��x`���#�m��\��:�&��K��/O(���>�I��o���v:�I+2�������1��61)n%58x�����X-O���3��'�VI?��V����7�G�����~���)��IilMD��xjsB	`4������{���6��zF>C���T�'��-��K� sB>G�j;�lVH�l3>	p�g���4du�YQX�h3B���������w�/���V�Jb��&���i���g�D��I�&���a1��1Kt�����mA!7���2�m��b�H����3B����O���~�&��SD���M7fSDZ6FmI��$�D|�Hd���+}��Z��ii�
�EFi�H5}�	"�
���N���}��H����'p�vE�D�l�������L�w&>A�3��O:�,���D����Z���6=d$�����8O���}�����{�m�t�<�]�������H%��!����8��*�������b����WQ����>~������Y~��������Q~�;�o����V~�=�og���s���?��8��M���P\�;E�{��?�w��s�R����k������M�|�wG-���h���s�4��������]����������������v3�cH���)���8�����|�?�^��\����q�Q���r�A�������g�w�i�������?~l������?�[S���s_��P���O6��{E��-��D���o�f"26���	�<S
D�1������s~v��:���JP:l0��G���B$�/�l�2�C��-�S��=��]Rx�s�>*n���/����n����$���4�������7e"26w�:�dp1�K����W���R��<
MQ���9�~����(��q���<�����K�g"9�G��[7�O�N������G�yrfbf����� ��J����c���dWs��l��%rX��OJZ�=$gz�'
�������W"�n�"�����<Y���I�
p�a#��U�g�e`�c&%�1!������M��qz7����AT3n�A'���)�/2k0YM=3e5���a?�j��}�����PWo�Q��l�{p?!�����j�6���o�_@�H��\?~D�����O}0#������<�q_�/j{�5�,]t�'-�������y���N�yxlV�m�f��~�l�l�Bj��`��}m�J��n�3)�f��4��f����>�Z����\���hU�S�g2IUpb	u!�4T��B�Q��v������E��$/�_�/H����q������������.�`r��~�y�l+SpO���M+z����V1�R�S���E��~�-	%�f���nK�K������3��p����f��V�b�o�Q>%��e���uxF����N�n�[��7��;��&�@����[�����>����j�*��d�M��]������2Q��h=�Z����z�[�;���y����P��������a�3z,�,@���<��c,_��oT����b�F���3p`t���l�Ok�X�)�sf	�����W30�ml�q�dTf����9�iQ�hB*cG���%p�(2�-�s���w7-Zn�v�����`�";6 �� �9=B�c�1���l.��:�������	mJ�Hu�VaF?�X���W��*��]�+��t_$������{hux�	\�����L�>���
]���.-�/���2����\tM7���LD*�Q������>��Ij������]:����#��c�	)��6�@<B���#�\.[��@�B����q
I���l�����L�Q�������|
�����9�����W�$9�p\s�$"e{�)�����"hJ�1�D=
�#$���?-�������@m,�����c`��]�"0���"9-0+�s�DQ���� ���0�F���������U����=����m ���Oqk���	�vy�AX.��[�`(����]Q�$����;1�M��K�uX���	xhKq�������i���3~	�����1�c���\sI���#�Q��hs�K��Xc{����$Y�����sBd��.k�t/�D����9.t�!��OJ�d�6�]\��dm1�36<����anx��)G����g�L�ir=�:���f��'$GHtZ��%������GPs�b����eY�I����4���
N�i�B?���"�����=�U����M�c������=Wp���>:����^�����e>���Ky/M�F���Xz�m����g�����i[$w���#�F�,�U��6!)������f�5#4�S�xI��1V/z�$w;�)f�6gB��<�z�k��A*Z*	o�<dsQ��N��}.w�1��� "�~(�����(��z����gv1�=�.P�(��c�tw�h��Y��O������XozT�������+����k|*aF�\�k8b�`��NL�ey4�x=S`s	Q������VI.j��!����	[f�O$�VE�;��;�w���rK|o	����� ��JP��L1���T����n@����*5nX�tiBbz����a�����k7JU���d��!U�3*�jR�"�4+5#
[e�Z�(�I����-�C�l�U�H�y�#C���T ���s�T�{��~����		8�P�6RK}*2]���x���g)L�&$���]��]��3��a��s�����a�"�1����&"�U�XS�����W��s�_�3����@[�/�NG�"^���L�_�+9.�_�El����>f���|�iN��f��=!��L��~�A��"lcv�c�~�6r�~�~��m�����D?���")����z�g�9`'d�uEx� 7~��6`O��M���w����C��Jl��F���2�+��xo��Wu'��� f�������Y�df��t������E����k��6z��p;��,H��q�U�6t���V�X�0:ia�#�)S%bz����-�I��d�%�\LVS����}M��G�L��oa�RdMMw����i��Q��e_�vn�W7�M�ak2t~Q�M�qrF<����6������Z��
�i�JP:Z�i�>���J��k>�w�9<����.�V��*d3$����3fX*	�2��I;r}AX�����.�	�R��b���1vYsf�����x���=U����i��`�P�������gERg6[�e=%ai�*�g�4��G��c���I�[b?��+���AdLe>��
d���pZh���;_f�w�p���sTa����`]��=����3Q�N���9Jp��LT�-d�3��}��\(vE�<�h5�������,��O2g"�M��Z����d�/WSeKzX/J@;�����u�W����������[*�G��3jt�K����t�&Y�cu:?���v*��4]���rh���F���7w�XP�`6M�s����r0f"�:���2hM����{��V��e�4�`�!��Xn�1��������{�����z��F�J �������
�a|LU�!�!�Y��;�'��J���q���YZ��gi�d���?��D��u��`P7J��	�����3����*�|;������&3�C��<L�!����g����\l� ��D{_��J�
�f��r�R�*����?IbC-��q$��(�K��^�����Q��z%l�:��������3����j���_�50���J��g<�W�	�����"�4��j������,�D�7�n���g�C.hk��wp����80{���f�����F>��Cm��EX�&�'41I� �}L �_���A@�'��%%� ����a�/�"?��;��I#��Xv�\$F�%WL,�n����f,�0�g�?����&0�����^��~�oW"�y��-�����MK����3�Gq����n?m��Wu�I�-L<�����nW��'��@U����		hy�N�cHx��W�"�K/�#����Bc&"��������J���C�O���-!�����RE�5��-H��� ���o�DZ���n�;W��T��eE�Q	��������M$�����zpPg"r��D$�!/��r`M����d�6M,|��_��H\
j`F�������x���	,H�a�e�4y����KXw.�%���}A��X8�0]m6�J8U4��z0s��jj�k/]�-�d�l��m�#�6/i�k=�Y?��Ja;L���l��'�J�F�5NT-����?��BYu��I��X�]L�Gm;?�ng�9C�3�>����t
x��8�/#`�i\���~���5'4�;#y��sr��|��XT�3
���C�SbIf���O����)�@�K�P����K-���o�l����'�%�AC�}�FTgQ��	p]�����J�Oj"ot6��*��t����G��;�H{�X#�c��o���[i}g�u+K�l��l����E�`$�#���j�g���R�����-�j�1!�}�G��(�5@ }���+Q�#�
�{�b������?�z��b�"Z��H�1�����%-��&�����:�S��)��M�#n���W������F|�EN���
�~�/�:�3#�O�����_��c^��,���d�hv#����u-��J�8e���{!YF7�m [=dn��q��,������
-��C�c6���Q6h%j�T��$�����l"RZ_�co���a���q��-��:A��x�3��'������������zy�����ew"�L�$�;���ZJI�����M�PE���d�/����5,I�"���e���^7�}FtRErh|Le����l����v<O����ZP;������l%��u%If9O���A�ga(�Y�9����E�����+k�w��2����hu# Bf+$�a3+Z;�H���]�{�����X
��� ��E���m Gz�'	m,H
��N��������Y�6�Dd���������D6z������.�ep�N��+�Cc���)u�3�9#'��m!��{j"[��OE��wE_�������"w�:�����HAq�K��}4}j��'"�l�~�Ao����*�����'}�mIW�_B
�����y!���	 �����:��)�^H������t���(k{�{��7~a(��������ic�U�Y5�q��]c��I� �7��[�>���I��,S5k��j'�����E��*�sl�����**k�c�i&lvF	�R���QuJ��B�n��+@{�L�,Y����������}���Rmbj'TT�����?_��D��P��
n��T���-X�����!~feUy�������������A�{!I����;�=!
����|�Rk#��,�:D1�$�����D���D���b1N;��><���>���(����]����� .1�9�?%j�<�jY�9
-�2�����`��,V3��}�G���p$Vv�;��Lb �M�����aB4��zHm�
�Rt�Ay(&��H��Ej������D��*��
N�M{�vw�4�
'�
3��CM������t�������zB��p�d��������5��2G�D�g����2�)�������3J�����y�����{���?"�|���a�{}VT�<�
6��Y>�4���S����!7��ll�eX���Cl�S���$�$�e�&�Z|���KC���e��/���eB��t\���%�Y����e*n�;����`��������=�M�L���I����o���q�E�+�muscm��hj����CN��v��T��\�4#�D4����$[3,(9YD�
Bc�s)�����p<��{o�uO������"���G��j�w{�N�n�!��t [��2P�a5�7�a�=�%p�N�����E��Xo������I�v�C'u�����qQ=����(�����e�Z�G���F@��e��S��x��p�g\&���w����\�:��pQ
�,Y�p�p���0+2�x��C�2���\7V����f�["���J+��Y���uQ���w*��u�{��'��D��o��'��Z�8���I��V��.����V����@"����� -���c�+�K��;�|F����li4�6���T�Q\�uL]�r�'8����gT9�s">�&�������M(�CP�Pw�����l�t��*\tX/<�z&En;�� �.eq�|-�� ������?�i������JRi��M���<�.��Y���T�#�$�������.���M!���?62���lL��U�t��5@�;��N���z��8�>t��?��;x��LD�p�|z��t�e2|�f?�v�M2����U�S��WA��K,�n�Q
y�(�&�x����N"LO��k�EyYM��+�$%��r(o_~���^c~9���5R�_�P���l�6���)���?��P��u������1��{����vm�������Z<h
�����Uu�$�	\����"��E\ 
���\P����_��M L�5,5��e���`�g�yu�i�T�.���d��b���i��Ndl>l��{!���Q�u���l�%����O�~d������%`�aR�75�
4\�a���1���TbBx��=�d"�����y���fu/�K2��8n!��G>_�R{����;���SIf�v��3<��Xr3��-��;Sz����J�|g�z�7xjrn�k�t2�L�P-����2�����<�g�sT�������Om.�A�_\5�p.��%g"[�dk�t��vkN��JDe������4�������d����<�c���G#��.c����y�l��G��+(U�!�^dLl�������|���,N���&OI�'���\�L����DB����u�d��
�	�
De_�n�sO?Y������f^w{��������
���`���r,[c���7e�r3�E{�H��H D��Yn�T�h$�#i�����h��>+�I'x=(���L/3���W�R��#�P��?����>,������'��TK[�R���x��>��W�l�rW�Ym���rK�������o������c}�(����
�V�����P���k.��8����m"���0w����{Ay:����i�/(�
~�q�����a�/z�������Ml
�#l����^2	���/��q����DSp+J��x?������T�����m�
K;i��:��;�c�D���z�Hc�:W4-He��.��(��������>�s$p���	l ����[�3!Ul�u������?�7�a�9�����Ky�\�� �4�a�5���;�#�'<�������!��z	X�-�@v�;r>��S�&�5[xb
{���_kMH��}B	5��0�84{��(|K�C�n�� 
���W�";97;�d%��,L����Y�
�5K�l���	�	P���V1��> U��S>xfVI���V�{��]U�;z�t��V�V���v��u{�Q�!h�Xs3��]9�-��X���m&��������J*������9R�^x�J���-���y������K?+�ZZ��\����}�u�ip�����UGS��:�JS�},wv{�y��G��f^t<�>:F'���$�f~�����������~v���G�t��op|�ZFa�#&��i�m��5��������_�G ��V��u�����i����(�b8:LM�����6z�F���5Q�
�[�|q��qV�HT�b�k�[H��--�_h?����]q�����Fpo����L;�k��"4��'�&�=KG�c�����d�
J5������X��-���z��Z-���+��5D[�rf��{�J�(��L�
F��}0����}p�D�����o����������#�ifZw�W���%��	I������#Y���>+
��sc�B�X\�Q��=��8����U��*���e�;��m�^����,^���3���e�������	-8���dq����P�H*���Nc���k��yM2b�mAE>K��r��Y6�q�0�������L��E�<��!~DkL����g�{��+	�>�������d��\�F���-_�����c�)�*[2J������ -��b�������U��������O����������D���<������\V����9����!�����J4/_{�~��UeK�3����w��2)�)kR^_*^T�o=��U�S�=Iy>�.��#�$?Y/YND�������j'"_����������������(����c��_�����9�#D=N���1��z������G�;��w�_�]E����l+�N�p�YQH��J�Kd[���H���|�4U.z6�Y�.�����g�d����9t�U��EH� @�W�������/Yg'���zn����`���xoC5�~^\����YQX2�kw���+l>3Ba��m2N+J.0�YN}�_��Rsz�3[{r�R���.��������$x�:S����l ��tI�c�_����d&��e?Q�w�h�
s�vSAR���>k+��i�ma�4am��gE��m8�u��������t��7uT�}(6�,c?�G����o&���u|�g�s���f$U�����qD�lY��Ew��:�05� �}j�4��v�'I�6����������9��Q�q:>��j�s�+������I�q`���r^��	�dJg�M����nK������jvQw�I���"�)�����
���3�n������CZ����������|ud;��.��PfG������P��������?(�2�`��NDd� �(?O(�tbY`OgM���OR�m"!��>\�����j�ST6��3�o��b)S���jf
��<����V�}���#�T-��NH�w�����i�5�=�iS�3D1��t�����a7[�	�W[a QU[�T}�"6]��Ofh�
l�46����U�a��l�+��<GX���T��!jY�������Y(,kUg��;���U����j%!�M�����l��v�f �
}������87��c��NH��y�Um�5���M�vSZ�v �������~4�
�
�DB�M�G>��~�laS��x3�#��e�:!=:�r������D���I}����U��lRM
hQ���W�s$����������lR+�����vS����i��.�4�:;�����Hk�A������H�+�)���	s{:#�hO4;�oBI�=m;}�8�����[��5����Hk�G��a�X��Sp^��c�N�����s��f�5-@���fL����bK-26S�S�yG2���dJ]QiK�n����.G�b����NZ�P8������q�N�&��\�q�����(k�2��0��oOD��e��Q��g3VT���Od�Q.�������i%��N��REx�Q������v�Q��Suw��O�|V$@���_�y����3�-������tBL�� ��B��
��B�����zv����3����
*@R����InS�^	��� �9'`��m�����=*�b��4���-��
]�[���l������2���/&����[��G�������'=h�����3�	���]?�=��5#�������q�r��������hS�q�p����������;Q���j���n�xc��A����h�L���l�q��a3�r����XJ�j�Q�t�LT=v�M5<#�2��N`��,�f[V� R���HX��A���f����>�����X�r�������7�{���I�����3_�(
�����,Nt^c9��'���iq����-����]:��W����r~�yZ3�����#mH��z"�]v<j&<��rsgR#z����[�����
����T/N�
w!�v�m����"yz��`7�8���.~&����)o���q��V�3J�,��,��khT3���)���\��`���w�!3���Um����cv��fT�����L���#NY�mN�M>���0+�R}�	��;%[A�>+)�����
����{
����|"|��9�P��kA�(���R����%��B�T�yM��������W&�.F�=={w�����v��G��.HO*�55��Y&��
����}�;�I'��������V[8��2O����xD�71��	@��2'�����q��tM��������'�V���_<�N��4A�S������l�5;s�=����3�������	����=��?�����Yff�����Vi��������Xh�����9�5����5�h���:l:k�dc��=)D��<+=�.�v���X���������n	�����kl�,d�������}>��im���&�����^nbz�8�|Y�������p�_|��+�g�n�U*r�
�E0����e7�v����P!'^V�C���JP�v�q����4N,H@�>��IE�#�z�0-D����D6:KeT�l�:��!��mo��{��l;!=8����dOu��b��/y�w�"���}��P��o$z�����oXG���������
� ^iBP-<�Y�1���hl%;k��6�r�D�ri�[k.l"��H��<8������O��L�YE���7$/��q1��9MHdO�Y-yr����O�R�`��#D��[�hL����6&Y�U�3�/[�����?�s���B�Ob��t��j�aN��j?b��,h�������q�bi~��t����'��{Eb9���o}F��	�a��`�|���G����]}���#<s�*�i�6���cV�p��������|==�4�A����]�	�������u�o�����>����g����@P�qE=�!�8>~��IQ�B6=��]O�s�
�f���HNDLFGM�46�o"r�r���4�3��g�M����r93zt>����4�$i���<e��Ug�(�Y�pR}�$T����Ea-;2}z��B�<m&}1���^�5�lS�n�������f��;2��+V�q�QE��"'o�a�H@{��+���3��k���m�Rd]g�]��L��	�,����!{�8��4!5	T1NL�2m+9G�X|�>m+��	���{%"�t���#VDQ���NM��Zu�lA���<o��#&�L�
RC�&��AjU��B}g�RP����TY�Fu_������i��P�d������>U����%��r�~�D?_pgK5�	�&�A���~�n�����'���	8my�^�N�m+K�U���a������X ��� �C�f$`���pC�_�}f����^Z����	e���=�u/��	��0��(������T>'���~$�~�eMb[-.�����������@�<7p��iu����4s�q0�����O����Rr����x��F�Uv������r���S_�-������\����5����\>��j{m�r��-H@O����M�;uB*�]��O+�9Z\��
��L����;MH�������m��\B���+myx�m���o��l��9��:������Y"sA���>#�L?�J��_�UX�
���}p��}�a�c,_���L��.��o=���&)
�9�!����8�M�O���|�>��zF���������S�x�h��L��[����`S�������t��8�
ds����h�a�3����LD���NO����ba�������b{��fF"�/����c�'BU�g�i���7#y�{9[��s'So� 3\��:d���p&Y�d���Xo��7�u���{
-L[�N������	���Ab5������$�8U�e>.��,���W�+[E������*k��,2�[�r~����1��Y���6?E�����N@��~E�n������g����*G�BKX�H+#)����Y�������3<|E8������*����-_|���J��Vc�}����#�D�-=��Cf���ga
<?/�������9�Mjr7u�Q��{���3���y��{
_>R�y����kL����`�"�O�
~]���f�ESZ��_��}v[���9�T�X��L�
j���Y�2]0��~@M���Q��l�6������@����*nB�G���
��=�EU����W���~�������~@�I$b���q�W2�����������!����M�|��9�UJ�)iYG;v8�V�'w�D���H�x���3������^d���"����T��d49�_F����V�6���P�����{��;	����\ZY��~k�
�	�^C�d�@�l���\��DKa����u%��v^��x�M[#-
�!����?�+�s�qp���_m�r�>�e+�����LT��C����;���,���� =��[��[vO�_�?�H�_���1�-R-L�l���,l�
��O7����u�n���.a����/u}���,��xC������\�t�9]p�H%�TN<� ��tA�/�c��*����}��9��1]p�����.��z����s���/�kMBN���$�|A�.���[/x�����$�|�=]p/��SU�W�j�z��f����Q�1��-=�b�;��w����CL`��b��u��CL�[�;���Z�1�����|��_����[�8����&�+���|�|�{�+ �+�����8�w9�w�q����n�G�_O�T������C���M=��=��&rV�V��|�YmG����z���T4�����c��c�*irn�Ic�2��S����C.�A�W��QG�t��\����a��qE�u�HW��
9x��u��W��>v�
;�`��������W��Q��t��\��:���qE u�HW��
Bx�!u�HW<s�� �+���}�b��Fx�5�[S�~MZ:y6��?96��?�5��?�5����������|��\���<����������������������O����O����O����O����~��}vc���x����nL�=[�pc��y,
7��^��pc��y�7&����pc����c.���s������t���+�w���������$7&]������+���W������}�d&���_�L��)���_��xqF�����,�YVd�i���:��go�<x,�v��^�V�L���T���J�O �O�h���HgNI�3i<�qA� ��(y��N�4����4��E��5>r�[�yYp�����d����j����ZN��.�,%�F
��l�e@���E%���~��w��tv�Ai'TnG*�������Z����I��{(�k��.;��v6&��k��&����$�3mPY��N@5����RM3Q���%GO"'/����&$@����Z����`��	��1/��>\�l���N�k��hRM�P��Z��+�,?u�Yd,�'����
����<]�,D�=�`�������]T�.>���`I��p.�
SI�o�[M����dA0��n��W���*�<
#�>-O��t1��~#��Ht�	�n�����bU$2��4�+�A�n��dA]���6�DB4�*�6�J�Z�#^��A�C�g�mw�r�����I�S������L�y_+��~�����[�l�t�������jyX�^�@���M�����o�\�i���;�,KopS-�3
;�8�~2 �%:|V�]�t�B�h�5oj%o���2�C��K�B��^���A������L5���{2�{d'�v�������$�����T~5n��Y��vSW���o����~�t?�[#|����1�vZ��4���m��k[���Xi@�+�����������xg�v��C�^6�P��N�pzy3Rk���G�]��Zv^��0F�N�({�"qt����A�������-���g� &�$�e�����<�y����"�k����2�-� ��i�yW{i��������L�&*)�\�������������Dd�8����2	;�2�C�3u��7�������7�4pdY�������.���~��;��"#5mdp���K���P-X�;�H\P���:\+9�;;�N�����K���`���������nF>����`\��N�(����m���>�����7����<@���"�T�VN�����5�<��:���n��������8,�3r�������x<��A�'z}�*(�<����I�,�O��(���n���x��r�L�n��(_���Y��t��:�����w$G@��C5.����������V&��H������[�(�b��a�$��;�7I'	�u4���;A$O��f���G3������2�R��w�v_�}����{)�ARd�Q���>\c�������2?���J��H��}lL)�D-���.��VV���u':��/)���o��|�V_Ns�2�c���ww��y���gA�x�&��{�gE�E��xM�q7jc��~���� ����V���Pm����kI��w��3;����|�����x������f0���<��I|V��,���PbnY&��;�QA�C}t��v��t���\��<.}��������P��:�Hc�r�i;6�Y�G���*�|�S�v'?(#����LsbU�?�<����E������%,�>_�W`�o����Gvw{��M(�a6�b�[H�"M!b�)���w����"tr�]�p��p���"�������*}y�� U�SS����c^��!.{��Y72
GF���t_��j���<���b�f�2A�k5���w�>+���!��w�e3�1����� ~k�#�u�JEj�H��V���������|�a�6����g!�Pf/�">��]��s\�J�+�cn�Ps�1�P�c���{'�c��d�����#2��VDKcVr�$#'+V"�Hk-bfF�D6����[�ybdn�	i,�Bv����_��L��w>��Xu�Z��)�m�B[}q�Du�g
�`4|^�����D�}�W���~p��Nx[l^�L�0rs��|��t")��6.���vA	\>��L���z�� �9�������Z�U1���tjA�{y�)#m�2�b�:��N��
����/��>NA����Av�d������K����l �S�;�(V�L��&-�!nN�0�wA���T��gt���N�m�����+6h�������q����n�9(�
?��{N~I����z���0%��$�������n?��^�z�s�rM��$�Gw�pV����kM�k�E�Y�l�@U���XlIk/�f*"��^6g�l��mJ�����z���n����d3)����ID�jY�H��tck<&d"�L%6l/kY�����_�J^�A�������>��7�_7V5��S���,/v<G%>+����$��M�n.	�@���74�u�dM��4���������������$�#��$SOD
�����}P���J�-���8����beT"2^�������D�c"�N;�S��%@�����	�I��3��e�H��	x(�p?�g�h�^*�V�������i����(�gER�l��S�Od����q��(hh-�Q���6#�1��0:]��*;�gA�JX4���U��q�����)	�3�Yt=}����/������%����_����%�G�6u�>�h���G��������c����
�� �d�#[��{A�i��Q��MHe���i{R��mB��.�q���0���s�	��HKU�3*����jO���
#6��=�t�X���~�5f}V���}[P���|��9��O�c/�-��1|$�i����������S��T�������/H��zl�]�L�m����G��$���P���6}f���r�I�J�qI��I
��E��n��=1t����hC]#wl>�|�
:w?v��{(l��83��M'���	��O��+����j�g5���c����=���[����]4�*��nm&{n<+eAk��h\&�
|V$��8@<��xSB*��	����m��'�p%���~(-����>;��>q	��<5�4�/
'��h>`��1+)�X+�LKm��\��j/�
J����`�n�fHB��EjvAc�	��{�d�����>��[��Q�$M�`��@�-�f�ym3�c.�%�����3�k^6�;�"l��
���q�i���#~7aGrGcO#�����
;���`PG�����N@D]�������!�-E%8��;���K��Pp$�Y��vz�k�yy�������Q�d�Of8�o!En�6-D�h��,��Xv���I%��7:*����Y�	�����-�7��:�{����#[x���o
X����	�y`�q��{��an��|�����	%���,I;��%�e������]//@�m��7����X�N�Y��G�����V"�*hA��q�G�_ts����L��=�^�<p��0��e�b��d�	dsN4��Ro<~o��G�/�6>����eb:�,7f���8��\'�c,��y$N���7D����
����������
�D����*�X��d�+?U����36���H��E�l�����f����@���
m��E
���1��`&���u}���/E�my*���
N��-@D��^ll-�y�2r����8��!��T�#���1�K�]�'�����G<&��*�q7�W)�v3y�z�]hU����)^���
,^��������?7��	�O�W���IW&"2���eE�R6����h%F+3�
�h����LD�����`���.���R.��-�6��d��e���w�}�e\d�f$r+V��i����;pXY!�/f�nF���'��Psf�*�rHV�����'�f$`��B���G����QL��c=F�"�u���B�(2����&�Uw�$��3�����g��J��(��S+�X5�4�R$�����$�L0�7�{�������<�mS��^W�Jr>E,���"��#g����Ad�f$������g�*�22x�LK�MDJ�o�-�����3��f4^�M1�u�rxS�^U�����	A_-	�����z��@D�n:�X�9<c�T�x�k�z��CoF[�OM���[ZYu,��+�?m����}c�|��s��^��G|�!�28�+�!���z�J��ba�W������W���B�l�+�.e�	��N������UosF���3�����aw$j��%F�2<�����|���W.LKe����6�e�=�\*~�n���<E�5_��.���F�Y�;�(�=��
�Q�Um�����}����L�����X���*�Q�OT\��m�<���m�|<���H�7��qV�~�����9�$^���H����:#�
�~������BR�8x,+���ZS��s��T�$��p��m?+��Q�M���!���
�}"�q�{Az}A?`��"����	T����v�k]}g��H������P#-'�s%�Y(+��������I����|�+���DT����~����g��}dW�C��%�
Q+�?g�������^�3��)hL���>{���S�m�2�� �~1���VOItE�5�����`��BX��n���R���q��B�]��]��R3�yLh�w�7uKUQ?	i���gt��n�FF��H�x(QG�f#�l,%��rN�39QR�����4����VI�Y����yc�PJ_u�68��7���4�����1�A�:��������|���L�*������h~�E�=���Z�\�e��u`����CO�8��EMxu��;��������coH�IH���|	�&�
m��X/S�R���oY0�2DrBR"�'�����	�y��l����Z�i�����p�������m�������{�4��(��<����1i��[<"�h[���5��!8�3r�����<�jza[A��i>�w���W����
O���5��
��_�Ib�l�~4�}V���������6J���$2^+r�����xr��N�j��Y!���2[���Q��YE�z��{���"+Sb^��%���'a�����2M���������������	m�{<:���j-(]�n/����2���X�iz\�e�q����<k�#?�>8��+R`�2D%�:\E�
��������@�^>��)���O�)B.+5�5�����+S�^��;�|Eg�v_F0	�;���G[am�o�`��I�����4aZ����V���!�HHH�	�}��W��f�Oe�o]3��+��v�����'��P��;����ky^M����P/�Qk�l0��+|�o���kS�_�����S���x�Eh��(aLi����L;{��3�bB���v~����j�3p�Y~BB�CmA��<���tD"�b���$���Z����#�S���T}�W�tD!�JH��������Ymz���Y$:r���`���6�l)jo���[���.Z��4����z\� ��s������.����7�]'��	�@G�^�%�V(�c\��B(5�������y��������H�A*NHF�u�����:P�d��%UB��G�[
�8TB���>U�t���O	Dd�
�X�cS,�/�d��_�B�����6�����?�0!�������A����h����'�'YX2�������9����vsV�Zj�b�+�iK��L���n3�|A~�0�&��jKO���d�]�F'��a
�����6��b��po4[������e�k�XFyp������j%ep����[�F��B!�H��3?`PO���+j ��r\H���d�#�����Gi@��L�-��������n�	���\�����.<��2�J~����x�J��S9�;;��3G��G��bN�L�T����>k�eH>�Z�LZe�������=&c��= ���]e�,�Z�l����=��H�r�;m���O-�l�"��MPN�����HE���g����e�����Z<{7�s�XFq���l!�H �7k��S�����EDEv����Ae����9p�_����i#��-�������O��������fO��{��nj
��|�����>����������c�;\�.��6U�����R��U����>!O��M,LGyvW�@D����� 24�#������.]�tLn,�����qqb�!3�#x����0_f�	��"����]F�yJg`�,L�E2�p�����:_��P�F�y
d�z��?0f����"y���_�&U,Cx]�N��CG�Y�p�������q����)�x����
�����w�	���K����|��A�!$�"(�6Z���k��Y�K`�+�{����@Z��x��-[���Pa7} �2t7������t����"����F�$���X��-u:�����%����{�)kQC�v6�^j��/&D���s�n��tMeB�����u1�wV#t&�VC8w����X����=�$����������dy��=�j4�_/2����kZ�5G���epC"���~������i��(s(���+��O��S��/8n����^jme�YT�f�p?-2s�~Ti��� ������n�pGY&������.~���d��g�����"�������g�����-�!	��"�b$�[��m��/+��$��-���#�s�?j�-�Y��!�9����/�yhO���|N�Y��y����t�(���~�:�>�J����e�[���&3��]0�,�����9q������sr@�����i8�On������vZ�U�][�v�er3�����+��|&ks?���y�Vn��?�]��"�-��@B�8�LCE��<�`0������<��Q��f)�l��g��k�!�j)!�7���������
:���|�h���e�7���)�,���I�bZC�4S�CAg�g��-�Ye>��(���v
z��G*���e��U�y����},wz��v��� 9S���:�S��6[������$0�����*#���3��(E<
-�aQ���x�������l��-����ATB�y#��=���S�9���Q�l0g���~�]5�}:��}rKe�����/`�q���7�s�"B��c/��h�,xY�l0��������S~�|bR`4�B�_rn�r���G��{3�������Y���]��[��&"x�co�����P;6y����u�
�1O�9/o�_�����s��1���U��������v���t,������,�_���NjF|
�U@8`���W*L�Gx������D��/Za�3��x��J��
�f*:��
Z��Z�&)\vIS
�a�b@M�������i�5�ZYh��7���������!L>H�1��N�������|�������Qc���]�����	�(�~#hI�6x����!�(d_����������a���a��Q������������a�H�Y��L��7sx1���,I� �P�a�������OO�tG�b��+�a�8H��7#��
��"��>gk���C�28	�,_���p�4AS�.@�48+l&L��&#��F
H]=Q������$�06m����F;���H:�AZ(���C��=������X�O�tY���5�N��F�HN�(�aB���R������W����������"�8'apI�z�4������
O����	��d������%"2R}pC������G�B�!������~���m��k`���1jo��)��u$'?�0O�.]�����$���/SX����8a�rSM~�=�R�FF������J����[&��/,�'?8����C@g��$�A��j�"�=.�H!���nr=�i(L��f�O.���w��[>��������E�����;�7�V}/7^�����9L%��N�j���o��f��l���Q��x�v?����S��]���A���� GV���j�@��������
1%��S�&���Z.�o���H�y>w�n�+�D������y.$Y�������y�#�7�d����/��rR�
��]���]�v�2�4K�2'�@���2	���H�2�ZM�2�2������0�\ zD'<Y7��4�1�]M���uBm��[m�
9���i.(5���#��a>w�L	/3x�O�A��0�%�|vzf_�_|���`�D@C�����K;��>f�r�<x��f�yH�YX6�v�f=�3��P��
�9�9
��2������Xf��xF�"�[��`�2��"�-��Y���g$�����8S�f���A��h�����[���V�,��U~5��9�����fq A�:l3"�#�����lY�d��� ��Zhv��q Q����-���"�@p��!	A�*��hx��P����z9Zl���B<
�����O� 0�H�)��0�[A���S���9������Q��r�%�a�J��5G9
t��Q���g6
�����"���@�/�]}�E�O(���&9��
�y#��hf�B�?��d�C��/��V�����b (u1b �����E�c�b����l�y���f��-@r.c����4G���j�����>&��P�=kN��w�0��/,���C���e�~y(MI��7[�G��������.�`�J�M������������a�� ��L��ZD�������U��i��&�Zc�����?e�Is��)J/��xN���*3�~���a��H�� ����SU�T��;�?"����1�[$}I��`T������7
�~��C��2����UW���@�;z���:y
1����j�6��2xk�6i|�.;�W����'<Z���5���
4}��_����;�p��ju�J���O=ipv�X(��C���_��T�����#��*"[?D�'9�2Ls�C��3C)>�T��Bw8^{��"B��c�0��Q^#�_X��@��y�) ��=(`�Las�{png�����'O���Nq�p&��}is����`~��2@+u@��"���p����L?���<��4�y�F��g�m`��<Y�,�#O����{�)�g�]���V`��E�}y�l�Ca,�yg��a�c�����y�C����`xc�N�i=���md�-��f�j��5N��;�W�������+t�����
��\�86�[=�����	k{n!��T������)8ta"-����'w��:,Y��nY��a`����_z��z�=�"L}qW�Z�k&^={�*�d)�0��X�gRVa��y��ee!��������/���g�*�s�����%`���!~�O������:������IL-}g$�M��+��8[W,���8�
G�o�T�)�J������m�9��h�X�# M#M0�?��@��O��0������P?��k�/�����v`�����������r�P��JN%0F0�z;8|�����o�XT��E7Q�
��;�n>Y�W6�>�"Ef�] wg�0�Q�b����4/��U�3h���gr�J��(xB,�S���1YP����3�w�Y����[[�8-#\Y$]��qDn�����}�l��Cr����}��S�����h��8�x/K���P�wh���9)�
���/�6�&qer�<���H�tj���u[���]���7�:������x��0*���t q�n*Cl������o�	cuc`���o����q���'��)�m�N���1��E�j�:B��
�/_a��G;�G]|31�
G��@�������i��h�a�!k��0��������-���X�a�E#
��#,�y�0��78�m�.�C�o�ht�Tr����{�~�6�U�=�E�-r��tD��-y��];Qo:q?�����X��4H��"���c��O&c'O^���
�����W@NW���
��c������X{�+D���{�r�9��&�;_D��������B�K����]_�����|����~���ih�������r�������|5�A���WS�+j�8s��g.����,e��eU�����*��]��5���I�j�w�q]���/�������c���qZ��������&�E?�<����/K\���YL.�~|��������������������l�Q��m��_�\���B|-7��	-G���&g(hBd��@�������/0x�%�ZT���~����$���zX]&(v����B;��du��/�i�\���";$��~��olt����8@�#b�?rK(�{[������8�&�������"Y26�}����"���m���]%D�����j���Y�?|�������
{yP�$r���J�L:X��O�>]�dq�)��5ps�>o�U��yA�AC���?%����- {����lj�@�)��(^���\�t=���-��������XC9���,Y�?q�zv����5��c��"��|���H^��������,GA���:G:hQ��yP�����f�NQA�t�x�Z;�b5����)������AT�:������o@<�VQ��L��sK0�����j�V��}��8x��$���v�
�@�����>�0L[���Th��Z�K��`U.B����&��9��gY��^��q���-V��������q�����MMVk��-�+I��|�h�/�;,���'�`Z*�/��,c���g"	U�!�D��P�
Y{���[�����.����R��o�D���h7>wT��Yu?�E4uB�|�u���,>|��	E>�p�MLgi���TEl�W�`b�Q���<Pucr���]�_Ih�i�p��Z�]��W��@�"b�Z�\��E&�����
���tb"HE��#��'��;U$@6�zd���o{��m�.�%����&�V����Q�Z��Z����<���Z,�+�B�!9����u��L��|�d��S��hj�{9Y�?���GY�hL�����;����7X�uv���S��ojj�q��\��i2Y���j�u���!4����hQw�S�T$2�x��
�[/RPd����S�-D���%��o9���]����>j��2>�A��j�M�G���D#���BA?������WO�U�W���XI���4��[i�w�3�9�N�@���<�k�����I������������tQ/7m��d�*�q�Y���`p%�k8�<mi��q�<��S1��h�b�U�G=�*Z`�1��s	X�����o��$��x�zB������u�P\R}�OB��h�76�3����*� ��^+%�U��m��n'����)�L�,�e"�������HIF�W�����$�9��-=0�hnBh�(����?�ymn�
����0���f�e86��-<�,9�}�S?'����d�S��a����>���_`j�`�������y���k��(�	�v���&��;�h���t�� S�1���X������������*�5�Z����H�s���X��mH&��I�O	\����Lx s�������t���L�E�`�U��	
5$-`I�5__>�H.@!Q[T��
�Q�	�H1���	O�*`��ND�����fR/�Nyp���S��M�By1�����j��cY���VQ�E�������?�5W�lq�4����L��X�8#b�Y��.�Rt��n��}DE��I���]g��hAh+�-�--�^L�������V��K�������������]2�8�De���~��a���j�����;�.~>���{3��h����R�(��w��h8= j���&��&g:�	@DM%!�ub��t���ok���g7����KF�������Z���/u<�I����C(z����
l�f����I��5ex	���G�,��[Z&�{��x�
%T��K��DZ4���	��G[C�e
t,���ko	P��L��
q0�Zd�d5^��Jo�8T���y�%��_�&'�K��l#
1]�:@�R!K67���%�g}�E|0�-��#�9��O2�`�f�*�U�p:�wEI^�ta��i������T�����T���r���]�]Q� O����J92=�,�LE�������c����3�d�_��u���S�U1�q[�B����h�^n�����3��a���>�0"R#V��Gp`�����e�����3b�uF���:�s�_�?d��i�R]����0�_�+�	�U����������������<�N��C�"�����^���4���Ab�������A��v���6�)��a���D���V��di��8BN������g��oO4k�]��t\��4v���<���,9�8���O��^��]i��F�_�7K@:�K� 3�Iy����H�u��,�}�=��2�y
Q^�������:R;��_�Ut�
��){�U=:��N�X��p����2O���a�-�I�F��s.����mJ�}
��S-
H6��~�$Kj����v�ER=�+]��dng�H�B��]�d���=u<N�����0@c����	xr������t��i��}:�[��g���g3��ZO��E��U
<##�@��gO�������;��cI�����`��f0�uL�����h������a]?g$A��D������sfQ?�����vb�c��4��1��8���:��2L�xB����XV_L����y�O��� �g�E�V��^.���\U �
������w���2����C�?G9++&����Y�t\��t"�/�^���+�T��g)�zT,��,�OM*Dx��������,Y��d.����i��%��Y����Fw[���b��e�dKJ��!���T8��h���N��`�<������=�����J�Q�?��ztz(������+t�����B���05�|�I�����S�)|��Ak���}?=����F����S�&*/$@s;�����?,	E�yb��y�����/U��������
,��+[d0�wZO0�D_��q���Yz�E?��si��F���TH�9���5�p"9I3���;���EL���#@K�3��{96�����"
�����?4��!�O{��������&]A#�����ce|%R-��"���]6��������~>�'
�Z=W����*�?YQ��Z%4}���w����C�����ln������.�����b����zq������L�����/E�Q���e�@�������Fs�����T�J���F��b��I��U$����Q��7���@�Y��s����$�hb���C?�3('k�^yJI �i������Cw���������w�������+-�����E�k�%q���"K�$0�����v����������KT�_�i�R����8���vGs�A���.�X��LLO/�d������O�Q�����F\i���.�DCODD$�n�K�m6��Q�������������1ep>>����OE(*���b�*��,�sW��N�l�/�xS$���8�����c|S���"TB���K^�����kN��G��%?�Ld�<���R���h���L�&�����2����W�Qb���s�W��9z-��`�s����>������.�����AhA,�6��0o��(N�dARja�yGM5'���E���l�v3��~$��K.����h��Y2�r�|	L�����TE�D�h��Q����Q�7se�lFQeq�����m��m��	��c��M���f1��
cw~���WA�v�2\��_������������0��-�vHy1!#�����k
6��X!�f��\�R�&���P�����pO,g��"�k�]� ?[��e��Dv?�H����	1M�]���/ce���0��d�[��"���.]|���H�2Z���eK�u��k�����C��7)M��9��"�H��9�al�g�M@��5�@Z����"���A���]��K���#�{����e2��]�Y���bB�;������<S���9s���Z�z0C� �$^i��Q+;!��I�G��psK���j���D��$�)����L������q�L��U4�����g�&s5_�����/�[b�6=9QH����}+j��Ef�N4"��iefxo�O��}HL���;/9��{���c�9���������r�E�4,]���.�d����r���&8����u��3�;5��X}iA �"�Cc�8�P�������ka�����r��5�u��f��\�/5%5���������o����#3��e���|�d��|����5I��Z!�	9�������x#blz��S>N|J#�N����~�6�}hb��3�_��jb�5�ej���wD�������Bo��Uf�qn�����/S�~���[���������&���B8�����\��{<|i��B���K�|N������(����A���8;�SI g��L��e�n�A���;l�$����'�d$����7��*���
�]��!�)���{�O-�k��\�UP� �9��l>�;�����A��_B��C�:&�#��B�jAW�%������X������"	h��2Y|n�G��;H���$y;������T���{��_\��>��#�no&��2=Z�RI��L#�q�Mr�z���D�2 �f�*��xK@�9�����V���'��K�|�
��5�`�~6���/���f�)!�/tc�n�	�%e���q|�ej�����H�kH�-S[PP�G^R�|������~\�Z��.n=��,]4��i��
��"�0Q�_��u�u�b�#u: �/doN�,��z���n��M�N=�Y{�f,�:v�v;H/�v"��9��B�1Q��iv�������%3r"e�y�r;��8	�(j���Z���<���(����^:�s`\�t]�a5�uE"Q��,�������H�#�&�-�
J�b�*�1�*��_���3cWL�y#Q����o�T�V<�	�t���V�����j�Y�2�P���%�I:���"���PM����4G��v*���p�A��;�]	z�G�OQ/d��f�>�`,NV�u�����kYf��-b�'�3v#�F/�@?�#Q����r���#P�s���$�7?Fe��W5���R����	�'���_/���m��OJ���7s������=	�����I����^(��:v�f@��:&�L�`h[S�1����c?o��}+�T���q�E�)���9���.(�~�}������H��.8*�<8��"�D4������������ \ly&y�8^v�~n��2B��to�=7��r��hv�4>n/&]����K��_'�����= O��X�p0����@L�y1��u�O��-ufh��94B��^��7O
���8"TY���|�������P�/zJ2W@������
1��<��30�	�	�`���C���.h_n��������d�2�����P����rJ*}�.�,x��Db����	w���to5���������U��18r�L�s`p�����=:��&4F��AAR>i��8��=�����3�'�O1KMX�h�}�U������t�)=����=��Q��A+/0!�9�������!�o8FH�gs$U��e`����J�|i��	�US�[c:v�WPW� ��F���%�3	��� �[�e"�E�yd0;�������*eBM]4t1�!���k�LK&���nv<��2�w���
���H�����GC�[r��@���x�Jn9Euf���CT.�*�w�����&�ED�:v� _�p%��a���h����%��I"�������0=����I�f5m��D�`C�tr�����Q���6#u
Ym\"(��M�����"RbS\���qD�����rE��;�Y�����1v
���^��7Z>?t�=���-Ov�Ug1*F��y\0v&��3�B��)jc_�On�e�p�� �:���9K�W�����	_�`N���*!bZ��xN36~������7����B��%����?m����W!�����R�75X4M�a���Q�u�((���{K�A�^j0�X��N��V��_Q�����o0v��/ ��;_�����d���d�z������	>��`'o�}=��'��Ph�{������k��d0��P,�������dLo<<�ri��1*������O�L����S��L�y�2-8��[;�E����9l,*���J^G:�C5�F��F���U��zP�T����^2R��v� 8o�5Y��b#r	�J���2�
��e��s��Ra�W���)�\X����t�Ev�B���O�R^G���]�\Hs�m v���
�t,'��"7Y���Q��;QTrsx�G���wj��E���K@��"�R�E��H(L!�"��AG�T�������u�����}�H����h�G|�B�|�������Vc��Q�\w]�Z��a�%�0�K�6�JK���:��_��89BA��{5�j����������������|��7rp���D��jfn+J@����L�*��~��b�%��
'`�R�����}���u��P���4�p����E��L;�wD���(8������v� ��r}g���/J��B-L��2	u9Y-V�z���N�j ���S�cR;�&����F}�qqF�-GY�XVY���;��7z�q�u�EE
D�������lE����:����?�!{F
A�Ci�nRx1����/$�����k�j���������}\���(R�a�/�UYER������c��M$�_K������u'W�$os�Q+��px�w��=o�oi�KClj;������|Ca���f������j6X��/������|&�&@aX���$T���i%��-U���%�A�;z�$V��Z�CA;�5�\��
'�u�5WX���o�cer��z��s�6:t��)��,9�=��+Y@�_:�!��y�
��[��F-�j�.@���>�u�ip����U�%
�(z�����u���?�����o��A�����;�|�H��C��wkg�I���l���f�����E��[�a��v��i�M��D�P���=�����@�h�6���`K���{i������yw����n=�~���7���I��*��3��t��4G���-���G�L�����?7=@�������3���js��W�4�[/b�Eh����  iY����H�w�����P��M�� ��|tPe��7��^�x2�f:D�Y�Hr?����LZ+�w%-�5y��
��+kc*���1;�x0���"Y��5�H��T3-'���%XV�����[Q�ir$�O������&6}O���Ee�h�G�����bR�����FR���FY���p���������&�s��X�������H!��4�M|�������;6p����:����<[���w�����|�o��ggi����hk�_���J���I�8���!n�53&�Q��2�O�7�W�mZ\Y��)���X.K#A��R��l����|�u�$������Kl?o$��Xl����a@�qVo{3w:7N�{�_��YI�g	m'�8�Z�Q+zP��)8��/�W�����:��A�c/��2��|�M'�p�T�N!���_R�Yd�$���Aym�xR���}?.?�y��S��f��k)���#�y����|m��������������������������������}�?��Xy�7�7=v�q�5�8�������w�����1�t�t�8�"�+���hS����o��. ��>9]���\��}���r����-���>NN��.C�8���$��9SgcO�e�.2����u���	���U/������&N��KY�y�P�B���9�w��wK"�]yl���?�4�c�{8�a�]��)d�|��=�:�*��Y9	���
������'�A��(����-�.���"2�n��U��-Z������;S���)�u���'��q-���|��x��A"[�u�/'�zS$rH�`%�f��	W��T����[��i���RM��+k�����	"������U���,^�����ic��j��=�k]�@?I����%v��|^L����C5��egB�l�t�Kmq�tf�W��V���ZQn���ha�HqZ5��^��h&K���#�x>���&�2�
?���DD��������p����5��zT
����0�M��)�L-pS�����,hvn��sh&K����c���^f5�&��
������B\T�	�:��L��-��z>�ln=��+la���;q&�Iu�uP���/D�k?Z���Y�`@+Z��:M�]�[P�aE�Ca ��V41i�+�	)��V$��%+��"H�/��sY��hJj��w4�<
�4�%_ZX��6M��,Z�G=-���v�nT&2������&M�M-�������`R+
�&u���nQ�ZEs`@��������V4u>s"�M���q�uP�z��v����T5���/����"}��e7��f��^�����l�D���a-�I��h�;���,y�~�88&S�`V]`V���� �`���������r�i-�(����S���"��������������p�0ZV=��m+�@�i�1���4�jDMk�����T�"��	���jx^W���f�-����)��(���-x�Zo��c�l���*Ps&�h����U�3��x����^���~�H����`�Mm-�M-Z���3�U��[���t5���=Y�Y@�
���q���6�?�����������6	/d����I3w���%ym������X2�;���D��JOj��Z� <dg�M4�,����E������+�������������K�(w�����D�Q�D�/y?T��HV�5$+�Y���|���X����:D�?l���*�~��x\��?��`����>,0,j2;�E��P%I����f�.mV�c7\2�����(�
��E�������M�A%�!zp�������9�<�����U�w��^�g;���>E�?��01E���^�����g���&T}��<qR�:�^�(���[�u��t��2��h����6w�?/"�����p��Q?�����J�!lQ��M,���Vy�'S2k���������
���G��*������8cL��?s��*F'��{����l%��&�W�cuX�H�<e6$���+��W7��7����l�2�����_���J�3}('��rpr�u�$~�
w�_r3~����	�Wn��9�L�������/$���IRpilt�9��d��L7t��y�V���kz�"����p�H�k7����K�[�lA��4��TG��`fd+J���1x
Y{3��*�G�g�4'���Z}(���$��E[Y���F`����MD��q���5)!YQ�&I�cf�0��'U�j�[=�����4����D*��X��c1���0W���Y��������&D��x`]�������9��(j���2���+T�W��������N��D��El��2��_o��O��%��e(��u
/�>��A7-qA�n��.������*�O�5Wy��x�:��_z>mA(2�8��_���9N�=Y^��d���'/G2eG��w�<��t|.=?W���������L��z�ZE�^<��l�Y�*Z`��Yf@-��
�K`8o�!/�+�#�Y���n�.�X�H��>����i���k������B)�>p����wD"��#v�����2A��b���m3���=	��#���"�h�G�����s$*{2��y�4t�;
��E�/������p���w1����v�b�!\���c��?���<�%��8Cu�X�����.�=�'ug�����6��.Ou��s����s��_arL�7���Lo"x�����~������=��{����p��M�*@KB�t`y��Z$��T��T$�C��p�������K"�$����������(�#{����f�K�,����(�[�X����d��=���ZO�1s�X"N�.h���F1����-�W������{��'���bO��9l'[?����y�%[Bk�`in�\����f_0�abDM�w���G�����%��c����.���-��npB���V�,yO�Up�@�w�W]�9�����+��%�P#��:XN�������hq�M�9��
�/���*�7['�����_�S���{�������y?���_�_�S��U�S�4����M����n6q2����c�3�3w��B9�r��~I��zt��q	2X�LFj}���k��h�0������>�r
n��oO;�s/d���yb2����g�,/Mh�N���NS���4Kr��V�Ep����<%�?�^]��B��O��Qt/�O;i]��r������= y�o%�P��sk�j��x�J
IAX�';�GA�*Z�q����}k���	\)E!uu��F%K�*@���}�D3}o��*+*�����)jA��"*����M-p�h��� �)�e��"��K`u��]�S��@�R���T���BE�����,���*��l���I�p d��L�S}��(�l�����r����@�������4�3�����������lmrx�3m/]��Xo&'�"s��iv��,3Q�����7��	�Bs^���
�?Iva�4���M�����{=����#��6�i����x�=d��Q3}�9�I����LF�������{-f`<kS��C�u�O��*
���Y�n�,�{x8�����Lb�B�Qwn��7����
������S&<:GgP5t��9O�������!�	��{=Xu��<�,Y
��U�e�R��/�cbg��,�#��t!!����W{}]�}���B�B��B���'��C��.)`pa;�<����F)�$�;�������V�����WY>�X�B�sxx�e25J��fp��Z��M�
�	8�X�O#�8
SEm���)vVN�����C\�~���9�E6d�[����5-Q��~��u���{�4�r/���z�G���H�[���Un��x	_)�8��v��Gg�J7d���p~I!+��Sc:�F�9!��%����|���g�������}������&�yo��!�>�JN��������4%�f����������Pl5����/4a{7��g�tv���4-�f?d�I������w����g>�t���]�����b#Mw��j$O�dr��>gLT�G�T���?�9�	x�r������o�h�^Ht��>��������r�w�[\\�1��l��P������-CY���C����z��;E����g��R���-�6�B�4L3���hw��m�.���Dl��I�DC���)��A�����H7{TbR��h��>���msT�
��cVT��
{0$�+LH�YcW��:��f�����1�����z�H��}j,p����X[+�3xow����$������:�N���"nI�x��e�+�{��6/�
�����h�����n��o��]>��F2�|��0��Cy���X�?�Dd��'�9�w<�E]�c�J02�y��l?�\�\v�je��N�(�~%=F��U+��6;S>�#�_�(������H���I��
'e���,baBl��G9��Q���[�cm#Y=g�$�����<$l��Q�/���,df�$��������]�
�G�:���.(������:��p����|�s�L��G�E/H�rh�8|7�?��"�F�����)DY��y1[wp���������s�!�j[i�c�3�6b�dB��rOk���z;$�G�XCY�[�@��k����Z��.X��y�F���f<�B���J`s8�7����B]b^��F���&=�l���>P=C��u��Y�O���N�y�P'X+K(������]?�=U�83�����Pr�3��=v!
:R"��X������3�+����o��:�����wc���������Dg��B?`��5�:[�
�����	�R����Z~A���'��n����!��`���e"�KY��~�/&�2X�k��{�A��6b���]j��
��l:�)�j�AV�	����Oz�v��q���O������������e!��+��������o���5�W�_2vi�}�
��n��=H��l��j\v�R+��$&��)����$�V�&k/�.�Z�v�]������"����92���a�G�K�h����+u�������l�3�l�i��)_�}��Cc��Y���X)�!-"#D�_��������S[TB
D�Y�58����&"��{4}�]������D:�U��O6����z����m�W+L��H��������Ip�#�����2��S3Y���i@��������pr-�9�
�c�Z�6�Z����5�9i�i��wZ��P�����>��`#��}!��B���I��J�#ep�,tv��������'z�5#��f������>�[m�����!F���B�&.���\��X�
s����[o�	�����p����������d���]��WA}"���H��X�E�-/np�V����I�$}�a����~pZc������y�=��{/3����E��wX�
����q!72�3
d��������s���������A\7��>��}�����Q~����~���y��!�����S~������g���?�~>��������~{�ym�~�G���?��-�D�Y�t��!�����S~^s���"���Tk��#�<��=U*�����J���OT���:��\�������WH�����g��w�X�b�+��w��w,���!��s��Z�#�����1'�w������b�=����?������sK�C��{.����������s���?����@VdK
16�������d� �����~>����%���#�*��{V��j�����Z��V�Jg�D2������ 3�����#�~����_.����_.�����S7[�7c�7k�7s�7{�?��G�}K��?�x��M~2���S7��?S���Ov�������~�����U�F���c��{��E���1��ec����(:���Q4.{��[v.F���[��k��E��g1��e�b-�~�(:���Q4,{��Wv*F���S��[��E��G1�^E��]�;as(��hl���_����=w(����C��G[��������|G-_� ����{�:��\���?y�P����p��~���������Z~���s����f�P����K���D
<����t�����Y���A�������x#'�H�~�
`
)u%��C������|��`�+	0��/�{)��z�����wP����$�\�E>��O (�|I�Z�
����$Y�P��j@�{���m���o�]I[���C�������y����?��H��G��h�8���@3�d��M6����q���;=b(S&����p�D=���/��"�C�N�G��H���(���
����Jm��������QH�������d���dl��uJ����G"����O�;v�p��gajL��J:f��Z���xhqhQ>�l��Z"�EW���W}q�k���w"/��?nJV;����#�>u��!�J\c��"�5k�I��.�����_%��wh����E�Uf3�c�X��V�;�)�J�M��S�\V��$��Z���;�O�����n}���J�a_n�7��"���$����>��Jr���j���'����M�d�a<uln7�/4�0]�!�5�IX���;�k6��l�@s����?�b�U
'����u
"]�y��\���/fUL�-N���KA�:��]��k5��:v�Y�Y�����tl�CQ���_�����e�t&�<2hQ^��O����>�6uM�k��sG�
G rC_�A���KZ����~�0h����i��M�]+.m��bo}E��P�3��&�$���t�]�	l�;O�\�t�8E�dy�UC����x�����ju"<#��Ko8�$��"��S�8)eB+#2���(�|�]� 7n{��ea:�{��2��5�"�p�)��t	��~��RK�z�J�D
r������t��`2w�]����
�����5f5���1@U	�d��^�SA�q���/��` ���"������O�Z� ;i�"P_q��b����W�2�����r�JR-�������E������k�$nI*����_���(��X%��O�N�x��Li�;��
�=V06�E�$Y�vr�N�4�`�*q�V�����i�:����e��P���t�yLQL��v��?���$t���=�=u�����nj�;�c�:l;����A��S�\6�?/b_�eT�6�U*�OX�G��9B�������~�{
���
Z����?���`l��vY#1�D��k�>��r��kXD�Fa7E~��E�L;��D�����P��L��5���7Vk�)]��C[u��U�S;4�
I#��->�_i��%�����x����z�	�(v{e�l�/��)Z��>1"E{,q����~�r�NFy��OD{%)��r��H�����	�DuN#�B=x������J:7W�������(E
K��/����J:�,y2�#N5]�H:�F���&��j�&��e��$�����nj��S�t1w���(��%�x�qT�T���zs�������;ws��Q�D��(k)����y^�Z���|
�!�J
�� CN>Y���(����V��7G<ki�L�n���}j}�8t.y�z G�,����0�����}`��
&C�+I������n���T���nn�<8����������q�:R�"[�H�s����\�U��S����|1�����A��������O�/n�SI�I����0
}���9��<E��+|{�y�H�i����K�*��dH��.ks���h����;��W����%7��A�i�8����&���~�R8�7Z�>pB�ep��K�����b���j����:vwS�Sy����%[p��WK�1:B��*'��(^�G�������\vC�m/mz.B=v�����t�f,Q��������Ae
C��*U&cbW }��'6�1���*Y�
�6������B&�~���=k���~#���s�����N�sE�����|l<i3���/��������DX����v(���
�3�F�N}8vN>�+@\>43xtL��Y>~��g3Q��"��T����`�|��*J�M���r��t���S�|	�B8��dF������|�����\��]s.&u���<�r�$+�yYD���
���I7S�=�E[A�����}h��DZEzX�����W�N6�-4��
��e�����]F&>$��_��q��F.#�4�j�q��"[�������6Fc�4������k��/�ATZKn�/F�:�Ok���^���c\n�����2���5��S"�������F7A��q���;d��`H�F��69��D� +{2hK�(������%c����K��{�b�:��+@\FR��0��z�qO�	s.l��g��y=,��+�l�����(�qu���
�*��az����,������NPX����\���fz���)<�C�;��h�@"�.T^>�1��D\S���O������e�N�q,�����:�+8�"�f�(��N�i�\�C��4��Dc��ci���)�I�luO����bT2�&&co9JJ�<�|dd0-��M
�p`
/��d_�u���r6�Tk%KQ�K}������C�q�N\����������7,e�my��:������-�__���l�}�����P0����!n����������)~�.j�~5�/��7���"/��^'($2��i��=����}���e��R`"L�������")U����d�_��TW�����M�,y��6�'�g3���p��������@������aW�B�<09��z������UE�I�o|E{�j-��0e.�s��B���`���d��j�_H>�t���G�e���L���
�\�V��c`���V
��}���SAa�{R@�G�xE
�O7�;���D�~1�����)1 jtn��=�p^(��X����6���Z���hZ9bf�F*Z�\�% ����% �(�sW�Bk�
�'�]����-@c�������>d�	`���D�%��j��J"���<�1�����K0mT[t� �����5��M��)b!I����C��&����E��E���)���EE`.&@b�,��/����T+s )��f	�U�����UB,uM���W�1�Z����
'W|^���K6.���L����];U������c�����G�'�o�������=�����fwZ0��E�"lp`k��	��(sq` Cz@���B%(������
QXP>��&`��F\���JP��w�(�M	C�	��\�Dv���J�|��\.��>-]�b��i������Z����|P����y�`��>�''_���p�{&��>������D�����a����g^O�>��_��-/d�kht�q��n6������C��QD����/6�~��[{1�{����S�/�?���,�U9�Q�?��$:����9�OqX����I����d��1����l��Np���>��`�����(�����a���]���93�*�=(�%���>V��WO���u�{��]�~�u�{�����E���Z�s�Z.������&�9���&o�-`YO�[��%�O3`��N�#D|����t���P
�IV����';�<�
��
;�G��3"~�,�����������V�*{7'@�����F�$G�[��5gz�����$�,yj���4 ?J�A����UB�<�Lo=�&�V�wnZh�W*Z�i�+h�RY��s-^�h��L���iN,\)d��j��E��v��'�J�V*j�H��{P��"�3�b�S�bo�67�����/��h�K�]��]E0{7;VD��]AK���Y���q�����co�X^����0�&��E:B�.�Y<e�*Df``����i������SX�$�lg��x�������� �I���"�B���#7�I`�-��G>�1���al��r����Q+�2�x�s4@sx,�����������*Z�o*��:#Q��Lbj��7��co^�4�^E��<��G�-��Q����gj
��U2z`or�����HZ���8�#��&��Y����AE�WM�K�8m���2X��)�P
y�rxd�D�x�$�fWhI��Z�O$�����f���w.r���������\~�u��_����B���:d��m�K�0�/���j���~%Qs&$��:�cI�t��w������%���\�������y>�[@�.���3(���
���S�h�0S��7Q*������,y��������/���k�1���`V�����4���?.���/j�O;�&3x+/t`��f����4G������^���D��������)�%3�����z��iNP���������RA	�}]� ��Y�o�{�U��t�9%"�o���/�l}HK%2�$�2vw
��l8Q��/2�����>T�l�-`��&G5^�������(c�;Hs/Y�����N$�\�M��k���
�Y�&����7;8;��,��B!�}�?�����c������2������w*���hK:��mm-�	����(��d��ghy������3n�WC�
���D�Y��Hg/��+M�������.��;LA��2?3,R!�����W���,_h-����6�@��x4M�[}��p���\�
g0	N�.y�|�2��A#R�k�O��)d�W��'��Qm�V�������y1��)���D��{��w3xg*\t:e�+-���f����zO��]��2�O���fk��6�H�0L�Z���WKW���
���(��6)1Q��?e��3�F@�p!NA��I��������V����*��D���j|w��?o$]�f#�
�?��}�������6v������[�����M����6
�����/J?n�32qg%A�����n=�0�,�[���S���������C���p�������M�T4��ke+
�c	T�|��.��n����c�����z^��mR$��3��h��%kO���%c�WgV���Y�y<n�d���X�Lc�A���&��y���&�a�K(�h�c�C���D����M���W,����4A���h���h�M�V���E�Z���	*/��I���LZX��E��p�"T[���6][�;�Q.�[;�}��Y'���H���kY���~2��|���1��kt��G�.Y��1{���QK�6��E!�\��q��z3z�����+�V�����"�����Z�p�j���ySY�T����isz����Uz�LH��y^�T��*P�(k��o���U=�7n��1��z��d?�]g� �{�@|�[����J�����_h�����7�!�Q���3��������z�
�
>"��)(�����9T�OY�����=��]�:09����y���l����P���\���0P{���1�_-�MW�lL!K�4
4��en�����'|�l�=3�l��2��?��r��B:�y�!��?�������T�������>
��������0��S��X:=nv|;Ve����7j��	��F�*��V����)����mK@����2��z���o*��!��Kl�T�'�Z�DB���?�Xl���P�=Z1$��:�8=���%2�GR��#N�d�����>
�&� ���
)k���i/���d���CyB�yl����e��$��D�H��8�:�k�-L�aK�v�?��
����0�E����=���e/�B���{,��q������-"���vm��C7*d��Cq�����c����`���`�-�d �:8Zx i�-�}\�=`E]Gz�}�&��B����aVf��0��������q#��)�����h��������r�K%����&d���g��-H����[�YO`���/����]��_*d��!��e������K0
=�'��?,i���M�[JV�����>s��v�")�8������|��7��O~�]�OK	v��;%������O����R�#nU�R=����{��I��M�3�������.�#���o$�x�6��d�������s�x���%r��Bh��"e��b	Q�2�t`��/��Tk���/C��DE-_���AW�xt���P�����"�m���Pk�d����U�m@�8��������c�}*v1x!�����������i:������
��f�c����i�Xg6 tG�v����������>Nn����>_���q�{��uM�[��m���=2X�����l�'b��`7�l���;v3�������uFZ;�+h4��8^�w��L�
(.�7��n�J�%5g�;���wi{��Y3h.Ol���U�7%�m������h����u���=�\g������`U
\�������_:�p�S]��N�2���_�V��]�������)��.]�H�T�����������:GW��\3���1���N�q����4��$��_c�-��H�qa���.��t$� h�ZH�Gq�7r����h����3,hQ�6<T'�
�PPvf~6aq��
KD�� aY����h����$�7�,p�`��*$8,�����Vh�y�}X#�
4X��+c���4j �:{@F�38��B��=��E�Ii�e���9�(1hPd��b��V~% �h� �"�H,hX�;!hP9
����6�]O�5�,����6(J�FH������A�n?�,HP�y#��_'P����A�n����������`����+k���-*� `�������d���_�����w�@���]��AE�
������"�����G 3DJ\>�������*����AA��E��*3T��5����~�E���������i_}oJ,v#��g�[�Vb�Yk�g��bE^����%b����
�t��9$��a�X����"q>/�b�a�T��;eH�2����L�:_K�ug����(<v��|�S!��NlW������J���w�=�47�.r��n��|%3��]�J& ��~$��?�6�/L�yk7�y�
�;�H��O�����,'�������`nk�h������s��Y��{p�M������u]\��it�p� sI�6����l�-�`&(��zJp�������_?�?x�(e��+^r�o
@����;�sB=3��3�+e�h�&h�������C��HP8��Z�c1����:,�U�^1���)��L�S&�=��R���"O�+D���c��r�+��d�tNx���'��W_��;\"j���n�R��]v"-V�����3=�NheN���D��v ��\�
:M�����~�J��$�%���=$(Hz�3�����v�=#�k��n���������g�u�o$���r�<�K�P�(���L��@%�Pd�hH�I�I�e��&�%���<����"���5�����AUI�\��|�M���s�D�E�	��y�cO�#�S=f2+�.^�� 	�NQ
�X��'q�7VC.�u�y�5�gi�E��)�5�p/
]}�%|D~,$��#&��4�1�'���7��J�<�3�6g_�%Yz$���IFO�$N/o<�2#�w)��S��>���D��T0
 oftX7�7
����}��/��mf_��|:��\��f��\�6�]t��4O��c����oy?�6���>��!��:�p�d��/��!����D�h�I0���9O����T�=��8�P*�R�zs�N<�0B��jl��F@���[����������Q'��>�����3������T�����%=��?d�`���[��52|�A��#����J,T�D>���My�H���6�0�H�IK���zj�I
���aOom�nO
@�)7<N����9��m�9�d�����E[�~k�Q
��i������l ����f�Li!K�w���-�(��{�J����{�[r`=o���p�d���0`�������ZF�I��]�7fm��F��2+�F�2
�2-��61��fIt���!v�$KZ����C�fZ��������.z�?�h�5��(d��3|��:n[����;gK� �v�fq������Y�2K��q�[�a�$aIW$�f�
�����b��KPg���JxfK:6�%]�������0��R}qf@8�d6?�Z0U_��jJ��5��J��R������g�tA�Y#�Io�'p&-�R���MVf��U�S5&�w�jL4��7�������6S��GPI�<%��1�"��GD[�drZ#������Vd��l��2Z��P"c��B(#B�N���������-k��g�Y�<~J2R ��%|J%�X��<|"��Ika����GBZ�O�}	��|!)z��Y�d����?�R��i<���+
0�:�c%;W�U����%c����x��d��DE����O
�?	��?}1~B�}Y�$���0j|�3�PV=�7J�-�W����/��Dm�������*�
�����N������5��B�"t��E3R�$H����%�9<�XIw����M���6��3��)�C�/k����)�\�U	C'�M�Z���?r�D�1��2lx����6Hc�����.�Tw1R�4x�������^w-H��t�I9`�����'���i��I���H?/�I-�c������gbq�6���&1��Eh�BQg�����R�����in�� h*�����:U.@���7�(���7��4�g�EZ�������N���������bh�HO��	rO�������5p������ubu�����\���8������p�F=��S3��h���>�/_����}�b��2��eL�iD�-E���N������j�&����l�[	�����A��#\�a'$0�P���[� ����k�Y��P�Q�Q��~�8C��H����/]��#`�:��A6s�`V�oa��t��>�
W��
+�bz��	�����{�9[��1��A�i��I����*Hv������ �oz`c������`�p�\��E�j���U��~�;z�y#	��I&�f��e[6����d�f�w�AT#�c?��-�#��Q����f�s�DF����s�:���wf=�a�jO3DL�M�c�]>��O� ���m���=y�]P�-o����Ip���9�>���h���VmEmSN���y��E���v]�/3����:SF�?���39�S��k�W�
�]E������J"�>o�w�IR�M�]������d6s�O�w����@�����;J�1��Q��)����A�L"�>������X���[���q7���T��&�����k������������+/�Ei����,�2�^�"����!����Ju�M��[��sy��Vbt�����>i�M�3�mB���ZS: �ML�[ID
8����1V�s�p�a�Io���*n%K�Yq���D������,�2�]������i�h��
m�(����8$`s�/#�6]E����7�"2)d���O)�1G$2d.���Pm�g���6���{��N3@V7�7J�mFH>��Z,�g��9��o7����Jb��&���i���g�D��Y�*����b�E9b�h�8����B!_�ebo��b�H����3B����OE��K���/�"r`B�X�n�$���l������D"�L\�3��ZX��� _d�&�T��4A�M������>�Q�'��������<�c�;f� 2fD"�U����J|�H���i�H��*��!mh�B-136�������b���!W�|��Q��S^\�s�x}��u��)�l\�����\W1]rTK\���K��t]E�~�c�����|r�����|r�����|r�����|r�����|r����2�UH�s��[�lb\G\�N���1����~�U�G���(�YK��L��t~��YK��6�8k�B��?����j������Sr�_��k�����.����pz����o������&��=?����������a������i�������������������[~%��~us8O��,H<��7���M�n��Mv+'sp�G����f�	������sp�F��f��*A�p�����N�Bd8_~��/r��w�������q(��~�!|Tl�"�qp�X��q[�	���t�W�d-��(�q��D���A[��o�
};�K��'?�$�p
��p�|F��j\wn�@�S��k�W"�8�`b��	�SE�S-���Fh>O�#ffj� y�i2�sO�����	���\�Mv57`�H�o��,��<�x!H�%{F����rA�+Y�[�z�y7f���;w�OdmJ`��"��U�W�2�������X�8�������q7����AN���I�d������,VS���M��?p��Z�b_$�����k+*�&�����o��~��������o�@���Y�u�\|��������3ON4���.�G���l�Q�n���x��}!+����C���5�<��t?x����=7��J��u��*��cKWRd2r�|��;	tM�����h�A�hqS�������d���c�t!)^��}@�^�O���;����w�f![�_�[�����S4��3�^����`��L7c�>�������Go����UrZ��K-H�FY�es%�SU���Uw�\-�,��RP�#`�H(%�]���Z�=�}��[;frK����Zpt�x��a��V�/y�?�4;���@����Z���xZ����q5�-��d�r��p��<�e��	�Z���fX�xs�4?�'~���+B����T�lO�em\Q��e�sSW���c,�t�oT������Ko�0���0�t�������Vjj�\Xt���:����"���4�6��:���y����u���2�n��M`�^dE-	"�����[�-K)���o	�?��H�|���
E���lH"3����j;r9.�)�F ��[��Q����WG]�4zjJ�$=i<b!M��p'�u����s���umhz��H���������
��Z��X�h��fg!R������~�s��������1�~m����q��g���BF��V$�I1���i�G+�s����\
�����{H���������:�j(�-���� �,�������7���x��X+%)�����n/�AS"��"�3\��'s�/DKr�~e��1P��MH���2�G��lEx2��E�T9��(�y���)�hg"���n�u�3�����M<�"��}�+j �������$�	��xc����c��
��L���5%�.�W�
B�w�"m�f�V�z�����G�2��~����y���L�a1����1F�2��-I��X��$����S�-?��\��c7�[������'D=��S�/t�!Y���Ye��gu*��b���0���an�����g�O&oY���ND���fl��$�"&�S���<����G�
Lsu�`�_mEYV�n����B~���
V���Z�����qf��sE}�Q��8���}�����i��]gK����`+�v�����2�x��R�J3�Q�L�\Z�n��������vi�g���T�#_F�QP��5!)7��;������ �O��Kz���z�Y��K1{@��	���!	��|m�<�@EJB��'���BT������;���"p����"�����G&��6J��fc�h1t1��1o�i0�����,��D�q��)��2�D���G�tl�-��D�i�{|*aE�\��L��8h���)8lM����\�BT��9U��~������k	�����9�I�U��Ne��1Z���g�����hY���.���e�i^��*U"��	����T����I�$ �G�;��g�2�`��RU&�.��F���"�&�X��f�V���B-��(�I������C<��U�H�yG�"9�Y�@�G��5S��enZ��s�H@�����O�R��L�$?�d����M�<m/��m����8�a<1�cFB�x�����X6������b���=�M.�������!?�����}����X:�/�T����u
\v�"��)�����gC-�d�����W$�.S���#H��+Pqx��d���#l#zl��c��[���N�_/H
fIX]o�9�EFl�9��>��v�"�t���le��C��BD�3��Yoz���'����
Uw�����u{�������s��Q���df��63���;{�m�\�5dY��ag��
dv$�������
��)����o���:��2U"�`����|��5i��,�����jj�6�?��Io�&L��M/�/Rd�`�u�N�I���J�&{ql�`b��4��d����6��������S;
R0k�+�}+A�hQ�>������?w�zn�9|@�I3[�i�[e FdP	 ���b���a�$����Xn����sF�uL����H����a�}�L�uM�[�U��uU�>���`H�����@X'��+l	|�H��f��,�I��4e����r:���X�����"��~vz����$�c/��=��@&�
<�Nk�����m�' ��UX�Yya�/��8��DT�1.� {	�/_���
�|-�W���bS�
lE�I�h?���d6��\��6��k\����(�"���6�a�(mt�;�������Dd�������[*��#�cm��Z����"����h��?gr��J�Q�?����<��@-X��
;��<^��8�`6M�}/����`�D�u
��f��<������Z���E����S��/���v.�����`�(��F�)��@�N�}����/����T��p�+��b0�cVO4�d_E���\ u��~��m�v2v�[��ZI���n��2�$F��9�mp�p�AA"k�����C�������������v2"��7�7[�]��3�_�����s��\�����"�#M��mVqg�j/����,����r��`OE��j�'_�=�+i2������`�#;�JDf����|���CV��3Q	�"l��U�Gk��P�PF��
���]���eX�$��h�L���az8��m3�:&�q��_�`@��4�F��T��V�H2| ��$j��M<k�1��I�0l3���oO�  �t�%%� \I��0�We�f��_H>����,���������%F�l��ED�A`�����?�����D���{���J��oZ���}��Qdp{�x�I�$�2?�������������������Z�����B��xg��%\h��������������+��y��{�X��B	��8�����%��28U����k�^H��� �����L���<����1�)���"��ES�7�����"���B=8�+y�6��i+�t���26Y�M>/���F��z��5%>z�>W����E���n�es7�yM}�-�;�7�y��6� tE,�5
�e��0�
frEZfa��BM� ���M�������L?o��7X����y��OV
;az�����T��GF�z7��>��BYq�JUeuV}�jQ�$��}�{�L������n�0�II��[����������]������a���fA��V$ /��yNnV:��B,*�^h����|�Z0%6�,�q��1[Z�B
l�R&�dGcr��p�-o� ���	i���Po��Q�Ei/&�uU;�������������lV�-�@W���(��a������5��s����>����Y�	�&�My�&?���#�;�������������hgvm|��_d ��He��Q�w�>@ }��R����X+l��-$�
�`��u(��/�)���3��W0�].i)O0����o������k!M�7��ap�f�X����W?@����&��~�Q��{lx����A���cO�.���;�UPAe9P���v#���kZh�{8����}�H��v��V#�a�8Gh����N�9�=�z���M>bb��5i��)�+l>�0$[��������tX��d\-��������?�N��$#L��q���1�����E�����]o�lY�$d]���a1����/���$�aT��[��n
�z#���e����0�}EtRe0�<xb���U�b.3���N67�0�HN��E�5����$�l"�f���
��C�d��86S���f�Z�]���g�������nD�����V�v�1��o�����w�1����zgz,��	9��fYPo��t��E�����>_#��t�{_�tI������q��UH�dP����'�_��@�[��YV�_�����d��#��l�n����
�Mo���K�E��vd��/L�W�*��&�B)��5�1��
��,�"�������9]?DA���D�,s�������T�����*\I��|����#yYD��
������T�z�MMY/��/��|�8�|rHH!#O���4�Mj��*���������}0����,�.?�f�6��RU�������
��6\tK�'~��(�^A|���?��>+����Z��N6�l������vh%����dYu�@�>��Vn@>�_�m�.���^I+@6��7!}�K��9��~y�d�/=�"�|����-��B>��$�9�]5��,���/�������j���L3����G������2_'s�b�dy��]X�L�h^��/ �.��I��2�I@w������*��
���y����p�>DX���%���99'��)I�]^@o��4�kz�����J��Q��@Y
�!���Rg;��g����2�m*�<j���0��'�M+2����!�:�Vea��H��������T����W�4�	|��F������j�f���o�Y�rO4�$c��n=M��\�+q�{a$���y�M�o��<\���
�e=�]K'- ���T��kO`���nL�za�?_+������c����*81o�"W��q��V����7���e���:����c������&�As�;cY�O����8�i�c$���J��|����t�������r)����j��s��:*��yu[������v]���/���]��o�y/Y���0��:�(�oZM[����$?2������i���L��������otg`;��FM�J^�EnI�>�Y�/�RDbP��	O�m+����~.iz�����>�)�Z�#���y�T.b�jXZP�AW|��n&�OB�^����'�r����`qcH��������MR�
h�yr9����8�E��E.e�Vx�p!�DT������H#^U8}��Sc��
�(e��Xj���wM���^�X[����\@���w�otg����������x%�V���`���=��W�$�C��s���,�|;�������{��ujEs������������w�r���?��u�v��n'�wd����Q�z�/z�s��3aq�t�|��H��Y�K>}�F����]�i�~Y�b��:��
R�0b��,^H��4�g8U��I#����v�\��s���>p����?�{��*D��p�r�M��+�Tc<�?��J�Ro���c}��(��x�S�H�I�R��S��������W��M��,���z��Z*����������*w��+�7���_��UH|�C+ ���VY>���HG�J�`#s�;6:���d�tK.AY��7x<p��;��;Z����a������c	7�:1��m�,�#>*�����I�����������@pqb��a�1q�W��#�#;lAY-?Z�6J���^�:�?�,DD5i��)j5����,A.�O~���,���.?�6Zr�
������4a��o�����ZKY���'G6��M��|��$3�O-���X����4��SV��Dhb�j�:�"z�!@�,�����2�?�\�?M����I�g]�Yl�����el�w`�������������yB��Ko��U����5�A�r%���I�c�.hN�w=TqBL���,k��;��}���A�s�a�H[�R���D7�t�8Q���B�D�MWt�g]W��BMED��j����Qx!Z�Y��I�'K����L�o�l>�8.Y���WjH^z%U�a4H\�c�{���4GXv���_z�i���C��=�����P��D�I�,�H���Jv2,SYo�2�tAV�����Y^��#��MT��7w�0S�����t�����e���:d����eY���h�a���B:�X�o$��e(���E��/���qqg����l�3��N�uU��g��L�?�s?����8�D��;��g!Y������dl�AO���*����@��">�2�.�Cm���Gww��![�L�,��J��Grw�H�<x������
Oz��cY��|��4��B���x��>�V\SY��k�r�j�
���j��� �P������D7�_\k��;�L��\�v"s-�
��]�l�H�DK'g����T�ur�d���=�NS\Dnz�E���;W�-��(����dl1�H�F�:���}�s�w��I��q���;��
��%�����~�`@�3��T����7'�T��]�I��i6�(��A���'��9�}����3Q�Jt`�����I�D�;|&��
nd5����`���4�UGf�6E��s�>��'tI��n�n�*��l�tXpY}2��efh�`��#U��^D��
Z��uh�,�2�����oO��?|!��HbV.v|X'�Yd�0���w;�u7fc�dU��V��q���:��W�W���~E���]�7�������M��I+��}�n��W"����������:@��6t]/
���6-T�6:X)Y�1b��s�~��U��8��������E���p�/��
�����tm[���`&�C�����NX�\���q���yo"�����������a=/)��nq���=�t97;��b��'���!����vX����
�$���0|)��<�� ����=n_
���$\��X��T���L/��,���$QGI�i]�``�\�����m�*���@C�(D�H�g,����A��?�c�������������8�z��\an{����R����z������B}w�XI���n�G���������q�����@Z��h�u�4y;�����q2������YH�el���-��7g(�$G����#�hE�����*�A���@4�[��?_����"f6K���	�Q�n����Y���b�H��p4��4��8�����"����E>�I�!���#�m7
�e�2���"�C��s��z0�k�B�v������X�0�*�A+H+AxG�V��&�����Z�M��u R���
��
����2y�:�����>���A�I���������k>���#qh���k�P��K�Hx������-�����6���_=m����������������k�k���[�������.A�� 	O��&[��9�|b�~���q�����u���y��*�uO��/���4��7J����������f��q������aL��@D= +���-H�v]���(���� �Y���%Ld��C���X���5�����*@T����
}��@Ni�C�PV�a.��;�D�7��pF�TD@�f��������\���V�Ag�^����������BB�@���7Om���]�$Q�7S����$�����S���:�/X�����>��"d~�m
B�x���N���<1�V�>�"-%����a�����n���~A,
�~nt)�dV���'����Z�R}q?]�������	S�{n~��{�������&�#��fm��x!��g�Uw���i���,I}�:#����H�y���.$d����T��-�e����I�lS����H�8�1fVd	1�����E��?�0�1������.H�fU[���T��T�z��i��r�Q�G�����:�C�����,Lj�l�x�I��x����PK&��u��
��k!-�����I�Dd����^�laQ/j����^3���zR?Y��ob-�"�lP���Yi���.H�C�=�S��pYP�iO��&��J4���[������.Hk�����\wt�?/�`?f}��5���aNq�fj�h6�1��~1�j���'5�1���2c��;7��Z6�����U�aNW�g�L��0�J�L*g���2�xe�9:�s'��"�)��V	��m�B$/%�m���s��Z��T����I]�fy���
Pl���U��<��T>��������HU���B�.�Q]�f���lUso�Q]XV��EW>�����P�iW'p�a]���:6�8��+��)^g�:sU+R�>{:����4}�����**��bYW$�\v*�u�����svu��zEZ����}$�::�`���v��M����z��-}�Fv`Mj2��@1�e6����gq�"�y[�/l��m*X��c���Cf��7��I
-e�������(�f~�]p�U�
yI+��e�8�1c�ynJ��x��g!^DSz��m���+�rz,D3m�V45r	X����c�������Tk�J��������+��W���bkA�#}�����CQ;��4)�YKujN+3%,D2���@oar3Hs$Y
��O���������-R�
��d��o�K�����c����L>���<����G�c�r�e��Z�S��}J��z�t�1,��hIC��D';����fY���Ae��O��9{3�������5��;bM����3��o����'=��5K���60�����w���>_Y�d���l�� _�c1����C�]mJ�nNO���y1h���7����*BV�n�����}��5jA|���������d�w� �
��Y�!�'�u.w^�z��������������Fh���i-(���p�������ny@`\6"����vc��ye��v��2�>��Tl���w^{bd?5�j�Wt����z}���5os&���y� n	�pI��s�eV"2�61���~�q��j��p��t\l5����D�d���!�y,�y�� }����JX�XS7)I2�V>���	|+B�7�Q�G�PNK
R	r7Y�~Z2�ne;-y��`\�tk!���3Z`�&�p�`d�"�I%��O���
���"��[�����Hd�p��|��>t�+P��l�Yu3��SF.H�a�o�I����4��K��<V������,�CF�=&/���`�&���T��?���i3�H�sF���_�e�����C���i
�i��I�7�2>P$AYv��<EG��I?���Yj�,�>�G��>|&��*��L
s����B��en�^�a!$�^��+��tMI[�gS�d1�e��9t���	s������I���\1*�>o�������'�,{N�����
��Y�n_)�nH/�8U<���!�+�����#�J��0���:TY��#lf�p���$qg���zN��Q_h��2�Q%��f��2�����4��D���4G�s]p���T���O��@��D[��UI�R�MH�2O5��G�b>����������DSYX�AZn�M]j���OA��g���%��M�rx����g�Rw��L]�i����J�RW�sm�w������m�w2Q��t�a�\����&������[M���w�B���qE�|� DNqp���LS�h��[�Z�����$�i:��I6��`����+�i�"�7���b����#C7,_H�i�
:�O��9f��(���������Ls^,7��4/�Hm�K+��~^L��]<;��-�1w�K}[`���,$"2T��p74v�b$��:���/x�3~w�,��3�yb��}�J#}����\XdzE,�*	]���@����'����P��j1���'��/���Vu�:Y7i��4y�Q��#����/����b>���Z�?Z:��n��JT��aV�6��"[�AR���&`!r�yNnKs�:���tE(�O����3o{�`~��m��`\�����'�8*.��-�f�rlD��i{3�<u�������o�j�T���,H������k��p2y�J�~��k��>�����1 3�/������=R����8�se���M��/s����)9#���	����i�'$�N��e��Y����Th�O������S1Y�P���X�#��iH��7OH�l.�����k"�����$3���g��[��ws����n����4���rZ�`A����O7���{����D�������=^<�tA_�Gkm���f�,=��)�K7j�����'��p�ub��D<��6����I���e!�7:��[��y(�z�8���-YJ�e�~1��u�h�3��M��������Y��])*@���1�D����I������8�w�3��5�8a[�{�&8`���J&��)������>l%b����;]6|�vAj��(]Fc���#��b���b�L��H�e$b���mx��"I��iz�7��9���X_��[��-�y������w�����;��]�gURb��	���� k�������4P�����D������>@���&�w_Z�+���O����$_B.@�2�������5�W��W$��$�n����j�_�r�8�t�X!�`W��n�=�_�h��Bj$��P������3�1F���)��"�)`c�Oc=Dc�������#��m3c�B�����Y��r}����z��u���9��:�|}��s�.��u���)��g�~m���-��q����c/�U���z}_�o�� ���)�1_���\���\�r�*�1_?��s�~���X�o����ue���{������Y��b����vb\�����N1]���u�������CL�k����W-������;�N1]�K�QL�k�����$�I�!��s/�!�����Z�Q�?��o��w���d���z f����XZm����{�~�����@���b���������R��������w��{��Q��U>�D���g��A�
����^����
����f������z���b����1_�n`���{70C����!��{�����R�
����(v?����w3�|�*��@��q�\��~�(v?]_���y,���!v�On�]��b���������'7����
��rC������'7����
��rC����^��b������?�!v�On�]��b�������
1Cnb���~;����-s�!q=�������w��s�nH\��?���^����j���|��7$����L�����Z��w����nH\������Z����w���y�|8r^�)�J��(.v�NzN�"$@�2fY����[H��b�,$*�ecE����C+
{PA4j ,�g����4A�3�x^���t�J������/l@]�|�i"�g��z�T0+��0o���i9Cdz�T-�{�l���L}�5D����� Q'5���2���~��'����(��
P��9�@FV�������Z"���s��5�N����qf��|>��3zC>9���������(�N���#j*_)r�C�i�M_Jqg�y ����p�����|��u���/tz��M���)��A+7h���=�j^H5�@����v/W&Y� ���X�G����\�Gf������E���/Xa�r�W"������|2��`I�O�F�f!I�I$���_&�Cm���L�f� �Mr�#���4�.�y�b��n"�\T�}�'`��=��Df��_���}q��	8����Y��r���D��v_k�����2�h�+��z��--3<
�������7��U���\�!i���:��z�T����y�BOw�n�����b�a����'��~g�ei
n����Q��\�L��9,Q�y#m���hz���Sv�V�d��*cz
����
i_=���wm���q@��������D�F���h�v���c���9�.����e�D��y�-��2�)�w�\��B�I�g��q�>���h/V�=F�DK�8MHA�������B�4��7��?
�C�.�����=d�`������RKI������ ��zH>�:q�EI@�e����1������eG����c��\������3��\��BQ�[''�n-HV�tN�3�s���]��&����dv��i�
�����W���D�&*)�\��`Uy��"�<�S'F�(�3��$����7�x�����Yf8��g�����X�	k@SIrmT�M3��G�N,��H
��dP�������)����/���=�PG���W���d���3��%�$j�������*��{�y3�d!���B	t���n�N��7�����;|C�k��F��z����w�'�B�#j�~�<����E���>.�tG��>!Rh����<��*(>y����������l��$^`�r��{�?[���U -P�����G:�D�XU�~��'�������k|p�T�a�P��i���F��UF�q�����p�E�r"=M��Dk�M�������8V5���� 'O��V����g��'e&�4��wn�wi�c��4�ARd5�b��K�{�P.�1
K���>���`�����S%h��
���y#��������f�)�Xw�3a������lm�a<c��7�me�w���,���z+j�������>o�^��T�	?�F�yi{?P`zg��(���?T�(C���A�
N$�RQZ��$H���Y���O�su�������,)=Mq?�>o�CYi�C��e��;��8�
�3�gj�3wo����\��\.}��r��v�<��F�'M[o.��{��[R��KS�~PF�t�OI�y�C����#�o���Y����/�������X��09j�K��}�D��B�O�u�~�V�CH�r�x�������*B#�~Bn�����F��9�o�2��1m<|�� U�����	r�>/�����r���#��b��q�!G/T��qB���f]%����4lL`�� ���vh���?8�|%������
����1�5vd\��-#.c<�{���~�#5�Q:R�j'���yA(��e�.����*����c�+7�cN����c&�@�g�<'�b��d�OO��#���6�YI��s����X��#����5N���b�n��R.sl�0�Xl@v�r�k��L��O>c�XuvZ��Sv�T�f}�$��������y�}�|f&�>�o��A;�YLjW`��{���������>+I!��s��X�J`���4����|N���@D���),��WE���J�����2�/rA�_�;;�$�
�G��B��8�9���4����c�#j���Ql���\K�H��Y�v����Xi3��5�s�qylN
��?�=���ns�7@G�!��i{��z��9�:mM�d�����nhQ>�k"��}����[��%������b����@�A��M�,(~@]=���d�2�kA>%�?�1��r����V�$�Y����V	T����u���1q'��R������5%X
r�9Ya��;u��`&<�k46����$"K5���H'��������4�J�q|��e�}�~E�y�w�j�j����>��[��ce%����+@������g����F��l����)� ����&F��W����#T�L����aK!nw��$3'��&���)4��o��;���lZ�zn���Lk������X���W}����Gb�c!��6D�(E���v�/Q&D'!��,�(�B�|jK�C����?DK6��Z�.2'��@��6�Y�n����j���9�z2A����H?�X7��n<���V$2f�o�N�f���}!U%,��wW"��O.()��H�(1������V��Wy._���~�t���*����U��/T�������J�]��Y������F_vN��`<��������a���v�/�ep��T��	���'��i�&�r����������0��i��}F��B?5?�_�(1#���&]>�������X�5�/�������+J2�}
pC�L>%�1�e�]���0�+�*��!{�Y��gE*��)c�@��/$@O�6��J��5��B�EE��d���������}Z.7i�z�K�������n�S�n^L�{b�D�m_Q�:�0������/@D�j�U�B�0� T��=����Y������Y_�Ws��j�c�/;�I�i�_H�{R��5](������\;r��d�<�����>ot�94�ca*Ry�C$�.��W�
��������~(����y���qM���`��������p�5O3j��cVRd�V�&�$�Qv�T��`�d�w�����y�w~14�BW��	�)��dG{�~jy���*����I0�^�fE_H=���	���s����Sil�����u���	[��t���6���?��y���z��*`x�6����r��A���;	\<����GA�����O
J�`��O��7baI�p����������BP����~S4%�(@F�'3���"�h6w�����
,��Xv{�I�/$�h��3Q����y�@DV��E���O��)��O�����\��qS����U,���;�hQ�+�x!}X������p������%i�yxKjG���������Po���������	>o�f����ig�>�ru%�UA/��y�z$z��e��Q���z&���B�y1���Q����}%����It���C]�J�S|qq���f�21t#�'G��	m�AY.��>������"�����t����_O\�-�#�
Y
����~�Uh�n���SmR[_�q0��j+�?��9:���}j��M7�C5�XA��kn��2��#q�������MK=�D����x8\J~�0ed/�"���N���q:	�xI���D���/9&C�I"�3�#~�QU"�N�6�R"��fr��6��r�x�s�B{��"6`����+++@��x��++0������������&�y�C�T�c/��i�����B4Z��u��,D�����`���7�aN)���_����K�6���w+J��w����4z� ��le�]�i>otM=��U����[�7h���j����~d����wsZ`��w+�������M�1���8�7gD2��H�����#�� ���W!�����u�=�l���mP��P�����On�Rd8��e��x������U b4o��yY����\�mS��^W�J�_E,���F�W=���i�>��"�{�}��,c/�iCx��q����M&eJcx+��������[��qT�cz+��� ���?`�D?+���:��X��#U$�����L��-�e�� ������U���������(�t������_������������X��}m^�"7�
��x���w��;�J�LI6�@u2��(9���[��cBW�����k
��oy_{���K���B� �O��2{���B�i{�L�V��&*�9�e��Dd����{1����1��p�'1:�+��M�{)���o�5��G��n�[y!�}�*�i��-�~�#���^���f������X�h_��9
�����7�fc���M��N�{�����J�xg�q��MA+7�S���-�*����C�P"c��YF�p��F���h���\+	��TF�_H�{0:~ ����������9�Px��������<q��d����@��6
�BZ����pH���c�J�	�P������6�}s������t���h�������v0��U�2�!py,���1���|s�-oz�qy��1��G5d���
�`��b8[��l��nn�6��H���_���
�?g��u�l@�h��z�o������T"�/1m��{}$"ux���:�l��3���(��H���C�h���e�K���0��|�E�
<���X��l	�
{���a?t�V���uG�����oAI�9�:]F�W�Z��`4����������)��������n�����	��P_�����}��n��}���}���B������u#�����Y�i�
���}=�$P��Ii���"���������H�����nf?@�-1��t��]�������vS���Y����g�������%@�%�3��^$����G��`B�;�D��3���"�n������Lw����	��h�B	:<`K��.Q�	�w?_\1�����+�{�"����Dx�6,|����;���lO�.T7�����p+S��g�tV��L[�*�]���+�|��'�O��AHw��?F+������tX&�A[t���H���*����QDm�DN���t�u��BZ��5����B���N7)ly���X�i�s����;)|�B���G��T�e|��/w��a�;j��QL�n���1��\��/m���><�/��l��k�<����"9��m����J/��}�X�������3����n��� $��H����|,�R� �CT=�7�(F�qt��l��+w[������E����f���J��]�����Fo:��L	}��-#�`�"��?6�;F$�*�^fAh�����*��vhHW��g��^�o`�\�_�_��|<_km�@/�F2����4P{39`��o���6��}/�Z�$�J����W���&:� ��f�'(�\V��d�8��v>WL��PhT8ToS@BY��l������FR�6�$�y��@>�-�{|;�V�����_�R��F��C�m!!b�Gu��8O>!�mk@&$�<�S��=����
cu(i��!��J��J4��S���Jl�����) }��_\1�p�[t
�����#A�d\}�
}b�L���
n6��y�A����>�~�n�� �<[�U��N����a��;G��Vp���V�`��u�����V�������0������g\=�F�?6t!E��=D�w��=PS.w������#B������=�+k(�KX�u���-HLwox�O��@�ur�p����Ao)��	@�+�s7����W����C���AZ ����>-�z�<$��F�r:ks�imMk� ���hK�vCz���	������A��!��Q02�{����q@0�GkQ��Y8��t��'���gW~V "���T�B0Z�B@��g��]bd�ES���@�������v?+%��!�x���D��'�=e=��*���
��'
�}�����������o������m������>W;���6]	�[����ZB��:�
�Z�JB�I�:��D�Y�,&"�j�&�W���Q��� T*��[��%�Pf-1X�3tl+>�&w�j��t�j��g�=G&�PT6f4���A��7�^����.��|�PC������v�w�4��;�
�,�[����+:>v�;sX/@������D�R�����a�����xk��J"����H����I%.{���t�i���g����N��$M$�=����N�m2>��u��
�J�%�`���y)	�����s����g��������sUnxqxp�����L�52�G�z�3��j�&XU�z�nc+��B�uq�A}��	f��N�G��YX��Bo�f��-�i��s\�����V��`��~j}0��2p��������2E��kpEuj�>���:
.����f�*�cR�N��~(V�D�F+w�U�aAOa��P�7*��A=3{nX�q��
"�_c� ����<p��].;�����!��7�V1p ��AdX���Os�|^��}�ak���D����gVy�@7�!�yr.������B��IY��e=�y^n�4r�_L�;���
��P,DP��F&4�Y
&��!��������T�P3�@d��V�����P!�a/������
Zu}�� ����"n�/�y�@��":$����gE_;��W��c-+��!�2��X�����d�c%��2����<x��pG��S�������E�
�D�-$�!�����@�=	yO�<I�����!=��C�	V�d�
Z�n�
�@@��lt��B	ln2�Ip�W����jd���p[����e����q���PT����~�9��B���C�}D�z�i,����"u>o�j�o���?/�N�L�����y�
[���U����b	`
<=����/dN�ZN:��Yd� �6U�Y���ICK3��,����/���]�$w%+Y�F_}/2R-����_��kX7��,���	@��`�g�<|�LDF���i�3��Zo��%&�/�WYF����o���&��F�}������AT����^dN �����"{ag���\=#HA2�T���U��������|�d���.?�S;�sA��x��,�T���U�:��C`4��!�-����_����������B��s9���������v?|�y|Y���D�V����������W��Ac�E�����%����}�{@T
6��������.��
�V���awA��`��=���P�����|bE�5����D�1M"Z���!���g��L�~��nA�g�|��u��}u�9�<������}�o���r�A�����e�>��YP�x�"��:RpQ�E��7@�2�����<��GG+Q/\��1i�O�2F�J��;�G[��n�h Q����A<6+�1">��c&��X��?#
��xQ�X��'u�7VC.�m�����|�������S^E��/������A(��%pq�[��I�g������R7}���J���"k�U��@��Ng4�1��I�]���x����cW���T0 ���n>o����n}�1����b_>v)j��Vp_�� �%oO�+��c�<�+/�1���g��������[T�&v ]����e0"�x���C��-2	���?G�����V�x��X'�d�I�	s	�NL.!i�T�v6UF@{L[��"����3�����Q'��'|��f��y��`OI�u��� �	��{+zx��� `�
��_3��:)8������\+�PM�:����/y^��]�4�0�"�V}^,��e��(�
5{�X�{��hOo������dszw�m�9]��c$sz���&���f|hH��:@�7�+��	
�������������raX"nKV�L)�����Q��iQG��w���t�Y��1�%�`�[��!w3�XsXH��fL���h4��V2-����BK�"X����������H���3m�����0����5.�����%�m�$,�� q�����k��'��X���%�3K�B
%<�%�W8�%]�@r�0���d[K��M�I�����j�T}��j�q�kj����f�=�^�����:_�j�H����M�����k�e�&+������jLlRM��h>�od��A	�m�,����iS�/�cEb�������F��#7d����0	��B�x%2-�2!���D�*�J���/Q�����$#��X��\KX�g��A�OZ#�OF<��|���HL�8�������O�n/�+�S(e����y���Lx�$`�j��<zr�d��4������������I���'�S�' ��Pq0I�c�B&�_�L!�U����2AFK�U=F�,"(�D[*��?�wjA)���B�4���d��� �!V�f�YHV�N�x��>	�h���f	t�1V��q+b�Da�0�����L<v
����[we;e�6���*a���a1-�-��C'��D���`��>/���A{���UtA-"'���"����>o����`��kAr�����������<���EN*�q��E8)�E},��X��L,n��<R�4xn��M-X(�,Z�q�P
�\�4�-5MppTY��hJ��fEQ��&7��B����H�2U�����I�8Y��^�i��\��"��~�L*�^^W�{�������e�#���2�����]����������b~jF����os�����s�&v[/S��\�t3c���H"u������"���P�7Y
$�d�J ���c�5��#\�~��,`��8hyE*�t!h�7��T�z�JZ�|���q��y�(:�����^�����O��$zBf�dF��f��:W}(���V6(����/7���xx�����{�-���*�_�i������P�_d�ML��z*�w��3
7�uxd����A�h�_��h��[���	D/���\6��mhn�x�D5>��z�l�G-����5���C&2jd����%�MYq�ZT���x�!b�b2p�RL�yX�IW�}C������'��J���5�K�'�����h�DO�����Z�y�M9E��0��m�������e�p�\g�h�G�5|&�UcJn�����lW*��mn�����S�r������6+I!�y3���8-��J"�N!6�Z��T����"�Ha���
d�y��u�.��g���g���<����4�����\��-:������sNJ�����R��xp@/� ����!����Ju�M��[����Cm+�
:�cN�/��v��LZ���mE����j��VQ�������>�jyn�?#l?����W��Dc�3+n�{��:��~���S���6���t4M�����%G�'��U�����MSQ�
Jz�"�!
���~���D
��l%\�� �#B��/��2��O��i|�;�Y�|�(,z�!��6j��/�%��/��V�Jb��&���i���g�D��I������d�r�,�8�X���B!_�e|o��b�H����3B����Oy�v��/-�����a%.�n�$���l���J��<CD�D"�L\�3��ZX��� _d�&�T��4A�M������>�Q�'�������(=�c�;f� 2fD�y�}:��J|�H���i�Hk����.�Ro����P��ZL��<=������ �q�c���<^��r]�t}j9�:�|��������Z�:�|]N�J�U��g9��<�Z~����u/?�[�y=�o�Y~����u+?�G��:�o����u��3��=_71�#)�_���o����&���~)���~M��|~��������8k���Fg-����������w�Y��O_~N����m���;���?�@���q�o�������7�M?7�<�����=�/�&���?!�?�_��������������w������M���:�~(��t�fA�p~����hJt���[�u<��[?8�S
D��NX��|W_���5��6K�T	J�F�{4�7�"���������[f7�~����������C����E��`��)�W�H�n���J&ki?�G�������(��%j�F�������|�#J��������g@����ug����Bn]:�yH�BN��>U�:���.����$gbf����� 8�J�Z�=c���dWs���@�I�rrK�3����^�Ea4}o(���Nn�g�wc���}r�����n�F��~��e`�c&%�� 8����e�:'-��nV����x+���t����7��X���Ly����c?xk��}]����PW������V��_���������
��w��_ .��j�/O��7@}�^��>8"�����+�ls��;jg���K7u�����]d%�e�Fu#���fM;�h%��������&���l��z�:N3]I�u$I�M�}��$ �wC��s|(-n�w�q�T��LRt,�.�������i�}���a�u-��cg���X7�tT���.z�������f�Gs�io��\�}�?z�+1Z%�U����l��opQ�{����$�����������d(��K�O'������'����V2+\fZ-8Qg"a����N�nX��������wZ�=#g�"l����im���-���?�Q[�����V��v���'Dky8�j�A`��-������7I�e�G�d����9���Qg��S���c,�4���M���e�z��3��nI#����c?���Ni�+K��������o!"[�H�n�Q�CX�%�������� �q����l��"+j�H=-��B�h�[J���~K�|��
H�|���E���l�Z6�����T���qAMI6���*��������}���}b��RIz.�6���HS�3�&&)�u����y|}�a]���D]$ZP�^T����>fC��t,�YP���dZDIh�Z���`��J������kk�������1��c�	xR�%%���aEz��\��K�|�����qI�����P��I��5������S�x`�����w�$9��9�JID�6x(�����^4%��i!"�����\�y2�B�$g�Wn�>����#�7��$��E`�"<����tP��&�z�0�?�L�C@�����N�&t`Q��U���\�9�,���J:���s/$��M�%��*�4,P�kl>���il���;�����%��� �{�+p��"�w������h��#~	��}��������)8,����E�T�������c`��;�*�I�O
\��Q��9!�@\��m���i���J�����:���H�J�d�~�����b���0������&0��)��#�'s�,@D�\���6cco�������i�j&����iov1#��^57P���V�e�&���/$���^Q����4�V��2�#b,v���\�5��Rt��Y�>bEv���_	���%mtA	X+��~}X����������V���8�0�VzZt���+�������;w���##�(�U���������f����^G�)xI��1Vo#��2��Qs&������_�&*��CIx���A �;X���=~�:�a����tAD�2�4SDBk	��w�Mm��������E����=
9�����c��Es��5�B�>�4S��}��Q%�]J-��2E�L��T��
���a	�f�O�L�a�h250|��������������m�d��^KN&���)^H����;��:�h�Z���/���r���T	�v�)�1��*-Ddwn;�=�����.-H@L�Lw8���4e���=��Lv]2����{EEVM�"���	�qT���5���zd}�����I#���P$>+�����f*���M���5jtAz|��~���Td�� ��';n�0mZ���(viqt�/�����I��adD�[�%Uz�7�_��BD>�`�7=�\�qW_�C�b��5����%�6�bZr:��J�_dB�b�)p���,��d>���@����Px��4'dw3��^���L���G��i���>;��c_a�c_n?���C������X]��r����rv�	Y]�0�����f��$�����%+;OyL�+��8���'O�X���]���N�_�7+@��<-r3�"-��{��3�ffr���)�m�\�5d��x�Iv6���@fgA���[������=��Z���at��"VGS�J�����g[\�v���[��X��poS*�5
�]�o0!���"E��i�^g����zFT�6��������t[����l��s�+���A4���<v�`��VL�V���������������g��>�h�4����p���*�P���3fX*	y7����r������z���-�{�R�	�c�a��
;�sf���k����h������}�CZ���)��1�
[�7�:��2,��i����}VNG8�����#xR$�����N�+��x��e{�'7���gV�i-���w����d���;��
�1+/f}�����?I��M�^�����Du���L��R��}�B�)������J���}[��d�Dd�N��.wm��(�"������%��nx��s���q�\<�`�Vm�a��B�?">����%����)H�i��niu&7��D�s��i�C9���]��@��<u��8�`6M��}/����`�D�u
��f��<������Z���E����S�� /tq�>z��1/����T�L��`da������/5�3�����*�NS�}^�~����f����hV��g���8K�iA�������$sA�s1��N#��xocb����A"#\�@D>s��~!p���o�"0�2�#���>����t�����"h$������8�n%Z-'+��#�]vm��0���b���y��HHH4�
D%u8*�
�h��3�7{��H[g�73s8�p8v:�UTY*�h����U�P��zc�g��H(����/�ho��3J@Y�$���X�q�o$M����mn��n{n�50���J�{_�}�[)��Z@QC�q��������o�l6��7�x�����U6�����q����	
�*=��u�����_�H2�#[�$*��E��6�-hb�tA<�1����[�������H0�I��p�?�e��M�1\�h��]3�y`�7�r����ko�U4Z��X(����B�lA`��@j���G5�����y?\�}������}�p��Q$v[P8���4��X`�e����gbzz�&��L����=
�C���94�7���	�t�LDDp�A �6���;��d���E�#�qc����e�1�-�?�- ����b�*��Y��nAh?u�Y���M����u�S���s|*���"��ISp�~�r�X&���g�F=8�3r��DF�c��}��=] �&S�I`�]�(�5Bp{��S#*B,z:|.i��5O`AT],k���j�����L����3/�9LBg��i�ib�/�X(N�������jM'���E�rA�N��Sw?�IC���`�':���!#��(l���:�u���D�p"F�exC��)+se���&U��������������\�opg���
����d	��M]��16_��U�����e���L�c����8����J�)@gE�Qh��q�>D��
2�XmaL�/H���]���l�i�\jA	�|�[�#�z@Rb4��?���U���LWep�G�i��F �vAgY��*���}�Q��K������6����������@�S�>=<�ve46�{�x��w���aF�g�����E���K���Z�����D�����������W�J�����:%��
�?&u����$j��h<��5���-��&����:���^)�}�5Fw��6}�����2���7\�������u�����N|g�
c������v��4��e9P��w�����]���M!i�R@c�YH��
N]�V�[7z\#TKy�v�j����y�hv�&_�0��DAX*-B��7N�&2Jk�r��mq�-t�2.�����.��2�}��r����7�����T7�Ig��ktNP���1��
�c5�t7��@�l#�$:�B��x�@�~��A����&�\��u�g4�,���KYOc����.5�����_Hh����6U\�b�����$��"��3��C��c�C��5Z�m	jA���.RQ�<]�4�nL����x�����2o��E��U��`z�����y��>+
�!Fzn;���:#X�HvKtd�W7��9z�<�@EF���k.K�����RHf�Q�o�]���"���I��[RF�:�����x��m.�<{j"%��3D$��/��� �v�����������"���LGH�TZK2"�y�������5�$Q�}�c���+�8_	`Xj��AW7�� 	���	%0,�[�2��	�,$��U�n_2��3��~��U�/~a8����>ee��{���f���:��!�<�c�M�~k����D�2���f�*�X�	A�%��4�������A>eA���&�2�����8&Y���?[�:%����M<��'�$�#���ai����^��q����N(��������2�!#?�o`��+�1�E�Y��<��!�3��2�IX���ooG$^���g!A�����B�6�	��������$�:�cq�!�a'e��'���;.��q|������:��V�^2#'R��w
�E����E�X������TU���QH�e�����B0tQV3��~�GT�EH������-���x":4L(��#�$��U ��P�u�z�	��Z�H�����6�H�i��_A���9$)��W����u(�����"��}~�\�do����:��Ra$�T�}t�**st�3�M�OQ/�:ZXP0'��
��������.�q���+#����%0�����,�1}@i ��=''��a&����J
�0�;�����L&4�qvaE�R���2wi�����|��q�l�&��K/�b� '6
�>�����,(��Xe���Vg��d�vg���wE��e���uE_A\D6�-����[�;v�����X�R�L�r��������K�
�6������+7{�I��0����n�)#�=L���=����lL���*��%��0�K�!Adk��@f�aX��	��}�L��pW1'|��L��t�m��3��|�sx^�p��OE�<�'�' g.����)0y3��E��E���t���]�7��2�i����8�ty8O��l�Pq,��XHo�#=���+\H���
����,(�'�.��l��
@	��,x����(N1�	���p�}�����w ���{UF���?.R�����;��ee�~����
�V	I��#�������H��O>�n�v|�
>�gE������N]g7�'�nk���U��T��D�2��M�-���+�
<��_��0T��.��i�g��[���3����R>:�� z�+�q~i�U���2	�Ah6��(W���v���OU��I�r�t�E�s�)���<x�3���MQ]�E�&���3�v��;71���c����'N7�?�����i&C�p�>=�K4]r����~��&�E�����}I���J(��~���C?�O!.���@�A��.&��T���.��j�t\�������\~,����Q���k�NBR���l�6G���x��B�>�����1�a-�~@4��)�n5�����@���]�N�>7��Y����K	��n�x�#�Cu�^D�Y� d��PgpA4,��$�h8Unn����yH��HT���A���C;��dS�<���0�JH��V5Dl^�As�Y�x��gp��)$e�����i��Hd�P��%�����oj����'�������9����X�SK0�[O�<�t4����%�8����mpn��>�0��h^6������$5[����
p��c��DP�����n���/�����Po�OL�iw��H�`��h��w�D�� ����5*�������O�M���?�j&�<�,���[���4��X��ZT "s������j���%$@�$WU�N��jW�=�Fz��4����FY�����"�Pp��Q�I��AYX�Ggm�(�����eq�46yJ�}b�v�6�~f�U��R�n���*����6'/�+�$N���!�V�!c1�V���=�d���o3�w��
j��E�l7'�xS$"�*�h��8�Q�"��*�S4�bh4OG
P��hm��� Yt����	x��23���*j��gd(J��G%r}���32��a�5l�����$0DX�]W����@�#L��������Y�G�����m����#�%{(��(�x�(�X������@��_s	P�F~B���
Q6���K�^D���^�k��-^�/�81!,'��
{v�=+�����@���������J���r�d"!����~���cS&�.���[�
�v�P	t�r�Q;&M��vQOi�Y��M��|k���,d���eeACqLb�m��A�PXs^��y&$�-�.n���Aul;��	�J[%4��@��;3$��f���f5m�|G��c�{�<{t��Q �4�j�/�V���`�#���#�m"��Z��;���;�����m���`Q.��*��2#�-
�����d��*_�o�I������N}�baP5[,�����Ybe���LM��V[[������T���i%��%U%�:�;�wt�t�$V��Z���vo�}{�Q�"��	��f��r[��22���&�z����+�D
{BF���H=��JP��v$�����G-/��Yi�����dm����_�����o\~
��D�������`������������������}t�,$����W�g;�&��l�T��v2�����0,�0�CA��zh7�D��2~�������h`�7SkG��}�H#]�6E�P������n=�����M+)�h�tP:�
������:D��;{��7
��m�3��ka^13Gbt�����1�ET�I�~�"v[L
�f�	I��Ql�80��o���%�5�u���.����+e���P�Z��e�k���tV��v��=�I;��A���5��*�q�D�����o����Mkly��F�[S����/�iYK���2��GQqf��(�P}�����g���y|sQD4���#:��k��'$U�]�q�%�P��+�^�>?
�M�����`Yw�Fh|w�GfBN��\�������0T�b���:�A��.�gbuW��2��eAI�S��r��Y:�q�0����~f��GO2��6���f�$~ 
xZ�E��^��iqm$#�;�'B�<��K%^����W�R�I�5%��`TX�S�b��]&g�!x �[V�N���|Rz�ff%!�%����T����}R�9)8��/�W03��o���^�e"q)����g�S>�*�B�E�����IUY���V�����T��P%��\%���Y/�*�)���eD�K��������4#r���������s��������������?#����s�H�|v%�4����1������;���[�;����o8�]��w��|]Hk��
�����������\V6@�q�����U~2d,�D"����xSB��`�F�8�~�(a�HdYo�d)�N��B5�yx���){-�q������h��5��PN�Qlu�
��]�'j�D����8��8b}���!T��	4���`���Q��c���� ?|�	g�f��]�rh�(tq�!k��L����U��*�f����1��\k���r������A������d�'�C5G���^E��L��~���yp&��U����}a�3���Hjag��U��8IU�I���D2�H&�t���[d�$;���!�����~���9m�G��n�)���J������T6�12UN�.y�[6�A��f�'q�]r��B�$�L����8�	�1���Czo�x��w�y��H��Q���7�w���hd�[w;
�$+���������n�@��#i�M��L��,{j��fJ{��4��]��b��|TThF[z�����N�$��=��hB'd����2�����2�����J�A��kt w�~nFt"�c�L�]����Q3���1$P+:�:�?���NlB�	+:���,�F��{���������v+�����NHZ�l��vF-�!���fH�c�
i�>��4#*�>���X��tBA_iI6�eS:��H��/�9�Q4�7��D�tf�S���TC�VuB#7$v�D"Q�hU'4����[��������G���~��N�H*���e5�
��P�z�T�`Zy��:���=UM+�$D��H����Ck��u"��}����^�a�:U�P]\���4|�����L�F��h^gT$����z��t���h���v���D��uY�t���[��1���G@u"��-Z��`Y��K��VU�������X�3z���C�y�3`�]�Js��������
}��f��3����:��e"y�u^Y�88�?��&������fe
�'Y�LJ�Pf���|����>���P���Jy�e?��X,3�p����h��3��hI����;�������U'�������`d�O�~9�����Hz/�n-]�����p��W�y��n)�{A�L�!��Ml7dP�#xW4R��O�o�P3��F� 9ou��=Q~�cN�D"��!��q��zO$C>u5B��8�U��,_�%����(*��Iu�k.���xV��.����j{&����=��Z"�qP�L�|�o���Ue���K�,���j���$��M�[a=hV�������=M�xob��9�[��
���$/35!�A���	%�x�Z~��3!���Q��>U'��j/�]��6:���[ScG"�����^���0��C��Ip|
4d�"������E6ah������������^�:v�Q~�/L��+��r���T��<�f=x4�Pq.j�?\�����xS$R����l��:!���O�u~1�0��F�e�����#���n��}����O�����a�7�.��#�����	I���fV�q�k0Q3�Lh�Fc[�LH���i���)?���� ���C��z��������-9�/�=���w-`����;��U���+��l�	�IU�� ��y��<��pb��|�a�#^
��3Z���`F��b�["]��mJ^e�"�
1�dH�g�#���1�N2Q���D�"�X���BUg8H��`�M��WE*���B�[��-�[���&4�E����/S��[VV����3�U&�t�!��lh{��I6�m�������	I�%�o����>���YT�#Nh�Fw�[���mM}����05j�]�f��O�I��i�'�����[=����:�W'H�;y�-��t��L@�Kzd�D��N��b��� ��m������0)e�%'��e�ry.�H$M�b� ^��1I�HC~�?�uR��e��bK"�����@���C]�����e
����$�L
A�d�PV�-��������r?B�������gto:��L
����]�����'Y�tmu7T��U���d�<����a���!���gp����������W���0�(?�S��*, �T���I!�g9�j!�&]�^$�8|���D&��3M��tEU 0��������!�'�*Ce�F�YD����K(���j���~#�[�P��Z���a�gb3�GSO�9�j�d�L@to=�����$�Mp��q��9G"�\1b;,�H1r��KtK@�oR2��#:BZ��Dd
Z����y��y*�k�$J���l��1
������X_�
���;�!�0��8�,���j�U
;H&�SS?����
�$��	H3I������w��z���g �e.��3)@&��S5��>x�I��� ��$_e�Da@������B��+���/��M��X�Mi������=K�����3]��C��v��
"("���Y��M(����n�O����:�y�g�i$���h$^�DPs�V#�2��XPP��i��;���������v��P&]X�qs,s�#i��;�-*Ddd�>�t�����,��)m�X���mB�p�D�����I�@b�{�e����M2�$�Dx|�.��X��	ez/C�Qx�DH0�U�����L����h��V�H�!��m����K���D���&ab.��MDj"R�Rj1V�����w����H��t�4,����f�"*Bv.0y����l	
p���o���u2Gn�nf���q3R��I��{�d�oB�Q��X<[�~���������I������b��:!����#�=3	V�cvi�����ES��Y%��9�X ���x��f�BB2�������).��~�v��P���(y<�eyc��_�"$���`�,
�.���h�
f�bV�J������7����B���0�������L`�_���8m����1ger�����Saj%}�_$��]Y��N(�mW'�f�3�D��P}
�?,�E�`v
�����u��o�ET�E���P�����b��l�D����6;t�����FY���H��<��A�����������mg0����^XU��"��=��wEe�[�K;,�0�C�0��cf�8�u���������#[f��YV�������������&��?���_�i���	>G��(�����c�]���{:3�>�uL��qy��g��8����}�@�D�11
@����6_02��D��=_p���k�\�t�Y�g�.8�|����}�`�/�rMB<=�$�xA�.h���/x���+�$�x�9]p���!�������M�5��5�b���z������!��{m�����I�����������s��\�������m;�*�+�����|E~	�����x�x�s�+ �+���������]��F�c�[����;�h}�����i�z�=���M$���w6O��{�A#�[��E#�T������Y���UR����,e�'���}s9=�
^a�F%��r�
����<N�>n��"\��+l��6r��"\aCG+�6v��"\q�������#��}�b�u��G0�
@���h�6��
B�����:�A�W��G�uE�������i;&-�<��������������^���oN���o>���o.���o���o���o����o����o���WgF��7_F��7WF��7OF��7GF��7?��>�1j�U���8����V���{K����'����{������1���{.���s��\���7&\Q�|E}�+�K���nKpc��m	nL�"���~E�����b�4��{"��?I�c&�W=W������z��!9�l����'�t&R��Xp@Wl����.���d2r��d��N�6$g
JB�K��8�S�� x!�0�'��	$��	!���������L����D����,r�1+�H�J�f-v�)�C��Lo���^�`���PC����h$3��-�8�
�����8wR����P�P�	%�cE�����,u8�XjR"	<u;�I^�W���7=hH�����j�����f�2��@e$�;6����'gn�����.��*2�G�	G����I��&��8Nb|���fY�7��R�RM|	J�@R����;��D������n��$�DY2�gMpo�����&��w�;Xae��@�����1W���#����8�}�>��0��@6�P���L�'l���7m���t�����=��1���l�����J$�]&��}�'`��{l������r9�Xt���B4����)9oS,��/�f��x�=��I}���qg��w�����7���{
���vj��ZV"��dY<��2)�d�:��#�!�r�(����0�]���"[���0�r����:�w$Q��L����Q��c�����-Qu��H��n2z��3yo��	��e���2�X���
�K�B�<���N�"�u�Gqb&����D"�H���]���0�WI1$C0*C�����*����D�8������N�NH<)�L5?�i#�G{ee	�cd��	H&�	�2;�]=5�/�J#��h�
��!wud�����[���GcBY�'0&}��5'$�V'`��\���b^�=0Fc�H���M�����p���s�����n���i������l8���V�D!U����j/�FAT�I�x���8t��5��V���@�&2I�(�t��Ue=����@Z��
���0(�c"�>�|���.�f5{��NT���n���$��J�&[�#4#:��H��#8����AOMG{��N�a����9����:F"�yc���3��&�%*���wr��v��]�����0��d'W@��x������Io�Ss��?��Ln�wE��j����;�\P�{��\��/�\�iq	'�9:v���aH�'?D���������@p���E����'Y���_�����{�m3��%�Q������D�D��������uO���$p�D�a��mz�\M��d����!P�Z���E���#2M�d9\
5`&��pb ��E��ec'�����gV��k=��X�g��D��*��1���x�1G}�$f�_��S}�8�dZZ;
����6��lP%(>��s/S�Q
�'p�<��%���c������K�{����B<c��'���c��>w7����2�|T���3(&������z����f�zw$��@���A4#����x(6q���[�8	H/nG�����S����E|}��:@���@�XP:�4+Fu��,�E�B�-���Ay��3�OW�&u����*�g�LU�Lz�\b��r	[�|Y�D$s�r�i��dV}
Z��y:�<����0 H�OH�y�]~"q�},�v�p���	�?�xp�;���
�Q����O�xr?
:��{���q�9��=�v�]�-#tr��o�[glGu���F8�:�Xz�@�'$��`h�i� ��%\1�*����;2b.�����\WE	t�	��=l��(Y$�~��Gc;
��"8����8�|&a��I� �~k�=����t��-%&W�*��^�:����P�1DjF��G���\~�S��%���"1�o��KU�[U���t�>����9F�
T�>������ CjdP�G2n-Z5����� 9s�bb���"Vf�8U�+(����d&��
3!��=���\l���>�{�r�huV�l��Uc���Z_\$]���0u[W�7]�d��gER���qo�����K8s3���o��m"aJ=�,��\yN���m���g?�-��4Hl
d�Z�����]Z#_�K�x�7E$-rA�_,�KI
����|!xG\�|8^���1�c��l�B{\r6�%�D��N�r�EK	���q�g?�q
��� ��������w[��'��7!,��Wt��s��L���8��=�zU���Q�T~I��6���������+�p��}I�V�@��u�H���K]�	������9���6����&�4Hg�Q�t�@V��@<lI�o~��D
\K=t�����gT�`7�
�B���=�nA`%<9�rv����$C�<d	#pO�(���D�,%�8�n�e�m�~F��0��j�
�x%���7�����@7��e�N�������wEcW���$	���*���<|�&���EYA%zP�����_���V��G��$�<�}�&�9�DF�������g��%Qq&��kx�P]��L��W�Ro<���DF;m,�,Q<�E��@Pq6�,BH�Q�(�D��|�x(�p��g�H�*�T����RI����-+����4����s���Wp�06#i�ay�h-9v��k���x��_+���J�
^��6�����vV%�
3
J*�OJ�Y����{���~���k_������K���_���}�bo��f�gM;���������������/hL�#�w��}A}���E��5g��wF"c�M{��b��/�r�e7I��L�I����M�;#)U����d��-�,z��QbFl"���I��n���E
�Y�U�C����fd|>?�:����-����HH�>�QE�7�7NU6��;#����+��n��7��f�E���j�$M���Y-���,���3�e����L��QR���m_����-����0��)���}F
t�`�{�s��XC�h�>t�;�
�����Yjt�����h�'��f}�_����������o��}|�5!������v% %��8�����gy/H6oV�3h\��+��g��[o
�G�V�x��v.�$��tj/����t�e��d.Z3s�}��1Vyj����4�h�[�������$yX+��(1 ��l����M������q� ���!��"4���w�N��O@;��x���fo��G]���
�*� ����nx��0<��]��P�>bFx�C���.��o��	�M��$�}�6n�����F��J��n�m:���u��������6�	�����lX�!�-	�JP��=��7bbA�pJ����h��I��y�����J�����72��?�$��6����V�,���v{������_o�x�zc��/$���#�7{�:�{&�N>1G6����/X����	%��\HQ�-�x!]�����
����	�>�-�3_;Fj�G�+�ov������0�{����n�m����-l��`����?��$�+hA����@��/��W<�m&x�d��s�wap��Y����}&����$�K��I��Lp���Q��C���a�x�|3����&�����y���<��a���
>�������_�o����_f���M��t ���}V�G��4��?�B_��1���*32����;�����8K�x��a�L�������/En=�t n �@�o[���@���~�QvF���9��x����F�$6��+��=������$ro��	 �J���������g�s���W=�.�*���}N-��Wf4���D����% ���Wf4@��|��hNl�2�!s�qp�P�V2���x2[�����Dd��\:��le"R8S.�=MV�mx����rji���FK�c����@��?�������|'+��2�����'j������h3h��<������~z�dK���2'������wM?R���`o<�f��e$�v��i>�doFeS!��p 7�I`�6��W�q"(����V��j
n��KA.�	EA��p�����{�:^�����N�?��mC��^g$J�_IL��]��U���vU�N����I��G�"xE<���&2J�o�5�7
�]P�8!��=F���<�71��e��w0!���e��4�<��&0D]n�P
�c��2C�H�gL�D�4>� ��J�O	���[�Yv,=��������`�x��s��^���|~�!<38�+����\<L!��ba�W&D����p�I�q��>+��-�:|�W����3�����e�j��E�2<���������W.LJ�������E�Q(?jW�re�"�uR'ta�3��V��"�����V2�tU���~S�
z��o�2!��&��;3��D�_^]pIVpx��������:#�4k�[W��s+�����f����DF����:#���~��;���Bb�(�,*���o�)ml1IN�����22���+9�Q4!������
��Dvc����������"�^��J���c����C���"T�B�+C��10+I����R�:��X�`M������;b]��j��u���^vm���lv��}I�p�k�]���sf�H�]����,�������:t�/�p�vj�/�Z1b���0m�D�U3���L�+J����&:?7%]*�g�>���|6��]�V��.P�w�75
UW����ZO��k~�}#�Yk�h<�(�����++y��rMN���[����{�LA��m,�ut���������mt:4@��8��ih
�/���n����������I�F3a���ffB���E:�'h�����1����xt�����^C%_�����+�Nd_���U�l��
AV	azy�ma�@��bL��04:���I�V������H���fC qh��;��E�y�S���6'F��6�����p�_N�mr���n{���E�$E�{��m� 6v�D2��Z�X�[�$���p�SOM��W�+	��Kl)�<������7�t��=�]���Ib�l�l���L��V"c�����,H2�kAf��Y���S�7:+���4�f+� ������/cs��Ap�����'g	���I�f�7>�L�l��
A6�H�j���'���J����	��Z�@����`c�[��f`���<.
wG�+��3�����f�#�;#�=��B��(���G�;�`�����)�-1?M*�"����xMz��y�����(�� ��y7�/"���aI�#�Ga�����En��0���Elw��<
��[��l��F��Z���S�8+���7�h�8����_8���V �&6m�%�)
�8�?��>��G,L��a��{����V<#O��'$D:�d8H����#���LH�x8�u������9���Kx
GL$V���,/Zui@iV���g+�KgBn���Y �)gOQ{�Wz�n�2* ������X,�-�v��`� �������>v>H]jYE++��C7��2Z�����z��y�#���l;Y'C��=�Z��I�g�w���T����u�a?���P�`���*!���k�����Pf����D�w��S���-�}|�g[,/�!H���T��oQ=m	w�����0!6��$�&�zS�O��^����I�IN,Yl�s	h&�sp��������uf���]o�O�$jeBj�����^���na�M�}�==�������n�;OS�����ic�|m�.��,h�,����5+�,�b�����]V�G/�P��o�EmD+f(D>�q���������3* ���_����{���0!@
P�5�n�+�\�������3af�
�(?^���|F?������{��-|{�����Q,����7�u��r�:O�eH^ce�Lze2��G:,m���G�m��P"��f�������o����8Ep����v����@K��t��]P�K���c�)�1|��L����V����e7��������L7^��U�w!�"U����S�	���e�(j�����Ln�7=�OKcl���	a�t�Z�7_t�j!��������,t���w�<=gAl�(pYv9�����Lf�J�lU���'���"@���������{g,��Y��C�]	��U��x�lh�]CsR�,�L�<<	CYq�/3���n3�	I)�:�xk�``���T�Dn#�����A)tZ��R��F��L���C����??+��A?l�7�������!����
�Lg�>] �/7�}
��4)�~�c�LH��]*���� �R	�I�.���Bg��d�:$��M�=k���@J��x:�.��U)��a�"�r��c3o~fAA���joTK� j���s��4�����x����#?*��SV���6W�j��B#m��J���kf&Q�Q���qv8���^�	y����z���J�L���'��u�8!S���f�g�Je����P/j��nUW���.�	<���{p��h8�;T���?t��A�;�~P��/�o��	A����:����1a\���?�4I�i���g;�A��tGY&�����m��]�p�6=9�D������t�9t)ya��;$a�3���T��@�r��J�C��6���#������T��p�0�im����L�|�H�iMk�m����y���2��u��+c���N�O�o�����MY�d'R@z
��2�/�����izN�n'd8�Q�.H�h�pR#�3��#�6i@������lGY&�1���E�&�b�����v�@����F-z�v������'����g:�QTm�3sL�N8��G�;�A8�DW�fV}�3����)��)a�ol\���U�����t�eh!xWTu��2�7��)�,��]�$�i
���&=d�#9��'O�T���2�-Nz�������t�#����m���U�y�3��s,�Oz��6���$����V��)V{�e���:�I��'W�^a���s��@i���f<(j;����'�LX-�f����.@Z���E����]��������9���Q9�`��x	�����}���}�Ke�������8��geB�'("��f[n�����(d��=�Z��l��c����R��k����B���[��G�J������ �6iU���gB��U�c�I4H�_��E��L��y^V�-��7V�{q��L��iEr��AC���v��{����V���$��y�g'5#���UDH��t��&&������[q��r���������h<��`G�B�����E|�	�x�Ot�M��p�%
<t5���*ZN�M�]O���P��B7���w=t����:B��d�g�2}[��+C�|�����xWT�yj�[9�x#�w/�AK���|�4D����;h�`���JZ���irF%���O�M'+�~}�f$��C��t��wsx1p��,H�0�P�a���#5�eLOs�cX�K����A�$�Yu��>�S��{��-w8"T�2�Z�o�% ��&(J��N�
��		�M�����M������'�.rE�,	$��E�A���br�����Sc�T�$��L����6��%�f�.'�}c���A���	�������s���UO�����{e+"�@�5�H.�I8�I�x�t�w�t�������=�}B%8Y�&���%"2B��51���fQf���L�����#��h���:1vr3���"y�E��bza���-Fg�w��r��o�LN�zp�0~��&7��Xj���Z<�R��P�:t��`�D����	���;|�!�3Zy� ��j�"�{\r�B�����z4�01!LL�L��33�����O�k��B �;���Q3�>@r'�f��?�/������&���Q���t5|��o3C�p��\Y��\����i���t�9+NQV�<	t�������(�S���h�-fB0��9%�QG�f���bhyR}�O�d����Ep�<�H�<_<�<��	�$�|���u�����Mg2�A��/�����%��SG_�������R��	6�Yf#�2O,���VS��C��h_��V�a� GD#;<Y7���1@US}�=�D�P�|�Q[�Bv�n�'��kg��h���](S��^���<�k�L�f��C=���/>���4�>�N��f�'$��u�a>�����Vn�O&�v��o�a�
�]f�YvF�<1����y��9���f�Pn���e�
�a�)�c�,3X����p�|q�u���*��5���>���A��h�����[���V�,Oj��t�8|�
������}~a6$����v[�����Hb����eF6���YS�C
�wd��y Q���9����E��NI8$�AE����$'����X����Y�D|�����$0�H���W����N����I�"��I�vE �G������l�*��W�Y��n�>}����i��u�7���I ���]}9��:�P���$��]���hd�@?��d�C��������)�����'�Z_�/,��������6�M���C]mw�$��e�&"y�t��"'�Tc� ��/�c"QO�:�Ys�n�pL����ER<��� �Y�|(]I��{����������.LLg��*u71��7!��m�:����&�i� ��N��JDMCS����������]������<�S��?c�T� ������	�i��L��$i������OH�R���s���^!�"���x��o���%1F�A�[Vom�8�����_�B���/�L���WW��7�|�pw�>���bb��B����m7���G��>H?;�W����'<Z������}�X|�=���w����������L�}����|(��������7U�gV�H��9�!"��<����Os��J�b���Q�7������("L40`��1.�n*����,�G$��Fn
i
�������sog�����'w���.q��������N��`|��g�$V����E���p���2L�-)�+/I,j�]P����n;��Z��{&V��B�A��Co
D�~�.>}������4���l���X`���8����tg��#����������$����5�6r�-��F�*������+�+b����\�B7��]���x��u��oI�_X|�@��{�� �j����= U�"L�D�s3��S����,I�Z�<dX����O#O���=�"Lc��&u�TXF�U�I�)�pV��81�*�<
,�����-,�"����*��~<"pV�� �9�]}����;;4�����4TBl��u�_C$1�@��H6���'��[�?�<����
G�o�P�N�J������������b,���&�N l�'C�����,	0��g��:�L�u��6�v`����?+7OwO�=1LE�>�K�O�#�I��������6K,�w�G7Q�
�y;�)\oY�G4���"Ef�=A>��
�a\��'�yV�i\�=��f
�h���gr���}R��X.LkL�+�dA�3����������m�o]ly��"�3�d�o��"7�6�����l��Kr�L,����NW�w��-�	�)b�g���,m�N�N5}U�],�I�m�m������T������&�DJ�[k/����53��V���m�'�5H���/B��V���q�$��
bKe����Y��K����������r��(���j�r=-��)��V�`L��T'=�U30���n`~�&F�l:�7u���\�,Q��:)$]�{�U���j�t�8<q���f�����.�
�E��T���Q���8aI�'g�����&���L����l5:B*9{���{[�s�O�*e���E.�
���tDU��<��X]�Po�q?���;gbY��"���xh��$���L�I��bd�W��hr��_9]1���W��x��M�
���q>W�Bd��}�#G���7���E��������o��K����w}���@��������S��
m;��U��#���b�S[�;���~�R������Ul����C���hW�Me��eUnS]cU������r��IK5����������0��3�f��;����_�������P.�^�}�w��_�8��3�\���������u���������������(?g����0�{���	
G����;@"���w!C��;�|)���,A�G�
�����spD������2A�pb��/�1!^$c����p����DVeZ�YQ?t����8@���?�H(�g[��_.h�]o�=!����)�!����'��_������UBD>��#W��C��S��g8@��7Lu��p��7�[����x��BN�]�,v�"��1|��U������N}��KJ�������L�U65W��)��(^2�d���7=�cA ���<�)�:�Q.(y&C��O\��U^�����8�[$I��`�$O��U?3)h���h�rLh�]�v�=�A�.�5��x��o����.�P�"�v���\U�)�W�g����G�	
��~�	�%Yr�����o~5���9�����6� ��D�,�Z{�7��X_}�G�A��3��:3��'���`U.�2	��n�&i&��,��1�x���
��-6�n����m�:l������u�
�����$Yb>��4���NC�a���U��b���zgG����$TA�m"��,(�����zmz����?t����KI�1���a�WT��u���"����(;��L�!_�-L�9�{7����L3�S+�/5�6�cl0q�	Q���|���~��0���%(�!�5�K�7��@��kw��D���I�����P����Nl�[��7i&3�	����l��c�xj�@�������3��\�u�o:U�"���=�U��+�B�!I�n	q�;��Lr�|�d��S����k�{I�|mz�?��,\tv�m�l�1���;���:����t	G Z���Z����u���1��D��c�w=}?�\%G7-���T���$
�vE&T�J��iF'"EKmy�����'O��4�I�APs<��q�� �L��6�v���P�@�k�
��c��r\�\We\�BWb%��b�
;o	���u
��������1Yy�����l�$RP^D��e6�;@%]tL7m:)���dT2-�&�(�8�������H`�[[zwF��S7xh!"��f4@s�Q����f4@�s.�u�%`4�����_Ceq</���4��QAqHA�}�����������7^d�~���([���V�G���)��&2d|/	��n'�_����L�
��k������W�2� �����!�F&��r.��U�{s��-�W;#a�����rl@��XY����<���H�Qa�T>��VJ4��l'��_��J���dJ�6P���_�����m�:4e���$Im���A��c��/���D\f����v��p��kD����`��E"�=^������!9co%A>e�r�6�:������Wj����������#V9.'t�!��f�m�Q�h�����El����M��"���y3KM`��r��u��g6�I-hdi�R\�To�
ea���5�\C�(��Sfe�&�q��{_q�GL�b��e�|���3"�3B����`t#f4�����+8t����N(��z��������_?����@�(�z�w�����,.?#�Nr�]����0#	���)�F8�(�V��� �R"������S�
@���z*�)
k�c����������bl:k�d>������ ���0�ub��t�`""?�����a;��KF4����0#��
��/��������{���=��2�����,��@�93)��SM^��z��D�l�-=���7^cK	3J`�%<��E;0������c�]K����]KT���M�>sr���Jd�O$�j��9��;�T�^g>k	�����R"(�����n Ui"C67����8�6��$���2h�p�{��d����TU*�.�v����<4IR�6��wE��
	;�w���4�]������E�%�����HlU����m�f*�=�M�,����IB`o��������K3�����n�R�6Mh�+��m��M�8_�9<�C#"5b������b�j�2����3b<�3�~U��C��9]k��T��h"L��J�_DB�B���^[��WDq�MA.4�o����}k��H5�es3t���wZ�� q�N@���� ����m������[�E���x?��:�Q0�,mzW�ibR���J��R�i����t�8�4��MyT�3r^q~n3�<u}Bh�-��L��p�.+K@�[�Affg$����k+�6`g2T�=5�2�}
Q�������:R;��_�Ut�
��)5����u�6�:��2e2A���s�j�i�i+Yz�9���	�jJ�}
��K��t�ov>I���X{��/���^��e;c;SZN���'C����q���������S6wH@��;�0X����E=�}��S���P��j���jaeUw�xDF*��( �G5,qy��n$�5�2�X�rL�A�{XR
p����}5����$���H\2����?W��m��Ni;(0&
�aY�xWD��r`AX����:��l����w7�<	�{����h�&$�u��l�FrU�H +�-.k�?�2����C�?G1++���lF9�x&"��x.� G	�J������T��R�G�B�+�g�I�I�~X��`p����!�r��e0�2eHq/�����^�t����U������|���j����B�O�,�6��`[��iG��4_U�7E3AG�xN��t{(���3�%^$�f��[P'L����sAb�5�&2�Sx���5qm��O��D�Cg��mP�!*���Km���?,	E��/m�%��@�A�c���>.$$�x����pO��Ec��@�	fc"�W9e�yv��,-~��Y�
u�x��gdn�g`��##9I1�y������S���C�t)�!����gE\��1/bB�>�}�t��-+�M7t'�����"($���-1����T��JOIC��6�N$�jQ_O�@"�P���st+��i�'g��8�VIE_'���8��h<22��
�l����f"��P	c}�'*�R�����"����������o�l��~��Q�1����6lh�]���t��:O�I@����Z���?=4"�4��|�8q[�}A���3�8�k��_?|�s�~��l.g�)�N�ej�w��s:8��-����f[��0��E]j�������B�lA`�������9����!������_���oZ:T���Q�E\P8��wM�����ag6<���6��ng����{���y��qF�i�N�!�BGODD����E�|������<n���Q8[f[���;#����b�*��Y��nFh?u�Y���M����u*YM��s|S���"��ISp�~�r�X&�"}�����Nd��>1��2�)�t�h��L�&��wa�L������N
���������=�
Pu���*��7^��3Y����}���	�p�adG�����T�LNH�A-�8����$�^�HZ.�6��0s��G2i(^r���Dg}2d�r�m0=]G3N�f$J����Y�o�dTee��r���������R�M�mO��	��k�����^�_��]�����;�,�����\s`33f+vt�Ab�	)�s�q���[�
�0��D����n
)�����P�.�����L,g��/�rfeBg�d�����:�����|)NX��d9u@j��2V���k�AV���,�X�������	`�F2{��:n�U�������7I�v��1~'�+m�����Z7���+����D�A�������.u��8����A�;�&c��"��l��&d��-���B�L���:�G�U3����*��9��N�o������n��0���\�/�+�F�I���p��:���������s���6�	l��x��:?���	�
���$��8:�E�(*��EfN4"�����>����}HLH�w����C����������������E��,]���n�d������t�~�Mp����
�c0�5�c��@E��nq��J��SC��	����H#��5�u��f���/5$uv�G/��[#8.�)�j��X�.C�*���f�^����A�������/L��f-<�h��b���ot���-���7�e�@v��_�]���4G��PN������]�����#b�P�nmnn��e�2Ch���kC�������z/1���/�U�~1���,�����>+
�!~�|��H<|�leA ��|�s�W7q�Q5c/�GQ���gY
�o4>$�"@r���J�U��������	�n�h���tBF�=�3�|�����5��!���-!�VN:����u����OdD�2<��*���U���D� E�/!4��w��I����fA%��)^^L��\gA���??HZ�J`�,>��d��YH���F��dw�;����[�����r�����Ls�2��b_�E|�+o�dp���.��G�Z��Ve������h�w&�#x�K�|��BE9`M>X�	���qL�B=��uJ�g!A7��f�{R&I���S��U�%��C�m��	%�����Sf4d$�
lPp%�#�����,]t���xY/L[�F����q���6���g!A������������u�B�eS�Ks5�S��Q�n�a'e�o'���;.��|����pp�L�,}/��)�������5`z���?5Y���lQ��)�2��u��h��a5���D��/B.�0�\��o��@,F���
J���*��c���P�u�z�	��Z�H�����6�H�i��_����Cmw�J����W����u(31s?D:I�����9�$9y ������a$�T�}ta�G&st�3�M�OQ/�:�XP0'+���t��k�Yf���8�I���KgJ��u Q�R�bw9�`�#P��t��Ipo�	����6Pj��Q>������~4�q�bE�R���2wipa��������{UX��)v/��� '6�>�v��D�fnL`AQ������9�������n�\U��h��LCQ����+���������]P�z�}�����]
�*���o5#�D4����({3L��8�H^�@���L
U��� �;S��B��t�4��yv��eg�h��Pi�.����X:	"���2p�b�O�]�{6 TN�m�������{l�������S��8�o��!�QIAr��3��,�[��|�����S�������wE��U2���2�A��:�yr�Qq,��XH�~^X��������d�2���fB�>��J �D�R+%pk���6�8��'P��'�m�����@��O������*'����
��;}��c}�����s�Q����[�`BR>�� ��{|)y����[���,�F�m��k���5�u�:�)=Au[��V�r��b~P&�����z��n���m����*�d��*tX/��>�$�:w��A�I#�����8�^��zF��_�i������o&�4;�
�_�l�����g�>Ue'I�*eBN�.�hb�0���|B01t��c�*�yXu������;7�h�1���t;��
��1��L����|z��h��P���?�4�M"���)� W�os��`�_b�n���S��^<	�1��/��@������EyXM��+������{��t���]#t
Ym\"(�����07����).�c�)����D��b�&�������s�k�)9����}H��g�K	��n�x�#�Cu�<-���b o����6�:�
�!��M�G{�q��&�h�G�����D�Y�D^
<f�&��l��#9��T		�z<��i���e4G���7�z��BR�K����6��D��Zh:�P
��k��)y"_�=����JL(��<�$��Q/5�L,ZO����=�/���q\�b|����� �a7���S�C�v.%i�vz�7T����
>A�.���3�wtn]����s���}��������,&�������6�;�7��0;����kT���9�?�6>��h��g���!{��-~��}�H���5��E"2�[������f��YB�H�pU��T�v����h���qLvuBp�(k����V�
n��Hd��lP�A������"�����)�X��)
�ig�<d�??3��*��0T����)�$�(t�B���|��O�.DR��;d��[S��'Q�D����c�S��g�"Q��8Q��"�V�E{�H(�D$���
���U�M�v]�>8G��/��G������E'x=,��_f"C~�_E
U����x	T"��~�:�!��\�F/im�JC���u��mw��
"L�{P�����Y��
�m�������i-�E�gE��SD��j�fng��Di�K3��
�*������?N���t/����r�>������	�R��=-'��
{v�=+�����@����1���J����!��	v�.(���B-4�2	u�X-V���Y��'��+������&����	#�1k���iA�Q��
��Y��������b��n��A�(�Xs^�;#Ql�u���3
#��^���w"�s(��$K��@��;:$��f���f5m�|G��c�	{��,3Q �4�j�/�U���`�#���#�m"��Z����f����d��y����py�wT����oi�����v$$S�V��|CL�v[��$t�����baR�l�+���� ������!~�)	���3�J�CJ����%�A�;�W��OH����l'�������p����&��r[��22���&�z���.>LD
{B�e���^X�
�������0�����G>y�Z��X]���������4�����r�UHK�5��&�.w6}�~��P��f�TO|����g!A>_8u��Z?;4��g'���|b�n�}�a�q��� �VmL&b(O��3O��_�G ��@�h���Z�`C�Z��#�t�j{bfT|8����[O����i%% ���J@��A�S�Wu�@%w�<|}$`o�������ka^13Gbt�����id�8����E���nMx3��%����<����[B^�[��?�-��,�;�PK��p�Qq�.���?��NZ/������z���i(hF��
Bu�p�N�*>9��v�-o�5�H{k���L����U!(�}�p�G��B��+r�7������7E�A�x���������o7i��8#�B�J��,y��.\��r��YP�xhw� �����7B��3<2Zp����&~���
C�N��@���a���wA>���+��eAI�S��r��Y:�q�0��=L�??3A��'�X���x�����DO����+q�>-��dn~'��D,��� {`��K����*_j�"���d��nf$�����]��qB�qWoY�;�����WlfV�]B�c��������u��\���`��v'
����^�a�� �
��3���A��o���&����JEQ�N�v.qH���Q+z���;2pX���`e_:f4Y�
2{��������n���%�������*�e����Iy}����k���)�����	���/Q�H��#y�f��J�|������[����?��?����_��������Z������&v^�����2r^�������;���1�r�x�����������I������������[M�+���p�r{3M0p���0��y�G'&�
����	2����O��\2��T{�S�#���T���|I�d,����7F��*@��y��xN�z�co]k��IdU��G����y#I�|�pAd�]��'��@���?�geYe������*�z��<��:$-��$���D�L���T�y��7�������\%^���*���������z�g���aE��x;���;�H���VTA�x�������q���5���z
b�n��������3-�`EZ
lQO�jjA������(O�x��C��~%�%=�n>�N�P?/���M��m�6���T�*e?B�v�RM����PU���*2�Mm�����ekZH���;�X�)%i����l��E�eSZ��qhJ4���� �}F���}g�" -YS�u$k�d
���	���-�aMW���S�i7?-Y�����R:������F�)�{����:�5��!�n8?�Z2���u'YK�Z0jW!-Z�G}esZ����:��-�TQ2�\���b�����;nb5@k[��d���Y��e�-iA��_����*(�4�'�dX��<X���%�H�bI0/�N��k�3�����7�n2�AS5�sk��t��vW"����B7��SE�����-�RQ��'[���-
M�1-����U���^�������r�C�N+�a���c�����m%�\,j!���y�E�L��?]��gGw�zp[A��5M�}�M�J�����U�<�#���P�UK�6�a7fu!
���g��f���O����3�zs�]���9UfT]hU���7z&P����7���"Oj���~��1�����Y-H3������jW�*;5��@W�$�J���L��.���9�� :��U��y�+F���v�Uj��H��V���r�F��G��-UQx�+��8-j4���yg�y�����fiPW"r�P/�3���YZ���7{�0�7&��������*l��3CBh �Oz���B��d�������!zr�1�B���&�6%3p���x(�1�+�6�O35e�3�j+��������$�kFQ� �M��H#*�DW����
QO��b��y�h�p�7�lB�V(�rX������'?O)�=��N���[bA	����9���oN��z��O�����d+j��G�FplS��j�������Y� ���^�� �>��S��)����g��5��!A+h��������5�(���bX>�cZ�$�H�Y�
����W��]S���<��M���<��j��\U$`/`�g���p�G�,=���hasr�h�p�:�������a��86�Ve7g�d;������������#���������yj$�h���������r� �R��4$^�L�G�GV��`���m�F��'XP7:Ay�9�<�{E����S(FrV+j��H��G��r����8u$��v����oM?}\�
�Q�����~�'�f�Nd;:Z.��H��m���q*�4��R<��t{��k/������{���w���-�3'b��<����������Z	+�Y��&%I~���=7;��"��=��G�#ofb*D����������x�-I�����_PT��B\L������0�H��^������W�O�<p�ZE�'����������.t!LEK�i�o��w��� Q��������������%�;�4F��D3�������X��U��-N�G���'�x����	��L�	�?*H&�O
�Rv^{1M�xx�z�F�3!Q���F.�i���&�j��"�o���@��X_�XXn-r�����/����$�Q�n,*������u*�"��{�Ud�E���Dd,����r����b��^{��J����i)��HH���\ �u��tp����Q>�����	������o�N~���m�����;�����<1���C���� �z_1�B�H�*�t�F6i~3O���R�3���9�h��W������+��0{O����N��u���6����	���1r#W�4
�$M�������7[�e�*H���y���2����f��JuA	 ��y �����e�AU-�e
{�?�|��45�}������BM=���B��Gs��Mu�}\��Y�V6�/����L�#���7T��;iE4���S�>��-W�
P�W�3+j�+�L�l��}o���-�Z��J����z_��n��Q�����3�����F	+H��w�h�&d���+i��H��������]y��n�Z�R����$8|FLD�*I�.s�Q��Y�Z� n9
��c1��t��=;YFbV�������G?��O�]����N��7����~��Y9F��AZ:�Qkn9Y�~�����9��^'���B#���<*(
7� �
?9����.{���{��i�Q�:��|$Z�����nYP��+�h�=�:5�=VX�.�y�Xz�����P+O��z� m���8�����q���&f���t�5���r�>|vH<�7��K#{;��8M��ku���c�!�n|�g���	�9&�LUWc!�j!�zk���A��V��[n����S�a,I�������e�`����|�I�dml�o��z��{g��b�
��:�v�)����P�������j�4� MYv.�Y;��:�:��8�)��NT�eM���4�����>nE!��o���
�n�
���:����"������"���X�C?�������c%�NF�G<��jDS�=n��V�I����;���}��(������}b�L��������_����B����f�59=�PB�OH���T�~����AU��>#RV@���t^+�����5����>/���<x�ea�����nOBj�L�]F�8H	��Q%fD)�����G��}~���>`����L�+jJl�y(M>,�+$�HP�m\8bYW~����=
��[�|���6��Nx(�j���+L�q�:��`����\n�&�uuW�_2�u�$8�����1~�a%7��2sx�b������-�7�������G/m3�����"{��=�����*:m������V�=�t[Bi��*C�m����QF�_�s�����n�@%6dyQ�����F���L�P�4�X�X��e��lw�Yz��(r�ja�l1�&����ih�$���Iz����2fkKt����p��:���w��CJ����P���k��N|�^��*ZzA��&_a����2~��e[�|[�����t��j��/�U�K�����S��e����?�fJ|q�����(:������*2�e�63���l%H���^�������kyAFt��&*�>�t<�i��Rp��uk��������U��uK,k�}��[�����fseH�h����eb��*[��V��u����	)��l��x?A<�n� �];�����La[w���&�c��l%�-O��Z��� �/�j��bX����� ���%���"��yw3�D�1������
�����(��7L�2���P��7����y�����S�aR\g��n��#���Z��u$'�FLY
�����P�b����e~�m�H'l�����F-!��v�Y��T�r��(�j����mW����4�a2��V�?���K�k�+��B�����>��V���^~��>���e�@���v��5���]����5Y��/�jwsI�A���K�����/L��������P5V�@�Z!���t��������jQ�Nt��5�%�`
��Q��9�$Pkf/N��W�/����W�w
���j�����d�Ko|Y�c�o�R�M��|��cA�mS"~�c���u�����X��.+��Z/p�W�Xc����-� <��{��==c����gd��[G���I���[n��|��(>X���w�PP���(��T�Y�mejBG������KAx���J����������/m�M��y�v�s�Y����uQjv�!��Z��W�E;�����g5�Q�\J�@��z:�����N�����^�~|����s����<�ry���X/�r�����/��s����{�|���:.��.K��tY�ty���S.o��m�,�p������zy���Rk���,�1]���w�|�e��c�5����^����T*�ty,���� '���j9y��T��_�Wu���B��]��L1]��rb�.���u���9��������~���|?��r�?��\�n�Rwc-�����\�����*qb\�k�g-�\�?k������#l��4���l�FCL��X[�QZr_����bd f�^�@��Z���uK�RL�W��U���u�j�\��U:�$�.7�!���?C���z}��n������g����^��u��g����3�|����r}[���{�������������/6����_�|\��u7�g�����_X������^�K���_,}\k4�����>�^tou1��y����[��h��_�E�V�b/�z{����������^tmu-��i�g�=[��h��W�E�V�b/�z{������v�>�^tku)��Y�G���.�;���;aw(�j6��P�����"�g"���{�p(�z���P������~���|�E\�K������Z����"�g"
�>���Z�������n�\������L��q	�,���8����1�������������SB�9J�Dv�v	�+��$|�����C2q.��?��1w�&�����
�	�L�W	2�P>�������!�t�Q�d�?��
�GF�PL]`�$���8��	���$k�� ;���+i&�9�`�2	����w��*�x�������dY�����2�����U�#���DF� n�:O�GeZ�j$d��v���.�ElsV]�8to�S$��8q����
�,���&�#s~�,��B&����������e�hb�
����]�YT������j� S�>je�\K�'���C��E�*��	BE��K�)6?���z��(y�$0/������v�u��$4���<�����H���PQ����� ��BWzM]o2�y#�.��*��3��I�0v�i%Yk�$\|?5:L�e�9�}�����|�7�+DK5�I�abF��Od0S�x1qdKS��4DN��Oe--&�~������_�m�������
@V�,�"pQ�� ���I���vTe4��k�?�{��K)�?~1�jj/u�53,mITu�����k3������[���E�� 6Q��Xh���B��0:�@V������ 2:�Ll����Ml����p$�?�"i��I_E��������g�U;y(��'�d�IT+��S]�������I>.r�$��K8dG��2��TYM&2.��� 5�}�?��"�Ay�3��?��^���(�,����p�	�������Y�[ws���n?WY-���?�
&N�R��a�|�)3�B�x�_:�Ln��DK� ���*Q���d�����*8� m."
&�PSU�Lf	,�_�SA��H���7�D���7D��~o�G�?-������W�^l��UF��I�(��}L�,��_�;������������gyP1��E[�[I��*N��2OvQL�k����K�p��Nm������7�E[=Y�urb�t�Z0m��|b������Dw�1%��7,���&^��MTS�JM��/���>w�q?���^Y;j����=�n>���������BO�-�����W
�)�9Z�L�T�4�1:��J�/�^$��;��$h��eo�~���|��}cg�u�����KL���Y�o��s!B�d-Ws�1��p�BD���,$)�v�P)+S�}�����fM8D��u����:4�
�F6U[|�?���5H:
��!�I��7�o��V�dQ� 6V������r$�[0#E{������~�r�NFy��_��JZ�g��uD���Q�O�'�s�A�������hT_�n���^�!
���tV�7wU2�1��p�G�j��L��e���G�=(����b��d��"'I�)����]��/�5�8���Q
0�SIK/�� �����!�OGw���g��u��l��bV������������d`�I�	nU�*.|V1�k�����U��-����*�0I��O��c���D��f��w�)!w����uX}�����,������.���L���[BIq56�'�T!-���!Qdo��w��"f�WY��S����d�3{��A������l�'�O��d����]���8���uFlL�bT����2�A�5�|q�P%Y�z�bm���R��F�p�����X$������6�4�7R(���M�����!�}g�h1>�c�E=�U[m��`��h��n���<h7?��7�i����E�_�|av���P -P�������Uf��#�o�-�q`m/kz!B=z��pTI�@�V�,q�z.��f:([��T�2�P��Sd�xs��q�M��L=�\E������wW�����o�g��n�7���E�pl^u���2q�����0�Q&��/21/�g�>����R���Pt-�-	����;�al\��w���mfP
_i���x���g��M�����#���^`�����y��A�STFK0��&�NE|	5g�H��}!fp��Cln�b�U��#�#L�b���� d�����;`_P:�%E�l���?�E[I���Ms��<�����&vQ��.���w��\4���5qi>tF�U!o\���-�1�f=��\f`���2�q�D����
�q��l&��V�|L\����F��^`Y=h�a��/�F^u������<G���c^n��?u4����	���������������,K�Z��*wN����XE6A�A������Y�sh�l\�p�tn%�lE���!���O�$dj�e�����#���E��{�v�Cw��"�
%�r&����K���p@����a���i����/~�����\�x" �X_`�f����a�~�]��@Z��&�v�r��+�{9eI�u�i���96@l�(������9b���H"G�
q�*����
���C��Ac��LE���^A�6�����>u�T\�~�7q��;��y����P�����:��V�D�t��]�~[�\��+�����D�������i����b�^������=@����q���q���q�W���!����J�X���V�f��aW�8��b�_H�I��ob����Fa�E>�W��'+R��4��']�U~�&�p���Y�\�I���'���"-�beQA�a~��R���m�D���m�A�q'S�y��'����m��P��V� ���JD��8��Z��e��V�TV�����Z���/L��'��B]�v[����'~�r'y�l>eY�wgP���-�	�5������-r���G���'�~��W�����\� |*��D��WS�:����r�F�S���N���B���5�������f��p5��YlhA�?�I�]��lz�R<�bN��]7���v��>o$��8@<vaE*_�=G+,�{��mIc�V��J�h�f4�ac�a��}�,�]>>����|M�<i�d�JY��aH��g�xPnL�|x��\;����H�b4%��b8�����n���t����������jA,uM��W�9�@W-����~^�����i�����5�u�z���������������6�?B�G}��U7X8�������	���gm��u
���Y
��	�dA����SO*DaI��{FAO��F�"����/\�o������<�-XG��J�D�9C���r��2�e�S���$�h��s�������Y}�.>���0��Srf�x�gs�y*��M��{�(h�3��P�����L��qX�?���>�����n������-�e����d��o@����7�����d����_��\%�a�z`�'[��B����E�������d��1����7<&�e[�\	ds>��`>/��U������p��^&�������w����#WK����'��@���=E��npO�����������>B���kA��}����tM������)�zE|����V�Hd�i��I����P��t�9T�����os�����kPH�7;����s�~����9V������e+����(88�!��(����	8�gy�����$�tfEA5>`|������w)yw39�z�M���?��Y�=^�H�
�d`�Je�x%���JE�c�W�Ns��J!"��	�O{(�����x�d�h����V�n��E+�h�\�X�%X���
[�S����/��h�%��.��]E	p�91f�+�#�BX9�1��|��?��*��]E���'����[�WGNZ�*Tf`��w	�.C�=�1��*J��x�X��1��"���;P^���F�3UC��dG�:�������~��1�!@a�C�VM�ON�Rd8�OEY� ��>!�
^����u��mD���*��s{�Ta��+R%�".���F�W=��1!�L#x����n�,������x�
��q�W�{�zj�1���>y4.�(��
Sp�U����AE�W��XQR�\�D?�hsJJ��i���*��x�z6>�A��Z�O���-]��X�~rQ8~��\���zrQ����E�8��8#0B�� 8�/4��kZ�&��X�`��.�u�_I��)��|P����$J��r�{<1G��e%"��[
`�n��8�������B� �w��0{���B��-�N�T�M����N�JD�6���{1����1=�8���J���&k*���?.�?�/j�w3c��������2�1�(��Cw{����|!X����X��/Z�
E,������s�1Ar����`.�^���dG ��Y�H��(�)�����N���[�U�������D���,2N��m��F���h���\+$i�c���/�1�<N>c0�un�������� -P�Es��o�LR�.�����Q��*8�l�Z�J{3}�YBd��=��A(��E�*!"��a-,Hkc�F�[mHa_eJC�	���V�29����(6^��'���N�=vo�g�������3X�Z��m5����
�������#]���pQ�GV��I��d�=�W�W�Dk9�<�A%�X���
w��D�}v�@s<�>��Ap���{���C�hnE��e�K=���)D�i^��h����t����4@F���G��4C���
�[O3c(����Kmz����W�Z��`4������~3935x�����o�Z����g�fg2��������
W��
R��no�>��[��S����n$$�K#�l�{)\�'�2?�n/������t�l��i���H�����af?@�--����6v������G�����M���G����m�K�2�ekFnd��$�<�`��B�e�[����q*��)<�+�n�v>���W��Z�97�kP�����(���������2W$ ��v��_�ZK��E�:����
�zr�W�������	�B��L���b
|��c�I������u����|Z�do�@���u��C�;qX��%��~�����E3�]F6[Z�j��("�B_^<�U��s5������vF��m�����;��s�k'?��Ms�s�s��lz�$��)��X1�.F�YI��K���;T��;�_�v��6�z���Q"N�^����P.D��d��y���"��Y���8�"9��m��r�
p���h*�_��'�f����)�/&�<l��i��
�(�(������������b��gK����z�m�/��^��I��nIl!��g�+b�0m���G����h���+����~�':a4�
��*{���10}0�g���Mb������+�
������3��$��Z�,�%�C��a&��@���\cj�Y������BD�
4lh���
��6oN��Xl�3W���L��d��*��,d�����v�SL��P</h>6ToS@���F0hW,A�#�BR�6�$�y�T ���I�?��V�_eYN�@Q����U��[!!b�Gu��8�|B"z�F@6����*��#~�m�0V�����3�*�K��J,h�����o#�9��vF+��T�q��_1�0�-:�GR���� Z2.�Fe�{��i�lH���N��b�����k�����uN|/����^%zFzl�Q��\;�����h�l
���4Tg�����%�1��`C��Z�"��q�w%���)�;adB��<������*Dd�����R�'��"�$�;��7<�|2�I�O��~\��X�<�3Y�Gvj��u��`�\6N48�/F� -P��9)�z��1sQ������������j�%'{!�������l7��H?����zsR��� ���8�j���R!"#�\wr� e��`zhOz���1����h+���-@u�4�y2�]�H�����F;������#V���M�T J��B���P��B"�'�=%=��Q���qw�}^5�V�����&'c��g@'F9��H����A$��O���>W��XyZf!�sl�j��%D����F�����Z��w"�,�����DCm�	��d���e.��?�x����-hf-1X0:���O���9Ym+]AS�?l+���8������h����o&'�L��
�|�P:��c��h��Z�in��YFV�<��+:>v�c�1Z+��m?���2b�@V��=j��
�{�v�e��3V ��������
	�z������sy�a3�s��3��IXA�D���|��\WV2}Bq��;m��x�Kj��
������W��5K�
Z��|����L��r����h����i���#}�3vF���`U��I9p�y#���8-��
�T$�2��t�=�M�Ha	��z{��B�t��8���n�������q��9���>���L��t2��E�>�Lq ��<��N-���3M��d��]2��4*BB���Zu:pH��1�BTn�rG��ZT<�
�������������)#<n ��AD�k0����~����s!���!2xxmD�u`��%��3�}�X#�
,Q]g�;O����$n�!�{r.�������EkIY��e=��G6������������*ZNzd���#�L<h���P�&��!��v-�+O�5D���L�m	-�BH0�����A���/|�(���������!����Ak+���A�N/�:M��T��ep��"D�����c%�geHl�B<��v���9~�*�92THB&�}1�=�<)z0rO�<I��)��S�` G�&��.3T��u�� �����f�sW�z�d��p�W����jd���p[�
�L�A��ffK�`���G>�����C|/D(�=��G����vK;��U���	Y�:m(����S�/S����3]���ZZ�k��*��X�O��v"_E�T���;�"�)H�`T�D��OE�
-������v�[E�<������d%��W��c����������I���
 �~0��v>u&"#���z�
:�������&z��0y�(��2��A������=*��u	���L����%�HF��W��^���e7W��_\�y*��~,���#M����|���)�W�S;���40�����_Oy�����	�i�������*�/ �~<F;jC����W��|j�7�	���\0
�y~Y���D�V�����c��r�+��d�L.v���'�,Y�.��;�!�6c��
z�K�.{!-U���*��)�^��r5j�.kM~b���:]���������D�1M"Z�a�9B���g8V�}���������D���bs�9����s���7��p���y�qL!��G��O�<�,����9 � ���������
�5]����<���c���E�Wk4�K6�*	�+U��D�<�M&�L4�Q����A<v�@����F���Kc���
���/jAk���d�N���b���M�p��G�6������S�kP�^���VK���X�����vcpK�<I�����?xU��A�)�y%�e�"k�U�T����N�hLL�"�w-��S��9��^�����7�����������i}�lW��c�������W�������������
�����:F|����!���>��)��6�0�t���������w2j��$�v��-���NFZ%����aI�HJM�M�K�v����fHUk���0�y�
��|>Dj�����(Vd<�d?�����P3���k��T�����-z8�.������n������v�Y���@*�PM�z�	���/y�H���6�0��d����e}���,
mC��=��a�=-(��<�x���	X�����0�+Y��|m��&���f|hH��:@� -��`�TJ�f�Mi!"�����mIE	���S�fSF*��^�&��,iA��!`O�t"Fg��i������n���~���kT�(d��w�*fI���aIy�s����r��M��U*L�j���Y�BD�q�nI/�'	KZ�����
��v�{���e��{Y�:��/�P�=[Ry�}��iM�}�\�m]�/n�H���
g��)E����]�)]�|m6��U�����T��lLozS>�s�B�!5m���de��:�"���&�Am7���YerDPB���e�T�5O����@�X�#�-G29-��t$4\A[d�],`�\F�x%2-�2!���D�G+�J~�`lY3�<�f���S���v,hb^���
��A�OZW��x$�u���O#!~�/$EO��!��L�^���O��)~���b�����+	\��"��\/+%M^�GOI�,IT���x���H����Y�'�/�O��/����`!�i����{
��z>o;#-Z������<�M��(��{�
JT�
����'�,v�?��~���Y
I����U�H�� �&��7�pf�b%�W�'�����x����c�0���u���Sn#.[`�	C'�M��-x���:�x$����&��H,�����m-�Twq��I��/��!�v����u�nB>)��r���c9�|s*��H?/�I-�c������Wbq�6�+�Mb����%���^j�M����-5MZ������d�����FQ����L�	�S}��e���S���tY�,�.%���
�A�������S���
����d��`�o�Yo�.1��?�e2���n� usT9O�U�������E�,���}xe��CD�a����Y��7�1]L#*���D&��Si99���>�Z��j t�O�V��`��p���AA�a�����A����B��7�����X�r�0"C���s��"��g��vV��^���7���0�e2$3�z������\���VX+�lP���_$ �3�{�9[:M�o� �m��I��PL{$�gt������~��6��|/P
7�����Tm;;��h���N4o�I�$4���/����?����)�1��F���:��������MQ	X�w�9d"�F�hv=�������Q	��������I��1�6��	�w��K>iA�7��h��{�a�J����,���KO���=M������U��6�m��]z�����k�e�p�\g�hY�����i���Ck�����U�J��[ZI���A��!7I
�I�b��JR�����{�|��D��Bl<u
��4c�sa7@
��#m��$�
e9�>3��1P��n"���x/M\�nWO�m�V����W��sRZ��x�����|
8�^��OV���o�9R�}��@��-O�Ij����>&��g�=�|&�M��vE����j���$������>���pf��@�~��J��*�J4����&����=i��Y<ez[������i�h��
mV�@�n%N	������MW�g������2����O)�c�hC�p��Y������
i�m�'��4���f��n>o������|T�(�g�����|��<�K^IL9��9����6U�@#+��������(G�m;N~��^(���`�L��+(f����_>#��k�#"�)���~��
��)"6!�����Lb�H���
!��s��� �f��J�q�VapX�f�D|�Q� RM��Nk�%�A�t�lY>Add���	I����q�D�l�H��Y����x+�	"��a�AB8������3csz�H�i���8O���s��z����������z~^\W1]��9�u��z�u��M��:�|]r���*��}9�o�k��'~�k��'}�k��'|�k��'{�k��'z�����B���gl���qip�:E��C����~�U�s�^j�����3�x����&^k���F��t��������jK}����O������6������k�r��5�����_������������\?~.� ����M�n��V�����s��������_�����?�?���3(q����4C6V����g��F���)�������q2�x$0�<
D6��0�����<��1�����#���I"�&/d;I"����-�"w�|���4���F�Dd?���G��/�`���EC������*�YKc�G���S�o�:2��%j�F��o�w)Qy�G��@NA��7�%C����P�,��5���C:#���
���R�8Z���Fh>O�#ffj^�<h���'Tj}Pa�0)�s�]�
X(��[$+���#���^H�w�^����xC9��+Y�[zvo���"��cG�O�4T�nYE��~W�2�������(H��0����E���jT�<(�j���r�.��1�&�v�jjr��)��^��z��	��;���ZE��Ih�Tg����X�@��Z������L��,������������C�qON4V�m����w����K7m�w���~�I?-��E���X:��J�������&���6�k=T�{����,�	9i�O�;	������`)Z����������$����JR����z�~�O����C'�������c���X7�tTN����e�ma�~0�_��1G�O{3{���~�F��Q�Lv�{��l��opQ7�7�$�$V��s�d����u=��d�B����7��ng���U����6>/����sn$c�z2��e�K��G�f'�SA
�0�[W[�|�;��&ply�BM}��g2j�����G��LT�!Z���U��b�^��i~`;"x�n��P&=�9U2�����u^�97u�NoA>��MG�m���kw����<L5"�cE���=��:�JMm��%@�J�k^9��JDf�h��F�R�PQ�:O3r0x��cG��2�n�����"�D$�����>/�E���������`��Y~�����\�(��
IdF:0SmG.����l���*T��UH��~����b����+I@�O�(�)�aY7���n�* ���GN����.f�"��z�"j�_�7,j�M��h��f��dXD��v�����3+I_sC���k�u/H�5y�z-d���"O����w�@<B�H@�1��s)���=��qI���������:�j(�-���gA��h��Ht����.�$�>�VJ"R6Pu�q�4%����������{2�{!Z�=�+�C�X��T>�U��h�U$�'�;)J����DQ�3��OAD;��u%��3���T��~a+���O�O���*�|�[;Lr��f�������o��+�����;�Zp'
jJ�]�W\��������R/��phB�?��+�e���c}�}��]��a#~v�G��e��[��o1����H?�/$��
�k�c-f0��f����-tY����'D=��S�//h�!)HO���(���a��XI��}��9�/O�6��\9x6���-��1���CZ�����}A�+�fv����!���b���}���6�`�_��,�7����_H���Z��jq`����LvxM�83b�Y�v�U���������H��2O���:[B�F+
`���C}}X��������Ky+��F������|\��0F�ye5#+��y,f>
jUZP������~����*��m ������[o��,[���= j1}p�t�0}�`����oP�������@6wPH���ao���:b����@D�e��N�Y���X�#�oS���>��q��b�be����8���9L��B�>e7S������h%"�{�e^\Z^m��S	-@�n�����f;1���dj����K(�cL[�F���.j��!����	-3s�I�U��Ne���j�Z�}�_��em
b���m_����;@S����n�n��'U�!�Y�
�#�;��{�2�`����Lv]2�!�wE����c5J���HN�v�����&�DO�;qZ��j�d?d0���Jr=>�LEen����Q�u�{��OmUJ�t� =n�	����G)L�
�c��b�����q&��xb��<��L�
����}c.�O�T��s�bL��&�E�����a����?PK��cY���xbP��E"�/���S`r�Y��(Hqd�3"a�
��M��$���^�"�2��LAB��/����=�3�6���{�a?vZ�u���v��� )�%au��3�h�]�7����@3�EE��8�.Y�gx�C]/D�u��<�77>����3����\����no�1���
3[��w���c3�nf�����6d���,�������2;��l�bU���n������o���:��2�D��;�g�����g��w.``����mJ����M,���M/�/��:4�0:k'���sD�k�=8�3���������_`�f���H�z8��]������k����+A���v`X�	����J�s��Y�i>��ZO���MW�UbD��	X���3fXVr7�m���V!�{=gD^��O)i��1��16�sf��h�$�8VE��:V�>���`H�����@X'��+l	|�H��f��,�I��4e+�g�t���b�[�O@l9����{��~� �x���M2�l��W�i-���w����d�ag<GcVV��������$�2����r����+Q�� ��R��h_�Ph���V
�&�D������s���m:M�2�|c����������
zX+J@��wO���+���i�����-��	��6�D-���qE�	�M7��-��]>�h�bN�u��P�#�`���W�o0x��%0�`6M�}/����`�D.�>���5yn��������E����S��/���v���z��(�O�}�)�B [����������S��C8��y1���'���d_E�������/���mX�����|U��uc���#��xo����\������g�8�_C���������0\b�io&�Eh�2�sqF�4���s��\W�V��J�=���?�$qG-��qH��F�\�������I����'U@��I,���=����l�)W�;���C*Q��Q	�P�mU�EX�%�5IU�E���.������;�x����2=�����Q�.��x!�6��_t�[E*��V�H2| ��$j��MX�&�'41I�B.�L �����A@�'�\��d�h����a���C�#|!�wXp�e`h-�i��?E�5c���<[�y�}��@k��G�i����^��c�����G%������n�b~�^(��c}~T���e�y�������_dC�.d��{0>��k���y����%h�Q����	����+4*��y����R���q������%��28S��w�`��	�vd����?�D���S���~>��M�
��1P	ES�����ul�����X���o�&"c�2��k�^H�26�T�,|^L�)v��1p�P3jJ|�T|.���5GO�"�&��ar����[Xw&�B���]7���X8k0����!}�H��,�|��T�k/���-d����5g��x���`�'��EDF>Y)�
��Xo���R%��n�U�����������s��*�;P�]L�����zt��_���1��fax�"�%�n�#L��������]������a�:�� �a	��8������������#m.����Sb��b�O����R`3�p�2�&;����7Z���<�����'�%�NC��kDu����U��F_V�~�G ������Y��(]=����X����	`kk�"[,��%�+;
������uo������2���d�}n�A�qo�j�+R`u�}����D�?JHe��Q�g�>@ }��R�k�^�V���[H�n/$�^W�K���,���4_��Wpa�\�R�`�k��^G�_{���4s�7�W�{�W\����W{��I7�p���h�uw���OE�m��5R��_�~��J*h�,����|`7�(
����mS��O�1�~�,���V#�a��z�,���N�9�=��C��&���]��4U���6��0$+DJ��r��}r:,t^2����rO����I'�p�
X�����1�a��e����{x��1�h���FT�u�`A}�
)����D�l2�Ht��@�t@�[���H���2�EO�4��"�{? _|Le]������f(�;��vHXn���1bQ�x
$K]�$�l"s�H��?/��]�e�C���h�}�LP��Z�]��Ly���hu# ����4V���U���?~���[�Lcxb%����s|�|�H�����eA=-
�-��M�_�K��+�>t������%���O���Y���B�r�|Fo������r�� ����e��Un�niM&<Bj�M�5z_��-?���/.��8����"u�c����������Q�������<��Bvgl�u�����3���G��yY��W%Z���T��w��*���F���d{z$�"��(�� �:1��s-�
BW�{��u������|�8�|rHH!���?4��6l��$D��l&�.��Su��Tg7�~1
��Tb?�f�m�[@KU�;��N��� �����n	��#��S�]A|���?��>�dQwA{��M/�c�&B39�B*����e���L}?m���~��?80��]I[�l�����)���-2s�?~y�d��D�l��+�[
��g|fE q�9���4���W�`u�J����V���*���|n�Q�0��z���d�Wl��'�<
Y��P�!=���O��$�x��$�;A��c`*s�yT�Hj��~l�\�����$�y?'���<%���$���K����������9��
.���~H�6P�,c����[M��2�mZdy����0��w�m�2����3� �w[ea��H��]�����H?���&�'�]���'Y�a�fn�w�
=K�[.&8��Uw��4Y��r!W�F��
��w[���6Q�E��������H�������w�,T@6k�Y�9���,��1���������UI�tx�?�*�%��F���ix�b'�n��?zr���������iTN����&�As��aN����at�*���������5�B��$���B�El���yU��JKq`���"w&L���
rk�-�)�w�����4���3w�����SA�O�BT2Sv���5�@Y#?2��O���H&�}3U��?��������Z5�����%Q�4fu�y�"���Z�LxZn�E��~.iz�����I����z���������dH�"��.KJ�7�����D�����|1��������?`qcH������:�
�_��'�s�M�F[�>�o�\�����B���xw���E�����.N��?$Q���Xj_��U4A�N{-bmu+���\�������������u�Xr\���;HX$�bO�5�R�$�C����HE�/�k�^���*�Y���D�Z�\4u]��\d�O��������M"7��$���	^y2O:���!��>�����\��LX6$�p"���a@���w����#�}����G?�E��x��
R�0b��-.$���M�N+Ry���B�}�_�N����'�}&�~[�:�""�U��E�Z�B.41�b`�9��9��-��RS�.�c��MD����g"M���8�Oa#C�e	t�JOz ��X���:�Ra~�e���p`z�;���+�7Z�����\��9o�5�DxO�@��;1��h_)#v6271���A��^$�[r	�:o�
*���<o�x0Wo��P���1��U���f �%35C'n����e���
q���8�%���g���\4�9���l^8�k���#�#���l-?Z�6O���[�(�u>���S�3�B��S�j�C�^e�ry���_g��l���y���\����6a������_�n��Z�
n���f���q,����dF��e~��E����1�f�t��S�w�.v���R��h�| 0��c�o�D����ij>n��dy��������7���-�g�4m�������GU=����W�ci�O�NK�r�`��7�7���V�t�9��u�@N���.$�~����O@DvTf��4����L��e�X�n��O��U7]�<�u��w���"QZ�'&=8�@���>�$^}�'nr�������m�$�[h�������D��nkG�z���*�0��.F�{.r�i�P��=Is=~����E����jx����H���h#�����DU��a��?E���.��}�~�E�WD3q6�W��U���xG���o�8�����z�0}�����uO[�T-dLG#���k��i��C.X��P��} ��};/v�}.�of�lV;Q�������f�?_�Ol��/(���9��E�7��8qw��G=-���(s�J[�����o�8�D��_�����-[&�^�������H�|� 
����������W���i/2V��[_�V��k*k5x�Z�S�Ta��*�ax���0W������D71v��(�� :��Nd^Ae��i�h��H�DK;g�F��+��9J2���M�"r��f�E��W�pb��?p)Q�>������rG�+y�}�$���yl��Q��OEI�
[�?#2��o���b�����+x��������+�'|�wf��gu�q���7��L�A�
�P3���* ��9��36���(����5�S�h0����l��]��+xB����
���V��P�%�ec��R�a�I;y��L,�;R���ED[A��
��R�U�9Z����i`����/$�I����??E6cL�r2 vkHKmJ�j ��UG�n���;��F�������]�������,oX~s�S��M���V*�V��R�����O�%h_��Ml�t��]�����~[#��6:Z���F�s������*��8��������"g\���?��
�����tm[���0���fId�E'�����K��#/`���n}��s��S���z��q^��C#����f�������?�
"�����W"��2Q[b���HO��A�}��v����M�.&}��@K��[��r��"�( �:J�O;�uyN��[�$=�w�e
+���@C�(D����3�w������u�������9�6��b�$�Q=���\an{6�P���Y��C	j���S��
�\2�����$Z�����J�/��e�#��i���u��i�:���fv��&��16��YF,��[��o�P�;H<�����K�E���~-�A���@4=H��Wr?Y���f��AZ���Z}������`�H��p4��4��8����O�wnG�"����Y�������2n�9���!b���J������qyc�_W,���TY�����w�n���a����G�6o��v������c;��������u�	4GA}f�I�.��De��������<�>"q�4�w�P��K�Hx������-���wM�����
���?������{�/������������5�7�W��l�����1_��r}���~�u���&���*�uO��k�d��Ci��Qr�um���y�6�����<D���R�1�y#Y�����;������b:�{\H!+e�tQfA�(Pe�t�
���4���%����Mx�PX���x��n3��k�#s]�������Fw����nQ�O�&]]�?s1���%��Cs��$e8QE[��u����?e��y|^�^��bG���0��,�]E����+��`��N��c����i�
jJt{���D�.��|!�����2i��Iw��L��W�kU�y/��Bk����C�p�LE����\i��<x��-��59'Cd���*+��=������������Cot~@���������3���J���iYA���(0R{��Nol������������&@�Tp�x�(R�������[k��iEhhM��/��t!���BSz"����"zX��R���T�M�&9��l����|�I<1:��hE�7)���!]��������Df5�YVZ��'�
����Q, Z�hAp����s3]s;Z��
�V1W\�q0���K8�bJY���g��#��G�->������	}*�2��	+��iEZ�a�F������=�H�a��q�����?/��,?:������~�lR�
�w��"�y9�a-3,�c
�,�c.����:����j:m�M]t&�(�d���d��%@�z������%����(f���d�[
 .k1LiA��>��������'���LS�����lLB�TwK[aLJ��)��p��Ud[!��<��aOW��t�lM��������I����8�5]Q���"�	���%���o�=�H��D�����=-H�eq2S��5]��>��zTW��5�NM���-�� �K���i���JR��HSz��
K�4������CZ��f/����H��W[�r�
�1V;
��!�bH���v�Zl�.�8wk`nG+Re�fT��XQ%�������,�������8�H��$�4�����i�$�j��0j�|�H��>�5��_�sZ^����FO����S�/�REu��4�0wdr��������~n'|�i�������0}�H��3U���TD`��Yx|��YvQ��C�"	�+���#3�m0���JD>�m�������U�iy-rx�pLv�`e_���S���Y��S�W ��js������p�gEZ���r0����8#�Z�L�m�R�Hd�y����{VW�����/�S������#�/v��wAxM�4�}#���1�AJk��jl@A�����@b{lhG���P��6���esu��s��jN�h��7"h���k�@��t/H���Xjo�f��k��N�Zn�l;&��~�����X[~K�mb�1�V�2��LUc�Uf���D����5��lOX�(nS��}������qL�	�M����i$�:���._�DS����lU'���/K^����7:c:t�Bw����hz�I���j�|�6�yOs�~AC;n/���$�������-H���X���+��Rx!M;8W��k���4����o��X��(6���l����H���n�T�}^Hs+ZtL�C{Kj\�V�e]����0�[Q����q��s?/��*\�8��~���>��/��&��pA���I��z'����p_�Uf$U���Z&�?��� �4{�$B@-Xz��otD�co�Y)�|'�`��Tf$r#4�����������?���Z���eJ\�9�B9��	��;����}���6V���V�X2,;K�P#���x7�T�?_	��� i�z���vQ��\G.u�,���>�5ms����<��>��/^
w�{���9�$���S��4 ��{���79����n;�V���� S��5�T$����`y�0��c,��q��� ��@-�n�	V��@fw�PP���P��mLk�A��4��U�aC����U$�NC��$���B(7������@�h�J�_�W�c�����&�{���H��~d�Z�c!������g��:��.�k@�my�w��1WP!-�~��$�����J����\��3���{_�����B�8�-3��s��O�Y����"���R��=+�X�l�QB*�mD���[dw|a���B��-����2b�o��L��%��L�\k)���O�	��)�|��O���MG����>/����BI���
j�\|����oM��Q��F�Y�A6'g�M��!���z������E����
.0�H��n��>i��������D��-�lB*?3���Fc���f���
�}���?��������`���������e�s+���Ls��t%�i�y;>���^�/(M,P^�5��%�����ZOq����r�����#&p�kU��q���^��r����k�={y������
B�����1o+�{[��:��j�����$<g����������M7�)dw��2��������;���H���7������*������c���JD�o��:�u���V���F�)�B����.��/�)���z����0Q&�~R!��r�I��}%M��`��F%Zo_���5��`��	����B��*dy����1G����2@� �@|�X���bLc)�V���|X����i/@u��l�v �e�J�R?�����x�C }�o#��r,�������L�}��-��'#S�R[�m�����cE�����$uj����DS�����}�=������o���r@���`
Cm���7!xzn[�j��B�������\sfQJ!b��g�h��(-T����RB��J-���d�-�jW��e^������4���G��P+����b����(��L�y���x	�%^��du<lb(F����]��2�Y���C
�H6r�4�������i�;AAz���H���x��%�:��i�|$nx��k�%��?�~�hM%�JOZ�MM��MJ��,B�E=�LAM�1�W�7m�7,@D�\��v�H���U�&;�A��O@TC����u�[��������K6$������#����Q~e3i���9@���Q������V!�R6k�,j87]���Q�e���M����JA��I�j[B5n�BR�B�� A����w�D�:g�_��4P�w�E";N!?�`,��7��OL�3�JE���j�onBi��-�isO����HA�D��K���G-�a?�~���6��1�[�9p�PX��(
��%@q�������1[��7}Y���O���b
y��Y>�5��Q�L���x������JT�Xo�V;��>[E���|Y�v\�f�nA�|���/�eso��f�����h�D�������n$t��WQ���{����(���qk��Ks�!y��
h'�Z�����h��U<������$��,�U������<����q���d��}.��h!�b�i�O1�-�����4�}�54�d��q��Y�_���v��S�[�����1�S5�+���D��-v�u��t��eEcX�
Y��yD�[�/`�����������V^H�}���X���;��� ���-�K��<�{e5%�--W�0|Q�mb~!}�#�#q�W����@_�dS����S�*�17�X���Z$�;�i���n���d����V`���eJ3�����E���Aj��JD�Q}��[����H��������}bI>V���Z���x��-1a,_8����p	�Q�����C29O|7}�u�*�Z�O��yR�q�1��D�d`�o��Vc���0.3\ ��k��'G@m��*���{�U��L��d��C�+e��-�7e&"���-��=`��L �JA�85�����&
~���(>lA��cp���83f
�n/HL��"r�����t%��1���>��I.��A�����n�c������G�c@���$G����u�����}���oCkL?���)���J��>n�;rd�dN�2�vk�������@k�<�c���{L7y�������������X#����g�S��������qExmNGA<62`����F��h6\�;�V0e������<�7%6�ntW����?��fG���*�7��8��GB���a�X��9���fX���U�S_v7���~��8N�\.;����R+��hK
��M�����6��t;���}7=|���X����__�������x�;D��?�r�<��G=~��%������k�5�C��G=>���A8W1���c:~�������z|����W1?��c>�������o�?������|���������� ��W=~���R�����/D=~�Y{)��^��:���������)�!��[�[��������qI���CL�k����w-�=�����SL��R���������][B�����4qb:^����?���\����}�]�I��.�b�.{�n��u��u�s�n��A������X��X��}���t}���.�t�j�=kw���g�{�v,��N��}9q��/���1?��c>���1�n`����z|���!���
��q�F���^�O��1?��c>����n��}?�@��q|���!��w��������|�,��@��q�����uN�7�!v�77�����������
����!v�77���������?��b�sC��on���
��_�;��b�sC��on���
����!v|vC��������7$�g�nH��b�!~�������o����7$����s��Z�{._�;�
��G�?�x-��_��pC�x�;�
����}.�S�������.Q	�9��C�����\��k
�a��7��Y�Y.�,��#}�p[����@�~-h�D&gH<��$@7� �V��(�d�$_�\��� ���R���;�5�{���99����xI��9���YJ~'�%�Gu�a�l�����S]&�/M�6j�n��	8���E%���~��
��73�vB��}MU�@�"��T�:�5/��\�F=|�`}��������B���>��E�!����I����hg�!��M��R��I�cd+�����rA��	�����2C'D�,��y$���<�����!��	�W*��]{�,H5�D��n�^�L�|C�]�E��D[0��2��:�?�g�_���Q_����rjlW���%���,i����3��L$��v�u���/&�Am4����&K3�����)
��/��4�.�y�bI$0�h.*�_���l��bU$2�ui�[���}q����l���?1!��6��J�Z�N@�n#�g63C��_�=����
K��GkpCog&�h��J���*���"c��-�vQ'�����]�n���BOwn��L�[
��S:�]�~g�ei
n�uc6���K��������i?\F��D7��L@�����U���(��*t`����wm��%����������d�����{C{�
]��cds�]�VF��z�q�����na�q��Oa���eA�I�6��q�^���+�.#q[r�	�iB���~���'�����V$`G=e����Ld5���.r�
�U����Y����c^����j�9u�(����T�����HV�o�l�{[E"E���r��O��=�D�n����@6��bP�P���/X�n[����$��n��N�]�ch�-l��dvJ-��_ae���[�q�D�&*)�&�:^�@�h��t��z�2��	Q5Jv
��2Iv��5���m�.�f�{x��9c��`�$��L%��]P�7]fa8��EF3G&Pos��Jos����������_L@!/�g!��6���=2����|m���r��~l� �Q���0��d'W��:��dk���L[��p��7G�-�i�j[H�!����kF�#k�~�q��p.����D��O�s�@R�v"�g�����x�	���'��0K���E�wGp`i�������frqa�(���@���-g�N���|\pl��P�4[�W�@Uv���w�\K�Y��_G���U��+FQ,q�oD����Pn���
�T��,��w���|��U�+���_X����d�-����0�w)��w]��B$EV3z`�1���cL����l��y� l��"�T	�������)y��|'�I�����e������C�o����!�1���H/>3�%�J���0��f�Q�_��A1��H����^n�F�}i{?Q`zg��(`+�w�6QB��f�m���LmI������r�����
��m�����<�G����<�E��J�-���A}��V��P��u����|���\���.}�������P��:��Bl�M[�\f��tB�*�| e�^�����!h�OI�y?B�,D��
X46�|R?��Xh}>�0��u�`0j�)��~�D��B�OF���B�i���"^ly��q�����5i��n#�����{8���{��@O����`h���!o���S8��W��u#�pd�\<)@������
x'�[l��(Y&�~T��v3��&��C����_3I}(>V�:��[k_����JEh�H�����av��~�-"5�R��j'p��Y�
A(���1>��]>���C[�r�]��u�3	j����[lB�b��i)�A=l��V�"Z���;� 9r�b%����"ff�85K�`+'hbg��>1��	�X���F���~\�3��?x�A[`��<����l�T�f}�$��F�!(����
$/�33���Z��@?���v6�x�S8rs����.0ICj!:+f��s#�%�|����`n^�� �9���u
��gAx�����tjA�sz�)#}#7d��b�P���G6�������� ����:vF��]KQ�]?��Z�D��%��-�Y+m&[�=�!v~��x_����T_S����#����]�z�	a��w�N[�9�^2N�x7���,��t��#����2n�(@{�R��	
b����@�An�N*���u�,���
�\�	�������,Ww����&�5�F�Y�l�@U���X�P;����;�8�z��m��93��`5H���V;N������kAl���ID�jY�H�������`*�c�9X��}�~F�u�w�j�j��E%}�9���_Vu&��e�J����QI-�gE��}�
����� ����D�����6�P�fZ��(���O[
��Nd&I�
�j�SW"���~�'z�g��\��`Zo�g�����Dd>*���<�$����� :E)J��Z��-����:8�lQ��$�����R
��oDK�P��:Vt����v�����t�_-H��/�q����aJ����<��	�l��^����������UY���*a�X?���\��O�,�PR�#����,������{�����?~������J:���*q�*�{�wj&}A	���52�����{���>���
��`0���[����k�h�E���A��	���4�wK����M����%3np&]/w�a�?3�R��
*F}A�5?�/�(1#6��&]^����~�5@���"���}[P����7t��U2�-��B�'�i��T�
��j�?3R�L#�d�$�[�vU2��l����a��l�cBY��hz�l�'��r����qI��I
�U�h�?S���:Qf�g���owy�p�h�' "{�����C�0� T��#����Q������Y��W�����V�n�kp;���	���'%��t�������um����_Xlpp�J��
|Vt���q��,�BE*?v`����
��$����������g�5=���5�&O/D_����m^f>�������b���6$��	9_�$?�9����"X����w~�]��ns��:��d����
j����*�����`4=���.H=�����Y.s�W��T�>bFx��:U�����Q��5>Xe���7~����-���]@�f��p���=1��u���\;u�j�7
t��?)(U�L����
1��|�-����>@��47���S4%�(@���'����fR��f�C�M�VN`�]����'_�T�u~�@�[����[��Y~��[r,�-���}������
nD�M��~���	�>�\�����b/����K>�v����	%�>�,I��SR;�H5��}g�;��z��uo�3���L���"4�
�v6�SX�����ud�F%���n�w�������~/��>S�����l+�g�\��DW�wn�2U���j���f�21tO�/F������\2N��Xt�sO�F�?��#��w\H��q!�q���F��Z�uw���%�Z���
M����36���H��E�l����[s����@�}����:�C5x��`&����%��-�K�����=��/��m�q<�S$�<M���H*����a����N�$��#E����|�.��LD�w�G�NQU"�]�7�R"��f�X�P������8��>^���
8^���+3+@�+q]��H���x��\�,Ddv5��.��JE���^��V2�heF[!:Z�u�6Z�����e/��p�9�\^��������,����%�����e\��MH��������4���A��B<^�����ASOd<����U�-��c�U�����f$��������T#�5����d5�W����;P�(d2�7�M��~u�#w�)@D�64���mP��PcgM�O�y)��wFYf�Y���U b4o
��n!�������iS��^W�Jr�E,���"���#xL6w������<������^\�Bx����g��
|7q�����9u1��)x�*��������������y��@D�njP
�cM1<2G�H����m&��x��~"�7�/lie���q+�p�~�J+�q+�t����~p,��b��w�rA����E�t��x/H�M��l�~%�LI6�@u2��(9���.�i1����LDn��m
8Z7���G�c��%D�r"��{��v�=G�[P��[}��i��Ji.~��+Y�����{1�rA���w��I��L���d��E!�]�����o�;mtc���<��W��(�r��9#�rA���W�~4�����Q%"3
��~U�M�-&x����``�4��}�������
5����)��	���<���?�3y�J�|&E�h�N�Z4�(E��\�Z��J�O�!� ��h�@�K_���t�$�����e��-:��<w�����$���&���_P���X�Z���2��YB���0a*�����i�l!1��_�BA���Qt��f�
����������L4.��~:�����3���c�����������B����w�p�N_Y|A�k�#]���pQ��W���Y@�h��Z�;ZK7w�[�Jdc��/�����G"R����n6�a�����#E~c��A#J�K�=�0�����@>���Z�76����}n�����i�|������?��M(�8C���%>�����l��G�_����)��@~��-�z�5�L�0\�Z����M,\}�����FD�U.k��c�1�B������u#�����,�0���E���w��X��0�Ii���">e������h$@�)�q���zK���tcW<��i���^�i���^����{�������a���2�^��I2B8��H��-��N�#Q`���s�f@�a�$��=�aw��&p�C�%phx�9����P�	��_-L�_�9���K%|E*w'������[�uv`3Q�� ]��L���ga
<|f�c����6%�V��npy�
*/m�	��{n�@�I������h?4����Eg��������E��M�$���)�~�4�-]���~�����Rw'����v�c,�t���G��x'��Z���&c�3��~*�2����;T�`(�����x���3���P.���FA��������Y���Y��.d���D�D���o�*�96�������@~s���]f"�����[��!�l��
�(��pq�!��?��1�[�����r�/�-��2^+k����J��Y1F_����7�?*SB�z��W�	H#�M�O�=G�h��
���P:F��Y����
���/4�+��s���O`�\�_����<_km�@J�@�9�:
��L6�����x�*���Dd����1	4�G>h��Q�b����n3�`.+��f�`;��zl��YPhT��)�	��iQ�VQ^��Y���EW��5������q��wg�����,k������.;
���������[�<x�D���2!��m�MA��#~>m�0V�����3�"�{i�T���3})�����JlhA�m��) =�p�w��|�N�����oDK�%�'��7fA�$NH���!U��t��	h��������cck�J#>����Lt���:G��Vp]��V�������M�hK�3@����NJ�mDo�q�d`bC'R�o�CdxW�F��r�F&D?N8���s����7�3k(�KX��d�MHLw/Ox�'xe ������V��� p�f$��<O��6_lO���2��r����A�@q
v��B���'�\����
6�����vx�	�&�d�����l������0�~VT���m���*s
-�2]�S�=�'��3f����D�Tt�|f��^����h���B����?b��|����D	��@�'%�~5#�o�����G;�@%�z���_�E��#?+z���Vbtq!���"m�&��>��3d>cFx]Ilp��t&�sl��Z�j	Q���3s��	�I���}' bg140p����ch�'���|�;�>���	�x��A�f	*��%������Pcr�b��t�j��g�][&,(*�������������F3����@�f������u� ����:���&$@�����>��z"�v���)'�=��=f�>������Y)@D��l���ORI����Ve����k��s1����j'u`�&��k��u���'�`��{�+���K*�� %����k�
���|������r��M�7k{88�DZ#�z���:�|������`�'=w�Y�H?T@]1�9^��H�cV�m�[�����%��*��n�&��3��8��E3x��2�z0[���B_���L��t2n��E}?�LQ��U����N���&d�Y��������,�T�*�P�.������f}��T<
����q����=����b�@d���q� ������=��\v.$��1��^�@[����~��Z�>3�a�>��ak�3������=�|�@'�9Bh��\����k��h�G$y�`�
Y����F��C���)s`;.����
|����,
&�AC>E�Z��~�1B��m0){!}/�C<����m�q�V];�� ��gE1n�7p��q��B|�����z�������^pu:k�I��-s� ��3�A��v��VR~*���V����wT�?�<x�S0xpC�"#C������^�a�@�4z0rK�|������H�y��OR+�2�
Z�n�
���>��e�s��x^7�:Tp�[o�;����s�me��.���6�]��������&��!�F(�8������P���v��f��g��v�����Y;eH�2���^����z--�Se�J�����eO�� s*�r��=�"��������d�NB�
-���� �.H��^�$w%+Y��T
YF��q���3Sp?���$��Ei?8��v>u&"#s��i�fp�����%&l�?3c���0���
r���~V�����e�K��De��E��k�_3*�vr+A���3�$�pOeB����|t��W���M	��S\��=���������*y�`U�N3�8��6���av�������Z�pB���s9����~��|�T�_^�:��M��f�4�����[���6&K����.,Y�.��+�!Q58����K�.��-U���*���1�.H"'�Tt!���u /�+8����|bE������(qDL����Xs�!���g��L�~yl���3b>p�:��.]lp��b����y_+����&��N�5l"
w"�������J���Cb����G��)s���������avT�a�/�2F�J��+���<�dby0�P@����F#�U7z�dQKz�;���j�.��m��D�����!��6�����6�
w��NN��q�>�U4���%|D�,��#���0?��+��m+S��J�|�3�6W_f+��HP��4����h�c�NB��ZH�W�#��=v%e����eD�u�YQ���1���-�������!��X�}E��K���+���0O���B������
�sBN/�sJlR
�X8�t���������7d��"�`����h�/wu2�*y�l%��t2�����\���l��!D����=��	�|�������]���8��=��m+{�;5�)i�w�&�5�6��������ppsV��X����E��#��<,�Z��������%�3�a��6�a�"'�V}����fS�B��������N(�S�z-�tf�9���-7��y�9�G��Iz�����:@{�9��]p�!L)DeS:��^.|����%S�l�0����I6���J7!�%!��[�
D��r3��5����n�t��DG��Q��B�%�{�*��3���nI;�|N�tFR'��i����T��k\fI'���T��'���<IX�	@����A�k��'�,,Z�n����.hC	�lI��/[�iM�}�]�m-�'a$�sOf�ch��k�W���]S��D�6�����}��|B�YO2�}�7e8�dH][/k4Y���.:�FP�@�"�������"A�#(!���e�#�$k�����8�"��������F��������3b�$@�����DF���PFbe�+��G��J~�/Q����OIF���mA��X�����b�������	i]�U�i$�B�2;������m��2~
�L��}�>��P���c%W�U��'�K���&W���$k>'*�g!>~Rp�����-�' ?��|��s[��B8���WBY�|V��2A�������A�&�R	��o�&�FP�+���4|��NrC,��X���g"���;��I3��I��&��V���XI���GO46���������<����]Y��2p���L8tb�����-���N$>����&��H,��e�c��Nh������FN�UFN���^w[�\w�$��r�QR�O:w�1f#'���q�g!����6��YVw%6n����q��{Z�Eh����?��A��;McO
���
8U��r���g[���(��&��B!~f@_d�2U{�)����X��d]J�YX� �U�2aF�)�oKo�1p��(��s5k��wDz�k]&G>��w�3R��57�����? ��f$�e�,�����g��8D�5q��2�8���3c�x�H"u�����Lo�ch�'Y
$��
�J��l?n]��z����^-�He��.M�no�]�K=i%[�|����B�,$���!�����!����y��^�� ��)����U/��
g�`��
J1���E"���������-��1�� ��G����n��G�i@��P��
r��&�l=�
�~ugn���#S���U��~�;z�y�g��I&h��7s��������G�����h�$	>��t�WB����C&5�Fs��xwS�BlX���\`/3DLTL�1�.{3��}�i�~�F�n�S��P��N���CO�G�z�<�fB���h�rmK���LX��v�u]������r�|������jL����5������
.��#�r��}USD���$_��`��4��n$h;.K�>�u'�!6�Z���46���� 
��&,�I���/�kv9�>s��Dqy�M��n*���u�����m���	��NH=���\y�NJ;!���w���R��j�������H�@���������:�e�/��v��LZ���mE������Iq+�Q������>�jy:
�������qT��D�RWV�$�4Qu%-�Z���\o'm��]t4M�����	%�=�|2H��^_F�m���lP���Q�#4�SE�$R@��d+���	�����Y!-���$����O�����gE	`����K������,�~u���g��USD0!EN3D>C$�M�`���mb��_XL6)G��v��w[P�����0�m��b�H����g��}�9"�"�����/M��O8�J�6��ILi�8j��T��"� �f��J_����2`X�f���"�4A����	"m
���N���}��H��8	��8w;c�	"c6A$��Y������'�D���&����+��!-�p���z������6k1Y����+{�g��y�./.�>y<������x��#�8�|\r���*���l��!���U:������>~�y���q���{�y����Q~;���q/?�[�y<�o�Y~;>���Sl������qIq�8E?���������������5������M|j����O-���h�S���i��������Y������vr�?�����nG�����5���C���q�o���������D=������aGD�������
�������?�����?��������������)qt�%��~�*�[�'�����"��`S�_Q��w3v����T�oL,�W>k��� ��7��J�� (6����@��i!��;[VF~��%&�y�r�->�?���G�-�~1�v���ZjA������q�G�������(4�r�6���������|�%J�����������!������?�t]:?�H�B.�o�*J�b�I7����$gbf���]v!��J����c���dWs6���S$Y��OJ��� X���z���<�7�J^���
C�����lL�,j�������4K6H�k&[V;�aR��}��=���s�"N�f5��\(�j�e;�$]�=e�If�&��9SVS��7|���z���]y~��m3*����^�'D���}�F�/C[�������)����S4�	P���#�89�8��>�;>�N��#������_V-��(���l��!�>�f=�M�Ln����m������hv[��z�c�n�3)�F��t��n�I@D��F)A)Z:��*c��|�L�
���V	F*�x [��������u�Xt]K����e���y��
�kH����2�m���0Ik��h>��\�|����X��UrY��CMH�NY�5���'	%�`�=�nK�!��t��0P�C_�t1��I������_*b�|Jf��L�;��G�f:��aF|�W��e�I�4!�G��E�"?����	�f�PSW9n��6����V��v���Dky��j�V,�+���!M�� �#��L�S+����d�3�-�,@Sq�����'=qo�j��;X,�wo qsz������w8�q�,:Tr]��a&r�f}�wF�aFw?������6��T�������"3��q�_���Y�-��~����.��I�6 ��BPs�B��[�`�i�\d�:����#���6%�D]�U���3!)+��~���}�����t_$m�/���{h��M���@��^���
M�3Q���Us{3�����tN?�mP�3��Ie��]����>��Iz�;������"4��[�Gh!#��f$�Mc.)a7�G3����es)���O?���,���mS�����m(�-�=�� �����]�6/o>$����9WJ"R���{�>��+M�p�4�[w��	��'S�O��6���t�>����>y���&��5-f3�
��LJ�\4Q�s���.�hg"IRs��:H7:�X�/X�m���	m ����������`����^�L�����+j��=�Zp'&�)�v�_5��;������������S<�7�-��-_�,������\�{��1{"���!���};�W�I�����Q��9!�@\��m���i���J�����:���H�%d�Y_�U\��dm1�#6Lm�=s��&90���2}0��Dd���CZ������� ��`��>,0�	7`��*�����}��f�e�&=����t���
N�i�B���9c���3#v�3��+��c�,G1#��{��`��%mtB���^����en���P�J�Q���x,�b�������gt?��5�����)�[~8�H���V���`H�u!�f�ss�5#0~+
�����'=O��%d���-��Ng
�
N���M*Z(	� >y��&������Ow�10,]�=,��)�H#ZK�d���ij���=��1�h1t1��1o��:J`��Es��5�B6��e��5�z��JD��F�|��*��8��fT��%<����;1���dj��H��%LD���T������#$�Zp2a�����$���q�2Z��l�Zn��o����7u���*SL�� Ui""���m���J�V']����!�p�s�4e������Lv]2�#I��������7����tl�mj����&U"vZ����~W�"�b�=�Er��R�\�.�5S��in��M[�F'$��k@������"��	��\��=Ja�4!�Y���6�*���oC6�;�����w�*O,����6��b���
O2�E��O�1�Bn�������k�_KNG�����L�_�39&�_�EY���G�_1a�
����9Iv7�z�		�e�_f���i���}v�����6����~j�m��{�}G;���")��fu��3������"<a���@�u��N�������yL�+��8������-&���gW:�������
3+��R��Y��w�����n7��O+���u]C�E��v6���@fgA���S������]��Z���at��"VGS�Jn��R>���t�L�����d5u��R��)�vk���t����YC������'i�<Q��d�v���������_�G�>+��A0��V>v�`���VL�V�����F����$�[��c�x��sh�4����p�DD��P���3fX*	���� ��������G�q1���!%[ =���a���L�������*���]E{��z�CZ�-��(�����=������l�e���)�Dd����xc�[����r����X�&$��<^��{rS�L xG������J�y���*�qUX���0K��|��i?IDe:��d����g�:n� ���T�����BS��U5��T�6�����y�I�LD��4]�`�8G����S��T�����F�x��R�|�����A)i�h<a��B�?"k�N��@�|�o
p�n��[Z���f����9M�����G����n�BC�9��]7��I�ij��[�b����,�>���5yn�������OI��N�,H��vn��1/����T�H�]02�0X�U	d�������BA�HsV>��b����?3�z���$�*�c{q��,-~����^6���#��&��u�m�����P"�	���`O���\��/�' "���W�
���	����������~}Aw�.��^�F����e%��v3�j�X)bM������T�&^�E{<	�-
J����4/�������
PG�+i0W�ga��8z#i�LDf�A�q}�����f��3P	2����V�+��ZK(k,ra�*���(�(���&�D�=�joA���>X��w3���u�k`��C�z���v�o�(2| ��$������M�Ohb�tA��@�~}o1�����^��d���L6����,r#�c8� y	�^� ��w��+�a���H�f,�0�g�?����&0����=���{W"�q��-�����������H���v����^}�4���L<�����nW��;�������������G�pkC�DE.���j�6ap��LD~}^�7q�+��@����n+ZB(*��bJ��,Xs� �N��/��Q&�vl����s���7��*a���>y��:n	����P�LD����<�a�S��Z���,������T��������������s�[<Ys�$��d�8L���>������Pdxb�� tF,�5��6�����T�LNH��,��6��-H��t�o!{g������E����`�'�g!"#��v��������	��G��P�O��?��\Y�fL�,����bR}
�����q&��&(��Y�Y���w�)�-~�9W�GLs��~��w�94b;#y��ur��x������1>.���h����b�O����)�@�K�P�=?�ZP��[q��'�%�NC�}�FTgQ��	p]����e��'�"/hl*�UZE�����K��oKr$��M���l�����ZG����z�U�,���+<[\7��492��z����Z�)���>��yt�1!���G��(���@�d��+Q�o���l6$�
�	8������}�h�|Fr��j<�\.i)76���������5�k!����o�2�0�c�G,H����
��I'
,k�ZQ�u7�o�gF���G{��� }�y�T��,'j�-���I���Z������Sh���e4��f��C�6�WO���c�S�F������4;f�����D
A�*���6�B8$���������tX��d\-m���N����}wrG�$#��}�DBFLCd�S�L&E���a��#��$�g`�A�������x�$U$:�J�@����Z��T+��^.�\�����3�I,Q���T��Ha�0�J}��a_HX����L�*n}c�����$�l"�a#���=�e�C��Z���i&���Z�]��Ly^{��huc@��V������h�,#������v�'���W��� ��"�ZQb��~0Ih��� QX�	�������}-�*��!'"#�Z����?�}���@3[HY��\�����xdA�4�k U�`gtsFN�ot���{OMdK��5/?���/Hk��4d��Hm��Y �'��^:�]����-����^�kFx������*�D����>����+?�n!��
,]�y{!\���
���nx	���)�ZH���e�F���Q����m�~�Cy
�����2}�G���F��MG
:5��gl������9�7��� ��Y7eV�8!������S�
���7�C�|mJ�5�1�4�6Fd�7�����SJ��t�Q��mI3)�D�*���*���p�����PS;���7�R���f$2�C�v(����P��o%+']g��gQV��
0��OO�{��q�N�k!I���������zB�uc���w[�Z�a6g��!�n'�e��I��
���8���C{wp�LO�mYQ-��_������v�����,�J�t.3U���9��;l4���,]e�(F-�WD[=	)�@�s��e��=���aBt����6W��R��xsWL�Y�����
;~��d��fO����ds��w��s���g��^D:I���	�H�bA���r��'kT�C�p��	��;$�5���W1/D�}�f�Q2'��w�������.����J���������
���A���3�@�(
��
�)Hro��J{���������Ilo8���Y�8��wa�+�Z|���KC�����_��N�	Qk2����%vJ��6?���6��YR��a��\6Z�S�=��82��~V$��><�����q�I�+�eus�w}/(_�j����_CN���+�Tz�\�4#�D4���%�_��� ���A�ly.�*B�OH�}
oM��a���y�������YE�]6E�-L�����K�log&���~�=������C������~��L�����E��L���|R����pQ��y!-J���ga�6�%oFp� _�����)����H��q�����~RL�yB#��KGB[�d!��Bz�����e�p1�Z:7���J��T��,{K���Sy@t{-�����(���+PA��P����V�>��8{�Z�8���I��V��hs�[X����x@�j-H����c���L��/^��T
�����Y_+J��u��mj:���`[���Q�(����6<��6��4��7���;�-�v0T��.��i�gR�ncg�
B�RW���t�D/~�<#�ok����<���JRi�������t���
��W59�I�
�)�h��������F]�o��D6l^�U�t��5@�w��N��GTC�!6�����?��G����&�������%�r������a�IFp�Q^�(rw���
�K��~�[!.��@�%�~9u1���s�tQV�n�J&�����������z���]#t�'%U����y�bn<��B�>�����q~JFH��)��^��s��hs������q���Z�	`�;�iO���U��N�YL{m�b\pr���.(����6>�*7�0��c�yHO[�H�+�A��A�ZPXT���Y��1UA
���\>�������F�[�y���l�)qkF����h�a����^(����V�������7��^�JL���<mK�!�^ j���'��aV�t�$�-���
���X�>���/��������9�dfk��pb!���
Kn&����	�����9��rA��F�w�H��\������#�C�0����)�L�mz�9G�6���/H���2|V?WA�$��S�%9[�dk��$����>����n5���a���g)0#��5���<����^'{#;�*}����y�l��o��+(U�N'���*or��w|V_-y/�Sd���S�i������3������j>����*f���1�|M�~���Y��:"����w{��������p�
�+'��u��G���Md�^�q%R"���5U*�h$�#y=/j��M�����H'��A�h
�#=�LD~�EUs�C��T#��}X:�i=���Z��q�D��k6�����@�@r�����B�g��@��PB;���_}[C5������T��j��*QZ�#
L������m"��a�	���E���<���b��������o��2�p����I��K�;������-�&
�����$y��&�[)���J4����~�����JR]>��nK6,�IC
$��;@R���1i"���z�H��:.�hZ�8�:���(����������94_t1!�
DG�o���a
vA���:�;�c�}�?A�Ci5��^
��se����5��\kT��B0p|�|���E���w	�
����{�K`U� ������Y���6�h����%�;�����i�;�`QN�M������t�/0�f;
�!�h|D>!a�fg����I�|�0�_�f�����3A4
���*�x��*�`�)<3�$��`+U��T��*�=v�aR+q�V���v����	i�p�c���e�����|�JD�6����7�����T��� #h������%��������jyA����f-�jl.@����w�{�0
.|���)L:�R��JS���_��q��G?�3/j'����	�k!I>_8l��y;;4ilg\�!��{�d��S��[�a<��Mk�5�J�P^&�6O��_���o&��*�=W�@��}gO�M�>D���Q35M �z��J��M����r��g`�a�ON�v��)�J6���I;����~��v��_��3�F�|+�{+�1��/e�i�~�$6[
����$�-K{�}p��H�����opWq�6H��W�r�������m��I�e��v��M�XI;���7k��0��TY�jT'gQ�T�G��^��-��0��6�L�n�
�Q��?!(3}��yp$�#U�gEa���.�����*�1=Ft��W9NH�����(K�����z����d��$6� lK���7B���	-8��sg���yA��@��vKH�����.(FbR��8�a��-��Gyw��uu��\=���{���g&z�E�<��!n~DkL����G�G��+	�6���fD�L���P�#A����O����G�6��I�-��'?���H��c���J����U��������O��������v|�Xj�:���/�?�#���e�
f�������y����J4._{�y
~��UeK�3����w��2)�)kR^_*^T�oMU��*YVdi�kNd;�O;rJ�o�3"�)sF�g�3"�O��eDn��������_�����}�?����?�������@:��
Q�I�xG>1?�r����}��8�|�:�q���v�����/��%�Oc|����-P�f$Yy/���bF��gE4���u2M�s"��HU �r@��c���e]f���O���U�T�n�V�����YQX2'@:�o��
���PX�y0I4��;��Y_q'���Un��b"���N�����{iQ\_��o���l��)����?��Kf"��=Z�w�H���i:g$��]�xVS?�/L�o���"�j����	�T�
��uW]A�/�QA7���h�*�C�	e���E��3-���G���1%����f$U"����r�5�Q��)�F��iT���i�KW��+�g~�4y��b�^��\
��#7e$C���,uE[VRd(��	�g]�|�H�M���)���9l����>�B�]��l�-�@�,���b-Z1�@�`����� �����T=�bH+YWQ�E����	%`v�k4����P���}i\2��	�Y8#����H;z#�Tl���"��������Q����Hc��M�5���$6s�����tFR+�Z�qL��������
�����V�)�!X����:!������[G�M���\�M�u	J1��t��V��n7����"�l QU[�R}q_]�#�fh�
l�t��7<��BT�_�d�������uF�Wv���i}��Iyf
�Z��'����q�U�$d����y�T�-[�a��$��/6uB�[�����.cfuB�^��VU�
��F@�x%}7��U�M�]���H<�S�W!�A�H���r�;���-lj�u����ka�	i���e�G��R�� "��L�cN��W���D2����UKp�1sP+�20����Vb���E�laQ5��k}���Tg-�_S'Nb-t|]�
��T���"�5M���	����4�e��&�d����������1�5��gk:#�sa���G������:��:H$:��A7��i"��0c
�>�jKmdl�t��f#h-�RG[2�����U�aLg}�T������	�����i�z���@[0MP=����JF��3�L�O������y��	YVe�����eLKl+@��6}���}2�����S�3����=p+R�o����h+�I��'I��;L�-����~���S���|Y���OE����f
��U�-BT����3	������3S��mUvZ�>=�z"����v�~g;��B����iIT�C�<�M�'���j�l��~D[0QT������9p&��������� �DD��#}eO��;v/O���>����?}
�����x)��b"���b=HB~�e��N=�bX(V��s�W{�JE_�]��I��1	����
R`� ������f�	�:��
���5R�T������P?-�4�k���Av��b��R&�J��Na����|�l�����3�n~����zU�b.�����]P��b"�)`!�v������l���u�4���dca���K��N�/*����J���:&d�;t�b��������i"�U��'���U�j^�L��� }��|��Id���S��0c+rp?���T,�F��"w�n���S�E�����}�7��KV����Ci^������p�3<��H��[��	iEX����0��0"�*�>S��I[~��L�m�*p~	��Vn}��oVr6=#��xJ��4������l�?O�GM
_��~@������S��������	<i._�nK���s��*m.��m���_$�z���Q���A�Hf[�&��|�Af��Jn���:6���������ei��}�=<�pA���j�@�(��L,���$_�=��t������o�?Qh������D�o������#���}���I�,�9�u��/�sM����������V������b�� ��F�~r����e�5+���+z>���y>O#��	������p1%�=���X����|H�/3��a�
�6&��me�T����N�h���Q&���eA�i�a�Y_����BTl��hb�$[��	�l�^���J��'���45���,f;��+1<��v���.�+lB�����T��O�Vd��/�
�Y4�1?�j��z��jH�[Q�;U�-�)���,��=aG����q��W�����JP�~�~���R?� a�8�����-�i	���$��Y*��ds��]
�d��"�T Yl'�I��"����~�3���Sn>���~R��>����@v7#��	Y>�����z[�&h������&D��5�����E�[����
����.�%C./5G���u�c�r>�$�����g���m�����h����^�Do|��4!�9l�Zz�5�����Y�,��G�����V?\o}�UYE�_~�B���/�����h�q���=:�,K��5�G�	\�E������� ��m�W,�_�����`��c�Z��Xz�0������5!&�=��
��\��O���]����ox8�`U�������cV�p�^_[�
$9
�$z��4~t���$���d<L��W��������]��bo���Aq9��H���|��stQ�B6�S��'~s�j�����~�l4�V2�=���)�� �$]��	 `�@���5#�O��_�������d���+����w�����_��l���DDw�����O*IE�J'Ya/F�B�`��OE(���j[L2������f��7��w>��������S�7{�@��"'o�f�H@[���5������O���"������R�@'�^���0���X�����H@���A*������	���dD}�V&��0���[�F�<C�Z�~�J9	����-��Y�%�jB�����`C��V����|X'�*@3N_Y��rb:UA�Q��]�.� )F��o
��P�~����J4��^��_)��[=���j��M,��$�}�����4��'��?�^������\)�k�d�\�����c 9���DB�	x���uC�Y�	�<l�{jiP�w&�9��7hu7��	���{#���������|Lr���$>���T�m���$���������@<=6p��h1�� }�n�5�@�6[}yF�	�	-�!��$��`�e���~%6�Z�&���=�a�G*@D�jIM�Q����j{��z8q� ���B�=�����[���Fh���6q��	�L���~�O2yn�m��� z��LR����'�������)T�Y�w�h���_]�o@��l��9��z��!1�
;��D�������P28�Qi��^��� ����Rl����1Y>��{�,:�.��oME�}�)M�:�$�I���M�-���.���|��p����hs������������H��)��P�� W)�+'���l�zkE����Z�(x&"{�H�'{;��
���:?�O�Lc{��fF"���qBd���PF�k�^nP���7#y�{����������:�L���9���p&Y�dS��Xw���������Z���+�L����	�mn9����Y�C����L������V�V��_�X�*��� �������_�B�a �����t����"�X@�����xYn�ZW)�����3;n�X��������EJo�EZI��L�c�����9&s����W�[������dhm6��-;p%����X�Z*��8�L���3=�n�i�������Kbsn����IM����cO�~>#m\Wx�����#�����c�����$m��I�
���_�,�xw<�0�Q}*h��\���2�s
�
���������Y�2]0�d/\�
�	�\��=����z���������"G�M(�	��`��c��N��$���*c���O���Hn�t�D"�^���=���4��Ix3a��$��������)r����U���,��b8�V�Y��O��vWw$/<���^��X��v��L�]yB�X����MND��#h�c��\��)�xc�;��]w�
~$ry�����o�u����� Y��a��e��W�[�.����BLG-7��za�����nx��>_jW&*��G�63���j�t�>��V\���2Q�gd�>c��w�7n����eA�s{X��Y���?�����^1�o�Z���*�;W���fK7��>�M�n��{�����|�z��������'d���p�����N8����v�TN'4� ��t��O�ug���	}���N��z���'��	�t���	*����c>a�5	9����&!��t��Ox�z�sO'��&!����k>��U
9�p����'\O�h�����rb:��A1o91��m�����(�!������!�����\����������'���hO=�=��!L�g���9��\�����(&�3��,m~�o��}��[�I����
r�>{�x����S����������W��h|�I#�S��U#�R��������m�*ir~��,e���r*�$�>�v��4j/��8�3����m�~"��~�v�����=����v��:j_�����v��������{��"�q,g��N���F�H�1�c9����]H�3��\�����k9����H�6���nMM�9i������;��_c�skx�W���������|;��Kc��h��/��������3v�7o��uf��o��������y2v�7G���������1�ob���~?��8��x�1q<����������s�nL�}D�1q���������s������tF{������r:#�-��Igd�%�1���(.�mz�6?���7��|��mM&�
���L��|�.�����l�;Y �e�e������D6�3�	X�.��i��m����OX�k*H��j)�{ =n�c��H3�|er1����B����[�t����b&��QD�f�Kn�g^���7�y��&�H2��EY���F]&�YJ���[��iD��7.�y�*J���������~����pH0�[��h�>�"��%�-]�/Y�mt��o��1y}8�oB>���LB�LT@��P
9E�\�R�����VNi#�L�yh"�F*hh�]�?|i�-H�i�y��Ws�C��$�Y��`C��j������28�\�d����8����D[0��2��:�?�g�_���Q_����rj�M���%���h��[�+��T�d�[M�?��dA0
jsu��3dmF�nj������l��Q��b9��2���[�Na;i-VE"�X���h��9Y�����RK$Dw^@Y�v%P�[#��v��-�~{�����sK�h)H����3�u��g%Z�O�u'����? [ ��N�YBZ-7�b���z��p,k����V��k2��Oa�3���7�M�?Tp]J�L��9,Q�Y�6��e�
Mq��zP+y�dw���d�O�
5�x���{�v�)
d�����w&����Fv��
��2P���H6G�ket�s�����B��r�����s�RO
�����^|����2��e��&��_�L���~�x T������Lto�{ ��L�Nv��1*���r���!�&w���H��f4$P'���(	H��<`�t��o��[>��D
�E���'���,d��v�����gEQ�[���n[����$��t��B��%D[0ma;���������[�q�D�&*)�\���������@�yh����ECv�5��$�1�i:�x�����Y�pG��{H�@�N������.���~�a8��EFj8���Uos�z15�}[�N�3��xt&Z���Z��hg>�w:��l�M�>��`����Lg�.�{T1x'��5���;������g[��VMg�o~0Y�gE���V������[�uM&���P���X\"������~ )0��N�=�_�<���~����e8��"��#����qA��_�g3��#[�|
+y3�o��:���
��s@����!38���s�v�Ce�����:��.P���^1�rX��_��'Y3���$���;�v���|{�	r"x��gV���z��a1�wRf|K�}��a�K�����^)�ARd�Q��TC}�8�tX�^L���\�>+�N�`��L�{[�R�w�Z�w��g[Y��_���LX:>��6=�}���a�h��q��e�����}����v~�Q�_��A1��H����^n�F�}i{?Q`zg���`+�w�6QB��� N��Di���$����r��&S0|0�y�%�3O��W7�Y���R�C��e��;��8�
��3��|A���x��T���O��\t?]�*�^'
�y����eV}K'�V��/$����:
�)i4�G���h�X�f�"���6���Z���+�d�?��h����n�&
~2D�$Z���q�)����^�z��\S���$Glg�Y��p�7r�CKm<=�_�*��)����y��O�D��^�w�����Qs������*�e�P|o�Y7�d���QM8�`�~��vlAh����$����t�d�o�}q����,6�2��G{o���AC(�"5�R��h'p��Y�
A(���1>��]>���V%�����2����I(P{���<_'�b��d�OK��a�HF��������9���+w��13��	"_���4�����_��t,�@v�r�m?���h����-��lZ��U6�m�B[}q�Du�g
Bg����k�����|�H�v0��������N���e����N$
���������i�@��Dw�����������SX>�[E��~�S�a��/H��
�~�(�����D��hd���;����~m���%aBcn�dU��d����1�w&[���*wXQ��� lM����Y��� ��AnI�uL��o���K���vE��&��s��:�g�[��%�$�w3@�:�"�H7�8��9��%����-���R3���l�|�q��].~&@]=���b�2�kB>%�7�9��ru��]�h�\�l����V	T��������~�TD
�K=m���v�3��`5H�xD�[�8�RP,Hf�����O����,�,���NLVjQ�S��l
0�����,�g�g4���T�T+�-*����zs���ya%PgF�
P6�d�����|V4N��(@>]U��K�8�����<�"k#;4z��N3�L:��'����Mf�����&�1�D�����H�#�zf_Wm��6���5U+�����yS����{LD�������
yQt"��`BtB����E'�d�\�j�~� Z�����qb�A�> [ mw/��J�������������alF�r��(�x[�����6#�1���;���*K�� U%,�����J�f��T��I�9�Yt=}����/���^��%����t���_�x,T|��S7�3J����F����������~������/H����e���woX�E�.�m�6���X=A���I1`��	����d�m.�����7L�gFZ�b�QA��/��T{����+�����d�������������*����@��%_�pC�>��r������OD��������S��T�S�fs��/H�5����d�����+~��'�,����.�^3[�	�{�u�4�Z��e�� �������ga
�3@'�l��6���M��}���/V���
`�E���P���0pf����`����`��������O��V}V�o���'��v�����		pOJ�]t�*��.}M~���R$�a����*!t6�Y��q���G	���Ed�]V.h+-��V2L�+����yj������O�c��"/��'o������.��5�U�
�:m��s$$$��b�>z��j��f�O9�7Nv�0X���2�s:����I�����13I��V��5mHT�M�/:�^��)����3ton�4�9�H�nh�:a��:�(;K���c_{��X>��F�+����&����u�=�>�c:���������5�v��@]��?P��l�d���m��b�A�8B�z\	������7���`Pz���oN�]�e���5
�	oI(T�L^�So*����a�H5���&���JP��w�(�M	3�����L�Q�I��fs��}K���6�n�SY�������xQ�������Y}�'��z^Qq&�N>1{6����/X��Z����<0��������
7�%w������[P���iI�h/	�("�pv�7_x��lL�^=��E3�4u����,,�{a������YA���*����U����o����D����s1jQYg����
�Df��<er��5�b�f���]����7.B[{P�k��k��y��C���
���C����7�����/���k�lT3�.����s���"��T��m}EX^���VY�����#�������8K�x�����������?W�����D�����D��
L�y<ll=��2��]���jN��`��BB#^�#�Mp��^�`�b>�B�<^����U%� ��o�*!S>�L�]�	�����>����M����4^YY��s-^Y�������9�pe!SfW����PD+a��x�D�heE%�V�K�q�V"�3�b�S�bo�N7�����/���%o�1j�nC {7�+�<{��)����y����1Wl�db�b&�V4�4�D��j��]F_c��e�����w+�`��B���E���[QL���Z�$^F"=v���A&�x+*��
�����LS�`h�g��zI6DP0���\c��r��2�QWe�g`��9�L����u���9�
Mp��
F{��(I�����gG�W5f����:�t�N$4�u�E�2xE<���2K��������t�&.h<��b6���sx��,[l���������Xq��X��`�:�T����9<e�D�x��D�4?�$��J�OI���[�Yv,������+^���\���7������yx|�.<38�;�!��\<L!��ba�w&D�������C�h�3�.E���.��gu�osE��L�x�9���8v����3��d!/5�h��R�Z~���h�#
���v�.w`�(��}�:��6������������������������2�k�K�@}��	y,VX����X'�����K���������n�O�[g$����>���z�s;���tN3���p!�=���A]K�t������Fb�(�,+���o_S���$�o(��X�adN����TGmhBl�
��� ����A���
��A���zI�	6��s�����^�!��"U�B�;C��11+I�B��6uv��P����?/_����j��u���^v���lv�������k�]���se�H�]���j�qWfH��d���t�6j�/�Z1b���0��!�.��f�{��lW�Ku�Mt~�����.��"����-�fS����	T��M�����O@R�'�/k��y#�����P���f#��,$��bN��8Qpq*PS��5M,��`�><�1f���P��������06D����������p��������I��f�f�=��	��fi�O����6-a�[3��:0�����'|�|CV�g���~HSC#�~Y�������0���\�|��(=�u���4�}}�����#{ym`���!��5#a���E;�����?�6��w�W���p��v�-������i��(��O�s�pL�A����vd��������y-�;����S��\5����,V`Cy�Y������������d-|Dl�'��������3�(g ,2�!7�%W`I��_2�����Xr���J��Y!t&��i��9��/G�e���Cgl,�3!���^��(}z���{�i�:f�~vr�D2V�M���*�yt����Z�@��K�cb�L|30Vd��#�+��3��W���:G~���@���
.��
�?������3���S�
1?��TbErh�,������	1/Q�A6��~���`�w�%�E7��*�m�`���a�������<
��S�do�
�F���';S��+|�o���sS�_��a��S�����$��W�0�4����L;���3�1!]�X�_��c.�Z��<q�����P[��$�g?$���XfeA����Y�G��s�r�r���/�U4��X%�g���nP>�MO����E##�Vo��F;�6�l)jod�l�2* �h���L,�6��z\p7� ���������R�ZF���~@��72���"m�$�V(�c\��!���N��Piq��VddR����$� '$#��:�pt~V�f2tcI�������u�P���J(3���*���)��lV��>�*���V2b�/U!�[FTO��]-7��/L��2r�!��MmP?meB�{����I�I.,���\����tN8����c�j^W����V��%Q;R�����<7��F���Cm�	�_Umt��y��&&����:� �R��Y�l�[5���L��6�i�On3��=���J�A{���K�F�b�Bd�H�3?������WT@0�e��%�y���|~aB�#���k����|s��1wWm4��hL1�+�^~��
�'�XF�����i7[��)|������ gY0���&��7�q�~��:O�eH>��r�������t��=&c���B���,��_���&���p�`+�6h;N.�$�R��\�5��	������Td��<#��6�	��:���4��������j�����,7^�m������T���{�2tv�	���e�(j��MPq&

7�?�M#�����fO��{�E����r<��04�S��F{q����s6�����I�����L�������{�`�����&��Ay*�+C "c�}{�95�#������n]��n,����������	CYq�/3��I��xARJ��N#��Kg`�\�T�dn#��C���:_��P����,���C���?�v��v�2
�.I}v�����]p�(3+@��}:@�Nl���>�:�P�v�c�L���]*���5�c)�H��d� �X����A������5�vZ] %�a���	��-UUJ��������W}�,��_YT���koTK� k���/b�������v:x����G��-��8D
���\u�E�oL����`�=���4-1!��u����0l:�F�L���pT���c�����n]�K������.fy��T��������Vu�����2�!�����lm�$�?��;T���xsC_�}��Ne��]V��z���qfQ��}��2�����V�IzN��������e���*�?C����d��gh���f
g�����u)�����;$!���^��H�x�r*y��FJ�"���j����<5��H�hg�{�h���_2	r���aM}�M�\��y���a:�u�|v����N�O�O7mUY&9d&R@���2�/�������?���o��c�
i8 �,��������-�*���#G;�2y�t}[��-��|k�6m"�|vV����~���E<H�3��i���Z�3	sL��%�4�Q��r��7��H����<��GyfK	!��y��/�z�3v�Y�������1���o�c-S�Y2�U�$�i
A�HAY�}$C�	<x
�Z�3����(����=h�#������z�*�������},�=
�e�p,�$W�y@j���b��Q���
���!O�>�_�Ze����J�w�@)�Qh��6q7�$�	����m��>�-����+�����x���������t����^�����r��_�gw�a��8�Rv������L�	�u�'�m��|Y�2Y``�Z+�z�/O�1��I���
)~�uh�q��B^=Gngp��+�C3"#���Z��&"x�g-���.<�W�#����.��p��[y����KW�����F�c0�W�(��Org �[Wm�X�"Z�oE%Y����:��5D�"�;�4+@bR�8�����/p'�U�x�u���DfD��U�3��Tt&.��-h�L*Q��p�%M<5��"�����o3x�D��.k�ue����������+CC|��b�)����)���4>�����>;*l<5�����/>����l��;��tm��|k��BF��x���y}v(����h���H:'���`��E�CD2�:�Pf�u8����	�}�iI�Q���
s�v����o}z��;��Kw\���A�$�u��4O-"��cd0���|�@]f����	GJ%�tN'g�M��� �i���'����� �����#}�$������ ���"�|�������P*=$�������6����I���~�f��A���	f�|������,I������K��_�9z��ErrN��%�U��U�:C:bxqU����>���p��z���DDF��7�a�q���y��2C�8�����:��}<s����J��������,lz��HF������UL1:������AT�{��T���	���j���)��52����T>(T���?�4�a��!���u�g:��'�.T�9���������� �����	��t��<\<�"h_c�|z�C_�������f�������C��/7������&���Q]�@��f���P3�jW��(Wh��x�D�]�)f�.�
�O�A���~A���s<C��}Z�����
1%��S�&�>�Z^T���K#����j�<�,5�7+O�y� �:_�y?����L�9�SP�ev����$�|j��v���#
��Y
�9��f��H����,���,��P�'��+�f���H�'��9��>�P�T_zO Q'�6_��V�����M��P�|���d���.�)�mo�I8<f�d��������meB^�>�Nm�f�$����a>�����Vn�O����k�a�
�]f�Y���ya(��
�u2s��P3j(���2{���0�I?��,��-2�2_�u�}F�
��E�3uh,�ye��'�����s��P�j��E�a���������/���/��@�N�l3"�#���^��,+�n�6gMA�5��8��@�t	'+2�����E���C�D1T�Q��'��s�r���e��(0����A`*�S���4,:�����@E�I�E?@����/���(PUR��8�Q��n��2W�l,,���5���=9�����_���Bo������y(D3�p@'���5'Kj]~Y�7�&�A���&2l�ce����q�����-�����6;o���p��D�\��2�SdH5�RD|Q	Z1u�����|
p�Aa����C��&�e��� P��f��6�����=ir
�]X�F��*
71�M3��#�	0�[c/y.6Y��qXZ���YIHSS����U�+���M���z�g���i�'}LK�	�(i���9a��������$��=-5�i�'��:��
��Y�'����$a�Kr����_������C�����_b�t�����I��:_ ��OVY]<��g#��Jl�M7X��G��>H����iD���sP��Cs��Q�;��J�N�S	�i��fT�:���KO��7���P(�����i����S�H>�0!��CDz����fae� sf(���������zG��"B���}9suL�U������D�����oASg�0�+u��s;�e��D>y�&E0�:r�F����>��/(����j�S�������_>;C0���b����>*��:�m�)�'����U�i��|�k��7"������W�
LY�H�/����tXl��#o���;���!fBt�7�$���3�����������D�����r���������\�B'��Y���x�W�VO�%���������\P}u@��fF�`��GsmNJ���/�R-���dIb�� �!����g
a�y����)�a�������fRa��SV�DO��
��3�Y��U8��mc!����hH��g��g�*�s]�����uv�?��i���[���uv�pSD��d��}���$g���!�l��p��6M%����Y�4�V~�_���9_�Kz��i�	&������w�gI��T?k��%�`Z�s$�U�3�^<�U���{R��!�c%��#I�4_`vy%��%��{`�MT���B5��V�&�����eE���{�|��|��FO�qV�i^�}V���N
�!�=V��E�b����F����g�g]I����A���:�"{E_#
�)���>��Mr,�t`_��"��\l�t����������h��y��^�6L��SM���.����6�6��PTm�M*����<��)����K+��t����������$I��!mi�r��8N��Y��A���B�,j�)1��=a�nn�=����8�W���y�X��jcub�NC?[��f`�#�m�����-���j����o&��a���
�I!�����������
��V�:*��f�p��hV_��dt�"c�N3/Q��1`I����X�{��`qa���A>���FGH%g��:�w���|BT)k�9$7�c�U��-�_L�m0��&�g��2�����]��@�rL����d���+�+_!r��^#]9]17��W��8��M�
�����N�Bd9o��-G���7���E��������o��K����w}���@��������S�v�q�������w��w�<>���~�V������U|r���\F����RF�YV�g)�k���W�����5i��z@��y���/rB�����>�3�������������r����_��e����7��Em����?������}�������o�s���s��.�ZF�0
��rCY���tt�w4V�!�mW�~62el���K4�e	2��0����cy��-r�����+�4J�����_�'��A�_��p�����b=���F��o�����%��[B���\��	��$zB^�R��)�)c��N�+��
������UBD>��Ym�:�R���p����0���&�e��J�C�$r�������Sl}k��6|�<�62U���� ����3?;�@��3=W��\�S �Q�d�����=����&�Y�r|V����rA�3����"��=x���E���O��P>Uyr$���������,��&���t�t���!��F+�r �a;E]�=��Ej��)gU���_e�UVk`��	���o@<���$������������6G��������p��B�,�z��6|����g}��)`�v%�S�13k�.Y��UY�[��c�B�M��SOy��l�5.W���b+v�����g�}gC���C9xl���$K�g������	`��
��h�h��zg[��������K&B6�@{ k�^_��������S��$���
��h7>*�
��<���mh���������)��Jlc�Eno�iG�YJ&�V_jE�g�`"���(�H�L��n��������QL�.��c�V4��i�O�_-V.j�"�j�^U/�p�'5���"~�3��'��;�H�lD��D�)?����	����PSw�&���wa���y;�D���<��v-�o����n��:��L��|�d������hh�{9Y�?����,\t�m�l������7�:g������[�75�	��8��\��i2�2�F3���~�4����aQ��H�Hd2�"�@�^dA%��L����>���oybyq��'w���<��A�qW��!:�� ��PM����h�!�x]����wLBPV�������WhJ�$�\�m�e!E��{<UV�, ���D��kc��i�$RP�^D�����*����thP@����dX��������V�$|Ml��|mi��q?<��S1�Z�#�\���z !�h�c.�5���7��{c���_Ceq</=!�y8KlE�U ��!�$��E;~����b��W���p��R�e����v`K<�a���)c�L$����X��)���n������|�,cB�V47!4�(�s����7�?���H��k��2�H��j�����>������
���)f�0R��!G��s��V	F}����YvE���7��Pb�wu&��;\��y���c� S�1���X�o!&k���t74������1�����c0d�"��=_����~oE�)!A���)k��9�������6�����2���-V�/'����hKJ����n�E�XH��-c�&Em��#RL9xn����0E�:�����f`3�
M��B^�r"�R����P6��Y3P�5tL��UVe�&=����&����
f�#�i�B�2]c�������}{����uct�#V4ASO��:K@�F��Z�n�mi��1)s�����V��[���������+8��3����5#	���aD��*]P�!�����yo�^+�A����(�<��	=O��h8= *>|�4:k>�59�yO"j*	�<p�c��F����9�?x�\2�	�4������(��|������'u��-�.P�(����
�f����I���j����S�2e{oi��%~�56����X��'�b���o&�km
<�)��������T^o�����L(��S�� ���Tz���f����/�
��69Q]Je;��=��*-d��&���$��/���~A���k����LX���Je�%�����$OM��]�Z�<��jq��Q@�2phn����ArU�r`�R�L�n�5S��el����]��?Jv���>Q�V4�������M����ks���_���������������i9F�b�L�g+f�����:��W�s��xN��?������a���W2�"��|sm!�_�97g�Y|{ ����'��E�� ������&�����X��v">�g�{��m#{����t�z^�u�����3����Mo�9Ml@jc3�^i`�y<����&0��������-�Q]�d�y����|vL3^��]i��F�_��% ��0������G�}u��;�L���OM���e^C����7��������;��h]nC}JM��G���	�XNT�2������s�h�i�i#Yz�9���n7������%��$k�7�dIM��*k'^$�3�����v��\HPuN��/N��f�\���0c�~�b����t]�a�LP:XT9�?�6I�V&�=r>�=�����F�pQu�J�gd�H��	�y4��aY���F��$�[5�������l3_��
	)�����������3��Fs"q����v������fOhH;�AA�iC ,�c�A/�G�V4�LG�0-�
IX���L�F�$��V�����Z�4�N��}�-���|���mXO�*	d����Z@�;��p�����C�?G9+-��9�x~F��x%"��x.� Sn����qM�|-�����BS���5��i���oq �Q�	$S��4����{����(^2]M�5���(it�u�5�sX������MC^��f�p�'��k����'��g�oh��M���yU/��D�s��W��r�8o�^�"���q�
��`:L�C87$�Xs0j"�<�O��&�m���SV"r�H�}�u
�DeC4�s�m���3��P0����!��@�N�}����/$$��X��B����Ec��@�	fc!�W�2���@p�6���Y�����y��J\~8��}4|q"9I14��7�����0E>S&3!
o�"4������)�����������MzA�DZ��GK���+�j9Y)�)Q��-Zqg�jO��������O$�5'z�aEo�'W��8�VIE_'���8z����d�l6L�ks.l�����0����Nh�'wh[P�X�����h���?�?� h��~G�A���4@LhC����<�M`s`��C���Hd���Q��7���@�Y��s�F�M��h���E�[vA`�7:?����0\H��0���n4��h~�7%�6K-'�aS��0�v������)J�h�g#��$��4�p<�'�G�����[w����G%����N�=}|�"n����������	���	�����6�Fu;�1�������E���N�w�w	z""r���y��L>���X������G���L���c����gE(*���b�*��,�s��	��:9,_|��H���q*M��Oc|S���f4T��)�G����:���H_s�D=:���k�Df�c��-����M�r���$����(��!�=q5��!�=�>�|����'��	���M�b5�����T������.���#3�������\���Zq�QS�I��p�7����n����`��x��{0�����)�(gI�����J�H�7a N�o�����LY�xmQeqV}�W��a�^���88�l��D:����k�����:|���p���Q)��&63Cg�3!aFg�$61���1!#�����k
���B�:�&�5��MW�B�:,([K'�=����������U����B��k"��	���acBL�e��u��XY��"�%Y��/�H�a�K7��=?V$��r-�l������V�R�=�wd����"y�;���G:�h��c��l��8�
�]'�O�� ��K�K=���H�d��N2��(��F�<iqcB��@�o9�8��be��q��<Z�z0�
AhI����s����v���T�psK���}����"zcEY�|���e2�?����X����_Ec��/�x$ph2W�%����2;5�C���($v�Nh��g�"3�H'�)�����SU��	������s(�wx|<������yl�*�XJ���e����	@��q*�GQY.�U��>�[�9;��9�	_z��
��]�,C�X��L)cr$L>��D2c�1�h�e�l�y!g�KEMI�C��Kd����7���[w�!+�eH^@_����7&�m|�����������K�.����C���F.�x����|\��J��tX�H�T=51p��C9��'v��w����k��u������I�����5��9�
G�x$����T�7����k�*��x�������D8���{G<��>?1&�5Z��8�������a������@���=\�d9h�~82��"@�D�1������Id�>�r��M���	��d� #���]����BJ2��6�"���-!�v� ��OMP�
pV.�,(N������U��%��y���AO��
�W>h�B�
��+]����5�XgC���??IZ�J`�,>��#H�
$�{#I>�u{?V���{���\�8?C?�.;�����C�����#	=����&9����X���(���q��������r���/����=�Oxi����PQX�7F�V����8�����?��:%�{#A7��2��L�<3������:M�������ij�T�����?_eES��c��
���%����8K���g^V�K�(����:�:s!nK���F������l���"�-nzh�w�Y���c������	@z�����~�����D!�v���\��3K�Kf����
��!]�E��FQ1j:�.���DQ�O���y`�g#��(�jZ-��D��/�Y������o�xG|5�c��aA	��Y�0�X2�+���:xG��	>;�0�Z�o�6�<8�?JE�e]m���F���W����u(+1s/{��$���"b��u��*&Q�"�d���f��|&�w�{%�-^Uf<E���3]��`,:+�:� {��Y�2����=�����\Il(���#Q�R[���e0���8�sr��[d��6wPj��Q>y�����64��R�'�Z|����1�)�x�jOB��%D���#vO����^�xt�^��n��1�E=V����1����r����XU����w	CQ����+�����)��u�����Wo���}�W�)���G�^�[�>��L�s9|� k�~��f�3)T�����s����P�0���������aqR�	��J;u��lL����c���N&��g7,���<��`��P���1�gcx���O��-ufh��9�G4B����a�r6�y�7����"�4�#/��� �eCQ��)��:��H�����v�@Pl��	�����CT��.h�y���[$�
'F^"�q�X7^������%l��P�~<�a"1�S�|�
p���������7|�8����W9����# ����g��@�������g�����|h�p�Y=�����g�o���%�������Q�~/������TSz��m
�{x��<�������>��J5A|���t^��#�`�
�.�����$�����3H����R>��=��zE�/m���^B�7�P��
����2���j������$9�J�����.��+�4��wH&���n��MWe0������w����9?4���#��8szH@^��{#SFw|z��rIW���?����D!�$W�os����/�t7�r�)XB/�$��\��A��0=U�;}�EyXM��+��������~�{�F�r���:��6.�
o��a
n<��F�>�����1�a_��h�)�k5�6�_;��1�>���p������64O���Mz�;�[&�����bT��8���&��3����fAp������GS�H�v�KIT���A���mvhA	��/y0��1UB��
`�3������{#���#���SH�r��4�����H���YK�v/�����Z���<���u]�E%���j�Z�q���L&���������DTB?nw�7�G��ag�c�a��P���$-Y��0���F{��c��BP�����6������
��eo��>PL�iw��HZ��ba�u]M&cz��������Om��9�?�6>��Q?w�d��-~��c�H���5�������u�co�6z��5�,\U�:���C�������3�inW���&�S�0"�P���Ld�1lP6��K?�}K�E_-x/�S����S��S�)���_+��*�w�����/v�64m v�x�
�tL'���)�4�)�w���
��J�
j�:�]���t����2P��"�V�E{�H(�Bf D����V��5����.��6�����}v$�N� �h<-��B��<������Vc���d��.z]��i-���^���+	L���#�Zmv��
"��#�iV[h���?
��idaqm�x��k�BE�;
@<�"
,V���]Q����fT�_��@�MQ6���Ki^D���	� ;h�u����P[Nh�u{v�l������@������L����2�/�C�w&����l,j���)�P����[u��IR
$��+����P;M���F}V;9�iC�Q�u���(�qg������9�:�bED��b�y	��D�%�����C��|���������s�)��vpF����3���5�	�g#G�Ox�����LD���h���Ve+"�*kl��j-�m"��Z��Mv3�Z���lA�6��bQ��*���"�-
pi��CmGB�����7D�ll6����U����~��%V6��3A6
{��*�x��2�d�*<3�$�����<8��@�"�pG�aa���J\C�v�P��U�/�Hz���n��[X���oi�ce2el�)����6|X���,9�w���za%(�K
��jB��t�
�G��F-�j�.@���}���0
.|�zsAN��z���Mv��|����z�_~3N�k��w��H����Wkg'�&����Tb���Lm�g�n���i'�VmL&b(O��3LO��_�����h`�7S�
6��E?��H��6'fE����j���D�5�����F��U@	hgx����	)�@%+[���iY=^=@����9��Gpo�G3[/c]c�������\q�1HZ��b���<��o�o	y��t�Ado����b��������g�"���so�����I�I�`DM�KU�
ZQ�,��P�,���OF��]d�[��n��k����<o�,�BR�u�����49�7T�gGn����'�����2x5��z��q1)�Vi�;�*���2��w���Z/g�_
�Mb�B�X��������Bh�i�+��j���J�����k�>����
y$V�zv�k�
%��o��ggi����hk�4��V���H2����`��1��v��|v�����6rr�g�-O�rY	�'�J�����W�R�I�5%��qi��")��bg��/���z����<8�o��^q�YI�g	�SB����}R��)���O�W�����:�w@�cO��2��|�C'�p�T�N!���_R�Yd�$���Aym�xR��1�?M��#�g#�l�k�j�6�Hv^3��ln������6����������(�����S��������yV����������3�qE}[�r��_��~-W�HW@NW�=_!������6�����;
�����
����V6�l���fG���M�����4�6���	fU��%p6�@Y�"��(+g}��L
��������P��s�5q�T\�:�cC`
�x�d��K�F�����Z��?+)*~G���U��Y�����e~����Y9	�p�
m��L��-ff����|����O��
�I��$��"vU�G�]������L�P��ne�R/o�1��|�|��x�y#�-���/���zS$rH��Jh/�b��	W��T���[���{��RM��[-2O\��g{5VY��v���~,�Mc%���#�����'I�U�D���Qq��gc.��
���=,;je���7��!���F\��$+�����/�Vta�HqZ5��k���Lyn���l?��.h�NS@z��fBJB������h���(@�+
�����i,���)���US�Q�d?4���)y����d���
�#1��K�efQhBU��hQ��B\T�)�u2��LYZJ���*�[��Zag��0�[�N\�&�z�����.D������,`4�+���:M�]���(����H��+��|�3����v�fFW48w E�(.��lL>��u�lJTD{�hJ1x�i&S���Pm���X���zZjS_����Hd���J��46uQ�yL=�����(��SR�nQ�����<5����s�E]��1J&�M��+���Am�����jB"Se��b_�dVT&�#��.�Y]PjVo�e��/
�G�����
���"U>�5>��S���)�/������������~Gr
�i��:�L�z���hZ�W�_�m���vfZ"��L�[vLc]�E|i%L��G~��9P��b~B2���F]t9U����w������/���y]-���dS48���c�7�N����VG��&�
T��':�������jS��G��#����6Y�Y�mjYQ�R��E�q�{f���j��I>+	2�E�t��q
T�����'�����F��`c��[���]������s���?P	�/�C��M:�>�d�� �1P��r���5�����3Z���Z{Q�����@}�"�n�����Y�=4��'�����e����V4�,r@�h���<;f!�;H��(4��ua��Ys\
��-LQ[�I��U�D�`���&@������]����|��Z��6/]��Zh�,�r���=P,b��@\��683$��u��O�8���������q@������4������x�/b�]�������G�����������y���p�`�5��o�Y7{��4���D�sa�_��tXqC�K�N�����g��	����eJ��n6��=��-�����V+���2s��Dd�l����������	��b;.��
�;�g������������>Y����]�
A=:�l��V�2'mAI���#(�d��Wm��uiou!�!�c:T��?�����R�=����s�u'~�
���r1�,t��������H{g��g��Zn�o�!9�]]7�Ho�c|H�������^H���G?����,�U���E���l<�
��K�e�l��7��T�vaZ0������I��<���l`�7���/q������w�������������en��k�i�JD��q�Y���dY�N�,���6�x����z���XU������}�D*�ZN���9*U��.���Y����P��_��]/dZ��Q������_<\����Bx�j:��0f���;�"��W���������P���
���y/�?VLb#oZ�M�����"_h��c_��\��I0�R� imq��s��'��,9�9��v����L���a2����\�����}�������r�(�
���2�l��,=�M0Tj�U)����G��S�}\��������h�������0��f�W>�X��H��O�/�<�l!����'�6#y��HDV���7�����������w�r ��^�5��Y���I�OKr��yc������n�Y30
�����.bG��:l&A�"#��&��]��������=��~�x0�a�_��M�6�@�� ��I=a�������!zLo��k+��n��]��b��i�4�g�nhY�Y_dx��'0���8��N��#��G���S�y+hn�������nm8*�<|�*&4`ER8T8�?0���P
��J���@�AE��F1�I�{�z[(��)��C�����B�M�$��Z��ZO�1r�<���I������x�O��������S��v�����v+��d���5�C�J���"1
62�}�W2e�I_0�ab��������5R��%�����-6��Y<��M�3opL�i�8��2��|��\=�z����:����Nwp�_g(������rb�<��
LD�v2C�n�sk�LW��lC��,_���L�qv����bE�+���g������]�;�>��������f��V�������������7Q��W7�Kd}�JD�����vSUF�p]Q�����!��N��:�g�(;�����-��?5.)�����F� 9�eyjBI�p�o��p���p�i�$��o��N=6]5�GE.���o�
>�Mx����hk�����N@�G�����'a!z@���J��t	��������+�a�������OD�F+��q�3�m$�O��S�B��^R+���������f����:���2�x����.�2��SqmZ��	$T�����g#�2���������lD:%G��R�5J�)T%�����V3��8�-z.Y8��IN%H���|�O_�8����������G�s�S�7�a�*}z[�Tv�ds����c�~%t�[�!��`[�������q��������3+*��M6m�������y�nL��$���#1{t\?;���\{)��z ��dX�E�isx�n���/�m�M��xf6��|G�e�����UK��d��3���^l�����������%��`��X��!9������G;��t'�6������M*�������l�t�
u�;�5�����g��,D�<diF��aKAJ������9Z�#
_��?��[�.����7v��>m!26�f��c�z=K
�#��A�i�O��V������fXX�!)���Q���wY>�X�Bu2Kf(�Q�L5+��G�j�zBm E@{bm�y���uL+*��W�fP�?Sy���|��1O]��
��G.r~��De���}!����,��s�����p�/=u���#�����uzMW��|�%|� ������3�Q*�<�!��a%�J�t�e��m�������;�����6>���
y+_��N���=,���|Aro=�	��i�r�3MI�,�=������qB(�]i��W�������m�Z|d�����6�P�}9�8�N�	x��H���U=�6C�>B@��4=]o���!������1�">*�D��A��H��K�nWr������<���>����i�Q���#:������c,������gW���-CY���C������7v�<�I`��R���]�m�������gG����P�F�^��wh":6�\Z'�E� O��
�EfL<Gz���2��/T�40�����-L�~�Q��b���-LH�YgU��:��f�����c�������Hn�}i,p���q�-��A����zRpd�d��a"��a�S6t^���|8]��F��������d ��.��q�nv���\���n�!��;d7"����Pk���cND���~����}�k���s��<b���
����6��NR]Y&��!
�_I�R]��vu�,��/P���
�v�~�|f���������+��0!6t���D��Go�H����������|��agy_�x���(��o���,df�$��J�W����zW ?����tU�{mW�8E5��;�������2��Z=}A�CS�P��uP���E��!U=�[S��X��1�����>�!��C2��$�ag�g&m�&�����kZkg�J���\
bB�����f���Ysn3+KWu�,�o���������q�����[��`��?1/��Q���#y�����9����b�f���N4[�S+���r^-��I����$C[��������i���_G8�z��I�(��D��X������3�W�	Oj��;���LK�Aax7�� H,�}�5$:���
��jkdR�(�S�&�N1b�y36��A�E�	c��+@�/vR{ �)��Ld�� KS>��bb(������tb�!���Flp�y��9e�q!��g���z�+��+6CE]v��8���)s9��s�!���z������[������������^�
�����-��s[�q� ��%k�q��[��E�5�������Z�$�0�:7Yuwq�0A���i{lL����\92�G�0�W�K���H����|I*�����9#0�V��}5����N�q����}A	�R,�40B��
��h,�
:�E%T@���]:�i��&"r������oQ�.�
y�H�c�]���k���E�����n�_maBt#������Rw&d\�����\�]����J�����/�.**����mx����i����x���~(�4����;#Tx����ZlD����&��<F�+�����;�O�\L�!|G��60gd|v���:��t0�'���Fo4��
1�h�
����*r������0W�M���r�_i��;��q��5��<9�.���A'y��UP����$R�9��w�q����s��3)���oF<�[���/
.���<N3;���q�l������o�_�����8�������l ���U�x������$q����&`���so����?�������������q�?C~�����sS�����sJ��������|���}�?�����>��[�s[�|�Z���#����7��]�<'/�?��|�Z��|�?���{�T���-Uj��<o|���W�S��k���)N�WH�W��k��>7���.��1�]����!�������-����ku��C���(�������M���b��8��!��{._��s��Z�g��z�si���AWj.�9�FC���-�ZZrMbP�;���5��\�syk.�Z��Z�Y����-k][��g��Jg�D2������ 3�����-���7C�����v1��������]�7c��n��v1�����b����~,o��m�����-~���w7��������f�o���Tn��������{�_������[n��~��}��8��.��h^�0�E���q.Z���s���^���e��\�-;��m��8]����hZ�,�E��cq.Z���s���V���e��\�+;��]��8��.��hV�(�E����>9v��P�_��u�B��<��P���
�{���Ca��<8��\��������|�������3�������'"8���A��,J._��s��Z~���c���9�A���tI����D��|3?Dd����$��M�,�{ePD���8Bg��#o�jIor�CJ�gA�<��D:����x����3	p�P9��;�.����N{��?�3�)H��G[wI�,��}A������j��p��G����\q���nd�[d���S�+)t|sh��e3.�5�_'�O���&E+��h���<�����
q���U�}�Q�C�2�����*�]0KD!6�#8Q�>�CN���P*~V0��~U*�u�<��,���tL+�6���o���k��tC�� �����"w��"H�=Sc��t� �%'����8�(_R6)��.z%]F�E�����)���l��=��v���{���o����5�Qn�XY���/�0�V��m�V��q��e�C�����^7�a�)9���� 7i6FwY�%Q��Jv��|��������f��s��Io!R��MrZ���iXS����U�'t
y`��9DF:f��,���c�qqWNS����R[��\�����yF�u��zU@q2����������E@c���.�jf/g����YS;��y�����Q��vv&����*��k��fE����t��GEiK�BOyho�r�}P�+����A���3��Bdtt��Q���6�O�@��>��/�m�E<�8���~c��A���p'� ��_�TWt��x�<�wE����+�2���.�r�q�S����/��f
C���Mr�l�k�|����zC{���EE9���>�	���H��A�[Wu�\����bax��y���LS{R�p�)_��2� ���v4���}V"%*����J�?����e�����^��r�9"�������K���~VE).�&�lM0������������y
'�h�"P_q��b������e�/z	N.�ZI������.6�3L>\�$�<p|��'�zd�J\�E��)7������c�����5Vj�,*4D�X-�y�.�$��h'7��LS��m%.c��y��z@9Hq4��t����2I|��g#��T�T�������$t��]{�z��+KG-���V)8��u8��������BZ�����Wu�y<��?+�O���E�|Z(5�P����w�g�G��e����S�i��N�(&e����"C����Q��|���T���P|�%/\ �3U����E%�t�Ji�0��,J:���Iq���3D�*^���WHY@Dm�)�J�� �(�![�U�{<�����?A�bm����,C3z�#R���������s��u2���~"�+I�F��vD2��P�O�'�s������7����cs�$W}��v��I(��LG�
�p��J:��<������G$�y9F�������R�V�QL�C���Or�f75���'��]��t*�,3�*�F4@��JJxa���B��j��:�s�a��K�����B� �������b����CH���t &2T�2��E/���
"^Z�G8pI�&���Y�>��D<���H���)�Z�
3�\�,@�V��`2�|%I��T��q���<���H���~7���W��	��D�F�H��;�z�	]��h�gE�/<��(�W�?A�Sx�����O�On�����������{L������)zE���K�@�:
��-�|si�J�,z���\��������j�~5)~	N��2M����������K��	)�-���+-�28
L�]�����l")�x�����[�@���Yy��L��-��@��)?�|s�Hq/�#N���0����79��F���@�������Q%���E���L�h�tP�0��:�Re26 v�g�g?��2�����.����	���M2������Y��j��@4�-^;�
D5u�H���Sf�����6#��������x<����+1���E�R]��3��uW}�|�W������������O��,�������=��2�]f�9��A�t9��H	:}�����/!��iSfd�384�"�G�r�W�v�0��d+K�j�	����m�|��Y�$�f���C���#i�dM]NQ:��V��'RV�[Efj_�:�D��@�R�4mCk�U&Wl��!)���W���6r���g��Y������r�1&�����X&�r��s�0����@Q=hM���p9����9�Xx����(���;u���\��2���X���P�����M��>0"�U��%81�0��6�0^� +{2(S�(�]%���q"c�e%���{�b�:��+@\FRs>q�����_���H��pcS��4*6r�A	���FdY�%����7�%k��
""�����,;@��/Wbt��8�p.^����2��������s��)��C7���IKC�$��B���38����G�i�/`���L[ta�c�W"r�b�bT^��Y��8�����~
����,8�
;_�mSDz;�"mh���I������ob���#i ''�"��Q0SG^e����8_m#�K}W2E0�����8��@A�k�#����v����,�-�S��yy�����������m6Y��~;5�
�x�5�eE�^Z���u��g2����f:�7Qs��Z���E�;��"|V$2��i�k
����2�ef�$�T0&Y������T�����a��O��x��	j�V2�z�m�N��f�?�p������@������7&0;�]y2���h�'�����2�3I���h��Z���/L�C�n�74��rj�E���j�7$�x��r�y���Xoy����
�\7�V��c`�|C����Y���`a�{R@�G���
>Pn���OES��)���)���PM9�Q���)s����P�W�������U��
���S{f�<m��&0�hF@	�����d%���
74W�`�����$��U��Qm�c�X���D~�!3�M��6T��4�
*�)\���4��f���.��Qm�����>���lM������)�$�FN���k���8��^4o�����[_�h����X~sg���Pm]�-�����������c_{��X>���O���c|������
��l���K6.���L��5�v��[[���c��&��'Yl 7akC���Uv�ppY��,���"~�h'f�j�}S�9�w�Y���	oI(T�8���T���;E3�>;��n�*AiN�a�|S4%m'0Sr��1��{#I��ln��oI��&cZ�}�v�+�����xQ����y�`��>�'�����0!w��{6��3��/X����% >�|���]E6��Y�S���;�}V�y
�]�{a;5���E$���f��/@���I�����h���|���B�PW	�i���	D��lH������Nu�:=����� [�v�@��	�=� �e�����
4|��|��=%Q����W3P�^����rc��+�����}V�>V���'��@���=D��.p�u�{���������j6��M��{G��]�d5G}.`����	,b��v��h��i��Iw���[Qq�.�����=�R_u�d�������e�v��sF�o��������7�*#{����������������D�c�����O��)���&�G�4�;���J��O3�m�CiB�r�x���B[���	�6`���++K@���++���R�2*���+�rD|����PD+a��x�D�heE%�V�c���B�p�\,{
V�mx����r��%��6�d���e�V�w�*�f�4�;Z��0��|vT��r����L��h3h���������~�[F�,y7n
,y��	�������=��������I��D>z�@gEi��$��J��������t&�)Z04��!PK�!@n�]����[n�Rf:�����$��
�^Uv�L)����^�����@�o*��:#Q�v%15���D�j���[���[���e��eed�����[�,�=0�78$��V$-p�l�����&��Y�����������X��i���b��������!Q$�#I���ZoA%�'�x����f���w.r���������(�����~q,�u{`��;!8�j�k5=�2��	X�
M���&�u�_IT�	��<�N@�X�2]4��%��X�d�5��0ZW�����c��D�r!x�y�'�v�=G��P�t���Tt�M�Jsq��?�)�6Yy�{Q�rC�1��8�����U���V��q�]~Q������[�����Y�7R�Kd�C���j����*!�1��.d���8�{��s����o�8W3}�% ���J�N"�vy�U��t�9%"/�bZ�_�����Jd��$�F�?�C��
'
��INu�d�����2d�7���=l{krT��+ir)Kwe��A��x�<t.<����$�����Pt��oH�����|����i�]��^3i7�������#�c�j�mE��'��Y�x|D[NdppY[��D")��X���9��4�]��
�����,^��m0WH�^%*���E:{_i|C��8�;��8y��"h�^�d��T�4!+��������Vw��Ha�������G �O�07s�o�`�(]�&��1ddsW�Hy�	���,d�w���n]�������%�P������PG,H
g�:�a�_��-(�8S���)�����h��n����t�L�\��6�ON]�/������#A�0ja�c�[�@��}��nx��iw�-	N�.��O�j�G�h.d�)h�;�xP���4���.��y�h��*�E|���
IW��H������f�A�-��^����x�uc�����!��ukS���[�������/Jo��yp�J���e����[W��'!����xw*I{���������8��[Qq������*�@���+
�"=���������������1�|AS�I�6��r���LY{r���t�me���	����-���lL���0htVT��:�T<�N+_B	�Gk�
 7]���s��	�;a����W,����4A�������h�C�V���E�Z�f�����t��$(��vz��.�X�-twS��#���(�#��^���,7H�D&�`�����'�(sQ�s��F��?�va�
f���<j���W�(dA("����z��xE�W���3q�E"2"
[}������k�7�yH�����6����2Ko�	)7���Mu@�!�5�\�FW������A�q�g����f��%��V����oC?��
�tbq	���]�oh����������(_��l��_���	���
�z��e����`���H�t���N��3F�h�LN�/kg��4?����Q�
�LF���r��l�kL�W���U4����)hj���������	|�	��Hd����������l!�<�P���|dCpbN���!����F0h�OA�#��Y��]u�<~V0?�N������2�����5��	~��a��xY���nH�T�n����m�.a����w������XBJ��FHE~S��J$�{X��������������i��G����4B��`"L����G�H�8}����#@�*������J���	��e�K�6�����z����I���)���J��\'���	h�4����!����
K�����.J�cD/��t5��l�B�,��zWs�&4�2'�lY�����/h`�
�2e�����dQ�]��@��a�����Co�'��+�/������W4:]��Z�g.,�^@�93�1r6�f���2�.��+�v^_O1_ �*]K}�q�q#H�����`n���g�cY�� �,~��_*�Xd��4n�N=+�{�[���������zq�1	+� ������j�����=\��3'��C�q����DL�	�w,_�%H�����[P������L��m�����H��:~�g���n���������'�y#����l?30%h��wJ~���B:�`�z���&��`w�>���1H����?@2��3F9��hW<n��0��w��k�<��D��9�9�H��j	Q�>����V2�+�V�����1h/����b"���Ro�y����.r9#T*�=��8*wB�Zb�`c���H�	���^��J7������CO�)/4*�3�c`P����D�V���^()�um�,�uh���9Kwt��}��x\0:>v���c�*����|��S �����p��L���>��K��3*0���
��9�'Ld���nUYW����p����-wFQ;����9���q��,��o��������j�������
���������=5k���2!f��o*`���0�8�v�����&����V����-�&ZU�K=��1��A������� ����7��e��F��zs;2��x
���A�D�t�zdz�[84�7#�����-�������N��?���/S�8�����b'��L�v����]����	}�=�a?��@��iu�L\^h��6�3,���)l8n�N��
�?�'3��)#"n R�`"�5	��(������s!���P<�����I&�:lz?�u�y��}�X#�(0�]g�}�	Q�H�
�= #��o��~!�vG�Y��Hr� ��!�~q��(1h
����Q~3*'=2Dp�F&4��N$��!��v-�kOU��I&c�Z&�Z��n��^a��b7x���+���������q���D��������*�����O/�:mk����++P0�i�E`�}�O+VR~*C2����t�E~�9x�[<Hd�`O���DF�`d��s8��'E"!�5iX�$EV����A G�&��!3T��
�TP�~G���<�{F	�0�n�
����"��Y~�0�*��;��Z���g��F�w-�K��a|/D(`o��#r(���Ac�s[���yAv�~��Q��;eH�2�9��C�iA��ky��*cU��b	`
<=v��|3�S���N�.��2!l��J<]�����7�47��u����y������d%��1�8��oq��������d�W��H"�c<���Sg��x�Y�7�35�p[�M��$������*�(bXT�
����~����9�C����c�!!����@QS��Q����3X	�.WO�/�[����_?�?x�H���+����|^Om��y`��R���gz�J~��u�C��G�tS|�	
��m?������B��s9���U��|b8���#���$2��D��7>n-�(&K��������[c�����lP7
z��g�]��+�Q�w=s����l*����'v�-mB���]��~}%J��i�O5�LHg�g�}����r������D���bs�������������m��9>�i�����UAY����C�%H�����x�o� �i��"�����D'��3�1���+W��Dno]o����Q����A<�+�1">u��L����yht�U���8U�L�)^YY�B�
�v�����-�)�5�-�������>"?��#���an��'��-o��^��y�g�\	|����#AU?3��������k4&�������x�����+�Qf*���#:���%p�]W�����;�O����!~�T�cE��8��>���.`��g����r������a?'���ON�M����
�{��b�#�x��-B��ZdL;s���'�7�*��l%N%�"�jR7a`.���FH!W��MUc�h�K+pg�!V� 5��]���Q���|���v��p3������4!�	��k-z���P g�������y�
G��� 3�P��z�	���X�<#�v�i�aEvfZ��X��]��(����=����=�P����*�tb�9�dQ2������%�k��I����
������^�[�6��7��J�������s� aKf�L��T)0�6
03/��mb��eI'diAJ�dI0qt���L+����������C��
Y��_E�tB�^XR���-���N�=�&��*M�A�����%K:�qjX�[�$����r����7��GO�y�hIo%��%}�%<�%�W8�%������z�lk��qf@�e��h�8m�R�����]�)���6�o����N�tB�Yw6���TL�tZhRi��F��ft��A��TS�w4��7R%yDPF6��eT�=OI��r�H����H��#����,Ev�E��2�H�P&c�P!���D�i9T2B(��c���Y5k]@�OIF
$<��O�$���
�����>�D$�u�T9��?�����IH�����%~J����w��3J�L(V2�q5^E=�^2VJ�\IDOI���T���D���L����)���'T��&+�X��	���/�J��y��L���}��x*���4QK%P�'�NM(EP��0i��;�b�b%5��D�w�j�Y3R�d����7K�y++���1z���,����u&;
���K�{b_;e6���*a�������/��2��d��O��X���^�*:!�R-��"'�Q"'!�v[��2H��t�I`�����'��)rr�s*����~^��"^�G������+Q��
�Nq��1��EhbIQ����)��AS_SCA�TP;G����A����<��l�b�L���Y������p2r'�V��d_J�y�
�A��je���S�i3��?���������V����>\���\�����v'���#7������	"?5#�p+���6����q��>�?Z/SA�\�t3�h�)���w*-'��\�#���T	���C�����{���pB�a�3���A�3r�5���C^�5�e=���[���1����������t���x��i�0/��%����Zq���X��\���V8#V�lP���_$`���*��=r�|�.��A��W����PL�
��3:���_�
��Y=y�e0h�<��K���vvf�x��rGw4o$u�?�
���e-��X�aM��R�s�5>��N^Y	>��q���X��s��F��h?�7�Ce� D3C7>�%��|���l�����.v�'���
��]h��=E�]�����:P?	���6G�;z�m3u��E�M9E���c�^h��	x���2S�;��2Z�t���i���������R�v���CsK�����
�r�����������`6s��G�;����@�����{�&b�?�v���kB����@|�����q���Q�n����x/M�qw�'���Ug3���	�����+/�Ii'����L�`/\������C�bs�����d(��e
����h�N����'��(kV����i-���n��V2����g�/}�jyX�����T�����x,ud�MrKUG���7R<%��������i�h?6
m�(:2�2����Qx���O����Q���~��D��#2�2'sD���B^f��$����o~� ������G��G����b�h?N��+��)/��1EBP�4CD3D&k��FV�������lR�1K�X,���BC�#����}�Dnn�����U��Hb�htn��K��)����j�1�1E�ec������"�� 2Y3Qp��q���2���f���"�4A��N/�'�<��/(����c�H$W^�	��$����g���&����*���g�gD&��#B�A;\^D�C&jh�D-�g�#,�5]�b����P�|��^���J�s�x}=�u���N��!�����.������u?�o\w����c��?�\�c�e?�\�c�%?�\�c��>�\�c��>�\�c���q�R����|9���4�q]b���$?�b�|8��^�O5J�����A�Z��.����s%^�tC��?����j������Sv�_�����������~X��io���������_�����~�\�t�Dky��1��k~�?�������_�����������o��������C�X�{32����`c-����K�&�����9��#���i �e��I�Nw%�c4��l��Y~��I"�&:^H;I��|�e�_����%3|�Q;w��?k�1���K���a�<����<�32���|��Ig-m;�(�q���]G}��-��o���vq��~DKt�T�����P2$�	��������������p���w�*Z�bO]s��Yr�����z��=�R��&f�	=�jNp+�Y��XV��{G�[�
����
�N {�h('������!R���Y������H�*@_�Ud ���,�vt2R�2���;�:�9i�q�M�4�k���r�.���|���d5=9�����o���Uo�uBp~�o�}�eFE�$��T�����-��"�Z��]���d:�H��\����7@}�^��>��}�D�L�v���u�g�m_D�`�&k@|����I��V�w�k0?����fb������	�Zk�U���cKgRd22r�|_��L�n���=�E7���8K*�L&�
��.!��������?�����.�������c�����
�h��g�P���`���7cn|�7spL����Q�����C��������
}s%�SU����;y�Vo��{��G��6�XF����5��3�����0�3��e���]>�����������Hiv�;M����}���w���6�c��-t���������+���6�Q&.��p~U�o�^�r�<?p$~���3B����T�hO��E���ix������:m�#�o:�oT������[o�QL��g�.���4Vjz���r������no"&�o�q��S�f�����l��]G�L�e���@��FK"�CYO����oie���-���S~��A�y�P�_
���$2#��\��]Nhq�����af��*$eE�z���f����+��
�f��OY������V��5�!�����
M�fF./ht/���eb���Rn��?Z��L�*�:��~�s������yc	�������}�<C}-d��kF�sY��H�!��@�1W����'���qI����uz�����-(��D�C�)�?�������(o�$��
�}��D�l<rq�����F��c������p��\����_�y����M����2�G����d� ���r�5������ ���p����u����T�m��U���
����G&���J���/d��u��e�Q�`�h�v�]�y����;1��I�K��N����������e�9�?��1�7�!s���z������]1����}�`���?�%!_���w ����$o��'~����u�����:t��fO
�3D?��S�/���L�@J�������dm�#6�a}G���	�f����;��L�D�!p�Z_������ WDgv����Pd�|�F�No�U ��43��(�.�M�u�����e�`�80M���Ltts��;����*E��u���#f�hGF�2��e��Fg�[i���1,�������/�4���a,��'��q�5;})
��~�����~�Sa�1
�*�����
ua�����kF`��|�%��G��t�YV��1{@�3B��#	u�|mMT������i�`".������[wu��AW^ "W�|�)"��|��r82�6�Q�}�B�������-M���o����9LD�����r���%F_/=���xo�L�����gL%���K���xw353���lj��`��&�����P�b����L���%39�I����r���^r��<�>��E��4�t���(SL��P�TI������T����I�&d`L��p8��G�2Ya��RU�C��7:�"�&q�P�����bjq����T��i?�~���]W�$���qd(����(�h�X�i������T�2��g@��'}�OE��	��p���Q
i���{�K����q&��x���<���xj���(ol��k{�H{�Hx� �{"���/�.���x��5����+��GY��_<cP��E"�/�3��~Em1
R�~����~8�n��$9���32p�)�g�$t��xG�=��c;)��q:�G����~��N�_O�
�$��7y��"#��	�
9��1��v1#�tl8�.Y�g����>��������1�W]�+=@�������
03�0�f2�3�����}4�fv"���nE����k��	��ag;;��,H���UQ6t�SZ�U�oF'-,bu"e��A�����lKh�3Y�%���jz�6�?��Io�'L�7�|�H�}h���X;�&��sT�7��c;���&�8hZ����4m�9��A�0���"v4�����*�}+A�`Q�Dz��l��V%���x���i@�I3[��n���A%�,B�y�c�@���!�2�$����BX�~���.���r�d���9f�v}�L��!���gQ4E����i����C)��1�
k�7�:�l�e<i����cV�G8�{��c���	�����g{����� �D������@xz��ZFg��oS���
8Tp��x��1�(f}�����?I�e:��d/���3q�P��s*�}._�Ph����P�*����]�p����5��kB~��H���-�j��A������q�\�'��JL�A)k�j����B^?"1�����=�|�o
2pH7���?�s��L�Q�?���Z�y�e��t�
H��@��/��F�45�wy!7����,�>��Ak����_���V���H�}pt
8���hl��m���c���d>��!�S0��N�}����/���3UA�p�+��b0��TO4�d_����\ w��~����n
2l�V�Od�7�m��`�6��#�2�����m=���[�'`"�y�P~#
O~�2@cx����gy�m����8#�����\>'�����`��6d��Ew������z6����ru�3��O��/T@[�TI�^'���p>�@v����fs�����_>p��L\w:*�o.���T��ZK(k,6'�*l��VtS�K�X�k����z/��������m�Q�/��x!�6A��/����\�O�F$~���$ZK7a
�����$�����B�m}�b?CWYR�	���,����������G�y`������Z�K���}���B$�^��F}�_�G�4�������C�^���������n[��(2��P8��G��N����f��HO��l����>��0>��k��\y���F�p���"'��

`m��31��y�Hx�X��Bx��?����T�BQ���iU�Y��������x��?������l��?�b|)���"�@�������f���H_����6����c���y���V��z!el�T�,|^��i�!����C
�hq���s�W�Ys�fd�i��o����O�Eur7-�g�lsBg����X l���T�L���Af�jj$�^�	q����c7C���[.�
�z��~^�d����v��G������+�#F�exC��Y�l���36������I�������i&�r��1��fax�#��O/��n���h����]������ak��fA��fd /��yNnV>��B���mis�w>D�`N4�l�q��1--~!����	59�}q��p�-/u{������4�����F�gQ�3������J�O�D�]��\�Uz�&����/>�5�+�9��6�F.��b����M��G����o������2������il��@���E�����Y����O���r9�z��5��0�����^��X+��l
I�����u�����/�)b|�	�3��Upc�\�R�`2�W��QG�_�T��,��I���z���U^�U���tS����7*���66������ k�����.���;�UPA����M�L���Dk�����M'���1�~�,�l��V���q��,�>�;�h�8�l���fG6y�����!HS������SC��XicY��8&����K���^Yn�	�_�3��N2b4���J��1
%J?���QD�`��j���80�![h��v(��O���I����D���2P�P��� �mLsO���w�e��L�����a*����gy1���}�	�z��3���w�DJ]W�d6�}U$�cC���P���sx����f�Z�.k�w����<���xu#@��V|�46��������E��^ZcC�#�}�]cz,��2�+��,����A�r�_>,��
����w�����/nz�������q�od���������'7&���������_��������5I:x�T�%�Z��7��a+���z7�Y:���U���r�8���)��=�1��������r���6mJY��������e��U������+w�Q�3i��g��G��<�l�����C7w���`�*�e��/iE� �$0�<$����_���~���.	�x�%a��F�=��]>�L�e{��Hg*1���f�6�������N��T0������}�����s�=����Y�Q��3�,�.����d��������a'���d&Yv]�����`)7 �/�z�N
�=���������(�[d����=��?}�C2��3b����IHBsN����S9`�q���������|�`�i�Q���(�0�z=Z�sc�Wl���lOC�;;{f���N��O7�O�2^f9	�N�`�l���2��0��X����M���C��?�z�$/���Xc�D��	$���������������~��g7�s�?��m(u������i�,���"��6>
��zg��v�ieO?�a�Nx��D@X�efa��i�L�lu����i����F��l�p�f�j��������Y&��p�i���r!�$���C'��ka^t�D����������p"Y�c���q���YkO�����|?�pe���q/����4��;�J����,���
"�(rE�(�I�L����sD��udq D�����q\�D2XB��X*��0l�������<0vBV��%z���'���;��U�V*��������	��QAn������4��e�z'1��5��
4n��s���a
C����^������I�J�y��bwz����!U���[u���	`;���M1$�}��$Z����B)"��8S����r��t,L�������A�^�I������{�#p�q2�
�V�����
��#tp0Q?	�{�o��������6����qH��t������M��
j�����G��q/�����PV��
�'�����o�������!����h��oX��w���|�t�"�V/�aG! W���W��G�����+��$����I��RhM���(Y��j�X5R��[vm����\�?E��c�=�Q�*Z�R�$�\d���������x+A���C��=�'�7d����Q��f����\��LX�l��|��HN���,�%�Q��#�c�aE���jQ��^G8ZA*F�F�v�������y�SE.4"p[h�����	<�qB�g�[��I������(�6����L�����c<�����z�)O��D��f�#��T�����Qx���s#�e	��`%�=�������XRaN�N���s`��
�������u�3��5w��Y��4��yw�G6�a�'����+T��E2a��������EM����s��\��������W�AF����K5*0�����=�X�dY��G��K���_Ix�;��B�4�/}0,�/�U�0�FZ1F�kAYK~�9m!�(�@�{QL�|b��g"_X�A�E�O���������z���>���O�`/��|u��&C�`��������������/�l���G��X��h?���$cQ�+�w�]����>�0�F��u�ETe�z��{���]-6� ������l�:y�������2�	D����4o�G���+r���<C��Ko������n���I�r&
��Cl�U.i���u�E3CL���,{����?�Z���}W��������Ld@��Hq��9�Z�����=@���LZ����Diu�����x�����x�ZO���������k�$�-����������{�jG�z���*k
�Ic�{y�:e��
���6��?����M��Y�av/��B��>+�>�6�$���\�����C�U%� ��E�WD����,FUn8l7���o�p�?!�w�FaL��T�	4���T1U������M����4������P,�L�-8�x����M94��A[e�lV;S�Y1�^N�F<l��cS�O,�=�/(��Fs��H���!��w'�qL��"���2���5�|�H�G�����%���
���l��^���A��n�����4b�d�p�g�<�5~��w>H������w���>�V���WC��r�z�
��U5��Y�	�1�{i��It����ZL�� �'��M'2W�e��m!*���h�����m���JL=}�d�`7��������h�i����
���Q���R� }���������5<H_5��1nn��3�7�f�dh�`kc0 ���j�*����7�T�,[����,�W�O�����3��8�}���l����F%j�f,�qRk�����I:����FY�Z
��OQN��Ywd��)*t�M}@��%scX!����	\�C�_�:,`�O/���)3�r0q���Mf+"ZX������7,�2����?���a��S���df�d��U��I���1����p�Q��0K%��n����w�
Q�u��
����q��_�@�������t=u�}��w�J��a�d�~���������6����N���k`�[��P%��h�;�!��O�1���(�16D~�����$�gB��/��
�T��M:����' ���fId�� �����K��#/�����>����
�����a���q�����#�g ���c�OF��
<Dxw���+�bjx�e!�Y/��L��<�z#���X��/�:m�f�����T���H/��,���	$�GI�i'��(��UsUN�3�n�4�P��
4��BD<�T�~�B�X4��w����`m��[(�b�$�Q=��{���=�V��)r�P�[�������B���0�C�.���5��00c�/2�M�4G��jLhX�U�6M�
�o�f�8&L��cl&2����s$�qnIc�9�w�D��!���p���[�<�_e=��,DCq�������
3
��w�,5��:��#�=���).����f;$D� ����d&Z."����Y���~$be�a�s�!b�c�J�	��Z�h9������XX��'U6�V�V����T���H��C/��b�:+��q����c��w_�yJ���3�%�QP�Yz���$Q�����EA��|�?.�Hj��;m�n��=�6�G���~�+m�1�
�?��H�������~��?���}��_��������1�%��Hxz�C�d��~���C����\��z}�=_���[���]�������@��y����/���M\��]4��� �	T<c���L������A��������^��j�X������%�d�m'��?f��A��rE~T����
���NY�C����\Pua��XY8.�p���EL�^L����v_0��~`�KS�;�T_B���2�!r �bJ�^���t���^����tv�Z�Co���_Qo
����Y� ��P2?��#�b]����p��
���^[�i)YW�|k/d�~uq'����b��h8�c/p(����"����4U�2H��q?�>9a����	�������i�`?/����	��������r�z:[u#�X�:n}fCa����3�>M:���V��D�L�z!"�J�d�z�V�@b�r���\v�H�����	)!����>t|�;��������r�|6��u�����aP*�l*S=��~D�dS��h�G�����<]����~�0�4nK&���y� ��Z�I
5�E���B3F�����l*b�lR+1�c�aQO)���'5R�R�+����%��e��&���d�:!W�aN���&l��	y~��e{`W�	%��[k�9���o>m����`h���ZhrS���n���y1��+h�V�iEP���o��[�g3����3�.�����aLO9^2��c*�dc�JkZ��t�x����uB	��rV!��3���g6�w�r�dTg�9%��T�*
�:�KI�@�zo����V�2��6����N�����S(6eF	�����<��\>���{���������]�Q��g���lU�7�Q�XV��IW>##��ly�$�����I�uFll{X�{���e���L�:S��U����h��S2�3���>�����e�e����TBu��S�R���zor�FZ��'������]�����mzU5�m���ldo�IM&�(F?ec/��uwh"&�z|a5���`�����:d��#�����0�CK�u�j1��M���u��$�<��>��m!D�`������*��Q�1���R�[���SEf�}��6�D�;�,��F�-�Q�9�8�:�H����0=%��&_�_�?�C��l�3�l����f	�W���9��=�� OT��x#�)=�}���rj���>�6�,���m�+����5���+������M�������a����O�*���[��S$����G2���q�����3���U��u�2u��xT��J�wC>��u"I�C���������x��+�H73�������t��!����|������#��	!�-;�����(��b�v�P�j��h�L[�)�"	�y��Q�G��Hd�5K~�EZ�����ns��h�`�C�uh����8>��C<b5���
2�P�������*�s�&��	�j?w=�,B0{-/�S��8����x]o�Q*���46�K�.�i�[N�J2Gm�X��`��c]�P�#^gB�G6�PtqQ:d9}��V8l0��F��?��>���3g���&2@_�'�Y���-J�Y����c9}�B
-���5�������G���Z$�D�{��|c�:A����Y�,l����$�lO8k�h&��nj5��peC'�M-Y����wjz�k]����_��L]�����=���"������[��/��s��.M�2#�9������S3p�Z5:�����+RCN���Q��I�Qi���ve��v>����,z�0^d���$���3^���p�0���g�Q&��N'l�s����aF��1�Ku�����T!]�kIoT	d|��Xu�,FE*��7���}����7�C|�:�*N|&��.��L�k�*z�����?*xX�	`4$p��<_;��(���
�8��o� W���0�I�������?N#�V����"���[�$�����
y�+�*vY�����g1���.�����O,Lxo��#�J��$���-t��`t��#��_:��t���F�������g=�%SX�l�D���<���?���B���bW�����c�"������/��0=�������$���<w����Vl��R�K����xR�JP��t�����M���x����t���2�<avF�#w�V=M��yV�>�Ju�3��!�%��>w��;����:��k*S��B� �iD�~2�n5��W��)2O!�KCD+��;���8����
m�E�����64�'.����Nra��j;#Od�k��e��R���
���h�L�����������c��v�L������M���(��<����f�4t���y1��p�h�oY�	-�A�z:2�D�"�B"&CE�pd�Bmh���� ��p�W<��������s��?�ga�t�OWP��'�C��"&T���V�,�/2Ox�[���ly���pk�����5Rrdd�Cy�N�U&my3O��������m\I}K��H�������?��}��R���vY�CVyF�4S�a_m���������g������e�*8#/�9�-��]�]	RTYc��N6���N��a�V%�Yo
�"Pf��������o�j�P���)�G������)��r����l��=p���G;���b�v���4o�m�~����X���O�7�������T�89F���3�O��M����;7���S��?�T�T�L�D�6E���N��{�
�G�hHc���IH��e��������tp����|7=��Hx�n�������S�(dA
��.�B��&��~��Tp1Z�8,HV>@%��(��W�����	})���Z���d�������7d,/f%Y9j�O}8�raK�L<FK]�c��O"�B���C4nt��?1\
��d�-���ph�4)!�����k����{�������������B)*����c��s��)�~#kS*{���*qH^f-F;�]�z��L�9����_�0�>�K��a+1����;��
}�	���+P���}���X~�U��b�L��h�b�S���3"���%�h4��oM�f��@9��-�����%�����X��>P�����W$�2�UI���M������y���j*Bv����!�O$2�D�Pc�qS�[,����hO������B.@�&��'[yJ����j�?��7(��:���'���_�X���}��q;s��5�NE�?��{�����`#�����m��c�}
����	����Xw���~��J��>�=���!�_������6]���m�nQf��b�~���qb����>_�%�����u���=]?z�~�������3__��u�����|}-�1]��R��^����}���1]?K�A���z�����~!��[�_�~�<��R�{�*�tb����SL��d^�!���ea�)��vk�1]?�rb�^���?k���|Wk�:�t}+�G1]�����_W/�!��}+�!�����\��������u?�����$�t��1[��h7��������u�b� f��������b���������R��������W��k���j��|���o7�!�E7����o��6_�n�1]�@b����>_�n�1_�n�1_�n�1_�n��\_��u�����|}-�7��b��������|=��>�|�,�7��b���c�����@����65D����o�!��'7D��������^����rCt�On����
��?�!��'7$���
��?�!��'7���������]����rCt�On����
���
�!1��������l���s���]/~GrC�z������OnH\��?����|�\��w$7$�o��B�����\��w$7$�g�#�!q��������s�c��&��#������}&�qu�yh(�l �~1��
����D�,�����@'�"��R�M����G*��G�� �]{S>��4�;������?������K~z�F������CD�l<�O�Le����9�ys�Lc��ee�����2,w%Z�!~�����rR�^�h�o���������^\��B����U���m��<��G��8��_�it��o�g�>���&C�8�3�!7d����(�\C,������9�!D�r��)��17�=�miF~��A���L�N�m�/tD&�����SZ�����i��x�����B��;����`�re�������D�`����������?/��>��vS������+`p���l�"ZK������0Ir��#����/���6~���
��M�t����0!q��f3�a�X6���h.*�:���u�B�eF&�XX7b�D���x���l�;���9�m���d�]	T�����v��|'3C��_�=��pr;�h)�����N&kk��M���*{�����?�e ��v�����o��W����z�s��X�/���t=�l���$���T�`��B�&�`�N���>o�M|��P<y��xp:JvV�k �@�W!��;��G�=��~ �A0n&������g�]��u���b��d	�]0��zQh���EL�p����p0��rA��'�:������Xz�k��>LN�#��wu^����Fp�G!~x���g�v��C�^��O��~���Y;�h�rk��� ��.J~r;�_o#�qX���d�K_)1N��J�����,�?3���E�/4�v��$�m$�`�	'�	l��c�W��������+��rK��������W>��D�&*)��=<�D���{"�<���'F�(��e�����M�\|�)S�Ix��d\��ZK7a
h*I���J���@�=�B���p\O�g�-�}���������S�_(��w�@]�:<��;�J���K���hL��0 �t�v�y��Q���0��d'�(����L�wH��ykE��?�"����7��T��+��|���?�_�7���v�"x�����G'��=~!RXnv"q���UA��'�:^o8	��S,�����x.������f�sy�2P����
�G7���X�~��'������h|��\�a����A��F��Rdt�������(J��'�a�$c
��@����E���Y>���0x��5����z|�`1p8pRf��q�k���.�}��e�^� )��Q3��%
�P.�����l���/��Qt�����������C�>����7+�O����	K����M/��e/���4V_G���1������07��h�? �<���{Q�S�&�x�������;�(����?���DB�s�4D�����Z��$_.(�	Vn��l\�j�G0eh	������{�7��,�4��DnY&��;����������7��Y!SU��>U^r��v�p��:��c�r�ikK����nh�B�vi�����9i4���?/����hl��kk��4`��y�x�Kv�:Gm|)�~m1Q0���G�G���V�CHB9M<����������}A��sZ��,������=��q�	�q�����ph�9� /���[8rT��u#�����������
�p��|o�Y'G�2A���4&��`�~��wl����8�|&������~k�������erm���V��7��1�Z�H�}��m��	lC���B�l%;���2	�o�^�p^�Gh����|�+<�L�5f�E�|�D�M(Zl��?-
dP���T�"j��!���d��b%���"ff�85%����4���(�����L�c�r��_�����~�3:m�������O�4��
���$��j�����y����L�}����v���b���
�+n�Fn!K�qL�g&)�6��b!�t~�h�au�|�mc���� �9�U�>�%�y!|U�|��|j����xSF�EN���}g��d����������w��O� Z�
��pD���4�m��k	YP��
'��(*m&�&x�4a����@�`�rK��)�B���?1;�'������+���8� �G�M�w3@��b!E����uO�=�2�zXJ�k`�@��i�O[r����H�L��������%�kB1%�s�T����s��I

R���L����t�>�z�jX��D
�K�5g{���-N���{a+�V���'_�f�8������>��V����|����[Q|o�D�J�p���e�b�~F���w�j�j���J��{Xopt�k+�.�^���,�C%�>ot�J�A�?�$�}����,��8}����f�HN8
Oy�]K!.k:�$3���&1u%VhL�_��g�zv)rZ��x�x�\]��JL���^o������D�;�,�OQ���Gux/�2����:���Q��$y����R
�-~f/�M�����p�9��d�����������BV��X+�\&5����1���������^���������U��rU������{���b�pBII7D�E���t=���}��y�B�_������WI���2��BE[>�o*��B	�����3[�eF�z�c�F�:	g�2�`<��j������\D�v�O�28�}B.c�M���b����b�����B�I��m�0��y��}F��B?5��_���0b31�������8������Y�~��E���(���i ����LL���l���0�3�*��!�q�f�3#�����������q$��J���m�SGQ��'Y�cBY�
���l�'��
�����d��:�p�d�S�n^�Axbt�d�g����0�'��m����
���N��P���p5:�a�Of5MV}FE_�������g5�����f2�A��2���w��J.oV��|z��z!����'g���Ag���:�&��X���\���`f�-�xK����B�'r2���'
���>q�K�>������y�|����YI��Z��k��h��T��
�S���/d+t'��bh���v�	;��;��X����Z���
b��k��W�����6����~^���W���4�1#���N�:�����7:1NWd���m��:[�Y���3�����fv�`�z�va=��e�8yD��^���H�'�J`�S�E��XR>���%�y#8q����_���M	+
��������fR���"�/�;d,��V����U�:�������y��DV������#����>qc�^s.����5Z��
p�#�(��_Q���r
�v���6oBI��0���[R;��5��������������<����c�:����,"��0�l�
SX�hU��s�����N!��y�uOr�����b�7��Z�>�r6|_�~�P�	���#�h����}^]�����o��6��,���s��y��S���#�����t����_O\�-����U��Z��d�o�c����&��~p�hj�32�"z�[��L�O3`��N�@�������M�C5���`&g_��m��G�N����s��b>��m/`"��p����.ed/;#��N����t���G���'��}W�'X����ty��0�J� ��o�.'&a&��zz+����7:����������W�s#^���~�x��4'�L�dv5��h�"{����J�Vf���J���+Z��.��e/�J�
o��9�\>���G�/yh�1F�f�G�:r����	�|e+��:M�y���L�I�s�nF���'�������G�I�1xgY�w�����������6��!�%�A<{lD�����u�h�F��A�-FB��W';���L�`�������lC�����0v���%/�����Q�9��ONh�G��!�����P�������6U�uE�$�Y��l?o�z���}����C:Q����-�1�WQ�1�7��!��X���Ycx�)�����>y4n������{�r��f}� ���?`���~f`�����X�Y W$����S&0�&�d�� ������U���������QZ���Gi������c�cG`��� 8�/t�k�����K�0�/d@��!����$Zs��yP���X%���t�s���u�r&&���-�����m���K���D������=G�{���^�=�i��JinY�#1���r��^�_���0��3��$Fs&���d���B�������������F������2�1�e�|��gcpp/_�N3���MsF�1��Vb2Ga��x���Z5&�u��
�t0�+M�o_xpv0g��;���K�,��pJ\���Y�_��}�Jd>�"�h�N�j4�(��9�ZYHe ��0�B����#}
������,�Ye,�Y���gyb���$���a���!������W��b7P����{��+*aD��Z(�:{x`�F������g�h�gg����L|���t4>�/�����=�h�}��m�2W���B�`��b8���4�Bpj�#]�����V��i@�h��Z�/��K����������&nQ�X�����W-�x��=�����s���4��{8'����(�A��j��}e�H��P�3��w���>��.���v�-����s(����	��k���h��=F�����)0#�������]wWS�
#d�E,��.����O�Rr�#�����zK7�[��S����n$�S�k���4�]D
�����@�^^�Jss��j�-�]V���w��b��o2�������.���^7(�����_��M�=kw\����_���LkF����E���QZ}���2���N�#q�~���t����o�e����i�&���_(���b��@�gd`X�������>g5#�c�$@�H��d31Y=�}��\�����z�u��2�F���9��3��-N�V��npD�
*m�	��gn�
d��������x?4���/h��\wX�����=i��7Q������E��KY2������F^���;��k�k'?b��-���o":)|�B����$��SI���������e�A\�h&��=�W�����B�������!�32^�Z-O!��HDA�a�7}�W�������R���[�5�~!V�XLHy�:/?�d	�U �h��� ���z�o��5��ao�������������Y) ���2$T�9�1��5z��GeJ�CTo��
6)�����c�v���
��L����`����O
���
�
�����+�
���K��c��w��k�5�B	`��%�����7�����]�ac*19��hh�@3�mCS^�b`,6�9�	�6�<ArY14��q�)�[�s�	�J����54!�5-��*���?od5���A�����ciy����iZ�c|3�Z�~�KM�++
��/"�\G����		�m�2#c���7�[D�|�Ta�'K�%fHM���j��{�)��e�]%�z�[�b
��G���F��->�GR^���A�d\��
}�,�L���
.6��y��������<��M�� �<���*�������a�cw���Vp�C+s����@��)�-IC}h�_��I����3�N�W��N��?������C�r�Ff�7'l8��>7j�v`��LL��m������@��&d�;��7<�|2��<8[�a���Ao+��@�k�s-�3'vlO�>�2����/F� �@�l�B���u������
�Z�1:���>od��X����������0��y�`dN#vn=~��q@�����������[�=�'�P����f3�k/ZF�^���|�����y��6c���������6���4}@�;%�~5#�O�����G+�@%�z�]���bO�y#|����]��0���F�����6;���wA�;f�����a���3��c�<�2TK��w'�N�?/2�+�V��������b"���Ro�y�|��.�>�B�T���-�<,��
���`���q��j��_NV[���U�<8�T��B����~�T|3����������%pz��8��a�.M�������r�a2�q����Mo�a=w=_�s
d;��]'d����O{����0+��~��#y�|��T2d�`�����<Qc�E��DtFQ;�������x�wY�]�&�;&���v��Rx�@�`I�l������\+X��q��U�7p�\U^4���Z/��k��G8[�3��
-�&ZU��������`��
�S]�X'~��ed��U{�6�����8�)��]��I�}����
����A��zj}0�;3t��q�B�qD��?i^����K���3M������.9����G�����~(V����V�l�>��N*��������A���~f����i�
D
LD�� ���E�p���\v.$����!��7�V1p ���dX�C�����E"l���#l`�|f����a��W�YQ����d�p��s�/$��OO�h="�4)h������0J���7S@'�P~�BidA��%`� 9
��k�����5�L��k�\k	�
��zA�u��E��U���>o4���W�	�?/�C�w��q~f����^u�8�2�;���@��-fA����>p%��2����"x�pG��S��C���!D�
�D�MdFv*{1�#zyR� r_��5��@P�`�z�r��or+2C���KE ��w������B	�0�*8���E$b7��xa�U�	!v������;���Z������^�P����G�PP����R��.3r����v���O��"��!��t��x�3-��z-/�]e�JX^,L���n<���T�����"��L������$'!�
-���eAv�?|!w��b&��+Y�<�j[��j�o:�f�[�XK�O�~f���1�����31�#��6�f��������W������3���<4��7��{����2t��e��mE������������JPv�z"HAr���L������>�$9����t�M	��S<��;��QJ��_��J��*X�iy���M�U&(����D�fvTC�
U�W��|n�W�	����v?|��)F�n���f�u���pk��@1Y"h��'�pD��^�������`g��Q�K.=��B�\�����#�.�FN�T|!���:���+��QA%�����__�#b�D��[�y�����2-�c�����s��n������'���s�}�o���6�����c^;���O�<E�T:����U
�H��3mA��
��-�RDt\�c�#������G�?�e���+�w"���7��eb�E�	��y�c�#�Sz�d�4Jz�g���9^TAk�Ty2q�xee1�
Y(w�q^�w�i�p�}�}�)������Z�G��B�
��vcpK��n~<K&��^��y�g�\	|����#AU?3��������>��}��I�����x�s��P`">�LS�pD�u�y�N���c��[>/�c�����[�)�X������`��^!�p�MC9F|��I���r��'��&������=�y��B<|�!@F-2	���?������W��d+qc�d��&u�����`�dr���T5��v��wF1b5�g�'rd#�vN�s�������}�p������i������=l�?O(�����nE�kf�R��,���i�����F�T~�K�g�a��6�0����U��������Ps�������J����������@6�W��V����|���^[��I�/
0��z��?�2�����4��9d+�t"&�����H��%SjO��a6m`f7�o
�x�^���������
�1,i&��r�i���B�W�1����|h�2�!��^��UhIgd����r�X��3���}���Wib��e��dI'rc���g���<���32���;g�.�����b��^J�'K�BJxdKj�pTK:#�	��5�0��R}�&��$���l~���n,����r��~+������^�Z��:��k����������%���]�&+������j����"����|��"(�#�2�i�,�����iSz,�cE���D-G����yV���`)�y�0��|3��d*�!��w"-"�JFe����(~f�S���	O,�S.��E�D0�'��;�O"	y]>U�i$�B�8B4�OB���n/�+��P�?��G�?��E�����(���K�JI�+��)������y����)~2p>%~R������
=,d�`h��)�R�|�(,d�d_5b��Fe���(�{�&�"��W���sH���������g"��?t�'�H��!�&�Y�,���c��pg��=�Dh�f�	�:����yH����;e6���*a���a1-�/��2��d��|���2� M<��V�	-#rr=�S�d�:J�$����`��[�u�nBJ���rr��1EN.�>�$6���pR���(�>YVw%��v�1��1��EhbIQ����)��AS_SCA�TP;G�}�����[���(����b�P���Y������gt_��h�s�})���*�����	3
O��������S$;`����\�z)������d�������}|�\�>6������K	(���6����q�>'J�����>@�\�t1c*Ox���;�TZL����%��Hv��@|=�~8��f'�3���	�|(Z����_��U_3\��=i'�@���~��"���x?�{_z"rvZ?��<�_��dDq�&c=��s��b[��0X��A)z��������G��������Bt�
'�g�b�U|P���C�>o�
��ya�����x�+�(��Sd����A�x��rGw4o�-u�?�
���e.�r�6�W)��
r���Ge�$�Z�MQ	�f�1�������/	<R�B|���������M���bL �K3��������I?�Gu�.�)���F���\#8u�~�/=m��w�49���X�6���)�h{x���x;���Xf��{�:SF��k�$�UcF�����R�v����<!�qp�8Bn�r�|�`��r	��C��g2��b��5�N�Q��g4�n�v{Mh �@hUk�w�8=��DwS�^�X��PO�m['�MH:;!����r��3)������	���'����v�[l�9S�}�,�[��73���Dt���8_"km����"!�mEZ"����������!��M����X-�E��g��'m��oUq+�X������&�����o�x*�v�F����	���bhsB	���2����Qx�RQ�%��Q�
�
��T1&��-��J� sB1G�jk_��2k�'��,|�+��n>o�=jF�>�F-&��Y��8��a<O��1EBP�4CD3D&k��FR���o�c1��c�h?p��?�
y�8�/{�f4f���_1#������Qtn�/����b�h�mX�S����)"/�6����A��������+}�s�&���5�3y�����k��&��)��_P8�;7���H��t�'�D�g�	"1M��sV������$&�L>��&����+����Z8QK��� CMW����yz(�=��w��������<^_�r��t��A��1_����u����j�!���7>]w�s��?�����u�_��������(�������u���G�u������q]bd�i[�b\GR��.1�AD�]1�A��W�����+������%^�|q]�U��4J�j�B?%���������z�?�}�9��/_�m���H3���~X\����8���?}�������~��
���MWL����l����X�������?�����1
���.��?GS��r�8��=��ld���~[�������w31vp�G�9�@l��
K���"J�k��]I�*A�p�v����Bl��~YY��{�������N8(�g�q
����/���7O��;wK���M���N:ki��G�����o�Q�+�r�|��������|�#Z��������g��!M�N���?�\�t~&���3
:�2�O�Nq�d�����<�����|B��C�q(Tj���S���C�	nE8 �@�K�rpK�y��2��� d�
���Wb��0D����1y|�V��o)�,9T��*��@���3Y2P����d9&d���w8u�s�"N�f5��=h��C'�$]��2�&Y;��jz���)��>���������T����z�����i������H�8���[hIw����q"Evs}F������?����o�����}����h7�2����.�Efr��6���5�6��1E39�<�:"���@�e�S����xp��L��#IF.��K�����
�Z���C�h��vUGL���$U��%�� �x���z���'��7���6]���|c�l!u�OC��p
��'>PF������f�Gs�����c������N��X*9T1z�	X)[� ��\"gUEIn����m�����N?����2�.�G:��:*�o�[��d*\f^-8Q�c���I��f�/y�?R���Nr�g�t_�m��x�M�4�q���<~&�e"'�
'[�;i]&.��p�U�o�^�r�<mp���M�3B���V2�S���qF�F�
x*��+0�G,�t���6�������
l\D�@C�8#;?G������8g6������,����j�n�5�:��y�{-j��@r'���@��FK"V�CYO����oym:7~|K�|��$P>j�S��p�j6$���4����rB��	$���VaF?�X����W�}���'K�M����"y3|�'������-����S�`U^��v		�F���h��G��A
x|F�����\�����of�p��p8�t8C�a�8�M���@�<By����w3Q���Usk���P.:��6���L���`������>��I����v����{D���V��BF�s�H�Ns.)�M$f3�#����e�s)�&��'�!��:��j����������������c���xy�U I�7��\)�H�J�u��D��4%�9�DD����sq���A��<��<}���>y�~3
L�qjZL�f��v?{�J�\4Q�����D�3��$��[w]
��)me#�|�w�������
�d�S��a�cAp\^;0-��nU�eX� ��ytE���%_�������kg*��	�hK��{���m���_����x��������0���$��l1c*�D���%����iS�B�|���9l�� �k,��e���E�c��'C�Rp�#���fHf$�����
[`"Y[L��
S[��9�m��r�<2�1��Dd�G�I�s��q�����hLZ}7y����G_�Ps=z@����(�*�Mz���	�-�+*8Y���
}-�s��gF8gt=5��c�,�1#��{:���Y�>:����Y��/�2����R�K�Q����X/��]E\~F2���]#���3#���M#x��tBE�������9����_��^�k�����'��2��Qq��fA�M���m�`W�"��	��X<dkQ��N������#���"p�O-�Hh-��A�����b�:���E����=��3-���n�a"�9R�)�Lzk���G#�x�g���;����kb)aF����8>�N������h�4�x0��&��Y@U���E�3�3$�Z�bB�����$���q�2z���\������iiy�
B]	�V�%�����4��M�����J7�N�4!�<B���������k���2�u�zS��	
�j��M*iUjFn�mjq�@AM��i=�>���]U�$���82�@�Jr=�k6E����sQ[S�NH�����=��;"��	����=Ja�4!�9���m�]��8_��~e##*��3�X�k�o���XS��I�������@����_��_4KNG��_���L�_�39.�_�E����G>���p�*�"jN����Q{B�a��]A��=�CN#���#���Sl;���+����#��YnV���B�;!�G�7R��h�{B��N����de[�)���HDW�[u���-&�V��+�U����ee3�*�Aafg������l����DDu�����u_C�/�v�A��@fgA���K������=ej��:��I�XAL�F"���`�_mqM:|%�.q�`��:�[M���x�4�`B�|�Y� kh����v�EZ=OT�v�������&R��'C��c�q��A�H�=��?�sGA
�X��
�e���t��zP=~�l����\�������h�jie�p�DD�R	�c��3,#	y3�mA�f)�$�u���\�f�L�C
G�:p��C{b5����$�Hf7�u��h
���wOpJT�iC�DX����]��j�e���)���*���c�{�O���v��f�X�&t��}*[���T ��Y
��
��Z@%�O����$�0�;��S}���0X��Mf����\8����(�m�3Q�P���T��*?�P���Z�P�F����-a��O2g"�-��^���_�(_"�����^��v���=��7�=(%]C_�4�TH�G$�cm:�Z��s������$���V�����h��xN��l{(��J��o6*�{�v����*�-S����!����a��[V��k��~���:�O�Is�A�,H��v.���.]���T�R�@7��`&�5�����0 ��T>��b��`��X=�l�$�*�gbq��,-~��Y��&z���W�H�7���&��-�5R	`����S����_�O@D>��Y�B85��Mf$��Q	H�eeW�
���8:zA�D{���J��f��RY)bM��-Vq5U��'j�^O�~6���r��D:��;��?9��#��P�u�?���Ig"2�M�	��w�������4T�������B`��P�X��2��j��������-)����Q{�z7=�������>7�q,H��M0���7]�2#����1�0��|��Ka�_��"��<�1�L��m�������L0�I��p�/�"?�SwL$����B�rX���\1� w����5c����Z�.Dd���Z��7=���o�D���[�����MK����#�G��mA	���{����+y���3q=����t{$�v�������sA��y��bH����DE.�!�-{�������E�#�qc���4��"������������RE�5��-H��� ���o������SU�;g���x3K� ���j
��O^�X�2�k��p�
u&"7�LDb�2�)�t-H���M��T����;W��QQ��S���O�<�	�m��&��7]bu���7���&�3b���4��N,T��frBZfa��[M� ���E�'���
3�w?�iC���`�':����fV
�`z��f��=!U"��d��exC��)+����&Uw`�w1�>k{�����J<����l�U^����K�%n��.#`�e\���~�[�����;#y��9�[i<eAlV��D��t�!*��X�Y,��c��xA
l�R&�dG����4����m�8��'�%�AC�}�GTWQ���������N�75��:��f�VQ�z���G��/Kr$��M��������{��Gi}z��XY7�+<[<7�{���0����q��3R`u�c���x�<:����>���[� ��Yc�JTi������MI��mA�����[��;���3�g������rIKy�I��������:��@�~�d������^q@��V^UJh��.j���Y��������N|g�Jc������v��4��e9Q��w��H�t�n]K���a�2@c�YH��
��d��e�0z�=i����N�wr������1�|��(t$j�RiQ�w����l"RZ��co���a���q��w��u�����;�;���q	1
��NU�L�������:1��0�LB~x`�>�BJ�
�L�l�$:����Kt:���V�?Z]F���]���HU.u�������L�S&�2C��(u��t����L�*.m��vx]�$��"�a3��C�������-�6��`_Y���V�)O�6�D�$t�h����l��YF�������J�N�7�qJ�??��7����n�H�w�$���$����C�������[�U��!'"#�Z���E��!���B�*������]�W�Ic�Y���������{t�����&R�W`�����S��5��������Z�nU��� RPdz���H��O
��4#2H����]_S�@��?fYPI�r��5I
mb� ����2������2�����n*���By������������|oS��_J3 ����L�e���O����S�y|��7i���r�?��/(u�H����qB��7�M;��,fozi�OYP�����L3a{�3�$+���g��N)�,$������'�d�%��P���XU1�(��Zmbj'4��������2#���7�A��Hf�uqY�V���z�OC|geU����������#�����YH��;q��p�S����g]�.KRk#Lq�G�v�Q�{"i����B���������������#
�e{x�z,�3'�e�C�Y�)
���TU�"�(:O��k�3��EY#�Q���Q/BJ�0�\{�o��@|��

���U���*��U���:h=���T-\�V��{�L������ ���lw�J��p�W�n��u�������N�1�{!b�'�f(�Y�/I	��l��������!��L0Z4Sf<����`haA�X�>`\G�v^�{�r��W��O:�<�\'WO4y��;������kxNA�{�5*{�fc;Pf��(Lb[�����	�#)g�hR��[V.
�vm�j��/�����D�Ic��j[��7���x���;����f��T��������&�L������k��u�^�^�\�������]P�]�1$���!'Z`��2���=M3�O�^���,[3,(�G��_�@���\JU�����>��F�����Oz�'*������xo�]�-�!��t [��2P�����D�f����H�����ihfx��M7�-:���S��Q��G��m������\�@�\|�A�)0Y��"�|���|�S���]�7��2�i����8���yb'8����K"\,�o��6��2�W8�R-]�uc�YP�Ot����a���p[���;6��8��'PA�8I&��o5��3�������H����;)����uC<��,���\X���A���#@���E|)}��g�-�����FS66P��(����������T�x�������c~P&����m���Wv��7�{
�W	�U����za����msg����,�����8���JyF��_�i���������� 4����#��v#�'�jr���SRi���q��iJ��q�R01���M1]�E7�_�f"�t������c����X��?��G�Y��`���1+��KN��;���O3�$#���(�������Fp�/�tz���S�E�.�
H��t1��v�����<�����LB	N��O��x��w���r��:�II�'���m�?�����.D�6�ev)��(���S|�{p����@��{�*��q��q���0	x�	k:����$�	���X�"*�b^ 
&�vs���es�K{�<IH&���<���W$*���A���E;��`SU��Y�Js�)P�z2��Gl^�A�Y�z����<�SH�tI�4�������ab�K�
/�����V���| _�=���I%&4��<{I�!�^ j���'��fV�t�$������T�
{�'sX��=�����7[�y��L;>��L�x������p���R?��"U�S������#�C�0����)Q	&�2=��F�>x�_������AX��5�pN���l�����E�l�9|-*�9�j\G��4�W����$��~U���nz[O�FvI�4����F��)ZZ�P�=k��lP6����F��]|���,N���&OI���z�nS��g&P5��/��b���U�3h��6'/���3=�]��:#��<F�q��LD���4���=��fl����DYo�D��D��#9�D*S�g;�J���8������u{�wE����ES��ef"���*Z��gd.��j���Kg"2����5l�����@DX��V����� %����rV[h���(zJ�>�G[Kc��>+J@=��
�V��<�1� J����R#?!���D��
'`�R��gAy9����ay�K_��r�Q}����4V^;��e��=�
�13I����X�PE��hnE	��x?��mc�HR]���nK6,����� )?��5��E=a�1f'w4-He]D�pr��������c`�M"( :Uk�Kl;��T�5�up�N0��]�e~'�>���SZx5��`��HkA�A����� ����'����im�KU �4���/�W����vvG�g{��d���Fd�OZw�k�	��<W(��&\��F�����t@�P����N���W�bvpmv&�S��X�T���
��,��u}~&�&�����V1��> �D��|��XI*���r����}�(��;��������b�	vo�}{�Q�"��	��f���r[v��F"2���&�z��c�}%#��V��?�E/�d	%�@�Q�&��;jyA��p�BKG56`���}���4�����������
�j8+M
��������_���y{�~����@>I����a������A�������+v�a��w_��E��A�����H�PV��3O�I�h}w��L�������Z��[�7�4���OQ&Tb8�MM�����������p4�p�l0�����7Wu�@%Q�� H��,,�_h�������y����9���n7#[D%�v��.b���p�=�7!�Y:�mv`����$�6���M��,��&i8��X�w"����h#��5D%�pV��v��]�I;�2��5�_��+J�us�D�����o����������#�ifZO�W��QK���2-��P	���,�T}����	8Qq�����F�,�cz��R|`_k��8!�B�J��,x���Z�`��%��&q�
BYX���{#4��#3��yx�l�7nt^P*3
�uKH�������LL
�7��k�
�1�,��;��?�F_�b"���	�}�����~�������������"x%��������I�8�a$�X*��m?~~�/�N����t��*G�i1u.�U�4���j�e���p:���WlnV��6|�8�j=���+������j��}3C��d�6�|�i~�H4._{�|?����-��x�K�{��2DS����U|P�i��GT��"k��%'�]��9%�W���z����3"����eD���������\������/��oe�~���K��� �s�!j:i���=�b��Y���u���Z�;���zWQ��������G������i����;���t�
\^8���w!"c9$u�<g�M��[��$}�v?)��C�F���7���.=�Fel����<<j����������r��G���5��PN�Qlu��7��(�f��K���*NDG���c�.�h���V�.,+��*�4�tT���)J���V8s0�,H��s��j��� [������I}gS@��g��L_:��B}�7AF�9eYUz���� Z�j9e3�R;Lq$*��5�j�e�w����gB(������/�r��oFZ�T���J����"#`���X"��?7nQ���]���D�eE3�_�)8@AT��z���s���,[)Pq����&=F��I�5oq�i)��I�nF�\��4�7��$;:#�6=�!�{���!�7Z<��{�y����iEo�o6�3�,�����B.��kXohKo�ki7�	�l��4��f���tF�=5�{7�=Y�[���S��0��.��"������fv�:5�$_�8���	��gg���nC���wO�0W���o��� ��nD'�9V�������\3S���r$0+:�6�?���NlB�M+*�?�b{�@���%{��FtF���e��lF'��T[��\?���'��!������[C:"*�=���X�tBI_iI��o4���K�E�x�����Y���${�3���W6��yX�	InH���D���NH���������!Ye����xZ6�*�J��dY]�:������lZ��jN�}[O5��-	���(�� ��52�:���>�|�����'�*z���
.���4l��gFY������y�Q�T�����]M��G�������a=��F]�T������#b��;;�7��L�D.|��,��E��v�iygwS�����	�\5{��eC�{�3p<��z��]�J�K�\dC_2�#����nT�j��{D#���6���8�%�z���2^�1����,�HJ�Pf�5�"G����Q��g&I�i�w���vr��H3z�ti�6�"���H��&�Z����$6M�JE�����3���T���8�u>��i&Hk�W�(�^��4 }�����<���g&�63�
����-��MwN�L�x��gN�Stf���{��a�(���n�{;!���Tg6����G��a~��i��3U���[L�>�U��������P(|�=�?���(G�� 4�L��K�2#�a���.^L~3�oZ�*@��h��<�vS��-gC��.c6����'��meL�����HS����|�����>ea�R]��b�dl[:;�-���@q	�����(�=e@
,������z�]R52��f��Dk��*��&���@�A�����h�e�zmL�-��P3�������g�8���]3��u�Q�4��Q�A�E�N�X���J����j����\�i3A�<�e���\�	e
�u�Y�,o������2�����������`�4i�$Kd�v&>�]��N��-bhif&���8v!��9����r��`J��"�;�T����K����� ���8��x�k�xk�����.��I�^3#=}�S� I��NI����.�:x`�r,�h�+�jH�$p3mU�qz�3�4'�9+�y���I7p��������h��vZ`���<U���e����"�4o�f��3���j�5�J��_��t���)|P)�jB<L]�c-�\��%����\�yf�	��Y�1��.?xW�)��c_��CLH�(����$���J"H��QNK�8!6�����I�����'z"�� ��vAm/�W��A�&=H�>!����s��		����6���}B�D[��Ut�m��a
����^�7����N�>�������0-e�u%M���rF��L4Y����gdg�D�9�����RKj��6���Fr;#)T��sF<��qT�����Y�f��S$g�[��,�����O��������kf�����
�!�������!���� ��N�/��N�*�w&����x���0k�����9Fp���������PT��0�,?�jz��d���eZ���L�M����a��Y���^�4�m�S��"�j��BD����8��Dd�-��Wl@��Z�9���7����#�b�����*��!��r��s���2S�]��y�� ���z���[o{��xB��W�8H�E�%��?��7)#��#6Bz��De���~�����IL��:l���d���';I��L�����Yd����{�oS6��]�6�0�p�HYL���+�6�"���c�f2���;C�-?O\��h����<�$H�C��b�����)s&�*�� ��lC�P0W���]%���z���yn*�/I��C]LDU-��]�����EO8�|� ������O�-�������MS�+�m���zv[��Bf���-�k�j�#��j�X����������ku����������u��L�z��X^�H�Ql��l���:���D������'���5K"hJ_����e���^������~����N�����`&�> ���Ld��yD�b	s&�������t��`"*�x���)>��m@P���.{�2���������\`��\���&������E��&�"�k����]��;�J�g+�S�l�$;"=����n�2*J`R�eH;�!�xm@jK��v��W'��2-�w��egC��d�b������u�	%pK��cm�l��]FZ�ja�G��2+/,T�do������B?u�F{f�����e�����,������hN_��������t��X
������2�mW�A�)��go��1��/n2��H0`���g�u},��_������Dd7�
�i�?�%)^�O�F����n�2�j$e�j�����~��Gc��z''V�����J��~��+�c����v�����i6?�h�:�1�;�#l0������u���ET�E�o�0��
��bg�l���-��N��/=!)K�����p���lOG�.�;�h�&�}oL����^XU	�<D�p�������[��:,�0�����1����X�=61���3���#%f��y��������������M�W|c������	�9�#'�#����2�������S���f��'d��.8�����.8�����|����*�t�|A�.h���-_�r��~��g��������>^p���m�`�.8����m�I�����5	9_���|�S��:]p�5	9_P��|�9V5�|�1V5d��>Y�)�F7����1��z������C��wI,���������u���>�����c��\�}��|�����������%L�W��	�
�����W@�W��br�b��e����o�.����d���SA��g5r�u��������������|�>�����[��FlCESL5���o�J���a����>��c�\zl!�A�W��1���c���
^���8N�1n�E��-W���+|���t��X����c,��\�1z��|�1]q,Wlc���1qE ����h�>��
B�1#]q�u�����X�1���F������i;'-�<��������������^���oN���o>���o.���o���o���/����o����o���Wg���7_���7W���7O���7G���7?��>�1f�]���q?�1��l����circ�������{����cDrc��c��\�>����������3^�?��K�Wd�%�1qEv[�W��r���]��]�[��)x��+6��H3i_��\I<y�Uo�OH���������5���,��@���,��Dt���n�
H	��+��J���Y�A>����� }�.M(��������f�p`�S>��-��,\"�+i��8D�yO�r0��Ww"D]&�J�B
�cp�2"�XL�[TQ�
�������]�����Q'-3RY�p����5�t��K�}��N}����I��t��7����*�A�	��H��M���2��a���2\�y�Md�y���		��I�����qf�|s�����q|�>ew�%(���=�����&��|����/W&Y� �*���RHT�5��-H���q��.�����Ya���D������P������,i7rU
�
3�$�HY�
�s���`2v�M�i�����HtSW}pG���4�.�y�b�Z,'�]&4���1�Sr��5"�Y,�s/�B�>�)tANvn"BtK��C����P�����ww���z��{�$�_p���)8��`�3�u���J���Q�S������@:D��e	mh�\,�u/o �t��&����_l5��+'��;�,KopS]��F��d:k<�U��D{�wE����+�0��Y�@�de��Q>7���@�(_�� *�9}�����;>�U3��T�������7�w;���,'���H�`����������-���2�)��wo<�~A�I����q�A?,+�=F5���LNR�>w�h@�+
����cs�����A
������!G�hLh��
�����Rk������.JR-��#��/9�ok��2.�����"����=�w�-�����L']�$��(�*R�J����"��p��8���Q�`��6�u?4�wa�sA��+�����HY
���aUy�e� �<����CCv�3��$�1�in>�2S��{��h}��NT����Z�T�\��M�4�GhNlj����gP���C�Vs����|1�����CT���;%g��yc���3��e�%*���RMg��]���b�N�:��%��?V�����ee�[�h�{��<x��]Q���������(��>��'+��w.����q� �?���BR���?����j@��	���e��������A��#����>�x��p�L�g�H	�/aE ��� f�N��������P��0N���_��8��^]�����]��_�(c��E�;��&�<��/D����'H��$u�@��~���|��	����gV�Oh=��XZ��D�W<����a����y�Y�)�A2�0�;�V@L����i���Phv^��xW��*A��L�{��2 ��}'[���;���t|I�7���� �3f������wax�h�y?���0��.�P�;HgPL������k���Q�=����w��� �C��B��q���A���=���������������<���,)�y�;Fu��<�E��J�-���A}��Gp�P��u���*�g�LU�\zG������P��:�H�'�F���Y�{���*��#����e�A}'�xT�~��.D��
X4�����'p�X�B���x����
�Q�����x
?
:��HCH�8�������z:�~�'����xW�#\��;9��!�6���*^��)���\|���p!�e���u#�pd�\<)@��ep]

�3N(�����Q�LP��&�	f0��&��C��g��$��8�dd�o��m�;R�Dh�H��U�}���M�
u�H�4��M�:!��)e�� �G���'��R����D%�p�=���n�3	��#��;�����$C�������h�ha���|q
�3'+V"�Hk-be��3)!@.�/�\f���0��������~\�3�����F[`��{he���-��
m��E�U_!���
$��3����H�~�`�;x���+���\6}n��m"iJ-Dl\�j:�86_l@���bNZ� �5�����u	��� �*F�t�.-���� m�2�b�8^KrZ�H"�F42t���q�S��4����[�����(�\R�$R`"CU���b��ak�~�8��>�
���=��F'\�
���:mO�QoBX>��������L���8��=�����G�={��$J����/g�
����@�A��%�Zqz�w��s�~��X�rM��$�G7���\�{��U4I�A6{�Jf�F���bK��X��D
\K=m���#�gT�`7���*e���K�8�	�JxzJ&��n�I��ID�j����t8U��i�z�@�,%��	�^��W�g����T�T+����k��0:|V��y.�P6�d�qZ *i�����4'�� @�^q ����5�u��dvj���bZp�����m+��sRg�d��.�I|N=)4��o�,�zf�X�`Z}O�����1���������#�����������]�0��P	&D!x�p�-�8�$#�*J5��� Z�����qb��mg��@��:;k�n��h�jfcm\r=��F�f��#�G����cG������~�NP]��7+�zB�J�4��	���U�y��������s��z�����_4������_�~I�����{lT����M���i��������1`��lZ��a_�L�3���-��:�n�i����;#��{���oI1`�T���i`�]2�6a��qG��HK5�gT�`��-��,z��Q�Fl""�[2����%��.,k���"���F4�$�Con�`�'"2[n���FB���Ha��x�21���T�S���a��5�r	��J��5�� m��=�f9&�e�V����}Z.7igGIu^�}ARn���{�����'f�N���4���q�����b#��,���w
�{��3��yJ�[u1Gm���f}�_�����z����oe�.oMH�{R2��n�,+@�f���L�� �p�
.�Tun�s��H�q�x�^xSB*?��`�?T��T��<��#�<���ge�Y7s�}��16yji�_NZ�6���Ns$�,�J���D%�����M��m���q���1�2AQ��/B���cN����.v��
����6��|�5���W�U�	���u������1'���Si����5OT�
u�~CN�o�O�d���m����`�oid��\���O/v��Ap��us�D���7�Q�+0$�e@��tO}�M��XR>��-���wE}��6Ai*�p�[Zg����@����L$|2�7��"����el��7��$�h�_o�x�zc�' "��2�������`�
��{��9���<������y����3��-�i�bS/��������sw�7���;�%i���$���T�9���|��PoeaZ���?
���	��[������S�X�J�v-H��w�HN�/��W<�m&x��d�_�:x��T�ZL���3�l���&�]�7OZ��*����N@#(f/���d�f���M�#(�%��y���<��i���
1�������_�oH����_f����U�����d��gM������if���g$��"Z�[eF"��9a��Nz ��>�J�������A0�����?�+�K��N:��
����m�q<�(�y�2r���T��N�i���:�$J�����n�g�Kn���O2����#�@T��&q�����tf�0�[�P����_��Vh���H���d`���
@�+�\���H@����s���te""s�	PO{(f+#���x:[�������l��l���D�p�\,�0Y���5�)��1�%�F���-�h��%��]|���|V���4�������H<^�����ASO����������M�dx��+sb���	����k��j�f��x�X�#�7"��3�O�I&�x3*B\�p����uf"�dH��G�})�
Q���K+W_5���� a���� �,0�7�{������,��\�mS��^�H���q����T������ma��NH�O��#��Q���gZo"R2~�l1<)�Iw�l������:���<�(�����	A_-�s�/8���D���J�}��3�H���dMU��s���d�� �����#�_�
��os�+~?�+_���\����V��a��}��u����b���+Sbk���?8�x�$�����>+����:c�W���=�g
8�7���jj��e�2<����B^f��+���o��F_��}�(����w�2D�6��0j���*�	F������ox%]�V:�o��/�����6+S��\a��3�TT���ta��y}��nO��G�������U�����)���tNG�7��H����:#���~��;���Br��<*��o��m�1IN�4	�+�22���+����M���!����>����� ���/�4�����c�
����6�k
�
�D������P#w��J��'+��������I�y���rg�+�Y���N�����=���#B��/����������3�D���l|��wc�����~����S��|Y��w�x��Y�� �"��Y�}eJp\�@X�j7����l���}"�X(3d1�,l7��m���]0�b�0��,T�G�$��ZyOo�����������P����������18%��DMH����,@��G�t`#ip�=b��3G(�o�:y��+s��l�?�����A�u��C�����I�F3�����f����E6�'h����]K��H}��qx�I��2^�����s�����0C��~����l���0����zC���ahT���6�Q��������D�����<z��a>M��v�p��~�p������9m�������E}�V���q(�C��h��[<"�h[���5�u/��
��xjr"��^X�n�W�Ky��v���������O���V����O�g�����2(e�Ee�C�m���Id�V�6��)���]<�z��BLI�m��	R�������elN��#��L�yqz� *����nFx�s�i��
�]!�f�X-����]�P��&��~�����{	6&���o��L���pw&��2\V���W��l>8��G���e�J u�
�mx�1�N?�.+�|>|��K�O��XQ�X��qQ^���}�2%�%����wt����&�|gX����QX%�-�u��3��#}�])�G��l���
� ��Xo��9U�	X�E�>�1E��P�_������14�0!��W���$r	��}���X����X;[���.�Y�)x�.?%)�a�`�BZD?41���	i8g�nG�^ ��>g�V}I�b����*	04��V]P��������2���������v�c��S�����J����GK~�Eb����/8�����(��:n������K��hee_p��]F��V�V�^��k��iA(5�N��Piy��UdfZ���+$� U'dD������lV[�f0ta�*!���k�����Pf����D�w��SQ�����]>g�-�������P��o#�z�4�:�������T������Mm0?mfJlx9�'�'9��n>���gB�1'7����=�����5r����i�D�L��&n�q�/C�[ZuS��ZOP������m���t`J��q�|m�-��,i�.����5+b��!F����������	��x��psT+f�D?9��|A���p�wA�Yxv��0����#H����m�|����cw��&�P;5�3T�Q^^���/|F?�����{i�������h +�����{��)�������9f������L�i��@����H�������3!������D�k%z���=�gH�r>mG�G�V�^����@&���]�]��E
��������������s���XFu���h!�H"���t�em���.DUd�v�|T�����@
.�e]/���q���S��M���������0zz<V����c�7b<�_:�g��^<����9b;f���r����4��d�X���*�C����;�������������� RmG����j�n����y�lnI����e�\<	�X	8^����g��RrT�xk�`����V�Fn3���a�A�Z�b�n#�y&�����`�����er�6����N!���
�i�Y����g����f��iOA��j�2��`J�
�Zy���^1v��H�N=�8��:���~d���v�	��uF;���N�����	���4��a�#�Rm�����YV���jo4K� j2���ej�6���m�����������:M�j6�\�T�\�_�3����������)ALJz�>.�����)y������:+�2��+�D���qB(&���(����S=.:3�����{��@so����$B��=8�V����{(���ge�$�Ie�_P��'�2k������	��+=�Li=�A�zC������;�F�^��.�6��n�Ms�����N,�w����������}�C��;�����>�@�r��6��j@yb��v���\��w!��v�=�vj��p�e$I�m������7A���=��l���:F����e�3��G��3L��v���t'RBv
��FB_�'[7=��*1�n�.�p�c�]�M���mH� ���wF�OZ�W�#��q�cl$�1���G�&�b�����"��++��V�f�����3�t�#�[�l�ch�)�,���p�)��p��pz#�V�f���G����)���4�w&W}~a{�y�a���-��v�����Mm)R6�l6�[���bZ�������1�S1yJd�I���hy�c����6�I�&=Z�a���[L_�����<��X�1�1�/ka�u�Sw�����S����4x!'���g��|^�{e��A�\c
3�>�AQ2�p�3���Z����]�&�h;���g�]�����������Q9�`��x������}�!�}�Kc%`�����8��geJ�'(#��e[n���������s���	6f�q��M���*)q��Y�	�d!����n�cc�hNt��]H�7����H��K0%��"_&|�;��fuQ&�4����EKo��5	��0�����7��L*��4��` �[�~�����J|��r�EQ��I_C�*#$������F
��S�-p� �*w�H�M�ODwD��r+��Pt.��MH�	.�,vR�����g�	+'���.�q�]�P����y/�]�yskg���� �/��B��)����s���h�v�=�����_��4�����%����e�mb�����h�`���jz���k��J&7�\�MV��(��?�H�[�4��f����b�Xqz��a�a,�\��Gj���>��O�a�\����_�:�%��������ZF��{�l�S��B��.�6�w�RJ#��*w�	a�tB
`��>3���;2WO������rE�,
$z�"�� xW�cr����dSg�T�$�����W�6��%��7]N������A#��+dd�������,�����_���+[�9z�������Ob�i�]�����
w����*��J7��w��m *#�q�\�P��}�d�c�0phq�o�*g�>9
D�F%��q��4j+���)1�}��|�qd#����*��n��'�,���T�zp�0~��&7��Z����Z\�R�B
�a��� �-N?�L�4�A��3v��'�~��/R���������`�G7
S��t����xfF������������b)Jj��H���lV��t��U�x�������|�ak ������P3j�P�h��t������tsV��l-X	l���������<�i�q����)�@����G�9T;�A�O��'�����I�<_�Y�0�3��������<A��:��+gx��
���T��D�~�]F�2��j����j}G_��YJ�y@�
���I����-�e��,��P�'��+�n�'���O6�@
@�
`7S}�=�d�0�|�Q[C�j�4O(3���G�0_G�P�����'!x2�`�a�N���^��l3S�8�8���0OHA�m�a�n��a�e�0�����0����0+
�_���vf�<1������v�<3���-�u��Q��2�<ern�e,��#2�2_�u����T����3u�O�yf��'����c�y@Y�i�'��U^�G��
��<<�����@�<t�
fF1�@#5��,3����g�@�%�o��@��nV��OH��(&�NI8$�AC�����(O���X����Y�Db������$p(��)��0��	U����@C1�����5@�J��K|~a>4�4�+��Y`�n���Edcb���n>!�3N�~b��	_���9`�Is�Q���,P�E��
���w'Z]���O��6�$�'�ZuH�e��e�u��<PZ�G���<P��w��-@�y`�����h^��^���R���3����Z��y5'��;e��/,��������g���I�v%��?�m1H��?�{�
�5�vab6�R�m~��l�����?6�XL�xX�������Yh*�}�W�3����k��	��8�3f�?c��6A&%��!+^����jd�~�����s�}B6��B����A6y����gj�<����4��0+���*�8�����_�R���o`#9-F�_]	9n�����}����,�����*#@/h�����c]:d����id���m{P�J@w��},��WxG3&������������L�}��-A��Q(�������t�O������)��2�L�R����0w�����[���;�$7�����Z�e����p�:�����K���&�����ohI����f�a�=��s��3��O��I�Y�Jjs�`��v��������V�5�:��j� �$\�����FK��J�����
�g��m�����gab;�4VH>��{�M������3���,���,���|���X`���<�����`��#���`8��l�d��r�o����[
��	*�����'�+�+b����\��6�9�]���x�������������Xm?)�����/�f��t��p %��q3��S���V�l�(�{�0���y��F�6z��O�0��}3�:��*,#�U81�
Q������ET����B8����W�D�G6���'"g�����CA-P>+�g���<�]QI��Zm��B$9�@��n6Y�O
-�j�Z�wA\p���Y(��~'���PBef�_���k���*��	qialA��v������,
0��g��:�\�m��6�vb����?+7Ow�{b���}&���0'F��p�fWT"�l`#�zc?���J�E;_p���6z�I�2s�� ��
�a\������dq���
��+x�|� �ei ��|@,�5��	�c���#���A�'���A�����r��#�3�d�o��"'d�V��~�
vE�%��&����}5��������1����Q6���W�P�\vS__���nr�������"����obF�D���^VY��53�m�����$I^��!l��r���N�����R��I!g�5��9��=i��������NL�w_���q����ku'��}�N{d�fb�#�m���2�M���l`o�����|Y8�����lQ���h��v_������Qo>�p ��%9!iZ�KU����&��y�2��0����gt8�,Nl�e�� �q�W�3��������kr���*����E.�	y|A:���D�9*V�.��m�IR��3�Q��E���4�}J� �?���<y���W����W��<\���*�+N9�)]y�b��*k��s8r���&�w�����������-��|	����n������������w=�V��]��#����8����]�S[�:6���{�x�e��&�c��&�S�dY������&��]�wM9�������������E�z�p1��3�C6�|�����~�������z��������"����F�^����S�����������������?������8�����/�$��gE�{c�P�[�/P�����w��R;sY��G���']E�P�!&�yg���� |w/������
�_�}Jf]������AG����^K�#��r�y��
i�g�9D�
n�~;8A�+��)�qp��'@��E0QAm���_�D��F�\m'unC�#@��7�t>���@n�jc&���T���Q�:���3��I���L�'$�� ����3��	���\�Mv5'xl2R�K$I��o���N�X�u�\O����rA�G"��"�����doT5���h�%y
����I��j��DK�cB���w����H'-�f��F3���pP?)*����/2k0YM�U����om�V�zI`:!8Q�7��`�� kN���H0�W3���>�J����7���d5��S��
�>�W��h>(`�v&_�Bc$j��}���Vcq��O���O�7I3���<��l��>v��L��p`��?���=N�'���*��#�g2��r�|��;	���P����E���{�qD\��LRp�@0	Y�����{�[|���C7Xt]K����X���
�}G������T�u�P�
&�$�-��S�[��:�GK7��c;KI���K�H�FY���`�
Q�a&D�1�\�\P���`
qt�1�����[����1A�H�03��U�C�z2��� 3bK�|�e2�w��=���F{��j}Y�:�?�Q����pPw��e�r�h=�U���oa���k��8����P&=r>U2���b��2���)�u��^����E��o�6��l����u29S�>��p0�~������V;���Cu�0�0��G"2�F7�v�~&����9�iQ���;#��d�A�7����J"L������h������xh�����"�g��� �9���8E1�D&�p�j;��	%�D]'�0��;BRV��W����W�J�$=\��<e"E��k�h����	��CN���
m�z�vH���E��Z� ���M�M
hvF"��(�_E�_\��L�5E]�cnm��#B�~��!Bq�5#=�����H�f$`�s.�m��@����,��yY����.���������G�:*^�|H��
�9WJ"R��c��n;���IS"�3MDd|/�	��n�_�����
������	�|�Q��11��B�dR:(���_���0���|�3��$��[w]�
��l�6��~�<���H�Qa��|�[;��,�3�2���[�`�(H����y���k���PQ��w�B�w8�~3����8.*S�����D�o"!3������
�j3Sp��K"~�s0D�2�����X��6�M�I�����,�A��X ���7�+�7D���J�����!��J�~}m�:���b�Gl����M��"���y3KM��6���P���f�0�����4d9Qp�S�i*���G_���z����O�Q�U����q�����
�GM�b��2]1��������*��y���1F��3K`�+8t�@��N(��v������}�w�UtEP��43�����z���U��g�%�L����"�cfd@_��4"�GA�J'T�`J�u�m�g����kF`����������1q��d�R���Qq&�>pZp��=	�h�$Lx���A [;����wz�.���:b����dD�a��I3ZK�d�>�ej������Yx��1t1��G�����`s7��0v��}J5S�����z4����g����kb)aF����2�b���o'���8�,
<��������{U��z��T�����*Jf�O$�f��;��;�T�
^g>o	���)���@P�:,1��@��DDv7����<�6�����As�����%�
��Ue�������>3d�$�
orUjF���jq�(�I;�%B<m�U�Hrg
��HbU*���m�fS�{Z��t���	��P����zGD]���x������Mpe���
���g��a<gD}�addFlB���y�Y�c4+6����9p#VqZg�/�*�/���rw����M���x,&�%�/2�a�wb�-e�+�({S���;&"6h��1�/��$���'$���q*d����cv�i�~�6r�~�~��m�"|�~���x=")�e�v��+�4�	������R�4`OH�;7�7���S����g^q~n7�<u}Bh�-��\���x]V6�oN����H��
���t��=Q����l!s���el���uv6��Y�dg���+l�fO��Z���at��"VGS���!hy0~����&U_��K�����N�VS*�5�.MZ��.��|2��~�
���/���Q��e;c;;SZN�(�mO��/2���]Qz=��?�sGA
�X��
�e���t����?d6���Hz��xV�����VK+[�h��@Dd�H�����<���a�H��v� A�,�2��|yT���L�����cm�����c5����$�H��Zwp
��`��}��Mi;(Hs�4��1C��]�����a[FKAX����fQ���������|���~��-V�	uo��u�M2�l��pY��`���q��@#��9:�G���=�x6��t<�C
��r�����t����J%���BW��5�4����o	���`HD��4���rg��(_"�����^��v���=��7�=(%]C_�4�T��I$�cm2�6��t��_��j���Y���o�f����9MW���\Gh��^!��h�9������A�ej�� 5��19�Sx���5ym���Y����|�L�c�
8DeA
,�s�m<m�g�e@�|6~�`\��d�8������t�S��i^��`��X=�lL$�*�����YZ�����n�d�M�+M$d�P'���0?�HNR	`����N�P����g^b��N
/�"&$�����o�x��z�
����]zB�D{_�c%���3�j����(k��������h��*��.(�K6zJ�������
@Y�$�b��X��\�h<F"2�M�	n�w�������4T���}E���'�M(k,r��*���(�W��f�L�����1��}7=����w3��m�8f$��&�����u������Y��w��@%X��{���\$���'�E�-�XA�����qKI"�
N��s8���]?b�������X�c���B�|��f�a��HZ3�X����BD� 0������ob���,D���[�����MKEuk��"-���qG�[�d	���73�L\Oo�dc�=�����c����}.H�=l��1$\��Q�a7�ut&������=n���Q��U��/��;#��Sq1���k������A6���)i[���ti>�����,)B�Q	�������u,q�|����ND����H�C^�?����	b�C�i`�]�*S|5BpG��S3*J<z*>������'0#�-�����5��K��\V-�g^�s��N����;��z��������Yu�QS%H��t�I!�g�������x��{����]��H�,�m0=�F3N�f�J����e6�����BwuS���������o�O�;�`�l-j�d1������t��m����r���Q-�56G��leJ���"$w1���0%6G���D�o
6��8C�:�	n)�����P�-�����X���/������n?�f;s!C�m<����R���0%��z���z�e��+z����/�J;�M��<��1#��b� �g���r�������>�=���7��m��'�������������6�VY���B����R`XY��[����g��L2��6�fE��f�iqaJ�gG��q��+���9��y�^-1�AhI���?u�������7���G*-�k%������#sE���D������f;5s��\�����6����%�u8Tu��:����&@T�� �hC%�p�B�84#���q�'�S�a�d�w����CG�'�c18<��1�<�O�G,
����P������V��P�.���	�u9��aS����&�2�N(DQpi�2Ti�_R��2�������LdN�;m���}uDQH=�����j�{�=�5����r��e�����2���yYf��)i�X}`AM���[�L�ef-�W_T���|�����q�)���lX����^-0pZ�����PM|��w�������B�����-�U~k���6�R�����/3�^b����_��<�b����_��GR�}V������+�6[Y�$���T��WwQ��-c/��P���g&Y
�o4>$��@s��	��0�#D��+�H�t��'��L�r����r�Z)	���*"A?�xW�5���	R������rA��� t#��
�@ki"r���7 4h�����A~h���t���IRC��,������*xB���4���@J>����n��;��Q����m�~��Gi��#���ic���G�;�����4�w�������LB�i��f�)�^xKB�M��M;��{ozi�OYP����+`3a{�3�4/���g��N)�,$����Y�=i$�,����������EN�/�9
bj'4��������2#��|�7�A��\�~�`�E������ ��r6
������>����g!I����B?����-�Z��wY�fa��<��m6�$��L����q����b�P;��x�9�����h��%n��7����S����tg����h�u��v��CeXM�E�"���!�bv�=��Lb �c+����aB�9�j2�\��+�Ac���b�wE�.R+����M&ZmV��Wt�\qL�k�8R�_��s��.,����lS��=�1GY�j��������a$����taMj�2G�D>3�h�L���B����%cq�B|���0��f���v���#�t^y�l&����
$fP���]�F ��r��9I�����������`1������S�		�#)�*�hR��[V.�n!�sM{������Y9��m���xt�����Zol�z����2{�js�A15������=�]��{�^�n��+�����+X��9���������DU�1�Dlw@�����jF��`�5�U��&��#��\ ��y.�*��q���>��F�����Oz�'*�9�)��xo�]>.�!��t G��2P�a5�r7���
�s*m���x7
�/"�����E�:5}�z�F��Qoz.���a���L�+B3������	G@>eAY��)�}��H��U�i=�@R|8�������,Y�p�4�%��w�$^���K�n��&J3�T�8K�$rhjh���,x����(Nq�IT�w���o5��3�������J��_w��<����
�ee�~��F�u�����|�����n_�D���wKu����F�!z�����:��}�:�+=k��5�\=6w��O�^�C�st`_�������uO���*�t��*�tX/��>�A�m�l?�������9��W���X��hz�U�
�l��

h���F�N����IOj����&G
H>a��2EQ���DO����]�:0�����$��d��n��HD�h���<�T�=�$i��	�h��������F\��0�����������2����W��Hi��M�
=��9��P������,�a��	>D�%����n��g�o\DY�Y���J(�f����4���`	�x���Njl�����9']���th��+��`��������k�/'@��S�j�A��6��@��C����l��l��2G���|���Fy������y?U�!9����:�Z�Y�N�������;8Ug1+FT���`}0	�Pg����E�����6L���yHO]KIT���A��@7;��d��<j���*!bZ����Fl>������7:fgO!)�%����O�~D"���W-���P
��k�nS�D��{�u�6��P�yjI�A�^j���:up������J���.���7�c�s�u��1��q*IK��{x�e.�����g#(X�-���!�u���'����v����\v���d2�{(F[�q���bLo<�N�����`7G|C���&�a����g���)k��-~��s�H���5�������u�co�6{��5�,\U�����S��:��%W����n�e
��aF.�P	�� c���X�~��.
��Z�^^N���6Oi�OM[������R^9������������@��c��M��}^d���~��P��,?����Am�U'��+Pq�.�d�d���4�Y�����l�a�k�L:Z����l��1Z��h�-����d�I�m���������WQC�<��j,^���u�M�;Y2�o��z����$�DX�Cg��K�lp�
"�gP�����]�~%-�S����k�FE�o�x<EX�v3s��$J�;��R��@7�-Q6���Ki^D�/��A6w��u����K��e��]t����;��EZ�N��1������TA��`��p�`�P��M����Y-V���y}'	5�@�z����vl�(*�VOi�Y����Z���40&G!�'��7���88t���
�Di���s��#Ql�u5�_��N�N93���9)�d�������+:_HjA>C�Z�� ^��v�����(BuZ��U�#�������VC�&��%Z�0	Z���lC�6O�Z��	��yG��y�����5D���#!���W�b�ln6����OU����~��%V6��3A4A�N�[E_�C�D��|��XI"s�"!h��e���*:�MH��,���]0�{���w$�B'����6��r�[��X�,G`�'���h�:��)�Yb�L�������cEW5a����*�ly�Z��X]�����}���a\���sCN����q�]_w}~;e?�/�������;�|�H�+���Wkg�&����T+�@;�Zmd��E��� ��-��D��2~���������6
����cj}���I��{9��A��51;*�UU���'��1�i%% ���J@;�{@�S'�8�<��0"���d��uh�iZW����sf�v�Gmv�*����El�r�����eI/��lH����������l�J"{��G�*��N�:����!*��E���v���u����d0�&���v*����|�B��U|q�i�E�����F����i� �YK��
A���[Q	�ip$�#T�����7}O���Ee04��z��\|`[X��#�BmJ��,x���Z/g�_/,����3���e=���=�-8�����?l���BWq�;VpL���tr���H����vy�$���`9��,���zm�Z&���N��I�<���!�53&�y�f������8@��F�6��D,��� {`��K���~��Z�H���(�?{�I1e,vpU��I�8�����;������+3+	�*��q�C������/�?�#]k��u�}I��d��|��~P&���}��n���%��X�K�;�l@�$Q�5(�-O*���Q�����Y�{�6�5_����?��k�5���cO����M6������?~��������s|�G�����y�����2|������y�+�Q������8���s�t�t���"�+,	�JY+�h����o��N��+�7��8ne^-^���,Y�F"X�_����-�L������W�N��Hd^�����A�b����qcD�T�W�����9yj�������#$�Qa��k8���J���pNV����<�����Q9+K(/p���E5�R����)/,kg�2����Ld�\2:��H�i*�M����x�����J����i�U �1|ebF��V�$��(9��6yyi��.���T���G����8}���Df��
�p��>�^$>�8i�y#���Y����Tu~>��9�\��bL�IN�;��O��E$������������J�MH����&Mu�3WU�����7m_���|"��q����k3�$%XR.Mf�!�hJ74/��DP��&Z�
-0�3�5��;�)��"W_��L����$��TkZ���4����>����`Iom�jJ��GS��ya#�"�^5������w�1�2;�����cjj��;�Z�[h��])��.E�����h�h�����6����1]k���b�����/b58@kw[���d�c�Y����-��`��M�NM��� �����nI3���Z�%�~�dI74��3�I�9�w�y1�o~32�
�tC�T��5�.��m7�%Kp��1K2���-�N��hK��=5�RC�m�k*�����N�+�2�Bv��n(��\����-�����c��n�I�K&��,�F$�����j����f�e����vn+uGer+����fSv�jgF�`W���j�w�������D
�S�3�s�m�yK���������dU�:UjTMhU7]�=r&P��C����jV�'5Z�D�_tw��NU87��L�=�Q�[�v���R���dUK0�D�
kgGsQ��6�-��7:P5aT{U���*P	v�#M�Y�~�1�Fu#Kn���PE��f��gl��Q�T� oL>OU{��S�!
j&K�M;���������ew�:�+�A��w{j*J{�UX��G����z{a��\����T
�z�5Pq��#Z�����$Aw0�Er��3:4?���~z��D��ql�Wf�D���yn�!�Eu��(Vm��IH^����q��.hg������@��
��EV����JH
x��WOu��r$2�,����}�L�,����
����ycv��)�e��
�Nz�������;��7��O@R��q��;�ZnJ��_HR����H�^t����Q�i�N,*��H������*v���";���GFH������_���-�3h(.W��q��F������5'&�� U�IBptu3az���1��y�`�:/Y5~�`��_���/�aZ�����HD�H�~!j��f�����}������Q�
gq&�C�q���GG���f"mL�XHB�%�X�h)#h��.5E�S�����w�z/;
��Rsy��n�������K"������K�+���J��	>'�.������O&Q��Y��L�����#9�;�����
��)4�"�
�~%r��,�	IZ�������6���h��d���o��V7���b&��������%R�5vT�xs`;�<g����~�/H^�;>+��;�EB���q��f�gC�+�g��]����,y�nh�.�!^����k���/�+C�:sE�E��p�#)t�{�vS��K��Z��3����Ir\�%��p�>��7���E��R�5��7���s�lr�U}��6���m�l��m�.W��L$�7�H�Vm��`��E�#��?�������eo82�H��:��MZY�'��B�x���c���T���6D��������	I���<'�j������I�o����E����%�?2Om�����;Z��?��g3;Z�F�
l:O��IB�;W����C��F�d��n�$I���,u/9y5����|�LJ�-e�P�Qx��V}
��
t�����"�M?���	�UVGc�[��L_	��*��<<�������o�������$����2;������E:S>������&���H"&�s�k�;��d �`����5>��(�
X�0Pq�������B�����M	=��un��-`����[�^��Mg��}�����p��<�i����-P���]q�D�*�-����B	H>�������-`n5��>oDP6r�n:�f��{���z����*��<FZ7T"a��K
h����O}���-�
>��%���0�>��dT�W��@�����{�4L������/�Bs�2���&�����8�%[g"���w����j���*��BH������X^d\��i\�Db���_���(�J�P�\\Y
g��:@B��GbT�vV�@��Y��H�1���$��=/KI�d;����������I�2Os
{�jc����A����t��gO���LF��Ydf�����p�Q���)�u�%H$��k��
y�*�i�+n ���6�4��m��j�^�g��7@6�����ui�����aoh�����/_�-{Cs^��
M;�C-G<���@�*������[�����l,w�������-6�nQ�����$]j���wr�4�Wv���5	.�f|�����,�����TO���'��u���F�aB�9�Knlf�����8�I�
�9.2��B��{����X��	�Te���g���TTOV�FS�iH��	��f,���!�Sv��,��Q]���B�H��h`G����M�I��7�CS�E"Y��Z��p��g�����A���,��LZ���$��}}��
�����)��#*����DU��/��Kr����Fs�����������L���S�&����P�i�?.NL�`+���1jrYj���>!�Of�������'N�����#e�N�����l&������������@�Oyt��o�Y��I�g���"���x�F��eC($M��y��A�����"
h�.K/�Q��v$�T��q�F���T���"�j���Z�B8���qV�et���$&��;�1!:J����A����<f�N����w9R�u��7�����8b�~�������[�b�`������a�%&�V�L��t���N�fF.�kr&�'��SS�����p�/�lh4>]�Mj�����.A6��m����<Y>u
S�6�_�
Y>�8�������7;��>L�Lm�	I�_����'�pY�d��
�|����.�f_����v��$9���K��U�wf�A7z�:��������i�5�d���66b!{���Q�������yG����F��u���bs�U��s��$�^��&?�E5��$Q��Ze����}3!�;)@\�l���X\��"�c����,�r��;�A���,�z��I/�]D
3f�Nz��R����$���e?���BY��ZU����d���UM�@p��lf���j^4�[$�@og��l����3�`3���qL'�R7B���h|����N���\48��,�7�d���u}E��r���V���'Oy*o��zh��i�,K��f��oz��Uz�U=@��6R=�z�z%`B��J&����J�,
�����>������t��n��L���$
�*2�FLX�}������mp�Jw���R��I��k�Q���m!J������=7
��xQ����b��!�����,����F�B3\�U�����Nma������}�g$�mLNOVP�5���*�e
�9Y���0�X�j��w�R�=��2�M���J�@�vH�!�#�4p��"%"���(�k��_")�����=$�ZS{qk����q#�n�N{VD��;v�������4R�o�eS�|��_=�Aa�l�;�����N]��3�*-����t�j�U�]���|	����������>m:k��YJk�y�����E�����f����>�#�,`%~�Z�CA�V�����3I���0��2�����w�����u�c��B��_�&�j�y�v?c�IL�j \5���Q��O�	���W����`�/�-#r��A�#�����i�o>
endstream
endobj
5 0 obj
   802118
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�=��
 �;,�P��� ISQQ���r��_�{�E�/{��s�;f0�R�/�
endstream
endobj
80 0 obj
   55
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
@B����#�����?}���i)�U��g���0�9�����4�
endstream
endobj
82 0 obj
   48
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�5��i'8�X�b����y�B�L�f���uA���}���s/�
endstream
endobj
84 0 obj
   57
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �>�fOdd��D���P5i���n�>�2��s�����Os�
fKL.�
endstream
endobj
86 0 obj
   56
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��'�A�!DB�l�������9d��*f��A��T}������3�
endstream
endobj
88 0 obj
   53
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
0���S�����K�2c��*K��
�c�;�$��!���4�
endstream
endobj
90 0 obj
   45
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0����St�R���S{��\&��
gU�1tG�������:��j3�
endstream
endobj
92 0 obj
   54
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
0�������8��t(���9"��7���7����L���H�_���3�
endstream
endobj
94 0 obj
   53
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���K�RJ1��B.�nf��Cw�aoDPe���?�K��3�
endstream
endobj
96 0 obj
   53
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0��wJ��T���|��?����^��}p�)�����3!��z2�
endstream
endobj
98 0 obj
   53
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
0���2E�� l6J���[���*�T��v2����������3�
endstream
endobj
100 0 obj
   52
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�A
0���Q�"""���KIB��3�L��{A3V��@w��24�
endstream
endobj
102 0 obj
   48
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
@���y
�,�"�zO���3����
��D�y�����3�T=�2+
endstream
endobj
104 0 obj
   54
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���`($�T�HCH�=��w��k��9P����)���dZ��N|�2�
endstream
endobj
106 0 obj
   56
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��
 @���������%��U�-���E&��������{��D3�
endstream
endobj
108 0 obj
   52
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��_�i�D)SQ�E�T�l�*��`��{?Hs�������0��02�
endstream
endobj
110 0 obj
   55
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0��A��$R:H)������*���Zp:d�7�WM�����=>��3�
endstream
endobj
112 0 obj
   53
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��	0����_"""��!�Z���n�U���#������R����V4�
endstream
endobj
114 0 obj
   51
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������o����$���@����W��"�����������g���w�����Z�/�
endstream
endobj
116 0 obj
   57
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���F���!�3TWWHN���d���������9���d����/C
endstream
endobj
118 0 obj
   60
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@���Igqr�"���B2#�i7B��H�%	(SU�Z�x��4'
endstream
endobj
120 0 obj
   50
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �} 8�S8����!��W��P��;d�*���������1a-N�/
endstream
endobj
122 0 obj
   59
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��wh$�0AA*HUS�y�;q�����{��3���T��;UsB�!/�
endstream
endobj
124 0 obj
   60
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
@B����uDD����O@�P�]�T7�3�����=��:�4�
endstream
endobj
126 0 obj
   47
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1 ��/�g�qrpdp �j�z%3�Lh
���e���]�N�c�{?Q�1�
endstream
endobj
128 0 obj
   56
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0��������8�r����)!	3�^k�N&T!uC�/�����u�3_
endstream
endobj
130 0 obj
   53
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ����	��q�r}w�p/s���D�������A'3D����u3
endstream
endobj
132 0 obj
   55
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��	0��3Gp�"!�U����>�*�d�d-^{#BS��{9w0�1�0w
endstream
endobj
134 0 obj
   56
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	@��_�G+���r$D���U�O0[��&�H������4
endstream
endobj
136 0 obj
   51
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �����	��EA��j���7��nkUq�#2����x�*��z3'
endstream
endobj
138 0 obj
   57
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �-3��X9�H&	V""V!�6�E��\���z�L���/���&gT��Q$/�
endstream
endobj
140 0 obj
   59
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��!
@����K&���Nae�,U"D0s��{��Z����
fk��4#
endstream
endobj
142 0 obj
   49
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0�����N|����v	G�`oT'� 2��^��
���Z��N�lX2�
endstream
endobj
144 0 obj
   53
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0Ak�P5U� ��
`d |�[�"��n�f �
��f-����9���=�.�
endstream
endobj
146 0 obj
   58
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@���K'gq0�J��]0#�����o�*���M�qG���4'
endstream
endobj
148 0 obj
   50
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 E��?MS ��I?
����D����fd�c�K��$�:��{y��0g
endstream
endobj
150 0 obj
   57
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U�Qk�0���+��Xe`������-����=�4��hJ����wS�c����s	K�( X��NB`�Z&e����kd�j��^M���G|���C���vt�m�R%���s��H�!�~�e#m���F��u�lv}�i��j4�z��\p�8�O������W��t����M7F���et8_-����v��Q�{g�eE����N�D����1M]&���=���j�m�>�wR������)���g����������`%����m?���z4���o�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 505
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-��K�q�����$x`��ex�I�K��22')���0AS�ZjVh�M�d�A�6����_&X���#!{���E'��n��\��1��0��1e���1�1��i;�</�����D�ye��i_����XY�&�g��Ry���n���d��,�!+-Y�"�3eM����u�kX����6��-q��.����
��,;��9#��d��|���=!��zZ,����~9�����%_1�:Czs�h���#'=���|�S�r���%����_"-2�'�����Ev-�k��\9/CN�V/�d���Z�����I���^��5N����+?��@������Mz��y�^c�������O�xz����^������^\K��_e3{���u�^��Mv������Z?d�����+�^5�j��Kz��WD�+�^��u�^��u�^�������i���]�2��B�U��^�Z`�"�>�k��W*�h���\�����E�����H4�������h������2c�Y��
endstream
endobj
startxref
842590
%%EOF
mac-mini-result-2.csvtext/csv; charset=us-asciiDownload
mac-mini-result-2.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����.��8�S������sx`{��#�S���py�~|�R��>h\�{VD����(��$�~m�������~���������zzo������������m_���K��?�����_����;���^��������������_��@�_������E�q�O�|���"�����"P\�O�H4.�W�4.^w�4.O��.n��m���|h\���>_������-�Q\|��g�t�@\:s��S���1]�s��S��\g���D���p��v]�@\zj���v�kD�b��E�q���@����E�qq*j������@�>�"���s���Si�\�v��"���l�"P\�Si�\�>�����~]��|���?>
d�~�>lt����h�9��s�q-���xe
pM
�����~�%��O�-���8	e���M��f��S;/����?5����uJ�{JW�t�/WC�����P�g�qu���W��Y���P�Y�����Y���P�Y���s�e{���6������5��P�Y���m��'_|�k�q�_I�&-������|��������z��>u�}��i��g9���}��i��g�F�}��i��g����}��i��g��F�}��i��g����}��i��g��F�}��i��gy���>IK��IV���O���}��<6�����y�dd���?m�o���Pz��J�}T��8����66����F}H�r!�\�������!���q��*���r9�\�4��`<��������s9�\�����rr�������?}��u�j7b��{g�?��_�x>��u��|�Ai:*��xs����:�2��k�U�a�V��l&�7����W~�c���������o���v������jw
&{�)�.��.�w��:}�������������;�i��*	Y;������g���V��Wq�����������F�s�y��Q~��_�3������)�	)��!)���5�n��q������l������KaRPf��@��j	��]���_��P��Zw���>l���u�;�4B��?��>�=x�IzyW������\��?��Q^2��]����_W!�<�I�������3�'=5�5���Hx��
f����GR��>������{Q�vE]�A���������
z�1����d�$�	jPcQ�f�Xr����V4�)
��=����,�-n.�]ZE�Q79p%d��u@��(	���@(��������z�]:���\O���1���L|�fz���	�6������+������t?���?�]����-!���M�� %a��b��+����������w�T�����)�Q�$04-�����UB'^f�~^�n���2	��I���D�|$�`h��]	�n-��5�T�m`����82���������
L->a��f5t_Pj���;o�J�PE����{)�������r�8*�B|��n���k�d0f2��[�(���q��D���9&nh�w�=j�*w{����+���}a������'l������a� ����t���1jcQ�]�?}+��O�><?_��VS
f>^���M'��V�����y~L7��p�����?@�Tm%/��R"��Dg%4�����.�4]����������U��]�2Z�7�O�pB0R.����3����@G^�����Co���e���R+	�3(�0�x�h;�2�]oNU��T%U3�~;,>�����
Fp���0]�y����f5�u/�B\ ��wW��F���Qt�*�mM��6�t7zCY
;�]����!���A�JR�/�u�O5xS������D�.�~ S,�����D����`Wb�{9`N�#�K=Z��j���wk�z���XsMC�BC�Z?��H�.C����
E_�1�_��>��(����K|�w���?�u����>���h�bv��a&C��������������MM�������J��o%C|����9����ft�.	����K[gB��*�h	>�l�T���}����~�����$�>V;�{H��"&������u�����s����t�i����`
:�z��<�����E�k���B���z��yz�/�;c~�]����k6	c����-O������
��1���av���`�6����y��[��V$Z����	��b�38�f9��C�������we�������"�|Ay}��fy��2�86�������V7���be�)��m��p-|�p���?Y��.X�XK^�l�6����*��U��C�#`3��B������/��7����mv�����Q5����i����N"{���nN��X��tqqB��aL��Y
��&�9�����^\����t���t������`io"���T�	�����N���S���&x����%�
:R�
��z��b|���	�Hx �����e�a�Y��'c2����=>W�����&Ew[����uc*:

�p�����FYv����M�����5K�0�����������w������8`q{�/���.t�w����Q6�9�;c5�]t�XE	�fg(����Ph���������PQ�6>�3��e��Q���~3��b�h�wC��BglF�e@=�@��d-�~t�w7{����u@���Gl����<��;-��|�@Ox	����������Rb�	�3��M �B�!`�2��=���6��w��*����f��w�r���Ug��^����1����h07�[]h_Yk7��2a�H7�.�7z�i����mY�W�9������j�tPa�w�������R����tc��i��w��s�.t������Y����GPy�Zx&���y�,c ����������������`���6�r��!U����.�5��y&�~'d���f�k��	�d6��k�G&���e7�����������gt���W��"��V`Aa��.;�}���a�3��J���m����W�L|�U��>?:6����:��-<\&\�Nyl\��|Il!��!�[Wt���20]W�0[;���&xl\��	�Yj�������nTu���fLp��
��Io�%��B�!O�����k����?�>�NXc��i�����e��y�~K>.-6/��E}��	~l�� ?�o��/��3�������0��kN����1�7��:$��u,����n���V��bh��`	����e����Ix�w%�[U�l*�Pf������0x����;��?��)n4$���]���1�S���M9���(��TuLs&�3��
�_c�����1�����k?���k��;��^�j���.��+305�a���$J0��7�:���cF���1|>�V�+������Cu<����"�3�i6:��hm���1|��(I��U�#�3��&�=�b��F���
���T�H�}p1��JY�us-���vZte�����*/�$�]��S�?��'$� v
P�k��U�CRE�jK���gV��J�'
^4��v�aAS� ����la
��	;���Bhj��s�Z���fQ�����jW�>k/�>G���]�n�8��w���	�k�&:^��N�;�eHj��3��-t.4���nY�!xP��X���!�s[���8����2pl��YA��Ny~���T���HnUz0�S���/ lj$�~�0��9�'�����`�-c}��d��T��=�(S��%��)������s�������Yk��PQ��"C����r�GL	�����)�HO��c���7�[[��sr%3a�u����-�1=��/��(�VLF�}IeeS�����bJPxD�O�������`�C�,�j����G�[��gh�������l=�G;_����w�����]��M.��clW����v�S�-���=?���+*3����~���De�r���a�I��_w-�����T�����4�����E
Hd��RL	J��x��
��D�a��XW�0$T��Q{��F`K�v�07�0G3��1����!�3�1�Q{�JDC�cg����vi-4���$��^�<�!u��@ji���G�~��*��L��~b-���2E�^�O�zk�����2x�����DM�f�=1��{@����U~P���#V�\Z���#V�w��C�a��N7uv��d��)�-�@;l�������F��p�Q��:2����Nv�9��v��8�����p�����2c}���������bD|q�%uYR���Wx�Y�LD�;5�L��
�I��FX& ���������Uers����|^�|�����bC��0���lg�����^��r������Q���m��w��}�{�6�D�Gq>u������}��A�R`��"b�?��cA>��V���<ZV�2��$�?��?V��v����T*�0�g� G��ao��"���
�������dL���B���	�)D'
���qI_���ZG{�hk�&�Y��f`������5"��>�LZ��yj�������������<Sc�U�������h�����bl�c�]�*=Sc�f6|Se�p�,���P�}�x�+b����X��Q���>��c��V�O�N��O&�&��vd%0%55g{�$�gg������}�O���T6����g�D�����h��F���'�������%%���������Z����q
�)#|��[������������tP=GX�
�CI���W�'���N�A�0��>AMkb�&�P�bL�>�]��%�F�rFe�����ja %�*����oP��
9��jK*�Et���0���S��t��2��?D�����3��#ifh���^��zVT0����S��)$�����17�VF8�v<��n!�a���V6�m���A�i0����F��"�� ^��-:���F�j�s���M6�G��'amd	;NL	�W�3c���������������Y��)Z�����1|�/7��Db�q���qn����*�
�n3B��m&�	1��e���a��}I��2������m�t�����@��!�^f���K�h�=W:��G�Xs��L���������1�uk�.���s���nW���������v!�yP��o� ��"�3������1�C���[��_0nq	
,o+�a��Gw�i��^=�
=yc
���[Q����!��tL-�����P����sff��;4��[1N<�"b7:���=mbJ�n���!��]��~t�����[Q�-�q�1Jq�nG��f����n���v0��.D���=���$����ny��V�����?�t��v! ^�
�)BQ�'�8�w�\xW��tg"4qsQ���Q8�`���5����t���p553\�� _&��m��to����P���(`�Z��Fp���k"(�%�=�E������,��A��C���{�����^���:S�j�p��o��f���~^�	�6
��B\t���L�]cz��`���
hR�G�j#����~�������t�R�Cd�q�O����?����������Wb@��%������>���{�b ����xv���������7�G��w?��07l�����>v��T0�CY��_���.D�]k�����)3a��35mxl6��>B����ZE����&
��a�5l���[{���?�}+Q���vk��q��1�1�b��v�FC���	|W��z�k.+ex��~��1�[�	cL���k�u�����g���M���J����a�6�1r�LG��2`���B��Z�����Fw�x�!n@���KV���� �)=C���up#<�`c�EY�Zbq�of���������[�H���?l�����b�p6�o�&����K��F�� �>Y��[`�%�C�^�:����g'����/�"�������|���a�o��*X�=��S��1�������i=�]�+mB2<��U?�L��p����f&c��#Y_�73,U��k�YS��o�Lv�h���D���� Vf`�A��E1c��NR���_\1uh�`�:3� ��[�-[�����H�
D�w�9�F�Y�1<6]AJ�!����;������o<W5�Ed[P]�����X�f�0�B ��M�E��Ogi�N�O&I��o������	���q ���h/��_l��(�i}p��|�/g�������Q=����:�0y�tP��K���}w��@,Q���$�)t���|�+���@�i��T
?3�V�|����J|�ae�{�a�5�i��c����Q���m�=�~�i�R���O�Tb*�����RC���0�%��,��w<��rY�#�3��3�:|����L	������<�r<:9a{���8��_�N�Af`�������jf�CS:�xj�]����L8p��;.)"��AS��s�[1�&L����������|�L��p��Z
��V�������G���U��D�F����"����1L�{�9������Sq;y�6O$���C���wKJ�S�MD����Hx���HP��TZ
�<�C�D���q{�Q����f�-�_��W�1ff��#Om�<��D��T+%
��u>~aP>|LG��
�L	�S8(Re��<������
��2e4�sn��07����p�"�D�1��pi�Z���~tR�����OyGtT�kT�F=r�S�u�Z8.E:d�|W���2��v���SNQ
R4��Pa�D����e���Z��\���_�U]e��n��8��QNu�F��R��y3����
u�G��]��Z5#S��r���p^^Ra2�>�	���7�G	rJl�Js���~��9��Su$93�[�x��u(�,r����tbK6��j�a��)��+c,r�����N�Q�c����)�]?ND�u�E�����L	
U�*�IR%��`3Zt����;��q�~a���-�X)���[T?e��r=5RlVba�I���xG(��.+�,7iN��S�!��7�g�n
��0���B\@�Co�L�5������������{XM�v����b'��2����f^X��e�����io�,��}��&�v�h�d�����CN�ms7�T�Yf��q��mQ�3���gDeX��A�5($6|x����(����y@]-2��er��a8z��X:�D�ZxW�m�M6�@�87��������Pf3��������=����lJ8�)�����h@l��X�|�M���M�� 4d�/Cf���)���0��)�t�����m�7"#�!�<����-�S����#����Xf�|p����q�u�~/��������yK��*�N(g�L<���8lCJ���11�������#%S��!l��������i��{eX.�C�B��g�����}�����>�}n�CK)����X���7lo*�"P��@�Q&��B������	����t�Z�vh�z��/&��
\c������i*��L�]-�v0�����9�l�����~�w'��i>����T�z',^�n��F���
���1Nb@��d�o�+�0�E�1���=�1�L�,�@���>���%����ld/��qbh�<5
64�����3���}�9ls�GI��W���,��M�U��3#S<��0���2a�;���yx��0a�o��p2����	/���:��u����78C~��A��t� J����<d����%�E4���m��v���U����%������#����%�1�����Y#f��uI�PO�����4*��n�rc��`��6NZd��h{�+J�]���=g]:��a��q�B�������fPM��S����h+1~����;a�o<�#��@��8�������N���p��a������^��J�����3`�q������4���e���?������~���t��A0��@p�.���)L�;s�pS
�'�|s{	�[j���$���_z�daqw\7�����m`2Q�z/?��-T��)�=�O�\�?�|�C�w��?��K�*\���q���#�x33�P�8V���ss�SP��<I��4CH'�s/eB�Y\�*�!�:�AW�.�#&�@sY���n��' ��M��{�X'���J��������_5i^gB�������������i��.e^�Lm=���$H	��=�yiz7��v~�`>�M�ud����1��[�^eop?��Hu_O����j��2c���>~��3~��s	�����rgq���)���w�������Z�#�u�0���
�Vb���C]�+f������%l�[��������5�u�A���]P8.�'KmE�!JxI~��������l2����uf��� ����4���A����]2"bV�7�^C����{�?d���0�NItmY�][h�����|�����|&J�-&�V�7Y��}�C�)�^�����ZB�-�w�+��:���1���1�J���e��{��U�����f=�s�T0���nLC�MD@W}w�
��l��OW2��C�I��LG�Z�"�a�,��IY^�z����3��F��.9f��[�p������1���X��R����r�I�Y��I�->}/I�=�%\���a�H�o���~�(J��twn%�7���������\����J���	����B���	��R�-r<&7�0���}�2�Lh����r�)�����x$�Q�����&��Cl����7	�l��H��g�Y?g"|��l�}��G�3A�]�aL/����L?CZ��t%�w��g���xO��x�&��^�?�c��|��l��X��
{L+��aH2��L�Q�qBqoY���&�D����d���DOJ���Ek"
�3d���p������17K������Q�h����"=	W��������I�.a���(�5�������}�2�@w�5l�=IW@��wfHW�4	]�f���Z$ik7��S�8��������A��B��,W�J�Js���$R����4�{�c����i�,8�,������\���@��Q��{�5�l<=c�f�����a3�`$ ��g�I�n�=����Kjh"��j�����s��3�A��_���&���G
��/+j�L"d�E']�x�%�0�,���|_�L�� ��\�Co��0n�d�.ZW��w%D�K��ZL���Rnd�G�Ih�����zD�vck ��J��dD�����U5z�L��u#���T�
��d"db��������	���3$yHZ2������ oh���R�����6Ss*�.L�U	6&��
�e�k,�>�����{��zXo<R0�5�	���X�Y%v��0�>����
H�]��hJ	��*�C?�}G��]�������9L����4��L�sR����m����+��W�o-(���@���)|#��D$����{7K�n?�5���t�,���#`��:��f%p{b��D���a�e�����4��yb�W����@X���~�]�H1�������X���]���
���D�9�`cv�'"��/=Z����G&j@w"ND����:����.g���=���t�w�n#��7��gT�\f������7S�����D��P��	y�aP�Y��N��/ux(���3�������J5Du`,��EZ0eM
�~X�=��hS#�'�lL�n��*�.�C�H����,`\����cl�b��D`�Be����`�������R�1���#���;�'���L���*��dG8�"��>���D'O ]�w�J	59z�0��S��A�|W�L8lnX*���o.J�t����q]��5�8�L|�}��A��&<�.m�\��G��'�cn��������L�Y}��cr�
��@o�eh&4;�<3~�xz�yn0.W�.'-��`#����0�1/�
��D�f����mc^����=�tLM��Af�'��IA�n�f�S�zW�c"�����,�o����k�_s���������R�-&��w%bVEv�4���[x"|b�x�'�����A��-��d���n"|v@���!��Y'B�C'���u1ML�������
�8���&��BGh��z����#d���b��'}�N���S��%��� qh\�,��*Q�j���U�q!V�"����~
���9������O*�����O*�����O*���r��(��s)�gr�?��WP����q�`\C�(��<R{a�u� �-��������,:\��JW���<G��J4d���^�������g��W��v�?~������Yhza�lA7���_����,v�������?S}�����x����]���m_������������[�#�q|x�T��g��E��:1�X����u00N=�V�L�����i���A����J
|?�Y�W��GE�	���s��?��Q�	9���|b�@�0w�
q�\����S�=�~'���G&���8�����2��~�=�vU>�@����0���-u0��/Ke#����D=]�gl��CN�#�j0&^�+aO��~�;��T ��������z'�Ewf����Ivg��eu	����w4(�W"A��lO�S�o&S�2��o���Op�?.}e""�j �gx6��� �\���2��~�w0��o'�3��J�73���U"a%���k�Cf\Ff�-��E�����(�Y�!����������l�pfSbb�� Q��7`k�����/2f���|����NoH=$a�u&2D)���
X?�S���0$��������}����-�)A�[x������HD=���~t��d�{b�`"���~�P[dJPF�q������0�Bd���F�����a`C>J��D���%J��s��s�$"�Yi%J&xhoe2n�F�z���F��W�|#�Y	.~�2-�Ac*�6����Z~�!S�/�b[��e]�1\?�2������/S�Q�K23�7BS��j����^�
�����{x8�������j�c��'��/LUxN��;�K<]�r1%(��QT��O��gw(���3��;v>���N�|E�/����	��6�E"w �F�5/
A����}x�.U������:��CLt��	��?i��Nk~WF�����I�Bk���6#R����0�TD��W�5T��`5n�!c�����<�����%����W��q�O� �.e�{�G.p|���,/��A���J�Z�R���b��G)i���YO4�=AV�%A%�pg���V�p���9=�+:n����P7y^=��yl�I�]�z)��C3m`�^�2i������a!P<�P�F!1%��Mp��M�A�8cJ��p�oj��-�h1nv.����s����@g�������)������&����+}�-|�<���d��R�E��^�0(#���
�o��(b0z:�m��E0(d��$8>��K%$�zr�Qo��c�1M9f�"�h�@
�'x��J�'�������S��3A��~��z)c������2�3�4NgB����z��gf���*+�1��>�h��3�:�z�k)F�X�\?���ZF^���0x�{���G��1��G��C������A���tB���l����uq�-����1=����������Y�P��[��:S��hMr!Dr4�]"��qdJPF������+���p����`h�*����)��[����(Y8|_����ha����
���������P������p�i����F�d3|<����ldt�S�5���l�0�	�o�'�����y������B>Z��1=�p�
gS�����4�&�p�U�7YWP��}@b��gj`�o��<���0(����Y�k�|�����t�C�:���3������a�{�5T���\�4��.=���Az����+��������R��;�D��T��Az�+K���g{as��<���n�a��;Dr���~�`��M�8|y���E���W���%$��k��H�-�=��4��>w�����p����7��6��{a��v&����
���}T������eN��{a2���[)Q��{a�t�~�[���s�>�7 ���eB7;���J���{���;nqO�L�r�9%�.����n��J��K
��Iq�7��#���D������3�H���F������y�q����QI=�fCR�u��{a2Dn�=|s.&3c�9��������0�j���	_GEb���I1q<���u������K
G������[) �/���23���;�Qwe���1��[�I���73!�#���O�?|�����T��3n�$Rt@G�<[�����.SA�1~��1�^�&�/M���4�?�C�?���4E��_Be��O
U�Q�\B������;c]�P�#���i��a��2L:P�1~:�������1z>=V�{$P�r�n��{���$=Q���a��$�O��$�L�nqC����7!��%>�<7Wx.������J\���1z.L�����<���_���Sn�s��
�8&���8����y �����9�7�Z��L|�w��z1��H
����$�}�U>��(�q.)���-K���%.'QU�CNz�H!���R�+%�$���`��{%2dR�pN5�j�n�DQ��}�����`�	eK��=��Z�i���0H*���S2;^�3-fKV*TW!jd7���Dw�+�Q\�L�F'������\7�XN�-W3�����D�J�r/�k�����5i~�oW^(`�re��Vy�M�����5f}��uo�D!��v|�c�P�/{����������:~�7c5����E���m����?�a�9���$���������K�Tq��D�a��xEX�sOXK)�h�������~�@g�Lx!�Kc��VP�� �v���\�(m��1�[�?��ab�\��Q��<����LP*|�����Q�{�dv�������d��d��5��>10:��������q�i"��^��u|/��b��R�aw%a`S������]-������<M��"[�rn����x1%������02p�q����$_b�Q�@i����������L<�'��m���H�~���i���.E��p��1����Q8~D�
c�0��D��d�!���RQ���}���43P��]fB�r���Ad[��'h�W`���G�*g��E�]��7�BY4L��n��Q�� ��}<��=��3FX��|�C����T��
�A����t���2J=�?9��<lje&���+��Sd�@5��E^�<��WgLd�����EU�L���o�O??�P���s��s{a��2\`;�{&*U�������v���D��W#�mW��y\~!� ��d�L��_���=<�d�7}�`�vI���'�!��/*��r�;k/Y�3Q��N���T�����kM
p�2�r�/��K{���	��&�F�y_A"8}Z<C���o���O��-gL����9���6kf�������I�����}��s�����/F���l�W���%r��H�-�l|������yU��[.1%(#��\+s(���V���@�?�4�/�2]�����Z
�
���8a�ie�T��5�x6�����^z�s��������%���l����~"
K�9,��b�?7K��a�gsm��V1NX+hq�&k%�{%S3SR�7~�,	�����'���b{���0xk;<��u�u�*a�-��R��X��t�he�$����B�	�#���awbWp����(�)AA������"����s^-��N�2�`�Xi����f�~��c�fnO��2�1�PO��A{��6��n��rs�y��fqe "��8@�8���k$*�BSW�"��������/5����V�>��i-@���;��X�
^u{�{�y�?�����[]�s����0�����r/�?AT0�5��A���%���r��:k�4�{9WXKJ�SZ���R6n�/Y��wA�u�<xW���f��������ia3m����JC�;�[�wf��R�J��7-+�y�)���0���b��UG�n��9�}F�?�������
���Pk�/�
�@�S�KN��)$�y1�4���xW������7���>������%���_V5u�%1e�EHxG��E��Li:e>���I83����F..��J� �0�^�W��{��JL�W��h��w��vD�_��n���CP/�1�P�{d�
���e��y��O��3��y�/��Z�D��G�WB�d�/cVU���n��o$����=C�XiS�M:s�>�H�Mo&4��	+�o��mm�����g�������Hc�#*hbn��D��^�3���T������G`w7�D��V���y�}r��Bx�����,��(sx�v���Y�m� ��}���nc���vH��zhr�Y3S@Rnh��i
�N?�����ev���%W���ju(��
-���������J��A�
�~6e�8�Z$U23�YL'����^��a���pR��������[�~U��t�{%r��2N�=��3N�M{z/8��_�py��q���~	��V������a����5����v���������]C�U�Gw�oJc9A�U�u�4��z3�x��`�{�w�b��������B�dK������9'm����6�G&j�m��m+�.%�}b&�r���B����	�O�O;����?
x"2B28���q���`�.���5�q����3c,E��T�o�3��N��^�P'(�����\ f�S[�w4;Ohc����Bo|
�7q	"�< �������N��mH�����D������M�0�D���������>z�k�<�'��L$����;�b������}�D��Z�"�r�@\8���:��������Hyp���R]RC+n������	�J��qq���T�z�;C*�����M��D�yv���a���\�6d������-�Kg����f[	(AF��=O7.�M���+�������._����="�t}�v,���Aw�����b:n|�@T]Jy��N�����q�H�`V=A���o| �� ju�����k��	^��_����q|MK_��9e�\���@�W��E�������,�`�a�N��IDt=��t�G�h��yz��p�x���C7CC��I7�1�P���`3� ��0%{=w��s$��P}&����]O}4#�WK�{�����Gi�fB�PU�	�uY���i�:�����9U��	�����#.�qmQQ\�3�4������Vf\�'�����3+	G����"��.<Om�����0�����~��������;��F���	��j&�����Nd� >������>n�����������#k��aZq����isX�.�K1�X	����P����,7N0\�o1/��%�J��:��`�����(��t$Y8-�;�1=���l��8���9G'���
;��K"]F�#�eu�~oR�����d�����b)�}��z��9�_��Q�b�&8*��U�V���Z�vO~Q����H<����AZ��k�X���.aO�WXw�'A�&��o�����*�����U����w9c�j��k6	��J"���4���y��'xI	U�����+��{�^y^ G.���*����;*�y��:7����oN	-��if�mx36��������If"���=�>C��;b�z��t$jb0�*B��lEE�@����w�J�v�����g	�t|�����4��a�X�g�P���!��H�/u�@j4&�Egj0i=L~�|���a�J*�=�G�?!O����;a]�~=�'�h����fD0�2��!?��Z~.OyO��2X.&�|�'�`��]��e<���e&����;M��x)E7�GZ����s^���#zgl_�)�2�^�{g����oU!�6��)e!8H��uB�����g|+��V��'=z���lD]bD���O���`�.�qwkc���d�Y�~1�P���/:7�s����g�A�H�d��H����T{g�_J)}����J��~�������3�#����8PZ�#���z��������[Q��Ho�,������A^I"[����$7��	bkZ��ah�������5���v��}pFRs��Q/d��'x+�#��f��[�e�7�:;w���}ko�������-{����������H�R��C3~5q�����;���gy�v�������p;u��z�H��D���$W$�@��f�"�3��������/j���4U"�~@�-��]��(�
3�#^&���z&�3���j�#Y�jE�4���
4H�f���2R�#0�}��}��~M����pp`���	�[����!J,6�]�J�qW��xl������AgJ��d��s�d�n����4�G�&x(-���<�Hk�����c�["fQ���+Q��},C�aI�w��!vV oYG�'�e�IX7e��q��[��� _h#<�GF	+���juW�G��pU�
��$M&����U���vn����������2#�~r_�;	�o����� ������d������������~����0�u�'����
����,+��]��kWO���p�'�=s+����;c� "��:wO�g^R��Z��������QZ��\D�|��dj!�i��}�2����������B'\B��-�QU�d����8�����/N��	�M�KafD��HYp�����{b�F�����O&xg���`���h��"�jG@���(s������Ip�6����n!�;���&{�hs��Z��Fz8�
Xh�������w�.D�$��R���I�,n�81�P��$��}bU��^��5cL���Z�� �:c�H$��K<p9A.'���=3o��CU��|H�x2�k�����i����;�eA��hL��R����x�h�_N)�:�����X|hW~H& C���������3��g&l�$y�R����
h��vj��_��P�o���<���K���Ea����� �:g��&�^p ���(�-D<\�&��[���!��LT���W�U����W�c��1�o!TY
����!#�o�E�P����;O��[N|P��R��4����S�?��2�����7�n��vp���F��N��U%�T��ziO�!���K<�;')�3>4[�,���<���}��!�r�:�wh����i��T�������^�>>��j�qTl����lN�:�g��{2ix�	x\|B��������9����	�L�*�f���+c�����>Va**������D4�;�BWbb(��h0`�D3!X��s�z�qu���j,c)��--FI��$�W"�D@*������%T}������f��2.�+��g�g"���j�z�+J�0�E�A�S/����5p��:3�������� ��D�����I��b=p"`�@��YwB��N��v�����*����������f�+84�8��QQ��{���REe���5c�7�{7�����&\�6����bx�l�.��*n�l�3��wg9 z���!��1���-�z�������-8,I��H�&�,t!�Y��gN�H��M�
_�y�>(���
k��{�����]�M��?�����_���_�W��R������vS��
��r���|h\������v�1.�k��k���E�7d�������gYlA�|�J�L�e��H�my�2�&�'#�XL9�?+�`�j��������a�Q�<8�4����2H�.�k�.OmX��L�<�S@��$����N�=�	������X�zg�U`l0x�l���C."`Ao��_����d,��vX���9V�o,�����4\}��R�]~Xa"�����^uHE�k��4N��/"�A��&[�:}�
r������|/xB��n��Kl�;�����'��B����	c!�2���{U�����L���5C�����]�e�c�8����8����3����:V$+�x���0�A�)f��������������J�0�f���>_:�]�dh������O�N�!X��2���fB��{I�h�m�E;p�]NF��v�~8a���iI]���`����i�+L���u�-t��nI�N�<�Lh����2�VR.��TNf�[��%4wE���!��U���S�m��H��F:,W.�yl�G'J�1m_%����L����R.V�\���������Ra��
&CT1'{o����+��D��d��P1�����C_]�e���|/�A�2F�Z��y��q7C�m�d�$J&a�`�3Q6��)�C�d,���D-����]��f(�	;��9��`�ol�.�14���gZst���v.�]�_l(��ZL���;��N�sK�;_�[�����/;:���n�&A�����A=TL��Vw�@���
&Cl?��Yn�G���],�L�/S�V)W0:�"���b&�
���+a;TL�q
���j����x�	a��6�,����
�!�����S2�~9�T�>#���v9m,�%A?^����0tK���F	?xh����x���_�j�����9�}�L����r*2���	��C��t��9��G�R�K�#�������)y�����N[�0�J/U���Q�e�<�t��=_�m�*���,{r��/f���+2�dl�����Dl����v��V�/m�rL�^�������J)��H����?��d�����U�o�~�Q�	#���������/0�����G����i�9Cd����I��-��)�:���TW����@�|����_B��7����1<Y�%!�d�����������`�?oyE�l�=H^�0�b�,A��y����T�~�kv/�nL������������>�Cq��E��h�x
���U�� �������m����&."���m���k���o�ww�E����*RX �s�8�Qr��r��l����d������(�F'������3�W���"�T�}�L���f�����m��6�]�M������g��j�
���Vc�p�4P����d��l-��e��]�����M�[q������o��J���!OwU^�#���[?��7G<�r{2�D��	v�!����p�`	�����=r>e��h�
����%	069w����Pe d-�����h���v����1��#��	3-����!N�1������8
l����$$�� ���Ah�Ai�0o_m�\��������(��$A�Pff������g9�F����8�6!&�z�fb���$n�!�BB6�O�.��50o��R.~�6��������M����3�T��	����Lu?��=�L-d��mX����}��]�j���}�`��t��**������b�]kN�$��������D7���2c��Izz(�����e��<N����	�|�8�1�3� ����+#�_~ ��#�
	'��K\��.G��QF&�d4-�����2��K��p6������T%��]	3�w=r=���O���Hgt�`��|����o���z�@g^�~�>��$�X���2�K������;���.<�H����2��!�^���+������B_{����:�e��3 Z�Wi�G[���%��{m��6a���\�Ih:�(�dS�{��ue �J|��B��(�`�8��"�Q<���Cc5F�	�<��b������#6�q�g�q���
�!�����<!~G���$�k�C2<�>D�q��l��C��P���s����~�>�	p�R���u'��w��C��������V�����x�6t?.J3�#��b�a����K������&h�~�h���c���BH��V."�[��	����G���P����Y�`��@����v;$!
-0�z(�DLb	U�(�Wxt������:�`��G`�{@{_����y�9��c��U-L������mL���}�\cF�:m@%���~���_����wW�d^.ao�;���0�����Y��q��L�0834%�A���z��OnJb[�����>�7���8�:�z�dr�$�42���M��H$���2o�7�a��aYf�T8=KW��\�2��ph������q�1�bF;���n�;�y��cM�b��`�zl�`��N��O0����!V�/��k��"�}Hk���t�>g���kq�|�MX!�o�e5@tm�$�v?���#����m��-�e?+���mE���o�/�<?c��g n��:C�2.��o�)�a���E���\8�TqUJ�������c�#���D��K����������X%���i�2�H�h����[\�\x3�-���f��(�B=mXlu/aQ�a\Y���0'2[�m��thG�0%!��m������(�.q��	��R�O�q�=������g������!��	�������p�y)�
1���A��V�bh�	�B��?|��EgpY�z�u��k���e6�.������C�w&XZI�,�0J&2�'F��bP�Q�bF�^5�0�b��0��Z�7�
}��2]
�2���H�\��L���s+3}+NZ''c6~l���^a�'�����n-�j���zk����GkZ���M��3�k���7��Pf�zy���3�����zi�1&�lq�;7�*�q���-���=�U	�������FD��x;d�j����."�6��S�	����
��0��-h[��&�&&��q�n�+��Sn�OG��Y���{��y�@�����A�VE[����3IT�~��g~<��Sg]����GWJy��Op�����=k~+�5���
�xm�f����	�gG�Cu����V�
�g��,V�������(�����q����kI����8����������:���7��7����������@���.�{����e�
���1��c����>�	����K��4��a���b���)w�����hl�NQ
����=�Qk)lW$R��	7?��a��i���h����G�5���v����i@t�On�Ue�=�T�iQ@M�&l�����P�cZ�	 �����6���F�����A���i����w^��i���~J����$+��$�/x
��;bL<L�BqjL����H�c"��-����������kj�/H�O�4����.����3�����(!�9cj�T.7�R���<���Fo��F"���q���Z��#�gG��5����?d�'~����v�X?���t�q*�h����@�[]�{����j����j��U�t�r��@�*�=q�(]�5�q(]��|�����ou\�W���6_�k����j����j�uE��n�����'_|�k�����t���t��t�k�|m�����s�����HbHb�B�E�q��L4.2�_��G;�E�qq��E�q���E�qq*�1���
t�:y�M����k�h\�J{��=�;_��/��Si����T�k.���z3�~�14����(����(��9��s��-�$�q�����5C�����7�h�>������I:�Y:�I��Y��������Z����g����}�������@�j��;��:t��+���u�j���u�j���u�j���u���F��e��n\�����j���u��6���/>�����������k�\KG�v���\��\=W_������gY��s]���\W�f<����u�o�s^���\W�f<����u�o�s����\W�f<����u�o�s]��x���y���9��y<��?����������\�T�{<s�>��kCC�`>��������Fo���1�H>�
������y��<rY��,i��Q|\k�^4���\�s.g�}����#����y���r9���q�|�ovX>��`7�B�+��*�;�����1l~�m}�U3���Ts`�����?��Vk��������axb,}���J����l���+����!���W <���L���� !�����������dj&v%���T`J��R70�������2|���U��
�S���p7��!��qf2�4}��na�@Dqx�7���}���(_OB���J�&���/������'��E@;���E�	�m�t���U�*]�UY�����vK��]D2c�k�<��#� 1�E�)A����"�P��H�]�,�����p�v��D��`����zD������1IP���?~�|�*v��A���X���������2Cb�9c���$���:
��8\���,�g�7��U��Y�]a�V
mup��
M*��l�5�!�3�1��,�^�V)��eAY��Kz]	������0DW��&��"}}�"P���DD~��)!E�~��@�YG|�h��~C�/V�!��V�O5{M��������?:�eo~%F�zzg��&�!�h�/y���Z����Ef��MD�X�������k)Z� �O�����zjs��n�UOE%�1�����L��!!:o��1��>����H��� 5���#?�<���c3�U�L�{�<�b�g�+���&8w5 �_���������n6���'$<3�lA�y[<$��i�T�������/�}T������O�����(�@���A�'�|8JD���^P��b{/��]�l�W�0��7��]�$�*xyCNT�^<�.
;��;@x�]�����4,L*���$��`h�%�S����#x����������\o_���V����OD�0����<�:��~Ep�:��0=Q�����3�.���~ ?���;*an�%����$��D�}��z��$�^P&�����'�S��Wf�KX�Q%�Rt.��}i����</�������d��f���A����jk�jk�a�Y��]5\�)A��m:2/������fg�lA�8L|[�oe���LClo�&E����zgG������AS�������zI�{UJ]�h�����h'E�����a|Z.u���0����7��mg�d�/G$���#���=gW�hB����M^������[�N�����S��
&P����tfbkE*czF�&bW��q�y�P1%(=��'�#4�
�D1.����>��IFAT�k�N�������c�O��^S8�+M|���
&ghb#==C�L��� v�]��.LE�vV�c�ID�e����0F��psL�����(��H���1�%�S��u1s��]sQ�Fg���u��[o��~;|W��>���Gq������
'k��N����@�Q��u�+�!��m�����������M9D�_��#����]	w�d��[��w&���/��F��G���."�e5����	E!Df�P�.m�n��R��9�>D�q|�%�!�7�!o�mj�kL�OCM��%�3������U����1�q�V���:���=\����i���\
O'Rc^@>��U�	�����]�6F���]	#6����EC>���D�e��r�pK�~�M����4���$*���;���^�*T��l��#����_��#Y���QS��O]7v�G;����x@���a��Fc
�����<*>T�?E�!�)����]��j�&�!��9`���9z��fGp*���o����Z�d*�w%�v��w��}�{��K��
~�AD70t�@pe�y��P+�W�b�|�T���M�������?��`��C_�9�<
T�����_�����Hmt�EMo��|�'��kg���x���j��	Y��a��c]���N��DP�����&�t�3�'�V�����M6q��+=��bP���G8��=:�=���ql��=��B��T6����#|�$���[��
�=%f��
	�t���=<`�����4��l�|�>4a�lGo���%g���R��	�e�����Z���)�HC^�^�R���P6��9c:+���`��U��/�o,���z�p�A��aLW(�d���$<�o��%������?MZB`���W�a{B�����3��W6:�.���������S�Lx�W�$g���8�����!��:S�2u1t�����Z��Z�<���X.���m���<�������E6�^�saT�A����Y�����8x:+8���
�K���]C(���7��Z
,����]��:a	�����Nj�����U���H3��i$[3��.z4���]W�~'���O�O�����K�5b���]�%�������b%�������'JdJP���������O����	^����2� vf�4�5! ��C�.�o$L�t��L�0�|�K��a�.J,>�b���`��.d���s�G�����e��cDW���])6�Y:�B�(h�xaK�(&��}���E�D��j�*[�L%����M�	e��o:��������7��������a��������u����:�04��`%�c�dnS���
�2�qj���`;�
^�c{`�I<4@Dg�8�>�hy���1|���������{�����V�����������|p���j�+��0����'�B���7q��]E��#�$�1�t����[OH�Al�6���V/I��m\��o���}W� ?Q�}V���1,h:���^��v|B���B�qYO�#U�6RB���+c��hOR��J\	��a7}�r	%�Pl����v�1/cC'�*����!#G�Mr]+Q��<��E,�gw���Q�Pf��T�+c����HX	w����-V�������mR�K�"i-����IsO�������3C���/a����+x�z����8���{Z��;���n�W�5�&��>�f
q@eM6��1�r�{JL	����0��2��g�R4J#���oe����=��`��,��|�G'�'��%����(��B��a���YMDL	�P���YS)|�����t�01"�����3s��Zx@��.m�S�:���#�3:��| ����}�36��u2z��G�#S�-�������^Q�
(QQ��O2c���Q�Cw#�f���ra5c.$
�2��Brh9������Q��t�z�1%(�1
Kf���%�6���bS��G��kja�����A'����|7+����L�0F�*
��]��y;���jbJ�X�^�j�[$RKs�T?BH;������eB_76�
�+S$�5�dWom\��o�X<�3G��@gj�����d��d��������N�w�.D@RUU*���Ck������<�2����CM�t�d�cT��J�����r���Og��,�O����?�6NW�p��O���
�a��������h�#�G�F�%5:���k ��U�D`�S����c0�$}�`�e�l��g$��7�����qo���BE9�-�K���
�F��v=������:4��5a�9�\�K�B���|�>��g�`"
0�\���f��(��B�)���*b�?��cA�ME
�as-�?a��6"���n����a�P��g6�d���A����D���t%�?a�����6��5���?(S�N�)���Xw������6�^��f��Z�����B�)�5ua�����i���������E�O���1����}��rD#1\S7���~�2��3�0�if�7Uw��,�%d���a���(e�r����1���0��$����O&�&�D1GVQRSs��Hp�p��^	A��6�9��h8�&l�{)�S�)7��IXW��y�W�7�G�?&���X�()������.���@���_����z�	�%��b���\��u3��ggD��^�28:;��e��������{J).�{�L���lk�����tO��6W��tP�WX�
o��.���W�����N�A51��m����0M*����Z�'5U�����Z��lu��pPM����Cu3�QK�S��
9��jK*�It��K��4�~��R����\�%v�/��*�f�HZp3s�W�C(�����1�%��W�2NL#Q�n���d����0����� ��0���1���l8+��L����{�a;���cN�N�-�N�����$.��3�����g��iwM�qbZPF��;�S�'#Cn$~�6��e�:�����N�'Okaf_��r�"�f\�aG+lQ��f���xA����m �	��\��VL�qF`������3F�b�q��^!�q�R�E���7p�����c���>����]f��ND��N0�Dw��I��������ng�����p���v"N&�w�m�t��h��,
`���O(D��W�Q� oq	
,o+�b���������^=�
[���u!����-�[=B�a���+���*��=gd�����o������."v�;<H������G�q���d���j����{lE
� HF�(����o�9����J�m2��ND���=�������^�������?7��zl'2P�����]E\�;��4��0(�YM�\�G��{�O���y��a�|w��8���FF�������m'��������C�kj��ek]7{�6�\���BP�[�g��8Ooi9XY0#��w�lc[��O���	���u�u����k���j+���p<���:���A!.���������bf���
hR�G�j�F7�4��_���Q�X���J,��/���_�%����%�b�_v������L$�3�X[L��������F�u��*��)�&jcg�V�e/��S�3�x����g9��z��_�<o]SY�
���3��[���o\�w"rtYq�I�$W�)22�z���%�
��3s�1iH����a{f����E��,V���6���M��f�0�|#p�k�]�'&��UD=�Q��L]��5+��1s���D�c�~�E�7������=��]�I��+)WMV����B���p�k�!�-7c��D[�����q[d�KVON �)=C�%K���Ec�H.`���;��]�� �~�����D!�=e��Ck/���b�:�����;aE��_��o�A�1N�����vZ���u�D�/*��O��i�o��������\�@���7g~���#��S���V_��L�9�z�;1�W��d8��]T�Z�t����e�������#d������5�������9��+�����aM�{Y}
bfo:_�,5�!&W!,�)%�����TaP�6�r�q	b".;�Q�#�
f����k[B��@eX6!W &�R(-@���y�j)0;�a�����h,b�y�t�$
���J��a.��@�e��5������z�}W3S$��,|�BM'���~(��+����bC�Ey����b����R��s`}_V�> .�u�� �m;���$��7�l�+�F������|
���B$��F(00,w�������������U��3c���o�R(6C�>��=�z#�P�yB�~�i�RU�����TZqBa�R���0�%��(�?Z�`�L.;�53�E���Q�%1-(#`�j�mx�4l?�����r���;�$�)m��	��}#����N"�C����c3��JjG�CbI4�|`Ot����FL���%i.���D��8�����S�J���:���\X������R��m����}��a��sc��������j�m�(�/�3b"R�V�����R�S�UrpU�J�v�������lA��<WV�$����Y�����WE����f�;��c��MG��y��B������m�=�+g����a�H_\��iA�Xy�C���E�'�?L�N�����M���������3��r"�s�96�A�u�?�����'nc?��Q	����z��
��u�Z���{��;���0
�CQ�8� ES�:~�D��������53�&�������*����2#x�G�*�ud.X�*�c�a�D��6=�X-���US12-�K����.'���+6d&�}�*��>��$�iq��m�������<N6������1���O������"������Le�~,������V��I�g9�#���v��X�|����!��u�seg:�1V��iA�
\�>E����R�f��0����g�0����R���c[L�:d��r�5R,�R�L`.�HV����o�BQ�1�:���4�""����D�*�m�W��u(Cq��!#��8�.>�((�w�K�F��a5a�:�����b��e2������J���.�IH���8�&u�(���]xd���b*f� 9�����dZP�?@
�����~~FT��1Q@�5(���K��"�h�h��������;�E�#f�0=�"�������w&�F\x^+���"�3q���MW-{(����i`o����#I��3��&2�����K������%�L���%��0C������M��w��p^<x�D�FZKsu�/l��������\�����Ph�k]8���2Sd�VZJ��� ��^�[������y�FU���1#a��/"A@�.�ODLL�!� y��GJ�EC�~cS�%��rf��3�raZ6�d���`72l��_��������Z��G-��6m� \C�3�����e 0a��#��8����(��a���Ds&�#�$�1��L���i*������si������l�Q�D���R�����nd�R���y��5��0X���c�DB��d�/K(+7�E�1��2��,�@���d-��n�s����>�F����yzlhz/�{�G�������0���GY��=ad.�1�`!�(���C�!����g��	;|94�����:�33jc����Y�_��3B��cQ<d���!C<��,���OmCv�#�M�"7HG&,����`Cw��p�#���@�a�/�r�L���������i 2���n�r9�\�`���;��^r��+J�]�����O����F��Ej�"��������Ivx���m��Qwew/KT�@�!�,��	��A��8��[����.�Y�p��4���������J��`��I������&�"`Y<O�?�P�WI�{�����x;�+`�D�Q�F��JOa!`�X�����;c~�7��`���L��A\��|q�y6���q[��3(w����q�L��s�T���� 
����~	��~<�y�C�3'��C�~a���8�]6�m���2�S)#e��F���yNA���$u��S�t .��,�<���T��2y�t���1b 4��:�F)}2��{�����g����&*Vk���E�:��$��,n,�N�������I
�H����� �-{r����nT�`�����$>�M>yd�~C����1����^eop?��Hu_O��YG=\`�1�B����w�}���%���P���M�}IgS0wa�������$����d�9�l��l�Pn%FO?(0�5��bd8�Jm/U�r�jd|�L|rk^���q�d'���B���XjI4
�(�%	8�M^�#c�&[��b3����� ��
���<J�)�G4��$�<�N*
�LQ���W�'M��#a�Rh���\C�q�/5�����G��$�B�o�
��F� �_�/p�2-�%n���nO�}��]�����W�71�9�8F�Si�W���;�v	�T���g�2��p>y���o$J��K�
��l��OW2���m��&��`e����eb��\�S.m������N9fS�M��������^(�obK��J�B=��W��;i���;���������-5YTM���1�����%]�#��T���N��*�p �E����%,(�����\����&��b�{'(2
�7�qN>n�������~��f�8�hw�M���5����un��5���:4�����}�o�Y��'�H��w8�~:��u<�o����C�gx�7�emm0��Y�j����;a�3Z����,#���������0�S �%<�F��=��c�z�i�6IF&��3��"N(�e� \��D�,<(���!J\���x�h
D��A d���p�����������@����rccI��
m�-�IH�*��W����G�*��-ws�pJW`I���y�O,�$����D�	�"]�����U1M��Al(\�$��v���q 
�����%c �[i.H2�R�FBVZ��E����fPc�u�;m�����*��#�������u�X�n��*n	�����g�kq{.�l���w������0��.{��+v��Y�et;,��HD;>��W9��[yt��D �w��~|;�H�=�,T�n}=���O��1�����+na�����Q��	7��(i��������L��+U�;�
�s���X ������4��#�$�oI���b���w�nl%2���6#B��}�FhU��4af�8��&�}��-Y�X�)c����`i:C�S��iug��X���=������{��_O`�fjNE��	�����z|�l@�E��K��Ou�*y���ma��
�m1�����M�u�U�aW	�a�C0�M�������sw4���	�iU���o�+���������XT�V���n2m� !��I��J���L���{\�������@��2J�H#�r��P���)�n?�5����
	������9�{���:#O�<b���;"�f
�lOx��0�V�2O�X�U�cm/���Ik���G"@�-5-��������X_��[o/��S�����B$�y�Z�:y�������Q�/4��h��T2'�XX{|������bn��������`n�`Lid����9o:�����0��L��x�v����]�s��������������LYS)��|+�>��r3@�[6K7�L������LD`�b� ��z�N��3�m
����j@���=>[�zLaB��O��
9$��O����
�^���]!�!���H��$[���*%����9`���sz�t�9?�p�a�����r�Hhz����@
�Hhzh���-(���6��nK�����g�bn������}�X*�'"'�`�l�o	�6�?c<=�:7�����y�L��B�`�9/�
��D���{�K���`[���3�tLM��-�"��O�-'��6m�>%��������YA��Y��2+ �I���~�,��s�Y��X&��'	������xnZM����G�'+3���@�ym��hj�r��kB��	���
��:�:��d_*���%�rz���kr`]Kr��n����]���q��2?3�<������qJ��W�Q������~��\E\��
�W�o\�kv5� ��^#���1�WWU^]������W������j��WU^^������kSy����-��_#�kH$���U*b� �������|�_����5�&b\
]Cy���5�(��]C�B������[s��������`�
�����k����h���V�5��������6��s�������y�����i�pb��������|����������j�	?�}x���b���a\���������9��R1 =�S�L�����*����A,<r�=S����l�����G� ���0��#n�����~R	Qn�*��R���9������;�cW�7��C\JW�h����A��]�-��C����a�2�E/�)\����{"X*;/�����a4$�g���$��� rE%c��=�O)*6����������o=�yQ�z�Ewd�L
R��EvG��%{	����7	f"���-����KL��L������>������0������Yt/$���b��V'���d�q�N4g���*�72��%V"a%�\}���������$0Z~�s�J�Z�[���G=� ������O��M��aJ�'f:��zr9��#;~�H��F�{f~�����K
���D�(%��� X���T���?�aY>� +���wEa���[8��7B���8%�1M�������+���heAL���4\8~�q��
������_Hl�G������Y�rK?��x��B�7�@��U�g�f���"��o��h��'�%���J61����oys�33����],-���+?F�'��[����Damkn)`�CF��Bh*�Q�_��b���aUE]<L�������%u�2l��?1�-^����(�M�u1-(�&y6�)Q-Rw<�23h���d�Z���������u��(�0�2>T&�{���������4�`xXV��w��2�&��z
����b��O0������P'�wf$�{/��Z{��?J�:�T��51��@I^��=���T�"C�^)S�}y$���-�J��s���{�w�������p*q����������_P��3��S,��bdZ�EJ�5�z�����
n*������03�k�M�U�l���e���q�	�<�^����R�(�A
{VN���ZZ��H��^x��Q��h$P<�P�F!����m�"��:�Ds�*��.(�7�?��&"[�{ ���u��������3��h�21�}�C|r[u1�Ic����C�i�:f�=1��;�)����dPF��/@�p_Q�`�{��7���lL��Q�6UB!��R���7��(s�$4�	��3���MyG%���?yp.'( r�b�x�S���1�)���@Q�f!3��CM� q%��0���az>�y�c����T���e�P�I{�����
��LbfsY���K�a������Z��������>1����t��%61��?���{�Y�E`"�+�bx���"�rzrqw�;��%f/J+����Z�w�1�KP��*'"����(JD�U�L��Q�37P�����,V���d04�
�&2�}�������+��4p,~�_!����l���i����o@�Us���$��J�<2
��>��v�r�xB��!����+����D�-��ND�����D���2|�!\���Z�T��V����h8+����9�=��1Cl�&���U����u��� �u<R���)�C�o#���}���k�����7e�M�Lq��>|*�����H�0�����d��}�~�KO�I�(%������P�52�zz�b�������1��G�l�����;�H�}�.p���q�6����]��x�,*3�� k.{Xb�����
#-71����q����9��K�
�r�N�n�x�� P���a*����?�7`!�	�Q�V����G/s"��S1�^������A.�'���&����|��7 �b��2����J���A���;nqO�H$�
�����y'��kd�N��0��|�������f�|d����A�i*KU�d\#���p���8�����/TRO���a����
m=�:�7�b22��*���m.9��`(����u�$&{�?)&�SJ��N�=��������1�k}+3���w�\RF�PR���=\Y.*{N���c�1������n	w{�?4�F251����E��^�H��:��0�Q��]���1~��o?�&�?Zs}r����1�������9P�q��BUq@����:1��8�o���C��x��Aw�pi8W���4P�?Wg>+�{1��#V�}��C��R
���$�P>z�S�������fJ�7�w�!x>� \~+���G������@:W��{��_������T�T�;g���t/��-�����%���#a�7,�.nN�L���<U�"[������.�P/��B�-��$�[|[j���ZA�����U
V_,q9$��se�s�
�C��B��C��t� Dp���
��=�S�;�,�0������5[WBI��n����V~V_������?�)��������
��=���BA>L�nX�U�@ �t���\;i�us�r
oy��q�~u%pUj�{�]3D@��I��}�D��;�:_��cmb$��v�1���l�6+D
��l�	���&�^��5u-VM�C3E.���N�����X
i���{��%!s�����u����(��{���./�2��[|��Uo�$������R���������>o��x$�w��O��l3����vh|gr+���>��$F�_�d�CKL*A��{��KFI��"��]��u
�,<W�NL��A^�~����.E�M^V�M������<A�=�b��c�]I��z���3cxWK?�.:�;O��V��[���W^L��=�[�!
����$�$�������`���C��E�wf\&����k��l$u�FD�4z]O�"����[��8\����;-���`X�
5���C
�w�8�>�7����id���������B�Qm����^��2�#?6������-��D���94w�y�CDs�0���y������Ks���Nz��S+����O*��`7�>���%hd~������%���T33`��S��'�	���L�	��	Y���2}�s����Dq��L|����0�D�����������D�aP
�9��v,��D��W�
�s���<E?)�+'�dB�g�5�v��!L��������##>�Eafe
�Nc�W�cg�%�u$�~���+�*&�fFXk�?
`�/�)5�����2������Qg�WPN�&��$y�/h��'Q�Xu�u����oF�t���G�a���X�
~�<.@�(n��	�%6q�x������D����Y�(������e�7_�|�L��Q��Eq��[.1-(#`�2�B���8-����I)���>��
�
�
���9a�i���0�o��O��G~/��9}Nrt=��-k�1'�`�#�XB������
��,53��DW���G[9�8a�����a�y/ejbZi���=J���}��T���b{���0xk;<R�/��}S	w��M���X��t�hU�d&���>�G�U���]�h����!YL��H���p���D4��xr�{��E�2��1���Wh�������==k��L�3cs��2xr �c42�At�l��nX��H��@
4�*vd "x�� A�n�;�K!������e�t�/s���\w�����g��t���|��Z�U�����������x�&�\e4�M���������� *��V��bK6��i$�5u�}i��r����`���HB��������x�Z���w�XNiv3�
��=�Nc��$|���_e(y���|WH*�Uh����'��:�Gh����UG����9��'#��'��k������K�b�
���=��60��:/��5/��>���o���5}{y�5��%���_�5u�%1m�e��K4�[����4{���M�S�|��f�y�^*��k�Z5�^�O��{��*L�W��P���R>��Z?3���^S�G���#�P�{d���*�r��'�t��G��|��]U��~��8� ",=�=��jx��*�^u��VW�����I�y�J�Zm ��c��E�l�x+���HX}����p'z�,pU0�}�4?���@���>#�s{�\9��@L�\Wu;-���OD��fV�Q>lr�/��\*�e6�b����Cff�k������z�����s�}O�X����4��Zk]�z�G*s�[,�h�����Zu�W�C	���3��N��Q�.`sw���$�p��gS6���j�h0����f1��'j>�>3��k��P��w��������|�\b�?���G�/+�l���kQ��Jf��������'n���D����\���0�cY4��bL��~�E�GcA�/x������pf����9�?E�C���1q�:�73�d��7%�2��fpb�xf�m�������b	�D|�h�x����e#�6m�����!x+A�����/���Y�]�����]��V����,��@�#3���Ebw���I0e�]���R��y:�����V�lAa��8]*��Qe��z� g�$Z0q'���S2��"m/.�n���9��g��������N.pdE����������6n���f�M	Q���f�g��S�n<P��^�Z2�82Sr��|E�����/�a'�:�h`�@�[�&�;�(�'Th�~��2.��:[��3�0�����6AL���i�K�`���n���`�G'�#A�b����(����sS.2�������H�1�� �}?3��lf`��2)�� x�V�\��'�9���7���*[�&uf6%w����pj��D��hG0���]�{nQ��S��e$����5�{kllA�9\�[����=��MU,��&���+�$�z�*��1|�P���^f2���[��[���6���<����Q�S�V��y�P*�j�H�_�	��+f�n�iOL��M}9q(aktW)��
����������*R}�G���lq����bi�T]��o�8|��4
�������kf�b����
G��Q��4iq�,
aH=�e��}f��f��l�E�;jf+��U�"jx_��,*D��TC����u3�o?6�M/?23��I��������������`��
{�g"X��G(,�:�O��93����f[9l���1��e����T7r�
i�6S0��u��`C�w|�q�w7]`������^p��X�.7�$�m��l���D��� ����E)1�vc{�uZ���2(������}sj������k�!I@*���w�2jdw,��L%>|���r@�OrK�E"��p�@9���`05/�x�8�A,� E�bm���������A2B�J��Q�(7��b�����R�LV���xS�1-�z����Wj)9��=���Y�[���@Uw#������i���*���=��r8�L��Gg2�G;^I��`�/����aGOJ�z����>�k��Z#������R��{���$^RU��\�+m������~i�0N����@mc��v���.����i�f5(��H���Z�ut[\�.�q\�u�CL
��������G4A�,���U���2?�^(�������N�#��c�Q�fd*c��D����B����g�N8��9SSG
��Of����q��H��Ldv��v:��+f�a��r���sb	d�����2^�7X(��?BgH�
>�������#A������&��ZY\�"�y��.�L�X�p[���R��X�[���/�of�]L����B������L����Q��z��>2a���OU���=���f�F��lz"����I��232�Y(s������52����DDn���T�����E����lfJ�.��O)���������'���">���a����K�����K�o���B�O���1|F<�t��^�������L��'�����&�k�POR���,��i������0�L��wv��j�9������vX�);��@����Y[��q��r��DR�P.J���@��������2��������S`��}���f��!:�0���]��L�<�T���29w���'F�A3W�b�/��*C�p��0�����T�Z)O{������b�fW�r9v�����D��3u�S~*S�	+Y~if|?iq���*TG1���;|F�o.��5���k"�'����cr�9c��K�5l_?�P���0��0R
*�����qb�:p�xPm���
������z��gE?����*�/f�f�>�
��f"�P��������Z��8Kx��PB��u����:�7�j��xQ��0Hu��#��hO���0��}]7w-�M�������9�Ok�.�������Q�[����r����N�;L��1r�vQM����/B�
�
g�E��#/w8��SF������x���C�U�����/Dx��C2���������t+��.���3D,�50�0�{��~�%�W_<�3�k���5KL�u���d��`��B�)�,x��Q�];Vf�lP��%�h�o[l
���J�c���=V�G�bL��xI����@^���u���}�}q�~�������!(�)���63�l�����]I�oV������^�����Q6
���G�L�U=�K*�z�;1R��d�)Q��������f��@���?>�"L8by�w�����2��B�V��9w�V!��������
�53����^��;�\SL|���m+'�b0{�\�R��Y���\m����)�E��~�
t^�V=�Z
L��>H�R���L���p���,V�@T<h��������J�Hf�m����Nky/P!�NQfX���Y��0M���[�A:}0$�c���+'7�aw����=;���-���}���A��n�z�p�����>�u���<H|�DB�������6+��z
��
��g�a`]c�l`�s��V�+-���w���v����6�������p
h�_�h�w�w�P`}p]���,���d%�=�yO���w������ e���T�qa�Pe���:���L�d��K���U�=����@������[e�?/au@L���]8�L���c%�������*�:n ���~���'���a����W�5��T�,�����w)�
�"���dbZ��K���;�X�LmnY�x�D�To����A��1��z$ngb�fR� ����z?��S�/y����U<���~����[+����A��k���X���Wn�w���"7\S%�"�����{XT����D���\��.nP[�s��	:�N&�p(9F,���T�a����Z�|&�s"S�����C|�L�������&����B���\(?�m�)L�M��p_��-��TfY��;B���8�:!|'�8_�~��k�BP��x/�/I�p6���T&�����)GF�]���~���Z��o��&�Y�H���T
}�Mu�k�yf�(�T���o���a�4�g��b.w�=���\�t�'Td26�V��i/[���$������Nfb�y!��9/d_��������!������?���/��_�~~��o?��_����Ju�?��A�Wm�W��j��r�(��������^�m�A3�Z";���AM���#�3d�������,����s�Oi+6�#:��`rf�����`s���[79}4�#��"B�vT��9����/nc2h����?�8?�q+�%7�:�)��esn8���6����F�u�����W��
�c�mX����3B�:����N)�ZW�$J��aC�����at���������/4^X��o.��[xx���
����Is�����V��a��-?F��&��83�n�8��9�l�C����]��C��~�H^��^m�QzS�f_����ag��bW�1��4`CvXN	To.:F*�.;��R��A���J���e���]Dt�R�5�6KiX4�P/!mc���*y��-�_��p�R����ra��7� �:UA�����Q��<=UK�(�������
�2�f�^�7ss���

��U�A�C�-"n�b�ZT1CC���-��)H�L6�V�����!�4���������M"]sx
��������P�2�2�����T3�I\W3��f
t 5spW_����`��*����P4���P�n��N�!�j�����f������
�.�9
�H=�t�����k���x���4$38V,���)"��~U�L� �*�\�  Lj���[i*
5S1�!��&M��P�iNnzR����T��Yg*��3Ph�J��\�4�;:d�2`�N���b��J�'T�2�������h�S�$�����e�R�Z���m%%S����ZW2:�c���V����d�/�����)�V�as��_��8���j�!t�l��:��cN�~�"k$N����!D��@5W1����{�2�R�oRu~r�
f�����>:,���k�����P0{�O�2vU�O�����)v-�M��������-��v���.��"L�/��YN����d8E�6C���_D����	��s�a���S����+�������e������@ �����9w�W��q�3�0��p�Z�����1E>p�>�Y������xGhf��N��>�:�_���~�H�y��+���J�oe�8����+wT�������cE4��k�K���E�t��X/�o�WO��7��Kh���P���
�X���+�a�|>��'���2SS9z�ry��B�(�L=^/�z���P�V��yd���&��Hw|a~��4�[!���K���g���n�_�����J���c|
�����`g:-G}Y���������7&�:��@&����E��
��wl?a�$��WB���`�it��w�JD�����(��R�����D�qS�Rm1`$�:����
�D(�B���("�����,��8��b$��{AW/O�KBX}��]�����
���LQp�<K���q����,�����J����*�����r���{s��){*Fyn~�������[���`�x��)"���8��kk����6��	�lQ��;��5�O������J��r8��B����r�a��#z���b[�h4�������@�����=1S"dqZ�������U�wdY�oh�]����z���<vJ�k{��QL�rQ�W���}��������B-	�x�('n" 8���X�QH
��=d���&�xw�-o�������k*���������aDU��t��n�`�H��ei!��vO���e"�������F���U1���,�3<�d�~*F�$�S�X��^��/�	*��b�;4@���0�6**��p�����������#��	Md!�����2�#�B�S��(����]��~�T1b|�U@V#������[��K�5���J�	�Vk;�0U�*�5��� �H���
 �H~����3YU|XNi���X_����yF�C���R�(������{�����G��@t��bs�Z��u�.�����m�"�V`��l �4�b�����=aCZ\��_������B>th�~��}�.����hD���b��k�VI}�&�C��5�9*M�yV|�Ef=�<h8&��1�:�T���s�����D�p��r��kq K`���]k����D�FlY\�0>Mg��	N���Z�<�7/	6��%4�(q�����
�b��+R��T�=��������B����
~+��aA?[���#�:[pa>�piv�$ �(�D��`6� D�z��F�R�Uh��'�&�M�62�����C���y�VEj����������&���n���C]!�fx-n�ygW����%�p�P6s����9�e�:n��{�:����Y��4��'~}�����0�bGj���o�� ��;6��yt���
%�����)���!;���M�M�m
���~���"�N�~m)}y	']SY���"uYvfd�Jk22ZmiX���c�8�Y��G��y�,��6���!�i��%�@
�<��_x��
������g����.la[��x&S��
P��pId�K(��@4d���&GE��	���`���C>Wh`���@�W�5-���y�'�.����/b�p�R��C�`������1}���4��P�1�����`u�N�x3����M�^�QJ����,eA8�3^X`~��a��)�7������9{2��
�n@�'`t���6b�j��+7"�u~��mw)o�@f�?|����K`@���w&.����}d�+�"����.�\�?����W|5�������H��Y����w�Vq�3H�����0"����?Fug�7)�e��!�U`�W�(/E!����"�*�����4��<�tzw0�]g����|�����B�Q��;���g ��+'l_���k"���_�}H�!�j�6*�����	
l2��o%��P��!j?�ta��gI`:O���`�
��Yf�������3�Ai����{����fw��^���a��p!�������na��
��13E�2�^��M_���bC���'&Ba�;�{h�1���b��Dq+"��O�O�`����'�g����:�t�SZ��*~@�w�1���y#1YU�*���.���*AH&,L���Gk�H$b.�
;<�L���n2�����*!��Y/p�t�`<�r�!�;����iO�0`�$�f�Y5�V~+�&RC��R6�����s{a�1�es����\zy\��gB��jI�-��c��w��)������t9H|b.�����|����9~�Fx���(W�<�rS;�8k�C
� ��r�W1�d�@��Z��l���Cl�����lc��7py����F�$([j��;��1��K���3�EC�Z�X��(a�������Q�}0�������s�q�Wp/����#>���v����$���1�U��

X$>����
��8k�b����|s�����9�j� �]����J���iq'��3n�����j���xR��
��Q�"}���'��_��6�d�i��#b�Ro�B��VV�e�[�'%Hb�}1r��J=�]�����B�Y�{�����3~��������������<z[H���X�h��FA{X��m��o��m��M��}�X.[�r0/�g�LX.[��r�\����u���g�X//��e���������xy�.�����e�5���W���}���1\<�
;��:���xq�r�rjr����"�D!�7������U��(/2i�_��NL�E��hQ�"P^��z(/�}��>C���@}��3�*X.�k�����Pd�r'��2`�|��e�ry(�`^�c��X���yl���#u�9t���� ����c=����0/_���F��
�{�v��6|����$����>���t�*[���G�
�~��v����	���������z�l^�=h��J{P�q=�����z��AQ����������U]�O�����Cu�:�o��>�_*�A]��e��g��LWC�j������9��1\=���P��T��P����\��m���D���t�_]��@W��<���t�_�]��@W��4���[��/�����]���b���V/�n���6��n�����n��(Ki�9��;sHuk ��6uc �����@\+���y-R��Z�g7�Z-�3���ey���q?��r�_�j�����n����(Ws��\�Ev{ ��P�>�9����Y���t��W3���W�B�1��z�@Q�������C���h��=.^$v�L0'��(��7�@5��y����2�m��y�V�$lx`��|��]�]��g/9�������
8PRs�moaP����y�,�@��0���K-�L������NT\b.�s�@���4�;*����f�������4�\,&�#S1��1�V�Z^'�3�Ve��W��:B���v��!LC��Rw�M��&" �(���6��!���6���3a���v&&��A�p8~]D*s#J��n�Z�����=�p��#{Cw�N"yVt��x�PT0�
����	�(N���e�2�.������������?v���r���N7��6�M���qn����X.�T��P���)�jmyfn���vn�G���3a2g+��0���JO���Ri�{����L�X�dH�BJ�;KEdivY����v=z�0
��.����{RV&&g�Brp����5#�cFT0��z�:�g�~*�b�����0$]���I�f�Zl���w��:g0~l�I����;��5A����
��/j����C\,BM[��9@z������h���?��Ez���AO]�������6��f�1� w�D����k��)��e�;t���q^
���<`Ir;;�"^P��L����1�pp|g�Q�"���%��}P�_��v	��Vm?!��f�+�U�iFL[�o�	v`W����*����y��-0��P�"�3�m�X��>�B[n(��b{/��7+�W�0�����������7�@@���]���\���\�x�]�4���\&���RQ~?�gwE�>}�XT0�.�9E�4�e��i�m�/���Q!
'�5"� f����T��_R@����-P���~��z"�VT���:Q<Q%��Z�"��D����=�|
���1l��������`_��kUri��D``���M�����I�iA�<N
�P,���3����)�5+��m�T���f�.��c��uXY��Ww�*�'8~?t���#��<{?�2�>����&E����zg�J������f�OB�k����=�,���L�j��N��2Q�
a�<��g���5�LL|�w}f"��?�b}92�
g10M�V���k	}�oAWm�*x���[�N��,3�R�42q��T��iUN�J,k�����Q����u���(�Oh�6u�G�U�V1���V��� �������2
�co�wu&g������ *=E����7	�FlB>Cc��oZ��
�����������b$��{
c�%� ^�h�(��{I���Vo���;�q����_�-��<WhQ�^KC�B���&3&���;
��R�gT,�\h�$�)7+��g8��3AG_��^���n]�gD�C'�������:�5s"Z��[h��I�p�
��`*���{�H��r3��D��s���!��V��(�����~edM}�P�;1���i��C���.�����C���&��Z��B�,��
��x
_c�|j*�t��
�/����.W��Y��r�������.��(���n��"���D���
���5��J�n�	��g�Wz^���1" �����!H��B�
�}�Q��=W�QV������&���D��q���:���F]�6>�J�����X���QS��O]u&��v�����:N�z3�sj�������B���-����2�i�S�aW(�^����VB�ss�2�%������{���&��Yj ���YOy�/m���m����t�y������c�~�AD���
�+���C��_(�+�����*S�7��'z',���~��G�k���K-�����9�R���i���TO���j�L�.x�e�z���G'dEvw��7Ou!��]��������M65�>�>�b�~�d��8�\L����e�#Q���qh��ql��-��5{8��N�S�gM���5�t��(1�D=!��l��X�qu|�-g����C��`A ���_�z��B���m�@�"��lv}��Z�(�3�@RV�r�����\Q������j����2�]B���*��	��o[5�1m���@p�o��+H�C[���I�dK�������o�vuO���	m���%>K&����M�����LH��&/�"����^���������L\�~q�C����&�a
������o�YmZ�<���4X.�h�Jb���`cT+�6�V/c�6'Z=^\��7.Ypk$0Vp.��
c�������-�"�����-��-wx-9��o�N��R��HX���u����1�f���0G�pl��/B�[=�����
���'������K�>'"�bX�.s��u$��X	�b�V5��(�iA����_�����������q�&k������Xh(/��#���U�Gi$B��:��<J�]�X|��e��#�N��5"�� O]vg�j�m��	��I�;Sl�t.F�5�],��� ��QL�;�����[��;1v\\-�w������d�n��r���������������g/W���Ws��� E�NLb�`&�,*D�~������
<3�B[J��`;�
��g�����G�/CD4g�8�~�ly���1|�����;�����'��DXYN�s�R�G��3��S�*�G(�61����a
��{'������D��+���G"����	�D<�U�u����$"5��6N�k�&� ?Q�37\�`Q�<H&:��s<1����N��?	���������*���)��g�>�_]�f����n�8��Jx����J�yh�����N�p3h(�CF�5���@��k%��J�����w����(��u+���v����s{��T�eGs�+/P�;��=\:h ln&���aj���F�
c_z���K�22ce�T�[V��$P�-{��8:&�Vn�W�5oM��>�f��?T�5�@Thz�0���)1-(#������9�xt��1�=���E��%�{3�,���A��8X.0-�z�uo��K*���S��W�f�0�Kb������+6>b�f)|�����l�3`�bDh����W�Ynj������|�f<'��%G�����N42�DB�W��'���
����Cq���7����g;��
�����L6�AQ���#�1wX�(�����/����s!)�V�gB�C��~p���	gQ�a�Y�����4,=7*T��s��b]	>���_{�����1�g579��9Zp#�f���������@�WwC��W��Q`-�o������V$���[���v��@ji���G�"��'���Z�	}�TT�+��L��������d�I�����+8s�i��2jv7���y'����Y��z�J��N��e'"�E���U+C���0�j�_��i�+�G�Sk�'}K:u2���� �|��h9��e~������vt�\���r�����_������0�Fe�
��`muM��jT�,���W�@�����h��M�'�>�d8I��`L'������D<�4���R�����u�[������A���������^�R9:��Rs�X\�&�|�O��{�	�?�������d��e"���Dj1����� ���?1��}�n�,c�L���-����a�O�a
Z�6�_���@�h��v�� ���e���12���
�n����vA���/��c���>�������]S3�����B��tM�H�����Z��
���(k�����LM�aWE��'��#�������`��:`�fvx�&�0�l��Z��NMLby���>o<�'b�xcu�G�������1���0V�O���O&�&��V%P�V����I�������Lr�����=m���s]�K�-�����}P�������}�@��~7��t@IIeefr��5P����m�
�N���m-��S#����|�&?I���������iqP���?��u��1|m��&��;�o���;��S��������Z��lu�wP�����=T��Q�E��3)��PMbI�7�n5�~	�f��q`�������E�������Dks@(r��z�n �+��
��W_u�T� �5<�B�I�Tn���{�X-�U73�=L�F�3^7�~�=���
%�nb�"��v���Zf��~�Mb� �EN���y�e����hNX{���3P�o�d��~��i�Y �?�1���C�	7.>(����_�4����Wo�Y�G��h�}P����F]����}Q�s�^_����V2">i��'���b����g�S�N�9�7�mA<������
��7�tgf�8Qe#�
�T����2�lr��z�	��@�E�I��}�3���C��+�/XL���-�1����)L)������
��X�3���U�'��l����0E!�����&����P����V]G�����c��i�8���T������[����>��b���}�K��'�r��n�����\i[:}Ap�����p�2���'����}$�-vJf���b����-��*�����q�����x'��:P�c��[��X�Wt�$���M��>��2��+w����%�F!�E{�Z�?�a�����M�p�_C�MT���}�2]��3C)���>�����g��I/3�����}C�]�0��%�s�<C�>�V)�Fx�){�����[h�;����H
��~�gY����xh������
����CF{h��n��8T�m%T��9�P�A�����i8m>O�n���+�N0~Y��-�\�5\�o���6��������"�O����N� !�qF��+�I��
��j��0�~M"����T!V&i6��v/�H�����}�+��a�L��<��qe,���H�@��t�lb����
�#��C�#��� 8��`��F���G�v%�,_�B������)�
m'�b��-�FF����|��h��P �R5h�
����g��C�7���[
�3�8�W���`��j+�]g���b�\�i/��?��k�AJ�Z�FB���V`�?S�Z���
*��1�v�
��W^�?Q(�3evV|-�#f�@�U�V+��L$Q��c�6}:����`���-8�gV)9y���7�9^��	�O�iN�
�1���5�����z2�z(<������f���M ����_1Yw�im�-�*��o�}�@lK��0����x�o��>-9��g�����7s�J����@p����5*��=��s�����u��������	���}���*U�S)Vn�'� ��~��b1�����A����������� b���!j��]gn�^"��K83�;��PyCU)<O�h|P�8H�B h�z4()��mD�����%Cr�P���&���3�����gS�i��}|W����YL�++�mbrM�2�-���!	@���u0����L�x���VSrO�/h����HT
D�:����w�����A�� ����G�B\����^I���#��d;-=���0�b��*8�|��T�����~�8��5:y�(��?�^~�����a@j�2���o����=�������"��|���\J(V&��������H9��\7��Db��u����3�����	~<���G���/�����&����?�����*���qF�0B	�3E}h��w�{�~R
&����f;��4���i�)q�~�
7�!�����0��md������������}a��b1����O���.c��*Q�y���S���R�0>�����+����e���\>�'#��"�<n�!�D�����T�����k���H�;������eh-�dd��������$N����q��mj���E�
C��z����a��SI�mzc
,1|L	�p�E����xF�Ig��y�I7��'�M������������D��)
�
��O+���^����I
�1�p��]��*��P��L����,?�>u����t��H �`T6�K2Y-��j�q�*#�[�y�|}PI��|�=k��@�xH�� ��)��N�/|(��Dnz�����s�g�H<�8,��{�H 6�7�%�QA����.>�;��N������:w���?��;�������)a=�8@������r��2���������I�i�����C����d�����3��b���~������~p$x������^�m#������px>4)8�r�P �_����7�RuNw�����0�4Q,��I+���c�O*��x�%��tssa�@`��nL�9�f��t^zdQ�wM%���K����/��=2����uN��E����bz�.U��J+5�CTc\�@������,�%��a�^6/��	��e���c?�{�[C�:��H{�/��t�@3A�=5B��|�0R
�`�Anj���V���
�(*u�����"y��������q�|������������]�+��QO�h$����C���X6��62�z��
�a"'A�j���[;���=�92�-�m�@]v��
�9G#��Sn�8���L
���JY����g&��}r��>���$J{����*	��`�db#�=1�,����7�b��dZP=&Xjx�����>���4�����x`��������bG�����f��@�l9���Z�b�K��c��L����G�Q#�l0&�� Z�k�X��h���,=2��K��o{���d{���#��{��A���N���P��s`��Z��{P(l�����������J�C%��.,�ByPY��L���ML"js�I���quA��05_��Z����Z�G�O��:�
L�BP����l�Z����ApHs��X���1-K�K�CZL�%�F&f�@�Q���2	}�����G�!���)DG2���50=��������H1��������
����sJ!���.��(#9}X��3��p���+��i�z��c�uo�Y<�u�	����H��+��fRm��*�	�-,G��MT��������������?x���,����*��K0}@��2QIJ����S�N���xa�fP:g�z�hs����\��l�������/��|�P��D������;'��3�C��z����u�,��N�u��iw�(R]'.�e�`��|��C�W4��'���rL77�|_��504o�g�f���02�&��2|����
0L�7�V!g�;7F�������u���83!�}�{0����N�d�����P���%�~0���=P�|ks��\)�2�;���BB����~�>���u���8�%>�:�w��~��6��0��C%��Xj�gc�����J�({��]X��8h�S]6��R�y`�9\V]��.��L�>x����;\W����BJA�(���F��>v��{�1��n�O�'rR����*\�%Vk�@a�s�~�|x_��}�V�1�&�HB��w�*m������O�q�D#����~��U�t�����kFJ_���e��K#�*���%�$3�d�������b�LE�Z�Ui������K*-���<(�����B0�{y/C���c]M�)j�5,��bM��� �e}q�bh.�����J��
����/w _�w���ac�l�;�3k�}�W�D����4U��}��������m�@��_I��C��>��B�>=������Q�����E��0;�����D���O(�]`�gv.��"��A����J����"~0E��T!\�jS���T���~���G��Q����*T�����I0{�.�z������4Z���$z��3$jbZ!\�k�*�I'
�����,�B)��\���R��N<S�Tdo����s�&`X�T�MMx�Q����v�#����O��I�3�5�'��n�z
��h��bM�E)F�i[������Wb[Rm�T���E�2K��6����c����L�5l:�������XiM�i�����G�)�M5:�|�A�LRS&P��{��O	u��.^h���pBs�T�e�<�kq$������v�0<�C�B�|��������A��c`b��,�{����rZZt�#���c��,����cV0_1[����:S*P���o�$�@��������Xu�����U!k��N�H���r���K��_�M��{0����=3H�� �E6&%��2|<�VF����0d�ad���J|�����tya���}nA��2�<		�@�W���i�����*7�<K��{C
�����zd���,��k����\�:,�0p/��A
+�>"	�,\�I��-y#ZI�$I$��&�}���iN��&��H����t�`6J�dD�$��4��>����2�<��
�����#��}���>�$���}x�n��<�M����I��,�����x�f�gI�`e�@7
VW\���X�i`Zi�G;@)H���|�!h���Y����;�F&��g�a�a��r���W�����b �Jl�w���opd�H|m��9x3{w{?�0o�V��S���ctl��!����v��������]�M������B������T�#Q+��������CuD���������`����OZD~�ed��O�����#�!�g
~�d��Bn������n��{&��txX�0Ie���?PV_�+������^�\j'|w��3���ao�kK�d����T�L����=���@H���qJ�Z���#��?�������2w&��A2b%�1��o�p|���1lYVp�>���L o�B��7�����"#�����`�e|���R!��J�^.Wa����x�����4c��H��p��f0;�w����r��Yv-<\���?�m@�����1�No~�c�}�n��S�����4F,VL���S2����F�f�}��M���2��0��j�.����I�����/���p�%�����>ga��5�c��{vBi�������Aby�0f��B��B7cm91�A�n��e�`_DB9;��"DU���b�w�n�&���������x�sr������.�B��J���li;n�����{�Q��Omg�\�3+������3!����_l��
9�&�x�����R7�P?��&����w�TF�(�����f�Q�����tg�7���c��s�Q����Tn��F�f(��G������f���wS!���@�^=CM����a��``�s3�K��X������mz8{M����&;c����q����^���06�	����[U��<�
����pZ�7_O�������Mt�$�d����]��[�Y����7y��r�;������7�U�S������+��*��1�i$|����J�4i��L4��r������9m�a�b���\#b�p�3� ��1~|>#%va
��7-���� ���q��F����8���g��Nh$/��IQbl��|���y�U���8V���#�M�@_�����Y������9�y��iXNa��Y��d�X�U����Mv^|�n��>�	��`L��dg�b�����I�i�v�g:�l������B6�l��7T�5bk�#�"��F)��
��~�|0_�#����t]���eE��$����4�������.%�U�W���j���(5�����e�U������R^���yz��n������k���4O��P\]�my����#�K�<0�]��W��Z��Ex�r���_��~�A*�'�;�,���������k�l��W0��,������O?���m�[>�?����g��]�d������O�y��/������g\�����������j���}"{���F���_�`X&���X�?'�����`��a���0�]��v��+�i�%*!��PC��*�#�A2!���������L�L���>��)��L����[��onb2�����2�w�D�|������h�����F��4���:�0�.J%g�&l�'�
��M�M�9s�����x���<AO�>�}���Q�
D�h���=�-��ne������o1���`	���K�s�����D�_��)���9%��4�8��~�	�y�+!P�\;�=|���^������\�	�-��3�q�F4c���K�W�H�M����0��%3�����8���A�H
	�[��������_���S�|��$��`H�7F�$��|�����kO��gg
������kH{H`����c5��
��X���T��|!�bw��w�J!���[�
dOT�f�H�<�����>��C������1�>��+d�SB����������HD��DD����7d���K4��P�(���u��_��f-P�i������X����G����G��W\x�.�I	n|#�'.�~�T�h"yc&�2����]di��B�!�	�Vo9*�������J�B��CF�(*�P�7(�����);FuX������zJgB��x$���sl,�da���"=�3��d�SR
z�ir-R�2t����s���{���Q<�p?_#Z�"���)�d�4����_$B����j�J�����������J�maK��T���A�;�5��t�
�$�'|�����hq��}��
�Q�����1j-�<����pw��[�SE�-4d��4u��!�
\�m�^����<O�

_X���A�C��<�g�gT&��/�
��#BK�[��R�����00r���QO0�9s��%��;�+�ee�n�u�����e���o�9u�����N�O<w�XZ�zq��9���,R��]���Q���Z<�P�F������������^`�B�
��/�oh,U.D���7�b��K�K��*f���tea�����?nP��i�b�f��3v�.L�j�����������Q��7�oxn/�3|�vH�*��&�Ld�\����X*!S���=��N��9G�rTB�q��)��(�`��Jh	���q3&('Ok���D��5�D�Af�����E� v��}��\M�	�L��!�(���|3�d����T��kV��F��^����'��B�����^��S�i|�wa>p7����k�����!K���>��tSe@�7��;����.l�������d�3��}�gV"�I��<#Q���PW�(�p�iN	a2���:s'#b���s�t�!U��F�M���4P9�ei��������ha&�yE�kh���4x�~� ����e2��:�0�V�)��
Ll)�����/�6�t|`T�I���a�B$��}�L���P��+�����]T�h���'���la�uy��M�I�_�c���wZW�����D��+�����V-��Z%�{���������I��I��J}�mSY�a\��5X�BH�_���0���_e4I�3�����/���w��{89�o:�X�I��T��i���0S�%��lkT�����'j�9v��3�����U�
|[��O�E&������e���=5\b��F��4�k�^\����� �s���K�����wa�	f�6�g�L�&�,��L��t�eN��{a2F�W�u
G��h��~���g�s�6��4�i�
2��
i80���@YO�n��<��hjg�9�
r�Q��5�����8a��=_>���~M�('�h�5����`�i��vw=�s�	�������f]o�����P�C����QLF��������rR	��+��H�j�����!%W^��]	��o��R�W�=�7�Z_~e�Se������2Q�b
o��Y�,�7�uD������C�Z�s��������H)����&9��a�>F�_��6��+��9����b�3�x���1�r��]rE-�uIxs�4 ^n��ZK������@�!�2���G���&XV+����(a����3�Od�L�?S����2�9|K����U)��2�XdP�����Q<o���-f_6C���	��L0
����2�g�[m�-���-����ge2���H|A���G=�����K�1zB$�N���7��i#)��cW�`��=���FNWz�=!��xl��c�GO'LR
!������[,19)�@����CV�o�'
qb��<:�.['W"C������y����5�:��a����3��9�u{]��U�o-�`��;�(���i���;��X��B`��(��@���x5���B�g+��k'-�n�XN�-�������.DS���!�4�a���������J)F-kV�@��}m������/��am���MW[<C��|�����X�0��)b���x���oFj��5��"���}�G�u���ra%>{y�c[��DLT�n�I�cV���h�$�S0�R��������e��o���V���|(4�J]��Q��]�v�7����*�t���G�s���*���xJCL
��{���FI��$r�F�����U&C1�r�o}"�v��F��B�ln4B��_D��cp�q����6W�l�%MK6�2���du���q{!��`l��y�_���4���SswxH�<��2�!I�%"��*�+�P�������D��z+
�u�P��9"����z����c�w�����Ga��-���
|@Y�D��h���cr�(���~��zXM�*�~Z%X-�p�D�5��@��
e�G>6�FH�DVs�,�C����;=8
B�#X�%�WE�����s���q<��������������@��ij�[/���������I���`�+S������-�qB��@%���J|$�{���E�d�������;�/����T�j'Z��__�
�6M����@"U�����oM�Q�x��e�����X����E2U�W���4����vGE��)6���a��X�����b$#�V�
����,�B4`�S�<A�bcb�ka��&*
�U �i�_��;��&��k(�4�
���J�38I>��`}���mq���d�g�'%���
��Ui�����,@*������g���;���S��X�-S�VQS��?���d|����g��M&$��	���d�D"�$�������`��7������OP��t�
�]q3B 6��X����<�^_	��~/>}^6'�Vg��k�0w����
%�N�B��7�s���6{�0���m��z%!���]~���{M�
�R����*	��: ����|{��J|�^��R~���=:`�SB�Z���E+3")���h��L
Wf�PvkS
��������m>��t�p��{%�|A<1�}�A9�eb������j�P�j���V3��#X�<i��@p�h�6���i�.�@7�E7�DS��0�N�9
Y��{T�0�=LF��BQW�"���U������J16?���
�����p9�7��{��=j�����q����uZ�sq�
��D�h'�I���WJ	N2��@���[�b�zF�����n2frZ)\f����aXL���O~e�
q�W^T�#�=(��J_�a	�;�vDzZ9%LD5`��p�4ojR�.�U��u��X_������-�(%��4��B�Q���z���u&��(5r�jY�L�l�f�[���D� �i]��*�u�G���aV�J�P����� (|�f�\n~�u�wv��n���o�"�}�{�&_(}�<z%�R0Iig4��^�v���_�R��i p0����e����'��+�Ds�x�M���B�w��8c��ql����a��B;��/����a	`�
mvM�����'��D*�F''��~����
��j=uj&���s�)o����k
��^9t���y��E�O$*��n���|ie������8��}����$)q�^r�x&�\G��2�U&0��X�9-����9hH2 z���L��b�c���Q0^6q���-`�S�@�����E��������]w�
���������%��k_�'%��\���M+�!���{��N�eG]&a�"��|��y�~q,��XCj�'6���a-<
��E�����Au��~4�V)�D�]�g'����{2Y���j����/&02������dB���rF�~��:�/�iHn�~;�NTF��	(�y�\q[�{�ul�0l��5W�H]4��jW����D�b��g9<��v!?E��r�:����~�Q4�B#o
������i4�t��x��h��F��DK?9�w�%��=x�`eB"g?$��+�x�kF��2����5,�&yb �r���\���'�=��d!(�(�X�.��nI���E����1'Dj�~y�eB����J6u�����h��
�������Q�J�H�Y��r>�y�l�o|&����������KT������(�m����������W��",7:������U��n����o�$�QK�+�1$W'�_���C��v�J\��+W���N�w�^�o��5����L�������w%F��|�bvA ��s!J�Ia��q���!a�K����bbd�G��!>j�L�w�I�}1(���������$ae���X�E'snT��
<j];�I4c0��h:���Y�Wz�1E���[+��^�������|���NR��ol�S�bM�o���� ��+�/�b2�T<L���7�R+�BN�wa\/_z�>!���|���%Xb���-�D`����]z""R�����;�^�����s��I��b��]	�����JY���k�q\'\����yD!��L�b��
�Ks&��>+{>L]����<�����V�M�nv4d�{�VV�Z����4���-�e.`�����}[+�Q����~����A�E��YC���&{+��~l��^^R�b�Fi�f����Ls�o��jmK�qa����ru��r H�e�aWF^
}��[�p��nX�o|��y�`�4��FY4
��x���`U���_v>���vD�>����N[�\]��j[�x���CU�
��R`U�
���qhK���h�e*��S�}sic����[��C��w�H�� ���s8��"k���I"�v�������	�t�EE�������i������2�@,�,*�a����x�5�B�&��r����.��TQ��D�T��H�iN�[.�}$����0`�Z��0�U]�V����@M�)}�t�����y�9�V�M���[s/ng@��(g�XO��f���O	U]������>�Y����bR�G)Q�=Ivfo�*�����m�����S!�X����j�gr��U%v	���7���++�
�8����E�'�\����;D�O�4��68���|��	m�BD!�����#Hf2��$�	d�K����M�1�Ls12�+9��0��T��P�S��_��{�"�a(`��I!c����S���E$~WB �F�����������cYk^|���i��B�Mj��/�q2S���@��m_^������y'����u����A�&��Z�L�'����
�����0[��C�
�iS+�"��7s�.|W�����*��w6~r�����knW������#q�`����+s�J�K������V��'�	�"�aV�&6
Gm�#��������}+����{�1�u�m��L*�M����r%R��Zo�z!%��R��sL��1��q����S�	�3���D(�W�}��@?���x�#���?@��)�|�%�]��w���j+Q�'�v�B�J�~\&y�$���15�����-7�f|�y���f��3�7��!���1!N�^l�X��>P��]{ `S{�����!�d����+2�>n�:P���`_�����y������y��])��iwx��o��s�C��>�����m~�q,��� �����+5�Q�Y��ie����D���Z����~Q7�I��sg���~2��i��f�`��V�����[�**Q?f�>���9|���,��c����B�O�Pn��n�
�s��`�����s!.�@d|���76(6��<M��*c�sf�aeZ!T�����E"^In��p����#�w�r�U�Ol
!�����7��������q�h����2���\����y�T�Y�7f1[�P��;��;��x��FB�j�n�Zzs���B`.:C�vN+�!���~��a���4nk�h�>2�_L���

v\�K�����y�G��j�	hoTmKL7�t2�_������]�q'��=y��iA�2�����w�X[����q�r��q����g=0�W����2�a�{�����������J4�9���Y`������)SM	42��/��F�e���2�d
4��y9�Ls*d�|�n���1���xA��-���8u��J)d���'�U7evMmr�HogB����q���,V��D�F5�
���P�ul���E<4����������&����%������!U|`�g5l�F!t^,�o�*\`��}���7����?(�����TVek�_s���p�fLt��-�Qka2>o[UC�r-��\CLl���&�dt�L��1�J�S�q�T|�X���Q6�|d���x�N��{���iP�'�����u��v�I��
�ec���Q;�%��o7�x!P$��"I
��SZ�
��S�\H*E�����VO:M%s���$�E:m0.,����vLn0���_<����`2r��������>zz
��mi�>pd��+p����_a�n��M$���>+�����A��6�������B�v;���(l&��
�+�*h��_#���a"��e
���ba|��wz|�SH�X�?��o�2�4��-6H�2������B6&�B7������#)����?�����gTeh�%��o��,�������o��yW
=E�����[�b���)qF�����Vd~�����A��0���yq(�b)��J�D�3	����M���T7������rar��%4�0t���y��@|?Ep������;2|���/&����^wj�~'Af
~��A��]�t����R��0v��3)�c��,��~�*2s�4U`(�X�+L���-(�NC��m;1�������z�>?�B�4=
[��#6��W*�0{7S
pO{>��9���6������a	9E�q�f���Od����g��)��p��������!G0<����yGXs����/q���4K"
����q��])9S�2&����s[D+!�����
�������>8��
<��-uj�S$F7|��_z��:JK����� �P?��������bns%�=���L�'t�'�d�7�f���&��k��Vv�e�f��?r�0�V~�'��;��V�k��������������~�������|�������oR�H�i�8��Y>q}���t�g��������(]=_���soN��?��{����(H��s�Y��NOC(u�������� �q"��G4�c�	A��C������]�d�������Wj�f��5�����3`��7���d	�n�(�P��y�����C����V��7ae[5�[�u�!n�N�?�",p���
l�_��1X7=�m�����A���z��9pz��\��f9�����8���5�],
�@C���f�4
���2MD���iz.A� ��/�	UpD�WC�A�x*��� �r���G�IYK���~���""?������5�H������.�%2���u��:6"�Z���#_<�G%����g����I�$!�e��Igi(��
�b�!�%ad[US������K���@g�����2!�_u+$���3�����o9�9t���Na:��0�)��
&j�S�_i*%!y�,���������#����h�p���=�F�r�*�Nia�E��[���oW*��ws���\h�5������'�Q� ��i
��q��Oh�C�I6�)�T)bhR�p��N)X��j@W+�b9��q�b9Vv ��k�����P���y����,f����v�XE��!�3C���IP�	?�d�&�L������U��g2�Q��4A�dY�����)�����3W2	J����P�
��)X����-�������B5����g��60�4�!�5M��DF�iB�$����YGS5	J�P}�W�P������TM�6�^����4l2h���x�t|S5�f��"���P��m
��/
������o������U@Or����%f�X�e�� �=Gm��I�$�G��l�F�I�l�o��(��9�����QXU�����X�}�]�n?�fXqY7L8R������bu��14��u�@��F�P=s �������i�weB�dh�5��M������-.}4(��[��#C��
e!��B�c]2�p��Ol�QGTs`u��=\�/��L�M:���*a�|�F����0�|('�Hq��a
�B��C��'K�<.fK�m'�E�qi��ht���.����k���E�-x��WV�!�N�b��FV a��+-Kd������������&�~��_4��������
z>%�����Q$��b�j(>=#�r6-�``M�'�2r�aU�)�[�����B�zOH�V'�`�Z5a;��&���>_*�`�?�����q=��Rd��'Q���������@Hw���E�NQ2����%p�0*��*e=
t]�I���|x����jHX_4`.�`&�w`���
�JG[�n�\`���9'��`�3��^����i��0���Z���;\]d��#�k�����51���t*�b�uRp+P��\�i�P�d�'�^P�����>�����7�<jf+���DK�������(S��GIw�8�����a�P���B�T�,NG����.,/�60c-�����Zxf��������#�_9�T�{��=��� ���bx������:K�����-������x*���]k�-���)O�d����'!)�aY"�L`�
��y������F5 ����9y�CSn�|{����V�"���e�7lT�	�I`���~�^��65�K��P�9eV�a�EE�rL/&h��T���^�X3}>�/������o�>�i*����3��' g_��k��������!����Y� M[UF���P��O��2��x�{!��.o�������K�H��E*XR��l���_��lh���>����SNn@���2�����-U�����.���������"Q�F�X����r��e5}���,)"��Ts��������������ENP?n�/�����S7�y�O�I��"�]�'���Y����2�S�Z��!~|��Y�<u]��s>FjA>�`��5�����dw���,Y��L"�FA��B���#�.y&U� ��0i�����	�LE�Q��a�
{�3n	LS���f�"�|�������n��v��
�qi��<��[$�������5�����c��2�t��i*�����`A�����x;�r���CC����	����I��k�A��*����g��k^
C����D���6�H��n��:O�����*�������F�{����'C�b�?n���Y��|?i��]�����=v!��@�-?���a�j��]psxX&4m&�������!e=��P���8�os'���"��H6us��;���?�����zx���*�IF�����`�)-��3V��b���&aWArh��&�i1��  [0Z9cCld��E��w!�N;6��Ao�E;]����8�����3��
��	�����g��-��U�Y�r������[�;0�Oj���<`Y
�<�Ir��Bm�������<�XS2�L7%��^�7M
��G�y%����t�����������d�2������W�7���q1��y+F�
�*�fP!Z���m���8U9��b��,q�����R�&����pD��J�ik����6���#
��RK/8r��x����@���ml�[����5pA�p.7O����!���G#��|���/�6O��U������jo�NJ�OP1j%��urq�0�-�Nu�YL�luL�b���^�q�����8C���$���-�D�L*.L�r�o�Hp2�'
�i�{�U+X���"�����`�M4�[��h��������em��(���:y���u}�A�=�I�o��������p����o�n8��.�s�����gd���t;:3d1���w&�j 9GP����Z]���p����a������{�����R�`���DVl�,pr#js�YR�
�2�5���T��8�������+��p�q2��.��f7d3���c�f�l�"�����F&���E�'mj�N�B�����u!}.�(��������Z$s�����=�	88����FF��6�R�=�v�@�M�6�D�
�EU��fQ
���~zA? ����� u��	�c��F�X��K�����+��mn�ini�����o������PC�q _���k(�����C��+6���[��z�������1�v+V���Pws�@�c�-�f����;'�������z�[�-b{%A��e��	}\,�#����$�������������lT�u�������^p����]dD#��S����Yn��yJ@������9��X~�H���������J����r�3!�W[�X�L�w��PC����X���7�FY�
����86_�=[��.T��8y�i�
�O��C�P��db��P(R��4�:~L��n��d��@�IoI��4N�w�7�[�0��/��*ff�d�?����F��m'�d6DdB!���0�ufz������N2$&q���N��hD���Nq��������8~n$��c�%M�5��]��:��a����]�;�u�B�N�"+��i�-L���w���`E��N5*�~��i-��	�I=�	) f
$l��O����8�pG��s��a���]�'�����N���B�K����O�����cvS�M�A�0��hd�>��S���L��Ul�������vK&�S���N��6�����_~f������aW��$����	6HI~W�\W`{�&�X�V	����_��HZ��H�~+��lJXS����}�1_�Ougf�CJ+q� ����mj��f2f�h�������a�w%
{�7PT���K	����i�2��
s�c�4�-� #n�\���u�P(��y�vx�m?E���f�i��kr?�� �6N�n+�a�w%�'�g����.���M=�j�82��	��#�z�����m,|0������@����������A���m��m����/����4���b!���?�g��6���]&c=mU]�$a��^�3���{z�^�J0+�y���7rf��3�eB��������>n�;�/���#��U�\QjL���A��R��s�������3a�����O�3M�V����?��Y��t��$�D�	j�-}���C2�r��^]��RX�I7�~�����y��P(�q$���x�����F+�m�q���4c$�����6K8V+��g�]	�a�]K
=(K+��rlz8qt�X�������G�K�?����n�el��1����8�]mg
��Q�O�B���N����O6������OVs��_p��=������+^6f"�Iv�u9����#��L|�����ts?*�-����_��u����������'9(��~WB��X �����R���Q���fd#��PL����'cL��q���Yw�|�s�r|sH�|������9O�t�aX �).{��(.�rq�����Q.ng�����1�E����K�����a����x>��������(]����\���{�!����:�RCc��@qQ�����x���g�x��G�>��8r���K[�q��jO��)�k�r��)�k]�.��rt<�*JW�'_U���~s���%q��/%�K���T����*JWG�&�t��y_�������(]�[��(��R���y�2���soNQ��������W��g)
��Jo�jo��J
A��z��{���-��G�N�;�Z}�5����ER�"O�"O���Z&��Y��m���W���tu��c����r���.���P��_Yg��W]g�W]g
�W]g�W��\����^��X��\W�����[������t����(]�r]�^�������#�dh�����(}����RUF���T��*Qel?�<�����TF���R��*Ie\?��a��RTF���P��*AeL?���!���SF���N��*9e<?������RSF���L��*1e,?������r{f}(�kI'�Pn���C�_M�w�~5
�1����lc(����})�^J�/���w�~u�j2�WK����y�������;�r���c)�(eK�=������D4��3�����N�
 ������*#P��&$���p���\�����[�i�.s��HP|�a��I^�1�OE�l�@��W�<����}���V~�W(�Y�D��������"{��=�R��`�c��vL_]		Yr����H��9���g!$:�6*f���~��?�@��S�*e�HP%�R��BY:(�)���@����"]�kq����C���}`���E������)���A���-�����pC�,��cx�haj^������`(1�y@�D���
��=P��c�6^	}�Z3��2�n�H8��@
&��7�2*ES�C�Vt&8�x��e�o ����F=c�c �����b����;�0aG]����c]�]����.�B��p�.x �a����l�ML	uD�rh��-aQ1<�'��0�1IO�����Gn+#p�g�86u�p���p�������1�/P����dt��tx���5�y��9q4E�R���1�]�g���OJ�W�m��;vWnrr�K�N��_*�JL8�H(����5��@<���;|WB����G�
�ZT��������RW���L���l{$���g��90���X���hl�+E���)��	9�����H:o�����P:V�4��D���4���eb�I���~���P��
���Z�r��������0�O�'�s����$�e��?���p��%b�>��N<���|:Dx5A������V��E'��-�o��?��9��f���_Fh��*Kd�$��bRB����AI���#[��81��E_v��N\��F%Z�nph�ZpBj�`�W�s�C�C��m_�����.����������T+	�H���x�hD��&s��L�*�����`���&��n��	�{��0�X���:��
Gb^���q#����*�0<ue��w%`kZ>���=Sma8��vB-���S5��mi�b ����DWJ	_#��pk���������D��69�5�^�et��RF�r�9� >lx���7"AU�����	�mu��'VX4]�Zw\ntE��A�7}�6�aa��ZKT���~�*�>���jl���=�
,F���Ur��&��w�l��c�6a+���j*�������;��8gSq�3�P�n����A�.t�	�6�lw��"i�&�h�������$Oq����7��~��qk�:��'��G�n�	�I�H�}��� t2��Bp�I�!��|���a�#2A����03���\|Kj�wA�|�8E2���
A�����s�E�H���M�^{qN870�z��746��?9�ZX����7�p0A���qrLhb>~p��!"<�(���4���7�	o�7�V�E��lB���J�5�!_��Gf�����a�:������M�H��h���~�2���;������wW7$g=�>��d�t=t �>�F�L�5��#�rw�V�9����
Bp"���U���������������}��.a��cs������L,�b��@fg���J�]����2.��w%8*8���4,�������P2nx���5��2#'y��q�1\;,|#�>�@�
<P0EM�a7��X�����a}lVZ	��Z��Rod+i������@�����*�T|�_�T6��F�u�B���h?�z����
��Aly�1{j!��x�x��B$��;�<���\�����i�����:�E]~In��iQ��}�]C�Z|0��������wZT�"V�C���n"�]�z}B�P�;��a�j7�Lx����	=����M���(?^����i:b���@����bF ��`F[�=l�s'b���	������:���~68�	s!������$���^�f�a��QK�{�+1p�*A����^��Sl9����*�#��$\���m%LS`�p�"����F�w%�M�C�e��f�V� ���a�����b��(�.�`����>��yz���p��SLMU:s����wal�����-H�k�����r��c���^���<E����Oo�C>����3rme����l��l�����9J��2&F����9o(��'�K>����aq0h�)q�dX�n_��J�$(���fIV*q�o[���a/��Z��T|riEb���cD8o[�[��A�Cuu���5R���SB��!_g�'|���h�V��I�����6��dG��c./�����}����u2�
���w������@|�V	G8�����|��Y��������m�!�?qp��5�����0�}�|�x��|+������Z:B�i!����#��&�vDP��vl�� p�����7�P>W�n�P����x#�����dq<�z����0�}����^Z����:P����7�r����B���psb����v���q���)U�D=�B�v�o�>/����A:�}o��k� W}���4��2=�2��1�.0�	�9���i:P���n��+#������o�se$�������$���$�1���������P�+���T�
ZR1v���S��������Z6hD�G(����T����r�)��0�fZT�GcW�]k�Fe����G�$�Pu*2���AX�J�����9�������,`�xe����@|"!S�v�|��hj����6}��SO����"��qu:���Vm�|W�Z��l�P�+�;w����*1u�2��\1��5�B��t�+��6�w��5)��iZU���Xe��]�"�lV�m�B�T�.b�'�V����B�3�6�8WF�"�6��4��-�y1s���9��/SB�����~1��9��'K�Av�K-�4_�����XM_}${B�TB�4��y��c�h�|5{f�y4��>�6�T��}��S���R?��I"��B���L��DN;�0�u����B���P]#��a�0>M���r
$"3*�"`����D�������uq��4��?���^��N/�|������|�V�i����-P��0��Q}��Nb:>�U&���w��b��bA����P�:�
�����>�0r��/���D%��Ifk����\��dX�
�]��3�3�|��Jr�~p=��GQ�n�{��s`�SRc��6���8(�t(X���D�o}N4�f[�Q|%ss����h�
�����\�+���������8�%�cH���
����z��Fz��Q���{�
�1��N���L�~��t�'��2����Ov����� l����#�l���4j��J�;��V�H���/J���Q��6��p���8��y_NP�
cOv:w$KL+������@T�����F=-��1����A�4G��A�t�a��?�����9]f��-3b�~1��\��o��.*:�s�'���UN!�b������e"L�~�b��x�b��J��V����`+5�������%�CCi��h#���������EI��-�����,5�Q���m��w��=�sd��M�dEh���9;uF�����@�Rh��E��O|�������V���<�V�4��$�?��V�?����lB���F%b4�����J$�v������L�����;D6%�L.:^`��[�b�]k]���m��vz��5�0������4���H������HE�����yr�1��!��gja�*Rk`�.��@�kj^����}^4��3�0�af�o�vw����J�h���^���S�6��&�r���b���2��������dBl����(DKM���"	�������� ��)3!�Um��Y/U��������}Q�����~~!Dv�b�: �$3*5�/uO���hwO�iN	a���'h��J�{*��
�W�A5O�8u4�X�O���+�L�&�wP-��{�i����Q9��X�V������0����~���Q)�����02[���r��!<TU,���M��"������"��"����(�n?/of�����2��X�T�z��3�����S��i �����p+C��~N_�Sn!��}bbK�S�ksg�`h�-�<���E��^F�F�[x���-�P������M6�B��Y�����4��0�w������!W��o��E�VY���-�h��YZ�VfG^X3��"��t�Xq�8��VF��X�n�����|m�uK&�8!t%�v\����X�8<3�q��:B��&I�����V�6�W�Hs������P�	;sU���L�n�8h��tD����u�2����9��=<��_'���	�mK��n�����?!QZ,ns"A�b���VT����a����^]	�����;r5'^��-�Y=D�a��Z)�����V���{Ne��y�������/����.� YO+LK�m?13�<�+�������%Un�(k)�mH����-����C��BdxQ�}���G"P���=��@��}>����]��o_�������;�f��D%Rw&�7��d�lx�i��
�d�I~�q����3=�/���]��I*��0���T�����Xn����������q]��t���`*�#�9<�
m��?��}h�H��1���
w-�6_mF�y�n��u��v�h!n����T��y����6O[4T��>2U8F0�i���i��=
f+�����,�?���������!~��|�������J�+�[LpRg��u���NOx��<i�3�����+�tG+�����w;��0�;v�n�c�	\�/l���fdWVrFH
�������?�S	�����aC�����d���_����q��3h#��� `X��WF��=8���b%�`���?\���������k������h�=����A����J�Nb�����l�1������N���'�z�!�J��#��]���V
�����:���<��m6�@��[�!K����x��o�������BE��zt����a�<(gx&A ��o����ae�oR���m6��"�=i�M�8af.��-AO�������n��N/��6� 0#����|�?,y�1�:f�_�$��zx��������0WZ���9����_B��s��a��2���	!2�G���N���\����g�>]��L�z�w��?�2(U�����S����1�]+Z�|5�4��e�5��	���`�@[� ��m]�����J���m �N,A,��k�i?�`�p���@�
���9
�2��h2�A%��p�0o��;������o8�U��"�-��n�I�me�R�'�b.W��&��e~9�7N_�ct��I�p�����4�:q+v���*�K����Y���+V�Y���3@�as`~_T?��c&����g��q���v��
������� �B���������
���8bu�:[��W��+��F������O�n��,S���� ����B����=V��6���*3�w;�����vL5��
����*��{Up?Z�D��6��la�<����X�"0�)!��=��A��_�x,X^��'��6�!IK���"H�j�<�W��X5��I����N�~1�u&�x��;/�ac�@Q����pt3JY�@�/���]0N�UB��V>y��B�D�R��~Q����s�4@�f��J8�<�}��<��0�U�_����w;d}22)n�����:#"��3D�"��
�"��p���r�I��C&��@@���4J��MEd��50� F��Z�F�����L��#/n����D(������j�^��_-�~���j�T�aw��}�;n�A���q�/>��tv"����4oQ%��^I/0e]�	i(8�]1���F�u~��G4M�j?��Q���
z��$�����p^����A���J�3��vZ��R^
T4����V��p���0��L`��~��#�d�SB�����F��@:����7�C�+24�k=n~]lJ[m ��t����p�VTa���qE�����VA��1n��Ss��+>�9C��:������g|h����l/'��]�@xq����~aZ�������'�bNS&�Z������������ ��+T�!�u���(RZ�bg�*����x���@`���	Jf4l��K0V���6f�%�����\/���S,L`���#!~c�w8���x���Bl�l�0��Q���C�����X=3���)a�!���8�n�~c�v��\`�.x���c���TU��'b�2�	���|���fV	�F�)�	�W�7����d���X���s�i	��4���<B�6$�����2f�AAd����9($bPT��h��h���-�C�`�@8���b#,��c����V�J���1���n!@4c����~�U�peV8��:)5����_c�
2%���0�k����PK��������Q���B�!s�n����JT��1��~���<�M3���@�@�y�iN�[Th/�Z���.WF�%����Q�
�X;���2>|^|�c�[:�U	@:c*1.S���H�!%Xz_��XC^��*�>��\��!,��Yq�����z����\������
�_�'����j������R�.�h1��F���O�{!u����4J!t����]m�9�h;�	Z;tz�@4c|��!�]�����d�
NS5����M]�AKI��|��u=�������>��t�a�
T���fUn�x4B��7�d��h6S��i���q��������K!h�;�u>��f|cf�c���$a�f����3{l�~ZB��0�Z��
�|����d#-�mxO�MqK�0���n����Y��0n�o�p4�7��2lc��~�U����w�v,I��4x������+IZ�����lCt���M�"3H+�����g�Uw��`�����H�f�K�/�` X7������H�����i��<r���x��������mWdt�y�����0a�,B���P�+O����f��`���W���z��������.k�D�!�zs��S����l���&�:�f��Mv�?�#��L���zwv����_���Zsf����x�z��N��]�t%�4���k�5/��q��0j�HX���t(<�c�����/�q����������#�����F���S�i�f��B`�{����l����A<<Fs!�������������~saZ�K%�K�0��Q��1�f&p(e
�x��3�9�(U��y���!��{)��f2HUq�L"l�@S�&�#
���S4��GKi�B���M=��|����R	�p61�q1e����	3����3��6��"�p��P�Q����� %-{2����fT��������7���}y�!A9#x���^Eo0?{a����:z�QwXf�s!a�?.�����X��)AKu��	�o�lr������p�GeD��#�u.7�����kO?!0�5���2}���,a�nU)���5��sd�A�.(
�x$K-���PKxSN|��me����s4�wq��8�d9�!�J�(��4`e�DD����B>e�7 ;�_!j�������5�
��k�{��du^	��x�:����*!�O���U����@�qWx�}���M�5VC/��2�1���_j�����{b��T�'��zb���`Y�=�B������M�HV)��)��'h���*#U��X���L��L ����S.n��������n:fC�-�`u�����9T������iz��[�����U��(�oa���&��%L�UF�����]�O�|���c=��BH����{��2�W�;i�&�
l{��pX'H2
���qL>$���/b�!������|a.A�>���G��i~�|Vz������MIz�w%�`�wTo|������~-(�w������I�
�	�B.qHL����O{���Q�~�L|&	x�M%r�g��h/`}���(`�+�ME����
V�x��a��lEc;*�FG����q���Fw�����	���`ah=�$�MI��0d����V��Go/��b��&d0
a!�w��S6W4��1ql���iR������Y.+�Z����Pa31<�kh�����i������0��%�
\��Ta��h6L?�&=4�����6���_�?�����[���9�C5��V�f6 ��x����Z�B�M7	�`c}��&71�0kfgM�^�Fp��njj7���10�����=��#��uhX}Y�
�R3?��W��
��D��B6}�~��'�v�U��@)����(z&���J�!}|(*A#�9������Sb�
�2��E�����2+P1�����jy�bt�_��3���a��/R,mT2��9W ������.�J��������2���0�R������
}�"�����������b�[����.�I&��r��g{���kD���0���Y}����>��cV_�;S��>^�a�������NgM���d��p�o�nd���������X�/�m��}���`��J��7xX��)j�a��
f�%|���k�+�zQ��q�/���������q{N��N���*�g~W��H�Ze���.w�q�03cq��X��5��r�W���z�B3���#m���Bm-�h�|����bT&�������oKI�����;��_L�4c�_��B��u[����o��P&"4�g��])��@d��}��2��Z!v������u��)h�_Lx���P��OsU3c�{����sz�m@�w?k0��y�`����$k�����J�����������qV}�������v
�p�����=-m�i�B`�$���?h�M9��k��K������b��'��Afte�AO��s��a]lWJ�t���M<��O��U���������t�*������l#����9C:@�\<�'B�������&j��N�]#����������S��M�3�_Nv�fM��}����	lv0�;���g;�p�����t�fBX��6����'#������'3�m��
"�tv�s��
���`���O�e�&Z��X�F���ft�f�0��`h��7=�����A�m���&����Sn9�I�ve�q�8}�j����|��+ap�������f��'u ���8c7[������� Zst;�����
&�8��'lB������n��w�1�a��_L��������TLsvm�I�~��0����1Se�_��uL�9���lo����N��x��;���w���~��6�����	i�;�[%\�I6�l��7�%�F���j?�UEq����U�tu�����*9q�*P�*��"�z��5�(%>f*�1Jy���{�R�c���������(%=f*�1����<J��J�������*������v���Y�n�����R&��Nt�2�U����C]�L!e����������S�������?��1C�E�����5����o����~�k�������sm7^���� ���������?��?�����������)�j�'���s��S����#X�&&����e���@=f01�����gb���R	?��W<�����@�xt���p��	p���?� �@f&����z`������}�F���!���!/�����|ro�����48 ��I��,�������+�w!P*9�2a�<���V^� =���p�q��3�ofD�~WB���*&
���f���P��:p���zc�[y2�$B�i$���`����K���^'=���,D�S[��)��
�9%��Dxt��O0�?o~e"���@������DruO2�pO;i�~������*��r�UF���4��ip&6�[����Ck��8T�%��Z�-�Q�U�iL�/���w�U�V������~cd_���7h����
�����we>�v�!�!	����PK����	T����
���S��T�Q�]
���^�iN�-\��'�V�_$�_���<p3��������1+>R�4���h6\8�8R�j!.h���X��O)���I%�[�U�Y�/HD|�T�h������x�9����?8�t���E��7����F��c�fD����1�Y�����.�BZ���&�i�����Y���]��-	X|Heo������o8�B��
zCgE�8�7���~1]O�L�U���qaz�����:w�#���{2�)�=�3�O�����VF�0H����Q<�p?_#Z�c��d���e�0n�G�H��C�u#����uD�E�N�x�F���0�%�E�N
��!�;�5��t�
�$lCf�+C�<z�I����W
-JZ�0j-L�������*�a��[�����s�����mzY��^�~#�L�:�G%Z
7��i�z����	�e���0m�q!�D��n�_��R1l���QOj�OKS�pK��;�RF����������m����]�0�U�#�s+u"'��KM� ���n`�^�BSGJ���Q��Z<�P�F�������������
U5�h��oh�I.���}7�b����?}T����$�����lS���dp3����4MW�L��������P���!/������2��p�����":�����Pb����I0>j���%���,O�dw�s�)G%��@�hj�LY	-��T���!1AQ"�,��Y�=(?���q������b�%d"x��i=��	z>$5��ax>���D���V*cM\&�d�Q{WF1���	���ce��������4f��0��{��	�����1�t	Kla�P�0�
��]W�+����<8*�������/��u?>{�3+l�gs��@��&WA"�����a�BW�kLsJ�Q�gOx_G���,m�t����	�`����i��h��������
��F��S��)���4x�Cf��6���^���iJh����x�^d���b:�)���QM&��E (�B$��}�<�n�_WW�P+�
�h������Yb8�-Lv�>��h��a�S���~�6��\��J����]����hA�>�����v����7&
�L8�+�����:�����?��d���s�Y�U�s[4���U���h��s�>�%�x�bUF����Xy�����m����h��@t��Ag8����_����u]��4Y�k{a4�m,{HZ���M�C-�0����q�� �1�?��
�r#5����K,����wa�y�����Y&BOjg�a|��2��^��5[���4��^M�;���������M���i"5y�!�&j4�<��[��]��V!��s�	W�O^#{t�V'LR��l�I���������m��=(���,��i��vw=�s�	�s�����f]R��g�]�5C���9��FfFk���9���S%�S����5�(&��?!&�IJ��N�����Ha�����������[(����kF��e����n9����7�Q�#�����6�c2U������(����2Q'ss�\k����i��T����B�1~a:�9���}���?��^���t��fIl>�������8<�o>�.�������}iXq�3'�
��1~a�g�����9|Ex��h��-�~3-�R�EI_d`N�.up�,�`Z����f�>�	�o!��������3�-�6��LT����w���0k�e�
�l��#���<��s�K��+��u�[�t����41:m-����������B/�=���F�+���R��-Wy�a�i'LR
����,�-���Bs���R�\�B\��$|?�Ka�<#��q�]���:�9�y����MbT���>��y�3���\���+�\�����hjo��_��x�����=��X��Bt�1�
�:PZ��+�QL�BSw'����IK���)��vc��{#���h��R���m��-I7'�s�.|WJ1jyC�V��MTB������~6���B�L$x�5��5���s�ja�98S����6��|�0RC\�1h^D���9�L�������is����������m��1a_��&�mX�6���O�\JqC��C����w���Jx!���B��$�c[��ek�|��
�+�rK��lGW|���*���xJSL2��{���FI��$r�f�{�i��*���s
9��>X;�m�ho���FS!���~�d6\~\�lwsF���t`c����M����-=Y]p`o8m��E0�R�<�����d�S}>���*��|���N��6�q�U���sw�����1���'��m��l$�~���i��^&E�������q�:��N��n:6�e�rp��������:�7�����2����U��r��Nd[�z
��kj�|�#�h;�A�u/�{����P�D�V%z���f�`8Tp�iG�S�:��xglY�=$+����'��`h�SD0��'%ha��������>��!�V����#;�����6���Lp��Wqn �E�k��/�M�����L����s����|f�����"��f����2A�vVB�Y�����q7V���������Dq�mK|���������+E��`��6\`���|$
��B���+��LD��W[�aw�^�1V�D� v:N&�4���^h��q'�I�3'*���Y�K"��VT������`���c��=e��D#�;��	��������(��e2e������uy�����Qg�WPN�&��c6do���O��-gL���T9���u,��X�U���a�D+Uq��������s���3
��]I�fQ�D���#�}�7_~Drb��y]a���
�����
\;3Y�����7������i���(;3�O=aC�Bs�b'nN���0�/��O��G~/=A*�N�r�����<��}��H4��s8���F|�?7K��a�gsm��V1NX+hq�|Mh%�{%S#������%������=�?.�W������#�|����J��lRFT�Z��3D�2&)���<"���<��v��
FSm�'
�=�/�2�6����!+�����	w����`E�H>w{"�������==k����3c���2xb  �����/�a%0���l�h�yT�#��"�q���]JT0!�H�>J(��$��}�s��&�Z�e��m�j-@���;��X�^u{�{�y��������}r�UF���.������DcX�
���5�dcp��FB�PSg�/��^������u����7n�j=�a#S�.(����L����0��5w�qt�����c���)C���-��2@R)@�B����<���@�8@
�=D��:��zI�3��w27w�|2�OF�Z�+,�w@+����`=��:����FB��z��5/��>���O���5}zy�5��%���_�5u�%1m�EHxG��E��L��?{�)VF-�82����F..��J��s'�D�����^��
��U*&��T��p;r��ps�������'��!�����A������c6���i�wET5����!a����lU��;]UU!������b������<�?�XiS�
:s�>�H�Mo%4�	+�o��`���>���^<G|#��>�%������������.!��n��:Z���0oE��C9oE^$s�T �l Z�|�{8d&o��GO�/hh�����D�`,��&��52
�!����:X41��TfU�?	 �j���V��m�us'���T0�]V�Go�B��)��G�H4��yE����B.����L�M8��B=	���;t�~]x�����8C��L�*X����+':=��~<��+n=�__��%��Z,~<�y��"�
�S>��g3�N�-��\��!
���2����B���P{1x��O�����j���kj�@�Gx3���\�w�J��yN|�plm��~���`����������l��q����������Tg��"1�k"
�����k	���+��@Td���M/��1��K��cMi��{�X�L���F��;_p)Y�:��u�t�^L�s!/�SG�f��d���l"Bo|
�7q"�< �������NnG�8��1��{������I���(�q�c�@X����������b
�=5B 7d�zG�"�Q����+��Lh���pfKzG���@\8�����N>�<U2���QH�Y���&����F!
�,�=��JY�����w�T��w���.�}���<W%W��/����l8��,d����<#��\������[�9���!������u���u�����y34��]��a��~�D��m"�P,kZ~U"�.%�q'2��@L^>��*�x�f��h�&��:.!�D(�C�����u����L
O��_������2`����U�����3�{�T�*3�����l1����o��z+{VB�{��vMj���N���S����TL��/)@���6bJ�� ���\�P����v=�����~�������Joca��5aQq�|(�e�"����3����s��??S��p�-t���_����dD%<|�2��h���-�<����y�v���M3C�6o����#���nA$�:<��H�l�{:P��Q5�����q����$�L�kP�=�������
�U�O� �M��w'���q�E���)RV�.�!A1<�DP��K�+��;�%�J�:��`������j�r��o:�������nw�f��]�0�j�st�N��#�$�eK���c��6��:���Lm�� {����k�!���G������o�W���_%8k%':�V>H��z-��9�%�I�
[��)�I�odCP+��`]nX�I;�.G,S�Y��lH��B|�K&@z�c�iy��������h��
!���W���K�j~��1�����?^g�������R&��C��,���e&�=zz3
6���8��S�?:$Y��N�r�$��Y����]C�G���������UN�������r%
|6>K(��Ip�����L�j���5Kq�Gxi�PZh��w|������L
���S`�l�
cVR��>J���oO�U�����GY�n�����Lh����_qAk}.Oy�e0�!M�-?�������P��7��m$��v�KA4Q&"�I��+�$���J;���=�w��u�R�*����w���X����)��&�����b������G|+�!�V��;=z���lD���~���s��Y��[#v�%+�Z��!w��������EYu��g��L3����Ht�Va��#���/%�>hAj�K��~������5@{G|G6R{'�
��;
��.�@��X��j�VT@�)�[<�/��<c�W��5�l�D����6@lMk8�����q�b
E�:%[$���8*�������x��f��K�m�7�:��{9s�_�[4b�7��[��~)2��;r3��OH1��XQ����b}�N���0��PW�iG@�[E��p;6?*Z���(cq=����? Z�7���^	����tI�������n	m���Dn����2!�;�����D���e/�d}���(�~�*� �ND�	���H-��8x�j��6����y�m����/���yr���M���^LY����V��46��A$<E#N�������I+���&<�;�C����y�� ��[�Ok����6j��	�(���2���������3��lC�'�e��\g��|G#��X���`[X���G��&��2)����b
�|�]yQ%3�4�N����4��1���/Ot�=aG��`���{G� ����5�b�m�+�R���b�Z��L�S2!\���n�^���C�~�(�~����cw1n\�
x�����?�]��K�����1��q�d|�)�=����_�uHh��h���@."��8���,B�����M��#�:����e�p�n!E��hQ��'����8�B%���	�9|7z�����bvd-88�����%i�����O&xG���`Xq�'�-a��=������G�%��X����$������2��H�XT~G��(���}�e��pK�h���������*��G���&��&:�[9Nd����c"
�O�<�mKY#���-��b�k���#]L�p`D����1���z~�6<�"����6by���jT�U1bG�,�q;��Z����a���E)��--��S�+l>�+�%S���a����� ���g&l� y���+�u�`q��v	��

e�����l���
������
� ��<�����{���V�k
����v����]�/4�D_�[:fN�j�j�v������h�����c�{�����?���$�F*�n����������T�J	J��!��T��F�E`�������.�vp�
h@��`�b�N�����=%'#nA�Ho"�B��a�'�];�y0��sz_�sIc�v������]��:VfX�������������j�qTly�&��z��=K���Y��L�y�	y����#��	���MxG�T)��Du����
[4�c���O���	MD��.4p&�"���L��
��1����[��c]B�U� %@��1�[c���O�{&BO�Y<����Z|���Zh]�8������?�>�<���z *�����I�"�*Z�D=�q%s}��� �|]�w���X�{(��_#�\bK?v������!\���z'Lg���1R��Xq���k^N��P3���%�3z%��!�N
�'���{��?j�2o:�nqmQ�-�im���BV�����aW�)G�;1�~o,���m
2��8[�����U;�
���5W����-��(E�7�U����f��F�4�|�N�_���~PdN�;>R��s����o#u�������~������������_Z_����v����dp�9�xuY�U����{�J�W7;�W���m�W7�3����%�m����&1�t�`��^01-�~R�n���I'2
�6tU�3�F\�K�P�3��Eu�f��=_�~���lZ�0fL'K���D��;�������y����R`�����l��`�,Q��m/'��:~?�����_y�u���,����T���D���i���e���r�.X?�=�@�w��4B.����v��8��gE���Z@B��R�����U����y�y�"�HU�����d3�	O������?�<I>~����#�n����)z���P��rX�/b�-�������~��R5��{��a6�B��HS�,�������6|z��z�H����)�8~0|f 4�w�L�be�y~��	Id>�AJ��c�c�:3��jp$J	�r�$�R����x��*��A��503��z����Q��T��3��bj���K��jP	�������-`*���J����$�� 5�����M��#��V[��Iw��#����i%����4����G)���B�`s-b�8�<t�A���k��X�p0t��5��d��lJ�;	�HNU��t����3l�O�8�@6��x�:���@>2�����IK��k�����(7��T#c��J +{Q#�<�����[�H��������f����)��.���F&ER��J����b��a���G&�+A�����~�AK�t%wu�F581H��7O0U��HX�.�qiA>K-x)��7��XH^8�\��H ���� a�J!�PE��*<��@0�^���9<�	��{y�Q�������7?��#�"������R��,��H+5�HD^�����*��P�R��"�:�8�D�&����S���:��W��mQ�cmc�����*E��p�������a�5�H�&�V�;�HfdP�+U��9&�&��0��NB
��A[mI�kT��H��5u���������Z�Z�_BN$��y%x-�21���4*'� ���8K����C���%c%��`:�J&<���8l�K
wV
G�����8�0L�s�-�k�� g�m�a�����G�3(��gbO��x��>M��q��{��]v�O����t�\1u�u����O&�-�������lC�i��>�S�@�0���a������OD�f���
��Y�(��2�����J�C8����+.��OV$u+�����xc�s��[o�,=u��$=�D�����C%�P��0E�����!���/����J��9dV��?��G?(���������M%��'33�5� �\!�d0�2��F�'�|����`���q:�~
�__��J��t7ObD+e����o��lR_H�������:.O11�Y���7��@Y<���I��|��'��]c��R6�����$<|u�	���>��E����c�� �L��d��5<W��L+�15���/
��+��� ��D];-I�[��
O�rTn�U��0�b ���51�q�S*vN�R�_���Q�/.��u�5��Y�,[4��T
�E�]z��^������{�r���Kx#���ku��\	��>��ev�V�g�#�����O2x���3fe<�T��U���@J��I���7��0H�����Ab����|	#�-��/�5������]b
�1�Vlr�[����V�c��X4W:9�)
p�<0�3��-9t���q�����D�����(�H��SF�d|H����=�r�R���>�r#�
Vd��G.[���A��u�G_�('�	�~r�K��\e4���AML~}e����pSF�r�,���<(���
:j\;M+�������0����z��k�6���8���@h��
�C%c�Q�xy�}�K&����� �'���=�@��+��c���I0,�:�)Y=�s`z?���+�9jB�?�382�'��a��5M��6���0����������D�?'�����|0����j��g�1y��g}���:���X����	���U��0h/�����.#�� d��;oZ3=59�D�=[��=���12�!-�������5�w�J����a�k��������w�~�%
1k3�z�^���E�%�!f�.�'
�\��� �VtQ�Y��&�vi�y���P��}~�PZ���+TT0�)j�=�=0��L�$��*i�k�/
���7e@U���t�DT0��5l�T5�i%�.�z?��&#xf�=o����Z<�x(���8�n�3�2 L�SJ� ���6byh�_�C�A;����1k?���O��M���C�-'>�����<.�������'
���g{2�R����]��2����7qXF#a?k�2�q�
��>2(��Lm����u�7���G�<C��DRK�FB��~jp�4��=�iGls���[�n]�+%T����!V���R�a�zU"t/O��[3��[�������R��Z��v&j���U}�^��F��g�&Bq�QE7��\4�{R�;C�+���z�OyxGh�}�q� w;��P���o�I����k+PY��*j�#9���N{���������h�y��=�-a�Dn�jQ��~i���$��������f���b���B����k��$���[n�Rvo���iy�U�A�T�4��v�72PX�S��n�
��OUoa��,}\��'f]�����0�y�������9h�vp1����|�c�^��v��1&4��}�TQ���g��
���>�g���A,�k��:�3`2Nx ���pa|��^��&��2�%�|�0.e�tO1!��`��Cd���?�R�>	T�/�<�~������������k7EL�G�AB}=���8�����Wn�����w�b���;r����D|���[;Bl�w;~{�q)!����k�����m��MW�� �����W������D������@��u���5^=�z�\��zu���pu�n��m��k]��K�+���=�*Q�z�����W�ZWD��1\=��{�I�ru�5I�����2I�2��O�
T��U���U&���@y��tq��\Ek�U�r����U�ru(�1��JuL�:�m����k�+�ru(�9��<�z�\��z�\�|Ne��2_S����c����U���J��Ub�J_8�zN=t������U�Q����]�j(s���kM��������\��\]C���
%_U��v*	E}*W���6]
E}*WCQ���j*������j�����j�����j�����j���3]]���xu�n��^�*uU�qu�*��\
E}*W�ZW���j���tu�5����������j�F�
]����1t�/���������@W�b��_]���W�l��_]����1x�o���������@W�b��d��uO.�gq�(�4�j����u�O ���3
��ZTsqu(�1��JuL��C~qu�u�(�e>�2�!?
��Z��4��P�s*�5�����v�|s\r�V�R'�:��xu���8|�ZD�8�"b��+���0���`������>KFg��?���7�/=W�����av;��H(H������)����!���h� +�:7X���"��������[QI�R����(���Z����V��KLOr0��~�L��@��Y����)y��E���xy��L�����R`��"���*�'�M<x�}����}a��T?W��s�OD@:#(����B|ED�[�9��!�3�PI�P�5:��~0���w���0��iA���w�R�CX��0D����g����` �*�o�Q�$Z����6�CU���UL|����`�������)}������T�Qx`"$����afRbW�W)X�00R/f����3��D
b��p�����	n��b��[�w):&�=U�ZU��?2#d��J�0E���3��!�����
���L��K"����O���BD@$��1�����C*�K�:���f���+�:�!����O5{
��uOJ���c�+=F�~xg��&�!�X]_6�?�*U�u����5m!
d$!��<���R�NA���"=��������ME�
�6bE�C��rg$Z���7���@�B!�BGG�e�~�p/$����D�:��Z�4�^���<>�;&8���_.�k~������t�����������w��U:���`B*�r�g���`#t\���N`���n;������Q!*��
%XYl�e#��m���=�����w{�6�[:�!�v'�2�
��G��r��{��L�+w���"�����$�~0��
��y3��vt�t��?a��ad�]�&���U�����Q!�)i����~������~�G!Z*��������n"�V�Dh��j>Q����z�L��]�������>��b4�x�S��8�3�����;)��Q���z�/-�x1y�'����y�`�,^�[�����)FX.���uRmk(CT�b�:��:��B�C��Eo]OM��`�E�CE$EF�E!�f���0�2���>Ge�;�[�=�=l�&��_3��%5���Anb�UFuf<��"V�:�,��ZK�j�����������#�*��#�������/�u�G1X��>�����+�>1������D1�����r��YMB�L���U�����`�i v�.��Z�	m��z�|�X7'x��"Za��&�?4�o���e����(�����v�fY��_D�]�yqp�:��������v\%H�m[~?��[2x��ve|T�tL��-"��Uo���a�"��@-K�;�f���	w="F;�����/���B\�S53��q�v�p��00^�g���q]��*��^������|�pAp��p�v�.6�"Fo���������i����U�����d�����{Z�S�-��[�JfP-,/|�|<��=�����,Q8�#���>��+K���
��J���	s~�
�r�b��d��q��gJ�:�����D�|`��K�'f���O�����ya���b{��5��RlWy@:7�[���������Nd���^K����`��.�����;3.�y���#|�E�k�����������I��p�|@���_�>(7����`O�23ax@���ea�����X���h������;g�#���S5_�V9���zqj�{�'��������0��q"���['��p6�iA�G�S�+��2�{�w&d�;l���9�(��W�/��#���F0~����#v~�{�"�c=i���=ND�K��^�����)/kN�O��"��
D��DPo�c�7�@E�qm����	;�.��
����4��`s�N8�����;3��SV��������-jG�y�`��+���vg7��PD���7|0(D���7�!�+�5�7p�PRz+��D�Yo������w(��c�>�^�6Eg	���[�z���-VQ&	4lD*�g�L�n�]���bP��LN;'�u�{A�������A������y�1�i|I�����o�5"�gY�%�]�!<��3f���u�j"��b%�g��w������j�Q��f����rd��r��L�+�+�����H���x�f2-�����"W.�>e��U=gw��2�U�=��V���%��n��CVX�����-l���2� S?���];F{��&��Z����wy���Q"(�p-���H%���0�N�$'��+w.��0h�mBm�iZ�_}$0V�.�<�yP��VY&f�7�w��V��-��-w����iO<~���
�E���R@Fv�~0���\���]��G��5���|\�����0M�|p�~��nZ�ck"�t��_������b��:�Xt��>�#����?=��T�>~ ��^����?� �9�^&@x��6�����k��5��8���Q��5�����q�����#�.��4
�����d��X��M��i���)6�%����`�Jx�x��~��D1�na/�U�#A�.%����keH�w�����f�	m7�o9H��M��u������?l�/W��i?��^�ca�L�;3����ZJL�s,<����P����3c�|7lW�3s,�-�:���a� �9c����G������k`�����H��OZ�T�ae9���KYU���.����&�P���CS���7q���E��#�"��P:��O��'� ��H��t����JY}&I�o���}g� ?Q���+U��`b����n��'�����	��'"!t0WU�@�8REl#����g�@�����J\	��a7}�r	%<Ql��	%l�c(:^��N�;T0$�(�CF�5���#��k%��J�����Ig����R1�`�����8�/�?U��-v��w���k��-��ACf��:�@����&v"���9f��x���
�����T��N�?dd*��������$�y��%��)�����c���>���lW�����5B�h��a�=�����1�}g�m73�Wv�V4�,idfl���C{��.�Uo����w|Ie�X''mYn_e����f]xL1-�CAr Jg/��]�3s���AiZyy�����n����N���t�����u���D#��Vl�s���;�G|���!v(ow����l�L���^Q��T~'n`B?��ad����u72�D��kl�V��`�,�2�ZN���v�N8��/N,�e5�aI[5(�t0w�x1�#��<j�]S���A����t����w�b��������G�����5K�x;���j`Z�X�^e]�v��h���S�!�@<�$�Z�	����A����&A��'�zk��I��cf��7�$����N�u����e?�Uu��#x"�\=6l�}/o��,�a��C;,y2m�Sk�;}K:Y3���������G�id,��?��Y��g��8�]���p�����2�X��1+�����4!F����.K*;���k �]U�@4`�S�����$N��?a��|���D��v5���m���b�8�-�K���
�F��v=��/�?SV�}�?���rK�q��]�&*����{�[���r 0�.^�fC�5;
F!�'��O)�vGC����^U���'�0������L�X��h�xdX�c���V�MU�F�H�h��v�� ��o�e���12���7
�n����vA���/��c���>���k��,\S�X����$3]S �k�>�N1-q��Z����������R����vU���WH/G4���m,��H3;<Sc�f6Sj%w��$��������_�����3fd�&����X]?u8`C>�0����*��h��9��$�?8�p���	A�����]����!��x����
"U�����������	��wS�J��TR��m
����{�cS�SF��g[t��H$�{*��
�W�A�S �8!�7����+�S�MQ'�����6@Mkb�&�P�bL�~�z��W0Q���~�����~Lqn{h��r*<T!��P�bI�7�n5���&��?E�)W���\�C��?p?�,��#ieh���y,^��<C��
���T^u�81�DQ�S2�qnf���;��0�&�`O�� '����Tk8#h0%#+n"�!n��,6x9�:���:
��F�j�8=�*~SM��0�~~�"��v������g�����������&[��Y����_�<6�����1|m_n�H�D�q����Eu����)��f�,o��0H'D�s��[1i���^v\��#S1�8>��q�R�E���7p�����c���>����]f��ND��N0�Dw��I��������ng�����p���v"������@�mE4g�
�Qv�'"�C������_�������?1��cs�i�Bd����xc
���[Q����!��tLM����������32�q�����7w��q��I��$�i��w�O�q���d���j����{lE
� H�(����o�9����J�m2��ND���=�������^�������?7��zl'2P���84��q��>�\xg��tg!4qsQ�����<|as�B%�2����?�8�CM���3=�/ju�N$��U�is����@���n�Xm��n���������q���r��`F�d!z`�:�7~��uM��(��3-��\��]���W[��s��;����.����*J������@��-����\�&��#�4��_�_��`���S�X��)Y��!�d^�SL�?X�?sm����{&21��G������,`
�a�*������i?���P��:�83�q�� ��r��_��
��:"v�=*g
�����9�3��D��b�o�$;�}�C�_��f��
��3cX��$hX��g���
�&��Y�B
���\Y�<�83�1���APz����wmQ�x��6S����w�'<c���b���y�^yXc"b�u�k;}�)VR��������a%r�������Z���D�6������������@ Sz�����~�
�0��z����G��vi7����f���/
��)�Z{�m���4�%t(�U�����7~	����L�8�O�"��i��g��
o���B���
�aB�6;p�43�&�l:���_A-������ufoK�' ZiY�x'�*���\�����3�6#1|��Tl1������a�zL]�����8��3���m����D���� f&1� S�"��\�����h��RE�A?0�.FI�%����G��p�hN�@E�
��-��l�2,��+q)\� ����C�����o}��H41���F������J��a.��@�e��5�����M�5:��f�H��Y����N���X������u��m�9���\-V�n_� u�>��e������7�[��qBTv�-OI@�o���W &��(]��D>��t!b�O#��;M7T��l]��������U��3c���o�R(6C�>\8����7�
�'�����.U�1��I�NL�'&*E��XR������m":y4�G�'&0��?X��[�������Y{P�
/������o���aC�QY:q��<"����<�7
���$�:��.�~0�1�K�'���q��)��~]77b"�,��&�a�<���Z�|~
[	��A]wKCt.>/����eO�7��::3���O�qD�]U�W+7h�D�|���R����XR*L��-D��\�U����*���?@�I"��h�5o�1�9�"�M[��f�;^�����<�M�\R�
h;S��_�,=-V����Y�7Vk��<����`:���0�OV��<��=3-�������^@���.a� R+0��c�TZ���A?:�iz�6�S����JX�G��Aa��Y?,��w& u�3`l�"�q"�A��Vt�T���������$���Su������C?^���:2�-h���8�C|��6����fS�j���%��}���x=H�Ul�LD+�*��>���D�#��8���p}70�<�N���(*rd��b\����"������Le�~,��������l:�(���i������69��q�������PDqC��=J��U�S�J��`3�z����;��~�f��pv����O��^gZPF0���-����rf#���a��mk�#�����$\e��I���N��y��<Cw��#c-�
�[0���Z� ���E���^�4]��	c7�j�������9����;h�uuqL���R�W��������C�VL�p�4q��q7������Q���G�����q:���p��P\v�8���7"�9����sp�@��er��a8x���=\)g"�F\\3`Wl����i�~�)�B��N��o��2����L�����p�rO�.1������W/������hg���m"`����=�C���'� 4�"�+>��z^����p�'2r�SL��B������T�A�����n�b�!�A�������_q{�������7B9cF���7"	B�.�ODLL�!w����u�EC�����{E9����3�raZV�d���`72l��?������������������X�8q�T��D�!?�5�@`���#c�8����(�����E�9���Q�/1��L���i*BR<�{S'��%���=h�����7����h��|N72�T���6�r���k|�n�b��H�6�q�d	���#
9��..�`1��,�@���d-��n�s���d�C�4�����`����^��p�zYdEv��D>���6������L�K�0��e �wH�{��mb�_vM�dv+����������g;|�3���\��De�����P���|<1�
����6��� ����:����v������CC��}�`%C���u��dg/�F���W���)����	F����?@����ij�(�ftEfW{�>u>�a�
�g�Z�g��T��?�r5�jRj����33`{UXv7����.�����?`�-�e�'v\��E6����F8BQm��l�����?ywn<.�xK>�#�����F8����{������t��/�O��l,��1� �����B���`�?�-���Y�`1�b~f�� .���8� �����E����x�&���$3U�EY�
�P����	��~<�y�C��������B�f����q���y��$N��x�{=7�9���)u���B:�Rt��eP��L�����
�%\c�@4h.+u���d 0����po�<a��T��M
Y��h�����7	s���s�/P�.���P@�DO���R���w��M�F�
����L�C���G��Z�<hU�Wq�U����T�����u��V��Pl��q?�3~��s	�����rgq_���]��;w�'���12�9��#�u�0��U�������&�W�G_���JX�[�L������j~��s��x���#�RK�i8D	/I�������7�����~nY���� n�
���<J�)�G4��$�<E�xj�
���h����	���BkU~������g�-�^�|$J�>��<����H�<��I]�PdZ�K�B�g����&��\�5UC��obs q�E@i�W���;�v	�T���g���w(�A���S(��(�w.a*�F��>]�<|#;�����W)B��&��\Z	I��PtM�� 2*��;��M�71�� 
�w*ob���I,�w*q
�\���w*S��>+�>������-5YTM���1�,GoK(����Ry��;��2��@X��J��KXP^�#squ;�v���k�D�n�	��B��r����m���|��#��GBM>�p� g����bR~�JS7�'��S��)E0t��L6��������U���~d�!|��0D|W��U#�	��8,N?a���
���^���b�(5�|�O%j�g��� ����-�nV��LhS��(w��`��G
'�2
`2.�#�c�����2EJ���xYOO���.�"RB0e������<��^7��H9�A��l�$$��G\U
/�\����
��s�q��$,4�7�r9��
�^�6C�u)��s������w��i.
�,pi�m7����'"�l�~�%=n�9%�/�M�^�����'�`����rX�:UC,��d5��[}VX�����6Fyp�To�����W&����Vc!�l��Y�>i7���q01L@���F��n�:���"L#�J3���7HA�����'����V�A����>�#��Z�}G�
����<P�����x�.�}e�V ��F �|�i��V 0����jy?av��'���s�$�4����J����<24���R'�v����-,���'F���-M��;������>e�h�������������!�G~��b����o��X�c��L������HNV��{�d��*Y���
�6�zj�9�o4!�G�36����	o[�52a�m�d���S3�t�w%��g"���tXv^��_� ����p�V^gP�b��r�LX��>=���L�sH>_`��U1+3~�L#P25��`����O�
X����x���1v��p����6���K5���
�h�S���<z��;�b�L�+�-���r����A�I��C����	�:f�Lnu)j���73}�%g����b0�w���2�+�##[�
��YO��V��~�Mg�*�|j4P�%5����f��{#��z���gs�N8���p��Y���w���E�n�����;��|�7o�����������:T1�	%{yR3��qi{`��f'�t��w��^�%c�^v�B*o����3�c���`e�fO��s3�����w���;�>o��Cs}b���`�F�MK��Y-�#��m���",���s���*�T��?���W��n�b��p�]#�k���mq���'��&�'�oMvF�Z&;��>G&��`��x*���������OmR'�';�����w����>�YO7_��[���D���L��v�w�1o�/-�l�D�3������(/���p�������$|g"&:9�AW����`��9��a{b�q����>?g9J��{&*���4M�������i�V�8����@��;���� �wt'���ut��)���>�����O�*��M	cF�Jy?��w<��@�849R9�1�-�n�b��;��=�RY��s��7�}FG���>�1x>9��>8��F!�2�Y� �H�Tg�����f��s��DH����f�����3�
��2(����E��@yuGP�JT�ZT��
�W-�o^%*W��:�!��^C���1�YWUf]�2����W����2�j��W����e�U�YW�2�U���n�S�����^qU(�� ��_ua~�����cM
�C�"���9�*�
�C�"���9�*�N����_[��l�������������6�����J���<�����_�����p���s������������pl��������|�_������~|���O�xWY��v�B���V�y?s\0��e�`{<�8� ����S����:q?��|�T�
-�W����	�<QqcVqkR	���JKcT���2��� �o������"��l����5����U?A�][^��g)E4g3l��$��O��<��R��������
� �6�C�!	8 /��]��x}��=�-��������qV7neNi�;0.�#c�`��B��F���1l��Cv!��
�f����(�������������@��3,����W���U����Od����\�	���d�q�N4g������72��]$�D�7j�w`\FF�-��6URt���"E<�9����}�~8u�gG%�>���O��,$�3�����'�:���|���_TC�C
�[G�B���x[���c*@'����58��)#~V�xQ,1-��E�@�Dh5�E!�,%4%23���a��8<�c`�[D���"��B�����"����Q!s0B��������P"?"SJ���s���P^P����*��3S1���1�����5�t���!�V�����l��?���E���
Q�C�v�V��DB�1��6���0RU�/
shs�p+�228�K��%D�o`0g����b�G<�2�}u��������a���T��eyV�����C��p����wV�4��P2~��w���������:��
�?`��2>T&Dw{z��B(��!�F�5/
A�`A�^E��e��x���5T'"pr��t>���f�'�wf$�{/?�/������"����51��p>Y��=���T����)��u6q"���-�K�����[�;u`� Z
����L=q���I��4Yox|=r"P��b��2e��i���-��<�	�����
n*���Ea&"�����B~��^�q�V���P7����������q4��4'��Zr��tk�<�� ��L��Ceo�(���.2��3H4gx��5������T9�b�"�����Nmn}T�~r�]MW&��Oy�O����M*
���t�����ov���
a����y�����������Fg1��]�S������)0?���J(�q^�\�var�s�$4�	��3����U�$G%���?G$'( r���3@��������|x(��,d&xw�i���<��z��gf:��j3U1����(M�{d�U]Op-��3c��iVbi>��x'�5�J�G�����It
YZb���TX[B�#���L�(�]����E�����Jj�r]L5�Y�P�^k��6��	����D$\hRv�\A�3-(D����r��LH=�3$j����TA��#�O���2P=�c%Z���O�+�"�����b�� N����@D��l�Q\���^���#�@����L8�����b�������<�%�o��Ju 
�������M��������B~!��OO4�F���0>m0��&�
�U�^e]��_B���u<R{���2�����n\W~H��$��)�p��`�y<RF�������/��	��K�������}�U�_���w�����./q�Ckd�{�*��	?=�c��<���}�X<Dr���������I4g�/��|������#�����a����4\a��&���2���8�{�^�X��$��������<���n�,���@>�G�Z�����LDz�'�b��.��IG�� #��E���&�s_>���2!E�����vN0<�I5�n�%<�#��+�rsN�F��kd6p��0�|��drAE�_>2INF�����-ZyAI�5�� #�v�>�	�'S�/�������[Q��'�B�9�7�b22;~�E������P���6����&1����+?-W%SJ��N�=�����R{#��A�������;P.)#�\O�)��,�=��~�1��q�f��yD���=��#��K�����^�A��d��k��4Y�L9Q���*Xc���PxJ��A1�'�x����1����~o1����-T��=,|
����cq����>�������p�	���seX�bc%,����L�g�@w/��}�����#���K�����*I/���#���u�<�;�����R��
��g�U;��J4��d	�������f)��������='�bx_���|{e
K��hxk�4��H�D*�z`9wqs"�K���	��Z�Tx�����q�b@��-���OH�oK���?"C+���@V��J���%.'��{q��z�Q!~(?S��	���;�m���LTH3;�S]G��[ QWT'z�E�F����h_��Q�����O����A�o�����|���h����
��=R��BA�T��+�Q\�2z�����V\7w.����3�����uaUj�{�]3D@���I��P�3�Z^8��h����H<o�����6o�B������G�PQ/{����&���"�on�~/�7�*�{��-$��yb�g�
��[��~P�����o���%R�r�O"���m�D!����R�������a>���,�(�OoM�n,O�mf�,�G#���#�����]����$��<����J��}������k��"j��[._H������������O$F�|�-_���4����.Mp���.81������SM3D��T�~T]t`/<�=���r��<7m������`�m��;����<�:3������=������~�=.b�3�2���\���
�&P�kD�O���t)r�MC:�cWg���NDK��(��}������P��L<$�~g
����}���42P���FB�rm������y�j��F������i�	6&"���P��
�AD4gs�8�:)���6��O���5��'�aj0���SS��%hd�}������r(���uj����2A�vVv���	Y�6V��u��L�6���9>�{~gj���R��F/m�����'�����\�gb 7����^�1��D� vw��	�����-`�$�hgNT��s(���sY��>��/*��r�;kOY�#�����6���8�X��a���4��L��c����`��&�F�u_A!8}�<C���o���O������4��}����$�I�h�e�=1�f�����?�*H7��s{�%�����'���D^��Y�(����j������/��f&1cF������\&bZP�����O��s9|�2�I*���>��
�
�
���9a��)�d
kx�z�D�������^'o��kI�a�j���v$K�9�YrV#�����f���3����h+�'Nf���������251-������$����
�R�#Zt�b�y(���8��Ro	��������o�&u*�yv�}:;13&)���<"���<��v��
FSm�'�bZPF�FZ���!+��������C�v��`P&u��!��v�f~����fn��:3�1�H(�'�=F#c�D'��jt�J4`:�NS�&��G;2y�lZ	���a�)Q��L��SF	5-8���@��p/��\w�*���g��t�~P����k#�^w���?����}��s���71������^��`kZ�3H�-�&���#��Y����93�ZR��B�."	�[�Z~��T�J�c��;S,�4����c�G��1�{>v���2��Y�b�+$��*��iY���OQ�Av�-@��:�u���a���dnN>��'u�=-�w@g�f��Q���T���4��P~���Db ���z�}3J������$��hw�Y���;������J�.�,oE������^l�����82����F.��J|���V
��k�	�x/�U�i�*�?�U*�G��fFX{������O��C������Bs�a���(�����|����"��G�
��q�ADXz�{&[�<�NWUU����#���6l�e�/O��#V��j���.eS�[	MdF����08��}��;��g������c��}���Cy�&" ���6�+������2�6Z��53���������`��Dx���R�,��hcxX{��n�����B�����Zd�Z���z*��4��Z��`��,~R�s�b��@�l�\��;�ZJ��US���#�R]���B�9H��
���l���"�x�j��A�
&�^����6^�p'�z�_m�\����)��_�X9���$fV��)�v8Q��J�d��/�����)�	�� ��$�����P�?�EC	-����YT~��,F��b�$O:�L�"�8���t"��s.����t�of��("�5>\�2�xsb�x)1K�as=:f�X9�"Z���A�����P����3���2�v%��S��B����-������e�{#,~<r�8���/yd�|M!��oL�$��B6��M����ZD���[�
��1tf6:���]���D&n8	��re��/D����`���zh���$�=��K\����0;_��3���}�Li�s���0E��gp�y�?���F��b:m��#S1%�@" �WDn@��?���@�w�=3m L���D������6���w�q�D��2,������=(��\�!bBt����=J�d�qA7��P�Ia�t"8�(����20�g�?We�C�y�h�t�'��t�������
!����g1��|�Ar��s!ODs�o@�����d�3C=u;����pj��D��x�����g�Uo95�������5���kllA�9\�[����Y>��MU,��&���+�$�x�*d2|�P���^>�SP|�:|+�J�e����V,'��L��Y"����T������/������j�=1e��B<}���I��8�R&����)��n��L�|��]�P}��$S1r�����K�����x[�����i�����F��_3c��l8��E�JV�����[��`6��4l�����I��|�U��,���JE�z�9����u3�o?6�M//��b�,�& �o����[��hn������ru���B�m��Vf�^�/D���Tx�A&�Ej6�?Ou#�����%���P6���1%�W_v�w7]XX;�����> Vfc�Y�Ij�f��
q�I�A����Rb(�����8����We7�.�gl>����5�KC�qj�w��-���-X���J��$�O����W�rK�E�����S
����`88j^x��q<�X��E��b�j+���>�f
RB]�����@,=�R^����c�H�*W��T�����#�����pJvg��iU=��4o��H�i��G��|���X�p��0i�����x%�B���� ���$X�T�����E#^����T|�����L��IUa��dk+m��
1��*Y8S�y~��z����Uev�l�M7�A�G�
���R��c����v�,����SbZP�
�>7�D���Bl��V�;F��T�lz�`�O(S[ZZ;��l"�{���y�A��;/.�H ���C���10u���9�d~T��q\�/�=��7��Nv��o�i��z#wrNL#���HHP�6Ne��;X(��/�3$J�!9^oy�G��	Sxs#;L������/D4���[���w���)w)�+l��1:,�@�|g��r��O�'
!o��c�d��z�0u~�@SUx0wO�03��'�%e��@���dr�_�&Y�B����f���6��v��$�j������q�(��t���|��U63�H�|���CJdf*�e�1����w���G���BXu{��R�N9k�Rt��:=���J�����$/�x��'h��S�������a�D{mj��I��{"���_6-��R�[��1����`�w���y��%U����T��0w.���������p�8�����Aeo��Qe�
�#�'"�Oz�����d���;�A#��)Z�g��*Z\&"��;s���>h��T���Ec��]e9n����]Vj*|�����l
��R�]�]]���A���������wY��L�'���Z��H33��I��#�WT��8�`�F��3Z(��x��`G����������[���\<��=���o�88�IyCS�Lm��x�'B>6n@����iA�$��_���q����|1g+kwT�&6a��r�b����`��d�%��{(�c������:�7�j����
��P���������7��_���MZb:T�E7U]sL)�$�\#�7}��FA��|0�O�+*����SQ�TL#����&A�{�����r�Yg������#���53�������wEW�~W7�_��Xo�d��'���y��V:�U�u1�g�D,�50�0�{��~��E|��<#����Y
^��T]G��	K�6�(d���G��e��cef���Zb�[C.uFQ){��:^b~d*�����/������m�y�4�������*�-kDPdk�]{?|�����b��$�7��o`P��8�i��Nl����(��C����f&qW�����������jf��F�D��c 0/6O��y-0�����[�0�����%����`*����s��u!�������������B�0��a��N'�_��h����r�,�g��!VJ����6@.^���\T0���@G�%m��^��iT��S���w��I���e��A���h�������YP	�,����|q���?��a�(��U��q���^O�l1�C"�q�N�	�����������z�X@��=dn1v\���g
:�����
'.>�V���+f��A�{&r/%7}@�����U�f�
�w���0�
�����R�u�+-���;�@@���||1����w��{&(\��������.
�{�#���9NV���'`V/�I;��`��`ZP��la]4
O �Ma��J������O�CW���+��
+��~��33����: �R��.�w��SL��K�Z�n�*��2����*����Qb�?����}%IP��L�\��G
K��|��1�r�O�~�21���)�}��{,G�6�,]<�"t���q�� |����=�3�K3�pTxge�L�)1b-cl?���2���!��B��[����qk��/�~��r���"7\S%�"[��=0U.aPY.44'"���E����A=/1?�B���q�p(Y���3�s�uqS���=�I��h���'��a���L��������5��?b���B��lNaJm�����.��`h�0��!��w��	�	�;����;<\�b�r�XUv��zg������T&���s7����k �U���P��
!}��3+p_�6���O!��7��������dS�b>qsd ��9X��=C��b.w�=���\�t�'Td26�V��������(=d�|��!u�W_kn��!/���cj�sN
������_������������_?��i}���_��#��^�O ���Uk��
�W�}/W���f���*Q��-����4#����N���&1�������P1-(#��m	�%����	�0��������_T�0�8���[Zy����1��g���r��D ����F>#��R����$������T���h,���{�P!��~?�rW1�����#�69���N[���N22�4���%���l�.��3!�����,>��f����@�����Nx� &���4�z�)\�1��j!`
/�'
�f�c�0b���������w���E�b&B�Q�.=�Tn��9�����>��OXrc����w��!O/��h��� "����x�"��D@&/����bUl3c���;v�y1�G8m��J��o#���L3�x2#�$�����_"��z��{U�
L�N.�v2�Q|cx[F��h�S�P�|�B=%��\�����J���j���>�������wi�S�����R`)��S�U�^�IMvr1������sc����'��������n
0�����������������G<	�������������u��L+j�;*C��*�E��;��+����z#�)�B��]*���dZ��S��{�]��DB������0#c�u3h-8H"���Zj�SN�aQ-��&��&n��������~����b}<����{�5�5����od��W�wk�J�72)��}��R�M�l	�x4����I,=xrkA����n��gI����v��T�#c���S
�S����C'�R�j�P���fl���R�qT4�� O�}K��S�Lb��Z�KU���b�An)V�����
� �o�fU�k��`��b��OU�$�3�����*
�5����h����^��� ����><w�P��R�8���.�����p�&<�R�R���4q�R�I���O�G�`h��������obP�����!1���^��U#�B�?�@����#�&�z*A�J��������5������\	~)�fQ�#���<��������k�^�����S�1����g�2����<zk������]v-����9�����������dd`���#8�� ~|�������A��Z��(�X,�*eB�������]�]�*T�WbSqq��B$�dE��'D���hM�^����,�LGB-����^���Sv!����-�O�#M���xA�[?������T�+�2��g5�q 6�iL�.���x{s�Z$�����lq'U6���.sqTIV��������
Algg���h�B��W;�����[����a5rgd3��gI��RX�@\��q�V�!���� v��%�
Tle�S�OV,���[@l���Z��`�h�N�,~����B`���=�O.=dF��*���y���N�Cf9�#M�gyG�'�E�<t���U��A*�8����&��X��Y�������0��������)%*#9�`� K�W�KD!��g��^rQ��������x�-��9�6��`N�����]|�a�H�|`<z,M�nI�����h��m/���bDsF3^���i�g,L`D���j�b���q5�Z���	ZHRa"Do���<�	���-c(�
W�6Ax?��O}�j4z��}^���7���m��
��R�L8s��������A��7���\��6_����e�P]���:�������!�7iD*�Dh�[���x��0Z'-D4���L����Z���0�al�87�����2M&�:d����L(���C�D<2u��8��@���+�F���@��`$�����x�8g�*�;:�=v��Yc��Jh��[�(�9,�`eEz+~r���H�0&���[�L��
tP������=i�Xy9�"��Bh�)�<hQ��<�%�(|�YD�z:~?TM�@������`dH���P��W�_|�����"A�5F��|0c\���KzB����_�����A��|�}(����a�2�����1�P��Q�[�2|���o�D�����#4���||��RFT���O����,
���v��f�����~�s	�Am����R6�9�����|Z��&�
�]��-�+�xT�u-"Y��
�o.�M��s"\�Bd-~�e����m���Os�0�k!�V���tb�zz+"�Wx����|z.���e����95���/:q�L=3����q2���e*����2lk����a������r&T&�������B7,�������/������C%���Q��='CbB*tQ8�!���
�u����26��(~��i���a�n�9_	�	���M1��;m��'��U"�C�^@+"�ts$�[���x��w$���e�p��&q������:���n����(pN�"��h�(���K{s?��P��[-�����(�c��������ph����.�fK�
��<.��r�����m�/N�Zz��#s+#�v�X�5�NO8q���j���I> 2Td�R�D����~6�I�WO�h��\(X���n��v\`�C�	�q�������3Z(���B3�k�ha�geO������UF1ep?��n���y�2������e�&�N�H�~0�|	8�e7�u[(�������������-D�2-D65�S�fi�>���@7�G(�-����A'�i�������8]=������U��^*'��������!4�0�	�4X���v�^����L(��d��L4`*{���'V&c-#8��(g4�������O���e�d[e�{a������4��YFb���p�O���>0�q!b������}fe��4�����g��w������f�_�4E�{��'+&��8�tc��w��l=��
�;�
��B��e}����E{}�tQ�H4c��7d�	G����L�@V{��/���~�Ol��^��v��x��N����!��?�}��}�]���d�������^/�zy,��Q.+L�u���
��1�e�tYY��
���.���^>�rYa�|�r�����^���Q/��r/��.o������2`����s��W�5�t������Q*0]�R���hr
r������(]�����H�kW��)�s�*P����W�����*JWK��R�YJ5�R�M��.���.���\/'���J\�?���(�������z���K�F�9e��#��U�`R
�H1`�"W����{������E���{��I�J�����[�T�t�H�\��oE�s�W�XK�BQ�r��9�r������"��c����]�U�]�]��C�e�]�m�]�u�]�}���^���m�>���^���B������B�����E��uW�E���k��P��~���R����f����?�gT��6�������X����W�bO����	^��5��1&x�/��������$x�/�����������7+�W�bD��_l^��	��� xu1 L3�'��7���m~5
na@��l2��W���_MJ<�Z�<�2�R����X�����.���\/w�������,�d@��R|��ej��R~?��XN���������B<����
�)��D��F���=+���t=�
������S�\����7l5��V�����[������g��h��?�.-�������+���O}�F�#~��4�MB�O{�Ehhl�B�an�@�2�����^
X����5/gD4���4%4c�j�2�uJ�??��>J���di��a�CK��E��y}���%��Y�@/���I�{e ��!�wFEY��'YT�'�����f�����]	���FQ����
��1��`�D(o{�bM�������c����'tC��D�I��ga�=)gT@�V��d��8A��O�M�Qt�)�2���k�Fa���Y������%�h�s�� m_;��Sy�9��W&$��36y�L�]�b�s����K'��������"s���1�.�NE�����J����C�+��u�P1��^�j�@�Fc�*�������$�)1�%E��m�H����*{���.�;���$���K�:�uNI�:��U�/T�!����OBk�.P��uK��9����W��^��D��X]��t��/�ne�T�P�t�Bb_h�D$(�lzV���h�z/�����F{�n=]B�\��a����,��*�2��tM��
�x������S��]h��1��
����n
D�����H|�Q�!M���"8o$�F�����}Pj�h�N7���t	�1Z�!Mn�+������B�b�G���`k���%0�� �$�1��.�`
�m8JD���i	v�zYeK����
���
wo74	2�]���PU{v���f|���D���R$�;���0�HP�.J���,�����-��rF����\7���u,�-LKm{P}�//D�0�:���]Pc����_�t����N��M�D�P@~����,��B����t�P	�.��^3�����0�$���h��f�G�������3�S'7�'k�\�"�:�>�K'^��fy��4�h�8(�7w-��
r��t��	Sm���W�0��3H��
c���~��77�����v�n#��"�����Au�!k����1P�et'�1,6��Ip~�Pz7��������VMX��s���R��������R�����~��,6+�D��_���w��]55^���ye���.j�6���'V���.Q���.u�����&C�vf3���7���e*����	j���2*�iN���j=��hJD+d�ld4�6�o��}VU�?Ra�I��71������?���:��H�aW��
DJgo�Q�>]�~���v���s��}�ivflT�r���D�dI*��'��8MD
M[��N��f��|��v��2�a��q��F+����s*����]l ��H�/�,X���K]�?Rz����"�3N�g�R=&�6��|"���Q��5���]��>�~��R���d&�������F�F�[tr�,��AAp�����>���!S�-aSLQ8
�Fq���33��������n�]0����6�=Y z�������T���w!`>����M�+S��e�t�������@��T������*L���A�h��)2����������k�y��� �,o��t����2&�=�������M��������cs7�0Hf@�����ZE�(�q[(3���{��?he��P}B�����%�d�kEk��yg�~b&^)U���|#��Bp\����e�q�M.���3�k�q�u�-zm�5 �+�������wl�UU�;|W�������8&�0�J����K;�kLs*�b�8���/���~�6AO�Fx���^�*.{��C^���_,QF��+����b]�4$n������f��k����57@ets+4�p�=���we��>���������Z�c��wr]gc�Tl�n�G�����o��`�*�7$��+9da7�`�AJ��3<�
dL�S��8�2���p��;��P�:�������F��TF��H	��z!���9@F��TH�S&��}/0*T���V����g��q�3�{�`|Q��U�8�5'�!��8�,�c��	</���7�`�B���J�!��#$I3��.b�����Y"m����*�A�Z-���1�A|�����}ORE�O��'���[Wn!b�2�S��!���������X�����)]�':.����[����a�
o���e�"S?��_����s]��H��B�-LSa�bIv�h@��b2��`]:MX��f�X�%!P�A�8�H^*�8��~�h�u���gI��b�}9wa���E������MwX-�Ss��xs�H���F�8�Iw�~0�@d,ia��:���E�zm����e���4������S�:~3R�B�Q'!t�O7+!%���Q�C��(���~���uQ9��B��9�o>
3e����P]�������2h@��pv�kV������|�kV�����kfm
�ux���.d���"O���(�$���;�T(4���f:	<�:^!�v-&�}�����

�����@j�#O�B%��Ps�l��[�7U���:��#�����8Wc/�D���{&0u0R�%�Ds��qj�t"�m��+35������T��L�R�:x2;���f�`]N��[�<t��L��O
� �_�
l�wZBS�15��l�KQY����+Y���i#�o�{'r�&��0�����"/9��D@��s�~���@�c:�s|�
V"4���n�7�
�JX��$�;�]��I935���` }����ih��:8 ��BT���*�(U��(�����WF>�
�R�JL	���67}w���^(�������1d:�`A�*x�
\������M�����g*������Ut�isCb7��\����'��c��T�����G^���2rF�5bm�)!;���L�����h?0�E�7ph���L�����d��v{Ga��Y��c�h�|5a�yi����6���UEI�"C�3�Q���iNM���$�1�X������7%��D����<w��:+���Ls*�r����If�X&mQn[e[�P/�Qs�LsJ1��i��v���|���A�/�!H��33�Z8�F��w�"x5���3��;Qe�C�G�nUspW,Hv���A��{x����l�P"���**3��DA������]k���!�j�i���2c,���'�!����z���:|�\2�)�1K��
��4Vp`A�+��*��9����(����A'���`����W&c�r%�!�'���8g)�cH���
������p�s�H�J-����h��������L�~��t�/��2����Ot�f�� l����#0s��5��B�;��V�X�~�%Xp��mG�B8��z,X�����[�
c�v�����
Gv�E��/��x�����4A�l��h���i~����1��Q�t�G���?����r^�eq�3#V��3i��H+��,���ww���'��B4�x'��	c�I0�$}0�4�4��%���7��f�L�q[�?a4k�o2_4�V<13Ut�0��'����k��O������G6���J�aS����m�B4����F��1;
���B�M)D�V�>�!v?������_��G��O��2�d��[���G���0�M(`��1iXQ�
���6����O������L�����C�����2��x�M�2n��yw�um�������73����kj�*\S �5%��Z�)k�3��������L-�`SEj
���#�pM=��|l6����Z�0�U����Z���P�m�x�+|�x*���6JI����?�& z�G�z�y`��l2!6����DKM���"	�������Jb���������bA�K�)�y����=�+%�������B�`��!V�RJ2�R��R��4P���am����i��4�T%�=�����pP��,N��S�S���2��>�����T#�rZ�������D�(���l��s�K�����VG?1�����~���T���pQeL��z����[D7p��f��c��������)f������6�B����~���WpS�2�@�~PJp}5��'�F�LR����$�L:��s��K�3|�P���Q��$j 0�5���:�KK*Q���2�`�N�e�����a� 6+t]dT-
����Q�h��`�����J	���\U�o�h�����"��HM��1�GH�_p���R�_f�e��LX~���|��
���!��zT%*���[�0���H��e��Qa*��gi�?�R����'CpeP���8���t���-�k[�h����!������,�	%�in`����A�H&7J�R<��f��$I�	����������&��|�}�'>�9�I��38������A_��J����a���
�Ba�{�����W�l�j!S};7������������v���V���������^�<R�y?��tiY��nB5d�,s��Km��X�1?��� 1�2-�a�0@��<z%�-6�f��d���/�_��L���_<{��ux��aC�qlT��)��z(��+E���&%�j�TF�������^y\�.�-�5�l���Z��h��
g[^�����[�$�}2���+)���Z�����q��2+C��~���o�~��'��0��vn\��}���*��l���p���u��K����(�����e�e�+H�>e<�6��S�}PZ��>�dh�;o��0T�m%P��9wW�N����e8m6/�n���9�f�`�)�f��������j�i��%���V��&a��%�}2H5����Tg�{g���8��j��0�F
b���*�'�������\)%\�]��}s��b���<���# ��(�H.������0�|���J�f�-5���_N`.����P
���*��8�|�*�����L��R���B��)�*������t�^�.QJl��j���%�M|�3��Y�5�x���7�eB�u��w!��Xmi�i�l(�I.�t�e�x��l�b�f�����=L��0���_fP��()g���O�^y?��D�\:S���`!��J)aV��Z��4�H��M�tvT�����-�[4����f���c�+����p�wnd��.�4�PT�:�	q`B����7�`D9�T�� �j�&��WJ�/����6���|��r��RJ�-�[�uoN�F�[��OK����o��6��{t��	��Jst<u���*gP�st/������A�\�/�nm'm<��k�6T"�n��E�TWn�'�Qu!��14RG�1�QlG9��k�7+��wZ;4����7��B��;B�K8+���m��E#�bE��J:���'��eEA����d��\)�izW{��������9�v\�4��e)��f�e�bU�x[��P-�n�}�	A(�n����/�c��RJ����&��])`[��s�5���~�D4���*�����a���������x�3(�Km�HS���A�
�/[�IU�a�����O�n����3�0O�����T��-"tc��M,l{�q������`���V'�gk?F5�BBu�g�_��E�E���,���Q%�PA��J��!��At���)�&��P�=�����B�k����]xFhX3�*[������Uq��U���%���H��TSF'����v^�8�VF�h�S�#l�M7���>�v�����tK��4�D��p��H��_������b!���M�x����v�*��8/��������������h���L`m�2�)c�������RlD�4����������uC��(*�2�~0��=�K�fC-�+e��'P&��\&
c����4�zKr��]��'��|mvm�XR��
@��d�����3�sr�;�T:��Ru^yb;��'eM�T=M�5�ft��jMA�v%�����W�����B����z"��{��_�V6(�+~���n/������` �����%W=����%���W��0�,�#�
�������J��'?�B�,�>8%�x������J)k��'S*/���'@}��yC]�������8] �g�z�:,�B�8'��
z?��F�X<��>L��r,�Q�'�'��B50{��W��)��Q��sWg|�����\V]��:0���G���/��k�
j�?��*�0�s�d��0P����+�1�=���h�"�M�o���d�eV��QO�������������@zj�s3�ir�l\�:'�x
�!.�i�P:>f�'�y�1�~R��AK z�0s�RJ��W&��R�P[)4�	x�'sC�sh� �z���8:j�Uz�{b B�M�9Uo�t�]\����D#1Ui��1��u�1N��6�vsbm�}rJH8�	O����zV��L�1�~�b4@.���`��@�	O\f���
3A^�7�<��~RM
z�S��Ed���~0�l�
�Y���<,��^2�����'�o�rec������80m~?��G�������2�h\�����a_6_�VH��Bx��l���oX���{sh�[T�eB��>4�h�Qi���2#�0��W��
��J�����'&������p�}`�r���K�����2������1��/��dY�1�v0���,6<���j1��Bu�����$
�Ug|���:�����-&��#k��ru�m�NJ4c���6�T���q`������!b]�3�
��B���9l]����7Id���>�|������O�7Fl�$\�B���=��=�;���%�w>Uw�g��,������H�+����c�Dq���IDn�<��4Ff�C�I��G��U[X�����6��ir`�!�0B�g���,��g����X�3Y��1g3�l� ��*�3���#�n�R��6|�t��b���)�G4���U����
��@������a;lr�������9�D`��[e$����~W���y`s�<>U�w�<Z������vw�@��>��������n��MP�F�lAG��L��a�����+�/Q1�v*<�l����Jx��������Aq��?lJ�!�1OL��A����^$��i�&i�Bh��I�e_(+]{�\!�����>(�w��(
����A����6PU<����bkD����"Iu�<�����q�*i�����1�?�N��a��E��9��H��9��C���G�~
��� a�-C�Bl�8�0?�S�H�@����e��4g�s�;���s�dh��7���������JH��S�>�Ri�E����K�����-����U���������ji��nnX���'�>(pHA]���=��9�g*I�k���X��0h���lN(�$����0Y5us���+�`�
���;������BRA>Z`�EU������+Pg�����J�	����%)/V�b,9�;((x,�W���m�_=Ru*�>��p�����nY���pj��{��pCoWJ]L�?�L����G����n��%e���K�B��3k���1d������Wz��e0�DkGW�Yb������I��z���$�p��B%bh=��"���>9���I����nA/j}������J���~+��K[����|��U����a��� ��{BJ	w�4o�P7���ey�m�@���I����c�>]�D�>=�����S"��s �S���(F�6|d]H���qEzp������P�;�~�	��Tia�]�-�;�Ti�a��d�\���eU*���N<c���UJ	V�ZO���4i!�`O��ZO�_���2�V7e��#�
]��%�4����b�t���LSM�RB&M
.i��i]'��TJ��MU��;�k��(>�n���	�^5i���������I�'����%e���B��N>F]:I�.j�HJ����2�����[����j�'���s�-��6����s��\V���6�|G�2ez�����V!���4I��FW�O3�����fPB�.�J��p���qj�|U�*��+��(�l�x�����T���2�6w]��	/`�|*%�m'A-1�"�]M:�>�R�5B�3�H�(c|U��r�9T+%a���1>����kN�?f�����~��=Vl@2w��S3�fO&l�WfO!��==�"�A��V
�O*��� j�`����Im���E���*�$���IU��o���f���Z�N�-Z����dI=�?;�Cb(���SnJ�c��~Wa-�[w��Fy<����(�9���:�?;>�Z]XW����������[�>��V	���b�,���Jj2L�$�
lP!L�j��]RI34��B�45�q�E����S%����I��a��M��*���,R)7��/�[����Y#n�V&���sZ������1�6a����k�;I�����$�>U���j�[�B`�M�,pf�FWw!x���JIX���$���qw�"l���T)�H��L�xs#�(7RCA|D����pT�O��iq��D��������iZ�F��*L����{�j������Q�{���1�TE��������^f�8�a���t 6XX��Md���zI��R�cg�o}�=�Rn�
abp�>CM������Z9�Qs"d�D��U��U2��RIG5�� ����`�&ux"C�9�t�-�f�fbg�3�|�D�%�+v����4T[�)bIp��!�����IW��H%�F���s����0H�2a�2�Gs#t�Q���Y�������u.
���Sa�fB���*b���eL��c�h���:9�������r�r�!��@u����$+�j�
���>����p�����.St�q�mLsJm9d���-�x|o�B%�����TWc�O3�0�w�z�&
B_3n�]2Fv������V2��������^)G��f�i\�����o��y��P��f���3�����
���L�w]�<uP����o����fy�Bh��=N�����t�]�$��!�j�B�l���J~�a����f����.��9S����s������X��i�.�k�IL�4�7�^|bu�@�:�o�A>���-*e��o�y��4��>}�B)�F���('"rh����l��o���Twl1��H��
zJS�����,��j���H�x�^S���H�muO���a��aC�������m��y��V;�n����O�B���Iw�U���B"�:�
c��_nh�L���UR1k�o���
]�]����6�'f���J���Y�����>8��
��8�����&m-��i��)�����6q����)[����G�.Y8��m�^����r<6nf�����3eS6�����I�}	$11Ys��,�Y[k�oz�l���L��2_c�5$���'N�Fw3a�b�66n����>���p�x�1H�|���Jq�f	<G^QP%�^�B��M����k����7��-���gYQh���M��W��N}�01o�ol�Y��G�*��6����U��h
6cBj�0I����d�D��54n�#�"O�����
���z�u�|]"P��
���i��:`�.�y�u���o��X�~���*��^v\���j��WYp^�r��W����B��Rf�J�%d�_5�W�~�(���������#��&�����$�J�<3�UJ�W��Z��pFx�������U����������*�����k�l�����v�bv�H�|�����}�M��{~��?w� Pz���5K����z����������������_���wy47\ms @�9�Kr�#+���`������b��@=S31�
�'��g��|����^�<�����B2��G<�eBPy%x=���������5���f�e����7��b"8����F���h�������PL�#XC��'U�m���<u�|/J%��&�"�'�
�L�MFjn�`D��WB��G��>����i�qx���q2>�-��ne�He���o1���`����K���^'T��J$(I	���b�,`�SBhN�G�F�'���7�2��C ]�8�P�H��������Y\}g����h��
V8��k�2�5�����HC����PFF�X[^�d�")<��o���zN�|���O��U�V�de��`H�'F�*��|��<������Pi`�W���6�?$0�Z�Q���2Ih||�T�c�[�B��Q��xc�2�)��Kc�D�j��D�����v�<��X~P�iqe3���p��LsJ��h����C���fq�����
��(�����T���_����D�7c/m���L��
��?v������(�%���L`�0�
S5�����Z��"1����]$����)?d���-G����"1�{��[0�����
'���A������.P��Nn|?�yL�+B���INf2����C����;d�SR
z�l����Bu��i+��s���{���Q<�p?_#Z�c��d���e����G�H��C�u#����M�>0wZP�����0�%�L��y� ����L�kk����+C�<��E�Bk/�Gi����F���'��y��\E�p����!sb�vn������f����+3�G�_��>2(�bh8��T�����L�.�
{��E����c���b��-�L�p�y��������[��D���0R6-���m��!�lV��r��]�8�B �g�:���s��B�C��D`�^I�UGJ���Q���Z<�P�F������������j`�BU�=zHB����-�}1���X:����G�@�f���tea���a��0�A��-1��t������)S�&C5�N��}.zrWF��F���������.�����B�&���9�JH�<'�}{����4��S�J<��4%4����w�Z�#�~���	����>!9�' A
�Q~��j9�|x(��*d?�'����5�@&��`����0f"���W[��5����pv����u���R^�2�����4;05W0*�ws/�n��n�`T_��< �.a�-���O��T�{����{%������e�i1=�����u�>{�3+�����t�����������������dT��u�NF�v
�8��C��	�`����i�r4.D���c���_A��{j|�V�T�����,�j����d��I�)�q�'3�^"�Jwe�i#K�F5�D��gb��B$��}�<�Vs�_WW������*�OO8�%��������3�K�I�_�c��B�W��m@3"��+���7�����2ZP��JN����a��Y��
5&������Meu�q=��`�
!)�a�'�\zV��,����3A5�T��+����q}�����0���N���G#<�#=�������@t��Ag8����_��CWm7�m]o<M���2�?<�=$�iX��p���[�� �>���i��w���\of�Xe'�\��O0����?�5`"4s�d�v�j��[/3"���1��2�V8�f2��y�o�6����	v��dB�&o6�}��F���'O�����J4�3����P�O^#�uY'LR�_6i�HD�5�5md��TB��������`�i��vw=�s�	�������f]?�����P�C��}s���&�����6��TBt�#48����r�'��8I���)�W�0���������������/��2��2�Z��Qse��\1��[��c����:�K��������L-�$��yQ��w)e��9�$��1���D�+�0�xy��8��41Z�}�o��c|"8�S�8�+�@������Cb>5�'����=/�7�o1�VFSZ��a�V��a��2���>����6u��3cEOO��}���������[�����JIO���� �}=o����ys��n1C�����N��f�)NK���S���t[2Q�[�_��F��d����:��K�<z�'��!�Hc�,�H$���sWo$s$�Z4j��w�z�����Jo�'��-Wy�����IJ!�3���a�%&'�h�;p�sH����D!b��N��G0]�]~�D��M��9�y����5�:��M�4:��T�)�\����{r�����������2/���0��R��B`��(��@���x5���B�g+��k'-�n�XN�-�������.DS���!�����F�?�]���b������*���J��������Y"\H���2�H�������������L�76�������r�A�"B=��aJ����������+!������e%b��t�M"��jmD#&1���������U/��|����B�(
���H�mebl�����+�rK��%��Z��Z�7=Oib�I! �`oRs�(����@���}8��be2sN!���'k�m�-^>�h*�@���������*Fc��l�$�&�z,���>��������]c+U���z8AI�95���{���q�!��	����mz���V����C}�"��2&�Jj�4w�u�P��9"����z���>.�B��i�lp�8�B�����u�Jd���&�y?&����:�7�����0����U��r��Nd[�z
���QV{��Fyp$H�{�3�m/�ss�t�(	�f�`8T.�x<v�\�k<���C��X1N�N�N��5�z'�����������I���h�+S�����'�3�qB��@%���J|$�;Pe��y0��xqd����O����*X�D�����6���4���#���v+��Ch+����W�
�s��
DOX����"�*�����4�fI?���������)b�Ub������3UV�;k/�X���Ni�������!���4�tv�M>����c�m���m�X�PW�W�O��g1���`}�4��O{n>I6|fR"�I-?�k�*3������
�����?����X��-��3�� G�h�%�Ek5����<|�M���F��9�B\&`�SB�m��L.Ib1�m{56�0�/"^���������f�@��\X���-�����B.���k���7�a�D<��l�0n�PB��t+��|�?7K-�`�gcmo�V��� ��8����J���L�ES������_���r��`�5���4+!��vx��K�m�;�����`��8�R%].Z�I�
��FD�}4������]��T��!y��%�u�m�M����w%���Nv �����2��R�����\�j���V3��#Xgi��@p�h�6��#jDS�n��n���XXH!�
�!�"�?@�� �~73��r�eR�U	��2�O��f��[�*g�6��B����ro���/����V�wl�{�]��������+�J���N��:�-���d��g��C�H�'0����^��dL��R ��������NIU���J������G~{P(1����w��HZ�rJ��j0��i����]��S�|B�����GY���7B)%��4U�B�Q��z���:��N��ST�\&.6W����l���0�������������BX�0�w��m�F����i
�l�].?��:�;;g}���RJ��a��{��z�/�>c�����\�^�v���HA���48���]�2D�J�Y^
�B��D����}���T!$�����=�N��c]������~Al�}�[�mC�]�z#�v����D�����	*��&ct���ZO��I�a��k���������$��j�u���y��E�O$*��n���|ie������8��}����$)q�^r�x&�\X/;�3se����1�%C!���a����N�W&�s#�K����������� f�����`�����A^z|�H	�u'��J	]`�)�_�82J���>8%N*J��������^m��!���{��N�eG]&a�"��|y��?8�V�����o����F�����Lo����u��R4�V)�D�]�������=O���}��~	�Y_�|0��:���!�o��I9s�����9
���o����(�DA%e�>��!���iZB-�b��/����]�<�jZ	f�
%�� =���4�A�S$9��P����WF?Y�(D�hE��(�VF���n$��uR��Q$�"�o-����X2��;��L���(����	�)��(����Q.�����{
���GH��N������Ibv�,%��ex���=������aB��&M�W\&���B�Bv>�sr��!�T�.��������2l5���c�&����������KT�	���?ur��6�����#�2������������������E7���y�(����d��pP_����H����?P����{eZ!���z�%������?|g.=����+0�������@�EG����������	�@�^Z�-#>"
��P���|��g���A�n�D�U�'0&	+�w4�b,�;�����l��tcW�#�f�MgU��ze���PT:0\��X!|h�#?Z��M�3��Q������7���4��!�ccs���2�r��"�|%���UL�A&���)� nl@��OS��0D�����K�'����oU�Cm	�Tv������9�:p���%LH~7g�����Z2F����/L���5��0���T��4�\s_8rxp�pe2hH�wT��w�I0�I�R(�GX,�����x�u�0u)�@J�s���ke��&!�:2�y�VV�Z��{�H����c'X���}[+�V������R�Q��Q.������6�[���`c�����HkZ��v�6~�iN�-��6����v���ru���4�����Ff�������m��
�;��
K�k����nd���e�<�����2�U����/���/ <���![�\��R�LT��`����
���z�P8M���nh�'�C�L���h�J�S�}sic����K��C�yq�7�Kf���9�aq����
|�$O;���W���r��L����r����`n��r^x���Q&�u
�b�s����>f�&(�p�&��r����.��TQ��D�
*	�;3f�iN�[.�}$������������L�Vu�[3�;bT����>;��7������[7i5%g���O#8�'��z
�<��.��p3�C?z��j
���*>J����dg��1CU�#%��R�(����
a�����	P�����\Ub����=8p��<����SK>^d)�I�m� �k��O�4��68���|��	m�BD!��e��$3����25��:�tha8��@���L� �y1�0!�U#�����!�g(`��I!c����H�qY����JD�����{f #t�a�b����1� 1
�f���
^n�d�����B]�����K�![o>t�W�	2�c���7je3��ofd�6�"j��l]��a`�[[	I����v1����{�P������P��Z?n�cK7n��2n�H
����<,����\D
I�������]�/��'<(�X�Y��(I�����*�6K�lC1�$���e������mCDfR�.����+��d��zCjV�De�J�9�9&���u�8��R������}yB"�+�>�n|��A����/��-��`����w!�"���o`��D������*��ep����nd����;���+~+���<����=-�ZES�K�D�����P�u��Y�����zs�CB�����[�Tb�!�W�acEf����#�<�c���b��;<Y��Y��������|D/�93��x�X`m�@����{�JMf�;��H3[�f�$��6��r6v�������3t��~2����c�j�NI�L�-��UT���8r}^�s�T�,��ct�����p� ��c���}+�f���e����y�:SB.�@M�=4��@=	v\'c�@����<�sX�V:���/qc�cB?��O;�k
�_������}bSi�'�1e����u���Do�Hha����V���`�F��c2��BTu9�w�w�=�x���@�J��k��"->J��3�o��R�H����=��������Y��|0�/�+(�qrG,)g2��	�&�A@�&��Q�-1�p�Y�|0�r�B�S���Uwbh�����T���/�{��-����8m9��8�J���n��+��rM�0�=��_q�a_}�hQ%���bT��,0T���{������
�����A���2w��������p�T�E&��
�Cv�����/L��
?�-������Sg����X!�����Hh�bkr-�(rOO�2�����1�U7-�QMvl�\��X�Ccyk�8�L?*haw�,,��}C�����3$j����y�xz���p���i�o"���g��l��3�SY��N�<�.��p�fLt������0�����^��[L�!&�P�������3�=S�`�R<��B�\��x�Ow�l����5�E:����,���4(��E�`�:`e����}�����cB�m�sz��<��@���8�?���-oJ��)�0,�"b�Ttv�'����q'��H�
�E�E�!B��cr��X�������gh�y��A�o|�4h���G�CO�|�-��w����J����+��m���v��g����}�Z�\h�}���7@B��A��/f��������������5�yyD��q(�>��!�������B
�������@q�9�o�AJ�����J(Ta�:K�C	�?6S;�e��4�F�_0�2��������[f�����:��v��+��"CL�������I1e�u��8���mnw�?2�j�������]������<9F���N%S"���_��LKuCH�;z,&7�nYB�
C�Z������S��H��x��]�A�� �'*��`bOI��u��W�d��������Kwl�8����h��k<����c��3F}'Ud��i��Pd�PW��7��,7��m�a���������'P�MO�n�Z���&�{�b�ofJ���3���J�M����cd��M�:��1���������X(�q��(�R�����|~?X�������o��aq�u�.Dr���O�,�(���~���zW
��IL��h����w�M�0���j�jt���Z��m�;'�Q��>�]�z�'�x��se�Q2X�
Of�B�0'j��A&����B�1G�6!��	]�	%��
�Yn�������g�����#o��������y�J��#o�����?�w�[���������������k��}��������QC~����������\W�������C��u�|}l�������S��ij�
����	�����P�o�C�LsJ�$�-��$�z��w%�(m�M�O�
�A�'��_lb����p����}�|S��+�n���&���������Mw��c�>P�zo��!�@�5�F$5���H�J������w� ���	?��,�J��S�T���>��9�/�@�N�^�������vrXM���xQ�`��[�iNi<�hr�*�!X�����d�j!D��#��3��'�ES��h��LsJ���N��:f��+q��q�}<�(g�L�wB�5���-�Se��':���j��	|e4#�p �x|�����+,-��;�>X�t%�hKt���0*/��r�@j�r�bzh�� b��D��*��iR����*������I��h����nn�
n���*#x7%4I}R���I�]lKW����C�P����_e4s�4����+�CS~�84����7g�}������<�>�P�<tW~���P��`�����L��>M�')��P=��*a�Q�A�@����2o{����]���(�-*�'����3�}6�_!�e�;�>�x1=��J0���E�u_![(��-T_!�DgO���(���J��{RmV+��*#5�'3!� i�����g���PG�i�wa�����4����",����O���Y�-LH$�_P�^�����]����6�����~Z�A�7'|V���4��e���:���r���L�:D�@�|uxbOv���Y?/S�-aW
�z�D2�P� �1��6��������
E���5�������L
>4eB
�iFEcSVY�/��\f�%l�PSd=X�$:�xL&7A%M89�Z�Z�!^N4�p�?8����� 
q�O�Kf �P�������)���C�����q=�0Z�z��~�1u �ba��d��,�&��^�:��{?�
*p�h
��}��m�:�2H2�u���*T`!B������yk��"o����=#b���hn��$|����3��3�6`j.F��R��m�z��M���-+C�^��rO/O"[�:�wv�����4�8�]�sz�'��1�t��4���Q����xO��71,������2�L0cFU���Q'��	j1�e"5�c[I%4Q���*j�����e��j])�(����^�i�k@��_����t=���=�^�����[�rP�HJ#�%�7^6z����2��d�Bu����	�=���
�����~d���X(����BC��DK�f�n��Y+#����bTP0F�t`��r|rM"3:������=91���	���xl��Y*�gV��v3g��5jK|������o����f��+4��`��V����4T	K�5sK��Cp�KLS��g,s�M���J��>��dO��t}��h��BhbAI+���6&�@|c�����������:(�������#F�F�[L�b�cA_��lN+TO8��2�/$�����uQ))KB�$y��f>���A�JG5��u�M���Vk��������{�3���k�{{e�X��J��9lu}p!4u�U*dp``r��(�+<�������4k��VY���Q�e����T��w��Oj��I(�P�=Ifvd���,��NaL�d
v �ujL��M-=��y�������9}�����lG�Z�l�r�9�Q����0���|�qTf>����2���`
�}����O���iN�[tr�`c�I���V14��}��#VB���g_t���2���\>t���!��5����t�;�>��7~���`�i�������E0^42M:�����&�"�����dF����~�i�E�X1�u�E�o�����)a����Y~&��Y0'�`�Sq*���^;-YEf�X��������+�53�w}'����5���rl������D��1�@JHg��_�9m0��tS���u#��W�S�n�����*����a9E*�B��$Y����Y2'�8��`��_P-��dw�{L�����M���!z���?^�o��+�YL;�X���}xb�����#�����p�3�/6�i��������2�H����jXd�H�vh�L�j2��j$����!>��w��d�2^����,���-�8C���T&"jyAse#,{"�?GY���L���L������A_�A=|
=40{�$��R#��cX���������W�}4<��GO��Y'=��0-{a�~O������~0�2@_�:��JH�����_HK �|#za��`@9�=C:������a���2�P�LFR��-Ou���fxp�������$�b���4K0n93�T�C�\��P_�{!��e��}��Iqe4��EA�� �f�c#f"X��C���;83{��h�#k&���D�7@'�.KH�������OwG)��y,����Q)���r�U����F��Y*!*�
��~���91pQdf2LV����r\u�����K���~�L�S\h�wb�K1�4����FQ��78T���i�^�����;\���B������|��T��a^������
K�W����<����>�R���� 5����=���`hhy*�([]+���
�����J>�����������:��l�px6�L���� �B���#�Mh�����x.7��u
T0���-Q.�,���4������M����x���F�z�<�e�(��Wn!������M�9�/�������7�R�����GA��/������0�D<����=zJ%��J�U�g��mW����l;��'��o���j�{�0&w��-O�'�SPJ�wS�������b�X�����`b��D=Q
����$iZ��|PJ�r���-�=�Z�1Kg;�.7�
�����"�Q����I!5Qa�$���xvJ��y�+��48{�r�������uQee8����N��C����A9���P��M
�7F�R5i4���^�U*W�Ae���Q6����8O'�U'�Q)%�����.�e��?�B �����A��C���|�Gq&��
ir���L�)�OF��G#u��M�\>yW��[:({Qg��C�LG����0�]�UJ����j!���B�*�t.�y��'��b��	kVS�i�)%lu�N��n�4��B3�`���A���2�~�����'o|]�K0�������8����M��<��D1��{)��n���v�V����Em��:�I����_S����p�#S��?]+�PT��z��rB����#U����}���������w�^�L)�}w�>��)��@�\�f�f����
}�D1���r^�j����������z&� ����!P
H}���~RJ�a��`���(F��}3���U�m�xB�*�P8~�f���(SJ��������}���Q��Q������N4`(��������m�L(�P3�s�������/$+��8���J2o����V;k�J#��V��������������}����u\(V����+��MH�;&B!7��8�����O6�/V��h{�����������dz[!.*��d�{.�c������z7;5����O�������N#&�)o���#��G����3����D��J5�4��ij����� SJ�����mM��)����
���&�'NX���0�<�n(eeH�~���k�����������@�_TG�8��}���\��|q;�E=�����&������$������y���].����(.��/�Y.���^/�\C@qq�5to����/��g������k(.���Y/�������$/H
*A��[��w�� ��R�]S���n~(]�8gqUQ��m�W��� '�*JWK��R���j_J����UE�������2�K�w�c��(]�[��(��R���y�2�����{N���������E����(��*����q�*	(���(.�������;��k(]-��I��<��<���k�\�g�+�]��C\_���Q�������Q����rWC_��2�����6�
���:����>�*���JC#_��F�J�������*trV�~u�uZ�r���Z���W����Y��s�z������_�/�XU���~T�*��Q%���G��2�U���~TY*�Q%���G��2�U���~T*��Q%���G��2�Uz��~T�)�Q%���G��2�Uj�h~T�)��Q%���G��4z�Pn�Lc��v-�D��Z�c(��i�������0�r���m�~��/%�K���Ty������\M��j)���9�1���4x�P����y,e��c)��1����=�@U�3�iZ*zn�<?rv#9Me��B3���
�H����<�4��pqu�c�D�:�����x�>2F�Q(�6]�$z�S�����3[��B#j�_��L�.x��}"�l���A��r�1��%���vL_]	�nr�������9q��k!����,�#����
�?}:��HY%TI��m�P�b
n
�~�f(���q4l�x����Juj=}��5BY�!�����t!+C}����l+D���z!
���$�� �����=�Fy�q{!�G�VOM�
����]	�|6GTB�4���z��V���
�`��CcZWF�h*B}�n�]�@- -�~y]��h@R~���J�C�Lp�&�h���JI��0��]]=��S6�.x�SK�����Y�ML	uD�sh��-aMi���UYT|�h��M"�u^�8�YX��=K��m��$�����������Y!������f���nk�|"��T������ '�������?��Kc���B��RmsR�r��t
Pu��G�p@Ub���4�����Bh7�����;|Wb�6��$����[���������P�:�=�����)�!oUj�X���C���*v ����Jx<�V�BE|Y��.����2�H��%SX��h���6��j�&��H�?�&���&C����[b:j�Q! �Wb�[���1�.�?�x����'������%�.��%���V�D$�	t�I�����@���)DD�����*�*v�����:p^�bG��=�>$y�n��B&c%X�5)L����G
��)��A��`�$���nt���X�D���
�SNH����C��[	z%��=�PJ�.�����Z�_x�I��0
1�������A��X��7�*�D�����x6A����[	�-=:��Rj�YNp�Cd:�P'��W<x�]���&j�N�)����i��(b���-��.�B(��p����Z�"�2_�@������S�_#��p���4X��E�w%b|����}/�2:�x)��0��B6�Ksw=d�b�5oD�Vm���=f�B��2��x����1�����,P{�Z������~P��[W_���?pr��Y���u����D��n���M�pl�`f�}��h�w�w%D��-C2v��'�q����g<��'����O<��3A�.t�	�6�lw��"i�&�h���kehN���k���k��	�uk�!��'��{<n�	�IO���A�)���w%8�$(zR�������B�36Fd��	���af�%�eA8e/��V��
�����6eBg����"U]'�4��h�	�pn��j�]�cK���^gj$���&���o�	���z��S��yM@G�5;���L�H�0�����}h6�:�|W����r7=�0+G������/��m���D���>��� /�!iiE�Op�Qsu(z�J����1Y7�F��)�`ql���w��}�;z+�s���!������V��|�
���p��Y�X����]�$�s�=�'v���,��*���*����R���;|W������K�0���W,�@����]��p��py���������>P���2"AM}�����3�FB�������a�mVZ	��Z��R/�o����[��@�����*�T\;T�y*B����'�
���Z��m�<���� 6��K��l�7���'t,D��8�Rx�)��������e��w!�u"^����/�M@,j�bA���w!��	;��`�}Z=�N�JP��v(�T"�A�z}B��G��Y�v�v���v�i��#YM<{P���u���V��kl�����I���Z���B�<�y�V��;GBBbp�0@PA�:
�2��g{�e���Z���V��J%��8�m�=�^�e��n�&��3���6� �����{go3�;��c!>�����7ZN��k��j��R��JtflM�<-a��:>�h�}o�����c���S�2�5��	����	��]�5�fb �����z����KM��������gf_
P
	�[�K,���H���0=G��Lt�?����-���3�S�!�}��+�������w!^��T���5pq��	��\��
�3���<@�)�0+���K��l���5��	��g��I��������:F�~��\���xtm:����#d����3���w%�5A[����.e&v�R4dNEn�W����-�\O�/_�[��k%���:P�52e`:����g���������!ng���uR�
7�:��ic1O&h)����u-��-�\�����D@������Wcd�2�y������%���w���O;J����C�������5����������a�;�O�o|�i��1QH����i�:/�\@3T�q���p3����1��}�Hym:�4a| O�����+�s���n�i�T�~��{���4��A2Q�
I��3y!v%Bw���2pU_$Q�	�B4�Y�L=�B���o��O����Az\�� =��i����}j��B�'Wf`jL���1I�`j�e�:�*����+c�����sej��vW��m��"Q�1��V���M��2�W�%���uDD��'�gh����`w�kD��P��S�"�7O-�R)c�n�E�>�.C���7q�2]E��#�$�1��x�F��yn=!��zX#���(�X�`����U����0���ehWQ�4��vy��������/���f�8����j���a���ve*SI�P�Q%�nW���+�ar��Pl�����v2ft��
��w�����sg9Z�\h�;+��RC��v����Ut��P\�2�`���1����2f�X1%�|���#��];G��j��6�a?Y��XS���J�h��8���/a}��d��	����i��A�L=zZ��;���n�W�g�5�&[���f���CE�)���A'���XAB�����o��V-9~���G\@��HW����e�)�Q���ru�"p*�b�n������bi9h���V�0�����C� ��Gt�q
��~^���=�#2�Z������4ASL|'�3��S��������ff��c��G��Dw����#S�q��w�S�-�������^Q�
(QQ��O2c�lF���Fh>�h8t
.~f��/��������������]pu@��~�S����d�AC'�w�����o{���i�1�g27��0G3.����X�(x���a��T" �8��%��sH�BSMLI+�����l�[$RKs�T?BT������A-���n**l�~W�H�k�ISo���0���2x���!�:S����r��l���E���N���.D���S����PD�	Ck��[W�K�L�n��!bua�m��Q�s*���F�ud����p6��p6]��A�t�a�4�����d��YA�_L��#������������*g"
0OAh>�0�L�I��#,��`������Uer��J-��1��3�b�PZ�!�H��K�����V���n�'Ln�98]�*}���	�{�	&�?���HX��`6�Z�>�0�ZE}�K�>����a�/�a��e�',c�������-����a�/�a
Z�O�B�&r4�v�� ���T���������i��#E�6�L�L!:Q`��K�b�=�:���m���<f��Z����b����z��#\S|&-aAg�����������s�GS���1����s��rD#1\S����h�T��Z�4���*��fa���9c6@��LU����=fd��*�w,X]?y8aC>�0��A$��&����lo���l�l�g%9r�L����A5aC�K��zv-��AU������}�z��aB��n�U�����@jX_pO=�f���"S�2��=�%����������*�_I�s����������~e}����d8����'�i��I
������ZY��+�����Z��lu��pP-����C�0�F.*��CrH�,�T~��&�OE�����"��"����(��g43G����[�v�^��<���a�����qa
��v3�d����>���}0��`��ALl�������A�i0����F��"a���S�����W5����_�&�va��,�����qbJPF��;�S�F��L��6�Ze�:����]��U����2���\�4�H3.�`V�x�[q+cq\�����n+n!�	���e���a�����2�����a�����[�j��evI������s��������]f��.D��N0��Zw���[#v461�k3t���a7 0�1��xO��B4�q�m�t��(���#?��OH�(��*n	"���%(�������7���u"z�L�7���5�:lE�[N�z�\��1�0V�+C7T��=z����!�D����V�O������ yO��������{lWf����/..��V�t�8d�Rt���{K������
�=���)i�%v��`a3�[~'��w���>��v! ^�
�(�E��;���
��h�/�gB7��������6�j0,�o'����-���Hp9�3���f��B@r9P���;T��&
X��u��j�u{M%�$�����������33h{w��u`o�A�[�kQ[gJP��Z������7����b�ux�
���:���������6O[4�Ie��x�`t�.��S��{�V���%K�����?��KW���V~���w������tfk�	O��)A�#���+�4j��p1A������7�GW?��0o8������_��6�m(+;��p�����w���������A�.�c���qc��wa�k)kwh�A[��b�0�U��������G�5al�o�V ��[����M�������=����H� \V�s70�Ns�Ok���1����3����L��fQ�M���J���������������a�k�!�>��g�'��P1���7�Ez�KV�� "�P�di�'O*��Gr�>��X�>�vi7����f���/��)��:t�j�d��������z��	+�o�l����1�8�O�"��i�+�������'���������6;p��2��sX��3��JVg����ue�m�' BdZ�x�J����p�2��>�8�Ob�����z�H����KUc�e��u���9�]+�����H{Yc
beVN�~H�"���
aA8!���/,1uh�`��3� �w�~t��pl8@�,���j�_���lB7���0,Z���c�^K��i��7�����"�a~�F�����J��a.��@�i��5���-��5����ea�$���Y����N���X������������Pz?�j��w�r��}�����������wO����t�q����w��
�����-M�!�Bw��������������;c�ae����U�+c�����L�f��P���D o���h��MS���n~��SiUN5������Y,��f��h���R0m��la�u�W������)A�������_�x������	����w��#H��A���M}p�O���_LG��;�&�w
�D�	�����t*J���X_<Y9�9��e!�~k���������_T?���k-�����s�9��������1~V��<i
�>��7h�D�|��Rwn
��%�B�%7�U�N���-�IllA@���&� |W�@D��������f�-�_���M��`b&h:��6��"�@�������Yz<~a�B�"`���+&/R�dJP o� ����8��;��b�;gb�h����^I/(/��B(8�T�sV�A�u~������\�~�;���6��3~����k��q(�#{�������0
���rb��j���U�s%Zf�����gef��s�G�:�.�eF�����I���a)H��������
u����SM��
bJP]�Cq���A*,cCf"H�JT�>�q�+H���y^�#������y g*<UGR�3c���w��������y���Le�~��������� ,r�����N���r����q
9=�6v&�PEqC��=J��U���J��b3��q������~1��E8�����}<�*�em)�S����)f`%^�#)~��;�@�(��v)*`6iN��S�r��#���)V���Bq��!3��8�.�~S�v���6�F��j���c�����8�����,�������f��O�:'�����w����#[��u&c�G:���Su�)Au��)P�m��~f����1�5�5($�����E��8�����!�����8c3�[��������	��i1�d�6�@�87p�o�jk��f��{�������3����}�v������u�|�M���M�DY4d�/Cf���)������m��������M#��Od8����T�B{��j	Z����e������b�!�A������7�����-����;��13a��"%)���B����z��Z���L	���������rf��+�ra�<�f��~����&C(U���qL6E�Y���$�O�g!��{�Or�2�&����Y���������6y�Hgb�����`��@%&��k�j����E��k�������l�����~�Z��4���LT1�E�r��G#L���}�'��~�.Bc/������BNc<��C#X�.!K<���6��d�;��8�K�F����yjl���|�!�_|�|���1��,���=afd��X��Z&"q���7 ]&���k
'�;2�����:��u����78C�����%��A���1x�%)K|�x�3C�������U����%��l�n��{d����
��y^���`]�:�S���p#M�C����n��yd{��%np�����4u�(�ftE����u�|~�5J��,R��������fPM��s�����z�@XH������;n�Co>��c���GZ�%4��N���p��d������}C��~1��Xy\�bl��'`Y<O�Kh�W�����t��/�O��YL�:��ye�cx
��`� l(<�����%�_1��������|q�y�����>n��zO��<n��Bp�{����l�������#F�D������<t;q�������_B�V��~	�]6J��������RF��}=J��;>OR��2IH'�s/eB�Y\�*�!�;����q	�1���F�v��>���h��-����J%���$��SU�_L��0������0];m3�%�W�	�M�'_��)�����,M�FUc��?_�����;���;�I*�]�e�U���O�T����>���,3��\H����=���>��������D\��l
��.l��;������������:g��|�R�k+1z�A�����3��Wj{�6��f&F��;��e�*���)�]PH�'Km�G+�%	8�M^�3c�r��T,F\���!���A�S�gi6x��83��;)+��s�������I���DD�$�����-4�E�Hh�k���u>��\����Z!t�Ld�K�U@��z�[��,���oaP���XQ5�I���a$��lS��.C��c�%�R���x4+��������i(�����S�7����J����,����*h,�+�/ea�vk�6��C�gp?�P}��C�-�a8HC�]�I�-��R}�2�P��xKR}���O�X��[|�^�&{�K����{k�[(���$�Ry'���[I�M�����k�;,(�~3�����i�@`��!��;A�Q��E����2)��bL>��B��h�1�&F�K��g|����@e>�y�������M)��^�]	�bX���w������O��2�/�i��o�L�4a��j�����	H��	H��?`O��Q�~���N>���J�,���5QAB����nV��JhS�������'C�8���I�;fF�$�
��%����q]p��3����zz�t1dp"����dpf�y��:��E"����p"��+K�a�+����qm����xHa",B�/�g��	z�&x�$�����;(�<vZ�	)�yW\�V��\n'��$�O��n#��3��#��)�~C��I��/F��`�����N�
@`��T
�F���6 �i�����z��p�|,��7���&/e���������<�Gnj�n�ha�& e�
#��	7����i�ea��������I
�<���{"�����.��q;���#<�7���J�!8��:P����X&�c�N�q+eF �|�a��V 0���@�jy�av��R��{gf��p���47)��k�3C���Hu���~&��#,a�ee?3���a��H�%�X
}�"������w�
t��Boa�9!�C��L&�o�m2�,kK�[?�iW��H��������V���q�/���?��7����g��d�3��l5�|"���5�L�x8����	�O������P�{�;~3��93�_�aA�y%������>��o�u�J��(������~��cM�.��=�+�<�[,��i�]��L	#P2���d����O�
�������k����O��y�����mn�t���O��ZL�r�y����13�al����n"L�&/N���u���=���gc���T�|Q�{��`8�J�dv�3VjgF�^���<TO��f���nhV�}j4Q�%5����f��{��;��b���w�a���C-�t���W���E�n�����;��|�w��U����GiO?;t�b�J���a��'��&�~��.|����J��B-��F7H!?��xN���b���`e�fO��s3�����w���;7�7�L'����53�T7���x���h����`{bn�	�w�����T!�R`��@��5C[�Cv�C�>�c�I	������������ih��?h�4�i�o�\����t'r]�lG�4�	�zB����Ov�7���d��v��z(3����$�L�y�[Nl������]�/[5Q�L�+'��<������Y-�:���'LO�w%b����4`ru��YN��[�i��=3�����)_�?f9����P'�N]8{D��i����h��1�W��'"�c��2����}F��?;���)N��	�����O�2�n��;����R�/f�+A�r�������D�1�i��L�;��=�TY��s���Rn>���mo��<�N�v��D8�Q�+MvZ$���X��L3�w������$������`�O� {Aa$�Wk�W�����!�U�t�R���@����W��U�0���=G���T��I��T��I���T��I���T��IE��T��I��w9�ADI��������]qU(�� L�_u�}����������������)��P\mSLx���JY����o��IX?��?��������*����������
�O�������?�G�������s�9o���e�������?o?�����������_���?�EM�WK������S�6"~�31����bc�b�8��x�m2A�1��s��7��u��9��]��/F�+��c���A��1}���5���
8�J����+37�����P�M=������oF(!.�1Q"��Y��3��f�|ho�}�����L�YL��=��������R��t7x�!�|��P���QDj���x���=�*�x_��fTP�8��v������q��{3�$�4����a���+�-o7�<��D�S��^%��M�eR"��b���\��D�]�1H�}�^J�
���d-��'�����:Q�7xe�0V���1���.V"gR��223���h��C5YRt�%�"E<�9����}�K�b%�>����o��+$�3���:8w�"o	+����|��TC�C�[g"C��QwK���c?�#sXR��0���)��)b�1%�q��Dh5�E"���H�)7|<��Q=|c`V�/-��)A�h>\�y�t!2D#Nj���0�!%��D~&�h�R�	��Z~A"�7���	�\���E���~�����'�h�\�F�_[|��TdD����9�Y����h�a-���I����}��^���]��%	����1��
w����q�ox6U���{���_L=���N#0.<�a�������ph�r�P�����U���}������gw(���3��;v>���N�|��/8^��	*��=���������4�2/�����lToc��_��D�M1���'�*��a$a;2K�]��^�O&���jhS��E?\=3�=3�T\��W��	��0E�[d��#e��/ODUh����eIz{a����Q�����A��Y��p|���/���%J-v)��h12%����&�k��D����%\|��C^!�03�,Le���D_�O=�+:n����P7�Q�T'vR]��Q/E�y6N��{-�D�XjxZ�(�n4(�	f(G���LE��	n2��3Hg�BzcT�Y���\�\�����!\���I�6��Q���+��n0��,�a���t�'���0�-�t��8�����SM��!��K!/�C���A���
�o��(b0z;(��%��z��$8>��K%$�"lM�<��s�Ah�1�JcR@ ��S�6r&�"���0dLP@�)Ke���`�Af�+f4�g(���������qn;�|XjD���|8�0���OY�������F���`�A�\K1v����Y�v3,�����|�����{X8�����.�[����{����w%��u1�]�e�)czrq��;��;f/tf%BMzo�;�L���U������7�Y�
z�)A�2�~v���{����'��q���o"c����n�>g�di��}��B.��1�[j|�,���+?p�@�Us+��$���a=3b�>J�w�r�x���!����*����D���vs&���O�+��-����5���E�|��]cz��,1���-��1#�M~+����n�������Dr�T��o7O����0(����Z�k���������C�3��3������a�{�5T�����2��.=���A�����+������J)w��^���Q��A��+K!��g{a�<�g�Z��.�ADr���~mg�k�(�_�u���e����A����aia�e�n0�rc�-���1�}G��-���O7n<�p(���0���L����0H<��PM������D/��d�l�r�$G�� ��3���{���}�{����R�n��}`�F���������{&�
9���N��������,*A�������"T4��#���D�������`YP�yf��^�>�	���F%���I!���wa2D��=|s.&3c����������0�j���	_GEb���I1q<���u������Fr������[�8�/���23���;�Qwe���1��[�I���7�Q�#���O�?|�����X���?�]�H�u�la���L9����JXc���M�#^���(ht��O�4�Bc�3M����P��SCUa@|ZX�B��B�����|�!ta<O���J
K��ceX9a}u���>'t�d�k�(�����[�����*IO�$}a��9I���;*I'S�[� n>C���AH~'Bi��,�����D���d�>���B~u�=&cd^n�EP��F�����s��HC+��I$������y $F�����7�Z�=�����~��b@��Jo�'������|�Q�� \R&��[���K\N&����\��\�B\��%|?�K��:#1��]��M}�9��l�t���:���4��#�	����=V�k�F�[�����>%��%>�b~��d�Bu�F�� X(�@k����Fq�3H��<7�N�oP��+�����Wg�g�v��5�D8�=I�O���w��Q�&8��nV�X��	���^c��Y�6KD�}3������""_��5u-V-�C3E.�<����o�jH�5��(t)��+�+���{|�pi�p&*9N��}K��H	��->������ �������R��������m��o��x&��j[P���u,+����v<������a�����0��/y2���%&��T���K�%�$�j�v��6����f&C3�5��>10:���h-��wMa��/&��^�C�lW	����0�)����&V����~T]p`����:c�"[�rn���52_���T������C�����o��������D��g�-��|����������~r��F��M����h�F���R��{?u�<����Q8~D�
c�0��D��d�!���RQ���}���43P��]fB�r���Ad[��'h�W`�|�#��@���-v�B��PM1�������t�P�m����\c����z�0W��]�/*��`��h�S�]�0�C�^Y��!����_+3���#+���	d�@5���Z|��3&��m�2}��=���Dqx���]�	#��W������e"�����|&
��B���
�v�q��-�����c,DH��La/�i�%�&����2�I�34Z~���]1������V�Ec�W�cg�!�u&
���6��8�X�Za����X&S&��1|19j��mM��:���Dp��x��!{�f�>�n9c������D�I����X3cm�����H%U��KV�c�}0�L`�v%�ZE����G$�n6�|DrafP���h�)�����
$��Q���D���j ��a���"����SO�(ThnX���	�\g�J�X�>�^����t��:y�^K�����/�����rg����o��f��1���c��=��!�	k-���	��y�djf�h�g�g���_���y��\l���om�Gf�:��w��I�D�k���������z��@t�G�H�2c�]��+M�YO�k�_"el�iI������c>�P�(*�I�`�H>w{"��������:j����+c��e��@@*���`����(�H`e�<hU��@D�F��q�;�]JT0!����
-����@��p����Vmi��m�Z�n�w���X���P��������>/ouq�eF���N��Z���Q����l<;��[�18,L!!G����K3��se���;��]D�������L����:v�+�rJ��|nm�����0��I���V�JC�;�[�of��R�J��7-+�y�)���0��c���UG��Yd�!�B�M��73���\�]a9�j�Bh��v�u���0��:/��DK�+�t�|����QFM�^^|�@����/���q���2��$��Y���Mg����=������3����Q#��S%���A���Z�B?��Ub
�J���|���nG���.���z<�Bc���A�|Qh�4,+���!�?>������Q��oar��]	��56�dU��=���VL���2\�g��+mj��@g��������&23ae����i�B@/�	��
����F��X��-D@����0�K�)A����k����a&T�!<Q>���W��d.�d�MD����og����m�������
�]�S�i�}OE;Z���rCk)n
���;A���6N�\�~��U���o��6w��Ju���79�h�D��)��G�H4��xE����B.����Y6^Yp'�z��K���u�x�??��Z��]��L�Y��a-��q�re���������������_�<���sZ�� �q]�O$p�l��i���9��_����(c�a���!��Lt�
�����j:�7��'�
Z�-�� ��d����li�������Fh{�70�U}��LTm[6��=����R�'f�R�����b`V�B$?�?�k	����x"2�Y_\���	��5F�v	l:���D�������{J����
YAp�:A��/&����N��#x3�����<#���O!�%.A��d��Zw�p�)/C"v�w�&�]p��� n�J[H"]�i�Ya}cUJ=����b
�����!��w����s4�v��I�-��y.D�]X�"�r}!.�����
�|"��P���D!�f=
�waB,N�%DB���g\\)�2�������������b��� ���*������!����u�����\�g!P.���o)z�Db&�w�<�n��T���N��pUw��|n����cb�^�Yb d�@���UQu)���;���b��#���1��ql����6o�����!�D(�C�����u���_��J�8������R`����CRB^>�9��t@�9�����,1���mn�$"�^e����F�fh���.���S����TL��/����;�f"AlA�)�"pRC��`o��v=��\<|�W��Y���6�Z�@���u����$�z�'������)�L8�W����X�th2�%����+�-'t��|�L�J�M��<�v���M3S�o���fX��0A(��Sl���g����bG�L�����q���g��JufP�=�;?_R�W|�g��ll��V��O�G�P�K�"�*�E�b���P����,��)���yA�7K�J��:��`������80>��t$]�
��#:�'\v�f��.G�^���`�g�#�$�eK�����~oR.��X�T�L�"��=��k��c}]�(b1���,p�*���u�^-�2K�(Jp�J$V��eJ��UX��*���� b����vT��V�
�G��k��W=�]�X���p���H��D�\��������'�x(�����VP!��V�E����E���;*t{�!O����@�2���ne�}|�����oF��zv�pT����DF'g9z}��,x�^uY�&t:51O�

��rz6�x�z%|�B�D�O���b:>��wv�	T�=[3��=\(	^7v�}��A�G0%_(:S�I�a�����6�Aj/��'�(�#dk�<�W�?�hOPeu��ko��2dB���N
�'��sy�{�e��cs>L�y�O:��)��'3=�A(�2�\��M�DY��:	WPJ9c��v��7�{D��������Hk��V�{�
�
�=�����$w����j�`�3��P����|��G��|����K�����9W�L������q�����`��"����#pSV]n���x&������L$�Y��a4g|)���j�K����������3�#)�.�y��/�`�7�%k7#V?_M��
�?����x.�	^J?y� �T�-��hi��{��5�@�04�RF]�f�>9��Tl�L(f����)��^?�[���r���u��
��u1����������6����������#7����������vn����z����GU��U��D��c�C���2����2��=H8�8*�����E��
�D�Lb}Qc.�_rNX�]��6v�S���7p���x��~{"�3�E�Z��HV�Z�9��'�
��B�� ����������d��&�~&xE��80��G_6�C�;O��|HW��	�4�;�1�{7�E�����S:	�S4��L|��Fd�n����	�@�N��R�����CN��&o}?�9���*������2����;����+���#���2_c��~+����2�w:l�M���d����W���quW�p9������I�Li��p���L�����9�]�#��Hpudxg"!�
�: JZ�\M�;^Q��]��S�"~W���bj�w��|&��hZ*`��E��w� �J8vc��U�]��'��~���
8�����.���%�������T����x(6�����QZ��\D��f��U�L�A���e�3}���&j�p�.!E��&�e
��@6����4���Z��������03���Y��/�uzIFj��1�?���!P`�a���h���i���tB���(��F����Ip����.e���XT~g��fG4������:G�&Xh���������2Q7��FW)MpKMt�r�}h��$��}be�#�X��1�vly�}`k��3��t1����t�.'xb��O���e&��E��#B�D������i����uY����	Z��{���7�/'�i[gD����"�>`���m��ghX�3>�L'����3�m����^���
h����]�~�����7�s��Z��t�i�j��7��Vy8�55���)n��i����v����m�/4�D��[]�W-�kg\y������Pem0'I�3/����B+��k'��-'
>({aW�����8$V�*���>m/����7W�p�p��N������{}�����\���nB]p	�[���d�b���3F���k�|�sz_�3A�UOtd�y=C3d,O�������fN}����y�U���b�
dsj��=K���Y��L����T��g������	�L�*�f���+c�-��a���w��]	MD��.4p%&�����	�L4���1���W<�`r�j,c)��-5FI�|�+�zb@
����f&�P}|�������~��2H�������+���o#�@T���5Q��E ��>�/8�nc��a��2��~�~.w�������~f������5�'
�F��USU��S�8�1#����H��o�_�r�w������Lo�0��Q�z�s�f�*n�����������G\��y.Z��<�0*��f�*XUq���wa0��,���5�pe�-|a�F�C�i�\�r��x����$!"��������f}o�<�f���t�6�G����iv��:�mk�������i?�������������t����������3�)�qB�9^�j�
4�^{OW����7�U�t�=�j�<s��
I�l���U����y��RR!���{�������3o|���C^��b,�M��d�H�_�a}
��x\�j��nM�O�d����g�K�+S����������������'6{�!K���;1������@T(��J����4q�z��@�1��P�*D6(?���hn��_��?@��
���$,��Ak��<��ln�%J�����Q=��3H=w�#]�z�w!(O������S=��a��m�lL�,;����&�$[���w�O��P�.=����������&������5�w��m*b���^#��0o~&>�����3�&�������\���+��~;;`U����E��1������&^��Q7C���aT����������Y�����9k������
���Y�D=������?�����{�B�����xh�AWB��<q����6���J�8��,�����,,���vr�b�|c��5C>�K&�G��� �yh�����&�����������	��q������ofSJ���o��#ms���;�	 TY��:D+1V��LW�'�%�7oa&�R>���uh����]�8�������f
�0U{�C�U#����$4�I�yh4UL��S��\�c
=����9�<9eJ�pS�t���_21*��]f������'t`��u��3b(-�E��g!��a]O�0K�{Vd)K��I�B�|3���>YcY�q���}�C!��S��	�������v|'�73�����2i?��k��k?�K�/Ld�^��
�<���	<d�2��W'����;w�+��f"I��"�v>���	�2,������0�+@7?�P��l��Z�C��t�d��LX�����WO�������������C���C�e,T��������G:��zj ��+_>Z��������|��L�� +��a���������;�g����oa )O2���c���9C��f������i�[4
����|Hb������LI=���)���'���iR��$��0M_� #G���kO�]��Y�k1g��>	Gz%��z�$v�3�VB{X��23�}xQ�Zb��6'&�7��������/�0�g�<��-�$&Y�4�a;D�{�)S����#�z���A���i����#I� ���@���L��������}Z��������%�=I�`�Qp����)A���1z_�4�/R8���sUY�������>6��FO0���70�!�����c!��	+������[}�@������*��&����T�j���=�D�c��P�lLX�%�����{B�V�3��6n�;<����S6M\KF5\a����w��_�������jXf!���T?
�Y���/�+2�tv������Wj>��ofclG��|����l�'l%�p8'G����X"���A�>��]�����l)ZO/�x���P��I�6��*�)�����z�2�V�+��F[+���S��LU��(!�z{B�DM����Q\g\����k���X��*������BR��������3�0%\��ZD�D�������W,�+N���K�����E�m��J�{��;��Q�X��qV'^��[�+A�����)���o1���i�L���g��uj����K�6a����Z���1��� ������Ls��aO��%3�wi���F�e����Q��*�����.L���x���ofP��_:�@��1z��Q�je>��y}3����~���|��L O���/���I��qf�����c�|�E�e�l:V��&-�1���-�{f���1�D[���2��	����j�T5�!:Q�S�O��q}W�EA3�;���7f�D�W�������������-z����3�_�������ku'8_R>M��W��V�FXqR�	U>R�_������|(�kt���Rc��k�c(
������U�|e�u�� ��]&������@+l���%_O�:@
�q�zdf�UeZf%wr3��eV��F,��
�Cp^gJP����?[�>�kd�y��/�=�r����T����:���"���Xj�]�_�������T'�B���2�Lm�S�s+��~J�s���(���Q�;�����1�4IS�h�g�
I)�3�qQ��F_�4f&�+��ar5�wo�(U���p�����uw�/��H)o�A��kfP:������+S�2�.�z��D��:��T����o��j"F��
rs2�Hnl��n��y��v�����2��l��
�_~��p��(#����1*?���a�,���~3p���	"�(K��a�Wp�H�"+�,c�zNy��	�573UC�9�	}^�������m��Da����&��	4��Z�C�U`~`Sv��it��?!�I�KY7D�O;a=M�8�*���Y��3�����4�	��]	{�����2�6f� ���7
�>&��T�m���%��u��������JV&^?���f`�x�&��&r��Y�~���v�qu`��$�5KR/��(���D�b2�?�7�"C�y_�����C���g�����|{a����L�������0��l�=W��)�y�?H������7��[�\������q,���K���Dp��������2��/Z���4,}2��s���t���%c�b�����os�3!/�!�����8H��a��=n..�_�l��������z�|u�=?Jx��W��y������Q�E�����E�� �rdbc
��i��i��y�0�#��Ary������g�f�D�s�!�zu?�	rz�����G�f*�������|�]�%a%����h�c��f�G�H%�9��~�!z%Nq�kI23����:������J23^x+��L�����lLv������0�P+Q)�-��F2���k�wRA����h9�iP�_>�	�HD��tMM���V!���W�`�<0;�LH����������Z��k��yR��1]�����^U���l_���P�u���@�`�
�������+\���={
't�@���	3����������RT0��4W��:������������D���y�O��1�dE������ZO����[&1�)�N����D^��[�����S�o���Q&��;��Q+�t���_D�����'�u=�8�6Cf�W���&����
���nP�a����!j��.�����rjGT��[Q�/%���)�^�LP z�����Z���M`(���l���HJ�;3�>v��[�c����o�>��M���A�LP��+������NSZ�+��~7w���E"�
����ai&�Z���xlq��*��31[���	^~rA����r���<�����1���w���
�MS����3cx���a�q���DB���=n������Bo���H06fhDm�s�m+�C�l.]M9i�X"zW�06n }���<�0F{�F�_]x�Q�iR�3%��:����A2�T����j����^i;gs��g�����
�Z����Q�{�hX��/j^�^70����������b������O�/���!��o0�������s�D8h@���p�94
�����J��
��G��D������F���)��{,�b����e.���>��1�buMy�����$���^�0��un�QN<-l�R�������|Q�zc����&f�^l����n�U����33�m�B�z�fg��U��p�� ����Twa,KW��o'��y�K*���S�6��J�e�I�|"��b�4�U�4��M�P4�6��LV��/���Q���U���2c�to����T�c���n���&������s�A�/OD@�{���R��
������v������a]���"O��F��3Mw����������c����k�;H4���>��I�`��w�!���~��O����t���N�����O��o7��jG ����5_��|�OW�r��q(]��*��z=�*Q�j��U�t�:������Tv\JW�;_���j����W�t�-Wk�+�tu�uE4��O�J���=_��|��uE����c����$JW{�I"\=�$�DC&w�$>���w�g�t��������u�*Q��o�*P����q(]��|,e>�RK��Z�U�t���"JW�2�K����W������@��T�s)�5��Z���u=�Y��$���Q��5K,Q���C��������L^Yo��-��$WS���h��k�(]�$�X$����\���Z-U(����Q|����j�����j��}����������CQ�eE�Us\
E�Us\
E�Us\
E�Us\��*���++����j[��\WCQg�W�����������@����j(������\�sME�Us\�s�r���,W����b�����/�������f�����/�������b�����/�������b�����/�������b������l����9����0�j���W��?�����a�����W�2K���T�R�<� ��\W���T�s)s��W��?��:��\�|Me��2G ��3
�<�������;v����v���a���Q�q�n&
1�G��>;�0T�!\��V��0/����a$X8���{c8@�1����y�o"�r��r
x|4��3qC�������O{�"62�G�fbWf��q6�����Q
�k:*n`���Qh���) ��AR�J�y��%�����7�VRg&cH��#Vx��Edv��5h��>oEL��K�(��`V8����Ds�c��e���1�4C"4��;��=�`��m�|W���n*��gA~7����ex��k<ewW� ��{�����'TG��!�gF�?��XD��,�&��8�(,��� �
�����h������x��������h�� v&�.�]���s�X�!�<���ab��G�7y:W�}�:��0~~��_��J���Kt`��<P�K�C�U&�xH��d|��UT��8a���/s�>�G�v(,L��%��s��p�"P���]�����Y=��`�/���������y��!�����tM���@�^�; �3�(�`��x%�tvf�6��uM�C��\_���*U��h?o,jP�&"A�f��6��~-E��Z�~�����=�B-�
�?c(��:&�e��(CBO�_�*���r33*:�c��NO�"F~`YtvZ�z>.-FD&��z�4=���;0$������E��������l�U�OHxf����kr��4c�*��'XxZ���>����c!�3����[�(�@���A�'�|8JD��������^63�-�L���B`��������i�o�����	�f�I�o��w���]�4�,��L*R�R����mev��t��#��[����'�����:�1,LIm�����OD�0���Tj�� ��������Xh�>����HD
(��������g�mEO0����,T��|7J��53I��D�$��/=�|N/(�h�y�����5+30��F��	�Xo��M/$�>=�������d������A�B�1���jk�jk�a�Y��]5\�)A��!u���2�����A�9�0���P�+��gb{�5)ZFe�;���=�=l����_3��%5�a��a�UFuf���"V*���0
>-��i�Y�������h�$3%c}9�5[�H��N4����"i��o��CnM;�D1e����t�(A�LMi�3����A��L�����)K��&�������p<b@�0Id�lFh����3�(��x�I��7c�^8;2&�"2��k�Epi��X�0{�}2������/��9��y����P�g�="n��o���a�&b���(��Z�]�~&\����cH����OJc��^���x>��;~�-�������=�����VV1%(���b��A~�	}F)�1;kwu�.:�V�7�@U_�Z���Z��>X?i�L��wLC23�N�����Rz��Q�-����Jf� JX^�,�x���c�^}!�D�p��p7 �S\��/�)A��e��J���s~l
j~m���h1���S��[�w!h>���K�f���O�QyW���@'��T�L
�A{�p`OLb[���5<:Ef853���v�b����2���`;P�P��^�+��>nA�>|�����v��a|/�a��
7�D�O>�Wd�W�/��t��%�ItW&�9�>�����,\aT4j������5f�3���	S5������jrj�{�'������ 'b�{m����dJP�Q|j�1zTu���y��xL.����K�#���a�)A�[�;?�����tJ�=�q"��`��%qii>OyicB�D�Gn"���0��i��A;�Y�;z�.�����37��`s�N8���������������7���D��7�uf8V<���&�������/��h����R��lc����N@I���=
�]��%�B �;n��8~��sW]Y�f��ch���
��*�����07��Y�:����i�f���	���f��v��g�
������%}4\�''������g�n*���09Y��3f����]	:�XIu�3fPI���ui���F���)+��VV���jc��L�3��7���ZKR����XdJP��+��F��r��)[����>�RO��2�3�um�~W��O����H������'Z'�M"��'�����vu��6�k]�k����S@pKmz�3�a-�����a,�&lV�W�\�a�S��6��fE����(�X��8�7�]W,�.��w�w��V��%��Mw����iO<>P!�'�"a�������b����2�@h����ck~�A�
����tU�%���w�O�����K��b@�0��ts"��X��x��0e��������u�r��a����1��5��`�kg�G��3��a�|�t��LI��(_��MtQb���nP���@z*����I��b�F�&	��i��])6�~�l��o"b;��vg�H�+A�hKq�a��4*I_�4s�Mh�U~�A�?m����g��M���6�����?��^��rl�s\��������I\�(����>=6��xe�
&\@�B���a	�u��C�DADq�0�����:Z�:xe�������#!�^<�=C�.����:�.e}d��2�������OY�u�k�c�2t��x��U^>�I2�J������D�v�`��n���T)[�vss���5������]C�
����`��:xa
��	<���B��e<,�T������+c�|�I	G��^�n�8��2��B��J�������26t����!�I�2r�P��$����L
���]�������]���~&6���%3c����N�[�����-H��`!+cgZ���k#�M�D�'3sT��8��?p�9kj��D���������qh����;q0}���(�wL%����kM��>�f��?T�5�Dd��uW9�&�eDx���0�H�2��/���p��a!W��hQ���1c������-�[6=��/��(��I�(�����a���Y
GL	�PT+��YS)|����t�09�f^�>>3G=��4��w�'s9u�1�mG�{t����@�=�v���{��l���������L��g;��<�����h@��Q��O2c�lF���FL%�h8t
.g��`���AB�C��~p���GQ��G�\1%(�1
KfT�zlu�P�����Q{��Z|&s��s4�B8������.O����=@%�!���(?";o��������$���S��-w��@ji���GH#��_��gP�2����
~���)��~���n\4�o�X<3�3Nt�V�+q(�\@����*_�a����}G�B<�zl���^
�0ccMvz=����'S�[0�v���t�d������	���G�edL��?���?�NW�p8;]����?�/�+d�D�������|4M���l������z�5��*g"
0O�h>�07��I��#,��`�\b^���dP>�7���`,]�3�b�PZ�!�H��G�3qy�(�����\tB���8
p�.m5����=�{�6�D`�X�:{��5;
f����}Ja"������},����a�/�a��e�',c�L���-����a�/�a
Z�L�����0��``��a��H6����d�'��13������n����vA���/��s�������k��,\S3�\S���V�5"���#����#��_�q3�0�%y����"X��D����pM�c�}��������|���fa��
�d���Dq�����v�1#���0�]@p��`�$����D7^���D�����-���-�-��� GN���`7T6��������T��2|��������wS�R��dR���{��~�{�9e�O{zK��S31 �S�q�U�����
����s�v=61���$w���pP-���O���1L��)�C9�1��Oj��}	���Q���'��ZH	����f��2\TN��*���Y,�������3�OQn��?D�IW����G�E3s$�
��9��+�!������1�%��W�2.L!��n���`��[�0����� ��0X��c[���T-�4�#+n!�!n��,6x9�:5n�u8��F\������M6����Y�i����qbJPF��;�S�F��L��F��E��s|����<�J�����zr	�"1��t�����[�)��t%B�7�D�"�s��[1��3`e�e��13s���^!�q�R�I�1*�o�(5>Zw�����jk.w�i��"��c1\�b����]
�K}����u�2������C^>��.�y\Tb��&H����L��������	��QbR���`��X�VV�������:
1z�D�7���5�:lE�[n�z�\��1�0V�'Cq$�=gf�	{"���a+�	�']D�Fwx���MLI��?qc�=�+3���W��c+j��@2F)��v������V���������������D���m~3�
���`Q��c����X����w������&b"RwfB7����D����5��w�t����jjf$���!w�	jv�.$��U���C�kj��eka���a�1����&��^>c_�yzK��z�����;d�:�7� ���
��(��3%���~�]���W��>���xb�ux�
���:CBSbW�p�2��i�4��#W��L�b���)��=
&+�O1%��������bJ���)�+�����Y����X[L��������,`
�a8�x�Ka�����yG���y:�:��2���A���������`i(�S ���B���oe�|s����a���4�����]B���@��*����qv}�4�����1|kC�Il��(V�&�#�m�
d����1�1��2�����qb!�]=#��_V�j���*��>�C7]cL��;�u�a��p���-������+i����	�_�~J�����������Q�>���?�C�p������\@ Sz8�|��:�[�w_��xd�H�:�O�Y�/�vi7����f���/��)���I��f�b�*�HS��3aE��_��7� ��'x�[37��NK~?G�;Q�������G���#Lh�f��V���M��9�K�`u�u��������D+M���^i��1��Af�vg��HDL03#\H;b@����a�jL]�����x|3g�kE����9����5� Vf`vk����!f�BX@XHtt�IELB�^��(Ic	b!.;���#\}�B+W�B�!,A���M����.G�y{��C�����o}��Lq�yE����c��
8�\���65k-�?�M�5:��V&I��U����N���*������������P��X-V�n_� u5���F���'���_�=y��!jt�>NI@�w�l�+�F����6�|
�u"�����&��N��
xb�����|�9��F���������kRJ�f��`��L 6�8��v��4u�����'�*1�V�PX�!zX���zo���;����h����"x:�t\�,%�e����L<�r\<�9c{�1sXyT�N�Af`��N@����M}pyZg~���	�����g��8a��E��:nn�D�/X�C���������6x
[	��E]w7K#���h&���Fo����+c:��p����������y"a>@����;u�uKJ�,Kn"���s �^���RllA��<7V�$��]�i����T6E[��6>�1ff��#m�<�!R��������a����~1($�c�V������[0�g��'�?L��r�]�2Z^����^@�����A���c��D��J��~1�G'5M����wDG%<F%l�#g� 1�]���K=C�]	H��L���b��j���U�T��x���a��Y��O>��G�:s/�uI��S�Y���a)H���y�������0��Z5#S���`=�u�:����
��Hg7Q��x�u� Af)5X�9\�M?�c�S��:������l�����P0�Y�5O��5 S����w�e�0%�3}���'���v���|��������+�6v����|bH��*p�$�~������}�w9�L�����9V��>%�S�2�6���-����re�����Q�z�w�BQ�1��2��q��V�gQ�r���g�n]_13���B\@�Co�L�5���������M�����0f���`�jsN���d�'�ya���5�A���j�,��}����zxH}���d�����s���L	
��H�b�D�^�3����\8nc"�kPH.{��������\�3�as^E���#J�$�
����� C������� �����������%m�"��b���E�!����[��sp�@������`u �7�ci�x�d�����(L�mcl���5!�]%�~o�02���@�gH�iP���|�L	i�#L������G�'�����81� �OY�<�-�2'�FO��Y����ic�t����yn�&F��?�`k�d�S�-}��a�J�-��"��F)6�b�D�����y��U<n9��J��3���I��`�}!|b�
yb��<��1�)��FUM�*�8�~V��qh��(���`W�O�Hd�o�I�|��g����C]��45�|�{!�������4J!t���k�~�����H��a��D3����V3}������Tu���wo�`nnQ=9��e]�"�����:�4��U�����^a�*7k<�X���J�8��t�����:� ����pqs�����=���c��,q#��`C{I�r3������=
6H=0�bW���~����GK��U��,����{Beh��X��Q-�pC� ���b���q;|;8��������6��g_e���M�!Wh�cI�w���v�4�]I��,����6D�<���*2��2n�;~x{;l��,q2n�o�
�mg^���`��:�S��7w#� D�l}3�b�Ogh�<�u��'��A��h��]m^}�|v�6J��Y������L��SoS3ZM��s�+ffZ=.d���M��w"�W�9q���i�j]a�m7P:�f��Mv�~vm�d�Kh�K��,�;y\Z��~����&p@���-�WA��N�������OW)�
L@���("��9�S�5bd�;q�@��1�7w6g~�|$��"n��U|c����f��#������i60�(�e Y��-;T|�R�����]�>^�y�����H������\�V����q���mx38����3����yF��3��C?��7�R&t]�d���
�����\���s�(DS�%E�N{��6)�����������W*��&*�s��z���"a�?@q}awan������>�j�	EE���;	R���'v��MoF���X;1�Oz�/��wpr�w�|���^Eo0?{a����:z�QwXf4���k|D}��7��X���������p69�qW�������<*���Ht���F���B���f�F-���c�ia0�RmoY�b��2>R:��5/k��2��>�sce]��L�Z����T����27W7Nf
�����������A�S��4�����+�
������$��3j���C�UB�vJ�=+�kw�w�?��Ov�=�y%R��������*�I�����U����@�]���oa�|����j�Y�-�`$��
��%n���-�]�NU8xw�hV��!n��7L��*����5��HV)��)��'���oa�
�Ja���2QFpQ����2���2
��5�w�1�oa�Aj�������&0U����s���T��`_��.��P}��~��d^5��F�Js������'��T>��.�`�!-�~H�wmnAY�VF���wm0aT`��.��u�$���V9���d��EL>�����p���!�%��=��N1��X��?��U��$B�>347%	���Y	�&��=� �q�Vbl"��	�L��l�A�'c�[U�M@r�CN��	H��	H��p��G*���_��L><��J8�,�:9Q�s7��71�X�?+�ME����b��'!l�x<[�`L+�FG����"EH��<f���z�I��,a���� I+C�����$7A�`�HW4x�B���Bu���f�5&n�-[�!������e!�]+���*l&�H�R8vZ�q),�+&L�pAW���B���H��@�O0��L?�h�����K�0���Z|&{oAf*���Ka������1�O
�3�a6�~����>�t���;��x����6��h^���i���������,�a�2��@���
�/	SeZj��;���!x=��x!�>`����]`cv��Fx�y�p���Rfz����4[���8��-�Y������E�����2+P1U���jy�bt��#���&�E~a��T2��9W ��Hurp�}%��ln�%e�0��a���y���Y��=�
}�"������wi�i�m��c�9v!<]��L&�/�6~;N�'�o��0?+af�!��<9�[}��1�����dE���q�|;W��FN�����|Gw#SM<�4����q�O�C����m���u��'H��n�<,�v^s���@�/�axl+�1Z�d��rU��������k�Os��9f�t���*��
V��H�Ze���.w���'��L�XD�5f�
�l[�����K_b~_�=�f��O)��ZH���y�o��Q���[2�����;�p�t�����@��}3a$���cenn�g<���B0�w������������k���!k�jkf��w#�����M�
U�-�1�W53V���5�o�10C����
��v?k0�'����,@s��w��iG����U��������Di/;[8Tu��J���f���u�|��Nh�M9��k��K�����d��+!Hru������������F�����J)�����	}T�K���c�I�����<�*���}��l#����9���*�b���Z�W�P�����.��<Pd��lI���W��M���������i��Xi�C&0�`��X*���������MmB�&;�����O����6������������f:;�8�Awz����.�l�D�3���eNl�G��b0���t=az�+���� �o��I�,G��s���W������Y��07�B8�I��A��#K�4��Os8q�1DJl��wt��}Dc���������`b�sp��Mh4%�M�2����Y�|F�Jy����?*��C���i��U0���.6?@a����c��"~���$|0g���n��m�#��1��>Xwtk!�4��� Q%l�#}�2�<z���*��w[H��g;.�)��]BA�G�� 1���|UQ\��;]JW%C\UW%�o\JW�l\U�����<F)3�����e�U+3�F�y�e�U/3�Z�q5���,3�.e��D3]��UC~U3x�U"������!�Sk�h���5	t�R*1
WK�1"�z��D~u�: ��������������m~�\��_��YHd����GJ�"���o��������'�|�����.���v�����~��������?����t�����wy�%\m����c�@)������#Xw0&����%��@=}01�1����	��J%�M��
	�;�;I���Gg�� ��qH^��4�@E�yg,�Q<�3���~����%��C ����zF���h���[^�g)I4ckp'q#Jy��r������@�����-#p�!��`Az��%��S$�18���x���<A�[>�}���Q�
���~+O{�[���3��%z|#�neK��]B��:��1%}g!�P���N1Elm0�)!4S���O0�7�2e�y ��x��zTru�2Wv�lg�q?F4c������W���Db���f
��d�2����'��dI�q�|up�s��K����M�
�F�aeCb�1���h��4��<P_{X��a��ge>�6�������Jd��D0��*`��O���D���R���M�|��d,2����@�D�j��D���I�
��HJ�?(�����o�a�_c�S��f}�p����Bd��	���i/{C`A6J<�DvD&�(n�W�z�-� ���
D�NT�L��
��?v������(�%���L��0�
S5Q��F�Lhe7�>��-k����z�Y����H���R��,>�2�7@Q������0@��
scE�8�7qr��b�^���2	������3;U���H�����>���T����|j�P�����h��)��^��2�'������kD�7`�����<X&��6���8�/��j�J����z'n<i��x[��]�S#pb��tMg}��57�`$-�we(�gO?)�W����?J[��;F���UY�~,�	��T�BCFIS}���U�M�K��3.�O|B���D���b���+�gT����[{���������)ZLK�0Ll���QO0�-?Y�-�dV:�T���da�nk��g[E�-G��eC]%"|u�9�<7�XZ�z4on�����4���?����Q%�x6$����"���^�F�:D3F*T�����Z���X�\�h@l!n���I�6�>:�(f���tea�����?�����.�g��
�L���a����P����0�A���h���ox����T 1I�V&���y,���q�Lb�����4��S�J<O��4%4����&Y	-��T��8"1AQ"�,��,Pc!�dF�ZN>^
b�
���jZ�sg����hz�c&2���j+���3<�h���Q�:�|�i)��X�q!x��4;05���x���P��_u�1~���<  d�[����Zb9T�{����g%��u�`K�,0-�'7$��Y���&w�Mz��;:�w�������K
�(s��iN	a2���Tt2"�0�I��30�
�&0�m�����j	3��4`,�����ha{4��16�����;>�<aV�.����3�ue�
v2_��1��_0md������$�n�H�qV"A�[��H{�%��\����ZYT�G���OO8�%��������3�@'��oFC1U.	ph]��wl��u\����!G�o����}�rw����-�o�%*��pW���Meu�q_��`�
!�Di�a.=���h��g���v�_�k��J1���^b��(Ve4�����0~x�F0�#z��
�p��@t��A�����L�k�h�(������d��9+�Yqc�C���eO
�j�����=����6�����W�-7��~���|�Nh�~	��Y��?�5`"4�d�v& ��{/#^���X�H��W������3���y���}�;n�P�!Ro6�}��C�����<�v�{�+�*�6s��*���kd�n����6>��
Y����f�md��TB����ol:���i��vw=�3������AI�\3�.)����,L��"O�o���2������rmN9)�@�������F19��	11Rr�u��� ��i�r�UFp��������B��TF^���0j�,�3��v�(:���HS����������|b(S#��{^���."�L����I����d��4�W*a���
3q��41Z�}�o��c|"8�?G���rE-�u9pp�|J2���!ta,[�/?���B+c��}�4����Xf�X@	c���8|f����������YMH�%��I����D��Y$f���p��
��3�t����,��&��`v����4�g�[m�-���-�/���sa2���Hc@���g=�sB�=\"u�X	�H}R�t�������Zt�j����^�{�Z���6{B��~l��c�
-'LR
�Y��,�-���BS����R�\�B�R~�o�X��G'��d���Jd�����S���[�I����w���yz�L0�5��u�J0Wi���0���3�e6^b3-�m�%+�`!���w�R(S��WP���)�f�N��k'�����e�1c����L4�Y�M�b�f(���rw��yB�+�Xk����}�Uk��|6�1����6K���%�)p�5��5���s�ja�98S������i�fa���\c����A���L�L_�Qg�cs����������m��1�_��&�mX�6���O�\JqC��C����w���Jx!�nP�K���2
1������|WB������x���*���xJSL2��{���FI��$r�f�{���U&C1�r�o}"�v��F�����M�:x��"��1��������`s%���8�e�X������`��o�No_%��`l��y�_���<����17�u'<���[��^W&0����o���<�r^����E�weL&f��mkGi6
y?GD�4x]/�"����[����bI�]��M�>��T"Cn4�4��RQg�f��X5UFU���J�Z��u�������l����(�D�V%��B�^�98w�p�D3F0*+��~���F���8��������`h�2/N�O���|x�^Y��M���H`+S�����'�-�qB��D%�*38��3���Qe��y0���xqd����c����*X�D�����K[!��v ]�B$R�9//��1xFE�����9��v�X�<�'������J��y�0��6gE��1'E��I7�i����l+��ug���Z��w�!�������!�����6_&c���|�][w�6'�B]y_A"0}Z}���!yg�6"���$�����D��z"(H�y/��Y�[K����DrC���K������;����DS,I�(Z��A"W��G�4Nvl��������]��?]&d�SB�60<��Bbqm��jh@F�0������O8�P���bnF�:����
�N����!p����k�J��7�a�d��`[V��
%�N�n�o��f��l��a��Mn� c��G��
;$�Z�M=7|v���g�Ce%cG����`.�����5��{����d�";�r%].Z�I�
��Q�q��peF��eW�6��z��L�9%��H��|�������;�@R�h���	�9�����0�P�T���c�XWF��2�������H~nz8M]���n��n���X���+09�LVleTD�X�Q	��w1�)g\
o
R$T��*��m���O��\����3�t��e����(��^uy�y�q�?������8�2�aoa��uW��D�	���i�D�� ������4t��:��4c{9WF1���NF���-R�V��OB�u�y���I��g����0:-�`$���������&��ET)�Z��7,+�y�)��BD���=D�@�u����Q������L��@]=,����?�V��~��t�-L����[�S$
!�]��c�Q��+�~M ����/���a��Vn�������fdm�0M~?�dSt3�X���V#K��5e�q��j}�~|6���4|������*�F�SS�q3��������p�juo�l����������l^���M�2��������D��G~V��e���H��J��3����VD������s�J[���}��
"m�x3��L%������T��.���+�:����5�|F��c�d��px0��o~0�N�iN�yuk��f��A������&���"=8����Y!Z�:<����2+�o;T�O�/`h���}u����`��i"@���;�@����\����e��j�;X��&���)�nN���T�b���<�����l �F��p��5���^���Y4^[��
�*��h�%�����_�h�O2?_L`d=%������3�5���bLC��cN�*�PC��P0����B�XMK�)1�}���W���H��[��|4�(�����Mf!]�O�tMZ���w�[�d-�����v
��0R<��r#P�`
vN�F��a$~H���d�u�����;7��L�BG|�L@{�����2'�}�kF�N�7n9�^��V����(��x��)p=I���A	F���s�y@J*\�����b��v�hA
�/��L2s�Q%��|!f� �3~����2tQF��D�HK�Y��,i�Uh�^O�Y�� ~V"zv`*�Q�JD�cr��6���a�WeR������H�4�a��<Q��zPt�@���$��2Cru*f�%��
�x�7x��%�S��?+�
q�N�w�^�o��6���w�q��8�iX���{@���,��2�"L��2.�&� a����F�������LS�WgF8�3�����HLK!c�*��{(����;�X�@'�YT��
<F�a!�D3�	���lc�����zCQ!��,��^���-C�|���N3��ol����966'�.�-� 1�+�/<X�4v�	W%�
����E�I��wa\/_z\=!���|���%XC�w�X.F����!�0!U������/v��l��0�^�4��!�^�+ao�T��4�\s_8}����X�
����`2[�P8��X�3Y�Y�������h����q��_+#9'fA���3Y��B��X���|�	Gf�
,�����	|������F����t��\�`
E��N�_���`c������*Fn��M@`�^M�9�`���(V��uje���	�e������2�R���[���L`=$���:�nd��<,���LL|y����!3���]���6��
=�E8������a���-����v�HPE����i�X�vc�4i���3�e���<���7�6�G�Q�)}���xoH�>Z��p���Z���M��jr�]_}�-�	�t�E�������p0r^x3���E,1&��s+���>f�f��<d3�H��s�u�����R�LT��"pg�2��|�e����R��C���Ct�pTms0Z��nM�6	5�����9?7�y7�p^7i����F��F��d�XO�H�6���^�9���td�#����/&*>��g���~BU�#^�m�Hm�BO��J6fV���`���%W��e$t@c�10�c%Z���|�R���fA�v�� ��R�`����0�N����-�� ��x| a�O0
�ai!�F�c���7����,s^ w�	��������b	���.
�O�G�u�����v�J!"Go`M{J���7��X.�;9������� ��m����;P(��/�3�K�>���7����u�����&��Z�L�'����@%[���w��k)w!��_���@�����a�+���:�!���e�w���~^^���z��^7u$�(LU�`��Hae#O�I���`�/��	�e-+C�����g�]�	��P�%����V")�a�������leR�}����Jde2~h�!����w��u`:U.�yA��}��p�D��5a):�c_����J5�1�g��POt&8L�������Z���@��~7n����U�{�r�^U��/�I*��
������+����1�����B�r�7��*���'��1�{��b!B�@2'���H�����^���%����|e��m�����}��VF��]\A����w�`	^	�hnpY��������h��dl���c��]f1����Vj2���!Og������qr��i�;���E�X����N?�I��I���,����0�0�[E%��#�5b�j���'����k!�'h�V��>�U�#X5�������_0��B�\*�0������1B���qk�,x�����B@#aT�/���H2�Z�.�~���,�y��,���������_�~1��!2�)��{ ��x��A�Z-D������s�-�@U����t���'���(Z�����7O.�-�����U�C���SKH���6���#���&WP���}����>F��Ql�o�U��
���d)W�^�Vuj'���q'��=y���B�e�?����=��A�����r@�q��x�g]��W����2�0�{�#�%�W��D��S�j�����L�jJ����a
�
4��(��++#6�f�r�~.�\lk;�Q!{���W�+��N��xA��zeT^���O������]u�X����q���"ZdQ�L��~1���2�6�Uw%�QMv�8��r��h��"1[���Pg�^A+��I�lI��������*>0f�����:/O�y.0��>m�M��p������zft*����/�����	�fLt��-����d<n[UC������\CLl�NG���g2:{�\�B�x���P�:
���n��I9�=}�	p�����Ay��a���q|����j����`����cz�;6�Y�	I,�c�W���)-oJD�)H�#�"b�Ttv�'���9��[�"�6	����vLn0����<����`2r\���9���>z?������>���`� ~V" �Rb����w�m"�] �'�Y�0�o�\V�\h�
��p�f����NB�@}1
�	C�v��J@�
:��������8h����L��L���L�2^�S���eg�S��dA��s5�
E�:�V����g�I��}p�vi�?2�2����c��������P�R}`��R�)2����Z�n�J�)3�����*���Q�ZePc,'����2c�yb(L�R�'�L�gP���&PbZ��A�}��y,+�[�na��}i�1ld ��"8���c����>QY�{J�������!�L���9(������*���
c�x8C�����3W7��PE��j��U������$]��[�,�����m��"tqSq�������*t�	l�P����V*�0}�)�`K{>��9���6������aS��!j��_����PWOz,�d0J��R����'����e�
@,M�Vh��]'��B$�K�op�fID�t�����ozW
��IL?�2����)+C��)q��~���Z��m������s��R�6?��>X�;��WF%K����� �P?�@M��PaZ1���c�TmF&F���J2�p���C�6~����K>������W�sn����r�Wj�}M
��o�����>��������_���Oo�������?�1-I,�����4�&��$+�*���y��@q����~(]�g��[*MOm�9
N4o9�*k��%��f{BA4g$k�����$N���_���v,�}�o"��������6+�z0j��p�����S��c���� �����>>_��R����'��1*h�-���H������/F������u}����++X�i0��Z09I��ZY�d�B�'#�����{%q�^��Tw���`~�B���kyp��`�Z(�|��4��vzHVb>5,�>0r��\A#X�Z���(h��x_(����;~��i���a�X�x���9*�%b����U\
1����EI F�,�N�_�`
W�0�DM��WF��H��{����������2��F��-s�>���iF&�f�l"��*���q��%T~��o`wm�~��K]�
��v��y��+XsMf8p~=����V��������yW}�@:L��0�w!jE��BD��|[�|v���a�|<Q�/(�v4��q2X�+�����*u����������o�h���2-554�"	x�jS�;:�q�������
�h���-�?�-�g���]�2#_yaMZ����+#���@��<U�kLKZpp�5-h��`!�l�@�2S���B�;&���1q�zP>}B�
e�zpak|q�I*��E�0*�3��8<R��aq�h�� 3U�8�q\.�

���������%��H)r"V9=���,�CS�7"��T��
|<��6�f%X�0��l�M����\��nj���OV� ��y�����%����@J�
�B��C*����]	�hf�]���B�MP�+�93����|��X>�t�M�%t �f�74U`�<��U`!�
8t�D������H�]{WFS��=�����$��;�9���1��k��Q�I
���{����kOf�cS�� 3���\I�UB �eQ���a6J��'3����_e4g����1�/�_e,�k�������P�!jL�1PY(�B�g	;P$���*I�W�v�*�������L��E�L�Z/��M�I��HYZ��S����97Te����]����&T8�����h��NW�*V���f��^��!*}c������@-�/G���#�����?W1�)c��#/���X����.��F�0�t������PK���6e����BN�8��c���F3���
��,K���Xc��t����<��5!���e|��&&���M����B�c�~��/��i�_�P�f
�����2�b��}$��b�x/�[<I+�v���fi���r
Zq�_��!arw������_0tBm�`�	D�b�0�A-
s`���YU��pjVt
��8�������@��-�O`�S�5.�~1=#R������K��BF^�k�44��Z%"�����h�]���(��/z��9�T��9X
w.I:/���1p��fD���q#�D>�w%,y���},�_oN�F�[�
/���w;��u|�6��Y-Q0������q�����8���1�.X���}eiL�O���tR��@������Vd�
_S},��s��>��Xjhs]O��dr���;�	F~�=���;�������A�.��CM��fB��"7���>BX��p�j|~,U�'a�{�c	��n�2���[�Yt��l����=���-�(�1����������F��?��K%4��L���+t�kL���I7Y��^}���6���i�*�D�[�l�~)+Q_����Ig��������K,*(g����DI
3h���d����QQ��v�2ZFFp����	��	�$O���\�f����Qh��+:���<��2���{����VZ%b��|S�e��R��og�����,1*+�n�d�$[��$[���o+�c+U�F�;�9�2�~���2�_V��d,&������
�x'��N�
�G�s��F���;dW���������&���������B	��vK`�0*�7���)l�p�3?���D�%�C�?��9�=���;�������9a��ld-�ebs��0di(s0������H���MDh����8k�J�J�NU�H���M� go��r��l|�r��:l��d��)~R�����g�<�/����B�4�$y!����e|�F���9����i��p|Fe#}Y�t��l:����_���:�+�����~Qk���d�JC
1���_sa4_#'��V��LK�\�4�I'4���[�4%n��h�2�Z���n��Q�����e;���0�~*���:���
�-��G��\�r��-�h`m��CS�H�d���xO��5�D�������t������#�W�o$��
�������M2Mpa�8�M3m�q�&3b�n[�MS-c��?�l'����@o&
	�+�9��Cs8���~1c��7�	�Qo�hc�:r��_����R����+,-D�
!����"�I3��VF���CN(�n$�/������y�l�%��Q|��:-����Z��}��9��l�����'li��8{��[0��F
������d Pf�	�[&�A��jav<�W�S�2|0��B8��8�K�2�BN%���bzi��i�]�Y�D�����*�L��1���)J��g%2Du�1����\�����:?���&&��0
��m��^����I��nF|HK�~}oe�4�0��X����B���	Ly1"�3����B���0��Tf0md��G�f��w140�;�[�L�H���!3��u����tK�e���,.�(v��J����[����������w�MQ&����!\��M�<������_s��_+c���f���nS���������d������������F0Jcx���=
�9#���(������&���bA�7���9,�C!���(�[^4|"�{N��=���n����j�L3(/{A`E�9���sse�8���;�:�c���R�(N��*|���FVF���f��/2#�d^�#$e������>����"�{�n�7��mWF���r���A������6,��A3W���1OB~��;�JM�6K���(O��i���;h�r!kr|g������-/��|��?9Q	��@����u �\7�D��{��F Z`���R���*��po�_�T2������T,wee��9���M<�^D������k��c;,���"C�v�L�-�k�E��o\�=��g�]����0
�,��7����Q�T��Zh���"�Q�z���Z�R�N���^��u`��m������c�kT��.������3�>�I�i-+������bk.�~�����{�k������
������D����0DH��ti����#���h[H�rL���&3���-�mP|�m��Q��s}Q6������+��������HGl��-��	���$1��b>	�9�`i��� �
	�\W�BDp�S�"=E�
�O��[�W*�z�U�l{I�UN��~{�0�wf)��%�D���D�P���Y���s;�[��$�di�s��r�eJ��J*oE8�8Y�������V���~g&'����X~�)��o��L�j���'��<-�
�0W7��`�����\���px��98f������r7���������M�/QI8w��7j����6����{j/��\��o���Dx�C���}��(A>6:u�F;�r�]EG���:��0��������C�;���.����@b��&;��f];���+�����q���K���=���*��������'�B�n�H�H��vXn���/�}o�df���P �������d<�z?��^�7��h��[��"������0���Q��
��.�����4���Y�ZT����7
�=��ea�z���>{\�,�ae����=�����=*���$B���M�5���0���`��a�r%�3�mi���p����oX���aj���f��Hn�������|�~����i;m�qL�Dt�q����������v����o��c^>{�|�z������d(L�����:.+���,��e�7�.+L���\��zy����t�|������Y.�^���}��K���[�5��|�r0]~�r�9����`�<���\>K���G�T@�|�IN�BN�AW��w�q�t���*<�~u����@�������U�8��(]-e�K�g)�\J���H�	��~���^�����r�%]W���g�~���R|�t������iN���Hz�t��z�b��E��{����E�&1��bL�������������\�@�j���Hq�������������}s��j�]�E����+v\w�^Ty\w�^t�_�^�y\w�^�y\w�^�y\w�^�y\?��������F���z���
_tz\�����C���]������B���X���~C������L���J_�)x�&������?��{W�dN���	^��1���%x��������?��;�W�`F����^�����!x�&��������0�l�����0 �jR�a@��4��aW���_Mo~5)�0 �j)�\�<K��R�b1$"���\��r��a\OC2 �z���K������K�=��c����kF��!*����z��&��`Ir����uI�
X�������rF���Z��7%4m������=$3�e������n��N<
7�$bg�����\�C_�0��1q�H����71z_C���-�S��V���#GpT��F����3"��w�)���)U�����[����6u&=�I���di�������m���Q,U&�"-�8;�-����Z���@"c��������K��B��-D�����R.�w%�������N�e}�2����m�T��w$A�9%��G���z�"yet����3*��V�8���8A����e��}eT��B�/�lV|g�������	B�x���?������b�2c���$�A/z�7n8X�y������>�+!2'K2�Ou�}HE����J��=����d��jgr!�t���@-MG�\�����-���8�%U��X���H�*{��j������(g�_�'�apW?�d4o����0D]���Mh��J�F����wJ�/ct�8��2��[�u�k0��n�R
����U�ZI.p=�&��MD�*�����~MEk�
�TZ�;~����A�t	L}����b;Q�Q 6�U�e	�z�����4�<R*kG���b6cH�$��D�e��k���B���1T���i�b?��"86�
��u�J�Rj�h�>n6=����b��=B���vU[�+>�$�.��qU�����2���s��h��n����)x��(��]-��b[/��`�O� ��������nU0;��o��Y�%BU�	�i0����0�C�������:���0�HXoQ:��pe`�e�u-!�����v�
?�nv���X3[������2�_^�a8u�)�����C��/�������G"Z( �_"3_'���lE�f�zq�e�F<�(A���$y?( L�A�~1�����/h�hp���!&7�x���`���=l�����q����/KWN�9E�84�IY�x�gel�5��f"L���j;]�L;���'"���N��_�o����]������/lI}��4��2�b�����2��m����6��08�	��������|�5�2��	kuvF1xW
�9��a|�\����������,��D��_�)�v6[5E�v����M�%����j	�X�V��~�D!��~��1O���{2��	|!E�����^�B����y"M�tm�']���c������V���h�*m�����YeT	��q�Q�����]01�'�!����#M~�!����dO�}�>�}���Z���2��avflT�r�����T��O�'�q��(���(���Y����������_�F+N#�_�s*�����N ��H�/�,Xwx�O6�iNi�=����� �qB�QJ��l���]���E�_�[�n��0-}���Q���[hW&�������$^��-.:c���� 8�L|�M����f���� l�)
��[a��n��7&0'��R�P�P%uC��1��'�5�[�@t7�����w��B�|@����W����M���n���]�S�'���z�0-����������L��N$�:�VK(HF�9v�|��<Gw���	{O?���"
o��q��6|WI�C����wh���0neF�v�{O��<���O��������,\b�h��#��-1g��R�>{�P��,�5(��\��������=8���u��1��LT�k���4�3��>|���YMc�<w��J��7��1��"f_	��:<�a�Ls*�b�8���/���>�s�!e�C2+c]/A�=��!/{L�/�(#����i�a�}7�@����5d%��`��z��0�:����`n���Sz]{WF����?������7���E��k�2����`�����
|�V��0�
?_�BE����3���`%���
0H)�y�g!\���iw�����q�C����p��z0�`%��u=6�g=Kv�*Je���0��C��rF�~(��)[����^&`T���'�������+�
���a��E}.W��|�����8j�����	C0�x^>#�o�����S��C�5�k�f`s]
� �=��Y"m����*�A�Z-���1�A���}"�
��������d�Sq����#D�\&�|��3>�~���dOr�2xd��Q������%?�qa�t��ND�h!������L}F�������7��.��Isa���`_��F�qY����_�����^y`���@�T\9�4cn��DS�6����US����0����G�Xl^'o��j�0�����}=��g�"��s#�?��;~���@��%&�`=V��4�h���@�G���
���v>���|*W�o�S_��L�"��|�Y	)������!Cv
�LsJ�~����~|!�������qB�cCt����v[B��A�|��yR@��U"��@�� _���!�����4n������/D��� ~��Qm�����&���Rhr.�B�+���
!�n��>b�VF�P�=��������T�>,,W�Tm��o:���#�u��G���HWs ��^���&I�.L`�`d�O*X���3����d����+#Xm��Q�'c��
^��a�u�dhv��������-�2S��ROD�	�dW�
A�����w!�,�9t�d����+���yR��O[�}��	���{�����]D��#g���h:xN�O�����+������*X���s�9�o�������vL�B�rF0��` }����ih��:8 ��BT<��'Tp!P��c�x��t�2������W�+��l��a�\B	/��������
\����!��.Xed��~'B�����g*������Ut�����p"2���)��L�����1��MK�bT�����GF�_9
��i��4%��������5��?�~`��0�o>���lR��u�C������ �LG�4+�wL-���&�5/M��>�f��%MV�E�L�_���������L0T�2��Y��0��VfJ��A%1*���Ls*�r�����$3Q��I[��V�VF0�K`��EH"���G���4Ja��WF>���A�/B�V�&?>3s�W!A������8�F�-F�md|z'�L�C3*�#e3w��D��;;����_gZ�b�m�����UTf����	�$3���������G�6�v
8�3��3���Y	B-���z�E
�
���\2�)�1K��
��4Vp`AZW'����d{��Z����&��0Gn��n�X)�c����a�N�
�%<�����t:D�C����0-I�Y�'![��Q���{�i0%��Bv>��L�~����D��L�������u��I��ce�:s�w������B�;��V��,��/jjd7v�'��^���q�T�
�X��g;�f�K��#;��Sk��AG�������4A�l��h���i~����1��Q�t�7G��������r��C��J�XA?_��5X��@R�����p�d�S���j8�L�L��$���!�	�g����b�;
J����WIXb�3�V,�6�j7w�����z�[����)n��l&m���S���3��h�uc��P�cv�&=�g%��BDj1�_b�� onQ
�a&
0����&Y������n�/�`
X�b������4�3V{�m~%��onD�����L�������+�er��� e����Z��^_m#��m���Z��pMM��9�k
D��_YK<e���b����{2$��,���l�H��{��bD���\S��llxh'<S#f6�v�����J�h��a��y�P�{�l����q\[�& z�g"�]���dBl"�v1��DKM���"	�������� ��)3!��MU�����S&S����}Q�G|_T?�"��
�J�R���4}��zx�,�S`�SB����4�T%�=��T�J8���'F����pPU_�gr7Y���ja�G����a�q�[�SL�h�)���{_�hD.tt�:��9�VF���G�JN���(cB�C��%��"����M��0�~3'_�]��|�w1s~c������1�
���!v�^�M����������j�;O ��$���Q	�M:��s��K�s�j�Zu+���I�@�����u���T�h�-d���
�e��/�C��p��.2��gf��(�N��s�0k��R���5BU��9�|+�/��E�������~#��rp>a����}���1L&2a��[N��p_L�/JCY��JT���ha��"����F�
��n%��V��JB����A�N�(~��=��-�k[�h����!������,�	%t1���F�X����Ln���x��(%�"�I�2|�+�������&��|�=������r���n��/
Up���/W[�}sx�a���
�Ba�{��C�2>=���B�����
4�S}+'D�U�m���V���7���3�^�<R�yc��w�nB5d��Cs��Km��X�1?����=3�2-�a�0@��<{%�-6���8�S����K����iV���g��~a�����c���86����}=^���Dd_���0�Q|�-e v�W���sKt�D<v�Z��/:d������������[�$��"d:��WR>���>x��w�o���2����}������zb�1S,l��u��<�V�d����3���S�X���f�"Ai�����L`~�	�������{@�VJKs��'��x�-"_������6��j��4Z�������e�M����������T3]�mP��MP�wy�����Ix�C���`< ��S��S1H@p��>���Jnl�q�9�aN��"D���/*�f�T��N+s��p�wM����6��Rl��H���
!�WF1Grit��t�la��A�0��[j�/�����\����P
���*��8�|�*�1����g����4`*�O�8T�N���_@�Rw�Rb�� VC�i����2&���~|!���L���T��G�(V[�D�.�9F��7�i��_�
Rl��4\���S�)L�l���T8-J�`���'�^y?��D�\:S�9�2X�G��RJ�U���+�M$R��c�6�U:078�e|�������Trz�{e�������L���f��JQ����&q���U��?r0�}�� �j�&��WJ�_>Y7�im�-+��o�}��8�XoAt��9�Uo��>-%b���q�����?�
�9z&�c*U���`������A�z����6G�O�P�s��h��������Wm��D�LV��A�+7�����*��14RG�1�QlG9��k�7+��;�3����7��B��<v>�&+�pV������8F���/*�TJ�B��[(��	�P�(��x�)�ixW3{��������y����i>���R��*&|������0�������B��f�:��B<�K+��L.�\a�����M�=�Z�L)��Nd�A�]hp��|QJp8vB�#.�Ae�+=|$���K�A�NXzh;F����/
Up��MT�Zm���T�v���<S
��_l/;N���� B7f�����G������:O���iu���cTs.$T+c�_��E�E���g8�(Jt��P��<D6�(G���)�&��)�'���/�����`�����FhX3�*�-r"���������Yr?�����M5et����lc���2�E�MoJ�,8��n�`�i����A
����i����i��"�"q���L}��u�<�O���Ic���(j�EK�E����������:��_����q���/���2&���Y�/����(N���T�k��=�/6o��P�;������_dhO����
������($�t�(���oc�h,���.1����OP�yL;��r,��]o���
Bg���hw�?"�tR�:�����MYS5�G�WSf�����Jd�5�����S��^ej��o
}�����X{8��.<R�lPFW�&Q��^������b ����	�`�
���j1}�+
#�R�:��0I�<���q����r�/N	5B�N��������F�/<�]y!|��������p &*N��V/T��P���w�b����	<i�NWwJ�_�y����:�P
��g���j��{ec���.� ��������L
�.s|�	4�P������Am�gLW���%CD�x-�i�J�FLo�,z Z��t��10$�si�U��QO��qx���oJ	X[���{�zz�KU��O�!t!��3�J��lr�1��z�)��AK z�a�B�����L�1����Rh�x�'sC�sh� �z�h����|�k�2�����*�7t:�..T��e�����4S���Dj��7��6��v����B����p��������"�2c�}���C��~���1�����Pa&�k�z�&-�M*������Afj�c'#-�L�
+�&�^=^�^2�1}F9D�m{(�B�X-?:�:>	��b`W���7�[��F�q�!eu��l�P�2�z
�*�t9�T'�g�:�������1�oQ��	����0�5F%9!~eF�a�_�T!�p+e�&S(��D���_%������-�/����O��J@�{(�c��21���p��[�iNu�`����NT�����l�u�(�W�Qz��o���O�������#k��r����NJ4c\��{9�T���7��h��&b]�3�
��B���9m]����7Id���>���u��7 TM��T!\e��U��
�������;�����js�Nh�_`� �D��/*j�����fm����\y�i��<��X~�^����j�S��q��1 M�1��cAH�L���'=V�g����X�3Y��1g3�l� ��*c3���#��f�R��6|�ta����bS�h����0���*��ns1)L���v���s�m�}�1� �Db����HL6u
�]q�����
y|�T��y,���C5����>� �}�a[�������R�����
.I����� �1Y�v�~�P1`���l����r��
��+MT���r���C�c>�����*�+M�H����M�\��h��.�/�&�PV����B���9}Pb��!Q���K��}'�m���x�7��bk���@�E��<y09�s�KG��{��2�P��/�ps��s����7s��C����	�1���x�2HAXq���3>!����S�HC����7�|��3?�������9�dh��7�_��/���~*!}�Omf��K�a�?S�.M�����?��#���
��1/���ji��nnX����\�/	���b���u�0��>S�H�^������7�AC?�d�G�4��d���e������7����p��.�JP
I�h�mU���_n�@���n�o*'r���_t/V�b,��+((x,�W���m�_�nWa�A4�%��~w����pj��{��pCoWJ]Lq�8�_�E2y�-%W�_w��%e���K�B��3k���1d�������������h���0�������*,T��$�p��B%�T�s�{�m�
hjbP���6��
5�>xmE��b�bh����������:�os ��u���Ac�l�;!2��V������=�[!�M�~qY^w�6Y�}��$������O*�Ob�}�pJdu:`�&uZ������K��T>�HO�1�9�0��d�G���J����"�3I�V*�J+e��:��U�����#���RJ`�r�:4{r���P��=q�jv���3e��n�t��F��.Q�a�t�n��&](%.�T�����I��K�t0����QL�T���T��8��\�VF�yuS��M8z���RB�Br����}s�pM�\R�I�)�4l�1��I�t�PgR�^}���~q �}�����|��F�}�*���oa���}M�o��t�n���wt-S�c�5e��
��u�N��jt��4��$�I3(�|@�le8fP��?�R>�*�dx���I�Q6	R�����KF����B��Mt��'��������i�@�D��O!4��B�,J1�u�D"����YT!�=�Ls�VJ��b|�����?f�/�i��{%z�����1{jF�����K���)D���g[�4(��J��	A��C�dA�,�c.��!���1��:vQ%�Du�eR�m��[lb����V��y��43w>YR�U��PV+������l����Z�����xh�y�Q&�r"���u:+~v
|r���b�U� z��p��6{kP�#�j�@��*��2�M3�S2	��TS���sf��T����P4M
c�v}+t�T	�(�l��t��q����:���T�������~?d������I�����4��F-k��M���3���;g��Rn���Tex��1n�
��4Q����]������*%a�^�%)_���[��[��mw�B��*%q�IR��1��H5���P_Qah,=U�����mZ\(7Q�pn5���~���Qn�
�S4>��^��s�&0kT�s�`�<UQ7����:b��3Nu����>����>�^F��2�T��������[)�L�01�h����g�����UC"���!�'���������l���_������(�6���x��,L���0�I�����|�����G� �C�d$
���AJ�X�0���<z8�*��m�B���IK�M�{~
�Ta+f��c����#��V&��L{���k ��44C�L�i�	I[�����/c����3�b���~a�����r�r�%��@u����$+�j�
���>����x�����.:�~�iN�-��S�i#n���P��|�2-��1��L��y�5�7���r��.#��eA~VJ��.�
�
��XH���b����/.�L���7c�<SJ�gK����O��~S���O���.w�:�����7�����fy�Bh��=N�����t�]�$��!�j�B�l���J~�a����f����.��9S�����������x,�ex�7������||wl����A��2����v�J�&��i��*���?��p��P#`�T�94c��k6��i����>c����5���w75t1Y�o���H�x�)gX[�
����yJ{(a��aC�?����Mj�[�*n�s�f�J��-��p5���Ju[SH��V�[aL�����`����*��Y�~q��h���J�L>k��<���R��t�s�vl����8���1�����&m-��i��)����6q����)[����%w���4c�qj���E���`��#b�,�M����LJ�K �������gm�E�����b�35?�|
�M������89;67*�k�������Z����3���@/]���R��Y�#�(��w/H�|���)f�,�\}�&��e�`��YV�s>s|�����w����f����~�2>m�/�t�&iH�������f(��w�$�e�f�^"W���h
��p]B���
�����u�|]���
��Kb�u�|]���
5���c=�]J��,<�z�q����Qr^e�y����Vl\�R�*��K��*�g���R~��_��q�(��iz
�-�Gl�M�����&�5J�<3P\�sF"���D�3���d!����_��������������������"�o��?���	[�������?��oM��{>����nJ���f)�3���������������}t����_�]�
W�<��|"���(	FV����?6aq�+V��	�z�fbxc�t#���������|�s[r�JT�O�b�pj�	1@��L�%�e��p���/��o=���L������>#~p�p7k���la���Z?���y0�h�����I�l�-9�3S�$?�R���	�H�@C"�C��4��I��F��6F��g%�	zdH��������V���[q����D�2���J��[Lv+#X���������~V"AIJp�eTL��LsJ�)���G>����D����T�yx/$�Q����\<-��1��#�1q�UN#����`��k"!%B���ME���,�<�����jERxJ+�B\��&��}�h�[���c����2S�g���H_��o����@}�a�	O�40?+����
�	��"C��b�LZ_+������/�@T�����d�2���Kc�D�j��D�����v�H�,?�������U���0�)!4��
��^�5��4�eo,�F�����l��-�*P�h�$"��Q�h������x�9����?9�t���E��7��	,F��c�����Z��"1����]$����)?d���-g����"1�{��[0�����
74�
J4g�����d���8��~1S�IM�U���qaz������,z�T�'�f���LsJ�A����sT��;O[m�� e���w,����8���q���
��`� 3�I�>�-�E"������4mZ��	���|v3�F��I�9/��]��Iw�`�b9���2�3nY�/����?J{ ��r�f���z%~���x��2���s���.�6��&�]���32Fv�����0���������q,��
�YBK�[��R��W��02u���QO0�9����D���0R6-���m��!�lV��2��.s�
!�3S�����q��B�C�����J�B��{�]Yv�k����7��3�<����D:4
T�/��\ ��OE�'������S9���p8|H^Q�o�e��
��Y� ��?�x(ND�^����>�NW�
U7����7�?X+����X�����b�2���pe!�m�������"�>�g��M�H��9�2�w!Yjxw�(���L�J��z�'�{xN/��(NIdb�m%I�M��TB��L������1G9*�z��@�=�m���[��ao��q�NPN�.��y���=�d2y�a������F�5�ks7�Gd���k?��#�����e��E�|h��Q�:��
��px�JD����thz>�`T������|�G8��"z�����KDb}��iz��jt'���]�KNe]8�<�e���\��o�YW��&��Gz����3�\�]@H= V���2*Hs$�lT��u�FF�v
0�~�	�C��D�
�y�P���5h_|�>_�)���==|����4x���jQUcg��$k��L���@�	��,*����>/�Y>4��,��<��/ I���'��i54q��W������*�O��%��l!����L��m����1W������~���HS�%m�
'���V������g���X{c���B���qE_}�PVG���,W�r�!z�����D�4?�����S=���"&N��M<x��Y��T��y4bf{!�9�|f[�Apfb4��(N�h@�����L���{��������O�Ef2�D�����$2���.z��LMz����s~6:��{��%HGz���2(;�r�.D�����l�������L��[�Vf f��5��2�VLt/Ds�����m����o`�z�lH����Mi80�@�0a�i��.���
B����
lM�D����n������,e��m��8e����3�N*i�5��'���.�y�JD�t=�s�����'5s�P�?��Y4�f�,e=�z|n�f����s�����
���ad�{���F3�|�fb:������+�L����[������s}3����OA9U"?��@7jSYf*W���3����F'���� ~��{�DhS����)�����$�sxH�c��A��+J�}����8��h"Z�>�����>>���+������j��3Ygt��G���V"	���8|��|�.�Mi����[���U��0�j{J��m���g���=���+��{V������iY������J��>�����Z�ys��.�@������~3h�������-@��BT����W�����5u��Q�������[�
�D�g�R%��]�8�d.Ww���-��
��5��.�FNwz�}C��zl��c�{Of)Hc�-(x��-��� ��w���������!NdF�;�������d����ONm|��\�5�:��M�ilL�SAS�s�^W�Ds���[m#�m6~�FZBT?�P����a(������hzs9�g+37�N�����d�`���F�]�T'�f�v!/����7��4O����Tk-?zr���D��6Q����Yc����g�����S�g�P#���5u.V-DG�X�y��>-�,Dj��5&m>��B�9�g����{l�ps���O/����.+3��Kl���U{�5�|��R�t��/B����w���x!p,"
�g%'����D�.[;�����gj�����D�YZ���L�S1��X�-����Jr�&����{��^W�$K	�Tr�om"�6��z����?4 ��_���f���.F�F'mSI��=LX�X����>��'�K'���7��M}+]���zx���9�O��.��s-���PIh6����MoB\������S�?+1��UR{Js�VW�J^�Qn
���Y�y���%��8��
���Zx��%�e��,��1�;���4!������zXMQ�|?�V�=��;�����	�����7Fy.��L$�Y@H��zn��.�JB��Lv���+8[A$�EO�]Y��ol�j
�'8�:�s?�`x�w>�����B��l���������XWR������gq��p�4@��v�YC����2��l�{��3����;�/Lsm����5N�J�����6�B�Y�H*u�������J&���e����:NOX�[��N��2��W������KGI_�v��p�/2�����V/�uj��Os� �m�����=-b-�A�7��'IWl$�B�5Qy_`�d\u[��;���>�m�9�P|����
�;�
�n#X?�^�i�����<���MRs�8�yfe�z��mXU����Gu�O�<�����s���
�j�;G�ZMM-�e~b��/�I�"&YI�-o2#�s���<m�,��f��QXls��WCd����A�+}�t�b��F������:��%��d?�e����0n�D��������Z2=�E`>������b�[�����Yj!�-�1���i[9&�S�S���.�����fS��x�s�mWK�_��C;��]M�:�^� ������_�o{��G�9P&�R%]nZ�����z�#��s4����h��]�sZWa��4G4F�{�I>\~� ��'��;��9�2�h<�h(C�Vn��
��f�?/"ZG!�DGpyo�1��W�L��
x�3h�5�����&;C�&��3����]��F���P}J�Px�j��j���`s�����u[d����^�������l�����q����sZ�s��+�)H��{R#�i+R�A���,�wh��,�����Qy�W��i2��Z��t�t!<���T���������������t�z4������re
�D�0���i>�!�s��M���*}����j������i� �h�|�{�w�}Z���sa���28���;?U~)�w�gZ�~��.���D���"h��Q�����w��.����}�~�;G}<)oE
�mZu���>E�#_�~�<�
��1Y)X�_��F�dB��L^������Q+�-����4��O�hb��� 'XZ��@eo�5��c]��w�/��hK��g���g����I�R�d�B�N%�wr@g��"Y��m�z�g%9=��sOy���=�� I��u������G��HT��n|
�xi%Z����q���1T/���������[�3�������93W�	��3,
Qs�%I��p|%I_������������dOQ����K�������^?z�����u��R������������)8�(��N6�����������;� �����D��������b,��Zk��ON��3M����0��z�(��g��[�<�W���C��jW��a_���vO���~�h���	��I���t7�4P"'�5�����<�)�|����D%*5QPH��~��/H@�7�iZB-1���p����M����>���L[���H�iY.�/��[������<+R&7{*� ^Q�,
��H�4��������i<�i�_�����p���J�������J�v�b�<~X�
V�z��&�rYe�%��&S���H�C�y�)R3���v�,Y-��TEf���nI�kn���'�M�	j����� �}�r�PbL����B{c�6j�'�&-�nnL�45���}��&��
�e��38�����V�3Z��f1d�]Hz��*�������t�T����7�����%�
�������-
����������ME���������+i���h/�[����>S� o���-�� d4�����
��M��L�
��L�H��o�1$-V�~��-=n"uq�p���|��f���"(��?��$K��e����7�jM_d���'U'e���6,14#7�o��tVe�@�~�1
G���Y+�������6���
�K.vw�f�=�6�ya8����'��t�Y��C�+�V1P��h����U���6�&[���y�B���r��v�����D_��O�ev��d������.�nN������I����/$�����N`��c.e!��{����\'\I�����u{�?	��&�R��GD,�I����z��}��z���X������������?FZ���kx��f��:��F�l��ok%�����%�y��������5dwb�����_&�f/?R�T��,Z���m�&i����Z����v�?@�v�	����>-5�J�G��)��S��V��u��W�?/6#���ZG
�@M����JD��=����������9��PC���]��n{Zy
����K��� r�)�V������i���g�e�R����msy��6����>rv�������[����c8�2E�>/z� �68��?
���	I��b�����"��&9.����Qf�L��f�s��JR��F����f	x�m��R�Z��(E%Qy�N����$�Q�������"��C������{��&�U]�V{�8�5��`�S�W�W79}�i5�8G��1�\�c���)y�f��@��#��}z��c��t���D��R"��L��I�'\�~���k<��@��S%������'4����c�mjA�2���;n�LZA+����_�Yd)�Y�m� �k����4G�l}>L�	c����e�x�I�s�)c��P�H���aL�>`�1��r��O�������PV�D{�s���>���N�O$�E�	���n�[)@$H�F����g2B�%"���x?$�4������1N&Ew�
����#p_^*��b����� :AFzl���F�l����|\i@�H����X��>����=om(���f�������Op	?u�L��T�s8.�cK7n��u����:�yX����FfU�����7f�>������u��0�F�0���������X`�Q���#N��|O�=��]|����$����w"�d�0zCjV]��B%���&/�Y��v�����`�;���oH@����G8�Fo�� ��x�#���?D��0����wx"����V[	�3I�y�.��ep����d}j�MA�+�T���<iK�*
�@hLY�m�N�^l�X�Jx���~���5��Ek��
��=.�y�����:1�l+���"�{�S����'�}V�Z&~\������b�z�~"���g�$ko���e�p�z�cwZ��D��aOG��M5psnx9�;����,Ar��}���LR=��X�Z���VR����#��**�����h�&|j��/,����^�??�9AJ����pL�W�fD�z��W�oy�@��)!p��b�b��&�h]�&1p��[N�~��1sXI+@�N������n�t������VS���vr����l
���r��Y��>/�kb�,���d��D�}�E��jY>�j$���-@���asG�qG�'�^u#)VvG���/������6���q+^,�k�����=���C�����H���
v�K�$k�K����L5oB�/����4�6��J��r����]��$�8�];$/��������aK��<9[�+��!��]��W��rM��0�5��wqr�����E4�9���Yh������iSM52���������;VVrO.��*�|���$�Q�Cd�}�*�B��N/��B�^��w�~zc����u#�$��WPoMn�E����Vr�������%�OT�]��\���'�wh1=�[���PG�QAq�T��2x��g!�R%�a�����o��b����^����~���&�!4g���f�?��mm����elx������y�5�a-$k]���7%5�����0[����{��-b$:z�]!B�xF��]�"�x��F�����D�E:���B=��B��	p�=��X�������+����z ���O�����f3��H�
�:!R�Ny�V�"N�pv"dS��VOj�$7
s,�i�q�`������3���_M�k�>b��D^$����-������@��������z�����G���7�����A���>+}}�1k!h��f���o�(@��A������a�����������#zgy7v�}3�B����O&����X�?���q���(_b��,����
n����d��c�}2���HJ�O�&ME��Hn�vhh��6��m�75����p>+BK/�_����+9�LX�M�U�_6���w��U�c95N�w!Y������0���7��8���@�_�{�HKu��Tw��\H~��������3;O�����^#���c�wi�	�,�������=����f2)��y������c��K}�06��#-x���0��h�p��*i��=�
I�p����'�
��~�}�/n�"����>}|�}g7��j��{0��]Q�a�i�B�-��c"q����3x�L���MG_��~���,u�d��r�A0�Cj)����O��Ad�@"M_���fGX�:��, M���&O�,	���J}s f_�p�xv����z�|7�B�5�4��l�2�
!���gT�����(�iv
{���Jt�d�T4��[R�����i�=^d���mZ(��a�&ef:��sB�&}n��iB�}��g��e;�+o�]�������<m�^��[y�y+�����V�?���������������� ���o?����RlZB�cw�l��|���*���1�����K^0��!��}���e���st���`�^$4����}m�C��9�2����s2s�z����h�|��Ly�-��!-��5��@� e�,���'�d|r?"�6KG��ef%�hP�CoX,
mK�+	�mD���NjdII����y��n�������T��W�4���g"qO�\*�J�gRhF�q����������������o���LY�h�Y����
3(KrM�D*����]��XM�[X��z>�z�l���-sk&�p��|*yR������=h��w���=����j0��_Kc
���8�����zW����v
�
4��[}���`�O�`�Ebj��ia���������i����D�<��L�2�6���AIEX�����	��ppJ5O��\,�_M��J����*	mn�]���v�p{����j2UY�^"��������^%��VZ�;�c��[����?�$\�x���[�h�$����������x���Ou���0�?�^vx�X:bjd���p�W�H��y<��]��������������Po�./����F���������C�:��>+�A��pp������^��$8��%�W����������<�	�F�K����^���������BD����=)3}����p�[�l����*A��V��j���D��N�Kphv������p��L��J�`n6dx���Sx�J����~�z�j��e1r�	M'x�  �@�~#T16wq�7%���6S���H�.d�� ����'M����cX�� �p�8k+;�JD��B?��+	m������	/L~�+<�����������H���	��V rK���R�#I���7�b��!������Z��.D�<��_}]%�S�P�!�r���dbN`R�s��Oe_X��1��O,c��(9CL��3<�7�/L���'<5�	?�������'���B�bx�>�u���BD�&�d�1�����8f��C�~'7�������?K$�5��w7xtY�����>x�j�p����ub��C����'m�f�89�H�Rk�c<1�iQL`zL�_`^r�c���J\��	��oH��5gh���6�;�I}>�>����2S���'��g=.Dn��x�H���k�@��aQ��f��"����#yfj��JD[��F&}X�
*ZE�o��<�{!R�y1���������FV��8���y�lL;�O�W��H�L�i�x�IG��JB[�x�@��,��{��s6��W�������fx�m���$��T��`m�/@NY9�J�v�,`��Pg��
�����I�@ ��U������~�����a��o���t�h����Z
9��;-���R����M'��xL�T�OK�\��6����\|x��+����_u����T�'C��C���������?kn�-Bm���z�����<��7���dKJ���CC���ed�D��bl��8��8�����/F�'��D>3�`h8�
L�-\*o��p�������`d��z*����6���AU�]�Do�\�(��?_Q�� �@I+��[�D�AD���*?�Gp�#��q�fJ������u��@�NO���+�	3�CBw���Z)r������VJ���fl-�l%voV���f[\�����l��@�
i>��%�(3��:�B�����{�T M�h+�n������V"�i�g�k��(��S��������/G����.��O��@2��wRB�JF�TL��(�K��g(�.$K����N�{��J��W�[�[���D��q���A��Y/����jO�#���b������9E���7G��-D����i*�%?+R=���"9t�5_gQk�F]��W��l���d�pg���G�?E�&��.@�@2������?LwRA�H�H�k'���B�	������'�[QM��d���N��_d��0]noK����K+?��8Sm,D-�D�#�i7=��dy�4u
"{��:|�>�G�pli=����2�x(��.9V���������x%��"9�r'~���E*O�i�sD���a���+���Q'Z��\E�I�>���j�KK?���Ykz���:I�uox����P�dg#5���1b��)@
��3�����'������P&�[d��)v����������6p��P�?���*�`����gw���x��e�6�P��4���G��Lz�����@�N�6dDS_c^O��K^K�6L�2�8{KnW�����$��Z�)!m%"1�yM�xg��
4[�dg�#��8��0g�Oj �H<C���|�����3w
A_D�/�3��K8��2��p&����K@SQ��Zha)o+A1��i�6,�q�1���x�������h��~��JP�	d�V����Y�f��x�R���#|x[��q��{��*@��f�L�<�]&����R����{X�� Hs7�����B3����{	��gt����d;*k%�O���\P��Ms�E}�0��{��{Y�\�IP��x�8��T���4>�'��hO�h�;���+�E��	.V�[2����v�H����Z�u?��Z�j���m�!�Iw����p�}3�89u���B���!�Z*���n����}qY�|�kd��i�a-���Y_y��!�r��%VP�C�5�4�6�S����K��:���	����+}�{X��t�����W���+�%k�b6{i��^����E3��g!?�l:j\�Q��0d�	C9b���2����#y���;��������c��y���������L4�43���N+�]WD�4G'�y�!G��Y�������X��Y>����~<|��S����\�e������hv���
��<�lA���d����+��>�
���Y���N�'x��E��z�a�X���t�h�����N�ke��R�^$kdb�Y��ZE0��F����nn�P�����t��{�L?\�=8f�H�N�`J����S�d������-�k�<����i6�-Dk*�fL��__�=��a�������Pk}��.������M��N]��N]��m��!�q���J�m�$K<��b���h�q��|��-��5m}7���{���v�BE�����,5\"{1�S&�?�D��Dn�>S�1�</�Y��!���������oY����M<d��~/�hp�uD�;��-_��nB�=`����8�V}t(��.Y��Z�H�w��4~�X�D_������H�_Sb��6��j��i�u4�L�Tg��$��H4�J&�����S��M-�h��}��D�8����*@�����W�e=s��������5[�
��;gE>D_���_@u�1��ET�='������1c`���302^�c�08N���B�cx���x�;Q���O�H�#���T��Z�~I�����+�����R8�u��W<��P����������'��f���-�%��!��o��U
�]<�����v��%��*4��0��F�b ������h%�[�>����d�e�z~;��}�:�dN����p��zb����gu�p��;�����e����%��2M�����
\/�L�|��Y�n���I�IB���0S��3�����������6�������?/�k�H��9��B�g�K�R�m���c
n%If������/�H[r'���y���{'�[�_H������A�w=VV�6r����[�/2$����n�\c����(l�mZ�,��,��b�����9\��
j ��;�iDn��DT��s$�@�#!u����U�����?����x���<�7p{�H�c+�7h���
����$�WNN���2{\v��������(��\�t�%��}^D��sAp��l
��
%���u:K������%��H�m5��N����|^dG�L������%�<�hAj����?�A��4�����938}5�w%Ba���K�]?�W2*}��-@7,k1�m=�a%E�w�����\���M5o�uI1�y��9G[&wlO;�I�S<G��-�������'q;�c����,��>/���`$]�-�����^�7���I�f!���E��#+"'�29"�����Ue0�f�{Y�V	�������j��������Z�������VY=YiE
�2��m�D��3}	��a�J�����<?lA��8�	8��y!����o+�u����^d�[\��\�H��%3
����*@��h�K;��G������n+����nv������c�������R�]m�C�}��6m�).k����w��A{7P�I�W��k����S%��vFH�=����i��������Z�)8}���_�yon���L�^��M��'��������L`��f�e�#�J�0oM�\�,���x�zZC4����d�j�	��{2�����[�����D
Q��Z��y�7���a�s���O�6
����n&G���6UJ�������q;!Q��+�)�x�����	}&��l��l@+Q��Dns'w�^5T���\�a���P=���F���Q<�d�L�����B����uy�h u�Cs�Jhg�+u����e��n�J�x�����
�+��z�U�e�n?l�Xv��e��,.��0����e�Y����k��/�����*���V����D������V�����	T����9�<���@>���@��&o;:+��u�{K����F��1��s�����������F8w����9��j����_����,,?������Sv���06�9����kI�%�S����B)lo���~<��c���������Q>�F�x��c���l�H�L�.������y����~,�x��U���S>O�������^j
2}��Z��Rks�O�����U��W�0���,���#�%T|8rMB��*�aS5�U�n��U��zO����p�Qv|
�>�����*���u�Xe�X�0��U��k������/E��,�L�Ra���Z���������������*��QK>���Z������)����3gi�Y���7���b��v��z-�u/N2��~*>����=�R���^j2}\
x_,�W#����jk����-�]!����B��G�|����B����_!�������sw�W�����+d���2���
�?wW~�����y_?�K��3/�;>�j��;�\�O��_���W��p����������5\z�������L�X,���bo5b8k����Z����j�p,vV��c��,���X�X,��
�b_5R8������V����j�p,vU���ZU	�jS%F8�E����T"��ZS	�jK)"����3u��g��zp`��h b�4���G���?M^:��x_J�K��R�DT���\M���R���9��)����D)�X�<J��Rf?�v`S��/�!�
�����{g(�k_}p���	rj���b�����:M���������t������'�����_������(e>��7��	�Ln�������	�fs�!�4}yR������
�Gf8�P����al�%-U������OM�������+i�9�j�27�-�_m\X��w����d��ta6E�,4'�[U^��D�����v����T�Z$�����R�,����K�!���5�!���	9QG)?+��;SMnG����62����L�:o$��
nHv4�Z���]}=����n�.l�
2t�[+K�Y'��8	��O-�n|�IW"v5!��p�ec������e�J��N�*e�Y�i���p���Xdi���bu���`�c�s���Eg���otK���������R;��$���m�����%Y���sMw��:<�T��L���U���%�DK5�I�����Ld��?���f$X*83�)���DN6��V��*_=�k�L_gu��������Ci�Fcr)��D��>-�����'e�.�p�h,Q��������������Uu����s2��f�����Y��]��54n�X��#�E���7��!�-�����3�Z���EbOP-k��:ht�����RV�N��>�8�?���KO��9�*+N��{�����H���	�H�$��sY
P�hLnT�n���i^H�����|��j��U����P\�=H
5G���a�>i��p���
��/�����e��,pH��2��9V&B��w�n8�X�x�1�pv|����rG�L-[�$�d��t��t��-Q�sO����~%��&�7�s�P�����6��":�1O~�����I���~V��N77�^���_W\/=�v��@�Y�OKZ���N:�,V�(6�{i"���*_�������Z�9�O�����n��_�>E���di�DW�P�:6V	r�|V ����a������9� -�c��f�h�Wb����Zpm+	
�R�wEw�I��m�F3�+]^d���������/l���H�T�������W��Z����=�a1��z��0�������[�,��J���Fu�'����T�d��dt>=�O��H��o��`�
Z��s��~�n5^��jh]��8���C~�-���o}l����E�dD�1�<�B�g�~
�tg��n5)+�����.u:@����D�@dZ�Q�I����S(�@�l�(�h��� �(�~I��&S�������?b�O��:��1�M@[���r���"#�g�����
�-��B�+���"��=P6=�`�/�`4i/��������8�*��?�~-�v=dA���PGH��4��E�-I0q<.?�F8�t=�p��L���z���t�:�o4t�AO��LZH�����P~sa�.A��AJ�Q���"�����]���
8�%���F�1fI^�?|�vb�o��������x����S�������W|���z$��n�S��<-p�d������C���������S�~��T\m���,/�����f�m���b�Z������,�,qCl�s�8��M<��En�t��R����`,����'&?+`��f�����O��I0��QOlC[9\}L7���TViwO7���`��]>\t
�$91+%o��|��11P�cpt����^6>�@�����K=���U�}
�����3*�U�|��x���SL��1#����1���siC/G=���g��M8��d��T`!����_�[@��u���6w^�=�~��x���g�?g@�kTi��zhFA��c�?0%/�X�O�Y4B������bE��V*�
����
�*���R�I�i��u&=���	-����|*�)?^��V����^������'�q<����Gtyv�f�A�?���Pfz�K�jk��R������|lRY�V���Zt�	n��Q=���D��$�$�>}�u|�B,'�b��6T���n)����(�W`�.�z����e��O�f��t�����u�R�q`8+���&U�|��=,t�(%d������������	�D�7�'���~bC�$a���Rf���4�7s/��e���K|������K���Q|��I����o���p�Xg�ng������7�?$[�k"�M��pw�n��d�c���E�k����4\.GG+8p��3UWrL.+��3�T#����Q�CS����u����6IM4Vp��L	����R�JN�z���-*d�:��+@Bc�O�QvC��i�Z$���8�W�d�y���<k�r �j}oH���������Ub�w!��YSJ���Wb�����i!�u�,>�ys�u���e�p����1Pi�[d������WpL�9������m:R^��i�U��J8b���,Ist��a�tO�3J���6�(z�������`�r���r��a���
M��'���E���$����3!@A���/}(����WA���K{��a�&_]����v�!~���Z�zsIX����j���^������Nw�V�nuO��e�{���������J_�����P���������V����p����p�2�31w�B�ba�
=���z$�[�j�=�)�{�x�jBNw���S-�%\�~]���?+�R/�
*�������_�\�7�����Y�����e���D�;�!0��BI�8-����o�D���St�B�/��Y�*�.��+����"/�
S�=���_H�e~[��7��B��gx��w}����7"�Jd�{Z����2_��BR�n�b{���E=`�c~|E
h����O�Tt�I�?��I�YK�����I��Hiq�+_Q��
{h���{u�������N��[���!�s.@���7+5��{0���[%X���*!��'��������_�H�m_�{�2�F�j�hK����^�nD��<C>�����n-zy x���}����P_'��TR�z����m6���w��<��>o$��gy^���>, ��WHo �������}��
b�hkz2G�������j	�n�����5����]�+�m�T���#�z�*���XE��o���<����U���7��s<�".�������u/@��&���7x��"�IA�tz���H�7K��a��;�<���\���FP���p��M	��<< ���k:�/R��fs���>�\�1�k���p�I%Z��;c����}^*��3}r����+���2%W��;{6��+P�7����V��4f��(�:�W�`b~�������}^�}����f������2Rgg��������i�[������U`�����J ����5� �m�x!��w
Xt��1"�������~�c���)���d?���w%�
t<���t7��\��}D��y���?/�����3T��4`�r�8q�c�{~��������G�{a;��7���{e��#����F��"	�~�h��4�����r���	�YO�[mE���0g� �G|��Z�r����<�j!�ca���=�p �;���&s�q����N���f��eW$��{����	�DI|�"���&/]"&Y��i�#�0?Jd������@D�&���	������
���	���+�xee��������<g������+��[�c��b�R^����q�������N��he!Z87.��V�nx����<}���&O�������(��IV
���-H����<�����vI��m���s�nE��i1�f���������M�}51y�"�|����w�b
kE	pO��G����H�6r:�droEM�����_a3��������:'>(�w�����O.�Rd:�����$�X
�9�
DF��?��,f�boE�t�����+R#�g���~�H��:8�d^6i�3x+����������^|�M�-DJ�����8�;���H[���q^Gioa
�Q��
��j��:V�|�O�U ���v�(����,��Fks��I��l���[����X��0����4����������<�����b`��� �/���kZtp�,��	�Um���W�`J�3/��K�X��.��k�X�D��cK�{l��-�c�%��r!�"���4���B�����Y����JiN����y�<��X|�B��^s\�	f�J��/�b/�����n1���5g�-Zy!���U#i��%^��������$�]�b#��BDc&�k�o���6�&��2�,�niAh���s%Z�#�8�o����<(Q�<��yf� }*�c��-�������Di6\�a����Rf�_H�G0: d2��d�J�����U�L8I�/������N&�\|�#�f�_H�����k}*��:_q�m<
�a!/��9l��ql��PP�.��(�G33�������,`x[��e�S���\,��JD_�<C��l����d���k�<���B�Z��l1�-��W6	�Bp$
�#C���p������W��=�lBV��+Ge{�Z�e��e
*�����xl�x��HD����u�����X��Yp����XC�l��`e�K�YC�����F>>��q���
x6��k��~h`��"-�o4�t�>�Ba�6�q�@�	_�Z���h�������f`e�L�����n�����z&h�a�=���l��d,� ����VC8�M����\��5��,'�?/$�K3�6�]$���{|��L|�����h�ZV�x���������H����k�	������6v�k��(;�30�vdg���gv���vh��(��sF^$i��`u���~�%d}���������~�/�u;;��J���l��~
&��f���(����|��@�W$ ���r��?�[Q��V$�7E�>�k����fO./������l%�������g�#?/����`,poV��<��T_y����T�>����f��v��aHc'!������
*A�t�`�}���.#�m�B5�i�v�^�$���-��T��������:��Pm��k���w�c,]4��v<�����ZC!M�-��;�&S��$k}Rc��*���(�jHq�"�/�����\)�x!ul!���+�Q����������6l�M�������u��H����f�_4_���7Rw���g@�#�s��n����agEy�����b���.��������v�`��B_@|&����l�P�#�c�0l�f��%�Q���;�����M�����=�"���ct|1���,D�g/YHW���=��_�:p]�__�y?'yx���W�^(7N�T[jo&��2j5�q3Tt�����Z�"�J�x�0�Mp>^E��g�	L���BV����3�b	h��H��B	�,�1m�����������
��IMsv5�����yX�=n<;[V������b&����U���BBb�Gm��8?��Dz������W�V4���y���XJZ��WHU?���$
#�����^#�5�v~)��T�<��_�1�0�%�������H-�@��w���K\�V���k9Qk�&N{1�Su���yA�x�}���_b���J�H�xG��vp�C����q;��-��%���~�F#�:����t�s���+J���������DW&!�	#������p���������V���I��}�8|V����(y\�����FM��WL�$=�BD��?5Gd����?��������;�d'SO-�����7�G�c�������mk'�NT���9��+���k4����s���B��?\8�S���yy2�H�7����!r���/y����)>pwV������/�iO�X���iE�������PO�clvN?��"><~l��c6Q	u�{�����O�]&�;d�7�E����b()�
��5����cE
��	&6�:����N����u\y�U��7��j�G��Qf��4��R�J
��+�v�*�{������n��p^�M���Z���.�����,_�a�p�?/����
����q�|HT�U�4��T���2�����y�p
�u��<�����p�w8��	��5�>O4*����A��L?o�k���L�d��	���BwX��c�0d�����VA�	� .��t�>��y1��(���'��������WG�)��>'N��%�O}�e��V��8��N�G'���?	����/�`'��EX2m��9�i#�i������&vq|^L�w_�:����3)�d�l���a.��h�������g�r�]<��0:yxI3�����h��x�i������@$�Z)��Z��}%���N�����D�����UprhE�7�o7���v%��5�1�0!�|����0���P�����o���`�P:����;�����'��rmL(=o"b0&�SN=(R���
�y�"�h���?<C���gq�y�����5!8�w�l��_�X���X+Z���w��Nt�K@<��v#��Y��;���W�u���,�@���h\y����G���
��j��4VL���W�*�?q8���B�4�:x=���%��x0�.�oK�U����[�72
B���Lb���p�*e��� -�_tt�w�A[�]�%�'V���4n� ��=��<|!�O+��
'3�v�(X|���V��W��]h����X�YB�����H��?������U��@V�'��91��m�4'������#�	h����5�,�%=��vH��P�N�X:#s����������|�[�M$bu��\I�$\Q�2��@���������s�;�����zs�nCRo��+y������Jt�gc����� B���c��-x�xAj��S��1Cx�tZ��]X%@�Dx�>��k#+��4pzz�����>&c6��.���^�h�q��K>������Fw����5��!�uG�E�UIT�,l~��Bb��uNm� ���(�C
�.l;�}���v�W���a���>VH����os�{�;j��$��@l�cb�4��O[�N������mmoE1~�p,y�.7��b��mtx��4��(������m������!�N���x&6zP�s��A[�]�A8�}^�cA��Y����r�]���_��Z,�
^f
z=���O���Pts�u�v*f��:
������:�����������i���5�
���-d����E���6f�e���@=����C����E�"1
��>����S��~�.�\3:����7�S���dpOy�����c��Al�T�m�����yi�����Q�7�<������L4��XY�Q$}�����6$���6N'0�
�e�j�o�Do�������g��9#��f�i���m�t.a����p[����T?+��`��G{s`V�����p�
l��J�����>��9���F	L���>,�^,�1C�@A�_�_��m��:<�1['����,��~���Y^x�N~`��j�u �b��b����f�!.%/w7����f����i��3{��2��,5i�jW��-C�4CjZ�Ma=������K("�c��� ������{�$���l�F��	]�668���5�6xm�G�/.(�fX�n���2��:�oN �����E�a�l�wB��
Z�/H�v���Zx�Y����e{�������@���v��%`��'��0��Nf�
wZ�h�C���}iR��l�;RM���G��Y�f���Tv���J"��e��2��/YQp���c���|�9|b����.h����e�|��� 2:{��\+6e���9��.�':jt�j+
m���X�<��`CsxR�=���e�
�'�%TZ������y��l���i����{�	@�JxR�=�D�������V�I_���G��rG��+��0���&���/]��������P�I�/#�+�~��J+����_
���9��e���>��������Y�n�&3��j�1��R�J�,����;�{`S�=��S�����������3K��%�A��+�l�9ZW3y���El�$��G4�������7k��+�L*��$�F mV-e}�i�����H�L'�?`��>����1X���$�ed���hG�g5�<.
c�����&b�P*�x�X��td�q�LX�(����D��>�4$,�2l��
V�YX^�h�17��M��������]�������F���d��/���vY��|z�B����aXa�=6-�
���j\����E,9}<"I��P dm��`�����Y���""MjO���)��H����"�+�y��t<4Ja-wa�
�.���.`B)�s$����[�+h��p����cZ���5H�-�6��Q4V�$fc*���|qh���cY�������H��W	�E-�u��F
�un�`����QT�(��fH����T"Q������Z�������U��E��\4g �|}e�QP�~�y���v�������T'�9�*�X�y(��}%�E��Si�,�}1"�+,a�����.��\�A�n��
?�d���nS���1���k����LY����<��|j�%��n��u������N9�t������x�7625���*��ol\�`��;���7f+��#��w^5�k�#��,�K��/xl��-V
��\��/���������x<76ty���vdM�]I� �6��X���*�-#�$k,��k����s����\���|����=~+h���X7�����Y*	}z�%�r�r��<$���8�aR��3���!$��}���\��3����b��O{�Y�Q$2���<]	c�V@g���k������c�C�TBEE�� ������u�]v�"��<L}�mH�z�wON, Q���,HNiT��+e7�o����+�����DiO{k�N���tOK�h^�,���/�4|�6�x�]�����f�$n[�.���|gO%�@�����p�1��Y�ji���MR��e���������v�1?�*��`|l�Q��G�t�Cr1�������gyj������\��_��X��<��U�r��S����x�4�����]Hh��9����>�aVAv���{63�Jl�C�tx��P��|��_Of��t9A�t�-��
��g�>n�;M�����G:V9���}`��mB[�:�����CO��
|�c�}�>�i|�����iR�]I<���6����(���I��|?cX�Q����0gl?>����p|�R��
�b3��mD����X���sC�
h$���AQ&��� �=G4�������+�RN�Y��(�9b�i�[}���q�li����vyV�c��������������o�p����"�tA����}��n���Zn~�5�d�y����T���1��Gz ?�{�\e�|��
�9d�\R��U����<>�J�J���T�|z����QK~�\�c�r3������>F-�1S��QJ|�T�c����Ax������O5��J��^i����i���(�.u����R*��d|^31���{M4a�?Y�����h��������g������hL��\��O�F���������������\&�|?>��u�"�����6���O�O������_?����:���o����*�O�.)m�]9������	��]M�����V"oxL.�;x&���|�b��::LW���<<��~H@���AP:����X#n��������-�����a|-�[F�o���������Q���<^����3��A��mX�@>m��s�������Zw*�l�D
�h����*��|��c�����+@��c�l��[<��B�_D_�����K���S����{�o@��$�Uff��w������~���-�+�9u���K�K��Kd����n�J[���x��@���r��+��C���j=eW��9�ts�(����������������cAp��?�a�q&+���lF�/
����(�����/2o�xM=���J��p�~W���� }Y��������#�����������PKw�3�@���
w��k�P�[�����1q��d��D4*���b���,D-X�KN���!��2�/��\�ir1�	��M%�����7�&���C�C%p�U���#�.��B���
Dz7�����J�hq�~U����g2IUp�u�L�� �F�I�|^�c�}�����j�R��w�����X7�'']7_	}.��^h������^���+�U����O��7����UrX��M-H�F-}���NZP��Uw�����}�h�W�`K&���6?o��!�/�E��|^L�/_M���.s^��Z������&�{Z�}������o�����-�Kh�o?�Q[����!���v����Z�0����z�]X8���'yK��%V�2�-������-�B;g{��n��F#c��3~��t�^�_z����'�V�;X��|����L����f	0�����Mo��jmSo��Q�aEzR�(���j�j�H5�������B/���}��%��h����7;�7��mG�����(5���Z8>56t�dH���j�H���������z]�WX�~W�������������)����wm���HS��-���&��[��$������ ZP�^������j�����f����x"W�KD���\�9x!�ib�������m����BFs�HLc.���H�V����1�is)�G�
����^LZ����}NM����� v?���
��e;�p�Q������Nw8�Z)�H�N'�u{���4%�1�BD��������1y�Bp�|�Wn�p37{SfA��Y5����������<�btj�oK�����	�p
���w�|	Mlx�
t�}���g�xdA
�U��[�������%����k6@A������'�Z'��x��_MNBEt�"'}������3��_�3~	���{2������)6�;���a�/}��r=[L��y���JB�]?�9��$��X n��6��P?!5�8*��_����H$�'%�=���(�B�J����&%�=���O����n'O�_�H�!lu�W����������Q���m
����"�c��,�����mEY�@����� ������kZ���3={���qf��sE���J�;�'��	���;���%�mtE	��=<&����i�����)o���)?�cn��+>��W$��HS��C�<=�S���9����V�B6�gZ]���m������g:/<��
k�O��E���������L'��$��U���m����$x�����ikQ}{���bl������=i:������y�i��"���!���S�-Xx�h11�rD��L(���0�����YHC�yse������*Q�c���O��)J��kb)aEhfwK���,���!����I��������}�h�v�Km3GH��bB�������*:=����C��ZO���O���X�)��R!(�Q����;@3�JD{�p�_���m�liAby�������HK&��,UE�d��v����t �M�R+�s�8���%U����,���jI���yd�_�
�v�}������iy'W�����P�k�'���liA��v�>Ka�� �(~i	4m�_�	�0f��X�����0gR�X��������s��7==P�q��|��6J��@-�6��b��
��D_��hP����,e
���x����j�"ZN�f��^�&�.K����;�
<������[IY��k�aO;�:�9����^PC��-G�3��3I|Bl�9��>��v�"t�K"����C��BD�gY�����[f������Sw����Y�fu�4u��7��n������nv!b��-�Q����k�Z�������2?���_�U����[�R���+�N�X��b�T������nG]����d�%\��.^SpoW���3M��M�@�?�����uh���Y;�"��3*]�����g2��B����d��k�\�#�����p@g����:N�'�RD������t����1���J�y���yY�1}Bk��-\tGXe fdP	 ����o_)0�RI����OX����t�a�L����H������a�3�dF7N�����v�sVi��wOpH;y:y�ig�2���������l��93M���U�O��A��c�[w���������=�fS��C&k����f�@�O\�j�Y�����N@'
��{t��9+/���
f����D5�y�A����O��D��m*����J�*������X-�m���o�\|�e%�m9M��]�|i���h�9�|��ZQ��n���\����JD���6��� ��=�#	��6�D-}�c�o^H�a��n��G7���6*��t]�m�:P��Y���|s����_(��h`�L���^h���zn�"�>�O{3X����%�Q�(��a#i���)��R`s;���a�?&X*J�s���y���X�@[�������
�n|.U�C8=���bp��
���6*I���I�k���;.�W�r��-k���$�
u}6<�"Is$�SE8�o�D.-@$�s��!>�@g�Y	�l��7��o�����3m_���<����pV��r�R�=��ogUr��E�=����O��%��kOE��dO�P�6S%4������z�f����h6d+���_�8�b%j;*Ar�%�����ZK([(�X�&���_�.�Y��;���Z��o�����������=��������}0�n+Rm?��4|B�I���E{���&I_H�m/���o3V0�t�-%�`4�������u��|�����Cx������I`�_���
s����<��ba$�^D�O�>
����6��'+���h~/{�����f�_���X�.�k�+J��~M��i��q�+���v�w�dC�^H�Gl�1������_H��7��=��
��\��<��M8�Cc%�����G<��N�J���_��O+ZB(*�bJ��,�s�B�N�|���e"O���d�M������
a�K���+/�fD^H������D������������=]/$��M�j������1�[#WL\MZ`FM���J��Oq��	�H�n�eO7���>���ko�w�ls�����#aH��X���z03�n5����K������Qs���\���Dc���h$$��>p=�z���^����������>��0�Kf3S�p`�wq�>j��yq��������
����t	��!J�^�_��������������fA��V$ o��~OnV:��BlT$��W�����`Jl�Y<c��1�Z�B
l�R&��@_�z���e�H�����:
��{O{Du����U���^v�~�C ��������[�`��_�*�<��1$��M��J�X���~�f������N��x�>.~/GY�����d���,�q��+R`u�}�	4�5�QB���G�_QL{���.K�Uz�^a��������B�v�����'�)����;��W�d��Jy.w��M{��K����&{w8�g�[,��X��UZX�']4�����
�������Y��)|�T���H�c���Y��������IJC����m*)��8������
@�z��
��5B��#�;�����#����1�<ba��ui��)�;l>�pH�)�o��;�����y��z�+���@���L:��E��d�+	�9�n��ue�7���XgweZ@Fl`%I�T1�Z�R���D�l2	U���4�:J����58I�F���k������}E�3��������u����bNs���N6n"`\���*$j )u]I�l"c�����?/���������6[d�4���e-�.ZQf<��i&Z��:���?�4��b�����o[�����oo7������|H~_$4rb��Z�%t��s�3��h�"��L�����S7����]�7�7?��Y3�}`R����o�n�F�����cYH��[�ZZ�����U�����IH_����+y"�\�.P��{���2���L�R��5{&��
�����������K)�6#��7FP�������]v-�u����b�@����47`���$�����cu�8������E��4z��ZuQQE]��D��Y�����(�����O��%����|Y�������83]ew��u��@�N��C���!!�E���
o�|��nz��l��z�QT��.Suf����+J������ov�B�	�T8#J������O�|,��<���D�g���U�*~yV�E���L�^6�k�������dO��dYu�Df1�@�N@��_d��-�/���L@������I�'|�����_�3��[��N&����F���;��"������5*�0����3�.���
g�f��VOF�^���������"������?�},D������8~��e��r�� !\��enU!��1+�j���A�a���%����
�6���H��������!�5���G�s���
�!�����2V��m����gR�4�r��W�� Xeb�Y���:XB�i��L�Fs�6���,r�����Q�G��8��
,R�d����Y5�xx�Vs7p��Yw*��&�\-w�J��������&�y��i��
�dr���E�|kBC�����;- �5L��������C�3[�d�??+�-}���'l��t>���������A+&��W"~5��to����q1;���[���dP\�*�X���
[����!v��^�Y��3�W�Zh��{_�n=6}g��8�<����,��1�#duT��Z*����Y���1}���$o�����6��f
!DqTz�Z
Ek��L��2�����b5�t��,����Y������V�FM1$+�I.I�6
���4�:I�!n�2yc����tx_����%Uo���,l��������6�.0���]*�j����O� �_�`0�n	�����x+
8q��g��l��|J���;�_A��8�c^u��4n�"��"�+d{xt�B���xw�y��H#^TPs7�BY@��,v�����?�h��S��1��,sO]@n����7���`���NvL9^���W��i=����_@cJ��>l����"Y�NK"�z�
h���:��}�e������\�$S�Z37�o��&�YBGlO��W�{���pX��Q��f��br��:��M�'`�/��,��V_��[C����i�^�F��<���R;�sf�5D�u��e���mU�N3R����B�}�_�N`==��4�������c/"�Z�h��PU*j&��fs�}<f|�����P��1�Y�X�D���-S�~*�J�R�v+,dXW@�(���x��@������Jz��9HE��v�wN��B�}���R�����8{;DxO+����b�Vu"��,2w!������d2�[2�u�rU���b���zW��Z����k�������@Kf��Nt��E�����B<M�t����r�3|�<�Z��B��I_C��f�B�u�|��P6��/-N��'�HbW/
ihEl|�LDD��8������C���|try�������#�������k01�&\!]0����Ru������n1�����8�o���d��S�|�"U9�a�f�t��YH4�&�Tm�<����j���o�1��ZdZ�S]�S&Y�Uy�����U9�m^���:w���~u|�L~,�1M���*��mNK�mU��S���|��[�r���[����I�O�$se�t"Y�@�U~�����a�Hw�R��l��e���Vo�\g`ST�tEps�u%��PDO�V��AF���o�k�������)����h�-Z���-�����K'�����:{���,[
R��qv��$��Jstb�eWb�Y�,O��|��0D���	|%&����,j�mIT%��-SYO�2�tA�N/��~����9���{�,�
��O��Ea�?!
��z�aDlGz������b*�d7�h�i���Bv����H�P���'y?�8;�(�`g���m!TkV;Q�U1�Y*G�O�������>+p��1c<����,��� E�g'�����-���(3^��p��V�����u�n
h�_��~e,�6���|��}
�*y�������'7�����=$����U�-��_�g�)/�{��m�XpEe4V���2�?��j�_k�\iD�^�&v���s���5r���>mG��P6��5��T^@��tq4��6�`&?�$�T�XM�$r��HU6��������L����3��3T��w���0s�Y�}g��h��Q��gEI�a���@��
�z��mz�q�����t��O�qEN���#��3�}��X�3Q
J$�:�-��[��+��?�`��Xp#�Q�m.KT�(��Yud�fCTh:kf0B���a�X���]e�����*��`��P3��&��Ze�ID
�A	���L�:qv�����|^����� ��HbV*�c����{6X����m�����d���u�������!�(��89;��@.(�@�U���o�]�8u��>i���a���~��
\�����v�;�:O����h��a�B3�J+�h\`Tv��/`������q�������;��w~fYr�'���k��mf�w�Y�Ew�m���3��;�y��Md�1Z�;��Y�����$�\�,��v������7P�C��n�l����Tv�<����_��,�r�a��w��������H�/���W���\����El0��$j���v���81kn��4��]h�I
���#^@*h�c!}LZ@e�v�����������8�rb}�$�(��{.0�=�}��>�I�%���/�WN���	p�$�C������Z�����q�����@J��h�m���oa3�7Lj�mlf��4�}���[�J��G����S�I>�������X�����(���??�-��"F��v�8�N����Zg�Z?�����n#�r���RmCb b1
H�"_\��E^f�x�,i���ACl��\����b
�m��z0��e_j�X�'�;�����b��� <c��<w�L|!;�n�/����o�-x��������{�z���<���QP�Y)�9IT�����9)�?5��y�6T::���<�GWHx����9C��w��{M����'
������������_~�.���Z����sVf7e*��B�$�<�m�q���:�q�q|�e?)=z>zX�UO}�W���
���EB��1������H$)���k���d>�K�"���x��
h'�a`����R��.��	(rL3�@QY���j�n�!AE��X���u{��]����Ig��\��Q����n}�	���5il�2�-�������������_�k%1 �~�
�H���7O�2��>����h��}��i`��"������`�W"�����_p�����n�j�R�>��#��Jiw��Dd�e�h���#���~i&"k������������B#��,������l+,f��M�^���6z!�PZ	���n�-��74���}�'c��1�y��Q.
$�-����^R��
�����K�����* GD�-D�ftTN�B�� %c��f�����IK��i�c��<�lg�"���=�dJ�@���U���f#8M7w�\t^���L��2�`����W���Q�b{��3���v��a.�D��d�~�D�t�#�4Hf+8��x�X4�^�60����ao,�K6���
8k���&p�YA�9��	�(����:���]yV"%"�a��(�=i�>������-�LTs�����v��HHe����d7��X������M@3^������Vb����{�{2n(�l�f"�Cg ��l�f�
yg������xf����[?l}���L����S7����o&��4YC�A�j�����	�I�f��V��\7�Mc�a�dm�}d3�M���"a��3�L�0Y����75+V�TZ��3����fL���X�Q�3XP.�6dT;8�����\��<�����Y>aV�6s�h��6���ovp"%}l�YO��p�%l�H�p!"�i�)l[��+�EB(����(�=��N�u�pRm�)\�|���-u�dg�r
K�:�f	g@1,a��7�.D��)���l	g�uj�QC�$38��a�P	�6���~�z�
l��*XV"��7�
6�KVp!�)7�+5�mc{��f��,��r�!��Z��??p�	��N#� %�Z�h�9�Gd���X��O;lI�
��
���&F����,������(<N,1 ��\�'��Q|VP�3����q��	hvKhcU�
O	<�f�����mn+�L���$Y��TX���"#od��=��&YF`�a�����9J�������g*�������7���]�3O�k��a�$^��(Fxy���@�#)�cO=�v{�������������e&�����~���>run���~�8�m�-�T&L|Y��}@���4�hg�����f�l�#:b�]�#�BGN
!�#�S�7���2SO@k�	C�Ji���a�c���Q�q���w���ep�/�=�W����
�I�9%��]��EP&���w1�H�8��R��6N������p�6���	lug��Lt��_I[���f���8�olL8X�8X:mv�@w&E�8�����`�Qm���bP�wO�u�l�j�XN�B���W/ ���$s�S�������[C�<a���v�B�l4�'�gw���a"�U��`�|�_"�������c7����,���6:�H��M�M~VR~l���	t�l���]J��Y7���N�f��::��mm��C�.����J"��'�m�xZ;h�:��w5��;��/�K�&A�3�4&�Gg7��?��S�j�'���_$������4��v�C����+�7K����	�t>�b��\�<+J�	&�iB+.�%B�&�o|�������wm+N|
����Zqb8�>�c(�+�iE����*>�������,�g`	rqH_}��R3�f@�*���k�"���M������!�,:�X�%5�G�J�Y��^#����[��	h�5��)����{B���;0�#}Mdx��Z���<L�6N'���������������|���^��������<No�dkw�[-=�D���~o�T�����f�m�V�H4i����G�Ba��W/�Vn%��?u���{�Bt��c�~�V�����?���Z�L��	�����g����k�����{�m������Wh�i!(08��T�j�@&��
xKU��;��#1��E��[FoH`��B
6��_����l-]o�^���7^�=b�]Bm=��G[��:��>�!�]�{4L�����W�/�����$�� �dP|O��	V)�~��0��9+98��}�u�Yx�Z�����|�A1��_���O[���g����W��H�m��9���L�B��<�/I��b=�LTT��hkU7�C&�W�]�[]~G{��hZ��V�h5N��>+J�t�/��P�sm�������E���j�pLu� -������m�""��nY��}2F�l
g�E��z.[o��\��I!*�c��������>&f9�r�Nu����'�\��#�ZE��N�"Ku����-Nx>;�9QM?�w	S���fP�`�����t�Wr������o��j�n��a$~��>�*b?�,�~��������]����O�C�Appq�����&q����^���|��l�d����!�j�8K�c[��=���=+]���3�b��81����������M��H�N`����33&l��h�m/�sj���s�����H��fi"e�=���Sc����������f!�h��`U
�i-&�E��[f��%���V��t�H���c�l	����`U
��(��B�����E��V��gm���p�i�E��
��
�%��>�W��b&�Z�.80L&�b�;P��uN�1�	`!>�f�0Tr��G��
DlgV���df�z�&��G����!����c����-e���@������t���K7��"RC���UE~��ji"�-BaYfZ>���t��yKv����6��^Em�yj�������D
G�!_�����6�����G8��"rm�|l�f$��$f��m�C{��N�{�3)
���	�OF�>:��{�$�� �@y�d�W/`=�	�$[k�#�L4K�DN�0�K��=`���������=�D��3	����N=��,��f$R��L=�� ���m�����z�3��|0�=`�>���>t�O��������1�;�N��V���t�{n��1���K���x����u���k���QC�_��m>�-�����?�������<I�UL��1���KF�t\�|���x���zO�U���6��r�����/�����������oS�A��c�����~�������� ��u:Z��W.VH�����5+,�P���a��>�;�t�����h��*���0�tX;�����a�������u~��<����0�t��J
b:<?��<�}�����p?��*���������������xq��$T�1[��������=��{���d� &]m��@JG�\������O��O�
1�5�.�|��v/��f}X������y=�|��=�|�����q��=�|�-|1�C������q��=�|�-|1w�C�������c>~�������O&=�os����.��n��K����.,|��~�.G�\�a��M���R�L��s�������*����
;�7���������zv�o^���Wa���U���yv�o^���Wa���U���x8�7��G��U��_�
��W���*xt�*�R��WNmq�~4��p)�hj�����������v8�	?�lz�~tz��<s���.O����%�����$?:=��<sv�����s?��N�|/���gn�3�2������X��.�n��:7dT7q��_pq_�@t_�,�zcM��$Rp[D��.z���~^��D 78�=o$@�z�=FN�67�(��Q �Lvn��Bz!�����+w:p��Vr�&M!"�,.���g9�>��,)]�����e��^,��e���D��;2�iD�*���RE�u����������p.J��	���s�@�eE*k��(Qn�}�}�}
�\t?\��N��|>��J��a�������,��V�"{�������Y�#e:E���xp��]�y�T�		�&�����ufK�l��]��r�9�z�����L'�c!6� V3��j�������L�\!b[����#*�.��(��(3��y���tQf�5�Q^�\�Y�A�N^�#�J����f?(�BB�i:Vfx�m0��B0;�Fw�<1��d�F���7,e7^'�a���� ��,h��[�N��'|��������-h�9Q�����hD��l���</�M	T��YwZww��^j��J��iy�dH{�"hM��6���3�u����hq�Y������)���:qg�W���QX�����������_l5�nwxc�w&Y����z�o7
�S��]�NO��D{�����.�V��b77�\�Z��OVg�W %P>EUH���No��h=DF��Q5����d����b��6=�;F�H�#m�Q��84n������R����;gd��zR�Ms?��G�"���]F5��C_�&$�lwmw*�
��F���8������+Q;y�E�>Y���h�ucV�gq'8�y3Rk�{�G�]��X6��5#�0#��.��L�J������'81]}!%���g�6<���������V�L*'a%�����%>%*���m���&]���Ly���\//��L���+�������nC�y�.w�V�Q�k��I�c�Tkp���L]&��2����#P	�N����$��'4��&	����X�"#5��`��y��{H��1�'7�~�.�+#et1!�J�1����{l�[�6����0 ��l����U�	�z,v��h����6�{��imE����s)�����R�e��������|���yp[��;���z�r���;a^��
@c#�[c6o�&�<������=7�1���H�l��B����g+�9I	���� �]����+Q'{:1>���n0����P��@�����i�u�2w@����U�G�\G#�M_d�#�p��C�@H����m'�'��Uu?����`1�_yRf���L�\1�w�M�)G�� �jC�~�l�v�n��7��G*=$Q�a-����"��R.���%��$�X+��5f��&����)��]�����0?��S���� v��;/��(Vm��|���=�r��J.��-�*����	��ID�mL���i�S�I�#���>&�/��}��$}�:5w�[M�w���L�������mt:d�5�)������8�� +�OG�Q�s������e>�;Y�;w�Z}L�}�v|��D��XT�*T�Y��
Q���>?^�H�H��S�N����,2�������Z����?�;�g�i>\|����~`2�|!�|�XPA�y��d}�gwZtjW�<�?�j�1|�-�G�R��D�.V"��VX)�6B&<6t�):w������)�].a�N����D?�N�m!	�g6R�"�������9Z���d����L��0�'[���lr�)kAk�XW}c����R�>�I�i��9wl�`��e���X���i2x����:�v��2��F%
!f�-}N�TS}����=*���II��.�G� _�$��8���%.����[�3��
^��X�K����"��#"7�(K<����Y3������?���B���;i����
�94}��h���h6��{J�+�J��v���>��v��	@�{���H���G�3A[1T�9B�Sh�����E�!T��6H'vu�hcv2��N@��Ej����gn@���;���x� !w���
��*f����Y�>L���EJ2�j�E{9���*�����m�4F]��n�rt�
,�
NcX
���=�P��qu��'"3c�,�����}!�����X����PH{R��L��l��AwL�#/�6����(rkd��E#�	��e� ��SR�pI�Ln��<Hq��n��B�`m������~��"k����g�t��q��3��q{��6B#-���zXG�h@_l}��o��C��R:�I������4o��rEE	'K`�*�^������`�8��
���ao�e(Ed��\��YE�,�(�H����N��A�]����8q�\���|�-�����2��W����
QH{������3���
tK�y�z��Jd���Vg�3*�'��1��i3w\I���E&[D�t&���nX$&z�.��`Zc�w�������|���&@�
F�`!��6>���������9Q	&K��,[n!I��&��T�����'kTn-���mws�H��`e���<o$���P� U�m�[��~����ZHdk���Hd��h�.n>(���^���T
ze�u��ciJJ���:)1��/]O��~]}�#M�_�_�������[����<�����n�_(j�������������$��a�L��-�U�lr�^7f54C��HeL.�i�{R��*u��Xv���-�E�t��1��?+����3
h2�/�-���8����JD��0���4����y��j�_*����@��%K���W�Dd��1�.�ZB���HaZ��q����"������<,�	�z	��J���m������'�,�����.����/@��M��`&^��/Tu��d����n?/��=1t�������#��|A8g�����Zv����;�U�z�UWs�'���I_�����YwW5�����G��w_H�{R�0�GX�lR�������
'������O��y���J&��]����."�	0����D�&�e��B�R�/�����u2s�>~
����|���'_�2���N>�L&Y�����yD%X�D
����<oTw��$(J������{5�y�&����&�5��e�����|�5���W����-�
��=/������<=�-X^��FU>a�7������jyo���9�{jY�:���]����j��3(-�l	s����O[E�x���2�T�!�6���%����<��7�;���	���/\���!6;	��'��c���L��js����2��~��\l��~!)Dk�FG�[��e"��Ln�#}w�6�J0%w��w�l�5�@�8�(@���k��&�>��0��h��}��:['~��SU�m&�
7e���=r=�H5�����w6��r+/�eo~���\�28���P-���a�Q�o�n�l���ud�F�8,�����E��=�V�����)�o�ZL���+�l���O����Y�*������
�����hY�}k\���j5����x��ym�S��=R��M���v���F��4�h�������d�7����4]#S3����"q���*+��f�9:�����*���n\�jpa�~%�o��z�J\H"?����;Q��Dd;�=OSF��+����	P���.������"��%�'�d!"��c��1DU��w��8D������C�Bo��z��������0l��J�_Y���������:�W�Is�������[������2#l�`O{+����2�������V����g�:+�6<�sJy��%�M��e1F���(F�z����[��w�2���i�7��a�D<^�����ASO��PsF�f��u3��u����	$!|�m
g��V��xrY�#�7#��37�RP��doEE��~U����L@D���uiH�6(�w(�����'�y)����,3��+<�7�zk����EoEjz�T`��3R%9�$N��y#��=G����6�t�NLH�w��#���Q���kZo!�d\l1����9��"��#G���Roa
�9��7�w�"������G�*��@Dn��z��#�(^�h�-�'�g�9�T�~"���/l��f���
�����Q��o[D������c�5��1B�=!8�/t��KZ�"��,��	��q�����$*��dc>�N w,��c9�t�u��U�r%"������oy�#�1���w�\�=��V������}�Rv���~MOsqE�_��]��:��5/�_��7��X�x������m���K!�.���/j������E6o��4��g�H	�O������{�B�e���)b
�}����(L��W���������~����4�_�pv0W��w�����U�9M'�S���-�*����Cz(�}��L�D�`����D).�2�J�T|��������������6B�Y��z�(���t����Iz�����[�����^�W)o��1K(Mp<L����h�m�x���ql��0��v��(���^+��#�[���umF%
��e�����W"���j^������IX%�����*���E8[��,�B���#]���pQ��k�V�Y@�h���Y�Q[nso�P�>���na���#)��?e�������S\ud�G�!#��"h��Pf&"�yR���Z�`�@C�����i7:�
���yG'~���C�/:n�p��)���a�h������~��������:��M�j��z&�.C-|z�}�X����Z��FD�U.��[3�XNa����,��}���Rt,�=������@	|���i4J)�El����������w��	�����9-l��V7uP~�E6w0~�F6�m�t���d��|�d�3����$��l���D%�oN�#Q`��a;l��fY��J�vv7�h�����X�.�����������>L�_�1���S%lF����V"2[r�Y�����y%*��	�����W���g�h��yEEI�Y������&4|���7��%$���nA�cW�vh!x:�&��-�r�e$`��UZ�HQD��DN��K��Y�uF)	�:C?����/�bK��h�������|�����$C�F
u"E�
��3�Tf�e|���Pa�/P�!�	���������\�)#tc���v�	p��j-7�jLM�D+���c�"��\�ebV���oL�@������������GZf�c���7l�(zK�?��1v�z���N���xA�������Y)�[��
������BN�����4$����<�M@���o"~"�q�n}�	��,h�G��Y����
��g+4�)��g=����2py*q~�N��l����Pp�C��@��dKiz�f1]��13�����"�V�d)S��" &����Tv�)��sY1�����b���U1�B	�R	`�����gM�����������]M$�y|V �������U�[Y�5�/5�]6V
������:bS�;����^��C&$�����P;����M��H�O�R��m��T�	�3�B�r��z�f��bHE�#��E�0��O�������oD��S�O��#FA�$.H������(5_�S^��H4���V�'�����p�z,����Jt{�X��ja3�.�Cg����u;��
��$
��EaF%���-����d��%�`D�-���[�]�����x���m8����B����n����z������He���^r�6���y�"����V/�]��j��?D��y�p��ox���,!�����?Q-�MK[�����&j���j�cU�k����2�9�%���W�GC�pc���i�y�2�H�'�W�d��$������Bm�������<�u�
����@�w>������:+Q:�x�oV�k��"~<^:���N��r�w�����=�.����Y���,3<)�
��1��N��X��pkCkWOr	��G���U���7�"~�{�_�2[���gY��R�;����QeZ��i��i��k
�9^�)_Q*����������"_�HU���"��}���Zp"'Q,�WS�i��� �.)?���J�����a����yp����OfzAMmZ��m��(�	�x�`>�}f�Y����kZ+����D�N*��K*6�z^$d�E���� ��bx�k��V>����(9��u��������su�
������c,�.����/=��*���?	Q'�5���L�L�dZo3:�z�+�q�=&��]}e
��;�\ Um��%��H`��W�p�y#��h���E��f�\t=�'�
���J�C�tT|�M�����m�BZ�Ox���|�	��W�Lip��H?S�����2�08����3�MA�=���I�a���b���6�8��m�P�JM���tB�3�
|�����F�+���h[(o�nr�|���t��,�����9�@���&����&Rw�y�0w�YP�	r[
=�$}vT�`3��Xc/^�s����+r���n�6���S@��e�_}�{��0��m�����q=,���}8W�~�5��N��p<������std;���l��+*3Q����"^�"'�>���Q��m�����t
l[��zQw�u;uc��t��N���~�	s�N+����	��!-������:�V��~������E��&$����������D�j�����F�nRE�^���ba�yEp��F��N���HjB��~������J6oY�/����m3�i��-�d�[��"�����%��Ul����V�!>�Fd��K�����$���e~���A"V��q�6�A� ��&`&s���?���<7�����{������"�/�]�Kb������*����u"���:�]-�!H�l�#�z��=N5R���
R�������a"�3�	7����{h����n�#���yL��aM�uD�x�B�G�pkKc`��L���|Ywa�����D]k��Q��k&�}P��xga;\Mf���`���
��y��KA��mG�w��>h~G�r1Q*��/�4`�>-���1����Q�lS��@Eb;�'�B3����u:�&����U0M�P�6�D�y���/��?l
�,:��g������8������_���{��gb�5:w�z����I�d�-�!�b���J��������M�p�����o������j�~S��n��\OE�d�N����w����)������y#|��an�r�����7cL��,U��Q��T�}o���)7'�L"z��!�#���?�-���1��E�"�4� �D�����qNyih�d��������3�:��:>d�4�4��H��/�V[�)\�+�J���XX�P$��0M�M�~0��6����
��@(�K-���cat4�J �=]����i���j��h\B�g���u���vU}V�����F{uh���	��C�@v<���f��>l�P z�,���8�3c}]�^,�QC���/�_��m�_�p��j&}"n����5}?�6,x��><��^�a���!�?/���x��I�����;����f����i����D�D2'KI�I:����e� �P���Y@�`�" �Px����N"��������
��f�&�����)X�s�� -	��{�zx�����iv�����e�/uQn �����"���l:w��LDu���	�&�������q������Vm&�������*v��%@{zs��lOW& �S�
}F�����p�L>�-M��o3��T�>H�o!��PA���>iV��.Dd~�eq[��`J����)����Q[��wj���$@��O�����@�h�!�fZ1)k"���1]�?�^�kTYQ�����
-��`B�[��{�&K�")4�f�_\��)���}X�2K��1V���>��%]Q�L��-)��Z���2�%�-Y�Y�*x�+[R����tEZf�6��d[s����;���%��*�T}��j�q>`��3����{2w�*�����T�Z2��Fo����dH][w�4Y����t>zP�#�(!6`&�>�xb�����d�zOY���`>�x�G�cd�"�M=��
(��[S�b��_"�u�q�u�L|�u�>Y����l&9�$�Q ��� �[�r�\������,$���$^���v\�����%+�'�Cz��cD=*?�b�~Q(�E}�0�)�L���4�a�d�@l>�
4&��I'�@������ A��(�6�dJ:8Fa�{u$�
"6��V���N@/��6�.SL~��	p�B�D���d��?�&��B������*S�[��������pMZ8��L�V���
���:��$A�t(�2�L�)��D���eL�8�&jK���L�9�*���i�f"�}H-����(��0wP_��XXO:����6]E�r�9�	���;(Y�l��"���N"t�Hn�sE��:�I�fR�g�9t��G�4��X�Gs�PD��[�E}k�5�Lo:yV�����{m(f@/��|x�����I�3����|��%����\�����"�Q]d�&������[(�o����t����j�k*�9V`� ���`2��(�^`��;�r27Pd~����,�������8�������+~������&�O�&�y����e���>�����p��6?�^_�&��y�.��w\>�Nq�p�&�������wn�d����I������Gx}�}��g|2@�����$�������	���\��f���J�^z���������}��'��i��Y��<���g%��@���c��zP_>`&Y��i��1g�����VH'N��tn>X��z�_e�k!�V��L�}2�LB��l��\-�������#�:�������I2
Vn��yg�,�%��sTl{���5�HzV}xz&���f%>����
R����B	3�ddZA.��������9�4�YdwhCDV9_{R�c��;O0�����\qu�bJ��
m�	��^?�O[m�����6K$iVy��B��4����k����,��	@d��C2H,x�����MGM�9"H*�{yV��T���My���s�f��W�5�b����p�[)e����{�l������L�0!7���\�=���9L�:�Wl��g"���c��\�*8b��i��/�5uv���mg2�`��X�����Xg�t��6������,�l���cn�uv������[
����X[���Yd���gI�����q�#��
��?/�������	�Y�wtLD�����Sx/�	f�O��B���l��>~�r��|�p��C���&_S\��ws�-�3���L	�S���_�B,2{4��[�%HtqN�
��?/�.,�N'�
�y��o�LJ���gE���M�o����9ptJ�
��E�����y���C
	ygG�{Do'�����u����9l����#u�:���X6Pf��w[H��{;��iC�6�������n�����(W1��;����c:�b�$�qR:*y��J����6k��:?����qv�g��xv;�g����8n�����<�g�����(%O���hGM������R�-�dE�5�7��K�����K��}M���M��sjF�8������Wm���������o����_~<�J������X:^�
���KfQ������������'�|������(��;4�)�{�<���?�������7���7���.�Qo�{��h������OIf��$��y#X�P��D\j#V"2~t��$9 2q�7v�Ym�NGX�o��������H�k$^���2i����f�c��d����y�zU�����u���X�A����qK
y4�#[���~�3W�t��q�G����:%))X�t��o�5};;D��Q�@\��nl\.<<6	p��X�C������E�";v�r�}CxfQ���T.���$	Vf���]v!XLC��-L�n�zN9����CR�Sd�}��n�B[�$i���[����R��3Y���H=��u�]�E�1��G	t�=>���g%%/.���cA������j�t&-�l��F����j��dA�.���|�Y;��j�&�oS��/v�C�^���`U�o@��eE�����5i��`b1}���j��7��V�d5�����|������a�5���DQ3���D5F:	tn�BT���0��Ui?��VK�oAje��LD�l��~s������B%��y%��;��,T�1�D�f���f�����I�=�X��o�I*��)�������!Q�Z���O���y��7]���@z-/��c���QlX)�ov�^��g�`��F>���Sg0���k���~�F�n�L.+{�	�(K��b�������k\����y��+����S����AVTm���Aom����)��bZ,X�5��r2���]+�����,�Bz�)�5V]'����/���$N�����MFe!����}D=��Vn����<�f�=�oa�����
��f^���LG��i�"��+��j:U{/Ac����m�6/��m
��[�J^����q�o����7K������\����6�q����AXQ�O.�sp��j3�`F*c�^}�=�h��J",��y]�>Z���a���m�2?���N`� (9�	���Wcg������C61T�9�T�d#eVaE�w����hW�3tU��}���B���}p��B�����h�:�jI��^���
U�f�}Po^T�����*�I����:0;�B�E�5�����
/$}M��Y�����rW�������Z����\��7=��!�H���\&{�K�~,U��s��1��x��Km��^Q�������?l �����9*���YJBNo8��P�gk�e���a/��4%�>�BD��$'��������'�r�rs�t�
���N��}����8�c�"�����tP��&�z�0��1�D�G����!���o6My�?���GT@X$;���{��P�F�p��aE��� �m]Q������;�����%~�3���j���}03��������~�G�2�}_��6��,V���>�D��}0��MD?����5~�@r^I���]e��${����u��hTL59
��]��3$+�A	Y>���\��dm1�#6�Uz{*�	����������/������P��a36�����.��f!�;C�3���y��>jn��I�eEYVnR�9/$��Xok?���iZ���2�3�Xl83b�����(R4�����6bE�iS�]q`MgI(����Z�mb",_^��+���g5YK�QFs����i��*�_����������f7"�GA�H�$�}XY0]��7�^+B��<��mc��1qRkI��a#F��3!t�n&���6x0-��o<p4l�`!*7���/���:b��[�"�r>
>��#�����+G&����7�7g�oQc�be��
��t������A�rN�������F[oz4M;o�}0��=����sb(aE���f�0pP���!����dh�y0�����-jP�|��\�!����	%3s��Qs�2j'�6�bm�T��D��5kS"������i��5o�J������J�ts���K�#�{�;
�l�vc**��Kf�|V4��I�����y#76[2�����&�D���v�i���E�+S\%Er��R�\�.�5S��elZ����{�H��Ov�����.-��+��
�G)L�$���]Z��&��3!i�����������*k����e��\�"�9Y1�x���g��:�_�����~��tM��n���_�+��	��~&��e�+�(�Q���7�WtD�h�|5'��fX�� ��=
�[Z�h�'���m���h�k�F�����6��/�7�5����3*�=�e���r6�	Y{=#�a���@�5��N����l���c�>����~������n��v����uy�	����AafW�������H��������O���u^C�E��v6���@fgA���S������]e�J��t��I�XAL�f"�����>���t�H�����b5��6�b_S�
p}K����3�d
M��v�N>I��E�k�m����D)
v������:x���A4��V�w���Ow��`�w&x:Z���l����Lj�s<�w�9"����N�V��
�0���#fXfr7��A���BX�@����D))�*��w�?��a�}�L�5��uuV���:���}���@%�~(���X��bbDmERf6Z�i=ai�f"���i��������'E�����~b�������l�[rS�L }�*�X�i�~' ��q��#f��U2x~�v�O�0�+^��D�t��T��&�.O%���Qz�]>i5i&���)���M6�DdN��.7��)��)�j�lA�E	h�k�p�����q3��RR5��xBwK��ID<����e�����\����/�\�0���V*��4]���r��l�h�9��*�
06*�
Sc���!����i��S�Z�������+�LT>�'�6�,-~!��fc\����PuO��0��G���	dk���������KxN7i^������fc&�W�����Yz�E_gi\�d�����+I2'��j����M$����.=��S�.v�f "�yb!���MV$����lx�����3�u����}�?���.g%Z,E������f��Q��z���/��K&zJ��G���+��:�^H�^'�|��t�����j�<���q��`�Du��d|oT���BiVj	e
��/*���RtQ�n�.:}���.-���1L/Lh�7���q����`��/��eE*���1�0�	�8$Q	'
�a��$}!�H����A@�O�=M)��������,r#���;�Bu�	��X��\1� �:�����)F�h��""{X�:@����`��BD���T��>~U�_�i�?�ex���4a~^(�T�7K�!adI~1�LLO/�dc�=�{�1���'��~!w��so�$T��3Q��^�~C��P9Cc%"�M���L�J�,|`�U{��������)E��Y0�����&�y����2��c�T���3��T��eE(�ES�[�ri�����y���u%"w_&"1y_��9]/$`�MN������T�b����A
��(����\�O�<���`Y?L.^RO>�e��j�^�����">�U��6�2�g��L.H��,�9v+�$�^:	_.do����|�#�~(�r�7���������S"�az��f��� U"������
+���7e�I��*�;��w1��k�z��I�m$J�m�v��I�x'.�#YI�c�g����}�a?�������H@����N�VOy!�+��B"��m|�J0%d�����O-~!6w)jr����^h����LwOH��
���QE)/&�uU���f�>�#�wAeS���[����y)�<��1$��M�����������<C{�������2������uC�w�F@=��:�}E
�,����"M�R��z����H��[Ni-�s��=w��b��	8��_E=��b�$�'_�\c\���3i)��������������D��o��1����^qB���������'�40���F��������rMm�����/��1���
Z��Di�f�v#�R��U-��J�v����E��jp�@�z������Y���v��H	�����M�10�:5i��(�3l���K�yZ��co���a���q��w����/����;v2�������������`�q0�;0:��V�dn6�������X�?�n��%:�JJ�|�6@���`�������x.zz���+�A�C�v����Yy1��~G)����pWtg�TQ���6���z&If9��s?����x
��s����7��`��e�E��g�7�D��D���D<le�����~��?���0�[�z�??������F	\��^��&��� �Q��MD�����\a�c��������{t^$��@w�o��\S�����4�ESgK���������m!������9T�����y#-<���ux���PyPd�h��"@����4'H���>�e���R��m\��B%�
�YL�BRC�X�tu���L���4�L�n�G�V7=��m�W2�[��n���pAY�w�����������S�L?�1���!��MG&tj4����G�.�Y�����
�N$��2�E\�_�#}A�
�1���^�S^(T���Q���{�2J'+}����uJ��E�n\��M@k�J&Y�z/*���*��2g���
��.hP��<g����"����7�A�� ��1T�M']g���H������0����:�:X�����$9��{gz����-Y�ZS%����$@#��Q4;	h+��^Hjw����L��f�^���{c:M�cx��gk��x,�dT�Kg�V���\�ZgY�1
}zmd����J�tQ��Xm�Q�OB
�����[&������X���	�lY5�f.�\�2�,�>rSL�������
;~��d��fOy���c�8R�����9�P��+qs����I�wO������U��3H	��l��R�w�����!��J�ZtSf\���{ch�����h����0�8��Yf�����Jg���E<o4����(��`3������s
���	KVc;7Pf��(L�){�4t$���\���R���f��h%��7-^��)�D�Ig��jS�^(��C���o�BW�y����b��XouEPLMN�?b��.����;��s�h�b�`�O�]�.+�c�����e���}��r�l�2����K�>��L��}�J@���@�Y�\JE�-� �o�^�f������=k�lLZ���l����6a�O�&�}��@��fX��y�}O�l�����>��bx�l��n����3�J�>G��r8�����
�w�b��v��YY�u�y���x�Oy�,�����x�H��������k����<�l�TCT�%.��~/����I��v��tl0��=����z�����5/4��>�^��~�x�����C�����V�����Ym���?��kp����4���/o����(D@�����>R�`����L��/^���H����J�}�(�?=�������A[���(r<OC��,/0 �9�0v/w��C@f���yG-����*�tX.L���I���l�A�]����Y�����U�+b'�Z�5f��f�H�fs��{$"���1�q��&G8ih�t2%M]461G���k,)�<��Ha�f���������v"=nT�z���
=��L�\��Pa@>/"2���OO�-��&�w�����o�\DtY/M�2��;\���w���������@���X�>�0<��>����XL��+��\�l�2�.���1��s����J�I��g��\�`��l��d�hy�����qU.%#$@�W��G����g�}|��]r��/K^�B����k�����$�	����"*��_pi���|�.�{'������I�,4��e��J��6��:8i�^h:�J/�=S�jB
��a�gDl~���"���1��HW!)�)qkF����h�a���.k^(�����@�+�D�����z-*��	x���%��z����~�t:�Y�����Jn��Ke���\�DV�K;c'��q(���f���	����r�<X�O`_7��d����	�z^���OM���{ L8�=Tc��L�J0!������IG���O�]��YV����L�����-~��c9����5��E%�2�[��h�~�f����������_�yP�0��N�Fv�5�ifW_�e�������R!�����a��b3�#9k�;�7������Sd���S�ic�<u�����D@��_��>����!��'v^8�m�d>����S�E�`67�p��I&"C��[k�����5c�I�l7;�
��LT�M��5^�
�L��E<�:�Be��8��3P�+�_�y#t�
�GS���2+��_EUs�C�)��F�O[X��aO�a��~m�e"����;Gq�svH	�.�p�\��*���n'����_K{��Q��U`����q�MQZ��R`J����\�&��6���KT�����<���b�����P���i8�<�����Xy��o����(8O��$�5_P'���9}f�!�7J����T
��M3Iey�X��`5�@���]��E��}�'�4��s���GY��h�������Y�P��
pt�t� �"�PXs�b�y�������?���Hi�,uN�V�K����d������3���(&�����8�|�������QBH�h��X���>�`u�x�1R�&m�5Z���I�6��Z��M��/5��0�k���(|K\��`3�1!�����|Ct����$*�1b�0��f����Yba�-TD����V��� �D��|��XH��sA��s�����XwBj%��g�`(`�<��i�P	�c,��e����c��5����~�:R>�d&��d�[�5?+�����bB�����_����4k�������O���n\�����0��]���+M
���e����<���yz��a}t�N �	y�/6~�{=;4�Y��A�@�`#����EF,)��}X5����d����=����E�����h��� ���[����.��J4G��i������ioz�FJ�[���&`���!�<�9�C�@U��r��B�na]������V-�+VH��9f�V@3�s�~�F���$V[t
���y#�Y���������j�oJ�j���^���-��M�^�Zwz�����`�Ie����I���L����I�/��^(���-N>�E}S_�m�w����5�H��43���+h}��BP��*�<8�����y��|���Ki1�(�t����a>.&�����FZ�V�:{Yxs�
�W���%���s��X��������Jh�iZ�&�s�������M�f�
l��EOk���vy�I>�o�9�������Q�1�~V����d�c�1�r�1���l�<o�$���6���Yd���"�9K%������r5���,[0
���V���1�/��iz�C�sVoy�p:wL����367+�YB;�,N�z�Z���5��i%�����!ft��6���n~�L4._{?x
.����)��x�K�{Y�2�DS���>U|R�j���U%���K�WFd���9!�W�|�MW��%r_�!��g������������{������-����~����v1w33=_#DM#��2P�����o���C��C�^��������������U�g}�����^$d��Y:v}��d��H��S������C|V �xu�����v;���b�;�
�,N��.e (FD�/��I$���"&K-@����uP*^(O�R��9qz�oe����&P�x_ed�W�[&?/b�Y��S��nd��@Z�bZ����T�d"37�LJ��'^z��B�56��g�^A���m��JD�>��.j���m�,DE�����[,�=�+�5B���5��v&H��A>V����|1f&*^���\b�Y,�
(�W�����d��w�������u4{�@x�5d�^,&?/�iz�V��\D�m,@u�A�q������Ew;�����*q�����1R�Z(�]t&��H+6�'�J.*,)��d�B��f�0[0��� �ko{����d�Ro�x��n��,PX>Y�p���w�R�{��i���s�'�����B$���
�|'��g��\���5��/����EKvc
C�}�t�Y��1��u���Xa�6��o"���v������m�B<�JZ;����eH�������HIf�j���"��j�g�
+
K���&�7Ko�FO�1��=FJ�����=���� D5{%n�f"���{��j6�/q��z7��r�bIfo!���r�����D������v�����:@��{�g�7$�����l����$��oRS��E�%�!v�H�o!!������ H��d]gMF
�0���H��}d��H}6�3f�������������d������-�L4)e���%�a	g�YB���L���C$�AtK^�����N@����9~aJ���k�x��["A��b$>�i�?k~Kd�p%���S���=\���=�����J(���;����b�C�@����X����L4M��\@Q���
��-���a
)�%�2���n�6�vp&�8W��nl����|�d�D���E�	|�H��3�Op�ao�Cf���M7�.�����$��BTO�bF�����	�Ah��N���F���	������3	���6V��AJ���YS=��l�dY��g��/�7�i������t5��������w�_y9�,�`��f���Esr^���p�����]U8*���g�QD2L��R^���<�z���,��4!'���d���x��&Yv-����l��������b�C��xd�Q���x���vvp`u`#:*����\�b��
���il�����5fQ�	��������~&�~-�B6�����D�F�I��\	&R&��`�H5�d�� a0�3�P�yv��4Yp�t{����=�-Ae��`�Cd\����x��qXn�����!����xW���	.����G��
P��������=/��I������vw5�����7��/?�����7��t�O�;�KF�[���-��t�`j��l��w��o�56��8Y����V-�QH&u�G$U�y���5���|�
�L�_b&���'��{�.r	���/�lw���l=j�������-}�9Z.z�3
��&0���=����p�bR��F�MK��nZ��(��a����p��':�����r��t��g��>�B���l�cy��d"��#?��C�J��w��Zr����0�&3��
H�t{vc�[��S0IM/��^�����R���J�7��b&��i;&��eiW'u�%;��������/\m��f������MG^C-:#�IA��U��\�('�t'��I�o��5�
{j��-ydR���Z��0�S�K2�!t�|9�r�����f�DG-.f�@8Y]��&�o�"�TYQ�D�m0d�����E,���	������{��4�\�z��V2�����g���=H��j���4�G~i�4��E��g%��b�>r�1vLR�)�a�K�*��} �����1n�����:'��'��$��n��[�ud�O�K��;�������
h����9=�a;�����n�O�:{����pQ�[�� Yl
�E%��'�"4���sQs?�i��S�����~���	N���LMpj��Q.?/b����e�v�����)���(R�0`��r�
����l�(�r��
��=c����{�'M%E���%(������(R��%�����Rj���8}EI�r�����4p��twxg�6
-i���,��E��\�����FUjc�ntE���U����w��X���U7������+9V�{���OW_[Y"��L�����Dy�I�,�M��:�$��dB�k�-=tk5�X�����bG�����hk�\a���JK�$�����QE�ma��I�l#��q���"O
O96�46����[H�����,�]cyT�NM������)�@�<'�!�yg�<���&[��o���RY���<%I����h6�L\n�r���A���4A��%_��gDot'-�&����`e%�s�X]��c��}�6��t�b��Xb������w��F�p�e1'�1���j����a�F�������u�J��/�e�N�M:�'��7A�}�q�X�jH����A��64��c�eI��+�3���y����������^����7�8�Kn�t��m�2RX�����+��>_�����K���� ����@����A_	z����L�oj�"q�K�t��
�X�]3��u��L���6O/36=3��������T�w��-d����T�����L\F?|aM�N@<��H��@@
��\�G)����V�]&"s���Js�U&����W��]�Lh��}��x^2�;��]�uk�B�:jz�j�y�S��B�i���w��\��A(4sF�hlq%��A$��8M��$���W����
�T���;�*G����@E���O��Og����	�8��A�Lc?�� �3��iG#- #�dKCs��W��<tf�i�"��=|���-��������7������4��%���)b��/7����53�e���Vw�?���kWT�de�X6���5(0d�zlz�b�cLw�X�j�o!g��R(���}�(��~����f�1p���	��)��Nd��@V��=E�-�����Lk�]��+�ma����Jo]W�)k��{�����5��,���G�\�?����m��-7�����$� r�a�0�
"���o�o����
"��#�p�
��o9���|C����oh�r�����7�\���
[�I�~��:�p����{���T���#_>��=�0�p����(����+�=����"��Wj�ef����H������!�����pY�py.�.�����#m,E�|��S�7�+�P���\|�����8� r������
�%(���uy��{0�����6��
r4 u�7����7[Z������ ���W�@��=����
���[�`��r���h7������`���g]I6���}s9=���c[�h��u����z���;�K�}���}B���)�^ �a�B���-�~ �������wX��{�p�����:��!���m�S���Rw���wH��_?�������zO��D��z[������\������sS��o^�^��I��_}�������P��o�^��?����'z�7�D������_|\��5��_<^��1��_�^��-���+Q���=9������`��%����t�D�F��zp�G�j������T���y�R��T����_�W�^��z*��~=x�����~�_O�7�-P.]�o�`oKKy2E�7#�2���w9+�������<������1��]��L�B
�,������Y�u��fT2�c�	��C���k|���s������L� ��T�l�B� 9PC�!i���y�d~Ix�"Rk��E~b��R���7rk�N��8T����V-�4u���
5D�����&@Oj�Kg4����1���G=�J���po�@dY��R��l�[J���v�������oz�����p�~�������<��3�����DCf�
��w����()��m�"������	������2���{�^���������T��n���.^���
mA��
���N�V�H�|@�sR��uXD����g��u�����E��������W ����r��5>�D�Y�n,�N�
���3��u��o��1^&�Bmd�����U�f���M9[�u���	���mp����\��n�w���d�2�2�U��~v�h��_h���
K4��l4md&��@���F�n%�v���E��`w��Tk��t�R*j���S�����&R�W����yt��o-�@+�.��/���Y-�����z�c7\d���\�<���;�(��`�z2�(0��1i'�[���y#i���hr��y��M@�dg��,c�Hqo�
a����Y��D�!�kr{������7��o$�����'�a/����.�q�95n�����-�L$2�)�cu���~!���g.��n�����Y��=yp��v�`���e��Xi@�o4��z
D�N:lY���S��������\;0f;=�i.H���N NEsQ����~�O�#���t���������+=|���}e"%���g�X�9A�B^�;��n�IRA�	g��<���eD������:/��_a����W���@�&2I��3���������������d(��>�<�H��F�'�x�����YM>��Ig�&l
%���P�7Y��6�C���p�#���LO����s���r�y�/@��Z��:�D:��
p�s���f_$*���w�Ug�}!�Q��k0�}��o�E���9��}Oy3i��m|���<���y#iT�d��7Oh{������7$���\���4.����cg{�C
<��b'b}^�_%��<�q=�$</�'�n#���H����������V���A��x+������qbq��.k������u;�	F�~���s�4�T�I��g]�<��^���Y�~#2L_d�~�0�$E�A��6����N�I��ZU�����/,�>e��������c��#Q�
���S�a>Vh��t����YxY&v����hgJ�X&�<�'�D{A)��r�.k_��-|�>����P8t�x��d�� v�����NT��)���I��Q$Ty^�:D����
��	D�m$YVU�5�%K/��=7)&�/��}�r�>]���c>i������,����md�����R��O������y%���w�X���Q�n�e�Qf)��rP������G�����!'��.�b��p��d�����?�*�C��7oZ���������zj�9�#{{HD�Y�J����,�_�/�@e��L�|~iPA*��(��R�w�����k3;�Hq����;eo�`�8��F���r��@�_�H1��^��+j��g%��5������'�;���D>��f�>B��
t��DV���p��E�N�4�k�f�[�y&bO��[k��^p�)KEK��P}g�����>j�a����k0x5�@��=!�d}�E��~J��@�eE4Zm��2WD%!f��}������g	�X�0E�AJ�v
:�.w5CR�[�/q��������hiC��='���(����e���EI��	������=����;�v�?�K�aJ�"K��CT�Y��d"��KD�	��lu�Y�������Yu��o���x�����Q�H�W��!�!��d����H!D�q6����u�n�}��_XEj���U0��j����`bH\�-�/+�����0��C�z�����LYz� �F�	�f���m�D���.��/�k{0���%��lT��b�������|�y(x��o���"��u�Y�[��	��8u/���z@��T�:d\��O�h��|���"�:��������l$"��@���$�a��V�|q�I1���f��C�dm��-������p�lI&��(�n��4/'���q{�s�p�<����-��}�Y��S��qfs�8�O�D
�jl:�y���+*B�X�[��Fn��^hL0�`�l��&���J��DY��JQdK�B����8�r.��I��
^�T��U��+���h�`��u,��x
f(z\�x�J��7�XFP� { A�����p�ac>�zu
�/��4�~�o�+.&�� �P�I������������	�g�n�#*��6F
���������������x$��icAd��/G�1�o<���$��:���A��y��P�����q"%���R
����RI�l�wR:���f5�c!&��q����7���%	����M�':���zS����*qM�6�J��+
J*�f.J���K�����r��������O�9����s����o���n�WM�������H�"<w��841���e/�q�h�_H6|57��	���"������-(L���l��$5n0����U����}��&�Q�y>e��cp�����!{[0������y��0�������@���������}!r����0�>���4��seY��c=�l��}�����,�� ���g��������U�d��������L-�pV����]�2������p�;�m�"����	0OL�(��+��[�����L}����~�e��qK4���f}�U�>����������/�+V}U��U����[$K~!9�F=)=���%�X��o�����Bv��=6Q��)x�H��L�[���>��8rX�B%=K��K��dl\W���qk7s�}�,���l��A�������y��[7?f&I�.�S��F����Id��8��d�t�	8/4�^L�8�9�X8�Bc��^W�1�<By��,�����*!���&q"�8|�	�����#�V��4�
��Yit�����M;U�\����P�s�"�
����`��-��2u��Y�6�#M��G���X����,����p#�'	�P�L�'O=������S���6x�	d�#�f�/L�o��Ty�Or����/���J�|���.���%��q���lq3��B�����)�����j`��>��H�7c�D���3�����kN@D��@��r��u	%�y`	�y��(F�\][
�@�9���&!�m���3���QD����O6�v��[y1�{��%�]�ep���Y����iG�>������f^H�3'i�����{u������� k�^c����7;G-*�B��@VW`�'�E�O�^�(m
���S��������|"�vq�����\8�$������8��<� �p<� ^��L�x��C	~A���j�lT3�.��
I<1`w������	,.b��v��h���0G@'�G|����t���P
:��W2.��>�().=�r"tn�������27=����vSed/�"��7'�W]LP���������"��#������$��,;�j@T�Hq�w���3��[�	����������������t���d��������B*�W�����+�2oz��b������
�8ZYQI��v�6ZY����eO�{����RNC�����/yj�Q�w/���R6�y�nES>����4��F�X������[�f�����9�w}�{��������h��@�w������`��|$� ^F"o-v����L�VT&1��.v��3	L�C�����$"(����V�����T/e����(����.LhoS��-�����3����o*��:#Q��Hbj���^���7
XoE����Q�^FQF���!����qk���.L��������:
1��	�Z�ml����������u��ioS���
����2C�H�
�]j5����S�x����f�����
��/�M�;~<p*����S?��u������g��$����x�BN�������+w��^|��
I�q���N8|��Bdeo>�+���
H
����������8v����f^cg!5�h�/&�����C��R�Q(�|�w�f�"��R'���
ftO�t#�ESOtE|�S	6�j;�O��������6o&����d���b`��?X]��7:����N�O�[g$�>��������`�7��L��2\�v��A]K�p������Eb�(8,*���O_S���$9���K�C0��(:+!C�����&��7�_��Od?�^^���^/�`��% �s�comk���b*�o��7C��10+I�h��6U��P�`Mn�c�[�/^5d.�G5��:Q_Po;6s�T6����}HEw_5���Z����H$�.��v.��+3$�d����<�������V������L�z�������LN�I���ON����������n�x;���p�)�����*��G�����O@R����m����*�W�o�3�>�������18!,W'jA�-.e��=�MA���X����5�{6��XJ[��38�WV���4�?��_
b��Nm��B��~���I��f�V�]��	]�f7�����<�iZ�X�F��}d���COx�|
���~`���U?�����R����F	�+*��XC�R�b_�|x~`����
��6���$v����w��������st����� �t��'��;~>J����<y�^���}�:�PU���:2�<ob}7<�Z�#�m�����c��7��qda�)M��b%�s����Sy�l�f8���%<���������H���$�u���@V�7������\�|j*�� 	�����C��p��������BgBn]fkg.�^P��W�o���3�`�����O�p��+}�����Ge�&n�4"/��B2V�-�f����<�$E ;�^(������b�&�+2L�����<�J���Y��|���i��	��htQ
b��(~���:w����d�����2���+�P�S�z��������Hw�v_�y������/z���������T#8?L
��H^�VW����K����B����O�9��8 *|����h�<3������\u)C/6	
�/N	sJS.�2���o�p��	i��o2����]D���OH�t�-�p���<�0{�����v����m������,��/�U4��X%�gy�U_P>�.O���7�d����&Zw0=o�%s��V{#��d+�Q�MK�+��b��>`���C��u.�,#f������j��,Zy���_�F�@g�^�$��v&��79�J�o'�d���F^+22����NV����|F]o�?�OT3�bI��\��k���	��Pf��i*����)��lV��}K,/[!����T�loQ=m
��sc~`Bl(s`���[wl����h�"
e�'�'��6�z�5$���YZL��s�yz6����j��������%����{�6�{��E��f�5?��?���P���U�F��n
�����6���������P9Y�?fe���AL���4g�f��H.���0��f�7����d{���73��+'
h>��aN��"�������IZ�	@Or0P�.t��e�8������]gT@�39:�o���:�I�Oz�����H�!����q���������������b�T�m��������>��cp���	A�s�"�N����J7���H��CcS*I����N����P�d����7��>#6�
U���J���M��#�c�����|
u��m*�Q;^��p���3"�����3=nZ���(4^�����qY��2������S�!�e�������c��2~C>���_>�&���E�|v5:zV>"������
~���`O�=Nj8��!�z�����P�i1�g::�Qmh���hh�g:�:x���jR���l�u`o7��-�E�������Er������3e�7A��6\m��fH�8~�A����W"r������>��?l����������VO4�B�!�hj=T�����U�B��0���J��9�
Kf<C��fr���'�Q���l�����8������dU$����C&.�p�1W@���������n
����"�FV��s�/&�S���M�Noy3!&}=�Mg3�v�����c?pl����}��X�~��ObY�c�B(��"f�8Ivu���[���UW�
�n��d$��1XT����/�j�<9��W����,�r���'Xt��&1��5
]G8�u>Tu���2/�"�yAi��,�;����|&g� 2�6.~���*��*3�~e~���~pa��F���D�p~��d��A��+]�$�����	���Xo�\��������P��]�`���mn��7Wd�n�A�Y�
��B���R3���9Iv���"V��}�R���+^��q��(����*gu"A�)�U��a�^�o��ql�"[0md�m�<�����?���ni�����]��"a[�i�m�����C��w�?�w�%��F���Or�w�_F��(H�OI�v�H�w��H��@i��q�
PqV}��p����E�WV1��`�-�Xm��vs�t���al��&���_?i��g,�1n#�r��������]`6D�#A��������O����3A$��0P�������XP�X�Dn�.p!f���l��kw�pVPN1s���]���G$u2+4�������.z�]��_�p�dc����G�JC�nm�����j��`u�uy��(��	�q������4�Q�t��RbM��|�����M|&���(�a�T�9"�^���}d�l��������;u�#>/�V��C�mw-J(�z6]�aC���:�s�r�N���P#p��k8����@9J}��;W�0�]u]������{6�*P��g��6��v���-����=�l����n����g��������a���l��i�,��������o��AtA/[��2�{��]Gu���U���:������&�1d'����Z<�K�����Zu��${���$��o{��DTm�#�}P9�����I��\�u�uR�8��&��<���<m�7���U
��j�6,��\�12�N���k-p�Y>�/	��2KP��0���n��PuDp�������������tG�2Y�F�,��?h�:��<oT1
��0z����0�B�4o��L=�����{R1>���5s!���?"�f��X�)-*e��P=�B���N�"N`���X$�����m>M\��
�!���
3�>!�������J?/�d�����HP�����A��"j����(�3�c@%�6%��Y��"i<������T�����x�n��� �����U��vB3��&�����D�h�)�:t��d����D��N�0L�W���4m��`s��$��S�:���\�����	a���hf�M�d������H���/����p<�ny���+�J�����?|cr�7CI��M����
s�W��aW���G�B�mp�p�E��nN�+���F��=5�Y��S����
+"m�4�Gg{������\�����K#������W���"Q�|pA]2�I��h����9�"F�~��ib���`����%������r��#����\�2'�����si�����H�2ZM�2/�B�n_��V�a^ H���;w'�aN���qT5���&��j�=^(U���6������ai4���.�)�io�I�
3X2�G�G`����g[�����������8�����W���0���f�l�����0s>���f�Ys�E��0��g�|�F�`�W��QC���.��j4�����45���l%p�|�X��W��f����,nQ�L�m^t��������eN(j5�������������	a8�-��H�*�Mb���l����r�L"LR��M�}$��$X������=���)� 
��`N�d�B�|' yA`�>�m�O�x�|*4�%p�Cz��TfJ���H/����
�l�&���B�����9��^Q��;U�������$�v����#����T��r<&G�DE��_8�kjy3�U�dSU�����jU��o���^U5��@6�$Gcr��k��]{T�@����)��V�v���&bc������Z�����~#p{G��t(��c���7[�|]���tU����}���Y���ZGw�rP[psI�l��������L=\�J��Q��.e,�0}�h��8`l��������i�4��Yn�0�sT������3	��9����n�����_;n�Ut����d�OK@��B�a>I"��N��=�	Q��bS7%8u�a��h��t�WR8����"����.�|�Y�0p��|W?�OEd���WG�GW7{U[bhv��������E�U����9�p�-�R����*7a}���S�}0�D}VQu]��$�������*��+i�}KG����	�A���CO� �Q��u�GS���\�	T
N�g���b��~j����i�������n�>G��u<z�;VXD�t�e��/b>���~��_�]�]���K������@�%��)(�4#!���R��S�m����6�
f�i��5�� �u���=�� E�J�-m�o^�	m�+=wK#8�!�-Z�^���
��k�����k��K����+�Uf�G�t?[�~�/sPw]��(bvPM;��
d�A�(�{_�h�eE"1�_�|�h@Aoy�o%���r��w��Pp���p�heh��6<j���]��8�����t�?dd5=���I s�as�����O�@�2�/�o���#�����
D$@bf��tF,���F	�<.S����c�@D����������KHx�[��\)��A>m;YDA��S�UT�%R�,��J~��
���F��C��z�:"jk��G��u���@D�;U^�M Q�3�1����2�����^yp/[Z�z��:<`3&�����������
x�)��Y"h����C���!�F�3Dh)E,��f�d��	j��I>�8�:����h�m�������e�/@������d���m�l��0��C7��ZVd7��ffR=�q�V"��u<Y������>�vy��E���v.
�1������f1r��������m\�X^��m�G��[h��A[	#4��q��x�������W�������IQ9��m������\�m�:>��@���M^���f��6c����8�V�Z���+:,::�#��@t��$�\����L�<lH�����KHt(�J*a�+N����]:lENF�!���[�e#oQ��l���������7!�w�	��2���FnS>��a���&������(m������m6fm��l���?���L���LP�4rS]O�����y:��8h�w�3�"�;��Lw@Nw���9�1��~�x}&F�E�T�-�w�W~������������z�/��������e/=��������R�53K�]U��JNX�J�����7Vk*�!zK�R�~�U�gOe��*����VE������w��SOY����w�h?i��
~�u�k�������&/G����������s����_���"��{>����]/Lq���a�<��W���-�������������c���-�Q���k�����:������\:��F�a:���swl��d�0��\�`J1�i���#�p��<�>��?t��3(���n��H%2����5)�G��BKdXJ��F�12��
TQxD,�"G]���I���&��G"r����E2e�#fVbLnnC&*�F�%o�w�����h��4��q~(z#���
C��D�~��|H����=�
�,�:��e�bg��������/h>������2��6��#M�)��+�v�o��(�2cU�oT�hT��&@��>e�p��5�J���e#���3���#�%j��?g���3�W�^I	�jG��r,h�f�;����E��;��h>��h�������Mj��))C������m���T��#��akj~n�(��v�����<_~t�F�oE%�N��O���d1��2�
�>��>���Na����L������#���)g�&L��c�B��"]�mN�+����Q�7v��=��>9�5�f�I0U�*���W�d9�w���������s�.��c���zf���$T��I�H������	��|~�z�O����C'���gI.�1F4/$������+_��������f����)m�q���E����7}�,Y ]+�/��	6��o0�������<Pus	�t�7v�>o4��[�����MiECbR��y�c�f����Z��e`����Nl)\�d�?��2�N+ ��[��N��w��&0c��PS������B�
����Q$"w���p(���X�W���C�5���Z�I\�$s������n�~����	V���Z�<��M}���6��j�?����3P�;�hz�}S<���Yt�]`ss��J�������=:��y�_K��E=�u�Y���5J�j��"*�L�:t:y%R��-����R����X��A�� ���sAd�6]�+���*B���VaA�wLBPV�������GhJ�$�'�f8��@�L��<��M[@/x'��M�66=&�"��Z�"j�_��?VI7��G�
hv2��L�x���\�~}!�kb�����ug��}1�����8�Z�#��f	��!�h��\*��K�|�h��0m���<t����^QAqHA�}�n�u�?�v���0T���.!.�7m��@f�w�[����AS 3-d�����cc��HIz�Wx�P��
H�cd�>0[����j�J�|i�G=�����V�C@3!�Y�cd4p���e a�	���,���J*�b��,�������0�J�J��8w���y:��k��XPb��jB�w��	�RY�+2����-�[����}��}���2+�t�5#~��c0D�"��=_�{`M��!Nq���!�oO��,�e�&0]��y_�a�(��R�D��rD�PC��	,(!S��n^4]��DmQ�"6��m����M9�Ie0����������6w_h�����y�C�j,�1��{�@5����
eEQn�}j��Mp�����k�8���Z�i�c�������yz���<�x)�#V4�����+��,y]P�Jy������I��������@�(�z�fh����,.��q^6`�H�y{pG�HBy�0��EA�JT�� C]|>���{k�M�������.��M�e���D��$t�N�f���:y���J����M:w��/k���<.h�����a�&8���F$��@� }���l^�@��p��b�bE�B3.:����D�N�83)����/�}=�h!Cr�E����'��S	+J@��kb@L���	hG�S��t.a!��JTE��Di3�#$x-8�P"S�x!.���Tz���3xz��}��O_����R"([OSL������qwn=7(��7�C��ay]���������k7RUQ6]2p����%yj�����������Z��w���L;-+�\l���Zyy�#C����#���b�T�s��>/jk��MP�3�d�_��������tv��PmZ�G4^/�A�h��L|<��y��FDj�4$ETz���g�b����VL�1;����Z����f���@%���#�a�d�E$�/T���S6�"�sU
�FX|�@D;�SS��M�� ������&8���uY��v"^�g�{��m#{����t����:��������i�O��8CN������G������{A��p"}��O���g2�<�|�f>/._u���Wu#����% ��a���Iy����L�w��L����d
����(OA{o�Yfg��	v�n�*:��n���jU����	�XNT�2LR�J�m��4��L��b��b5e�6�����v9�����I���X{��o��^��d�l��,��"����_�@��8��	,�a��6�);�j�kp)���ia0��	JG�����MR�������7�9<�u��-�T��R����h�hU�u��J\�QP�h����u/�����`�'�.,�14���������3��F�jEpdE��Y��o�'tH;t���i�@[Y5K����h����aY���0e����I�����������	t9���[�E[�6���
��U"��`�pZ�xg�oc��8dp�sd������_���r^��t"����K�Z+���k(H�c)��z�8K�������Ho�}�[q��M ��N��Z�/n:)��-��������o�FwY�]c�.s�2���d�����s�Y*$�#��bmrn�&��5��M�U7���z��}�(��H�bN�u��P�#g�5��&�7;���B�F�ij��{!1��Q��)<���5qn[�����.D��#i���)`��	������i��KB�|J�C��`Y;5���z���t�c��]��-2�kZO0	����Y/���/�8K�������ZI����-�l�")����J��sen.��.e0E>SV@!6�"4�a���5���7�-�����l�����8�DK�
;+���;��-�����8*jQ_o.���O$�5z��Z����\Q��Z%}���w��PI8�����lv��dkv��qs�=��8��:WTi�5t ����h�K�?�?�l��I>������h��z���w�����cE��X���Z���zjD�i��<$Pq�7
�a����$�����h>����h�X6�����y��2���9\��w
,nc�%WZ�����h~M_b�$�?/2e�>�L��D�q�J�,[<�~/}����~������Gg6UwA ���k�>@*o6=�����ng2�����G�'�g���������]�������������d��b��B�<l^��<n��_Q7���'��o~A(*�����~<o4�i ���O�(��ut�Jf����1�)^fQp^��)��ny��:���H_s�B=:���m�Df�c��m����M�b���$����(��!8=p5��!=��>,3����_h���e��r��z�-�;�O	]�gls�.���#+��uw3��zP#�;j�8��n��s�:8�fN[�&����
�z��>/2e��:{����8�Z�(~��iD���H�G��+�,�]TY��U��)u�l�&��d[��s�H
�=�N��60�5����!�*h���N�����X���3{3!aE�<ew�MG���#�����l��B�:K��M��l����P�NJ�*X�&�+�U� ?[��e���!S�v��8�����&�����QYY��"d�[?�"uDU:�<!�"l�8�|�y�wG2���Zu�����28��E��;��?����?Zs8^�n��z@!Yq��ib��tAt��~��y�y0Tdx� �u�1�LTu4�S-_L�~%������D`
�2y��u!�����BZ������������#U7�<�����Zr|���XQ�3w��y�Ld��U���W�+5�W�����7	l�Z�d6vUCV�f 6`h�����{�8�	,����,�d�A�d@#�����^����}HLH�w����C�������.ZJ�f.[���@iX�
5�����?.E��&��Mp���6ggZ'5���^Q;S�T]��!�Y�*-�C:C�2��#����J"������n<�iE^��G�4&|��U�E�� )D��"M����6�����8hx3!��{7�-�]'���bB5�������������%H(��?�a�@���o�&U��&�1����y���+���V�^�~n,��4�{�\����p�$�x���X��w���\���s���~M��������^��-m��V^h��%��L�&�_Tf�#�V~���Au��g%E��i�p����=��$}|�
��}r���23��;��/� ;P�����<����PX	'M���U1�OddIM.��@B�
��$���T��+����}HH�O}��]���:���:�y!���??IZ�J`�,>��#H�
�����$y;j��*��Em�|oU�����3��#�.ov!0�d�a�b���.�����?�ti����D�E�NU�Z��������-�q��H����./*�k�al%�l�s��P����SB�_$�F�D�	�%e��q|�ij�����������4�J*��*?_eE�dD�
lPp#M������tSo�O7DQ��d��
�������)a����|�H��9��8�%�	����;L�([�3ld����i���2�o'���.������fwpn�+m/��)��_M�C����E�X�S��5�`�DQ�O������+A�EVSk���D%���n��9��o�xG|�c��aA	��Y%?l�Y���f�#v���Z�H�����M$RmZ��Wd�,�������7��+�Pc�:�������"��}}�L<1F����;7N��G��*u�M�!�;e��|��������2�}�fQ0+�:�ss��{�a-K����=������:�x����������8��<�{NN�{s"��jls�x����
��z�	�H7K�T���f���B<W�'�kl���C��l������V�K��7��lnL`AQ��*�7�1�����Z�~��2>�y�Y��������q�M�)X����x�����MU����X��;M��"�D4��l�A����dv�#'[�I����cd�>kM��i�����W��L^{�7b���qy1��n��]d�:�@������y�}�:��Ci��xf��bx�>�����:34j�G�P����6LA�U�3��,�]��|�������P�OzJ��<o$�
�������cd�A����F�q�Qq,��X��8*�bV��P1���[����,(�'|���$B/����E���8������������[
ox�_ �vlW�t����5,-����71w����T���!��fH�=���s�3�;T��-������F���k`k57�.�5x��U��\���d8G�O�_��!�o�G��Gq$U��e`�0q�J�|��Y���,�������V��^��6Zu`o���I� +�w��"����3�OU��IC�Q�	�4]t����aH#�1�i�^	���f�*�yX{u��Y��9��?z�����.����L�a��	����2|�S��u�o\DY�	�����2��/�t'�r�S��^<	�1���;�0<U�w���r��6�W"q%�K7�{F�t���]#t�2�/e���?��������l��l��E������G��
;��1�>>U�!9��]3���Lt}��7�	��n�x�#��:�Y1������I���:�/S � x~����w
�#@�u-%Qq��"����% ���P��T		@��8���
��op;�~�F��A��SH�r��iF�O�~D"������v/�����Z�nJ��W�u]��J�b5Xv��A�^j��X��N��V��_Q����J���u��1�l��v�\��SIZ�]���8����>A���ugH��0��B;?����(&���Fu$�	{��ba�umMMcz�i��5z�]�`3G|A���&�a�w��3	��Ar������&�l���6���n%�#���a�g		P#��U���T����7�[z����.�e
��8��\B�ND"��i��b����w�PXD�����r�4�xJ�}b������_+��*��0G.���B��	`N��dq���)W2e�������y@���`%S���:�]���t�����(�X����,��GBar��I�Pc��m����1RQ�|�h���7�I'iZ�	�=��B�|]?����Vc��Q�\7����)��6�a��|m���(����}���V�� ��{5�j�_����<���0��+_K6�(�~���)��b����% QZ�i&@��F�
tq�����0v�������	� �;����S
������[�g7I��~#:-P�E�DAk:�I���@��TA��`���q�@���}S&�.;���FPB
$��#���S;M�}�'�4��V����.��u0���BOf/o4����.�XA�(-7�`�]��MGd<pt�;��?A���J���	D����Z�����Z�� ?/���2�������wq"
���~Y�K`U�")�`s�|�>B�&��%Z���A�6�$[���uD�X�����E��yY����5D���#!��r��|C�v�����>|�0��M&����,��9?�	�	P���V����!e"�U>xf�$��,�*������$��/�/H��1�l�v���������h�-,s����C}�L.9�V?�LY:��)l�,1J91�_}X����s����v�Zs	�K��F-�j�.@���w�����o�7n�	waG����9nb�����>o�������n{���".���B���j���bo��N?������62��"����M��&1�]e���j�/�7|��@�h�2�n�`<;
E���H���&fE����j������k�7�i%�Q��I�.��3���[�:!��,����n�}tKK`LWj��E/?0Gbt���m��*��a_z���
����em\�.�y��w��P��t�Adoy���R�|�;��~g��t���t��~���+i�@�+i3)���]CA+
��P���ct"Vq�h���,y�_���M5������AK��
A�����~���(����7r�7������E������k����8�����
�)�e���+�^���^(X<lX7g���z�7B�{3<�Zp����&����
]�M������+�4x#��X������vy�$������]����zmm�&���J�I�_���I�@��Y���y#x%�����,��"[����0d,�x�V���C�S$Y�`��]{�I1������[�yqUoy3w:������63+	�*��q�C����kEw�?[��Ck������$f�X�
2[��D�R���.��@�*]B�E�����IUY���R����H�Z��6��x���Yo��{L���,[���J���5]���?j�������>�������_��?T���<�1������e������9���=�9�1�	~�x}���]�][����V�����_�el��X�C)�C��Wn�0�Z���
��1�*�)>��/���0G
3���+���M
E���Pb�r�M���S������|�y��bu��;XK&c��<p(�u��@A��)bi���<a���"3������O���0T������s��y�<n%�>��=\���G�l�$��"���q��r��, ��g��N��6e�mt�I�S�6�a�*��X�L/)r �4o]��Y�d��9���VJ�q2	H14A��S���T��q~`���)3��)�
�������L���=4��QX-*?/"��wv(�	0��H�|�	9k�!��m0�C�\�-g��"��Y���d�7\�Y+��cT%��8 )�'RCg
�y�w�9��/i��l����������
q�h�2���8(s��_&C����;�-����38���D�����j���n�0Q��)gQ��2�T������m_&����(B�������X�e��#�AEn�2)���Z����G�_*�?(H�����f��NHm]yV2EQ�m^I5�VMw�|M���`��R��;�3�������<�}*��K�bq�'K���K@Jt�`�������W��iC�D����YY(�l��-D>�>��u����Y��3��k����`��&�~\,��B\#a�����U����-����j�� A&�q+8
U0q�s�F0�D�F���t�f 	��p���n����l�l��E��.dpY/�`	����L;(���P�h�t7l���$�����0�x��Q��A��������A���?6�`��V�a%�j%�h��	H>��������E�2���5����e�X�l��AUvC�����8��|�G���C��7K���$a��\���<�g6�Y��{��F�
L@��c����5��L4��@l��&0����@%�
����
��[�	L�U�0�*�0��;�#�r+u���L��"�[<J���	.�W��L���ct�s�}�u��b�~�h��/D�YW�'��P�����b���0�+���gE��
����z�kSl_����iX6�� +~�/tj��H$���wT ~��YZ2����r$l��*�$�'�Xn�%`!L������-�}"n5�������B�^d�;6D�w������t���:��}`�As��C��0�9����~!��G�>������/zO� ��pb����I��
e�\~��)�/��3a��6�$�)�����U}dL�/�����
WOY����$>i��_6�k�yq0�k����4��d����n���@��)���.ps�W�y>����.�[�/����}�v��q������r�b<G�����vT���D��m���U|���&\5���&"��y[�����M���L
��B��p���WK yR�+�
�����cH���""}������� s4x��$��L���uSA�jD�Cu��&7���5�L#�X���}$.w&LL���[(���'}��`~ovG���/9D�#�D=��*2����r��)IX0��4�&Z�M�	���Fg��������L�����,G�����L&s8��~K��$�1��TRU���(J������]�@��	���j�X��Qn�@������$��u���Me�L\��-�@�I?:#)j���0}�@�+#�� U:�IF�[�7Q)���5w�P=x�f\��Yi�V���3)t��?��	�J_�$�<S�4F�4c$""�� ��Y%������9��"��L�l����Z��{��eu�M<h]�%�v {��_L���i����P��P?�����D;�S�y[����a���������$+�i��������RIN��L����j��L��Q.n�:����)���8�MR�[dX5��O�_��E
�lcIh�Hn��''t�I144_�'7���S��Q"������������:�r���9^G��I-���#s:���E��#��e3[����:�����()��2��(����j�df�f8n�: Y������d��@�!��3I���)�q3�1���R�~��D�E�(�+����'��Y��&kdm&&Z����R9
k�	#��pW2x�Z�g����
��_�� 3�E�p������$#	�D�o��Ey�}��`���`j6����� �?��Fx���H�$9���������N��3�TEj���pU��H��}���?7���p�c���U����1�m���|���E.q���-��UITS&�]�I�k��q0D����f���dbe�\�V`����quXfZ���9Re#YHh�-�I�����g&��"��y:o���'�B���@u�-TA�y	�+J2������!}!S���������9i=4���������X	R����g�V���m���(�j:�%�	d�y��Ps1@��,w�s���,�
:�2C.
4��|-Iv�����B���D�X,���G�[�L�Fk[r�l�����#��XL�=�+�W�^��u�v.[��Z���$:��3���j�`gb���<�UH�T7
��KF"9��w�L+�};@�7�&S<L���M���w�P�\H�zH;7��-���+�"*��y���J�,P]!pU92U�vC�����%�d�X���e�����i�n\��&A������g��s�I1$@�%��cG�`�!N��|����������(�D��_�>��bcOC~��s���4B�JJx����6�!���XFH��`�Ng�N�����~�G�m��Q�� -� N*��I��������������60 �<q��(Q�a�&�fD"��{�	�0P�#�M:�F��RD141TBT.�,�h �B.5%�r���Kr5Q�X�v�d^�� {�&�]>���@� ��������o"��x�f� ��,r_~����Q�p|atr5��@��P�Krk�~J�m�pL7�l�����j)z���+�B�W������.�S�9����`������)����PU����v���(�	8����'k3$��3A4��*
]�DJ�5dl��"j}�J�<y��\�o�"���)��BTD�P84�[b����@��2���G%|A�O�Roy6���"(��ms�o��KF��x ^��G������=�7�W���p
Ve���
"�P�J@����B	`#��%�C���|�Kq$��$U�	�c�F�MD>�hl���
��>yV�U5
����d�>�ZI��c��l�.#m�q�z���XL�ui����/9�-U��e�0�	���n�UR5����4�N��p�^H�������~�1��J��x+�
x^��*��U`-*'�^��X�2��v-o��u�2���O{jC<�h���H����+����(�t��
�1���CN(~�T��\,��/o6���v���>�n��H���t����F!��3��l��/|!���q�����8��X��E������%P�e"r"�_��P
�:��V��-&#���i����h3'�2�����X��ta��:�QA��zV8�Eg|�� �c`p����e"#"�u<��iC�q�_(�aN5
kg�!"�J�M��^����Fj'��F�
*I�����V]��n
���T��R	�7|�X�>�z�7g�7��bEI���z���p��Dd�&���y����c��C��n\��qP7v��{���29+����I#�I�w���G� q�Q�K?@��'������'*��}�ju����}�D���U��j��=�3b���l��4��K����+6��������eMDF�����`�_?Y�|G�o�����������6�����w91�w������1/��x������/���-_���mO��=]n#]�.KS�,b�<W���"����.G�<��E���.�+_���}���Z�/o�r��}�������"��g�5����/���*b��R�B��O|`�l���Z���B���l�W!��:==�L1\o=]�����u��������\���~�����}z�tb��R�Q�s�����u���uQ����\�����������k�i���pt�����\zM
14�3��si�58�Ae�dd ��{��^��}y���Z��g���V�Y��U�Z��W���Hf}�x�df�t1^����u}�����Y���p�M��b�n��t1^7c����?]�����.��f�O��=_���[�?������K���?]�����.��g�?������c��S���O�����U���}�����e�/��=���]v0��u�����e��/�����[v.��m�����e��/��=���Yv,��e�����e��/�����Wv*��]����ne��/��=���Ut!���'�N�
���;z5y�������]�=pp(�z��������u-������KDp(�zKUg�]�����'"8v=z��0�������\���� �-c��,����$�Z@�=�&�T���{�$�Cd�IP%�s�>e�0�AGE��w�-��/���r�����������)F��L��Vq�:��y���sc6�����*_�!��Av�Irs��',�|�>�B-����A�ar���s�p��W\�%�h �~���2A�7�V�Z6��o������*6�|�q!Qm�����,@1�*��y���at"n�:��#�2e"	�$7=�v&�8T�E��L�' *��$��}��������(��:2�6���������1e	OM/�G
�E�E
{5�Y���g�.{V�9i�tO*k�}q��P�|H�d���Ce%M���8�������w"/���/JV;���?���a�������4v��Q�����F�������v����:�1yE��?Tf3�!�mr�>��@:����
Gt�����(Ok�751��?$���T�R��G{� �B�TM���"��,1&3��?Ac�����r�cV`3���Yl�����>���aC�tCjkv9{}�2�8�/��']]�?9��������:�y�n�r�_?�U1��o'6Q��� �S�������ZEM���Hu�y�&�_U��4W2Myho�2���@G��"���!�u���Qd���W�9���5r��D~��$�}j�kqh���%��4�
�v>�y:��D����*�U�ZC
�5�wD��B��DY���PPg��,�|8���q��������oE�G���u����`�O��~'ygwA�o��^�	���HC*� ���:A.
��OyZ�������!3h0�"V8��w��,$�U���fR�Gd%
���F
�T��q%
���|a�h��]�4��?�Kfc��y��4Md������(����"[D��vC�:���zD@�S�<���a
T�+N�^����7+r�^���4+I�T9�j�������
r��q�I"��Dy��TW�r��I�P��.*���	�0���;i���*�
�=V�7�E]|������mA����eL��M��&�)�f��v�7,��U~^d6�j��*9\L��=^$�S���>��s�,�tSu��AWC���b����@��S�2�fVb_�eTg������'��G���C�;�|����;�&�KBWP��7�x�r����h�O��!�\����Qno�o��{U��������o�����i�*�6���n���i���\�p���Z���H;�'���M����D�����yq
��H������������?A�b���6������Of�h�e����"��Q.���#���h�$�Yn�a���x�`OT�4/T������w%2�_������(E2����^���/+��?�T�������(�k�?��h�\@��6�$����O7%g$��*crh���5��*�F�8*?+)�����?�[�!����;w1����(�"�~��r@H�</y-�xL>�i�$��
�X C�,ZqM�����V�d�R�$�%�
�TMz�1��9bnV0�@$����,["W����g�>���&C�W��������t���r��vx�K
()r�y�QS�#�bj{�}�Y�"[�H�q���i^��v=+�~��O�rZu�y�=%��Mu>��yPO��a2����b��U���3r�1y�V�W
�^6*R�A���q��J�,z�������k��.�vk�>t$��	~���q�i�;�|,��5&@_��'�p�o����b,���D9�IZm��� �P�i�w��0M����:�*i��mp��WS�0;B�qQ�g(��Gt���0�����t=�@�^ ��\�z�>���J�$AK%��30q�5����C��*U&sbW =�<��dXW�P���&�ID������!3��{��7��V]��A�YV;���j�:���HSf���!��?�����4�t�����DNX���
�P4-�m0�����'O��;@\�43��X
�A�x��Y�2g���"�����g`<��Y�D�����>j�T��/!^���y��~!fp��b1{�!�y���/&5�k��r� +�q��|���,@�ZR$�F3��m�d
]�;�O��CoTV���Adv�����M���[�3�V�|rM:Hq��j������4�<[�t���r����������L8��XL\��6\#}��zp�5����i��S��>�X�Y�m��Q���0�N��7��.�L�%'����*M~^�'nGyfV��s����F\g����KdcNe���:1�?6�b8u:w%w�w�2
�x�<~��j�'�WC�=�R$�a�p$bg�^�����o#�s���r�OGZ:���]����8����B
����?�����k���pq���_\_�������W�H���.�$V�2�)�:��������}9������d������X�i�fo���������x�=���-��ST�P�f���`����������������VwG}���H�0=���3�<@N:�"��Q�R�
/���2�.;��0��<G�'�K%�K������b�x��z������}{W�_��|U=����8��"c:�������&O����������)���^���]�5�k���������t�����o��������&���f����P{���U�%��5���~qY���pQ3����9~��o���E��^y
R��4��']�U~��;��,����a��q�	#��HK�XYT�b�_��TW���f�*�oa�;��)��XV��w/*��BEo/���XV?��=�O�D���h��X_�n�Ha%�����q���[���q4t��/$@�rf�U��w�p��~�',w�7;�eEI���g���T���`���v�����������Zm�&����1;^Q���0���S�� "m?�i���L9�U�s�)����LyEY_a���������q�?\Myc�,6����p�t����ko���x��L�/$�n0A}p��`
|�H�q�X���|�C0�M��^�-s*����*]�n��9,�f.��o��Qk����c�>��2T1���N�1�d�w�
��[����F�����)|��k�-����E8�����!��ch����0���N��|�5�t�l����UK�u�Cw?/������ ���V�W����SEqO�GvT����Qd������'8�#����<cXf������p*���]��Q�0����� �O�*�������|8��3����F�l���4����)m�
�[�?�]�~�E��l��Gg[n���e��u~!�D��2=�����
DD��|r�u3I��)��O<���������+���uZ������w�+V0�����s�<���n�

����:�j�v��j8;���o�y������y����\�L�y#4s��c����'������>�t���p�h
�[�$[�����Q��G��l�+�l���'����QV�J���Bm�94�������<3��c���,��>V��WO�O��u�{���=]�u�{�����F����F�gE��}�Q�WhvsH��iVm�"q0��j��?�st�q��m�[n�����Y�J�47O�isr���`�s���7'������!��������lER���'Cp>$t%�q�_���y���0t	���������G�%���<��q�������CmBo���p��
����0l�����W*[���x��W*��>z<����+����&�c��b��"�6`O;�8Z��-DG+���J!Z8W.�}�����-�)��c��|4�������(�E���a��$����s��*�7�rH����3xW�7hZL=x�ea�nE?���������]E�������!F���{��0��"��=w���L�*j�y��vv��3�Cb��-��0���VM�O.�R$���,s|������@�h����`D(bx	8���
��^�*�8qi��7R��N����6Ut�N,H����e���(����3=�W��������t�&�-���8���+L�����
�T}� ��%���M�S��6���xP���E���A�g�	� ^A-�'�xEaKW�8���\���'����\���zr�/��8���^�����	�,��BlV�e���+�Z0%��/��K��X.7]��'�h���D��}���������o	��,r��@�N��hx/4N�����J���DKiN�T�+yj�dZ�b��	pcz=p�'�9����L�{)�&�EM�m��6D6o������2�1�(�"�ez���/$�Hy��t���E���k���o��b���`�2��+�m_xpv0+����Q|S6m���������7���D��+Yd�����G��R4\�a����T��/$�=�y�k ^��N���g��AZ�|�}.O��:��r�X7��nQ��*��,x�_���>�,�t�Q7��� �f�l!1������u�F�m4�XW������ok+j�h\�Q,^���ghy��=<N�o:1\�.���J���o�p�N_Y����|G��U�p�s�M*D��~��^Y_���2w���Hc��_Lw��D�������l<��=E�UG��9dDs+�F,q/���"���)���������M#��AaO������i�|�������P���[(\uz��W�Z�X0�mp���c��13E&���{���j�{ZS�
�e��/��.�W���
R���*�amR�D�-_S��e���BR��`��E����<���I���������j�4����v�8|�|3�Ro��w�N�������G����G�����6M�=������5#�*��H���������NS���u�������~�����s#���l�7�kP��c{e+J`b����R�����z��}<��jE,=/Hd_	`�L����
����	8U��_�dV�����9fX�	H*S��3<t*jJ��3��4^�-@?��3R���\j�H�IqL�����/V��a����H����l��
�p�("�B[^*i��E�������3�>m�FE�����6][^;�1�n��<w�����;)���46+��]����,����?�Pq��� *C*�����R���2Z��=D�
\�������Dt�HDN�a�o*wHD��L�J���}�p�����H�}1!�a��p�Hs�U`FQ���6�1�<,�z�o�(��<[�e����l��x����~-�����*y�w��������2%�!Zo��
6i�o�����}?"�|d`/S�������C�h�l��t�^|���+�
������3��$��Z�,��,���R�jo&��k5�q�UtS���{�Xh���
��Io�N��Xl�3W���L=eJvN�����Bv��S@�� /�����)��PV~#�;����|!�iFWIk?����q��og����U��b�����l4�o�����[�<��D���2!���*�w��mS��:n$������si�T��{����������vF+��T�8��_�F��-��#)o��H-�@�pC��5�X�V����h�e;q��	�s��/�������\�^��M{����G��Vp1^e
�o���>TQ
�P�_����?F��L:��u�kE	\��o[�NLQ��L\�y�l���
����2�4��'����(;w�"�l'L�He���d9t�*>o�p�����l��c�
��o8 ������H�O�gT�xr�r���d�B�O��O��%fni�_G�A�b���
���ov[w�����L����Y,����+����������dL��I�N��/��x����(��_w��8�}��@�;���:3y�M!�C#�c3��5VcB�x|t��m:����
�'X��w��< <��y��|^%���O`�����HF��;���$�k���D�������|}�lY����,jU��
terz�:g�^�o��i�z���y�7q�{��Fct�o2jh����zk
g��|��v�g��N�,��B{�TNw)+��p}�}�?_/�N��{��gY���
��q}2���G��}��k�>�^>A����7�5g|*S��������z�9\����S1$\r������|�/�n����y1��X���O���/��u����^���sb���iv�c,�.��s��?:���)$D�>�s�frW�c��%�x���6��Hk�����Wq|^LS��A��c5
jJI9'�g�7�\����d�/��.;����5����y���:x�I3�����hR�o�y!��
�O �RV�������ZE��N�7~�YF�*�1cf�Vp�Xm�d�iMi�'T�*�c�TjzP%�)]����N�H���h��d�s�~�����'d=�E��(��"��8]$��0����?/�]�����v0���M�;�}�^v�KEMO:������j����oU���"������x5v����n����r ����qE���Gi=6���-��J��<q�%��G����e@?��/�~�g���+j+�?q�����	�Ou�~���S~�%;pg �������A_D��:!����2�T�����*es�fAZ>d����7����7P��[�'V�i�WZ�wlB'vt^�����pR#,�i�b���m�`�0�\�vmK��.������o�
����T�<�IE�rIF��m��y&I��GWU��/0Ns��$OW��rD�DC,�Fd.��0b���7�����#O},@���=����
p[�������5�������m�}��~f��(��K�.��f�y���&*7�66�X>WD�v�yA�ds9^�?����=-��!�C:�c�.l%@��}��m#��]8=��	���:&c6��.�"s��h\����.�!�w_6\�6o9��d"�!�uG��E���>l������s	���spjc1e�yaR��p����t����_1x��B|����
�*h��cnu����i�>� ����'�J3�����tl��u���(��^��������|� U����N��%����������0~��u����3����+
�Zm�v�:��{�����4V2�`c��n�m��=3W���i���O��5�~s��\m$=��Y�����<�4O���)A��Wd�/�5��s:3c~G&��<�"K�s��3J������\�������-"F�\!�#���?�=���5������4� ��N��k���.N���y��s�f��F���Kc�;�3H��3^���u����w�����H���4�$�w����UL�^���VK���X�B��~A	��Gn ���N�Y2�����%�y%j9\Win.W�O�DLe�����oE0�ZH���(j%��S�6bd����Q93�������E_"jh��)����oO���Y��:�4��i(�~���i6�AN���T���!�?/��`�MX���������X����FAZ%����iY{HJM�M:����n� ����`S�[��b}�-r	��z�t��)(d����O{�����8�S�X�t� �	��k�z���bA�5;8�������2��:(� �����E�c�l�v�������R;�����lS;��?/��u�f�(�u��=��a�=-(��<�f���	X����[aNW"2�!���mi����"7���q��S����1dL������)-Dd|X�������)�m�f6�7�L�zg��zx��	���A��:Y���=�n�����������]�ZE!�%����%-H4�%�����$u���m�/�Ra
V�{�8�������Z���f��-iE���������b���	JnI_���G�����NX���&��m������K7�p<�}Kf�c�S�5������)]�n�l�����g�� ��;�Io����lHM[7k4Y�aF������Z�8i%��*���1�b���|���r���y� ��
�T�"[����}W���N��cu<
���p����@��{H��EA�!�Lie�GQ���#�P-��L%>�J��?s��1_>��c�gl��|��������}��)T����z���V)I*CQ�@V����g�?�O���f
L�"��	U=�q��i�-�!�RR��,x�/I7���i9��GV�L��+����U���,�����������4g�������#WyS�j5eE����	�X�p��6����nr]���R������$��$����I�s�)���3f~ih��������������~V��S�(hl�s������������G*����+qoS��n�������U��e� ����c��p�y[�*����;�:<��j�=TXi@�4+������\p�jIx�cZj�BZ��#�VD'%1���i�����I5�N��WG������Q�c��2�������X��u����C�$�t>���Am��Mi���y�X,�NE�uH������;%1�T��3WRg���I-������q�t�I
2�T�}��BS���=ST���3�t{1sL�t�T*�)�W�9����s�JC��W:pF�J�6��"�����zd������K����s��<@�%��+L~����n����%{��Y��-
�t<��<z�,q��B����pK��6wB�o�-$��N���5��(���G��&��RO�5���$|����uy�<������z�R��Au���J�
����`x��@�n�H���_h�����TP���&i�v;�A�p��N_�SP��VNO0������<�9p6D�3n�
:��d�Y~X���
xd���D����'�Rp�2���o���#�����O�/H�7�H�	�Q���Z��Z�����i�7���"����z�m<�w��D�n��eN}*�J~rf�E��/�����J~�f�B���������������������d�Vv+�E���L���_�eA<c�����e����+�"���bR�q�"��tz������'r��
��������}����
Z
�7�A3tY��_��6Z�����}�����u8�������{(����n]��f���m\����k����al�����	3i�IA>��@Gj��Z���������H�U��a��9FC�T���2g`u�y��{��
G���9�q���W�-P�BbR�Gh8��SA�����W��
�2�~��i\�H#�M��^(d������3g*�y�1�����\Fk 1Xs�c��Z�E�i��Q��L��e�3
RTdy����c���hA1^8D>�b��eF�+.����]:luKAiFA=�(���(��|�&����kA������7�n���2�`�Gn"_����XI��W�(m�����M3s����'	-=��d%^Fn�����}=W�)\���x�������v=qb���������d�O�!���9]WQ���X����xr��}-�����Z���?������}�k��'��+�_��Y.�~�E����~�D?ki3���~�X��}�^j�'��k�<���&�4���5���~���������_������x�Sr�������*F6��%1@9(W�O�_�������&��=?�����.�(-����x_�?�����������/��C�_����������j�g�����7#���~#�Z7����[���qN%"c����6��tD �Dx^�����.�?tZ����t����B1-D<S����L��rb��4~�Q?w�_���y��Q���<�����K�I����N�>m���]W"2�E�p��),q<Q�7�n};�K��?�<���������d8��u��6*����~��<!t%���>�(u��vnA��$�Xf������'�mKTj}Pa�x�s�]�
`3�7I�o�����n�J+H���g3�{4�J��u�D����w�4����XS���n;�?���w%-��a
 ,GAp�����CMZ�u�Y�
�P�L��u�[������������x�>�Zb_��s��++Zdu�����	>��
�H�m���]���V�"�\���|������v�L�#)�V"2+{b�C�����`�&�������QI�,Q�<��_�8��YI��l������Q�-���P	\��]�"��������d�+�����6����M�Ze��&�T��2��Z�,�������x����.�a�u)��7�����}������M���u[L�L����)�u���)8�<f��u�on+9�b��
�Q������|*(��c�jbt��w�y��{��)������y�n�L�>T���������i�`���8Z������<��,qEz���e��M]��/?�xrE/�r5�-����r�W8�r�hG��|@���,���"����K�?��0W�^eA(����*����+�P�H�
K_���$��7���V������Ko������N�
��������?jo�*=���?^~%"�o4�nQ��!T�����-�v3�V�2C��|��tz���p��6o\�-�{�#��[�v6�:;q;�������X�����&��9�,`����h5%���v�PQ�W!)+���������~�)�����9������]��G��Eh$�Y�n�p�����hA�{5�/s��!j�M{��f���B��iyr�|v.�V�$}Mn�^�6Z���q�i�i�%�U���"OsI�������|p>�p��\<��`S�w���/����m�������k@���{a���u?5/�r��o���R���<�����4hJ�c�BD��������0{r!Z�#�+7�����	�|>��3Ob`VQ�Ct����S�|k����_�`XC@���;���8���V�{�}N�G
j �������)?/$'cMNA�7�l��(H��GW`�f���N��x���B�wX����T�o*S��Z�o��_!!���s7�������\�g��1"~����)��"����s��$�9s�Q���u�@\��m��P?!�L)*5�_^�tCR�J���=��6`%Y[L��
����t�m�w��i���
��������fl�����'��
8�����0���+0�utaC�(�*�M:-�iE~~�BW��T���e�=�X�83b�YQ�#�Vq�aH�GT$`���Z�]gK��hE	��N�a��bZ���^�Zi&4��o�`�V:lt�q����}��mq��Y�f��0"�GA�JB:��X]t$&�������=�O�v8W�L��M��e�e�D��:k8=D�n����I@E%a��'��A!*����w��v�L��A���EO#���e�G&��6��=��9������d����Y4��X�\H��f������Ddo��������{|*���k1"N4���)�-�&��)���BTqp����]��'�8���	-3s�I�U��Ne�N�"��J�_��61]Z�v,SL���Ti%"��pX���J�J�T���!��p�{i�d��{��2�u������+Zd���m���Hj�����������������I#�qd(���
�z4<�LEenz���Q�	��P��I_��"�����8�q{���� �����6h��_�	�0�������)^A�����o�C���
y_�XS���3�w]�9�/���u���L�T���d��A�����?�N���WdQ��|s���v�@-�d�����+�l�����M�s����n��.{��d���{�a?v�u�����uAM���-{�O�!G����� �a���l	p�@6��V�>���"�:��7�<�� |�-��\����no�1���a������[�}��63[����i0�2�u
Y�zo��ng��}����l�bU���n�����eD���:��2�D������l�k��3Yv�;0��j��mJ���o�&���e��/��:4`�u�N�I���J�&{2�3��������}	�i3�AV$��hl������S���Rx�v+�}W����N������n��?����-��X����@DdP	 ����<�>S`�e%!�f�=H`��_H�y����"'���@��x��
��sf�������U���U����'8�j��C�@X�a����Q�H��f�0��� ,M�JD�Y9�������c���r��X������,H��y�l�����@6��pZ�Eg��o��;
8,�����"f��a����N��De:�G������J"��
2�,��G�B�)��E�I+����m���ES��6��ak�/�.i��-�j>�?��V��6��;���u���=(�M�az�y�{1?���i'j���%z!���e���0���6*��4]���r����^�F�9����J����456��P,=�|�D.�>��:3,$p��^����zbI����)`C�)���i�q���e��`�9=�`=�J [����������S���S���^������fc%�W�mX/H���_�o��A��$K�$����`��.(��H��]���\�c�T��|�@�q!t���	�1�A8��7�/�������/D�H��s����D��`����[��
	��P��zO��"/��%=������/���=����Nb��@��h������f� ]�~w����>*Q����9TD[����ZBYC�����h�[�E�/�l4��;����7�mz�cA�����\��B|m�X���u�He���I��O��!�Z�tf$��&&I_H�m�	d�7�'f0�t-KJ2�h�����p�:��|�����G�9� ��=	����\Ya.�F���k�#y���""{��`Z���v��U��������������Gu�������nE	�h���:���f��PO��E6��BF�cy�v�;O�~!W^�3zt	'�BTdpi�o(�6WhT"���"�#�qc��%�������PTN���*��,Xs�B���<^|�G����y*�����1�)^aY&*�h
~c[^MI]H�7����V"��m"�����X��B���Rm��^�*S�!�"p�P3jJ<z*>�~��5GO�"�&��0�yM}�-�;����3O�9B+b����@X��NK��BZfa��[M� K��M�r!{�n��9��[.��k=w�	*a�������am�J�a"N�oo�6la���D3�*�;P�]L�����NL���#�c�����&E�K:��G�z�?w�+�9p����~�0z
h.�}XE�2����f���`�"q>��\��Q����b�O����R`3�p�2�&��]��p�-/� ����[����i������������J�O�;�����Tv��E����_|k�N�!��&�HE�X���\�n�����uo������r��E�$�L	����q��)���>K�g?����������(�}�@�f�e��*�c���g�!)V�����s�,�:��}�?yAz���W�l�IKo��m���o�������B��o��q�������p���P����7aY��-@���
/<�� ��S������H�c^��(������z`7�(
����mS��O9�1�~�,���V��0z�#4K��r����W���fvh����]��4U���6��pHV��������tX��d\-��������?�N+u-!}�JBfLc�zb�Y<Qy�����7Fw,	`a�J�| ��>�BJ��?���M�P�D�QI�oA��5�z#����(=�a.{E0�����v���y�Z{1�J���f{�t���1bQ�x
$K]�$�l";O������*C�n�2���,Zd�4�����y�(S���i&Z�: ����+l��*[������:����	��zg>%��	I�~Fp�� �S�,�����"����q��u���.r_�7=���@������D�������'7&���0���jU��,
��rKwKk2�3��*���	�Q�z���K�q����L*�c�'z������<&��5})�w}�_�������r�7�l����G�S��U��S�����"�7��*�
+�����s���vm�89��,bb�us�Z���nxSS���'w�&q�����sD�~A�x��u��$��W���z�UP�.KuV0�'J����n/6�o6l#�Z�
�558����k�|�et�?YI�+���W�G����,��h�g:���q?vog����c�
�2�g"��@[n@�_d=�-����w%mj��7��,r��%������=��G*�d��+�[
����,��5��Y|�,�a����-f�]T+�p�i�Q>��(}}{=Z��arPl���,OCZ4�w}3�i>�tq�L��YN�d�;'�2W�GU��f�����sp�>DX�sZ������	S�D���xi��Y?�K�l�����Y?G�S�.=����
�:�X��f�i�,���E�G
>
�l'3��2����3� ���*���x��Y�U�4U�W�:
K�(�'�]�E��,��u;>���n-W���2V�9���d�OK�[���N�|m�0��m�|�>�k9�yc�a!Y�4�$l�C�� �����>���,��1�I�O�(��UI��irV�O�S��%W���7@�+��8h�.&j�4���~�:2�����nN����M$�Z�1����at��
q���q������K�$����m�����W�K�P
�V�Sd)��������\���n���\��zY��-�����0��:xx;�����������<�������GCnQ9!��������VK�����"�$J��stDz�:I�!��e���B�*������K�^���6v���xX}��=��������E��n�#I�7h���L�?	���7�!�8�GM�T���!avv88-}u�!~��x���k�;�E��E�]�Vx�B���xw��7�E���T�M<�}) ��P6{�1����*��K��!�&e���\`rK�=���=&��������J��<0����q��/G�Q��!7�q[�"�<iI��C���������B�N�h.��.�E.2��]����_��&��NE�a2��q#�����gD}2��/��s��3�m�t�|����=Y��=|�F��h�]�+������uGW��D��#�l\H��4�g8�H��FnMww�N������O
������f��q��RS3)6�S�1�������P��1�U~,����K~b<�Y���F�l�<GHDld(�oT<[/z ��X���d+h�0?�2��'����Z�����j�?��������I"��J k3���M��H�\�E��;�SD/�����Ilcw��*"��s������?��AF���r�q,��:1��%���n����>���{`����"�pXv�8�k�����n���V����isq0PZ@�zQ�|���O!"�C�x6����8C�^e������_gyFzo����Zr���CU8B�a����������H�����~7=�������~j��"cQ�*�v����NY}
���N��u��h(i�{���<��E"��0������,�:y��6��"b[������i�}}
����45O(>v���o3�rd��0�TV"����n���#�B�$� ����2s��,c"�[���*@DvT3�G:c��~0�3MG''c�+�%�n��89�ZI�4?��Diu���`�(^[�|e��k=q�S�'�%��[�$�[h����pIq"�m��h� ���U�0�.�~�=�}1 �T�aOb*�U>,Q��|��0D����H��~j#��F�
H�*��a��z{�q6������/��"0;�|��8�XeYo�wdp��o��OHd�(���H/�������Z
�"������VH����4�������,�'^��a����Gtfi�j�j'�Z�����?�	�|������J���~
����RT�qw����i��WE��*����U����qt�
h�_����j]���/�>����7�H���n]<H�c� q���u�XV��
��A��B!s����>a����V��,d�Lg����j��� �P������D7�o\kQ���hMl���+h�lLv���I��(����q���+��(���O��M�"r��H�(2L��(,;��q��D@����5���?�x�}�$��q���;��
������O�?3�H���Fv�au���N��<xW~���?���>�;����:c��}���;u��D�vm����a��
����s&��7�e��R�Fu����#3.��B�9�X��$n�U7M��/=$�e\������d:���=�e���Mf,"Z�
Z��u`�e
�����s6���������g_H�#�����|d�#��a ��W1 vk�{M�V
D7��������Q�t��
���x�c��(`������
�7��:v����;i�B�O�M?�w!b]�.K���[��8@�u
]�K��M�D��@���9k_@g�A� ��"?}�~���'�3.���?��
�����tm[���0���fI|�;$�����K����yo"����z��o����^G��UdV��.�n�v���
��!L�w�w;�p%_��-c��3�S��y��j�5�/��<~��$����;�����+��Y�$Q�������0�jn���$��-����
REaD\@�h=c!},*����;��g�i]�ms�m�����8�z8�����p��d�/d�'C	j�����,�V�a\IRQ$(t��n>�+}�H���
lZ
�
�v[�M�w��+ l&�sq�z�16��Y������#��q��#�Mo������"���<����`a J��u�	��*�D�(�n�u���f�c���WbDpf�S�q3�p�a�lCb ��O�nG�"��x�,i��Q�!��[F��1�wp��m�^�uqb��qyc�_W,l���*�AW�V�������q;��B:WOjKRqb����
���t4;O�X�.��8
�3KO
�@N�-t/Vt.
�������CU=^iC��/�#�iC$��������6����=m����������������������������A����P�;DM����������/���^��qb�>�������U�=j��
����t���F�49�h���������'��J5��I�K�C�a�G6|�H���'&I�?oj�3��OE�(Pd5���U���"��d~�FJM��C*[U}�(����j^�O��|r!(��5��x4�*�3�SISp���o�U~Sc�yM��?�����k�d��8�H��@������2�M����(�����y�kx��MYK�C�V���"M�z��M
�`��N���*#��f�LEM���B����Yzt���W�b�
j4���Iw�� ���|e���X.�~N�5p�LE4�dG�Y��J�� ���]��"�+���C���,�.[��E4��v��7��#�SP�a���?@\7m���fO���
�6�z)0R{��N��#����=���=-L��4^8�5��B��q�^�M��	���5�:����h�ShM�EC�LiEpX����G
';RQ|S���l����z�I�=��V$��!���dHW"�1�e�V��7�e��%-z���xQ�Z!!���lF�iR���]Kv�",�b����`*�/��p���"2�_�%��xXGp��$~3�0%T��N�SQ�fO/�y��iEZ�a�F���tR��i53G�(����MW������V��;e��{��"�y9�a-3,*�OaQs����t�lS�c��nS]�I-
/�1w�j��V��-�u$k*bK��79��L}��<y+A�����0�	������/���bvE��i�S����� dIu��������rW����"-����'.g{���{fkz1�_X�BD��'������tEY%`L���'l�[���L{*�r���V$*��0�?�iAR/�������������@K��iAM��gk�s��5-��R�5��k6����4��.�4�=���A����yzo6�i���xjp {���|BQ	 :��(Ps�<��!���h�P-�����a���hE�L���<+�$Q�Q��E�-����bG'�
�������$���Hj$�� �}@����gK��ED��!��yv���]��lV8��lVa0����#c��B4��e
Z������t��:��2�~��y�GQ���{$����3�AEM����z�yo�����@v��Sf���{��w����q��J���&H��of��-��U�Ja��E
d�������34+8�
t-N�h����ov�@����K��m[�^H)\�%g\��`���|�����D�@6
�a�m?Y�L-t�4��U�����+|��xZ�^�6���cu�/�z��W9|���� p�y�h����D�B�i�F�|�n�����
y�#��>>/�������hBc��srE/(�?�{�P
����+����6I�����.?\�\�"#�h���j<z��GpJ:,Q� ����ui(j_�z�Y�3P��m�������H4��7,�yF(�nz�ET�I~rE��z_A�8�yjO���y����.}:��W������x�4��3&���?���m����{��2 �����A������^h��u��cW��2�-H��Y0K-��1�y#�{���C���Q��p��o��X��(��j*�=�&w`�
��
�=��}8��"M�h�s�[���i5�6���+����hH���Z7����L�U��_�g�$R�'��_��m<q�����I6�o&�����_]	�Y���e�^�dQ�3M�0�P�o�>���p��G�/�2fp�x�I��FM�v���
��|��S5fp���~�6�����������W%}���U����k+JG?3Y:��� ���x[�D*������ZP�tE�n}^1�r��;(J2�|D���)�g+��b��$��'��;����l��7�NL��< $�{,H��r������`u��]�D
6��A�����>o�5e�������-W�fA��|���K�8~�12��M7�jr��^����	u/`�c��p��n��28-���NA"{f��SB
����|�9�B����Q�W���=��Nax���of�n�}���%g1�*��B���s��a)6,�K#5K�,�c��BZ�%�&vIF?q�-0�XQCa��O0������v���w{!���������O�-_V����R��=+�o�6�(!��6�[[�-�K������"l#�"�%���2������,���s�� ��"�������G�7Bv���n��
�?/��yeGV��ZPA-����Z����h��D�x�y����l��>?��5PoT����L^On<=nu[r�����"Q�z�7�,�c� ��a�mR��s��h�$��4��T����`��$&��W�=:)���y3-�Y��?�f)�V"2&���b>������c8����}�@�kvTJ�����Z����k=�}�~#O���s�}����.�ZI>,��1W_����3�
<�
���*���V��y[�����br�����V-D��3����{j�������Q��,�[7�#g�'���EEz��SEk�9���NQqi�V"�1�#jz��;7=�T��7��h�G�������\�v��Q��TD��[��?������S�����}%�@���VN�0Yn�/d�f���[j��RzRC\�������bh)�qLc9�V���yIDc�^e���Xd���73�Vb��a�O_����@���F���X*�x��m%:W���D�����)��-p��=����X��n�����V�]_�����O�����n���QWh��t�2�z8|~T���r����|z���BW�Z>/":z���q�2�B�.g�J9�r�*���T�E���]�����I�n�i��+&&�P+������0W�OE*�t��.^|��� i%��$G�S�[���{�?_�����a[",r�4��-�����{AA~��C������|h�����|H���������O�����_��J��"�e��$�Lc�=(�Yl
jJ<��_���u�f�����H����t�#!���j�B��;/�aKX����r4+eg�8'c�M�Y~������9@�������N���6d�*u���a��(�5�Gi����V�O�7�A&XdQ�m	��lp����dx/n��.f�36�mI�)��H��)���YgM�ef���$��9�R�.v��i��-������v�Oz!�q�0^
2� Z�;��8!���C��V��-��	�y(,Uw�<������#=nv�f�V"��/���=���)D���M3�D�;W�Z0!><�>���}V���z���B�1�l����nu��3�R�%�YL�����a������u� &c6�;��hL?��(�*�F� Q7�cj��K��!y��
h'�Z�����h��Uv��B�tH]�����x����x���vv���c��|�n�������B����0h�"+��C�)�=����rd��q��Y�_�����[":R��/r�|���S�C�{e����s,/gcbMG>��H���3dMh�#j~��~�f?Bf4�2����6���cx`�����<z$;��b�����w��������b����������,�XE�N\������i�=��g��eY�2~sc�e����E�k��==P�v��A�&�����K�w,S�Nr����{����Y��Dd�����-u��
R�/@�9��?|bYFV���Z�M$0�Y��1�/����"�@<Jp�3z`>$���w�WY���x��}���55�]Ma�q��9n�U2��o�a+�4L����q�}��������B����vI��L��l�����x�fL6�LDv�?���kT�A��A�8���rpR�?�wu� y�?��'S�[��<wE�N����H�r��.���pL_���}��c�q�[Lc���������.���I1�i?.��Z�L�������1��e���dWn���eL7�9R3�3�f���5~5}�8��+���<�X��q���d�7�u2��Kg���F0���g�S��yZ�e�����������'����6H4�����39���x*g�����[
��hj����r;���%���_���q��ta'M��	;�B��b�������'Z�����{�!�����,���\��������r]���u���Y�C��%�q��b�~���(�e#|��b�~\���*��{�����X��z}[��r}[����rb�>�r}�r�Z�b�~���z�X�b��/�Q��g�^����lH�!��s�~���s/��{�~���:�t�������X�CL�������Z�����=_������(��k��Z�K����u���!��k��Z�{-�]���;?�����$�t.�b�}�n���\k��j��������^��|},�!i�Z��v��}�]�����g��k���j��j��|��,v_n�!�y70C���z}��o���\�n`���G70C����!���
��u�f���w3�|���b�>���^����n`���z���f���w3�|�Z�/�������^?���n`��q}/
������7����
��sC��_���77���������!v�on�]��b��������!v�on�]���������_���77����
��sC�����^�3�.��s�����-srC�z��b��#�!~=���
����'7����?k���|g-��w$7�����\��k��Z���Hn�_�~GrC��Z����^����q|j2$�s��T2_�.8�����������i�+�@$H��2gt�����g&K��	a�����JdrV�N�)x�A�1!rb�d���}E����;9�F���������1,��� �$��
��G;������?C�;�"�$�z��Zp�x�����L���5D��M�	�����*J�����NLQz84������	��U�'KT���a����q��:��b}������m<���|>��E�.o'o*	yb�T@c8���"��%)�N�R�i�-2Wb����@�������Q��;,7��Bv{�
m=����� q�$��@f�B��;�O��g0�\�d���G3���D-�j��u�q|���w�_��n�Q_�����hlW�n�#�o����ph��0�$Yw.�\�����dt������B�diF�n����~�J��b��m"�H4��p��S�����c,s�8��7.Vy�C���qo8g������hW����c�v;��T�m�R{�3���3L�A�R:6�6�vf�F�_o��}���-��#@Z�Y��/kJ�}�k���(�z�s�	�2�_l5�&o�������$���TK0���������<����7�&>\F����/��)@�������I5�(��*��C
��{� �5'�ua��a�j��2���������R8����K�e"��Q�����y�-�t�2�)��/�*RO
�r?n�Gx����`�Q�����i���y���^��'������H��zJDOi��I����=d�����VY�L����`xy3Rk�Y�����.JR-��n#Y=�~�n_�3G���r��O0����Aw����M/e��%T�dQ��	G�\�&�tW�����W2;����������W�x^"^+Yd�6��O��\l� R�Csv\:!�F���P&��
�8����O3u��7+��(���r�����3�$����z�e���Zd���z2X��>���f���"��{�v�1!u��Q��L�3�l��{�0����c�3>�0�=�����G�����b'�(�
�0��R{3m��D����7
|�HUo+@F��f��������`���;A;��x\"������9~!)4����'����ZP|�P��a�[f|����l�����������^~V����
����"��q���J��E��<}>�=M������*;�7�
z��i�5V���p��gE�
��;�/D��E�^��?�y5p�_�O�;�4�A������wh=>�X$�I�Lrj����0�w)�1n�l�B$��ft��#����<��L�����n�q�����S%h���sO�S���)@�@�7[���u':��/)�M/`k�^��
:�o"�ye�����p���9�@��F=~@��^���F�Em�
x���q7j�H����;�h��"���j%�|wqV��xB���-I��5�q����'�����Wc�9KJGOS��=��y(� E?��[�����G.�:B}tI��m�;�uy<�e����g�[*z���k.�8�y#��'M[o.��{���
M<����}^V�^�a���u�?/�q��,�E������Z���+�d0�������_�A�m�$Z��"��s\c��,�z��V�F���<X;������p�c�\'�>F�������/p34������y�N��l�{���#���N:�/��jh��zJ��3J�	�_�����f���CA�q�9$B���JR��J��
�u��#��k�'�����++��;f�8�vr�1Dj����]��?/bC�l%;@��2q�O���*�]���P��d�9�B�{�������q�-6!o�I�������d\V�E�0�JB�������?/����"ff�8
�L��-7`/��v�l�0�X���F����]�3��?��I[`��=������T�f}�$����,����
$'�33���~#-��I�	C�*l^q�[8rs����)0��!��s��A�/����
��8���4H|d�F���s��VA��������B�����������c��&����.'�����;�����4����[#j�]KQl��0�� �����
+��6��	�+�!�}�5(��{V����W@G�!��i{��za���:m&:")7q��[�9�&�
#����R~V�������f����4�q����Z?PW��~����\������c8+����kM�k�����*�U�~:b�C��%RF�I�pq.u�9����T��`5����e���[,��	�Lx�[P���y}���E�0��J��[3
i
0�x!���e�|��������������I�X�`tX++�n��X���,7G%��7:������@��q ��'����6���}aE�Tb�Qx�7�m)��|&�$y`(�IbL�)4��ol�=�w�vj�1�������be�Dd�*�� ��a�B�;m,�NQ�"Qt":����$�����E	Y�����W�6�����Tn�����%�i���=l�sQ:��I5�c4%�XE�q�Ip�k��ho��"�1��w]��6�uA�J\46��=\�t=>YXP()rS%�(���i����Ud��n�J���~�t���*q�*���o�&����Pk���Utn�}��s�Yba�_��eZy��-��X���]��z$�,He���i?{R��jBN��&�q+�E�t}�x��*�R-�������qsE��JD�[�t�p�w��y��j�_*���Buo/�d������|J&"#�e�]���0��Ha����\���"�����%�����to�]��l��'~��'�,GAIV��gf�^���M��%a�_Hj�-�\t������'f�N����>���q�/������eW��B�aq�jt���j��b�+��
�^�W��K����;������������a�t�d{�H����IC/$������L�
:�����~=+���.�H��"�`����hK��Z�A�.D�G�D������o�c������p�53���1W��b���[��������)�v��	�
���q���:� ����Y�Nv�7[��A];����Q�d0�^�fE_H<�X7��
����+�y*������[�*����*���#�k���?�0�`���g��ov����A�:p7�� ��U��GA�����'J�`���L��io��N���>o$�-��_���M	�%�|j���'U����"��l�
����$7��/$�h��3Q����yY���>�yb�����:��!Sre���gs�y*��M����U����)�G��W�`����b�%�����6���m���3�fnG���������7����i���O4s,S'������&L;5�H?���*���9z��qX��p�h
9�|L��~o�������s�b��d����DW��<��U���j�����L]��������
`�r�8�����kO�F����#��O\H�=q!]�����F��Zu�������~�Uh�n:�� ��^���8��n��D����9:��8��6��-7]x�`�
�J����K��G�N������<�/��m/ "�x8SJ��n��^�"���N���q::���>��+p=O~���&���u]�V�S��D6�;��q�������CmBo���p��B�x�"p����W*[��W��>^�Hf$}���mi�R���j8v{(F++����t��G+���he������s�b�����
oaN)/C������<,�����X�n����w�|e+#)��4����y3�i&/f��"n���w�9�w+��q���&���]EzZ�M��!��`O���A������W2���	q��Nv��3�C��M]��

���al���2/E�Q*�2�xL�1���[Cx�+�f/��eE'���
��^�*�8qi��7R��9�g��R�">��G�=���$3����^!R2�}��~��`6� m�O��y�^a
�}�}l@��"���u�8�f"Bx+���:��XS�,�x�D�lA����R�����A�����+[�_��
�������_��J�=J����,��}���X��un^�"7�`a�_H�M��l�~%Q�$�@u�cI����K��cBW�JD���5��oy�#�1���wY������f���^�:l���i��f�������W"������{1����1��8���J��_&�������������s�
��[y!����o����q�����|��������X�h_t%"#
����S�7�f1�1q6���\��RA���g���g}�vE�M�Nl��7�S�r�b�f�!=��1x%�,�p���h8Q��9���!��*C4�����!}
�+�~�,|m����e� -P��>�'N�LR�v���nQ��*��,x�_���>�,�t�Q�0+����[�x��qlkaA�9���6��-T������ok+j�h\��t,^���ghy��'�7����]H�
�`��"�-��W!85��.���E,\�`��d��f������r�;xY�J����/�����G"R��L��f6�i�����#���2��A#������0+����x�Z�c�����������M���v����p��h�o��{(��B�-�:�D�+Q-,�6�{t������"b��=��ma�=��g���2����\�����O�R�nD�[��6������)[�2��y���]�Y�i�������_x�0�+���4J-�E���7/�]�E#.�"���~��["�]�������i���Y�i���Y����g�������e�r�F�^��I�f�"��G��`B�;�D��3������n,��6�����&M��n4~�������2W$ ���hab���YU$�/���O'�Dd����E����dV����B�e����S��3<t*jJ��B�^���[���6�@���AH�IuG�V�=E��BP:,�_�]O���n��f��"FQ�7��P�K�aY7.�2������F^���;��k�k'?��M#��c�g�N
u!M�M��{���$��R�?�Pa���4-FT�(&T���W��_d�ra��} �f�����n�E��Z-O!����?������a�o�t���c���L�J��
�7����BP���R��KB"i��
�(��pp�����?��1�{���`�n+^0�{��F���0��b	�|��b��B�n\I�9z�s�����y��4���D�D�-�]�s��{���ct<�u�
�SA�x�CC�B/>�������K��c��w��gk�}��pH�e�N�7������x�*��Y������1	T�-��j��D��
R�m�x��e�P%7���)�����	�J�J'l
� �5-��*���?o$5��j"i����X�<����lZ�1���Z�_�R����UC���1�sc/`���D����{���������#~�m�0V�����3�"���j����S�n�J|��n;�S@*za�/�#��L�����$���K�w��O���I,H��bCZ4�7����*�_:��/H?����*�����J������ja+��CW�`�����S@��P���-J�cDO�q���[6;�P��i������7������7��]��;0��G�L���s�*J�>��� ���OE*���%��-� ��Q������g;wl�Dd�������c���� ����n��ek�4��j��<�2���Gt�\�v^(��@�y�@��	�<��sr�vE(�����N��?/"_�������1"'I;����P��
s���$O~�A{qN��+��w�M+�uf��Jn�N�������?���	�	���J(7{7|�z~��e���8���'�^%���O`�����HF�'��Ju����tR�W�X9��F�T
�h�>e�,Z�*��V�*�@Wv��*�z}�������-��x��G�l4F��&��f���������"���Y�A��'DN�Zh��J��V�� ']R~�?_/���'_����h/&��\�&�f� �������Z���=�c�g���<��[[���Bs��
��A9*��"!������gb��b(���O����+jJF���0Sp��}~SR��n�������M�k���/=��N��
	Q���O��w�2�1���i���L�V�5�v�YTob���0!���
R��QQS�H�9�=�������F�m�bO��.��r��p��)t��db���Q�u4�o���������@j�;����:�w�48�*�O.~;w�����O���B7�o��
n�����>�)���
!���},��BMj���0�Z������&g��4�|2��?�����|B�-�(��"��#M]�v�;O���y�"����^�J�Tn��Y
=�"-
5!8�Y^��6{�,�J��yjgG�w�L�Ov{������7?�3�+b_�?��%��(��`�J��<q�%�[��X:��������q���+j+Q����"�"'�>�������6Ko��@��-��m�Yd��3uB&E'�e�_��s�v�����i���������o0<5���?��N{h���Dz|�	��	����������Nj�� -P���ozN
s�n���[EbU��������?C��DJ#��f�/�ed{��m#|5�$��M�.�"������-��U�C�)a�h������i�F����&Y��}������>��vp[�������5�������M,�3W���j�Q��K�.�#q��EM_�0Q����A���� B���c�$��������=��i�|��m�wa+��D�g�Nn��G�����q�O���������40����BlD�piOc`��,���}�pa���<�����#�]vl����>��^@��=���8��a�!��
��5��wE����vc-��*3����!�uG��E�UI������mw5�$�������������,�f�g���v�O ��*%�
��������>�Gm�S�cA�mw��+�������E@8����
�I��a�Q�1X�6[~0#?HU��ql��So��$��z{W{,����!�N���x&6zP����A��]�AHB3�^�4V2�`c��n'���/�z_{���A����AM��=7]����A���j��:
\����� y�pv��+������9!����{3F�%d�b���0�������o(��S�����ra���f�����?�N���M��4� ��\N_��5�
�E'��M�,�u�@�,�����Ei,+���z�w�(zmu����MD�����E�o��$���������UL�
��.j���k�~�}A	��G���X[�v����/�Khs%j9\WinW���?��������	�j!a ;
l��J����m
���u�YQrf������E_"jh��)�	�{�F����,�l�h"n������~�m��9}xD��0G������`�sd�C�J���������6&�U��l%^,$s2��]��]�N�6
����C�^��[�
�bH'���?JU��'����^[�f��N�b��=�	iM�
>[��3�']��[���XX.3|�����{xS�,D?6��k'DAn��U���Kt����'O��,,��f��(�u���k�aO'�����c�=���lN�����NDd�C&��&���4>fH���
��B����T����NDd|X�����%S����M��g�E}�M|Ro������z�����V bt��w3�X�UH��fL'��-:jt�j3
�����W�%��,hvK��L�dIg$u���l����41��><�:,�D�����%}3�nIg$�UaI	��}�-�c����.���W�����NX�iM�}�\�m���.��x�����P��k�W���S��D�6�/�����jLg���&c�l���[KAK���u�F��Y����i�3��8NA	�U���1�b��	�*M-�w&^�A�!�|�"[�������8vS�J��Q��|(%�k=��
 R�h.�	�(
2�1f"H�(#>�����\1�j�$���O�GPI��3��s��������
�&���Ssd�'S�E���)T���Mz�������I���RP$E��zf���=����)0�E6U5�����%�!�TR�	Y�_�n���i9�z���PW+y11������&+k%���By<�q���ey���O��*k�N(g�ZMY��*)k{�~�\Y5�/��BW'
��.j�<��kz����$����h
�Z0�K]+�
M�<#��.7x����*�w���M8N�[s3Q;����J��~&�m���-�����$�F���Q���9�Vc�m�?=���u��z�&D��AswTu����P�JsH�����Jps�i���R��u���%pK[t�Td�.��T���lu;x�OrR
��j�Y:�JZx�~����gD��s�������rU�n�2��j��,]��?�7*��c�D�;U�!�����wJb��vw���^�[M� �U��f�tk��_*�dcr/4��	�g*�j����n3�����J����Z���)�f}�^i�x�J,��^�:�����Oj���R>�pI[�h.i�%�����/y��"��Q����l��CJYK6���)�3�)�G���tI���+��.i�fn��m�������N$��nH��5��1J�����5M@�gdU�����$|O��7����]�~/,T�����Au���J�
��ZP���5����^��Q�������./��W�&i�^;�Ar{��n_�3�.������L$��Q��/��8b�i+��s��q��!?�*`f�������������L�f����#��a��O����)�n�k���'T��Z�����i�����"�t�3z������6����l�GY�S�e%�9�����O�����J~�f��hu�b�_O�����������}��[A&�`���=��v�I����[��;QW���l��P�i9_nQQ�_����Bv���E��u<�E^���-��}^���������C���l�R,�A3�XB�_��6Z�����}�g"�3�X�����x��X�+��vX7�.�����<p���R�	%@���n�����n�w>J�dF>����S���9��%�E���M��=�hh��pF�Q��n>+J�E��FmGG���b�v�X�'�,Z%1���#4��y�#6�f�4b��P��o�o�m�KQ�4b;�k���������g��93��W8�4�����h
$k�z<�?ks-�E���L��2^�)�.������M�Q���DC1TR�Q��sp�ch�.[�2�4����g��[�"�����h$���"�pZv�1�(�����H����������Z0Fi�m������1��$��n�}K#�]\Kok0Y����t=�\���q����)�]O������~>w�;���������~���w����K"���fU���X�y����Y~��������Q~�;�o����V~�=�og���s���&z����w���4��w�d1$�����'�M�k�����K�9k��hf�����D��Ss~������n��������]��������������gCF���K�?��e��/��o_����6�P/������aQ��84������>������_��?���?�����s~������a�Kj��d	���`�@S�+����g&�ur�M�87��,E �r�?�����97�p��-
I%(v	���BH"����9�p���2�X�{E�uc[o��'���-���9xy�I��p,H�a7i�XIg-'o�Dd�*QXI	���5|��������|�#J��
�����d8��u�cw�O!����� �����
�SE�Sl�wpsg�'Y�235��<���n&*�>hb���s�]�
`��7I�/���������3�,9�K�m�:�Pn(y%"�F��g����E����3n	�v| }�����v.ka9&$'��w�����E\N��hB7�#%������w�����LVS����?p���}��l��
`�9�"k�Gy��:�Gs`���
�t�m��7��b)����=��>�W���0�q��d��DdVv�J/O�!j��E�������1����}�i����h��Jn?���:�MH
 P&�;��J����Y����|?�;	���P�E�}d�hq��T[G��d�����]!��������{�[����CXt��)
0�Y���u�cG�a�n�9�[�mk���I� ��nJO]B�0�$=�����[%�U����l��op����&����{�[�c;�gE�n��r�c	a�	Zf$@OY;|���^}�T����Z�)�^k=������K^�&�g��iB
t�[�������em���%��U����M��]8���hG��|A����H��"���B����OX����	�L�[+���v1/���Mn�k���c,_��oT����b�z�g������qB�c��7
�c����C���0;w�Dd��f�-�:��2�<�hQ���P��8#�c]v���Z"@���t�L�h�[>������#��";�;��APs����W�`������OGSmG��	5%���v�0��w,BRV����*��9SSb%�q�s��D�l��8�?�W��M �����<�kC�{���D��������Q+��M�
`v&"�L�x���\0�<��51�;}mm��q�<X-Bq�5##�����y >B���=��\�1���+���aJ�$����1��d�{F
�5���9�����l�8/�Q�����$9�p�s�$"e{y������|b���LYg��x}0��D�$W�W�<�Tci�<h�X!�8
%f3�#��LJ�\4Q������
a���#gl }��
4��n���	5V�������?�y������V%X�����E����������o��k� �{�3p��"5����%C"F�~�G�&2�}<�}���ga
NsI���b��������<"����S�3I���{#5?�����
�7{��em��E�a�������~��n�dF<(!s��a��L$k���a���s��M����!���0iH�e?=l���~Bp({gX�9�X��0����jn��������r���F���*8Y���
�X���1;���q��~��Rt����}����i��]gK(����V�sz",�v�Wx'�J�j��&B��sS-�b�������gt���5��>�13R�&��0"�GA�J'�,�}X]0_��7�^3B��<�;�+�^��E���n)Nb���9Bg�f����m��h�$x���A �;����7z��}�����n	8�4�|�|�iDBk	��w���7f?0g�o�b�be��L�����Es��5�B�>�2S��}��Q%"�{�e�r
�6���� s	��D�\,�Y����h25�z���&���3�P^�����#$�Zp2�efN�D�lU��S���y�r�`|	��}o�R%(�U����;@��DDv7���0I��9�tiBbz����a���)�
�n��2�u���c��gTd�$��q���H����L-��(�I���~�"����Z$Y�����H|V*�����f*�5�M�������"{|���K}*2]���x���G)L�&$�>�]��M���3��a�N��aAT���I�*o�=3��&"�Y�XS��i�������9�/��������5�/��{��d�E&�/���������I����_1a�
��E�9!��a���n�o��Fft� ��.����|���c�a�c�n?����������X]Q�����=��g��a'd�uEx� ~���aO�f�& {a����yL�+��8���'�C����]���N�_�� fV~�J��gEZ�-���g���NDT��{�-d���,�������2;��l\bUt�
��){�UK�F'-,bu1e����iY)�mqM:|&�.q�`��:�[M���x��������^H�54
���Y;�"��7*]����Ng��4�����E6m�9�	�����S>v�����VL�V����b�-�l���J��k<�w�9<����.�V��*�����q�L��JB~�h{���/H�^Oh���`�'���@���o����93Ij��Z�U����*������`��l ��c���3j3�:��2,��)KSV��=*z#��G��c����"��~��-V�		�1��mxOn*�	d�W�i-���w����$�P��Q�E���:����i�$�2����u���o��DT�-d�=�J�������P�*�~��m���\3�m:M�2��p�!H�/WSezX+J@�������W�����qwfm��{��i��x�M;QK��-'�����$k��X��8Ja&�����tu[�y����
8=2��=�J`P�l������b0f"�:�O[��N(�������6V.�Q�>�;��^����fc^��My�����.��G����uj�K���~� ���T�95zJ�ga0����h6*���.K[\ 8K�_��,��/r/�$�\P7n^�E�	�����7�BV��
D�3���SD	����bG���$>me�����8kxA�D[����vf��r�R�*�������(m�N�'K?��DA�\��S�}�O��ud����Nb�����x���[��f��[;������tT�����mU*��ZK(k(�5�*���(�(7�v��O��r"~���,��������u�k�*�t����m�����"��'d��D-X�k���&&I$���2�{�=f0���%%�`48����p_�E~���.H>B/�����������������#��W�U�g�?����&0@��D��8l&"kZF����?*�����?ux���ta-(�[�����N�B��L=�����nW�lw,�1��������;�]��
�\:�
����3y���=n��_P��8��>��OE��T\L�"���5w`�4�����7e"_���.m;g���x3���Q	�����ri��������P�LD��MDb�2��k�$��&K�qC��T�b����A
��)����\�O�<�	�m��&7��O��u�����g�ls�������f�L��O7��z0s��j�)������u3��~��K����'�3�b���gXo6X�R%�M8�F�o����*�iVnq}���6�wL�n3�������>����t
��M8>Jz��������O�sh�>vF�2����f���	�Q�O/$bl.����SbAf���O����)�@�K�P���.��.��c��~=!-�u���5�:��&�uU;��,+M?�#��7#BcS���"�@W�~�(���C$��M���l���?���i"�3���be��\����!>����@��>���E���K������W�R��z��b��o�-��V�������
I��mA���E=��b�"�'��<c\{L���t�n{_[����^i
���>���7{���������7]�b�7�4C��
��u7���	A�S�o.���;�UPA����M��g�n$Q����mSI���}/$�h��d���m=����c����9Y���fvh�����D
A�*mJ�
�O!�MDJ��r��}r:,t^2������N�����trd�h�O7����T?���Z��8�e�3��f���U��R�=3��I�Ht��@������ ���G/�Q.zz���3�I�C�!y;Ne�<~�-L�m�R����f�M8�3z�3-����������$��< K�N����B�y-��h�}�LP��Z�]��Ly�}�L��u@��V|�����h�,[>�U����
N�~�H���� $Z"�^Q'b���8N����	@f�W7��|?_L[�}r�iU�*k�����$�h*���|1�"D'���59�>��k����9��Hkyg����6����LP?2�[��
+��	5o��a.�����|�3�~�
�S�Z�
����z�]?�T�&%|7�,���<��^��P����n�y!\��	 ���m���&m�q(�L���{��M������o|oS��;5����w[�~���Hn"����tj4����&���Z��������f�)�Z�	A�5A�� ��iv�I/
���**k��,�L�=�e������6�N�|/$����]��fRd��-T,�/VUL����O�jS;���7�Q�|����B��
��������\t���D*&��zh��0����:�:rB�Q:���$9�;�gc~����-9��N���w:���,�:D��$�����DR��D���c1Nt;������L���KN(����]��h�q`\b�9�?%j��m4�,���^;��c�u&��(���Z�m�Q�!�R�v��[&�#�_����	��g����
tp������]1�gE�.R+����M&ZmV��W��^�i��[��o8�+�0c�:���L��kr�Vd�B�`OdMi�#)>$-z���zH��W�2{�D�g����2�)����8��3
cq��0����toYf�����I����g����
���A���w�@�(
�q��$�7v|���vPf��(�zzcn���	�#��_4G7�
��V.
�6|��A�I�gL�	Qk�����%vJ@�����O�>��z���
l�:#(�f��82��~V$�~]^�a��+����nW�������]P��Q��~r��� ��m��g��F]��l�aA	����Ax��\JU�U��O���5U������{^Q�����?������'�.��t� ���	d~@���|_�����C@����=~��������E��L���L,��q��6\TA?��������2�m�G���F@������Sz���"�n4)b�J.�{T�A$8Oh����,,�.�!�<h3�-�x�tn0���fA�>7mB-�5��gA<�Y��W�b]�9�����G��5�[Mo��;�����H����:')����b�#�����-���#4�Z��C��H8z�_�D���3�����������G#J��u��{m:<�5�'l
��D��<�m"x�����{���=�
���y����v0T��.��y�gR�����3�KY\)_����KyF���h������JR��l�V7�D���}T0N>��'
MUO�������.fOC��G
&&�� ��:�&��k��&�O���"�j�1�f.v$��?������>|z��t�i2|��~����dC�K���q���
�%����O!.��@��x��$�����9]����Y��I(��S����k��k�/�$����Q��,�A��6�_�����Y��l��l���dd���B��-��u���9s���mH�8�e�s$�Y�o���=�S���v$p��b����q�|��g`���`�!_'N��@2���� �l�"QV~�W���
�EU�`����T)@���
�����^�z�}Tp�)$m�$~���i��L��0��[�u/�����V�������s]�I%&T��j��%�Q/�����NG7�{�_�Q���
���X�>��J�c��d�d�6N%����{@637>��L�y���������v~1B�)L��w�=�N&������}�D-��������AG|A��>.�a�s�L�����-~��c�����5��E%�2�[��h�~�f��YA
�H�p���e�>Lo����]r�>������Q�`{�;���*AS��ma���5���WK���Y,l���}��"O]����L"�j�_�|}���|���8y��],��iug"�.U��<F�q��LD�����
���`���r,����������,��G�#�D*C���I�T���4G�yj��M�����H'��A�h
�#��LD~�_EU��C���F�O�X:�aO�a��~m�J"���yw�>��/W��@rW�Ym���rK�����������k�fC�+J@MASV�}��P��r7�Sj��$:��MD�a�p�.���wFy:����y��_PL��Z�4�p����E��&�����@S�a�����$���sKZ)���J4��Nl�O�pZ�TI������
#���� )�I��4��E=a��g�W4-He�k��(����me���9����.&D�@d
k�Kl9��T�5�u� ��y ��g"hs(��������.HkA?�q�k�j��Y�#�<l�*��z� �@i���Ve"��u6G�g=�m2��Z����Zw������{�,j��a��k���(|K���`3�Q����ty�!a�fg���1Y�T�'���k�X�:??D�������?�C�D��|�����`�V�g���U�;��b���J���v�P��y��i�p<�Xs3��]9�-?2}�JD�1������h�u%�ha/�����E/�d	%�����0�>����S��f-�jl.@���}�u���7>n�IWm�@�P�Yij����n�?N�y��o��A������@������a������A������#_X��Nf�>�Y�E��N6m���*QCy���axjO�{��h`�7^W�@�w+���F���}�2���nj�@��D�J���6���D�*��3|:����gu��J�/[PQpt��s�3��ia\1�@jt�Q���dd������El����&�-K{������]���j���?���A��2V���k=���^�!j��E�e��XI�
t`%�DZ�h��P��Re��.��d�,�����h������F:���i=�_����`��2=�����#Y���>+J�����B�X\�Q��=���0��W����
�)u�����5Z�`�_J/�����dY_�Fh|_�GfBN������\����U�}H@M��X��Hl�����v[P��������\=���GX��5=F�1���z���h�i�@��
��>+�WmZ]����d��\F����/����W�6��I�-��sg�� -�����+Mhw��m+�s�R>��bs�RP���g���usE_��<�S{�8 3��No�L/g3?��K���w>�[���l	y&����"P&E4eM��K����CS��Y�U����v���rJ��3"�%KF�k�����/�y��~��_������~�T��������z/�of��k�����w,���C�����k����w����[�~X:i���)x����9��rY��a���$+����l�\�l��"��9���H�{"��h ��[W|t�e�L��Xf,��
��YNVP-H���uQO�%�uf�#<���3#V~��.&���x�!�+~����Z�9z���G�d;��'%9+���X��Wg��t���F��t����Z!��������EK���
]	a��Im�R#}WS?�/L����T|���#Q�3��� {+����T���up������b
YU��C_��3-��������09����'|j[{�A���/�z��i�d��Hk_�Z%��o���7�w���������9pSF2tp�&�C]Q%Us�,z�����K�b�y��tF���\���������?���f�li�d�.�����
�����!��C�!-H�q�lI��eCZ����*�(�u*vtB	�}
�v� ��I��Z�lFg$gS9�����������m���N,k���)��0�X�H�4�7�E&k:#���T�*[��3�Z��aS��8�jf
���}0������6���lS'$@����7���h�5���|��KP�Q�����lUot���NH+��U��������@g��Yj�T�����w���Y����N@���q�Q6�3R����e�9 u��Vf
k���32�N:/f�q�U�����8�<�S��-*'�@r}�����G�M��3��������n��/���<�)���#�������:�29���L�*����iaSe����NO�����4u��2��_f)`Rq;G6��9Q�^�e�jjA�Z��B3fj%-��L/&�O��%�E�<���r�e��Tg{R?������OuF�\aN������:#:4s{`�Lr���������������>\�������q�]����:1��+����N����0��n�[�D�=?���b���R�)�i���{qR�Z2�TT��U�aLg}�T��k������I�������L ?�%a"��CP�Z1��M�Mi��B\1�ym���E��W��%'S��Vn�*�Bk,zH�d�~����V<#����c���.��j��1m��3&5�����eF��rS�z2�B���x�<�I>��\�F�q7wO@����������^���?�
�Dn�ppb�*�RuM�2��@9l���� �z/�Z��a���4���/�X�4�v��5�����\��YQ�kPj����C�np���������,.����N!�� ���C�_��f�
���E���2kL�q<�"W���Q��O!"��e�V+��Y�d2R{�SXG�y��I�|�����R�J�p����K�<!m�W	�>�W����h{�\g�%0c���2�)�Hm3g��;7�4�,[HL9�����d'z��1��3����P4�����o�N���~��}.�����Y�ud����}��6��Q����#G�������Le����}�)��i���49�V����	�18�+	J�y������9sH�j���/�c�L�&~��sRI��	i��I~8��y�m4g��4d����-C.���\e�1�����~��4x�==0�<�`Y�'�q�R2��v�]��k�
@���e��L{�.U�������%~YI��4e�yt���_G�h�m��MN���0ozA�g���s����uVRd���	lcm��:8	+�g�OiM��Zbp��$��t
.4�����%��f9��|�3�|��hv�w�J�����L4���4�)�WK�������T�V��F��ebnl�30����8�N�s5{�����Qh��#�+��4{��23���r�$�:S��|Y�uLj��
�M�5������P�-�lE(������lLzc$5��[\+��q������Y�G#��������XoeL�u?���8C�,D���}��y�#f$`���"��{[Y9�z+�~)M:�4XB��K�Y���v8N��T6���Yb�l�&D���d<���n	����	;~�x�x�����n|����M�����^�e�n��D����Fe���mDf�\A=�v���[Q���[S�	iY6������*~^q�������t�����a=l����3G�Q�-��W��%�v�~��Fg��j��U?v5��:����$u��431?r�������g�����/q�&�[*��������Do��'���u���me�rYA�+M���g>VG��0�_��y?W��/T.�<�er���jv�s���C�J�����)��`A����f`��*�$�����i���R�iB7s��Zz�5�����YIja�C��[3��c{��ja'VYEH�~Z�j;���,_g%���m)���.�R�o����9	�}�N��������k��H�X>�4aw��������"���er]�22kB�-8��/Kp�?��5��������cVEH7j�8X�:�`u���5<��
$9
q�{�K �Ar��>��4!I9y�D��u�o�������j�j�nWU (�8����9��N.���49������%8i�iB�r1M���<y������|�~T�������{F����[��3�����f����;�n~"��-�kT�M��������}�8�p�,��T��t���	���{S�
gS������`g��@���������DD�H�x��&nH��� �l����i$�-��%������L�������B��Y��� �[eA����8S��{U��������2��	����F,>Q���<�04�w�D������c�U�I��������,�Vp�IGx
MV���P?�|X'�*@�\_Y��rb:UA�Q}���]fAR���`Wpg�����>U�Y��2��z�4���^peK5�	�&�A���hn�E�%w���I��kA|&`�^�N~��%�����Z7�X����
�� @�E'�,J3��T�
�n1��H�n#�SK��z�3���'���n�Dd�����K��H���T>&y���H&|}/W������������x�����a�VO�^���c�52O[��y�	�
-�!�$�����2���~%N�ZP}������R"�PWKj��*�����<��S�p�B3T��&�4pFz�������Y'�2�*3
n�\O(7��pwU�k��,�iB
��b���W�qvD���,�_��M��]k�P&*�jm�X��Z�l
�����Y"s��I�}F(����t��JV���k�y�c�mz&����&��,������?��I��<�DB�I��NNA3�G��|�6��5	���-9�����l��,Z�o�|�bg��hJ<"?U���������-i�X�}�(�e+�}��L3��F:=)9j�����	��#�3��u;��D�_��I�������zM��<L�f$��u/�{w$��zk���pVu�Q&��3��%'�d�����Y�\|p��0���W��?ay��2#8[7"���D�-�!N�~��Lf��,_�����+[EM�mQ��;��������
4�-w����v0�n&EV7����OQ���p�N�+����E�~�3;n������?�Q���%,P���n�DD��H�&l��0a��K��-e���fV���6��-%q%��v����SQv��f������!3��[�,L���%�����v���3jR��������S��H��^o)|E,���c����-p/���Z�t�z��W:�}eA?������)-��S�n�q�����.�SHU���)]A�n��f�L�$��.V���.��^�v�k=jA����������P�#�l����]��$�g�U������F�@�q[?��$�D�zA���L��i~�;2�fbI�C~l��O���)r�U$����#���5��|#r�I�a������}� >��V���������	4/��cM�4����/G���7�O� (G��MH�������_�� ��W���o�b�}~��A��@�l��\��DKa�qo�����P����
z�6�iQa����9�]����c3#�^_��.���l��qv����>#��;>>�����=��1�D�����{���yE�T��H�"��T�V�q\���a�Q�p
;
C������������\�����}����v����sL��r�6]�M���t����s� �$�{�@�|�{��k�@���T�\O��z���^p���t�1_����\.����<F�r������O<�&!����{���U
9_p����\o�h�������!����EPL�����r�����~����U'����k��\�Q�7����v�L�W�o�b�+�K������
��
m>�
����*&�+��]��]~��1��[����]�l\����s�z����-�&rV���'���������-���[�h���U�����VU���&�Y��N�#��c�<�;
^��F�%��z�6]��Wx��+���E\G�)��s��"]�]G�+��w��"]q�������v��c�b�u�G�0�s�F�+��]F�����g�+��N���r�Uk=z��m�+������s������������������������������������������������������������������������e��re���d��rd���c���cV�E~�����V<�1����&7��^������s����{�#����s�G-���W������[������!��m�nL\�������UB{5��>��
�F���@��HC3��N��xrF��m�;Y ������nN�L��g1����������Z%2E @�r.��Y��M%�g �;����HgNI�y6�{\�>H�<Jn�%
�R�,D>�����3k|d�[�EYv%�H�;J�!����T����Q-BQ�	`���QC���t���[TQ�
���?~��p��#�+J;��p����&3RY�p����u���C��5�N���f����k����m�$����1�����TCN_Yy e�0���V.�)99y!��4!z���h�ba~D	N'Z����B[���A+��w_{`gC��j����C�28�\�d�����"c�=Q��7 ��tm��B���V�K9�+��]��D���#�������*��0�$�c�j*|����d�P����?C�fT���N�@�vy*���a�X��I4�	�\�	��m`�M���(�O������{���	8��7�DB4�*�6��JT�v�E���0������.�C���d�u�"hK�q�ECog&�����hu�U�����g��@�E��e	mh��,�5/�D����M�����o�\3�<���a�3���7�	1��a)�3m'rX�=�gE����*4��s��-@�����UF�%�(_��$X�{z�D���Ex,�T31�\�'�G��~^�wK{�#_^.��
�]0*�������g!�[8�]e�S8��y9�� ���3��q�>�����`�Q��t������?�]�!@�b�}�H��zJD�.�������r�
pj����_p������iNH���Q$P'���(	H�l�~{a�p���s�>����(���	���W�2��F>�g�����l8��������8����5�-� j���m��yi������W�������Rpmv/��[.�����Jp�%{�{@�$;&2���'�f�2qoV�9�Q��=
�� Ka)K*I���J��%���
-2R�����3W����+��$�J���h���k%g��yg���#��sq�Qf�|��t��"�y�*��q�&;������3�����ik�:��?�����"mT{��I�?9��(w�������C��p�C���%�\��x��������D<����UA��@x��2�S�6�l��������3���.�M���#-P���d�����:�H;���a�|�{����r��_@G�F@�C�f�����:��.P��J�E9,����'Y�B
�I��!����64���N�b�|���Z���7,��$e&��(�;7�/�>�W�z��I�aFm
�{��>O�%�a���{��X���j�y�J��'�������pL@������c������K���lO���������a�\fx���}/��Y;?j��2�fA������F����n�����D���At#�V���Pm������8h+��ejK:t�=��Y���o�r��;|j������s�5�gE�"H�%��e����c<W��nP{:v��U���\���.}��R��r,;~4ncu���	N���mo.���t��*4��9y��A�C��Bv��#��B4�p��E�f�.z�}��,�>_�W`�����&�g����+�3
:��gcq�)�����}~��[Eh��k�`��vp���"���������*}z�� U}���);�X��}^��!.[��{�����Qs������*`0N�'n���U���jz-&`��	>+���!��G�$��8�g�d�o�}q����S"�e$d]+���cv��;B�������
����?�!e�� �G���'��T����D-X��s���3	�F��9�x�M�[l��?G
dP��d<V�"Z����A��
�X��#����$����\���&3%e�0�����������g�M������s���f�r���*��'ITW}�� tF��Hn��LD��{EZ����o���+���\6}���t"iH-D'l\~x6��x}�����X�s$>"��>6j1�U�*z�tVu�YG�_��L�GG��,w7�hd���;��)��1
��,���L�k)�-�\�k	i ����aE��f��5�xRB��k�� �y���q�}t���N�������+�i�8��d���������7�n�qd�s�p'����Rj�01m_�f�� ��F[�\�L��z���[����rM��$�G7���\�{��U4I�A6z�Jf����t�bK�w�n�"Bx8�z���c�
��)�j��'�z�
��Q�����0)l�'��ID�jY�H'�CHQt��D�L%>�!$kY���Q?�X@�A����VI�t���F��+�^���e�J���������������� ����^�D�Fv���#L��Jx����-�x�Oe&I>0��$>���S�/z���vW�`ZcO�����Q��|U��)@��+����� :E)J6X?D�`BtB����E'�huW
�����	�%{��Z'V<�7��v7�X{Q:���������alF�q�N��k��"�^��D�L����<�)Z���*q��W�J�fJ�����s��z��������e���~I�u�K����_���Pq�d�d�g�L���Fn�����1`��{L�}AC�l�V�x�l�4���M����28<lB*c�M���b��/��
�i`�Mr�6a��q����������!�Q_�O��d����0by��Ig2�����e��Y�U��BuoJ2v�pC�>��r�>���4�<����TNj���|a�<l.,���4������w��/H?���d�J��v<3[�	h����%�qI��I
��E��n��=1t�������#�1���/V���
`�5�{��}������p�>��"Y�	e}�Y��W����?V}�'�����	��OJ�]<8Ufa\����'s�,h�Tj&>.��>+c�@<vo�)!�_{������B��.k%��t%Z�35O-|v\���%Xcl��A�c����k>f>�������b���-lH��	��
������k��/HV��<I�;��.h��q�Y�{:��VV�{��v��X>��F�+�����sK�u�3�>�cN�%�������5O�T�
u�~CNhl���e�����M�q4���nw�7������l�`P{�z�^.�����V��:C�[
J�`�A�G��P!&���D*���H�f����;\�o����Xl��=y�{!E~�l�����8nw��I^��$�h����x��Fg�' "��d���9���
������g������+���u�y`����_���2���to���n�&�
7u��T��(#�pv�����[[���y�oG3�2u����,|��a���1G�I��UA��	�
��E�{�� ����������0�g���d[�>��
�$�J�e��	���i|���>4�����x���W��?�����q����{�{�4�������~~C����7���z~�/#�����G�2$.��������&���8?(���w������V����i�3����#�oC-X���s�'V�d��������S��#O�s;��!��m���](�i��^vFR��;��8�	�DI|�G4�2�K����LDd]W��8&��*�
�.�6��r3y�z�MhU�W&�G��H��d`������x��Wf$3�>�xo��LDdt5	\�=���p`�}<�d����Z!:Zy�|"F+���r��e��o��0�����/�~4����-z����
I4H�a�nF"?���:M�Y������*�x1�w3�M=�w��3zW���$Yi^Fd"x7#���w�6�FoF	0����0�W����;P�(d2�7�&�Uw���]g
�C��I�G��$�(��'�V��j
ny�K�p��3�2�xt��bx1���:,h��$�No�*���"U��.bi���^�9�'�n����t� >�;�,{��$3�����D�d��l1�+�roF����q^G)�71�Ye�w0!���u��v�<�M@D�n��X�1<c�T�x��T�,>� ��Z�O�f��-��:��������W�~0W�����~q/���b|�.�28�+�!��9r�	y,;�2%6W�l�����d�^	t)1�p�^�D}����m�����?S�Q���?��@
��`aV����x���{���i�l/�h�Xf�3J���v�.W��(��� sBFmp��X�;A/��y�3�>F�T,j+
�7e������|��)y}�0M��YX�����K����������O�[W��>����~_aJ����i%�zND�#���T��n?���,$����������5�{L���U���B0��r��g� �9j:@�3o�/��O�7z/�/�����B��`A�|e~l�����p��\��-,��2������,���(�����B%k�}��v���C�JbT�
����{sG�d���������w��V�}�,U/��~5��s��a����"�g���l��E�8q����_�}�DW�Y3���L	�+*��������m�`\3�f��4��~��	<lJ����7����C��[�z��IH���=2&���l����5R4JT����+Ky��Sb�rs�&����R�����
ZX%}c�C���������mp:<@o�L
��ih	�/
b��k������W��I�N3�����f����E6�'����y\K��H}���qx�IG�^�@��n?��r��QU����
I6	az}�/a�@���L��24�����M���/��X�����;�Dr���t���Y�?w�ih�������������6����i��
��}���4�(�����vn��i��}�zDJ�#�m�w;�H��p�g(���S��HXC�����CY�O�]�n��$���'����a��H���$�u����>+S��������Y����x�D�kAn��Y�:��S�6��cNc
���VA!W�sV�^���3t��`��)��`bo��Y����*��=�]?+�l!��ZK����Zn2��[�����%�1�W&�+2M���=�|��r��g���/���9�����.*@jp�ox�e��n�n+�|�|��S�o��*�)B,����5������)q/�� _��t�/#���aI��B��:������.z�a��w�/��+u{���-}����1�������	X�E��yc����������-bhbaBh��,aNI� �L;���3�0%���v~��/w��W�������H���
���~����������Y������,?U���X8b"�J����W]>�~V[��g+K�SgJ��;�Y �)�Sm�G�+UQ�MK~�Eb1���p�����)��:/n�H�[�������Y���p���;
��Hk�*��
79-����y2TZ^#o����y�����T��������&�]XQ%D�=�om4�:�0���mR%��������nt�($�X0^6C����
��*�z�4�:jc�����P��
���m+Sb��yP�8	=��%��6>���gBh1'�#Q�~�m+C�<lz�~����)���mF"����s������@l1�njc�����0%�om�[�p+�����?fE��� �(_�������Lf�	���e�0��f>+�����rqw��K8�� 
�����&p�8�Lxh+~��i&�=��8�������V!�A~�����uE
D;��cC����W������ �t��T�9��TG~>�~������a�q]���|&�>r�P�!by0�ew����)A�sLh5����r�-y������Z�b&�[4���-
"��I�O����?}El�U{�4R�,.�G��4���$g����)�'��LE����O�3�����>����j+D���/$���Q;��f�)��
�z�A���2��1`�?0���!��������o���"?�K����QzZ��_�C��I���q�(�3��F��X�l���3�'�Qoh'�*���GC��Y ���5J�dV��y-�G�����Az�n�,�������K���K�p;�|V�����>������O{
��m9��w`x��L1h�v�	�������D���9R���������jB	�Xu�d7�����W5�^a��Wr���0v��*j �@�;��d�#�5��#/��,��o�=T�sp
������v���c{�U����
�m{aJ8����3a��m'��L	�I7�{���l�����a0%t��(���>�Z�����'�#�p���PL]�v3j��b��9{3C� +3����_��L��c��9���)��k�D@��g�����p�����>���ckR1��/�
�T���2�)�N�<5�<t8"Iy�`���/F����L�A����P3/dJR��2�~oEz,�va8_��"��zdm8 zX��@����#zek��<6�y8�`P������~y���vz�MIG�
������Crpm\$��Ab��V�.���������+���8�vF�|�����gO^q"���"y�AcQ8aW�U��YS�/�������x�#=�m������l�������N��)�p�q9B�J;�B�lZ`�y��%En!�:�<|V�75~�n�u�r�������)I��%����@
n+�I�����c��0
�)�c����aZ���}�7!^������p���p9(7�����pb����#�;���[�5YW~��C��v��j�Cv�V[��� 6uq&����w;h�����E2�},�E��B��Np"n���=�E�'�PN5sb����u	a�3�:�
�2����>���X�n��>��}�cU��}�2x�r�����u�C�n�.]��.8������o� G����{������2Kq|<���1�D���������1�h�<#�n�UI�|�G����yS�Y�xg�#{���0�q�!���TF=�n�n��I��),,D�1'%�Q�z
O��8��$=��QOt�6�	;n����&�i�C���g��s�j�`���4�q�c�m�u�K��m��h{�m���c��x�6�a��a��g\�����>��gf�P�/��l$x�h�A���'�!I����2��� ����iha�f��.m�������
9v�k���'��������y��^L�V����du�coe�s��2�9�~��_�nAA�@�"]��dk�
�IV��Z�����O���it	��r��W��PuFp��_�N������|N�
����Vd�����cC5�{��h�(�;a���
a��RYb�?3����_��]�/4���5�"���m7������.l�)-*e��0=�B/�K'�_9#�e�	��
A2����g�����]��S���h@����<�����1���;2����o�����a�yG�m0X*�aS����V���U��\����,z���"��w��t���n3�L���B3��&wz
o���Z�lh�V��V(W��_X&�M�t�}�=[pq�1%�������tR���A��;��z�#�Z�&���f��i���}8iW=�����}qcS"���Z���lC������%+CI��sXpa����]���f��l��-P��|�� \r\z���}����k���(�~B�����U�nV�}��)AG;,�Gg[����a��������oL�D����E�<�L�<�<����	��l��d�+j j�����$�@�v�����|��u�|����f)[��>XXf'�2O,��7�)[����o��wr+�0O=b�NL���>F��T�vO"Y'�6�v�P�~�M��0�|�f�|�B�>n������0��e?v�|�������l3S���8�#����X"��-|2�6���b��0�\�]��
H5���a�$��0O%��a���=���f�Pn���e���i3)�4�����V������|s�in��*Hq�g���l���{o���A�.,sAY�i�'��U^�G���8P�/����	�8P�G�'#�B4L���+��}�0N�1*����+%�V�
D�v)�/M�/�#BA��	�p���I��cA�"QS*|Vdc�6��t��`.��g�Q���q`��C�<���V��%�1eF�K_�W�c@*d���1`h.��}��91��������M���s���FWHb��J�*]X6�D�������dq�Gw`���(�������G�U��.�*J]�����q��I�2
��j��x���[U�RwF`���&�vJ]��Z��)uz���8]�nd��(w��!q%��������$g��X���}W��g��yVb������]f������U	?���O�j����x�l����rsf��e�������|��~����Y��
��}N��*�Q�g��@�J'~���3�*r���I��}t��{E	�����[�:����H�� 'V0	�Y�W��a^���"jh�Nw]a]lY�����RjOf������Y8�B���<cV\Kt�M'���+8bT������	����1~-�}g�an�����d\�x	��]��D��?����-��nsi�3��2-y�c������G�Yj��G����6��j^��h�i��g]/&�x��.���c��+Ks&�%�����r��g��00���&6����W��w����I����$qx�$�e&��H��}%���]��"���"���M�6�v>�31/��5t��������fb�J��,��zz,s���+K[�L9Wu��gWb�������U���_I)}@M���M�1�5���9��W��%s>fj���^kb��+�RK�x�'��C#VpZF�N`��d���W(���Z%L2{�����Rf�L�ja��r_a�K��x,�����%���-���K"���3�i�^�3���v<�2������M;V���		0�gl5{=7��5�j_���������*
���3����{�s
���G� �'�^� ���~Z�}�=�LF
��m��8�{�MV�g��6�}�l����k�����M1���klf�D3x"�(���~|y�����8l-�p}x��
�����
�_�6�k{}���'T~�������#|X��A@s��*�N���������3��� ���G���m:�ez<�H~f���Q�CN���,�+F���g�\����Qh�w�����4
=NXR����a�
A���CP����i��}py����U��f���K����:��� ��9:��������v�����m_��?����1l��
5��2����������^Q��[����R�,�?m���p`���F�������+����F�����'P{�����{����4�<�\%F���i�u���G��]��ibe�)����h��A��b*-pXU��N_�=�4���#��6���
xXZ�h�Q���c���8��:����G��l{��k"I�o����a�7�|0�>�.'���C�x���+T�W��]��\��\9�
���e���\��l��
�5��YN���[�������{����{����/a�w�����x�;_��>���n�'���w�����710D�!�A�����M�����)>g-��aO1�^����2�!�����kg���]�gM9��������r��~�������~��H��}=NI����������mz�^�s������"����ph.n�m���������������y�_��������%��6$���U�C�y�E����|�Hv�v������U����R�1<O�3��,$�#��g~����C��m�����c��B�"]���%��p��[f��2�W4���x����>*��G���`��")2h�hpU*�����M�A�?�q���%�R��[��������UJT��%m���M��9�d8K�t���k�������]�p�`�O�s�����)�p�r�%�'i335��<�����4|�Y�=v���dWs���M��K$_���^����	@Z�~�hU^��
%�Dd��"������#��9�sp�2;�$!}�����vka9&$G��w���I�N.�Mj4#yP����u�A�r�Y;��jj������
Y�?8v�z��7!���y�Q�5=��M�>�4�H�m��������q"EVs=<��@�c}u�������TG%"���lxy�Q�.��e<��������3K�f�.�g"�O�v`a��S~#�&�ca�C%��@��YOJ��|?�;	���P�E{8j�E��������&�T�����*�x![��w�����?���E��$/�����X7>vT��w;�`A�6���j������yha
�I>z�iE��[%�U_jF6��7�����������"����k|V4�����v1��jF�������3�|a�<3������O��L'�u��_��7YR�x�)�M�]�_���;^�&pHS\BM]�����Dn��3k{�v���Dky�4�<��n���0wH3{n�����e���R%�=���
}�l��+boA>��E����6��l�z;J!z���N��o������%@�J�k^9�@%"�ot�nQ�aBC�b<xhQoD�>3R��w�"������Z"L���$�L��L������[���~���@� �9��9D�Ol�Z6�+��m���29��$�T�a&���EH��~�]�~�NM���'j��e�i
��cf1�W�M ��#O�������D��������P+��M�
hv*�J�E�uBW�;���$}M����������_�c���8������\R�n��f$`�c.�m��@?v�~�k�C8��x�vXx?�QCq
hA�}N/l �,��������-W)Ir��8�JID�6xB��-N��D8f����F�	���Y�'�%�J���0�j,mB*���8�'f38x-�f��r.������_O)�!�gO��������-9�5�S��:����HHH�	�-�(�}hu3��gG�\�18U;��+�������o�MY|�<��yl<RPa����[;u�Bp���Q��*��P�yu���y�z���N��x������;�H�I[���U������#~���x�5��`x��b
���$�w��!����ny�#k��qJ��$O�\���&'��	p]��y�!|B�CxP)80����3$	���,l�{,.@!Y[L��
�k_���m��l�<B�a��D�!��CZ��,�~!88�a��k���x�70���W`�����VQ�U��dN^H�u��V\-�����t��gF�8+��U����#����H@7O���:[B�FJ�Z)O���|{1-����[i"f�/K��Z�e�+��W4���i��.��,�G�6��QP����)1U1�-��C��� ��<;E�;�=�w�-KR�5gB���L����6y��y�%a��'��A!*������p�����!p-�Ow��Z�v�prd�ej�$�]�.��������d�r����9L��s%M�r�)�CD_O=*Ddnm��%~�5>�P�4��%g��A��NL��8�L
�)���BT��-��x�z��!�kq�����9��$���t�2Z'�Gt��e��&�$1kS����l�2�tM��J���n��-r�����d�����Gw8���4e������L6]r�D�-�h�%J�R	`�:���DGM*D��}.��~W�"�b�=�Er��R�\�.�5S��27��#[���	��5�d�Lo��"�RE��v��0m*H�����m�T&�8?�&��.��XA�>���vx����JD�s�F��g
�"���}�_���u�o_�k�_����E<�����0��iO���,��������u��e���LsBv7�z��\���}{���T���Nr��w�F����O���@D���h'�_�H
fIV]o�9MlBfcW�'<�����@�u�	p�@f�V+{_>�1]_�������77�efWZ���]���N�_�7[�v��
���V������g���^���s��l!s]��e����
�v6��Y�dg���3l�fw��Z�,�at��"VGS���!xrg|>���t�L�]��@��:�{�R��)���O	=����EYC������/���Q��d'c;�����&C��i�q��AV$��hl�O��Q��g-���`�w%(-*�K`6���J�����gs��ZO���E{�U""��@�	���E[7_I�7���A���BX��~�	�R�	�b���16�uf�����8WE��:W�^����!���1�Ma�{6�b|F�"�3�-���'aa�
��GEOD8�=���u?1xR$�����>�+ZA|��e����
d��|V�i-���w���wpX��Q�E������iW�2��L�up����J"�6Hg�,��[�B�)���E�I�h�~[�'7�T"�M��Z�/��i��%�j�lAkE	h�����s�.w�V"���i�����-Rm	�X�t��%C|,�	8L7��?�s��q�D%�����t=�<��@-���/�xs��[�_(�I�ijl�{!5��1��S��7����m�k!*I��N��_H��vN���zX������{z��=V!��Sc_j�g��n|�*����/[f0�wVO0�d_E���g���8K�e����*I2�I/�|`kIs$������������
D�=������]w/���<f;��c�!�O{�����x��M� �F�����J��<�h����L��mVqG�j�sC-�������P*�D_E��������W@��I,�x��Sg�>/2���������O*Q�yP	2�'�N��T�m��P�P����j�K��nf���h����Fs�����t�:lGE|m�X�A��U����hD�i��<$P�.���cB���	�cZT�r��~?�Z��$��`!M�����f��;���Kx����������|��f�n�_���Xba$�^Dd�>01�'3���""k>T��KT����TT���Q��DuJ�D{����>@jo&�������lL�W2��{��<���\���]����\�9/0is�
�BD�>/�q��+�+J�������>6���rp*.�T��f����&2C��l/���L���<������1�+���"<���)��my9�:�BB��9c��BD~|���<�L[9����9�56�T�>/���F�\Mj`FM�GO����8Xs�*��d��Mn^S�|	���SC�1O��AhA,�5]�0��\�*����������jA������B�����W?����%�����q�BDFZ")��3�7�P�"U"|	g����	��6la����pWUVw����m�6�����u��x�N�-�'bp��x��u�m1��<������5��2tfo�$��lBr�/���H�'�{
xx_�$u�����B�L�[u���F�����D�b��c��k������u&�R���bJ\�5~��}+��V��2��v�-�t �h��������Q��R�-[�������G���C���X&v|��'��S�i��jNw,x���/Xd�LB�U�������{��(1O����d<�-2�bA��fy&��)��z�K9$W���>����^���
AhI�����Z���q����=7O|y1<���/�#W���r��Jt�jT��2_@��\��o5~C�������/����j����
����I+�`"�h��Z��"7�/4#����;�S�a�d�g��*?����w���s��Rz7s�:Uf�ZV�-����+�����C�\d��	��t�o��t�;�������%���L�M�C�J���!���GA,�PQ[�}�[[,�b[]Q��Cf ZH����D����O����R?��rt �����7S�\����������^L�ifoX�h��b�"7b��3�|�x�N�������E��v��or����T���8�g�����k��u����P�����4��|�Xl��[zy$�����z��'K����=y4���<��!#��%0����j���]���B�u����tQ����,�oC�;���d�?����&�4�*���q!���I���H�9������V�$Gc���m�JZ�D�ED�2YyX��5���	R�����@�.��e�Z��v
�mi���X�+�=�[}h"�kr����Y����3	5�l��B���?/dV�-@L�����N��#A%���{�m���(k���6u���Q^��}�7���W�ptQ����n5D|��_�a����$d(���e��7~%!��fG��6���k��� ���RE`Mv��U����(�����_�\t
��E�n=�plI+Yd�8����_�����y�/�+���@�odB���j���T��
��k���P�\t���Q�RY�[���������N����|�H��9���p�i����kS�����w:���,�:�5�v�^&��BR�sE���c�Pt;����������!
�e��-q;��8	0�1����G6df�* �:���N�|0/\	�.���V���H$j�EH�������-���e�*Zr"�5���=����U�K�R<��g�����F�.R+��nO��V�U<�,+f��4�
��rM3��C�X�����t�z}�B�Qd��xNN���@��v*j�&<t��d��|W���1e�]�9'�/�B�2�tn�y��-����#���8s7r�H��0�u$fP���[�V ���<�s
��������2,F���9���P� p$�\���j�io.�.!�}M{t������&3��������������)�>/�u���	l[S�[��8V��~�H��8�|�@�G0����`��M�����|�����r��o@����W��F�����x
% ����-��TE�:*����[��P�4�Gz�#*��t&Va�J����b��=,���vV�/P�a5��i�=�.����0&���������zeh��9��a�9�m�����i>��Pe�6�-w��� ����|�S����F��@�`L�����\�'4&p����8��B�nI2`�[&�f^2�y�\7Q��R}n��Z)����@���^���`��9���8�n[}3��D����
&-�W9��k&��lEX �!����f�h(0�Z��i� K�d�����>��{\O���� O5���o��?���)�*��
[��^Q�(���A+0!�9�XW ������!s�|��@��P]��gW������g����R�6�c'�quE���h�������JR��AD��y$"]��}s��&G8ijNp2%M]4v1{��5�)���������yC��T����9���?z������
�h0 �/"2����|��%�d�N�����o�\DY��'��;\ZA�_b�.���S��Q<
�1�����N"O���1��������LB	������#+�r���]#t�������i�_�����y����0��3
d���B��-��q���9s��8mH�8�a��^H���8�M{�kU��D�#�a:�Y1�,���4�����J�j||�xW@2��B������[~�W��PA�_zc�mOc�)@��9���
����	��"��>s�����rI�4�����h�a����u/����`+�p%_�W�s]��-�c5���`Q/3XL�ZO��1�;�/���~��e���:�b{�|��S�S�:���d��L�8�������W`_;Cz����/������s�����5�@:���=Tc�kf���Z�0���>�
vw�R?�r>��������$g��l�,Y<`����\T"*�����v��4�g����$��~�A��������c��������S�iFnA�ND"��i��b+x����������%���Y,�xJ�>u���K��|UU���/5n{r%-��L������y���|\��m|*�w��������{�d����]�Z��"UM�y'��2Q�2�E�yK(L!7��k`��+��h�f��h(`�7���F:��
��&���a
��-T��;���%�Q�\��Z������kX��o������f����N�Pa�=���j������B	?�R�����(���(�x��38�����QZ�i����A�
ts��������]�yu+oAy:�n�s�{�_PL���6M'���=�H#�y����M4h6Q0�M��$�G������r(�^	V��P�Z�7�$��`�xu�j��:t����
jG�DU��z�H��W4��8����Xe�t����,4�y��m�EE
D������
���t
��Wj�~����B��PZ����W�YU_HkA_C?��F5A���3�H�'w�����!��/�}	��*"��=l����O��d���F��:��O�$+H��>�V5��0��k��U��n
Q���X��u��<����s�+�F-�b��I�|�pQ�|�+���+A4
{��*����J4X`���*I]hKU^\Y�!j�d���*6�]���(d�������l�/���Ip���
��]9�-�1k%7v����3���&
���5F�L���^�����q�TF����~�vc'u��U��X��o��4���{���t�=����{}�������~���<h�������$�a|�����������vv�����C'�?>2_�E���N6m�e0+QCy���axjO�{��"��U���]�G*���}cO�Mw�51���vS���'���#�����iq�
h�^d:u��Y"��������ca�=>v�?�M��������n�9��7�i�n���C�}X���vh���a����-(���]�[>v����>���?+�a:D-�r��~���+i�@�+iW�V0M
�(UCA�N���\�G��^t�[~�a��m����
��-��*e�@��Z��G������Q�|��/���E���x���=����������FZ��������5Z�`�_/�,^6��3���e�����)����>���}�sA����;�mV�{���b$����Q�X���"���M;����q�0��f���U	�s�1���z�k��i�@��M�?|�^I�ium4s���'b�<�9K-_����W�4���*[0
��n�BEZL��\��SW��7�s�R>��bs���X%�M.qH�z�^+�����8�)�z������4f4X�
2������h\
��nr�p����W��/��Ud�dMY���R�E���4����H��*�J�����''l��<_3�y%l�j���������������������������������s��������CF�k\1�\���\q���^��4��
���^������P���M}���y#?��=H���\���������e?>o$��=�Apj����T$@#�d,���e�p���4�,gb4�f��U/�4u���&Nd�U����F	`	]$�����i���DK+����	��A��O%M�����p�����W"r����5�U��g�(
����
���g����A��(����	"
���P����0P�����I�����L;Q��e���.�O���Z�y[~�������y�����})M�~��C�y-}��6��~7�Gud����\���"�/�|,�`!����i�Qe���%��2l��+)�;�=�n�@?��ou�C�P6Dn<������w�x��%�^	����]/�E����A\��Ze+Z����<�}���IJq�a�_x���+Y��@����$��i�hC��/�M�BT����\�hE�m���=��zT�
����a,���-�.-S�����,Hfo�<fn���D�?dc&3����e��	-�������BB4�	�:�����#��zb+�b=�Z���6�z�yWa
�����8�BT�t���`0��h��&4�m�-(d��rSH��	8�xh��R~�64�i5l��dE,��/��Y�����T{�lJ9y���JD���Pk�~�X���yZfS��{1��m��*t�������E�%M=�.%�Z�7��T�J��U4��.�������V4u]�l+am�M�h��+s�aSO{�aT�2U��*���f��&d������jA	�Y�x�A��@���x
7�ZS	|^�i��l�w���2��*���9'���g��Y
��Y����AL�5�PX�iY��MkAxD
��m����bZ�Z�N&�muLs]�E|h�%���R~�m��0�8�1�M��6������>��v���V5�o�EBU3��mjA����<z�%���-_���
�&�
���+:��^x�����
D<�G�M/f�I?o�����`�Mm���M-Z�t�+�U�Cs%%
���	��:K�|����B�WH���y�9�4�T��'�~A�xRWMN�[9+�	���[����h���#���
�m!�	x����E2K�1/�b�V���-���8S�=(���_I`�z�8M��d�F"��������#�I!"k�UQ5Xd�1�
���""�s�8�>�+7K�T��n�:�
t�T�h�/��,�S���$��h�n���o��^H_����CYW	|*�z��:�<��������y��d�R������V� �`O_���t�k�����r���-�#�>���&O�J���
�`X�.��+L&���Aw��y��72������`��v�>���hBc�����J�oni�9�������f���9�jJ2�uI�LgR�"_p�E����>�S���#�P��t~��+A�����\R��i��,h������f��.�E��������Y�
B�4�����7�������Wnl�`��=�E���y�=\=�>�����qN�,P[�3��:�������ISa��Yj��?_��Nf�������{�����Z=Ik�J��Q�&�gD����������*�l@v�+�6�D�g.����B�����nS�`���^a��#,�a���� ]�."e�4Dz�iu������LE@fTn�y��������{_��Y_��o��Zc��I[�[7&�4���]�)6M�T4���7�u�F����{�E��6W�J�tH��Sa`�d��J�[��������P��9��8R�:���E�Xe:������3@S���b4_�X�����������<]f���B
D�nf:��������d���L}��m��n0����$�5�D���L��� �[(q�,���:������f+�@?�!`R��P���O��1M����<5���9��3]e��y�[�d0i�����-���`������l{4�7pF��"���LT$`����Q���+8.���Nz�4�i��ly�/-H�o�g��}�S�&��������Vex��D�n$O~#�'o��7�x��Na���-����Y�q�>?��B4s��y���2oX�]�yo;�c��BZ�(�"vI���nL/V���an|���u�j{���1e3S�X�P���ypKrq���c��U���=,���tg�����6�b��T��x�.$��Y��QcU�}ua	�|�i�� �nu���\�7s}�����V�|*�ay�Se
Xc���NA-��{�bB*�����z|��S'�@{�H��\��u���"���Q�cdsY�2>T"��8"6�y�����<������6�Z;�y#�9� �Tc}���w^oR����^�)Yz��*fL������
�HU�������X<'���i~��7_I/qG�5�`�������bw���)���X�����O��*D�}��2�s�zWq�V����>�������>���d���w�$)���@)�Z�$__���� ]��f��~�|�C*Q�q�y%O�;���s�Ul���T�<��w��}x��5��f�hw��^^�&��
5I��= �-_v�q��g�Des0�pU�h�0���Y;�'
��QS�����>����M��s��S�H���d`k#,H���UMhK#���[+���h�	���d�|Z�e�Y�v�F�_="��@���
T[�^�����}�r^������Y��4G�%���4����R��:Y�gu"?�U$�	����5�����\K�B��*��JD�*�P<�����x��BVY	P���L�f�%e���L��TB�
p�>��I��4�i%b��"w��u`u�1a�S�OA�L�2�
�A[d��f���H!����M9�2��$]Z��5���R�E�/��E��s�,�/�A�X��,��#�v��-������Ys}E��D�\�5`o��m1g��ibv7G&*������|�Uas^���	m�Ea2�������(�L���{K�[���g�[s���y1�D�StP�����z�{B�;�.9��/(����\,�xt��2��l�c��UQ���[j��y� �l������&B�����s[����,�_������/:b��_��%�y���s�T�����3�.(��rc�e��"�`M���e��9�l~��;����������x"�P���z�H�|1`�'���y��U���^w	3��[�$3�����;����1����������G�Z�4d�ICNG�0QR�tYhV7S�Z�m�7�����6�u����wL5yP_v���s!����$�e��0\7W�j��T"��M�V�x���)�������v��&B�`���o�q�9~/��m��&7�O����d�
��*[^�-��U���v�U��`�E(#UM,)����T�:�^_Zyya�����R���h�	�$�����(���������2�i��r0��$�l%�R=R���"������[������������->X�%������QG��%9�N�7R��g!#F�}�l�+3���L�=�k	5�'�Vr33`0*��R(@e�,���<I�4�4����#�f���F=�QEn���*m�q���g��m����c�����eK�"^z�,���g���]�Hv�)�<oia(����[8�7R�����{v����M���tYV"6����<C6X/rc1��o�0-�����v��O�����p����1��;\K��\aJ|����Z��o�YS�1��H���7��3E�i#����!��-&���e����i���
b��f8�����A��s�#���9��������@��c�	��mn���|�y�7�+bIQ3���7#��"M)��k�
�� *���8��3����^4�>Nhqn�����L�����[+[���B�[����I��� ���&���/P���|I���_���	����1��E,L�O��(G#�a�m_�H���A.�L��l�����
y�x���(�/~�m;Y�����ch[`}���D~�i3�]L�f���H�����7�����=e�MF��� ��4E������.#h�M�Zq!�����������nG5�!�j{i�\�+�6���9�rk���y;$g��N�230�Q�&w�(�;�+k���`J��/zt\O��b6����Y�>���7��+��>o�{&�D����ds^Y��sq�9�_�N�4������e9�j�"oeZ�	� k�F.�������q�J����mO;c,�/��R��Z&SO�F��b�X�J�>��{��2+y
��q�������a��������`K��(�,��)��1��mM�O-� ���p�h7k@��<`f�D�R��V�s�y��~��2�}U(��1C������}/5�Rm6���j�AV���{�W�O�V�8����������
�dT�����!�c������?}������k�e�
tp���e-x�%60����$��%[�	9��<�E�7��)�c��{
�*c����y�`i���5�4m���p�W��s�[�0����0��}f�g���.3@���w���V����r������s����V���0u
�\�����2���Z���u���-l:][��n��?�=�n�����D;�}���Z��D�{^F��3�0%v�GB����+���I����n�m��`P������v�4 ���>�y�Ps��g�h���n�K_fm}��4�����H���V���}�������D����e���4���N�-%���������,U��/��h=������pRGl�f���l�1:���S�H%�B������e�~���0W�/���r�_m��o(���5|�:9/+k@��
y|����':[���4�����^l�r��
l��}��IC��Fo�Wn)�������f���<�}���^V���E�;�u�S��D;=�Nm�t�~����C����=p�D�2?��t��*����q/�s�x�����|�����\>��>~������{,��>>����X?�3?�c���Z>��q_?���m�5���9�Z;�Zk��~������m��Zj
b��\?>���R���c�T������E!����s�SH�)2L�����};����Z��b�\�LH�CL�c��1}�~���k�z-_���9���X��b�|-�����/}1}>��s���X�?j��Z�Q���5�)���G��si.��6�{_4bjM���������AL*{/Fb��/v �k-�Q���b/Z�K���R�U���u�j�X��U:�$�.^!����B�����^?wC��?wK��>S��?w[��?wc��?wk��?ws��?w{��?����~�-����y���������m�|+�_K���_�||~����~��/�>>k4�;���>�Qtou1��y��q�[��h��_E�V��(�zG����8�����Qtmu-��i�gq=[��h��WE�V��(�zG����8�v�>�Qtku)��Y�Gq��.D8v��	�Ca�fc�}�x������
�<�������-O��~���k�z-��A$��?K�����������
�<{��p�������������\hw�H�g!:�Z���e&!�O����!"'{6�(cx�5��
���������A0/��"��L)
��Ry�&\�'�|�p���8���.�N`j|�M��U>�'�����$.�Se���|�n�DP(}9��B0p�YH:NN�� �yT��Y��$�|� H��]I0���UU�d\������8�
�q��6�e�&d��,�v��@�8�GJ��*n�8s�GeZ�j��4�EK	V��8FHub�3��*0D�d&F���� �OC�����qtnO���Q�`"\��g���*�q���%�����jx�.}�<p�EH��Kc��02�*@*K��'�[qhY>�l���+����x�6�����]��7%���u�,}�:��*q��pxa�;5{�I�,|��<	��qS�7&�V=\f3O`��d��`�:���&m����M�+��X+=q{����989D`�mK���g{�(^!Z�aMR����=��'2�{���;p�_S��9DNW����Luv�����V��;�k7d��k�DW�(��D�Q�gL�H�1��2�?�����D������B���YUS+��u!D��6�$�:������'ZC����Vd��"��m��%��yZo���^(���X����e����ZEFG�&dWQ��O�Q���HD�0D��v����'����_:
:��2�|v�~�j���v�+�74��O�wf�`��J��~�`(hp��*��Y���qL�g�j��
�/mg��N��=�����Y���(�,����9�(Z���]EI�S�� $���}���f����1��3eY�Hw �$n��4���}*�5�c�I�6��Y��).c���'����e�Wd%��Y�1AU	�d���SA�q��*{LD���@�:���zd@���,��f'
T�+�L/6�{�$E!c~1J�q;T%K-�_�'���X���-n�>�x� U�'�������_��Q%8
�S�t��������ik����Th���Y�c3]�E��X''vJ��e�VI�X/ �6����8�V��I��&^d�|����fS�����$u���=�=��+kG�����=�a>��fQ_���FO�k�L������Q����S�����?��OO�>�u��x����p�G-�xr��E�e�;��{$��C~������<���%*B�p�������"z��� l��d<T)+S�N���}b�&X�e�:���xZ��oa���j�W�G���IG	��������������?A��x}"�����m����=�q����~�r�NFoy��_��JZ����:"��5�/�����f���Q��sM_%��+fy�[Xo�h�!
w��� 
1�����m"O~��&����8/�\duM��f�&�4��j1�A�N~����M�;�Nc8��2s����it�c�����_a~R��,$^�����|��K�����Bs������������!������
2T�t���^\u���iU�'b�'����O���.v���<]�k�������X4g��uP}�����,��q{C��6n�2����#�Z@]@^�T!���B��M���Q,dp�Yd4#?U��T���=!_��=�����i	�l�rK��I=|^�`z�SND����uF,&O�+���������i��$wn
�$�!�G+��L.e�h�����c����8H�K�&�4�F
�~m`�h��>)��}�Gp����"�c�E������0�9�tng������L�T@G��v`���>����+�o��P�����Kx����}�1?��&��X�K��^�P��y8�$C���DYb�z.��ftP�a�sP��tn@�
�O����:.?XN/���1niN���(�D����?h�Vu���T����������2��Kd�)L���<����U���]���
^��E�R��P��~���>�\|W��|Yf��X����x�Y�:gb��E7�&��`�<P�q��t9����	�S�w>�z!���e#�B��`I>���(B�r��\@�8~��<
� +�y��\��
���I�q\{om%�B�"j'��jw�DZE�!Vdv�����]�ml 7�}���V�|������K3n�C��ef��!���q���B5���`3�hl%�c��s��<�V���-�����W���2�ro�������}a^���?u4����	��!/y�p����+98�I��sk�����_�C*J���>�"�\�
����b"��;�E�,K%'���s�b�:��$!#�ynX���zh�}��HX��s�N��?/r�
dYO�Y7t8����m�����^�[��;^\&��\Oc��_����5���h�	��n ����#F�E���:l"�O�*��c���(K���w���'�����c��:"'i�N�
��C�5+ D][r�O#������%Uc���5�f
�OM��d�{�>Q����az�q6��y��6r0,���/+u��������K��)"��Vb��n�9��Y����(	e��$�n��{�o�����Y:����������o��}5��3�V��
@C,@���V���V�L��_\�����\�� |'f�_h�o���E��^i�R����eO���BM��f�$�T��s�:Qf�?i�+�
Z������8���lS%"�[�fyq���^,���*���
���
�Z��1��S��8����������"�$�'��=n�y	�2����~!:�3��J��5��B��gX����LW�2V�\.e��-�������AX��ps�,��V[���'�~��W����S.o>My"��c1���t�n�A��=L���'��-������������}�9�=2DZ�w���]��l��j��D�/$�n0A}G�`
|�H�qq[���|�Mx$O,�{�����V2���h�F4�n1�0s�<~	��Z�.//���~�f�f>���6��,2�����x#j�����=������`-&@S��,��/�K��4+s�!��f��v�m��|�5"��`s|/$�Z��n��+�m��=�^[�^sX����#�z�R��q�}������&���S������Y�;}0��E�"Lzt�[��u
�5yFV��U$�����
�]/*DaI�,3n7s����pu��������SmJ���I@Br������"�|��\!�G��\�1��X�)N�nO� �D��p�	�zBf�' "���������@���\���'W�����������{]�*
Z-�X�*E�+V0=��������w�����B��f��8��s;�H5�����7n^�zk/�uo>�\�|���/�fa�Hg����'[��Bz�/,�������)O�$������S�����m�s%���x%����<=e;��1��xv��eb�:�,w��n�*�=(�����>V��WO����u�{���=}�������A?gh��9�$.���������
L��+�QO�[�"���0g@'�G|��Z�����t�IV����������������;��^@D�����"�7����	Pp2�CB'QG�+p��<���K�$��<�btd���D6�;���
D���d��6��r�x�s�B�x�"�+���+�-@MW���+	�l�=�Ns���BDFW��1�����
����8�V*j�����S�0Z)D����/�^��9���}���&o�[���w���da��X�� ��le$�L�W���>O�>�����U$�
�s�������G��S������A�*�]��M��!��`On�#`�V��6r*e�L�*jB\������uf"�`H����-��0���VM�W.�R$���$[o������@�h����3�R�"gz�Ta��+R%��".���F�W���'����G�*������e<����
����cx����^E�g��y�^a
���>6�wP����:V�8�.Bx+���v(n�bxd�E�wt�&�g�9�
jY_�+�[��������p�~?�(}���E��_O.�����#���c�B�|��En.��x����v��;�J�������|P�@�X%�r�������U�����[
�h�}�~m������Bp#���4{���B��-�.����h)�����JD~��X�b��	pcz�8���J��/�E�^
����~Q��[�
Y�������}�U�7��K��L�4����)���b#�h!"#
����]�;�f1AaB�g����
Z��/�8;��h��P�(�)��$_�N���]�U������P���+Yd�����G��R4\�a����T��/$�=���5��_'}m������ -P��>�;>�8��ru��JE�(�i\�^�[io��1K(]p�
B!���q-��u�q�y�~]��Qt} �Ne?����\��mmE-
��mq"���+���Z8[d{Lo�WD�zTC�
���D-Xz�g����_H�}�{����.�`��y�+�&"�j?ze�l_���2w���Hc��o<&��>�:<�����7[�1���6�s��9dDs+�F,q���+��)�[�x>��q��w�i$�lP��������>H������C�/:n�������W�mN�"��G��}g`f�L�����n�����z&h.C-|y�u�X���/U��FD�Uk�:& Z.��O�kvf�HH
�"�,�������2?	|���E�Cp��w��H�
�F>E�t3�Ro��w�N�������G����G����m�>��h�_(C��?�U�y�$#�5���[����u{k��;��=��7�u;����oC-����AExl�lE	��5���B��VO����W�V����D�E�����y�P!"�'���.��nv`��lw����	��;@?/���g8x�0T��<��T��dpx��}i��	������'��iR���X���+A��L��A[����H�fK�P
w�"b/d��� ���&�]dl	ZI�[;���m�����;��k�k'?��Ec�s�c�m�I�5,�)��X���b���dY����r��{t����]�%w`�����D>��M!�\/Ml��Jt�V���Wf�v0��E"r�
�|S����@"��fbU
�����������bB���y�P��H�����Y6���yXV�$��RD�y���l�������c��_>Xw�G�%���J������a���_Z��>D�%w^�& ���;?6��=�#{�����c�#�3�
���&�
����G�X./��{g��I^����Y�
�Y �9�:
��L�5��j����6��}�-r�[!c<�\	N��Xl�3W���L=ej Ob�U2p�SL
;�)&@^(�4�M�PA(+��K��H���4����5��
�e���9��lZ�1���Z����&����UC��9��:bK��!�m��LH��6�����=m�0V���\�3�*?K��J,h�����m#�9�vF+��T�8��7�#�|�~���u�� Z2.�pC��5�X�V����h�e;q��	��U��[#_����s�}�&6�U�g��vU[�u�-LA��q;��OU��
�P�_����?F��L:��u�kE	���o[��g��7�D�G�����@~�����_z�.����swq*��v���T��?1J�-� ��Q����������"�Z�S��}����t��v��>��c��I�
i��������KR {�����N��b���@����f��<TM�L���8��[����"�fx�v.�?�!r��;�_���*^0w*J�����^�����@�w�M+�u���7���$"+��v�����x����tb%��=^
N��B�2Q�C������m��J�g�T��yZ�Q��p��;�w����<y!���������z���0nY��R�����hGu�h���H��E��-��x���V6����QC�W�����[k8�G�U����T;1��xHT��Ri8��T�������z�|�P8��:�	��h/&��\�9�f���Sp`�'2*j"���q�7�5g|*S0Yqz^�u{��.@DM��)G}^$d�E����$���P�c��^?asW���}�oa���2|~��U���n��v��-nr��Zp�<��'��	�v�O!!�b���?�e&w%�?,������m#���F�n�E��;��b
�����
R��QPS�H�A�l���b���y�f�/��N;��BG�]�<�]�
,B�i���:��.��~�A�/��@y�H����U$�y,�3���V�������l�������o��
n������<�ULu��M�8etE�����(1L��g��x��7��6��v^�(����|B��[.dW`o� :cr��
�.g�C���v�z|f����8+
7A~�w{����	�Q�\H+���|�B��Y�5����������<qH����0��}�&b���c�,	�%�X����"n�DP��7���������O.k0MTP[�h��h����@}����mm��3^V�����A�zSw�o=k�L������2�T��i��J���Y��>6t��e���7P��K�+V��n�� ��=^��<���O+����a�H�,{���Vc��m����GbU�A��7��|�k����O�yR�\�O$D�����g�d�xtU��x�$1w?@K��*�C�+������%�����"Y���������?���\$�hf2��@���������s�;��v��Zs�N-R|���k�vH|EQ�XW����A���� B���c�$��������'����1�wH�u�������8�m�A�K��'��pk/�c2f#��l� 2�
��V��=����e!Z�u[�Mo9��X!�;2G-�����A������s	��m���c5e�ya<��,��D������b����`���r�T���cnu����i�>� ����O��f~�iS��" �hA{����a���>X�G�\�2���T��:��W���oBo����+���zpH�S�}<�����\i�E�j������qX���8�����+�v[���_���vx�6�i�$>~PS<������j� ��E5�Z���y���X/����f���_&k�[�<��wd�����,!�k��g�h�!'�g/�
%?.r[D�B�0B�GZ3QJ{�Gch��sSF�<�|'24��&�k���.N���y���
���������vw� �r�x�.����������"�'��t1��w����UL�^���VK��|Y8�����0��
4���7�NC�t��q	m^�Z�U���U�S����`6��3��FP	���6�Z�v�P�1=��9���F	����>:��?/}���PP����b�������1��/@��4�Q�[�i6�AN�����j����4����2��?0#)?�����t�Xk���(H����J�������]��]�Nt��i�T�:�*�z��l�K(<�cGH'���?�o��N4��7��b5}��
�<���&��-�������kv�����e�7uP�@��7�����f�t��;����.��V��LE�y���cZ�Y�:����������)O�]�ias:�u+��JD�;DYN;
[����i|���;@7�����<"��)��P}1��;���%���`J��c����2-��mb����$��A��dI bt��w3�X����fL�^�+:Lt�j�l��	_�,iA���aIy�m��I��{v����T�����<�:,i!"c��-���9vKZ��D5�[R�=�D�K�,�m����PC	�lI��!���iM�}�\�m���.B;��%��1������US������d\��k0��*�,�������>���[KA����jvtUf����iu>��� ���FP&�J��S�1T����,��
�� H�>���FN���+i��M}+��f�C)\N��e1�"�^R���FQ�1G�1AE�QT����1T�%���A%�����~������~z_��36D�|��������}��)T��g[�4#[�R�z>IQ�@V����g6f�L���L��}.����P��/���#-��3�\J�Z�o�&����_-G[w���	uu%z������)�m������\(��6�{�,3Q�A8r��n
�B���"���	����pem����nr]���R�����N�&��$����`�����1�KC+����7�k�r�7j*�YE�N����	�qskc��f&
~�y�Rn����6�����`t��$L5�[��\V
��z>��v^V����:h������qUV�!�
�hi����Z^��Xj�BZz�{�"�������$�\05�s�<9wR
���������j_1w��}�����p��6�r<�@��
@�O:�Vs���`��i-���#T%�������}Qm
�wJb��vg���)���Z/A����f_y��/��R�Go����[�{����g���b����nN�TS�� tsG�����+
�^�$�� A�^�R�IM�qC�..���s�4�n	�l�y��K��+L�KX_�m{vHI k�w��~r[����#����4���/X>����0A[!��v�}i��v��[H��	�~���P��4���;
�4&�z��y<_N���:X�o�'w40h�~�pP�w/E\T�N8���8�Zf��?v�h U�������w9���\~��@��b8����6����VNO0���������5&��q[.���$3����I0o��n�����������k���b��&�-C����i`�F��#��������`������,xDE�<l��.~*����tw��f%*�&��Q�������g6\������zR��mV/D�k.���d�l^�u�������[A&�`eX�.���d�e���,���W��~�@m��`���bE\D}1�~
������u<�E.��'rh����l���
u��C���l�R����4C��h��hm�%��j�����:0�G��{Z�gy
8���
���7s�n����%`^�
�,c��n�w3��y&����u;�kc���9��%]��D�(Fm���s��&���0��e�����F	���Q[�����b1n�8V�J��VHL*8�M�n����?Tq��aX��o�w��E9���c����B!s�����9SQ�+�o��zl�������g���]���Q���|^$f����j��~��PQ��:,a�:��}^,��oC�4luKAiFA=�(���(��|�&�iz�� K��EL�`X��Yf���M�?M�Q�������QZ�-x+�a�4f6�r��3�O0ZzX��J���L���Uc=W�MpQO�����|�b��� �1.	���*��%�|�b�\3���*���r0�1��3�k����~�����?�Z�c�bc-�1s���[��SH�g��[�����%�s��yG���D��U�c���(�������5	���y_s|�����q����_��Wm���/_^~J>��_��Y�bdS�����t=?���������?�\���|��ot�@Diy��0n����i���������?�?���o�s���[~�>������~p�����\��	��:��D�<P+Q����F\7�������6]u��X��~��|#+A�����Z�x ��"����%4{����ev�������!�k�y��Q��y������H����"����O[�����+��J�U��8���m�>�_��O&z��q���pc�
P2���sa�0��BD�_Dn�����>�(u�����~�n,3S���F����-Q��F�	��Y\�Mv57���&i��%�:�^�9,�AE�G���F4�J��u�u����W�4���������.;�?�>�w%-��n
 ,GAp����a��&-����F��9�4�3-S�%n�Z.2kP���x�������V����`��o���63H�y�4j��PK������;��E�����������-�:�S���\+�����\<��K�p3�������%�{[���3����~��;]�98�E��	�)���8����E�S�}='��@D����h�a,-.��U���3��*8m�t"���B��"[��?���w������{��V�B;b�[�Qm�C����n�����2�+���kE_L�Q���/�����m%�U�=TA6������|*(�4����������{��<��:���L,�v�����|K�������i�����Q^4^���<��,qEz�����{n,��S���%Z.�������Z!'��S*����"*��!�c��^��a����<�U�2�	9����l���i������$������M���e��7�<���L�t��������?jo��k��|�����7�q��S�*�e�>�iQ����"�q�n���tz���T�Mm��-Z~��fG.����l8uv�v�A�!)��o��
l�q�9�,`����h�����Hu�V���^����W-w���{OM����<7���`��c��K��D��������z�����av��-����0;���dV;��~�s��r%�m��Y8�m��i��OP��BFsU$`�1���a��*��1��6�R�����5�;d�c�?�����k@��������l�8a�Q��.W�H��r<��R�#x�����S{b���L���S��Iw�����hI����<b���&��9Wo!f	��8)J����DQ�+�������;Yw$�
t���7[s�������HA
�U��a�p��	��X�\!��l}l9P��?<��!C���N���v�oMB�wX�������c���R��%�+$d��i��{�S0l�=�1"~����)��E`��;��+I��Y�wZ�����`�q�g]������	QgJQ)�,�����$��8M�q/�\��dm1�#6�
{{��	<����
?L�P��4���:��{�������^��C������?���::���U�e�&���"?�k�����i�V��2={���qf������Q���O�!��	����`���6ZQl����|{1-����Zi&4�O���[i�����+���vm����e�_�f��0"�GA�JB:�gZ]�HLn���WEH��'��������1q�}g�r���Qs��
����a����$�?O��0�
���l�����7�6�Wu���;�D�O~�|z�������p�����Fy�d����p1��G������r7��0k�iz��L"�z�����gz����)�����*Z�����>��A��NL��8����H��%�����PO^�����c]8��23���$[��TF�d�g�����&��/kS����l�2�����*�d�pK��T���RI�
�#�;��G�2�`��RU&�.8q��wE���t���Y����\-��(�I+;}��8��U�H�y�#C���T ����f*R/s��'W�����P�k�7�Y��RA��v��0m*H�9�T�����3!����y	����-9��?������b���M���E\u�����rw����L�T���u2�bFP��E"�/�g�)p���,�b�on��1a�
��E�9!���^�"�f�L�K���;�x^u��w�{l%�l�_�{����a����uAM���[�Lg�!G����� <a�?��f����� �^V+;�y������8��������eW:������� fvv���H����w�L���BDu��l!s]��e����
�v6��Y�dg���=l�fw��Z��hat��"VGS���!xrg<7�mqM�|&�.q��XM��M��}�)��mB	��L��EY������/��9��������L�THS���}����n���H�=��������S�iK)�t�
�i���t��7��3|:�[+�������>��f���Ew�U""�Ji��y�����3,+	�2��A�V�BX�@���`�'���@���g��
{��$5:�++�sU���s����	i�Z0}Q6�i�y��3jI��lfsf
����Dd���w8�X����'��6o_b?�x���w$��<^��=��@&�
�g��j�Y����N@��>���Yya��f�`������L'B6�h���i�������L>K��V�Pl���|�j�J���-Y���h*���4l����� -P�D]�y��AkE	�<i����u���=(�Mc2=�K�R!?����X���^��z�}z4��e��qx7���6*��4]�-�<P�O��z.����|�B	<T0�����RCl13��:�O{����'p��(o����XoI��N�_H��vN���zXV����Y�yz��z��@�N�}����/,H��Y���pz���`��
��h6V�}���r��Yz�E��ud\H�TI����o����H�#���v};�$�c�T������B���|'/$����8��7��/�������/D�H���]�3�������I�t����$N��=��x���r�B�kOEw_��Z���TI�'�����OM��y��l&26�{�/o8������t�V*��ZK(k��%�*,��VtQ��,}����V����6=�X��77���8^H��M0���Z��T��V�H2|B6I������M�Ohb������@�~}�1�����kYR�	F��4�������;��/$/�����I`�_���
sY7��H�f,�0�g�?/"��Q�nK>�X�Y_�����~/}�Q�~�������.�Gu+J�+~T��i���	�gB=��/��n���{��v���B��x���%�h�Q�����P&mWhT"��y��{�X��B	`�E�O�c�|A(*��bJ�n��{!�N�l/���L���<�D��������7*�h
�c[^MI]H�����V"���D$�!�[9����,�����s�2U��5BpE�jR3jJ<z*>������'P���&��nr����KXw.���=O�9B+b����@X��>���������[M� K��Exs!{�n��9��K.|�k=;�����R��gZo6Y���K8�F�O8����Y(�.*,���@�w1�>j��bRm&J�c�����"E�%�n�%LY�\�_1�������~����\����e�?���J�)/$�FE�|����@;�L���2v����/��f�.eBM��]��p�)/� F������i���{Z#��(����j���e��'���y3"46��*�D������b���<D���������u��:�3�^�7���u��qd��0	�x��q��)���>���1�X�������(���@�d�e��*�c��=�nCR�p{!��Z_����-?���� ��<�0[j���vp��z������(��������e�ap��qA��V^�UZh�'_�e��o���=6����� �N����w�"}�y�T��,��!�5a7��y�@���K?����E��f�m [=Dn��q��,���N�7r$_	�:���&���]��4U���6��pHVH�=�����tX��d\-����=A�K&�N^�h��q+	�1�n����4CD-X�Ew�:�*I�@
������~(/�����(_��wk0H�F����(=��\��`R��<��:�Yk/&�4C��Q�d��&���t�XT!^�R�+I2���l$>����b(�
Y�9����E�N3A-�.k�w��2���N3����E����xXa��V�/�u�������=�������H�_$dn���kA��7��&�7�_�5,��uN�>_w\}�"�|q��K��X��������wGP������	�x��Snu���,
��rKWKk2ic��U���	��_L$n�]������r5������n,=���fB��Q����������,&q���u=�)eC�f�_���I��S�����"�7�n�Q�����O�N���n�vm�pr|Y������2YY\W���m��R�|��'�$�_��fG{�	���(�2)������dax<����� ��9�t�}��~��`����CQ�b��S�O��n_�w���������&a4>�&���	�nX��Y��<Q?�tJ�m/����V�7���-��f]9�3�����O��nR�7+	��
���4�E�Q��YIujt�g:�����wr#�
��{�����M�?e�	|~����j~��L@��f���I�n"O?��/��l��=���|����-�����"X�u�9�G#�& �|�bF�E�����L3����G������2���A�	��<
i�:���y�E7��tq�L��YN�l��7�2g�J%��1��?�N����o�Q�\����Z~��D��$qh��Y?�K�l����~��g����~H��P�,c�������a��6M�<���P�`��,;���]�gA�	�Y6# ��	�����TufZx�M"�q�+�Hy��h�a���o������3I��;�z�,r���+q��������y�M�o�gq-�6o,4\H��f����/OZ@6k�����=�Y�cx0�g��E����j���������*�%WP��7@�+��8h�5v��l�G�ud~��Sc����y����a����a�*s�������>+�z�Y.�4����{_H���s}�*�R�X���"���6!����n,�Jj5k�������*��9�[N
h��8L!��1��(`k8�
��G��<����������?�,���M,.�i�4j�!Y�OrI��i7O��A(�HC���3��Q���t�@�����~�����������]`n��!��[��G��o�����D�I���|3rGB.5��,n	c����?%������W@k���9`M��#r��y���wUf�/�B��(w����"�XU]�����/H�8���c1������h��EY-BRM�������{��;{�z{���%�+q���<m$}
����L3��v���HE���\����k��*�yf��:���h�:���������w�r�h���H�:<Ll
D��!��Q�j�/z�s��3�m�t�|��H���,��^�Q�ZJ��w�H{�n-�=����� ��gy�^/$�����3�f��E#����p�N`�����OU��:��/6��\!�JE���lNu�����Y.=(J}1f1��e67y�/��>3�z�Hq
��r�$b/Y�@&��6=Y�fPRa~�e&����Y�����(��u���\��ya;\�=�����G����,2w!�q�A��^$���%���'w-���|���`��u�B-�}���k�������@K���N<��%���i����>q/�B~�Z��L��a��p��$�m�����fP���is�2P��$>�E������>&
{�l�OQ��	�{��#`���?x�u��H�-?��!Cl�3�/,{W�
����������i���#�����1}��$s��Z�g��(R�S;����NY}�������'�P�,���[9f���������K&Y��y�������2�x�;��s�Nx���|Y�i��7����oc+Gk
�N�J��x���j�KG���#��U�����D����j���j"��b��>���_6Q�4]i�(���B�D�MW�g]WR+��e#QZ�+&=A �����I��\O���������-Z���-�����p��D�]��SWo��5�F���b���9�������~���Jt�/K��'�� ��{a_�e_��fQ#mH�*��a��z{�q6�z��yq��$�+bs�����hb�e�!��IS��(��'�!UoF����/��Sf1U���C6z�7WR�o$��e(����,��lE�����G���H���N�uU��K��?N����e�{.6(��Is�YH���!E�w'���W��}U��Bk�,�J<�2�\�<���$�=i]>l'_"����Jv��\[��r�A����������+���i��B���x��>a����V��,d�L=��Yt5����=a�4�{����D7�^��Xwx���\7;�y����N]�T^@e�d���a�f�e'�7����!��O"7=��E�a�<G��d��K�:����"�:2��.K���A�U�\+���[wF������d6��dP+S�[Xiz��=���w�']>�����|�}g��xVe���/~�ug����y����o=o|�X��\eM���`���t0��L�6E���Y0�7tI��n�.*��L#�	t��;�i�<���#U�L�D���������K�f��lh�������������a;}g��n4�Y6Y�e��a��X00K%�5�����a��Q�t��
[��x����<�u���!��cOm�nB�~'�T��I���^A�6�V�M��:�����%��M�D�T�����T��/�2�����s��O_�_�^dLV�p�/fY�ZI5������/�L~��%�������/:����G6`����>FC�u�����a����E�Y�_fL�vlw�h�O���0���8�p&��n�ea,S#=�\$�� �����e^��{"	�{��N,��^���^�=Y�H�FI�i]��b��,'�Mz�,�0��
REaD��T�z�B�X���L��g�iU�mq�m������D�p��
��<UI�A�D&�a(A�^m���8u�a�IRQ$(t��n>�+}o$���l6-R�E�i��
��9p����a��,$�2�����Tg(�;H|Q��w,-P&�M�����[����h(����PO�,1�@W�CRU���������
����r�����lCb ���"_���E>�M��Y������2n�T���]��Ro�uXTz\>��'������f��� ��V���_H��C-����u R���CA������������u�	���>����WH�De��������<��E����A���v�������?�g
�[�����6�?�[O��?~��w?��������O�|��R���uvf8e>�~���Vq}�O�1_����u����Q����6����z��9k�h�?;rp��?Vu���M,;�������f�5������{��lE�]�:�p���]�G	��6UdFd��\<������M��&<l�{C	����~?��b?e�L���q�����`�!�����"�f�<x�o���S�|6�5�j%����i�Qu	�?��L�DyL'SBx��kA����;2��L���[���n��7�~y�U�_�2|g
#>}.?��th�L�]�����
����<1�V
� ��>q����8�jp�����b��h���U`����6,x<RU%H��|�~�4<.���a����=�����`?Qu~��5�>��Sg�V�z�>l����6������"��������<|�m��1�m����M*I���V�������.Hs���g��2���,!fX��>�������6�1������.H��fU�����$d��L�@�1R�M�2�0�<'0�Ie����fI�l�I�����&������|~�dR]-*g�'-��T|?j�BJ����u�L�LD��WX�e����A�6�0���jR?Y��ob-�"�lP������6��i~�V�=%��ZV�d�Sl���t&���%[Sl2�������)����#(Y�M�|f���lMgu�F�S�����D�N���O���'5�1��x�1e���������.����0���3E&��0�r&��
�M]�f��`��>LFuE�S��2T����H^J�>;����vOuF*Sm��	��L�B4���=U����(;�����Tg���
�]���M]�T5RIfBO���B4fk���L>���e��Y]t?����l�e�����
���3��7#!���Hkf�:S���:#��}���a]��O�(�{�7����uE�e�Z�o~���?`���z7s�"�����v'�zcD���v��M���Ee��[j�F����dRg�x��������aRRu�����,���%�z1����;���J���Zf�����e����O!���HL��	�t��Q;a	E5�C��)m��cix����4���:�������rtN��mj�T�0{��O���yL����bV��}=��4���/�cv�f�X��	�Kj�0z9lu���h�L��~���2����c��fP����$����"�T����\��m8��:�k�����\����=��dE
��P��ov��L��~\��������j�L���6 mH?V3�ouW>�6&������(�/��+*����N����
H48�"0�{�-=\Z��W��Az�(�h���W����3�_��U��<<�,d����)-
i���������gGn�h$�'#���|�$�~�x����'��cV�\�J5�I@�8a�LH[�$sw?��mL��f�����������D��?�?���!�X���5����D�����f�*��z?�S)�	b����$6�D�=�m^���t
Gx�8������q���w�����b��u�p6gX_��L�b�X��������p���������/'$��h�q@�m�d�3Y�����QX��d��e�`)G��%C�C�VVO���!���r�A?~E����Y3)6:�7�$��;-������N����F��������k+U��[)r�[-v�+������tG��V�y��������vE�����
�Y���L�P��Q��2�%��uX��}_x�:�sm����"�������\i��K��\Z'{��|5��
'�����������t�Vj"7��e��&��h���W4Ln�X�e�yXp��*�4&��&9�h&���"�	��2,M�����\�����"��5�M�����O���0|W9_dz�n�����ky��l�),��<�z�3����"���+hp�����y|���	s	G?,K��I`�����
,��y�5�/���h����
Ns?^��6��H�B�����k��,�]g��H�2��d�8"��U�(D��)�75���C��$/��;T��=���g������fk�J,0cL�A�7zT�4������T���O�=q?���0=k&�K��H����u������S����v�+i\��]*��������^FQ��b,����&����H�u�.U�G��K��fy���RW��M��,��������Du�yR�*��y)���4y�EO�����:K�������flygf"Zy��A����|M�j���-KOz���GnHS"�N�0�[5�]�&�8��o
Y
3��l2h@�0h�!�������$��jJ�����L��7�1���C,HsS��m�"��'~6�U�.����,��
�W��Avo���zHDd�"��E����~�> �D1�+^���g�T�i����������M(}��aw"�+bA3����A��_��<�
o3���6!�s9���!�H�gG�#['���&��L���_U��h�m�?z��:|<
����t������L��f.tW@��"G��R����O������\+j�~�����"��-G������I���I��@�R�\�H��c�� ,�a�z��&�������e"a���GI@�������fyH����NfW�q�x$�JZ����s�>�N�e���FvYWu��a���a�������O�7�����E2�������O���O[�<!�wj4;������S!`t��n<�9�AJ��%���pc3����!�m0��&�(s���~-@�f|m}If.����/���[4�@5��?@x��&R��b���'������� Vl?�16}���s��Z�ODno����%��Z{�u��5K������"ecR��for�}�f����Z<W��O"�
]�����/���[LR���g����eS	�l���Y������c��Q�~Y���h��2�	h��`�~!�J�-�h�;!iSV�����U�?s�Y�h�Cx����6���.����/[��>��e��ag"�	�%�;u[��vAj�������e�G$��a#g�g�����{���zC��H��'��[��[>��c�Vc��1���~�6l��>�<���+�"�+���Lc���^������|}K$��2��{�#_����B<������~������EQ����qB.@�t��&�y�������+��$�ja:�/H��~I�����b��U��������pu��h��_Bz&1�7���[��;v������2�9G�VN���?}]���n��[�����]?����,��|���:�|]�|]������x���u���������t�>��������_}�~���9���X���z[�S�AL��;��|���?��c�~,��T��>_���k�_���9�/D��{�^�����pM�!������������|���:�t]7��u���jJ\������k��\���O7q�u��z���b�>����t.�:�t�i�u���\���������������?�u�S��8Y�I�!��5��=��]'�1k�=Y��z��C���������T���Y����c���j�=k�V>�D&�/7>!�y7������z[�{7����{7����G7����{7����{7����{7����{7����{7������z[�S�E70�}���d����]?���r}L���d��z_�_S�F70���~.
���:�[���'7����
��rC����^��b������?�!v�On�]��b������?�!v�On���
��rC�����'7����
��rC�����!w���������l����s����>��
����Nn�_��?�!~}._������|��������s����k�'�#�!~=��
��s��Z�{.����O�<�e?9��%#��\'��X�:���"$+���P;~)�Y����@B�R~o��D&l`�F8��!\�.����|!�'�w&/����>HcUJ���9�������8Dd��#���`V�������������Z�X�j��s������PC�H�t�$��m�(��_����p���Ei4U���
��HelLjz��?�|��a#���vpA�1�|����@0�N��$�Y����Y�j�nr=�2`)6���2���L�&���V$�;����j�u�-��<���)T�)��A�n��'o{ ��mH5�D���4/W&Y�����sK�J��������)6���
�)G}%rYj[�O*��G {Q	�-�v��0I���PR�o�7�Q�6zT���&K3Z�uV�;i�aB�>n�M�<�\�d�eA~v�x�����:}K���nXT/�T���
�B�h����h#g�]�����$���|*+k���E�_�=�SSy�����,���d�Z�vr�(�,kRl9��[�"(C�E��e=�\���(l^������&�h,�[
����A����$���TK0���c[���������io.�U����'�.@�����Y��H	�oQj\+�>�����};�Q3���7���h����n�N�����ti��zz��sY(6"����TF?��Wq�������t���/��ml��KH�8MHk{����	�B�4��	8XO���r���D�����g����Y����$H�zz�\�Z[=��@�8���$ �r����1�!C��V�8�D
�E���'��\������3���~�$e�.�[	2�`��S���~[�i�L[�����)�/�
�,6��2��'�51�I���kI�k�\,�'R�C�:1�F���P&���L�0��n�.�f�ey<g�K7a
h*I��	M��Y��#<Nlh����f0����=�K�u��+3l(���v@5fD^�v��A��G�X�L����0 �t�T�����b�N����%��
�f��C*;������?~�����Q�2&�<�rC�#�~�l<rw�"h�(�o�
��\���Q��/�!�p����o��&�<�������O�QT����h����x����V�ryH	�oaE����c%V�N,��i����s@��>�'p�T�a���z�l?�i��f�G��S��+FQ,�����k@��$�0*"��*�#�r���A���kU���z|�`1poRf�KS�|��a�b�V=�>H&Y�h{�1�ni��S��tX�+K��v��	>;�N��DO�����L�;D-��=k��l|�?���LX:���mz[[�!�3VPY}R���Y����RaN.�[Q�� /�bX-O���zQ�;xM�q7j�H����;�h��$���j%�|��@[�QZ��$,$�8�n��4�N����6����t�40�����R�C��e��;����3W��.��w
�g�LU�.}f�������5nf���	N�M[-.��k���
Mn���y��gC���g��yo!6rY���hl������,�>-��%���Q,E�O,��GF4�2�-$Z��q�)�����~2�s��d�F������[�~��gG��9h�5r�,��6����*^��)���\����p"�e������Q82j.�����l��^�	u[��3J�	�_�����a�������@sH�6��)A+I}(v--�l��s_���.mb�2�.�D{������C�F>J�zi'�B�l�� ��JN�e�.���SU�C%�t�=��
�3	j�z���:�����$CZ
dP[D2�m-�9��+� ��hV�D���Z����f��Nn1M7���mUl�0���
��J���]�3����m�Ug���a��ZlS��e�$��>C0!tF/��+�\���D��{GZ��S�=�0����[��#7�M�/���J��Z�}g�����(���
�4��|F>�A�s "[�cSv�Y�����K�c�$��������t��������f6�����w���iga�:#j�]KQl��z�� ��3+5���F���ak�w�8��6'A�r������	|v��h���0}�_�N)l�,7q��[�m>E���e�s�-K����Rb#l���}=�����N8��NA�,��zN���
�\�������1��k���ZE��d���d�J`V���X�P���S{�,B�K=m�v���+*J�d�t5Ya�������!�	O�������>��R�"k����(�>�IQ�����D��q-��Y�]��:�
S.QI�t��[F�/;��'p�e�J�����j�����s3���I� ������hs[�<
���b*Q�(�����b�����|3/��&�1�L�����1-zv7��`Zo�w�������|�S�M��a���w:X��d�{��L�NBh�$�2.$���<�jx4�� Z��������"s"AI	���ec}&�#��H��(�8�F�V�G,����������������:�)���RU���q��{�i<>Y����F��s��z�m��~Yw�?������_%]�u�J\����v����
�i�So���������$�0���x&8[�-����s��������R�'h�{M�����+6������m.�����&��"-�d�QA�Q��O�?�/x�����\�0���p�������J�Y�T�C�bG��(d�vn���O�Dd���w�fK�}%REX7do��f��"����q�F������m����t���nGQ�����cAY�S�����/@��&
_�N6�����[%�Udv��1���e�}E�|����sF����eW��3����8P5�-����g��+��U������}U����h&��v����4�l�P��lR���v���d�����Ag�u;�&�x,���T��!2������LD[��`��j�C�tfd����g�5����5�&/D?����k^f>������$�����!Q	��*���)�v|��`�.@Q��/B������������	��������X>��F�+�����sK�uC��l�9�W���4�?bEx��:U����?P��r�"#�~4���>��G�@�fw�p����1�A��9i_*'��#:DlxAXN�?�PT��`��*�����h-5��������<����~SmJ+& ����l����L�@�!�G�2��q��Xv��T�I%Z��>�x�����@DT��7����(Q	���=<���������_)�cZ7�	��\�H`�t���������`�y��[P�6�l��RwnG����l|H0n�[����y���f�e���Y����iG���'[�!}�[�#�����BF����|�!{�rB��1��G-&�J��@6W����*����,@���������������|!�vs����\2N\�Xt�kO�F����#��O\H�=q!]�����F��/���_F��}���\���&�~�8_4��	����'���"���0g@'�G|��J�����P
V��?����d�.v���<8���w"��m@7����](�i��^vER���7�t>$t�%�}�G$`�o~I����`}"2��I5�@T��qw��|��l�j�����}���++���+�xee��J<��++�Iz<'��W"2��������p��}<�d�����Dt���0��,D����O�����R�>�~������,Z��������3.E�$��V��4�gG����i"/f�nE���'��������G~�R������ �w+��u�=�I5BX+J�A<y���������;�g� �A�!�B�����uf"�`H���iL$lP���cWM���R$����lA��3����f b4o
���,"B�[����6U���TIZ����~v�zUs��TY�[���-���Q���gzo!R2�}��s[�'���H[���q^G)��0�9�>6�w�"���u����M��m��B)��5���"�� #���NA�����-�[:�����(�p�~?J+]��(�t����~q,�b��wO���F?��E.�`a�7$���]6����S����:���$J��t������U�r%"���������E<�[B�.��gx�l��9���e{�<6�h��h*��-�$"3C��~X�b����1�8�������E�6��q�U~Q��t����y+p��?���@J�|������
��G^=�iN�u��Eg"2�0	���j3�	�7a�:�	�+-h�����`�D�w�G�M���wJT^��X�_��|H%�|%�,�pL�g�p�
r�k%C*>U�h�����!/}
�W2:S3�e,�)��-w�����d���p�n*�E�7�U0�X���!����%�.8
a&�>}��#��e-Lh��=0�n�y���~�3�G�@��6�������8O�b�+y0x���������D��E5d�����J��m���+�oHN
�w��|�/\T����Ug��:D�E?���:��e�;8�A%RX��/W��D�/�����[��>V�)
�:2�o�!#��"h���f&"��(P��G�e���
6��
�}n��:���������C�
�P���	_�j�k�h�������
���	1��~��ma��XS�
�e��/����������T7"���pY�<n���z���f��	�nf),�=������@	|�
Iin���"����
iWa�H��S�O3� ��|/�iaW���i���Y�i���Y����g�������e�"�^b���6�d$���G��`B�;�D��3��w���nl��6T�����I5	<�h���S_��"a�������:g�"�}�$��H<�l%�n���pWY��JQG�_d��=A�Pn�t��gc
<|f�c�������V��nO���Mh�h�M ���AH�I������M����2A���'�]F[Z��P�E��M�$T~��2��qi!%]���~s���Pm��mG^;�1�ojy����F�I��N�(����Lb���d_���*lX
�2D1�"�>�z?���P.��`Pn��p���
	p��Z-O!�����W6���NA���U�96�����=����@�)�/&��l���DRi�Q��%�� ��W=�7�(��8:l7�����V�`����F���0��b		���]1F�����7�4M	}��[���M@���D�D��FDd`5{�M@��x0��h�SA�x�CC�B/>�������S��c��w��gk�}hC8ts�T�i��39��^�Y���b�����{qXh�@+����+�	�MthA*��OP����Z����b
����bdC	�Q	���M-eM�����������]M$�y��@>�-�{O|;�Ve�oeY-�����r��jh�,�E�������OH@Do�: �������l�oo�*����L�����1�Z����3�B�r�����m�b
HE�#���a�3��S@x$������q	�	7��YP3��*lH�����1����K�5�	����5\�'6��`o%z�~��Q��\���3S�|{]���)����:��/����?F�����q�#��:�h����aweg��KW���Ma���������_�3�N�>��ZQ8�Av@�����{�1J��aY�gGE��W?[o�:�������E;���p��/x����L����J�����|�m�l�m?2!���A�(Vg ��� !��~��4\�o��^����c�����g#��ph{.����9I������Bm�����%���m��y���@�+���:s�����$^�uV�Y?��p0L'fB��������z�	[��
O��,��Z�2CI�nC���h
��)�W��~���� �6cW�B7E�����=����ES����,jU��5terE�3Z��i��p5���y�7q�-j��1�74{uXD[nJ�?Af�w���9�j���*M{��b�a�a�<�|m(�O��'��(���'3����L/-�d�>OdT�D<�	0�}f��Y���wk�|�^h' ��A9*������T�j�G'?C9��~z����Q��iy�_�0Sp�r���<
�3K�N}�e��Z0t�c��QP���BB�������2���������m��"-���wR=.Q�lLbx�A��+*JI����A��>;@o�����s�L���	���BG��I&F�!-_G��������H���	O ���o� t������PY�~�N�����������13x+�i��gr���4�B���X>+
5=�	���Nhr��;��&g��4���o��B�����h���t��,���i���F�z�,��F���cGC~yY+���p�g5�`�P�(,�����=����c��Z���"?������ ������ZM��ng��Z3rhU"$�8p��J��Y<t��q���l,�������3CY��i������D������T�G�j��3^V�����I�����g+��������
M�5��J9�����y_t��r��4O�����Xi{h�������@'N����e&:���hl8��[��@>���m�b�0��"����l��U��[+�{G��/�����1�4#�����2�����<�${w�wY,"�@�$��(I�]�*D����Y,��t��0b���7������f�p&V����}��aA�M�L&��9�����unby�g����Zs�NO>���pA�C�75��r��DL�+
"T��<� I�9�/�O�q�Hu��!�C��c�.l&�S�{�>������]8=�
���:&c6��.�"s�`!6"�
����]&�u_����-��{�_���#s����IT._>X8W�����888�XAMY7/�i��
���.:����G ��<��B��t��1�����v�| �bq�{���|��u�	6Z8��[Q����}�������*`�86`���=�$�������zqHT��>��FjtFz����Mt��`�zC��X����r�]�m���
�o{�a��yH|������t���������j��:
\���������y������L.6�Qr�����7�;��T1zF�vR�)?�8�7�\�):�e1
��i�D�)�i/D��E&�4� ���N���5��F'��M�l��3m�|j��C��� F���xQ���b]��-D�����E�;��I����aX�Dd�*�p�BQ7�Do���j��O(����Nz`eg�i���n�4.��3Q���Js3\U?+@l��`6���}[�0!A-$���(j&��C���C���n>;J�" g��b�����/5�

~������o���Y��:�D<LC�����a���	k�V�0G�i����eP�����T���v�5�0�l=6�� ����V���,5i7�lW���!@�!U���
��s��G�
�b�D��,(������;�);�m!������:o���5�68���g�/.(�f���n��r�}1*�f�n�T?������	Q���
_�FeO���_�{{2N��X����f3)�u��=}�a�=]P�����f{�2�����gnN"2�!�[��I��7��R��V��)�-FcS:N��0���/�,iI$l���)���o�M��W�E��M����-H�#�R��%�����C�fZ�(k"Y
��.z�?�a�kTYQ������-��`A�[R����tER'���&�_\��)������aI"2�j���f��-�� �*,)AM=�gc	�%�
�,��
JxeK�������F
�0���d[s����N�<���*�T}��j�q=`j�3����{sA�8���:_�j����8�Mq�����i+����jF7�O#(9kG�8ieg�|��FP&�J��S�c�4��s0���� H��N�{�`���J�8vS�J�����PJ���H� R��\��Qd�b�D�FQF|�A��\1�*SI,�������|�g��s� ���fP}���������#=��m�7��B%1zz�EO2=]�z>IQ�@
����:�w�M�Zv����N����P��/��������2I%U]�o�%����Z���6�C"����Sn�����,���:��p�<Z8�q�����A8r�5U'�3B����P�j�~�\Y5�/��BW
��nj�<S���S�$�C1TM!P	f~�k���I�W���o�T�3���*�GAc�Sskc�c3����#�rc?�J�����K'��I����y��Qsj���������2���S��Q���T#�����7��p@SSw%���t���R�@0������%m�=R���pEtRQs.��M_��	p��I51��h&%<T�����WD��s����u��@��
�
S�|Z���Z���t��{�"7�%�����i���0y�$��j7�s%���j�)�B>�������/Y�1��[���3�s[8��vZ�ec�����S*�svW���)�V}�^i�x�JVd���7�>��'�cH���%m���\��%�����/���0���������!%��%{�����-(<Rn��K��,_q��D�6n%��6l�-��6����pK�����X
�(���#
�49��U�K�/'�{b�G�o�'wtb����pP�w�"��k'TBT�	M3��_
���F�O��6�����M�
�$%�mg1Hn/<���ks��i��������4	��1�=��\�o,:-�
:��df\<y���ti� ��D��IQ��/��>&�	��o���M�Y���'�'���U�����|y�yA��O��8�O���,��-yO?+��]&��z��f&*W�M�(�p�����g6\�����xR�O�����w������`���l�r�_�u���Lt��i��v�I�������W,�����a��2L��}�������b�>��K�����x�����-�>�i�����n>�<p�-���6��a	!%Z�h�.�Zn�k?A�Y��^��iA��{(����n]��~3�y��
�y�F��v�Y���"����(-<���B�^�gc���9���"���b�����hh��pF�1�X�|v��@��Fm�F���b��p��H��6��Tp��~�<d��v�5���0L�
�����m���i���k���������g���YQ�+t�7�O=6��I����V�Z������Fg�~L�5��Q�����Ib���D��ZC|.�b��iF!*�����]:mu�����*z�QP#oQ����a�z��L�71�p���k����1��<�4Lk�I������1Jk�o!>l������8��#���5������t=�\u�G���	.��S���������W�1_�)q]�t���qb�����*jV�k:�:�\~����u/?�[�y=�o�Y~����u+?�G��:�o����u��s^������f��S��I4���~}�_�~}�_������&��9+��~}�9?L���~R����g��~���������������������=�e��������_��������z��
?�����(��i�Z��~���?���������|�������_�������7\-����~�zJj��d	���`���)!��y8�Y����F�x2	��R"+����n�����p����eiHf��ak�����BHMDV�e�s&�h9$�d��[�;�W��&�Y�FK��c��<����plH@�?������N�Q&"��T��JJ�����������D��Q�p\8n�y�_{(Nip�y����g"����� �����
�3�R��X��sg�'Y�235_�<���n&*�>ha���s�]�
`��7I	�o����4��� ��#�.�:�P:�|&"�^��g�w������������H_�{%%���@X�	����������)�-H@5�B��I��#l����b55�nJ���/�=����.H���0�\�$k�Gy��:�Gs`���
��w���o)�2�j��z�7@}l��S�a��rO��5�Y������i9D%X�	�s���[8V�����{�k0
���L��p���}.Nw�`Bp�#{�:���d���)!��{��$ �wC�\4�G��7�1��:�&�T�v���
M����W�������?4����Z��o����}�+�
[�����
u[c�L�'��S��nL����I���e�e&�U������opq�IPJ����y�������~�)��c	a�	ZV$@OY~����z�����V�`Z'�'3��Y�"~�+����H�� ����U�"�����	�'�PSw9~&����������(�/�������Y�xs�4���.�N�8#���s%�=�.�
u@��v�V�� c��;~`���l���7���9�����������Heg	�����]�+�}�wF�aE}������E�nF��T��Z���������x��P�N^�-���$��������� ������|(�C��"S?YM�I�T�d#������~�q���_g����q���J������D�l��lw2�0tm�����K|�k���hA�{Q5�/s��!*�M��G�
`v"�L��C��;�s�l�J���2��kk��w��jZ��c�	x��KJ8�����<�r��\
�`��w��)1�����c���(��
�k@��������l�U�G��;��$�����VJ"R���|z��8�'M�p���n�yN�=�*/DKr�~e��!�
K{�A�`b�$�����H�v�(�s�DQ�'����0���|r������;��f����91YPa�T>������%�Ux�J�J(H����'j��#�Zp'T�x��_UB�w�"�e��"5n�i��m����-$d����f����X����\����1�q"���%[���q�{%I���E�Q���v�@\��m���i�N��Rp���	�fHV���v�3�m��g���d��0Y��\<nxl�)��!��$,@D�����6�`o� 8��aX�J`N5�o�3u��:jn���
eEYV�n�e9OW�q^qq\,L�j�~,�}��gF�8W��+��}����	h��i��]gI(����V�sz",_6�e�������&B�|_p�Vz�����+�w��F���3#�$�F�(�U�����y�.�����C�!�w��_;�+�n��M����R���Qq��$�l�_�&f����0�
���l�`!*������t���%� �-����F$��@� }��!����,<G��@���_&�t���Es��5��}�e��5�z���������r�Sx�q�O%�h2�p[J4L����G����#6���_����y���f.���k	�����9�I�U��Ne�N.�����%�0��A�K3A��i�����*-Ddw���I�4x�T��	����{���LX�w�*�]�t{���IVMX��f�V$`�]S�5i&b��>�����I#�qd(���
�zty���t-s�w7m�]���%o�R��.-H~<������M���.-n��������0�QzQ�V$�7�5��is{[HZ$�f��=��)����������N���_<����E������x����~EeM
�=����;m��o2�	�����1�b}62�[���<�����=v�����������G;��zFEs��#{�O�!g�����3����h�{A��6�������s���t}&�Yg�$6�.|��]i�S%Uw�����u����R���]�������3�ff"���u�-d������T;��l �� ���-VEg����R�Z�Diat��"VGS���!xrg�4�mqMj>�e��s�XM���T�k
�a�PBz6��F&YC������7i��Q��do�vnf�ZHQPmM��/
�i3�A�H�=������� �\��
�i���t���`-�l��������Yf@�|����p�DD�R	����3fXf�0��AKb�!�{]��vj��bGs�����a�}�L�u��5�>+Z����}~_=�!-P	���:9�<��������l��2���)���>+�����~l�1xR$�����>�'V�	�1������T ��g��*�Y����N@3�UX���0�9����i���t"d���m���J"��
2�/��G�B�)���I�I3���Q.�\�\��m:M�2�����������=�%����q�\��n�L:�?���7<n����H������j��$����t
�k<G)�D�s�����r���a���M����
%�P�l���6���b0f"�u
��3hM�����xc�������{��}����FOb�1����Q��~R�@�<�G���	d�����������*�!���������'���d_Ewgm.���/�q��@r�:��K+I2����'6G�G��3������;�$�q�4�L�B���7Y��

z�
�>eg�����8kxC�D[���J�
;+�j�X)b]�}���$��E{=Y���OL(�KzJ�������M@Y�$�b��X����_������h6/�������MQ�yP	2��vk����j-���7"��
��o�.���eCn
�~G�t�������
���F�q�����X�R�k]V�����FL2|B6IT�����M�Ohb�tCn�L C�q��A��O����d���J�>��}Q�!�c8�!��Xxs <��>��������O�|�Xba$�6"��uM`��r%�p�JD���T�MT�_�i��?u�b~T���6�R����u�'Heg����^���t{&�����[h���0���qD�����DE���Z&mN��X������G���J�
%0t�!�'��o~A(*��bJ�n����k�A��Q&�ul����s������7*a���my�4S�BB|f,������&"1y���5]0�&�j�����2�������QQ��S���+��9xPm��i&��O��u��%Z���ls���������L��47��z0s��j��j/n���;8�f._�����
�z6�	V"2�JJa���z���� U"��Q-�"+m��BYuQ����l�.&�Gm�A�cR���#�OgV}7)�/�p�?B�Uz�'�9p��~���2�s
hN�}���e�?���J�)`���^H��\��Q	����b�O����
)�@�K�P�5n���.����L�����:
���Q�E)����S=����������Tv���"�������{����5R�-��Q_�(0��������e������sC�=��@����6�}E
�.����Enk,He��Q�O�>@ }���zk���V�����+�6$��.�(j;��}&�>����Ug�$�IK_��m���o����k�����d�
�����W��j�PB#>�&,k�������������>:��\�
�w��4��e9Q�l���H�4�����M%S?���{#YF3�l [=Dn��q��,e��N�9r��y�fvh�{L����D
A�*-J�
��D8$[��������tX��d\-����O�����tr
�X4���[H��i��y���CD%�h���/FXI�OdV��ZHI�p���&A�I������h�|��T;��\F���Us�W$�*��J��SY�����	�f(�;�f{���

=�'�������z&Ifi�F�/66����e�C��Z���i&��e-�.ZQ�<�}�L��u@��V|����l��U�|����]�#�:�S���� $Z"��Q
1����FJ�J7$��n=�U�����:� }r"2�t���B������
��j!������xeA�e���hRvD���������d�)���<�WXe�!�-�����z���jU�6�D
�� �qh�����B)�~����~L�MJ8nf�P	]p�&�n!�p��bC���?/d~A���|�u�68�~%�|��t[6Ih}AI������S��g@*���3��m���d�<XyC�F�������n�X����*���0eV�� ��&���6��i�>���|�
%��m�b�i%�l�2�J_��u��N�|o$t�F��	hKZ�$KTo3�bi��bj;�����]�����(���DFB���wR5��m��n��������VM08L����������D�t@�7r�������ozB��S1\�({�#��r�C�N���o/$�;=��x����K{w����c��3
�e��W��h��	0.1T���5d�6Z@u�BK����~6����X�T������7!�R�v��[&����D�kX�{V�j��@W���������#U�v���d��fO��q���Hq���2^3��C
������t����	����������~HJ������M�pE^q���^	z���O1/D���f�Q2��w�	��{noYf�����Ig��H9{��	�����V����@�(
��
�)Hro����v����Qn�z��=�|mH�>X�jj�);��@	�Wg�bC��0G=wX���.�-��PX�����
C�����6V����VW�����G��c?;�z�./�k��+����.W�����w�.(_j����CN���W���[f��'�Q��z�l�aC	�d��\ �<�R!��S������i����gT����9N:�)�x�1����]d�:+��(�����k�=������c���1����O7[4��I�Dy8>�vQM����3?���!0y0�E�.����4���#�n4)b����](��&�	��z����q���|�/fEV��p���L@�S�xi6�y��*�<L���	�,x����(Nq��
� D]��}=��&�7���`�R[�"����9Iq��Gjr�;�p�/$����S�	i��k6��	����w�����:�8}4,A��Q��(����s������s{T9��1>(����!>��R�CP����~��@��PN���5^�$;�� �.eq��mL�t�/w)����n�����00�T�fS�z��H7=���=�T�#��j�z2%M]4v1G��5�)��Ha��1]�I7�^��D~�h��l�1�f.�K�8�x=���������|��[N��;
���1�$#���^�{f��;\�A�_b���n�)���x�c�`=��~'��*�|��������LB	.]wD�|y���|�����~\�(u���DP6�M��!���?���Mq����dd�����e�����.�������,{��0�����'���$�	�����"*�b\ �~20gpC	0����{\y��Lz��<���W$*���A��A���tQ�>j[��jB
`Z�*pDl>�O����7��38[z
IYn��ft�~��#�?L�jI��J���`+Ps%��W�7��^�J,h��kI�!�^ j���'������~IF%��6��opa��b+��������:8�df�0��
�l�Xr���O`_��~_n(�����{���\�Wo
��	-�C�0�������M����+�
��:\����*��$�A�%9[�dk��&���4��JDev������f������d����eT}Mo�����rM}���
�y�l��W���P�]�1��6(���fg��(����%�es�,�xJ�>l��.S��k%P5��/u���q�!��'N^8e��iuW"�.U��<F@;�'��
:/m�3h��j���`��
�G��<Ld�n>��L�0D<�N:�J���8����(w-��gG:��
�ESp��2+��-T�32M��G5r}������{zp
K��k�W& �Z��w��#��)�0�~]-W�����-�"���0��G��n�0�����)��j���q�MQZ��R`J���D'7��h?N��%�WeyW��xS��t����G������n�o��9�����@Q�ag�D�J�|����L�P�=
��(�������M3Iu�X-^�0�j ��I��c�Do7���F��^�h��8���.��QH���eg���9���E"( 2
�5�-��gA���j����
��?A�Ci��nHO�!���2���t���	�o�<l�*|�z� �@i���/�U���`7�#�����6�h��BfM�kwk-H�F��lj��a�E��yYQ���C�a�cB:d�3�����5���$u�c�0��Of����Ybe���JM��v�[E��C��L���Y%��e�J�u��w�2�����mH�D�l��'����
�`���V���r�[�m>�LD�1���������Jf��� #h��n�?+J�s�K5a�����
�S��f-���\�Y������c��q��
wq��c��Yij�����=���������������;�|o$�7���������Ie;k����1Pc'So����E��N6����f���2?��TM�{��h�,�o���� W+���F�n�}����Q55M �z��J;�M)	�h��.�	Xg8�''Ogu��J���7p����XX@wh���s���VH�����mm�l�`��o���C��<�� mY���f��w&�6�T��v�I|�
�p�����O��H/�����l�	��������@+iRf�N��
�P�����N�����/�6��`�[��a��k��������%�������P	���,?��>;J��a��D�X\���������XXq ����
�)=e���+�^���6�,^6�����dY�{#4�������<�=�����J]�P����4�W`���(Fbu�gGc���In��{�|�����a��CL�?_+A���d�c�X�S��i�@�s<~2��^I�ium4#�g�=N�rE	r�J�����W��u�d�-���`��!-�����������z����<��O���8��L(V	��8����Z��-��i5�����!ft�xd>�5?h&���]>�[���l	y&����E6�L&��5)�/�T�oMU|�WdE�^d��l�|��S"�H�YoY3"_���?�[��\���������V��������R������������zC�t��>���1_����u������C�����7K'���{G���9����\/��
���r�r�Y��lu��\�5�������L��p��hB�z�������w�G���RY��D��]{���j%���,���R�Z�l$d,��'J;�G��5������:j
����(�f������*.D>�Z����m�N	���U�h
��E������\�����9/S.H�����
$���}���u0�9�5�\��,+S����P��� ������*�qEv-�e9e3��v��HT���P�9�q��>���<8B�*�����Y�
��oEZ�M��VM%H��|����.2�H�t�7�����I6��FD�)-+>3����D�����u�S$�d�J������T��12U.��y����>�$<���$N7�B.����$�mIvtE���@�a��,��G;:*��}�	0 ��V���]�d��vtp�E�"v��[���p-��g([$���z�dJW��S3��'S�&�1����aJq�������i��3�|g�uj%.�������.��3�	e�g��eg�����J�I��{��g"�<��x�U7�^�.�G������+�������dFW$�M�ZQ)����B+|�d���]Q���aE�u8���W��lG_F-�!���nH_�pC�Z�C:#*�=���dS���������tU{I��/�9]�7���I�w�2���������U]������L4�������Y���=��U��=<�/�M��<��R��uA	�a<*�V�dkN��R��bIB��)
.�N�
���� �n�Q%�m+�a'�*z���:�I[�'�usPT�&�{����d^WT4�ok���J�|�	�w��<�'[���J�;�,�\�����gGvP��L�B�3?��(�e�^�;[M�n>o�N�r]�;<�0y�+��lWYi�����-�Qg ��Q�	tV�Lp�:.s��#�����qe�����dT��-��#����dQgR��2�����93TfY�R�_������W�4������4` [[[�������T�Z�
!��N�8n�\Y��rk�n�f������z��|�pY������������2�9�8����F$
+��fB���za!���Yi��!1�,��~��"U�BD�]C7zi������'���f|}u(�@�vG�s&���o�6�����fy �r� �Vth
\�����~��~���|����}f
�
<�<&}!����/O����n�#	u��W�h�F����L��SK��D�W�-����W�
��$�+,$}�U������@�t�C���f�����@m�J5�gGf��\�S������p�$�~M(�"j.CT�����w�ba�e3����
gg����u{BH���v��h��L&yT�������n_�
������X�&��l�$�7��a)CV$�� ?���1�$�|�d���8+�����&M�)��� Oj��i�b�,��������6O@�Iws�U=	G�����U��5��a���,��W�c��fGk�a�I!�2-���:�PFz���l�	|8 p y�m�a�j���I�	����@n��v4}��W�x@���$D�%k����gG�cA8���~!�5H�S�2@u7$3�������HI�1�V�q��+p�|K��������|��`b�c�gH����y&8����'���=�1��l��3��p�
i�Ox��	��!Tt%��/MH���S�8��$��w��S$R1����e�s���@k&��g�����he�8�
i&���������ir'Z���|��D�4�����qA,��,g��.��X\�n��%,5�t�m�7��Z�j��M�1����Y��F,��H�I��mp���%���rhUt�K���af�n���N��b03����:���i)_�����X��<d�h����q�o$��D�L�����e���i�r\%��$��;#WUH�sF���~t0�����
iB��LP��,d���m�����3��A�%��
IFt�!s����?C�����IV=]�j�I�u���#�@r����"���ow��l�����&��B�4�������-;����S��O:�����D:4
49�_�h��S�1�f��--��/�9��p8|�(�/�K��
, �];�x��q���D�d���M���E1Y^�4
�2U��<.K����LY�[:���7�d��#�U��������R�2��
�g#�j��&[xQO}�H��.�%����P��"]������oH����]�Yo}�L,N���;���NB]������n����V9#YW���q�^�*�C���uj�;P���k��% �W�5�W�F��W2�{�Gv�b���3��#t�f����}�����U����$k��7
U��A��H\��F�� ���[RY%����� ��"�e���v� H5e��� \� c>�~�g�c���B�+�P7�c���qk���J�^w��"AEd�ay� k$�P����\���nL��1@��U$�R����cWY�l�0`���6rDS��#�����;�f^�1B�tR.������L����X��1��"#S��C��zw���>��W������-h�d�XG�����y�S ;� ��a
�8�D�I$���^��;0����^��#�t��`!"�x���)>d.!(w�����H�C<E�U���\��{&��K��!&������Z��:�8BX3�g#R���4���#�>���4��,���Sq>*B`R
���!.�	���Cq�����-��hu���g�csA��3wp2�����Y��Xm<��z����a�G��'>oLU�e�����	���m0����`5:f�+I�D�!27�h{60�9%*$�[lO_m��YHH��Qs1T������.Ot�cq(NIQ�<���|0��/n��:;(f�������������|�V2e3���EB]?��F�<��)�$�*C�2)��F{�n��V��*�5v�C^�����zz�;��(�c��v�I���<���P�w����0��Y~�z��f���U���JH�l�������/���K��Y$�f�g���$��t�J�d������5�E���&
�I[��Xk��E��id|.��:��2��-��o���tP4�F�
�1�Q�+��-_G��0�g}j.��R�?�F�m���9�����n���7?o��lc�?~������+w�Z_���������%��$8�u�"�2���T��rL0���"�o�	��$���c�c���	�{I����=K�sIp�	�\��C	x@�	���o	�%��$xrIB�	�%��&�rQC�	Z.j���z�FSt��s~�1\S�������������S����C��Y��:�p=���9c�_=��S�7����"���1�s��c���) ��UT)��.u}�c�����u�J9Y����c�{����5�f	9*��������#hd~��^4�HM1\�?V��GVI��wX4f��58���I����0k4����J�����
��f#�!������p��"���#7!�5��)����EHq����SX�������R�L���
���$�!E�SK�cM��2�6$7!����r�{+�����-�V���EK�F�������k������7����������4z�o.�^��G���������3z�o��^��7��uf���|��WF������sd�������1j�M���v?�1v=Z�������7F�'�%�1v=��������n�]��k�G��X������x����]S��p�SD�%�1�"�-����U\v{��K]��� ��n2c�'#�XI?e�����S����d�&���Q��V��9���,&�����{C%�9p0�,Sz�[���	d@j��d�DU|!�1�w$��%6$��	!���������FO��0�#��b���)�����]d��P,'��[�p%��e��$*�9�'$����y�*���_����X�?��z��.((GQ�F��,e�����2����P���e���!G����4����yn�J\~1%��A�t���#>so�A�S�())���V��D��.-h�����-���������E��j������W�Y�$��P~r:[��+�(�eh�XRHT�u
�=��Pf2�F��yw���R��
�k�o���5>�
��3������d��TB�_�3�LF��\msY�QFS7e��W���K�i�����&�2��eA	<~v��XcSV4ef���X���w�����r�(6�,i��62iJD��\�|RzO���+C���`���Tj5eN�$)h��d��~�D�����4�N}k��P$MT�/��
)��Y���_�-�}�	.���[
.���n�N�I�gm0S=GB�(X1`L������:��H��i2j��q�\�y+y1gw�q�3Hq�@�*&D'x���N�"X��=�b&����D"�H���]���/���&�!S���a�g#S�p8��h�p����X�
�'������������1��dp�2����	�B,4��Mp��������B+;��C���h,(������������J�q�(���,�����h.�/?����x'���r��OP�a[�H��0��W>��6�y�f0�[q�T�!L���Sr]FAT�I
;x���8��9�
��|�y�XId���q�v/��j.�'��!g�>��[�aP$��M����o5u��7�����t��,$�9���P*7Y����EDb8����J�������;���
������N��\�4����s��=��%*���wr��6��������5�k��;
���x�9��{��3��rb����O�N���T�Z2`����dn(6�#��
��/�\ik�q	'�9:v�����O[~���Y���W	�'e\������~�$��Sb/pq�������m+��%�QL��@h��#*V"N,�`�#|>�=9#�;����;�;��"��H��3�hO��dth'���B������,%`&i�`d k���
u����c���kU�o�z|�?�88(3��a��C�c�{Nw/}�$f�r��{��>\e�-��o5;�%m�.��5��[2y��mJB� J��B�X|�=���H�;���7����!�g����d��gcx���}����z��
���RI�����:F\G�6n!$s$��!��� ��AI�O{(6q!���$ ��C�5Sj�9OtT�1���0�,������G������0���l(� �~Q�,s�����\}d���������,��*�I�,��uO.�"�V&I��A�4m�����!Ac��'c=o��"B��cl�����0��g#2�p��Y�j=g]���R�:���9{xC��
6�<�,��L��a!/���r���"l�$b�'��;<x]�-#Tr�4�b�[�>;���FS���t���D1��b�0������!&k��������s��:�/�uU���8�ll���%��/����������I���m~�QC+	m(<�F�������}��ahK���9��W��i��b(�Fj�G9qN�4����h�2kI��Q$���2�^#8�T��8K��1_�1�1W �rB�F��d56���3dPO�x4kI�a�L\���d�	@��9�7���;\&��\%%�2�#~�I_��lF���~M�#�����N[��Ymh��OYulSZ���$��6C��`�
$��g2��{G����v��t^�It�����7�-$t�otU����?;
����4���e�6�Abs S����?��je����/������3N7$_��L������,F�������wt�?6�T����9��Z��I�����R��1+��H0lM0�01��k��`�r�����������'j�� L��W���(�F���D��F����A�n�yF�3ps'����R�������~=�����R�.?������@BS���MI����i���M�h�L����LW	d��i��-y��{����\j�9�GO�_Q�� N����$�3�74f��A��:7���Ly��e�]n�Y��i&E���3��<6K���n���f�B.^H�����G��c�J��'yf��a%��S�PH��gG�qkN�b��
b`~��t%��R����y�U������u)���[W����$XMb}���Lcj���l@�^�bIT�Ii��5#�)�U����}x}�c!�;��LQ6�"Y�@Pq6�LBH�A~t�q!AF,X<�jx��3N$g/�[��a���G�GR�+kOJG���,f|,�"D��'�����L�#����cG���M3�Z�vjU�c�7$��Ec*,J�V�V2]����M��~��w��ug�_�_��_w�����~���PQ"�&}E��K\�h�����1`�7k���	��d<5Z�
�y�Ds�>4^����D��	��q��i�Pv����d�m&������&��"�U��(�d�7���#Xt�n���B�\�`�%ln�����0����wh_4H��\�m`��}!G�`���4����"��!�q*�i�?+�/L��/��}C�����q��J���O<���l�cAQ�3����sj�0p�Jq�.Y?k��<����������'��N���|�6�q��h����0=���}�D�>`����alg�����������/�+V}U��>��5�/��s���&0Ojv����eg	\����'�����8��/g���Ag�Mc�?�����>dv����
�DP�.�%MU:��c��z^��kf.��%�c��2?�/n~�G�����13I��V��u���8�D�+&8�^<l�^=�hC`���S�&1�C����+:\	�dG�Y�����b��k�3^AgE74��5���G���i�k�r��#V��l���e���@.h����,6����A�8B�z�	T�v�����lxgPZ������.`��V���	d���$��`��{�S*�����<H5���&@��D$7��;L�o*U������`�D&��o$����"�����v���v:�U�,�Y��������ot{SD����#�7��:��!�$��-�{�	�������wW�K(��8�B���W4c��m�_���|�f���
7e����QD��l�V��2��lL�^=����c�:�gG����0����#�D���6$�U<���EW��G��o��l�;��lL,��^����}%��8�Id����� J[C�b�	hE�e`h:�(?}{�	mlA���O\�X4�kKz�����=���o�=�!\����_z�cF8P����OF�%�����!T�d�x1)���&�q=����)���a��N�!���g)���P
N� X�x������)�N4n$������!����������VvECc�x���Kh�sb����	�1�K"�h�I2eYW-�8�QU"��]�m�/����mz(UhW���4��_Y�6`%���,���s����	0#i]���9���B���&���C�[�f����J����$"���G�yoe!�9S.�=uV�m��rsJ9}���G�_���r���������8�[���dez����h�����s�nE�AO������kt��}�������&��0|�u����(���Z�x�|������N&�VT&1�]/r���h���������"(����V��k
ny�KA���x�����-`�^����e�����&�������H�������gG�W5���oWub�R�Hh���3�>��Q�1�g��!����q���������V$5p��8+�0��0o���
�;X�U��������gS���
��:V�SfH���������aoE%��t�W��-�,;���������)~?�+���`�_��z\�����gsg?��2S��c���;�s����8�x�$��g]
L'�w��G��|�W����3������.��c,���0�/f�Vc�Z�1�����uK�{D!W������l ���6H���Q��>Z�F���������1������2�;��o�������WX���,�E{q�%�X��iV^�f�����3��>�9��v_bB����i&�z.D�#�1W�W�~b���H,���������o�c����P2
8	��_.����RGM:h����7V��'���o���^/�`3�������]�Z����bY�[���P"O�����Ov�G�M�&>d*X�n�����ZB���ch��/����=���c�pg?����:���Z����H�����~5qWfH���:T����<��`%&�Rqb��a��� � ����������D�+~W�N��.��"C���-�aUz�}�
T��M]����O@R���}")�C���n_#��C�2�>��qeea@(��	��ru�$�9�R�S��n
�X&�`�fo���l
�1����686@��8��ih��*��=Zq�
��/1!����f�V������E�D��'����yLK0�m#�1�����8<�$�����k���{$�����jhD�ok�xC�U����0[�(���1����Q)f��o|����
+0�mb�[�Hl���ni��6�k3�V;m8v�~?m8�������/�
�������^����Q'��@X:���Ak��#�
mk�z���Y���p�Kg���t���XI�n&�����z_bB�~>xR���d�|Dl�'���}������6��U���C~^m%W`�$�^�z����������<�8�a7�O&��2[��\���YE���d��<Cg,�3!��9K�OBK�"�q�2M�Avr�B2�.�~:���J��m��Z�@6��K�cb�L|30d��{"�+)�g������9^����&�A�p%�ox����l�.;��^>������+�0�6P��k�s���;b^"���lE�����`�w�%�&���(�����.r����w$/b�+e{���.}���6�Qk��b���	X�E��ycM��B������.����&��q	�0�4���/�����������X�_���\��	x�*?!a�CmA��t��b"�b�������X������Y~���W�����"q�>�_u���Yuy�M��,N�	y�[�8hg�8��N������u+�Q�MKv���bmC?���^��M��u^�����������Y����t�
D6���������Z9q��r�o'�d(��F^22)���NV����|F]o8?�NTs0tcI�0�������	��P����&Q"];��)��lVA:������d���T��oQ=m
w���~aB�+s���|����~���h��N�6NBOra �<�K@�� ����
%T}�Y���P"�����%jgBj_����Y�����������Z�* ��������2ML�i[���`KmngA��Ru���2��Z!�Q�x�����.�de��4��n��/����{�n�X;��$t�)�5��+4sW	m��? 7����%�9P/]��w��N~�����uFD�3~.�������/s�}q�����%:r36�����O��P�������?���.(��C���,�_n���4>w�T��k���M�t�S$|��M-�$-����S����BT"y��_�7�k�>#V�����*�z����=���a�+*�]�����T&�~�x�'���O���N�'�G��b�"�x��Q����N+���������u,s4:�S�OtV�o�g=}���6��6���R���0r<��QzZ��_*�C��I���q�(�3��A���P�i1�g�9�
��!�
���Y7��P(&�z�ka9�����4P/}f~�?_;����]_�����A���
� �����}:�~Kl��FDn���9����M�:2X�b?�]��hZ�C���qx������x��\HU���!�W6�V`��gr�L�;zrL��/+��d�}keQG�?��7� :����\d����:/0�1��[�����C�5#+��s��)VC��s����3!L�!p�Cg3o�v?�	���v�>���u������d��D�����
!���mV���T�O����\�1������[2�HFb����1|�����
�5~e�y�����M����'Xt�bIJ'F4�e[�=���:7U�����K��]�g`cW�:(���G��q�L�A�����p���P�i�{�	��	�����5�#k��C�4�9re�:F�t-��G�7'
�y���.>
�~x���*��"��U�����gm(�����H����+T7H�@��`�s�+��8�vE,|������^q ��R#������p�NS)�5��D�����I�@p�.����C�gG��,!��<�ngp��0�1�	B�3	�#�T�%����s��X�9El!Z�z8���n*�$]�k�2�����T��$�d�t�N�#�f�A����8��U���{�T�2DV��@��Z��Mb�i.��/������hb�|~a��	4l�<����F��|��Z�+���f]��6����B6��k���`l��L���/�6P��{uLuA�����z&����b�^lt�a�37��P��&��}DR&�@�����`�����,���������X������C����������!��;5yC�`o'
����i���Q�4��R'��#��(�������L�s3��Qf�)�gD��{edi#c�G�r�NVb��c��:�l?@���8��Z�P��������x�S�XT�����y�G��'tz\�\ab���v���u�����94lB
������p����sVC����q��1]K,�{�������y\G����=�h�j��e��=V������m�������_����$>�Q�N���'�!I�V�-�@��\�4�1Z	�xR�����}e����I��]}��1��1e��Z�G���r�/����>?�7Q�c���D���.���<��o���:(H�Hj�D�y=��#��$�|q���n����I��0�EIJ�����0v*}v�N�����Oi��a��D.G��������w1n��6�U�������a=��+
��w����_�������f��u�d^�r�M ?�v�S��:�E��3��T�M{�d�+����H,�68{qy�|��z��A�7�NA���Z��yL�?�c2�;f�+"�5o��P��H��q���kg0#:P�6|��jy0t��"�X��M�u�|������jCHx��N� ����K��l'4��jr���&�� *
W���\�By��
���ERuJ������%���4���`u�����;�(�w�!��X}t51!���i�>A�NVp,6��z�a�r8���M�6Vb�Z�����:���9��Z����g�QWe(65�+kq�
4&�3��KdS�����/�WG��3U�Y��^�.�Y�V&
m�a<u�[�=�+�z=?B��U�����L�|W�n�W����4'��@�d��j���gCD���t%��)�~�]���-�._l}�.��H�?2Y��
?�Yf%�2/,���M�ya�����
3�A��{K�aN�������[�	$j���[�J����i^Pj�e>e5���.�)�co�I~�������#0�z����LHg�c�g��� ����2�N-�a���
3�y'�|qm@(QM��Y�F��0����y������d�P���e���01IS�����V��7�p�|s�i���*��5�������A��h�����[���V�Y^�Vy��xw������l����H���h���'������NN_)����q�����+��R�{chGTl���������G8fi�$�A��Lf0��!�
��R���#�����+uc�4>��J|7�#�PS��@��I�Y_�P�)3�c�y�wd}@*d����>�k.���X�90�����Z��M%�^�6Vr�U�3$Qp�L�E�N,�c"Z\T����}��`LD���`0'���~n/�0<��J=d�UR����V{��NX�H5�3����x���[�6����VZ���+uF���k�����M{��|w	N�f��E��<�)���mv�U'9*������\�?�����fO��R�e>-�g)�+���x�Pq������@���2P~���	u��?�������?��fv��|v���s p�E���?Ez"�t���reQEt�oU��D�����(�kV����$�tue�C�,�k��X��$�g�_�C�y������]q�u�u�e�+sZr)-�:��&�+jd�@O������J��Si��.�+Opz��3u���x��;���������Vj�H.IO�x�CSt3��'u�����6�
�0u�� ��G=F+����|w�����=��L��j�"�yr��:$���]LN�;��3��,r��-�������A7��0�'W�����z�<w"�
�i��;������>��Yr���t�1�D���;#qTv���Sw���|�^���J�5��T�����,W��c���<�H��%�kT%g����3���1ca����UH�sW��6%��L�����X&����d��gc�$nZyQe���^�j��+����w����#���ZXI��[�����������������@'�D������s��B)�m:��>��|m��@����L�%��H�GC�_qj����!X�/��b�ZuLSaNf3�Vw<%"2������U�W�$�	0��o5{-6��5�^r��:�� �/�*�e+5VI��}������X�#7��[+�����m?�A?}�:��u]�1�~O�IK���.u��{�J��P��Y�m��	���feB$�'"��O|�����L��S�R�����P�y��iW���jC������%~j������#|X�A@b��*(N�"�������3��� ���Gh������:����W	V�r2F�gc_�u�lnsU�{�~��>�g�C/�qsC'����AO�j�l�p�����$N��l��YivF��SR�������:��y'��9:�������DU���>�{��O�O!��yv]p�]����,j��u���������v���V��y��T+�Ou��v�|��B��\��qa���7jOS����
}��WYGsF���K,t>O�a�^%�m�|zY��Q4n��9-,�?g�H�7�x� Pf��5phQ��N[����	���3����/��N�0��^��FY���+�q���uA��F��:2����c�m��E�����V-��xu91|��b2�c�z�"��s��S
�_H!rLq��LB
�)��VS�,�g[:}��o~�����������z�/���x]_���
�:_@������:�x]E��X�v�b�j�JPeO��1eK��1���y�3�)��>XE��y�C){�Mc)��������5i+��= ��L��~����#�}�:����m����������oEJ��?���W�8��qJ,n�m���S���t|�/����~�����V~�����2��x;V��XT�9��M���E����@��J�,s��$�2�[�6�ts"������8��K�6e��a�\��Zx!v��M��e
9����%2H}�h���x����>"�x�g���C�"h�h�So��_!��t6���q�e��Y��|�����TBD��g����M{�9 g8KEu�:�%��'����X���Mb���'��Lq�����/���12U��]� ���}v6��dz����li�&)�b�/f�FU�F��h�z�	fou��U�J�����g7Sc�����c;�*��K�W�^I�@K��
��cA�r��t6hQ���F+�r ��{�.q3cJ��`���e7�������C�~��[����yYQ�%<�|��:�G�����x�~��b0.$�b��Ey�Hy��>��[�0ufG&Sfa���	���VD�YH�9K��-B+�<��w�,�����=v��=�_��~6�$8�-T7DXI����I��G'�)Z3�s�n��c�<Q}��=��g"	Epc�_"����������-��W�����.9y����lH�G��QQl8{�����@>���6?���&��6&�Z����v4���dri���V4�Ay�
&>8y��� �(����0v
v4d!��������V+z�����8��w��lL���.�p)'5����"~�+��A}��V$@6UvY=�����:�C�<	5u��g"*�q������HD� j�C����Y�xu�$r����]��!OrU(d�'�~���C�H4P�Q�����������9X-�Ok0�N��hW4����x�X�Yt��s�+��d�l���A��AX���u��C�za���"�q��d�F�X+����G�Cu�|%���-/�}���h��h��A��0��.:�� 2V����#�����hBY�UX��;&!(+���uU��;T%����_.\H�}��d�,�[@ox'��M�6V=�"��Z�"jn_�2�TR���th��f'�Y����L��w`��9������R�����*7����BD�s�h��\3�]=�!�h��\&k�K�|�*�iC8��x�zXx?92����*������YG�Y��*���b�M����p��P�y<����NS �3-d��F	���Q�"9�R�����*�m@"�#�8F�;f+����Y���i��z>��91$���f�����%�;�@B?��"���I�S�����
M���:�*&Z$�?r2��FW�<=g���N,��z���B�w��	n�R�%.2�y�[���{����lL@�>��{N��a�/���%/X��m�S�+	r���sY/�s������R7�����r
�$�]N�UC��	lPb.l�{%`!Q[T�F��6�a�S!�deS�!�z�Y��f`���&����q�'���>$*�����j���n��/+��t�t���&x�������i����L����pF��sE�y�H�p>�v���X���{��8`�Y�:�����$)�/�<W��RVKQ��h`�PK�]����"��]��>��f$�yh7����j�.��w�����ov�V4
���N�^��D�e����D���8*�>�tp���D��$tx����#�;X���Uz����a����!z����5EC���(���Ll�D��.��
.P�(f��'����Y4���rfR�)��2�������L��[j&�{�����V��������8(���	h:�6�^)������>�$@U���D�3{H�Zp2�D�N�B���k�S���#���2E�X�����R"������a
 Ui!S67��S��U���/h�!��p�{�0er���TT*�.���{EI��$A��k�gG0v�B���&-d0�Z����A�F����HlV����cc�T�g����Ib�}v4�$�������������\�w$�����	�h�6�AB���L�x?��F}�aD�FlA�����v��Z�L���3`F��gu��S��s�_�2w���~T���x5&�%�/"��������Q�kSR���;"�h?�����ln�����IS��k#Hl���6;��b�n�b�f?���C���~��h{����Y5��3�4����ox������fm�4�9skO���c]��L��g����g�j�����v`�n��u�Y�`?�
23�"���Z_���;�����I�!sY��)h�
;����#�� ��z-��m��O��T5��������D�)�izl���f[L�.���$�\,VS:p�)��5�a�S@�\����$��4K��tb")���.Uvpl�et��U�d���:m�9�M`�hl�OY�q"=��if0��	rG��bX�u�N�V&�y<��s��V3[HT��R�#2R$E��5�Gu��J\~h��
h��
M��d���L�����h������aM?g$A�n����������~~[=�]���9�O:�29��blFmE��t��2z��)[��mVNF8{��~���;O��l��?�����&�>��mXK�*	d�g�i-����wL��;�9���������e�����<���L'bn��2x��������|/�����bU��I�I�
����`.n�Y��u:M�2�|sw$Hq�LWSd��Z�T����u����mPjV
y5&�f�j�hk��h�`�]�mhtMb�sf�q��	D*�s����C9�T��~j��`����-�
�S�t��6$�X�`�D�u
��3hM�������.D��=i���(`���������i�������X02A��Ydm�������BB������v�[d0��
��`6}����@p�6���Yb�':$��Vd.���v�V�C�{�����K�Nv�2�����!t��y������w�|��F�������
������;yV"�r�P�SRyl���BQ�8P��zs�g��H(�k.����>���+J@Y+$���X�qh��@�ldHEf��w];��W5!����=d~�v��j�5��U�E�7E�Q�q�e�j��wtJ�h��zxbA�fTO]���	lm�X���uY����S#�L���!�����k�~�Mhr�tE�>-:����~��cY_>�R�9��K�n��ugwpE�#�4�0u l`a��J3sh3�W4��/�Pg�?��
�<
00�'2�����)K<T����?*��i�T���Gg6UwA\����u�
Heg�3Q=}l���v&c���Gk��s�744��-��$�������%l���6MWh,d=�y��<n��_Q������� d����b���n��[�@H���a��o�d~�����q{�/��/
a���[^�i�B\��9|���L��6�9�1_��rpM���F����Xl2����(��!x|�jP#*Bl�t�\�K����&�:Y�O����'&a��|�����b�c'tA��VY�0cN��T�L.H�A-�8�(��$��'��s�8mf[�&�I����'�	2ed���0=C[3v�V$J��p����I<��\�+���������[�qX����������#0��D6�d`�5����a����';���8~�Q���lf��lgB���2I�b8�acB��4��)�^��Bu��3<:����+c���Q�Dx\s`'7Qm�,�����l-f"0�]��&��D��g4nL�i���J�{[�����@�� ���e�.�4���y8�rEX)�h���-��M�j��J��;�&���X$�~���"�H�?Zr�cy�>�&�|��HX&�&�O�� ��O�K=<�<�*2�g������Q&������r�	��-��#�B�L�3���W�U��_!-�Z��Z;!��I�G�n�y������s|��Z,(k���T�J,Y���i����Wj��b[�w�o<8t0W�Kf�aS5dujb�V=��Bb,����,%2C�A�d@#����}}=Uu������;/c%�����qx�RZ3��:UF�J��R2���� {�����,�tW7��O��l�������m���(�L�
�<�*-��\:��)�@8�����}�G�X�����g��uH�z�&�a���7���������:}��N�����z�<8�v�Atr����Et��b��1��x���������<P{O�U�^:008�3��90�"�2t���wD,�����B�&
���*����b+���G�?^L��������;C�J<������������81~�l��z��W�O���S�����������{�=3�F~��!�*���q.7��H���+W��ye��'G^Wd$�3+����m������"��=�G�mHJ@2+kEF{<A�"�K23��2�0M C�
��$���p��+����sH ��s��������o	�1q5|���!�����$-�%0M�[����| �J�|�5�����m��`���N�#�a������c�YF,��;��HB��4�+o�a���]��X�.j��2��[��Kt�s��VR��P�A����Yp�:_1�~V���_��s��S �q����6���I����f@�����NS�2
�\��v1�J*�Pf*������T��
n��g)���OW��, ��J�5,����:�:������|{ubcqq����n�8�����5:3�Ylu�6mv�V&�v"�����������4���3f��1�dFN$o/��n�47�7����S��u�Q�E�?��K#s��^	�.���V��#���D������-o���S��@�iXP[V���@�~�2�,�>bSL�������
�~��D"��OE:������F����<C�9�P&Vb�~�t����p}�)K���s:�8BKV�����8�We��|��EWe�S��.������,k0����i^�Yj�����I�����=�
%�NmH�����]�2������sr���yVc�(5��(_�{c����
MG�~���j�);s������=	�g^@��������oC4��xu���@$��EE=Yd���]S�[�M���c?;��~]�����+���D�)��es����>b�����"#�a�K"���~E��h��Y{���aA�S.�<�B!������?B��t�����WN��O:�)2}\6&MXg��$@���	d~����� ��X�p�+m���>�gcx����.[T��P��������MAB�����V����"8��G�,�|�
E��������#in�V������#)�<��T�	���\�CT������b�������+\3/��e(���yyJ,�
%������,x.� ;��w��;�m-�������w0hy�q�����r�
���@�����C��T���!��D��'�GD���3����3�CIb����B�{v
0d��"������9�s�P����XW0��� �������.����*4�,�^I��;��`�~�����>�kp���	����3���o&!7����y��R���g���*�p����dB.�.�hlb����k\�`b �:lf���L�M`���[Ht/�:���EC�.6b�_����@�72e4���'�-I��������o\DtY��'��9\	ep�/1w�r�)XB���1��uqRc!����6���,�C��H\	�������<�Q��C�:�
�����m�87�g#R�)&k�h�Q s4��)�f%�:���T���1����8����64c�_8�MZ�'�[&>�@S���Qq�����d���:�
�j�|�8�n���:4��K�Rg�g0�j��ZP��K���O���������|�
�����7�G�O!)K�i��O�~D"���W-X�B)�M
�����p���Q��ZTbA	�X�[K2:������K;G��x*��q�K���u��>��,=��r��#��S�����f���� c7o�}=9�7#��{
����;�?PL�ew��H&�`��h�:��.,���������/�������������IpD��-~��cI����5��E"2�[����T�������d�����T��Wck�I����]]�7�:X���
3r	�B�0dL��e�����bCa�W����X��)M��d�l�����J|@�r����o.�8�6�g��:p����+�SS�����	d��Jdq�hP�Tlw*�R"QMYB4��HD~Td�^>
�����0�h�j]4]]F4?�@	P~i��z����T��``5��L�}u���wX��$�Q�n��u%S��m6���^b�|V0E�x?���G\}lu��
"t�GP�����U�^��<
�R�����(��w�x<EX�v3s��d�Vw�	P��hW�^n����0l8�.Q���wAq:Ads?@���TAC=L'���=Kt����FtZ�@����Vu"&� ��@Y�UR>}g���
����Nm�2	ey�X��`e��:t�{\�Nj������z�H��:W4m'#�VYz!'Of/;s
e��]t�"�"��b���vE��2�ub/8VN��3�?A�Cn�i�y1�UuC&"9���f1]�|G����{i~u��Q i����Vd+"�������:�0n���2Z�H��ug�N���������pz�wT=/+r����8�v$$]vY�7_�o�N�is��x������A�l�0�_�f�����L0���mnM�i
R&2X���LI��T�7W��2����n���J�C�v�P��Y4�
I�p<�����rh[�W}�L��#0��#��W'"�� �������B�����4��(9��O=zCE���QK�����_����n\��g��OU�(PW�q��������g��P��f\T;�n{���� �_�t��Z=�8hRY��z�V�������3B���C���U[���Ke���j�/�#���@�h���Z���>����li��V[����QU5
��z"����H	�&�T@	hc�t�t��GD%'����F�	����{��@��+s$F�����SG���3���&b�E���:��"�Y�����<��k��%J�I�D���k�X*���������!*�R"���V���U����d0�&�:��PX
Bq2s��E|��i�E�����F����i�� ��YK��
�2��������(�P|��w���D^_\Q]�{T���>.V����#)B�J��,���p���������s���p�l,X������#��yx�h�[����T<��
��N��K�7"���G=;��k�
%������%{�����k�4��V�A��d�cU_�Z�d�`f��6�#��^��iqm$r�g�m����a$�>�Tb���_���Z�H���Qh?mV�g����s&�����3w:.���SfV�UBG��P��y�}Q�QC�Z���d�%cF��; ��C��Ld\
�v�9�(E�K�#��/)�,�E�DU����T<���F��������6[��z���?��kF�-`��l���+
�\��������������O�|���_�����Kk@������H��#JB
�)�u������!!���|r�S�^[��V��������k`������5�\��LB<8���
f�W���)��H�����d2e}�`�#f�Si=g>� ��������vsa����j%�:�1b��<u��X��gG`��<���=e��gE"+">J������2��b�r�d2����G��,
�<A�2�z!s�����!-kg�2��8�g"J�����D�N_x���G�m�]�I|aU>-��d&���@��<�J?��@��%g�]�&/��#MV4��A�����(��s�^\�p
�� f�S����ON�X�+�b`�U��8	E�DPn��0�Jc���Krj]�6����H�s�+c�K����"Q)�	��������.V���3��"#����3��)ks�5]��fK/l�6SJR�%��Af�Cv��.h��	���Dk��	�~F���~g�" %XSD�)�)Ds� 	`=����5��e����n~J���VK5�t��)]����rP�M�B���efL���t��QT�15����D-�-/��k!��Y��(�T����g��su�U�5���5��,�b�A�f���Xfm��4�����)����t�������)}��>kAA�)}h%��f"Y�k��C���.hlp3��#(Q	=�'F �`LM���YSY�QS��d�28k
�%S,
r[��}nK���5�RC�m��.�����N�*�4�/���=]���\����M0���KN�E�� �.�\-Y��H8�1�E�H��?������E��� X�	���M�29��@�*q�O��EnW5����A���j"�����9N�����s�G��vn��V��S�F�t�Vu��#gE��K3]���U�I�V5�W5����fuA����BrmP��^���wv �Z�Y%*nXo�q4u~�;��+�`��hW��P3pF���v�U*����fV��y^��.d������(z��L��x���u�y�N/��u�wm5�q1�����u���.H���E�����vL��=5��=�*���#C@�������I�7���#����"��>��pN��S���y�A�����Kc�'4�W��g��~e`C�<�u��������2�y]��!�G�����w_������qJ����>B8t���w�j_O��X���a����Ro�����>�foM@���Z��Q�wIi�7T0���a�84���$r}���O�P#�XL3C�EY�3T��&d�I	�}���
}7���ka�$XE�hz�'�c!������������X���)�Q�7���7�DVl3�u�:i�n�v�|�U,��5����r>��g�y�
r�vVbF�8���gGf�"P�0�TU�������-�L�b��kf�>s	g���n�����7{�����#8�+uu)8\������d!I~������po��VB��� �E&�=p#�d`�'����Ih�N��MNQ�>6f*���Op�0r� �������x�[^����e�L�f��T7���
�I��
��[������_Z���)ga����������D��2�fBa��o:�&�:���<+�aH�`�o����U�lL�������1��=��be�������h��C�uC����Y���D$An��>���X�!��=�Mo���_��Q_�\��@�v�1�.���iS� /������8�=f�m��$���%;_-0/	�Jh��X��a���H���/I���]�������pCe����Nh����
� W]`����?~�[3p!�S�'_]�f"�Y������ D��C-�ioI0l/�����H,@��
r��N�������\�����W6&�%o�]���hA�L�c�K2!�[��'_�~V$�`U �������������{���a��	8��v@�9�M`�	
lfQ���Il�'Q���C��F2e,��6�5���d1�<.���}���gg�K�)�q�by��fy�[�i�[mv�����v���Op�������oy��<bk%U�u��x��'����>d�Mf	I�R��@��H���_"(�O�'��@�����HL(���]C'��$.�UC�P����D@	���|������s��*#7��Fc!$J�Z�����iD�M`�����,��rI�����/C2�u������N��9P��	jZ��*���U�����������h�{Pb�BM:k�������S�I�����3�0�9���#��	[D]�(�}h���$O��Jg����
I^]jb��u�g2*��l,�?��c��o�{F��:�������z#Aa�*4��5&2�C�a�����%�hF�S3CcDfR<�t���N�?��+?7��e#(�J��t��`Qc��R�4"�{�!F��K�k����X�>������e��"���,����f?��v�l��9���q�n�����q�Hn6aY�a�LF��Yd������p�(��C)�uB�4:�k��y�^(:m���m��7������-������c�L����./-h���W��a��V�/_��5{Ac\��U;�]-E���OJa�.�<9�ll����&�Y��t�V���b��mv�C���Og�v���&
3���r�����jQ�"*��K;=���u�cZ��_�6��������M���X��6�����
��5�]d�;�wxDf�X�w��~#��W���IA���=��6#���>������O����� 	����,�qZ��!:?0iE�{����L")^�I��w�V,D�Z�]��M�`�07#��
n$����k��F��b�}���M��f��V8�Q��������$�Z��uiACD%(_����L�����"�r�q�Pq�`�����1�(�Q�N.{:,�Q@S�z(3���rBc� ���,���,���4\PF��v�<�����%������)�v��-3+@�>	�U"v_D�7|��*1"���I�XYU:](��������t�E:����v���,���{"�2d�h��`2J�
�q��w g%'�n���H��0!��f�0��A��	y�5m���w9R�e� <������c���J:��Us[�b����w���~�m�	��7��G�&wP73p�]��A>	V�*��5������ l��SC��Y���:�ed~C��7�M���*���C�/5�K!��nH�{�rS�03�^$&$����.�>���d�"{W�m&BmnbV��2
�m�����6IN\�Z)�`wU�8�ep�=L�I��]����ark�Y�g_�
�����R+�W��������]��]�-�6d
����X,&�([I~4�k.q��z�e����?�3!�����%�=b����	[g���Y&+����[I���r������]D��@������0i<~An}>��N��)��U���?W5�����Y�����ff�� ��@4���2��~y�.l���	��l�����!��l�"����s�����;�D�%������~�	d]_U�S������C[w���Z��y��1G���w?���V�7�������������L\�/� wYD�K���}��v�b:s��S(�M���$u�*�#�FLX��}��\"�C��&��;�.�T��/���H'l���W7���;T���=+�[nd8����b�_�!�d����2����N�
Mh����������5,����>v�/S��p=�����k��Y*F�
�m���K��	+�I}W�%��+�]bB+��A}��GcC��2�$7F�.,wU�Dd�������j��DR�04+O��JM����qf����Yq[���Y������X�[�W����[
�����I��u]�a�xQ"������l}�T����Z������%����K�o�j7�X�l:k�:�������h*�R����_#}G�Y�J�.������6E�_ee��0�;xe��t���eAx�[K&���a_�{a��a������G��w�3�	���@�.��Z82G��u%X�������?
B�`�#�(�����/���s��{�u�n��8o�ey�_1\>��s�\{�\{�|��q��u.����e�N��E����pY�p�n������K7\1\nw���|���������G*��G,5��r���r�������J
b�|���r�J�
1\n�P!��>0-yp��2}�xU�pU&*�*�-�j��_���+]1^���u���L�E��s����3��\���L��u,�[*��-ew���k���I�E���V�u���������������cZ���Aw�.�����5z<�&?KM�O�\������@��d��r������Jb�����Z}f�;W�kY+��Y#���L��df�q1^?��s�n��q1^7K������\����?.��f��u����������x����b�~���z�x��#�_0����z���z����b����s����_���W*_������������h_�1�E���q-��=�k���`\��e��Zt.���q���}����h[�-�E��kq-��=�k���X\��e��Zt,���a�����N��hW�)�E��Kq-��=�k���B�C�O���;z5[w(�j� �Ca��
�[��P��h��Ca�s����3��\��<��P�����D�����ODp(�z� �Ca%����o9�m���+7���g`=��Dd�rMv�����Y���DDF�t�����Y)������2N���Qz'8$�{#���>7�iC|H"
�E���^���8���[�'��3T�J�C��/9�j�?$�@���
���	���3G<Shr�C��G���� /L�x��m�`���J�
�Z�j������oiXG�Q�9������h���<'���Q�p<��O�9�#Z}�Q�C�2�����&�9�0S��O��K@T�M��cf
�oU���I�sJe�����g�n,���
�ZS��G��G
�V�E
�j�g��������2@N�,}<u�+��f'��[�6�("6v���&gy�2`L�0�N�es���d�@{Y�/&�����e~h%��i��I���J<�d{���]I{��#594IeV�F�M��Vg>�N��&����.���$��Z]�����\�����`��d�����H��V�iE���bL�n?A�$���P����!22���"6�f�9��@��?�Dv�J3�����
�(�����d'�R%?9���nf����D���4{93���U1��t�rT,mA��L;+��4���JD�"���FVS��4�k�<��s�aa�d�N"�dP�<5��:���"���)���k�\%�E�����$�7�`5�K�@������i���v>����.���Z��JSk�qg�d��r�"��DY������{;���uNY�����*�;�*�����{��I��3�����'�dsA��q�p�	���H�f� ���:A.
K�<-L���x*?d�'XM��a�|��E���x�Ke�j�����Q��FuU���H�#���y�)�8�|AR]�24�&2��V�4Ja���DQ�+�lU0i�[�t���zD@�S�<'X�a7
T�E���}d���L�1�h9`)~6�J�������4.�V�:�q��D=(Y��G�����*J���E����N�:��%SxR+��'�=6pq�v�X=�6rb�d�Z0m+q+�C��FY)�f�;N��IVS���H{�"7�6�	�j�IhTG_[�Z��*KC-����S�%Rp��!�P���
�] �h)d���p1+���2���h�?+�O��� z�s�\�����~�{�e-�
J���2U<EY����`cTe��������x�;�m�/��5�rE���r-S���f��A�Ji����EY� o���i�V*#��6h��FQ[|�?R��5:J�f�}U�{��_L�t���� �b��z�������f���H���6�?�v�r�FFy��OD[%���r���,�$x�=Q��<S\������+�^�"W}��v�������#c��g��N��4s)����8�t="i<<)����W�2i�^o�a���&�!H��'9H?���[?���]� {�M����m����g%�_Xoa��)w��$b���;�r���QJ"�~�5r@L�</y-����\�B�5Y��p����gWEY0$��E ��5�1��TM�,rZ^"^���g�"N)�BQ�
3|��Y��,>��d��J����^Px����T���O^��������S)����@��V)i�2��4����h�gE�.���^N�.6����}��H~�A=m:��Hc���t9������������9���5���i�
��A��0��(�	=�im���Rn���6t�yZ��%��`$=�4�'�+]��k'6E.����p�m��~6�16���D�R�^����M$�P�
�~"�k�BT?+�#�b��Ks����@��)���\�
�8�I���/���������HM���U�E����y8�$
�$��(q�:Z3t:(k7��:�Rd27 v�g�%�N/.s]���4�>E������3���yG}���Z#���K�K/Eu�:�����n����"������#��x��i"'��h0{;MKuK��`���]���"dO���#�0�3���#�E��Ef9�Nw�?i�-����2��9�EC��y5���G
@��z�%�yT5o��/���C,f�|�u��#�"v�Lu:5]��`���x�G>��� �Z�%�c��Xo+�:t�%�;��>�QYQ�.�.�G�j��&�t�t� �}����V�|q�:Hq�I�7m!l�2f�5c:�M��Y�\�:��T/V��2)6&.?w���/�ATv�p�6����Y���{��uJo����iK�dy @�:���o.u�3H?�\�%U52�����]�LQ��t�KC��_Q����_6�������$X�������.�a��(K�\��*/N�\���(ad.At������jM����*�f��+�d(�N�BL�N�p��7����������I�"a
��s.-����xp<�,g�����|�|�[s_8n[E�����o�G?�������ka.�D��6�\��9�{c����C2�F�:���.�H��������z��T�%]�������q�b�*�3�WG�$�S�����f������P7�&qP�dh���������A�6�����O���\��d�w�lv�
r!,��G�Jkx3H"c:�i�quk3�;�W"�b��n�A�j�t���&$Cufy�M�v����,?l��C�nW����= \��d9_����n(�F>@��������>����e-n�7$�Q3�71s���o���E�Z��COf�2��i�s�����3��,�d�j&�$���3���"-�deQA�a���T-��r��������a�������X���ME�whC��iCC��V�v��|J$"_XFs-��2�v[�TV���h��Z���/L����!WO�n��������~�gX�!k��e����a��h����g�������>��\m�&����1;���t>����OES�i��C^tZ�C7� T�j�\�Q������j�W�������f��p5��!���	p�HG@�����	�4�x��������	j%�q��	�1`<vaF*���F��~J��$���^H.\V��Ycfn����e�������}���,�����lc��$��R��[��(
&�|x��Ka�D��H�b$%��"���,��jV�.@C�ig�A]|l����G]���x�����j�n2t��s�Wz��(��d_^��NU��0l=YQ��t���o�GXv�(����4��7�j�9�qSC���X]=k���k[G��u�q�E������SbaC��w9�wG�����4��.�7���8�A�Yl�U����LrC�iC��i���v�2[e�yCR���i��\����2Y}�+���Y��2%-���=�{�3Pq���~���M@}�R��U�� 9���K>�v��m���n7��^.@���"R
gg�����7����2N��;�9�,7;�zCh�*�6j�����
�s0@o]�r�{���,o�����1z7���1�&���y%��(�$����<He��9�/�6�� ��]������C`�r�����j�������6���O����6���?mp�q���*iTg$.���roC�t7G�������x�A�v+�Hd��j�A����#�oCi�����P
2O+[H���a��s�����s#�D��
���\a����O��H*;���2�CB'�$>��	h�3�d��e�$����j|��(�
�.�m�"��f��z�MhW����Vh��H��D`���M���Q?��H@��x��4'>\Y���j�N{(F+3R�����J��(MK�3�q�,D����O��psJy��%��&_�Xt��w+
�����w�E+#�}�y�wGYR��f�qa�V$�
Z�r������H���<�wO��`�V��e���c�GkEXO�#`�f��q���� �A���T
�W';r��	���!���}�)�!@�|�"p�j
~��K�p����xr��	n�D�[Cx�������H@
o*��zF�$�N��l��^��{�
<��">�;K�GoFQF���!��H�l��1<)�Iw�l���>1�ubxSp���cz+��Z^���Z��&��@D�S�P
}P����(�s�K� �s�� ��R�W���-���X�xrQp�~<�(^����x����~r,Kmc`��{Bp,7Tj��9	h�������v��;�J�4��h�'��K��XN7I�S�1G���JD���������#�- z����3�P�j�
oC��m
+��&�JS�S�W"���H�����
	pc��p�g0s0W"����U���o�AM�I�e����!����o$
o���x����C��zt��`�ap/W"2�0���j�i���m�{��`N�^iA@�j 3s%Z�k��(�)��4��N�������7�i�D��d�u��0���p�
r�k�C*��-#�!�� ~��`�J��\\��<���� i�x�L,�'v�HB�2�M��[|CZ�Y�������c�j��q��y���g�WxwTZs����O���,��1����ok3J� .���(_����3���c������[���Bv+Ql|[��7(������H����E,\��BD�M*D��~�E�,�rCki�6kP�$|�E�0q��D���d4���Mc�h��O�=���]4b�{	��4]���f�'"���������i�������p#�����
��o(�8C���S$|%�Yp��p�G�����)�w��vQ�l��F�0\�Z����L,\]�K-HucD���+'�n��O�k�G�H
"�<�=�����2?	|�
Iin��u@F������h$��S���� ��|/�ibW���q�����q��������G���?m���,7������� #5���[���u{k�Gw�'{�{�3��W�|��%���`�y�T4�����(��-P�1��.�yE���u���3V+b���D�E����54����k�,�.�j��JT�'�����e����x���7�%%����V�./��&��t�@�m�+�@8M�c�JK\��b&(�	�/h��Xw	8li��QD��,��d�|�i�I�������s������Bw'����v�5n:�8w|�����Z�D����m�.��3�(��:�w��GW� *C*������ ��%l��7���[�W$��2k�'�l\$"'���7�
�����yS��x�[S��a3�B�����r�u^8T$9�*0��{�O��8�<,�z�o�hD�y��f����l��x��oC���ux�[��P��xW��7$���M���)��h���+�����f�O���5�z�G�2�v���Y�8sh!Z<�d!]��c���~�����u�������Zk��P<���fR9
�v&�S��b�t��,Dd�@c�B��������\	N����g�He��z����4C�}�9q���"���h6*��)����F0h�X�GrCR����<�+��e������U�[Y�������4�Oq��?�#����	��m[dB�:l#[�y����6T�CI�n�R���j�:�����m#�9�
�vF+��T�8��_�F8�-:�GR>���A�d\}�
��,���i46�I�|'N����gy��������~������t��=#}l�Q��\���)(�5.�����RPa��EaF%�����+�	?FtE\��o[��i�U7&.x�����7�����;���_z�.��`��	��'L�He���Q��lY���$�U�g����-Dd��r@�E1}���o�gT�xr�r���2��B��D���itc���
 �����ek�C����9��;���et��H��j�-�B��?����W��F��������2&C�$h'v�o���*V���+
r��=h/j��;h|f��"]g��Y��P	b���6?�pF�x|t�A5��	�d��O�����HT.���V��wc()�
��|���X��c+��~����N�l��+G�w�O�`���)�ea��DQ�J��+k�QeZ��i�k�py����o���������o"Jh�����Co��d��������Z��!��9 �Zh��J��.K���.']R~��_
'�i����Yic�<����3� �����������=A��M��oT��)xXqz^A��^h'p2��
(�G�r�_���|7�r^����6wFII�O��5����>?WuJJ?�mv�N���Mn�\*�CY�?�j��.d��?}��V3�391���i���4��Hk���3�^�*�wc
���@����j,()A$�6v�6(����7t6�2�b7��.;�,V]��=��P��"$�������I��9S��NN����'Z)�	[�����)
��g�o�����������[�M{`�=���5�1W��U�cyW4��P&%�)�Pt�?�f��;�qG�hs�At���ig�&W�zx��q��&��������2�H�.g�C~7�]��9����`�����{��YQ�u��Bt���j�[-�>��z(.��hv���2d�������ng��Z� �N�2������$���y����#����4#G�m�|Ei&����>�d�S]�m��)?�eM�|�p��>���[��%;y�3J��2��h�9p�U������|���y��\�����o��Xi�=t���D��`:q�����<�Ub�A���$
d,��'��W���������Ut"Vu��?�{G��/����y���9OV�/d=r��F����$�;]�ZD|]������ 7W��rD�DC,�Fd�%���=�M0�&��i�����X�A
P-H��	���50�w��:��M-��g������t��X�_���\vH��FM_�0Q9���A���� �u�1�� ��x1�����=N��-��Q��!U���	&�=Cpr��Jl�.���pk�19���4T�|�B8"@4�i4{�	����j�{�����l1�#���fb������MMfb�������j^��'*��UGl������r"ro�Xa����C�������xHBAd��3W������&�T�z����Vd��@c������`E6~��������N����C��]vx��0~��_e����#��F��������wc_6z�]���~,�_+�{�Xaj���@������`3m@�}��.kR�%`�]m=�T���c�0�<�����Oc�������rY��z|�����H��y�I.'��3�i �r���C������&��l�����F�����Y�n�����F����h8}''��'�]�nw��n�u��,�����yi������[����b]~��B��9XY�Q��4ML�n"���+������Z���n�G�t�
`{b;��N�NC_�t���m��Z�U������@����l�7f�������6���������@��Y7�����X_����B_r����O�/�����_]p�E��
@��4�Q�[�i�	{����"��j��W�4��wc0o���������Nk`�X������N�bV�Z���&�&=�(��l� ���VaS�[��}]��(�hx�C:������*��L�����\3Q�S�XgszAZl���zx��������=��V,,��E�f�.�T����f�t��(H�Z�/H�D&Zu�������wk6�B[�?A���
;��`��3����L��a�b����w��}D[���h�RY�s��)@�����E�0+��.Dd~���m���)�3+�fS|��iQ�hCo�tAp.� �aI' ���!g3�X�5�����.z���0�5*��e��}�*fI$�s�`I��&Z�I��{v�����0��e��`Ir���l��D���c��+�?�� ����X���e�2K���^����i����D��`�����>���M�p�l���`��f��>n
S:��l�\�w�O��.H5�������n-)R��n�&*3����a��$���� �X���L#(!O]���"�\�c�<me�A*�g�-�K���$M�c7��T����R������@��{H�7EA�!�Lae�GQT�5�P)��L�A�����~������~J�A��A��*>zJ�l�d��i�4z*��S?f=��V�,H=��������R��|P���ig
L.�$���UE�aG���s)���,x�/I7��_QS�uu&�������,���3q�n������i��e�xN�o��Y��>�ZMY��*(ky�~�\Y�j@_7������e�L{��N�1%	�y(�A�)���3f~���gV�wGpM]N�FME�Yt�T=
��������?�z��{�Rn��8�6���Aatp!A>�j:[�]\V
���{�\���j%[�S��Q��T#��
�J:�Q�MM������YK������_H
��������pAtRQs.���_<O��TC�����:������O�E;v_."��,�;���o��5������j��4X��@�E�g�����q�TT]����jk��SsN���� {������y�O���	�_*�Y��BC�]�{����3�t��9��1�T*�)�g0t�@��U��W:t<z���W*�m��S
�>���1��r�%�|r��P,��-> ��%����)�����R�Z��a��������GZnN�f�-�|R��=&h[�pK��&wB�o�]�pK���n�k���4�����kK��������{J��Qn>O��`������R�6E�T�N8���8��f�O
4���SS�@<�m~��y�J��
�$i��[�4
����9
��h�z�1fN^�p�C5�J�D�3N�
8�t��iX,����vZ����D�+�'����ef_����
G4�b�<��Fo��<9��-�x^�l���f��ATd
���<���
�y�	0��������dS?�:�zW������6�� ��l=���f��hu=�%����������i��fo�����
�(��&�(c�W�,��XD=38.���2��y�r�q����z�S8nZO����:��<�V��8��'���C�R}�y��
Z
�7�B3�,E��Dk-�����w��u`f�6g�z�fa��p`�X7�.����u�����4r#
��v�Y��"���=�L�g� �Sp�#�bM���l�v���:�H+��b��9FC|W���4g`u��(�c�Vr����c5Z�-P���I����C6�1b�n_#68�������7��2)G����64d����Y�3gV4�:y��nC�d�������������(��L��i�2f����j����MX���D7�b��iF�+n��C�Tlu�����*z�QP#oQ����d��l���^}�&����t��2�`�Gn"7�iZh��d��J�j�1J+�o&>l+��Fj��!�x��A����`�O#7��xr�9�+�&��'O���L�U�����]���6]W1\����:�x]�!��*��k:�:��_O,�u�e��X���K~=���9��zb��s.���B_�eW!e�r!���e�uM,9�S��E�f�u��V��|}�QH-O���&��sL�z�s|���7}<�\�]~�������������sgdS�_E�a����I����������Hr�����y�Y������a�����M��=������?���������?���S�p5��yjA�1����H���w���@R�;&��q�Jr��S�.����@d�Z�8�
w]�sND����od&(NX�X{5^�#���g*��I�YNCL�a����,�9���\�!�*�x��9�<����,6$���4������E����*�%}��8�(������D��Q�-�
���g���8���������~oD�q.�����;�w�N������,�<I7�����A�=�N}�R��&@�gq=7���6�}����-��������H���Sg�u��T(�LD�M�C��]���,j�=��Z��9���~�$E`�S��� 8����i��-:yz\P���P�(H�4�R�1n�&�v���t�)��o���`(�uAp0�O��M�:��T���'^����m(��5��?�[�$���~�9������>lc}��>��k&"���8Py,Q,��y����{5V��%����3��of"�S&`��jR��S�Cpa��J&Y��������d�3���P��f�b��M��220�?I����s�`��& ��Q~���'��g���?���vso{�m����n\C?���~r�������`���������Sp-r��G;�X��frY��K-H�AY����� 7V]��Y�.�e������.�3��(�)�b�/q&D�q���1����o��q�����%��#K\�iA
�P���n�S�;W�M�PSwy����B*~�S*{�(�/������V,�+���!]��G������LzBN�d�'�����H�
K����y�������M��`���<<��c�S���f'��7u������C��0��w%"[�H�~�I��CXQ��	ZT�f��He���Sn;�iC)�^��y��h����;ry|�����Og'n0}��f�C���8�D�xb����hJJ�u�VaE������W��}��)�)��������m!I���8�?����Dn��-��/
D������2���4�t.?:lP���dZ�SW��w`��i�����)��k�uOH�}��Z��c�	x��K��2�G+����es)�O�M������:����3��+J(�-��O���?�v��Q%/�tf��<��9�J	D�Vy���m��=c��LY��'��5��������#�0�J,m@*�g�q@���H��u�(�*�����m�=�a"�w��H;�8��4`/����xdA	�U���v8�gCp2�8W��*�r�A��=�����wbAI��K��� �{�+PiKu���s���[<���!3�w?�n0��nL�ic.���}����D?���#���=��W��9���nN��
$�uY�f
�����Rp���	57$�\�������E�0��-&{��YaoO��6����r����t���f^��
�q��_������U@5���7`��g`�������(�@7����+��]*8[���
},S�c���3"v�+���*���bC<�#V$������u�����(���$�#,�6�e����KY+��F���~[��Zi�����W�����Xfl2��O�Kks1�GA�J�t�����O��{s����pW�S7��;y��7�w�-���= J���Y��t��m�3P�BI������BT�������v�t��A������F$f-�7�x��0��9��C(z�fFO��,��@�qNDx3������M�f"��7�f`9�h���JX����+�*������h�z�#6���_<U���.j��8B��	�LH��S�� [Uw*G�����2�����Z�i����l�4���w��J3������U�x6m��	�#�{�+L��v�TU&�.�p����&Y5	�`\k�	h8)���5i&b��:�����A#�qd��1��R��5���en��G�X}����P���/���tiA����q{���iA�9���m���?8�a<#�cF@�x���}���#ki!"������L��w]�s�_�rw���n�k�_<�����gU�_B����:.�_EY�����~����J�&��!���^{E��|������i�����|���c����c�=��;��:����������iMo�9�EDl��m�#��v�"�t�����*�t}!"�3�Oq��s��zDWzWu'����&�'N��]�������3�ff"���<�2�u
Q�zo������@fgA���X�aC{J�j�2�
��:1e���;�������g��w.``�����~��o�&P�e���drQ�U�x��x�VO��M�2����i!IA�58���|\�9�	������|���b�-����VL����E�V�g�tf�f��6����>���0�����VTH2$`2����a����mX��
	`��(����O)I	hc���c6���IP#������v���h��WOpH��ea������I��lO`	AX�������'����z?��1x:qZ���A��v�����2R���xOn*	dO���������m���M#h�9���Yya�TW�^8�v%*���+^�����@Q�P��u)�<*�M�P�f�
�����8��f%"�tN\�>�U�+df$��� �������Fw{��c�.w�f"��t����,��$i k�N���uK>�!���e��g&�D�s��n�C9���r����pLd�6�o(��
f���X�!5��19�Sx���5qn�����u&���%���S���
)��N5�xZ�������y�V���X3�l��R�?G�0!����
|�������W`�D�1����8�sq��Y���>��� �"��J�|2��i���]P$��zo���������D�3K0~�kw��lH�����e�!�7����;>�
o� ��^�����������#M�>�w!A��E��g�l(��a_bE����:Y%${����=�.y7"2��C{�k������JP�������j-�����qVa��]�E��Y���>�~GH~���r������Q�\��!�6��R�k�V���i�� ��d��Di�p�����$����6`��3�	j���H0\I��p�OeCw7$�����Z���\�f���H��Xba$������O���q��JD�fO��������������.���+
�D{��V��3�L����"��BJ>��l���soH@��wJ]BEC���.e|��<X��|7"���"�#�qc����q�kL�c���PTN���e�f���
	�v:�����E"_���4������-,*�����7������b�3�B=8�+��6�y���k�6$`�MN����+Se�F�\=����������/���m������oa������2O�p�"�����_��wnH��,�:T��4�T{�&|�!{�n�(9��[~���q����A
�az�����T��#�B�Z�7D�h�&6���h������.&�Gm���I��x$������0�I��N��#���#�1�������}�P����������9�Yi<eClT$�������!J�)� �X��c��xC
l�R$���2�Kmh��Yq�����:
��K	kDu%mL���vN%O+M��2�����Tv���"��������<�J9���5*'����)�u��Q����E����\�8�X����-��Y�.s�!V��g���������T����F1��o�,{w�k�Za{�lCR�p��{]�C)}|�w��/H��\y����������:��\K�N$)��&��0���W�P��f�W)�o<*�b�7�4��& ��uw�	U�l;����]��w��4��e9Q�2���l���kZh�e8����}o$�h�f��C�v=���<�r���\���z���M>��(?�L�����$��y'�!�B���,���'����K�N�
r�'�~����{0��h��q3q�b��?L3D�+�a�]�``%A.H�����R���e��2�D�QI(���wk0H�#����(=��\�	���w�<,��y�Z���j�R����a�M8�+��1��
��l+��gd6����x���wc(�
Y�9���E���F�Z�]���G*����o�V��,��$��6i�*[��]��I>F~n�����3�)�|od�HJ��a��N���f$[�_�D���q�����U�O��f�-�0��9�8���xg�M,��`�^�����G
����QN�niM������lR����EB��^f�us&������X�uL��r��L�H����2�_C��+��s�/dw�a��m�R&v$�����Q��S�F���"���UF�$g�^���j�|8�ypr�����M7���3*+��j��SV��������7��9?]�<�<�A'�n,��]�r�I��2�	�o��"mz��'�F��3��w4��6�M �f�;F�>8�3�al�����>��x��+��/���G����(�.����d�f�>v�d�S�i+G?�$���\,@�H�
\���z���F5�W�& ������3�<J��<����3��*��G����!z������]H\sj��%5��0����3�.bV���,���|n�Q�a���h���������iX�S1����/`<]?�,Eb�����j�T�,����`��~l��nfr�6�Q�����H}D���i����K��a�P��9��
n�1j8'���-��,s)V���7���x�pYU�d(Vf��eZ���3A�	�Y6#����Y�Y�4U������<�23���
)��|��<�^�j���bT�������\-y�J��V:1�n���&�����IZ�7.$�M3Jf~�����Z~f�,sO`��c����P����l��*N<yLU*K� 
b�E[DZ/������#~4����j���:��:a�u3�t��D"HC�0����0l��m������wER���%z�����9b�;�g�r)J��j9����nL�X-�Jr6k��cC��zY��[tuw�?q��Fu`Uu>�������I�a��������B\�V�=d������XK�����$� J���0Dz�:A�!�����\��J:�/�@�����~��u����������I���!��[��G��n�t��=H���/�d����f>��QsM�i����	*M�L�����f_�B��+�������{��y��<�o���*[�1��ND�w�?~c_����j����/�8�����������h���^�X[��Ed&0������B|V�
��x%�V~Di�6�V1��5��A��a��U-Re�b%R���U�?yU�1�^��S+����p��L�i������y�A��Q�����������?$�o#���l~��+_�n�M�74���q�2���5������pF��WkQ��^�pt�L���Bu/$�����3�f��E#��)����qB�`������������f5D���E�RR3)6�S�1�6r�H�R��Y��c��MD^���w"�&�K��Oa#���D�)����X��#+�R(��YfX*�eq
2���r��>�p+�D���	�(�{Z	dK�{u�� 2l0��]�wtP!����h�$*k���`�.��x0W�*�P`}�2"�wY���c	7�:���%��=>*���M���q/W>���s�|����/�]�M����H�a	���l)>Z�6J��^��\���B�/��������gY>���������Gzo���b���@�p
	O���T���%����lf����M����~h��"��/]���S?1e�.dt�&f����D@I���#po���n-Au���|t�dyV��b�:#8���-���ws�
��w!_�t�����]zx�����2L������;����V�t$[�=������!s:�(��S�h�X�?�Q1�@����6��4]a�x�����KT��=��Y���L�s�H�V��� ���,_Q��\O����`���-Z��-���L�%��O�lG�����5���Y�
��|�IN�[��
��'1��,�f�SO��}Z����������0�i[@U�.�T������&���o?�����Ugo��8��eYo�w�H��[$������7
�O��V�d���f1T���?�l��o.-$���'C.a��bi&Yw�lF�����G���H���N�uU�R����XP���r���
\�P"X����]H�w��x�� _���EVR��W�5,�J<�;d��.��Z������.��!��v�����j�
x$�0������4<�2n�sg���^B�� M�����w�uf�0V\RY��k�X�:��Yt5����=a�4�{����D7Q:�Z,���L�t����<����Ei.VN*/ �2Z�8W�-?����FI
�|"��Sh�'�6|JfQd�,�Q���(yy�8���5���?�x�}� ��qs��;��
�����d6P�D ��f�~������\{0����O�|�7���|�}g������e_�`��D4*QC��c��I����|&��7�E��R�Fu�r:�UG�\6E���X0�g���1V!�4��0Tv	~�*Fb�V��d5�e9.P����D���!���A�H�l�+�P.%���0������3+8������rD�<d���*���b]*5%�5������f��F���������+
���:�\������M��	+��}�n��W0D���e	8)����:��S�x��X��lZh&��`�>��J���23���g�4z��f���b8��9��;����Jz�I���mf�3�,��Ew��u}���d=���o���hh=W���l�Rd�P�\-+��3��]9��
T�&����;��We@!c5z�s�2#=��g�]q���}��W��U
�����W������E0�� j���v���X57�Az��e4�dT
��0"^@�h=c!|,Z@����g�iY�mr�m������G�p�c�
��1�
��'2����z9s��r�P�n'Pi�366�[��v��^�{#����V`�R i�a��u�4y�����8�Mj�cl2�2�\����lG��q��#r��C�����I.���m#���`a �	�����C�'��Q8;������r�����Q|WP9l���J��vHD� ���.���H���<!9J����xh��q���9�^G����[�y]�:.l����[}Bea3��J�A����l��3g�K�P������lG5X6�O:�O��A�8
�3JO�@�m��X�9)�?������'��uMj�|�	O��<k����
�������iC����������������s|�o)_���Y����P�=DM�Z��V���������|���qb�^�t�X�UO���5��
����^Q�h���k��4��d���P��R
��wG����"�����^�wG�T)�X��y���"O����z��|D��H���)5Q��(������kb*7�}H��\Y�$���#s]U�8����d��w�o�U���H�F4�&�Lf�EY/��14�hWy��E[�����=����,O�c��
@����MYK�C�V��nE����+��i��*3u�,���/seV����(D�����������%�8\5�Jz��5q�U�t��4�b��Z��k
���	���6�'�J30*-����4_�S-�>�,2V=���f�Z��M�{��f�
v��T��	�RT���g������-3IQa��dQ`���2�r�M��
��)�����������0�hO�[V�7��[�	���5m�_���D4�)����q-l0�+���fJ&;�"nJ��]�f�O�0�-[��Il\k����s7�����D��G;� LD�������%]���wP�����hF$��nGgH�]���V1V\�q0+�/������.Dd��rK�2s�S�"�����)!;|tB���{�p�I��+���7Z����
{�"����hE0U^��-?R�>��%�N��~d�������Pk���>���>�r�I}�y,������K�:�2L������'�E]Q���
�T�,i��|�Q�f��!]�%o5�D���aJ$���Z�f_���gW��q���1��hL�,�����1]��aL�+����"-n�~i����=�������6�Y
k������i��8
k:��fLW�O8npk� ���6�����0����\�aO$�29�����NHk_������.(	��hM�
�5]������h�icBF�9iJ=�aI'�t�B]s�h4��*0�6�jp z���x3�
����%g�=R=@>��	���R��vY�s;�"U�hF�TVTI4�CgaE�,��������;�,���ylO7�R���U����0bfx!�����6���&�u��i&�5s�,:�j�x�A*2����gYm$��C`������a��\nn�T��#���M�Q�
9�^����D��(��I�Q�G�F4J��4�#<��7	��q���Va�T�p$���7Zu������.����LX��-�������>����>������4Y���-�h�T��F��YNBj����&.���O��
i�+���I�V~�3��&;g�6FO|I��r��9����@1�E����iA@c���3��rz7����W�����]�V�m.���2�S�O_�0z��a��UWd
��ub$~��~������z���MH�e�MHd���C�`JX���D�)��� 
B#��("�b�l�@)4y{#���)~�s�7N�mHe���I��g6�+JB�;��c�������Mk��C��`k��:0�=gO���F�{c��G����`��-�`q�30����F���n��I0�����kB������8�s*��2�
�2�C�����e��2���LtF(\������F2�����q2<�x<f9���E��Av�0)X�.q0d����n���b)}.�s�� ����|��J�v�M���%��n�;��;�"���&��P�T��2��"�/W�i"��/�r�Z\�M��`$l��d��z�z.�/:3�����7���%��P���c���cd���\�|����8,���5C��T="X�\A���K�&�&��~���TbF	�)S?���b?������iC��6x�
|����i���f0��xBjV�g�#o�?
H�\b�t�����a����Yl��\k���2r�����yE�z��\k)��2�l��`r�
qx���j�Dp�#��e���\6K���9�[���"��c�����Q��L
g�9y�M7����|
�U�H�`&O�g��c�mE�G��J�,W�)�iJ��g0��eYR�9c��h�X�
iNJ8$�a{��C����,��n�NJj0�;�r��,��P~7"�E���
19�L����1\���z���@�k��e��H
Z����k=�������	����<�J_kEY�9}
_+��e:���k�����Ux>�q_kA(\�c(��3��A��B���m������$<m���>/zOSU��:�i��([e.([7������,V$�����*�:�hiE�88X79s�s��JD��}Dd2�V<Db%*�l�z���y��!�5������/��vnQ�X��[����
�beI���:k���Ddt���F'L����dy���1G���I!��0��8��GA������,a�L���y��A���'�m/=���]&���"]�J�R?�����am�/�m$9�n���\M�=F��--�3��oDx]��h��%x�+�>8rpO��W�]c����d��O��������<F]9�Y'1��v����7a�����M������jO�����=�M���FHC�����J9*ETj"i�&�~�U;��L�le�%}�Q��G��P3����4E�6�z�+R�����;y	�%6�Ar�1�#�!��I���=����H��b��-r�4������
i*�� ���!J��S��4U�B��~Z>�s,vc���=�%W����������{E~7��$����=(�)��x������x����/���$�,d�������E��'0�a�4��DR5N�<��a����X6��L`���L�6�t��W�z^<�����Q.�|����BT�lv9�x���b\�|�f��l������H#P����Bk[BV#��A����l���[,fsV�=��h5��5�w#g�Ovw����w��BX�d\2�Z����[�@�@�uQ�a�N�oHA�D�����:����~�!���0qS�@oH@�Ca���4������-�1p��7c6�;}Yd������b"��^���{F�����`B|x�|�/���De�~��iB�8����>�.g��C�-(��`�pCZ6��Yo���J������d�a�z���'ea�`�$����t��f����lh����V��=6��ZdN�=�w��	hn���K<l����������1B�>A�q��u_���B����Ph�F&Z,���C<��%4�8�������?!54XfV&��/�������c^��J��Mq�i�7m	x��g#3��1����$�)u����G���+�����'� M�}�V6$��
P�1<�4:���X���ArQ�cL� �� ��-()yl��f�*�z�����y�rK���+���4
�M�0���jq��2~1��Ku�_��Z1m{�@���Sc�(3��D�,W�5Mi2*AIGV����g"�G��r{���e$^��g���/�����3�BA��:�y��iK6�/T����!%�Q�>z`>$���w�W������B�)��T�0�d�MXQ��4���V@i6.�p�`\0S�"_Z��w%T0:����b?�$�HMxrh��k��0��QF"��H�z
�7�0�]$��\�
��~E18Y��l%��a$����7��J�wGb��1;
����+����I]��#��~E��/� _���Y��c�	�E�:�/a�/]���IcL_��4�E���D�����1}��"�A����f2���&s��<�t2�4F�|��5~�}%��3���8�/�}y���|_��g��������-�z\������v��s+�3{��	���~b\_x�<���lq\��a\��kj����b���r&����a`4����RP�hR��}�����]s�m��EN���?>��4'���������(����=]?��z�����`�u�uYc��8�C�N1^�|������]��wY�k���*���5]����Y��g]���zY��t���/�'��x����z�~����\oS�A���|�����~!���T��z�Q{!��$
[��b��'���?�t����U���1^��������0������k��\�����d	�1^/S����_�����7������2]�e�>��������k��?�X����:��z(N�����v?mn�mm��M��l�>�e�>��2Y��}s�������v!���v�U���}m��{���|��Lv_n�C��n�1^/���^�n�1^�n�q\�@b���@b���@b���@b���@b���@b�^��e�~���c���
�!��}�����
�!��m���
Lv\���k���
Lv\?����w���-n�]��
����!v�77��������n�]��
����!v�77������������b�sCx�W7������������b�sC��on�]_�7�.��c���-spC�z��b�'�#�!~=���
����7�����k��\���o�;����T.����m-��w7��G�#�!~}.[��������T��U��!�	����\��kb�B����@4�x�%rTF���g&��a�����LdrV��S<��		��2=\�#��3�*��^��H:�1mH��v%U��V�{X�|��O�f��#�,���,���������Q�N�r`�kT����^� _%Q���a��6 HCO��TQBn?��?�����Xh,J��	��,`��HZ��X�����2m�W_��t��o6�kL>����!���Y��v�@e4���)>b� ��A��)�F�tK�C,���l��V$@�d�Ge�N�N�Ip�cnh��]|	�t�O�x�q���T�O����A�rE�
QJ�2�
��T���3����nD�}��vS�����O*��G`�Qlh��~��,$��H;��7F�7���6���<�f��4�]'' @ZRy*����<�2���&�.�	�)9������,V� ��E�v�!�
]�q���eB�HG�C9�J�Z��m7p������Wj��Q�3�Sm)L�����*9�D��������/@�@�E�����F���(l^����w7�X������Lr
M����DYZ��j
f�Q�<�������Dy�wG����hzlxc����X�:��TI�[T�������� �u�U��iS��c��o"�����V���<��s����H�`T��U��=.�����*���F�V�eC�I��\��u���nl��Ku�8M�b�CN{=K�/�J�������Y��Vf%j'�=��������\�,:
��7"�����@�8��� �r����1�����'�W�A&$j�/��>����I���g=�c��y�$]�c&[�f�*n���
��	����lc���Jf��<�VVlh|������51�I��8�����h��$��V����%{�{@�;v��Y��O�f�"1oV�9����=
�M6n�y��$SmOh�7]f�;��EDj8���g����7�%�}�{�����P8�S�(��w#��w6���=v4K�N��?H���x�wG����;a\�b'w���0��R���V�"�*���E��i��i8��G{�;��3��g����;�o�Kr���I.�C
	�f'�Y/n��&4>y�c����"��(��3�/P�4|C�������saH(���@����V�N,��||I��P���x��	�?Uq�����!�$��#���,�����WE�4���/2��h
�I�>p"��2���r���F���kU������a1�#(3	�(~��a����o�l5BF&Y�h��nc���Ku!�}�������S%H�'�<���w�Z�gz$z����;���t|I�mx[S�!�3V�Y}�~W���~Q��ga
��(Q���A1�&xw�^�������w��<i{?Q`zg���@���`u��ag��;Di�����G#���&���b�(���j%gC�=MM��#e�s�"qwP��?3h�P]��4z���x��T���;�)�oG����s~C:&8!w���\f��pC�*�\x��<�����!�<��0g��:��F4�Pv���Y��Z�@�H7�K}��0��5��3j�c1��r���o���
*���|q�)��������z�9�6�����xw�=���X#��<T���R��04������y����L&{�>Q7"����{���L���	<��=2O�(Y$�~���b
��#�8���/������b�����u��Gh��n���!��J����9���`���G)���ve��FlB�����H��ps��9�_Ci��&{��j�9F2����y>N���-6�����2"��6������Ar�`�
�i�E���q*��YA�n�^x���,~�]�t��1�J���]�#�����N[`��=�r����T�f}q���3Bg�������H�}�w��A;�02&���y�n���e�����,$�;vG��A�
��d�2f��9
#6���>2���Z�*z��+�����wG�E*d��X���a-x��I42T�B����p��Qr6�����l�B�c�������ST�XQ��� lM�������D�A�����k��wt����'Z�� L���X���$�G�M�F�����H7���{.���N����P�0m_�f�� ��:�8]�����9������4�2!���?zpg�j���V�$���1*������j�d����H�s����6�e����A$�Vn�����t��6����$"��W�5�tq_��x&�B�L%6����,�g�Wt]'vaK5H�BN���x������U��f:��lX�r#5*)����pN��8Gz�/��<x�;#��h#S��f���G����������d�����&c��H�1��w=���\��`ZO����1���8S���<F�c!��D�(/���#��{]�J��E�[[J5<���A�d7�[�#c�A� i mwk������T3>@R��������~=�!���f�5�Hd��7�N�a���XlHU	��Z���<��l�pAAio��'%�(f�������*�����_%^�i�J���~�p�*���75���`�+V��VT�<�mt=x��0���j�I3yZ��}CU���^���
��"��z�����0�JB�[v���-�D�t}\y�	W����3*h2���|��������JD��0���ph���wcA`�7���}���

�]����)�TK��]���0�+�*��!{�>��wE*��)�Y�n�7$@�q1��J��k�}C���a����cAQ��D���9���r�I����$��
I
������~7��=1t����(���0������/�r��Yv�i9V�
;����ln������h�W5����U���c�k�q�=2v�-X�9OJ�]���ig������6$��t����Ag��j.4����.�H��"�	`����D�%�c��B�R3��y���q
���`�������8�����u�1g2�b���[��(
&D� ?�N����7$+to.��_�f7T� �jV�.@';��&�1��c����X>��F�+�����s�u�����������������5O�T��0l��
\P���p���o�G�qTs�Y�:����m�A�qS��}y���n\�u�j�z�	2�Q	p�
�����p�����#z�LP�V��jSj��M@������d��LrC�iC��i���v�n����f�J�����x�����@DV�����%�"J�)i�'����k��������[�U,h�3�k�[EO��T�.�.��/�}6�y
���,I��[B;�H5��}c��1�����������;�9���;B���_�>�Qc����VmH���4
�%7s�xb�J*����/�@���7G-�o[����
|]�~�0����0�P�X��d�20tw�/D�nnB[{P�K��k��y�����������N\��:q���}�jz:���%����\
M�M@�~p�Mh�+�q=���"���9`��N�#���
�����C5�XA���~s	�}$�����w ��m@D��p�������������;
n��|H��Kr�8�W$�=O|�'+�d!"�yrZ��U%�A�����@D��L�]�	����p{�B�xeE6�x%��l:^������:�W��-W"2��������p��}<�D�����Dt��Ov�>ZY����e�+�6��sJy��%��&_���G�V�w�bg\��-H�������4��j��,l"/f�nE���'��������#��c#x�;#x�"=-���mR!�
`A���H�A��|�����A&�x+JB\������uf"�`H�3�F�1�aC���vE�0v�����"���+
�������D�[Cx�1"4bx+����m�0�����:�S�}w�z�c���J���H������Q���gzo!R2�}�^�J��[���'F���Boa
�s�}l@�`E�W��X�7�<��@D�n�P
}P����(^���-��+M��-(E}Eo�_������OGi������������:J�'��c��}���Xn���kZ�$�Y�{Clz�e���+��`J�1�Tg w,��c9���9yL��c����������l��x����].r��B���s4�
����;�6�h��h*��-����M�A�a�������=��`�`�D�x3Y�oS���o�AM����i�1�V6$�v��������-�~�s���^nHN3���MsB�c�/:��	��T�M;,&X:n�u:��WZ��}����\��j<�o�� M7�S���-�*����CZ(���+�d�����G��B4\�e����T������<�5_I�7}m����e� i�x�]�'v�HB�2�
E�(���
��^�WI;���%�.xf����h��X<[�qkaB�v��(���a+��g�hu����@���<���D���Z^��G���G���j��]!�
����e8[��<�!85��.�i��*X�����_����G�W�g���4s�5�@>��[�8{}"ux�OG�`��V�!
�:2���CF4wE��)�%�..�LDnqQ��Z�x��+�F���V��>���i�|�������P����3�:=E�W�Z�X0�m����c�913E&����������[S�
�e��/�i���������T7F�[��6y���-��){���}
������'����_xW��Iin���"����
iWa�H��S���� ��|/�ibW���a���Y�q���Y���Og���?��������G���F����l���Di0!���G�������a@
KT�
���Rl*����
�����2�H��z������:g�"�}�$��Hm<�l%"�'��*�r��������%��-�n�~7���g8��0�()��
Ut{��oB�G;|���d	�4�Nxi��S�ZJ�e����;�]D�fx��rAGQ�7���������"�E�����F6�j���{�����X�����[6x'��:���&c�3����$��R�w��ah�!�	�������\/um��f��3�5k�2k�<��=p���h�6���Z��c����X���o�9=�`%7wRE��:/=�$9���=��j�8���UO����1����?z�r�/�m��2>+k����J��]1F�����7�?���^���;�`F���?v�6�2������&�ct<�ux�S�h�l��t�^|���+�
��������$��Z�,���,��f�N�����~�]�acf"���1`�EL���
Mq5����D�����L����9���8�kL�Jzw4�N���P��([�(��~w$5��j a����X�<�9��lZ�1��-�_��	��A�����9��:bK�;�����u@&d�x23������6T�CI�n�R��cj�T�	�g�)����]%>�������G8��:�g�E���H�G�?2���K�O����5�� ����4i�o�I��,��X#��~[�U�c#��V�����9����2?tf
�o���>��TXg���]��cDkf�������
������z����3p���J.��
pog ��Vw��KOk����p����Y���+R��b�|W[VA��(	���u������+Y-~�]�����C<��J����t��B��D����m�����?2��r���������2���'�D��6��^���A�uz���]m!M\�_�!r���7���@+�������������Y6�H���3�V�:T�xalVyX��"~<>:���N��r�w�����u�]$*�O�������CI�n���?�`��"���=�o�z1H'��q������S%���}�hY����+��V�*O�GW&FK�3Z��i�k�py����o���������o"Jh�������w#�����E��'DNF��^M��=�Z���T���<�6@����a��ic�<���9�fzAhc
������O{�G���3>+S���nm�����D�N*��KT�nd�~�D����$��1���������3JJJ~���0Sp�r��\mh�
g���z�E��ZPu�c��������!V�A}��#������6�J���f#�i���~&�kX��nLb�� U��%%��������wG�m�bw��.��b���<�S��db$��Q�u4)�7'�lH���	O ���o� ��
��)
��g�o���/���<����V�3�}ZSs�
!�	��{W4��P&%�)�Pt�?�&�(�w4�6W���<����M��[������Y�19��������)����h�����e��wE�&������(,(	�i���{���gq��>��];;���xZ��d�X�����Ow�8#����GC����w#�W^�x�	�"����+����=pf\�i������D������T�G�*8���{Y�-e��u'������+:!.c�zCx��;�R�n&���@���������?��v{�x�	����:t�$8_F"r��hl8��[���l��^���ja�yEp����*:�:GM+�{G��/���#�]vl����>��^@���L�/��7�;jn���jI���������5���Uf&F�L���*Q�4"�\���]~[#|9�$����e��h�����������qJ�Jd������u	#�n#_#���O�a&Z���*c�����+J@M��9�9|/k����}nbyG��{����t���p������C�7�5��j!k
"Rsy�zC�$��<6&����%YcC�����hCX& T�{�1��g#+��C8�wk;�1caC��^�F��&#�������:|
��n=gX�u���7t8����+
(�/"��d����e�MYU/�i��
`C��#>`o<P..��y�X!�Ob��n�d CO����|��+M������hRtQ����H�����a��
��/"��*`�h����Q��=�����B�@���{��#a������Aew�gc_=$@��S�b�Kc5�+�~� ��	���Xm7���i���`�Mm
=�T���<�����~EAb�p7i��q��d���j.�Q�#qo�H�<UD����T�=��~C����I.ID��l�5��d�}pz��H�D�9���w X����=���7V����=�Y=���F�����[�E1j������h!���,(�\yM��6��iX\D�eS�M���Zb�Gc�8#�}B���!�������!�������6g"��t�����~V ���/������:]�����Ee"�>��6���u����y�`����?c�s�

�����8�#���<Oe�A4�)����{���U�K����u���:z�L1���������,?�����n�`n��{ticA/�E��x����R�zQ�g��.C�E�Z�*��N��9u����C}L�8ae}v@�����/�-����3Q�S�Xw3zAR����zx����|h6���:���\dh����	�������46�&{'��T��V��^Y�d�����7��|6�k�I
�����;��@{��~{��Y��82�Y0��2�!��hK��6�-RC�.�� ��b&7�:Mi�aV��.�E��/��%�%+r@S:�z7��7^��
6��^K��W�!�����L�{���Vl�J$���E/p����QeE&�%m��*��+�@8��6f�	�tE�N0<�Ml��J��o�����.d��V���]j����hdV�%%8�H��X��M���%�PA	�hI��)��+��P�v���/\�p<��f���8�U�+�wrr��o&���}7���8���f��������P�!5���i�2��t>DP��w!��Hw,H#(�=��D�Sd1T�Z�L�jA�"
�D�F�u���c��{%%�n�[��m0"�&�vf{�@��;����� c�1A���XA��<C�TM��'bT��L��c<����N[�a&;��h�S1���*��})zr�D���EOR=]�x>AQ1��4E�����#hj�����dUU����_�U'#-���2IU]�N��%����5�3���C ��L�)�jU��9�&Ge���;�	;v~2bYs\��`:2�����S�����)(k��~xLY5�/N7��.]��2x������1%	2=�A'�)*��/5�T74������\����~�h��zL�������?�<�N=�Yn|��6������������z��Quj��0�I�����5�Y�d�j��;*:|EU�y��NuH����nJps�i��R{�>��WR��p��N��WD'%Q�b\Z�f��8D����h�@�Iq�n��>p������p�������y��#8�Zs��g�"iO�F�|Y,�y�]L4_TzC�NI�9�a��J�l�V�%Ha��}�-]�yB��Nyfc2/4���g:�����.S���F�)��sWS5��R���R����^�6���}���R�IU�qC���.��[�%
��y���A�%��v�<���$ ;����@��������=%!�H���0s������Ni�V�n���t�9��}��wK�����k4����
��k�<��Ua[���=������
]Z�7�*�nS����v�A%D�AM(�W{
t���W>��x��~�k�./�~�G/�b��^x�����,(�K��������4q����w�Ks!�tZ���df\�x���f0�������E�O��;c��ozO��;�\��q��yB21��dC$��/�6���t�S�.����NDd�[7�����
�y��W����D�SeU?�N}V��������� ��l=�����"�5�%-5�M6'm�����uO�����[�(��&�(c�W����o��L���Au��r>��"#n�~���?����c�$�xN&C<��G�-Vk�W���}4����������X��f�iB�_��6z����;��5�u�f[z��'��=0�:a��o�:n�c[��v�4�cY�n�w��g�"[Sp��~�i��:!�]�:�U�"���<j��O�b4t��
��|�5����������j�a����m��h��`�2�E���uc����=K��aH�
��Y�7��%)G��.|5�w�����������Y��+ty�^�!2�`M]�������^���Fg�~�x
�WfQes�g31���(!��.d�P��I���Ep�ch�.������ �W:����������U_q���/b�a�f����2����F�.�������nA��.�o!�]�h��3`N��5��lt1-���D%N���z<���G��sL�������,�]D��9��N1��l��"���y���b�����.�dU|��X�]s���,������[���P~�;������Z~����g���K���O�y1�n��U��K�I�;E�{�$�w��k�R����K���|�w��9+�����s~�h_������C?�_�g{�?��~n��_��{�l�'7�_W�'�SY����O_�����P.����!����������������w���x|�����/���_�����������Rg�b��m��J������M�/����r1+��xx��dh�R2�a�#�p��>j����$��u	��1�Jd:���5�Y���]"{$���Q}�_���������?��#/�4�ECB�Mp�M2E,�����7E2e�:l�q����
��x���*!"?l�����q������d8��t��b��D�~od>��q��`B~��Og���z�G\�y3Yd���z�A
p�Z��	���s�M���o��(^2�<����F��4��H��"�c�B�3��|��"�����:"�Ts|������H^�{%%��G;�[�M��}������P��F�r �� [S���������,VS����?p���i_4���
 �\Q�%��3x��Gr`����p_�6� ��B�,�����|����?����w��33ueR�Q�h�P�<-��8ay�{��������
�V&��{2�v��=t�y�>���Ip�#G�|��$��S�4�����m��h�Y,�_t�,#1C��HB<X�K6o(���Vd��������x�����#�������D����~3��P�s4�L4��L�-[H7&�Y����vT���d�h��K-h���L�z����Xu/��5>;��i���$b,A���>�_���_�����T���7��N|Y�"��o�|��$@����kw�����}���%��]����,��.^����HD~ j�Cr��j�P�xu�$���>k�&1#��zs%�?�W���� ��d��Y�|���^�m�l�e8�,��h�N����:3.�6=HO���E*;��|�z�0����4�M��aEuF�w-�3�2g$w�p�������@���r�J�h�-��'1{[6=2�.���H
����|([��F�����O�G��#i����hB]�UX��;&!(+�U �O�]��$g���o)p�N��]U��- �
���m�z��oH��6���[��jw�J��^n:4(��Y��dZ�[6�H;pp�j�JBkb������3B��<X��"b�����o�Z`^�+D+���1��s	�&��������8�M�	�'g�WTP\R{��
��?�~|��a�Xy�UB��o8��R�e{y������|<h
�1�B�,+���CG���DRy���+�'!�*,�����
A��I��hldQ:(���S=��9�!N��;r�:b
��e 8����i<���*9��v8�gC��HX.��J�K�I���x��'9��t��Pb�w�:	e�������{cj���I����R���[�����I��M�}6&���k�����`Ln�4�|��'�������� ����EY/���M`�,}��htLe����8.'�����������hF��5�q&Q[T�&�m���l�
W�h<��3K�j���QGm�m���~A�P��4���������z���5������,��[s��h��s�S���Z����cq�������x�b�|
�l�X���{2�8��Y�>����>��a��ecR��_?����@h�n��N�h/}4��y���Z�.3�o��5#	In�lT�tA��������{3�Z����w`�����|���k�_= *�&��v3�������j?|*	�[<p�k��N����9�X?����H�����"ZK�`���e�_}0��:��C(z?5�D���Y4��h�L��S5e��>��e2e{o���]N�5�5�����Z��)��pP��p�<�\xm�@�"��3�P^o�����x-��P"S�x!A�*z������%V���S���'kS ��LP�'-1��
�T��L����9a�*5YtiA��A7�C���%��n��R�tI��c��W�d�$8��5�M�p���E��������oM�����E����yd(�[�rdz��\3�Y��~�������7J�Fh�OF�K�?����m��M����.-n��������0���>�0"�����+8����9F��B�|'+�@�[�&�/��g}���C�nU����&�E�tO�/�������E��S`��Q��+��"��J�H5�es3t�^�$9OK����,������#vu������[����z?��:�"���#z�=��s�H�����N��M4����	���+j��b�-�z&S�+�?`��\��]���Gt����x]v��4���0����*��������fv!��FY��e_C����7��������;��h�nC}��jU���	�XNT�2������_��b�t�J�^b��b5%��M���a�
_������$Y��X{'k'^$��z�K�}9���j!E��{2d}����t
rE��>�a��6����UD��t�����t�����Ij�2���������	�V�p�p�J����@��	�y�R��%��m�$�$���u_e����L�����h�������[�3��F�|��@����U���o�'�g�P��X�������f��j�e�0	KS���mUNf8���~��<	�@����v�E���	,���
�U"��`���T|��������p���sDa1ge����`3�����t"��9R���j�":�SA*��T�Q�P����<i5)����o	���5+��.��^�~tR�K��)�Nzh/
���s�>c�s�2��MJ��!���Y*��"����d��j]smh�Gu\k���V"���9MW���\G*��8tT����I�P/L������������O�Sv��k��~�u�L*�k]=�-6(�;�
	������������{�?�
#���2����R�?}\HH���T��prJ�gc0��
��h62���E�gi��~���h�Q�{i%A���Q5��qI14�7$���qK��p)�)����OB���6Y�4���l�C���:lCw|.��A!���������H�<��iM����g!A��E{���F6���������O�(qd����N`����/�V��L��+������#@V"��Q	s}o���S)��Z@QCQ�U�E�7E�����]�M�7tJ����zxbC[;�������	lo�X���uY����?�d��t��8a����E�
M���3�k��+��&jiKI$�WR�9�����������>%��^ybat�r���y���M4[��X(�����T�I��>h��(�G���"������?*�����?ux�������P���v��O��R���LTO�d���I;�o�Q�z���
M����v��P��g""'�p8�X���Cc%S�.�1�;�7@��c[��w�BQ�NsV�}��=w�@������o�d���S=�wn���x+���P	�������L�q����Q�J���3�9�1_�>����
M��&S������2�W#�'�50�"�fO��%�x���	lh�S���r����KXw&�SK���}A��X8�0]lvez�~��\���Z�{�ZS�I�=�-��
p:�<��L��4����'�	V2e�����0=CG���^�(n��4�exC���
K������*Ow`��iR-j���L��+�8<�g0;m	�/�p��.����}�W�����)�y��	q�]�q��sb����
M�Q��(4E��@��L�N2O�x���n-��]��	5�����6����l:@������1��	|������M`�*��y�����'�����D6���S����7>�5�{M��6�������o����I����};��ds�g�����>�F`N�L���q��+�u)c����y%�X��6����S���Y������{��=O
I��mC\��?�z�b�$j��h>c<gL��t����6��u4�z�zM���M��
n?��W����P\#>�"L�|�(�i�O���W-r
c������v��4��:�r�6�3�`7sqv��]K���4N�1��H��
]�V3�n��F����v��:��d	�����M��0��DAX*-B��O"�2Kk�r��mq�-t�2.��E���~�~���"#g#~�����9�)s�j0�Qq��r��E�8
�� _��"��)%��c%^�yRH��0
)��%2]��'�v$?���r��;�e_�XT9�j8��������u�j]H9�P�M8�+j8�K���n�	`u�I��E�K#���?C�^�s���x:iuk�HP���\w��R����HuK@��-o�[Y��U�|�����<X>����g�>-}�(�s��O7$
����&@f�W>,�r&~��1���oEF��$].K�����RH*���|qNe��J�|K��I���@��^��x��m&��d�)�9{>Ed���q<�����m����A�V����"5H�f�	�`vh-I�
R��B�>z��) I	���Y6T\W�+�W\
�����Ix��J`Z&>��d�
8�~%I>�t�������������S�H3 �w��4��e$7���TG�e6��x�&���4c�JL~���fM�Y,������j~A#�`�+�O�� �eC�,8`�?����;���E:�:F�)����n�X�iX����$�Y���NK��U���2�j�Y���.(�xE�9�����)#��o���9dB�[Qq�.z���f*�zH�������:�:U�����F�����N�LzB��5��R�Agf�#���;�(c���0�T���6����/m�A}��T�^2#'R��wM�E��J��DQ1jz�.3���(kRzdj���J0tQ�V3��~�GT�E�����||��b�m8J&:4,(���U���*��Ct�Aq(&��H��Dj������D�M+��
�Op���Zi�.�Jj�Y�2y�3�S��t������,)-���CRa$;�����'��S����J0ZtUf<E�&Y��(��v����i�5�z���?"�|�]�0�D��%0�������,�>�4�������������J
�4����G����64�yv��&�Z|����!�N��z8i��{t,�	k������
��"7��C�������2{�VW����v�E�����h���X�������/�M����{��|?�)�������X�R���U3{�>��3{o��6���\ 4�<�B!C���\/�M��i�����W�r0w+#EV�.�����Y:	��uV�
8�a1����=q
�p� &�l/"�E��r��Sg6;���?�Cc\E���'�$ g.~6�34�#��\+�w�P�=�6N��p#I@L��v�8V��<�</7�gn!w���cUd%�
�dm0���fC�>�t���D=J�i���
�uQ�b�;P����=����j x�7����We�?���q��9,}+6a0�M��o���T���!��$�6�����g�������hX���Q�~/���>s����<nk�����y���d8G��_9�C��ia:����0T��.��y�W��������gYL)_������+�1��i��������`j6�O���pQ�W��SU���!����<4]t���|����&)�� ��O�a�����8�{w�����G��\�������)3�������[e�NM����D!�#�g����J(��~��C&��S����D�O��������s�(/���q%������{�d�F�rKb�����i�DP6����@��C�lD�6�d�?%#s4��?rK��sY�T������c���9�>?t�#A����Ovp��b���8��`6��#PgpC0�����S�L��S�� }t�"Qq�~3���
% ����P�#�T		�i�����|����F��#��
O!)�%�����6��D�������O
�����p���Q��YTbA	�\�{�`|�Dl=���8D��m~ID%��Ri�����ay���w���u���E�	*;>��,�������sq���B?�8C}0M������#YL��=����g�T���5*�������Om&�a�s�J�� ��-~��c�H�k.[�
Dd�2�#���a�g		P#����_�zP�P�}n�Fz���4����FY'8R�aE.�P	��1�X6(������6� �j�{��"�[<��>���lS��k%>���_�������*&�6��R�=�>�iuW2eI34e,f7����V2eh���G3�.�#����`�e�)���,��Gr �dVB����>c�2D#)�f���J�����H��C�h�+��J�����:U]�
�K��2s}���+�2��m�kVfk�W��X����#�Z�;�8B�=L-W�����='�0������oi-����{G��SD��j���{,(��6��7�I�����?N��Kt���]Q\N�E�vp�7�K�!�6,'\��=�����v�'��Ez�.�bV���<D������L��(���Z8ul�$���j������Pu��v,���vSOi�YW���
MGY�m:x�\<����5�9����bAdF����D��,H[����x9~�����������L
�4��>tCR����5��v�;�#�<��U���.ND�0�q=6�h�m�@
����u�0o���2[����u����$o33B�lj��a�q��yY���.z��n�������+�
�]\�]I�����baT�l�+[��W��(�ck��/�2��U>xfZIr�AIU��D��,�U�7!�uh�
�=K^�!*A���[Y��al���X�LY��D��h�}%�Ha���9RO����%����������7Tn��4jiVcu���C���#L���:�)�_u"/PW�qV��s�����[�<��7�������>:�|o$��������.N���g�����=2g����0,�0�MA���i7�D��2~��Sg�/�#���@�h���Z;�|j��4�u�f!���G��i���Z�FoZI	������u�7OWu��J��=_B��Nt1����/]q�����Gpo'x��<���0�z�-B���	�I��Q��p`Fh�+���B�_2��W
���Tc��/�V/~�p`
Qq�.�*�=��N�P�;iR2I�ONm(T����NNg}C?�6�]��-��ioM5���X������'L�tG���3��r���Q�|'>]J���Ee�u�G����bS�Y�s|�H�P�Rg��wP��z9���P�x��*W���e�����VL���������Wnt�P*���K��^����y$vV��(#�.J������A�������������`�c$�X�����kfL�fq��f�{��+q�>-��dD�,���\>��'�J��8��_���)�,�d�������!)��b��N��������3w:l����+3+	�.��,�Z}�k�����b������`e�3�Y�2���D���k����t���&6�%��Ev�H�������'���*~���"��Iy����|�op=%��d�_��m���������������������������������r_����03�=?�EI'� ��Lt��)���#����}����~���K�I[ngI�;�P��w>��`N2�C7(��������T��Y�gG`F���C����F�M ]t�<L0� e9pSF?2�OQ�T|,';�64��Y
�<���ZO����M a�������P������$�{�|v����%�!u�&��
�x�gN���n�d�����MI�|q��!�e�VR�%��K��t�KV2e� ��;����$L���Ys�Q�n�T_Xf/���$`��G��W4�L�,�[8R�GoJh�nup������e��We�WD��Y��A�c��K�09��f��#$}i�^o%�^���Y�q,�lHj_�Z!
w�u��
fw�'�b��%������RF2�����jA%�12�-z������|� �)]Q4����������M�n�@mi�d�&CZ��DC��	h���Vmh7�	�<�-)<�hH3����r;�<���.�������hGBY[0�s�t����h	�����]����h�g���.�A���)���+Q��)��Gk��	d7��Q�`MW4ke��`C��8�je��
��`4�!����T-��.h���V�[[��k��L�M����jF,�yE��%�dU$qE��*NB����:2�U�`V��3Q`���y�{>���:������g�uE�W�����Y��3�_��������4��w<Y�L\V�*����D���7���>��In���&w}�������������)�$�P��Um�����&���J|�����l6u>��#�QR����������I���d�Gz2�	L��G4��:Q�^�D�
50����r^#h�B���r�B2��h��`Q;�-Z�.���.�4�:;�����xk�����`PW$�������}�M ���S�W���{��^��1�)�A�nM�4k�"�ua��b��.L�u��#;��:�L���N7��iS�o~�K��}�lK52VS�C�y�grR�J0�����Y�aLW}��l��
��d	d�dA���e]����<BUd���#�.,�u��a|��A6������%�G�������
���%Y
oU�����/h��K"��]�09�p�:��
��*Cfi�/�?����iI��=��q�B��y�DS���lp�����6�N7����zn��� ���V�[n�5����&���Y~�wfVE�G?�(n�O�5������(N:�%9�
�\��i���������%�����)����\	�) =�;�����!I2���^J�
�z82[��G]����M�HJ�)^$�r�z����O7����M_�s�5����"�H%�������y������S*�����\���*UZ��eg:��'6-�dB�����3���S�o*T
��_��3Y������7w�d�����ec�^f6�� %����S3#���(�fb�}uN�d����Y����V"9<�:���m�'I�9�X��\<M4l�o�<�	I��~f�5��uafl��Ued�6kD���n��!���������yA�cw���>�]_�A��G�����Yv��(���e���1#�����:�?�X��Q����^���.��s�EF��SM|��#D��$:�h>��v�����xH��6GB�}E�@�����[v�@��'�&7�D��
}E�ex����$��������b3�C����y|D���@c�T��A���h.��� �uZ�����|�K��i|T@��E��A���Q��G7�|a�X���0�@�9��2�$7��YU����T���D�P1��������t����<��ggzE�p�L�Wm���On<�MKGM�D&��R��+�n�g�I���G�3���*r����}�-�����1�^���Vy�u��I��O���ii��DnZ��z
�u�({��$w�1���Z��J"�j��M�H�yE����4�m{{�t��L�����jv��p��������99=�{C���f`&[+�$������	�h�����)s��k�U�D��.���n�B��/^�������8Y��1I�,#��u
���!(6"����B>.b5��q��<�IxX��r�
o?QM����H}��vas���������	|U�e
J�XUkA��,�M��w��
v�>��p���I�t �V�XG,'�`
[����x=I*��q��l���fb�K�I���7fU.d�6��y�:��0Q (������['���nn���%R$����������9,W4����o���cT����tV��2`zME�r���A�s@��%����*��8�����O 6�/d>���U���2�^�?n:6]6�i��v�V��'Y|��������� �/�(�������X�������L�p��R��K:����Wv���T�$�>/_��G�����I�L�I�� �zeB�������#.sUZ�����fS���&���bk���'"�S���Z�,��3�r�y�F��1�*EujA
�k>Hj��	�t�g5D�JHu[�Ky�U���Z% )��TQ�F1��2d&4��N5*���d��)�u|�X�6C�1�K�x�-��'������Krxw�mv{f��	��$����	8����d�s��Q�k��:L6Mc�P;���3���5��	F�3t�!�gE"w�to)m����rq�t�����"� ���b�����D���G$���+U��x���W��o�*s������N+���H���k��lC���%�[�P�6f^�7+(|���,�_�3b6T���t��W����5�����>e�J(��������Mp�vT�7�O"���&�!B�o�n�0\���"A��v�hqCE,��{]E<L������W��OD����or����B*���J�@�����9�b��E��r;�gM��*N��+B��z��yZ��f���-���Nk%e��W[�b��kp����,�66�f$:p\�J���K�j=RQ���A���/d���)���1!��L�:]�9���H@wP�����TB�T:SNd`)��y�,���;�QI��[��m�H�'g&�KW����&��#�;����}ES�_��q��sBU/�4�K�3��5~*`����_6�z+���p���Q&����n�r.�+�;��M1�t���G~lLZ�	��kF'dE�J'7�=����x�$�t��[}\�w��Z�=���Fs-[FEw��]���������-O����q1�d$I70�V����XY��."�k%Y^��g6���_��Zi �x�A�"����"���pc�Nn��@l�d���kx�t��H��e����~:54qg&��N���9CQ��V"�����!s���������9��7����t+*�&U�umsOLL�"�\6��ZO�+b�G�=����A�=���D�Y�H���ybj�v��~�
���wS��'��6a��ka��R|�mS�K���Oj!�r�J�^b��5!3�GG���^������#�;up`{��?"�C7l�~�I�X����=�����o������O"����d����/���:@~�H��7�M�_kZ����|���4|��X5�������������9����O0?�]v6�
��EY�� �b��>)�\��_F���W��w�������{��9	���
M9����}s�
�	�^C&���xhY�urM_8)�~����gw�����f��5��0�����9�]���������������.�qu��7E"��������o�VfM��!I�����-�M���?��$��)-�-L�j����7���6?��o��Y(�a������[�~��}�����]/��|��.\��z�T�x�����D�~<�t�x��v/9^�^���Z.�_,�D�<O��y���/��r��\p�o���5y��j�r��/���w���\�rMB�����^����/�sUC��7j4���(��]���7����}��s���>D3�����+�]��w�<�w��s��Z���7����q�(�+�7_q���%(�+�w7�
�����9]�_�r��\��\���ecw�����SQN�e��E�G[z~[{���g6�?�(�'���+�����-���G�h���Y������U�rj�Ec�2�����y�u��f���A#���k���
^a�F'�6n����G)�6r��"\aCG+�6v��"\�<�6z�
=�p���+�7_q,u\�H1�}���^aCH3�m�SDxE��xr��(���p�����i�-]<������������������N���O>���O.���O���O���O����O����O���GgF��'_F��'WF��'OF��'GF��'?F���1f�M���q?�1��h��c�cipc���o	n��=�������1"�1��\�������|�m�n�_q����]��/��_������m�n�_�_�e�W�������Y�~������U��3�)�����a��7�H�ny's4A�����������c:��7T2�K��e��Jh���E�O =+S8P�4��;���h��y�*�t�����Jf���9���,r�1+�)��&���D����j����uV)�
5DN��MpC#��*���_��?P�A��
��Si������D�:�S�]J4��!�j���N}����:����������-�����6�,���.@4����78�0��GII��=�X��j_Z��C ��'�s5Bp���&��1/��9M��tAkI|���mA��7�O�:���rE�
q�Vdl�'*�D�d��s]&6"��w��^�^_�L�����(��G`{Qq��=��l��dd�]
���dC0'��i������2��9�xd	p>�f�D7�G��n �]�@{��S��$��h�,�ex��-�L(�	nvn��!'t�E:�_����P��y�wO�>^z��{���?������Sd�S�w�������k'�+�,�����K�z&�2$C��_�SR-�E���-p��r�e&x����o�\�T�G��a�#���
j�e&D��������n�N�I�LF���������X��%�YFZ��(^�GR��Fo'�����`c������=��=�@�yh	���q"�GI1$C0*��U5n�����-j,2�)��*��7$�~�1?�k#|����1���op���l��!����	�B�4��Mp���c�����+;��!W�g�-(��	�&������dc��Q4%�Y-�?^#�$1�V$N��P>��q�L����\���  +�<�h����'�*.Bz9'�;T�BAT�I;xW{i�������Jlw��L�<.��eUY�e�/ �<�L�v�ECV��E���i�X��E���u����<
��N�U�$����N(��|����""1mD���yR�>�[z���g�}v�)+���N��\�����s�����V'����|0 <q�^m��HGT1x7�������|�����O���V�4�*�b����S�%��*w�P�G�%���>Bv�"��8�8��)y���� �/�S
��r�!��W	y��:��T��"�S�1��m��^��^��{��V�yrHq/aE �����V������|0��uO��?�2�� *;w�;�7%��H��+���%��^M�'"a�"K������@6@��6��jc'������Uu�]����b HPf�{�a��C�����g���O}(I2�����!����d����0;�m~����
��G2yn�1%!��c����,>�kNt$,_r�^@�i��3Vp��z�������k��|~������B= ��b8����#�����&���1I�Q`zg����$�l���`1t'�������.�bO�1�.���Lmp���b�����y�����t*K��~��[�����}d�W���5|A���,��*��O�K,�]��(����#������,&���p��UH���R�?("8�a����r���G�v��i���\�����Y���W(`�o������z{��-����
�a��x/��11�������}�k��:9�Nn���2������l�spj'�V-T��&���pj��m!��%7?sQ�*wD���1�O�q|I����	����j�Y�HP�RM��	�w������m��TA+	c(�ZY�[�X�S[��|jK���W������'�B�a�f6����d�\�lDC��%7��G���'E�R����D�Y�H����y���]':��0b=6 ��A��\a"�zx�LF��%Q�13q��$#'-V �HK-bei������[���-6��${!�Q�l���>������Z��M�����m�Bk}����gG���+�����|�����.�{�-��x�K����|������Z����g�n(�j�
�i�W��h]�P�k "k��C��W�2B�b�w�����l�
I�T�����H)���Gr�	�
_��~�rU��*��n=���v-�bc��{	)�jQ�K��������y��>���	�� �Q�g*�|t���N�u�[���+:h�8��did\�x7���>E���u���/I6�m�RR��l��Il���;��=&~@]����Z����Z�-Ih�e��y��U4I�A=F%�]Y�~�{.N�����H�k����6=nxEEv��$t�{�����	��<LJ���u}�)��L#��8TR��v!E�2mL��,�V�W��*��T��V��+���zS�rvx>v�z�l#�
;Y^��@%�>;��%-���tU�.	b`6^��U�)?�������B-x����\�B4fX����p�&��z!��X��M={��J��Ljc��]Cu�22�2_�6������X�l���%��d������l���Es������	�+=����)�K�������iv
��H��`g�I�>;����(B�X�I8�"i��4��������h�X�G���}�a]/HT	��2l�V%�����3��t=|����/������%����_����%��7*�3�h�WM;���������=��O2��@��DF;�e��8N���i�r�Q��-Hd���iGP��
�I�Yv���-@E�ty�5��V$�J�����~Ju�����[HC���y�����l,h���"���{���������/d�2���}	i�2xF��q�2��� ����q�\������m�(~Wm��O�Q���Y�EY�
�3�e_���L�=P��:�m�����=�������'��N���4�=�q����bL��,����
���S�>7��U�`�������/�+V}U��>��{p_�����M`���h8Ufc	<�L����R64?��B���t6���0��c�������;���PI=��^r�Jg2n���)���kx�{�U^d6�/
7[���[73�$Ok5��?���D��$��E����A��c�74v��<is~15�����,`]�,v��%����no��G]��hx]����`�p��gcx������4�}���������p[�43�?�,6����pb��q����	�����d~Q:�S7n�]�e�j�7
��G��$��`���Sba�|
�D
8��h�vY���Qm5Q�T�R�����`�DVg|o$�
�����%]�b��m���<���������x�Fg�0EV��M�M�ug���������D����o�^���3�1�E��W�`����[>����n��$�f����"
�`�������������;�9��|v�na�_�>�Sc����
��<����/��W<�m%x�d�����1�g0j���N��@VW�B��.�����Di�_�m�����20o�f�^~����,���1��:����B����
���������
�E��
������h�d�;���&��|���h����G�UV4e�4���b����8K5<�jpb�J�������-;J����w ��m`p��R���eW4+�4'`�68Og!�/���D�1�K]�'Y�x���q,��D�=�m\2�������t�]9<���B[���	8m�x%�WV���+�\�WV4A�)^y+���+�2���[�h%#���'�J�VVT�h���-ZY����eO���
/x��RN�!-�7�l��s�:{��0{7f�A*g�V4���L��4��w YY"6_���M`M<�w��s�.���e��'�����'�V4������������$^?<��$^F"w@gEi��I��IL�p����t&�)Z04����Q�D�
�w���:vM�-M��9�����I�	d�@��0E�����<����mh��6T�uF�$WMb����^�qo���K��DBXPw_A�����<{�M�-d���>���-aqoE���)��Y�9��	x�,[l������:	/���a�t
oS���J!
sx��"�������&�VT���$������e������������������`�����x��0�gsg?��:G��I������L���;P[/>�g�$��g]
L�w��&��}�W���3�g��������c,���0����G����J���uK�{D�T��]����D��c�:��6��mZ�F0�������M�|����x�)�?&�����L�k��$��gc<�����tc��Y}�������	��
�{����|�N�4�"r���A]K��~�����Fb�(�6+���o�)m�s��o(�s,#��n��!��������V�0���d>��8��`z}C?`���zIl(��+>�k_�a,����[���P#-N��J�\(;����J�P�`M���o���q
]�G5��:Q_P/��9z*������yt�y��UG�
�����vy�|�v���2C'��]�M�i�+�2�'�~q����&�a����w&�%�R�6��a�k�T0�s!�X(���
��-��+5�G�u����C���T����T��{�vT��C���n�f��D����yeeaB(��	��� ��[Y�.u��)hb���������1C(�m��y���WV��h����7�1�AM;�mS���KL���o���]fo73�{��"��	�o�i��s�6S����<<�$����/bh����'����\jhD���Y�!�*q�|�ma��zE�������`���
C;�@4d��H���nC qh���:z��a>�V8m8F��6������x���
�\�<�L}��w��=TH��A��S5!:�����k$s�p�W8������@^~5���P;=�-�=���%&��g����|O���G$����>�&G����p��(�,��g����M�������������Y<�<�a72��u��t�D/h��"`����3t��`��	��d��O�H�"���e�8�������d��h=t��Tb�h2i��|����c^}	6&���o�����p-����.{����\�:lpd{g$@��@�p%�6��s'l��@�_>��%���O%Va�
[
�5�����;b^��;�lGg�z_D0	�;���#�9=.k��o�L�"�]jG�"��R>��W��or6��P#j`���TN��!���a6}
��X�@}�V NMll�/��0	kJS.������9�#6&��i��-��e.�Z���q���0��� �I��~�tD"�b���t�j=.�=G(�~��S�%��NG,$V���,�������=]�v	���4��;�� �)gOQ{#�d+�Q����.�����~����0A�Y��m	0|_|�����Vv�n�x#�h�*��JD��B�����6�R��d����kEF&��}���}6$���
��f��jN�n,�g�6=�o4��������s-D�t�x��"�Y�,v�b�����8�����-#��-A��+w��/L��2�n(���
���L�/�E��I�I.,Yl�s	h�ss���:}�Y���P#�]o�O�$jgB��w���s�l���&��?���P������n�{S���\�i�9� �R[��Y�lY�[5���L��v�i����R��bv��E��(?�f��k��C|{W��$/��H������/�������E����
��*,HF��y����. |�A0����Ae�
�%T@d0�8I���/�|&A�����L)��3d��.���&�����T�5�?��
����\-r]P
S��`L���O�w&�O}� �����E��)>H��T����]��X���!*�4m����6k���=x���T���/�W�"��x�����+�B�1RMe2����4���A;#� _|
��Uv�B�Ey�Q��F���`	bj�`_�Q�����y����gelC>�����m�����$�=jt4f�g1KO+��C�m4{bv"��!��PK-Z����b��Ty��w��YW������t"����
�jR���uhZ��f����P/}f���_;���������R>;���6|pn�����V��${7���o}
�O=4�A��7BgB�R�b�zZ=��
)���=����co��*v�9��qEwc(����UX4��\g&��=��
Pkc���l���Vu�"���H�����C&.W��X�+ j�u]`�`p�n5����CT�
#+h�5��	����f�sUOt��L&�F����Y�~:B���@=t�{t�������.=�g�l���l��8��������P/�1�������eX���<;N�ch�J��]�&��2�<�����j.���h,:��&e!Z4��X�NfA�/U�����K����]��C�`,��?<�q��Wr"����9G���bk��t���d��a8_��#��rdm8 zh�2G����c��{�P�o
�y���>
��<�mC'��"�cT}qb�h<shC`�������
�=��daX�U����!V���x���=�p��	�9�P�L<-E���_�	z���~JO�����v�i6F���	�6�d�,�dw�#�$���nN�I�!]%�a_���T��.��zDI�95,�|vd76I�v=��|~a� �7%�}�D:{�`�T$�j0�4��l���SC��
N����2Dv"�@�{�~�V���i��U��0X�G���#��|~al�n�He����D��t�Z�+�e~f!�U�������%���X�M=X	2�������������N�Q��J����b�|8"����
�)fn����C�����Nf�FKy���?<�,������@��b(�CET����m������|MC��!����<����`L�b�c���R+�������1����2�����F>�4�A��A���$�2F��V�� +1�|�xg���1��C�p-J(D=��W{`�9��E����(�E=��=
\|��D��<vm�����7n�;3�M�pZ�c����0�j����������Zb����'$���4���tfa�T
�B4Zw1������?�.�c[}V�����hTw����CD'���v~�~m�SBG$:973
m�VB-��%#���Wv2��N
��<�:5��uT��rPx�����sU���b�)��_����M���vrRPG �=��Dk���,����=��I��4�EI�����0B|�:"�v2�?'���P_�![y}G$��~A�,���Fju.@*���D��p�����Ed�T���L��������s�F���:X3/&��z��������\�R�+��T�M{�d�o��B/#�H:�a��������!$yqS�A��>!���7�f*�����1�"����J�������k�`Ft��w�iS���Q;�9�������������|
	���� �5=V�������f�PM������x��{��bup����
���9tI������-�����'���f�I��w
QG�pC��������0WD43�-�d������H���/x�Y��,x�?lr���+�J�2��?�~��dg()����������+C�p�9\Y��T��28N�]N�:���Wg��+u���>��o�v�oE^���N���}����
��w�c�����t�i�u�'���E���^����y� �:�M�{�
1v��Ls�@��vqqIv������}���,E��Pa��e6,��q����d��2�����V�a^ FD'&M�0'R��������t�ls=5�rq�u�� f����4�z�eJ���
>	���aK�Y���}���l+�E���G7� �D0��Y�`�ui�
3���a~�D��po@�Q���&)��ya(��
�|�g1�+C���<\[�l5/��C$���6�>�e�r,@�����_���*��5�������A��h��E��-sBQ�i���U��G�;
Iq�d��ca�8p"��^�G��H>�y�q�N)g_�	�F6gN�����X����}�40��D�a��� AI�3��P��<�;%��gG�U{��B�X"������q`��c�1�PN*�bIC�/�15��<�;���)6����5�1`?V}��ya��V���,(���(�c%u��!��kd`*M�T:�4�D������pk����A�g��^I["�������7+���I���z�sa�]�: �`��@� ��t}�8UmJ�9K�6�(�����O/����R�7���s�r$O���"0�r����6~�����NrT���9���*��g!��0��\�Gs	�OK����7��;�J3�8sWX��M����2P~���	u�g��wGd�s�U��n�*�g�_�>gY��J�3Qt�'�N'��Q+WU����5
Nt�H�����g.�/O�[WW�>�,��6��5_%�h�_�C�y������]q���u�m�+sZJ)#�:��&�52w�'9G��Yq%x��6��h��'�<�t�B=jb��S����g"��;���3I��p�pzE7q����!{�������3�Z��c��_���?5��������3E%>4��j��f��i��y���x|���.���c��;s$�&���af�6ss��w|(y�D����w���:�����������.l�S��$��D�������5_������K�]I�&~�j;�Y���������~�9��k��G�Y�^��h�u��~��?2���u��M��?��:�?'�	W�_{%����5���#;�]�Tc|�]�w&�%s>jj���_ka%���RM�x�
(8�H`�	N��:�	tr�����r�g�R%L2{������hu��S�|��������4�����&���=���%���9��0_f+��V�xJDd�W��;/����I$�	0��j�ZnP���Gl0%%���Y('s��r�N��Erq���������X�#���(��F{��z��Mz��H����������5��nu��{�N��P����m��	?��feBf��L���m�����	��q�^�a�P����M�v�P���jC��jkf�IIL���{����#4,������-�T����<�K�4�VA��G��5
]���^�m�_Y$���!'s�~6��Q����6Wuza1
���y>������@��{�1��a�����
���q�we.�{Y�������k�o^������������/J�g.:u�n����-��O!)��a�-�P3�*+�����q��~^�k��QU��X�y��T+���	z��/"���y��S���O�Q#Mqr�	b��6WY�y5�PV�����Z8zZ�-������E�v�>�����4�`���$Pf�"�}I�w�.��� 4D�W8Gm�_�N�XZ}��	Q���c��E��}�� �A/$�-u�l���m��gu�a�u�x0���~^�;j�+$�S�B�p�9�����8[�B�xE�G��+ �+f��x���z�N������D�����{����{x�;_B�n����+����w���})����i���'�]E������S<�CI5�5��_��1e�b�c��Le�������U���L��*���R��������WM���O��8/����^4}��L�����M�=��_��?}����Z�B���������e�����Krq�l�����_����������������������-���1s��W���q~��
h��|�h|�
P�����el��)���L')���n �c��p"\�������~���M��t8���?^��]"s�����!�d�<��D�H���#�np�mC�����?�4�'��N��&��&���YK���"�Uy9�r*������Sp��6:^y;�J��q�-�q�iyB(�RQ�y|�O�����������p|�G~��Og��/����f���T�4���T�)�>��l9v��\eSsp��I��x��3�T�F��h���D��u��T(y&���N"������$�lN��O����^����JJZ;M;�[���:b;p+[�"�x�j��� �M����x�c�H��b5%m�nJ�Q�N�5��g.�a��� yYQ�%=�s�8L��$
d5}+*�>k�_r0.$�b��ey�H}��>����0ufVG&Sfe7	l�<���8a��{����G�v�,���]���;i���-]H��M6����*�"�$�rR�$�����0E�z.���9�/:[���&�L$�
��/|���~�c�uT?��bc��j����R��o�`gC�>:�����'��N����`3��lv3��|<�1�"_=����}�%�G+�/��	�sl0��������Pus9a|5������HS=	��h�����O;������=��I�����4qROj:�Y����O�I���;�H��%�e���_{�G�i�K����?QYH�]8��7�G����R{���L��b�^��I����!f��$.e���B%�?����� �@����8�(=� �t���
p|!F����aZ���ceg����U��f �)����]�������-�����D�y�O��(����v���H�)Zj�Gs����#�"=�?�� �9����("s�q�
��,�*B�u�VaA?�����W�����5t%V�
��
.���S�cU6�- ����G�:���1����Qsk���PI��M�4;��J�E�eAw�tQ�SZ�������:��s}j!"�\+�`��k���b��&8c�e��\�	�U�w��9��,�g�������W������:����~*V�t�� ��{��@f�O���8����@3-d��c������h�aZ{_E�=i;�{$$$��b�>�i����������F,Z��S��9��p8|��h�q�)�HI����.�K����e#����)bF��A9_�������_NI�!�/4�~<�XR�fH������@X%�O1k���^h�%����h�`���s���y:G���N��X��]S�P�V$qq�R�%~"4!�%�+�e������{�0u��"~��1"~���^/�{`M��!N�Wd�S�de]��'s�������p�����J�1���:��T��%����{r
����El�](����L9x���$+,�����V�3��e�/����7{�C��M���z�{�@5���5���(�@7I���?�5W�lq�4����L����qF�����<�J�q������h�����+�u��������|,,�^L�����KY+
D����=C+=uteq������D�W:����$�#?:�p`QP����"R������9��h��d����Q�/��(k�$�= j���6�{��u� 5����<p�s��|Y����v�\���h�3M>]aDBkyMMn��L�Ll�5��D��kx���=��3�����,��@�83i��]M^��z�Q!�{�p/�����������M;0S�hkj��H��%"�{��Uq��&J��9B��b��	-2u�	����Jo���B����������69Q]Je����XHU*d��&�X��z���<C_�>=Bp����}�)�
��IU�������+J�������TE0w������&���u$qj�+j�Gr��Y)6+�����X3�,s�����5Z��?Jv>�K}2�.U�0��*:n�R�6�����m�T&�8?�5=�C#"5b=�����b�j�2Y��V��1���j����~����~�T]����p�/��������*�DN{��WDq�MAJ��O�h�}j�^�H5�es3��.h�3M�_�E��i' �e}v�����6����~J����[�}y;��:�U0M�jzg�ibR���H����f��Z�����'[YAY�3Yr�q�N3���W��+��T����f	H�}�0��lER�-��6�mv&Ku��'YC���!�K��v���YGjgA���K�����>��Z�,�nt��"V�U�L�!�cg|�6�b���L�^b�@��2�{��e_C�
[�:����I���X{��/��y����>�����VH�uM��/.��f���hz���?ec��n����ZL�f������^����������7�9,�u��-\���R����h�hM�u���|�h�$�,�/��������b0a�CB��N���
��9#	j��^���h�_G����	�>8���|(�����c3j�:��2,��C���%���D8������o<	Z@�����z�����>���=���
DY�sg�i-����w���w+������E��
��^���;���Dd:k3����?�V�P��G)�zT,���HOM*����[���w*y��[dY�`���� �Q�d��"k�C[Q��.��{,�nn\&K���j�j��6K�T�DX�mu��&C�5�-��nH�5��}���J�Q�?���uy(������+ �_'���PL�������kFMdZ��io��s���.m���<u$�>�:��~!�9�6N��`I(��F�S0�@�N�}����/$$��S���p�me����@�	f�����8���Yz�E?��}� �@.�J��u��0����z�K�7t?v�K�:�K,�����	�k��Q�4�����!�O{������;�tA�DZ����;y*�j�Y)�)��*�i����U�Q��z�]y�X��d+���?YQ��Z%=<P��b��`�/�^d�l68�J�;*���'�<��e���Vo9V�SQ�P��
����G��M-�3�h�#�L�~�����\��<fT����h[��V���n��?�4"�4��l�9q
��	MN�V������-�� p��L~,���`!M�������Cw+Z�N��gS��fK��0�v������%J�l��E�lA`��&��D&�
�_d����������7-]����������D{}]�=@jo�9{�����Fu;��R���(`�<���$�PZ��x�p��'""�K���R+4
��T6/�1��+�+
�������}lr/E��t���������v�d�x���"�D��M_�O���x�EE8Q	ESp�ny��ul��H_���ztP��G�Md�<���V���H�HY�N�&�����2����W50�&�����B^�=����F���r����KXw&O	]�gls���i��
����p�H�A-�8��(�H�=�_�e����9m�#�|(^r������d$d]��az��8��H�7����N�UV��:%��UY������m6l��ks��s����^�&bp��x�}����dG�y�/?*E9j`33tfo&$��l��&�^L����aK��<��B�:����Rdj��X�S����Dx\s`���^��w�A~�������j��8�����&��GR�����oE<�+2�f���H;"�*�|��H� "2[�$$_7��]
��~'�U��H�~��O���/�99d��1���k����t�E�S��$@���w�����VE��2�Q#��B]G�<�����+���r�?�)De��g��\Z�z^� �$Vi���VvB|;n�����p�����j�q�s@#V���;r�X&r��W��2_���L_���!������\�����������
x����3Bb�����,]d�A�d@#�����|=Uw������;/1��{���c7������e�T�y(�K����������E�\���	��t�o���L���&��/-��(85���U*���R�q�T >T���o�h�e�l��BJ2(����G/�|"����7M�L��e���kn4���{�A��'��D�bB5���}�I�o�F��7�����4���E 8H5\�M����y3��y�dZy�G�W��#b�P�N��\���Hd��
d���[�x$����T�_��������z�8�L������jE�o@G���L��R��-�\hk��xL\wt�E��(���f�e�?#�q�!�4�*���q.�{�
�+�������2�Y��d.l�T�X�ED��y��l	I
HaO9Ws����ZH�
�
��2']@��T��%I�O�t�]>��w�@q�7��Ps]9q�i�L\
O��tu��/��VpA	,���6|��C�� �$����n�U��/(h�y�����?�������|��e��9om�B�D���7I��SS�Vb���<Q�S��7��_��]��!j%�M�	m���P0��7��U������y�"mmO�)��q����9��L��"�/�L�/Vu���Y��>��S[PP��)�ZEKFN���7�i�oE�Y�h���7DQ
e�d��
���[�^��e����~� {sbgq H�"��i�M�([��r;��^�n�n'�e�o'���.������fwp\��+m/��)�����!]�A����f,��rd]f��(�'Rz�d��������i��;�Z�)�@�s���E��q"��v
%p�g���
�|�P7��~bWL�y#Q����o�T�V<�9�X�T�}k��o���Qc�:���J��/�N�����#.Yr-��A�#�d��:V�p��������������}�fQ0+�:��r��kNkYf��������CG/�����A���]�2X�������$�7r�Tc�;(5��(3K�:�`9��^h8���NU+�O{3wip�����$t=�&U]�<
����^(��_���r����	,*jg����"(�����v:?|���V�����Q���q�E�l���y���4M�R�?��H��.��zh���������?CA�KnN�<�B!���~kM��i�Gx����0���"+M����Iv�t� ���2?����|����X��s(m���1����"���.[4������@{6�C��&� )C���'�U��������$����|�S:����F���Z�1-����c)�'4&�0�������b��s1��+��y�@�-c�xi

��l�-����^(�S?��,(N3�
(��������j x�+������U��k������ho��73y@C��UBR>�Qw�,�����H��w>��Czy�I����F�����2��v�5x��U����B�d8G����t��7���Gs$Ua�e`�0yv%I>u��?��*�)��c:t�K�eJ�"�m���<���o&�47�u�L�������|��Nz$'8�����.���	C��[&���nv3]��X{u�v���9:���Cl����V���@�_d���OO�!*�L��;������IDp1d�'�O�Os��`�/�t�6�O�z�$��t�K<�wax��w�C�b5m��D�``�t`�y�
��Q���k�N�Bv�BP6�M��!���?/"��b�6��2G��bV�l���@��y��!9����z���C���Y�2�`GSu�bD�����@�u_(f��A��q�]��w
�#@��ZJ��,�"�6�C% ���P�-����q<�������E����O!i��iF��M?"��C����r�����Z�nJ��Wv���{Q���X��[2�R��q�upd���2j����L��/������&k%�J��
��28�������-���!�}pa��v>��
�Harv����d2a{(F[�6�t!��7��.�F�z�6��#^������AX�]��L�� �� G�l�S.�x��}����@Dfw+q���j���%$@�$�U�v����z�O�Fz���4���y����3��%*a"dL���������"�����S����)-�i�ENYB����R���N���i��
���k�y�M�|\��e����;�o~���(*Y24hN��wj��E�����������,��GBa
Y�!�<8�h�jC�����c�Y�L�h��z�7�I'iZ�����e
Y�u�*j���+�5/��J�z���J��;-�vb�a�Z��(o:����:����OP�������?
3��3�o��|-�_����������fn+J@���i�J}�_���ND�a�p�.��6-oAq:Adss�n� �*�}����X����~���#:-��E�D��t"&� ���)K�X��L�����8X �B��)�P���b�
#(����q��������o���F�5n�hz��(K�H�*�(d�d��f�������.*"h �k�K�`+��X�@�}q�3v93�S�J�N��������/$� �aLu�YM���H0p|����^I�/]��D!��[�K`UV��ds�|�8C�&��%Z�L��u��N���mV�K���&��]���"�-
��H���}!�����7� l��l&�J�>YT�&��E`k�X�����(�ns����uH�H�@���V���RU�\Y�!jd��c�a~Ab%�G���P��Y6��^� 8GZs�E`����>V&K�#0���'��S'
����%Fy?����*
���qx��0�z��K��F-�j�.@����>�:�ip���r��~���n��vqx�����)��~���<�_��������d|a���n�lg���������1��N��62��"�a'��mL&b(w��3O��_�G �/
����ej=C���}��<�i��v[SQ������n=�~���7���c��U@	hgx����	i��J��-��F���a�[j����0������d��w�l5g��/���C��5�W��,����a���`�
5?��"{��G�K�>�Zwx�qg��t���t��~��W�z�6����e�$M�
�(TCA�N���X�;G��]d�[��n��k����
�;k	�U!(s;�V��}�����F�����D._\Q��{T��G}\,
��4��7�*��ts��wP��z9��z�`��a�Ah/,�a�����H!��4�M�a�
]�A������+�4x#��X?�����v{�$���.=����q����MN���U	�O�1���z�k��I�`gm�b�����F�J�M�k#��?E�8�ea$�Xj�����_�C�S$Y�`������BERL�m\���n\�������K�ts�����|��vq�C��}�Z�;�-���5�����$f4Y�
2{������ko� ��Hg{t���E�����IUY���R���K����)���V6�5_kg�'l��,_�\�N�|������	����������������k�k���Z�����gM�����{w9�'�����+(�+����O��^�D�+ �+�������P���h��@���Q��. �
�!S����H�RE$~���7����wr�.,p�����h��07���l8E&#I(+��d9�f"{���z�&�s�5q +.e]��B�
K�,���<;��n�Hi�/��`BklPP�SI��;zW=,���B�<�3X:�>���
��,���2���*(����z�
�OE.����8�[��j����U("��
`j��8�w�����G���K�;�\q-��4�yDLp>H���)��P�]o�D�����qSnVK���ME�?8�Df����\��~e��,�����lOO�*S�U/���d��\I!������us��I�|��/��.le�x�y1[o��O��&���Z�h����"�tfr�����ZQ���ha+��X7��_xI���,y������
-hMr�����?���DD�����\hE��Ff@w�Q��"f@w9������n>�����)�^�d?Z�7Nn57f@3Yr���c���^f��`&��
~h��c��~����3�%KK	����E�Y����%����$������|�~'Z�h��B�~��Z����	U�}���(����H��-��A�[�U~�64�I5l�J��R���`�\�q{4�5��+�RN�s���O-,�C��{-�������`4�7�nVUuiT�&��u_i��t)����I]���`Q�ZE���>������V$����e��4�Z���6��O�F5!��2jVq�_2�5,�~��nV2�f��	�_
+�j���w��������h�ws���"K��_����������f��~1�4En�<Z����g�� ��g��bS4��H�D'���X�z_Zg	�ee��`[��M+O�� ���
3�
_�	
�iW�_nU#���Z$T5Cn��$MQ�F1�Vo�;�z���d ��`T��3�D���_�:�Q���5���'���7m�af�w��������E���=3XUI��&rHV�@V)�%��f�����>�����^;��8�����d��'�.L=��Y���1gj�`[�����Ra;����_8���,���k+�d����5�������<=���M�k���~a���Oq�|����)�<��Z�d����!+������P���g�����*�����
�����*�"�;������G�6(��D�.���5��2���>89\"�2��_��d��v���RX+�8������'B/���rW�gYcW�I�e���w�r���IBdmm
N�W�rz;�~���^�� �r<�c
^�H�W���L�|v�?JZ��,(es�=�sBR��#8���($��X5��+��V���%��i��>[=����I�iuW�(s�{`�����W"��|�tbq�~@l�o�d�:n�F�R�����sb�K0����Ej�`���*�
����6u�_E�=����eZ,���B���p�l�ngO���2n�����}����2�����+t����9����F>�������F���&��CJ��+ /pA+3�����k�Z@u%v�E>����Zv��(�vr������B��i/n�C���'�]�`o���
5�.2LrZ
�F��l�z���g7)����T-Z�I��S�Tz���
i���Nl�@��"I���F����5	oJH�w|�k�[E�W�?,i�]d��B(c9w��5#y��HD~�������E��P��nZ�
��*���F��c�R�$��F�'�����s$*{pt
��i�"-v��:� ��a3	�!9���w�[w /�m��{=�o0�a�M���p�G�$vGl�0V���;�'o	�����bme��6��.s��T�~�].g"��$/��
Z���>?�~[��' Y������C�����Fr���O�-#F�L-	uS����H�wT1�I�P����au�}�.Z�pd9}TTdk�`���9e�B`�&[���oJ����������A-n����6�\;�z#�X��X8����~���F0WZ���/��������t9������,�1�%#�<'�x�j%Kf@�}���&�8�����l+>}��h�.k�pzq�\]�S�~�|"\S�����*���o����{���*s�"��*����s��2����J�`91����t��#xo�rg7�:�{����L�Z�Y>��?H������In�v-0�����f/��i0��T���ai0j����&��j�35i&�sj+�r��J��k:���Y�[��:�`��i���ja�{����a��D�L:����v��H������9�qL�aA�rdyiBK�,�����0�]�?2��h���"�5��j�f���2J�+�^h7�S�hk��?��N���{H	{�\�9�
M�8�J��t��,�g���-p]�����DdjT�z���E���O	H���L!
����6*Y�YB��'�{����
��D���m�e���L'b*Q�
Z�8l�A�:��O�,�|yh7���z�����@*��kHP�Z���{J�f�
�%[t�X�I�9�.e����ID)��������zI��� ���cXI^wok���l=�Eg��|%t|}[zH��L�X"�f����O���=G&*�����M����
<�<���� ��0C�������(�	��*��������� ���+3��!:�07H�x�E3����\�����p��(�Y�{m1It�kMD����-l�������@^���l={!�j�Z7�����f��������'^��2&����T
�[��y��E�Yb��X�����Y�B��X�o���Kz�<C���d_I��D�Q��^_�HON��@���i�H��;��:Z��*!`:o;�L�x�x/&r3J2�c��17yER�K���t�g�|"�!�s���������\���AR�n����4���y�9�OD�1U���j���r�\��E=�����O4\��)7Q�\�r������bla���<tiGN���5���e��y�+������*7{�O���d����*k���R�NYp��?�1���u��L���kNH�|~���V^>�j�O^����!o�-�I.���GcL�����}{��g���%#�2I�Y&H��0��	�OE(�]i��/�f{7���<m�)Z|d�x��m����%�h��>o$�~�D���G�d���'���L�5������\L����Q! ���{3#wP.��*g���#�f���A#�QEf�v{�~������������4g/����b����2���6F�$�O��N;E>���?�^���+�6�B�tsg��F���P�G�^�
��DtLV�C<g6�S�a�|���n����L�h�u_�d���ZU�����|Z�f�K*W��i����'u���f�%���c�����f�l��{�X�AV��"/��_`^��]FM�����0U�0�)��V�P����*^�q�O��
�����l�������l�iJ�S�i��H�y��W��Y�Qc�~���6�5�s8��x���>��U����5 F���0��V���.�B�W�����ZaW�I�O]�$~q���X|A����<g&O��m8([L����	����h$:�������u���d��������&a�7-�����o�����md�$n@��
��U����L��]��Yh��

����Ng�q��{�L�_S$`94
q��M�{���:��)v5�([>/`n����"����b1$Sm"m��83i#��LN�wS�a�7�URo���� �5U�F�&5�]���f�JWu���KS���@����6�v���Y������C��������&:��
�6���t���f��c�)�f�?���,��B��ike	�z�1m�v=�r�rq6�����W@��H�o���|.4R ��4�{t�"���8B�,&N�lc�u��i�}Ph�f��@0Hl�}�5>Ht���/�����������t��	9�����Z~AnQ��i���7�Y��@,Yua�����,Ly�����6�����{�A��6b���Uj�����l:�)�j�AV�	��>�����r��=�?e.NUmo�7��n���
�n���oS�*/����t�~0'RA���/��1��A2=fK�V���*��nk�	3��z�ARa�cq������0
t�p����t8��L��G�}�~�}��������l�������l�3��j��WS�72��e�,���%�J���ab���D�s���eZAmQ	5�fy�.l���� =��v�
4}��w�U�{Dr1�;���k�Dt�(��ge�w��j�!�|�G��N�=~3!����l���(/�Aq?4���@�Lr�����a��1!6sF����.m����;��k����>�;�bg�
��"[�`j`���h����c
�
��I.#���G���U���?	r3��;jO�kE���
8�#�N3}�[:������)FdZ}!�SP�@N��,D����b}�(�/�������\����/_'g�%�?�"�_q�'"�.�4y����].�on:f+�����H���0Z��cKI
�pXc~v3;���g��_����7����z����abz��j��������s����5������Cq��?�3�Y�����<����������<���������y����e��Y���c�?#�ym1�y���s�����yK�����Tk�������������E>S�A>�����=U*����*�������� ��u*�s�����O����+���.���1�}���!���6;�;���\�^K?r�F-���M��>S�Q����c-����l����3����\�Y���L?�����
:Rs�Gn.sK
1��3������������<����%��[��j�b�{V�^�zd�U�f��W���Hf}]x�df�t1�}����w3�����n�O��������-�}+7c��n��t1�����b����������>���Tn�������OF��~����?]�?S���Ov��~����~��'K���
���E������.�^4/{{���`�E�������^4.{{���\�E��o�]���^4-{{���X�E��_��n�^4,{{���T�E��O���.�^4+{{���B�C�O���;��hl����&"8���A���{��P���-��=����\�Q��<��P��g�:������?y����G"8fQr�g-������vB��B��N���ID&_Xg(.a2��B���!"#S�l&�g/��q�A��I@���p����_rXSJG�@~��D&�����_8Q��19�|p1�u%;r�A>�O�b5�?$~��Gi����}A�������9�3J�#�Z�����A�����!Y�� ��w%m��o��Z���o����S�N�tA8��G��h�)q�k��Y�T��x��$[��HH1��Ge�D420&j��L�1B��������\��Y�Vn��OSv�Rj�u���<�m���<����Y����8pqrI����G�E
�n���SN��e��� 'SVHe���AZ�Z�)�*���]��3"E\���g)6���l�~\��v�����5K�&o�P%���
EyPce�����>���i�Z!g4LY��2�y��L^�#w|S:����
�D\V��$��Z�����'F�������8+��M�x�H��6�eEv| ��D�Q%�e�o5��6��Cddb5��b�����S��*����/�5C���j�J��!�$D��.y@�'�X��Sr�O������k���U�~1�bjW7>N�)�6� .uV;��l�jhM95FD�"����L9�GEiK?Z�G{;��a�Y�#�X��A�����,�"���`�������'N����p"7�%��<[�]�����q����e��x0u����u��t���4���QL�UI��/�un����=���e1�������oE���(r�w<#��Sow������T&�
�LheDF��yD�o��Ar�Q�"/3�p�G��!3X�v���0C>In�)$�����K-�}*�5����J�?/2���e��| �NA�\6��V���������d2�v���
�(���|�����a��_]�hZ����4P���dz�^�S&�+r��^����*I��9��������&��?�}���z|�'������M�j�~R�'��&w[Ks��ku�h���*�

�=V�o��SIV������-��J\�z�Uj���.@�������e������_d������`���x��N��k��AO�{e����Z�);�D
v�1Dz���`|� _�)N�F�����.�:{GW��Hd>a�?������j/�o��)�����(���/^�,�.`��u�#����_���;��-�-�U��4E~�
�E�L�kA"�dS���RZ�&2tQ���jM8D���:��U�C;4�
I#��->�i��%������=>�����>�'���A$���
����&�f�h�e����E�������G���^I��dyjG$k~
�K�{�:�X��
�R�� ��%��#��C4J�������������m"?��SM@�#���lO��5���1zP.��j'�	H�S;�$���Zv�XO:o�.�|:��ZH����1���J������}"�:I������mX>D�q�������4�����1��M;��TR��p����WE��xh��!���7LR7�S��h}���.<K=�1o';��C�0���O�>�������$������.���dSx�K
�F?�I;UHs��a����(��2B�I����v}*�~�z ������E&u��������PO���X�#_��]���3r�1y�^�w����0�N�4���O��k�$�!�G�q�������V��a���M����%��A�i�HFZ��k�EK��	!�-���XG��k��V�1�a0H3�lG?_�3���
�����aB��E�_-�����q�Hs/�#v�����wl�Q�m/mz.B=������LI��E���T���ub@T�2���S���uL�%�>@%Sv{�H�p�{^8D!i�7���������D��������������%2�����E����E&������a"'��h��v(����P��1h�U&� .��g�,�d������y�y�GrYV���y '��=8�r��%��Q����x!�H[2G������|�����\�r\s.�2LZ�4���� �J�9mD���
���I���6�
��.�(��M�=�i1����B��Y'��-6�WU��Qj����I�#�d�q��f.#�0�j�q��pRdKry���R��L8��YL\~n{\#��@Q=8�ZrS}�4r������X�[z�?_Q��1/����ypgl!m,	X��/��3��y���� �s`DF��9�K�K S�6Y���iZE��=�%c�����c�*�S�s+9�EL����}��O��e��
+>�
�$K�����������y��a��N�Y6t	0y��F��d��WAD��i����+~~���H����~��p����l/���Y_2Fw;���u"�o*/��������t�>|������X��@�������:�S/=���Y.�K��i��
����*�E�]��`*�<���Iz����O�?/�]Q��q ��dgXB�S>
V�h���-���t��m��V�Jvl�A;�"���R-���@A�k��"XtsY�����,�mXK��}{�����������m5Y��~;5�/1�;���VQ���>�j�'���)~�Nj�~5�/����8���qPS�OE"c~�F�����/�9�,�����N�3�F�S��*YYTP2�/�S�3�qp����J��7����I��L����`nU�m��P��^�
���T�B��cq�fF���e��V��"�$�7>�=n�y	_�2����B�XN��(�����O�������EY��<�m��)�	���:n�_h����;�@��p�yO
��������M�����h�X"m?v�f�L9�Q�c�)st��y���8����M�j�v����)/��
-H��P��Y��,����������H���.�1�y#��O�X���D��!r$OX��B-iIcc+Y�5����Mo�Cc�n��}�,�]>>����|�5��6{H�XH����1������3B=�H�������G_T$���Ab�,��/���Z��	��7K`�������b��kr����������������~^���K�0[i.]�^^sj�*����g�T$��"�
�o�&�<C���UN�0p>����|�G��g5�^��N�8#k��� �-	y%@�I<��B��FV4	J�y#��*AiT�M�o�����VH�}"���_$�|��"�n��d,�\Ne�7KH�: �Q����y�`��>������2!g��{6��3`pP�&���[�((����E�����4#���j�v������n�	M���v�h8;���o^���^L�^=|9lrL.Y>���B�PW	d�Qc���.ay!y�8�z5�AM!u������bpV����+�����'�����S2��a|!�������u\Q��]�1T{P�K�z*}�t���8���0�u�{�����������>\�V����r������k\���m��,
b��v�U�d�����tC�}+j��E'�C5�x&Y!�V7I��6"7���H������\��G\���F���9��lHh�Kb��E��yx�C�I
Y����3@|�Hq;W�,y739�z(M���?��i�m�R�p���W*K@�+�\�T�f�l��t���dt5�S��JF8m@?��V"�h�����V�c���B�p�\,{�������)��1�K�?���C����(F���Q!zW���heV��8��y��R���2��0�w��p�&�s����G>eU����b��]Ep�!�w��C�VE0��k#`�2y��}vd2�WQ[�TwMt��3	,�C�?����D����vE�0�j
n9�KY��?E�A�gr6@cx,�������!��U���6T�uF�$�Hbj��7��1���x��lP7G�-��Q���gj��.��R��|�1���>1gubx�	�f�ml@��"���e����y��`�:�����bxd�D�x���I�A��Z�O�����f���O.r�������=�(�����~q,�w��;!8�/�6�hM/����`�_H�.�EV����9��Nf���82��(8���������cY��{�-e��|K����o�~���B� �w��P{���B��-�N�Tt�M�Jsp����%�6���{Q���d����)�s<����d����4���?.�?�5���F�+y+/$����2�1��(^"#c���/�6Y��t���<�M�,Q�����������.Ys0�W*(��Sd�`V"��]����l'����)�|�e�f�CZ(�c�J�,swk{�I��Q�������n�6��}D�_h�G
�G5^�@�34e,~t4
�K��bx�m������nQ��*8�4x-_���<F-�t�Z7���
�g/�#��a-$4��<0�f�w����\>�-�8��E"!��X���1�J�|2x��w�����yz�mx5D`���j;��C8{hg�A�Z���;��P�6Q
�����I�H�����+�Y���;��������[����#�U�;oX��������%w�/�CF4�"hD�{-��i�0�,����xT[�����i �</u�	W�I�l���=��-�BA��1��_9^�h���h��i��G����"[D�?�~8[�u���#A�0ja�c�S�@��}��D7<�-��k��1Q��?e��+�F@�p!NA��I����z�-�[���B�4�R��(��?o$]�F#v�"���}�[2�]�������q�����a���������6
��h�_(s\\3������X��:�0�,�[������1.�g�io��0'�x+j���t*��{e+
��l�Y�_h�zk]�x����Xz^��mQ$��3=4T������p"����`V�����9n�L���b,|��c��CEM���Le+M��/�����&�O��:xr��8M�c���K\��"�����3�]Dl��
�p�("�B[^,�U>J��%(��vz���Q�-twK��-���(�-�������BkH�	������Do?�DY����C�=����q��%N�^����P.��`P���C���-`^����0�
���4l�M�����dMe���[?7
l�L_�*�-&�<t��i��
�(�����
������M5��R/����g�u��~/��l�n�tbs	�<�]1F��Fo:oJSB�|�W�-F�z��O�s�h����LA	`7������B�x��bu�V|���+���S�����wZ��Z�,��C���&��@������~�]E�1�,�6�(��"��2�����|�	��Hd��r����R����2q��OM=��'@^(�4]X�S@���F0h�/A�#�B��]
$�y�T�>�.�{&��N�2�WY��5P�����Jh��"�DGt���'�Dk�2 [��`YEs��_�6T�CHK����wj�T�������6�z��g�b
HD�#L�qxa�Kd
���
�'R2.��pC/�U�X�T����4���8���w��/����c�uN|/��&��J��s��#j�+�v���	�5����PE-h����-J�cDy�=��u�(��
��u�8S���p���3XNn�:�;g0qzYX?�����]�]����T�%�	�{`�<O]VA�y���v��g;6W������w��K����pF�����;�d�~�����O#�W�\���G�'��8R������]���&#)�z$�E��[�B��?X>$uz��y��ex��.�?�!2�;�_���*�0w*
�����^�~�L���e��4�9x�M!�C#�c����3����v��L(7}7|�`���E"��8������y1���7��1���HF�K��7�1�$��J���@���7��j�G��SF��|�DQ�Jo�+;;���^�o$m����j�5��)o^+��i�D����aY{ZGlJ���D��~2��zb������Ti8��T�:�e�%�����B���s�7�<����p��2�tA���-�yKFE%0O��u`+
F
�k��T&�a��y�e�Bs���I�X���Xh}^��~�����I�����{��V?ns3j_�<�����B���-#�;px�����h�Lv��R�7b����.>�M����L|rE�v���������E$j���z\��y�/�pr��a�j�� ��C�=�����o��4j����h�	6`��Nw��)t�:!i��tT|M������E^dZx��������������P�H>�A��-�f�`p��y�z��*�%��=���d���j�T�*:��|*r5�����0�	%g|��i�����$�|0�9f�lo&n�Yo99���~�����89Phu18��E����3]~�g='#w�����/8�����"8jx�]m<v���
Qvp%���c��}������t�r����e�1#��r����
�?/"~���u|���x����q�f��N�W�2YZ�����d >�����6L�)p/+^2�QH{�C�����Y2qBn�E'�d&��(�G�����w����~:�emxK��n����P��&O`W��<���%Z�
5�r���X���-����+��.?tb�h"Zu����7����6��yn��J#��2N8�o�_�3I�w<��ZD|�q������0�5GD&"`�$"s���}�'_#��}��1�L��������A��P��5b�a�;���mY�������5G��P_�����U��7���^9����"��
���+�!H���#��S�y�4R�-�c���������6R�� ����C�w���:&e:��.M��d����@*���F�������}]Zc����j���Y�X���
 �/,,Y�$>��6~�);��y�dA.�}����A:�����H�nc��?�������GM
o��$D6��?���of�,]D���������l� �X,�+��~��aU��:��3
�n��7����0~���u����#������*��?/�e���zM�Q�4Vk�A�
��4u��rf��k�<��wv����k���
,���t�D����8v�P�8vXsf��H_*K�[�<����D���I�
Y��=��v(�Hy�N�i�!dG��$�$b��X�5�����=��W���0��;��K8�M&��7�]�Z���E�[���������Fww� �r��.�n�"������"�o�i����."�iU�������=>O�Ew�Pn�a�'=��f�i���n4.�����0]��9MU?����F[s`���`��_\%�QT&��C�x������  ���>�X���d�@A�w��/������v8�K��
`��j(�~�4 �6lx�>��5NU5��@b��b<�����\?�����vS�k���(H����84kI�I�Hf�"���t�)�	`���A�< �{��b'���?pIE�s�l���LWJ�L�)X�y�]�����E=�>�X�w�0'�����"���)_ _����E�c�l�vb)���
/ht�L�j��d���bQ_/m6I���O��'TD{ZPjOy"l������hNF)��f"���`N�-�� ���
�Z�2{� ����&�iJ�+,��BdM��,kp��-�(�������\�qeXHmb������@w�9��%M@����r	��O!���1-z�[d�h�*rY-����Z��d%�P�����FKZ��%����T��l/G����#��I��M��Y��l�"-)A=���"�%�4��Z�j(�-�����"�	�o��a�����E�0�`6?��3Q_��bJ�0��L��f�=������ScZ�h���Mo����hHU[/m4Q�aF���T��/;���*��t�����xjA6��@r9\�f��A�"�<�$k����r��JZ��o%�mQ��l(���0y���@��ts�3�Q�EEp�CvC�X0�+�T�w�����|�8H�g����0��6zj�t������4zr�������F��U
�'(*�L���Z�xf�)�x���7��x���JT�����s���p`��KAU��-�$������z2���j ��L�)�j�M�s-�����yw�Pm�bYvf��7�pd���
B���;"���t_����6�j@_7��V
�I}�e�L�-g?����K=���)�9-�L�R��'������������~�h��z���������?�z�o�HW�5�c&�m��_�Ee}^$����������S�R���;��v�Z����h������*1u�4�CNPj���N�����oM
_H`��h��uuaAtRQu.��f�������j��e��C�[�E;6_.";�@
gjc�O���;2u$����5gjs�]�,j>�y�X,�N�����|Qi
�;%Q�T��#Td���.A�(�������R�t�s4�BC���<����g���b��v��TS�g`�y=H�S�9z����+X!��!k>�_�|R;�c��r��j>9sI�pN�;���lE��O
�K���G�����4G��8mhY�{���$�`�][���5��0A[!��l�m����[�����[�P��4���;r�4&�:����_F��':X��'7�1h�~1wP�w/E��i'TBT������@�nM��q�i~��y��
��+|�4GS�bXg������)(������1sr!�8�jpE�3n��y2r��	<+ZU���?@v�6�M�$`�2���=���
`h���&�����<��#�]����sA	���&:<O
�:�)�.y���
�y����v�d"rWY����>E%��0Qg�"h���%��Y���'Y���]Z�9!hk���K�n�V�,X�Z��rm7�Dk�N��8|uf��
T�0���q����z�)�Z�$�x���0�z����u��Z����Pw�6��p�-��A3tj��_��eT�!}���/��<,���IA��=p`�h7�.����u���K�+
@�v�i�V�
�L�7���ds
d�6���$��ml�h�tUF�"�
�'�1����h>������������q ����|�6p��|��T0��|�8d��t�����aH�
����?t�KR�0b�5������_k��ag�T��
?����*��Fk >X3�#�g���^t_�Q��L��4^�I?p>ap��
<:$J��k�9������U��a��]�����0� �g��k$#���+����l��U�_������~���2�-��O�B[ �����>J�/�����\��q�	J\K�6���i���O���h�un��r������"����`��.����"���������W:��w���t0�>s��'~�������\����g.���b�3�zb���[�����e�[����w$���S���
��*��_5:��K�B:�\:��A����`�h9������>��?�W}�U[������������i���2s�;�����������������������G��W��o�v������������������������������~t�Zp�������\��-��u7�
������qN%K�-6,�%����@�f�{rH���9g��
�7�	J��n����)����_��f+��NCl�a����CB�v[?v>"��G�od���%��g�B�[�Q�T����)���)�%�\�n]�?h�x��o�]�vv��w~��n���������d8��t��Va��D�~��zB�Bv�]>Y\u��&����V���T�Z��A
p��ZT�r<������
�����9���<�7�j4+����2���
���g�d�t�"�l�js���S�H�W�����;�W���E��3���(h�k�a�y�A��n2�QA�AD3�2%]���t�Z;�b5%������/��[�~�����X��++J��u\O���<���V�@��Z���o�@��B�,�����|�����C7��X��Rre�dV6�8��X��,\�y8��^�J��������5�q@����Q��t�{p^��9���t�*�����$Y��Z���>�w�z>���,M7����E��220���$T���\"���B	������[������?�t]Jr��1ty!y����j��{p��B]��[��3��)kE_L�^�q����c}s�d����*h����L������|����uc�����y�)<�c-�.�2�T�O�2}��[=�>q�����ZpR���\ROj:���"~�=���+�;�O=,������S�o��%J�PS���LD��w�����v��;Dmy��q�Z,�+�B�!��iG��Z�I�e�rB%�=�v��i^@�������|����m�l��;xY��<<������
����g���?jo�����+Y���4�u
BE��<����E�nF@F"�0d)\�@�tz������:o\�-~K9������������������{(��9�4`&���h5!���6�PQ������]W�}�zhJ�$9�D���[ip\�}`��`�Ehq�;�4��-
r"��e����v����f�i�A�N!��iq:�|v.�V�$|M�*_�;!i���	jZ��c��x��k�����*Z��1��:� ����5�}dq</=�������
� �>���9�q?5+o�
$�������*���<�n�����@8f*d�2��N��OfO.DJ��~��C@5�6 ��'�8 �f-��~���|k�R������C@+�Yw$�ut���7�@Rm.p���x���*�|�Y;���B�d��\
�G��q����P��t_�DAM��K��h����8hK%���s���K,�W�����������.63S�\+�w�>C�/��+����5~oG���$�r$��u�urb��Q����y���qQfJQ)8���rB���d�~�5�,v�.@&Q[T��
��^�t�l�7��i�7�!�D��y���m�����p���|��Tcu���G��Ts
M�`hEY�IC��V���}�U0[��j�~,��}���3"v���V��8��C<�#*�����I���]g��hE���<���������_?����Hh�%��m�CGW���#�bw�e����H�ms����Z�!��h]01��7�^u��S�������1~�uEYs���Q3��5�������=���$x����#�;(D��=~����c���LD�O>M>�aD�����p�����F�7���p��b�bE��f�8��Y4��h�L��Sv5ex	��U�2Y��7Z���L���56�PQk.���g�8h���	�G[S�E
t.��_���8y���fv���kq����:��Y��0��[�u�X�\
�_��69Q]Je���}X������M�5�KP��g�]*h�!���������k���R�tI���v�%Y4i�j�0+U�'N�U�����&e���u$qj�+j�N���J92=k�"�27�B���>o����\�TU
Hu����vv��Pm*�K9���6H��_���a<�Q# U�����A������
Y�LV��*�c������f}��gs���?P���y���x<�B�"��3��l~E�b�o��3| �N���Ts\67��vE��<M��9y�������|���cI��v
:�G�����N�_�$	|��g��r����.
�:���hf���������%[�g����^����3��T�n|�]�g�{C�
��a��,�ef��� 3�Iy���>6��f��������!sY��%h�
;����#�� ���%ZE�m��O��V5#�������D�)�e��?����&m6����s[��������>!��mB�!|�/�d	M��:k'^$�sx�K�=�9����&����_\@��8Y�C�hl�O��q!w.���`�7������>���L�s�x�s��a�'�l����*�A%�4E$�x�L��L\��h[�@����{Y�^�	�z������?<���M���5��++�#+�����~~[=�!-Ps&J�29������ZE��t��2���)�d�6+'����~l�>x��.����������1�����\U �
�;Nk5����e����QX���0�9�����[�N���#up����@D�5��QJ���(��P�2�>���`w�T�d�N��&O�.i��%���8=@[Q��.��{,�47.�%[Pj5
y5^p��B~*�,�&���O�5��-��n��k�{��	�H�bN�u��P�#5g]���Eovpp��pR�t��^�?��>�D�u
��f��8�m�����I���:{�[�S������Cm�������<�`�9,��=V&��Sc_����	I7��*�!���y1���'��L��"��^.�8Ko���6����I�*	2�xmS���H����m�
��K�6�
X"�yi���nM@�7y���ATb�9"��7�.�N�����/D�H����)��S�T��JY�#M�e���� ^�E}������H(�k-�\���~?�'_(9@�*	����{~I��y�%�� ]�|w����>*��Q	�E������Jk-���J\Txi�[����j��Dci�!�4�~��]:����m3��q�-`k�*mt�[E"�O�F> ��$j��EX���Mhb����t3���o�� `������D��`%M����(�v����Z������@�0�v������%J�l��E�lA`���C�����J�,��~/}�Q�~��������.�Gu+
�9�z�u���f�3�-�����]�����(`�x:�-p��;�{�p��'""�K���y���=��d�����G���J�
`����>��
����r+��f���Z@������'o�d}������|:�W�+,*Of(��{t��.)�q�9	�/���Z��o�&"1��r`M�-�b����s�2Q&�5Bpz���F��X�GzX_��^h���e�P�YM}�%�;��h�z��6�AhE,�6�1�G����/$����th:�T{~�������!j��C��%�k=7�	*Y2H���0=��fk� Q"��HK���H�F��++�fUw���2�6jC��eRu&�L��Y\$��$S��oB��{m$�i\��o?�S��k@3!�a
9�����f%��Z@GEr~����!j��h�Y2-���.-~!:w)j�����^(��oyj1��$%�N�Y��FTfQ��-`��s�{Zi��a����f�^�����'����y�����xf:�����1.�(0����c]��E��s��qDq�s��N�>5H�q�B�.���������FF"[W��?��������[�������]��X��B��b����}�h�����g�0[j��Kwp��Z�[���k/��H��M�1.7����������/�x�C�Xo�K*�J@N��
/<�� ��S������H�c\��(�Dmr�t>�A\
������yE?e���E��f0t Z=Dn��q�P-���N�9���y�jvh��O���f"� L�6!q��'�
<k��j��v����������?[���I���h+q�1�a��o�"j���4�{�	2�0@%A��BE����=�X�.�'�F!�Q����� ����&�\���G]���I���;��T��s���-p��D���^=�������^C��V��Y�����/l(���wA�<��1���i$��e�lz�\nnB�D��G��"M�������x���������<��W����E\FR��a��N�o44$]3�^r>��x<&}�.���E�	|q��I��<>�Sdf~�6�U��� �Tx�
v�}i�_��^�I��9����l�����t3l&_\Z���.Gx^��������M7B��Q��������1������M3;r����}�T���BUIO���H���[eTa%]7���d��7��� 7N�/ �21a�y^\����*w���R�|!sF3�Mb�b��s��x�q
��!'���U�h<�*=�������>���2�i#7�.��G7�%�BU�
����?x]c�	��?II|W`��������SIeT�g2���q?vo2�)�i���B�,�:���������Y�p3�r���������&�O���o������{�Hp �|��
\�A�\� o�@b�s�0
�,�n����%j�M+o?�e�y���>J�F__���8����E^O�_z Z�+:��/���?�4Eb������S�Y�QK3f����
��������=J���sav�� ��yI����.�5<��^�9��
d������RG;��gn1�7�$�)��Q�O���W.����6;��Lw��G�'��"%J�<@���;~�!�� ��9�t�Z�C�w2���Kj�U,�?E+2�l��T!�:�2�&`�5^"av�MU�q*��l�i��^�E���"�$�yX3��z�����2�Xu��[O�E��<w%nt;"#!?�0��m�|����ZNm�Xh��,�2�R@��B�f���|��'0��c����I��k%�������T�b�� �
P��4<Z1�����GCo��n���:��Xo����o"��:����6[@en����>��"�gD�z5����{_H���s}�*�R�X��g���AduT���[.���j����.�r=f�s�h@���8L!��$k���BQ��p00I��i��b���sCn���!��&���Z5����'�$Q�4��#��I"
��.�w&�����}��sI�[?���u����=�����������E���#	�7��{�5L�OR�^��������GM���a�J�0��_�B��Z{�\��k�������L���C��t"*��~��@�xU��p�f��$Q����Xj����,��K�����,������{��;{u�=���%�+q��BnI�X���G�Q��!7�uY�"�<iI��C����������D�Z�\4u���\d�O;�������&��NE�a0��u!�����{D}2��/z�s��3�m�t�|����=Y���|�F�����:�����Z{���1�A*"vQ������{��&���|���ma
��~9r|�qB�`����s/M����}Q��U���������r�io!=(J�����2���27��>3�z�Hq��r�$b/Y���L �mz:�������8�L+��,�SP�l]���n�p+�D����$Y�����y��8D�
f`�������^$���%��������A�*v<��wUZ����yu
2"�wY���c	7�:1��-J��'>*���M��}�^�|��>�E���"�pX&u|E
�������cA�J~�8m&�/�H�P/�y�_�?�,DD5i*V�S�j!��|ry�=�_gyDzo�i��%�>`b�M�\��n�������VZ����S~���:�����J�9�O-���X����0��SV��Dhb�j�:�I��4�=�V�Y������0������,���Yl�`�G�2�x������
/���/K:MS���c��^���bvZ�)�p�5q��$V�U.��~�$zW]4b2���?��f�����A��Y��>R�Y
����AT3MW'^�1��U7]�4����V��f#QZ��� �k��v�:�79ey0X��EK2q���|��00\�8�*�������f��h�:\���{Nr�i��
��'1��,_��]O��A"a��~$����0�i[@U�.�T�����]h��~��1�9/�����hb�+��x���-
��	i�_���i�������b��d?�l��o�,���u�F��X��P?��a���
/�?Z@e�F���v���b���d�&�������~b�+p���z6���B�(�
)*��;����������(3^����{#�
G��b����/�GwN@
y�N�D����Jv������_���_��L1���XV�}��	h��l(d����>�	3`����f)�e�!~����\��fJ#��i��It\���kL�gb�s��D��P6$;u�����(�%����f�u�Z���\�KS<�\Q���D�a�<G�nD��j�����!E�ud��/\���v�WMr�7���3��e�YQ��9��Z�`@�2�Hc�h�7�������.�Sl^Q>���3�o<�2�}�?��3Q�J���X�qRk�����$���FV�,�Z
��NQ.@��������u6�f��.�c�M�e7��.�/k'�t��v�������Tm2m��fPB��C���l�y���|�=u�}f���:"�Y���ZG��e_�y����Ti��	�������nt����~��F��������������:�7L3����M����
��>I7��+����/��&���<��-�������L���J�t.0*�����<�����wz��f���c8�����eU�j%=��k��6��3�j�����C����Ln2�����&2�
���9�7g�bX��.�n��e�~���6�IMa��7��C��!>T}&_���@'x�M����
:�l��_��}��W�d�K�����W�������E0��$j���v������9Io���
3��@�!UF�H�g,����A�\R\�� }f�vP��G����<�#��c��+,l��CV�����L�`(V����R�z�a�IRQ$(t��n>�+}o$���l6-e��(,�e�6M��oa3/��&��clf���9.��%����q��#�Eo�b����$������_�0
e�y����z��\���1�����b��l�FDpd����a#�r�����lCb ���"_���E>�M��Y���G��!��[F.����^��Ro�uXTz\>��'������f��� ��V���_H��C-����:������7T+�/|�:�nr�:���QP�YzS�r��l�{��sR�i>��j�8�"1��6�n��=�6�G���z��6�k����?y��������������/_�?���Z�����������5�*�����!������c�����u��z�����z��9kv���?;J�����������z�8/��z��1������r/�9��hAp�{!�{s������QB*��0�u,x�	�*c��JD�,oZ��7�(�J��(�������CN)�C�PV�(}pA�]�����#�i��"*i�Dd��}L�h���t�l,+�n��4������?_e!!2�w3%��	��������X:�I�������/����V���l�a�����2?"�A���}}���jB��R����HK����{X{.����;����E,��C�a�G^�!�dV��h�
��VU%H��|?]���@�m����=7?�[��~6����	k�>����R��Cx��c�n�/�����W
��>�:#����H�y���.$d��#B7�$%[��3n�@�H���.Hs��H�8�1fVd	1��>����<��$�)�YU.��fuA���4�Z�e&!�Me�����l*��y�i
��.H�5�.���I��&�<�dR����|~�dR]
`Q-��T|?j�BJfS1v�&u&"��+,j�Q ���4�0����1�YM�'���M�\d�
��T���"�#MX��i~�V�=u�X�%��[k�9����|k���A04[�i-TsS�uGP����9f����5��AaNq�fj��l��0c����e6�<�1�i7���)�wnL
�lL]UiMg��9]5�)2a���.(3�v:arSW��{6�O�JFuE�S��2T����H^J�>�����vOuF*SmhS��L�B4���=U����(Z��� ��:#��l0,rM6u!R���r"g�Q]�f�l-[��,%GuaYhV]�DFH����$��>��I�uE$����<Y��+�����Tu���H���3��S2�+���esO���lYW$�\v*�u�����sv�i�zEZ�%�I���*�dW��0{�ZG���j�������5�����1�������I]���5�*z}����%��1����'���J���Rf�����egbRv0�HL�H�7����s��&��W��wt1S<�3����mB�2��|�I���)=��[S��!�:	�n�,���4l]��$"�#���l�g�,��_iR��4�A��a����Q�
3�Z��}Wk839|9=����jr�Ey:���A�����S�,H�D�(�mZ�����F��f�j�9$4E��Y���!m�����o���eW��
4��{S����#,_����2�����qX���8��u3Y��>Z�
���G:�^��F��
:
�c����z�8�/�y-!�u� }������"����,��N�%1���.�N��h�U�pF�L�D�����U~m��n�^�����(*sK��&��1���^�'���������NXBb�����b���Hd� .8/�re�6�����Ho���Ii��M`	(_7�6���J�o��+I(C�*� �d��y}�� 5G�(������Y�i ��B/��L4�
�_\�0��xEv�}�������1=�X�j���f(N�GY��	�Y��7��6���"��5�M���X"r���aU������~|v$��]o��E\�B,���K�G�]'w��<�A����rK�4$�0#�&�y���?p1	\U�e��R���3�;��E�OB��M>��%��"|���������T�{��i�+�O�O�\�.�Q�G�=���<]t�z.����?t����P�p��Q7$�=�G�Y����U�Doo��
.����y�a�K%*����/��WD[��5�������&��(�J���t��`�6�Q�-u�+�����/3E��7E�)�����2�����d]�T�"81���T�.uCz��X��j�RW����/�����'��1R�*dxp��� =���0�R�����{����H�0�����g�����5���V��,X���#QW����NR����c'4����(�����Z���	`�t�:
F6��|hv�Q������]������u��2�7��gGz@���fm�a��lL��]<HpT�p�����������_?�<�����2�XI	�=��p��a���OB������cT��2*���,�����&����.��)[����JBW��@J ������1sY�l�j1���&�I7$�<�u�������i�s�+��������6�u��?���h�������L�L����Y�)8R(W5��<	���'P���C��?���"��!T[[��G�-���ne3=v�@���nq�-Y��2V�E\��k�q=i�V}U���]�~#V�d��f����_j;=t����Xh%��<z`����x�N�e�.'���c�u�S�;�z��[���|�nN_�!3*J�lr�����O[�.<�N����ym�����S!��s{7��� ���j��������^V�MC�X{��M��~�[)�D����$3!�� 2R�[
1��?@x��&R�!\pfu9l�`A�'��/������/d���<����?lr��������S��l��<5#���,��h&�M����,{"^�R��qEK�$b!���C,nt�����g������;�nN�e��t��d���b|�~;�B��.�}��+eB@��,���)��11��#iSV~���\�3��5�v\0��-��h0���L���ao_[hv&����_R��9��O� ��y3�����e�G���F�6���c�	��A��]��XE�����b����b��|xhc�Vc������~�6l��>�<����"�+���Lc��	�XK3���l���IbFH�����|����T
>�o����X���Z���:�_QTF}��~Kkc�U2
��=d���i���v�����8�[ahob�� �v�%l�d���/D���~c��4�_�h�O�����z��������K�}�����q[�.s+�h������.,������z���v������\o���^��t]�t���_\����������c�����S���M�U���s�~��������r����z���b��d�~b�>��c�����3���T��>_���k�_���9�/D��{�^�����N�!��c�~��:�@�����w�T�N1]���:�t]/�u���\�������k�nn��u��z���b�>��^�����:�t}��:�t}.�������������W���?�:���@�����bn]�����u���A�Z�d} ��m�I���O����S�RL�g���v������=�vl��Nd��r�1?���b����m����1]�n`����������c����1_�n`���{70B���!��m�����T�
Lv��G70���>���
���{���&���z���7������si������������!v�on�]����uC������7����
��sC������77����
��sCx��n�]��b��������!v�on�]��b�W7������o'7��g�������������Hn�_��vrC�z���
��s��Z�>�����������6���~}.����;��������>��^�������6��S������.���:1�v�ru��-�EH��G���+��-��g2K��	����P��L�
@��~s�mCt�,@N:9m�8�G���|g����
�����kz����~�l%�4�l�H��G��/��,�e����R���<��Z8����e�eH�AT�!z.D�
H2�Q�6U���/�����{'���]�T��'o�|���u(�k-����#�2Q���vpf��|>���T�oN��$���PY��,@5D�O^=�2 i1���2��y)6.d[Z�
����J��q�A��l��T�����T?e�A�������dC��'�Ow�g��\�d�Cd:H;����,����:��7��F���/Xa���D.��(�I�;�l* *�B����{P��$�cI*|g yC0j��e�8��diF���sK~t�M�<J�$��H4�M����Sr�5#�Y�G���y�x�xeCN6n$����h#g�]	Tk��Gm���BB���E�_�=<����1��7o)��,���d�Z�v�����f������.��/�Q�gc�|���������	.���V��k\�>u�	�;�,KkpS-�3
���i;y!�%�>;�&�\F���nw���K�g�k %P�EUH�����{�v��'NjP3���7�\8��G��������ri�L�]0*��#�NN2R�lDt'��~
3*��)RO
?s�7�#��L��	�cT#�T��iBn��~���"�����w$�`=%��j7O�]�������uA������Z����H���VM�NEwQ�j9x���a�{����g����(Wz��~�bs�BJ��gfX\��!/[G�[	�U0����4�����an\2ma�Jf�.���,6_�d�51�I�S|�����-k���@>7u��(�3��$����7����e��,S����M�`�&X�T�\���Mw��GNlh�����`����*�����I~yL�����\�utL����A����-SQ	f�|n�0�w�y�*��qm���Q'����9�z�O���Vd����|v����0
����6�;�w������vw.�v����D��?����0�Pv"~@�������'�:�N�gc|����l����@�r��{O�����@J�|+��W��^�:�8�u��G���������|O��������z���i��f]�>�L�b�2.���0}��Dk�MW7y��\Y��w���|���Z����w&e&�:,��a�����n�?s��d����	�g����<j�L�����W�3�>;�N��DOf��|v���]�8Tv6>��Nt&,_R�6^���eB<c��7��he���������T.�[Q�� /�bX-O���zQ�;xM�q7j�H����;S�6ce��C��:E1�����QZ��$,$�8�n��h\�*`�`JPq������g�y(� E?��[���������}������I4�]�r���]��r�E������L����OT4m�������jUH�a��>�����!p�vg��a���F4��v���Y���VpY���?}�������
����O,(�f4���9��[v�q�)�����~���6#4r������;k�����s�^k��`���*}z�B�x���dr�>/�����rG�����Qs�����u54��qB�V���������~���b\jh��#�8����8,x%�E�c�d�o���m���[#�e$d���+f�8�*����2���v-��FlB�����Q&��	x8U��C%�t�=����9f
�8����:�����$s�f
dP[D2n+�$Zs&.����FNV�D�����p!'���0W�n�v)�m�l�0�����J��~\�3��?��A[`�Y=�r����T�f}�$����L����
$������|�H�v�3��0����[��#7���?����� iH-Dg�\���J���nEkL��s$>"��>6e7��Z�*z��W�k�y<����t������uk����P��;����4����['#j�]KQl��\K�H���EOjiW���ak��NqylN
����U�#�����>;mO�^oA�>��X��y�,7q��[�;�����u��iG��(���R7�
�h�z6
�U8��NA�,��zN�c��H8��L��$�G���\�{��U4I�A6z�Jf�f����u�����;�8�z���m'��(�j��f�
���i��������|q^�Dd�f�5�t�|k)���XHQ����m^�_��������D�*� �
�D%}�=���kv����3@������$TR
���u1md�.z�&��<x��@4������3*�/�wz���B�<wp%I�PV���z&S�jt�sq*CG�@%���[�]su�2f"2_�j�]H��G"���y�U�)J�Mf���T����$��A��E��[[J5<��L-�C�����p�9����v����I�>;�j���8�z1S�F�Vt1a<�������������3m�|�����Ecw��"��l�pAIIo��'%�(f�������*H����*����U��_���u_��e���L���i���-{YQ?����N�	��!�g��5[�
��"�i�[/�s��2VO�����}CEHw���������M�gEZ��>��&������/�(1#���&]>����~6�5@���"��;?yEIF��3�P��������v!����D������l�?+R�/L�����oH�&!1��J����}C����iO�Y�eY�N�gf��-��4|=�K��o�#,��t���gc
�3@'�l��
>���q�/���}"�7P��:�3�
��@�����j��d�W4����U5�����Z��f�A~�
�Z�����B���	H�����C��_Xlpr�J��
|v������3R����{L���2mI�Xk�P��t�%����g�5����5�&/D?����k�@1�:��3�d�V����
�J�ngP	�?�N�������(J��EhvC�vs�0���Nv��M���N��Vb��k2�W�Y�
	������Ufx����?��<�?bEx��:U����?P��21��j���#�g����=Q6����/���A�*N�>o.�]@�"6� ~��O&������7baI�p�����gGp��DP�q;���7�:��OfNZ�$��w���Q�Xl���V��jo6!�D���������Dd�Q�T���Ku�{C���>qe��^�T�������bAP��"����_���"��l�u�/�}v�yJ���,I��[R;�H5�����w>��V6�uo�3���L���#4�
�v4��)��UA���U=�G;���g#x��d��c����oG-&�J��@6W����*����,�sqM�(*S������x�|!��p����\2N\�Xt�kO�F����#��O\H�=q!]�����F��Zu�q���{G?�*4M7��R���H��E�l���D�Os���tG�}*���n<�jp`�J�8��%��#q�������F�Q�m"2�����7OSF��+����(x��!�/�����"�2 ^���O��u]�V��DU�lw��q��������6�]9<����>^Y��
8^���++���W��>^Y��H��c�4'>\Y���j�N{(F+3����t��G++*����a�1ZY����e�+�6���9�<}���G�/yY���w+J�����3.E�$������i����x��)3�x1�w+�M=����3z7�'%z�n"x�"/=-���mR���`o��0�7#��3w�RQ6�doEE�����#����>��Gn	�;��US�'�y)����,3�7:',�7�yko��EoEzz�Ta��3R%i}�f����U�<�v�&�.��		�A�����e�x���"%��g��
�,M1�i|s4��(����9g���V}� ��@{��~V �M7U(����#U$���F�	� ��J�O���-���X�z�V8~�����z�V���QZ�8�?f1F��'�rCw?��E.n��xoH�M��l�~%Q	�$�	@u�cI����[�ScBW���\�+
0Zw���-�1���w�<�=�e�f���6t_�W���iE��DSi.nY�+Y�4��u/�_nH���]�x�������d��M!\�+����~t����y+���?���@J�|������
�if^=�iN�u��Eg"2�0	��?��� �	�u:��WZ��}����\��
5����)(�
����|���|3��J�|%�,�p���h8Q������!��*C4|C������B^������!B�Y���(������_'�(��%����*��X���!����%�.���L�}4��,�-$F��Z����{`�F������7f������WT2Q�^��t,��o�����=o�#"n-�!w�7T�%�C8[��<�!85��.����*X�����_����G�WVg�k�`�j���O1,L\�>�:���@�`�V�)
�:2�o�!#��"h���f&"�yQ��Z�x��/6����>7}���i�|����A����
%g(�����������f<=:��� ��1!��=m�v=��z&h.C-|y�}�X����Z��FD�o���<N4�B������u#�����Y�a���'���_(���!)��@���Z�gZ}�!�*,	p��hf�Do�����v�k��(����������z�n\����_(���W�g#IF�([}��Q	&��S�HX?{�4;H6VQH���u�#M�$ps�����S_��"a��W�u�jE"�RI[�z�t�����\v����u��l%��\��L�Q��1>3���M�aEE��U�����|�>���7�� $���z��V�=E����tX&�A[t���H�aK�������������:�9��qi!%������mdC�����6�G^;�1�ojy������I��N�(����Lb���d_���*lX
�2D1�"�>���EF(�K�����>��/zC�+�V�S�����6l�M��U�96�����=����@�)�/&��l���DRi�Q��%�� �CT=�7�(��8:l7�������x��oC����Y)`X��*���b��!�Eo*�h����<y��4���������
����e4�������O���
�
����W�X.O�/��/�I>����Y�
%�Y �9�:
Tv&lS��b�t���Dd��c�B��Z�#��j��D�����L����9��<8�+��;�+&@6��.,�)���iQ�VQ^�����4����5������q��og�����,k������WV
�������[�<��D���2!�����	=�F�����XJ�t����|S��JL�9�N!t,��*�9�
=v�/��T�8����F8�-:�GR>��H-�@�pC��5�� ���
i�<��S6&��Y��Y#��~[�U�N{+���cw�������������*��O��$
��EaF%�1��g\������J	D�n��~������	��qR���7�����������f�]+J���go�����"�a�;F�O�e�!��_]�l��������L���?�
B��o�I��z��������$a"���~dBO���~�X���~�@��	����#.����W��������N��?�/�C�pQgL��I�N�G��jU�`���(��_��^�n_w&����iE��t������c����?+����.���P.�n�48��
��D���	�������1���7�|?��X�c����or�5*�JQ�����S���}�lY�\�?+��V��y�p�������^�;��w���k�=��)Q+����QA�W����h8�?Q��.�8!r�B{5U�� k�J�L��y�|m(��'����gk��	�����a��^��X���X�Y���=�c�g���)xYq�������p"�1Z�rT�g#!_��%�n�G'?C9��~z����QQ�����3�}!�����&x��R�Sc�t�\:���	�������/�A}�]�g#&X2m���n#�=�Iv��T�c�gc
�����nx��(A$�wv�6(�~v$��-�������,W����BG��$#���������l��L}v��@��'�Z��7Z��}%���������o�`a.yk��=��13�(xh��g���fG�Zu��Mo���
5���I�aJ'49���>�����F�;���=1�Pv�nr�|7Zz�v���EDgL�4}�t#�bpJ4��F���cGC~yY+���p�g5�`�P�(,��i��Bt����gq��|X��vvt{��4~��k$d$X�rh���q�8#���G:�&�������_yM�!KEv�SOW���7pf\�i������D������T�G�j��3^V��������������	�+:!.c�zCx��;�R�n&��/@�������o�?��{h���Dj|��8	��������,Nj�� %����k[�X-�9�n��������s��{G�z�3������y���e�"w�{��T�u�$����e��������$���U�8%l%"`�4"�m^����;�#k����L����]�h�	W43�Xs���i��k������}�l���Zs�������8DCQ�'&LT.�ml1}�4�P�z��$��<r��?u��I#u�Ep��c�wa3��D�g�����G�������[;����� �K����/X���n�it{�	�h��k5�x�y���Bxw�����L|��|�`AdS����A�_��MY7/�i��
<��.:�����<@.!�Xy`c��?-���cauoK����>�0���;W������M4�������V��-`���`A_�v����R0x�����Q�/����=6�������R�}<�������kj������/=d@��!�
q�Kc%s6V��vA�-��*t�����}��>YO�5)j�������^T���i��z����
��g����#|��an��r�����7�;��T1zF�vR�)�I��7�\�):�e1
��i�D�)�iy�v�H�D����;�����k���.N����|�1�Y<���!��XV��#�r{�(zmu����-D�����E�;����G�����MD6�b
�i uSK���X��~���cC|�+;�NC_�t��q	m��Z�U���U���^���ho�c���`��0��Q�L�������12g�|v�����k9��V��R_rU����O�/��������<_�L�D<LC�{���a�����hrS
s�����l,����3��C�J^��������6�U���J<XH�d�I�Ig�2��8l�R�jl�p�9W�x��gG���/B:���,(�G+2�{b�������j&:t
���A/Hk�m�>��1�����`��u+��_���0��4o�����f�t��(H�Z�/H�������'��|6����f3)�u��=�	��.(�����f{�2����Q
7����-��$=�E������
���nl bJ�f%L�BD�w�&�D���(�R&
u�)�����O��w���tz���d�T�aIg bt����V,��H��fL����0�5��(dZ��_��tE���-��3q�%]���wa�_\��)����S���.Dd���%���c��+�����5�D��e@Kz[64��*(��-���5[�iM�};\�m���n�p<��Hf�c�S�5���������D�6�o������|A�YO2��Ao����dH][k4Y���n:�FP����4�d�d#(�c%����1T�ZB��iye�A*�w�-�K2���{%e��o���(`F>��z&LI�@��{�Kq6���9B���(����2���+�Pe*��u��T�/�L��cbTy������R�1z*�l�d��i�4z
���i��&dz� �|��"��4E��R��|����eg
Ln�$���$U}�q��i�-�!�TR�Y�_�n�;���&y	uH��:}�cZ5�{�b���3q�.�����G,��#G�����rF���;x��&Pc����Z��	}1���h tuS��������cJ�C�|P4�@%�������&U^\S��QS��,�w������d��1�O��������W������\TV�g#In���7*�0��5d�i�m��%[�S��Q���T#��
����&����+E���YK�K��|���$��-�G*2W��N*Jb������!�;�f ��#�I	����}����Ee��A-,��:�k �P��)s>���A-���GpoT��c�D�;U�!����>���9��
�TI����tRX�|�'�����/Y�1��[���3@5��?CM���cZ9r������p���"e+����+
�^i�=�^�j�����Oj���R>�pI�-a4�4�f	�l�y��K��W��Na}M@v����@������l����$�����`��{�'��q+	��a�nq'��V���[�@��[\c)�4�o��(\��xFV�/]_N��l7:X����;��~o,T��������	�uB�p��@�.+z�.F�����>��PA/}�o����$������%Pm��x�����f"�87F��,��N�t��<'�W�3NH��[�n���Z���=�}0�L�fS6�h�R7�>y>!
�>Ha�8��-7</h6�iy����ATd�f�E����
�y�	0��������dS?�:���(+y����6�� ��:�G*y�����z'K�xjN6O�:�����n�V��.X9�`7���d�e���z��"��)x�-�aZ���[�����/f��O!�t;}��tz����|����������n�|�y��
ZJ��m4C�%���hm�%��j���~�:0��%�������{(����n]���f���Mj�K���v�Y���"����(-<���B�^�gc��s��%�E�������1��g��|LsV7�%p!xo���������5�q'��E�IL*8�M�n�����w��iZ!�6���6�L��Fl
�F��
����>>k~���b^���il&���h
$k�z��V�Z����f`�3u?��H�(HQuq�������D��ZC�������8�C�Tmu�����*z�QP#oQ���M����W�L�71�p���k����1��|�i��<
0������1Jk�o!>l������8��#���LV�i�f��O�z��q����)^?�t]�t����������*��Us9�u����G�U����t2�u���v����^~^���z�����v����V~^���u�����������-_71�#��_���o$���&���~)���~)��\>?��b\��b���Y ?���__������������������~N������x6d$n�1$�[����������?�Eo��~n��4�"�����ij�����>���_�������w���C�����G�9?�
WK�Nf0�:DR�$$K�w$;���H)@��JD��7��I�3K��a'G���s}��j��d&(^:,J/���D�a�_�<g��CKf��|��_]�*��~�!|T,�"�=r��L���plH@�?����Zj'�(�q\�@�)�fOT���G���R����(Y8.78n���J�S\wvS�LDt�{#�D��\��!|fQ��tq��I��L�$��Ap�Z�0zj�������������H���j�J[�d��"����
�C�g"����zv�n�QY�[u9���e���W�^I��j���cAp���n��&-�r��F�P����i�%��n2k�XM�B������~ph��}]�����psE����������{�j�6T��u����[�$���~�9�����O}�~���~$S�LDfew�$p���,����xl����n��F���;������	�����8�ET�	�����8�|%��GO	�i�o��D�nh�E�}d�hqS�g���d������D��yChd����?�����n�������cD�!}����j����8��P�5���$Q�|v7��.!���k��H���e�e&�U������op��������{x���v����n��r F.�]�'hYQ����_*���(���+�j���8�tbg���%��G��"����Y=CW����;^�&p�L�BM������B:�
�W"��g#*_��!9���X�W���C���OX�y�B��3W2���b�P��Mn�k�k	�1�oz��f����f�z���3P�;���v��}�<��,:T�\��a"���4��J���}��-�v3�f�2�H������
�Dd����h����������#��&;�;�����4)
������es���,�����i*J�Hu�VaE?�8	IY���g�����LM���g���o)
p���;���k�����m�o|�P-�w/���e���2�t.t��fg!R���M��w`��������eB����=#4����"���\+��1���6�G+P���es)�O�������L�:��<F�WTP\Z���?��V�����7���x��\+%)��c>�n���D8fZ��:?�7n&U^H������<y���>y�~3�B�qnR�V$�G;Y���i�����'3L�! ���uG��@G�l������91YPa�T>���������^���
�%��D��v��PQ��U-����t�R���<M�0��������x�S��`x��1���$��1cr�D�s�K���{��J�|���i>��9�NH����M���0M�	TT
�c�<�n�dE<(!s��9���|�3��b�Gl�,��\<nxl�)��C��$,@D�����6�`o� 8�}0
��nN5�o�<�����������,�@7�Y��	�-�+*�X���
�X���1;���q��?WT):���!��+����~%���P��%`����DX�lL�\���Ky+M�F�a����^6�������}����������	in#x��tA��=^��+����kE���'t!}~������I��'1{@T�	�������k���T�P�A|� ��,D��=~����c�`X"M3?M>�4"��J�{�
��f?0ga�b�b��c���������p7��0k�)���LZk���G3��-��*��j��JX�d.���h�8(���)8-�&S�G
l.a!��8#8U���.j��8BR�%'Jf�/$�VE�;��:���j�
��X��� ����l�4��<�R�"��	���I�t����K�#�{�;M��v�TU&�.8q����&Y5��"�4+�"7�5�����&�D���'��~W�"�b�=�Er��R�\�.�5S��en����Q�P�3�d����gF�K�p���(�i���s�K����|q&~<���QzQ�V�e��5�1v$�ZZ���d���
O��E�u���!?��V���M�������E������gr
\v�"��&��{|�@��6P�7����n����[����Ab�=O�n��.G���6���n?���s�����N���Q��������3�����zFx� ~���a/H�;�f����!���LD�g������!,_���tWu'����& fV~�J��gGZ�#���g���.DTw<u�-d���,�������2;��l�bUt�
=�)u�UK�F'-,bu1e����;ciU�<�?��d�-�\,VSp�)��o�=�P�����d
M��*k'����D�k�}����������_`�f��\��fA4���|�(H��KwZa0�;���#,;��3�5�>���}h�4����p�DD�R	����3fXf�eF����xCX������O))��1�0��
;�sf�����Z������Y����'8�*��C�@X'��0/�g�V$uf�eX�1R��l&"���F8�����c��H�-���'V�	�1������T ��1Nk�����m�' ���UX���08�/�����'��L'B��h<v�[�$�:n� ��R*yT.���;�4��4m����,@�����l�i������AJ�|���*[��ZQ����k.��n�LD���4
}5�0�R!m���i'ji���$����t
�k����N"�����t
[�y�������+\�7�����n*�MSc����[�L��N�Sv��s���no�3Q���4�`��OzC
,���6��t�?�S�#�t��x<�`=�L [�������&����T�������`��X=�l�$�*�;ks��,m~����^6���{i%I�����`�bsIq$�������$��pi"������B��=�}�	`��$Gp_	|���k�'�����
m}�?Vbl�Y�V��J������?I��Z��c1�'&��%=�Ax��-��M@Y�����?�?�=�;����l6�w����G��Dug�d~���V�,$�����b4���j������,V#��;:���w���F������86$��&�U:�Z��l?������C�`�&�a���$����6���>j� `�'����d���J�>��}Q�!�c8�!�c
,��,���\1� ���'��K,�����FD� ��	�-'Qb�[����������J��oZ���:l1?*]���
%�����i��+Heg����^���t{&��cy�����voH����Gt	]�LTdp	�3`��r��JD~}^�?�7V�o(�KG|b����rp*.�T��f���
	�v��x��?�D���S]�v��S�V���M�����K3U/$�����zpPW"��m"�����X��!Slr�6nh_�*S�!�#p�R3*J<z*>�~��5O`C�M��fr����[Xw.7�}fg�� tE,�5��6�3��8�L.H��,��V��d���	_.d�����|�#�~(�r�o���@�`%"#��v�����������p8�j��?������iC�*�;����T�U���Zm&9:���0�II��K�6�J8b�w��o?�S�z��	��]������9�Yi<eClT������!*��X�Y,c��1[Z�!6w)jr����64��oy[q�_OHKl��x�b������	p]�����J�O������Tv���"����o>�5o���[kk�"[,��w}���:����b]��28�����sC��=��@���zW��"V��g��"��5��w�����H�lXRo��7�
�{V�b������EmG|��$�'_�<����D5i�k;��}=�mu��s-�:������c�ap�a�8!}E+��*%4��o����M@�{�
/<�jA�{��������~��J*hQ����q��I���Z����d���}o$�h��d���m=�������z#GN�0���mr��Q~���!HS�EI^a���d����{c���������|�t��g?�\��d|��v%!#�q7_O<�}��C��r����-K�a��$�"��>�BJ��c%^6	BMF%%P�E;�f�5,H�#���e�������":��`�)o�����������l]H�����pWt��h����;m%���L��&����l(�l�{ �<����h�}�LP��Z�]��Ly^���huc@��V|����l��U�|�����\�	��<��� $Z"��Qb���-mJ�J7$��~��+��_?_��b��oCNDF���5_����C)
4���B������xeA�e������9�#�-��d�)	��Y�	�~x<������*��5��Z a/��An����S�Z�
���M����1�
4)�}s3��J����Z@�jx��bC���?/d~A���|�uS��_�$�&��1�YQ����{S�)�3 �w��~�6�Hn"�s��L��h����4_�mKW2V������j��U7��T�P�/��xi����TQX�/f�V����(������w�)%�	��}Pe��V2����X�_�������w�jS��	@�;�Q�|����B��
n�c����l��:��!~VeU�������[�^�j�N�{#I����B�����-k��G�;�@G�{��v�^�{!����p!,��n�^���~3���1����h���x,�et�Kg���C
����E����k'�;�^W����X�T������7!�R�vz��-���%�"Zr"�5,h7{V�j��@W��`��+&��H��Ej�]o�6�h�Y��_Ab��aI�#���5c�:���J���H'����@����)-�PoS1$�#BOV��M�pE^q���^	z�a�����o�6���M;�F������-���_{>���a����& �0�R[��
6>�4��+<� ���������2,F�1�i�z�?_G�_,a5�����KC����d�bC�;8]��Q�@d[b���N�6?�����gcYQV����VW�����G��c?;�z�./�k��+�����+�eu������j�����!'Z`�+Hm�-��������z�l�aC	�1�"7[�K���!R�)���iF�{����3U���j��aOA���i6X:v	����2?�t�j�/�����C8�5L���1�gcxM-��n��h�3�F>��#'������
����oN@�\�l,�aC`<���zH����|�S����#�n4)b�^��](��=��yB#��6GB%XX�+\,�C~0+��x�	��`�+��R}>��J"7�lh�}<�c�.�S�|�*QW�����[Mo�����VE����9Iq���B<��,�o�
�V��!�l$���/e��|��Hu�m��G��������:8��4�����[���Q�(���AY^��������JuA}���p^�%�v0T��.��y�W2�����gr���R>6�C'��`w�Ax�Fk��[�I*
B��[�!�{)�i�6���SM�p������\4]t���|�!
���)��Ha��1]�I7�^�w��"�s?����Cl�b��������>|z��r�i2z��~��%gC�Ks�L����f���X:d��~
q�(���=�j��X�S��s�tQV�a�J&I	�r(�/O����1�����~J}xXt"(����!���?���Mq�F�V2�@tLqU�y����������*��q����lH|~�{�{V��D�#��t�^D%X���=#s7��� �:p���I?,4��e��J��gy5p��C��.��#���TR�����������F�;���������iF��]?2�������a���j0���������������j�Z�q����z��I�c��=�/���~��T�W�Z��V�k'c'�up*���a���	�l�Xr���O`_��~_n(�����=xjr.���������Zk]�gJT�	��g7���	>;R?�v>����V��U�$g��l���d������sQ����V�:��7��=��3�,\5��������u�7�[��O3��!8o�-X�����	�J�Z�dL���`��Yk\|���lN���OI���-��e��VU��R�����3$�6�O���?bZ����K�E�d6��N�I&"��c*v��o�@��t,�����Q&*�&�h��x&R"�8�$U*�h$��|�5@��h��>;�I'm,�����Y�����h�j��ah��?����6��Dd����kX��_�2����;gq����C���rU[h���(���I��z�����c}�(�x�*�Z��z�cA@�����R#%��
m"���0v����{Cy:�7���@����*h����6�����|�<w�7b�EZ�M�1+	�n���J��r}�DCp;J��������T/ Q���j��&��P	t�H�wP;M��vSOi�Y����
���{�<�4�~^v�4�%�|���
��Ba�y�-�Y�*������r�������Y�J{jh�������Z���������w&8�In��%��c�]��!��N�}	��6D��l���j=�m2��Z��������Z��������pz�Q5z^V����Pp�����G�+�
1k��]I�=&���daV�	��%V�����(��s����wH3�`�)<3�$��W����=��s�����n���J���v�P�^�noA�+t��-�5����c�������8fR?QS���d&Z�2��{j�/YB�_b�x�&������r�������0k���������o\_n�����
4
����n9�����G��f^To����	�{#I��/4�?����&�����m����S�3B��([h�	���n�l&j(/��3O��_�G �������jr���i����C������i���V�������&����u���|r����������I;mXX@wh�jg�k���be����������-�L�c7��bhX�-H[��b������j�oJ5_��O��6H��W��z�|�;�x3��5D%�tf������Q ������&m(U����N�����/�6��`�[��a��k�����<c��BPf�6T�yp$�#U�gG����4�'e4�a����5�+N4���V�5��Q��\�B���kC��`��8�P6�,��������Jh�i��M����J]v'��&���4x#��X������v��$����v>���q�0����k%z���y�#�C0M�3�Hq��#�#�����@�V�F3"��D(W�� G`��[���~��Y�Lf��Q�������:;W���\�[vN���|Zv��feB�J�@@o������/�?Z���j��u+C��d��|�c~�L4._�|��iU��L<���=�l@�L�)kR^_*>���4U�s^��"����n��=���G���z��������d�����������?�����-���_����L�|�!j:i\o?���C���1]?�|���qb����z�t������/�����X:�;^�P.;�\8�+�]�l���q����+'�9�hB]��V=t.@��8�iF*�|���9@�_���j%���,���R�Z�l$d,��'J;�[�V��PNQ�K��D�
|v�Z3�N�b����8j}�w����c
N	���/�`������3�������9�Q6$@���@��j�o2Y�����Vsg��L_:��B}����r������A������D���a�#QYOC��\��~'k��<8B�*�Kguw}0K�����[��J�Tu�&
��Nt�1E��~n��.�dC�lDd�"���3�]�)8@AT��z�[�9ERK���8Kz�Le�#S�����x��4����$N7�B.���do�mIvtE���@�a��,������+��}�	0 ��VT2B�w2�+�,��x��B.��{XohKo�ki7?@��"io��H�tE�=5�}2�o��~���>L��D������)���^�3�:��$��8���	]�gg���nC����&{�+�&�[�AG����dD�9V�����kc��)`���
�]e�����H'� nB��J�O����(Z�;�=�zJFtE���e��lF�_�����Z$C��q��b�2�km,���h��R��M������,��M����x�'^$s��hVo.'����4�j��2CVuA�+b2�(F��@hf��O�������������a]P�T�c$��r�%`����P���$[sR��Z��V,I��u"E�����a]��fU���2�3���2���L��?�_7EujBY��zc�2��M��Z����K>���'�I���k�e���m�o�\�����g����829���<�e��H���x,�l5�{���;]�ue������;]���d��J�v��o��
 ��Q�	tV�Lp�z_�\�G4��m��
��i����>0���g�4+S@?�E�I��,��#_��`P�'��E�?!��5���&��	r��U����<v��@s��]4�R�H�(Hw�W����C��:���f/����U����j�yh���ciP�d��� ?��-oV��M��)��4��[Ed��y1����f]}���v�d�%�(��t����zwYbk��G��T�!{�[���<����g|�?�w����z�G�G��-�*�S�u�\$=������f�i6����%1O"G�L>6!M���������V-���:�J(@����������3��^��������A��Q�H�u<�&�/��j�4DR���DQ7��
�������L�i(3��������@7V#��ue�~<���v��Hq����c����]�����h�!��o��2faT>�i ������\0�����*���`A����U���B�"�s�E�}L����/MH��mJ�)��$�����;��R1����N
w��?�l13AJ)��) �i�������s���4�	#;���_iG��OE��i�Dd`�f	��w����m��DKX>jnt����l D�N5���<�b��������X���M�_�0��Zc�"���l��0�T�j��������Y�A7�~6��|-��)u�E�H�������xOdH��#�����e�����(Id��3�$��g�)�G5�BK����4{CM��	��i�YC=�����}6"�{�����[������>�c
�1�K:>���������z��%�HO �����L����9�k��}6����6��f������"�Q!�uz%Y~����WXB�����i!xY������ka$��~�p��#���s�����@b��`W�����{�T:��F3�~D�j���$���b���l���f1Qk�3�����#lq���D�f��2S�]��Z��!=����W�[o{��xR�~�q��O���[��H����G�������6��v��*
��/���x�f}��F��	b2�Qs}���b��JD����n�N.�m��M8��	G��������;4��#�z��J&�rE�pU�������L�4�C��O��	W��{���E2����X�^���������
�
y[��DP��3�����Ba������Tg2�������t���JGdPT���I���Y���QX,\�a���"�9y6���c�Yx�A���{Y���0����6�Uk��1��t�����<�7��L��q�/�c&�Ql������`s�A����7��'���>K"��>9c�C�!�� ��%p�@��Oq���S�0&w3+���wF~��) &2���p�
����2����o.�D8�{!*�����7fT�����^�L�C�������u��R.vkMq������8�T�~M9|X���hS��N��,���&��)6`�UI�NH]R�Q%0������H~4!�H��v��8&d�N��Vk�R������3�����K'3kxr�6�
�:��z��HKg�a3�n���n�T'd~E���5��&��� ����aU:fL�F���!�0��{6�fsJTH����>��y�0!���:WC�U
��tw�MGW�CqF�����c�&8��-BV'	�����~\���!n���3�M��zpF����xa��=
D�6���P�����Q-�o�$��z4���bur`�2�KZ�������>�5�U���q�<GBBb�L (�����A4�|^����^�l�U�8y�\.K�R����c���Jy��I����$���hu����of�F��,
���!��e�����"*!�a��*���M�����X"E{K�f�.���������Wb$�n��mWvW]�X�m������0����^XT��F�������A�n�.��x� ^�o ��6��G�P{�c�sg2d[���ta���WN,�\|������m��|%�-4���\����or��]������-w�����.��5�q��5%����@xH ������c�gJ�,	�)�6%�kNp�)���"���	�1%8ZNp�)�>%��[.I�!A��$!������ONp?S�+�$�����s���rLp���,	�5��k�s�tb�~�A1\g�z���|���n~�b�.9����v������>�����9�f��	T�)��S�{N�_B��B�yH9��[N9����rHQ�w���|���Gk�����+�h}����c�����5�f	9��l� �{�A#�[���[*h��z��>k|��J����1K���m�H�o.��Y���h�V"����l0�5����n��"�x���b�SX���t��"���#7!E���[���#7!����r�z��O�
Hn1B�gIaMSX���������8�-���"��)�����>����g���������5z�on
������sj��_|��7�F������sh������7wF�������:3z�o��^��+��������92z�o~�^����&��c����xpc�zlK�������[������F7�����9�=�����nKtc<E�s�z�)�K��)���O����x��*.�������b�m�yV�����x����ln�>N]sI�h�e	�~rNg"?�	�t�6�K>*������:t}PB�������c�x!�'�'��'�/H$SBN��?}c��L���."�7Y�c�N���<�E�Z��3��W"xY�	J�B
��(B2�5�����l�E?������m�0�;�vB	@�8�"`����,e8�2y$G��m���k��Bq��oz������Km\�xH�L\>1%��A�	�������Wy@�v�����H,Uyp���V�&4�LL��>��������Y�c��7	�!O�&�%%�X�.����mB���O�"�`�|E�����xg�F���(3S��.D���`�����y4�-g�E�>�
��3��1�tM�
�I�O�
�?��dA0j�.���e�F
��Y_\�}*���nG����.J�j�	�����2���I����X�������`��Z�AdI��I�w!��@����[	�wf��z�!�H|A�)xVS*�,h��d����D�����,R7n�)���:��chC��dV�z����j7����jp9����A���Dy�3�c$D������t�n���wER�w�Q+�@�k����X����Y�Y� �QL���>��v"��cl�3��4���#�p���(7�:Z�ph�4�(�����q��w!C�p��h�pn������	=<^=@����,}�h���?8M��[����\x!�gEl,�@����"��L�N^����k4&������T��Z���X[9��@�8���0�ec���1���_��W>x���F���g�����DJ�����pJnA��q�DW��(�c��
�D8��@����.� *���m���i:�����+�H�$2I���T��Ee5�G����P���S�aP$n�D�}���SM]$��j���<��8��A �$�vB��dI|���v-"�q�Z���>h����6��;�7_��q��
_C����Rr&��?���{F��h�D����n@u��\;� kQ��;`\�d'W�A���9�"���Lj+b\7����o	�I��%F'o<nA�!��]?�����p�A���K8i���Y���!-z���Eok��O�����.�Oy��d�vJ��������n��F�)�b�����=qbq-�:��3@���>	�Qq�����!(
��"i��,�	����*zV4����t�'YNqA	�I�8��z���|Z�	ra���3������,
�L��2,�X1��0�Q�m�{a��$�0��K��ni��pq�I�TV�]��<��]�dpA��o�����)	Y�(�8p����S���DG���%������ �g����d���0<FvW��|~f����q��RI�wE�Em=xM�q3j�;��~ ���D�����$���M�	�Gq�Z�@5Sj�>�/S�K���0q��:ScA����#	��PA��nY$��;>=�����~��QjC*�2��r��f���[r��p�� ����ZLf�����"��������x����A����8��fM�EHt�u��XHy�6^��9�x��Q���.�xr�8tp�{�E2���]�!6�<,��-��P�e�_��E�����"k�h�Py�jA�J6���(^�CS���X��p"�d+�'�FD����������*J�s�p���f�%��/�t���N�A��HT�@h�+��IhCq��������b��;������e�8�{���v�+�B�a�f|������.��.e����G���7���*�}�RU��,%��4��e�c$�@;���zv#Vc�d��2����d\��$�0f&&��9H��4[��#-���1N���JJ ;�L�i���LH�b7d3*'��mz�T���xh�8�
�l�)��m�Bkyq��r�]�`�
$��g2���"��AE�����W�C��L�>�;7�M$t�+J4�p���l�#�u?�,��4Hld�Z�2���]�*Z�p�O�<��7E$_��L�X6�KN<���$22����q���5^C�����0���Q�
o��LJ��"*�kV4��`���_ab�6�9���U�D����w���'j�7!L��W�����F���D��F�e�5E���u����$
`7K);g���h�z:
�$u���N��z�����z����$*�������nZE�d����d�J +��!����eJ"��:g{���3*B���Q�c���$z@���Lx#��V����$���,�Hb�IVd��D�L%^8�s�e�l�~F�q�u�0�r�Bzc-7>V�<�3�
+Yn���B��=��D �� �WA������!�T���taBE����k~s]
q�����g��$�����4��y>���[�XgR��w
����d�|�*�6�p����N3"S��v��c �8D&!��(�(�D����x(�p��g�H�n*�������	RI����OR:�wE��*(Bdx���H>��<.|-9v��k���1��u:v�Uz&��D��h����v%�
3
J*�rNJ�^���a?���_�������p���/����_��/T��~S3�3
��]��F�^f��F�������.G���I�j�����k��kpN5���D��	�����i_P�4�n��	��.�����wF��d�Q@��/���-X�������D�\�`�y8���waQ`�g����hD���0C�>�!c`�l;���}"���no��l��wF"��)c�@��@N\Q�.J&�k�}A����� ���P���eyf���|�I;:r*����<�������wa�S@'Jm��
>���q�����b<�kk�.�+J4�N��P�sV���D�>���0����U���k��vp
�]}zA�'5�]	0���h������-hl�b��3U}����wE�����7$�����sA%�$�~������<���gc�G3s�},	��<}��1�p�k�l%���13I��V]��`��8��L�����Q�3�4V�^<�hs~14������!�G2�QV��}��>�V	1����W�Y�uY][3@��<��]s��q�����3�k���
e��~CN�or�L����q���E}-�vF0T���[w���u�J��`=��e���U��Ga��!�-	y!������
1��|8R@
�]�,�r�:n�|ST%�H`��72	+�YH����E��SRf�d,����4
Q��������=�!��(������to��\�'f��^s"z�"����VL(��8��@<��fL���M�I�����l���n�X�$��3I�Gu}�b�;n&@���I���?��X�N����zL;*��P������sz��F��Q��G��o����F�]��������d�	duv|Y�~���	t��}��FP�^�����������&�������E�<������
������p�����_�o�����Z5*����K�YQ�7�4�����9���h1�D�Uf4d�4;��I7��GQq�]x�`�
����������"��t:�4n$�@�o[�9����7UF��3�]�	`|�[*:m�sb����de@xI�C	>�D��?Q��O��D��k�m�r33��z(UhU���{7���Wf4�
�_�@�+3K@�+�\���h�HZ��>iN��2�!��	��P�V2������{+3*�Ho���v�[��d���yO�{&hnN)��!_r�h�K^:���w
�w���3�G�f4�+Y�'O��+�w-L����9x7����'rwWs��e���M�d���8-��v�w3��������T}oFpo<�z���H���
�((�droFeS!��P��$0D�
���-�%�A�|_>�r�USp��^
��M(������z�[��Vk��	����m(0���DI�3����+��q�a��0�7��Sw�Q�����<��Md��{�u��	�{�����G�������G��o������:/}�����!�	Q��*��X}O�!Q$�3:k�z:>�A����2�7�/lif����`.w��v0WL���\1��s��^��m�?B���}�ne.��K�ba�W&D�����q�I�q���N8|V8�K�u�,�x�3* 5�g��7��������fex�y���<���V.Lr�{��F��R�Q�7��w�2�"��
R'ta�3����"��':#���d(�����������7P�feBn�+L��wf�AC��^\pIVpx����e��}��`���6{����ln�s���^�������+��n_��|KD�i������5���$;��`��42���+i�����y����
��Dvc�����}A�a��zI�	��}��>Z�*�,d�C��-l�}e(�+��B�5����(���������~�����8�.�{5[�2Q_P���9z*�������2��+�V�~�,n�gc����+3$��`����p�Vj��Y�81����0��a]f�l�}eBp\Q"���:?T�K�
z��f���?�d'6{�����}�|��C���' )��{����t�H�k��x(Q�g�1��,��18!��DMH����,@��G�)hb�<3p���_c��K[u�686@��8��ih�_*D�]Zq:�v_bB�'��	[ev?f&t-�%�?��x���c�6R��Aw|z�k��D��(�����D�%�Q���,�dJ����F�WT�I�n��b�}������!�2V`������@B�����.����|�Z�����1���������C���6�[���]���4VF`It
��-�����hCF�Z�k4�CV8�3��l"59����V�Jl*����%&����'�������H���$�u���V��	`C9V2�,��G�/f1#$�� �y�Y�4"��G��F�i��<��V*A"�3�pV0'���:��`��	�w�Y�((}Z����,��1��B�M��Xl��E�0���%���V�E �y�%�1�W&�2L���]���JJ����W>���q���H�ND�&*�P�2J����G�;��]V��������G*�"�l7�����\u{�����(�� [�y=z_D0	�;���&����J�[7���m�����������j��M��ZJD
�}��>U�	X���}xcM�B���PW]
����
���&aNi���_�����9�0!�cU~��s��g$������������G$b/�Y��G��,�m��s�|�v�o���*:1�X$�gy�U�(��������"�x��K���,�������+=X�R��dw�H,&�Tef\�S�b��e$�,���A�R�,ZYY�z���"�Y����P�p�&79-����y2Z\#����ye���"'$#�������:Q����%U�(��G����Z&fB�C?GW%����>%��*\b��-,��x�Az�KE�������q��+���u��Nv��zQ�O��m^��������X2�����L5����%T}�Y���P"�����%jeB�3w����}���Y��=�=���
�.���6�x�5S�������v>��&�V4[&�fM���a��
1�r�1c�s��&3���Qn�	���j�]!���;kK���s��.x"����eks����E�C[���I�0!hI8��%��EG��`����zn������Hcr�� ����y�G�N]~�� 3$w���8�E�������X�q]�y0*7��N(�C��`��'���L��Q��/�;%�%O��A:65������N����
P���O�ho��>}F��E{�T���={�/�4���I���w�S�3F��LF|�x�'���-hgD;��O��6Z��Bd/���:����if ����Y�@���e��F�y�������
���Y�|�M����B�|55:#�#������Pa/�=1;E�Q[(������	�b��4F��T����hh�6�:yx��B1��k8����~�\��@��������,���?�����+���6�sl��]YR+��t���]���>���4��io���t������Z9�����S,��sR�<�(�V
�a����&�3�C�[6�V`��g��L7v��2* �@=OV\]�v�8����0���H�����L\np�1W@����@����n���o��@&DYs����:��0!�b5D���wS���`0�<����f�����	���v��j�+�4=Y�'�#�8�fA���e�_$������Bpl���8�+�%��d$��q����;)��k�@@Z�g������
r���'�t��$e"Z4�f[�=���:WU�����S��]�����]e�`��q�x����LD��5s�C3���6�� 9K�0�/����Y������;(��1z�k�$?���8��P�/��(<��8�Uz�E��V~��O�9��n�I��H��~�
��=��d����tw���G�>�$gs�'x�����5:T
��	;O�	j�����<y�$
��VGx
�	6�d$uOvw?28Ar���b7�q9BJ%�a]���(��]�����>�j��p���n*�$�~��c�����T��$�����0GN����q�
PqV��4��(�.����YE7�������./Mc�����`�>������O���M������h9Om�&���2vE�Ye?��t5����%��|17�j�	R�����N%}�S�T'T�/(Y�{"�U'8����E�Q���S�_�1����$���H�d���2V.�[g�]e��NV�d}��r�G�N]���B�r�����>�l����um���L(�{�&vr�M�S�G�w|�p�K��,8������:>�n��3���h�G�uc�@�����I����=���:Y�y���;+0����Xk<l����b�G,��=bOs
�
r�4��D����
�/�0�NOj����""��g�G^c��e��j�@���s'V���H�8hpL��~����	t{�m.���:�n�(x���a��n���'j� ���-���=T�����J�U������O���:e� tD���3���h%��IYj'V������v���	&T��#��S9�����I��\���MT����*��<N�I]���o���U$`$3M5�z"���{c�W���8	�,_�K���%)���+a������I����M��
��Hs����d���YRE����%�
�U�#�?�A�zd!W��L;=�����{m��f����dn�r�M <��/����2�t��R������x�����X$7�a��������
����p�u
z�
H;�M�e*�.�I�������vx��y�R�E�m����e����@	���MI��ZY$���	h����,�T������ �5�f�T���vB3��&?����D��\
Rrq�
���+��I�)���M����@gB���`u����wQFwwC�����jbB�+"����}2�����Xl$Mu����ew<���yl0��"�d��mx�q1j���S>����N�w����%��fse-�R��dp�<���Z��'�*�l����{����}d�V��_�<3!hh/�Sg��l���^���&�7c�$�<3Xx2�3�D�����y� H�������1vSK�9�C��r����-�.7��f��,�	�-sB��,��`�'�Y���-����;��3�f�'����A7���1�����{�:������R��lj�4O(5����.�0���P�����'!�q0�`�0�=���/>���`{l@<c>�		�9�`��Y�`�uj�
sc�c7�\��s�<|,QKf�Y�F�<1��e�<��M�yf(5��k�d��Dc2;Drl�eK����n�9y��}F�
#�E�3u�O�yf��;��s�c��9���4����*/�#�����b?p0[�11��~�@6=1�	&"�`ni6|�����	�{6fN�X)�YX��O��������G8fi�$�A�O&#jY����D	�D��H��eB�=���`���g�Q���~`�c���]9)0�K�>ev�9��Y�
��������>����������
�5YP���Q<�L�>kt�$
����4QR��2�>&��E��,���G>7�Dt�>7srm��{{���QwV�.���R'D���s6v��{R��T��y�ee2������M���R�
MJ�,(uF���k�����E{��\	N�f�ns��!bJ8�s�]y�I�J?��9�����;��<Qo������5�%h>-�g)J�����+����]a)�;���"�Kv�L��<>�f~wD�>������m��yW���s p�E���?Ez �t���rfQgv��7�Qp������(�}T���� �tuf�C�,�k��X��I�w�?�C�yY������6����u�e�3sZr)-�:��&�+jd�@������J��Si*�q�������t�L551t�)K���3������Vj�H*���86M�����������6�
?1u�� ��K=F+����\�z����G��((���_��<9�^������i�������e9y�`se�c�d���gv����}�
z�;����������]�s�_>��Yr��h��G��N��L��H����y�]��"���>#��hM�6�v>�������^����9��h��G�Y�|'p��1c��YY�*������?��&Eq�N,����J�H�]5��VnT���I�N5����Y�x��ax��1��z�������@��>Pp�w���Fd��:��� D~e���Xq(E� ���|Bj|a �L��&�}�/9������C�`��z��]{/�����s(
s2���x���)�^�V������'��M�A?}��m�Au���0%%���	Y}(x�TAv[�1�H*���;T�5�c��@t"l�HB������?���������j�~�������|��.���bw[�V
��k[7�`���������H��������3�c������w��7M��v�w[���ik6g��(1����/�h�;�'�p $��������'�������w=���
"�h���������
H�P��O�P�Hv���.'�����^����6Wuzb���5�y�I��}�.�u���Aw�jT�X�.����O�����d��H_�71%��\�o�����wBw��C/�(I�}HT������~�����������|��E�8��z�E{b�s�.�?+
����k�~(��B�s�~B7s���)=Os}�_��������=Mqr�(�=w[\e��4ef���7.��^�����&���h���s�X��U;T�]	��{��v-*��f��g:�����s�&����.��V��|B�(��X}e=��v�N���}]��9����s
$h��.zV��
�j�����^ej���S�S|���rJ!�M�"�ueR@N)�BH!�I��#����w~�����������z�/���x]_���
�:_@�������Z���_G,^�N���5d%���X����������<���z��]�<�!��=�����S�]S��5i)��= ��H���b����kX��aS�����~�����HBI�M0���!�z����g����_���������y����g���sv�$��~�<u������s,�
���E��=@��L�,[�NR'��������������#�����q�2A�p��#}��B��%2������A��!�����q����u�5L����<�@�	E#k��9�v�I~�<,���M�gX���C�A�Vp��o���v�J���q�-:p��s���3�����6l���&2t����������Gw���(S`a���3|����������8��d��]�r�������
���CR�$#^�����B��+���[�c���g2d9��E����2�$r������r���$���I�@K��
��cB�r��t6h���A�f��*.h��y�����)�Z;��jJ������t.\��G�~����8"�7 �2�$Kx��T���3�{�b�(*�>����`�H��\w���7��X_}��c����Q���}J�&��#�����s����[�f��<}x�k?�`�3�!�==[��@?���z�2[��0�$�I��\4���N��{�����5��y�ze1k��D�����D��A	�7dm����X�_�Cx�������� ym�{E����GO'XP�
��Fd������yhaWdy�M+�X�^2iZ0|�
�Qm��
'��3
26���=�4{W�e!����5��h5����?2����rC�yfR,8p�A�l)'5���9#~�o��>�N3 g�<��z���c�:�C�<	5u��g"*9q��}N�G���'�>��<Dx.��o���D.����a'�<�yT��Y�t����} �@eWD-N^e!Q������9�-��5�YB�hg�O=
���>VV������g2dm���A��A�P��r\��;F������%s5�f���J �?��I��H���l�<|K=���������a|�� 
��Xy:�&��(�*B�e�VaB�wLBPV�������g�J,$9H�a�-�8��"��,��@x'��u[�O9��Z�"jn_f7�TR�c�i�N�N&��iw������s�3	_����-�;#T�����BD�s�h��\#��z �C��5��L�>���*��4�!dq<O=,��82>���*����l�YG�Y���>LC��S����s�2��yB��m��V�i
�}���("�a���(�������.t�
s��g�2������)bF&��r.��U�ks�/'�$�!�W����3:��peH��N����L���H*�b�G]-h�%��X��	�����k��1O�|-�*B�^��C��;��'m����|Z0�$6�7�9������V��L��}�1�w����_$���K6X��m�S�3	�%��Y/��$?��L��n^���r
�$�]N�TC2�lPb,l���0��-*��
�kE�p1Z�)�deC�!���}f3��zA����q��M����@=�V3P�5t`�}�Q�E���N4����*�-����

�tz�
gDl8g����
�ui���u�
�v������	���'I��|Y��������Z��K{�Zzi����g�G���wu�XTf$������FA�H'Ta�r�����{��5�h�SwEt
#�������Q�|���������;_['2Q����ub��t�`""�V����a;�n
�C4��&���#��
������w�=Qg�������������fn�a ���yJSS�����z4�!�{K�p/��il*aF	H�y
��������C�����m#:�0����%����&J�i�!�k1����:�	��nN����.�X�6|	,I���Du)���)��[HU����Mxx�ElY��������}�'L�l�v=���K:��(�C��o��&g�f4c�Q-��
h�D����$���Z�K0�8+��f��]6�LE����I3��������K�Q�f4~�Ac�m��M���kq$��/����������	���f���Z�L�|d+f�����Ou���q7�N���_����������P�;����QkSR���;"�h_�����ln����JS��m#Hl���6;��b�n�b�f?���C������h{����Y5��3�4����ox���Q(mj�'4�9c�/[���.��z&C�3��e���j�	��n��v`�n��uYY�`_�
23;#���Z_���;����]��C���!�C��v���YGjgA���$ZD���M�RS�jE7:aa���*S&�<�1�����&5���$�\LVS:p�)�5�a�S@�����$��4K��tb")���.U�sl�dt��U�d���:m�9�
������S�wH��swhf0��	rG�zbX�v�N�V&���x����aZO��B��n���B )����D]7?���c�e}A���<|_�	�R
p����}6���IP#���������~~[=�]���9��;t�er�������2��2,�x� ,L�D�l�r2��T_����x�I��D��[4k��<��n-��@$��'Nko�?1����C�?GcV������<���L'bl��2���������|N����bU��I�I�
~��-����3�!�t��e0���H��(&���:���(�t�5�5f�07.�!�����jL���B�M�l�m4��C|4���c�I�����y����T*��4]�.�<Pq��][�����pQ�t��$�X�`�D�u
oY�&�m�����ND�C{�l��Q���	���Sm���?X��������[��@�F�m����.$$�x����p�cy��������D��";����}�%�����2�I������3X������� ~�"�Dm�.e0D<sT�������ELh���4��CoYYtAw|nc��A!�����9�N��H�4�xJ*��-Zp-��7JQ_o,�|�'
�zp�g}�rF	�#k�P�u�?��-�����!��<0���xp��LDw�������z������bs���������oj�������6)���z�������w3�������6A��F���Hd���Q��wd��@�YH�5l_`��$���O���<|�}�~�cY_>�'R�9��K����ugwpF�#<i`�o�@��B�l��ff�f��h|M_b�$���
�<
00��lG�,d������W%�����m>?:����
`G}�����@*+�����e�lT�3�#b�.�Q���\�
p��;���=9��o8&m����������G���J���d�?>��M�BV�9.fg�
���z�d����7E2���S�l��|��7��,*��B�4����6�c����5�/���:�!?�Md�y����\�5���d*6Xx&���F.������=>�|��%GO`FT�,{v�������L�e��AfDM�	�3�FV4H9u�h&'$��F�w�Tq�J����l
�63��~��$��Z���2���>0=][3v�f$J��0b$Z�7D+L��+�.c�Y�����_�n�u��������\<s~��$���O����.h����x�/?*Y9�������LHX�Y�U8,L����aC��<�o�$:�<��p��"C�����tZP�L��5�q����Z��g;b&C��=9�3!������	1M�c����-ca�^�x�Wd��n��H
#�*]|���VJ�2'2k�$7��M
N��$��a��H6��58��$��-99�e���M@���@Z�r�� ���A'$@���w�����VE��2�Q#��@U{�<�taB�;����8$S���sz���\������X���\�	���M�>Ru��_�����(��j,(k�b-,������S�g�+5�W���+�7�	l:���%������:5�]���$$6����}g)�B'@Csl����T��CbB��;���9��:�>���VKi��m�Ty(�K�P�������R�WQ���n�s�����i=8��5T����/�Sc89�4�/i:��+>��$�s���:�u��f���_*��T�z�&�#8N�)����2%�����iX��e,yZ�P�� ��	9����"�tP1���Uo<}���Oi�?�i�@��i��Mn�����j�8�V�����}��X*T�K?7��>z,�!|��0�>I�x1���,X�Z/�U�~�5��*���g D#��(�
��wG�Y�����q�o���MwTl�P�Q���� K����	��P7�s�r�g����\�����y���x���.?���3)�r�!"n�u���I	Hf�a�D�?�c������(�\�4��*��� ���~f�����H ���F����F|�?	�1q5���� ����$-�	%0L�[���z�`&I��t��eu�;��������S~�3 ���L>��e���nm��[F���7I��KC���e���]��������m,����3��^�S
�K�cl&������P�g�Y��|��1�KKm�5)�$����S��U��f���b�vB	@�oDB����
1�~\���!E�YJ��i��<�"��P����uluN���B����������'D�['\ZS>�����Nd������	@Z�����v�����B!ov����c�J�Kf�D�v���vH�q�{���?5Y�kQ����42��y������i��;�JN�{��9Oo�"��Xv����6
J�b�*1zc���P����)&xW$ja"�B���6�H�i��_����m���bH��j�Y�2�03�C��������#Yb-���A�#�d����*|����l����������3�cq�@��8/7�LsZ�2��W��O:������XP��
�����Y���@��=''��9�g6���R<�rc`^9�]�	
Gr��X�I�VoY��4��p�������iP�q���`���oA`��s���a9��������@��3�bJxk��}U}���Q��Y���������`M�f�}�.�_���c��EF$�z�DP=5������K�
��	 K"�r�p������
��V�2B��t���� xegamW6}�L��I�0wl ���2?�h��|7�]�{� �J[sw�O�./r����o�J�*���h�9�
E@�����3B3���.0�	[H>eAQ��)]�:xW$���U����lgO�3����<��c����3��],���13�3/��e,���By�R�J �%-(�K?��(�N1�	��w���ro5����`����U��vr��
�a~����������o72���a� J-"5��wn|���2hzy(I������`���Ep���s/r��@��L/�!�9���`�J5A|�������8���p�e`�0x�L�|i�Y�#/���������;�g�N���V��$�3	��Y!�Y�c���D��g�>UeN��LH�����&�=�K#�q�a01T4�#)uU&�v	T����;�?��|n4������X�
'�����|2d4���'x��$��h�/����&9"������'��9\	e��/1w�r�)XB���1���_��S��st�(7�i�v%�������=*xJ�~9��1t
Ym\"��f��C p�!����M1Y+F�����O���<�h�nP1f���H�%�8p��B>?t�-���-��P���Qq����s���:�
�j��6�x7�`�7��i���D�Y���*8���	% ����Y�C�*!bZ������o�8�,D���gp��)$eJ�?���i��H��P����m��P
S��!��L8|e����&��P6Vs�����z�q�bb�z:�Z�����Jl��.~��c��;�K�v����J����=`+�'+>�L;y���!�V�0tA��W�v;���ivW��d2a�P,����P����^y�x�(|�Q��+?�2>�S?��<�� G�lm��x��m�nsQ����V�u�a�U3l�,!j$��������]��l�4IKm���	�y���l)�0#�P(�#�A��AYX�0�]l(,"�j�{Y�"�<��>����,���3P��t�RG�7R
@�S!���g2��L�,���,���j��32�>��0�
T��D��������������GBa&2
]��q��
��h��f���|l�o-���"�t�
�Y����Ld�����C�<��J,&�������^g2d������K�6~%�!����;gq�����3D�r���Ym���r���X<b����|������)��b�w3�3J@Fiu��U��*���vC��
'���T/����t�>���n���|�`�ia:a���D��Xq��oD����(��N�d��&�2�Xb>�>�`����p������w*/�cc�hq��P	t����m��IEeW���F���\����(�>@�*K/d���eeACq�cM]�����(-Wv	`���(��u��[��Fu?���w"�s��8-B2/���.HJA>���k�b������{i�u��Q i����Vd3"���������0n���2Z�H���_�I6!y�����bRN��*��eF�[���������T�"�����f3	V�����j6Y��/[�����|&M��6��&~�),P��g��$�.�T�W�l�2����n���J�]��`(h5����U8	�}Zr��\9�-��X�G`�':{���N>LD2� ����R�����H�D�����1�*�ly�Z��X]������������o\;7�x�z�=���&�.w>�����P��f\T/����	��� �_h:\��5�T��F?���562���yFha��� lZ�e0���l*�g8<U�~��|
����mj}��q�/������[mM���7GU�4w���k<�i%% ��R%����@�S'�8����D#+�
�?:, ������j�_13Gbt�������Pq&��D����M�f$5KZ��9E�����`�
%_��"[�G�U�����������!*�R"���n�+i-C ���z��M��f
�CA(Nf����{��]d�[��n��k���H�'k	�UaP�q�QT�}:8�'���`�6������"����������E�c�V9�H�P���^�A]�B������`��b5� �������m�-8��}F�l���BS�����{�:oD��M=;��k�%y�����K�����Q��D���	=z�1���z�53&�#;c��j���+q�:-��Dn~'����/F��K%&�����|�u�$�:%���U��dS�bW�s��pUoY�;���=�SlfV�UB��%�T�������!N-���d�#cF��A�co��2�q)���.��@)*]B��~Iyg�(�$������I��%a�k�/�\qp�������^���,^3�,������4`s���������\����g�g���J�~��������������H���	�rJq<9��L)���) �{�)v�{mA�G�ZiD7�=�gE`�������\��LB4��1��.���t�5)�oC���D2d}���q�<��s���Y�MjoX�=d,��Io;7F�2��5�h!�+
������m��6��DVD,|�"#
����2��br�d2�����YY@y���L,�����	�����vf �����D��!�a����nx���G�m��������|Zh��LL_���Qy��~D��;J��k�&/��#Mf4@���
J�kI����\����k��p=b��zG}���KpFR�Q�j1'��b"|6�c<��E��|%���Zw�H?���B$������Y�����J�M���(&
u13WU�����'m��e5o��q���a���R�,i;`#�,r�.��	�������Dk:���bM/���E@J��i�)�)Ds:!	`���� �5��e��r������Kzi�TSJ�>��	���`��Y���t"��\Z�;����|�`LM
�6'QKp���G��H���t(�>��tF#����X��J����1mP�`C����r�D,��G[���d�m�Q�e�B���\XL��[�gM(�4���[�L$kg-���8{%Z�	
 �
n&Yr��Q��Iy��9�n0���JO��i��Y���YG`M��$c*(��v��E[����m�����5�tRnD'�~��Cv��N(��\����
0���KN�E�:!�.��#Y��H8���E�H��?������E=�� X�	�}�M�	���@�*q���*��U
��6k\�YM� <���=���j����5�7�E����r�j�@�:�
��3��]������"Nj���@��^�Y�P�hV'$���-$�E��EY�q|g��%�U����dGsQ����`Xg4zg�Qe�����0�gU���*P	v�D�6��'��
Fu"C��=-VD�;�d��3�K{�jP;N�w�t|��&��]�C�L�,k��=m�	v�:!
����W���D��SSQ�����=2�����_��'������;K�zV���f�4��:�8�1	�}d�u5��F�%U� ������]�x,�)���!�:a'�1�QAp�I&I����O�X�4�{&C���,	�%�Y�[o��,>��mU�P������4�����H��?&�{�����i���A�y�7El�T<��!�T7H��_O����@OPQ���!e��q�K����r/"S�7�
1R�������v����??�lge���$���)�� ���bF#6_�4�b"�G�..S)���o���������_H���/H^���I�F2'b�P?�9U�.q��o�Uce"C�::$@����$���xM��ya��`g,W&�<�5e�m��$���%�k�*IxWBlg������2#	^��$��_�.E�� #a|����R����Pe5�����Xu��j��_�����3�����`^�HX^�QG�6��12� ��'����H����DbQ{GU�c�$�mw"7MhD1��,���T��I���rW#�7�>�����XKH�����qp������J�o����b����!���#�k�B�u]��U;�����0[�
���q����r:��i��H�������2������`b){��������2����%���;�Q^=m���ja��>!���Xo��+�Y�����#�LR�Q����q�>1������y���{n��ev4�*��NaEt&�a��CG/4�SFE����]]��F��$XC�������x"�d�n<U����@%��Xs��������DN�������}�0;����������;Jx�#�V??���w���)�ut���
P����8��[�b_��YP/��}BG
��07��������MGNa&��'�@���BOL����"��L�D�Q�Iu�)���ragnT�]'�6
�sh���g�I���3�J�HPJ:���������)��~�N����K���m!M�D�l����E��BX@�~<����r����i��/'y���7s���M�l�U���n�8��i� �@�!D��H�:�(Zu)�����1(���c�I�s�wF]�s�de� ='�A��e�8
��)l����:����&����w!�e2J��"#�H>�6������U�^'$A�����"��g�d�����:�o��5M}/�G��]r�o�h�+�KbH�Y�??y��P����b7����=�����j����������%�X2�%���Jl����;���r�9��'B2��}���s�Fz��>z;�JN�������$_f|������4�� p��lA'�1�	�_w���d�p8���ny�,���C�u���������:�e����6���:��`��e�nFRPi�aw���W�::%����?!�#t��,������g��(���~@�{L�+��b-8	����t]���t�7=D=�G�fd�����k�g!IF1�>N?tBC�K7Bx��ET�-�)�d�25O�����K�t�������.�u�[�O��q��)E	� �B�L���,L���1���Q��B$#�ee��}�������D�vxOY�co����d��M�����As2�E�A<��n��ef���o �n�E���M�lUb��	!�4����w)�/p���(��c��2*Bt���T���7�(#j��q6WC!|��(����-�@^g%'�n�'���h\��	9O5C'�Y��L�m�� ���.z�#�Y��L	v�;��g�3y�&�����+�
�_���.���m�	��.�P����N��H@��& {���	�S
]��tBz�/�L���t����F3C�u��^�}�_t�����Me�A�
�!��'�<�L$���ds��1]�EbB����������d�${W�mV����0+�2
�i����	�6I�!\Z)�`gU��zep��L�I��]������N
�!Kw&bC�2�5��
���F�����r���"�����ls
D��P�b��u�A�$_�r�K\����P��1�gW&�<� �T�gbBl\��"�c���r+������u+)��C��{�����������6�t��I��p��e�������Q�0��sU�=*(���4 8�f63C|5]Q���"�W3�Df+�t�:���`@l&���=�������k#:>y[�7',i.��p���2ku�d~����r���V���7Oa)+QE�4"g�^���L�o�oz�m)
MaEp��	)���:4`B��J&���v�4������v���I1�9��)�&��Z��oCg#&,t�>)!� �a�_�m*�2�U�)Y��m���=f��a�t�����}&"{��g#^��/�],��>$|�??+��?���A�	�p"�m���k
��m����8#\�*�.*(��k��a�f��%L������������.1!���P���\�� tjwi9��E�q�"%"s9��E���U�%����
���$Pjj/.m�3��l:nd�mM�a���}���F�����^XW��R�C��m�`�N��>,O�H����Vt��OL�Y�>��������*���n��[��C]����6����U
9�-oW���M;���!�n��[O�����K����t�MQ�W�Y�yQ
:�W�ww��]&����db����?�q�����n�Jj����$&��;����k��ek|��`�������
��?Z�%�>e�=z�����������j��8���|�������/���z���J�������'_~����/�/o���/�5]>k�<�*�E��#]>�|y������J
�_n=�Z�����/?���N�E��Tj���/����/�BmG*T�����������!�J�*$���J�
��V)<�L1\G������7&\��_{�1\���s����}�����C��Tt����}��~_�:�p�o�:D�~��s����c�����}X���Ag�.�����%��j��k�5������W22��=����6�u�S�R��R�Y���u��uG��%w�H$�>^.����\���|}�����\���_.��O������_.��[��M���_.��f�/�u�����������-��[�d�����d���3_7��������';���r}����u���	��M��}�6�^v1��y��h��e�MZ���6�\v/��q��h��e��M��}�6�Zv-��i��h��e��MZ���6�Xv+��a��h�~e��M��}�6�Vv)��Y��h�^E���O���9v5[s(�j� ������p�����
�m�;~=g����s��9��p�����T��9�����A�C�����]?r��9�G��1��[��1�s�8��O"2J9�[AU��'���Z_EF�Dq��Y�LfPD����A&�G���2��Y�0���2]w&��"��c�0�Lq�5LJj�O�g�d<�R���S`z1�%��z��,g���� S�qd��25�C��IFxB)�@������,qS����L�2��Z5k�������r\T�6lE�j�D�,����"�I�C���Y�l�>#'2�%����+=b(S&���G�D=|w&bg���!C�e/Q�cH��x����;�C���T���������B���_{��e�y�8��8:8o%��a�&��|��Q�n{V�99��q��k	���	�D����`���k&6Aq���P,��y��~�)Y�p�,N��#�.�C3q����Q���K�'�d�g�qo�L�[u��:�$B��<��#�*7��>�N��&m���.���$��ZiP2bt@�Ms�st'����0�D$W�V�aE�Q_bL0������$�,�8p�B��4DF��Yl��^M]�;v�J3��f��'�6*��c�g�8UA@q�pr������p2�,^�\(iv��#S��������yI�&X��8�Y��`�VC���iXC4+R]~r`1E�Kc�v�][;�,���I�"�J�����(2�|u�����U"7�@��cH����.Cl���G���U;�L;�8bpK�Xq��Ju������y��3���\ge�Km���e=�n��>X/����(�b��(����\w�
�����'�;���8&���D�P�����D�uU!�����C�������!38x��+f����z'�[�R����m:3��G��J���X�����C>q\����l�e,4���:��frh���E�DQ����
"M��@�:�~u="��)A����*��L/��{�*���IF���}L3I�T��:���<�J������D==T�E]�;��T<W��`��s-�:��%��6Vj+�O*�{��q�v�X=9m�����k����e������h.@���X&���.���"�Xn
��k�IhT�3��/Z��*KC-�T=������!�P����] �h)d��i1fb_�e������Hd>a�?����r��s&���x�.��A�2�\��!���	���Q��+d!��?�1��'��*3�'Dh�X�U��<��E�L��B"��4���-O8��E�7Vk�u��Ae�����6h��FQ[|�?R��5:J q�?A�����w�V��'���An��u~q�����dF��X�
*��v�r�F�]zL�L�U�|�,�a����O�'�s�g��A�k
d<��Or�Ghk��(E�q����q���q'�LD=;���q�	�zDr��� �k�Uc$�Y�!�W$��� i#�� }�)9�Y����Nw�<j���m����;��/��0����$��������
^��D��(k.����y^�Z�1�j�B��Lb�U8Mx���UQz�"�Z{-��1�&���N����D����1�@��q�WL�
3���N@���`2�|&I��o/(�[��?*7���W�%��e�]'��D��-�=�����R$rp��5��yU�����w�|��sT�����)p��<���SO|N�` �v]r���=&kc�@��)zA����HE�4H��� wn�I�e����6g�p)���R�+��<�R�WI�$��Q�iV�������!��v�
C8�6�N�q����(0qtTQk+���
f������>�;�T�.�3�#�bi��9d�\D����o��P��R�$|D�K`�~�1��'��uZ����"��z�*�0P��(J���������
1����
�]��N���x��<��?�L�<D�����13������Y��j��@4�)^:����D�0dvS�G�x��B��3����������PT-�uK��`�������\��)@\>tfpD���;@���!��e�D�w!��Q���y '�M{��r��98�� NE����p"m���O�VC,f�|�u��#'��!���N���� 'd��/���w���	���dI������z[A����#H�0��0�FeFwQ��ij_��D]4+Hc������U�\��\�8�$U���6s�3��1�C��(�&�|<��jc5ao,�bc��s[w���D�`GK#T}�4r���6�X.L�������\��?q4��gR������x����B��� �X�"�V6N�4�%�69�ydA��dP��Y��I��������������s�{����
)@\����a��8���/�,Y���b6)V�]�8|�I�3��,����Pn���4�
�������~g��?�����u��	���C�n�/�������&�=�C��;����D"�.^>��!#�cI�}�i����X%�[t2^��Wz�$����//���fp��|�O3�m��N�?����;����������Z�D}��.�=�MLF$�0��x����a	�/�(X��/�2dL_�t�G�H���E��m7#��b�t/;
J\�$������-�����=`,������������n��jm����.(�������zj����zqY���
pQ3����9^P�7���"��V���d$2��i�k
����2�if�$�T0&Y�w7���$W�����a^�7WW��{��6�d�us�<>�?�)~5���O*���
�����W�w[=�!#����A�-�n���"�J}�+��2�"���U���n�4����n������^�|���;���`��(�b���n��H�.�������[��0s�$�����������|���)_>M��H�/�\tZ�C5� D���M���'�wAI_����+�g5��k�j�]�aC'Tkw�h���uqee	�K���3���*:��L��;`�+����?v!#�o}����-�$"5i�XK��*=����s�1f7s�>��F�FOs�p�����x����)�$��5����oD�� Gg�q�l�=cF`-����A���p��4�12xN@����'@��>�V	1�59��_A��4]5,��}���K�4���J��5mT�0�1a���h�8n�,6����0W`���e�
��v�u�x��'�){��Yp��e
�u�Z S$�%!/;�a��bbA�p���������L���w�(�U	CS	<<���1����$_�6���������X�9���o��(Dm�������KCd�Qf,K�M����{&��>������D��E���Z1��g�O,BY=�W4c��Om������f6oBA��s�J��$���D���_�|��(��0){����K�����w���g�����u�;v��HHH�	������� �\>��y����-[��K�,�)���C���/�fa���F}`�'[��B��5��6�AM!�Q���~9������D�l�+�l���'�����TV�J���Bm������u\Y��q�P�AY.=r����=�z�|������
�������_7��6��gh�4�?+�����}���n�~_��m�"qpg��*���������P��t�9�0�VVH����s���@�7;����3��DDpN���M��V$���	P0��!��TG�	8�gy��C�I
��E��)�Q"����K�������CmBo���p��M��� l`��l�R�t�����JE���W���W
�]M�c��b��"�6`OG+p�RQ[��V������J!Z8W.�}����
[�S����/��h�%�E=zWQ��1'F��$��������U>o�%��m%f��"n�����YF�V�#�����wz�����U$���{lb��*J�A�����x+RY���/���A&�x�n��W;:������!��~������0���VM�ON�R$���,3�'������@�h��{�y����?��MF{�"U�1qi��7R��9����#E�*���}d�#x+�2"x�L�"%����,
)�W���'G���R�0���>6�wP����:V|�<��@D�S�P
}�H1<2G�H�����z���~"�W��te�c���E���~rQ����E���'��X�y��}���X�������M�iX�����f��W�`J�1_T'!s,��c������U���{�-p�n��8����d�e!x�{��6��������E��Z�M��fr��_���&["\:��	pcz>p�'1:���s�{)��������������V^H����*�i��-�����|�q����b#�h!"3
������s�� �Q�50s�J-���d�`V��;B����l
�r�;%*�o!V��o&�C��W����;l����D).�0�
C�#��
!��0~`�Q�W2�G������AZ�|�N,�o�LR�f��[���]+���~��f�k��E��0n
��A6E�g����4��=0�n���6�0�;f��sp{[[Q���c�Q,^��'�g�����yF�mD5d�����J���o�S�����,�Bp��#]���pq��^��'	`�
�d�=�W�W�Dk9�<�A%�X�������G"R��8�Og0N��r/�s���V�X�^,>M�����O��G�e\V�;�F(�e���p#�����
z��P������E�+��{7���p�l �<,�-��Vk]�5�L�0\�Z����4=�p��/U��FD�Uk��e�Qn��O�k�����<.E�)X�{)<�W,���w{!)��@#jy����iWa�H�����af?@�-����;m��k��(�m��m�?�4]��h�_(���m��YI�'�Q�:��u\i
Y���+�S=�c\��p����aN�5�6����f
*�����%p`������2W$ ���k�?�ZK��E�:���AC��l�C�#"�;w��*Q����7��Iw�~^L���p,0�0T�����T��dpx���h��	�i_O.1$�&���;��b��JP:,�_��\w	�li��JQD����XIRyMZ�������vF���Q�-uw�M���N~����-��{�g�N
�a!M�M���f���$�����Js��Gw�����[rw�^e�&�����R�����
��f�o�H�{e�jwF".�HDN�a�o*���yjP4������3r�L_���R������N�*0��{�w����<,�z�o�(��<[�e�����v[�����Z�����*y�w��������2%�!Zo��
6i�o�����}?"�|d`/S���_�:��C�h�l��t�V|��+�
�������3��$��Z�,�%�C��i&��@���\cj�Y���)Dd�@c�B���V������	�Mp��Tv���L��?�����Bv��S@�� /���m�S@���F0hW,A�#�BR���$��<~*��e������U��,k��(j�����jh�"�TGl���'$ ��m�	�u�FV������6U�CI[n�R����R%��i�;�Fbs@/����R��;1#���[t
���
�#A�d\��
�b�LbAZ'��y�����~�r��������~���7��`�=#=���Z�
��~ha
�o���9l
���4Tg�����%�1��BX2��t�kE	n���{�[j�|"S���7��]��;�W�1�/=y�nWE;w�����&V�2���Q�~��
�����G�_1������8�D��I��xF������E*�����?Q-��%fnY�^h?�lm�|H�7z~�7�|�Y6�!�y����P4�sbS�I����E��0���'c2DN�vb��K�6P���OEI>�u7��y��]	4��lZ��3�?/�:4�806���f�"~<>:�`7�X	�f��O�����LT���GV��y1��������}T�#�9�S����a'y�L��
=p�WA�T
��~}�lY�,��,jU��
teggT���������p=@m����8�/��������d���5{x�-������s�~��V��.A�Z�^-���]J���.S�����B	��?
��98����8np'���L$6���C��?����|H�uc]s��2+N�+8/����x�T	��8��*��"!��������$���P�c��V?����)���:�L�q/d��������]f���
[�����`�y(UO��	�v�O!!�������L����,������a#���F�n?Y��Z�qS8�Aj��5%������
��D�/$��-��}��l�r���<�S�����4CZ:*��&���o�p��z���H����U$s_	�3���V�~�I��O6����PE;�o�^
.�����>�9��]u��M8etE��5aQb��-��|EI���h�y2�9��lo�n������HQ���HAt�tm�($]���y�"����^��qVn��Y�>���RQ�y\.^��6���V��;�kn��e~Ov{�����Z=\�9�0��}���BZ�
����q�x��n����uH�q�fz@�m�������h��d�S�mk�������-%����}�Y�d����������<���V)�{7���R��B��a"�������?�����x����`7tb'�A���<�,Nj�� -����k[:X-�9W�]���V��X�9:����H���!�}v��x������,zFy���g�d�xtU���c����%�p�-G�J4D�biD�28�w{��`dM��s0F��{�a�`� aE0��5j����m��X��^m�sWk��m�4����<���W5�]���D,�+
"T��<� I�9�/�������lCx�4�c�.l%@��}@���J|�.����'�1��ui6`�����@+�����a��������No9���!�;����k%>|���l� ���J|���o����l������
`AM�>h~��rqb���r�T�n��������w�C
"@������o����7��8�G�ln�"?h4V�
��_F>~��������N��%y����vx~E?P��:�������A��������?/�����ztK�Q�4V2�`c��n�m��=3W���i���z:�I��M,��v�u��t�d�N���<v���}	�������F�2Y��:�!�0�#uo�g�%d�b���0�`R����������P.����L�����GKj��-$�iA����x��k���.N�G��y���
�f��F�,Jc�;�+H��/������B���XY�Q$y�4M?��!�`�4N`�*�KUQ�j������_Pa�a�wz`������R7'�Kh�Jv�F��y��~*P���_0�����V#�����Q`E�D�}(�~z(#s������3cm���K}��y?|�� v���u�ye�N47�PF�.}?�6lx��><��}��9zHCL^,���z.J����)o�[c��cSi�\O���������t�+�	���q��j
6U���+�7�" �Px�:�[&��
J���L���?��l���j&&t��p� �	��s�z���bA�5;��O�V,,���A�b��T?/��e��� �/h^��u�h����T4���zZ�Y�:���^�������S�����,��a�"��Jv������e[�������!�<{������6k �
����)-Dd~n�I�mIE	���S�'�����iQ�lSo�����s��`�U����;u����V,�ZH��fL�^�':Lt�j�l��_�,iA��9,)����� �t�nq�
S���k��e���1W������dI+�d���=�D������^fI_���G����6,iEZf�6��d[s���0O`����j�T}���)�z�dJW"_���������iA�YW6�7�)��R��!5m=��de��:�FP��}i%��*���1�b���|���r�.��i�(C6Ry<�l�^�A��J�8vS�J�����PJ��0y@���T+�Qd�b�D�FQF|����1�j�$6`�+�T���i��|�8H�g�t���te����#=����o=�Jb�to��fd�U
R�')*�L��Z�zf�S�|���7���8�j���$IU�?�U�#-��3�\J�Z�o�%��>�W���9UBU���D�r�V��=e�MV���w�����q�#��`&���#W���)�j���LIY����pem��	}1���Z5&����3=n=\?9�$!_���`�����1�KC+�UM?o��
�
����g�;U@�����s4�����Zo�����2?���M}�+������$�3�4�Q���9��1 �O�{�\����JV�S��Q���T#��
�J:�Y�-M���s���%�����/��u)�{�"�������$�\05�=x��;���Iu���V��C���;�v��\FtQY8wP����=TH�I��j��,�t#���3�nd����SQu��/��a�NI�9�n`�J�����[�>*duLsOR���"����ZnE��
���������cz\�9�R9L1��P�){�>g�4t<{���W*�_�S
�>����1Dv�pI-����	K8g��$_�?�"��g	�k���g����lLw��~�)����G:&'a3����#��^�n��6��N������[��������z�q7��(\��Xj&_������9&:X��'w�a���b��R�^��:���pP	QpP����h��"�'����7���L&�����$-�ng1H.<�A��9%��hez�1fN.$��P��1����r��<'9
�f	<+��
I��&
/ll>�^��c��}�~�^,��eH||�|A�c:4G�x�|yj��-��?-��yZ�4��L!�m��������w[���N����M6�����OEY�;g6\�������S�7��^�~2+M���.=�� h�������[A&;zD�N���d�e��:-b�E�+Sp�l��P�Y0�/�XQ__L��?�\�z��/��H����a('O��<����Pv~���������� {�=h�NK��+��FKv�rh_�)u`f�6g�� ��=p`�X7�.�����<pc��<r#J��v�Y�V��\��0����s
t�����E��[����tUG���
�'�1����h>�9���%��#Fm�@�����m�X�3�(Z!1���#4��y�#6�1��eZ!�6���mpY�#��v��i/2����l��3���1�O����!V�5w=V���Z���+5�������@bFA��,�68��
�
��5f����I�����ch�6[�RP�QPE�3
j�-
�"�I{z��Z�\}�&���-]�Sf���M����+�q���Z0Fi������mcc����$�6��-Hhi���x��������h�}OM��S��]�u��)���1_��r]�t������uIV���(���`�c_K<������xr��}-�����Z����>�����}�����B���bl���q�%�:E�>�6�����_5���K�Rz��y��t~��g-���f���.�q��s�������W����?%������,W1�)����P�G�O����������&��=?��� ����F��}}�����n_�������9������G�[~���.[yu��=�����d����`k@S�;&���Dd{yc@���tD z����6�5�s�##�P�|#+A�p������B1-D<S������'��2:h�~���u�?����b�y�����K�h��V��a?�X����4v�(�y���hR�8���m�����D��Q�mL�+xOn�^J��\wNl��Y������CBWr��
���R��A�`�Y|������ y�a2�S������d�6�s�]�
`3�7I�o�<�`zq�hVZA���:(��
eB�W"�n��z6x7�9�dNr���>i^����H_���������� 8����n��&-����F�9P�H����~-7��(VS�
�M��~�e����Z�������E������vMv�j�6���N����+d��\w?��o��x��O}����HJ�����>t$���cq�Z�t�����{5*��%��;�~2���f%���u`�����ZD-����*�����,��1�O�����@D����h�a,-n��*����g2IU00=��`~��������x����N�a�u-��7�����}�:�
{�����u[L�L2�gwS��Z�Spy��Go����������*���0X�;���TP�V���Y7z��u���@�)�]�gb�H��|O���	qO��y1���qOGk=������%��#K\��� 8$Z���|�;�&ppL�BM}��g2j�L�
�T�G��LT> Z�C�{Z�P�xs�4���.�N��"�IO�I���d��_�[�Y�f��E����7����M���e��7�c�o�tJwPP?��<��x�Q{��P�s�+�X���7��[�)u���8�U�m+R�!�8�*;���Z"1����q%Z��-���\�oy��p����������{(���O0SmGv����lR]�U��_������CW�>]=5%V�~r\�VHS��rnL�%��"�����>r��
M�b�-�w/���e�������m6(��)D*���J��\0�\I��XT�6Z���q_;OP��BFsU$�Ic.�K�#���<�r��\
�Ql
��{H����e�_��5�����z����g��em�NT5/o�$����^+%)��y�^�����)��
Y����������_�x�P��MH���2H��YEx����t��oM�<���a���uGr�@���f+�T�������#5VI�S����������nx��,�
�e-&�t'_�DAM��K��� �{�	����We�9S��-�+$d��.Kf����)�m�%���1"~������[���q.��$O�����&'��	p]��y���	QgJQ)8�����7$	���L*��=V`%Y[L��
��^�t�m�w��i�7�! "�\uH�s����/HN_����:-0���^�<����4����VQ�U���-�iE~~�BW��T���ebg�;���qV��U����E�#*0���~%�������`+�y O�����{�w���{5�k<e�U\`�V:lt�q����k��P|w.��H� ���aD��Z��t��cu�����zU�D�y"����=������+���$f��3!t�pz����3;���J��7�O���BT�������v���i�H��/�Ow���|,3\82�6�Q?�#��-�.P�($zy���}��Es��5��4}�a�/}���JD��F����)�����*Z��%�����vb
v��������K(D���*Z%��o��dBN&���).$�VE���h���r�r)`|	,����ti!(��L1��;@S���{��pX���J��M�T���!�����>���k�,Ue��������+Zd�$8��5�7p��\S�#:
j�J�Nk��w�wU-�,F���P$>+��hx���4���l���y#=>Jv>�K}Vd�T���;n�R�6$`��]*n����������y	����-9����1F�R!"��`��x~��/��Q�C�B���[���i����cy���x"�B�"��g�)p���,�b�on��u$�1��M�9!���^�"�f�L��8��i�����|���c+Yf��t��Xm��G;a]P�$�}����g��.2b�(o����@3�EE������>��<��B�Sg��������dWZ���]���N�_�7[���g�0��lE@&3��L���BDu��/���u]C�E��v6���@fgA���[��z������Z��hat��"VGS���!�sg�l>�����L����l��:�{�������	%t�2��Yd
M��:k'���3����N�v�z*�)��&C��i�q��AV$��hl����� �Z��
�i���t����/�l������\�Y��>���4����p�DD��	X���3fXV�nF��������w
<���;DN)i��1����
��sf��h����U��?s����	i�Z0�P6����4/�g�*�:��2,�xR��l%"���F8�+���u��I�[b�����,H��y�l�����@6��+��P���;�f�wpX��Q�E��/��x���DT�!q�.�>�VQ�P����J�����
�&���D_�-Y��]4��l�i������� -P�E\M�-�a�(mt�w�=k���=(%MC_�7�n����H������i�%z��x4��e��w��P�6*��4]�-�<P���z,�L����J���������[�L��N���Z�����Mo�+Qy��4�`��!��:�?GOb�q���e��C�S0�@�N�}����/,H���T���8�����_X=�l�$�*��\ u��~�����
2v$Y�$�XP7���vA�4G��]���T�S���'��#!����v��o�B�������!�O{�������8T���h�<�O���J�ZV�,�ty�}��B�x�����g��P*��J��MU���hz%4{�����_g�>/"2�
gJ7_;p���JTwnT��?"��O�\Vk	e
e��
���]��4����O����h���.����63�2�w���k ��C��U���i��$���yH�,��5l|B��/$���:��=1�����sYR�	F��4}���,�Cw_H>���X@kaN�F���k�#y���""{�����C��g}U"��_�����G%������n�b~T����(��������@jo&�I���}�"�v!�����Z(�$|�H����]�DC_��.]<�3��q�F%"?>/�?�7V��P;F���}l�/E��T]�>b7����k�A6���Q&�ul�J#o��l�o�WXV��P4��-/���.$Dn���Pj%"��MDc=m������&�j����T�b������QS��S����E�^��t�,����k��oa���UK�a���AhE,�5��yT/K��BZfa��BM� ���M�������L?o9���Dc����H )��az���vA�D�h8�F���1i���5�����U�����m��-&�3�N��1��gap�"�%�n�#9MN�G��}�w���?�S��k@sA��*��q�<'7+����I/4F�\��Q����b�O����R`3�p�2�&;���x��p�-O� ����[����i������������J�O�D�]��T6��E�����|k�N�!����h�8*�p�sYGq���;�
�*�,���P>�#�,�q�����p?����W���R��q��_��XcE*{W��?��������ok��=�
I������b����}�?yA����+`����<�$����^G�?G���4����
�{o���W���gh��t��@��-@Tq���PUd�)|�T���W��1���
Z�eGmr�t>�I���X�B�����2@c��"YF36��"�a�8Gh�r��N�9���y�iv�&�11��5i��)�+l>���)�/��7�����y��Z�3��=A�K&���I���h+	�1����/�"j���Yt��f0PI�7�P6��n�����v�I.I����������z#����(=��\������������:d��*0�P�w�:�l�	��"9#U�����J��&�o6?����b(�Y�9��b�W|�LP��Z����N��M��huc@����+l��*[������u�<��v����|J$�/�2w����t��N�o04F�e����q>.}���{�"�|q��K�D�|���������6E�\n��_����)rv����W����5�t1��*�tJX�;�E�f��|qi���T_�n���|3�N�l?��B)��5})�w�y�����,��9mS����$���zPY��S�����"�7��*�
+���O�N��#/N{A.�_@ub"t��Z����Wte=�/���n'�$0�r��[��L�d���0_e�����:vY����y�����6r3��O��m��RU������?+��F��rC��EI|W�������O%Y�]P���d��������Ny����+$���;R�Q���$��E�3��[��������MH�"{	�"O?��/��l���:��|W���y2��+�k�<1gI��& �|�bF�E���W�f�s��������e���A�	�/�<
i�&R�]�D5��/ �.��I�"1�I@w��|��T�*��
���y����8i",�<�GIr�~N��yJa�H����f�L/�Y�yhf��O����~H�6P�,c����[M��2�mZdy����0H�6�Yv�ie�����n�lF@X�%faW������Q�iC�9N����'����j�f������$��N4�$c��n=MyZ��J��N:�i���&���^��������d�����2N* �����>���,��1���SN���.�[�49���`�����+hA���ix�b'5��R�>����u�#����x��d�\������
�
��m�m?��}*�z>/��d_�^H���s^U.��RL�V�Sd)������qZ.�Jz7k:t����\�#����e�SA�_��W�D*��Zh
�6�&�����_lK/��|4���o��nlb�l����)�du��-������Ni���L�����S�����%M�~�5v�:�`=�Nb$��y�R�����y$A�]���L�?	����!�I�p��OT��1����>-����+����r�����p��>�o���������Q����/��4�Uu���8����$�C������W�{M���^�X[�
�aG.0����������������w+�h#i{Z�(5JR8���cv�	����D:=�p�����v�1�.$�������\�"S�07���Dn:I\������y
�GD}2��/��s��3�m�t�|����=Y��=|�F����]�+�}Z�b��:��+HeB�.
u���,?;h"�pZ�������r�\������p����?�{��*D���E�RS3)6�S�1�6���E�;c��XfsQ����g"�&�Kq���F���D�-�'=�dq,OGV��T�g�I`E�xv��)�|�����j���k!�kn�k0���*�,�wG<R�h_)�r�����'��E2y8Z2���qWP�Iw<����B�>��2"�wX���c	7�:q��-J��+>*���M��}
q/W>�O����@��3��e�������� ��YB{,([A���������x��<�7�}
�B�F��������WY>������Y�#���i��%�>`b�M8B������T�����F�����f���q,����d��S���"U9�c���������M�Tm]��>���f������u����S���qs��Y�7�m�Rm���oq���m��/�S��'���yB��K����p3��S��l�B��x�����d���$����h&:�dN�e~���c����Em�]16���c����ns�L����Gg�u�D�MW�����tdT#QZ��� �k���,^}�'nr���`I��-����n�9���pIq"��n��]Wo��Ze�A�p1������k�9B���'1��*��]O��A"a�����8~1�i+ ��d�e*��Y���.���o�����H���Geq4���qq�)�[4����?�-���H/�������Z
�"������VH����D��E?�>~���`��������Gtfi�j�j'�Z�_
���������w&�J�9h?�dQ~�
)*��;���#���5�����@��"�
G�����%������|�N�D������Grf$C�y���~A��}�gI���|/@�4����X�o��OX+�����5Y,��{M���O�	3��{i��It\���&�3q��v"�
Z(����sR��$�h�k�E����|qa���b��4���M�"MQd�,�QX��(��z�8�H��5���}�s9��$��q���Q��OEIF2�?G2��OS�L�a
��\{�����OZ>������V�?E~�Y�1��������:hT�j�%'�
��|�L�nd5����`��e:�UGf��B�9�X��$n�U7M�N�]�_�
�����'�x�f�,�e���Mf,"Z�
Z��uh�,[e�9������s��|!��HbV&;�q����y�"-�U��Z62����nt�����F���+�7W���8�n�u0��a��mO�nBx���R�O��t��]A�X����/��&6�t��C��������V��V��\`T:g���<����9T�����yb8��������J��I���m�3�j�����C��>�L�dl�y;�mv�c4��w���|0��qjW7On���6l����=9��`������W���+*j��Xf{�)�����'�����e^���.	�{��6,��.��H/7�,�����QR{�v���@�.r������@�J�*�)7UF����3�w���p0������ H�}rbc�$�Q=������l��f��Y����z������B}w�����H��=�g7���_$���4G6-��E��������6s��0nRw;���0�;��q��-��7g(�;H|�wz;�XZ�-����O����_�0
Eg�|�C�'��Q�.;�c�>5C���6����`r�H�p4��4���@A,F�S�������<)9K���h�h�-����sn&��R7[�W�y]���������X���'U6�� ���[}�v�x![�@��7��l']�aC;(����<����<hGA}f�IA�I�������EA���<�cD����Qk�P��K�Hx������-���gM�?�w�6�������������_�~����������'3�2��B�d��>����1_����~�����!��c_�K��	P5���y���(������pmb{3M�)��=y�&|�H^bR&j�w=��5�%�p�D��,�.�,(����yau�,y!M��n����l�/����c^���<�����UM~g��d��d�
��o����"�^/�0��TK����Y�F�2����-����=u{�����x���+]�5�h�Z�N�9�I�B����+��J'kUv��>V�se*jJ�m�^�h�����/D�2�TP7���>����8�jr�Vd���X.�~&���c�"�b�zzT����|�.�@��Df�}%PY�
����f����"��`������)�yX�c�-Y2}�wf�PI��u!-+(r�Fj��!����q�����S������������a������3�2`m�5�H��������.D��B[hJO,����"8��L������(�R$9��l����|�I<��6���`�n�a�dHW"�qg;� LD��������=�o�����Q. �f� 8���������H����U��qLe���3�c1����A���g7���"�����)!;|tB���{z���dO+��
�7Z�'[���"���N��*�`��|�Y~��}2�5�N���<�.Lj!"�����2��>����>�r�I�M���>X��,��6u�e�����s�'�E�(Z��H�T��,�y���s�CZ�'o%@"\�b����W����~������c\�)fL��*���%����A��0c�]�������3��'N\��t%�Owfkz2�_X�BD����)6.�tEY`L���'7�5-(���'�f{Z��z����� ����L���tAZ���e���lMj{��5��{���y������k���Qs&�������.
�23��������U`#l��V�3e��[�|V��i�j��z1�8@>�����Ru��50���2e3*�X���lDCGaE�[��U����6���d��-@�����@g���	����kO)l��F8��M�<
����6����I,h���>��eA�`X��nK_Hk�Z�6���9}�f6N�EA����H-�|���>o$9u-�`�
]1��d6Y4;���,D�`pe�����?1u[��t�1M�i�	�&3����:�����j���c��~� ��g��-I�c�Q��8}�v��&�����iS��q��Ef�bw-NS�D��c.��q]��� M5m^�������9�����]i�h�>��oD-�d����{T�Kn�4�T�i��Vb�;Z���4�nw�C�?��T�4�;��;j��wA�	��sa�����!����'��m�_	�b��������iT!�H����<IG��g���a��Y��\�r����M���UR� ��s����|���BB~�\�N7U3i��os[/d"������h%�� ���F��_k��R��w�[����_}1R1�V����n��/�I����y5:��+��	Q=
���(�w{�E�5�7VQ�&]������bfp�y��s���-A'M88��7C~,h^�DzQk�V��~hGV����>/��m�L����������z��uPng+Z�M��8x��b
��� ��f�$R��N���yOd��~�g�%=Y�=�w�PM	'M���2#��q;h����������t;�N�,���7�f��I��p�������{)`������ZGF��#N�@3
������S�\-ocj��K�����'���zd�?n�l����k+Z,���H�j������W��H����h�^�f���������r$����!��'����{�$������a'i��W��M��6'g��D��	B��$���%/cqq�4�g%�xl]RW�
����"��~��	���&�> �����q�����@-�n�	V�1o�t�PP�)`&��c���JE���*`ZlYw��D>1�q{yjG!����lZ0��3�������}0����&�{����{E
?��u�o���n��|�Du����HC�~Y<"X�\A���K�M�&��~�
[`*�"��[p��zL��Cs
�b�����f�v����d��i���� b��K}AjV�g8����6r���[�{|aI���������� iz����0V��,D����R��i�qSM����6=��EU�l�#�����>/���3����WA-&�5G��|��h��D�@�1ws�q��d�r��7������E�d���8l�H�(�s��UC��YX��4+��W���D�	�l5Ky�Q9��Z����|�����?�����=:)���y3-�Y�����ED�����\!�]�~��<����^���	��&������,�h����z����F�$5|�g��}���P.�ZI>,��q����s�g�x|���VA(���}��
��z��m�@p	�Mt��xF��3yO@-�tS�BvG�*� ��H���;����?�u��3c����U$�sg�s!��]���|��u����
x�M%*_l��3-d��A(���\7���*���L���A��.��������4}��Z*1z�JD�]�6F��v-�	@x.dy����1G����2@Z� <����2PW��4��l%Z�mD�Q_��N{����Xd���d�h+1K�0�/0�!��e��4G�-�T�?�&�3�rD��b�\��O�P�R[�m�FkI�cE���|�%v!��l�W�9q����X0�7����<�>���u's�j����0xzxkh�y�bhr���f�3���z���q�2�B�N[�a*� T����B�
PM�3�v%��6'-��*6����E�V�)�M������S������]��/�A�<rG�p���a���K�>%�!QE��(X��i<[��
b/�i�,��|g��(��SI���tE����i��o�����Z�F����������{E���	&�ds�=?^x�5%b���7m�R)@D�Y8G
`EC�7����_@TC�2wK�?l��
���MF�[��L�`�M�,������������ru�@�/jC&�R��i�x�����	{M%gK��'�77gAfVd5�m	��lp����dF d�������	J���W�%��;b�H�S��3h��S�B|���X*��o�PK}�xq����h�=6���^��tN��Bu)�=�h������J@kZQc���s$��Ca��Y���/�[<�c�bo�l%"��e���?�G�"��';x�s�D-�����>+Q�b�a?Z�c���U�����Ah���F���g
0]�BZ6��Yo���JX��I4z������`g�1�@��=b��l�
�q�>n�9wi:$/�X�DV�`���-2��.}�BPU��(�^������|��l���1B\>A�qRb��8��B����0h�"�-���C�)�}�54�<����m��� 5�9��NG�4|����1�S5�+���D�-��u&�������"�'6f��`�G������,�<����� ��B�� ^���e�����:�Q���t	2�q��������j��s�y#}����:��[�b��
4�M�0���jq?�2~sc�e����EF:[vbqQ�vw @�ef�[H[���;�)�D��jB�3XE�F��d�@�&��\���H�������?|bY?V���Z��H(x��-Sa,_����"�<I�.�(��r���!��q,�M_e��2��V��S,>�!�q0
j
[��7i�`���<�|1.{�@0.6����3j�u�P��$#�\���$�,#;��C�'���m3n6�LDvI��=�s0�f&c�����B989F]��(���Az\|#��?lAb��1�;
l���+��e��.���pL_�$�>��1�8�[�1}E|���G�t@���$G�������s�3j�Z���.����]�����<���q�1�����!AAM�v�F�_���c�ha��G���}y��M>�7���HT���L$z�Jmw^����"3�F8�����9	���~b\?���D����Q��r���O��q}Sb�wK��M����[�e���0���I�+����'��a'O�8/�.V����_��q���3D��]��r}���X��z���u��)��1_���w�.)��u���z}+�g_����c�~�r}����^��������� ������|�^����u-���\�K�A����������K��R����Y{)����']������SL��k��\�u9�2]������u���<������������|'��������t}-�Y���rb�~��:�t}-�Y����j��������d���z f��-�
1��sm�gm�}�~����������:$�[����_�/�K1]_�{V�>W�;��]�v�����b���;�� �����^��ww��ztw����^��u�����z}+���C����C����C���z}���R�
,v��G7����~���
�!��s��������m�^�7��;��P��^���!v�on�]��b������_���77����
��qC������77����
��sC����^��b��������!v�on�]������������!7���s�nH\��9������pC���w��s�nH\��?���������|��o�;�
��c�?��Z����;�
����7$���?k����W-��w���1d� ]p^��c]��L?�c�,~EHuoY!��H_!
@���0Y�ia�����_��D&gh<E�cZ��		��57�/	>�t���;��	�^�@�F2�/
�i�{�D>�s/�N���z�s0+���_�|GY<�D]o�T�"U�CG]&���D����������i�K%���~���(��S���-@����	���T�:�S�o-���N?HX_��t��o�p����=X����M%!�5��N�!����2��(�������WC���*�q2��2C'D#�BpX�	��1���.~�r����x�q���&��?�����re��	Q#{�Z0��2���������/Xa���DD�w��3U�����!�,i��q�@a
I����r�F�_&�Cm4����&K3*HtS�&m�J��b���k���R��vj�X��*��:5�-`�y�\��Bv6�����@��J�Z���m�p�Meh��+����I�s��4��`}ECog&k���&Z��*����8���.j�_�[R-�Ea��/��n7�X������d*'v��~g�ei
n�%�aF���%c�N�a�z��i.�Uh���il
P+y�ds�1���[T��')�v���h;�3���M�j&#���F��>w�wK�p�r����H�`T��GB��?/"����O,Ue;�����������d��cT#,�bp��lo9���G�s'������H��zJDOM?������=d�+������}�y&�����H��f�#P'���(	H�l��`�v]�2�c_�3g���r��Opc?b!-���gd?�7������US�Z����&�n`p	��������W2;����������+�L�&V����kp�_��\,] R�CshL�U�d�p(��c*�>�|�4S��{�������i �Y�	k>SIrm/h�7]f�vbC���p�O���G�������Y����^(�GwL@i��&��o6���=R���������0 �:{n�l�B�����a\G��o����(/`&[;��f�Z5�����o����6��V����
/�;�g�����ow.�v�}z\"������9~!)4����'����ZP|�P���b�[f|����l��������������UrraH�oaE ib�������/=�>������^��P��@�C*[��i�5V]�>�-�b�2����0��X��5�&�A~ ��:������d"x��UU�;���,��$e&����;7�]�}HL��s��d����<" ��pq���TR���y�F�y#�T	Z�d����w�Z������l|�?���LX:���6���){!�3*�����+��_��\���(��/���5���0(���7R/j{V�	����������� ������?���D	!����L@[�
QZ��$=o����r^����!��5gI��it�>o��,��PbnY&��;��
�#�GO�85z����x��T���g�[.���a���2�H�;����7�Y�=���
)�(t?(#tX�*�����?/�q��,�E������Z���+�d'p3j��e����OF�:��B�i���"ly8���^o+B#��C9��Fl{�y#�����<����J��_�*^��)��������p"�e��+�FF�����R�����Z��8�������7���j�,&��`|�H;4�D`�q���E���Y�t����}q����&�-#!��J����9��Z0Dj��t��N`��y�Pf+�b|���|.NU<j
>�Z��&{��:�s�$H���p}{�x�M�[l��?=2��="�m-����o�Ar�`�J�i�E���q��)^A[n��L.3�b�0�X���Fe�k_���h���������{he�O�-��
���I�cli�`A���W ����D������s��c(��+�tGn.S�G�)0��!��sy� �J`���eL��s$>"���Na���*z��+b9&�x!�"2�b,���YF��hdh���q�ScD�Y�����j�R[n9n�%H�e����zP+m&[<g�C�%�~�� ��A�I�57�k�:���N���+���+�i#�����q���E�sP�>F�=�RpV�@wK����}=����<68�8]������������U�OI��8��r����V�$���1+��X��#�9��RWCF�I������lOK�SQS�� '+�Vn���_Hf����������,�,�����p�y2-G!M�O����,���Wt;zW��V�-*���a�`tX++�Nf�Y���,�G%��7�ul:<�@�sT����8����{�z�����y�5�������nK!N��$�7F�B��$��+�Bcj��N����+P����x�\]�����W�Po���D���N�S��d�GOK�C��	�I���e�2���-�n��L-�E����XmpZ�H����z/JG�y#�f~��S�O�XE�q��(8��tg���V����?�;��*���B�JX4v���D:�O��tb$�(1G1/]O��~��"���k�U��_������W���PQ8�����P0�`�����4��9�F��g��a!�g��=[��D��f��]��[/������4�2�����BM�t����\�I���'L��"-�b�QA�Q�����/.�(1#V��}�.N��n�?/�5@��KE�wh_���������=7����l�mb=!L{%REX7do|�f�S��xa��%�����to�]�L�����O��iO�Y����)�������r����qI���p|/�gv��b
�3@'�l{E
h����sF�^�fm?n����?C�0� T������^�zE���Y��+V���?V]������]�`��O�I��k�P���������4�B���
N�T	�����M=��YA<vaE*_�`/�?_�-D[Rl%�F�.D�G�D�����`�������|8���l�|��,�X+�L�`B��7��u�||�HV��<\�;�����k�	C���dG{���������X>��F�+���	���u��2��cv�J~�Jc�#*�k���J�' l��
,H���"#W�6~��������\��������fv�`Pz��}��;	��kUO�Q�30$�����p}�I�(,)�R���������/\�o������`�d��w�,��fs��?z���e,�=-��q���������
Dd�Q��}�7���`�
��3���=�{�+P1�o
X������>�<������L�;]L���`�y��+(�6S�i�yxKjG����?����7����i����h�X�N�y#4��0�l����UA/���sOM��8����)d���.{�2�����7G-&�J�J �+0�It����\
P��i|��q��eb�:�,��qZ�AY.'�>�s�����b�������'.���������B���oA��}����
M�M@��W��Im�"qpg��*���������P��t�9�0� �d�����~$���;��g�9���""�w!.s7ed/[�Tvw'@�S�!��(�e���#�����n]�')D��6��)QU"����K�������CmBo���p��B�x�"�x%�T���sc�R��{.��oK��BDfW�������^����J�T��������h�-�+��V�m������1�K�?�|��b���(F����q)zW��g�2�"*O�|�h��g��b�*�M=��
5g�nE_r^���e�����u�*���B���M���(��;F2��He�o���>c�� ^EM��~�|�Ig ���?�l����

���al���4/E�Q*�2�xL�1���[Cx�i!��U4����6U���TI�\���~�H����%�K����nY�����^<�Bx�H����bx7�����H[���q^G)�W��k_e�;��jAx+�8�4Bx+���:��XS���*�A�{Z��A��Z�O������lu,=J+����J�=J+]��(�_��#���c�Bz��rpZ�������f��W�`J�1_T'!s,��c��t�szL��cY��=�����u�-�9"�-�y���A�(�4{���Br���;�,n�������W�'tH��Gt$����1=�8���J���&������w�EM��D�1�qo��\���2�1�(�r���#����43��4'�:F��+�Q���O���������A����
Z��/<8;��h��Pc/�+�����N���[�U������P"���,�D������!�
r�k%C*5�6�G4�����!}
�+9�Es�Px������\sy����I*��CtS�-
�BZ�S�����7���%�.8
a%�>}�x��qlkaA�����6��-T������nok+j�h\��t,^��'�ghy��=No�wD�FTC�
1n�K��l��� �	��A��t9.��E,\�}��CdY���+��|�������i,��������#���?xn��f6���=E�UG��9dDs+�F,q/��0+����x�Z�c���i$poP��s����}�"-��;��t�
�����N/��J���%�>v�N?���3S`B���n�u[�u���3A�pj��c��������TA��VE8�Mn��F��?e��3�FB?�;7��	�^D
�{�s|I�5aZW$��h�ZV�x-�o^H�
�F�>E~3�Ro��w�N�������g����g�������?k������^��	��Y��H��L�w���(�~��v�l"���D-�5��5�h��_(�C�|��@�+V�|�0�~Q��*��J������U"2{r����.�������De{�t��2�F���)����&�����V��n/���-h�h�O O��AH}'
�i��S�*��2A�m��u������P��"j�&r�T^c����
i���T���F^�����ER��c,�4���%Y|���G]HS`�����h?+�2��aJ����iZ��QL���O�^7����2&����!^�g
�4k�2k�<�Lv����l��'
�|��k�N�
�2�*E*��3rz
A%Rz_LHy�:/=��9�*0�(K��A���z�o�(��8:�m���+w[����]6B�g��am[H����1�	�-z���eJ�C��r�l���~�a�8# ���������m��
����Z�m��7�B^�_�_��|<_km�@/�f�����4P{39`��o���6f%"�^Z�$P%����'\@,6�9��Tv�)��sY1T����b
����b��@��P�M���E�ZEy]�����]M$�y�T ���=;��M�2�WY��+_j�����jh�"�TGl���'$ ��m�	�uO�ot
����
cu(i�->C*��-��*��kO;���������^��~1���v�bFa���Iy�G�h��z���,�����
N6�E�|�N{1�^��K�5�����5\�;6��`�=�?v��Z�
�����)������)��Z�P�*�3Z����N�q���K6;�PFt����q�]{3p�'6/�x�������?�g�����UQ��>��=!���OE*��%_��U|��	���u����V"�Z�C-?D;���z@�����o��.[+��OTX�"��������eks�X�����@��	�P��G"\�	���h���7��
��"�e��&.����9I����/���@w��?%��������@�;��i:��"�C#��f��*����v���Pn�n�48�|��D�q�	��d�-�CI�n�
�������.(O��=�o�9��J��Rz�(�"~�{t�>e�,:��SA��T����g!�L���F��NZ���p��M��D�l4F��&��f�����P���5-����8x�	���WK�iR+Vz�I������%���'�pn<[���8np��0�����:`�whw��@����q�3>�S���wi�|�^h ���0(G}^$d�D�f}t��b(���O��dsW�����_�a���r���<�O�Yjv�c,�.�$*~�	~4���)$�]}P���z��\���������F�i���~����"�&&�0ps���<*jJI���q����~��k��i���hp�L������Ghn8��H3�����hR�o�N2y�G����H�t�$s_	�3���V�~�I��O6K���PE�o�^
.����\>�)�yB���d�>�OE��5aQb��-��|v���7��6OF;�30�������9h�E��)���i��� �bpJ4���h�������V���p��j���h98P(�	�i��Bt����gqUb>���vvt{�d2~��k$d���6�9�0��}��H�/�un�?/�~����,�O=]@?.���3��M�W�V�Z�}������:x?���������-%N���������	��+:!.c������[�l��,H�w?���=dkxK��b�����J
���n��N�?6��D�ie��pR#,�i�|�e^���ja��"����&��.�������F����������W��\���]�����<�${w�w)_`Ls��$�b"N	����B��i�F����&Y��������xj�`� aE0��5j����l��X��^m�sWk��i�����H��BQ�������A���� B���c�$��������=N���1�wH�u���������6R�� ����C����:&c6��.�"s��h���8�]�u_����-��;�_p������_+����e�]C������j���h��yaL�@�T�D�����?c���8����
�*���cauOK����>�0����V������M4�n�Q/�����Z�������������*`�86`�����$��z{��=^����!Q���x<=��9���@uu����|��]��_�_+�{��Bn�]��K���!���k�d�=XO�5)lf����oW[IOw�A��4xp=�c�}�����~���~#|��an��r�����7����T1zF�v�0J�|/��9E�-"F�\!�#���?�=-O���i�H�<�|9�~�M.�)o �8Ywl��E�[�+@��S�T�
�w�^��E��.���:�B.���>�U��M��6m}0��&�	�mC�{i �������p6��%��x���L;
�*u��q	m^�Z�U���U�S�����ho�e���`��0�7
l���h��Obd����Q7rf�����[�2K}��y?|�� v���u�y>63�q3
e����3m��7����X�TU���!�?/���x��I�C�J.o�[c��cSi�\O��9)5i7�lW��c� ����`S�[��b}�-r	�����$ry���P����H�iov�Bx5:E�u�]�����e=�c~����`��u+��_��|1�|
o���������y2���kB+�.q��7�vg^���e}=��,
m�aOk�aOJ��������V& ���3J������<�-M���i|����:@� -���|D��{�[ve=�����:ye&�p������0��
��5��wE����rc3�b�`��`�?���4+nJ'"2����L"nKf�Li?�P����4�O��=����		�k�A(���<}K�=��L+6e�k����xD���QmF!���-|Z�	��f���w�&K:������&�_\��)�������NDd���%��|�,�� �*,)��z���2�%�
�,��rxeK*�pUK:#-	�o��a����R"�8�d6?�Z0U_��Z~���o%R�l�7��-8+�	�f=�����Ok)h����vk4Y���.:�FP��(Oi%�vL�FP&�J���N��Phh��a�UD�A���(�M����z��3ip�������f�C)�N�ho1�"�.@c)N�FQ��F�1AE�QT����1T+9��.">�J����m���i�G���=:x��Ssd�'S�E���)T��w��4!��	����S�:!���1�{$Mm+S`�1�l�J�T����j�H��p`�HRIU'd���I�������2�K�C"��J�-�i�K�S6�de�����(��6�{1/�1.�D0Ye
�	���VS���P����p��6�jB_�n
]�4���e�L�W��H�)I�=�A/���<,�3��������3�k�r�7j*���{�
�Q0XX8N��s�T��z�#�|�<�L��������,$�;f���J���e��*W��g�v���	�?u��U>��j�=T�����p@���R��pZ�$����>��g����x�#��gD'91�G��\����T3}��*i���#G�nZ�]Tf����w��{��=0e����;�-XJ��?�7*��c�D�;�p�^_T[C�NI�9�n�N�����$a�:��'����"K4&�Bs���{����3�t[�9����S*�s��jBY_���9{����+�weO���)N)���&���!���t�-���&pX�<�| ��<Y��Q��5��g����������g�|�DF���,�\�I���H�]���$���t�;����H��	����6�P�Sn�
�3
�4���E�[�/'�{7:X�/_'w�a����pP�w�"V��*!
jA`���@�n3z.F�Oh�;n_wy��F�IZ���b�x65����L(��F+��/;��i&���Y����B�������dD\�F��<cAR��(����k&Y�O?!W����iG4��B7_</H'F���9���w�x�P��iq{��� *2��n�E���g��[���'m*Qy7�����>3�J�se�E[��AC�7�|�������?��'����g���vwo�����2�)��&�,c��k���D]���e��2�y�v������b�>��K���q"#���^���|<����������97\�AKi���P����-m�d�Q,��������cK/W�4#o�������7s�n��[�'��v�Y��6#����(-<���B�#��Oc��s�o�j3�Q���1��g��|�5+���81yo���B���b�v�Z��|f��XTp���n���M��=���0�e�����/;�R�#��x�����>>;������u�ilv�6��$k�z�����-���lt��G�����dU7������M�Q��$@�m����(D�9��5�K��n�PZQPE�+
j�m�"����h$��R"��8-���V���M�>�0��Y�Jb�vl�-�����M��m��9�����p=�Hh�n
&+q�������z5������<��k0�������r�b���HW1��������������U�*7c]�]�og���������G����������[��������������S�=��~���G�I�;E�{G
������|)����5q�����&��?������o>3q���~���������]��������������GCF��C����(��}�������k����'��K���"���whh�]��}}�n������?�������������eo�k�%T��i�;����l�^���hJ� �{s�3�����d��D���G�)�1�g���C��!����k���q U�8����L��������c���������W��b���G�i��t8$���t�X��R:N>����.�E�,�=QCm�~��R���J�(�|o���9�-
�;/NS�":��y	f��\��!|�(e���n^q��I��L�'$/��Ep�Z_41zk�������"}��@9��?���M�Yh�(9/����xC������g�C��L��#*����.W�8���@���3iX�\��rLHn��z�����E�N��hB�����Tt�'�J"�v���(�)��������		�}Y�7gTd��x
^tG��X,F�oC-=w{��Rl"EVs}��������?�a��_��#��*��}�%�����`)����;�p���-~�K���@����n�������`Bp�#{��I���)!�����$ �wCo���#�Y�D{�23���$W�
���p<��W�_{����?��������_����{�;�
G��������\+LI��)=u��\�|�������*��`��&$`�,}����5�$_,���j�8��Y��G����*�]�h��m�O��T�U��[Y>�b��z��d�'�f����C�"}���]=�����o��M�>�HBM]�����Dn<��+�+�Q&*_��!8�{[�P��
s�4���.�N�X�t<�������n�����t����|��DO�6@���,���7�;���*�'tw�H��4�Ej+K�����r����l}#��MF�aFw?y����U�m��;�_�-��iA-��Km9y&��\������.�]���"�J���4(2�Z�`������O6�����ijJ�He�VaF?�X����W��*�In1���B�;Q=�3������8uo����J}�i]�^g���w/��^3���V��C�
`v&"�L����v.Xm�I�Ml�j[[wEh�7/V����8������\��n��f$`�c.�m��@o�Y��HC�eu<�],�Gi3*j����}�3<����h��eF�����7�Ir|�8�BID����O/�����)��&r���>B"�x������\�_��y���>y��X!��7)f3����=O�J�\4Q��
��73�) �F��;b��p���*��n�N�G&�@X$;�����,H.���V$���~6�]Q�$W���;1����%��m���	�iKw�m��e�=���M$d��=�����,L�ic.��{��1�q"Z���GL���q�{&I���"�(��z;Y ���6��F�4QPQ(����rA��	�I	Yk����0��-&��
��v���6����rt^B�2J���C�����6cco?!���eX�9����0����jn��������b��H@��^Q����4�V��2=g���qf��sF�sE���|.�y1#��{��`���6:��������o�<�������&B���a,���������~n��L��cr��HA����>jE:!D�~�����ws�5#�����V��v��dL$z�$��$V��3!t�vF{����xP��6��o_<dkQ��F���Ow��~�Z"
3_��4"��J��&C�����Yx�h1t1��G�=�	��f�&b����o�����F_ozT����h�������4��0�d-���hX8h���)8mM��)���������TE+$�������	-3s�'�d+����h���r�r�`����7u���*KL�� Ui""���-&LR��+k�.MH@,���p�w��d����RT&�.8p���������I%�J�H@���=:
jR%b��������I#���P$�*�����f*�5�M?�ik����Q
�Y��>�.MH~<����g)L�&$�>�]��
���3��aH�s������\E�b���R���g�bL�^��E�:�����rw�����k�_����E|�����x����~EeO
�=����;m������n���� �e�_���t�x�u[�w9z�;l#{����v�v��w�w���+j~��g��rv�	Y]�0�����f��'$��9S��{���t�����{���uB�n�������u[Ybf���Anfgt��� �j���mfv"�������u_C�E��v6���@fgA���$VDg������R�@iat��"GS�Jn=���������W�,�;����jJ����7�JH�{/��:5�2�0K''��y����>���j"M�n{2t}Q�-�q
rF|���m�);
R�����,�V����^��}��3�U���u>�}���	�7�l!���@���@�!�<_)0�RI��m�$� ���?u�A�O��8���c��}b5����$�����
����U������`ZQ6����5/�W�f$ef�e����IX��JD�U9��|G��c����"��~��G,k�c�����T ��[���Zt��9���	��C=��
�9+�.�����IDe:r>G�����V*����T����+yU����;/@M�D������y�f&"�r��ep���C�('WSe���V��6��;�=g�p7��}RJ��~�n���H���i'ja�^�I� ����xO\�0mT��i�^��u����
"���3�J����q�nAj�m�Ld���i+����m���k%*�6�f���I/H����fc]��Cy��M��a�}|��z�J [�������
�n|LE�C8�%��0�gVN4�d_E�)�gi��~�%���:���f�dn��
7�"i��~]������:E�p���0�,�q����{^��!:�R
B����2���\����D�H����,�8�3-���"V�e����H;J�>�=�gE)_��H�������3*@Y/$�f��X�����v��B�f���S<|���+@f����d�3nk�?��X�%�5I�
��/�.���e�AD�~Cv�}�������fF��`����A;�Z��l?��E�����D-XJ�=l|A����a��m������$�g��=��������I%�eba��@���x}�'�k����fl�0�W�?�'�uO`��b{�����������J��7-��O�>*]��_J`������io�@j+�X����o�1���owl�1��^�� =o��[t	�6�JT����Hm6�������E�#�qc���8u�!��qn~B�*��bJ�i��[�k�A6�/�|(�[�����1����,+��B�4����K#UO$�����zpPg"���Dd�C>��r`O�����Rl<�>3U�85B�c�jP3jJ|�T|.���%O`Av[,{����''a������;o�9Bg��Y�y�f���7��r0s��J����i�%�;8�f.��H��$�`�'�g!"#��d�����
���T�Pi��F���������l����,�.&�Gm����I������l�U$R�_�%��q�_z�7�9������O�s��,�}���m�?���J�S$�FE?���q�@;�L�M2�e�}a��/H���]�����<.��.~e��L�����:
���Q]Ei�����~����T	D^/hl*�UZE������b���=D����������(��;#��XY�`u�g�����W�F@&z����Z�)���>�x�<:�����������U@ ����z�+b��}�nCR�p[���q�GQ�F,��O��g�y�D�����������������������2F�w�O,H?����
@���D/��� �}�/��jB���G{��� ���K*h�,'J�-���$JC���m*)�����d����l�0sF�k�f)����{#GL�0�7����;FY���!HK�MI�a�)�C��Hn}[�}�/N���[����,���/��O'w�\d|�v&!cN����a�!�����v�0p`&I�YE_kSJz�c&�7��*F%-PN��a�5l�jE�����=��\�	�E�C��c)��~�-L�m�R��8���]���.�����[k���^��$�M�8l$����!{dY����-�:��`��e�E��gX�f���f��Bb>lfEkg��1����vm'�l��7��%����W���^��v0��"�,%������� }r"2�t���B�7^�$��@C!t\��2?��Bx|� �2�5����]�=#'�im!?�=���l�S�����ey+HK@3���H���A���HF���>:}j���PA�~_A�����1�
4(a�y�eA-�
��,�B�a������^H~B�e�{*A{����������g����~f�����M�;OJ5 �w[�V�Qe7��+/���<~���4^S���3	�e�f��Y-������'"T�P�/���h����TPX�/V�f��`c�AV����mT�R������
��4�"���b@���bU�����/-61�**~#���W���(����F��PV]g�4��"�*�
�����:�:�n�����B����CFd=!
�b�dW>���H:���E����2��I��
���8���G{wp��g�mYQ�����c�.�&���Ps�J<���hY�5
��v2��������,V3����#j5b(%�n����$:b��-9�&T@g��QMs��*���2xG��	>+R�p�Za?�k2�b�������zi����
�~��_���9�P'�g��^D:I���	������������'����4�q�)�wH�{&�-^Sf�������}F�X���a�w�v���e�]�#b�7�w�Fx��gE�����G���U �����s
���q]fc[;(3�b�F=�u��Z�8�P UJ�����KC���up�bA�x�\&D���H��m�[PXe>m}\.����gaIQ��"�/�l�:#(�F��82��~V$�~]��a��'���D�+�ees�c��o�j����oCN4������-�������z�l�����|�����R���O���5U������wnQ�����?������'�.�e��%@���	dV�t�j�/���{�!��������0|�����u�F]�4j�9tQ'���U������Y����YX�
����3������,wzJ�o��"�n4(b�^]�P����<�\77��`�B���x�W���L�th�
���\6����D�����@=*�[���6�";��w���u�{*�;��D��O}�!Jm���?����"�e�i��D��o+��B`���P`jU���f ��u��R&�����T�~�Tn��^Q*��������s��ak��#��90>h��p�6���%��!�o��Y���q�@��PN�,�5�I�����g0�.yq�|lL�N�����8����3������`j6u�W�������
�����ICC��)�h�������4�Q��z�db"�6�tU�x{
�����9��WC�!6c��������|/Dd����C4%9M�������|���"b�zi��"ww�
���_b������"{:����"��;�pzj����.��b��_�$)�&�C�}y��OMc~���~G���pOy��9�_����-�)![��x��,�S\��<���������k�!9��/��� ���K�	zU�Jb�#��t�^D-X����7s�������[�&&�65�	���+�`�g0����ZP��J_�P�oS�@M���sb����:x}/D��wTp�-$mJ?���i��L��0��[�&��S�-C���N_�3��^�JL���y���C�z����~�t:^����%������up���>�4��i^6�������$3[�yh�n6|l��2v����Sz����J�|���3xjr.j��t1�H�P-����4��
�����g�kTl�/����]���?�j&�<�:{���l���S"����9|-*������v��i������$3��~]�A����:�Y���ifW���M�����\A�4�]��l�V�;����,����%�eq�l.l���}��"O�����LbB����y�b���	�
Da�r�1��LD���"c1�����f"2��������3��f�$�e�(+�C���Md���q%R"��,7*�h$��T�@	P�i��y����dM�s��������hS��#�PI�������Dd���'��UKk�R���x��>��'w��@rW�Ym���r�DB��0�
�[k�������z<MX�������
�,-Os)0�F�J���D��
'���6/����&����e���X*��Q����=O�He���?[h
�"l��x�3���-����[��w%:����������M���,/nA�j ��B��A��4��E=a��g�;�$�����pr��������9����.&D�@d
k�$��gB��:�u� ��} ��g"hs���S
��]���a7�������	�#�<l�*��~� �@������D�����u\i�&��u��Q����<�5!���%X����|b���6��-����lGA:dw~"����k�3IV�����j�X�����������`6
{��*���;�Jt������^l�JQ������pG��n���J���v�P���ooB�+���Knf�+���2��q��V�=R�|_I%��2&������������RLyv������J��V56�j�?�9�:�ip��/��D�����^���{_�|����'�~���=h�q>:z'���$����a�������&;��A?���=h'#gp|�ZF�a�:A����fV���d�����_�G ��V��q�y��o�i����Q&��;�MM�����vz�FZB����*�:��B>�x���C�*y��u�-$�xmZ@Oh�����M���R�s�
��n�3[D-�6����bh�
�����,���
f����}+(���]��i���X)������o����+���h��^����|��U0�&o�SA����K�8�9��ME|q����-o�6�HGm�����<o�������P��#Y~S�}V�o����<��(�
^��1=~�������8�W�EhM��(K�a7��z��ZP�xhO� ��%�z�7B�{bzd&��4��M����J]FR	��I��+�7����k�1�n*�Q�n��~�����a�5������`�c�X[���y������>�f�Y��h���hD��$�<��H�cb��$�~|�*�f�2��MFi��=�������p�i��v�����p:7l��������b���(�z�\�������J�����a��d�6�|m7?������=|��iQ��L|�K���l@���5)�o/*�
U��*YT�]#)�1�-���@�D��<"�&Y""�sD���������������_������_�O������������������n��w����S�~>���\����~��������������+J������6(��1�OFS��g��H��sroXL���C7!�(MT���
��
w0U�%���UQ��<,';���{
� �yq7���gE	`���	��,�������_��8-(I`��"D}�_��0����g��������B8y#P�����EI�~u�����@�����k���3/����v��@N���SWX��
����Fv�������dh�������tho�������_�PA^/��(J;(6�,�>�[7����7���F���08���H���4�(7��u/'��*��(K#����VI�S�gI����Kq�^��\
x�#�E��q�R���PW���"B���X<���+>��L���)����mi[�l�?��a�6�dK+�w1�7��lH'��|^�|5��Ut��T����\6���x���(�];:���b�k��!�=�7=e3:#(j���?aG'"2>�v���-�XV��YS�;��T�M$D���"�5���
As�����tFz��(�2���[�f�@�9�mM>LjE����lS9h�6uB���M�9o��6�a��L���!�Q�����lUot���N�Nm��DQ� ��r"V]]�Of�S�4��;���,D�yX' ����{+�Y����D-�}Z�x{P������VuF��I���"6N����l67��{
��E}�V����lS'��������k��NH��<����*�j�E����V����JfuF�q�:�
�
�DB�M�W���~����}�x3�#��e�:!
}�����[Lj"����>�DyxU��M��-j���~��]i�M}uz+��J<�{X���-,�K�4��m�aS��I�d�?'�Rp�y�>��r�9E�k�0��3���i�n��&�d��������������v�iL�tFZ
�8�.���G����|+����N��3�aN_��nM�~^3�_v���R�)}�@s'��dJ�dJ]QiK�n����.�l��`Y
��'T����5X��!�4��q��c
|V$����,��#\�=�����G�o�f����]��:��3�M�����Bx�	��REx�
Q������vb(y��z�u�Qx�	��>����<\pTA�d�j����
tB
�W"�t��9�C���W�PS�9���8����A����93�uj] �+X�$���	��{�&y3�x�
�5!�a�n*rG�zm��c�g�������1��D4���5��W�6u���0���
t���y�!z/n�x��v��.���'20�� Y~�3f���f��T4�;�����������<'���[)�6d��u���,���:��[;�����T���nV��h9\n0#6�b���c9v&�����H�L��R���e�l��D2��	��f�Z$�%�kE���{�@�o����WvE�x�M�^+A��$Y<�p,�N�/f��P�I�E'���Kg,!�iV��H��B�&u�o�It��u���7�[%~�yZ3�x����6$9����nW��G��Q\��7���&t�6�"w�n>�9U�O� �x�h���+����f.fd���<��������g�N�7�>�� ����G��
�NZD��3��2�P��=�����p��rkMv����y����an���?G��,����|TS�aV�����,;%� U��Y��<i}�D[X�����f��4����3�}-H^���M��A��ML��U��_��L4x���D��`ODc��=g����E8�Q����H�V��D�eb�� �D�����H:�����Ck�?�i��#p���n�j�!����<�H�m�s�/�����Ki�������Y�=lE���������I��\���a+OK�[��J4����v3�������	����g����|�����,gft3^�a�4
��u[Y9�'6�/e��<�}�N��G�58�2#�:l:k�`e?X=)D��<+
v�d 6!�������r�#nF�;���c!�|�����-�������P	�/},��
4���|��[�����p�>M��g�.�&T�Nv�`J1!��f�%��N���B"^V�C���J��~�~�����O,H@�>]�I�������i� &:I��Y*��ds��]
�D�������vB8���#�>e���'�<����R�#���+=���F�M�cLx�:����L�6n#+����	@���neda3A�XKk�_�PI�+��\*%G����"i���#/+!� �>}P3��fM����|������R�iB"�����O�Y��	��,Us�(r����3?���IVd!��i�7�#*��g!��m)���.�"���|�F��$\,�=:���Z�?��.�������	�=N�;y��+�q���s�&d�|��
����{����]}���#<s�*B4P������1+H8X�����INCND�@��&?h��7��4!�y�:�S���,����]��*��FU���3�A
�����!�O���4v���x��D����H�9&��P�����������k�4��l�3���N��3��������?�i��IR7?y��5������ODd�x�H�i�PI���'����\����)N��i3i�IF[t�0F�L �N����}���7�{\1 �8c�U�-r��o6�����#Q#�������^H�u��69dz�,H@�>����p����JR��@����+S[���P���O ���2����`��W"2���F��#�*�$tjBZh�n��Vp?IG�X|2�*H
u���:y�U���Z��(���
��z}/f�2�l���]����O"��T�Y��X����c������j��M,�����~�����>'N��_p�2�x�
t��,�G_����n��.'�A����NA�f$`�o�
����He_=5�	��;����g������o`���������T>&y���H&�����
��Z\P��o5��{��x����|X����W�_���F`�a/�G�����6$��DC<4~Qf{������5��Qz���' �
u5�&������b{����`AN_YC�=�f9h�$�M#4�Zs�xw��TV�j?-�������VXdB���~��pO��#/?����$T�Y���Q����.[�4}�De�@���*������6�4�%27t
��3B��PT*��t��rV���c����v����XN���LAN��
O�}�daNy"��=�3)2��)��W�����A����[�2��}��S��F��G���Z����7@S�3B�S)�J�\9�
�9��n{4,���Z;(<�}�H�'%��a�X�!� �xp�����������9!2l�D(��5���V��y3�������;n�;8��X�)�O�!G��$�������z�d��.��x�]C�Z��?aa}�2#��6H����p"�6�!N�~���@���V�����p��U����Sw�WY�`!�5`[Q����3�s�I��
,���-�6��v�"��Y?��gv����t3�U�,%����"-��pc&"Zd�|G�d�p����2�]>3�Q[w���X��J���Vb����<�G���[z�����V>S����|���},$�����f�p��}���g����o)�Dl�H���6�d�1lS&j�R"�v��<]���V�ESZ�����m��Lu��B�Bl���t�����,dY.���Kt?�&TpY/�P�����;b�3P[�������l�a��c���jA����U������F�@pp�?��$���i��3����������dn���k����R)���mY�-�p�V���__D���H^����g���x��^d���"h�a}+�Br49����
��*���)���	�/���~�I��,H�R����56�'`}
�$�
z���l�k���h.���nZWb:j��'$�g��6��0�����9�]���;/(���n1*���)�qu�/�De_����/�s�q�%��.�8�������'��+��Ou@�X����b�
���,��
�,�wG�e?F�<��]����{����K����	Y��]�����s)��@�����QJ9'x���@���*���`��{M�rNp5�uL	��&8�)�1%8�[-I�)�5jIB�	�)�;'x���y�w-I�9�5%����`*���E
Y\O�h���o���!��?�EPLG�;����CL`��b��y��CL�z�;�����1����9���9��9����3��arN!�r
�9�s��s��)&���-��-?.�����I����
r�>[�x�����������DB�
��y���v$��_Q��Fl��)��W����[UI�s=L���;��GH�c���;
��N��)����n�)����D��~�v)������)���]EN��)��`
�;jg�R\s�G���{��"�8�[-��?j�)��=FJ�.)�a
�Bj��R�s�F'���b�R���S�S�55}�IK'����'����'����'����Wc��Sc��O���Kc��Gc��Cc��?c��;c��7���������������������������������n�Y}w������g+nL�=��������nL�=������snL�����5c�_u[��R�OM�?s��.��mInLJ�������S\���-��-~g�{p&���_�,��S3y�2w���n�l�;Y ����2��/.�L���^Xyp��]B�M�{A�Y"�K9
��� z�J��@�=����"]9%���3���E:����_:��<w1���QW�����8�� ������<$Q��b����XLDY&�UJ�F
��lS2 z��4oQE�l�E?��7L���v��N�(���x������T�2����.zv�CY?c�t��ov+�1�>�����o^�>��/��AetVw�!����<�<�4���V��o�x!/��4!z���������[.Z���^�@[���A+	d�;����eC��j����;�28<_�d�����"c�=Q��7 ����p����x��P��JDd�nP�;�
l/ j��v���\��$_���2q���`2v���i����U�2F�}Z�J��b�����n"�\&T@���SrK4�U���V��_7�w����(���	��V���hW����vw]�Z�={�����4��������L���_+��~���o�W��@�E��e���b��k^^@����M�����o�\�t����$���T�L��
[	�i;���>+�&~��V�A!�n�[�Z��9���xH -PN��%X�z8����P��3�L#��D�������nQ)���H�����T�5n��Y��nSW����'����~�p?��J8����5�-tp��v�����+�	�A,4���z���^�����P�3Q;��%�[.�P��"k
8<����(���Qt%)�����w��e�$BW���(���	���W�2x�F��0��AAB�7�_o����'�*�!����aen�BA��i��Th�������Z&^�Y2���aQy�e�A �<4��\G����P&a�T�}�|�m�.�f��9:�����B6��D���r�K��RnzB	>�������#����U*��C5cE~#qA	`%Z�hp��L�3�7:��v�7nu"j����X�:��;���G�w��^��\Q����vy}����j��~���"��H��*@��O�_3�����^����P���!����xF.wt<�����=�D<8���UAQ�	���
N�ga|���"[���eZ���.���V��@9	�4w^�8ubU�G�$G@���;�Cfp�T�a������	>+����2�@}k+�bd�� 6 :L�d���p�4I�;�����|{�	rc���kV���zT���>���d�2l��a�si��G���KS$E��J1���cL���G��n�u������S%h���{o�S
�Q38&���
�[���Dg���#���v�mA������{��\���=_�l��#3���,�Q����n/ ��H��mT�	?�Fm�@��Od��Dw02hE���&�rl�m�/Di�/C|6'g%>�C�x}0���������"i���|*� �~(1�,w��QA�B}���~�IJ��Y.SUn�>Un9��\�-T��L2�1�	��i���,�=%8�)_<*���e�������E���Bt�X�f�"%��>��eZ���W`�:x9k����~���P(�������B���!9E������[�U�F�����;��y`�F./6-T��'�R��pj��Bn���$\q�����Q82j.�4A������
�'�[l��Y�LP�ZL��	�\������@sH6���l&��>��x�d�o�}qLm]�R1�e$d�+���cu����������6����g!6��Vr��(w�.n�M`p�*QV�k.~Pw�1�P�}���y'�b��d���&2��{�dt�Zm���_�Ar�`�J�i-E���q����ZI�gi\f��\1��������~\�3����/m���S+�U�ns���V^\$Q]����
_W �m=3���if�����[W<R��\�>;�N$
��������]P�/6`����zZ� �5���q���Z�V����tiA�s�|SFZ#7d��zu�����Dg�~�#;��9T�]�4dY���0���YlIr��K�H��>U���b������y��/����`���T��gt���N�������+�i?z�����������.�9(�
?��{�$YP�[J��uq���w���P���.?���%=n�9vw�&�K���p�����kM�k�����.��x?�����f*"����f����5%�
�asd���$v���`%<�LJ���u}���E�i���tc�2��K�W��^����3zO^%/� �z�u�VH�����g��;�:��T��a'���QH{�������$��M�^.	�@���7t6�����������i�������V��p'3I����&�1�D$�X���#�zf�+�Z0-���oM����Dd|���7<_�i��H=m��.Q�K��c"���ZG�m�q"I��%��T����	�9{��Z'vt��i�l�oQ:�����YY'�\OFd��i���Q�Q[z����6#�����;���*�� U%l�h����E�q����j��I�9�Yt=�������;�_�~I���K����_���Qq�V�n�g�M;��H�����*6zl7=�a_��3}��}Ac�]f�E�����aR�'h����}AM����%3np&]_w�0��i��}F����\m����]a�&"��%�.�o����e
�Y�U�C�uoJ2N���<'�������%�>���4�<	n_\�75LHe|���l.,�����f�U��w��/H�x�iO�Y�	eY���;�e����M�9�S��m_���[���������'f�N���5T�9�q��S������n����
���3���t��F�HV}BE_a�'�U�>���Uo����������d�U@��2+��j����X)�cH�D�r���gEh��k���R�������\P+-�������D4sgj�������D�16y���_*Nj��|��IeVRd�VX�6mH��	9mj/�uJv���`�n�eHB�����������{�bG[Y�]_��W��Q�d0�>�VE$��[���xm3�kN>%�������3O�T�
e�~CNhlv�e�����C�����R�������_6��A���wn�����W����]�!�#E!8��;���K��P�'�Y��~���r��	w��7���l���o!E�h6=D���Jf�el���oAR����o}�xY�	�����+�7��:�{����=[x��������bB�g�c�|�9v��v�'�`�y���P������&I�(#�pv����|����eo����c�:�gEh>�{a���/,a%b�����z$����+^�6|��d/_��,L�y8j1�v�����Dw�w����*���j��A3{���'���o<�6������>�������7��������!����~A�>B�!� q��W4~��5M�+6���H���8x��j3�?�st�a��m�+�:��c`�L�������'E�]y*��`�'�� "��\l-�y�2����`?��CB#)'6��3��(�q��>�DD�y�c�U%�A���f*%"_n&�U�	�����>�1��+3�i�d`�����o�Wf$���x��97�������&�u�K1Z�fX��h%�Vf�
�����1Z��f���y/��Kp�9�\*Ckr�4��ns�6{��0{7�'�b�nF"�be��L�Y�x���������7h��<#���w}
	���eD���'�f$`�����k�TcoF	pO^�#`L�U����{_(e�LN���	q�S���t�}0$������bC%��ci�����n^�LG�=�,cO8�7�y����������kS��^W�Jr�E,���"��=���'
boF|PwY������x�M�MDr���6��������f4���l��Q���������
�;���&�u�(a[o���h�M;��Xc��#U$>#�5U=���$��Z�O��������X�z1W8~��+���b������~q/���b|�.�28�+�!���z�J������L���0[�>�g�$��W]���+�H�w����������3���������c�-���2�/f�6c�V�0�����m��{B9W<�n���|"��{��	]���n�Bw�^$3z�3�v#����J��M��!���o�2%��&�a�>��B��Q\pI�py����{�u]�N����U=���_�n�sZI|^�����guF���]�{�??I%���Y����V�Z�>'����*��u%\F�v��
A.s�d���W�0����>�?8��`z}A?`��bz���*���k_kk���r1U���&�W��yb>��BY^e6U����dM^�?/?��S�JbT�
+�������3��>fW�Cvt��M��V�}�,�n�w�����s��s����b:�5X���T������_��z�DW�U3�{_�\WTs��Ct~J�T0�}"8,����w��M��)u�G�7���}C}����=�'!-�����%�����zm��x(Q{�fc^�X���spJ���������,@��G�+ha��3�>;o�r���N>��'�����A`4
�/S�B���n
��������|�����]f��f���y"�����w��u�L}N��yx�IG�&����w/���9������g��$��iz}�oa��zC��f����3��S6��DHJ�����;�Dr��	���n����|Z����<0���������S�?�6���j�S�o�4�(��y(�C�0i��[<"��h[���5���;��
�����Dn��^X+�R;-����k��
S���M�_�'sX�3R��?Il�m�C#��2�(��U�}���^rF>I"��"�y��Y��t���ZntV�)ym��6�B����UE�����;t��b��)1/N�DA�����_|V�&��n��
A6�H�b���7���Zi����Q�e���#X�8+������U�z&g�$�����|��y����H�-DK�@jp�:��2�Nl��@>���%����*�)�\vj�g�s���+S�^��;�|Gg���`�w�%�C/��j�m1��>v�a�����J9�O��oz7��P"f`��.��.���j����t�������z��@��X���;KXS��?��>����X�����v�����f�+R��]~J�L���
��1������U�&��x9�u;��!�v����[|�OGL$I�Z>����Z}{�-��,,�)��-��hg����-������
+UQ�CK����bmA?�0���(6�<x�"n���/2�ZW���~�io��e`�Hk�*��9-�f��:
-�����L����B�RuB*�j����d��B5'CVT	�X���6j]p�	eN����������DTv����[�b�����<�W����"��/A���6��/L�e4�!��S�O���^��������X������L-����%��������D:����~$jeJ�w�6#��Yoi�M��?��^P������m��.W���~�q|�%[�[Y�l]��5����Y���������y���,��F��C�7�'��g�8��dc���4�/��KP3��	�Y"/m��w��VaB
��\��/��rq{�g� ���Y�����uE
D;�K�[���?I�N�\�W0�t��� s�O���f�t#��?�q���q_�}0&�>r�P�����,�/�_�t>7B���Q�OId[�2��lnjB�h1.��N�����P�����ho����"6>����)z��G�;F����$g��^�����U��
~�xC����3igF��o����Xm��4>���}�����@�q�V���}�\�4�7���������5_l���{!E����c�#f�i�ah��fO�NF�8d���=/����T�i1�g��I44����y04��Md]��fAQLn�.���r��a.m��������V������\�X6CR!<����s$��5 ��x�&���*Q������#]{N��_kL�`Y�Z��~Q?��UIs�@m)�#����8��\�n&�+�C��j�������+y�������`U,;����;��f�u�D��U���
bs��|�E�\1+n�r@�:��v���=X�"��`%����p�������m7��L	&������j�����a0%t��0����Y����x<�{�7B6u/�4�Nr��g���P.�6��Z���{2�Hf��'���3T�M��S��?3�<��$��CcbU0!������h���}��p*K����u�e�E:�'f���X%���8{|�#Vr&�����y!����������X���~q�������	���aA���"���+������M���AE�/|��;�}�:�������*��{\�shA	`+���'F���{����b-W�|���1}~H��O��A��3:T'OkV�`��*A�5���O�M�@p�.>�����gE
�F��e@��~fp��2��p�q;BI��
a[����.��rDN������Y�?�X%�������S��*I��9��;e���L�'M�.�l��b���Y�[C���!�������[1�Q��.M�����el�7�#�_��hE|Fc�N�������+�ENE�����$�
5�!�i+�-�37����d��C��Z����T'��XP����1�:����/�6�?��|����a�k]B����Ld�G��sI^��q}���?�XU+��>����*�S�>D��
9�����:�!d7�.oX�dAi��q��}�Q�=�b����\��`��x�c>��~��6c#c>���#�����$k�G>j�wd#������#~�Vc�e����G=jI�<�Q�x�SXXV�n�����G���=!��a�����V�=to��s������2�
�������'s'���'��q������)�������c�)x�6�a��a��g$:�EtA��33�{�����v6��x�h�A�����v��S&BG$:9;#
-�V�,����prs�����A!�nC}��W��v��uT��a��`Q������&�{�x�(C��V�)C���:����6)H�HW�]��dk�
d�W��{-&p�U��K@�K���^_�	#$��3�k����5t��p�k"W����M+Vd��&z�z+-U�o������	g�o��X����3�A�����9|����`m,����������/l�%-*e^�0=�B/�K'���hC/��L:�a/�����Y!;$|����uJz_
�u��zw��,������������e���9'���=oVD�Jx��6%y:je����]�9|=nf�����B�7\~;�iM��\���a���L�_z
O���Z��
�jq�ea�
�����%�@���-�����&S����I/V�����������)a0��`f���>A�6pl6��z�ni�rK���M�<>�r�F��e�_~3j���S�����a��rWf(v5[(kT
4'�3�����k��9� j�"xl6�9J��������|k�;c+������m�����3�3,z���M�����H�<��Y�0�3�������y� H��������5{�*�9�"�~�]��u+v������emG-�M��,sA
����I����-�m��,����'��;�n�'�1��I�0��4��1^��L�m�$�u�l�m��9���i�Pf���a]�a��p�\	���7!�q2�`�0�'=���/>����xlB��G7�Rpu�@`�/���0��B�����0s�w1���s�z27��0��!�W5�����d�g��1C���N��K4'��C&�6Yf�b�o\���N���+RU��63���1���A��l����]X���V�,Oj��4�<��d����7]|��|H����|6zb1,D���=B�;��}�0N�1*�9s���N���U`Qu��1_�?NG���J�� A�|W"�P��b,��v$jH%���l,�&t���2�9��L3j��8�@Cy���1������=���Diz��
�����u��1�����������
=,YR���Q<�L�1kt�$�Q��4QQ��*�1&��e��,��{%��=����2j|��-�<�~ax�S�z������{��=a�3)uB��/��(j�0]g���o�S���/g`���&�6���"��-�r�S�����q�^]��~3Q��H����N����P^s���O,y���+T�3��<+1o������]K�}Z��Z����/�'��,\a-�'��gE���2a��T��~wF�>_�i?�f��*�g�_�>'gY��(�3Qv�q�����3�:����I��}=�����z�PY�m]�Y���%wmK>%�h�_�C�yY������u�x�
�b�bg��R{2s��Kz(jf�@�qB��Yp-y��4��j��/���Y3u���HOY�Nu���w�p�_r�IJI�D�������r�������6�?1s��"��n�����o�:�7J��G����V�6��j^��h�i��1g�/&�x��.���c��+Ks&��������������a`����������]�s|�1�YYq�l�H3Iv���+RGee_�k>�����G�����$z�x�����L�se~3X�
~%�9�����=*���|�\�sp��1g��^Y:*d�����?��&Eq�.���?�I�I��0j�<h���^��A��}�L�K�0<��8�}���ZA[��@�1�Pr�q���u�d�
 �+O�}���Z$2{l��d>���!��Do�<WX��39��x������C���6zI�w��\C1X�������O������{�a��>��aB�G��
jg�x�\�+)�MfM��C�G���N��e�q��}�>c��A"��HA6�����
��m&#����c�V�����Y��e�,Z��;��Z@E��v���L��=63S�<i�?x����:3%p>�K1\���azsZ��P���j������^��&���{����#T,@= ���o�'�?�
g|�~�g��fQ+��i���:�o�N}@�J�q���2�y�����Q�Y�W�BC7��������x�
��3�i���=bdc����6�������"N����K)��:c����i^si�y\�tf1=x���f�x�)�n]t���V�e���?��6��P3�*3���s���������(�����X��K�f���U�}���O[Xy��s��/N�>�Ai��S�@i�y��*hJT�������S�s�>�����g���=^E���>�����4��zs����/,F�����^z@�D�� 4�B�t���b*�3�����Fy���+q~�uB1#p�63����c�$m�9D��^���,��x�tc����2.�c���)T�)n�T) �zVJ�rNq�U&)��B���)T���g�}�=��%�w~����������+������n���������9��w�����w���������5�%hr�X��������Q��w��8j��&�)�q���c�ch���)��)������^PQ���o>����9�S���_�������m�P�$�y�y�_D�v������
�>������_��?����[�W�9�[mCV����{k?/���5��
.hJ���{sl6��H�q���
Ds�g R�c~����C��m���������qxW�t�����m��-�CG��+�n�������Q��?�4�7�;��	8�!��U�����e"2����h����Qp��:��:O�D���(a�N�o�����w���\��S�":�����HfL��q�>U�2��?��I���L�'$/��En�)�>��L�^��zn���i�&i�r�#���F��f$a��]G��9�Pn(y%"�5!R����%�E�q��k�	��%	��~��e`�������\A��`[g���`��hF���v�1�3�Df�&��a[VS���S���(z��7!�"�7��6�"kx�k�u�
�b�6��s^���`�H��\���/��X?]���NAtF���Y�8����+��Z��c�x��#B3�<�++K�f�.yf"�o�v`a�;��F\�M&����J���3)���,��|w��D�n��Y;8j�Y�D{�2b����$��}��$��
8�����=�}����a�u���/�`gA�=������'^��`A�h�Id5�v7��Z��k��7=���}����
�5#e�\<q��gFI�Pt���0N
V4���@	a��f$@/y;|����{>�b��3���p-'3�8�9#�����>�M3R�w����Z�����6�K�"	5u��g2j����}�hG��|A���H�m�B��+������������Q�Bf{���6�-@�������K���
Pm:������z���;�h�v���^>�V�*y�y�4��l}�w��:u��K�tZ�3l�����5s{��"j��x9^j��3�����,�y�K������	�
A��2��CtId�<�nSmG��	5%����0��o,BRV��w����wjJ,$�H���#�4���0�p�u�����^���umlz�E���E��kfw��J�szh�A�N%R����.�j=�s��LRmb��T���+B�~x�aL-d�1���4������aF�<�r��\
4�N�~G�,��y�e����
��]���gxf�g���v�<�9H���9J"���z�l.��AS"3MDd���M�7��ODsr�~�pa����T�G�q�X�f$���9����h��z�-���R��d^���=*���peh�b�U'�#j ,��oqk���$w���,`X�`�(������y�����;1����%�:m���	�iK5����s\`I|�o"!s����npz��0���d��1��_&Z���WL�Y};���L�|��En����`��,��em����^��B�5�������H�OJ��������b���0�6P�	��\9x��� +�C.�����6��$�����7�b��2�����\G���eY�I��dA~�k�����iZ��X�;�X�83b�9��{):��m��}����i��]gK(����V���bZ�-L�������V���n�=S+�6��y�
	uv�S��3R��<l�gA�H'�F6��1��l��z�H
������XM�<Y�(I�z@��	���3<������
T��$x���A [;����7z��}������B�	�e��I#ZK�d��k2�Q���'�,<G��@��xv>v���Es�g%M�r�)�GD_O=������2�K��4��0�4��g��A��NL�i�h�4��L��%LD�����������p1�efN�D�l�k�S��yZ*VFI5�-�Y���.��]e����J����7Z����=���OH@,���p�w�i�d����L6]rp �����,��q�����"�]G��ot�����~�"����Z$y0.lR$�*����\3�Ok��1m����=�9�#���"���r�b���Y
��		���Z�
e��3��a��F�������	��J����s�f�*��V��1��5�����C�B~���������XL8��I�_dB����DL{��WdQ�� ��w�="�iw����LsBv7�z�		�e��y|��v*>�g'9z�'l#{���c�]v���0����n��t:O�#!!�6,�1M��h�\>��qpd5b��?��������C����}���vb����`�d��&����&d6vEx�s����4[�]�w:dk�je���<��+y�q�3������Js�uRu��N�_�7[�v��
���V������g���^���s�E����k���{��p;��,H��q�U�6t����V-�b�������i%b�������&>�e��sP�����T�k
�a�SBzz���,���X{���/���Q��d'c;���t[����l��s�	�����S>v��YK7�0��]	JG�z ,{�Ogvk%���x������'�l��n����h%�4C���yt���W���~<H`Y�_H�~h���L����H������a�3��F���X��*�������}��
i'��p���:9�l����ZERg6[�eO
���2����)��|����I�[b?��-V��&'���M��M2�l`>+����-�	;��|��$���+��
���������iW�2��L3��X�$�:n� ��R*yT.���H_4�T�6����%��y��m:M�2��sw$H�/WSezX+J@��w�����[�����1�>�8n��j�H����},�c	�^H�a��
���3r�nv'mT��i�[�y�l����4����J��������&}��c�OY��io��s���Nk���<l$�>�;��~!�9�6��`YP6�'���#��
�l��R�?�_X�v��T��������]���F!�W��^/���/�q�����*I2�=�
7l�"i��{�V�:��Z/ud����g�)���kw?�E$��|����!�O{��������tA�D[����;y*�j9X)�)�,����T�&^�E{����+/���`oy]��dEPG�+	���$�<{~������l6�y���|���JTwT��}������j|*�z �_TX����?�?7�l���~G����h�nz�
�s�Q���y#�6�rLO����9��i��,��;�yH�,]�5ls�	MN�V$��iQy�3���k]R�G��4}��:��{�9�H>���f���K��0�u����k�#y���""{����i>�����ED�|�T��>���?�i������������y�:m,��X�x&���/�1�^��M���Z(��7p-�wft	'�BTDp����0i��
�BD�>/�q��+�+J``��|bb��BQ98S��w�p�]E�9�J6�_�)�:6O�����1�+���"���)����b[!!����P�j!"?�MDb�2���k�*��&�j�����T�b����I
��)����\�k��@E�M�=���k��/a���5t!�<��8-����+$Q�mN�dAZfa�yGM� ���E�����u3��~$��K.����h��	Y5^�3�7�P�"U"|4���ZK��3�ae�hFQeu��������
K_ds���x�M�X�m��\�_�)�~���WE[Lv���q���Z��6W�������MHnb8�����I+9����
I,�,��\Rdj��X����������`��&�k�~��m�B$��[2��PHqF��)qM�c����/ce���x�Wf��n�"�t������a�)`��,s*�ekBr��w�R�~/���X"�4E_���#mY��.��6��Y��B�S����K����-J�S�2�{&�h���cMP��,�$}1%���=���?��+De��y�Bn�W;��BX�����Q+{A|;l�����p�����Z�q�s j�gaX"��[�8Q���2_@���_���_ ��\�f�\��H�����w+@m�����2)�`Z�oC-�r�B����eenx�XO��>,LI�w����C[{�;�c�9���������2���
l�5�]���?/E�j�"��Mp���6�3������J�(DQpj�Vg�T�9,�|���D|��-�����-�u���(
)�/-$uL��.�3'��-F����T2���p��fJ4����>0����n�0%��]|�~����o�F��n<c���O�$>���@�>.�&�\����	���k�������X+T��>7���v,�#|��pK�d�x�2S��d��v�w�'������/����`D�o�����vI	�����r_:�s#���r���6�����$k��N�T�h�������-:I�_�#���A^;#�9��Hcn�������"��]�>{!�-���=��t�$���"������|-M"|1�wE�����OM�y��h�B-�
�v@gjx�X����^���Z��,>��#h��
t#A%���=����>em�����w?�g@4���f�1�UF.���tdA�F���7i���R�V2 �f�)so�%!��fG��m�fg��� ���RE`M>������Q�y�=ms�)%�/�tc�!�`KZ�"K��e@���bU����B|ZmbjZT�F&D���V���I����Fd`G]�<���r�1��!~*����V��������9�0����|�H��9��8/u����n����Q�NGr;��^�o�n'�e�o/$�;g4\�7
E�/���<��W�^rEA�l7��C����C�Y�)qdCf����'Zz�d����������h;��zR�%�n�<��$:b������u
-�b��9zs���T����+&�������
��no��V�U<�,+f��4�
;��f�Y�:�P��{�$���Pd���=��=Y������`f��;$�]	z���O1/D�}�f�Q2'+�;����koYn����������F/���[Gb����
�G�4���S������S���A��|01�	����	�#)�t|R����Y�4���5�Y�=7K��C��l��z���J������v������Ufop��"(�����8V��~�H��8�|�@�W0��uW���f���]P�~�}���?��h��.��zZ����������%���A���\�*:�uT��������i����[T��3��
�*�����i��t� ��Y	d~@���|�����C�9���n����bx�k��n��h�+C���q@#��8��qQ�}��	pF��n��7C�Q���BY��)�Z�7��F�*�i��];S���p����~�Z�d!��B�n�Tc�[&�
f^2�y�\7Q��R}^��Z"'�%��.�,x.��8��w*��O��^�gx���
��&-?=�r��?������<p8����4
�8��
��iCLYj���L��>�zR;�<�����
��^�Q\LWY{�<w�*Gyv�Z!x�	�6�_��!�o��
"���-�v0T�A�������,�ecg���,�������^�A]��5Zs`&/����T��
�����HD��9��������9���4]t���w��k�$A��������9��
�������:5g3���c��\��8�x=���a��	>D��a2|��~�~�7�."��G��I����V��/�t�r�)X�(���n����(������.��j��_�$)���������5����f�N�Rv�BP6}�1�bn<���h}�M	����@tLql^�l��;��3�>�nCr��K-�B��C��\���$�	�Y���`1.8:m�|��j|�s�?�I�3�UF�t�ZJ�l�D^<n�
Z�.��#g���TR��u<�Y����o��~�F��������rI�4�����h�a��[�&�S��@��|!_�=��E%
Z��j���`Q/3XL�ZO��1�;�/���~���78:�����������T��SIV�����p��c�O!(��[`_w����C_(��������jr�k�@:��'{��Z�6�ta1f4�Ao<��k��;���z��?���+	�a���Ld��l�,Y<`��f���DTfw�q��w��=[�3�,\7�:����������c��������S�4#��T	��$c����
�a��x(,#�j�{y9E+���O;[��%��*��*�g����\I$�6�B���71�q%"�2z��;~�xE%7��dlP]��@-�r��&���LT�Ld�n>
S�T��cp��+��h��f���
�����}�H'����h�=�L!"������y~��X��?���a�^+�wxp
��k�W ",���G�u����3Dr�����B��r�(�3���H��G��������4U`�������QZ�i����A�
ts��������]j�"�~�<�`�����n���*�}_����=�H��s�FlZ�)@����������<������\���`�����`�T���������nA
5�@��t�+�>�EUe��	#�>k������Q�}��*�(d�������"�s�]TD�@4J�<�}���V�����{��0������)m���"��j =��i-�3ts�YM=��L0p�I>�aK�����QBHc���%�*��@v�9r>k?R�&��5Z�L�I�N�$+H��>�V5��0��=o�o��[Clf;�C�������>7��d%��,L������e�k�X���_	�	P���V����!�D��|��������T���%�I�;��>�/H��9�l��e�}!�N�k/�j����c�r����q�~�s�6z��C!Z���(d���^�����CC��0����j�ny�Z�����������1L���?��W�K�1��75��u�c�������7���~b�v�N �/������������A��vv�����C'����"c?��M��f%j(��3O��_�G �/
\E����z������{m����T��;���	�[Od_�y�Mi	a��r��3��t���@
���-���G�.�����?7�?�M�����spo�fs����6��.b���p���H[��b�I�����d��j~��?��-;��R�_�I/�?+�a:D-�r��~������^ ��J�
f��mZ(������ T'��D����M�.%�_3�t|M3��)@���Z�mU�<��
�t�G������QX�m�������(�<�1=����X��8��H�����Q��C7��z��z�d��$� �K�u�7B�;)����>�������Uz��@���[oD1��<;�k�Z�}�v���K��W���y)�*A�c.2���Xqc��3���~2����h����v�O�=N�ry	r�Z�d�����i�)�U�`����b�y#-���6��h7��moN���|��+67+�UB��%�V�}�}P��8���XW��/�
o���^��D�R��7[��
�ZU��<�~i}�"P&�h������/*���Q�}�"es��S5a�_�%J	�$���kj��k�	�����6�����������������OG�����}�?��/m	��2r^��S���
���^�w���C"���+��^�[�kOB=�m������[������M�=v��r����	x�@� '���){�7.H�FPW* 7�DY6�"�"M(�����q�0{�XQ�BMS�j�DV\�������Hx;���i���DK+�|lZc����J��1�=\� ��92����83k��B<�EQ����h~F=�1�
�OEY~��/L��jBty��8L����H�E�}g���5k]�%��2W\�3o�o���$zD�@~9-�a7e�I�V��Pn^K�t��D�?8x������ +�i��������e,D��=�Uf �,_��`�ic��j��=zj�8��~I�����P6*n<�������C<j��e��Z�h����"���� ��s��-(��<�}���IJqZ3��/�dX����kg���lC�\�6������.DE(	
��U��V$�f������GE	��8����9�����0�<|9�����Q�<07���Dd���1�K����&��U��#�X+$D��p���\��8�.��c������2��z�<��0�bQe��e�!�]}o�~�&Z�v�4�lnAY����@��hb�JKV�R��H�a[�$+�`��|>\�:n������{gS���dNW"�e��zX��c���E}��2��X7F�a 3���*������E�%M=�.%�ZQ4��o��U4L��u<�0Y����g^k�mjE�8�:�M=�S�Q]��T3�<�/�����1�_r���0�z�,��K��ae*7�b������g��������e���9'�S�dVC`V���wSpM3��eZ��r�i-���������i-Dk%;���c���.���Y�lY-�G�V��
��4��i-hr������5�� D���WX���a	U��[��iS4�Q���[�N���E{�+��g1�@-�~������z����@��|�nz1�O�y#�&fv��d��*JZ
�Z���W�z#�<xt�4���g�L�#@�
����u�c4�}%�y#����'�	/D��d����|2���Y�i�O��YP.�R�m��i%Of��[� <���!�Q;Q�����z����
|�H��$�d��id���F(�G���!?��~E-�F,r�M��L�\���vj#c�"VA��l�Q���A�
`�uA������-8_�"������Nm�
�T�"_����]�5+���.���!OG��.sQU����ww3��:�8��Q������S�L��y	0/��WE�4��z��=OEx�3�LF�aa�����0��u����.(���>�D"�1m6�Uv��/�J�4��:c�
�����w�=���h�p��)��w��utab�}[��o8(�U�q��d�If�^Y1�:���n��.?�n���'��s��15�'�4�U��,N(��d�uE�3	��M��P�j�.-��y�jH�-�Wt��n��o>Os���u6c���_��f��j��?_NN�J&��Wp��y����g=�[2�_k;�H��38�������Z��&_7�d�����[4����\~7t��$������kF�2�_���`J����1��K�[�����4� ��1�����hHRz��Y����o����K����HW�,�T
���	����C�e���Xh�A�&�����L��_Z���y�E�43W����D�����VO��D4#=�
���*�
�9�m��1�j�4W�������M0�M�n���u!b14F�����c��������PQ����q�@T�:37�qd�����&��C�J���Q.pA���q��MB|��J\��-�8d���0G�����<��x�:��_��� md�����1'H�'��\���"�r&S�q�.�#�a��sY�\cGS�OIJe�DN��V��3��l��e��"�4��2�JZ�����6�2��"M	���t�u������4�����|a�F�HsX��e��D&7+�2BV�@�k7�'��D��Gt��>XL]��y1S�����������'���?,D�h��"��hL�HU���
�1�P!-w~;�$_�a7	�+B"�0	7���":�;�o���1%S����(H@�<�%��8S���2����\�%zL���k�����]�������I�y�WX���D����"3�^}"��G��{��y;�����y��2�����P7x������3M1�i�P��n�k#�B=]t��g�����������(�#z����f��
if��x[���
&������6�Z;��$�	�jTc}w�lyx�I�o����e���b3�vN���O�5(^Ddhmj<��#�+��o��&������u}���<`����6�nqr���)���Xt�������*D���V��Y������a�����j�Pbj�W2+�;X��h�i;Z�x����A�e�3]��f��~�|�K*��8xo�~��AT4��:Z��!�?!�����{�rwAMj��Df�n��4�+����Z������_$�RW�6.A���d���k�^WU�VSp�Y�������'Q�������;�B&��%�0�A����� M=���hB[�4��Z��7E+L��D�$����,��2��0Kd!���\Ay���O��Y/�TO{�>�E�5�����=!}�o#��r	�����LM�Z+5a
����JjT�<'�[���E�
R�/�ZBZWW	mT"�UF|���-4���j���29����PK��Q�.�m*H�y�@�&�&��O+�|y�n^V���e:up�T��i!�(#�P�E�No�Z]�b[l��
��2!!d����Sc��*�������G�9@B��� 	��hk���l;a�V���Z����8|xN��ft9��i�YDN�?�a��G&*�L�h�v����*�`��T���`j���!Lf��q����*����9���\�	��,���O����=E����|�9qH���Lg�������vz-V`<r(��iRe��S������u�R����-9`�pb�"�I�K�7��m��������]3_t��I���9�������U����	l��uA	����.s����k���-����|I�������G
J_�B@<[��O{}]�>F2�4P!I}Z!���Y���a�u�0\��N2��)��a�����)n�=�/����?��:�JC�O&>D���#<�2�-��f%p3[�U�f�ii
�;����|����&/ja����s!���>$���O6\7W����*�K��*���b
�-��T��-#+�x����W#�]n���"�n���0��|�%|�$#��V�R�h)���E����2�3p��5f�l,5�$W�����V^>����.��8me_���&�o�)a%�yA��7Yi��L~��f�f!�7[	FO����T�b����>c�	��k�������3��������
u��	����y#�|2b��wK|�B�1S@��4��nK��<)���I��1P�B*{�`y~W��I�����sq����{!}�����"�Z��G��E[v��lys���2g������	=.k�R�����-8���,;C1�Ki���2��S��b�kaz��}�H�;-]��g�����D|����
bC��8�3a��"7&#��Q�2m{[�P��L�o=�0�+L��UQIw6����\aJ��8������7��Y���K$����e�0[�ic��>o���W�9x�p-Ipfd�~���:�N=��"���|N���J�w��K�����@��c�	9�mn{��|�)��+�"?i&���fd��UdeFs���?De��'�9�w<�E����J03�y��h?�\�\�D����I�(�}%K�Z��
���s��y��T�����]W��_�>�	����1��"��������0���2R��c��6�9�g�6xx�B���-�� #�����m'�2V�i������������|,�6Y�k��A6E��owK�[/{v����XZ���C��������/�4��T-���u���|��}����>/���Cr�� ��i�W�m�����0��z3X%�vH�
beef`|�Mn�(�;�+k���`J��=:���T�
1�;���,L����u���R�7��T=�;-z<��W��@�\<��]�N����K~����
�q������y\_�i��*Wgc.'7��r�8�+�[O;!*��@�)�X-��'b#�`1B�l%L���&X�8Wf%�Aaz7� ������ 1������Fwg+��rO�^��k#v_7�S�/����1�������=�|����E������>����G�A��v����]j����l6���j�AV���}�O��~W�8���)w9p�s{C��u�7�|H��o-��6�������>pM��7[�.k�=����w��$��%[�	9��<���f�0%�XFs�� �2��0Y���ky����,�n}Sb�U��\G�}K���}�=�39���|i(�����9c`�Zm��j���w$:6X��-�����!���x�M4������@���]���k�BT����q��-���W!���v�R��Ov�S���v��������gp,����s�L�$8���v������H�"�2
�8���O�	�k����m�:�mu����>��1Y[�f��>�;�b��mE������;�@���T��������>�
N[����@n�x!|G��^@Vd|����:b�t0���e�����^>����/pY����e�~���0WI���6_�����
�������X'��ee
(P!�_y�'��.i����������
�9�~3-���w3�����R�?
8�1����i�y}��w/+������',��vp�dh(��SC>��?��VOa��{��/�r3�,G��?����������������y�?CL~�??�����Y��g]�V1����?���g=2��b����?�}����y/��Z���Rk�\k�~�??����+�Y���s�5��������y,�
1�y[�l�z����OH�nu����WH�W${��B����������������w����f���������k��Z�s��b��X��b��Z��������>�����c-���k�G-��2����?��Ks���\��h4�����|���1�������b���������*���U�{��}���j�X��U:�$�.^!����B�������n������_!��?����w��W���n������_!�����B�w{�������������/6��&1��������b����_X����������o�������m���(���G����8����Q�nu0��u�q�[���h��]E�V��(���G����8�����Q�lu,��e�_q[���h��UE�V��(���G����8�f��Q�*��Pt{r������fc���u� ����g"��{������g[E�}-|�������|�E�},Ugb�}-�^��x�P�����}����c-��������I42����|-`���KH%�S��a|������,������kMe�����'��NN�H�~�
@���@�<���.�y>_�LQ�Ox��	�,�7��\&����A�C��
I7���>��P�q4h��*@���FeS-<H)��J��K����99�����&`��C�������y���?��h��G��j�8�e��9Y�l��gV�A��uf�GeZ�j$dl�p��s�"�eQ]������B��i����b���@�~Lj�:zv�<�m������k�Ye���]�-I74��HeU����)��)!��,,�<������,Yn�����@���e�����]��<*J}��k����/�^����v7��)E�o�P%�������=�$q�P�<��m�Z�g4U}���82�e9����������m�Z�i%Yk��_w�����Cv���/	��\n�7�����$�����>�iJr���4�.�D`s����4"�
c����L_���`1�vCfkvMIX������ir5����c�'e�/�p�h,Q� ����K)�?��U5��:����6�$�:������ZC����V���y���y(j[�|���v!�a;X�s��c-��!���>8��S���kB�9��mT>h8��H:m'��xXq��������!��'`����V\�S]q�����Q(����G�V�e�K�]v�*f�Y�Ad�vY�Aj�9�6�o��UY�V���g$��
���;���(s*��Q&�2"'������� $���{���&�{��r{,U�p�)��G��$�2�T})����-Q�<fU��y��S\�	�"���U�6����Ji���U%����OYT���G.�7�D��D���7�#���d���;i�20_Qdz�Q�K'�+
�2Jpq;T%K-u�����E,}����k�E<x$��'��-���U�cc�<�?�;As��K�djk��Vl*4D��,���.�"�J��;���2�i�$d��R�uEw�
��T��e�����8����*��V��[��I�T�S{�z��W��Z��~�=�a>���6q�j_7�7z
]�f��E������&��OE*�	2�Hbt>{*5�P{�x��|OX3_A�2�\��k>;��{$��C~����gy���{XT�F�4Cq�(D�L�kA2�tS�x�RV�d����76k�%]��C�:�����:4�
�F6U[|�?���5H:J�5��T�����-���4�'���A����~�'����������L����s��w2���~�B�W�r�U���_G�<��h�iQ��R?\�W����Y�����2�C�]d�(�BL���dp����u�	�zd2p6Z��5���1�(��ZL�C���_�$�tSb�N}�������4f"u���qL�T����
�yD��E������
���h�D��,[)4��
�{^�Z���|�J6��A�*�.|V1�k���U<�
��1���LRw�S�1��T<�.}�y �x���Xy:����uX}~����J������n��l��n�|p���k���H�=�}����b!���H�����W��OE�/���Q��!^}OK���*�5�$_<.���L��%Q����e��XL�bT�����<5dN�6�{O���A�dY#$�h������,��rc�`�y�?FZ\r#~�d�����D�6�\��{�����#8��u�1`b��{�T1��0�9��jw��^�������������}p���W"����p�H�/�#�����t�k�vC`m/kz!B=z������f,Q��^��7��m��T�2�P��S�1q������P��`n��	'���CV�������U]����j���v�W���Bwt��`7�}c��L��_d���3������R��8��hZ��.��`��;�a�\|W���[fpX����x�Y�:gb��E7�&��`��`b#��yt9����	�S�w��z!�H�#�B��`I>���(B�r��\@���r ���� �Jy^>"�w���4��E��f�����V�-t)�v���n�H������.���w����-
dg�wIl���V��uf�C��%�7�!|�23K��y�8L�lI!��R?�L8[I�����6C#7{�d��@K�f��i�U��n�L�\8k��W��o��6�w
��-�}�I��s��"G7I���m��:�Kph�FE	���O�E��=+h"c��B�GK3%2fY*9�EL����[��']2��������"k�������������X�$��4z\�8H��l���%j��
�z�.��;�Dp��z%f��	
�"��6m�Y�%������c:�pt�6���K���_�1��T�%]������&�Ql��3���:"'i�N�
��Id���u[�i>������&�S�����<K��)�i�lu��O;�bTr<�M\��8�JJ�<\|��`X��M<���
�����������J��Q{���q��BM���6�$�OsD�k���������t����_��}{@��W��~��3��B	��=1C�*�����]����7�/$��f�71s�B��X�C�,�i�2(�2��i�{O���B�w�9�Yv�,U.�$w��*�R-V���)���8���lS%"�-l�|8
?�)��X���^T�CEo/�d�����<��|`q��������"�$�7��=n�y	_�2����~��1�v[��k�������I>����,���g���T���`��a�_Hj�������'���'�~��W����S�1���i����Nkwh�������)Ws�$��y�E_��W����U�ezgjZM1������K$#�����f�C�������������
������X���|�Cdp�,�{��mI�Xk�P�B�p#��n1�0s�>~	��Z�.���~���`m�6{j�X�"�AN�n?n�7�L���Hn�N���/*���M���g�P���iV�,@C��� ���c��|�5=�*^���^H]��.���3x�\�����5�u�zZ�>��� ���g������@|�P�S���G����>���"q��q����{"�F�l
tj�~�(U�&���^T����!+������\�W��4�pQ�)��� !���lG��J�B��B��>m���v�2����f�J��o>�x�����@DV�������@���Sre�xg��^�
T�����������,O�>z��X���r6�����p�WP������P#���T���_l|�����bZ�����9�,_v~��Y���[��������p�~����^��h
�[?I��=1�����"C���@6W`�'�����SV�J���Bm��;hf/C�qgyg��;�
`�r�9��������c ~���F��npO�u�{����A?gh�t/H\��7�����9�ssS���x����V�Hd�4��I����l���s��$+�?���I#��m z�����#�����"287��>����z�����;
N��|H�$J���E�9���8tq����U��L���D6�;���J�����������������
����0l��J6^�l:^���x�"���Wf�9��J!"��	p{(F++�i��t��G+���hE�S�0Z)D����/�^��9��|����&_r���G�*J���9�#*E�
��VF���y��uI!����3xW�7h���\�=E�V�#��l^��x���>}�!�w��!F������� ��T�F�@��l�� ^EM�����]g ���?��w�D����E�0�j
n��K�p����� ��
��
D���!�yXD�cx	8���
��^�*�~.��l?o�z�so^4�^E}^1�{�=���,#���^!R2�z`o�����H[������������czA_-�c�y��Yo"��R�R����#s���{4�7��@���~"�W��te�c���E���~rQ���'���zr�/����D��^��uH�M�eX�`��.�u�_I��)��|P����$J��r��;�5��h���D��}K��o�_[�c��%D��<�=�e;������~�mV*��&ZJsr�����M�D�^��|!nL�Y�x��Y���e�6���?.�?�5�����������s73���@Z�|������^��"���Ue���@oZ�����6��smTg�b�@s0`�T���.����D�w�G�M���wJT.�B��/�L>��9�d�u��:l����D).�0�J�T�Se�����`?�,8j��Jv�Wv�g��AZ�|�L,�'>�:��r=X7��nQ��*�f�����l������Q7����|\�g��6Y���=0�n������1��������L��_OD�x%"_���]>�8�}^q��2pW��^%j���E8[��,�Bp��#]��w�����u}f��BdY�G����U��Z.s/kP�4|���0q��HD���
2�.��`�h��Y�;�������X|�.L!"_y!��Z����w6����m���p#���
�����+(�8C���K$���i�h�����i��L��.��t��:}���XS�
�e��/�q}�p�I_� ���p�"�&uL@�\B������u#!)\��S���"R�~���e~�n/$��h�Z��w��������h$��S��nf?@�-�<m�N�������G����G���?�4����M����5#�8+I2�[�:��u���no���N�d���~���v;�B��oC-���T4����V��������.����z��}��jE,=/Hd_	��L*Dd��eX)2�
v`��lO�����Iw�~^L���p,p�a��)yl��n�����-h����'������C�;�����%��~������#�]F6[Z�j�S{!w_^�$��Nc.2���e���Q�a7*B���N��������t��������;)���46+��]����,���/w��Gw�����-��W/%���Ul
)��H����!�V���Wf�v0q�E"r�
�|S����n���ES�$���~l��n�/DJ��	)������4GZfu������������M5��R/����g�m��~/�h��$�H�$��P�#�c�0,z�y�2%�!Z/��
6i�o�D�D�GD����e
Zv����*D�g�,�+��s��^�/`������y'�x���f�^(r�.sHu����kL�7�q�UtS�����������1�v����&8pE*���S������<����s�b
h��O1�B	���1-ToS@���F0hw,A�#�BR�]
��<~*��e������iU��*�Zp����W6V
��BB�����-q~��D���2!���*�G�|�Ta�%m��gHU~�VK�X�i�;�Fbs@/4��VL��q��;�#�|�N�����$���K���;fA�$�Up�!��g;q��	��*�_�[#_�~��s�{�&6�U�g��vU[�u�-L��[�:��MU����P�_����?F��L:��u�kE	tn���{��3���	�~��L/�{��;�W�@��'����(;w�"�l'L�He����q��
��5!��];?�����BDV��4��eGR�8���s�>��1���_�4�E��D
w�/���B�����C�������_���.� ��4\t�2]����<�����J��"�e��&.�?�!r��;�_���*�0w*J����h/~��J���e��4���y��=��
)��f�"~<>:�`7�X	�f��O�C����LT�!�x��Ym���PR������n�GE
0����o���I�r.��+Od��~#~�{��>e�,���E�*U�]��U���~#m{-\P[8��&N��Z�h�.�'��f�����[6��Q�|�
��_��U6�K������p�K�X9�e�%�����B��|0��2��h/68�N�i���.Hm��y�H��@�aOP�!#��u���LV��Wp�^/4��T	�\8��*��"!���%�k�G'?/�r����I6wEM��g��3�����s�.�8��������b�y(UOp�	�v�O!!���������]���K�-�0�3l�[���2}��U��1�����N?V����������|�/4.�2�b_�u;�,W���=�����"$���������������B���jy�	�V�c�*�������P�H?�I��-�e�`p����3������j{%��5��`4�������JM�^��tA�3�L��I���h��d���w0���L����r���E
�3&pN=Ph�s�?/�]������`��� ?��w{�n��T��-�������v�U!����������b���	��!�N�U`�qE����i=��&^D��c��n��������.ufB�i���JD�O@;O��
��:x=���)?�e�Kv|�8hv�v�Qs�N�������D=-`�7�R6�n��{&@��b�lmo���-V���� ����Nt^����Ec�I������}xmK��1������*��:G����H����T�����"|�$�H���m#|5�$�����j������-��U�C�+������%�����"Y����Wbu��|PvV�3�Xs�������@�������j��S�9J������y$��(j�c����x�ml�|�4�x��9�!H�l�#��S�{�4R�-�c��N��[	&�=C�q�H%>�@�F�?���������40����BlD�piOc`��, D��n���[��5�C���~��Z� �/,<�s	��5��h�N��x?YR�q��#>|��������6V��SA����=�GM���$D>������o>9u�/�I5pY�z��^E>~���X,�+\�~��A��cV�z�+J���������0~��u����3�����-
TW�^��G���,�GA��X����r�-h��/zf�uX����v���tX����6XP��j� ��N5�Z���y�0U�<vC?��Y��d
s�������L���s�%d�b���0����,���������P.�xp���E�����G�k��sSF�<�|'�S��dpMy��������E�[?+@��S2/�����@�����-\����������"�'o�i�5H6'0�
�����o�Do��ui?��~A	���!����i��W�n�4.��+Q���Jss��~*P�`��F{s`���j!a �FQ+�n�
vz(#s������3c-�w�be���1=�����}A�����:�<�i&}S��PF�n}?�6lx��><M�T��HCL^,����3����5���5�0�l=6�Q�V�=��8-kI�I��<�
h'��i�T�v6U���+�7�" �Px��FH'���?%pjE��b�������j&N�-�p� �	��k[�0�����/Z�ba�����7���M��"��Y6];!
r����.��V��LE�y����5�E���_ ��m
;�iA	�=����=-L�bN'�aNW"2�!���mi��m�"3��f�}
������HR�N������]�I?�%%Szw���S�����w����7KZ���\� X��,�D��r7��EY�_��i����D��VQ�fI��U��4.[�����fKZ��	�g����J�)X���Y�2KZ����uKzof���V$�8aI	z��>/�-�m����PC	�lI����V�5a�ms=L�u����������P��k�WM)�&S��qY�/�Rw�����ugc����n--R���MVf����iu����FP��
�"A�#(!O-��Ph.���l�6�2d� �����%y����������R��(`F>���$L^)�� ��
ls�3�Q�Eep�C�C�\0�+�T���i��|�8H�g�W�}�H����Ssd�'S���-��PI���m���l�JA�; ���IQR�l���4���������$IU��\�:GZv	f���T� ��K����W���9UBU���D�r�V=�=e�MV���w�����q�#��`&�#G������P�)+v�$eM��������W�b��u�j L�K-�gz���)9�$I6�>�3�����_Z9W5��\S��QS��*�w���k��h��1�O����=R)�e~\�{���w�`2:XH���T��F��n������?���sn;w+YE�O4wGU����qUV�!�
�hi���������z�����������l������s��4O�yr��r'�
��#ZI�n1w��}�����p��6�r<{ �P �'�O�9wP[�t��4������	��NE�uH������;%1�T��3Ud���\��Q!�c�{���/y�-���r+r�T��2�5�^�������a�����H�S�9{����+��g�+�A��8� ����yCd������K��n	�l�y��K��W�<���&��zvHI K���a����C���#�����a�,q��B����pKwl�m�������pK8�!�-��^Gi�
�w�iL,u$_�x������`]>On�OZ�_,T��KW��* +���������*���������]N&����IZ�ag1H.<���ks

���VNO0�����������&��q[.���$3����
nwW������'�Rp�2�7���X8�	��!q����40��th��}���j�7Z��Z�����i�Bp��"s�����w[���N��n��l�GY�S����o��p�f�"h������i������%?=���m]�������d�V���\�M&Y����� n��ze
tM�4P[(����}�������br=�����}aA����Cy�D����
�`��������s3�9�do|v���R4�J���%��j��~
A�Y����=-��|�N��������7�-,E�(��m�fy[E>ps��a&�3)���H���_�����}Z�UI��b��-�<�hh��
8��X��n>o��~���9>/�6d���EbR�GhH��� Fl�A��eZ!�6���6�,��Fl;v��i/2����l�3g*�y����LJ.�5������g���]���Q��L��e�3
RTdy���fJ�!��b��<$1C%-3
^q6PO[�RP�QPE�3
j�-
�"�I{�^}-H��t�m	KW=���1��|��a��GV��>�Z0Fi������m������6�`>�Hh�f
&+�2r3]�'W��h\97�E=y�����*��?2���C��c������y>�b���CNWQ�~,cc-�1s���������XK~�\�c��>f.�1�R3�����
�{�����&���X��N��.�������X�^j�����sp�������������L|���>��?�W}�U[������O�����i����e�P�G�Oz���������&��5?�y���"J��o�q;���O�������__����q���������������}��|���~3����7��uM����V��~bo�qYLG"����!m���������������	k���q���L��-�����4���4�o�ew������b���FN^�l�,^H�n7i,X��Z�o�Dd��� ���%�'j�F��o�W)Q��G�t'�|n�^J��\w.l��Y������CBWr����YE�S��w0x��'��235/Ht����*�>�0z<�������������H���n�J+H��<����xC9��+Y7]�H=���O��;��rj-�������]I��jg��� 8������P�q�dV��:w�'����i�%n�Z.2kP���x����m?xi��}-H��
`\Y�"kZGy*~������j�6��}��_r���j���Wz������6�?8�GRr�DdV���H;��!j��E����n��QI�,Q���1�<��@�YI��l�����y-�LNqd�@�^�JY��r�|_�;	���n�Y�f�r���~�220���$UA���B��������W����}�]�a��n�������<�_�������8z{�n����IF ��nJ��}1G��'��F���J�{��l��opq�#�
J�`��<=�����u���@0\���RQ�S��*�L����+��j�I���a�[�*��<�M��"�SA
�P�G���|�;�&ppL\BM}��3�BN��S*��(������1��z�[�;�7�(��0�� �IO�I���d��_�[�Y�f��E��������M���e��7�<��AY����%�o����7K��&80���_���7��[�)u���8;-�v3�V�2C����H�j�� 2j���h����7;r9��mg�����X>jN���p�jlH"s<Y�L���
jJ�Hu�V��~�BRV��w]�t���XIz��3�������<p'�uZI��Nn�p�����hA�{5�/���!j�E�����f��dZ�MW��w`��i�J���z��������<A-Bq�U����\R��y >B�H@�c.�m��@>��M��q
I�����<��a8����������6�X������7_��x�9j�$"e;y�����S{b���L���S��Iw�����hI����<b���&��9W$���"<��IQ:U��&�z^a����0$����#9l��3�l�j�f�!����@X%�Oqk�S~^HN�z�0�J�(H�QM��0OO���N��x��]��P�V$��-��*S��Z�/��_!!3�wOs7�����ac.���O����D?����"����s��$�����'��x���f���m�I
�����Rp���
7$	���L*��=V`%Y[L��
����t�m�w��i��!�or��}_a36��	�����
8�����0���+0�u����U�e�&m�������-Tp�80M�
�X&hs��;����G���|v�yQ����=�W��l	y�(����DX����������V�	���4�K+�mt�q���3|���v����#=��4�6�<
jUZ�q?�������9�����D�ssM{�;x<�w�-�I�5gB������3��$����0�
���l���oo���s������2mi>�e��I#���2��#�/S�<Ls`���D����<���nf�tp��Es��5��4}�a�/}���JD��F����)�����*Z��%<���~;1��h25�x���
Q��a�������m��I���Lh��S\H���Nw*�u�w������%��/kS����l�2�����*�DdwK��T����I�
�#�;��G�2�`��RU&�.�8����EVM:�%�JU���B-��(�I+;}��8��U�H�y�#C���T ���c�T���M���9+��3�d�L_��"�������=Ja�TP�P�b����y{q&����1#!S�������o<7�1��
y,V,�)���L�_�U�>������[���e������N�_����H�����:.�_���3���{D�i�|�iN��f���H��/S�sx	��
<������=�a�c�5���Xm��N�_�4	|��g:�9�EFl�
��y4�]T$�����Z������^H�u�y�n>y�AA��[v���;a��lbf�w��9�H����w�L���BDu��/���u]C�E��v6���@fgA���K��z������Z��hat��"VGS��t=�2+���-�I��d�%�\������)���3��M(�!�t�_d�54
�����|�V���M�dlg0�S!MA�5:�(���8Y�z8���?�cGA�����
+�}W�����eg�tf�V�������>��f���Ew�U""�Ji�,����3,+	y7��A�V�BX������O)i�\1�0��
�93Ij�uW��U��_�*������`��l ��c�2/�g�*�:��2,��)KS��}VN#����~l�1xR$�����>��ov������6�'7�������Z@-:��|���	H�aW<G1+/N���3��nIDe:�G�����V+���[(����J�����
�&�D����������m:M�2����������q@;>�������q�\��n�J:O�x`�6^���B~*"k�N���=�|����h�5p��!!���N"�����t=�<�����+;��c���xs����/��A�ijl�{!5��1��S��7����m�~�7���<l$�>�;l�~!�9�6��`YQ6����#�c��uj�K���~aA���R>����?/cW`�D������6������/����n��I�*I2����`P&��(�4G���n8�Sd. "�y3��v���o~�c��
0"��7�7[��>�
�A#
���)��S�V��J���&k�6��#U��8*�_O�~>�J���`OE�p���/�=@�+�����?�=��/�y��lh�6_;p���JTwT�����*�Y�%�5�������oE��>X�B2��w�h�������mfT�q��_�`@��4�F[E*�O�F$>��C�`�"A�|B��/$���:����A��O��,)���J�>��}U����;��/$��������\���+��K,��������A`���a�������Dd��H�{���J������n�b~T����(�
��3A�<i ��	�gbz�w_dC�.d�#��@����B��xg��%�h�Q���1;�`���v������E�#�qc��%�c��������PTN���{�f���`�4�����7e"_���4��{��M�
��0P	ESp�my94%u!!�-z,���Z���o��GO[9����,�����s�2U��5BpE�jR3jJ<z�>W�������n�e�nr����KXw.o�%���m���X8k0:����9U0�i=��Q�
5����K��K�wp�f��3�P���=X����y��@R
���L��&k� U"��ShT�������-,��
����@�w1�6j�����T���H6�c�w���E��K:��&l-���_1�������~����\����e�?���J�)/$�FE�����@;�L���2�>1fK�_H���]����H���[���oyY1��'�%�NC��}OkDu����U�����4���@���Me�JoQ�z���G���d"lmj���~�a��o�(��:�M��f<�\|.GY��K�F@� ��t����W���R���_��XcE*{W��������]��[���������X��B�u�e��}�?yA��y�0[j�R`�k�o�������B��o��q��}6{��+Zy�3���O������7Z���^xBUA�m������"��y�T��,��!�5a7�(
yZ�B���yE?e����E��f��@�z������Y����7r$_	�:hv�&���]��4U���6��pHV��������tX��d\-��������?�Nnr��f6�JBfLc�����`��,����T���U��1�}cG%^�[#�I����������z#���e����m.{EtR��0s�� �%&"�	8�P�w�:�l�	��"9#U�����J��&26���P�y1����c����4������=RQ�<��i&Z�1��$��
[����x�����a�n����;�)�|�H�HJ���M�����I���r���qN�>_w\}�"�|1���&�'?zs����z�6q2zrc�/w#q��K���,
��rKWKk2�b��U6I��r��
�M/���K�����F�:�1�l�${
���������9�E���ev����1�#I|t$��2�^�*��W�����2���n����G^���\89��,��D����8+]=����'���jN�I`>9$���_��4���
	��U6	��o$h����)�a���h��L�����n-U����9�����.�etCJ��$
�+���T�G����,�.�b�t��e�~��`�S�t.G?V�e����n?m�	|~��7'vj}W� �c���>E��E�~��/��l��gZ$��]A��"h��H��|�����fQ��m>/1���Zy��U��G�����a���h����A�	�_dy���X�L��9��/ �.��I�"1�I@w��|��T�*��
���y����8i",�9�GIr�~N���yJa�H����f�L/�YC=R)�9��
���������Y�N3��GM��2�mZdy��'Ca���df�U��=u�/Y'�V�����K$����CS�C���D6m�Qs��w)O����j�f���o�Y�r�=%�Xu��[O�E>-yn%ntOL��|��<����%���k9�yc�a!Y�d8������
�f��U�����1�sz�X����n��N%�����+hA���ix�bV������������L<���9���7��k��1����aX��mC|�v}��"�gK�D3�����m��������TZ�����s��:*H�xZ.�Jz7k�u����\�#��#���z*���B��@*��i-4l
S���0�?F�/��������?�l<�Io���-�i�4j�U��_��D��p��H��D��.�w&X	�Vp!�����K�^��7v��8%�C�|D�{��C*��-�$�_�+>�A�������|3��5�\8j��,n	c������W?�I�_�=.�(��.������H��
�!\H:�n?~s_���S����i_
H�8���?��~_��U4A�N{-bmu+����mvl����9��o �"%Q������e�|0�$�3p.?]���C����H�E��b�H�p��Hny������d���~^
[�W�n���l&�bMSk��(I����Gf�"��Y�G��8>y����D�Z�\4u����d�O������y�Id�O$q��/�AP����uF�'�Z�EO�|uf�
��o������e~��?��6�����tD��Gq�y���2!b��m
��,�'h"�p��������~�:���'�	&���"B�t�EDv��E�2�T�L����T�xH}ah��>�����Q����D:M���O�C���?�x�,vz �b����d3(�0?�2��^��\ Yw�f����)�D�5O��,�{Z	di��H��}������x�A"F�L^��L����� &��A>_|�`����B-���AF��.�r2q,��R'���E���D�B<M�t��g!���0�4h.2��e���_�hf������fP���is�a�tI�E1���G����&��as~�Z�#��Y�F�$��<�:�#�{�Os���\��	|
��OD
L0����O�M��4�������w����t%������Ydl�T���y�u�%��Bb4�R�u�$������^�Y�����Tb>nN�<���b�#8?"��-�z��U@�*kg�0�/O:
S����+�������t=�+<t*WR��M�c�On��~��G�S'�dN'�e�~���cM��ZT�3�G:b������ ���+�E<}^�����������J*����(��#=A 
/D+8�O���d��%1�[�$�[[���K'������\�,[
�
�l|�I.?"�6�]�$������������_/L�G���"V5���$��]�����gg��>H�~��1�9qD�Wg�\���x�)���gE��;���'GY+���,�,�jY@�c�Fo����T���m$��m(����I�
�/[��q�1���a�����j'��*������!1�?_�����
\P"X�Fs�YH���A��'�N2>�AO��wU����@������K�P@��xt�a�r�/��c
�*��GrV$C~x���~A��7=������
�'�A������7�zpL�+�����5Y,���,�!c��o�LiD�6M;�a���k�&�3��s��D��P6l�v�qQyI�������l��L�.FI��D:��h�'�=�t�"�fy��tD����up��)E�uf��/\���V�U�\+����pF��V�d�j���`@�2��`����{f��]��K���+J�;����*c��������:hT�j�%����5��3��j�e�K��%��dV�Vm�
Cg�1`o���1V!�h�,�c����V��,���d*������\�H�.�&=l%d�:4�'���2�����_�O'��?3�Bb������O����a ��LW1!lv�:Vc�d�b�u���/�G��C�Qx����x���V0�������o�=�����;i�B�����~����}}����j}���t�n��-y=mYh&��`�d���L�����<����*��k����|c:�����eU�j%=��k�����3�j�����C�����]��#���D�����8n��������Nw7��������a�v����	0u����a����f@��+���"���L��:��b�k�q�n_&`�yH"�$`���(�6y��^��,���$Q����C�����YN�z'�"�0��
REaF��T�z�BjlZv�A|Fnf�vP��G����<�#��s��+�m��V'�'����P�Z�cp���V���0N��$
~�a��������F���Lsd�R %PX�f�6M^������
'��Imv��B�,�3������|s����������x���e�[n�z���������(]��?_�'+�E�(�N�`&G_k��bDpd�����F���3��E����@
b1
H�E��9R��7�C gI#:���2n���"�Ctq�z�N���u`#P�����?�X8J���Ag�v���Z�>o;L|!�j���H�;��
��
�����6�q�g��(��,�)�9IT�����9)������Z$��uMj�|�7�6�G���z��6��iC������_�����������/_�_��-���_�����z?!j�U\r�c\����}�~���#�(�u��zk��f	W=j��j�_h�?;J��	�m?�������i���p
\��1�������^�s"[��������WA���z��gE*�'a"�\��jMD������Y��DU��>;J;x���9E��BY�����W�
|v$�`��p�����x!"��-2�����,+��8m���i�����������L	�yj�gGt��D��l��|CR+z���1��������)�;h���s�3B�G��Ao��}}���jB��R����HK����{X{.����/�E��_K�N��OG�K�%�Z�VD�Xo��*A�����ttqB���	S�{:����a?Qu~��5���kv`��T���^]	k��[_Y(,������O��#���&����iS;f�nRIJ����
3����.Hs��H�8�1fVd	1��>���"����1�1������.H��fUK����$d��L�@�1R�M�6�0�<'0�U|erAz?�0��d���Lj��A7�C%�TWX�EK�+4c������b��M�LD��WX���-,�M�4��m�5����&��m��&��n2�uA�\aN���&,���4?d���:�-����L{�Ok�9����|k���A04[�i-TsS����.�gc
�9fP�6[�A4���o��;�f�3�_��Zfc������x�1e���������*����0���3E&�}�%`&��
�M]�f���|*�s'��"�)Y[�	��m�B$/%�m�����S���T�� $����vdO`�)+J�V�a&����H�+��rt���j�Q9�fT��0[�V�5�&��eU�Y]t�!M����L��p'�	��vX��0�s��"����LUg���T�W����a]��O�(�{��ro�,����N%����T�Tu.��>�\�Hk6���=��>�C����h?�������z��-�e#�`Oj2�3�b��ll���kr�"��m@[�t�
�l�s���B����{����2�������(�f~����U����3��e���X1)�<7�����8�������4m;t���w�����yY���%`�o~cl�I���O����T���^~�I���y��Vlo Hq��h��?%��6�II�X�SsZ�)a!�i�c}z�3�G���#��n��x�\P��a�T����7�x���t	��}|�|�����
S��]PjT;�AZn��L4Qk}g�}L���������nZ���3�I��3(���C�^�:T&�����kw��<�cH��Z`M���\��:��LsA��4u��I��wM����l�y,0���L����o~���&0�Gf�_���	���6�=Q\w����������������>������}��V��zVft��s[c��Q�q������V������@��
��x2�s��:!������Y32�|��(f3���jiZ'���x�XPr���Ao�xn����������_q]Y����[F1�b7��%�X���H���f�TM��~��?��^�M�6gr���''$�-�N"�{0�(s&"3���.����P	&��Jl�Up��<�G�%�'�D�y�ky������g��U�=�q��$so��N����"${����� 3A�&�/K�T�l�%o�)����z��(*��X��)�s83X�����j�/���@]��-�F���VV$2�#��a�j_:�3P�:,j������)#$�����&��
��4���_I�����'Q���T�Z,^��*��M������e�Ie?�n0�t���I��"��r���C���4�����$��2(���,���<EG��E?���Yj���&5�G��>?h&L�U����������2w~���@���k|��������
�9�e��	r��A��	y��,&���{G$T*�|v���t�h�In��3�y����l��,u�V�D��8/O�;x���rc"�95=R�L� &�ya@��1�j:��&3P8���!I��"���"F�
5�,�U�,�m-S��|kL31�7FT�9�����?6��<~J���� ������!5��[!�Tc� x&���Y���n�����L4������g�iHM7��)�����2�u��t��\�<�"�������iH��f�`��!uE�{}H��'6�'�A�@��{<��AuC�8�B��|XM����{!u���"r�� D.q����LS����=K-wm��<�yE�� 
��9$��y0��4�E�^$�s�V66��[=2�������
��q;c����N�{G��g���b��y!��7��2z�gcZ�����-��
sGP����
�
<�B""CE,	7pCc�!���X�^���x���BPq�9O�?�f������Pj��������JBWa0�H�2��7�i(�qCZ-�r����`!|��VO��E�d9,����i��s�+��
~^�!t�m���,�����y`_c���D���f��Y�)8�
�j�6y��s�-�]=-tt�3��x�����bd>�l��w�(������j���6rwX���0?m�a������2UV�v�F�6,/�f9@���[m������q+i��#p�|ux?A��������e�y�<R���8�se���&h����CfT�\1���	����i�'$�N��m��6YoH��1Z����`�.�TLV3�����66����;
�c����4����x���=���/���3|���D8�5��so����&R���xs]�jE,���_��A�l��7wdS�D�����6<�<�tA_�Gkm��t�k�k����j��IIP�O}��:���D�������I����B�!7����m{�:�|�sf�Z������1��
���#����vF��eC��.�UW��&��6�`�<Q��������OY�u	Mr�F�2���������m�&�\P���/[�����fk���}B_�v�-|M� 5}��LCF����#��������3�\En 1�o�m���+����W}�V����>P�����6�G�w�|��|����������������f2���&�c-m@A�w)"���
�@=��.I���\|�0���&��7�Z�+����4�oiK�v�\��e&���Z��5��<�_��'T(|�� �v�%-g�)�-��Q��T�U�4�S��&��!�FrS�`1��z�����c��;�0F�VN���??}]���{���O�C�����5]?��z����z���*��Cs��u��������d<J�U���;]��r�>��*��W��_u�~������m�����T�����b�>��c���������T��k�~����~!N������}g���{iK�u������b����v�}���;�)��r�c�1]�S��u���\�{-�=��^�����]������(��s��Z�.Ip�u���h�u���\���������?�z�W���?�:�S�����1i7���������N�b��>Y��z��C��������u�]��������}���j�3k�V>D&�/7���|!��m����>���F��������#�|���b����1_�a`����00B���|������b���_�a`��q}��}!���T1Lv?�_��s��&���/���:�[���'7����
��rCx��n�]��b������?�!v�On�]��b������?�!v�On���
��rC������'7����
��rC�����!7�����nH\��9������pC���w����nH\��?���>��^������M~G�!q�M�gb\�����O~G�!q=�������}-�3��Y��_�_�y�z9��%3��\'�Q\����^�"$@�2fY��_�-��g2K���D��0VTf"�4����MH����K�}�B�Q�d� ���<�~C� �U)���~���+����!"{6��M����yk�D.��"��j9�����@�2�2d�!*�=�&n#�D���M%���~������(��&�
��V�����u(�#��i���#}������\�5&��{pFo�rV����PY��,��I�?����2 W:���2���K)6�,��/�H����G�\��q�A>���~]Z��T?e�A�����Q��T�O��~~�A�re����E��?�����?2��j���F���/Xa���D.K++�I�;�d�!*��v_8�.(�B���HR�O�7�Q�6zL���&K7Z�������jy*���a�X�M$���&�/���qa�GY��,�����on^������8�Un��3��������V~��2�h�+��'z��Z.z
Vx
F;3Y����hu?��	���CR�u���p���Ea���Hw77�Ec���jp=���1��L�,��M������+�i?y!�%�>;�.�\F���;O�]�Z��%�g�k %P�EUH����>z�~������x�\��L�o4�mC�{�zIq�C0*���e'�D�����FS����R6��~��7�^$D���1:I�d���t/�];��/�J#����1=�����+Q;��!m���/h��Tj)	�y��5��V�'P'���(	H���x`�p�����r����Z�9�A8�,�d��fb��M���u]���� Y�M8A�@�W8nwe���L{���������+�&�
�V�x^"^3�d)�v��U�={���@VL]U�d�p(��c*�>t>�6S��{��p<�q�l'��t��������To�!
>�pbS���p�7��g��T�B��w������~s(u4��x%:�v���=�Z�J����0 �tV��#QGg����K�
%P�?�����);������?~`�k��#�T��������P��y\?�d���: ���A.wt�����Bx8������W�&Ou|p����"��,[���4n_Q����g+���
����"����H�����X�_z���|�{z�&���_��8���2�|v��W�e�|ft�$�g���\HO3���5�&����@>@U�����N�����Uu�C�����b�����$�������.�>c�B$��fTL����G����1����b����n2����%F����}v���]��sVv6>��Nt&,_R�6���-��+����th+���	x��ga^n�[Q�� /�b:0���zQ�;xM�q7j�H����;�h��$���j%��;�83��XJE��� 'g�M|}�����O�gI��i��q&�����R�C��e��;��8��+�gh�3wo���Y.SUn�>�\r��v
[<<��#���M[-.��k��ZRn�JS�~PF4�������?�8B���n�o��.�Y�B���x�����6����/,(�b4�2�-$z���q�)���W_^�z�:�n��m�v��������e��c�xz�B�x����	r�1/�����r{�����Qs�������
M�e�P|o�Y7�d������	4������m��3�W��P|������cq�����k�2�26���W��q�T�!R#�R��T��g#6��^r��(w�<\�"j
>�J��&{����9f
T�q��u�=6!��I�������dt+�$Zs&!?\���	����;�Z�X�Q�T-���OL�
������fA:{ �Q�����}&���1h�:��Vk�j�MUh��-����
��0�����gf"���#-��Fd�`�C��+�tgn.S�R}}V���BtU���c�6�@��D��\B��A�k "[����������_������xSF�"7d���e������u��P��;������4����c�����(��r
�%H�d��F
'��(V�L�&x{�C����D� ��A�I�5u�k�:�/��N�m�[���+6hk�X'K#�&�w3@���^����u�A�!+J�pK��
�hk=[���\_8���YP�,��zN����\�������9������ZE��d���d�K`V���X�P;���w)p-��5�n���(�n���d���[���
	�Jx�S��/����,�,���.�/E�o3R`)���8���}�~E�ubt�j�j�\��>��[F���������l���q�*�������6������@���7�b^��_G�Q1-x�(����������$�9i�`7I��g"���~��z�u��
��^�m�"��xk�k�.V�LD���Zo���D�c!�N�K��d�Q;�����Z-�e\H�/�	x(��h�3A�d�[������%%�����u�J��������X�K��
alE�8byt��~x����Hd��w�N�a������6�������H����%%�0������M���V���������U��_�WI��^%��F�����f�7�L�X#��eE7�/����$�0���x&o���o�>����v�oep��T��	���&��i�Pr�ew���\�I���7L�gEZ��>��&������/�(1#���&]N��n�?��f}S������$��On����d"2[f���H���"��7����He�0e�H�}C�k���d�]����(*��$��XP���v}f���r�IC�q^�}C7�s��NUD��������2����:�0���p�h� "G����?S�0� T��V]������&}U�����T_�����v4�h��oH�{R��5�(Yv6���\;rhC��6�\��Ag��vM�X�����Cd�=f�_Q���$f�Ee5��DnfC����g�5����=�&/
���7���e�Cm�4�L&Y����:	"*�n;��eR����
	���3���������z��S�'��eg�1��c����X>��LF�+�����s���������%�Jc�G��y��*����*pA����j���#�g��id=�	<���>�fOLeD��|N����I��o�7
t��2�T	��T���K�����>;��'��t������J�0��Of<�%���mz���Q�Xl�����I��J����x����@DV������OT�)��'���k���qQ��m�+4��+�hQO�+�x!�����{����6oAI�OlK�N�����2R
�`�����7���������9��|v�n�����N}���Jb��6��y�z$z��m��Q�lo=���{c����M���d�����
44��R�<�e��5�/nn�1P�^&�������?B[GP�K�����y����b�������'.��������yB��%`B��}���\���G@���T���W$��"F�[eE"��9a��Nz ���
�`�M��� X�=����~$~)"0n�R�;Q�m"2�����7OSF��+����(x��)�/����?"�}�K>�S�I"�;�#~��*�M�.�6�R"��f��z�]hW�w4+��WV$�a�W2����&���x��WV$`��|e�4'>]Y��j\�=����k<��d�����Dt�2N�m��-�+�>MV�mxCsJyjm����%/�1z�nE	0z7n|��w�g+3��L���=�\�2�3x�"n��O�9�w3��qR�������V$��������T#����#f2��H�����1�doEE�����@�:3}2$���O�K�!@a�C0�]5��K�p�?+�2�x������f bto
���,#B�[��;�m�0�����{�n����U��1,h��	�I�����e�x���"%����L��bx+���h\�Q����9g���V}� ��@{��~V �-7U(����#U$����m&��x*Y?�[��tf�c��QZ���~�V���QZ���Gi��X�k��c���Xn������E@�,�������f��W�`J�1�T'!s,��c9���95t��\��5�����u�-��"�-!z����3�P���9:���e��;��H�M4���'�$"kv� �a���������Obt0W"?�M�����W�EM�����f7��lH����,�)��-�6�18������z��9!60Z��DdFa���j��	�����:�	�+-h�����`�D�w�G�M���wJT^�B��/m&
��D��W2�
��_���h���\+�R	��2D�7$�=�y�k ��~?4��g��AJ�|�sOO�:��r19P*�E�7�U��X���!����%�!8
a&�>}k���v��gG���Qt��V��X�>�	<��fT2��<��X|%"w�����=n��#"n-�!w�7T���E8[��,����
��rt���*X�������d1�f���rGo��v�P�|��aa��������?x���
��jOQp��I~c
��A#����{qaf"r���|�z�k���5�����~���H���N�
���
����3�:=E�W�Z�Z0�}����ksre
�����g�����gXW��e��o�q}�p�M_jA���7���Ap��z���f��	��f)�	��D
��~cK�����4�R�j�i���t��h$@�%����H�%��pZ8��n���~�n�`�z�n���Y�q���v����^�?I2����H��L����(�q�Pv$�m�:9�6T���n�T4��o(�S����e^���z����i�?_eE�y]3��<�l%���YX�V�uO`+Q�� C�~<��w���L���p.p�aXQQ2l���./��&�F;|���d����N�c������Y	J�m���EW���t��m��j�o�"j�&r�T^��'Y?\ZH�@�lME?����Pmi�����w�c,�����~���u"E�-�>g���$�h��/w���2��q�2D1����/�>�������������!��C��Z�B�;\$"'���7}�V����e-�R����rk�B���LH��>/=��8�*0�(����p�!��Qc�����`�j;^0���c3d4+Lk�XBB%�����oH�i���?���>D�-O��& ���o"~"�i=�2������&�st<�ux4�� Z<�BC�B/>�������S��c�K;I��^k[�P�d����2P���M�7���U3��[Z�"�J����w���&�� ��f�'(�\V����q\����\�����0ToK@BY��l������#�i��I{?+����q����eU��V��@��MM�+
����BB�����mq|B"z��	����V�����3~�m�0V��2��+�"���k�z������*�5�
=v�/��T�8����#�p�[t	��|4�� Z2n�>����
j&qAZ�i�<�@�lL@�~i�N>!m�[�U�!�N�V�����9����2?tf
�^Wh�l	hE%i��-�3�(���y���{��qC	��zn���>p�]����7��8x��������=-����L�kE	`�A�C�o�?+R���,��m[�gGE&��W���tt%"���t+D;���p�o��!?�9�}`��B���j���BD���~dB��mkwE�n��f=�$d���G"\t��Z{E(����N��?���F����fL��I�N|���/���`��YQ�O�n���l��@�+��i:������s���V�������L({74
�o�w��� 6<���`[>CI�nM��K5^�R��(���!�^�n�W�B7�E��MU`������\���?+��V�*^�Pv��*�z}�H�^�����{��SQ+�Q��������r
�}�q(6��9�\P���9�j���*MG��bea�ak��6�z��no��l��1p��27l6�z�����K���
D<�	0���F�S�g��e�=�+_���	���hh4�QA������Lx.�@?C9��~Z�$�;����7�U3�}!����'�`���f�>���r�������n���,$D=�����&w&X2�����i3�i���~����"�&&�00���mx��(A$�>9<�������#��h���E��f�\u#�'{
�'�)��tT|�M��l��gGZ�Ox���|�=<Tw�Lip��H�����OK��������|<�V�3y|Y��|@u��Mo���r5�^j���0�������N���	h��N���Q��/L��ro���t�EDgL�4}�t#bpJ4��F�y�_^�J��(��Y
=�&-'
*Bp���]m<��,���+����n����ov{����ZM��ng��Z�H��u�@���+�I<d����x�����x�g�e[6_Q��j=O��/s�P�����[
K~����44J��u'���=P�w��~��	����V)�{7����rrq�l}o����Xi�=4^iB�5l@'N����e&�}�,qiT�
'5�v��'X����.Vc�+���?t�S��X�9:���w����!��q��y�����y��m����$�����b��&1w?@I��*V!����h������m�F����&Y��}N�gbu��k��Y�pE0��=j��
_=��M,�;f������tZ���.�#q�����+LT.�66���+M"T��<� I�9��/�O�q�HU��!|@zl`�!l&�@��c���FV�3it�������d�f6���Ad�,�fZ]G���B��������^c7�N!|8����k&>}�\�l� ���L|���������6/�i��
���.:���{L �/�<��B�����������v��O �o���f~����|M��a#j�����A���:Y�W��~��A��sV�z�3Jr��������!����D�z���Ll��F�����������|��]��7��/���=�\!��=��K@��!���k�s����n]
G��dA��������j��:M\������y�p���;������5!����{���,!Kcd�h�!7�1��9E'�L"f��!�#���?�#���v:�"
	c�W��D^
�������`�{�/�?�o=f�>��:>dQ�
�g�^�/�Q[]�s�>���ws��t�H��?�i:��|��.����
�i uSK��l,��'�@{��X��xU��C��<���47�U���^���h��c���`��0��Y�Lt����
���u��Qrf��������Xr�@a�}�~A��7�U��|�f�' �a�����g��� ����iU
s������X��+��C\J^��������6�U���J<�H�d�I����h'�-C�C�Z�]n=���
��%�� ��H������"�s/d[(;{l#���:E�u�� �	��~Lz�����A��fV,,�Z���0��4����hc�l�wB��Z�/H�������'��|6����n3)�
��=}�c�=]P�����f{�2��J��3���FD�;dr��4I?�7�CC��
�� %�B�j����R�`�&S���.7>�I�m���)��n6�7^��I6���J� z�|"H��tO?�`��i�����V7c���D���QeE!���#|Z�	��f���g�&K�"�����Wia
f���u.��k�nI{3s��tE�Y��������hI�eC3K���^���+\�%]����aQU��N�7a:��y$��1T��������~��g"���{rCi?���:_�j���i?�M�k-%R���:MVf5�������h�4�d�d3(�c%����9T�Z��L���(C6	R���l�^��� �+)��M}+��G3���n'a�7��H|O@s).�fQ��F�9A�E�YT�?��9T�Jbi]�D|���?s��11��im�Wl�=��gO����L�6��fO���=�c���LO��ORT�?��")���3;��o���3&�w�MUI���C0G�N��I*���,x����������I^B���D���V
����&+�L�����xh��������O��Y�T�P����vDCY����re-����n
]]4���e�L�G�S%��$��P�@ST��_�ZinhR��5u��5���{�
�Q0YX8N��s�T����J��=�J����J/��	y )�{����9��1 �O����n;��lA�OwGU�[vP���*@w�C�h�������YK�K}���g%%����������+�����s�O��\�����T3}�fR�C�?ia�iqEtQY8wP��]��=T���9�Vs���`�&=���Q����q�TT]����jo��SsNu�S%A�j+�-Ha�:�i$Y���"K6&�Bs�]�{����3�t��9�]��s��jBY�Z�9{����+�� ?{�U�������&�8�!�����FsIh� �6�H�d�#��w
�k��f�����]���l����"�����a��{�'��q+	��a�nq'����	�4��2ls
�:����?�pM��Y�ua|9	�Sj�������*?&��X8���Mg��* +��&���_���A�O��v�v�����|���MR=v�|���:8|o�����fE6��F�q��z��,��N�t��<'�_��!�fv|�5Qxa����)�f���M�X8�	4K������40� ����@��|x�yA��O����O���,��myO?+��]&��z���LT�&��Q���gEY��l�h��"(��>���������N�����l��u�����n�^��nX9�`���o2�2�z
K�x�&��)�=�Am�fc��v�q����}�������pA���H��|<�b��yL��������0�5����h��%���hmkO�r�X�Y���:��ruO2��P���k����f����U����������<������gi�������:>��:���-,2��(fm:�����~V�	���f`u��Q
�{���9>�y[��=�,�LbQ�gh��y�3��m�1c��0-+���m�.�r�����l(d~_����g��(�~
��f��9�Lb�f�G�������4�7����1��@bEA���k|r�)>;��Z�q�1��M>����0m�k�[�VT����y����'m����$W_�	��N���.+
�|�&r�4�z`&1o�/v�,��'x�i[}��LMN��6��4���������x���������h\97�E=y���>]W1]ZN�1_��t]�t����:�|]�xI�U����t2�u�s��:�o����n���(�]g������������,�]_���)V�yQ[�nb\G�I�N��w$���&���~)���~Ms��hf�\>�n����'��8���~�����g��~��������������������
|�,��c_���������7�M?7�<�lvED���[���U�����S���q|�����������o�������7\-�u�0����qYR�$$[�w$_�%�!�5+Y�� �L'���7l�r�����s��?tX���t8xm��(�'R�U~���
�*�]2�:����}��T���W��b�y����g�H��nE�������R;�G����R%
+)AX6{��6:};�K��Q�p\8np\�^{(Nip�����g"����� �����
�3�R������#.�<�B������A�=���R��&@Omq=7������&)��-��@~��F��$Yr$��S�u���P�����b�H=��[WGT5���\qK������U�WR2������X�����p�1�I���2����A.�UoR����&�v���,�)�����]�^���������+�d��(O��w�}�^�@��J�������b�d5��z�7@}l��S����y?��k&"��O��$�xZQ	�n��\<��'+�o��7����D4�73���[v��v!5�@%���*��O�W2�z���N���w���1��#�E��j�e$f�?�I���U�����
M�=�mT���������a�u-��7��fC�>6����O���I��n�c�
&���������tc
�En#������d��b��$��,c���N�ZP�OV��C�V�>;���.(���%�C�'hY�m�O�zkGE���|6���4R�j=����u+bK^��,�Ez�)��z�����w��O�<�������3����+^9��G��|A������oa��&�����ig�2�g�d�'��yC��hr;�+_K���|��
0�t6��3��3�@%1���n�Y���Heg	����L~��ml�q�`TVt����8�hQu��0#�qF��f`'=m�$"��x�-'�D����7;�9����q~����� �9M�����8�hZ6����h��H����$�T�nV�������j?CW�>������L��/�$������'�to��X��tK|�{���hA}xQ5��9�����s���&0;�J�E<t���6�$�&�	-���{F��7V��BF�s�H���\R�n��V$��9��6�R M�`a�;�!��:���	~��+*(�-���3���������sT���.�$���Z)�H���u��0��4%�9�BD�����q1��B�$WW:O�}�� ��w�qnRL�V$�G;Y���i�����'3L�! I��9c�8�`g3��nkN�GT@X%�Oqk��6$f
�#��*�.� �sxtE��s$_��������jA(�W$��-Ej�����i����-$d��~�����+Sp��K"~�s0&7ND�[^�E`���K�+I�����,��z;Y ���7��F�4QPQ)8�����N3$+�A	Yk���&`!Y[L��
��v���6����rtB<�%a"r����G������n����i`�F�;�������F����*>l(+��
t��y�"�b������iZ���ez��cq��������*���\6��1bE��{:���Y�>����������i�k�~z)����(���x,�b�������Wt?�O�5���h]���&��4"�GA�J�,����`�r{oN�Vt��H?�r�{Z;x<7=O���8����L����^��-��G��0�
���l�`!*?������;��%� �4����H3ZK�d�������`�s�=�.P�(~j�>w�h��9��O������Xoz4����3_�r
�6����M@�K�6���1���di��H��%,D�g�*V������3$�Zp1�dfN�B�lU��S��yJ�V����~�<��.�e��%��������M��&�R���I�$ �G�;��=-��v�TU&�.�8��{E�����I%�J�H@���=
j�L�N?�$�6��Z$Y�����H|U*�����f*���M�������#5�%�oj���L�$?����Q
��	���.-n��������0�H�=���x+��J�������m!"��`�7<mS�qW]�C�b��.���_K�D�"^���L�_�39.�_�E���c�}�b"�A{\v@��d���6j/H��OK��N���	x�u[�w9F�;l#G�����v���w��gT47|=�g:�
9��l���0����@�
��N�D�f+;.�����D�y�y\n>y����Gv���;�x]v61���i���iy�<�_�63��{�6�r�B���!�����dg��
dv$������z�S�T��(-�N�X��b�41#���j�kR��,�����j�n7�b_S�
_%��}od�54
�����|�V���]�al�d����d���[6���x���m�)�;
R0���V,����E=�������=���}h������p�DD�R	����+fXfr3��AKb�!��������d����@z�?�'V�Nk�L��T�	������Y�������`�P6���1����I��j�e���)����*����~?���<)`�A�g���mA|��e{}$7���w���Z@%��|���	H�a=��
����>x6�s��$�2��>G������J"��
2�^J%���bW�}��P�f����-���f%"�r��ep���C�(�"�����^��v�����U������������[*��"��6D-����Dp�n��[b��p��J�Sq<���=��@%��6*���N~���.*�-S�{�
�!����i����Z�����.��3Q���4�`����Xl�6�����(/U�?�
#����X3�l��R�?c\����R>��S�?��V`�D�1�����Y�gi��~�%����K+I27�I����8��8��XzzqX���.��f�]����B��=������yM�C�����
��sq���
��������D��b��U4Y+�X�]��M�Q��z��s�OL(�k�P�(��7��M@Y�$�b��X�����?��Y�����G��Dug�d}O�G_����j-����8aUa��M�E��y���L�D�
�����kz8���fT��}�{�Uz]��"���4b�a��:$Q	�n�6���E�
	x�c�����
�~����$�WR�9���������
I#�)��s <���r����U�K$�[,�����FD� ��	pZN�`��`+Y�2R�6}�Q������a��Q����P���~0o�<�D���	�g�zz�&�������=�C��C�7$���;��!���>\z��t�Flo��LD~}]�?�7v�o(��3�������rr*.�T���=w`�4�����?�DZ���.�;g���x+��p�M���'/�f�^H�����zpPW"���D$�!/��r`O��L�����A��T��������QQ��S���O�<�
	��X6���k��oa��|���3o�9LBW��Y�j�o�W}���i=��9�j5U���K7i�%�8f.��H�
�[:�{=�Y?y%�������em/H����j��0m��BY�f,�,����bRm�&������r%�A�����*oR�_�%����.#��e����~���\���"y��sr��x�����g1>.����SbAf����lk���
 ��L�����o���&p�-�
g�����6h��/ ���*J���U��9�4��F �vAgS���.�@W��|k��!����&�HE�X���]Pm[�����+���2l��l��;���@O��A:��j�W���R��:��yt�� �}�G��(�5@ }�aI��G��+l�YmJ�n��m@�QT=?�-��Dk��3����IT���\�x_{�]K�N�(��M�o�q�+NH_����
@	������~�hb�k|�����Nc������v��4��e9Q�����H�t�����M%�8e���{#YF7�l [=Dn��q��,����wr�d	�z���M�ca�
:5i��(�;l>��l!RZ��co���a���q��=���@��x�3���E��IjW2<��|?qg�!���Q7���	J�a�����������R�C�x�$5It��@���}�aA���^.�\��s�W$@U$����R��/"+p���v�:9l�	�qE�&�����i;��g�dv��l&~�����P���sh�_�Y�f�Z���e�E+����6�D�"D��A"��IkW��1���w���{�W���� $Z"��Q1����T	z�� �T���������|_|a������+d���1��D�M��q�Z�/c*Bt!<^Y�f���O����^���7��B�L�����n�������6�5���mQY�TP�
��D
�� �qh��ZKS��}�	�A/��S�@����l�$]��������6��t�������_��2�����n*P���+����Y�o?+��~��M�o~a(��TD�eg��m�����<XyC�F��������e,]I�����uSf����k��0�CL{E�I/
�]6�**k��*�J���2�J-��u��N)��H������'�d�%��P���XU1�7����PS��	@�o$����*+	�~��I|*����3~�gQV&�����[�Q���,�����$Gw�`q��ozB�u�9u�����d�#��Q;	�(����4���q!wl��a�^����b>S�cx���=�+�Xt��	0/1T���5d�6Z@u�BK��N<�lCe�����?�2��J	`����2��X|�e&64,h�#�f5�U���T�u0�<|v�j�"���7{�L��������V�i�{X��oh����1gj�~%n�E����wO DL�D�����%g�#Y��6��y�)stH�{%-�)3�b^�}1���d,.�0�+L;�9�g�]�#��'�wF������<�Jm��*�d���@~����$���?Wc;Pf��(7f=�C�L$���]X��T+�O�Y�4�I�^�A�
�/��(Qk2����-v
pa��i�����}6���2{��f�+�bjv`�#�L���I����{
{s\pQ�����W��w�����-������-������k�M�5��\���G.:{�K��0��|����iF�{��������^9����1T�eK�ec:�
��C���:+���aX���5��������bN��^DS�z��m�N=3���s\�y���?���&~��Exz��gct�����(�w�P�;=�����p�I��VD��Yqn��p��	�l��P	�,D�X���#=?�W��q���
����l(���]�$r1Q��&��Y���uQ���;PA���=���j"x�g��(�l���?����"�e�i���/;�����
L�&������^-�K��;_|F�>�
>���R�Gqg]�Ns�'�ak��U��T��B�/d8G��<���D��kw	�U����za^��Lr����B�RW���tDo~��"N�o������������ 4��U9��G)�i�m������WS��)�h���q��iJ��1��^Ia��1]�E����~V��3Rwj�gC�)6��_8��^�{#"s8���C��r����?�|���"b�z���I��pMh���C&�����i ���E��wax��w��.��j:l\�$�����\�<]�g���rOb�/��*�g�^��os�������)!�cH1�E�����|������iPq~�aSr��/���!���K	��n3�`G��,���J�4/@�2�i���`�!����- L�9,4��i��J��gyu��mh��J�T�O�SMH��V5El>l��{#���wgKO!)�-����O�~d����W-	^(��S��@��|"_����z-*��	x���%��z����~�t:�Y�����J�mJ�6��U_@��4/O�Nf��R�������s17;>��,��'��Cz�����~~��P�OM����@����=Tc����`Bn���5*�������O�.�A�����pN���l���}��,p�X�|-*�9�j\G�f���gR`F����_�yP�5��N�Fv���4����F������"7��vij�I��A���������������)�X��)��t�G��M����D@�����|����J�8�~�������L��]���U]d,fw�x��JD���x;���7��fl�	��s�������D��#9�D*S�;=R�r�FRI�������Y7��N�zP4OK/����W�B�<#��tT#��}X��aO�a���6~e"��5[}���� %���������U�%P��������m-������P�����n��=4Di�5�Sj��$:�A�������]j�"��P^N�M�v�������rB�>��M]+�����@Q�a��B�J���j��L�P�=
��(����S-�f��r�Z��`5�@�$���E1���FcV���iC�(��v�BO?/;K�ch��bADf�������,H[c]�'��A�!��g!�s(m���C��C7���f8��f5�|g�����[v�=��%�*B���K`U�!-������v��M&:^k��Y���]�ZkA�6�J��	���U��eE�[:�
��)��|E�!&a�k�+I������j�X��o�g�����+A4
[}mC|�i&,0��gf����*q��j�9�pG[��!��ke�`(h����[��
7Ao`��,w�8���c�Dd3�Mt������d&Z�2��Gj�/YB�_b�x�&������r�g�YKg56`��������4�����Oa�]�*�04pV��������S�<��7���z����@�7�����f����Yc����5�A���q���/m��"�� �VO�f3QCy���ax�&��=��4p�7W�@����H�]��>EYP�����&n=�e�������p4�t�l0������U"P������aa�B{v��v-�+VH������1�"*��c?v�-�������g�(v�80#��x�}�P�������q�$
G^��N�:��1XCT�M7a����`'m*����)3x�&���
��\.��d�,�����l��[�Rk����43���+x��%��	A���P	���,�T}�����4Qq�����f0,�cz����bS`m�9�w�Uh]ip���P��+�^���6�,^������dY�{#4�
������<<w6���7�����1=4iv����Q��j3��2��eC����������=���&���� ��N2������f�4~�
xyxd��������hF��"{���0�,�|�Q����m�)�Y�`���?�����:��:9��!>eg�t����awnV&��|�8����Z�������j��}+C��d��|�m~�L4._��|?����-��x�K�{��2�DS����U|R��5U�#�dY��fR^s"�-_���G���z���Z3"��g��������������������_K=����s13�=_o��N��{�����O��>_����1_om��,���v�o��h�������i�����;����
\�8����FD�rH&��	x��?����d� ����IQ�4#�u�Id� )�.��B��yx���R�Z�l$dl��'>��Cw�|V�r��b����(����"Qk&:H�z��B�q�����!T7��
N	����`������3��
%��c/8s�A�����=R� ��"[����7>&�;�Z�U���2|�j
����/��eU!�+��h�/�)�����4G���>�R���c���2��,E��/'����G���Hk��K������.n� I|�.2�H�t�A����Iv��FD�%-+����N�
��d��s�n�S$�d�J������T��12U.��y��lN�H��(O�t3�!�����I�L���������lH��!�-�h�4��`>@T#�hG�.��I��z�aG!����=�����Z���P6�H�~�v�)]�gO����M��,F�z�����P7��
S��1��=�nQ�V����p~6����aB���mh����ds����=6�A?w#����&T�kc����3S���q$0+��6�?���NlA������n1��Q ��w${��FtE���e��lF��t�lG_F-�!���nH�c)�k},���h���aca��%}�%��7��U�%�"O�H�tE	��vn'����4���
�e�<���$7$v�d�Q�lU$����j�&w�tFHV�f����lXT4������uA	�a�<*�V�dkNj��S��bKB��)
8=���52�����>�|���dX�I��j(�c���-�4|�����L�#�v6�+*����d_�eJ�>���O��<�'[���J�;�,w\�����g{vP;��L�B��G���dY�����VS�������\W�N�mC�{�+��lW����Z��-l���/��@g��7��2��=��h^m�WV(N�OF����2^�1��L�Lu&%k(����|�3�A}���������~F��:XVt����._���#��5�n�;��^���l���;���6�:��j�rA�C��$Q|�Z�!��
��p�hT�}��n��GA�L�!��OldP�|v$�[�3��&�L3yP�h�[��O���*��lWd=:Nu��&�/�AI�BJ��X�|��7�<l��sg��6���n�O��.#]���I�����Jr�3�m�%����V2�}�� W7�5�o�g�gw���NH��t|����U��4�?�}e�i��{�t���zx<U��V�y��	��	=�	��Y~��� ���Q��>�&�'�jo�$]��&��z�����������;��zH�F m��@"G��g���7��`�{{"'7Vbgu�T����bg��F��)V~�$_!���]5�C:���ci��J�t������]���?�Dk?��xA���\���3�)��/�Q�������XR:���v�KGV?M��M��h����39�����e�fV�q�Z0�2�,HR���.&$2���_��_��tZ��d������<Z9�r�N����<G�����53�LB��VMt���H@�l5�IS�� ��y��<�������� �D�)	f�J?�	��n����D���9��|��7��8���Kf�|�;�{`�3|iC�J7X�HP����*Tm���i������H%��/]H�U7o�ZJ�Z���A�{,S��[v�V����3��L���BT���Z�>;�lhG���W���K8w���������y��#.H�y�������m�|�����4jn��f���$P���1��/�Y����6bAlo2>N�w�o|�O�i��gVEX��#���v6^��������8�~G������%'����rG.�L4M�b� ���1M�HC~^_�uR��e���D�ijg��J�r�u�2�j^�����
iR���<�IC�Y]]������}6"�{���I/l��c��6��L
�����1�9�/��;������3��jS�jY12�, �g�s�:��gc�z���n6-eG&x��pb':�$���2=�
K2UW�2-/�iV�7y��E��3���IdAx9w�,�����
$�Q&p�������c��PY��LD�����D�&4�������#��K��D����0�3�����KeN��9Y+S�]�n�?�y��&��I���8N��#�x���r�8H9G�-�%`�o$Rfp�Gl�������B?����[�L���I��Q���`�1�����NT��w%"�4�w�`6��N5�����L&�S6S/�����C&����L���������z�M�;�-s{��If�|:�"����n�4��d�Y���?�(��`���a%���R�����8"B�)�P7sT]�g��-wQ����p
�TAEe�a}�$[6�%�07P��T�+^�i�C=��y�����"��������9�a����������Y�zno��B3��f�2��\���,���h����1�Q!"'"3�p��zb���YAS����=�(���$�}"u�Oq	��S����H���I���i&2���[n�X�\	ez/��(<]"$X��&�x}s��M�}��e/W&��X[M�O�e���E���&aa
n��]Dj*R���b���F:v-7���t$?S0l�$�
��L]R�Q%��L�v�C"'��\#u�����N(,]g�8���zC��$�b������u�%0����6x���]FZ���>4�n��.o,T�do��}uA
lu�F{V�����m�����,��������������-9����S�`�t^�>
��@4Pr�_hh��3c��^J*�_^����NG�����G{0��n��\
�Oi�s������� ���E���-��.��!��f�hxvA_�G�l0�e��T�L�l&]@��P��,�Xa>�C�:�=�P�L����;o����Z-sV&�;8��L;�V���E"L��e���@�vu�l�8#I�g����p���[��/������//F������"*���V}�|��Z}c��|c�{�������ei�#Yw��.K���"��n�|%�-;�I�5����
H����=�+*�X��U�`��AH��0�>������d����2C����N,�\�������m�?���}�����s����$�1������c��q�y������q��p�����N����ITN9����(�9����|���O9�p�|����-� r<�����N'{>������}>a�5	9���\���	m:��'<w>����\���	�t�9�p����N�����'j4E��v�tb8��A1o=o=�����qy�~b8>���!����}.���s��������g�g>#?������B<r<�9����QTg��Y��,_������u�F9Z�-k<�d���-�f	9*����x��mG����|��-U4�p<k|�5�nY%U��a�������>b��o.��Y��3����D8c_��n�gX���	?����Q�3�r��<�z��U�3���}E8����Y�3�������{��"��/gl�N������H�1�m9���a]H�3��\�����s9�����H�6�S�U5m����g���������5z�on
������sj���|=�7�F������sh����=�7wF�������:3z�o����+��������92z�o~�����*V������������c_�n�O~��1~<�������G���s��\������e�%�1����3�3����pFt[���nKpc��QL�3��,u~��Yv�����H3����xp��~6������Vg�$��U?9�3�����c:c�h|-\w)mF%�8�}�$c�u2�� �SP*_�����E�+	�A>�\L�� ��LM���v����f"���$�W>�e�K�YY8E�W�4k��L�eg
x��D���D�";��iD �15oQ�l�E?�)c�I���B�Ci'��Q#NZf$����b�I�$��m[&y�^��S�t�!e���+c���'�����\B�������W��<��i��&�JJ:ER<��|�;�+@&&�G��b;�A�9���eA��SK�K5�%(�I����7llhM>P�CZ��+�(_eh�XRHT�5M���Zg����.D���`�=���i�z{��\Q�������,h�)����d��LB��3Y���)js�������2��J�t
W�|�J�i��G��*�xs�P������N��)3�
|w6���
`��/.
]�7f�d�M�H�l����)�`�Wz�]o]�;3�h�
�p������w�R����S�������'�������!Hq$]��_�
���E��eo=���	.���[
.{�����~G���T�H��
+�I;���U�����&�U�>����7����]Y���;��x
T�bBt�������C$���(N�DWr��H�������F��l��*)��Fe�Y��Z�w!C��A������������	�'�����5}	��^YYz2j�	�iB���~Ww
$����>+`C=E"[�]�}f"v����-���P��	�I��5�	����	�B4%����o��X�?��6}��&cn���p���s�����n���i������l����V�D'!U����j/]FAT�I�x���8t^�9���|�~�XMd��Qpiv��Z.3�������K�aP$n�D�}�y�KM]$��j��<��8'�b�CIbm'��M�4�GhFth���Gp��9�=5���;��i@�8d����h_�t��
p�s�<�����8S�
��:��vvA���w�����\Q�������[V&�Uv��w���=�	�I��%lFz���rA�#��_?�s�?~q�"H�XO�K89���-��_C
���a'b�?�_%��<�����[d�K�z������\�>#�O�l&X���8���"���r����6�_K�����>���_��8�\�M�����]��_{���]K��(���oD���,�K��$ulNdT�hC]���9<�����q��k��e&����'6�.�>��
�C$I����P.�2����B����M��"�T	��dr�K����C��	��la	�.v[s�#a�������g����Ae��'���p�������ga�;��q���8@��"�����&����I{?P`zg����$���M!��� N����2�%�cWE%��t_���l05P1�N=��^]��"e���u�"1wP�������I�3yv8��Y&SU.��,�Xt;]�"_V'�����h�j1�U_�	�V!e�N%74?("t�Ri�w���Ha_���"�t�u��,l��N�%�yAc�F>�y��,��\�OF�F��V$!$Er�d������2B#�/��u�vT����sP���	�W	���B�x����r�>/�����r���##��	:�/�uU�@g�p���f]��E���jz4&��`�+���!���m�g�P��4u������C[��L��Rbr���h��s:���C�f����z!����BtB�����Q$��
�p���q�*Qq�N���|��<�H\�*�'�yv#�b�d�O
��a�H��EK��13q��$GNZ�@���Z�����|�%� _���$��LH�bd3*��cz���B9i�:��V6}�Uc���Z_�$]����u�W�7��d<�gER���~o�:���S8r3���o��m"aH=�L��\�O���m���g?�,��4Hld�Z�2���]�*z�p�L-�o�H���~�|/%94xtN$2����q��a�*���U`�]Q�q���� ��:���Z-m$[�;�!����5@N��\���F��#�	lvZ�����0}�_�N[��32�d���nhQ6��"��}��g��K�����/g�h}{:
����k���	PW�t~=������MI��n�i�n��M�h�L�t��LW	d��v�������LI����C�lo��}FEV��p/$?.N�}�4f���/`s>8�O2�Q�C�0��T�"�N��T�����Z��f�g������Q���W���z3�����X	ts��P6�d���*�:xW4V��[�@�@ _������$�5�(�$�D*�iDE�����������3	2�b�IlL=�QhL���(x��~bIT�Im��5T+#�!�Q�����["�1���6D�(n�"EG �8D&!��(k�q"AF>V��j���3N�d�[���j�[�	)���u6���n��h����s���Wp�06#y9�����d�k�eF���f{�P�*�*xA�JX4vc|&
�Y�7�((��<)1G1�����~��e�;����%����p���_��/T�M����@��M��e/3j��������EOf�4����F����U���i��3X
�;#��z���oA1`�T������m&������&����*�gTP2���j�w�(1#6������s�M��������*���}�DE3
2>��L�D��������'�i���"���*f����|`�cI���\o���d�]���W���Y-���,���=�e����L��QR��m_����-����0��)���}F/�����N�L}�����}��w{��S�>����U����O(�+����b�g5�ZuY=y������xkB�S=�1�J@J��%p�k��6��� Y�Y����2���]��x<{~�ZxQ@?�������sA%��S[IW���s[.k�'s����c�`����/��7����Cl�x��$yX+]�(1 ��l����M������q� Y��!��"4���v�N��O@&;��x�|�fO��G]���:+� ����n���0���U��P�>bFx�C;���.��o��	�E��$c}�6.�����z��J��f�m8���uJ������2�	�����l��!�%	�JP��=��7bbA��K����h��I��y���N���2 �,od��&I��ln����Xl�������4*Q;��P�����j_HD�[G�o�NuP�L��|b�l�5' ��_�~wkJ>3�����+Z0�B�v��[�>�y
�}`YRg�v����"�W""�l|��PoeaR���?
���	��Y������QL]ItU���>#��_4u����L��-�V��@�������u%�L �+����*��;�O�3���c�G�7��������?B�{P�k��>�������7������_�o������xf�*$Hh�d����B5M>�OE:���g4��E�h��������9:��0��(*��I7�C5hXA0���oY������;���
���m"�x�S������hTv5'`��:����/��#���{O�q�b>�D���z�}��� ��o�,!����f&�U�	����p�Sm��
���+�xef	�x��k��
��4^y.��Ld��j�������a��<�D����J"2Zy.��u�2)�)��+�4<�tsJ9�y��Ko���F��w�y�e�G�f4�;Y���i��g|8QK&/f�nF�AO������e���&K2,x��90��������k����f�x��6F/#��#v�O�A&�x3*��
�����LC�����������A�|�>�r�USp��^
r9N(��
����&0Do������z�uB�A�O*��:#Q��Jbj���D�j���wWub�T�Hh�{�-��Q���{jo"�d��Ycx�������c4���cx�Y���z��j^��O��coC���
��:V��)3$��k�`MTO�s���D�� ������e����������\���7��g��1�/�e����G��3����/�����rk,v|eBt������/�$�L�K�q������r��gy���Q��?�Q���_vz��]d�0+���k<Y�K�=Z���T�-�_h�X���R��v�.W`�(�]� uBFm0�{k�A/=��	o%CIW�
�7e�g�K�@}��	yl�0���Y'�����K���������n�O�]g$���f/��Y��������v:����e8��y������b�_u������X#
.��������wl1I�����42���+9�Q4!6�����
��Dva����������"�^��J���m����M���"T�B�+C��10+I����R�:��X�`M������;b]��j��u����vm���lv��}IEw�k�]���sf�H�]����,�������:4�/�p�6j�O�Z1b���0}�!�.��f{_�lW�Ku�Et~nJ:U��:|,>��,l7�����mM0����/j��^?I����7����Fz����P���f#��,��bN�59Qpoq)���Q3M,�����=�3�R�b���������06����)D� 4��7���:�v]bB�'}���2{��	]�f'��������X�F��y`���COx
�|�&
����;�}���FT��>�Y%���f��Q���1)�����f��'-Z:�.c/#�&��u������{���n>����p���p<������m�����?]�">��+��I�D�P!/�A���vd�����F��I�q�� ��������V�/��T�yV�.1!n?o����k2�>"��������j�]�v��]��u����3� �����CgeB,8hD&O����:�t��4�DN/h��"`>���{���EV&D�8�K�wBO7#<��e�8f�~W��B2V�-�>i&TR�8�O@>�ZP���>_&���O�����pw$���N;���W��l�9�}g$@'�G@hp%�wx�Q�N>�.+�|<��aS�O��J�B,�B�8���~�2!�%��#�Vt�M��&A}gX����VX%�-�u��v5��#y[]9>�����7�jA�5���N��N������h������l@]u)C�6�����\�a��������	94�U���?�2��H�W�		���<�!��D��2+�pn�j�v�=G(�~����E��U� ��ouy��Zmy�N��,L�	��[n�hg����-E��^��������GKv�Fb1���/����m,�|����2`��y#u�e���]x#�h�,��JBh�B8�����R���<*-�����L�?�������d$�Q����U'�]XR%D�=�om4�2�0��]�H��7�K "�U������l��e3�1�����-#��MA��=7��&��2���������f&D��c�lqz��@&�x_��	��\p~����9�y�j�f���S?�Z���&�n���.B��0�&��?���P���U�F���)hbBv���v���T'�V4[&�fM���a��1���m�d��4i&3���(����U3�
A��������:����O����Q��?�����,n����A.Z�		@Or2PO]��g�q'7_��������HgrJ�� �?��L\�6z���+����
2Cr���6u��Vr<�S�a�������,����\'��������'�+����������W��N�%O��F��PIZ��VM�bAcS��Dr��?io��^}Fl�
U���J������#���f�3*�^y����T&��v���!���3"�������vZ��B�C�:��Z�43LA\����z�A\Uc���1`������w�{�m}��6��}���$�>��h2D�G������`o�=1;%�Q-��F�vk�l���3}	�Qmh���x04~��Nn^��PMj�N���z��a�m����|o���,����M�c��w� �\��w�6H�� ���N����2������W���M�:�Y�2S�j�D�*� ��(�d����v�:R��qFwa(����VX2���5�����\F����*���<�5��5;�����/�=d��spD����t�*��ac{��Ud�AO
J����p���p����-1!&](}���t�����c?pm��U��&+�6�������u�q� S���Fq������73���u���hn�vf$#1���2�b������Mi��t�j����1�W0!����������W�'3W����$u�e�E:������AY&�����gr&"��J�<���{Q�i�{	�m�����������`���I���2~�+]�$���
3e���{�v~��;�s[P��]�4����[?������&E�#�'��+TH�@�eE��p��]+���E�7w��W^<��C%��(�����2A�6�_�4O;I��;y
�#<��Y2B�������	����eN�n
���,Y����F%m�b�'@��u�������"����4}�������*I��%���0G.-�A����8�6Tp#
�$_�"�f���Z��V���i;�~a����
�B������&p�#A)�E4z3-����d]�^�W`6D�/#A>\
+d3m	�%�,
bS'g����0���@I/���������uOd���'b���4�?��r���0�]uW���I���Q���qc�s��,��dU~A6�	,�}D�4�!�`�V�Q���V����������]���	�q�]�A���{�(��:Nu)��g�|�����M|���(�a�T��#8��2	���q�#V�� +1�xg��][�����v-J(�z���q�#&�2�0�� �NcNJ����0�!p��
��.���\����8�=��=,S�V���T���X�q�#���1]K��=RR�'0����]G����=�j����u��=V�~��7�Zm���8����:��l$x����G��]r���)�#�����F+�O�RG8����V]88�^u����+�P�a�X�N��v
&U3r}�Uo���1�5�4�9��!�q�;����	��L�lqh^ODp�z�`Dz�-"�ZL�"hY�����F��(I'`x}r%� ������_ 3j���n��DNG���LV�H�%Mt��i?�+�4#��_v�n#�P*M��w����������B�	���X3���\z	&3>���SZT�8��zJ�^��N�"���2���<�������{W�	�*�i���'Dr���6�~���w��Wd`;����A��"j~��6�]��1�^6%��:je�<X��]��l>nf��:�����;�iM������a;���T�=�'idQ-��)�:t��`�����S"��M����@gBm��`s��$.�0�:z��\�����	a2��hf�M�d������H������ew<��6r[0��*��0X�7?��de()oujp���;���j�]���Z�

��p�D�����A�����h���F?!�����@+@������=5����q�7�3Lz}��T������|U�n�g����4'�<A�d��������L�9�CP�ev����$�|j��v���#���Y
�9��f��H����,���,��P�'��+�f�'�������D
��
������@�N�m�t{�T!;�Z7�
@
��3�K4���.�)�m��NH~��k�c3�������g��������������v 0��Y�`�uj�
��d�n���;����F�43���0����g6��i��0�5��rsm�,��h8
a�H�m��`�2_��-������g$�0�[�8S��d�g�{�m�v:vn��ZM�<�=���<�8�y��-��E�q Ad����H0�������r�c�8{��b�D�b��ga�@T?������dD8fi8$�A�O&#jY����DI�D��H��eB���LC�X"��4�����$���� ��rRa6�4T}�l(���D6�B�1��h��r��Y�3}���Y���TR���Q<�L�>kt�$
����4QR��2�1&��E��,D��%�����c���I["�^^~a����������	�{�v�����LJ�jpcRA� ��4}��6�n��R�
MJ�,(uF���k�����E{���<�D���"0�� ���1���W�����s��tU~'��g!��0��\�Ss	�OK�Y�~8������8sW��6Pt]�>!��z7�L��<^�f~wD�>?m�7��c�]������Ye���L������r���i�~�7�Qp����W��{�]�}�/�KWg�>�(��6��5%�h�?�C�yY�����M;q\u�u�e�3sZJ)=�:��$�+jd�@��	�3f���A��4��]�W`�Q�#�TC'������<��,=�e�V���'!^�7����f��7pD�95���������1Z�O���G���u\=��DQ�Wd5ON�7��4Wt��i���}V�.���c��+s$�&����\W�����W|(�y��a���YY���p���#��%�yG���1�D�����8*+�	^��_���������Do���������T�7����O��#9����Qq�����������)�H�YY�TH�sU��6%�������X&����d���0j?Zy�d��'�:s�"�n��L�K�0�jj�l�^kb%���-��G�Pp@����B�S3�vw�T[@3�vW~~EmP��If�N;�O8�������e"�F�u�/9������C��`��z��MG/�����9��4���|���S""3����y��}�O"a��~��f���o��-�SR
fM��C�C���J��2>n�*����{� �%�^$!�����A_}�6��u]��}�~����.�sr!	��n���8$�y�=����R����+�	���4�����-O��8���������z��{���n+��vm���q���]G��f����@>x��5�U���}��~�=��� ���{��>:
���4
��-��Y$���!'s����Q����6Wuzbq�������F����@���H��U��:�]�CP�[��)��mp9*"��he��0%��\o2����A��}t��%��'U��o����o>�?����t�|�j_efQ3�?[/�hO~��<�����k��)����s?�0s?1�)#Os}�_������_�#M�?W���-��������.�0�d6�0�������D6�����CX&�4��"��H�aA��|Z������5J��`Z�>j��Q�7K��|B�(k�X}e#�j_�N���y	��:��?K$h��!zV�<�f7�����c'�����t�"�3����g@Ng�m��"�3���I8r:clU�YR�i���?�I�8D��s��>��S�q>��g�q}�'��|=>���S��h;�q�8r��q��70D�!�A�����)�s��rm{[.�W�Me�MUnS]cU��;���r��IK5����	����Q,}����4�p��6�������������('}O������G;�/v����
~�����������O��}����{�o��loI-}L��W������E��c��h|�
P�������l&C�O�NR�����9[e"�U��`� ��M�6e��aG�&c��@�%2�����r����%�*����������u�j��+b�������F�eA�z�~�4��~��H��=,G z�Pr��Sp��w�=�tv��O����������>�d�KEu���I>�7�������T|8��O����f�sqq����F���T�'4nt��\�S>zW6�l�dz����|��!)��)#_�����J��H+�0Z�c
���g2d���E�Y��2�$�Ps|����t����Q?3)h����rLhlAn�A��-:��6������x����X���$�v����-�)��|k[�����&4���
����(��w��~s��~Z5}�x���_r0N$�b��ey�H}��>��Y�0tfTG&��G����M;��"*��I����n�Dh&�U?,��Y���5�����[��@��Lv����PTl�0�$�N��z����j�h���X4?��YF���3��*�X����_P�Y{�����+��]��<|bv�[x�-WT��h�;���~p��l��L�!-L�9�{�{���������lRAy�
&��y��Q�Tw�p��$$[	���d������d��&�t|T���yfR-�p�!&����u��o��iR�	��d�����W���(�BM]e����D.\�=k���(n'��<dhjX�?�� *���S]iz�B�d?�P�lO��������l���_����Ig���6��l�����D�8#��������cee����0���L��}�w��:t�m��nZ�
�wF"c�u)\�`�^dB%�1����$�L�h�]���<�K���N���H/5����� 
��\ynmG��	!���v�0��3&!(+���uU��+4%V�l
$����@��?�����oAD�,�<�kc�c�/)�u/���f6�;@%�tLm:(���Dv�����������g�&�KMo[ZwFh��1��BDs�h��\��M=!�h��\&��K�x��~��(��y�f�Ocd|F�U ��y�����p�P����@��O���Re������cC+4�1�D���("�f��d��HI���p�v�6���Y�6b>0���E���tP�E��yon�e��D�k��W������e )���}X����	VI�]��a��
����s�t��9�3�
������;1����<��
B�w8#��B[*��E��c#?�"~q��>&��-��.L��c���w�!���������}���L�|���>m�ur�����i�������	*�$�_N�PC2#M����F���L$j���avm�hnf0����IV&0D���k�>�Xv���q~c��{���x���G�Ts
U��/3��t�t����^W\����X�a�.c�������������������{��8`�Y�6:���r')���I��?~x(k���Q�5�gh����,.?#�����$I���aF��8�p`QP��	�A8�D��?�?7�^3��?�Td�0�*�'=O�5K��c��Y��{�c��A"j(	^'6y�H�&"�c��{��c���=D�i��	#ZK�`�>�4�Q���'�,<����n1o=�2�����,��@�83)r�SM��z��D�l�--���7�cS	3J@r�krFL���GS�E
t.a"��w-	P+�7Q�����L(��S<� ����Tz�|����2EX�����R"(�����n Ui"C67�qG���6����$���2h�p�s�0e����TU*�.�Ht��Q��&I���Z��Hr� w��n�Q@�&��Q<�������82���J92=�-�LE�����p9V��"����%�{xSoF��I��v	�E)T�&4����6H*�_����������	�����i1F�b���V��1��5�~V��C��9]k8�T��hN8��H�_DB�B��@N{��WDq�MAJ��o�h�}k�^;I5�es3����w��_s��N���D����=����=�c�S:l���:��������i�U��8CN������W���rN��:��
`|����s��Gu=�!��/��7��GW���U7`�n��uYY�a�:23;#)��z_���;�����I����k������u`v���Y�`g����m��w��V5��������D�)�aZ����f[L�N���S������VS:�k�����������$Kh��WY;�$����.M�3�s0��D���k2d~��:w��������S6vH@��;�0�����E=�}��S���P��j���jaf'Uw�xDF*��( �Gu��L\�i��	4���`��xx:69$�8������l���3��FU��H���V�\Y��o�'tH��	��E�@X&���^�����VO�"���0e�y4t�#�����C�n>x$+���M/��MHj��S������@V�[��*�Y�i��#�n��(,bVV����e?���L'b|L#u���Kk%�GCA*_S���b��eEz�h�D���~K�?����u:M�2�\�u$HqO�����V�4��:��U���d��MC�'4�TH�I4���F'�4b�`���
�i�����v'4t��4]M��r�U[������+��7;8�	��8�`:M��$�Xc0j"�:���Z������X'"��#i���)���	���������������6��D k���T�O��n�OU`C��Y�"��f���1�����^�gi�����XU�S���l&A����p0�t|ZER
����<_��%QO�p)�!����gE\�1a���0��Cs�8"x��z��	��'���
����GK�/yf"�r�R�S�����w��V�B-���+��H(�k,�
������% ��U@��	,������]���ln��fkn�~2���J�{_�m��m5�E
E��Y�E�E�*����7��8jR��ufzR����F�i��cF��b��F������zhD�i�
�<$PqN��/�	MN��h���E�S>���_?��l,G�)r�eh�w�s88��Z
,�M,���\ia6�F�����%J�l�����>
01��#�#2d��J�[��������=}~ttaCu'������G����f��4$��m�lT�3����=
�B��}�4���t�.4�DDDp�A�{�����]������G���J��c�`o>����'��rp:\�QE�5���hm�N6���(��,bp�\>�7��,*��J�4��'/���e".����P��D��mC+c�>�����~��d�6	,�e��Fn\uj`DE�EO��%o�`����U'���r��z�)�;�e�!����8��
FV4��	��ffrBRja�yGM'���I���l�v3��~$��Sn\���h��B������
��ko����D�p��-�vd-+se�$��UY��Y��)u�t��`����u�\<����t"��������_W]�����v��������3[������6pX�#��
���p���h�y|?��!E���u������kv6���#gV&tV�A��#"0�]��c8�|)�h\��d��Hj��2V����zEY��/�H�Q�t�~��rF�(%���l���|\T�v)��O?�=��"i�kp��I�J��9��e���&�~��C �`��c{U|����^��%��U��9��g�E���6P��,�$]���I`�w9���bfr�~��<Z��_�AhI����s����t�L�_Ru��_����c+��z�(��O�&ZX&����l����|�f|+:�x�x�=�M��/M����2�]��l�$$v�Nh�>���t�B������23�����nR��a�%�Pr���|,:�G?o�n��u��<�V���P�������R�WQ�N���	�u:��nst��������g�(85v��U����R���a >��D�!n����m5#/����!���5z�l0�q�I��Pcd��t�W��|8hX��e���L�=M7�[��K�.����M���B~������|\x�F�\�d���I������������P�;���t�_�����B���usY���"��;�8
�6�<����i���d�k���<#u��������?r��(������B���t�������MWT|����(\��3�,�g�7oH �2nl�rg��a����y|n�h�����H�f4F��}��I	@�P"����>[��
+���U�I�AFA�X�F�$��oK��L���^��W�@q�'?�YP	�r���:���:�Ytu����V��&��-x	�q���A0�$oW��}���wFQ�/>������k@4�OY���=���s_��zA�D���I��[S����G�Z��Ve������h_��1���F�������r��|06�G"�����?[�:%����M61L�-)�$���b@�����S�0�}H�
S;���2!R~�����T��
�����E�Y:�<��!�3��^�&�����S�^����c��YH��9�����T�"���}�!e�tFn'����e�� �L��DB�sy��|c��w;�����9{���!3r�0����v<�K.�E�X������,X����H������]eXM�E�"�����b/t;���[$�����d�]�����J��X��+�Ac��b�wE�&R+���O�T�V<�,8�v7�4�
;��j�Y�2�03�C�������#Yr-^'��A�#�d����&,��d��|f����2�.��\'�
��d�X�q�n�y�a-���_{���b7r�HbA	�v$jP�^�*g�qJ���99	����<�����a�O&�������
Gr��X�J�VoY��4���q��wE���"�dc��K��-��������7���XPT���'8u;#(�����8V���+�.�P��+(����$��xny/(_���c�����H��*��zi��'�Q�?E�_���������-��PE�::��3��� �=L����g�����	�9C��:}\&]Xc��%��N&��G7,������`B�P����1��0<���W��-ufh��9N���p�tTE����0>��,�[��������S�������wE��@�`L{����� P�	��<����8�],��>/�������K2o��K3�P�hB%���������e����
p���m�}�����W i�yZ\����yt�O;w�����}�4
�8wLH�'
1d���/E"�|�wu����&����������`���EP�����������:d8G�nl�[`)��;�p�~G��P��&��I�o;�� @?�bJ�������/�g�A���V��S��fJs�AX��%�z);�]{��]U�pR���dBN�.�h�b�0���|B014t��c�*�yM�*�3���L��97�h�1�F.�s���x �������/�t��2|�[�i��DC�s��	�mWB��K,�M�~
���'�<������S��st�(�i�~%W��c�t�cs�
��Q���k�NBv���l�4G���x��B�>�����!�<�E; @�c7����@���]��>5�����]bOpgu������i��M�xl�)8�\P�Pc���>�8Hp�~4
�#@z�ZJ��,�"��CJ@|�����	c���i=��4bC��4G���7�z��BR�S����6��D��Zh��P
S��@��<���u]�I%&���j�Z�q���,&��������DTb?�W����O �a7>��]�C�vN%i�vz��
p��c��DP��������C��|�gOe���brN��WG2��{(F[�v�`�����s��;z������	��z��4��3q���5hA�?��>����M���������u�c�U3l�,!j$Y���u�U���y�7�S����:!8o�5X@on3r	�kC$2��6(���s��Ba�W���i,l������E������x@�r����]�\Hq4m v�xZ�{2��L�,���,�qk�5p'���V��2@��8K'�j����^����,��[Ba&2*C�c���U�
�v��>8F��.��G������I'x=,��f"C~�_E
Us���x
T"��~�:�!��\�B/y��������#���:����=�iV[h���_����������_y[�!�������������(����fT��U���
Q6���Ki^D������|�v����/�{�N�o����{��8w�7��EZ�N��N�d�o(�bJ*��O&X���6���o�$�ec�Xu�J��:t�k\��c�DQ�U=a��g�W4-h8�����9
��3{YY�P,�`�E3"( �m����5��bK�k�"�Q�T�*{F�A�CiG$Y
/���.Hj�aS������	�=�'<������.ND������Ve3"��l�������D�k�2u���_�MH����VLj��a^Q%z^f���~"`S����[�#�	1�mn6����,�f��I�"�5K�l��g�h���*���:�L$X���L+I6](�*+W�l�Z��^m�?!�W���0�{��wA�+\�>���E`���C}�L��-0�]=��C'&"�=!K��u��C/�di$��Psy��
���#��F-�j�.@���:�z�0
.|�����p��5E
�������M���=�/����n{��YH��N�?���NM*��I?�+�X��N�q��[�a�p�	��U[���Se��S5���g!��,�o<��G(���}cO#M��������i����h�����MJg%���� ��k��:D��;[�>�7
���m����0���#1:G����4�T�I�~�$6[
���I��^l�f����[B^�[��?��-�n�,�;�PK����Qq�N������JZ/������z���i(hF��
Bu�p�N�*>9���"K���t#�oS��d
���%��
A�������48���]�[�vFT�<��(���{T���>.�]�gER���GY�U]�B������`��$��A(�u7o��wgxd"��4�M�n�'�������)�W`i�F�#���gGc���$����S�.Y�?�F[�����g&z�$ck�������(�i���"x%��������$[����0d,�x�V��_�K�S$Y�`����������2����5h7��-+s�s�R������JB�Jh;��!����sE��vG
.����d�#1���� ����A�H\
���r��T�.!���_R�Yd�$���Aym�xR�$�r���)�����6�9?C	<a�W�|�8gI�|�	����J6���������-�������~��R����{����5!�Y]F�k���Kg@Ngw>���3��ID8r:c������$���N�w��������$�����\��LR�����}L~�eb�d0<�!?�Af"C�����Kf�<����u��~���2��;F��2S���;?�����W����xN�z�m���yg�$�"b��T���+�������2�w����W�&P��2�j�H�z�k�<����2�������9dt,3���T�F���6����s�����V���������Z�GT����do�����3`K�
pjEP����^E^w.c���k�n�z&��5�zG{�����%8#���^����Tu~^��9�\��bL�Iv�;:�6�w!��\����lc�Y��D��"$o�wT������*�\���t��������Ek:�iKO|bm���Kzj#�,2dM�����"D�0��Nh���Q����Y�H	�s��2�B4���]�i	�[�L\V[zK��v�%(����,������tB���`���z�hJ'2����������WQ	������$j	.��vM�D@kzb��hNg4������u�gI�TP0�\��b�����Ob58@kw[��xe�c�Y����-��`����\�>kBA�)�i%��f����DK�Hg���x�;�5�g���I}��9�n0����H������b��d��5�n�����`K�C�-���`O
��Pq[��
c:)7��
?����]��
@-*�>D�tf�|����X4�b����y$�:I��{����<���Xvt��?+uFE`�fS�l6eF��J���������&|w���
�YM� =���5�����0^O�j�v��6u����*��N��kdO�hW��7���"Oj���@����Y��pnV'$���`FQo%�U��J��3;�U-��7��8��za�
�����aV��f�"��U��2�
T�]��������1�Fu"C��=-���;�d�O����F5�;���S�����PcH����������~�+���nQ{E7�
�nOMEiO�
k����Z��Jolu<�(#��s�QD�j��9�:8x��.D[��)��M>��:8�0����dj��{�O�d�\���r�GJ�5�(zq��O�H�*�D3(����(;fZ1t���H�p�o���t�>P<��~�}�������6��N���Z�����nr��kn$�z�����F_����:�����G9
/T;��.7#�@N��:�A���CvmR&��/�=�X��d�&A�$3E����Vu��Kn�E��5�u��h�"]gm��MnV����%{"�g��#��yw���������->L�,���v����2��vur�how�*�vBA��%��j���@wfPvu�o�C��-ee��`���=�J}��4�+���3K��-D1ev&�!'CNdYj���8�C�A�Q��#���v�)����

���U��rg���N�B�guF�s��p^���A�y�)� !�X�K^��$����*�G�#����,�%�#�������	un�0���4
<13��FP�)��}��}����	�T{�}��G��ZNUk�98��������.�/H���	+�Y��$!A��cn���R:#���z��~dc&���k Z�;-��?��tI�xL�*�ye�,�����{ ��z,�3�BW>�|yj�qIxUBlW���<�[�����_;z7
v��a*Z�]Hc��B���7�����Q�[��Qm����5V�3h����dW/Pr
U����+�8�SN�[��zI$� ���S�iw'r��F�D�I.3 �{���Iz��JW#�'�^5j�s9&$eK��t������I�w����~����z�� S����-�4'��x=����6�W`3{�N��Hr����t|��|#2�F���1��}�����q�Q�]��R[��K�.���{��fW�(�h��8�
�������|z��m�Ta����.t��;���]2�G^	I�����
-���V��{b�`����y�
�j�����d�=���>����H^��������'% N����������A��l���+t�$M�������[�f�����k��7�4� ����������0���@���
P�"�Yq�D�*l�?��YP���=>w�zf�BM�k���D���#�a&��g>.w���V>BO�A�	�H�#���0n��������������)�G(�g���J|K�$�#��o�{dd�:�Z��P�����V����mt�+����3�����F+h��O<(d��4Gc&%���d���H���j����*�S�[.��}��:@B�GbT�vV�V��Y��H�1��$��@O�N�>+�������.���e�w�Mb���S��W����6�i9v��� -���53�C�H^�v�����9�'���B��c�y4!/��AZ�������lcMS���,����.���(��$]]ZP��O@��'�uth�����=��O_z������#���������+v�+`o�q��Y6�0����B����/���J$����~'�I�|eG�?���|�����+�2HcL��c!��D$��A�_w�Z1vg�4��2��b��#����i����*�=��7"hc����Te���g���T������`3�
\�7�v�|�Z����ew��8�'����Y
�B�<f:�k��I&�38	�}����HB���.W8q�3��Cer����E�����dT��Ku��N�S����,V����{��W#�2�~����=tv���nHJP~+
c���ao�O��8���
�a�������BealQ�������e(��OH��Y�k_�r���FP3�<|�,�>�e��2�����9�������X��.���)3+@��	�M"�v]D��H	���3�L���=�>;Hy��i-�����L�!hGJ�/�M$�HP�m\8�YW��d���qx�W ���O�n��2��h
��	�.5C�Y�W&�1cthW������s$���]D��g�3i|�G��e��
���7�j:k�]��[��%��vx����	8��	��o�6Pt����_X�P�yw]B���f��k����}��/��d����.�@!�|�qu��]��7;��
�c������������M=�vM�����b>�M�rR���L�H�P��d����R�kK���ep��L�N��YctHH7
�4e��]��4b!{���Q���������r���"�����i�����t��$9_�R��&T�5.�T��lY��1�gW&�5&T�E���LL��U�	-8���Xne� �����o�������Oz@��"�	LTz����'&��/H����OK5�Z`F�2���UM,���+��;1���������h^�H4���2��
��Q���$�f�-c�N,�n� �]���cI&�0���hpN���+�d|�;�z��~�	���Z�S�_����Du����Pd{,�nd���C�����6��z��V�\�K^�3!ir%W��>P;-#�����:Kz�I1����k�5W0)���4|�HN<1aa�I'�
BI��_��V(��'��"��M�w���Z@0L�~!�$}[3���F��/j��.����H���'�	���G�m���B���yY����
�qN��]���e	�6&El�>�������<���v�K�����VJq����0!�+oD]�%�jd$@��A��W�:��������H�����O��K$@S�2���$Pkj/n��3��<5nd�m]�a���}���A���?:�����]
i���>S�:(k:%b�u}�@���mU���������Z���IV�t����K�%�>��>,c�a�Y}���e���7��F[Pq�N�-m���kq�����R�y(��jS�Vf&Y�uej@W��p������p���L��m���,�P�����m�IW5���kl3�	�������p�
�vG�?u&X�����|���A�@�-t+����1��������������8��<,��?������z���L�k��a��p���tX�C�a���'71>{:|����o��Q�����{>�O��Tk���S�m=�����6~�tX�p�J�1>��s:|�J���R!��7�?7
�yT�T����Ge���B��u8�~�b8~��8�p||��C��=�������{.�>���M���O��Tu�1���������;���-����\�c.����������_�pt���_�������5�^�%_SK���A*{'#1jt��\�����uO�J1�J]g�������Y+��Y'���8�v1�����b<����|���b8���v1o�x�����]�����.��f�o��-�*����b<����||K��?�x;�&?y?���f�o��+��[�d���9?R���O�����
�����e��t/���y��8'���9i]�/�I��{qN���s���\���e���t-���i��8'=���9iY�+�I��[qN���s���T��ve���t+���Y��8'��.�9U�;as(�h4��P���A�C������=�;~<�rw(�x.|�K����s����?R����s������p���G�
;~��s��\�c.���6F;O����(���1	�,���0NDd��pL��y�e�����=���rc����r����L �1|>�)���$r`_J�����\k*�����	�N���	2�P�~d��^L~I���(Hc���
���3"
^�	��,H�%�Z` ���^qA��NN��>3)x���I���|���qKP�������6N$��M�s �I=�bd�Re_�n�$#�q����1�)�H�H�m���=����"�]��8�$Yl���;���^S���s~r/����n�_k}����e/Iqt`�
���YMz'y�������2@NY�(�5�Z��kq(Q��lR�!���������	S,,�y�|��P��	�xX�&�|��_�������c�(��X����O��P^�����)��������*��p "n���C�
a�T*n�6�]V��I���B.>���R�����F���d>����&"�:�I+���"�ODptU�xq`��"��a�>�������7791����tCjkvIn0de��qB�.�dW��c}�����������(��bV��>�tKf8X��(�L;;l�jh����fE���BYA����a�����s����(��D,��DY���a��(28����c����U�O�@��cH�7���2�S�����w�U;�P����T�(V\~�R]��*:�e�w��\�:�(�/a(H���2��YL&2.�,�0j��(�m�$����{��{K���(�(���_��LheDF�1�|��B��!���,i�������D�p�)����;� ^��h&?�����@>zuU��.�`����;E��3����l�d,48���������,��}gE).���lM0����������������E���C����e���\�$����wL3I�T9�:���B�NSE���v�M"7*Fy��Kqg��#J��������k��������+�U�_�{���Tu��L��vJV�E�6�o�������.@�#����2��P�w!H4���*�Pb�w��"	�jos�������t��M�C�N�1D6�,`_�z
i�*����2�s��^bg$2� ����C����B�I?��	 A�J����Q�oO���U�b��
Y���1��|�2��B�F��\����Oip�\D�T�,$�Q$�P�RZ�	X�D	��5�p��C���+��vh��FQ[�����kt+C>A���o��V>�'���A|X-�
~e��1z�3R������.D�9��:��E�?���\=��vD���P<w�;�s�Jod����3�Q�$W���v���Px2�U+D��@39�1
�3�#N5]�Hl�e����j�:�4Z��b����|��4�)����c��Ke�0��iDT~gR��$��0$ut�|�l�%J���e-�l�A1�K1����C��oM&p0���P���7�^\ED��
�Z��^��TMz'��Z_"��aSd?��)!W����w�>������3I��q{A�=:n�Qy���c(9\�M��vj"����!Qdk��w�gE�/�h�;#����(��.�A�Sx�����7�w���A�o�O����&���3r�1y�^�Wx�*P�N�4�g���fe������
.�Q��������#q���<h�A�inH�4��>����7�p�o��V�b,���D��UZm��� ��As�����n(�3�#�b��	��5��#�~R�Sx��qk�2���,����n@�^ ��\�zT��Q%��E���L�i�0������J�����H�$K��V\��7������E�M��>�|7i���7�g����7��V�v���u"6`��n����"��Y��yA�����	+1<������I��`�N�N}�7.B�3H\�����a(�2�Y�q����=�����,�?�Rr<��N�s�������8u�C�9�D��9����k�!�Grg���p�b�$3�,A��Y)��F���]�$�5�4���:%mYC���Z�y���7*3:����B��Y'���E�����&&��(������A�#;�v5n�C��ef-Cg �%�|4h�I�d3�h,�b1q����F���AT�d3B�N#g����c��F�����1/w���8���3)`I�]�b����w!��?�#m��h�''	N��X�6A�A>����T�.��k�*�[�sg2�-�H�h�����qA�q�����zH�=�R$�a��-��|�&�9� �=�D����<��d*�|`��ax{"��Y>���_����}"��\�1 ��/�����������=��G�N$��B���38�>��cI���n2����ul,��EC��k7G�$�S���� 2j6�����4C�v��n��O�����;���"��iC���%}���x&g�wb��*��<@NN�%D���`��6���1|K�q6m#;����+�����D����((q����nk��o����������G�<����y���d#h�w��wA�{����h3Y���u8�g2���f:�;Qs��*#��C��W��'���u�Z�.�*/�r�Y6I-�L�I������;#)U����d��-�����@m�L�\7��D�[0�����x�IE�;�!P��� ���� �������0��A�/��nU��$��w��e�E��������^P�Sq�-J��U�� y��-w�O����Q��zWj�xO@�u�l�|{�_P��,r��j[LL�yO
����Q�:�����S��O`���b�E��;TSb@������9j�p�J�*�|�_�8qV��1z�\Myc�<l��j���P�.��,�`���0����W7���9�2�`�+�����v!#������-�$"-i���0��L�p�7�]c�n��y�,����u���*��?K>��
�Az��F�7��A��:��"��'�V���^���K�)����||������6����mL�Y����\�@�A�1!������)]v(��`-&@S��,��/��n��_�@C���
���c��UA,uM��W�9�@W-����~^���+=�$Jc+�W����S�����l=YQ�?�"�
�����.�Q�g�
�.ov��x�H��S����p_�����:�,��	RP�q}�E�XXR>��Q���QGT�-�9����)aj������u$�ZI�/4�+D����
,��X�)Ne�7+H*�:�g������R���>�'_��B���)��O<����\��qS����*T�����"T)�n�
&^�8��po�w��m���n������-�e����b��o��zk/�uo�=���d����_��\%�a�z`�'[��B��5M�6�A�B��3�^��@�S����H�m��J �+0�It�u� �
Ti{_�m<��f�21tw�cf�1���,������=�z�|������
�������_7��6��ghr$.����K�4�����
L��W$�� f�[mE"�Os����@�}j��M�C5�yZ�B�47O�=�\�B�?���n;����m/ "�sV���M���H*����d���N�$>��+p=Oy��C�I����,�Q"����K�������CmBo���p��
���	`����l���t���������W�Ns�������&���C1Z��
����J�������[7n���h�\�X�2X���
[�S��c��|4������[Q��!'���w�H�VF`��*�7����������H�4�D�3������:r��W�2�[��2d���}��ZQ��c}� ^E*o{�@yx�����T
�W;;r��:sj����b"nC��|�"`�j
~r��"��?+�2�xr��np"F���sXD�cx+��s{�Ta���������~�H���B�)����\1��G�=�WQ���gZo!Gy����S{���H[���qQG�[��{���
���jAx+Jj����g"��R�R����#s����hOT��s�-�e�Do�_����c���E���~rQ����E���'��X��������X��8����M�eX�`��.�u�_I��)����NB�X%���$��O���c��{�-p�n�������K���B� ���4{���B��-�.�T�MTJsr��_���&["���/_H���Y�x��������JfU��?�5���1I��Ak�e�o������18��/��E��M�u����PD��O��\��q�%w���Y����
��� ���3��]Q|S6���N�������7���D��WRd�`���E��R4\�a���1U�h�!&���4�{�W��
����������h��x����$����AG�����V��,����U���c�"���Ch��0\d���b��=����6��6���jC��(S
�'py[��er"��Q,��/���.{�>��������3X�Z��mO5~����_HvGw��H���/\T����*�6�Y@V��+{e��Z�e��e
*����_Lw��D�}�@s<\>�� 8Q�e��9dDsW�(q/������y!G��L�=V{g�H�nk^��i����
��f�P�%�����F�W�Z�X0�mp���c��935x�����o��Z����3a�3j��c������'}��nD�������r=~�^�G����p)N���E�p3����$��^H�=���t�l���m�H�����0� �����t��]������G����G�����6M�=����>n[32�Ms%I�����n��:�4��Sq��N�����p����a.���6����f
*��n{eW��@x`�b��@�W$ ��v��?�ZK�$�/��u��
-Dd��1_a�n;���lO@:�2����)����v:+jJ��3�����+�L�N�@�m����%��wbXl�Wl����2A�m���.#�-�B5�)��������*]�CM2�U�2���(���+B���N��������t�����}����,H��)��X1�.F��$������;T������Rm����G����*6�,��H����f�o^�������D�p���h�6�T���xjP4������3r�L�)�/&�<l��i��
�(j�o�����������"j���^f�_=������^���I��nIl!���xW��_H�n����)�Q���+�����&�':a�
��U�2*10}0�g-D�g�,�"{�9FO��7�\.��{g��I>����Y�J������TN�7�s���f1n��nc"�o�1`�Ens[��O�v����&8�"��f��NvN�������8�)��v;�)&@^(��?��)����F0hw,A�#�BR�]
��<~V ����h?cZ�1��e-�P����l4�o	�?�#��y�		��m��J���lE��#~�m�0V��Vn�R�gi�T���=��a���Hl��v;�S@*za�/�#����#)o��H-�@�����b���
.6��y�����>�~��F^�~��s�{�&6��D�H��8������0���u�?�ZQK�3@����.J�cDO�����[���(���m���Xj�����������+�?��7�o�1��'���ZQv�.NE�N��He����.[VA�y�&���g;n������*�/;���n��.�C
��������?Q-��s�0�,j/�_\�v�|H�7z~�7��L��H���a[����8w,���R���|,�I���O�d��$��r�U�6�� �Z�P���F{q���@�;��i:��"�C#����O3���O�N8���Pn�n�48t���e���8�����v<V��PR��9�s��cE
0��{��0��f'y^��'r�}�?U�=��O�-��. ��������-ECT�������]�p=���y�7q�w��Fct�o2jh���<������v����W;h�
�$����TNwY*VNw�������z�&�5����,��b�E�����'3���N�
�>���������\Nr���3>+S������n���DD���L����>/2c���9����b(�Q���O��5%�?�WG�)8��}~��������f�>���r����X�?:���YH�]}P����ir+�-�������Hk����U����������
R����������e���3�	`RZ�����N��.K�`Uw��dO�#4y�I3�������e3��RF�����V�c�V$s_	�3����"�L'�?�,#�C+�1cf�Vp�XmW����4�*��cb�gE����T%�)-�8��RV>or�
�����NY*�s���M>!����;�}���yZ�Xt�Z���.R����e;��p����a/���/+j�������j�cY+�1Vd��6�W��T�$d��z��s�a��}����r���6
��"�WE���Ev�S����7;��	���W�*E=y�s��T�>�����6L�/+�2�Q��Y}�;���5K�N�������D=+*�1n�J���)H�7����������?��N{h�RA�=>��N�<�|!"�V��I������}xmK��1��\��2S=|$�:GC+����!�����"1�4#|�$��Q�l����$�;0W��/0Ns��$W��rDT�!K#2��K�w{�M0�&���Vbu�?��%�$\Qf2��@��=���@�����>���g���C�	����e���Q�47w����� �|�4�P����$��<r��js��F�'���;$�����i ���#>�@�F�?���������40�������@+������w) D��n���[��5�C���~��������
�R�>L&>|P�7|�@Sv����m�~���^t����_1x��B�����
�Z�n��������w�C
"@�n�\i�7����hR
\���6��"?h4V�[��F>~�m*�����N������!�����b������C�N���x&6zP�s��A[��� ��������J���r�]�n�����`�^�2m@���z6~��l,pC�gIO��N���<v�wU�<v��~��7�����V5r�����7�SdqCU��Q�!'�Y���?��PE:�T?/�����;�H��sSF�<�|'��Co�sMy���=�����o=+@��S2/�����@�����-\���_�z7+K;�$��M��6mH67�'0�
�����o�Do����!���@{��X{3�4������%�����47���g�<�f��90s_E0�ZH���(��������@��Y7�7J�sc-��w�be���}z��)��{�����3r>~V �f�����g��
o�����^U���!�?/�{?��S�������X�������J�'[�����,5i7�g��v��i�fHUk�����\������C�/�t���YP��x.6~����^��	����A/Hk�m��������kv����XX.3|�����=��~^D?6��k'.&W��
_�t�L�����T4���zX�)
m����5���J��)O�-�ta�9}�sZ��p�(�[��I����{��>H�o��@$�L�YqS���]n�	��dE	����*���z{1-��mb����.H�����%-@���!w3�X�UH��fL��Ot���V�Y���Y�	�GXR�-�����7�M��UZ��j���Y�����Z���f��-�� ',)AO=���2`��-��Y�j(��-���Q-���&��m��������0O`7}yC��QaJ�9L)�&SZ�|m6��e�����T��lL'�)��R��!5m=��de�]u>������JW��FP&�J��S�c�4��}Z6OD�A���)�{I��^��JZ���Qyz0#J	�r&/���wH�W��� c�c&�4�2���N�c��Kb��A%���9m���/i��QA��[>zj�l�d����2z
���inUO3��*R�')*��
�uA;�Up>IS��)0y<E6U%I�z��Z�9��[80C������-�$��g~eM��S%T5�j%����j����6YY+q�.�����G,}���#�<�)|
����VCY����pem��	}1����j L�K-�g���K�+9�$I6�>�3���r��/
�|��~����
��������*�Gcs��h��1�O�������2?V������2��.$�SM�����S�2�t��sn;��lE�O4wGU�GvP���*+
��f�ST��+�H,Z^�v[j���m����l�D'%1���i�\������T7��������Q�c��2�������X��u����C�$�t>���Am��M��d�����b��w*���G��jk(�)�9��
��� {��r�G���i�Id~���h�����"�LP
.��P����1��sJ�r�b����){V}�^i�x�J%��^�	wqJA�'5��8��].\R�'�.i����������0�)a���
�d)�����9vZ.(<��I����`��{�a����[:�M��:|+�B�-M���L[\C�����w�iL,�'_��_N�����!�'7�'��/*�����Au���
�
��ZP���5����v��Qq�/�����]� J��+|��@��� i��P���9J`�h��c����p�;C5������r�v.IfN�i	<W���m��(��>}"}A
�*3�����X8�	�����yA;�67T%F\f��>oT��Z�����i�B�?�X��]����w+������d�}�*��Q���gEI�q�Dm6A
ux�T�i�����K~z�K6m��������d�Vv+�Eym7�dk�.Kx��"��hg"
��`466_nQQ�_L��?�\��u#Nd��x���\�����'r��
� r'�uG�!�f�s6h)��8��e)%Z���C����~�:0�G��{Z�����uC���������R��������0������	3i���|N������U���������H��(Fm���s��&�Y`4e�����F	���Q��a�y��
�q%�E[HL*8�M�n���M�Y|E���0�i���\�mp)��Fl����B!s�����9���W�t'����nc�Jb���G���Z�v��S�����e�3
RTdy����|�(�k�*�i(62��Xjkg��i�[�fT������l�7�A�%��1I��t�m	����Yf���M��{�������>J����u�V�H�?�q�	F\K�c
&+q�������z4������<��z"U\W1]�2�����>�u��MW��u���d�J�U��G9��k��'��k��'��k��'��k��'��k��'��+�_��=��r�lb\GbI�N���*�n�_��^�/5J����&��t~�����OB3���}���\��>��-������O�����m��������x>C�O�_�����������\?.� ����F��}}����?l_�����_�����o�������S�p�u��������O�f$s��o$[���19w�sV"2�}��&0��D6���C�t��<�~pV�����|#��t8a���O���S!���_��fw��[bR��)��G{���y��Q���<�����K����	�#�+�����G���sQ'RU'`�����v���]JT>�%���s�����d8��u��Va��BD�_D���C�n�*J�b�����I���L�$:�Ap��Z�0z<�������}��@��s ��F��$�pn$7����rB�+Y7]�=���4��]7�R�4�J�n���W�^I��j�[��X����a��P�qTV�u�s�d�`Z��K��Un2k�XMM7�6��������U/�uAp0�o��Y�:�<���G�]���
������/��Rd5�����7@}�^��>lc���>����Y�CG"	t�C����0��Ui?��_����c�y������G�:��e�	�j��e'���
07��^I���)!��e'���h�6������Ued`�&������B����
7d�����x����.�a�u-��7�����}�:�
{��������\?�d����t���/��X�1����c}s������Z�����
.v;�iAI����gM����Q�=\P�W�.fz&�u;eZ���"O��q�����ZpR�Dz#�'3��B�"~�#��W�wZ�=�g��\�o�����[��o9�LFm!'~�S*��v���Dky��1w+�oa��f��C7��i+B����T�lO�]���E�h;]�[���|���t�^�_z$�����e'��7u�����%@�J�k^9�@%"�o4�nQ��!������8<[�m����'�����B-��C���D���������-o;�?����@� �9������q�! ���d3�vdG[PS��@�uX���
IY���=tU���SSb%��'spi�B��3�=&�u�����>r��
M�f�-�w/���e�c�r���h�A��B��a��;P�';L+�$}M�Z�6ZwA����'�Eh!#��V$�Ic.���<!�H@�c.�m��@76~�=$YV���������5����������g��em�NT5/o�$�����VJ"R6n���=qjO���i!"c�=�t7wfO^�������#�0�j,mB*�O�q@R�V$�g�:Y�N������W�=����$�[w$�u4�8x�
4����>'�#j �������)?/$������b*�,�
�������|-�jJ�]�W�P����<G}���������[<���-�g�&=��y1���$�w��!���~nI��E`�����\�J���U��y��f�l0���-���9SC���3�����~����dA]WE�kv�3�m.@%Y[L��
����t�m�w��i��� "c;�b�W����������|�Ns��:����?z���6�`h+��
p������H���Z�`�80M���L���gF�8W���*E�9�
���X��a���+�u�����(����y",�^L��������fB�lci��FW�_Q���yDp�f�"���aD�*]�q��������9�Z}���ysM{�;��I7�w�-�I���>���������T�P�A|� ��,D��=��������i�6�4�|�|�iDb����p�����FM����0g��@����e�1p��Es��5�B�>�0S�����������2o.g
�6���� s	�r�a����NL�nq4��)�������0������m��I���Lh��S��$[��TF������K�K`�_�� �K��lG�b��w��J���n�a�_�*<�6������t����HS&��S��d�%���^Q�U��FI�R+p��\S�#:
jR%b�5?R�����I#�qd(���
�z4<�LE����M[�F����Fni��*%d���>G;n�R�6-H�����
���gB<�'�>�a$d�� =�(o�lcd--D�{+V,�)����������9�_�rw���}����X^'�/����H����u
L�"�~6�w����;m��o��$����+�$���h��N���n��.{���a�c�=��;��:�g�v��zAM���-{�O�!G����bAx� ����.V$����R��3|�C]_��Yf�q���u�S��J?{�7T��������
3�Xv�0�+��n��}l����B�x���B���!�zR�y�jg��
dv$�������
��)���eD���:��2U�d��X������3Yv�;0����������'��M(!����"E������ ��|�V���M�dlg0��B��nk2t~Q�M�qrE8|y.���);
��}S�v+�}+A��1r ,��Ogv���\5��\�sLh=if7��V��*�P���3fX*	���� ��l�/$�u�5����L����H����a�}�L�m�+���*���YE���z�CZ�L?�
�ur��.�4��"�3�-���'ai�*�g�4��������O@l9����=�f�)H��y�l�����@6��
8�����N�y���*��9���YYa&N���3���$��D�F�����V+���[(��s)���M�BS��U5��T�6���op?�E�=R��Qc�<7�.i��-�j�lAkE	h������Xss7��=(%MC_�7L�T�OE$�cm��Z��i��^H�a��n4f��	+�F����k��P�#�`���+ [X���_(��
f���X�Bj�-c&��S��7����m�~�7�Jx����'�)`C�)���i�q����������N�,�uj�K���~� ����
|���^��^���F%�W�q��Rg�����6l���di%!�XP7�����H�#��ntc;�*��pi"�������7y!t��<L��|���~���\*�B�dN<�O����h����C�8l���$�E{=��?o��%=���>/��/T@��TI�^'���p>T������l68=I�;����>V��3Q	s����S)��ZBYcHZUX����������P��V�}���n�C.h�U�h�Q��k`��M���He���I�����D-X�	k���&&I_H�m�	d�7�'f0�t�%%�`4�����p�:��|�����G�9� �%�TsY7�W$_3�X��������O���o����5�"����?*�����Gu����������<����)����_L<��>|�
u{!������'7O�~!W^�3zt	'z!*r�7�#X�0�Bc%"?>/�?�7V��P]G|b���rp*.�T��f���`�4�����?�D���SI�M?���M��5c�M�ol���)�b�3c����<}���<�e|+�t����,����+Se�]#W�j`FM�GO��������	�H@���9Ln^S�|��dQB(2<�{r�"��� ��m�;_H��,��t��$�^�	�����c7C�����-~���h��	$�������am/H�?�)4�exC��FV�+��kUnuV}��k��m1����1C�c�����&E�K:��G�����_1��������)��k@� �a+<������f���`�"q>�H���!j��X�Y,���1[Z�B
l�R&�dG\���F|��:�=������i��og!(�Y��b\W�s��4���@���Me�JoQ�z���G���d"lmb�Td�E���:
�8�N����7�����s9�������z����Z�)���>���1��He��Q�W�>@ }���wk���V�����+�^H�����3������$�x�^��&-�&����:��9�z-�)���q�����bA��V^�UZh�'�4��}�Q�u7w;�jA�m��=R���"��y�T��,;j�C����H���Q���Sh��_$�h�f��C�6�WO���c�S�F��+a^y
���=&F�A+QC��J�����S�d����{c�����������t��g��=�d���v%!3�1l=��:Qy���f��#��$�{"��>�BJ��?���M�PE����������z#����(=��\�	��������������p�����o�C�Ng{!9#U��@R���$����������b(�
Y�9���E���f�Z�]�2��e���7�D�"F����x������%^~����w�m�&'���y���	�=}���Bg<#�2���d���������S���M�.i"}��g��u/��g4q2zrc�;^�F�$����40��-�-����9��l�����x����/.��8����"u�c��K�����#k(�2�_��|��39���;c����n�R6&v$���C5����J���+Ry��]eT�J�m������G�����89~Y������kq*]E�/W���qLls�M���!!�32}V�x�m�z�I�W�$Lh�H����e�N�y�x��d�)��x��6��RU������?D]#,��?EI|� ����?��>+����Z��N6�l������T>�����dYuuGj7��Vn@�_d=���������ds�&��"{	�"O?��/��l����M>��
B�A�� ��@��s"�i�0����3�.���?Xe�y���>JF�^��������"���M�� �i>������d)��t'��wLeV�GU��f�����-���!����z�$7���X���$vyI�������%C6kx���~��g7�8'���
��U�N3�3SM�d��6Y5�d(R���,[eZ�S�gA���&`�5^"a��<cU�JVG=��
��8��X�<��
4s�fx�o�Y�r1��e��s����"��<w%ntO��
���y�m�[�Y�k9�����d�����2NZ@6k���>jO`���2KM?7���|��[���S���+hA���ix�����OMq��������iTN����&�As�;`N���
����6�i?��}V$��c)��I��{_H���s^U.��R�X��g���v?tcc2��rQ��w�����4��$�|�2�T��)���T�}�Zh
�6�&��a>�+|1���y������'�����l����)�du_��D��p��HT'�4���L���M�
�����K���A�m����j=�qk��#p��8�ra���H��
���t2�h��"���| �:���Y7��1��c�?-}u,�Z{�\��o�pDmm��-��B��c�ND�����/��W��3���(e��,����wM���^�X[����\@r��w�3�<x��
t,9^���r��HZ����8J���)�n��,�f�:�fg��U��L�ujEs����������������Dn:I\����?O�<�����Q��f����\���p6$�pa$g�C@��u����#:|�aE�������?���h�L��E�/$�����3�*R����B�}�_�N�qy�	y�	��VD������f�}Q��U���������4���BzP-5��E~,����K�`<��@��$q).�S������J?�`%�=��8�������
��,[����*w,�WYW�o�����r_s��k0���VY>��x����R
�XdnG�c��
�H&����u�����>���\�}�B-�}�� ����nYN*���}��lQ�,��Q!��n�����r�3��y.��9��a�~���"��oDZ7Kh�e��hq�\�(]@�zQ�|a��g!"�I�q����)j5����,�\^�����,�H�-��h��(�9T8B�a��o��������H�����~7=��M����~j��E��HUN���Y7���,�;@;U{���U���`����^�*OK]��2��1qs��Y'o�6��'��-�[N��i�������'�FU=��������p_���a�=�v�7��M�V�\:�-�����rBL���,��S�h|X�?���F�]16���?1KA?��wK���L���}\�����������Jz��yl$J����#D����+�w���MNY��D�n��L�o�E^�K'��6����?_U�0��.F�{���4G�����T�U>,Q��|{X
o��P����6�,j�mIT%;8,��g�q6���D��������8�+���*w�2q�)�[4������7
�w��V�t������eY�C6z�7��w���`�~@}|���`����y�3���f�p��f�e]���d�}`���/�'6��o(���9�,$��;nHQq��I�v��H����x������o�8�D��/�Gwd��!���/�>K�W�x$w`F2��ix�$n��Y�����W�]�i�������7��
XqMe��Y�b�����j����=a�4�{/M;�nb\k�&�3��s=�D�
Z(����9���$�h��l��������Q����D%���"r��f�E����@V�����H�*��P�_�,����WMr�7���3��`�YQ�������`@��m��X,z�s�A��i�t���f���	��Y~�Y�1��������:hT��5���Z��7|&��7�e��R�Fu�r:�UGfl6E�����
��%qc�B�i�-��P�%�ec�������v�43d9.���dF��*h!���AX
Ve���5>����?|!��HbVNv|X��Yd�0�EZ��;�ufc�dU��V��q~�uH7
��_\�w�LSw�X�P~3��c�M���V*�V��R�{!b]�.K���[��8@�u
]�K.�El�L&��h�;��Y�tfTQ��*��������p��=�������J��I���mf�;�,��Aw��u}��|�8z���������:���E>�c���y!"2+6���f�v���
0u�����;�D��m��,�e������g�&��5������M�.&}��@K��[��rcfL, �%��]���V�U9IO��v[����
REaD��T�z�B�X��#�x���y�AWc�}rbc�$����g�0�=V�d���y2��Vo�9�r�P�n�!I*��D��v��^��E���Lsd�R -PX�n�6M^������'��I�v��B�,c,��[��o�Pw��8�wz;G,-��<����m��/X���)��Z���,bFa;������u���������g'���g@�J�
���b�>�|p;R��'�C gI#�m'
�e�2rp�m�Ctp���J����a!P;����_W,���TY�ZAZ	�;z��<�0����G�6'��l]�aCA����gwt�z���:���QP�YzR�r��l�{���(����s?F$�f�Nj�|�	O�#y�P���6t�iC�_�O����������n���������[����_�����z�!j�U\���:�|}?�����7���!�������zT]+'{@J���@�M����������f����{�J=����d��N3�{w�;Rk.��+�p�y#���e�E��D�*�x�Dg��@^H���]��8��(���%�u<������69���?2�U�z����� ������-����d���gn�\���14�(HR�U�h~r�n���gEYf<����]�5]��Z���s����4��W65�[�Z��:��*_�.�6-�)���B����Yzt���L�0�0�U�'��Z3G_���U��}A,Z?'E�3+0n6���J����+-n�}��9"3�^	TV<$��{�]k������m�����NA�����qg���d)[iYA��gQ`����N'��e{�������jO&@�Tp�xi)�������+����tEhhM��/����{
m�)�0���tE��v7����(�RMrN���(��$�x!:����`�nRL	eCZ����v��0�Y���d����t����
���Q, *ftAp����k3]s;�"�b����`V�_�/���.Dd
�%��xXGp��
�->������	}V�e��V(��i������[���tEZ
�L�1*�������k���?�����w�&���7L�BD6/�C=�e�E}���E}��2��X�6��RMg����E�aR�����=�-���E��dMEl���n�lO3�aHd�[
 .k1L��t+�}�
�q�������MS�����lL�,������.(3�<����"�
���I
{Z���=�5�s��.D7��O2��A�)�iEY`LW�O8npk��$��r�m��+�*���; aO$�R��TonM���s@����tA��S�5��{��.��R'kz�h���Ts&��^�����t�B]cp1�����e^���z��-��Tp�Q�(Ps�<��������Zl#J]�q�����H�)�Q�G��J�
�]t��WU;:��8�Hd%I�i��C��Ib���a��|�H��>�����9-/d%"�����,�����TQ��&�8��7]��Y�	4�-���t�*H��������a��"����e�eE�~l�������eu�?�m$A��"����l��>��|���1)��n[�������c0a��+�B���*�z�"�8��5<��^�c�6Od���+��@n_���������
0���JmE"��g�I��g��o\o��8�>IZ��:b�bw�����Oc�7R�(�� HiM�_
��m(H7;2�Hl��vta����l�}%-��Kn1g������y#���oP�6�y���X��R{�7�m]������v��c�^���Yq���������h�����+����j���l@�?��;Z����m�e��%�m�w�ov����t���1�����>-�$U����������gxd�Uu�+/�����"�2��SgL�NX������jz���Q����
������q�
=���P�uI����������,�����i��U
/�i�*?t���@��=���K�����M��iA?�4��1K����4����)����/H����P�u�0��(bE �iq��s?/��*\�8�s�$R�'}�_��M<oaA���I��:�CjJx���Uf$U���Z&�?��� g��`!�,���7:������N��`��T�Hdbh2����������?���Z���eJ,��@B9��	������'#.
�~1��mT�����X
��� ����-��
"���WB�{$�^O��w�."�� ��K2}��tM������X��V�?B��W������mN������`5
H���=������Mw��H� ��u9�T=��f��	���,���0.:�:6���g��k7����@�p���>��PwN�iDY�&_�pZ(Y���|��g/�<�c!����lZp� E4_��/��;����bx���of�H��~d��o�X�BTo�H���JPl~��5 ��<��R���+���{	���D��O�aL%*Bf��7*�����>��1���^Hg�ef�|n���iV��*���N/H���Tc���G	����Z�����2����'���[�;.H�����	 �����R2�s�� �S�`&GS������"$7������y����J�������gZ-y��D:u�o$�E�9�8+7����|
�U�j�`&�sO.p �"���}s��I��4�+���( ��ayeR��s��h� ��,��^��o����I@Z/�II
���i9�Z��Y�0W��6/�`7W��@+�O���p�3��5�2���������,�h����z����,'�_�9c�����?�x�E>,��1�����3�
<>�q_kA(���}��
��r����Z ��&:	��xF�m�]�{j��I}
�e��u�F�_|���Y�H���7������V$�3����������|L��
��U#�+Q�f#�i!�d�@7��/�)��_�]EuJ��2�4��Le���$��~%M�����F%Zo���5��`��	����B��*dy����1G����2@� '�@|�X������R�U���<,�������:{�"����}�����3n�z"��H_��HsTn������x{�D���0�(Yq/?�2���h��Z�{�+p�o���
�^���=���>����e���QWh���L�c��p��&��iWM�^��S;�R�k�l��1��3�4��k��*u��S)�R�\�
i��l�eTm%�)��e�E��Q�?m�BU�1�J�qrFk�Qh�L�9��-^|��� YO��w
pk�5�/�xO!��hpG���A��w�V�K/�Y�,���f{L�"9g��G�o����M�H��|{,�e����0�����0���T�MM�z��$3�P���'�YPS�!F��������a����N��\�Z�n�S�Q
Z�7S��?l���e�|?]�!�w�?�8������l&mx�8�5�;�\}��t��Z�����!��MWp��(�2�����I��	� H��$fk[B5�����I2	���{�9�����>#��8�qc����C?1Y��++�o�PK}�xr"H�o�N�{��MF
:'�t]�d�A�lw�q@�%�f�iE���)H��Ca��si����-�1p��7cV����,���'"��������Y>���a�(Q&���x�����O%*��7]+��e�mE��W��:����(������_H���0����Q	�u� &c6�;����~ _E1�M�����(���1��������P���T�`���-2���'�P�*�A�@]�2��l.������>�x��'�6@��s��.D[�;
��)B0�b�
>������?���)�A�~7h����� P��3���L�D?�y��Y�^�4��� R~m�K�3��#Z�h�B�|b>���]�/`����������B+/$��
R��X���;���1@�[L� �y����<��\M��E]�������,�X��N\���{���&{���d���U������m��"�5L��(u��� @�e&�+�U`���2��HT���E�������JD��>�	�-���e$^��3g���'�����/��l"�������|�����Q�����!���'���J��
�A���S,>�!��	'c�&Z%��6��/�������F4��P��[�V�=O���$�,#��C�;e��6���2��GR�	�0�f&}� m����B98�I���]��]�<��7�,���f�������i`/�/]��/gL�bL�	��+�\���:��u�>�_����c�����t:��f-��:���x�>���oCuL?���)��R%eL7�923��f���5~5}�6��ha��Gz�������&��������:��~�5����<�OY��i��9�����9�c#���~ 
gD����Q��)�G��b����M���-�n%�Yyg#���>�jIa��K��7N���&����`M�8/�.V����_�������_��Q~m���\�������z]�/������Y�:�|}��s�.��u��k���\�O��b�����r}�������^�����t}{J�A��g�>���Y���r�,�1_?��c��������R���yf���{�z�tb�>��SL���\�z����)�����:�t]�u����Z�s-�Y�w���z��)�����5���j��������1]��\�����_k��Z�{-����<�������YZ�l]���s�:k�>���������*�b��b���������R��������W��k���j��|���/7�����!���^�u�f��zt3�|}��s����1_�n`���{70C,��z}���f������z}+��@��~=��b���\�{70C���R�
�����^�7��b���X����/���!v�on�]��b������_���77����
��sC������7����
��sC����^��b��������!v�on�]��b�������
1Cnb���~;����-s�!q=�������w��s�nH\��?���^���?k���|��7$��R&��Z�k-�;�
����7$���_k��Z�{-���w�J��������Wr���)����?��Wd�d����:F���g1�O���N���B��� ���T�=8R�X���3�Q��@I�39�����AzJ��S�������������������YY����D��d�H��7,����S�`=t������QC�x���H�����TQBn����?p"�������*@�h�i+RY�p������l����k<�N7�m������,�
y���JB�5���TCv�y��)���H+���`@y �������Ge�N�Y,g�����sC[������$�To{ ��y!�����qg0�\�d�������D-�j��uv����E������r�W""����U����"j��v�8�=(�B�,iXg,�`���`2:�F����`h�4��nj��8�B�J��b�G)�D�����vJRf�*��:4�-�D�>�X���l����1!��6��J�Z�'�m�p������Wj��(\<�%Z��5��������V�]e9UZd���i��/kF�}�k�,�P�@����&��~��0��;�B�K��L�,��M��F�0�x����rX���F����h���d����<X����Ti��-�B'/(�w���h;�#��
�6�L<F�&���l}u�w��p�>|�4G�ke\zR4�q��"�[8h\e�S8���\��B�I��l��M���X�����+.N��O��v�=^�F��F6�S&zH��DV+Q;y�C��Gu.����i��8F���f��V���G�]��Z6���0F�z��rt�i�
 j���>����i��?#���{�� �(��;X�n-HV�tNd7��u����1��i��+��RK��WXY�B�+�x^"^�Y�q��'��W�\]�`H=M�q���%{�{@�$;���j
.>�4S��{�8=�W��1@-X�	k>SIrmT�M���G�Nlh�����	�?���A���y�S����^(�[wL@!/��E�3�l��{d='O�"j���2Lg'7�����b�v����7
p�:��dk���L[��p�:�8�l9���6��*@B
�O���������>�����E8����Awt<���aH���D<����UA��@oN���,�����I��������.?[���U -P�����G&�D�XUG�\0}>�=�V�]��P�����2�|�H��Qet���Vz�(�%N��a�"�B�����xy���.���� ;�'�_��~���3������ ����s������v�*�� )�����G�P.�1���}f�5����y�J��'��������Y�&ahoV���u':��/)�M/`k�^��tV�Dz��q�/	W��>?3�@oE�z��<��8��������
�5���Q{�@��w��Ds0
hE���&J�:��@[��(-S[�/�������'���`�`JPs������u>o��,��PbnY&��;������Z����wy<�e������-�o������IF�`�<i�zs�U��
����@�6}��A�C�@��N�>B������hl��k�\_����=^a�%�����������'

�3���HCH�8��`���[�U�F�I;�\6b�{��y�`<��q�+	�q�A�x���+r�>/�����r���#���N:�/�u5T��8���b�NF�2A���,&���x<�� �8����O��ZI�C�Yi�d�o�}q���+�-#!��J����9��Z0Dj��t���N`��y�Pf+�b|���|nNU�j
>�Z�r�=��]�9f
�o4:4��������&��S �z�#�qY��ha�JB�8���+w��13���[bx�����]f���a�c����_�v��D���3&m�Ug���f��[lS��e�$[�i�� tF��+�<���D�����0h���U���H�p������S`���BtV���� �J��d"��`n^�� �9���u
�����U���_����{�xSF�EN����@�$��$2lD#C�/���� j��n���j�R{��\K�H��Y��1��Xi3A����Rb����z�� ����
�5����g�����-���+�ik�!'�G�M�f�5�"�H7|��{6�����qK)���}=�����'z�T0����^����\�)�����,����kM�k�����*��x?���^��'#�$R�\�ns��e�YQS�� l����p�e}x!�	O@v*`s>8�O"�T��F:�#G��[3�`*��!s����Y����U�A�r�J��{Xo>V]L�S���,N�G%��7:��V���@��q ���w#����U�y���i�G�)o��R���DV��#@!XMc�J������EO����+P����x�\]��JD���L��G"���N�S��d���3����Z#�e\H�wm	x(�p�g�h�n*�VG�j��r���@��6�Y��s��I5�cuN�89L	#`+��#�g0o��f����Hd��_����Z���y!U%,����+���'��t�H�(1G1/]O��~��2N_���~�t���*����U��/T<������J�]��Y���s��c�F����'7�/$��L��g��B��`�M����2�3� ��z����I1`�_�	9���d�m.�����&��"-U����b�_���g���%f�V"r������������e
P��R���{{�$c��7t��S2�-��B�'�i_�T�
��j�?+R�/L#�d�_H�1[�vU2�]��/���	��d���fD�gf��-��4|=�K������[�Yu�v��b
�3@'�l��>���q�/���}"�7P��:�3�
��@��a���b�WT�U����b�_j�c�������]�`-H�{R2�*@J�7+@j>=�Nz!�����3UB4�l��Fgf��ca*R�������|�V��$y�5X��B�p{4O>;��}��16y� �1�N��a�Cm�|�J�,�J���
�Z0!�����'';|�HV�^<\�;�����Os�.u�����f�����oU�G]��hz�}!���nn����������������5w�T���~C.���`���o�G8���S���\��n^lfw�G��S_\�u���=
t��?)(U�L���baI��
z�7��U�������M���2���Of'�����"��l��e,��:��/$�h��3Q����y���h�o.�,9Q���>qg��^s'"�&7����bA��,O�>z��b/����K��v��m���n,K�F�����2R
gg���7o@����7��h�X�N�y#4�M�v6��)�DlU��s��F%�����+�����!{�}^L~sr�b��d_	ds>��R�x��Ti{_�m<��f�21tw�F��	m�AY.'�},���'N#��O\���'.��������z��o#�����t���%�~�s�����36���H��E�l���D����9:��0��6����.<�jpc�J����K��G�N������<�/��m/ "�x8�H��n��^vER���7�t>$t�%�}�W$�z�������}����L��� �Jd����w)�p39�z�M���?�Vh��H��d`������x��WV$`�e���m.^Ddv5����JE8��>��V2�heE�����q�,D��������
oaN)���_����Kc����`�n����w��VFRD�i����F��B<^�����ASOd�����U�#��c�U�����V$�������M��ZQ�iv���H�m��T�
2�[Q�*�_���]g
�C��M����

���a��)��e^�����(��!5�1�
D���!�yYD�cx+:'�s{�Ta���������~�H������)��">��G�=�WQ���gZo!R2�}�����=��V�-��������-L��W���V}� ���E�g!�
D�����:��#s����ho�f=�����A�EaK+����Gi����QZ���Gi������c�cc`��� 8�/t�����M�eX�`��.�u�_I��)����NB�X%���t�szL��c��{�aMG��[^��x����].r��@�N��hx/t�W���iE�o�R��[��JD�6����u/�_��7�����$Fs%��/�E�^
�����������n��V^H��������@��C?�18��/$��y�����}�U"2�0���j��6�	����A�f�J*@����h��P�(�)��Vnp�D��[�U������P"��+)�D�p����D).�0�J�T|�������<�5_��[Y���X�q���|�}�'N�LR�n���nQ����^�Wio��1K(]p&B%�>}�-�-$F��Z(�:�{`�F������'f������ZE-
��cq����W"���Z������sF�mD5d�����Z��m���+������H���/\T�����+�~"���^Y����r�;xY�J���������#���?x&�x���jOQp��"?1��h���%�%�\\�JD���@>���X�w6���=}nz�?��V���uG;~����[P�q��U�K$|%�����w�N?���3S`�H��h�������3A�pj��c������'}��nD�[��6����-��){�Y7�)�����&X������'��'LkER���F�e��wY}�B�UX4��)�9��H�%�Kw����n��~�n`�z�n���Y�q���v���z�W��E����>�������x$
���=��$��($Qv�a
*�����/�����=FL}(�����-L�_�9���K%|E*O'[�����W�u;���lO�.T�[&���y1>3���N�aEM��U���^��
�G�|y��d��w�3��b�)�-��2A�m���.��k�(bD�}9I*��F����2�U�����F^���;��k�k'?��M#�����;)|�B�����$F��$��R�?�Pa�2P�!�	q���{��\)c���=�����n�E��Z-O!�N�HDN�a�o�t���c���L�J��
�7����B�)�/&�<l���D�i�Q��%�� �CT=�7~Qc�6������V�`��B����Y)`X��*��w�������Q���[���M@��o"~"�WDd`U����
�1:�:���� Z<��!]��c���~���R��������Zk�z�0$�2�T�������~�]��1���{qXh�@+�eCS^�" ����Tv�)��sY1���q��m�s��%�F%��z�Z��ek�u��7����j������X�<����lZ�1��e-P���&�+
����BB�����-q�|B"z����X�t���{���o�*�����[|�T�}+��*Q����B�Xv�Ubs@/t���R��;qFa���Iy�G�h��z���,���i\lHU�l�N{1}V9��a�� �<6���4c#��V�����U[�u�Z�����:��M��%
��EaF%�1�'���q�-�_(���O��w�K�]����
6����3\ys���_zZ3��%�S��^�uo�gE*��%��-� ��Q�����u��7���Dd������h�Xw�7(	o�ObLv<X����?Q-81��2���G
�O.[���������2�By$�E��n��h��]��Z�w���/��4	pQ�������X��_���"H��'����;h/�a_�h|g��"Mg ^Duh$�����a�����	�	�t����
�����LT�����-�CI�nx������)���������tR�W�8��������|}�lY4C��dQ�Jo�+;wF�i���H��E��-��x�|G�l4F��&��f���`�7��Q��O���'DN�Zh�J�i�V�� ']R~�?_/��x�eo8y�F{1p����'3� �������*@����1�3����<��[[���BsX��z��V���y��;�b�����I�����G��V?��V�����_]a���/���91���,5;�1�M��E�y����G'���?	Q�'�}���fr+�1���i�����Hk����U������������XQS�H�9�=�������F�_�{z_�q�L��n��dO�#4q���fHKG���$��ug��FZ�wx���|�	��W�Lip��H?�I��O6K�����n������V���>�)���
�@Hl���6��)W�,JSZPq�<9���7T�F�OF;�����_�
�@�k����	�/� :cr��������)��?/�]�;���Z���� VC�E���������ll��Z�����"O����v�d�d��H�XG��������"���#]z�8{�����_yq�%�"����+�����pf\�i��JT�y��s�)@}����m
L�/+�2�Q�$���Yd��3uB&E'�e�_�P�9p�U���MAZ��t.���
�-����v�C��

���&tb'�_f"�ie��pR#,�i�|�e^���ja�yEp����*Z�U�����F����oqA{wb^iF�rY����6�W�L���`��XD|�q����%y��u�8%l%7�-�FdN��0b����`dM��3#������>�A� ��
0��5j����m��X�gV������t:���pA�C�_(j��An�mlQ>WD�v�yA�ds9^�?���I#��Ep�����U���p����j��A�K���n��:&c6��.�"s�`!6"�
���10�]
����j����x��/8�����'��J|��}�`AdS�J|���o�����4/�i��
@�W���v�W �w�<��B��t������%y��y@�����f~����|M��i=�is{+���p@cu���p��e���
<�
Xu�mW�����'^���0~��u����3����+
���h�&8	���Q��4V2�`c��nt��/�C��+o^�����tY���6XP��j� �i�d�N���<v�wU�<v��~��7������9��Sv�-d����YB�*F�(�C
N�����
�-r+"F�\!�#���L��N�H��4L$�iA��N��k���.���\��|�Y�,�����Ei,+���z�g�(zmu����-��?	{�]z^=o^G�'�w��W� ���A��`�k�������}�O���xuU=*��(J%2j��|�|���m���0,/:N`n*���P�E-1���n0��@{����24������%�����47���g����h��k���`��0��YT%:�S�.bf����(�93��������Xrv����d?!���w=p��n&�w�PF�^}?�6|�95<YT��HCL/,���z|��?���	��N�`a��{licBZ%��V��F2'SM�E��*��xmd3�2O��Z@����K(<��AH'���?J���L�=�ma[�k��L��)Z��=�	iM�>{��X_�P�|j�a��r���.�/���]��ml�M�N�3m��'tF0$�t���=��������u���6�{:�c�=�P����Y���ds�4F)��NDd�C&��&�},Zd��9l��x�.�m�
Z0��1�M�DDf�\�P&�%3J�TS|�0���L��&����J7!z�|"H���c�����bSV!����Nz�[t����(dZ�g_��tF���-��3q�%���	�g���Wib
��}�\fI'�>�7�-�s�9vK:#��
KJ��H�YX���eC3K��
%��%�v�lIg�5a�mw=L��T_\��x������L��������[��6���
������T��dL�����R�%C��zY����ft��4��_dyJ3(A�`B6�29fPB,�:!�Ce��%~d$^�I�!��|�"[������d+�s7��T����R�����b"E�]��R���� c�s&�4�2���n�s���������*����cb��s4_��xb��9���)��}e�*��S�'=M��tB��$EE�)(��N�e��
��4u[����IUC6U%I����Z�8��K81C&�����-Z�n��_YS;���:$B]�D���Vu����&+k%���Fy<t�����0�����U�T�P����b�nR�Z�~�\Y7�jB_7��N]]�2y��!�S�$�C1TM!���R�JsC�*�����QS�O�;U@���
���Sc��j�]�=R)7����{�����Agtp"IFz\�F�QwsjYc@�����g�v6/����:��U>��j�=��s��9�I��JWw%�pZ�$����>��g�%����G*2w��N*Jb�>u�p�C"wR�@<�@T���r�}����Ee��A�X��u�n��C�L��i5��,]��?�7*��s�D�;U�)�����wJb��w�$�^m[�)�BV�4�$32�Td���^h��r�T��1�5�-���1�T*��]��n>H4�s�JC��W*Y���'H����}RO�����K�l���	� �6�H�d{}G�����5���CJYJv������}�DF���B��|���|��q3	���g��;���;�pK��!�6�P�Si�
�3
�49��U�[����=������j������J�[�:���pPYpP*+���:�6��bT<q�v���u�
z S�7����v~��
��3���V^O_v�i&�sc����r!��t��t�9����y����
����k�������'���2��=���M�������������3��}�I�>+*��?-���X�4���b��m������
@^��_�T�r3����N�>3JJ./RE[����:|z*y���'��5�%=5�����{�_���{A&�a���=��~�I����[����+S�{:���F��x�gA�D�~1c~
����7NH��`i0���[l�>��[ll����������l����c	!%Z���C��?t��Lu`f[z�����=8�6a��o�:O����yB�v��Y��mF>q3��YZx&3�5�Gx�*�����h���f���ov}��.��'`4e��������6k;�0�,,�m8� \f���������u��
 fl>V���<���ee8���i�v��������k}~v��33�u�]6?���8mQIL���x����h�wd`�3u?�|
$V�����'gz��M�
���$��m�����BT���=M�Z��-J+
��yEA��EA*�I[���4G#���.��-���k�iE����D~F��5�T����[0fi�>���O��3�0E,?��z��R�-�(q��������z4������<���w�����MNd��C���Q��*���r�A�b�������fU���X�y����Y~��������Q~�;�o����V~�=�og���s�������_���G�I�;E���$�w��s�R����k�[��G3������M|k���3�Z>�O����~\�����������_���������}]?Y>DY���������_7�P/������aQ���;4�l����>o������?�����������������T��M�O���,�U�-�+�/�6%�!e?9��������d8��D�a�;g���}z�;p����;,
I%(^{uZ/�r"U�8����������[bR�w�����V��n��'���[�#�=r��L�w��X��OzQ�V�}��w��3�/;.U���$�e�'��F��o�W)�/�b��o6��+@�pJ��N���?��~/D����K7�O�N�a���G\�y��,3S�	��.{�A��ML����zn���|��M���H���f�J��d�yqd���w�J^���-v�����j]QY���r�-�f���W�������x��cBp����m��&-�v��F�P�������+�����f!XM�?~��D��}������tsFE�l���Aw���j�6���no�_R�M��j�o?��o��X^��>�{���~$SW%"���-d���m��EX�������2�o��'�w��`"����O�u`�����]D[0!8��#T�����Y����|?�;	���P/E��Y*Z��=UFb��3�Dh�XmN�a��
8^�6��n�����CXt]K���1�Y���
�����i�;8�[�m{���$Q�4���S��.L�5�GO7��������*�^jBv�26���$�	%�`��<T��s���n�����i�`����eF�>-v�RGEH-�U��V���8�t����%�|���H�4!zVO�]�"�����	�'�PSW9~&�m"7������~���D�yH��O+�oa��&����i^��P������d_1/���Mn�{���c,_��oT����b�F���3�0:��~� =k�<i[Yt������L����[2��J�����)'.XT3�*Rg$k�Zv����Dd�����<-Zn������-;2�/���(
����|([����es���,�����i��d#uVaF?�X���W�3tU��K-��g�h7�%�MN��&x��M�@qL�>���
]�a�-�/���2�X[���n�mR�3��i0�]����V�g�Z������]:����"���\30��KJ���3�	hy�����h�����q
I���|����e�{F�k@b���^�@�Y����:����*�$��s��D�l/����}q�OL���i"����3$��O&U����Uc\yx�&PK��I���
I��I11���dR:(�����=����PC@�&��;r�:��>XY��S�m�����6VI�S�����	��Y�Z*`X�`�P���=����G_���6%�/qWc*��	�iK���4����~�G�&�����Fw��{��)8m�%�w�9�'��-/yD`����s�{&I>u��>�:��NH����M���1M�TT
���\�a�dF<(!k���Wq&���d��0Y���x�&��pS���wfI����!�L����;G�		����i`�n�!Oa�0���V57���eY�I����3�X�WTp�80M���L�s,�q����^Q�8���x>F�H�a���+8tn	E�P��<�'������-^?^*zi"4�/O$+�������gt���+���'�;fF
�$��F$�QP��	!KwV�Wn�������;/��[����k��t��&�[��X= �b�@b0��$��ug����
T�P&�A|� ��LD��;=~�>�a��A�D�f�,>�4#��J��^���;������1t1��G�:J���Es��u�B6}�e��5�z��JD��F���^m\�K	3*@�^K�����~;1���di��H��%LD�g��4��E�3gH���b���9�I�U��Ne����r�r�`����7u���*KL�� Ui""���XN��J��M�4!�<B�����~���k7JU���d`��w�3*�j��M*iUjF�kj��@AM�D����J�i���E���{���W��]k�"]��4��*5:!-�%{Fj�OE�K�pq��(�i���g�K����|q&~<�����=���x3��]���������|+��{���/��}z���C�n���������=���Wr�"��LN���WdQ����s����p���E��$��a���4�yY���G�8h���m��������o��:`�9�>`��Ol��h���m��i�+�����"�a�?��f�'$����Z�~���t������7o|���t�����\��p��VV��Y��+
��iy�<�v[�v3;Q���"[�\�5dY�ag��
dv$��������SZ�UK�F'm,bu1e���T=)���-�I��d�%�\LVS'p�)��o�z(!=$�{!E��4k��v�EZ=oT�v������&�)h�'C���� g$��`l�O��Q��^KwZa��[	J�*Mv���&��������z7��{@���-\4��2T�f������+fX*	���� A�$���ox�/'�8�d$������j�i��IR�]?�*�����uW���wOpJ������.�u~��V�f$uf�e���S����}UN#�}�~?�n�<�z�m��n�X�&t�s/����T ��[R�;��������w����$�P��Q�E��
��U��>��q��LT�!��h����j%�q�|O��G�B�+jkU
�&U����������Dd[N��&���l��%�j�lA�E	h�{}�n�X}w7��=(%]C_�t�TH[E$�cm:�ZZ�n9�$�2�@��r��av'�T�i��m�:����bO^����I_P'��������[�Ld����V��k��~�w�JT>m&�1�|'� ���6���f7������a��a���6�q,5�3���tS�NO��,������F%�W�������8K�}�:���f��
uL.�:>�"�	��&1"���pW���R"��������6��:��}+�[l>�����3�sq���6�}�_Vb|�3����"V�d���*�JUm��Z���7�YP*W�W�Q��)�����WR�a������P]��,Ddv|����_�q�LTw:*A���m}��R^�������O*���(�(���D��{�^�=��!��}v3���}�{`��K�z�����?Qd�@�I�Ka�_��"����1�L����
�~����$�g��s8�e���;���F�%�0�9X��\1� w���5c����Z�Y���=��I�}q�LD���T�ET���i�?~����Q���ZP�)��yS�I'�T/L<���7��nW��wl�1����C�$���w�=��[;z%*r�7�/��	�;4f"��u��{�������8��>���������RE�5��-H��� ���������S]�w���S�f�5�@%L��{���K3UO$��g�F=8�3��g"����O9��kAJl�T?h��*S|5B�D�jP3��x�T|.m��5O`A�-�����k��/a��,JE�'�vNBg��Y��j�o�W}_7��z0s�f5����.��-d�l��|�#�6/yp�z��~"2�JJa;L���l��'�J��p8�j�IAh�
se}5�1������I�=���cRW�_��3�5[��E��K���MXs���2���o?�S�v���8��H@�������4�� 6+��D��t�!��)� �X��c��xA
l�R&�dG����T���|l�8��'�%�AC�}�GTWQ��	p]����e��'5��:��f�VQ�z���G����"�mb�Td�E����Z�2��N���W��^6Wx�xn����D# �}xW�>��[��.��-��\cB*�P���QLk�@�f��zk���+l��lJ�np�.�(*���G~�hM>#y��ZL��������Z���h�uM�Z���<xc�����bA��V^U���O��c[���
����~��U�|�1���]�i;�]K�����Ae�n$Q:����}SI��}/$����d���m=��4Ky�v���9Y���4;f��Xe�V�� -�nJ��O!��MDJ��r��}q:,t�2������.��2��rG�"��$�3	1�����?����`�qXt��#�3	���������~�1/���D�Q�(_��a_kX�jE����(=��\�	��
�(��a)KF�����f(�y��Y�e�g�Tqk�������$�����/|P�Y��B�u-��h��i&���Z�]��Ly��i&Z��!�
�����e�����?�k����=]���� $Z"�^Q/b�����tA�Y���������T���!'"#IW��/�y��8�M��Bxp�Z��1!��,H��<H�:�#�g�$���.�L�=�-�K�~*/2�[��
{i�f��A��	{A��H
�`��
�@ki*���V�g����S�@�>'?fY��t��0,$5������;^H~B�e�s74����@7��I���e�����Q����m�~�Ci$�"��V��yT�M�w���N���o�|M�e,�I�2���p��j'��U2/�Z������ ���RE`M>Xe�	���Q&Y�����QuJ��B�n����=i&E���b@���bU���L�*_b�]M��
���H4G����Hd$�
�Pp#����.n��a�\t���?3����U������y���wGt@����N,����CO�B�n��]�(��#����C�N:��oO$�;wt\�76���c/���}2���1�dEA�l/�R�e&��m^bhs�J�t.3����5��6�]����F���?��^�J	`����2��X�GON���	�pd����
tr������C1�gE�.R+����M&ZmV��W����?F6G
�+�0c�:���L��k�����	�H8��Md,9�l�0�5*�!]�!�8e��|��E7e�S�u���g���I;��}�i�5��,�KD������}q�tA�����c���U �����s
���y]fc[(3�b�f=����� p$����&�Z|���KC����3h��st.�	Qk�����-vJ���>�.��YXR��e��\6[�S��M���c?+�zW�6{s\x�p��n�6�vA����;��6�Dlw@j��2{�>��x{I�fXP���7{�K���!R�)_�{SE�{����{^=*������YE�]�D�-L����qH�l�3�l@��'y�}O�~{���9�gaxM-�MW���2���s\�Iq8�Ko�E4���uH������YX�M�����(����,?����|V���&ELs���k�K�p��	�����,Y�p����A��n��+��x+@�s�Xi����.�%r2Q��
x�Y���uQ���w*��1�D}���&�7|�HQz�^�8���E��v��hs�[X��WC��W�<hAZ>t�H8z��/e��|�OOu��Y`i4e���R�Gq�g��Ns�'�����{T9��c~�M/0 �9����+�=�
� �y�����p�e`�0��L�����~!w)�+�ks:��R�'��uZs`/a8��T�f��zy$"]����q��&G8I{�1%M]41w���k|=)������1]�E7�_D�#?q��8?�zL��MC�}=���������zx��1�}��4��c?�v�M2������@�w�
���_b������BQ<
�Y������0<��;������vW2	%8�T����5�5��{�����R{���lx��/�@��C�,D�CmJ��g��dd�����^�Ld�}��9s��6%G���9���'��H�Tu�$�	���X�"������9��\PL3������r�~��G�����D[��3��:xh�T6U�a���4�*H������=bC�a�@�Qo��
�#=�d�.��ft�~��#?L����k���j��u%/��+��\�kR�	����m�8D�Dm=����������d��q��)����^�	��4/;O�Nfk�R������c#���[n&�����ugH���|����;#�;C�jr.�k�@��p${��z�3%��	�M��Q�>t��~��2|V?wA�$��S7�%9[�dk�t��vk_�JDe�����0�������d����eT������.���fvuAp�([��#�H+r�J���"c�`[X}$g�~�gE�����8E�<%q�v���M����D@����T����/V1sH��l 36�W,��iug"���D�b�cm��f"24��g���5c�"X��e�)�Y����@\�T��'�|M��)��H�g�(�4Z|���t�I;���=���D���U�P5��0T.��j���Kg"2����UK[�R���x�V���� [ L��������Y�%P�"�����[[Kc���W��z<�*�Z������
@����Sj��$:�A�������]j�"�^P^N�E�vp<�K?�e9��}����P��v�'b���[(8,��$�=?P��J9}W�!�%���S-�66U���e�xu�j��:tH��R;&M��vQOi�Y��MGY����<�|[Y�P�N����	l :W���R��X��8���H����J�y���j =}�����0����LG�x������.AT��8v}	��D�Uv�;r=�8R�&�5Z���I�N~�5!}��%X������i�|�Q������lGA:e����7�$����LR�>b�0��/f�+��,��u}~&�&@aw_[��R%,0��gf��l�*q��j�Ye���N7lAj%�ae�`(h�������
7�sL�57�����r��U��8fR�������-�A��#����,��/1w�Tf��������J��V56�j�?�>�z�4
.|���S�t��
�
u����-wv{�q��G��f��N|���B�|0�p��q�~v0h����EC�;�0����6+��H�x� ���f����L��0<��~��x��@�����Z����;G����)������i���V�����-!�
/Wq�x6>������:D
���=������[X@��n����]���R�s�
��
x���KYc��_���S������g�(�w�����d�
���w�m�4ye,�;��J|�
p`
��\�UF�����@v�Nd�`dM�_���*�U��d�,�����l��[�Rk����43���+x{�|���L�mh���,�T}����_|�T���2��[������bS`C��^�V�u��Y��C3n��
����d��$6� lK���7B���	-8��{g���yAi�@������^���Q��Z3��2�����|��k�����=���g���5=F�����~������*�����gE�J�O�k��?��q"�+�H�#���K�v|�*�f�2���t�����i1u.���i�pB�sW���p:wl����+v7+�.��,�Z��c��������i5����!ft�x;d>�2?��K���o>���iU��L<���]Ev�L�h���������*~E�,+���5'�]�����G���z����������f����������_����������gk�����^���t��Q�I��m������������w9~!�1��h��������������1���(|+�g\��m��6#��{���M+�>+�� ���i
�y�&$@���<�?hYv��T�����U��)���
��jA�m�j�����>+J[��@�^�a��
�_�L�=�>+B�W����Sj����X��|���d;��'%9���^Z��g�i��o#��t�����d�%3Y�-��;Bd�W�4�3����J����������T|T5�HT��H*f���������T��
���7uT�}(6�,�<?y���o&�E�P���7��09���J�B_-�[��Y���WY�FXY���� �B;���	Hw��z!�s)�9xd�����+�j�<�mYI��l�k$,�u]�#eP6�3J������������4avQN����M�|C��h��NH
���:iA*�kdK��\1��������"�S���0;�h4����P�'����d6�3��pFN�?fG'"2^�v�Fx����eE�=�5�F�&"�)�6��tFd����*�[�I�HoI�1�[�)W3S�w6p[��Z��D�`��b�Rl��p|7�z#n�6]��s�6��-(��V���#[��������8��DUmAJ��El��F��*�L��y��#<��BT��
r��}Z_s�:#�+{�Z�������<3��a��������Y��8��V��T=�<L*��-j7[a���:!��|@��n�1�:!I/�@�*��{i�-���MahU����lVg$�������L$d�Ty�����6��u������0���4u��2��_f)`R��f&�5'����<V"�TSZ��%��1sP+�20����Vb���E��laQ;5�����Lc��������|]�
��T���"�5M���	����4�e��&�d��g��9+Ybk�`
������q�]��ub
��W����N� ��dN;�l���x���)���-������&����dJm������V��1��]R����z&"�N������i���-��U��5��f�}�5}n��'���eU�������e�ma���f���v��LD6��r!6��LD6g����d/���Tf!]�m�X"i��D"���t�)���w����wwp��w�/�X�T�)�~h���b[5�D��6��~&���^<;uf
����N���gXO@D�6Q��������Z�|�� -��x������6�Z4[���L����p���8I�������� �DD��#m���N/O���?�]:����6C�,�G1-^
d���&��X���$���1����s��=X��//h����`�%����Aj����3[=$$�z4U�����J��������"H���	Ir��;�I� *��]�(�����2�J�5Np�g��13J��S9���c�
wA�.��\���lT��n9�c��m'��u�4�Ac������%HQ'q��C��E%}�n���h�K�����Hm����\Z�\��U���I�/���H�D�:>�	3� �;����bA7�'��T��
��j.�w��s�1�7��KV����Ci^��B��������c���g���}BZ6h�d6�j6��k�
@��3e����8��6I87�=���-��e%g�������-H�O��!�(����&��p���R}F�\���� �nf%E�A�Mk��t[Xz����g����|��%����Z�<���Ng)�3�ma�p���m���+���B�h�dz"�g��n�)�H�f�3�������V��F��eb�����$�:����\��?��7
���Q�yB��{D�������n��eN�eI�9���|��kz�����?\���"�u��:���N��u���v��.��Y���]1�I�����4�-�~,i�MSb��^������H�����2����p1oc:��VV@J����~)��9�5`�@_T��f6�5p��_���b3�D�%���M��e��J<���n	��iNS�������J�b?���k�
��b��,�"h���������!>����'^�WP�v]
)r+*�Cv�`J1!-�nqO��F�������8�q���9�8��~i�X��0}\���BQ���	��[��,�Qm������X���
N*�,��$�l�=}���������/q�.�[*�Wu0{���fDo����N�
�����i��}du�4!���XY��LP4����~���P��bX2���9:��K{���$���	��4����\�3��<k���/��&$2�mQK��&�zB?5K���~����/�s�����dUV����Qc?rC\�:��9���G��eI��S�F[�H�+��Q����	�Kk#�bi~������'��{Eb���<��zc�����+��r��gr��v�6���p����?m +^�� �`
�[�
$9
�"z��4n�e������d<L����}cV�DD��UB���UC���\qq$�-���5�(]!��)t��\�[��D�3����&�JF����b=/K�E��2��
��k�3���A}x�N_\�]%�F\1�N|���<e��Ug+��'"r��?N:� �$�;]d���
����?�p���}1���n���	dd?���k����	��:Ey��
�-r��ov������P�	���1�@���)��	�\�(�:!t��)�4����B�&t�#U����L��n.�&�j����i[����f�����62��b�U�I���l�U��,�V�5.�t��*H
�3��
�P�4����JAQ*'�Sd�}�e2�b������
��'9
}�D��e.1�J!(�����l�f?���<H����������8I-H�/x��+�o)��%��R<����r%��/���y�$�H��=������R��L���&��L(sb�=�u7��	���{#���������|Lr�	��H&|}/W�;VqAH��}���x��xzl�@9��b)gA�6���H9l������ZhC��I��#��7��U��JD��M�m��^�0�+ �Mu��&>Q����j{��z�p� ���B�������[���fh���6���	�L���~�/2yn�m�`i�	�?{}�	)xiCpK�+�d9�r	Ut���d�M��]k�;P&*�j}�V�^Hh�N�,��y���>#��aT�~�Wa%+H����A������?&����&���������"��I����D�$�I���M�m���._�6���cG�����)yx�hU���x���HA�)��P�TA
�R:WN�y�=�Y��6Fh������A#]�|���l@�f�����4��/kf$����N�L�=��z���
P�f$��u/yt�T;z�X�)���!g���$������zV4�r]��q��B�V��?���	��=�6���1 ?�9��ji��n}�,����+�5����M	
B�u�z��A�@�����|�{!EV7��g���j�e�ui]D��+���c��q�����?�Q���(��H
7f"���
��c2�]�|�7��xn��*@��f3���W�]�Y�������#�D�-=��C~l7�y{�2S��yIl�C _�;mR�����������H;��^�)|El�H���>������d�-X�H������K���'#�� �O���k��V��`N!U!��?�t=����,dY.�I��.V���.�^�v�k#jA������n{���&���v��A���w�jA���z�1w��o��?����>�D,z� M�{&��i��;��f���I������5Sn�HW)���mY�-�p���7�w_D���H^x�7v�
��X�v��L�=yB�X�����MND��3h�k��\<�)�h�	�/�2\ww�?�����~k�
�	�^C�d�@�l��\���i���[��1���zZ���F�C����jW&*��G{le$����=�E�t���:���2Q�Wd�������o�f	-���4�v��C��D?�^?��bR[�Z���*�#N���)�`�aS����v�����<�����[ko�r�]p�����.8����v�TN4�� ��tA�/�}g���O�<}�@��H�\.��������6]pL�{�I���}����/��}�����=]p����/������V5�|�Q��^p�Y�)�F����CLK�����G�{�����w����Q�1��[����k��\�Q�7���}?�&�+�[�h�|E}	���^����x�z�|E}��mz�6����6�w����k�����^5r�u�������j"!g�~�y�\4������-���{�h���U����m�*irn�Ic�2��S��G��Q�t�u�HW�>l�
6�8W��Q�tE_����W��Q��t�u�HW��Q�|�\�1z�
=�p��8�+�Z�1~�#�������\�C��!����{��Dx��\q�Z�Q���c�������t�l��rl���k��rk��?z5��?95��?�4��?�4��?y4��?84��?�3��?�3��?y3������|���\���<�������������7�����nL�=[�pc��y,
7��^��pc��y�7&����pc����c.���s������tE{�����/�r�"�-��IWd�%�1���*.�mz�6�������|��mM�
���L��|�.�<���l�;Y re��������D6�,V��]����*�%z���a*H��j)�g"��c��H3�|gr1����Az���[��O����H�^D�f�Gnz�3/KC��?iG��D$����,W���z�.�*%�F
��k�2�~���E%���~���8��_~����pH0�G����9�"?]K�G�~^���ht��ov�1i>\��7!�<�}&!s�
*�Q�	���"j.L)���M�cd+���D&�<4�u�
�5A�n����U���$���������!����,��=���MH5�D��yj^�L�|C�s�E��{�-�j���:�����B���V�K9�+��.���T�N>���`I�uy�*L%I���T��{N���6�C�����"�M�|K��T�M�<�Q�Z,'�]&T�s�'`�p���"�Y�K��nt����,H���}�%�'����D����]����	�g�mw�b��xx$L��f�0���:Z�Z�V�[e=�xy��H���,�
���E���-���>�����f�a�5��Oa�3���7�M�?�Tp�J�L�������H���2z�&���5oj%/���2r�l��%P��O��G� �5E������@����f�����OC�O��$�#��2�s����g!]S
��q
��?�k�RO
?�����~[X����2�NN����G��}�<z�*��{Ev�S&z����vw&j'{��+���r���!�&O���H��f4$P'���(	H���~a�����Z+�LS������<q�,d��v��x��gEQ�[���n[����"��t��B��-D[0�a;�z^����*����7����D%E��k�{YU�s�ZH=Mr?������2IvLd���O���e���s����{H�@�.������.���~��;��EFj8���U�*
z15�}��N�a>�%��J������3�����t������}m���r��vn�]���b�N�k��+
���/�"�me�[5������e|V���m K���AbAy u\�d�����p1��%�\��x�����S�D<���UA��	��<��o�X��}���$^����{��f�}+F�@�V�f6�8ubU>������	4�Cfp�T�a���z�$����uTC�>u+�b���5 :M�d���p�4���v���|��	r"x��5��wh=��oX�cL��o	���1������+�>H�3�=�
b���NK��B��y�em��"T	������)�����?��
�S���Dg���%����M���%r,����}�+�#Z�?�}~�������z<@�b:0�Y�zQ��^~�������(0�3��`d��g<T�(!��� N��;D����$����r_��&S�}2�y�%�3O�aT7�Y���R�C��e��;���G�����|A���x��T���O��\t�\�*�^'u������eV}K�V��/$����
�)i4�G���h�X�f�"]�m��,�>_�W`�����l}�s���P(��h
���EB2�)��{^���[E���Bu�� 9c;[���|�����Zh����T1�M16����|	B\����nd����7�0���P�qB���f���e��G5YL�0�1<�0!8����w�#�ICqT�4���Z��m�
Yl"�e$d�+����:g���P�3Dj�Q��� p��Y�MA(���1?��]>/��^�V%�����1_�q�1�P�����{'�c��d�OK��a�H�cE+��1+	��$gNV�D���Z���'�l�k+hJQ��27��t.�Bv�r��_��L��w>��Xu6�����b���V_\$Q]���0
_W ���������0���o���+���\6}��t"iJ-DlL>v�M���/6 ��#��4H|
d?�}]�2�YZ#_�K����k_���
�~�(�����D��hd���;����~m���%aBcn�dW��d����1�{&[���*wXQ��� lM0���Y��� ��AnI�uN��o��� ��i{��z��9����-����������H&�
?��{v~I��m���|]
b�Z�V�� �G7����g���\�.v,s�&�K��;�pV��=w�*�$� �=f%�]U�~b�%�E�_3��RO[�}���mJ���|D�[���RP,HV�����O����,�,���N,VjQ�S��l
��� �!{Y_��Q?o��R
R�����O���������@3�T��a'����QI-�gE�D����Uz�$�i���	Y;�����6�h3-x�����m�x��d&I~0��$>���K�R������D[0�������beT"2_'o
x_>a��H;�,�.Q�8�EG h&D!��,[�q"IFO�C����?DK�R��:N�6x,��H��`g�U���]�T3��K	�8�F�f��#�G������_�������yX��$>RU���ayU�����aFII�������E���\��r������_����%����_���QqtkS7�3J��}tZ#?H~F}k��������}A0�d<-[���a�M����28<lB*c�M���b��/hr�ew���\�I��#L�gFZ�b�QA��/��T{��<�+�����d�GG����gaY`�g����@��%_�pC�>��r�>���4��*��!�q�2��0!����q�\��p�-l�*~�l����G��$���P����gf�>��7�K��E?Z���p����n��=1t����hC�#�1���/V��
`�E��P��83�cp�Y����O��+����j�g5���c?����]>�����d�U��SeV�����}�+eA��6\��Ag�	�1�moJH��"���sA[!�I���n*]��L�S���>~	��<5�4�/
'����P['�YI��Z	��[��h&��hW{���d��/Hv�><I�;��.h��9a8��]��VV�{��v��X>��LF�+�����s����l���1'���Si����5OT���[��'4vMlZd���m����`h�id���v�����������n�����W��7
t����*�6/��bbI�pH����gE��'�FP��w��m����Htp�d������A�yB����\�b��m��T6{���m�oc����Dd�Q��X�.�-�������k.@��~S��m�+&T|��=�O�H�9<pC��;8|n�&�t���$�4���~��j8����|y�m[���y�oG7�6u����-|��a���,a%b����M=���n�r�	��'������0�����d��>��
h���0��Ti[�_�m�����0t�Y~}�Gh��r�<qc1<�#q�A�~~C�p?�!������=����xFh�t��+��{E��C��#��6]��}}F<.��g���Hd�4'��IU�6�+=x�����������?�y��SA�^�h�~�Dd[�o���eg$���	���|J�$J���?"��%wN]�'�����G<&��*�M�.�6�R"��f�X�P����?�{Y�}�2#p����WfV��W��>_���~���{���te""s�	p��P�V*���x:[����m��l��m���D�p�\,{������+�)����k�IK>c����@�n�/������D~���u����!���U��b�f$�
�z"�5g����!I������x�nF=-���}��%� �<�g��U��~���1�doF�W!��r w�)@D�����o��(J�����{���[�R$�������,0�7�{���y@���-H���6U�uE�$�]��m?+R�j9�'m�la�2�(H�O��#���(����3-�7)�}�����`6qB����qQG��������
�;�����:W����w��D�����>���s���{d���g�9�f�e�� ������U����������\�����W�~0�/�e��=�G�+����rx������X,�����Zy���~VH��{%���������<��3Vy���������x�9��8v����s��b!o3����R���q�/b��g�J�����\��H��	]����c���Hf�Dg�7|����j+�7e������|��)y}�0M��YX�����K��
��y}��O��+R����������������v:����U8��|xvPg�R1�o�������\#n�����[kj{L���U �u%\F�v��
A.s�d���W�\_��>��8�� ���0hX^�
��*���c����>��\@���[X�}e��'�s%Y.���QfSe���J������|�3�����fV'��e�����n�!\�i�O��V��,
������G��9R�0X���<�g�l��E�8q����_��z
�+�����W���R�v�*�cK�j��B�a����&��+=��>����M�B�-�'!��������m����)%���j6���R@(�����5!�����uW��*�;p�#b�g�PJ�u�6:�7���ih	�/b���������W��I�N3�����f����E6�'����y\K��H}��qx�IG[��S^�W���~�a�FU��1�7$�$���a��������QG�{g=!h���
C+�@4t�����~��!�<4#`?���
��0��V:m8O�~?m8_��i���?�6�����f�^���{E�<�C�4i��[<"�h[�s�����Z�W(���S�9�������cE��w]��+LI��O:��=��
����I��l�k���2(e"�2�!6J���$2^+r�����xp��.�j��Y!���6[��\Q��UE�z��g���"+Sb^��%���'a�����2M�������������O��	m�{�:���j-(���^���oe����"���*�����V.���y��
|pd{W���e�J u��
`��s�lo+�|�|��K�o��*lS�X�x�to�y��������"���t�/#���aI�#�Gam�o1���v�a�����J�<
�f[��l��F��z�]�S]8+��7oL�t9����8���V �&&�6����D���ig�xs�#���0Vc����`V�"o���$E:�T(�G�C����U�MH�x8�u?�����9�O�o�U,1�\%J�|��Kj���t[8[Y&02J��;�Y �)gO1{��T+U�b-�]����~�a��MQl�yq[E
��d.���m+��m��e�lia[A��J������R��t�����[Ef��_}^!i�:!i3�~�q�Ym�����UBk�#��NC�3����9L�l�x��$��[�G-�|��[,/�!����R��oQ=}	w��~aJ|*��
�������)���<({�����2����%���z��
�'j��������Fv�Y?����)i}�6#���ni�M�h=��
�6�7S�<w]���)9���6� �R[�[Y�l]��5����Y�;����������Mf��N�|�G������
A���5�[.~�w������������;�3��������VaB
0�\���6����*A�#�����8\W���`ri�$�����$y�#�n�~
F*��]�#Y|�c�|��|QC������Y>���\'����>����'�+S���>����:���E��)>�bS�����U��X���C$�erX�_�7��M_��B����=K�#�f����$g�Y��)�'�U��
~���&C����3#������g����B�E����:���%.Oh�`��w�eJEc��%��_���z����6i���R��2�c�9�2"JO+��C�}h���d��CF���vZ��Be��P������F�Y_���o�@���k�������ZX��7����K��������:���u;�K���K�����ge�Yq�gA�K��}��iO���wKlp��a0%�u�k1�n^O4�J6G
���:N�����h�u���	����P���c��b�+9Z%=�=��6,��e�]�qGkfYk�����o�=Tr���5�
��������s{�- ����Q���S�%VG?��s����2%&�8�n��7f����0��-*��l����q����~�G�\ S��I>$������Bp���n4wx�+���g�`���wS~y�n�����:�u5)����XL:v�&��J��9�7���:_�T��;-��)��������Sc� ~1z��+9�c�N���A4S�7Te6��s��~]�C�����Y������,P8(���^�^$-��o.(T�����.>J��Z�������t�����8x���@U�<���p����}��K�U�;���eN�o������A��5o:T'O�(\����*A�1����������]����������*B�}r����	�����N�n	�v�r�nG(�}��RI{�X'�	%������Y����I��k�r������hJ��`�,z�,���
�@{�4����5�*&
xi��(����}���c�tFm:C���p���qo1F>�06i'>�2xDct'�r6xM���"_E�����$�5l�������4�M]\	2�����n[i��b�j>�"���A�	N�-p�8"X�b���/b����
	a�3�:��Y��%y�O�9�1���bUm ��$V�>��o��e��r�����:�!�0�!�NO'J�����2�1��R�+��#����O���������i�V�328��*I���y��V��$�����xg���0��C�ZTP���%=��GM��NaaYA.[���(f=�5<i�C��&>�)C`��B��&�8�=���,S�6����T���X�yO ��`�q]+,�=ZR�'0���yBG�,�=R5�
mB��+�����������b�q�Cu�lV��I"��Q�I���'�!I����epD2���3
-�V�,����prw�Yk�qP��l��`�&�P�i�Z�A��_
/U+
}n�7Y�����D�����O����{��0�fAA�@��$�r�'#�XcT �^�/����M����/!�.�f�\�����0B"T�\;��+j�����D�@�u]�X�=K��	#��:��5��F�o��Y*�%��3�I�������F�	���Y3/����v	V��a�����y����
�h/��">���QX&�a/~�N�z�r@���
Z�����\g��y\�?�c2�;n�2��1�����Q5?im;�n����P	����L��Lp,N����f�F��G�����,��t��eZ�v���4��Sx�Ff����n8��V��P&�����L[a����-�����'�����I�wQG�CP��Et�0%L������>A�vpl6�9��e����}���Dn�����*���3$?�d�����|�i��a��pWf�5{(��Vh��@��O3���yr�A��E�Z4�=J���������P��`�03%hO���}�����^_��&�wc�$b��f!���21�|���b�'R��}2:���
F�n��iN�f��._:�n�._6��]���h��i��e.ha��ev�,��2q�|[5%�<1�����Nn��	�pDtr h���
 |���T�vO"Y'�6�v�P���Cm��	%`��v��	�0����
�����a+��>�#0�z����LI��������yB
����-|2�����b��0���]��u�\�~�fKR�
��P����bt+���f�P����e�M�!����O��X���e���4w��T���g���l���{o���A�.,sAY�i�'��U^�G��/r��y�0��11��y� �FO,f��h>�W���S*��O�����;%�V�MD��S�#^�_Ng���J�� A��|W"�P��\P��H��J��\p�����T0���3�h���y`��C�<	���V��%�X2�y�$����T�<4�s��\��>�sb����5+4��*
=18����=f�����1*p�&**]X6�D�������7����e��w&s
m������G�U��n�*J]�����9	����	�w&�Q���t�5�n��C����Xj��I��%��~�Z��)uz���8�8)��D��DY�+���m�5'9+�������B�?����f�O�M.�gc�>kU���,��,��`�
k}�t��>!�\�0gY|w�;#w�������6��|V��s"p�U���?eZw:�_�Z9��"�����(9������(��[��Bl������"�k��X��h�~��e�*��v�q������,<h-��d�,��<������ ���Yq[��Km:��.�+8bV������	���}�:�D�;�s{�mNJM���/���@�~�A����m.~b�8�A�%�y�^�s������A��:��}f�����+���9�Cq���)Ns����W.���c��+Ks&�%�����^��������a`��Ml(���,�3�u8��33��$V����G�1�d����"uTV�������7��o�+�+��$n3m��?�R�����������fb�J��,#s}Gl3��>�{e�S!S�U]'�����3(���sa�p��W�MJ��P�����.{���5����m�^�z�0k��Y/�
��5���n�%P<G��J~�����u���������w~5cP��If�-;�O�z�����M��&�}�%/9����#�C�`v�~�x��z����V���|�����O������w��L;;|
I�������f��m���%W�JJ`��	y��R����;5f�I��{������X�����(R����m���5}�>���u�����M�j��7
s�w�<|�?�P������o
K~����)���4�<��u���3S�����s��h�a�b���M���6lhk�f�<a���?���w�&P��~ ���o{2<���z������ag�y��@b����o��Nc@����2
%K�
~Q�SN���,�+f���g�\����Yh�w�����4m�O	,�{��l�lZhS��M�8E��E�-��O.��Vg��>�0#��\�o���YLB��C/~3R<�tQ�!������e���L?uXgc��|��e]A��U{����F�����[����R�,�?uw�O3�=�[mK3Ow}�_�����g�h3Mu��(�=�\�M�t�������y����6M>�.�����p����2���g�6����� Pe1�8����^��=�4	�����Q��W�B<,�~��Q���c���8��:������EFP���X!��b'�4�MT���-��xm:1\NBq������W���h�(W@.W�M�
���e���\��3%�*k������������/b�����5��x�;_�������+����w���}.���b��@���nb��x����z�r�A�����)�s���2��&����w���q����T��X���������k�R
z@�E��_���������}]c8�)iS���������_7�P/������aQ���;47�6����������������3G���m�W�9?[��y���~�8/���5��	������X�Z������	')��i�@�c��3������9/��$-�]~���������^N�
�!R~�CJ�^Nl��8;�{E�|�y���~5L������3��P�:-p�M�U�YK���2gXJ Zr(h��hC����_�D���(i�N�o�O��PJ��TLw���S�":��yH���B.��>U�:�^�?��I���L�'$��An�)
}V&@�]r=7���>i�&��K$_��F3�F��H��i&�M_�;�
%�Dd=� D�Y�y�..�<��I������%	��~�d��j��f�1!8������&-:��6����AT3����K���\d�`����e5���~j�~VKr�MH���
��|�Q�5=�<�~���qy5}��}����`�H��\���7��X_]���� :#�Q����C'6	4iE�Ka����n�d\���XY73w�=~��;���>��`����9B�!��M�YOJ��|?�;	���P/E#(EK����Y�&��-��	��_P��F��������kI^�1&;���a|4T��x�t�
���`�*mv7��~<�0�$=����}�[%�U_jFv�26����?3J2�$"�����?+�!�Q
!b�g�������_*���~b�gaZ-8p�c��d��u��-y��,�O����Y2]�_���;^�'pHS\BM]��������g��#�Q&��I�����L��b�^��i���rCH��$Ne���R%�?������@�����K]#~��t���
$tb�@��8�q�i���x�����P�s�+��Dd��n�� �4 Lh�7r���b��P��8o������"��`�?��"�L�h�-/�}����t���h�J���x_��@�+��m���29�MI6Q��*L��������������+I���
NdS�����	^���&�Dd��G�6���1����Usk�h��\tN7�6)���D*Q��~sp��LRkb������+B�~y�a�2��kFF�sI	�y >C�����\.����1�?���J���,��y�a������6�����}��������1h�@��7_��x�q�����m��^����b���L�Qd��&��,���\e\�\�@m,mB*���8F,&f3�S��LJ�\4�G=�=���RC@�W���=
����MY,����|dB���)n�p�����x�\���`,]?
2��e�����J;�,hS��w�B�w8��0C�[���8�(.���D\�x�s�����ga
N�sI��9b��_&����W���
u.��$��$���N.�����}��C������RpL"���3$3�A	��2���h���b�Gl�](����\9x�xg��	���sI�s��m����;�f����5+�����Z���v���f�e�&���dA~��B��Q��X!�Lw��8pf��sF�y�J1p>�M�|������=Wp���>:��Ky�T����i�[�~�T��D�(?��3���fW���@^��������5;�5�S�p:���s������0@��G�~Z�����������T���8�p8|�k������~����|��tAM���~z��f�kE`�UwGt�<wp�`L����lQ�b��������Y����a�3��$��
%���'���BT������p�����!p���;�Hh-��A������w�=1g�������������n�a"���4}�a�m=�h!"�wk�/���������-8#&��;1���dj����KX����8��F���.j�9�C�����	-3s��d3^�;�Q;���l��L1JK�61]*i;���xHUZ���&L�h�[��s���_���!��p�w�4e���=%�L6]r�!�����,�$���M�J�Hc�Q-�
4i!�GfqX��j��G���Y�>+�����f*���M3no��	�QH�����TD]Z��<����G)L�$�����6h(�_���1�C##3bz�#90k��1��D�Q��7bv<k�/��my���"w�N�e����m1��_�'��	�S����������MAHo����X�}Y�^����dw3��^���L���� ��.@����$G�}�md�}����}���zb�uE�0��z�g�ib2[��,����`/H�;���Z���.��z%"���r�9��qA(�-��\����noV�6��AafW���J�k3��`W"�;�^d2�u
Y~�7�l������n^��q�e�6t�����E1�NZX��b�T����������g��w.����)�����)�]V�~�H�uh����;�"��'2]���������t[����l��s�+��`l����(H����L�V��������M2�U�3�:�57�9b@k��-\���2#2�	$���l]�u�+	��hO$�e�������M>�	�R�=�����
V��$5�t�FgU�����V��z�����H}������}$iFmE�g6[�e3
���-Dd�����c�j����[b��v�%mA������=���
d��3+��P���;]f�w2�P��Q����%f��W|�Q��^��t"d3���m���+����P����*yTN���V�h�B��/�@��bHD��4]�`���;�������
zX-J@+��
wO����q�<�^�R5��x�tK�P�D|�M�i��{�g�h�U�i1g�,���N"Z����tM[�y�����
��vn���������������N���Z������U���<�'�6���~!6�s�m��s���d>��!�S0�l��R�?�](H��g�����������'���d_Ewz�\ 8K/���Y��u2:b��$����m����U$��xo�oR�\�}��T��|�.flJ�5���X�:����%���f��������������;yV��r0S�S���,����&�E��y���J����R!<��2rE�#����s�/��P�8�y�YmN���kN�~����L���y[]=�X�������_TX����?��������������������r����Q��#��	��	����k�V���Z4"�4��b�Kq
����&'IW$��iQ��3��=���}�D�\H�����]�g��;��+z�-��{Xx6_re����W$�K,������<O�A`����$v�v��Y��R�^���������G��J&�����H}}�G�4v,�[�x&���/�1���y�X�c����������,�y�I8Q�Q���o��x"���Bc!"?>/�������+J=>��M�BR�9S��w�p���X=
��x���2���y*�Mgp��x�e���	�����r�ul	������.D���Dd�C>��rpM������m:��y1U��5Bp���C
��)��S���s����t�,����s��/a�����y���� &�*��hxn4�o7��|0��;r����.B�-do����|�#�/�p�z��~^Ddd��t���Z3v�V�J��0�Z�/�7HV�+��kUnuV}���m�EXA'�[7��s4�[�M��20���x�}S]uE[Lv���q��RM��lV�������MH�b8����XI+9����������p��"C�����lZP�,��5��?�����^�b9�!���q&�R���bJ\���#��h��Yg�"��d�[��*�e���pX���Rj�9�Y�5 ����5)��O�3����7��m���c�Y�i��rNp0�	�_��2XO��E�]���e���H1O����d|�-2F�5A�z�<�����w{���?��+���9��r[��y�+�%�L�kf��{-���'����R����9��e>���*�/�s�)�+����T�������6����:l�]�Z��������$7�Ah��
�`�"7�.4#�C��0�w���a
S���a�u�������X4�mo�f��u��<TV����������R����\d��	��t�o��4�}pR��P�+J�N���,C����
)cr&|XQ����o�h��XW+�D����6$u<v�]�f0N~)�^���-�a�*��;
o�d�|�m��	5i��nR����.J�>�>����1��3�|�(J#�N[�/�*�88�fH'T�����-��_yyg�\�z]V�X*��xy��\�����p��#���/3�~�����A;G�p���/A�F��F	���%&�q����B��|����&��3}J�p{f�5��usft!M������&���!:I�?�#����Zg�_�I�G*c�X��YIK@�C���e����^Hs��2�)��A�A$�,s�/:�k��A�/�c�^
����@q^�m^�%]����$���u^����B
�^Pb����B��;%�D��y;{��CW|V����w����(��0hD����0�*#���2)�~��hz;o�a���]I��*���e��oI����d��V��q�>��A����
���0��+�t�R	]mO�)%�/�t��C`M���2��2�bj��bjoF!��mbjTT�F$D����"���7�A�����~j��E��WC�� ��r�����s�s�a����~�$Gubc![u����n��CW>���Hl'����m��$��Lzw!��9��B>�P(���h6�`�^�c����h�n�%n�6'�7����*qdCf�dQ�O4����;��W���2�����H$j�"��K���G��I4�����B�iXP[V����@�~�<���������F�.R+����&�6�x�+�YV0�vO�4�
;�r=f���:��7�"�I��oO D�E�X���}3�^�!�d���K��|.�uH�{%h-�)3�b^�98\�B�Xf�78A4����5����"�|�8s3rZO��
�5$fP����`H?����9I���#�Vc[(3�b��=�����	�#) u)�
���,\\B����tkhy��k�1��a��^(���������t7&�����,�/8��"(������W��~�H�]��H�c��'����W���f���\��~�}���?��h��.��zZ��'�Q��s!�bXP���Gn.�<�R!��D�)c�B��t3������`@��YE�6}�^L�����I��S	d�4�j������A�����nC���b��k�EW���2Tj���a�q��pQ
z\|g�ZY�u����C�����BY��)]O�y#mn�V���X5�S���yB%8��`�B�����?��w�$>���K:o��&R�����V���`��*��b�se�iN�S�8�n{~��V���-?���t���3 ����G��@{�p�y�ah����CE�(�G���L��>��)��A�r>������:`���e����s��r�gC��-�@�s�Y���CP����p�~�@��P]��g�������5����R���c#zp���	?�������������>�.��^�3�T�c8����dJ�.�hlb���Q����`b"�:hf%uU'�����YA�;NtM������]l�����?��G��""�9L>=��h�d������|���"��:�$_�pT��ob�.���*X�H��Y������T�{�C�f6m��dJ0&:K'7�GT�r�������W����
_s��!���?/���6%dVI��(���S��9�::�w;��3�>��h�^Z��0������%���U�	�Y���`�/��3�B	0B�w����&}�64��ak)�Z����:��-�]����^�OU�5�
��<=��e0}��z���`��)$m�$^��{��G&�~�x���m���?5�t����+��\�cQ��c5wo�8���,&V���1���K2j������_@�a��1�pjwJ���$K�N�a ���|�����u����\�B��O�v;���9������=�C�0V��a��1���x��G}X��_������A��������0tT<���'[�,�x�fm��sQ����V�u�a�M3|�� f$��n�u����c�5�K����]]�7�6X���I3r�Lx0�dL��`�����2������Sdca��$��n5R��|�$T)���T�/�8���@�
q�����+Y�������V<�b%"C�������`�"U�9�QV��2Q�2�I��H(�B$�E������E�m6{��vb]��7�?��F:����&����,D���U��j���9�/�Ku�z�����L���kX����� ",^��G��}u��
"t����Um���r�(�D����A��?ZZ����%�OSV����]Q:Jk;��RO��@77��h/�
'���V/����	� �;�/o�S?��e:a?�����P�<w�o�����(�/���$�3?p����E��`��%p�`����M�����-��0�:�@:�=�x7�c�DU��z�H����hz!q�u������d��fIC�s$�m�������5�%��+R����{�%1������Y�R+�Eh��@zT��\�b�����&��A��I�[�4���%�*�4��[_��h��������4n����:Z�H�I�w�-H��>�V,j��a��u���(|K��`3�Q�v�g�'��	�}n��T���,L����E�2�5K�l��W��(��s�l��A�DL���Y&�	�d���%F-�wt���� ��ci;`(h�,��i�p\�,����rl[v��*G`j�O���M>,D{@�1�������%�����$������j�ny�ZZ��\����}x{G7
.|�~qCN��P��&�qS��_wN{�>t?�/��������h�@�_$�;��?�^��t���~P��:����{��Y�a���M���5���x
��z�/Z����h`����H	�=���mi��v_���Q75M �z"+�9�Mi	a��\T�5���L�NI�*�Y�0X�`�6,����f��j�_��@jt�S���������3���]�j���v����fi+�M����d�
���g�ZN;�X�w"���x��0��\�c?���+i#AW�V�*x�&�V�(e����LG'r�mz����\�a��4�Lk���Z�mU����
�t�
�dy����QX���������(�
��������X��V��7�,��4���o���5Z�`�_/�,^�����b��v�Fh|;�GBN�p���w_����Ttz��@��^���Q��z7��2�����������.y�\=��v�����z<E�<��!n�5s�����G�g�7�WuZ]���Yd'b�|	r,�|����_���S&U��(m?��Z�i2�/�qU����n\���,���K�$?����JA�Jh\��r���5��?�#����
*��1���m������Jt\
��fr�P����g��_��Ud�����Iy}�xQ��5��OU�"d�T�w�f����9`�����q�+`��l��;������������h��������������y�`|iH}���Wt�4�+ �+�Y��r�&�D�+ �+�^��-���~����?����F	`�X�4���9~ae������s�����70��&��*���y#2��@���� -N��H�j�o=�iG\�S�U/�4t�1�'��R�u/���y��]�8�M�q����'Z��?+i
:�c�`������,Dd~ �@�B��P<�EQ���`��F<�]���q�?+�����$?hb^�	�IE�t��]���Os�o�����iG���K��e���3o�o���$zD���rH�a7e�A�f�>)7��O���f"�8�De�Y���4��[~l���&��������e�B�x��%,��Us%��>�GO��W�O��T7~D���Rq��������1�3,�je���^j� ���A\��+�����/�VtaR������Z�h%"���H�)6tA����6��X�nBQJB������H��k��X�%@z���4��^�D�v��f
1�\���lL��i��
h%��J�����g2s	��,kM��*x�u�-$D���\�Y��ZS����la=$����la������`�zh@�l@��������Q�l@W$��:Mh����,���H��+pL�����f����=\;���g�g^L
.��<��.������b�4��JD�,�P��~�X���<-�����0��������M�M]�]��c|2��%@�z�nX�������a��uE��i�07����9N�fSO+�0��L�1��s�Y]P2����fuA	�Y�p��~)P2�e&Rs*��5��'[��;��y�~��F�c
��jh���.x��)��
��2-����.�(���T;7��\�N&��:�9/�"~�������b
T2�X�PL���Ac.�F�9N:��V"��	�+�jx�0����@C��z��?�c�7�N#����?l�,F��":��^(���F�O������|���6y7���mj[Q�R��E���2X��4��"��$��������q
��Ih�����)��E4�}��M�e%���y��O�|�2O�j)7�Ed~3�d`��JDv�?�v�AxSA�AO�`7}��-H�n�^,6++"0_�	����o*����(�X��H�k�2�T/�	�M��j�i;c�,Du�:d�(�~�����3��1z�[�j�A�n�	��B���� _%r��Xc+F^H�k_-�����L����B����M-��s��1C*x�o7���'�V��b���p�A�<�!"k�y8���im����8��}�V�.�?~^,[��W-�7v�Di��7K�b+�iV��T���fm.������_Hui�i����8���b
��M	Mof+�b�����Q�V$`>�6s��@��"����5-$���YQK���<l����PJ�={|P�0U|l��0U�w���`o�����@���r�����RRx-������@���V'z�:���C�_����������W���W	'~�
vA/rs�~��/XT��h�V���9B�������[��F`7���e���h��S�����$y�������e�oeQj��C�;#W��r��l��������&�F��c������C��7{p�����8��9��jY��Q]�F�7�D*S�y�Fb���;@+Q}��]G7�*�m5oRdm�4�a��V������0��������Z�f�O��S�;rT������{T����C���qhJ�oX�z!b1�Gr{�U~����2��=2�@d�f�C�	gnnn��!��|����M��
�"���WB��I(^���I �g�,�`����$��j���t��<�`��]�am����96'H�'\��;"�r&"w{4LN�S��k�������{�*���.7C����	�&#d����Y���4�W��j%-gp\�y[�����+����o��]��w6��"
���
��6k�i k�X�$2��B(c�j|�F����lS�;��X��y1S���f�@���q�I�~��,D#i�{��i�������f��P!-7~�$_�a7	�!x��wq>2������!Ft�d�����6����h �4�z�X�w��Q��B�1���-�V���	���O���./H��3�7:�.hY{�N~�U�^��w�y�:�����q/������=,#ObZ��u3�egA-���4���H�G(�
�A���t��p�2�R�8���X`���Zo�
/D��5$�F{uE8�h��w �Bn<5wn�F,���0q8p�)R��v}�5Jn�����9w��?���	Q+9���4��<�m^��>V�m�c�Z���;k���G*0jr����n�;W��)���Xy�0��O���Z����V���y�������X����>�����!�����dVw�$H�������C�n�}Y�LW�����G�����
Dd?��?��\`�"�,o�==}�gE��k~������[P���a6�[�3r%xwX-������Qg��w�������l}������.L�yf������]D
�����	P6����{n�r\�S�KV+��4��^e��V*�c����'��0�������je6�4��"�!�ws����;V������O����1�>���cq6�'���m�9*� n��SU�j��erk8�����hE���q}[%	}Z�����Qh^]���J�������}�j3����:,��299�PK��Q�.S	mZ��$T��=�&��|-�n��v���g��S�6����QF\�2hE�F�Yr�I�Vl�}����L���R%��X��Jq��z�o>�K�-��J�<�*}D]���<��c�v[�����Ql}�����>F�k��L��b����4�G�XQc�<���&�
���������O�Cxsd���F���$�^e-��]�N+�Y��:��7�y�/���mt�����GF����wf��J���O�c+Y������^�_���%���7+�`��`��i`b_G�Qwnk�7������g����n����T
nfsf�dP���`�H�%��[���8c�g!��i��I�2l)H+��<����x��R)q�G"�p���*]@�8`�'��-D�&g�c;����c�(,v���N��F��"���6���&�6�hG��+uY>�x�����QR�r�iV7C�Z�m�6��`�sn�:G����5}��������������t��EWlc���Q@�\���@e���}a��&%������������z��������my�0��|�%��$#��V��WTR'�r�w��[���-u������{�9%9���]�|)0��O])��(j��L[l���q����H�}�*0�S�5`0�x�J5����,k�B���j}b�	���� �K�P�3�a�7�!�Wjo_�g���F
�3�s��E��d<i@��4��nK���4P��H}�8�">*
������H�L��������d����>h����"�Z�G������kly���Y���z��X]����c�YD��nK���f����]�H;vx�y
GtaH����[8�7R��	�{v��x�U����K��x���g(�
�EnLb�t�G�i��VJ��e`�E=�0�[�>�O+���9�*�0%�W	�Oi`���<k��#��2����2�������0^�7D X�0�@�w��)83d�~�BL����"��A������;�X�����b ���]@�q����6��F\���nX��L�����"l(��#���,��>�5N�s�r<���=�	�#����Y�h?�����H�+�D�3D���,���$W��mX>�#�_�*��/��uD\���I3������w&qaJ|��G9�u�n�-#�G�m3���}
����-dN�x���(�/����,de�$�����_;��D~��f>
�]E����E5��;�������4��Z��� ����k���6����e��)U��mC��Y��b���k�D��y!A�1$WmD�<vzeZG|����������V���3z�X�230���&��(�;������`���7���������q���������D]�q��u�����=�����6�<�����I��=����,gZ�6."�ZVP�'�bx�n�v/Y���S�o���Pr�+�[O;�!*��@�)��Z7O�z������J��^wD�Y��<:����IL�������Nb0.
|��}a�.�W���}aJ��G��n���_������1���5 ����V
�Y%��H�S���X��}���~�O��[k'>9~�K�z�����3�W��<��U��!�N�+_�{:_�.�qno�/��n���w����������������kzd���Yg���c�
����8z�\�Y�����e
�E��AaJ�Qzs�����X��d�e�%X��):c
8M��s:���L�Y{�}K
�1���`�������k�t(�����8�cZ�6��j����A��Q#�}A0S|��������Ae���jTA
��Y�e���BT���>4��nw�U��D�>l��	�S�"�v�������-L��������7S�������\>�]g���N�����[
5gJ|��6��u[^�2kk��<���
�F������]2���lm�]�
vb�/���&�Hn'^J	��*�\c��)��)^�h-������-����:������1v������.��*'r�����H7W�/��B�b��V��7r�W��c���Ke
(���W���(������1p���[<��� ���7�$��2q�Q��|~aP�c�W��p�sZm~�^�������f���c�E;��N3�S���!�����C#I��zE��?��u�g��{�y_~����G��x��3����?��gY��~V1�,P��*���Y~>f�Y��U�?o��������������y<%��Ssm���\~��K�g��g�5�����|,?�����{�T������y��F�<����+��U�8����W���?SL��|�w��w-��b�]������5�}M�^������S~��~%�(��k��5��V��b�������Q�?������������^S�f���
:Ku9�Z]��h4�T��Z���&�b� &������~���w���W#�Lh���j�J�W�����������y#Q��\x���f�
1������w7�W�����W���Y���n����n����n����n����[�}[~������V�/,~���{��b������F�
1�~���_�|�~�����a������ZM��E���q,�W]�c���a��U�X�����s��8������[u.�E��oq,�V]�c���Y��U��X�����c��8
�^���Wu*�E��Oq,�U]�c���Q�^e"
{rn����_��
��~-Dr(���A$���-pr(��l��C�����5�{M����x����G�:����}M� �C��g"9nQj����Q�?������~�	y�)D'_0tP�%�m?���!"'C�lQ������*h*�}B�<�~�;9w�I�� SJ���T~��BCJ���/��j�*g|'0t|�M�
�^T>���N�C�l=$�YlO�$�Di���m$jz�p���s.L��l��t��$��"'��^I0P���U��_����"��wz����dY�	�fA�y;����!J\'�����<�1���H��m���Z���Z��q�3�P"m�gB��Y��=Mj�9�L���������6	��E�*����%���AV5<�K�Ez�E�n���*@3K#���[rhY>5m�D�/z%Cg�U���i��D?�^���<w7��g�2�7��S@+	��Dc�wj��a7tFOp��+��8��=��dV�$��7����4�N�'��I�p0z���+��X+=����f��_k���?�����x�T
��bE�
��D�Wd0S��}`S��9DNV����e��s;y*����������5.�������(:��G�*hA��x���%N&�%�D��sw{)������V��qjPwX����L;+��fh

=5FE�"=���=��D�Kb�E~��y�9H�YD,���eY�@�2�
vd��/q�
���#�aH�E�K��}KNc��/L���L;�O�O�Zq}[����5���H�����SW�e�%
��E���� EV�9��d������P�I��f���<#���n�g�w6GdQ��N��C�P�����O"���������UV��y� +S{P�p�)�<���$��T���}V�)j���C�(^d����BO�A���e�-"����	���$�
�C?+��&kT�*��6�cB�:�~s=2��iI��p���*�E���t�E!c~1Rpp;�JJ.u�����"�������������m��,Z����|�RI����<�De0��/i�Q;�U7:�{l��Lm��J��;���2�i[I�X/pl4C�(i�����-��e������*�]TS�JM�n-^&�Q}���~�R�VYjm�d=Xg���a>���v����� �h)���y/���������"�������R�j/_���Y����e_�~���L{�$��aQ��#X(��/}�����������Qz�����d�
-S�Z�6�T"�[U�����VQ�.����@��I���j�i
��B���j����u^]�������T������4|dt�	��v{�U����Bp$���`F��X�;�?/b�����>���_��J�����"]��(_�'��9� u�A���k�V2p�b��=�Z;x}��+��LG�qs��J���p�G�j�����=E��~\v�H$�v ��� Y#_�$I3%�����]��t&#��J_�`�g%-}0oa�P��uC
���;wc��Q�D��,[*4q�=����|�J:6�,`0���P���O#�&�*�xZ��B�%'LRw������R��	\x�y ��AD���3���Y���>��e��J�|����y����Lft;|��	�����i��Bmw�OX���W�B����[#t�W�����]��{9���y�=-������|�|�����;������l�Q��y����C�4����A+������ks&��x,W&���=�'��D��2M�����v��r�����!o}g��5�Gp�������m���9bx�������gt�MlFBD��E�_�|cv���]N -P���8��_�k������m7��%bU/D�G��<U1P��(K���������
q`�f��
�]��Yd���l!cyx*����T�M8Y�7Q�D��������[��@5���
Tm������"s���d��L��_d`/#���]���
^��E�R���7}���><\|W���o63�w,���x���gm�M����l�B���
�j(��a�N�STFS0��&�NE��j�8�&2{�q�C��bs{C�r����
�$���L
�AV���=r���Y�jI�v=����G��V�m�RDmd'��n�H[#���&�K��B�!l���6Im���}�r����I�L3n�B��e6�,5Cg=�"kR�cBc\��	{c�4��m�kd��d�`GK�f��i��S�C�X���W��?�����:w�.�	���kS�q0&^�`�&�r����'	�%�(�&'�ktgOMd�R]]����2fYVrb��~�OR!���O�$dj�e���K�
.k�������'hL���A%�r*����K���m_t��
�*�����4�����_����5�p!��I�A�j������^9d_z
�t�b�������&�u)s���}��
�
�4��/@b�1b�N�q��j���9:9��'��fQ�����};#a�,�����t�����izX�f���a1VrL+��l�
rpXB�K+u��U�D�t��M�1��tn�]�(�=@�q��O��eG�Hh��^tS��K�V����������= ~�}{@����z?�����P0�`O���~Z���v�/�b�_H�E��21s�B��X�C��;N.uE��He���(��tV�������Kf��"L�>n�V��*VT�����w�\p`�i%"�-l��?�)��X������CEo/�d�!��N�Y����\�����"Y��$��W��m�E^�������/$@�rf�U��^3�/�E���N�`<�eY��>3l�g��f����1�B�nng���O*X�����1;���O�r)A�T4���_M���6�f�A��{�r5G3��}Uk����M\�\v�w����.���	p�Hz@����f�!J����
_Hv�`������5�y��of��ca*R���H��,�{�V��$y�UX��B4q#��nc�a��{�,��
�Up?���f>���6�J��9������Z0!��Er�6J�}�"X�yq��wg1��B}�n���t���Y��>?v�W��Q��|����{!t�0o.�����������H��d_>sX�����#�z�����)�EV�w�&�����e��#�^�N���|��G�V����D�5���Y���	�RP�8��^T��%�;T3�>o$����j�9x��Z��J��.@���'�M���E�|��\!�����l��,�����I&Z��Ld��}p^*��G��"`y'�@���Sre�xg��^s*��M�w�Z���g��X=�-�0�B$]����`����-(�v����a���QF��l�/V�q��[{1�{����j�%�����B��*��V�;f~�%,/��a}����^
z4�W�${���>/������m��J �+��Ht�u���
Ti{�_�m<w��ebh:�,�3����e�����������c ~���z��npO����=�����z����J��"q�����+4Mws�ysS��	�Q3���"��jv�3��=�oC-X���s��$[H����I#sr���0��]v����^@D�!���s�2��]�dvw'@��!8�:��x?�_���y�G^���O���=�&��Y'���y��7��[�
�����}6K��WV$����d`������x��WV$`����t���,�k��^�1����T�������{++j�hoE�S��[Y�&���i/��^��9�\
CK�]hR���.�������Da������D����c�����:[n���0�V$�
�z"�j����~�Kg�|����c��w+�]��{lba�(��c��A��T�Fn@%����A�����]�
��L"zgH��G7��lC��|�"��j
n��K���?+�2��������)�eO���J�c����=��MF{]�*�~�T���^�<��\6h�#x+����g�G�*�2F���6��I�M=p���4��"��O��<�1��)�G��o@�`E�W���"�!�*�YA���F�D������9RE�=:��3�>������x����VV��O.
���������\�~����_����c��� 8�/���sZ�&��X�`��.�u�_I��)����NB�X%��\$G�Fw,W"r���������-�c��%D�r!x�{��v�=G�{���-��R1�7QI�����JD�:������B��^�8������/�5����?.�?�5���\H���p��_exc -P�DO?�g�{�B;����M�5�,����Q���O�{�������;���,�>iAh��������S�"��l
Z��������K�IA�P"��+)���8�k��Di4\�a����z1U�����#<{���
��d�K����X���K$�\z����$������t!���Y�
^k��7���z�(x$�
�B�����=��a.�_�{`�F����p���Fdpz]��e�C��X��bc�+��N��1���|���p�m�
���D-X*[g���
����mP�t9���
6\�g2g�M*D6 ������^���2w��
�Hc�������G"��o������38NT.�E�c��+�F�q/gua"�����mj����vA*`nP������h�
V����F����n��t�C���e$|%���
F��~����)���.��4��u�j�{ZU��e��/��.��>�K-Hu#F�wkn���K��S��Y7���p
6�]D
�r���O��Ijn4j�
��wY}�B�T�h$��S�s7� ���^����xmus���MS���M����6M��z��/����f�F8��$�����-t]��u���.O��hN�#��hg�io��a.D��6������w�8�m����[L}!��	�'�������|A"��H_g�y��BD��\W������[���mB��Iw�~^L��`_`�����d�:S�38<}���O�@�m����K	���c��K\��������=�]F6[Z�l��("�B���XIRy�Ag[�*i`kg$����!�Rs'�tmy���X�hly�x���M����Jtc�O��#�Q*�27���������]������q��*6�,�BOyp{�f�o^������Dp���h�6�T�n�N�UE�T����Yu���~!�z_LHy�u^8T�9�,0��
ht�N;���7��1��z����<�n+^��{�@|&�G�%���L�������a�7�7�)�Q���+������'�w�h�c%`��x,�Gg-D�g�,tw�%�}���~������w�]NRx���f�^(�d��L*��������~�7]E�1��l�V�
-r��B�����	�Mp`E*���^�������2p�SL
;�)&@^(.��
�����V��K��H������Ik?+����q���iU���,kV
�j��l4�:4��ip(��w�@D��v�@Z�md+�{����a�%�\�3�*�Rk���v��a�m$6�B��he�IDG���a��/�B����m����q	4�(;�+f�^H��bE��g;q��	������V�����:��7�igo%"���N��\���)�}k�0�gS@+jICwl�.�3�(��=y��{n�����������	#�2p���������\���+o�o=y����K�kE	���8Ad;a�"�a���]�����FM�P��w�,���1qY-���0*�/;���.�Q�.�8
�T(���J���Zp�����
@����qO��
����]ArG�hgu���!ihN.h���R�����$�E�'�d��$u�\���/�FU�Q�Jrg�n�?��[	4�3m���3�?/bG���stE��+b��	�	��D%��}���o�w���C�������y1�����9����cE�
�*���!��������B�8�kA,�{4_E�-��. ��������=8����������k
�5^�)_�+����d�P��a9.z��C��"����;��Zf���l��*���]����]]R���J>�u��<������s3}�_������`�w�{�Y�tfOP�q]V�>���/;�Kch��=_hQ�<4v��A�qYv1�xB7�����C:�b?-����)����:�L�q_����������f�>���2-8�`��t����O����??2Mn%�?L��@��I�e_�����'�@�1����>n���������u
����_H���O����N��`s]�Y�]�<�S��<X����Q��]�\?����|���J��<&lE0���;S:8�V��tR�q�f988�"�U7��
n���J�t:T�*����>���Bk9�_����������*�X:��d��f�&��������	�Y��&�1]�g�C����{���g;��p��8���P4�(,�	�Q��At��������{<<�����v��_�@�H:�p�g�a��m���I��'Q�����G��n����n���9"����M���U���h��\���:x=���)?�e�K��e��f���D�z�,�:!�w�	q��zVT�c��L���)H�7��������/�[,���T�h@����A���bgD�P��I������������1��m��<|$�:G]3�������m��I�J3B�%�'L�������$�;��jQ�(1w?@Krw�-FD%+C4:"s������^�F�e/��1�J,��b=/)�f��+*�L&��9�w/���T���j���Zs�N�3�`wA�C�W�9=L����l�Q�+u"T���� I�9��/��6�8a����
�i
�7a��a"�3m�����xM8��3������Y��4�0�����X�@3����@�o) Dk��]P3�������a]o�,��������uD65���j�v�?������<~������w�������c���r���a��������w�C
"�@����i�7�(�����E=lnoE����X�,�'\�~y�A��}f�z�%y����{�����@�?�%��{��gb�5:W�z����Ep��1���X;�4VR��W��vA��	P����}�e��M7���?���+���:Hz� E�S���<�N��}���0����L�anUs!���.�����*F�(������,���A��"�"���|�5;2[e=�v�o�c�G��DnN;���h������E�[�
Pg��F���Sc�;�?�z�g|hk��Q�fcfiC���7�4
x,��":1�V1�{i�*�[-�������/(�0�0��X{3m4������%�����47���g�<|��h���W��&r"����D�}*���@���7�7J����kL.Z�2Km��}�	�)��y��|��3������r����3m��7���O�`��a���CL^,������1|u���u�*Xk���X�f��d+qZ��%'�����N\6
��j���p�9W�_���\B����C:A�YP��������j&N�-VwzA����V�0�M��M?������) �@�w�����f�t��(���_�4�����`(���e}Vm�B[�_ ��m;���0{�a�=]��bN�R�9�Dd�C��-��$��o��������iQ?�����N���t!"�\7�q[��`J�n�rqJ���&��61��fI$��A��dI1{��L+e�K�����E���QmE!�%����%]�Lp�%�����.H������_\��)�����r�%]����uKzof����H�q����k�%��X���E�2K�B
)<�%�O8�%]�������0���}q��	3��Wt���0��fJ��)mV��e�����T��lL'�)��R��!5mVi�2���:�zP���\�%��Vd=(��%��S�}�4��}X4O�D�N���Sd�5��%��HZ��q���# ���.'a�2��H|�PX/
2��g"H�(#��������j9%�a�W�=�$|�i��|y?H�g�+�>cC��z��9���)�K�J�)T���U=��V�,H=���������R�l<8��������uU
�T�H�*6�9���c���IUd��(I�����eo���:dB]�D�r�VM����&+k%���By<�����i9lA��GVy���i������]W�z�~8\Y�����\WW
�I}�e�L�����cJ�d�P��
0S89-g������������������~����z46�9nnm�u��D���J�-�c%�m���-����I2Cj�7*���Sk9��M��cr��|�7����;�:�g��{����iV8E���p���%����B�/�%�8����l�D')1���i������j��T7������b�(���r�Ee��AmL��:x�@��
@�O:��s���`�"�*o������q�TTK����P�SsN�8s&�~=�F�lW
ylv��z^���"����j���3@5��?CN�3�t���	yZ��
B7O��Y�9{����+���������|����&v�����Kj���%M`��s��<@�%��$?eX_�m=;�$�%e���0��}�����#���u�7���#��.��n)��n�����w!��&p�C�-��^Gj�
�w�i,����<����=��,w�'7�������A�v4����Au���
���ZP����mE�b�;a%�~8�]N(�����$-��d���x���ks��m����1r�B�q��9�-���r�6.IfL��x�h����(��~�D��Uf�5���X8�	�!�����t`��~j}���j�7*��?-��u��iB�O[,�?+���
�~��;m*Q��l�GY�S�%%GP�,�l�����)��mV_b�K~z�Kl.�Z���1]Q�.X����Zo2�2�~�&�>cue
��
je�k���q����zxvXK(�X8����A+��_��94N��9�A�X>���7�rn8g�����s��,D��Ds[kr�0�]���B�f��h�$5!3�;��5Ch���\��c�����g	`^�u�,c[�w�\��0���,��hO���_E��[���>-���$�����-�<�h����F�Q�,o>o����#��������W�-���������ts�
 zl;�z�
C�V���~����(G��u,F��^���[�����3+�y��{��?Ko
$:k�zT����h�;U�����Q�k 1� IE�W������Em�q���<���bL�!�mu�����*z�QP#o� y��3�w��Hr����oK`X��g�Q0�=7�u�W�Bw�$�m��jA��u��W�w�:�
��&�_����$�vZ��J\zn�����Q���s\�����v��UL�r�j�1��{�]���6]�;����x��(��`�c��ON�1j��''�5���~������>FM���D��4���<�����]��X�7�������~��������(����cp�x����&^5u~��WM]���������������o.������i�����>uLf������O_������:��������~Qj�#����>��_���������=���������Ou�������]����H����H��4%�cR�Z�����Y�:������a�6�"J`��v{�=-�H%HNX���t��T�x��fhv����������7��P��n���G����F8P�IC��	��&V2�K��M���sQe�Ub8�8�����[���R���B�p'��;7fW��a������.�?��~��<C�J}o�*J�b����,�<	7������A�=�������	��\�Mv5'��������H�yG7�f�-H���Sg�s���P�JD�M�!R�^�i�S���NN�����H?�{%-�nm��cAp������P�q�dV����f��Tt��o�"�v���poS������f���	��X��+WTd
�(O���x�/�F�oC-�wY��;l!EVs��ts~����?�a�'���\������I`��8D-X\�y8�ZH�)�~Y��{�1�#��=�������Z���`B���-T�z���z��������$ �7C�&�6����E��2"0��d�����\!���B�7dk���[���|����kJn~1�./��c����m�CO��^��br-0�$���t�Z�Sp,�>�Mo�/�������Z�����
&���|ZP�;����YSI�7�����ka	A3=����2=w���	1w��y1�l������:�bI�&\��iA
�P���sE���88&.�����5�����T��(��V�c�;���
s�4���.�N�X��'��LF}��]����4�(v�(�� c��3�
Pm�6/�/���p41�)����e'�y�:��G���Cu=l0on�]��l����SjV�o\`�E�fF+@E*�0dM\O�>��Z"���N�7^�&-������Q���
�Eg'n'P
9����8�:
��O6`���rAMI6��aV��*$eE�z��U�OwOU�����h5|xK"M�����O`�Eh�79�iC����D������AV+����:0;�L�E���@��l\0���(M�ZJ�� ����	j1���\+��>��?iM=�	�������h`�;�!��:���|_�^QCr
hB�{����e���:G����Ir|�3�LID�v�<O����D�)��"2��3�Iwsg���hJ����<bh��UiA*�O�q@Rt�V$�g�:Y�N������W�=��I<`���hv�q�fh�M�'�#j �������)?/$�$M��#��,�r� ��>��4��wbAM��K��p*��u���|��*`hy�$F�2���
�6x�lb+S0��%#~��>F�2�����[���M�e�$��v\�f�,�}����us���	QgJ�)8���rA�
�����L*k���$k��>b�����q����]9x��d8���1�H�s����_���>���l`�c��X�}�7�+0�5$9(f��(�*�M��7]����Z�`�80M���Ltts�����G�����u���XQ��v%��(���`-�������i�{|~|���Lh�n��c����]������a���y���HEm���>
jY� �������w���"������4w0}0&.��,[,��= j������!�
�����6�����<dsQ��J��bn]���"mi<�2�4S����c���������\�����Qc�be��'�����n�a"V9i���L>"�z��JD��F����)�Z�&�VT��%L[�z3����G�����q6���_����z���!����&Zf�/$��E�;�Q;���l�R�(	,����t���(SL���T���M8,�KR��g�&]Z���!��p�wi�d��{JV���D�i|uBEVM:�%�J�H���rM-�h(�I����[I���Z$Y���#C���T �����M��en��%[���	�QH�����Td�� yy��
��R�6-H�9�]Z�����3!��>�a$d����l�y�/��Fk}[���X��x��g
���2�"�?6���Z�/��d���*�/�a�Q��e�+�(�Q�	��g���g����"jN���`��"�f^������
<�����-��2�������G��~F���j�o�3}�9�EF��9�zhf�X�w:d��Z�g�.u}!"��gw��s�R��+�U������
3�0,]2�+��n��}l����BDu���lC���!�"X�
;� �l �� ���%�E=l�fO�%W-"Z��������137�vRj���g��w.``����)���Ox�6��tG���Y���{���/��9#��������������_`�f��\��pc[^�}GA
fM���`���U�0N��l���J�s����2�c����f�p�n���A&�4C�y�}��K%!of�m�`Z�����t���s����!%-��+��3f��g&�F7�.�,����V��z�]Z�L�:�:9�pG�Q[�����aY��ai�*�g�t���c�k�w���r{����{
�}O��-��@&�
<�Nk�h���e�~' \���c���Y|��vK"*����8���~Z�$�:nCA&�K�t�lJ���V�jR%Z���o��Q�	$"�t��ep���B�(_"���6�a�(�t�7�='�q7��}PJ��~/�n���H���i#j��n>�B�
Tp��17����Tl�i��-�<P��i��O�s��%�S�l��^H
�����,�>���5yn��o�^Y+QyXO�m�7
��B
ll�4�8���KE�|j�CP�`�5���F�P�6��������?/c����f�����6������/����n��
A�V��u�6�3xcIs$�#L�	�\Du��������kx�L^H���$���f���3�sq��4�9�\>;sV��r0SzY3�Y�)�M�E�<s����R�&N���������'e@��I,�<�C��?/"2�
��k�����X���D&�]E���L�-����	�
���]����,��wti������������:��k`��E���He{�jD�a��<$Q�.�6>��I�p�f����3��	����L�\I����x�w��|!)���{X�����W$�K,�����������O���/����5�����?*��oZ���}��Qi�~TwE	L���m�����f�������P����{�r�t�p��;{�&�DE/DEN��`m��+��y��=n����q�M>��
�BR�9S��w�`��	�zd����7e"�c�T2���g}|S��%E���h
��-/���^���5UM�������o�1����5]/$��M�l�����2���+�j`FM�������8�s�V$��d��Mn�S�t����S�D�y����"&�*�t���9U0�+�|03�n9����K���7plf��3-(^r���De���� )��0=��fs{A�D�	#F�e�B���a���N�XTY��U���z���w�I��x�1�����"E|�N���V/���~�4����������������H@^����\�t<��X�H��}O���!j��� �X��'�li�)�@�K�P�IV���p�+/k Fz{B�bk4�����FTgQ��	p]��i�e��'��*��f���t����G1��d"�mb�Td�������P�h��������2�X\|.{Y�w=-
F@z����Z�)���6k�������Heo���W$�
 �~�e��5K�X+l���K�n/$�>W�k�g����^��g<G���R�����^��<��9_i
���
��;7����-������O�hbY�� �}�
/<�jA�m�����~EZ�y�T�FYr�]����H�T�����M%��2@c��"YF5�m [=L����I��#�;u����u���M11��D
A�*mJ�
�O!��-DR��r��}r:,t^2����rO����I#�p��d4����1�����a��Z�}l��NPXI���*�XR���(O�B���(_��wtp�������H=��\�	������|����x0��2�J-G�����pW�k�-��������$�Udl��P�y1$��,����F��L3A.�.k�w��2�y�L3��F�#[^ i<laEkW�/�u���;��!{������D��"!c��o����S���:��g����������O]�^�7=���@��So�2#?�0��������q7� �������Un�j�M&��]e�t-w������|qi���\������x�'z\�����dd��/%�^��aw����";^�mJ���$
}W*�\{��D���"�7�w���+���O�N��#N{B���,��D���Z�
BWq|�+���@���|�8�|rH�9�#K?+hx;�5$���l��q��]�����8Q�����L�����/;m#\-e���:9�SA���
�"����$
�W�������J����{��M/�c����i�����,���v��h���E�3�������V�l��;!}�S�y��?�|g����qH&�{!z���?#��"�����	M�(���6����wQ�����4�H�[}�>��}-��38(6���,OCX49{f���N��O��$���$�9AD��c*��<�B$5c�?�n������$�y;wb�]a���K/���>2d��r����
n��qN���%Q���f����q2Mj��,���d(B���,[eZ�S�gA�	�*���x��Y�*O�*�+Y� �6D��������]g���<�>�l�EQ�x`O20<���W�8���U�]?${e��W]R���b�X���W`��$�7,����a�o�Y�rO4�$c��n=M����+q�{����/[���6Q�E��p-�6o,4\H�����q���Y��,_�����1�sz�W��?_+��?M���)�k�r��
J�(rE��Q�������5[G��\�JN�����dP\��XV�f��T��
q����>+�zn�K�&���/���M���[�K�P
�V���RH���|��8g!�gr�|<I��zY��-�t���8L!��x�U��K�l������I�A���'������[���������`;��FM1$��I.I�>
����Bu�C�0����!��Z��,L�4.iz��Wa'�$�����k��#p��R����cy$I�]��j&�OB�^����[Ss���&~V���!a������MR�
j�����G��q/����X([�1�I'�������4�Uu���x2���(e��W,��W�{M���^�X[]���\@r�������2�mY?��%�+q��G��i#ikZ�(5JR8��l�E*���];�(�5�O^E��}/$�������L�����v���"��k^n�����0���� ��S�����d 6�_�B��Wg��d���:Fr�8d�_��F�j���g�=�m-�=����� �	�(�eC��d���@y���Tn4"p[h�������#N�L�X?uS�t�ED6�M���\��fRl6�:�c�h�m!=�����"����D�%O}f����^�(���tp#�^K+=t�J;=�	d�����d3(�0�t�H;���
�Le]��j_�n��H|�K�b�=��|������By���8��BD/�����IPV�q����i"��s���j��^]����]��d�X2�/tb�[�,�O|T�����w�,���1,�Z��L��a��q��$�������fP���is�f�tI�E1���G��|a]��c~�Z�#��Y���A.�~���,�H�-?��}���L�k`�-B��t���/U7����H��wF6��M�c��(I�h?���"cQ�*�v����NY}��������'�P�,���[9fyXG�
8a����I�g��Yl�`�z��m����<
C{���|y�i��7���Z���2Ly������f��*��TK�G�����fBL�t"Y��g��|��P+�*��0}������iji�x
�\g`KT�tE08���Zi~��DiuGLz0�@��Y��������)������-Z���-�����p��D��kG�z���,[
�M��{Nr���a:S����Dg�������<C$�^��W�N�������$Q��qX����e�
���*����dyE`8������,W���ES��(��'�!UoF��L_@�=�eS�, ��1�F��o�,���u�F��X������I��e+�^���^�0[Xaf��������rc7b;������^��J�y�~�E�;nHQ���I�v��H����x�����x�7d]"��Z�����'6z��l'_"uL�_%;�H����o���_���I�zx,�����	h��l(d������f��+*k5x�B�t��=��FX8�=a�4�{����D7!��t���������i'2������6N*/ �2Zj��;[~0QO���v#�h�4���M�"����Y��pQ�:�R� }fYG���e��U<��j�k������A>�����$#L`�g�`@�2�Hc����kf��]�I��)6�(��E���7�U�n����L�A�UD�9�89���h|��`��Xp#�Q�m-kT�(��Yud�kST�:��3xC���a�X&������K���K�e�W�E���Y��pG�6�s��fPB��C�^�l�y�����Z{:+��?3�Bb������������a ��W1 <�(�t��R�f
D7:���
w���Q�t��
����~��_Q�00t��7L3�������I+��}�n��W"����������t]�@���X�ZmZh&��h�*;�!��/�2�`�(�23D~�Z���"���p�/fY�ZI5�h[6��3�j�����!a]7:����G6`���j}����
������^����R�"�b���vl������P����v��L�n�F�17"��L��<��`�k_�x��L��S�of}��@I��[Zz�sdL, �%������7V��r�����[�a&Q4����x�������8h���?3O;��������'qD�p>r���p�I�A�D&y0��V������TH]R�	�����S�wE���f�{#ao\�9�i��d1����i��p�6���0nR;�f!a��c����T��3��$>�@=�K�I>����m���,DCQ���k�be�����i������������
n)�g@�J�
���b�>���)�|���!�����~$b��e�q����W�(���z0���B�r����\�p`�O�,l�AZ	�;j����0��Tl=�*��w�-�
*���t��m��u�	���>�����$Q�B�bE�����|�?.[$����6�n��=�6�G���z��6��iC����iC�������������u�s|��R�����l��z?!j�U\o���C���6]��|��=�qb�~����z�zs��|��v���	�e?����eg��8�r��&P���&~V ���[�O=���$@�.����*�8��?JHe�&��e'@���+�X�_P��\�����QX��O}�)"�~(��?�U{�|v$�`��p���S�>/��l���\8�`eY���MS�;�~T]B���,$D�:SB@��!��I
�
�S6KF�!�=�V�����Vq~����
`0�����u[�u�:7��+4��	ybJ��s|EZJ��'���s�_u���~A,
c?��%�Z�V�9���jUU�L�7����	�w[&`L�����o�������&��~X[�#6�z���Jp�6������"��������<|^�dU2mj���M*I��6[a��'�� �ew@
�a�1�� K�V���_�qu�'yLa��r�|6��u�Y���0(3	�l*S=��~��dS��(�#�	�FuA���r� ��Y
��	TnK
����t�`��c�$��j��h	~�f�������T���I���:�
�z���E���fP���fS���~�,?��Z0�E&��.H�+�)�8���=]���<k��.����$��bkM6�3���o-��>�fk� ��jn�[s�p�?Sp^c�8gk:#��0������v'��L�a����W�lLyRc��/3���15T�1uU�5���t�x���������rV!��+���w6�O�r�dTW�9%�Yf�*u���KI�@������S���T�� $����vdO`�)+J�V�a&����H��
�S��M]�T�����3��l�����k�M8���@����'2B���
%�v��N2�+ �����a��uEZ3�����\���[����a]��O�(�{����uE�e�Z�o~*P�:�aW��\�Hk6���|�a}*�`���v��M���E�j�[�����5�����1n�����-D�����f�6,����Qg��~1r��I
-e��Y��_mQv�����hX4��$�t����m!D%�d���d,�>;�<&�
/�y�S:r���,G����F%��N[�����E>J:''����Z�/�S�������u�;��L���ye�
��iP��WY��#,��{.�	i����@N��\���-��^(_1j�����~�}�ISi���[�*�i���a�j�L����m��dv�	hrV�a�����m?E�
�y$[2.���,���k��|�:W�*)�*���V����7��.$�z(�u88�~!�d��1���|�?��0�n2G2��A��������AR���#k�B�[v�>��({�X�]7o�mZ4H�-&����<Zj/�k���g�K~�E*�fo��n��Ao4t�m�h;4lE�e��M�!1����&$����,e�����?���x����O��'�bf���ep�qE	4�1�<^W�c!+J���Y�b#��^��V�����$3jc��'���~�+�m�:r=����c��'�C���//��C]o����^�X���9����09!��y��$�9h���3�1L8f��G�'�P	&��V��,S���?z-vT=)%2t�s^�7f^�/H_�;?k&��u�7)I2����7�!�����;�fC�M5Y����w�t��k]�j��_QT�������=�#�y�)5��/J��oly���.M}Y���p?���h0���T���!{�k�U���pY��y�|��GT���]I����m:��EMf�����8�w�d�kc�&<�di��f��&�3�6�m�0�1���d�����p��1M2�p5��F3���EPG��hB��#��1�F���5���I���9Uq�3a��r��0����^��������B,HGC�����#eE�5%WP�<�e~�	r��A�2	y��,&�i;��Y�S*�|v�i���8�'�,K�4��k^�����,u����f1��{5/����_X�����O�T*�.H&�#B[�Pe@t�'�#E��:�
I�:k�P=�D���^��J2����e�L��4��
��V6������*�;�S��S�;�����g�$w��&%I���?�=�>b��s�#)���DSV��K%���t����.��;��x[M]j��3�L*O�]���r�*������1!��1�Vi]��4}�����>�x�;����:��k*S��!M�Q-���x�����{�B�O!��BD+?�;O�)?�^��:k����)�34�'.�H��N�0W[5�]�&��l��f�q)d��di�������44��O!�6�&5������L���b��b9����6�i�c�����J��3@{���[Pa�*�;���[���*b	G.,����C\���z~��{x�A���61��>{�;}�	��}#�H��X��$tu����_nf������je��V��j��l����	`(���rU�I+;�$)��W>��pm��JZ�[f���T+���h�������L�h�z��kf�W��H3E'�u��<����sE>����V�c��Zg���4�qf{u�{��?f��E��,���AP@X����C���o��}@V�v��Xm'j�h��c���R���)��p�y��J�z��j^�:����v���������a��a�;p,�������[{�:��%-��>!~p?m!����������b�
i�=�B��L�u���\����f(���66���;
�O�4���Y[�������H��/��w3|����7�=���c� <u�)HAc���aC��:e��xg�9Z=$�>�L��^^��a���SG�e�o����N7�fi�FL���!�lLJr0j�O}9����q"�h�E�h�R?�<6tY�>��F
_��p5\~���ny�,�CkK�b��7]�.�}������P��K{����2�	hz�`�0Q}N3�;�6e��/��X%����y���^����&8`�������)��v_�lv&b��#1�S���O� 5}��L]Fa���#��������3�XE���O���<���+���W��g5g���@y�/[bm��,��X��u>�������Wdv%�5�i�7�;�Bd�q�"���]�g�#_
���B<S�����~���������2�;�����^B.@�&��&[y��������+:u�r��ZG�c�i��/�X����+��Q��P��6;�C����}�0)@���Pk]��2���
(��Rm���\�1�?~�ZJ��2U��9�����uN��s�~������2�u��&���:�|}���z]�L��*������g���t]�|�z����^?���r������c�?����N�1_���^�t�i��{�?��z�����5�/�|����^����C{��"M�!��c�~��:���u�q��,lq�b�.'������M�!��s�����\�{-_�5_����S�QL���������:�t}��u���\���������?�y�W����:�S�����1i7�����u�k��������O�b�^'���o.�t�~�:�.�t}��{��>k__����c+�w"���G��A�
���s�~���!���
���1_�u�F���w#�|���b����q�~�����9_?���T�
Lv��G70���>���
���{���&���z���7������si��z����b��������!v�on���
��sC������77����
��sC��_���77����
����!v�on�]��b��������!v�on�]_�3�.��s�����-srC�z��b�'�#�!~=���
����'7��������s���|�����~N���_�����O~GrC�z�;���������\�g-���o�a�=��O��w%���;�����f�,�@4�b�5zc�o!?��Ytc+����Ld�V��V^{����Y��t����"$��������i�J���t��/l4]�|�]"�d��z�T0+��2?��H���!2�q���i��Zp�N������PC�����HrR�6U���/�����j}��]74U8�
����|�
Y�s��q������5�J����}������i������\�y*�Q���H2������9�!���MSJ�dny ������F���L�A�m�j����4%������L7h��{ ��mH5�B���^�L�|C���X�GT�5K"{�Vg�<]�lD�=���P��J�Y��0��]|�B�`I�O�:�f!I�8q$�2��!��
���x/dV0Y���D7uz.��	���4�.�y�bI|7�h.�@ox��qb�GY��,�����/.^��������{g���>�hW�j��Q�n%h�w�2�h�+����ann����z;3Yg�_;��~fYO�[�@J ��.����}���;9} �t��&�h,�[
�g���N6�~g�ei
n�%�aFa`�3m'/��D5�gG��O��*�����.���d�,cz
����
i_=��{� 8�������x�4�M&�7���@{�����:��H�`�y�<������FD�p����p0^?� eC�I��_���}���66{�j�%}X�&dG|���|x!V���������m7�^���n9���}A���OKI������ ��z>��EI@On���c��4�7�"���WFJ�{����`!%���3�6.��P����$���*�n�IqN��p�+���d�����N�%x�WXd���������L&Y	?_�����b�=�z�~��j���e�����M�t>�6S��{��d<�eT����4�$����z�
���Zd�����?s���^'�$��u��o�������:��:����A���K-%Q	f�|��t�Q�����b�.�s��;J:�/`&[;��3m�H`}��
|v����0��s#7�;�w����g/��\���q� �?���BR(;?����jB��@�����Ee��I���o(��{���\\^R�[X��Pyt�J������=�X}>�==E�{�/@Uv�k����1O�$�����W��XB���/2��h
�Izq�/�wP\�����N�����Uu�C�����b�p��� �{��>5����zw/�>H&Y���p��b���e���>���`��gG���������)�Q�.@�3+;����u':��/)�^���m��TV�@���q�
x��ga.�[Q�� /�b:0���zQ�;xM�q7j�H����;�h��$���j%�,��Y�2m���LmI�\����t_����T�S����t�4������CY)�����L��w�z�Z������x��T����,�\t�]�*�^'����<h�jq�U_�
�����]��@��2B���>%������#�;`��,�M���_���|<^a�%������.E���
?
��~�V�!$Cr�������Vo3B#���i��e>;����z#��3$�����$p?��)�p�\����p"�e���u#�pd�\<)@��er]
M�e�P|o�Y7�d���QM8�`?,H;6� ���"_I�C�ki�d�o���m]Y&#�e$d]Z��^1;�A?P	�H�|��m��	�!6bC�l%@��2q���^�p^��P	6�d�i|���c&�@��e�<_'�b��d�OM��a�HF��M��1g��9H���X��#����5N��]�b�n�C�\�
��a�c����_�q��D���3m�Ug���a��ZlS��e�$��>C0!tF/��+��gf"���#-�����	C�*l^�L�p����3����$
������0���V��3�h's������l��SX>�WE���J�<���2�/rC�_�;;�$��$2lD#C'_�'>0�AT���zQ��Z�b�-mp-A"%��w���J�	��oOqylN
����T_S����#����=�z�a���b����d��������N_�@�n�yf�3P_����[J�+ f����4�����&�1����5�_��\�)��;���,Ww����&�5�F�Y�l���x?����������H�s����v; }EE	V�t�����-v���`&<��)l����$"K5�g������(�7c!E�;����,�g�W����U�A�r�J��{Xo���J��#�g��a%K�A~��������6������@>_�#����F*�iF������No~�R��cMW�d����$1���S�;�P���\�J0�������be�Dd����&�y�H�="��`At�R�?j���`BtB����E��S[J5<N�� Z��������"s"AI	���ec����!�f~��S���@�0�"�8byt|-�x����Hd��w�N��Ve�nHU	��z��r%R?}�pAIIO��'%�(f�������*��]������_%]�u�J\����|���L���i�u]w��eE��������$�0���x&o���o�>p.��v�o�epL��T��	���&��i�Pr�ew���\�I���o�����T�}FMF}C?5?�_��`7b+�a�ofh���X�5����wh_�x�%�>��{����l�mb=!L�J���n��x�f��"����_�%��oH��82��J��5�������iO�Y�eY7��3�e_���M��%a�7t��V�n�*���lL�{b�D�m_Q���0�7���/@D�j�U��Pa�A��gX��YM�U_���j�W�������X���f�A��
	pOJ��f�%��& 5��kGmH�a������2�l������� �0#�{��'���+*��$���^�����<Q������[���������?�|�f�Cm�|��L�X+�q�`��A%@�\;%;�sC�B�(q���
��6'�F�t���l?uz�����G]��hz���znX7���s����Sil�����u����_>;���d���m��3t����nov�o6�'��#������`p��O� �	��O&�*����S;baI�p�����gGp��DP���pQ�)�VL@�������V2�����e���v�n��8�����{*��>8/3��G��"p���*����W�l�5�@���(`��*4���EQ/�+�x!R�f�������[P�m&L�F�����2R
gg�����7���������9��|v�f�����F]1����
��>����\���)d�?�[�${�^}6��8j1�V����'>��R�<�e7'�.Q�����}6����rc��������q����{^{�4�������~�B�������'.�6�~������NH\������4�t?/�Mm}E<.�`d�UV$2��������P	6����A�
�����7������" ��`��-����6 "�x8\J~�2ed/�"���N���q::��<>��+��7��|WkO�����@T��q��������L��j��������++���+�xee��J<��++0�i�2.��,Ddv5�e�heF8��>��V2�heEe":Z�u�6ZY����e�+�6��sJy��%��&_�Y���w+J����\89z� �{�2���4���a��L<^�����ASOd<������G�I����90���������I5BX+J�A<y���������;��c�� ���W!�����uf"�`H�����J�!@a�C0�]5��K�p��e�A�qs��bx31����~^�!���H���6U���TI�{�f����U�<�v�&��������:���e�x���"%��g��
�DN1�i|s4.�(bxS�\��cz+��Z^��?�|��~V �M7U(����#U$����m&��x*Y?�[��tf�c��QZ���~�V���QZ���Gi��X�������
������������w��;�J�LI6���$d�%Qr,���<����:�+��Vp�n�e�����K���B� ��v�=G��Po�W���iE�o��4�[��JD�,�A����/7$��i�9���`�D~��,��)���o�5����]6�1oeC��g�H	�oi�q��������f������X�h_t&"3
��T��~XL��	��`N�^iA���gs%Z�j�7eSP��)Qy�b�f�!=��1�J&Y��8�k�p�
����!��*C4|C����������+��?���g��AJ�|�sOO�:��ru���nQ�
i�w�>pH��:7P^���A�I��iS��#��e-L���=0�n�y���~�3��=�����J&���<���D���Z������sD���j��]!�
�`��"�-��W�����H���/\T���o�3�~"���^Y���������),�������#���?x�����jOQp��I~c��A#����{qaf"r���x�Z�k�~�i$0(��s�����>X���]�v��
����3�q���������f�<:���\��b��3��ma�3��g���2�����nz`������T7"�����M���r=~�^�W���~
���O"���9�$P�eCR���F�e�����fC�UX4���8��H�%z��;-���^7
P~?k7
0~=k7]�������Y��P~�d�fD��?I2G��#��J0!���G���������:f��
�`�X?�DM'7o(���>��P�	��_-L�_�9���K%|E*O'[�����W�u+;���lO�.T�[&�������X������d�*T��	4/��&��v���37�	���g�i��S�ZJ�e���Eg�����J���)�����IR�S��I��K)���T��m#B���N��y���X���s�����N
u"E�M�>W���$��R�?�Pa�2P�!�	����g�/2B�0R�T��f������Wf��������6l�M��Uzsl�����=����@�)�/&�|�:/=��8�*0�(K@� �CT=�7�(��8:l7�������x��oC����Y)`X��*��w�}C.��T��4%�!�oy�
6i�o�a��# �	��,h:F��Y���?D�g;4�+��s��^�o`�<��8�|'�x���f�6�f�tsHu��L�����x�*���������1	��G64��(b���-He���	
0�s@+ypWL=v>WL�l(4*����P��([�(����Hj���A����
�c�������iU��V��@��MM�+
����BB�����-q|B"z����X�V�����G�|�Ta�%e��gHE����R%&�\i�:��w����;�S@*z��_�F��-:�GR>N�� Z2.�����1j&qAZ�
i�<��S6&��Y���F>!�<6���4b#��V�����U[���������U�?�ZQI�3@����.J�cDo�q���G6;n(@C���m�_��1�+�A�����g�������9��n��������m��He���Q�s��
�������?[��:����������c]��AA�H�'?�1YX�����Z�^��G�B$���	=7��������$!�X��n����W����q�����g#�e��&.���!r����7����*�jyBI���'��]���_Y6�H������Il��<���"~<>:��0��	�b��O�����LT>!�x����m�l%��*`���}�HF�
�
���2H'��qe�V���S���}�lY4E��dQ�J�@Wv_�*�z}�H�^�����{��S�Q+�Q���������C����C�������A-8!r�B{5U�� k�J�L��y�|m(�O�����(��
.s�f3� ����5���Y���=�c�g���)xYq�������p"�1Z'����F\�Qj��%�n�G'?C9�d?�~���QQr�7�U3�}!�����_��R�Sc�t���Qa���
�v��B\�j������<��a��v):-���F�n�Y��\�qb� u�+*JI�+�g�~v$��Eh���N/��d��F8O�:BN21Ri���:���
������(_�R+��F�������PY�ss�[�l#�)7�����7f����L����|C�t ����������0)1L��&g��8,79��&��f�`WH������M�!���^�N�}���#M��n$]N�����v�z�h�//k�Vn����l����!8�y�l�
�e�|6b>��C;;��Mr���52k94m�{�a��j����c�t3\�lD��6��,�O=]@?.����q���WTf�Z�}�f.r�S5���ub��@xY��m�$x}�;�8/�L������2��74����*�p�fBZ��T.���
�-��+����+MH4������zm|�����Ec�I������}xmK�����������*:�:G8��{G����oqAkub^iF�rY������y&I���wY,"���J��P�\]�*D��
�X��m^����;��F�e�>�1��X���o��$\��db������_=��M,�;f������t�.
���pA�C�7�5=�%
r�oc���s�A�j���$I6������=N)2Cx��X��]�L0�0���cp��J|�.����n��:&c6��.�"s�`!6"�
�����.��/��V�T7��/8�����'�����r������&3�������4e�yaL�@�T�B�w�>h�c���xb���r�����������S�}a�x�w�4��N]��hR
�Q������Z���}�������*`�86`���=�$�z{/W{l��}���R�}<������4�"(k����$�c0D�!|i�d���
��.���_�
B�<^�m����AM����������T���i��z��<j;��G����_&k�[�<���B&����$K���|d�(�C2M^<�=��9E'�L"F�\!�#���?�=���S7w�4L$�i� ��<N���5��A�^_.6�z�mO-t|��4���H��;^���XW�uDQ��`eiG���@�t!���o:N`n*���P�M-���ca���~B	���!�����i��W�n>4.��3Q���Js�]U?+P���/�����<.LFP	9P`E�D�}*���@��Y7�%p# g������l,�%��������x�_u8�����& �a�����g��
o������iU
s�N 
1��X7��8�Z�S���]���X�������J�7[���,5i7�w��D�i�bHU�dS�[��b}�#r	��z��$�<���0�M�E��O��c�-����g���&��1�a�/.(�f��n��r��K5����M����,������V��.��so���9�����^�l&�������5���J������lOW& ��^�ps����|f[���[�������S�����t�����s2�����F�D���(�Ry�����xe��M�����-���+�d�T�aIg bt����V,��H��fL����0�5��(dZ�~��BK�"X�����h�%]����a�/������iX�%]��-o�[�~�9vK�"��
KJPSO��X������%�PA	[���
m��+��0�v�&�:U_���x�����P	�`ES��������D�6�o���~�gu� ��'�~���n-%R���MVf5������ �SA	�U���1�b���*M-�4&^�A�!�|��l�^#8��{%e��ou�����|(%��I��
 R��\��Qd�b�D�FQF|���i1�*SI,���������3��s� ����A��&�=G6z2e��o=�Jb�4�EO2=]�z>IQ�@
���R��zp�IS���|��l�j$Ti��[80C&�����-�$��w���h�9'uH��:}�cZ5�{�b���3q�.�����G,Kg����#gYSuB9#�j��n5)k5V?4W��_M������E���Z&��ztsyrLI�L�|P4�@%�������&U^\S��QS��,�w���M8N�[sO3QXsi����W�����S2x\H������G=���Cl���5���N�����:(�����A5��]i`iR8����.8��$�������JJC��{�"su�����$�\`��������j�o�LJx��'g�.Z\]T����w���rU�n�2��j��,���?�7*��c�D�;U�!����&����S��\I
�^�[M� �U��a2��O��R�%�{���.�=ST�n�j�l��K+����q��n�H��s�JC��WZ�g��j����IM�pC��.i�%���&pZ�<[| �������)��	���R�R��tG��yz�nA���''as����|Oi�Vn���W�	=}+�B�-M���[\C�N�17��(\��xFV�/]_N��<Ot�.W�'7TZ�7*�nS��Au���
�
��:�	`���@�.+z�.F����<}������o�MR=v����C_����<���z=��H8��Q����B|c�i�n���$3���C~6$U���v�&E�O� m������l,�NK������40� '��H��-3i�gG��O����O���,�u�b��r��z�e��W}��LT�&��Q���gEI��Ef�f�DPP�}��?�Y}!Z]�d�O����	A[�������
2�+��S^�M&Y�Z�a	7G,����g���B��|}�������b�>��Ks��gG����C�x�����c�~���9��AK)��'�P�����mm�!��#��g!�3�X���=-�������!t���������R�%@���n�����n�w>J�dE>����3�1p�����"���b�V����hh��pF�1�X�|v�#FmgE���b�v�X��|m&1���#4��y�#6�fk�����X��r���+G�U��S6�����>>;������u�x�����H�����V�Z����f`�3u?��H�(HQuq��$1�kC�	�x�D:�������8������nYP�QPE�3
j�-
2#�1uC����K7a���e���eF����D�o�U��$�m��j��U������1�����3�O0Z;��d%�Fn�����g>W�MpQO����M�UL���"���u=�*����_r�A\���K&�t]E������t�+�����v����V~^���u���{�y����Q~�������~�D�yQ�|�E��4�~�D?YI4���~��R�&^��^�&��|~4��}.�_7������L�s�\?M����w�h���������������gCF���u
����?����������,z���s��s��+"J{��NM-[u����O�w�����?_�����������9?�
W�-��uO��#x4wDF��{G���(������g%"����$P���q���)?t�w%�3E��$1�=�4J����=HMDV�e�s&�h9$�d��X�{Gw����?�[��b�y����g�<����K��!b%��t^��L��q@� S�a���
������]JTn��������qr��P2����3����g"������8.u�A�!!|fQ���g7����$Yf������ 8�J�Z��n�Y�Mv5'`��o�(�"��7�i4+mA�Y�&�IByo(7�|&"�^��g/����E��U�3n�a���W�^I��j�;��X�������cR�q9eV����f4dk�t�;�����,VS����_G����V����&q5�7W4���Q��_o<�����
��w�}��R�-d��\�~�9�����O}�~���~$S�LDfeW�$p���,n���?V-��Q&�m�������@�f&��p����&�����C%�b�J&Y���i���N"z74���>�\����YFb��3��*x1k7ll������u��x�_�C�?,��%y���lH�����������m��5���$Q�|v7��.!������H�����L�U������o0qv���\Yu�������[�`
�~,!�b�'hY�m�O�zkGE�����V�Xi=������K��G��"����Y=CW����;6k8O&n�����3����+^9j��LTn��!9���`��-��D�~���:M��P���+�i�.�
������a)5I>��MO�6�l��;�,�Oo�+���Hb���t8���i�Tv��^�a>���kmS���R��"=���@�E���0#�qF��&`�����+�����W�E����vs|�nG��Mvw�A�iR>�_
�
Id�'������\P���Ia���*���'!)+��~���}�c��)���Lm�/�$������^�C��- Dt�x�e]�^g�-�w/���e�c���k���0;����j�f��������2��kk������"���\+�C9��KJ����aEzhps�lc.�	�\�;�!��:���	~:��+*(�-���������l�n:*^�|H��
�k��D�l����}p�O���i!"��Dp�8�Ty!8�?�+�'��v0-H���e����9�O�a�U����&�z�0�z2�D�o����hT}��h����Qm<���*�|�[;��!80K����*�*� �sxtE������%�.�W�A��W$��-Ej����G���vKD�2�}O��a����\6����s������-/yF`������J�|���9m�� ��X ���6��F�4Q'PQ)8�������	����5��m����-&{���b���q��c�M9:!���C8�.���{�	����i`��������y�������y����(�*�Mz��<]��n�^Q����4�V��2=W���qf��sE���J�q>��x�G�H�i���+�u�@��.(k�<�'��ecZ��/�4eY��X��Zi��*��+����i�:��0#�$�F�(�U����{�V�Wn�������;O</�������1q��$yX���= *�4�?,H��^��M�@E%a��$&���BT~���w1������a	8�4��4�4����(���6��>�����qD���a;���e�O��,��D�qN��S��2����M�f�f��-��*��j���JX�d.���hs|6���8�L
<������}�	P_�������z-l2�dfN�B�lU��S��yJ�V��/�����
B]�	���)��������M��&�R���I�$ �G�;��=M��v�TU&�.@o
:�IVM�X��f�V$��]S�5i&7�jd��~W�"�b�=�E2�R�\����M��27-��r�}v$��g@�����gF�K���q{���iA�k�K����|q&~<�Q#�C##*��3��X�kno��OV,�)���M�_�]�_��P�/�J�/��{�����E&�/���������I��������*�&jN����^{A��|���t���iO����|������6����~j�m�X{�}G;��zFEs��#{�#����N����
�4�����^�w:d/�leG�!���LD�g�e3�������w�7T��������& fV�OS�����������n7��O�d����,�`�7���������$;�X]aC{J�j����I�XAL�f"��3���5O���g��w.������}M�7�J������L���X{���o��y����>��Tf�ZHQPmM��/������A�H�=��N?�cGA
�\��
�i���t�����Cf��n��c�g�a>����H3[��
��@DdP	 ����<�>S`�e&!f�-H0,�����
<���	�RR	�1�0��
��sfj$����{R4�h��WOpH;xj|�iG������4��"�3�-������4e3��EE9�V���*���' ��~v��X�t����l�����@6��pZ�Dg��o��;	8���st������x~���?IDe:�?G������J"��
2�^J%���BS��5k5i&��/��%,�3��f%"�t��ep���C�(�"�����V��6��;�����7�=(%MC_�7�TH[E$�cm��ZZ��rmH@3�@���8��$����9M�����G*�n�Ap�&�7�����N*�MSc����aY���&rZ��);����m�~���:�/I��N��7��b;�����.�Gy�z���.�G���	d�����������*�!���������'���d_Ewgm.���/�q��tm�:��K+	����������Q$��F�p���v.��.�@D>�F�q!��MV$��Q	H|����tg�����
m}�+16��D���R�*��[��Z�j/����,��J��Q�4/��H����&���W@��I,�x��jV��FDf�Ay�����#@V��3P	2��#��J*2�����"������������
w�~G]+�{G���v,h����s����X���Z��l?�����!�J�t��	�	ML�nH�c�	d���3�	����L0\I��p�/�"?�Cw7$aL���G����;|���n��H�f,�0�g�?����&0@��D���#�V"��e��m�������������.���������l�6��|���3q=m���t{&��cy��O:�������#��[�LT�D���6��
�������=n���P8��|b����rp*.�T��f���
	�v��xq�e"_������+��T��%E��h
����4�T��k��p�
u%"�&"1y���5]0�&�j�����2�������QQ��S���+^�9xPm�l�&��O����eo�3o�9BW��Y�j�o�W}���i=����j5U���K7a��wp��4_����t�
�z��~6"2�JJaL�k����^�*������
d?,;��XTY��M�����
K�Lj��xD�:�j�0�II��K��t�GLs�����~�P�5�9!��+��q�<'7+��lH���~z!cs�v>D%�2�e�>1fK�7��f�.eBMv$U}�-4�����A\���[�!���X#��(ec\W�s������>�46��*��t����G����"lmb�Td�E����:��������*v�A��
��
�W]�# ����u�����H����Yrn������R��z���b��o6,��V�k��=�
I��mC���E��y��>�h�|E����0�j�R�k�k�o�������D��o���������:(�^��F|�M�Z�w4��56����A�S���.���;�UPA��\�M����n$Q�kMK�����2@c���,�4��V�a��z�,����7r�d	�z���M�cb�t&j�TiQ�W�|&�!�B���,���'��B�%�ji{��}�������;+'o&�]I��i��y���CD%X?O��ua��a����0��>�BJ��c%^6	BM�Si��-�����A���6�Q.zz���+�8�K�����������1�J��R'�
7�0���WZTq��l%���L��&r�6�����1��,�Z���E�M3A-�.k�w��2�y��f���`|����l��U�|���������n�D���DKD�;J�#F�dT�V�!�,%[<N���������a������+d���1��D�M��q�Z�c*Bt"<^Y�f���;�{EN���<�����R�.��[�E��`�@aqZ����A��	{A��H
��G��O
�ki*T���7!|�f�cJhR�~r3��J��S��	�[Hjh�
AW���	4���& ���-����5J��I>��u�������������C�H@E�]v���e$7�V����<�c�i��nKW�
�~_d�SeV�� ��&��C���W��� �eC���&o�2�����QY�����SJ�7�t��g7mI+�d��mT,�/VUL����r��3��.hP���(���DFB���7�3^�
�`�M�����YA�U�2L���oo�{9���:���$9�;��b~����-9Q�N���w:���,�:D��$�����BR�sG����'�{i����L���%gD�����cy_&��m\b�8�?�a:���hY���6����J�uQ��b����#*�M������F��It�7=��X���	t����4W��R��xsWL�������
�~��d��fO��\f��U�����_3��C
������t�����=�5�%OU���@��*��&\�W�2{�D�W��b�2�)���'CJ�����>�����-���_{>��s7r_�=���yfP�Y����@�(
����$�77����v����Q>���a]���
	�#)gV|R����,\m$�������������5�t�l�����Q�o�c(��XR��Ye��F�+�bjv`�#�L���I����{
{s\x�pkV7g}����U�c*HT��!'Z`�+Hm�,������79b)��6���/r����\JU���O�=��f����nOz�'*�W�nm4��=O6�]�`��%@�������
�8�H���{�!�����MC3��hjQ�t��E���4j�9�$Q��uz.���g2�3?�����l��F@������)����H�M����<�sR���<��\TCT�%.����A��n��+���L@�s�Xi6��M�$r2Q��&������uQ���;PA�8I&��o5��3�R�6[�"���UNR4[M���x~�Y���@����8hCZ>4�H8�<����s�3�Hup`[�����
(U��q������������^oT9�x����^�p����+�=�
[M���.����*\tX/�k��I�6v��A�]��J�������]�+� ��Fk��[�I*
B��[�<�n�9���SM�p��BcJM]4v1-
i�5nw
&&R�yALWu�M������O��sW�?z��MS����H�7"2�`���1��\����d�N�~���d�)�5��$ww�&4����C&��������=xp�b!OU����EyXM��+��\���r��t�����=�}o�Uj����
o��an<��F�>`S\f��b�E; �c����g"���@��{?U�!9���e���f�8aM{�>��L"���e:�i/�,�����`���`�!��hy��Lz��<���W$*���A���M;��	`Q��Z*�;��&�@M�����!���@�Qot�3������?������G&���jI�[�B)��l���a����\�����&�����d"�����y��fu/�K2*��lHe�``��b+���������{�f�0����l�Xr�������]_n(�����!R59�����t2�L�P-��.�3%*����g�sTl�7�
���]����*����p��$g��l���d��������Q����u�c?M3|�lB
�H�p����U_��v�7�[����]��7�,`O1����R%��X��i����79k�;>;������)�X��)��tX��e��VU��R�O�>���y���
�������iuW"���D�d6�p^��LD��\�4����`����&X�����Q&*wY���dG<�/���*�C4��H>��eN���}v��N� X4��^f%"?�����yF�����F�O�X��aO�a��~m��D��;l�Q��B��3Dr�����B�W��@��PB;�u��~-����Q��U`����q�MQZ��R`J���D7��h?N���6/��
���s?���b���s�N8�w{~S�����FlZ�(@������D�J���j:�2�C��L4��:6��Z��7�$�eg�xu�j��:tH��-��&bx��'�4������
����h�BN�~^v�4�k���bADG�o���i
vC���:�H�E��V�X���9-�&���������Z�� KVk�&���`��&����im�KU �4���/�W����*�#�����6�h��BfMNZwr����m�;�`SN�/�F�����t@�Pp�����G�+�
1;97����kL&U����~�5K�l��_	�	�����Ut��;��h����+	i1K�Jf�T��f�h}��mH����l����;|����W�	�����2pW�}K5k&"��I�D�m����d&Z�A��=����,��/1w�TF�����r�p�BKg56`������+�ip���[a�]H�4
����n9����;�~���<������F�\_8m��z;;4�lg'���a�:�Z}jsF�i�u��{���L�P6��3O��_����h�,�o<��� W+���M��eA%��jj�@��D�����6R��D�]@����'O;gu�@%Qz�!H�9,,�;��ag�k���be���\�����-�L�c7��bhxt�-H[��b�����x�}�P���NT�m�4ye,�;��J|����l�	����+iS�n��]H���5�;S?;J��9]����Y�7Uq�h������F:���i=�_�3f-��'eF�oC%�G�<R�}v�O�����'e4�a��c�������*�iZSe��4��z���P�xh� ��%�z�7B�{ <�Zp����&��B�
��1���4�W`���(Fb�0��2��eC�|N���v>���q�0�Z��k%z���y�#�C��DkL����G�G��+	�6������,���P�#A��R�����U��:e2�����h�6���������f_�E�!�������>q��feB�J�����V�y������\V���+XbF�w@�c/��f�q)��G�3��O����g��/��Yd�dMY���R�I�������EVd����D�[���S"�H�Yo�2"�5#��_,#r��?���?������������_J=�����)y�k������������:�|�j�����/9~!�C���c�~Z:i��|���s�/�����X:�;_�P.;�8���I�&6"2�C2QWN�s
����� �I��O�r�����M"k��[��QK�V�9��Z�_�QK�����r��G������PN�Q,u��7��Q$j�D�����*.D>�Z���f��i�|������7�`������@����$�|l�3'=����=��V��ru�DdL�;�Z�U���2|�j
���	2*_�)���c�nd��7�)�����a�#QYOC��\��~7�P�yp��U�������	`��i-�lRo�j*A��������"c�d!L�t����l�����S$ZV|f�K;(�j�=B�u�yN���e+*���"S����T����-�9M"3�<������K��&�3mK��+p�c�!��U,
i?h�hG{�y�O1�D5��v�o6�+�,��x��B.��{XohK;������ll�4��0�tS�"��������7Y�����S:�0���P1E������uj%I��q�g� ��&�Y�����!-nM�0WZM���cy�s7���nB{5�u��ke
�����fEB�z�'?4��-������R��-f�7
�V��d������x~����:�����+���(���!���nH_�XrC�ZC:#*�=�tX_�tAI_iI��o6���K�E�x�����Y�\N����iN�;�f�<���$7$V�d�Q�lU$����j�O���������ig<-�M�9F��.�a]PfXy�L6��v5'�wk�fZ�$![������a]��fU6��e2���SE5����e��	
F�YQ������:��M�{����fJ�>��n���$���5��R��s��u.f[g���=;�G@&u!7��'���H����,�l5�{���;]���w�o���;]����v�+-��UZ���@�%�:���{�F�7s��#�����qe�� ���j���e��b�Y���,�LJ�Pf��5�"g��X����g%I�i�}PC�������6\@������+�$��������'�MD��R�(�$�}%%�e��9Ni�O�uZ	��Z���(Vm�	�hB�2����q3��L@73�
����-��
w.�L�x��g.S���7!��;���I�|�a��8����r.�Hu�����}T��g]��y�R��a��dz�	 �*m���E#�F���{%�E�P$�(�.dC�D0=��~eE"�4�c]���f!vZ�*@��h�z�_S���-gC��.c~��G�/DS��$bQ/
R��LHS�vv�L>��ts�O�X�T�&�X,�-���?$%P���k=#0�bO����+�������WR52����l�uT�Js��	qw.�����]�L4��G��
�/��P+�h������R��UW�ns]V�@�/����bdEQ�*�ZH�
%�Z�t5�e�Tno����<�e���\�e
�y�U�,o������6�����������`�4i�$K��+N���tk��y-bhif����w!��9����r��dJ��"��	�.�a���!}�N��n�D�xMD_<�������3	�Mb����fEz���A���E]��
���;xbXr,�h�;�jH�$���*�8��i��o�������|��7�I7p��N6�����	�e�����BT�F5�-�uO�v�7��#�Jfx���H%��_��4�n�6TJ�Z��A�{�E�+���5]�k?�LU3A:;�C
�<��g�i������W���,Jt�0<I�����qy��� .H��<�%�{�E�����'Z"��APs�����f���'���D �]���:pj�^�a#$���&[�������~�1W�E��rXN�)�n�Zq���Ih����,����?�R�6������\��+�E�ZK���+�3f��i���e�%��{�Q��
F�wFR����x�/��&o9����!�SS$g�Z��,���O��hkt����^��kf����:������d��!����IV=]D���p���yW��>��\����R<�n7���#���
�cV�����L����L��L��pW�o�Z&�Z�����A��&��b*�X$@�@���u_c���s��LD����xG�&4����!f������G��D��1*:�U29B�M���s�Ve�)�.`�C��oH�l�����[o{��xB��W�8H�E�-6�?��7)3��#�Cz��De[��v���]�$&�k����hd��oOv�������Qd����5u���M.B�����jC��	G�������cN��,�	�8�h%�lyjp�3T����M�;M s{8�'��Is���l�7� ���� e�"�e�~@�m�Ns����*,��o����PXc�!$��u3U�x�q�����������Q�`�8q����D��C�@{���b���g�����1aI���k8y�\.��&(zZ*��C�����	"("���YS~-(��	��4u��=:���g��yod����������8��lF�e�ml(��l_������(\��/�Zh��u����2�:2���[_`[0\�1gt�D�|8�F�>�?���Wi��;��n�`�����D���b���S�2~2#���
J�D���Dx|�lX�\	ez/S�Qy�D���U�������������V�H�E<E�Uz��\��v&Z��\pC�@o"�P�������?�����h�Y����>�u�4wDZ*3qI�FET���6��v�M<�ZB���c����N��-]cZ8�������������Nf���3�]n��g��"��5
��<�-?�Yyc�:*�[|��.H�.�St@�g%a�z����|u����|�Y%0�9THl���#�
	�0>jn�j;�t����z��+��8%EQ�xj�������E�(G#��Y ������a6��2�Yy*m&S6�.���M?$�*���b���U�ZeR0]�z�[�	�O��i��.N�sK�����z��;��(�m��v��f��I6?�hNu�>�;_V�"|aV������m�o����B�m�P��
���.���)8[�;�t�?��f]���H��<���=���H�t��_�c{�`k
+���9E�'������I�o�*��x� >��
�c���Y��{tb�3aW2e�'���!�g�sz.����?L��m���+�����L��I��\~���������~]�&�������y���\�:��R�\L=�D����c���k���-9x�\�y���"�����8��R�\
�k�#�$�P��%!�})��o����sKB��R������c�375d)����]�����1��M=�b�{����c&���S���C����C��k�G��X�W���T�%��K�w-�B�Xb~�K@�%��K@�%���J��Y��,?��s������;�h}����c�����=�f	9*����X�f�42?E*/q�����5~�_���*���h�VGp�1�����f6h��
y�%���
,a�F'���y�%�V�F���#��
y�%l���E(q������8��R��J�M}�����$��D�J��6��1#���6�A�%�V�����H6B�s�����Z�t�l��sl���k��sk���z5���95����4����4���y4���94����3����3���y3��_����|���\���<�������������7���������n��=������'�%�1��8�7��������s��Z���7��e�%�1^���D}��!\��m�n���nKtc�D~��^-�R�g�o����m������<V���{��Aw{xx?��	$?m�g��n\�YH��b�1]�ut����
�Lf�`��$`���@R��#��J��G�
�|Gr1����F�4!��_:����ZI��Q�Oyx�"���p����kjb��=4��<��,���m(�
5D���bD c15oS�l�E?��y��}<�>���p���q��"��
9Pl���n;{IcT���7=MH�|}(�N����V�2�S@e$��������/fgd�0�����Hg��c�P���&��I��.��83b|s��n��q|�����!(���aw��vv��&_h?9-���I�o��
4el)$*��f��H���y���H�s!��^��^�t���c5�to�}D�Y�n��J�
�I�+R���W�3�LF������rY�QFS7e��w��G��4�����%�2��eA	<
�����K�ZM���9����7�nh�����$����!X���P�����w+���=Z��=D�p�3�)8��`�S�u���i�7�r����SB��H���<C�,7�����F��4\d��/�\��'���;�(��`�������4�y���U�I?MF���$���7���5��|fG%�Q,�X���l�v"���>�31�4^�\#���w=���,'%���HK-�9�q���F�n�6�1N�������O
m>����������6��edp��b����G���h@�;�86w����_��Y���Gor��GcAY�
3;��5$�V�#�G�\�f�,�0Fs�����[�4���o�W�9A��K��yI %�f�3�I7.�m�����T��$�`(�|*���uQq&=��U�K�0x�87�r�����$�����^6��\�)��o�?4d���<�H��2���;�j�"1oV�'���D�Y(������N(��li������""1�����i��6s����|3���x�C�	�FwJ�D��x��g2c�4KT��?������;�!Q���`\�b'w����h��S�);��*G�>�����u�8�N}�F��8��<�_H���_��2 ���N�9:v�q��0��c�_"v��k�UB��@c���o��.�I�wG����}E������`����(aC G�Y+'V��b�#|>�=9��;�� *;W��2|v$���e�_�|2:t��o�Bd���r�Z�L��	�@6@��6����NO��V��v��k��e��+������������Y�!�A�d���W;�O���(�iiX(T;/[�|vd�*A��L�{����
�R�����m,��nkNt$�r^@f��+�l>����1�fj������2���P������|v$^�12���7�6�#��*L��9�$���bg�i�I@zq�8{���s���c,��+`���G�|cA�����|vd�,���nY$��3����\}��=3d�R�2��r���r�U�����6�H��N�V��l�
\���y������0 H����b�O�?�8��VM�E(��u��,�=_�W(`�^����h��4�� W�������I�II��Sl�yu���n����<:c�����l�sP���Xh�e��D1�M1�bc^,����q[�����s������*J`0N8}�i�nF�"A���4&p���~X��Nh�_�m��0����e�u�5����*R�xhK���U��buN'��C�f���M�2�.6�S��%���"1�o��KU��g�������#q�����9�X�
�zl��?52���#�V-������k��9h�1GZZ+38W�I	J* _���L��,H�b/d3*7��kz�t��{t�m�j��C_e���(��IDWm� !F��H��g2��{GR�����t]�E8s3Y�������)�$�`c���������D/,��5
[��j�/KX
>�[����������6$o��L�X>���\<��a%:�@����9��4��1�[��l�B{i�{	)0�����U��F��5�xBb>>�r���T_���
��[��;��� ,��Wt��yXJ���B��F�u�F�t��3���:�%���f)���	|Z���@�A��K������PW�T�6v,u�dK���pZ��<w�*�$� �=F%�]Y�~�iK����!*���z����G����n�GU��V��q��+��)�8��"Y�'��lf9x]j�S�.�6-W$R`)�A�m�eyl�~E��1��f��
�x#}bm7�_
;������,ND#U�����D �&��WA����{$�uUt2=5����Zp��k~r�
��������O��$6�^��4���<�L?�$*��5F
��������������["�����VD�(/����~g��"��Fd$]�M���i?�Dj�R��9.�6x�,`��H��`g�Y������|Y�\/~7	#`+��3-��oK���ZV4e��#w��������U��1&OlJ�V�T�^����M���\��"Y`�?�~	������_�~���F�����I_Q4���8Z���>����17��d�74&����F�����[f��&VC�Y���=A�>��0�*���4��&�q[��0�r�s�	��Hj��3(�
���}�(1#��)�#�t�O����l,j���"���F�� �C�	����/d�l�m�!:��/d6�
��S�M��Y��|`�<t�-����^.n�E���j�7$�x�i�Z�EY���=�e_���L�5PS���m��l��=���gc�S@'Jm��
^�5�q����bL��,����)T0�N���)�f��9���/(�+����b�W5���C�b��s�����&0OjN����eg	4yMv���74?�f��+U��|v4���m-�( �_���`'���*��'5�%��t&��rY�lL8kf.<��c��2_�//n��G�����23I��V��5lHT�Mr
:�^<:(�G�)!��"4��q���I.�d���,������T	�~��9
���������
b�l��x��<�F��X��A�h��pA���"�
�o����E�#�q'p[�6����OeD�����m����U}����C�K
����{�]*�����<����|v4Mj�j�x��C�:�o�����Od� �{#I~�m��������v���oh6�~���u�����|�yt���Tuo��<�'���^s"z�"��{X�XP��q��T��_���2t��tom��f�t�b[�t��"�E$���a��^@���I����vtslS'����f����b	+��!�����\�_tu�x��J��=����u���\�8kQYw����'^��Rx��Dik�_=����C����7~�������'�c,��u$3���o����7���z~C����7�2��p�������K�����i����q�Z-��M`q=����)��9a��N�#���g����P
� X�x�o��#�K�GO:���w ��m`���������*#G�����L0_��7�6�5�y�_���3�!N]�'Y��A�� �J�����f)!��:T�6=�.�+����6���WV4���D����% ����WV4A��|��iNl���)s�q�.�)f+��}y2[�����Dd���:��le!R9S.�=MV�iX��9��^������7�h�Q�w
�����2��w+����L��4��W��L,^����&0�&��;\����k�C�dX��G����w+�`��B���G��[Q����A��D>�8���'����Lb*��^��3	L�&C�?{����l��`�_Z���)��Q/	e�&��cx��w�y�|�j#���	�����h�3%9�$�n����U�����.,5���&�I�uF�"xE<����2k�o�5�7+�]P�� ��#F���<��0��e��w� ���e������gS���
��>V��)3$��k�dMTO�s���D�� ������e����������\���s�����{Y�v��Cxfp0w�CNks�0�<����]+w����!�$��=�Rd\p���B������m������	�,^}��<P�.2X���f�56V�Vc�^�1��~���"�{D�V��]���X ���1H���Q��>��F0�DFOtE|�G�T�]mg��M��5��O������6WX���,��������n���4k/����S{�	`���������������v:����e���y������b�_u����g#�E�uG���)��b���o(�X�edn������6'hBl�
��� ����A���
��A���zIl(�������:V+���O����E������Ov�[�M�C|�T�&���o��]1�.�g5��6Q_P���9z*��G�pg?�2��Q+�?W������^�"��	x�Cw���N
Vb1o#�~1��������j����	�qE��VM/���(�R�hu!�X(2d1���v�G����`@E�!_�5T]�}�fm�ft����FF����P���f#��,��bN��8Q�q+���Q7M,�~��5<�1f���P/���ze�a��MC�S�~C�Co�h��,t>�����O�v�	�e�v3��
�������1-a�[#��t�����>�J.���k�+�Nd?�TC#�~�������r3��(�zE��T�eht63���6������n���@�����:z��a>L��v�p��~�p,��i���_N�mr��?��">�?;���8���B^�
���=="�h[k�c��K,�u��4�=59��_Mo�$$���R^kU�KL���w��������H���$�}��O�|v&��\g�����+� ����CggB,8hDO����:�u��t�D�W�sU0���:��`��	Q/N�DC��0��O|e�&���?;9t#��6Z��*�{H"��S�
E �%�C�e�[��d`l��<.
�D�1VR�W����a�#�wFt!zQ��Q|��u�����3����\���v���� �.���1�����;b^��;�lG�����`�w�%��,n�Ub�bZ��T��;������(<�n}���6�Qk��qN�pVx#`��0D��������U�14��Ih��(aMi�����v��'g8bcB.
cU�����j�3��]~BB�CmA��t�~H8"{����$���Y��������4}	������&q�^�ou{��Zm{�.��,,�	y�[�8hg�8��=E�
>�KV*��-�U����~��&E�o�yqYF�_'o�.�������K7��2Z�����z��y�#�
��|w�N�F�{��!#���>�$a�8!�k�����k��jC7�T	Q�M��[
�,8��2C?�P%���]���f���sF�b�x�
AF���&d���iK�������bS�[�n�^j��i+���uR�8	=��E W���?B�����BU_sV��2�������~�3!�/����,z]�|oa�M�}�==�������n�k�41!�}�XoD[�p;�-p�����i��1�r�1c2s{�t����r��0gT��(/��1&�`����6�4���kN��"�������UX��$�q��t��-C�9�<|�����:�"�	�?���|&A�����
BJ�3RAfH�iQ�	%�k?��
����Q���.(�����!(�?��>7N@3����TH�<E�iljA%�5�5��%�;D@%������H�R+��B����$=���3���0�}��u��a*�Q?v���!���3"�������Z��CTz@�>����ie X�h��j�9@�f�>�	s��Q2�X�!�����'�$�G��H���FG� r<��(=���/����Q4E��V:h�
�-�C|��n���>�����e�j<�fC����5���v��amm�^��|o�|�,������/�K���������ggH�8�� �h�LD��.0?3������	lKY��w�v�iR	G{���aO� XA( UMWt7��l��������t7v��2* X@�+;��d�=����#�pu���H����C&&�\d�����.0t0��[w����R�D6���$�_�.�����_<M��`�\�xyW3���1�L��p�����}����^��;�#{q���PM����xu���[���:�5]q�vx+��H��c�����)����D@��W������ /����A�[R�ES_�:��,��������y�q���|�:(�����q��Wr"��A������I�Ee���-H�G�0�/��Fc9�6�5I�#wP��#z�{��>:�y���P��C���{��>;������Q~w�gm(�{R�>�b\�Cu�t����0�U�;�
����>^$gs���@���������p��K�e��c��e?�'I��k�������LY2B�������	���g����R)�����f#�b]l'@��������gGvQ�+��^����/L���$�N�H�w�	���M�.����T1h��(H�|�>e��b�!�o����6���i+��0X��7c��1�(����J������"�������XW���U�MQ��C��jX!�iK�=�am�j\	R������JzqUc��6�*�3����\�Y`Yc�����
�)�/���]��G$m2�~D;���m2���2o�>�X�_��}�sQ�7M}�"8�r�#�w�<�!�0�!o���dBa�cq�#c���=�|���S]Jq�gul>���2��������6�3e6��yFU�+� �g>b��M�����w�`?`�Q�9t5�����G,��=bos
�
r�2��D>���	�O�0�IO9�	C �=��s�#�q��2�
a�y`,�h���U��8�9���|�#5�|�y��u���|�3�^�Nh�vi�c����]�a[}V�y�������x�!����[O�C����[18"�������6F+�O�Rg8����V�88�Yu�/��|���%�j�����y�^,�f��|��Du�s�i�3����jI����V5(H�HV�&j��Dk�f�W����	z��% ��%(JRL�w�L��������~=XQ�PC�&�}G��b���^�E'z9����gG��n����n4l�Aj��q��t�s�c��w=��lAp����`{ �^D�,T����KZT����zJ����N�"r��H,������������!$<����u
z�
H��E�c*�����1�_������������Z����d0#:T����$���v��]�>\����,�T��!$>���AZ�c%M��l'4��jr���&�� ����p��J��;���5�~a���$���t��n	t&��>Fv7[N�X�3�6z��������	a2��hf[���w��c���C�Q��,x�?l
�Y0��&�b��m����%;CMy�S�C
_5Weh5�+kq�4�3�.G����l�F��3u���~1w!�f�[X��������N�Fw�I�/�c�����t�i�������"Q�|���d����������P���Z2�A���/�����d����j���y��f)X��
_�Yf#�2/,���6S��C��h_��V�a^ GD#'�&n�)�ct�����k�:������R��j�4/(5����.�0���P�����;!�q0�`�0��zj_�_|��	�}5��f�$�=:��07���0�����d�n���;��u���V��&)��ya�i���)F�a^ZF
����Xfo�Pa�H�c��`�2�8�-������g$�0�[�8S��b�W�{�m�O:vn��ZM���=���=�<�z����l���lH��Y4za>LD����
�wJ9��i��sd`1sE;%�7��ND���=^Nf�����A�0$��d&C-�����()�>;��`Y�m7ji*k���VT��q����r��TN�����/���9�������q�:�������c���L��kUh�7�zap���{��!��sd`*�(�tb����Jg"�����=��5�g���~./�0���J=d�UR����V���IX�H5�3����x��>[U�RwF`����6�J����Z��)uz���8_�,�G��(s��!ObJ��/s�]y�I�J���9�����g��y�������kj�����,M	?��|�`T��+,��&��^�(?�seB������#2����m�{�d�9C�9'p�E���?Ez"�t���reQE�~���Qp�����QrJWqy���2��g���AN�w`���/�����C]F����8�jn]t[�����Z�H���<����;���sB���p%x��5��h��/��+����	lj���_2�YF��Z��-���/����L�u���N�s��6��0u�y#��G=Fk����|�	�A��u�#��DQ�o�Wd5ON�w��4��
��_l���>3���"'��l�,x����t��s}��nn}|�����N$��<-�{g����9f*�����,�n��{8�.3�wF����+x��~%�.����gDW��_���[f�R������I��2�G�Qr�%�d���)�8��{g�S!U�]]�����3(���sb�p��G�MJ��P�����.{���5��'���{g�]2��PSc��~����^wK5��5<Pp��D�������@'�6D����+�W3
�I�d��e'�	g�u�0�V�|��������h����!NM0;t?z���z������5����Xk>X��)��^�����i�}�O"a��~V������U�5���LI	4�� �;H��Sce�������b���16����$�6�$���|>{����D$@]w{�qnKG����E]]�Csw��V
z;����b2�a{lV&D2x"�(����=ueB�|���bX������d���7����Sm��v��Y�9Pr���=���w�W  �@�B��!%h-��x���ifo�D���0�}�,t�,��$��H:���)'s�~6���P���m�����,��k��|9�B�cSM��3 ��V����F���q�we�\����hc}~aJ���0�<��]�OBO��C/�(I�}(Tu�~�����4�����e���WYY���w�����-\����y���k�~(�����Ls���[������>�/������/����?y�	���m����<`��.�0�<n��Ye�gA�&��V0n��}NK���)�����g��m*���vq�,LB#�,��s�����	�V?t���Q�����f���`]��A�h]##h]�p,����S���yj�"�W���I(&�P;����b	�c�v�Tr*Qk.!r,q��LB	����VK�,�g�t�^?��$�w>����������)��|��=��������������w-1����n���x��*���I-h�`��������X�'����W��u����,u�CU~�:�����W���r��I{3���g����?���G���uv���s���/��������B?������)�~�_���g|}�)��>������?�??���������%��2����t'8sQ4�X�w4�D(B���	���d��I��I
�2������@x)��b?�����v8�����?���]"s�����!_�o�.�
�e~�h\rl�]6��a
K�#�@30xB��2h�h�S/�����V:/^��q��D�J��O��
�����Y)!"7����������9�f8KEu��$��'�����7��p|�&���'��Mq�������~3mcd���7jz#�����>;�@�]2=W�������I��Xd����QU��h+�i�fr����XG����LY�1p�z6XZ�D�j����V����%��~��D���|��X��An�A��-���F+��h�~�u�3�Bj��)i[vS�������M�~��[�8"�7 ���$Kz�Vy&�G�����x����r0.$�b�G�,|i���g{t�����d��&��9�	���VD������V,�^�h����XY73w�k2�q&�a��K~��&���r�
`�@��$YNJ7�&��Ic3��
C=Wmp������e���?Ih��N_�o(�����z�z����?�������"��
���0>*�
gO�z:���~p /lfV���L�%mL@[����v4�i�0|�MpP�c���Ei�2
2���q^�W��
����(O�!�[F�
=�����O��0g^�4���H;���g�+��l�"M����"r�L���S~���	��E�<���LDe!7�����z?�d�<)�W�y�4��7��x
u�$s�����z�B��<����O]?�������
T�����GY(���6@��V��3���t���+���i��+;s��}q�|���J������D����!@Z���gE"��u�\
@iG%�L��v]$_�T-��������#���@z!h9��9EQD���p�h;��!�x[����gLBPV�������w�Jl$9�Wn\H���:<����1x���m�zL�E"��E�\�����
]�E�N
hv2���8��V�9�`�|%�6�_jy���3B�~y���"��kE�0��5��@|���	j�s��s.�
�U���!��8���>������
�"�<�c�u��e�������7�	�?���F	d�m��^k���|��L�2>���M��Y�"5ii\�\�@�6 ���e#��M�S��,J��4�G=������C@O
��	��-�;�@R?�������6I�]�����

f�sum�9�i�1O?��Zp'T�X��U�P��h<L��q�d�90�"�[������M����w+p��kF����`��E"�{>d����oE�K�+	�)��R���E~2G�.K�|n>.�!<h��q9���dEXPbnl������-*[������Mx�-���G�w&YY�xt����k�>��v�������y��CCL�Yv�}���*z���EY�I�n8��?�W�lq�4mVhZ���X8#�����<��8�G�x6F�h0a��+8tG��.(��<I���ec�y�;�&�=��^��G{�^�pv�q���m��U���Q3���<t������*�`J)m1�O���z�h���";����\�}��Y�|�����]gz��������$Lx����#];X���uz�.v��:b���=D<i��
3ZK�`��s1�Q���'�,����@��x+8���9��3�"wij��>�S�2e{n���%~B_JXQ�{^�3b���o&��8�\x-�k	�}jI��8X�D�3�3$x-�J����:�	��aN����-�YnS�7�-�Q���.%�������J���	�'Z������`�4�/�ts8��{X29`�Fj*�U�@o
:�$OMzpl�i�gG0w���>P@�2����K�]Q� f3���W��=kVEz�����)6�gGT
��3���dD]Z�x�n�R�6-h�;��m�T&�8?��i��=����-h�O�Zz��)�b�2�����3bz<k�/����_�2w���~T���x5'�{$�/"���w!�=e�+�8�� ��
��ODt�~4k������4������"H���1��0b�n9b�f?e��C�m�~���x����&Y5��+�4����Ox����(m�4�9���le���<����w]q~3�v;.o����Su%:^��% ��i���I}�4��J���L��oM���e_C����7��������;�E��n������V�,�nt��"6�U�L�!�q0~����&5[��"�\,VS&p�)��5���S@u����H�%4
���l�XH�gx�K���Tfw[HPuO��/2�k����z��M?es���\�K+�e�LP;X����Cj��ne2���Y�P��Z=�l�Pu�J�Gd�H��	�y4Q������F�k��k��
M����|\L&lqHHq4�6q���v�����h���n�N�& ���m��Niy4G�����,�u~GV�V4�LW��-�� ,L�B�l�r������ww�<
���v�D�����m����\U �
F���Z@���X��w3�������>bVV|��k���W2`�!�x@����2�K���j�*V
]Q�V�h�B�/�\��s�l��u9M�2�<�u$Hq�LWSd
zh/
@:�kw����e2eJ��!���,RmM`��9�vM��j�
M�T7��w�93o��	D:�s����C�����^!�H��A�'�
����25>���b����L�>eg���������Y"��3i��6(���
	���������������� /�,�jK���q!!���6�{��-2�w�N0���|���@p�6���Y��N2�2[������:|�iI14#L��z�&������{J��"�S����M@cx��w
H|��F�
����]zA�Dz_��5��<+�fil��(K�m��Z������]�P����9;�U���O�(qd���>N`��p=T��62ev�\���_n8�d%�;�0����}��c5>+�[�_TX�S����������G�=���;��>��6���}+���&(�����uY����S#�Lo��!���`]��B��6���l���&x}Yt>��+����'o)	�������2��O�9\����g,���\ieF�����-J�j�g#S� 0���|{�s���LY��R�6}�Q����Su����!l���@R�1n���"�Tv6<���6��ng2���{p~��\�
M���;���=��`_�`��i`�Cc!S�.�1��;�W��c�e[��G�BU99�.�l"���{�V4��S'���^�|;�N%������/����M�5��K���,�D�5�o�����)w�Ld�<��������	Rl25�>e��F\
j`DE�EO��%o�b��X�U���r����"�v&���=o�9NB��i��
�eB��13� i�0���G34����0Or�8f��&/�E\�������L	Yge;L����S���"��#Z�'|����uW6.�,�����*�8l������[]��Z~O�1,�_�)�~����Q����G�*���������e���p�����iV0e�������D�����	
)25��X�G����Dx\����79���V����X��PwO��L�
�8�qcBL���#iu��X��"�d�[��"5�\V���pX���SJ�9���%!���VR��O�#{�y�o,�G�c
��g�������2Af�����i������]���J�K=��<�*2<g�����9�&�:����r�	��.��#�B�L�3Z]������������ikc'���gR���n���1<��G9������!7��2���7g�S�W�;5�[�����w<8�������j�����zr(��8:�E�VT��Bf���hDM�c7�����nR��a�%�P����z,���������2�P�������7�����Ee)�_u��r�o��L��E�[S��(DQpi�2Ti�?���e�}	�+*��<�Mn����}5#����AQCRm�5ZD������xk�g��C�*��7'
;�O��������F�IL��fox6��A�p!?�x����|�x�J��uX,�]�6
\�����j�S-<��������*T�G_7�����"��;��
���H����T�7`���~�����A{^���&BF0��� ~���8	���&@.�����&�+�q��oE�~�d�?#��y�@�I�� $���x�$�H�"��#��'#�+2�����&n�g%%��=���[�O,>;�@e�	��U�I�AfE�X�A�	$��oK�?L���"���W�@q>'?��P	��o@�`�P�:����I�^P�d��/A�P��+I�q�������(j���Vu����|
H�F�]v&/��2r���yTGz%��g��Hr�=��w%.�0��E����������t��'��|�C�|�
��r������v�9�o��s��SB�7t��C`O�$�3���ij������B���ij�T�E&D�����)#'�o���+���VT��B�����Y��U��6
������>�����F������|f��"�����:!etfn'�8��e:� �L��D��s{����Q��h��������9����j�2d���(*��OMG�ef�Z@e�Dj/��]�.�]�a5���D��!�^v���[$>�c+����aA	<Y%Gol�����
��C1�gG�&R+���>M$�l���Wd��pL�GI1$���5�lCYXX��{9��$��=1G|��]��P�Y�"�d��z�.|�����^	F������r�Wl(��
b�}�ig�j=���_G����0r�LbC	\�$jP�Y�*g�yjy4�����Fn����J
�4���y��9/����<W���R�>eg���B�W�'�w�TY�	����6�+������`;�gcAQ��&�'h:�]S�[�E���m?;�����o((����P7k�6g�{A��������
�U
�A�i��'�Q�\�Q����f��){�I��p|���^�M��a�������_N&n4���E����d�����v2��8�a1�
�P��mp*�����P
�2w%�����:3tj���P��=�6LAR����W�VA�)0o��*�|�
E��������#n�V0�m�\;S|8��������,Xw�$�5ot���?����d�2���fA�=q�@	�d��
%��k�}�e�)F�C�x����>�[
O��+����Wit�[�
��;}Z;�>Pv��w;h4��,H����Yj����H��������AZ��}�(4�W�S��,�k�����1���|���d8G'��_��!�o�j��wq$U����va���$�������.�����8�^��zE����i��,B�7�P������"�P���������!9���4�.�hbZ���k<smY01t����,�M`���k&2]�����GC�)6s�w�����|od��OO�!Z�\*�wz�����IDp1e�:�O�s����_b����S��^���Mw.j,������]���t���+��b�t�cs�
���_N��5B�_!��BP7<���!���?���M1��z��@�h�S\��<�(�4vw�3���I8%G���B����;N�������;�Tg�*FT������PgpC0C�M��'�- ��GC��^����8K?���������
_rc���T		�z���i����w�}oD��>2��p����ft@��#?Tl����B)���zL�a���Q��-*��,V�����F��8`3q�tr������J��*}���s����z8�;���R���T�y�&�����g!���K`_O���������B?9���>PLN��Fu$�	g��ba�w��.l���s���nz�M��m����O}L���������K��9Z�`k�RH���5��E"2�[����~�f��YB�H�rU���U��m�8i���4����FY�)zX�K(4BG$2�X6(���s��Ba�W���i,l����tj���C�|������/u��)�&�
��o������+��l���x���L �V2eh����@��8K�D5{�DY/�D�GEV��-�0�
�)�up����h��f_����m�K�����H��Ch�&x��0����*j���wX��"�Q�\����J��{Zp
��m�W�",�������P6��
��#�iV[h���?
��j���v����m��(��w�x<EX��i�vE	H�V�4�J�1����n������]J�"��P\N�����aA�Tp��������g��|Yq��oD���](8o]��$�o�!���z���}7���B+<:6e��a�Xs�J��:t�k\�j������z�Hc�:/�h��t��;@�*�,����egAC��9�C7]����H��w�>��aW$�-��������Z���Y���V�_I��@ZV�
I+�k�]]k4��F0qAn��g��W��8BH�}��VD MV���u���D�k�2u���_�-H����V,j��a^Q%z^V���~"�P���L�{�#�	1	;mm6����/U����~��%66��3A4A�[[�_m@�D��|���HH�YbS2�h��e���*:�MH��l���5
�=���!n��\����"0W�cKU+�)�LyE��>zV]|X�T�A�e�O"�YQ��N+:�	3�S���Py�����Y�����/��^1M����� '��D����s��`�����?/���������o�}t��H�+�M�������Ie?k��j��q���f�aX�a�:���6�L�P6��3O��_�����h`�7^S�+T�z���CFt]�����QU5
��z"}���VR��I�P:>2�:!����������kX@�o�����y�����Fpo'x���+^e��_-�n��!?��Hz��b��
�;��;�`������������b��
��g���g���~��7w�z�n����d0�&���V�� 4'+��Dl���������i�j�%S���g-�gU�tG��J�N�#Q���>;r�w<8�=��7E�A�x��1NrE��}�c����	�+u���y�Wh��}m(X<4�W���e=���=Y-8��{G�F�����w�����{�&oD>�w�A�\�l(�gzw���K��������4��|�A��d�c���^3c?�'?-�#��^��iqm$��g�-N�zY	��J,r���W�V�I�5%�����"��������3�w�����yp+�l-q�YI�w	'�8�Vm��6t��s8Rpk�_�� �/�]�������D�R�������ty$����";P$ITe
�k[����K�(�z>��Y�{o	���W=c����5������	����F6���������������������_J=����{]���iB�V]F�k�hs�$���J\-���R���D��S���%N�{mI�g�ZD�m�gG�������v��3I�S�fF���U�ld��4���N�+v^��ns1�{E�q���D���90�������j%���0��R�7�gG`������>����"$�Qai��|v4S3����b?�L�yM��t�����	�'�x����������!,{g�2��x����9e,+���T���G���&�I���V��F�<@fa�����}��#*H<�Pr6^�g��8�dE4m��4���G����8}���Df���r��>�_$>yr���#i��Q�����t^����`�DQ1&o��$��]H�����}�rens�1;�gE�Rz��s�;�IS]��Ug.eEF��E�gr��^�Y���L[�����R�,)�����]4���?!2���tAt}�bM}��F@J�����)�)Ds� I`=��� �5��e����i7?%X�G���R:���.h4|F���FS���.}6� ��j8?�J0���'QKp	-�k!%Z��(zW����g��?2�����`L�^���f14[
����������f2_���!EV���h@K��	8������ZP�iJZI���H��Z�%�����.hp#g0��r<���1io�32�
�tA�T���5m
�#B��d��5�n�����`K���m�T��[j��-uM�1]���W����E�.����[�w��	`>�\rq,��1iv��]��.D�9�,�f:�iF_��,���
�E]Q��R�e�)+
�V�fF�`W���j�w�������D
�S?#_s�mxxI���������dU�:UjTMhU]�5r&P��]����jV�'5Z�D�_tw��U87��L�w0�h����7e�������`V����i�E�W����h������P3pF���v�U*���H�fV�>�����)�����D��f2��/��Y�T� oL^OU���K�!
j&S����������ew��9*�A�X�w{j*J{�UX��G���'��a��\�����Z�|k���{��w�I��`\��N�`th~�Mp���y�sy���cc�1CQ�����s��/�cP�@��9�����a����^A+�D�/_��W:�,�@���:�=TBR�G��z�s�E��#��gQn��v2���Fo@*tN����Y����+�	U�v����4O�����d:�$�:;�E�s���C��3�
I*�k`������������������D���x���|=@��Xy�����d U:�`|7��W�\�t����8�!������5��"U�IBpv�0a��}����gc�n�P�d��n��/��G^�i��i=�&���� 9�B��
�l�i#��K���Z��L��:
�����>uP�D�����>�K&�Z�T
F����55E�[�����wn�^V@�Vs���a����]�����u��gIEZ����r[W���]�����>O&Q��Y[�L��M��%9�o�g�)|�+���g���aIn��W"�]��2!Iky�n��>]�M�q+��?'������'�Z������8�O����j�T�U&����S�3M�K��$����Ia����� �g<��Y�Y���#_��D��B�<7
�nM��t�|L[�yc����\�V��T�V$��|.���������&8��Mth���$9����Ex�F_��a���f�Z��O���T���A6��]}��6���o�l��}]�d��H�oN��|��2���?�G^�?����M/�����82�H��:��E�Y�7��B�xec�5w�1����5!;�>=�cBR��?������"i���]���dq�ea������������+���?�og3+��f�
l9O6��IB�'7����C��F2e��>>�$��~��������l�����R{�t����h��������fWK#�h7�������������s��<Z%U�}�{�������o������$1h}5�����u.�0�-�����T�FG5�\FE1���UC���t&Ic^T�
���w�P���'?v`��l�+;#��
��B$3�v%�4���5s�W4�
�3��{i,L�7]1��v����	�r�S�����h��v��#5zUa��?_J@������@�lsC�Ig
��#���k���%��Q��y����	`S���i]P��#�n5<y@�gGR?��%�+?yU�Q�������.?�Q�o	�:
����=�0U��V�rw��{�
�a�P|�6xv&���L��E��35L�f�����@
!��K3fRb}�qMN�q����1�F�����P�\�Y
���t���k�:�hZ�t����lc}gM��{6KI�`;�����=���e�e�����:�����I������	r���V3����+������\�pR���"H$t�=�DG��Uf��Wl\@x~�m�i���>������{,����[����K����
�;����|�������~+t��Z�x4���@�*�������Mp����j,;wX���}#�[���EU���I�tFog<�i��^��/�$�������+�2	"v�S�!�s��H$��E�_O�2��y�1�,�����Lrn�����"p�V\��`�>A����POU�U&<[������d�t[�T�J����q��#��qU�$y��4����Qc��
p!=���U	_>;4��0�6��.�D��]�p������*����f�Y�������$�t�����"_�����G��� �25/��Kr�����1bd�1ch��0��i��v������
�f���������1���{NFM��
h���d����\�Z{������.�)��pY�����i�|jNj/|���Xl
yp�W�������wB>�H�]Q\���5��4(B%ib��#��R>����	P@K�,�hFE���|R�K�}�2�Rw�h��`2Z��p����Y�����IL�9�wnaBt��@��VA��	y�]:��E�r�2��o"�	�q�����t>�����z�h���Wu����.KL��x�m��|����4�jr&�'���
ztc��p�/�,��������i+C�5\�lR��D�7�y�|��lm*�@!�|�q���3���7��>,���	I�_����'�P�^d���
�|\��.�f_�
���V��$9�t����U�wf��m�0u�;%�g��!!�4�����u��������(�/W��-�����;������V�{�nO<���L���l-��,���%�j�{��=SvgB��I�v�`{&���H	��t.��L�����z������oz@��":�b�����/�ca2x���z��TPg��fT-���\�l�
�ggU&|3��!��M��&�[Y&�Z��3��v����J�%m��������k#�|-��&�5
�i8�g��opg�_q�o9���Q+�����<������w�,���F��}=�����ZCKX��<�F�G{��^	�������q�����an:�]��|��������G��&��^��o�W#&,L��SA�I(i5�3�f���|B���m���u3j�0=�Y���A�JD���F����l�X�W}�.��?_;��?b����'aS!C����C{Xf�j�u��wS�������
�>����bZ�@��|S��
�QI}V�%���.1!������v�d��:�]F!7�Hg�+R"2-JW�2�'�5�%����P���Ch5������M6�Ys��p��"Bk?q0~mo�����`�Y|��z��>����bC�9��m/w�&?n�	�����Z���IV�R��{�-��r_�j_�&����qF��RZ���3,u�m�=�N�U�Fz-������^j5�[m�����$��v���������+����o-������an��A����o����G��#�������}Q�{��ek���`����������[�=�9U�_�����t�
endstream
endobj
5 0 obj
   793173
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�{����O����������w����:5k��y��������? ��]��+�0;
endstream
endobj
80 0 obj
   58
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ���8���')EJ1V��b��*���;�a��C�eT�eDx~�2s
endstream
endobj
82 0 obj
   57
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������O�������N�����s ��m P����w�����8���.W
endstream
endobj
84 0 obj
   56
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����:���T6LP�$�������4'�S������1(3�!��l-�
endstream
endobj
86 0 obj
   58
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��! @�������@&3�c$���;���=��v��B��9�}���pt�1O
endstream
endobj
88 0 obj
   56
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0����a��a0.,��m���UQ��0gw{A&��!�j���hY�i�1�
endstream
endobj
90 0 obj
   57
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �u���A**�4U�����9d�Z��tgo0��������{�b�1K
endstream
endobj
92 0 obj
   56
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�1
 ���+'q*�J���B "�yN��5�%S��Se���k-�G�1
endstream
endobj
94 0 obj
   57
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0���p
��"X:AHeD���L�kk1'�b�9T!����M���H�0
endstream
endobj
96 0 obj
   58
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �2���t�`aa�BB^S=������;�����SP�;������]/�
endstream
endobj
98 0 obj
   59
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0���@W�����PM�/���s�[�Z`��LpG����s�zT�e,0�
endstream
endobj
100 0 obj
   58
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����DT@$��d�@r�2�3�`o�"�sh�RP�V�_��;s^O/�
endstream
endobj
102 0 obj
   59
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��7a�* (D
�4M��{����^�0cNzG�s�0���������M�1'
endstream
endobj
104 0 obj
   59
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��	 ��w���� )��H�T��xpD��9�Q�����=hM��e����VX1
endstream
endobj
106 0 obj
   58
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��W� �$�N� ��=E��7�Ak�Jr��J��;sb�;���<L�0W
endstream
endobj
108 0 obj
   58
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �-2��8��rG��R�^����!"�1�U�XZc�Zq��~�r-�.�
endstream
endobj
110 0 obj
   61
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��7�B ��0F��j�������s�D��9���Y����� �n�17
endstream
endobj
112 0 obj
   58
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��� @���%�9gp�H0>g�r������3'��L��VZC��B�o)Vb0�
endstream
endobj
114 0 obj
   59
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��� @���!��``����hp{j�r�d�7s2�"�ZD@�o[C�s��p��K~1+
endstream
endobj
116 0 obj
   59
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ��w
`�"8B
+	���{���1P%�Zs�f-�E�sZ#=�Q
e�1�
endstream
endobj
118 0 obj
   58
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0D��7�r�`!�C,��W|��I7U�!B�������{������XF0�
endstream
endobj
120 0 obj
   55
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��!
 @���4F���0,,1_��3����U��1'�C�d~fc��kA)2�/G
endstream
endobj
122 0 obj
   58
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������_�@���O����r��� ���������g��l���� �X����u�l�0�
endstream
endobj
124 0 obj
   59
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��!
 @��_j,��� ��KC���x�A&������C��Q�Z�7"�9?_Z0�
endstream
endobj
126 0 obj
   57
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ��W�`-)�R$��Bl^�+�w�fz�VJaN"�5��s�0C5��T�1�
endstream
endobj
128 0 obj
   60
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ���'�N�gt�$��K<!�B{���_��s��`&Q�^�2Y�1xm�2
endstream
endobj
130 0 obj
   55
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
 @���*�1��34�8��7>2���1ao��T����Z�����[�1
endstream
endobj
132 0 obj
   55
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��	 �2��H�� )�,R����W�;���B���{�����V�E�s �C�/�
endstream
endobj
134 0 obj
   61
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������W�������/��?t���o���|������W�l����d�X����]�0�
endstream
endobj
136 0 obj
   60
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ����L!�	�X�"�����0'k!B)D`F��S�����1���P}�Xf0�
endstream
endobj
138 0 obj
   58
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��!
 @��_�3�d��%���`0��}oo��"h
UrfN��DH	���=�j�M�0�
endstream
endobj
140 0 obj
   60
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��� ���'#����30G��r��pgo�A����DT�T�I�{?\��^1�
endstream
endobj
142 0 obj
   56
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��������8� �0�UI��%��foD�j��T1gw�������NH0�
endstream
endobj
144 0 obj
   56
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�!
 @Q����,�,�e����O��wND������S
9���9)��?�.'
endstream
endobj
146 0 obj
   61
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �����0�b2�!�`���Ww��z���Xko0���	��UE�RxX�0�
endstream
endobj
148 0 obj
   59
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������[����������������{Pt���3g��:�����O����
 5g�B40
endstream
endobj
150 0 obj
   57
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U�Qk�0����e�e�����C����m�!��
�H���wc�c����s	���!X��NB [���D�~�5��l��$����)��Qe���G���8Xs��X(�Z�"���x��M����������6�����oMWK���7)K��3����=?2��B�j����� �=B���s+w���2:��W�DQ��;O�|v��z�eA�RF:�Q+;��4u�����*���w��q��Z~��Vi�l�<�Q�[yG?�o�Jz�e��~���h��/o�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 507
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-�[h�a���	��Fj��r��q���6F�#o������m5�����a����icjVc#6nP�W$���R����������=�����Cah(!�x��&>!��a��}>_��������na���gE1u*����B�w��bF.z���`�_\��Y0;�9e�������0�#����)�~9n,�X-5��{X����mp�B,���UXV�{n`�c���U	X=k2q	����X������x|��������x��K���>`�w�{��e�������;�b�������t����{�������u�^m��o�W8�����k������^�1���z��$3?�k��&�+�^�u�^
����\�d
F�+�^��e�#��b�A{}����J�W��6�k������*^c�{X=�^)�Zm���:i���zh���
��h�%���W���W�{��n4{��wiM��h�m/��N7�k�^�������;�^nl������wVj���1�#"�wrp�����,
endstream
endobj
startxref
833796
%%EOF
mac-mini-result-3.csvtext/csv; charset=us-asciiDownload
mac-mini-result-3.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����.����S�`�����GBB�4n�@�l������2"2���KW[k������N��v�~m������������]�W�~=��������������m_���K��?������)���~����{����:�_�W;��������?&{N���������@#q�r"P$�''��~�D��x��4�''��mJ�����D���O���Xs
��-�Q$>9������"���sMus��sJ:r�S����v���v���W�}�$�HzjJ����)�h$�GN��o$����D��8e��ymS����V��4�\9D#q�m�s��+'��g��@��O�����Sn�9����y��:���G��/S�FG�Y���_S������!��;k�{R{����O=��T��r���I(�,�m�6��>����
��S�Y��SW�����W���O���Z�
�RC�^�F������g�j��P�Y�Fjh��\#5Tm��#u���l�_Y�f����Zs]
u�5l�ns]=9���B�^���MZ�������v�iG��c��=W�>u�c��i�>f9���c��i�>f�F�c��i�>f����c��i�>f��F�c��i�>f����c��i�>f��F�c��i�>fy���1IK��IV��|L���c��<6������dd����m�o�#e(=
���b�G��}Pic`�1y�
5�C�H���s.[�K����`�G���D�s��|�9�i���x������H�s>�9�{��>��C������a������]�=8��~����y��������_w���]J��Y{��	�w>�|�����W=n�	Zm���H�o��]�����8�����O�:�_G��^���o��!�_��`��\��"
�z�������c����m����O��wI��1�z&>����������5��#�_��;��]����G�!R����?�k���R6	BR�_Ok���!�h���W�l����Xb+)�C
�L|��0Y-w��]����z�P�]$���j�u��M������=�G���1I/��|��<���k��c���%����Y��*��4I�����>0x���f��&�<	tX�]G/z�` E��h���`+]<�<��(�b�B=�NI����SA�B�!���/?6�a���X���8��o0���n�����]�G���.�������L�u@��(	���@(�����1��z�[':����O���1��g��������6m	8?����+�������<���?�[����-!���M�� %a��b��;����aVF�;�eSU+��OS��RI`h8[(�o����N�� �|�u���2	��I���D�|$�`h��]	�n-��5�T�m`����83��������X�����O��7���#�����?����D:<�ee�����<�����[F�h��*���x�6JW�>.��HP?7�D�V}'���V�]�nO@�"�{%>p�f\��>aSF�~�z�M��'Rr=`c�����,�~�VB'�T}x>~J��QS
f>����M'�V�����u}L7>�p����2����J0��:��D�]���������d�t�&���nv������e��E�pB0Rn����3��w�@G^�����Co\��e����R+	�3(�0�x�h;�2�	]_NU��T%U3��;,>����C#xl��	��������f5`:������n���m��������q��J3A[�;��A';]Go(�a���>C*��p��1�U)B*������;�����N�x�F�2���|J��
v%����4:b�����>Q
|��n�]�	��5�4��4���Ca)�D��2D���P�������a���zK��D���f�1���'<K�@K~��I����f�����F�n ���o��vh�hZ���8|W��~+b�����7�� .�6�k�$hb�����t�U��:}�����'I�vYes�F���9Ip}�v���^�EL�o�11�%j�F���=2�|�#���:���w�t2�x�}>���v�@�	tR��=n�
�Y�<{D��Y�^��(�=��1
l_ww��4������p=�z0�zlv���RQ<��zb`�[�e�����hB����Y����l<!�0�����5��;�%��7��u7��6�!���HU5�5$���Q>�L�{�^G�����=�����dfJJ��9���9�~l�n�ST�-��!��G�f�;3�cw��:?^9o��)!�����]M�j�%�K�L��;&�D���uN��X�w����dm�1/g5�0���Jz}����	����?���WG�����8�{�SM&�N4���w�>7����-3����+�L�7�FX�qw�����',#��ljN����AGdugE�dyC'{|�8aS�OM��[�����1���w�|�p�A�,��@P��S�?�|���M�����htS{��;C�@	�M�y��=��7]�@7:����dW���������n:k�����3�imL(4mp���������(j
	������Q���~3��b�h=�!vQ�36#�6�y�Qh��	[?��]g�b�T����^p8bD����������A�q=�%��~'v��4��M���lo	��c���������A��vT�4��to��xg(g�����?��<ct{�_�a8.��w�V���W��M}�L�&�
��������4q������W�9����m��,.�
���.���V����K�]FV���MC����a���}��}�u����5$���{�X��;9�D�����fa6�>���_6N���<���������5��T�Z���Dw�3��;!��}�mF������pOf�
J���}d�8Zv�
>Z�pY�*�G�|FG�~%�?� rhi��L���go�x0sp����b$h�e��Rf���������a��Oo�ag|j��6��t�s����KbqV
�u�@����(�ue/����jo����]�����O.X�N�x����P5�`���2��>7$���\�����|�u��oL�j}"]��>������e��y��%����"��3j����dq�a�b�8�O�o��i
�
|����]��F�Q�� �q����x3���9����Zq,�}P=<��Q@,���gQ!|W�����fS�2{�mV��u����f�A��Lq�!)����J����* �m��\�>Dq&�j�4g�8�N�P�5�0���k#�n��H���w��i��H��0��1Q.��+305�a���$J0��7�:���cF���1|=�V�+��������4xJm��Eg�lt����T�+c�t�	P���T�#�+��&�=�b��F���
���T�H�}r1��JY�us-���vZte�����*/_�$�]��S�?O�a;�W�5�t���T���R������]	�,��M�zhWQ�4��.���������/���f�:����j���a�^�ve��X{q�9�����vs�1M����v�����N�a��el�b��\��&�;c���B�B���t�J
���]���������6�������c[���
2����e��#X�Wr���������E7xaS#���1L�9p��p*W����o� �1L_�R=��B O{����wL%=�R�g�5�&[���f���CE��Z��~�����1%(#����OqD�|�?��F\@��H�����M��+�	��+������=J���-���|�����z�uq�������?���\p���������
xF�V�>3�Du�����)A�z��v���3�D33��i��	�\�6���u�1��
��G���=?���+*3�O���~���De�|�z��a�I��_-�����T+��Jj�~puG��GV�Y��S���!��Q��h:L��J����<j�C�l`i�N�f���h�\`=��Y�5�|f2�1j/P�h�p�����|�CZM51%I��W�H�"1�Z�����N?F�ZjY&���Xv��L��������������^� c�/Q��9dO�����<X���2������������7W�ZP��z|`cMv����}%K�L���a�GH'f<F5�����z-��1�,�t�3��p�3���lgJ����?�/�2c}���������
1"�����,��I����=���(�����	s_�`8I�����;��7W7�vYU&�����_0��r�[������A���������z�[��I�[j�G.���J�������6�D�Gq=u������}��A�R`��"b�?��cA>��V���<ZV�2��$�?=�?^V��v����T*�0�g� G��ao��"���
�����cf2���T
�n����vA��������^?�����c���X��g������\S|%-�<5����������s�GS���1����s��rD{������1��1�]�*=Sc�f6|Se�p�,���P�}�x�'b����X��Q���>��c��V�O�N��O&�&��vf%0%55g{�$�Wg������}��NW�;�&l�{)�S�!7�T�U�T�F���aB��i�U�����@jX_pOYU�R��8���>��[���������]�'��z��81>���T3�R�'���N�A�0��}����0M*����Z}p�s�K������Vg?	��@J�<<T&U�3V���CrH�,�T~��&�Oa2����8)��2R�"e���k����434�VX�	By=+*�Z	
x�)��I�fL��p+#\;�X�����}rb+�6�l����4Yqa/q#�`���� ^��#:���F�j�s���M6�G��'amd	;NL	�W�3c���������^�����Y��)Z�����1|�_n�%H��0���;����[�U��f�,5�L�b�k��[1��3��d�e������m�r�����@��!��g���K*���+���i���e�	�Bd������1�uk�!�������nW����\����v!�uR��o� ��"�3����/�Q�D������� r	�#.A��me�/�x��>�#��g���'o��p^�a+*=r��#������<��
S�+z��|r�����a+�	�]D�FWx���MLI��������G�������5=�#��v��i��^�F�{l#��BdxI�c���G"���z���D��>n6����<����U�O��<Q���c�����;������d��������0O��d�8�PS3#��L�e�����.��hp����^S,[^�O�h����&��^>b_�uyK��z�����;d�:�7� P���Z����T������6#��%���MX�i�]d����gJ����m��h@��>rU;����]������(���?�K��"���?��K��M�+o8��^�y������32%(#|��i�v�@�#;M��<M���)_���;:�x��l3p��]�
zh��`NIc8��m��^���B`�����?��29� 0S���fI���!��q:���*:��0�5i
�]�������
�	#[��0v�������-�a��7��
�{&P�=#��]�pY)������wx�oi&\�1]����]gfb@����6mS/+�J�������kevD�*�_�!��0��=;k�ht������^�����2�gh�ei��O*��GrQ�
CK,�����A��|�����D�{����y���~!��-gS�M����e�7~	6����d�@����Z�:��u�C����pv�x��a�B(����+�������/����G�8u]��6�1�G�x�MH��\�����c8pt��T���Ga�J����sUc�y��u��������?����������5����!f�BX�IJ�w���"f��
,;���%����.K�����p��R$bb�{�9�F�Y�1<6���hB0o�Ox-9f�1�[�x�j"
����&�c'
���J��a.��@\i��5�����M�5:�>Y�$	�<���Q��;�@��^��_l��(�i}p�+�/g��w��|�zT���u"5`�������9:P���z_�X6�t�I2�S�]�'b@,@�m��2�q�)NR)��XX���cG������}�a�5�i��c����Q���m�=�~�i�R���O�Tb*��S�w���a�aK��Yp?Z�d ���>��0+��)��<=v����)�pm�����a��2���-���L~zw���<7���1���Z�;k��[�\g��� �wri�]��6�O��qKG�G����8Y�u�[��C�,��d7�����I���L����7����MbT��	�\��;g�'�����+b,�~�����9	�+a��b�I�t�J��"3��I:���&S������%cT��`���� K���8;���>���������|�]����L<�5����������jd#C}Dx���t��,���bu%�����?����B��H���%��E����D	&�+L��j�������Q����&e����k	�*���ey�G�
zD���a�A&���b^,��'g�W�j����w��-X��$�������h	��<#*��D��T�S#�~X��?�Zr�p��k!��6F~���t���������+��0h��������]NXw����������g����d_���
��|"�-{*d������H���+�QC�PZ����>V�:��23��j��P�4K&��3s�\�LcZ��&������Y��)���v�S���rv��Z/!���H(�����x���)��.E��"��}�2�a��t@�|��a8;N��41���we(Y�8��M�F��?��O��K��3"C�
��4w~������3��rs��uE��`s\�sN����A�9N"A,�.81���@`���8y��`&v_�;�
��_7$��v	<C�����f�Mf����p?�)�o2�
3n���	n��|2����j&�7�'Lp'�x�A��&���1���0Ot���}P���(�E��{�5"�z�$���v&J�&#�{�]�&�-������[�]�/��4����D32�>�Y�[����+�1f��?�ctO��������;�w�a�&�{�&��s�r����nq\T~���]:'�D�������m�3~rx&a�f��	>��
|\�|���������(H
������W�[��D$������@��a	�@�����4��������[�e~o���0IQU7������ Wn|�`��:�������[�%���M����@��g3�u���y�x�P���4�T���>��#�����k�t�gkb(���~��c��?U�A�H	��z6��ih~c^�����Dd��Tb��K�E,���o4����F���������<bv�y����+R�����mz����gj���s�cf�. ;T@T���B������0>���l"`�^I�qw��g'}���������~/�����cH)�����4��Z��L�v���v�w��`Fa�����������R���.?b���P�s<|�u�\"����a��n��~=�L$��;j@�0,/=��@	�^���L���M-����cT�X���0�Du�������o�~������9��������o7�i�=�8��a�h�s"c���3#Q�y�i��<a,��U&���t�5��&�e�9�gxvg��]'|>�y]�N�����Wm���NY��[��[��W,���z�"�/��$�6A(�[H�D����r�,�	��n&���Gt����>'�H��_����}�!kw�B�8.�����c�<&d�hPI�?L�Z�U�?���������<~4����D��X��o�K�&��a��0Q?n�N[S)
�+�|���}��|�����������7M���>��&/}��� ��D&xN���RY6������<"�D���\��)O��K�I���0N~I�V���8cl9�5���y�x ���B�s;�S0?P���2������������e�����.��[��uaYC���>v_��	xE����X1!��J������>��,3��3	�GOe7�",�����P�A|�<����}'AJp����K�����1}��3���Lw��rb�<�����/d�p%1r��O����|�93��nJ����O�}n�����\��v$�������o�@�
|��53Z��8�4t�����B��=���P������5&��e	k�va�w9����Y����9oMp��{a&���M
Z�V�&if0e��553�\���"��^���A�S������
v��gf`W����`g��������x3��DD�$�����-4�MgYh�{���u>%�v�D�V�7Y��}�C�)�^�����ZB�-�w�+��:���1���1BK���e��>�]�*Ux���G�^r�*�F�~��P~�U_S��>���J��p�8����q�Y-I��0Q���,�M=��Q��D.W}�\�C�-�a�
�wsnR}3�T���s�}\92Q���T�e��T����GI���.��of#�E�����'��T���8�K�o"�E�]����\����N����aD�w!B�IF��9���s-c���2��`�;p��/x��g	~ty�����f
���<�>�~*��{�q5�����I��������jR%��
�>�(F�� �d��kV3�w��h��O�X�e���Ch��L���Be}���������t��^	N0\^������1��,��[��5�����~��'b|^r�i����W$d�
���W�����
�k������r�����1��>���X�>�YV���>���M,\N���"|A��Q �u�h�yJ�,"�!�s[j`� >��Ob��>�.�������
<&�\��g"�� �>Sx�g4>s�P�r��4�����9Ct��
��Gu�6�%hC���t�J���*�A��3V�i��p��Biza���.X�@nj��d��-B��IB�c��~�F�I��N��=Q��+��L��jr��4�"45�nVq"�:�D���1��)�~�����;Va����h����GLHZ����d|2�7fNN���)�L��z�`$��>'��^�]���� ���]7�������a"!��]��;z`��/p0�5tE�]�)�,�9��(�1~8�t�j�����{��nm��hh��];LD1�P��u����(z3so������5���������_�� lQ�����4�o3`�����U���&&��M���@#�g�7����w�|��'D{�����Mp�w��	B�Q������a&�w��@��	[����U����B���yq��.{�6��	Q�E:N��{�I�@<E�b��1=Rp�w%$��7p]��b�2F�Hc������<�FuR���/�'������97��ZN���`�^0�|�dv���^���M��0;�t����=�[���	O���P�������l��z��c�� ��M���4�By�h�I�2�p|�G�1k�#�W����7����m�������I1�izp@w7����s�b�V�b��F�O�'�vt}���W�Uk\���k��d���14��������#a���Wl/��7�3�[��/Lr>~\��?c��J���(u�>��������]�;�pL�v�)�i��E`�<-dH;r�,V���/�����I�������2<�$X=I�?;I����]����d�z�*����=\&\�.�'���T�x��uI��=:���q���wy�B������O���kI��(w���U���uh�%dKOH�����5M,ro�h�N�-?��"�p���Q]2��#�d�o�,U�J�����(R�j
�������y�Q��������9v���dw��L�o}?t��6�q)�D��n�v��S0|�%?����H�J���D��P9�K�����qjA�#>7o��w�������#����3�O'���v������c3�\��`���=�-i}c�&����{��S>rhY=�7[�{������S5�+����

Y}.1�)7���Q�W9F����F��Z�|�F����������
q'������
�!���&z�-���������5&�PAc��a	aj!�C��<d1�L�����>�!�Sq�P���j��D)����T���M�0����,��q��}���������IY=�)���2z�S>�gd��s.�gd����S�������D0�p�����]�[�FiKm�9m�-�{�K�< tO��T�{�O����
���S��y��T�?�*������*�]W�����B���������������<�I��zoN���o���r6��]���m_������������[�#�a��X�]j;-0��H�����pe��X�8���I2A������n�O�F���J
�y��?��Ta&r�c�
����*���8��u����|M�������G��N���vN\>�������n�	6x�:w�l���(�F���7���-������
��T��<���?aCF�p�!������J�p�������oF���������wb\tg���+��#<Ivg��]
�+�-� hC|�D���fm�)���)A��<:��X\��[�L�A\���]�M�B�>�$	�[�z<�`P�o'�3��E�H�73�y��D�r��j�wb\Ff�^-�SNe�|��HG�z�����>��O���>���8��6�Dq&?�}�B���p��F�{e>�vyC�%	��3�!r�p�%V�Z�OpBju�x0Q�x����9p�OL	j<�q������HD�t�\�(<�����~!��
����P[dJPU��.?
����k#.j���0�!%z��p�Qz�^�����DD���U2��R+�q�	5����M�>q����u���a]�0(��T�3���F-?���ZSoZ
A����md���1���_$�jqX�K����pG5�p�b��<�TQ��`���g�"��C�j����\ba���>;�Q�]�$�������+��;��L��
B����r���r|���N��E����O�	�5�6�E" �F�5�
A�#��}��!U�������:#�CLt��	��
i�^��&���D���'����^5�)��������0�R@��W�5T�Gp5�!c�����<������$����we���
:p� �n]0�h�b�(���l/�A���r�Z����Z�LI-�@�	��g=�l���.	��9y ��*ga�n�Z-�g{E�#��!s�f� ���:�3[���]��X�Tn��\�����������Yd��3��QH�F	���&����� Q��
��p������]\��b��#.^bt���?}��(v�������)������&����+}�-�u��{a2�yw+Vk��U+�<b�}+*���}��zf����Ip���JHD��uG��8�<����c&��C��B�?��;�	��H��f�1A1�,��g��1� 3��%�1^
b�C�L��P��,��
B���z��g^"��UV*c��1|����gXuP��R�5�2���l�F,��H"��|`w�uKG��1��G��C������I��k-������9y!�+�����"S�����wf�=f/tf%BM�����*(4�Ob@��hp����I2%(#\F����
����q������8tU��1�St�[����(Y8|�����ha�-5>6i����+h���>��AO�^���g��@��G7:�:`���W+C,_��1��D�#�)���H�>���r<�)��5�k�T+�
�h�^cz��,1�������~����B��*��/�?�hA��L
���+��o���}��|kx�t�� ������B�I���������a�#���D�U�4��.=�������Q�+/VIqH�])]���G�xH����|�l�����^�0����;������L�}�.p���q�6����]�_<]��^��<�=�>�a��������KjK�|���c��=z�y�T����;��{axe��L����0�1�Q����f���9^������nT��������cwM����}�=@��7��v�>pp������h<�����+�tsJ�]����:C�$Q	�%��ZIq�7��#���D����`?�*	�`\#���p��s�`�cx�7*�'��`H��!~/L��������������Ghs��D�N�� �	_GEb���I1q<���u�����f�����5��n����N�K���gF�������9'3���H}�m������`\�f�j��q�'��:����$G-v�
b��35����B�1~a����1�	���Ah��)��*c\�#`�x���KC���}��8�0$bB�/8����i��a��2L:P�1~:�������1z>{���q�zfpe��l�'-�J�%I_^�$���;*I'S�G� n>C�{����N��?�<7Wx.������J\���1z.L��2��{I���FO9�]���6��LT.�%c9w��@�����Z$�N�P/����6� 
���*�GtEz.)a������7_,q9���z�p�sE
qU~���F��7�
�q_�Bd� ���j:b>=�:�:��N�4�0�L��u��c���Vi���0��^3���dv|�gZ���%+ejW&�z8�t �?!��*g"p�|��<\;)�u���>r�1�8�,u&
pVj�{�]3LD@�]^�f*U��(`�re���Vy�M���������~�{�%b�����!CEDN��5u-V-�C3E�~����|�0VCZ�q�^D� �Z
�s���u��]g��`o���o�������O"���m<�",���R�3:�0��z�|��,�	��N�2�l+�YV�c;bz��(m��1�[�?�����93��oy2����LP*|�����Q�{��Z�A��g���wa2��\�~���>��2T�F�Dt����d6&�P1��A�aw%a`�M��M�+c�PK?�.:�+�.��V����z�) �e,��+=���������$�w����|����������~r���>7	@=���F���R���o��s�:�5
��(C�al��u���P��L<�^(���\f��x5�T���L�Z�=tx������p��O{�/_�������B���p�P��1�Eg�Zr�	70cC|�F�������Nc�k���������p��W��H��V9����pg�~����	Ba�Q	
��yB�RgLd�{��T"���&�cF�����G�]�	�������������aPZj;"����D����h���`�������Y2M�H�	�{�x��$�n8�������9��q��i�b�M�Q�a_�v����,��(��&�|@��`b�ke��&���L�U��1|k6�_x�����QW�W�N���$��4��������d�g�'%BNj�����k���6<-@�(�*�p_��7�7�c[��B`���U�(���}D�n��f��G$&p�����P�t�-�ez�`�=�Cbg����j �a�������Ko�d�����N\�0����K*��QP�w%>�{����slu�'��3��a_�q;�9��\m�����V���3����h+�'��8_S�1��L�LIM�X�Y��@4�����^E#p!vm��������r�|����69�r%]!Z�1Ii=~Q(:��y$\�1�.@�
�>TxHk1%(#h#��P��"����s����E�<�`�Xi����f����1^3�o^���(�'R��=�.��F7�D���d^���G�\�~�U� �~]�QD�R�qc�,�����������\s�V+}m���G�������������|������.���h|Y�iw]k���� *��V� ������aa
	9BM�5_����+�%%�)��fN����[�CV&�CPj;��b>��a>�6v�qtZ��X���V����-�;3@R)@%C��������Dd��n1t���\�[��)@F0Zh�������wX���Z�~�Vp�]r@�r�-L!�����Zqo�w%���z�|3���������hw���j��Jb���
H��Y���Mg����#�MU�
83����Fn.��J� �0�^�w���y�SX*e������aCVF��[�k��x�x�!������Bs�a�]�����8���m ��G����q�ADXz�{%K�<�2fU��#��=������e�n���{����&�9v�$���7�������aP��6��]��+�yT���c�����{�
>Ps������?�L	����:^,;��f"`����i�/nr_���\2�e6%c��>2�������M�&1����h���\MN3kf
�S�
��oZ��'�������q���j�^�%���)��N��Q�n`��,��$�p�`�)���Z'��waX��N���5?�>��+��P/�W��h[j�e��j��"�W" �>�S��p��8Q7������~i�-��;��_���%��ZN�:���o��k$�������Fq`N`��!]�GO�o���4A�U�u�4��z3�y��`�g�W�RO���|~����o;�&�[�ck���u^��C��?lS.��o�X�w)��3Quq!O+��Y]� ����SK���f��Ld���\�m��p��-���C��z���tf���x���p���N��Y�P'(����w�@����r#�&o������Bo����%�j���0��S����$���8��^7	���$R2N{���R���]����O^�!�\czg\b��x�!�39����+���������=_?N���`C'�������H��Y=��0!�CQB$*Y�{���������w�T��w������(�����5���ukC6��Z���r�u��8�k������(�������e�	�{�p�����O�|�{:����	j���| ���]PL��R
D�u�4�qG�%�����2� �������8���qbN�L>Tx�	�^'xc�?@�f�i�4��Sl�1���WW4��2t@�9�����,1�"���6���G�z�������5/�Np!\5^:|������b�x
7�U�
��D���R�A�:�r��pRC����&5�z���6�����~-D�����C���2O��P�d���GT����Z��X��	�����#.�qmQQ\�3�4���(���Vf\�'P�o�������^gw��0����K�f��-��}�����3�?� CXl��b"�7��
H��U3�c����hI ������R���{&*�t�@���//�i-�Z8Mk�"N_��1m��%v)F+�0�
1�QOE=���r�����������A�-
�W�0y�a;�[����MG�������.O�f��S�0}��st�.��#�$R2�9`,����x�r�����&[�'��w����=�����-�D���(��V9����{��"�E��+W"�@��i�R�m���$T��z��n�$��$�wWl9�]�"
�~���K;�|�3��v2\�f�@��$�kJ����iy���P��2z@v���{�y���������wT�h�:Cunn/��0dwN	-��if��mx36���9�����If"�����>C^0x�^�:"��H��`<U�@�������o��pw��������� 8_?��i&4"t���p�$�E?C3�8�_� ��h��/�����0��M���
c�S��>���.m|8�'l`�_�.w{�ko��.�|�#��.
�'��{y�{�e��SV���O�5��-���'�x:���Lxs��&�B�u_ 7���3�[���~��G���J�)S���3~`g]U�K4;uJY�����V���>�q�u�l�����p��=��z��#��g|���f���6f��KV��7C�A����#p�����3��N3����;	u�*���
�9�[�{_� e���z��r9p��(��{\Jj�d ���H���dF��X�����.~������[(��ucg�A~4�@����6AlM+8�]�h������@����Q�����`�Y���	v����xx�|��u�p�[��.����������.��g]���O
���f{�	)���?��xpw�Y�w��D��GU����	�:(��/��2�`�D���$WeG��a�"�3�����WG@_����l����%���ez�cv���8��W�D�AMj�#Y�jE�4�OX$��3AZs�����JW��&��_����89���<��c����(@�]���jW�c3,�&�t���)��@&>'-@��&�HZ��I��h��O]	�`x���iMv���o &�����w%�.g�PuX��]pe���[�#��)�������}�q���t�1�|���f%�4�����T�p9���v$3�4�.��W9�J�s���/Ot��`G�������3�������(i	�|A��2E7��E4U�D|��;%�sn�xv�]��:���x���A�.������s�*��������k��w��3�b!b	j���(�-�=��%M�	M��%�5��E���Y`L�V2��ZF���s>B�:���p	)�1p:�+�g<��*.����w&�8�3d&$6!T�Q$#�E��������:��=1.�����"�3�jL0�L[4��U�t��#��&����(���$8�Z����E�{����d�mn�WKP�H���H��_��n�������UJ|oX~gb����I>"A+b�E�wE������^k�\Cgl�t11�A�.'����}�M&B��SU��|J��U�3�b��s*�*f�H�5n�0�SK��������� �H0`���N�"�>`��}g����{d�_x)<��}f�6�M��W�)��h����k�v	{���2��;�sy�K���.�������t�y8�55���)n�F�l!���r4���P���B�LT���w�U����W^��WcV�B�����	CF������3�f�;��GY.|P��R��4����S�?��2�����7�n��p���F�#/�2�:'p8]o�)9���p	�Gz�$��a��fK�%�<�g������� �VN�U���f�8��v����v�	����x�U��Q��d����_�s����#O�#�	y����3��s~=*{��HUj�0���W��B�j��hX���T�"�WB��z�����PT��`���fB��s�z�qu���j,c)��--FI��$�W"�D@*������%T}������f��2.�+��g�g"���j�z�+J�0�E�A�S/����5p��:3�������� ��D�����I��b=p"`�@w��zB��ON����E�cU$��7��y9�;C��Wpj�7p����N��2K���b|��e�T��8#mS�M�hmZ;G�����]ZVU�����0�~��DC/;8d��7��>9�WOY����5�����e 	�)�$���/\k��oN��n�7�|ax���Aqm�=�����{�����{���������_���_�O��R������8�t���
��f9�n5�nuJ���R�FjRb���Hi���w��6���I�{��x��q�w�d���l��xA�=\c��T,��?+�`�j��������a\�$-xr�iZ���!��W���iN���a��2e�����Nr�����u��L���l����x�X��G��;6p�E,�-v�T�1�XM���o��������`��#ci��6A]Iw�a���~��w�{�!{���pZ��x�
��6�������`�h�nSK�N�{���tS�\b��~�N=����L����v���"�v���d�}��FM5�
�p�E���}�'9s�g~�z��pX��
���
"�}�.)�� �o����O���������J�0�f���>_:�]�dh���������!X��2���fB��{K�h�m�E;p�].F��v�~8a������n9��1��k�:���`.�\��n��>tK�pJ��fB��]������r����r2C�2�.�Y�+bh��
�^��bT�V�*l�GF��6�a1��8pi�C`�>:Qb�i�*�].�f�]:�������C�L���x.V�`2t@s����.�vW�c�]�*f�(���8T�"-�H���0]�L�k�����u��bhs%C'�P2	�#��n3}x�v���%CR3C��e���uW<�Jf���d�c(����Kh��C�d�7�9�h�K���.�/���~{-&�����E�������/�[�����/;���x��34L������z��q[�Y�6W0b�9��rs<b����`�f�~�Z���H������x�3alp�^	��b�S(�5TuE���.���a�e�M����`�h(���JF�/�JC��g�:���.����/j^��V�%c�j���e@]Wx>�Q�/C�d������}�L����r)2���	��C������D��=�+�_P�d9������&�/F��=m_��~����0�J/U�/�)&�����L���+�|M��h��T�Ve����������!�o��F��
�������~�S�N��
��m]�)�+�s�wP����el��YF2_��L���7�����q�������q#_`���QY=���2����q����O����B.x��/7"�����C��?4������������j+nO�aI+�]~��1�r0#��.�(���'�W�	�H1��vA��y����T]��i�,�n��A'����}���~*J����D��h��T�T�� ������o�����&."��x�����������p�E�a��U\a�hW�������
�~�J/��n����mF�7:Aw����D�^���	��G�$���6c�m�mc������m��P.���������I�/j5�	}O�x�&c|fk�-�&l������I{k ��<�6��`�Y)��8����W�L:�{���x����t��&@8w��]q�u�'�'Xa������O#?����*��`I�M��Vk�Pe �Zd�a�����g��	���[���M�i�]^���n������NjWx����$H}�`:|P�p�����������l����R�$h���������Y���wi����W��L����-S"��I����-���h
�G��t���Q�-����tm~_U`�-�c�������L�~x�{��Z,����aIL�*����.���b��}�`��t��**_���k�j1���5'�$��������D7���2c��Izz(�u1�#��b�8%V�&l��q�+bBWA�% �aWF<<��@~o��T+$h��&.���]�x�gD�0.�i!0DedW���n��+��d��_
.SuI��J�1�����
�F�>u\���:��Y��	��{��[����yEz2}I��`�a�m.��]kq�����v���@z���Q�
Q�zEd\y��� ���Q!��0���s[v���
{�&|�E\��du�
�&�>��:	M���lJ}/�o]���3��>�;8<N<��r���(��X�Q|��v��8���8����q����8N��j�������{B<G���$�k�C2<�
"�8aC6^��mC(�|����d����>A�Q*�l!L��'QF` ��Vq��{�2����t�7���8'l�?.J3�#<�b�a����K������E4`?p�q|�1CD���
!���b�
Y8x1���c',Th��f�*X`���&�y�n�$D���+�
�)�XBU=�`�+<:�D\X��H������q�����m�n�'�#o��8&�^���x���Tmc��1���3����h���c��N�(M@<�����\���3vDc�a�o�	3G�q�w�<apfhJJ��-��DK_������!�m}io��5q4u� �2����� ��y��pMn�GG"��e���6x���*�e��
g���{2����]8�]��\�����w1�pc��	7��<q���|���`�zl�`�������`���1'B����,���E�������}��O�����(��B�w�e5@tm��$�v?���#�����.�[�d?+���mE�d��7����
��1r�3�����e���)�a���/E����p�Tq��B���yy��4G4�;�'�����a��c�	���J.��x��":�-h�?n]�3�:�%��f�.���f��(�B=mXlu/aQ�a\Y���0'2[�m��tjG�0%!��m������(�.���	��V�� �V=z�'�S���YG�
C��4�������p�y�FbB;��G@���'l
�s��#
�!�m���Z��4q�d6�n/V�����!�;��$+���Q�:W�=JSl����FfX�����S���K�/�z��G���L��-�&���������B@����������[�P�;,���a��n��eW��}P�6<m�{�����4)qs�pmu=8p��	�lQo���w��R0��}To�5��}�-`��T�8N������G��B���'la��''�����������:��r�p���h
z��
���[m�K��8��	���Z�)���w���}�����<b �VCB�A�VE[�����o��������x�
��"�<�O�����
��;����������26d2��q����z'@����;y�Z7��QY���K)��8bVP����8�����$��{��]��^��}gh�I����W��G�{�����,|=����������_�����#�>�1�;�u��=A4��u+���:,�:�]1_��)�i���
p46s��
����=�Qk)�P$���n~ G�zk��������pk4|��s1��i@ttLn�Ue�=�T�iQ@M�&l�=�#�E�����(@��iQ�m>R	�	�{�vW���'M��G��yZ0�Ez:�)�O�2t0.Y�����L�3�o��1�0-J��1-"J�"%�D����p�- A		�����kj�/H�O�5����n��x���d��QB�?�����r��K���Ke45� x�45��� �wJ^�u/92}v4�_�����\~v'N6?d���v�X?����8p*�l����@�[�{NJ����/������S�.��
4R���T�������9��9(��ON=�%u�R�9��9��s�>��Kj�uE�R�\WD#����������)���t��t��sN;rs��������LbHb�Bs"�H�Y��F"ob�D�H<���F���D��x9h$N�=���S��9C��)�h$�\CD#q��5���zN���D��8���s{O����n���1���Cs\Y��R��Y0���_S/��^��N"�wV
����}����SQ��k�h$N�y��yMbt�btO��d(�w���T��:�J����/���{��:��C�_Yg����������Y�Fj���uG�\�C�_Yg����Zs]
��n�ns]=9���B�_I'��i�\KgN;��#W�1����o��������4��J���\�3�+�o�s���x������7��R�f<W��������\�3�+�o�s���x��?��L��x��?��L��x��?��L��x��e<�6���C���#mhH�G�|,��4z�P>��p�#�HJ�����y��<s^�9/i��Q|��T/�#-�����Fm�G��}i9����;��������������[�c�
}����v\��
Q�6?_�6�>����B��q�9�o�
�b@���pa�5F`Bn���d�0<1v}H�@]����l��q(����%���O <���L<�pEAB�2Oo{�,6f����8t��@���ZSR5p������������) ���T�Rfn��������>a�(�3�1���}uk"�3����7��U�F�z2�h�U�41���~���w9�"`���h�1����Bq�,�oZ��t�.���[����`;�]����d�0��y������<-�u���w!�
���`�������y=Q�@@wTN��";�(��nl��qe����$�lk���;?����jg�`,���i����ye���J��%�`�V��p��pe��+o�G8�}�Y��0q(���B[����&�J�m�5�!�3�1��,�^�V)��eA���Kz�.���?����$6��-���O$�B�������������A��O���#>\4E|�!�7����tM��'���'�������?v��v�#e���D]��t6��<��S�R���"o��MD�X�������k)Z� �O�����zjs��n�U/E%�1������L��!!:;{�1��>�y#:���Q=N�������96����$q����X���u���&8w5 �����������n6u���a�����-�~��U*��E�i]���>�H���@���i�Kq�Eg��.���	7�������1���f�P4�Y�B`���������
���U{T������	�a��V�Sg&e��RQ~0�������g�<�O�eS��[��a:������i��Q����S{�c���_g����R@�~�G"�P@�<�������������07]��z�L��S�����=�zN(�h���'�K��Wf�KX�Q%���\��}i�����^81%(��C4�b�f���A�O���jk�jk�a�Y��]5\�)A��m:2/�������`�lA�8���*����A�����uM��Q����>A����?	��a����(�
��0��	3�w�h'E�����a|Z�u���0Q�������mg�d��#�CS�����h��N��s(R4�O���&��3�b��i�v�D��������(A�LM�tfbkE*czF�&��U�	�0Z�[B���|��>���@D+LY� �<��7�<b�&Q��;���f��o����?qBPzM�(�4�{#6�\��q���Bf������f��wab(���b�=��D�Xv�*/ct��7�DN}����@��+�Z"8�m_7o.���an#������`�{���8��w%
��-=�pw����@��-s�v\�t8��u~�����uU��LE�u&?�
6�!zj�B�hYh6����pL����yg"�(+��5��1�C��J�""%��O��N(�!2��wah#����Jxg�a�!�P���-������
�i���1a�
55����D���f�VM�+w����G1�3�����r�����
}����Dp"u3�t��4��L�n��n�jc�^�+�c���s���h�����8hY��%�R{�e����G1Mr�9�J;s��Gt��w8�
Ut6�D$��+���w�u&��5jj�����.�h�B@�Z��&yhT1�p��<����CU�S���"��������hB:r���Ax�O��w��mv�r������0q���A^����������|��<co�v�a�x@��8�(�����4�j��jwL�/���`��d����h���AXP?���C������v�1�{�����
��/��y�
�;ct���u�HUS�N����3o����=9�A=no��M���g�O�-��+�o�l��WzZ�����G8��=:�=���ql�������S����k=�gM��{���t�E��0hE�8�d���
0���og	��r�[�y�0|
��w���%g���R��	�e���k��l/�@�H��^��������l��s�tV��w���.�_��Xbw��M��U�`"�B�7�h�$����� ��@��4i	�!��]	��	m��K|��X�;_�<���;C���6�?��zf�k��'9k~y��S�o���k���0e+S7C��<m ��5�]�b�G<[���7�������U\��������.��0h�x34�qp��eOg�c�f��X��c�sa�c����%��MO����w��n���N�Y����8������c�dl1�#t	��,�M�ojn����)j�������k��Vd����������v�LXN�z�|�a���%2%(���Q�T9*�D�W2����8S���%
bM�_�����7�U�Gi&D�W���%���0C7%��X��=��B�Y#6���Qu�ae�F�&��]9)~W��`���>�4u��0��zd���>��`W����un�Ru[�L%��9��d�n��t�O��m[��o@O����R��}��>�s��`�we�6M�*�D	��n�������8C��a�#. ���W���l��O
��4N���:Z�:xe������T��u/����|��rQ�S��>��]�N�\mw�S�`�B�Z��d[����&.����|��dx!�6������D�V�`����xK�t���u�(c��]	�,� ����EcX�t0�s�0����P]!����
�fG��m�-B������RG��^�n�8��Jx���J��	�Pt��
]�w�`HjR�3���-�/4I�V���!xP��X���Ut�*g�B�	��]�n� �E��p�L	*?bu<^y+�����&��tP@�^$�%�?��6i�����7\p�i�����K�23ce�T���c'o���9��)��Xj����d?���L!����&"C�3��wO�)A���7�5� ��W�0���Fi�[�����Y1a�g|���.�r*?�����=J���-�1�|�*���z�u��D���N���(]5��wX��d���#B+o�
���^�����}k;���Y�h��_��ff��a��@��oy����;��.F����rd�x����+�x������5�$3����:�4n�l �W.�f����TF~XA-����Y
H���U �e5�a�l�z���D�a��XW�Pl�����M-����Y9��9�q!��f��������@9�!����+"w>�!������$��W�[�������������@0C1�e��w���fX�we�����������+�Wp����L�:|W�T���^���-?(����������TUD�J;�������z�c�%O�L�`j��ASn�:���8�.>�q�\F�4���Y�1��a������)����4�����x����0MbD�(�����F'��p
�Y�LD�75�L��0�I��FX& ����yFb!���]M������/����/J+6$	����v&.����:0#����82pw�����}�>p?�M0{nN�X��`t��B�)���*b�?��cA������0��/_o��;t�}}�'q����&x��z�8���ZkU���_[��J�������O��������G�ZN����G���0�](h�3�C2�g� G��ao��"��
�������dL��94���?(S�N�)���Xw�����hk�Sq�M-��
M=
��Fh
D
M=-��v~�+x?���}�8���)2�0�]�x��^�h$Fh���41�?����L-�a���M��#\�0+B�l	9BE�8c��>JY���?�. �
���'	E����0�����&������Hp�l���9��i�[4T6�����R��$�+�n�������O�	��wS�R��dR��BxJ).Rx�L	�w{�=AO���O�����P=wX�
��N���W���MQ'�Z��1A�51L�
r�@1\�������0Q���~�����~D�pTF����P�2B5�%��"�������af�vrK����-��/g��b����hf�����2W��RBy=+*��R
xg�qa
��v3�d�
���j5&a�-��:l�tle�Y��F�`�������v�HX?�������N��>5"U3�����l�-�A������&�81%(#\�]}�����!7o��M�VY���)��K�����2����
�i�f\��D+Q��V�N��
�n3B�7�Ddb�k��[1��3+�d�e��13����G�d�-Ju&a<��������h�=W:���i��<d&u!2�p�aN z�V��q��1w����0t�2����OcD�x���B\L�q��Q�I7�)��aO|B"FqUqK��-.A�me�/��>���WO�}������P��[Q����!��L-����d���u|E�������������q�����$�iS�w�O�������c���������n�!�Mw;��4s��5"��Q�v!2�$�1���#,lF�>
��`����?���]�@�=f!��UE��;��0��0(��9n.�3������'6/�`X&_]r���PS3#���g�A�a����vP���zMM�l��a��������JzI��u��-�k�33h{��u`o�A��}@�EEl�)A]����Z�������r�+���m7�f��*J��.V�<-��&�}��v�1�1L�p�W���Q0Y����,�_�JLW9,q\����_�����=1��]�� �(m1%(#|�����c ��w~a[��������]���
|h���s�����t��~��/H���CY]��Uf]�D��l��/�y�B���c���I��Sdf�k�C���*t�W���i
�C���~� ���>G�5a���7�@���2�1���_[�B�8���##�?�����o��b��1����.��1���Ib}pg�B���������b%��C��+����qLh���������g��D�@�;�Gw��"�Y1�q��@���,-���a�������%���.�f�w?_lv=�E"�=e��Ck-���1�e	JdW����"��/�����1N�����NZ��5����7�`uw���|h�p(f�b�J+s��d��oz~	���_G�ue��gm���l�4�.��!�p�2s��p������d���{����f�����F����x|3=����u�lk"_��s+3�����R�b�,��J��.�90T�D������e��X���n���c��Yh"b�>�Ps6P�M����u��& ���q�j)0;�a_��	��(,�X�zk��0�V�*5p�9)��ej�(������st�]�L��o���5!��3t�������G��
y�f�g��|�Og��w���}�z��qk���#E�8q��!��K�����>�0lD�j�,m�]�C�'b@L@�i�R�q�)���`�1��2��k��U��+c�>�o�R�(6��}0�{��fG!�
h��MS����}�P%���
5D��XR������j�}����t�����XL	���*��x���Dk!��U�����tBM�����w���x3�����4������s�X��y��>���2�����n��uP)�nvk�:�ee����wc^��-��_g�tv
��y���h@|�v-����2s��a�)��(��!�U�|W� �~���Wd�0"I����S����,�&c�u��e2���E�H��`���=.��I)����<�J��f�`��p�C���(9Q~��d#C}���C��'<���${���?�Gq�2��>��w.�e �a<��D	&�+8���b5���c��e`����R&�X��M�C���Rl�������2�=���b�6|Hff�F��X�����+��z���^���O�4Z��4����2Q��jqj���hm��5���A[M��ti�`����ZQF���������D4��(���[AX����a0��P�X��B���Fk��>���D4[�5�Q�������X�U=�
��A�x�����4���a���������G�b��yp�B���/��E�?`�2Y��`Gm��`a���8q��H(I�tK�������#E��"��Z�0�?����b���1�`��K�R�F;��3C������Lj�+��`nRO�����v�
��4?|U��i��ae�9v���L�+s7eRK�>��E�� ��H�VS��B�$������������y��.��M��
����][�K�`zo��d�o�}J��I8�O|�nX�
.F&�!��dp[�{�b�n�t��G��A�G�&�y����iG����hS�{����q#_�a�|s��0�G����6���+^�x�����.c���v�t)���e��-f�'hJg;�Z�/�"{;t6��dL��6�vpI��0_a�o�����������M�"�i+�^'�v�[���-n_��6�$����Neo�������	|;�G��d�x��K��a�o�rp�{;<��RC"l=���+��M���D2��=zB��%H��.�0��]>�L�m�hf��H�{���I�������0�7��w	&n�Cl*�9��A�	�1l�����a���6�7@
obb���>/o:Qwe�&�j�W��{�k
��o(��O���51���H���mO���dF�j1R������h���6�2��Dd�o���vw���Xv.�������`42&���=��`���}�������:��KL��g������Bp/���3�Uph��B�������,��WRh\�3���X�_�B���e�X�ww)%���z���}��V77�<���qC���f|�����U���wG����&���q�1M��h�����\�������
�;��J$��;k@�0,/����V=`�31�v��Z4��K0�A�b��m��S3bi��[!�a�=|W�n}��H[��sw���;���`�:K�Q���a���D��������DQ\ea2~����k"P��Lp~+�:~?�w�p��y]���)�m}��nY��[��[��W,��|�8fPX�H��A(�����x(6����Y&��-�LV�n�����nDO�#�E�w��.����2�
�������s�J��`�D�	��o�����|05{��G���MDn��|��x:&��`8;����y�?80lM��@�AB����u��|��!�k>�[+��o�0��	�����g��sdF!<��J�o����%�Q�3A���yS�t��N��c�V"�0��E\������5���OE��!���B����)���=b'5d�]	�	]WqC���
���.��[��uaE�K�t>�?�����z)p���J%|�t��p�x���������K�����O�h(� �dC���� %8Z��Z���=���1}����
�	�L�;j����Py3
��	(��JbL�{��������a�����x��[��\������=�H�E�3����X����[XZ33��p�C��d��S��
��w��F����A3CkLj{���x�������f�/+B�$����{���`�H4)h�3�.\��]S.���b�=&a���� ��
��zLt��`l��83K^<�3)@2I^����.�.C���AtJ�=+�k�w1X���52y���AI�%�8�B���A��t_�Pd�������x�����]�UC��oas q����t�p	�wmc�%�R�Mw<��RpW�o�O�80�����R}���/}�)���L��op����*�Y,)���DY����v��[[Qf���P}�B�C�-�a�
�wQ/$��0K�]JCD=W�-I�]4KC�]\y�T�����24YTM���1|����-]�OE�|�����0����U?�������zgbs�wm4a ��]���;A�Q��U���a�M��$���*�� ����>�Pp���������.0}��P^�o��=l��c��<gs��z��G�#�jR%���cw.��6��l�����Y���Q2n��[
A���S�Q�����(�o}��B�U@�{bf��^	:./��d�"$j8�~�BD�Gn6=;��M���+B��F�+!�"!�+t�C���WTPA"�k�&^E��y.r$7�r�y��	�(����*�
}�
5��*��B��~�V �u�h�y�H/"�)�s[j`y}g&P��s���
;�#�
<��#d�w&u�/tO���h"�s(�zX�����a'�>Ct��
�q�����!��\���B�2d��1LC^���}�� ��]�P���x���K��N�s���
�����!�����l>L���\�e"�;(� )i�"�<nV�Hi"�f,�^��f�����<w���
���]���	I{B���ew��;���LW`��.���������D�[�>�O���k�N��q��04n�7#��a&!��]Zv��^Mp���Q����f�%�qE���qs����[��>��M��:zz��a��f���c�����*��B��D�����Uo��>�ne��0���-Jy{
I�4�'|3n��%hc[�Y�	�M4L�fs���@#=}�7����g��N�'DG�����p�w����K8�7��/l���,�x8f�f����U���M��#�8�Cg�!&l��	Qd��'t�9,���D���n�=z.�%�	�����c����8�"��[�	�yz�����Wr�%���������A�"H�=l�F�{OfG�+�V�)�fg��u�W���E	\���U�����O���;�4���(�[�~q3�D�	�	��,c��y4^�2�
���&B~[ �iE�L����M��%����M;i3���]�
��[�%�V��;��E+��G��p������>Q�l��c;��;]�U4f\W,/���B���cK���B/��;��V��U��3v�����-,���0-�ZK���4I�"0�O���m� \�&&^�+�����C�xt_��'���'����I���de���_��,Yd��1���C��nFc>���h��-��i�M�$��8L��\�d+���~�\^^K���e+cX���H��V�![�C�eA��Ihb�{[D�Q��@������{x-�q�X!����y��[���������v�����<��L�Dc@@�t���h7�
�+f<]�c��V�9<�����<r��0��E��k
r
F���*���E}��=�~\O7���(�=N-���kj���\������#&0�p��b
a"<|~4e�U����_6�B���V>�{�<��A��~��5?w*DnE=G4[�����n����sy"eoVd���KL�G�M:�(gJ��2���1ja�2�	{x| �_�6#B�qe�V<lH�1z ���7���V,�!���
�%K��<-��C��I�t��}�c�p�������g��U�t���U�q�����mc�k��v�����M��U�WW�������Q^]Uyu5���*//FyyM�����~�����-�_#�����1)]U��F���c��~�;�{*M�+tO���B�T�8<K���2&��w�����E�o���w������_����kN��2q��j���������~n�����cw�����jG�����������y��������������,�/���x�4�������!e)#s`)��4Mye���7��	� ��t�yx���Al��~����{���{���0��r>�G�a#��R���3�+��rM�����i��j�V���V�k��2�w��^����7�fEg�T2s�-�A`�=,Z�^���uv&(h��GC���	���!	6"��`L��W��<,�����7��
d�d��c�?�����g0�P"��'����\Q!�������J$hg��\�
1���dJPF ���m&�	.���W&� �>��/}����d�����Y�~�y0��o'�3����jof3��D�J���j�wb\Ff�-��Oe�����HG�zg���~��W��M��aJ�'f6!��|R��������1�+�Sm�RI�o��QJyR�`��S�S�NxL�B4�����o����������?Z������p|<�i<��~!�GX�>];!�����z1\8�����m#.j���0�!%�\"�\�tK�&�����o��W��P�L��M��>~������h���F�\��W��������H�2MS��&I������L�o9g�?�/�4g,\�������pG5�p�a������nn������Lk����S��9�n�~0����~Pu�@?�}RL	��.�~��l:(����4�� �����3�t��p?_'J��"��23��2aG�G�H�	������!((�$���_���i<�"W'������4E'
#�`�p���H4��~2i_h�UC�(��{j�q�Z�v��5����U��������*�1����Dj[�����]���O��12�(ch��we�	�����w[��oP��+����=���n���	��g=�l��z	���F��03�,���m/��L=�+:n9��!s�f� OyKub[����~��86�3~<p�D�L��?<��(�n4(�	f(G�����c��&��:�Dq�*j���@}S�3����6f�#.���I�6�>�x~���#wea��C|q�a2�Ic�&w��{����<}/L�0�.���9V+�2���U}�������,�A!�����~,���v����vc���9!�c&�gx �\�CiPg%8���x��pP@��p��	�2c�S���@Q�V!3�{BM���n�|\}�aF>��L���UV*c$�3��h��3�:�z�k).&Z�8��3U�ai>0�.�W�7/@����p8�/����\J���nT�vB�f����p����'^�X�2�����=�uo��(+� ������	��B�}0��V���R�)A�2�~�*;��z���W>NC�P� n"c�]t}�T�D�����cq�x�BDc��G�_8��@��_���D��`����^���3S@���D���]w���2������+�%2n�L�|�D�����#��B���Y_P�,*�G��G�'���la�}F�9�H�:4���q\�����?�hA���L
�Mg$��63(����#�v�o����$�C�:���3������0x�r��D�|K������� i������/���w����I/Q�!kf�4�N�z��aD��0�#�l?�!���3A��	������$�3��w]���,*��� �����������K�����C��������E��-7�d���O����0��}�	���y&���
�+s6?=z��^�����V���^���#�}�y�8����G��Q&t��v�����S!E���t���^!��sP2��>y����8i0�����;mLo�!(o��G&��L�������eA�k��1�z����}��F%�s���o�������C��������af�v�B�KN&�t�2����uT$&g�?)&����y��{%s�i��Q{3c���VbY���D���LSN�!	g��\T����-m�1�������n��k�?4�'F2�0����I�g�r�T)`F�<{�����.SA�1~��1��C(4�/���1��g�������������q�9BUq@<����0��<&����[Bg�����<h��a�13��1�
����:���1�S��������sf�I{K����U%����sf�Q<��-��>x6yJ�7�O�<|.��PZ����t���;h�-���%������d�L�'����/=���(�)=�h�4��L�D�I	+�����5�R-�H&>�;�C��k����Q��-W�X?"C+������KP���O���L�A��'=W�?��)��+t��_�����!��O�v�<�n�D�Q��}7c�Gz&��]����2�Y�o-L{���_������~�B*g'���4W���(�r&��S�F[MJ
�<c:���0fG4�_����Z�(�k���I��4c����D��+�����cnb&^�G���T����1�y�2lC���|����5Y�0hy��������H����kzQ:�+��+��?�=�m�[��>=��%]^"%�L����Uo�Aa����R�����������70X<^mm�;|N-+����vh|Wr���������*��x�&��d�R��.5�����E��M���f�T�Q���s����O�t�(Z�P)[Ma��/&��^~B� 
���S���C5���+c�TKwU����.��V��G��x���T��4we�4���+30%I��C���
�����3Ob�+�2��On��8�f#��5"��1�z���>/���Fsu6�4��(C�al��y���P��L<��^(��}�f�z��f*�~�L�Z�#tx����	Z��(�=�c���i4:���1Qf"���P��wzx�����aXKOm��A�	36��q��a��k���T0���.}4�%��K���4p������\�_�2FO�4q�[v��j8Y	��{������d���l9���L����������0�D�����K�Dp��q��B���W���.+�x��6���z��S�b����"���UzM�=��i�hgh�|0�w���mJ�"S�u*�)%f����,��(�z�O�gHULLp����D��&�������6X#�-���+�+H����3�$�|�<X��Dc��d7�?�nF�� <Hm?���cm6��{�aC����"a9A|��g��zCg�3�^�l��%Z��Q"W���\�n6���Z����_��/<~�����1�@�L;��|��e4L���y�+c��*47,v���A.��
J���~4_���^zz��'iU?p��������	`�3QXB�pf�Y��.�Z�n�8��^�R1N\H�A�����2�0%5����%���r3�@���h.��G�������Z�C%<}	6)#r`-W�������_�N�h��+3�=h���T��C�����p���:�|!�|Q<��>~~��`P&u����SF�mb��>,���y<�����3��1�1�� ��,��0��1�t
4];3��'TA�8�=:6ET0.���g	5-����@�(��������}�3�T��0|�����!�n��;���_^���z,���h�[�iu�Us/A<AT0��V��bI6��)$5uV}j��r����`���HB����������Z���w�XNiv3�
��=�Nc��}����4�����|gH*�dh������:��[h�Nt���\�.m����`��dF|��qX������Q�X|�������&��P�������%a�]����QFM?^^|�@����/�r��BIL�n���-�����ta�������������^#�S��t� wtx������_����R1��?�"|��i"+#\<,�5�����lc���A�|Ph�4,�GqB�/�#�_�vgDU��/��k�D��G�WB�d��(cVU�<�nk�n)���p����-f��j���niQ��	923ae�e��9��]��+�yT���1���>{����g&��7�����bJP����c����/D����x�b(X��^$�d �l"J�v-g�����m������
-2���� L� �V���) ��Zk�5���d����foh�����Zu�W�C	���E==03*�
l�.��+@�
�~6e�����FG�qfX�p'�����������C8!���SNe�������2�5�|0#����f��n_�
�0r����l���u��s���"���v��l�+a���((�O���x�yQ�#���oD���k�f�pe�p����C�B��H��	?�S[�V��"�8��s���M������dy-k=�D�1����Q�O��G�?�j�����e"�������2�_�0�u����S�ulje<�q�����0�ZM{r��BH�Y(��B�Om��
G�1�Zlw�������� 3UV����%Q����C�.��������y�\���^/�Y��$�Wb����.Np��1*�1���>	�e�2�^!%,D'.nXu���O=h����?�J��W&cJnC> �WD�n@��_�v� .����2e"�#�I�.8J�	u����i\��E{H|����{P�S�� �	�����d	�a��4.���� ^�	J�G~D�3]�_����t'��"��	��\�P/��W��(�8����3N��x�vN��(�p`�
8q4���W_���1�K�~"�F��+pO�#*�ri���p��v�y1�����;��tK����#�g�_x��e0�S|�� �R�A���������'��O�
$�e��q��nOG�J���'��9�R�w	F:�N�`�:c��!O{a�8���&�G�q��0%���:�q`7�W&c<�T�q(���O����,`?��R������<|��4
�������ke�b��
V%35�^��.n�E!�G����+s����pfx������3`�&Uk�S�a.TQ!��V
�K��u+�o��MM/Y�s���b��}y��T�rq���,�C��]���'����U++c/�>6��aIw�Q��?/u#��l�����UYV��0�l{����]t��cC�nz��bf0�<,���y���	�����Fv���������������n>�gn>�����)>�7��C~�5�;������hdw���J
��I��������tX$b�
���������9�_x�zk}NH�d�X�CK)V&��a� 3dS2���r�wLSO%���beF���:�_L	*�ry����J�r�L�0�!	F��L�z������ X�0��g�:���������I�x����"������ ���:�)�`�SWV�?��~���52�L��QJV|M������*�HN������=0�i���L{~����4���2�L6�������3Q&|�����2����q\;��CL	
�AS�s���'r�'bB��e��$3�C���9,��JG6���|32���
������TU�.8��	����2�O�I���q��H��Jd���mw��W�|�!H�����sa
	�n����
'3��,��/a0$J�Ue���h�L�:a&o.d��p�V6����f>���a-�n�z�]
�S���`����0q������f9>N;�+l�����y>a��L�:gwWL��~0��.�%���~1���'|H9��22�Y(���}�kf�l�{�8�ux�"���i��(�3W��L*�������Y��Yo��yqB�])����^�n� 4\*�)�&NEg|����I�m���� ����o��e�-��k=s�B�Et7��^[��pD�r�^�d��C�$����AfbLM��+�w���9����.����I�L���L�k}�����UH�Cu�10ur-Py?��[ETy�����A�����'5�
�����&�41���U��J��<T�Z���w=��'F�I3g&c��7��v�!�x�~�cgO35��w���<��{�y"N-vu-7���~P4��;Sw�4���TO����{�Vf�O�G~��D�q�l�x�g�P���	���"b�oZ05�[���\���/=N	#� *3WK�<�����q��<p=�Qm���$�L5'����D^�"�vj|�����y���@96a��rnt�E����q������N����yhu"2|N� ����ia���cG����|<paZ���n���[����MUWS����'����L�(�Q.����v���=<]��`2f���5��� (x���mi�`
[g���(�]&A�����2���3{�r����T}r��_��XM2�������q��V:�������z1-W�0������\�<�����(^s���Yb���{�����?]�U��Q1��V�������
|���4HbJPC��f
\c~f2�G�K�'�g�jA����F��G�����T7�>V�A�M�����>���t�X�*I���7�P��8���=��N�F�4���
Z��w�,N��q��pH���]C�_�1��-��f^�@���v|&�"���`�������]qy�.��-$"�3�s�aa�`�L���Y5�+�r��5��'�8�����q�YrEcH��{�ruL���&�GT0���O`�������jb
�w#qI=8�83���M��e��x�s��AK�>z�+2�"��w��*�:���@�;��HX������7U��moI'���x�`����tn8���/m��hb2��������������oK�@��3c� ��r-%}@7E��6��k8Eo��:+��e��Km�S_in���L��)� X\j��W��5�#��:Q��*���������?31X�;��L�3~��22��/W�S���� e���T�qa�J���Z���v���u�zk}�����2P��D�~4|{���-�W�c��R�)6��F�VG��')�����6��>
�G����`Xc*'���we2��?R�S��|�����'��" SR���������������[�A�N�6k�G�����>�x��U���A������kJ����4X�S� 3~<�!��C��bk��0�0u�G�|c����N}'U���k����j�'&���e���C�VNbP���N���B��|��q(c�������a�������s�'2�����nZr�#�l���|��_A��g���:&��
8������������2L`�6��3�����w!R�e����fI�|�A�;�"�2(�����2������rfd�����
[������z���$m�J
�|��OM=�%�J����� �8LcM��l~T��a��x��U�����	]�	%���Yn�A���8=7dE.�53$o��]�#1����v���nkb���������������������?}����)??����0-=�e�<{ d������[������D������O��3];<�h$�DvB;O5�w���Y���n����$���i=i�����m���sf�'�����[���{��a�&�GL0��/"�
aE�������P��2&�6��:�'C����\ra��=��%]���#����gd[�o��{��W�$�
�s�i�����;C�:>�&��.)�	6�+��F����"����Fx����:�!�O����xa9L������n��1?Vl��L�.�3��Mt�h�x�UC6��M�ak:3�a����9�&l�C����U��C���I����3F������X����7C���D^�S���9O6d���@���c�� !���.Y��q4K����]&�H��i#�����	��XJ�4Y�����q����/\B�4���-:��uK���W���o�@�t���Z2vt1G��P-	�4�+�v"0�e���=�o��>W-������C�-".�b�ZT1SC��-��IHC�����`&l*������`2.�f�H�^5$b`C�e��(i�D���j�V�P3�N\W3��ft 5���/�L�E0�D���7M���=������a�Z �h���0��S���p��w�!R�K�4�f�
�B�4�!#�c���$RL���4
���&AW38fh���[im*
5�1�!��&M��P�i..zR����9�.34���T4W�y@�i2�csQ�����
���*��f��f�
����ez&c�n<��@�3��@�����g���I�x[I��F�3����L�d��r��$-�0�+�Ku-��C�$�L�?�������I���j�!tqo��7��c.�~�#k$v�����!��!� *�b�Y	T1��,K	�y����~R(�	��jX2���d2f�QD��fD�B�d��?e�4��d�(��q����soB�$�v��_�lbohn�p�B��zI�D�2	�����(.���<��Z�E��:�����BJj��K]�h��j��b�]F������	�A���;�s���n���
g�a,7^s�Z�����1E>p�>@��QJL�q�3�
����.�z���W�a���������G
�oe�8����;Wd���8!O���h0��$+���	���D b�^�_�W\�N����/�Ca��Cf��h�����1yg^��={O@O�i��r�:.�����<6�(�L5/�z���P�v������{��H8����c7��!���%@����e�C���9��c����1���T�	�-X�����>��M����?��\G���:8'7�L����D���O,?a�$����X)�����#�}2eVW���T�[����������
����F"�FP(���/X� @�������!r(��zq�4�����d��ROM����I����0u�xaC���LQp�<K���q����,�Z�	1P�u��S��KE��rL����p��){2Fy~���=&,C�m��������$�rx�9��[;��W��!hWOhd��9�������������!��(/�#�(�%j�/�<,_g�� r���#��r:�o�V���zO�4�8mx��E�����C�Y�������o+2��Ni�N-o�1��Gn*��ZT���� ���m��Mi�PK������J,�($�F�2��A�j|���7[�xi�>C�>�O�m�ktZ�0�2�|:�{s0�V$.����=��S5�~9�E�r��X����Y1���,�3��d�~2F�$�S�X9^��O�5��t���	`d����
u��p�����������#��	Md!����ebGL�����QJ�������q_T1c|����FV�>�O��/���!�~���� k���SE=��X�~��I�O����/2>������2nv�4��_�/|���<�������/�^
�>���wz�����G��@t��bs�Z��u�);R�.Q�LE6Z�y&FY���C����������"�����/���[@Cw����;���R���Cw�(O������M����9�9*-�yV|�Ef=�<h8&��1�:�T��Y�9��	���D�p�M9\���0J`���Ss����D�flY\�0>M{��	.�����"�7/	���t�8�����v�|1�����c��~����ar��!�P�b��vX�������?�mpa>�pi�'c�v�v��S��F"Z=����Ty��d�D?4Q�a!��!:�Q�$�� �
�*R��}����/��g8?vw�>�Z��7��k�H&�x4q��\��$:�f��)-������qI-]�#h��3bhg�������U�Sjk���;RkW���
"�b�<[�[����)����VO��=�C��������@Em��\���w���-��-�tEei��D�����TdX�!��1�<vql�G3K8�5��[��r08`����B��^��	���������������zv"����e!a	��d�����&.�L�`	��?�
C������m��L�k~�s��*
Td@}P�����1�����1t�C�X2l���}�<pk�()�>�o�!*'��w&Tt�zvD�e/������t��&�&�Ri����,8N��&��c���f������f��L"cC���	��l�������1�'�Ou~��O*o�@f�w�����K`@���g�P���}d�+�"����.���o�~!���0`�w3�;@?v�����X��`���
�Rt�l�h;�BDY�1����,��&����"�s�&8�W�)/E"����&�,���1�e�Y�K���0a�'#z�����([/E��#��VH����Y$����|y��*G��2����0aC��T77u	8dL��J���EC�^�ta���gI`*w�{�`��&�Yf�?����!� �|+���C�C�=a���#����w!��#z k(#����0bW��gf�Fe�5=���<
E�� �	*����O ��
c��Y��7�Dq+b�k���_��3����S?>�bFX�T������PV�J�
�:���o�Fb��)T�"�;+C�{�U��28,L���[k�L�\ <6�y��!���d����b�����F*w06�fl���1{��/L��	��cvy��oE\D@�a�^����Y��az=�s^v1g\K
�����8��q&4�P-{�T�j�;C�zj/���\���m�9�a>T���?T#��QOJ��.��<���Z�P�$�1���*�,9j c�`%C8��	�!�>	�������d�o���C�c�IP���W�u�c���239`d����4��3��������yF'G����2gs�?�������Z�S�����
��Q7����'W��24`'����7���:�G-g�w<��\�7d��� Ho7j�s�R%��ir;��3�����j���xR��
��Q�"}�������������������A���1����p��V����M	�x���1r=�J=�]�����B���{����f����/������?�8l|������i���?���(h?����.���|�X.��ty?����3]�k�.���=]~����L�������/����6_>�t����c�|,��Tk���6������}���|�i��k��k��6]l��s��s��c��#*���h�h>��"��,�D�"���E����c�/��v���4.�W�4.N��si�T�>�n���
����.�{�<Y0]����2`�|��e�ty*���\�����?vG�6^|�1t�5u����$���\s���O��p\�'�q����:�1���c�����$'�����t�,[���gX
�~��v����	�����'=������:{���z(�IM����'==������z{���z(�IU��K=�����'e=���:��P��������t�/WC�j��������\�����9U����1U�1w5���%n6t�_,]�AW��>��1x���]��@W��6��1
��������a���b�������U������M�k�����E�k��1�������cHuk`\����qm�Yn��4��)0����-�qm�g7��\�>������,y�+ ]�w�Z��j.������HW��@�������S��\����xfM�fR-F�x��������>���KEc���gh�j��3Q��>N^���`.IQ��. ,�j�E���?$3�m��E�v�$,���u���;�N�_<�nx������; !�������������P�(��@���jag
�Q
;��D�
�	�`7D�L�����U��+���~���)b1i���)M<�ng��u�8lUV�������q�
o,ja�J$0��:[l!r
�����&�"p� $�w#�:��-�jeb�$G��E$3N�"����C���B�)A=�r�r��=�:z��2��Y�I(*�������(� J��e�2�*��y����7�����?v���r�#�� &�-��������ze��rb$c���$�EO�����W��s���%���G�w%L�l�a`N��z���x�TZ������L��������W��0���<d�l��������$&v�I����]	({I���]�kFp���`�/��0�A����C�oV�!����O5{O�����v�N�V����4���X�,^�d8�����?~Q�T�v<���E�i� H����Z��)~Z�~?���!{�m���a��C���:h&J���
�`X�D�O!�,3���w;���a����,Ine��	�7����q,�C88�+a��S���n7���A�~A��-��G��C�3#��GX���*���J>�l����qU$���1�����$���Q��n��������Q"2�����,����yx�f���B`�����Uw?����������`6\�K��x''��K���i�eaR��b������>���t��g�E����'����=
sZjaJj�&��8�|"2���]�FD��Y$0�#���G
���az$��#��g�^���x�'�]��w�D	r�f&�{���tf���A��z��xA� F����/87�3�����Q%��<-��}i���l��MRL	J���:��z��`e|�35_3���E���i����5��S��E��!u�[yz����A�9�0�7����I�j���c�-�2��T���6��0{~��y �-5���r���D�&��4�X�XG�n=�4��������/���Y���D�X_����X�&h;wv����������N%||b��i���D1���B��F&n�~�12��	��m/Py`i�i"�����<���6�jS�|���ie���
Y"�$@S�e���,� *��~'Q�����>���'D���z����������Xy�������$��j�wab(�y�z�G�=�����Uct�(�6�{I}���o���+�Z"���_�#���Wh�2�5������&3&����������Xx]h�A�SV8Y;��
�������Q���U����M;�����y����4s!J��[h��I[�&�C0����# ����/Q�F�:G��JE+\D��j����	EYS����.������)�W�r�D�����d?$�a1m���{���PS�nA�������m�t�rw�r\����	��>B�L�K�L�G��>��'���M�
����WI&h7c���=�;#/��J�������!;���q"�}+P��=w�Qv���G1Mr�9�Jk�q�#�u�;C�*:�m"��J���OK�'!j�������v-�]�_���R��<4�CQ�X�l��@����UO�y�i�S�aU(�^��wH3���`y�%����]�G���&_�Yj"����/E�o-�[�e���'��������[��&�}g��2n@'J���G�r}��T���LQC\P(���]����a,�]��'�^j�-	�|�}8R�P5
��_�	P�V�!��>x���j��	Y��a�S](����p"���iOD�MM�}�O����+�w�l>'����'���L?�E�k7��C���5������X#��#��>%b�$<�}�Q�HG?&%&� ���m*��S,�8�:n�d��2�=�P��)�!G���G5������y�#��H-�]?���������Y );�6i`F(w��_�������� C�%��B>�����]������P��>�aIxj+��}2"������&-!0���U��p���X�c��R����������s�&$���]'����Q���n���aX��~�����c�)3Mk�3����:4)v�YkS@`���m�(�����1�Q-a[tnX��i��0h�xsF�98=dE�>��(�������S��X2E	G�
���7����X�+��[��N�E�����aY'5���<�mfl���(���E�A����p;�.1E�|�{����9�u��B�3��@��=�:VR���<b�Q5�r���������������������S�5��`N��Yh(/]��a	�*=�4B��8��"J���X|��i��O�]t!kD��I���]�Q���8���t���b#��s�DZ�X�2:�D�T=��vg��iW�QF>��J��A�]�$}0����[�7m��m5�-�������/����_���c�U�!I�.����L��T0�����m���4�I�L�hK	lW�+�7Lo���� �8c��)up�F�S���� �_�J���O��P�ae����KYY����W'y��)c�nC�v�PO�wa�����E^>�g<��=�u�L�R�����$bh`�,��7�
B%,�A~�`en���E��L4t0�s�0���C���B�qYO�#Utt��)C��}2���JU�Jxe�����K(��b;}(��i������N��4��!#m����\���L
������w�J�t���(���v�������KL	*�r�9���P^���5�:( �7����aj�����7\�1|�'�o`����3x�z���;�2��y��c�(�~��\��d��cmv��CEY�MD��g��S�2�.n��0?bec����"�p�������-��� f����o����'�$3�X�c��Y��1L�20���S��#��~:J�+�W�>��������[��g�o������N���yNN�m�v[���N437��`�D�O��B�T����o0e������6���+*3�ED
B?��a��2F����6�� �WN�f���� ����Z.���q�.x5 ��5AL	�jL�RP����
��J�3�"������ka���M:�M��w�bk���dLc������!�U%�:XC���9����&�$�u�����n�H-��K�Y�@t��q�`P�2����
�a���)��~r��*� |a����O������
���w>z]����Auq�����e"���h�U;��a��N����%��?�-p�^�-i������)���G�edL��o;������t������/���/��Cf�l#3f}0]K]��5J]����w��@�'���(�|�����c0t��?�����g��o��X�~�O3m����`�,[g��|�PZ�!�H��*�Y�����k��O�� �[j�G6���J�������m��(���������F�]���&R���O|���)��������������e2��O����G���0�](h��~;�/&� G��ao��"��w��-�?a�����6��4���?(S�N�)���Xw�����hk�Kq3M���M�'�������CK<�\���t���. ����vUk��!��n����);�������1L3��2pD�f`E����76E��
��>J�Oxd�����X]��N��;f��Y	d������Hp�l���9���\�����^jO�J���A�����}�z��aB�����%%������)k��)�����2���cO��S31 �S�q�T@���������c�4�f�_Y{
7E�D�ja�����a�	��)���������/a6�&:*[���T+�9�{�
R���CTN93��E,�����/��3��s`������;	�3�n���u�h�}P?���k����19�~}P 4�:��H��I&�����$�M:�Jp�M�s�l!����a�x������R��J�������B;U�&��>�A��H;�M+�\95���I���NX�58a�}P \K^}!������[���n�U ��_��#��	7.>(����_�4���/�r��[��h�}P8���*��h��f�"����N
�[��������p���!�2,�b<�?�����|���s[�l�����{���2��*#8�a`�F�)���>��H��-8I`:-��W�w�C��3f,X���[�6=����T.�S�=�A�
�����U�'�����0I!L���=�&���{-d�nms����h�x[9#j��b7� ��k3U2��.x,������_�H�����+����\����	�|<H�T	.�-�� 8Y�q�
���2���/(���:�;%3L�h2���/�����5���~����?1���?����c�@���ny&\c>�Q���D�X�6�03|�%e$v�W���K�%�F"�M�|����A�p����o8����*����H�������w�v�������#�F�����k���DWO�:�c�����������*3E���1�a�7��Z���f�I6�z��<�,�q�	
��4g��g�������!�=4����|P*���g��{�� �h���2���Q7�'��������;-2]������Z�������$�3�Eh��Q%80>��ABB���a�!,&	�~U��aN�M":�C;?�D�L�l�O�^��Z�m��'��a�J��<��q�Y�+�������!��������8�
�����B2�V<B�3q��ej"�h�v)������@�v�aV�=�����tX�6~A]tLu�(����H�]|=2�]�!�����c�3%�����kc��jK�]�Cy���|���a`��� �F�L!�I��H0����X-���A����!<n=������_$J������/����kf
�[e�k5�d"�r�[�i���F�����%����Rr���2(�/�s�k!�>q�8�*�R��V��$.����|�G�	@�j��Z�D��J�����	��T�w|�|��qlc��g��%�����;��1<��M�O`��)
����������|0�p����a���������O7�������vB���_����A���A������YJ�k�b1�����A(������v�sM�9@�r��C�D��<v=D&+�pV�V��C�
U��y�����Ki�ZA���?���6�B�k���!�R�iEW3���+�����~��4��1���R���*&z�F���xY�9�C����0@���y01Oi�@������E���{��.��Nl�a�]lp��|P 4�����Ae��C�$����`X����N�0����Up}��M�"�
}?8��q��{t�LQ(<���|;�������2���/�:��=_u���o��"��|�����P��,�K5��)��'����SL�.T"�t�)�5?����Sr]��L��7�>^`.yh'+���0����p��c/��`�M6�����Bt�@�||�Mm1������:��o���T�O*�Y�����
��^�U�������=�	o|��#GJ����<�-n�/TI�#7���`�����Z#��'#
"�p}���3���m�
�8���'�������,>T_���B�pf���E/��8n����=s�-1�����~"�����:3�M�@���4��k|����	v�3j�A���<�[s�q�u��O����s���h%��n9��(�p���<Zea���8�-�P�o�N�����0W!*�q�!XA^,��S>Q���|pl�������A�FQa\;����d���8��T��.&���O�N���Q��R�H����M����B��o��^�>�b���b�8K�z����\��SBx��v8O�G]���&��@������V��8
4��3���%U��q�V�V��c|��`��[���A��)1�`���zXn�z�u�+�5��T?y�)<3^6����Q53�>v"�tjM�)�;Z���SIyf�o�M��.D��5��U6$�%����u����:>�k,��xj�2LC�z��H��&�T'�����L�J�@��u���6�5���X(0��&v�5�jn���Sh�����'��&�
��~P���{���������A���G�f���X��	,rN]w�(����������(I�42������!Yt��Zjt���=l�i��<�	\m����������H:�*�� Z�	�?<we�`1����<�8U�w����Q���<nr�q�V~PU�������t��\����m��J����L	j�������!���vr�J
?���:���:dl�K-�s(A�p����A���j"�/Uw�c�ibj��f�uW���t4[���['f��`��k��0�fj"�'8�uM�d3U��7��7�x?)��*�����������J��Nf�^��I�����7D+�T/:Y�O8���a�o{�B;����9��I�+S�c�v����x�'W�i�>�Vu����cotG#���3q��g3p��UA���Lu�a�
�p6_�"�L��-A�[�L����J/51��x���0�����v�S�g����Z]���|3U�3��8��mx����6����e����5�����+���LXU�PE���=����q[�R�<�������PV&��m�i]M��0,��������g�>�L�-��^�#��f'Urp��R�	����
qDtqb��5iG.�J�1���>a,��W�f�D�}�Jxw/c"�E�OS/���
~��iZ���A[u����OU�n�~0��[G��H�\f�
�V��3�=ZrP��L�:��S�z����3S��[��g
�~0*{��U=dFr�P�P!av��3�?cJPt6�>�L�C��C�'{��{6gg�\�_@wG�a�=�`������l,>�;:e�B���Qs��V�;eP���k����E[��&���	'�����n�s�������Pg�u�������t�k=��A��A�������2>9~��5�"B&�.pq�}��8n�9a��Gr6���t���8,����������f|��>��%k�����!�4|j�]��h��f�'O��;T��'�1���0#�?~�3����"�}���1]�E�?��;�0���K�����q��3`����\�����2���|'�A?�d���&oC�>~?�JG��	�>���L.�F�3����`����5�F@}0��7V�}�8�qN�����p'��E�!��U,e$����YVb�q�������O��� |�>�Iu����IS&l�E�]	@L���0G�;�w�<����B�O���#V|����+r�282Q7�'���V��7��a�%�+"��A�|,H�)�$o=�����}�
�p��w��F1<�|;���,1�����)��.�������vl���c2����J��#r�)V���������d��+���8SDQ�vvUN�7���l# �����P��`Z���sX�|.�~�'���h�)j,?	��bM�r
ZT��C�?��Q�D�f���t��R'�����{W}?���6��oX���)��YB��2'�.���&t��3I}��'���J����]*Y�.��N�Q$u:3������K���|B���)���HOut�F��T���]�IKb�*��D�*����7��U�	s>tb#|�n�@p�
����{h����^�J�6���`)�huW��\�7V�!QS����a����L��\Su�-��I�%M��@2tb�L�T�e�i���T�
M:3��GP�5a��&�)X�{^�lp�xt���%"4����&��X��m����j�&](����bT�N����H@�3qlCm�T��>�ao�k��$����t�X�?�0�A{����P�O
c_	j
������?��������U�"��d��L���a��oa���}M��;o%ez�n���wt-S��k*�j���zx�I�
5��|�A=�v�4��0[�>����#��|.wp�D��NKbX
3�.��=�ek�}�GW�`�������c��0>m��mI��q���I������@��i��i`7,q���L�2>�wU9��J�\���L)c���*��`VQ��D�9�NK�A�����lL�@���3	Y�#���)���=���~��=�y�������Q��BY`��!}G��������`s�P�m?#�f'G�ms�
=>��9�|�x7��4/�J"�7>r
4;S�,�Y�C���q�S��`�
:(�a�9�c���~V	E��)�������$ ����S�pn�������gU������hO+z�j�������{�j��;4���n�i�����g=���Y���~0�(��|>��I�.e����}�w<�O��Ou�;��m�w|�8[����r���bK;��KU�;4�p��L
c��'����&u@]*{x(�S��N�A����c������a^C&D��N"Z&5&��� ~��>'4Adx�^<
��Y�2�(Ln�������f"dx"�/d�2��F�
������%�����=M��B�����e,��H7h���1���[F�Y;�>��y��@p ���5w����J�u��2����cv�0Z���+���fc�#��Lf&>u3�3}�z��������{~�����@:������3k�g�w��"��L+���|+��%��=l��	�f�tv��V�8�(�a��0�OXS���ZL���~qK��J���/��W�)/��V�����r�~ndB���l~.��R�/>��e��y�M��8w,�`��P%�~U��=��;v7�bs�����*��Z���dP�P��h�'~��y'��c����j�N��h�K�S���;���t�a#��=���h�N��w�ss���_MD��
qA�MWPU'�������aY�R32����lQ�8=��_��J����N?�	)��Or�:6?��	��a���?����|�>A��+m�3�S
����	��~|*:���P�����^17��i#��}�_��L��)>����+�3��O<�W&��2��+��ii��Sj!�������3�H%S��'� l:J)2�iF����������9��W��E�&N g�C���7{�3`"8wt��%D��LZm��@���tE���)�|��L�hk0Y+���Y�h�`��wa~���#NY�1�{���2!t��^	>{��L`�qx�!�{�A2!����#DP�f�E��*�*i��L��<\=����hd�Zsi�bF���t,o$x4�����-o��W.T/������$!����#����>1l��a������7
pI��f��V��V�)~d������X�. �--f�����8c�_$	Re�}�������1�j��CA���q��Na�-c��,�XHW�W���n+��_cDe��^XUu[���(�L���q��.*��GZ�hd�-\�C+t���&��Z���cvT�����U2�|G �\��-;V-���)D�U�����=�(�m@�
�0�V#��%�\��rq}k�{uf�sIb����BK�Zg3��n����.�9�[�a�%��ADe�u
�������:`�.q(�u��������U�DWi����=�]J��,8�z�q����Qj^e�y����,2.z�q�����v
��+�h���5��i���3��i��!����������Gt�y8r�������T�����
�#�����5���T�O�w~Y^#�����7��)�����$g���Q���/?����6��s�����c7^�����k����>���?�������������[�g}�G4��6%��lW�Ha/yz��ve�	��9�0�<'&G�:et�3W���+���U{�3-�M%��MY���|!����I����t4�LF��>������c��-��7U&����DH��0�w�D�
��\�$�1�5���d��q���`����B�T��X���+O4$R�,H���$����v�%F��w%�	zM��������V R���7*�QoaLt+#�@:�D�|��neK�!�]B���w%���TL��LsJ����9*����W&B�`	�����^�����1�w�-��~������*�\s�UF�nm7���vx6�[����Ck�_<��$���-�Q�U�ib�/�����X�
�F2�UF0$�#��fL�A������RtVi`~W�Sm�5�=$0�Z�Q��cIh|}�T�c���B *v�����.J2������������,><�1O�0z�t�BL���������-2��Iw��E��E"2�LFB\����!� %�\"�\�tK�
��&���o�Z`���L��3�@�h����G��W\x�.��8�%�I\F��c��U�����ie&w3�\��5���K`Z���p�_$fr�������,��
PT��noP�9�7`r/�������L
�1�We<B����~f2������x����d�S�
N�,:7���E���<C4�Qe���w,����8���q���
�//�L�'�����"
E��PkV�6-��T���mTo#XN������i���0`&��5���������hq��}��
�Q��@��0j-�<r���pw��D;������������Btj�1�����<O��q���42(�bh8��w"�P����V��������(����;��oat��s���`�s��qK�9��#RF���\��9�lV��r��]�8�B B�:���s�"�B��DN�����������Oe��
���!Aeo�(�L~�p��M�q0<�PUc�.�h}C��Y��b��E�����.m.}1��L;1��,�`��?7(g�4]1h3m��i�&C5�N��~,���hu�}���73|�vH���df"E��$5�R	���d�{�7��9G�rTb�<�
����s0�t%�GV���%b�"��j�����V�����@A�V!������IR$A��x�L��a�D�����R���������F1���	����jek�	G�`j>���.���^P�r�a�`T_��<  d�[�'������l�?���u�`K�,0-�'$��Y���8�aMz��H����&���Ae&`0�)!LF��]g�dD�a6��8��C���[���St~7
T���hYt,���+�"Z�cO��������(�/�V����$��H}�0M	��?�]��Y�i��W�6�t|`T�I������]��o�O���eJ�u�p}�|��
�r����Yb8�-��.�>�]�Y�&��T����T�;���pW*��7F.M��2ZP��JN����a���4$�P2�y\��m*�3��q��UI;=������f*&��I������])&@O�����(��h��;�f.��l/��q�=����n��8D��t��������=t����w>����L���f�LH���;,{j��P�-�<��i��Dj��.��{n�a���7�E�	-�����z1l��f
��ysS��2��9�^���)��\.�#x��c��<����	v���	n�	�lH���	��z�t�-���D@S;����#��Q��5����8a���e�6�D��b�_�F&�I%�h
{��9�<�c�2��]O��u�q=�����f�B�����wa2��y:}s���&�����6��TBt��	48����r�'��pH���)W�0����F�UFp���l����B��Ty������LT����-g�1���A~�?�����g�2C�Z�)������ ��H)����&9��a�>F�_��6�������b�3�x���1�r��]rE-���tU��r����H�����f6���H #�mN,
+��a&���0�������'��&�����Y�y?��)H����D�N��<�y���;j����R����f6z:a����8-Y*�O�Bh�m�D�o[�s��;b��L���}�:��K�<z��i�!�Hc�,�H$r.�sWo45������"���t��C�����fO�)[���?���	��BHg�-(h��KLN
!��w���
�[��B���3mc[0;�/D��M��9�3@@�E%jzuj���i�L\U���s�^W�s���[#�f��/�l��fZ�(~J����B�P�e*��(�r
1��xn�����yb9�t7f�7B��MqRj�v��ps\�?�.|WJ1jYSS��U�k�x=�5F}��
k�D��l����2�H�������������L�7R������r�A�"B���t_�Qg��9����!������e%b��t�M"��jmD#&1����b���/�U/��|����B�T-
���0�mebl����w7����-�b�(>kak���d<��!&��T���I�M�$�j�v3������wa2sN!���'k�m�-T��FS!��Ed]?�W1c��`s%���0i���1zel�����#��Bh��J��p��9�iN�g�����:��eC��KL�A�U�W��>u�]��X%�V��*���sD�O���2)2�}\�������(�?p��v���(�����M��~LN�u�o�Y�iaT%�O����������(��`�����F�H	���|`!�^�����A�z��j-��*"on*����`����g�����U@��[/��������F�}.^���'=\��@`��j8P	j��n_�1�4��*��v���/�l�S��0}��J�v�U
������X`;�b�/�@"U�����P�meT4�jYA�ij���u�����E2U�W���4����v�����b��1���N�U�I�HF��\����Y��h�|��y�T�����sMT��@6�~��w��M��'�Pi��O��gp�|�
�����[����'����OJ�9��'{-Ve����Z��9�
$�����gx����<D�w!��}�h����%~"��/���""Y�����#�E�'����u!��/�$�s��WC`��"-����OP��t�
�}2O��H��7�w�zWB����O���I�����Z2�]�-��-DC	1���P��
��,�0���1���i[9�^IH+pqD�_��8�5�*LKM��3�$�<���*v��q���F`%>�/�~)��u�0�)!�c-U��������_4���h&�+3��(������C���K��6�H:��p��P���9�c�H9�eb������j�P�j���V3��#X�<i��@p�h�6���is
?�
x�
3�kVE���&�@NCFED��� �~���r����lUB�����m��bl~�SwHp�G��m�ro���/���5���}���_��:-��8�
����R"m����N��S+�'8L���F�@R��	=�@�E7Ch�.3����0z�S
�_Y�B����o
%�����B���iWN	Q���5#���T��v`j�o�����(����F(�����T�>���[�T����pJ�\�ZV.7�����V��(�;�gZ�~��J�`]j,!�E���R�6T������
_��.����}�����>ln����o�"�}�{�&_(}�<z%�n[Joo�����o7���u,���C�1��Y&_)|"���I4��7�4�EEY�B�w�����R���.����/
�hK� 6:=0�����I�P;�d���	&�NNP�~1�m�z��LJ;�\S��/�G'�L%I�"�u����L�� �HT&m�x����him��q���Uo�IR�:t����L�>�^CU������1��L!���0
I����-L��2��c���Q0^6q���n`�S�@�����E��������]wY���RB��U�Npd�PS�}qJ�T�hG���������!���{��N�eG]&a�"��|��y�~q,��X��i�'6���a-<
��E�����Au��~4�V)�D�]1�)�����v�F������F 2�_L`$X�?�����@%��`�8�u�_������v���B�P$�����?�L��\a�>�k����h�o����[����H�rx2.�B~�������2\��;���@��[���me�x��F�{2l>1E27��%��O�-��`�:y;X����\���	�)��(����Q.�����{
���G�H��N�~����Ib�,YJ0
%�����[R�jd���bn��DjMy�eB����J6u�����h��
�������Q�J�H�Y��r>�y�l�o|&����������KT������(�m����������W��",7:������U��n����o���w�h_��!�:4��h�J����?P�B���i�8���]���2�����;��pi��4,��]���= ��@�.d\t.D3�"L��2.�o80$,Azi!0�TL���40�gB�_�Yox"I�/E��1T����$�������dj����G��k�#�f�MgUf�Wz�1E���[+��^�������|���N2��ol��B�a����7��t�Y������V1
�P*�h�P���T��/�j���q�|�A���[�����N����[&>��(�!��Dd}&�
��3��w����u����y)����{�1��0�)���>�N�24$�(�B���$���$G)�#,��L��}V<�:|��

�yJ�������Y0����}`e5n�E����H����[��p��O���2�u��\����:��\��5�/9m��2��������%��*Vo�k&l��4���;��@������(W�O ,^^������X7@�R���+����@��b72�
i����hP����Q��d����|��/��zB3i
���2:�<(��8r+�k�2(��=N����������&U����T���6�����71���69����xoH������s8��"k���I"�v�������	�t�EE�����ft88
r^x���Q&���E�Z"l<bR�F]���$#^n�;:�E���"JQ����J��`
2��|�e����"��cGV��C�X���`"�����<��i5�O�ovsw�D>8�V�M���[s/ng@��(g�XO������O	U]������>�Y����bR�G)Q�=Ivfo�*�����m�����S!��w�HX>P���,(�Z���h�������h_�Z�q�"��HO�^�"��'d�Sj��}f>L���e!���e��$3����2u��u@��&�p�9����dA��b*aB(�F���9��E��P����B���{�>���H���@�������3y��
���p	����1� 1
����:2����L������}y	���J����t�W�	��c��7je3��o���L�d�2O���0[��CC�����m+�"��7s�.|W�����*���k6~r����nW������#q�`����$�/���6����'�v�����?�AY�:����F��H��}��U��X`�Y����o%B��y�7� ��
�IE��;�^�D*��C�
	\/$,{W
Xt�b�	�;f�>Np�u�?�"w�c_����J��0�g��POt$x��h�7���|����n�x[m%�`�$��]U��/��$��p� 3>�&��������">������{���^4�^�>&����-����)�lj����0��e/}��q���JL5��6l�����Hi
�����h�J)O���}��\�������h��dl���c��]f1����`_���bMv}L+S��f�$��6��r6v�����NzL�;Cw�����TO�5�;%�2?�|�r�VQ��1���y�F��S-�`�D�����}��rpK.Z&�����l^N�/��b!"1��V��A�)��i2FT��3cx+�
�B�`T�/����#�����0�������e��BH+0I<1�����/F�:D�Y�yc�l����? s�"���R�&#���n!B]��H7�h{���	�����k����
�����9��/�b9](	�>u��A���b�&WP��2%�r&c�p��Ql�o�U��
'����C/w+�:���FWe��-�t������T����!�c=l���'�e�v�eV:���� �h�^	_�k���)��F�����G�*�����f���N���L5%��U�T�UG�qp����z�4���{�'2���=��-���d��*^�{��*N����R
�������A��C�]S��<�+[�V��y��O�Xu���d7 ���C-��E{��X�Z6�:��
Z��;{�T���.�T��
D����:/O�7{.0��>m�M��p�����zft*����/����q��D3&:������0�����^��[L�!&�P����g2:{�\�b��)���q*>C,^���(l>2��O<A�K�%~Lv���O��a���	����L����#�vhK�3z�n�B�Hb�
D��C���(n�0��T��qS����t�J��yI�t�`\$X�"���jw��&�=�61���$���i����������~[������J�9�?�W���`o	�<��J��}�9ka�s��v�+.������B�@}1
�	C�v��J@�
�������Y��C����7C,��N�o"p
)�vK|�M`Y���T��)YF��Q�P����B����!�����o������3�2������pF��M����7v��+�����pl���?I1e�u��8���cnwO6���U5�r�v�DP�.L����G2Qz*�2��dJd8��~��JLKuCH�;z,&7�nYB�
C�Z������S��H��x��]�A�� �'*��bbOI��u��w�d��������Kwl��^���h��k<��H����0�7�"3LS�"����d]��"���44+��c���������(�N���j�1b���w�b�w3����3���{l��a�l����6��T��k�����9�}���C�tJ-�5�}�$�~17c�C 	(V�24��c��w!��%�7x�fID�t� �0�X�+��!A,U&�Z���ran�h%������as����'�Q�L��P!��O���K��QG�`�6`<�0���9Q��=T�V�mn�����U���Q��.���L��,������c�Y����������GF�����z�W��}�Z���/�����?�����������������������c���l�Gw�,����r}��z?�|0]f���zu������{s�E����6�EGAz��;�
�tzB�3O7vx>��'SD�n}D��<����,Z�fxL���J�==q�]�Mz�vn��XJ�f�9��_ps�mM���f���<��?���;�m{�V�d�/P���7]����a8�Ft������������6������ ��E�]�8�vS.��A�-*	`����� N��@w�p(`>
�.c��(Xs��4a�4���e!��>#��4�
�H�j�#�s�{*��� �r���G�IYK���~���""?������5�H������.�%2���u��:6"�Z���#_<�G%����g����I�$!�e��Igi(��
�b�!�%ad[US������K���@g�Lx�*!�_u+$���3�����o9�9:r��Na:��0�)��
&j�S�_i*%!y�,���������#����h�p���=�F�r�*�Nia�E��[���oW*��ws���\h�5������'�Q� ��i
��q��Oh�C�I6�)�T)bhR�p��N)X��j@W+�b9��q�b9Vv ��k�����P���y����,f����v�XE��!�3C���IP�	?�d�&�L������U��g2�Q��4A�dY�����)�����3W2	J����P�
��)X����-�������B5����g��60�4�!�5M��DF�iB�$����YGS5	J�P}�W�P������TM�6�^����4l2h���x�t|S5�f��"���P��m
��/
������o������U@Or����%f�X�e�� �=Gm��I�$�G��l�F�I�l�o��(��9�����QXU�����X�}�]�n?�fXqY7L8R������bu��14��u�@��F�P=s �������i�weB�dh�5��M������-.}4(��[��#C��
e!��B�c]2�p��Ol�QGTs`u��=\�/��L�M:���*a�|�F����0�|('�Hq��a
�B��C��'K�<.fK�m'�E�qi��ht���.����k���E�-x��WV�!�N�b��FV a��+-Kd������������&�~��_4��������
z>%�����Q$��b�j(>=#�r6-�``M�'�2r�aU�)�[�����B�zOH�V'�`�Z5a;��&���>_*�`�?�����q=��Rd��'Q���������@Hw���E�NQ2����%p�0*��*e=
t]�I���|x����jHX_4`.�`&�w`���
�JG[�n�\`���9'��`�3��^����i��0���Z���;\]d��#�k�����51���t*�b�uRp+P��\�i�P�d�'�^P�����>�����7�<jf+���DK�������(S��GIw�8�����a�P���B�T�,NG����.,/�60c-�����Zxf��������#�_9�T�{��=��� ���bx������:K�����-������x*���]k�-���)O�d����'!)�aY"�L`�
��y������F5 ����9y�CSn�|{����V�"���e�7lT�	�I`���~�^��65�K��P�9eV�a�EE�rL/&h��T���^�X3}>�/������o�>�i*����3��' g_��k��������!����Y� M[UF���P��O��2��x�{!��.o�������K�H��E*XR��l���_��lh���>����SNn@���2�����-U�����.���������"Q�F�X����r��e5}���,)"��Ts��������������ENP?n�/�����S7�y�O�I��"�]�'���Y����2�S�Z��!~|��Y�<u]��s>FjA>�`��5�����dU��T����O&g��sx!y���R�<�*X�O��P[�F����"�����d�=����)��ji3F�h>ZiK�@�C��l;c����@I���-��@��q��P�H���`bi:�K�4����AeX��q�t�|�i9�������������[�$L�5� Ar`@��3T�5��!z�o�d"l��Np$��f�lI�����m�y���~`��=������f1���o���b��4��.X���	���D O��rn��d5O�.�9<,�6�e�K�������nm(jqi�7���RH�|��d$��������������xy=�n��i��$��u��[���������+�]1q{
�E���� 9��_����x������!62���Y���d��R��7t����v�Ahk�Cck�kk������Z��3WL������,^9�l�F�������J�'�p�
zC�,e�$��A�6Vvg�Ie���)�H�����P����&��������HZ�`�x���dg�YPm�y�e�������M��n��#�\�H3�-ML������X���DH1yd�8�{��xr�cs��B8�O����4�5[��v��S�������9Xx<���J�UU�66��������F8����|p	����������D>�b�C��K	l�*Gv~�pIu��b�
%��'���|�:�8v���?s�:�,�D�:&y1j�H/�8�nv�p��f�y���b"f&��I��7�W$8������=�����z�S
j��k0��&��-Nb4�����r��������X��Z�<���:�>���������ouw�[�d8QC�b��n7����|fAN�32�tL�����a�;W5��#��_�]�.U�s8��L�0���X��=Y�M}e�r��z"+�8��9�,)�@����L�Ft�\��mfZ��jg��8�C�tg������1}3K6���m�fD#�n@�"
����\�w��
Zv`���>�~�sf��m��e�-�9���w�����a�dD#�xL�@)��v�c���P�O����*Vd�(���c?���[f�d{������d
�M#T����%������B��6�����s���B��x�vn�t�!�8�/ZH�5���������B}���J=��N����q���l������sk��9W �����C���hf����^I��?B_��-���� t[�2I��>.���NJ�a�e�
���WQOP`Uai6*�:S���?���/8U�O�.2��A�)����,7��k�<% ���]	�����z,�b$`QW\�[uxz��dbg9������f,�&�;jb��e��v,�h��
{�,}���IU�/��-�L	*�ky���4d��'����u(Uz2��B()apB?��O7�|2Dn�����oQ'�;���-]�y�B[33C2�L�eD#�����N2"2��Hs�:3=W�I��p'�8DVC'�`4��XJ���aI�uuz�?7�l�1��&�����S�}��{
~��������q!p�b�����&�g��}��]��[g��A?���4�����������3���'���iJ�#�R��C�0e���.�����C��d}!��OU��'�����1������ {DJ42I_[��[�o���*6�\�N��v�%�)p�m�is�y�����/?3�}����k��+�h��W��$�+}�+���{�E,�u����E�/�I$��Z������d6%�)��V�>��/����3��!��8�ya��
�6�a{�
�h��Y�fsb����;���=O�(*�\m����\��4R�Px�9��p�?��o�7A.�[��L(���<R;<���"��z3�4s�5�|x�T���������3���}��UB���5t�ER����F=��	���6>�a���A��j�l�	\�x�� x�c����~��t�wi�x�B�n��i���3�p�E���.�����.R�0�{/�fs�=�W�i%���<���9�����2!���q]�{s�������_�
���*�j�(5&��� S{)��9��GgBi�����u�|O����&�	+���K����p�:��}��l�X�5���U��!�@9�v/���F�,��t�X@�g���B(�8NIF<�SA�s#��6��8{���1��]jfP������3�������%���lP96=�8:�@,|Lc����#����V�~�7�2���fbDk����3l������kD'�J��'RWn�C�'��9��/����ps�A�J��/3���$���Uzq���i&>����z����Fai��/��:�Ju�����JU����CS
�+!�G,jJs�e)M��(P�H32��Lh(��M���1&���8�o�/;H�����u�4�������c	
�s������@�S\<�|QQ\�����/*����/ng�x�|(.j�R��(.�w�x���������1��c��[�����\�b�5�\C@~q�|(.>G�����k(.���Y/�������$/m���`�V{�vMA\��[vMA\�*v(]�H~UQ�z<���tU���U�,����})�^J�/��t�|UQ�:r5�����R�]vl�UE����UEqu�2�����y,e��{s�����u���(:y�R
���x���g��xg�����[Ji���w(��^k�A����E��E�Fi��L������.G�!��/G��(W�r�U��(]u]|9�������2�����6�
���:����>�*��s����[�:���\���B'g5�W�ZW��/G�����Q�z��
��U�_=��G����Y��Q����Q����G��2�U���~Ty*C�Q����G��2�U���~T9*��Q����G��2�U���~T�)C�Q����G��2�Ur�x~T�)��Q����G��2�Ub�X~TyI�����4�Pn��N������;�r�����jc(��I��P�WK��R���j_J�������d���2�K���C�_M�w��	J��R�Q�<�2{����#��h�gB�Q��@���#g72�UF�lIMH<����+�������M����]������������1b`��@�Z�X#D�`y
�/q��)����P��N����[���E��7�{`������%$�������QK�4�s"t���BHtmT�"?29����?��T�*��J�����tPpS(����u�*E�&>����C�w%�n�?����A�\�!lUS�+,��>�)^�[�)�!z,��X>����������3O�(�Pb`��B�r�}7z�2���`m���9�fd�e��J�p�S�L�opeT��"�����Lp\��H���@^���z���@>��9-���3w�a����1/e����0��]]�����]�@�7���)?�����������y!Z��bx�N>9a�c����OJ;��VF�`�pl�>�<&%���K�b`9^���=>���&����@%�k`���
r�h��`��c��t��q���|�T��#w�������T�(�.$TR��p �P*@��kB��x6?�5@w���t�=������U(����+�����������.H��L<ps`(����u���V��{S�r2
�w!<-�.t��qg!2<i�8t<��i2���si����2��!�x���`s;���w%�'���`�ucSY�a���Op� �A�I����t!G�neK��}�	�xR���t��j�D5,u���D�N��[����s�;:���
���BSU�&�XI�����]�����_G0�p�qb`_���F�����J�h-���>����H����`�B�^Y��N�4�]����/j	X!�9�V�!&�������6�kM��T��HU�9��f#�7L*�����8��TKa��f9�uu�� � ���F���_U�ax�8�X
�J���|p3�e{���p��2*�2Z���j6����-�@RY������F4������K���
A���mr�k>��0���������s
A|��._�oD���s�iT��O��h���������o��m&��E��������T�}+�/���'')zX�0���8M��6���l�Vq��T�w%D��-C2v.�'�q����g<�#.�����S��]*��:m���R�E�~MV�\k���9I���i��oH���'���u>�%NH5��	�L&����4��A�d������ fC���.����
6Fd��	���af�%�e�������h�q�d��s�2��C��6��������4 ��
�pn`:z3�d%TohlV�r���!}oh�`�(8.�����|���=CDx�Q~Mai�%�o���?nH�D������-���k"C��M� ���/�#��ux���K���H�������e4�-}w�=��v��nH�z:}�����z6�@0
}����86�keG�����s�}�w��.D���ZMw��+�C{k�1KW����]�$q���1i��!��X������Q%�P��=��e\d��JpTpx�wiX�7����1��d��8 X%�k��eFN�J;R�&�c�vX�F�}.f��x,&�8`(��8�n$����i��.�������B���V�*�c
����
W�U����*���0lH����N
�~,�����C7z���b��B�-#��?����HPw�y���bk���/��#|�Y'�uZ������C�� 	�����N��`���������E�h��K��D��j��.���8bw&S��n����i-z$��O��Q~�.h[�7�t.���	���?��0�@����{���N��a"=*W�u����lpr�B�9eUkI��;����\�Y�:���Wb��U��i��2Z��"�r"��U<G��I<�.#���J������E�=(�e���J8�N+������&
�A�IW�D�a����Q�]B?��%}nC��b-���pW	����t���CA����)Aw[�40������'��.����+��7�y���q��
�|�s��g����K�������X�Nm�s�*\eL�S��s�P��O�'�|.��'��`��S���������80HP�����T�P�� ]��^`y��+�����������6p����'������Ak�-0�s�&�>?C�*�O�����6��7�C'�1m����\^���!��yeG�dB����mWK������p �u-�����g#��%�C>.���2�'j�q�a������ ��V���
���t���BZ���GxoM���.����8�A����K9n��|�.�����u�F�{���G��xX�5H��aN�.��+���u��u��?H�o��8
|����1��������&d��R�yS���zZ�2���� }^���{�t\�� ���A:��nMi��ezreCc
V]`Ds�s��t�����
�3WF�5#5-*���H2U�[A�iIb��I4c���1��v���>WY{�>��b���t�>i��=�e�l����P����"����fS*ma��������p-�2����t���Iz"��Td<5���
��{!�Ws��y%�3R#�Y������]	��DB�*�j�������+XKl��]���c��/D�]��tlqQ�����f�8�?h#���jW�w��3�Ub�ve��b&�k��B;��:W�Im�xk
R�;���r�[������E"��t�J����]�ROF������g"2mq��`3D�m60",�iN�[4&�?�b����s�Q
^���F�����bCs�'�N�J�2���Z*i���!�����H�<�����ixO�[�$��
�j��Z�h��}>m&����N�*���~F9��D�9%����$|�9��v|a����[�0c���F�I��a|����HDfT�E��'>�%��bq9(�mF+#�%0��b3�iN�#~�g����8^��A��#W�������Z8�(&�?`~�����t|z'�L�C���#�
67p��d�=��u�~�iq�}�a�f�^VQ��< 
Jt'����(!k��}��"PN�?3fg6���� �4��z���:��p�f��4���8,�m�qP��P� ���D��6�h�����J���A����`����W&c5F�,%kqNKn���]S�%��������-�Rs�b?�ct�%��7Fk�&��@Q��O�we������+
A�>���GL-�P�a?h����w>�.��m_�`��h�m��P�q������`���t�(H�<�Vn�	��!���8F5x����z:Z�#c>�����i����������8����s�� �[f�
��b�s��X]Tt��vO��'��B4�x'��	c�D0�$�~1�4�4���7���*����Vj�W�y�K������F�A��i;����z�[��	�Yj���I�B����{���6A!�����	sv��f-�]	�6�� ���i����97�����y4���i,�IV�E�~�[�#��V��7��J�hX�m���H6���i�'l�Q��a��#w�l�Jh�\t��&H���������W�H{����kja�555�irM)�\S|%-1��8�������c�C�'���6U���<]z1������Ekc��hf�gja��V�T����	L�<����������m�qM�����6�e���������DS�%%P�����E��kwg��+A��Sf:B���T�^������
BU����}Q=��B��v7�*u@JIfTjP_���g�������=cO��S��T<n7`���j�nq�h8���T��W���M^'��Z��(���A9�rHG�N��M��/a4"�3:Z��T�R���C5ad�pQ�*�Cx��XB�-���?E	3�OE��?DIW�Q��~^��I3ne���J5��3�,)gs%������@$��1$#3�V��
�������B�a����6��T���L���[y�a��{��x�J��t�c[��	�'���l�-�@��?��f��iN	a���C�CC�M�z�l��&��[�������f-�����f�%D�q����qf����q�
R�&,6[%�	�����L�qB�J>����3*���qxf��BKu�0Z�M�2n��yw�tm�����2�'����v���-�p�
q�����`[���ve��s!&�{xnb�N(1�m���D3&�p��a�B"�80�X��D����$�1������7����=
����
#ycw�jN�F�[.�z�L��1�0R��C7�X�������!�D]s�-#^p�]�A��V����~bf�ylW&��W�7�cK���Q2�R����
3[?��
�����������D��={~�
;p�|P��c�*��
�)Bc�'
8�wv�4�
�J��L'n&��������6�*������pw5U
.fz"_*��m�*��Tv�aU��B)��u?����s?�_Io	�/�����`=i�TfGBsx`���5~����j�[c�S��Z�m����7:�~��	�>����B�p�I�������Qm��h�&�}d�6p�`p�.�����{�V���/Y���W��/]�C��?X��e������W0������c�F	a#����ox�hg��9+~W���V���vVoaw�������_����������>6�|�qjO?�=���uG��V�����o���#e��Z�g�F0'
A���9l����{�p�!��JT����������m���Aw�?��{�+��52��9������33�E�<c8�U	c��_�O���C��}G4������*)Vu�u��34x\���l��B��C��(�C��>�������/Z1<X	��4a����i��>yP��L�@�[�h�����4��.�u?�lv=�E"�{���8"q��>\L}[���{��	����^��m�A`0F�'S��^X�c`u�0��I8;���a���;7;`��2�csX�3���T�����ue�-�4BdZ�xF��6!	��p�23��69|�lP���\�> c\eP��SW/3���7c&�V���ji"��jk+�y����A&V!$'$����W��C�@X�X�X	���~���@�g���1Ws�e<�&dp�J�a�a�wX-F�l[�p2�
ED[@�����H�fN0�\ ��MM���r,o��F��.�$��7W1��7hBu�V���cU������.��]W��|�-g�������~~!�:L�=����!��4������A#RW�NA6��?uO4�;Mq���u�NC�2��W���*���������Y�B�b�A��a�+����}{���m��IUf�v��Ci��j�+���U,����~���P)��]a^��_t��9-9���)��3%Q�:��t,�@�5�qu$�#~��7��
8q��
�����Z�;{Sy#X�S���,m�������0I�a���W�px#���]�����)#$�'O�^8�h�5��[��$��yA����A&��9&0:�`���i-%�3�5��uZ���]	������n>��"3���t���t9��T�E��\4F������2�u)�4�Q�
�`;���>���E)��c48�J��UB������! �Pr��;F���.$�����' &_����!7�~1���{"L�����hG�F���!t��L�W:1\��Y�6N���^�����>��$cA
�������5�w��g��OgaP{*��B1�p,L`���;����]��b��54���2������Z���]Z�U�B���mbi	71`��j$���1E���I_B	>��(!���������K!�9���)�����%!p�����!���+����$���/~�)�B[�d����vz+��y���c��VFK��+�:bt��`��a,���O��B���rq3�� ��B���/��QE?@�Y�{����X���.�K@[q%������?HLC
<T�����,/��V����*�C�8)g4����c-�s���^H�Z��
m�$V1���z�8==�%(g�X�������2�,3��\W���Vf0�b��s��1_���q����� ��[����f���w2�����4��.���I����F�W�7��cN����Id���Q������3��y3�n%�h���F�x�o� �	O\�{5c�`r���Ln}�m�Zf��/��(ss�7��F`VK}ALaeo���q������&c�0Kj���
��/��
�����4���Pg!fa0c�L�:��
����0a�o��Q�E��
���do�$�nNKi�^��-f�����}=�Ag1�A�=��f����-p2��a�T0��vM��8M���a����m7�I
�����7�78W�d|o=zS��K��\�0���9M�����2f}���m��0ano���Io�������n���m!6]�fef�o�_�[�����
���>Yl6����9��3��`��1��������6��oU�}/���UH�=�/P����Jf���H��z2��i`~��`�u�����~@�Y�$�FB-�K/c�y�X&~���	��)�;�j����f�n�f\���B<{y��_d�
�cvj%����2
��j��+�z���(��ws�B��+)4��	}��o~���cw�-����yw���w��3v����U����a�j���(fb�%�~1������YZ��@XS1������&o��0�3nQ|�q�	\"�4#z�>�F�dv���H��wt�,�[^�!��_����m����{��\����G�B�����e�c3��@2�������J�]������P[��*���G}���'�M�<c3N��0U5/9�AD����JA\ia�#���
������2���ne ���s��5i:!������X��T���5��
��>��f e���S<���K_!��
\f�}�	�hK3�Ov���2����'�#�E�w�v�.�
��2������iBvtUI�_�N��;�q��%*����sf��`�s�&�)>�i�]�t%�����K�	l����B�a+*����*�&���7�������|�;��0a�K�*N^��O{��1��B��F����l�����<<�x!`z�\�� O���%����p�U�T���3Xc�	<����Jy�	��vR�������;�.��J��H����`%&��*�������D�����I<�)%�+�^Qmj�^r| &��R	�0]9 �;�*�N9�0��dq}+���
�����w�����}�w��eO�Z��<��2����b�n>i�	yGw[W92P���B�d��0%1t��3u��#�cVF���FJ���y����M��h�ns;s�ce0��
���niU&��B�������������kO?!0�5�#�2�����,a�"�.��.�L�5?�2� ��	���^�	4 ���|Sw�43:e�����~nB���o0/�	��n���|�U����:h(��6��Y>�z
��+�������
!P;%��e�wo��n8�\��G&��J��#8��g�W	���>��
���������[-�mz��zQ}�������P���-T��.`�*<yw�h���].Gg��``
�W���7l�c�_�d&���G����T��b�"�2Qf0���{cO�x�2
���������0�u�������C�-L`���������%����\�I����f0�_h��]�t_e�^��\�5�$Q��'�>�5L����������L�UF��N���	����p1�	��B�-r����7�a�<� ���#�<�s��Scl����O����/�*���W	�d�D���� l������`[0���@����U1�=
�E������FY�|�9����H�'���-V�7R��f k����M��De`B��2����4F�)T���IH^LB�m�c���c"O�I��e��?L:��V��Bwj�D�+aS�tD��?���Q��]B'��K�J�@�Y���p�*y�-VI�)�e�,�Fe�����B�w�6	t���4
!��y�@��(�0�S!��MK?���\D�8+D@& �y��"�����
=�z'�m��x���MC��G��_��C������26�B�0���5��9k0����6w~�GW��7d�x.;�06
Q��4|C�1���&JR���������06!F��jJc@e8Q�p]C>?u@n��x�Ps������NB��RV=�O�0	1&d��N�D4OB\�1y�|�s
��/��B6���d�S:%�6!�/�i��Z"��3���0����I�����a�mQ���(�|����O�j�J���G���50G0z��Ov��)��Q��������o�b�-�R<����Y�4DY�
���Q(�N�Tb'TrB�7N�CD������Z��LM�r!�������F������^!\�z�L��_cZ�E?=�����|������yW��[��Ng���p���������Z��=�KP4�M=h��#m�^���<�D*����>����w%
�����-^x���V
��'�1��z��Yf ��
��+��%Q[�-���s�*�6�f�L��[@��/r�[!8�	?�	��i�bX:���hsq-�u���w��8��iN�;����p�\	��Fn��)��BU7�L��79[2c0c��4���`F�Z��kn\�.#�e�K�S9[�����������MP�igDm���0�	j�z�~��p�1A���1�m�1���w%|�:�X�c��o���ON2���0�H�Dt Z��3�q��z�U�[���&|���Alile�38-
x<�
�|��ufn����~W��������U����q��V�/1v�2j��;�h8�B{��qh���Y3A��L���]��,XBJ ��T���)o*�	���B�>L"Xl
�2��lY3������.��a)��Y���vV�g/�P5��������Ac\�	���"Z�7`[E��1v��X�0&pw�8�Fo&=\� c��K�,��~1\�0(�?e���#[�P|�B���iYB��Ih�0���^c��a��������R	f��l�	�2X���d���������8v2�X)���-M�A���9��2��������	!���'�p8l��D���������I#�����!8�N���#�'��l-B�[ialyBJ���X��R�:�����~9���
�6za#���Dh��3V@���	������;��1;u�V-��J��D�:�����pUB ���cK+�m9�� �j���Y	.Fh`N�����i�p��.�I$�jD�m�\5J��1"��F���~���������@����UEqU�m�U�tUB��UEr��!��QJ|�T�c��3����L�=F)�1SQ�QJz�T�c|���x��}K
�U�v����i*�j�#�-u7��ZwW)��� �J��*�U��1���R�����{��k�?H����a~�\������������!��]#*=?��/?����6�Mn�\>?�v�J��n��<��#�n�������?~������[�g}��i���O��8�����:3tO���S}	�Q�i'q�8!P�Ml>�?��g�S��R	�����y,�E%������#�B�#�db��I23�@�E}��|��������>�Xp�'�T<vte��� ?y.���}�8�
F���?�d�0<-kv0zz�w!P*�`;q�D���D��i��] &����x���<A�C	>�}���Q�
�l~���8>�-��ne�H��=b�d�2�%i��.��n{���w%�`�'6���":?��T�('�E����;����F D�A�@E"�z���y�xno���_#�1q�U#�����`
vk"�O��Y��1��<�����BkERx0-�B\�����}��p7_+X�aeCb�1�:�h��4'O�~5!*
���|��bC�C�[+���������c?���	��,D��G���y���$���[�G���XjY�~1����������s�-.�cFl�>�jLs�������	Cx!2�BB\����!� %�R�iy��DqK�
������o��_����L��
��?v������(�%���L��0�
S5��|�
��:+��o��*���)?dc��-G����"1����-	X|Heo������o8�B��
zCgE�8g;;�[�L�zU�#!t\���ca:�/����s�9V2����p�ev��Bu�����<\H����Q<�p?_#Z�c��d���e��4�G�H��C�u#����u��F�N�x�F���0�%>i�N���!�;�5��t�
���c��+C�<z�I����W
-J{"
���fe���w^��7W�a���b��5���(�@7pUm������t	c<2��}dP���p3�����X��]V��
��w%�D��n�BO-v��z�M'�k��f����	���� a�2Z����V[��V�~K��eC]%:"��R'r�N���!P��Lx���Jz�B8�beG�ae��*���!Aeo�(�{��n���PUc�������Wr!���� n���Ik�����Vi��NWF�My��������np����Z�m�M������d����X��[-�
�o ~3���ceb����I0>j���%1���,��}i���x>iJh���3m%�GR�7��E���>g���� 3���3���
�������]��?E�����=��1��~�Je��l4j��(ft>��6i��`�85-G05��a}�s/@�<a�`T_��< &�.a�-���O��T�{����w%��uO�����bzr����������6����h s�S�`�D�]��g���������&�����
����AY�8��CSv�6E�w�@��8-K����t-�������DM�i���<�"���m����~��[���������h���/�3J;��n�d�[d�R-D����'���&J�u�p}�����Vy�OO8�%�����g��3�5�nh��!�L�?P����fDrW*a����*��-���M���k�t�AXc6�P�����R<l*�3��p��UIE=�����L��h|;7�K���PL������!�U�^}�b1�Fx�F0,(z����L��8D��t�������M��Q|[��O�E��F�j�������4\0�r#�{�����x��-7r.:������Nh�~)��Y��?�5`"4��d�v�0��{/#^���X��>�x������3���y�����;n���!R�7�<���n`��T�v�{�+�*�4sN���0
��F� 4Q'LR��l�I���������m��=��L�%���/_o�k�s���8�R��GBB�q��@4P��Z���������������U��q'�+c8����Q'�><����kF0$��b����d���{��\L*c�)_�������B�N��-m	_GMb����b"��d����3!���F)L�W�=��2�z_~��R{m������\T�1��[��c���D���n�����2UK�����)����Q'�&9j1���i��T��u�+�����i����1~��2E��_Bm��f���f�1������|��8���Y�����>�*�x,
��a%��Tp��N��Y0�����l����sb��|I����U%����OS�'I���J���r�����!�-���Y�WWx.��@�-�D%nY~u�='&c�tg2���/�����'�z��ih�Jt�{�X�]�<P�<�j��P�d��=���Fz(���0��-�������%��8�,�X�rR�>�S=��g��Q���$-��`L�&�����'�S]!�-��#����O�+?P%p��=V��C+?���&���������i|�Bm*W�BAZK|�4���B��,���k'-�n����[�0f�7�_������^l���H�j�������f-/��>Vy�MT��y�����~�y�%"��F|��!CMD��
�k�Z��4�f�\���^��H����k�Q:�R2IW:W,��Y���A�'���������K�L���D�a��xMX�s���`E��aV�M��
tW"
�U�me!Y��rl����3���PR���*����KKL2A��{��KFI��"j��Y��='&C3�5��>10:���ho��OM�0������Yx��|b�+	�Rh���1���U��N��V��[���AL�?�47�����~f����D��'�\Y��5�Z^�~g�e�I?9|mc+�&P�kD�O���t)r����E�����Q8~D�
c�P�*��7�x��NG��~��z��*�|����kD�5��@�=����G�n������(��^�u�4w�S]Ds�0*'���0*��N�������b����S��;  �95?$A�>������I
s03�7�Y,��!�ag%��Y��3&���Xe�"��w��3�y�b��#OT�}yF��_�^�
���gp'���i)��
i����@4n|�%/� �����'bb��d�L��/�5�v�wR�D;s�2��u�$b�oe��O���
���\;���Sk%���6��8�X��a����X&����������mM��:���Dp�4x��!{�f�>�n9c������D�I����X��6�~k�e�DKUq������k�a07�ND�D��Y�(���}D�/��f��G$'f`
�H�v�z`u1-(#`�v��[��o�W2
����
3c��6*47,v���A����c���z�D|����K���Mwx-	+��a_�q[��rg����o��f��1���c��=��!�	k-���	��y�d�2m4����U��@���=�?.�W�����������{�7�p�-������\Ig�VfLRbC�yD :��y$\�1�.@����XO�{�_"em$D7	x+��Dx��q�:�@Q��L�6Q4|\2e��*��aa{����3:��a�2���`�D'�
x�f�#���(q&��G[�~@	$����0��	�DF�*�������CR�\k����}���������?`�x����u�=���}^���9��/c8��[��K�O�aM+��[��%���4r��:[}i��r����`���o����q���*��.(����L����0��u����41�����������wT����I���oZV���ST��Xq�`{�.Yu����6�
����;���'������[����V��a�~����
�H��b@�`�y�D!���z>}3�������_����e]S7�P��-�@�;���(��2�~����X� `e�?{�\\
O�x���Z5�^�W��{��JL�W��P���T>�1d��7wxM=�}"�1�z�� ��(4W�!\w��!�?>������Q��_�8� ",=�;�-kx���J��u��V��������s��6�Z!��c��E"m�x3��L%���
�����}��x&XG|_#��>�81���5�_�}���DLj�u�>vwC%��������b^$s�d ��-c��=2���B�����Z�-&�47�>�'�����@Rnh-��E��If��/��8-�r���V��m�us'@eT��.����.�l��y�Q-
�A�k��p����gb�xm�!��I��n�����������MD��D@��u���a-��q��cm���������������_�<������7~� �{�@��	\<�aw�li|��$�l��(��a���!�+�S������xB���'�
�v/2�]J^��x�SPp��*����������m���f�V��_	�i��o�X�w)����J,ym�M10�k"�����k	�������DF6��������?��j!���51����	c)r������D���d���W�3�������:B^,����,-����f��7>����_��rh����SF:�MI�
�8���7	x�g�2N{T
���Y)}�S�����'"A$rx;z+n��j����+>��L$hi1�p�+�r}!.�����
����C%�N8������a�0!��50
�P�d����+e]����
��O�:;79@'��A����xp#����!N/.��|1�p<�l+���(���G�*��|+�1�]aE�.<�{������fh����OP����PAw�����b���W
D�eI��1��$��#���1�y�86����@d�<;J����k��/��������k�7���c�+x����|fs��Pe�;a�p[����*]oe���q�]3����'�U�����
M*&���� �N��D������3��  '5�����i�S��0q��u��LDW����	���.��P���E�'��3>���@�p�����V��<��g|���C�����J��g��[>�����y�����M3�j
��s�?vF�N��W���
z�@
;�*[�:���hK >�&qg�S��Jt�J��.�a�������.U��OU��|(��M�F�"ab��C�����o)y�~'|�^��A�M
�w�0y��y�qb|���H��C�GtL������az�.�h�N���{��n�
8.[~�������&���l,�7y��Qw����X�������"66�Q�7�r���[+�j� ����g�D��N���2�^��~��1(�K������� b���H���Vn��6<<�����|��T;�]�I �V��.9���O���u��F�(�B�;a�</�#�@��"�c���;�=��TgHg���8���q�������'��Q|���H�T*[p��O���d&2:9����3d�#��w

[�*��C}C���������+��r&|6>K(����|}g���@���ak���Vxi�8(f����������L
&���3��l�
cVR��
��u���7'�o�?�SK�%���k��G�L���
tj��8�5?���n���M������(Q��'/T����x��7��vI�&�D<)�p�����s^��4Bo��u�R�*�����b�\�B&9���m�Ar�9Q��j��&_��t�l�[���p��9��z�m#��+>=5.�1�w�6*v�%+�Z��!w��������E�������L3���o%�a�0/�Fs����� 5�%d��+�r�@�����4����Bi��of�>��7V?_M��
�? Ez��,-�R��3yeT]c��6�&�����i
����2�4nf��(P��b�dB1c5G%0#�^_����������n�b�����/�-���
�����_��DE����v�R��C+j"��BP�=�D��i����O;��*"|����!P�z�H��D���$w��r����=���0x�a,J��[�*k?������zH�r����	���������<������Z�9��'�
��D�� �9�������v�O`��??^����I9�{��OD���;�)�~�L�l�����xl�����7
"�ST�@�~NZ�L��HZ��G��4n��R6suS�iM��~Zs�M�Q���L�G�>����e��	w�����m���D�����l{�����`�h�A��Fx26�^�_���b
�|��=�e�H�	�$m7�F����??<���w��0(3"�����V"!����5�1�����1��Cz^LU���	wJ�vx����q�����.D���f���7�]<t^���On�x�����^�������X���{2>���.8j�y��	M�-�5��ED[���L�"d:
Zh���^1��1
�9\
n!E���s6W<f\��*��&t���hO=�����Zpp������;�'\=�MS
�L�V���`Xq�'�m��9{\����W�
�����[���;��Z�"l����E��?8E��V���5��Al�F+'�v�}\�����H<:]�4���e����������;�p��K�NS;���>0����3��t11������O���Y��<�"�����Z1���J�dUT�H�5n�P���������q<�Q�"������:�?��C��~'�J�G���� �)r��	��V$������Jc�4X\��]�~}CC��o��r[��tf���z~�X�^W�rMM�;�@�[+����g���D;vk@���*�������Z�Z���3a�Y�b@��a�I�3/����H��-��v"�r�����J^)A�qH�:U���?�Qf<u��v�EC�����
��,C��	����O�)98����#�����Hw����<���}��%��_<��:�Wh��wm�X�a5�Kc�jF�w�����U���b��i�+�);���w�	x\|B����u���:a�����HU�s>Q���2���������'~gB����
\���;z�1��`�{�-!:�l�X�Pc3H	�xL��%��������DW}'f(��GN����U����ep����J��dFs�=BDE=:[5�XRE�"����m\�����N0�|^�w���X�{(�~*�\b~������!\���z'Lg�#���s��H��o�_�r��B��gph�7p���(������~B�������*�y��w��k�:o�Mk��GF���Y�.��*N9�����{c9 >lS���;�l�7n�;�W��KX�\����$DC�|�\����l��H�f3���i����#u�E�4��+u�>�N����H����|�����{��������i}���~�G������+r�������R��������|\%JW�_.�n�o/R���K0��U����y��{&�������,��Jj��DO:�)P����+C��5�)QEc�F�p9j����;5����r����ai�\���~r�}3�}6��7��Z
�=x�c��
Z��7j�������/�{���Y#��Y�]Y��S���pu����i���e���r/X?�g����bp< �����4����s�h��"hq�:�#�q�����������y�yd�^����~2��af?��]{�_����'����w��������@�2E�
�@^+�E��EV~�S]�3�O���f�~��1�Z�y6y������<��O�}Q�)}�;E��������.�� �ZYw��2!���P��9�3�����+PJ����t �6T����Z����������#\VFi�����Q�S#D�_�W�J��`e�r�R��C!"�+AF�NJ�D��h��t���'-Xd��6�H������g��O+�g%(�9
MX�����	X��Z��X�H:��dQ��wf�F8�~5��d�r�
�;	��$'+�K�Gy���F��P��CB�������
�|d�+�'���0]��/
��{Rn^/C�U�0��@n���*�<�����[o%��=�����'�Wf����)��.���*3DR�/K����b��a��CVf`W��qg-���P��\�HJ��X�Jjpb�t�n�`*i�JX�.�qiA>Z�R�!o��XH^8���`%�Gg� a�J!�PE��*|��B0�����9<������<oT��/7����z��m1�`aZjl)�*o$����W+4�����
'�0T�T��H�N?;Q��a����C��rg�3a�6������I|��k�"��R������a�5a%�&�V�;#�LeP�k���sL��2�Sa��:	5X	����QR��@+���#*{l3cp?{h�kQ	-81�������h���*3�Q9��p2^�,��k�v.L�6+���yTr��������������7Yu�%�Iz��EuM���~��#��SU��xF��x� ����G���������-��a�f�i;J��S'^��-�����%F?wFec;=[)Z!������z��i�Fs��*���Dtmf(��T�t��F��%���/V
:��������dER�D,�!=1])��7�<7������P�J��H$��<:T�U�)r8��T�I�>�/�Wzd�!��O��?�E���_}6�|-am*y\=y@��1�ya�
1$����4E0�=!X��O�%#.�����������XI���I�h�,�5����0��"���&��0��]~B'��)&
a��U�hyc���j���,����}Bi�5�!+�an��]�����8!����nb�em�X�H)�>3}
�����i�``:����v�E"��ce��6$���k�%�t������Z��
�Q��[e���(D�39�F"�}�"����S�!G���w�D�����hl�@�oE�F(���:5���.=�X�����@���?9�e�%�Jx`�\�)W����O�`���U����u�#��������?3��*}U���@J��p��o���H�����Ab����|	�-��/�5�:����]b
�1�Vl��JwE������h�t
r�S�<�y``g?[r�vQ�� 71���49���Q���'�r��!�b�^w�D
6~�Eh��DKX��>�\���/�����QN���Qn`�2�Q��gjb��gf�S��n��\.�5-����j���N�
���73����Wx�fl��aN��/i��\���=Tra���r���#�`b���-R|qR���bo]���H�������E��{L����{�;GM����sG��79{���I�
a�?SA������1�Y�ND�s��~���/f���x�Z���bL�k�����FsbV,��o�����ib�������]�`*�����LOMNfx���j�7�gT1�e�z�s�8�F��Tj�����f�I�n���q�j�G]�p�6S����.�ZtX"rbV��x���Q��2����.�>�9���D�.�0��������?(��v�
L��d��i�b������R%�tm�E"<p����*Z>����
����2T��_�����=��>���t�����CY-Y<���Dn7�Q�c���� H'Q��C,���r�9hg��>y8&b�G;�)��I��|�������{��%p]5y3��D��^�l�C&����1��rW�~b���Q%��aMY�#n�A1�+�2?�`j����������{T�3d�Jd�Cj�0���,�S���9��M;b�kt���������
^�b�_XJU��Wu!�{yR����������?�J��Z�������OT��BxM��6�5��G���s���I�X9g�2VT��>���8��Vh�}�q� w;��Pc	�Mf�w&^[���4|���^��HC&;�=�Ww��L��G���T�����S� r�T����K\&��b����6Ue�w5���4k��$$�\C]&�h�q��Wj���w�6-o�L4���������~���Z��wuCo���V�fx���g���xb���x��C����h���#�f�k�3��4>�e���������p0�iV�C���b�_}>.DK�c���>W����u�g�d��@�13���x���1N����,��c�8�%�	<��DB�2�Cd���?�R�>�*�j��������������k7EL�+� ������c�������eW{nO�s�}�8�����~��D|����!����������VW�5_JW�ru���[��n������@�����D��}���Y�^W�
��w�z�������3]]���^���m��s]��K�+�qu{�U�t����{�W�\WD��Q���=�$Q����$�U�Br�$2��O�
���Y���U&���@��a�&�*Q�����@���sW���R�c*�QJuL�:�m����k�+�t�����|�w�
���k�
���2�S��R�k*�g*�<f�~�1����Q��=K,Q�g����C�����L^Yo��k��I�J���h��k�(]-{L{�:'��J���
%�U��vJ	E}JW�ru����������@��P��_YQg�WCQg�WCQg�WCQg�W�g����K�����t����:���������������g�����j���tu�59uV�qu���j��\U@W����1t�_]��W����1t�_]�@W����6t�_]�@W����3t�_]�@W����1tu2\�:�'��sq5)�a��4P
���!q5
����I5 ��2S��R�c*U��W�\W��j)�9�9����i�@\-e>�2_���T�8p�{����c73��:�),�����Wv����"J�qF;v����G�i�?F����
�g�����#�@ ����������A@;�n��	��q�v��t�o"6��<�>��d�_g��1rg��yz����**��
U�]�B��T��9�A�����'9��Qmg��@^ I�,e�S�����E���xy������!M+}���iE�9lU�O��x���2"
o���T��T?W��s�OD@:#(����B|ED�[�9��!�3�PI�P!jt��b#C�
?@�a�/���=%X������;a��������IQ�@@7T���Fq�2>X6D���jfv��b�Sv]�?~l��"��5�� v&����!�l�<33$ve|��%�I�zq���93
M� �
�����@�&*X�E{��c����JCT����W&c���V���~�qa�V�/$^���T����i 6uID����i8^���d;6�UB�6BQpH�~��@�!�������!����aH�f���@�^Zb��	BI�`0~lx��c�H��,Q�d8������Z���{>X���MD��$����Z��)�8�H�~1���C�tS����U�Hp(�Q p*�2��`���5P}
9�x
��y@������,C�q���j�b�D`Ddz)�2��x��L�� ����rq_���(�/��'��[����gF�-���&�X��V����	���q�UD���1��q�
;�QDs���������Ddh�%J�����*��mW���B`����=B�-�������	�f�m���7�b�=�R�����pbR�vF�uQ~��g	������;:G����0���02��m
�R�*�X���Bd��_JcDtA�!���x��}������6P�oaxNOU7n+z"��wF5����Jy�z�L��]�������>	��1l����P�������;)��Q���z�/-�x1y�'����y<4�*Y����/�9SS���Wm����P��:�&�u��u��~�w���0�������t��H����B�LT�2�2��|���w��	z{�Mn�&4�f��Kj���)���D�&��4�x�E��u
2)��5�z��31����7�y�*�2��#�������/�u�K1X��>����3��1������D1�����t��Y���V�/���*��(S!v�N��Z�	m��z�|�X7'x��"Z�Hd��������2
�v]a������v�fY����������u��/�9����(�R�`�� �~1>�	�d�����������h�[D<?#*��'��8M�(7�Qj�43��O��1��x�(N����qiO��P<��?�iL�M���xY���e����UL
�vC1e� _pBp��p�v�.6�"Fo���������i����U�?��iHfF�����{Z�S����X�3h-,/|�|<��}H�1J6�
X�p8x+�
�}�WW� 1-(��-����0��*�����e�����)���^�A���7~�Xr>1�?>M���N:L��Q��w{�e�!��p`�
�]����n��Sd�S3C�:��wjFx-�r�����<lW�z������[���3/�]��f
�=���0�M*�����zE����E����	{���	��D�/[u]��FE�V|����c&^)(��L�|1Z�Dh\����e�q�M.������a���D����N���l"�����S�+��2�{�w&d�;l���cr���_Z!F�#��`��o�G����"�c=i���=ND��w�!.k��S^�1�?U���#W��G����4d�@U���+�'�(]Gk�aj��`s�N8�����;3��SV��������-jG�y�`��3���vg7��PDoa�~��������������8�	()��z"B���kw���Hw(��c�>���m��^	���[�z���-VQ&	4lDJ�g�L�n�]���bP��LN;'�u�{��Q��ylh���NwpbB�<��4��������o�5'"�gY�%�]Cx?g�����(�D���J�C����	��rsG��G=�cl�)����}��V�lfb��	t�X�v���I����#7�iA�[�Pn!��e"��l=��J�����C����y���)�\�;���84`�%��,>�b���/#�����v��m.:����������M�A���kQ&FF*q�~1��t��%91�^�s�W�A�o�j�N������h�X���|�A	�Ze��}�0��w[���7��Z
,��=��@��+�E���R@Fv�~1���\�����a��#����_tz>.���]
���v>8\?�S7��_��5�t��_0�����b��:�Xt��>�#����?=�.U�>��q�KO��L��u/ ���O�����5A��Ub@�M��(_����(��|=5(�v%����F��F},:Y23V�l����4}���Y\�l�s%<u�B ��y>QL��[��vUke (z���~�Ur����T�����"��v����$��o[��}�~���M���6������X�!��������Z*�D�Xx����C����	�@�\��� ���`��������a,�K}�<u��>\d��WUGB��x���;V�����������|p��fw(�61�BH�:�8t��x7��Y^>�I2<J������D�v�`��n���T)���$���w���L�'
>�v
,*�����h�[���il�'t����1 t0�Up!X�"�M���g�@����G����n�8��Jx���J��	�Pt��
��w�`HjR�CF�5���#��k%����;�%�,���w;K���yg[�d� �T����J��|���v��

�l���}�f+����O*s(�D��D��.�'�yC�|��He2��������AL��=-J�SDK7��k�������lW�����g"2����1��{�iA�c���v
"�nf�����hnY2����./�=��,L���T��:������b����r�*��p�\/�u�1q�����(�=��w����c�}�
Dh����g����B1������N}�v��>�Uf`[���=�������i}C�P���
��[��3=xzEef4��;qc�If#�l�(������ ]c�����6��QB&B�C��~p���	���~����iAY�iX��G
J4
�.�/�q���G��kj��3�p����N��7�z7+v	1�L���m>J����(��Y���9���T�iIb�z�Qt��-���O�#�D��/�PjY&4�~s��wf���������&���3�Gp���`P, �w&����^�?�}Q���]U'�;�'"���c����R���e����a��i�L���-�dM�cT;cc3�z-��1�/�t8{��t8;]����t����4��������YA�_�G��?�n��,��I�'\���r
���N�'�&��p2�����3��'��'�������l��_0���_1?2�flH6����|y���z�K��E'�[j�����6Q�;.��|�{PY�#��uj64�f��(�D�)�n1��/��X������?1�9������e2��O�@��#����.��o��a�W� G��ao��"�����[6�����6��iu��(S�N�)���Xw�ZG{}����.�Y��&f`��������\S�v�i��,k�s��F7�K}?<Sc�U
w_!��H���hc1�[��M�*=Sc�f6Sj
���X*{��E�`L|�����i\��. 8�cu��y`��|2a:��#+�B�����M���k8[��	A�����]���*���R<��yt��A�������F���aB�����%%�����@[u-i�������>����=U����[]�+����-N���Dl�AU~e��)�$Tc��
��&�iR�@�(�����+�����Z��lu��pPM���c�s��C.*��CrHUK*�It���(7���S��t�Qn��?D����Qe��I3Cnf�c�JuH�zVT0�����S��i$�����17�fF8����0n"�a���V6��j
g
�����{�a;��
^N�N�[v��K#R5�8=�*~�M��0�~~�"��v�������b������D�[Oa��Y��s|����<6�����1|m?n�%H��0��
;Za���73S�+��
X�l�0H'����]�b�g�{�q�gT&c�q|f��&���0�cT���Qj|�������jk.w�i�:�;�0�u+f�n��e��t�����u;3���������==�q���	�m+�9�n����;>!�8����-����������'��xl�>���W��aK�X�����VT��v�G�5,Scezb1tA�:>��Tf`���'r���b�0x�E�nt��{ZaZ�n���!�����~t�����[Q����u�#�M3�[?�c;yl'"�S�K��?��ft�e��+l���������d��*$��3E��;��a.�3aP�3����W&�{�+_���P�a�|w��p���*#��L�������}�@Uw����5U(`�Z����9���5�����"��[Z�CLeNF����{����z-�c�L�<�w��o��f����G�����
q�uf�%v�����@��-����\�<F0�\�������������R�CL�t�1%��?��������h�F�fb@f!�������>��E���:�Z����^�;3�C�zeo�U'gf`t0�����u���_�������]f��9��[�����x"rt��7�}���>��!��mT3�Z�S��1�I� hX��g���
�&���X�*���\Y�<�83�1��� �=��D�����G<��)��������1t��p1�t���X�<�1b��(n�v�6S���zh�r&�~1&~�������C[���wm���a��!n`�l���i��2�g��������`c���]�~�q��a�v3���o6;o�"��������V�]Lc[B�Y�;�LX�}����y�D��d)2o����~�:w����vSh���K���0�]�8W��KH6���/���y��q�:3��e�' ZiZ�x'�J����p�2s��p��DD���dl1�������T=��QfM]+����\�6u�nk"���k330� S�"���
aa)���.Q�:~`�]��4� &��3i?���9�+��������lB�@L��p9Z���c�����4�}� *�X���5�N�_�Uj6�sQ,�N���Q���ll"���w53I`��b��/��p�VH�c!�Kz��_8l���|��b����R��s`}��}~!.{s�%� D���S���o����a#JWo+�O�7������J��N�
��:[��W|�9���*����1����[��
�f�q=��U���	�����KUf�~R�Si�	������*��{Up?Z��&���>�<13��a5��!��21h��?%u���0�����1���L�zw��qL����y��0�����r���1�A���y;�6���@n����^�
P6�o7����ff��l���.v�.L��_gZ���K��������~�	Z�330��
����\k�h���D��(��|g� 6�7~���Wd�0<IG�[1-�|���������&e2���O�;�"���z\��R~���|�M���]%z��]NZ�I����{P��o�w��;1�N~�s>���
�n��b������0��J�3l��:Fos��U�EY'��&���b5��|����D��O����R&:Y���f��`��b	zx���a�A&�-x�Tf`n�f#v���E��b��?6�uhX/We�����0,��#W�L��N�X�a8���#����h�B�)"�*#WT�6��2������\
a�lGL�h���/9aE\����������L����zy���2/�A�e�]jT��9�Jti�{T=�JsQ�����c�.�1Lw�_�y'��3s��LcZ��&������*�����?v��ZW,��k]����|u$�$�����~����������n��f�0L����h�u*�pv<���Z5��l�%'<��=*��b���n�_�M**��|�T����'����������bs\�sN����A�9"A�[M]�0���8W���N��A%._�;�������i����G�%p�?R#����;���A��a���9��7��#�P���x{��e��A�8Y��-�����t�fL;��l��65��������67�
#|��j�/�)��E�g���1����e�nIY������
#��b6x�8���52�^�Y�,lK��F'&c�,h�{��wb~�_���8P��9:p����^�Ip"������`�[��oq�z��'����u*{�D�����l^H1��G��d�������_����������D�zD#��E��*����'C���$���1L��k�#S{�1-��[�i~/����Lh&�2���
��\��n���,Cl:�>��A�	��M)s�9N���:�Xb6Q�s���b+.������6�*���'����7�a_�n�b��n�F�����Kt��D�s�`�ZO��h��<���i~'"C~�I%�}��D��;q���������hdL����+"��{g�\��f�a�9>w7��
q���O�"3^���%^13x'�* �`�^����fJ,�Lv����B�=�B�����8��em���eU����yw���w��3�@TW�nn�y� �����K��b�c3���e�����HxS-�INXb*�a;�-�;w��%��#�fD�0f�`����D����T	���
��Kn�5l����=���n�j�+F�B�b���o�S3bk��K����w���;�������������H�m��A�DK�QH��+��������4���{K������#�r���W!P��Lp~�rb<��[�w/�xd��4������z#F�]��F�:��
��o=�Y"f��� ��=��W�n7��>�u�����:��2P�G���x�5���JC����4�q��4�i�	����~�L��7�G�07���L����2���T�|��!:�� �D����"q�>,[S)�>H�a�4����_1�����K;��/�0Wv1��;1?�����Xc 3
�9sf*}��`%l�-w�^	�^�k�'�i@7pO�\��+c�v"�0��E����SQZc�x�7O�Y�5���vR�`~���:e�BZ�	�gsC��$bDQ��K���C"h]X�p�d8<-�W^Q4�v/��������3O�	��I_z���ab.�
�x����G�1DO��+	R��e�����=�+�w�|1a>!�������AN�'1����������v=���:�~Z��P4���s?}�}��s���!����H�M����� �;�l���U��7�Sn�-M�>����Pn~GO?(0�5�#�2�����,a]Axg�}�+s\���"��Av�K;�rl@�&-b���43��(���`��C��T]�-yu_�Q���KN�'Z��o��CVf`)�sQ��P�d�<����;8�_%�S
�Y��kh��j;4��c�z��J��>��<��L%n��.p�2m�K�B�g����&��\�5UC��obs q����t�p�w.c�%�R���x4�!���o�O^80���D@��s	S��>V
�t%��	�E�ob�
VK���2Q&�pQ��RJ@�5I�`��U�)W�P}c{EC����9T��,�w*��\��$�w*���>+�^T�����64YTM���1��\	oK(���$�Ry�w*�����U?��;����z+�����yWt�����;A�Q��Y���c��w����%�=Dh�H3�M�����{dl1�
�����Oy�}�M�a����l������a_0���@������}O�e[�����?>1����o��17Pr3>��!�b��F.We|���HO��"���N(F�
������B~g�iB5Y�����M�I�$���/��9	�����OB��I�?N:��VF��pj�D�3�S`9"\�}���d�8a}u���c:B�3|�v;nQ%o��+����m�{X�w^��|:19�.$z'����v���!b|b��$Z��$N�P7���_0�"� ��D�����;������@���v����c�b|2z�� ����i�p�Y�x�f�'"V(&���=MDZP>��O����>�Bx�A����C����sl��i�S��@��TU�����s�<TF����IG��'7��x�P������'B���>c���agL�8	qf��� �h���sr����)H"2<�_�j��q�*�D�)LIx�OH�%O��$BB�G�������r���%�X�-*��,t��s>^�G+-*����)����LCo%p��nt���:�910�
�'M�M�o���#�H�Tu���'3+����� ��Md!�q����o�d7��%��A;�L��b�c���j����3!D����}�_gZ����E������k&eK���0��b�w����p{����(����a�V��� ��i|�!c`�<�f�[;�y�C3�R��{����	�K�M���S�Ddx�a*/�o�)�O�p�)����2C�ma���!O�63[�����;U�6���,��f�s�~1���
�������F%��'�S�6�Jkw�;Wb�w|�'h�'��2w�z����p%���6����0���dZ�)�+�C��0R��j�(��g��t�8 N�_����V��*#������>AUv�4A]}�5a$}{tr8�1A]�+}�,���
g"&��1����f+�����J�M	����1��=/�93�������7!|'f�L>�_����'f|����w��B��a����=lTg��g������bU��!j���T���_e`���j2���yc@���'`&����c���	,��$�y�s�WF���nfx��m}��K"Xn
�2xAGe������v���������F�K�^K=;����^�=d����Bh�1D��V�
Xf�wz��hM����7n��tk�"1n���i"���h]�ac����_��	`�<P/,iY�P�I�v6�(�����E|��&,�;S	o\|�2�����+��	JL�;~�_�xab�#V���K�9�s-"	���z������<a����	'n�d��{���T��'?2��o�34��$�����_c����DT��E����*��V*���bJ������V'������1���%�+�2z������kR����������B���/K$�y�Y){�J8�U���N}
���@��)��/>l<���#6%6�������*B�C��H���!�)r�Ub�^��6��S�j)
�U�quG�+�J��Z��qh\���*Q�jq3�U ���sL�};J�uUe��(3�z�yu�YWUf]�2����WG�uUe����qU(�1�5]uW�0�
E�0$v���"~X�I���?���YJ����R��*t�RET3���*�N��������'��������������j�\vS\���m��"����_�������h����\?>W�`�z��"�g�<��:�i��^~�����?�������������������D;���0�,��`6l��8��0N�?~@�Lq\��I��]a���:�g*a�,�+��saT� �A��(�A��{��]�������_��l������N
�_^q����1��'��������-�9c��fv�x.���P��D�T������+6$�#lyBn�"D*���x���=��E���������-ne�z�[���3��)8y�d�2�-{�� D��A�m�;	�i��{�!��O�eR��<�!����L��}��Ay�H��$�i	x�(��x�`�q�N4g�
^
p�j�2��]$�D�7j��0.#���F��pZ+���j��(���C�K��������+c������Ds&���4;O�:~q���F�wf�
�I�o�D��c�����c?����	��L����������(�����z�45W`&AV��EQM���A!p~�X�\�'������#c���>��yp�`r�[n��
�(q�=�>o�h�����%� ����2�#n3��z)����~�����'��h2O���=N�Ac��X�����C�-y��3���W9p��9��.�����b�z����70��3qCWE]<~k~�x~f~x�WW���'r�L"�l��;cN��w<�*�u���a���I�q�df��!��_k���?�������-��1��d��Ce����~����k�KC�F�f�>�q��*�mb�W�N����|�9�5|)����;3������=k���6���e���q�t��k��U���wE�-n���n���E!���-K�����[�;u`� �N�E����3*3pG6v�A���J�Z�
�>����t��O'�k��[����	��.HN"�03M���mO��G����[��w���Jd�T'6�B�z��DDX��N���{-�U!i
O�8��U��!��7
��(������"[��
���x���������3)\7�b��S�[U�1�N��+c��<�'����&5��ty����g������NL�0�N���=������Y�X��vF�����95K
����G=�T	�8�K)���,&�9�)G%�{�@�!{V���J�'�2�����S���Q���1�o���$P�Y�L��P��"��
B�K��z��g���i3�1����(M��2����'������1O��4+�4���� ��vG��������a�Mb�S�y�~A��\W�3���v�
_�6�'w��3+�D�3+j�k
����^A����WF���#W��L
!�����@e'R���'��q(U7�H1�St}�T������c��
��&�����?1�i�M�w~�9YN�V:������4��<2N�����f�X62:��&`zA��[l�R-D���3�z��2|�!\U_P�L*�o$�������h8���w����R�"W����Z���4'���R	{S���*���}p]�CF��7%)*4��<��\��E|���P�
a��i�'�]z^�AR����[����ZZ���J��K��0�U$��R�n�����1LJ��{�����A�}�j~�`��M�9|y���E%���m�e��a�K�%FZnb�!}M���A��@/�+���a�����D�A�\��'�������0Ht��P�2������^���3�K����{b�j\�"D|wo���/�`�*~@�������`xz��j&<�~Kx�+1�W�����;1�w^#��(
�A�xx���6f��*����IrR	�>Z��4�)�2���A���.�>������������b�E�;�!���s1��\k�3����J������u�$&{�?w%������=�S���`�7�0�^e��,���z_~��R$�y�N��pe���c
��E�������n��{�?4�'F251����E�����3��^�$����e��4�W*a���B�1~bP��c�F����oy|�������-T��=,|
��i�cq�Y�}������p�	������rP�J���������������}=+�L�K�����*IO����9t.c��GxG}�<4SJ��!@��AJq.��h�i�����M�$��e��c�����}�#���U(�r���%����0����2�s7dk$����P�d��=���F�Pz�?a
x[r���#2��pI)�uf���V_}����}|'.z�Q!~)?S�s�<��m0�{�'"C������Pn�D]Q��}}]i�*�����������}}kb�����S2;^�3-�c�J��T��������WH���)�	f���\;i�us��_\uc�qx#����.�J�q/�k�B\�`5i��]��B����/Z��6Q	���^c����m��;Asxj"�eo`_S�b���94S���]X��HLh���(�h!����?�VN�����D`-|-��}K��H	B�->������ ���������@�3#�����o���Q-�����X�|���?X��F�G[?*������9�����.y2����L��}��������j�v���/��H�;1���a��������\���'��Bt����4�*���vW�#�O5���3�E�Qu���0��D�������_�����`�m��;������?3���{�i��-��L>��.b�3�2���\����f��5"����z����!=�cWgcI���6����`���oL
��7�x��N����7�����2P���*�j����Ad[����k�Qf{�c��0�=�|`"�����j]Ds�0��Sn!���
�����V�u��u*��`��?����KPe�}������r(����:�p����j�Y	��F�,��Y�6V��u��L�6���9><��D;�+E��b��V.��<�;����(���n3����0����Q�'bbw�I�LH�,�&�wh�%�D;s�2����fC�q�o�SsU_T0�}��1v���X+����O�gHUL,p����D?
`�/�q�mf_��}������d��1�M�O�gh���
����IT0V�w�f?����1=wR�O���ab�������$���x�p_r��q�����"�;
x�B�fQ�D���w;�5�l|��gff��sQ~�����iAA3��}2Il!������i�&�GZ������P��a�7'�;E��a
�\���>W��b���Mwx-	+��a_�q[��rg����o��f��1���c��=��!�	k-���[�{)S�FS������B�6�U��]�pJ#p"��o�~+��u�T���`�2";�r%�!Z�1I�
��������pe���mW0�jc=qH��2�6bs�v~"�����@�E�2��1��34[a��>,lO5s{���1�Y��2x�@��hd����8[�n��L��ij���@��b+�'��U��M^��L�$}U	5-8���@��p/�G��\t�~���������?ha���t������^�yy�&�\f4�M���������� *��V|	C�%���4r��:��4�{9gXKJ�S��E$�~���*��.(����L����f>�]{�&�0�a������P����� �����M���|����uL�]��(�]/�C>,��������d����-����l�w�����z+L#�����y�K$
a�]����QFM�^^|�@����/���q���VnY��%�����tb�����M��~�V�0�������T��_��U����ZB?��Ub�J���|�����LfFX{������O�1�P�{d���J�2�KN��UGY?�m ��G�
��q�ADXz�w&[�<�NgU��=��#�� ���E��3��+mj�B�3����D�T�fB�JX}���}��x&XG|_#�g�Y;�81�>����A����
"�u���:�X3��H?T��C�&���"��%Yf�hcxX{��n�����������
-2�o-E���=�|b�C�
�eu�hb?���n��~�]6_.�j�^�%���)��N���T���P�Go�D��)��G�H4�2����L$����33l�6�N�,��}��S��)�~�A�1�_��H��+�l�'*�����q<����y�vP� ��h���o= T5���,��~�E��4�2\P-���q����� Z��]��&B�S$�s1��,���|3�)k���?@�������X���b2��zt�F�,�"~E����:��20|[����?3C��$��{H�[�3���	�\��;n��^��^��9�r�0'�@��
���c"$�,���o: �+	�3�_Zlu�D��kS�������Bv=@�3_-���`��}�Q�?;3�x� 4��CcV|&���={`)���"A��g�������n���&"���:�T��4��^]��g&cJ��|M���Vn@~�?���@���;3����N�w�Q�o�d���;��p�6�O����pt���)r��;~y�%��2e\�M10$lR/��-��#?"
�����U���g'��"]�	���$�~�}?3|GfxU�SiG*N���:;�D4g8��I�*�8�3C=u;����pj��D��x�����'R�o95�����<�kN�������x�p�n9
Rq����MU,�YMq��� 6&�F�W��0�p�NL��+0	����[�V�{�%�0W,'bW�Z����Y�KJ�_-��+��������f���yD��&����J��Th����vC|f2���*�B�k�d0#5J���bi�d]������.M��T�7���33�a���
�%3K�+�`�"�BRoE<<6��l�
FT���;jf�^�M���q���\��B=����������������U1l��
���W�iA�[��hn����&����	��*�0w����_�0)[��q��/�2~ �<���B0f
���{���a(Y���+���S������p����.7�$�m���
q��l	�!�F>.JCi7����!T�?<3�k������9����G������S��#�mI��#�p������w�$�i����]n��H"�T�p�@��=���3���p�y�������S�&�z�V��I}|�5��y(Y�DD�7��	������K13��6%�q�*Q��T�����#�����Q���U�s0��r7��+#A��aJ�El���X�p��0i�Ea�����
��bP��@��2�)�`�S.n��=_��52�_L��QJV��$;3��g�
{� [[j�m�Y��V	����{�+�EO�*��D``co�Y
��Y�V����G�������Y��M�<���`�}n><��&�����-w� �����@��?�Lm����tdq�������H�A����Bh�;����cB������B���il���q��H��Ld*���t��WL�a��r����91�Rk���	�a�d��5��B1@~	�!Q*
�H�{��^	Z'�����0.����?��;vH;l#�h��m]��La^a�D*�J�H��fx0L��	|?tB@�1�>M��(`������:�
��2a�|�@SUx0�[;f�0����,��~1�1�Ox�,r�efdb�P���6�>���|*�g�V���q�H��t������U63�H�|���CJdf2�e�1;���w���G������B����r������uzB"��0��?t����������%�z�g������&�k+Q�')w���J�~��LrKInad&���;����}+1�y��TUL+�����a�c��
���?H ����qx�a������G��/4�W>n�����+<73�����v��F�;S��7U�6�L������#z���������o��r�t?��;��d�Z)O{�������k��k�1v�����D��3u��~2��	�kF-�Y��)�~�q���+*Qa�P�w�T�o.��1����D�O��Ef��-���aj.���j�7e���Hx�=�|����u���}!7����AbZ!�������D�� n7����/f~s%W�
��f"�P��\��/z��u���D��%�0���]������Tcv��(��D����w��7hO>��0�������/Z���E7U]sL)�$�\#�7}�������b>]��`7�G(*���c�9`�AP�B#����p�Y��~1�r�B`���=�{�3Nl�W���wE��~g7�����v��/On���[��Wz��0��� bY����)��l�+�/��O��D��f5x�Su�',�j ��U�8��#��i����
j���ehD.%1-�!{��<�����X�O�\n��f�j������0����/.��R��f�AE��Y���|�����b��$�wT����q��=��"f�l1��
����z�T���N�T3{6������B`^l�5�,Z`�����7a����K����T������e�<B"�93:gk+�53c�na���������b�um�0VN��`�,��1�JY���D@���x�>2}D��~�	t^�VK��*L��>H�R��Vf���p���,:G ��@KO������L�Hf�m]^��C���z�@�;�#)H�����Y�� �b��D�c�N���`�s����
c�~=t,`��=dn1v\���g
Zv�����oK�@��3c� �;r/%7}@�����U�f�
��;�Ya��wf�s��:��������n� __`sa��o��	
WA[��u�9�U�EC�`C�21X���d&�=~f�2��S�		��o�A���E��DB�V���t@I�����0tk�e�2Pa����O�pf��V�T������{�i�~iS���_I1eFu�@���%�{����/�5�rr_� �qg&c�`�#��<�o*��$���dbZ��S��Qw���LnnY�x�D�To����A�����=�3�KsP� ����~1cO�kc��<�)�v?�d�
��le���/��qk��o���{��oREn����l	�va�.\�"��\hhN������Z�3�as>�y��E�97`���$��@����q��gW�U7���F���-Qd�XU�Th����MU���z^�?�Bg��p��P�����L�#�L>����� �'Z{,��a�,����6�����~�L��������(?�m�(u��[W_�	?/��c(�,41�S�EGP�>��/q���4K"
d�E��3��3S(�4O��2����)+C��)���~���Z��-�+���@&���z��x����h�dc�`<q3��9P��=�(���,,���j321
����P�I_����M�xm�����O���w��5���"O
yin�^SC�sj����,5d������������_~���m}��?��[05���/�4�&�.K��,�����*P\��;]JW�-_�,����<l�����bc��`������iN	��Z�dS��v|fB�V�M	M�+�wl7����,<��8a5.\N�#X�S,�253��kd&B�Nm����q��'�[-r��Al9yLP!�'o��4��w?/���e��H�?O�������j����g'�LKM}���$���"d�{&�>A7D��,<�fK+e�ti�V wxUF�:�OiL��C�#�j"�^NK41����A<=[^��|e�h~.]��pW�D6�����
�ab]�9 �����N����J��W���S�,\�=3�Q��;��x����D�L^�'nW��}���@]�`C���������_����n�R,�[eB�i��'2�M",i����o�{���z�0M	tr��'�'�71���b5���;����;�)*>f9w�W��V������)���H�'�x��;KZ��`-9��;u�`��������d'&�����?����&�7�����/t��&t_a��z��_{pyJ��B<�I�;������������cZR{XQ�:,UQO�U��^�,!��������s�wv���p�B������slz�U��xE����`�����F�8~��B�����jq�71�6q��>����^e�5�;i>LD&�c��w�7�4�4�`�	�W�G�Y���B�U&����)t�$���
[��������'�$=xr������HJm��
5XI��G6OnNj�2w��<���O��'N
M��Q����<e�MM�MX���	9q���;��rK��N�����a|7!�JLV	
��~�"����>L�gi���L�%LP���'F��k��s7�r�*�����C�y5��0'�.���Ao �ae4U��L@�+T�J����{�x)tM�1P���b�M�gO��ypH��R��+)B�H��B0�g+���-X	m����M\az<3��C��u�:I*��Q9��)���L*�!y�3X$�k�Jv�Iz��O�{.H)��$d����d6�1O,y�����2���0�7�+uO��L*�WbSqr��D$�dE��'D���hM�zu��,�LGB-�>Fy�z3���F����:�Bl�k�]���'1^������sb�V�pE�B*��xV#zd��;��XE2�om.Z��Y��"|�-������j�� �*������cb%�B����%3��a��������$��-�T��c57
����8n��%!HKa���o������8o'>A�����6P���OM?���#3n��cSGv���6G�0u�i����N�Sca�'������{��b���7���D8d�S<��}��p��#Z���v��6�71H���~�����$9� ��F?��6|&u��p����������A0K�%���!����%���������gf�T<�v������	�F�-�w����"H�����4�$u��3�i"����Ip��x�1�et��11�qB���;��|g������X�t�B�
G��Oj����<�2�����A�&�������Z�F/���+�B����fu�o"�M�R!��*�=�\fu����gP �����Wp���VU������T��5��h��4xM�"M"��K��f���a�NZ�h��9��)q�~nh9�|s��c�I��������4��u�g��PF�-�Z�xd�R!pl�q|5C�<@qb���}+����iN���x�v�U+v��{v�.��#�a_*�g4_��R����NQ�����������f�+��u�"{z"NhOEzN��Wq��Dh�)�80x�E����$��1������cU� �}��^~�eH���P��W�_|�����"A������`�s�O'N��	��:Z-�q[�������+D���a33�����1�P��Q���2����o�D������Q���L�i����2�2|:G-�e�P������f7+����K��%�j�6~*�n.��c��^j��"�5A�P�6�Bm-y�������kq��������-��h�`0B�aY�x�r�2
�������B�$rX������V�\^��{&���<&j�eH�&���C>dxQ���a���i������L����M/�6W�o�X�I.�Xpy,gBe<|�����
�c��o���/���8��C%���Q�^='CbB*tR8�!���������Xp����Y�'�������t%�b��+m�����?-�o/�E�8��-��	��~�;�R
�2����&�����pB������x�D8S'��h�(���K{s=��P���	�Z����Qr���
L�!c�������v;1�-�'�C���J��X��Lh�9������[�fF0����j��p�`�oT@�w�'����"3��'�o���������q��3������������:h��>T���/.0^N��I9�����)4��6��yV��k��;]esR�SK���gbl0���.C�-L���m��������K8�1,� ��DaD�|wO5���.Y��e��lj����������@7gD(�-����`������eui��y��^�}����(��n�TBQ�g>AM%�a�����*��wC��	E������Le/VZ����d�E�	N����&5���4xw7h�Xf:�*�����kj���,�f�9����|p��5����'B �������3+#e��Q��W�?;K��h������Y��M�C������	�)�1]�X���ob[O!fGC���58��cY_v�~�^���T2����
�~"�e9�*=��^;���6�_�Kq������:���P]���M������2�8���w��(?��}-���[��M���\^�zY����0.��\L���\��z���e���q���]/��������R//��V/o��^j
0]^J���m���������^/������^>��{�T�ty+�
���F�S���[��UE���e(]E�\��(�I��W��UW��(]��|UQ�Z�<�2�R�1��/��v�0_�W����z)8a��W�����_{��0_/�'L�{-������a��G���t��z�b��E��{����E�&1��bL�������������\�@�j��1Iq_����1�������uq��j�]�E����+v\w�^Ty\w�^t�_�^�y\w�^�y\w�^�y\w�^�y\��|}�����V�o��^�/4|��q}��/t�^_�z\w%_�z\?��5���|}/�z�h�����g�woU��M��1)x�/����������7s�W�bM��_�	^��-��1%���-	^��!���#x�/f����������W�bB��_,^������i�
��&e�_M�[v5�a@��4���W����2�����jL�*C2 �z���~M�K���d1$"�'�!q��ah�Z�>��������t��wa����{]u���
{
d/���rF�d�����#�O�D��(	.���3'�\����������+Ct3#��4{�X
��X��>��x.���CN�C_���?��
z�MB�O{�Ehh,�B�fn�@�2�����^
�����9/gD4���4%4c�j�2�����������#F)�X��!M\7,x��-�C���__�ykIta�Z����f�$��H�b�����L�C�'YT�3N
��H����uU'�3eE�����4c"����P�v��b��2����%v�b�O���	�89&����E���Q���$&����	�e|�l�����b3s3y���.v]	��|l�_��5�N7�����8��
?����������M2�`W��\�03�������F{����	�9]O��Y�{��CZ��C�Ii��C�+����P1r��@��(��q�Xs:K������.)JD�.CDJ�g&T���`��vA]a�-G )g�_�'�a��sHJ�a-����0Q����	���@Y�-u2������R|{��E��bu
C����l����V�j����}�i��H��Y	X���5��y!_Z�;~^���� z�r����b�Q��@�?�D��qh�9l�(����v���>����C��Y��N���.=���	��NOU�4
��L���y#�4n�x��R�Ekw��t���Kxf����ir;�b�*]�f� '�?�QE�>/F�����r�M��m'���6%"CY���+�m��2������
���w/4	2�����PU�v���f����D���R$��9�31�HP�.J����}�q����M��rF��������uL�MLKm�S}�//D�0�:���]P���C�&�:~Q����h���~9�����a�"4�����JxWu%����$�;��J?/F{�9���@
6�:2<��y^L`�L�Urr��D��z�/-t��G��`�iN�<
�S/�Z��DM���	Sm���vW�0��2H��
;�%��N3o.|+6-~^�v�n#��"���b��:�����Ge�;��2���m;o��q��E5o�a���x�&�������)`�������Rs����~�o&�f�e�/���W���5��T]������r\��ej	oo�r+�i�]�p>�����|�E��udZ��0��8���5/S!nfGOP}[-�"�����F����M�h�,�����M�}~UF���T�'���&����so��'�!�^��'�{��+��R�Mj]��c]�t�����q��� ��<�����JZ�Q��Y����	�D7N��F�����3�~�����N�QF�<�u�.J�KL����~t3=���2
��{�RWF������*��=������R��$���[��Hko�u~�.G!~f���� �������D��9������r��O���p3(<r1�c��C:�a��� l�)
����(�C]�|uf�"���q,���*�z&�ax�S��,�DBF���t����30P}��&��)��17]+�r������p%��m�V�S�i!�+# 8?Zpt���5��a��z-1o#d���MG��;~f�����tvUq���w�9�mx�6w1�d��LXL��U$�R��2�A;��&l��f�
�'~��rL.�V�����+���x�T��^0T��/'��^O!C�{O
���������#8F8�����]���
V�9����W,�UU�:|f�������8��D�}%������1�9�o�G������c=a���
#��c]/A�5����5��%��"r�px�6�YW����
����xt�,�3a��z��a�E�
P�`.���������������Yu��o" �w������B���X1[���s����7|^�BE����M��6a%�,�nL5H)���g"\���iw��'C���x\��n<��P�:�n��Y��b�2�uDJXW�qm]��d���49ec����eF�j�m�������}e\��_�Gr�;��s��p��-*N+Kp�0x��=r�l��PI=�Ys�$i���@�+��f�H�)����m��V�A63�#fB;��tR���I������d�Sq����#D�\&�b��3$#���� {�c��-#���}�Y9�aH�@���}�rK8Y<��:��"��F.2����k�����7����������iJ��"�$+h�@���d��:u��$��^�a���@9
���s����G���M��R]�,	�U�O�N�-���Hz.a�:y�VK���v����
F�t
����P'���b�
M������@�f��������NoW���|o/�����'uMD@nuB���Y	)���^8eN0d����iN���_���/�@|�������+��4������c����+���cz�]@��U"�.-�� _��� ����Y[����Ah����"O&��Q�I`;~l�,S��;�4S'`����B�.G�b���G����QA�����H�t�)��$}z��$���f�M[U��@��}@���-�����XK6��9���	L��iI+����85}:��6i���a�qS�`*xf�f�v<���E�D3F�N�S�%Z:xf��d�kW�
A�;����D=�m4�����}g��C�J���|���K���\�I�N�5q3�;���G���+�t�����+!P����b�OT�J����!��\AZ	1��8`��*��3CS��V������v����OD@��������Pm��>t���'��B���S�33��M���RR	O�a����1d:�`A'�*x�
\������Mr����g*������Yt�icAb7���������c	��T�e���G���53�F�5bn�)!�	�Iew�g�O���"��������T&c���G��-��#��c��Y��c�h�|5a�yi�w�H��������
����(�E��4�����#Hc�3Jff,��F��0��-����{-�Q1B�d�S���(O��K2�:��E�m�mfC�F]��Kd�S��
?��F)l����l��<b�?>3c�����y�N���	^F�%F�����NT��2�����Z������u���k�.��-����D���UTf�w���	�$3�v���y��&PN��c,�E>�3�ZN���6�L8��������iNI�qX�V(�q��B]dP�������Z����&�0Gn��nT��b^��a��x������'����R6��!���*LKk��M'��n��Z��'��vu��VKHZb��2M���������4
zO?���S�a�?fF�q��~�����/��hu����(����UGh+�'����c��������0�l�_��a�_d�[��6x"���5����	�f�F�idL����z��������z������r��e�ZgF�����Fw�K]Tt��{h���UN!�b���d�Xd����!�	�g��OL1O�����6�b����F�&������4��T���l�<��yQR�}I?�z�~�R3XL�&*}�����=��h�5���3�wS���R�H�"�}�%v_RVV�b�O�`������&Y������n�O�`
X�jL�_B F��jo���D�����7m���3*�1l���j6%�L.:^`��[�b�]k]���6�^'�f����M�K����M	>����\��b�58��q�%����6U���5\z1������H����{������3[5@����	��<����^�~��XO��QJ������b���v�������3!6����DKM
oo���\=��{&1r��#�����X��Ry�|^7�=t��L	>���z���!X�n�U���������4<%
�9��[�#)!����-<U��O��V�%T�����p�|j
PU_�G
7y�x�jb_[�tkb��������!��Z���+��������hu�P��J	�G�JvE��(cB5B5�%��$������9af����|�Og���:3�f\_��[j�`���/�Z�
nJX�����W_��4*<H0I
��(3��j���N}����j�����&Q����/�{��T�h�Md���T��c/�Kp�p��.2��{f��(�5�X0�I����R���9&BU��9�|3�/?�E�^�I�� ����n\�(%���,��a2�	�/�����U��{Qz��U��De8�y�F1��8��5*l@et�,��B�'U�����d����G�C���3�`�pm�
9��6������L��P��6*����4���Q��z	~QJ�E�N�2b�3������&��|�u�'��9�I�b08���/
Up��`,W[��9<f��lO�I
�0�=���e�Ww�a������VMGsW��	�}�u9
qx_�T��.@������'"R�y_�W����K7�2a����j���E�W	L�X��E)��Xp��f�_`|{���E3��h2�z�'{�O�{�
�Y��/�����:���q���86��r�}>Q���D�X�G5a*��LK�@�f��.{'}Kt�D������_���
gK^6��w�7QI�;�"d:��gR>��>�Y�w�o�kD�Y�����uC��]=1��)�r�<]>�V�d����=���S�X���f�"Ai��?Y&��r�S�sl�������\��I%C#^y����P���@=��\]�;�FKD�����P<���=��������������L��x����.���nU�~1	#7/	���x@�9��
�b���8C}�;O*�����Ts���|E4���6_T"dMta�G���RJ��;
���t�L)��y$l�c���3��#����n���	2�*a�I��</�����/���0Q
���*����|�*�����L��R������S0U����k�����]��X�>���yj�d5�����f��#���xcZ&tYw*z���jK��H�iC1�Hr��=M�~��k�A���������`�?���-u�2�
�EI9�p�����+��~�(�K=�
c�|,�=^S)%�*�^����&)c��i���*=���2�DCwy�oV*9��=3Zz[gx�B&=���f��JQ�7!v8!����|�#���������v.��>SB���n�nm�-+��o��>SJlK���t��9�Uo��:-%����x�Dm��o����	��J>:�:\�x�3(^��o>z|b��:���A�����g�m��E%�6J�4Hu���9=U�oCO�(:�2�m+�-b�ff�x��C#\_�qa�*���m�Ch�b
gf�x�:�c�O�h��D�S)a+��n�XV���}M
����ft51����	m,����s����,���b��,P�o�2�%��=!�"���u���x�K3��H!�\a�����	M�5�Z�L)��Nd�A��hp���(%8l+��6��2�_����/q%�a���x�TL��(T��cs7����{^�~W�v���<S
���l/�NgobpB7��nba����e��G�;��j��:	�?��1�9��?��B�NB.JtgN�������D��m;
�c���^�z���}�N1��X�pl���U���(V�����mm�g����������(%4��~�B��xP�/���C���'��{f*�+L,����@/J?N�{C�C�P�$�7���+�x�C��v����y��l��j����z��`S��Q���
�/�i a��]�	�O�T���q�h����BY3UM�������(NL������;{/�O�[�'������%F�������������VF��rh��T������i��\������_����|+g�_&��H���)���A<x-���t�f�i���8�ebZU}�&]���Y����/�X=g!��c[]��Px��w�D�
����i���e�L���
�YV�(���T*;;��BS�C��'96{y�m/`���$?b���<j6QQ�;��U�M���7���{�C3+������kp�������Q�����Q1F��(��@����1��x���(���0�������s�p������16NTF�����eA��)�h������@5�PPmP��~�V)%�l ���
�FUe������k���n��Jp1�SE��A?��=-�Ek�&���uya���Z��">U��q�c�����s�M��n���j�&�T#��C�m33��F~��{���s\�qL�jKM���W����K�O��gg��(����M6.�}Q�����}�����A���E�*�f:P��]����DA��s%qA!�wS(J52��:
5�� �w�#����*��{���1L���oF,�'a%a�T�� �s7a���N�A�����<���w(��
Y+����<>���.�*|Q�������o�mbrb:=�B*
x�b�=�4���n������(���e���~��:���:d,�k��#����,�9SA�`�U���9
�o*Lw�a�n6Kwt���T�%��u��De��������	U�B�O���N�U����fF�o ��)�+�������sHxC�ZH'3�_z�I�V�����
���������t7�������~�9���vg����t����x����4���,<�ifL��7���t`�;����b�#�du%�d���sX���������i���H�.��j���Tw���[0;�Ux�T"nW�b��&����4�v�&���^�Ju��;��������1���x
�f���Yt��������"��75d���0'���_��)����~�o��&S0����4B��mo��Z�>Y���XVv+���za��*Y����)�Zf7{�X=�X��,����r�����gT��X�q\6p%���(!���i����� ��r��j�ja���p�}!�Q][tQ�h�����oy�������L�x��zKE����/�����]�cL��~��w�����;a�Z�C�0���g��8$�������q�J�d2jM��Q�Yx��������u�-�Z��.���m��`X6������X����Q&�j�S�]���~#���h����0��5aaP�+�k�?���q/,Q�
�����
�.	V�}�=�bn�}������n����kax��|&���(
����*m`><�������"9�Ydf:�%�v�~�k'o�R��7X�+7�dM]yx\=���O�� ��}U�={�;R�|�������I��C������"���:T�{\\R���<�� �f�-CzHX�#�9��Q�zi?#���
��U�c>�����<g��C�\��D?/���+!��Omf4�K�a���S�.Mf�=.���``/������qv���|����dC�{I EuK�h,O+1S��l�{��I*g����O�N�U�C��,�D��	���vs���u��u�JN�o�m�Gee��"��kw���yS�8`e�x#�{�)���\��--�R*e��e�_�p��46a�J�M\-K���N
D�'��O+�J�>���2q�E���k�*�L�A4��s��9���YKfG"3����A�L@O��c`L#�Z�U1�~ ��_�D@:Q>"5�����7Q���R�sq^���
hj��LAc�I/
5�>�5h^U�G_��nQ�D�f����t��R;�e���ZW}^�Y�Z������r��:$��Y�K���x^\����Mh1g������O'*�O��[���)��)#�I�VF1:��=��@�7��+���7�����_t@�$UZ�hh����J+�S�+j�q�eU��9�:���KW)%0X�j=47x���P��=q�j=�~
�2�V7e:�#�8]�&�%�4�������R�4M5(KHx�4)��I&�t�xS)Ud�7U�{��\�I+�x?�)��&<z���RB����9X:�����D�&e�4��o
��;��&M:Q��=)E�>�s��8��Vb[Bm>/�Q|��JLh��[mmt_�����[Y���t��]������
_-YZ7�4I��Fg�O�v����%�R(2�?<��������r��0Cp��1�b����&!�}E��Y���!nJp�
.�>^)w���m�"6�������{>���?1�F	!q�fN��F�nT!>��X�
�4LI�w���BH��R;J���G�j4��F�'N-�����L�^�X<���Im��5�<)�qY^�<�8�'e�{RIH�8���;S���=����?���b�w�����=*T��z�Q��S�G�5���x=o*��&�>I��x���q�J���q���	��Z��	�{(�1gJ�/���D9_7T��k���$�J����+�����N��U��)j��e�4�������*�l����R�0e���E�E����#�3��xSF�_$�.��U��{n�c_�}�}���JY�LQX�aAsW�R��=*�9�+/�������T�'�g����&�$-�}���J��QX[�%�L>0�Xc��@����;� tU�qIT��4I��'�"OG�^����JL��-������j����=�V�W
�V�b5*��������t����m�.�io.���/VZ��%�!�a���9������Ve����+u��3S���xz�b�s�%C@[lL�Q%V�I�t��bzj��T�$�S^��P�@�����B�6�T��������ow�3��"|4��D<N�|���4:�����2!h7�����l �J��q{�_� >7��x��,Z�d��o�v���I�Nr���
���74����p���z���"X}���d�:"�P:��6[WJ�[��Gl�n
�*q��,��KV�%��XIO�5���Ck����c;��3�h�����������w�����9:��8����|N�+��90����LQ4N���j�A��j���WV�1e;Q�cO��aO<����'��Xl	���^
�(kj��Z���j!0P���m���ar�*�:��	�F���K
��:��{_*�n8qLcj&��{e*��Lh��a��9�I�}�u�����u�����33�����p��#�rT*|���j_�d�H8�O!�2�iL8���6������v�������s�Sa�l��	�;���*�
wA���j4��5��"�nw3��n��K����i���IJ�r)�,�S[�1&1�,�mL�1BN�L�,��]P�dA� V�9x����f���Z���:lD�V��!���'IH�I�D�AW�r7T�eQ-L�	A\�G_d{/�`b��_�4CR�'�^k����i���2�Z��BR�����e�T��7��KSCF%����i ��j;O
�f��$��� OT���D�Q�v�R�S?P5K��m^H�k�9�z]c�&�n�<�������P�Dl\~��!i��������(Ay#�7�99�2�"������t�����|�y^\n���8�|��0�����
�q�	����>kV��)"��a�r���LL�	���ejsm�M7U��[�S)�G�$I��%��A�{�!"�m�H��%3�YS�|��3��ST�oK8{��q�Dz{T�b����=-���R=)QjL����7����lc|�-����`��[��Y��{��=�Sc���3Bd:'�z��1�*:�e�G?I��g�\���z��-����x���h�u���~��:`�.'���
��M���u�|]���
5���������WYx^����W��������W�����U�W�2�U"�x����!�����Dq����{m�s��$�~��6��R2?$��,%��Dg-Y��Hx�������U�?I�������*����f���o����ze�dw������~������}r������������U�(o�����o�������������������&q��
H�L����+�gF���M���'����qB����uw�q0����T�0���m��*!P#�BH�"���2Z�+�`�F0=3KM^���d��![Z��S��olxn_b�����_����?�D7c�q��z$��7$����h�`tG�g"P*Y�-Mu���h
��bL�E�Fj��`D�>3!O�}��w}���d���dH�'�������VF��T{�8�����3�\v	Ut��g6>3��$M���C�YR�4����W��q�O0�?.~e"���@:i{ s�"�\��tc3���X�g��>F4c��L�����`=�DBJ�GO���PF&F�X[��~�$)���o���zN���t�?�[�|Lk�W���7Fz=��|��F�q��G����|f�[m;��o-D�(���|Ih�>V*�6��c�&b����#�/��iN�-7������Q1v&��9>���m��D;��1O��oN��iN
Q}�p<`>OD��eJ����7d��]J4,_i�(n�g��	;� ���,m��V���x�9�����9�t���E����	v'F��c�������q`��.98%�-k�Y���z�^�z��H����&�B��C&F�(*�h,�%�3~z�@�v.!~f��2�We<B���I�&f�����u�NX+�q�iN
n�,��V��|ffp e�Z�wL��������v���
�_0^����I7q��"
wE��PkV�6,�������&�����,;�Sub�����w2�!Y��e��$��gf(�{�2i_h�IC������a���q�8L�W������
��[��9�W;7~Q���-�Ym�|���+3L�>�}dP���p0���N�Q��]�#�X-�Lh�r��8(���������p�y������k�-A�gc,IE)�&Fp���������[������B�qN�NdS������zh��9X�W��'a�iFv�Bh�lHC�D4�3�����F7u���C�H���um��7�?���-v#k6q�/�N:���Ql�N�vb��L�`sy�o�7�0����Y-t��i�'R:&&C5��}��3�eT��d�
�Of�>t�C-��h!��I0>jlS%$b+�����>Gt9*!p��iJ���ce^�J��f���D�,�rf�g��dF�ZN�O����+x��j�[$I_#����0"�d������X3��y�G7�=1�Y�O0-�%f3#XOw�f���Z��|�j��-_�F��<,"�!&KlbP��9 1����L8d(���m)���{rn���`�����`V"�Iw����(m�7pU�����
z�iN	a2���<r'#b;���Ig`R�M`���������-K���g�xCD#x[S��i�M�i������Uc!��$��HK71M	�c0���\�T�3LY:>0��$����+�3	��j�����OgJ�y�p}�\��
�r�{��,1�&f��W�a��M����]��O�ur���4#R��R	[�����UFj��V��Q;�� ��!�RV��D��R_|�+��y{X��*�������Y�UF������\����\��)&�O���^���c�c������������C�.{*���t�#������5t��(�V>�a�yf���'F���h9,{j��P�M��!�>�_�i��V����/f�X�w'�\���'��b����0Cs��P��@�^fDD�'&c�g��tO�`&�\_m�8�ev��i#B�o6�}`���a@�S��n�Hw%��f�q/Me�y����ZIT�0IY~�����!(k�s��D9��@�a�X��`L#WF������:��Jj��!t}|��?���������L�`5������9���S���@G��P������')9�<�g&S��>Iu���=�73�[_~
e�Se���w��2Q9���[��c����<�G�k��G��P�&f\{���UDJ��~v7��}��!���J%�1^^a&��/M�s1��g�����+���0�+j1�kv����w�!�2��\����gB+#�Ls��eAL
+���K77�
���������=���3�6zVf\�O�B
��*%=Q�+#=�<z^������n1C�4�FO'L~3��)K��.�[m�%���-�/�H�ge2�x�\��f/���i�P���"���"�����]�9����j�p�E0���t��C�����bO�)��\��~���&)���lKP���M���B����E��������5:�0���`:V!OD�M�<8�yxC�E%jxuj��it&�DS�9o��W���O����l����2/1OK�w)��B`��(��@q����TN!���������B7wL������a�F�W�)NJ�P7�P	�8�@��8�]���b������j���D%��E�Q_�g��Y"\Hn�S��2�H����6��������������	k��H
q���E��@����O�h��6���9'B��������J�L��s"��jmD#&1��9����)�3C���;��`q%��o�B�����63
1������>3�r���%��Z��Z�#wib�I! 6aoRs�(����@���u
8p��31�9��~������.E{��7�
!��/"��1�|����d[(I��	���E�3#xgKV����"[�rn������v��@�Y��DHw�o���|�a���w!Nyj���o1��Nb?3c2���Jc�^W	���#�|���I�i���-�h��6���'Zh������<@%2��F��n��DaD����a5M����n�`�\��p'��q�J�5�(�=��Q�$�=�rD�D8��P�E��BZ�������q��?Q�PU�	>�x�G�����kup����0�;�4����������$n�����'�����D`��j�Q	j����:c i�
U�/;����G��}a�@������N�J!~^�0"�`���b`��Bv�n��c����h���2��E�uN�������$�*���~zX�^�W��9�2?/f��"fx�z!8�O�����b]Y{��Z��wJ�'HUlLLpM1�D����7y�[3#��y�16l�c����� �O��g��
��<X���Z�i���d�G�'%���z�Q-Ve�����f�L@*��2�f3�#�n�
������D4����5��J�K�D$w�p��ED�2�q�Ls[2�)!�6pD��$������`��v~��>��]����s���y4�v���h�L�{��z�������Z"�A4�m�m!JN�B���s���6{�0���-��MBZ��#:�*�D��d�0-�zt|v���{����
��k��4+!��rxq������kt�iK�A	Qk��N������z]#��1�A���`��`m�
��!y��%�u7m$=����TP�@w������@���,CMj���CmXP��j��y1���H�'��G#���nQ�!��t^t�L4���R�h��L������a��x�
)g\&u�W�Ph�*����,��\�V�{�p������	����?�\���x�w��O��2S��Ph^�i��<'u"��5SJ���C��
m�H*�8�adT� |2L��~3��L�z�0<Y�)=z�_Y�B���'���JL��'�
�+�Vl0sJ���I�Z�1�<�HE�hW��yC�����GY�_�6B)%���`R�������N�����n��zs�8�\=����/X4�D� �a]��*�u�	a-��������/�5@P���V���,����������E)�^�EP��-��M>Q����J\���^�X+����n��n)(���C�1��Y&��)|"���1�h.O�i�v�LBM���AZ)�XD�����B;��/�����$�eA���z#�v�������I��TF��1�����ZO��I�a��k��������E&��j�u���y��E�w$*��n<���43ZZ[��_���>F�[����]�y<�A�o�/C@���F0A1fcvKgC�9�ev���%o�����YL�X�n��_��M�=��:0��|�n��-�������CJ��;����RB'`
�����j����AE�v�:Y������/q���-vp.;��0	[�;��
����X�K��L���x�&��pC0�T�(
��6M�[]���A@��H�&J��1O��?��?���]�>���0������F��K{�����O���'��/�aHn�~;�NTF��z
(I'��7��_{�i	����p��w�#�f������#�I�L���,�;����o�d+�BM!tm�d83��ZD� 
5���m�����i:��T.u��c4��9�!��O�YY�:�oi���f&Da������	3�af/xm�(�Uf�����E��#w�Q�]�����=I���%A	F���t��u�X�a���\�@������� 3BhR���'���p����I��q1� X���B��zpl���������L�DE�|�x����2����"�2��������������������/-�~a+����d��4��C��4���r�J��W~f�b���@����o��O���w�q���~iX�����= '��'A ��s�]�,�4,�)����C�2��#AK�����HC|&���2c���aD{1(����������03xGS,����ik*N�MwvL1�h�``�
�tVe��`f��n�PT:0���X!|h<�� cS�+�S�����$Ce����9Oy�O���� g�W_���i0h���+��hZ�aj&����q�|�F���[����V�-����\9�:�����x]b�*�j�P�_��Z2F����'&�����JD��c*eb�S��Ol9	�q�pf2���X��
����`2��P8��X�3Y�Q�������h�I)�A��gf��v.,�F�Y��fV�Z��{�H��\\c'X�-�u[3�������8S����Q.���������~�i��nzyIe��5��q�	l��4�������b`����@�:a��]�\O33�R���S�2�J��V��/	���y�`�4����h&����Q��d����]���V$�<�g>��13�j���%��[�7X8�AQ���p�(V���^w������h���������9���M����M�!�89���%��q�gXBd�yQ�ws����L5���[$d�
'
MHN�������/\7;����a�@�W.���������rX�IF"���;:�I���"JQ����J����d�S����_�In/GG��CV�V�k�����.wk�G�=�kZM����]��������I�L���	u��h��5S��D<%T=�b��~��#�����I�D�/I�3�x�*��r���R�(���
a����~,�@A��U�]FB4��������h�t-�8D��&m�yA�6�?!��R��`�3�a�'�-��p�\&nA2����@���@����v(�D����)Y<<@�/�&�2k$�;�c9�k
l::)dx�H�������H|fB R�F����3rz�6BX,'�x�f$���|����O�q2S���@��e�^�������So��+���x�6h"\���4"�����`�T���u-s7�Y�)�p%P$��fv����L���=C����H�D)k}���-a������#i`�js���df.N"���j?Xb�gb~��Ox�,bffhb�P$������L`L����IT��$���i������eCDfR�N����+��d|�zCr]]De�J�1�9&���u{;��R�����o���D(�W�}������ T��	���Z�M��k-W�D�Ex�7��V[�*�#I�{BU2���i��Jrs� 3>�&��d_�S����U����T�Bh!c��}L��K:&B!��!B�u�����^��P}�A�2�����j��e��"3�����t��yfJ�D������B����z"��f�L��/��2�p��0��4S���
y��g��j.��e���l�n����H���N?�I�t#�f�`��f�����[�**Q?f�>���|���&O�1�V���DxL�I���2��h�\z���;����B���!P��oz��@�	�o��N��*r��}W��aeZ!T����H��%�	}Q����F�X=�}�t�U�;6��V�r9��2����s"�,�@<���������j!2�oL�H�u��7U]n;��;��x��FB�j�����f�w�_t���t+�!���~�X��IDe�qw��Q�p�|^L���

v�D����X?�;x�����F���oKMa�,d>/�Q�V
jKr��"��� ��x�C�2��������lmzr;l:��8�J���.0�W����2a�{�-���}���E�hVs�Q
V��P]����)SM	42����A����m\�23��;���RAvr0��T��
{��b���1��7���}obT^%��a����B��U7��"�=H���M�������v3��-�mn�Xu���d7 ��pW�u���E<�,o-�C����&&pg�����-���`H��c>$j���P�X"=��U8������7n�3��S���QWVe�3.�e���B������U������f�P���-�k��M��h�����q&��3�
�*e�]��r���s��#s��a-���m��Z��4(��I�`�:`e����}�����c�������u��E�o���KOFS+P"�N�p��5������VO�����
'��H�
�E�E����}�s��X�������g�&s����|�4h���G���y�-�YWl���g&vz�;�
�w,�%�U �;�Y�0�v�Y��m���8���B�v�	�����"�0�n7|f�U��o�h^���]8h�������Mv!c�~cB��@q�9�o�AJ�����J(Ta[pt��C	���)������az�F�_0�2��������[f�^����J��p��BO�!�_X�b�����2�:nJQ���������A����!�����<��L	����'�L�G�~Z�2-�
# �������d	
�6�jmv62_wl#AD�6�Wi����������~2�N
��!�L���9(�����Z�7��b���5nz(j����c��Q����0M�,&�
�u����BC��mLb@7U[/�yq�
}��I�����?�I��T�0R���=��"|"Q���������`S��.j��5���?2������.�|����;����2p ����|*���c��g"R�%�7x�fID����������)N���5�7����WSNm�����z�nX\-d�����gT ��NT���u���se4P��T0���
R���i���b.%�=���L�'t2&�d��f��GJ�������r�W�J����9o�y�J�������V��gy+����������������Z~�k����>j�������{w�l���,������������v��:`��y?��fyP=���������	������;�~�����4�4I���3�$����|fB�Wil���+��	�8����c��_���h�{]��q��"Y�X-3c��,�,'��X�<���c,��J:���qF�hH�'qM��=M��IR��������'H(ax �-8,�Jn��P�LK
}�GOr�_)�.��=aG�=N��m��`"4��6�I��Q�-�q��r2J���D�+VQ�J��~��	!D��#��3���E����h�q����;?��%u��yf" ����i�����2������K��N��w� r�W��E�3�Q��NoB �o�1�x�����������m���rL���D��+�Z�\�p�q�*E>�l�J�d��#��J8���u�g�} ���}c77���T�}�������>�������N���?z/���G)������2��s��kC���)?I�u_�
�#�>��Y�Uf�jd�R��+�}��P�}��CI�U�EC����~�S~�0��� | ���H��5���hA��gf���n�J�I�z�C-�Lh�
�Wi��J�+^L���E	��{�h��+a�wB���+����I������oWO��j%�_e�fu�b&�$�71�����(2m�L�B	����Y�UB�e��`T���\=+��	���+���g)�G��}DW��33�Mbn<+A������M�!��`e,Mh(AY��eX	�j9F�@�p
"t s��<�&;�������)���+��	L=x �R(B�K]�m`|
EXM�y�"l����`�c��E�o�2��4�����,��B�3�6E���,�f���	����&M�y-�/'�g8��OI�pb��8Y�7�%3T�B�NvMh�a��!���i���-�z�X~�1�����(\��	XM���������
*p�h
��}���KX$��:��h*�!z��ET����E|�������=#b�y1��s�	-���H����
����UW�J�6
=f��p����!F/��rOO"[�:�Wv�����0;9��\sz�����N�Qu������t���xM~���
Md���Vy
���H�J�[0�d�:A-�L��t,+��&�u��E����C���R�+��������
~=���O&��3]Of4}��Wu��4yV;��3��b��O=VK�Pd�n����������Bqqfe�Y�h"�>8��E��z3��X������|TH
y�TP0F`��r|pN"3�t��,n�������fz\<���,�E�����r1g��5jS|��X���/=]	���W�1����_Z��#n��2k��[*o�#uXb����=c������FP*���*�=Eg������S
��Q,$���Z�@���7`M�>�o���DX�A�nMmX9b�cT�e�[��21�esX�z���	|"1
����E�P�,8Z'�S%4��B��T:�	!��mb(���Z+��<F�d\+����^���+���fT�O,`�������R!&�+�B�"��#a�l(���jJ�����������/��U>7����r�uxP�vOB�J��H2�#�&f��V
��DH�`;��N��|���G��Ga��>,
w���6V�gF��!�����`Y�3�)=5�7����O["���{����0B�C6��)X���{tB�g��4��-��XXhR���*����N<u�J�a���'C��:�Lsj����U���d����d:��H/*���zr8X���������A#�������u3��!�MO{Hf�!@9Y{�����[o�/�r�t��[e�x�iJX�gfh����oLGLs*n�@�u�k�%�������}�G�J�G��U_@�<�p����\�-� ��6���{8H	����3�M�3�Cz�i����5��07b���L������r�T��D
I�����Y2'�8��`���P-��dwk�HKN�`�&z���L��o��'�����
�vf����=�Cb�X#��Z���j8�'��0h�q�a����Xm����rOp6,2O$I;
4U����<�V�%���!>����=����x�:Ngg�=m"���[�R���]����c��������?�D������9{t�Y������C����?3U0��;6K�:1�u]�������F$���a�>���Eo�e/��_��1�b�</FRH�!��TG�\	�|���i	���/$@/�lP�}���,#N��nFXj��;4��TF�j�Sy7��'1�}*�l#)��3�J�i�%��*��{�_^�����uv._�`R\��pR�/&H1��bl��L3x�s�����tb4���5�s������	�%�H�xGn�G�)��E,�� �R�
��U����B��Q*!*�
���~���91pQdf���4�U��8�B�����u�X�����4���� � ��R�&kx��������)�H�gfZ"t��v��7l���;���y����Sq������6K�W����<���kV)���Sp5����=��f����T�Qxlua�lP�26(���>^�|����u�z���v���l�p�l@�h���eQ��
�W�mB�N4o�c�	��8�@c�M�E����hJA���e�d#�����\���^F��2J�[�37�M�z���&���'r�y��M����F|��� f�'
x�~b�Su�<����5zJ%��L��*�������RO,�����,�/�[�j%z<1&W��MO�;�SPJ0wQ�������b�X���A��8���z����I��eyQJ�����%���n������t��|�ie��l��(b�������0�[����	��?%S��Qb�<{�r�������uRef8������C���bP(�6��s������TMz�\m�e�*������
Kk�(s~^���D����;*����="�Z����U���7��^�����>��Pb���"�Ox#q�������F���� 9}���O�tP���<X�C�LG����0�]�UJ�m1�j"���B�*�t.�E��;��b��-������&SJ���n��J5��o
�0�F��2e�ex�b�k=�%N^�������s1��+q$(��e)�����D1��G)��.���v�f����Em��:�A��9�_S����p�#S��?\+�PT��z�p9!����H�6i�)j���?���{|u�����\w�����~�RH��Y�/�m��X���N��\*�Y�v�h��j���yQ���3��oo�K����?5�ySJ `�x��Kfa���}3���U�-��C�*�P8~�f���(SJ �������u���Q��V����X�N4`(��������m�L(�P3�s�������O$+���#��J�h���1�����3��&Z1B�b�����Y���9���u\(V����+��MH�+&&B!7��8�����6�OV��hk�6OUg�Oc�#e��8�B�T���x�\���
&�7JwY�nvj�[=��TK7�S���FL4�S���G�W�&���{x3b������j�iZ�������A��@�%�����H9S���'6��'M�O���
��m��~F=�G70~��M������2��>�[�z����n������V.n�������������/��\�51�_T�3_��r���EEqq����.e�V\�F����k��s
��%��_<G��-_��r��5�r���\}@qq��$OH
*A��Z�]W�� ��T�]S���n~(]�s����tU���*JW%AN\U������k)�:�����UE����	(]-e^�2�*�~UQ�:�|UQ\�J����[)�6�y�u�!���G��,�@��{�R��������5�$��+�����~�RJ����k�A�t�j�$u-��N���V���J<k^��t����t��n��6]uU|:JW]���j(��WV�Y��U��Y�UW�Y�U��Y���Vih��W��Y	��u��s]�N�j��.��B+���UW���t��uz9�b�zLW�\����2��[�K&V{��2��U����W�*c�^���{��2��U����WI*��^���{��2��U����W	*c�^���{��2��Uv���W�)��^���{��2��Uf�`�W�)c�^�%��>��3�X�C�]K:��r�����j�c(��i ����&eC�_-�S��R�u*U�c(��[�&C~��y������j�c(wMP��Me�J����~����u����	M�R�����`��+g��TF������
��$+��9��i�{>6�����D��`b�F�=#6�$P$Zt���,O!��/�2[��BO�&<~x�2�3�����d1�=�	������7,��\-!i������M�����16�|~&b�1�&0����������w�����U"A��S�
e*���P��k�r9r��"��m�^��%�����r��Y�!�����t"+C}���B��g��F!
\:�$�� ��l��{d����b�Dl�Q(K=5Y+n(�v&p�1XQ	}���f���g�����)������9���b�
���i�<>�k-;N��b�_���vU*q�Ilx�5/E�V0C����3)z�X{k��w��"B��Eu1p�2P��t���3Q�2hf�Mb�p���N/�\�����V4:<��);z���,?���yu�WB����0/DI)-x�� ���w����$�\�E�a���1�����m�2�Ax���(�d�,?����t?�7+�uWt[���0<HI4�����QN����'���;����lp����T��T���8���N���'O@%&<N�P^:i�.��5<��j�w%:�i&d���`���*�Y�##.��x ���0vS�O�+��������������[�������V�Be|Y��.����2B$���),DW����V�>.��HP?�&=��&C������m1�QnV�����Vgla����g�Y@�vg�4H ��tk�\>l^�Dt&������G�����S��{�����?<Ti���D��s�y��n�!��e�����Y���s���+��Bt�ux)�M��d�:Et���.v��W�2e�o��:��`�\h|��:�L`���'��2@������_�2��s���e��ee<}�D��T��T��HUR5����#�=nP�V�}K�N@��P
GE5�����LG+�P��w|�x��D��TU2�	�����M"�����h�1��gHe�QM��!��BX�h����y<���u��
K�ZO.R�+1��G�]�����9��/m���US���wk��C�+�\�bDlh[�
������ug�lC�g�=�rw�@cXh���3.�m��3n�:���������&)��@lF��P�&��{�h�]	p�pWf��]\�]�]	S��d�!�i�?�Ms6���qW���>q����t�U��:|�����'I�uYes��^kCs�<�� ��wH��"&����C1�N��{<
n�	�IO}��!�i���w%4�$hzO�~�����y&�}���`1�_����K8��p�QRO�H���)�a��}�f��O�H����C�F��n�����
3Q����t?O�u�Fa}��p4A8��N�6� B�yuM�3d�5��Gv2���|?P�a�
�n�'�����ta$s���\��az��|	�=��������t�M}��������������j��J��w��Q�l��eS����������J}��3���|�C
�Bdxj��j�J�_�Q��������}^U�e!\���3z���Lt.�2������X%3���`�������JhTx�w��;pW����>���h��` �:.~��a����7��a�A���N��	"�ES���F;��i��.z��t&L���R��D_f"�m���w�*b�rO����S��#�^l�����(��j��<��<���� v����x������x�C:"A<���
�n
%���2]�	�.D�N���������VN${_y���LO4�����C��;m*H�z�
*B�����.���Vb�c����3��]p({��Ig&��|G]�?��mx���<�m�=�^�e��n�&��3���6� �����{go3�;��c!>�����7ZN��k��j��R��JtflM�<-a��:>�h�}o�����c���S�2�5��	����	��]�5�fb �����z����KM��������gf_
P
	�[�K,���H���0=G��Lt�?����-���3�S�!�}��+�������w!^��T���5pq��	��\��
�3���<@�)�0+���K��l���5��	��g��I��������:F�~��\���xtm:����#d����3���w%�5A[����.e&v�R4dNEn�W����-�\O�/_�[��k%���:P�52e`:����g���������!ng���uR�
7�:��ic1O&h)����u-��-�\�����D@������Wcd�2�y������%���w���O;J����C�������5����������a�;�O�o|�i��1QH����i�:/�\@3T�q���p3����1��}�Hym:�4a| O�����+�s���n�i�T�~��{���4��A2Q�
I��3y!v%Bw���2pU_$Q�	�B4�Y�L=�B���o��O����Az\�� =��i����}j��B�'Wf`jL���1I�`j�e�:�*����+c�����sej��vW��m��"Q�1��V���M��2�W�%���uDD��'�gh����`w�kD��P��S�"�7O-�R)c�n�E�>�.C���7q�2]E��#�$�1��x�F��yn=!��zX#���(�X�`����U����0���ehWQ�4��vy��������/���f�8����j���a���ve*SI�P�Q%�nW���+�ar��Pl�����v2ft��
��w�����sg9Z�\h�;+��RC��v����Ut��P\�2�`���1����2f�X1%�|���#��];G��j��6�a?Y��XS���J�h��8���/a}��d��	����i��A�L=zZ��;���n�W�g�5�&[���f���CE�)���A'���XAB�����o��V-9~���G\@��HW����e�)�Q���ru�"p*�b�n������bi9h���V�0�����C� ��Gt�q
��~^���=�#2�Z������4ASL|'�3��S��������ff��c��G��Dw����#S�q��w�S�-�������^Q�
(QQ��O2c�lF���Fh>�h8t
.~f��/��������������]pu@��~�S����d�AC'�w�����o{���i�1�g27��0G3.����X�(x���a��T" �8��%��sH�BSMLI+�����l�[$RKs�T?BT������A-���n**l�~W�H�k�ISo���0���2x���!�:S����r��l���E���N���.D���S����PD�	Ck��[W�K�L�n��!bua�m��Q�s*���F�ud����p6��p6]��A�t�a�4�����d��YA�_L��#������������*g"
0OAh>�0�L�I��#,��`������Uer��J-��1��3�b�PZ�!�H��K�����V���n�'Ln�98]�*}���	�{�	&�?���HX��`6�Z�>�0�ZE}�K�>����a�/�a��e�',c�������-����a�/�a
Z�O�B�&r4�v�� ���T���������i��#E�6�L�L!:Q`��K�b�=�:���m���<f��Z����b����z��#\S|&-aAg�����������s�GS���1����s��rD#1\S����h�T��Z�4���*��fa���9c6@��LU����=fd��*�w,X]?y8aC>�0��A$��&����lo���l�l�g%9r�L����A5aC�K��zv-��AU������}�z��aB��n�U�����@jX_pO=�f���"S�2��=�%����������*�_I�s����������~e}����d8����'�i��I
������ZY��+�����Z��lu��pP-����C�0�F.*��CrH�,�T~��&�OE�����"��"����(��g43G����[�v�^��<���a�����qa
��v3�d����>���}0��`��ALl�������A�i0����F��"a���S�����W5����_�&�va��,�����qbJPF��;�S�F��L��6�Ze�:����]��U����2���\�4�H3.�`V�x�[q+cq\�����n+n!�	���e���a�����2�����a�����[�j��evI������s��������]f��.D��N0��Zw���[#v461�k3t���a7 0�1��xO��B4�q�m�t��(���#?��OH�(��*n	"���%(�������7���u"z�L�7���5�:lE�[N�z�\��1�0V�+C7T��=z����!�D����V�O������ yO��������{lWf����/..��V�t�8d�Rt���{K������
�=���)i�%v��`a3�[~'��w���>��v! ^�
�(�E��;���
��h�/�gB7��������6�j0,�o'����-���Hp9�3���f��B@r9P���;T��&
X��u��j�u{M%�$�����������33h{w��u`o�A�[�kQ[gJP��Z������7����b�ux�
���:���������6O[4�Ie��x�`t�.��S��{�V���%K�����?��KW���V~���w������tfk�	O��)A�#���+�4j��p1A������7�GW?��0o8������_��6�m(+;��p�����w���������A�.�c���qc��wa�k)kwh�A[��b�0�U��������G�5al�o�V ��[����M�������=����H� \V�s70�Ns�Ok���1����3����L��fQ�M���J���������������a�k�!�>��g�'��P1���7�Ez�KV�� "�P�di�'O*��Gr�>��X�>�vi7����f���/��)��:t�j�d��������z��	+�o�l����1�8�O�"��i�+�������'���������6;p��2��sX��3��JVg����ue�m�' BdZ�x�J����p�2��>�8�Ob�����z�H����KUc�e��u���9�]+�����H{Yc
beVN�~H�"���
aA8!���/,1uh�`��3� �w�~t��pl8@�,���j�_���lB7���0,Z���c�^K��i��7�����"�a~�F�����J��a.��@�i��5���-��5����ea�$���Y����N���X������������Pz?�j��w�r��}�����������wO����t�q����w��
�����-M�!�Bw��������������;c�ae����U�+c�����L�f��P���D o���h��MS���n~��SiUN5������Y,��f��h���R�c�>��0+|�!���WbJPF R�4��P����C:N�Am���aP���|���/������t|����Gs��0�1��c��\�x�����rS��c^�D��Y��v�[����,�}���K�����9�����/	n|�G��4 >����D�4���
�oF��Q�1����O�w%bS/q�7]z@|Ef��d*e��������-��y�=.��e2��K?Er�8;�|�^x�qQ$.J�
���`W+qf7�
g;O��� ���7����X��s���t�NZ��E#K������?��{0L�Y���]	�K��D{Cg�(�d}�����X���q����B������R&:Y���f��`��b	zD<��a�A&�G��
+����rl�*�u�h��P,X�G�[���r��}:����yD����Z�T�S#F�X��M0k���1'b@NO&�K$�;7�;el
-
_1�L�A3���|�)x9aE��5u5������) 4>YH���K��|"�-{(�������H���K����V��� �
��1���a��c.��O�@���rj3
����PS_��1��>e����))_,��k]�����:J��^�U� 1�5pK���y
y���1�=��*�%���`��qp�-�4��l�J,�����Z��y����������/I�bQ�o����y��ae�9v��"~������,8�~h��H�VS��B}H ��-��Skv0���E��z�O��
��~�]{������,�����>eX�"�3��p�,���bd��9���9aw&�7�'Lp'�x�oA���^�{5c�0i�iS�{����q#_�a���^a�G�������
F4��(n�{Ff����26nIm�>t����0��[�O1�����	�/�,�-le~���1��
nY��|b�
�mn�Z�#z8`��7m\�0��4�N����=5x�����:&�D��[u�T�6�l��?i^H�����d��Y��K��a�o\rp�{��Bw�!��}������&"��#>�o�cX�$�s!���m���������[�i~��<l��$������V��g��7<Cl*�>��A�7(�}�a���c 6*�z�'����������lf��Uf�\��Z�q����I�z�&��~������-�Jf�Z/�H	��z2�G�����`C-��ND����J�#&��N\�|�����1!z>�q����6M���f��zs���3S&�n���Ef�P��S/q���]@v������B�����E1^^�Y60F����;g����p�������U�<�00��RJ��m����y:MVu���f`��y��@���/�?6c�]�0���(�$�T�~oG���!hb(���|����&3�f3m1�'����}{
����������=k�pS��y
��n���g��
����5PL�>�a��%���g�9�]��u	��r������A�DKD������U�#��
�R��LQ\ea����AW^�jm2����j���b(�u��#������3�B��;1���_'����1���)����@�o�"L����D��
�n�}�	�jK7��R~���c���x�����JCVu�B�8.�^���Fp���T���ITK�����h��3N��|�?hw�m"
�A,������`��	&p��&����'�+%�A�AB����}������5_D��r��&�uiB�A
F��{��? ��D!xN�|S�[h9dl���*>4�0�����n�s������.L�pA�������5�����y<�dOq!R�x�`~��������w%d_$t��ep%.����eP�R�/�A����+f����g^Q4�v/��	��T�;MW
����	��I_z���aa���g�KDC��#��'_��)����R-M������?_��{�O2a��a�b�C�IL/$O&���(��3�zRGu�s��1wS�L��>�>���iC��P�������83X��
D���=,���i����r�a��[�*�����
uM��ZcR�[���#�.��.���4k~Yb� ;��	��r/��E�I!�x�
��)Kg����s1��0x�{a\�w�,�����o��C�����3+��QO������S���&� :%��e�wm��.:�B�]�F&������oO��
��f� �_�/p�2e�K�B����O�}��]�����N�ofs q����t�p���.a�*<t���Yw9w~#k���P~�U���o}�)�����' �^R}3cU�X,Wd_&��t�/
|m�)�����~���.����[��+���^H�oa�����z��[���.�P}�y�T������4�]�u���[�p�B��$Q��;�>�5L�o"�E�]��aA��������M[��1l�	��R�-r<&�}����1[�{���#�f�����Sg|�������������v����d[�����`1��j6��`:3>9�-��H�D�{,�����D��@��0�.c�Q�$n�$�CPGJ�5��\�3��-�y��
aoFeP�G�
���3����2��X�	�*dy2oLB���<�$���O��9	�����OB��I�?N:�����!���r�|W��"�rD�����]Y�=\B��+&$(�����_�o�%��M�x%9����sk���k�b����#�B�w�>hw1�i"�G���%��z$q��pA���%c.b�r�M��J@��{�p�f�g"zB�Sx|{��c�b|2z�� 7�g��!�*�������X�h�pB�B�4)A���>��.����&b@=h���C��������.�R��,
����#����,D����0i��Bo�kX��wn�pW��L�7��?���u���1��$��!�gt�$�yb�9���{�� ����~-�a����e�0%�>!���i��Y��p�����d�����u��-&�$����#�a�'"
�+-*�34Nf�$a�`>�N����{z��j.L�G��I���b�-�H-2o����O$&�X�,S'o���*9!��'�:��@���\D�R�d"������/&>��B�f�x�����h�K���>��3e�����E������k&�>���#��'���eeF�F��a�N�m���w���
��J�����������3�a���+a�ci��\i>EKD�'��R����:��O8�����g����0��M��'Q[����Ks��*�7�f��,N��C�������2��?�A�]e�O���p��]�U'�s%f|���z��Kaq�2w�z�����L|����>~|�b>8��i7���af].�H��fd�e�1t=Z��F6����f���O��������i@���������0�	j�H�v��p�c��n�+}�,	o�]���v.~�2��fg&&��[}nJ8�D��h�F�/"f�}��������3f�	z��EbX_[������S-LD�f�R���Fc���<!%��QJQ�Y�j����i��6�_b������O�&������74���d����O���w�r>�I'BPx0i����)�h*��H(e�$��,���pk@��:*�`f�}����&F�����_���J�nS=LvX��5�{���!��	G��"Z�7`[E������wZ�pf�-|�[�SN���/��ZH�3I���h]��
��=��|i����ae8�5	�N�}El�h0_d�W-�J��R	7�#�2���g��.LPb����������7�Z�c�83?�4a�3v�EdA��X�0bk_��F=-O8��&%?�������	���ldv����d>p2Z�H��5F,�/NDU�Z�H[ia|y�J���\�@���:Q�����y�e��H�03���D ��1V@�k�{�M�|5�z�������U���,� &�Y�s���V%j
�� ����TEf`{T�3����R4Kf�Sx�L��m!�I$�j����O1f{��}�Wk�W�������U�t�r
��@��%�W��U�3���=����T��I��T��I���T��I���T��IE��T��I��w9�A�_�������d�qU(��!��_u��������M���)!���)[�P\mS�	���JY����o��IX?��?��������*J����������4DT������?���n�[>������A�C��q������S������o����?C�����E�6^-������O%������t�	]�8��0��?~�Lq.�����7�w���)�]�����W��'��	�<�ds�k|�;6��+���f����\���>#���{��N��7�����(~-���� ��s��M����L=|����"�g��y~���
��a�`C2
��
!AAH��^���7�����Z��}���QA"[�J���N�����3��)8b�dwf[���]A��� ���]�-X����SF�'S�2�Vn���G�?.}e"�	��}��u/%�������sE?o�~����q�W�"�����v�"a%B�75�;1.#3S�60Z���$):��o��"�������?��W��M��aJ�7fZ'��|r�����i�< �����T�����$���D�(%�y� X��~*�3`���Y������|?�E�)A�[8��'B��/QO%]�{��&��sX��qa+b�}iKL	����E����Bd�BF�����a`C>J�S�n��7J4n��q�4� ���LU2��l+�q�5�����5�T���M�Q�������o���T+��1c��L���[�@hYW~��B����3l����T-��$`�Cf��Fh*��o8H��A����9������!u�qNm��'�,LU���R���)Q��/�T�q8�6�D�H�q5de��J��6}��?�������%��1��df�����4�6�E"w �F�5/
A����}x�.U�������:��CLt��	��j�O��~WF�����I�Bk���67����0�T���W��	�vE�[d����s�Q3r�m9V��^�z�.n��12�(chP�z��&��0����T-�J�D������-F��R���s���h�{��������f*�����xi�j��^�q��w�����?Z�:�3u�R�~��� �Tn�9��Zz�����xZ�(�n4(�	f(G���LE��	n2��3Hg�r`T�Y����J.�h��i��1:����>ja��t�2]F���1�S��n�dp����<�Bw�3m�[��~&C�w�b��PlePF|�������}��������eW&��QO_*!�@j��!�h�sBS������7�T���������/�c�R�5C�*�~����M�Y
b�%d&xg��O�L�!��u
=L��3s%�����
j4i��VT=��7i��aD�R�H��|���.���^�n����Q}a?� ���d�-����iG�����u�����z$����1=�>��Y��:��&���uf�


�MXa���,r�����pE?��W�
�=�[�|��������a����e��h��������
���po��
�@�������qV]���:��ox'��@0�G7�SOL�2������I�n��|g"A�
���"��B>�!\���ZYT�G��5�'���la����W����V�"W�7�������u<S	���
V9�����n �r
���1������p��w��b�q���P�&������p����� {������Y_�5��RR�;���X3���W.�ri����y$��W��^�� ��>�A8���<��&Q��������"]����c���M��5�`���R[�o��>���^�[X'�n�x�� P���aJ�����?�7`"���Q��R������^���ih�|I���AN�g��o�6����	��1��H������	��[�-���o	O�L�r�9%�.����n�&���K���O�()rAE�>2��LD�.�a��^�e0��g�p����c�`h���R��5#�BL�(z�`2D��=|s.&3c�)_��������0�j�[�	_GEb���I1q<���u������S
S������[~�/���23���;�Qwe���1��[�I���7��#���O�?|�����X�����5��Q'�&9j1���i����5���E����Jc�>�����LS$�%T����PU������|��8�t9�b]O@�#�r���0�XV�i@��)"��	�5�Z1J��� ���l�'-�J�%I_�vO�����J����7����!����?�<7Wx.������J\����1z.L�H��8��,��=����9��-��V�	�H<)a9wq�@��FR��������{�z��Pz�?a�o�������%e"�������%.'a��w��I�)�U�}�s0I��;��q�Bdo���M!�[ QGT'z�A����@3Q�����zeX�4Z�Z�>�|Jf�K|�e�=��\=�
:����+�Q\�LD}��s�p��8�5n���q�~u&
pVj�{�]3L�C���O���w��Q�&8'>����61�����/���m���	�2<���7���k�ja��)r���{� 1��|���{��.%�t�s���u��tnq!�mz��[��D��n�ID`V��Q�E<��������+#����w������Bp�-�����ee9�����#����[�?,@�1f`T�%O�=5��$�
_�w��d��^-���n���y��]����������@�������a4M�A�����cx��|b�+	�Rh���1���U�v������V��[��v��wl;U�[~��R���]�+3��������BZ���e?������q�x�O_��S�������u=]�\s��n�G�pu�5
��(C�al��u���P��L��qw�#�3��z��f*���L�Z�:<�lk������������1�������,�����������"�3��Pa���1*��N��!>�'�
s�\G�_��1L
����9�%AS>������I�
s�2�o>��X<�C&T��J�u���:c"k��*�a���L�&NgMx���5��=�R��/F/-���3�aP��ZV����ee 7����o]��1��B��='�d�DI�	�{��a����/�m�D����8��U}Q���k��Y{�b��B�w���*&�VFXk�h�;�����2��#&Gm{�����Qg�W�N���c6do���O��-gL����9���6kf�������I�����}��s�i�a07��.D�D��U�(���}D�n��f��G$f`
�H�v�z`u1%(#hH+�@���V���@�L�4�=���>���B����N\�0�u��4���S��a���KOG,Q��7�����QV�0���(,!�pf�Y��n�Z�n�8�����b��V������J��J�f���~6~�,	��� ���=���^E#p!��o�~+��u�*a�d�2";�r%�!Z�1I�
��������pe���mW0����4$���D��H�5���/������;��h�
eR0��q���f�~����fn���2�1�PO��A{��6��n����zVF
����Q��D?`$/HG�S`DR�9�,��������<�\k����G�6��0|�������nu�;���?����V�\f4�,�������K�O�aM+������%���r��:k�4�{9WXKJ�S��E$�~�}�x��d�J�c���R,�4;�����=�Nc��/}�h��4������fH*�dh����'��:���:�[�.Yu��vI�o
��M��73��pe�]a9�j��K�b�
���=��61��:/����HL�AtY��oF5}zy�5�K�;���j��Jb�t�>���fy3�6��b��dS4�~���a�g���K���t� Otx�_����*1�_�bB�>SE���%+#\�-�5�x���<��u��l���\iXn�vR����8�8�m ��G�
��q�ADXz�w%K�<�D�UU"���z�[A.���2\�g��+mj��@g��������&23ae����i�B@/�	��
����F��X����35�o����L"���&�����a&T�Y<Q>���W��d.�d�MD����og���4����.��_���5h1y����q��Pl��) )7�V��z��d�N��2����%W���jt�������3�R]�pw�M��>.�l��y�Q-
�A��,fr�x��������C8)���]*�������������J<���j���+'*'P�~<��+n=�__��%��Z����:�V���'�f��6[�s!	�����;����B]A�&(��L�	U��z3�x���%�`��KI�'�C'&��":B%�U����2� ��]�0�\v�{�g�j��a���6��x���>1��������"A���i]K��~�y�3����B��6^L8��vN���$��Xw9�]0�"@{�)�J�\JV($oq��8O�����C^,����,-#�����7>����_���k�a�Q�t������,;s�8��X7	T�-�H�q�c�@X�X��GOu���3\Ho�	B ;$	�3.��j������S��	ZZL=h�������p��6t�DoI%�.8����l4��	�89�	�J��qq���T�z�;C*���@�&��2>��������<��nm���,t�n9s��q<Yt��#��[�������!��@�=���u�p�������\�'�a�d����;�B��*Hn7�j �.���qG�%�.�o��'�c3x��D�O&~g�9
�P��&�z������0C3��i�k��T��j/�^)/��"�9���w�r�
�FM�6�m]��g
�z�x�]3�����U�����
M*&�����P���`3� ��p��A8���L��IM���h.�
��+��,DU����y���;��C�.s��V���|0����g�:������8B�3�4��x	}�2����	��-�<��`� ���]x&j��T��������Vn2L
��}��D�l�{��]s�bG�L����/��������R��p�D��������3i�a*���S3�Q>���H��u�0��=� #(���CJ��c^�1s�{�O
bhi�������k�r�o:�.h����.;g3|F�#L��r�N0�3��=z�[���l��`�rt�o�M����M�,��D`�{>�#%��,�D��pd��V9�[��3�ji�Y�EQ�3W"�@��� -S���\0u�
UV��I�I�o$q;��]+���#���ei��.g,Smg�v�&�4[I���D�����iy���b���w�(�
�]�*/
��%�5/�/��Q������n���0�t+��e�(>���H�Vo���
��������,GO���	 ���.���NG�&��������UN�&�V@��oW��H��|�PL������O3����ak�G��%�K��N1����:H �fNEgj0i=L~���Z��1H������u���'���
t���(���]{3~����tj��8����S�.���a6�K~�	�M���=�Y
B������=!�(P�#�
J9<g,���y=���3��C���#�q�[9c�m7�*d�S&{�Bp��y"�n�������9����c_���s8�f#�#��g|zj\�=�����1cG\���e?r���;�����[~f<���B;��;	a����{�_������������3�r�@�(���H��j�}�K-�����������WS���.0�-��t����1�+�j�A~4�@����6AlM+8���Q����E�*%[$���0z,���5�i���u{,X�	�p�X�
Jjo����hS��=���n~j�;Rh��OH1�����h����I�=�BT:U��vT�w�#�������D�7'�X\�� ����Z�7���7</=�E���������n	m���D�n����2!��D�g��\�����N��s	�OX$��3AZs�������>�Mr��L����p``��%c��Qw�\ef��+���t��Gy���2,?\�:O�$O��2�����	#�V���&<�;AJ�O��&9��������!Z�S���J�G�>����e��	W�����uD�p"]�k�u�o���qe0_��	nC�/���T��j��:����.'��S\f&i2\����U��3��??�{��w��0(3"��u������7��(i	r5Q	m
s^:���T����p����Z���Lx-�FN���p� �.�������vp�y�	����1��{�3�b!b	�s�d|�!�=��%��:$4ur����G n���dj!�i���i}�'�������e�%��b�j��y���B^S��w&~h
2�V����G�.d-88�6��:���	�Fc�-~2�;C�&������lV���������3Q[���vu��$8���HV���"Q��������h��A_-Au�n�L������{_7-9d�n���R��}�2�;�m����c!�O�Lzt1/��`L���Z�� �\Cgl�b�=}�\N���1l�v�D(3�lg(�n��y������4Qe@V����,j��V�-Ev��c��������3��A�Z�o�����<9U�Yp�'��$<��}f�6�M��w�����X�
W��K��74��[��z.S����n����x��a,H���Y���Hqk7�H[�x&�M�c��m�|�a&�&���2�j��X;���@x4f�-��*k�1�;a�H���yQ|<h6f@�y"�r����v��O��Cb�������v���x �~s�~����IUf-fmC���������p��K��?�'C{E��1=]��������	B�z�#����!cyB^�����5s�f���k�}��lx �S������;�<.>!O���z�����Q)J~;�J�Fu������l��hX����'~WB����
\����22a�1��`�k�-�!�,�����AJ�`�cKA�QR=_��J���B�����0��r�������~��2H�������+��\o#�@T���5Q��E ��
7����m\��n��&�����U�s#�G����1��OB�c�X�X(��WMU�kgL%�h�`��j�"!N��~��	�jF��C3��3���F	��{�)�!�������?j�2o*�nqmS�M�hm�����4�qH�`U�5���������8d��q��������s	�a��K�q���2��h��o��B�7����E�4�|�N�?���>(2��k���������&R���?������{����O7��_J�~���~0���|o�9�p�z�t�(]�{������W���������"��b�F���z�|1�`���B������)A!��g��<�������X"0���GiQW������v<.&��|�&����Z2�|e\�3�%���]Z��L���W@Wf`���-��v�=��N���:7�~9���w���0M������C�E���L$�3���~��i�78��Y���\S�I��L.����(a��������������.a=�������������g�0��6Y6&M�x�}�Z�-�����'LT(Y�EAS���Aql�q����t�p�#�^��m*b���^#��0o~&>�����3�&�������\���+��~;;`U����E��1la���&^��Q7C���aT����������Y�����9k������
���Y�D=������?�����{�B�����xh�AWB��<q����6���J�8��,�����,,���vr�b�|c9�C>JA=T%3T��<���L�����Z�o��j'T_��v[3+��1LE(�g�5^x���%K��d&�Pe�����XU�3]��k���L�����J���#3��5���w��h��o&�,��5��T��
xV��[�VR"���'����T1I.L�~s��)�P���HJ���)u��'�n���lv��gR���"��I�L���`Qfz���R�u=!T��,x�Y�
T��,�~'=
Y���g��d�e����C�����N	|Tz&�'��w�~������0;��~�����!���x�/��L0�%{��7���
p"�&�H�y��Pb\�������i�����$�~�����o&���N���\�T���8��B��)7j��������2a���of_=��S�g��{W���g�wr0���Pq���O�o"P�����P��|Q�h�f�kG�k���ux^2a^���f�Y+���?�r�LP8�a���zK(����<��;w�Q#'�DY���E���*���nM�(&�33�!�e�Z�V�3%�4���K�<g��IY���3�4y|m����ff`�=�vq�g�/����w�$���'O�]0�����[i�a�{�� ��E�j9�)
��� n��CJ��;~���V�	� B�H��d����	�Q�LM��Z����b��*�u����$����_!�3�2!3l�3�o�c'�i	�fgbH.B����$���G�Q�:�C��J���}Q��x�0H��'W�Ue��K��r���=���zB��$�pdZG����0�w@&�l�j����o�qIB7Bl���l�/�~�NS���z`����yB�^�1aYT�T��C'>�	UZ���g���{����n�L��d4q-�p�}��z���~yKc�/���a����RI�4�gq������4��1��~W_������Eg�
hvN�I,�H���������c��/fy��v�Cwc����i=�,��9�B�O&����$��r��O���lD[u���m�d�+O�73U���8�,��	�5a�od�GUp�qa[��m��c�z��#���[8raHu��np@������p�B�j%3Q&6��?`�C^���8�s/�F/�mT�A�+}�q�� �7.DU�/`�
�Y�x��n���;����D�"��0+��-3a�3h/d������Kg/���iB~
h��~88�L���P����2�uH��=Ln��X���2p��2�q��FY���
n��0b@��ilzV��A����v��1G���� ��������E�n���3�<y�?��'y�����?�#�U�i��8���X}���,L�4nn��Zt���7���el�_g�t'���)S�DT��D�N!>M���]����Pj���9U_�?�;[ZS�;�j���y�"���~�V�������u��|I�4�R^O<[
m`�I	&T�DdH]~Ew�&W�������/�K��'�9t��4D���2x��jT���E��3���w�p��v7B2��=v�|==�`)�c������V�i�����P^�Yif��h�k7��y�)A�[:K�l!�L�������@������S�������n�xW3c�)v9�%~��3f�C�S�(QfX"�3��O�w����)	���Z��jG��H�w���$L}jL�q��*$�<3���EE�I}	���@���j������y�T����;�b��=��3p#}������A���Z�~���LU,��l�������p
S�?��EZ��M�*����"���_���3���_�����yC*f|�	�f��S�h�p�fb2����n�y�0(�O����op'�0p��,8N4�
^��"Q��d�,�e�9�r�&����T
m��<O|$�y���f����m\c�-��������'�t�k!}W���M����%���$'/e�qp?���4��X����lge������S�PL&D�w%�	w�R�4��13���:�4���8�S��y�bb�|��=&3�c��+Y�`x� �d_��aL��("/� P���f����m����	K���,AH�����V�AG�����t��c�}=R��=,�����{���AnO2��[�F����Y�\i
_�4�i�L a��~����Rnmr�{k�?�����.)S�y�skS����x��h��������1N^��O����q�K�S��!0���LD��?�7W�D ������������E��[\Z�������M��D(��{_eK����:�[F%){c�39Sd������)�iw�O�������P�
�i�A`���7�����k�m�x���L[$���gN�;������_��E w�J���P��+/��/�aw��#����>����e8�8���%��`+��pb���vt(��x��3�V~�1�	���+�|B�LD������\�D��]�IQ���A��L&�#���55)�Z�"�_]�yP|���d31 -n�>�z^��[�j���a�J�I��<t!>���{U�?�OL"�}a~@=����Q�I7�
l�����p����5��	E�b&� �+30v�ZZ��KQ���\�*��;b&
�;8�G[�Ba����A?y0G���!FD��Z�sh=�+:7o����|:�oz���
x��n�kN�N�[�9x�GOD�0��l.F�L�,�~����B��A�\�X��
�A;\5����gfL6\�Aqx`����2���g������Q]oE���0���{�3A��iG>��j��^7���/f���w")��������ni��r�����7y�V=2M@�
��6��'�:Mi��P��I��i���@+��cN��Y��jm*�������,R��Dla,H;&x��5_N��n�x���#��Zs���V+07M
k�3r�����}����ca-Lk���U.��3�3�53��#�������
�����t5���c��]	�����]��x���	c|u��_D�I������LD�����S53��yfS{����U_\�@�:�+0jYDT2O�F-���a5���y]z��,�j�fR��{d
��n��_�>q���;�D���>S�;�J��w��1fVx�9��(P��c�*Es+��-�"Y���_2�3�H:����	�C��`l~� J����5�=R�[��v�{%������G9����.H5��w;�N��Ee|��i������z������VU��R^�����E����IoVmo#�����&BS���,]����x���.�`��rLu���+��	&���,S����Vy����71C���P;3Y1�o���NDIx���W-'V�������{�S]�Q�����c�������N�u1�<]���^�J�N{4X.��sO�'�u�s��<y��N���4�U.?Nn����g����C���L �`�c�$�'Mx�3����=�B�Ig?���� ��#��N�����O��o7��jG ������
����j_�����6_��*��z=�*Q�z��}�W�3_JW�+_=���~���=_�O����j����j�uE��n�������W������w��������c�z,W�\�D�j�5I����d�h��n���U�t���L��>W�
4��u�*Q��o�*P����q(]��|,e>�RK��Z�U�t���"JW�2�K����W������@��T�s)�5��Z���u=�Y��$���Q��5K,Q���C��������L^Yo��-��$WS���h��k�(]�$�X$����\���Z-U(����Q|����j�����j��}����������CQ�eE�Us\
E�Us\
E�Us\
E�Us\��*���++����j[��\WCQg�W�����������@����j(������\�sME�Us\�s�r���,W����b�����/�������f�����/�������b�����/�������b�����/�������b������l����9����0�j���W��?�����a�����W�2K���T�R�<� ��\W���T�s)s��W��?��:��\�|Me��2G ��3
�<�������;v����f�����a���Q�q�n&
1�G��>;�0T�!\��V��0/����a$X8���{c8@�1����y�o"�r��r
x|4��3qC�������O{�"62�G�fbWf��q6�����Q
�k:*n`���Qh���) ��AR�J�y��%�����7�VRg&cH��#Vx��Edv��5h��>oEL��K�(��`V8����Ds�c��e���1�4C"4��;��=�`��m�|W���n*��gA~7����ex��k<ewW� ��{�����'TG��!�gF�?��XD��,�&��8�(,��� �
�����h������x��������h�� v&�.�]���s�X�!�<���ab��G�7y:W�}�:��0~~��_��J���Kt`��<P�K�C�U&�xH��d|��UT��8a���/s�>�G�v(,L��%��s��p�"P���]�����Y=��`�/���������y��!�����tM���@�^�; �3�(�`��x%�tvf�6��uM�C��\_���*U��h?o,jP�&"A�f��6��~-E��Z�~�����=�B-�
�?c(��:&�e��(CBO�_�*���r33*:�c��NO�"F~`YtvZ�z>.-FD&��z�4=���;0$������E��������l�U�OHxf����kr��4c�*��'XxZ���>����c!�3����[�(�@���A�'�|8JD��������^63�-�L���B`��������i�o�����	�f�I�o��w���]�4�,��L*R�R����mev��t��#��[����'�����:�1,LIm�����OD�0���Tj�� ��������Xh�>����HD
(��������g�mEO0����,T��|7J��53I��D�$��/=�|N/(�h�y�����5+30��F��	�Xo��M/$�>=�������d������A�B�1���jk�jk�a�Y��]5\�)A��!u���2�����A�9�0���P�+��gb{�5)ZFe�;���=�=l����_3��%5�a��a�UFuf���"V*���0
>-��i�Y�������h�$3%c}9�5[�H��N4����"i��o��CnM;�D1e����t�(A�LMi�3����A��L�����)K��&�������p<b@�0Id�lFh����3�(��x�I��7c�^8;2&�"2��k�Epi��X�0{�}2������/��9��y����P�g�="n��o���a�&b���(��Z�]�~&\����cH����OJc��^���x>��;~�-�������=�����VV1%(���b��A~�	}F)�1;kwu�.:�V�7�@U_�Z���Z��>X?i�L��wLC23�N�����Rz��Q�-����Jf� JX^�,�x���c�^}!�D�p��p7 �S\��/�)A��e��J���s~l
j~m���h1���S��[�w!h>���K�f���O�QyW���@'��T�L
�A{�p`OLb[���5<:Ef853���v�b����2���`;P�P��^�+��>nA�>|�����v��a|/�a��
7�D�O>�Wd�W�/��t��%�ItW&�9�>�����,\aT4j������5f�3���	S5������jrj�{�'������ 'b�{m����dJP�Q|j�1zTu���y��xL.����K�#���a�)A�[�;?�����tJ�=�q"��`��%qii>OyicB�D�Gn"���0��i��A;�Y�;z�.�����37��`s�N8���������������7���D��7�uf8V<���&�������/��h����R��lc����N@I���=
�]��%�B �;n��8~��sW]Y�f��ch���
��*�����07��Y�:����i�f���	���f��v��g�
������%}4\�''������g�n*���09Y��3f����]	:�XIu�3fPI���ui���F���)+��VV���jc��L�3��7���ZKR����XdJP��+��F��r��)[����>�RO��2�3�um�~W��O����H������'Z'�M"��'�����vu��6�k]�k����S@pKmz�3�a-�����a,�&lV�W�\�a�S��6��fE����(�X��8�7�]W,�.��w�w��V��%��Mw����iO<>P!�'�"a�������b����2�@h����ck~�A�
����tU�%���w�O�����K��b@�0��ts"��X��x��0e��������u�r��a����1��5��`�kg�G��3��a�|�t��LI��(_��MtQb���nP���@z*����I��b�F�&	��i��])6�~�l��o"b;��vg�H�+A�hKq�a��4*I_�4s�Mh�U~�A�?m����g��M���6�����?��^��rl�s\��������I\�(����>=6��xe�
&\@�B���a	�u��C�DADq�0�����:Z�:xe�������#!�^<�=C�.����:�.e}d��2�������OY�u�k�c�2t��x��U^>�I2�J������D�v�`��n���T)[�vss���5������]C�
����`��:xa
��	<���B��e<,�T������+c�|�I	G��^�n�8��2��B��J�������26t����!�I�2r�P��$����L
���]�������]���~&6���%3c����N�[�����-H��`!+cgZ���k#�M�D�'3sT��8��?p�9kj��D���������qh����;q0}���(�wL%����kM��>�f��?T�5�Dd��uW9�&�eDx���0�H�2��/���p��a!W��hQ���1c������-�[6=��/��(��I�(�����a���Y
GL	�PT+��YS)|����t�09�f^�>>3G=��4��w�'s9u�1�mG�{t����@�=�v���{��l���������L��g;��<�����h@��Q��O2c�lF���FL%�h8t
.g��`���AB�C��~p���GQ��G�\1%(�1
KfT�zlu�P�����Q{��Z|&s��s4�B8������.O����=@%�!���(?";o��������$���S��-w��@ji���GH#��_��gP�2����
~���)��~���n\4�o�X<3�3Nt�V�+q(�\@����*_�a����}G�B<�zl���^
�0ccMvz=����'S�[0�v���t�d������	���G�edL��?���?�NW�p8;]����?�/�+d�D�������|4M���l������z�5��*g"
0O�h>�07��I��#,��`�\b^���dP>�7���`,]�3�b�PZ�!�H��G�3qy�(�����\tB���8
p�.m5����=�{�6�D`�X�:{��5;
f����}Ja"������},����a�/�a��e�',c�L���-����a�/�a
Z�L�����0��``��a��H6����d�'��13������n����vA���/��s�������k��,\S3�\S���V�5"���#����#��_�q3�0�%y����"X��D����pM�c�}��������|���fa��
�d���Dq�����v�1#���0�]@p��`�$����D7^���D�����-���-�-��� GN���`7T6��������T��2|��������wS�R��dR���{��~�{�9e�O{zK��S31 �S�q�U�����
����s�v=61���$w���pP-���O���1L��)�C9�1��Oj��}	���Q���'��ZH	����f��2\TN��*���Y,�������3�OQn��?D�IW����G�E3s$�
��9��+�!������1�%��W�2.L!��n���`��[�0����� ��0X��c[���T-�4�#+n!�!n��,6x9�:5n�u8��F\������M6����Y�i����qbJPF��;�S�F��L��F��E��s|����<�J�����zr	�"1��t�����[�)��t%B�7�D�"�s��[1��3`e�e��13s���^!�q�R�I�1*�o�(5>Zw�����jk.w�i��"��c1\�b����]
�K}����u�2������C^>��.�y\Tb��&H����L��������	��QbR���`��X�VV�������:
1z�D�7���5�:lE�[n�z�\��1�0V�'Cq$�=gf�	{"���a+�	�']D�Fwx���MLI��?qc�=�+3���W��c+j��@2F)��v������V���������������D���m~3�
���`Q��c������w�������z�z�T[�e[�d��dd8}r|�$��M���vU
��eo[�(��.�p�,�nyW
8�w�����	:n&���XO�"�(�*��V������Te(���4w�j�.�J�d�������T����5����������HzK��u�e-���Sm{�6��ck� ��=��"#��4��k�e�Z�m������z�1}�=����B��iBQbw^p�2���
����L����b���j������3%����3%��?�)W�t������Spd�g%"�0����&���F8�s ������L���;�=���p�N��	�;��Z]8p������K]Y]��8|�_m)~`�7�o�1���;�In8��]@��@7�*p�WF��<��F����WF���"��Q�D�[���3���WF���B�)���u�X��##�;�����o�����>=2��t!L��]��$��5"��}���wa9}[)TR���\	�_�n������{�!-W�'�k��@�p�~t����eZ1�-�
���-�7-�q?�����[���D���d�E����K�d���]�����&v������/K��Dv��?Rd[�E��B=�����M��-p��?��s#����j
:��n_�_zLh�b�J+s��D��ox~	5���_�ue[�'�i�i>�]�wZ�$8|��d����GB�|@e2��B��2��U����z���V�Ov�hq]��C��kY}be�[��I21!��D{��:�TD!�H��a�qJRLA,�-{8�z���b��Xh$|�>6Wsz,����M����y\' ��������F�-}�	�J41��j����#��
8��s�x�25iN��M�9:��V&I��o���4�q+v�EU*\K����Y�T-?1[��=6������E���qs���#E�0A*:��$T����f �H]-��2�����O�(
����V��y�NC�2��W���*�����������
�f�����]�z6t�P�v��45�����v
u`(-���P!z:�P�z�
�G�
F��S����	����Q���;N�9%��AK�0�E�3������f5��=��F��oP�p��n��'��
�j����*oa� 8tn[�>�����0�e>A�
P�y��]��q�����y�����R'��5��[��$��y������A7?K���	|�Kju?�2��DsF������"L��J�E��
�t�����$Q)�7#6d�S�=�m��Y{�e�R�4��rl���|?_��q^$LJ�
H����V�gW	��o���I+@���#�,X�����0�N|�����M�Bn��b�?jw\�ON3�q�h�@�!��p\��L�W�.��,f�@����h�^���T&�P'���9�w��#Ak;{heP{*XaMB�A1�L��;?��i��Ni���W	w����bn���`�4��\�2^��bi�����02azB����*D@���E�5�9%��6Z��|p)�@1�
!��Cm��qB��_CW?������)��I'�7?��y!�-;�QB�vz+��X7Y=�J��S���
��]*sS{���(�fIa�x&����4����,61��6���S"��,�6��>�2.���/q���+I�h���?HLC
<T�����n��V�fU~�Ae����rF�;9kK��`�W���|�N��b�/&�A���v6))g�X������9��0�,3��\W��#�r`�����1Fhs B]���`at��3re�C��wP����b]*b2!,�%��Elx���������~�G>%�po�h�fh���	.H|>���pD�B�.�,N�L"��|�V]��^�v�S+�Ln}�m�Zf��/����9+����5��� ��<�y%����FC�{�&c�0Kj�Fn��0��-b�'�yvF��u����-	5wo��d�6�e�|�����f���;�w�n�+L���E�����f���b8�|���?h���[7���6�l�����VH5�-�w��vM��*p�Tv|�����[��I
��6='����G�U"�����B<��'�.D���F������[T��b�fN�_������Io�������n��
3��+<���&�@���'<�p�@h��nU��s���O
^����6x��y��������E�Z�
I�P���c����w��x����6��d~G���V�@����������f���FB-�K/�������/�#cB�|nOD�m���V�l�[o�������B<{y��_d�
�sv���)k+���VA�Z��������/�_�-XV5F����:'���X�]�B����:3����w�)��f�z�D�y������M�0O���	�U
���/�>6c��������� �T��6��u:�A��0#nQ|�q�	\"n��s�sI��6����"A{����ny��t�~a�v�=���0S�D����R!�bf�:��c3��@27������N�]�{��wS@m�K������j���J4Q"�Bpd[P�2.����*U�f,
�J���NS^��j�i��[������@�{�c��5i���~VB���z��l��-n�ot��q��2/��������-\������ ��2�mif��U�����{�=Yy/������-��4����������29��B��2�D�	r����Z��A��9g���N��DS<�i�]�t%�D��4?��"��`!���.p�A�J!�I#����!�!�������\�
F�4�yP�����<�>�&
a9sV*}��!a���^�L/���y
h.0���/F��D�0��\�2a�e&��h6$�gw!XNj���y��N�����/��f2C��$����������D������/�t����AhTT����8�]��O�������xPN$/��~�R����6<��"�
��_4�U���� %-{b�������}���t�I��wt�u�w���F�F��4%1��3u��#��������'z�3m�B�����e4Z�����\�X,Z'�l>���L���������>��tV(��<gT����pEPe`�QmoY�6��2�|a1i���"�h���7�{��0h@	&-���.��,�&]��������O��� ��
��ZL�J����@
X��T��'&)���������*!P;%��������8d�O�]=�y%R��f����*�i�����U����@�]\��oa�|����j�Y�-�`$��p��%n���-�]�NU8xw�h���]nF���a`r�W	�T}����-}��������@��0R;�EEv}�(#�(�kgO��R���������0��V�T��e�I�-L`���k�����%����iL�]����F?�l���j\�-�`�����]�O�|B�]4��BZ�����������������`����w!\w�IFU��r������|�e��]G�<��t�������������Do��������l��>��� l�1�wC�M�V�<�kn��-����\��'���<��U�9v$n������F��F.We��Xv��������8Q}��01�B~V��q�Z�,;!!x��\z�CON�1�/z�����T0'�(sBB��td���Bj�D�+a��b"L�m���d������!��;h��~��n^%o��*����m�=�	�'���i���������41��
!c~�@[�(g$q*[�i�g����E���7���Y�;�h��y"*����i���m�d�
��d��2��7�:����03��H�`��!�B���4����O7���]!^t?��6,��!�3|	���c>���(�-��S��TU��c^qs�#�������t�xaAmt�����;�M�O�A6�������cB/�ID��b�a��N$^\�%5|�1K�
�Q6J]�a�~��\�D�B�p`t,��5Yn�6�d
s�EeZ"��=9��O��R����5Na`���`�`z+��Ov��)��V��QSnr��`��l�F�O�E`��{&3���Z�(��*�}�@�����H@���d*n$�R�d")9r�~��X�f^�>���L���M�tS���kL+�����}
*�������GnD�����������2Q��z�����P��3���g���Ac <� ��{�z�������E��{��M�q����������n.Z"2��0������O��A����lsHdt3}k?�����M���J�B����������l��b ����N�4v��_	m����<�L��:Wb�;��	��4�$�����N��\	�������ik.�@��ix"Cn����;�HW�@1t1�y�0 .�_�N%�U�S�B5�{J��S������5u�a�j���������A���m�,��P��g%�A=�pE����V������J���19F"�k
��L���Ko?���]��L|���2X������[�|J-���y��m�>�G*��FvHA�;
)j�V�*���W(mU��1�����E�n5��G{��a�+x�,��`\&	t��*�1��������+�]
�T��>4����}d��d���E3��c�q�2Kq����/�p�\�g/�P5����Z��C���G�`-_��"���%i!�'MKx����#��H&�� c��I'!�|.�%6$�|l�%!��P��$���1��Ih��5`B��'
��I���'��~W*��tNCH�Y�2��������������k�>S\�_65!�9�"I���#���������@���w.2�d�<�fh*c��'�lM)]�^���`8;�>�k�X������}"m������J��9��>cv���	�r��zt�D*GI�L��t��cs*�O�M�l6z����`�����MK$xX�Y*{�J�Y�;�m��` ����j�h��O��Bp2���;�Ph���J��m.�I$�lD�m:��.g��G�6��O�j?�UEq���t(]��]����*��*P�*����"M�w�3��c�2�*���^f\�2�j��WYf^�2���W����2��Rf�J������������a�������jM���X�@�(������jI_H�W��|���.R����[W�����dc��?�6�G���_��YrY����vq��_���G�������7�O��\���](=���5��$�q��i���~��������}F���?�������p�
�+�X&reKJ�`]*�2�u�_��C�0N��Bk�o<V���A�g��H{��(>�;I�6�G3T�G����G^�|WmB�
g�[|Q<t�3���~������C ���y�F������'��>B�$�1���8	Hr
�������
~��u��T^9����P� �[��������}���x���<A�I	>�}���Q�
�s����}r|�[���3��)��*�neK./�]B��:����J$(g��Xc�b�C�O��1JM�����'����_���q#�y��zTru����F��Co>���fL�`��NR�UF���k"1NL�Y��1��<����nNkER��-�B\����������&_u#��2�!����@4c�
��O��=,���C�ge>�6�������Jd���)��	T����
�c,u�c|b�����|��g2DI�9�`�=Q���"c0�F��������1��X�<���0^c�S��H.?��"C�8$�M{��Q�)%z,}^�(n�W���4� ���l�����x�9����?9�t���E��7���F��c�f`����q���.gx89�-k�IZ��z�Y����H���;qKR���pC��p��b��
\1�L�G���gf��zU�#!t\��da�q��Cy����:���w�	�S����$+3���2~��;*�x�;N<�~�F�|��//�L��e�=6s�~���"�F�5+
@8��;q�I������R�z�/��@�tf02*X�>�G��E���'E���^5�Gi_�*�F�����z5�LS���K*n�!sa+�vn����U��xK��3�G�8>�}dP���p1/���'�Q�S���X-�Jh�R�]8�#���n���	��G=�l���	�����$RF�����-j���m���o�9u��S�R��V��q�{!��6Aj�������0��O;0��UB�gC���( �Q�|�n4��3@4c�BU�=:��
��`�BD�D&�f_,�tis��8�+y�����0�����O7�0����Y-t��i?����0�yw�����[-�~�`�
�of�>t�S-��Ld�\�����TB"�u3;���:G���.G%��{ M	MC6;��VBKp&����pP��E���	&��������@A�V!�{\M�$r#����0"�L�P���V*cM�xak�6�we�:�`Z
k7Wfh��9;05�.m}���7/�n�A���/F���Y��f��Y������0t����a��X���
��`�������A�I��cGz9�
�M�I�E�IC�4��0�~f*:{���g6N:����o#�\t~7
T�����c��xCD#����/]��T�������^uG^���^�q�-LSB���L�y=�X��������&�{��[d�4��HP�V�����E	�.��/�V��*���	���p8[�q�^}����
M~��"S��Y����~�6��B��J����L��2ZP�T�����a��I�C�:��J}�0WV=�����U�PL=�Y�UF�?���|��RN�/s%?�%x�bUF�Z��XSlDd{a�<bd�����n��@��A�����L�k�h�(������d��+���c�C�~�eO
�j�����=������y��[nl�	��qc����r�,2���`36k�Dh���B��l�O�^F"����f���+����g��o�6Y��6;n���B��lH��	C�����"�v�G�+�*�6sN���0
�<Gv��Ey0t�����9mH?��7�m#��m��=x_8N5	J0��+#�������}E����f]R�!��&C���36gbR��k�~�6��b {WBG��P������)9�<��J�~�����*#���f�_��o�LR*#�u|b�P���.��2������_#��S���(����H^��'?x��H)u��n�k-:6�2"���J�c���Pp�_-�>c����1>��#��������s����x���!ta,
�Os;RB+cy�}4�����fj@	c���8|f����������Y�t�%��I����D��Yd|������
���R����<*� L~3���#��i
����t[2Q�[�_����d������:��K�4z>���{8E�Z�"���������I��Z���P/:�9\�m�� ��c�U�Ghh9a�R������d��I!��\�\�B�R~�o�n���-�
k�"C��>��x2@�E%�����w#��1mP%���y{���Y�o-�`��_��x�yZ�(~J����@�T�+?�
jS9��S"7����x��[�3�=���DS����(�i�B��yy;��	]���b�e��w��Us�|��1����6K����y
!C�D�l
ls���Zmz����������t�A�"RM��4�3}�G�u�����;���[�e%b��t�9�mX�6���O��Jq��A�+C���;��`q%��U;(a��i�Mebl��zxC7����-�rn��QX��f$�)ML1���&�Mjn%�W���������]���SH���D`�@������7�
1t���E��cp�q�i:��P�l���<\�2������e�,���Jh��J��p����yb!�Qcn��NDH
����W&0����o���<�r^)���I�weL&f��msGi6
y?GD�4D]/�"����[���bJ�]��M�>��T"Cn4���](���~�y=VM�Q�|?����p�D�5��@��e�G>6�<������?&J%r-���.�N�#�������D�����8l 8Z�)���i���yQ���y�?M�*�i�ike�'7c�'O?X���']���
@`��j8Q	��N�����qwT�H��=���xqd������^���N�J!~���l��.�@"U���B���meT4�j�A���n�)���77N�T�^�W�"�)E��Z�?_�`Z���1Q��Zj��rF��\����k%0�){��*v�'�V��s��aq�|��n+#��][��6k���� p��B	���
�`�"�|�I6<r<)����e���������"�D
C���K]��x����<z��B4��?����$r��O�����/��Z��8?��������4���m`���Ibqm��j����a��I+#���d��5�Z�����g��7�u���|�B��{��z�������Z2�]�M�q[����������Xje�=cs{�K9�!����q#�D�2�0-�z���E�����*v4�q��
F�B|�^�~)��u?X���EJ�X��t�heF$���p��L
Wf[P�x�l�����4��P	�^@;�����;�@R�h���	<n�2�l������;��fK��2���H�'��G#�����4
���/�a&�bM������@3Y��Q�`�G%���saH9�R������\eXt��:X�����Y[�m?�L�\oQ��8(~�bmU��Z����/���Kp.3�FpZ]w��K4�@��t+����%�:8,L�@���nS3��sesJI�`tJ������*��IH��+��B9��u�z?c�F���|�6v��wJ��n2?�QD���e(������:.�@t����C�W)�Oj���x8�`��7x������t��7kE7����� ��4��:�|��<E�m�E=?�%j������/��L��N�
+���r�~�7o�7#k��i��y&���������l521�*q�>�VbG���t��l�U�i�*S��+U��p8�de��������
G�V�6��/J�+
���Jj�I���_�v�dU3�/T�w71�S���a��G�dU��g�m���h�������s�L[���}��
"-�x3AG�R����J*�pB���`Ut��i>���1���3�T�!�e��9��LsJ6����SV��3^���7��>'�/���f}��
�2��a����Y}�Y�j?�x:C�`��c��|&O�<_��C�����6:f���\����z�p��jw�Z	M���.�nA���T�b��30xD�%�
�����]��z0��=��2h��`N�U������Y�����VM|B���	�	�>x��-!��H9#Xx���_�i��u���c�Be�i<���{p^k!~,��%����>��1������)��G�h��D�b��79<x��B~��s��l�{�V���O�"�nP(JN�L�������:7������Q$ �-����o]%,g;����W&DA���@&��C��B_�^�0�u��q�����<0F95��m�$�;�o,%���ex��������b��v�hA=�R^q�d�`b���>� <_���TQU�(�v"T���Y���?M�F������	�g%�g�281��DT<����YF�VFo��+�E	��ih�j�y�������������W&cH��b_���������?P����?+�
q�N�w�^�o�G�����L���)����g%F���Y�eP ����L�����������^�	��F|D�3M�_�����L#��"1{��������f��������d������`6L��h�``�����*�s�Wz�1Ee��uo�C����)pK�D*�rq���5�������666'�.�-� ��W_x��i0���
Jl!���ij�G�_��1���l���[����x0����a�r!0��`8�z�LLH~7g������3F�vz���y�D�v%���e�8�R�9���G�6C|e2�G��B���$���G)�3,��L��}V|�u�0u)Fs����+#�)'f��3���b�'�U���G�pd��T�L�,����Q+��@����G�<�UK�Ep��}��u+��~l���^�2R�H�~�	l���4���3Z���"
�,������/����v&��n�-Ux�&�n��@�d�nd����7�b�+�wTF0r]�e�w���=���
��9��[�D����Z�o����gqF�4Q
�J�9K�4i���3�eg~f4Om>������l��K���18����@��}8�~�T�����V�[����ai�H��.(�;bI�gF��a�~��$Xc���	0Y ��K)V&��0k�������
�1A�zj�.�+��k�����Ls*�rY��#9�����;���]=U��L�Vu�	�xj	�,���Yj������I�����7&4����b="���xJ�zU��4�C��Y��52?_LT|*%8�$��	����G>:�F�(����
a�0�������bK�*=�{�H������98+�
��Z�qKL�n��0����A�9���`�3�����A.Db��m�x|�L���	#~�QhK�
6�D{��
��g
�a���3!<hB�x����,�P���E!��D�[���n��B R)����/�z�A�����saM�y����r'3��
��� ���UG*����J�:A�u�SU�F�l����|�A%[d�w��k��!�����T��@����a�+���:�!���i�w���~^^�H�{��^7u��Q���<o.�X�Hgj�������`��O��,b�eehb�Prq����2�1j^���o%��=��v��V&i0vh/<�DV&�������PW
X�S�������	��G�	S����D(�W�I��@?���x�3�a����L��2�.Z���q�
l����=����B�J�~98M�PInd&���]Av���?O��
i�]�B�H��Kg|��z/VY,�Bh�C��=q,R{����#����� _�q[�x��{_�6��<(C'F�y���])X�W�+�\"|�S��>������?�8X�e���a��i�&3�5��y[�:��4�%'�������_�%@����w���L�'���`{�V��g�qt2���Rn�P��T�_�<��h<��_�1A��Z0�t�V�f�`�\6l��_��!P33z��@�=�=��U>�[;g���$�	�20��WFA���2�_���i0�����BH+h�3U���bt�Cd%Rx��@B#����,�Z��S5g=�~[��.���mO<^q#!P��1m^Ko���[�����U�C���������&�?�(����x�\A�����3#��}2�MT���M@{�j[b�����,��0��
�A�����2��|5{�r�E����0�_�Xe��'��q�iV:���u��x�>-��A�)���+�.9�z`O%���bT��,0T�p��`�TS�_�.�*x��:�;W������3�1������4�B�0�;����W&cu��xA��zeT^%��O���t����;U7�>��AD�,�|�fne��%e�m��J"~���j�pW�u���x���Z6���{���cc���������!Ub`�����~��K�����'q�6�&�M8`F�O��f�?3���lm���w96l!!�������u�Z���m�j��}x�v�5��&�t��}���8�Q��rc���^��P�:
������!�����' P�M�Z��d71
�{���[����-'�T+����F ���-1���c���@���;6F�o���V�D���$>R)"�MEg�zR7������8����H�����pn0���������`2�]����%��>z?t�����:��cc� ~V" �Rb����w�m"�U �'�Y�0�o>]V�\h�
��p�f����NB�@c1
�	C�v��J@�
:��������8h����L��L���L�22���1-�Ls*�b��L#�2z��B�[g�
!4���3")�����"��WFU�VX"�~��1����y��+%+����z�1����[��b���)1�����{����V���u%A@��L����G2y*�2?�dJd8���:|7��R�����,bY��X�tc����K��a#��1��D$c|�fP ����z��XS����`}�Af
~,�A��]�t�VG���/F+�]���������~Bu3��VE����ta�n�����B������MU���z���U��l��C��{����T�0}�)�`Kk>��h�b�OCe���L\��]�5������?3������R�Z��=|�$�~1�C�e��!�
-:��x��]�|��
�,�(������M�J�p����*Z�����2�������
���������|F2��B%�7|��wN=��J�j�w�A
�q��������bn%�=���L�'t1&�d��f����m����Cv�'���w��{�
�A�R��J
���!����RC�_��������������������_���%��@J�s:�T�z��3]JW�#_=�r�z�t(]=�|������Rs�h�r�U&0��C�x<����0F��������i�;������%�������Wfx���������I4c>#*v���#��l
3F�������W&0�=	���G
�c#�e|p��cb=������x�n�i]������,�4�~�Z09I��ZY�d�B�'�]+��Jb��6���t=���!P,������*���k������'����!Y��������'���0��P���w-1����y*���<cZ��+A� V7�w+bN�Jh�x��V��,�1����EI��$�YZ�~��z\]�8&j2^�2��@�U][����'�����#�p���zF����O��4#��3U6q��*���q�cK��&0�����������X'��M�$�W����p`�zV}�Z��~�T�������a���}N��W�8nF5���5��a�d�4w�������jm�<�����FR��jsoI��q����
�7vh���2-554�"	x�jS�;:�qX������
�h���-�?Y-�g���]�2#_yaNZ����+#�N����y���������kZ��k�BT%����e�+���q��`;v����������Zm�Qv�F��/n+I���6C.���=8?��}��s�h�p#3U�8�q\.�

���������%��H)r"V9=���,�CS�7N�	�D��c�jX���`e4��>�	�6Iz�2�rQ:����|��U�ML���SQB.�`=H��AW�pH%x1S�+A���kS�,t��Z�2�3�p�il�'����sL��]B�iFyCS)���\�0��CWLdX�`:��dA��we4n��~��I�z�C��N\O�r
�0*9I^uO���R|��tl
��a^��+��J�iYT�q��������d�d�W��zd;pL����2��5������L(�#jL����P~���v�nH�E�U&����'��U�%��&"��Z��������^-:���rH����']����97Te����0�u�M�p�g�[qr��K;]��X�����&z�[����G'��|��"��q��+b����s#�26�~1��m�������x�����&�.1�y�[�`9c��M���JH!'F��z���t������/<�B��)���<�:'\���&"DV�/m�!��	l��nn�\�a������4
�#J��L����+*�)Vi0�G��	�L�q�'ie7�����,��BU�A+n��-qL���s��a��u���s��XL�!���9��I��*��qjVt
�������-Fk�Uj�X?�g�2�q!����������;(d�E�J�G�!��U�!"��j����5:������I�_�K�����p��������U��H��9n��������%O��nK����Q��������5e����4k�%
&��uB��� ~�W�'��=������P��t���,������
 V���B #W����ca�����s�����6��$��aO&�M��s����o������0����$�B�:���m&ti��!r�>X�#��l�����o��
�$��b�,��Q�-WFsw;a�1��|z��q�=
���K^	��gq�SF�����R	�l7�&:�
������MV=�W�a���z~bZ�
�����0���_�J����uk��(ie4����T�
��j,��QR�<4�ga2�A����wO�V-#Op������z'��<���s�?����F��"$��<�w������������l�UB ����R-���b�~;�/���0���H�E���l%B�lM��~[)[����0�����������D�a���e&c1	�F��l��;���uUx<N9w�ka����Cv��=;�m�z�`��y[|n���+�
h���x��;����<��.�AdxQ2qc(��{?G��!�}�T�>�����q�F�BX&6W��,
e��[\c[��t���paaRgm^	X)y��*)5W�)�,��m��A�2��U��]��1�4�O�����������v���#}�f�<��_T��2�]��t���TK�4�K8>�2����_<t��l:���w�<!�u~Wy�;���:�	���V1���
b0����h�F:��V�v�0��n�<h�;�:4�zr{�:iJ��
,�be>�����n�����V��O9`X�TF��y�mO�[�+?Q�op�H�[���Z���>�������#k$l(�
�TI�y�#���6�SM��/F����H��~�M3=D
�d����qH�f���6Mf2�(<��0��2Z�6���4N�M3m��L�W�r��/��p���b���n86���*!��:
�����3q}���W�Z�BB2
1�E�f6����3
���Pf!�H\_��}/�	��X�K�����uZ
	;ke��w�l*#�>�VB����sb�an��5|x:f:�
�l@��'Xl��w��<���_)N����4����*A����J,���bz������
�7�4�-=(��U��2H�c��S�~��Jd��������\�����:?���&&��0
��m��Q���v�Xq7#>��g�_�[�1� ����9*���F�~S^���L�"c�Pf:#!3�Lh������A=�����-d&a��|�����:aSpB���2��ql��g��Q�ec�i�-f��X�rb��p�����(��Y�k��.���w�?Eb�^�/������1�ft3�Bf�)��[_����u�O2sm�o��|b�Bn�������`O�h�6q�*
���B�y��.t�@�X��
:ryK�P<n?���������n��^{�-65X��i�e/�������{#��\���p'g�v,�zW�E_���?�y���(6������EfD�,*p�d��������3�Nx!��6��y3��vei.G�n��^��8�-�r���������E?	����+51�,�SQ>���W�w���D������B D/���w����D%x��|�@��nX�k����@���b�w��	U��~��dV�i����X���h�����L<�^����%���c�vX�10'�s\���e3�|�����q��D���W	Z6��4�|V�h��BF�S�cs����hD�o�^(�;h�BH�:��2{u[��c!���CY�qV��Q���>���Wg�)>��I�i-+��������\(��e��{�k�������
�G��vs"BJf"�Fb��{����.�0����;��d0�^�����l�MY0j���e��N;|e���^�����E��:a�"��$���W�'a���!����� a���]�(�t*V��[���~+�JvC����6��`/I"���o�F��,B��d������*�t=����=�s�q�E�M�H������/P2�WRy+����Bh����!��U�����3�8���c�e�xr���2M�mc{��V��07��\�,������sp�?z�����+p���?%�%B��n1��%�+��1<&��T_��p��,o����m����^&P����o��rDD�C�a�}��(A>6:u�F;�r�]EG���:��0�������C�;���.N�b 1�j���r����a�����tG���Pb�%Sn�n@���~��B���b�?�a	7g�Z�vL�	,7{�����l2�be�Q �������d<�F?��^�7�c��������r��zk��=nT�c���K!��D���.
3mp����}��BF���,^��_�g���%;����xR���S_�Fe���D(t��)�f1�F���U4�Q�DsF�M�u��&����
;<~a��aE��Yp6��f&� ��������=�_�c�6D��g��z~�nL�=�C���?>�}����o7�m��v(?�����
���^>���^.�{��������|�r0]~F���z���e������q���k2]>�z����1���^�����`���Z���,����(���^�J����^���T*`�|�J�����(���TqUQ�zgJW���"��W�(.�
���~��(]�������R���y�R��T}��t�0_�w����z)8a�.;^�u���}����\/�'L�{-_�����������wJL��)L]����Zz�^�`��(�ty/}?�Z)y�Y�|��
��)����a��*k�|@(j\n�7��A��q��zQ�q�X��b�uW�E��u��E���P�E��u��E��uW�E��u��E���s��������h�����{����E���m����z=t|��q��|Q�q�Z�/�<����Y�7�|��q������9��U��W�bR��_,
^��A���'p�o����������[�W�bJ��_,	^��!���#x�/f����������W�bB��_,^]�����i�
��&e�_M�[v5�a@��4���W����2�����j.�*C2 �z���~/�K���d1$"�'�!q��ah�Z����OTz,u��t������������/9%
��I9#X��g8�b�R�D��a�*����6����2�M	M�c���i��`Y� ��a>;�[l����
?���>ie�!��W��kL��w����&F�kh���B�a
�@���v��j�y�Qq�1���H�9���iJhb{J�*e�uK��>�����#<)�X��!M��7Z�
�Y2������GK"���������s��ge �����a�����K��BE[���?LJ���\��J�Q�����<��FeK+����X��v����qC�n�]�����m���0��Q=��$�����	�e<P6-c���WF�j*���q�����>����@Q;A������t���z^��XLTfl���7�E/��+�>/�XC\����w%D�dJ&��������y����4GO8��2�����\*�'!PK��*W�*��s	��4%vIU";f�+��^�s���ks:�5����	t��O?y����@ua���{�&�f���F9�w���D_���q�+��x��`�,V�`0������P�P��\�z4L
M��U��g%`����(��0�Hw�~1�Sw���r0�u[f���D�F�X�V��1$�A0�Bh����H��}�i��9CB �':-���&�./���z��5U=���'|WBG��
������J�Rj�h�>n6=����b��=B���vU[�+>���]��>���#X�+d,��^�uB�����������Dd�{w�;�m��2�%?Q�����c����U���G��G�JK�����`����70�C�����z�up�gaR�0��t0����>���ZB�#��z2�]6�����'�c�laZj�����y!2�����@��z0������M4�{7=�B��r2�ur>}!�VlV�g�,T�8#J��53I�
��_���k&|�Z�:�uf���b���U2��m!t`}��6:^����t�d�S4�C�����yV�9QS�5a��\T���f�I54}�8q"�Q�����k��XAc��b��t�q���KR�/&
�������������	���;q��a)�o��52�T�����V�[5a���S��f��mf��=�����0��?�7��A+�2��k����-��"h�.��ye�\~9�{�J���o�r+�i?\���p?\����o�5������"a@���^�B��Z�<�&f�6���F�����z�hJD+d�ld4S�6�?����2������(��	���uL8�$2�����{$��H��&k�������mU���8G�|��G��3c���kV|�@�IH�[�{����BaKN�R����W���G�h�����
�|Q����~1��xZ�G7:�0�#1j�l�`]�u_��L�9����b�R��|�	}F)�c���>,v�ko|u~�.a��h��i���'<E�>��ve�����\�J�5����Eg�R�����1|�!�lXR��M1Eax+��:������d�Sj`
��n�]0������{K��&"��ay:����]�����a���|�27]+�v������p%O���������b��Sd�����H�hBX-�@A2:.���+u�9��weL�{�IgWix>��se���J�0r�����C�H���q[(3���{���ye��P}������)�d�kEk��������z3��}����/$&Y�kPx=�9��)��c�Gp�Y�<�c�CqT�k����y��>��U���1=����4�
6tL��\$��+�7gG��iN�[�'>����p��c�;OH�m���X�KP�eO�<�e��b�2��\!���p!��!q����]��$z�]\wFR���Q�Vh:a�=���we��>���������Z���*�����������.�~#����h!T�/H�3
hV�`�n������[y��~�v�<<<�1�x�0<=��]f���������{���E��`����c������
ir�R�c���	���I+�+����}e\�<�=l0���"�*w���[mU�v��1ap��=r�l/X�PI=�YS�&i���@�\s|�%�V
���rd��b�������rl6��n��$U���'���[nWn!b�2S������d�= {�c��##����n��!���#�����p"�x���s� /6�\d�30���wnd��9/wp����4�)�%8�KV�h9.;2xe��%,+��W��%!P"�{�17�T�)V��F^���o��]�G�s��o��6��7�a�d�A�C����D�3F����q�?��;~����!v��`�u[�����Q�@?�Kw6\b���������y��Bdb!4,��f%��Zg7r��.02�)������r�����s�3���+��4�����Ac���(�T�V?)�E�*P�@�� _���!�����4n������/�Z��A�~1R��&	��yM��w��2�\8E���G�+�@,G�1t;���X>@������D�w���ab���j�U~�V�?m��C����a@���-q5��M�k�t���F�����h�<�r�>�L�xe�
v����3�C������:x�hv��������-�2S��RO��J�����'�3��BHY.�s���d	�}W��C��HW>ma�-t�&8��]k�f�w���YW"���9]?AWB�������'�`%B��� �1W�V�BL������
L�����U��}����������Pu�D��P��@q�����i��u���'�OR�^%��WF��>��r	%�Ph�c��ztU���]�w�`=B=)��UF��w�t���L��A�V�T�������p<��8��1�2�IS��3��iIT����������WFv��?�����FP8Y�~1����'��pF����|��C*����#����������f%��	�����������G��k7����
��������� ��B#�7��	� b���`
�7%���Q+3���A%1*F��Ls*�r�����$3Q��-�m�l+#�%0��NH"���G���4Ja��WF>��������������UHP�C}'~��@����62>�U&�����2�Y��bA�Y����i��3-n��6������**3��DA����{�X�u�n=G�6�v
�3��3���Y	B-���z�E
����\2�)�1K��
��4Vp`AZW'����d{�t-�Q|es�p��	7�z�V���1y�L�0F����������t:D�C����0-I�Y���-w����������0%��BV>��L�~��4�D��L�������u��I��ce��9�;���F�n�|!��O@�K,�{�5�d7v�'��^������J�=�
c�v������@v�E]k�z����wE�1�aj������r�������i�w��������z������D5�#V��3m�q�Q ����Nzw
8~��)DS�]5�'�"g�$�|1�4�4���B�{�A)����!~���%���1Ci��h#��vs%?q{�(�����\������(�f��P�;��'���&(DS�Ko��1��`6�i?+!�\
�U��O|������D5����4���O��2�d��[���G���0�M(`���r�_b���X�m���H6����O�>�2���O������E�l��qK_��k�k{}����%zhje#45%���)�|e-���������j��8�Lb�D�F��"�������i��z0uec��M;�Z�0��68�G�&0#T�D�������X���(u?��q\[�& ��g"�]���3!6�,�E	d������H~p�l�g%1r��#�����X��Ry�d*5P�/J�������B�`��!V�RJ23����S��Ex
LsJs{�=AOU" �S��N��D���nqb4��O�Ue��}�p��I�F�}�&
����bjE�O	����F#r�����O,@�2*%�_\�*�q!*��	9��"�P~��f�g�����3s��?��������?�q};7om���!�E}���WpS����r�(%8����Q�A�Ij�����3�9Wn��9���U�2���D
�z�n�}�����E�na� ��N�mP-��}Q��������u�Q�4�3�WF�t������Y{_��%��������[}�E,��%�����1������_����_�0�����o9Q��cU0��(=���GU�2��E�X�����5*l@et)
�B�'U�����d��w�G�C�.�9H7�m\��EC�m�
i�7z�+S�D&���Hq`eN�G��(aS=�QJ�E�N�2b�+������&��|�=������r1��n��/
Up��`,W[�}sx�a���
�Ba�{]���2�l�j!S}���
4�]}+'D�Y�m���V��]7���=^�"R�yc���nB5d��C��Km������8����=��2-�a�0���<{%-6�E�8�S����S����iV���g��~a�����c��86����}>Q���D�X���0�Q|�%e v�W����%�F"��;l���2�B�l����`��\�-T��
}2���+)���Z<,�;�78���2����}������zb�1S,l��u�0<�V�d����3���S�X���f�"Ai���,�L`q�	4������{@�VJKs#�'��x�%"_������6��j��4Z"������e�M�����������t�f���C5���t9��q���/&��\'���TsNN� �q���w�Trc	��S��s�m� :wm~Q��4��6ytZ�+��k�k�0�nN�Q��b[�G�V<n8�}es$�FW�@7��O�T	�L�����@X��	����j`�xT�����T!�h<���-{�qN)�I�B��)�*��������^�.QJl\�j���zw�oR�$������#���	����q��jK��H�eC1�Hr��3M�~���� �F�L�I��H0���d������nQR�+<n>������_$��RO���`!��J)aV��Z��4�H��M�tvT��opz��
�������t[��h�m!�����xc�Q�*E�z���i��W=���#�8��[m���v.���RB�rg���[ V���J}��8��o���{s�5��r�uZJ����������?
P=�1�*|t<u���*gP�>��|����u8����[�I��}���J�d%.�:s��9=UW��5���QtLe�V'Z����|�k��p!|���!�P��3�����)�����d�$��bF��J:���;��e}�&�*J�8�oJk�����w%���jbl;�yZ�o�� v��	��A�j`�-L@��@F�D��'�P�����2>i���)��+L4��R�6�	��^k"�)%|��6h�
�Y�/J	�Nhq���5��u�����x�3(�	Km���b���B\>wU�V[��?�]�{'���"����S��[��
/��X����t���Q��>��&�N���~�j���je,�5��(�����D*u�Ikv�����l*�<!�c�)&+�K���:�����b��Nx���7��3/L��um1���](%4��~�
Bz�xP�����G:8&�]���T0�������(�8��5��B�N�x�)%d]Y��}��������,����s�
>��%��+�XOX��������'���[t�u&�?�����j�)��6�K,��R�8���C��f�.
'&�J���������~b/~��([bT:���t����(,��8!J�[L��[�+��
t��I7QJ�k.����MD�����M��x� �U%�:�n�����@�����������BV��:
����b��d�����cw�rB��2`h>�
����[���R_kT+gY��abR�D\����*4uQ8�O}����Co{��$����Mc���BE���V�6�"���b:��0��f]����$LX���\�=� ��<>M��1�F�x
��;O^X���Q``
Z�Asv0=�q�p��}���'*�X��q`�B�>�m�v��6�U���"�����'�`�R���
���P����b;5�trM�(��[���QI.y���7��"��,D|�����q�./��Y�>\�7n�h�S���#�����q>P���j��8��6�RJh�G
xv��z12���X(%�,���
w�:Us��#�s�����P>J��7aT��h��BEP���vX��A"`w�%��i�l���9u���$O�N��Bp��P�"jduj<$�	@(2�.#����*��{��#69d���� ���!\R���@uh�&���w+��8(�c�}p!���������!k%�1����n>����/��w��<4�-�ML.L�'psot�i�=�4���g�LS�S���ba���xrAw?LqHus2��;cud�S�����3���
��R7Ga����tw���f����7�r�j����n��Lw��[e���T!�'8�u��d���l��h�
$�o�~�����������9$|�R-�����>{����1C��BN����������?7�;!�>���F�i�+��c�6����x�7��i�>�<�2�0�����H:0|%�=���Y��g�}�����-����!�n�G�p�V��D�����mG�o]�~�{�EP��]Q�Sn����4�v�&���^�Ju��'��������1���x
�f����t!�����x�"7��j��b������*`��x�)�ie"c�����(�TwnX����o��^�>Y����y��ww���0�VI�2�w��h����{t�0��U�#u%��	�]}/X����f�d�@����7�2
A�.�~{yw�/�z��|8�pb��D����y/2����i�.*c�x�4��QD	��L�a�J�x��{KE����o����\L�E��z���{v����;a�Z�C�0���g��8%���������J�d2jM��Y�Yx��������u�-�Z���e;����l(>�;8e�B���Q3��\�`s��V��o��qm��x�f�&,j{�s���rW2��%���WbL����:rb��O��������ev����\����g"K��!v]�
l���a�*�9a��"9�Ydf:�%�v�~b�}�*��aT|������5�}���{�%
�x�A6;��S�x���;L4�������I��C������"����:Txz\\R�b?^�e�`���!=$,����(V�$&�\���Ze"9d~si?�f��C�	s��}@�~1��S	�|j3�\*
s����wi2#�q�&F���]�����b��p8�;�����D&
��RTW�����:�����D�6g���<I��}s0��S�'�*���I�
��
����B���9b�����	��^
�?�%��V|TQf�+�_�wg�n�o*'�lo�_�)��_�1��?Y�X�R)�$o3�
����
A���j�w����8�S�������
�R�O���2q�E���k�*�L�A4��sn:��7�*�g�����,5�7iP.��{�i� Z;�*��<��-�������$�p�o������bo���9����LAc�I_j}k���6}�Eu�'�6�7���:�o����������nf���?c��B)�Cb�R]������ey���d��s&�OGg�}�P�0}:p�n���DV�Y#�:��btn�g����o*W�'@o
0-)��D=�V�*-�b�4iKLR��J����J��|�jY��j��N1�{�*�+W�Cs�'MZ�>�w��a�k8�����)�E.�I���0-�I����O\VJ��4��,!�i����&�<q��QL�T���T��8��\�VF�yuS��M8z���RB��r>�D�N���D�&e�4���
x�
6��&M�P��3)E��
����8���j�����I�t`�k�����F�5]:�y++���M�:���L���T�j����{�I�
5��|����?yPBm��"c�S������/��d�;P������w!,?_6	A�+��L���/��)�y7�LB�x�����fk/���
�U��������%����9MF�e��Q�|���Ji������Q�����v�J��(�h���8�����e��	��$O*�3yR��#|�'eT".�B�k�'�Q=)���JB
��Hv���*������_��SJX,�z�3{q����G�
�J�|*����������J��E�t��u������.�����V+���K��Oh�Pc��`_+)� r�n6�,����%$9TB�\�_������$��X�����!�^���:��TRQe�
a����T!LYp7�B�{�t��4���~@/��Q�IE��cU�������W<O���RV<S{�����*#C��k����7i�� �6����5��+���	&I���x�Rhl��~�.��9���'%�����������3�a}>�z�|Gu!�H���F��1����l�n���Y5F���il�5�4%�,���z0�����Ui�%Q���$Y.���<��yO����o[(/�
!���_�{����2��(�4jT�������������m�.�io.�3��������t���Na������39�Jp��E����o&��Q�1���m�15G�X	7��N����B)1�fI0)���f�v�@������A(��'o*{h<�Hg�=Ex\4��D|�j����i"t|�ueB��U����@���)4���{�?� >�4�����o-f2�
�7������R'�����2C2�G4�p�i:���z��������L��d$CI�Y���-�������J�|"�����bI�5V��j��������������5��j&�4h��O����:1�{����isc>���p�\!������@W_��E�����&$�yS-}����7�lj��{�3v�6�x�Ko&O��bK'����P*e-@�wQ+>�X-��-�
_q&m�TG��/�mv�����c���J�N�������^�
?<��r��Nd�q��f'9�e�d4'��~8���wNSj
�3�rT*|�~r�/g2I$�o!�2�iL8��L�KDY��x����g��C|j��T:���	�;�sX����~���g��i�=�5��f������U���V�m���RZ)X�!��c.bZ)X�}.�5CN�J�,��]P�dA��Q���kf�,����Q����
�#=��B�0IBbLR�z�,wS�]������}�EVq4C�����4SR�'b�b
����4@Qm�K�Z��BR�����m�T����C����Q��l��4�fJ��'�r3�e��@Y�j���D�Q��6=��~�;"�H����2��3AZ�#�l��m�G?�U���*����/89$�y{��r;'�D JP�����99�2s �������6=t3��n�C>�|^\n��U�U>b�Hi����
|p�	����>kV��SDP9�M�+��_���&��G�1����7
�$N��j�R���I��aK4����<CDf�	����Cn>�����g��O�:����j��� �����/xZl�2nO�0p�TOJ�����P����}'[g�����l�s2
�]7�nSB:$n��{r��:����B=���f����E?I��g�\���z{=�[�u1���p]��J�������������+L�o=������8<]W��G{>�oO)=�����e�U+:�F�y��U/7�Z�q5J��,4�.e��D��f;�UC~U�l��Dq������2�.�Ix������R2?$(�>9O,�_eQ�F���j�By�����?���')y}��\^%�����6���|���1�+;�O}����?���?7�O��^��� Pz��rhe9Mv������?l?���������f�����w�i����$��}[��K�`��P^��{6�!O��U��@�A7��1��<F.��]�����^1K>T	��B2�G~
!����	%��TA�,5yQ_��6�f����)��76��/1qJ����+#��O4D�f�1�'���G2l/<y��3Sw��.J%k���^y�!���`A�(�$��tk$��^
F��w%�	�OP�����?5�@=�o�!2��OaLt+#�@��D\|��nekZV�]B��q�3�+��$M�hSdI��Bs^
��&�`�=��D��E�t�v��{!QC%W�-
l�<-��1��_#�1q�U� ����`=�DBJ��;
��PFF�X[��~�$)���o���zN���t�?��"�1aZK����s���1����[L&���Q����n�SO�40�+����
�	��"C���a�$�^+0Lu�������nn:u�xLY�4����!w{�j5�E"�����{o���R�v�,��s��$j���4�&��>\80�"C�2%�
M{��Qb�
�W%�[��@���_���fL��L`���d|<�a�a��Mv���E����	vF��c���������7Db&��N�i���CV����r�Y�1�_$fr����0�����
74�
J4g��.���%�����<'�����B��0=	��L�2?u��V��m�d�S�:�o��Bu�9�����H���x�;N<�?F�|���d���e�M\s�~���"�F�5+
@���`Bd�%M��o#Xv�����i�0d&C��5����H�?+C�<��E�Bk/���y�r�f^<���xLW�N0*n�!#�����\�n�Bm�|���+3/L-��}d�p<�
<�e�����c���o`�|VBK�[����8K�����s���`��������X��0R�-���a!��������[������B�qN�NdS��8������@�c�^I3X�@����u�2�F����� ��7
�hg����F7u���C�H���Q�D}C�#����8b���K']�\�������N���l.����ap�
��&�j�4O�x\H���0�yw���a���������Of�>tP��-d{1	�G��TB"�5�R1�m���sA����=����:w��������f���D�,��Y���S~��j9�?��n�������o�$}u�|�{�aD>��8����T���V��F��^����O0-�%f+#XOw�����Z��|�a��-�F��<-"�#�������4�s@*bCW�+�����R,L����f��{/f%���������{�k��"�,�`�SB��j?�������n���q��T~�����i�r4.D���c��{��!��������M��������U#��$��HK�0M	�c0�����T�+LY:>0��$���-��D����'�q����|�!\E_ ��BD�\��p8K�������gX'k�&�yb����/\�;���:�T���x�l�o����}�Ury���-�o8�/�Pc"x\�/~��U��`�
!)�i�a!=���h�1���Uo_��E>+���)p�X����0�uls�<?�^�����~|���c�J1|��c�k3-����$E�s�����33=��0�a�(]>a�S�%�Zna�&�I��s0>�sx��-H�x3��2�;���]}�Y/�����!s%��@�^fDD�&c�g��t/��>#��X�����9�q�����������	YO�n��#��hjg�9��4�Q8����,*N��l�����!(k�{��D9��@�a����.�����z�qU�����f�B�����w���������,�`5������rR	��rxP����c�QLn�BL���y��w%S��q`����s}3����O��r������a�BY&*w��v��u�2zc�_G��(/i�����P�fj"�Q���R&���Mrh��}H�1�R	s��W��s�K��<f���>�'�c<����"��Z��L&���
�����'�����B+#�Ns��cAL
+���G�*P�?Sg>3V4�d�?�����Y������iUJz�L'VFz�<z>������[���C���	��L4�i�R�E|�M�%�e��i��L���
���^z�����
9E�g!��ZK��]�9�d�iW��]-����{�Z�\��6{BMq�r�����N��B:�-AA��6YbrR�6�=��Z��O"v��������
y!2�h������7�[T��W��������b�h�w�����`��p~ka�������K��F�(��,f�B���ES���)�[����4#>N�-�3�=�_]��8)5C�i�J���v8����R����n���<�&*!�5F}��uk�D����2�B��|����9Y�0��1}3p�I��Y�!N��("t��D�)������������Q�?lI������-�D8�a��8�FLb��9����)�+C���;��`q%��o�B������2
1�����g7�Y	�[�?�(Q|���*���!&��T���I�C�$�j9w3�#������P�9����O���(��x�p��-�"�����U��4g[(I���zcp���>������1q�Bh��J�3�^����95���.q<7�oX���B�����8��y�y�������1��YRk��[���B��Q>
Q����4�y�F4.Sg�������mb
Bq��D��h�]�09MF�Y���V���J~F����������=
��k�QV{�k�������5Q*�k�T�	��V�D3fr��)=��8z����x�����X�����|��:9rj0lh���VFd����O&c�'�A�L���'.m;'�NT�(���:c i�U�/��x��/�,�S��0��?+U���V)�����B`�����_�D�0��B�1�me&&���eI�uN�_����f�d�D����i��[���D;sie���)�FE���
�BpV�*#�f�
����,�B4`�S�<A�bcb�ka�9'*
0�&����~b�m���ms�gG�����J�3����a��O������N��+��aAj��bUF�����n��U��W�TE9R��l��1C��]����.Z���D��OD��	7_D$+'!���0���iN	���_��b"���&&���2�o>Ac�57,��" b�G	������+!p2�����GV'�t���aD#�&�a������t)��}�?K-�`�gcno�R���� �89����J�{M�
���������_p���T��i���U4+!pp9���R~[��5:`�SS�.��Z���E+3")��^W���x�fR�2#�B��*X����8$O_���nk��9�TP����.v �����2��<a��)C�V|�
j[�^�`�2�������Hm��[�����5R7�DS�/������n�����pp�JF�����r��PuJ�Ph�*��h����������8o�l^��p:�7��{4��G8$S��<�����O��2\K��Ph^�i��<'u"���RJ���C��
m�H*�8�adT� |3L��~+��L�z�0<Y�)=z�_Y�B���7~�o
%����c��}6X9%LD�$A��i>�HE�hW��yC�����GY�?�6B)%���`R�������;��fG�85n����L\l�=��O�_�i@�}1�u��T
�R��Z��9+lC5�����A��6[�r������s����M/J��1,���b���J�1���nKJo����el7�H�	�^3�@`c�7��z�I�W
���J+�\">����y,+U94��N���c�"�EtQ�>l�(��M����<�OR�6��=�7jG��Z8M�4:9Ae��b2F7����t�JRzX9����u1{tr�"��+�����O��/A���LZ��)�����#������Q��$%�C���:�� �w��! c\e#���1����j�}���$3�;a���$|�,&},c7���e�`OA<�Ls*��h���zQx����!%`��v��J)�'�t�����S���S���D;J�l������/q���-vq@�ua{�O������c��z2��2`�m����`��ZQ��m�T��<�+E��h���M��c���� ��h����<�����0������	��W��y��LtPR��E��xMCr���c�Dej�����>}����g��PK��>���?R�?���f�%���?@>E������[�C�;��iE����J���V��!]#��t����E
�Q��$~I���S���++i���V&Da������	3�aeoxm�(�Uf�r����E��1�F9��y�S���s�=��d!(�(�&�2>�uK*\���}1�b�A�����W�&�y0�J!w>�>9����p2���] �v"T�%c���JS��z=9��g��]�����NL�DEB���q�~��,������Z�>��\�.N���V�'�����I.�����+�1$W'�
~H�r�&����@����L+�(5���`/�2�����;�� �c�<,��]���= 7�z'A ��s�b�"L��2.�o80$,R�^Z�-#>"
��P������g����H~��e&�f������;�bM@e�d�����G���I4c�����,��@O
�PT:0��u�B��x3A[�����"�o�9������4�mIv�����2�r�����J�;���&�M���7�����>��1��odV��z�oU�SmM],%��L|�Qf��I���!�=����u��~A��0Zw���0i��w�@`W� 6�8�R�9���������y�����u�B��I0kZ'-��y������p����.E���������?+#X-�k�`�i�cLK���p��4����>?����
����	���,y��:��/�r�.��}�9{+��~l�����2R�j�h�f����Ls*n�
��P,-����(���@Xpt������y�~���i��T��anX?��y�`�4�HI}�&��{Ge����������������PC6
�2:���j{��o�6p���z��i�X�vC{�4i���3�e�Ry���C�\�X�&F���&��]�
���N^��p�%D�>/*p7'O��g��A���EB&�p�@QK�y1:\�>�nv�� �d�X�\��2���Y�)f��e��Dx��wt��b-�E��2Qy�����!�4��-���>���^�
i<*I���U��9���r���k��1R�Z����=�bN��W�M�s�[s-.5c�h�F���8#��^�9���\��G<����J�T�3Ivf�P����k���m�Q��V�����H (��*��H�����10�k%Z�7]K>Qd)�I�c^����O�4��6����|��	m�BD!�+���#Hf2��$��	F�#,�J�6���|125��ID��J������W>�~�|���MG'����q�<�e���V
!)�#����������N����a�Ab���� 3����L������cy	���JcTL��0�^	X'j�Xb�&��Z�L�'�����i�He��0[�2wC�O�=�p%P$��fN�������W��z��H�B)�p�^��0�tYe��9sU5�y>\r�2���$�P��������p�,bfehb�P$��>���L`L���(�~��I")��������
�IEbri��J�2ZoH��YV�D��D���1�v8��R�	&�3����D(�W�}�cj�3�A��':�L�������Z���@��~7n����U�G�j�.��d���i�A%��0�L���wt�W�����y��XUjD�
�U���7���V��� 
�}���_��>/*z��a���y�������
��TC��l����<���:i���<<���R�%���bE_f="|�S���^4sf26�x�X`m�@����{�LMf?��L���X���������}^�%@����O���L���5��%�2Z>n9�VQ��1���y�F,�S-�`�D�kU��Y�	�����nsH4c����J����sc,��m�Exm'�`��&c��
���z=F��V�B�N�����E"l�NHQO�F�)�~�rz���;6��V@�S��E��s"�,�dX�}VF���Yh�������`f�����[�H�h{���	���}����<}r��EgH�an���K�"�_!�
�2�t�B�[EG����L��`�%�$�L��K��Ql�o�U�z�-5����V��a��BG�~��UbK�cO��!y��Gs��#���lmz������q�iV:���u���x�>-���S�������U�Y�)F5X�Cu]�L�jJ�����,�U5_?�bee��	��C��{�(2���=����i���18U� ��F�Ut����=���������2Mn�E��9�����=��������?QMv�[px�x~�h��"z������z�QA��o�Y�R�<^��0R����Vs��m�F!�/�H�7{N0��}���7���?)�����+���1.��o��B��ss�W�Z��u�n��D���J�����D����\"FF�g��!T�a��B����s��#�0��D_W	=����L���@�T��V�qw�I��
�ec����vhK\�{_�,"^I,��S'��)-oJD�)tg�<�!��n'�e���@C�t�`\$X��������������&3��F�_|�6h�������@�oK�@�[F}���7z�'�
�w��z����A���:+m�cs��0���f�'�_Q�n'!^�����a������p���#��G���n
��b����b�8��B
��}��/b�(�4��-6H�t�>�����S4_����q`
#������1�?g�vh�P+p�,��0�?bv@u���p>+��"Z|��;���;)�����WT�~[�����O�j��T8�����<��L	����o*�q$8��~��	������Tw�X.Ln�[h �a�Tk������E���a����������5%Bi���!�L�������K�c;R]���0v�AEc��=F��*����JX+{����$]�O�TY���f%\�~�s�.n�"����>�?Q��swl�D�
���+>�3�@���|>����D�ve���L\��]G��s�fp�g�:{��D9� �.�{���H��b`8��B�W~*���c���B��K�o�2���|����}	
�����&z ;���j���m�������
�������}���d����0������h���T0�x�
R��\�i���b%�=���L�'t3&�d��f���&��������,g|���[~�#���"O[����V�k��������������}��?����~����n������b�b��sw�l�z��3_���^���^�������(���A��S(�w�A��~1��lT���{��d�SS�>��5'3�a�����,�O��)����xp������`���a$H6K�����H2>��H��#�X2�2�hP�Ao�,
lS�+��,!��]<�����B�+o&����?+!p�7�j���i���B�7!s���6�gR��������h��MWP��-��O�����
VF��,�vQ��	�e�]0��1R��L���j�]��h��H�ce�>�������	�����zC�O�������'����.�A�>
����Pz'��������=�n�a����V����B�$Ntr��=s�;S�������E�<����e�mL?�u�����]�}�q��)U<�bs��4�W*�����L`S{X���������C�I����B|��&X�CVz������]�����]qT��'���;1I�4������~Z`������8C�)}wbC�3L�e�WKGL��P��
!�dGmg���|��y���yU�
�6��2nM�����]!4��9���j��R?�P
.���u�;��$N�I�UBeg?B���qQ�Y�D)��K����^%C����=���,QYW{Rf�
�{���oY��b����M�������2*�O�}��C���F�=B��P��Q�y���G����q���i��K�]��I	.L`*�S����H*�k�����;��)���|o3�~\�����LYD�Z�����p��AD�gmeEX�}&��q(��6Exk$)i��OW���yr�rU�0R�3k���(����%��<hR�"���7�"x��i�B����X��F�4�k�/��b�)�P�!�r���$b�@�����Oe]X�}�I^��N���Vexalv]�pHMx��z0���W�/��I
�����4�I��#X�dB�I
.���9C���;��L(�h��l�Y,��QQ�(����c���������
5�J���G�&"��	|Qfv���F2-��'��IL�b�s�5����0�9��P)q�/L`�}C:f��9C���`�����0�Y����Hu�{�x�z\��q�I����"*��C�������uG&��T&X��lC���i�*T�r(�<����#��7M��z�H��-�~V�f�'�Vj�;�N���8��D�7�#�t���L`w�x��B����?=fc�e����0o�G�VB�C��
E_���~r���T���g!���&�0���:�$>�"=���h�wxa����t�6hY�H\	��]�&gS�b��A�_�.���m�3����a���~Y�B�gS������9�����'i|�U��jXIE|�������D������w�=����;��$�������[B��7
Q����53���9rl� �f���|K��k���z���M������ *aP?�V� ��)���uP�������F���f]�����9U�v53��}��Diu��Je�b0��B����;,=p?U��4��M���fJ���(M�J�@�NO�������)�;���R��E7�Z�E�p�L�������o��
<�0lq�o�)B+���'z�.H3�cT���"Rl�	��_q����L%�����B������|ie��V{���,�b�\Y ��x����RT�h�����	&7Hf$����>S@�T*�JP��!J�3�~&C���J������2��>5>��w":���;WsX����X�]iw$<YL��X�C�H����t�la_G��R[��R�'y/��K%QS�uf���+��o�
��^���X(��<F�����B�@�������?LwR�������.�M��\�'�)<��#�[����I��6�	'm���/����������O��g���QI�`���f��������hj"k��;:>��Q��6r=��	C�����cv�txa����!Q�WF��S �/W��G��Ry���Y?W�)J+��*��J�2�s%�%�t	��2*n�,�t��2���;�:I��l��f���t��Nj�pmF��2M	TPgn>�����(q�U
e��E�L��������Z���QM*'�� �d�s����c)���	$,F������C��)1G���G=�J���R];��(c4�5�z�V�^��e�q����2�kS����k����� �=��sVB�EO���L�)��9co���#�����}�����3O5A_�`��g��(��2N co2g>-��4�*�d^3-,�meP�=l��i�p�FNg�~�Ic����<���xn��n�,�&�=[���g�����WKU�F���R����70�*�&�;�GFL�<�]f4��9�p�)�O���� �]���&�
��~�\X�K�����ul�'�QY+#������*#o�Y���a����y��J�r����xwc���T$���?x&���O��w�6t��-�G��	.V&�a�DO����.���j&�3l�,��U
!�4M��"�9���p||3�8s�z���)�a��{��� �tKU>���I�����3#;�C�i���#�;{�Q����
jv``�P�K3a���T7�))F��T�8���f@�����|]{H�����Y��w�GW�K���l������/�]pB6�T_����d�Q������AAV��3V��/�]�Y	�!$�1�rG�q[�2��s,����<f�������f�f&8����a���Qg�S'���!G�e�YI_����X��	Y�v�s�?n>��'�Tg�����_��a�y1Z���<o��81[(����A	��+3m?�9Kr��,�}b~'I�3���b�z�a�����t��L�3-��<���VDJu��b2F&��-k�X��b�Q2���KFf��B��Of����Q��bO�L�Ra�R>�.����23��J������9�J�b���)��Fk*E3�����W�Z���x�yl9�$�ZUt�
s��}#|����������%��v����T2ocf2DkEd��ZF��a�����������W���:�
}g(7/�����XQ���K��#�s���'1��+#��\���O��Vb�����q��`F�[��I&�E<d������s�}F�;��#X��.B�5`�D�tr�ue�\�!�Y�V0�=�D-�_e�P��aen��+�
�������BF�h���5-����t�Y?I[��2��_�1jw���z�o�K�DBg�=_�J ��D<���JhY��m�/�f�5������v�����+'DZ/���6���(�>g���p�_�}�c���g�3^(��q!�'
�q{Q��=Vhj����(G�'M�H{X�*2��VFr��3��N*jeo�������#�n����	�!&�FE@�����I�a����i�P/����*���y33z{\�|�n�

��L�D���p�a�Q�����V����6L��,��[b����['.�S���1���8O'��=q �M&����:�`Wu��=Ow�%�����J�ze�@
�A�\/�<���Y�7�����%}�J+���8�U=+�<w���_)C��W�*F0u����Z���q"���W}-WI[���R��[��;3zm�_\Iut/�3�6��/��
�y1������jM,~|QJ�����3q�^����6�]����
l�i�t�1S��T(��6�F�J�
f�bu�~Z��B506�;�a:"��&1�m�9��@�#!u�	������`�;�.//�hVF%/�
�;iRl�����@���O����p|��)���{N�������gA���M�@Y�����(~vNv~���A�A�s��R`2>6GHRoN)aK
����2��#k�h-k���n�V�P*�����A��0���9(�kf�r/j��JU�-O2-����W2U��{[�����4����)���m{�/�r��j�.�"�y1;s���<�<��&&�O����,Z5)��������
�a�YD�}^T����t��Hw�kWG��w��L26�In�)r����"���LK*��$��r�`����{��V7���:WA�s�o��r�Vt-��c����fY=Yi����o����p�J	D��k��e+-hO_���-T�sGk}^�m�c%�A����7���M�>O��FJ��Sfj&�_/�2�������[���/��?�%��������>����&S������R�Se����{M����������w��A{P�I�G��=w���P�p��Rj��'�%�������}�xQJ\��v�m>����P;��m��	�ct;���}&b��3�6��B0M�\�,���x�zZM4�������`��G2P�9���<a58��F1�ju��1��b��L �1���-�9Wnz��&O�T�P2�&���y�s*�D��Q	�������)1�������<��2��O�1%pq��mVCe�y��6���'�6oD:����� �d����?�P���G��.�Hc�\=F��i�J�?�?/��f�\%{����~u������bnf:��v��`w|Y6q,������}?8��6��\�+|�<���d�7W�	����V����D���%7X��/z����m�f��6�|-�	}�oV�;�������M	���w�S:�������N8OWB5���|���f�����ga�QWv�N���������ti���_K�-9�
?�z����.o��V/�z�/���\V�.o�\�z���r0]�����t���������\V�.�O�|>����.�Q/���\�K���[�5@�<g�
��/��\�s����\���3�%P\��&����F�P��a���(���������]���
�.��J���tYvQ��
�e�a������R���X�v��\V�.�Ra��r-�����%]���tyn�����k��R�^K���-�9Ec��=s�.�T�~��{��}�ko����%�d=�����j�����Qj0]��/|T!;!�U����/[���������^��u��w�|���0]-~��]���u��w�|��0_wM~��]�����^?��{��P�E}����_���Q����v�����B�g�W�����5Tz��~���f"w.WM�s��j1���U��\d���"i�\89����HY5�E���p.VM�s��j)��tUC�\d��	�"Y�L8�*V�Y��	g��b#�U���pVy*�Y��g��d�y`�L�[v-iS7�Z��6�������5,���t~�x_J|�RK��V�_�����R�c)s6�$������D)s_��K��Rf?��cQ�w,�!�F�y!��]��[�}���)g�S�@=��:qK%�b���0u��sr��8����72��Yx�!��X��x���G(��O�~�3����Cn���&`����L������}��ObP(m�pF�B��H��T��T
s^q	_�"��g���L���!U��������~c��qx�W&c����2!�9���U�=�$�DL�f�3w����D�*�-��B�px��" \BE�23!g!��(�g%���a�����<�}ca:��mc
���`��� ����0�*���������z�YXL*��s�ZY��:��������e��/��teD�&���y"l,~0���~�R)��IDG�Z�L?�<u�'+�,-�X]�b���A1z�����b:�U������cv�DtdLr|���gj��6�qp���2���sMw~�*0N�XS�_��Y��oK�-U�.)ZD�2��"}��`���������r�ca�b�a�������L�5������t��9���(Le��@���D��\F�Jq��.�%��V��F���Sx��jUU��#�����HP���������h��f,���"{���������tQ�}�
+�v�@W�XT���H��E%��Ux_(��'v�T������'��e��'}��=3�#%1�|"x�q����-(�T�\�v?f6
��i^���.���\�EP1��*�ap���
RC��_����OX=�<c�P�����2��LpH��eB/#�L������@H��tc��a����}�!+��GC���X���HL�������~���5�>�$Js��L\�b��t�J�S�3��e�OdA�t����/Z�d[	���Jd����r��u�����3��z�.����OKX'��aT&�VL+6�{k"��
�Y�(��}3+Sji��G����	���-�>�X��dh�DW&��Bun��������}i�������9�`ZP4�M����-\�6�H�
��2�!"Rj��.���������LG�J���~��6��p��%����9�������:P�0ul��q��qs�����9a�`���,K&�2���Q������R���?���H�F�_���X��-c|9fq�P�/��*h���?q�!]~]-����7>7j��0�:�������e�
��	�b����U��L���:�p�~�i�	���
h��M��
��B��F�M���y5
����o���$����u�~��8!U�:��M��F=i����u##�g%8�%hg�.����P���v{2A��$��f�h�^��%=��
D�7����;n�Z&��=����,���si@t�^(�$��9~B;a���<���3��cK�s�QS�t�8���5���}1��d��/���\��K0�| !��	�Z$�E��B{t(4�Y	�`2����	��(;�,������k~]O�-c������)���H��+>���z$��n�Sa�<-pj0��I���!���[T���S�>Mk*�6�]�oz�ZMO3g��������k�)c�.a�����X2Nhs�D�$76�i�\C�TB}C��������g%8F8|��6���	|�D���H��'�����>��]F���*�9R�&�#�v���!*:�mF$8����"�'9G���.z�\	��s�*�B"�V	k�V�D����Pe��y`��S�]o��:��@�\�����]��2�Y0�iC'�k>:2r|*a&����'7�-D����_;��Z�8U�O��0�Y�f���iP�U�Vw��(Hz,�g!�����>�A���1r�D�h��KeP!8��0G��>
�MR;O���3���Z&�HV�n
�T�<�.�V���p&:�		T������aO����a]^Q����/��r =[%_�u��V}������p8,��Z��X�Zp��@����q��D%:���$�c�2�,�������uL���;�tK�ug���?��i
���E<h)�%x�w%
u3DR��l����dpg���hR����!������!?�'����p���	�hf-���~�\�!�6�tf���4�s/����+���7��������|*��	�����K��0j������me.8����C���&F��S��C���2����:mR����0MN�c���a�L��9'��o������(�SS�+��uBKR�MR�&38�D���f�m�se.l=����E�|�`#�'O���	uZ�	�����:�^�9gMX�Q����p|>�"�wbq�B�~���5�tn~�3����O�c��d��i������,,����:���u�$�.U>����S(����OSOy!.M�PT��(���d�S��G	2�����������^0��4�$V>b�V��>��A4�C��ndy"���s�M�~%	�	��F�*v�J4��*�ut8��=�AteN���y���`p�j�T��EdB�6u��l��{�o����������.uOW���=]��b�t�WZ��+�����J�F5pB��"n+�}��>���.�pU����!��a��:~Q�ba�
5���F$�[(��{�R��$��/�	s�Zvd�j!B%���J��RZ��eQAE1��o���������VF���n��C��*���,����CAo/*a�%���9���>�p��Z��3ka�������������[������t��B�2��B��Mq�(m��;�]w�V*�
����^-�
]jz�8C��(�W����Zm�&�����cz|���W��m*���H�?��I�YK��*Fu?,��I�|���nXCS�W���b.{������[��%��D�Z]3��\!P����I�^��*����Y	a�>���)!Pu���B/TJ�c��_��B��
�=Ik"�0Z�����I����-�w��K��1_
�m��0���N��T�`�V�a/�h��0Pz�������A4e���y�+��R|�	
D�V��P�c�U�X>�����`s`/J�j�`�������c:�?���*���gvTu�;z��8Ub�vD�
V�w�G'U��H#���At�v�;s<�"n�F������B��&���x��"2�I�R%qP=�#��\��q��G����wW�Ai����)��}1x@�s�������ot�; _:Z��>�c��v8�JI%���+c��/�`�TB �������-���7����M|pds��
������+�j3#6��v{�L���l���>��:o�B�af��h����2����f��o@���uo����mW�?���-�Ts�31�c�;^�>���������E�0����������8%����������DW�"��g%v�{��Q����U�����������4���R?qcux~����?�����6l�������i��=�q�TI���Rb����}�!i��0���}}���(�#���R��j:�����=�_�Zp�����<�ja�af�����F08��v6�3j������Myg7a�(�RR��J\��K�L����J	q�Y>���6���V1��e�QR���|7�#�t5y��P��[8����������_���++WU]�\�WVJ�qe�T'��,�`:oA��
o�R�No��q&���T+�z+����oea�p.\,{qV�kx����4������%yy�n����d���X�n��Y�����|��.�4���qa�VJWhZ�y��3zW�/�;����1���J	���w���Ek�� �<�=`�*�x�y�g8���T�E�b�+d�������DB��
��7v���6+E�Q�T�������UB`to���c��J	q��MF}])��*�t���R��N�����[)!���G���T����3-��0R2N=Xo����[)��3G���Ro��xz���:X)����W�'t���*!���v�bx�"�'�����6��@�-T��� �"����+���I��O����tO����x�dX����B��|Q�5��7!n�By�(!lV��iw���Zp�de^�NPnX�J�e�������U�re���������E<�[�h].�����]����^�q��e'��I���Ji.�������Ig�
/f_�(!\��s!8���+#/�
����k�[�����_q��l����q��bXc`ZP�1/�3��|QrL�W�NWc#[ta#
��{���o��b��	���40a��P����gse�xg�q��M�Vnp�D�����f��J��2K4\L�z4�T��s�i%.�>U�h���-�3ik �2���d���5N��oy�������T.n�HE�(���*��BX�Z[����[�v��Ga\!,��M�&*!<�m�
u��[`����p���3��U��}�R-3��r��1��|3x��w���Apr���s�N�	i��j���E8[N_Y�E	�#Q@�ir��C���^	l� eYG�l����-����u��4��bX�x��H������:�l��V�)
�2R�s����$������	�0����O	�G�g<�vR�����n/�Xh���u�����_T���� �"�+�R>-�>�=:=�73S��1�����Z���3���b��c������m��R���
�i}R}R����V�x^�.E�	,�] ���_�'�����4�R��������q������4Zb�\����xu����;����#;��?��������?9(��9��*�~1	#�/Vw~O�B�������zq<1�p��ag�<���5���fo��&b�}�+����B����2����d��1����:g�R�}Q$[gzO��0�9��f3�X�49���b{��{<Fh&��yqJx����F�a��2������L�^�BB�>���V���z%m'!v�X��]�A�t�`���h�u�)!6[Z�jxR�_^�LyM!Z0��T�%��fI/�=m;�J���p'�toy����tS���q��_�R�
�iJ�d��6��Oe2����_nPq��R�(*���*6},�Oy��������iWJ����vF"�H����m���n8���<Q������w�7��h�0Rz_LH|�:/8�9�U`JQ�vw���vV�W=�_�(��<w����������������W<�,����[���(!�Eov��L	}H�[���M����o"~"\�gD���L��,T!�G��Y�8�ga�x��B�B/>}���~��q��:�n'i<[k��@/*<�_T�6
����K��4�CS�u���
4FXh�@+����C#\�Xl���*��u�����_f��`���8)���� /*<K�O���B��l#(�'����|QR���&&�y���4�-��mg�����\���X�o��X54�& �TFl���!���:d��:l![�������
cu(��->C�x�^K�(T�i��F�s@/�����R�q��_\F����#���_���K�;��'fAM%.�V���s9Qk���8!�Qq���u�Bi��~�������[=<���X�
��v��)q�����M�TK�3@��B�.B�U�W��W�'��J%���]f`]L����8��*��(��n��VF0GB*�����?/F0Tw���{���'�X��c�Rh������KS�u����y1����oO�'~V*�+
��u��E+%���sa�F�7F'H|������P&�](4.>��)w����R-1X� ��������������$��p�|s�`������O�J�9'bm�]����R�������/C[t��pj_��2�z>�o�������e����n��}�;���f6��|Y9t���R�.������;��:���~QB�k.�V��<z03�;�������.���W#>F�[���(���U��]�VU�y�.D��������/XKv�;�����x�:4�����7�Mse�-�G^�j�c����Q9+�l^�<������rZ>�$���'�m���F"�Gn�������?�g��m�E��Y[LN��4�E�p�ne�|��u]��q�<9a`��xt���#Xe�W�P*�c���#��0
���v;�T�[���~���/�'*#X�����2�8�S
���*��y�j�iA��6y���P]��i�S��^������xh�=��k��hN%	@�UD��C��������U2$�e��d�k����^��X.(��a#�vS�3�J����S��m(�9���@�����T�����J	�������:1�W.�?������RZ>���7qT�-��JiE�*zJ��p�?/N	A���%[m��e;I`eu���}����+�C���m)2��A@���w�
B!�u�+����E�����GTlr�$|#bi~�(�e!\R�9��w�����b�8��q\����(�21yB�J4g�y�tM��;
Z���B�w���?x�m'{/�yR��h�~��2-��eRS���m&��q{o�����0�u ��C������W����	���!8j�EB�%w����0�:HL�����
Z�1:�f���	@��1���	�P�0����]�N,T��F3���7�Y�?�'^Lx�;+�z+�~��y��&-��hc��?�"H�s�3�����B'��'�fJ��]��)�4�z�M�=���1}y(O|\�8�F:Y����}$����#I���71�9���F��CV0��\	�E�Z��%
���~[w�mG�y��J%�6E�l��'E~��iP��Uc[�
>C��i����.TT6�,����m��E�R��2S0�BszC���!���yB��0����)���2���g^��Bu[��%�a��g��\!�Qk>�B�-�mp�OKa���^�Lr�Xg��
��>+��P���W�Eg��be�f��v���P��P�k?
F�\�8�U9%��.��T�@vQ�������%B ��X��vi"�V�7������>�e>����j�
�@��9|�[(m�k%N>�g�W
�0Sf/�g:sYR0eJ��[�����bP� ��������L�q~eP��%tg�nA��1f%t�)�&�L������J���k�'�� `���kf�l����������)cs:jF��3�kK�6n���(|�n��N<�-l��2Z��/�E��|��7�L�B\�ltkxv���])�B'�Uy�f%�����1�����R2���g;����J9Vt��~��X:�-[����o`�tl�*v���n���Q��0�O�� �MY�=M9-�>VJ�#p�Ag�6$�E����,X�Om�6l�iAud���eN��,����e?B����Z�����B�z��3��T,��&����f:wL40�)���GlTB#D|j��L�Kc{��'��EW|�y\�����Q�xce=O�f�3�p�w��7����[���@��X�Hdc����X�D���rG�<I���95��SM6/:/!���I�
��
��Y	�FO������]���?�%��+�N�F�)`\G������ae�xs�����G.E�nn5���I�f�
f��H(�
�>�6l�N
�=�SD��Pj����2�����y����j��d���-�G��U���%.��Df�I�	A�DPO�\/B���u��b�+!�6Hg��C�&p�z0�����-u>)0?��u���1]�~��7�R���`D��+:�_)�a6�]3��:�zk��]��b����V�Y���x^)��:�4=K�$�]�������m�@[������u������<���������|k�N+#X��
?[��	�����H5����L����������V\�.�`����Q0�KV*P���>Cmj������:1���I�����2�l�I�B`����V,9,LnuS��\�'��%��T`��#l��%���&���Y�.T�-m���?�J�D���f��4����!�������&])!������F����5�c��L�����Y��'�U���������0��\}�&���D�����~�*�V�P�\��Tie���}�K�p��3e�P*YOV�����j��I�n�&3��*��A�m�0[v�H�yr�#7G�P\'c�u�Xr���9���xs����
$p|��J6��i��$�f�+cn��K���iI3�;~3��?�1	���7fN���7�]���h�$F��Q*������d�H�����Q�x����:��H�+oL�@Q�V!�>R^�Hs`-AxH��[�/$O�0�)��B��e��������I�g%�;R���	���;
�=�u���~a������_����U�I�X%~��.�4������������N����
t�����!���U�.%q*[�i��������a�Bd�D�w�����?*����f������d����������.��*���7�2��H�`����B���iN��"�n~�m��B�l���q����1WGe���
}����)�H��C����<�����C����]i����>��*u���F<Y�	��_�&��H=A6C��a�;w�k�	��$�N��1\����;�Ddxs-�����2U��X�R�w�k�_�x��42�0�?>�1(��-��o<n���/�i�t{� ^(�qb�Gh��(��M	s���z�d7�Gy=#/��t���
+��b���B)�T��f��GU�#;�~���B���Ld#g� 5Dn:������LM��s�^L|���������g"��n�
�z��?��r>=�����|�I��������Y��g���t�p@b���5�Y���P�nH�W�4���O$m��biG}����BD�������J�Z�m�j���%"�cy�}�J�|��+\?�Ws�2�mn1+��� 3�;��\|���P��.U�2U8�"�;��9�[!��D�����i�����):�hW:v#�s%&�3����ALsJ�0�
����Y��p8��>�R�3�_��7i��1�q��9�hF�Z�����
�2�%��$���%da�?uh����fsPF��&�I0���8������9��X�����v������W5T���������g��G���<�g�{���v
����>�i��~��^h{1�tK���B!�{�����6*�Cu��J�;
)j?�X�E����"~��I�QS����D�I�.f�4y���_3`&�;��Lh"I`!)��E�����xS�H^x��	�a�%��<d�TGe�L���q�@������Z�����8J=B
v��;W��U������"Z��a[E�����Ic���[�Sn��5^D��5��Y���b0��P��GG6�������a[C��@�0��,����B���~������4�b�X4��i3��[�g@bR����p6#a���X�o��Mf�����,H�a�6%����>�!���.*�p���6k!�O��0���'�l���{xh�����`�g�������*���'�VZ�^h��Z�3f.�16q!_�q�BY1��X��l>A�����	�&,&O�r����h���z<X��j����R$�NoV����
��$��v��8/�r!2�9���JpJB�9�Ph���J����>�d���M���zl��)�POe���(�����Y�:`�����u�q}�� ~(]���qU�\=��qg�%?g.��k����}�Z�s�B�������g/%>g*�����k�����EC~U��U"?yO���UC~��R��\]��g���T~�`\��`
���f�1��_���\����X?���,������_3v#���s��z�z����o�������&��-�����a�@�a��p�����������?��?�����/�_�M~�!�6�����$����R2%������{��;0A���2��[	]/����DJ.0�6u<��Kw=�s����r�T��&�����A�����$o��~+�[���~���=����
������<����'�����8�G8���M��A�{e�w��� 7��jh��������d#��/��9m�_%P2&�4������S����J`���
��
��P�:�������{�31_(=��d��Q��A'�Q�rNbn��_2-�|�,M�9�hV�B��	�g�[�F�|^�`��rfw���b=���<i�1,WEP���+����M�Ys,��	�fn�ng')���,F���P�8le�%;�$�d���55��[�����|!�n���'����)��J�{���JI|4����Q-���6���yS0�����/@}�>�[�����Z��7�����AFCI���Mv��cUC��2����Rg�3�ui�v����8g'��e�B�A����N����f���s�n�� -�@�F-����r���������k2����^����U��������a?����n�Xe]J������E���0�����8 �E���|�T�6��RL!�8%�#��M�X�*sZ��G-���
ua�O��d�]<�IB���B�z��c����C��lD+��I���1#s��!�����X&�j�q�����g��%oI��PJ�	+C�
~�O�8;n���q�&Sma.�
����~��'��<d������0sH���	H�S%V
e�m�������^����z��m����q��+�
��t^�_F��s�qM/J�_��\��N h��s�A��fO@�I�����g������5
+��5�B��7� VJ1����6��TK�z��P����h�r[J��Y�\n:;u>�APs<^lXn�i��.i
�<g�PW����4�$�^��Vj*H��q��CVE{H��J�$���p�'�iJ���h|"�N�.D����4��+P�hA}x1��!���M}��fN���x6i�lE�_\��|aRk>8���6zw��s[��Z�}���h��%��	a�����sv�K	m����{��5a5<;{�I{+�P\#� �=$>��k���n:����.e�/�}���H�.�i�u{���p�C�ia�j���\��1��� �EW�Y����R|��q�N8f+��>?���,B����D�;��� "��aHrb�v��0��8w��UB7
<��i��B50���Oqm�E�/J�&��bZ�`e0�`�gxt�i$[��B5e�_�W�A��WJ���T�o�)�X!�x�oa3��L����8%��\"g���hs�5������SQ�L`����^�d���eY��H�P��Q)8;��r��T$%�%t;�3��6�2YZ{����O<�:�g��p����� !�1;���Cgl�Jd �R��u�O{s ��?�J��:��������X��q[������"X5T�����i��cq������U
�8���#VJ���=�b'l�l��>�R�`�
;(�����i�����(����R
��K��<.�R2����:���F*���F�QP���BJ�1�.vMd��M�k���>O�����������y2�|>1{@�9�s�4�]�n����$B�������NM�;X��wz����#��e�!�����<����#�!�oS�8ucD���*[�r��3q��Eu����i���T>"�z�������F�T"��������j����s]���T,���y�� =�A��s*��r2�\~>�}�#y�l��c/�LQ��tOL%�h������fB���G�R�������}�	P�~���!����	%3s��WQs�2Z'N6�jm<������ti"(�9M1��;@S������pZ��J'�;N���z�iz��v����LS&�����r�����W�+�d�$l�q�y�Hj�������4��E�Y<��U�H�y�#C���T ���c�T�}��������y#5>Jv�����.-H~<������M���.-n������cD��<��L������c�#ki!����9p���,����/�1��@i��$���!�_����H�����:.�_�EY���9��="���J����dw3�k�H�5M���#H��g�b�>;��c+�f��v��A�{�N�_/H
f�=]o�9�EFl�9��hf�X�w:��>[���������g�����)#���U��J;Uw�����������0�+��n��6��fv!���M�Q����k���{��p;��,H��~�WQ
��S�T��0�NZX��b�4���;���l�k��3Yv�;0�������~��H�7��${�q&��C�^e����zZT�6����xVRT[�����8G���z8���?�cG����Q��
�i���t����>�����q���q��1<�5��n��V��*�0���3fXf�mF��������o
<|^W19��p���h1v���$�Q���h���_m����	i�J0�P6�i�
[�I��lfsF
����Dd���o8z��c���|y9�s���������x�������a�nl�����Jt���6������x�����p|�`V�Q�?IDe:���Kt.Z�����LnK��Q�P����P�f�
���[��w��Dd�N�����{0AJ�|������������u��k.Vw7n&��"n���7�n��^	�X�v��C��\��Bux4��%e��nv'mT��i�n[�y����z�'O`p����������[�L��N�)o�4�b:�/J��a#i���)`c�)��N3�xX������<�K�y�T'����/5�3��	i7>�*�!\��l����X=�l�$�*�
VH���_�����A��'>��ZI���n�6d] )�0T���vrI�Y��|�n�/J84<�M^H�!�lx����/�����!/DPH���S��m%Z-'+��$�z����GE-������~bB�\2*�j*�g$��&P��*	���$�<�Cw�9_��l6��;�������Du�F%���l����j-���8dUa������_���
w�~G�V���[7=<��m����\��B|m���>�Z��l?��d��l������	�	ML����n�	d��o#f0�tMKJ2�hp%E����u��|�����G�s`A@�=	����\Ya.v�G�5c���<[����F}@��Q7
��'+y?B�^��Q�~�����-�G������i��u�L�P�L=�i�}�
u{!{=by��O���p��;{�.���ODEN{!�-kWh�D���"����R����#|b�7+ZB(*��bJ�n��{!l��l/��G����y*�����1�)���"T��)����gg���x���P�JD�}���<�e|+�t���)69U��Se�]#W�50������s�W<Xs�V$��d���\���|��eo�3��+b����@X@��T�L�H��,�1��T	�k/��/�wp�f��3�P����`�'��""��O�C7DA��f��� U"�R����
���6lb����pQeuV}���6,��j3���L�n�0�II��K������i���O?�)�^�������H@^��yNnVOy!6*��#���|�J0%d�����/-~!6w)jr����^h'����H�����:
���=��Y��b\W�s�����I�����f���t�����b�LuG$��M���l����{��<��$�����28���\�8����XF@=��m\-��X]j��_��� ���T���E1��7�,��Vi��������X��B�u��vA��|&�?�����3��.Z����}-��u��K�N�(��&�=���+NH_����
@	�x�Mc�yC/4��{lxar�A���}O�.���;�UPA���M����Di�����M%S?����E��f��@�z������Y�#�;Uo�H�����1�|��(?�L�����$��y&�!�B���,���'��B�%�ji�,�����tr����FH7����m=����x����������+I2��c-�t��C�x�$5ItwN�y�(���wk0H�F����(=��\�	���������N&�)/�������:�l�	�qEr8F,���d���$�M��l$^���y1�C�y-��h�}�LP��Z�]��Ly�}�Lv���-� )��IkW��~������,y�D��\f�%��	��>#8�Z�)���'I*sJ���>�U��������'��M�.�����q�;� H�$�mbc��c�;^�#�
6�|Y�������d��C�f�$���EB"q3�L�8�'�.�#d���e���$�
����G����9�/4�g�����
]����=�����U���{E*o��UF���F>�$c��9�Q���,bb�u�r-�BW9�3e��xsq��o�O	�IzeR���|Uo7	��Y6�P��,*���R���&���nf������n%U��\�VSgfu}p�cy���cR��G��\����g%Y���l�t��e�>v�����.'/�$����Q|�t��� �Yqp��J��p�o�;3�Q����\���������{6��+�[
�Uy��+�k�p��Q��m>o1�������,���|n�Q�0��z�������Y���i��c!"|�������,�b����y���T�,��
���Y�4�?�N������(I.��58�I�]^@/���n�����<�����@�P�i�v�:��i�?s�i�Y&�M�,���d(��x���L+�t�(����'����xm<��Y���J�JO��(=E���W`��$�7,���������l-w�G�Xug�q�i���R�����e{M��0�����t�
�e���E��G�k) �d�d�������z�|cHwfkX���k%���5n>LUn�\A	b�E�H�����+?jk��f���:��X������D2(�u�Iq��6[@e�o����$����������Rm�����6�*�R�X��g�������QA���mq�Bj5k�19f�/�����(nih��8L!���F�^k�(`k��0�Y�^3��_���n_7������nlbq�N��QS��~�K�Oc
���P&�������IGPV�LK����%Mo���;�v~$��������m����E���e�$�4H��L�������Y�&
�p��gX�l��|J���;�_A����c�t��t�"��"E/d+<�p!!�����x��H#^UPs7�Y@��,��s`1(��,Z�t���"�V�`��H��|��Fw���|�������[y"C�����n�:3W3�M���E*����D�<�pZ�
��{���u�Es��u.r��?��������&�[�MO��L���S8,���Ob��E�8�^�yp����0��C@�Yx�o���U�u8#����(����1�A�g*W&[GTm��,ko�"�p���'������ru��'d&��O�?�{��*DkG�X�RQ3)6�S�117&����_�Y�����&"{����3���F�����62,�; T�\N!^�@&��}z:�3�������H+B���\�,Wd(
��y��V����<�z;DxO+����dZ]u"��,2w"������d28Z2�m�qW����;��;-��G^]������j�@K&�N���%�r��
�0uc�����+�����h>�\<���L���D7�'"���������hq�\<(]@o���-X���DDt(Hpbc~�Z�w���,�\^������|Gp�i��%�>`b�M8C:a��o�����ZI����OF6��M�c��(I�h?��g��(R�S;����NY=���J��u��h(i�{��V�Y���m�\n����%�,�j�Yl������m����:O����$)3����45#��0��9,��5K%���C�\�V�\:R���O��4�tb�@2WfN'�eN�Y���Z����f��t�,���v�Xu��`-��<`KT�tEpq�u%��P�H�V��IF���/�k���\O���������-Z���-�����K'�w���]���k�-����8,	�$��st`�iOb��Y>-���|��0D���	|$�h���,j�mIT%;9,SYo�2�tA�N��~��1�9p��WG�\+�z��Ea�?!
��z�0"�=|U���YL���,��4y������3����c�~@}�$���/�%
��|��
�F[���N�uU���qv��^�?_�Ol�{.�P"X����YH���!E�w'���3�UQf�
��`�V����qt�
h�_��J�%��m�n;����U��=��������gH�
-=��XV�}�� My���(�[��f��+*�;���,����=��F����'��Ft��ib'�M�k-����������A	e��_����H���N����-?����FIv�-h��,m�$r��HM6����\���J��u��e�S���.7��{�V���n�en�V����pO��������7���7��`�]�I���W�"�?�<�Y�1��������:hP�O��>K���Z�7>y��$���FV�,�Z
��NQ.@��������u���`�.��
a���1�Ce��������`��P3�[��pG����ID�A	���,�:pw�y���|�����|!��HbV;�}����{X���������d���u�w���0��n��\�w �������7��������^��V*��I���^��u�^l:�Z��8@�u
5~FK^�M�D���s�Q���_@�����o�8��������En��p�/?��
Y����tm[���`&�B��8N�;�X�'��U�8z���7���hh���7g�dX�"J�E�*�:r.�.�j�v7�v��}����;��Wc@�b��cn�z2����y��
��5���	x�w��=^w
K���u����,���$Q���4&��X57�II�N4�$���TQ/ U�����-�1x[�� }f�vP�����!'6O���1��+�m���N��'2�7C	j�������B�v�8���HP����|�W�~��7.���H	��N�&�������7�sq�z�16	��`��~nI��q������R�4�#�(�����5����Pv1O�P-��"f�n�u��f�b����6N����q�H��pt��4���@A,F�Y����������%�p�?�i�-�������	/�P����[�y]�������?�X����*�Ag�V���Z�>�&����������g(����4y�����=w�h}p�g��(��,�t��$*[�^�������<�����@��4�w|�	O��<g���Nz�IC������~���������V�������~�����?�����'����&Y��m��:�|�����>]��.CJW���a�g=�im�/T�����mc"�h��"��8�,��~�C�z6��E�gqGK���DND��Jdu�/,@���2�	��~�����T�J�����7���X�N�tk�e���L�v�'���iIc���O%�8���ED��L�8��U)���?�D��G�y�����}�E����&�,�K�U��;��%}�F��K6E��tT��������<VK��+���
��UG��-��LD��]��������FD
Y~I}��N����A�6)�@�2���h��0t#���-��74���)���Q�jL~^Dd�@��	l`�|!��/~�Qs[��(����X��pD���BTi����C��f,�L\197i)24�z�\�����\��t��l @	����j���lg���v�����0;8&�3��1������3�X����L*S��� L�E3����� �/�h��c$��	�lg�������
���~<F�����
$)��C��Z�����	��bVP�~L6p"��'l�.�5{W��H�Hg�-j�&�������D5'@�IkW�	��k����p�Y@}�>��	h�K������JT��Z��w����^�����:
��������*����.�2����JR�n�p�a�~3A&R�O=�Bx,[���J��e
���1�Oj'&p&!�D�6[A�s�v�����������B4Qc��D
�dg �a�h��ojV �`����]WJ'#8����3�d��w��\����vpE�3�^�=��A��,0�f�9Z��Hbvp��;8��>6
���'SK8��vL|$S���4�v�-���EB������������p8i��.D������:�:��������Y�PK�q�M2��"�0����-�L�M�0j��dgP;���`3��Wh{���)\k�e%"Jx��`���d��r��R#�7�W�no&����8)gA��E�%�n�5����9��O�1�R�������yD�:Y�������N� ]�@���ab$(���R[�������% D4����5��

�`��9���?�n	ml*X��)�'����Qc���e��	�}�$�����x��Sd����2Mh�e�c��<�z!�����7�<L|V��>���yAy!�z�au|��y�Iv��4���37��O�qCHq$��4���m����j!�������D�u�}��p{��\�[7c��!nAb[/�	_V"�= �yX�V�f�����f���#:c�;]�=����B�Gt��o�hQe�*�����n���%P���@��#�4�"m���IW�����1z��
Q��;���sJ���>���L��Z���"���J���8���_���}��	j�Ze��L���_I{������
p����
p��p�t&��b��L�qBE�e�����u��A����������N�B����^@|�(I��1�p1�y�9���u�����-��h�Oz�~u���a"�U��`�|�_"����������^[*��\T`$k�!�&?+)_v�i�	t�l���SJ��U7���N�f��n�7��������3/��D�	F+���~�u��w3��;��O��K�&A�3�4&�Gg7��?��S�j�'��i��&���+j����x�[��3�k����	��,S
1�b.��5��4�'��G�7>�����������K���Zq`:�>�c(�#�iE����&>����O�{�����%x��!y|���f�0��U����@Ct�7���@�Z�(��db�����Q�*�g�{m��z�tK�k�[S����zB������#}Mdx��Z���<L�>N&'���������������|���Y��������<���hw�[-=�Dp�~��wr*�5�rz�~��3]�3����P���`/7��d���
6_?=s!z��>�����#1������B�^.�r���h!����|2����E��rY���
�c�5R�
�:-�2�M�Y*�	h����*������P����#�7$��~n!�����W]��.�wu���S�;/�1�.��������v��a����wtL�����g�O�T;Y���0(^��s��B�d�)2��h�Jv.9��Ae=b�^�����EB>PP,k��c��Q�=�Y�V������16g���iZ��g��Fk���9U,c�Z���~!=+�*��N�E{��hZ��V��5��>+J�t�O��PF�6j��PZ���I�����pLu� �o����m~~""�	�nYx�}2F�l
G�E�F=��7ZPn���
��t�|�h��A���d�Q�n����A.��W��u��"Ku��e�O�|*7�9QM��w	SS�M3(LP��h��N�J�ja����~7V�e�pc�
� �e�8��W�qg��D�������?}�����"2��������.�����.�||��b�P�E��8�X�^gM�8�oA��V����.V����|�rwd�>J{Bv�h���M��H���t3�23&l��h�e/�kj���{X��u
F$�F�4�2�=���S�w������l�q��Kt��]�)������-+g�����_��	h��m�z�9b�l��>�`S
�����B�����U}�V�<gm��P����*��
���%��}��1��L�Z�'80M&�ba��t�6�g����@L��*9Q�#�g"�#�;b^�h�3Q=b��F{G����!����c�����2��fW�i����2���2L�~i!,�U������V���G�PX�����/���I���]���^Em�yj�������D
g�!�l���y�z9�~��c�G���4�73�F��Ms�W����^���x&E��o�:��b����yL�,
�7J����l<��d� b{�����`����A61`�|������n�]}�H�}&!S���i����lFr!5��4�	2NX�Ri�m<���F�;��11�����]7�~��L�j��9@��}�$�kc���}���-����]��?
��x�����Y���������_����r������N���\��'�����6���������r������z����Z��}�~���qO��{������z��b��M�1���/CJW�=_������R����m�z�j����R!�����B�=�1]V1]�'u��.3��]V1.7�v�!����qY�tY�?.��.�%oK��\����5_��.�S�AL���_K����.��.��tY�ty.�����%�K�?=��,���,P�Z�l!�>]�����[����:Y8�IW{60���=7��ls������T���Y������l��l}���h�=L&]��C��q�����c���1_w������C�����!��n���u��w���[�;�|�-�b������z��/,�d���6�_X���t�-��R�z���m�_m��3WkX�l�����9���Xtn�*��_�
��7���������*x��^�]��Wa���U���yv�o^�]��Wa���U���yv�/^.������x����W��U��_�
^]�
��&��S_>�_M�7\
�����(�jv!�������&���_����2��Tm)U�����{�+���T�k)sv�����s?��Ne��2���})�oc==�Zk�%O����J�cCFu+��=�8��,�=)���XS�O)�YD��!z���~�P��L0
@npn�{�H��� g�\mn�Q���@�3�<����AH�}�xW~i�OWlsX�i�4���x������}�7rZR���3U���)�Z�L7�2D��
5DOd��� U5�����A?�����p.J��	���\s�@�eE*kV��(?�s���}
=\���o���L>�A#y�4�J\�u
�T@c+P
�3�dUB�2 i��H�n�#�(�<���2�J��B�
�|��`���6����I.7]��O�.>e�A�������T���N}g�{�2�r��c���GT���_Q�KQg8��"'���
����9-�"@��|�G�`I���~P���,�t��P�m0��B0j�'UX�o�4��n�������0����|��\4���O�N��',��DF�xl�d��_H����ND����8��y�J�Z�����[	��{eh��Wj��$S��A[J������L�^���hu�Y����rn��@�E�e=W���(l^������Mp�`��\�;��
�;�,KkpS�]���K���8NO��D5��F��w��*�l��M.@�����Y��H	�oQ�������A�"�]�����a���d��	�n�w;���1#FRi������q���ED�p6����pf�usE��'��������I��&`�Q�����	���];��/�J�~���C���kt��������!�=����h��`V=g��^���������Qt%����o�H�H����2S���?)Wz���/�d������;3��P�
�@�n%���qQ2��NxY�S�L[�������Nr�� /�����%�51�I��s��uV��\]�mH==����J5J���2Iv��j
.>������Y&���y*��MX��J�k{BS�i� ��Zd����?s������{L���_(�S��@�L����o6���=��,GQ	f�|��t�q��y�*��q�;�F	t���n��=����"����V.�i��e��x�H������c��dow.����,.�tG�O�< )��N�����_M(>y������37�1���H�v��B�������r�H	�oaE����{�W�N,�<�ua$|>�==`�{�@UvN�'�<o���>�<Y�Z�^1�b���Ft����F5�&I$������+���NO��V����g������2��K3-|��a���u�rD>��6T���&�g��{cHG���C���3V�����r�L��'��zA-�����8lk"���	�Dw��Ba}V�R���� v�����N�6�0��?rs��h\�����g��
w��~�qQGi��+iz�c��H������������OW��Nr���.}�����}�*U��.���G{!%�0�d�"��s�J���w����ch�E�eg��p'+@q�N_��|��r1�(��
��g��!��^=���@7	�_�x�:U��EF�=B�q��>����G����T����g0�Z}�L��/d��/*h�u�2���p��@�.�����'RBm7�opd��[j�`�(��F$����% #�G������vEGu�Y�){���u����s9�J���R���R�P|V`3.�";|[�{�S�
��I�l^+q�D�	Cxr����&7��V���
�7�o�Oy!5��N2Ls���`��WS����bM�7z�i����&.�D���e��JB��S�\r��zw�YG&4L�c����]"w�A>yHIq�o�G�x���\=vf<DK�����DU�=E�/{D.�(K<����Y3=��������V�B����;i������4}������h6��{J�+�J��������UW��&����g"T=
�	���rc���BKF��_D����C:p�E�����vFE.RK/�T=+p�_f����;�	�������b�0����uC���DY{�$c�]������"]N����M3`�e�K���)�m������K�|�G
�;����	���;�0��,�a_���a��v�-�3TRM�<�)z�-x:���y�����a�Un��}��d3��L
��}Jj�=i�����)�����{���M����2>X�O��@dKrYu���.=�/�r&R<n�?���HKy���6��9��E�t��1�#���i)p���)��N�\QQ��8�J�m��N�z!�(N����yr��Dd�JY�,'s�������i����>����<0��'�KT���a�`����P�����lX���Q�T<ot��g����V��X�8�����aW"k�E�:c��Q1-8�����[)�y�J���-B��"�3�Bc��c���Y?mT�im������1���M�M�&�@�B�;m,������G�ds�L2�H�Y� �B��iK�C����?DK���ZL_��� %�����zOJG���T3>@Q�T5�o�B�q�����B"[k�eE"c"�Bt��A�O���T���j�+\��7�K[PR�
C�I��~�z�.�����4
�~�����"_�iF�����v���I�`@�5r�^V��n6��X�d�_H��2AN@��/����M{������"��������0�/TZ��Xv���-�E�t}�>��?+�RM�4�������s�����\�0���4����y��j�_*���}���J2�(
pC7n>%��b�l��	a�W"U�e5���l������4�a�_H�y����d�]��/�x����$��XP�u��>3[�h�����
f�u��BMO)Jv;�����b
�3@'�l��
>�1����sF����eW��*���8P5j{Xu5G�d�W4����U5���������� ��	pOJ3f����M@j>=��y!����������d�7j<�d�X�����!2`�s
��LD[�<�,Tz!����yV�������[�������|8�����u�1g2�b���-�GT�5�A�@��1�����ZeNJ����_,�z�V�9��6�G(o6��A�{�[M������4��M��xn	�n�5�y1<��_��������5�T���~C.����6���?�qh�ZM=��&px��><��z�G�#a����I���w� �c��L(U�f������fI����1�����Z�QR3Aiv����scv�f' a��$v�8�f%�|��\!�G�2��q���lq3��BR����o}�����3�s��u3�IT�)��O\����<����{��*4��k���FOP�h�Nl�t����~fB��p�QgJ]#���T���_l|G�
���bZ������P�}�����n�v4�����t[4�B���Q"��2�y���d���	����ov�ZL���+�l���O���;�Y�*mM���T������u�,���u��Z@���J\N��E����i��i���!��O���?#���g�S_���H\��7����4�#�:3����"qpg�UV$2����;����P	6�t�9T�S�+i��o.����� ��������N�o{��IG���)#{�IeWwt��|H��K�}�W$�#�dG����,Dd]vlY5&��*�
�N�6��t3���P��[9?��[�}��"p����WV6��s}��"w��+�As�������[����b�2#�`OG+p���2���q�,D����O����9�<}����&_���G�V��ww����[��W�2�5O�<o���e\�x1�w+�M=����3z7�����E������[���@�w������`O�#`�f��v�T*�����q�_5v��3�C����5�d�;��US�'�y)����,3�w7Lxo"F����e��������6U���TI�6�S�}�H����|�jK�����������e�x���"%��`���H��cx+�8r4��(������cz+��Z^���wo��
D���
���YD���.��x�z�coA%�'�x�����lv,: *9~?����tDT���Q?9��#���c�BW���E..��x���w��;�J�LI6���r��(9��M�<����:�+��V`���������K���B� �O���=G�{�����n�V4�M4�������o����m����B��^c��	f�J��/�E�^
�q�)?�����6D6o��t��g�H	�o9����{�Brd�W��)b�}����(L��O���6�	�7n��m:��WZ��}����\��5����5�9M7�S���-�*����Cz(�c��L�D�`����D).�4�J�T|�����������j��6B�Y��z�(������_'�T���R�-
�BZ�X�����7���%�.8
a&�>}��#�m�&t��=0�n�y��>`����&px[�Q�DC��X7c1���|1x��w�����d�&�L�]H�
�`��"�-��W!8T��.���pQ����;_�, �~4{eu�/������T"�����0q��HD����u����q[��(���$��CF4wE��)�%�-.�LD���@>������&poP��s�����}0����t�
��q��NO�����F�
��7��iL���F[��]����	��P_s]��n����nU�����M7�[8��l5����B��]�Y��O"���9�$P����4��F�e��}Z}�B�UX4��)��Zz��D�{�N����M�O��������:G6]�� ��(�1������"IF� [}��Q	&��S�HX?{�w;+�[g�����T4�_�B.l[�S_���B��]C�u�jE"�RI[�z�������\�#D����ej^����B�eb:��)������x^QQr�*T��	�^�	Mm�	���i�	���G�i��S�ZJ���/h��\w	�li�VC)�����IRyI�<���h!%�KW�G�/K��B�����6][^;��7�y��K2���Q'R�dl?BL�g&Y��:~�C���@AT�(&T���W������H)�;�h���Y���������4�DN�a�o:�Vi����/�Rtg�����R�m���DRi�Q���w���CX��-��QD�q���l������x��������Y)`X��*���b��B��T��4%������M@���D�DX��jc�	��,h:F��Y���?D�g;4�+��s��^�o`�<��8?|'�x���g�^(�	��!�i��fr�4�V���b�����{qXh�@+���)�F�MthA*��OP����ZI�iU1�����y���0ToS@BY��l�����y#�iFWIk�����q����iU��V��@M�KM�+
����BB�mQ�%�7������u@&$�����P�}���M��H�o�R��mj�T�	�#�B�r���z�n��b
HE�#��a�#���GR�v�� Z2.�>����5�� �����r��|�Ny��� �$�_�[#��~[�U�c#��V�����U[�u�:3�o���6���4Tg���]��cD���
� ?FtE	�,8p��#�28��&E�/o���r%"����y�����T�+�;���8�h&��da����1�V���H@������������K��:l!�b�Q�	%�E���n�~z!y����g@.� U����F��%y�C�%zA��x=D�&@_}E%��ap�)["�.Dd��+@�pg�����-X���Sk��n�8�X[�&�����!.�>�������p�# ��L�V�W�[�O���=�����A���F��N�}^D�f��'Ti~W.{��~�!$��N�|�����i[9QE����F��O>G����K	C����E�
�A�<����H�M�vy�-D�������"�q�?
Q��n�@��e�������)o���e����B�QT�%#8�&J`G����4&�}^L��1�X��Xr+����4�d��f'��P��;�Uo/�n�����kt����~��$C`
N��3�w�<�8<�u�����:*PQ*�}t�<Dc%"��7g@Z�)D%X�(;&�{��e������w���N{�	�h��
��s*������y�D� l��t���u!�g�n��o���u��}/��4y������Y@	K��OVI�h:�I��*�����USm/7�/R��������.���n��tm������3/$�)�Y����f#�	�[,5�S�Qu���,���Bw��;~!-�i��_b�P�@���"����8x~^L��;*�d���X��+�S�]P�')��i��mA�"���ix�q��*��Ysi���]t=�������$����,��p�l� b�s���m4�U� ���\Hrc���������"7�r������os����\��\���
��&��� %P�2h�l��m��3qo�X���i�@�C�$#�Je���A��q0����d4/�@��'���R�F.���L7��2.��n�XH�
/&b.��&`c����!:��l�h7<o�?����b��y�9�|�R��w&_1n�0��j����B��V���C�������/rx��������4����A�R���5���5��AC�#�C/fB����F��1fPp�i�`$�;iV8��M�F"��V������`���$r���Z�KL��}���oE�)�/��e����1�V^�
j]�>[l+��0f(38�����'������(��!�F
,�n6��!�IFU\j"U�wv�j!I��� ��� 3��+�/S�-}f���P��ZZ2:��H��f����6&[�����pY����3��eYg�7��zV�?��9��0��f�����|M�����8N@�]u�d����X3S��w\.����� ���8�Zy��_""����~��&���|���)	���qs��B�+�5���S3n�������3���dB�wse�$o�\U��r S��[�w���"({��=dw'9#u�[���<@���U�`�3�%�x(?q&��&����&�n��v!������}(���Me�_�����(��9j�B�-��%|j���MFx�j�0&�;�f	g����!xs[�k�1�o�pwm��n��E�'�WU8�*q>����t_���m�DN����5�����aA�������>��3���d��[.�
,�7~�d7���������{��}��];�<�����{i���F:0�C.�?���������G<�$��)O����r)h��I��7��H(;�e�x��G�3Q/\��yz(�9�H���Z�|'����I�����O�=���b�4B��:�dQK	�w���/j#.�D��z"�o���g��qN���M6�db#*�K��/��������%N(��8(w���T������j��9x	m�	\�2��_AU�h4z����`mzB��ZH��I������D4�L�28����8�e[�������G.E
���(j�y!F���������oH�|�PNt}?�6l���>����I5lZaR����ep�G�����c*��$��r{��#��*�#[���<'KM�M�%@;qr�I1�����b�+!�
6Hg��!R�~ ����%P�S�sq^�S���65
:�u��/�5�6�k����7�(p�Y��X����I�s��wo���������?}���t�u�Msd�!���N��e}��l&���aO�5���J���������L@6�We�;7�Y��]��-M���4>fH��/}
��BRA��|L�u���)]���.�1� nKV�L�<�a6%4�2-jO6�J=��nAtn.�
�'��31:{��L+�N$u3��^�O4��kTYQ�����
-��`��[��'>'K�"�t�f�\��)����[�2K��q�[���H����k���-)AM=��b��^�
�,������Y,�%]�������0��\}�&�������|�`��f����5�����F�=��M�d��tE�Y=�k�7ec5%R��j�&+������j����@	������'�����t���:eYr��QB>p���/N=P�����W@����6�D�����i��K�]��M+H6������l�$�����Qq��Kq�KYn|��*A�X10�������,),Re�zpsTF<Q}!��:A.���%�R�J��H�x1Dr��Q��H������)��R��(�c���3a��b���i������)��g�����#�W����8Gm��o|�&��'�b�dr��G���NJ���H����	�Yd
�t�����B"�zV���i��EK?�Kb$D��- ����6������Ll��J��PG�������>������s�w����� G��L
3�Q�
^FZ���<���^��m�����Bl6cd�q�����PGu��Q�(��;�V��X������_�4�P.>��}�L8�Q�>��
��y��/j�>��w�I�8��f�*v���#���AR�<�q5��������xq-������)�m��tp�;lh�o�-j9�Yl���Md9Q������k2����$pC���w�Bq���|����g�d�`�zg��6���~��W�>�`g}�<�1�|��T4���JT~s�3��:�(���ED���L��}�*D���l��r!P���y7x�W����m8
����S�����8��t�h�c�L�����!��5Q��������}i�5�>�I���.2�H�>������������46�3#����,�w��5M��"D��_�v�~�!g ���,����n#��x�a,/�oY��Wh1��y�![&P��������+���]���|j��]j"�e�p�4f�L~^z^�8���A���p�g���Bw���6�����H�g��-��<Hq$a��w��<��x3���|�J
 '6���wU:`t'Ym9#6.��n�!E�e���
������l�����~�������E���v4�u�n��$kR��]�Y������h��$��^�P�#�����f������W�M!�������cx_�G����)���0�,$F�In|��La,��B�58,
���Z�@��q�h���F��A��)�
G�E����j���q]�6�_S���+:�_������<M�pt�$��0�(��L�4 i�(R��\�3�V�T7���2�B�����Up&X��u����:�I��.c�@�� ,������� �g�}��	������Uc���$����#TpV-_���*���8�0&9��,;�N�<�2oZ�E$����q2#��B0��bA������lzCe�\ �u�&qNeB���c���l~B���|k��9
������/��YLx&�����8����p6#�:uA���I�/���9�.�"-���(������
�]������m�B����pC�A'[��JS��D�_����|����*���'�W�	g/�T�W�Z�3f.����7���y����E\5;��MPh��#Al�B�����M�>[Q�����U�j����f)�xXFp{N[����$��k�!q^���� DfuN�S"��
q�2S�}��'�L����T�>-g�������dFK�UL�����!��uL�U��C�����UI>WU�l��tb�y���v�e��^v^���z�����v����Vv\���*���K��*%��e��&�UM��W)�9{�R�������5J����F)^�T.�nb\�������9���~}�F;�����w�8��������O�����?��G�����v��E1?v�_���������'�|�����.�(�����^Y�~���������_�����_������'�1?�WK;��7���B	I��F��s0$Dwn
�3��q���2�g��L] �dU�k�(=�����������Y	J��g�������D�)�e��w#��]2���}�Q;6����y���X�E������v�����HgWr�������82XB�'����D����}��@T>�%��#7����J��(�;7��S~&":��"���-�BN���Y�:�9��<�y��/3S���N{����R��&@O.r=�jnU�MR�[$��=��j�7�LQi�E_�J���Dd�"�����J�E�����~�nKaH_�{%%�����cA�<y���fG'-����Fj��id�8m{e�%;�$�d�`�����mJ���3.�uA�_�'�����&Y3����M	��j�6T��5��?��[�$��n~�?���z�O}��;�L�����n���� )Q	�n���}qh%�YK�|��`2��v����)������Q	���*�o}%����	�h�/��D�n����y�R.Z�T�Y����3��*��M_h�De���m�}�]�a�u-I�c����X7>*�
�����F�P����3X����bf����������a�@��ic/� e�\�����P����'����L��q#P�,]��$E+jv����v���p���bZ-8�e r��d��;+��<�YN��NR�����W���xZ���q5�-��dT��W�u�hG��|B���1c�b�^��i2Z�206�*�2�}�d��a��j�*������$��|S���m�v/���
���c�)N/�.;L��i�2�q�,:TWe�)�A_~!"�o4�n�`S���v<9��I������T�9�Z���m���J",��������o)e���-��Mv}�A�����R�Vl�Z6�������#q����l���*���������u���}����XI�k���_HQ���nx4	�:���$b�GyX���w1����Us�2���t����f����H%�"��+�zc����I_������{Fh��vGh!#��V$`�1����#�	�y�e����'����t��&Y�����������������P��Q��Nw)	9��8�JID��y���m�A1hJ�c�����4&��V��������_�x�P���y�~1�H�q�N�V$��`;Y����DQ�;��� ���0$�)��k�����{�h�k0��=l<���*�|�[;�}}�����\��������ytE��G_����o���� Tx�+j�)�^�qQ�z���q�G�2�}�������b
sI��o1c��D�s�K�X������I�����e1H�$�uY��{�h�&��<*G
�_�H�C�"��]n�a��XH��=b������r����M9.�=�)d��!���*�6cco����z��h*��'+X�{���G�Ps�������,�7I��V�		�,����jq`�V+��L��1;���q���3�g�s{��XQc���WX�Y�6��������//������#��l���(#��9�mcy���I6�3���+�;fF&���9��QP��!S�=�.�������kE`����!s��1qS�I�-�O�gB��]�x���m�`*Z(	� >y�h���BT���������������	����;�Hh-�jI����!��� �,�[��@�����n��f�&b�s"E�r�)Ck����h&"�{�e*/�I��T��& s	��b���o'���8�L
t��\�BT�'8U��wQ����z-8�P23�x!!{uw*�u��s�����K�,����.�e;�)����*-Ddw.���T��)�I�$ �Gnw8���4e������(�.�X����IVM��96�J�H���M-��(�I3;�G�xX��j���<{I���T ���c�T�s����D���7P�3�d�H_������Z?8�q{���iA�1���m���?8������oE�����o|�cd--D�c�b\�nO]�E�����!?��V���L����-��%�/2�q�)p���,�j������;m��o��$����$������$v�P�{�����[�F�����v�v6�w�-����3��Y�O��<C�;!��g�7r��=�l�����5�����yL�g��u��>�|�����n��v����uy�	���O����H�������n7���{�d����,�`�7�l������$;��xaC7{J�j����I�XAL�f"�������l�k��3Yv�;�������}M�7,�$[�q&���i�^e����zzT�6����xVRT[�����:x���=�hl�O��Q��{.�a����LP:Z����>��������Y�m>G��4���F�U""�J)�L�q�L����|��� �%�~!�{
 ���`"&���@
s���w����>g&I��f��@���j�h��WOpHT������N��m	<o$uf�eX�q� ,M�LD�Y9�p�#���u��IQC�n�����������\��=��@&�
�{��*�Y����N@3��9:�G�����x~�~��$�`�!6� {���@i��Mr[J�[����,����4��4m�������e%"�t��ep�sk&H	�oWSezX+J@]����buw�f"���i�����-��K��s.�X��X��B��h�5p��"����$����9M�m�C9�T�5v�
4�`p����������[�L��N�)o��s������u&*6�f��������4��1/]���T����`D�<�����/5�3��	i7>�*�!\��l����X=�l�$�*Cs��\ 8K/���,����[�(��JI2��f���d$����NL=��K�xL�D�3u_|Q���a�dEh1/�����Y��;>g{�A!��w��c��J�ZNV�XE�o=��YH��������6/��%=�Ax��a���&���W@��I,�x��������lv���kv����� �{r�:���R��ZBYC�.aUa���������b�'����
�~�&�hCO,h�6��'�q��_�`��O��eE���O4b�a��y���)8����	�	ML����n�	d�wm5f0�tMKJ2�hp%E����(��m1t�p���#�S`aXR�,���\1� ���&��K,�����ED� ��	t�/��n��'y?B�^��Q�~����:�c~T��?_/���6K�y3Cy3�LLOO_dc�=�kk����'v*�	����k�.�iC������QQ�6�q��JD>/�q�+�_(�������h	�����)U��Y������&�y���e"_���Nm;G���x+��0P	���ol���U��g�B=8�+��m"�����X��B���TmXx^L�)v�\����������_�`��x!�&�����5��[Xw.���3��+b����j���N�������ZM� ���M�r!{g������C�����h����\7>U����
���T��Gz��o��)�ae�E��*�;��w1�>jk���Zm&J�������&E�%�.�G�����i���O?�)C=�������H@^��yNnVOy!6*��B"���|�J0%d�Xmb��������	59���R/4��oyYq�_OHKl��x�b���������S=���O�D�]��T6��E���_|k�1��6�F*��"��a�y��I�{	�,���+<[<7��j�;	����q��+R`u�}V��A����]=���b��ov[VD��k��=�
I����������[|�g���H�1�:���r��<U=����^G�����D��o��1���������������'�46C�B�^c�s�-rK}�����/��1���
Z��@m�e\v#����5-m�J�~�����d����l��
��9B��-�;Uo��������Mn11�:5i��(�+l��pH�)�/��7�����y��Z�+��{������������F|�����������������������,��$7�c�������X��M����i��[��}��To�?z��r��;�e_�L�����T���2��43���N6n�a\��iQE�/v�����$�Md�m$^���y1�C�y-��h�}�LP��Z�]��Ly�}�L��:@d+>H��V6i�*#����������y���|	B:&��7J�D���v���6"x!�?��d��p��:7@�6�Dd��
Y���o�|H"E�&L����S�����4IWgK��������7��B�y:�BJ��PE���6����PX�-*�Hd�+����HA�@�#��
��������7!|����cJ��A7nfy��t�,&�n!��
,^�����L���/hb�������n*�����������������M�+w�L"����������(�;�������+�H�:���������T�.Sf����k�~h��j��>�7�K�|�J�5y`�i%�l�2�J_����Y��@YI��S=�	hKZ�$KT�e@���`U��6�g��]���
��(?_eE"#��O`��;A@��P	6�t��D*��zh�	`2����:�:���;��Ir4'v��u�r�B�x��+e�t$OY�u���I@{����~���y�b��v���;���c��3
�e��+�X&W�q���,��x�.7f@Z@u�BK��L�{]	�.�b5����#*�M�����6��$:�����aA���j��\:�Jup����b���T-\�V����&������W�cGA<F�#��k�1gj�~%n����2���	�xa�'�&���%7S1��#BOV���4��&�wH�{%�-nSf<���kch�����h����0���
oYf�����IG���O}�h�<3(u/�W�f ���8�s
��9�t������`1�;s�6A������l7KXM���f��h#��[z�:WJ*Qkr3f�%v/�@�������vb(��XR�v���
l��"(���?�������;�����)F�[�m��������x�����a��CN���W��u�iZ|"uY�e�/�@� �G..�<�R��6��������i�[z��+3�6�F�4��-/�]����K�l_g%���V�}Bf���2���cL��^D�����-���Q�����G;�m�����lX�?=s�y�v��;#�Q���BY��)]�x�H�M����m�k����<�l\TCT�%.�&����I�BE����%�����R}b�~Idc����e�E�{,�Eq���( @�W�S}o��&�7��_ �i��*R�p�OK�x�j����/o���t'�8o��^H���������R&��'�q��Jx]�h`�G#��O�u�un:`��5xn�*Gy:�e!x�����{�������H����@��P��f?^�$_6v��A�]��J�mL�N�r���8o�h������������V�D�����`|��N���L�I�E�]���4�K�&&R� ��:�&��k�h��b���j�gC�!63�#�#�4���a��	����d�N��p��7�."��B�,_�pMh��K����O!.��@s���wax��w�A���6�W2	%8u�$ef�62�c~����N��*���^���917��"Z�).�a��[��	�1�����Fylp����{�*��q���Z����NX�����m&�H�0���Q	��`�����J��������- ���B����^���~�W��M@U����GSMH�?l���
��op�~�F�1�cOO!)�-����O�~d����g-	���PJ��[�NW��0|�c������&���^K2�Q[O�<�t�fu�K2*��!�}�k�c���y���l�6N%����{h�246|,�Y
��'��Czr��}�o&��yc�z�<59�����t2aO�P-��.�3%*��4���sTl��(���O�\����*��$H�%9[�dk�r��6�kv��JDev����}7����	)0#��U���<�:Lo�����rN}�����F���)�4#7�T	z��$c�������5���WK���)�X��)����E�L���J"�jr�/u�>��q�!��N^8�e�d�����K�E�d6����LD�����;���M7��](+�e��e"���Hv�3�
���u�1U*�h$��|����h��z����6MA����D��-T�32M��G5r}������{xp
K��k�W& �Z����G\��:���{�Z�j�_�[E�w�gd�����=}�Q��U`����q�MQZ��R`J}�_:��mc�@�a�p�.���wEy:�7����r�lVbB1Up�����c�n�o��c�����(
�"l��80��$��@]�W�r(������(���S-��7�$���j����P	t�H�wR;M�����0�����M/$�����9
��{����n�s�o_t� �"�PXs�b�y�������x��S�\q�umNK�����j ����/����a���F5A~^�������q&�@i��{_��"��
6G�g�#�m2��Z���!I�6��Z��Mo�/5��0��j���(|K���`3�1!����|C�v���$�>b�0��Of����Ybe��-TD����V����!�D��|��XIHc[rU2���&�]vl����9��o ��DI������_~��8���z�:Q��`cw=:,�*��C��Y�;*�����J�C���P��I�F����U8	�},��E`���}��������|�s�::l^I&��
2��7[�5?+����������[-�P9dYi�����dm�G�������~p)L8��uE{�����+��?d������G{���".������������Ie=����>��F����"#���iZ�2C�T��0<U�~��|�40�����#�U}cK#U���,�xsTUMp��M��O{��VRUlM�"J@��C>8xzqT�H��$��L {M�w
�
����R���X�#1:�������v��n�[Ob�E��+>�7��%��\yq����[B�c������I��W�R��|�+���3��5D�Y:	��v�3i��I����H��
z�PX��%R�|8���"n�m�w����5�H��T3-���{��BP�;�VT�Yp$�=��Fn�j���Dn�\Q]�=���P�+�/�~#)B�J��,���p����������s��X��������Jh�i�3�����/�
�/
@6M��X��yOk���vy�$����r��Y��q�0��>M���� �1��q���!N.�U&�y��"�=�����8@��FR�>�lq"<��� {`��S���(�j�"����~�l^HS�bu�L����Y��������'��glfV�YBkS��}_�Q�YCZ�U��1����A�m��A�H\
�v�y.����)��X�K�;��@�$Q�5(�MO*���*��f9��L�����3��"$��|�
�s����|����i>���??�����/���|}����������u7�nnH�����F����q��x�������_�0�pT����CSl[V�s�����A�����X;����C�%�C9������gS�^�"`�n]:��WD2�i�;�
3Y�T�>����(���p�$	������,�Inx�[��R�By���E����}*���K���>��H���$T~^Ds�FY�v��F�@Z���i��(L���l��M�I	���KgM��^c��0W@��d���mSF+��)�vl��%���[�<q~pyK�-�Su�
d�!�`�5��v$H��A>V��!���?3>�*���,�g�������d��)W����=��h.����;j��V,*?/"izO�2
d
�1�������gii,+����������H��.Q^-#u�B�����>"�XVOd�\Tx���������a�`�{� �k������`�r^��e�(!X> �|s�Bs�wU�R�{I�4{��3�7�5���Bf���
�|���3XJ&��]Du�e�D��%�0�!���h:�(�{O�ox���C����}D��H������m�N�c6/����h�2��n�T�()��aR���PD5�V>ox��&���`�2���f��<���GIq�w�u4�g���\�W�'<�W&SV v���C���%��V���\f�X,��-DS�R.��7��L�k�,��
��@��,��B�|��=��L�h�F���D������/�)l���3�!v��o!.�^��� H�����35��h3��������h3�2�����_����>����n	1�3Z�L$)e���%�n	3qY-!v
����!� �/��a�h
�b��J�_��� }m��~�'(P���>��Gm��Dj(A�x2���B$����=�*D �������������B�'��l'�L$M�\��N��>*�l��guSH�,a�!��wa�i��������]�0�����J�D;��E�>v$X������}���xV"�������H�.D��5�_L�L`�yL*�4��V��&���nL����F}�Y)��$%��[�t0�2eU'�=�?���~!H��NcE^+c��HT�6��v���WEF���w0������Err�pv��?�a����}���x4�r	��"�a�w���J$]���S ����O2�����]��Rn�L%y�Z~�c������,2��=T|V �%F4�og�a�B������FtTP\e��:�"��*�3�j���:k���	��������>Q�;\17���9�
��)�t���+A"%�scA��F�l�$�uF��
����?���@����l�}W��{��@P��(��2���������kn���������)����8�$\Ve��+ "##�/����y8V���
�n��[��jdg������|���������IN��}:�1}fDr���I�"�L;���}��R}��|���1���b��l������"@2��C�TE�J�v�W7��U�2i|�L�U�%�,{�.rq��k7�tw��LY{�*K�?�3��4�h
9Z=[���|h����V�|l�������a�(�i�9�M�E�9l�����"��^"C["�~.���Nw�lT|�g!P�^�	@�*��$���7�Zq<���zW�YK.:4X6�I&S�h1]������e��LR�[�w�^rr�U��VM�M Wd"I��=�7^�vE@1r�d;�[��5�r��*4M�6,H�lm2��j��pMJ�{�V��\�('�t��J�o��%�
{j��-ydB���Z��0�S�KRQ!d�|'r����"��7�&2j��iop�`e4�'���5��S50�E��|����$���bI��'���L�&��� ���Y�d�J��\;���?����S"QM��3M�a���6I'�{Q��Z�d���G�2��I�!?9Lq�P�p��5�8���x2w oG��*HR������Q���I6i��py!�y���@
�"�qv�y6������j���F��DY�y�D��!5*��=�����1�1��O�@������C��&8�Z�����<"M�0L~^D-P.m����(R��%������t����%1�U�1c:���%K����O�ihI��^�"KM�����J.��jT�4Fw��(
��P��M���C�2L�����\���J����$�����Z����`J\�t�M�'���7nk�0�C�	��TZ�{hVkL�z�����z%��-���"��j���>-��I�1'6GY@5��yV��&���$K��S���)<���Wp�:�@?��%��Y<�v�B ��GU���8H����
���s��a�J�w���d��f���i���\/�uR�9�Sb��Y<n{����3�\������/M�2e��q��]��IK�	,4�2CY�k�\6EW!i��j��s�}�@.L��V�������#C8�������T�dPDF7|��r[x��`�:r�?@/���H���*���O��@�T����.V���>|/r�*�

��xY@�����E��<~�}�o���Q��/b���'�q��������e��*.j��]W")}��+Q	���K1AK�Y�T�����~z����L�&oj�"q�NK�t�� ���f>:N�=/2���n^�^fl�g2�3O;=���[�|����A?�e�C���v����x���5hjs�M�P3����U�LD��#�����L�1�����-�V�����:
XK��d���M����B�:jz�J�y�K��B�i���=���euG�
��![\���`I�3�CS�!I'���n:��(�d���@����"Bi2P���>`�����U��!Ze�+�@3�DP ��O/-�z�L�,������I�������u����<td�i�"��=|���-��������7�������0KqSD?_n��kf2��3J#�����se���2����l���sP`�j���`�8("����1/���B�Z��PfEC�vQ��4vY
�`e`w{1%S����D���c����@{��3��z���<���:q\TY�-s�?Zu�������~r�L�����.����m9a[N8���������0{���	��'@�'��O�m9�>�	"��+�p^�	��'�{9�����/'��	�zB�%	9������'���C����=�R!B��|�\�T���#�/D9����]�������
@���^����\���!��s��pX�pxn��'����hcy���=�q���z������r<a�(�'�O�[>A�xB~	�����E]����1����F���@������5��fK����]����Nb8�'�0�A<[�`K1��=���������YS���<s�\N���@���3����u��<�Z���3�I�m���mBn��(�V �a�Bn��,�v �������gX��[�p��:��2��!���m)So�oRs���uH����������xK��
Dj���TQU�~,��8*v�?E��������=�������(z�7E�������=����sO��o����9����&8��k���x&<��c����%<��[���W�f]%�sh��'���L�KbGC���.�;$v4������`���������#=�X�*9����N���On��GpD�xp<�������(?]��V�vKKy�2D�7#�2�����e����s�/6�&s4��l��,W>9������xYs4K�����Lf~�zG��%4���`N����*x!�&�w$�;����H6�r�/������J����."�6nY�c�,�Im#]�u�����Xv�>�b��y(�0GT�!�5��F4�xR�^�8�?��?���O;���T�%�Cx`"��D�2�{�ty"����H�5F��M}�6����s0�����&����u�,�DM 23o�w�3��GII�HnS�������M ����vy��<���z�n�7I�!w�&>%� ��]����mA���K����"��	Q�I�2�ag]3��M����������,����W ]s�N�����������:�&�gO��
N�x!��
���~;��WY�QFS7eoY��Q+_'�n��%FBuYP����h�f������X���gs��]9���&8X�a�&���&���D��&�H��\n�2�h�
�p��J����jJE	�vj��Z��D������1�����ehE�D�eY�4����h��/�������������&/L#���$��6����5
�gL������:x�H��n2j�l�v]�y+��dg�1��8��@�0�S�}X��D�!�kry�������H��?�Q�u�7�Ez�C��0��sP�����L���D"���>VW����'�������d�Oy��6�����4!���vW��"������h������t�X,�����d�������\0f;=�j.H���N NEsQ����|YO�#����4�����(Wz������v���bu�����X�u+N�
�I�#�@���NC *���m���i��0�����	�XId�d��gV��Ee5�[w��!��:P%��y@�;��0b
.��TS�y��|8��&*��IX>�$�vB��d�
|�nD����F-�LK�q��k�������_(�&��&@5N:\�4��p�s���f_$*���w�TgO�}!kQ��;`\�b'�(���cSs�����fR[�����wnFK���T�Z2`����^(6�#������w.B��p�����=��!n�y���>ok��O���p��D��d�v$�\{�B������h6n��(������;W��D�X����8�|�{�A��y�?Qq�9z�
���������&P�ZR����Y�~#�M_dY~�0�$E�@��6����N�I��ZU�����/,�>e��,��+�^���q�����(��b{�){73���G:����Yx�&v����hcJ�X&�<�%�D[Ay�����8�}%���zGs��������Zw&^	b�\ykD%O�"��w�T���*��@Y���p����@}�@�Q�F�eV���-�zI$������%��Q���sw�;������~v�*�Ff	���{!%��^�5���9�+�O��c�}��t�L�2���,�K�;y�>�|5�����u��T�S�'���.���k0�"I1$~�!b�u�*=���{����\#�1���D����4����`����*��g���K�
Rx�ET��pvg�Ew����D�����
��){���)5V"����@��I"m���zo�q����&?+Qe�����:Gt� �\
������f�9d(>+��
Y�7�����:R��=��%n%���=ao.��c{�M�,-��]����S^H���I�i>�������e���X���i�%�M
L����U���]�T������:b�w��'�bA��;)��5������I1O�[4��e�[�;�v��
V��h����"���#�(J<L��C�����(���n������,�Tq�<De�u?@&���ET�p�{�ZW��H�����>��������x�p���Q�H�V�O�!_!��d�����C�jco��k]!���\��'p������K�`d���Sn1v�����-�/3�����0��C�r�
����LYZ� �B�	���7s���)"]��^tV�"`�e�K�����b�������|�y(x��:��p�x�:�|�����	y\���w�z� v�B�A�2�gY��S�Q]�mlYF�Q����W�F6vK� ��S���A�T������S.3nl!|�6�o�����~sQ8D�$�E�(�j��2/'���q{��m�F^�	D���vK���(z��O�8�9|���I"5:�y���+*B8Y�[��FN��^h0�`�<8�M2�9�2e��X�*�"K2R`�����p��
b���2�f�B.^HO<G����G�D���`f�g�D��PH���F�`��Ud
$���y�z7v><����M��*�^��7��77\I��)�$�la�����������	�g�.�#*��4F
�����������[G�H��������Ad�@[�GG����&����e
�-$�����R
��~��<�M���80�>� ���������<o4���0�$��H>N���$��ZV4e�_h����rcY/HT�s����(�`Q��_QPR�6sQb�_�$���C�e�,���Z�����#�y|����I_Q4���2Z��"�����Fc��d�_H�^�a�H�U�e!Y�u�i�E�f��q-uw�>��0�/Tdm�Yv���-����(�8���gEX0��n4����)�E�.��-D6���I���=��������*���}���
����:������2W�l����/D��i57�����~V��-@�%��!X��Fn�m;���������U�d������8�L-��W������e��m����=�m/"����	0OL�(��+��[���o��L}�d��������%�AG�>���U���g�����0����U_��c�e3�����_Hv�QOJw�3�d�/����}so��mc$D�M��}
�7�m*��������4nGn�#_�$�{��Za��������z2n�f.����)�����>���?|��5/5b����$�X�|��k4��8�D&�L��|.6J����B`��$������S/46M�u��#G(o���En�����Q�$N����/4<�X6���p��Wa{1{]>�"����*r����o(��9u����qL�����U�NV��uuK���Ai:�kS���w�
:2x����B!(`�=��E�XXP��;o\j�4��M ��iv^a�|ST���~�=��f{1�W����r�?�K:��v����3��B�����)���}����"�O��9�Wgl��8r%��-�{�	���(���]�.��3L��:Z:�bD��ig��h>g�<�gr����2CW��E$���b�;n��r+/&e����[���|!T��u�vT������:i���>s�F��/:���~�o����{W����kv�ZT���+�����O"��o�Z�Q����h)(j/C�qG�B������sa�����y^[����qG����qK�x��=	���6%��-���U�R��h�d�o4$��0�a�9����&�����VY�����0G@'�{|����t���P
��W2n��ON��B�[����[c�d'�����Mu�8�}�2��]�����N&��Kh������"�#������$��L;�b@T�H;q����@dz������R�����p�wseE2w��o����,���}���"�������9���B�����v�M�[�s��a�O����$�Ye'�q��,D�����:+�6<��9��>�|��G�_���F�^(����n,�����|%+��0��F��������[�f�����9�w}��MO��w}c���w+�`0���]�5��[Q���{2�e$�v�����doEeS!\u�!7�I`����M����l��`�/Z9�[Sp��^�G�]Q����1p�1�L����^�Z��g]�gx�P`�����gS�}�H���^�4h`�M`��c��E�2�2"x~O
�-d>�k�� x���Hj���8+��[������
�;X�U���W�;l���0En�P
�Q��)3$��k0q�V�A�����[��4��X���Tp�~�o*����S��w�����[���&<38�o&������ri,v����X����>oH�{&���t���
"�(�����m������	@/�|�k��c,���f�56>��������t��_��Xj�#
O�5��]���Hvm��	}1j��K�Z���]��R�B������2�3��o����	��������XX.�7V�����.//~���S��	@��7�6��]�����s���^��r�f6:�+�S1���}���y�X"
N��������ol1Iv�_(�R�##��B����&�Il�
��+@�������/���;��%���dqN�m�����0���`3�����4����VjS���I�~;��5��UC�B�W�
-���s3GOe������T4�U������+�D��ro,����2C.�P]���yZ��J<�K���������� � ��i����`7�D�T�����s_:T�u}�`�M`og;��.V�K����`@E�!_�5T]�|�bm�F�]����h,^Y>�gP}4qee! cpB4X�N��\[����{�MA��o|����;��l��S�d���������0T����)D�B�Coti�=,t>�����Ozw�	�evw3:�N�?A�	<�eZ�X�F��yd���COx�|
���~`���U?���AV�q��Y}
��c�X7C�R�b_�|x~`h���
�t��f%�M3�k�]��_�����e��1��H7���N��������s5w����4�(��8T�m����$��X�
��Vo�h[�>8t�����
��Yt�D��X���;��P2���1s	O�|N����H���$�y���@V�7��������|i*�� 	�����C�����������BgB�N��=��4P��W�O���3�`�����O����3}�����Ge�&n�4"/��D2�M�f���T=�$E +�^(������b�&�2���]�<�J:��Q��|���i��	��h4Q
b��(~���:w����d�����2���+�P�S�z��������Hw�6��yu�."��K�n0v�G#v���u3��S��3���������7�:��P"j`��5��6�
_D�m��M�{&������Nbh��&�C��S�����?L;{��3�bB
c�7�A���^��;��"j2��{��b/�YY��z�����{������S�%���#��A�,����g���6p�f�l42u�D�
��
�dcn:�jod�l�2* �h���H,�^�vz\�0A>Y��e	0��w�gUs7G���}���0Z:��b%!n�3	�<�������v2N�B�s�� #���>�$a�8!�g�����s�@5��/�T�������6jpX	e�~`������w	Dd�
�4�[�b�x�
AF���"d}���iC��j�����	����Y?�.����7���T�)[�����"�p��kHvS�� ��������p>��f(������~���7R��m����E��f�5?��?���P���U�F'��f
�����6���������P8Y�?fe���BL���4���hV��E��yS��"��
A�������h=+vZQ����f�d�;�'���E]��b94���|��9u�dL8+�5(+�%89��.�y��fA�{�b�EI4��B��	E1�KJ�<?@yU7;�-n�a���X�R+�u���]><��/�d�}��Er��7l�6��������E�����f ^�*(���KL���eR�k0�O�j�H03��s^�#+�������Xy�7���������(I�/���/�i�N���L7S��b	�(<����ku�v�3!,���D���*4�����^0���*
�G���2�������e+��\�*?�x]'K��7��a*~H�Z""c����@�^��N�����.]�t��o�36:MR��o��9�+�i����'�����r����9�']���o#`g���:���_���}������^>oF��/]���w����Z����7�	���E::0�)��Y��C��"�4e�E���h�{����	*��]�h�Z�YZI>��2grexb�a�����
AX{�p�l�R:xk���5��7���WE����V+^��;+��q�d3����M�(���": �>u6���mY��(���
*���e��	aa:7��KG~^L�`�I��bv6��{�������Om�66=,��X�����~'���u_W�����{lp*���
F����Y��N�#=����e����������5~e�y	��/��U~��-j�FS�_!�nm|G��d�Bz�6)<��R-b�g2]7�y�"�y���dNS��j�g���"f��{]�Pew������8$��Z�'��w�8�<$��<����MO�>��)����Wc��_:������Y�ts�h�
`�����&��>�����*cA��!y�,�x�u��Su����w\6��)!���e�{7���pW��"c�{������S2A��,,�����M�����f~��Fg.����������qAAV}�#����~�����F�;<,h�$_�S��Q�6'ZP	n�,��z'�����U��l�'������
��������ut�1�?zj��1����N8
}����w����<�����E��4tu�\�iX�a,����U����*:<hz�o��;DU{;.��IA���L���,���H����/V���b~��l<te���N1���������q�����@�{o��0~��a������Lvv��c~vv"����B����]��,�_�z���~(y~`��������Y���sr�L%.]�\��2��ro����/�Q6v��E�7�11�_%���\��"����@h�5��7Nuj:���&�C�8�p�5�ym�5N�1���N��e���N���wL���C��L�9���EQ�Yn�#���vu�:�.	����/�x���7 ��cW�f`AE'S#��db?��������V����|dR��Ul���3��wf�'���U�;���j��=%U/���fw%K���J��p&�)��#}(-���L��+5��%l:	T�z��C-P�=�xI������Q�u+��fEkOMb�#�O$����B�aa��l^>���7����9����R����V�lT
`�6*��$�dM�4m��.�:�%vFtl0vb���\�����������O�G���M����.tC&���!
��L<���g0o�����L�*r�����=������|�EI:�c6��Y�>#�n0���yRwO4��;�S�������d��a����*:��H:�F�F���Si���v�Om,�j6�rAp�7��
�&�<������	�*�Mw[��*��^��������kb�T����y7�>?o������0gXF�O����"i�����,!�	�!���D�yQV�nu��q�7�l6�'#����:���n=��Er�8��h�F<?0��nZ���������(x���D�%z��$vA�&� ��42�����PR�8t��d����Er����/+d���x:��u]��[W�25y�8��y�F�� �����	a�2"����3+������!M���<�_��j#Q�d���)+�H���c�v��<���Iy�M{������<�%��fse-�R����(��zMG�{be����������J� ���<+�r4���2!������\���j�&���E�-f�T�i���k��<�,�����</������O�u��C�b���Lse���r���$�����]nZw�2�t��Y��8�u�2��c]�.S7���H�2�ZL�2/�|G�z���AjK���N�s"&v�S����S�	$����S7�J���
�yA�a>w���a>ww�L	/3x�wB��`���a>zf_�|��	�l}5��f�$�+��0��T4�MX�a���f���!fa�0�if�5�e4����l�O� ���d�Pn���e���a��H5����v�2�� �-��9���g$�0��q���6��wG�|�t��2'�Z��d��U~U��rC7p�-uI���t��aP�u�I����y���S�K�z(��N<�_�:�p�{E��S2������FdsZ��~z�w"���n�s(�hO����X�/��7�+@z�
�Yw/��-���P8���u`qWE
;|�����T�^��:z����7:67�<E�PAn�I���7�.^PR���fg�^�`��D�}^��x4����f�f��
���Q�[�d������X=o��	�����+�f�������D������(7Uhs�����mR��*�s��YQT��c�YCB_n"IaXVd]�.�����H;q�:�+m���@��L��0$�����X�RB��K���{-��$/PS�M�u�fAX��G�4bk�\��Xk��fK�2��SC���
������&-C��+FR���d�x��-60��)�^�������6�Y;i��=t���xS �=�������{��jGPYP��+M���33�g��oVS�+$������~�n�CT����s��&ou��L�C��������<CNs2��Y�C�v�z.���P�9~���>��:2�f����&�k���CwX�M�_��:��Y�7���^#������J�I ���h����d�y��Y��A�E3S�����S�c���v6�H#~�@u"�h��3;��6�V�������}��@��7�BR>��W�c�$�/���E�S�|��h)A���v�P
����S�n�5��y����bD��/w���r�AP>e?�:�)����;��m6#>)�F���R��Ett�z�?���5���PQ�C{k?���7+�@P�lXf
(y���0�>v�B��D[ ��Q5.4�����h	�7*��O�A��:�adTgX���&��6��P<�V}��5����w[��~Z=��8���&���G��nq�/rl&u�YnG�_Z��	�e��	����������w����X���#�����a!�(�>���
��"��/`�u�+	���2������d�}��<l�y#=p��Z�U����2��
;��.)�x'ob�B����o�{�An]��g��X*�D�U���V4 ���]Y��������6��������LK3���j�!Q$)j�<�c,���eE�GTT��/�8GV��j�k��pV�l�5���X��������~��GMD5uA��]���|����x?�g�$]EqD�����ti��
�=L"�:5+H��%����h��55��On�VM�x�86Q�0�������=��~��`�i:������a*4��6P&Vb��#15��Q�[�,.]�1��C=N��K�{j�ry�(���#H�����f��JS!b����F�J%>���I���	�H`������>�t�c�N�d~����\�.7�w����*G�`r�v$)�q��g U��K�6���i'u6����N2����d�;v�[cE�-��T;��p��>������G���y��PQV9j����r����L����@+�����:Re�YZ&RV9J4e���0����
I��Qodk�I��10DR9,4E{�8��GAW���$�n2OO�eG������4�g����"�3��Jg@Ng���9�1�NA~�x|��q%���v�����B��%�����+������q{~���az������v�����Z8�����v��o	*����T�
A�R�X��\���������s2n�8��Oe?����1�����U��Is^E������	����*��`���.}���������o_����Q��y����9���)�������^���������m���������������?����8���t���w9s�t�����@"C�d�h���|z�H�2MS�9D������.#�_��,<B�3vp���d2����`u�����%2}��8n8�l�7A����t7���u��M��E}8t������"�2��36"�f���|�O�����#�����������#������'����/2o��Bc��0\x�8�^����
�7��F�j��y��7Rp�O�����&����9eWsp��I��x���/��B[��
2���?�y�('�<�)�0���3={;XE��C�X@��A��U�WR���}���X����;����E��5Z����]|uI��'��X���?z�����������6+�' ���%Y�yW����a;�}+*�:��?�2]H��\���7��x��,�n���[��U��Z��%*��I�����b!��HFS��s��8���������n(�/�?�P�l��c9[�n8�+I��8>�E�}��0Ek�z~����G����e���?I(�����J`�$�W�z����?t���g>���c����h3>*�
���������
��v�����x1m��.z����m"M�/��	6��m0�cl�YQ�1f�X�6)�WM�����A������I%���h����0�����+
��#����U+��l�"M����"b�2{{���c�:����BM}��3����
���z��
��<l�96},�+�B�!�Gd��M����d�_(d�����1��Y��S��GY8�
�m�l�������.y����8uWY��������P���WN3����6�q�
�C���q�<5�m���H�HdL����tkET��LzS���"�h�[6���q��������>��sAd�I�j-��l�*B���VaA�wLBPV�������g�J,$��K5�$�"��t^@1-�<�ic�c=yPk^D�����*��c�h�N�N&��i/������"�+	_��\����vg��}s��C����	F�s�'�mX����	j�s�l}.�	�&�;��\�A���M��n�����U ��C�$��e=>��0T�y�YB\o8��P��68s��v`:�w�a�i!S�T�@0n;6d�Z�<IK�
7�C��i�Y��a���hnigdQ:(�K?�ymn�?���H�����K������Y���������
���.f�0E��&�P�t�v��E�d^��q�]�t����;��"��%�:�r�pE���3��z���~�E��2�}�i���������k�>"~����/�<��������&.I$0e��${�9��tY��u~������@�`a����PC��	,(!���n^4]��DmQ�"6�Rm����M9��h0Y�����^��}f3����&�HZg���[yh�{���G�j����i������,�$�C��&4�u��������izY�i�N�c����
���uy����t�mo#V4�����+��,y]PZKu^���g����R^KQ�|�����^�������u[�]"�W������>��n���j�.������|�{��f�kE� �O�U�����m�?������|��������4�;_[2QCI��:��CC�"�m���}�������h�+
>��GBk	�w>Ml�$��.��{���=
��`37��0V�L����)�Kx[O=Z��|���p/�	��P���c	����������C�hsh��`��%,d +_I�����(u�����Jd�/�e3^��J�����
�����\6h���D�l-
1]�@��B�5�M��#����*�
�Q@7�C���!�
�n���l�d�F���%yj��

orTjE��pQ-��
4i!�N�NW.���Zyy�#C����#���b�T�k��njk(�MP�3������uiE��46��PmZ�g4^/�AR��L|<����=����-hH����3��b�2w����7b�c��~���G������J�/n]JL��^���H�_���S`��Q��R�^���;"�h_���N����m�4������"Hl���6;��b�n�b�f?����`�^O���h>��Y3��#�4����ox���Y(mi�4�96��
�e]��L��G����'W�._u���Wu#l���% 
��n�����n����no�3�����d
����(OA[o�Yfg��	v�N�":��nz��JUwu�&�8��2e2�p����h�iR��,=����jJ�mJ�}
�7L�t�&��$���m=���t�IR<�]��@l�6<+)������	t��c�+���hl�OY�Q�z��S)��}�f���E�������d�-����>��z��I��*��B )�&��Q�>��,�e[%nA����M���I@�u�3��C7&������{�h���3��F�,9O���v�9����fOh�v�F���
a����G�V4�LG��GB���-d�6*'�^}�jw�����#�M���z�>��&�>�=���\U �
F���Z@���x����2���#]}���at���nzI "���O� [����":�� �����V�����\
�&-D*�a����W��d�:�&sL����8���J�{����������p��X��q�L��RX������T�[G4���d��&�r�k���n`��f@�;��D*�s����C9�T���k����~�f�q^����`:L��J/$�Xc0j"�<����&�m���V���|hO�m�5
�*��hl�T�xh��KB�|J�C��`Y5���z���4�c)�����-2�{ZN0	���C�g��}�������i��k%A��:��8�z����Hz���\dt�2�%����7��k�����������lx��a7��}���lk1���x��[���>�)��e��G�]��zs�g��H(<���)�����C��%P�
	�����C�?4��T�Ows�"���|+�]�Q���u��~����n��UX�������#m�G�a���7C�|tl��m:�cE������Z���?=5"�4��l�8������49H���	���7A`�o�X������������w��\��=�&�����l��>��f�w4��O�PG�����Q�
P�����|��)�~RT��>~T�_?i�T�����	�����]��x�3OHy�	����^6�Fu;�1n������k��&�����M�����������|��D�y�)�������+
�7M`���~V�Ge�T����W�p���&`=
d�x���"��ep6��|��7��,*�@!,��kt���[���5�O�����1,��@��1�R��Z�)6��M���2����W�Qb�S�k�r�q���FT,����J�����L�$t1tS���jV���
#3�������I9���%U���'���l
�63��~��S.\�������L�u���
2�5cWjE�D�����
���6,1WV���������S��Y�
�����M������D:����k��!�*h���*�����G�Q�5���7ft�}��X����	�>�l=�]a���-VH�Qg����P�M6~1>�����J��=�������Z��g;�C�g���mL�H�5��	1MF����QYX��"�8d�[?�"5DU�x?�[�"���B~��������j��>tW��N���"i�kp��E�H�-9l_7
�5�1��8�F���t���.H�.���R7b���3�xG�d��(U��br��	��v��s��L!V&��.��r���WBKb��T�����q��}����o����}����:cAY����^,��j�9l���L��U������G��/�U�M�����
Z��y`s�9:�E�VT����"�hD
�����SU��	�����s(�u�}<�������m�T��P��NCIo�O���S�Ee9IWu���������V�����lK��d0U�0�t��J�������z$|XQID��U�\������sK��);,n�NA������b�Cs����4����y���/&����������4^L��f_�6T?��\�q���O�@J8'�N���:~�V��5�/Y��"�sB59�"�24~e�;"�
�����i�c��Xe��
�@�-|<����i��/����~���[��n�)���k"4hD�o@C����1a�n����x�[v]��9L�WTM��(\���Au��g%E�$������'�=�� }|e���nY'7�������kfety�y)�
�)�q�+�s���V�ISf{|W�����47�8M �]�Z�����%����}t����P	�//4&A
���B���??IZ�J`�,���#H�H���$y;k���D���^�������g��G�]��F`<���������:�+/��	����|�R��]������������4��V(���)��A����r��<0�~V���_�����S��$����S2`M�$�3��2����`U������]���vA	@�o�p)?_eESF[����F�\�[Qq�NjG��Q��g=���&
�������%a����|�H��:���0%�	����;L�([�3;ld������	@Z�����v���y�D!ov���\3�J�Kf�D���U���&�$@�FQ1j:�&�����(���<�42����J�tQ���R<uE"Q�'!A_hv���[$��L���6
J�b�*~c���P�e�Gl�	�7�0�Z��w}�H������ %�9�V�Btco2���e`a%f��H'i_�=/��,����� �Z�JE�g>d�De��|��EWe�]����Y��(��b
���i�9����v�w��w:���\��x��]5(u/v��f?Oy4�������6��67Pj��QnL�{b��_/4���	U+�����48��U�I���d��&���N�{��T����
�3�XP�����
��"(�$���4Rv6�����P�y�{��*^A�t��5-����w�����MU����<�^��W����V��F���7����N|��b�3)RL�\��i�)#�=M����������O�F,4>./&MX���I��_'������ ��X�p�+m���>��bx�>�����:3Tj�g�P��l�6LA��3��,�]�������?�wy�(_��u%x�H����i%����*���`����,Xw�0RqV����_�b�%��	e�O��P���J ��P�~�o�H��)F���y7��V��{���
�|"k�fq�F��i�{X.al��.ob�~�N��
�V	��!	����_�D���WE��4�����F����v�\u�"������9��F��,/0 �9B|B~��� �a!�����40T��.����W��K���3��g1���O�F�r���	?���3x
��LBYY!�Y��'�s�`���N�Q�LH�����&f]q��M��JPu����2�7��W^;������h���G
��&�*���L�a��	���Ce�N�����7�."����Y���J(��~�Ow�,���%���@�UO���	�����9]����i��+A;�Y:���s��s�/'@�����~!x6�M���x���Hy�����1��(���`��>E;��QG�i��b���O��K�8��b�=Hh�*�����WV�L<���:�Q1������I���:�/@C�o����Lz��<�M�Rg�gy5p�ZP2�Kn�=B�*!h���4bC��tG�/"�h{�IYN��ft@��#i?Tl���y����5S�D��k�um�J,(��`���z�q�db�z:]��a~ID%��z�~����}�Y�Xz��;<���$}�]���8����	>��������&���
��dk�s}���fW��H�`��h��5]�����P��G����/H���d� ,���~&��9hA�?�������M���������u�a�U3l�,!j$�pU���U��m;��)-�inW����R\aD.�P"�A��Ay�:�0�],|�����"��-��t�v��C�P��Z�T)��9rX���G������rs�d��15�����'��+�24��P�@��8K'�j���R���HD�T����%f!�M��45�u�v�>�G;1/�df���{�H��B��
�I��Y����GQC����J,�������^W2e����k��%_�����]Gq�����#D�r���Ym���r���}�V�k�BE�o�x<EX��a�vE	H�VW�	P��hW�n.���K��\6���KT�C�wAq8Aodc�a���|���6ga8�������e�c�(P#t��8t &� ����/-�9}g���/@�����M���l,+nA	5�@��p�+^�v,�(*�VOi�YG������������������npF�]']����H���g�������H`�P2+9�=A�����W7���/$� �a���F1A~^�dN��o.��D!�������lE�`����Y�q�H���h�!��F����lA�6��bQ��*���"�-
pi��MmGB�e��z������66��W�}�`aP5,L���Ybas|>D���������A�D��|��XHH�[bQ2���e�I�;����_�X�s��5
�=�5�z�����Q�h�-,s����C}�Ln��V?�Y:��y�Yb��c.���'(�K���{��n�B��%�QK���������n\����9�,�H��:�q�]_Wv��~�z�~3N�7����	��E\���������Y����g�~P�5��;�g��E�:��M�6
&1�Me��S5����B��Y���M���`�;
������[mN���7GU�4w��d���������b��xQ�b�{W�NHq$S�;k^��G�A������nl�^~`���#���id�8��}�I���6`\n���q��l����[B�c�����e�-@��r?�Z=���3�f:D�Y:Ib?~��3i������d0�&7
�(CA(N>���{��]d�[��n��k�����F%
Z�eU�tG��J�N�#Q����7r�7������'E�A�x���=����lV��FR�Z�:{Yxu�
�����
�+V�By�`Y�y#4��������<�g4��&:/(4������S!�\��B��]=;��k�J���,g����g����D��Z	�#�\ ��!���1���l�<o�����6���Yd���,��K%�����G�T�I�5��s�VaE��Xx�Y��svr��C�7s��+)o��(`3������8�Rm��t����(8����+��KbFo���V��2��|��r�P�J��Gb�/)�,�E�DU���6U<��?�F������uN�z�k�S���5$��,���5����?�;M�\�����������?������_?*��>�9�[�1�t�.#�5��FOg@Ng�=���|���(�1������O�d����5��".c��`����LRI�_9N��"���*>+�����X����S��cLS�`�f���V���E
E��gWb���M���S������|����be��3XJ&c���pn(�5n��@A��)bj����a���"3��l����O���0T�����d,&G�2�[���-kW=�sK�M���]d������2�H*��d[�^��2��t�I�]�6�a�"��X�L/)r �4oM��Y�d�(����V�scg�bh��W�v��5(�g.b���)	Sf� #�L�;����M��3�{�� ���XT~^D}�.X�P&� �"%�1�����P������o9+����BD_x��w��T4�5��JL�AR�O���<� ��s��_&��5Y
l@1���N�M�j��e2��qP.f/#��L��w�[����3f����?$:��/I-=����%`��K��t�dd�F
S�;��LF��YQ����1��0����G�����eR�Cj���|�5~�Xh���!��Bf���<!�u�Y�Ea��y!��Z5�!�5����K`4lJe���e�s�y�)�6xf�T6�����O��E���<�Y��;�T�W��I��
��_&�de�T�����p�����Z�g!"���?���/�����q�T0~q���K
Z`�V-�G��ln,`&.�
���h�@���4T��a�)�L4��S����$H�m S��
<�
��g�q��'&����i�0�%�f�2�����N @Q�i���
�On��������Fy~��f;]7� E�l����V�a%�j%�h��	H>���9����E�2���5+���e�X�l���*�!\�d�n��_�>���M�)���%TQ
a���0�'b�.D�p;xJ�l�����J�D����G����j2��h
z7�X�M`$"�a}3��Kt�	R�G��Z�	L�U�0�*�0��;�#��+u���L��"��[<J���	n�W��L����w�s�}�u��b�~�h��/D�YV��'�y(��+���}�<���F!�D�Y@�n��?����5�)_����hX6�� �+���4�y$�B{�;*?s�,-LQ[L�6��*�$�;��Xn�%`!L���t�[��D�j+o'�C��4��bw���w�����6�t���:��m�a�6�|)�PB�?s�M
��BD���9������ozO� ��pa���?I��
e��~��)��[���'R�I�	`�b�?�xU����;���`r����m�$�	H
����]����_C=�����'���
��-h|��=!��9��nN��7��']��~K����"���o��}~����M����~�"���4~�HZ�
���o8�R��f��"��\�j�4�W�:�m�3)
)~�������@��W������cH���""}�x�L��J����I��J�|f��T��Q0��P�����6��H�o�R�����>���or�-<���}��d~o6G���/9D�3^���H�O����~It�7���"@k�?�����t�� �����)�5tpi>���_��2������uI~��d1�c!�T���4&�;a�/��T���hzc1����(x�S."���x-I�`�v&kS��"�r�1Pt������>�0}�@�+#�� :�Iz���o�R���5w�P=x�f���Y��V�V�3)��������/@�w^�@F�4c$""�� �<Y%�{G~B��h�V&�l����Z�\{��au�M<i]�%�v {�h_L���i����P��P?�����D;�S��-b���s���q�r�j�<N$Y�L�F��V��.�bH��p�3Y�A�Vs]e28��r��� �O��� �Jh��Qo�b(�"��yC�&���B�,j�f+HBE�@r��f@�8X�3|H�����?��L<:���W�D:�sv���y�t������^{��J-���#�:���"Q��G���-Z��LY��^]~��_OL_��8�q�E2�����vH2e�y���!)�b�OaC��LRk�&u�dt�0����[��o��(���z��z�_��r�m5Y#k31��Mgv��aXOi\�������<������P0E5����i,��#d'��%�H�Us�e��,���K�C�'s��S�Q.7��i�,s��c�#%���2�bc���;
X��@R�uc��U	�������
K-~n�����$���*�@��}�n���|���E.q���-��UITS&�]�I�k���`�:�������db�$�V��Ez���Q�n�ie^��H��d!�~iN��/'^?3�e��ym6>��l�j����
*�K�^Q���F�j���LY6�:��G��>��u����V�S���'b%H���c\�[y^d����w�|�����'�)K��2C��-��d�9`��Ef9U�0�rQ����kI���Cf����b90�:%n}2A�l���Mn~��S�(^b1��\����������mF�jq&���������=c�����qV���V!9R�4l�/��(k�X3����%��L�4]�7���e@Ar!��!�\����K~� �(������JDD�*%/xj�@u��U�Dl�T��	
�{�EK�����i�v�q���>b��x��!����=���$H�!:,�;��eq2��{%%n]�U&UDA b�����/�{�S����O��zVR��WnN�1�V��2B�(��u8Ct�.�sF�F���6�0sA"�l0���@G&	�7: ��-n�YWm`@y�(V�*%P����M��D�u�h>�i��G<��t��{��bhb���\Y8!��@���jJ�g��z�}(��������< ��W�Y�5��iOd
_�D�E�f�D$@B�������� �m�De�Q�����E������u?�d��v��)Mb���1]�6�t�WK����n��
_=��#���T��s�������0���(����PU����V���(�	8����'k3$��#A4��*
]�DJj5�o��"j}�J�<y��\�o6#��v���z!*"`�
���-1���3�������Q	_���a���	����"x��es�o����B1qC�\l�&'L�+�	[�o(%�H;?/$�<
���##D6��
���3����B4�%���3��	/��P ��T�
x�#05�o"��[c��vbnH�������i��*�1zj%U���n�����������2`��[��w�_r"2k�n�ta
�7�-�����b����e��@�����<<��#_�i?b�����x+�
x^��*��U`-*�^��X�2��v/o��u�2���O{iE<�h���L����+i���(�t�O�
�1���]N(~��T��\,��/o6���v�wlI���H���4k�ZW����e��^�
��.�5�x�lsi�WC,����v�o�����Z3��/o�(,���=����l@�2�LDd��{YvU|^,4d:��r������z�pp���F	@��������DFD��x1%����|�]�0P �(\j����CD "����u���
����F2#|��!�F���Zu��g��C���-��o�~��}6�|;G�7��bAI���b�l�	I8cb"2p��a�<�d��������Y7��k���o�<��GT����aI����$��e�m#~�8�(���V����wB��p��|�����`��@"|�~W��Z���}F��_�M;���&eq�Y��{�j�|�>�8���H��w]&l��'K���(���Kwe/Y���
��E�|.o�cZk��8��<<����"��{>����|x���=��t��0�pX��a�����w���T�pX�p�]�p��a)i?|������/c��������y}�E�y�<p&o������� ��t������GX��Z/E������[�5���V/�Z��rb�<{�<{�|�Z��.����\>J�BL�G�T�r��>Q-�������UHq�M�*���������q���uU��1]��rb�^�����|�Z��^�\����Ru��Z�}-�~_�:�t]�'�C��������c-����<b���	t��1��^4bj.Wm����{1p�����@L��b��j�����^j�b�^���Z�W��W�U+^��>��u��
1?���b�������V�o�u��W��z��+�|�m�b����
1_wk������B����_!��{�����Ra���O����������B���Ra������z�(�v�X��>j4�;��>���^u1�E���q,zW�c���_��U��X4�z��o��8m�����Zu-�E��gq,zV�c���W��U��X4�z��_��8��>���Vu)�E��Gq,z�]�p(������fc�]-Dr(�z� �C��s�
��myr(�z-|_K����k���
�>J����k������H�_�Dr(��������������e�qy������I�0t��K8U����^?��9T)��E�
s4��{8*2���� ���"�����<=<�J�N�g4+g"�i���?�����lR+��\&�_�!�?$q��*I�����}��P�q$|�Z�������T�s�p�`T\�5�h"�~���&`��C�V-�a�[��nr��V@�F�m\H�U�p�?d��hNC"^SJ�������<�1���H�%���Q�p���.B�u��U�!����������g�6@������<�mc!�	���#���D�� -��tdU����YdQ�+K�?+F��]���%sI��8	�,�Z6]d#"v��d�z��n�K��X� �����������Y����������J\c7����Ki��
�
G�'�C�d�����+���a2�yqm����������m8�3d���dY�����At�C���X��U
����4��-��&)VD��Rc"�T�D�9
�I�r�c�`3���TYm��=k�����
��
�������)D��*(hA=tER��R
'����u�m�������B�����V��qa�Z��(�lvVl�fh

=�JE�"=���]�j��%Y�$�c�]�����E���
Z�EC�����QT0��WE�m�����HD�`���}jQ���$0�������
�v>9�o+�Zq��Nu����@���Y>��s%YV�d0t0�X�y>���
Njk����Ps�m(��v.r�)xF0����>���;� �2�;��eB+#r2�
)�|�nB���i�"��<�z\���#�b��Ly��Q��$��_:�L:���d������*u�w\����!��6��������Od	�4���1/��a��*��� ��8!������L�0@�������$��>�����|E���Fq/�}���1�%��M��RK���1C���x�TA>�x\���o�<Y��+	y�R��X(�`����hx�����Nm������86�E[|����N���`�V2&�����%�i���m;�	���C�?/"M����J�W��[��I�T�������W��Z����=�a>��C��./��u�|���e`�3
���j���~����He>A�I��gO�>��{%����o*��$t-�xs��E�C�pl��v�!p��9��Uj�����������Q2�|�-.P���v���`���cR��LL}������<p��C�qROO���W(�@Tm�)��6��A�Q����T��&F���y�b�O�E������~uE�#���)�c7��y��(7�d��'��B�W�r=U�a���|��O4�4�(�������w%:�_�n����(C:�E���(���/+Q�| ?��SM@�#���o���	~����rI�(&�!H��9I?�����O��]���&Kk��:�F�8&V���Ox.����!����;w3���Q�E��,[)���
�{^�Z���|�B��
�� CN>U�����wO���ehh�K�	��]�,�`�-�2b^0�@4����Y�T�0�{�������?pz��"_�7T�m��/�o�W����"g����9�4W����W�E!�SF�y}xU���"����Q��!^}OK�fS�G�;?��a��B�L�G�t����M����<E����o��
���
���<��f%Y�	=Z�6g�p)���rc�����O�3mB�r#~�d��Y>��/��'�p�o�����b<�c�E=�I[m��� ���4�;�QS���Yy�6L�>����+�o��P�Ct��s�o�#���p����79p��k{�X����x�*��u,Q���������6q`�V��
�]��Ydi��a�dC�>�J��'iN~O���D����O�g��n�7�����v�W��u!���Df������
�K+���3������R��8���Zj��c?i�M.�6w��|[fp�X
\A�x���g�31��"�����g�(�T�	.�1X�A5u*���P/�2��md�78X_��=������- �[�IC����@Ad��\>"�w��hPK���h���G[I����c1��G{z�����*�����l!��@���4�9��*��k�AZ���4�f=��\f`afi�8M�F�-)d����~��p4VI�������F��d��@K�f��i��S�C�X���!�b���<��&�����i�$��S��J�?/���,�UF�<8�Kp�F\%l�s���1��&2f�.����.��]����N���N>qI�j�e��=q/�	kn�x0e����C������Je=��@Z:���7�5-���"��i��z�_��z'f��
��/ �����n.�����F
��zNb�� ����&�v�r�����������4�/��sl,��������:"'i�x:?^zO"�fp�RU>��y��R��+��`*��oW��
=lu3�����'�v ��`XB�K?
W���U�D�t��]�1�UM����F;�*#�T�{9P0��w�����X�����,�m��C�W�W��}5Y�$��63�/��X��7�mE]��^{���/.kqS�B.jf~3�/����8��"��+ ���T��:�r�I`�_���=0�&��Z��0����	#�Y���XYTP1�/�S�+���f�V"r��6wf-S�y��;�}Q�l��P�w���v��|J&"XFs-��2�p[�TV��_���y_�2��N6���X���*~���'~�r'y�]*J2��>3l�gZ�f��n�� ,�I
���E�j����{2@�����>�x����OES�i���Nv�d�A��{��������(�+�����5qUs�8����1D����p�t����koV��|<w0���LP�v�;�>o$�8�x,�BE*��n�b�j�`Ne�VrP����<w�1�����[�l�Z��A�1_�o���P['��*)�@��~�oD-�5z$�N���F]ot��,��/��a)��@C���
��.;��
b��k���+��	����f@w?/����� ���V���9�SEq$[�#;V����c�����G������g�4��2kv��xH��Sv�uX�}"��{C��S$���R%��<��B,,)Nx�2:���=[�����E��hJ������Ob���_����"t�r��.s����I%Z�������}p^*�g��E���0$Q���>������
T������{��T���������L���u�?��}N�y
����:�j�v��j8;���o����^L��<|���,|���\%F���1o�I��%,/���Cgi�;}8x4�[�$[������0���-p^	dsv|]�|�R�*mO��������L]���1��;������O�c�{~����_7�������_7����np�m=��*iT�T$.���y��a7��_�f���W$�� f�[mE"��9`��N�#���
�`��������Os�4�6'�
��Lvn��{s�~����2�oSF��+����(8��!��(��#��\�S^���%|��t��@5>@|�[�
������@D>�L�o=�&�V�����>^Y��
��3����
P������`���O�9���BDFW��1���T����iG�G++j��h����1ZY����e/����9�\>�~��G�/�[t��w+
`�;�`(���|e+�u^��F]��-�k�����H�4-����0zW����E����`)x�"�e���c�#����{��0�W�����s� �A���<��;r��D�����G�e�;4��US�'�y)��gEY�������@�h������P��V$�Lo�*���"U��,bi��7R��N����6Ut�N$�uc��G�*J2#x�L�-DJfS��I�������h��Q��-L�=��cz+��Z^������&�Y��6���xP���E���A�g�FoA-�'�x����VV��O.
�������_O.J�=���r?���.�������	�,��BlV�e���+�Z0%���	��%Qr,�M�<��9Zu,W"r����������-�1���w�<�=�e;������~�mV*��&*�9�S��D���C�i����/$����,�s<���\���e���K!5A�/j�w��nCd�V^H��������@�q/�3��|!9D��G���X��/�����
�6����YLP��Y��Y����
���gs%Z�#�8�o�����)Qy�b�f�!=��1�J�,�p���h8Q��9���!��*C4�����!}
�W�_'}m������ -P��>���N&�\��R�-
�BZ��^�Wio��1K(]p�
�B�}}�x��qlk�������6�I�W������vok�L4.���(_���ghy��=<N�o:1\�.���J���o�p�N_Y����|G��.�`���X6�Y@V��+{e��Z�e��e
*������&�^�H��g��7[��L��W)�s����Q�^���,D�+/�S��Qk�9�7�Fs���>7=�����@Z8_h4�7��=�B��
W�.�����?�f�~�of�����wO�u[�uOk���a����1�ez`������T7"���pX��1Q���k�V�x^H
�"�,�]D
�{�s|�����8V��\-��F��7������O����~��["��t��]������G����G�����6M�=������5#�*�y�$#i1���[�;M!������TO����g�io��an$��6������AE\���]Q[��S_H��B�������+V+b���D�E�����<hh!c�y4��������V��=Awo�3,��$+S��3<tV��L[g�[i28�|�
�����W.�w$���8&m����/*A��L���H����l��
�p�("�B���$T����E���JZ��E��qcE�����6][^;�1�n[�;���y'��PHS`������h?�dY����C�=����QL����W�)dA(F�h��f�}+���Wf�v0��"9��m��lp��@"��ebU
��������"�����w[��Cu@�#�3��g}���n�aY��|��"j���^f�o=������^���I��nIl!��G�+��/$`X����������r�l����&�'��8"�|d`/�����pp��B�x��B�B/>���������u���;�����>�B8$�2�T��������Z�b�t��,DO��[Z�6���1���	�Mp`E*���S�d��*��\��9O14����y�x^�xlB����������
��IM3��HZ��Y�|,[�|;�Ve�oeY-v���&����UC�m!!b�Gu��8O>!�m��LH��6���#~�m�0V��;��!Uy�VK�(h�����m#�9�vF+��T�8��_�F�L�����$���K���;fA�$.H��bC*�w�N��b��r���5�����~���7��`o%zFzl�Q��\L��2�o���>����EaF%�1�'�`:N��1�+J�G���`�L���L�_�I�6*�l��y�����He]�m��E��7��!?�<p�S!_r|&O,���B���H�U���S�0��l=*��"8�u��I���(XAI>�`�a����"y�[{�� U�����hK��������q�z'��f@_}E-d��a��0��qB����Z�(,�So�2������j������v`��
���C�����H�.��V��![+�+�-�'��i���e�����R�yaQ�~?[�s��#���B���.�\�.;;����Hc:X�w7-H����*�����H��~#m���M��0[C���/+��8Z\���+i��i���BT��:����"��d0jP�����x��5_6&"��7�Osf������"�(*�'�����%������L!�EeZ>�I��>�%�V����H�#7�~&����;��W�M���4��3i�*Q��
W�d�/n�����6@&��G�����U��&J%��>7;�b!88�*W����s��D-��(��G�A��2�OT�GA�F���W) D��n�0K�J��iA�A�7���lA<�A�z�f��.d�����&���f�n����%
�W]U�v(z��Z��9:|�J�D��L�OV��=lM��j{���"u/��p�L?�uf�V�Z��6��e]�����s��uqG��bsZv���M;�����2<�{�K��S�����+����O�{��2)��'w�E���6�"�2t���%[�~��e;��:5�
�q���7
��-ZdY��:
O3��@E2k.g�:bF]O���\bb���$�'"�6N����%����2��a�x+� �Lu�\Hrc��<�!k��D>1��g��|�	��r������T!4�d?S��;�[&-G
�yL+qo�Iu1N)C":$9?6;6KI���]Le���_�/�@A���[&>t�:xl����Z�a��q��>�X��X���\�`c�aow":� h�u��H��F�#���+�	�?/#��+�z+��q��sw5�r���eBG��B�/"H�O<g������>���1����q�1�S�c�u��u�7a��2��P����8�F4�
�1��kOc#!�I�:��o"6r�.�:E�m<d�-��D�V�}�����w>|�(:O_Q��~P��[{14�u�{��V�a��*8�������>s���QC|3�X�)u�QC&EFU`s�����w��u;/�0�8L�����S�����>���)h�j--Kz�n{��^kc��/�V���l�^���eT��ed��Ohe�+,�c��J�g��u���0�����E�q�j�Y������;�$Oe�M��i���
������&��j��`��p��s[v�J�+2��u0��s{W� K�P��g�<�� ����"�lD'�%>SRZ}�b�{��?/���P��Cvw�3R�����3}�z�@:��O���'�d����^%����gh���� ��z������
n"��GF�5%1�@�Ph9����OMp���/�����D6KX�������m�����|��M	�|J���\t~�{EP�A�Uy��z��������L��Y�f�`s�sg]�������0\r�Gf�c%������/F������u���(w���Xr���w�d�@S��2����5h�"�!7�tFO�mX��z��SdY?��x����r)8)�"^�J�5-r+"��������.�C�H(a^���w"�6�7�1�@n�Sj(^�Y�F���F���Kc{��
���3^�F\������_��������3��%��&"�pP�^���VK8��X� 
/��6�A��o�h[u�f��B7O�M�����iE��
��Y���S��o�����B�uH��G<��F��`\G�u�y�vx���#�s�}y�R�����>/�H������ �l}C���*U���
�9!��{����M+�@����b�����<|����1	��������yAZ%����i9�H�����K�vbp�I3�����b�+!�
6Hg��!R�~ �������S�sy������mj&N�,��c^Hk�m��h@<p|E`>��]3��:(����7�����?&�����x^����4G��&Z��X����MQh1{z[�{�������bO&������0����S�&�[��I��������i�-d��>iJ���t!"�����L���(�R;�����fV�E��ML=�Y�	@�� ���,i"Fg��i���B�W7c���D���F��l�t��b�tA�\?,)w��tAR'���&��*-LA��7[K��q�[���H���HR�����}^,ZR;�-�5������K�"�	�o��a�����M��H`l�l~�`��f��r�k2��;E���83�R���1���|�6i�����n�h�2���:�FP�j�J�VP$6~r��:���;���Ph�����}��/NB�l�#����"���8d`��a�>'�(�<��&4�
��.dl�F)�@x�A��F�aT�=�^�i��Jcc��0*J�j������F`�4�����l$e����2�
�L#�}�Zi$e(��Q���I�YGR�|$J��S���`*M�D������0��c>����8�Br��d���
2�F�50������>o���E�>�8|����|H%zt��
����Z�Wh�db�)�mQ�&��w���
p�����������d$����������Y���3�:2��T��Te��.���R���n�1�����=�pF_����!IE�l�#���{Nln�{��a�_����`�ac{3jAZ��W^R*/n���8l����k��PJ��	&=xv�y/�i9-,�~��9b�%I�hSr�f�;}
���%U=��d].#)Wy��-��L�|q���`�L�L�U���Ux��C����B�������t�����@���7K����?��aH&([5*�����d�YdX_����y�?���E�"�1q
���A���t;��qY�>��"��e�������������It����"�:9��@{Sa�P~1������o���@'~�>������7�c��;B�������l_�nT���<��w�3�"�/�#����R`��p��{�D����p���	��|J�m��n=���6�,�+����u�!��<�w��n*i\x���f}E����6�^�Ymv^Vm:g�ML�ys+n�Q���C{s��V���%W'��,�$c�&�"��
�"r�/����+�j\��m��T��7j���2��t�a�H�K��Dk {b�.�rQ�L������.����E������BsV��bf�<��r�&m�T�G���m�K�����������cS�'�����'�t�7��D&�����~R����dtu��W��#Md���cA1���3�i�]�Qf6��|���D�@���<����p/���Db��1�
l�]B_1�{�{��$��������T����a�+$W�mUK3�ZR�9�iS��iGCM��xp����T~���l�J����j�9��[0LG>�����:���dzf����f(j"���Aw����Z�����8�Oh��zY��(���#����`��b*�����j�}]���M������������D�|A��%0}�<���"w#]'����7��!2�6;d�O)�cvh�����>/��5��ii_��gy��u�j��^aE�N�^���
#�����(D
���QL�\P��J|zH��
����b����U��~������ryl\c2��:g�^(���< ��4.��L|�(^��Am�M�iZ��I�-�W�,����$��e��<�g!>A�����>����l�`�Sh�o�5g>?�J?�����ZI&�OK7p�TO
J����P��%H���f��������c��2+�-����K��7H�)ul3B$6!$��=hcV1@����$�n�r�'��zt�L4��'��z�����:bs~b���A�����.���u����kO�U��G9�������Z���E?F-�������xr��QK}<������~��g���|�E����~�D?i}���~��Z��^_j�'!�Z:�D1��$�&���� 2����q����G}�U[^�����������5���l��K�r����6�����O_�W��������8G� ����Iv��t����o_�����w�������������I\m]�s�����S�I���F��v�iP��v'�Nz%��<�cbqc���@d���8�����p����i��*A�pt�������tc���pQorZk���������=���G[�����<�f�����a���
�����JD����%�����O���R����(�?q������dHM��s�`��BD�_D��T������R�8L����S>O�!ffj� y�a2�cN�����	���\�Mv57������������hV�� ]�D�e�p�h('���u�R����wc&XdQsl������myD��~��e`��[�� 8b�������q�6����AT3v���t����7��X���Cy�����|`���.H6��4�`[Q�������|4����PKw�7�
 ��B�s���������G�RG8l%�6����>�7��D-X���7�cON~��_�HT�U�5�k�V��t?j���~=ON4�`�B��C%p�k_I�q��|��a������E�x�U.Z���*�<��3��*�x�Z&�-�BH�IS�{�i�}�]�a����I�������n\�Z�W�	px�u[�rp�N?����q�Sp,�>��Q���V�ac/� e�\�1	�YQ���E��'�>�P�3_��"������y�n���zkG������j�Y9������"���������wZP��0�������O��&*�PS�r�LFm!'�
'V��(�������U��=)�T��{s��U.e���S%�=Y����E���.��-��X�����6]�������ar��W�/;����D4�q.,:T��s�L����7�q�@S�V��������'��V�2k�<�*�m���Z"���>��n!Z��-�����o	�?�eH�|��~�������&�
�9�,P�����jJ�Hu�VaE��BRV��w]�q���XIzn��\�����cMD��u�wIdV��2pM;�(���Q��2���Vn�m6(��Y�T2-��5��� ����5y0\��h�i��OM��BFs�H���\R��y >BXQg�JU�lc.��C���;����IV����������������/l �,��������-w!qs����X+%)�����n1�K��D8fZ������y;fw_���������0�j,mB*�O�qZ�V���ok� ���r�5Q��
��S��D�|�n�5aOB������7S:�i��5VI�S��a-�	�Ax�s��3���?2�
��]�y����;�����%��� �{�+p��j�Me�9��-�[H��#���
��>/�`��K���1C�/��?��[�����5o�d����GYwg����ms���	���b\�h�rA�
��xPB����^���dm1�#6�Z}{R0�	�_�����'��,@D�����
����_�d���G}_�\�/`��+0�ut���j+��
t�NK��"?�B���iZ���e�=�X�83b���>��RX�i�'G�"��{���u�����(��i��zX����������V�	�����X���6������>`��8����T�#�6��QP���>OR��r�+��C�u����y�A�1w0=7�w�-�R�5g�;�:���M*Z(	� >y�������{w�10-Q��#=�H�Z>��2�|��(��p��C({�����n�a"�8i���L^"�z��J:��������4�=>������'��vb
����T�#6���_$k@U�x��}��'p2�efN�B�lUt�S���{��:����hY���.��e�i���*U"��	�%�J�t�(��K�#�{�#M�l�vO�*�]�\�?���"�&pn����:Vrg�8���&U"vZ��
qX��j����zV$>+��h�X3i_���0m�]P�>������C�2]Z��x���G)L����!��m����8�a<�1#!S��gK�����k{[���X��x����"������x��N�?���6����s�_<T����u
\v�"��I��~����j�&�����`��"W���G��iW���}v���VRf��t��Po�3����^�������r����.�7r��=��v�"�t�Z�je���<����\g����'��._u��tWu'���� f��m�fvEZ�-����t��]����i0�2�u
Y�zo��ng��Iv6n�*�aC7{J/�j����E�� �L��!��3~6�mqM�|&�nq�v��:�{�������G&4�j}%E��k��v�MZ=gT�6�����Tti
�������6���x���m�);�8�9m)��nXa0�[	JG�:1�~��3�UI��z.�9<����-�t�[e "2��fH@1����a�$����	,��	`�#���b0��CJZ W�?<g��
���$5�toygU�������}���@-X�@X�a�+l	|�H��f�0��� ,MY%"���~����~l�1xB����� ���{���� >���=���
d��3+��P���;�f�wp(�����"f���w�?�=�OQ�N��$�:���i�������L>�R��R��5?G�jR%�����,���0+���4l����� -P�E]��������Fw{��s�.w�*��R�4fc��{��q�<1�u�<�`
�	8L7��-a���v�;�h�bN�5my(��Z��L�n��L��y�*�MS#��!�����N���Z�dp��X�����}�J�{��3^H��vN���zX*����,�sz��z�J [�������
�O���*�����������'��J���	�_.�:Ko����o�
2����V�d,���a��1H�#���v�vpIOY��|�.flJ����/$��pW
�����������\��!�F2'���`c�J�ZVJ�I�u��g!!>j�^O�~N���R�d���S�������'U@��I,�x��O�N����f#����rG����LT��UD[����ZBYC��bUa������_f�0h�w4����h�n���m��Fup�	��	`�]��"���U#����C�`�&�H
�	ML�����6��o���A��O�U��d���J�>�����������0s`A��{X��/���\������%F�l��ED� 0��������9��/"�>B�^�����MKT�o1?*]����(���R�N�I1��	�gB=��/��n/d�#��`k�����+/��{t	'z!*2����`���
�������=n���0����iEKE��T\L�"���5w/$��i�����(�:6O%�7�|6�7�[XV��JX4c[^p��BB���X�u%"O�&"1y���5]/$��&K�i`��b�L�k�����C
��)����\�k����t�,����k��oa��,��y��a�"�����9U0�+�z03�n5��������B���Qs���\�����Dd����N���z���� U"�&�T����i�
e����*�;����T�a��T��G,����>����t
�����������]����~���5�Y��	��8�����S^H������cs�v>D-�2�e�}b��������	59��v�*��[^�A���	i���Po��Q�Ei/&�uU;������������Tv��E����_|k~0
!��6�F*��"���&t[V��8���x�?��G���I# �=F��6�}E
�.��������?JHe��Q�W�>@ }���)Q�w����6$�
���)n�EQg|�O��/'9�
nn�-�m�����������^i
���>�wn��������O���IG/T�X�=6��p�}���������_�~��J*hQ������z`7�(
����mSI���}�H��v��V��0z�#4K9b�S�F��9a^���������!HS�MI^a�)�C��Hi}Y���ON���K���^Y��	�_�3���R����U2c��'����g����q>���%�,��$8�Lk!�k�%�e� T��0*i��-��|��To�?z��r����e_�L�`�������p����(u��p���t�XT!^I��J��&2x�~/d�Y�wC�y-�c�"����l����hE��<�M3����E����x�����2o��E��n�3��}������H�_$d����a��N�o�
J���[�S��|\�|�q�������G�4��=8�X�	*������'7&���0�1n���_���W����5��y�\�M������T�*���z�����F=�
�����,8��}!�����{�^�|���BL��YG=��R6tmF���YX[����T����^��w�Q�+����Os���vmT���,bb�us�Z�
BW7��)��}�����|�8�|rH�#O���4��|]o7	��*���^bU���R�
&3}�~��6���&~��v�W@KU�;��v��Tu��O��|R�'+	��
���U�z��B��S��=�������{�o9�q%YV]H�G���
H������@������p�7w��)r��%2Y��~y�d����=�|����-�_��}��'q��x$5�b�|�l�y�}���V�f�s��������e>�w�&�?��4$��1�7s����/ �.��I��2�I@w�����Tf�yT�Hj��~N�?�N���N�Q����;a�����$^�yi����!�5<q���s?+���C����2V0��L5��eR�Tdy��'Ca�DO��V6dZ�S�gA�	�*���x��Y�*O�*�+Y��ci��^�E��,��u;���m-W��T��p�i����?^���� L�6[���6Q�E��������p!Y����Ez���G�l��S�����,��1�I'v����n�N������,������7@�+��8hESm��?zq�h������xh������D2h�ucy�m�����!N������zF�{-��d_���n#6}����\J�R`��?�����:*H�y^�8g!��5�2+}�^G�DGq����8L!��$��p\����F~d���_�H/}�|4d��o��X\��ji�C��/rK��iL�~� �"�_�2ygr�?h+A��@�sI�[?�����)3�C�C�g���R����m�@I�����:�������fF�'�p����`qcH���r��W�a�W@k���9`M��#b�����H��
�!\HHj��n?~s_���M����a��$Q�f�?&���!~W�]:m�I5)v���������a=o��%�+q�����F��M7~8J���E��"Y�IK"]z8,s�W��|/$������k.r��?�27����Dn:I\�����S8�]C*��>����\���Q6$�pa$g�C@������#�|�aE�������?���h��A�.:������3�@y�SE*4"p[h����pw�8!�3�m��N�����B�6��3Ujj&��fs�c<&M?���j~2fQ��r�����'�S�
�6R$��9B"b#���F��e��R@��t�������8�L�{�LW���Ye��>����������I"���@�f�e��:�{�;��wL�H&GK&�����UIw<��w�P`���dD��8�T�q,��:1��-J��;>*�a����>q/��d�Z����������ft ��`�a�*h������3P��$N������I����eW��1?E���w��#`����<�:�3��O��k��(���p�4`�������ZK����#�����Q��Z�9�O-���X����4��SV��Dhb�j�:�"�J���{+G��u��6$CS�1qs��Y'o���RD,c[��8=��k���E_��|Y�p��'����o�4x2L����B�����V�t�[��$�2{2WfN�2&��5~�����a�Hg�R�&`��H���)O`KT�tEpr�u%����6��=c���xmd}N��k=q�S�'�%��[�$�[h�W��������1'���WRe�A:�bK�T���`��R��=�9U����E��Y�!v/�#A'���0�i[@U��T�����]����/��"0s>^YMTY����)�[4���
#����/����V�T-�"~L�������t����H�� ,P_dYp<��
1����3/U���(����>��:{�|���^��J�9h?���7��8pw��>�r_��Ll��$F�_���!��<���$���L{Or��|��Y��J��#������� 
����
Gz��cY��|�A��B!s���`�P+�����5Y,��w]�t��J#���4���&������Dkb�;�������v�����(����q�m�*��(��=�'z,KoUDnz�E���/�
[v���K�:�����5���?�x�}�$��q�~YwF��?+J2w?q�`��@�?M52t��z���r�x������4�W�O��������q��7��L�A��j�%vNj-���?�`��Xp#�Q�m-kT�(��Yud�����u��T��.�c�M�m���2.������d:����Nhj��:��0�ha�������K���s6�����������/$�I����O>2��e�0��\�v�����U
D7Zu��v��a�!�(��}��x�c��(`������
�o�=u�	��;i�B�O�M?��
B��>]��}Q�6�q���(����O��D�T��\`T:g���mPE��9T�����/����#~�SeU�n%���k��6��3�j�����C��>�L�d�K����&2�
����f���:��`����#��`���vl������i�Dxw}�a��|q<���,�ed��/��g�n�_�p�R�W���M���K���u���gq����QR�����c�\���$�h�$���TQ/ U�����-����f�3������9�6����I�Q=��\aa{8�J��)�d(A�^�����h��xH��: A��v��^��E����V`�R -PX��:m�����f�87��c��0�����[�yd��4� �qD���P���0@+�^>�c�_���t1OX�@VY&bF�w;�cp�����Z?_�����
x�����3 �f(��( }��v�,�1O��@��F8�ub��e������>���[�y]��hg\������
[}Rea3hi%��<�N7�l�\=�-I��u �n~Ht+8\��hv�"Q�.��8
�3KO
�@N�-t/Vt�[�y�c�������v�������?�g
�[^iC�5m����x�����������_����~j���h}��_�<H3�$<=�5�*�����!��G/��^�����!���i#]����j�GMr�A��y#?��,��>M�0�8���4��)���+�R���F����2A���
�7�%��I������L=D���H(�������gr�i2?u#�&N���VU�7J�x�����S�6�\J�y
�8M����L���)8�;�7H)����������p��,��Y2��N�o$iv ���?Q'e�6�������x�I�W��j����=�o%�Y�V��Xo����hjUv�����L���2+jJ�m�^����Qzt���L�0�h0+���`�AT���<�4�b��Z�99��3+�a&;��*�@TZ���4���a�*����4�l�����m��`��NA���RNH�q��w��}<eK%-Tm��R`����N��#��9{�3��=]��3�i�p�k���W�z�6���H���������yO�-4�
]2�+�����^<j8��%��1�Z��?q�r^O2���#��	��aH��<�JD>f��c�j6�MfY/hI=���xQ��BB43�D��.H�I��^t-��	8`�hs�u�2�|��^L�BD��+���������o����3�	}V����g�${�"-�n�F���tR��+�j8f2�VQ���M��G��'�����)�T���&u!"�����2��2��1��L*O��6���7f��6��2L����sXW�uE��^G��"�dI/	B%�x��C� O�J�4�'k1L���WWKz��oq1����4��)wXec� dIu����tA	�1��\wK����g�K/����i%�O����b
���y�O2��A�)�iEY%`LW���nM�d�SQ��{�"P������aO$�R��TonM��W�.-e��jB���)����tA��:��e^����E��5w�%�)��q�%-
�63�������.H��<F��S��3e��[�J��dG��3��.���b���Zl#Ju���Z����2e3*�^���lDMG��.:lY������*��J#;���P~�#��@���B
�^�_[�?/"2������;,�nA��u���&'`����I\�926�^�fq��A�/�h�\I�"�����Qf�OZ1/]q%/��G��{�A<s��	yz��c��2�f�9�����Y���=�����>)� �J���&H��of��-��*J��S�"2���R}��34+8�
t-N[Q����ovV�_Gs�%����F/$������
.�}g���T>F4�$2�B �������?)��
�w���*g��>��
��6�������w����Q����*g�/���?/V�6��al�O�X3m�����i� 3]!Osy����`�t����E�����+����tP�-B)<�seh��^�����N��H��!MZ�����)2r�v�������}������!h����HCQ{1<L��f	����m�.S�S���D������r�g��
���Q�'��+���{�����=1,���=�p-}:��W�����d�A���3&�������6�c����|���	�i��CSO[n/Td}9������}i�?f����">o�yG��4�2������c�J�����/�����EZP�W��y���!6+���6<������ ���F��2`��VU��|L��usO���X����/p��Dj���}�����'N,H�a�k���d��f��M	O��+�2#��1�L��{�,jt`��f1j���0 ���3�A��h��T���?	|��	���G>}�m3�7�T�4�6���F����T�Q����*�����V�h'�>�(Y��d�[[�P#���x7�T������n������b b�^Pg��(u�,4�i��3���my�X�$�?�"���No�qV�HnP81A���D� �� ���a�����
Fw]�lz��T��'�|��k��'���1,W�fA��|���K�p�>cdh��n���0]��i��6^�h�2������eR���X6G;�1�I"O	Ye�v�����?��|��_8�YG:����m|3{�v[����(9��U�N.�[~>�o�b����4R�t���:&�
*��^�ob7�d�w�S��
��~�!��OL6��;F`���i�n��,�/.�~bA��ee1Z��^�����`��m���Tf��n��[��|aI/�E�F�E�K.H��8�v�[{�8o#����SD�O59�#�S�>o���{�B=v	~^�K���YI����2|�����MD�F%B�[��5'g�&������z������"xr��q�����?��E��
|�H�����h~�%�MH�g�:�h�$��4��T������sIL7�<#:)���y3-�Y�=��R�U"2&��
1i%�i�y>���^�/(��J��y�@�v_�}�gq����������1�D_kEH`�|�$�������{��������k-���V��y[�����br�����V]���3����{j�������Q��\P�nG�<O�3;�ih�IodNE��H���e]t���H�V�������Q6�����JT��5G[�<Z4���@4�����UT�FD-BRi��o���$��~%M����O�g��W�
��3����&�
�������}K��}`C�BOj� �O��M�/���B�c��V	�>��%��{�P���"���H������S~��&N���6��[`���1�Jt�p������)��-p��=�����"��p����V�]�DSG�������u�[����G���u'�9�����~���5mz!�^�v4�������������~\��P�����RB��J�*@5]T���J4�n6NZv�N�F]11I��DSvM�a�^��L�y��[��/�A�Jr?I�p���};����|�!���v�a���i�l�(6������
��
Q2;���3��v�'O�!uZB��Z��~z����VB�)-�&%If��AQ�b����C�������`/@D�Y�������+�d�H:����s��������T�f��L��c��4���:�|��uPk�;�����i5���LT��4_����:�q
�Q�����U������� ,���m	��lp���.$�$�^��]��gl�w�%M��g�"��g!?���:+hJ.+0���H���C-��b�.H�(��.�������I/��s"N�KA�D�v��'d�Pz�Y������xNAf
K��K�qEn���7;x3f��<����}yG���b"�p/F��>5��U�L�������O%*��7]�+��n�mE��WyX�v�SJ��d>k������7�z��|T��h�D�����~;�����b��l�$���}�Zs��:$/T��v"�*�������^e�Q/T��C�����������;<�����/#��	����s�bHD�-�����)B0a��
>�������QCS��l�<n�6k��<��[�q���N�T��9I��~��������i�W{A�����X��-W$���3dMh�#j~��v�Y�y�2���Ah����A����fG�G��c� ���-�K�q}�����-�)ylm��y�q%�y#}�3�{�"e'��K����i�=��g��eY�2�"������_�x�n���@��u��,3s`!�K�w�)M'������T�����+�����o��q�A�����T����2R�
ju6���fM[f�X�pR��p	�(��r�����LD��M_�N[���B�)���~0�j
[��
��&Z%�|[�a�w�����E^h��u��[�N2R�%y�?�$���:|h?Rj�i�}�Qf"��H�a>\_��h�@�r�68��
/D���������Q|�������F<�"���sW�@�4p�/]��/gL�bL�	��+����uL�_���~E|��������.���I1���~\��U�L��������~��"'#�������2�����������i3B��n�5}�8��ha{��1}��C�}2�����:���Kg���F0������%`���s+��g�?o$��F,��q��d$�����z�����x*g�����[
�J4��`#���>�jIa��K��;����.�$<!��I?n�+����_z�E?��}�g���v}<�����^����[��-�u�o\W1]O�1_��\�c�~�����y����\?�r�����.���\���}�����X�o��R�S�C��g/�g_�_�� ��g�~���R���Q��^?���C{�4��CL�g�~���s����������c+�!���Q�CL�k����g-�����=_������(�����Z�K����u���!�����Z����^���;?�����$�t��1[�^�bn=Wm����{�~�����@���b���������R��������W��k���j��|���/7�����!��{����o���\�n`���G70C����!���
��u�f���w3�|���b�����z}+��@����R�
��u�f���U�/��b����^?J�F7P�~\KC4�;���b������?�!~�n�]����tC������'7����
��rC������'7����
��pCx��n�]��b������?�!v�On�]_�3�.��s�����-srC�z��b�������������l����k����g-������
��{�?�z-������
����Hn�_���������Z~?�OM��w9�JC�������\�\h(�
"~EH�)�,sF��H�B~a�,,����_�U"��t�N�c*H�������YBW�|�2j��D��M@�B2X4�SIcX�?/"@"lI�)>R��v�e�?:���w�E�I����Zp�x�����L���5D��M�	�h�K%���~��'�(=J��T��w	�*��%V���a�����Nx~p�����tS�6�ajL>���\����7+	yb�T@c8P
"��%)�N�R�i��+1q���@��	��M�Q��;,7��B�=�����A+7H�(��=����j�@����v/W&Y>!��"c�Q���@f�i���E���/Xa7���DD�wy4��J7��"j�B�7ZRf!I��K-~2z�B0j�ywR(�,�hA����*���?O��t1��6	L$���
�����`qG[�1v�9��h��������7��?8!"�6��JT��|L�n'�6���E�_�=��z��q�������
�������7����,s�"����@%�eM�5vv���� BOw�n��L�[
��[���}�~g�ei
n�%�aFa�TOc�N�a�z��i�]F����/��Y�Z��%;��I5�(��*��C
���wm�����i��D5���m��������R8����K�e"��Q�����y�-�t�2�)��/���+RO
?s�7�#<�p�b�cT#,���4�Y�<�MK�����Xi@�o$`c=%���_������=d����UY�L
nYU�{y3Rk�Y�����.JR-��n#Y=�~�����#D
�A���'��q!-���3�-\���^(���K�n-HQ��	G����M���N�5�-l�_���Z����/��r��������
l�b?�r�I�H=��q���%{�{@�$;���Y��x�����Y�pG�/�4���,��5��$��*�����#L'6��H
��dPf���Jo3x�S����^(��;&��49
�&��'�F�)L/$k�j�������l�B����0��b'�(�
�0��R{3m��D������>o����
����� ��rG��~}�L��v�"h���K9����>�/�!�p��D?��W�'Ou,�����O�QT������4�������-d���
����"��q���+Q'�~l����9��i����/@Uv�+n���7��k�2�����OE�
��;�D�����&�?�y����,��w"i���������������b �MRf�S��~��a�b����R����jFw;y�i��J�tX�����<N� ���w�-z2}�i}JA�!j�h��f�)�Xw�3a������lM�!�������o�2�eI�}����\���F=~@��^���F�EmO<jD������>P`zg��(���?T�(!��3�S���	QZ��$=����Y���O��~��s_���,)=Mq?F�7�PA�~(1�,wwQX�u�����K��w���x��T���O�[*z���k.�8�y#����7�Y�=��Y�&�<����}^V�^�a���(^D���hl��k���,`��y{��Kv�&�68�z|�`A����hw�+�V�s��8����1l[�=^o��c�4O�n��7����X#����h��A��7CS\��y��o�D��V�w���Q82j.��C�R\WC<��)�2O�(Y&�~���b�������!�����$�����t�����8B[��q{Rh�H�����cv����N�5�H�|��`��=�����2[���Q&��	�9UE0�|�`�&{����s�$hhth��o�	y�M2�gO�������VDcV��9H���.��"�Hk-bfF��n���r�2�l���� ����������}&��'�1i�:��V6���b����/�$Q]����=>�@rr>3y��7�������0�����tGn.�>�<f!iH-Dg�\�x�%p�d�2�L�s$>��F���s�Y�����K��b4���2�/rB�_������G� �D#C;_��4�-�A�����Q�v-E�u���Z�DZLS,*�[Q��� lM�\)!����@A�����O�'_���g�����-��������d���������7�n��g�spY��%p������L3���l�~����Z?���r?vc���\�)	���c8+����kM�k�����*��x?�����)#�$B�8�:l����=+jJ���a���j�-����`&<�-������>��R�"k��C�E��i
0�x!���e�|�~E�1���������I�X�`tX++�n���e�J�����z���i�@�sT����8����Wr�������#T�L%v8
Oy�aK!n�3YI�w��`5I��+�Bcj��=��{����S��im<=�5W+����8S��G�="�icAt�����#q��t&D'!��,[�q!!��Qw��
�v�� Z�����������= -�����u�#���T3>@S�q`!���H?�1	.|-�����Hd��_��D�7���u� U%.����D��,\P()rS,J�Q�K��n�������k�J���~�t���*q�*���o�&����Pk������n�����������i��
y��-��X���]��z$�\��X=A�~��0�/���n�Mr��a��q�&��"-U����b�_���g���+J���D���I���{����*�f��"���{{�$c��7t��S2�-��B�'�i_�T�
��j�?+R�/L��X2,�	�M�f�U���f�_H?��=�f9�d��xf���r�I����$l�I
��E��n^L�{b�D�m_Q�Ow��p�h� "{����?C�0� T��=����Y���������+V���?V���kpo��e�������aW�P��YR���v����/,688S%D��>ot��_O�X���T��!2�.�?_��-���J��B�p#�'
���>~���|���'_�0��o+��"�����!Q&D�+��@�t�y�/$+to.��_�f_����N�2�t���Y?�<v�[��Q�d0�^�fE_H<�X7�r����+��T��"���NU:>a�7T������YF��6���������u;����>����J�������v"�Z��{�	���T	x���d\��fI����\����FpP!(�����M��0]R��S�$v�8Yh%E��l�����8nw��In��_H*�:�g������R���>�yb����P���)��O�����\��qS���no*@}fy����~�
&^��.�]��_���n��
7u�����(#�pv���y������y��D3�2u���Y��o���Qc����m��^H����E�N�BN;�e���k5?/��9j1�V����;>��R�y��Ti{_�m<w��eb�:�,��������,���>������'.�����_O\H�=q���}�V]z:jA��}���������\x`_O�_ '�m�r����t�Q�FaVn~�T�T#y�LrR��v5�����=e��(J��jj�~��� ���"q0��*+�?�	st�q��c�L�.�x������q��%�������0n���D��
��8�����L9��H*����a����N�$��#�����/��|���,Dd�W���.QU"����m\"��f���P����_w�Vh���H���D`���%����\���HV$}���ma���1�p_�P�V2���x:[�����Dt�2x����,D��������
/8�9��C[ro4i��b��[��
_�����D���H���L��Q��F��b�V$�
�z"��j��]F_��y�n0oA��H�KO��a����`O��� ^F*W@G��L�VT��
�����u&}2$���=%��i��f`�j
n���H8��E�A<�f�1�D��[Cx�+��(�������
���H��lIL���#��#x�l.D�V$�'u�e��edF����[����>[O
�]0�� ��o��y���<W�}n@�`E�W��\q ���e �-7U(��������!��x���� ��J�O���-�,;���5����
��(���_��������91����
�vxM�\t��xoH�-��l�~%Q�LI4�	@u&r��(8���.��sAW���\�V`���eo�������B� �o���=G��P��[}���~����d��Dd��e�v��b����1����3�9�+��&��m
�u���������eSd�V6$�q�?���@�D��[��18���<��\���Fk�LDF&�~�S��~XL�����L�^iA	h���������>L�f�M�>���S���bi3iH%r��$K4\�~=N��Bns�dJ%���
���`4~ ����`�J�����F(<���R&��<-=q��D�u��Pt��oH�������J��>�,���0� d"����j�l!s�q����z��Qt��V��\�>Z����J$���<���D���z�������E�\��]H�
��B�"�-��W����v��aw������{�^���G�WV���[����:T �OwW��@�o����a6�a����#I~�2��+�F������0�����@>����s��k0(l����~��1H���.����C��:n�p��	_�j�k�h�������sae�L���@_��]���	:��P�������}��n��*�m}�xL7�K8��l5���gC����,�0���I����<��>
�5#)��@���Z�'�������D>N3�����e8-��Q7LP~?k7L0~=k7����v��?k��	�#���U��� k�(�}��Q�L����(�q��9�0�[$~����&,�L�_~h��������2�H��z�������f�"�}�$��H�<�l%"s$�VY����l%*�d��I?��lL���p.��aXQQ2l��v��/��h�- ��gn�M$����E�V�=E����t�&�w��7�]D�fx�_���3������T���0I��R"�O?B�?��-w�M��{'?��Eg\;~����)4j"E�-�>Wg��$�h��w�����4-FT�(&T���W��;"B�0S�w �f������E��z-O!�/�o����|���7}�Vi�������R����4#���DJ��	)���KB")��
�(Jc	�9	���UO���f�G��f�?z�r�/��m��2����Q,SB%�����o��W�r����>D��'�`f�v���{�so����^fA	�f���$Z<�BC�B/>����������1�����l���mh�	����2P���M��,�KWq��LD�oqXh�@+y����E��l�k@R�m�x��e��J�5��;�k.�l(t*\�%���aS�VQ������4����=��Hc����B���*c|+�j�~��&����UC�e!S����o���,@D��:!{�����$��>����
cu()�_!�:R��J$�\�K!,�}U�k@z��_,��q��w�F��%X�#)���$Z2n�����s�L���
:;R�<�@�lL@Y�~�i�<!m�[�U�C8���D��_��Z��������y]���%����XZ�ftQ��m<��n��FtE�ip���#�28��&��4(ac^������He��}�g#"�tO���q�S&_��baC2��c�RX�	x�����L��j��B���aM�K��|���%�{L=��x�����ud�,Cv;� ��H�v� |�~7�Y����L����J ��(@�j_�p!"����m�Z;��s����%����>�*�T�X[kI`(kC	\���C�����H�.�|�f�`����~����L/[$U�rA7����u!"7+��8�J�]\��]��-�g�oH����j���h �;v����s�^<5��c(\r�cEQ�%��8`h!%�>�V[��WG�!���F #�
Q��i�5���e�������Sv�M���-�#�v�E���5��j����
\��\d����D���Xr+`F�O���,���H�
�����^�������q�������S`
Nr�3��m�L�}�Dd��(��1�<oc%"_���+ ���De����M�~y���������~w�g\�*	L���*����^����2,���F^?s[�����X[��u!��(J�6��c����|��(h��YU�������2�3_��������Unu���m����M�52lD�n�u�,�T�E���
��+�����PY�bdl��cE�����	���w�X��Bw�t����4��8*� �!�3EO�������!��~��(�B���v`gu��z|��!,��A���A��"kP��i�]s'P����K��#ft��0{��.&6LH����y���B�D6sQ&�6M��G+����e�.$q�1�s�^^������'"7L�r7�����o3���W&Wb3�Bh��v(>H�h^2h�8S���T1���{T�<$M�|�d��9�)�$@~����5 �t�d��SS���R��\�yCI�h�qn�k����@��1�H��ZP6'�����9��Z��\|v�����?s����9s���J���L���A�q�i���"�#ZX!��"H��<G�����}���5�����1�S�k�u��]�/��a��#�C;'����7r�m��3(�g�3��4����
�f"��V������`��iA�Ak�ZK$�������������
��P��2����|������b[��9C����>�NhVvC�97FI���f�5�����H����j"U�O��Y����!��w��>;�PL^��[��f?��c���dt,���eg	�3?��d2_B��K��D=��	]F�0�gE��V����B�]�D}���#7uM�������d�Xxy��gc
��W���2��.j�4�������/�O���W�u&�	���7],d��C��3�����a�
n>����A>���I>sUAn&�I�~^b�{�)6��O��Z����$G��y���+}���D:�o��eG�������=�<V�,p �b��z�C��j�.n (��p�IYQbsN�M-��.���	�vODx�j�0w��f��}�!xs��k�c,^��QB�O��zv]��YT�"��|�g�6}���M�{&�mHB&�]�>���<YP�_�K�{d�:f�	q���c��l`A:6�,�Y��Z�����k!�8|b�]�8��^u��L�j�~v��s�E�]�r��0����(��)o����r)h�G����s�\����m?8���a[e�2�	�2U��@n�h;y��Dy�O�=���&b#����N3�,����;�yQ�/j3.�D��z ������y�8\�;���.�N2sn�@����p�XU]@x�	p0�/���:c{�����o���	\��d����h4��/�;����tB��ZH��NI������h��
�mp$^7�p������f|.�?�5�o�CQ�
1�|��.:��66��h(�
}?�6|�	94�������p�k���"8����y����cDs�y��#�	i�<o����,5i!(����"$�������et���xV�gG�"5�����-(��=u<�������>�P3��S�X�+�!�	�A���UE���G�'0��������n�gk��]�����A��<��w<�H�^�4g���\<;������u���bN����=����=�<9���	���W����.Dd]w���4H����!�'@o
�2�BR+���Tr
���.Dd�,i��m���)�+�fSB3+��>�&�0�[��h��Q"9~rK���s��\��b�a"����.z�[4��kTY��iI�1}Z�	�v}���'>K�"��f�/���d��yf���y4�f���)��F2-�� o0,)A
#�gc��v��g�tC%��%�'�����Hk����zlk��pV>��`6?��d��f����5��L���}��U����tE�YO0���7es5%R���:MTf5�����9`�J��&P$6r�B<�N�p�d�'Ph���F���9��s�d�/yT�~6�`��S&�� �F�cp��������xx�O"���i�	��4��(#>����C��1}����EG>��@�yJ��i����f��n=��M�?���)���i&5�3��N�fR�����I��Z�I���TRN��f/�'Shz'*�g#>�R�X�����4�"�*��J�T�97*��k�����gGtn���IZ�#M����J��M��g�K�(���6C��&S��t���*g�f�
��y��!aB%����>w�����8�2�s����3��#���4��l�]��KE��_���������3�5����H*��`�Y`��i�<���C�}���2�R��c����TtAZ�W^�$U��)�p����k��TJ�����u����,�������}�%�I�hKr���;|	���U���D]N3)WyL��1{
�Q�$�s���h�L	2�y��i��[�t!��P��D����"u�vQ����������>s	J�^����n-D'&w���J�� ���x:r1������D�X�:���\��	x��X���K��G��ot�)v��(��p������M�P��Tx4��=���/:l0��x���2�!���1��������O1�"_�������~�hu ��d�����g#���v�:���It>:h	����)V�����{��m6�L�+�{�y��(_�^���w�I����Vv�����6�'����M;�U����z���
w��tE�*n�S}�������D��F�A��QF>��E<E.���H�X���V���m���������G�:�0V$�%�M����zSw��K:����������v�,����O���y53��@1�d�nq�9��K*�����6N�O�w'�����,�����2��h�m�WBs��v~�o�$>�>;��)��nI�x�8	��+,d~����9Gr���If�?	�ie����_���D�@����	x�bK3>��������}O�^��]@a}�Q��M:��W�vG>���m��������v,Z�i���cjZ��f����R��z�����T~��N��$(*v�:��`��,�AQd�������������@LS3������Kj���f2�	������Bq:-���>�<��3WL&:u��"]@-�O`SW3�y�k���+��4����)[�����/C�D[������yE�64�i*Zmu�D_R���m�KC"���V��5v4��g��<�����$����&��p�A��^/;��!Q�������84	����.������#�� |>�/�U��~�%"!����
�����t��������������~:_ �/������]4lP8�}���q����I���H:���/��C�g�Tt���{
����=�����T�GXpX/���i��IA�9_
�e��9����1[��s�d]7��$�C��A�O!�c��������q���D]�O���!W�x������s]\����w=o�]������w���u����~��,����5��������N'��W�������w/?�n���g���,������[���Y~�;�o_��7�s��3��E�;����M���������|�����?��/�~�������s�^��=�$2�����-�������w����/������������X����w����������?���^�}/h�e�_D���������|G����>�����?���y]�o�k����0J��4Y����N/��O�x��#���(����}���v_<�c`�c�Y�@d;��\"
W��9�B{�P�4I��t8Q9�5�b�DF7�e��(�89��D��)��Q�>n�m��S��X�y,������j{CN�I����y��HD�q��&��\��6���?�*%*�lD�t�8�a�df��!c����y�?���lDR�y��[w
�,J���I����y�%12S���n{��~B��-L��*�zn���8�?$e�x��g��=�j4+mA��K��O����������.M�z�y5�E5������c�E&�W�YI��j��0-����qo�f�8-��mT�5�(�q���A���x�Y;��jj������_��W^����[���f,+J�f�����|4G����P	�5k��R.$�j��'e��>�W���RG85l%������<����E]�����kb+i�����l����}���'p;�C���*�5���@�3��$��xB:�w��	@D�F.Z�	X�h�����c���D��c�t"��tC	|'8*��^���c�u��������[�
���0�VTN��gzm������v��nJ/
_lL����7��a�E������Z�����
.>X���(��U��t-Y��_I��Q0P4�1�@jE��/��N�/V?�j�:��i����N,W��-y��,�Nx�)�Cq�����w��O���y	5u���DT�p�c��HT�!Z�C��}TR�\
��<�x��\�t>����,���fAf�|Sw��2��X����
�m������2��@��+j���6����+��<��r����������������/�j���Em�l��"�q���i;<6���"�����-D����vR�lK�x�%
 5j�'�
K�[m��h�\dj:����#�����hB]�UX�����j����}���+���8�1��a!E�X���������6t���\$ZP^T��e����.������,D*��i�S���"�+	��#������:w�a�3��\+��9�����3�	�q�����h�k��p
S�Y�n��;qE�5�������g��qJ����MW)	�|��Z+%)��c��n��5'M�p���u�]"8
w�L��-����c�0�*,�'���_��S���lExD��E����&�z�i����!����y|�Q�;�@3k�kN�GT@X%�Oqk�-zjL�@���{����7�aU�~���y�Lny�N,�(�~�����;\��F[���������y�G�2e�����zx��1���$��s����hs�K�3����H��I��d���yl��I�O��1n��S��o���ib�b7:����0C�"��Ufm�;���b�Gl���{�0�	Lk`��yH�`��HC�b����6��h� H1���y����G���i���OYQ�U���,'����W����4�V�k��k��8pF��sE��g�b�|�L�9F�H�i���+p�,�>��������/k�=����j��B���pS/�mv�q�����]#�O��3#	}���x��tAE����~�����z�H
���k�{�����1���	��Ls���8Bg�1������T�P&�����D�v������v�����a	�����4����(��|���q0;�9��=�.P�(����w�h���H���f��[�Xoz�������/��������% k	��l��������h�4�x�������P;�wQ����z-p1�DfN�B�lU��S9{'��j}x����I�c�$��LP�;-1=��T����n@��UA�:O��� sy�`��a�����k���2�u�@GZ��%Y5�c�JX�Z�����M-�(�I�������x���jd1�G�"9�U��\�n�5S��em�i���F$��f@��Z��������'�9p{���iA�����6h��_����1����������6��<���c�����|%+6�)���r���W��9�/����j���tM��a���_�W2�"��
N���WD�����|��D��6P���L������1�(��^��� ��M������������~b�uFR0���zW�9`d�uFx�In���m�^Pc� [����OyL�3ic]q��O~m� ��]�	\��p�.;K@���������G}��t��]���xj�-d���,����������,H�����k����RS�Z"�it��"V�$�L��!q0����&���e��s�XM����T�k�a�d@��W�d
M��*k'^����J�.�0�3��n!EA�=��(�����"�p@c�����\��
�e�LP:ZT���M2��I#���p��Z#�l��w�UfD�R��f���J��L����� �%Y����
!����/))5|	\��0��vYsF���'�	��h���Ek~�=�)-P���0���1����I��j�e���)��
��6D8�;���w���"��~v�-V�	�9������T ���������e6~ ��|�*,bV^|��`3>����t"�c������VQ�P��m)����X(vEM��4����v��������JD��4���r��� e�x���*[��zQ���k,Vw7.��3ql���[��)5~|��z�|Y`k����h�up��3�Z��T�i��m�:P�����
8�&���q6�K�ej����b����L�>eg��P�/1]K�����R��c�
8*`C
,���6�u�b7�����aD@^�Yd�8���9���t�*���<������'��L�����6���}�%9����O9qd%A��:9~��F���H�7l�no��(������9��'�E	];;�`C��z+P
����>eg��
�����C�i�h���X����J�ZnV�XE������)�j�^O�~���B�d��t/�{�?�����J(�:���#�[��JDF���V��_�H�����J��=�.�}����E
���U�U�7E�f�n����;���v��������~�Q���cC|o�X���uY����_�H2|@�IT&a�_��"��<�1�L��Q�
�~�z�R	f�+)�N�EY��|������F
,��0n��[�Xx�
�E
�HJ&q������I������
L������5�o���J��oZ��o�s}T���l(�K�:�+��L=���7��ng��6���kg�lH@��w�1���=\��Z�hss��JD~}]�?�7v�o(��$���fEE��T\L�"��{�6$���$���;o�DZ���n�;���S�Va�M�=����[�>sn������&"1y��{�6$ �&S�i`��1U���A����QQ��S���/�<�
	��X6N����'^��sY��3�&�+b��������T�L.H��,��V��2I��yZn�>��0s��G0m(^�q�z^��Ddd������F���� U"��C
U���(mXbSY5����l�.&�gm��~Mj��x���f�Wap�"��.�y���p�e\�_�����Z�	q�]���������4��!6+��B"��t�!*�)� �X��c��xC
l�R$���.~.��n�e��
����
���=���R6&�uU�z����������Tv���"����;��o�NH$��M����������@1x�O@7�U�,���5=[<w���3	���q��+R`u�c�|��z���>����,�5�D�f�+Q���+l�YmJ�np>.�<f�}�hM�"y�{�~.7���/��}=�mu��s/��HQ����1�ip�a������WG����Gw�Mq����u�������=��\�
i;�]PA��\�M����nQ:�k]K���4N9�1��H��
n[�V��i��Fh����N�;9��L�����&��0��D
AX*-J��O"��-DJ��r��}qzZ��e\-m���/��2�}�G�X4�;�-d��i��u�/@�(�2Y?OFw����+	������R�o8V�e� T��0*)�Kt:�k
�v�?z��r��;�e_�,�����q)�b���1������a�M8�+��6U4m��vx]gdv��di{!��P���sh�_�Y�F�Z���e�E+����6�D�['D�l�����%�]e���]�O����
$���� ��"��Qb��w�����6$��� M������)�������fm���Ec�!���B��-��o�T��;�2v����:8�\��x���)W�B���!�sMp��Z��I�7�5�����GI��k�DN��H����i>5��z.'E�/!4�mw}M�ML�_~���2u��S�0,L5�6��t���I���/(�L|nA#���Y��F�|�u�`��Em?�����0�f@
1���3�IO2����t���49��w��I3n=����LI�U��)�Z�A�5��� ��*���8_��l(T����L+a{�3�$+�����&���H��K=��'�$����X�_���������V���%oHH����Hd���
Pp'H`�c�L�.����'"e=�����_��uu�l�3
: ?	��N,:>�zB4uK����:�C�,�:Ds�	@G����q����b3�v��}8h/3�j��\�$Z��w���CF#���PqJ<�)3;���kZzd����J0tQ�9k��WD%_�,X`�ic�o����R�$bC���Y5/m��\�:��������#U�����&�6�x�+��-�2�=���7�����1gj�~%n�5PI��{S�d���U����lv���RQO��U&L����J0ZSf<��=��}D�X��v���N��k��,�KG����a�\=�P�<3(�,~�d�������s�$�7_|��6Pf��(��[������
	�#��_�I�V�����h'A{1���$w7����5�U�l�����,vG��S�����^�2��������&�L���I�����5P��q�E����9����W��w�����-��e�I%�V��|"u]V�5�����_�@��y.�*��t���n�M��i��������`���������m��a�����Zg%���2���!�f����k���9�gcxM�M���:3���s4YX�G��m�����l�������"�6�#+#�� ?eCQ����['��H�Mk�������'i�yB'�_n�!*�MqO��:�w�d���<� �L�+��B}���$���4J�[��s����(Nq�30E�>f}���V�>�&���*R�p�oKty��9�Ml��7�����S���|�<R����/E��|�}�:`��h`���B���:8���q
�O[���Y�(O���,/�B�st`�^~������=B8OS����p�e`�03�J��m�l?��������9��_)����f�����0�I �������p�hg����<�I��������.���4p��L�0`���������Lk���;7l"��Sl������:��FD�p|z��r�e2|�n?��M"���)����&����P��K��������@�?���wax��w��.��j:l\�d*��S��O�����_N��5B�B���lx���@��C�lD�6�ev����dd	�9�������iPq����lJ�8����gC�����5	zV�Lf�#��t�^De�9/�{F�n(���>	�/�*��`�/�#@z�~E�2Y�D^��CJ@7U����g�S%��xFl>l�1��F�o��BR�K�O3:`?����&��p��B)��l�\�a���1��^TbA	x���%��Q[O���t����%�8������a���V�k'c�up)���a���=S@c������`�����}6_n(���j�Harn����b���Z�]����L&���u�Q�Z�
���]����.��H7�9Z�`k��"�6�����n5���i���g	)0#��U���<�����G#��Nc���
�y�l��-��%*�I�'�ec�78k�;>;�����)�X��)�������������P5��/u=����>C`/��p�W,����V"�nU��<F�y��HD�]M{u��{�A�X���s���7E�r7�E{�H��H`�x=��*�S4��H��E
Pn4Z|���t�I;���9���D���U�P5��0�.��j���KW"2����5l�����$ �Z����G�����2���������U�%P�����������cC?;
@MAQV�}��XP���k.��HGHt�����
��a�=��:��^'����������ur���\*��ggZN��{~����k#�,P�G�B���"	�����TE?�hnG\�x?��ecS&�./V�W7���H�Cm��x�c�DLo7�����u���!q��[�	�B,}_����}�o�XA�Y(�9/��<R��X��p>�`Pe��B��P����������!�m���k�j���&�o�Ox�g�����!�qv}	��6D���\�:G��D���FO��N���t^���m�6�`S.��������[:�
�	��]�H��bvrmv%�S�c.U����~	��%V�����(l��U��H�h�����U�lPRU����+�pGUUl���Z��Z�n
����}{�Q��s���E�����L+�q��6Q{C��$-�
A��#����,��/���K5a�}�Q�*�~V�4���Y������1M���<�)L��P��JS�]�;�=�����_~3n�/������F�<_8m��z?;4��g'���|c��:|i3#�0�_�A6��f����M��0<U�~���l�E����z"���~p���[�OQT�pTMM�n=�k�������p4Q�
(��|q��sU�H��d}��p���sXX@�������]���M�F�z3�{[/F���d�����SC�R�Oc��,���3B����%j���?���$
G^K�~��zx�sd�k��d�"�2�sO��
:��v!%�7i��P��Be]\.��d�,����l��[�BkN#=[�������YK���2c�Ce2�Dy����(X��.%���Ee0,�cz����bS`E~��iZW�e���+�^����P�x�c=\A(��qo���Axd%��4O�&��F�
���C�S%w~\��9����s���$���^;d��{}M�����J�x��u�:�C4~DkL�R�������#x%�O�k��?��q"�k�� ��R��������:E�eFa��6����X��i�9����[v6����|Zv��f%��K��7��V��\+�����8�I������!ft�xdz9��A�h\
�v�|?����-��x�K�;��@�$��5(�oO*�MU�\������D�K��S"%����l��5#����YF����������_������[��?�������/�s��)j:i���;�������5��-�b��u��_�n�s;k
^i������#�;�H����A��H���*?���M�>;�������<��-H�vQ2yh��c�,�`��+c����7��c9�A�!p�*��f=}v��	�������PX�����$�{�
|v����%�Sj�+r�&���G�d��'9*�~�)	����y�f��G������B*c,YI���EK���
]	a��Im�V#}WS?�/,���}+>	a����	�T�����P��nJH��:8q�@U��b������>��f!Z�}	a3!��	`r���'|j_z��7�u/^t�,��Xd��Hk_�Z%w�w��
���J�����<2Ge$C�j�<����j����HX����+�7o����������nK��Z�&�i�4�`K3�$�-��'�	��3C����!MH��~�%�'
i&"�.�iGq�S��
��hG40���P�b�^�hFW$gSNr��1;��kv��3�hK5�t��lU�,d�4���"�5]��
As�@�-X�I�hj�iC�U�r�2|g�|0�����Pu�TNZ�M]���Mm�[{�
�������
[P�Q����g��
�n����8��DU�IB�����f�������T�����}�������k����p�Q4�+R����em���e-;3�5��������8��fb���8�|�� %ZT.&L�o��M]��V>'@��a�1�� I/�G�*��Gj�2���0���"������~u~er0(�2m�<�MG�c�L�*��]������.HSG_.#?�m�&5���&�1'����hRM-hQ���Wh��A��D`6U����f����E�����j�`P��r��Pg5��,���X�_���"U�iN�������H�N���NpX���l����f��LD�A�nM;�4k�"�sa_�����0�52�GvRu�H�4��n�[�D�o~�K��J��636S:�D����T�L)�mi�m�U�%����+����$�H��lJj&����0	���L(H�����&�����p�Nn�X�������$��+)�K.����:��e"�|���!��E�1��xZ���&�;��?�v�dw	��i�O�1���m���-+�^��X���2�L��c���d"r���s��HXt�"x"v:S03,��w��g#�v����<<���n�5T6��Ze�C9l����	 ��H�Z���
��2�F7dlvZ�T;��:r��j�[�?;
@s
�C�_0w|a(\�	7n����
��dsQ��N;���n�^�����K����8_?��1M��/.�\��FU/t�BD`E���V��Y�`"R{�SNXG�y��A�|����5:K�+��-�
��K�� ��w
����n�a&����:�e	�Xb����|�>S;���D�Nc������f�C�� G{����D`aZ6�;+s.;0��Es~;��|+:��L���o������gc��7z��_�c�0������r��9rF�����f*[5���=u�������M���{j�{���\�����V2x|���9$��|������}�J�&~��sRI��i��E��5��A[��[��N�{S�!��*wY}�M�iu�^?��4x	�==0�<�`Y����T2��*��~�5@	 �h�2SP�L��]�z���*M[��e%Q�3�����MH�^�|��Q�E�'8����y��>#E/�+%%!�Xg'I�,1OX@�g�ec�^'a������=]	����
��t��]j�,�f��Y�[��9��7��f'~��I�����D��}����=M^-��O��g0NHS![��5��/sc���d�&c��:�_�����Bf������2/H��������M|X����W(s�o����I���i�q��<���G���b6#���:��	�jT��/�
g�o��,F y���HUa��~-?;�[b��e�=�)6"r�^�>��<�+����"��{�Y1�z+�~)M��0YB��K��Q�i�	���qJ�����,&1Q�e"`��Y�����	�7+�P�#g?}���
�b?{��Nk&([P��cxY��h�Us)_���*[d���n#2��
�!��"/oFI�Ta����l���*��xd�����LP�~�qb�;��
	����+G>P�c�m�M�GK�D&��R���~�n�%u�=�72A������l�"�|{������K*_�]�d"�/%��	��=��� Ob=�3����.;������|�@���nudy
#A��J�����t��a-�Sc��N�����)��f��dfJ��X.�
iz����5:�h�X��S�&0G�[=�5�RM���kb���YIja�C��[3��s{��ja'VYFH�~Y��8cC��3Mt���q�k�����6e5'�f��9�}6Tb�UD\ck#�cj~�����5��gG�~���u}���Y���`M����/���]~�����p����Fm k��9X�g?��z=��
$8
�"�4�@������&WiA�r���f��t��U��}h���k_��Aq�k����a��C7
��%R49������%8i�iA�r1M���:�*9Q��za=3`������gE��0�[��3Z�]����|�a�w���B�)��Qu���A~!"���������JB�~�EV��<L�O�]qA(�-5k_2����$T+�l!�������BD�H�x��&nH��3!�l�����5���|���0>�^&|�����F��Y���$�{eB��YS\a��=�MUZ�������2��	�15G,>Q����s���w�D������s�U����(S��Y�Z-H@{�����V	����|� �J@�\�Q�$�rb:�A�Q�5�����a;AU��B}�$GS�2�,�G�K`?z�~����/���Z�x�� Yr���~�nK�B������
	���w�t���,���/�k�d��	���$@��AY�V$���^7t���gE*��^Z���]	��1����U����"�����H���T>���~$���+T��v����S���^e�@���'�a�VO����M7��'_��yx��
-�!�$��9A�EP��~%N��P}{�M�?-�R"�TWKj�9��P�Qm�yZ�t7$���f�6�5�O"i���0C��5����.He�Uf<��&�PnE����p�k���NR�
/n|EgG�.���r����B��Y+��"Q�<P�sX�R7��f{�:v�g��c]��dpg��{V����k������G�d���~��b��Eu������>6IQ�G���A�+I2��)(��H�/:^6�&!<�6fKx0q���� �V�����z���	����JH��J����r�,�V��X���[�0eZ��4��I�Q{�*��lH�/\an����Hd�e}����3����$���p�i��"y�{I�[���2�VX�)��<���L�WuKNV��U���(�>9�8�hc�Jw�',oppBV$g�N��= ��9������d&����*O�����X�2*J�mD���\���O���w(6ZV����q2�n$IV70�^�����F��K�
 "o`����yfg�.~V��x�E�E
-a�"���pc"Z�8F�`s.��	�o9��ZYH[m�Y-%q&����X�k(Jei%�o���2���gc
<>/���2��j97WT�&S�u��'�\_�v.�+<�S�������P���6�'�}�De�p�z��+]�|eC_���b��)M���A����g��T�)�*�o�)]B��?q��L�+	�����5!3��F���]������#�;u��>������A�q��]�����,c��_��F�A�q�?��$�����4�����md�����O��g��7m�5Sn���H�)a[G��5��d�!��E��~����A|���������e{�����X�f���������8�Ql��/�4\w�?9��&�~r�����^
��fk\����p&Z
��i&t�g�j�+oJ��1#l�aSaAC[�|�]��'�������w{����.�qu^�7E����V}�����o��SK�!M�=���-��/����_���sR[$[���*�g���a�i8�B����(�y�KF��������-�r���>S�������/8����c��X.��������/�/W�`\���/P9^�Z���������\p=���Y.8����#�$�t��\����� �F���\�sMB�����^p���/�rUC��'j4������w���O�������x���8�N1��:��!���N��C������|�Z�zW���xE}��Y��/ar�B�(�W@�Wh�	W@�W�W19\Q�w���|�����n�G�_-w*�������c��K��k���DB�
�d�9^pf�42�E�^5�HM1�=k��j|=�J��a����>��1B.=�)�����+|���D����8�+��
7x��y��W��#��
9�P���#��
;�`���������#��s���u:��<`�+�:�#��#H2�>��1#\��:���h�w��9��a#\q-���t\��.����o����o~���/n���o^
��W����7����7����7����7����7���7w���7o���g���/c��+c��'c��#c��c_���.������{��������4�1����7��G��������{.������{��e�%�1����+��^�_b�����D7f^�����+��Ly���]��.~(�8��������<V2N]���]9�[��& ���,1��qYg!?���,~�$6T2�%��s������T��q�I>E�rJ�H?��qC� ��(i�K����4�����+k|d�[���T%�J�%�D�l������Y-'B�.�*%Q���y��2 4����~���|��p�]��]PP8�z�\���uX���q]����f}���e��������p
���|�<I~%SXi��hTw�!����<�2h����HI�����\��Z_Z�=ZAth��>��mH�e�y��wu�CP�����8����|����N/W$Qnu�Ydl�'*�����Yg�7��g#���V�Cy�W "�]��D���#����L6�[���Pa2	����P��='���P����_S�n����.�M����T�M�y�b]Z,'��,(�~�'`��;n��DF���R�����oN6$�b�>�	�@���Lt(Q�����}�0������.�C���e��5E��Rq�E�hg&����N���,������C e"�.���6�Z�b��Z�#];�������V��k��5��I��7���H��[	�i?y!OKT'��H���2z�f����7��7K����K e�x	T�bK�����{����wl�T3��yO$z����wK{��o/N��!����^j���g#�[8�]e�S8��?\[��zR���~��Fx�������FX:��i�����q�r��Xi@?;p������\�+Q;��!����.(���������� ���F�@�8��� �r����1�as�A�82���\����p�L�DP�F>�^�0��Y6�Bu+�$�!q����5��P������?4/�����B+�y�xMd�d)�v��U�=������l%8H��=�=�H�������L]$��
0�{������d�"le	%���P�7�B	>�pbS���p�7�;������j��|2	���t%Z���^���`>�:�H��onu"*��??
�m:{s��|D�w������Q���m��)>eg�[5�N��'3t|v������D�������@��q]3�#dw.������$�;:�����0���G�~��x��l�P��i�[d|�8�$[����{E���m9�o�H�(^��@���gF�D�X����0|>�=��qr;d�/` �[!��!s3�gG:~�Y��O-iT�E9-��_�N�Y�B
�I��!���6t���N�b{<�������z4���H���Ds����1���8��+�>H�3j{(�+L�y�/�NKu��s���6��vn�U�2G2}n�1%!���t�O�Y|�?���HX:���^��i��+����Ns�"�c����v��������B=~A^��� �gG�Eo����n��w"��
L��;�$�C��B~�q�^< J���t�{���t_���Py*7|*�����Y�����#e���s�"qwP�q��{��~��� �Wu�g�LUi.}�\B����v�5ncu��	.�����Y�5\p�
M��AN�~PDp���J�~N���#�;`��[���Y��X�B���x�������
>���[���������o!��l"N9E���p��X�e�N�o-;>����|v�#��:�<����J_�OHC_�ah��=V���/�B��V�O���td�\<!@��%���x'�7��y�2A�k5=���	>;���!��G�$��8�gd������:O�O��-#S������s6���:C�FE��]�S�l�� ��K.�9?��]>��.�V%*����17_����T �t�����y�
2�����9#���Dcf2��k�v��+V �Hk-be	�x�:@I�Cb���26��t.�@v������}$���1h�:��Vk�j�MUh�/.����
AB�^_W i��������0�7����[W<�%���l�����B��Z�.���y6��x|������k$�"��>>�<��VFhU�|�.��>��lH[�A�_��#��}�_7�hd���;��S��c@���[��l�B[.��R"@�gU���b��ak���8������?�5�����	|u��h����|�_�A��g$K#�"�w#`�2G�D���u�A��$
����$a�
����@�A�9|C_�]�,��z��������r-��$�G���\�=w�*�$� �=F%�]Y���������)�:�R/[��v������8=Y�[���b���� �I)`w���O"�T��F��B����.�(�RbG!���}�~E�bb�����X%}�5^o�n�z�g#�
;Y�w�J�|v4.|E����&@�q ���{�GY;��\����b*q��k~s�
�0��J�|b(�I|N�)4����g�}]IT&��xkx�P]��LD����M�>�3��i���%JQ����@P�L�.Bh�Q�(�B�,ZG�U�+�8�g&��=Tn���
��
)i�{�YGR:������XE����0�"m�{t���(����Hd��w�N�i]�2mHU���p�*�����aESI����(1g1�����~���������_����%����_���F��'#���	�����-{Y�x_k����=���W?�|K&o���o���n�En6�������4���}C�=�5
,�In��"L�>�|�	��HK�����!�Q���TG��vv�4b���3�����E��Y_U��Bu/
2�����}!"#����}}$�i_������S�����������e���
�i�U���f�7�M�N�d�
��v<3Z�h���]/J���i�7$5�x$�3��������2������`������b����]t�;�
�����Y��������/(�+����j�W5�Z��'8����]>�Z�{\���iW��l,�[���{1W��^��@�D�2�l��#0������R����;���PI=��^r�Jg���B���G�5��_�=�&/
"��K�Ikv3j��13I�X+�q����z��C�E��������C��/B�z���fV�-@;��xZ~���J�����d4����nH<�X7<���1<��]r{(�}�"��e�j=P�������F�8��qE�GY����������n�����H�z?��u���o�
	oI(T�����>�S!��D*�|v$@��e���.j��+!.��D�'��'/�l$���O�?:J���v��5��8���m�{*���w���g2�@��|_��������mz�	�8�/
P�R�aZ�P��_�1��^�+V0�B^��[>���M����:�Tj�~�j8���w=��V6�uo�3���M���#t��
�vtj��~ylW���9�u���b��zx��J^~q1e���s������Y����}%��8�$�K�a�����0�P��N��e`:�(���O&��r�<qc1<�#q�A�~~����~~C����7���z~�/3���S��feHH\����15M?z����B__���q0��*+�?�	st�q��c�L�.�x������������y��SA�.�h�D��
�����(�e��QvER����e����NfI|�W��g�����'Y����Z��]��D6�����
D�������v�]9��,��y��"p���WV���W�s}��"X�����hN|���1�p_�P�V2���x:[�����Dt��0����,D��������
/��9��C[ro4i�n1F��mhF�^I4H�a�nE"�deF^�������g-�x����	p�����N5g�.�?�$�
�2"cb0�w+���B�n�G�3�������0�����P�(�d2���"�Uw=�]g�'C��I�G���(��>�V��k
n���H8��EA<�p`1��8����Z������6T�uF�$gKb����^�������t�N$$�'u�e��edF����[����>[��N��[��x���8���[������
�;X����:W|l��� �-7U(����1G�H�G&k�z�CoE%�'�x����f��_�������W�~0W�����~q/�qs~�!<38�;����9��t�����L���O`�^}��I�q���-8��p!]�u�U^�6WT@j��`�>���3P�.2X���a�5�,d3c�^�1-�}�?o�E,���R��v�.w��(��� sB7Fmp�����`	�<��
�5��J��M��#���o�3%���i�>��F��Y]pI7Vpx�����x�m���o@��~��������v:�����p!��������b��t������X#�GE���[kj{L���
e���B���p��g� �9j:A�+o�o��O�7��^^�����^/��c�
% �������P�Y, s�����P#=�c%Y.���QfSu��
�d���|�+����Y��Z��/h���=���#B��/����
Q+�?W	���g�{5��s��3X������N���e�V������/�Z=�q��b�;S���a��&:?�g[*x���c��4��q(�tv�n�h�.P�w�7
U�Y?i���G�DZ���y��F��C�2�s5qec! cpJ,XnN���#ne:�=���e294<:o�J���.��������Cp6
�O!�
�C���n������%��|�g�L�.�g����h~���	�����k	c����Awfz��Q�1`�����/�KN34����,�d�����F
�*��XC�Z�j_�|���0�+p2|a��H�y��2z��a>L��v�p��~�p������9m���U���^�����.��_������m��n����@F�Z�k��u8�+r�����HXS�����CY�/��w��S2�g�������
���Ib�l��V>;S���k�Gd��,e�,bF$��Z��<pv����Nt�q��o�����B�m��N��=:���/cs�!8XdgJ��u,�UK�E�����2L\����C��6��Zl���4-������.�TkC`�(_���oe����"���*\��������j���?�2Ms�"��C���e����c��~�]v�z������a?�XQ�X���k�s���w���D�;�|Ggv_D0	�;���#	���c�[��m�������������l���
�!��Xo��s�'`�!���!�.�B�2�PW�
��������(aMI�2��3��3�����)�,�U�b�?�2��H�w�)	��
3���D��2+R�g�����PN���[�%���#�d��,�������=��v���t���� �)�Sm�G�$+�Q����.��bmC_p�����(��u��������K��heg_p���;��W�6VB/T��~��!��m��d���G�*22����
	;H�	�H��������XR%D�6=�o4�������mR%�������nt�(dn�`�l� o���*d����K�������S�Sf7<��_h��^����I�I.,,����?B������������3�Hg�[��?����:0�f$�� ���k6�h==�b�����m��oW�����ic}� �R_����l,����5+b��!F�ft�n�0F���"�����6C�����y�o�*���
�����;�gG
0"��J;��4�����z��YT��)L�]�f��0���=xr��fA_�{���v\<�rC���:h��������Y�Lw��T�eH>;c�k���|�x�����x��^n���+���<�F�C���p�s�yZ�w����n�f ��.���v�)A8�5�
^�Q�x	�|���8}��>�|deB�R��:���ME����_���H��ZK��e���4���&e/�P����h�Sh���������>�s������r@��~a07�C}SA���)�|�kiO�*�Vc�jW�$���(��,�����!�j���������fqm:
+C���}��x�]j��N�Vs����B.�v����2�q������������2���K�0�
�F���f''�,4��-�Y�9�r�AUp`x�(��5��qTG���������w�	���M�:������)��)^��w��q7f�5��\����lRT&S��������V&A�Q�����;�+C���>�y�qH�����	W�Zs�:������n������P�O��oc��N��F��a�b��p���6����	��]r5����������e��=:��b����pq�������ZbJ��z�bV�r��f332%���3�������s^V����V�����3�{p���*���3��L�vx���H �p�n�
�����e��z����X������lAP33����
uh����I~�L��6�&��U^�E��\�n��s���6�r���MxD���Mn����������q&:���I"y�I\������G@���oz���)���S}5�xp�E�U��H������,l(p>��^]I���M�Sr9w�ALs�����O�	�������u=�"#$��Y&���|�/�w�+���p��7�wH�l�d����eT}���;�D��%�[�2:s��D��Wm�t���lG+���]�|~av_a�xsW���ToH����������9M_�qW3�2�d����N��~�-�-���E@p���D���a�B����jS;�y���r�.�\'Ll���&-�p4���S�hO�TGI�����"��EO��
p�<��	�;|R�I��j��){�=���_`�9����&��:`c%��v�����Zmg���z�e h��s�n{��!�cp�sm�4��������s�QX����������eC*k&�w���a����?����>�;V��b%.��]��2��l����?��/�����!��P"��y�����+�M4S�=+�����^>l	S�^�n4�0�Ht�e_��=�`��w��X\������Q&A~����Cu�����d>y;Wq�o�����(Br��A��
�~�Mc��u�����6r����7 ���4�f�AC7s?��d�?�	>;�k�nX�A���#��F�wL�����0O�BtO�l��j�^J�^�I!K���������nX*�R^��Y��0��S�-G�_����������S�h��[�0��qG
�
aX[FM	:jX����������Z�����LFFF�-:K-�c�hY7��a;C+0�=��}�>�����Q������b�g+?��G��L.���_�cXt/5���������`�y1oV�g$$ng�Y��k��%X�i����.�y�
y���`dZ���4���l@
��D�����G�ro�����%�S�aJ=�a|���s��8���������������Y��V��:j�$x�|�_Rt �4�b����?:FB,��H��1�Z]�s:2wO���;#�Z�F�,B8x������m*'���>KG�Je)���Y(}�k�h8q_r����5s��I��������D(�R�orx���j/�W~EdO��ZX&�M�p��<MG�?oHoL_�Ux��Kz_��U��v�P�����C�!������(oP��QZ\�[�1}�OEa���� �GB�e�c�*z�c�8fg1�;[`tp�5�wW���������� 9a��#�w���Z�1�����ak���1���d/m_��������'���mS��y	,
2�:�g�Z�nS����hf��t�����8B��i/�� �6��L��{c'�;�`K���m���?|L��;CI��1-B�4|�N�x3���5�u	T*4��#����4J��3�
����^}C���=+9F,��L	:�!3��1}�z�E�m�������F"����"�y�,3�'�*/��A�b���a���- j�GG1�I��+�2�����������m?9a��e.h���$Y��2q�|���ene��}=�[���A��A�O7�B��1��L�i�I$������*�4�47���sg��
����Jx���|��'�|���
�9��}=��:S���qDG0���HL2�>;�
3W�%�|0�wf�x(�YY5�~�fK��
sc(�Q
����a�5c�r
mm��k4��	�L��+l����\��������+RU��.f��C�����{w���N�.,sAY�mMHU{X�W��q���9��0���@�9���GH:�0�M�$��	�@_��|���_�i��,�oV�D�	�
���4��'����$���+R���"��$��|^������3KI�G�RY�2��7��`!��&�VA�!��1j9�u��r�o��i�=j�[_k<Z����9�r<h,���^��������_&]f�W�@e)$,��LoT��ET���)J=�Z�0�Q�������b$�;���r��gcF�A<��@�������P��J�6@�����I>\���N(��B|m����zYQV������0�W�1JTH�WbDP(.� k'Y������y�BB����I�8ZS���P����j,bB)&�4�	�]���N*��I����=$�����x=|�Wg)"�6a#.+�����Y@�����sqT�3��$yA���B�*x�;�L��3��(������[y<(���n���g�������j}��u0|�hX�3������5���~�����C����w*Z�m*�:��\�T�3�p76N�(��du��mm�~k��y�\L���7�c�� 	)����[67�!�jZ��^'��4���4����<�e�����L��$��Y�0=��l�o�	��usI��:\�����<A�]����������R���^�s�����K�y��
�g���?���-�@dm������%��r���q��Q~�����n���i?���G�3��y3����j�>��(73j��[)�
���F
�xV�-�J7q�8������9dS��.N�Y��f��e������%Xgh��07�w4��`.�m#��6v�J�YTz��l�	�I>��r��B,M#@'������%T�����<2��|~aVKC��5�o�6�H���B�W>
����%�mck�E �ou[n>`b���X�O7�A�
��m���x�%�s�lK�Z��������I�{��������2��_~�Bgi�!�aFz�OG_1N�_�����I����)d	�y�}����1kX�����P�w%G��^�������)�5�7�������3c�Y�lL���z6�������*JC���)n��;��L��7���c�o6
m����\r����kscp��:OK����1� cvr��N������xrFrP��8$�O+_�1RG���y/��A�{Q��L���J�����XST�"�d�J�|��������**�`�R��*�"D�GRi�JK*]����MKcQ���h�h�w��St�2yb�g|���:���p]um:.�|ci�.��0U�N0�����po�^���=��i
�����|�9�@y�N+����:�%2,��O�������6���-#��p��I�r�f��2�>��W�������\����r��n
�����L�
0V���r�l��ll��:!��$������	�a[~���~>�������g�����T�����aO{����m>Q'��a6��Qu�fX��Ob7qG�Zu���?#��6��Px���^q��R��&��0��:*��3����<��8o�I�lj��j���Y�W�����>�CS�A������Y�iy������Zf9��e��;����r�c\g�r�Cs��;T�w�rdS�r�c��*k��QN}����]���u^����x�������n����v�/`�{�����m=�u�:r��u��V�T�t9j�ul����uL������b\�i�M��V�8L����V��X����u��k��]����7�Qn�����7��K�(��O�'����
��?}�������z��
��8��"���'Lo:�����/�q������_��8���]�U�������<k�x�QEr�%4t��	��������A�m��Dd���`�l�W������}��I�������C������!A���L/t2^&�'�_����%�K��7���N_�l�>*.�"��r0y��cg#����cT���oG%<�X:g������p�x%������w)Q��G��l�8?�a����Lw�xP�":��"s�f.%���>U�:�i�nn���$=mf��
��{��������	���\�Mv57�p��d	�o��X�[�T�Qi	@�DR�}o('���u�]����wc6]dQsz�`�j��u
������������,GC�j�����'-�Lj��<(�j�m���dg>����4����������N�'"�Y���(�
�)�KGE�4��1�����F�oCK��}��r�6Rd5�����
�>��.��x���;��+U4Fg$ps��h	�n�D���'�;��%v~��l�L?�M#"��;��99=;���i��C%p�����:�#������$ �wCO-���r�����2N��&�T��.[�_���h��Xj��������?,�>��.���B�>���
���j;|���-$:8_���M���a/��h�����������*�/������
.�k7�d,{yC'�p��M=m	���S�����������!�"���L��SI�0�tb�#~�#�����;u�@��zt)�����am��j�[�?�����_�l���v���Dky���|�*B�'���'�=���W������Jf{�A��6�-@��
�m	�1�n:f�m�j��t������U����y����M`Dgc	����P�0��+�}�w;p?u
��k\��'6�~:Ry%�p[��"
-��`B<tZf�F�h�[����-�M<n�&	����9�C�sX�qk�\dNPfSmG6��%������<�"$ee�z��j�z���J�#�,��t�(�iu&�u>��$"4�G�������d���1����9��-���~�ZP@�S�T2-���b���`����5���}mm��q���C1��H�L1���1�#��l9�r�b.�	�g�;��\�IV�����]��������/l �Y�c,�r�xy�]J�o8G��D�l<�%�����)�L���������g"�W'Z���+<����&��9��3#0�H�t���������0�?���L8tm��kr��x���U�������?��#
- ���Oqk���/$'O>�L�,x
2��GW�<]{���N4�(�v�_
�r��#'m���A��cw��#~�����k�������)s����G��L�s�K1�f���:0o�����ux�5���,��em���'D]m�J�����z��t$�%$��~����dm1�Gl����M������&�j@DRF���f A�	@���M��T�z����Gl��:���}-eY�I'�����bo�*X-�����tF���3#v����*E�y�A��Gt$`7O���:����6���R;s�����2o������&bF����S+�,��q���u{��#���;fF
����|����ECJLU�{��f����)����n����;��
.f�gB���x��T-1yP���JB��'��A#*����w��;�nKEF$�*�Ow�Hh-��A�����������{�C({�5����LY��a"l��,���L^"�z�Q#"�{k�/�������
������b�`�����a�h25p�H��%4��{mKT�����m�`���'���)n$�f��;��:�{I�*��:����MAL�
A��2�tM��J���n���i�g�9���74�'M�<�p�{?i�d�����L6]r�eo�Y4���Y��0G'��z���&5"vZO"qX��j�d1�>�Er��R�\�.k�"]mn��M[�F��g@������"�RG����}����!g6^/�AS6��L�x�xlfX����$;����Y�JD��9p#�	l��������Z�i�%������d�E&�/L��)p���,���?���@�:��2��M�9!��a�vC�2��>��N�o���=���=���S;l���������`�L��&����&d6�"��Y&��;���nH�;���;��C��JD�3�������6���fW:���������ea������k�}}��;�JDu�{+�
����,�`�7�l������<&��l�bUt�
]�)[�U�F'-,bu1e�D��;�������g��w.����mJ����7,�L����N��C������o���Q��d'�v�T�F�����E6m�9��������<v����VL�V����b���If�*��Z����}�z��n���2#2Z	$�!�<���ai$d�M"�� �m�/	`��:�pO>9t#��#W�?�3f��}�L�]z�}gU�������}�������#�M��N��WX�������aY��aa��g�t���b�Z���"����c?��5$�c/����T ��S��������m��3��
�x�*,���0p1���zV{'*���O� {����Q�� ��V*yT.��f�)MjD����$prN'"�t��ep��6Y�%P�E\M�m��ZQ��n���\����JD�A)i�j��qK���D|�M:����>������tC�c��'�w����9M�c�C9����n��N&�p��%0�`6M��W/����`�D�u
����5yn���������"i���)���R`c;���a�?X
��sb��=}��=V#��Sc_j�g�i7>[l�����-3���'��F���]�������~�%m	��w9���$sA��b0�R��,��{C���<\�3h����%t�v�"��c�p��,�,o6_���{�I7D��h�{��c�^'Z-+E=%��b��#U5�������]/��5��D��n�dG�#�����$��x��s��������U-����/o���|jOM�'"��T�m��P�P����j�K���f�p����Z��o4�fz8��mN7���qt$��&�Ut���T�?-�e�@>	�K7q
��cB���	�cZT�r�c�t�%%�0ld��0���n��3�H>�S�%a������++�j���"�����H�-����>��t�����t+������P��>���?�RQ�#�G��m(}2�%F~��ey3�LLO/_dc�]���<���;X;B��\e���.'�V�"�p��L��B������������%������8���PT��bJ�n���H��� ��_�Q&������fpF���WYV���4��-/zB��H��5g,�������o�1y���5]	(c���t`��b�L�k�����I
�hQ����s�W�9z	�l���M^��>�����]��<1�&�g
FW4L�;V��f�!��0����� ���&|�����n����`��x���p���8A#"#{�������1��H�?��]�exC���
+,�U��6UVw���?�m]=l;��������q.�� ���m`�k��K�;�UW��d��������jQ�>�Y:�7S�Vt.Br���/��b$��D��+�����F�epF�eC�<��3��iA�*��q'6��������� ?���He��d�3!(���S�����Z������hE�X+��������F�.>�w���R���l�z���h��Ky�������7��N�n�1�4�GZ�������6���
�	&!���AR`K���lk��'f��L2��c1����Y,�{3%�]��R����3}�<�Fn�W���!-�W����+� ��I�G��p?��oax_+9�_BG�(��y���U�kT�:=�@G�R�|�j�������sm�D�����S+P0��i�V�;�D`��
-��Mn1\hF�c7�w����>�d�w�iU~����w���s��Rz7s�:U��TV���P������R�����d��	��t�o��t�N����KJ�#�0561
Uj��0���E�'|�h)���>���.�������2����i��[tX4�q�M��p��dK�
:�}��A��)yv>�������t'/��4��/,U���b�!7b��3�|���N���]�M��6��_r�?����99q��2m���wF���e��B������h�����H�����z����[���rKfO�V$�yW�|oD�o������c�]�v�B��;}~�S�s�(��,]/����n�L�f����!�,
4��Uo���!:I�_yC��{�k�y��I��4��7������*#�""+���<�li
��b�TF,`�*@�\)(�q!��5�����A}���A��>���F�ZBWd1�:�
@gjxY��B���^HV�
 &��]���N����E���[��UW|:�����M�W�~���$wD��������LG�(�t��[
�q��4��q������f�)���'	A�5���k��j����>4^�{y�TQX�;f�:��`c�0/}!�o�u
��E�n �QlI�YF_TL�/VUL���t\�V����
����sI���tt[��_�
w�����`��c�?�c��T�]���P����u�u��)w: �/��hN�,d���]Q����K��G�;��E�{��u;	h/��v!�����B��P(��xiv�dFfmc��
�������e�o-���G6d�8k �:���N�|0/�	�.���V���H$Z�MH�������-���O&�*����
���j�\��+���:xf��	>o�j�"�����6�h�Y��_�`Y�0��X��o��W�i��u�����N���=�#���4�k5�(�z����K:ib2{�D�;Ao��2�)�����/�B�2�tn�y��-����#�|�8s7rY$�B��:3(�����U qJy�9I������m����Q>�v��1��^H��f	���gy�pip	!�k�S�=WK��C�����{���J���6w?NOl�YV��*�7��#(�&/�1V��~�H��8�|��b�`�o:]���}�����m��w�>�c���~e�q����:�OD�~I�Mr|���h@�����R�"���\�����"�=M��������e
a�J������{X:v	���T�P�a5��i�=�.����]�	?/�������E����>�9T#��8�
U���<���u��f!0�qH8����P�/zJ��|�H��U��<��(���<��~n[�,,�.���<h5�-�x�3/ �O��(MC�>WmBK)����@T�e�E�{<XH��,N���!N��V��o5��]�����U:�����V��D��7�1���S���|�@���K��;|���:��e14����R�Gq�c�M�':&p���s��r��B|�4�����XW esA}��I�y����v0T�A��������������,����t�DW����A�i����[��V�:��
"���G"�M��W0�jr'M��N�������.fK!
\�=
&&���nvw]����'�:k�<����A��
=Bl�VT�@��~��&���C�n&�w�����&�ED�*����WA���X��f9�)X�(��1������D8<����I�f5���dJp�Nn6������	0t��S�f�
A��6�/�����y����0��3
d�hL!���;|v-���8N�1|�\��B�J���o�\U�*�����,f���`���6��P��=>N�k ��aC� =l-%�����:��5T�.��Cm�S����x�Fl>�O��Qo���==�di�������i��L��0����u/�����V��J^���7��M%*��j�m)��F��8`1�j=�����p�$�%���+�'��71�q�uv���J�s*�J����I'>�4����	�+������J��`o�s����5�@:��'{��Z�:�tm��&4�a.�N���6��#�������AX����J��k���-~����d���5��E%�2�[���}7�������d�6���<�m������r�>-�jCp�(�`{�3���*��Hd�1m��X���]|(,#�j�{y9E6�<%q��~t]B����P��L�R����,��g�L���c�d��Nnn�SY���������3�#�d�
0�
�+7�jr�;�����,��GBa���]+��^���6�=���!�4Z|�����6+��{�/������hC�<��k,��?�#��6�v"2����5,�����R��j��m���z����3D�gR�������?
�`(��������Q}�Q��,7���nn;*@Gim��S��*���v�	o.�w��K4����P�N�������o(�
$��^�������#�y����M,
�"l���O��#d��#?P��/���+�j�J`�`�T���JR]V�W7��5�@����P�A�h��*�VOi�Yc���GY�:��Q��'\�,4t�v�n[t���������
���t
�x�+5���[X�A��PZ����W�_\��BZ���\kT��� p�I>�a��eV�
�!��������#-�������I�6�h���;�;	��'w�5�os�Y+��pz���t�|�(|K��`5�Q����\O^�o� l���J�QK��daR5�,,����Ybes~��&@a/�[E�{�T����3�J�C�R�W���H2�QUp����0�{����� �N�ko�j����C��#�����7��s�6���C#Z���Q>�=����,��/�8@�	��n�@��rc'u�����Tm����a\����
9��U�1��75�����=������m{��w�~�$?_8l�x�vvp�dc;;���V������+B���=�	��m��5����3���~��|�4���7nW��
&�fE_��h��|MLGKtG��i�����LA���i��T�u���N��pV�H���v��q#����a�=>6�?�MqEg�nn)����l�q��n��nb�Eh��� ��vh���a�����j���?��-;�X��������
p�����c?���+i�@;W�V�T0�&
�(U��P�,G'r�6������5�H��43�[7;-��*�<��
-�w68��'U�����8���;eT�c�=���4�7d�~#�BkJ�,���p�W���J/������e�����9<�-8��}f�B��RWq�;v����{V�7�����yq��X{y�"���M;����q�0��f����	=f�1���z�k�����g�>�d�y#x%��������&�8���H�c`i�������|�u���6��s�^�#-��bW����U������q)������Y)(V	��KR���+�����8�)����q@f_:f4X�2�����Jt\
��fr�pl��������w��2)�)kR^_*^T��Fy��+R6�J�6�=?��	�$���{^	������_,a�����������/�����S�_����_�����K��>����w�y�; �;���ql���9���c�w��I����M�
m��F~z{8�6�p���fs`��8������G����5
n"��A �rcO�e�)2iBY(�D4�f�+�^h������8�We���%�%t��v_�N�|�$ZZ���z0�56(���dQ����o��A��t��������5v=�P�fQ$i��*h��?���b�������8AD��Z���:)q@�0�hGR/���;S�N��aG���[��e���g���<#&8�I�����rZ��~��&I?X	�Cy�Z��;XmU�n>����=
Y�L�'����l��l�������E��*�����`�ic��j��o���qx�I������.l��x�y1'[���K�]	�r���^j�$���A\��Ze+�����<��X��$��Z�0��/�dX�JD���3�x>���$�;mm����	-DE(	
��U��v$�f������GG	��8��r�?�D��K����l?��� ��7������E�d�zYYV
���*�C0Z�����~������q�]XOl%*��!��m-�1�����S��z���l@Q��(����Q�d@;������������Ca ��v$������J�����v���+��"(��o��Y��lJZT{�lJ9y��i%"_VX��5M?�,[��<-��X�]�*w�%�
]u�Z46��������dR;r�&U��\��~-M.��x0/`��M]�4�JX�nS;����\`���>u��T���Y����6�3��&g��PfV/�e~)P2�<^�M��T�Z��g���;vfW�XNf��9'���g��Y
��Y�����1�4Ca\�e=pk6�
�up�m�,���imDk%;�����������8K�-�����5PaZqH1�
M��6����GM}:0���	�+�jx�0�����[��
M.?�����S��|���
t�6U�%�~������z���V �i>�fz1�O�y#�&37���6u����lj�b�{�V����(i
�'ls�,�Q6$�G���
��1��""3�4�T�x&�~C�xRWMN�[9;�	���k����h�vsG�/���B��X;���d��c^�b�V���-�xf��H��?�����?I`�z�8M��d�F"��
I�H����Hf����gUT
oL�{���|����\V���c~�ji�:R�����]+�tT��!K�T��W�o�Y�A���}|/�����CYW	|:�z��:�<�����mx�y��4d�R���l��V� �b�^��b:�k�����r���-�#�>4���&O�J��Xz0,[���&m��C�
�n^3����xe��/1���1�=eE��.���[�X�V�
��7�4vNrch�{v��3s����
-J8d��"�<����"_p�E�����)Q��H@:�,;�#�E%(�"��KJ�:M{������{\^�~�
���P=R�[�b!_C(��1��;���\�j�]~rc�;�Im�����������^}��Cprg������)�U����'M��q�R�,��2 u2�n~]��yq�.�������hiry�H2W�a1���x!��n������?��A$"?�����7��G��ps05
����+��u��;,U=��[�E��#
��� ��1k�nd:*�Q�up�)�����o����K�����5�k�b��0ikC6����f���+9������B}������R��~oRd�ms��K����3�'VU"����b���N�B}b�@�z<p�R��[�7���t�m��	g�E��3�h���5w�Q����_<�f��G��
]�t`��1����"��7��������C�J��+�(pC��W�%>�g%nH��J2�|"���x�i;�Y�3����0)nC(�v����Y���HnO>5��hq��3�eC?�f���`�^����[>�55��uy��i�.�h>o$���!E�s`�#�4`�2�x%K�����;���Lv�y�#B�r���������4���-6����j�PF�3$�v#y���<��
cO�w0\�n�
>�MAx��I}8��h��{/�8�e�.��]�yo�c��B��Q�M�(�|Q��$�^T���an����(�j{��C������O�hH@�<�%��8���c��U^G�
������Y[u_�&X�2��j�����$�=�85�Q��W7����!
�z"�V��Uz3����M9h����=,#O~�Lk��`�������3M1�i�P�H=�b��{�-�$�pV�|TTd_��(�#��l�2>t"��qDlZ�:6�y#�y2�R�;P��6f���������Tc}o��y�I�o����N���nT1cB���3�k�D�ND�P����k��Dw"�5�O8����'Y��G�0��>0Zr����n�;Ww����H@��AZ�����[5"�V|��\�T�*�Z�s���G88����`(�������=�qK�����	��R����
�/�������G��x�O"j�Z�O�D-���H�8�_�&^�OG��k~�������-h�,�a6��v��g��J4���V�I2W�)����e���~�NT���yp��*����gV��v�O
�����wSG}O�pe���&A�s��S�H��b2���|�{�E������
g�)Za�e�%�,�Vg����4������_{�@�.~:Pm�bx��z�h��{�y}�b&N�w�6�8*��~n[�4RS�j�b-u��Ou"?�u$�	����5�����\e�B��jC��|u�P<�����x���:���29��t�����o�2]6�������@�&���O��e���[7���m���N>I�294��+TK�����V+�B����M9�2��$]�D���T)��RD��/���G�9@��� Y��hk6��G��X+[������Ys}E��D�\�5`o��m1g��ibv7�Lt��[1.l?�eT�
��L�7vL�}��d
����iQ��\{)����!�������>���!'��F���Y>����Z���b�s��%��l;2�>���L39���*W��/��^��YH<�G8���/���}v�������;�
��5�MG��4����7��vN�*�5+X=slA	����.s����k���-����e�[�<�3}MX����WZ1 ��-�����H�|q��'��5�y��*��S��
3��[�$3����{7����������������G;��^)d�I!
���0QR�t[hV7S�Z���7�E�~��|��'#��:Z�E}�
+'��|^dZ���E?a�n���b�� D�'�>Z}��>/�`��R��{��������c"~������V�us���|�-|�$#o�V��WTJ���S����Dk���PF��XR5�%$��5����}0i�������(ZyC8�e���q�h�
i�__w�Ty���uM9��$��d��R���#������[������������->XK���|%�F��%9�N�7R�������Y��
A�LcJ|������'�Tr33`0t�G�������)x�ri�i.O13G������<��*r�u�{lW�i���~�5���8+s��F/����0���a,u���)l)����v�"�K7i`�?e^��-m�v���t
g��F��6 a��]z#�����.�J�B����a�z��#]�Q�i��})_h�y��o[Z`
��>�s)���dE�S�K��������f�5U�1�����z�Lv�?-�a���"��o�b��;\F�L��2}�a!��i�S��hA|P>�\���N�w�il��`1����mBbs����g>��<�������LO�����"M)��k�
�cAT���q�7g��g�i�s��<�����-@�g2�DV���Y%z|"
e_�r�v&�3��{l���/^~��4>�`��${���IO�
'e�X�������r,$F���������Dz��S�o�������dD��|�'l��BV�J�2��mA���s������|`��,����#�"j�/��Wo{v��6Y.���C�(��n>����e��)U�!nC��'��b��qF���@���Cr��A��s�W�m��!;r2�6��f�J����
b�|gf`|�M�f���V�����h����zPGK#f�|��;�������B]�q��m��=�;-z<��+�}�y.v�����I���z�O[��X�V."�VVP�'������K���1�q�J�pE�������@�)��Z&SO�"�`!vV	3��z{�8+��GP���A��}��$c����/���p!>Q�Y�Sr�q�mM�O-� ���p�h7[��y����`���U�s��0���_,e���P�#��b� �[;����.5�R�6���j�AvV	��m�O���� �����?�.��^�oFe]�M/��[�-����w{��]�g+�U���s���-����o>�%���-�ZM�!\��1X�x3(L�>J4�m}�T[]�����KQ��3�����>���3%g��5u��c�+�h���s���������3�j�i��)��
��8WJ�{C�R|	S���
*���h,�:�E��X7�_�������7����`����W~�=2��q6eu��)[���;/#�����;�#!�����L�$�y�u��6�eo��d��pe���S�<khq��g�h��\���/��>�`�d
�C�H����~3B��T��]�&������M��Or;���>R��b��)U��/��h=������5pRGl�f��oY�1v����J��lK1U9�����0W�/���r�_m��o(���5|�:9�.�-@��
y|����':[~�B}���������S�
�9�~3-�A_f��_���?8�1����i�y[����V��7���8�1Nm�3yz�&R���j�~�����.���z��1��c^��t�e���^���m��*���V.�[�|�rb��������=��{���Q.��.g�|������q��{����k�5�q���� ��O����k����W�5���Y/���Q*b�<J�B��>��j�t�V�X�kW!�Ud���������2�t]��!��rdB�1]�6;�1]���z��Z���o�f�1]��(����{/�.K��u���\�u�q}���^�Q�?z���9����6�,�b�"E�!��t��|���1��]��ty/v ����ho�c��V��V���[���j���nT�x��;�b���+�� 7�W���^�����+�|�-�b���
1_w[������B����_!��n���u��W���^����Z�/,~��~=L~1�q�y]_���]�J���/v>����Q�7�~��q}�6h�w4��>��t��G���aM���q4�����t��G���]M��sq4m����t��G���YM��cq4-�~��t��G���UM��Sq4��>��t��G���QM���=9w��P��ll������H�_�Dr(�z���C���-O�_���z��Z����x�����T��~����/Dr(�z� �C������Z����G�.��O$�S�N�60pd�I�_�S����!"'{6�(1���O��Ee��]�C��y�������`�)�'R��>����3_M�A�+k���������1q�O���A�C7��2I�M>��O"(�~��B50p�YH'�Zx��<���,�W\�q>V$���d0���U]�$.k�?Iq����ml$��M�RY��'��T�)�N�������1���H�Wh����q���"�]�$.@U`�t�L���+��?=���"��s{�,��F��_{��:Z%2N��$����#�U
���O�N���gai���FVHe�r�$�V��,�Z6���;����x�6����/[��oJ^;	 �.DY$�4�sLu�����,��X�a'���!
|�$�N�M_�DXZ�p��<���]>8�y�lB��0i+�%�l��I��Z����O����!;o[����0p�7�kDK5�I�90�����s�������(��"'��inNe
�:�e�m�K��o;�k7d�f�<�
]M��FG��15"�����X�����h,^�$����K)�?1�jj��.���� ���fg/=�������)2"��B���w��mIf�E����<4�
t�<*X�,2x\���(*`Bve�|�D��D�C$M�n���xXq�������)!��'`'���V\��Fu�����i��,�8�I��/
�"R����"k7�`1���RC��oC�G���m�|�	��_���)���(�,����9�(Z���]EI�[o� $y�Y�"���(x];?dbj�f�����@"I\�/h&+��t�%Z ��%UZyf'��0���*�H"��6��?��0[dU�U'��K������N�S��`"���"�i�7�#��%��X@v�@e`����b���N�w2��+�CuRjic|5��?/b9#L>�x��)���TQ�,Z��NB��b��*�Q���c}��V^:���q��bS�!��f��t�Ivb���)]��L['!c�����+��%��1�*?�L��y�q�E.�/<�MM�n=^&�S�O�q?��k���vS�cz��|U��������B����y��!�:m���#���?����J}p�j'����7
����,���/Q�i7p���v�#q���e�>�gy���K:T�F�4Cq�(D�L;��d�����P��L
d:I���5��.C��m����:4�
E#U[|�?���5H:J��|'U��D���V ��,����D���I��M�H�k�`��E����x'��<��b���kVyXG�5���-x�?����P;�����������#���h�!
�w��� 
1�����m"O��SM@�#q^�YduM�G�M�hhc�b��d�|����M�;�I+�.p>e�Ni��h�c���%�0���"?������mX>D�u��l����,�y�ka����p�r��T��2T�t�SE/����xZ�I����I�&is��d���������2D�9����a����i@�T_��e�y'E��/�����/�-����������N5���^H��c�do�N!��f�U��OG�/���(gl!^}�����*��w���a����W>�TA4�![g���)zE�k������9
���=�;�u�e!�G+��L.e�h�����c���Hd�[�&�4�F�~m`�h��>i��F�9wMO#8\�@�v��`����s;w�[8���Ot�M\�������������@�@�>��K`����Y}���n��%bM/D���<U���YX�,q��7Z3�-q`�V��
�]��i��8\���I�t2t�[E������!
�h�}�����n����j��D�pl^u�����%2�)L��������U<����	+5���E�R�������u7}8��8�	��p������
����s&&^dp�j���]V�7��M��,�����:���P/�2��,�o�
��C\�������57"�����
� +�yyD.���?
���I�q\{o���lC�"j'��j���,Y�X����W�N��Kl 7�}���V�|����d	�f������l�YZ�8��aBdK
y<�������X%�����[gh�a/PAVZ"/�/�F�:����)�{����W�������SGS�}%�,	����7\<�����M���[�<��N�:P����+���:W�"2f�����|�1����-b��?E��D�|���1�y�X���z��{��HX��s�N��?/r�dYO�Y7t8����m��e��{n��7|�L~s=�%~����DV�\���'T�,�l@��
�M#�����d	t�D"�.U^��c���(K���O���f�Ql����Z^��IG'O���C�8j�@����4�F�u�?0��.�+���y7SH|X�
M��'��������q`��`jk#�%T���`��5�
�1|i�a#E�V�N,]���"�>k�p�����PF=L���X�����,�m��C�= ���= ���= ��j�mc��0�/��X��7�KG�vZ�3��vqY���pQ3����9~�m���Y��z�mnHe��[v�-���-BN7�&��j�����9eF�����XYTP1�/�S�+�����M����a����sS�y��80���m}y��a����<����x�\������*�J{�+����"o�S�����/$@c9���d��f�_H?���V��jBY�������x7���`�8j�10�BRnn��{���M�=��cv��h�0���S��7 "m?s�NKw��������)Ws�$��y���8����M�j.;�7�C!�#!�����K��
�����
`�V{�%j~!�u�	�;2�`�����'��]�H���#y`��-�p����A�nD7�y�6�f.��o��Qk����c�>����w3j�dS%E����qx#Z�	Q�'{�wvJ�7����wg1��B���fe�t�y��������� ����CD�l����UK�u�[������_a���V�w����b��H�g�t��8�>�j����&������Q��Y�;=���"q&=v���{"��k�����W��'E%8���^T����Yf�������_H��{�jDKs�����M�)]�&�[>��Y�/R���
��Y�
��]��Lq*7{������i&��	������>�O.�.;aw���\<��=��=�{���/
P�������h��"T)���b�SN���Zz���v��P�6�l��;���T���_l|��
���������a��K�/;?���,�U���1o�������>����w�p�h�[?I���d����"�<��d[��	dsv|]�|�<=�����Q�m<w�����u�Y�1fvs�P�AY.��T�X��_=q>��
�)�u�{����t��
��E��Zui����%�~���B�������)�zG|�����������3�������%X���s�;�$kd{��������������;��^@D�1���E0>o$���������N�$G�-p�Y^�B�>I#"O���2��(�q�6��p3���P��[9<��Z�=^�H�
�d`�Jg����z�����y�17�W]M���"Z��
����8F+-�h�"���\�V���r��%X���
k�S��c��|4����~��]Gl�N��Pql��!��le$�L�W���6O�>����9x��7hZ�y��s����RO��~d1x���2����}�1��Q���z�A��T^G�@��,�� ^G�W!�j�#w�)@D��<N�K�d�;4al���2/E���t�d��8�.��*1���t���4����3�m�0���TI�����~�H��:8�2/4���xP7�$�^EY��?���������&�}Ocxi�y4��(��5��U����AG�W��Xq����@D�S��xP�#�Q<Q$�F�5Q=�� ^CK�W�5��-��8���\���'����\���zr�/��~^��.�����5-�"��X�`��.�u�_I��O�vMc^T'�;�D��,7]��s��Xv"��}K������5�c��%D��<�=�e;������~�mOu�MTJsr������<����B��^���3������/��q������Xv��uo�����W��(�"�ez���/$�Hy��t���E�0	\�?�~s�6&(L�,��,�^���}�����D�w�G�M�.�'�wJTn�B��/�L>�
%Z�I�e4\�~}4�(��9����J�O�a4�����B&}
�w�_'}m�g��A�@���,O|�u2I���n*�F�_H���
���~����1f	����Ahd��|\��u����F�u�F�m���;���;f������ZEK&:.���(6���Q[��b������=�!w���U�%X�����+!8���n��_���
��c��T�l@V��+{e[�/������T"^~��0���������u�����X��Q���:���C�hnG��2��c�Jva�m���G�e���]l	<+����ahh����F�A��C�/:nC�;�.b$����l$\����i���"b������j�����	��P_s]�6\}��jHu#F�Uk��[��S���Y7���p
6�]D
����2?�^^h�.:��"�)����v6	p������zK|��taW�{���z�i
0~=�4��~�i������(C��?�U�y�$#�5���[�;M!������TO����g�io��an���6�c�8�h����(�[��S_���B�����}�����!�}Q$��3�n4������*������X'*�t����e���S��g<t:Z�<��T��dpx�
*@?���������'��iR��?���/*A��L�A[����H�jK�P
wE�^������_�����T���vF�o����-uw�M���N~����������Z��Bk(dQ`������h?�dY����r��{t����]�%w`�����D>��M!
�\^��@;������	p��Z��H�
���6l�Me����2"l_&V�`o�Xm8`�f�F������n��p���H�����Y6���yXV�$��Q��l������g����~/��<Xw�G�%q		�<�]����a�7T��>D��;�`�"�M�����=�#{��
�n�1���C�h�l��t�^|���������u���;�����>�B8$�2�T���7�s�������*��iDd�@c������1[�'\@,6����6SO���s@���S@�~�	�J���i6���o�v�48�/$5���D���O��ly��v6��1���Zl���&�++
��/�����[���		��m[2!���:�"~{�Ta�%K��gHU~J��J4F���������
;�S@*�8��/�F��)Iy�����q	��z�,�����
.6��y���Y^L��T9���yA�y|�������4��D�H��8�����������m�>���TXg�����6%�1�'�`�e3��F��x��i�����v&�/��\+���>/"2� �uq�1�����������
�wN�B:|���fA;pcU3��	���B>/2..
;�aQS��`%yD���>;��#y9M�x�'�������hK��������q�z�+��zGK"H�+@��~d�FD�	�'r�jIp������t��'���O�J�8�s��"�����eN�y�/��N]�SD��![+�+�-������e�D�`���F��$�~?����|Z9t���R}W.{�H��
���_H�f0�
��x�L�u~�������&��0[C���/+�������^�RM�vy���u��������%�Q�
{�+�b�k�,&"�,o�����?��#�(*�'�]\!&���t���<�����2-b�#�,��"�'���p��g�uu���z����I����I�<��_8V��$#��7Q����&���#ffN=X%���/��G���hD�aO@/pqD����Z�
e�.�q���X?Q���w�+�-��U
�:��*���-���P���~R����'�������3��n��ow�1��k�V��H��U�a;����2����:���J�OV��=lM��j{�i}�:���A8��:���DK��6��e]������)��Ae�������en�9`�.���s�{y�V
���O�H�g���/�W8�eR�H+�L��k�`��y1p��qL��5���d���NM���3NR���A�����Ef�u�:�_c�>�i�������m�����S�@�dl�8AJr�.�E"J@ka�5�l��d��n�I�oy����
�V�8��A�a_n0�|!�|����a��7b���U�!���J�@q�MK�H����b%���4i���8�$��,t��E<��u��WG���`*'�Bh�d������L<t�:�9�hq�Rn��e\����'�@��c:���P{��
y����mF�7�����/�(^�#�$V*V�V��q�������I�F��.����C�����L��9��	}?�������N<b��l�\�-���[�	A�����<��8�F�F����S�`$�+i�p����E"��V����CV0�r�Id������(��}����������8�PneL�-/�A�Z�m����b�����z�]PT��1��1�5�7C��"�f3D
�Uq�D��m
'�v^a�q�����+�/S�-}�i��a���dt,����������5d��Z�;���@��q�]F�<XF��?��9�����.V2p�~��X���cwm{�q���q�2��W�o�2
��&jq������DD��B��WM�}�z��l#	��yYv�J�+2��P���������
|&���2-���&�lD'��))�>n��{l!^e�Pm����$g����=�Sg z�z-�4�xf���'�d����^%��d�Z�&�#q	I=Zls�����"(���A���F��
-���-�S��o2�Kn����2��V����!xs[�k�c,��p���O����E�'�;�*���|����J�/ZL��g27MG��^�>��3�*?%��p������0 �mD�<�iG4���
g���3�]E�{|l�%w��x{'�M=��)�&3)}���{���:�'���0���,�����m�Y)8)?E��o(9����K�x��G�J�W�t�>���F����|'2���������?�����E�=����i&������	�������5q��z"�������y�p`&��t�u8�p/
TU}�%�D~,��/��z66b|d�ph�kL� }U���~Shs%pi�"kU�t������o�����B�?5$�Y����Qf(��28���%����������\e_>r)j�����>/���u�_�q8F�
	��/�i�[�i�sBN���`OQ
�V���5��bl����<|�XC�1	Fs�=G��#�i��3[��rR�����0(�����"$�!U��M��\	�o���tF>"5��Y��k(�f0�j�����f��y\������=�5���&�������;�Q����[��53|����h����~^��|&�	~����4�l��,�&Z��X��1����!�aOok�aO
����{���bN'����V"�N��,gy�-M���i|���+;@�7s���,9�CS*{��bJv�-��H����)���fS�f:����&��,iC��!2�'KZ����C���b�a!Y
��6��O4�w�Z:
�,���Y���e�����p�lI�:A��6�W�1���<l=,i#"�4T������%�hh��-)��z���%`����tfI_hA	�lI����aI;��0���&���/����������L�����R�vM���qYF��,j�$����c����X���6CJm5;Z�f��|���gW�"(Ak	�H,~rq�x��|����!�2�4%"�:��|q�d_0�i����`��!��o������F�GX�D����=����7ba�_,h2a��28�!�bN��T���'�����"����FDQ�	�Y������,�2�{ib��B=S$u>�VE��%08
��I�t�5�2��T()���
y0��&M��~^��)������Td_��P�\����)����ha
����%���%pr�$��SX{JHE��!���^+�O���,���db����(VAA�l�lBY������P	:����$#��N�wl�!FSfu�W��c�#���T�*�.��/��2pc���q<ug��{�pF_`+��!���",���
l�=�l�����v�������c+��9P
iE�g���� ���&��r��)w0O�1f���'�4�c�a�����\�5N����db���6%���p����4cIU�7���%�r�G ���RGeR���u]�f�ZgW���V��Vb
exJT��'RR��f5���.�Y�,��3���+��L7���
��_n�*����*���36��L�O�Z���H}L$�/��_:�e1;���S����T�����>;�hB<�S3�.8}\d�C�
��7�����Z�M�u�������P��F5���#�J.H?�3�)���*����&�����@K��/�#����R`��p��{�D�������i�����v����������0�ae�����>D��9~�������O����w4�xosz��������j�98So�c�j����h���C{3�?h���L�������O�E��c,��S�2��-�@N�����#���.��]�z$����^{�(�mM�FG2�d�I���'6��[N�����V��/[�����|N��Y-`���$��������I[%U�Q�����A�$��j�_���#�)�4��O<l�WA�'�t�'7��D&����I?)d[�M2������3�G
���r41�@&t��$H8�wG��4��bs��
�y��8�!lI�{a<��;�w���U`��� z�H���oIizF��8�������v�Br��Z�4#����z�IM���v4��!���l�4���<���l�J����j�2��[�#�wR��l�>"'��S��@'EM�4�">�]����.�j%'8�G�t����8-���>�\���VL%:^�.���Ob���X�d����W��/M�x��#Mb�2�������L�*r7�urV%����
9�� ��f�C&����;f�~
P��D�y!��47����z%>��/��U�<�
%�|�>$�S���7��!Q�4(��F19sAY+�������l�w>�K��X���#��N=�fJ��B�\c����5{��":�H�9��e:� ���}��k�nz�S�$����vZl��C�j��y���'��tT$�g�Tv���������=������?i~H�j���?-����zRPj����<,A��$63d�f�D���N��f����K\�7H�)ul3B$6!$�
{�8��b��������yF�U<��7���r���z2�ok��b�~����uI�������r8K\���k����\?��}���?f.�1j����~�Z�c�����������>f.�1~+�_��y�}��M��H|��)��i}���~�U��^o5
��k�<G��^���������D��������������_�o~\��\�����X.ud{��v��v=�����������"��=?���]QZ�����?����/�q������_������]�U���:��?��i����
�����`'-��D�G?�q��M�@�o��8��.
D��>'�B�]g��}����T	J��Cll�:�s)���/[�����Kf�z�o���_c?��#���K�����<�����/$`�q��6l?'�:�6� ��(.@@���t���.$D8��L>�������6_V��!5�����(
�~y����h'}����6���@���W�o�>q��		��a�1@�4��� �|V���������Iv������O=�(u��$����I:��L�$:�Ap�	�Z�0z|������P5�(���nnQ�f�-���$'XCiP����G,�H=k�3�"��c�h���,�H }��JJV;�5���#��;v^s�"N�f5Z�<(|=�q��dg�����,VS���M��_���7|v����v~�^��h��R3����{�VqCC%��e��7����d�k���7@}�^�oY����[I��{�����%*��M����.�_+��%6�~1#���>+�~��;�z��h$*���n��J��k_�$�����X���1����\���^������d����x�L�[��&�-�����?�����.�0Viv�d����B���+WT��'�z�j�W:'����)=4N�b
�E�G��7�XTQfrZ��K-H�FY�S�xa�YQ�i&��c�d6�eBU�|�r�0��Y���VT����D?fp��y1���3l�E�E���������wZP��0�����OI\�M4�BM}��3��4�N�=�Q&*���!K���Y�xs���R=�a^��P&=�9U2��E�^�Z4Y�N��R�Z�<��M-~`����,��7������^�^v��S�hh�\Xt������LDf�h��M�CXQ���9�iQ�?�Y��8�]W3��YQIIt���2�-D�����}��o	�?�eH`� �9�6,��m�
l�r��O����mV��E��F ��[��>IY����������J���F����8k�G�����$�M�2p
;�(������eN�;De��X�h�A��B�%����D�7v.��$}M�;��6Z���q����Gh!#��V$�Nc.=��<!�H@�c.�m��@?�u~�=���d�en������������^�@�Y�����������HC�r��}����������n��AS"3-Dd]S7�y;��/DKr�~��<1�
K�����e|���HU���t��oM����"��C@�����&�I�cA���@#��~�~N�GT@X%�[�k�^H��
)�x�����|�����wbA��h�����P��H@�-E�������8n���BB6����`x�y1����g1C�/���r�-k������7I�����|�5�;�,��em�#5�'��S������	u7$�A	��;��6`&Y[L��
�VwO
�6��\9x�`���HC:l�q�����/H�C�����<����G���:�MT6�,�@7����+���*8[���
}-��1�b��;���G��*;<9��	���S-���$�mtE	��;��������5^?����Lh��N�1���FW�_Q���)_����}�f���*]P�!��(����9�ZQ����S�����������,[���= *��� N(8,8s�o�cD(	� >y��R�
q#hc{UG��3O$��&�F����-se82�6�Q�)���f%\��Q����.w�h��9��O9���%��7=�I�>�[f���h���JX������~;1����T�#6���_$k@Ul���:|R����L(��S��$[5w*�u���jm���%p Z�� �KA��i�i4�M�fRG7���TI�NE�tiAbz�`��a�}�)�
�����d�%
��>+�d����m�J�Hj�������4��z}�����I#�qd(���
�z�{����/s���r�=o$��g@��;}�gF�K�p���(�i��*��'��
�W�gB<�;�>�a$d���zo�y�7�7�1��"�1Y��x����"�j�s�_������/�5������qGP��E"�/�g�)p���,�b$5���c �N���LsBv7����\�����w�N{*v����=��i���A�}���a�G�����Y�U��<C�v������AN����.V$��Y�?[�{�!u}!"�3������j���eW:�������& f��m�fvEZ�-����t��]����i0�2�u
Y�zo��ng��Iv6n�*�aC7{J�j�26��I�XAL�f"�`����|��5i��,�����j��mJ���N�7��L�c��J&Y������7i���tm�����Tt)
�������l>����x���m�);�8�n���KwXa0�;���c�}�Ogvk&���x�}����;�l��n�����@�!�y�>S`�e&!_f�=H`��_H�^��L����H��w����>g&I���-�@����f�>�������ea�����%�������a6�NAX���������=���u��	gD���g�����������v{On*�	d�����Jt��|���	h�aW<G1+/SX�>�m8�z%*�����Z��7��DT�-dr[J��J�bS���P�f�
���[�8�f%"�t���]n�H
R�[����_��V��6��w��j�����-�R�4nfc�a�[���@�'[��*�������h��0G�����D�Q�?���<��@%X�m2J,�'�����T0��F�RCl13��:����������|Q����(a���x!�if��`�Q6�<�A�y�T'����/5�3��	i7~/U�C�>�l����X=�l�$�*����@�,�������6������YI���n���AR	���kW�o'�D�����g��������L�Bh1/��!���������\��!�B2���`c�J�ZNVJ�I�t����$��E{�{cv�J����WMEw_���@��TI�^'������v��Dd4)o����7�PX���@%�]E��[OxV�59+V�+�(�e�
�>�~G�V�������X��onTw��x!�6���N���He�i��$��'d��D%X�	k���&&I_H@��2���;f0�tMKJ2�hp%E����u��|�����G9� ���V��K��0�u�D�5c���<[����F}:��w71=���""�G��K�*��oZ�U�����ta_�]Q8��R�N�I1��	�gB=��/��n/d�G,�1�j�����+/��kt	

}"*2����`���
���|���=n���0�"�'�{��%��rp*.�T��f���`�4�������|�����~>���-,+BG%,����-/8To!!^|f,������o�����o����0�&�j����b�L�k�����M
��(����\��=�	�6Y6v�����oa���Z��lls�����#a��S3�"��0�]��J����&|����c7CT����-��k=w�	V"2R�JaL�m����^�*�����
���6lb����pQeuV}����C[L���C)�&|�Y�����S�%�SV�;������~�[����	�[���������4��BlT$��������`J,�,�q��1[Z�B
l�R&��@;�K��N��e��~=!-�u���{Z#��(����j���i���?��y3"46��*�D������?���H[�X#�b���nE��>	q/��e��s��qdq�5� ��z����Z�)���>KC���QB*{W��������]LM�*��V�����+�^H��������b�$�'_�<�>�:����v��m���o�������D��o�������^qB��V^�UJh��o<���& �}�
/<�wA�m�p�s���"��y�T��,j�C����H�4�����M%S?����"YF3�m [=Dn��q��,����7r��	�z���M>bb�t&j�TiQ�W�<��l!RZ_�co���a���q��W��{����L:9��b���f2c��'�7&�"*�v9��],�N�a��$��)g�X)]�~(/��&���(���wk0H�F����(=�j.��`R�����v&�)/&�����(u��p���t�XT!^�T�3I2����H������P�Y�9���E���f�Z�]�2��e�s�7�D�[D����a��v�x��]���������S+3b�|^$dn��,�i��P�j���r��h�K�O���.r��7=������C�8�	*������'��r�o��T�K���\����L�x��,S���?�/&7����K�E��v����P�"�������RF�K(��g���,&q�����Z� ��/n�H2�^�*]������wWU��j�.=���#q8���Q�gY������2<������_���J����N>$0�7��L�������s}C�h|�M�Qy)�:�Yy0���W���m/����V�7���-��f]9�3��kd��\P�;+	�g�����U}\Hujt�g:���q_�wp#�
����dYu��&p�@�n@
�_d=V.�����	������;3�Q���di������_�g4�|��
\l�"h����mR������Y��d��[����V�p�i�Q>��(}}{=Z�6����� ���������s,�������g�%��r��`K����e*�Hj��~l��8i",~���$�x?��$���H�����mM/�Y��>��9��
t���vmG����f�3CM�`��6M�<j���0H��:b��L+��|�d�p�e0�/�0;����
d��5JO��8��
,R�d����Y3<�j���r�L������&��,��J��6n�q���y�m�[�Y\���
�e�lY��o�,��l��=��>�f���pcV��C8��YI�x
g���*K~�`~'�
P��4<Z1���6����c��f���:�����9�{���H%�c,/�
�P��8�a>�|AR�8����Q�u��6b�w�����T(V�����)(����n�-�YH�fM�6;}�^E�DGq��m��)���#���l
�9�|e���_�H/}�f����t��X\��ji�C�����D������ �I�!�����`��Z��p�}��sI�[?����li��C7t�.0w��!��[u�J�7����`��$��"wf�n8~�GM|V���!a�6�
�_���p�+����r�X�=��t�"��2}��,��!\HHjb��?��/��U��}�.�8Y@��,�������yh&����Z����;r��I}��Fw�����������[y"������n�x$$)��,R�e�"����i�C��x��g!Q�V4M]'�"��������f^n����$����<��d�����O��=������8l:H���H���,3$��Q�ZR��w�H{�f-�=����� ��gy�n/$�����3�f��I#���{s�N`��2=t��*�G���U�f��MX��fRl6�:�c�td���>����r�����L�����f#�I4<GHDldX������d��2�,����
s%��,3��
���8��VE�h���/n��H|�����i%�U���8D�
f`�����*D�"�0Q�KT����p�A>�x0W�<h��>���dD��<�Tc�X2[3tb�[�,�=>*���M��=q/W>���s�|���#��a�����It3�#���i�fP���is�2P��$��pn���G�BD�I�<�S�j!fY>��>�����<"A���0C���3�,{W���������������wF6��M�c��(I�h?��g��(R�S;�a�M����Dhb�j�:�I��yb�0��r��������dhj>nN�<��f�m����el�w��s�x��B~,m8M���]z�����#�5���q��$V�U.����$zW]4b2��2&��5~�����a�Hg�R�|�D5�t�q�����%�n��89���Zi~N����1��Q�6�Nb�s=q�S��%��[�$�[h�W��������0'���W2�F���b�li��O�9:�
��'1��,��u��:��0D���	|%��qj#��F��DU���2���,�l@������I�W���t��+���Y���xG�M	��0�����U�Q�z����/��Sf1U����h�a���B* ��D��E?�>~�e����V4l\�T��T���j�j'��*����������e��w(��As�,$��w�������|R��5���.��V�����E<�2�\��U����$�=h]�l'_"uL�_%o��\[��r�A����������+�L@�4��B���x��}�XqEe��Y�b�Z��Yt5����=a�4�{/M;�nb���b��mb�s���fP\������'��D-����e�f�c'�����sC.Ko5���(RE���W�-�B�l?�R���8�H��5���?�x�}�$��q���;�����$w4 ��=���T#�-�4���������.�)6��#=���|��*c��}���;u��D���#5D�~�x����.�*�h�m-kT�(P�.O�
���u����]7�*����.�]�_�
�����g��l4C��`��#�b��$�����L_}�X
6�<gCk����:����0���������hf�<�}�������b]���X*����Fg��\�{uH7
�p�\ow�[���a`�����
�o�=u?t��w�J�:�O�M?�g!2t��tZ�6�q���(�����v���6:X������T��/�2�����s��O_�_�,2&�B8���YV��V�MM���js�0�_�fI�O�;$�����K��#/`����>FC��b�9�'�z��O� ��#�r3cJ�c�G��>����D�a�3�f�M����L��Y��"���5�/����I@��uw`��g!?gz�}dL, �%��Ut]^��Us���;��n���DU ��*
#����3�w���4f����>3O;@����c�����8�z8����0OU�}>�I%���;��-N��0N��$��:�g7��>/��e���)���]�i��]p�6��q.nR/;�f!a��0�e?����8Ci�A���z����cia�2���y�m��/X����y��g���23
t��b���
FG�p�����3��E����@
b1
H�"����E>�N��Y������2n�T���1W���J����a!Piqyc��W,l���*�Ag�V���Z�>o;L|![�@���@����
��
���s����y&P<�������.\!�-t/VtN
����<�=�V���
�[~t���
�J�5Toy�
k��������?��������.��������������93��Hx�z��l�����!���6]?��zg�1_����n�h=jm�5k4��7rp��?Vu���M,oV/��N$�4c���
DT��[����$@�.t��JK9�^�G	��6UdFd���<��y���M��&�l������m�SD��P �U2]nO�!7�7��� \*"�j3^���Qs������oL���X�����j
~g���K��d"&�#`:�B���_��������X:�I���}c���[��+S�w6�c��������}��uq����i5!OL�U�@#��'���s�_]�b$2-��X:4�~.��*�dV���<��$U_�I?]�@�e����=?�]��>/��|�	k�b�N��Z���=��+������W���>�:#����H�y��U]��nS/�����lQlEH���l��4��@�lX]�Y]�%����C����$���*�g�� MPw�U-.g�2����2�
�c�$��eFayN`6�����u����$�:��N&�����|>�J2��������W*��k!%@�T��N&u&"��+,j��e���T��r���Tg5��,��7�p�I6�R�
sZ�	�>��i~��f{J�m��(����Z���L4��]K���d2Y�i-TsS��uGP����c�@�
������0�8}3��	����)[���)Ojc���2c���SC%S�]Z�Y�aNW�g�Lt�aP� L*g���2������>LFuE�S��e&�R������}v�n��=��L��#&pB2��,o[�T&�����ss�S���g6����s���j��������h6�}�V�f����.,����+�!�$�e��\v��]����H�~d_�3�,���f&�3U���3R��`@�{2�+���esO����lYW$�\v*�u������V����}7�+����(�{2�� �]]����mj�.*�-�R�ld;��&�:(�hfc/���o
���������f�6,������B�z�O�0����:9k1��-�����B>�hHL��	�t��Q;a	E5�C��)m��cix����4�g�H��hX}�i9:'��6�p��	��_Y;O�l�yL����dV��}=��4���/�cv�f�X��	������b�e���/$GSe26���?�D���,e���E;�I7<���D����2E�p�t��d?�y#��ZU��{�-��P���!wv��L��8/����f�k�e4����c���z�S��d�3Sp�e�E���bE%Tu�A7}E�x$�8�"0���--\Z��W��A��(�h���W����3�_��U��D��[4�B����������{\�f�y#7e4f�����	{Y�c�y?R�������1�S����$ i�p�LH[�$sw?�����0�)��������D��?�?���!�X��/k`���D�����f�*����T
A�>+H�����G�M������_6�yF�6z�#�s���5������X?e�<��3��7kG�t1[�������#��]sGg�����p���8 E�	�6X������UmA�(,�P�@�2a�����Ej�~����	3�=D�s[.4���H_���5�b��|I�����-x^�(����Nmt�A�(��k��R^�%��a ����bg���L�K7q$�@`E�K�k|�f���`W��xPk�q����
��Rm�/���"w��{�����k���w��/j r����v%��>��y�,jJ3N"+�(sb��7�����R��gO��L4��E��g�>�ar���,�G�������b��dX�j���f(����,���<MH���W���=+B
������u�����g��]�|��ix����F8��������0�	��g�u-eE��%W��9B�J7��1#�&�%m�,1.&�1��E4V*�<o�)������P|V�yo~(8���-��L4�"}qX��"�t���17t���#�����b��:TY���D�wj�A��B���3V�P=/F��/$�>�G�D�5[�Vb�c�
b��GUpNcM�������J��>�maz�Lr��7�$�'+�Z�;7�1��>�����d���R	�.5�d�����3���c����oRx����g�R�ztz ����#c�[�.uE���~�R�x��u�N&��c�NU��y)���4y�EO�����:K���y!}Gglygf"Z�����O�I��X��^��,=��VDF�B�!u��y,��y8��4�����k�j`��fe�A����A�Rp��;~����qSM������5�fs^,?��47EOmS!�>�y1�Rw��f�T���P�Q�����!�-j�d(�Cc7�!��4��_����<���L���n��.LM�nB�{W���"4*	]DqAJ ���������V�	i�����
!EB�7pl�:Y
7i��4��1�U�i��a�B���f���������n���}^��D�m�Bw��+R��Y,��j��~�����#r��u��C0�V��xm��l�n{����P<�0�X����i��<��m��g�6���D5��yY&FzN~����v����,��!�V�i��� NvI�����W�9R��|�K�N#oYWu��a���a�;pd�������[7s���QQr�`S�'�'��"OH�����g�y#-��T��3p!H�b�������G���iH�
�7���e�����g"�����d��v���'����9���S�0���8�F]�T�X��W��@��~�16}���s��Z�#"����&�c�y�����ev�Rt���o�Y����d��M:���a�=�h�E�8��>�6tY�>��F'��mKo1I
4���,�Ck��b�>/]�.�}������P��K�����2�	h��`�~!�J.[��wB�����F��4��������'m�&]P���/[��>�������D�vK�wj�>7>�����+0u�}���H���F�6���c�	h}�����>�_�$��#���jk�|����{�q<��x����{�a��������\��]�g�d�������� s��o�$:3B����?����/����X`��M>��}y��(*���X?nbC�H�n2�D0�4��Tc�XE|�P-L�c�i��/�X����/D����^cf�ru��h��_Bz&1�7������w����9���{e�m��6�C4����_�'�������(�_��cL�U������^��t���u�~��*���=]����}�>��z?��*������s�~�������5]?���>_����T��vO�1_����������5��|����z���b�~L�Q�����bh�)+\�u������b�~������M��_����&��1]WM������m-������&��N1]�����������K:�|b�>��:�t}.�������k�����w���d���z N�e�n��u]s����]'�1ko���|}��C���������T���Y������}��}}��W������8B��n`������}����1_�n`���G70B���!���
��u�F���w#�|���b�������6�_t�����
Lv?����m��-�������~\o��s���&����!������b������?�!v�On�]����tC������'7����
��rC������'7����
��?�!v�On�_��b������?�!v�On�]_�3�.��s�����-srC�z��b�'�#�!~=���
����'7����ok��\���o�;������\��s�������������������Z�>�����N�~�F�'t�w%����&V�N�#�"$+���P~)�Y����@B�R~^��D&l`�F�y{!\�.��l�fEH�	������/��X�����u�7�1�D>�.&��H=�*��E����+����!2�r���)��Z0���2,�&*�='�$�B�y/U���/���n����(��&�
�3�@#+R�v=k��B����is}�� ��|>�M�q ���9+	�#+T@�8P
�Mn�D��X�
�1R�[��	���	�@��	��&f�>w�:��:=���)T�)����L7`�����-w/��|�����v/W&Yn��g�sK�J��������)?/���
����9-������#������u;��0Ir�i(��������P=*�@���-�<���4�cB�o�f��0��&-�DsY��?;�
,�(+:��yk�[�K;���	��q!z4��Yn��3��DUKNQ�OzT>�����������J���<��[JE
�vf��Z���Q�Y���r�no���iu���r�����y� BO�v7�Ec���jp=oV2��w&Y����Z�f�m�'�vrCKT<o�M|w�Bw�x���J�,Y�eL���@�U���c��{� ������5���������������|z�pN�v���KOO;x.��ED�p8����p���*Ns\�zR���~���p#)��M��a	)�	im��v< ^���y#�)=X����+Q;y�C�1��_�,���R�{=�i.H���O�NEwQ�j�x��a�p��%�M�Hk	���\��Tl.XH�`s�D�i?g
��a���T0n�)v��~[�i�L[�����)�7�
�,^(}e�O�kb&�����%9��r���H==����Q5J���2IvLd���Olf�2qo�Y�g�sv�J�t��������To��
>�pbC���p\w��{��������w��^(�]��:��y%��6���=���$�D%���a@v��CM��F����;`\��N�QX��/`&[;��f�Z�\���o<��y#mT���Ii/�i�B�#��~��y.���������6�3r���G���
@g'�gw��&�<���k7�-3>EFQY�og�_`�F��{�?[���U %P����W*��X�:�8t��v�B��uOO��L�����������<o���>�<�^�Z�^1�b���Dt���X�5�&	�QyUqA���� ��������z|�a1poRf�SS�|r���K����GO��IV3������4��)kd:,��%����jj����S%(���s��)�Qx/@�Z+o6>��Nt&,_R�6���-{!�3VPY})�V���,~�aL�0���P�o��A1��'x�H�����&�������@���A4ce�����D	!��A�h+�ejK�rA���t_�`����7n�1T�%�����P�y(� E?��[���������u������������Y.SU�K�,�T��;�����/�c���i��eV}M7TV��;vi6���:����}j����9-��X46�|���\?����R���Fm��>Q� W���hPe�[H�"�M#��S��-�d��?���#]��,�������s����u��1m<<�?!U�CS�/�x��o�D��V�}���Q82j.z
��n)_h7����J��%�����-&���8=�� �8���?pJ�JR�]KK'~��Gh���6�m	Y�V��W��q�T�!R#e�zi'�����
A(��1>��]>�SU���l��s��.�3	�����v�-6!o�I���)�A=�#�qY�&���3	�r�N�V`�J�i�E���q�-���-��:c���MfA:����4~��z��6��g�������>e���*4��&ITW}�`B��n�W 99��������0h��{:a�]��+����\6}>�����!������t>o����
�4����|N���@D������g�����/����Z���2�/� �/����[�ed��F�v���a:|YL��8��Q��Z�b�-��Z�DJ�������J�}� lMp_)!����@A��\��w�z7:�7��N���[���+�i#����#�&�w3`���sP���Y�4�R��N�����i����@�A�8��NA|@]=�����e.��|JBt���u���ZE��d���d�J`V�oG�s�rt���p!\�K=l�����WT�`5����d��j��D����Z/l�'��ID�jY�H���E���L�L%^8K�<w�e�|�~E���N�A��KT����z���iS���lX��q�*�x��<�17�z=i��|�^��bn���p�*���=��aK!.����;��
�j�S�D
�����h���������k�k�.V�LD��Zo���{,D�����%3���D�`BtB�`O�eQ��$yhK�C����?DK���Z�.2'��@��n6�1)��FR��XE����0�"�8by\�Z����kY������;��5E;\��T��h����n�D��O.()��HzRb�b^��v[��_E����������WI����}�b�.;��L��i�So���������nvN���x&8[�-��
�"�i�Y/�#��2VO�������J���n��������0����T�}FMF���5?�_�PM7b+�na�����M����e�P��R������a��������l�moX��L�J���n��x�f�Y��|a�8z#Y�����mo���t��B����i�-�������3�e_���M���l����n��vT������'f�N���|���._�m�Ddo��]uZ�t6��@���a������h�W5���j^�U��V���L�=H��B������B��f��O��#�^H�a�A�L�
:x���94�caf�r���{�Z��2mI��U+k�J�1#�5O>;��}��16y� �1�N��i�Cm�|��L�X+�q�`��� .�R��;_HV�%��"4�B�6s\�]`:�Q�l_�:=v�[M�����`4������xn	�n�����1�J�<���G��yX�*����*pAM��Xd���o��.;B{g�z��M�z��>�lf=��#�Q>�K��$�xD��;^����O&���9X��baI�p������Fp��Dp����pQ��6�+& ���dv����L��fs��e���v����9��7�J����x�����@DT�������1Q��1{x��=�{�3P1�/
P�R�aZ7�	��\�H����'Z��[���gw����m���3�znG�������� �����bZ�����f�e���Y��o���Qc����V��>������K�N!���Hc>���~9!���X����m%�J �+����*��C]�J[��Bmc�������Y>}������,���>������'.�����_O\H�=q����K�������d�7����4�����ES[_���8�n������9:��8��*���.<�j�c�J����%�&�t�SD�`��~#�D�o{��{��w�T�)#{�IeWwt��|H��K�}�G$������]�=��.Dd$E�j���*�
�N�6��t3���P��[9�����>^Y��
8^���++���W��>^Y��H��c4'>\Y���j8{(F+3����t��G++*����a�1ZY����e�+�6�asJy��%�M��i�r���(�E�F����[��W�2���i�7j�#e�D<^�����ASOd�PsF�f��Sj1x7�[���c�n�&�a�(���>FoF*oG�@��L�VT��
��;r��	���!�����1��!@a�C30�]5r��"��W�d����B������5��}YD�"��"-�m�0�����m�f����U��a��"��">�;�$GoFYF���!��H����bx�[�'���H[���q^G)��0��e�;X����:V���{}V �M7U(���YD�2�zo4���-�d}Eo�_�������Gi����QZ���Gi������c�5�10B�=!8�/t��kZ�"��,��	��q�����$*��dc>�N w,��c9�t�sjL��c��k�aEF��[^m�x����].r��D���s4��N���`����o��4'�������F�f����/$���u/�s<���\���e���K!�.�?�5���s���[y!�}�Y�7R�[N�8G���^���~������X�h_t&"#
����S�o��b���M��Ns�J���/<8;�+�����Q|S6e�����o!V��o&�B�6_�$K4\��Y4�(E����Z��J�O�!�B����������+�S3�e,�)��-�MO�:��r�8L7���/�Up�����C�_Lc�P��(L����h��Z<[H�8���0��
��(���a+��;f��6��mmF%
��cq����W"���Z������sD�m�j��]!�
�`��"�-��W!85��n���pQ��g���Y@�h���,_h-����5�D
>���0q��HD����u����{X��(���$�1��h���S�K@[\���|�E�
|<j-�6��b�H`lP��s�����}0����t�
��q��NO�������f<<:}��0*����@[��]}XS�
�e��/��.�W7�RR���*�imr���-��){��Y7����R,�=������@	|���t���"�i��iWa�H�����nf?@�-�^����x�u����v����v��_���������E����x��H��8
�Vi@T�	��T<�������N�1T�u��2�DM��_(�����2�H@X������E��Z���T�V�^<�l%]�j[X����u��W�_d��=A�Pn�t���b
<|f�c�A�aEE��U���8�|�>�f�_�37�	�4��������g%(�	�_��\w	�li�VC�SQ�7��P�K}�I��K)�J�T��m#/�jK��h�������|������5�N
u"E�M��#��~f�e|��/w��a(�����x��j���P.��`P��}��/���Wf��������?������SP��j�6�
N�2�*E*��[�"�����w[��!�GZf�c	89���UO��E�G�����z�r�/��P�2>+k�XBB%�xW��_H�a���?�������W�	H#�������XM�^fA�1:�:�v�� Z<��!]��c���~������1��;�����>�B8��M��4Py39��^�Y���b�����{qXh�@+��f������&:� ��f�'(�\V����8���v>WL��PhT8!`S@BY��l�����y#�iFWIk�����q��og�����,����/5��l4�/q��?�#��y�		��m[dBb�]�7�����mS��:����!���VK��P?�N!t,��*�9��v�/��T�8���hF8�-:�GR�v�� Z2.�>���1j&qAZ��y�A����:f9�������������p:�[����sT-l�i~�����������JRa�Z�ftQ��m<�J�!O��%�W�=#�28��&��T���IW"2�� �������W"2Lw�7/�p��|����'�p��>o��+����L�����Ez���o-�=�zn
6�$Q0������^H���^������q�w����M,���������N�%'@_}E%���a�v�\��8 X����Hw��`zhO�T�SiLbm����^h�-UjoL_tEZ8u�e������������gz�2�w����hJ3���a�BDnV	qB��wq��w9��7�|�Us��{5���;��0�
��EMDZ���T�N>G���SC���/+������<`h!e6}�������~Ch����(D�o�)V���2h��lLD��7��mY�/�#��5�
��~��j���
�W3�43��aLr���d���3B{�H�����N;R����7�Y�z�x�v{�/&��#�~
��3I2���dg&��y2���1�m��f"��
T�J`-s�7,D����^`p��y�Q	�-�~j�]�k��X?1����uv{�	�h�mv��T�iA�:�Y��lA�b�6a#��B��(��k�v��Y�����%
8�YT�v(z��J�F">Y��y���Unu/[�N��CHkdX�������8P�o�M50�+=9�B����.��PY�b��W���0!��7,��y��b	l��{�t~!-�i��/�W��t�H+�LQ��P��k7�!H~�y3J��L�e;	��:5�u�q:q���N���m��E� �N�����P����K�_G����i�p���2
H��]U>N��X��F"����	�}�h��p�Yw�x�B��C>v���
Y+(N|� r�0�/wp��B;�m��������H@�m��R�-���#����31�����YU3�<t0dC�,�����XH	���]�8v���&��%(\��z%>t�:�m�����t��/�2���-8�h�4����P���	{�����|��V�6G������'P~^�GI>X�X�;�7�<��F�&-BG��B�"H�<g���������v���H��^���)�6��p����0hcy���Lh��9��60�
�=���|%��g�����Ad���Q�������D�V�}�	����v�����8���8�P��2������A�k�g�m�[�e�=v�����O����Q�QC|3�X�.u�QC&����h"���.��jz!E��i�/���7bWL^��[��f?3�n���dt,�����&0���6&[��j5{.����LDf#tU�|\���'�2'�bXtq&�3_�u���d'����O2R,�g�f��u����m�1�l�6N�V^m����Hqc5���	��:�t19L8�����b!�/zG���wu��Vp���n_2!��86�6y����L�2����~��!?/���P��Cvw�3R��ePW�Q���U�`c�3�%�x(?q&��&v���&�n��v!�����^e;����l�tw�6���s�f(����\��&���d����c���cl�p&Z�;�7�E�Fc�&��L��)1�gs������
�Ve7����a&�-&0��H�B2�������-����<.����8�i�*�5�
,H��6�n�{/���=w��B,��D��v�y�y �G�GW��y#�!
�H��6.�	���,��T<-.���A��Q�x�o(9�1w��$��p��xg�^����l�\&#�W�j@�I����&�;&
H�?�����"��h��O-t���4����H�E-^�F\����D�/�XY���y�8��?�������D�{i T���p��p�2��	8n�A��O��zV�L� }U��N�)�y&pi�$kU}V�����`��7k����B�?uHr[���2C�.�#��y�(�
/���s����~<r)j���FQ�1������8�2[���;����6���L���r�����I5lZaR������G�����c*��$��r{��#��*�w�\&�d�I�	A�h'v�!)�T�v6UL�s%������|>DjB�$�������[������Y�mj&t
��c^Hk�mP��yU<o�Q����[��53|��r�h���T�q/���j��?|���t�u�Msd�!���U��%}=nk6�B[�y����5���
`��������L@6�Wel���BD�)q��lK���7��R�X��)�-��
DL�u���)]Hg6@��%��%+J�T�z�a6%4�2-jO6�J=��nAtn.�
��[���=�j�K'���������F��LK������H���%eF�lIW$u���l�����0���xf{X�����P��^6G�tE�7������y���^���,�������a�%]QG��0���d[s���0����%��*�T}��j�q�kj�3������\�����:_�jVO����M�XM@I����vtQf5�/�O#(9Q�h�B?A�4�"�����q_P=^���!@e�YS��!x��/NB�l�#��}^r���Ll|A>��#D�F�dnC�h�<��3�c���0J���
��0���2h��bL�si,o����2�c����0**�#������X��y1I���4qI�z�����#U�FR�8���	�r�#)c>�
%��)k��|0���w��>/��)��x�w�Td6�BVCi���
2�F�5p�-Y=o�@��I����1�!Y����Z!>+�X�d�t��J&6��3}�(V3UA�l�lBY�_w}kHP	:��AI��;��>���2�h���C'mg�og�c�0����]X��2pc���+*1������}�:����HO���G<-�������
���v����c)���&i6]�V{���W�L�7!���rs��c6�Ry�1p�F������\�u4����db#)mJ�vv��� �*�XR��M��i$�*������`��$_\�s�z�Z3S�L��t\�{lX��j2]�9(��)Q��M��H]��&j�]~S�,�3���+�!��tl�Z�^����B�e�����3.s[:�b`������{��s5��vjEn3��|U~��3���7�G�
�>�.�8}\d�C�
�'�����hp��C%��Yg��i���v"���1�w�V���;�t���{1�"_�������~�hu`e���3��ER��r������$:����Ow��J�)i��op��l 9!D2�l�����
��[��w��nfRfp��Vv�����6�����
;/�6��3��?&����?��P�������j�O��L���w@T�e�1�o�)r��-b �}�.����q���.RN<oT�ke��t�a�H�K������ZSs��[����������V�,�D����XE������Q�,��[��C�������Q��ko��;�������/�a8������-��P��@���M�6�I�cj����-�&�m����p�4���5|T_�����}m&� ��>8��M#1?jl.Qc��$1O��Clj��Ql����;�sx����� ��#qV{xK:�������T�����nWH�r�-M��tA�1'5-�y3�i�����?�4�0#����!���$E�Q�6�����<)��l�>"'��1�������i���������.��Lb����T&]���8-��v�h��c�+f&:t:�"]@-�'�������5u�?_��4���&�����%�}b;�$*����4��y���+�����h��!}zH�~������D�y!��47��e|}&>��/��U��%��}|"H>��������(D
�x�(&��`.(��B|zH	�y���X��r�����""����B!#����S1k�B1E$������C�L|�(^z���Z�v��N`��U;�����h�j8��y� �z��H�����>{�9�����{@������4?$`�	�L���n�,��L5�SCI>,Y;{�2f3C"svN����&����K��7H�)�u�!���.{�8��b�����I��<#�*�O�����r���z2�kf���b�~]g�1_�Nq]�t���,qb�����*j��s:��<�\~����u/?�[�y=�o�Y~����u+?�G��:�o����u��s��=_71�#
�_���/$���&���~)���~)^�\>�nb\�������9'��~}�O��?�����������~�9��������X����vQ��m�/�����?���7}o��w�vEDi������������[����������������?�����(q�4��}����O	I�y#�`P����a��V"2���J�3��l'�S����>;���NK�4�'�H���:��)����-������f�>o���CP�g��BxT,�"�es�y���]�/$`�?��%�����LD�q���E.�K@T���=�'��D��Q��8u����d�X��3p^�g"�����TK0���KBxfQ�gL:h�	��I���L�$:�Ap�	�Z�0z���������HJ�|��g9��D5��� ��%�}o(
J>�����g�wc�XdQs������e�E��~VR2��9���X��<����1�I�8��hA���'��f]�#d�Mf���YR����/���7\y���Sx~�u��h�5��}R<���H�1T��5����<\�$��n���o��x���>�:��a+i��O4F�$p1�KT��������'��V�����}
&��h%�O�v`�b����D%X����P	48�+�d=O�E�}��$ �wCc.Z�	X�hqS�f�L���$UA����`�M`���W������������Z��7�^����n���6��1N���B���t���gwSzh��������Go����������Z�����
.^��|V�����<]K&)�W&�ZwS��c	a�	�V��p�1��v2��U|^L�G�0�����NLW��_��d�v�;-H��3t�������6����j�[����,���p�����2Q��h-�{���z�[�;���=��U.e��\�lO�z�fAf�|SW���1�o����M���e����DD��	[/�.;���i:�q�,:T�\��a"2�F3�J���u�T#'-��m���T��Z���e���J"�a�C�%�[�-K)�~��,�d��>j�'�
K�[m�qi�\dj:����#�����lR]�UX��'!)+���]����)���$m�7�$���f
L$p�����ih}�a]����\$ZP�^T����fw��t����f����H%�"������������:w����g���x�z�2��kE�4��^���aEjs�lc.�	�����a��$��y�1��G\QAq
hA�}v/l �,�qU��Q��Nw)Ir��}�������b�����b���Liv��Dp�L��-�������aUX����$����lExD��E���/M�a���L�! ����]��$�����f��5��}N�GT@X%�Oqk�%z/$���s��V%'|	ds����5O}K���%�.�W��P��Hc���H�]y��/?�[<���������8�ie
sI��o1c��D�s�K�X�����I��$w�m�5�i�,��em��E�a�xu�X�BG��'�����1 ���3�m��g���d��0������&0��)��C���,@D��QG�F������ i�`��kX`�Sl�Xcjz#u��@M,����(�*�M:-'���S/�����iZ���2�#�X�83b������Rt���T�>bEv���_	���$mtA	X+��}=,_^L�\���Ky+M�F��p�Vz�����+j���]#�������	}�n���*]P�!���^��z�H
���m�{��A�`L��{���`����L�����7��M�@E%a��'���BT������p���	�����F$��@� }���F���Y�Y[��@���7;�f�&b�s"E�r�)Ck����h&"�{�e�XsM3��S	+���%tK����b������h25�=R`s	Q�E�T���]�6sr��^KN&���)^H����;��:q�Wk���%pNZ�{�P�f����S��R�"��	���J�t����K�#�{�+M�l�v�TU&�.hHK�Y�$�&]X��f�V$�����Wt������C�C<��U�H�y�#C���T ���c�T�s�����5jtAj|�����zfd�� ��';n�R�6-H@;&���
�n�g��apoD�02���H�1�������-Dw1LV,�)���r�_�]m}�����p��$�bX::��J�_dB�b�)p���,���:����;�����M�9!��a����_��.?�p:u�P�{�����[�F�����v�vn�w�-����3��Y6V��<C�;!��g�7r��=�l����8M$K�g+;N������u�Ab��������<URu��N�_�7���Yj|6�+��n��>�mfv!���I����k���{��p;��,H��q�U�6t����V-�c�������i&���b�����g��w.����)��oX6�P�b��L���m?6k'��������v�v:3�-�(��&C���� W�;@-����6����H��t���3A�hQ;��#|:�[3ic��,3 Nc��;�*�A%�C&�x�L����|��� �%Y!�{]��vj��bG
s�����l�a�3��FM��O�����j�h��WOpHT������N��a^����H��f��,c� ,M�LD�Y9�p�;���u��I�[b?;�O�h�c/��=��@&�
�c��*�Y�m�' �\�UX���0�9�����?IDe:��X����f�������LnK�z+?�Pl���c�j�L��K�'w��DwcZ8j������������=�%����q�\��n�L�?l���[���@<�����}T���fBN�
4p��3.�Z�mT��i��-�<P	���z��I�s;�%0�`6M��</���b0f"�u
Oy3hM����7���D��F����S�Q/�8����lc�K��<U=R�@�`���c��uj�K���~aB���K��/[f0�}VO43���2�r��,�����t�6��CM���B��uLp�e�G����z�/.���*���E	];;����Vh�}�p�)o�n_����M�/DPH��]Y��_n%Z-'+E������~���h�'K?����R�d��4/�]��\����J(�:��������~%"��Hy+����!��JTw*A����������T�
���]��eCB�~G8��F��Mw,h�67�;�q��_�`Vi�k]V����W#&>!��$*��MX�&�'41I�B�m&������A��O�5-)����}���,�C>t�p���#�)�p[��,���\1��������%F�l��""{X����71=4��""�G��K�*��oZ������.���J��\��Z��Q�L=�����n���Z,�1�jg����+/�����6������V����+��y��{�X��B	��&>���-!��Sq1��|7����k�A6�_��L���<��m��1>oeY:*a���my�Y{	��3c����<|���<�e|+�t���)69U��Se�]#W�nj`FE�GO����x���	���j�ec7�xM=�����h�>���a�"��P����T�L.H��,�qW��d���	_.d����9}�#�~(�r�o��sG�`%"#��v�����������pH�j��mh�&���rUw���bR}��t_�Zm&~W��vf�gap�"��N��#�[�1��������e������	��8����J�)/$�FE�^H��\��Q	����b�O����R`3�p�2�&��]��&p�-/� ���	i���o_@��Y��b\W�s������a����n�^�t�����b�7f'$��&�HE�X���z[G�y�OB�U�Y;?Wx�xn�W�g0�0no�j�W���R��:��/�L�R��z���b��o6��Uz�Za{�jCR�p{!{w����_��D��+�g�g�A�v����vp��z������\�u"E�7�������^qB��V^�UJh��o<��& ������� �-��Q�����~��J*hQ����q��I��|[����d���}^$�h��d���m=���l���z#GV�0���mr��Q~���!HS�EI^a�L�C��Hi}Y���ON���K���^Y>�t��g�Nn�Q,���q	1
�1O��ET�]�n��#��$�?��ZHI�p���&A�I������h��n
��H�t���W�e_�L��^*};Ne���S^L@3C��q�m��e	z�k?����_���^�3I2����H������P�Y�9���E���f�Z�]�2��e�s�7�D�[D�l��x��&�]e���E��.�v0�a?����B�,��%�#Fz~�q��mD�B���q�"������o��
�1�Dd�YY3�����)
4�E�!�!�����x�)[�D��Il�n��I�im!o<�n!%���<ED.��f�����^�y �<��?��HA���Br#>5��%�H�����AO���)U������,/TBW.8_@�jx������^�N���& ���-���&mV�y�I�ZM�-�$4����������S~�3 �����~�}������y�����+�H3n������\U�U�.Sf����k��^��S���&xR��Jf!�|�,�J�=�e���P�k�'���H�F��������L�D�^T,�/VUL-6M~?f���.hP��T�����"���7�A�� ���P	6�t��+"He�z��0��oo�{�K�����H�-�;��EYO�B�x*�+e�t$� Y�u���I@{����~�E�U/��{i���}^rFA�l�%�v��C�Y�)�PCfv�dQ�(������������,V3����#*�M��������$:��(��aA���j^�\:�Ju0X��]1��F�.R+��no��V�U<�������H�����5x�7�"�I��wO D�D���mp��BOV���4��&�wH�����O1/D�}�f�Q2�v�;�6�����-����{>�h�i7gO_h�<3(u/�W�f ���}��$�7�����v����Q�����>���B�H2��|R��S�,\m$�^���F�=8]&D��`��fK�^(,�?l~�j;�b��eE�Ye�6Z]S�;�qdj�}�H��<�|��b�`�o:]�N���������K�;V��k���������5M+�OD����&�>�%��_�@���\JU�s� #v;�5�uO�}��<�"xec���q�fO�)��b��
��]d�:+��(�����m�=������c��y1��&��O7[4��I�Dy8>�vQM���'�g.>/���.;��Jx��OQ/�V2/Lr.@�
������B�
���]���Y�>@��������A&#�C������W��l(���R��gG2�HZ�0�}�v�87�<�'t��sS
Qq��v��VEVb�p�1��g�m�6����K�@:��l(����}�Y�)F�C�(;������j x�7_�$��We�?��[]��%������&����t-��j����� e�<!�^Z ��7��zhf�I/
[��w���k��j�:`<nkp����y0?(��p���_��!�o�s`�I�#`�
]�3S�$�M���3����R�:�� :�]�W�I���V��"dj��lV�a��P�?g��]U�p�d�P&������!�S��5)��UYt������������G�
=���?�L=����|od��OO�!Z�\*�wj��oW�$"����N�d����P��k�������I �����f��@����k�Ey�L��+������r�����\F�r��:�
y����i�����i���c\�����2��a�����mw��1�>~��Sr���+�AB0���d$hY�2�`G��,����3������P'��m|�8Un����G�����D�Y�D^
T��
% ����P��T		�i����!��tG�o���3���,E����6��D��Z���R�75X+t��'���]��������X�[K0�[O���tt����%�8���J������9��l=������$5[�z8�p��[n��=���`H�`���B?��>�
�������,&��������L���I���5*�A��!�S���A������<�� G�l�X
i<�������@D�p+q�O�[=KH�IV��~��A��z{_�����4����FY�)��"�Ph���d,��e�Gt�n�.�Z�^6�Hca��4�'��l�lS��k%PU��/u5[�}q��	`/��p��Xp��d��U}�X��!0�/�d�����^��y�lPS�
��5N���HDn*�j/o��8���"^MC�r�FR��3��->�gG��$�U���aV2���U�P5��P���G%r}���+�2��e�5l����_I`�b������k����S�aj��-4~U�(�Az?s��m����w�x<EX��U-������\T������m��
���[�Cq���*������B�vpU����G������a�
����DtY�@�����b!f%A��
e^ZR=}g"!�p����
��M���<�,��0�j �=�����E1���Fc�9��iC�Q�o����h���3�����@�M"( s
k�"��gA���:�/U&��,}�}$4��@�wfnHZA^�y�k�f�����������LD��8}	��6D {���u�!n���-<����u37��- y����*��&\�U��eE�[��	��]�H��'�$����J�S��/U����~	��%6�����(�ck��O�2�`�*<3m$9�����Y�}W������
��x��������|���	����sl��E`����U+�)��IyE�}��}%�Heo����O���������0�>���
�K>+�Z��X]����u�uL���7>+?��R�p�+�8+Mv���z���/�~���=�v|����F��2�p��q�~v2hR��N�A���� S_[���"c}u�M��v�L�P�*�g��A�`�@�7
����kj�r��i�����(*>UU���'�Z�FoZI	G�R@	�`�:������:DD%kc�k8[h��kX@�����u�u�rX�#1:���m=�"*��c�Z��S�zZoA��d����
�-�����A��N�p�������?{8���8K���h���I*T��v!%��4�d(hC��N.�Hs�r�
M|s�i�[���t#�oS����/��YK���2�������#Q���>;
����K����(���{T���>.6V��#iB�J��,<��p���������s�����P6,k3o���!<�Zp����&�q����P��0� #rj���n�gb��gGs���$���u=d��{}��&���� �1��u���!xj�1����"�=�����8@��F2"��D���� {`��"G=�~��N�dY�Q?�
�j�\��i�8�=�������[��=��af%!�%t������y�
}S��C\��C��1���; ��C��L$._��?����-��X�K�;��@�$Q�5(�mO*���*~���"�Qd���E��S"�H�Y����c������fD�_�������/���|�4��-���_����'�9��EI'������!���G��}���sZ��!���#���t����y.�z�p9���>��@fx������af��>��Z��������r�W�E	M �{�9{�������#�`B"�z��%s�#����B��yx��3({+}6�2���g?|�Sv�|V�zNE=��QZh*����<Qk$2HOP�\����#��a�n��\<haQ3*�`�\3���c���!��]p����)
4����P� ���7>��L&�u���8�ee����}�DT��S�M�<��"��5�l$S����8���QZ�d�'����gA�ZEy��8+R���HZ�d�U��8	M�v�/���%��0�K�p�l�dG�ld��D"u�kf��Sp���6�-�\����V�l�@�X�[d*[��*u���=��MB�f�'q��r�������%��M �vrC4�`���X<��Vi��U$�|�hFZQ~(���f��z����-��2�nhK������n��4���%�)]�eO�zL���z������+3��
�
����a�tj%&�������.��3�	e�g��eg�^s{��[�` �d��`Db9V��N0t��532��U�Vt!�u$�����h3!bEg�/��E��z���j;#��b����2�p4���t�hG����d\3�_�!�1��fDE������hJ����c3_6������<�"��0����$z�+���O4��r����!�#&�bD���	h��6}���f�d�#����E���"�4{��r4�
@
k��P���$[uR[����[�eM���;~
���� �n�Qg���$��.:U�P];�.I[pIf��TB.���.|�������=�`_�
�>��&x�h'yXO�����Jw�Yn:��m���g[tP���B�5�hY��6�C��VU�������X�;z����tE�o��l�hW�h�H?jsC_0��@g��3��V��<�L$���++����lb��/�iV��~�E��D�e�����*�,<R����������4����'�9������J����H�IU����zj�D����+��d���=��\&R=���u\����	n�c�rtt�`V������Q���A/&62��bOk$4�'S/,DR��Z�����H$�����hK�*d!S���n~�%�_����#1���$����XO���IH@��z�^��	e�!�rm/@�]G���o�6$o��94�2���U�>2�{"�I_d�4���2�)zO�����W�h�F�b��Ssj)����J�g�Z��UKGQ+��
	ow�yn�gcH��y�e����}yu*POZ����#�dQ�������K^�+�,o�
�CD�u�f^Px|�N6�������pq���Y�B�mS�K���k"Ir#�:8�	����n��N�Ke��X�$�G�@3�7���)CV4A�!�$�a H8��2����0���s����I�u��4/��ZGpi���������~.#<������u�Q9	G����M������2g��@��2cB���;���dh S��,����A���3���	�Y������A�#|�l`�h6A��q�mx����W-��
���XK�${g�M�s�y���A�A*�����!�a'��\� ���Nf�
?�E���"o��S�Q��������,���w$�Ag�Si���D"J�cg�gH���������H�|�*T�����_�t������3�3���&��t���l�O�Y�2����L��	��ix�3����!��v��|t�Y� I�D�u`^�������i�Us3.h����3o�E������=`y!h��@m+��j�I��7i����������X��#���#������g*�>8��&�8�ij�D�Y����	����	���`��lLj9t�K^n� ��<d�H����8���I##�4�4����/o|4�9��o�|z��UR�\f�em����kC����S������_jk��ld��
���i	�}C3#V��L���?C�����$��.bq5����U���d y���z�z�B�=3��m�t!������7��&��(�/�[��, �]'����q���D�d�������e1Y�4M�2U��</K����LY>�tP��'�d��#RU���Z����V�������&�Z��D��'����>J$Sv��n�9Tm��D�1
���$���^u�������<8���M����$��I��H�����i�3�u�	���e��+��|�X����lX\��,1�J���.T�}x%S�a���pd�,�>;S�L8R�l�~����:InP��K+I����y�PuM�������y,���� ����>(��M�l�|�)����$A��b��M�p���2�����Y�>o���C=��e�����I�N�^w��"4AEd�ay� k&�P����^�j��tS�gL���@��������8�U6#�2,6�F�h��vd=;\p���h�m/3 �I5�B4�e�ud"/Ew�(�ne��>��L���N7������%�J[����'�u[�\�
��D�����y�S _�A=��q4N���H�����w`eu%���L5G��!Q�BDV����S|2�\BP���.[�"���������$��Ld���5S4,L��#�Z��O!����j��D+�>~�����t�0��0����T������C�]z���w���_�����1��;�������j��blnH?u�Nf���9�]n��g��"�����y4[~"���Tu\��xZ_]��@]�������c����MT"sS��g#�S�B����������d57C�8��?��������P���(y<�g�`��_�"$�{uuPf�hxvC����`��|��|�V2e3���MB]_��"z^F�mc��V��LW�����J_�Ec���~'V�)���J�R=}���c���Ju;�������<�hNu�>�;_V�"|aV������m�B��/�
]��D�G������K��U$yg��
�C/H>������_�#���k���S�-��4���XkX�M��)2>��[�]Q������'��@:hf�8�
������L���#Sg��YF����������Qf����c����5���o_~��c������u���+W�Z_���Z��������8�u�u,d�19�����X���@?����<w.��Ki�P�~�W���8��Z��-	9�����X�/�V�X
K��[r,�,�����r,p���,�7j4E��>����CS����G�{��c����S���w����,��w�����c����k��q\����D}s���%�C�K�#��K�w.9����r(Q�g�����c��n�G�_O�T����9���������M$���o6O�c�3�����)Ry��#54�����c��zd�T9��Ec�:�����Y�<\N7�A�%l���D(qn%l�`	6�8J���
/�G)B	9�PJ�����P���<X����>z���y�%��������<`x	@��J�����8�-���!y�%����[�G�<l���oUM��h�������������������������tj���i��ri���h��rh���g��rg���f��?:3��?�2��?�2��?y2��?92��?�1����Q�o��?������G+��{K��O~Kpc��q�n��=����������#�o���nKtc�D}s���%�C��%���/����x��(.��Z����bGt��\�b�OF�XI?e������g, ���	$mn�g��}��������c�b�o�d2�6��_�}v4��&�G������ $;��d0����F�4!��_:���C�d����(_��E.1fu��I���.2�|h�����Y���2,Pj����M�D���Mg�����"����P�T�%�cE�|H�"��
*�?.��������.;�M9R6_��9�����s�V���%�,�u�qF����:������QRRI/�"s��j_Z��0)?��Z�ZH>��P���d.��T?%���.�z���� ���'��EpZ�"��QV���-�D�Y���3��6����F���
6�K��+��i�V��x�+ *�\�|��&� ���*�r���`2*��n������2��)���#�=^�M�<�j]R-#�]�@���SG����)�ZrN �h����%4���} ��$��a��Ld(��k	�J����qW��W�b���<�z�\�)R0���:k���4��e9li.����|�H���<C�,���K�F��4\d��/�\����i;�w$Q���L����Q8�c�����-Qu���t��d�
9����z+y�fO�q�3Hq�@�*D'x/��H?D�����Jn^�\#������#�V/�#$C0C���q���F�n�p8�1N�(��x�������<��u}	rg�Yz�M~�8MH�}q��	�@l4��Mp��������B+;��&g�{4��z�c��������J�q�(���l�����hn�/?���|�$N1�7�J�����2��a�3N�l��6�u��`T��$��B����6�FAT�I;xU{i�����[>p�@�%2I���t��Me=�������Q[�����{�I�cS�}h����.�f5�{��NT��B���&��J�&[�#t#:��HG��g��Bo����)W�|�P�|�8���N���`��:�H��4.Qq����[u����
��:
��z/vrG<�o5g8v�Sv&�UN�m�?~�<p����S���T7���8��<�_80�_��pd@���Nnst�x����O[~9��Y���W	�+m\/8	���.�I�w�������s��V�=+J��X�
�� �GT�D�X$9�VG�|�{rF(�w�/@Tv�<L��'���#��,c<�������pfW��i�"�sei3I#�Um����� ����Uu�]�������a�A�I�
�w�z]�}<�9��� I2�h����S}�8�dZ*���jv[�^�2�!T	��dr�G���l@�
�\8mc	�.v[s�#a������z^���XAe��'����6������ge0�l�P��`P[%	>;/�p�{�B2G��/T��Ds0"(I��&��{h'��������y�����T����9dq����^�Q?�''��>#���BY!�!D��H��g�#�v���7����T�x��T���O�K��������ID2'� w��ZLf��P�b��'c�7�Aa@�1��e��������j�-B�v��/
XH{j�k�xAg���noA�����m����`�tq��S8���[F��8�h���3��:���F8�MYn�Z0������04�a���y�BL����C��##��
:�/�uU��`�P>l�����E���fz5&p���-�� 8����p��J����2�����bm=�B[J\���buN'��Pc����r��N�?�)e����G����H��Fpr�*Qq�
�mn>P3�1W ]rB�F��d=6���32���G2�V-������5H���Z��#� �&��6�/�.�� S�	0��Y���^�fT����>���������B+�����MQhm/.����
AB���+�����|��Ie�.�{�����g(������|�����)���J�q��gG4[l@��9_l��5
[���>��9}U+#�U�|�*|?y�<�tC�F����q��Z�EdX�D�N>��Cu�YL�s��0��Z�b�"w�^�@JH)���X�m$[���y�q
��� ���/����� ��i���z��9Em��mdy�(��n�Q�����g�=�$�P�YJ�r�9���oOW�� ���n?��^�<>T���K�KB�$!?zp��j���V�$���1*�����3O[���eJ"����K�l����"�AN�����3�74V��I��;_\�'��l�)K��n�U��i&E����{Y�����_F���Y!o�O(c�f���y����I��n����54Ru��Q��iN��b�z��|=x��J^"K'{�S�TT%*��'���������3�I�����������C�&�����%Qq&�1jx��\l�L��G���&����a����t�"�Dy�h�:@��$�!mp�i�q!AF.X��jx��3N�f/�[���n��G�G��;kOJG���lf�,�"D���0�"y9��hx[r������)c��at�N��zL��D��i���bQ�����aEAi� �E�9��t=|����/s�����/���~�����/�w��(f��"j�%�r��eE}}���k���	0�d�-���<B�r�>4_����D��	��q��i�P���eW���L�I����M�gER�d��@��o��VG����m2b�r=�I���=�����J���*���}�$I+r�]�:���tiP�m�g���/d6�
��S�M��Y��|`�sI��V����C�T�m�������e�����7n�S����cW��v��Y�m����nf����n6&�<1t������]#w�|�:�3�.��h���u9��V��qG�����0����U_��������s�����&0OjN����eg	�����'�����p�
^�T��Ag�Mc���^����dN����
�D��n�%��t&��rY�����\x+�=�*//d��_^�|�M�����23I��V��5lHT�M"�b/�W�8��������I��EhvC�x�q��+Y�(;K�}�m�=UB�umNF�#����7�&��9�(���6�������+�c^:��m���@.h����,6�����A�8��z<	T�v�����l�dPF������`0E�������C�K�F0��=���
���|8R@
���	�k'��{�
��JWj�����Odr<��F���m����^R��M����TV}��f#��7:^�����L��2������@��LHK>1G6����h�Y��Z�P��q��T��_���2t��������[��6�l��Ro�G��s�o�|��h��1i{����n�m���[������Sc����
���gT�H�]�+��<u������1��g-*�N��@VW��+�]�/OZ_�(m
���'����a�x��}{��8��^s�������8��?��g��������
�������z��U�S���t��w4�f�4�h�X��}}EX\�@�v��h��iN�#��n�3�oE�Y*�p���+/�-���pJ����w ��m`�6%u�n��Re�(���9a��8�M	�xMl�G4A#=$��d!S�}���c���$��o��x�N�n�C�B�r�x��������&`����t���d�������&���M=�����+�2���Ko��JF80C_��V"�leE%���<��g+���r��i�bO���S��e���_�|�M�����F�����8���h�-Y���i>;/?%b�b�V4�4�D��j��]F_������~pb���M0�i!|��#U��(��mm� ^F"W@gC�$�A��IL�p����t&�)�dh�g?�)1�`C��|i������^
�H.(��M �[��{�K��VX�M���

F{��(��$1u���D�j���wWua�V�Hh��]g�=��Q���{Zo!�f��Ycx/3��������6
1��	x�,��@��A_5/s�p��E?+��.7U(��zO�!Q$^3'k�z�CoE%��L�W��-�,;���������%~?�+���`�_��z����0�gsg?��6SH�X,�����Z���/!� I4��@����.���._�osE��Lf��s���5p�"���nf^��J>j��+7&��o��B]�R�Q�?jW�rg�"9uR'tc�3�M�F���]��)S����x�)���>����L�ks�0���2����7\���f��w�l<�w���o@x�v��������v:����e����ytPW�Z1��������Hl�EE�Q��m�;���N�7��,N�e���m?;��Q�	�$������
��Dv�������~�����zIl(��^o���u*�,V��7<��w�i10I����R�*C|�T�&���o��]1�.�g5��6Q_P�=�9z*��G�pg?�b��lWD�`�\Y$�D�{�{5��+3$�1X�����N
Vb1k'�~1��������j����	�qE��V~W�.��.E���[@cWj��6��}�|Q�Pu��	H���5sN$-�����m�h<�(�����++y����ru�$�q+���Q7M,�~��eOw�����Z�f���������0t����)D�!t��7j�q/��.1!����f�v������E�B:�'����5���-R�1{������'|�\�S��#�Nd?�TC#��������O�7�-��WT�I�^�F�����!����a +0�ma���H���n����0�V:m8N�~?m8�����P��
�6��������gG��C��u�m� 6v�G$D2��Z�X��9d����In]M�&�����JB�v3�-��w������N�_�'sh�#`�?It�m�#��gg8P�Ty����:J���$2^�z��CggB,8hDOG8�B�i��t�f+� ��+����(I*���3t&��";B/��Y�h(�F����,��1�g� �n$c��F��iTb�hX�M@>��P�1�>_&���O�����p-������q��G~���i��	��h���Q|��_����eg���w�l����S�A�
�����\����	1/��D���u�."���aI���[qV	}�eZ��T��;�����y�<�n}���6�Qk������	X�F��ya���C!~���U�14��I�<.a���\��ig_r�#6&��0V�{�2�A�xF���OH�t�-�p���� &b�YY���9��8�����9�O���(�XHl��|�V�(�U������������r�A;�1�t������[��
�~�dWi$h��n�j�W6�o�yqYF�_'o�.�������K7��At`�H+	���]+�>;B���d����kCF&��}�I�RqB2����
������n,��X���jYpX	e�~�6�����w	Dd�
2i���X0^�B���	��2�z�4�:sg�����T������FmP?meBtx�N�'�'���B�%��Yz��
�Z��������E�����I�����w����u���s�i�jOO���f��j�����41!�}�Xo[jp;���������i��1���c�^�$f7YY$���.��$����xu5��MUE�����--?DZ�f_���`DSD2>�������3B!o�fe�j:# �A���	��l���~w����(���^n(�+�Pf>@,�_�<���=��f�",C���^ze�������"������-��be�\���8�m3���(��K�R����!>���������p�s�T����"�%";�����������8�>�@q���]T���w�5�dD�$U���K����:1�G��I���%T���4~H-����xUG&��1�#�[��*4���/���`���'x��G�W��9N�U6��(����������������A�O�j����������wV�W�$����������$�h��'=��\�����������v��F&�"�=�a8��.LZF��p����:/������0�Y ���.�#9���P���~��U5���F���7�	���E�:�#���,H��w��25�d�OQ�L���������c���L�Lt	�����I�e�, l��������-���tH�����W������
�����u�s���
E�����j���yg'�g#.�H��������]�
��H�S�K��<�IYq��:��s[+�a^�.z�o]������_y�X�}.�{�����0_���tc%��;�N�A����+CE��t��{p����0j�^o��h��V�H$�p�0�1T���=�`#~��+��cI�f�f���D�g����G�T�W�Cs������M�`���*/�"Nz�x�3�9Q\����$s��ggU'<S���Nn��p4��*�;��w��N���U��$2�N\������g��S>���G�<
�My��8����."����e�*�\'�daC�����
9=�Svfg�c0lv����0�I����?�{vVTm�2]N��H�R�,��x���w�+���5����>���N����eTm�"�;�D��!�[���@l"s��>�t���lG���]�|~az]�;��]
|vTm�����N�A~�����:������@7����=^]�[P�	��E�c6kD+�pX���Mt���N��Sd�>m�T'�!�y����_8*����)��0����#�8�Z��
p�<��	��6�J�t���l�e{a
����6g�'�F"Sl�$t���7�����V��)���e�zn�+��N�����]��
��/�-Mv�er�����L��D�V��N��
��D�L���VG��f��L|?�1w����>0��d�ns������m������}��[H"#��=��Bu���"\D3u�� �����a��8���j4�0�Hd�uh��5��`�qbp�_K$���2	r�I���j��]�!�|2��Lo5��/L��,�%FC��
�n����A��E�|��Fn������s�fY�@�U]��������]|v�������N��#��F�sL�,f@V�;3���X��	����D���jI�����@����C�.�$^���Z����H+�-�qU����r��B`�=���D}��������a�Y�?�;8y#�3�\+���h���Bx��S|"ydN��!���>������d������y��;x�"1���`�*��5mT��B]�Z�����.�&�����P�&1���,@n�"����n��8Zs�_G�4����a��ze������ ]���O���F�}��i�����<=��I����EI*��?�	k�f��#�n��o���|�!u�DI��#B����$�p3��lU1&�UL*����������Zi��?3�J?�� 2��O�r� ��[��s�M@.���aB���R��������t_�qM��&�5ty����$���!�1ypS�A.�}B%xV�"���������C����^���C��FIu�o�P]�6�d�;����F�X�_X$�T>��������y�w�*g&���������X��Zo���8�ON�LA##��R=������{�'����_X$��L���{�g �o�j(&�Qq�LM��%�)H!��nr;�iX��.#��9�����}';86G��7�����W�f�p46r�S
Vb�Z����o~u��W���VW������4���e8����Qj�XL"����t��'�PV�7x�:�|���d��5�J��o�_������O]��V_a��KW,�����I�y~�Z7�+�������y^ H��s��r����"F�.��i�h��.�2��d�o��f�o�X�f)Z��
_�Yf%�2/,���)Z����o��Op+�0/#�|es"�}�P�T?zM QK�6?z�Vj����yA�a~N���a~Nw�L	���;!
x0��zRn��������meB:GC����H$&f[����;��a����
3�xH�YX6�Z�
�����ya���
�.�G��2�����u������"���7����e~p@�[��{�c��HTaV��q���6���F���t��2'�Z������[�����c�q�Nv�i ��!�I���EHV���D$-��-�8�����.�(�=����W��Y\��o����Mf�O}�yLI�dP�wF�����'���K��|6�����p�����?�Zi�2�����`"��&�VB�C"���r �5���w��I�=j���y>�Z��O�����"�4�������,�A�/�]��/�����0]'�������P�-K�:���n��t^�6��:��g�E����A�������)�=��������7�8���T��+x����"��6�7;�0%���fK*���E�x�������Nv_iVH����lR8.� k'�O
�G �W���d>#�&4��L`R)�	��������pV�^��	�Yj�*���l�L���)�����F��i�~�,��Oh��`�9��tB(�N
�Y����$�	'�i��	�B�
��9C_������]���"����m�`}9��7{L*m�������N������2h��T��$������lv�'|������M���c[EV�e��		����E�����L�>����H{��K_	�JH�/�aY�����c7F�P=�`ep�z'�N��.�,t~v2�n�h��Y�a���
};.�P~t��K7��N^�����'���?�?�H>;+�-���^��k���|K�-/�uE�,1��>V�`�%�l�[g�
.���������*JE�����gG���y�[�k�f��V��,p8(��Ao�JD����r#�v�SkIm������kl2��
q�8����S��M������My4�N7m4[]z��:1��
�/
���.����w2{�IN��34�S��n�������;�Dt
"@����������7�|rI>�0m���W���7�3���������,
�B����n��4���8�0Q�����Ug:C�~�u�?�c	�8&���e�f�a�S�����m8���0�7������
+�H����i�gE_'����9��_Mt�V��Y�>�����x����-�k����L��]��H�U��)�5�i��,����X`Z)�)�(=����06SF!Tp��[>EN9��{G^8u����K|��V�K�6f��0���:M��ya��\c%���)0���A�OoB���a�[zS�D��/\���I����(�F�%�~�
~���U:#��d�f�6�t`����uEI�;�.E����2��*mbPieA�3��/i����)��4ZZ���z�%:e����s\�[�y���=\S]]��*���F��U�ut��2�.��Mj����\m}NZ0��I�O_3s����3�����H�������m�baU����e#y�.�j<�:@��5=��L7���E�\YP���������+-�)
@���,7�m���;s���Ng��~�GW���N��m�e�[�����*'�~�cO��R��'>��e9y�;��U[����0���h:��F��kw�0�|��+u����<�����ank�b$5f($-B�a��:�UW�&��SY��dL%���.u.�M�
�4��lq�Z
���������9�
���dF�'>���;Y�����Dkw*9���%D�%�ydS(9�8�\BdI�}�SF���'���A�����>��O��C����w}���@��������S������U��#����b��Z�R�ZPe/��1e+��1�v�:Z�����&]E�������%6����[���r��I[3���g����I�C��9q<�L3�kK������_���"��O����S�2��O�����;V����_�����o����o������]�����R����9��d���&�w�E�T����L'�t��
�e�J�2�������>8&����t��v8$h@��@7s�E2�����w� ���%2L��w4�g��!gP��X�y����������	N�H�l�t��y��H���z;��x�Q�;�C�c)!"�|�3=��s��~��j�Ta�;��<(�:�����=��t!�5\�dq�)N�5���*�o���L�|A�F��H��?u!���	�x9�s�M�`:�MR�"3/��O�D��h+�[g���e>�u�J������gKc5}�S�q�E�7�4���H�{%%m=-X�M�T�t<h���`P��9�����.��O��Z;��jJz����]~Z�?80�9K4���
�)�eEI�4�����I��f$�VT�u���5��$�����O ��?�l�n��
\���R����4�����PZ�mo.�d��������0Ca�O�V2,��=�_��@?��lh ZG���+I���L�h���NS�a���=<�.V���e�
&��\�N�Do(�����z�z����?���S��&/�_$nH�G��Q�l8���������z��v3��|�1�"�=\���-+%�[���	�sl0��\{AA�>�)W�/��������H�7	�����	�<�.����2���Yp<U�2�z������&�x�&/�gZ�9z����)�����	$Z�"��]����,��U8�����"���=U�g��)�����w�*�:�)�����4���!�	$���p���GY(��;9�6��j�F�4Qg�mh<z���S��H�\Xt��}�+��d������a@X�xf�����8��"��WB*W#h6�,�2��~���E"UK���C��.o-f�4�I����xc�DA�T�l������"$���n���I��q�q]�q�	]��$��u�F|VR���w2�&��"V����m�zLpH"��E����mv��B�r�����Lf#�"��(&����+	o�A�����wg���2[��"��kE�0��5����aE�8�2Y�\�����P����,���I�]����*�����VYG�Y��*���b�M����p\k�2�6x�����w>i
�s��L{#����#��J�&wWxX&P��
H�gdg��lE��A#��A97M�Q�v������vF�P���Kr��^�}��$5{�'M�:1YPa�T����foh�<���`h�`�;���N���yjg���N,��~��.
B�w��	���L=�6n/b����x_���`x��1���f���>C�/y��!o���6$'2�$�]&.��YV��V2G�.K�l�e���r\N�UC��	,(1s-�������-*[�]�(����(�L���LjS�!��u��g6	R74�t$6��S}��_P�����z���*+��t�nn����q��GL�f��ez|���3"�+�y�b�lz��+��TO�:K@�G��R=s���ecR����zi j����zi�����W4�	���{pG�HB?��i���j�.������y5�������&�A�O��Yx���k�/��Q�lp�z@T�
����g.^��J����-8������Z���>�9�X?x5��4���o���Z������zO�wRgAs,(z3�M����07��0v�L���VS�����z��)�sK�p/���R���k	�&���A��L��q��4�Z�@�"��jI�������gn�����bB�L���Y��0��{�����3?rV'������R"�����������)����mZY;��~A��A7�C���%��n��RYu���}�(�S�$�dw���h���ZhN���&������E����82���J92=jk�"�emzfa�����`b�0��:�v7. ����������#X���&x����I���3��a��G}�aD�FlA�����v[�Q�X&S��3`F�������>�/�����o7�5�/^�}I��I��H�_���S`��Q�{S�������f�B�9.������&hi��}-��A;_���#����#�k�Sl�a���D���f�4���M\!��
HmlFx�'-����u�^��t�#�8`7����g2����63�<nuAx�Gt����x]v���M�AffW$�=��k+�6`g2U��5�2�}
Q��������:R;���&z��z��ZU����	��NT�2�������m��4���,-b��b5e���i_C�
�)z�q~%I��4[��ub!i���.]v0����,���'C�'�e3�A�hz���?es���\�K+�e�LP;Z�a��}:�[��~�xV?����V+[(T��R�i��h�hM|��,�e�M2�� A����&`�7	<���	[RM�|���v���$��#��'�dE{�z����vO��vp?��i�DX���^����h����a[FAX����nQQD��n��Kt�$h��?�����&�9��m�H�*���\�����������f�!����E��*#��������L'�}��%nZ�����,�����bW�o��@�"���[���	�J���i��������G��t5E��������6p�X����L�lA��5��X���BJa�	,�6��I_��m���V���5C�<��T��t*��4]]��r�8�-�ov����
��`�L��WC�15�i����Z����u�����4�`pN��hl�Q�x���KB�|vly�E8b-�jK���q!!���6�{��-2�w�N0��J�u������E?��=��s��� sC]u2x!5I14�7�G���3h0�k��=+B��U�"4�a���:����n�#�}ov��}�/�1>�[�4��FOI���E�M��@+�����]"�P���sv����O�(qd���>N`��`��_4��������{��| +]���\o�n�Q^m����b6���h���?�?�l������Ni���QUOlh�����8V4��MP�t��.+YzjD�i��:$Pq
q��M.��h���E�S^�����Lt������B����}��������h���C�0z`a��J+s�0�G4��o�PW�?�����^|���L�
|od��������J��7-��{������.(}2�&F���Rv6=��f�lT�33��n�Q��G�lh��6�ph&"2��8�`>I����������G���N����&����LV��rr:]��D�5���h��N�7^�|;�N%������/��/a�\����	me!.���Q��B��,����rpO���f���Ql6	,|6&��_�4\
j`DE�EO��%o�b��X���0/Nc�\��>����[B��k�)'�b�������M�U��frA�ja�yGK'������6��0�l�#��(i��{=O�	2edo���0=CG3N�V$J��p��h��?���\Y�|�E��X���R���m���������S��{"[�A10����u��T���U������JU�5����		;:�$���x��	�9�����8�o�$u���	��y���X�����J��qv�#����U�����u���gb"�@��7&�4Y����>����EXXK���]�F�Q������	`��%2{���</�U��W�(
����o,�S�c
��g���/m9�by�>�&�}��C m`Y`��^_����?}/���$����A�3�&clF���l��v&�|8�]��!"0�X��g�u!���fcX!-�5Z��^;!>?���T�p���71<���/�+6���<�ic��UoN�!�"�����}j�C������\������j�����z����0X�oE�Y*d�A�d@#�1��}}?Uu������;/1��G���c18�j)m�ym�*O�J��R1���|�=���QT�B�U7��/�6l����t�~��tA �"Kc;O�J�!����D��]PI�B�Pn�������W�b����^�E$,���I���j]���@_�r��3!���^m.����dcB5�x���
*��!��>�����4�/��M ��
i����1;C=��/�,C�W��#b�P���nl��Uf�@�i���G�_^,������[�����a������D��F���N�o�q3�����
M�Lw���:�g�8�����[Q���gY��ot�$�"@���J�U���v;�G������	NF^Wd$^3;��O�[Hq����)"+]L��!i���q��U��rAfE�6�!���U��%��A�<_Bx��^u�9���������JC�0��6��l�z��'I@xA	L������6��H����n��YQ���	����?�������L^��ed:���TGz%��g��H2������H\��wQ���\/	�/��^�!�ZIc|B�.
f��|�
�J�>��4/�!q��N�|o�u�EV���2I��8nt��_��4��B��%��l��.(�8����*+�22��(�|����8K��+�tEe��U��	`���~{�8�49�#: �q������L�zB�����\S>�6���]dq���t�	@F�����q���+2(;����������9����j�2d<��(*��OMG�e�8[@e�Dj/���b]x%�(�jZ+��D%B�0�<��o��@�0�V":4,(���U20�&��_�
:���8|v$ja"�B�~��D"��
OE&�.��]�~��_iC�9�PVb�~�t����ps�)K&��s9�8�HV������,����!���`������z!�J���`,:����ig��z���?#�����a������NH�����U�2������sr������_�����i�o�]~�W���
MG�i���j�);s������=	qf^@��p������.Y�xu��=��heQQO6�=��aW����v��z���f����o((�����m
vk��u����M�;v����TX�R������V+�OD����d

����@h�y&�&B��	���46������s^�������I��E����d�����v2��8�a1�7���=N�m�{0'�l������E���Z}xY�p���D$!�<��n���,�C�������W��l(���R��gG2�@�`N;3 >#)�L�x���Npwn�!*��B��b1+��Z�J���������&�fA���X�BEI:�m(����}���)F�C���nk{����@��o��)���Un:����Ww���a}�������(h@C��UBR?�� �<��^Z ��7��zh~��^�Z��Qh~�������0+K�����&G}��B�2���
��T��7����L^�d��*\t�.L���$7�;�� @?�bJ�����=���8	���3X��o&�6����{X$"�����xW�=�4$�;�����.��#Li��L]��l5]���	��:p���w�G=�h�1���t��+����|od��OO�!Z�\*�wj��oW�$"����N�d����P��k�h��O�z�$��d���E��0<U�;������W"q%�/L�~l�9�S��	�F����DP7<��C p�!6"��b�v��+
d�&�9�}Y���^6�*����9��S#|�����	�q���o2��n�x�#�Ku�bD�����@�u7��T�6	�O�x��`�O
�#@z�^J��,�"����% ���P��T		�i���i����w�}oD��>2��p����ft@��#?T�k	��J���`��iJ��Wv�����J�b5o-�8h�K�6�['G���*��q�J���}��9��l=��j��#V�S��Kz�;>6�,{x	��������;�I(����������v���d1��P,����R�����y.u�*=�[�`5G|A��6�����O��3	���^����v,�4p�Xs�ZT "s������j���%$@�$+WU�n���P��/�FZ�Nc����y����wX�K(4��Hd��lP6�A������"�����)�X��)M���G�%[���Z�T)�_���k ����<�^���"�HZ�����x���L �V"��E�.,�f��+Pq�
�j����E"rS�U{yK(�B���
�EGkT����2��zZ��K�����H��Ch��K��f!S~�_E
U��k�X�?*��K?z]��a/�a�WC��
�(�j����6��p��S��4�-4~U����-�����G��|���{G��SD��j_fnW��Di�K3���*����8��
������{U����r����f����	�R��)zXN����1_V\;��e�"=B
��1���7��[%�C�w&����N,Z���)���'���FPB
$��'\��wR;M���Fc�9��iC�p2�i�e��	��\CO|�@�M+"( �k�"��+��X��o���p����Y�j;O�����<�����H�nu��L�;��`�8�|��>~���(B�c�/�5���b/�#���7�m"��Z����f�����lA�4��F��EM�<�+�D�����4�OCj;�)�l���'�$����L�S�F����j�X��/������|&�&@a[[�����T���i#�w�%5���%�A�;z>6�_�X�gh�n
�=�K�z���
A;�-������r��ce2e�)����������
Yb�?2F��?+
���ECd�iW
<��*����Z��X]����u�uL���7>+?��Ru�uE�������]�^�=�/����o�}t��H�_�n]?���nM*��M?����d�k3��0,�0���i���d"��V?��T
�{��h`�7^S�+T�z���G��������pTUMp��H����7R��I�P:��N���H���Y��b��kX@�oU�H���be���\#�����Pq&��B�������$=KF�z�0����`�
-��D����������?{8L��8K�$�����I���I�I�`$M>5���X�9Y9F'b��m�{�-o�m�����fZ>m���%��
A���[Q	�ip$�=4�gG���8�=��7E�A�x���;��������w$M�]�s��gP��z9���P�x��W���em����6�GBN��>��7����0T4z��@��^������jS��2��eCI>���zv�>�q�0��1M�?_+A�c$�X��C0��1����"�=�����8@��F27��D���� {`��"G=�~��N�dY�Q?V�g���sr&�����3w:n���KfV�]BG�����y�
}S��C<����d�%1���; ��C��L$._���~(M�[�#����w��"I�*kP^�*�T�oI�\����)��0�'l�2_��	�$���2[��sM�����&l�_�������/���|����-���?���_�d�������(�FK% ���K��R��w*9�8G.qj~pKB=S�� ���vd���V�������\v&)�N��y���U�ld��4��������LY�O�y��y*�����d2Y�S��nn���26S�d�'?��m0O�+�F��(l���>�������IdE��Gi�9P���L�,+������� ��|7�?*gei�	. ����v��	����wf �����'�dN�J$����;�}t�&`>�I���V��F�<@fa�����}��#*H<�Pr6�����p���&��!�����RE�v.����{�a�z��u��@����%�"i��Q�����t�L��9&�Z��bL�IN����v��F$�����������Y���^������f�T+s���KY��nz���\���9��.De��7>�6SJR�%�1Af�!�hJ4�x�E��a�5]�]_�X���Y�H	��k�d
��.HX����hM3qYmi��!����K��[�)�CM�����(����.d��\f�tnp8O7�E%SS���I�\���Q�R�5���w�9]���qk:w�%YSA������bh��ov�X���`��hK3���x��"�y}O7��M ���������Y
2Mi��tK��T��%ZR���%]�lp3��#(Q	�?O�@&���.�*3=���������%8k
�%Sl
r[��}nK���5�RC�m��.�����N�*�4�/Bv��.��[Tn}����&����%��I]�f�L�+Y��H:�1�E�L��?������E}�YA��+*���M�29��@�*y�O��EnW5����A���j"���������
��y�#jT;?��V��S�F�t�Vu�\#gE�������N�*��F���������E�� ����h!�7(�Uo�J��3;�]-��7��8��:_��]�M0gg����{����Tu����`W�i3���<�`T2����bM��L���4�5�A8A����[�:��6����������&�nQ�i���vz�nP;�������f�l��!!�iz����$���}���w~bo��p��t8'��SC�mC�<��xRl���9������3PK���A���u��������2�y���!�F�����w_������q�����>B:t���W=j_O��X���a����/R/��������lM@�8�Z��Q�gIe�7T�0�����84���$s}��zN�P#�X,3S�EY�3U���?�f������F�}���ma�$�E�h6z�'�c���}���������X���)�Q�7����Dvl3�}�>i��v���U,����>��r>��g:y�j�vVrF<8���gGf�"P�0�TU�������W�Y^�����s���_���oEo�	������Z]��D��^�~�;3�,$��@�kp}�6�����D`�b�4��������P���=a��>MBt��nr2�Z��Y�TNZp��Y�E����s�D��-�H���e�L�a��T��[����b��]\�m��[�_?/���e����������F�$���W"�S�P3!��y�;�q�I����gE3
i�]�
6z�����=���$��F�u���9@;�,����9���
���{eRt>��b����Z�)n��/z{���B����rZ�[��tK�|L[��yc��n�j,t���X��+�JW>�|�j�yIxUB����\���$O����h����=h��H�
7t6�J�ay����*����r�
��Lm��K���q�������0�@���<p�VL&!�j��H{+����R��K"���+�	���{8��46�ss�1=��lL�K>V��?�����(Rc��K2!�[��'_�~V$�`] �4������/�����?2e���=�zCp1K���s0+���	
leQ���In���������|#�2�f����~�d����>O���3���y�C�<ec�����4��6�ZF�@D����W��������wy`�<rk%U�}�{�
��������#��$G)�x
�ev${��/��'���ui�V��eT$'�������NQ����������x!�dUb�UCy��@%�����Bg��da�X�$�����ffs��m�QlA�`=����<,'������2$���W~Tnt�_�@��&�i���8R�W�4���
% N,O�����F�M`n5��|vDPrm]�/c��c��g����#��Ps������������e��A��{1�?nT�����R����`��3i����:3��p�[��;dT"a��������-!)�Y}�2�n;�e��-�.51��:�3�J����q�~��3#T�h���W@�[�_��#	
�T�+X���3����G+h��o�KQ�fT95sk��L������Ps���\��I�-AqU�[L�\�	57j �K#B�KbT���V��Y��H�3�`I�M���-��naV��A�����Mb��6���7�6l:��m4N����V�H��d���E&9\�|����sH %�N�9���c��� /��E�� �Ho# ���6�4�=m��l�^����o��D�+��tyiA�����a/��-�l
{��	��t��/�B�`�PK�1���@��]#}7O�+/6A�q��a6�0����@������b�y!���Eo�>���i��#u_\���i��Z����$c�Art
��"��I��i�k�\�LV��u�$���Xj3��I�����I�"���C��M�!hc�~3����=��Z�[�T����	l3�
\����M~T���I��3uf����hc��2��73��r�5��I&�=8	������HB�^K�+����w����M�Y������E��j:|���M��f^�Vx/=���3;(����Lky��K��@T�����0�/�:�-7����%��*3�m~l��U^L�-J`��eO�e9
h�Ref����+'4nD����8���<���H
�����9�]R��yUh�O�t��o�Y��IH��m���o>��J��� �&VV�N@
�<?���	P@K�Y����
�#&d��n��H��Y���+���LF-�!�oy�8+�6��F�OGZ
��	95C�Y��L�e��hWw�+G*����'�G��o���7���V���-�~��li����b�o����]�M��H���9�I��WA���!���,��/��Tn+C�5\��V[["�/����u]���*?@!���q\
A���D�o]�a
�cnm�	I�_�����z��Xd��
�D��M�f�S��=L�H[P�����W/�����G4������=)1�k�	�MC���!k���X�^��V�zA��*W�p�Q�2~��e]q=���nC��6�H��j��Dy���	]s�K>�=/���`L��7rN
��Y2��0!WE&�H��:����e��r�{��T������+����"b�n&J�6�t����$���ck�D����Q����sU�*(��U��@p��lfV��������V�	v���ua��H��d[��q;����\q�V���ZH0
�iH+�f���y2�R;���@��U�?�a�.�*ob�N�Z\�}s���X��C����Wm�V��������������L\�w� �[F�]����Y���M���AN� 7)���4|�H��1aa��n����������Pu�����"��M�w���Z@0L��PQ����Dd��Q�l����m���%s��,����D���f8	�
�J��e���eV������)pF�_rVP�5���.f�
��,���0�V����VJ�g{|����l�n���=/$�N-3�Nr ��c��"%"sm������n�K$@S�2���$Pkj/N��3���5nd�m]C�gE��>cg|�bA��/],��7�o)dP+.�&}��l�����%r]�l�:/�w�K�~{T��j�U��t������wu��e��6�u��Yvm�y8i�g��fi��;}G�Y�J�.������6E�_ee���0�#xe�����������L���}a�M�A����m�Ij����$&�����k��ek|��`��??���~V��=�����qU����|�~�=�j������8�����~Y�p���m�\G�,b��m�����u.����e�N��E���._-_���e��}O��=_�G���|���m��]���j��;��py��c�|���u��g�5����/��=U*�p��J�8/��������uz]��H��LT�UL[��:J�1^�{�.b�>���"��gK�E��s��Z������}��t����������Z.[���3]1^�V��E�{._��s��Z���u������6����b4w��e�������%�3]���}�G22������W.���um�V!��Y����-k][��g�x��:�d������Af�O����������x�,���_��t1^7[����?]�����.��f�O�u�����z���z}���-�_0��������z����b�~��s����_?��{�_������������h_�1�E����/��=�}���`���e�b_t.���q���}����h[�-�E��k�/��=�}���X���e�b_t,���a�����N��hW�)�E��K�/��=�}���B�C�O���;z5[w(�j� �Ca��
�{��P��h��Ca�s��Z������%"8v���3����������]�Dp(�������=�����s�����������D)�e��I�;�Z'"2�e8���`^d9�<�"2~�J����(����"��>w�iC���D:6(�������8{����o�`0U�J�CN��/9��.&?$~�<9Hs�=�	���3#
^�t9�!H�#�Z` ���#^qA�f['�����2A�7�V�Z6�o��]:�����a��6.$��M8����<fGI���"�c�dF� n�:w�Ge�D42R�����/�DLI�.Bl2����@��1cf�oU|V�%�9�2_g�����6�qx~m�S��G��G�V�E
�j���]c�e��j ']�>6��
b��P�|H�fE����t�!���K���D^6��.JV;���ab�c;~]��Vb����(7j��T�7`O��������:�13Q�C�Tf3�#"n���:��0t*7i�_vY�%Q��j���l��@���� ;&��N.<+�Rum����S
��l�~"�~��`�jG[/�����l��'b��l��@.1��L����nHmM��
�7(��}��d'�R%?9�������D����������*����>R���� �S�ig%0�vMCk��D4+R]~^�c1EiKs�v���v.w,��I�"�J���tX��Qd��:E��w���D�i8�?�S���;O�����	�}�CV�t�A�L;@�ZAeI~�R]��5��3O�wD�s��J�,~Ig(�qoG����)K78�^Pey�YC�����G����Q���`�O��6���E�9y��eB+#2��1�|��B�K���)O�9�w��2����X�0S����g!.���2o5el�Y���@�wuU���H�#���y�)8�|A�\6��\h�q����ZI�,���>+��8NV2L��` ������W�#���9�*;h�"��(2�X/�)��Vd��IF+k�y�TK���>\~^�s������+O��d)OO]����(O�e���"��;�����L�Ik��V��T��,����)c��J������k����e��75C�e
�8��nk�,���R�y�~�E,6�8&�i�I�T����z��+KG-����S9$R���!�P������@��S�R�������������U?+�O��� z��B�������~��Y����+(Q���T�e�����Q�;W�B���c���(���s��������x�-.����*��D0�$*TJ������.�Jyc�&X��H;��TA<�C���4�����S��6/�A�Q�>k�;���������O���
�(v���l�_[�h����)�cY����"��Q.���#���h�$�����#�2E�<����i^(���Rk�����~��>B{;��W�1~���}��h�	���c.E������G$��'Y\�q�Y&���
u����?I;�$��M����I��������*�F�8*?+)���'Lz2����D���t�.�}V��[�����B�����%�����n�!��^�@,��
�	O��*��!��$�����)��j������q��,<K=9pJ���"W�����qX}�&C�W��������t�����}�
�P�����ZH1�=q��@�F�H��T�se��E��I�p��O�rzu�y�=%��G�;������D:s6�s���=e��0&��W�����T�N�4���r��J�,z�������o���1��i�*?J���Hz�i��+]��k
�"�~�������K���eKM��M�M$�P�
�����c!���
���Xv����
."P�j�fG(W��)��-|���@�~�1Y|ii�m{�h�s��|<G��c�J%��30q�5����C��*U&sbW =�,wFq��J����8�)�&��L�������h�ZuU�o���x�p�������<�a�vS����|���8���|49a%F�7p�C��T�$,�F����;!� .����/������z���*?/�{$���e,�r2����s�,A���8��%�9U5�/���C,f�<�:��#�"v�LujZ�� '�R�O��w���HPK�${cL{OmYC�Cr��<����u�����N_�:�D�.��
�d��R��u�*�w.W)�����M{���@���eL���0�"[��S{���f��X&�b��s����2��������p9�����)�Yh�|E	��G����8���3)`I���U;N65�y���L�+2Z���_�]\zg��KP���A�2f��S����U�N��d&{@�dbb�:y� &_jV||\��'Y��5��q����������y&����K����7�$�����EDx{!���|�����?r-,��k�����@���g{/���uh��Q�����]'�v�r�������sI�u�i2�_��sl,��E�3�WF�$�S�����'�fpq�����P�&1p������7�����������nD}����>�M\�Fe�C������S>
V�h���L���t��6sr�J��������H�p���BWF�Y^tsZ�����,?l��C����= \�q{@�n��j�����}���'f���j=������\�b���&8��N�M��P����"O��^���d$2��i�k
���B�V�9�Y6I-�T�I�������")U����d�_�S�3���j�V2���m�n~07���
��~�~�6�^^�e�jf����D2���h�'�����2�+I���h��Z���/L����B����%����~!���[n���TW��Xoy���gR�f�{�+�����3�#�@��p�yO
���_Q�������S��/`����!?uzv�f�A��M�����BI_����+�W5�����������.hs�d���+o��LC�s5��]72A-D>nC���F����]�H�K"������J"���c��B�R�U�y6�������[�lT[��A�1_��5[S�!o;�1e�dY#��������I���d��;%���&�ZL�"��Y�3_�����V�X�����%0u����*!���&1��{�	��������������3�4��}Ex�����?�m=YQ��4�b���#,;3T[�Ye���f������t"V�y�������(k��f9A����.:!�M��zR!��w�}Px�h9�2�F��D����N�+D0x��cV���$�D�9]����n`�M����`���f%j�'!������KSd�Q>�x�&�Bh���	9�O��������~��=�U,(����E���c�#�>t����4�����'�so�����"
gg����7����U���4s,Y>���B�PW	��Qc���D����<�s���vu�=����G��~�@��	����H�/]����
4|Y�|U���(m
���G3P�^����rC������e�d�g�c�{~�����6���O����6���?mp�q=�����d4]��7��tM��u��j���W4�EA�h������>t1�:��8��VT���N<�jPyZ�B�P7s���@�:7��@�o{�)28�����<o4+�� �`���F�$6��+������'�.��,�2+
��^��D:�����d������CiBo��x��������&`����t����ln���xeE�#�W�Jsb���L]M{��b�����~<�D����J"X�\���he!R8S.�=
V�mx����r��%�m~���E���(]��#*D�4�3Z�y�w�Wy�����L,.����&0�6�\�������b��){��>90�����m���u���V�@�x��6F/#��;�{�A&�x+*���_uv��3	L�C�?����L�
r�m��a��)��S������ ko��!�
�`���%�w��yoE�mC��^g$J��$�f����U������E�V4�
�z�G�2�2"x�L�-d�L�����t�&.HZ��qVG!��0W���
����Ax+��"�5�gS�9�
����G���.Y�xw�	� ��J�W���-�,9�?�\�O.��:�(^������v�>0B���j����r���,��M���&�u�_IT�	��<��#s,��c�n���q��8�+�r�����o����1���w�<�<�e;�����P;t���+�~�����W2��&K C��/_h3�����8Ss%��O����
�q�)?�������1�V^h��|�,�)��-22�g�{�B�)���n�w���LQ�����sng�l��L3}�%��uj�L��H�vWc/�*���n0�D��[L���7�RC�:_I�e��0�k�p�
�dW�J�T���<�B��������W�>�h��Y�d,~)��-sb1<q��D�U�n*]��/$Up����|��f����[a� ,d��D�����l�k�7j�iE���b�
Y�\>�-�8����J ����D���d�'�ghy��=����#n��!s��V����-�����_h���H�C��D4\/�BD�M*D��~��^Y����r�;xj�
����/�����G �w������Mc�(�2�|�2��+�F�������v���l<�-��j?�4�br�E�H���H
g�:�����_(�8C���)��vjp���	�E�o����)�w��v����E�0L�Z����T=�p�A_jA��n�:�Y�(�B��������,\��C��w) �=�c��f����,��@�����H�y#�*4	���hj������;-���^7P~:�40~:�4\��h�x���M��vq���?/dd�`upwk���lom�w�r�G����������X"���8�}�8�h���]Q'�@����v�yE��������W+b����l�"t��y����L�=���S��_��l%"�d�fn�d��b,|��c��������Le+M��/����a��n|s4�IqLZ���/2A��L������u��.�B5\!����M�����2
�dl	��D���^�S7n�����M��N>��M}�s���_�uRh
�:;�5���'�(�����9T��+����	�b��Ul
Y����g�7��h[�W4�ye�j;�l7\$"#���7�w\O
��r!����MS#��������������: ��T�E���uzc�����I��G5��R/��[�����c���/���#��X\B%wW��_h�����?JSBQ���+�&#���L����9�#}�%����`�!�Z�O7Y�����1zxE��u`r��;��N���Zk�z�x�]?��r���<�������h6f!S�
4
4��mn�}�r%8��b����f3����sR
�u.���'�"�Jz�����)����F0h�/A�#�B��]
$�y|V0?�.��;��N�2�����+_j�_�hX%4^b"�DGt������m�M����lE���_�6T�CHI����#�Z�DB���?�Xt���P�3Z1$��:���0B���Iyk�#N�d\���^>�&qAR'R�<��S^l�:��~i�F��|��s�{�&6��D�H��8���k��0���U�?�ZQ	*,���/����#z���=�������#�u�v�<���&��	;M��Q	��'�f2e9J�����
A~^d�0�.���q�S"�q�pG��n1�YX�MpaU�.gM����,��\v�I�.�-�,XBAn^0�����2�h��%�����sct��y�	��y�Cu�rF���z [z#������N a���\��qB��e�R�D�t|r�`���@{��j%LT������I�V��d�����]�N\��@[���
��v��	x�3�l�L5����h�f�����t�'@v\��a��b����,|a� ;.��&��0X ��+F2[��I;��i�<�V��(�����LQNw�y@x&%�>��V[���Y���?/YJF���
���`�'� ]��c"����|�#��e�$��FQa<A�����������UM!�EfR>�I���K���I"��Gn��L�Y��7��U�N��#i�/6���t��~�X�L\�1��$;8=Wb�y�I��hth�h=X&S�Q����G�}�7,d�]��^�������k�}��U�y����~"�����F�����E��.V���W����IA��7��	=��&`{�q�L�	�i��.����!�4��]j�.��W+��F`'��"�����P\n��d����g�m�����kb���`�9��#H3�:���D%�D������s&��&@�gp�PY�b���B�T��h0{�fx���./�`��)t����I�T�~	��>4���:��E]����p�&8�����Vy$���m'����t�m�iG8x�����-R�,A@���7�u "
�6�#~�iF]������������ wD,9N�����#�������x��B8p��3���(	��!;$p���#:x��0�/�8�|!��6�~�����H@�����.�8�[NZ��������	���8����%a�`�C�$���{��YB�#���`*'�B	�x��9o���A������:n(���/c2���58��X��D]�%�c��ow :� ��*�����H+�}�8A��Et���J���L�t� �hA�.��X��
��t� �>t��:�"�zC��[}NCr��Jt� O��������5�����T�<�'c-�&����hm�p63q��Uv�}��Ad��������`��:���^f�V�	���w�6|�(:O_Q]
%�jO#xS���X������-c������l���WvG�9�G
��a��"�J,�"I2�b�����#�v�a�w�n��y#t�*������C&���Z(Kr�ny�F���1���K�j^����3�2��������Ohev�+,����L�g>�u<���c2��-�8���Q#��	8.���|�(#�l�:N�V^u�������u�v`�j�ig��p��}hv�L�+2��@�j^7�����+��L���dZB����4M|&$�z�Ew�.?/��;�P��C�9��s~D��n��Y�7Iq��!!l-���G�������&����'����%�hOl�����X���c��AY�s0C����r	Lp���/Y����DVK���v�C��\�k�Qo��{'��O�q=���O~���	�*�Yw>d�u�bC���4+�!m.r���\P��(��%�yd�:f�1m#Z��M�G������u���(v���Xb���w�d�@s&�#�4���}�H���2�9�c�]����G|�In���q�&.����H�i�!dGZ�$�$��T�BYu���x�b�>��r�PB	�2Q��@�4�7��1Q@.�Sb(?/����@���S�f2+���Y��d\t�����5qX@=��7V�ueY�q��;�D46�B�^(��VK8���z�/1�������TA����$���y�orm�.MI2v��<��@��7A�k�����B�?eH2'�/D��Z���[5bu����}�����^=>���F.E
������1������8Le��!s���r������akE��o�I���

H\�?/�R
����<��
�1	��;��5D��*��h%�IE������\���EH�"Q����i��������|����p��z�(�a�:��D!Oy3)���:���X���`D���_�F�P�������K��/���fM�y�����=�n+�W$c��6��%�$�g�</xh�I
�!�aO/6�`O���A�,���M��������L�|]��^[��A������g��OR�[�}u8�b
f�M�B����(��-Y�����Rh6ghfeR�+�����%]����d�_tK�����\��b�a"���1]�"�z���"����U��.h����K�L��.h�	�g��?�J��/s�K��.�6�O�`��[�M��l������y�hI/�O����
J�GK�'K����R�(��	�)����M���o�l>��3Q_��bJoF���f2�6�/�v=�,��f]��zS6V��jHU{�6���0�����0a5��P$:~2�"���8~Rd�$M�#�,��?S>9	�����P�/�`��C�	t|A6�����L}:� �N���D���a��/:hR��(%6�����������4:f�W�
�"@��P;Fy�pD�5����E��/��#)U��&����gI��c�HJQ�Q�����#����H��������T�4�������0c�c�5
���8�Br��`���
r��l��>�l��u��Q;Mr�4��>FR�}��j���^+�gK�(���:B�DSCN�����z����
����[C��j���dLx��i������Z���OuDbc)7����]����"0c���+b<����=�pF^����"���!X�G���{�67m�5�P��/b��P0������ ���*�8I��7!���b���c:�yp�IN�z�qZN
��_���K$:���N�����)��VT�Y����FR��H��[
�Q�$��"@�C��I3��3W�V��v�f�
exJT��&R$���&��Y~S�,��3�����!��tl��`-�av+��5�+y0���7���#���W$>&�M/��_��eQ;��	n5�.ME:d�B��������pqgN� ��q����u�3�^UX2��Lj��QT�MC;S�����^�+ZG�Qc^�j%'$w��(������;��*w�����@%���}w�y�Pj����6V*����%:~�]~V�OI����6��:6��"D2�l��3����(�r��e����dp��Zv�����6�
^�Zmv�Zm2��M�����|�+*Tquh/��w��]�:�{�����E��Qo����<r�/����+�j���u��T��������6z+��%mMSk [��.��S�T>����?t���G����/Tg5�(F���-f�!�nRWI�~=����A8�����v����0��OcJ��]{%����.t����$�1��~'Y�u+����^I�����}���1xG&t��$#p���4����}��%b,������$�[al��7��o��aU����A�T�
��8�nr��
��!vS�^������\��e-��Z�"�������v��tA���{�n�H�;*����J\Q�r���"5|0�wP�q�?"'����������jjF|���*�$�.�j&>N0�r��
����"��`����v0Z��Ld��[E��Z.Od�����I5u�?[��4�����  L
)
��i���I�`�i:yg%}���������OmzH���C��s
3������f�����gb�<���Y������0qaA�G�<��trh*D�;x��'��`.(�o&6=4��
���y���o��\����&���Oy!����^7g�^���&�90@������#�	"����6����*&�6�\����sD(�Ts>H�`�3D$6A4�A�"�>������������:�#*�l~H�~���	6�@�����
�%���Ts 65��	��'��!e:34e���4�nmJH��
zs��K��uF�D'���aG�Utu��vu7������z>�{��b������������-�\�:�x��������Q�]���t���������{.�~���=�}�c���K����{����X���R�w,��(�_�T-O��e��$����z��>v]E������/5
���tvYE�����h�[�A��]�c����w}�I[^���?N?5/����Q�K����W������|���?���������O��\�<�7�0�����d�}����������~����i������ �e�N�j�r���9pL��~#���M���E����qm%S�Y�8�.
d�;�B�]��l����)�G����u�\�dvc��5�����ZKd�x�oT���N�g��]xD,�"�_3p�����_h���y�C7l�s+�2�m�����D���~������#���sO�n��%Cj��P~�:��"�!�H�.�]�,�:�a�:�<�y3bd�����A
p�	�Z��	��(�s�M����&)��-s�}��A�Yi���fy�������y�)�.R�v��c��<�[�*%�C��8�W�^I�@k�ip���	p��}���5-�<�2������f4�qM��g�����,VS���M������O���	p��O@��%Y\��T�����zZ5}+*��N��?�6\H��\W���7@}�^�S�n��[I��=�����`<��87���c����ZI=5��`��z2#���>+�������	�*���'1��
`����$�x�d>��0�*O�y���<�*�o�g�q�T��HB�X�v��P3�t�����b}���a���\|cl�z!y�������������\��6c�Li�8��	����GoT���d�k��K-h����L<0	��(�'���1Zs6�~%�*g�@9��&ac��VTO��?�I������j�Y9����3:x^�_r���u�;-H��~3����S��d�[��o�&��������(�w�����g\Z,�+�B�!Y1d���^��P&9�9T2��F�^�2�,@�`e)N-Ne��� �t�^��7��L��qE��=��@DC���C5��^9�@&S���������CXQ�*�/2�hQ;��?+��������J ���zi&��H����6=��%X�t� ��APs<�mh��[���E��c�����*B�umVaE��BPV��Wu]��i��kM��$'��KR�t��-���]@���\C!r"��e����v������G�
`v2+��c
���\�]I��8[l��h�	I��:OM��BDs�h�;��f�����aE�8�2Y�\�`[�w���y�,�����=qE�U ���VXG�Y�c�d�Xy�]�@������J	d���y�V���AS 3-d���.�zk�q�)�HI���\<O���$�qg����lE�,r#���r�5q�����S����0t]��K���x&��e �	���,���J*�b�k�^h�7��pk��c����B��EW`�F���N,��v���5e���&8hK�����Xg��X�o!.3�w��n0������c��������D>��F�<����HN�y� _���l�uqw��	L�1]���yQ�n���~9����&���L'_��hu2����El�����`f��������kY�iH/2v�n36����!�Q_��,����G��Ts
I�����(�"�M��|yE|���
f���Z��e��X�8#b���:�W):���'{���m.��8`�Y�6���.��!��//&e�������FB�<��J���,.��:���:v���d��F8�(�V��J�����4��7�^+�w���� o�;����+��k�g���I��u�������D�P�Nl����,D��=~����c�`h& �	�4�4��D����+����q�>����0���@��38���9Dg"E���)�Kx_�z������2/,�������% +�47��"���t������\�BD���Uq��&J��9B��	�L(��S�� k�Tz����V���/q��mr������)�qX������M�59UP��GQ]ZP{�!�p�{�a�d���SU�l��`G���%Y4i����y��m_Q-v�(�I�L;-��������4�G��6+����Y��������U[�F4A�����w�ROF�K�?����<J����	�����6H^����a��Q# U��{�����Y�����)�d�����?���k_�C�b���[������c�4����U�_B�BF������\���F�����E%��������W4�������=v��xY�d�����~����k�}wo'��$gD�O�zg��."b�X��	n�@3���&0�`���VVP���L9�8���'��._u���Su#����% g�5��]��w���m3�jf2Uw\5�2�u
Q����<����YGjgA���[�����M�RS�j�F7:aa���*S&��������&m6����s�XM��M����!�����X���$����Y�1����7I�^��d�vN��[HPuMN9t>��9��������S6v��?�.���u-�}3A�hQ�S���neR�3����|h�af7]�V)��*�(�����e3jX2q�P�mA���B��y�����M	)�&8}��>|6����$��.{�8�����,�����g��t �#rN�blFmE��t��g�� ,MY&S�Y9���z?�n<u��w�r��a=����6�������
DY�=2��P���;���w8�:���#
���f�1A6��q��J*���x��K�\���DI>�R]G���bS�8/-h5)i���o	�s;�J���i83��I�V�X!�Q���_��V�4��:�������-(%�Xofc�x�!)�&�X�t���q�\��B��h��0g8�|%�����t
]�y����C{=�sx7�}7/�E�ij��y��������e��S�Z����]�X3�7��al��x!�9�6v��`�(�����a�+����/U��������*�!�5�l���_+�z���$�*Nh]\ q��~����j:�����|�$�XP�������$����t���%Q<<eS�3eo�$/R�NO&x�	h7F%v<���f�#�s����
	2E��cc�J�ZvV�,�T�����B�8�O_�fv������h�����%�<x�$���X������)��)����w�v�F����T��]�*��xV5T�5f���V����Z�&������T����R=���M�j�:����&(�U�t���D���2|@:IT���l��Ohb���&�t3��o�A��o�3-)����y��T�c8�B�#�X��h)��sj7�W4��/�Pg�����Q�N�������"S�fO�{��G%��IK?�[7��]�GuW������b�7���	��6[dC�^H����(`�CU^h�3.�i���
=\��Y`��q��J�|���<n���pP�6�Z��PTN����w�`��M����f�����::O%����t������������-/8To!.|�/�����)�&"1��r`M�M�b���$����(��!8=puS#*B,z*>W��HD��U'�FS�XM=����H^w��4S��X8m02��M�
frERja��BM'���&|9���c7CT����-'��k=+�+�2��Y��skov��$J�?�i��exC��6,1WVI:������O�j�6�w�I��x$����f�0�II��������QO���]���s�2��4b��	�2��sb��x�M�����6H�CT�	� ����&�ti�	�@�K�P�Un�z�v���D���X;
��[kDe������9��V�>�#T�����lV�%N���}�Q���4��&`kk�:����k�v'�	�a]��E�4�����#���S�`dr;5HW9~!Z��g}�}��]������O/�~G�f'2O�J/_+��YuH�n/4��.����_�I�}��g�{���v9��Kwp��Z�[����/��H��M�1.7�c�WLH^Q�+��]�������'�PS��.=�wA�u���b���"��q�TP�,��!�y���8��Mm����~�����D���@�z������Z�����5rI��kW�C��}b�41a���+l�D8$[�,�-��7��i��q��X�3��=A�C6;����F�>.�5��l=��DQD�Y��Fw9�v�0�J��p�Yk6����c%^69)#Ht�G�t@�[�A�7jM��N|�����.��&���w�����aX��J���N6n�a\�<�U��������$�l"}��������P���s���-�o	jAwY���v�s��	u%R�2 ���}�[X��UF���t�w��/$���U+3b�|���H+��1���� 'U�}c'�G<n�����>d�{_3��������,cQ�m�Ul��`�^�����K�&��Q.����(�7���Jc��/.��t��|]������t���Y������#c������P<��
����/���
��p���Pk�>��>d��PU:i��W$���]eT�Jj��U=��ys
�
"�{QD���yDZ��
`�zb[�*+��S�X���������&a�G��&P.,��]��v�0�2��/��"
uy0���B�e0{������(���o�g2p��,�
|G%�^�}���b�CE���3�lz�����(�=s1_�|��DYt��(>%��5(oY��s�t�+)	L����q�L���/������=��?�&�{.Z���?�"?(�i�10gI���& �|��F�D���f�f�3��������e>.�w����������<�M����t�T�$�Q��T<NLefYWL�a����p1g������=J���snvyA<�����%]Vkx`(���g���a�S���+�\�5f�i,���$�G5>
�E����v�ie9����N�dY��.$�<.��fy�T2��\w1�ne.<��0R��
4s�f��7��[��2�(c��n=
����+1�{��	��.��n�(�"��&ii�Xh��(�d���=x���Y�w�{�=�Z��1����������T��w���[U�`�o�oD�����`.��L��?z���C���ue���b���Z����a�e��a�*��8����/h�3��K�� ����T�����~U�,J��j�n��u�nlL�9�i;��U��L��h��*�$�[duw�?q��^XU]7��"��ac2g����l�b-��T!�Ck�=d������XJ#���}�Kg���0�tCu�HC���d�����������5���A��g��C2.��>6�LD���L�$z�.+>�A�\M��H�	�{�/f��q�4-���
.�U	c����p��w9�Y�
h�~q9����pD.�2��e�d�������&�����E����&^Lq�� N����O,��?��&�*Hm����e\D�����y�+����U(�K�Wbn��:����5��A�������HE�y���N=��9���yC��u�E3Q�5������������
����;�H�1�\y
�k����O�f��vt�|u�(v�o81���! ���m���T}�����G?�E���y��B���B
/$�w�U�N�����ma���r8��E������~j��a9���b�rQ-&�	�T�LN�����4�
f�Rw�,�|knz�Y�c<�d0���t)N�)ldX�������HQl��H��A	��8�L�;����t
*�-��������+��5e�!���VY�#�q4�d������*D�"�0Q�IT��]A��}J��A]���B-�}��dD�o�\���t,��R'���F��|�G��U�d����r�g��y&��+B���%��hE�1�]�eP����f��@��8����}���g!_�QM�����T�p�;��#`������:�����j��~2�Z��%<U�m�u�_+&��WF6��M�#}�� s�Z����K;|w��;����x�b�j�:�$�j6�=�Z�,�h�4$C�1ps����<m�`�#b���5y���S��,�K�����������[}�X7m
�)o%uC�Y�����#U�z�x�*�f\�4�(��s>Q-x��SdG�0}����w���j��0N���t\����{��Y���J��u$J��}��"�.���z�&�(K��hI$��t��I�%���0'�LE/$���Y�.F�dKI.�[��
}�'1�J�u�q��ou�V��{!�/����4�(J�mA%�9,Yn�2�b��.>H�}��+b������h"�s�!�"��oQ�HB���(L��e������d1T����hd�}se!����MEo���I�\p<��
q������tT��vSYW��]��w���?_wi|���
%���4��B�8���B;��N�g�@f��-[e�"%�/b�_�q��<P��$���Zu����/�:R��^�"��)�T���u��/����z���VB�	H�����X��o]�'d��+"K5X�B���p�;��FX>t`O�)�����M;�n�
��X���t:��;,�b��Ei&�T^@�hi�l\;t�A&S=%J����@������>gf����Ym������a���A��!E�ed(�/\�����W
r�7�]�3��`��(�L����vz0 ���I����Mo����|W|���?E��'��wF��gU��w��$��Q�ND�9�h��Z�7���`��hp#�Q�u-kT�( �Yqd��ST�:����K���
�����Ce����`$������Nj�p�ye�� ��eP\�����d)X���\J������������8�����(G���hX99 lz�pP�*Y�@t�YG�S�����+lW��u�W�`(�������7C���lBx�NX�P/��4�����O�%��m��N��.k`����B�H����t.0*�����6(����9��4�����3&t��'���UK��I��Uuj�+�,��Nw��u���|�8z�v=��j#��z�����KQ1,�C*���x�7�@�zl�������BExw��a��|(T�F?�\��H��3�]q�~��}I��s�U
�����W������E0�� J�������lX5�� �A��2��@�!TF�-g,����A8x0B�����y�Ac[}+2�c� ���G�0�=�� � <�$��������K��a�1����bc#�������J�/���d���)����i��p��6���0fR=�f!n����l��T=2�(�;Hl1��!����J�[�<�n��/X�c�d��������"f�[O��<WQ��m#�#��
)d���I�u��Dc��E��)�|��!��$����������s�0��\���+��^���@���\��a�O�,l� ����x\g�M�6��m�6,=C�O�-����a�@�t47�"�A�8
�3Jw�@��u�Wt&�-�<���,qh���k�P��K�HX���dYC�-�����6�?�;K���}������k����������J�����~0�iE���rQ���z{�:�x���z���1z�1^o#]o����J�GI�rC���Q\�8�H���k��IJ����C���bp<o4^bR$;����y�	�T�	��>.��!R��,Q��b����� ���$�����&�e��~!c�����>��m>X�$���#s]�q��^��J�at���� ��&����������s�K��� '��u�
m��0����yV��|
K�wt
/T$�)k	zH�jf�[�$b������8�UY�s�e'_n�����q����>K�n~!��D���D�YI��a��"��:8];e���\h-�kN�3+�`��A��+M�WZ�EBQH����{&PYd����1�����E$��v[�7��3���]� -�!�;��
Y2Q���%��JFj������m�=]PjOqF����lw0�����B�Y��%��4k��	h�hM��/m�4�{
m�)=�6��M���jJ�Y�3�L�.V��O7�g�6I�xr�m��+�����!�14�4�)�#��a"Z�������,��'���

V���Q. �ftA`������`GW4��G�+��8����K;8Z2��2�_�%=+s��)]������*!;|tB���{z���hOW$�kjo��O����tER
��Q+� U^��\�H��`RWT�;E���e�&u!SV/�B=�e�E��%�E���R�z3�X��7�U��K��t&uQ��������(Z�s�t�%X�S��u�x�wC� M���pY�nJ4�}u���~a��]Q?������;��1]���[Z"pc� nL�+����")���S�&{����=�5=9g��t!SF5��N���iF�jLW��p�`�tA&�==q.W��+���P������=]����d�z3k����8wH)�5]P������Dk� �K������'2j��HSz��rK���fu�����.H�@=F��C��3e��[���r;
T�!t2�r�|l�	���R��s�gvtE�L���8S9XQ!������.:�Y���O;:T30q;�h@s��L���t�,�A"X�j���F�/D���aTY��^�D�FDV#���*c.��EGr�FM��qr CZ����,��":��&���b�����JQv3�f*>�#�kM�P�N��^����D��Q��
��������i����+�4����s,'T��X�Z�HdY�7Zu���G^�\@YC��l6�S���S��<��SoO+�C����Y��������I5p�l���r���]^(�p�w���� {!I~�#;�5��_�_H���,k���)��������.���/�/r�\�@j��4�U~����B��L}U��hk��I5\�bI������W�FO�?L����L�V�L��/p��d������ �eKh�]c9��0��Au��A��`'�&��Hq��	��D��Kd�*������,L��do��5z!��/0s7���$��L�]��,��4A��4oYX������"������'�DD���b���epU5��&h�(X�L�f���Q#�y[��"���W@�{%4�=��uq�r/��@�Pj�Yh,%��.�GI��E�
�d��p����
�'oP�>|I����{��x���>>�s19t?@&�`����x,����&��n,����9s4�j�\��Y�k7��yk�aFaAuP@}p+"	_)!I�z-����,�-+�����t���-��\�;d��C����U*~��x�6��o����������`*�#�XW~{�L"zS[�/��R��]��Hs��G��)�$%����� �����JdTP���	���	~�`w��w./$il�,�f���X��x%XX"����lw��������h�jo�k�e�g�5�b��������XF�r��M�Wta�����|+	TMw��U(��+x��[]��-3��}���$�n�����-hA%��%K���J�eR8���c,�����5PoT��������94*�X����b3��Y�2�)�IJ�62���k���D�{����F�~!�I	�d�tos�~����	���f��f
�����j-����LY����BL���|������[�W��8��)z�����(�h����������'�/���p*}�U�����V�w�t���k�����Ux6�1_kA(\�>��qo��y[�t���.A��N�}.���E��f��p��>�l��V���v�<��wfg��	��^����S�E++j���������[�V2�}�GD&��U�C$V"��F(g|��s�!�,�Uhx���C���MD�Y�8�*����'��-��S��iq���_�����/�N�,6��@<� ��/�*34��52)��J��xd��8He"�����*��=�.}i��WK�j��LtH+QK}3����s��"����b(�K5~��X{���8[4Z�;��ODx]��h��%x�+�682p���#G��1��HB�=��a`�����_|h�����:�*���>�	���' �6��&
�v��y}Z�4��3_4��i���*u�\���W)��R��PMX��6�z�Y�����>����E��P����N�"s�^��D��l��&/���u�9�D����$H{����W"R�����`��A�+��;��$�FP�l�[�����G���j(��O���}�������h��h�J�
O���+���M$AfN�jAQK���"�B������/��)��2!1	5��tuQgqh�	x58(.W&�:�����YK*wb��G2�u�?��
,�����*��Y*'�5���\����6vX���-�4�)�2�1
�Q����u���;#�@Q�R
�m	Y�tp�)b�&�^\�`1���V/oKs@+i�v���8������|h[�34��f�%u�g}�xsKHqo�m����d�	����U�� �p"e�|���b_��|*1L����`�����ci�����-�Qp��Wc���}Yd���G�Q1�r7/Fr��5�6.��l�o�e}�LD��WY�6	c�~���~�U�@�CQ�%�YL�����a��.n�.D��=�O�l�;���L>������[�T3�mH��ZM��%+ �H�
���a��"s�����J@r�L������K�I�n�������b�U��G7le��cNC�}�L�Xv�
= �x��DT��� [>��M�BbH&���L����f�;>�z��*�^:�������H������,s[^'��F3�O;\��>6���]��1,�m<	i��� ��B��A���M�Sm�v�3U�|�����W��"�����}�!��������(7_R�N\P��2�4t:���S*��}V�e������jc�������vWG���S��(3�V"%�U��)�@��T&�B+rg���>�)[T)�S�\Fbu��<s���mbG�g���j�
d��X��&��/��NEX��B9���|H$S��E^%O[9���B�)��T�1�d�&��1�����P������������!z���
F'y����O"�2Rv�1Y�mr��
6�H�l>���B�M�L}	D� ;m�f�_AN��.[	�?�����,&�F5��{�h�<sE�N;c�Jf�r��.���pL������ _����n���+��������tO�N�1}���g�3a�+�c�6�ENN����2Icz�I�1�=O'#�1McD�WY�Q���m���>)l�c�6���1��dC�6l=��xE\Gq��h#q}��J����s;sg���>o4���h������I$7���L �����:�/B4���,3�<��������0����~��p������{�m�7�O+�����?�I�z?���y������z��u������z�z����6\��C�N1^5]u�~�t]�x������������r��z?��-_o���J��\u���(��#_���N��{�~�������^�S�B��{�_�r�8��B���4l�����H�1^��t����c�7�1^��t]�x���u��\�c-���w��;q��^���Tg[����?���3�_�.b�>Z�>�r=��\���_k��_�x����t��C1Y�;]��������u�3]���}�K�>����C��\�t�|��jb����X����w��we�x��:�d������ ����z���z����b�n��p���n`��[70\���.���
�u�����u��x���m��]����/t��x}��c�n��p1^?S�y7���_?��{�_�����=7D���/���!z�on�^�����������!��w7D���
��sC������77D���
��sC����^�����������!z�on�^����������
1Cn�=?���
���27���~1�!z=��
����n�]��?�!v=��X���k������R��h�s������n�]�~GpC�z.�����������T��U?C�	�����]�5�X��P�B�����t<�3���-��g&@�a����L���Op���k��p�����O�#H�zI�#���B� 	�9���v������p�$J�z>R�Ru�e����
�5�����0U��y.���K!�.@�J�B
���m@ 
=5���3���~����L�[�B���J@�a�������UN1l� S��5�J����s�����=X��������|b�T@b8��B�#3�;� s��%%�R���������M q2��9C7�LL��2^h������{5�!(���4���d�M��?97�f��$��YZ��W��8��!��d6���"��������W ;�@�T��G`�Qq���a�_P��Yi�X�������PIB�7�Y�<�����	HK:�J�i������@��,(�s�O�N�cMY����b
	rO ���N%$�B�d\��bc�$�X�m����D����I���f�2�h�+����Q�g����R�$���S��j�z��+�}���/@�#��:~Y���j9X6/�UO�����`,���V��K&�y
M���Dy�5��P�0x��2i'7d�D���F����hrl��+��dG�1�R�[D���W�����C�{u���)f�V��o"�������]�3?e��QRI����������E�n��_��Oa#�yp%��'������n��}��1���lp�d���t}9K�/�J�~�	6�S rd���2+;y�C���-(��sE��hV�����&q�(�������o��\=>��T��<��D�N���'��q!%��6�G�������l3]��&[�nf�t7�|d�K�&8����0���m��9;%���_ae��W>�����&2I���i��_���r��xX/�b���E��&g��|���.�f���%?���A�d~�c����N(��,���0���""1�A�96��ib�[�w����S/N��uT���"��6���=v��~��8�?H���x����G��a\�b'�(�{%/�&[:��f�Ze��y��7,bU���4�Z2���<��y�����_��'������|Y\��n��%�� )����e����J�?y��	���[d|�EEY��{����/�����l%��@��x+�*0[�8�H�i����3@������?Qq��z��!�$��F��,�����+zQ4�����{M��$a8�uP�cD����B���kU�o�z|�?�H���I�c�����G�l�����$�m��=����(�a�,��6��8U��y#�T	��d���=od��^��^�,>�kNt$,_r�mx]S�B�g��������9������4.�[Q�� 7�bX/L���xQ��O��7�v����w��Du0(I�'l�LQ��d �x@�-SZ����1�n��+hz��ys_��b�����)�"x�HCY
<��nY$��;�;�sw��%��D���]�2��r��d������[p��9�B2&��M[-&��k��jRn<�`>�����!�<��a���u���8B{��"�t����d������
X��0����e2��_��T�+�"��E�!�w�<l�=/����������;�����y������X��Pzs=E�����K�
4`�����F���}`d����~|'�)R�:��_F�V((��.����Z#���T���	�b����~����x���L&{��Q7"�����>t�_��j(��qB=�G��%�����-&p�`|v��C ��2��$�����t��o�}�m
Y��y�W2e]Y��~bv��~�2"5�Q�C�K;�k�����2[�
0�G���'�s��9�?��d�"{��j�9F2�b�C�|�x�
�[l��?WdP��hV�$Z3�)����	���;�Z���Q�tY�f%]���&3�Y�0z��x\�4*�_���G�M���������a�����*4���$�U�!H����
$7�3#������@���0�����p	Gn.�>�<f!aH=�;"���P�'���b�L��0bs *[�#����Z�WE��������H�H�L���53��tA8�F�.���a:\-�AT�M��0���Z�b�����sv��]V+m$[�-�!�}�5h�� �Q�5��gt�_���'Z�� L��W��f���#�"�w#`�j�sP�~]Q�<��nE�n)�;����}=�����������Z?����z���w����|JB������sw��Ir
��cT2[%���#�9���Tq��Ro��m��bEE	V�4H,+�\b-6$3��nAl���ID�
�"k������L���Jl�g!kY�����yn���j�j�\f%}�5�7�����J��t�lX�����tN��������8Gz�/��<x�~"��j#S��2*��~�Qx������p��L�
�j�9��D
�����A���6r*�im��|�X]��LD���L����a���w:X��|�3H��@P�L��u�:���,��� wm	x(����g&��u*�V����2X������l�#)�gGR��XE	�Rk��bC�q�0��p�����"�1���;=�53Kb�!U%,k����z�����I'%�(f�������*�����W��i�J��O�U��}�b=�}S3�
��bEQ��eE����F��g�L�����f�����h�7Tu9�4���{��V�2VO���3(L�������%3n0�&]w���V��J������k~�;:W��[���1M�|8Zh�����0����wh_��eCS�mW���|J$���mb=!L�J���n��xd��Y��|a�v�[�
	�s\�����w��oH?�;M���r,(����\<g�}Z.7i�z���!���#�������'f�N���|����]� �3��T�4��:-���aqP��������������Y_�W�����V��<n@�G���kA�<�'%��t�d�YR���v���d��.6P��D���gG��h����]�H�n�vX������$y�5X��B���sl�(|t\���%Xcl��A�c�N��c�Cm�|�L�,�J���De2!z���]:�n�}oHV�v.��_�f7T� �jV�.@';���6�����*!���&���
6+�!��`���������w���4�?bEx��:U��L[�TO�~�d���m��IG�=�Q8��u����N��cu=u�2���kU�(��HxKB��p<�Q!6���@-g�	�s�2AiL[]�o�M�!.��D�'����V���f���%]�b��e��T��f	I%Z��T��}p^2��G�sx��XDe2%-��'{6��3Pq^_�~���%�>�����U�t�I��b��o������[P���eI�h^^�QD�����yn��V6�uo~h�X�N��������s��HlU���9zN�qX�f�O^I���S�����1�����r���+�l���O���;sY�*��j�����]G����[�&��e�d��������8��<q!�p<q!�����:q��t�S�������d_;�6WS�tP�/��	m}E<.�`D�UV$2����;����P�,]�����+���7������" r�8���|�~�DdgJ�o����eW$�}���3N�CB'^�����"�}�Kv��|������i5�@T��qW������v=�&�+���;.+��WV$�a�W"�������|��WV$`�4^A��8\Y���jxn{(F+���x:Z�����Dt�2nv�>ZY����eO�^pMsJ9}���G�/�X���w+
���Q�3.D�$r�VFRD�i�����H�����[�7h���>������e=l����`�V$�������M�3���	,�7��0�����;P�(d2���"�UwUv��3	���!��$��D�
������USpK3/E�QVd�!5�5cx�8����FcDh��VT�s{�Pa����\5���~v�zu���]!��">��� �^FQF���!��H����bx+�boE����:
1��)�w�}l@�`E�W��Xq4�<�e �M7�P
}P����(����-�7*M��-�D}Eo�_����c��QZ����(���������(���o�8F���c��V�i���fX�
	��q�����$*�)��<��D�X�2]��9���U�r%"��+
0Zw���k�c��D�r!x�{��V����m�=�W���iE��D�4�����,m�LR�^����7��]�x&3s%���d��M!�]�����o��-8f���t���o�L/y���3�rCr��W�n�b�}�LDF&�v�S��vXL����`&`����}����\���j<�o�����)Qy�b�f�!-�hc��$Y��0���p�
��k%C*>U�h�����!/}
�W�j���Px����L/�5=q��D�u��Pt��oH������~��3}�YB��ga�A�D�G�o��������ju�F�m4[X�7x���Q8��eTA\��t,���ghy�������kVC�
1n�L6�-��0}�A�
	��A��t9LK]T����sf��:D�E?��3�
���;��ARX�t��0���������:>l��;��C\u$���CF4wE���P&�[\�����2^�����8�����o��[�` -��;�q��o(�8C���)������l��G�_��������@[��]}XS�
�e��/�i���������T7f�[��6yt���z���fG�����������Hqoy�/	��5#)Mg�QjY-bO�o6�]�E#�O�������D�{�N����
������������������i��Of��W�g#A�lQ��H��2��N�#Q`��a��0��%�_��d��l*@�F�
���|��A�W$`Z��ja��E��Z���T�V�6�N������?�u�nk��V��m	����e�����)����:�%�V��n'�x�J��	��37�&�iR������h?�������.����W(��"j�&r2U^�#��qi!%]D���mdC����u��N~����8w�e�wR���6�� ���I������Pa�2�$*C*����}���P.����Vy3z������f��Wf�����.�m�����Vi����/3W��Ar�eFNO!XI�N�(_��KB")�:�v�G{QM!���I�p������l��+���c�
u!��R��6�eJ��:�c�
	�-zs��4%�!�����M@��=3~"�_mFd`������1:�:<.��I�x�CC�B/>����������1��;�����6��0$��C��@egr�6��,�KWq��LD��8,��I��t��W���MthA*��OP����ZI�q\s
�`V�gG�Q	���M-e
�����������]
$�y��@>�-�{o|;�Ve�oeA�Wnj�_9hX54^�"�TGl���������u��{�����mC��:��t����|��R%�w�)����]%>��n�b
HE�#����0�/�) <��q��L�%��n�;gA�$.H���!%��
:ec�����^����cck�Jcn����J����;G��Vp=��f����u'��O����EaF%�6��d�W���6�+���qp��%���L��OxhRx��7`^����[�He��m�g#"�tO���q�S&������p������+���Y^�+�C_��+��U=_q�r�%�P��Y0�������u�u�������	�&���}������I}K������J ��8�]e�����+v�kI��o��+7�K�=�'���Qq&��z'���
%p���7�/�"-���U���������?<��^�HD
N�^j4����0l]����!!N�R~W.{��~����A���
	��\[Mr���"��kG��>G���S|�K��VO{�����l���[m!*_��a���@F��o��)�"6�A��jc"�O��~�e�2<�lG�QT����T�M� "�|�)���L��1�X�w��V����4�7Y���#�6�u�)�P�6����m_L��JGS�~�d����dg&��<�8<�u���Dd�(��>�[�y+��'��yO� *�u��?�p����������~����~>+��u`/+L�?�kF�Es����'�`���� �n6���t�QD��o���u���*��F�L�UEp������)�_�>Y%]��P$�'���6[���^���H�j{�u��z���*�"�T����3����9���H����0!��7,��y���	���Bw�t����4���+<��7�a����(k�����C|K��H�3U��!����t�}����
�4\�� h�Yd
�4<��k�*��Ys����]t}��;h]�1F�|#b�q���!\C9�(Z��G+������:#��qdc�^^��5�)#6xP�b���8���|���rsbr%	hB�M�C�A�D��FK���7����������8�H:8��!�z��;�)� @����5 �t��������Hl��u����E7�t��/�2��-8��X���\�%`c����":� ��N���gG��*��e��?��C�oV*V�f���
*�+�Q�I���-����
���
�#1�_����������H��^���)�k��9���g���mE9mD:���@&4ql�hD�c�v�1��)��Y'�3}�@8rP�.�"L��CV0^�k��/�z��H�������E�1�
�6Cy>�1�V6f�X������ �J�=��vB��1��|�G
��a��"�fM�"I2���D6�5��
j��"�m4��y��+6^������3	u��B��X:�����W~���D_V���w�g"2����������<�WX�n��L�gn�:"�}0�	������j�Y����W���2��&j�4k��
�	#�G�O���W�5&�	�����.2�b�w�������-H?l]��g���d@�iqlm���U��$$��y���sN���}�N{��NrD����j���V[�H��@O��C��#�\`zv���D��TY`G0�2%�hu&e�����l��eE�E��M-��.9��vODx��aL<tw��f��}�!xs.�u�1/�*�*�2��l.:?��"��M�U��g}l��I�E�{&�mHB&�\�>���<YP�;�%�=2s3������[����i�P��f���Z��c��-��Ot�k'�wW�=�4o�������r������l\��z���d9�W������D
*�������A��$�$���l8������.=��r�d�^���W 8�q'�;&
H�?����g#������x�D6Kc9o��t\T�����5Q=����+��,�7������W����$37Q�6
��nj	'�Fx�	0��Kv���3�0u��UM7;�������)I��
��Y�F�_���#��M'[����������c!e���\G�u���r@��'��\f�,r�j���,��R�H�����8�2[��;���A���,A�*l����?�{�j�������������||���
�1	������{�<!���F+�1��d�I�A�h'N�!)�T�.6UL�j������C�&t��$��������wG.����m0:�u����`�5h^U�Y8�Y��X���C�s��/o�����7z5�����yE:����9����f�����k6I�-�� ��������=m��`OW��c��#��s��{��]���7.�!m;@� e~I�w
��v��LS����~����H���h�Ry��N�)���iQ{��-��V�u��9J$�E���8;{���V,9L$|u7��^���F��l���W�%]�]�?-ic>�`IW$u���lb��UZ��l�����t!"k�bZ�fs$���H�����'�l,Z�f����n���O���b<pZ�iM�};\�m��.��G����P�L�������h�l����f�m\.����Y�/H5�c�zS6VP�!u��h�2��t>���8����#
�Hl����x�78<^���!@E�YS���gs�#r�$��_0�,�6�`��C&6� F���F�anC�h�<��+�����0J���
��a�FEP�!������X���#FE �<���0jVGD�F`����"����H�o��4���FRCN���8�2��(GM��Z�H������r�5{A>��@�;Qq?����b�u��L*2Q�OCi���
2�F�5p�9Z�:��(���&9|������TdsH5��"�Z!~V��T���
m#�Hl0%�-��LUP9[7PT���{�Tg���� c���N�;[GSfu�9t����H|,5ME�2�b6�R���n��9����=�pF_�L�)C>.���!���x[`���=�yX<����eAe��T��7I3�����"�3�^ye�Ty�"��r�aS�`N�qfC)��;N�H?;����k����9�Hl$%�M�����)d7T��Fu9��\�1��l)GE���E�:�.�V3%�tlL�U���Ux��B�1�2<%*�c)+R�������@�����s��s��D���Uk{��������93���3.�����\l�����H;p��z����N�H�kf����Ab�����g�]c�L}]�q�����nH'������p�[C%^tXg::���Y/d*��L�:���Z%'�w������b@E�������{����@%����3��FB�'����t����xt�?�S����v�����^Zm �"V6|���q��|�{�,s�M&%��'Z�i�W����T���6�lVm:g�M�]��Y���9���������:�{�P'f��|�����$`����t������]��w�r����^��(C��CcE]�������W(���>�\I�����
eAeF�|�U4�����@;�%�t�|����UR�E���q.�*[���7���|NyNcj���{%4�� {��M�6�I�c����4e[�m���V�����k94������6�IF�_	<if������\�� �I�<�j������`�od������pPDk5��j��KO��awq��n���{y��
�Un�����.H=���E=o�8�j� ���w�7d��u���F����L4�r��K��;��E]7��#r��IO]��	���f�����Kj���f2�	*B�IWq4C,N�E�����;��r�d�C��+��r�D������\S��U!�������i��!C4��8n>�
� w#M'm((��|nh��T���!}zH�~����k�l��|^H�����e�e|=��������t���|"H>�����lrH"�'��hNM�������!p$8���gc���X�����""��O����R������5���"�r`�L�����#�	����*km�E�:U�k���Yg`�[�m>H���3D$>A$��Q��>���������Sh�����3�R�a~H�a���?-��SB=)H5�SCA�-Y;{�2f3C"svN��������K<�7��^�u�!���4�sVq�����I��8#�*O����n9��E=������*���o���)���-�]���!����C��L���*j��'����5������������������w/?�n���g���,��})��;��s��W���������o����n��}�_����~)�3���n��{��k�����D&��W������o���Q�������������],[;���.�^�.Q�o���������+z�^�}��C���"�������������S���v��?��_���{�����*�I���_K}n�w8��_R?$����`�-@Q�����g[��8�c`�c�Y�@d;�w-`�4\����>��C��I����"C7�����)����-��{�U"{�)��Q}*A�m�iS��X�y,����m�������n��%��t��)�q��(��,���\��o��3~������#J�������J��5�;�P�$":��y��c	4���>Y�:��*wB�y�%12S���{��~B��-L��*�zn���8�_$e�x��gy���J[�d��LE_�J��g"���0E����u�XeQs����@��"��~��D`��X��cAp���j�8-�<�2����A�f<���t������X��fI�M�?����+/�uAp
�O@��%Y������j�2T�}���)�d5���2�
P���Gm�)����T��S���T�y��d�"��{sNl%�Z~Q�n��`��a;�VR�nv(6��}��j���C���_I��h<!����� �wC#��	X�h���e�L���$T��U��`���:d���a�x���Xt]K�����!}������4��3�6T��L����k�O���g��n�Q�Z���cc/� e�\�����(��U�y��h����G�@9�
a�	�VT�p����v2���U�lL�G�hJ.��L'��V�/���,�Nx�)�Cq����;>�&p~�������g"*��Y�6�Q$*?��!y��V,�+���!M� ��i3B���+���X�2+����B�,�|�����m�l��;�,�wo�N���qE��A��M'@�C���C�N�0o��[���7��7;{v+����FZ���?+Rg�k����"+*�Ha>�[���h���l��?�%X���>j�'�
K�{�`�j�\dj:����H����$�P�nV���I��~��SW�>}��)�������a!E����������>���
M�15���Us�2����.�����,D*���`�~v.���$|M��Z�������+S����8�ZQmu�Z`��+�V$��c.�m��@?v{~�k��7��x6;�|���+*(�-�������?�v�eI���7]�$��
�{��@�l��{�v��5M�p���u�]"�k�F�S"�L�1���c�0�*,m�����/A�)is`�"<����tP�ME=�4����! Ic��]���S;�@3����G����
���S��a���*s�(�a�&^`�<c�&3��������'=���������%�:-����jg�������i���x^���L��>fJ�<�������\����1�z ���%�X���H�����EN���b.&5�l0��Y��.k�t/
����b��q���jfHVT5���f���h���I��=b�d��s��M`ZS��C���,�6rq�Q��6�`o� H1���
y����G��Ps'z��}�*+��
t�n���"�b������iZ���e��c������jf����v���#V$�2O��	�u��f]P�J�l_���i��������B��8���>6�����j�>`�H{o3�cf$�o��0b��Z�.���S���|o�V$��~������A�`���� K�4g��3!t�nf�>��6y���J��w�<����r�F����;��?� �H@K�O#�Hh-��A���������0��b�bE��������p7��0k��}�c��u���G�������b��l���JXQ2��-e#&��v`
n����@�H��%,D�9�'�*>��Em3GH��L����9�	�UQw�r�NF���y������u)��ISL�{HUZ���&4�YT�����K0�G�;��-L��vo�*�]�<HK���$�&��u���H@����mv��L�N�!�S���U��y�#C����D�G����H�27��i���	8�g@����'#����O����(�i���;���m�t�?8��8g��FDT��q�A�X�������d�&0��Vn���g}�n�
�Q	���tt�/�+�	��q��e�+�XyW���9a�
T�E�9Sv7�z�Ul��>�(�;�T��gy��u�F�����v�vn�w�u���3��Y6V��8C�; ��3�N���=�l���� 3j��b�-�z&"�g��1�������u�7T������eg	����yB���Q��]0��g���.���([�\�5DY��ag'p;;��Y�`g�%VE����=�L�j���	�X��2e"�`��x\>���t�L�]���b5u��R��!��e�5,f_I�54=x�-k'^���g�k����4f�[HQp���_`�f��\Q}=����������}*�m���o&(-*��0�dv+�:F�g��>��F���E�t���*�����3fX2�r5��AK��!������9�����S�	hs�a�9v���$���[��Y���5���}���@e2�P6��1�
G�I��l�e���)�Dd����x�z?��9xR$��������� >�������
D��;2��P���W����$��A��Q�E��/���o�%��D�c��n�V+���[(�������+�MQ�v$
�&e�
���[���Kf%"�t��ep���R�2Q�D\M�-�a�(�J������z���DdJI��W��-���D<�����}������t
�����S�W����9M�����G*����^K'h����:�����gCj�-c&2�S���Ak������5����fOp�w
8*`C
,�S�6�y�b7�����`��z�L [�������/$����T�����Ec�W`�D��I�U�+�\ 8K�_��,��
2���o_i!A��:9%��B���H�7���o��(����L��_����6$����*s8�����tG��b���
�����J��r+�jyX)b]������ ������C��B_2�����O�(ud����N`��`��b�JDf��L�~wT���
+Q������)h�C��(j(J���j������,N6�wtj�������m�p�zr�����J']��"����5"�0��<$Q�,\�5l|B���m3���q������$�WR�9��������
�G)��Z�8���]���H��\ba$�6"��uM�����;�6"�uO����[%������]����.���
��B�a�Vse��	�gbz��"��L�Q��l�v�����x��K���3Q��%�� �6Wh�D���E�#�qc�����M|b�W+Z@(*��bJ�n����k��/n�)�:6O�h��������
��h
��-/8ko!S�|�\�u%"�&"1y���5]�b���4����*��5B�f���FT�x�T|.��7k����6Y6.����'^��s�-�gV�9BW��Y�j�nP`frAZfa����*������M�;8�f_����4����'�+�e�������em/H�7�D+�2�!�c��%6�UsQ.�,����bR}�v�o���f�ql�wgv�,.R�_�)�2o��K�p�i\���~����4b�"q��sb��x������qn.����L����bO����R`3�p�"�&Otr���x���:�;�z@Zb�4��0���,J���U���;�4���pr���Me�J�(]=���Q���������5R�-��v��Q4����u;������-�;�v�3	���q��+R`u�}��Q���������,�}����R�J��V����!)V�mH��]�V���_��D��+�g���A�v���������������Y�5������c�����^1!}E+��*ej�'^�y���~�
/<�wA�k��g���!��q�T��,7j�-��lfS���Z����$�S`��6e4��f��C�v=����s����\���Z���&�91����0UZ��6�D8$[�����������q��Z��{����?�������F|�qq�1
�9O�2Q��]�Ewq�u�$�?��ZHI�p�d�MN
�F%e�x�v@���`�jG����(=��\�	���������N��)P�P�w�:9l�	�qE������_���^���M��l$�<v���x��sh�_��7��`��e�E+����o�V����d��V��v�x����Oy���
e����� ��"��Q'b���8�A��6$���n,��.~~��kV��9i���_�7HQ��,�����������J�,H���n��������{����^�B����������-#i�����Ml��I���\:�)(��4,6�'���������>�cw}�R���unf�P����:_	�[�j�l`�!��������_Pb�������n(����$��g�m����mo��Mu�����bD_eg�1�,#=��N3I��h���M�q���>q�C�U��)�Z�A�5�����}0q�'�q����`&`�?0��~6Fd��{��N�|md�F?��K@[�J�,Q�����������8�����}��]PP��T��?���DFJ���w�_��d���?} R��PV�v�&����[�^��n����|m$��9�����o�r��nIF�!e�t$� Y�u�f���2��	�N�
���8�������vf��6���h-[�]��h�Q	0.1T���u��N��(���^;��0��t]��j�Z�]D%_�,X���m�o����2J"�5,(���U���*x���`���b���T-\�V��/{�H������ ����l��J��p�W�k��u�������N���{S�`OdMJ*��S1�6$BOvRQ/i���#��;�����O1/��]>;
���x�Q�4���y�r��W��O�k�F�;uD	�����W��&�@�(
�����$���	8����`1���VS��������%<M�>eg��!�F����+;����:B���*���nC�h������C�������2����������O��;�z/�k��+����nW����:����|��)�DU�r��� 9i}��iE��h�i�A����d4 r����\
U����^��2B��t_�=�Y�����)��l��lL�����K�l_g%���V��@~������a���	?��hrX�t���Qg&�z�����ac\U���'�$�g.~6����|^Fp�$_eCQn���{N���v7��2�i����T��^p����E5De�i!��b1�����J�+�1��gB�Xi6�sh*�t&��P�>���X�)N�BLQW�����[
o��L2kkU����?���9</ap���t�yn�h(0�JH��l� e�7��R$����F�f�I
�_;
�?������tx�f��5x�3��y0>(����H�"�r������B8��e"�`�
7]�3S�$�����3�KY\)�����������8��h��yy	���� 4��gx$"\4���{��&�p�f�0�������d�o��5>B01����b��Vo�L;���9W��������Z�?��������OO�!Z.�M������0�$"���
�Yn�p%������!}j�)��f�4����"V��@�:�;�K����W"	JpI�Pf�rs �5�� t�����G}!(�����x���h}���l
��V2���������F/vg�}<�
�~n�������%�-�[&3��m:�i/�2���#s7��is?'N�[@0���� }l�"Q�,�"���
%�����P�#��R������|�
�D_Qot��Wx
IY.�?������G$����%����j��t%O��+��\�gQ�%���~�`f�Dm=���q�Y�����J��mHe���Z��1,O�V��X2�`��0i#���c��BP��[`_�����/7�����)L��w��D:�p{��Z�����T���9*�A��!�S���AX�\���<�� G�l��\d��������Q����u�c�L3|�,!f$Y����1�|Mo����]��>������Q�`{�;��%*A�=&�ec�7:k�G_-x/�Sd���S��91�[�)����P5�����O����b"��7�Z���3�_h%"k~!�1���
n�����A7N���x�.Ps�.�ek(+�M���Ld�:��8�%��}�J���8����(W-��gG:��
�ES���2+��EUW��D���F�o�X��ao�=�q���_I@D�xw��G��ruH�C���rU[h���(B(��]��������}�(�x�*�Z������@�����9�HR������0l��8T���`yW�x��;�v��S���J�	����]ti�0�����@Q�a�?��G�$�q�����%��+
��(���C-��7e��d�xu�j��:T'�wR;M��vSOi�Y����
�����'��X��������P}���
��Ba�y�-�Y�*������@G��$t��������:
��pe����3\�����{:��`�����}=����*B���/�U���`����YWq�H���h��3E��In:/[@�6�	��`SN��S��eE��tp�#�l!��t�>N�"����s�+	V�����j>Y�/_������� ��}|n]��R&,0��gf���T�8�@���2�QU�&�V��V��vO�9��'��B%h�Xs+��]9�-�2}�LD�c&����h�u%�ha��w���^����ta��TF�����r�����Y��������_�0
.|���V�y�9T�������`�������������������w��H�������.MN���~���`�:����fF�a�f� l����e���1?������k#��,�otW�� �V��=�6���eAevG��i��'�V�Fo�H	�U@	Xg�������:D
T%�����
�aa����3��ia\������opot�9O�u�n��bh�
�6�A@���;/����[B��/���8�
�tg��T�_���F8���L�.�,�?��J�P�+iR2x�&�m(T����N������6��`�[���H��ifZ3+�#k	�?!(3&�2T&��H�G������;�u)�>E���x��q��������v�UhMip��w0��zM��kC��M��U9�P6,kuo���"<�Zp��^���\����UT5�<���*����
���8.>1�.J���]��A������������� ��&�X�\Q������8G�����#x%�M�k��?��q"�k�� ��R�����G��u�$�����x�+lH��c���J����U�eg��<��O���8��$4W	���j������?Z���j~����!ft�xd>v������k/�Q9�9^�g��/��,�E�DS����T<��?�������|j&�5'�]�K�������gD���m����������������������,����������<~�������'�9?�5�����o
��~������>��1������������W>Z��v��
� cm�rY�d�}T����E�>;���YC���~#��h ��-��3�2����XD�P�YNVPmH�&�9��r����gG��%s�#2=^o
��_��$�\o��#d}�/�]R,B��@�?s2���p�D� O�����Wg���X�����/<^J�d@F_��u��8�������\���,5\�����ec�����HT��H*f��z����?vSB�������6�-(�8��j�WE��Y��A����S���oER%�i[z�Yo%�^��YV�Q�F6���]��������g����z!�s)�9xd�T�H�>�u���P-�D=F��E���x�u�W|a2��@SZ���mi�Y�\�?���u�-�@�,�dH+��hH$��i�=
iB*��-)<�hH3YWQM;�<���.����
��hGBY[0��Rz�dFW$@����f��.D��;Z�M?���ME0{�j
~��A��BLtc������H����9U������V������)W+S�w6�����fT��F�iS9h�6uA��6�2n������s�6�b	J4��t��*�d�U]�V�
$��L�/^t�7��f�L�
l�4~�wz>���:��	��������uE�W����R��egSaX�:#����bVu�x���L�l�+�S�-*'����hS����	�7y�c��.H�������>�}�2?I;LahU�.E��"�������e!&�M�G���~��iS����4��yt��.HSG�.#?�3�IM@��~�I��DyzU�M*��-j���y�A�R&�6UOPH&5K�,���E�:T#�A���iC��A�d�?^�Z h�]��T��9E��zfuEth�������� �����������z����k�5]���9�����b�G]����GvRu�H�4��n�[�D�=?���b�%�R�)a�y�grR�J0�����Y�aLW}�T�����qU��"+Y�g����6~ "��*#�g��wa!H��e�7��d��`\v��QZz��N(��O�m���(�zPx�����%}A7@�D*�sL�����D_��;*�hT2H~y�Y��~NHZN����D�@HP�oP���hj����be"��F��3��cw���U�bwt������FMxf ��b������H�������D�����U/�Mq��.�	��s�C����[I�!��%��d�����.��0�"�����n���$�����T����#��t���2�b�<��rJ�,��r�v�����p�����/x�;��KyAZ�M%�������yk���p�)����_����G��W��%���S�g`��M&��a/����e���U��f�@��Hd��SRb��I���;�a�����l��AJ����Ss#�"y�.3q����H��i.��eX-�����9�3�����D�)0�3�%�
��;<�gB�0t��e��076���dd�vkD���n�����z�K��
h�yA�c�M��8f$��6$��9���#�����#QVlpg�K��
wq��H�Q��VE�Q/�
K}�I���*#I�i&~p�Q�L�u?�������H�<$@�N���i_Q��x�s����%���l��2��z����ex����4�������#�����aEkY�<>"`����R��2A����\�=�A���r�w��=�n�}��YP1�^#�*���2����Ac1x�0WP�>'�Wf��Fv�`J��:x�j�#z�h�*�l�l|�x?�	J���O���#;�+���n�_��b3���iZ"8j�'2)t�R���\���XLz���%���*r����}�O���y��.������&�[2����q0-m{&��d�^��:���3��v�QA�U�|�@���fud��"A���,�m{&(�B�"=�8��c��.�������D�d���brvb��4	�E�@$�*�$������	���Q�iA"3t4k��kby[T%���,v��~��?����~����2Bj���P�k~���h:`������XK`|\�S��$<��svr�
���T5�g��F�����	�{��X<��	����)(=�j���S38XS~,
$�?��z�������;=s�2BR>����>�1k��`�>�
�
$8
�"z�T0�A�i}��J��l����u�o��\����J����'L�����������n.���K�h
1w=q�c��rX�H����o6��cT����,�~^0��!��5-zF�c�9�����YQ��:v�oK��'��"O9f����	v�y����7���D[�_d����IV�>4��p6!�m1�h��mr��������"�G�#�7qC��v	Ag����������4��5g��)���k#I�P�69dz�LH�8�w��p�E`S��&��*�e��T��31���&E,>Q����k�Y�w�D���y�F�saU�$�����U���jAj:���Z%���-�e�<�*M�D�R���d�TQ�F1���e&$��n����Or4�)�u|��Vm����;e�O�T��obs$��;��O�m���8q������0��.s.;s��t�|�u����%���A�����$r��H�;F�:���Y���F���6�xWB�L�T"1/����u�w3K������T�����H$|}/W�;�lC	��O5��y�M�����rX���^w�o���F~�����'�[��B�W���
�(2�3��W���
��7����J	�hC]-i��)/WBIF�uxZ6��H���1PmH��6��Z+0�M���&a� ��;���G�*��� zo����BB
:mn|E�D�.y��I��QYH�]6S�
(���6�Y,uc�h�R��a�x��\Wq�u_J�pV�q�Wa%KH��gl���VZ��u�m�EG������Y�o:n�6Ht����$I��z���/�M�v��$�RhgJ��:��9���H���(������<�t����R���(���;�P����Dd���dr�l;�6$�'��0��E�+�~Y_g������zM�y^�<L�V��?T������m��
� 2\h�:�(���L��z.�T��&=1�u��'����~�'�����	�	����{���D<-�!N�y�����?�W�g�_hne��(�j�yW��U���@�;�-O����q1�d$IV70�V����xY0��"�k%Y_��g&	�������I�h-�g����@�VFP�1i'�E`6W2FT�mx�t��H��e����m�z-qg&��N���9CQ^��V�����5 s�o��1��������S��nEEj�0uxP�{bb�i���B���W����z^os�-���$*����8�SS�Z�H�xw��iJ��dp�"�z�t-Lu��B��\a�L�j���Y�4]����~6@M���^�S����	�;b�3P����[P�#8l���1���	n�9�����~���A�^[?��$����4k���,�u�����y��l����e�+�W�JI�����j�?'(Y�H:|��_uG���v�z���W���v���=yA��O}�hr!"w���
������b�_���$��lH���5ml�_�u����� ��@<�,�\��DKa[����SG-m��x�M�FXCX���}���HT�������j������.[qu��7E��������'�9�����baC�wX��Y���?��$�>�_$[���*�37���q��-���������������w?M�>��OYn���/P9^p-\����c�@�F�����[��r�`���q.�+_�r�����z/<O��y���/��r��\p�=_p��<��j�r�`,�������\�rMB�����^����/�sUC��5b�hf�]����Z������3^�U3�����+�]��wm<��*�����k��\�w-�yw��r�������W������}7�
����W�����B9^q.�r�������tw�����QQN������mi�mm�g���D~7�l� ��l;�F��H��F��!��g�W�?�����wX4f+�w8���K�c��a�i�
�4r/���+����m�~"\��F�(���q��"\�=G�*��u��"\�}G�,���^�����#w��k�����c���������#\1�+�����>#\��:�����O�����n#\q�v�j:�EK����7����7����7����7���Sc��Oc��Kc��Gc��Cc��?c��;c��7��������������������������������/n�[}����n��=Z�����c_��{�[���=~pc����n��=��]�����k�����y���g_��/1�yEt[�3��nKtc��U�<���.��.~t���a�wW{�����4���q]2������
�%�d	��"�@�uR���y��wa^�kC%�" �e����Y���{ -���(����d0)���A���K~��.V"�I���=��-��,�%�N�;��D����j���o�2�Rj��*.pC#��*J�����j2(����]PP8�t���T�:�P��I������t��o<����Y��2��L�����L�a�
*�Q����"�y�R)��#%]r� b�BhmiA��@��X����!�=�C[���AI���nlhRM�Qz�Q��+�(W�RZ�����L���Bf�=���g#���VX�<�+��]���T�n>���dS�����*L&A��U���kN6�qBm�F�OY�QF��2Q��S��T�M�y<"�������������'-VF"�X�j���[������l�8CO�T�t�����hW��y�vO�>^Z��{����������Rt�S�w���d]��k'�+�������eo-	�iu��%���RYk^�N;�@�������d�a�5OE{4��I��5���H��K	�i;y!OKtN���6��e�
=����yP+��d5�HKR&��@��IJA����D����,�T3�yxO$z��+���8'�|�G��2���R�^�?����*�����rn}C�I�g���}���6��=F5���-N����0��zT4^����#�)=v�]������r�p����|>p���N����H��&#P'���(H����0F8�I�HV�8AD
�C���Op�f_�H	�g�ap�g
���IG��<�y����"��sp2�C�%De2ma�j����]������%~w��L�,�f�YU�r��H==���i��=�=�H�������L]$��*0�{���������E+IgIRm'��Mw(�GNlh���F���y�},��k�;d�M��Q��D@�\+����A�I'���NDe2�����D�z����j�n�g��;
�����9�����3m��i�U���<6�i�:K8��U�������_�<�������,q8m�g�qG���<?��%���!�����'u�����E����M�};#��b�h��W�m%�'G����%���;y��Jp��V�����9�����'�CFp�T�a�����M	>;����2�@}jI��,�%��a�"k����	=���:m����� ���_��~M��g��� A�In�����7c�w"��}I2�����0����d:,�5z�p;�e~�Vn�;U�2{2}n�>%!����t�O�Y|�?���HX:���^���m�����Q/s�"�ctm���ga.v~6T��/���N/ ��H����^~����N���F���At#�����&���kA����2�%]�����,]��w`��������t�<��E|vd�,3�bnY$��;�7��L��
��aI���Y.SU�K�,�Xt�gQ4���@�9�M�Y\f����������R�?("t8�A�I�~M���#\;`��Y���u.!"�\$��=^a�%k�a0j���F�n��
�:�A7�����lCr�����`����2B#����u8��}N����p������/U��B�x����r�>/^rs���^�o����#��������J�e�PO��YcF�"A�k5u�	��x�����@s�6�B����>�f-���[s_<C[��fh���u�8����9���:C�F>����������
A(���s|��|ZDNU�\�JT&K�c�Ps�1��@��F���:���� C���^3���hI�0f&S>8���+w��13�4M��
P����e&n�fA:����T~��z�6��g����C+�}��b���V_'7�q@��:���Hn��D��kG�<����o���+^���\6}���t!aH�f�G����
��d"��jXmsFlDe�}l����VF�����]��r5���!�"2�b=:RKr[�H�X �U��;��)W��Pq6���L�k!���r�%�D�c�U�.+��6��	���>�]4	��������5����g�����-�����;�8#Y>2.�x7��f>E���u����$
�vK��t,�w��sq��������w�����]����
a��,Ws����&�5�F�Q�l�@V��������r7S)p.��9�f�
��(�j����b\b�66$3��aR
��o����<�F�u��(��v!E�2m�Z����+w��U�A�r�����X����ce%Pg��P6�d����J:'��h��~�d��=\��|�^�Y~�����#,�P���?���R���+�r?0��$>�^�S�8��n�+��dZ��5T+#����7���{,D������(���a �L&�>x���\ne\H���<�jx\�3�h�:�[���j�f�5@�D��^6������#�f|,��D������<���k����^��D�L?r(�.l��zA�JX4��aC�eUr������`cQb�b6]��~������������v������%�}.T�6�h�WM;���^V4��>l�+GB<��oH��y�-������-�v���28<lA*c�M�{��i�PR���d�m&�����w�����T�>���Q��w��`�yvW0b�k}
L�p�`�?@���~���^64e�vn�`�"���m_�	i����{�Te8�aA*��)���`�7$�e�vU2����
�<��L���r,(��T@�-��\n��%=�3��
I
�I��n6��=1t�������o0��K��|�Ddo�.:��D�����Y_.�5��"�E��J�
����Z�U����{�\��1v��[����h8Ufc	<����'s�lH6��b%��:;��H�q��g�M���!2�N�?7TAKz��\�����Y���G�5��_�5�&/D>�N�f3���N>f&Ik��~���De2!������R�c�7$+t;C��/B�z�|�������z���V	�|�5��W�Y�
	����e>�cn�%�������5o�T�u1m��
\�d�Ym 7��hG�z��&px�{m8H6/j/z������` ��Um�� ��5� �%�Y	�Z!<�Q!6����Hg�	h�x��4��.�7����2 ��OdU��k#Inh6m���Q�,��Xv+N�io��T�u~�@�[��V{"��(�\�,_Q�������g�^s*����o�V���3�Xc,E��W�`�����7���}6�y
���,I��KB;�H5��}c��;/@���i�����9��|v�f���}D���'[�!}��+%:��^� ����G��~�@��)�=/G-���d_	ds.|]��O��J{�����z9(f/C����}������,���>�������7����7���t~C��O�7�4�~�;�J����%������i�	�����m}E/��F�[eE"��9`��N�#������E
���XA������>���#z�����+��6�r��R����eW$�}� ��������,��#����M/y`�2}����?P��U%�A����U "?n&�]�	�������
���	`����l���t�2����	5�Wz�9���BDFW�s�C1Z�f����J���$���^���he!Z8W.�=
V�mx�3�)��1�K�M�d��E�6�w�$��0z�"�[�2#O�|v�����x1�w+�M=��N5g�.�_���������[�����w�6����&� �8�H�A��T>���JE� �A�!�B���#w�I@D�&I5&l��`���Z���)����"��?+
2�xt��bxq6o��e�k��6$���
F{��*�U����gG�Wg����;mb�1�HH���+�3��Q���gzo!R2�}�^����[��=6�h��Q��-LA���c�}� �������D���J�
1<c�T�x��T�,>� ��J�W
���[�Yv,:�+8~9�+]���\������<����#t������7����#NH�X,�����\�f��'���$�L�K�������Y���UosE��������f�����fgx�{�Y���UnLKe{���6�e�=�P*nj7�rg�"��2'tc�7��*�	z���]���P��J��I��Z�
������c�hZ���2xP�uV\������o��?�o���o@��v������`s;��L��e�����GuE,����-�����1P=*:����~c�I�`~C�6L!�F�\n��!�c�����3o�o��O�7��^^��7x��#�^�f�
% K��c��5��b�:���w�i10+�r���2��9\B��5>n��/w���9�9^����z��g��}Dwv��E���W'�V�}�,�����_����1G
�uh����y���J��kew�x���WAtE�5��������DX*�f:?lr��
��\6EV{����R3�y��;������Y?i�>�G��j��n��5B4J��9g�W6�@1��.N���#.e��=���e2������9B)}1����tx��X�06����)D�!4������:�����O����2�����E��l�O0���\K��H}��3����>�J��C^�#�Nd��2C��^���
A6�K��a��Q���3-VghTs��}�i�����+p2|bx�H���_{�b�������_NN�ONW�x�p�����\�<��|�?;��b��*�I� ����UM�ud���i�i�N�
�<6�HM�s���JBM����{���KL���
O��5��>"������6=b�|v���@)��C�271#���rAn����:��S���c0%���j#H���U���s�%8XdgJ��5
����I��V�7��L�T������b��@�iy@%6��A�t���"�������+����U�Z$g%]��Y�o��>�s���H�MDK@hp%�oX�s���� ��O�}������"���@_���m�����Q�+:���"�I0����,$<�s��mu&v��.3�?#}_]�����l���
�!��X�d�TN��_���7�h�
�C_��>m)C�k�%\����e��g��>�����)�-�u�����2��HA�����H�������pD"�b��i8g�����PN���]�%���#�d��Y>��������m�lg�`�LI3oy���
��r��7z�O�R���wY$h��-����(��u:n�H�[�������Y���op���F��f�6V"b+T��nr�J�o��d���F�*22�������
���~F[o����6Q�`���*1�������	��Pf�G��P%�������nt[���������1�����-#��OA��+7��L�e��P�k�6���2%���e����\X:�����,-����5t�9g3�+C�46�E?}K����c�mF"�
���Y7���ZzB����6�x�y\A���eG��	���*�X�N;Os$$$��b�>z��UD3�������l�Oe��t���SbBv[��>����,h��UM�1+�,�����,��j&�2Z��.��S%_D��L5�sRU����P�����������G����T����|r�v�d��`�*���N���G�Y��X_S�����j�EItnx�B���
8��}~���2nvLl��*i������U��6>�~������]l��2����Hv��s �x�nL3�V��<�q�y!��������v�	A:�&5��|�$�����������5�(�8��Dk3>od75!�����2"Q��_R��/�i�N���zR��b	5�(<��g�J�����HaBX��AK��QUh���_���`�����h�#�������E��V}k���$2���h��f�^u��Z�DD���C���Q��NCe�dG��j:��]��������^�`j�9������w���kD`RP��[��+iaR3����cSwNT��?�O	�������������������%��~T6G��������������3z����{�����OA�rlz&/?�	�wm����G�A� A��	�Cs��y� K/�@P]� ��V���Xw��]��
A�z�p�l�R:x5��%7u�2���QT��o��ml����}���K��!�6�.B��'�O7]�cp�&e�!j�����jqX��2!6���_����	A���4�u1{�f�������������nV�����8��g������s������?�0T�Z����9�
�.�#	<���v��o������C��:�!���{]4'�5S#�����X���T��Rb

�y)<�ri!��q	�d��GQ�y^F7B�M��Yg�#���n~���9_�3�i ��cOt��/�k����O�8b%]cC�����!���!^��><t����EjU��@���
�d���������f�q��7�����G<�>�P�p�NE]�u��"#J�f�0����?��p+���i�=��} ��N��#<��)�k����!�ix���V���\ �}�#�;��.���o6������ob����Q��'����L�� �����q��������v'{i?���5`\d��a�hW�����:�����yN[����-R�X���O
Z��p4��a!R������������}`�<�����-�{��pGQg�d�`������M�����/�fw�$����:c�����}u,��:L}�f)��L������1������ND`�k���������r��sjq�}(�������I�^���9lK�[F�4W9�L��<�&������v�E.KId����]��K�*V��h���
�=�|��O��cF���L��F"���
���y|�Fep�/�[$��G����S�C7�}�fHN>y&Gq4K�����h�p���qu/��P7��f���"B~��E&|����3h�,Q���*�v��XQ��~~v�7�k�f��A����Im��sL���wf������'���ju?VJ�^�7Z	�,���hV�e���^�Rk<����PZ�Wb
����B`�-�b\�>leh��s��1~��%?�7�� ���JH>o����t�Ly��)>�L���_�9,���A��^���'���x��3ynV��#G�&�
������p��Y��\D�j�����<jBSz��1,x�����_�i��5�����z\��I1�8������� M���tOM�K#���<,�*������;�������	��t������g$�mv��(���RwO���;"�i��gI
����V��|��#���4����(Y(��������6���������o���M <�D���0!��@)[��������t_�v
���X$��\<�o\�>�������0�Q�j��
7I�����Hq�����������A]�FIq�o	��e~2b�J8tF���"�����x������i����*#���0m��D��[%S���'1���!lf���Z��s_��X��/l����@��^&��������S
u|fd�'&��E|\������
A�G3
�	a�2"����3A�v6pL������<��g6%5��X	k�c��*��X���q��_J�G]!?4|Cw�x3������9J/���@�k)��Y��'������F_�&����h9�O��L:��Cf�S����&M������/�d����"�\Y$j����b4��$��fV�8>/�@��M3�� .����2��h�.O��f�'�,��-sB
��,��`��-3�\�2�2_����0�\ zD';�X7��4�1n�����{	:a���F[�Bvv�n�r`����-�cw���4���I8<f�d�u�������2!7zG���
sA$��NE��z�0O���y��h��e�l��a��:�a.%��0�X|1���f�Pn���2[���0��P���@�������[��xl��*��65��������{W���N��-sBQ�uNHV{X�W��q�}c�d��rHdQ ���F���009i��p}Y��S}�OE��W�~�8&��o����M���>}�����`P�wF�������`%	#?�bd$�!��G������TzXX�
~y0��mk+!��8��k9K��Z��7����=j�[_s<�Z���F%�xPY$��^���G�	�<���/���BH��������7��P��!J
�}�Jb�N)�7��#����;��q'2<�Y�yO)� p}�y��8�<0\�v|O ��v	C� O�|s�
!�"67[���z�QT��Axu�bm����)*$�`r�����xN�$��PZN���0�����#�`hB%�����/$d����
��p�^����.=���<�[c�$��t���V�~��������,D��&4����Z�]�����P��P��p�s��0�_*��P���p�`h��1$D�*�8X>����K�9��b�nk�
L*m����x�Z��{���h0�N�[*_cQ�����,:�N[��Qs�)�u���6U�2�p6�MH�dU��m�~H��y�XL��79|�+!	G����[V7� ��h��^'G�4������I�y��$��7y�n��a�����5 �v��<���K[�,^�����	A6e��g$�7k�.���^������WF�5/��"�����Tr`�%������������h��K���t�y��<Oo>]V;!��iUo���f��^�h��Mi?oF��w-%���>o$�/�*��X�"�p���6�<�\�]��{��j#stN'������C�p[QP[����f,&�d6v�J�Z�����u2x3��XK�q�X"����~�3r��AuN�
���\��/L��ti[3����n��hl, DeY@\�D��CskS#������(��0Q�����3�	�!u��:����r��uJ]���m��{�6�#w��m�_�U��R�a���Be!�	�a�*�OE_�'��zl��+A���)�@�`l_!�06��S����k� �@�3�q$�9�����)�5�7�DC+����X`Z(�)T�^O�HO�)��*[�9��S�a����F�^�:��f���_0����[���L��k_���#��:�d<�J|�S`ORh�/<9�
�J,(4��J_�0R3~��Z�y� �=)JD��`I������&��%��H#����_%�t`���z���7�.Ep���2B8�J�U���tF��F-�IA�K�u���/Q�8D�,���}����w��r�TW�������}SUY;A��
�	�o����X������`@N
�����8F'�p��\�:�Er���[���/
�:H�&{��t�����T�:��g����Q����E�xt*qQ�0T��1�P��nl��mXn=�F3�6T�����_���30��n[~��
�~����F����/���6T��yc������4RG�m�n��l����,z�0����n���53j������?�������HRe���#@�3tT6B����:x*�q����uh������i�g�u`n�����E��UtXK-O#s�������v|2�w�
9�.\!r��?��WPNW�3_!r��^[6�+ �+���Y��i�Qy��&�w����������[����w{�]_��7��������w��@�f����w9s��N��.���T��x�1e���1���2��U���c�U���La3Y�~�Kc)��]�_����&����= ����?~�_r��~�luK���u<���_������4�P.����!c��,q���f�u���x���_����������������G�9�Cm�8d�g��K��u�^@C����X����F�.��d��q����N_	�V~���|��f}�I�z>]&(6	���/4x^$�O\����H���8��o$�Iv���=(|Dl��������n�����&�r�����"�9�W�R�uV����+5|��>�;^%D�����g������d8*Lugn����'����/�����"S~��OW�b�[7����������4�A
�����- �����lj�~�7Is/Y�b
,u�F��*Z�'�����u��P�Ld��H"�l�jMY���'9�����:9�W���E������Q��_:��8����U��@4�����.��O�"�v�j��ToS�O�Gy"�ufiA��� �����,������>r8*��[Q���7����B�,����l�R�W_�q[���+y�*U4fM��`���9M	����C��<Sv���?O(�u	Z%��(`@7��&$�7�'{�Q�=T�~%I���EN��S'�%Z7t��Mnh���3��.�L$�
8���D�P�Y{�~�-��w���^��pX��B�>��?���jn�|��N$�['H���������Y��7���)+-�����h����L<4�.(��g�pc,��JB����8�c-�.�N��h���=*n�#��0veR-����q�ROj:1W���7��e�N	���n�]����qj��A~	5�-��D�
9p���OoG��<!j���*���B��-�����U�0��L��|�d�'M������9�Xf8����,\4�m�l��T������:�����Cw��ojYi��@�j=W�r��L��}�w�p?t=+�	����S?��s%n<-��z��Z +���^z�h!R��-�k,�rrk1�H�0	 }��a���("�e�
���tjB�u�V���wLBPV�������GhJ�$�F�����J��Vw�{������T�<rh����I��������fw�Z�h��6
hv2y��:��Z?�� Q\I��g���-�;#4���5xj!"�\-���k��V�"���1�2Yc.�	�f�;\����,����"��uiE
�U ���VXG�Y��M�C����d�g�J	d���N�V�v���)�L�,yN��H������D"%��_�f}�K����e�9��YEp�A#E���/M�Q�ss��S����)���.��tb��7�@�f_����x���*�|�Y;��~����r�v�G����<�n�1O�|-�5!�.q��$�y�I^��t�� S�1��/��_!.3�wu7�������1������`��E"�{�����~oC�#�������e]��J�h�ei�����E�m�J�����:��T��%%�Y��agr
����el����M8y*�)�J�y�TK�!�u��g6���8 �F�A��N�&[��z��g��kh.���*��t�'���?�5W�lq�4����L��X�8#b�Y�s�^��8O���������~��������V�{n[Z����������V��S���������=�e�d����;jF��
#XT����CJ�$�����WE� ������e��������D��"t��=�C�3�� ����:��G:vP���5z��1�a����G�-p���+D$��@� }���F��o��b\���@��X�
�1�{m�f����I��L5ex	���G�<<��[&�{��x�
%T��K��Z4���������2:�P����[T���M�63!�k1����:��Y��cN����j�Z��'X������MNT�A�fb:��J�,���k�R�zsS�`�Z��Gns8���0d���=��TV]2�io�%yi��
MorT��xF'������&���"���~W�"��yz�d�F����k�"�el��T[�FZ��g@��'|�OF������������M-pD��r���_�����������k�fmZ�Q�X&K��0#f���W����t���?P���g_���WR�"��|��l~E��f����v���b���ln���-p�!���;�D��������F����O������/o'�_g�
��I���r�����f�7<���uy�Y;��0��R�}Z���������x�on|�]������0U7����Y�a����H�����F����d��}�$k�\�5Dy	�{��:0;�H�,H��~�V��6t���T�zZ��0����D�)�e��_�F[L���d�%�\�)���.�o�N�����$YR������I�<^��d�vtW�B���s2d|q6�dEX���m�)�p��
-�}3A�hQO�e/���ne��[�g��������.��V)���TIS�@4�&�jX
q�{�<�%	��T��������"���!!����?\���
���5���}GV�����~~�=�!������Ci ,�c��^���U��LG�0-�IX��B�l�r������C��=x���go�E�V��X���U"����3��P���;^��;��p������"ge���M�?���^��t"�/�^br:P!���
R�(�Z���bS�o�@�
�>���`��T�dN��&O.�i��%��Y����FwY��c���q�,��R�i�����,�&Z�rm�����{r��-0U7���zB�}`��J�Q�?���uz(�t'c�� �f'��PL��q���!����4O���Z����]�Xyh$�>�:���B4�s�m��3��P4�&�,��`
����R�?�_HH���T��p�me����@�	f����H��r��,���gi��u�x_[�TdN��^��G��4C�}������.rJ��)`�|���M]������1�h�o
�>����&tG��N6����������*�j����T^���f�jo������^(��A:���l�OV��8�VI7G��X����?h<2Y2�
��wG�>8����P[�,-�m��M>E
E"���h�K������a���;����7z��z�	m�����8*�s%�U�t�[E"�O/��2
�#�j��E�����h�pEr<����>�����X��h��&�a�/���{��p�����Xx�FO,<�M���l���[���O�PG�?/�dK�>
�X���L&~������������oZ�Tw��������>�e�I�@jo�=���&��ng"gd��l����-p��;�w	�	4�\�w�mv��Q����������������L*BQ�.SN�Rg�s�*��T�m+�,_|��H�����?����x�EE8Q	ESp�.y��Z!.��||��B�|�2����9^j@0��"932�&S�Ib��b�L�j�����C
��	������+�=���:Xv�*7��O��ug����z��6� � N��h����L$��F�����\IR��E�r.[���i���C���p�gg��9�p�S�&rr��f�*%�M��Q�o�e��a����)�E�����O��fa�.?��n:�1���l ����0v������;������5��:�7ft�Eb���/&Dc����}�����*$����!g�SS����2��aA�� n�X�"�k��?��6b!C��?���B>�;����d�Mj��2V���k�A6���E��4�t�y�%�"l��{��l������w�RN��(0����E��;����#m��d���l��9�
�}��O�Z������o^b�d�3�xG�d�����br��	��v��ks�L!*��<�ri��i���X��?�VvB|;.�����p���obx_-9N�h�e=3�qz�L�������gj��bK����I`�d��KV�aW�����<��d�!���[Qs�.2C�$p2�Lt�fx/�O��>$&�����K�����������8r7s�<U���f���P�������T���V.�U��{8��nsu�}`P�������Y{�Y�*�C���o���'ZPK�����5�u��f
)[�C���|��D6��`|S�?��]�V.�@_sc��fB����>8�����r�������x#b�z��S>|J#�����E�������|����P�����<����k��u������+c��7�8�	���H�����z�r����]�����'�4��_���}�Q��k�)G�]���8�n���E>�]���V��<D�e9]H~��Ci� �UV)��;�=��^����a��K���2�Y��dNl�T�X�E��t����_Hj@
{�.�KF�@�*�i� ��86��v��NZ
�������~W�:���X�
�iv�����rb�������tu��/��VpA	,���6|��C��|�H����^�4%�_P����{S�)�3��;���f�1�,������,/tI����y����g�=��|a O��Te�������.�����&��6��^(�l�F�*��`c\a^�H2?%�����n\8�(��L��2�/�L�/Vu��;��:��S[PP��\R�|�����~����5g��9�Oo����I��&
�������!��c���"A������yP��	����3�M�([��N�"������N����N$�;�7\�&
y��/����x"��1�dFN�l�Zn�t�E�X������3�
����H���9N�W���2�����H$j�"������-�����v
%p�g��c����n��������F�&R+����M$RmZ��WdNCm���F�a����s��,Tb�~�t������q�r��qq8�9BO����j��7��C �����U���B��o��#
��b�X�q\n�y�i-����E���q�n��H���v$jP���.g�8���L����F����jls�x��c�l������#y,�P���7s���><W�'����������`�:��������.;��`����vV�����A1��r�����c?o��}N+����+�����)�������.(�Oi���*��]
p>.�&��|"��Zo��3�:�e�
���gR�"�)��z?vkM��i�����W����F��4>n/&]����K��_'�����=!?j��a2���n"&��^�������:34j�9������D�@�c�o�������x�|��"�|���IO�|���Iw#jbZ�gb*�'4�u��Ps�b���S�o��T��pc�%���KSP�O��x�%p�g�sOL$Fq���P@.^p���/�V�^�IY^e���'G@���z>0>����o���	
�V	I��!�3�����H��'�q���5n�h�	���B�{q
l����t[��N�r�g">h���p�v���~��� ��<C:o?�#�`�
�.��G�W��Scg�$�WYL)/����.u�!����h��yx	��LBin6�Vy��'_t{��SU�t�#'��	�4]t����'�4p���LM���f�*��>r|����8�����qv4��e���x����|�������CT.*�w:���[}���""d]���iWB��K,�����`	�x���a�K<�waz��w�C�b5m��D�`G�t� T?�=]�~9R�H�BV���������"R�)&k��9�@�h�)�n5�6�[�����1����K-v�����]bOpfu����Y��5g�&�6��PG�[<;v�+ ����y$H���$j��� �j`3;TP2�K��BL�������fl>����o�~2{x
I+��O3;�?m���*����U
��k��)y"L_�=����%`����d4����#�8582����Z���.����v���s�C�v%i�v��28��1����-��;Szs���
�|go��W19��z�#L��=��kj�d
^h<C]����6��#^������AX�]��L�� �� G�l�S.�|��}�ncQ����V�:����6z��5�,\W���A�G�v�Fz�L}������Q�d{�F�
�0��2�
��ep�s��Ra�W���)�\X������G�v���2��*e���kgz����h���������3�*Y���Z�x���o0�E%K���V���@�Y�HT��(�M��|���]|$��U��AG�T�v����e�E������:I���=���/S����WQS�]a��x	T2�C�V�d��a��#cj�X�X�q��#�z����#D����Ym��U�~-�����������2E�o�x<MX��0s[Q���J3U��*���v"���������ymZ���p�>���f�~A>T�s��p��X����~���GtX�	@��������G�$�q�y���-��;��}�:6���o�$�eg�Xu�J��:t�{\�:��h���[=a��g�7g4��r��f�*K���7s
�/8#�tQA�,�Xs^�[�(���vt�'�=r&^c:A�Ci�nRx1������Z���u�YM���H8>A�����e���!��O�}	��*"���l�������D�k���<�Z�_\IV���:�����	��yG��y��}K���sp_HB������v��$X�����`aR�l�+���� ���6��.~�)I���3�J�MZ����%�A�;�O�+q<Z�	C�'�R��'$��Ap�h���r�[~d�X�,Y���':��FO|(D
;!K���I��V�����c;�UM��w����%K^��f5V k�?ra\����9~U�E�nE7�q����y���!��~��8=�_X�������d~a��q�v6�4�lg�~P?Mv2���<#t�0�?�� lZ�i0����*�g���A�`�@�_�E����z���=���y��H��6'����QW5
��z"��MoZI�&�������!���	��[��]`�5-p�A�z��4-��9�3������-��L����"4�]xI��^����#|�=���B��������-@��z��Zwx�����5g�"���s7���m�I�I��I��5TQ�,��P�,���'�M�.2�-~M7��5�L����������}+j�>M�D���y�`���{"�O.�(�[�=����>.&v����FR���nFYxu������
�����b������L�BN�p��6����U��
��N��K��Gb�P��2b��BI����t��w������6�}��W%Hz<I�8���!.�53&��U��p���;���+q�6-�����)���X.K#A��R��l}��U>�:E�eMFI��=�+T$��Xl����f@�qVo{3w:7N���alfV�YB��)�V������������
2����`�6�|��~P&������������h���e�����IUY���T�����1������e��z`�]��V����?���,��l�������6����������������k��}�o�o_�������<ozv�q���i������O�b<����
�����W�z>�B�2'�M�m��F ����+Dg��Le+�2Kq�+��(���$8e
��va���T��dPE���gc?(��]d2�eEq�,;���!3�^�����FM8����x!��)tv����;���*���_���Zc����J�����{8�a�.����?����#�|���"��)�z���-�� ����V��z
�����y���L�[��"��P<Z�"����cj���B]�%�e���g^z�yD<�|'�-���/��O�)9$}���r�Z��Vm*b��� 2�)H�����W����y�`!������^e
���%��"l�+)�����nLk��$�W����V��'�p��v�s�f���L�����|�-��L6��� Z��P+���-l).��
��/�V4�%����x>���� 7mm������&""��trD0�- ���\��GE��N�������n>�����b�m��-��'��3��,�����^�1�\B/3sM0ZT?���c��~����3�%KK	����E�Y����%���s'������|�~'Z�h�D!f?'����V��t�fBh���(���sSiV���
j��������H�aKV�E�*/^��������D{�hJ9x�i&K>��Pm���X���zZjSot����Ld�YU��QM��Z�}S��K��VM��t���*��PW�9'���"���=-�����t�u���~j7�	�L�Q�����Y-�a�v�K]v�Z�7�<� ��@��b����9��3�ZP�*�5����]-D��E�tM4�1fU�A�jU�r
�i��:5x��k�U��iAxEI��m�4�hZ�Z�N&�-;��.�"���F��#?�m�(7��<<���d����im��Oh��H�z��r��7�"���r�6� i��4�y�z���[�h�O��
F�9�O4�������j�.��Q�^<�'���h�������������-�q������h"����*��.����!��kv����#6~,D�4$Y�����@���)��;�1gj�`[�����Ra9����lwRP�eW��c�q���5Y�1���R��E�������j������'���>o����jw�U2������h�x��_�����g��#����Dj �b�<��^E�Adv�~��r����E��h�e���;�	��v�v��c���$'�b��jc;��Vpq d��{�
N���f �Y��]�>kd�U�/$g/3`�Q�S����/$"kkSp��r��������~7�r�������k��E"�J�m������Q��%fA)�#��?'$�1�\0�C������\Y���2�m�����Q?��#��EOo�L����iu�!Q�
��\e��D��Y������e�I���q�4�i!��[��8f�#��*Y��v����P�{N����**���s��Y����	/$'yp�����7E�,��
^������_<\���{�*�
��T�����Qs#a�Q����F���M�?
�"���W@^������4!�����J�2�|����Zv��(�vr������B��i/n�C���'��.���n?
5=#\d��i)I���E�������I���8�x8A��%z|A���j@�2�\!-V�_��E��T$�����b?9xM������;������"9W�?,�����
��0rL�CkF��������S&
~^@Up��i96�7T^�6��AK!r���'y0���6`�DeF�0���.�bG�����I6��z��u�p��{��%���r���L}�������-���j������[��t���X[���&x�eN���������'"�N�r�A���������D��	�)�]���c�&}����F����O�[Fn�R�Z��{�j����bB*����q2���YF��z�hU����9PqP����Q��F���yH�]z�z$8k�f��xk+���l]z�����Xj���s�7������x�O���H��J�����n*v����T�l�b_���E�����q�<���j%KfB�}���(�0�����h+>}��h�.�Q����������F�@���F��/}����w�W�{��Q��������
���j�+�����k2w�,sG��d�M��������R{39�zf����T �����Or{-���h�q�_�7{�OE8S�N�yvfBM�u��So��y4i&r��V(g�m�r+	�������t�JD����DSUF��	8bz��s���;�r2e�����#��"g���o�n�Cc2���� �,/Mh���V����0��G&�=n��n=�X5@O���N�6Wp��4�S�hk��?��N����p$��c��nmh���V��K.��~�����������OD�F��8���8�-�SAR��:S�B��,��J�|V����������:���2���|jA��"*���J���84hR�'�S&�2�E������������@*��kHP�Z���{J�f�
�%[t8�$*��s$]�d=�g��R�?!�h��Y/IzT�����!������c&[w}����_	_�v<��a�L��"�fr�#2'���S3g&*��
����WS2x�3x�
6v�Av��	u#:��7���'�����C���-��Q����re�#C{�><$t<�E3����X��#7
��l�Q���Z(�br���5������������7K�2�`���9�6�u��\��o�;	��0�����OcRp����j��e�s���xPd��������U�9�S�������[�-i��;���C�G
��$^�J���(��^_�����@���i����w�}v���UR��t�,v�y������(���!o���+��^��8��!�'Q�[��5L�(\����$��6=02�&`�bm�y���uL��������8�y�G��wp"�����$�5�&�����n�X����}^L�M,��/�����T��5���e���lW$����3Tn��x	_)�8V�r���~f�Jw��/���1�<X��d�� �s�	��/�w�h����6��)I�+�V^��R��y4���� 9�o���L~������So�	q}�R���"[�����'������<m�)Z|d��x��m��D�r�h��>o$�~�D�G�{��(3O����k�m5�;�2�xp�2KT�G�T���?���	��r�i��w��9�h�^H���>�������g�h���|�-N��Kc��B+���Z�p�Z[�������������)��.\$�~J�;��0�\�������vkBB�]z%������2
DC<g�)��A�����H7{TbR�mo�u��d���\U�����xZ����T�0!�f	���'u����<�I��c������f�l<A��X���:�7����~��b^�2����I���
Qu#���jE
E��|8�X����=��i|�Wa2���m���:���m6��cJ�S�����<v�eD
�_�)~8e56����l�_��=���G�h�s�p^vQ��Yb��s
��`��2���P(�Jz�ae�V�������k���Ei,���n���<g&O��m8([N����	����h$F]z[Dl�:���d����oV�}����DDy2��[|*�fo+�pZ��E�*^�G��P�N��Sh��
'b��������e��2�|=�� ��i����lP����C�z���e����l��u�Zb�u�@,�d�mI���2�L��M<����{Z��`���!9<���������&�k����Z��NX��y�Q���B����<s8�7���v���1/�y��Gr�I��sf���b`���c�)�f�?��:-��B��ike	�z�6m�v���T��l<i5�����#���m�v�\hO������S�F��b�XY&<8y��i�qf�%�������@$6�>��qj�������^�����t��	9S��m��
-� ��������������a��e�m��4�u�/&�2X�i��{�A��6b���Uj�����l:�)�j�AV�	����'���	��t����U��!����������[�5����U^~{���^�
`N���w�bc�-��dz�����eNUpO������^���8��&��qg!
t�p����t�U&���a�B�9o�/1�#[�����cs�$�GdDd���f�M�^M�?81.#F�}/(V��I#D�_ N?�_|�X����P�n�w���a���g������o��.�
y�H.��!��Z7p�AQ��2��
��p�|�G���=~3!��������Q^Aq?4���@�Lr�����)j����mx����i��O���>�g����@��*���l�����6�����)D��'���W
)�Cg����$��/���=���7+����<���oi�1v���q������*r��_`!�.b�����>�W��.r�W��|��}��P�����*�OD�]i�����\L��\t�V����I�$=�0Z����$�����if�������������f���]�|S3��L7�����Z��������������C����n�����,b������?�+�YD���<���������y�������|���cO1�y���9���.K��c�?���{���j
���?�� �?���w��u�?_w���j
b����|�?�T���G�T���'���j��w�S��k��}z�+$�k_IH�3��w�4�w����N��.������s�{-�������|��w���#U���\���_S���!��?[�;D������#����8������n���\ +�%��Z��[�YZrObl��@�����%�����j�b�{V�^�z�Z�W�Y+^��N"��u��b|�������=�}�7C�����t1����_�����w3�����f�O�����.����?]�������-��[�d���n��������f�O���Tn�������3����d���#�AU�Y�/���^v1f���a��w���E��1��e�b����,����Y�-���Zv-f���Y��g���E��_1��e�b
�^�,����Y�+���Vv)f���Q��W��p�B�;aw(�����C�MDp(������=������G[
�{.|���s��Z��A���>R��h���k��
�{� �Ca%����\�Q�o;$L�������Dd��������*���"22d�fbx�e������M�.w��� ��~�
`
)
l���C��'�saKDW`bpJ/������L���X?!��T���+�����iO��B��YI[/T��g��G��p��_�9�&T\�95�	�����-0���UU�V\����8e��O�M�~���(�6���������%K�����J�u^�)2���L��FBF�D=1�����"�]��L@T`,I���m+���OCV�Rj�u���<�m���s"�k����?������tC�� ��n���Cv��e��� 'CfHe���A��8�(R�UD�.��!{D�����Rl,�y�|�~Q��	`\��;�,}�C@���n8n(�;5V��+�1�^����U"m�C+d��!�[Uf3``���k{��o
C�Rs���$�U�+���V�!m����1��h�}����e{�,^!R��MrY���D���`<�$����&���&�s����Yl�?��#�T�e�Jr�����f�c�
X5{%qL��	Q@s2�P�����=%g�������f7{�
��_�������'��KA�:��]A4��ZECv���Hw��"C6�QQ���������e�&t$�<2hQ^2p����(2Xm�| �1��m O�@���$����`�8�8�[���\P���SQ���Z��JWkHvc�,���rUe�KSA�KD�<0iOd�o��c�����f�[Q�i;��w������;�;�����T�
�LheDF��yD�o��Ar�V�"/3p�����Cf�L����0C>9��SHo�K��Z2��T"%j���]�(^d`n��=��;Is�x��	����c��������TEq�.x�K�&�t���t���zD@����O>����@}�%�����2�_��_��\UI����j�.^�[��<7\�$q�||�'�z�s%&��(�����2vQ������ku�h���*�

�=V07����$+�Nn���-��J\�|�Uj���.@������
�$����_db~���l0���x��N��k��AO�{e����ZgSv�D
����c��_7�z�S��|X�}U�Q�����T$2���� z���R���7���pqC�Z����/Q�i07vF]�HLl�B�!�u����<���h���%���(�Kn�@.�g���&�J�M��20pBw% o�����@���3D�*���WH�@Dm�)�J�� �(��j�;����������� �bq@����,C+z[Mv�H�K����E�������G���^I��dyhG$s~
�K�{�:�X��
�R�� �%��#��C6J�����1��������e"?L��SM@�#���lO��5���1zP.��j�	H�S;�$���Zv�XO:o�.d:�q��Ho#1���J�������D�5I������eX>D�q�����#A3h�y�k!�c�9M;�XTR��p����WE��E<�
����o��n������qr.<K=�}�N&��a�w?�����L��W���q{C�]������
�pE?�I;UHs��f����(2�!r`�*���H����|2���������Mu=�����M>'203�G���w�{L������)zE���/���:
��/O>�����(K��m���"���Z�v��7�7�����\�����0��_��.Z��OH�X�h��cY�ep��U���1 �� �O;��b�����P�T@G^�&
�����#�����@��x	1���`�3�8��F���@�����=���J2���(JL_g�bh�tP�0��:�Re26 v�������|Kv/|�J����6������B&�~o��=k�um�����k��y�AM]'2��Kd&�)�<�.���/2�L��|�&r�J�/`�CQ�t�U���wZw�����~��S3�0�����4��/��,c&*^d���\���0k���h��s��>j�T��/!^�����38����=����B�k.��)a�R�]Kpk�	�����"��X�S�$��H�����h+���\�t�7����H��(��.���u��  l	������x��R�\8���9�Kv5n�C��e�f^-c9�CN�lI./Q�����X&�r��s����d����������N���b9o���~E	�����������B���v_�6g6��"��M��>0"�UN�LId���&���e�VdeOm��:����8�����J,���)�A����q��c���kC�=�R$�a��&sb5�?/2�&�kW�eA����7��L���
""�]H�w��]������
+p�A@�0�@�����^n�=�Y_2�������$��B���3�����kJ����E����X�e���(�D�$�����x�=������T�P�f���?�X�����E���4iC[�����ExBW�eoH�9�LK�|�G�Lmx�%c8���c��F.��db�aY�/�j�p/%�}��`��e�^�����<`M������-����<��n��z������P���O�3�����}���ONk1S�B��L'�&j�_���qh�;�����D��:�r�A`�_�-r�Y6I-U&�8��D��OER�deQA�0��O��x��	j�*Yr��6�'�g3�����UE�;�!P��BA~�fx�6T;�]y
Y���0=���q�[!��0�D������Z�%|a�X�l�- ���mQ2�]3�/$��q����Ce���L���
�\'�7P������3�w�=�\m�"����Q;^Q������S���D�~���,-�r�F���\�������bO����6���Z�����"/Z���P�����,Y����x\��H���.��1�y#�����?v!#�/}�l�&��PKDZ�����������
o���������%�6�-�||������+��6{H�XH�e��}����x#j�$�zx��q�w�����"	oM���Hg��/�2G��oo��ZE{�[%��Q�d{�{!I�=��E���3x��a��\:��"���NU���#�z�R��3�,6����`�I�B{V�=���X�;,���"~��'f�j���%��G�>14A�[�J0�'���
QXP���IR"��I&`�pU	J�:n�|S4%m'�Rr���@��"I�cO��wK��&cZ�r*��YB�����F�k��%�%��(��~{ ����	9�O��g3�9&UnX��ZEA	�����zNn�'�AJM���;�}f�

��;t05����QD����O6�q��[{1�{��e��}p����g����J ;5�
?�����0@����������P��~/�@��{0��e��\	duv|��|m�=%Q�����n���]��9��+�
`�r�^O�������m ~]�"�_������=�����E���Z�����K��F�>]�x���L��+Z�� �h�ZEK�O��<�I7���[Qs�.:����=�
���y�H�����F�F���m/�D&�:7>�$�7Z���	p0g!�/����- ���%O�.����G+;g��(�q����@�<�L�o=�&�V������T���W"�x��$^��Z�R������4'��dt5��E��v��'�J�V*j�H���S��"�3�b�S�bo�67�����/��h�K��]��]E0{���
����|F+�N���*�7�����L,/��]E�9���'��������G>eV�%�xr��w-�U�L�=��SX�$�z�E�H�e$�6b�L2����-b*��:r���h����~�]r"nC��|�" ����[N�RV:�oEQf�
�^K��-)�g2#�9��8���
���H�d?������D�z��='����h��e��eed�����+��YW)��`�z9���>1gurx�	�F�-6�wP�U��+>6�Rx,Q��:�B���!Q$�#I�g�z���I������%��������}����_w.
�u��_����C���ZG����t�O0�/$K�f�����$j�t����:���$
�e�h�;��c��XV��}KY�%�R�om����vD��<�<���j���^h?t���3�~��\��o��W�l������B��H����1g�`V�~�TY�U��_�5���B�+y+/$����2�1��(^"��?S��Z��zd�ZVO��L��,L�fO�{�Ms���r��9�	�+����	2u0+��MWc/�*���x�sJD.�bY�_�����Jd^I�e�n-o=	�"
�p]_�k�[��j��l���w����&G5^���g�Tx�1�}��i(^��o{�H�\�g�Pt����T����k�*���1j	����A(d������E<���BB�y�F�l���;����G�%g�R��H$��Q4^��O&���N�=.k��g�v�����Wme���sHg���y����/��t9T�MA��2?3,R!�����g��z������:i,x���4q��d���
+9O�`�(]r'��1dds+�F������S���8�O����2.���������f&\IS$���F����T���x�r&���G��l������302E���2�p6[����G��a2�����������R�nx�[aj����(]B�����u#�U������$B`�{=�����w{�U���F�eY"��IW��H�iC���f����L|����+��nP~��4�nm��}k���_�6�%@��9#�*��H�q�5���[�+!������Tv��/�g�ho��aN���V�����T4�S��V���N]~����y����g+b�yAK�I�:��<��P!KfO�V��,����X%"�d��~�e���`�3�N:5!��3��4L+_B	�G�o@>u����K-�aRl���>��/2A�0M���-:c�E���S�P
W�"b-�n������GI2�e�"��N/��7*B���ni�����e������1���:)��D��]��M���I��K���*���Dd���.q��*��r!������-�h������n�HDF�a�o�8�����A�T����c�t��������dB������: ��T�EY�>8���t� ������[�e����l��xA��B?���u��[�K�����������)
	}��%W���@�����,6��l�l���LA	`5��`��B�x��bu�V|���������e���;��gs�u���&w�P��a��fkSbj�Z������B�lhhj���
�VoN�>�{f$��L�ej��e��e����C@C7~��
���G'�PA(+���S��H���ifW	s?�������o�����U��A
5��l4��o�������|�	,���d��<,#�h���mC��:��t����|�VK�Hh�����-#�1��G+��D�<����F�D���H��n?�DJ�)�n����j�*8���������������6�����z����I�W�lp��qD-t��Z�����u�?��
����0�E��(�����7?F������W�-#Z��>�+���t�X����h&K�P��:;����,������)�q�`���%�r��RZ�f5Oe���*��"�����:�/�PK(��&����L�����9�A�*Dv���FH��������q��~�,����zE-�����~d�B��b��+%�N�]c���%����<U+a�fl���'A7�(9�]�oL_�")����Xm.k+�+�%v��gZ�"���rC3������%ZYq-�����K�eg�p��s�
���_h�Mgl�d��������F��'�#M�c3[E����e��LQ��
�3i��I�Wm!*_F�&R�_��lC!:~k�3X��2H�|jLD�io&����}���"�(�+w��=o��)���L���d^��`����=I&�n�t��=�*���ag�����-i�[{�:�K���p&.O���d�k�����q�E��hth�h=X&sLW%�����wQ�8u������7| j��f�W��*
� ��k?��������`����E��.V����5gRP4���~BV�A�����k!�F9,S�������)���Q�UEp�����4�;"�:���Lt|(X��sb�]��s�Y/�#H3�:�[�Z��6U��]����W~h7;TQ������9Q;��U�\�����Bw�v�H������+�KOR�9o��+�@�
W/�C��y1KV�|��e��Y�nA�F�&��
��-R�,I@��7�u "
�6�#~�eF����a���<���,NX%94�K���W@�a��tn+X��S];���(��!�� e-���a���_(H9.�@b�������Wv����VB�U�=��4G~�AK�HaNU�L������Wh�@CE:DY�"~.�6KHsdA��]	�"�v�/���K(��2�yv����aE�Z�`��1Y�<Q_&�X���D]����`���Nd1��Z���>o�����/�(^�"� V*f�f�eq���=������m���e!���[��H��_�{���x��4${Wb����(0����4��a=�;cB���@#�@��{���<�fu���o 9,�.�8E�5�����"C���_"!������oE��������2����Y� ����bk�
B��2����"����w����h)j�o���E<V�#j�$���I�{�	hF��<!��O��
>o���"�Lq�����LB6[YJF�������,�{����� �%�j^�����,���dT��id��p�����B��]���
�u���`����I�v�b�Y�������+��F	@d�8M[y��/���wE/ek���`�j�h������3�t�L�+���@M5���eB�a�
&����3�L��!����H�����V��������EPv��>d7'9"q����L1��������L9�C��#:�4����xO$?��o;�K��J���
{n (����F�sj�\����)|b���^��#,����0������<C%e�"��$p�)������wE_6
R:���<�����������4��6�w�d���� �L�������	b�F��C��GI�pd��:���(v���Xb����v�1�HG�Hs�c�GE�.��?���"S��H�#~�$��S"N����r
��N�i�!d�X�$�$��p��x3/\�����\(�^���w ]����h �)��?/�@��@2D|j��Lf���K�$q��/�k���z �o�����z�L8t���"������4PT���p����1���������$���f����n��\�3�K��,�T�S�d����#��M'[/����?)0g|"Yf(�mVbu�y�x����(��� oc�����m.U�y!f��'�E�a)��
���4���4 �6,��>�c���:���k���"x��C�9m�XA����\.���[�<!�!���gR��������vb�|��H�7�x�&o	8�"���@ns�

�2O����O{3�3q@�`��n+�BRl�8����
�+�,��Y��h����|1Z�vk��1/�j��6��"���4#K�$�-}^,����&)����=��+����S�w��ia2!6����-7�����+��k��4H2'nDC�fZ�?H�o!k%n�R�y���1w�K�������)]O���������M=�Z�����n��D�`I��-G4�� I?�SH��jL�^�	�M�ZE.�%��WQKZ�������%���������&��*& ������%-��$�xr����%�������}^,Z�K��SK�B
%������`I+��P�����/\������GQs&���WL)g�S����l��K��;pjL���1��MY�v�B�!Um���De��:"�~���A-���D�';�u���|�'E@E ��\���S��?K>9���Hn���_r��C�t� ��~Q�����>h��lx�w"c��h%`%��M
<�RbaT�>�^���J�1�Y���0�+���hl��6LB�~�/��T�^��")W�I�{��HJQ�YFM�I��#)eI��2p��]�S��IT���X<%��k��S@E���
�Y7b*���k`�_-i}�(��I�������B*�/����B�T�X�Ey�Bk��SK�I�rTN��`�y�[CB@���������5;���XA�����\�����H,�rS�L����,����V�W�|�������@O��"��VEh6�wMl�5�%67m�=����_
b��P0�����U��g�Vy�I��p��2��)v0�;�(�PJ��L8OO��x!�Ia9�k|Ac�D#�%����q�6�Yi���vk4Q�S$e*�@���� ��$�''��<4�9����hX���2�D������R
��bU���L�io����=wz	J�V�
��O�[�H`2{�Wrc��p���������+��m��*u��*xz�I��4{����������35�h�����x������
�	�'5W�Q��E7;�������W���J�yYG����|��)���_�j�c��������y}�%Q�����xd`|�����
�����U�['�W��V=R���b�X<���'��&���G��Z���3���D�`��p��{�D����p���	��|J�c����:��a����w�D>��AQ��9~�����V���g�%��"���f������a�e��sp����D�7���'5��9�7G�'m�iu�	b2/���0�,��X����e`��������{EP��]��w�����F-�v�(�mM���$�d�I���'��-����������V�,�E������BsV���$�����C�������(z�������`�A����Q8��)�4��O<m�WA1O�Bn���LS����mY���n��J�`~�c�����1��L�>�I�F���ef�H��'6� }���"*�x���p/���Db��9�
l�]B_1����������t���9�a7U��{u��
�Un[���l����cNj����������?��P��OV��MQ������V�<�@>�����:���dzf�������&b�Zt���/��K�ZI�p�J���G3�������O�k���k�T�C��+��r�d��Z���LSW��U!�KS��������%0|b;�$S����t�|��~�����t�%��T����1;�S�25$��iu�g�����W��<���Y5�e���p��O����z{3��<v��>o�CA&S�>�k���� ��� �|>/�?��*�E?b�H�|���|s�����5{��"�p`�4�O=3�	�x����6��i�*&���\���fsD(�Ts>H���0� �<�,�����>[�����{D������4?�9ol5���8[����QU�SCI>,A��$63d�f�D����~�E���T��a/�:�!���4�1� ���v�u7�������zt����������,�UL�w�%��!����0����w�8qb�.���u��Y�;�Z����?�Z���E?�Z���?�Z����>�Z����>����W!u���o���q�o�:E��7��&��W���R������sQ��5I��~}�9�L��/}<��\��>��-������O����_��R���2
��r����o���?|��&��=?���]QZ�����?����������������a��������N�j���`�	?��~3�����:Oc0�����i�V"2�����I`0]����B�]��l���-R%(�� ��_hg��L��_���x��Z[f��~�>�v�?����b�y����Sl�m�~!����3(�����e"2�m� ��&
p���o��~����|�#J:��sO�m��%Cj��P�":��"����&6���>U�:�a�ny��$bf����� 8��J�Z�=>���dWs���IZ�|��a�8��J[����(���u��(y%"�!R����`�E��bS^��	���������n
 ,����q��������Y�$
���s�k�%;+&�d�`����mJ����� |v����v~�^�����vV��_��Y��W#�������o�@n��Y�u��|�������}�#��n��Dcd�@'��D-X����~<v���J�e�Du^E_���m�Y���^��~=wN4�`�B��C%p�k_I��<!��e��@�����HE;x�U.Z���*�<��3��*8�<��}�����}��x���CXt]Kr�������}�:�
Gf���w�P��+'����)=4N�b
�E�g��7�XT�*9�b��$`�,}��'&!?+J�`�
�%��+�k�)������LQ+�O��������?/����r&�~�z2��y��K���,�Nz��������_~J���l�r5�-��d�2�W8�j�hG��|B���,=��b�^��iF`O�0/�*�2�������,R�B���4��.��-��X�i�oT������Ko�0���x����N��o�
m�K��<��r��JD�����M�CXQ�;�/r������Y��8�]�38�YQKD<�x�e���E��RO�}�����2$P>j�G�M����`C@���e�������$�T�nV��*$eE�z��U�O?r4%V��t�����$��t����N�. ��o�G�������E���E�<��nv�������6��,D*�q���~v.��$}�9r��F�.H�}���-d�1��<i�%���#�	�y������'����ts�&Y���+�v
���k@���ya�g�c�Q��Q����@�o�k�$"e<o��v���4%�1�BD�5u����y1��B�$g�Wn�'�TciRy<U�qh10[��E�dQ:U��&�z^a�
"��C@�����&�Ih`A��U������,���J:���k�^H��jx�J�9�GfX����+0O3�Zp'��x��_=�r�pE\(�z��[4`�q������x��|Z<���6����=c��_&��%���5~�@zb��$Y�l��~����7�1n6��em�35�O��M��F��nH$��2����.@%Y[L��
�V���m��r�4��t-�����CZ������� ;�d>�������|1���^�i��C,��W[Q�U���[��	���*X-L�j�~,��1�b��;���7�Rt��O�>bE����=�W��l	y]Ql�����|{1-s��O/e�4e
xZ��Z�n�+����#�����.���K�q���V�jB8����W�7�^+�4���n;�;��c������Z����L�5��*������I@E%a��'���BT����w��;��e"p����F$f-�\�L�Mm��L�b����b�be�b2�e���,��D�q��)��2�D���G������ycq}4�t�O%���K����~;1���dj`z������d����wQ����z-8��23�x!I�*�TF����^��������hY���.���e�i�M�*��G�^�E*)��X�����cV0����>���k���2�u����S�+*�j���(iVjE���`�Z��QP�*�-s������I���I���T ���c�T�}����k���u��s#?ll�����������=Ja�� �����6h^�_�	�0�������)����%�A������-D��X��x����"�:����x��N���_<�w���'�*�/�a?�N���WdQ� ��u��v�6O7����n{�	����sx	�v*��g'�{l%e���A�����a?G�����Y�U��<C�v������AN����.V$��Y�_��������������������n�������u{���>�
����H�������n3��O����2�u
Y�zo��ng��Iv6n�*�aC7{J/�j����E�� �L��!��3~6�mqM�|&�nq�v��:�{�������G&4�j}%E������ ��|�V��J�&;�LE�������_`�f��\����hl�O��Q��YKwXa0�[	JG�:�}��3�UI��z.�9<����-�t�[e "2��fH@1����a�$����	,��	`��" y]&|r��bGG[��xF���93Ijt���FU���QE���z�CZ�L?�
�ur������I��l�e<)KSV��>+�����~l�1xR$�����N��7��������xOn*�	d����Z@-:��|���	H���+��
���>'^���>�OQ�N��$�:����ZIDu�BA&��T�h_�Pl����h5�m����,���0+���t-��7���@�q5U���������q�\����JD���4��0�,�qK��-���i'j�E>�o
p�n��[��y�x��h�bN�5my(��Z��L��T&��}7/��E�ij��y!5��1Y�)|��Ak�����k%*6�f���x!�f��`�(��F����*�l��R�?�_(H��g����������'��J����	�\ u��~��m�vd��%�|�$�XP�o�
;2b�4G��m�
��K�xx�D�3���)�k�'����~��N�>����t��b7�4�@y.���q+�j9Y)�<��S�j���h�'K?��DA�\��S��}>�'_�=��+	���$�<{����+��f��m�v`"��JTw&*A\����z���e
E��U�E���.��eC��~G8�������Q��m����8^H��M0����n+R�~Z5"�0�	�<$Q�n�����	ML�����6�<����~����$�W��9���l3����|���^@�0�u�D�5c���<[�y�=��t0,�nbz:������~/}�Q����?�����.�GuW����K,��dR��f���&S_dC�^���X�c�-�Uy!W^����z!*2�d{�����~^D���E�#�qc��%�D+����{X�BQ98������5w/$��i�����(�:6O���z��M����US�7����-$D&0��P�JD��MDc=m����Pb���4��y1U��5BpE���f��x���y_d	"^H@��������>�����jI?��L-+b����L ��
frEZfax4�3Rj/n���;8v3D��~(������sC�`%"#��v��<��=������M�o�6�a���bQnUeuV}���6���j3��*��	�}7)�/�p�?B��[6�4���o?�S��������H@^������4��BlT�'��is�v>D-�2k�����/��f�.eBM�q��p�-/� ���	i������{Z#��(����"�@/+M?�#l�7#BcS���K����Q���i������S��
l����m���>	u��x�6~.>�#�,��%z#���/�m���Kd����/���R��z����H��bjJT�k��=�
I������b�>��}���|A������.Zz�n{_[��K��p�}�;����W��"-���z��Mq���g����� ��S��s���"��y�T��,j�C����H�4�����������2��n3��!rF�s�f)�X����#}N����m������!HS�MI^a�)�C��Hi}Y���ON���K���^Y��	�_�3��N2"!}\%!O��f�T����Z���,�{�	r�0�J��-	��q�{8V�e�q�HHt��@�t@�[��To�?z��r���s�W$@'U����fSY��0�P�w�l���z!9#U�k������$[~����
��C�n����,�:��f�Z�]�H���s�����n�����a+Z�����]��u�w9s��;��A�_$d����1��m�� ��}�z���8�>_w�=t�{_����*%O��,��88���=Aj��r7<�8���D>��-�-�������l�n�����m3l%_\Z/�.��?�nL�Wy2%�u#��D(�2�_0�^�|���Bvgl�u���C�?�*�\{a�t���H��������t���_�$�����(�^Aub�u�����U��7e���B��������!!k�u3!�o�0'����x�MzT/o������}0��K�/�i#�^�O��c�
h�*pG�����
�����rC���$2�,�����b�C�E���3�lz����
�??�����,��H�G���
H������9H���V�l��oB�,���-2Y��~y�d�����^A��"h�VW$E q�8��4�b�|�l�y�}���V�f�s��������e��b�dy���h�M�h����x�8~&Y��,'�	r*����*��
���y����p�>DX�1�GIr�~n`Va���K;/���^2d��������Y�.=�����(u���Lf�i�,���"��v>
�^���l���C�R� ��[�M�k�D�,l�'M���q���+E���W`��$?=�fn�O���%�-�B�L2V�9���d���?^����H��-��n�(��{y��S�7.$�z���2NZ@6k�������,��1���u���V�-��zLUN�����N���ix�������GC/������u���������d�B�0����0l���C���Y�$��(����Q�u��6b�w�����T(V�����)(���t�r����PH�fM]���/�c�DGq��;���B����w������I�NG��/-���uY76��l����)�du_��D����}� �"��2yg���Z�B&�8���%Mo��7����{�M�g����C*��=(���+>�A�d0�?I�{�of�>q�4���Y���&avN�
�_�D��Z{^\��k�'������L���C�������~��\�xU��p�b��$Q���Xj�?����&��i�E��n�aG.0=��������!����Xr�w+Od�����=
�	p�%)����E*����D�<�pZ��"�
�^H���ES�\�"S�an.~�0/7��t*������S8�XN*��>���=������8l:H���H���,3$��Q�[R��wV�=�����uG+HeB�.
u�x!Y~<�D��T��'��&���#K��'dz&�~[�:���q��*�E����I1�����I�w�-�E�w�,��XnzQ���O_)���9B"b#���D-�=�����#f-��Yf_��fY���g�
������r����'�"���@���x��� 2lP�E�N�;l�"z�L�(�%*k���<p�������j��^]����iUum��c	7�:1��-J��;>*���M��}�^�|��>�E�������e������ftC�1���U����i3�x(]@�zQ���`��g!"�IS�����V�����0��u�����	���y���\���@�p�tn0����O�M����?O�f��ss��|��$s��Z�g��(R�S;�i�M��>���N��u�E��4�=�V�*O�hq�������9�������MFp~D,c[�����>�q���?����45O(>v�-��L�L�'��{:��*D��+��j�KG���&��U����i!Y���<�,�n��DdG�0}�=f)��m��i:�8�d���U7]���u]I�4?��Diu���`�(^[���x�ZO�����`I��-������s���p��D���PR�+���� 
��%[*r�f��
��'1�J�y��H?:��0D���~$��]a5���$�������gg� �J�A���,���q���WGU���xG�M	��1�����U�Q�~����/����V�T-�"~L�����k�<c]��(:�������'v�v^<U�?+��KG��j'��*��
'��2�/��?_�Ol�{.nP"X������,��qC���N2����5���v���������x�7d]���=�I<��������K���U���1#���4<��7)&{t�j��]�i���������>�V\SY��j��X��w]�p����0S������D7�%��|-��\t�=wX-���N�����H����N^D.?����%���9�
����\Q���D�a�d-���,�B������8�H��5���}�s��U��;���a�e����(��i���`@�3��T����"/�=������.��l^Q>���3�O<�3�}����3Q�J4��Xb����!��I:c���FY���Q��\�f�����B��[P��$n�U7M�\*��l?��,`X}������`��#ug��$��U�B��C�>���<gCk~<����?|!��HbV;�}��T��x^8`���p��Xpa6�JV5�h����e��Q�t��
����vG�Jb���]���L{�~�&�����
��>I7��+����/��&6���<��-�o��}��P%��`��`���9k���l�*�p	���:h&p�{��3.���*�Bv+��&]�V�9����P�$>'���Ig�%������DF��u�9��f�O���������$�?�&����aLj
��?�a�Dxw���3��:�cnv.m��`p����5����:%k]��x�u,��^���^n�Y�H�FI�i����
�{���$��,�PIT
��0"^@�h=c!},Z�������3������9�6����I�Q=��\aa{6��d�R��P�������B�t�XIRQ$(t��n>�+}�H���
lZ�j�QX��:m�����f�8�M�i��,$����s\�sK:��J�G����K�"���\����`a ��������r3
���:x0����Z�u����
���	g@�J�
���b�>�|r;R��'�C gI#�m���2n99��!��\�z0���I�umX�F\������
[}Rea3hi%�����������P��8�d��2��
:��>t��0y�:���QP�YzR�r��l�{���(�����8�H��uIj�|�	O�#y�P�eM:�5m���?y������������j�������}��o_���1��tC��q���Vq}�|b�~�r�����~�!���]��������Y�����F	`��]��=\����_4�����_�aL��@D= +���d+Z����^�����=�����%Ld^z���X���5�������#
��>o�V��Su[�&��4��@(�l��������O�y#�i��":iU"�n��6&[�d�S�|^,+�n�yi
~G�G�j�|����@����'�������\\w&���-HjE��7�~y�u�_�2|g;F|�\~�����7�X7��+��WybJ��}~EZJ��'���s�_]���=�.bA,
c?�7�%�Z�V�>���nU�����7����	�_�L��*��s��>���ET�6a��_��5;0��T���g������������"�OUgd}Zt	>��X���L�zaD�&��e�:x��H�Ql��4��)�=����,!fX��>�������6�1������.H�fU[���T��T�z��i��r�Q�G������4]��rCz�YLj�l�x�I��~:r0��1��Iu5�E]������]i�M��)��JD��WX���@�E�i�aP��?Lc����O����X��$��r�9EG�������{����m9\�d�Sl������������`h���Z���<=���e�7����S%kZ�AaNq�fj�h6�{�1�b��V�)Ojc:��2c���SC-SWUZ���0���3E&�}�%`&�N'Ln��43�����U���HsJ��U�*u���KI�G�z����S�He�
m���I]�fy���
Pl���U��	"y��|f�yc�k���������Fu!�
s��U}x�RrT�U�fu��Od�4-k/�d���8���H�������'K�uEZ3��LUg�jE*_g�@O���H��j��=�K�e]�s�������
���e��{7�+��U���w2�7VA$��m����:�.*�-���ldo�IM&�(�fc/���&u!"k�l�����MK6��b��!ow�O�0����:Y���egbRv0�HL�H�7��]�s�7iLb���Y��<b��������mB�2��|�"OK�g�����)���x����L���"M[*)"�9b����M�f�4�J��r��
g�d^XGh��Zn��i��]��Z��D�������S����8j�O��=����jgA� �F�o�������0��6���CBS�i�jM�i������iv���@�(�7���'�>����@5�mt��+H�}��;GB����5� @��%�P�}�����	a�o�`�0��G�
��g������Y���������YYoR����:��t�����u�tD��Z�3�+A�jp��V��"��z}��8�?���-������`�"O#�����E�=��6
Bb�����c���Hd� .8��rg�V�j�f�W��|x��4\����A@��
���9�����v%	ehRE$�L5������#���`xnu�n�H@������Q&������/�h�\o�";�>��F�v�K{1=�Z�z���*��'���,�HA~V~����
���5p��I���KD��>���"s4�<b���	`p��i�����l����"Ok�+�b��R3U�dfD��9��=�.&��N��_]*�}���i��'��Y�&{���a��RU�i�8�>N���v����������������������E�����Oj���C}!�Q������<G��6��zT�������=���|}?t�aX�R�Z�?��:���gU���t�����%_�Z��.� ,��?}O]�JD��� ?��C���M�
z�?��,�6�7Y�Z
�# W$'F�Q����������?p�=w�+������|�s���������S2=8K}Z��`�{�H�[M���w���7�H�PA��^��3�O�q��]�����,X�=4�G��H�O��T�i��Nh\�-�Q�_����J��
���4u�������MF�NNNt��H���L����=�5?o����m��b;l���*u�l�,��p��*�j���G���<ODd=}��VRBc7�!%��d����x�3~w���5g��
�-?{�'}����~����1ek��
�$tu���_>�<�
o3���V�V���v=9X�L�B�-[';L�MZ{3�bp����Jo���Go�X����-�|R��~�V	���8�4��"[
���q��'!9��j�v���7�s���y��=z�m���p�����;Y m��@�8�=Y��2Vl�E\��{�q=i�w}U���]�~#V�d��f������N� |'Z��/�X�s�,^�|Y=���[����:�)�V����L��	��0�/�����3�\ei�'��������l9[��BZ|������f�B���d5C	l�y�
�G���!�-�=yT��UP���������/�LH1}����DC�1���}�B�>���.�
��,H�d���8Z�����|�J��^^��i��7�\��e������f�����1���f{1)�f2�����x?��' �-�)�g��O"r^�>��F'��c��p���G����psB,���A��KF{�)�7��3j�/���g{w�L��������qZc�o$m���5cX��4�������ew'm�f�[P�d��-La�����a+��/W��jN��U>�������t�}��������m��	��+0����>�����dkU����m��X�������x�6������n��������]�gUR��q��=�sC�M�F&���~a���|����T
>����Oc�����~?���Ee������6�[%�)�CF�
�)c}��S��+��$n����������������c��U����;�����D�}gl���P?X�_���X��+�m:��B����1�����yb��9���}�(m���\W1_���}���r����.�~qb�>��������r]���*��c/���\?�r�<���Y��r}�����V�b��d�~b�>���^�g�~���U�b�>���^?K�B���R���Y{)����S�CL�g�~��:�@������j�_����[�1]�qb�^�?���Z�����&^������(�����Z�KN�O�!��s/�!�����Z����^���=�����$�4J�����V�bn]Wm����{�~K�(�b����������_������W��v_U��U�����y'R���8C��n`�������^�n`���G70C��g�>_��z}[�{70C����!���
��u�f���^������_t���������s����1_�J�E7P�~\����ot����ci����������?�!v�On�]����tC������7����
��rC������'7����
��rCx��n�]��b������?�!v�On�]��b�W7������o'7��g������������w$7���~;�!~=[�����Z�������|��Hn�_�K����k������Hn�_�~GrC�z-����������6��S����yA��pWrV���:I�	#�EH��G���+�-��g2K��	]��~�V�L�
@��qq�����Y��tr��q��"d�������/�B����M��v����`+���eCD�=<R�}	fe�&��9-5^��3���s}Q-_F]&��D���B��� c5���|�E?���L�w��
Q��
�3}����W[��Z�r���!?�8��!!u��ogf����=7N�q��D�JBH���(�TC4��)�s)�C�i��#Hq����@��	�p����t?w�:�>�:=���y�)��A+7h�o{ ����j������^�L�< 2��G������Gf�i����E���/Xa7���DN��(�A�;�l* j�B����kP��$y`I*�` ��`2:�F��<p�����$��!��8|4�.�y�bI|7�h.*�:��Sr�U��,���n�<��\��B6n$����h#+���5u����Np"!�������L@���x�����i
6�vf�����D����f������.��/�Q����y�CK���	z��&�i,�[
�q����&��L�,��M�3�(L�rr���������6��e�
=���q�P+y�d���^i��-�B�WO����;��C�h<pR������������?���nG�����K�e"��Q�!tp����ED�pB����0�r�\��B�I�g���}���^�{�j����8M������Yx!V��	�XO�����pW�v�����lD]P��xX�]�{y3Rk��U�G�]��Z6���0F���_�}����@����;=|f?{��`!-���33,N.�!/�@�[�U0�������#`�+���d��6���N�<�YY�P|e����D%E�S|��GW�'Z.�0���|n���Q�g��I�1�i.>q�����Y����M�`�&X�T�\��z�]z��Zd���z2�?s���Jos������~���;�h]���D;�����g"g�G���?��u���nF����;`\��N�Q��c7s�����f�Z�a���o\l@�y#mT�U�4�'v{���?�_?v��v�"h��/�K9����8�_C

�f'�t��_�<�q�p>/���(*������\.��x���g+���
����"p�z�������Z�_z���|�{z��w�/@Uv�O�;�� ����_{���S[��(�q�OD����5 Zn����;(.������B���kU���z|�`1pzgRf������]�}�F�#�>H��fTL��8��4��QCd:,��%<��a�y#�T	Z�dv<����C�>�������c������K���������XAg�M�%Z��������0��V������V�|�H����^~������~����T���(���?T��S�A�
�O��2�%a� ��Y�	�o`��T�S����t�4��8�����R�C��e��;��8�
�3�G�W^L����x��T�����-�o���k0=���}���i��eV}O7t�B�;vi����h�9wl���y�#�o���Y����/����O�,�%���Q,E�.�(XP(��hP��r���"�t!��S��-�����"4r������;z��y�`����M�����T1�M1�
��}^��!.{����#���N:�/�u5T��8�n���qZ��y^�V�V�m1.54�y#�8����8,x%�E�c�d�o�}q�����[#�e$d���;f�8�j����2���v{���!e�� �G���'��T���5�j��M���/t���I(��)'4��������&�[4S �z�G$��������,;�4r�b%��t��9�L��9[���L�e���,H�b7d7*�_�v��D���3&m�Ug���f��[lS��e�$��>CP:���Hv�gf"���FZ��)���v6���[8rs�����~
ICj!:+��e=�N�l�V��I=|N���@D������g�����/���
��B�Ed�����k�������w��O�i5ga�F��]KQl���\K�H���Ev����i�/��	�+�!�}�9(��{V�����|v��h���0}�_�N[�8:Y>2n�x7�(w�)�
���{;�E	�n)u#������g3�p���~��)��PW�r?�������KA>%�?�qg���sw��Ir
��cV2[%P��#�9T��+#�$R�\�as���`����A.��)+�6�b�m����'0$��6����$"K5��a���[KQto�B�L%^8l����,>��Vt�zW��V�-*���a�`tX����7�0�e�J��PI=�����i#3�W��6A������Y<���7�G���<p����-��x��J����&�1u%'S�jt�sr*CG�@-�����]su�2*�����N$B�#�X��<�*�%�&��DX*egBtB�`��E��K[J5�v�� Z��������"s"AI���ac�E�>o$���ur��d�>!����d�x�_K7{{m+3�z'f�V�d]/HU	���A��'DH=�d����^I%�(���i����U�����U��_������W���Pq������J�]�Z#��mEc��c�F;	'�	�`<��������p.��v���28GyA*c�M��I1`�_�	n�]2��a����	��HKU�3*����������3b+�oa���i��������Y�~����O^Q���2�}%"#�e�]���0�+�*��!{�Y��gE*��)3|X��IH�������m�aGQ��'�,����G'�3�e_���M��%a�_hl3,�,�gv��b
�3@'�l��>���q�/���}"�7P��:�3�
��@�h�a���b�WT�U������xUsI�mG3�� ���������B��fH�����C/$������L�
:����sh2���.T��m�vL���V��$y�5X��B��Y�D������o�c�������k�@1�:���Y����eaC�l�T���S��;_HV�4%��"4�B�s�0�*@';���cP�c��UA,uM��
>+�B��%�������s�����4���X^��NU:>a�7T���L/��@�6���=����@T�������fv�`Pz�������`0xD��;^�	?H�'E%8`"B}�E�XXR>���'�y#8q���t��������W ������	C+)2{������b��e��Tv{�����{&*��>8/�������7���@��L��}������
T�������bA�����F�z��X���r�6�:��>���%�X�����-�e����b�;n��zk/�uo�=���L���Fh>��0�h�Sd'b��^H��t�HnuX�2���[�${��}^L�fr�b��d_	dsv|]�~�P�.��Eg
R�f�21tw�OD�nnB[{P�K��k��y�����b�������'.���������C�.=.� q�����\���&�qcR*��	������V[���i�3����#�oC-X���s�V�d���\Bo?w���L��o�;��^@D��p����a��^vER���7�t>$t�%�}�G$@W�K�C��I"����j|��*�
�N�6��t3���P��[9<��[�}��"p����WVV��W��>^Y��H��c4'>\Y���j8{(F+���x:Z�����Bt�2y}�V��s�b��`���7�aN)���_����K�c����`�n��K���|e+3�:M�y�1o�aZ%/f�nE���'2�PsF�*��qR����� �w+���B�n�&�a�(�����x������A&�x+jB\��Wy�L"�`H��y��H��0������?��K�p�?+�2�xsp��bx��[Cx�bD(bx+0���
���H�dE,���F�W=G���u�X:M'
���c��G�*�2"x�L�-DJ������Y�bx+���h��Q��-L�}T���V}� ���~{��@D�n�P
�cM1<2G�H�
��AA�����-�[ZYu,=J+����J�=J+]��(�_��#����|�kl^�"7�`a�_H�M��l�~%Q�$��:���$J�e�������U�r%"������������o	��\�����
��hx/t��W���iE��D�4'������i�����/_H���Y�x�������d���B����j����?:wXp���p��_exc -P����sD���if^=�iN�u��E+Q����j�m��`�:���T��/<8;�+�����Q|S6���N�������7���D��WRd�����E��R4\�i����T��/t��(9.����`�J�q�"�e,�i��-�(O��:�D��n��!���Y��7��b����{a�A�D�G�o������c{X]c�F�m4[X�xbF{x|E-u���8O�b�+�b�-o�����9#��G5d�����Z��sg����_HN
�w��a���
��^��Y@�h��z������i,x��ia��������?x&�x���jOQp��"?1��h���%�%`,.L%"_yQ��Z�x��O6���>7}��i�|����A����J:�P����{D�W�Z�X0�m����c�4����wO�u[�uOk���a����1�ez`��A_jA���l���Ap�r=~�^�w���~
wmf)�	�."���9�$P����47�R�j��������h$��S�s7� zK�����+^{�4@����4�����t���v���g��2@������^$�H`���? j��xw*��g`���M�]���e��L5	\�h�B	
���e^���z������:g�"�}�$��H�x:�JDfO.;�T����`���[PN��[&���y1>3���E�aEM��U����^��
�G�|���d�p�T������h?����/h��\w	�li�VCRQ�7��P�K�1����2�������F^���;��k�k'?��M{�;�e��wR���46{I��SI���������e� *C*������_d�r!�tkk�-�����_H�{e�jy
�5�"9��m����J��}�X����[�"�����w[��!�4GZf�c	89��U��?��1�{����`�n+^0�{��F���0��b	�<�]1F!�Eo:��L	}��-w^�& ���o"~"�������{��ct<�u���SA�x�CC�B/>����������1��;�����6�B	`H�e�N�7����f1��ac*�����"&�Vr����E@,6�9���6S<A��bh%7���)�����	�J�J���P��([�(������4����5������q��og�����,k���/5��l4�o	�?�#��y�		��m[dBb���7�����mS��:��r����|l��R%
���S���Jl��n;�S@*z��_�#���#)o��H-�@pC��5�� ���
�h�o�i/&��*�_�[#/H?����*�������a��;G��Vp���V�`��u����V�������0������3��#�#��p��8X?@OBlo&@�'�4)c���O��q����q�
�����a�C~x�;U�#��,<������tEn�j>���������K�0���P�����S{�<�����n�u<+�BD'>o$@�X�7>T��V����7�K@_}E-��a��1b"�.Dd��--����1����t��'���O�J�1��� �&n]�z�4[�>�������p��D��Z^�o�?�O{��-Q�n�K��4�~�.D�a��'T���+����`�6��5wS���m:�VA�����H��~#m�'��M���	C���/+�����o<`h!��>��V[��WG�Dh����(D�o�)V/�A��ac"�O{3�4#��ex���Fa]1v'8�&J`"p���)���L��1�X�g��V����4�d�����{���	;kU���O���b��1?�����XI�'���b���n�.� �����zE��*YG*J%����q��JD>�	�&g@���K�`�E�O]�yn-�~����>y����g!Z�������=Vad7��M���O��$����A,�M�������>�8�L�v�������J�4�#������P��������������Wr�d�[������������A���f�u�[����hS
L�Jw�D��=l�!�"T���m��"L��a��e�8��^,�9�)t��@�����O�z������0St��hk����$���%[�~����XY����n�q:�p� py���Ef�5���4���T�!��2��3��z=��!&6
H���'`I,�Kd#e@k����8Zq%8@��-��������2xxB�
�<�<0��u�3_�c�����_�91�	HB�M�C�AZ��e�Rq��?��b%�����5*>N �CC6t����,�����;�| ���T���Q:^����Y�W�C���F.����v|�����e2�!�Kc:����lLp��
D'�c����9����*��q�����!�+�z+��q��sOjt���B��6V���C��i��L��9���>�9�q�+��<�?�Z��Z�|
!c� �8��&����lc�������H�g��p�����D���NeY�x�=��!��j�/Q����n��:��c�_(��e?)c��������Zl+��0fh����G�Ee��9�����!�F
,����!�"�*.��a���,���^H��r�
�7bWL^��[��a?S�m���dt,�����
�{}���d��Z�;����z%"���*a>����'�2'����b%�3_�:bQW2�����EF���,Ve
��W���2
��&j�4k���	�������~i����.&�I��?'],$��I��b"����+8��k�/�dZB������t&�)�>n��={��A�p���!�;��s>�x��D�^-�6�S�.9�C��3�m�i�g�_	�o2��TU`GbI=��kf�l�?7��������"��
-��.���	��7�%�9��x��16KX�������m�����|�0�����������
�V�m>�a��Jn_����g"i�I����P�g���'J��p�t��\�J8 �mD���i�h`A�7�*�Y���Z�����e!��}��];�<�<.u��H�j���H�{�M���r��0������~J������D
�Y��C����EnED����V�^��%3�~����+S5 �N�����
��?�����E0�h��Omt���4������\�q�&��Q�xce�w��g�����;�t�p����p/
����N">�1���XP7����'OR=ko�N�����M�)���4���_AU?+�h��_0w������`����_����X�F��`���x�|�(�^��7r����Xf_�5�os����1��=���8�=����?7��RZ�6l���>�����6���k���e��G�����cj��$��r{��#�i��O�7���,5i7!(�����"$�������it���y����|>DjB�$2��[P�{�x�������m�<�L�,�a�
������A��"���G����n�z����N�7Gk��M��"���^�y���x^����i�,1$9����bY_ok6E�-�\ �)�_��tA	��^<9���	�����m�9]��:%���mi�����fH���
��B����T����.Dd~A����%S���n6%4�2-��l��zx+��n�!m�l���V bt����V,9,$u3��^�OtP��V2-����BK�"X�����������fB����/���T�{��������%�l�$,�� o0,)AO=���2�%�,��Y�j(��-��3�tEZf�6��d[s���0����%��1���������j��~+����;�\�����:_�j������������B������h�2�}�|A����i%h+(?�x ����x�O�|��fM���8����'!L���<U��_r���Ll|A>��sp�����6��xx�w!���a�	�74�a�Fe0�!������X��?#Fe �<���0**�#�����mX���b>�2�{ibI�z��T��<�H�P�Q���Ic���1I��r��5{A>��@�;Qq?/�����|�$`>���lD�
�>����1d��k��1Z�:��QMr�$_�����bH%z4�k��Y�R-��+��P2�����(V3UA�l�lBY������4�tbu������>v�����8�2����I������X*LE�2�bc��X`7��Z���tp�8���e4e��ER6;�wl�=�67k����f�_�b,�z>c�$������`����Z�\y�&��r�aS�`.�\c��R*�'N�H?o�i9-,�~�/�s,��HJD��S7N��)�J3�T�{���\FR��H�-Z
�Q���"@�C0��d:6��*�c�*��a!����B�������t�����@���7K���a<��aH&([�V��4������+y0���7������_H}L$�/��_z��B;�"��YK�*?m���������S�Ev�>.2�����co*<\�+����o���&�e�}�	E���P���w�V�����n����f@E�������{����@�������E��	�r��h_�=H���IK8m����Y	>%sS���X�6�,���p�D>��AQ��9~�����V��'Z�i�W�����6��6����t������[wgyLW���������j�O��L���w@t�e�c,��S�2�A[�@�]~��"���.���H9I�y��^�{����CcE]��t�<�5�Pv�A}2�d$i7��U(j=��yu���V����y��
>��M�*����^{�<��L4�����,����cSs4������'���7��D&���D�I!��n#S������������k9c���j_��$H#p���2�i$��Q������y��'0�!65��(��
���w���*�
w	�A�����<���<v7G>����t��]!��m[�4!�������������R��x0pc@E*?YQC6E5�z�E����-x��'E]�m��G�$�3��NK ����ijE|������.�j%1Np��c�U���sY
�?�>A�^s�S��N�HP�����j%6nrM]��W�l/Me����*O�2���i�����`r7�t����"��������f�L��!����9����>/��up��
�����,���nV
r�+,(��/l"H>��������(D
���QL����I^K&>=$�g�����X���8��)"!�I�i/2���������7�)����>�q���E|�(^��Am�M�iZ�
��}���q�b�uK����&�DR	��5��g�<��Bs~�`�9��!U����l6������
�-���uT���$���=����!�9;�����p����K��7H�)�u�!���4�1� ���v�u7�������zt����������,�UL�w%�u��z����z�\3~b���e�u5��YN�;�Q�o�Y~����u+?�G��:�o����n���(�]g���Z~�N�{N����&�u�������$?v�D���/E���/�k�����)�����D�~��D&��U?)�\��~���������sr��������X�����P��J<e~�������s�����!�]Q����5�u��������������o���C��i�^����6$���`��IK����?�~#�`�����i��V"2���X���`5�N:N�����9��?�[��JP:�("��;���TL�H�&�ly%'����0�~�q��?��G��/�X67���k��w��
.�~��=L�d�v����9���5|����;��D��Q��8u���
P2d�q��8/��������tK0�A�������)��t0����,����/Ht����*�>ha�T)�s�]�
���&i��-����~�hV�� �������
e@�+YO^�zv�nL�,j���L���i�E��~��e`�sZ�� 8y����c��q�6����AT3Nn}��dG�����,VS���M��?���+/�uAp
�o@��Y���S���ncx5}j����_R.��j��'e��>^��SH������'#k8�%j��M����9'��1,��N��k0Q��@+~�;{��$j��Et��J��3��"��xB.���~'���hO��E���Ue3�&�TVM�M�/T�~C�^�O���;����kIn�1������u�OG��$���L�������~v7���/^L����L�Fk-Z%�U����l��op����gEI����k�$��JAC���r ��v1�@jE�����N��f?/���#t$k�p���t���%��G�o'�����8S�]�|�;��&p~y�BM}��3�����#�Q&*���!y���X�W���C�(�3@�����L�]+���X/4,�,@�o�
���|�����m�j��;xY���@""������i�4�8W�*y�y�0��Fw�?�aE�:x����u�����T��Z���i���Z"2���^��n!Z��-���S�%X��$P>j�'�MK��m�qj�\dj:����#�����lR]�UX��;!)+���]��#GSb%�Hsp%�B��5�N&p�����ih}�a]����\$ZP�^T����fw�Z��X�h�A��B��i��B�;D|W�������kk���{�0�-d�1��<i�%%������<�r��\
�`��w��){����e��O;qE
�5���������L������yy�] I�7|��R���<������]1hJ�c����K�
�Q��b�����~��1c@5�������_��S�b`�"<����tP��&�z�0�?�L�!��I�]��$4����*�������������)n��D���|<���X��s�����b��GW�<��s�jJ�]�����;\��A[�����������#~	�����������6�����������-/�G`��;�d�&I�t�r�>���i�,��em��E�a�x�P���_.h�!Y�J�,��7��-�z%Y[L��
�Y_�+�m��r\<$}2��D�!�0����6cco� H1������/`��+��:��}�eY�I��d^���b������iZ���e��c�������}F�����L��#V$`7O���:[B�F���R;��������=^?����Dh�ofg.�������W4��v���Ww���#�6��QP��5!R���3��C�	�A��z�|��;�=7�w���`����L�����7��MT0��$x���A �;X����0�Xyj;��%"p����F$��@� }���Fq_Y8s�Ccn��M������{��Es��5�B�>�4S��}��Q%"�{�e>XsM3��S	+*@�nK����f������h25p{����������wQ����z-8��23�x!I�*���������Zo���_����7u���,SL�� Ui!"��pY���JO�N�� 1=B0��������k���2�u����T�+*�j��U*iVjE.�mjqEGAM�D��R�a���E���{���g���k�"����=L[�F$��g@��'}�OE�K�p���(�i�������m�t��8?������oEC�������1F��BD>�`�7=�\�q��>������[��2]S�bZ::��J�_dB�b�)p���,���:����;m��o2�	����46�>�)�;�T���Nr��#l#{���S;l;��;�������`����&����N������AN�����^�w:dy\����!��z%"��y���n���n�������u{������AnfW���r�;}����B�<l0����u]C�E��v6���@fgA���[������=��Z�D�at��"VGS�J�����g[\�v���[��X�����T�k
�a�dB��WRd
M��:k'���sG�k����P�������_`�f��\����hl�O��Q��YKwXa0�[	JG�:�������d�Y�Ys�����f�p�n�����@�!�<>>S`����O3�$�$�/$�uj�a�L����H�������>g&I��r^���v�5�h��WOpH�������N��i^����H��f��,c� ,MY%"���F8�����c��H�-����'V�	�1������T ��Y���Zt���6����CW<G1+/v������$��D�c������DT�-d�XJu���������P�*�~��m���%��m:M�2�|p)H�oWSezX+J@��w��:���DdJI��W�
�-�v�@<�����}�������t
����q���D�Q�?����<��@-�x6�N��n�y�.*�MS#5��!�����N���Z�����]�X+Q���4�`�pT�)���0�����(OU�?�#����X�@�N�}����/����T����e���^���F%�W�<�/���/�q���z~�����$sA�3l0��(��9�����:��T,*c�T��x&��7%p�����4�4H���	|����t��b��4m}�_Vb��[�V��J����;�?I��Z��c1�'
J����� ��?�����
PG�+i2������`�?��~%C��tj�_;0�Za%����&���J�����������/E��f��I������F�yl��aA���Q��������J]��"���4��0�	�<$Q�n�6>��I�p�f�][���]eII&
���s8�e���;��/$a���c	�"��L_r�����>�_�|�Xba$�^Dd������&��������������oZ��O�1?*]�?_/���6K�:�+���z&���/�1����F,�1�jg����+/�����6�JTdp	4`��s��JD~|^�?�7V��P8�I�O�����������RE��k�^H��� ���/�Q&�ul����s��������h
���������x���P�JD��MDb�2��k�^H@�M�j�����T�b������QS��S���+�9x/$��d��Mn^S�|���]�D�9��0]g
f��8�P�*��i=��9�n5��������B�����W?����-��k=7�	V"22�Ja'L�c����^�*�����
��
+,�UOSYTY�����I�Q[���1��f�7U�����,nR�_�)���������]����~���5�Y��	��8�����S^H���~z!cs�v>D-�2�e�>1fK�_H���]���h�v�*��[^�A���[�!���X#��(����j�������?��y3"46��*�D�������NHt�a�M���l���_���b����:�U�Y?Wx�xn�W��g0�0o�j�W���R���_�p��w�����H�l2c%����������X��B���E���b�"�'_�<�9{7����>�������VG�_�R��4��d�	�;7{����������O���H/T�X�^x��� ��GG���B��*
��EY�&[���n$Q�cMK����O9�1�~�,��6��"�a�8Gh�r�r���Yu��3;��#&F�A+QC��J�����S�d����{c���������|�'�~��~:��s�����[H��i��y���QD-�����lY�$����c-��{8V�e� T��0*i��-���[��To�?z��r���s�W$@'Un3��8��1�O{1��~G�����pWt�GZT1�������$������ol(���wC�y-�c�"����l����hE��<�M3������� [Y��UF��_������{�][v%L����/�&������TR5�
D%u8Bc�(��3�7{.hl��t�p:��p���f6�q�??!U�gEl���mg~�[g��n9;t�g7��9z��@EF��4k.K����7	��d�����\SD����<1�?�`ctsFF�5�����������!"��u3i�������-"?H2�XK'22*��.�
 �Sx[c�I��K/��U_S*@�_?fYPq]��-���N,]����$���J`X&���%��*$���$og
�}��s>��������S~�5 ����L^��e���s��$tH4��Xy�d��s�5������f�*�X�	A�%���u:Q+4v���
�)

��-���4�v�1�
ohxiY�:����uC��*HO�I�GTo1����bU���W(�_?�����PP��)�?eFCFJ���Wr�#����,j��4�w^W�KX���oOG���B�������F=!r��	��|�m�9���C��N2��oO$�;�w\�6����m��ms��Cf�D�v������q`^���?5<T���jQ�5
��2�����`��<�fhE�����B�������-�O�@ID��	%pqd����	dr��a<=���D-L�V��w}�H������ ��y��C�+WWc�6���L���N�>?{.b�7dIJ:���T����#Y����WY�P��C ��`�xT�q�B����cq���q^n�Y���ev���#�t�qa��wE	���A�{���e0��
���sr�&C��m����3o����~4����U�
�-+s��@:	��������vO0d�b���,�>���b����nl2{����)���"�L����F��f��
�>�:.,���5m������~���~�
�U
���<��iF��h���{���aA�������gRh"$S��j�)#�=Mw
����}W��M�"K�ea2�=����vf�/p�b����=q
�pw`N�."�a���w�N�����sl_98�
E@�.������.,�G���e{��*�|���|�S�zu��H�Ik����k��3����yB'�m>gn!��X�h}cUd&�7�F��3�m�6
�yK*�\LJ��.}-������N1�	���p�}�����W0���U���i����i���/+s���4z@C��UBR?dv����y|)y��{\Oh~�^���(4�W��v���4Sz��m
�{x��>�e"x�������+�<�
��y�Y�CU8�2�]��z&I�t��?�����)��s:�<vE����i���,�p@&�6��a�����s�����N�l��4�.�hL&��)�����`b ����*�nXu������&�?zL����W�?���,d��OO�ME�1_����CrDp1e���eWB��K�����B\��'�<�n;�.&��T���.��f�t\�$(�4��c	��\F�r��:��a�DP7<��C p�!����M1Y;F��dd��9E�������@��y�&��q��s�����]�Hpeu�����X�"*�|^0^��D������ln����T�	��ih�������3��*8:����MUrc$�aN��1�|%���|���B�}z��BR�"����O�~D"����m���R�75��T�a���Q��M*1�,Vs���G�@��S?:�Z�����J�uJ�w�v�U���aG�c��d�`�6.%����{��38����f"���K`_7����/�ye�z�7xbr�]��#YL��=����g���g����� �S/������j&�y�r��������6kv[�
Dd����}W�������d���WS�v��vp4�"-�ijW���8R�aE.����I��AYXO���nQ�	�W���i,l��������!�������*����f��7�S4m �?�+\��B3�lU2�y���K"2�>�b3�w^�
j�R!X��e�(�/Y����@��hL�Y�S4�bh����|�h������tVM���������WQC�<#CQ*�������d������UK�6~%�!��;��>����@�#L��������Y�G�3�}��^�y[
>�gE��SD��j���JQZ~�%@���~��3_��a�p�q(��t/����r���H
w��DB�T�c�����=+�����FtY�@�����c!f&.kq��!��J��'	��(�
�{+��M�x[�E��FPB
$���AP���1i"���z�Hc��o�hZ�p��[;7g!����,h(>�����	�1�5g��3!Ql�u�����*���A�Cm	
�4������V�����Z��vw�#���y�����1Q �4��F_m�H�NvG�g�g��D"��Dw914v��_kMH�f|?�J��	��yE��y�������MmGB2e*�O�I�����+q�baP5[,�����Ybc���LM�����!~�)	���3�F�o�JjJ|�'�wd��~�
[�X��k��`�}{�Q�$��	��f��r[N��22���Wt��GO�W��T�AF���H=��jP���K4d4f�����r�g�QK�����_r�4���k��0^���@��g��������?���_~3n�����	��� ��/��~\����T���~>��� �L=mi3#�0����i��n����2~�������h`�7nSkG��V}�H#]��6E�P������n=�����M+)�h�T
(�������:D���=�v�G����^���Z�W�����g��n�lg��o-�n������A@��d�f��W�}K(�|��?����4y�,�{�c]���'XCT��BXe��n;i�B ���z���������\"���i�74q�l�������F����i9�_��d-��O�<�>��3�D�	���(X�
�.%r����2x4��z|w�q�)��D����	�+=�e���+�^�>?
�;V�
BYX��������Lh�i�3�����
C�
�@F���?�]���jS��2��eAI�����|�u���a��g��??3A��'�X���`�*c?��.�?�+�W�}Z\���N���P/#A��R�E����*�j�"���d���
�j�\l{�����v����2w:7l��������|����^j���sC7�?z��C[��}3C��`�6����~P&����=�?����-��X�K�;��@�$Q�5(�mO*�/IU|��"WdR�r"k���R"%��,E��������5#r������������O����_��_K�~������yC:��]�t����[�;����I?����������;�}�t����<�z�u(���Oc����C��l��p�%vb��.�����VG"�������N�v[����d���C�2Y���,����[�f"9��V8;eo�w!.c���q��:b��+ �s(�����BC��+�D��� ]���.d��>�w����<hbQ:�`�\����c�OYP�;o���
�eA��=�.�A����D�&�!�dR�YP[��l��	�C;S(��WQ�ANY6��";���iN�H�����8���*
-g2��;q�����3!T����l�S���oF�
;�T��L�Ih�XH�$�%���D2��	.\"�&�Q��Y�H��x���z
��&����v����J���z�Le�#S��������4����$N3�B.����$^L����w;9�!R�`H���v��4��*`>@4#���Y{2�3Y����B.��x�����Z��w�{$����������F����q������>X�V��.��"��>��O�L�f�n�C8?��	Yvf7���l6��iqk����j����HF?Ft"�c�L�U�pu�s�L�n*H�Vt"�u$��M=���0"VtT�0�Y����'�Cm�`DgT,?�[Qf�ftB����hg�"R��k�K�nH��17�Q��&0�<@'��	}�%}��/��Y�G�E�x����Y���$z�3���g4�M
�[�	�����D1�U��4�jV/}���f�d�=�����uBERi>O��&�a�PjX/�
L+O�U'�����i���hY)dz��5R�:���>��{��dX/�������upI��K�n���N%ez�,�y�Q�T������t�G����$������R��=��.j[3b��+:����D�5?��^P��%n�;[U�n�/{�b�Z�N/�{��
�������]E��"|]���`T3����	fT����yD�H^m�WV(N�F����f�>|�Y��N5�5�Yt�#_df0�����e(@c<�H�OM�g%�
jVM���xZ�T�V������DjANNs{%���<�>���Uo��?���	b���,�w��fG����h�	!��v7��us���]�V���/H2��UD�/�%l��$�j��dv�Df5�(��t�u���p�Yb���G����.[�����$O�
���:��\w-�#�#���#w��(7�C�Y�/�Y2��:����Gb�@��2�XB�
hg����N������&t2��d�8-�,�G?E'�+����y�5����F"��6��<x�j�4d���D��n�??4�
�
��"yTC�Q$$�bOc��X��[:�!��sZln%���[�:&�8G�
@SP��1��WY.$����|��:@�+�9���`��7/�D����`Ak3�g*T�l!O[�9���^�$����nu��c��W���������a���Y>y���<��d��R:|�vH���+��C����G���L&�� �o|�#���-5����&4�0vM���m&�^���0���s��t��!��j���yN	&��]���������/���x-+�DF�m=��c��Y'�4R'U��/01H[+����|��.Lj�5�+)u�8��t'�����n�����"�G��I��(�IdO��Y@^��������@a/����${C
��d���,�G<���%j�{2�~��.��k�������t`u�1�[:���@q��q�$��Nbq5���>�?��C<r���wa8^��38�l������C��D?��I��bS=�2Uw�eR	�Y��Y�<I�0Ny?t�������������*�'!H���.d��m��J'��(�!��HUU�^����V�2����]�%_p��D����a��3��-��JdhF�,2����57�����0�W5���@�XR�v�1�Et�-��7)��!�sF"�.���q�JB0�B���������|�xZ����L����T�Wn&C�a��6~Z\�K��B8�?�d���`1������$��������$YsE�pU�����B�L�$��i!-���	W�������ER�]�VL�Y���	�����*f
yi��@P1_3:�3�E��>�!��v���`�n�NMr�T�v�P�-��	"("���Y��L�B��,6.�����"��8�l$Hv��
��k�Z�#\g3r,�"�����O���=Y�R��^?�yn�r�N��qq,s�#y)���[��b���{#U�����n����]_K x��8��C���6�������?����N������<*�6 (�:���H$���p�
�e���2���yM�K�S�'"��'_�����r����+yW�w��?�.M/e�����#���3�G&"5�_)��]�t���D+�<8��]��G'LcW����lTDEL��Y���'?Jh���n}���g�9RK7��V�������������N'3�x2 6�Q��[��Hj��a5�f�wd7]����|�p#��U$@��: �3�0`U:fL�F�D�!27�{��9%*$�[Oo�lXHH��^s3T�������./��}1��(JO}��1��/n�:�H0`��g�u}4��_1+O��d�f���+���`!�*�	e��
�,C�2)�F�����|�j��V������3�K�ZI_����}���vB	�n�:i6{��d����P��S��f�-��fe���7�}|h{��Q	�[^U��Ml�����)8[�;;t+�?��F]
^����yn�e\�]u�be�E����w�$�VzaS$r����%��3*�X��U�a��A����d&�t!�B���9�e���m�&��������X��xS��z-���Nt�h��������_�;����{�sr�\����z�<.�����S�}.P�\����>&F��X��
<K�m*�M�Rj, r,p����O���c*p�\�hS�}*������C��sKB����3��\�~�WnI���98�-75�X��M
Y
�;j4E����������#(��3w������}$w��S����!���+�b�{����s��\���x�*���%�=���r,!�<��K�-��K�GQ9������Y��F�c�[����;�h}����c�����=�f	9��l� �{�A#�S���[jh���Y����u�*�r|��,u�'������nf�K���G�Pb_J���6l�q�K����P�YKlS�m.aCK�����P���<X�mn~=X�F�<\��Rb�m��G0�� y�%���
!,aCH3B�knSDX�\J���>��a#�8�~�j���N����o����o~���on
��W�F��7�����F��7�F��7�F��7�F��7F��7wF��7o���3���/���+���'���#��������&������{��������4�1����7��G��������{����s��\���D7�K�;���\"?��^"�-����m�n���������Y��,���ci0�*+62���L�]��v������b��$s4������l?��3�����c�b�%����J&#p��X'��7Jh	H
���,_� d��Dr�$���diB�)����o|�0��$���H��[�����K�%��u���C����l�����`���PC�(�Phd
��-�8�
�����+|�7�z��N((�(F���Hdi�q��#5B�l;�Dc��e�������Cl�q��!M3q���T@��
�7�^u���!�JJ*"�TU����vZ_���0)?�H�*�Vo����K7�I��K5�%(���Bv��>�hM>�~rQ��+�(�e������8{4��XF�IL���yv��
vS��
���\i�;x�+ *�\����5*L&A>�6 T��>��dT�M�h���e4tSV}pG���4�&�y�:�ZF��L(���'`��{l���'�r9�X�������`��^�AdK��E�w!2�@���J����;3�h�
�Y$���<�)�A�vj��ZV"�}gYN�?�)�d�:��#�!�r�*���
��Rj7�/~��0�r���c�`�#���
f�G$D������t�n���wE��w��+�@�k����X����Y�Y� �Q,�X�>l�v"��c|0'f�+i�&�F��6�w=Qn|�h���9@2�1�?g��u�����IH"c���Y�Wk�f'��xUT�L�O����6�z���4!�n����s���h@�
��������43;y�M�'���P�k��S��j]sBbm��rq�(���h�����H�S��o���s b��J���?+)<�?3���%�Y��1]M��>���*
�Lz�GB�����8������q��
k���P"���$�����n6��\$�R5�h�N��y@������O5u��7�����t��,��&��J�&[�#<Ftj���G�����B��}|tx��y����cn��F����3���a���33�f{$*���w���W�����:���&;����M�6�ee�[�����w~K��H:U-0;y��p�y����������� b�,.����cg��_C
<Z�� b��6^%��<�q��]��l=�����4n}��?�']6��
R�"l��_�=�L��������uO��$p�D�a��cz��(��d����!P�Z���U�,b#2M�d9�-`&��P ��M��ic'�����gV��k=^�X��dmX>�c�u!�Q�m�{!�A�d���-c�ki��pq���Tv�]��<��]�epA6������)	��(�8p����]���DG���!������ �3fP�|����0�F����������*����VI�wE�Em=xM�q3j�;��~����D�����$�;�M��G�8	H/~ ��)=i��)y��Bx|L�8�c������t�i����,�E�B�-���Ay��gp5W���b��P��Y&SUN��,�Xu+����	 $s��C�V��l�
�����qC��"���3��aN|0����#�+`��[�B�^'p�h�B���x�����6������M��b4�`�{�EBR�)�{��~��[F����_��E2����"�h�P��jA�J�OH����@.6��"\1�����;2b.�����\WE	t�	��=l��(Y$h~i�[c;
��"8����8_x&a��*� �~k�=�Uwl/����e�8�{���N�+B���/�"�����Bt
B�����Q$��
ps�
`��U��8K��6�t���+��<�������������@�p�H��UK��131�v�Ar���
�iiE���q�LPR���d��_��d.vC6�r�m����H�x���@��Zhe�WY5�)
���E��(��"F��Hv]�d<�gER���qo�����"���L}�w~�6�0��h� �azW@��D�~b[��i������e	K�� �U�|�*|?9R�o�H��	�~�|/594x$�Hdh��;��g�c���1�[0���(v�7�g&%�O���*Z�H�&�W�C����5@N��\���HS��N`��zG�&��s����r����Q��������H7|���8�%����R��3u��
��=]���u���L|'@]=Ry|��~����$*�������nZE�d����d�K +�w ���~��D
\K=t���c�gT�`7���6�~�
E���
���FF����IdQY�Hr�IU�#��XJ�p:���r�*������:�a4+�����2�n>v�<�3�
;Yn���F��=?��@N[@�^10^o�������{�u�	�������u+���
gd�y<v���z"��X���x@�n����8���5<kh.6F&C��Vi���px�c"�=m��,Q<�E��@Pq6�,BH�Q�(�D�����)�p��g�H�n*�4������	RI����OR:�wE��*(B$<#`3��3,��oK���Zf4d��_��]{���� Q%l������M�y��������s��z�����_������_����%����_���Q�?�N���(�vI"-{����Fw������K&����/��k\3�]�s�!g$2vO���-(L��� �Yv���M�D�t������3�Z%��JF}A�Zm����%f�&2�����1�~���>�~��E3��(��|~3t0�2[f�qpL4�M�}Cx��d�l�3�L;�e_�r���vQ2�]���W���Y-���,�-�=�e����L��QS���m_P��f����n�`��:Qj�gT����{�t�����]GXv���D��a���5:�`�y�L��J�
�>��X�Y��V�o������4�yRc���O/,�&����1�����c�lpp��o:+xW4�q~�ZxQ@"�z�1�N�?TAOb�i�](��c��{6&}43���`����/��7�&�V��/3�$k�e+(b@D�� Gg�M������q���C���G��������v��4	�bGYY��o��S%��Q��d��VE�ewm�ms� �wa������^�[�����A�nh��pB}��d�,6�����?(�[Y�3���v�������dPF���/n���e���o�^��7���)w����� ��
����6��&�;EW���Ft���IZ��B���^.�G��
��&c���'_�hD�������?l�������#�7{�:��!r%��#�{�	�����o�^1��3�����+Z1�B��'�[>O�y
�}b[�t��"�E���Q�����Y�V&m�����c�:��"t��=0���S����$��U<���G�+�6<�dk�s�wap��Y����}&����Jd�����'��K>�AxAQ{��;��o7?B�GP�k��1��<����7������=�!����~�A���V�N�'���}V���5M>�wE����g4��E<�n�
�?�	st�
q��QT��B�C5���`&���e�W��"��t:�n$�@�o[��C�����*#G�����0^��7�6�5�y�_��3 <$���d"]���G�'��*�N��@���L��JZ�����M+m��
���+�|ef	�|��k��
�I�z�'��MW&2d5�Co��JF80C_��V"�leF%���<��g+���r��i�bO���)��2�M�/m��Kc��[P������q�����de��L����}�0%�3x7����'rwWsF�2���&[2,x7NK8t\G�nFtzZ�=����f�x��6F/#��#���t�� ��� �B�
��I`�6��-�0�dC�}����WM�%�z)H�6�(#�7����{�K��VX�	���>mh0���DI�3����+��1��0�Q���h��{�-��Q���{jo"�f��Ycx7N��CoF�{��Y����G�mn�������������ioC���
��>V��)3$��k�dMTO�s���D�� ������e����������\���s�����{Y����Cxfp0W�%���x�B.�����L���;P[���D��	t)0]p��p"����U^�6gT@j��`o>��5����fe��y���<���W.Lj���������=�P+~�����,E���N���
ft/mt#ESOtF|�K�P�UmG��M��5��O������6W����,���?����.���4k/����S{�	@��7�6��]��|�N�4�'2�#o��V��n_q�|[D�iQQwT{���-&����2�u!\F�v�w� M�1Ab+o�/��Odvz/�/�:
+��%|L���3������Pae���������"W��F�5���p+��c������y�����B����k��/����=���#B��/��G��vE�
���E"�v�7�W���2C.��]���y���J,f����/�a��C]V�,��2!8�(��z����K����c���?6d'6������}�|�������4k�5�a�o�o�?�6B4J�A��l�����<P��	9''jB�-ne��=zLA���X�����B-m3����tX�^Yq;f����_:D�]�q�w�.1!������2�3��
�����
<�eZ�X�E�c90�����'��J.���k�;�Nd_���U?m��A��0����0J�^Q1&����z�
C+�@�%V`������@�����<z��a>L��v�p��~�p,��i���_N�mrU�W���4V"�$��
y�bc���@t �m�U�5�CV8�3��j"59��_M/�$$	��R^kU�KL���w:��=�]+���I��l/9b��+��r�dY�!�:_�bF$�� �y��L����)��]�9
��G��J'H�yE�*�b|�<Cg,�2!��.9K
�w�H7#<��e�8f�~W��F26�m��h&Tb��d�=�TkA����|��V&>2,���]���J*����W>��lp���H�.D�!*���2J����G�;�`���q�.�-1���TbE�l7�����\����	1/Q�A���z���`�w�%��,:��*�o�L�"��jG� ��r|�G��or6���"j`��5��N�
o��C4}
��X�/@]u+C���&aMi�����v��'g8baB
cU���s��g$������H���y<�!��D��2+�pn�f�v�=G��~��m�E��M� ��ouy��Zm{�.��,�k�\�-?8hg�8��=E��^��������GKv�Fb����*�`��<E�o��qYF�;o�.�������g�q-]EZXI�Pwh�#���|w�N�F�{��!#���>�|y���	�H^��7�_�.T3���J�b-z���h�e�a&��9�*���.��lV���oa��e3�1�����-#��-A��=w��V���:%�&���6��63!:�;e�����X������L=����-T}�Y����"�����I����g�6�{��"�{�n�����* ��������LA������F��������7k����<w�a��;Z�[�n2�HZ��.`c�w� ��HS��U��8�hF[Z���k��K��HF�0Ui7>�&2��/����o���}
��CA����.����fB_�{�f�EIH��e@
5���	O���@yTY7;qD�4*�2$�����+�u��t�,"�xy�s/�d�s��ER9�o8�m3���(�S2��J��� >�����5>]bB�W�����F�b��}|F���C�R��Q����wEvQ�����y%#%��&�f7������wM�,���q��t���q��LL�CN	.	m��*4����x/�v�o!Z���*�|0����������:�U�Y�kX,)V���X��R�����x�;�tw��03��3�K�j:y�]z��&i��'��������������v�q�L*�E�vk�p`5����o#��C��:oD6�,o��	r|�����G��YP�s|	�r����_��]6�u}�L���dF/�����s�3!�����iN��5=n@gBt��G��8�|<��A'2�"�����+@��	����u��L�5F���NL��w� �=F�bv��^gT@l��\�Mx���w�T�j���yG'���+�m,2�����{��������h�Gtnk��"�3��aC�����+?�0��3�sn�{V�{�����0_N�=7���:7�(��i���w����uf��v�����.:�3C��5��=����[18"���i�?�.;n5���`�n�f���z����XlH�+��9�����fj�0����i���&� ��C�Z_�Vy�q���c<c��E�3����A�6�weU'<C���Nn�^q4��*�;��w��N����My�z'�p�CRm�3��������)��jSy4������3�:{�*nn �daA����f�rz�[Vf�>r9_��dv��]Y�����@�/���U���_��*2���?+��3<�o�/�wf8�����C����R9�)�H�����ETm�"���D��!6�[���@l"s����t���lG������0��������U��Dp����|B�O��g��v�:������@��N����.�M���e��"�1�5��j8�|A�&:�NU�v�)�O��r��a�&6���NZ|��,Z�fS�hO�TG��UA�Y(���U����*&<��I]W��;DUg;.��do�V����=���V����F���3�Uwv���{��������b��@�{o��0���a�������LNvXWY��d'�����V�hX$�d����&$J�_�
��2�����038'��P�����UN,�g��m�V&�����w�A.Id����Uh�K�*��L��
B{��X�� H�cF{���D�_�v^3��g���\����68�HN�e���N����V�!�|����9���MQ&���!]���7u����M/"�[?�x���7 ���6�
,���2���J&���:xW�������v��#��F�sL���@V�;3���>��;���j�t�%U/�wE#��%���F%\vI��S8Q����H+�-�qU����r��B`�=���D}��������n�^�?�;�y#�3�\+yWV���t!�<rN�F����1�Ew�����W}��'����D��������Z��
������P����f.�z��I��d��U���a�9' �7_��Nc�e��8Zs��G�4�>pS�C��_�x������@����������p'r�����O�/�%A
	�	��T�k�6�N�3���
4\��RwO���Q���"�������1!xWT1�|���n�m��,�JSD���T�����D�l�����ol��M 6y9��~aB��9x���T�E{���-���M,�[�g�A���D����7�t���'T�g.�*�.Dd�8����\�����Kb�0�Hu�o�P}��~2b�Jx��J'���fI��(>�����3����U�L��5�
W���m&M���'q
24Yi���D����J������
c��Iw/���U��`�n���=���Q�����A|]B6D��
AnG3
��eD43?���og����>��A����J�h��FsJ�JlR/v3�f7?.��g���V���;
���y�-��fse-�R��bQD��#�=q��B��Fp����S���MLF�ou�0�8|S���`��|����q���3Lz�+���[�~�$�<sC@2�3�D������y� H������[��
���%��!�~�]n2��d�G_���}���Y��9��f��H����,��f��yb�����
3����d���9��>�P�T�zM Q'�6�z�Vj��C���	������(�sw���2��y'��,���G`����g�������a�����NE��z�07��v��/�a�
�3���:�a�j��aO�&�<3�����u������"9��2�%�|����'�\�n�����nQ�L��m�t��������eN(j��	�j��t�8�byq8����D6�'�U����@e>
LD�"�IC�����fpC�t�G���$z��W��,��r�7��h���&�����f�<�$a2�����3+���� ���3?��83�q%\�)�x�wbV+MVV~�?>LDR���J�sH$t�V�B���I~V��I�=j���y>�Z����9��Ae�T��p�WqNY���|0�2g�d���:��FW�������O�m�a,L��hS����9|fX���N�x�=�91%r���su8�|{�Fg>1�v�O ��V�S� 7�|s�
S�Alo����z�QT����:-����`�H�B�~�d���sa=Y;�|R(=����3,0aJH�3�`hB#�&������[����	G5����P���9�2������$���`�Z{z��7��7��kfaF(}B#.����'�Btjh�b(�g,�$yN8!L��N��P���}H'��}f��R�Jv�l_�����C�=��Wb��M0��m`�Z����;8|6�X�
F���{Ke_� ���
��u6;���NF���t���r��&4��������w2�{�fI�>d7o2]z�����$���b��/^�����U]�n�:�:z�����v�N.:���L�������&�d��
��� �v\��|�0d��E�����t�?!�������������.��5����Qx��D����K/Ko��3�	���D�F�����'*�sc�EH1��������7�������Z' ��Z��f��AyW��3���r��f��Q���'�l4���cl2��
q�8������5���O.N�Y"����K��G'�����N���F�,1�u�o�X4��l,����Ft�a�L�L�+���LD��!tr����
*��:���#C.���6(����3�:n��hlN�����EQ����@��Z�H�O]���ju���U?�4������j���XB9����n�m���m)w�)��l��_��R�a?�p����C$��|�������	�>���� �K�R�a���gbk(@�����j�d��Jtq"
{�������WWi��L����X`Z)��>��xf	tC3eB&�����L�:~V���c\oV
�����]r��90��������kJ������39���N��������&dP(�x��&���a"���w�Q��M����D�
�T��7�A7;�fT��t&�U���$�L���D�J*�`�R�>5TF����&�6�*��I�'-�MA�����R�K�+.�)���e�����'������k���qQ�'���uMUYA��-�	���5IKtC��>'-�rR�����5:i�sO����X$�������m�bbU����e#y�.�j</u����G�)��L7���E��YT�G�O
��:��T�(&C��,7�m����T7H�����8���@���_F��Q?�y!W����y��U[��|���.�����Tm�n��l����l�a"����D��kf�T3�?H#�4�8!���;�l��$7�jx)����)��B7�.��j��� W]�����f����5|FU��lq�Z
���������9�
��:eFi2�d���%D�%�s�Tr*!���"�u�J@N%����ORl���g������ �w{�]������!�����>��O��������)VK����w���9n�X��V�T�T�K,mL�J�mL��r-WE�{N����]����R���R��-�wM9~����v�����������~�LL3�����/�����?��B��&��e����7�I����������~������������?����3t���|���:.qvG����?����:@"<���L��w��
�d����8}�!}b�c��I��5?]&�	�;>��x��1q��&�}p��D��gE��q�/�r��W���c�t�e���`��d�F��V�^��qV���\q�W"*xG�1�K	��%��l�q~���P3�
S�i���&2t���q��s&i��.�Ym��n
�<����i#S5�P?���N��!��
 �����lj���Iq���X?u�F��h�O!����XG9���Y�<q�zv�4V����kJ�$y�4���H�3������,��@�{����2yP�u�y��GG]�3�b!�v����T�)�W������	���Gh���2�$K�Vy2�+�Q��@E%^g���\�I���n�l������xlP�Y�3��U����9#��P5Qq
2����\"�Io�����e�d��G?A�I�����Bb�����h�8���$���3�E�}���y���O����b��P���S���D��������%���uT��^bc�]����R��O�/$���x�h6T���������z��v3��|�0m��'\���-+%��
�����16��t�=� c�Q����~%�.�-A9NyY�p���}3�������Iu"7,c�L��S=������tbnF|�-^�����f$@��zdw��o{��}��5u��g"*9q��~N�G��� j�CF���j�]��I�v��3Z&qB���2��I�`��@���Z���B�����M�p0[��h0�&�����SO��wjQ����y���3��D��c�w=p?���#�\��;>N}g$2�JH�j�F�	�@�|�ozif��H�����V�w�x���&����9��� 
����fmG6�	!���v�0��3&!(+���uU��3t%6�#&����@��V�`�!�&��"V����m�zLpH"��E����nv��B�t�����LF#�"��(&����3	o���-�;#t���<��\3��9������f4@�s.�u�%@^���2��dq<OM�����3*����=�f�u��enS��6T���H��	�17J �n�'�[�v�~���@8g�����L$8�����k&R�����	Tam��Y���>1��<r���tP�E��ymn���jg$]5XwIN���/W���f�������
���.f��7{A�����
��I���I�v���y���k���Pb�W�2�pF���#��z�m�^�"~q����Pw���wa�s������H�u��lX��mH��+	�%���,���V2G�.K��N^e���r\N�TC2�,(1r-��m��H��-b�.Em���(�L��0���HC���}f3� uA A���&Nu�79�ka�����j��cX��O�Q�E���s#���^W\����X�a�N�cq������uy�b��� t#f����:K@�G'��R=s���eaR����zi j�/=�;��KgW��Qi��_��KVe����r�i���j�N��)������ss�5�h�Sw��qF^e��}GY����Q16�5�<������ ���0�ub��t�`""������a;�nMEF4����0#��
������w�wRg��������������fn�a ����KSS�����z4�!�sK�p/��el)aF	���[��b���o&��8�X�-R�k	�H<]�*,o�����\L(��S<� ����Tz�����9����YQ���.%�����tu�J��	�M�#��C������<B�������%�
����RYu���}f���I�74��U�
��T�����4�a�%�������A���2�J9�U)G�G����H��6=2��{W4@����]=��7#�����;h�-J��4��h��AR6��L|=����=����M��-80k�b�j�2����3b����/u���q7�.��<����[s_���GR�"��|��l~E���?�������f�B�9.����������}[��v"�6f�G��m#G������#���������i2i���BN������gZ��o4��=����Gq��l���������}���q��[��+��T�����d��tdfvFR�-����mv&Cu��&YC���!�C��v���YGjgA���"�D���M�RS�j�X7:ac���*S&�<q0�����&5[��"�\LVS&p�)�5���2��g�d	M��*['������e;c;z*�D���{2d}���w����5�a��6������Z,�f�������������?[�g=���z��
Uw�xDF��( �GO5,q�g��j0H�4�2���M�;�"��G\��pw_
;�uF���'pfE;�9����vO�������;L�eql��-�wE��t��2���)���mUN"�O��~���O�
��A�g�D�6�l�cu�6��
DYA2��P����q��`2��>���YYe����k���g"2����r�8�h"��
R��j5n+��(��$
�&MD:�a������Y��d/��?�)�b��j��A�EH��m���Z��q���R�k����c�
)���X�DM�:���$��&��?���i8q&��8��t=�=��@�Yv�'���,(��
���Hx� 1��Q��)�ee����m����:��'�l��IX����j�`I(��F�K0����R�?}\HH��>5�M������=m'���D_��u������E_g�?":���Yfdn�{n�V��!)����a��y�%�g�L`��'�3(B�����)�;�����[V��������'DPH��=�h����L�YE<%�G�m��Z����7�~>�	�z=8U��>�rF	�#k�P�q�?��#���G&Cf�y`��;� �LDw4�X����}��C�E
��	�
��/��U���e�����;���?+������c�����8f4��MP����.3YzhD�i��:$Pq
q���&Ig4�����)_A���|Y6��������2���O�9��x	O
,tM�������+�����_�x���BI\-~2d�=
�����L�
|2��p�[�����MK��6_C�P�	��Oz�������
@�D���M6����~����z��������CN�DD����M�r�u��y���?�p����?��wF�*'���Md_�p���:�&�L6�_�(��vt�JV����9�)^fQN4��)�F?y���D\���}������DF�c<�}��=]3 �&S�I`�]�(�5Bpy��S#*B,z:|.y�[������X��*k�7a���K�b��d��$tB��v�����N����������*NR�y!�9�m��a����`��X��5���1N0��/fo~p��P����R3%�E����	1
��%��*Y\'Uw`����m6m�y����M��7Q��@��b`�5��������6_���\��_T�r����0��LH��Y�]�.L������C�o
6�7C�:����4���g�J]�,(�$���������Z��k;b%C�u<9����|)N _��d9!UZ��26���k�A6���"5DU�x?�<#��rb����r����VRN=�(0l
��E��{��1~'�+m�h���,<�l��8��	�W�:!��O�K���<�02<g�����X6��:�����	��v��p�L!f&���N��v�l3�%�F��������3){I�
����&����#k]@56���<�ia��/4������Lo�>5^!�qO`�`��KF��P�ewjb�v=9�QH�E�(*�R!3�'@�pl����T��CbB�>;���Jn_���p���a��}�<�(�K���������V�WQ�
�W������9�zpQ��1�N(���4����J���!ex^�h>�	�D*���[k,�b_��+9�_*jH�u�F����'��5Ff�L�D"��ywNV&��y�[��j��;Y��S�.��h�M���B~�Q����|�x�F���	]C!�R�i`�f<fe�'T�����,]�W��#b�P�.}�����Xe��0OC�-�<���b1U� &�����������~W��??!��gEl����1�����
�Lw�Dnn�HWq\Q5]/�GQ���gY��o<�I E�$Bu���\�D��#Wdi�$��;#�32�����'�M� �����t�������^��j��W��QQ�
��dk	�*����� E�/!���W�`���u�C����G|�?	`0q5�t�� ����$m�	%0L�[�d��YH�������KpBA����Mu���k@�;�OY���=��t4~�RI��H#���"�7���k"qk�f�*s-�$ �����|�3���G�������r���X�	�;����7$;p�Nu�5������F	�'e��q\�0��X�ajoLH���f�vB	@�o������
�~\���Z?���T����x]E.`���{�8���	Ht@>	�w'��D�'D�['\ZS>�6���]dq���t�	@F�����q�����F!v��9�32K�Cf�D�v���v��q`z���?5Y���lQ����2��u��`���i��_$�\	��s�>�E����[���0�.����96�l�
m��
��b�wE�&R+���>M$�l���Wd���3�WI1$��ru5�lCYX����!�I��g�E��,�4���� �����P�}t�CMT���g&-Uf�E�����(��
b�y�ig��z����"���q�a�����8vH�����U�2��ro�99	����R�����a��.�8f�����#y6��P�x����1�-����rt�MS���NC��
��n]��OKl4������@��3�bJ�r��sU�������Y���������`M�f�}}/�_���c��EF��z�����^��"�OD�.�7��&�l������gRh"�s@���Zo�mO�]�s���_v���qe����qY�ak�!���L ��aX�w����`����
w����� �_]~�����S����F�����0Q$�����"4�����aH��@�)��EO�����"nD���v���8#����:�8F�	�8s���bV�k13�G���R�����L(��-]�r1�������'6�:��'TP���mk����@��w��)�/��4:���
��-�s��@Y�����(h@C��UBR?�� 1����gn����6h�d1�4��������:u�fJOp���}or�����L�!�9���`�J5A|�v�p�~G2�P�l�F�I�/�;�� @?�bJy���h����8	?����Y��o&�67;�
���HD(��{��]U�pR���dBM]41�	Sq�[��@�u0���/�UY��%��;�8�������GC�)������W���@>2�����DS�Ce��������\DLY������2���X��f9�,�WOyL&�v.jL�����9:]������IP�������=�{*�~9B��BV������an<�w!��)&k��\Q s4��)Z��g�6�*����6	�������4|~�G�+�[&��P���Qq����3�f@���!�M����&L���yH���$*��� ����f�&��l��##}s���i�!�W/������F�����������4��������b��A�tx��M
f�(�3a���Q��M*1�,Vs����F��8`3�h=��G��a~ID%��z�A���~>�����S�C�v.%i�v��)�';>6�L;y	����^������+G�����ivU��d1a�P,����P�����y�prh��5*����#>!�S/�����7��3	���Ar��������6kv[�
Dd����}W�������d���WS�v��vp4�"-�inW'���8R�aE.��;"�A��AYX�0�],|���,N���&Oi�OL?������L<�J����M�R
@�S!nY����#i&C�m�C���5�����V�m��g�����p�,�E"��"�v��P�����h\t�F�)�����h8���F����H��Ch����0�}�*j���wX��"�Q�\���L��{Xp
��m�W�X����#��lw��
"L�{P�����Y��
� ��>r�����������)��b�w3�3J@�����U��*����v&p?ny�q��E�YP\N�����m���/�8�!,'��
{V�/+�����@��{���L\��r�C��%���	v�.(�
x+�W{�v��<66�67���H�Cg��o�vL�(*��'�4������
GY�4�t�B4=aYY�P�@�M3"( ���.��3��X����QTw��~'�>����"��b ��;:$� �a���f3��|G��cr����,3Q �4��F_k�H�NvG�g�g��D"��Dw��	����d���6�VLj��a^Q%z^f���~"`S���L���G�b���l&�J��XT���E`{���\���(�ak��w�2�`�*<3m$9t���<��dC�"�pG����+qv�[���l_���
'��O@[nb�+���T+�!�LyEg}�����Hed�Q>�#���Y@�_��|4f����r�'�QK�����_r�4���k�9^���@�����������?�{�_~3n�����	��� ��/4]?����&�����'�@��L=mf��E�/� �VmL&b(�����j�/�#��B��Y���M��P1n�E�7�4�u����Q������n=�����7���c�R)�t0��t��G7�T�d����G����^5��t-�+f�H���3�{[7�lg��o-�n��a�4�7#�Y2���S$������Ph�*C9Z>z����������p�Qq�
I����u���
�|fR2�I�7
�(4CAhNV�������M{/��-�M7��6�LK�����U!(�8�(*�:
�D�	���(X�
��'r����2x4��z|w�q�)�"��gE���������Z/g������q�,,X�f��ocxd"��4�M|���
CE�wl@t��X���L�6��(c�]��=��K�.Y�?�F_��g&z�$ck���kfL��:�3�j���+q�>-��dn~'��D���� {`��"[�~�O�N�dY�Q2~~G�I5e.�qW??����-+s�s�V��{���JB�Kh���!�j�����=���-����~$ft�zd��V?(�K���tC?���-��X�K�;��@�$Q�5(�mO*�/I�\�~y��������V�G�����_��5������	����^6������?|������?�l�l?�k������`~����[u9�Qb�-���JO.q<S�����TBR�����$�#e����������$�����]��LR4��1��.���tY5)�o����D2d�>m��8r���������	�,���&�7��26S����F�6��5�
�����sr�a���^�wFH"+"6>J����wE#5��D'2B�C�r�L��<�Q9+K(p���E5�#�=�5]X���d2q�����9d,3���
�Q���
�|�3�&y:X�O����	�#;3*����� pgC��x����3�H�
��!�����R�"o;�q�`��!3]��X�����_$>9s	�H��=�Wm��$4],��F�`���V�����_�S����]��>W�2�9���3#Q)���9����.f���3��"#����#������t".��6|bm���K��7��ES:��x�A"s�hM'4���Q����Y�H	�)��5e2�hN'$	��Z�d������TN�T���`I/��jJ��GS:���!�"@�v�)��x;�v����f8_E%SS���I�\r��Q�&R"�5��w�9�����k:v������`LT*���l5������������f2^�v�!EVs��-��:7Sj���Y
2M�E+��4��YK��'�^��tBH���$[n�9��0io�32�
�tB�T���5m������%8k
��%SA���C�-����M��*nK]SaL'�Fv�Y��9����tB�E������l�a>�\rq,��	1iv����ND�9�,�f:�iF?��,���
�E�Q������ �M�Q����z/���]���n3��%��D
�S_=_����&0^��Q����hU8UnTMhU']�5r&P��X�q0Y�*��F�����5����fuB�����BroP������gv �Z�Y%*nXO�q4��X�
�uF`v��U��z���zVu����`WO�i3�z�<�`T'2����bM��L�|?�t����y�N���jb/\u�1�A�d������f�`�����nQz�nP,��=5�=�*���#CB�]���~�Z>����u�g%H�mfM�k����3���G[WS�i�oQREH�M�	�mX�����.���Ko�����f2:�9�$�r����{�&r�d�{U�%)���6p�E]�����
��*��_��Z�����I����"@��`oy}�?��� ��L��I�'5��0{�&�$�����oj�a�'(�������^[��mG�.�\�����qC�4��������N����??�lge���$���)�� ����bF#7_�4�b"�Gc	����	��?���UKtx���zDK�/M��q�$������� �	1y����*x���g����H�2�!w�����5�!)��>��w� o

v�re��c]S8F�H*]�\������W%4�v����/c��c��C��}=E���Q(t�0`�v��j�����e��F��;�1xU�7��I�
1���9Z:����Kzn����Z��2��\��V���3U6�i�}(�U7��6���mI6/�1�O�oM�U����Er��a���9�,��������O2�����X:�p��?jH���W�9J�����k��ndo�>��Y`"��e+�s�88��OGZ�$��@�1���ca
���"�Hn6��s]_H#�f�����H�{�<����KG����U4-��Z��LD�zEy#m��������$�Z��3��R������R$K?
�OR_7=m����i�Q�> ����X���[��$��%&��G���
�����s�yb�[�#��yQ�&����v�2������!���d�L3-za��*Z4Q
����c�t!U[��a�������M@h�N�j�[6`�%����9Sc����i4��S�)����p�,�NC�}Fg-#t��|GM�2�h������_Qp#�A�E�8z�H�(3]q�D��7�����Bh����	3��	p7����>oD�42_4�n��{��,tc
�G��0���	{D[
�����H=<+v�B��l"k��>�Z���>�S�q���h��$D�R���~���&)S\-�|%����;�,�9<�B��FD��D�0/�V������PH�1��,qZ%K�������'w�e�fX6�%T�oq�
Q��Y� �@�!D��H�9��Zs)|���1<cP&�
(�c,������G�sTe�$=�A'�#d�z�)�����u��~�L�[��A�(�Qkn���#��>3�� Kz�t}la�-ICQ��Y;���4���ek���>�(�9*]r�o�l�+��9��,�����a7�������������c���i'�c���o��[�^����/�%?���lwn�i���;��X�>��)7��C���y����y��4Y���H�i,���gx���!�n�$���
�����L���Q^�LK��Lu���~<E�_z�-�Sf
�#��=g���|���..�����H+�D��v'�����`�0�L��<Bg���������o����UL?��-��7��b{r,%T��<��%�
�nz�zf3������-��`l��/RdT����C9,]H����H���&�M���-;s�=��RC�c�������L��[�WOyj�#:��It[��)�=,/��g��Zcc����	iDwy�T�~������t��>c���������H<7���f��9���@�O�l�ooY�����o ���.�n�n�g[T�i
B!ib��Q�wY>�@y[������*Z�X���L�l��H��5f]9�k�~����=���-�D>��z]p'<)E5��B5��8�nu�3%��I`]���_2�u���`z01~�a'7��2sx�b�`����mv��g�)��G���3����Y��=���3�IPL��j�����
��������O��9�o��n�d{Y��!��U�i�Mu���Tb!����<�L_H����
��ck�))�_��K�9�A/�M��Z�0����	1+;e��5����J����z)�`�0��zUp�]]�I��]stH�O���%�������x�^��:J�`|\���p�QJ����-C���\�Db�����uM>(������$�{]K������o��8�,@\��lOcJ<���D���
c�7�����8t[J!l<�����]�}D���3f�>�t<�i��Rp��u������X��4��s��=X>o6,�Y��w�Y����K���%�������u������L�'U�� ��2C���X|���oA�X�]48�	���7�D�����J�����W�)�/����!�)�j9ey2��,�f�x������;��<��c��0�LI�\�$�x�]#��I�m|[�N����M���A���0)���2|�����4��.7�	���ZlS��PX�_n+�N�&�;���ZB0L�-�6R�w�r��(p5����mW��	�����U�a,HHt�
aU!��zGYka�-@so���
\�.R�S
,��k~�&&rM��K��)[����^J�g[~���<l������/��N��=��Q�
gQ2�2��nfQ��*�Z�_2Y�0_!��FH�f�����2~���F^��5LVF��3w�2�����%�`}���Jnj��{�����o���\W<��.������?�z����F`���~�X��x��i���4�����-�`�R�F����xj��������s	�O�,����-����
jw�E|�����E3,�H^�p����!<�K%���������}���6����Go�3����p}g"\��q-Y�j���	���W��ol��������)O�����N�������z��;�z���1/��\V1]����]g��b\>�;_��.����.k����b����k�,[>�e��}+���^V�����zyk��Rk����Z��.����._W�|]��Qj
b����{�����R�Y*�\>��T����W��~R\�D�]�W�V�_�������:�t]������s+�!������~���z����tb�>K�QL�k��^��:�u������������������8��#�����AGi.�Y�FCL���-�l-y1��Y��ty+v ���|oo=�R������k�V�n�Z7�V�J��D1�r�b~���3�|}���~�
�b���1_����_w[�X��������?C�����!��n�����^�����_X�b��z��b�������?C���Ra��������Z���
����	�oo�W}���^u1��y�����UcoZW����\u/��q�����U�bo�V}���Zu-��i�����U�boZV����Xu+��a����~U�bo�U}���Vu)��Y����^e��aO���;~5(�j� �������"��8���my8q�~��o�|[/_� �����T��q����/D8q={�P��Y�?{�g-������d�#q���}
�(e[AM��'?}-7�~9��dQ�#"���
���D�y����(}�C�}�_� ����L�'����_T����q�(����v�w'�gu"9M>���gq�C7`�QH�����I�����/TS��'I#<�,���i���$k��D�u���E��ZL�������y�.�DP�\��G��j7��,�z������U&Q�[J�-W{�g�#�2U�	yt]��wp;�&V����<^�S$MW6o�����`�q��y]9u2��y����k�#�N;��s@�@��V*����O��N%��ga�P����RY2���������C��������M"J}aI����/[��.J^;	��������<��:?�Ih,N.��F���XF�L&G�w���d^��L�1q�e6�&#�&����@:��0i+%
����,����d
���8�W+
���9���M�x�h��5I�"r����~:��)���-&�QX`?
�����*�
������O������
���������������S,Av��"?)c}���E@c����C�gs{)���/fUM�t�����`i3H����Y	�]��54q��nEF���XALQ������Xo���l-�QD,�`��h���E��QT0��U�����U*�4��L�4����."�V��m�>u������i��#�"��_TW�jM����Y\��I��/����Qe;�Nd�o�4Y�Ajhq�m(��z4yl�w<#����`����;� �2y<��eB+#r2�1�|�aB�����E3yv�q<��L�"���L��<Y�F�x�_���������h�<��D��"�aC���R���6��e���Bi��c���i��*��t�Eu�.x�"{LD��yC�:�������gI�L�����W�^l��UF��I�(��}L��Z_�;���L�\e�����O��P-Om)n'!C�x�*�d�����0��u���'
�=6�s�Vd����:9�S�z-��NB��M�I���d	41 P��e������_db���rk���z�LR�����������v��M���v�1T��_/�/��T��
��W
�)��-�3R�O��G���R�wn��$��;�M'���`�2�\�bu�v���h����+d!r�/�x�;��-3�'Dh���Z|�-7\��3
.�`���&7.{��L�������`�!����0z5��
��B��D�����yu
��h������71��Q^q�b�O�E���X-�~q����m}:#E{���?/b���;���c:�^I��TyZG�e��-x�?����P��D�������a��Q�&�qo����^�k�N�NT=�?�T���d���$�k�5c������+ZL�C���/r�~�)=�Y��b��;S��xCx����d��?a&�o��������>D�u��l��b*X����B���sw�P�c�I�P���O��&��]���`K���#D�a��K�&���KE�O�3d�w��y�T0�[���}`���=���'��*��q���;���+\Z@�2���T#K�-�=�����Q29�����>�����H����|r�3G��A��$�}��H~��z:-�\�d"��<�Q�{\��(���)FE^���HC�4h���$?�0�I�5BB�V���<\�R�Z+��0�GX��1��-h�Y�i�yf[
���������������7���.�@�v`��`�M�@����#�z��y��4E��E�_�|av���P K�|��%�o�5f0��������D����1���J"��e���
\�i�0��l���j�����H�&k�{	�����d��`i~Of��D������������T��%j��y�A]2y��vSLG������L��3�����R��8��hZ�����`l�����m\�w��<-3(�?�aX</2�Y�LL���d��$#��,�
2/���.�>Y�I5u*���P/�i"sd���2���=�����G&6��a���f%�-AV���#ry�j@�ZZ$MSn���>�J��.�
I��<���-M������P�j��2m�tl ;�}�&�~7�
y�ru�%P�2��Y�3�X�YZ�8�S�l��B�75�����p4V��1q���	��d��@K#4}�4r���]�XNL������y��&����v_�"K��c���&^��N���T�r��/����"J���d)�n��`�T����c�*���s;��Q�C�=�%����	A�c��9���/��E���b�LRl��E���)��	$��������~�iW���1�nd�w�|n�����?O@�@�7D���6�l`�9�{���������h��D�]��|;CFeI�u�i:�o@V��b��������dqd���KoId���Q��|���~�qp��	���0}�oW�hz����O�?/���M\F&s��<��������~����W�"2��O�:����������D}��@�Z8������>M��tS��K�V�������o���m���o����l������J�x #j2�KGcV���c�\�������� �&f�_h��qh�E>�W��'���u�1�.�*��"�p���Y�\�I��mO�OGZ�beQA�0��O����{������Y>����^,k��wo*���
��//�d�+?�><lu'"#���k!��q�[#REXIbo|f{��Z�-xa�y|x���c9���d��n�_H?��;���`��(�j���a�?h�N���_����/$5���.�P�-����z?f�;Z����\� |*��D��WS�:����r�F��\���������5�������f��p5��!�����x�%�P�.ny���%��0��
����q7`
|�H�q�x,�BE*_�=G+,�{��mI��Vr�T�F�p3��f1�0s�>q��Z�n���~���S�i�dS%E��k��*�oDK0!��M���)�v(FG��d�@���g��%4F�4���YrT~��oU�G]�C��l����U��y����c&�J�4���J�����:U=�M"n�q@HGcCn�,�
�o��0W�hl�g�
�nov��x�H��S��g-�������<�,��	�����0���
�XR>p�`$�y#z�e%(���pQ�)�BS�<�-��*�~�"�h6g���{)7��.cY�8���� �D���o}��
Dd�Qf.K�M����{���>������
T���������g�,B��N�+�x!�a]��v��sw��P����k�yxKjG����?����Po��i����h�X�|���/�fa��f�z��O"�����9�k�Qm�}8x4�F�C�����b
�7<&�e[��	ds6|]�|><H�U���j���b�21tW�7���c���,����X��_=q>��
�i���t��
�����A�Gh�4�?�K��F�>C�t7��/n`������8���Z:�?�st�a��mh	Vn:�vO+kd��������m �7;����3��DDpN������e;���(8��!��TG�	8��������$������4��(�
�v�6�R"��fr{��6��r�x�����JG6��J6^����sc�����(��g0���FDfW`��P�V*�i��t��G+-��hE�Q�0ZiD������������9�\>�~��G�/�Yt��w%��sb��]C"����y�y^��FCRlc�����u$�
�z"z>9���]E?���<x�g�[���]G�������!F���{��0�W��:��}�T�
2��h��!�j�#�)@D��#o���

���al���i^����t�e����	np"F����[D�cx����m�0���TI�����~�H�j��^n)�����-���(����3-�������{�(lK1���>9�u�bx�)�f�}l@��#���u����y��@D�SP
}��bxd�T��7�{���kh��� ^�_����c���E���~rQ����E���'��Xn�#����|�����E^����~�
�s�l�~%�LI6�@u2��(9��&�@���:���<�o)��u�-�s�x��@�]6��g��l��s4������G-��&*�9�S��Ddi�K"\:��	pcz>
p�'1:��l�7���R��?�/j��OyG7������}�*�Y�[02��{�B��E��t���E�Q���O��9W�	�e^s0�Wj��/�����o5����)X�
������X�_��|H%r�I�1w����E��R4\�n��T{L�!�B��a�����d���K��#d,~Y�[tb1�x��d���0{P���/�1�U����,o�q
�fQ�(��F�}�M���Bb��>�����t�����b�
iL��m�����*Z2����D��w"�����>�8�}�q��2pW��`%Z��o�S�����,�Bp��#]����v�{eG�$�M*D��~��^�����r�;xZ�Jda��_�&^�H���}:�Ap�r�]�+����Q�^,>M�����O��G�e\V��M#����H�����M�
z��P������E�;�N.��n8�;"�DK�
��B���l��u[S�
�e��/�9O�W��R���*�nmr�L7�-��){��Y7���8��C+p�2?	|//$��hD-��}��B�UX4`�)�{3� ��vZI�Nv�����_�6M�_�6���m���z��/��]��Vd��$���X���]i
Y��nWt�z��vE?�M{��sb����%����T4����v���-Ps���e�H@X=Y��=��jE,=oHd_	`�L��
5"����������De{������L���b
<|f�c��CG������V�v/_A�G�n�@>l����K	���1i�K\������/h��\w	Xmi��JQD���|y���������T���vF�w����-uw�M���N~�����������I�5�(��X���b��J��_J��4��{t����.��;�z������W�)�!�#�h�j�o�H�{e�j'#\$"'���7�
���yjP4���������a3}#Rz_LHy�u^8Tg;yH�����Y�6�q�yX^� �����l����W����c����Gx�[��P�3�c�0-z3�GeJ�CTo��
6i�o�as�
�>2��i�����q�P#Z<�d!]������q� �R��w������Zk�z�x��<��rhy39���o�Fhnc�7���"��52�m��p��gV���L=ej��������8�)���� /���6�)��PV~#�+����|!�iFIk?����q����iU��:�Zp����WVV
�/�����[�|�		��m[dBb��u4����mS��:�,��!U�.��*Q��i�;�Fbs@/4��VL��q���8"�0�-:�GR^7�� Z2.��pC��5���V���T4�w�,/&`�U�t�F^�~��s�{�&6�u�g��vU[���mL��[�{��hI�3@MaF�����BX;ve�����j�9X��(F�3#������N;��F��-M9Gk.^Dd���^�8���q�(y�.��1o),hG�s-|�KzY��<�4l�3�B��Y��B�i�Z
���a�2u$/�)��c�!�rNf��I�����<�����{�"|\}�c`Ko��;ZA�]8V3����P����Z�D������t��'��t�~(��L��E�:*@�v�C����v��C�I��|��
��~��	��gz�25���hJ3���ak#"V�q��T�����ec����s�
���_H���/���W�DZ��i;��m����J���XQD���D^�RM�vy���u�i�����@Vk���������x��5�6&"�,o�����}��O��5
���@xzOG	 "�<��\T����D���,��"�'�D�Y�i�3�:���`g��m�E���_L���H��S��:I2���dg�J�6@&��G�����U"��
T�J`�#���FD���'g@$o�Y�%��(��iRQ8Y
n�D%"��m��<�*���e�n�{�h	�������'�`
	�$���e�M����F��(�v��]f�.��z(Qh���}���o�E��4��|�_�>Y%]��P&��3����&VM���c}�:���A8�x�Y�V���D�j���tp&�� �#�T���2���f�Xa�N�����E�,���Bw�O�H�g����+��eR�H+�L��k`�
�n�C���-��3��t�l;����64}�i��
�h���!h�Yd
�4<��kni������m��F��K1���$�K'@I���AD��0�xV+��q��u.$��1�c�����	w��D>0���g��|��~e�����H@�m����d	���T)�a�X��{�s2}��H����
��+����FK ���`*'�B�x�
Vw�2�����c#m���6|�q,�c��F|p���B��j�L{����|��6�63�������/'P�����<Y�X�[���D���F�MZ4BGta��_>D�z�m���;�"��@���|NGz�q'>b����\��]��o���e�]<��Q��8�F4�
�1��sKc#!��Y`�79X"���6�����H"�Z���DA����M�
���w��0C��b�|c>hP�:�j��|
a��T��cWa�����1�2j�o�Q���51j������&��nS�8Q���S�w�y#v��e����<�g
��ZKKF�������Y�Vkc����P�y��6P�drv7�����>�Ohev�+,�a��J�g>�u���d�q���������X�)8.�����(��l�6N�V>l����H\�l8�Z���W�7��6����ew�$�"�08M`zY�~������y�A���!��<��j����V����#���L.a1�����l�$g����=@��S��������T�KN�P~�L�-0M���O��L�y�&�#q	I=Z�	@��?7�������E�E�9P3Z���-�S<�o2�Ks�u���2��V2y�3L��1�.2�1�o�*�>%��l.:?��TahU��n6|�d���n{&s�t$!k.z���\P��(��%�{d�:V�1m#Z�aM;F
M��)��u���(w���Xr����w�y�)S��.#�	���F:0�B^��=!�
3Q��y�,��T�-.���A���|���AZ�"/ED����V�^��%��~6��+S5 ���d�7��1��\���P��bw!�S:�`Q���_A:.:�Em���8<�����++���l�8c��|��'�Q�^���VK8��XH/��N�A��O��z���:Ax���I�js%�k����T���F����#��M[������d����2C�&���x�|�(�^��7����b_�<v.-9�Q����I^��WtD��oH���`P��7��m��	9}���=E5lZaR����ep�G��s�����cDs�=G������J�'[��rR������Kv'��,�T�66UL�s%������|>���&��H.w�J�tO��=�]cy�i�<�L�)Z,;V���&�������;�(p�Y��X����N��h����~^������1~����&Ve�Msd�!�d����e}=����s����5���
%`���{���bN����V2un2���mi�~�O�c��Z��O����l ��f���)mDd~nK�mIG	���S�fSB3�iQ�lSo���yZ�� �X�,i��Sgy�i���B�W7c����z�����������%mH���%�����6$u���m�/�Rc
���Vk\fI���%�l�$,iG�j��`����b��^���,�-(��-�o"K��������0��\}�&�|$0�d6?��`��f��r�k2����f���\����3c��j����Mo��j7-�R���MVf����i�_��4������\���_��8~2��4M��o�i �?"���0��$7N��~���8d`�
�0j�w�Q����&4�
��.d��F)�@�b�&1�2���{����=���L������"��QQ9E�&�f��z�����l$e����2�
�L#��Zi$e(��Q�i��l�Y��GR��8e�n�Sh�$*��E|<���o�3�����#*T W=�,|SA��ha
���GKVG�7J`��I�����]�Td_>�=:�k����c�%��+��P2�����(VAA�l�lBY�����4��cuCI�|����w,�GSfu�W��c�#K��HUf]lc_>����v�w�x�����}�QFS�|\$aC���8,���l��G�����/
�xn({X����jH+�=���[���K7!���r���c6�R�����y/�i9-,�~��-/�s,��HJD��;��� �*�XR��M��2�r��@�^��`�I�O.�9tL�	��q��a�������B�|�����u��D��v��o�7K`r���;c�	J�V�
��O�[���RH%`}%fl�Xz�b0uG�c"q���=T)�������,��4{�������;��95������"�HW�����f(?�������o���&�e�>�FB��������*� �����E����P���slh�t��=Z�d��~q�!^$J�3������$:�i	o?=!:������\+��CH�H��
�[��f�JQ�����\wS�R��'Z�i�;BI�m�.f�m�yZ������k�������*n��Q�N[�[]g�uo�������|���n���m9�������'�p�"�#����xm�+����l;����&����X��l�'�'C_<V��[��������_h�j�Q�Y2Owq�9w��J�����{o��r��Y�?�{_:�a8�������-�*(��	 ]��M�6�I�cjf	��-�6���������]Z���k9�18����L�4�.`/3�Fb����D�@���<����p/���Fb��~{�����b��ro���v�������j/���nWH�r[��fd;�R�9����7����6��|8pc@E����l�j$���juq�g�������!�����I��.zzZ�^W�DLS+����U�%�vIU+�q���}�IWO����[����>�\���VL%:t��"]@-/��\W+�q�ij�?_��4���}�y�ij�P�OC��O2���H���*���|n��LAE�����C
���7����1/��5o�	��2�^����K�f� ��BG	��2��������lrH"�|�(&���L�{'�%��(g�����X��Vq6��)"!�I�,/��5&����Y��)"!Ls|��3� ���}��k�n��S�$����vZl��C�j���y���'��4*�3k*��Vyv{
���������T��4?�#���E���n`_r=m����J��������1���s+��g������v�+���	A���M�ha��U�uu�v�u7������f=�{�t������U�������u�����u��]���C��%�N���\���}�����\�}���O.�>k��'|��������Z������oe����g���|������~��_��������_5:��V���Z:�d�SK��M|j���F�Z������_��Wm����?.?%�����c�\����c-d�����|���������_��"��=?�17� ����Fv����?����_����������������A�O���e�4�������~3�����Oy0�(����m\�d��i���	�L����n�Mwm�9��?4,R%(��u7Yz���K�H7&�l	o�1�Kf�z�o4~������c����/��5O��m{�	���t�A��Z�&�(�y���#�&  Z��~���|��w~DIt����6_V����v��P�":��"��������!|�(u��$Lny��$bf��
��v{�sB��5&@��r=7���<�o�%P�E���8��JkH�uI�Z�u��P�JD�#B��m����K��c������G$���w'KV;�5��
	����������Y��P����5����o2k����Cy���e?�]�kCp��o@�.Y��O
"�h2>V#���%���������Y����|�������}�#����{�1�H ��x.�,���S�c'�:�%�y}
f��m�O'���v`�_���DK�a�[�����wRd=o��Gx3�����
��h���E���Ye�'�&�T�G���/T�vA�^}��'�����]��\|cl�z!}����j�����]/4l���	:��nJ��)^L����N�F�*�Jv�{���2����81	��(�;���1Z����/4��(�O!�b<STG�������0������i�����������N�Ku�/��?��:��R�C�ua�����nm��-���?��������U��(�w������>�X�W���C��S=H��$V�2�������,R�B���4��.�K���|��
Pm�v/�/�������q����M ������P��u��	���Fw4���q
_�`�E���He���L�E:Z��A<��Lv�h����V;>�%X�t� ��APs<�������IA���e�������$�T�n:W���_�F����9�+IO:�w.YhdQ���nD��:��@14�GN����.��"��z�"j_f��!Z�M���j���F��i�F5�;�sAh���5�@�}m����q_���Gh!#��:��1���%��BGFs�lc.z�1�u~�=$YV�����/;���5���!���E;��������w�$9����R��<o����!]1hJ�c�FD�5u�03�����hI���\<O���MH���2�C��YGx���t��oM�<���D�3��$_�[��������M|]L�v�6iha�>�������w�k�X����?2�
��=��t'_�DC�o�����P�v$��-��*S���8n��_#!3�wY�B�}^L��1�D��;�`��e��[���X�����$������=��l�^��`�q�{
]��y���	���b\�h�rA���xPB�������$k���a������M`�W��~3]K"r��Q��>�+{�� ;��|��i�!���b�����\G�X�����,�@7iX������*X-LS�B?���y�83b������Rt���}DG6���_	��sI��hG	���v��������TQ����Lh�����	��\��qO�k���#�C3R��|�0"�GA�JZ�����B>����WGh��.;�;�n��M��e���D�3!t�pN��i����I@E%a��'��A#*_�����t���e"p���;�H�Z>��2�|����fs�;Z]��QH������t7��0k��,���L^"�z��JD��F����>�f���:*@�n������~;1��h25p{���Q�E��TE�$���B�L���%3s�I�U��Ne�N�:��z��{�8-kS��BP��L1��w��J���7`��TI�vE�t�!1=Bp��a���)���)Ue����
���;*�j�[���	8q
���5���z}���]U�$���82���Jr=�<�LE�������c�����F>ml����RC���L1�q{����!�,v��
�W�gB<�'�>�a$d���x��<������F���@Bk6�)������������Z�i�%����3����
��D�_���S���Y��(Hjd���'�1���LsBv7��vG�2��L� ���@����${������=��;��:�gF;a��������r����.����hf��H�;2�V����������u�Y��s�^��'�������;pUw��zy�������s����w����3�ff���Qd����,uv6���@fgA���[��F����2J�Z��0:ia�#�)S%b��?����&�>�e��s���������>)����	�X��I�54m����v�MZ=GT�6�������Y[����l��s�	�����S>v�����VL�V����b��x��3�U�x��zN�9<����-�t�[e "2�����b/�)0�RI����	,��	`�O
<���-M�8uG��x��
��93Ij������h�?G����	i��`��l ��c��>o$uf�eX��� ,MY%"���F8�+���u��I�[b?{{����$��<^��{rS�L x�
8��Dg��o��;	8Tp�sTa�������3^��$��D�Nb����V+���[(�����:��\(6E��Q4��T�6���wI`p;L'"�t��epy�FR�%P�E\���	����Fwy�=r�6w�*��R�4��x���j��@�����N��}��!���%��'�'�D�s�����rh	6��z,�L`���J���������[�LdY��Y�Z������X+Qy�H�}�w
8����GOb�qZ��KE�|�(��4*����uj�K���~� ���V>��n/[f0�WVO4�d_E�������/�w���zP���N��u�:m0�"#��H����_Vt��)
��gbo�����L�B��������!���f�j��s������u��J��q�h���Y������F�x�������^(��B�^t���?�B��^I��Nb������S���l8S����9:Q��Q	�"��l���,��(k(K�TX�������Y6a"�oHN6�%��B�z�>\���Q��u��_�`����KG*�O�F$>��C-��MX�&�'41I�B.�L����3�	:���L0�d��p�����1t�p���#�9� ��J`���n��H�f,�0�g�?/"��Q�v�������/"�6C�^�����MKTw�1?*]���v���Q)[�����	�gbz:6_dC�nd3��@�CU^H���l#��
�\��Y0i�r�F'"?>/�q�+�_(�$�'�����������?U��Y����X;
�z���e"_���4�&�����x�eE�Q	MS�7����5"���X���o�&�1���r`M�	(��RmX���*S�!8#p�P3Z�x�T}��}�%�x!�&�����k��oa��<TK�n��ej�������p�*�������C��Z���K7��K�wp�f�g��x����ZO4������R������am7�J�����D�`i��6��PVM:�TY����bR}���o�I�L���!~L���0�II�����;V]!O�i����~��������u$ /��yNnVOy!6*�^h����|��`J,�,�q��1[Z�B
l�R&�dGz�+���v��i�L�����:
���-��Y�����j�������>�46��*�E����'���LCH$��M���'�wCq.�(v����uo���s'6>�#�,nr��M#�[�7&�BW����K��~���mHe��Q�g�>@ }���)Q�W���6$�
�`��u(�_�SD��
m<���������x_{]���^Y`��+���+��h�����F|�M����^�Q�-6��p�� �N�kK�.|G��*
��EY&j�C����H�4������+�)4F�/�e4��f��C�6���R�X�4��#}N��I�c6y��(?h%j�T��$����!Y#RZ_�co���a���q��g��{����L:�����FHWI��il���b�(�%�6W���`�t���go6��n�����v��-I���d	�oAd�5,H�F����(=��\������������:d��:p����(u��pcGr:F,�P���u%If��������b(�Y�9�j1�+�i&��e�K{��N��M��huc@����k�hm�x��/���23�!���n0#�����b?#8�?=m0dX�o�(������w����/nztIS���o��,_HP!E��6E�\n��_����7r\�����WyIwKk2��arU6���8w������|qi���q�Q��w����,���[7B��Q�����|���Bvg��u<d�.6������G?���2�^�*�������w��*�d�F>:=���8�Q��Aub"t��Z�
BW�+����xcq��o�O	Yct�-t���B�7�v�0��I��)�x��i�f�/9,�����F�ov�F��T�#j���OQ���R^P��(���0
���8���F�����=�������{C�C�B\r�c'YV]�H�G������Y��sp ]�w'K�9��	��d/�[d���������U'�|��B�A����|�����%5�b�|�l�y�}���V�f�s��������e>�w�&����4$�;��b.��|������dI.��t'��x����2��I������k���!����(I^��;�$���
$���K��������kf��O����~H����Y�N3��[M��2�m*�<j���0H����>M��=�|�d��Re0�/�0[���J�JVG=�Hs��w)O���'���������$��h�I��;�z�,�a��;q�{����O[���6Q�E��p-�6o,4l$�z���2Nj ���Tyn�'0��cWfe=p���N�e�;p&�c�2Yr�����\���A+
8�jS��: ��l�_p��r���o",�u;�XV���a
f'��?���!�g���=I�u����;��U�R*-���j�<���:*H�yl�8��1��n�b�E_�7�'�Q���� �/S���@2��ZX�5�L�L2V3�����^z�������euc�
`;��FM1$��"/I�>����RD�M]&�L6�K'7�8���%M��v�:�`=�Nb$��c�9�ra��3���
���t1�h?	���3Z��I�p��OS���1�~Yn8��;f\������s4�M����^�|[�O�l��.$$5�w���/��W��j���'
$Q����c1����<4E4A�N{-bm��;r��I}��Jwv����u�Xr����;N����#
�	p�%)���1��I�IK"�z�-s�W��|7ujEs���������������M"7��$���	^y��)��!�Q���/:������8l:H���H���,3$��QcXGt�����G?�E��x��
R���B�6n$���M�N�����m���/���	�o�8!�3��������B�/�l�*-j&��fs�c<&M�����(�`������7eO}*i�$.�i?��
<?�x,Y<�����<�0+XRa~�e������,N���u�jV{���\�������$�{��|��x����R�,27���'��E2a�$���+w5��A�W�xpWo��j�}�>dD�o\�Q�8�pc����E��|�G�8M�t����r�3��y.�����A��������"��"���M[PV��-N��7�
$�V/���o�?�4"���� ���)j5�!WY>�������|G�v�i��%�>�1�&�!������n�kKJn?�0�9�nz��6�$����2?M��HUN��o�n:e�i$:@U[��P ��[9�|[G��9�����qs��Yo����"b[��V}���^���/OS���c�^�eRgz�\���B�;��La�@���@����E3��&sZH�u�)O4�Y�?��Em�]16��4b����as�L����;S�6`KT�tE08���@z41��1��Q�����5j=q�S�oK��hI&����)�%���waN@IE���F�t����l����a�A�����*U���"��,�	�
�������,j���$�������gg� �J�A���,���d{�#*���*���IS��X�OHC�p�0"^[*xC��/UL��@�c���onid��u�F��X��P_��a0'v�^�.�O�y��ZU�DY�b��`��CVu��|q?���L�(��Fs�i$��w������I�v���r�����S�~����K�P@��xtWR3m)��%^�B�]��J��#�f$C�y���~A�������cY���� ��BQf����~�'T��[T�j���,������F���fJ#���4���&�0��W'v�x����a,�l������rI��������|qa���b��a����M�"���Y��Ua
���a������C�$��P�_�,����WM�7o�ug�����Q�w4 �l{2��OS�H���zsp�A���}��b���b�i���q���W��L�A���Ps,�qR��h����$���FV�,�Z
��NQ6��Yud�����un�T��.�c�M�K'��.�/S�H�����G<f�&��
pG��L�ID�`	��
���`U��������c��S���$f�`���h4U6c;p����fG�6����dU��V�w9��0��n^���:���~E��[wX�P����nS7!�~'�T�I���� D���e	�
k+��N���k`��n�B�h���;;��Y��
��?�8����c���&��0��?UV�V�UM���as�
��P�$>;���Ng�%c���yo��>FC�c���������M\�|p3����`������G���"�;q�a%_�����,�e~�����L��A�{����})��S��%}�����W��|����;�8`��$j�������������'�n},�P�W7�������T�z�B�X�F�x��3��	G����<�wT��w�0�=+b�Y�Ax!E�JP��>��?�ThL7���$u@���?��@���"ao\�9�i)�%PX�i�6M����@����a��N;���0���������3��$>��b�q��cia���[�<�_e=��/X���3���!��E�(����1�O���n�c=���������������lCb ��O�wnG�"��x�,i�C����!��[Fv�����b��c��z
���b!����/�l�p����>�������w�a�y�a��l=��*�X��t6�
����S�y&o\����q�g��t��$*[�^��,
�������C�&F�iC��/�#�iC$�������=m����y�����������������_?]���������5����~�+DM����3�u������y���=�u�����K�7KE�	P5���y���(������pm��f��S>�3=y�&|�H^bR&j������
	��h8�@��,�.�l(�������
X�B��O�����l�/����c7��C���BP�k��\Wu��;�?� ���'�� �����>/��5��S.Je�d�8�HR�U��r�nO�����,3�w�������h�Z��s�e��H�^|eSCY�d�V����������+���D�F!�e��],=��F�+S1Lu�+���`�����N��L��������������H�v�A=#*�@TZ�E�f �c"3�^	TVw�(9G��e+�������n��wp
����1��,�����
_�$K�Z���|�#�ge�tzs{\��
%`��g�{��u��4�8�5��F�9p�^�M��	�Q�5=���B4�)�������lJ;������<j8����)E�sX����<�dO��Mv�#����AX7�JD��lG��h5�MfY
hI���o�+)��H�fF��(��������j��v�#:��V1W��q0��������)mDd
�%=��07���_M5L	����t�e���g�${���n3{�U~���lO;�j��d��J�����G��'�����)���g��ImDd�r��ZfX���Y��\.3��i9��K5�����]�Im
/�1�=�-jG	���{��".����?�1=3�aH���H��ZS����+r�����[p�V|��4��)wXec����[�d�����rW���KGZ�#��'N\�����{dkz2�_X�FD����)6kZQ���"����6�d���l�=�Hb�aO�	{���Kq2S��5-Hk_��4���iC���dMy�^��
y^����9���b�p���4�'=�����]f�P�<�7���
�c�M<p�U�LYm���x*��4��-���R ��n��6��E�n
��hG�L����+�$��QX����e����������,v��4��lm�	t�ly3���s�)�
|�HG���!�G#�������3�
�:��]6�
������t����u;`�[��3�G�f�t�P�N|z!p�����0_���F�S�b	&��� ;����!��d�!�W�M_�<�S���L������`��dfuP����ohh�W��v���_�l���%�l8���N�����4mj[t"#�RRd�+v��4�M���/b\7�w�T���h�LK�
`��}�������#O�x#Z�IVn
��Guma�-�fC��;
y�J,qgC�����v��&SU��O4w��koA�	���sa�����!�7s�O���~�_	h	&�:��	���w��F���.C9��y��@'�iD��d���yq��q��7��WI1����Y�;���m$���u�tS5����6��B&r
�z1�V�[B��52����XX4�zP,���D����#����Vg0t���?k��I�W�s�6!�G��A�^^���F��*���;��{\RC��>o4pN~��p2�������c�C���EN��FkEj���dE\�����4��
�)�X��74��[/�a����
@���9~^L�U�$����?���A����yOdX�������,��;y���M���2#��~;X2�
/�E�y��v���Yz��ot�M~�����������T��K�7�>o�d�J��hFC�:1��c����mL�tw���&?����Gf�q�d�=\��Q�8B#`�Ij����"�������
�f���������r7$�:r�Cf�O$��w�0I*�9�30m�a'i��+B���6'g��D��	B��$���%/cqq�4��d<�.��o�����#��~��	���nqe���8OQ���i�%�n�	V�1o�t����)`&��c���JG���j�����X:yg�D��I���P^�;d���� rF�U~��x}lLq\��to���C9x�h�������3ld���._pQl~<&���_��1WP!K�%�&vIF?q�-0�����\��S���������q�^^H3i�ef�|�����4���T1S��^����� B��?JHem�[+��_FX�=���c���{lH������-o����\k)H�T@d�T��9��M��qQ!����4G������}
����<����	��#�{>�D�hT"d���{q�qVn���}
�g�����"x����V6u$?�����j��4Kc��fe��
����h6!�-�f)o=*gYT����o�>p����I`���II
.�7�r�����P����;s0�b~�J��N�v|��{���L��5a\��F^����+'_�i���y�����#ft�ku��r��J�n�����Z~���Ao�����Z
�p����1o+�{[�-����K�o�����3���{Z�M7�)dw��2������O�3;����X����V�)Y���D~�,.9�K����>��s_�U���D���Ps����>=e5�����^���!Z�	��4���e���8����E��`�OK%Fo����+?���st��]���B�Y�~I���#��ZG �N�A��b���?�1��,�D��n`�r��^:�������@2�����~������@���FG�X��Wo��H9"Lx�I��(����8@���Z���������Ub2Z!�v����;oc���\pf/~���TWh��\��chI������CXC�^��C;�c�'�V����x��3_4��k��%T����RB��J�T�j��Q��h��l������4J'��BU�)���������������-^|��� i��#G�S�[���d��y�Y������(X�`�4x�x�^H��Y����(��S��3��,��Q��i���o�z[v	@K��qx������*����qL���H{~���;Z�x�ux��)�Dd��s�V4�kq�� ���j�������-�_CZ����G�N�?�I��4��W�z�y69�5�U��HT�Em�DU���CZ5�>��1A����l���$���� ����f�-!��
n�A��F����b�^���>A�������qG,�r�qm������g6��$��9�R�.^�<Y�[���V���^��N��Bu)�}��]1����/��*�hEm[|K<� w
K�����2��#=.v�f�*��/����H?*��g���Q3�m-����/��/��T���z�~��X�|�g�(>u���������-(��`����l�
��l}����h�1���`g�1�@��=b��l��q���Zs��<tH^�X�D�U0m�
����|�>x�TU3
��x��%4x_��=[#�x��'6@J��'r ���w6���d��7��b�g����4�<����m��_���K����������c^�j�W6��Y^9���66��r5s�C��$��v��	�|D���/`�����!S�}�V^H�}��1<�L^��Z�1b� ���1]��A�+khQ��Zs5
��s�y#}�#�[��d'�����*�L�6���w&���tTe�E��=��ne��l
���iD���2@�&���W�R������f"Q�
-B�3XE��F�W��@��o��.#��/@�y���}bY?*�BA��n$�X���0�/���"�<I�.�(��r���!�l�^&�}�:me$���X|^CJ��4�)lVo��	�T�)l����b\f�@0.6���m2j�u�P��$#�\�7��L�������OJ�{�f��(3�}$uh������73��m�
p�������e+���mH����7�I��6$&�]�����_��_�����>��;�����:��N�}L����c�-m:�x�t�#Mcj�u��Y�L��������~��"� nW����j�1}�w�d��7f����E{X��_���c�
����#_�������&�o7���HT���L$z�Jmw^�������L���v����������?1�����D�����[a9�c\���V��~Qb�wK�[��Z�l��k��G�@KR��������)����N��A�����O��������T��__����]�G��b����[�>�r}���!��1_����_��r�z���^_��c���h���\��v}�r}�v}���~}-�1]��R���^����*���]?J�A���z}]_��V��,�Q�G�^����l�I�!��w�~���s���U�zB�_������u��������Z������;z�Nnc�)��[�?��z-����w�1]��rb�^���_��W/����<�������QZ�l]���s�:k�>{���A��{�1_��uH�W�_n��?J�RL��v]���}g���j��|���/7�!�y7p���o����{7p���G7p��������{7p�X������{7p���{7p���{7p���o��������(v��G7P�~\��u������_t�����u}��[�F7p��
�o�M��b��������!v�on���
��sC������7����
��sC������77����
����!v�on�]��b��������!~�/n�]�n�r�??������l��
���_7���#������pC�z������Z������;z���nH\�J���k��^��w����nH\��?{��Z�������7��ce�� ]p��>���E������"���5Y!��H_#����0Y���	:��~�������=�  'kn	^|�\/�w&'���������������]D�R�#�8�`V��3�%�e�`u�a��E�����L)s�j����n���y/U���/����Q?�/�HEi*@����	�,��u(��Z"
��~����3�tS�V�����{�(7���7���c�T@c8
��L5�+e�iQ�#K�e�!n\
)d[�H����Ge�N�F�����0�1�u.~�r����x�q���&O��nt�`�re���F&2�
-�T����}�\����{�+�������.Xv�J7��"Z�%�>p�{P�F����,��;��/�1�6�g"�������@s�
��?O��t1���5L�Dsi��s�O�N�w,��b��p�y�\��B&��s�''D�FV�]	T���n��-��J��\1)|�<�&���X�������z����2�,2��Yi5���bK��`Q�����;67�X������d*'v��~g�ei
n�%�aF���%c�N�a�F��i�\F���'��4�Vrg��*cR
d	�oQ��=I�5����P��?7l�T3���7����Q��D{��
�.��Yi����Hh����ED�p������l;V���zR������>����/V�=F5��-6�I���.�}�8w�+
������D������:Q;y�C�����P�5�����
6/oFjm5�:q�EI@�e���c4uA�q<��s6���)z�7�#6�dp������M/�e�a�T�%HV�t�h7�q	���],�3�-l�_���Z����/_`��k��"kv������b��z�C��	Q5J���2	;�2���'f�2qoV�9�Q��=
� K7a�g*I���J��2{��Zd���|2�?3��A�����)���w/���;&��4Y	�&��o6���=R������%���a@6���r��y�*o��n�N�Q�Gy3��!-o��U����?�b�k��F���R2l��	^(w�O�����ow.�v����D������������9�>�]���		��f�1@7���b3������W��?X�����N%��8��rG���\����A��<>^M���R���O�YT������>�x��r�L:7V��@�V�&�<Cq&���:������uO�W|p�T�a�P������"��*c���2*FQ,����N�'��$������sa�|��	r#x��5��wh=��,��$e&�5��w�v_�}HL�:s����jF�<" ��pq���T7R��v��|V��*A����������|'�k�����c������K���lO��������7>3N�eK���������{)P�� /�b:0�Y�zQ�[�&����
���D���A4��V���Pm����PeQ&��x@���=I��5�qV.��8�sH������,)=�C����<�E��J�-���A}��V��P=
�k��;_��,��*�K�*�\t�\��e��H�'�A��7�Y�{�`�*�|��@y��Aa@��W!;���g!G8V���[����O�Y�B���x�������
����/L(�f4hg�[H�"
!��S��=������"tr|{(�6����|V�#����N.6-x����R��04������y�.�����d��(5O
�a|)���^�	����<���qT�V�c1�����"8�����������c�i�
������t�m	YwV���X����C�Fe�w�:!bS��%'@��2q�O���*�W���PV.��\|���c&�@���o���	y�M2�gO�����nE+��1+	yp
�3'+V"�Hk-beF��n���r�~��2�)�������nTn���z��v��g����C+�5�n�MUh��-�\��V
�`�������L�}�Wt1�;�C�����.���e�������)�]s��A�J���~�x0Y��i����V���e�� �*F�t�<.&�X���
�~16{��YF��hd���;����4����[#j���(�\r
�%H�e���>�AQ��� lM������$���� �yO����]�
�	|u��h����|�_�A���L���8���=�2��"���������3J`wK�_'�hk=[���|lp�q�����g�_c��\�%	���s8+Ww����&�5�f�Y�l�@U���X�P�������H�k����vK�3���A:+�V.���$+�	�����/����,�,���������c"M�;R��^����3����T�T+�������0:,���@�u*@��������=�gE��M�'�q�
��_�<|��������*j���[������Ef�����&�9u%Rh,�wL�P�^���`Z������Q��x��&�y�H�=&"��� �D)J�?�-�Q&D!��,[�q"I��'��T����	�%{��Z;vtK��i�{�YGQ:������X'�\/�&��i���Q��Z�e���6#����1:]��*��� U%l����;�����JJzc&]����E���V��"�����U���^%����U���QQ8����/(�v�Ff���4�s?�F���� ��g��=[�I�x��E����m�A��	���4��������&�v����	����;�0��i��}F��������;J���D�}�.
��{����e
P���~�����d|�)�
�;��LDF`�l�	a�g"U�}C�������T���b.�}A��{���d��n��M��iO�Y�	eYS��3�e����MZ������p<�����,L�{b�D�m�QC�owiA8g������p��:�3�
��@��>���9��������Y��/j�c�ei	{p����	���yR2�*@7J�� 5��v�����/l6�\��Ag��z��[A<v�"�{�L�����B�'�{��Q�'��;�{���q���K�����A�1�����h>`��1+)�X+�L�`B�����}����Hv�v.��_�f$��t����]�h++�������X>��LF�+�����s���F������w���4�}�����
�2�	[��'$���$#W~7�pfG��#�v0��=>�fOLeD����������W���C�[
�Jp��m���
1��|8PK���gEpP!(��;\�6EW���$:�>�1��L���mz�����,���v�-����[�9P�6��y�@DVe������Tso�������k�@���)`���+&T�����O�+�x!v���'���y���P�m���N�����2R
�`��������������9��|V�n�����N}a	+�� }����5�.:�A�Dn;�e�_f��,L�y8k1�v�����Dw�w�2U�=�/�6���f�21O�/F���8��\2O��X��H�f����3��O\H������_O\�m�<�U��W��d�+�1W�i��|��G���>#q0��j3�?�	st�a��m�+u<���3���6�����/E@���qp{yf��mq�ap����������ww ?U���<6��;��7��38uq�d""��<�w���$��o�*%"_n&�U������������� l`��l�2�t����������W��-MW&"2���i�l�"{a����8[�Q+Dg+����le"Z8W.��LV�m��#�)����k�IK^c����`�n��2.E�&$r�VFRD�e�����0;q&/f�nF���'2�PsF�*�����.��'�6�#x7#/=-���}�!�%� �1�a�"�u�����c�� ���W!��|�Ig
�'C��I6J�D����E�4v����K�p��e�A<�f�^"F�������n$2��MF{]�*�q�t���T����ds)�7#>�;�,{��,#����D�d���bx[�������7G���Rob
���>7�w0#���u�8p�i��*���v(����#U$��A�q���A�	����M�[ZYu,=J+����J��(���_������1�11��]��!O�M@�,�������f��W�`J�1/���9�D��,uy���X�D�=�����u�-�}D<�[ �.'��gx�l��st��A�V��e�p�MTJs����=�C�� <�#�������Obt0g"?�M�[���w�EM��D�1�qoeA���o���\�8g���^.HN3��������h-Z������?����������:���&T��/<8;�3��]��^|W6�\�N��S[�U����!=��9�L�,�p==� 2D���B.s�dJ��&���/H�{0?���@0|&�~h
�2����@���.O�:��r�8D7����*��,x���V��1K(Cp&B%�>}�x���ql/k��~��(���a3�o�how��ZE-
��cq����g"rg�=o���{�q;�2pW�ApC-Xj[��p�����S���t9���
���|�CdY���+����[����:T"�/w�^�H^�����6l���=E�UG���2��3�F����{ra*��M�
|>j=��j?�5�����~���H���N����C�J:�P��t�����\��#����k��\�b��3��mc�3��g���2�����nz`������T7"���pY�����z���f{���~
�7���������0�Ii���">e���t��h$@�%�q���FK����q(�G�4A����4�������_�����~��/�ggRTzr�Y��H��L����(�q��9�0 ��p�$j����_��&p�C�%pix@�/}](������&�/����D����#��t�����\��SY��JQ��;2Q�� C��L���ga
<|f�s������a�PE���|�F�|���d��w���V�=E����t�&�w����2z4����E�(��o"'I�5�Zd�pi"-��5��g#B������")��1�/:���#Y||�B���b�s&1�O%YFK1��A|��0M��!�	����g���P.����.oF������Y���Y��)d����M��Q�O:�����UzsnpY���=�@�9���)3���fB�������H�#�3��X.NB�?D��|�������l�KV�m��~zl��f��im[H��;�s�	8-z����$�!��<y��4��{"~"�9zDdbU����
�9:�:��� Z<�BC�B+������A����1�����|���-(�	����2P[��M�7���US���-�-bh&����'\@l6�5�	��6S<A��b
h&���%������%�N%��z[���6ek�}��IM3��H�����4�m�{O��-�2�7���W.j�_�hX54�&"�TGl������N���>�w�==����mS��:��r����|n��R%
z������*�5�=v�/��T�8��;�#��]�#)o��H-�@�pC�X5�8!����T4�?�i��*�_zX'/H����p�F|�����a��u��������L�����9l	hF-i��M�3:)���y������?FtF	��;p��'!��	��.����^�K:�q�����d��Y��0�!��3w��G��Xx!��1o),��<��|i�T��x0������:<�$�b�Q��B���Z
�����[-H^��QG�sd��F'>+�],����f�����q.c��g��0
�q��-|}"2�1?���������0]�m�	�?�S�pL�1!���{�ZP��0�P{c��3���,�(��l�����-��a���e"j�[{���nb��i�DD����*�wq��waw�0l���� |��s+'��U4���+�~|�9�O��@�1�.9��������D04�VM�y�-D���!��g!�������a�@��2��|�����V�Msg�Z���g+B���"�HpRM&�����}1Z�����2-�$bu���[+B�H��d�����[P��;�Uo/?���b2��t�/u�|�$��kp����n�dB���x����#X%"��@E���?2������=���
��y�Q�X�����������6NT"���7�x�U
p���&���Z��iAa�m4��I#��0����X[����e�d���"�m����c������pcg�=����&�\�q����U�f�������v�{�<��,����A����nq>�V/�M50l(��� ���z.T�n������-��8(�Qu���,���Bw�t^���4��0*\�����_��'�@�;�]� ��[Z�g��t�lvV��;��W����C���m��E� �.�����P������[G����i�p�jb���$�;"�6O��X��f"����	���h��p�Y�l���$�7�|�����V����A�����y��8w���?����3���T!4�d;��K.Z*���6U�������'����!�:dY�}��������!���b2��y�dT���l�p{j����A������6oh��-�2��-81�h�4����P*���������|����m�>+�MV����(�3�$��T������
"�#��m��#�X!��O���M�3q�_��B_������H������)�k���]�=_�IC��#�C;'����7r��m`��#���|&����}����t��)�l�!+/y�$r����[K��������E�1�J`7C�_���������Q-��oB�3�
.{��3����w��kc�2k�6���E�/m1k�����Ny��������)������7�Y�b��2���g��3=�[KKF����?�VV�8�cmN6!�%�j>���M�+���eT	�q}f�[he.�+,�m��J�g��:bSW2���k?��j�Y����\I�l�QDvQ��Y/�m����H�"��$�W�u&�I���'7]L$Z��w����=}���6�=������dB�iql
m����
�1IH��q������Y��S��r����:�w�]y������dc���S<�M��cL�?;�I��d�X���� ��z�C��j�Nn"(��p�IYSbsN���[\�[���vOFx��a,<<��%�Dk��C�������X��\�������������
'�V�c>�a��J�����g"i��$db��V�g�e)O&����������pBL��^�X�����tl���f�y�l��'���X����wd�D���i�3��R���"�!7�tEO�e��L�#~�"��)/���r)�)�"v�
d�-r+":��������.�LH���d�^���w���V�������R{@��L�F!�S�f�T�y�w���;^�f\������_��������3�pb���/��$37Q�
��.j	'����O�%�@g�_���T����	��^N��6W��Y�+��g�~���xw�>]l�R��S����(3��68������m���uw�2�����!~���,�����w�q��p�|1�RC����sN����{�j��������e0����y���	5�cDs�y��#�i�<o����L5i!(����r�I3��u��b�;!�
6Hg��!R� ����	%��S�s��������<�L��)Z,;V`AZ��������"�0��������.�gk��]���������/���\���N�i�,1%9���������MQh1{�Z�{:�hO;G��tf�9�;c[nN'"�.��|d[�������!��
�� -�B�����~���)���l���Q�%3J���V)0�����I6���J7!�6���-iO��`y7��-���V7c:�n�I�kT�Q���}_��tF�]�-i��������;�g���Wib
����u.�����%��F�tF�7��`O#�ga��v��g�tA
%��%�W��%��������0��\}�"�|$pn�l~�`��f����5��J���}/n��[8pV�R�z�1��)��	h����v�4Y���.:�fP�����J�V&P$6r�D<��p�d�'Ph��Gc�	��G��E�-�@2NU���@nXw��I�-�O��Q���G�bnC[h�<����s���4J���M��4��O�2��!������X���#�Fe �<���4**�3�����=/6�~/�gR�x�&��T�g�I]U�fR����-W!N?�3)c>�
%��)k��|2���w��~��)��x��^&Td6�B�>����9d��k�1[�:��(���&9}����(S*��R����B���s�����f(��dJd�����r�o6���?��jH�P	���BI�1�>w�����8�2�s��I������\*LE�2b's��X�k���MI��q:�/����!�IE��d#���kvln���C�k_�L��\J�|��I��ME'���a��kAr�������My��<���M�ToL���~V�e9-,�~��-/�k,��LJD[����� �+�XR��;M��2�r��Djl�S0������u
���C-���x�M���(b
exJT��Rf����.j��~�V����3�!��t��Z�^����Dtbr��X��'�{^OG->�^���H+^B�_z��B;5#��YK�*?m���������S�Ev�>.2���&��co*<n��=����/�8�&�e���'��#���1��������O3�"_�������~�hu��Vd���
���(u�39��_��|t��?�!f�����{l����6�,�+�{\u���^�����wSI����Vv�����6�O^�Ym�vv�6]��z�?&����[2jTqsh����j�/��L��mt@�<?���X����e`�����t������C��w�r������wY�_���D��7=jO�M�+�]rP�L>I���j��d�"z@�����Y�@��%�t�|�y��]Ru�<��y._��:	?N��eB>
��������^�<<d/=���-d����8�'�l���<��}�$M���&�����9�1���V2	������l�	�1��5yN�n{�-��<
c�����}�|
���.�4�>���7�H������O��j���i�+$w�m��&dZ:!����6����4�tB����n�0�"����!��	E}��Z=���%�?��'E��}��F�"�;��K ����ijE|������.�j%1Opp�;���<�!�[
��|}�<��Q+��:]^�.���'3��Jl���:���
�Me��:nU��4d(���!��O��M��H�I[J�<#_
p����:d�/)��M������_�.��ur�������*���~���W�P�/l!H�S��me�8$
���>+��� 3����d��C?��� |>���`���D$D��O[P��q�$O����b�H���3)��zf�D��ujsm�E�U�#�w�L�+0��O�m=H���+D$�@$��Q�p�YS�}��sp�Sh�O��5g�>�J?�����P3q��l#���}T���$����#����!��:���9��z�=KcS}
asE���D���c�*��zy?���W�\���zO=�[�uqQO���5�`�]���[*7�1�]�������~��~�w���z�W�]E��z������������w/?�n������w����������{�����������)���g?��M��#
������#����D��\���s��������&��|�w�Z>?���������������w����o����������y�v$��1!2��1��?����������lz�^�s��C���"������������y������}�������~������?��Q����T������hn��d<�^�|`���g���g���8�c`�c��]��r
'�H�U��|�?�[��JP:�(2����B;S1e"�����a��~��u
�Wt_7A�m��C����y,������j{A�I����q��LD�q���EN�K@��F?#�w�J��Q�]8u�7��d�X��3p^�O!������8�@������R�8c���/��<��������A�=�N?�R��&&@O�r=7�����o�(_"�Y.~O��J��d������u���P�JD��B����"������o�8-�H }�����v.�a9&$'�{;�v�s�"��f5��<(�j��]�#d�Ef�&��YRVS�������:��9�4�`�Q�5���!����c5}j��������)�����2�
P�����RG85l&�}�'#{8�%j��E�����;��fr��_t�S�o&���Ln?�����]H
 Pv[D�F�8�3)��'��|w��D�ah��<+-.�{�q�T��LR���B���
8�6���n���u��������[����0���6��1v�������t��i��)=5|�0�$#���{-Z%�U����l�elp����gFI�XuO�����[���r +�1�@jF��?n���3n�*~���#t��M��L'��f����M�o'�����8C�]���;^�'p~y\BM]�����Dn������(�/�����g�V,�+���!M� ��i+B���V2���t[�Y�&��:{�1�/z���M��`��?��DD��	[���im���3K��<��r����lc#������0���<���E�������T��OK��QdF-���CoKp7-Zn�~�I���`�"K�@i�O���w����es���,~�����jJ�Hu�VaF?�X���W��*�INY���J�����3���f
x�	��"<�$":��<mhC��L�E���E��[f7�C��E�t�f����H%�"���v�����LRkH�[[[{wE��7S��BF�s�H���\R�n��f$`�s.�m��@O?����q
I����v��c�#����� �>��������oj^�|H��
�s��D�l�!��}pvWL���i"���3$�;n&}������J�1c�@5�������/I�)i11����Q�dR:(�����#��OAD;a�����oE�����,����|dB
�U��)n��EoAp>�8W�kUr������b?�GW�<=[���NL�)�~��vB�w8#7m)Rw�<����%��H���=���}���9�D��-�`L���6����5�w =�f%I���"�,��Gd��.k�t/���@�nt�q�����xPBV��a��L$k���a2�����&0��)G�!��Y\&pw�r��u�}���8�OH�F����C�bsa��_{��@�X���6�,�@7i���3�-�+*8Y���
�X���9��8p��~��R����c�������CgK(����^jg�zX�-L�������^���C�����fW�����>a�H��#�cf����iD��Z�N�	������xoN�f$��~����c���`L\�<I��)V��3!t�vf�����xP��J��7�/������x�����;�X?� �H@/�O#�Hh-��A������y�~dcl�c�be��������p7��0���4}�e��5�z��JD��F�|��>�f���fT��%<���~;1���di��H��%LD�9�P��\�>sq��^K.&���)�H���w*�w�0z���g�{K���<��.U��]e��y|�*MDdw���J��yBu��		������wOK&��[��d�%�R}����I�T����t�mj�c��&U"vZ���qW�"�b�=�Er��R�\�.�5S��im��M[�F'$`�f@���Z�S������\�=Ja�4!�Y���6h��_��C����� *��n�*�#��ki""���0��V.������C�b�5\����6�bX::��J�_dB�b��)p���,���:����m��/2�	���'$��%�q{��v*>>f'9F�;l#G�����vn��w��+��Y6V���B�;!�+����h�{B����������<����\W�E[�on|��]�q�{C���;�x�VV���q�4����n�"$3;|����Dn�</���u_C�o��Mv6���@fgA���K������=e/�j�����E�� �L��!y0����&��e��s0YM����T�k
�a�dB6�����L����i�<Q��e�v.f��HS���]_`�f\���z8���?�sGA
F-�i���o%(-�������V%�5�5���ie��V��*�P���+fX*	�4��AK�� ��S�����!%-���������3��F�~r^�]�����5�����������.��a^����H��V��-c� ,MY%"���F8�����c��H�m��v�mB|��e{}$7���wT�e-���w����$�PA����"f���G�x6�s�-��L'B>0�:x����J"��
2��J���+�]Q�v
�&U����m���Jf&"�r��ep���� -P�D\M�-�a�(�t��{.��n\%"{PJ���/n�����6D-��8��A.�
tp��3N�Z>�T�i��m�:P&�4sT8op�s�%`
f��H�� 5��1Y�)|���5ym�����Z�����9������b;���X�nvS^�)~�F�%��@�A�c���1.���;U�O���e�������F%�W�y���YZ��g��l�����JI27���M7$� i��{c�������R"�����)�k�,H�Xc{�L�>me�k��s���������������SP)b]����$����8�V��%n�t/��O��ud����Nb��p���LDf���������f��3P	2�yo��]��(k(I�
��/�.�?����C�~Cv�}��~_�Cnh��U9lB��	��	�"��k�f�����F>��C�`�"�a��X$]���>&��_��XA��OP/[J2�lp&M����(���O�1\�4�(����E`��������!���-F�j�g!"{X��,o�G7~/D���[��G%��������X�!�����q!}�T���2���3q=�|���v%}�c{��P?keAz����n���������E��;4f"���"����SA	��&����V��PTNN���*��Y��nA���<^�yS&�:�Nui�9c�O��YV��0i
��O^p��DB<����u&"�LDb�2�)�t-H@�M�j���ga�L��A���K
��)����\��'k�����X6����'_��sy-�g��s������3�f���SE39!��0��[M� ���E�rI�����v?�iC���{�������YV
;`z^�^���T��h8�P���mh�
e�\��*�;����T��m��?&u�J<Wh��Wap�"��.7��K�2�X��U����~���s@� ��3��q�<'w+��,H���~F!��|�Z0%d�����m-^�[���	5����s�p�-�
g�����6h��/ ���*J[��U����4��F �vAgS���*�@W��|k�fvB"�mb�Td�E����
��I��*V��������sC���F# ���>�}F
�.u���"��;!�}�G��(�5@ }������7�
�{�6%��	8�����>E�&��<���
|.�������Z������������7yc�ap�f�X����WG��I�� -���{|��3'�Nc������v��4��e9Q�����H�t�����M%e�2@c���,�\���"�a��Fh����N�wrd�	�z���M�ca�
Z���T���6�B8%���������tX��e\-m���.��2��r��EFt��1n"!#�!2����"j��qXt�c��a��$y��g�X)�73��I�Htd�v�/����5,H�"���e����0�}FtQEbh|,e=/����	��Pj;�}�`Y���3m����N�	�u]I��E��f�����0��,�Z���E�����+kYw��2�y�M3������h�����h�,#���_t�_��Nf6|���� ��"�^Q��"Fz�������`A�L�o8T�_?_��Z�U�oCNDF���5�����Ci
4������.�ep�.��+�<1]�dJl�n��I�Gz[�O��HK@����\^�3i�����]��y �|�XK'r"Er����h��Z�9�4}�������cJhbr��I�pA-�
�+�B�a������^H~B�e�sAG�T %�)�v�Y�;��O(k{�{��w~a(��bD�me��G����wf�X���<����4����i�d2�T��)�Z�	A�5���P�Be���� �mA���&V�f��`g�IVj!�Rtj 9�L�n��+@{�L�,Q�����������1��s����N����T��?_mF"#%�o`������m�+]g�4����*�
�����:�:�X�: �Irt'<s4�	Q��S��Q�AGr��Q�(��t����Hw����l��a�^����fFZ�cx���h��%�7�%����S�����T���Qh�u��/���Ce�����?�V/B�0��W�o��@|3J!64L����U���*��U���:o�	>+R�p�Za?�m2�j�������zh���a�F�������9�P��3qs/"��c~�B�dOdMJz�\ri�0��T�C����]�����L0ZSf<��=���}F�X��>`�w�v^sy�r��W��O:�<������
���A���w�@�(
��
�)Hro4���5�:@��|0o��cJ�|-HI�.MJ�����KC�����++:���2!jMs����nA	`����q9�j �����^/�������������o����Y���uy�^�^�^���]V7�������]�;v��1�Dlw@r������'�Q?��&��aA	H������RT�������7U������{nQ�����?�����K�ma:�
��Cdk��@f�0������}O��C]�4��~�����t�m��+�N�>�.���q����
����������e����|��"�|�e��S��x��p�i-���z����\���	�������K"\,d��:VEf����0��Iuc�YP�O��k��LJ���5�{a�.���|�*Qw�����[Mo��;�d���H����,��e�i��D������}!�G4�Z��C��H{�_�D���3�Hu��gK���������:��}�:�+=���=��Q���6������{=��=�
�+�������p�e`�03�L��m�l?��������9����g�I�m�����0PI*
B�iX��G"�E�>*xO>��'i6cJ.�.�hb�'Mi�5���LL�1`������������a:ug�j�1�F>�k�!�^�{!"c8L>=��h��4�S�~��&�E��U�]��WA�K,����B\(���<����I�����s�tQV�f�J&I	6����n�5���]#t����Oe��9������)![���)Y :��6�y����@��{�nSr���w������.q$�U�*�`G��,���Z��H�=#s����O����M L��Zh���+�`�gyu0h�T�n��#��Hs���i=q~NDl>l��{!������HO!i�%����O�~d������0�0)��lz]�a���1���TbBx���[2�Q[O�<�t����%�<����m�#�u�i���l<;���KIf�6��3����r3��-��Cz����J�|c�z�7xjr.����b����Z�]�i��	�M�:���-���O�.�A���5�pN��%g"[�dk��"�l6�����n5���a���g)0#����_�yP�kz{������ifW���8R�iE��T	��z��l�V�x���{pB�����8E�<%q���>u�����D@����y�b���	�
De��nb~����[�E�bv7���=�DdZ�]{u��{�A�X���s���7e�r7�E{�H��H`�x���T����4G�</j��M�����H����h
�#��LD~�_EU��C���F�O��t&"���\�V-mm�J"����������a���Z�j���[E>��O|�G[�������z<MX��1<�1����\
L������m7����{�Cu��{}/(/'��X;8���R��>;�r�����=�Xy��o����[(����F�LB>���Sol�@��hnE��/>�O����TI������
#���� �x��&bz��'�4���sG���Q�o�<��X��������	���bB
Df�������LH[c]�����A�I�>A�Ci

<4������Z@3��Z���p�3���M��8��c%�@ip�^Ve"��]��\�:���D�k��������Z��y�P�EM�<�;v����o��_`(��v�S�������\��I�W,&U����~��%V�����(��k���*�`�)<3�$=�����Y�}g��������_+�CA;x���	��p�c���e�����|�JD�1��D������J*��^��8R�^x�J���#���0�>����S?+�ZZ��\������������o�~
W�]h8+M
���9����_���y{�~����@���������w�g�&;��A?�i�Af�|i�"�0��A����nV���d��S{�/�#���@�����Z��[�7�4�u���(j1���	�[Ot[i;�i#-!MT�*��> �\<�\�!R�<���IV�1,,�_h�����]���R�s����^F��Z0���]�n����zoB��t�7���oK���T���I�M�p���R�_��?F8���+a����
����|��U�fM�^�����\.��d�,�����l��[�Rk����43���+xF�|�����m���H�G������m<X��'6eT��x�������M�;�#�H�����,K�a7��z��ZP�xhO� ��%�z�7B�{"<2Zp����&��F���3�dD��V&oD1�7�I�\�-��Gi;X��;��?�F_���|�A���X��b?���h�i�@������"x%��������I�8�a$�Xj��m?�~�o�N�T��Q:~nG�i1u.�=�i�9������,��
[��>����JA�K�gO�Z��c��������i5�m_��3:Y�
2���D�R�������|ZU��<�~i}W�(�"��&����E�����������fR�s"�%_���G���z��y������2"�_���������������g������}�_�������7DM'������1��|������{�;�������n�s;�N��f8V�������6(��1�OfS��g��H��9�7,�	xN�����
�.*@&�|)��3�*��}v�*��yn~,';���{
� �yq7���gE	`���	��._�a��
+�l�qZQr������U~)����������������p�D�$g�o�%����R�Mgi��%����g����v��@I����+���MIm�V#��������dh0������tho�������_vSA�������>�P�q����HTd���pwj������09���J�����Qo-�^��UV�Q�F���C�������$i����N�����<2G�3�2����K�&�C]Q�J�e�^#a�������d2�3J�����f��me�)���]��l�-�@����!���dC:!��gX��!�������{��������|�g;��.��PfG������P��������?(j���?aG'"2^�v��'[:�������w�;�X�H�4�7�E&k:#���T��������X�To;N���}��u�0��/||�g��IK�����l����w�t
k�e�T�Q�jE,�~d�zc��VuB��VHTU��/_��������`��vMg����|����  ���'8�V��"�+{�Z�������<3��a��������YEn�lU+	�l*N8��e�:�V���7���NHs+�7y�c��NH��<�����Z�E����V��w%�:#��o�_��e"!���#�pD?FZ���a���[��Q����>]F~�k�Z��|73��9Q�^�e�jj@�Z���o������
oe�Z�'{�:L���j�Tn����lO�'��"��_�'�:#U�0��M��tF85�=
�-����{�7�^����q�[��=����Hk�G���|��Q'��8G�V��	A4�t��vkZ���3��~��������L�H��`��)u��)uE�-��
c:�����r��e5dZ�PHT���������	6��~`k��"Ie�]f��������|<,���fn���������3�%���Tx�\� �����aW�Q��!��Q;�nAL%O?UO�����gEt�p�c���j!��lS^�\�A'D�`z%�H���;�>�|�5�()�w�g��YT���}�3���6r���iA�}L����4!������Q��w[P�;���X��l���o	���Mc���h�{skT���mj���0���
t���{�!z/n�x��v�����+21�� Y�����^��i*:�n��Z[PR}��n~'���[-�6e��u���-}��6�0Z;�����4�G\7k�L��.7��Xm;�X��������&�9�(S9�t�O�2j�g�"�X�����4�p��<�vo	h�ma����������k%�4
��=H�����bFi�}��[���������fu���.dl��������n�����r��5Ok&Ow���$_ �'������f�,�����I��M�qn�;�G7o`LU�S=�0?2�
B�,������"yx��`7]Hh{
?�{z��7�����OH+�~K�lju��"��Q��?S��\�Z0���wi�����*��dg�J��g�Os[���>�:��e��������f�~A������S�
R�YI�5����70J����z��FlJ����[sfS�����t Sp�K
��],��4	�]��1y�f����3�L�]�	�D4������2���>��`� �Tl5j j��Y&��
RLd�:����^������V[��ne���sA
0E�71��	���eN�e��9��Q}��>=�c�76�g������xz���4A�S���'���������D������j7��	����~,��q��Y����:@r`�2Z0������Q�N���
��=�)�~)����+je1�`�eF�u�t����~�zR���yV��.��@lB,���u#�+*��[��Xwp���BV���\��]������6�n_zY��h6�w/�is�nis+���U~��4WP��]�VM���*���bBZ���K���z�C�d����$���t�������i�X��0}�����ET�aZ2�A�-�4:KeT�l�:��!����
�8�@2�NH[xa?��!��V�%_�J]�T"���`"4���Do������u��][�&m������&D��3�����Ec+Y��~h�B�"�����9:��\8D�H��LyY
Y��i�����%4�h�\���=>n F�K=�	��a5�%�Y��	��,U1BT���������oc�UYE�i~��������Y��!w[
y;l����6'����9	�}�A�����{�Kk#�bi~��t���5&��{Eb;������c��,�o8X!_�v�����`W�a���9X!�
D�`����$������INC���f3M~��������$#�a�dw��*'"����@6�cTU (�{F=�!}�q|�����t�4�]��'��lQ���3����h"��-c��&"'*�a��A�@���=#�O�-9c��������~t�<���a~"��-�kT���8�ODd
<@���H�$��/��Zt.d���'��y�L�b��<�5�lS�n���>�c����^	��=c�U�-r��ov�����#Q3��_�'�o���"�>�r>��^Y���>h��p����JR��@����+S[���(�k������L@?&`+X������z�Q{���J9	����Z��jA����O��=�L�
RC�'��AjU�f���V)(J��t��,B�����CfAR����+��B��IDY�*�$�[�K`�x�~���~����j��M,��$�}��������'��������Q�.���%������0�-bA}��6	�<x1H"����cd����/�>3R�W@O-m������f���n������J�����gF*����~$�~ZeMbG-.�����������@<=6p��i�����ts��������|Noh�
Ih'���o��^e�+�`AM��-7=����
���ZRG���"����^t� �����[�|i�$`�����M<;uB*�]���Vb��lqAM,M2�����4!�����W�isD���,�_��M��]�-[��e��y���l������v����^��3B����Ti��^��� ����i��#c���`��Hr�X�izR��(Hs�/B�)�I���M�/�"^�h{	���#p�]���oc^YcJ:�����|��3R04%��*H�UJ����o �Q�w��a�DwFh�C����A#]�����ba�������������D�_��	�i�'BU�9|��zN����������q����[cd��;<Q��eb~8��[r�NV�����������g
-L[�J����MN����� �j{X�	��[�C���4��6>C�<{�����VQSBcw��^e�_�B�a������Egd;��6�"�X@o�STm�,8�DD��+��p7���v?3����W9��Z�EZI��LD���|G�d��p����2�Y>3�Y[w���X��J���Vc����<�#�D�-=�c@f���ga
<>/�������Rb��IMn���cO��>#�\Wx�����#�����o�=�	`�2Q�.Ro`�@���K��jA��aJ��T��R�����.�SHU���������?���,�3q{��g���.��v�c#jA������;j��&�~D�m�����[T� ���G�1w��o�������>�D,z� M�{&��4���y3���!����M�}��9�UJ�)i[GoK;�U�F��������;���1���w[�v��L�=yB��O�^H�&'"���?���]���4%-6!��Q���N���gA"�V�|�Om��}���A�h�a��e��W���oeu���Q��<!a��H��`���K��D�<��y@Q��v�Q�h���W�9xS&*������}�����,��vY���Vu�����'��+B��:�W�@j�TS1[��ivX�m�Q�������=Oa����=�g[\z���O�r�]p�����t�1_��z����L����c�`�<o��y����m�����>]p����.8�z�yN��|�Vkr��zkMB����1_�<����.�kMB�\��r�6]0U�u����\O�h�����������#(��#@�g�����	��SL?��w���W/���^����k���|�������S������&�+���|�|�s�+ �+�������w��w�q��W���?�~��SA��g�9��>��>����H�Y�{5O��G�I#�[��U#�R���������[UI�s;L����:F���ry����:J�+��
6x�u��+b��E�b,W���+|��CE�b�����W��Q�t�5W���G�:\�+�����i�u��+b�#F�b,W��+|�cF����4^q�Wl�s��0�+������s������������������������������������������������������������������uf���e��se���d��sd���c���cV�������pc������ci�1������#~�1��<F�������|�\���$7&]�?������/�r�"�-��IWd�%�1���*.���.��.~f�8��r��.ei�c&��W�.�\��C	���,��Vd�i���:i��V��K��|/�U"Kt)G�k*H�~M%�g"=;h���HWNI�3���� }��y���K~��]�D�E��5>��-��,H��w"�(��$j��R-8w?U���A�eX�$j�=�6]$@�q1�[TQ�
����~��p��nw(��
��m�c�^b>3RY�k�������e}�w��N}�S��I����	��A�3	��JT@��P
9E<e���A�L�?FZ�dI���<�����yv��C��cW�� �=���^���V.�u�$>����6!����g�epx�2��
Q��E��{�L����:�����B���V�C9�+��.8E@���#����K�}��sT�J�|a�j*��='����6W��?C�nT�`6�p��<�f��0����n"�]&T@���SrJ4�U��,V���������
Me�j��h�Umd%:�@�pF�����I�g�mw�r����A&��)8��a�3�u���J���*�����#�@Z �N���6�Zn����F��p,{�������9��~g�e�
n�%bFa�Vg�O^�a���i?\F���}��-@�����UF>$�(_��%X�z8}���P��3�L�F.����#'q����R�G�4G���T�_j���g!�[8M]e�S8{��\[_�zR�����a������`�Q��l�����������O�b�}�h����� ���7������n9F8TtBU�/8`��)���f��V��G�]��Z6^�=0F8N�(��"��D
�Ey��O0��XYH��q�����+&	y��|��L��<IV�t�Z:��V��-D-����w�����]X�^P�2@��k��"K���=�*��L7���&�C��w�3��$�����O���e����3G�;J���@��t������.���~�a8��EFj8���U�*
��C�`E�����-u�r��Lt0���{d���:�`�����z���nF>���;a\��N�(����e���>me�[5�M?��h|V��jo s��'�������������P��: ����xF.wt<��aH���"�������h�P��'��0>elo������0��{��f�}+FZ�|	+�4w�8ubU�G?L$G@���;�Cfp�T�a������	>+����2�@}j+�b��$6!:M�d���p��"��P{�

����F���kV���z4�X$J�L�K���1�����sq�R����0��C) ��pq���T����v^�����U�#�>��1� ���t�O[Y|�?���LX:����^��i[�3�Y}�>������k��}~��Y��5���2(��>+R/j{+���w�������(0�3��`d���3�M�r,�S���Qz�`������\��w�'�O����XR:�4w$M�Y���R�C��e��;��8�
���g��_���<��2U�v�S�����k�B���$#���M��\f���������O������0 ���~1��STM�,D��
X4���~��_���|<^a�%��a0j��]�v�7�P������o!��4�d�SN/�������*B'G���T:��{���|��['���T����b��������y�.�����d��(5O
�a|)���^�	���u3J�	�_������7�Y�����?r��$���O�l��u,���E+�-#!�^q���s6���D���I>l��d:!bS��%'@��2q�����^�V%j��E���/��s�$h���=_'�c��d�����="��VDcV��$gNV�D���Z���'�l����[��127��t.�@v�r����L��>c�Xu�Z��)w�m�B[}q�Du�W
�`����n�����|�H����0�������.���e��������)�]�q����J���D/��������l��S��X�����/��K���Mi�������Gp:6g�|!xG�q
b�]�4eY����j�R[.��$�2��OU���Xi3A����)qq����=������O>�#����=�F�	a���b���g��q��{�e>E����u���/I����Rsx]��$������U����g���\�a��]�	������9������ZE��d���d�K�*��@,����_3��RO[��v�������9��j�%v���`%<9LJ���u}���E�0�y!��;��L�)�Rb�������*��������ZO;n�*����zs���ya'Pg��
P6�dyp�9*i�Y�8LO2������ �y�z�F����k�`g�f�L^�on[!:���$�3@!�M�s��H������G����$j��6�=�k�.VF%"�U��)�y�H�=&"��� �Dy"-��@P&D!��,[�q"I��'��T����	�%{��Z'vtK��i�{�YGQ:������X'�\Ofd����q��(�h-=Q��k���X�����z�%�Y��6�u�dU��U�y����j��I�9�Yt=}����/���?��%����_����%��am�&}F	����d�����Zc�F���MOn�$��L��g���w�Yf�E�m���aR�'h��-)L�����-�Kf�&�"L�>�x��f��*�T���~J�%�ngw������L��z�d�?��>�~�����d|9?xxN2�8��%���>��O��������pR��T�������/H��zl�]�L�m�����0�I6�1�,k�6}f���r�I;_�T�%a�$5�x�3��Y�����2�>��:�d�q�T��*<��-�����aa����4���/3X$�>���0����U������O�����|�5!�I�����SeV���d��/s�,��Cj&�Ag�	�1��oJH��"���sA��$&W��:������{j�����`���S�Hc��p�����N��"������!Q&�|y������d��/Hv�v�$��_�f�n�9a��W�.v��������� ���&���
�*� ���n^��63<��]r{*�}1#��i����.��o��	���f�8��qN$w�nid���w��������������;��N@D������]�!�-E%8��;���K��P�'�Y��~���J��_���o^{l����o!E��6=D��h��el����oAR�6��oc�;X�	�����#�7���`�
��^|b�l�5�b\��~O�*>��=���������!��>/�yJ�}a[�v����~��j8���w>����uo�3���M���"t��
�vv�KX�����s�]=����0����o=�����{��)�=g-&�N��@6W�@��.���{P����Bm�}8hf/���d�3����&����y�<�bx�G�4��������~~C����7���z~�/3����U�X��d�+z��5M?z����>#q0��j3�?�	st�a��m�+u<���3y�_���H�R�����0�����~�DD�������)#G����|yJh$����G�����8uq�d""��<�w���$��o�*%"_n&�U������>�1��+3����W2����
���?7�+30�2_yn�&}�2�9��N{(f+��k<��d����Z!:[y�|"f+���r��e�boc\aN)����\MZ�[���wJ���y�e\D�f$r/Vf�e�����E��B<^�����ASO�yC������$Yi]FdN<x7#/=-���}��%� �<�g��U�����X(e�L�f���
�.drM:S��>���SI[�!������r�����n^�����(��	��cx1����Z���-H���6U�uE�$�]��m?+R��solDoF|RwY�^EYF/�i!��H������|7q�����cS��y���<g�}n`����������m}��~f �-7�P
�c��1G�H�G&k�z�CoF-���f��-��:��������W�~0W�����~q/���b~�!�28�+�!���z�J��ba�W������W���B�l�+�.e���N����X�UosF
dO�������aWj��%F�2<���������W.LKe������e�=�\*~�n���<E�=_��.���F�[�;�(�=��
�Q�Um������z�
��Y����
��~��Up����.��k8<���m�}<���H�7�7~�����/L	>n�sZI�^�����guF,����=�����qp[T49�������$9�_PXW�edn����2GM&hJ|�
���5 ���������/
+���|L����>vX_�C8�D�<���W��90�+�r���2�*C|.T�&�������9��$f5�kuB_�/�7w�Lv����~�����`�!j���2�p�>��y���#��:t�{�p�uj��/�Z	����0k�DW�U3���L	�+*��z�&:?%[*x�}"�X(����@gW���v��	5{�z��P����V��{����l��;�5R4JT����+Ky��SrON���-oe:�=���U2694<:o�J���N�����Z��!0�������!^{P��{z����
Sb>�3h&|��3�L�^4��f�#6���Z�X�E��u`����CO�8j�"NMxu��;��������coH�I���|��
5gZ���Q�f���lZ"��������C"yhF�~��
��0��V;m8O�~?m8_��i�����6���j���G�4V�@G���P!M�A|���2��}�c��s�N��\�xjr"7��^X+�R;-����k��
S���I�?�'���g�����>������O�����4aZ����V���!�HHH�	�}���E��\>���qt�0��+���������7��r}o�e�5�����$��d6	�7b�A#2x*�Fg����G��J#HdxA�*���9���"�X����'{	���I��*��,������yC�M'��Zl��I�PPK���<Y��B��v}	~L���o�����pW$c-]6����|���s���H�D�.*���2J�������,�no��|J�!����J�	B.35�5�����7b^��;�lF���}�$��K��,l��b���.r����w$/b�+��(��N}���^5��>�`L5�V�"`��1d������`�]�15�b����Q������3���o�t��	�������?�2��H�g�		��.�x�C����e�
�t�j��=G(�.g�����b��BB��>�_������t8{�H0t&�Ro��F;/�m��R��;=X�R5]�dwi&h/���04A>Y��m	0�>H]jEko��N���"�XK�P�<����Pj~;'C��9�Z��I�g�w�0�T����3�|���Yu����K��,�K��[
�8TB���>U�t���O	Dd�
�X�cS,�/�d��_�B�����6�����?�0!�������A����h����'�'YX2�������9����vsV�Zj�b�+�iK��L���n3�|A~�0�&��jKO���d�]�F'��a
�����6��b��po4[������e�k�XFyp��k��re����C]�a�J� ��j�����:���O�P{�d����� T�J��/��25/�ozq^���P:�q����O���)�p�����������p�q�F���&��/P^U��Nw*������X��*�}��L�-"|xy�[���4��,��q��no���W�`+gI0�,�t�y!������-�]bB��<w�^�Y�x	�|�t�Q�:���Y>���G������!W���MM��������H�d�/������U'p���{R��b	5�(<�{���
~�[u�0!��m����T�Zm��0�,�qrodI?o�O��eL��^,[Q����������`I��f�K��#?�y�1�~�;04��4T�Ov&p�������g$c5�|��(�3�3�x�`��f�F���v�q�L
�A�qiBw`%-LjF��p�a���
��p������������T�A��Q��%��~T6G������oj���dB
D��IG��=V^H@���{9�x��Nz�'O�U&D;�{U��m��;h$�9"A��i�
L}�L\F/�@P]�n�de(1:�����K��!�51��s7�:�b�����N�;wl��BA?N�{|�oc�]������>���!>���!�9S���%?wn���9D
=���q[-��a�L�
�����������8����q�s3�wjdF&���l0��z��>�Z�O���'��-|��������p�����Qkv{}6G���epD"����F�
�������`"~h��A�1$8pz����D����fj��0�������8B����6)<�ri1�9���1�<D���jt��xh�3�5�Y�����s���/�3�i ��cOt��/l��'��O�8c��b�N�.|�����<
wy�������"W�k��jU��@���
`0����9e��O{3�8�u��E?H�%�7O�O6�����h��e���T��~�L�q��u��`��9��������3�i��p�ii��v[�|Gd^b3��.�3�2]_�,��n��T��o�������ob�{7�y���:+3��|�o?GT����
j�&K
�;�K{�+h��e��"�5�U�]��Y����'���L�9<le�.C����K���5�e�)����0�#�9��};��y@;��XP7��p�h�h�e�`8���~���,��}&r���k	�fw�A��������s��t�~�:�NC��Y�.��v���wK��L;,�|;e�Q��M;�YN��C{��F>�0���m����9�28'�m`)q���*'��s�g������'����i)��P"�\�ut�\��p��^!������	��}�hb.`4��H��i��=��3B������m�c�dh|�I���jvs���	��'��(���#����*ZA8\bvW�B����i��2M/"�W?_d����o@l=�6�
,��h����L������F|�@�w}���|dR�8���)#=����q�3�I�x�~���V��RR�"���J dI}��Y	�]�{=J�q��;�Bi
�_�s��,�����n�%��V�V��:z�9��>-����Q�9�Z������=��)��)>�`���1�Ew�`P3��>,��(��"7��������g�E�i���,\tjVk3Q���,�oGF�Z�����,@��D�;���e�bo�����)����aR��t��0��)���1������q�3�5�N��YG��O�/�% (M���8��9a�hH��X�0���yRwO���;����F�,I!�cR�bL>o�#�|�4��4m�,�J����LC��_D��>m�eAp�7��
�&H������lI�N�������}�W��5���X$��pA�z�d�?oHo/><���O��*�$ T��""#���;D;�"�C��!t"R\�[�~�����a�v�Q���H��H�G��O�cV�����L������Q�2�5��Zo���������FF�����*U���_l����H�21�z������S
��0�Of��������L
2�:���\�f
��eD03}r�LE���
�#������'����G�V��76r�S
�b��e�n���<��PR>��y����<�5��fsem�R�����ID���bO���_p�|�Gj�Y`�
}������������==dF<�O[�^a�k�,�o9��H�y�l�d�+�D������y.$Y��3���9�#�7�d����/��rN�r��]���]�v�2�4K�2'�@���2	���H�2�ZM�2�2������0�\ zD'�X7��4�1�]M���uBm��m�
9���i.(5�����a>w�L	/3x�O�1��0�%�|vzf_�_|���`�D@C�����K;f����3��a<��
3W<$�,,f����
sa(�������\jF
���Z,��h�N���Xf�d�Ol���������3UX�mj��C�����{w���A��-sBQ�uNHV{X�W��q�X�L�y��b[�,
����v!�9
T�a`"r,��
�8��npK�l�'�������%�1Q�}������n
�g���1%	�������y�/�JF~
>/��H��p�I�G
�R�ae`�7���`"r�M���C�@G��@,5����r�o����������x��8�����v1T����[,�X�y�/��.3�Km �����7*���<*2d�RC���������S����=<2lJ<��
�O"�g?S�����A�����q�y`���
�6@�����A���bB�Eln�e�2���5,����b����(����,(\?�pj'����p��3�BB2���	��K��������*�c�ULzi���9&T����&IvM[Hh��m� <������J�����6j1vaJ����l�R}��pH������P����q���+cH�BM*��m}|+"��ls������+0��M`�Z��Ak�����2�tn���XD����p��>��
	>/��mJw��,�-�I>���}M}�!��UY$]��=�K��y�XL��7�>����#��m�-��Q���w��	��-
*��;�;��4wu�d���� S�6���t���b
��p(���%�_^��G���l�����H>o�R]�������3
_����e��"����3+�	0��D���hWA�@�|n�i��%��}8��Qx���������j' D���cQ�t�>o��+����������]����6<�������2��.��q�oac��C��]���dp�R���X8�Z�v����z�-1�u�o�X>�llg�L���'4�N��
0�|��t��LDC��:����\5gP��~���8!����:h�����)l_	7mm46�, deY@\t0�0�5������S9�N�[�D]�����t&����V�@����O�)u��f��v�)�p�)� ���t��R��8ls��B�!��|H������k��>3���a���p @�8I��O�)Ls

S�5�S
 ���8���L����)�5�7�DC+����X`Z(�)T�^O���PM�T����k>e���gN0yz���UCK~��V�KnU�3m.�}U��G:u.1H���J|�S`3)�����^�L
%Yw��Ta�F��'&XE}>7==�%"�h���'������Q�3�H&�4�WI*����I�T������TTF�GPi�Js����_����>)h{i������Ct�">��u>�z���{���:U��0F����	���0��ax`6hBK�$2V
�������13Gq�N*�<9�u
���Y7: �>�
_�� �R�8�a$���v5��:@8����S@q�n!�1��YYT�[�
Cu�=
�)
����
��g�hfa�
�-25��!�O��C=!Q����^�0���}8o���<�6�=����V9�{�a9y��F��v�[��4����:�^#Ld���Mt_3c����A�������?���A:�\�~��Gq��g��l�N��#t�����Y���Cs�}7�,��k�%�z#�u`n�����E��UtXK-O#s���{9a��d26�����9^q��\~�t����9^1��M�
�����P�Bd9b��]F���o������=�w}
���B������;���
������/�����S���m��������w��o��#��U�+^uL���u���e��:T����wg)�o&��,et�U�����)�wMzU��{@��u���/r��~�����vey���������&�E?�<���%�v��,&]?���o�������__����y�������=t��6���,	Nqv��{u�?�B���
�������,;�<�1���� k��s�M����>9w��]�����&A+r��y^$�O\���>����Ev����F������M�c��G���m�L�e���/���7������tt����W�J����tn�D���~���x��?�:��c�G,g����0���a��D�~���9B�\����,�:�n�nnR����i#S5/h=h����S)�[@��3=W��\��o��(^����\�$�J�h��R�w����rB�3Y��y�"����M_�Rslz�`�j]�ur$��]I�@kG�A���p��}Z�9L���� ��8:����/RkP��O�6������D��3KZ[h�d�VQ����T����L��0G��������p�l!Is=�4������W}<�)`��J��J]�&g���&j��E���;�+�Cv~��l�<���%h�L;Q��n�/MH�o�O65�=T|�J�,�?�\4���NK�n��E;��],�_�_Y��p�g"	U���D�$��8n������b}�����K��$7�+_hr�<|����j�|���N$�8^)��Li��a/&`�x�Mo4�2$2�b�R-�Q^}��]c�����%��������L���5�����- ��=�G���K���+�j��T�)���~R>/�/9�Mzx��SE���o�]����qh��A~	5�-��D�
9q��~���HD���D���b�^���	�������U�2�.�����4	�BSS����2�ioN>��Ec�od����Z�����<�iA���Sw��ojYi��@����a�<���%k���]7�BA�<�e���u���OE"�\	)�A�^���������,Z�-}�����-������A�q��!:�� �LPM����4����hB]�U(���������*���+I��f8yK Mv�{0�@�s�����tyd���M��HA�{5�/���j��^n�4(���dU2-�.�b��� Q\I���,�_[ZwFh�7Ok��BD��*Z`��k��Q�"���c�e��\�'��f���!��8���p���5W�D�������)W���7^d��k���6������w4����%c�L$���9q�W%R���n������|�,c�A�*Z�[)J�|i��z^������hg$L]{��r8Y@{_�Yr4��~N�#5V��������Z;O>8�~��U�	�@N�uXvE��u_�DAM��K��5	e�aE���+��z�i�~�e�
q�����������t��V��:<C�/���%�'��{��wo�S�u��-�Z�-`�,m�:]��(�
P)�U��rBC
IEXRb��,v$���-*[�M�(������r�����I�D�\'�����f���Z�<8�D��N�&[��z�c�@5���,��W�(�"�M�9������
f�#��e��e:=�b�;���uy����t#t�#*Z�PO��:[@�F
@[���mi��bR��_?����@�(_�wwh��FW���h^���i�%*��$�#O
#XT���6�x��u��i�����WE� ���K��|����;�z��5c��Y���tM�t����JB�����A!"�����g7���EF�������Z���/�����.�}x���=�{��6s�ha����S��2������B�l�--���O���*J`�%�z-��v`������m�K(D���[TE�$�e�BLp����:��Y��4��[�}�P�<M)|	������R"(�HCL����T���Mx�6-��7����|x��1�C��	C&��LU����N{��(�K��ohz��R-�3:���4��e��	����A�<�:(��rdztY���t��i9�;��-��g@����'#�RE��b���,�jSA��x��9��g�����g}�aD�F��y��<��
�1��d�=[1f���/���>���=\k8�sY����}I��_I��H�_���S`��Q\sSp��u��"�i_zB�]������k�������2H����>;��c�n�c�f?���3"�����h��*�&mzG�ibR���L����f��Z��.B��e!��z&K�#�?`�����]��U��J;0U7����Y�a_���H�����F����d��s�I����k������u`v���Y�`g����m��O�S��i�nt��"V�U�L�!xbg|m1M6����sP��poS��kH�a:e@�+I���X{;k'^$�3����N�vtW�B��]�d���:l�1���==�a��6����	xr������t��i��}:�[��g���g3��ZO��E��U
<##�@��gO��������7�*�]�/-����x�'�	�-p���=}4����$��!��'pfE;��Y��o�'4����nL>��28������V��h�e<!	SV�|,+�/&�f���E�'A�t��Go��49���6�'W����d�a-����w���w+������E��
�����`��^���L'�>���%N*Dt\SA*��T�Q�Pl�r�M�hR!���}�,��%8�,Y��d.�����4G���j��ImEH�����c�s�2Y�%�V��W��Y*)L4�+k�����Z`�nH�������v'iT��i���q��l>��
�f�V^(U0���W/4����~�<�O{3hM���wjc-D���4�`��O�M�,GO���k��KB�|��0�@�)�vj�K���~!!��g�������]���F!�W9e���@p�^~����\d�Q?�R!A�����`p��0$����nl��c1%J��)`�x&�3hB����/��,h��C��f��	�	���M� �F"����%���J�Z+E<%�W�6���Z������~>�	�r����AX�W���(qd����N`�������xd�d6�&���7��Dt�A%������^�i�����8����h�K��nj�0�����=}���������9���s����#�
�tO���"����FD����C5g�"�a��hr���n]o�}�����X��h��&�a�/��<<tg8X��OJ,L=��s�)WZ�M������)J�h��E�lI`��������n9T��E�|tW��>����~������GW�T������z0��s\��M9�bF=�l���v&s�>�GZ�m!�B\i���.;�f""�K�l�l:C��%O��������������L*BQ�.sU��f�����v�d�|���"�r@DM�����x�EE���)�G���m��kN��G��%?�Ld�<���R���h���L�&�����2����W�Qb���s�W��9z-��`�s����>������.�3O�9��p�`dF��]����,H�A-�8����$�^�H�\����n����d��x��{0����"K����/�����1��H�
�8������%���\Y%�QTY������}�,l�����u�X<b������@.��a���{0�*h���]������JQ�������		3:�"��a{��1�Z$�d_k�a��
I4��6�[���"w>����tXPv1H��q;�'Q�X+h����l="0�]��.;L,�H���	1M�R���/ce���0��d�[��"���t�y�%�"l��c��l�����i��K�EQ`H���A"�	�2��S�i��5'��,�L�	������
�	�O�Z�N����o^b�d�3�xG�d,�Q��br��	9���ks�L!*����rk��i���x��F����vX&�iw��l����}��8��5�����8�X&����|���|�f�*k|~���3�M���/YM������S����($v�Nh��5g�"3�H'���23������>$&d�w����C�������n]�h��m�T�P��.CMo�O���S�?�Z�HWu��������������~�����E���[�e�R�?dhJ���Q��y��D�_;����m5#/����)�1��D6����|S�?���V.���������<tk}`@M���VHbBN5�����A�-�����x��������&��D�p�6�}hb�b>��PN�&V]�]����{G�Z�z]��9-���Xe��
�!�>I�x�2U�@N�_�����s�������~-��������5��������F+/�N��d�g��4q���q�@���=\�d9]��?�4r���]����������K����Vd$����7w�+���
��]�O!�)���{�O-�k��\�UP�9�7Ok5��%���4y���A��uL�G>���6/��� �K�������AW7��"	h��2Y|n�G��;H���$y;������T���{��_\��>�#�no&��2N:Z�s��$tK�����&9n�O�{"q	Q�K�yo�% ���}waSQ+T���C��A����r��|0V	��
��z�l3���c�*	��S�`K�$�+��2����bU�������j[�����7�����j-'��6(��gR|+j��E��OC�T�e�e������c�����~� {sbgq^<(����u�D�o�G�:�urY�u�6�v�^&�v"��9��B�1Q��iv������%3r"e�y�r;��8	�(j��O-G�e�qV@e�DJ/��90.\	�.���V��"����p�b�v���[$�����h�PP{V9�9V�L�
u����b���Z�H����6�H�i��_�`Y@W��h��o8�+�Tc�:���J��/�N�Q�=a�,'ir����9BO�SQ���e�P��;�]	z�G�OQ/d��f�>�`,NV�u�����kYf��-b�'�3v#�F/�@?�#Q����r���#P�s���$�7?Fe��W5���R������'���_/�����]�
����]�B����$t�M���9#K��/Qo�?�lTYP�1Ye�Cc����rx���XU�y�U�cX�������/�M�������wA��K�;f�UdD
�w)������V�'�Q_�^��3�$���b�3���������s������{��yE�/��a�J����b��=,���u2����a1��T��uCi�������\G�t���Qg�FM�c@#�����(�}��pD��n
����)a/�w{�(_��d����Iw#jb�q�k��30�	�	�`���C���.Ne_Gj��������p�O�/MA�>/iB-����P�~<w`"1���|�
p���m�}�����w�H���*����u��9��7C�����FA�[�� )�4�p���_�D�y����c�b�h8p���B�{q
l}/M���nk�����9�B�2�#nl�~e7A|�1B:�8�#�`�
�.��G�W��Kcg�$�WYL)o����^\A]��S�:0�����$��b��nu\��=����|���N�r�;��A�E
]��CH#���&�������������r�����8�<4g5���#����9������|�������CT.�*�w����G}���""d;�O�/s����_b�.���S��^<I��0��sP���v�N�tQnV���J$A	6K'��������i3R����%�������)���?/"�!6�emG�- 1��|ewx���3�c��#��r?o�|~�{�+�[&�����bT��9��`�L�Pg������-����
�����"#A�u.%Qs�~�W�����	_�`�H���*!bZ��xN36~������7����B��%����O�~D"���co�f��M
�MS�D���{�uE%
J�r5���q���L&���������D�b?�w����1���9�kw(���$-����C,p��c�O!(��[`_������/�������@19����#L8�=��k�j�0��\Zsq��m�1G� �S/������T?w��A�D�����r��6�k�
Ddv������P�������d�v����>UoGgo������]-�eM�����\B�vd"��a��b<���w�TXD�����r�4V<��>�������_�xB��3�Ku=v
�9Z�6�B�����I�,Y��/Y���Q��;QTrsx�G���wj��E���K@��"�R�E��H(L!�"��AG�T�������u�����}�H����h�G|�B�|�������Vc���d��.z�d�����k��%_���a���>���f�� B�=��f���W��Q�gba��q\�_�Z>��98��i��b�3�% YZ]i&@��A�
ts�����������K�"�~�8�������n� *X��i8������d��8v���4h:Pp<:���}��A~�����}_(���Z��7e�r�Z��`%�@:�=�x��vM�}�'�4������Z���4���D!z<a{���'�]']TD�@$K�<}>��V$�-��k�Wa�S�3���	�J�v�����<��|!�|�]]kV���w$g�<�����LD���8�}	��*"��
6G�g#�m"��Z���=�;��� y���ZQ�����c��y��}K\"`S�������W�";ll6�`%�U����~��%V6��3A6
{��*���:�L$Y���L+I6]h�*�,���2����0� ����

�������W8	�����"0W�}�P+�%cL�D�mt��C!R�Yr�?2z��V����t@CV5!�>t�j�,y�Z��X]�����}�u�ip����U�%
�(z�����u���?�����7������m��@�_$��������������v6���3�����"���-�0�C;A�����d"�r���azj�{��"��,�o���=l��}cO#Mw�915��vU���'���<�����0i<]��v���N���HT���=����q^-s�bP7=@�������3���js��W�4�[/b�Eh����  iY����H�w�����P��M�� ��|tPe��7��^�x2�f:D�Y�Hr?����LZ+�w%-�5y��
��+kc*���1;�x0���"Y��5�H��T3-'���%XV�����[Q�ir$�O������&6}O���Ee�h�G�����bR�����FR���FY���p���������&�s��X�������H!��4�M|�������;6 :e�
,oD�����;b��BI>�����������a�5�/��W%Hz�$ck��7�����(�i�'���+q�6-��,G���D,��� {b��K����U>�:E�eMFI��%��7�bJ,�qV��0��8����;���=�����$�����SB����=�����Z���+��KrF��� ����A�H^
���r�P�J��Gb�/��,�E�DU���6U<��?r���������z`�]����l����f\Sl��z`������������������������������}�?��Xy��������2������
���~�+�]�������8�|�����!����>���(��]@�}r�r{��r���;~���7Z��
}���]��q�qAH�s����(��]d2�e%���f�3�^�����AM�8����x�0����sr�4=��DJ�~yl���?�4�c�{8�a�]��)d�|��=�:�*��Y9	���
���g������V������@�Bm�^�
E��tS��h���V���cb����K�e���g�z�yD<�� �-�:�����)9$}���r�Z��+Xm*b���-O��{
�r��O���s�i����w���{�)�*���c9�l�+)�;y��Z��5�O���n|���F��'�p���GG��a��P+-��R[2��l����U���V�[�'+Z�:R��A
����t+���ec�$��6����nC��l&4�$4��� ��h�6�tp�b�@:�=1�e�2"E��n
��r�����>y`n��d�|A5�7r4�����&��U�=�X+�E��p����d��������������2��z��Wa�dQ�\5���BD����9�������:�%�EVt=��hE�VZ�����hER
[���(�Ty�"|8�%n����&�{GS���`N3Y����zh��m���E}��R��h7�F�a"����*�j�d������zN]
&��hR�lo���U4��:�,jES�3'��4�Z��Z���~j7�	�L�Q�����Y-�-�g�K]v�ZPjV/�e�~)P0�<��L�@N<���T���x��s�Z�������cR�1f��f��~9�4EnL�e��MkAxEI��m�jg�����d�%D�4��^$/��������n[9�M+�!M����U#jZ�����iWO�_nU#���Z$T5Sn��$MQ�F1�Vo�;�z���`��dT��3�DC����z���f��S}�]�b���F�Mf��mj�(h)lj�b������r��������:x��2V��l���E���������V�<���Ix!K>N�N���'���(�k���Dm���a�!^'���T�x
PK��r�!;[�l��e��^�-b�X����\����� �<�@~�kot#,�����.?v}F-YF���P=�{"Y�z���hg,�V�Q/bD��J��5g������]Z�q��X����+���������Y��A�$��f>����Ya��p��wh��s:��*�RU�~Zr�[w7=�Pb��Q�i�r��S��LH��P/��WE�!��z������x�5�<�~��E�k{a�;�k��nz�PP��>��AH}�hz%���C_l��i�'�y.����Yo����]���4���~G�\Cf+���EI�6���2[���<L9���+*F@��vvn7\^�=n��'��s��11�'�T�U��,N(��D�5#��J��M����.-��y�lH���Wt��n��o>Ou���e4c[����'9�zg�PN<�������:I���>��f �Y��^'�_�W$��39�c���[�Z����&I�����[��%?3�n��	���������E"���p�H�k7����K�[�lA��4��TG��`fd+J���1x
Y{3�m��#��~���_-�>���S����-�,��M#0��A�&����KM�������y�$�13W����*o5���XU����@~}U"jc,m���Jup�+^t�,��xxSB��A"K~<�.dY�Qxq�P~���v�W����+tS��oDWW��f"A�"��W���������P���2\�:��y��E�������T�Pb�Y���PG�����<�B�w�j�/=�� m�n��s��'��,/tr2O����#����v�;CZ`:>����lbkJ��u�2S"���V���5[f�9����{�Pi����[}�K=���Hh�7�����&V*�s��'���u�"9��?�� �p�B(#e���6#y��HD�|���8:�)�?/�*���6s���^�1���a!r��}$����-0G��'C+��LCi�����Q���IP����I�qc�(n�!���p����0���CA��#�[;�3$Q��z�*{>��-��czRwV����o���T�;,�\�:g���!�$Q{�n���&�WO`��a��yo:8������wm�
�����2�$�M��*�E2�LULh@ER8T8N��Z���.�$�Ir��8��?��b�7��ZYnf�T��q���E1�Z�
>o��$���
�zB���k�qz�uALM5���w�lyx�J�o���;%=iw7�x���a;�������,�Z��K�p��J���7���#�k2���O?"4�-�e�M�88Ww����h�t�������*d�{��"�s��+����a�wp�_5g(������rb�=��?uE�#xo��A�n�}i�LW���:���,����
��8����v����VEsH|�OE8rW�N��;r7�&j�������?�A�D����
������%A������%�`2q���rN��*����gT�'w���z� �)����=������s�xx�A���r#,H��=��4��F8���V8�M�
z�,��G[U��'�����B��zu�
?��F���S<��}t�������+����]��4C���������+5$a
��D~5�h=������I�
p$p����UR�,�����������Z���LFn���e���L��
�6��yZ�A���L��L�e��|h7/���;v�N
�J
R�Rb
AK�vz��j&�[�E74'e���Q�2YO��k��e����"�I��s��_�:Pzx[�Tv�d�S:3��WB'��������ttA�c���4��	����3��DEr�*Z��d3&�
�y�
�*<�$����0{t\?o41 ��sv�!�,����(��
������\�G�����&-���3�:��_PLg�������M)^LU��?Q��(x�g�j��}�p����*�3�m
�F���s�Lw�7@?`�k���O�T���A��ul��<�:J�f��&���`�e���d5�rVi��aKuc�d���i���G

_�BB<�������8����@�$�i���O�}%���]R�<��,v�y����;�RBI�wy3�)!)������S��|"��f���T�dj�.S�
��i�Zu�NHp��6�<F�q:���zQMS���8�y����8��D�us&�l���9�kZ����>/&��O=j��id�8^"�k��.3���S�T�v����>��R�q���VY��(�n�l/����B&V&��t��TsBb�K��?Zy�`���<�q}��3���4�M�(���Cx}���Z�O[����iJ��2����)%��?��jt��O_h��nD�;����h��iZ��~�n�
%������y#�|���|�!H�! �F�����H�����!}�����
����s~3������3��d����<��I}T�Y�a��_��-:������c,�������/�3B�K[���-����%����'v�<�I���R���-�6�B�4L3���hw��m�.���Dl��I�DC���)��A�����H7{TbR��h��>���msT�
��cVT��
{0$�+LH�YcW��:��f�����1�����z�H��}j,p����X[+�3xow����$������:�N���"nI�x��e�+�{��6/�
�����h�����n��o��]>��F2�|��0��Cy���X�s"�
�����;�����1�	%���Yb�Y�H.;D��Ld'CJ���Z��vu��)��/P���
�v]~�|f���������w�0!6t���D��[o�H�-��������}����
y�x���(�oa�23V�i�z]�g��w�#O�H@���v���P��C��Yx\��9P&]����$`94
y��
��rA#tHU����,b����;�OZ������p����L�-������I��g2!�M����VI����A���L
��u���5�`�mf�tU,@��x�e�e3��Z!j�l%�9���[�~c��?1/�y��U��O6��b�������:e����V�S��<Z�����%��I�q}�����\���vn��e(9���;�)�B,W�s����G��e�C�7[kgfZr
��1HAb����� �����mb���b�v {aB�#�6o���_�+,�	c���5 ��vH{ �)�f���A������P��o-�pb�!���Flp��K�\����M�3�W�@=��2����I���r��=;�\����oFe��M/����oS�./�����^�
|���-x�)60��%�� ��%k�q��K<���f�����hn�k�T[������8k1��yv��n�&.D��*r��p�B�9�/1��}F����9_��#2"�u�L���}��|����
f���`�0����}~�B��&K��NmQ	5�fy����n��������h���eW!��t��4�lZ'�9D�>+#����V������;�9x3!��Gv��/�e��f�	�)��p��U���7��Z2!6rF����.m�����':k�s�4��w�����w��-}050��F4Q�B�1�<�a�^%���G���Y���?	r1��;jO�kF���
8�#:O#}�[m�����!F���B�&.���\��X�
s����[o�	�����p����������d���]��WA}"���H��X�E�-/np�V����I�$}�a����~pZc������y�=��{/3����E��wX�
O�Q72<t��������s���x�.?ww��q��?�����E>�����el��E�??������??�����,b��5���������?��<�����?��������|�?��[�5��g9���1���~���+������Tk��G��(��R!�?o��Z����j�tZ�������a��WH��};��)������!��c���b�;����!�������G.�Q��cN��!���Tu��s��Z�C���b�����!��{.����������s���?����@VdK
16�������d� ������|$;���K>�[�G�U���Y����G���j]�Z�*�u���/����_.����G������w������O��S�n��r1�����b��Y����w3�����f�/�������}K��?�x����d���O�������3��[�d��������u��,}�{n��~�h_�1F���b��y��E���1��e�b����(���Q�-;�h[�-F���Z��i��E��c1��e�b�n�(���Q�+;�hW�)F���R��Y��E��a��O���9��hl����&�
�{� ������
�{���P��s��Z�#����K�;����NE�{.�Q��<w(����p����s�{-������{�D���
��&"��t�4	G��x<��X��5b�d9�+�&2~�������x#'�H�~�
`
)u%��C������|��`�+	0��/�{)��z����~�;(H��[�Z.�"}�'J>�$m�P���Q��l��G�{5�����|��cF�����-����UU�V\���Z���u${����DY�	y�k��Y�T�&��v��������1�)�H�X8a���U����Et�!�'��#��c��tK�Ok��G��^G�n]�b�(��LZ��g.Y&e,��v����s�����c7�S��],\��Y�������Y���t� Z�Z�O)�$���u��t9�C�U_��bc����������N�f�����O��c��X����A��v���a�wn�W���Z!{4tQ}�����2�����o
C�Rs����"�U�+���V������388D�[_��������M�x�H��6�eE��D��d�O}��\2�������.��9DF:g�,YlO����M�LF�nHm�!G�j�N���49��������'W����d�X��A�:���P������������ai#�Rg��+1�v��VQ�.2K4+���y���y(J[Z#�K������`��$b�G-�KC:�I}��������	q��w�h#���Dn�K�!h�q�C�@���<=2�|�	��b���v�+��W�1;
�;��qk�J�,~Ig����f��$�%K7�S�M�wX5�}+�7���(�V'��3������I���(�(�1����Q&�2"#�������Ar���K^��p��|�!3�Xc)������Hw � ^���/�d���DJ� ���*Q��H�.&s��%�8�� i.oY3aVc��;�*��l��~*��8N7<�%[D���@�:�~u="��iA^�a'
T�+.�^���A��\���\\UI����U\��������q����-I�<Q���+q�������c�	�/Y�)�q��bQ�"��j�����$+�Nn�)��L[%.c��*�ZWt �Q���"?�L��y��=�)����n1���x��Nu>��������t��M�CtC}Q�mb��_7�7z
�����E������&��OE"�	+��w>G(5�P{��xO�3_A�2�\��s>����.k$�`��������������Q�
E�G�_��r=��� l���?T)-S+x�������`J�"��V�!zU��
��B��"j�O�W���AG	������=��k����(��^Y"[��5i�V��O�H�K����E�������G����^I�5���#�9���%x�=Q���P��~8��������#��C6J��������1�����eK�L��SM@�#�����,�	~T��D������b����|����M-;v��.�.�?ec��o#1���JZxa���Bon��y�tt�n.�R�!J���e-�?�A3�K^9��a�!�cQId��i�'�^\%z��*8���g--��I�M��O�/���%�R����%?Z�f�p�S���>��d�y%I��7T��q���z���
�'�����:�4W�!�SGJTdk�t���@9����T$��=!_�r����E���nm�k������T�y��}�,LC�c�vF4'O�+�
�^f�*R�A�}����J�,z��������*Zj��<����U�(i~���q�i�'>.�����������������Pg*��w�*����4Cz���c����T�T@G^�6�rd�\D����o��P~��	�9����/��}�1;�5��h�D���P���y8�$]�K%��30��5C�AY���J�����H�"���uLFv/|�JVsC�M8�=ol�������?h�Zu���D������������\��d&�!O��d����t�zx<��0�Vb4x������B(�����S�����
�����3h��_2�Y�LT��H�"� c���5�y���~�<t�����>j�T�_B��-��}!f0%b3{�)�u�l�\����Ig ��&�� �Jy^��w���$�%E���T{�n�V�5u�D�dZ�C=�V���dv�����MaK
�`�7i���p�ry���Is��lj������4��Z�r�;������r�1&�����X&�r��s�t���2���@k�M����Y��ic
�\�k��W��o��
��:W�����uJ������y���&��q"N�xp��I����&'��HdeOm���p��3�d��Trr��z���Bl^'�p��Hj�f|\2�I�"a��M��L#�?/�'�Yv������4��e=�n����p�����i��2?�\���������H�e�n�����H�Qz��4GC�v�r����/'���u�|�D����%.[tr�c)�D�$���]�q�D�5+�EYt�O#������]���yz����&mh��=I��Q�x�����q�()I�p������65���5���1|I���#��TR��,E�,�7�/�����;q��3��n.k��������k���_��my������w�M��C����
�x�5���}?��aW����3�/��E�t�o�������|Z�%��+���D��:���]�U~���Xs�l�Z�L�I����T$�JV������w��p����%������$�l���bQn�{Q�m��P���Z��v�)d���h������
YU��$��W����"/�S��>��/��6�-J��U��B���[� �<���(���g���T ��`�:���/�j����u���

`��z?j�+j�@}�)�1�����%���)���PM9�Q��pS.��	���BI_��W����U��
��G��3��0R���(���,�D������Z�n0@=9���$`|�hc�X���D��!+�M��^�%"-i=V,T�)\��yh������]�i������|}�����m�fO�I�l�t���x#j�����`�t��-���M���Hg�����S��Y�����%�V���>�V	�|�5���_A��^h�jX7�\�y1<��.���K�3�+�kv�Te���[�=@*��re�����M�yE�zV�=��m���`����E�:����S�,Q�0�8�&@�&�����JP�'�����|8M�����W��4�0Q�)���X)��������$�B��\��>-]�b��i������Z����|P����y�`��>�''_���p�{&��>������D�����a����g^O�>���h����54�����g7�WP������T��("�pv�_�y������z���f�)�����Bh�*����SW���B���8,�P���GS��	������bp6�tY'8WY]��Df0_wO�@�v�����0��^�������W����}VK+���'��@���=D��.p�u�{���������
�t'�\��7���5MVs���L��+Z�� �h�ZEK�O3`��N�#D|����t���P
�IV����';�<�
��
;�G��3"~�,�����������V�*{7'@�����F�$G�[��5gz�����$�,yj���4 ?J�A��o�*!Kf&��Jz+���;7-��+-����4^�,�W���T��s�xe�4'��dv5F��"Z��
���h%F+�D$ZY�=�\�V
���r��)X�����S��c��|��%�.Z������+�B���%_���Sf������u����L,/��]E�AO��"!{���,��z"30��]E��U�L�M]��)��`O���I��D�z�@WEi��$^EmS!������$�D���#���
r����0�j
n��KY���E�I��9�9����[RxshF�rx-p��
F{��(�q&15���^�1�7/MX��}^��#����(����35�W�*�=0�7��{��U$-p�l�����
p�,[l@��"��&�%V��6OSx,Q��v(�<�9<2C�H�G�x��	�$^A-�'�xEaK3K���;�����E����\����E�8����;!8�/t�:���&`a�_h�6Y�;�J��LH4�	@uR��(8�������):F+�e%K��o��u�-�k�|����]��g8P�S�9��.�6pa���o�T��+��-Y�j�-�G��/_h3��,�c<����d����4���?.���/j�O;�&3x+/t`��f����4G������^���D��������)�%3�����z��iNP���������RA	�}]� ��Y�o�{�U��t�9%"�o���/�l}HK%2�$�2vw
��l8Q��/2�����>T�l�-`��&G5^�������(c�;Hs/Y�����N$�\�M��k���
�Y�&����7;8;��,��B!�}�?�����c������2������w*���hK:��mm-�	����(��d��ghy������3n�WC�
���D�Y��Hg/��+M�������.��;LA��2?3,R!�����W���,_h-����6�@��x4M�[}��p���\�
g0	N�.y�|�2��A#R�k�O��)d�W��'��Qm�V�������y1��)���D��{��w3xg*\t:e�+-���f����zO��]��2�O���fk��6�H�0L�Z���WKW���
���(��6)1Q��?e��3�F@�p!NA��I��������V����*��D���j|w��?o$]�f#�
�?��}�������6v������[�����M���om������(��u���q���[�:������,o=n�Neg���~������	W�����7�5�hC��V@�����N]~����y�����1���%��H�g���P!K��|��K�������	�z�x�2�
���	�����CEM���Le)M���P������.|=�s���;a����)�X~�	J�i�vm��u��N�B5�!�����M/T^�1��%A�������u�FE����-m��8w��,\��8v���g�N
�!�&@c��f��de�R}�c������]�$�c�������mx�B
B�)�l��f�m)pE�W���3q�E"2"
[}������7w
�������}���p1}!��6��������H3$U�FQ��w��u?,�z�o��Yc�-�2���~���xA��B?���tbs	���]���]�7;oJCB�|�g�-"���'��>< |D�/SPX���;�s�)�.�X]��1zxE��u`r�Y;��N���\kz������!�a��fk_cj�Z������B�lhhj���
��QoN�>�{f$��L�e�?�e��e�t���C@]7~��
�����z*e�7�A�}
�Z5��U'a������tz���v:��_eQn�@Q��F�*��V����)����mK@����2��z���o*��!��Kl�T�'�Z�DB���?�Xl���P�=Z1$��:�8=���%2�GR��'R2N��pCoU�X�T����5OW��[`��~���<!�<�^����El�U"{��rQ��5��&���q;��U����P�_����?F��Ls R�1��-�Nu��^\F����2M��Q	��;�f�dl���,�����E������;�J�G<8X8N����W!`A+����/s�C/�
���
�pQl>
�P��L<l�c���z�[z��U��>o��4� o|��^�W^��/�}������u���ZL:��H��b��$bQX��/�4�����Z	5c�p��-	�a@E	����P}c��I��>et�em�l�.�[���>���R�]��M����ak!K>���ZT)��)�����+i�1
�����&��fL�VNn��j��o$�x�9�wlf���(\����,������� <��M�ty���e�i ���E K��g;~k�3X��2H�|iLD�io&����~�a;yU�E�q����.��{*
����j
i.2��!&'<�m-`FhO����4�4lO����/�Y�zxY[��/����t��lT���� #f
?Ee�c�u��?:�W�,�%KT ����?2��(d�]��^���8��Qs�5�>d�g��?�2�Od�d����y}�\��f��z�*Qs���W���~BV�<�`��2]l�M��B��(bW�~���s�^'$�P���$OQ��v���o�e��6X5���L�
V��:'�;&|�9�:�'�+���Ll%j�"����bWzn�x�~��s�� �
�oqT�/u�����8C�U�\����)t�l����|��~����')T�9�*-����j����@��d���L'�60�:4����8
�)�i8�� h�ZdI"�7�u "
�6�3~�eF�����Ys�<��',�����%��a�+��0�y&�,��d����I�oY���HYhF,xX��0/��qk�P�Ib�6��V��E4XU�V��Tg���_�i�)<s�*f���3O_�qIi�e���G��YB�#��J0�~�$^�@a����H,tXu05r0Q���.8�eL���S��X ���N$�B���]��Dv� ���v�M��F�I+���8���E,rrg�bVo&_7,�9�
�(��hc��/V�?<Gb�������s��iH�8��"���}�k�;0�z�!h0�1�z(w�*�&����F��3��3(q����}��a�t��)�������g"H���%2�_��[�����=��65����!��b4�u��l��|!fh}�fvB^�r��c�5�7C��"b���H���4��w��fD��"L9�����+�/S�-y��?�P��ZR2:�d���f	<G~��d�/�`�{(��@=�%���*�F������+,���b&�3_�:bRW0�	H��I�v�X��IF&����
r�(#�l��i+�5�`�8�`���z�����/<m$�!?=�)��<v�<�E��eB�a�
����3�L��!���Q	��7Ij�~����]��������9�I�H��3z���<@�`�j�$�xf2��'������^�=�����	�\l.�G{��>)[�������>�5!�1g�����a^W���	�������:�2���l�j	3��>���N�U�Q/�D�N>��z6�����	�*O�Yw
2�6i1�G���i*Z)m.�����P��(�����<2u3a@L��Vyj��h� ��,�Y�v��qh�%v��xk'�>�i��f�b���H����y(���aa$����5J��y�C\"'�'����5MrK"��<����"���]��������xe�$��`��7�\1�@n�Sb(^����d���F���J�k��?��E���F\������_����;���3��;~��N^<?�
��@Q��Z�I�������P'������$z��L� �j�t���9�4-��_AU?H6z�����m:!�z)��SB�>t�G!�e��q�������ek�����E�e���sj�uj�mBJA�$o3�E��O�0�n$G|����a9'���oK�$��a�H\��/�mz�ns�
j��$��ry��x>o$Ur�������J��7�U�
d�~Ksdp2� ��x�����
������Z�d��32�����J,Y|��8���d�I��A�h':���,B�Z�*�����`���b>�j��r��7�����\���vm�p3qB�h�t��yM�
"���
���(F��gA����2|����h����~^$�|��K~��3��kg�fd��dg����U}=�l���aOo5���*@����tbs�pl+��HL�)q��Zmi��[��2���P�d�o��@,e`�Y	S:��]xE!aKfTL��T)0�6433/�]mb��eI'�_���N�%����Cn2�Xr8���eL'���xP��(eY����,���K�����p�jI'du��Y6�WibF�{�j\��1���%�5G��tF�j�������b����O'K�BJxTKz�LK:#�	��5�������&�|���l~��d����nJ��������2������'c:!����No*b�N-C*m=�h�2���:_"�����AZ��D�S���:�����OB@U�iJL�u:2�1��$�d�/�����E /�wc�d@��0��;�(n�����e�{�����Ql |Q�$�a�H�Q�z��S�^J����"��	*J� ���aD�5Z�u��c���})����4q��R=K$uwt�%�Jp?�`�dO:�1��H*���S��	E0U�'M��~^$�)�����6Td_��P�\��Y�SAfl���������F4.�d�d_��}���"�2=:�k���c���G(�"�JL��E��
*�u�U�h=��!%�2t`u����D�;��hlB��du�W��9�QI�Ri*J�����W�R���n�q<uc��{�p�_�
��P�EV
�v~�U�q����`�?tw�~����c+���	yE�ghQyK�Zy�&��
���v0O�S(�r����<�����k�����9�JI��)�v���1�Uib�������I��#��k��Q���E�>�n�I3��dW��U�V�?/"�2<%*x���	��t������o�7+`��a<w�0������oa�F����
�W�`�	�o��},sQ��}L$�3/��_��e�����Gf���T�����&��o��sj1����he =w������bRs���Ro��L�eY��z"�h+��z�yGG�J��#�pS���������
%����G��
�A�/�G���R�m�hs� ���`�?=)f�OI����W,����
$���
����V���x���.s��H�\x��N�>#�TosF���j+��Tm>G��?v����tFU\��(���?T��x��w���(�,�G�����5���9�����A5.v��w�����FKy�'Fn5z3��%�&����h��4����C_<��bX���=����/��:�(z���.a�!�nR���~=���� |�2��o����(�p�9���-�P�� ]h��Md�DL�#�OJY��E.w��gR��
{tP��k9&�1��L�1�IP"p�����H����K�X��$�N=�-)�(L�"}�|��m�+�+������t ?/��%P��T����aw($W����V�Zr������7����N�=����)��#r�����U$���ju1��-X��|�EQ'��:���dz���]�T�B��#����U�%�vEUG�qB9V]�x4C)��D� �}����m���x�tDE��Z^>����Dq�4u��X��4����%�@����4���IR��:��J�y��
`�AP���!�1=�����{��"3������K�	��r|}$1��/��U�z�pb��&��s����f�2�(��	>o��CI:S���k�$��`���A��|^�~��8'��)"#�I�Y^(��kL�^�����������zVD��c������:�����v&�h��C�j��u��$&��|T$�g�Tu�Uy	v=��|S�G���!W�^��n��R��H���n�Xj=5��IL
yW�t�$�������[���I1���K\p����f�H4!t3�'�<sx�$���G;��[g�B���z�xt���������5\w�\����u��z���.������!�����\w����}�>��xj��},�����X���?����S�}�c�����+s\��"�����:��u�q�>.�%��W�����F)��t�#HbK�%��tqR��>�.�q��s����������?~�.���]�K��m�����w�_��?~������}~����G��.�h-�1��������_�������������������[q�$�.�v<�V��������:��72�������qm&&�,�����L�b�F{�\h�����V���U��F����$�����T�uc��J�hovZ�R��7j���N�g�<R�����<-��Sl��g���M��N:ki��G���s�;"�6@@���t���.'.�������]�/G��!5M����(b:��"����:v"��>�hu��$�����Y:�����z��9�R��&f���
=�j.���dITo�<,'7��F��&d��l�^�u���P����G,�H=k�3����[�;6��)�H"���,�v65��2�#��;�:��h'j�M����[m�)���n������Cy�������n�uBp��o��.3dO;kO��_�YkWT#���R���o�@n��������������}�#6���{�1�H�����DK�rv��cWN~��]J$��*������g&-��������F�%Y���z�������g�����;���n��Ek<��-oj�(�<��3��*hX=�}�l7d����O��o���?l�����6}�PSb��
��#3����^�i���	:��aJw�x1�$o���5,�XFr�b�R2�R��!�
���yg��<F�f#�W���(RHa��fd�Y��VG������j�Y9����L'��f�/y�?Rb��Nr���t_`m��x�M���������g*Z&r��pbU��U��Q-Yz��o!w�3G��~�����g;�Jf{�H�5�&�,���-I>b��3`����,������Gi�P�t�g|����9��Py���HLV�H�����!������hQW����e���kl�Ef�bAd>�P&��x�����o��-���SF������o]y��t(smG��	-N�(uVaF�����W���j��G���J�����%Y�t�w����~'PD�7�#wumhz7sp�xA�{15�/���-�M��G�����X%�"b
�v.��I��
9r����= o���S�sh�"�\32����������s�����}��:���*��y���[� �hAq� z�����h�����%�[�)r�����R����y�Q�'�����L1���
g�����'�%9j�r�<1PK[���3�8-��Y�A&�s�|k������� ���p�����h���7�����?'��	- �������Z�j\�
�jxT%G��#V(v����^|-�Z�D��_=�
�pFN�R���2�������H���������]1����=c0��U������9�����O�y�"��o�	6f/_�q������6{i����*������!������d������j���a��;���M`��P�����e&2�:uX�������d���G}_�\�/ ��h#��jf����U��I��/�����-�����i����e�m�8+b�9����Rt�]�'g1�����$`��mtF��v�����y�[�~y)��Jh�;�0�tSt��3j}���G����;4##��O�	bTU:��C�z���f�5#4��[y��A��������\K9{@�3Bg
���58��o
pQCIx���A"�L��;=~���a��AW& "�0��KD"k�(se:2�6�Q�3
���������=��u�����p�hQ���O9d����K�Fbr�7Z�����4�=1�0��\BWnFL,����G���#�K���/�5'�*6������{-	8��T&�x"EV��Tf����Q�'��/���6%�.
e;�)�~F(U���&JNUT��Q�E�&d �Gz8z��L���v�PU�C��O}�h�]�,G)�R3j��T�#;
j�H�N�i�)��w]-���`�(R���Jz��X3i����?c�h�P��)_�3"���Z�
8�q�(��iB��z�4�
�W�g�<�'G}�a$��P�������5�YK1y�X)�����������C�n����t���Gy��_<9�B����w
B����I���4��i-�&iN��f���Q��e��AB�=����=���mD����~t@�:�g�v��zBV0�]
��3�h�]Lo�����@3�����O:�������E�C]�����3���^/|�S]�g����U��zy���}6�Aafg��]k���L���D����}]C�MP�
;� �l"�Y�bg�UQK��)m�UelL�S�:�H�Fb�����Yc�%4i��,���d5=�{������7��,h�����M��k����sf�{�=9��3�DMk2|~����89#1�����T�����t�
�i���t��;�e���d�F��k�z��9b@�)3[��N�J GdP	 ����<�1S �2��7�$P6�2���|��9L����%��+��3g�v}�J�5�[>�sT���9����z�!-���?�a�{.y11�6#�3��aY�Sai�Fbr����s�z?����r�l�����@�<Q�'zr�@%��>Nk-�Y���`#��9�����`�;^�����'��L'�v{��~�V
q�P��s*�}._�Pl��Km�j�H����}�bVn�����N��!7n$Y�[��tY�jEx����n�X-�����R�4��xCK��K"1�����;��5�/d��n��+a�
�m�;�x�bN���<��@K��t�
����w�BT0MS#��!��L��N������m��;�����]�4���p&�9���)���������<�`�9c�A=�H �Sc_*�3��y7�LU!���l����3P=�l���*����������^�uS�����5�"cA���m����������+�ztx�L�3��-N����/d��&@Lg����gy�m��������B�i�=�O����x��[)�+vQ���%��E��-�����r��`+E��j�'_h~�ATRgR����O����N����fC{����9f���Q	�"�����'|fT5�������oE7��h�n�F2������h[o�a���UF�N��Q�2k�*Y�nt����i��"��'�yH�%Y���^�����$��������'g���%%� ����a��������}�^��0�4�R7�Gd_3�X��������������&�����1y�S�^���������n[s~�����Q<��)�������g"=m[,��nOdk{.�@�CU^��U�l-��
} .bp��g�I��y����������/Tj2������28u�m��k�^���i�5��/�Q%�u4O�#o���K�&VaG%L������7��-��A���=����G+[9����c�C������\�r���W5���I������/R��2�4Y�7�K������yu-i=�[�Zf����x l{Uo9U0�3�z��q�
5�$��Wn�/W�����-��C�����h��1)d����Qo���'�J�?�i��exC����
,����������fR������T���iL�l���M��K>��ak����i��o���O�6h�}���e�?�����S^���"����l.���hI�D��f�����r�@�K�P�����^h��R��_/�K�N��}�����(��m[�U��p>@YX��(����Jo��z���G��w�!$2�����D�X��o���b��>�LwO|4�
:?�������}�i|���Vh�n�g�@u�}��/���r9�z�����H�ov15%�����z���+�^��^�P��_�3���'d�x�6��������|_
G�S�dq��M�1�4�}�+�_Q�����F|�M��IG/4S�-7��p�	A�N�{+��.���;�UPA����M�L��QDk�������+�)���2����j�0r�F�s���{.wj���>'��N�#����(?�H�����I]a�C��XicY��8&��B�%�ni�*���/��ur'az��I���b=��DQDK�m_5�����I��R��C1�}c�L�l������%Q��vkh����G��Q.zz�\��I��a��S���x0�03��G��U�&����������GRd6�}U$~bC���P���s���T����������l����Pg�����#[�A�x����e���/����3r��?_�1#������rmU��K�P��|�8�G<��>_w�}�"�|q3$O��O���U�����f��������n���|������*/�nkM�.&7��|[,w�wl�\��J������nG������(s`�%{X�P(eT��'��A[���d���r��3���(I~t�1�2�^�*�������;����4m��<�>yq
8
��{U������kqF��z�M��'���Z�|��|rJ�cO���X0��yj}J��GYV�H����g���.�������7��nK�
��5us�gY��RAyA��AInd��@~�>��}�H}�d�|��e�~�v����+���M����;��Q�,�
H������8�S�{&�ls�g���o�������,6��3-����A��"h�O$�-�@�s��Ui�4���������2�<�V�O����e>�w�&�?��4$�;���^Q?��O �n��$%��r�� ���c*s�yT�In��~�n��O����y�~�D�"�.O���w^����d���~�R�s?3pG��H]�P�*c���Lw��Y&�M�l���d(���x���L+{��_
�Nxe	�����$���r����T�����i����F������k��fx�7�,�h�8~��Xu�[O�E>��x&atOL��|ja^t�D����������p"U��-��q���Yk�(��������YYO,���k&M�NJ>R��%p0y�"
��V�a��?zq���ZG�$��us��=�HKh��K�?�M�1;q�]��|BV��w<r� ���}"M��s{^Un��R�X���$7�!RvG�4���9iM�����c�^C��@q��{��&��)����S�����8`kX����G���1�|1�����a����'�������K������A^�h}���<ei���L��`%�[�����4~.kz��{a'��k�����"p�7C�1lu+(I��+>�A����'�fF�k�pT�gX��b��Rn����7I�+�������G��q/��-�'CV�����&������"E��NW��8�@��\��;���w��D	�t:jk��	���������+��C������x&�V���H��VBk��Q��!������*��|��2�Dq���D�NU�����L�iMn.~���-"��L2���|�
#n��?:�������;:W�:s�M�7\���8�2C�5�:�3v��{�S-�=���GGP���,��x"U~v<P"�p������+�rw�;F������mM������lV)���eviq3i��S�����@�j=(J�r�b��)Q���g&������S��0������R�����
OG*�,�0?�2��+�G�q��d_���j�q+�@�k�^U��4��yw�G�8�WI�=����X��BD/R	%�e�_�A����?�� Woh�& �c� #����K5F`�%�X�D�?�(Y����w���w�L$����-$���&b��������A��;FZ1F�kA���hs�B�9P:�"v���������DLt����P�O�����=����z����r����\`�%�>`_����I��������-%�~�sd����8�o:�����K��L2E�rz��e�|��3��%6�����V�%�r�rW���������������7�m�����mjq;f9��������|E�p��'��&�(�:���UMA��fb��UD[�s�HSZo��]wW��9H�=�l��G�j�aP�X5�@i�Y
���� �L�Q���)O'�%�a���_9�:���h."�W���G���
����z"������5ZRI�-��s���%���������(k
�	cW��A^~D�#,;�$�Te��0�Gg�����#��b��>�6�"���\�����C�U%� ���l��f�
QY�&F��7q�)���gF>�w��v��*��Y.�X�eU���h��}s�D�X�od��e(����l�;^��a�"NM������;�lU;S�Y1�^8K�mB�1�����gb��zn4���T���R\�qw���+k �U������H��Eb�7e]b��j��$Fw7��)_��WH�����7���
3�)�<H#�~A���<���������4��������}�Xq��^
Q���2�)~�b��/��������4��$����Z�	\�$��s��F���a�v�'�'PD����m������(��=�'z,��Dnz4�4E���W�M��(����d�1�(�G�>���m�s����En�q����Q������S@5��9PAkL5b�nnv����#x������,�W�O�������j�>��W��J�A���f,�qRk�����):����FU�Z
��OQN��Ywd��)*t����<�K���B�iz���P9$�e[��2�S��TB������	pGjg��"���`I��
���`��s6���'��������X�$3+';>���L�<���+�MG�N��l,�l�@t�����p~o�:��W�n���;N���@�]'�7���m�M��)+��}�a��g�"���U�iMmbe��V�
�����%o���F��V��j�9��8k?��l�.�`��E~�����$�gB���?��
�T��M����9�	��7�Y���	���s�2�y��f2�Zo��Q>8�g�i����&n9/6]�U�v��v���7Exwk�a�#�:9������]�/89��>r�5�'��T��%�+���Rj�����^E01�"�(i<�F���jn������FX4�$�
��O�T���P�M+� ��~f�v���.����(/b��a�k���1��A� | ��9��Vo���?�T�ma�C�:w��[h�?��@���"ioB�9����(-��N�&o��7���N�	������Y�6������|sB%� �8�m�v(���0�2�[�<�_�z�/X��r�y��kr?U���z��f�	��[��G{?386R\8�X��mJ�@A4F�3��#U��y�x�*���G�EC��["�+k�9D���W��������3/�l����@���te%�hM�y�0��4l=��.v��_��o8h<V�_x�u�����<Xb�Y���@.�-u/Wt
������-�6O�:�
�-_�G"���H�5�oy�
�������iC���������������������{i�������%xt$<=�=�*��g��!���5\������zb�����M�h#j;9kv=�����3��~��k�7k����V~
��F�g&�Y	�����#[��x�u�����?��R���[�L�X�������31���y��d%}������>��E?�e�����!J�������R���DL�v&[d�s;�/�YU�qzi
~g���K��Z&�"�.���xj����J'+�+��J�z������z�oL��zk8�`f��">.?������5A�-n��W8�W���^[������O���2N����dZ�	�th4��0��@��&��u6�����$C��M�t	|r��/-s�=?����~^���a��kU[��/�z�t��F��6u���Ra��gTgd}�t	>�m��I�6�BD&�d�������0�Pm��<���)�#�:!%�L�z�C��C�In)��*�W�:!OP���.EN�2��eS����#���eFiyN`5�j�%yAz?Y
��x���)&����0�����PX�IK�+4c���,��"v�&u$&{������E=��2���^��Rg���-��7�����	�r�9EG�������[��4��.*2�)��Ts:�����Z�����N�k��MyZ�;���s��}m�Fk:"��`�9���������]����W������4��/S��1Z�1
U�5��t�x����O�:�dR9�P���yf����a9w1�3���m[F�*
�:�KI�@�zo������e�
m���I��gy[��
0��@�z3D�TG��Q
����M��U������x6�m�V��{�����*��N����������L�zs��������*��:#����,U'WuD._G�<�:#O���l����=m��32 ��J��_~*P���aW�M�W�5��d��a������vX�M���E�j�[�V���5������O��s�;4��K=���e�T�bS�5����b�\9�&5��Y'G-F~�I�=������z��K:�*+��
���3�%Q��4�����,���xJOi����}f�CN��x��CEs#W�r7��#6�dGt���eN���3o@�_+	g�9<�6����,�����eIt�yRRY�:���L	�L{���[�����,���;t;�;��
���K�:t��T�/�K������#���T�uSg��P��:�FZn�Q%���=#��Oi��K�
�����4e�L����,�|1���.5�J�#��G�;gon.��|�Xs��2�TW��\��&O�*?�����(�kF�����t�&�`|�[u����3@���?��Y	��>�iw7�j;���r�x2�������A��?_l��c�+�Y=��_�s���{h���������]u~��;y������_����:g8��z��V~V������}���"4�MiZT@gxkP����	Ao�: p�N�uB�w�V�����]m��U�}(V���d��y����T�����.����z���y��J��1����%��I,q��%�����dW��q�
�hIf��X���d���G�$Z$�D�{��<d�FA����Y#aUcMi����\[����f�do�Q�G�Pv�	r7�o?����l��7E�5�OS�ee�h����������"'�������*p����n4|�eF&sp�������3=��U�f����0�H9!�F����w,(D���_������X�_8��NL�2m9yA�hIVn�=o�@�g�Q%����AG��#&M���=#�Ku�C���"]�kE�7	d|�L8�:Rv�E�����~��3#��1�M��N�|�3!tv�^dj�]Z:���������BL��"�3��|M�2���R+H1�2��9tdD���|�^�3�E����9j�|�,��y��Or*{�<�a��+�-vY���T�g7��.��;x�����������be��0���:T[���#�l��@�Y���C��������e��Z��U�V�Bt���gb���QrD#�g��-�����=A���Y#�]j�	)�R����@p/��B�g��tF�{�o*�Tj?H�m��K-7��4�FY�]"Vnb�P��ggd�8j��q�d�R_��}�	�U�K�������z��������u0F ��]o�r�S}!O�����	�[-,��w�B�������2�9��]{3M}H�D[k���r�-5�'1����Nra	�j;#OpQF/�|1|[^l��������rphT����A��c����,�����
g��yQn�	y^���M.����y1��p�"v������T.�}���A�Y(�d���p74v�1�cb�v�������FCK0�y"�\����]>�������.I�����$tu0�$�_>d���
C��/��"�����/��]��h���"L��f�<e�*"����/�����d>��E��/]�a7�����2�]V��U����� ��qn���<'����]CG'������O��-{�u-X�ne��;Y���DG����[�(G#2�O�Z�q?��y�L�����#V����� ����mg\#�F��� f�������}��_����~���4����~��������O�7��>��e2�������O���O��=��wn4O5>-�~!/~������'�8�S��f����^l�#
�_4�����'$y6������k&�����"3N��g'��[��79���S����4�S��+��0��v~�g���{���0{n�����{<y�����k���\�kJ��s������YIP�O}8����q&�R����)�Q�2���|�G�^14�r�U�VK�
b��_��.���1����h�~�K{�	l-����`[X0f�h�V� ��~#kS*�O�Y��m�?s���h�C�k��A���?'�����5L�{��f}���}B[��tj�8?��������}���X��U��b�J��������6"���%�h4��nM�f��@5��������%�����X��������R��_��J>k$C��7���d�	�"��hA�{��X%�X"��%b}�1���"��bi��(+�=C���%��jJ���6�5�e��i��XF"Nh�("���W�~�����-c�����5���
F�?#��X;��H2�O����u��;g�1����Si����Xw���?~��8�������B��Z��c��b������z;����w��!��}����w��}�n��u��s���t�����6]�����M����6__���X���P��>^�������t��b�~�����>�/���:^��=���S{�Ryb����X�3���?�x��cg�:�r��z,�!��vJ��\���?���s�.���u���6��r},�5���$8�:�r�o�u���X�k.�=������u?�����t�b�.�����?��kn�m�~��^���X�o�u(�7����~j�b�>j�9k�5j�5k�=j��|��v�n�)�E7�S�����6_�n��X�g7�S���x�����)���
����z��zt=�z=���b�������:�_v�����
v?���zt=�z��/������c������`����!J��}���
��?�!��'7D�������]����rCt�On����
��?�!��'7D��������^����rCt�On����
��?�!��'7$�On������v�!y�Z�tC�z��
�����nH^��v�!y�Z�tC��X�s.�9����7�����m�?�y},�5��;�
����H7$�������c�����{������������1�b��$;�CYd�xZ�*{���~Y��2+@��L��a�h�M����4 5��v�Y!�8B2M��JN�W�B� �rr�/m��Pgb�sZ����x��6�Le����9��3E�7.��2�qT���������h���q4y�$����T��~���`g�{_����\�6@;�����uh�#��i���#������������{pFo�'rf�����PY�����zDO�ke@�t��e����R������4#>\�?j�"g�`����w��uJ�C�7x��o=�j^�5yG����
�(W%U>!���X�G�$;�\�Gf����E���/Xa7���B��5y���|2�-��v8��(�D���HJ�w$�LF���1�;2.H�f4!�MrN�#���4�!�y�b��n!�\&4���O�N�z,32���2|'����+/d`g��g#>�m�6r$��@�����n#�v���E����H���[.[
fx�v2Y[k_o��}��'��r��������'�[��,
�W~ �t�&x���_l5���z�1��J�l�!Lu��0
�+�y;y �%j	>o�M|��V�x���J,�9��^Y�[\������wo���p@���G���T���m7�w��xm��#Yy�������g�P����Fs���6.Hy!���3-����� !��
@�� Q� &�	)���:��/�J#�~#8�c ~�����g�v��C�>���(���Vd�|�iN����O�N�pQ
�jYy�z����~v}����]_�9�@���&�Tp�������P����I�����`�	'�	l��c�W�)������+��:x��,�x���/<��������������5D�y +�O��Q�3��$�����x��U�,3��g�nZI)Vn��R�Z���3��G�AZT���z*f�����������P��@uf#��w��
p�s���JPI�$�?�d���*�(z�~1��@���
h��M�N�,o����7����W��F���2��x�������}���ow.�w���q�$G8:q�����p��s������������b|�EQU��#���\|F���������*�%Q�����G:���XW�v��'������k|`�������!�������F]`�A��
�y����4��5 ^a��T���U>��90x��5��wj=>�?�84�(3��if�k�����������Av3j&���}�������=�����C�7�N�`�����j�7���L��9[�l|J<6��JX:���my�-{!�g����:������f�	���y�PoF��y8(�q������Z��k���Q{�D��w��D9X��?t�hC���A�H,�����I�� �`�M|}���S
��-�����4�c/��F1�EPF?��-�$�A����:R}��=s���b<+d���g��Z����-n�y#�	v����-!��[���
)o���?�"t>�����o)^���7`��,�M��&p}i������
���t���R��:b�`B��G�G��d+�!$!��&ly��u�����}���K��|�(z����&�>"��=������s;A^����p"$�����FE�������}�����qB���f�%����tkL`�� ���wh���?8�|&������M�u��sh���q-��DB�x����9�@K2���GiHq������E�Pf+�2>�$\>7���[����l�I�9�BWx���5f�E�|�D�-(Zl��?�dP[�d\*� js$)���d��b���"ff�85%���������B�
��a&���
9����}��W�M����@��bhe��l�t�f}i��u5f����y�m�|f%�>�o��A;�YLzW�y�����-d���T_����������x����dF����bN�$�@LV�������U��������M�9!�/���^�]�G���G�6��#N|���1
�%X�������Ql���\KP�R�m8�EQi+��5�s�q{lNJ��?�����n��#������^oB�>�������A�����V����o[��MBfT���7��h}=�@�An���,(~&@]������%�kB1%�?�2�S����C�h�B�=V%�*�Q�~:b�C�pl�E�E����]s��N����A. g+�V��S�^�f�8������>��V�&�0��c��(�7c"�L%^8>���\1K?�����Z5X�B^��>��[��cm%����G��a%��#�PI-������j+h�����������b^���1�0�EZp�Qx�7����q�3)2s��j���Gb������z��J��"�c�b*2�������be��d����f���H{L�������)~T��-���$���Ve�2N����<�j�n�3I�d7�����M�D��%�������J�q��Y5�cm�r=� �G�f��,��_�7G{]fd2f�/�N��V��}_�U	��������H���*Jz ���Q�K��n����<g,t�u�J���~�r���*y=*���o*��B���5�e_ftr�B��S'��a!�+y�V-��+�����|���	�r�'h��V���#gX��d�&"L�?n{��f���3*h0�/�S�����%2b31��i�����}����U
p��R����m�Q����@���)����-�v#�	a�gbU�uCz�>����\�S���b�_���b-��J���m�SGQ��Y�cBU������O��&
_�qI��:��3�v�"����9OL�N�l��|��I�n_�m�Ldo���u�'�J��������9��U����n�g�������X�SG3�� ��O���V�%�7��|y��z!����g��������N�CSA>vaD.�z��`��-�������M?T��l�j�(|u\���-Xc,y� �1����!����>�H�����:	0D�$;u���:�)���2����7�/�f_�l��0��?��X�l?uxl���G]�`���fE_�=�����������Ki�?bFx�]��u|�����	�v�$�
�o��xp���J��������lfw��#�Q>;�K��p�����>C�?P��?��^T�����ZZ�72����\�����)ae�ltp�T���g2����"�/�
,v�Xv{�$��JT��tT��>8/#0��G��"�K��-��\�'n���k��y�����E����gn��E��+*�y!�V������s�7���;�%y�yxKiG���������7�������w4s,S'���ED���z�+��D��^���4�H�T�S��Q����9��D�y1���Q�d�d�	d�>��R�x��\i[�/N.�Xd/C�qW���7�M�=(�eq����{�{�A�~�BF����P��z�B�����E���Z�,2����~�Uj�o:�����>#1.�W����d�4�
��'B��-�$n���A�
���}�7����;E@�����+�|��^�D���p)��]��^vFV�-�7��"$%�#��#2p=O}��3t	�d"&?]�3��)�;������G�������������M��xeF8l�x��+3��+���Wfd��C��w��W&b2�����"Z�����h�F+3Z��J���+Z��.��e��x���9�<|����f_��c�������;�����L�����8M�y������Hb���w32�=�~��s�nD?2NJ��������<��0|��I5��fT�z�H��x#ry�k��29�7��H���dG:3#2�������4��cgM��\�Rl8��U��x������F`b6o��yY������mK��^���d;qh��7r�ju�w
���DP�oU��U#x�L
�M�J�����L�T��f�-���qYG9�71�>��;��U��+����&�����njP
�c-cxd�\��7>��O�����R��x�����lt,=J+����*�=J�\��(�_��������5j�����X�2����e��W-��Tc>�NAr,��c9�t�sZN��c9�[�a�F��-�s���o����������hx/t�����"�7�P��[��HL���I�U����2��z&�9���`��~��l��R����_�������[y!w���odITo9���9����4���4gD���HL�(L�k���o�Uc�[�M��Nsz�	
��\��x��T�,����2�N����0���7�C���g2�6n�S�
'*��F�VR��2������`|���C_��3����C�U���%Q��>�'�x�JJ���]��/�Up=����C�_�#Kh]p&
�H�}|�m�x����>ot�=<0�a�y���~��3��9�;����J|���t4>�/�����=�h�=G����
�� ����|[g����_��Fl|G��"D4\�m��C�Y���+k�|��\r/5�B|���a��Q����?x:�x�������(��� ?9����A#�q/�������.
t��Z��j��4
�+����]?��v���uG;����oBE�9�:=�������`4������f���u��������]wWS�
#d�E,�	}�������\7r��:��n1N4�B��r��Yu����]�,E����A�+p�O.	������47���"������B��WL��Mf?A�-1�=u�����-��g�����v��_��������K��K�{z��H�1x	��G�-��Dwj��3���"�n��������w�����h�B�><�%�h�(������/������+�[�"�����xo>]�r���L\����#�z�+�����c����']�PM�pD�4|�5&���A��w�\?F+�[����tX&A[t�����ki�WC{�(��o� E�}z�}��D�
|gk)��m#/�j+��oRX����X�i�s���#:)|��,4{�E��3�*�K��C�
��Q�e�fB}�HL���Q��H���z+����_H{=�������D��|��y���
}�\��������3ZLHy�:/?�d	�U �h���0���U��?�Qc�6����M+^��������*.)���|W��/d`��M�
SB�����`3P"�M����+G,��^fB�f�[�T/�vhXW�g�^^1n`�<��9�|'�x��Z�@/TF2\rH}hy3;`��/���UL3�c/���1	4;?���(r���M�����	���9���8�+��n��� /T��k
hB(kY��UT�u��jZ��I�����ciy����iZ�c|3�Z�~�KM�++
��/I�?�#Z����L�����\�4����-"~�m�0V��e�%fHM����R%t�e�:�=v�h��n��) ca�_�9���[|
���n�#I�d\��
}rT&qB^��y�������G9��M�|@�y[�U�������a��;��B+���#s����@��)�-EC}h�_��I����3����'��������~��fp�7M��Q	�'���8_��U���
��>�a�S~x�;��G<8Yx C�c�VX�������<x���`"���a?u��E�a"l@E~�`�a�+�z!{��{��Xbt���F��y�C}��gF���z6�f-���3Z�h�|X�xd'b26�o�q����{�[������.p�%����� p(����R��zc��3���l�gj)��+�-�'���gF�*15h�^n4����p��"&�*�
qB��w	���0 �0lP���B�6���*I��*Z����7�v|�9�w��@�*�l�(.6xG�CYF��]�lQ������E #�
���&�J`��2x�|*&"�,o��������#��5�
�yk$;�dB`�>p�)����1�Y�g��*����|$2�H�M���{���v6�^/?����Y�����_���H���'����]� 3�G���^1z���'�|�h��>�G�y31y��0���.A�$�5�~����|��������w<�,A�� Eu`L�����Q��yA��Fo��)=��0�E�A,�&l�U��D��Q<=���[�����sW��`��"��C��&�������:����1YV����s��<d��F�zo�Qg������&f���J��3/�i�vuqG��"�9E32��x`�:W����E�YW<���t~!/�4����+�\ �B^2Ew�=�en��	A�;N��M�?���XY]�����q:����M���m��"� �O�����&p��L���_�����%z�1fbK�@Rd�\q��DC�D�L��VaB��V�	���%:���E�P��0d}�<�$��O�x��0�|!�|�����yEV��h�:dI����T��sHG"�[R�����I
�:T��}��M���P���
���������Y�g������!D�
�p��/2��481��X>�S�\�	
@1���;1:1�����f/��F�#U��q���D�P����U�#������5:4i1:�+������+x�$���}���#�3�=���)��k��k��MRF�`���&����F��38��3����jG���(r0�.�;E��`��>���k��K(��=�������*`��leL�-/A�[���[��b�e��F�=���c���X��!����9'D
�2������]��;��B��g�)���|��]1Ex��n�3O���n��������/o6����UL6!�n5�Z�C��HLf#U�|\��Ohe�+,�������|
����q��]md�Xp;�b���yG�U�]Q� ��*NS+o
�
0	#�	�~i���7]LS��6.��H~�����D<���{���3�M_� ��8
�%��\U'l��$C��[��GK��"({�jM��I�����z���<@�`�Zy�����S<����[L�?��*�S��R�;������Y4�m�����/��!([�h����Phy��.���	n�����M�0&�p�e	G����!xs-�����.lJ���S2�gs����Av��[>kS�0�;-��L$
z��`��I���dBE>8\��#��8���h���vF����0�������k�xh��v��x�N��;�������m�~#���|F��������g�m������7w9���� ^� ��;�� ��p���#q/����c(�I�H����|�xC{��;&������A �G�#D|�B��,K��7F�����Xg��~�����Q�7����w�I�$37Q�^U}�%�D~,9�KP'�A�����z���;Ax�=�����#�K���WP��|4��/����6= �z/���C��s��D|��
�ep$Q7�7*�����f�9>7���45�o�*x,H�G����������p�MC9mp��I���r��w���i�
�]�^��;<:��{���B{L��\n��������J��Z�SyA���M�+�v�s��"�����b�+!�
���(�C�&|�@!W�*�O��=�Kdy�[�<�L��)Z,+�B^l��-�j�Y�/��	���[Q�Z��A�f�vo�T?/^�����}�[x���kg�fd��dg����U}=�l���aO5���*����������@5��Pu����"&��x�[��E����
�����Y�[�J$4�Sj�����N�d~��cFI�����R��	�iC33����&^��W�&d���
Y�/�%�}�����dZ��p ����Nz�?��>4j�Q������
-��`�~X��'>K:#�v����/���������dI'b2NC
Kzi�$-�� o0,)A+=���*�%���O��������^�-��n�&N���*�u���	3�k1��%������W���;��l�;�K_k:p��	�f���^+�)�j�bHC[O5���nF_:_"����U���CE��)��q?����OB@U�YSL�u:2�1��$�d�/�t$]�~���2���"����5�sh��3�������oDa�_4	d%aT�"/F�^K��EFFU`�<
��0*+�Q�hl����E��/�����C$��Y"�����HJ(��p�Q�=�<�HJ,"�TRNU�'�T�����y���p,&ZG�P�)�B�����%����ha
�=�%����
h\4�������R�eHu�����B�����R�#ZJ%
�L��X�T������F������P:��BEF�����w46!FS�:[�Nw�s������T�*S;���*c���3Z2����=b8�/��hJ(�"��`;?�����g���Um����v�Lh�X���g�d�@����"�3���%I��rR\`�T;��'��)�r�?8��~���r^X��rW�^0�X*Q$e�������V�����O4���C$*�@���RGU2������)A�c1��x��*+����B��i"eF�:�l��������
�0s���2��c��
��o�[���h#P_��'��y�����<�B�c"A�y	��].���<2�J���+6����g�m=�S_�V�>n2��U�����
�.�U�Gh�7��L�eY��z"�h+2z�yGG�J���L����/.������������,��_���?/��.��cG���A�G;-aW�����	>%���g�����a$Ce����78oy��e���2�OT�i�g���m�^Ym������������M�����h�����[��n��u%^��P\��#Vo�)r(h�1��}�/���T�b�x)'	>o���~b��V���1#]Rk���jM-J�4����#I<��bX���=��iVQ��)3��;�^%y�K|����*��E<��5��4�1����2��)�4�uph���2/�K7�k"�$b���OJY��E�*�{&%���pow���P��������$(8���afS$����%n,jN�x������0
��D2�N��Q�pWP	���
Wx��|�Z��K���j/���PH�r['--HZ:!����.�y3�i�������	��0"����)KQERQq�P���x���(���Q��LO����LM(D�:">�N]�_rkWTu$'8����*�f(���B��O��7@�����NGTd���SY��H7��N��B���r���W�25$T����'Q�&n�tR�@E�gsC	6�h�����r����-23�W�yu���aC���Hb��_�7�&9�&T�$�� ��>����&�����O�y��J�2S�]��Jbz��oh�D�|>/V?��U��~�����,/�2R��|�=�f/�SDF��|g�YIL�K�}�2��n��TjL����g`.��Dk>����3D$1A�����}fMU�9*/�����o�-�b~H��;�m[�H���
K���uT���"�J���$f��43d2g�V80r�C�)!��T�~��Qg�H4!��Vq���1gT]���T��3B���d�{<���u	�O������X�w/W\�X��}��b�~��,yb�ngP��.z��c8����������z���U~^���:���Q~^W�y=���,������[��i[�.1�#
n\��/$��u�q}�_�q}�_�},_/������X�8�Qb��)�~���q��?������������_������c6S��������������7�����}��=�/���n������_�����������k��w�e�W��8�W���y�����{i��
�����`�-����Mw�g���8��c�c;����v��8EZ�j�s�C;hU����t8Q����B+S1Ub�����0v�z��T�A��7:�������J���R/�X�7�����B6��O?8���m�Ub2�s��KY�`��D��O��]�r����hY����'s(2���t�@�3�����4K`���M�3�V�8c2����|�eI�Lj>!{��	��*�?hb�T��s���p��I�D�K�rp?�k4+mB���D`�#NuA��y�����g�wc���}pg~��S���"��U�g�T��9��rL�N��p���E���j4!{P�o���(�Gl�I�`���%�mJ����~����	�)<��:��h�=-���}�F�o���������d7�g$e��>^��S�:��a39���4���q��hIVnj>���]9'6��T~Q�n��`���@39��:���@�%��]�P48�3d?��E�}�w
01��>���Z���]��c���TR��a��@�����������?�����.�������c/�����
'i��gz���5-�����)�}�������Gotb��2�C��������
!n������;����Z}���:�((�����H 5�S���z��a��Y���y�����^O2������Q�H�v�;M����}���w���6����j�[���h�����AV}�vT��D�<$��2�W���!O ��iG�2m�X�lO�z�S��<����iK��X����m�w/����������B���>�M`����
�Cu5u�+��M�d��4�*��N;X~�A��b��gF.�w/\�`S/2��������M��V��������`�&%
(`� �9�����)���l!25���\���qB��jJ]�U���;BQV�����j���A�J���>��B84�c"���g�'PDLC�#wumhzSs�xA�{q5�/���-�M��G�����X%�"�>�����F|gR�&�L_�[����O��C1������\V�KHD32�j��b.�	n����{H�����c�o�8�����}>����X�h����@��o��s�be�yq�����2h*�1�DL��v�Q��`���xI���\<f����5h�����8%-���A&��r�4������)�ig!��b�=�OA;����<C��S����VI�S��a����x�txT%G��#VW�{��7O?r�Zp'&�8�v��j�
�pFN�R��n<�>��-1�7��9�w7������]1����k�`L�^�n{�-������������"�:�i�,���eo��E�aJ�n������������@J�,��cp&R�Er��0�����&0�����!��Y\&`"C.��WO�������c���<M5�|F��,ov2��6jn�f��k�Q�]���*'��\�5�,L�l�~,��g����"v�3:�#���3������M���+	�u.e�Pj�:�7����2�|��R�J�Q���~k�E��Pt��3:�3vi������|+�H����	-'���.���|o�^3:�u��zt�w��1�7�w��R0���������W��&Fp�5���&���D�;���w4z���������AD�a����������6�Q}ev9}�C�z?5�D�z�Y4���qd��2eh���K�Fbr�7Z��5��4�=1�0��\������?/�`�8�M
�1R������"�s�b��!�wL
q2!'���O����;��l�8�>�����%pNZ�{�P�F����}GHU����&\�YUT��	�E�&d �Gz8z��L���v�PU�C��R}�h�]�.�R)�R32p�pl���5i$f����w���E6#��P�1+�(����f*�1�M���Z���FZ~��z����H�4!��;���6M���vir<��/�����I��aTD���iUzol�lo1y�X)^��r�_�]m~���,��R���tt�/���_TB����)9��*���:���@��v�Px�I��r���'d����#H����}v���>�6��>�~z��s���>�����L�XCo�9;���_�o�����@�:�	��F�F+��y��#1y�q�G�O�����Z]���A�_/o63��PfvF^����=f�ef'r�]�T�2�u
U>=^��Mv6��,H��y��hO��)m�U%rL�S�:�H�Frb�uQ�-f[B�����-�\LV���)5�Z��l����g2�>4
��k��z�W����M�����uY4�����~k>n�����G��S;r����*�}G����������n���}��=|���ef7=�V	��*d20��'f
dXF��&��J��BX��<��.���r�$2p��C�s6l�����Q�-�8GEk�����'�v�4�J��O��WX�����f��,��AX�����r>���\������#Z����mB"���=��K*�,��pZh��������p���q���U�>x~�{���2��`�up���Z)�����|N������M�w�@M�7�=��R,��]231Y�i��!���� K�z��G�����+aZ}?�|V��j����h�J�p���TE������s�����of�p��p8�tWSd
zh/
@:�cw�����e2dJ��!���Y��)��X����q�������:���i;N-��t*��4]M��r�8����2~p�s�pR�t��y$�Xc0j"�>���Z����N����|�L�c�
8*`A4�s�m�u��7�����a�=a�+�:�q,U�����d�S��iV��`��h=�ld}����@p����,�S'r~��W�H����_��sc�(�C�{{��:N�z����g�'�E\;;�`A��h���~s:D���]]7t'���#��}�-1����T��JVQe���w��V�B-�����M"�P���q�����O�(qd����N`��p����L��ns�w�;p#��LDw*a��}E��Kxg5'�*,��(�P�F��`C��~CM*����w���
m��F�i����lo��JO�k]f$���W#����!���p��
`�X$]��~L0�~�V}s�����$�gR�9��e?dSwL4���B��qX���\1����E�5}����Z�.d��=�M������?�~��-��U�����������c��gA���{�T�se��
�����M6�������{���Y+���w����K:z&""��3��E"�.d���E�#�qc�����M���si�BQ99.��"��{�4��S'���o��h]�:��>����,*��J�4��'/8ko".�|�o���:�!7�Ld�<��������Rl2U����2�W#��:50�"������V<Xs�4@�����\���x	���mh�<�b��$tF,�v�&6�����T�LNH�A-����Tqk/\$-d�t�9u�#�4/�q�z���22���6����YgmOH�7!b$Z�7�(L��+����Ty���������}Mj�J��4����*/�_�%��7u����|�W�������s@3!��3 n��>'v+��,h�}G�!��2�gB4�<,c��1�Z� �w)j�!9�o9�N����~= )�������*JY���28�#�4}C#Y�����Vi�@W���(�����Dw���
k$"{,��w�:P<�����fWAcs�g���xW9�F`zh���X�	���1��E�	wB"�P��o^LmG�f�+Q���
�{V��b��������o�bo��g4�����������8_
[�?�T��������m��bB��Z^U�k�.j'@ZP��W���g�N��h�s�$�wi@5�r�6�3������v-��B�8������(����"�n��F�����N�:9���y�hv�&_�0��DAX*-B��7N�&2Jk�r��mq�-t�2.�����.��2�}��r����7�����T7�Gg��ktNP���1�'��c5�t7��@�l#�$:�B��x�@�~��A����&�\��u�g4�,���KYOc����.5����N6�n�a���aS�%-v�N��L��.��:��A��0��<�9n['�nm	jA���.RQ�<]�4�nL����x�����2o��E��U��`f��������>+
�!Fzn;���:#X��
vKtd�W7��9z��@EF��4k.K�����RH2�Q�o�]���"���I��[�E�:�����x��m.�<�n"%��3D���/&m^��
;l��
I��k�DFFA���Fr�$|���F��_Bh�S���R���>�1��J��S��0,5������~�N������-huC��|����Q�/�9�P������~���H!F�)+������4�wn������+o��[�}�'��5�U��"N�/)��G�=Q+T����_�S*�k��*�L���c�ZHv�$�z��f&A7�xv	HO�I�GTo1����bU���0l�������PP��)�?eFCFJ���W�3I?���t�y�OC|g�eeV������:�:����B��������m�"����)etFA�8�����2��	������8>��K�pp��H+}/��)�����"C�E�y��b,���P]fv�	DQ�(��2����w!�(�jQ��#*�"d�
��u����S�$�C���9�J^�X2�
u�X�����]�����
���o�T�V<�����C�bH��j�Y������!�I��w�EL��,II��K� �F�JE�G��0�2G�@>3�h�T���B����cq���q�n�y�a=���_G>���0r]\=]P�yjP�^�.g��J���99	�
�
��6Pj��Q�����1���,h8���VU+����]�$h/�]Y����k�����-vrpb������l����z6V������A1%������>�]��w�x�|]A�WP��
jK��|���~�(2"�� 9���=)"�D4��{���� �l;�����gR�"�s@F��[o�u�}v��{E�/��r6�J;u��,L����qH�Zg&���c�}B�j��S�0�U�	���E$9�5]n[t��F�6�C�6w�C~�(���<�E89s�]X�N����\/��,(�7=��W��d����`N;D�zV�K�<�'t�q�`�8�],d�����B�.�1��gB�hi���.T9��fA	��,x����(N1�	���p�}�����w ���{UF���?5����i��#�_V����t-��j���O:bH{�_�D���3���`R�����(T���v�������m
�[��Q���A�^�C�s�����v�Oe������8���p�e`�03�L�|��Y!�QS�G�tD/~�<#N�/����t^�p@&�4��a��,.j��A?�T�=�$�,�	9i���q����F\c���Ia�������[�Ss�x��������l�1�F>�������|2d����D�%����n����o\DLYO�������2���X:�OM?���Oy��|n\���S��st�(�i�q%W�C�r����o�F�r��:�	y�'�����C p�!�����2;�(��(��2�8��<S�w�vc�wm:%G����gA���.q$���e����Y,{ga^����C����ln����T�	�I?��� =t�"Qq�~�W����MU�`$��*!bZ��!x���g!������������iF��M?"��C����/�����Z�fJ��Wv�����J�b5O-�8x�Dl=���������DT�8�S*���a���v�y�x2v0[���lm�|.6����-7A�.���1�wtn�\����3B��<19����#YL��=����g�\�g7���5���O�M���?�j&�<�,���[���4��X��ZT "s������j���%$@�$WU�N��jW�=�Fz��4����FY�����"�Pp��Q�I��AYX�Ggm�(�����eq�46yJ�}bN�v�6�~f�U��R�n���*����6'/�+���B3�lU2�o�x��L�L���6�}�=���,]�vs�,�7E"��"�����3�)����R9E#)�F�t��K���t��E'x=(��g/3�!?�����yF��t	T"��~X:�!��\�V-im�JC���u���;�8����Z�j���{���vo{��i-��C�gE��SD��j���=&�����K�*5����1_��a�p�q(��t/����r/������� _*�qbBXN�o���{4V\;��e�"=B
�13	r�� cI���DBp+
����PM��LB]6V�U7���H�C���x��1i"���z�Hc��/�hZ�p��[;g!����,h(�I`�M"( c
k�Kt;��D�%���p�02�2	�;�9��Jh����+wf.Hj���k�j��������y��~'�@i��F_��H�vG�g�G��D"��Dw�g	Zw�k�	��<�+��&\�U��eF�[�6�	���U�"����k�3	������j�X�/�������� ������!~�)	���3�J��
J�J�u �wd��^��-H����l'��n��&$��Ep�`��,s�8��ce2d3)Mt��G�W���������z���,��/���Z�	3�]�Z^P9�����Y�����/��^1M���>�&\u�5E
g������M�����/����G���YH��v]?���vM*��N?���d�aK�aX�a����i��n���Se��S5���g!��,�o<��� W-���F�n=l�2���QU5
��z�SK{��VR��D�*�t0�����7Wu�@%w�<? `o�/���g�K���bf���=��[cd��8����E���n�x��%���q`�����}K�k~�2��]:I��W�b����{��g�"�2�s��
z��v"%�5yk-(TV�r�T'�Q�P�'g��.��Z������i9�_������'e�������#Qn�������4Q1�����2h�Q=~����X���"�B�J��,y��.\��r��YP�xhw� �����7B��#<2Zp����&~�F���b�@EF�X�`i�F�3���gGs���$���`9��,��{}ML�??3A��'�X����^3c?<-�"xW�����6���d��\F����/�����|�u�$�����0*,H�)s1~�.�3�<�-+s�s�V>��b3�������b��s���>���Z���+�bF��A�c/��2��|���3�)�T�n!���_R�Yd�$���Aym�xR�I���8=+r�L�sNd��g���D�J�Y.Y2"�sF����������������?�����|���������yN|}6�s>���No}���~��������-�b��������n�r;_�Z�w������i�2��;w(��
�vpy�$c����!��+7�s4���b����>N��(��C�2Y���,�F��2�P�Dr�pu�^K�B\�v9y�#?�dw�;#�S~[����+xW��Z#�Az�*�*Nd4�X���r��)���GM,*��*�4�tT�����,(�{���d{W4��3�D�{���3����dxgU@����Yf&�/�@L�<�� ������*�qEv)��9e#�I�P
�����WQ�9�q��<�Af�	�h��`u_���,}3�Z���z�j*NR��E$q�/���%��0�Cp��4���.d��D"eE3�_�)8@ND��r���s�F-i�R�b,�)2�Mz�L���K����i)��I�fF�\��4�7��;:��mrC4�`���-��]i��)`>@T#����]4�3Y����B.���5�7��7�����P6�H�{S�4S:#�������,�-
�h��)��f6�U���^�jj��S3	�c�C8?��	Yvf7���l6��iqk����j�����������X5:@�1�dz��p`L	��N����O|����fB����f1���#����=�z2#:�b����2�p4��V:[���Q�`Hy2�R�XrC����!�����)m:�)�P�WZ���|���j?/���`Ng����$�;���T���<���U���
�1�H#Z�	
@��f��&7�4#$���=�y�_4�*�J��`YMv�:����<*�V�d�N�}kOU��-	��&Rpz����a���Fu|���dX��N=TW�G��-��
���3�(�C��x;��I�������*���3�z���a=��z]V*��g���EmkF�={G����A��4s���F�"XV�����U�����w:!�����}�l�����hW����j��%l.cC_0��@g��3�����yD�H^m�WV(N�F����f�>|�Y��I5�5�Yt�#_df0��:�8a(��@�b��(2V��.�} �&�����+@�Fp���s�'"y5w���gp11��2Y�S�_N��t�/�����[K4��n�2�$�%@��[��^=�nFH�k�
T��������['�L3�Q�H�[��nO���*��lw�rt������O�A��(9bU�*�mIn:D��9��1oR�F8�����j2��6�Tm���Z��g �PKd;
�I�o��S�\���zxv��%��U�:��$���x+�g��>��`�����I�ML�=G���T�����e�&$�7h�:��Q��sx&�_�9��������V����t�FR�~kj�HD��{���;�_{H=�#i�C����V���5�P��&,���2�����S��[��4��B��)V~�4�B�}�j<����G��q*��E����w1�o�Dj?��xA�
�\'d��#�)��/&Q�������x�t�����/q8��i��O�0l�F�%}$�U�1!�P����1��t
&j�	��hl��	���>-��9�'�=�<�{�`��P�v�T��|9�%���P"�����\2sg�"��J��=�wE���:�3��6���8/>��G?N��/9�o��!�@cF�������\,|K�k<��M��,_D������!&��	��w$�@;4f�iC&"J�X�HP����T����XL��5��H%��/]ht�[�e|k9����t��e
qs������\�y&����4D��
m����"����<|u�1!I���������gTA�2�j~�	
����y�z������=��A�������I5��#����U0��g�@��*���p'�����N�u�	ha�O������x�^��7����{T��&����$���Q.���)cT���7F"�i���G�NJ�,�QlI��R;#_TH�sx���qT������Y�$��!���L����5����v�w!C�G����B��x:���MV��av��C���q�$��N������S��Y1"�, �g�\7���0d=x�.3���#�X8�
�f���x��Y���;�2)�,�Y-D�������O_5����r��i��n��
��Q8]~2d���Ae���(�!��HQU|�`	%�V-���oDr��j1Qk�5��Ll&C�h�)2�WM���	�.���?�y_�$��I�:=�S5�H$�+Fl��)B��p�n	Hb��@JDGH�����A+�3[?o�5@ey-�D���-y7���s�����A[xg2��'�%��S�����c��#}�b����|�a��=8i&I�68����Y/_��$��e�v&��t�FX�/�"���d�����?�(�T0S�[a���R�����8"B�)�PsT��gi�4w�}��w�TAEd�ay� k6�	�07�m��S�[�1��� ���=����k�j�#��j�X��
j3� M�vg=��pY���.���p!n�e�ud"���b`��E�������n����]�%4�����c��Mh��n�H]�S\�>�HlroA�l@P2R�If�D��������3�L�e�9
O��&"��^_������r�w���4�]��R��sI@���h]��$LL����CM@D�WJ-��rc�����P��wa�N����e9��lTDE��E&O;�!��-����m���N��-���q�=nF�c#i�w����M(�6�]��g���"�����y4[�#���\uT�Vl�W'$@�Pt@�g&a��t�.
Pv�"?�h*;=�z6�D �[O�lXHH��^s5T�<����V�/��>��SR%���,o����[�ds4����}]
����A��Si3��tu�F�SXH��|�5�Xu�{��V��	W�v>����Z4��L�wpb��v*L��/��D��+���	%�������qF���"�C�O�������a{�����w�����J���]*_��V[�p�-�H���f�������(K�������vY"��U��v[4`����&�����* �Sd|�������b}�wi��qh �r,�l��ns;�!�rd�?��;��s�S��2���2�������s����|�c��������\���k����v��8�"����}��^��z���� ��tA�/xZ��i�w��/��|��M�5_p���c��t�>]��l�&!���kr��M�����<�t��kr���.8��\����t�U��D�������1��I=�b�{����������)��K���!���#���!�������=������v�T�W�'_Q����*�+�G�
�����W@�W�WQ9\Q�w���|����h��#��+w*���lY�!'�0��{��5�H�Q��l� ��l;�F��H��Fl��)��g�����-����&�Y�hN#����rz�
���<J�+��
6x�
y��+|��E��-W���+l��CE����<V�+l���E�����G^a�G.��r������<`�>��#\��+l�6��1#\q�u���8�+�\�>��a#^1�[U�vLZ:y6���96����5����5��_��������|���\���<����������������������o����o����o����o����o~��}rc���X��q�w7�����1��8��cO~��1��8����c��1��\�>������|�m	nL��>����W��09\�����+����pE~���:�K����h���D��2���LF�z� <#b�s���z��!9�l����'�t&R��Xp@Wl����.���d2r��d��N�6$g
JB�K��8�S�� x!�0�'��	$��	!���������L����D����,r�1+�H�J�f-v�)�C��Lo���^�`���PC����h$3��-�8�
�����8wR����P�P�	%�cE�����,u8�XjR"	<u;�I^�W���7=hH�����j�����f�2��@e$�;6����'gn�����.��*2�G�	G����I��&��8Nb|���fY�7��R�RM|	J�@R����;��D������n��$�DY2�gMpo�����&��w�;Xae��@�����1W���#����8�}�>��0��@6�P���L�'l���7m���t�����=��1���l�����J$�]&��}�'`��{l������r9�Xt���B4����)9oS,��/�f��x�=��I}���qg��w�����7���{
���vj��ZV"��dY<��2)�d�:��#�!�r�(����0�]���"[���0�r����:�w$Q��L����Q��c�����-Qu��H��n2z��3yo��	��e���2�X���
�K�B�<���N�"�u�Gqb&����D"�H���]���0�WI1$C0*C�����*����D�8������N�NH<)�L5?�i#�G{ee	�cd��	H&�	�2;�]=5�/�J#��h�
��!wud�����[���GcBY�'0&}��5'$�V'`��\���b^�=0Fc�H���M�����p���s�����n���i������l8���V�D!U����j/�FAT�I�x���8t��5��V���@�&2I�(�t��Ue=����@Z��
���0(�c"�>�|���.�f5{��NT���n���$��J�&[�#4#:��H��#8����AOMG{��N�a����9����:F"�yc���3��&�%*���wr��v��]�����0��d'W@��x������Io�Ss��?��Ln�wE��j����;�\P�{��\��/�\�iq	'�9:v���aH�'?D���������@p���E����'Y���_�����{�m3��%�Q������D�D��������uO���$p�D�a��mz�\M��d����!P�Z���E���#2M�d9\
5`&��pb ��E��ec'�����gV��k=��X�g��D��*��1���x�1G}�$f�_��S}�8�dZZ;
����6��lP%(>��s/S�Q
�'p�<��%���c������K�{����B<c��'���c��>w7����2�|T���3(&������z����f�zw$��@���A4#����x(6q���[�8	H/nG�����S����E|}��:@���@�XP:�4+Fu��,�E�B�-���Ay��3�OW�&u����*�g�LU�Lz�\b��r	[�|Y�D$s�r�i��dV}
Z��y:�<����0 H�OH�y�]~"q�},�v�p���	�?�xp�;���
�Q����O�xr?
:��{���q�9��=�v�]�-#tr��o�[glGu���F8�:�Xz�@�'$��`h�i� ��%\1�*����;2b.�����\WE	t�	��=l��(Y$�~��Gc;
��"8����8�|&a��I� �~k�=����t��-%&W�*��^�:����P�1DjF��G���\~�S��%���"1�o��KU�[U���t�>����9F�
T�>������ CjdP�G2n-Z5����� 9s�bb���"Vf�8U�+(����d&��
3!��=���\l���>�{�r�huV�l��Uc���Z_\$]���0u[W�7]�d��gER���qo�����K8s3���o��m"aJ=�,��\yN���m���g?�-��4Hl
d�Z�����]Z#_�K�x�7E$-rA�_,�KI
����|!xG\�|8^���1�c��l�B{\r6�%�D��N�r�EK	���q�g?�q
��� ��������w[��'��7!,��Wt��s��L���8��=�zU���Q�T~I��6���������+�p��}I�V�@��u�H���K]�	������9���6����&�4Hg�Q�t�@V��@<lI�o~��D
\K=t�����gT�`7�
�B���=�nA`%<9�rv����$C�<d	#pO�(���D�,%�8�n�e�m�~F��0��j�
�x%���7�����@7��e�N�������wEcW���$	���*���<|�&���EYA%zP�����_���V��G��$�<�}�&�9�DF�������g��%Qq&��kx�P]��L��W�Ro<���DF;m,�,Q<�E��@Pq6�,BH�Q�(�D��|�x(�p��g�H�*�T����RI����-+����4����s���Wp�06#i�ay�h-9v��k���x��_+���J�
^��6�����vV%�
3
J*�OJ�Y����{���~�����~	������_�~���F���M���(�v�,{�Q�]6�o7=�a_���G��-���V�g���k�`5���D��	�����i_P�2�n��	��.�����wFR�d�QA��/�[�-X�������D�+6��6�~���>�~��E�(��|~3t0�2[f�{����}"���oo��l��wF"��)W�%��/�op������w��/H���i�Z�	EY���gF�>)������2/q���Qf�[�=��wa�S@'Jm��
�����N�L}�����}��w
{��S�>����U����O(�+����b�g5�Zu�=y������xkB�	S=�1�J@6J��%pJ3�s��^�l���g��:+xW$;���?������D��=��\PI=��^�U�3�<�����\�f����%�c��� �1i������u�13I��V�!Qb@D�� G�E���[%=�hA�i�9(B��EhvAc� �0���,v��%�\����*!���6&��tUtA��Y3`�� �wax������4�}������uC]���P��*�I���m���
�-�����c���t�a7�>��a?��m��=�7�/��C�[
����{�So*������l�
�]��w�Js��M���3 �,od<�&I��mn����Xl�������4*Q��P�:���j_HD�GG�o�NuP�L��|b�l�5' �__�~w�J>3�����+Z0�B���[>�y
�}`[Rg�v����"�W""��|��PoeaR���?
���	��[������SL]ItW���9#���_4u�x��L��-�V��@�������u'�L �+��Id�����'���|�9��V�������D�f���M�#(�5�����y�����|����
���������
����;�V!�@B�%����l�i�P*�)��>�,.b�E�Uf4d�4'��Iw���GQq�.���A���������_�_��z��@�@>�����!2��1�>U}�����FeWs���CE��xIl�W4��{z��S�I&2���#�@T�H'q'�W	����43��z(]hU�����Zh���h�
8_�@�+3K@�+�\���h�v���s���te"C�P��<����d�3��d�g+3*��l��t���D�p�\,{��������)����k����5������]|���
�NV��e�wE�N��������f��y��9�w�������4������h�NO����zoF0�7k3`�2y;��4�d2�7�2���z8���$0D�
��+����
���K+W_5���� ����� �X8`oC��=n/[md`Y'�������h�3%��$�n��H����h��K��DB�����l�����?SCx%�����?�.�M�����q^G��������
�;��U��2W|mCx�.7U(��zO�!Q$�3&k�z�CoF%���f��-�,;���������W�~0W�����~q/�vn>?����}�nu.��[c���+�k���?8�x�$��g]���N��g��+���
H
���������5p�"��Yf^��B^j��+&��o��F[��}�(����w�2D��:��0j��[+�F������ox+J����x�)����
��Y����
`���ep��/�.��+8<���mv�xjm���o�5���z����	���tN3���p"�?���A�K�p�����w!�F\uG����6��$'��`��p��m������	�[yCp}a�|"���{Ax}A_�iX^/��c�%�\��M�Z����b*�o����F������OV�G�MC|,T�&���O��1�.�g5[�:Q_P/�6s�T6������b��5���Z��9�H$�.���jqWfH��`��X8O;5X��y�1����_��z������W&�%�R�z����.��NE�O`>����t�?z[��;�������O@R�'���5������5B4J�A��l�����<P��	�&'jB�-ne��=j���e�6�:���_c�PJ�u�6:�WV���4�?�����A�v��B���KL���O���]fO33�{��"��4���z���H}���qx�I���/��D�U��t'�/�����_6f�� ��0�<��0J�^Q1&�z����
C+�@�e�e���~��!�84c��G����<�����N���O�W�~�p��/�
�6���O���O���"h�"�=T���@��G�mk�z��-k�b\g8����&r��������%��w�U�KL���O:�������H���$�}�r�ZyW&��h+����QrF$�� �y��L�������BgB�n��N���m\U���9y�� 8XdeB����QQ�$�t3�Y��c6�w� �n$c��F��vaB%u�SF��S�E �K�K�1��L|30VdX��#y��t�W����g������]�CT��e�������|�]V�x�������?�X�X��qq�&=W�<|eB�KwG������L����$������J�[L�"��jG�"��r|�W��or6��P#j`��N��N��Z��C4}
��X�/@]u+C�6�����\��igs�#&��0Ve�=�eP+���'��"j2�y�C����eV&$�<�����{�PN���[�%���#&��Aj���4�4�mO����E��3!�z�
�,�������+=X�R�h���H,���z\��E�o�yp[F�;�.�����}��od-]EZXI�P�<����Pj�������y�������;H�A*NHF�����lV]�f0taI��Z�����P���L(3�stU"�;��)��lV��>>��-������_�B������������_���\v�v��
���L�/�N��$�$'�,����?B�9���@
U_sV�:3����7��~�2!�M���}/z_�l���&��?���P���U�F7���)hbBv���v>��T�V4[�fM���a��1���c�����F7�Y$7���.��$��
Ap�������b��]P���j�d_�wE0"����t��z5��o���[�������0��{�����	}w�}�%1�x������2�`����W�u���H�",C���u/�2������m���]G�
�dD:��Y g�<��io�1�G9���G����n�f ��.(���KL���fR�k0�/A�/�C|�S��/a���8D)�Qaz�3��ME��~�_�BF$JR�%������.���&e/�P�����`���N���:21!��S�Z���U��F����`N>���x�7����)�|�k;qz�����:�U6�,��X,)��,U��R�����x�;p�,�t�afh�+�[�j:y�]lF2Vs����D�v���x����y3Br����0)(A�K��+���f$x�N=9Q������/-�Y�9�>t��
6�E�9���r8����F�����	���M�:0����		8�)^��GNZ���3!:�>����G�A� A���$�7������I�e�, �..6��0�X���;�0��0����q!�]P�qZbp�n�F���"�����W��m�������;�m,2�����{�]�k��M��C�P����jq����pq����������	A����6]����k��x�X�"�^u����/��I�Ao�������{p.��Y*F����Y��.�#	=���i��|[2��EY6��?3�<���zhNtz6!��yLe�ph������)�+��lRxZ��[�I����w�s�6�yuv3��������g�2]���8��i�CT9�) ���Lt��Vm��H�'q�s�js9��S��(�c�5�<
�My��8���YA����^F����&YXP�:�i]\����<�6r9���dv��]Y�����@�/���U���_��*2���?+��3<�o�O�wf8����C����R9�)� 9B�����M[�|{����f~�]Fg.�����4�!�6�����fG �/L�+lk�j�]Q�	O+;�'���n{T����&T�M�
:���,�~�����MX.2^s�J��vV��j����S;���O[9�	�a�&6���NZ|��,Z���H�������:���p�����?�b���M���4�!�:�q�l������Y�M��He�����6���$������;;�\��L�U�ep`A1�I��go��0���0��ni�������U��&;e�U�14��y���D�L���aB�������n�O�3�sr�%.�����e�����ie�?^��}�^���DF({���::u���p��yz��k<��'H@G_V������F"��M;��(X���\���?68�H�e��'�j�9�g-� �I�\�~s$�/L��L�%��tu���Mk�+%��^D�V�r����o@�=m�
XP����������Y�+�k�nX�A����Im#m�9�r�5eu�3�<����&h<Y�? �U�VJ�^��F!K��w�J���x��Qj��#-���U�b��3��3G�z8/Qvf���s�����n����;D}��k%������n��G�)�HpJ�gA�a����t����{2����I�ze���d5�&88L�g��S�Z�����N�&�e���V!Lb&�����<|D�'���E��h��~�����J�C��_�x�������i~iDp�{�`l����u41���e��_BBi��$]��?�	D��	�u��n����{�$D�������$�0�C�N�	����Ie3R�.{P�U:�P*M�w�S��_D�G�-�����f87����3��/L�8<����R�����VDh��kb�\�<�b��$�����^��[��>�<�p��P�w!"#�q�U�"<5`�0�Hq�o�P�3n��;b��J�;*��6�Y$�G��h���G|��rf��������6�S���'q
24Yi���D�x<�%�J��{����_X$�{��x=~�����[
��� *~�35y_��MAQGOwC���L���0v�L��33������q����l�����D���hl�6���*��.�����y�3CI��Sg�]
����2������8�.����zMG�{�e�h��������N?!���B?��a�q����	�@{��������g��ZW,'�����I�y��Z7�3�D������y� H������[��
���t&��!��2�|�H[�]>u�U�|j��|�,��Pa��e6,��"1�|i5�<1�����
n��	�pD4���u��Hp�T5���H�	�����*d�P��yB�a�v&8������2%���u>	i��a�v�n��:�#P�z����LH��c���h�yB�[f[����;��a>���
3�xH�YX6�v�fM�
��P�3��6�d�g��QC���N��k4\��H�m��`�2_8 �-��=���g$�0�[�8S��d�g�{�m�v:vn��Z�{B���*/�#���D���i ��!�I��S��_�O��H<�����fpC�u�G���$j8/�|V��D9��v4d�w����_3@S�0T��H�����dp|I����wA���n��t|�;1+�&++���&"�mbm%�9$:z-b�Ye��}V��I�=j���y>�Z��O6��Ae�<]c/����]�4$���`�e��R�,L	�}���
���g�BNY��)�@�w�$��B���qi|�%>��
9Z$����d<�Un��I�h����8�|b8��	�6@���N	�|����P�b{�%�]�����T.���0��z���G�EP��M
����d�$�I��(d�jGX`����g����J<�	L�
�BBfjlmjb>'����sBy�����|j7*�&�$���mJh�i=��G?����Y�J�����>js����P���J�/C�<'���K'�
mB(��b��z���(T����`���oEd���i�G�>����	F�~lS��<����`��cq6Q��-�}����+�����P���]Pq�)�%n�<��	Mb��v��������E�k���2]z�����&�/}%�"!^�M�eu3&�����uBq�H��������t�u�d��]!HW�M������|+@����C��0d���EdxeXi~g���]�?���++�.���^��k��V�$�����^�x[bh��g�`�%���Sg�
������!�P��~�8�+
/�0�,��T�X���v�Um6���2�M�����'_6�����v-%����	��Xe�+\�5�n>V����O.}�pq��y5�N�Zi�<:1�ub~l6:�m��7���h����������`���l�
	�I^c%]��-�)h�]g*g���3��M������K�������k��L�����6�K> �xeQ@\T9�0�kl��Y��=M�����Z�D]�ab����:�0���Z��>�P�c�n���mF��=E�5q�60������p`���� s�i�;���U=6��+A�V�d0��j���31�5 lA�X@5�|29�Jtq"
���O��!xW���2�Kd+c�i�4�0��zf	tC5eB����g2,}V���}��'
�����]r��90��������kJ������3����N�����xry2(�X��%�����&Rgl�1o�-��A<{R��T���J_�?�f���*���d�J�|������6M$=���88��O�f�gPi�Js������������m�h]hyv��%:e����|���
��{����U~ba�.�w�*� �r�e:!\�������DK�1��}W�rR�����5:��kO����X$��������|1���tCa�����H�.�j<ou������S@q�n �1\��9���n%�(,�
ti�NQ���,7�m����T7H����?qV�	�Z�-��r�~6�OU�j��1�K��R�(g�w�,'/s��:�ju�^fS�Ug��9�I&v��f�B�fb�iw�?N�=���W�����N4��>�@e+t
���
�����x��\ui��������+��0��;4h4����%&-O+s���u��0N|2�w���0,^!r�����~�t�8�.^!r��G6�+ �+��\�
�%���Nm���D�����{���������/��w����w�;_@�>���N�Z���W������w��jEJ5�A�����)�s��r-W��-����b��������2�����w��5��]��j���/������6���_��c��n?��?��O?�g��������e����7��E�����)���~�����?�?����������]����\/��v8�#�^@���_��n���
�~�9�!����(���+A���
�o}�Uu~�I��4?]&(	j�_>���x��1q��&�m���S"��x~V��g��.gPxE,��<�@�YVM�FX���$k6Bki?xS$C�Y�#�3r�9�y�QA}��O�J��'q�g;p�s��3@��*Lu��p��7�������T�3��B����f�s�x���Fz��T�'4t��\�SB�@��3=W��\���(^2�b��I4�6��>q���"�c���g2d9��E�Y��XM���7�h�F5�]�:9�W���D������1��j��AW��\&j4�� '�
GG]�3��Ej�&�)��VS����m�A�F��	
�#�~r�|�Q�%
�Yy2�+�QY�@E%�gm�@���$Y�u�l6|����G}4pV�L�~�:4fl�`g���8U�z�c7.�D���No^�Ys0����'�'��K���u
D�@��?�$��� 7�����mj�h�����E��2N��?I�.'�O����@�Q�6��������C��$�_$.H�G��^Qm8���������s�R��3���	8'yo��ulY)��Z1|���q���`��s�	����;���_P�����4�UC�|W$g�����8��X�waR-8��!&���p3bK��&M^��4#r�T���C~�O�H���PSW�&�2�w�l�vx?�D���<dTijX�xu�$C�����8!�IN�����A�u
y Y��M�'y������
�m:����G�4Qg�-hL�p����DA�sN,:T���������j����0 LH��	���>N}g$2�JH�j��"*��y�?�������������'���4�I�APs<��q�� ��	�a6�vd��P�@�k�
��c��r\�\We\�BWb%�1b�
;o	��iu
�
���=� bL�G:���1�!���Qsk���PI�M�N
hv2�L�������gZ�"gynm���s?������8���=��F	�z 6C��5��L�9���>?~
I����4)��G�����
� �>oB�Y���MC���	��a?�J	d���$r�����|��L2>��G^�Y�f"%9�����?�yg$����3}b6�x���I����&~��������H�k����,�g_�,I�~W�G���L���J*�b�{�4N�����J����8�^m��������	�=�>�uh���I^(���L=�6n��"~q��>&��-��.L��s���w��!��4�x��k����D������}�,���V2G�R�E�w_.�.�nT
NU������dF�0�=hF���L$j���A�"�6�fVS�JhL&5�!r��C�F�3���	B��:����0�����j�!�
��)3��t�6n�_�����`�8b�+4,��s,�q����������1�v��d\q����}tBh/�3�-,_&e��������F����C/�uveq�IB����d0��I�g�L�4��EA�J'T��Q��l���z�h��S�i��WY��y����|������G�����{QCI��:��G�v0������0����"#�N�OO���Z������zv�wRg��������������fn�a ���y���/�c=�h"C����	�^�����%0�MB�������C�hci��H��%LD���%�b��&J�99C��b��	%2u�'d5^��J���SB���,�%p�_�&'�K��lgZb��
�T������o����x(|0��<�G����������k�SU���d���>3J���a���+�W��I������0�zwE-�,9
5�E2`�R�L�n�5S��imz$�����Hr{3�dw-�fD]��$j�n�0p[�B�iB\�x-n��l����z��Qz��P��<���cT+����l���6�_�Uu~���t���?P	����/�_�+�	�U>q
L6�"�co
���|�DD�[3��E�9.�������������H�v">6f�G��m#G������#���������i2i���BN������WZ��rN��0��!���)��z&C�+�_��o.|J���h�-��L��p�.+K@�[�Affg$����k+�6`g2T�=5�2�}
Q�������:R;��_�Ut�
��)5��f�u�6�:��2e2A���s�j�i�i+Yz�9���	�jJ�}
�7l������$YB������I�t�t����=d"E@�=���t]�;t
rF���0@c���	h�t�����t������tj�2
��Ym3��Z-�l���n���H%�ED�h���e".�l��7Wj����]���d���G����t_
;�9#	jT�����h���Em~�=�S�������t",�c�[��h�T.,S6]G� >"���~?����'A��a�?��-�����>���H�*	d�e�e-����'^��;�p������"fe��:8^��(g��Dd:���(Q�h"�
R��J5��(o�@�&"���-�l�g&C��4��`r�g� �Q�d��"k�C{Q���r���X���L�lA��5��xA3K���DX�m�M����m�����i��q���v'tt��4]M��r�8_��Eovp���pR�t�	�$�Xc0j"�>���Z����N�����4�`pN��hl�R�x���KB�|��y	f"�uP�X����	�0��*�)���l���?3�z���H�U$����YZ����4v���>�f�I����=�>�aH����=��k�%J�����L9���kg�2,h����o��ee�������]zB�Dz_��%�G{3�j9Y)�)i|Tl��;CU�x����	�'
�=G����FrF	�#k�P�u�?��#����#�!���0�����2���J�{����C�E
��1�
��/��U����=��}h��&�YQ�U��aC[�jT���8f4��MP V�it���D��exC�	T�����m$~��2<�
����x��W8�CJ#�D8�H��p�/S��������Fh)��5	��f[��0��E�5}����Z�.d�F}8�-��#y}2��p�[�����MK����>:����
G������q)+����m�lT�3����=
�C��
p��;������.���d��3�w!C��.�1��;�gN����3��E��t�����k�����O�l/�yS$�ut�JV�G���/��*a������	me".����Q��D���3��/c�rpO��H��TmXx&��_�����������KZ�`����U���r��z�%�;�e�!����8	��Fv4��>�SE39!��0���[�����I��8fn��H&
�Kn�������B������
���h����D�py-�"�mXb����uReqf}�W�����{��������1������p\uA�/vTY.���?*E���ff�V&$��,��.��&D�H�H�!�����!�F����R���3c�n]�S�a����]�rfeBg�d�����:�r��@��'�/L�i���*��c+��^���� ���E�<J�n>��H;���,2{���<n�U��C�(r�`r���i;�������?Zsr8���M@���@Z�r"� �Tl�		��?k��y�y�adx� �u��lFTu6��q+�?	����p�L!f&��g������fBKb�V��se'���gR�H�
w��}��j���.�+�Ff����L�����,���|�fl�k��@�qO`�`��KF������L@l@��'�6
��Z����,]d�A�d@#8������������T}w�y�9�<:<������m�yl�*O�J���e����
@��q+���L�W������9�zpQ��1�N(DQpi�g�4�/95�|���@4���J$������W3�B�����:���������5Ff�L�!x}�����	i;�h}`A�i��daB.5�h�QE����|����o����F�.�����"�R�����x��PN���sW�]�����#b�P�nmnn��e�2Ch���kC�������z/1���/�U�~1���,�����>+
�!~�����������@��/������*�;����(
���� Kv!����RH"�QV)�����Ad�>�rE��[,�;#�32�����'�M� _�
Y������0�������j [.�((��H�5��v��$�8H��K
z�]{h��'?�YP	�r������:�Ytu����V��&��-h�C��|����Q�/���(j���Vu�����<��>ee��{�������eA�D���7I8nd|��#J-jv�2��[��K�����Q�
��0}��4��,(T�������=��4/���g�Y��5�I�
d5J�=)�$���b@�����S��~�!�6L����?�sI��)322��6(��9)>���t�y�OC|g�e�0mM���[�Q��G�$: ������b��"���}�:!etF�.�8��m:� �L��D��sy��|c��;��������%3r"e{x�p;d��0�QT�������q6�(����^�����L0tQ���Z�/�J�	��s>�E����[���0�n����9V�l�
u�X�����]�����
���o�T�V<��,8�v7�4�
;��j�Y���03�C��������#Y2i^'��A�#�d����.,��d��|f����2�)��\'�
��d���q�n�y�a=���_G>���0r�LbA	�$jP�^�.g�yJ���99	��8�������J
�0�'�._�s�����#y�,��j����Kc�[���r��MS�^�dc^�K��-�����������,(*sq��:��S���M���c��z�i(��}u\pQ�<���Wo���}��"#R`�K��^���f��F}�eo�	9��k7{�I���Sv�zg&�wA�{�n�f�=�����L��*�����0�K�!A��:�@f�aX��	��}�����
ws�wax�{�M���:3tj�'�Mu8d9*�"HB���o���Ep�����"�|���|�S�{u��H����i��\;S
�<��'7�g�B�����������+\Xy��B�xi&�]�r2����Y���Q�b�
(��������j x�'�����iq����yp���>���>PV�����(h@��-d0!)�t�����=�����g�-���OS�!��gE������N]g7�'�nk���U��T��D�2��]6�-���4�
<��_��0T��.����g��[���3����R>:�� z��q~i�U�������\�6���E"�E��3�������d|'r�t�E�s�)���������`�����������ow�1����GC�)������U�x=��B����|z��h��P���?�4�M"���)� W�os��`�_b�n���S��^<	�1��/��@������EyXM��+������{��t���]#t
Ym\"(�����07����).�c�)����D��b�&�������s�k�)9����}H>?t�#���-vp����;6UD�m^�1���PgpA4�b�I�h�3N���MC������8K?���������
_�`d���*!bZ���9���l�����F[����SH�t��4���������YKM�J���`-P3%O��+�G]�sR�	%`����d4�����E��t4����%�8��]l���?�1�9����yjw(���$-�N�a���j�����g"(��[`_w�������~>���2��@19����#YL��=��k;l�wjoB�a���57���s�'$~�m2|T��������C��9Z�`k�t��6kv[�
Dd����}W�������d�����R�=�/�M�96nW'�����maE.��vm�D�ea4�a��X(,"�j�{Y�"��M��p��~TR��{����[�/uh�5��h�@�
����d���Y��Y����k�I32�>v9e��+Pq�.�l�e�)�oY�����LdT����EG�T�����}p�va_�����Yn$�N�zX��=��D��<�����Vc���D���u&C��=,���^���������#������+D�r���Ym���r��4�aq��Y�?�Z�!�������������(����fT��U���5&p?ny�q��E�YP\N����H|w��DB�T0���i9a�m�����Xq��oD���](�]��$�=>PR��TA�L��wA4,j����I���j����P	t�
���5j������z�Hc��/�hZ�p��;@�s��	����b��n��A�(�Xs^�;#Ql�u���3
#����+�C'�s(��$K��@��;:$��f���f5m�|G��c�	{��,3Q �4�j�/�U���`�#���#�m"��Z����f����d��y����py�wT����oi�����v$$S�V��|CL�v[��$t�����baR�l�+���� ������!~�)	���3�J�CJ����%�A�;�W��OH����l'�������p����&��r[��22���&�z���.>LD
{B�e���^X�
��W��5�����@/�<��k�����dm����_�����o\~��BZ:����71�u�����C����7���z��m�@>	������������Ie?;�}�;�0�p#�� �0�c.A��j�`2Cy���ax���=�,�E�����r��oi��V�3���QU5
��z"m���M+)���tP:�
2�����C$*�����#{���|=�6�? ]���9�s���nM#[@��t�G/b���pk����,�6�����`������A�h��Pe���P�Z��e��t���t��~��w�z�����d��&oMCA3
��P���ct"V������ly���F�[S��d
���%��
A�������48���]�[�vFT����������7�S��Xu�����d`x,���w�8��������l�������b�X�����"�`j�G��~���������o$U�Mir�%����k�^���^(X<4�;g�����7B��3<R-8��}F��B��BW��;6 :e�
,
��|$�
w���%yO��3����������e"�|U����d�cm���Z3c?<,<#���h���H��O�-N�rY	��Z�d�������)�,k0J����^�")���6�������z�����q)�|����JB�Jh;��!�������?�#�����
2����`�6����~P&������n���%��X�K�;�l@�$Q�5(�-O*���Q�}�<es��S5a�]����6�H����6_5a�������������k��?mm_��������k`��1�o��.#�5��������W�b\��{n�
�����W����P?�'_����=���w��������$0���89�����<21�2X���o� S��%�t=�%�r�J�y��bd?LHd^\F��2SU�;7F\�*@���y��xN�z�m����T�$�"b��T�1|�h�f�Y8'+���.'�d������YY�@y��d
�jpKT=�wy`	I�d2q��=�%s��X*���T�I������V�p������y�La�����}��#jH����l�����p�IEZTA�x���"�;�q���5�c�z
b�&U�A{�����%X�T[������Tu~^��`�DQ3&o��$����	��E$������������D��KH����&MuQ��*�\���t�E�Wre���5-�e��[�����`I��6B�"Cv����>4!2�������F����g}# -XS�uk�d
��$	���-�nM3qYm�%�C��A���f���}4�=6�Qn���)-d��K�?r���U3�E-SS�[���%�
-���������9�h��5]�t�����`L�T3��Pm=��_�jp����4�����)���[{Z��`�~����>�� ��^��nI3y���EK�Hg��-0n�N�k�3�����;s �`L���H������b��d��5�n<-SA��C�-���`w��Ps[��
cZ�����/sz#d�iA�E�����V����KN�E�Z�f�L��,j!���y�E�L��?������E=�� X���$����~�lJE��J�����G��UM��6�a7�f5���������m���d��Q�:��.Z��N�USZ��+���	��T�F�`��U�I�V5��5��*����$���(��e��U��q|f��%�U����dGsQO���a�h��nf�1�j.���]�.��@-��i�����_�������������L�|�.5�A}p��1y=]M��o
5�4��,���P/�+���iZv��������z������Y�5�{dH-Ry��:.$�H�< `�0�H\�"'g���W������d
.x�7?G��8���LM�L��Z&��n:-�|$�dX3��7�i��4�B�@4����l�rb�CO��D����}��&�k���%������,�y H�n�Z��L��%�l~����~��A�B���Uv���!��Z�����n�y��B��q�r1"�D^�����+rj�2!�x��E�Nv�AK2S�j�.U�H��&���]�q�C��@��:�h�l����u�.)��@=���L+Y���U��sU��|->LT����v����2��>����^�~ujmAA��%�^5Xql�������vh��������,�Y�GV�OI9��Yj$�h!�)�����9m�e�	���}�F�gT���
#����F��+H(��Np�WS��^@�;y
������#7�������T�������c�.����-���U!>�|"���W���W����:���Lh������|���'f��h����9��y��_{1�^|�k��Z�-������<�M��\���.�/H�;�+V6���EB��0��ynzJiEH1{>�K�#'31��G���h��!^�K��c�T�/�+Cg!n�������c8�H
��\������[	-��O6�y����$O�����kj���]S���B��r��	-U~�5��E������_����8���AcV��L$�z��k����^!��_�p��R���Db	���'`J2���|���0~��H�Yx��$��i���D���D��\�	I�����n��S���5I��.Pq4�7_�[/9~����/��Z��Ij���XT��
�����SiIn�+W��/<�o$K��h��F���,���}xt�_����R[��K�)����=
�j��e�D���8�u�5�Ca�]��Oo���*��<=�������o���L��+!�:o�X�ev��*�t�F:i>��jh�T��e�$'��~��g:�2�s��x���w�"���_w�P0Ps������B�Q�$i����f�<��4�WAr>���^��t�dr10������hFnd�*Z��EUq�D�*��?�|�P��f�>w����
�&�=���B��K#_a&��g>.O��L���`���	{D]u�
I�.ZI�:y��GQ�����~�������3A�8��~{�+#S����W@�[�_�ylE
w�=<FG��B�l��L5D�4BXA�}���@6!��Ss4f�by�|M�q����bQ��4W�p	u������}"�PAH�v�C����J�j;1�Q�$�@<K�m
���d-���������=��l�l��9��=q�����o����cw��"HKg2j��"�������Q��i�q�%�)��=��Gy�i�Ca��7������-YX��+]"�� 1P~KK������W@��ztth�����]����
M;�C-G<%���@�����8�������;L��q��\m�'����}����T�D�/���y��4i���H=7c�._f|�e���-2�E����X��Z�����}���cwv�d<-K-�X>������&��L�n�"���	&���}�r�������+H*�LV�BS�I��	�l�M>t����$e��:��Iut1u�p"S3��r�5	�7�L�Gp4����HB��[�+���<�Cer����E>�I+�~�$��N_�C?�����i�U'%�#�q5�*���L+�����F�HJ��^V��eZ��}|�l����-(���6?.�
�`���gg���,C-}B���]��;'nOU�����������H
<v��SsP{b����bU ����:�����z'�6����E����po�*1#JA($M��y��A�����"
h�.�4�Q��v��T��q_!QF��m�����LF-!�wy�q��et���P&�MAW���T3t��A�����f��vuw�o9R�u�$8�����8b�~�J&��VsZ�b�`��oM������[��H��mx��P73p��
��9>	�8@U��k�__��������JM�V���$����!�������2�~�B4dyS���=���D���LW�0�h�HLH����n�>�����"�P�m�.����2+e��4����R�$'��z)�`��D���P�Y�������5F��<�!���������F,d/�[�^P_���[8�(W�����x�Zl.��=]a��$�K{��G���|�G^�,�����o&�M&T�E���&�����	��t,�f� ������z�7d��{�����E���t����&��/H�������&e-0�nU���&�U�>o�5wb��7��R9�y��n�h.��2��
��Q�{�$�f�-�|�Xv�A��6�����L:a[s����c��,��-w��Z����7���8�?y�S{CU�M���B������i�_��g�^��WX�����Y�
�	I�+���A������o��,u��&�t�4n�������J���#9q5b���;]�%-���;�P��'\�"��M�w��Z@0L��Q���T"���(p6�M
�������C�2�a2��2��0tK?�-3�EXUH�M/��-,�4��=��}o�ZD��I����a�fW1Ck �`�>�����8�(�>��R�3%�_�9�7�G�%�jd$@��E��o�:����!%"�E�:����>��/�4mL�����@�����?��o����U�u
��j�����d��7�u���7�w)dR+n�����l���]��3r�~o�:/�w�J��xT�N{k�UV.:��|	�c	�����2F��z��Yvk�y�h�5g�����Oz-������^z7��m���Je�\W�t�_����{)7�{��������j��ah�l�]�����LbB��&"���8fC��Q��w��v���m���j��N=hA�D�z���:��~�������k��=�pq}��������?���+�p�XD��?W�b�x��g�X�C��"����>�f�X���E�o��-�����?���{�xK��?��Tk��3<����>�����j
b������*b�xO�
q}|�������j����O!��2Qi�B�O�r(�c���q��!�����b�����������~���k�~���y��#U�>J����{-�~_�s���gK�C��G.����������=����?����@VdK
1��3���������W22�F';���K~���{�U������j���n�Z7�V�Jg�D2�����x#3�����=�����_.����_.��g�|����_.����_.����_.����y�h������=����Tn�������'#��������������~����Q?�~��'K����
��E���q��.�Q4/{G���`E��q����Q4.{G���\E��oq]���Q4-{G���XE��_q�n�Q4,{G���TE��Oq��.�Q4+{G���B�C����6��>���
�4y�P����p��?�=�;�y���P������~���k����>R�����������p��?��;������#�����nk�s�eN0����D)2�c�Yj?��8��!��$��E�C�3h"��p*���Qz#k�j_��J 7�5|����M8�R����:bnNW`�ya�������m(�_r���L�����(Hk���
%/gE�PY`���c-0���	K�� K�f'�Z����9�h���5��6.	*�x�������DY���`�5���,Y��G��*��hA��q�N����h$d��6Q��.�Dls]���<^�cI��q�(_?����Jm=����{�m2���6�%�;�M|H���y+���G7�S���W�n�V�9��Q*k��q����|J���K���J�l�q��-c���w"���oJV;���?014���.�C���b�w�wj���S�`3�x���J��Z!+��,�W��<�����v��������m����_I���B.>���R�����V���d>����
�R
m���01����G�'^��`?
�&�YJ�	���!'��7v�J7��f�� +[��hN�]M~r���vTd4�k�?�kv���P�����������p��Q��vv����*r���fE�����XEiK�B/�����!�Q�3�X�A���37����Qd0p���k�n`s���#��X��M�U�xhq��~uY�3���2�|L�D���k����V���<���p�k%Q�_�P�1�e�)��Ld\2Y�a�P3��(~i;��w�����_�g�wvGDqM�G�������E>uW!�m��s��� M��|�Ef0p���3�KN���S���frr�N%R�y<�U���E+�d������Is�����`���1UU�`���A?DQ����"[D��1!���}u="��iA�ov�@E������zq/YeT���d����TI������.^d<4U���o�>I�A�(Ou)n%.��T8y�<�EE0p��^�Gk��VY~a���Z�cS]����h'����^����/�������.@�#��y�2��P��� ���b��B������$t���=�=u�����n��;8��u�������A��SHV��"�V]Fu.��[�L�D�d���w>{(5�P{��������e<���K���;�.;&����!����(������Qk-W3�Q��L�@.�g�\�*�t�P)-S�}�(�yb�&"��:��
�������
D�����yq
��`e�wPu�����K\+�DQ� 6V�l�_Y�eh����)�c��T����s��u2r��~"�+I��,��d���x	�`wT�4/���J�9�+�Q}���B{;x}�d(�/���br'P%���~��&�����IQ��?���A��V�(&�!H��'9H���j��d�B|�,�!u<�h���JZx`~IGD�:I�_��{�
|��%��GYK!�d�����B����0��c�I�	nE�*�&|���UQTA�S�`������"N��n������q���L=�}L'RB�0�����}`��L��W��������u����*����Pr����v���j�c����5�D������E��T$���@�8�������i��T�l�'�'O��d����C��8���vF4&O�+��^B��i��A��a��(K����6g�p)��F�0T?�}?:�I�~��fd���Jx�6�)��{�����"8[G�����Vi�s@�4C��v�t�A��������M&d\D����o��P��
�9�����Xe�1?��&�������"���x�*�2P��(J_g`�Ek�Ae�PU�L���@�Y2���2��	/��!���H�p�}2�n&�~'�?�������D�g��al^tPC��� 2���f>�d=���������DNX����P4-�-	����;�a���� q�kfp%�C��Y<~��g��U������\�]/�|~0@�d���N�s���`�G
@����!��q"m���g��|�����\�rdb.v�d��%�r� +����z�*@�Z�H+[������� k�r�\�0�z3�F���]"���f�l"���#@�iML�Qj�����4GvI��ia3�h�y�q�@����������f��X&�b��s�c�}��zp�%���p9����XS,����������hJ���-�%W�q`����9�Q^ikEF�<8�Kp�^bW��CP���A[2f��]����U�N�V��-�Hc�{�����qA�u��������{��HX�pa/��|�&^��pP���Y�w	0y-��T�q�8����v!��Y6���/Wbv�:���/�~��p��cr���0���C7Gw ����|�P9x��GN�����y7���:6`���@���#r�f��B��{5+���T�T�f���?�8ek4v=�����������n&}�<���c�;1����a '�"_�R�RG^m�����8����;�+9�`E�aY��H�p��%�}�a����v/�
[Y~���������������s[M���|wj~_(�`O���V0�����C{$S�B\�L'|'j�_����-��O�x�IF"c~�F�����/�9�,����a��v��F�S��*YYTP2�/�S�+~����M�,�on�%���`�?/5�������@��Yl����VW����h������
YU��$��W����"/�S����f�P�Ss�-J��U��B����A>��OEQ��9�5�]��������80p�B�#|�����aP�����Q;^Q������S���D�~1�����)1 jt�n���`�?/��U�y�_��X�|mF�WS^"/ZP���Dk����ko�������S����LP��vYD�
>o����-�BF"�z9G+,�{�����}�V��J�H��7�]c�n��y�,�]^^�����My���mL�$Y����\�@�A��E�����`�t��-���M���g�P���[<~-	��7K`�o;��b��krh�?�����t��nn����p��o��&^]�^sh�*���#�zRQ����"�
�o�KH�c���g�
�.kv�
�x��_�S��g5�^�e
�u�Y. S$�JB�����]/*DaA��{F@��FQ�VJs�&�;ES��v�g�9�H�UI�/4��E��l��d,�\Ne�'KhU�v~�D�k��%�%��(�\|u=aw�L�}��=�y����7��n����g�O,B]E�+Z�����v�;������l^AA�w��.���%�E$���b�7/@����W��h�X�|���/�f�����z��O �����>�K�i�;}8x4���g��~��>/&��1�&��J �+����
���A*���0��x������u�Q�3������\r�j�c�{~����_7��������np�������<]���+���}���wi�&�9������zEX���v�U�d�4��Iw�����,]t�>T�������yr�����d�v�1tF�o{�%28�`������^��U���'Cp6$4�%�q�?���Iyq�b>I!�YQP�O��� ��o�*!K>�L�o=�&�V�����6^�h�
8^�@�+�% ����W*Z`�i��t���dv5��7�h%#�6�/OF+p�RQKDF+O�n\G+�H�L�X�4X�����S��e��|���&w�.Z����CN��wu$\p+�`��*�7���������U��4�D��������:r��W!2��h�2d���}���(��mm� ^F"o#v�<�����Zg�������t&���C�x?����� 7���VM�W.�RV8�OEQfo�> �
�`���%���^E�A�O*��:#Q��Lbj��7��1���#D�*������G�"xE<����
�8�+����!�W���'F���<�W��{d���*��j^��+��mM�S�uN�C)�F#����"�;�[���9�
jQ?�+�[�Yr,?����O.
��zrQ�����~q,��������X��~N��%�.
��x��:�m�Zw��D���h�����%Qp,�E����9Zq,+Yr�����o�_��c��D����<�e;������~�mV*��&J�9�S���W�l�L�^��|���^O��	�f%��/�%�LU��_�5���1	��Ak�a�o�9������18��/�����M�v�|��h("�k���w�Mc�8������L@��x����`V�R�����&���)���eyg�EZ(�c�J������h8Q��/r�k�$��O�!�B�	�h8
��`x%��pq	Nu��A��x��x�;N{�HB�n�t���(�I\O�����Ln���B� �p����J�����������b�
)�Q�����Q��D>��'�h��%_���]6�8�}^q��"0WH�`%j���=y����W!	���#]���0Q
�#�X��B�Y�G����,_h-����6�@��15L��>Y�s���������%3���!#�[4"���C�.L!bO�B>�6�_��{����2Z���	W�i�
��fx(���������+G�+-4�68,:��wg�v������[�����6�H��T�Z����R=�p�I_� �
�p[�V�Q�.��O�j����*\��S��w)��'�2��n/$���Fdc:����I��h$�aS�sW�� ����.u��]q�u����M����M����6
��z��/����fd"�f%A����-t���u��2N���;�Gr{?�M{��s!�����l�M
*�����#<06��:P��p�'�����V�����l�"l�����
Y������e�;;�JD�;��n�d���X�L��CEM��u��8�|	%�)�i�C7��<�D�������/2A��L��A[4b�E���K�P
w�"b/�n���JSy�P��-A�����������Pm��[�tmq��GY�hlq�x���N����L���]��Do?�DY����C�=����n�xh�W/��a���R���2'����m�h����F"N�HDF�a�o*\w\<5���������j�����Uz[LHy�u^8T��*P�(Q������eU��/y��gK����r�m�/����>��#���\B%V��_h�����/�)�Q���+�#���Od�h
��U�0%����u�3�
���&�e�����G�X&����3���^����Y�
����SM*�����s���j1n��fc
Y�m�Q��Ens+d�����|�	��Hd��2�[;'�Pa_g!�<�����|���yA��P�N�������
�����������S�zY�<n��������U��B
5��l4�o�����]�<y��hm�q�u�FV�6����
cui��!y�VK�Hh�����m#�9�zF+��D�8��7N#�x�L�����~����K��G��^>�BRR�<���^l�>��~���<!y=�_����Ml2��D�H��8�����Z�����u�?���
����0�E����3��6���V�T;��:��q�����4)�F%<=7�%��Ve]<����E�������J�G�9Y�#K][�{��!^�8�b�2F�
�����4����f�����%��[�jv-XD���t�}me[���T���7����������{9#�\<����zE-$�]@�
�TX��1>8>Z%�B��=�,C�I����P3�bm��=0��$k��T���hER8q��~Zm.k+�#�%����{Z�"Yj��}�}Z�D����,��r�R��6�gQ��g�)�x��Av\�
��
������#Y�������4���l|�K�Y_��[w����l����-D���������,%c!:~{�3X��2H�|������L^�e{3v�WE�QT�� <����Quh�SHs���c�eu�b����=I$�������������������u$M}c�L�AG�7��W%A�X�����\�CC@dC#n���+Z�����K�U	��d�wQ��t���'�wg@��>5gC���O[u����D&K���E9n}�\���
���D��T^��FZ?�+hf#�x��N�,���a3���K�^-cv����f(h���"�����?4�y�MVSmy&�&����&�x�L0GR#S{i��f������hS\��>��x��9�H�KG1�f�}��f�G�j�-��N��=;1�")�j��/�W84�BEC�\�W�F*����	�C��~��(Y!��N�� ����t6��J��4\�V�H-�%�H3n��@D2m.g|;��]���Lw?������ b���P�SC�D:rX���0a������p�;[�s!���";D����4#6x�����&��/���f����<zzy!:XU�V��T��%�s�#����Hc��d��EoV��$��!�r�Z���+��(�A�,k�
�q�/����t���f�[$6tXu����D7�t�X� �X�G���@�%1�H��*(}����l ���4#���KZ����(^�FA�T������
��yj4t��:��r|�AVb��9s���^�}?�9
�����a��?�Zw�Z�x
&s��n���
��ck�@#�@3��0fP�r���}�����b�)���!-/�� r� ���M$d��<���[G�yzxE���R�=1�U�04�u�{��Z��0fhz��F�	Ye�1��2Z5�;��E|d�-F
�$Uq�D��m�q;/�0�t^����S��)������Ih�j-)Kr�n{���o�c�����y���g�d6B�Q%��>�+�2�bht1���d��+�d���$����,Vf��:� �:�H"������w��D$.x���b���|�|��l#���kv�L�-��]��^&$/����=yF�iqt�2�FT�&�M�Z�_��{t�?/��;�P��Mvs�#����)�v�6X��#l�'�K�M��#��4���_�;������\���^]�6����l,>F�5!1�@M�i�d\W���	������]a�x��l�j	3���y<�.�U�Q/�"�N����l.2?�]TaHU���n:|�d�������i*\!�A��\P��(��5_o�6I]�L8 �mD�<�i�h� ��,�Yg��b�84��Ot�����1�i�#���m�~#�.��?H������H�#~�$/k(��q�]\"'����~iM������e?+>/"^���q[(	%��+5 ����dp�D��O�=��y�fb:x�F���J�{��'H�E�?���X���xce�w��g�a`��/�p�b� *�KEU�j	'�/'��KL(��qP��[w=ko&Nu�pR���	\��d�����
$������m:!�z)��)C�1t�G!��>�|�F�n>ong���������"�K
������H���o�q@F�O����f���|�m�|����,��TC�v qM��X�yt�=��+��� ���9R|��'$Ur?�J�������^��\�7���4E�Z;�*���B�`��tD6�j������a�:��m���fC�y��8�S�Xz��IM�
"���
��WdQ`���[��52��������[S���y���7�����sNH�^�m�#KI-}^,����&)����=��a�=-(��<�8���H��al��i&K�)q��-�� ����������W��]�6��I����)-d�|/cFN��TL���R`6Wh�2)�mb�����������`IX�w����V,9L$�u5�E/���F��\VK:�WQKZ�X�����;GKZ��45���_\��d�{o�����d��j���9��-�T���=�D�������tjI_���G����lI+��P�������/��GC
�e
m7��j����]�)�d�m6���Z�����D��hL'�)�MZh5����6���0�U��j���+�����D�O&v��~�e����*ISrKL�S���|qBe�/��.
��"���8dZ@'��a�6w�Q���@'$�
��Ndl�F	X����&>�Rb��N�	��S�=�F�L�d����"��Q^9y��fm�������t$�����4�r�#��FU����x�������3����H�������`*I�D������0c�c>=
���8�BB�&�T��n�G
��e�%���9������v�9������TK�N�Z!~*�X�E�0��J$:�Z�.��DPP9]7PP��'y�[C��j���ry��f;���XAM��@^���TG$6�rS�L����l,��������
��3�=����hU��gU���U���n�����~)��3C������TAR��U^s+/\��R8l����k��PJ��/!���a�����\�%o=���D�#�%��\���N����4eAu�5���i$e*������`I�/.�z_�I3��3W�V�SQ���:(��)Q�7�H)H\��MT=n����YtT����!��tl��`-~7����4�T�W�`����G�����\�����u�K���uY�N���fV���H�O�*>;�h�.n��D���ln�]������
�t����
>�Z�hjg������1E����&#Z~'!y��)���o�n
D���<��7�3�$�/������R;`�6w��{�D����p���q�S	^%�6�soX+7=u �"Z6�o���+A��g�.s�M&-�w����W�����6xmj�u�yi�I}�z�[����$��Q����9�?h���H���w���hY���x�X#�A��@N�����"���.\��H�H�y�{Z����C��]��$Z#��'��KH\��f v�,LD���|>�'����t3J��63��c7���r?����q�G^y�w��R�
�)�4��O<t�WB>@��}����$�1���|A�e�JNq��+	������~�Z��|�#��d�8�wG��T�����%b,�����z�$�[al��O�G�.��@7��������i��!�nv7C6����t/�M!��m�Z���*H<���M<o�u5-H<��p*����D~����������jur���\�7�yE-H7��%r���IO/�������f�����Kb���f���!����f����?�>�\���+&:V�&���'2��Lt���Z��V�l/Me���(O�R�n����T�227�t��J�y#�2�����]g�T��!��m.���>/$�5��Ii��Ll�GZ��8�p`�B'���_>��trh)D�;���O9�L�|�%�ZQ�Y��y���O��,��SD��W������q:��:�4E����y80`&�������?t��Z�M�hj��I���W��t��C�j��7$G���Mm����g�Tt����z����=�f���D��S4U���B���9��z�tU&65��	��'��!e:3�d��mp`�zmJH��
z�T����uF�D'���aG�Utuu�vu7������F>�{��b�������<�\��y_��1~�������M���9�����>q}~�����K<����e?�X�c��O,�1r��'����}���l�B���g���*��H|k�S��yL�~��}����?/5J����A*��t���w.������K��8��|�������G��/��Z�����i.ud{�_�<��l�������_������ur�������~�������d��Z������}��?�����^������ �e�N���W�s��:���?���x��h��hBd���k�,gqL,n`g��S����8���}nl������	J��Cn9���'����_���7��-�U��I�����k�<\�����<���Sln���B��%�g2YK���"Y2�m^A����A�D
�����W	��K\��N�{:u�e(R���\8��'����/�n�}�B�]>Y\u��$
ny��V:��T�Z7:�F
p�	�ZnT�r|������
��|�4G��������hVZA ]��"�M��	%�d�r�������j�/y�9��Ol��kG������v��9Z�����������Q�
Z7r ���qI����x�Z;�b5%�����o�A��������
Hz�VQ�%�����|$��[Q���������$����}�O��x=�O}p�����U�u�����H ��x.Qs.�$�o��_��_�H��K�y�|'�nGm����	�j���n��r07x��$Y��[�����wX�uC3� -\��,�<��3�xL��v��P�
Y{�>�+��w���^�.%������B�<��?��#3���w�P��+;'����)�x1G����F�*Z&�V�>TAl�W�`b�$��� ��:���i��P�3_�H����i��*�z
��[=fL~^L�g�L�_�zR��y���&��%M��� r����K��m8��/���e���Z!'������(������g-�O���d�C���i3B��l�P�lO�z����$��,����GY�����6]����_����"�w��_z���S�hH�,,:T�����d�d��j�5�:����y|���g�?���Hd�>q���"�@��n�z���-��{�#��]��W�H/5������}t��@��Ne����XP����[��������W��������M��$'��K
ip:���@�����0��rh���w3�������f�e�t�(_�tP�S��dX�������B�����!Gn~�h�	I��OM��BDsU���\���@l�P�=��L�1�i�������DY�[�+������@
��C�I�?�v,����f��W�����RYe;y�����C�|��L�,k�"���s0�{!R�#�+7������|>Y�qh>0�h�En�(�(�[�z^n�
��3��t
����;��Y�
X����x���*���Y;��{���c`X���cN~I
+{Zt�i_�DAM��K|�a������<�^������3�K,�W����uq������c��������D^�J;�y`������_H�%�s�1������7�1n67�ei�34����M��F�������%�t���#��DmQ�"6�Z}[R0�	�_`����'���D�F]�dK���}A ;�d>j]v�
���@=��g��kh[���Ue�&�RK�P�:��*�-LS�B?�IW���3"v���{����zx��u]�k��v�- k�9�V:�_���2w|(k���(���Z���+��W��z�}����G>9����Z��E0���P�����C���A���� o�;��	�w�5���5�>������� �<�@D
%a���&��A!"������0��zP�"9((M>�0"Qk�h�Jwd�eb�~n���b��-�.P�(~j�Y�\�f���3�&w9���!��W=�d���h�7��������Xs	Ss3b���o&`hmM
L��\B!��H��`���z��!�����	-2u�	�V�iN��N�:o�z��{{8-j���DP�#M1��:@U�L�ln�����*<�:�RA���4�C��S&����Je�%�O}W�d���Q��TE\8[����������r��C�]Q� /#oqd(���rdz�[�������9T[�F�p�b#mtU
Hu��>�v��Pm*h�s$�T��+��3�<���>�a��W�:C�����b���B��a�Y�x���s�����}����N���������y���x<�B�"��3���~E���+�4�#���/������-p�)�C��vzD����l=6�U=�]������~������i�U��8C�v�EAxB'~��l���)����;��}v�P���I���:������<���3:]�
��a��,�ef��f�")�{�Gg����Tw�=�2�u
Q��3�;����#�� ���%ZE�m��w��V5c�������D�)9e1v��f�-�I��d�%�\���)��)���O�a}d@;V�W�d	M?�z���I��^��dO�vv��+�	��&C��i3�AV��=�������Bf.���`�7��mw�e���ne��+���K}�i�'�l����*�A%�4E$�x�L��L\�j�5H05��-���x�y\&lrHHs�������aC_g$A�6�[���m�����~[=�!-Ps&/J�29�pu~�Q�h����aY���4e�,�f�$��������O@�r��i=���Ih�X���U"����pZ�yg�.��;�p������"f���w<_�=�+��L'b�$�:���Sk%�q
�|�R���P(4Ey[Y�I�H�~�[���v�J���i��A��q#)Hs/Y�����V�4��:��57s�2Y��V��G��,�v7GX�M:Q��87����
4pM�3;�'�D�s����C9����gj��ov�s��0�`:M�</$�Xc0j"�:�O{3hM����7��f"���4�`�p&�	�����qh��KF�|J�C��`
����R�?�_HH���T�
��ie����@��f#����8��������n��� C6�������m�`p"#I3���]��\���S
X"�)�q����L�B����������l��=����n�"h$s���6�U"�r�Rzwyb���� �E}<��?o��z^=}^�'_(��=���>N`��p>��N�J��f������'r(T"�3Q	s�m���>E�E �������/��4~���K�
ae�����z�m��FuM�������	
����k�*YZ4"�0��l��9a
�6��I�Z���k��o�� `������D��`%M����u��l������0c`a�sO��\�K��D�m�%q���"K� 0����yw������E��W��>����~��������.�Gu+rp�\���:��I1��-�D�������]���/�Q�����B\q����K8������-��	�+4*Y�c�"����R���AM���}j�BQ98].��"���5w/���S'���/~)��vt�jE����_���;*�h
��[^p�^!.v����A�d�������z���5]/�@�M�j�����D�|������Qb���s�[�9z-�u�l�*7��O��u��RB(2<�[3�T��i�Y�d��eH�7�zP3��5����a���up�f��1yQ���w�����"KF
�U�	��ho���%��p�h�)lh�3e�%�dQeq��/�jk���2����1C�c�w���E��K2��K�����_>���������a�5�������8����S^h-�s����|��3!d^�q��1]Z�Bt�R$�dC\���F	|�K;�~= )�v���sL�e������9�=�4���@d��Md�Joq	t����[���-������l��������C}�\W�f�|]�/GQ��u���
�,0k�b�+�u)}��7����l]=���b�p$Ov1��������]��X��B��J}���7�I�����=��gpc�\�R�[����o������k"M������
����G��J��\#>��9x��%p�^ws���A������]���=�UPA���&�L�����mZ�6��~J����D�`��h��u����j)�/w����>��+��7�<|b�/41a��	�+l>�pHV�*�-��'��i��q��X�+��=A�K�:����h�����e�4v]O������'+�����#T��=q���VCJ��
����PI���35����%��t����H~�0���w��^��T��ZO����fb��b�j(�=�MwHh:�Z�c����5����$�l"c��87^��!�y)���"}���t���w��R�y��F"��#[�BB<����UF��_�������~a%��������E\�|����O/9���{�M�o��I����>e�{_��h��r�;O�r�o$����?�Q���	Z�����I/��4���rW����������Z�����A�\���w����%u<c��
�����5
�������
��9�kw��Y�����R�%R��t�e��0U����H���[eTa%]7�u�"��-ON[A|WE��p�<�'�U$l3e=�/y^��o�Ov	Ycx8������l���U�h<�*aB�F�=Q����d0���Y`'��Q���]�.��WxM]�����Y*(7�IJr!3L���*v9���(�.�b�d��e�~����lX�*���e����|?-]�L��r�����������&�O���o������s�/'�D��]���"h�O����4�D�g�,�n����%j�M+o?�e���iAT<��E��>-�9�����A^wCb�u(��z�;��/���?�4�e����9�S�Y�QK3f����
��������=J���s'��v�� ^�yI����.�5<��k?G�S����v�����B"iE���L~f�i�,���$�[��3I����,���r>�k����F@X��$��f�I5D���(���Hs�w)�z�
��i3<�r���\LpD��p�i����?������.�0��m�x��W�ZN=���"Q��-��q�P���'�c�=�Z�c�1+��C8�|U�5�����Jg���D��\���A+��j�G����sD��ud�9���F��o?nk"4���DK�0�����.N��DV��V=#��1�e�l���:b�g����W��'V��)rg
��� ������BzWk���M��AB��%SN��8L��$����B���1�3����3^���H��f���g��O���Y�N+�SI�>�-��Oc:���$��x��:<�X�D�"M_P~]����wc'}����C�t�&0���C*��5(�] +>�F'�������|3������pT�OX���`������c���+����r����A���
��H�Y�!�KHjb��?~s_��*�3q0�IA\e���X���#MU���V�X[�
�aG& =�a��7���fH���G���J��<�BG�"�0�&�Qj�V��]������v��Q�cj��"�e�]����DU�L�"S���n.~S/7��t���:LL��;w����W�Z�'�e��F:W>:s�M�\����e���6jt���u������(��?�p4�P&D��P����3pCy�SF"4"p[h�O���	��PqB�g��]"�O�^��f���Qd���\6�S�1��#���A������hnz�Y��x�����J���������G�?�`%�=�����#f-��Y�4��Y�X@/������K�V�D�m�)��������#%���`����x�F"z�H�(�$(���T�yL�xPWoLZ��G�AF�����4��c�����i_�(Y�o�����w�b^�z
?}���`"�79,7�J���q#����e�x����x1PZ@�xQ��|a����%�I8�D������Y^/�\~>����Q���}�4���K��2�*.�0����u�_k!�����f���q�wZ@2G��e~��E����1O�n2e�)�:@;U{�C�����`����V�,OM>���dhb>&.������m�����elX���<
C�1�#���������
x4�:���a�=
�v%�7��U�Z�\:�5�7���C9.s�H�e����|��	;��bl
i<>KA?��wMp��L]�6.4�KT�ty�p����i~���>>���?�#���x�\O����`���-�D�Z��00\R�����v$�7�|eY�h�N��l)��G�9B�z'�T�2�__���Z�w/$�#A'�Ga%�V@E��0��)2�4a�*���O�zD`����h"�k�!���)�S4������7
�{Y-x]���,�j) ��1�F�7�
�C-!C.X�"/Pn���c0:v�v~M�T�7��;�lT���U1�n'v#���|q?���
L��D��;����(��qC��W�q�f
���n��:S)�~����K����%���J�����~�N�@�L�_!o`��3�._<H�b� ~���<��~_�w�i/�2V��S��2`�5���f!/�t���ES#�gN�	3�Y����e'�M��Zpa��'�k��Ase�i��9�\@�h��l��u�A&_�$;z�=���J"7=Jv����Y��Ua\���.%��'�22��>^����[
r�7��vg����SQ���V������T#��e]o�d��Y�J��4�W\��A������>��ol����F%���Xb��V��v��	:����FQ���Q��,@�����NQ���> ��ui�1Z!�4�
�0T6	~���a)�����<�u����L�AD���L_�}�R�,��
������c�����,i�&C�X��)�z��+���Z���X*Y�@t�YG�n���;F��W�/���+y�LSv�X���3����M��	+d+I\��]��X�'��/��&6�d��C�����]��2�FG+��s�Q���/�3�����s��W��}�]�����'���]K��I���u�5�j����C��>�L�d=�z�[���Hh�A�O����e�%�2rn8�k�M��>9��'���.���n=�0�/f�QZ�2��HO'���A���m�}I@�s[Y���G�����%Gx�}FLD����.t]V�������n�5���W
��0". T�����|D�_3O;�bl��oEFt����1��f�g�
�(� <�$O���m7��O.��c<$ID�H����f>�+}����i�tZ
�9r�������p�
p��q2�������fc�����|s�������������B-�{|=�_i=��/X��")��*@��O1���zZ��>5E���6�Q�Tpr�H�p$��j�.1��h�����#E��yB<r�$�!��v�k�-%��68D�c�7]�W�z]��?�������*�A3+AxE�Z��&^z~hqb�v�e��7t+�yvG������Y��'] �����+:���-�<��{�����iC��/�#aiC$�*������6�?�[K��?~�������������_���������	O��EI������>�?g�|����~������>�5�%@��rk��Ci��Q�������y�6�����<��-y��	���Fk��L3$"{w�Rk�K�H8���Bv�e�E�Y�@�e<x�3�E /$���]��8�C�u����:������6���?2�U�r����J�a����wd����w"������)�]b���$(��*(���\��C����(�����y�kx�&�YK��Su���vI"����j8��\��:7�,_�i�
jBd{�"�e-��Yzt���[�b�
�0�V�'\�ZSG_������ �������"-�3-��lPO���5��U�_"�Z#X�d,��L���C�����V�yY�z��v�����#Y�wf�QI��5��|�#�gf�t:�=.���P{�3��=-l9R�L�%Q�hO�W��k��iE�(��^�o��i"���BSza�MiE�a�fJ��(�RIrN���(���x!:�hE`��RL	EC������#a"�����,�-i�|��
�
qQ�(%3Z�8���������h�
�V1V\�q0���C;8�dJY�����xhGp���->������	}*�2��+�iER�]��T����5{Z�T�1�q�����?/&�*_:��LjEM�S4�����nRY�z9��-�-��
O-��.���G;D���jsm�MM��Z~e�zg��@�z��.�K�vSF�x�wCZ�&oU�D��E7��VD}�r�N�g�..,2��q���1�i)���,�������S�ani�H�BcyRE��f"�t�hM�C������	��:�8�5�(j�iU|�������o�=�hQ�`O�q{Z����d�z3k���>�;rTW��5�N
���%kZ�����RP]S!��T�)��q�%M
�V3���"�dH����e^��3�j�K������lG��1��N�T��m7�bQ�����fv�"Q�hF��'+*$Q�QX����e8����S���D*	2O�����]  ��J��77���5��I��'Y�{�K}N���������(�����T^��"���;27-D~V}	`���g�%$il����w�0}�h���D�"`�R���g�5�y#f�E]����$�{d$��"3�5���'�%��6lL����[�*���:rx�p&�z�`e_���C�]�Z��S�3X��G�9��{����H���")	���9�qOOL���+Uj���*Z��y�3���f�����M_��IJ�CG����;�����i��F����)����a|�-�jG��8Z�GC;�0�G��^��>���%
W�_�:KS��Ac��S�6�Y���h�GS{�7�u]CetZ�r�f�1a/�S��8q���������H������y�Ne���2���%������Exi`���M�����b[K�0�R0&W��"���9XI���p�u!x��II�j|�G�YV���K�4-x�Cd^f�t���.�����WIO6he]��/C�?�P����a����,K'f�?�8/!I���$Y6O-��Rx!I;8���5C�&�/����.?�.4�
r!���/,RA?�jN�b�"��InES���&5.H����P�u�0��(������M�9���.Z��Y_����>��7j�&��0����A��:�C�Jx��S�(3�*js�-��Q�
�3�^0�Ps�������SKV
#��p0�B"s$214��Kl��Fm���_���Z���fJL@�@B��	�;���}�~|�3�N
K+JA����	5�_o��w�����P|_	�f/����-�.��]��K�2}��tM������(�@��������p�=wx����N�A�~>!XM�c�x
����&cq�9tR&Hp�]2UO��������~��3w��?�-�_t�el��@-�n�V����aF��>��wN�iD�H�/��J�����%t0��D�Q��8 ���H�G��zu�y}^O���������P���e���)D���A�qV	����V����w���:`
�H���]�n"��'n��!3����}��R{��(�q�n/$���2�|6���DA�Uz�<Dj����=�X�j�R@"�mx���-�;�����hB����;������ �)��)����R��)K�	�#)�l��N���M��:r6�}^���!��:���"�yO�%K�H��.�����A6#c�"}����@�QE���r,�����������@�0�Jc_Q��F���+����u4���A�/$Yp9��m�$x�O���^X'�j�}�L���r����s�,Y��u��4y�C=����^���q�&(�w�4d�E��l��S���7�����Z��8��*B�8Z�1�|hn�cf_��9�=�
<6�1_� �x[�<�m91o�Uw���#��":	�U<����.�=�x��>�l��VfA]���fv-p=���MN`Ek-��Q�\�qpSl%K>��D	�n]����JD��%E��<������@T�����TT�����E�+SY��?������]�iT����,�qZ&
�0Yl�/��W�����v�����RG ���{ �_,�w��8��e�Hq7��x �;�����{�U�N���@Z�Z��7m=�tp$���J��R��LM�=F���77�(Yr/?�2���h�S[�y�-p$�O��9r�����=���6�����e��S^Wh���L�������E<=S��6���)�v �*���(��e��g�i��(�U����R\��J%�2@5�zK��L����;����U���,�D���c�������2��s�����/�aeu<ub�#�!�-i�t�L�=�lH>T��	�F�d�����_z!�z��7>����gib�]f%m�E�v��7|y-�����������p�Ltjj����Y��E-�LAM���������D�Yn�^;-sqkU�HOqX�������|3u]�a��W�����d���=8��d�H�|�8��t&m��qPk�;�\}h_:�a"*��f���s�\�A6J�z���~�|qB�	�"�YmK�������T�� c������w�B�:c{��-�@�O�E";N!?��/������'��|����M�U�&�����K���� �������8Y��
2O'R����8����������%���3�W���O]��X�G��^�Y&K��e�^�?�G���a^�d�|<j���D��"6<�>���<��|��d1�"��/}m�����u��q3�Q�%�YL�����a��.��"u���'c6��HhL^����x�G��|�h)���}J��Ks�!y�d��VA�=6�?Rdz�'O:x�DU�����eju�\8�������{�!&�W�u�����9-DZ�9
;���`���l�1��'�QCS��ly=f�6m�	�AP �ig8!������:E����i�W{A���|�Xg^KC6��h�u�
Y�����/��_��3�Bb2}3����n�����@wu�9��G��R�}��$<wb^YAM��K��4���K71��<���q�d���@_�dS��,�SQ��
�{4��~��]�j���n��h���}��4;���4��/�-B��yp��u���-�p�}�ur��}r��*���i$����:��x��51�/_8���F8��(��rL��y�H�'��<J��rbA�B�.�����	#e�"Z%C}[���^�q���[���>���B�`�_o�c�C����r��-[� ��$� �`�o.��itg�<~�\�RUN���-�EQ�h+������$�,#��C�'e�6�9e&"���-��=`��L �JA��5aA98�I���^����\��7j,���f�������i�[���_zL�bL�	��3�\���:�?n�}L?#��������]�[��i�R�C/�:�g��<��2T����9q��W�����$�c!Gf`F sb���!�Y������1}ZX���s�/�c�8���������������X#y}�[oe����_��O�������'���pF4��G�
�,>b\?��|p\�)���e��D3+�l��Z��G�@[R�~hR�N��D��$���n=|���X����__��A��8����C�_���,�U���z�����oW=�a�81����?O9�<�qY�����_o9~�������g+��6?��c>�������o�?������|����������|������Y�b>~�����{��K1������8�t|�����O9�>�x���)�����8�t\�u����Z�>������|wk�8�t�(�wS�����\�[[B�����������s��Z�g.��������$��K�����^�bn]���>��V����w�>�v��������o������W���v�U��Y���K��)v_N!�y70B���z���{70BL��!����q�F���w#�|���b9���SEG70B���z�������(v��G7P�~�q�F��x/��@��q�����~�(v?�SC4���I�&7���������;������!v�77���������;����qC��on���
����!<��b�sC��on���
����!v�77���n�r�_?������l��
���_7���#��8���pC�x������Z�>������|��7$���L�����\��w����nH�����?���\~�
����S�k0d^�.8��u����v�_���������q1�7�
���?����kA[%29+@�)�]� �q����<����G�&%���b����t�j%]�t����a&���(���%u��`Vf)���{��I����Z�U{���Nu��4%��!��k�F$��F@�U������7Hgp���P�	�
�
4U�	�l3RY�p���rs���}��1�F����sQc��p��|r�f&!�j*�1�	���"6	�J4S&������F�s���f$@w������X��Y���.�@[����`+'H^�$>vA�%� �����qgpx�2�r�����o��`�}/d��u.���`�=��������*��K��!�-X����g��H�%����?=^LF��h��M�f4!�M�S�_�Ui6]�(��H`"�\&T�}��S��2�U��,��An���b�	8��/lsbBDmd%��@������F��lf�m�R{(-F��6,�R��
������?+��~�,�J��w@�@�E���f�:v���Jo=]?�c���\s��Hw	��I��5�����h/9�v�BK�|V�M�p�Btf���Z��%�U���(��*t`����wm��%����M5�����D#;[�
��2(��#�#���2n�����Y��6W�6��W�,H=)�fw?n�Kx�`|a�eD#�%W��&���wm�{<*��kEv�S&�Izg"������"��[uN�������8F����H��&�#P'���(	H��<`�d��v����*)@��_�=|��#Nd�����d�	�����l]�`��mA�
���#�f�;mw���-�������)�/��Jo��z�xMTRdM�u������ru��!�<4eF�	Q5Jv
��2Iv��5�y�n�.�f�{x��9c��`�$��L%��]P�7]fa8��EF3G&Pos��Jos����7��-(�G���:B^��B�3l�;�{d���|m���r��~l� �Q���0��d'W�Fu����i[��V��r7�Y�|V���m ���'���������y0����E�����A.wt<���aHax��x��������'�:�����,�����I<�������*?����U [�|
+9�L��:����q����s@��l_�?Uq���]������"���*���n�W��X�����'Y2��$���;��5vY��w���|��U�+���_X����d�-����0�w)�����#�>H��f���#
b���K���>���A��gE��l���u��)y��|'�I�����e������C�o����!�1���H/>3�%��=��ga��h�� /�b:0�Y�zQ�[�&�������~���� ��Q�V���Pm����� N��Di���d{Y'g�$>>���]L	��%���y`�:�y(� E?��[����������B}���F���Y�r���]�Ty�E��5l�r�:��Bl�M[�\f��tB�*�| e�^�����!h�OI�y?B�,D��
X46�|�}�	�,`���x��Kv��QMQ���OL(�d4�1�-$Z���q�)����^�z��\�v
�m�v��y��x��c�Wh����T1�M1W2����|
'B\���Y72
GF���t�_��j���qB���fuF�2A���,&���x=�0!�8�������I�C�������Z��m�
V*B[FB���h�
�s�m�������V;�#��BlB�����Q&��	x8UE��5������2�v�1�P�����y�N��&�-6����������VDcV��9H���X��#����5N��+��	���e�O�/fB:{ �Q�|���}&���1h�:��Vv{��b����/�$��H3�3z|^���|f&�<_+�������0�����t
Gn.�>��f"iH-Dg�L>vn���O6 �����s$>"���Na�,o=_��N-xN�7e�o�C�_,
%9-x$�a#:�@��8�)�1
�����cgD������C	�%Hd��Y��b�E��f��5�{�8��oS�kA�����k*t�|t�_���+Z�7!L��.�ik�!'�K�I�f�u�E2�n�qd�s�[��h�[J�:AA�@���h8�m���I?�����v�a��5!�����5T����sw��Ir
��cV2[%P��#�9���d��D
�K=m����93��`5�
�#+�v�bY$3�	���
��/����,�,���.|��E�O3&�)�T��M�`-����3����T�T+�-*���a�`t�:��f�
P6�d���>*������O[��������>��h�W��*�Ln8
oy���B�L'2�$�
�j�SW"�����O�P��m��6������Q��|Tl�)�yxI�=&"�igAt�R�7��9D[0!:	�upd���I��-����&����rku4�6�-g�H����:��5~|� �f���)�;�)alF�r����&@��{{�f$2f�o�N�n����,HU	��������H����JJzb$]����E���V?�rt_����*�������?~��}�b�o{�f��L�X#��������������'7���x&���e_P�_���i�[/�<�R�'h�{K����MHw����	����;�0��i��}F������W�����m�./N��n�?��f}Q�����-(���S��w�*������v!����D�����G5�������N��p�-l�*�k�}A���0�I6�1�,kF4�f���r�I����$l������{����)pO��(��3����7���A8g�����Zv���!Tv�F����h�>���j�g������U��q
����|�5!�I���](�����t]�ihA�����Ag��v�1��]�H��."���sA[!�����`������<Q������S��������\_�������:y��Y������D[0!��������>+��77��/B����v�#\�Nvl++�������X>��F�#�����s��y�����2'%?O���#f��<�S��O@��8����*�
���#l�����������������������z���`' ��U������!�O
J�`���M��XR>h����gEt�JP��_���M	+
������ag���F��C�M�VN`�]����1N� �D��������K]��Y~����XD[0%w��{6��+�����)`�6o*@}f�������
&^wC�|��>�yJ�}`Y�6����v��j8;����|x�m[���y��@3�2u����,|�7`���La%b�����}����ns��c�L:gB���0�,L~�9j1�V����^��R����Ti[_�m�����eb�:�,_���#�	�e�d�8������8���q!F�?�������B:���?���'����Q��kE��*4M?�flr[����8�nm3����9:��0��2�+'�����
������K��[��" ����s{�g_�� "�x��H�y�2����Tvs'@��8�	�xIG��������O2��a�;DU�lw��<K�����c�CmB�r~{���B�xeF6�x%�����u}�2#���
����Y���j\�]�������<�d�����Bt�2N��m�2-�+�^+�4<�sJ��}��K�7yY���w3J�����e\��MH�;[I��i>+��A��B<^�����ASOd<����U�-��c�U�����f$��������T#�5����d5�W����;P�(d2�7�M��~����� ���?��y�6(�w(�����'�y)��wFYf�Y���U b4o
���"B��Q���iS��^W�Jr�"�f�Y��U�<&�;SoF|PwY�^EYF/�i!��H��������8SoF����:���<g�}l@�`F�W��Xq��y��@D�njP
�cM1<2G�H���F7�A�	mY?�������X���V8~?o������V:��VZ?8��f1F���c����^�"on��x/H�M��l�~%�LI6�@u2��(9���[��bBW������p�n�������K���Dp!�/���=G�[�}����O+�~��\�d�W"���-H��{1�rA����8������o�E���v��~P���u����y+���_exc [�|��/�����nf^=�����>��*�Q���W����������:���&T��/\8;�3��]��Q|S6[9����w!V��w&/�C�����
��_���h���\+R	��2D�$�=�y�k >�[?Id�z�����G���)O/W�8��r=�D7�����)h�����L/c�P��(L�J�y4�vZ<[H�8���P���{`�Fs���}�7f��^��m��-
��e�����g"���Z������sD���j��]!�
m���E8[��,� �5��.G�/\T�����*��:D�E?���V���6w�������_7��D�/�����l���=E�UG���2��3�F����>�0��|�E�
|<j-��jol	�
�}n�����i�|������?��M(�8C���%>�����l��G�_����)�[7$���u[��k���a����1�mz`��N_jB��VE��M����t
=~�^�W����w�f)�	�."����������V$�yh�ZV����7������O����~��["�=u�����M����M���M��k7������G�A��*�]H����G�m��xw*��g`��6���($��9�T4��/(�C��q����2�H@X������E������T�W�rw���l=��U��\�`6��
��
p��j���g88�0�hS2l��v������v�@>��Y ��t�=����CA��L�A[t������x��QDm�DN��k��"��K�2�U���?Y�-uw�M���N~����<w�H���R��d�s&1�O%Y��:�r�
,Q��PO�^}����2�(���C�~�	=�5�^��Z�Bvw�HDN�a�o�6�����eo&V��F������B0)�/&�|�:/��ds�U`FQ^�����Q� _�QD��u�j�������x��oA����Z)`X��-$Tr�g�}AN��4��L	}��)O^�& ���7?�wDd`U�=��
�1:.�:��U-�}�!]��c���~���R��������Zk�ZP�p�C��@��d�mj�Y���b��JD�oqXh�@3y����E@,6�9�	��6S<A��bh&���)�����	�%�F%��z����ek�u��IM[t5HZ�����,[��xw6������_��	����jh|�H���Q�%��WH@Do�: �����>����
cu(��)>C*���VK�(�9��B�XN���������R��'�#�p�St
���~� Z2.�>���1j&qBZ7R�<�@g[��6�~�a�� }=6���4�C8��D7���sT-l�e~he
�����������:4�/�����F�s�������FtF	`�;p�������L���I���b^������He��m�g!"�t���06w��[�8Yx!��x������H��U������v�&�t.
�t>0DY����S�z�������udC��~0:A�Y�mbI�yQ�n�3#�\<�/�����D��G���8w�Y��� X�>��H��S�=��k�+pC�3!��]o�ZP��0zQ{b��3���|��*�������	o<��^�LD
��/5��L��a�:���CB�P��,�\�,;�;�hc�X�O3-���=���*��U4i�_+�v|�:�O��@�1�N9������9H��vP�����.o���|u�/���]d$0@!�q�XD�Y�����>�����,����g+zlw<�q8�&J�#p�/��)���L��1�u���n[+B{�H����M�m�����;�Uo/��������t�E����J��!�'�����m�L�����Dd�(��>�����LD>�
�g@���Km���_�p���_�0�OT"����8����u`�U�k��L�/�{#����MHZ�����	��5�u"��(^�%������co�96GI��mV���P���	l!�D|��f�+y|����mkb�������#h3u5{-����hS
�J_�D,H"?��_Ae1����8f$n�5`�W����E�Y��Bw�6t^���4�N�..^�V���������ga
���q1J6}M�e���:5�	=>�t!�������&-2��A@���w�
�"
�5������I��������4x 	y`
��	X���AD��0����g��d���;�����C/O@�Z���"w�p���q���pp���3���T!4�d�d��T)��4U����&Iqoz��f$y�`��Y�}����:�-���L%p���%(4OM=:H�6rp��
[9A-[��o�k����@��1�L���P6&8��:��1��Z���	|V�Y�|�@��9$�d�bUo%|� �8��6i1:�+���C��a��L��9����_�9�v�3��\���Z��Z�|
!c� �9��&����lc���>���H�-iV���M�F"��V������`<��I�Ak���(��}���o
E�6�
0^3�:@P#�R�'��������7!��
.���#�����e�9����QC�3�P�W���L����i"��f!����AS�������S�����^��m
zl�������x[Y����1����P�����6P�Dd6B�Q%����~B+s�_a!N�.V�>�]�#u%�X��
YF���,Ve
��W�e�M��i���
�	#^|V�~i����n&�I�����.&o��;����m��MH_l���k����� ������1WU	��Ii�q���j!���P��Ew�3R��g����>X��@:�o���+������%��d�X���� �-$�h���m�p�����D����lSbs�����r	���f����������Y�J��^On�~�|���n|��A�Ub\�����_3�*�Z�����
*y|�b����A���5������R�L(�'�%�=2s+����������	i����f�y���?O�O���������y���G�����kE:0<B�����=��Qd���Y�O�xY\�P��HA�<�x�=@�1��[�x��G��<L����r�d�^���W"hh+y������R{@���F!�U7:�dQ�y�;�qQ��k�{@=��wV��T��qN���I6�d�&*���P�E-�$�euu�%���8(���+��m+S'�zx8�Um�.�Vd�����h4�����`m� �z-���C����(3���H�n>+J���m���D|��?�5��+�/H�#���E���7$���`P�_onI��9'���o���i�H]����z����Mh�=&A4���h�=r^�V��f+�`*��T�v�r	�N<\/B�z���{,xK��3���	]?�Hw�oB	\����'r�l+{�35:E�e�
,Hk�mP��EU��|A`>��]3���(?�=�7��B����>��;���\���N�i�,1$9��������5���b.�����tB	��2�k��3�����rs:�uJ��#��$=�����u��*n�(�w���0�X�M�DD�{�3
��dF	��j�7���ff�E}�M�So�����Kd�����������b�a!���1��?�A�k�6��iI�=|Z�	�r}��7w|N�tFR'��i�\��)���>�q�%����R5+�����H���H�����}�-�m����.hC	�lI��/[�iM�}�]�m-�'a�#�sOf�ch��k�W���]S��D�6����������T��dL������l����^�h�2�]t>����Q�FP��2�"������}���?�T�5����b�#��I�-�@2��k!�7��q�$�&�'���}\�x1�����F�9_���O��Q
$����@���0*�n1/��=�����|��l�Tj������F`�v�<X���0I��-�XFR��i$�?�j�FR��Bp�$W������H*�������T�����Y���0��c����lD�
l>����1d��6��9b�du�YQ��s�$�O�v�1���,�T�~]�^+��8���|�B�%L�l�b5ST���&�`��m��4�tau��BH|�c'���&���Y�#�N�������Ra*R�Y;�Ke��_��h������3������H*��`���U�S^y.��*��*���K���7I3�����"�34��-H��tR\9��)w07w�1fC)��'k��qZN��_�j��K&6������w�V�K�;��d].#)Wy��-��L�|s�����L	2�q��a�>��B�A�O�
��D���uz�D��v��o��%����u[C2A����������Dt`r�
������o^�OG->�^���H;��P=WsYh�f$�53`�W�.�1�>3��|�c����g�����������|��'������p��>��|�n�it��}g=W4��h�����)H_�x'�P���lT��_�|��������x^!�J@�c&G����$:����Oo����U�n�o,���vH�H��
�{\u������?�\wS�V��+Z�i�g�p�<M���fV����U����z����,���6��9�O�������:�{�P�5w�1�O�.r��-b �}�.���T�fn�]��$��hK�=<��X���1#�.Ykz��lMcw��)$!7F��+��E�0m=��y7���V����y��|����UR�E<��y~��<?��2!�S�iL��x�b��b���Y����m"�����"���mY�|��5�4�?�4�>n_�1��7V��L&A�|p��M#1?���D�@���<�n���Gal����w���*��J����Bwo�Q���a�����T�E��������IK2-��z�IM7����4�tB�����~P��oV��MQ���>Q�:xv��#KyR�	��:x��dzG��AW34!���x�'tU���.�j%1Np��}�Un���s�"�F��	��:G��Jt�tyE��Z�>���Vb�&��I�|U��h*����r�<5d(���!��W��M��H�I�J�<#�
p��6�2���`������43��`�<�	�����,�>�~���G�P�'�A�:5����&�D!RP>�gE19dg>�;y-����8�
�������;VqN�SDB����-(d$�� �*f�SDB^�Z���g&>A]��m�M;iX�
p�}���	q�f���h��'���OI=hT$�g�Tv���v����=�������4?$`�	�L���n��r=�\G5�J�i�������1���s;;�E��.q�� ���1g�HlBh�-�������N���!W����S���}]\���x|�����x�#�8�|\����*���l��!����T:��f}���}��k��8�o���<n���(�g��������<���,�����)6����|��8�4�~�����������������5������M|j����O-���h�S���i�����q��?�����r;9�������#�|�s�K�l�(��m�����������D=����}��#"J{��M}���v���?�����������o���������f�8�uI��_�~W�����)!���V$�lJ���a���Ddl�1��1��Y�@�s��s�4��O�yc�i6�rk�;�H��I�S��nrg���`���-1)��������	
��;���[>�m�<������$�������Z:N�(�~�v���E�% ����{��|��/�D�ta;�a�dV��!c����~�?��~-���7 ��7�O;��H��Kh^O�$ffj>!��e2��O��z��	�]�\�Mv57���d�O��,�'Q�f�MH�x=�R�_=J��W"���"�l�<�"w�������4K/H�k&[V;��9[�		�����m������Y�&��+�����f]�-d�If�&��YRVS��7|���z���]x~�up�Q�5�\w��p�������~������p"EVs�=)���<�w}0 u�]�f���>�Y;�@c��h�N���~Y����Lz���:����DY�}4��;p;�M�����D[�n]�����L��[�	�i�o�O"z74J�J��I��2�����$���[%��tAd�����x��x��7]��<|b|� }����j�N��=��mM��y;}�nJO
_,L�5��H?ZQ�Z����*�jBv��7��07��Q�V����d���RP��`���,!�b�'��Q����	���a$�V��L�[��G�f:1]5#��+�����g���g��k�����/�S�����h�H�����8�e���Z������z�S�;���=�8����t<����,���nAf�|�K�K�1�Oz����kw�X����n�9"����m}�;
�@�4��%@��n�0�0��O�c{�-w�?�aF�>������6��T��Z��A�^dF["2N����>���w)e?��.��I�( ��BPs�nX��f���es���,~�������d#uVaF��X����W�3tU��s.�� i3|��D6�4k`" ��3�H"�����umhz7Ss�hA�{Q5�7C/k+'���v��L�3�:����� �;��6w���o[[wEh����Gh!#��f$�Mc.)�m��f$��1��6��1�������+�!��:��mc����3�P\Z{�OA�-�����m^�|H��	�s��D�l�!��}�wW���i"]���	��'��O�s���Wnn3����>y�~3�K��KZ�f$�[�;����h�����]��D��d�5�O�q`���*����N�G&���J���K�$��1�������?2�����]Q������;1�M��K��1���t�R��n�����)�����{�
�}���1�D��=�`L����ny�#k|���U�@�|���9|�u��
�@\��m���i��@�.t�~�����xPBf���^��H��=b�d���
s����77I��2C81����6cgo?!H1�����0��jPs�b���l3��
p���r2�H�m�^Q����4�V��2=g���qf��sF���J�q>��r�3p����Jv�[B�F'�[����a�maZ���4���W�Vz�����3�O��F��;�;fF
��#�(�U��6!Rj]����z�H������c���`L:�y�<,S�m1} 1�aA�F�����A*Z(	� >y��&�������;��?� ��K�e�>����r4Kh�L>Mm���Gv1�-�.P�(XG	w�h��Y��W�����F_ozT����h�/��'�6���� s	��l���f�NL�iq4�x,R�s	Q�E�;�����m��I���L�23�x"I�*z��������Z���o����7u���*SL�� Ui"�y�M�-gUR��;T']����!�p�s�i�d��{KU���d`GZ��Y5��*�4+5#76�6�����&U"vZ7���~W�"�b�=�Er��R�\�.�5S��in����Q���5�d�����"��	��\��=Ja�4!�,vir4������1ZD}�adD��Qw�*O<�1��&"�Y�XS��i�������:�_���<��%�bX::��H�_dB�b��)09��,���:����;m�-�D�I���kOH�]��e6�,�v*>�g'9z���=vw����[�v�vb�uER0���z�g��a'd�uEx� n��f��'$��Y�_���|�c�^��u����7o���]iy�{v���;a���1�r�+u��iy�����v3;Q���"[�\�5dY��ag��
dv$��8�����UZ�UK�F'-,bu1e��c���������g��w.&������}M�7,�L��b��YC������'i�<Q��d�vf��������_`�f����z8��-���� �����`���U^Y���&�����Q�Yc��1<�5��Nz��2T�fH@1����a�$�fF�����/H��i�a<L����-��;���a���L����y�*��W���~_=�!-�L_�
�urL����gE}�>[�e#ai�*�g�4�9�X�����' ��n;�'V�		�1������T ��Q��������i�' �
���*,bVV~���k|N�I"*�����;��VQ�P��}*���?�Ph����P�*�~����</�����6��kL����B��|���*[��ZQ����[*�����DdJI��G�	�-��l�x�M;QK�(�e�)H�e��nytd;���N"�����t
[�y�-Xw���~���N*�MS#5���[�LdY���V��s���No���|�H�}�w
�*`A
,���6���f?�S�#�t��x<�`=V%��Sc_j�g�i7�NU�C�gx�2��f`�D�QI�U4����YZ��og��l�����J	������`p Q��H���i����l��2yM��S���mX� t���V��|����tg���#�l$�������^n&Z-+E���Z��U������h��#A�EA�\2��E�����Q��z%
&��,,�<�C;>����l6�0��w�H�0���J����[[�t������"�����������`"H�������5=|������>�q,H��M0���]�mF*���5��0��|�h�N�6>��I�	x�c��{����eII&
�d��p�/�"7��;����0J`���qXx�/�b`A~u��&��K,�����BD� ��	pX:�`�~�����3�o��o���'-������.��?
�`��{�T�sel+�����E6����{��=8>��V$���w�=���
���{j	����3��y��=n��_P��I�O�?���������RE�5��-H��� ���o�(y;6Oui�9c�O��Y���0i
~c��`�����x�X�u&"�LDb�0�)�t-H@�M�j���ga�L�������������s�[<Ys�$��d�8L���>������Pdxb�%p�g
f�����P�*��	i=��9�f5����N��-d�����|�#��(�r�7X����Y���,+�0=��f/k{B�D�v"T-�"�
mXa���F3&Uw`�w1��+_�Mj�L���N�;�f�0<I��S�[�s������Y��t��2�sh�>vF�2����f���	�Q�w/$b|\���L���26����R`3�p�2�&;z~.��.>�m�������:
���Q�E�&�uU;�v�����������lViE����o^�5����H[�X#�b���k���~=�*V�����-�������z����Z�)���>��A&�	��]=�D1��'�X�*}c��=g�!)V�-H�������o�SD{�3�k�W����rIK��I<���������^��������=bA��V^�U���O:i��iA�'�n����� ��G{��� }�y�T��,'j�-�~a7�(
����mSI���}-$�h��d���m=��4K�c�S�F��:a^;�����|���!HS������S�d����{b���������|�t?�g����8��h�w7�����T�����`�qXt��#�3	���L/k!%��c&^6	B���-P>E;����� ����Cd�(=��\�	��
�(��a*Kz���	�f(�=�}!aY�tgZT���������$�����/|P�Y��@�y-�k�"{����+k�w��2�y��f���"[�B"6�������??�������lx���!U���x#����Ao,Hr��:�"r]��9��2�}r"2����_�����h2)�T���1!:�,H���H�:�������p�s��l	\������"#i���P�KC6��<
�U��HA�����k>5����N6}���B/���)U����C7}�mIW0~*�BRCX,����B
�x�	 �������MR���"��e����|BY�/>����/�5 ����2}�G���F�s��tj4����#��%�s�o2	�AQ���Y-�����b�����V���}c<4����TQX�7f�f����(������������43I���gW����Y�z�K��US�1l�%�3��N��xG�@��?��DFJ���7��������t�qk��DYU�*�d�??=u�u$��Q:���$9�;�~�����(t�c���G�;�!H�{��v�^��=����h��;�D�c��A?��V��� Z���R��}�������,�J�t.3;���9��;l4���,]e�(F-�WD[=	Y�@�����2���3J!�5L���=����U���T�u0��|V�j�"����4�h�Y��_A��~��l��.�k��u�������N�1?{!��X�&2��A�@����&��l���!���������y!���7����8i���g�v�sx�r��+b�+�=w#�����
���Ai���
V�P���S���|���?����`1���v8���Y�8������
���,\m$x_������.��d0W�eK��'*m~�]�p�������*�'�l�:#(��w�qdj���H�]}x��5��#����^W����h��^P�v�}�
�
9��� 9i���iF��h���K���%�A�oy�p�����9> #�5�5U�����F<�5�"xdg��f�v���0��K�.����@��n���D"�f����^Fw�cL�YD��������2i��s\�Iq8�Co�E4u��uH������YX����dg7���-(�7=��m>+��F�Z&�1����%���!�'4��t$�K"\,d����n�[&��f��3�n�4J�yi�9��fA��Zp��uQ���W*����D}���&�'|�/�d���*R�p�/Kty�j�va�ly��b�h\���i�� e��"���>��k�#�3����D1_+J��u��mj:���`[���Q�(����6<��6��4��7���;�H;��I������3)�mcg�
B�RW���t�D/~�<#��5Zs`^��p@%�4��n��HD:i�����UM�p��BcJ.�.�h�bz��k�m##������b���n�������9c��j�1�f>xtq���H�"2�������U���SN��;�v�g�o�\D&��o�|��UP����C��r+���x����/�.&��T�}��.��j��_�$��R9��?�p�S�1���k�N��<�A��4�_�����Y�������0��O��	�1��|w�>�����q�6$G�|��gA����k��U�*�`G��,����`1.8�Ohs���is�v��@�����<���W$���� ����ZPXT���L�Nc���i=�|�#6���k!������HW!��S�����]?2�����m	<��PJS��@�+y!_�o�u�&��P�y���CD�@��S?O:����~IF[��OR�;x�V}1�=_���;c'��s*���N���B�
Kn&��u��ugH�\|����#�;C�jr.����d����Zk]���h&������b�<�R?�v>����f������-~���t��v�k��JDev�����0�������d����eT{Mo�����r�>������Q�`{�7���*A����i�ma�79k�;>+������)�X��)���[��e����ITM~�K5��}�b3G���
d����k2��LD�������p����
:�Yh���`���r,�����(�oY���dG\�T��'�|M��!��H^����i��x����6M�s��������h�j��a����j���Kg"2����TK�6�R���x�fq�qu�C���rV[h���(zJh���oKc���V��z<�*�Z������
@����Sj�#$:�A[c�B�1l��8T�]�����tO����f����*��gG�N8�w{~�n���~#6-�)@������D�L�<�u���C�W%�[Q�x?��c}S%�.V�W7���H�C=@R���1i"���z�H��:.�hZ�8�:���(���m+Kz���|���6��7g�k�R��X��8���1	�g"hs(��q����<v��\�������k�j��Y�o�x���O+QBH����%�*[�V�������Hq�L���h��o�����ZkB�4O%X�����E���6��-�����t�>�O�A������F}�daR5�,��W��Ybe���LM���>��.�;�J4X`���*I76�JUb�����pG��n���J���v�P��5_�7!�:�}L�57���c�r��U���fR_QS=|]I%Z�2��{j�/YB�_:�!����������Yi�����Tm�[��7���7n7?�Ig]�@���^ij����a�?N����{��A�����;�|-$����7og�&���K4D��b�L;|j�"t�4��u��i��fV���d������������XE���jr����i�����(��;j��	�[OtZioz�F���6�����Xgx�''Oo��)�J6���v�aa�B�����6-�+fH���V�V�c6_�����Il�~��c���,����
3���#������A���6H��W�r�������m��I�e���XI�
tc%�D�
�����P��Re��Q�,�E}S_m�{����6�H��43���+xF�|�����eh���,�T}����|�T���2�`X����y���������"�BkJ��,}�f.�F�������@��8��-,Y����oCxd&��4O�&�q���RW�d�	����+���b$&��������|�w�YWgY����hk�'��f���[d�c����#Zc?P<=<2��^I�ium4#�g�=N�rE	r��|���??���S&U�`������"-�������7�;W�n+�s�R>�;cw�RP����b���8��������V���+�bF'��C�e/��*��|�����O����g��/��*�eRDS����T�������9���,mx��l��iGN��-yFd=e����sF���������������m�������������?���5������������L>1?{9~�z|�|b>~\��a��=��������}����(|+��_��m��6#��{���M3�>+�� }��4��<t MT��-��=�*��u����>E�^VVP-H��MZ
��@��gE	`������+l>3Baq��$�X���"d}���W:�V������|�Jv@8�#P��h��EIp}q���F��5�9J������AF_2�������#D�~%L�9#��������Y}a�}[�w�AU�D��H��bV�����
J��
�\��:8������&�e��'} 2��D�h�a��1%����f$U"����r�5�Q��)�F��iT���i�KWr�Wx��$i���F����p<2G:e$C���,uE[VRd(��	�g]�|�H�M���)�X��t[Y��Y��b��-�@�,�bH���		�A0C��E�!-H��z�%UO��JD�UTaG�)vtB	��5X�hA(��b�4.�����,������������/[:�������>�aT�m"!���k�lMg$@&���*���5������dS�5�r53|f��|���6%2K6��bS'$�������u4�tk�e���KP�Q���kG���������8��DUmAJ��I|ud�8�U�-�*��s�����|���Z' ��������^�E����������,���32�N:/fUs��ZI�fSu��0�$[���l�H|C_l��4��y��]����$�0�������l�J���V�n��fuF�q�:�
�
�DB�M�K�pD?F�������d_���NHSG�.#?�e�&��lfRs�<�j�������V-�]h��A�d��l�ND�Z�%{Ou���E�H3����fS���~M�8��@p���lPg�����i����H�f��.��7�$���;}���X���sX�C�lMg��`�#���]��Sp����W'uBP�D's:�f�5-@��3�P�s���F�fJGh6���)u�%S��J[Zu�t�wIe{P{;��L D�5~����m
���#[J��dTk:#���kzw���'���eU�{�n�Y�����T������������? P.�F`�"����,�|����X��|C�@�eF[!�H��=�H� -�a�my��u����������B/�~*���?4S�}�]5�"DU�n��I�;��{��L[�U�i-���	���&j3������_����%Qy�7-�����U@�e_�m�DQi:�[�o���H�_o�T�Y8&"r��+{J~c��t�i�#�������(��QL��/&�I�-��$��_6H����_k����o�����R���er���1	����
R`� ��������p��*X{K��H%S	Jg��zC�i��]���
���;��2ATz�v
�h:+�a���k`g�n�cf����rs��(��z]�L���#������NH��E�0^���}�/A�:�s���7/z(��w���=��I�]���Oz�M����?NN�J�P��frp'��k���L"[����[���y����bA���|s(���O5����c��-2��
B<,Y��t0^$�y�G��^�����#�|to	�'�a�Kf��f��8���L1S&my���3��9H���%���t}�7���lzF�=���i�i�7�e��������5��T��-�u�d+H��YI��x�\�(�������U�\>m��m��,H.�Xg����	�����0M8���� 3�w%�6!.���
�'�yv��Fa�2��l�>��L� �Jl5j j�yX&����xH�����H:��j����p?Qh������D�o������#�Q�>�Q�$_����:n�����k\��n����^+B���O�s1�LoT�Y?�lgK�����t����O�t�<��m��X�cIsm�����F�N��D�L>$���q������	�@z[Y)�'{s�S&����G���8,}YPeF�a�t�����`���9'��.��,lB,��W��f�t�I��9M
79n������n���{�6�
�@yX�E*���o+2�����,���x�
\A=�u5�����7U�-�)���,��=aG����q��W�����JP����s��~bA��p�;
E�[� 7��Fg��j��UGv5����g��S�d���&	��@Z��g�M�|r
(N�|�+5���}V����nF�G�|�	<au!��2M���YA�#M���k�VG�20�o��j�W����t1,ry�9:�7_�:�*��LyY
��xF�i����.������:��. z�K=�	��a[��c��%���w�R�`�<�'��]�p���IVe!�i5�#���RgV�9���B��T�,�xj�hi'pEg9�3���C�����_��~i����5&��kEb���<�>{c�����+��r��{r�^���5����1�"d���H�xs��������W �i�'�#�����.c�~��jB���0u�_��*'"�w���6W
��r�����m�F'���t�l���]O����B�%��Q{6�H+�D_��y�X�.Jg���7��}���:��#������,Y�7����w���D�*{���:�e'?�G�}�{���	A%�h_�$+���U�l4����Y_m�IF[t��j&�-�}�&t����7�= !u��f�:[���w6���t_}����XV�| }���Y��:�"J�NH�8{g����Nb�J����*�a��T�me���	���dD}�V&�>&�`<{%]�F�<C�Z�~�J9	����-��Y�%�jB]�bIG�!LQ���P��|X'�*@3N_Y��rb:UA�Q��]�.� )F��o
zV�o?�Q�S%�P}/c�������VO�����x�� 	k�hn?E�%����I�������;F�-���0W��Z7y[�������c 9���DB�	x���uC�Y�	�<l�{jiP�w&�9��7hun�Dd����������3#��In>���d���r�
�mT��?�_�xo�� O�
(�5ZL�,H��6�I _���<��������u������2hUv�Q-h}{���0�# �
u��&�Q����j{��z8q� ���B�=�����[���Fh���6q��	�L���~�O2yn�m��� z��LR����'�������)T�Y�w�h�H��.��7�LT6����b=�������Y"s��C�}F(����t��JV���c�)��s���,����
L	M����"��I����D7�$�I���M�-���.���|��p����hs���9�Um7���;##���#Bq��\�t��H��9�[�(�%m���G�3��F:=y�#-��*���G�	�il�_��Hd��>N�L�=��z���
P�f$��u/yt�T;z�X�)���!G��$��l���W=+�y�.���a_���[��?���	����6���1 ?�9��ji��.}�,o�i�.�5����M	
B���|����,�i�'������Y���m����������H�Wd}��<�������_�(RBx(��H
7f"7���
�	�c2�]�|�7���o��*@��f#�n��+�&�����RQ:�H3�vK���o[Msv/[f
<>/���i���S�&5��:\�k�=1����qy\����G����z����-�;,I&�����hi}�$Y�7��x2�aJ��T�l���me��Rb�mJW������B����${9�bU@M���^��l'<�������@��9*nB��H`��{|w�$�=mTc�~���F"p[?��$����45�������{$�������2�����L��#��D���ud�[��[�;��D���H^x�'V��H�0����d���6/�^�k9����G��������'SB��&�w���$��,H���57�S���>���A�xA�l��\���n����I����Zn�	�mD�M�FZC��E[�|�]�������h����H'���l��q�(�}F��3�>���F7Khy\�9��U��� �I������3��F��������s�mL�m�	������)=������yb�C�Z{B���	�_:A�|�1�p�'�����zB��Q:r>aL'�����'<�t�=�	*����p��	�t�>�p�z������c>a�5	9����&!��t��Oxz=���	��$�|�5�p�'���!��Z������M14z�����?�EPL��[������)���Q�CL�����CL�k����o-�;�����O09���zF{�3�C�����z�|�s�3 �3�����h����Y�]����n�#��^�l}����s��S��s�o�DB�
}W��h|�I#�S��U#�R��������m�*ir~��,e���r*�$�>�v��4j/��8�3����m�~"��~�v�����=����v��:j_�����v��������{��"�q,g��N���F�H�1�c9����]H�3�}���Dx���q�Z�^�v��cj������t�l��o���������5<��Wc�sj��o>�������y4~�����������;��7���:3v�7_��������<;��#c��c������7���s�nL�V<��8���pc�x�[������7&��>"��8^����k���|�mInL:�=����g��p9�������3�����tF}���6=K������A>d��&ei�c&�@�NOn�(b�;Y �e�e������D6�3�	X�.P�4����Jd�@��'���$@w��=�7�1�Q���I�2��yqAz!��WI�;�5������wQ�Y��������!���D��d�I"���jQ����F�Q�	`��h�����q�8���k���l�A?���;�>����.�(�#3���������������6���7����>���7!���}&!s�
*�Q�	���"j.L)���M�cd+���D&�<4�u�
44A�.���U���$���<�����!��	��,��]p��MH5�D��~j^�L��!�>�"c�=�L����:�����B������r�W""���zS�;y	,/ ��%����
�0�$��VS��9YLF��\7m��6��D75�EL�Ui6]��[
k��Ds�P��[�Na;i-VE"�X��t4����,H���}�%�;����D��V�����F��3C��_�b��7��%L��f�����:Z���������p��-�vQ'�,�
����X��7���n�e��??�jpM�sc�S��L�,��Mu���\�8�v�BK�|V�M�p�B@��^oj%/��W��@�@��PC�'���wm���@�j{hy����D}3�����wC{�w��$�#���2n�s�����B��r��������n��7�%���ma�eD#�e��&��_�L���~�x T������Lto�>�vw&j'o��1*���r���!�&w���H��f4$P'���(	H��<`�t��o��[>��D
�E���'��b_Y��Aw�����gEQ��sTT�-HV�trX:hL!�m	�L[��_����_aVzA�-w\/��J�,�f�����2� �z�8����u��{@�$;&2���+v3u��7+��(����3����Z�T�\��z�/��#'6��H
��fp��\��^LM��u��o�C\P��D@=\+9���N��m�i������0 ����"�y�*��q�&;���N���n*��V��U����7?�,���"mTm�YB����[�uM&���P���X\"������~ )0��N�=�_�<����0�-3�p��E�wGpa
�������f�u+F�@�V�f6n�8ubU>������	4�Cfp�T�a�Zw�Ce�����:��.P���^1�rX��_��'Y3���$���;�v������9<��3��Wh=^����;)3�%��r������~��^)�ARd�Q��TC}�8�tX�^L���\�>+�N�`��L���O)�;D-�;]����^�/�Nt&,R~���i[��D�4V����r��2���=��ga�;?���/�����|V�^��V�	7w�������(0�3��`d���?T�(!��[�m���LmI�����Y9��o[�)>��<�����������CY)�����L��go��3��|A���x��T�����[.���a���IF�9AE4mms�U��	�U!������e�A}J���g!G8V��Y�H'�G����Z���+�d70��l}�}���P(��h
��hEB2�!��[^{y���"4rM���f���-�gE��h���-	���A�x���?��}^>�!.{����#���I:�/�u5T��8���b�:�d���QM8�`�~��vlAh����$����t�d�o�}q����,6�2��G{o���AC(�"5�R��h'p��Y�
A(���1>��]>���V%�����2�v�1�P�����y�N��&�-6����������VDcV��9H���X��#����5N�b����)E]fv��b&�c��������g�M������yhe�W�,��
m��I�U�!(����
$��g&"���"-��@�w��2`��G:�#7�M�_~t:�4��6&;��]P�'i��Ks$>����Na�,o=_��N-����� }#2�b1P(�i�#������w���]��f��K����n���3��k)��c��L��oYU���Xi3A����SbgU0��� ��%��1�k�:�/��N������y����nA����8��-�0�d"������`��$
�^����KA�@���h8��QFG[�\�L��z�����e.��|JBo�sg���sw��Ir
��cV2[%P��#[r�V��5S)p.��9�������An�Gd���S,��`&<�@-�����>��R�"k��d�E?����S�7B����Y����w�j�j��E%}�9Vo>/������
+Ynl��Jj>+'�~ ��*��%A����i�P���=h|�m�7��'��7S��$�7F�B������Bcj�F*�3���h��������X���G������D�c"��vD�(Ol���#���ZG�-�8�$�%��T������=Tn���
nK���v�����t�{�.H��/��K	�8�F�f�/G,��oK3�{{�f$2f�o�N�a����,HU	��n��U_V%�
3JJ�n����,�������������~I���%����8�a��M���i��o$?����2`��}��'7���x&���e_��7���i�[/���&�2VO��������.=�5�Q�`w����	�%��b���SkmP78|V|�vlg�b���kU��J9�����)L���$�Yv���%`"L�<���2�R��

F}C?�:�E��]��%2�z8�>^���~6�5f=�~���^6�d����L{"SFb�l����'2��������SCB"��)c�9g�74A����d�]���O<�iw�Z���,.�<�[��Qu,M�����oh��Y�7���gc�S@'Jm{F�
g���s��XSdo�>u�'�r�}���Y��`���`��zBA_a����U�j�c���8�F�>o%4�yR3�
���2��g��><+eCs�&���D��
>;���x���Zx�C"?��`���*��%um%��t$R�����;��}��1V9}��1�p�k�j>����I�����?�iC���$m��C�����n;��	0C��fH�����������}�������+>���
�����`�����nhzn�n�'�gcxL�]�vW]�^�i�Z����*0�q���A���M/�������m�nX8x���J��b>��i�	LQ���\�0�������\%(��%<��B$���D
�|v4�}Z����x���M��03 ��,�$��� �h6���o	��&c��t*��Y@���/*^������"����$�[��"*�	��O��my����/X��ZEB�g�c|W�t��������`�y��K����iI�h/q��#�pv�7_{x��lL�^=��E3�4u����,,�{a���Oa9���6$�U<����U���e��~�l��}6&�\�ZT����@VW��'�Y�7O�L@����Bl�u(j/C��x�f����`�r�81����sO�"���oX���7���������7�A�{,����oD�%���x��i�h<UFl|[�h��x��*M�?���:�A�����E7�C5x0� ����2?�G�J�[�<����3�mSd[��l���e3��]�	����YHhd����D�c��<��O������HYU"
�:�W	�r73y�z(MhW���Zh�W2��i�+h��Y���Z��������9�p%�)��Y�7}(����a�~<�V<`��Q	D����n\��D�p�\,{V�mxA_��r��%��6���9F��m�d���`e���e4�;X�7�|v4���g-�X�����&0�&��3��3{����d�q�)30��]FzZH���Hu%�2r�I��X�����H����yW��$^FeS!���#7�	`�M���_/��r��^C+��5�����t������l0���W�����VoC\�m]��^G$Jr^A���#���3x��UX��M`A];�l�����z����%��g����7�j�����[u�rx�	xZ�-6P� !��&�%V���>�D?LQ��*��XWO�!Q$�3�5Q=��!��Q��)I������E��������Os�+~���_���\����������Gsg?��:S���X���	������O��!�7��@�<������Ym�����Q��?�(^}��W���g�0;���k�,����rcR*]��n�A,�w�\���]���X"���>H���Q���Z�F��xFO4#���d*������������7P�fgB��c�>�����U]pI7V�y����m��}��0}����uT�a~ngB����i$��"Ld�G>�;��TL��n����l��������Q��k�7��$��
E0�B8������tu�f�&�F��\�X2��n�^�^��4�H��@��`C<W|��m���/ R��-4��3�������,���QjSg����kq�����O�YQ�1�N�����=���#C��R��7M�+�V�}f������X�fwe��L����K�i�+��U+F��b���_�%�q�Ls�;���a�.���������k"X,���~o,��M�V��&�P�w�7�����~�j��g���C��������C�"�k4yee.!�spB��D%$�>�T�S���4�H����X���1C(�M�j��N�&���}�@4
�)�
�A}��
�Y�|�}�	Q��yi&l�������hv�F����s��%�uk��_�Yyx��C%^��D�Uw���9����_�g�'��4�<��0>�>Ma��:XOH��>a����
����6��Z���������w��?w�.�����}`��n����wvW��n��W�V��">��y���It�I� ����#����U�3�T9��{��t}<5���U�+�bE6��{������'�?kN���{$����<[YMY>;��r�"c���dF�$��� �yH��L�%����������:�VA }���"`����{�L��Ev&D�8�K�OBO���E�&�a��g� �N$c��D�F��P	��I�,�����W_�ke����"���(����X	�u?j^e����#����r�5���7���s'��� ��Oi6����S�A���Wl�@���w&��Dqw������<�IP��DY��
�����]��S
��H^�fW��Qx5��&{Cm5��>YgL����"`���e��������U�15��Ih�//aLi�e��g��g�9��4�U���?�2��H��g�	q��N�����#���$$�<��z���B9u9�O��*��H�W���|�U�(��������<��r���b��
b�r��7��O�R]�dwi&h��z\p7��5Y��m	0�N>H]jE+;�M'��0�:���Z��yp���Pj~;'C��9�Z��I�G�w7�T����3�|���Yu�����UBk�#��AC-�Pf��
U"�;��S���-�}.U�)��e2|�/T!�[DTO��]gl��_�e�tC|����~ZfB�{i'e����L����\����b'�7�P]c�j^3C��lzY?uI����7��6� �
���Q7��P[z@D'�WU�<��)h`BN[�XD[�p;s�-pY���4��AL������oy�l&�yr�Jvu��*�Al����w�j���(����;j�_lt�	@��B���T����|s��w~L���y��� t���i�7�|Y_�������%1�p��
9��J4��n�|~���2nvAW�R��!���u/���w�����<�����rKD[d���8�c��S�H���1l�,I��"�>��a���
M�I��/L��}�T����K���������C�|deA�R�>����!W�����"D��_[��H����T�������������X@:
O�c�4������$&�����Zz��*;4���/��Y0����B���Sz��k�w�*�V}k���$2��1XR���-L��UDdL���t���r2�'��uUS�nv�3>t������f��Icj�,�/����+���K#��r�w-�����I�H���=t�9Q�b�H��}!D=	�}��w����kC0��/���D������oh�����
�3z���8~v$��S��\����;wQ���p�YqW����}����	�Eso�������KV�0g23�X>������K��������4�t�"* �OK��$���G����>��V���w6��Y�K��<�D�P#�O/]r1�����Dd[��L�o��m�8,�����c��CG~6&i�>��������K#32!��g��
�������s]v�'��,|��������t���*F�����,��]FG�z8�O����-��EY&���tC���
zhN4<Kj�F	S�_!�e}���d)��lPxZ��,|�S�1���<D��y^�n&�/�rdU�)K���M}_l����p�����=�I>��j!O C��q�<$�b�	.�.|�w}
yVy������C�3���Z7�=daC�L�kxS���);3�����"�n�|v�"�p�l(>�����Z�2]v���R�,Fx��z4]��������x�?��vJ$8aXZ&�ja���t�L�K���et��@���^)�!��HEV}������~����gG�+3��|�o��W�f�D	��&Ku�;�K{�:��P��e�"�5�U�]U�Y���:�IUC;�)2��2�q�!�q��|��AK�
Ge�|V��=u����:��b�����t��;T������$�;DU��%������������6V<��'��:�Y�:�S�u=K��zn��X'���>,e���`?}�����`e�Q����"�(Wi[��a���r��8���V�F>�0���m����9 38'�m`*q����*�{�g����V1���H��DD([��u�t�bF��f��U!������	��}�hb.�7��H�uh��=3���v������xrj|���
:�>Ts�{-����qpg���|~aZ%!.1*������U����J	���_�|�m��[O���D�K��:|o�Db?����5a3���s���Im��sL���@V�;2�I�HD&A�����Z��JI������@����C�K^�x��Qj��z�BZ(���bN�����2g���0.Q63���9�3��?����c�'D}��k%��m=5��)��)>�'o�9,�����^�aqOD���!r���Y��I�H�,*X�4mTs5�j�"�W�����`d�UpALb�y�����{'�<�/n�i��5������5���z�?�Y?��� M�����N��/����	w"w�:J�"x�|�_���EI��c�6���	�uk���J^���{�$D���6w���BC�PjU�	�gGA�k�]��a�td�TzD�?3
���� N���\&��`�<pn�����/L�8<P���1���_���+�"6���']�g� ��f�j5#�7�?W��&��8���$ T�����h�r�*�"l�0C�D����Ts��g��b��J�3*�,��l�z��X3�������d�;�>9D��G&]����E|���X�4����}I�Bu�\���1����^^&&^���+A��t�a��Y��ej�"k\B&D=c�X�f���G43��d�;��19B���/x�$����Y3���\���_������zx3�?3���j!5|����P3�j���e�X����yQ����{(+�����}B���<+
9�����t�m����Z����������O�d����EX�93O�<_��<��A�u��~�:GT@`��L������r�������U����H��h��e�����e6�,sb��e����eNe~�}��[a�9A��FN���0R���T5������	���n�*�dW�LsB�a�x�{0���\(S�����p�3�`�0_M=���/>[fB^�>���G3�		��v 0�6:�
3g�9��y��2�\���h��23�z\�7����=��3{�sf�5����d�W���0��I;�e����2_�s��}D�
��E�3uh$��t����:��-���j��Vyk><�Gl��';bHdQ d�m��V��4�c8}Y7�[}�O�K������(��IlFCd|7���\c8������#fg_+�+I�)�l����+�6=����$f������o�k����6��b�W-;b�Ye����&��Q;w}����b��S
��2O^��0��O��~�x��2���"s!a�ONz��v��B!]�(5��]�U��u�s\^������I��7�����)�zN�� p~����8���p*���<m�g�%	��M���v������l9���eDN=������P�w��BTH��{p�����xN�$[A��(����n�	!!����q��R������Jl������4&�w�1&T�B�Y1L���BHh��.z�������_����x�w	����5�i@(�Nu�Y�������E��KB�
xu�O�t�=3��(���IP0�v�oyd���m�`}�����������1���p�=V�b4�Q��-�y��!��P�p��>��
	>*�m
w��,~,�	>���}}�!����'U��=�J����/�G���5���#��m�-�����w��q��-
2��;�;��47u�d���C��v�D{~+O��X�o���vsN6��Bf���M
U���)�{1~�=�����X7"W!����=Z_�[V��e��"���;2y0�D�F�hWA[����hR�K��[_��#�<Oo�=V;!�~iU_����3�M�Dfb��/�r=�v�������>;0�Xe:�]�1cn>V����;�>Wwqq�y5
�o�4M-A;C
��a���[����f,:�d6��J���'4s3^!��W��X	�qo�@4u���Le�z�,{cP��~���8!����:(	=����I�����6�K���,�\D�@��w�#�M�x;a�����WSV��H�
��������K(�>Y���n������l�<r�N����w�t��7���y��
����'�3�{>}�<���_	���	2�/�X8�5�'1�5 LA�\�O5�|G��HtY�e�{��[C���&JB�>�F��BiN!��z�fp��j���
�;�X�!�0��b�h���~�Y54�Lou�����1�����guz��S�������d-wr�`�^�]O�U�L
��
A���/���?������:�/E�H5,���5�N7��W��4��*��U�J;�����fT���%�3UTD��Si�J[*����IK���c�hh9����
Ct�<9��������#t`_��5���8����1:w_WU�Np�����p�����RGN���`@N
~�1����T�u���$�I�Y7: 7?�
_$Vu�n*��0��eU����sEM���MD7��r^#3��q�T��@n�n����:E���j�r��6��X���I��3<���Q�c�'$j�m���K���j�9*'�~�c��P�,��u:,'/��HQ���Y/L��O������@N{������X�n&F�F�j�1����f�� I��uQ�GY�O�Q����#t��y#��Y�wr��9���j|��Z�GTu`�8�����"iX2r:��%��������5��0w|2�w����W�����W@W����"�+��e��r�b����Y��na���|�����"�w{�]_�_o��K����w}�}����/�����S�v����U\����w��w�/��������)���U|b���XF���O*��LV�'�qi���W�����5i��z@��y����r��~��W�����z����_����Y�B���������e����w��E��$��������?������������*�I~����_�h�z����;��s����
M�u�E�lT���L��w^��u���� s�����o����`���y��~��&A���^�'��'�_�pgr�L]{��{G�=����
�c��G����m��e�������d�F��Z:o�d���w�w�YqTn�DT��~��o��;?�<��a�W,G����0��~`��@�~od>�b��I���>Q�u��n
<�������z�j��|P�)���R��@��3=W��\��o����d�����I4���8>QN�*�:�P.(y$S�=O�={^���)NW�"�9|T=�i!y��L�Z;���	M���;�����ar�F�- �����.��O�"�v�j��T�)�W��m�AX�yfiB`����"_2
�>��_�x�������}�_��M$�b���f�7���_}��k��
�d����1sr���j����{��c�B�M���;?\]6.�P���L��(`@7��1uEe���h���]F�M�Y�&�i�o��h���F��.�w��+��OV��w X��������[������?<u]J����"qC�>����j�F5�n>����N�W�g7S�di���$���iGSVJ$]+�/����7�X5�N��H������W�����I���vr_F�~h��Q1�u�����I�`{������N�e�/��Mzx�z����S�����c���M���u	5u���xT�p��~���<�C���U���B��-�������W��$���Jf{�$�����'�S�e�S-�|����X�
m:��l�z���<�	�;f4.�����dA�q&������ci�5"�2�F3�������-�����f�D$2��x�w��z���#3�`e=}6"E�Rv�J��sk1�H�0q |��a|��(p"��4�h;N�M��F`���
	��c���_���J�z���J�m�^Q����nu/�2���1�.�l������C)�u/���e��*���n:4(���dV2,��A1��\�(��}Ml������������R1��h��b�Y�W=�2�����d��.l����X3���!��8�������W�D����X�K�+��
���
G����,��N�V�������L�L�d<���o�)^�HIz�W�Y���:$�5��=W`���r�HR:(���?�y����G;=a
������d�'���Yr4�]��{j<�Pa�T>���foh��z�\�C����i�1O�>��gCE��K����Z�aF��Q3/N��L=�4�u�e�1Y�}w�������4��f��>W���'���K��X���H>�/��24e�����-4������Z�g�2���]U�/t�!�hKJ����}�M �-*[�M��������r�����I%0E������f���
M�B^l"�R�����6�}���:���*yY�I8���h����R�hq�4mVhZ�k�X�8=b�����U��8o�}�Mp��'���:�C��&���R�s���ecR��^��j���Q�u�n�Jo��,/����S+�~�+��f$�y0�p���Z�	�IRJ]�|��X���+�	`�����q~���d���y�������������4M�4�����JB���
,�c���X���^�v�<z�w|z\DBk	��w�Ll�s�x'u�s��@��x*x7p��Es�g$E�����%V_O=Jd����2.4p^����2
`�%<z-���c��������KHD�W�9pPix���f:#$x-8�P<S�8'���T���<�U�=x��}	����i��@P����a U)�)���rm��Y_n
�}B����}��
��v#T���K8��;� OM����M�Je4���Z���(�I�������������:�G��Q��L�n�5S��46���C�&4A]�%���R���K�_����,�jSB\�xmn����3��a<me}�ax�F,��t�<��u�1��d�-Z1f����_�����/������7�^���g_���W2����|����
/��)8��:�{"�i�zB�]D�q���k'4���e5i����>����~�md�����[����Y�D���f��0i�?BN�������W���h�;����p���oyT�#Oq�ZV�����J?�zo��Su#������f��lFR�#��:��:�H���O
���e^�����7��fgR;����D��Z6����P�zZ�2:nb�cU�H�!x}g�tm1M�6����s���p�)���%�0����3	���X{���/�������vtW�D���s2d|q6�dFX���m�)�'���5-�}#A�`Qg
���MR��x���zu��Kh�nd��V)X���hoM<��$�d�M2���������k��rN�|]68$�,4��ox�
k�9=qjt�~�\Q��?W����	
i������28&#|v4�LG�0-�uIX��D�l�r��|������Z�4��E��Wo��%4��<�mXO�*�	d����Z@eu���2��=�	���QX���0��/��({�g"2����2�vp:P"���
R�J�����BS��5���4�f��,�.��d�:�&sT~.�)�K��)�&=�9 ������b���q������4��x�k�
G
M`�����z��{p������$m���P57z8��8"���9M���C9�T���BE�y��V6�@���05���b�����>eg�?�m��icMD���4�`��O��hn�R����g�% g>��!�C0�@�N�}����_H�����B����yc�d������U��3g����8K��A�u��+%�����G��G��C�{�q����Y���&����L��X�04���Hh��:�7���Sl>eg��	����M:!�B"����%���L�Z:+E<%�R�E+���V�������W" W�9�s6+�{�?�Q��Z%}���/�����G$Sf��`�_�;p�<�LDw^T��{m�]6M�d�5�d���G�����?���#����S����P�:�G8�M`s`��C��d$����/��Z��@e1w���s
hr�4�	�5,:����~��cY,���D���Z�B�q����`F�#�!�0���X�M������#r
���>pRW��H�lI`���k9?�=r���F��1����G%����N��k|tvaSuZ���'c����q);�����m�lT�#�Y�{0>�-d64�&���%`'�HD�to�?6�&�:C#�)�������9��c����'#���t1g�j���hm���/�y�'���8������1�)^d^3NTB���K^d�����k�5Q�j"S~m���y��������!7�M���2�U#�J\
j�GE�eO��%_����	d4A����T�XM}�%�;����3/�9�	�p�`dF�x���8U4�	I=���5U���.B��d�����m�#�|(^r���Dc�ld�8�Y��0=C{3�R��&����
�
��f���)�I������R��&`�\�zp,�����t �����0v��{�Ut���*�����G�(WNlF��lgB���2�ob�pcB4F�[BNy�58�]_�$�u��MpkJ�;f�B�:,(�����Mw�����z��gk������4�ab�5�;�oL�i���*���2V��Z���v�Y����n>�g$��Rvl�-[vT�7��]��[-�`��o��G�cu��'�?��GkN6g��fP�`eA �`��p�T��		��_�]��J��=�{:����e2����,&��L��p�o97���"3y��5�G�UOc����*��������3~���{��������:�^_Q�3s��E2��U���!���������_ ����d��Kf�aW5dvjb�6=��Q���E�VT�!D8P��t���>k>U]�!0!U�v^r%���E����F�f����x��,�pj��� {?�����tU7����m���6j���}iB����K�e�R�u����2�!{���&T<�1�|���n���V!g�KEMI����%������r���g���t�W���4�L�{�A���f4�VH`B.5�����M*��|���5����T�>���@��E��j��@g>fg('T�c�Uy���+���V�^�~nL}/��Uf�q��H�����zo9���.�U�q���9/��y��p����x��}~bL:|k���	p���y�)_��yG��z���{�<��r���pd4�"@B�1�f�/�=O/�\qJ�-�z��o���g6�%_��/������"N��;�O���
;M����&�Z8-d����kI�*�����A��_@��]�:�+�q������&^^�L�j��!�����$����&��-��q�	��H���z�������w���{����p��w��|�3�8�h���:�3��Hy+o�����L�|�R����������r����/����z�� �eC��`M������q�y���u���F�8���F�%E��q��4��X�ij��F�MS�PP��\R�|�����~\��3)����E������`�U�&
�������\�{�N�{#N^���������[������u:��.2���m��8 ����@\�s����D�����fwp5��,m/�"R��wM�C������b���td��3�����H����9������i��+�J�(:�n�:W�����/��v
	p�g��}��/W/���+&��H��Dj������D�M+�������W+�~��_��s��,db�^6�/A�ww`���,'i���b�)BOV���l�2��d��|g���Ue�S���r���B��������NkYf���������K#�
�N�H�����]�E0�����sZ��7����6vPj��Q�<v�����_���UY��j�);[.�N!�sU{z��G��#�.?r��r��a�G��ell��S�����
���A1��r����>���Y���|CA�WP��
S��us�����b�1���"#R`�K������>��L�[��	9 k�~��f�3�U���g�s����P�0��]���oI���x���J�:|\6&]����K���N$��g7,��Cj���`(m������1��}�O�-udh��9�#�G�m�(��o�����KC`>�bJx��l��7=�{�>;��j�b�y��5��`38Oh�q�QY�Y��b�T����y�^�c�����f�&!W�]�Pq��8�
p�g�sOL$Fq��oW@Klp�����V�>�I���U:��~r���>�W���-�����F��2HH����� �u��<�w�|���:�X�>|����_�5p���N5�'8���s�U�(����$����g�_��!�o�O��;���t0T�F������3	�������,����t�D;WPg� ��F���%�#q��l�[���p���h|��+�4��w2!���.����4���%A�A7;����`^���?���]]s~h���G�]q���.�����F�������tIS���?����x!�$W�os����_b�n�e�S���x�����5az��w�������W<YJ�^K��3��5�� u��)d�q��lx��S p�!6"�!6e�l��E��&����V�h�����3�c�
�y�68iC�(�����'���E��4�Y����V\�m����b� �=��.�e����y$H���$*���A���mv(�d��<j{��* bZ��u������F�}G�tO!)������O�~x"�����^(��S��@�)y L_�=����	`����`4�����E��t�ju��%���]�
��'�b���X{������P�����0���F{��c�O"(��[`_O������r��eowr}���nw���&������u45]�������G��
���'$~�m2|V���~$�yh�w������t���kN�rDdv������T�������d���WW������%=�i��&���&�S7"����L��1lP6�K?l�.�
����^6�Hsa�S����-R���2Y	U���/������&�
���\a��xFR&S�i�S��}�p'�L�
:Zu�����E����@Yo�D�[E��#�0��
@��*�R-D;u4�1F�0/���F�����:I���M���e����*j���wX��K����n��5�)��Zr
��k�W�",^��G������#D��S�������?
��idaq=_�z�����(��w��x<EX��i�6�$K�+��R��W�.��<�q�0l���(��4/��
��}����u�	���y������=�H6��c�DtX�@��������H����2�/�C�w$���!l,�j���)W����FPR
$�������v$M���F}��9�iC�Q�u���(D�',;s
�����.2"( ��k�K�`3��\�����0����x�u��J;w�����<������|�:��F5A�l��pr��}\��(R�a�/�UYFRe'�#�����m<��Z����f���q%YB�6���"�	��yG��y�h���4D���# 	���W�";ml6���5X�T���y`s�X����(�ac����C�D��|����d�������Y'�=�+q
-[������_�Hz���>��K�s�����cE2el�)�����:����C��;�SO���9�����jB�}�6�*�,y�Z�X]��������a\�����wUz���Mv��|��g��P����T�n��	�{#N>�_�:~\��u&M*�Y�TO�@��L=-2��"
��� lZ�i0����*�g���N�h}O�_"��(�o<���l�U�~����[mNLFeuGU�������x_z�J�C)W����B�S'�,$*Y����p���������i!��l!1:mD��x4��2�5&
����l���2I��^�x����~���[@���W�~'��|uPe���P�Z��������E��Y��9�v��L�HJ�k�\��TPF���
Bu�p�N�*��6����7�5��^_S��� �y��`Y�2�B����O�#^~]�}v�,��`��@�5���^���?C}\L
�8��{GR���^FY�U]�B��������[�&�r�l�Y�j��oez$Zp����&��D��\WQ��
��{�7�����e��eCA>�����������a��k���_� �1��q�c��x0����D�e�_>;�W����6rr�'��'b�,�y%�������������(k2J����^!#)��bg��/���z����yp*����0���%t4Nqp���3Wt���;Rpi��5� �/�5����v��"��|�C'�p�T�N!���_R�Qd�$���Nym�xP��1�?M�^G6�F��l�|����#�y��f;���6�O���\��������)�����S��������yV�������^��3�qE5\9\��xE���3���g�W�z>�B=�)�te���7�`v��h��~!��d��splv4L�1����l��`�����|v4���
����(��]d"�e��o����!�3�'3�6T�����&.��KY�yl�L��oO����_z�)-~�����@��O&E@���=�� ��>2�L�/�=P�G��P��E�"NnTA���� �����C����7������P�d:MR(bS�{�h��f��t�xg����u+#W�z�x���x����{��O�"���r(~��<�C�;+�|)�������"�l��Dd����K5}�W~l��<M0y���4����G�X��K��hl�+I�;x��Z��5�O���|�
ua������\l�bo�=,;je���7��!���F\
��+��jE��G+��<R��A
����h$S�k0�O��	���i
hC��l&4�$4��[�
hF��Ff@�����.��X�!#R�������~&4���)y����d����
�#1��K�ed^hB����`��c%�%���:��H�,-�Y�W�mY��f���U[���r'�����v9P��DD��Y����z����iB�%�	yV�j ��f4A�3���C�[3�
�pF�*���?���:F4�	����R�zs��o-,�C��m{�-������W��eT_$2�YU]�Q
����}S���7�9@��%��,�W�h�&��c�����f4�}�	k�ljF�_j��^���Q
Hd���U���jBe�6�_��eVr@�������9���l����r���"U>�5����]Md���K�j��S0gV�6��fu��HNai��eL�e�8��������k-����Lk"R+��D�E����^��V�Q�`Yy������L+�'����4����2����iK�]��~-�����"���h65�����<�z3�t�����#��y�Q*��'�jfo|���F5�)^�#U���|���D�,����6�d��65i1�{�V�Q��0�''s[�@W��=���b�h����q��9����"��/��yW]�o���e��T\m�����C}���O�L��:�v]������F��T}�%4���^�v+�/�[����B��2+���D"�>�L?��PF�"4�S4C��g�$"��������i{�&&�-�5����[����uw�t��� 
+�74�u����v1:cdC���h��m^���Zh�,�Z��C{"�X������mpfH�v]��q��k6&�Ng:�/��Od���Nn�<m��}�lFX�G6���������y�uC��eC���@k*���3n�fei�A�:�����������D����+��]�>�������k�l$�3��V����Ze4�;<�e�,}Gdl�������dT��ti1���
��u����jWU�:����e:8X����������\��%Tj~<����s���A_��V"q�8�C����M]i-����_4������_��-��\�?��7,*zftv�a������������uSpk�t�9��d������D�|�~�<Ln��y"��q���R�'O�)�s�([����H�C�0-A��"�pRi�@�G���
l����K\��\8��.^\�)<D5!9�^������-5[����D��w���D$�jvd�n7���e�����z=`U9"��+B����T�
�t���9*�ic]���E��_�Cmh�v-P�����:�i1�Gqk�*?��qw�V��*T���CM�����<pg��}�U�>�{7y�*0���ZNh�����������8�	T�P�%���Z-��������!�!�	�pHk����:���,���%�g���:~��)W}4Lv���kC��36�����<W�\n�����*��fK����h��P���ZH��.��|4��z�cFr.4�cz���������0�������X�d$Y�����D�p�e��Z���f$/�����1U���Y����
|7-b�
��^#���%IDN�~� �K�7�������5��I��(�"vN���fT/"�i��$<������x��yb��u��3�n�_���&X6�@���A\.��a��'�G��C �����%k+��n��]��b��i�������nhY��_d�&�W`�O�q	��CG�u��
��j�Vp.����2��n.pk�I�x���������p�p~`:�}��.�3�K��?E�$��A�m�p"S~9�����cQ3��IF����Z�1b�<���I�	M��a���'H�������S��v��X�q��cw�����!*�)�t�������L�rE�u��j��;���#b����h�K�����s�$O�{G��78&��0}�D�\�o����[O���ZW��v�O_�+��Jl��%u�1kR~9�#x;���G7���{��Tv6��o=��z�OSd�]����Z`���
������'#���~��a����P�S������U��g!G"�6m�rh��9�'�����O�Kd}A&"k��si��*���\�W�7v�����(G����6��=9���}�O�K
���d�&$���Q��PB#��k+�M�
�z�,���[e�A�c�UxTd"v��������7����zqy��x�H�h�=�A���EX�������b(\��y4q���x�J}�e2k�F'����QF�9���G������!E!uu��F&�1?u�����u�������,�LF.���8e���L��T�6%4x	��&�\��g#�2�I>������lD:%G�:�Ryi�S(J����V#��8�-z.Y8�IN%��|���&J�������{�$�Qrp���1�S��jk����ln3u����_]<��f�7;��r�2'kgr�,2'��f��cf"�����d�&�
L�4����� /a�H������(u8�^
�=�H��+�^>�9<X7��������z!���ltw�|{�e�� ��UK��d��3���^l�������������`�`����`b�GPw����������k����7��FB;U�����0�v�k@����#��ID��ei���aKAJ������9Z�Gr_��?��[�.����7v��>-�|���c�z=)�����N�i����V�������fXX�!)������So�|<���d���S�p�j�����;��ZG�������1��G�1eT�/���&6"����1���c���nQ����]���F��B�C%Y�K���3y�$_z��.3��WoC{��5M�b/�������s|�e�����B�����'V�e"��S�(�.�x�kN��|	���@+Ol���@��hh���&xu���ay�����x�aM�M������iJbg�����G�,4��B���J{k�	��m�8@�����{�i����j3%��S�������w�����UO���
�b#MO��*$��D���������r�����~#�:�����+��d��mHt��>���V���w�����|�����c��B+��fW���-C����]�@oz�;E+�sI`��R���M�6�B��X��gG����P�z�^��wh":6�\�E4���A���6��1Y9�����8K�B�M�*�n.�*\b����t�sU.1!�f	���'t����<���}��3��kg��<���X��1^�� X[0��x��2�I��I��{���:�N��9#�nIyw�����=�������` ��.��q�>�6��������CJ=v��G
�_���8�5��������{��;^����1B���a?;+@��c�[O����Y$��!
�_I�R�l�
��������(Jc�t��:W>2y��������+�����Q�B�a���y$����l[Of�Y>j���D���-���#���[��������qZI�
�y�M�r�G:���*�c���G����p�b�q���D�tR����������s���:���y��!U=�[S��X��1������}6�C�W�T��H������x&G^xS�i���*��Cr�h�3Scs�ir�f��������H�o������QIDm�-6�31yc��,�����>;�z��'���x�9G��@�\��c�)�f�?��_:-��B�D`�,�XO2����:�=T�8#l����!�GT��;��!�!������h����3��'�����qF�%_A�{7�� H,�}�5+H\�S7��M��I�Bl��NeOL�b�j�flhy� L�:�&��n&V�h_��vG0Spg���#A��|^���P��-{_�^�C��������������C�3�W�@=��"�����PQ�����T�������oFe=�Mo�^���
oS�I/���k��~��`��\�s[����L�����,y	�*�J��r������������i�e1�	��p����t�e&���a=\��_�/0��:<9���%�<"#"[���4Zm��l��}��.�3�{B�R,�40B��
��h,�
:�ET@���]:�i��"r������oQ�.�
yO�c�M����:aeAQ��2����j�	��8���J���Ap�#[/[r9pv�2C*e�K�S�X���b#g��q�[���Yk�m��Y�P�i�muZ��P�UgdKlh}�M�n�Ln��O����>RVk��?r1����'������YuD��`�O~K��v���6����7pk������~���0W�M���r�	����w8���������w���:������x��K E�c9p|�����������I���s0�9W�7���A�{�5����\��G��?5���o�_k�E�E��=u7�Cw/�Q�6?�������$qu��d0��f�yn[��,����|�?��vq�����������?�IL��"�?�O����?����"�?���F���|�?���g��j
��s�� �?���o�������|�Z������{�s�
����
q�����P-�Z�:����WH��2���
i�����)���
���!����_���.����!�����\�3����;�����B�Qt��?s�Oi������q�����\���r���������?�]��@tV�
���+��+��D��w02��k���b�{zk.���L�Z�R���g��3k]�Z���:�`���������K�?����w3����������������f��%��������n��^�����{���G����~�����G��e�����/�������nF�^����oY�`���{�{���~����gl��~=i_�1z���b��y���I������E��'���EO����-:=i[�-z���Z��i���I��c���E��'�nEO����+:=iW�)z���R��Y���I���
}����C���v9���A8����=�P��}�
�����������\�3�����s(��-T����X�3�?x����{�9fQb�[.��o���%{�D�s��<�"��	4I����D��|3?Dd���� ��M�,�{EPD���8Bg��G:��uJ$���`)5�%��Ci<Rb�����*�$@��rz��M��;�N{��?�3�)H����$9�X��q���3���P	��^�����s�W5��t�8'c�"#�O}gR&h�����e3.�5�_'�O���&E�xY�	�fA��v�N��8�u�*p��������L��FBn�l���L���E�����@��!�S`O(?�=�_��|9�l>�m#���i����:��-2vxm��n�a�dQ�^M�$��.Nz�Y��H�YRYr��O-�����M�8E������������5���/"/�?JV;����=by�7~]��2Y��F/��XY��d]Pa�����e��q��d�C�����^���i��X�K��T�I;�1��U�3���V�v��
������5�����M�x�H��6�iE������?�A�$'t
y`��9DFf��,���c�qqWNS����R[s���	���d�<��:nn�*�,2����������E@cYu
"]�u������/fUL�l���C�ai=p��3��L�]��U�d����%6�ds�-M=���������]A�4������"����aE��r�%v���i8���Zd����kqh/���0h���i��N�N+.�V���j��y�����S3�2���.�r�q�S����/��f
C���Mr����I�����z���dw����WF�P&�2"#
G�;�o]�Apr���"���	���!#���S�p�)_��2'v�K�I�z�L�Dru���FvaX2f��|�P�����E���>�"c�*|�����'/Jq17Adk��H��^�0@������?���P8y�E����S���{� FK���*A�r�LB-U�W�]�g#<���~���O�����<^�#�3Y�-J5O�����]�
�x�.��R[eQ�!��j�����$3�Nn�)���L[&K�|�~��z@9HYh���hO��e��P��Ff�&��%&������7�����W��Z��9�2$R���u8������AO!-X��F��.�y<��?��'H���������Be#�M��=	`M��xs���(���N�(&etl�B�!��	��o/�]�-��Q�����u�h���*��xp���i�E��L	��5������!)i�6�����vh��FQ[|�����5p:
p����N�����[��\�?��bm����,C3z�#R���������s��u2���~ �+I�F��vD2����O�'�s��*��Y�o����as� W}��v��I(|N�������L��<�������'�y9F���o���R������� i'd'�njnG'O��]��t*�,3�*�F4@�O&��0o�y�S~5	d}:�s�a��K�����B� ����������n�!�bQI���U�L�DqWEQ/�����p���/LR5���6��D����R�l�"S~�<f�\�'qX}v����L�|3n/��G��/�y�^������>i�)KmO�O��$�5�@��1�[N��_E�>I���7��V��������Mu��|���]N&����������������*��o/�E�44n����K�2��dH��Nks9�rZ+/�����H��Kp���i��~����LM����p�o�N�����(0Qv9h��j�����j?2�oi���':�*��L��-��@��)?�|s�HY�_�Gt���	������t,�Q�m�mzK�z���Q%���y���L�h�tP�0��:�Re26 v�'�����,�������%"m����`�H�����E{����~=������������)3�M��q���w��H�ZF<�u��+1���E�R]��������>N>^W��|��<+&GP,?e����*6�^�HK���0kh�����.�T)A����8��K�9�@���'b�&S�b�h�\��]s&��$Y����ZIV����|�V�$ I�Y�S�!Q���4�r��.�(��K�}�'R2���"���f�l Kh �R�4m�y.�2�b��IYh]��q��F.=�4�l�8�v�����^h�I���0��XN\~���������)�#G��W�s��g������q��w���D��pb1:���g#�����>0"�Uv�t�%Lq�M.L��"�����1JuW	�yz��e���1y���B,�N>�
�%#�9�8g|�}�/���R$�a��)w�����t:(N����,���}�[�6X� "���~g��~���w�)�	,�B@4��V
7�/G{�&�3RxU�nFw�IKC]�v�r����/'b���x�D�	���X�i�.�q��JDNR]L��K�Nd�,�%��}�8����Hx|��������)"�A�64����O������ML��q ��HgZB�[>
f�h���L���t��6R��7��(����8w����^
J���1�I7�����-e�my��:����_[�������w�MVk�o��wC�O{���dT����Z���)��75s~5����|Z�Z�s�)�'#�1�N�\��X�
�I.3�&��J�D�dy�9��d$�
V��~Ju�;.N8P������l��p�~6S�������T�CE/r26����v�Id���h�'������U��$�����%�"/�S�P����@b9���d�]5��O<��vr�y�	yY��<s��OR�f���10X|C����Q��� 1�=)���v<����2�����)O`���b�E��;TSb@��:�)s�:���P�W��YembV���r����"O����(�Wv�l���{���
�U7��8�2�$`|vT�C��������Cfp&�m�"-i>V,T:)\[����2s�}�L��>>���~��y��[7�1Ed���<��5�FT��
^4o�����[_d4�b�\,?���Hgn��M�-������������c_{��X>���O�^A��64]�X77t��1<��.��d�Fg�g��l���nmgs�{�dTO��>�b���	[����Ye��.kv�s�_d]�������pO`�2��n�#��� �-�JP�'���
��S�.�!�:����i��������)ah;���+��Y�	��fs/�?��p�m2�e��n���D��������KSd�Q�8	x�&�@8�{&��>������D\����ZEB��<��}t�_��M/d��kt�p��j6/!�����]����G����o6����[����z���f�)�����!4u�@Nm�#?���
�s�7qX���U�G���u��oC�����
"���3�����O"3�����D J[]|!��:
�����x�|2g�C	�e�d����J����~�_��������.pw�u��o�{-����oD�%��Q}��i����0�����1�z�U2�2��t�B����,.�����=����y����r�����s�u�9#��m`�L��D���M���lF���9.��,$4�Jbq�?�	�1�K�]�'Id�C+Fv���Q"
�:�W	�r73y�z(MhW�wZh�W2��i�+h��Y���Z������QiN,\I���5�����V"�n��$Z���JF%�V�cO*��D�p�\,{V�mx���)��1�K�m~�S������f��),T��%4��[�����|vT��r����L�e4�4�D�������~�[F�,y7n
,y��\e����u�+���L���Z�$^D"�w���4�d/�R������#7�	`�M�l���m�2�K�fM�-�z)3�7#/3�7G4�A�]:C
on���``�Q���m]��^G$Jr^A���#���3x����e�2����vz�2xy��LM�%2K�C��
Nq9�����[u�rx�	xZ�-6�w��U��+b2m��*��l����|�1�GfH��Ho45���K�x�D/�/lid���}������s����;����s�/��y�+0B��
��k5=�2��	X�
M���&�u�_IT��yP���$r�e�hn	�K���d����0ZW�����������D� �;�v�=G���y�m����7Q(�����H�<�dq���E��
M`��	p��1:����U����B����.���������[�����Q�7R��������^n���FW����_4�)3��}�S��������|s��:��+%��/<�;���:�������&���)9}�i�f�CZ*�1x&A����~5N����tu�d�����2d�7t�}y0�:����&�39�R���2&�����%��9���^�W���\�5�!��{$��k�*eg'�Q7�����AH���?n�|�$+�8k!�����h6�����~��F��D�.kkO$>�Q4���~�i:�Dv�,�Q�/����+�[�����E:{_i|C'�q(�w���y��"h�^�d��T�4!+��������Vw���Ha��������#�;o��9��
g0	N.y���1dds3�F���Wta���'���.jY��SWA)
�=����M7���>X��&5������K��8S���!��h��d4�`����{G�x.�}��'�.����z^m���a����1��z�����TB�+�}jw�,	N.��O�j�y�ph�e�)h�;�xP���i~3�]64K�0�('UL����7��B������S����D�;u��]q�u}�����.��uk�����6u�uk�_�v>:g��q��8���S��o]�z>nY�����N�#9���p������8��[QY��C�qU��S��f�@Ez�k��.oh�e�f�~�?k�"��'4e�	`�L+7Jd������S��Vv`���O�.�|�e����	����'����W����A���|����S����D����M���)�X~	J�i�vm�����	�Z�jx\k!O�^,��<����%A���s�����Pm����t~��G���~����G�g�AR$�0�c����~"�2��1��kt[��n�`�������lx�BB�)7.�8�C���M`^����LD��DdD���������A���C*em};�9�\L��,�M&�|�</l�RI�Q�4�b���eU���V��{Kmf�_��m�/��6�h�/'pK7'�%���zW����i����0$�!��<~�.��{V����`=��2	�m�r��P"R<]d!�S�����+���C�����;��gs�uhC0��.5�*;��S��b<t��$";�>%M-r�["�����	�`M6���l6S����Q����%����j�co���l��u}�G�(�� ���A�o�m�����Zk�TF{��Gj�U,V��t���y��0�|4T�)����F0hm,A�#�BV�]$�y���>����v�kL�r�oeY�jhU��N��C��B�x�@��x��m[��u�F������o�*���d�n�R���j�:����Kl#���:�����1�p�/�1�p�[��L��~���%�h�Q:�k���W���4k�v�l/f��Y~��F>!�<�_����Ml���d-�.T����C����q8g@�OS@+�����=�/����?F��LWE��#��x��%�"�������4)?U%��N����8��U�]�� ^�^<�������&��W<������,���U����r�\�S����h�D,����F����]�2��xx�h�����72�M,�;���3����u��	�W_���,N������"&�����^�(,�3��e�	�=�g�m��`����X�<��?ToL_tE^8w�m�S�`�jx��%��?���([&�E����������.Dg�8��R�J���r�]v�����mP��B�6��� 7�W��Z���
��t����uz�t�����-���y@�L�����[���Y����^���F!
~{�gpb�����x�lo����_&N�Zj��@xz�������h��B���}�@!X�g��*����|$2�H�M5��[��{��U��;�f�bv&�IG������J������5���� ��~��]������h��>�G�y�����7g@�����t(��iVQ�/�������~w�\����L`����*L�V��Ab^P|P�FQ?�[��IN������{]�3�y!n-��g��l��p��"��C���
�')�dUm��39c�*�n����u���j��F�zo�QgJ�J��7��
��J;g"^�O<���L��(�*q��������O1R�����j<��^��"/�4����+����"���6������b�@���(�B�3],[%����tt�����h4\���/���|�05����\�!Ss���13��z�j�����$�<PFq����.�"��aB���
.��d�lQ�B����2xx��5B�����\c��B��6�~�����(�*�FS~�Lu'�@��BK�H�>�Tq&���-���������AH�C��(���f9�� �~SW	�8��@���u�~�-��E!*n����%��>�XH�^,��D.��&�����]�XP�^k�os&�y#��*���8���E"rH��J����|E�`r?���X��R�"D�z�
�3	�����>�������8^ID�����.�k]�MBf�`��X��ckd��m���G�DB~��Y��7E&��vS@Y��
�[��D����/1�������
����W�@��to���C�_X
n]�1[l�oA��T=v�{B��;�����MQ��f�P����5d2���J����*��en�
��B�>o���"�Lw����~fB�Vky��X��w�7�@?��*&[�|	��-��P�>��CF�XF�Y��V��_a!�.��}�{��X����N.=�2��w;�b������JrQ�1�l����������n?��,F�K_u��2�H8C����i&�+�-�=�y����{����<�F�iqBK���"l��$S���wk��ENM�0T+z�NrF��_��|�b��6����|.�'���lP�g����d�Z�&�#�6$�h1��e;����l,>�e���3P
-���>7�E�^�����e&���k��C��Z�+��7U��\|����\|~�{EP�������
��"g,ZL����M�"?[���c�������$�������:��1m#Z���=���p�,�Yg�����K�>����l4O�9�#���m�~#�!o�?x�a�*,�����,�5t�j\�p����E�O�������M"��`�;���r�PB^���w"������
���r{@��"���t���f�(��.�O��E�xQE\��+�q�xge�6���9�p����7���?��!G�����N"?��%N(������gOr=���� �j���2k�L��l���T���~�rG�9�MO���������\��e��qI������e�����6�A�N����!~�R�cA��8��?���8`��g����r����I�0�9}�+{&�������?/��z�3��-h�=&�h.��T�<���WI{������d�I��A�h'n�!��\�6UL�s%�����|���R��[Pgx�|���������f��N�b�X���`D��k4 8��@>����}1�
��h��T?/^��������%<�	y�u�M3�DHr2�������j6�Bk�y���M
{��% {���'{�0�9}8�5��LL�)q�m��4I?����!m�:@}
�m|����F����)]���.'��	[��`J[Q��l������-������.�����[��0qt���L+�N$u�E/�'��Fm+�,i��,��`����<�9[�Y��{�M��UZ�����]�K�t!&�4���Ms$����R�����K��'��X��M��dI_hC	k���
u��+���}�C�m��o����N�;:�aJ��~�R�vM�t&���|��}8p2�r�j��vzS�uZhRi��F��ft��A�
CV)�2�O�����~�����"�������t�������5�@�����E o�wc�d@��0��4x7u�@
���|O��#
��@���I`�Q"Fep�!�b.�{*�b��	�0*$�H��0jT#�Q�	�Yj7�~���"))�K�Hj�g�����")�G!5���k���"�J��)k��"���W�Rq?/����D��O�*�/FT�@��'�)��2c��5p����TG�7J������n�}
���"�2=���
���R[�k(�"�LL��E��
*�u�	e@��UCR@e�bu����D�;��hlA��du�W��1��I�R�T�*S�����2c���+�x�������@��)����"�a|�U�������K��vk���X�0{����@-�+�=C������nB~��rSyr��B)�;���zt�qZ���_n��c�%ER&jJ�4v�=� �*M,�j�F�uy��B�H�}��Q�L��E����%���BU��*���
o����L��P���g6r��������o�7���9�s�>��LP:�jT0����[3�����������<�O�\��^���H\g^�
����";� �����T�������ot��k������4�5�����;�Ra�����\�#����:���w��^�P��l�c��U�����4���mp��_J>���3l��_<��?/�J=3�
G�"�x��v�O��?+������4�!��^
$'���
����&���|�s�.s��L��x��N��"�TosE���j+��Um^_Ro�cmWw�|�+���rh��J[_U��x��w���(�,�G,��S�2P�6�@.����{EP��]��]�z$����^��(CS����"]Rkr�iE��	��-��f���L�&�m���|��Y��w=K�t�0��S7��Jj�G���m�-��=����/+�0�������U��&4���.���Md�DL��+I��n����W��y�_��k94b���c&� E���������kl.qc�p��'p�!lI#��D��'2��!�U�
w	}� ��1��t _�a�(�n��K���;����YK3������ts�����.�=��Y�%��3:��;u�RT���8g(���,��&E]�6��#r�����r�5)j"���Am����[���3qB�S'4]�y4C*N�E�����=@?�����N5*2����,tu&�������������?-�	2��(��8���C�fnd��3+���bn(�MAE�f�$����6f�~
0M
��B��=q&�K�����,���o���+�(�I�� ��>����&������|�hL
����J^K&1=d��
����b��chi��1Etz���r��h�L����Y>o4���<���g&1A4^z����6uSW��I�}���Y��9"I�9�oP�ILY=�S7�g�Tv�Uy=����m�b~���?ES�slm!�O[7`�F�����@bj(����'����f�L���	B��bL	y��Co����X3B$�:�B�9<S��Z��d��3B���d�s>���u	�O����N�]L���=�C��K�����cl/�C���D�q�E�^����9��>�����^�\�z�%�O.x=�r�'��s���]���W)E�c��C��H|�%�Y�H���!�Y�k�����F)�s�"G��{.]\�x����%�s��>����Q~��������O������r�#�{�:z����������_���?ov���s���x������c����U����?�_������h����/���o������K����~�O�fd���NZ����������qG���
�������p.t�E��b�����4�G�� AK/�3�����p��x��-3D��oT.����������/���O�i���B���38�����eb2�B� ��&
�w@@���t���.'.W~DKt������3@���&t���?1�~{�m���C����)�pr�3�g�3��/�T� sB��-��z.9����"�$�@���rq��k4+mA���F����
�����d?ba����wc&�r���E+��}
�w��_�{%[�nh��cAp�x|�S�5'-�DmV���p�8��5�����7��,V����M��?�����}]��������&���^<B����X�@�B[��[��7����d7�%�/�
P�W��F�VG8l%E��Lcl�@;�s����M���u��ZI��H��U�5��i��JL~�	��koBn�����n�C%��k_�$�xFn��[�����
��h���E7�{�q�T��LR<X=�}�	
�z���'�����6]��4�16}���������pdF�<�����\�������q�sP������`Q�6����K-��N���}�$�gEI.����h����/T����������VTt
~?��:��>���W6�t��.:XS��B��5����wZ�?���k�[�cU��A"�:oy�LF�B.�N��e��L\�������7X�x�C�8R=X��$�e���S%�=u�T�P�h����Kq�6�G,�t���m�w/�o����"��QZ/Tn���4F4�q.l9T���u&�[���e�5��:��Vx|Q���c�gE.��v/\I@��F["�CYO����o�v	?�e����� �����x�[W������$2��\��].hs�����aVT�,$eE����U�O����J����>��D68�c�?���~0D�7�#Oumhz�9�H��������!k�n:�?���,�*�:��Z���`hw%�k6��Y�6Z���q7���2b��"O����y�k�Vd���+d�\�`[����$��x6�W�t
��6W���!�L�?�������(o�$��
�s��D�l������4%��i!&cM]&8�����/I��J�yb�6�6!��g�q��Vd�g�Y���������0�?1�L�C@�%��	{���l�
�����xdA���)a����� ���<���;�H���ct��'_���6'�.�W��w������c�
2�����1���!s��Wy����������F�Z1F�2��mi��1����?�/$��.���R�9��|g0�q3-����SC��nT1�hT�<��dAbP��������I��1b���-���M`��P�����e&r�0���f���d�!:�Q�[C�K��
�;��2i������mEYvnR�J��"?�
�-L�j�~,��qf��sE��J�qv�<��������sh��%�V�u�o�o/�e.���KE+��F���z��Z���j�����3vi�u�����G�F����mFRz]����{3�Z���������A���qSkYV��1{@�3B���858s�opQCIx�����4w��[4z�.���:b��+��{�|�)"��|��r82�6�Q:(���G����=��F��w�Y4���qNd��T�2�����G319�-�aq}�j��1���	�\BWn��T��spj��z�i.a!��H�<U���!z�����k	���-39�I���
�r�N�:���5�K�@��M�H�&���i��_�J�fbr�	U���*UE�tiA��A�C�]���k�LU%9t�z����d����(iVjEn��-�����&�����F?�S���E����82I`�J
zth�Y�t,s�??�������2>Jv?�K}f$]Z����w�RH�d�:'���
�W�g�<�g����HH���bG��������-��s�bH���7���K���/t�_�������x�wN��3U�_$B�B?�NA��Wd����)@,�1v����M��$���^{E�i��9c	��\l�gy��N��������a?�h'��dS����<C�v�������T�|4�]��@86�7[Y��t}!&�3�����j���gWz�Pu����M����������������Lw������V&YC���!�&����
0��@�� ���[TEe��]O)S�*c�0:ia�c)�L���?{���&�1��[����]��poS�c_�4����	�Z_�$��4k��v�M^=��to��v
S�-dsP�&���K�qEs�+2�`l�������>��Ta0�;���0.��l���L�s��Y�-������f�pSn���A%�lB&��b�@�e&C�e�5H��M����wx�y]19�d��=��k������5��d����h&Q�?VO0�}�%b�'�>9f_aO��FVg�-���'
�������������~l�<�r�l����L�@�<Q�'zr�@&��>Nkm�������N�fp��x��1�(f}������$�2��I�u�t�R�$�:�� ��R*���
���_k�j�L����}�aZ�v�����4_����� �@�s5]���ZQ��Zt�%�	7n&&���5
5���Ry2!1�����;�\�72P�h�J��wO�oT��i����rh�<]�R{$P����8�`��F�rC�1��i��g{3hM�����G4���|*�f��x!��dO��`�Q2����S0��N�}����/L���g���Z��ec�V�z���I�U<a��rg������ ����k%CnXPw������$[ a��+8��ET<<e&����s��P'����5�$>��{,�����n�"�Hz�s�l�[�WKe��2d��MWSUK<Q�z=s���	�ru�3��/��/4��?��6�Nb���|h�N����fS���w�/W�PX��NG%��E���O��(k,6'�*l��VtS�[�X�k���
�~�co����]F��\��Bbm���t�����v�H2�@1I�
�n�61��I�2����B�c�b?C���$D�+��9��������G�y`��uL@sanu�D�5��<[�y�c��(��`��y�~��s��KT��~���-���.�GuW���Q)��fR����3���#�P�r�s,�`|�CU^����et	�D\�D���Mh\������������/4j2��R�BQ���iU�Y��������x��?������l��?�b|)���"�@��������P���H_����6����c���y���V��z!���Tm>��y1W��k��W50��I�����_�d��X�����~H���>��]�����y��!]�c��������\���,����6H��t��!G�n�h�������Dc����H!k��0=�z���� W"�F�\�����i�&6t��N.������fR#j�9yfR5�R���C�0�������G����;�=�9p����s?e8�:�9!�a+2��q�<'7+Oy!����<����;�m0'd6�x��������]����u�[.h�oy��8��'�%V����q�5�>������U���2�4���@���eY��h]=����X�'�`k3k�"[,������(<�g��Se�,�����e�������al��@���E_����Y? �R�.����Q��(�>�@�f73O�J�X+��,
I�����u�����/������g<���a�\�R�[2�W��QG�����D6���������^qB��*��*���O��<���&`��^x��� k�p;R�~E��*
��FYN�&C����H�5�GM�������1�~�,���V���q��,�9�;�h�H�3��I�#�|��Q~���!HS������3�d�����qLN�������\�t��g��=�d�h��q32�4�'��������s�/8A	p`%C���q�P��.��XI���&���m�|:����A�7��!�\��.��+2�I���!{;Le���}�3p�P�w�:�n�a\����b��"S]�$�l"��H�������x
��sx����f�Z�.k�w����<���xu#@��V|�4��IkWo������f���G������X$�/2d�W�]�Oo��
����}X���x������/r��7=���\����8��>�E�Am���'
���R� ������*o�nkM�*��eI��;�M�f��|qi�����4�����Y�L�r�H����Q���{egFs�mw��Y�z����k�p*�\{�D���"�w��*�
WR����O��#+��� �W�E���yr-����`�P���q����$�����1��:8�
o�V��%!�eI3oH��]��g���l��O��F�3���F�	l�*p�����?3u�,�7����Bf����b�C�E���3�lz���w"4�v�m��W�e����(~���`�E�c�\8�{%�ls�g���o�������L6��=��|�`��"h�/��&E 	���J�(��m>o����|��,���|a�Q�a��z������������vv��a=r�]��0�n��$%��r�� ��U0�9�<��$7cQ?�?�N��*�Q��E?wa�]a����;/���^r���v�3�9��4�W�����B"i�,c���Lw��Y&�M�l�:�d(��]c��L+{��C�u��,K@�5^&av�����VG=>JO��8��h�<��
7h��fX�~�D���2�Xu�[O�E���x%at/:1�S���&���^����������l��������Zyf�<��@������Zq�?_+)��w�L�G������7@�+��8h�n���4��Q�ZG�B�JN��zG�`����T��0l�������Y�d��|�^�'���}!E��sy^Un�B)�Z��E.L�@������,��L.����X�W�'1�������)aT<��S�7l
<~Z�G���-^���n_Lh`����F��vZ/��bH��I��h}��W�2�0�q�:��S��
N�ca�>����������t�$�����9���z1�
�VM�@I�_��L�OB�^�����Os����
��qH��jUn���Oo��WPk.�X@4]8"
�����>�BY�G7$$5�w��7����:]�C<��dI4�r��,�����D	�t:jk�������������lU�D�m�;��$�����],)�&�Qj��p�.Zw�Td����p���U��!�u���(u�����L���n.rs>�r����q��c���\x
�kX���Of��EOt�|u�(N6�I��F$��a@��kl�(����u8#��/�(���#�A*F�F�N����s��y���\�4"p[h�k����+F���������>�b"���`�f���f�l6��1�7����KM�{���������g_���G�g;72,�Qb��V�x��@���H�9�-���i|;�g�0������>�_��5��5O��Y�����yO�G�8�WJ������`J4��E2a��������E-���|r��\���B-�}���� #�����30�����=�X�dYn��B<�n������rO�a�(h!��`Xv�8�k���i���e3����i��@�����b&���>����%b~�^�}���lA.�w~���Y�#A��4���{0�/$�s�������_�n�k[J���9�Y�nz�7]��dF��e~�"]9�c��n>e�YHt�!����DP�,���W9f����$Cs��qs��Yo6��9�s6.c[@�8�:O���^;>`&_�6����]zx�I�i�,Li=l�D���f�E���#E	cI�w=}���9�H�=�,E���j�p��"6����,�`"2M5��'S�.@KT�t��s�u%���tE���}Lzp�h�v�}RIle�'nr�r�`���5Z���Z��a�p��D��u�#_����,k
�EC��&y��d��
��Is��2�_7�Ggy�I��0��J�8�ge�G��DW����e�=�80[U��o?���`8���hb��
��)�[l�O���]�Q��
���{��YL���,��|4����m!�g��72E�2����E��/[����)�F�2(�la���jg��*��3sV[w����|� �J�y�~�E�;nHq���I�v�����WU#[a�"�����!��<P��$1�{`����v�%R�4���
b$�����/�c� �����x,k����	� ��BC�����7����6���f!�e���=��FX8�=a�4�{/M3;�n��U�Z���$��`k���6�
����sRyI�h�y�L�����z�(����=��[M"7=�t�"�f����pc��t���H�Y�����p���
����R7�G����?+J2�	4p�1�A)L5b�nn����kf��]�I���4�h��A���g<�p�����l����F%*�f,qpRk�����I:����FY�Z
��OQ.��Ywd��)*t�E}���K���B�}s���P9$�e����������_2C;������6�m��uh����2��������`��3�/$�1��
�V���,�<���mo���b]���X*����Fg�{��ZuX7
��\\w��
t�����a�����oBx�NZ�P������!b]_�5�V�&v��N�b��?���hZh&��h�
;�!��/�0�`EP��"?})q�{�/�3!���?��
YT��M:���� �_�fI|*��u�3��q�����Z�����U����\9�Wp>.��xx������:��b��'���C�w��:�p&_v�F�17&>_&pq�aor�5��e�N����=�;�-�&o�����E0��$�(i<�B���jn�����o
4�dTRE!"^@�h?c!},Zl���g�iX���
�<�}Tc��+,l���Lr������z�����K���q<$�r�����?����~�aoB�9��Ta��@�����i�v�6s��0aRwc��a�w�#y�sK
��	���$�������l�|���5�Q����h(n���Z@9YY!bFa�:���>5���Zu?8"���Y���������0o�C�@
�1
H�E����E>�I�!���#��H0���%R9��c�������z���c!�v��;��ba�V�TY�:���w���<u��B
�z�v;��X�o�[�7+�/|�:�K��u�	l1������] '��6to����o��������������/�#iC��������5m����F������������g�?��������������<�����W�'[�����:�|����������u���oV����������@��y����/�9�M����4��� �	T<c���
L�������$D����������j����?J�e�f��������+)X���LU�"?*��F	`�?�q`��l���PV�a.����?����,���8E��"&�o&[d�s'�/XYV?0��)���?�/!��k[�9�w3%��	/d�W:YA\�]�vG:�Y������������V���,�`���2?��#�b�����P�W���^G�i)YW�|k/d�~us'����b��h8�c/���jA^Gg�z��jd��q?�>9a����	�������)�`?/����	��������r�z:[u!8X�:n}eCa��gVgd}Zt	>�c��2m���0L*��-�%[!�M��M]���;@
�����.H	1�Um���EZ�?I����r�|6��u�����aPf2d�T�z���l��r��0�<'0�y��3�
��d)`R'P�-i���������GhK&5�u��
��k![�����I���{
�zI��E���2���^��Tg%��-��7���$��r
s�,�4a��.��C%���r�,(����Z���L<��S�lMC�5]��B����\w;\���98�>���5���0�9�����N����.c�����lLyR�0��/S��1��1
U�5���t�x����uA	��rV!��+���W6��`9w2�+�����f�*
���KI�@��}��Tg�2��6���dR�Y����L6eE	��6f�H���\��`��^0l�B��}E�D�.��.��aG�������.,����+��RZ��P�iW'p�a]���������+�����TurUg��]�|�)�y�TeO��p�lYWd@.;�P]��T�Tu!���C��Hk6�����am�]p���x;�������F��[���l���dRg���l������-��z��V��
�lj�G�Y �_�w��IZ����#����������X4��$�t�V��m!D�`��n���g�y��c�����Ni��"3R�>�i��J"��V�Q����(��G]H����~���_V�/�����*eg���y6@�iP���,�@��q�o5!OT��x#�)=�7}�g�����sDmJ8!��w��H�JCW�?lE�@��g3<�2h���K��`v�	xrV�0dU�l��O���.��`�D�Ev2��G����1��s���m�����Uz���m�I�J�����/��L�9Fj�����f�Mr$�\4!��
�
I���#��!�-;����uq�}{�d�.(�l��h�L[���M��x���t)���k��2������7��n��4�p�n�F���!�q|6w�x�j��_M��BYO�2}GfT��[7q<M������D�	���P�.E�+J�b�y����8��T��ukl�������\X1�d��(������u�C}k���B�l�a�1t���!������a���7�o�����X��9��*�09!��y��%�98����31�c�p�"���O�!�m0#T�w�c!��=M�h��DRJd���<�7&���/���5�����79I2��Z4�!��Z
�(G��� GSIV�)��]��7�Z��h|�W4*S�b�&�j�`���=�&��E�Vi��!��8�KS���d�p?C��h0���\�v��!{�#�����2pj��=I�b�@ *�����,_���V�����
��E��cLR��;q0��X�	#Y���2�wr8a��:&;�)K��o����^�S�t�$y��L ���"�#e1�P��zS9�F���5P��I���9Uq�3!Dv9_d
�SW�{��@�ul�Q��B,��!�k�����mE�5%W��y8e~�	r����	s����g�P����4�i�}�,��yq�Or*K�<��#/uGV�.K]��2�,��t���)_Z>������6}z�R�t�2I�ch�-���H��O�Y�:k�P#���Q_��s���)�j���L�b�qA����j@���iq*f*L��1O��O��@��D[��5������$���<w?���V�1�d��OY��.�`�R�M�?_6�g4*��%u�����eRx������T����FV�	yV���Ju�+��!�%��>wo��L\{O���5��S}!O�Q4����[M,��w�B��S��2�!������T�F��K��R�e�i�����W�iR'�1W[5�]�'�85cT�\�r{�	��F����/����U<�0�����WB�oD �Fn�.�E9��Zj����1[����J���=n�p��#���td �V�D>�DL��(�������]?�e=@�����X��������s��?�ga�t�O7���/�&rGE,hT�:Xm�
��\e���M���l�j����
A3�{������h���"L��f�$���*"��\/tp%m�-�u�D����t�I
��������������+r�����:h{��?
�������c���d�*8#/�9�#��S�=���e��;�@��;A����J��7
�"Pf�����]��7b�����)���!�v��S�����+9��{��y=J�v�/{�>�*��4o�m�~����X���O�7��������hsRG���3�O��-����;7���S��?�T�T�L�B�6E���.��{���4~����I�IH��eo��~-�D:8l}If���N$�I��a�E�y|����LdC
��.�B��t�~����f�zpX�l�3��Fy��������.�K�o�����-��4X}L�_�!c{1+��Qk��Y�[`b-us��h��D�B���C4nT�������]��-��r8�Z�����b�5u�h�=��u�vF�K]��,�(��	M����c��s��)�~#kS*y���*qH^f-F;*��U��6!|.h�I�/k�B������31����;��
}����+0u������"g���0�_�q���b�#�gD��"K�Qhz=�?������r�o[b�#3K8G���#b}�9�WZ�_���x�L�X��HM��'\���fF��r���b5$b��D�����X���K�E�2�3��GZz�
! e�����<S�����XE�oP.u�/��]�����������
v�P�(���PE�x�&
0B��F��j]�2�si�����	����XO���?~��J��2������u�<��.���|�X��s�^��z��c�:�|����z����v/�mmi��b�^�t�����L��g�������1_?���T�����b����}���t����5��|����z���b�~L���_W�^�C{��"M�!��}�~��:���:�q��,l�:�t�N`M�!��W��CL���_k���|�Z���|�b�~L�G1]������>]����c�1]����os��Z����<�������5������vC����[����2Y?�Y{���@���d�����n��_�������}��}��w���f�x�/:�����}��A�
�!���|�X�G7�����n�1_����^�n�1_�n�1_�n�1_�n�q�������1_?���T���~\��d����^�n�1_�����d����^?����d���ci��??H�������]����rCx��n����
��?�!��'7D�����������7D��������^����rCt�On����
��?�!��'7D�W7D�<�x~�����eNnH\��brCt}�;��s������-rC��\�k-�5��Z�7��
���T!�����Z���HnH\�~GrC��\�{-������.�&k�����E�+�v��$�N�c0�E6�O��e��^9���
?�!�4<0�����/���&l
��
��M��G�� �S{S>��4�;������?����\�K~��F������CD�l<�O�Le9������9D�1N��3�qT��Iu���m�?vf�Fd	9�y/U���_����Z���o�w}�	����UY��-��<��G��8��_�)t��o�g�>���&C>8���!d����(�\C,������9�!D��OSJ�`n{ ������J���L�N�m�/T#���iJ�)%��6��i����@lk{!����TdpD�2����M��?�m��$���:����E���_���Q_�T���q�+��G`+�6X����e�YH�NI�/H~!�����xOdV�l�hA��>=7��	�k/4�!�h����DFsY�����N�zl+2��������+/d�d�>q���Yn��'�J�Z�?z�-�NV���r{h-F��v��Rn��
��L�Q���xu�Y������ �@�E��e?��<�5�:9} �t�&x���_l5���z=>���I��5������M����<��%*|����2Z��x�4���t���eL��l�[\�������{���@��`�L<"�����g����u���c��d�]0��zQh���EL�p����p0��sA��'�:���������%}X�&dGl�wu^����Fp��D����l������}����Y����$����i.����O��b�(	����o0F8H�Z���d�[_)1.��J�����l������r���U����m�dL7��8���p\��0�6����e�Sn	�Y�P���K$jb&����O���r����=d���Q7JzFx@�$;v�nS�7�x��e�,3��g�m����4�$����z�
��z�������9��A��G^U�;�����P��5�:��ux%��w6���=�*%�6���a@�ls�y��Q���0��b'�(����L�wH��ykE��?�#����7����)�w��B�#�~�<x������b9b\b��N�[!R�;�8��E5���@�
N��������oG2^���_h����g+9��
d(���@����V�N,v���������)��8���s\����y#�i�dt���m�GQ���O���E���0I�����y�|E�	r`���kU��������b�p��� �{��k���.�}��m�^� �d7�f��K�>\1e���>�y_0$�y��T	����s/�)���,��3��l|J<6��LX:���mz�-{!�g����:������a�����4.�[�F=~@�y �y#���g����a��g o�'
L���	l����M�!d;gNC�	x+��ezK���"�`�M|}���S
��m�����4��L��F1�E�F?��-�$�A�����C}��=s���b<+d���g��\����-\��N2�����i��2��������]�����2B��}N
��1����8��,�E��>��/
Xx}��`�n�A���/E;�#&
4��hP������|I�!���-�<��z��/�<yN�����Q�p�'9��!�6�1�?!%���b'�[�y�N���[�nd47-
���\W�	<'4��l��Q�LP��&�	�2=���� ��
g��$�����t��o���1�ud�C["C���h��s����0Rc�`��w��?/��2[�	0��L��;�%����n�c*_��1��@��e�<� �b��d�OI��2F2nm5�9�!_��d��b%���"ff�8%�;��4���(�����,�c�9�����B�3�����N[��,1���S�m�B��4I��3Bg���I�|f&�>�o��A;�sQ1a�]���t#����8����R�Y��a:?o4����1�aE;�3(�4Hb�d��Oa	|^_=_�+�Z0��o�����~������<��a:�B��8�i�cD[�a����v-�b�-�s-A"[��w��E�������!�}�9h��A.I�=E[h��� f��D�z��9E���d�����nhQG,D�H7�8��	�G�@V�@K�a
�h}=�@�A�iK��{R��PW���R���r-(�$N�x���\wx��U4I�A���i���x?�����]
���H�s���lo����	V��p/l���[t���LxW���+��IL�j�n��[+��������l0�x�,_X�r�,��j=��Z5X�B�F%}�=��8:l���@7�H����,7�C%�>oT+��fP�
�O�	`���wc4��#.=(��m����3����7�5]I��{�V���z&VhL����g�zv+r���x�x�\]�����Wm^oZ�#1���N;�S��d�Q�K�
f�'!��,k�q!I>�%��T�����K���^�n2'�ly�{�X��t;�_��U3?��)��D�F8�"�8fy��Z��8���"�1��w��Z��}!W%,����+��#&���@$=)1������V��W��X���~�t���*����U��X�h��Me�_(�v_�ue������>l���p�a!�3y��-�];�E�i7�R/�c��2VO��_%)L�mF���!��- D�t���Y��j��������O���<78��JL.�0�34��y��n�_*���}���+J2�}C�t>%�1�%�nD=!L�J���nHo�g��Y��|a�b�a�_���8�mw%���������h��,���,�]f���r�I��c\2l�]~�U����h�?/� <1:Q��+����g�����/�D�n�]�B�a�A�]�����&���I_�������W5�����f2�A��2���w��Jno6���\9�B���
.�T]����7�tM���3r��!`O���W�M�[�=V
*���Y�<Q������[��X��A�c�?�}�*����>�L&������
���.�Ae���;%��B�B`s�/�f_�*����3�����&�cP���x�	�|�5F�+hV���s�usCw?/����+��T��X^�T�j����}��]��d���m���J�Y�kW4����f�F0h=B�����2�\<���/�|B$��	�J`�S�M�XXR>���$�y#8qz"(M�_���M	+&`���'�'�d�o4�{����M7��!c���s������=����Ld�Qn\�\x�m0'w��{���g���s����U,h�3c�E=�+*�y!V��`��_��,a��t�	���<�%���\����l|g�
����������f�e��7B�������QLa%�UA/��y�{$�;,:����E��=�Q�'b���9��TF-���}%��
�$�J���.�8	tFDQ.Y����������7nB[{P������E����)�������~�B�������'.�A�6����R'd.������i�	�j�Mm}Eb\$@�vk[���i��I����6�t���P
n� X��w~sz���S������n���~���q<.e�yJ����*����q�.B� Q�q����y�K�wU{��]��O�G�,��D
�*�w91���<�z�M���?n?T��WVd���W2P���	x�2�����k�W�Is��BLfW3@=�PD+3���x�d�heE�D<Z���qE+���r��S�o��aN)O��������c���%����\8y�nA&����{������SGe���[��0h���6���w3��qRb���b�nEzZ����:��V����coF.�g�@�=�L��h3*�������L����?��Mk�6h���cWM����Rl8��e��x������f`�h�>�����1�����
����+�qM��l?o�zU��}����*������#�1�7�,co<SCx��q����:S"�1�y|�h���1��0����
����Ax�����~V`���
��X�Y W$����K&0��e�� �����3��_�����Gi�������z��/���Y���	��|�����M�����~!�Y�~%�6��l�'�IH�%Qr,��n{N��X���2����u���u���o	��\�aE�.�s4������1�H�M4��r�����v�kW�"����1��p�'1:�+��%��������5��G�NE7�V^�@�����l�[��s����|!;�,��7�Q��/:�9
3���S�7��1���&lP��9���&����J�xu��(����6�N����0���7�C���W2�6n�S�
'J��F�\+��TF�_�@x0>~`���������?���f��A���-�����u2I��q�n*�F�_���~��������
��F�Ga�A�����R��0"��a-L��zx`�F������g�h���hk3�2�!p{,����JL�9x���#�8�}�1�v�j� \!�m��o��l��� ���A��t9*�"D4\��2��!��,�����Y��Zn���T">�E�0q��H������:��`����4
�:2���C�h�������kqafb��:�xT-�Q��l	�
{����:�;����������[P�q��8��#�+q-4�6x�����993fD�_�h�Z����z&h!C-by�}K4\}��Z����vE�j�{�n,����5{f�H��p�.K�%h�{)`���Km�{{!+M�@���[�6��y!�*4	p�y?d�H�%z��;����n
P~?k7������z�����Y��(?1����W���$�������m0#���G�@��a;t����o�m�f��4Q�����/�@��1�UQ�V�~�0c���Y���X*	+Ry:�JLVOn_�d,�-��V���`]���L�Q��bb�L���A�aE���U����Q�	Mm�	��gn�
d��������x?����/h��\w������<i��7Q����������e��R�����-uw�M���N~��MG�;n�o":)|��l4��$��3�,�K��C�
�@���L��gL������B�������!����L�����.Qo��M��Uz16��2cU�T��[�b����������H�@^2���T!�F��|����1�{����`��/��^�)B�g���6���P��xW��/d���M�MSB����W�H���f��k�=F,���^fA�f�G�� ^<����0��=�b��:y�s~�N��b��f�^(�����4��fv�6�_���8l�LL��8Z�$�J�mh��Q��&>� ��f�'h@.+��V�p��j:�kL��PhT8T�)���iQ�WQ^��y#�i����<~V`K����N���[Y��+_j�_�iX}h|[�1��:�%��OH��h�������P;"����
cu8��[b���s�Z-UbB�L;������Ds@/�t�/��\�q��q�a�3��S@x$����K�%�'��g���$.���fC�5Ot�3P�,��P#����p������J����;��B+�����98b{]��������>��/����?F��WW���?FtE	��;p�~�������M�rT����+1�k���N���l�+1�{�/�p��������[�y[!`AWd�aU��Ls��V�i��������.
6�$�Q0��k��V/d/�������.f����obI��P�7�Y>.^��/9��+��J>�V��BL���
�4�p�|��'���OU%��J1#k�������gK���������.�e�P+�Z^1n�?�w=3����A��r�y��N*F!?/b��r�'Ti~�P.�Ke�_a��1U�|+R�	��4�V��QE����F��+��M���	�t�����b��`y/�A�Kd�M�wy�-D���_1����@F��7�C�5��7��]���������+��ex���FQaXq@pRM�6/4��ISHs13/b�z����Vg���#��Gn�:R��F�W���zM��t{�/f��#�~u��3I2B`�d'�wk���GM�b�`31����G��8oc%&�zz���z�t	�m��Q����]�_z�31����#���*�:�G���m�yA�A�E��lA��E`�z�2��^�bF��A#����Y��l�(i@� ��"��C���
[LVY�(���dUX�[kbk��<dy�t��L��������&�T����s&��`����H�,���q�����`�:W����E_Y5�BwO:���O���K�N.~!���6������b�@���(�BO��L�����.���S��k�� py���E��>���4����HC��r��cft��=����S�@���K�	X
�)r0���0����W����l���$�7B;d��Y_'�(��������M��;�m:��J���J	XB�)?:dh�Rh�)���*�D�^���7�YW3�:)t����l�������wL%p�M��%
5�T�$B��G�C�����lI����'!���t2���	(&8�vF'1��Z���	|����?�"N��y���|�R��w&_7����F�&-BGtc��������L��7yx���z�s���W�=�<r���Z�|��!#F���fB���@#��38��3����I�
@�o"�L���Ne�C*oiW"x�}�	����vF�VPt��B	tJ�>T��E������V���a�A�c���'4*K���MQ��f�P���5d2����&�(��e!��F������p�>o���"�Lw����~fBM���dt,�����M��c�-H��[��K(P���l�!�J����"�	�L���B]�����d��+�	x�U�IF���)�>/��j�q%�(��D6Q�ij�E�_&"aD�.�K_u��fr�p��s��B�W���L�����-�?����g���dB�iqBK��\U'l��$S���wk��EP��=�'9#w�����#X���<���|�)�O�I��������d�T�Y`G0�mH��v_3�e;����l�tw�6'1g�&Z�5��%|�[~>/��,r�1���1�%����������W�#�o�	�������������
'�We��
��"--&��L$
z!2Qs���I.Jy��$.����u�	b�F����=��y�p�r����������CC,��D��v�9��A�9���I��cEC���=���G��{��3��~J'���r���!����Y��7@�1w��ID���xg�^���YC�L2F�����;��
�MwLl 
�����A �g�#D|�F��l�F9o��<.���*�bM\1�����;+��Y�7����w�I�$37Q�^U}�%�D~,���'���qP�����+�T�N^��pR��y&pi�I��
��Y��F?��#���'[���zH��zb :e��qI������e��9�1>7���45�o7<�,�#�������)�����7
��A����a;'������TC�
��&��XWxt�=�X;��������������	y��'[	N�YjR7aP.����EH6!W��M��\	�o���tF1b5�����-(�3<u>�]?��5m�P�+��
�jR��`�5h��
�:�@>�����KU���Z;��~^$���������y�u�M3�DHr2k������j6�Bk�y�������J����������@6�w��V�����S�!��&��\�!�.%
�m|_J�iJ��f%L�BL�w99f4H��%SjO=�a6mhfe
���M�S��-�����e��_K:Gg���b��D�W�1]��A}h���!�����UhIWd����r�X��+j\�>l�����0��e��dI�nQKzk�dX�@�`XR��z���e@Kz+��,�m(a���^���tE^�o{�a��S���0����'���kX�7L���������6�o�r�{��|A�Y-�{�7�X���ih��F�����K�Su6��A���D�S�'��~�����"�������t�������5�@����_��y7�L4����^�F�2�!�&<������FF9���MA���D"����C��H�si����(������vF��aD4j46�@��"���HJ����)���"��a�A���h�`�dO��9��Hj()����`*O�D���H�S8��?e
��Q�K�P^�SAfl���>�%����x�h���}���R������^+��
KmY����P2Q0e��z�*����&����)o
I�����J2�jF�d���1���9F���L�v&K
S��L]��F,�A��_�6�)+�#�3�e���".��P�
��O������6X��[�_��X��������B�yE�g(Qy� ���MHq�aS�`n�\#�P�����I���F����r������1���")5%W;�SX�&�T�E���<ER����>Z
��L&��"@�C7p]2%�t,�q�QX��z4d�9(��)A������[��w_~���}��a<��#��c��
V�)^��Zf���3.��?�s1�y����D�X�n���\���[I(�j�����3���7:z��5��K���q��j]�����
�.���Gh�7��L@'���z!C�:2z���#T%O�?n�(���M�E�~el(��?<Z���6������"���r��h��=H��h�%����!V�OI���9��z)��F2T6|�^����|�s�.s��L��x��N��"�TosE���j+��Um>'��?��������6���V"vu[_U��x��w@�%��7����1��}�/��^T�f�x)'	>o���n1���t�a��F������S��	��-�������&�����h�t>�*���d&h8(I�t�0��S7��Jj�G���m�y�C��=��,(�p�c�s4V-�����@�����5�I1uy�'
Y��I,j�^I
�}������1�qa��f2	R�=�:�l������79'x�����Gal����{��Gh�]B)��j��7�;���@vS�^�7����\��/Z���tA�1'5���F����r��|p	pc��\~��Y�J�Y��[�"KyR�i�>"'��>�i��94!i����6t���]R���8!��}�YWy4C*�M��'��'���s���C�jy�d�:�M�����������?�\��!�JLC���'���-(�H�����"�(��8��E�Ccz��~hj�ij�����:9g�������,���oV��WXP'�_h"�>��oo��!S�4(?������ ;�N_�k�$�����lPt>����b��c���}����5&���b���������/_#��$&��K�}����n��T�a�jgA���Y`��� ��g�Hb����GE������sT^������iN���z�\�y
�����]���?m�@�R=9�j$���|*Y;{������������yV-w-Sc<��	��3B$�2Q�4�cVq���%�I��<#*�O�k���v�K�~2��u��b�^}�:�C���D�q��t���Y�u���e�O�]���u:��'/s�u����(?����>���,��G�y]���Q~]g�u}-\�9y������7�K����G�C�����x��{�J��������|q]�=�/Nf�x�����?��g�����������������[dkGb��u�j1�a��c[�����_�y����������h��9<�u���?�l����������������l��?�Q�����}��Ki��&#�����7���/n���{%�y����
����v��p�t�E�vh���4I3A�p�H���� fb�����06l���2{�)�~#;.`?���i!|\��E���p��]�/d�������Z:N�Q&�?�![�<@�y.��o��3~����\�-KP�q�]{2g��!cM�N�y�?1�~?�t�?d�Y�:��.����,KbfR��A#z�N?�R��f�O�
=�jN���o�m�|��g��#�hV��������G�,�"��y����!R���	����rg~�^����"��~�d�@��}��r,���_O���qNZ����F���\3*��f]�2�&Y;��jz���)�{��&��p���.��p�������&�����|<G��[hKw�����p!������|�������VG85l%��������v�m�����1�0'���R~Q�n��`���@+���:���@�m�K#���x���d��?��`�v\���)����e[� ��$� �`�o.��3H?��R���s��:���%KEQ��G�	yh���D�a���
���6/�O�q�T��HB��N�n(���l�z�v����?���E��$/���mH����QQm8I��<�kC��i��n����������E>{�iG7�Z�L�U�����el0�X���(��U��t-Y��_I���``
�6�1�H������	���a��U����Zp�NG�J��L'��V��l�&���iA
�P����E~���	�_>/�����g"*�q��u��HTn��!yO��`��-��D��Bj�&1#��|s%�?u`m�� �M�ywK�K�1/z�od����f����DD��	[�3q����tH�\��P=�����X��������Oa@X���}%�hQ;>��He������+��"�J(���-ZlK)�9r[���,Q@�APs<�[������ 25���T��].��A���^��*����I��q�����}����XIz�v��[)
phV�B@��/`�\��G^6���=L�E���E��Z�`6VI]�M�M
`vbiO0�5��������u=����wg��}�0�Z��s����a�%%|������P�8�r��\
�	���3�!��:��c����+*(�-���'!�,{?�����7^����Z+%)��c��n_��5'M�p���u�]"8
��L��d&����c��i��-H�{d��������������tP�ME=�4����v���1w��y|&��g��4C�3���W��,���J*���[�6$���su���;o2����]Q�����wbAE��K�U��������H�]y��o?�Kf�o!Sf���t7,�������\�{�9c��@���%�Xc{;��������{�,�A�����.k�t/��������h�rB���xPBV��a[r��d��0������&0��)��C�;��,@D�x���>�G�	@���4�O�������y��f@�u����?�������[N�	x,�+*�X���
}-�{�9��8p��~��R����<��	8���qe�e��G��R;����ecZ�:_������(�
c������_���6a�H����������k��	<
jU��"S�Q���7�^+���q!�v��\;x=3/z� wK�4W�����9!�
.�\�'-��	���x0��,D��;=~�UT�~�-A��-��)z3ZK�`�~�ej����B?f���=
����������9�:g"E����������(5;����{��W�����% k	��l|�C��1���di��`��%,���$@U��E�3�3$�Z�bB��������u�r�NF����|o	����I�K��l--1���T����;���rVUzxBu�����G�;��OX29`�F�*�]��7�?P�U��a�k�gG�mj����������x���jd1�G�"��R�5�5�"�em��#G������(�3BK}22]Z�����G)L�$���]Z�M7��3��0�3:G�	Q�V��Iz�~z�����o�b��uO+7�����	�_p����n���_�+�	��~��e�+�({R����6'"��J���dw3l�^��'-���#H�P��1{�a���m��}���������������`����&��s��������4���m�^�w:db������t=����,bN���)#����Gt�'pU7b�u�Ybf{�4h��iy�8�v[�v3�Q���$[�\�5DY�agL;;��Y�`g�%VE����=��Z�D�����E��IL�2���8��W[\�N_��K��X��N�vS*�5��m2����+I���X{��/��yg�k�}���P������]_����U[�\�z8��M?�sGA
z.�e���o&(,��0n���$�[����xV��sth������t���*������3,�L�0�mA�nI�7$�uh�����L����2��g�?�w��]���L5��
k���MA��}���@e2m(�������gGRg�Z�m=ai�2�W�4���������' ��~��-V�	�9��m�Hn*��-����~��P���O����$���3��S}���0X����n	De:����Sk	�VQ�P���R��.b�����P�2�~y��i���dV"�-��^��/)�K��T�����N���]c���q�����a�^��Ri�C<�����}|��o��M�nyt$�q��	D;�s��n�C��T&��a�>���s�
pR�l��y6���b0f"�>�O��&�m[���;k&*_6�����
�����f��t���Ru��0" /�,�
jK����BB:���
|
�v/[d0��
��h62���f��\ 8K�_�u�F�I������2����m���2H�#�0���{<�D�3U "����%���@c���$>eg��
�����C�D{�������D���R�*��[��Z�j/����l���	�r��D:��;��?�����J(�:������
��Ddv�<|�@Cj����tT������*��(j,NLYUX�StQ�n��������
���=����
m�aF�}��cC|o���~�Z��l?���$��O���De�p��	�M,�nH�k���9�\A��O����D���J�>��}Q�!��c:�!i����������������U$�9�X�������A`�8A�t���z(��FD>��~�>~U���i���ux��Q�����p\�sX����2���3q=m���t;��������Y+���;�1��[;z&*r!qn���r��JD�.�q�;�74�o���mEE��T\L�"��{�6$���$��������S5�;���S�VAc��c�������H_S���m8�+��g"����O9��kCRl2U�>Se�_�<3p5��%=�K[�b�����j�e�4�xM}�%Vw.�|C�y��a�"�:LW�}�PBu�h&��`��j�Lk/\�y��}��a���G0m(^����Dg�lDdd���v��a��`m/H�7��B�2�!����%6uWsQ.�,����bR}��-�_�Zm%���`Vm�)�/�p�7�K���e\���~�[�z���8��H@���}N�VO���}G!��:����X�Y,c��1�Z�!�w)j�#=�o������
����
���=���R6&�uU�z�����D�.�l*�U�E����������H{�X#�c�����������*v�����-�;���f}	�����Z�)���1��E�	wA*�P��������1!�t�����������!���WQy��>��Dk��3F���\.h)�3��k�o���W[�5����7Yc�ip�a������WG�25�.�'@�Pb�����g�.��h�w�7��wi@-�r�6�3��D������M%i�2@c���(�4[�V���q��Y�{nw����Ug���f�l�=F����!K�EI�a�I�S��Hi}[���/NO����}�|�t��g�A��\dD4�;�-d��i��u���QDe��<��3�	X��_I�����~��/���D���R��x�@��� ����Sd�(=��\�	������������~��������R'�M7�0��9������l'��u&Af9O��_����1��,�Z�a�"k�HP�����hE��k�H�����7����,i�*#���_t�_�3>8%��?��*��gG<����<�A�lHr��'���p����2��r"2��MY3��ot>$��@�YHY��\~S����i�|�#u���r��u�O�[H	_�
~*/2�6oHk��q�c ��jU��� RP$wy��H��O
����I��K
����)U������l�]9��J�BPC�Xl�z���$���J@,�[�:��)��H���F����|AQ�/�����/��B����L��2��<3ol��h���&���4��W2�J=���2�E\�_S�=�{�V���c�|i����PQ�&o�2�����(���B�_��:u#9�J�n<��%�=i%I���f@���bU����_X����.(���T��?��DFJ���7r#����2Y��]��!~V0��r���������#���i���H�gw�`q�P��'DS����;tB�>�HA�8��a'e����{v\�
�q��c/���}2#��1�dF�h�^���L�v���PqJ�t.3;���5��6����J0tQ����E�������+;w��[$s ���'bC��x8�j^�X:�
u�Y}�����#U�����&�6�x�+��-�2�����7���g�1gj�~%n�E��t���1�Y����I�#Y���������!���`����x�y!�������8i|���i�yM���v�G>���0r_\=�P�<3(�,~�d����<���&	�����Q���6Pf��(��[�����?G�>X�jj�);�.
�vm���+;���+Qk������
����>�����gcAQ��*�7h6[]S�;�M���c?;�zo��7{s\xQwkV7g{��|U�1$���!'Z`������=M+�O�����([3l(�W��_�@x��\
U�������2B��t�7��;+�9�}��x�]�-�!��t [��2P�����Df��A����Nk|��F�����t�m��3�N�>G{��t8�Co�E4ug�
@z��gc4�����Y����(?���Q'��H�Mk��<�3)bp��	Nn�!*�1],�o����"��p!�aH?��J��P��B%��Ii6��c���Vl�Eq���P@S�I2������7|�H2�l���?��f�.���i�@<��l��
�Zf@��mH���8R��c��"�wn|��C0Lj4$���Q��Y\�U��s��\c�}�5f�#
����,/0 �9B�2��������p�y��t��*\tX/�L��$?6w��A�]��J���������W�I�m����K�$���8�^����`\|��3������F�E�CLSu�����l���.�	��:��Ld���Q��
=����%O��z$?�aLW�=f��@��2��c?�v�M"���$�]�O�w����_b��>5��B�x7|��\�X�S��s
�(/���q%������\�x��O���r��:���/e��<17�g#Z�).�cH1�E�����+?��^�vg�}|��Sr�����>���'��H�du�d;�Lg��ET&��i0�'0gpC<\6�I��G��d�`��#@z�~E�2Y�D^��CJ����d�w�S%�@M���>�!��
�D?Qo���3<��,���ft�~��#?Ll����B)��lz\�a���1��-*��<V�����z����~^t:�Y�����J�/�RYt�U_���J�c��d�`�����:�{x�g
�����f!(��[`_�����/7���5����4�k��t1��P-��.|gJT&r��=\�b�<�R?�q>����V2��K7�9Z�`k�r��kN_�
De�����4�������d���W3���vq4�KZ���n�ep��aE.�P	z,V��lP6�A�Y����|���lN���OI���z�nS���Jf@���������_�b�A���8y��y2��JD���X��!0���D"24�������`���t,���������,��Gr �D*S�g;�J���8������u{���t�I;���=���D���U�P5��0�.��j���KW"2����5l�����$ ",�a��������2����rU[h���(zJh'>�[[Kc��~v�z<EX��y{�cA	 J����R#!�������{�Cu��{�l(.'���v I�[�Hh.H��3-'���=��Ic���"�,P�G�B�yc!f%A~�5KI�P�����v����C-<66e��a�xu�j��:tO��T�������0����;�6$��.�M�rb������r���o�XA�Y�Zs^b�y�������t��A�I�>A���j�)-�Hn���HkA�A���PM�?��q����im��$�@i���/�W����*�#����6��x���������ZkA�6�=�`S.��������[:�v(8�v$�S�^��|CL�N���$t�:���baT�|�+[��W�h�*l���!�����L������J���dv]��+�pG���!�zbP�]��=���ooA:*������"pW�cK5+�q��6�=f=��+�D� #h�r�������2��|�	3���Z�P�����Y�����/��^1M�����&\��o@�P�Yij��vg����~y��o��A����st��H�+���W�g'�&������v�a����63��H�Xm�����2QC�L��0<U�~��V��J��Y��x]�'�\��Gt��S��9US��[OtZiz�FJ@8�(]��
�O�|q������$#J)8����v����0�X�Djt�����ad��L�����m15<�-H{��b����w���%4k�P'*���I��2��uh%>{8���L�.�*�?��N�P�;iR2Q��e�gG��.�hu�p�
U�8��v������H��43���+x{�|���L���P���#Q���>;��O�����wn.�(�n��c�����Z�.�iZW��e��4��zM��gC��M@�xp�l,X����������<�w4�7:o(��NpdDN�<�q���LL
7W�����|�������l���a��&&��?+A�c$�X��q�#Zc?�7?=�#��^������w��E�8�5�H�g`��K�z��U��:E�eF��y4�
�b�\�h�iJ�/����eg���f���p����%t���T��<��n�G.�����1���; ����A�h\
����~��Ue[�#����w��"I�)kP^�*�T�_��������9����v��z���_�3"�%[F�g���?�w��������������_�|��?�[�������%yM�*����������8��!��_-��j������!���W��i��=��}�;��P��w>��3�sp�r���p���'�����X�D]9��ySB�z�������'E9pSF*�z���9��3nT���h�����Ay��g#S�v9}��?������PN�Qlu��7���L��Z/U�U\�4�Z���f����9������7�`��3P����l(�7���	���!zh����U�C�\�����I}gS@����YV��/=��B}�7AD�r�������A���r�F"r�v��HT���P�9�q����Tf��h����o�r��oEZ'���VMe�Tu�"#'��O��D��~	��.5;�g#"�����~i��M��d��s�n�S$�d�J������T��12U.��y�{6�A�`f�'q��r��B�$>L����\���hH��*���9h�hG�J�lM���iE�o4�+�,����B.���kXo��>��n~���G�(>�i���y��L����`1m���>LiG����gC��f������-��J�|����&tA��y�Pf}vZv���5��Xi5��r�
�����]��Xu�T3\���V����*H`Vt!�m$�Cg:���6qZQ)����M�^8z��������x~�iE�u8��i+��(���!���nHv,�!���!���f�)�6NS���������M����x�'^s��hVn'����4��
d3C>���$7$v�D�Q�hU$�����cM��iFHV9�{�0�
������=XV��a]PfXy�L4�\v5'�y���i���hY)
8=����a]��FU>�?K2��E���T����-��
#�^Q������5��M�{���>���}��8= �I�����J���,?6��m���g���>828���={����������~/�����\-z��mC�{�+p���z�M�j�6/asM ��Q�:���Q}�9��e�y�m^Y�8������2^_s�Y��M5�5�Yt�#_df0��

�zVd�6�tjh������4��M���0/����4Il0�)a}.�Ib���T9J9�<C_I	u.a�SZ�{�V�d�6x��b�������e��A�y3��L�cf^,�'+"�;Z�[��\�R�h��;��\6������u$97L������drbo'�\X����@w��V����0M�z�
{�u����@^U�,K�N��"���+���(��"qD�}!B%`zl_���#�t�u�f�����"�8PArod�ez��;L��m9�Et'`��<!���S�$�zQ�j$!Mm�pg�qv�����KukR����m�����MR&����Z����SR`�x��}XG���JH������f��zU��%L��p��F���h�e�zL�-��P+�h���|�g�8���������(�_��(� ��f�.�����5�{A�%�0��S���F�F%x-�����b�&�0��Y�������6�����������`�4i�$��+&dGW�����Z����:�]�:dN��)���>����Hde���jX��������}7H"x����wm@oM����%�;i�kV���qJ:	G��AR��v ���N[��m]`'�)<L[~�^��4����DN��DlF>��Et�
\�d�@�=�M0�/�t��J��Y6hae���i�y�s�]��Pc�$���I�z������$��d��g�E�+���5]�k?�LU� ����:S�������4��qf���y8��4��;LO�+���D\��$�`#�i���X��[`�.zgOX5�o���6����j�;�������{=O� 6W7�F��O��hk�\E�6�a�S��T-��	x��Ah����,���6��������Q���+�E6l�%���5�3F��i����RKj���Ql��#���*���f<��qT�������!�SC$'��Qv@S���'���>y\��kf���=�
�Sv�G��}6�d���IV=]D_��
��54�J4�����j0k��!��{fp�����������;�a%Q~_����+, �T]q���3�����a#��5g��.dAx9w�,��pPL�	PhS�lDd��q����|�LD����x��%�d�Z������GO�0��Z;����W�D�2m*��=�jU���>v��4��,�g������������"�AH,.�u�$���dp�Gl���������������u��;����oOv�������f= �k�S�\���.�U�JO�L8r�l�^��=��"��c�V�d�S�������g^t�4����t���	���-��o�An��� e�"�e�~@�m����B>��*l�W�����Ba����T�:��DT��I�m	���.z�Ch����
"(*����R~-(��	��4u��=6���g��yod����e!x�A�q��Y����PP��u�e=kQ���/�ZX��e������ud��b[_`[0\�1gt�D�|8�F�s�Z�����a�z�l0�r�x|"u�O1�t�)x?����#M��?I"<>�H6,a��2�Qs�.2,Deo��9�'��%������+m��X[��������s������07D�."��_)+���j��V�%h8[��1�&L�#�S��K�6*��&�Y���2�%$������|u����kL���q��Pq&�����d`oA<R��X<��~���Y����m������c����}uA
l���`#�=+	�K����k��WM�K�*�����B�+�_�|XHH��Qs5T�!e��mVw^t�c1g�JO�Y>�\���h$0�����>f��/B��Si3�M�|����/�O�F���V�Wj�IY���`����Z=�*3�]�X
��
S+�K�����Q��.(��4'�g�+�l~�u�s
w�,�G�`~
���s1��4/������.��a�mh������)
8[b�]�
w����,��Wj$����������H�t������e0����QXU��"��f�}vEE��-�eo����|����6/z�M�q&�JD�}�H�"~�:wa���5���a��l�5����\n���������W�.c�|����ob��]k}�,����/P9^p.�����+_�db.�/��}��}���\�������Z_.�F����r��\p.��G�I���k���/��}��m���-��&!��rA[/�rUC����!���Mqjt�
�������#(�����q�}Hb��w����������.��!�������#�o����q�L�W�7_Q����&�+���x�x������ULW��]��._c���u�N9Z�#k<�������k���DB�
�d�9^P����"]�q�����5~�_���&�vX4f+�8y��K�c��a>h�
4�(�8�+|��>l�qb^1��<P�+�v����G�<T�+|��cE����<X�+�����aW��r��]q�:��G0�s�#F��oW��+|�cF��^�t"��mW\���(���p���[S�~-Z�x6��rl�������������������Sc�'����O.����<��?94���g�������������������/c�'W���O�������?�1����1���??������G+��{K�cO~Kpc��q�n��=����������#�o���nKtc���W�w�"�����m�n��"�-���W�W���W����]�[��)x��+6g������y� ^<B3���d	���Q������������c�b;����6T2������`���)�e�Z�8�(BVa��H.fq��>H�&���K'~���U+�80��)Y�g^.��#���x�����d�w��D�u(�
5D����	@�bj���l�E?���<g�>n��PP8FQH���He��C�����g/�k�J���f�	���5�S>y@�J���PY
�.@5D������A�S�)���l"�v��/-H�.L��v-V��B������:����������4�_{`gG[�j����c�"8�\�D����@"cK!Q��[�m9@
u�����F�����R��H���8VJw��W@T&��\U	Pa2	rE��P��}&���P����_S�n������N�1�Qi6]��Q�ui����������N��R,VF"�X8�^���}qS��\��D�����`}6�C	T_vj�����2�h��I(���7f���L����L�Y���hu�Y�S�������t������j�Y�^�@���Mp�-���jp=XWN8;�w$Q����������t�y����	>;�.~��^��I���7���%��|nG5�Q�*T� *��|��D�!2	|��fbi�'�GSq��v���YN>F�#���Z�s@������n�6�1N�������RO
u>������`�Y���2�8MH��r���	�B�4��u��<���/R��D��c9{����,����_��Rk������.JR-�?^#��/9�k��2.?����"���<�w�-�����L'��$��Y6�U���I�
����A�q��m� *�i;x���8��5�
�Vnx^ ^�$Y
���eUy�e� �<��������g�I�c"�><|�m�.�f-�z��NT&5���$��J��[�#t'6��H
�3"h�gZj��cq~T�o�V�P�~�*u�p��Jt0����{&3�L�De2���i��/��n�GT1x�k[�������sJ?eg�[�h�����<x������������(7���������;A�zz\b�����c�~!)�X����j��x��l�P��2j�[d|J?F���H�4n}_�|��t�J�g�H�(^��@��� V�N��c�VG�|�{z'�O�/@Uv�6�;$d"��H��3�+�H�dt�$�����i�"�	R�7I'�U/��)�>v�0x��gU����h��a1phqPf�^��k:��b��g��I�aF+�V�����1���:�Phv^�����U�2G2}�mcJB> j�.:����;���t|I�7����!�3VPY}���gcx�h������0���P������|v�^�12���w�6�D��/��Dw0"(I���j%��4�$���C���=����|����������<G�YP:�4+Fu�y(� D?��[�����}d���>]����U�r��r���r�E��5l���u��	.�����Y�5\pYR�T�@��"������G<�y?�������h�-�E�Y���������
,��:�6����n�4�d4�b�[��EB2�)���=����-#tr��O�c3��N����pT��8���xy�?!U�CS�����/�B��^�-�FD��Qs������J`0N(�����Q�HP��&�	�f0�����$��/�6_ICq��2�N�5��3�uU����-#S������s6�g(�"5�(��u8����MA(��\s~��|^.U<��JT&K�c_�q�1��@�9��=���y�
2���@���H�cEK��13���5H���X��#�����+���%]�_���L�a�s��������G�]�������zh�����T����"����$��h��I���@�}~v��A?x1��<�����p	gn.�>w~���0��6.5��Mp���H������A�k �Y��u	��gChU�|�.]Z�N;�mC�"7d���q������D��hd���;����ig�n
`�]Ql��u�%��D��r��J	���	qy|\4	��kP}�N���#>|u��h����|�_�A�aYq�z��(�
?��{���$
����/g�hk=[�����K������PW�t}m�X�r-��$�G���\�{��U4I�A6{�Jf���}b�%v~�l�
"��^�f����+*J���Q�����%v���`%<=%�Bw����$"K5���Z:�*v��i�#��K��o����U�����*� �
��J��k��0:|5�zx.p(v�<8-�T'���_�4'�� @�^q ���{4�uUt2;5���bZp��k~s�
���������n�S/D
�������'�De2��Q����bed"2_��z��|$��v:X]��x����1T&��<~8�e\H��t����$Z�����qa��cg�����
v������h�jfc\r���F�V��#�G����cG������~�NP]>�7�zA�J�4��	���U�y��������s��z�����_4������_�~	�������QqtkS7�+
��]G�^V�������i�%��!��G2�-���n�i���gE*c�M�8�b��o��_����d�m.�����1M�gEZ�d�QA��o�[�#X�1�����BD�G0�������X���UE�;�/��hEA�������/Dd������4��*��!�q�21������C��e�����e�vU2����
i�i��l�cAQ�m���h���r�v
�T�%��oHj�-p��G��������2�����F0�c�93_,9���N�P��83�����Us��U_P�W��E���j���C�b����|�� �I��+�(Yv�@�f��>L��!�p�
n�T
n�s����	�ck�M���Cd��vn�$�������������1�����>~	���4�4�/
'����P['��I��Z	��[���L&���P{���dgmhL�LP������������$3������;?��[%��Q�d2^�VE7$�������s�.�=����X^��A���i�T�����j��6����:��#�������n�t�f7s2�#���n�]���W��7
t���$*�O���>T����y��rO��h��&�����u��l5��Od� �g#I~�m�)�G{I��.c��s0N�!�D�FG���7:�=Y}�yt���Tso��<�'��6��T�����{�����c.�����L��aC�{��gu���������^�QD���v������1�{����n�m���[������SW,ab��6��U=���n��p[	������>S�{g-&�N��@6W�D��.��'�/@�����������0t�Q~}�Gh��r�<qc1<�#q�A�~~����~~C����7���z~�/3����U����H\�������
I���j���H��E�h���D�Os����0��1T&K=x�����������_�_�<v�� n ?�����������)#G�IeWwHs��P�i'�$>��G4,�Lx��S�I24C�y�c���$���y���L�v�j�������
���	`����l���t�2����	�w���7��OW"2��	�e�l%#�a����8[YQIDg+�m���V��s�b��d����iN)�����MZ���E�6�w�}�e����H�'Y���i>;�f'*�x����	p����;��3z��������������V$`��B���G�3�������A��T>�8��}N2�[Q�*��^��3	���!��^���$�(��g.��c���������2�x�p��D��[n���>2��p��
F{��*�y'1u���T�j��I�U[Xj�		�I�uF�#xE��L�-DJ�o�-�'���.�M\����q��foa
�+�>70�`A�W��\�����g"�rS�R`���s���{d���g�9�VT�~jo�_����c���\������������`�_��z�c��0�gsg_rz������X,�����Z�f�_B�A�h�3�.E���.��g]s�W����3�����emj��E�3<����B�f��+7���o�����E�Q(?j7�rg�"9m2'tc�7��U��"��]��1"J���t����_Bo{�mv������ge4T�=�.��
O��b�=>�z[g�������U�����)���tN3����B�?���A]K�p������Fb��=*:��ZS��c���o(	�+�22��~v��Q�	�_yCp}c�}"�q�{Ax}C_0hX^/��c�
%������Z����bQ��-,��3�����,����(��2��Bk�}��v��C�J���V'��e�����n�!���T���`�!j���"�p�>��y���#�u��_��<��`%^6k���_�����C]W�,��3%8�(���Mt~%[*�.E�,�?[�����?�x��;����������Z��5�����5B4J�A����+y��Sr/N��<G��t�{�]A��,�}���8s�R�f��������2a��MC�S�~C���X��<t>�����O�v�	�e�v7��/�?A�x�����n������;3=	�����851��}%���KN34����Y�!�&!L��-��7T�i�^�F��a_��ahg�����t_��>0�f��������aj�O�
�����
�+~?m8\��
�6�������O���"x4Eb{��m� >v�Gbmk�v���{����PH��S�9����JB��_�/��V����L���I�_sO���G�����>[��W>;S��R�YT�>�j���<H"��"�y��L����������t�f�� �6����/cs�!8XdgJ����QQ�$�t+�_Y��c6��A�H�j���'���J��"�TkC�w	�lL|+����U��H>�J���U��|�u�����H�-D�@�p%�6��2�N?�.;�|�|��K�o��J�(B,���(�I��>�����Q�;:�n�E�`�3,�}dq�(�����m������������j��M���j��7Y������"`?�1D��P�_����j[������;JXS�L0�L;��7g8bcJ.cU�����f�3R��]~JB��lA�B��~h8"����4���Z�s��D(�}����^���U2Aj�Zuk@mV��ng;�KgJ��;�� �)gO1{�O�������GK~�Eb����/8�����(��u^��������K��heg_p��]F��V�6VB/T�5~��!��m��d���G�*22����
	;H�	�H������j��n,��X���j]pX	e�~�aJd{��=%��*<j��sF�b�x�
AF���*d����K�������S�S�[�n�������)���:){�����"���\����\�p~���\s6��2�������}�3%�/`���Y���na�M�h==�b�����m�k�41%��XD[jp;��p�������C�Qn<f�n�>J���"i���\��$����xu3��y�v����~��3�|v�#B����J9��Wo�����vq_��2�"������On>�,��c���/.��^n(�7�Pg�k
��/P_U���P]�JEX���3����x��'���E����"Z2����"y9�o8�M���p���.?�$�l���o�m���h��� ��T����K�K�R��s���1ji� ��QG<�d�������~����BF�JR�%
\������n���&e/�P����h8����=^���)a}h.������r@��~a0������X�+zDl�(_�Zd�:�ec��bl]�*�D�K��;�aa*~��Z"*c�}3w��,�M�aeh�;���jj<�.5�C��=��n���\�4N~���6�a��5[B�������2���K�0�
�F���f''�,4��?��f=��������^3��s|
�r���?�@%p�|�6��a2�����V��3V6����`x���dhO18�p_����e�`c��2��$�\��ked%���3�2�M���W���A�{�p�LL)��
����k�	�u�����6��V���W:����K���mbC�-(����N�\�����1��f_�������G�W���������n+?S�0���[���u�w���L	�w���@�U�qVb}���|}��������u:���};;C��5{g}������	���W��p�-���l�C�_tK�
�{�4'6=[���<���B��c|��d*t�6)<���-���u}�8�!��3�k�!�M���j�+Gk�����h�
UNw
�{�8����>�Id����9I�9���S��;���<�Oy��8�����WTm�"��n�$��,l(���Mo����?eg�q�qq��f7F>;3�t�(>.������u=�"#�J�gg�p�����i���g\����*��F*g;%$G�YP�i������8�o�������^�^�;d�g;Z����
����
����:�����'������|�o�3*���D*�M�
j�wz���������E�k^�~����7T}�#O�6�cN�Q���S�p�:`b#O~l�r�Gc�Z���H�������:��d��q��-��ULxF�I�0��;D�f;S�;0�+���s}�+�b�%�:`c%��vW�5jP��X���S�u=�2���s��=���]���:��K����lLNvP���Cr�QX������8��lHe�d1��8u������M}?}0w����> J\2z����e�����ie�f1O���C�D���.��i{W��h�Z�B{l�X/�"H��F{���D�_�u�#S�{����qbp�_K$��G����N����V�#�|�Wq�o�����(Br�q ]��f��u��R2\/"d��i|���{�E���T!�u��P����	>;�k�nX�A���#��F�wL���@6�;3���X�n������Z�����E����d>�������^��{FQ�k>}"+���U�b
������3G�z9/1ve���s�g�������'D}��k#���=5��-��S|"���
1�w�Nj�j�����O�$r}0oVl����z��
&���7>�q.:-�u��h^��|�_�dd�U���a�������Mc����8Zs�_G�4�� ����������s��@F�\5�K#��>F��N��]G�	z���K@H(MP�����=aBlJ��X����2\�{82wO���'�W����YB���ScB��Q���;)@�?h�*Y(����gfS�{�6�N'���\.����y������~aJ���R��'����U{�������kb�\�<�b�i}����^��[]�>�<�p��P��FTF����!��ExU3`�0�hq�o�P�	����O�;��vTN�|&��Hn|�2G�os_3L������rf2����
�����fZ���$q
"�l�4o���Z�3���J�a{��<,N�X$��2��Z~������r�_	��������u	��u��ir=�iX��.#��y�����}';86G��7����c��%5���Is��>l��*��]��������%��N�!3|v���P3j���e�\��������t��'�P6�l�M>�3u������Y������W��9���O]�������b������N"���f�y^Y$f�oU���A�u�/���u�����M-�� �`���2��d����f���}��f)X��
�-��`��[���)X����o��wp+�0/�#��~�4����ct�j���{�:a�����R��j�i^Pf���	��a���B�>n���4��0�%�|_��}���V��s�q��?�a^�������S�0s�^0��i��a��0+���/s�l�:�a^J��af��d�W��1CyLm],���p�"���2�%�|���i�o����>#U)n1�L�m^t����>��M��P�j���Vy�qx����8v�i ��!�I�%�]yhlN��Hzf�/�L��gp"?��c��xu�(?;K�k���	�
���t6x�:����$L
�d��������|I������83�q%�f)������T�������`"��&�VB�C"����@<4k�EZ����a�t����k�N-���K��j������~���^����|0�2g�d���>��F��h�
�4]��)��>w�$f�B���q�|�93,F��N+�����\�}���\�J��7�L6'��h���iD?�/��0��5�]����P����TvQ/3��1�o��X��
kW�E0��O
���z�v��I��(d��5,0aJH6g����J��	L�
�BBnj|mjasN(���fsB}�������N*�'�$���>%�����Ax����_+3B�q9�G}��0���SCuG�>�eH�7	'�i��	�A�*����9C_��(�����@�v�oE��A�}�`}9��7{L*��������N�1;g�e���R�!D���C8@v�����?���L�)�u���Ude��^v�g������"gZ��p9������H���\���|6�"!^���es3�����uBq�H������<t�/s�t���C�av���=K�O'"+@����YZ�g &O����+
5���+{�9x"������7"Vq�H����2�p)����2��C�����-�@dm4����D�}n,�()��%��W������'�7o�^���0�����g�c������Dwb��o��FF���������)�Xe�+\�5�>������>�pq��}5�N?Vi�<�0�mb~>:�m��7���Z���Inc/V�c�b����:���������x�e"6
���L��UQ����o��<2��|~aVeA��5�oV%�f���r��( .�^����x����*�T���&����g�������f�����r��m�[�mF��=E�;�g�6����ka3�p�
����V� ��i�gEf����&��_i�cdfJ���j?���gak(@��n��j������2Y�4���~Jm
�gGh(��A�2��b
+J�ga���9TSF!Tp�)���O�(���^�:��f��%��zk�%�U�sm^\�U�y�{R��ar���F��N��������=��A��"�<]��I-�0L�Zlp������>�OE��4���A�o~�ts�nF���f2Y�y�JR��L;����J#at�\**#�[Pi�J;�*��I�-����M�m��:�K6.����e]R���=��������-�E�_XX��5Se�\}�N	��<�-IZ������ \,�]�e����3�s���"�l��-�IS�����-����e'y�.]V�x>��w����2� �1\�������/
���WZ�3��p�/���}5sa������0s�g���������Qna��nc8o���>�u�=��KuR���lYN_���:��uR/��O����k��T�������X��&�~�F�������_v��"I��p�.�E��g�|��`�:�x��q���\mi��a��Z�tiie���������E���(��},�hyZ���!Z��r���8��WH�x����v�t�tE��
���������#_������)��|�����"�w��^��oa�K����w{�}����/`_��7��-��E�;r���M��"����������M�����M|r=W��O.����g)�<L��g)��X�����gM�~����������������e�xv�f�������������P/�^p�z�_D�~�����$����_�?�����?��_���?����3t��2.����`������7$��%zPA�<W"2N����P��D����S>�W���9r>+A�pH��_�����D�D�eK��b���D6������^�m����1@��b��1P��z�l�
	8�&]�Q�YK���"g�JxGr�9��W"*h����R�rc#Jz��8w�`9���Lw��<(���<���	!Mw
�,J���[/���$=md���5{���~�B�wc�x9�s�]�	���CR&��H^���:�������O���[�u���P�LD�3O�H=����j��C/^|�:A?,��D��?+)X��9h�r,h\S-x;�
x�"��j����
�����Q����x�Y;��jjz�����|k�~3�Y� 8B�7����%Y������>����c������5��$�����o������G�Ag�d�W��1�9#���j�2�����e���s�p%�Yb��_���
_�m%�3
8������1�'��*�_%I��!��c���>�\���b��E��2N��?I�.'�O�7���B�Q�v�����z����Z��o�/7��c����6T��������z�6���K?
�����g7�h`�J��Y���V$��,c���-�3
2���S
n������S����`����oE��~t]U8z	r�2���Zp<UG�D��L'�V��l�&K^6�iE
������E~���	$Z���y���3����gs�:�Q$*7����Q��o�^��i�v���O�*�2�)�������64,�-@����O�1.jc�6@��V��
�������64n;����� �96�9T��S^>�96�q������q�<2��C����?+Ry%�p5{��@$��e=}6�EKm�dh\���h1��R��5�s;�� ����fSm�w���$�Y��*,���I��q�������+I��p?+)
pZ]�G�����"W����
m�zLpH���E��Z�`6VI]�M�M
hv2�J�E�����o.�d����q����;#t���fh!"��V$`�9�����3�	�q�����h����y
I����-)�kG������ �>�����������7^����Z+%)��I�^����IS �3-Dd|$	���'�x�DK������0�*,m@*�#�8spN�V$�G:Y���i�W=�c��oA��	C@�����&'��W�}��45�Syy�6YPa�T>���foh0�2��`X�`�;�$�9=����+O_��������bjz�+S�H����2������[���{.���lL�es.��=���!��6��d��5koC���� �:qy���$��H��������g�����SU9.'T���H�%$��6lK.�B����t)�hfEq�`���dR�M��>T��i3� uC��!�M��Tz�����o5�\C�~�����(�*�M�9��6!���T�lq�4mVH,�=�X8#�����<�J1p>v�#V4�p�+p�,�>��������/�3���{5�K1�������>�]�����d�i�����13��W6�����V�*B0����6�{����kE`��^~��c,_��Q�lps���8B����,8s��T�P&�N���D�v��_���]���:b���TdD�����	�%P0H?�2�Q���N�,���1t1��G�V&xwp��Es;g&E�����%�XO=Z�����3���	����% k	�%���A��L�eq4Yx=gk	Q�}jI��8x���ggH�Z|���	%2s�d3^����;���j}3XxK����M��.%�������J�����F��C���_���<B������a������L6]2�r�����,�$�a�M�J�HstR-�>
h�B�Nk�)^6��Zy0kkP$sUj"���b��H��6-i�b�}v$��f@��Z��uiE��4��0mZ��;��m��M�8_��f��FDf�4�����1F�b��|e+����'����_e���/��������5�/^�}I��_���H�_���S���Q��)H��3'"6h?�!�/�����$�IK���$�	����=�0b��6r�~�~��m9"|�~g?��:#)�%�v��+�4����ox��}�����N?B���S��L���8���O�� ��]�	\���x]v����A���H�{���V������nk�-d���,����������,H�����{����RS�Z��it��"V�$�L��!�q0~����&5_��K��X��N�vS*�5���2����+I���X{��/�������v�T����d��"�>;��A0���|�(HA����0X����E���2�dv+�������Fh������t����VI1$ �G���L�g�H1��rX�eEX�@���d�������/�?�c��]���L5�'���I�$���wO�����9m�������gGRg�Z�m=aa�"���i���������	h x�~��-V�
os������@60z\�*s����q��@<�9:�G����x6�����C
��r�����X\���T��X(tEm�����h��}��o�'8+���t/���������%�j�lA�Eh�{}���X���LD���t
}5^��R!�0��),�����5��oht�&��w�P%�?������9MW���\G��v��
�
4�<A�+
����25^mH
��`�D�}
��3hM\�����u���|�L�c�
8'aC
,�s�m�l�g�%�`>;��P��`�5����q!!��R>�{��-2�wVO0���~���@p�6���,��&����+-d�����6|���8���������g�,@D>S�3(J85���X�����[@�Sv6�o����m��"($���_Vb|�����JQO��Vl��k��M�P��z�1C��B�d��t/z���\Q��z%{����O�����G&"��4���{���Du��d}O0��^zh�gEQc��eUa��M���?�`��������
9Gz�`C�fT�
8�+�{`��C���h�s��hD�i��uH�2Y��{���4�H�"�\����
�~_��-%�p6�����t_�v����+�F�)�0,	�,���\YaF�Ik�-F�j�g#"{����[�O`�&�����5�o���J��7-�ms}T�0Q���O����/����	�g�z��&��L�x�����2���;c	8	4����`o�k;4"��u��{�����	x��_�g��"��Sq1���k��[����/~xS$�:�N����|6�w��,(B���ESp�}��'����h������.D����H�C^�?����	H��TmX�lL�i~5B�����FT�x�T|.m��5GO`E�-�����5�	�X���Z�����8	]gFw4$H�SE3� ��0�����$���E�'M�8f���
�K������������R��3l4�TjE�D�	�<���
�c�6,�����pQeuV}�W�����W\>n=l-j�#�bx
kw�>�[):�bG������Z�{
lf��lgJ���"$v1�1%6G�#!E��8�o�$u���<R���+c�[�S�a�����|����Z�d�]����6�\z�����'�oL�k�����>�2V�={��lv�Y����&=|N	^�vJ=�Ye�l=QYn����jGM�����X$��c
��g��������"��	�_�2!�U��H(���
� ����K=f�y�adx� �m��nFQTm6��q;Sr�	��-�p�\!V���.��z�l+�%�J�������3)o�:
w?�}��Z���.�7V���<�ic���7��{�����Ul�����G�}B`��:���N�@m�����6*��$�h?��d�"7�XqH4"����4���OU�}HLI�w����C���;�c18���s�y}�*O�J���e��������V����\d_u��r�o������&�2�.(DQpi�2Ti�_���2������.�D"s�1�h�e=���B��-$���c����\7���o��KV���
����I�����z�>��&c��V!�)�������*����k7�s����4��M `�"�R�Y`�b<fg('T�j�]�����#b�P�knl��_�s�6��
��x$���e��@L������w������K��|oD?;
�A���I���lH2��v�S�{�(wTK��c(���3�����7:HQ��P���2�#D��+Wdiz��p2��"'���Sn<�o!%�REd��'�i
��b�T�?%�Z [.�i�$���]h-�?R��B�6��]���6*AW�
HL��\gC���?/$��% &��-h�C���l$��]�n_�;�������������HrG�Sv�"9y���H~�1I��H#���&��4F V2e�D�j��2��[��k�����Q�
�}3}�|i����PQ�&o�������(���B�_��:u#��J�n �Q�I�$Y"��S��US�bB��� �vA	@�_�����SV$22��(����Ce�tQ��OC��`�U��6
������>�����F�<���69DS�x�+et$sYu�6v�Q&�v"a��g����Qh;��9��r�1x��&����K�2nLog�����2s�- ��~���A��X^	�.���^��E"Q�!�bv�:��H�@|3�V"64,(��#�f`�U�[�Bt�Aq(&��H��Ej������D��*���N����)��W�a��u�+qs���$��0E�E�L�rl�a*��8C�*��.|�����Y	F�n����r�Wl(����}N��k��,�K��8�I����fJ�:m 1�R��wM���#P��M�i�������Y�m���QnL��p���6$��}�������l�4���5�I������rn"���
��2�kk��yb��Em�����vEPLM^�7q�j���H��5/�0P��q�E��Y��u�����u����,���\E^�����+(��tO[5�U�>��LzR��I�8kp�O��� 0Q���-U����X�R���}r������Kb�({3l(�g���f�3)T��[���c�)#�=Lw�{>^�Kcz�N�}�Sd����a�����['�l�5�������t@��Si����jhdx��+��.�-:uf���9�-�G��m�(�$��3��,��S`>�3$�E�./����=����p�r�9m�������8O��~���`!�����z���[$�
'V^"@��P7^�
���Y%��t@/������Vl$Fq���P@.6��V����@��O�)�{��J���+W@��������f�~��FA������|�����_�D����u���R����7
���5p�u�:�)=�iO�5�\96v���������a_���j�����p^��#`�
']�S��$�����g�_e1�|tN�A���;�$��N���%�3	�9�!|X=-.W�`�|��N����LH�����!��)���+�A��0{���b��_�f"�y��7�4��bW$�F�T��z$�/�d���'�m��*�w������IDp1e]���mWB4�%���Y?K����+ �����F����s�EyXM��+���&K?6������	�F����DP6����!���?/"��b2;��pE���2�8�y�Qi��p1f��O�pJ�8�9���`*����d$���e���N�Y��g>/X
&�6��P7R��$��q���I�54���{)����3����m(��%��^aN��1�����Fl>l����E�3��������iF��M?"��C�^K�/�����Z���<���u]��J�b5O-�8h�K�6�S'G���>����q���6�G�������]��d�KIZ����#=s��|6��]���1���7��$�������@19�����,&�`��h�:N5]�����	'���\�b���������AX�������p�� G�l��.�x��cM���@D�p+q��j���%$@�$WU��zPu������^����vuCp�(k��#�+r	�J�D���2���w�PXD�����r�4�yJ�}j�#e�����x@�����4�Hq�m N�x��3s$�d���~��P��l?����Am�W'��+Pq�.��e�)�oY�����ldU����EG�T��5]�>9G��/���F���y#Yt��E��{��,�y~5T��;���%�Q�\7��u'K��m\�F/im�JK��;t�Q���&wX� ��{5�j����G��F>,�
�w����Q}�Q��Q`�������(�~i&@�z`\z��]g�������Qw�^D�/��A�v����*��/4X�����
{vQ_���;��Ez�.�Kb2	��}}���3�n�
����n�2	uy�Z��`%�@��=�x7�c�DQ��z�Hc�j'w4��r��;@�*�,D��7���88t���
�Di���s��#Ql�u5|�
#�jE"��F������J
/�N��|!�i�:��F5A��&�3�v��,3Q �4�����lGRe����Y���M$2^K��a���K�
��<W��MM�<�;�D�����4�OCj;�)��|E�!&a��f3	���baP5[,L���Ybes}>DDa���U���L$X������\�%V%����Y�;*�����J��~)[����;4��#.��m@knc�+��������q�4�5�������v���#u�!����X�UM�y7=���#��F-�j�.@���>�z�4
.|�z���p�)
4
��&�����v��P��f�T����	��E�\_��~\��uM*�Y�T+�@��L�63��"
c�A�v���d"�����ax�����|��@�h���Z��`c����2���������i��ik�AoZI	�&���������	)�@%�<���a�z��@��;s$F����]�Q���x�I�~�"v[L
������g�(��������������|��D��C�U��u�%n#�CT���$�������tq'm&%�5��5��PY�:Y8F'bw�6�]d�[lM7���j�%S��gd-�gU�G��J�O�#Q��>o����q�{"�o.�(����c�������.�IjW�e��T��z9��z�`��$\A(/,�a������Fh�i�+���6:o(�c����+�4y#���{2������R��r��Y:�q�0�Z_&���N��I�:���!�53&�y�f������8@��F�6��D,��� {`��K���~�/�N�dY�Q2~��
;�b�\����59�qpWoy3w:n�[��WfV�]BG��P�����;�����Kk��}�}I��d��|��~P&���}��~(U�[�#����w��"I�*kP^�*�T�I�\k�=e�$�~%l�k�j�	�$���k^	�������&l�_������������������R������_^K2��o�W���W�y�+ �+���8�v���t�t��^W4�nI�W�ZD����}����d��p�ry3I�S�VF���U����ei$���5�+���nk1�{E�q���D��E��I/0dl�����F4,ux%}�(l���^��[��|v�$�""*,U��������d��������`�����YY�@y���l,��%U��	�����wf �����,�K����;M���}t��0���T��|aU>���d6&���@��<�j?��D��%g�u~&/��#Mv�@���
J�kM}y�����}Nd���7���E������7�j`��U��8IU���(�����Jc�J�%9��D�>������*W�6g��zv$*�7!y;'���4���\Uq�RVd����}%Wn�DfM7�2mi�'�fJIJ�����"Cv��nhv��DP��&Z�
-0�������" %XS������9��$��jMK���f����[�����,���RM)�hJ74;>�\�^�)���������Y5�E%SS�K���%��������R}*���V�����Lm3k*(����i�,�j�A����"V��v����&;3��j^
hI7�G�������Y
2M�M+��4)�UK����1Y�
Mn�f�j���|^L��m�@&���n�*3=���cwD���,Y�#����Y�1li?���-]
��`K
����0��r#;�����>�E{����r�C�Nw����K.�E��!&�.��3Y��H:�9�E�L��?������E��YA��;*�������l6eG��^���*��UM��6srt��HAz�{�{�
7o	`5_O�*�{OVu�S�F�T�Vu��#gE�:���8��fyR�UM�EwG��T�s��!��~3�z+��zUVj����j	f���a����\T~E
�����:P5aT��n�YU����4mfU����w0�Yrs���*r�4�%?c�����yc�<UM���N5�4��,�6�����F���-����u`�����(�iVa��B7�m��
��#��S5����@�2`�h�>o$	��q-�;�����yw��������A�a�������z�4����7 ���A���m�=	���
��=�v&��6��W:�l�@�-�:��TBR�[��z�s�E[�����(�?sk�L�,����
����ycv��)��hF�����/�S�5wjoL���\g�>iwN��|(|��B����=D����E^H�kD���:����#��*2��x1_O90V��83B���H-�WW�|�h��	@Gq������7"mp7g���X��T�&	-������M��������uA��Uc��K_��G~	��G�r�C"Y#Ar���%+��
6�SG�n���G�*����u����}�����1
b!	}hK&���R
F�<��u5E�S�����w.�^v@�Vsy��a����������uo\��Kz����rYW���������H�'��W���z&��K�������������S��h�E���J��*�X&$i-��FN�34�������q�}�[�h���	����{�?:/��H���Qe����9�9��D��;A����Y����/d����5�<B^�k��8��=������@�����"���^��~A^��p1W�]��[*�;�BW��|nj�pIxWB���&:4�eG�WI�"�C#����0�lQ3G��i�'�Mh��� �|��>GT����V���>��.W��L$�7'�H�Vm��`��E�#��?����]o����7�V$�a�N��
�,���eF����b�1w�3���
����Q���1!)[���d\�Z�����uI���8.Y\l,��^r�#��6�X�X��l���z6c��l����dsJ��$��s�->4�n$K�~�6��$	���� ��%'�?W����I)��,��G[l`���L���6�Z�@D����M���:��m	�2�<Z%UX}yx������:.������$1�x|5�����u.�0�-�����T�FG5�\FE1���]S���t&Ic^T�
���w�"�d)``O~��@��"PWvF~���Hf&�Ji��kk��h�Wp�:��X��o:c4��+ ������AM�����h��v��#%zTao����J@������@�lsC�I��y#����u���0�F�c���#>w&�U�/�`�uC%���������I��������U�GQ����&�g���Jl%��4x����{�a�>���������/4�mC��Y���9���g�dL$���0Z��;^�R����1����kr2���H�����Y6�E�t	u����p6_}��!d^{�!F��`�������d��;KRm��[J��&��de�$`�Q��.��(�4���7�6�9��'M���/<{Z$�Eg2j��"3�HC�yF�r����	� �Ps{���6����
��������&�\����}
�?{�������r+�#9��.��_y�������cw��={Csv�o��@�T����z����~��qu��h#v�����p�s_H���eQ�����$]j���wr�4�Wv���=	.�f|�����,�����TO���'��u���F�aB�9�Kn|���'&�8�I�
�9.2��B��{����X��	�Te{e����mH*�JV�FW�eH��	��V,���!�Sv��,�����:�e�P'��=X�����f��s������e�H���.W8q�3@VE�� ��t��;�^��"IF5]�?�~�������)�6"*����-��L�/��%9�`�y�9cd�3ch��0�/����T#���eo7��4_��S���N��i��tK-��'���,���r����O;��>S@���^I��f�zkNjO|��y�X��)�N��-3+@]��|&�L�/��j�gkT�iP6�B����G��|~��m-����[z���
�#������6ed�:��T+?�d�B�8����Y���7���Ds4������)���VA�7��1:	t�{���He�92�D�."����
w2�&�����;��o�5t
6�-1!��eJ����!wR73���
���/��*����/�[aeC����oR���E�p	�Im���t����K������h����q�G���D�9����a9fj�HLH����.�>�����M����0�����9�"j�e�p~k�nGiL�cN_��Z��*C���2���������1:$d��\�|2C�n���,o�(����*_n�|�\e�~#����yh������s��$�^��&?�E5��$Q�y����1�g�L�u9)@��l���X\��"�c����,�r��;����
Yz�^��^�3��V�������knL�_��K�/��
,������Q����MVA��Y�����ff����E��E�	�v���V���:>�0 ��mI�tb)u#�����'�,���k�E�s���L��x�������@~���?�i��S�������w�,���F��}=����x��^aUp�`����z%`B��J&����J������v����^nRLg.��n��+��G{I��Ud$����0��N�-BI����u+�~�.K�N�&;�0�����(I��Dd�Q�l����m���9�w���f��G,4���"�*d=��uj���}���a
���19=YA���_����5��d�&_��n`��AR��JI�l��KL�dg04���;Y_H��!#��Q����)�e�E������I��|����!	����[�����]�FV�64����P�w�����i�X�,�eS�|���z<��t��wDw{[�N���
3�*-����\�j�U�]t��|����������>m9k��YJky�����M�����f���L������v��<�n�%
o��I�o��]�+����+�������Ll��Z�=`��a����������}&1!l�@�/jp/��l���l������?���_��t�� G"�s�W��.�~
endstream
endobj
5 0 obj
   802401
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 A;�&�TB�PA:6
C����&��=����>DPe�Z���Rh�D�-[
endstream
endobj
80 0 obj
   60
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
0����""R������;2�;�nFEP��%gx����l-.�4
endstream
endobj
82 0 obj
   49
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����S1��YPU�4�w�Q
"�����{�*9��9`F�������.�
endstream
endobj
84 0 obj
   61
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ���
���;���P�X!$�s����.q/���;"Eu���Z���,[
endstream
endobj
86 0 obj
   58
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���Q'q1���D3��9��D�*�������7D<�f4{
endstream
endobj
88 0 obj
   48
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���>@��D����$pG8Cw��]f�x��e���K%S��4S
endstream
endobj
90 0 obj
   52
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������_��������o���8���?~��/$�o������z�p�_���Y�0�
endstream
endobj
92 0 obj
   58
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
0���9_!�D�H��]Br�����M7(�"�J�f��}��3�
endstream
endobj
94 0 obj
   52
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@���;���P�A����f"�f8�p����?EH\��6���4
endstream
endobj
96 0 obj
   50
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��! @Q���H�d2LGr�w��W�akU1��E$���1�n
Uw2/
endstream
endobj
98 0 obj
   58
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
@���N����M��A@�)B�p��]��7������F4�
endstream
endobj
100 0 obj
   47
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0C��_���899t)�M!���D�Y��{��sp�V�5��+>�
4
endstream
endobj
102 0 obj
   53
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��;T3
IU
i�)��={sY�{�����91��K~��zW��L1�
endstream
endobj
104 0 obj
   59
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 @��+%�)BB$z��p�Ek���{��;eT9g��zG$���>vL2�
endstream
endobj
106 0 obj
   55
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
 ������D�|��v�c$p'�{����i�*����f��9<��4_
endstream
endobj
108 0 obj
   51
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 E����0Ge!(d�
�'/�dz��*������Hk�3���=�07
endstream
endobj
110 0 obj
   57
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0����78)"��*dH"�k�jK����w
{soD�#>��3�
endstream
endobj
112 0 obj
   52
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���MGG9L-$�!tcF����|�� �f��DT��4O
endstream
endobj
114 0 obj
   49
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��9
 ����:�����RD���
��*�9����T���������t�1
endstream
endobj
116 0 obj
   55
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�!
 @����`Y�F��0�a���5����w� ���0�k��	�����L(�1;
endstream
endobj
118 0 obj
   60
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������g���x����O���{�����?����o���G�@R@�,3�
endstream
endobj
120 0 obj
   51
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ��3�Xf�`!)D����/^}c@��6'����@���;f"��W����<Of0o
endstream
endobj
122 0 obj
   59
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�����:ARLm�I��0��a��v������GUO�IT2W
endstream
endobj
124 0 obj
   55
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0����BRZ���\��[����2��{w���FI���|��4
endstream
endobj
126 0 obj
   52
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ������������CA|�����^X+���
"��ps��;���=m�/S
endstream
endobj
128 0 obj
   59
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	@C�����ED�B���/��w�yv����d����47
endstream
endobj
130 0 obj
   50
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0����*�p�.I���;d2�9�*V^%��+�G��\��4
endstream
endobj
132 0 obj
   50
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��	 @�����<7F3t	��������9����������A�����<��0S
endstream
endobj
134 0 obj
   58
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0����X����H)^uI.G�d�*p�K�^DX�s��Ag?g�}��3�
endstream
endobj
136 0 obj
   53
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���N|��8�"��Z�!C�@��"���@��0��?3�&s�p�3/
endstream
endobj
138 0 obj
   54
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��:����
EP���!$��L�����"2_aD(�U������<v.�
endstream
endobj
140 0 obj
   59
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0��;!�"E��
!�K���L��U����#���?�~��3�
endstream
endobj
142 0 obj
   51
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��	0������x�������BBR�Dp���T�M&���"�1����3s
endstream
endobj
144 0 obj
   51
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 A����kF H��� H�{�7�����9��Z)�PJn����5T�y,�
endstream
endobj
146 0 obj
   60
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	@��[4461����9�Q��n3���D8��=|t?����J4K
endstream
endobj
148 0 obj
   51
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ������o("N�)b�c.��srf{���Z&%����D��}z3k
endstream
endobj
150 0 obj
   56
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U�Qk�0����eLhbM��C[(c��m�!�`�a$�c�����c����s	��( X��NB`�ZFe���2hd�l��d�]���5>'�7c����vrT�4�����5�)_������d�D[+�s�\jl�$�g���3�Az����Y.8]�	��'���X2����E%�=B�	����;�Cu�WK,�z}��{28w���q@Y�5e�3:��wCHS����Q�jOS��)]wR��k��h�vX�3OdT�Z��O�[p/��2�m?���z4��xo�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 509
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-�]H�Q����^L��D4�.���B(�7�
�
+$R3�4
Ec��
Nf-T�� )AM�h1e����^���!b�����1��9��{c��Fc�3c,[��1�1I���y��L����YY���Y�[��e�Y��Wo�
��z,�Y�x'����?�F��=+��e�uy�K6��9����X���l������U����#�&ewP�����r�]���.����W>��#�s��?�����l��Z��+'�������S��tT�����o��^����J��J�W��@�R����_.�r�U���#'m�MN��(�d�p���5E/�W��v�^'��C/�Pq�^�b�c�^!z��������P@�;���k[����v��@�z�����Cz=����d�/zqZ�w_���4�k�^��(����+�^��u�^��j�� �������^�����/��2{�������+����{�g��RzqC�=�b��5zqC>����s�]
���-��lnu�e�1����
endstream
endobj
startxref
842891
%%EOF
mac-mini-result-4.csvtext/csv; charset=us-asciiDownload
mac-mini-result-4.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����-��8�S�����w���=��������N7l����A�R������"�+S?EQU�����U��_?��������}?��������7_��?o_������?����������yb��/�n_��k���v������{���&�='��>%�9��9h$ngN����D��x_9h$^wN����R�6%nS�^s"�H�Sb�k�!����"��'�=S�}�$�H:s��S�9����\k�Ti=�Y�*;�j'����+%D�SS@$��HiD#��9h$"��4���F���:��Mjs�Z}r"�H��r�F���6��]gN����"�O��sn���>�v��������|�>�2lt����h�9��s�q-��H���&�sG�S?���Sk�5G4'���T�I|�,>}j�%;����R���@��c�@)�O�}I
-{J��f�@#u���;���Z#5m����6+�H
U���H�kt(��;+��_#�/�5��P�Y�F�6����9-4���4n���v��t��cN�s�s��\}}�6.J�,I�`��r4���,E�P��24���,A�@���3���,=�0���3���,9� ��r3���,5���23���,1�������}��<<�����y�$%��$'yl�')�C�>���507��4.G�Pz�#%
�>*��1��<����c�Hj�����3Y�\���6�%
�>����D�s��|�9�i���x������H�9�}�g���s>9d�����?�u���}�jb��gg�?���~<t}_w-_��@P���
x7>��!|����|o��q#L�j���D����]��*��^`�x_�����{�oG�a{���p��w�k0A�NAt��o����s���}����m���?�O�WI��1�z&>�>�QKZ�_�k��G~��;��]������K��*����d��O�OH�L$I9�����!�h����m9�*����VR�������n�Zv��]���}>e�uIA����Z����i�z�A������kL���2h5��|��h���Fy��v��:
~]����&ig�^s����t��v����"�����s��^=H����[s�.�J�"O�"����P��))�?=?�.Db�?}���I���"�����|�a��htS�/{�w�Y:[<\L���f�nr�J�2���.�Q6��Pe1�b&��z�[:���\O���1���L|�fz���	�6������+�������<���?�[�w}������px����Z����Q��j{���Q�{��l�j�>�iJ~T*	
G��c:qU������O��*1��LB�mR��9��6�|W��[���F
=Ur�hg>���u���4�0vS�O�z��Y
����#�����T��`"����m���~��PNG�]��P�-#S��L�f�L�z�V�>.��HP?7��
��N��G��]�nO@�"�g%>p�f\�w�>aSF�~����.N�������YewY���������|��z����|��=��N�k�4?M�����n|:�@�[{2����J0��:��D�]��Jh���]2i��	�����;��T{�]�2Z���N8!)[��u�����o��#�~�c~��7�oi�z�=��J�2��2�<�>��|@���Sf"UI�L������x�������LWw>�8*�YM�N"�e��A����`��J��hx�8�NU%�����������Fo(�a��K�!��B8���1�U)B*������o��=9|�(����d�:����1�=�J�}/�it�xi�G�>Q
���n�]o�k�i��ih[���R�`�e��3x����3��k3��BY���q������cXQ�Ox ������G��;��3j��F�n �����;4i4�b�����+aj��1d�]o���l�?c����$hbq����t�U��:|�����'I�qYes��^kCs�<��X���!����_0cb�K8����.w{d���G ��u�
?B��5�d����|�����	tP��=n�
�Y�<{D��Y����Q�k6	c����-O|��������z��0;T�]���?KE�<������ou�-������w1�L�_���xB�an��2��hB��K�H_P^t�Y����!�MD��A��!!~���e�X�oJ���G�~0\?3�-y�Of����k����w�fqv7�A���
rH{l��	�6t���������0�����4�&\<5��:�b�Id�?������W�N .NH�:�	x9����1����S����<�L@�~��A���^���&����O5�:��?��}.:n�k���X�[��#���a��]-����������9M8[&����9�
������ME>5!(��Z��`x��S�ihx����w4���
l:��S���Y��1M~�o�F7���3����@����x�%t�c�Hv�����Y��q?����*J�]0;�@�����r@�'�?�nn�
����������,-���������F��b:c3�/���&k��������X%�g�B4o/8�"S[��������A�q=�%���':Wnr�U�&��P�7�
UT�������HGbx��N�;�t�g���&�����W��gzx�3F���%�����xluy�}e�����m"��Y��\�����f�e�^}���>�n�Y\��A�]���V����K�.#���E���h���0P]�>wy���|
�����1��N&Q�1�$�Y�@����o����������`���6�r��!U����.�5��y&�~'d���f�^k��	�d6��k�G&���e7�����������gt�����'Dv-��>����]vz������f���Y�m����W�L|�U��>?:6����:��-<\&\�Nyl\��|Il!��!�[Wt���20]W�2[;���&xl\��	�Yj�������nTu���fLp�T���������Kr!����/�.��Z������Z��@'�����4f�������<k�%��b�"��3j����dq�a�b�8�O�o��i
�
|����]�}#���@r��8P�����L��ol��(�V�KxTw�s`�c&�YT���oU}@��B����6������~�@3� ZT����x��w%v���N�6�h.d�8R�1��$���*��=��w������;�~��i��;Rc/L�uL�����L�i��5&�L���������:se�O�����se��b�P��m4����aZ��N�:Z��se�>JR1��uDt���$"��BTl�@��YCa���*��.��R)c�n�E�>�.C���7q�2]E��+�$�1 tj������D�N�U`�0��xH��X�`)��xf����AQ��q=���`����{�|fS��O����b@S�|�k���5��H���h/U�2Vd����U��ve����&Gh��b;�'t��l��x:Y�0�!�I��2r����$wV�e���A�.biz����U�m
���������c[���
2>w���e��#X�Wr���������E7xaS#���1L�9p��p(W����o� �1L_�R=��B O=zZ��;���`��3��g����i��������Z��~�����1%(#��G��8"q<��_�al#. �X�KlelA�&�������S���\���;J���-���|�����z�uq���������OG.�����XA�,�j����G���-Q�34��o�`JP����/��L�;��|`��e�&��
�1��C�pL;~�)�/��F��������h������d�0<Q#_��>mXi ��]��s�d0����������w�#�����^�)Ai�_�Q��h:L��J����<j�]�l`i�N�f���h�\`=��Y�5�|f2�1j/P�h�p�����t>�!������$V��u���n�H-��S�������@�Z�	}�O�;~W�H�k�ISomt��W�W�x�����i���'f������Y���2�����������W�Z�S�z|`cMv����}%K�L���a�GH'f<F5�����z-��1�,�t�3��p�3���lgJ����?�/�#d����cV��/��g������eI�Nz_�	|g�3���|2a�+'I?�a��|����B�[V����ez�/�y9�#�K���
�F��v_�������z�[��A�[j�GN���J�������m��(��*�|��5;
�YO�Y	�>��n�E��'~����|6e5���1�y����e,�IVzV�2���1�BA���Ta���A����D���t%�?a/��dL���B���	�)D'2���qI%��s���~���W��,\S3�\SO������\S|&-��<5����������s�GS���1����s��rD{������1��1��A����1L3��2p�kf`y���>o<�1o�YS,d�(e�r���1��e��'�'l�'f}`;��������E�����������}�O���T6����g�D�����h�|�zT��0!h�4�*u@IIf 5�/�����V)vos��q��������fb@�������$T�'F���P��jfX��$wS�I8����'�iM�����Q����+�����Z��lu��pP-����CeR�<c�
*<T!��P�bI���n2��&c�Y���R�(#��!R��v���I3Cnep��� ������1����W�2.L!��n������2�a�����>pa��� '���l���L����7�vf����:������4"U3�+��o�i�8�|=	k#K�qbJPF��;�S�F��L|�F^d�:�o�����2�n-�����!� 
 ��K`��s+ne,V�Wt���l3a�N���-�n�;��K���cf2�����B�����0z�]�2.��zz�t4�����r��&��a���'1"b����]
�#�k3t���a7 8�9��s��B�����6A�mEg���_vG1�C���[��%�������0,���}ZG&�W����'o��p^�a+*=r��#������<]�
S�3z��|p�����a+�	�']D�Fgx���MLI��������G�������5=�#��v��i���^�F�{l#��BdxJ�c���G"��������`��|�l��MGyl2�����,5y�����1��w%Jw&B7�����	6zi=S�a�|;I�8�PS3#��L�e�����N��hp���U��������a�����&��^�c_�yzK��z�����;d�:�7� P���Z����T;�����6#��%���MX�i�]d����gJ����m��h@��>rU;����]������Q0[�L�,�?D��
M�R���V~o8�����/1���gdJPF�������@Gv��!�y��3~3S�z�����$����e�v��Z���SR�ee[��;���w�����c���A�.������@R��`�k��jwh��Z��4��u���2�o���������DM���������0����z�
�{&P���H� \V���=3,��1�[�	cL���k�u�����g�"�M���J����a�6�1r�LG��2`��|��O�A-��YCG�;h����Ez���3v3dJ�P�di�O*��GrQ�
CK,�����A��|��y��@����
��A}~�!��-gS����g�����o�a�2N��Rd�;-y��:�!��d8;q<v��!a�f��V���|�s��P	���Q:N]W�p��z""���wa��	���W� 3���Y��#$��L�8
�W���?nf��S�����3e�Lv�h���D���� Vf`�A��E1c��NR���_\1uh�`�:3� ��[�-[�����H�
D�w�9�F�Y�1<6]AJ�!����'������o<W5�Yd[P]�����X�f�0�B ��M�E��Ogi�N�O&I��2�b��o��p��8���B�����6�]��>8V�����3H��s`�oT��?]'R&����{����5������a#JW��$C>��z>b�o#t�f�;Mq�J�g��������;���V�p�'�_S�&��0V��u��@��c�����.U�1���O%����j�+5D��XR�����z����������+5��UI�e�h4L���u�3a��29),�d�'�3c�7���<�\��'-*�0��C{>�-�a�5�q6~ ��D?���8i9�tN^Dq&�!���w<�fg���������7cln>��������<`�D6"8�x�b&2D�I����L��u��5>�8zl�y�r��#��1����^:c�i_���T�)K�2����\���q�+�8������ �&���)�2���D��}�u�HQ���������������'��5=V��+�h0��/�!���<�+���%s����(��D���X���a������I�dl�dn`u��:qr��G���w��D��*�`���bY5>���Pl\(<�V~W
��o���I�*���X������7*���D�
x��0���.��k�����_+30C��F��8�;{���2b�84r�aef�uMh�����e�������\�<��x�)Auy�1���UW�a�,Y+q*Q!�H��%
�j�Qd��`���G	�GVf�0���8Y��)��Dt_�:�mtI��|bJjfD�Z���`��*���
h��#�\J�}q$��NK�J�u�5��TU���q&� �Y�:�rnY�T0�����3iFp<>c���%�M��^%�/f��5������8�LQ�;?@����),�,2�~�4Mk�0G��9�L�������;��]up�7u���4�J�l�lm�s&�/�
���Z3�ND}!ug������,����x�?Y�b2FxZY�K6�d8l��Qf;��a����xp��q��>7����g����a��8��v�mo�>dqc�����q����0�U�J�1�m��8��#.2h��[�73nF��az�ly�������32������-�[�y4v��9�������7���-��D�	���n����m9��	^�A�	_���J����	#z��6��p"����d�L���Q��P��7~BS�k6�����v��!"�c�f�+�<���2K{�tfadGH�yH���jT�`�G������W����b}la��v(�{�����34T��d�`���3���{�Cz*���&���Bnoo:��������%����&��0�n`o��,f���*�n������L}�n
�
VY�������;'B5j���R����������.hyg&���&�J�������t'��V2����sk��������fkn�;���S�����}�ma<O]3�]��D�2�G��FD���`�Ug�#>���g�jgI�q�N<�]�	���u<34$�k�/����������{�./�����_����L&u���2�MWe�������3��<f�5o��@��=0���W��������~��9A��s20uyD������owfd{�~2�1�;�����Nu���������D|���o���W��[�O�;f�yz��[?�������9"$�4,Y`y`/���|>������n`�h��e=��)	��$��\'|<n�z�>�����8�v�bO�X�>��j0���''78~^)�D��@"�5E��[��31P�V�����1�D��PY�#�:l��GFT��{�f&5��.5e�oL���a)��X����/���`����N�����<�N��3tX��|�������l�	 &�
��+$��Ek�D!�`O`�1����18L\�����C����fB�:
F��{��� P2�	��(��T���c$l'!�+M9A���r���/_w��?���E���
�����c�0�-���k��#H��N��S0<P<I���X��N��������a�e���e�-�3$\��Dhd�R�$��}�&�	ESk�R`E�xW*��f��x�<<�	o�IX�A��������
��.��(�K�2D��	;���h�s�As��������<3�Zf�Vb����s�C
J|��{�7h�f�E����G��2c���y��~i�' 7�}�N����Xl�
s+�|a������a'����������=]fuM��qR�[��1��wZ�s�h��2#��AvB9�q�y��L��%�}��2���ds����a��s1�XI93q�n���]��4���A����]2jgV�7DC��Y�=��f���0�NItmY�][h�����|�����|&J����J��o&�����* SF��#�}���d��0���z�����f�0��+M�
����1�V��CO<��7P(�F�~7���&"���;L��8S��+��o�����f����Z�"�e�,��IY^�z���'3��[��.9���[���������f`��Kw��}\22Q���T�e{�T����{I���.��of#�E�}EW��DQ*�����0����U?t�w���of 6W�~7M��"�p�N�d�zo��1��/4��{�\��Y	�<q�Q>���b�v�����b��7�]��1�O�+�&<{���?���	���\N8��-�o<~�Ks	��DC�~�s
�1� x'Xb��G5��{������(#��_$�������G�9U�z����Z����\V�s�Er��f!Mcbq��1���B�P-����	�6�0q�0/cM%�L(Xo���#��-�UT���,��7H��/���O
n�BB�g8���b:c}��� c_�|m�v��#2��S�w
^w�k`M>_���)$!�������q���~8��{a>�{�m�z�l��g8Vq����h��q�=4*�q'��!=�nZ�8>C��tw,�����|���l��2�xW�a����B7���rb��g�K0���Y^Th1�Xp�sT���>��@he�5�O�	����&
�i����p�I���K�t���/_��)\$B���$o���������OD�T����O������D���p�L�]������|��W��@��_��$�I�D�m����=my;��y��;�����q{J6�+A�.��9 }�v}���1�S>jX2��ZU&Os���|��8!�9�q�	aX�_���7������R��w���I!��:��|�Dy�yL�e�W��j��7��&M�>�[�~&xu�
�y�0�TK��oY]�xh�E�v���>%_5C��d�M�;�o�!I��M
�k�&��4��>������p
�����!CO�������������`�hGl����\f�,���u�W	'\$�2�8q��\iV80������x�;�Oq�����$��� /���1E���k�d
��]p(j�����0�'P����7�g��jk�����S��'�a%=�mZt�L��g2�n�dq`n&b���1�
L�(4�g}����8���kO&g8��V��2�/��%h�������X���u}�0w��,x �%��sp��]�/��u����Y��/9����M���RP?��BP�� N�z����g%��?�����5?�B�G�T��G��f��-��@p�����ivF���e�������7[��AP�&/��6�&��M��L�x�|e�$s�cm�x��e<��p$	Xf���>�D�{��Iw���F���xB3FGl,����d�0V��q����q9��Lh��SGqx`�X����QS�B����eL��K�,;���-��#yJp8�E���r���yc��B��,_�J�����(]>��;�cs�����{|fB�t��-�}���s�����x�@�q&���L
Y�%&����E�s�2Auoa��7��rz@^�w����������������'��(&
��y�����k�=�}W���p�y�Z�����M2��<����3�:��w�������;����z����#g���dY��������H�������{����=�[\�����`�|�q��-�H����Q���~�����?��$�����fB��O���������9���	������}�7P	a�!�C��\��O�L{1�����J(R�Fj���T��jA�G*�HE8&Oi��i����K{�r�?)�{���?)�{�r�?)�{���?#�{����������� O�����$���k�<�w�E�*\�4�H[j������)/q���5�&R��)?7K��r4d�����C��n����U~�%����Qt�h���vcw[C�����������.����O�����/����e�}����_����������^_���S�=�1��X���i;�l��cb:VV�0N�%��ol&�A:y��i��`�Al\R�Y����������f� �:a��^�w"l��O�����rV0��K���F8
�M=����P=����|�C�E?�{�2��~���D�DQ�1�Xc[�7+'�~������<����?�z(�}H���C��@n0&^?+ao�!�;��T /*�G;Y=~L+3.�3c��}A����$�3c�n�
����w�#~V"A��~p�6����������7b]Y\��K�L�A����\�M�B�>�$�|�z��`P�'�3����H�73�y��D�r���j�wb\Ff�^-�G�����S~D:�x�s���K����.}��>��1L���yG��L~[4�~q�+����|�����K�Wg"C����K�����
��������~��i�����)A�G6���������n��a�Z�yG1~0���V�O�	�-2%�*�^�����Bd��'5��_���w��p�Qz�������DD�uM�}3+��g����������'��mY���e�-��2hL����P�O4Db�V��.�
��Z���2?�����/S�J,\���������T��_8x�ML<�TQ<Jn���g����Uc,)#0.<q���T��5���$��uLDL	���*]��j�������:�A(��T��~X��/����%?@��23�Cy�A���~����k�sCP*cF�z>��F���0��t^�NC��|���G�U���	�+#��k���}��W
mJ�a$d�8j-L==-��q
��ZE�Gd������_L��0p���,Iz{a���7��12�(ch�t�������3p��
�U���Qj��CVj12%���'�k��D��/�K�$�Kf����^��1��-k�����L��q��	�������k���w%*�S�aJ��kw%M�@�Lz��
e��f��!��h�Q�1��7��$�3V�Pc7\p�oj�MY��b��;������s����v�������)��@��&����+}�-|�\���d��R`V���^�0�#���2�2�~���{�������A&�/&�Q��/������z;p(y�9�)�L�KG��|�.7�	�`O��b��1A1�,��g���1� 3����1^
b�K�L��P����<���0=�<�1����T�8�c�P�I{�����
��/�[��bd6M#��C��wa>�v�u�=,��c�q�	��I���>��p����w0t]���Cwe]<��|Y������zx�U������Y�P��[��:��


��)�Q]5I�e��(��=��o �a�z��d04]�Cd�]�����q&J��W�+�"Z����G��q�z����A�/�A��$���i}f
D&~t}������r�2�����u��I�?����Y��7���xw�B>�!\���ZYT�G��5�'���la����W\�:4���7��?������Z�u<S{��p���AF�>���5�v��w��t��P��$��L}p��,f�n
�k"�^[���p������*��Q�+oVI��i�t���>"�C����*�+gK3����y����f7�����	"�O`��v0��&Q��������"]��K����]^<,{�p���[{Imi��=����;z����O7n��� ��������3a76o�D�z�G�j��E�^�Dx�&c�s�u}�pt/.�~�[������	�x��(z����	�b��R���{�gb@����9(�wa��Fv3�M� \Rx���wAy�>2��L�A�i�;�\%A�k��1�z���'�><����kF0$EX�'&C�c��o��df��Po�=���d"L�Zx���F��Q����RL)iy��g%s����Q{3c����u�����rI��l������\T����#��c������#���O�?|�����T��3n�$Rt@G���F�b`�� �?S�o�p���&�lO���!h����g�"��/�2�u;�p���L�4�.�_^��fp���0~����Ow�	�����0
�@������n_����X��q�zfp?��l�'-�J�%I_��$������)�#n7�!�%�AH~'B��Y��+<��@�m�D%.Y~��=&c������tO������{Zq&L"y'��r�����o��T��C-����g�z��Pz��a�o�������K�DXg�-(l��K\N&����>��\�B\��G!>��S�i����m�?+�!c>�s��t��$���D�;���c�3����n��+�Z������z�������i!H�3�����Lp�p"�)�@t'~B�U�D�����y�vR����)|�
c�qx#X�L���.�b�f���~��&�<�]��D��+����cmb&��{�Y_�g��,CH6��$x*"r�7���k�ja��)r���{� 1VCZ�q�^D��K7���b���Gs���r�L������ty�t�dz�'�}X�6D���R�3:~1��z�|��,�	���CN�4���������X��<J��~��V��^yx	j�����K��{jb�I&(�`�Rs�(��Z�A�� h���������?�����'F�|�e��-���0��������|�����b�+	��cz6E�Y��Z�Qu������.��U*��~=��S��8����I=pSP����$_bWx{Q�@i����������L<�'��m���H�y��V4z]O�"��|������Y�(?����A/��f"C
n2���])���\f��x5�T�u��P�\=tx��8�	Z�������_A�����N��xs/B�B���)�8� �;��Flz@�5fl������Z1���G?���T�������M7��+c�=}���DAP����#33����Y�S����j�Y	�y�J|Ld����T"���/&�cF����'}��JMw�x���}�L�t�f!
AKm{d��q�q���u��Nw,�Dw���i�KzM���w+|�`������K"���-+vN���oR�b���c���d��D!�7��R\+#�5Q4��d\u[���`���'��Xu�}���i!�M�w~A3X�?�J��1Iv|dR"���O�����6�~k��$����
�%+���}������(��}%Z��Q"W���d�b�����H.L`[��Wu��}�e"�ez�`��&Cbg���{5{�0Mz�{�2�O����;qq� 7��.����4���|">�{����slu�'���6u���v&
s�9,��b�?7K��a�gsm��V1NX+hq�&k%�{%S3SR�7{��Bgv�T�u���F�B����:��w���l��mr��J:C�2c����E������pe����+��P���������DwN@]��o����@�E�<�`�Xi����f����1^3�_�2�1�PO��A{��6��n��rs�y��f�re "��MIE��?�
������H(��"��}���GM��j�����mZ�#`�
�A�fk�W�^�^w>�/�����.���h|Y�iw]k���� *��V� ������aa
	9BM�5_����+�%%�)��fN�������L�������\(�S��skc�G��1��}�h�;
%��n1?��J*����������'� �tK�R)���6�%c?��B�of`�%�f��r|'����Z��v�u���0��:/��;��%��0��.����(��O�/J3J���^���w(�)�#* ���fm:3�~����h��T��1���5rq)<U"Y�A���Z�B?���*1��R6���T>���%`e��������B��}�-�(4W�!\w��!�_>������Q�@'kar��Y	��5��YU%p���������E��3�g��6��D�3����D�T�fB���<�6j���}��x&8�*�~�46�<\�b���g"jn��}����g�)A�����i}vw�L�oF���C9o�� <K
��,��(sx�v���Y|m� �_D��ax�O�!���[H[���rCk�Mk�w�If���/�c������Z��W�C	}�4E��	03��wC%�a���bS6���=�Z����f1���k~x}��W�I�^��Rya�m�����U+������P7���{�_g������f���[��5v�[����K�G��u���|��y�n��xa�4�sv
���?�x}C�����]U_�N��:�7��'�
6{�qu��y�
��w7���P���g�#����N`����6�G&��<\��=����R�'f���B�V(��"A���m����������*����x1��?�\.!���5�q����3c,E��T�G��/��pB�
p�:A.�\�Vb�'���8y�6v�<�(�FQN�|.AD��Z�r�Q���|H��hW�D�?����M���H�8�1k �o�J������7T�GO�D�H�1	�3.��`<�p��4�n��Y�-��^4�E�����p�/�6t2��K*��g��t�����Jjh��s��m�"�P��?3.���L5��3�">����p1�g�����^
�y�r���
����O��/�y'���m%�� 2����y2�qYl�<�^OF&���@�._����="�t}�v,T��]
�Yb����Q����N��>��$R���V�x��ql��Q@�A�
��1'B&*<�\������f�i�4��Sl�1��x��|fsp:���g�r�
�FI�m�DD��=A�{��v�����$��O>w�fhhR1�����n}W"AlA�� u�
R��H8���L��IM���h��:�n��`M�D�����C�P��	��,s��bg|r��48hB��3���r�G[T��%M�&#�����WE�	t��|�L�J�Q��v��0����S�f��-��}�����gX�:A���|��D o�{:��;�f"��]j����%�(>o��K}�.�3Qy���$y!k��aZq����isX�.�K1�X��l�AP�z(�AFT�'����d�x�O
bhi��
����i�r\�o:�,������p	xp6�wr��S���pb����%����cYy��hR�����d�����b)�}��z��9�o�.Ad��	�2�k����_��W/4�_98s%t��|��)�Y Vaq�$�I�
�n�$��$����r��VE8����)���]�X�����Mi���/�)
p(z���	^RB�4�X5bx��,�+�3��%P5_%tL����E���ss{q n0�!�����|��f��i��p����#���uH2����M��n�#���9NG�&��"�x�VT�X<p|{g@��oW��H��|�PL������O3�)����x�%A.���)���;i2R��R�Pt�������`>��6�YNf��
VG����D����.P����h������XG.��3N�������������9b|k�U[�wmO���?�������q�|B4Q"�E���X�C�Xn�������;c+�Lep|��������B��yS���� �?�(�m�?Z��1�xo�[7/?���{8�f#�#��g|���f��w�6f��KV���C�A����#p�����3��N3��~�D$t�V���g�_����)���5v��!��-@yg|�}��M�@n��o^��u7V?��nE��b�_��0'x��+y]��b��6�&���M[�
C�-e�5nf��(P���kT-/��cg�Y���	��x�r���[�e�7�:;w�������{��A�����z�������~B�y~h���&���a�u|W��l����������p;u��z�H��D���$W�5G��a�"�3������H@_���i�D����[B��!Q�8f`G�L��~�LD1����0���VtN#��	�@���a&Hk.#�<���W��'�I���	^qs���J6���8f��z	��zg���X�p�U�:�a� 4y����h���������0"i��&M����	�
���nr�5y����x�0o����+Qus��PuX��]pe���[��������2�M�P��v�-�a� _h#��GF	+���ju)�#\N���T��$M&����U�Rvn������,�eF$�����w&��p�?%-A�/���E����b�Z��J�Sr@8�����������iu��
����,+��]��kWO���p�'�=^s+���'c� "��:wOF1/��	G-i��uHh��(���@."t>�c2����4���k}�'���,.t�%��c�tTu����Y��e������z����&���03�XT\Yp������C������=4�Pd�w�<@M�	�i�f�*��6p���D�����mL�����������3����7��������bZ9�Z���n�������UJ�7,�31�P��$�����"�X��1�vly�}ps
�����U��� ������L�2���]��*�Z���;��.�*f�H�5n�0�CK�V���=��9A\�`����hE~}��C{g���0����K���wx/��W�)��h����k�v	{���2|�X��/=_��]�6^�_���p�kj��R�Z�?V[�x&�M�c���mC�=��
&o;���M��3���	�����Pe5�?�������g@9�w��<���4������%h 7�U��4�d�D�o��V5��8�Xk�������;Yar��=%���.A�H�@��\r ���l�����>���;0/���h�y�C3dNL�yJ�Xo�	�����x�k���m$������{����?#O�#�	y����3��s~=*{��HUj�0���W��B�j��hX���T�"~VB����
\����j���1��`�k�-�%�����j����V<��%����Y���D*���3�P���*����q��������a��P���F��(1�\�9O�jc��a�������k~n���[��s�'!n;������!��g�	�>8��1���U��������5�_�����`F��:�/g��,UT_���Q3�yS�w���M�7���i���f3viuXUq;�S��`�����^�+p���oL9|rF���',�k.��}�@�!R�I.�_�����oN��n�7�|ax���Aqm�=���v�������}�������/��?}}>��_J����W?p>��y��q��rL�jN���Z�#����I��3��Z9O����
�a]�L����gYlA�|�J����fIq��a���16!<A�b����2aV�6n\<�����5J��G����2]��
�5�	���6,\Z�l~�S@��I����nz*6@�#�o��;A�c���e��
rz��,Un�7V������B���XY��`t�G��p�m������
����X�
�C*z���pZ��x�
��6�������`�h���������'����<���3.���zRM)4��)�0�/�]���OE���
���4��Z3D��j��������#r��%�8�����9`�����D��]Rx�A�)� 6	���vkR�*&cG�b+9TL���B�|� v�����@�C�X?�C�J�e>e�������v���2��v�J���I�"�p�B���%u�2r�]cP��u���`.�\��n��>tK�pJ��fB��]������r����r2C�2�.�Y�+bh��
�^��bT�V�*l�GF��6�a1��8pi�C`�>:Qb�i�*�]N�f�]:�����;�wt`n�F��TXu����U���*F�t�
�<�*;�+T��Q2�!Rq��EZ&��|�ga���0j�n��g�w3�>��J�N��dfF<�f����P3K��f�<Q�di���xZ3���I���P0�7�A����n��oZst���v.�]�o���~{-&����;��N�sK�;_������_2vtR_���gh���#���P1	�����m<�`2��s����x�j	�%��D�2� 5�r��-��J*f����=��C�$�P\k���8�w����as������`�h(���JF�/'�JC��g�:���.'�����/j^��V�%c���Q��2��+<��(���Z2�]�a���]�>Q&Iz�~9��U�����X|���9wg��J�T,Y��.�$g�I���2pO���?�o�;���K��l����e�<�t��=_�;�*&U��UY*��j98��_�}��[��'cC��nl]�V��)k'�l����.�����m�;�t���el��YF2_��L��������q�������q#_`���QY=���2����q����O����B.x�V�����j�����_4������/������V��,��V�o�etj`�����`�?oyE�l�=���'`"�0������O�Ru��������:�8�Ol���{?�CQ:��x$r�.@�������,	?NT}$��@~��u�7qa���f����}����{-����
D��]6d����\ ��a�4�2
�fJ��f���R�������{��"�T�}�L���f�����m��6�]�M��������1��� 	�E��4��i�~��d��l-���$�����r��7io
��~�;�&L>+S�<�U�jI��,��O�9����/�I��0cgBy�	�	�@aon�������mbSF�S�$�&�����/T��{��p�`�Y�w�_�1��+qmfZ~�W��85���B�ot�w��i`C��~ Y ��OB�J�X�1x�j����%%��:0���$	��23k����~y��l��oi����W��L\���-S"��I����-���h
�G��t���Q�-�\��tn~_U`�-��lBE���k��^����n��mX����}��]�j���}�`��t��**������b�]kNvI*'W���W*�n S�e������P>��bVGv���qJv��M�����k��	�!	����]Ap�����!:R���q���D2�v9���ed��������]%;����g�!>�)�L�%�+a�(� �#+����q ����n���O�>�����^O��+���sHB��+os)^`�Z�[}'\u�Ov�s�����rn���+"����w��]�
��=��x�u��m����V�U���q���q��6`D�0��h.�$4�b�)��`�ue �J|��B��(�`�8��"�Q<���Cc5F�	#?��b������#6�q���8!�HC��#��	�d	�v�L�	W<��<*���
�x���
������'��~�>�	p�R�fa���D��|GX�K1�/�
���n��(,��9aC���d1�}0��-F��$�Y�O]�P4A�G�'3D����Bz8`@.��pa�e��'#1v�B�v�kf��f�m�/������(X��pE�C8$bK��Glp�Gg�����<����f�!��{u���I��8,�	�W�09�[GK��1eh��s���ph�uQ�>��M�(M@<�����\���3vDc�a�o�	3G��F%�2y�������K���>�)�m}jC>����<ok�h�@�e�%�k'A\#������t��D����+�m��;lU4,�qN���{2����]8�]��\�����w1�pc��	7��<q���|���`�zl�`��N��O0����!V�/�k��"�}Hk���t�>g���kq�|�MX!�o�e5@tm�$�v?���#�����N�[�d?+���mE�d��7����
��1r�37�M���2.�+ ?�S�-��!B;^���w��R�UW
�����{<�9��]�>A�l�d��OX��/��2�9�W^.���������w�V�$��z���`�~,
�PD[��BXuWVa�;����i�3Z�!�CI�G�h���x�~ ����K<~i��&�s����U��Di����3�t��e����
�f�`GK}8��t�
1���A��Q�bh�	�B��?���EgpY���u��k��x2�e�+��u�����	f�V��F�D�(b�+��)6a��U�3,���	S��������~�@��KA[���I����������B@����������[�P�+,���a��n�[����,�����5����fd������u����NL�f�zy���3�����zi�1&�lq�;7�*�q���-���=�U*��?a��8�89�v��/�0�?�]D�m�)��.��Os�)�a�36D[��n�M.MLh���'�Wj���^����3K��6.7����[
	��[m�b�rT�I���{>(?��!�7�:����>u`,8�R�(<|�t�w�Y�G9�y�el�d�kc7�W�N�>;"�w���*n ��Fe��v.�\�>��YA�o���Wg�%1��?�����"��;CO���o\�2����������@�����=���2l�G��a�1����E������@��?�����b��[S��]+?34������+X���{���<R��H�'��@�����%K��2���h:�2���b<y���h�����4%zh������M��{�{L�C=�iQ&������|�>�5�����4
�
 O�	��}�h�������>-����d�>�d�e�a|sG���iQB�N�iQ�)9&B
�����l	JH�K�Oz��F���d��K�YJ��i�'����MzL���!gL�t��
��;�/�TFS���MS�q���q���Z��#�gG��5������gWp�d�C&����������S9G�O�v��*u�9u�sj�R�����
�R�.��
4R���T��jk�#(�^wN��9�xr��,������{��{�S��������(�n���F���9�>R�}Lig��s��#�s��+p������Q{����(��3��D��xg&�����"�hgJ$����F���D��8���s{L:��<��D���r
��)������s"�H�[N�Sn�9����k���}=��T������N��w��I����z�����u�H��j�f��s��s�
1���5� �H��������������{�P���u��;PzG��;PJ�Sj_RC��Rj��;�H:���:8k�H
��n���Z7RCg�;R�:���:8k�H�Kj�u5tp�����u���gN|'�����s-9����\��\=W_������gY��s���x�������R�a<g�?��J���\��0�+��sO��x�������R�a<W���s&�y<g���s��y<g���s��y<g�2�K�jp�w�!�G��64��#m�?>�GZ�}(ic8��|�
���H��<�|9/���4p�(>�Z�
����y��L���#m�>�����s����y������_�f��S�v�-���B�2�c;�[!*��������\53Q��=N5��Q��H���. l��L�
?����'���?P7"��&����D�
��2x�)|�*�:4\Q������� ����ddj&v]t7�����T
��6*n`z=�9��ge
�v%U���������n^��0B����������5����t����*W�|=	���*a�J�S��f��]���8)�,�i�w&(�P�6K�M�Z����0Xu��UPl������Hfs-��9v�;H�s�bJP��|Yq�P��H�]�.�����p�v��D��`�pcc���+��&F�$Af[,��`X����U�T;��yc�����s�������K&&������&�����W�B�p�}�Y��0�+���B[����&�J�m�5�!�3�1��,�^�V)��eA���Kz]t[�oa
��.�M�������D@�CH��]�3W�RT0���	t�u������7D�buq��i��&P���}�������s]�f)1R��;K�5AGs}�s,��*U-�-�j�D$��9�Y��{���u
���D^h������6���v\�TT�C����1A.h�D�����a�ci�S�P�7R��?���T��t�������\&Y��o~�b�g��&'�w%Lp�j@�
�h/���E�[�l�U�OHxf����
��xH��V��������/�}T���_���O�����(�@���A�'�|8JD���^���l{/��]�ld�k�Y���.j�*xyCNT�^<�.
;��'@x�]�[�iX���J1DI����>Kv�N�aG�0>t�M1.u���\o_���V��G�'"CN���U��qC�"8H�}��(C����7�.���~ ?���w,T��t5r��53I�	�"�
�����I8}�L�A��O����������J.]��Xo��M/�W�{����d
�$��6���r8`~h�_U[[T[e3�r-����L	
�n��yi&�~1;�er����U��V&
��4��vkR����w�p�	z{�4u�Mh~�����GQU����VM��o�v�P����=����\7
>%���Y��v&J�*9"94�X�&h���9�"E����m2�'��CnM;�#$�_D�N�G6�@	bdj��3[+P�3�4���O����*������$x��"Za��"������#�j�Q�~���o��������'����J�A�7b����HO�!d&||K��.F�z&��K;+�1�$"���V�xY�G^�9&r�{eD��f$X����)o��xs��]sQ�Fg���u��[o��~;|W��>���Gq������2'k��N����@�Q��u�+�!��m�*������P@��;D�_��#����]	w�d��[��w&�����_#x���?���."R�������"��"�q�x�6r7tK�T�w�F"�8>����������6
��5&�������������l���r����8�(ff�A�.��pI�4m�K����'���1/��y�d�v3�w��P#zu�����Q���!H_q"���U9J���
?��]{��b�dws�v������a�p��l��H��W������H�'!j����S��]�������:*�f���QA�X�-��@�&��U�O�fw��#�c����	�D�}nX��>m�����������w&��i��by���K���;��������%�Y�?� ���s ���<z`����]1E>�+w�yj�)j��>��O�.XaA��o9�*C�R��/���mL�6:���7lK>�`��3���o��V�T5�������0���.��}'�p"���mwx�q���a���J��&�8����V}1�E2��(z��{�8�A{\[sw�_{!�p*�����#|�$���[��
�=%f��
	�t���=<`�����4��l�|�>4a�lGo���%g���R��	�e����j��^��t�H��p�������l��s�tV��w���.�_��Xbw����n������P��>�aIxj+>��%������?MZB`���W�a{B�����3��W6:�.���������S�Lx�W�$g�//�qj���C|�u0�le�b�r��
���f��(vy���) �\~���n�
xX��1�Q-a�:lX�l����V�C��;7�[p�t&
0Vp.FK1��+�:f���(P,Q'ozB�X�Vw��u����/�ae����/f��$c��f��H8�f`�.z4xSs��p�NLQ;�T�\����K�5b���]K����3a9�J���)�)C�O����P��F�R�����^��Ko�LL;o�4�5! |�C�.�o$L�t��L�0�|�K��a�.J,�_�L{y���@�Fl��9������X��M�1��rR���,�K!|th�xaK��&��}���E/�D��j�����J��9��d�n��t�O��m[�?o@O����R��}��>�c;�`�we�6M�*�D	��.�������8C��a�#. ���W���l��
��4N���:Z�:xe�����T��u/����|��rR�S��>��]�N_\mw�S�`�B�Z��d[����&.����|��dx!�6���s�
�0��"���5>���%���n�5��w���Jda�g,*����!@�����)l�'t����1 t0^�U�D0;REl#]h:xe����$�:�����v��1-�P��v�O(ak'C��26t����!�I�2r�P��$����L
���]������W9*�L8x���v��,���dJP�����K�W��6�����"i-����Iso�����M+g���5_�^���+x�z����8x������wL%=�R�5�&��>�f
q@eM6��1�|�{JL	����0��2��g�R4J#���oe����=��`�tY�S���N�o��$�������B��a���YMDL	�P���YS.|���XA����Zy{T����Gd�K������:F�����N43�����}�36��u2z��G�#S�#^l�\��O�����(��A�'�1wX�����q�f���ra5c.$
�2��Brh9���������t��]bJPVc��6���%�6���bS��G��kja�����A'�����4+����L�0F��
��]���8���jbJ�X�^�j�[$RKs�T?BH;������eB_76�
�+S$�5�dWom\��o�X��3G��@gj�����d�����o�E�U����]����"�8T����0�d��C;,y2ezSk��r�������9�p�Q���22������Y����?�6N�8n����u�����������h�#�G�F�%5:���k ��U�D`~S����c0�$��b�e�l��g$��7�����qo���BE9�#�K���
�F��v=������:4��5a�9�\�K�B�r\>u���M0{.N�X��`t��B���z�][v�[���X/����JU����D����h���'��K��1�'s[{�Q?3�8����]
�U��'���cA>��V���-�?a��"���n����a�P��g6�d���A����D��-t'�?a�����6�shu�&P��(�R�%}���k���6�^��f�Z���z6!����zZ�)�%��4W�~1��5��q�S�Sdja�*�5��!��H����ibl���Z�4��*G�faV�
�r��Dq�0fW}��zi#��~1�]@��1�O��
�3a6�%�iY	LDIMMoo�>p�l�g%9r�����h�&l�{)�S��0��IXW�=������������X�()�������R\������{������;\�O2@��aqb4|��:�f�_Y{
7E�D�ja�����0M*���p����*z_�lDMtT�:�I�R���zx�Q!*�"Br��,�T~��f��3�O'���8�%]���-0�>�,��#ifh����6�T�P�C��
���T��e\�B"���)�qne����Z��Apa��� [�pV�=�4�#+n!�%n��,��9�:5n9�S6�O�H����_>�M��0�q~�V��'�e������:|02�f��W/a��U��s|����Rz�a-�����qC.A@$��n8�
GT����Ss���������6���r�V������)�q�g�L�����Q!�q�R�I�1*�o�(5>Zw�����jk.��A]�-�`���3B�F�2h�1�s3���a7 ���9�3r���{�6A�mEg�
v
�x����Q�_U�D��q�KP`E[Y��ol��O�(���a�p�h���.�`�VT��q�G�5,Sce�1��b_�sff`�>�7b�-�b�0x1D�n�D�{��������!�]��~��9��[Q�-8$#c���nG��f#�"~F�v0��.D���=���$�������7��������#����,����b��S|�p����;!��E}f2~6�d����5��W�|���jjf$���L� �9l��������U�����u?��Z�s?�_AI/	_�.����`m�`fm������?|�������3%���~<\��=V��V���c�����B��Y�A��y���@��%����\�<F0�i���)��=
&+�OG%&K�g%��8,q\��i���o�������J�`���@i�)A�#v��u�����RTM���������v���;7����H��	�A��}���(D�2�*� 
�/e��8p�9�a����mNZ'�{N��!�����o�U�������0�����1�hA �
|�b%j��k�o��<��oec�7{��X��qb!�]GF�#~�{Y�{�4g��9&cC7]c�����������gGqw-�/+�J��&+W��s���2����C[n"n�����p`��!n`�������2�g��ei1���`����}-�?01��ny���f��'��)�Zk�����X�P�Dv��?Vd_�%��B�!�	|����IK��F�;Q��:X����(_�o�Y�������r �t���_B%�����u]�{�Y[z�8�3�G�x�EH��/\�@f����t��]�����?yo1 s}���T5\�(�\��o�'�V�����aM�kY}be>��TYjbB�����O)���;'�����~`�V��Sq�����p,80MD�@��j�*��	9������`^;�P-f�1�K�01�Ek^om<��X�f�0'�B ��L�E���_v�c�����I��m��&Dw��.��0�x�H��!�������b����R��>��oT�>"nm�ux��' �c�;�1vI@����g ��(]m��
�}��D�	��P
`bX �4��Y4�V�|����J|�ae�g�a��RJ�f�}c��L�(��C�~�i�R������TZ�Ca���a�aK��Yp?Z�������2c�x�Q�<C���8���0i<�05�L���t
?�:�'�;�+c�7���8���8q��lTc.��#�����0�1�7�|7fFj�\��q�O�����GDq&n`�?o�k��fg��[y�����_����t6h����\��(lDl����u�"�I��7eXdG�6w����]�!��,�����g�0bHe����T�*��m]g��Je���q�+�8�����G��h�f*�mV�����<�x8�Bl�����X����Da�m:Y�)u\�reg�F�u:��wT�`��/�!�
g&�)�M'*,�e ���$J0C71��.V���
+{��q���<��t�	l�bi`u4�M� ��b���rr!Xy�Y��'����\��[(6x�|i(�)
|;u�P�]�kf��1����7�l���je
��
F��]l$R��Fs�����b���i�U����d���A���5�������&/5�����C�?����r�x?
����0c���Op5>���/�B%*����ICW
uF|g�����}�P}�aef��p���������OT]8�mtK=~bJj��i�>�>�Y�;z8B�>;��yW����P�<�VJ�u�5�����FI�L�A�.�hg�����`�cQ��e�#h�=��a;�R<�T��^%�30�����:�7�(%��PkG�gf
�[�=Mn����<0]���n
����������VS��J����a�-�v"n��k<�
�3�rA��Rw���T���f�M�����J������p��c�&�������*�Q�p���J�[��kM��~i0p�-��;/_�A�����m��,
ie8��������$[[�������sX�G&\���ehoG���q3�2���-X��=n0�{ S6�r��8���)>�<����%�������7�4u3[�]�0�f����dy�	;z;d����Q&|�&>�E�YX�0��C���D���-|��B>������Wo<BS{C�w�ayo��"r�<���	;�$j�����-aY��Rj����4���~1���
u#��[��-���io5t��o1CCUy$������������y��
�C�D�	��?���'<�b&x@o	��X�a�o<�7l�-�N���*�n����4�6S?n��B�O�"M�[�	�z[���P��������Ehy�#�v�Z����������T�l��rD+��]	��0���:q���2bn_m��n�;|��?1%�����O�-����\_J�."���]i`T���8,�NA�z�����!ze�v�HZ�Ku���Na���pCC��i|�ut�B����	�0�z(3���7/��lV��b��e"��a4�z��7]�}rq�#��9���l3<�vo��@���K�������NH�t����B�� m�9����Ed�Y�9}���l`��O��������z@�n�����W�-���[6�B��(���������W=z�:�i���!��a�O8n�f/���|v�R� ���
�����g�-�Kb(�u�������9�XD��oq�|p�����-|
�j0�#�#<��^�x�DX�@"�9E�<n��������e���5F"�O���uva�a���nQ���|*$�C�!5e�o�c�<`)w��;����iO���~#��2E���3��3����<����F�@����`J�	&���aT�����!I,Z�&H������4cl%�3�b>;�qk
9��	����:
����3��/��(�g�Y��-;��$l���wr9A���y����������_�a[{���
�p8Zbl���Xf>�+s�����1x�|�������N��������a�e���e���?!�2f'�@#[�p�R+��O��"�hj�W
�8c��T��T
'�F��8��C	����j��O���Gq?2�!z�LX���G�^#����;�c�
}ff�K�������1�`�C
J|��{�7h�fE�{����j�A�1�@S�8��<��>�i4.�A��]��O�M�����ZM��	>3�
�=\f2x��f��rw�t�]�5�hf8�ImoY��{33�������eF�A���
�#�����`�H���\�XB�0�UvM
����>�J��!��w�,����`W
pf��x�gR�d�d��5�-�>b~W� :���������Q�w����g��$��G�
��f� �_�/p�2e�K�B�g/<z�}��������f��0�9�8F^i�W�����1�V������(t�F���S(��(�wma*�b���\�t���[�����"��L��1<)�kWO���df���w)H?T�����P}�BR}3�T���C�s%~%���fi���k���[|�Y�&��	��0��}�����+z$Q��g����S?�kQ�Ci�k��wf 6��~�F[��1<�$��[�x8�i~�SA��WB�G �����A�n�@]�\1(fL����E����7zUb��qR����R�u����UK�ot��%_B�����~��F����� x'X���[)�z�p1����X�2�N�"����S��M��z�9��Z���'�]	�.*���%y!M��x�n��������t�%wBD	o��������J�q(Xo�������������$�;�g��;�,p��N��[�3��{����}���q=MFd&\�O
��F��r:5�<�$${��1�9w�
����	�7���@�������G`��;�D�O�7��=4*�;�D�����5���B��6C�o��jb����H5������)n�np>����<W�K0�a��4��:���A�]	���L_P���}�0�S7�4^�i���Y����������k��_D��=!�I���/���g1�����$:l�����8�N��w��kPNg�O��	�����s�E�rgBo�U.�����!>*$�rVW�%_6�+A�.��9 n�@�~��[��5,S��V��B��#�?;���#Z��5�������:C��3:|a-���{fs�B�Y���S��(�=q?���}
p�j�Gi
�������a�<}�7�����@��TK�R����!�x�(�)�:��w��$v3w��fH��@�����1�N����R�Q���n8�����~|,Eyg"�N�xTB�?�	�v�&��������E���Yt\$�2��\��
F=6��/��`�.N��P�%�������)Z����C�����BM=�}���	��;�[4}����^<���|���V���!}���	~�5���j������1$f��S40-��p��pm�g~�w�r��c~O_�2������cS�f(���J�G�u��z����\�U��8s�.L�g��{�{v��@��vo������W�:|{��1�e,��d���4�~����%����c��w��my=B`x�gH���3b9g������Y�%-��&�
B��1L�$^����+345�>���|e���9<bn��,`��![c�,3?Zjm�@'�z`B�F}hD
	�;�1�pBe�D,�0Vs������<��_�2�u|��'��9j*P������	�d'&��E�\=�Kp�E��R�l�>�.$d'�@)z.������vJ���B?N?`�x�;��D����,[b����yt|`��Q�L��O����g�P}`E��K�$�X�6j��L������Aw��C�1W{W"��L���0h������@'W�)R~�:�z!<r~h.���VT��5��z-
=c�C<�R�+b���`��4%���sAl2�C�,���ay!V���������G��s���c�9���C�du�>�\#q�d�H��9I����������p�����&B��O�f
L�}[�Hw V$��ga�#��@%���AK!p1��H�t��}�3�p���������U�tg��U�q�v��E�q�j(� ���O]:�6�WWU^]������WGyuU���(/������5������5/��l?~�`\C�9��tq.�A\����w��������y�B�T��*tO%������L!cB�W����?������`�
�������Jnj�,y�M�>�����?����Qp�������} �����jG�H���������?o?����������_���?���(0^,���l�`���1��+�4��1�v_�L&������i�]gT�q��w�~���x�'V�	�Xi�ee�� |'�F�I%Oz�f���B�*�D}p�zx=��+�~'�N�C'.�Vj��%�+cx�#8��������"�3�qY���=��`pv��B�T���s�O�=�G�O��Ix���y�c�����D�������
*�)��V�J��wb\tg���4B��n�$�3c�C��
Bt�;�~W"A;�d0
b������@>���'���[_�����'��M�B�>�${
:���������~�(���2tRF���1���	+$���q�{I`����J��
P��(�Y��@�/����������+c����:�Dq&���o'�;~�t��F�we>���!�����3�!J�]�%V����
��juBq!��u���7p��+�5n���o�V�'��{�����L�A�&�����u*����AL	�)�������_��0�����6����K$�K�n����?�@"��;���	�lV&����>~�����'.��	0Jp��<pa�
S���>�&���2M��hKa�]I{���2�r�p�'�4y,\�������pG5~���71q����������X��n���GL�q�G���1lg���<�����="��|�U�nT��wt�L�vB���O�13���q���u��(�_p�@f&�T&������<�����4��(iVo���lTocx�����41���LS��026��&���D����I�Bk������������0MGrD���"/?�U��E����:7���a�Bm+�������u9�	8Fe
��L�L5��33�n��T-�J�D����{�-F��[t�q���YO4�=�^�%A��Q"�t9c8w�K$S����[��w����0�#�R��6.t��a����.Q`�^K�4� @���(�n4(�	f(G�����c��&��:�Dq�*j���@}S�s��B�������[']���h�a���N����1�.�����M*�5�+��~���wa2�yw��V�?{��2���U}C,#L�~��q,�A!�����~,���v�J����I���\��0x���8E��y:(��T���d��b�,�[� �����aXN�/E�[���	5}���A(�a�G���|8�������T���g�����gXuP��R;s�-�an�����4��{������[�mX8��p���������p��cj���w0]���Ce��!�bY�v��{rWn~U0���{Q
�A�I�=bG�C��&<`����Qe�$S�2�e��
Tv2!���+�|����TA�D�����n��v4%K���
��������pl�8�����^��$���^	�g�����]Y/�����je�e#��kA�Jd�����]��7���GJ��2|]!\���ZYT�G��G�'���la�}F�9���:4���p\�[�YWP��}@b��gj��o:1���AA�>���S��7e�*��<��n�����	�)~<��+e�Cz^3��O��+9��T��J�w��#
<�b�2$��X��5�����y���gc7���w&�>�A8���x\�Dq����_l.��";3��<�=,������#-�0����q����@�l�+p��:�q���b�r�.�f�}�n�l���@���B�J��O�^�DD�&c�:��Ui�y���c�r�#�}��=n���n�	����>+�@�'PH����#�31�W������0�O�#�y�M�������6�2��7��#��d&�hM{P����5���p���f��F����fCR����wa2����������fZQo�+���d"L���!	_GEbrF��b�xH���)WB0��&)�73�k�oe����N�K��4%��pF(�E�.���&3��L�������F�C�|b$ScI�k�����D
���g���e*�1����>��O����G�b�}���1�'Bc�s���9b *c\�PU���5�.��4����1������$�1�6�pjx�+�q��c�l��4|f��d�?-f�}���������iUIz�|�����g����M�R��
��=����o&���ey>]���N�nK&*q���w���0#m�I/�:����i�|���{4EZq&L"��������I��Z$����^�5r����
�(����|����K�DXg�%(l��'K\N&��������n�o�g
��
��S@���V�]�M}"8�k��t$���D������3��������a��h~ka�s������qO��g*��Bp�p"X(�@s�B�U�D �|��<�;))t�������q�~u&
pVj����&"�g������EJ0k�2�M�<�&f���x����~vx�%b	�4e����7���k�ja��9}��rAx$�jH�5=�(�����N����O�t�L|����/��)�d�����>�z�����5������/F�Uo�w������Bt��m�;|X������nK;4�+�U���dnsaF���d<SKL2A��	{��[FI��"j���{���������9@���'F�}�e��-���0���u|/?�b��c�CI������d������.��+w!�E8�J�<Z��%�bJPM{e
#Bx�Y9+30%I��C���
�����3Ob�+�2��#��ms������u�\�\s��nQD��:S��B���06��<�Ld��M&�9xW�#j��������J��2���D�5�g�V{�6�j�|l�~2k����(3��Z���;=<TDq�0�������3�aD���
�u#�����sy��
�04��������r	��Ow_+���l���Y`+3a��K��N$"��d%�*�AfLd�{���E����g&�c��L�_�=�+5a��^)���-�	6��Y�BP���B�����h<�j�A�M�N)b����"���UzM�=���T���h��b��#��M�Wd
�Nc�g�ce�-�u&
�~���R\+#�9�O��d�u[���`�k��Xu�u������vo�~A��O����~���_7#cz������^�������<M@�Ha��#|�E\��8�`l9�]�l��%Z��Q"W���\�n6����2��]�6�[x�L���.�>��N��N��5_��#
�����V���7(ThnX���	�\H���1q�h�~!v����~�O��p�����I�
�0���(,!}8���F|�?K��a�gsn�k)�'.�/����p��K�Z���~�g���'��< +���X^E#p!>Zon�����*��K�I�k��������O<Q(:�������
FS�'�bJPF�FB���%q!>H��5u ����A���Nl6Li������p�:j����+c>��2x�@p�hd����X�7�a&
0r�!b�h�*vf "x�GUA�8�=:JT0.���g	5-����@�(����\W������3Us�qP>�bm���K=��{��?���z,���h�[�iu�Us/A<AT0��V|	C�$���
��:�>5�k9WXSJ�S��E$�~�sk{��d|
J�+=�B����f>�U{��03,��Q���P����� �����M��^|��x".l�8:�-��r]����w0
]|3#>`�8,�wBW}�R�X|�������&��P���R���[�]	�>���_�2j����k��hu�Y���Jb�t�~�o�,oF��S��~&��2��?pf�?{�0sp�D�0�^�=����W%���TL(��O��N$X��a���'�/`C������Bs�a���7��q��7#���~^�8� ",=���%kD��J��u[�u+�
��E�[���L�Zm"��c��M"-�x3!Gf&�����y=�u��x%8�*��F����WN`�1�>3���A��4��S���]F�IK=�<���<<�oT������"�e6%c���G@fe�k����8@NT0���� L�<~n��M�
����}�#���#��������V����PB��rQO��Ju[���
�x�%��M���?�E��j��,�	�p��#��2l���N�*��S�����m����b~����k��w��������9���p��;z���vnP�@�[�����w%~,��~J,�����y0�T�/�6unJ3p3`�2���)-�B~�d�|���>��oe��(���:'���kY+������j`6�}�+��G�	����k5O��2C�z�������o���Y�S�;n9���M��W6���4f�[�IbO��X��S6�.d��)�p$�����v�lA��:�ke���U/��K�7�	�]�Q�?i�<r����A�^��3/8��g,e�#6GE��O�[���2	n���"�7�:�T��4��P�O�B-�n���)�
��_e������[���C�B41e"�#~��]p��"��}��4.���=$~Wb��=(��C�C���\tK]���@ftS	�@?�	J�G~D�3]�_�r���t'��"�|g�u�C����+��(�8�S-f��<H�t���Q����piT���2�r�
SQa`���g!bh�����=��-��;���y`���8kl,A�c�L��	���\2��CU,���B��� �z�*�2|�P���^��]=���}�V �-����;tu{"8�T��n=��9�
�K0��wz�������<��I��u�/J���U����Bs�D���_����S�w���&c��Y
�~���ua�3>�y�pui���E;����1��6W6e�F�����-�(�e}�+]82s����p�x������3`�&U�N���f�YT�`�UC���n����/�EuS����U1���X=a_^-��\\g�6�e�����,�U�������i�����!}l����*<�30���?/u#��l��H(���cJ�=�e���.������g7���13]�Ij����
q�qxo�i#����P�����qhKNUfPv���37������mk�!���J#\-Q�Fv�
~�����D��)?���DL����r���b04��o^o�Ob�	)�,�vh)���>>�$����]2���� ��J�/����;�!>h��.A�[.��RS�Q��I�0���`"P���H��O�pn��k�?�Q��T�W&L��s���.4p���X�����O����������F����bR��R��k����
U�Wr�/��6l��Y�H���d��k�6�Ym�P��e"0��
���w��2�K��^�������v/����]bJP�
�z�����A��Q����'F��d��Pp�O(S���N*�DZ�	��lW
�
��������4E3��e������'�L��R9�p\�/���r�gl���b�AZ,�~�+9��@�F����q23�=~���1�G�R!FU���+�>�N����a"����5"��O�hwXF2�|����t��l��et&X$|�b3;�b�w%��{�r|>�v~W
������y>a��L�:gwWL��~1��)�%�����p�>$��hY��,��\��>��53s6��D��:<NC��4Y������V&�V������L���7&��8���q��u/�U�O.���^��3>��
����I�m��x`��Bg����2��`�g=i�B�Et7��^[��pD�r�^�d��C�$����AfbLM��+03�D?��������D���������h��\e���>T�S'������QD�8@_h����=9��W�
ne7����v�rW��������������<1�O�93��i,���!�C��;{�����S������C�qj��k�1v�����D(���������z�L�����2~�0�8�{E%*��fk�>���7'O����g!"&���S��Q�1L��l��Olf�+a������_��^���8qh���6�}��)A���fb=��+�� �m�������:�g�
�c��
(W�F�A_�~1��0g�o�J����? �ND����$����e!R]z��;���."B+U����U�{A_������cJ�"���~=���4
�����b�]��`�C**��c�`
��:
^'�_��V�:���/FQ�2j����� ����S����P�������BD��h�q��<.N�;.��	�����x���r#L����_�u���on����5�j��%��j�,�* �����\�#�qj����
j���7�����!7;�SC��f
\c~f2�G�K�'�g�jA����F��G�����T7�>V�A�M��^qe�������UI���&����A���h��M<pb6����~T����gqJ�P�{�C�����u�����_l�5�*�`�������0���?%�������l����w9vn!Q��s��ke2n����^1��t�)&>Q��6����x��+C��+���c���86�>��AOo|���U��VS���K���w��8,'l�5,�����#Z�����XY�	�,�cWT���i-�JD�)E�*��������3��%q����I�m0�>�����`�s��-`�s���<bl��/��t~����;.�-��n������J���\���fg�`W�������0�{L�M{.��N}�	�}�N3�n� ����P�����	�������n
��{�3���s��D?�0������@p�m0%�|�R6�`kM57�����0�b��{�&c��Z��b���T*,�
���2��y����`e+^(�bl�D�����SfT�DU^������63�1���JA��2s�_yq(L���J"������,LIus+v?��#�3��K�nna:���5��gn�`D�q&Vi*>���/f�)�����`�N��L��8�d�������������5y(V�}��;�;��T�����"�����kXT����Bm[9�A]\�"�:���	:�N����1b�_��R���b&h����A��Tjn"j�i���LZ�����	��Y:�=C���1Q��m�)��&\G�/���/��A`*�,�����GGX�����/�~��5K"&���
j����A�p���&��5�����3#���8v}�n�B-d���C���@$i{Wj}�Cu|j�ye(9T���o<���ak����Q1�����VmF.F't)&�d2�f��i������$������v���y!��5/d��������!�������~������~>���������}bf{������A�W���nu�Z�����OO�>]30���Hj���v�j��;�f=C��Mk�2,�Rh��J?����f0cC8��q�����C�VL��6n����	����t
0����6�U&c|�~�B������s���Q��o<�s�����t
�t����;>�!���m��;��Q^���72d�m��aJ����
���=61�sIAO�i^��005�����u���~�&����Z1��[d����n��1?Vl��L�.�3��Mt�h�x�UCB��M�ak:3�a����9�&l�C����U��C���I����3F������X����7C���D^�S���9O6d���@���c�� !���.Y��q4K����]&�H��i#�����	��XJ�N����6�:T%�������n���[4���R.��C��0r�S������9
��^�jI��\Y����,.��~3��j��@�\�4"mqq������o�h�4LB��E�=%3aCPi����q�7�D����!�/s�-@I�$�LwW3�z����v���!5�����U}�g2.(�&���M��h2����<��D�]C0�aF�5��!E���
�\�s$��]������5.hp<m�����Kt�k�H1�_8�48�(�\��@��eD�GDl�=��4�L�H��g�84��C�����I��6������:S�\�������������!3�sU�]�K�\�W\�0�L���x����gh���o+�k�T
-�p����I��wbc�+������GIZaZW2���Z���I�V?�������I���j�!tqo��7��c.�~�#k$v�����!��!� *�b�Y	T1��,K	�y����~R(�	��jX2���d2f�QD��fD�B�d��?e�4��d�(��q����soB�$�v��_�lbohn�p�B��zI�D�2	�����(.���<��Z�E��:�����BJj��K]�h��j��b�]F������	�A���;�s���n���
g�a,7^s�Z�����1E>p�>@��QJL�q�3�
����.�z�_=��������zv~_50�����6�\�!�s��<�K���_��X�/&,j<����z��_q�B8�b#��
s6�0�]G3&�t����;C�����{zZ NC05���qI��|/���F$`��z��������3�M�}?~w�H����o�G;v���oz]��<�^��0tK�:��}��U���>�]0�J?a�
V������6jS����OE5"�Q��cv���
 ��v��"�9���O�6�j�5 VJ.p�i���w�LD����')��������B�qS�R7m1a$�j�r����	"
!{�m��C����s���
<�&c$�zjBWoO�KBX}��]���u��?�`��k�Y�~�:N�����UZ�?@�2�TX*"?�c�%���l�H��1���k��~�1a2�h�&���=%A$���x�y������"�
A�zB#������t
g�H_N���
a�Fy9�F!.QK~y�a�9���s���h|x��~k&��
=���{b����i��_P���Wy��#�r�@s�r��mE&��)m���m3F1��Me�Q�J��p��M�)
jI�{��r�"�c:[�e���h?C:(R�OU��f�?������)�m�NKFT��OGz�a����%]�v�vz����/b��^�kTZ:+ �@�U���a`�[�,�O���du�+����	��2�.��3A��<�Ya��_.q����R\[2c��0��,DP����L���T�<J	���nw��`��U�v'0��U`�����2@���<�����1d��v�a��'Tk�/sBt I��[4��E�'�=�U��N��������w�?��x�z������@�����AX�gIi�>�����<�#�z���N���
-p��f*��
�31�z����l<�.��&Wn�a%��D�(����;���	�@��FT�3Fy��n���n�<tw����
�Qi����.2�a�A�1������8�Q�2l�2���N�?�%��n�����&�Q�%.��3t�e&��0c�����y0�i��,Lp!�U����xI�7f�����~��
�;���G�H�GcP����J��#P��Ca��V��aA�c���3�?�mpa>�pi�'c�v�v��S��F"Z=����Ty��d�D?4Q�a!��!:�Q�$�� �
�*R��}����/�~g8?vw�>�Z��7��k�H&�x4q��\��$:�f��)-������qI-]�#h��3bhg�������U�Sjk���;RkW���
"�b�<[�[����)����VO��=�C��������@Em��\���w��k[��[����rC'��e�3c���&BF�c�y���6�f�p�kb�O.�1���
������� �2�@M�l��o�������6��������.,aK���'S��
P�0qId�Kh\�@4dY��&GF��	H�r0�\�#�34�gPi��+����O����t�x
���_*��aK/�����f����c��r�XxgBE��gG�[�����`�J���L�l�k-�v ��^0����xa���7��[�h&\�N;o���$26��m����V��
���1�C�qB��Q�a������fd�x����]�`e4�s����=�#C\����u��d��B_���~7S��3��+Fel���[���V8f��{8f3F��"����?fug�76)����!��4�x�z�My)!��_7fA�(���.���]J�w�	=���
�W��z(*�^�B*<�"�u�����T9���������	b����b���K���!c:�V��.��J�	[QYq��r���&\m"�UaV���m���!R����>�=$�F��>�)�Qy����8����2���=����&?3S�0*����\��i(26�LPa`��D(ly�V���*v�1%�X]�IB��������3�b��,���f�����P����Cx��6o$&�J�B�-"��2d��^%)���T������@��c��'�IB]=L����/V	��zA`�rcS�a���@�C��=����>�p�=f���V�E���u�l�������a�1�es�����z�.�P�3���j�[v��U#���+P{i���r0�_ns����2�������zR2�v�W��v�v���$A����W�d�Qk+��T�Kp��I�F�|��6&k��zk�H�r���2�������#�G4�������,x���������S�<��������'��k�N^<���(`w8�W�\�Gb\n|N���eh�N�S�qo��cu�Z����Z~8py��9�r� ������J�<��8v��g<�3|13��#a��8��FE����	:��_[W�K�r7��'bN��o�D��Vf�i�[�'6%H���:Ht��Y��(��w!r�.�w
Uf�N�qS��{l�����w�`���[S���a����Gla���G+�6
���|����/��c����e�t�x����r��e�t�rM������L��g���t����6_���g�.�u�|����r�j�0]��Z#��t����/>m�xMv�����m�xNuy�UyL5yDE�wM��t\�������h\d�z�;vL�E�q�NY����������}.m�
���m;�U�t����z���"���5]L��s��.O��\�:��cw�n���C�\S7 L��N�J���5��k�������{���:��ss��:��[�L�qq��>K��g�L=��R�P������-`~Ohl^�=��q�X����������CiOj:��=��q=�����������CqO�:]_�y�n^�=)�q�X�����������-����}��WCg�W����t�-W��Z��V��R�����=�,q�����b!�����/�����y���f�����/�����i�W�l�����/v����Y���
x��F���&��?���g����l<�,K�ps`�w�!���qmhS7��1f�-�������6R�������r9�\�������q?��t���j�����n��c� ]c~X�j.��CoLe�s�c����5m�I�}f�9/��cB��������
������6�4�g���8y1�Gg��$EgF����������id�	��_�������y�o"N�n�2x�%��X�"�:3n������[o{�"6���BM���!�r���)�F5���70'H�i���2��J�V)3��[���pwS*�b�83S�x���X��Dq���b��*^��?(�m��-�ib(����x�l���)�" O
����AH,`��d���J�����	�s� �_��<8���B����!��x����G����]0D����wq'��` �*�k��8�(7���h�� W�Q
\�B�,��/~0���~K�]�\;�x�������s������H�.�I���F�w�-����8��K������J��������z�'��n���5�����1u�#)�,a��9y���<��������$&v�I����]	({I���]�kFp���`�/�u� ���a�!�7����t�^�7���'hg���j��m�s����4���X�,^�d8�����?��V�j�x���P�&"A,��5?����S�8�H
�~1���C�t�vuo��=��	ru�L��)!�����@�B~Yf�CG�v���v��,Ine��	�7����q,�C88�+a��S���n7���E�~A��-��G��C�3#��WX���*���J>�l����qU$���1�����$���Q��n����Lx��(��pA	v�{��<<q3C~u
!0�}�������z{CNT�IXe0.���������-�R�ym�rY�T���$�~1��2�:����bQ���l|�\t��aNK-LIm�����OD�4������80��~�����jz>L�D����~���,�����O��q��p���(A���$yo��,�~1��WO�?P&�����=�����|cy�aT��%O���a_��x1�g�S��y<4��b��6X�LM������sQmg(C�i�tw����feQ�w�_]��<=������T�q��������A�OC��?r��Q���*�A��O�=�	��<������f��ee�UFu�,E�#l��a|�\�S�������g�s�+Q2��#���,F�	���z-���v����S	�rk�io!Q�2���:���[�_'C�L�rgb��TXe�8�3�'O���M���)=vmZ���b�B��"�������}�Qkk���3����`���	Q����;9��`o�"�+41V������-A,	����]��n����cO"b,�e���8����^R��"����>���c\K]���~$t��
�T������v�X�d���8|W��>���<?�f���N���+�n'�������<*� ��c���<��i'��|>�!O����f.D��q�r3i���Dx&C��s���7��K�����B�h���tYM���;�(c k�[����A}����Q}U��!��N����{O�C"C�[|�G�1a�
55�t����y�VM�+w�,��[������#��D�$��y��#�x"�H�t��;�y�d�v3vx���3�"����y���-�C���'�����%L�sGegh�q�$������w>�[��#0T����&"����m�}�j��$D�����u�������ku< T�����F}(*k�-t��Q��*�);�7�p��#�
e��6�i&>�,���>���h�����3KM���8�������s���w<~��;��[��.�l��w6�(�t���J~��P+����J�a0���5������� ,���q�5�y���v������#�%Q��+���5k��90����=������Y=f�<����O
'�z���D4����G�D�����m�����r1�d���G8��u���qh�����>6���k�q����D�����=j�����DD��M��u��'P���l9[��G�1;�������<�6o{���e�����Z����013$e�/�M��%�W������3f<�Pu	�A����"�!�c�p�����&�3�x��f�A���7h���H��z@=���%�����{!�=�+~L�Y�0|��\8x������D����d�wa~<j�w�
��?��S�o��s���0�a�i�F�[sV�&�n?kma
L����%�r�~1�1�%l��
��1M��o�h>�����5387=b����c�saK��"��X�u��;��+�w`��~��	�H���y8,��~���`����8"��E��5�9��ngU�%���/~o�>U3����\�u���2��[g�J����G�>��fX������u�r��a����6z�`����X�	<
��+;3l�c#aZ%�G�fb@H2_G�RDibX����?0M{�	��.d��>1�S��+c5�6'��N��Rl�tn�Hk�XF�����G1���#~8��<���~X����>h�+����"�Pv����Z�n�j�}9{����������c�U�!I�.����L��T0�����m���4�I�L�hK	lW�+�7Lo���� �8c��)up�F�S���� �_�J���o��P�ae����KYY������<B���1X��{;S�'��0�����"/_����]���:x&b�����}|�
14��N�s�� ?Q�27�P����H&:��s�0���C���B�uYO�#Utt��)C��}2���JU�Jxe�����K(��b;}(��i������N��4��!#m����\���L
������w��K�t���(���v�������KL	*�r�9���P^���5�:( �7�Gf�05���F�
c�z����?df2��^������@�������1I�t�Zp�yk����6�������&"C�3�YO�)A�T75�A�O�X�X3x��#��d|oe�v���1���r�)A�[�6���/��(���F�}jeS�����b������������ze�C��_���u}|f��Ph�������T��h�����D33p�I�J��[��!��Nu(��q�S�-����n/���23�Q@� �Hf#�1��t�������rb5cN$
������r�\��w���0��	bJPVc���
���U���XW����k���O��_����3����|7+����L�4F;���QU����0D��C��jbJ�X�^9!{����������ED�'���Z�	}?TTX+��L��������d����+�W�s<i�?2jN7�'����uy����q��:�3���]��7���GT�<��]0��f;�V���������vx1��]'3�����z-��1����<��?m]NW��w9]����?����!3L����~�����W��.Kjt��Fh ��U�D`������c0t�~���/���w��o��X�~�O3m����`�,[g~���PZ�!�H��*�Y���_��k��#Wg�-5���K�B��p�}���6�D�����u��N��.a�]
�U��'���cAJ!$�a��u�n�',c�L���-����a�/�a
Z�6�����D�h00����A$��n�e�'��13�����P��ge
��� e\������^_mc�u)n�������~����"1BS�uh�g�+x��n9P��C#�Z���`
�=��#���=4e�����4�#2�0�if#6U�����������?~c����R�����1���0V�=��6����D���2QRS��[$�\{[�Y	A����t�i����}G/��t%��U��������Q=���0!��n�U�����tef���5P����m��N�n��'���������C* ~��������c�4�f�_Y{
7E�D�ja�����a�	��)���������/a6�&:*[���T+�9�{�
R���CTN93��E,�������f�������tL����`�`������9�N
�/�C�^�������B�����tjx�d���J���s�7�t�=G���[�&Q!A����uF���T�d�-�^����5�e��/�Ch#� 6�r]��\�'�W�:aI������E�p-y���j3'�oe���0vC��Q��Q� ���O�q�E�����2��$fX~�����"VE����!=^=P�`4�E�N0�����uj��`��JF�D�'��Dp�_���a���Q�!l���� ���eC�m�����<���0vT��H;5��`N�G�����F��(n��I�iA0�2�����`1#�o����g|NbR�NE�h��*��B(��V)�_sxx���$�01����/�p��������m+�����m���1���4�����T�����8����+|1"����uWH��'�t�!n�x���\j[}Ap����_���e2(M�'(���:�;%3L�h2���/�����5����x�y�����l{'��:P�c��[�	��eTt�$9���&��_iI����'d��o����g��6�k=�����X8_�r��{(��J2��/R�s<ye(�]�]���{{<s�}D������u������Q�p,����r�ps[e�(5� �#��5�BK����9���Po��G�<�<A�����=����`��P���>d��F���/�CEZVB�,�s�D-]^���C�2�&���gEf�O�E��:-2]��q�rPj�Z,���/&a�a,B�d8�*�����g��a1I0��7���9�k�A���E%bg�f#|���2���z�o[��b��Q��/��+w���2��q�a,�}[b��?��Q������W�7��y�����s�/S�F��K������b��-�fF�����u�1�]�@lZ�j�"dw��� v9��S3>�!���L`�^*���_��-
w�g���Mg���������53��&5�#��&&c�T��
*��1�q�
��W��?�(��2;+��b?3S �*�^���&I�3���M{e�6�g�L,��h<�K�a����������L8�����@J�[�����~��'���"������<;�j����2�'�urk,����V��+���|�2�K�S�-wZ�bx��L�O`��)
����������|1�p��O�����G��G�8n`���e��������>k�E%�*�%�37���!��~�8�b�13�[9�Ph��7+S����s���7���"v�y�z�LVN��L�<����J����/*���#��po����6�B�k���!�R�iEW3���+�����~��4��1���R���*&�������0rN�2�%���a�H���:`b"���J��)��+�)���'4���k]$2"v��`���������@h8vA�#!�����^I���G�a�NZzl;��4&{�(V���s7���7���H�g�a����3E��H�����Tt��R���.�<�<C�|}�y���I�������JpCB1���/��"��DO����KI�����Wo���)�����)�M��t\F`&xe������0<��������x�����l����[�!t�@��|��K#��0��W����X���J%�H��ff�����������s�9O(D��l�N�F�>�����e�Q�8n�����~�������j[��9�Y���+���	�'�����(\���V�	�[~�BM5�)��u���r*�������A�_T��:o����b �K����Z��n���p1R��� 
��}�2_�����3����N��l��n�#��P��'_���,"�A�[N#�����d-����U�6�d#?!����<���
�b!h��r�����_�Z�e�-s�5QbT����wB���JDj��qm�&&���;���jR�>���d����!E�Z��B��o:�-*�b��F���0�q~:��mX�D\�P��oI���@�:c���5S �%h���b7�g��;aL��l|N���t
��Z�K��C����m���������IK����h���z�<����5S x`���r��G�O!����i��V��RfO<����KB�i�-R��	�T��20��X=T�����%���~�J�[��/�J����Vf
	���G����5�(S �i]�I�4����9�[�*�F���*�����y���C��t��?���2����b-�.�u�������@"ha$7Sl�Vdr�!�nN�v�(��D=%���u'J�����`����l�(�E��>g�������������;��X,+U�.���4,�]�Q5��w28�8�~S�������j�����gbp�j������T���Q>����^�/��`����<�v����2�p�; �`;������v��9��bte��	b|������@��+����a�e����&��R�od������]�%��.�[��2��j/}��0�8W�����}&Z|b&|2p}�3*9S5��p�K����|s��s�Q��o�T��Pf�`��c Q�a��V`����`~��n�?�_��Ru�����3��Qq�����7U�e(��=y���\��^��tp��k�Le]W����ar6Q.N��5	XKcb*=V�~<�-=�����9�-Tu"�By����E�������6L���D����UG����`�?<�v�-S�:<��#�=1�=�����0���m%�.���!�1dj".
�P�{L��)A��9�m��w�����1g�Z�����(�%���O�_a`K\�):��������Z�3
��L�`�K��O-+�g�dS���L��W��te91���>X7��1�_�v�A�����WF�<O�����f���y��sM�&�|�����U���R�(��7�X�=��$���|��\}?4&�t��q�_MXs�$\�.�����]	���F�[��&M*&�0���>G};�6���0���BX(}2g��gkvf����r����_to�Ku>���Q��\$�������q����xfG���aLBEQ��T�{S��w�y�;�,G.p�W�$�u&Z��5�����,1��]�
�Q���C�0�7���L<z�fBf�u��1a'v������5�,1_��5�������p&��B�4�9��3���C�n8���{�M���o�J�4��C��~S����f|�3�����}�X9���F�L�J��1L89��!�z'���&��v�t�S�x��32�l�����<�g��s������t����T�b�L����0����(g��S�-$�!!��j�������+�mA�1��ub�s[�/�M������"���@��X�Ddcq��L�L%���������T����|��f�R�$�#K�L�F�s��� a��<�V:���M�����B�O�x�#Vy�c��c9}������J�E��Tc-�D�'��PDn��c�Lyy��)ZV�a
��{H�b0VQI�(�'nG����,1��������/.�O��c��L��&s��~���Z��b��=k����b������(���8SDQ�vvUM=(�l_��Xt�b�jB�}�i���D�
 �{yX�[�9���[��X��<�)����(����N��+�M�Z�$�5L�v���ac�l����nX�#�)�x-��8�����n�:b���>m�y���B%��i����ODV��9(�:�`vn�g����R>�HO
��dJR��:�B�ZI�tb��.��%1I��T"\�j����T����1:��>J7S 8X�jm\�=4�D�`/\�Z���H�+�huW��\������)�pM���U\�.��5U�,�BI��\��MI#C'��TJY��f��Nu���3�PiQ�:k�����6Put���%"4����&��X��m���������<�6�U<7��%Q?��@�t&Jn�k��A|��Uk���dpp���-Qd�X,�UZ�I�.j�LJ����E�~q T�3��P���(�#����a�����F�5]z\�O��:��c������:`M���Ldi=��$��]e>������&P{<~��>�Q�a�0�<���S����A������iP��&Msg���H����0�O�Y�t?9fMs�M"7b7��HN�@�4A��~��&�1[��R���*%x���HEJS�R�L��$)c	�TF����0�a��I�������� Ni���L�\���h��'���@iKk��'$��OH���E��$���|(��6���$S9����p�2�*��\v�1v<�
S����&Z�Y��-&g�r�� ����'�03gZ*�O2>!�}�e���M�N�b�%A����8�5�h�4��2����8����,s���Q���hG[��Lw�q������ha|�����{�'�<��Os�~D��.�`��fn����(��2�	�d��px�\�;@��f��ME���vL����U���SU�_�Oj|^�|Lh�lf��.��%u���df����)uo�?]����
9g�.��	I!�I2����3�h�}�����fG4����iFa6�w�&�����J�M������@
����
^`��2�
�X	��y�����P;�S����H7h0��1nm�|��{b�;�u���W����@l��4v���xX���4���w��W��Z����[	C�{�/�h3,a�B�:�4r���� ������X��K�J4c����u�C'������B!)�f������=CS�Jh�FF6�D�Q����-J�~����L��qC�gE��4<~�t�e�	o&>^�����	N�������QxBS����[R*���o������E<[�zN�<~D#C��Y���|����A�v/��I	�u&n@,�/��C��C�~)����l���d!#y�����=���q�2�8X�����B8.5��
�9�b�b�Tb�Y��pW��V�t��T�P��q^�0-
X�H��3�B�Q/�B;,�4�j����Aq
�7?��9(��f�B�f���/����������~W�`�`[����W�s��B�o��,���4��o&�7�9h��v�t��]O������f���e��U��f|�R�.=��)�W�C�vn�F��].~Z���JW�����&��J�3&���)��pb�uClZ�C�����0fL�$�{,�_�b&[���mH������7�L�(rx��Ej�`�<�����lE���
���XrE'Bc2�ba01��������Q������E�L�b"|sTHb���76l�$�a�qn7-mt;�kx�����L��`��s��F����X�H��\�X|�mQ��������4}$J�$h��8]���n�>�n����<�������7X����]	Q$��7R��Q�����XW-Db���4EhF��2ISe���|��%����o���pxr�$�+�y��'�W�!G2i�W��4��'�����������m��!(�v����v���[�_�����~�q�L�J�l�����}Re�<.wb�X���\��s�B��/P-����V����l�;��L$����_�/fEY����e	"����\�����X����j&v�Gt����C���&$�6����!�!�y!��6�p�k�h� b1�p]#�u���~�|0_�����t]���eE��TZ\U�Y.{7����WYp^�r��W����B���WYd\���kKy���Ud�]�k����!�g����,VC@qu�?�������)%���DO)�_%zj�"��S�RG��}��k����������F.���o�!����1t�st��8~��_~���mz�������?Z��@�Y������G����������_���?��������������j���Y��N��<�t]Z�z,3a���u���@=�5�W.���Nlp��T��#���1-�M%���wh����2��+��nL.<:3�_����GOx�7SL������8N���w�:�!���>�M-�y�w�0�f�`
�;q�(��Xz�����L�T��x����
�'��#&	���f7�TbD�~WB��1+��>����i"1����t��3��1���<��q�-&��,Q�\v	Ut�|�+�����8R�b��`�SBh%q=�	&����L�@9�H7Y~��{U�>H$W��L�r	�[&	g��~�h��
V8��k�2�uK����H�����PFF�X[�N&I���|up�s��K���}*����}eCb�1��h��t�A���,!�i��we>�vZC�C��������V���JS���.�@T��ff��3l2���g��������'�)�	����X~P�i��3���<eC�95����������HD�:q�����
��(1r��s��-�]�2�/H�����e~���X��V�����h��7����R��������1U�(�G>�8g�2���]$q����C���s�r�Y�1�_$fr
������,��
PT�����Ds�o��^����������cB��x$�����,�d�r���"��1;O.�iNM;8�����w:O!������m�*����caO|��<��kD�7@�`� 3_,���G��D(<Y7B�Yi����R�7��Qi�-�`9r���Iu��tOg&=��5o��e���P4��e�������(m�
p\�1j-��`�����*�@��2�H������.�6#'�]�)A�z�����h14\L�;2(p|Fe�����jyWBK�[�Dx��b't�-���p�y��v�\3n	2�=E*�HR�0�K�=a!�����[������BL���/�:�c�����������)�c�^I\W�@�	8:KGv�Bh�lHC�D4�3��Q�F��:�d�90R������h}C�cs�BD�!�q�/�N�������c��NWF�My�������=MW�L�x0I���d��C�	�����2�<�a�
�u31|�vH�40Gf&��L��Q�/���yM&��z��Q�s�)G%���@�,tvf��������b�r���OH�0C�S~��y1}�������B��{s5�<�9z>�=�0<�L�5��i+��nq|����F1�`�LK�<�0�5l���\05��p�������[�#,��#x�G�,Yb#������U��`���]	����a�%_����m������Y��&=�w���Di�}u�A`��2�/���&����+w2"���l�t�!U����xw�):��*G�B�,
:���+�"Z��H������S��;>Pv+�����O�I�����0M	��?�K���i��W�6�t|`T�I������]��o�O��D�%��C���@v�E��V�|z��,1�f��W��]�W�&�	�T���T�;���pW*��7+M��2ZP��J.����a���4$�P2�y\�~l*�3�{�[��*�$���s�Y�UF����ogJv~���xW��������!��0���I�z�9&<�35?��mMd�7v����D
:���v�����J�^?���Y��%�]�3�r���=5\b��F�i���i{q]>��
�����73n,g�Z����'��b����0SS��P��@�^��{�&c$�f*�pt/��>���p��~��&�q�&"�A&x�!�'&0(��������M�L3�:VF��kd�5%Qq�$e��&m���f���L��J����=�-
v��F��`w���N0��
Jj��!t}L���&CY����(&#XMpk�{�6��TBt���	�9����v�'��pH���)W�0����F�UF�������/��2��2�Z�'�Qse���1��[��c����:�Fy�"q��e�2�0S2[�EA�8��R&���Mrh��}��1�R�m��W��s�K��<f���>�'�c<���� ��Z�����
���
�����{^fR�<�Vf"]x���9M�4�8V��F�P�?Sg>3�H��f+��ge�3|aR��U)��2�Xy������w���3�t����l�t��7MqZ�T<G�Bh�m�D}[�s��;b��L���k�:��K�<z��i�!�Hc�,�H$2,�sWo4��FR�E������{�Z�\��6{BMq�r�����N��B:�mAA���XbrR�6�=�D���O"�'��Q�����~W"C��>��:���5�:��M�4���DS�s�^W��������F������x����Q<J�:���B�P�e*��(�r
1�V<7k'-�nF,����������.DS�����4C%���������J)F-k"*�@��}m��a^c��Y�6KD���-	^!C�D�l
lk�\�Zm��|#��9a
��!.�4/"t�P:c��u�
�3-��q����e%bn�t�M"��jmD#&1G�\J1�C��C����w���JX!&2\��h+9d�VF!�v��!�����P���C��W-L`�����Q�bRH�-���<4Jr�&!�k7�8N�H&C1�r�o}"�v��F���J��h*�@��������p�q��6W�l�)���@?+#�dKOV�<���E0�R�����n2��9jn��|0����$�������3�4��Cu�]��X%�V���*���sD�O���6)2�}������Y�(�?p��v���(�����M<����F�Y��f=���Q���V	V��]�;�m�{(��`�����F���\{<$��B8��P���i -�f�`���D5�`&z����o9r����#������=�������`���z�0"s�W�~���r8�]�2kO\����Z
'*A
@�R1�4��*��v�a��G6��}a���w�
V;�*���b��V,����BL�l�B���
y<�
��1��ei<�u��!�'�d�D����i���hB�<Z��_��G3�����>=#�V�
����,�B4`�S�<A�bcb�ka��&*
�U �i�_��'��&��k(�4�
���J�38I>��`}���mq���d�W�'%�������2�f�o-�qY�T"�!xL=*���5pfh����h�������J����H���&���de���7�eD�#\&`�S��.Y���b���j�;�0�-������]L����'�S������*_5"��+!p�������$��lwx-��.��a�������V�y�n�Z�f������T�$��8�����y��TaZjz��Y$���S����8�^E#�����_�o{��GLsJ��XK�t�heF$����q��peF��eW�6UG=qH���{�����3���q������]�@�A9�eb����L�j�P�j���V3��#X�<i��@p�h�6���i�n�@7�E7�DS�I1�N�9
Y��{T�0�
��"��I���{�Ph�*��h���J16?���
����_a���@�=�m���������w���^�e�']�0�|QJ��v�����e���$Cb�	��8@N*�8��gT���&c\���e&�=]�-uJ���WV��}�M�����B��������OG���)a"�����c�yS#��v��L��
����7e5�����@�xa
�Gy�~�w�}���3j0�7��������V��(�� ���=��J�`]j6!�E���R�6T�����i
�l�].?��:�;w��x�~��8�"���-��M�P��y��xv�R�xc=�X~/}�QG�_�R��i p0�cw=;6��L�Y^M�F��D����}���T!�'�nv�_)��D�����v��_����W�3��d��B���]�M�I��TF�_L���{[��:5����9��������k���^I,t���y��E�O$*��n���|ie������8��}����$)q�^r�x&����^CU������1�%K!���0'
IF����.L`�i�k},}7���eCh���ULs*��h�fzw}Qx����!%`�y���RB��U�Np< ]�����(��R'��s�jK���bG�����u]�����'��'����c���RH�?���6Mka@04l�V�gz�&��s��  Zi�|�v�X���?��?�3/�����#�@d~���H������@%��`�8�u�_\������8:Q�e>�H��p�m!D	m;6W����/}$��>7bp=\������Y/�H_�O�t�\����C�+�Xq�\��� }l[)��(~=���O�F���$~I����6�X��<�����(t�z�4~H�MVF���&�rYe�-'�kX�M<��@��t���0n��$�������PbA��<�%�F��/��T�-�A����V����M|!�� �3~����`�|���w%T��,�}9�|x���7>�f`�������qM�"oH�U<&Go���v�U&5���}ay�1\�u��:Ot��������Z�X��!�:4��h�J����?P���_��2�g�w��~C&��?|gn�Q���+0���>��������`&Y�iX�R�w�b`HX���B`$h���i`����;�!>�D�h_���'b>�b��1IX��)c����('d��A��%F�,����������0E��}X+��7^�������|���Nr��ol��Fb����7��t�U��,8��vV1
�P*��h�x��>\���|7W���^�� }B��G�VEjK����[&>��(�C����� U�����/�U���9w_�4�K!�^�+a�wS)��r�}#.@����+�qGC2��(��������(��y������p����.E�B��<�����V�M�n�h8���E�XY�[hQ8��/<��#3�d��{����/���2����.����:��\��5�/�l��2��������K*#U��(-�L�6~�iN�-7v@�
�bI1nl�{!P��?����so�O�2�R�c�E�J���p�z|������+�)���yR����2�U�^�������K�����.[�\]�D�-��
�������gO��D)�*���y���*3Zv��{���C�\�X�&F���&��=�
��D��}gX\d���_6I��.�3�� ~�"!�n�i������bt8�r^����Q&���E�Z"l�?1���Y�.t	�`��/���2u��LT�I%aq@���S����_�En/����$t�V�=��DhU���yd1*P�jJ_��wwH����oe���vvk�����5�-�(Pn_{�S�@�CW�f�G�>�Y����bR�G)Q�{����BU�#7^S�lakF��BX%�%��|��1
�Q�� v	���7���E+�
�9����E~&�^���;:D�O�4��6����|��	m�BD!N�����$3����2u��uB��&�p�9����dA��b*aB���/�����QC��N
�O$��:�`\�/"���`:0r�Nw�td�N7���%���a�Ab�:Eudx�����
uo���//��?L�9�f��d��Z5��f�?����L�E��|�����|j��k[	I����N|W�����*���k6~r����\nW��uYe���8q�v�������J�K����^�wa~|��p�,bfehb�Pp$��>���L`,��,������|��������
�IEz�;���D*���������
�(`����)������KQ��,rg���	�P��T���~�� ��Dg����S0�Z��h����7��V�
vOR���P�L���L2�$���15�]�2����s��,���!���1!.�^l�X��>P�L.|"`S{������\2����b���^*1��+[��"3�2 �5�:���+�X<�/V�c�s!b�z���G���3����7��v���y��c�}�&3�5��9�L;��4�%��������_��u�s���{�����z�p�Y-�)��)x��q�a��J��G���5b�j���'������$��[rq�o��yx�]�������b+�]	�H���UlPl�uy��U>�D������B��
����E"�IN��p����#'���,�@��BZ����L�E��k"�,�|0t�we>���V��X��4�s�,�@�K���mO<^q#!P��n�Zz���{��\t���VC�����.���J���� 
��~1��+(�nIeI9��~8O�(6Q
�7���m�����B������B���v��2���,EG�rkF��J��>����!�c�m���'�m�v�mV:�H�0�W����2�a�{���������+�����f���.���L5%��U�T�UG�~r���<z�4��~�w�L�9��A>�n���1���xA��-�cY);��J)d����'�;U7e������^A�j�2�#��4�U7-�QMv�-8<�r�[�w`���e�p�3����	|�gaI��q��`HXG����n�7
��b��x�W1�#���
��p����b�Y���NeU���1w���h�D�<���U�&���U5�+�r��5���0���qb�LFg��+C�;��N�g������i��hO���.1<��x��&�Ay_ n���+�-'=�+����F D����f���<��@�����$)P�Niy+P"�Nar!���{r9��y&2��8����H��?D�Ln0��y�<�����`9H����T��g��>���~[�rt����J<8�?�W8��`o	�<��J����9ka�s���+.�����NB�@}1����*�n7������o�h^�;��q(�>x�f�����8��MN!c�>��o�2�4��-6H�2���U	�*lL�!�n:?��I���c�����>�*C+,j?���pF��C����v��+����%ql��mI1e�u������anw��}��U5�r�v�DP�.L����G�
�X����)��L�y��&PbZ�z@R��c�0�t�m:����ld ~F#�Gb��4�rA�#*��bbO����N
�?�C�����9(�����:�0����
c���H�����������0M�,�
�u����NC��mw,b@7U}/�y��	�N���j�1b���w�bs�fJi�g1':����P�rc#7lj��D�q�f���u�d���g��)�Ww��H��b��#�@�S��eh��\'��B$�K�o�2����|�Am�p��])IG�2����wS.�c��P�W��7l�2cB���gT���{W*����:>}��2�(�,��'�f�B�0j���Z#q�-�s��j21
��M�P�I������Pr�Xk��r�XFk�J��##k�y�J��+k��f�����Z���?���������������������&���>%���������\��z}?�|0]3_�^���~U�\���S,���@��^�!,:
����qV����J;��qc��C�xv:H��[�04�a&��bF������]�d�������W��f��5���m�3`��7���d	��(�P��y�`FN��=xt�,@�
CX�H�^�u�!n�N�?�",p���
l�_��1X7=�m�����A���z���qz��\t���XT
����g N����b�P�
�.c��(Xs��4a�����-A�x�g$��&T��^
�o��H��:c���U�&)'e-�R��I����X�VzV���#�Ft��r#�������N����k��~<�|Q�DJ`��V�?�m$C�&����E���&���X26d��d(���mUMEO�*N'W,	
w��5jSj���d���P+'���"���p0����:����@�x�+���N95~�������`kj�z�R
�D�v����:%Az��:��U�����Z%�$����T���*EM��(	j2\�{)�'�[��P������q��#4���$��`��14�RN8w\�,H{�
���
@�������Q��+�
;�u�5K��e[�|u�y����,f����v�XE��!�3C���IP�	S2rJ&ata
�d�CUy���)A�3!MP3Y�$E,|F�e
6D-s����L�����lT��|C�d
�~?GjKc�x+�A��P�0����h�
��%M�F�pM�� �j��4	7��ix��TM�R�T���D)B�l�	��e�&C�[/���r��i64MiM<U:��@�_x���D(g�6��Ce��y��`|�p�a�'�8�U�3`N����X��������m���z6m��$W6��7U�LB�\rR������*L�B�d��>�.��W3����&�o��L�Z���	���J�:F �[�d��9E��L���4�w�>B�dh�5��M����y�-n}4(��[��#C��
e!��B�s]2�p��Ol�QGTs`u��=\�/��L�M:���*a�|�F����0�|(�Hq��a
�B��]��'K��������"���`t4:��'������5�j��W���<m�+���i'F1�]��+�0P���%2TDF�nb�E�V\Z���/��L�Jhp���:=��\�Z��(��O�M5��T9��m0���K���*l��-]��^�t!b�'$���o0D�����wN
N���P�/�x2���pd�v����OK)�������vu��HQp ���nl��o�(E���8j�zE���:�.��o�a>�Lh�A5	$��0�i0�

���|�X
���-P7O.0�f�����}�D�[�/ph~����k�z�Z-������.2n
���5E3xo`M�xe$��J�Xz��
��x���i�P�d�'�^P�����>��>��7�<jf+���DK�������(S��GIw�8��jX��D(�VG�X*E����H�	7��NO������XI-<3`K�{�s����Z���=�����[�IR�����=�b����	�i�%��X���������x*��N�]k�-�����~2W�
��b�HHJrZ��5��B�s>��f�{���@
�`'���@.��P��5�����'7�U�H%bc��
j�|�L���/�k�����&1c�7*9��*�;���R���
4�
"tO��k��z���az��J�I�q��P�����l�0cA�yr�E}��v�'8�0o��r��<B?g��4mU�z�B9?�z�X����U��'���n/�sR,qk �~���`Ie(�b n~����j�L*$_O9y������>DGO�T�Z����](��c,*����D
|�f����I����%��@����S��:j�Bh��7�&��9A�����sR�O�,��>�'����w���sf���.��A;u�e����;���S�
�9���c���Nf��P�n��T������2����$�lto!$/�>1B���gR��	�j�������Pd����p��v�-��i
1�ZZ��Q$��V��1��-1���1.-P���x��w2��p\�&�;�~,�XF����!M�p�;���x�����#-�]�\0441�yz���~������$H��y}�
���0D���L�
X�e������-)���r�
?�~���l4y&�|y2�,F�p�����-�g�a�w����H@����'yz���sC�%�x1@w���i����,�_��gV���tkCQ�K���i�]�B���'#������hF����a����]pcvL�������7o��S"4ZFCg��t���5M�
�����M��b�a#@@�2`�r����HK�fm�B��vl�[���	�v�380��q4��9g��XSzC;jLw�\1	ZK���x��1Y/[���wb(9Gj��!y���y��N'���Y��e'�y�/�&�d"������z��4)�����Hg��K��O0';[��:h���,��_77_���k2�Ew���7��D�N�hib2���T�$BZ��#���;���K��;��}Z(%�	���&������($6^H-���@������V�����Y~6o��5���<���K��t4��'��7���<]J`CT9��S�K����l(�f<A�d���3������� ����f1%��1��Q�Fz���v����5��H <Co[����T\�&�1�^��dtOf�&���V�G�EN)�Y����+�hj�8���+�0���[6���[/P`=nku2���u}p���gD����ouw�[�d8QC�b��n����|fAN�32�tL�����a�;W5��#��_�]�.U��;8�L�0��<X�;<Y�C}e�r����?����i���B�z��l&U#:N�d�63��J�3��w����G���
�L�h��}3K6���m�fD#�n@�"
����\�w��
Zv`���>�~�kf��m��e�-�9���w���;g@�=��(��&P
��}���h��`�I���YT��l�:�����e:L���='&`��5(6�P��V#�����oW
+��r�
���I#�����;�I�����@�h!u�P.7[_�f{Wl<���n+�����b�66V�2������!���[�
7��!�w(N�{%=0��<}�v��[��J���
�IB&�q�4�tR��,(�o�����z��
K�Q1�����Y��_x��~1v��N��?�fyh|���)!���Jl.$���c�#���R����+�&�����^m5c!�3�QCu-���ciFs�l�e�+NO���|��l@f�HP\�����!+�>�/w��C����B�H	����1�~���������}��8!�i�������}!�U133$c���]F42<8�]p���	�XG�������:.j���dHL�Y
�0����c)����������8$��c�%M�5���S�}f�{
~��������q#p�b�?���&�q���D�.X���S���u�GF��z��ER��!�L���>�E�1�4%�#������a���]�'�����N���B�K_���/�����cvS�M�A�0��hd�>��S���L��Ul���]���vK&�S���.��6�����_3������k��+�h��w��$�+}�+�����"��U�k�����$�VE��R~���p2��e�V����/����3��!��8�ya��
�6�a{�
�h��Y�fsb����w%
{�7PT���NK	�s���HeB������0�A�|���	r����eB�T���:�Y�����A��3��3��A�m�R=V��&6�J0O��!w��|�
7������,�B$��� 4��7O@�G������
���f����aw���������������i
m��B���N�0��m�7��M���Uu!�������?�l�����kZ	fe��������Y�����2!��s��p��y�������_�
���*�j�(5&��� S{)��9��������3a�����O�3M�V����?��Y��t��$�D�	j�-}���C2�r��^]��R�X�I7�~�����y��P(�q$���x�����F+�m�q�~��1���jfP������3�������%����S9v6=�8:�@,|LcH���=����+�x~�r[�?G3��5.nW;�6a������5��y%���
�+����������7���H���`�J��o3���$���Uzs���i&>����zz���Fai����~G�:l��yF�����I��)����#5�9���&bw�{����F&4��&����~�G��������������K�|�������.���aX �).�G��(.�r���G��^.nW��]��9�E����K�����a�����X���p����9���\���^.�zq�5�\C@~��|(.��s\T�\C@q�*�z���{�> �xk�������k
�����k
���a��U9:W����W�������dI\-���T�R�O��W��=WP�Z�|,e>d�F\U���-_UW{)s_��K��R���7�(��?\w�Y�����YJ�B���������B�������q|K)�Y�S��V?j
�EP�ER�"O�"O���Z&��Y��m���W���t���}����v���.���P��_Yg��W]g�W]g
�W]g�W��\����^��j_����B'g5�W�ZW��oG�����Q�z��
��U�_���g����Y��^����Y����g��2��U���~Vy*C�Y����g��2��U���~V9*��Y����g��2��U���~V�)C�Y����g��2��Ur�x~V�)��Y����g��2��Ub�X~VyI�����4�Pn��N������;�r�����jc(��I��P�WK����G)���*�1�������_-e>�2��;�r����]�2������/e��W�G�����z�*�:I7��G�d0��@����x�?P�
W,H�sc����nQ#�]w��.D��k�8�.O�J���}*ekb����)����Ct���;@0�B��:�#z�=H���� �����k����c��JH��kF-D��f�����?!�I�Q!0�����K���:r�\�P)�D�*)�z��A�M��������xG^�������e��;Z���
a���"]a�P�a/��>�N)
��`	74`�D�#G�Q����<�cg�@CY���
%���U ��������J��f���=��+E��.R0A7���Q)��P��bg���;@@Z������3<:��\X����h!�\�	xPv���R�X�~�v�FE!��;z������h�m6�&��vD�rh��-aQ1'<�'��0�1IO�����Gn+#��g�87u_p����p������c9^���=���!�M�o$3���J�������Q?!8J�Z�g�w�>�
��~Q��Rm���q�r���_
Pu����PIUb��DB�eV��Y����@���w%��}�� �Ee���D9���]q uev�-^p��wA���yfZ���C�����+���&��R���"����i����i�t����;���I��c�Z��l&���If/���H�M���vB-7*��JtlOh��������;���<%���AB���H��;?t!G�aeKD�}�	]x�n������j�X�:�[�*��[�4��N���AW��4kO7�2BMUY� c%At��w%:J:�~���
���}-��t�*V6*���p�C���R#K�������}_j/2h��`��_�2�B�sQ�$LCL -C/�m�m-0�����
3��d�L���F�7L*�����8��TKa��f9�uu�� �!���F���_U�ax�8�X
�J���|r3�m{���p���+�2Z���j6����-DGRY��DWJ	_#���h���������D��69�5�^�et��RF�r�s
A|��._�?�U1��'�&���6�Xa!�tj�q��}3��e�L(��#�j-Qq�o�M?��V_���NNR�(6�a",V�q���c��)��
����������J��?Z�:d\�Ox��M����3G\@��ut��.u�T�u$t�(�=�����������^+Cs�<���En�!����G3����8!�\8�&p3M�LzD*��4'������O��
q?��06^t7���	�&����������3XR�����)������	���Y��T�<������W��s����'+�zCc����#���X�{]D��p' ��&��'��"�������_2�| �C�����J�h�MH�b�]	�&2�������82��7�;vi7�2������������i����a��gW7$g=;}������l��`��3qnt� ������[1�����6�]�o�W�����W����bc����sP�,�I���-}��;B�3���-����J*�v-f{8����������a���po��'��#CI�q@�J��p������v��M�p���������7�XL@q�P5q��H�'b������.:lVZ	��Z��Rd+i������@�����*�T|�_�T6��F;�u�B���h?������
��Aly�1{j!����x��B$��;�<8��\���>�i�����:�E]~In��iQ��}�]C�Z|0��������wZT�"V�C���n"�]�z}B�P���a�j7�L�����	=���O��Q^����i:����@����{1#��B0���6�u�hA���D���Ul����
Nn�\�}3��j-�x�����kX kT���^�Jt�JP=-�#�WF��R[N���Cw��rk������)�i�jw�eY#�����������j�I�Gp��0Qe��_��j�.�`����>��yz���p��SLtMU:s����wal�����-�H�k����r��0m������|�"�Bk�'�����������2���{�irv+s���u�Re�����a�|~����I@�������g����8���8y2�c���w%NL���g�$+�8��-HW��X^��J*���"����1�
\�-�-��� ���:Ft��D���	�����������A��+���d�����6��dG��c./�����}��rG�dB����m'WK������p �u-�����g#��%�C>n���2�'j�q�a����y� ��V���
���t���B�Z���GxM���.���8�A�v��K9��|�.�����u�A�{���G���z����0�}�����Z����:P�����r������B���psb�������q���)U�D=�B�v�o��n����A:�}o��k� W}���4��2=�2��1�.0�	�9�s��t�����
�3WF�=#5-*���H2U�[A�iIb��I4c��w������P�+���T�
ZR1v���S�t������Z6hD�G(�����"����fS*ma��iQm�]�Zte����*/9��.D@���xj�a*!P�B@�*���6J4g�Ft��}��U�����LU�������+XKl��]���c��/D�C������Z���]�jq��F��C����s�����S�+#���09\�.��O���Nj�x��XS�����U�����UF��u.�f��V*O��"�z2j�|(d=��i��se�!�l��a�Ls*��11��73w���#��j��7%4�-���#�3�?�~p�T�����RI�%�Y�����G��!�L%�L�{���:&��n�W�g��G����i3I���w�8U�-�3�a�$2�)!4��$���A��c�#X7�=<�*����0�O&��$|](WG"2��-r6=q��d&����(�-��`�������@�9��������R�v�xa�C:-���{he��_��8���b�;��w0j?b�����/�D�	|��]y�X���X��#{:;���q��3-n��6��,���**3��'DA��	�$3�5JH�Z��w�2������������M>�w%9
F?���w�QT����,������%�
��/J0
��"���[�����`���<0��9�q�w�b7��d���<�%�!��a-��iI���v�T�iIbi�'g#{��Q���{�u�1v�%��7Fk�&�3��t�'��2�������;V��}
+���Z���q����'*���.��m_�`��h�m��P�q������`�=���Q�,y0���h�<B<Qq�j��7�t�\G�|��a��a��?�MW�p�O��q�� �[f�
��b�q�?X]Tt���'���*�M1���d��2&I�_1M@<�3�M%�A�J�~l�&~���1�d~h(�Xm$��C���_������\p0��f8
p��-T���g�	
�OV�F�H��Sg4k��J�)�I_DL����},����n�/�`��i�'LcL���-j��#��_�&��'��a�WB F��jo���D������6����6�<���������E�l��qK_��k�k{}����A����&0]SS3�&���5��w����^Y�}^}�8`����Z������K/F4�����hml�7�l�L-�`����j��]�0����'����W���R��4�I�\����& � u=�<�`A6��h����
�RSc��H~p�l�{%1r�LGuU���`A�K�?��<�A��j_��+�/���_����X�H)��J
�K�S��,��S`�SB���	�{��������pP��-N
'V����2��}&w���;�F������iP���Q�S�yBSy�K������~���Q)�����02[���r��!<TU,���M��"������"��"����(���nof�����2�5�R
��=K��\	u��)��4I�f����!v���/�����}bbK�S�{sg�`h�-�<���E��^F�F�[x���-�P������M6�B��Y����qd�SB���g�������D����"[��I�������YZ�V�@^X3��"��t�Xq�8��VF��X�n�����|o�uK&�8!t%�v\����X�8<3�q��:C��&I�����V�6�W�Hs������P�	sU���L�n�8i��tD����u�2����9��=<�q����	�mK��nx�������(-�9�� n1	rLo+�a��W7����^]	�����r5'^��-�Y=D�a��Z)�����V���{Ne��y�������o����n� YO+LK�m?13�<�+�������%Un�(k)N�mH����-����C��BdxS�}���G"P������B��N�>�3{lBe ��W!?Ehl�D'������Q	�������D�2�
��la�[��A�l;I�0���*C��LO�K5�mB%w�������j5U(������
8����HzK��}�m-M�E�2����������O<��V�����:�p��o��f�������MX�em����L*O���7\��j��EC5)�#S��c��v�������`�����}�R�C������}��������-��G��W" \q��b��:��%��pz��x| �I�����]��;Z�lt|�Y��	�cG��<v������������J��c��w!���������TB7��c����y43Y�����z���Uxmas���������s��(V�
�����
�aG�F���>��?|�!�hWB��g=rpn+�;��gfr��y�pZ�&�:]��O���C����h�wa?{[)TR������/�k��p�k�!^�
Yzz���������������P�HV��<�~�'��I�}�-1?}X�������g����_$B�'���#������%�����w���m���Ex�F�c�~2����%�0V�c�����S���q�f��V��lkc��Ps����u�������z�F�L���(|�&$�1�����~���MN�.�T&c=�����W�j�����S����1�]+Z�|5�4��e�5��	���`�@[� ��m]�����J����#�N,A,��k��~���@�g������9
���_�	���aX�A����VK��i��7��*DC��D��$���2R����E1�;mS�F�2������1���$I���U��
�P��;��X��%�u`A�Eq����b����P�������/D��X����s�},2:@���z[�X4"u���dS���P �4@S�A���G�_g�i�UF�����Q%���2��Q�~�T(4C�>�C9�z��x��o��v�45�����N���PZ���J����CK��*��w!T�ua)�#�����h�\�$�LsJ�z�0�LIT�.&�Y���~#m����V����eDS���7��T3�<�Rk#XB��x�~X���V���zD3�ox��;O�)+O�=�tp� ��!���Q��2	�8!�y��A44�~�T-�p0�G%2������H�"�4��������`A��Wa��<�q>3���t��q��n�WD*��*��%z
���0Z*1-����b'\���?�H/����f{�v��;"#-����;:e����]�f ���a�B�,�'j�.��������*
�����~���
n����@�8�4BT
�Ds&t|���B��������]nv�!>Mj�Q�:nN.?�Ph�+Ak��/�!�@��8�������0�OWl:k��V~WJ������ZAha��u-��Od����j=�77BC���.h��2����ge#T���O����IF�Z>H\�bX�LG�<���UKw��+!���P=���tbd�S�^�Y�����O05^�b�^��j^!o\�"|(
kh��[	|�N�}����a�2�!��O��s���d���P%J�A=�B��OLK��[V)�/�g�J\����Qmu��t�mq��<�.R��F�P���}!4A� j�BTc����)���.�������v&��a3���*�T=bU�~1���
Od�I��Fh� �/��v�Oe����>z�5�d1cL5�b�8��"����������_a 
��ND=�O�����.
��Z1�.D5�\�.�+U���*�ay�����6&c
�K����&�$���2	=7�*���sX���1���<Bk��D�1�;�����@���������d�+c��~����m����i�:c�m�m�#n����p�W3��n6�J���-��A�@z��#�K�nE������yT�;�@I�t�F���M�y���M����	�n���hy�q;ZJ���/�� Z�l��/�������6�� ���t~��������n
�?����6�w�nyK�=#D���w��q;o;�}iio���Y��M�T<$fWo�WS0����bh{�#��hko�>�0f~���m����&����aF�h0���8���[~o��+���f�o�Ad�6p1��-b�;�����|c \��[�N"�p�������J��.
Q_
�E*�Y�	�|����<8`��O���,o�l��X�������}e��"%�3j���# ��������m��P�_�L��6�nf�A�_���^�������tp��nN�o�[��kx��B�LTf�Q�]WF
�;k5w�Z
[u���NX���a��*C�zb|1�[X�J8d����z�T�1q2����	�_?�B'u�f����1�ndF�V��z����*<�kg���-�<0���W��t��z��Y����9)���rD$�,�Z+<�f��>f�2��e�-������������b!>s��7
B������I�m��%�(����!?���sHP>aX��J��meT>'u)� �>��5z��������Xq���Y�����x��#��;���&V����X�?rz5>���Bt��@����1:�����i���4F"|�H�YU�9�\~WB5���n7�`hfP1TTQu(��xi:v"�D�������/F�OG�;�����LPH��9g�G:�����P}rdtt��&���s����w��$B-Z�&�����X��0cd'�1�d>�������C���	���6u
���Q�ep�'3�7��eC���%P�y�)G�Ju�}�fr��+`���_�`
�FaZ�K��K�`��Q�4�%����sex.�)&Dt^���~��B���B��H����`#&��*P�^��K8��B4���M�H����e�J�'T�����X�zW*�f*�����8��N������<��":�(��Me=x&$(�R���W�As����PF���_L����'�J�;vat�#
|����7p��2��=3u�������VGS�H�p��!���}N,�k�7w��anCjhw�����	����?Ld�N~��L�vw��4��k|Pe0�QmoY�bzSsZ>�}4k~�d�AN@:����^�	4 ���OX��M��U2�s����aX�s�XA���d95�h�fQ�;h(��6���Y8�B���������S=[V~�������5��qd�:��@J<��oG�}�����s��L�z�[��xr!�����=���a/��2�1�����t/q�7b���
/�8��6P0�F�~S(�B84�7�T����R|���x��M��2R�e���DY��$w���=�����(<�=T�C'}�����C]�=�&�oaS�=�=��-I�=H��O�}��0�	�B�M���*#�<�������'��T�����0��BH����nA����������	����p1��	��B�-r���a[�ZP�N>r�!�a~D]a��e5s\>8�&�1? �b���f		+��}�1��3<���	����T�����	�1>���E�D��?���6�H��_y��
`��/*}��\��5�Cqq;��]��i��A��/��&O�|��G�\�?�PwHL?H���p�v	*�����a��$��y$$�U�Z�<\ -�D�`�x3������c�%��!a��>8|�QaN�
!��f	
a��M/�h��bl���I	�3M>��p�!o�9�N7� �Z��'�Bjj���!#��_L������\�4�d��>�Q�~�	���21����c���yG�0���>F*P26��ru�XM��pi%&f��{���Y+�N^��{�����������)����K�M;�w�*����iG`N;B�c��)������(��2�!��6�T{�"ne8���h
}�����$�{\��d�)G�/������1T�%��v���q�t�;`"���4	2DR�1m�o0]r$��5�4$a����a	���X�C�����t��1~D��Ws������BW���|��|NY����V�J��P�F�G���s���J���"�s
H���=��?��6,	P%la�#���R������%�O�)��@���i�d�������������%��.
/�p�p�|FE��Y�*���t��������'3�2:CP[�32���m��J�^�f�������&�f����~���I�=��mnpB���i�
�X:�5������D<&��zDLm 6��rkf!f`�uw��&Bk����f��)c�w% �{�.����T���4��u����G.�'�9A��y�9�=���0�'a��@:�l���pn��p:3|c!8En������W���@�n���R1`M_���F�u�K���N�����w%lj������6%���������O�;��5l�3Cf�"�O���+A�s
���11>�����P`���G�q�o&�7�9h��zS#t?>�Yh��S8:�����)M:�P����y��b�RMpJiU��-�94��B`"��$ M�t�9�Kw#mE
)����Y/��Nb�I���f|�,���1=� :��j}�"�� Ad��T���I�h.�[&n��>G�`����x!�`E�Z~-l���C}�x&�:�/��0�q_�8J]�LA��	{�*/��"��L�z�K�"a�%`[%��:NW�b�1�9Hs1B�p�Ss2f����"�����b�R
iL8�	������&n��lI��O[�@�[dH�-1��������`�8�����a���h�(!G�w�Pu��`���I�����U	'lUB��F��0ISaZj��V*�W������F��@&:�(�=!3�0����dlY�������1�\�h���.�������`�Pa	BK|�r�1�&����v�n��W�]e����9�z	[�P�}|�A��\�w��r=8���z��~2�&N���KJ�2\�P�J�� ��4���H'4�h
�3'�+Rmg�O6�:����b�D2�C���(U����="Ki�)\��|UQ\=�0v(]=�|UQ\���q(]���������_�������g/�=g*��Ki��
{�R�s���������g�.�_�T��.��s�W�<v��m���<:�Rw�\�up�2y��������L���.e
)���W�����$�����w������i^-��1N��=i�����������6��s��\;�(}�?�����Og�����~��������������?��<$���B,�k����:�u�ge�A���<��}�`��g�&���+���j���Jx �8_1�%���@�I!�1�#�B�(#�d�1������/����K�o��������������BJ��^#��O4���c���DI4ck(���0��e�FN%��d����gL^hH�<(x�����[�vj~�`D�~WB��g���>����ij�5�����St�1���<�������VF�$�r�%T�m�tj��D����zSD���B��x�L���_��r#"� ;�"�\=�1`d8����wF?���fL�`���%��*#X�y�HH�4��-��He�!�����Z�D��PGW=����t�?>��W����2�!��)�@4c�
�O��=-E�~!��2�j��������Jd��D���*`��O`f,u���B�v�H2�|�����d�S~��M�t�.�~3��p��7R��
�[X����}B����N_��',���P]�B�����!� %F)���xQ��e�������o�D�es����3=R�vv���d�+n�QXK����qa�8�jZ��3�����A�ER������kL���c�Ebv���$`�!���
'�������7�����.���;WTVf��zU�#!t\���cavFZ���!��S<d�S;�	�9�V�N����c5����(�Q��q��p���
��`� 3_,����{��D(<Y7B�Yi�������O��4�F��L���1�x��3;}��5����{���P4�=��h_�����=q~���h���7��y��\EZ4]R~�27��vn����U�MoK���?8�����A�C��d�Z�=p|����qao`��+�%J-&>fn10-��J'�k��f��\�	���>!a�-Z����+�l�h����2���;���R'r�N���!P��L,l���TV�p��O�e��*���!Aeo�(��G��n���PUcC�i}C�c�Bx�
�� n���Ik���t�i'����lS��q(��f�P7����Y-t�6�&<v��0�y�0n��b���h�h�Y~���L��.�����B�/&�����JH�.IX�=���I��9G�rTB�y��)���������I�?��%b�"��j��������h��*P*v_B&�w��~�� ���������0f"/��O[��5�����F�]����O0-u ��� S�qS��r��08���2�����0��y@`�U��F���)Fr��1t]���C����K�,0-�'~i��g����D�I�����,]Ni�}5����+�5�9%�����^����0(K'��qh��n#����n�6g�ei������.������z���8u������jx���^�q�-LSBGOf�d
4�E��3";���0��$����Z��o�O����%��C����ZYT�G����'���la�qx����I�%2U>�\�;����:�T��o��)��-���M��������������B�	�q�>��TVg�t��U�}0@&��g�W�T<&��I���z|�])&@�%�x�bUF3U?�X��������=�c�C���}+D��t�������M��Q�X��/�E��Fsh�������4\0�r#��4�����+p�3������Nh�~���Y��?�5`"4{�d��+��{/#^���XS�f�
G��h��~�a�&�s�`�
�= Dj�fC�NL0�h�yNj�����B.3�T���p�5�� DIT�0I���I$�.(o��F�������e����y���[��T�HHH4.�*8|B���4���c�q2�����U�*�8��$���D�������$YP�yf��^���	�s�F%�s���S,��9��f������fzWo�3���d"L�Z�������"1���I1NR��u�����������5����z_~'�%ef���O���rQ���o�&3��Lj���6����(?����d�5/
��n�H�u��0�Q��]��Hc�L%�1�^�&�/MLe3�1��Ac� 4��i���oBe��f���f�'���������8���=
����}U~�X+�J,���?���s�@OM�?bE_��� }��l���U%����/��'I�:8k�t2e��
��gR����N�r�_Y�wWx.������J\����1z.L�H���c���_z����'�z�k�4��LT�k�X�]�<P�<���x�E2�������^#5���OD>�\�c������2��}
[}�����0��;��������>
�_L�bFdl����D����pNU��n�D]Q��}}U��fB���n��+�Z��������[2;^�3-c���P�
����`����.�B�U�D�~O������\7},�������F��3Q��Rk��v�07)XM��Nj�+�Z�0�| ��X��	���^c����m���r3����7���k�ja��)r���{� 1VCZ�q�^D������tZ,��Y�}��h�p&*�JN�|K��HY?�->������ ����LXK)�p���b�Y�6��7�Y<Q�:��l+;MWV�c�m��on����[�?l[:�5f`Ty�'���Xb�	J�/���4%�W�0�����vns&C3�5��>10:P�Q����F�Dt�K{�d6^~B�l�c�]I��.���?���S-�U]t`�D�B��pl��y�_������j����z���E+3�^p���]HK��reP�{(�������DO?�|m���M����h�F���R����u�<���C�p� �2��=`Z��5����hj��DqD��7����if���SfB�����Ad[�~&h���6����e����A?��Y���B����SclV��t��P���X��Z��36��]�C��b�\�|Q���  �95�$AS>�����\�I^���2~>��X�E&T��J�5��V�1�5��*��v����(Ng���/�����p�������K�Dp�M�t���i)��
�4�x���������zb!� V:N�4���^h��5�
�����b��I�?J���Z��a_�v����,��(�z'�|@��`b�ke��&�xb���n+c�]19���mM������Dp��x��!{�f�>�n�c������D�I���s�f��,��
O�$J���KV�c������Q�-)�Dk5J�*~��[,�������a���{ano�L�����m�X��qH�L�����i�&���Z���p�P��a�'r��
e�M��a�����#�������Z�Lvo��a��Da	9�3K�j�7�s���v{�1����r�q�ZA�#�kB+i�+���2��W~�,	�����'��o���^E#p!>�o�~+��u?T���`�2";�r%�!Z�1I�
�������K�2c�]��+Mu��4$���D��H8�Q���i���K�v��`P&u�(��Lj������p�:j����+c��e��@@*���`����(���� \�	@�@�U�3��"�q�k��%*����t�,�������cS�\k����}���������?`�6x����u�=���}^���9��/c8�����K�O�aM+�����%���r��:�}i��r����`���o����q�U�����OA�u�	](�S�����]{��03]������P����� �����M���|��x"v 8:Q�UG����9�������of��g������Nh���T+��0�t�����)$�y1�|���Db"���z�}3�������_����eUS7�PS�[���O4��Q����}?�M�3XA���1���5��I�9�	�<����B?>�Ub
�J����RE�w"���wxMu�����B��}�-_�+
������N��;�w������P�{�D��G~WB�d��tVU�<�n;b�Jep��2\�>��+mj��@g���D�T�fB���2�6��>��]��;�yT���5���������
>Ps�]�7���bJP�M�QG�c`w7�D@��t�,��������H�	�2���1��������	B�]OT0;�K�M���ID}[���rCk��@[�If��/��8-\r���V��c��p'���T
�.+u���.�l��y�Q-
F���,fr�x��������C8)���]je�����~jef�+��`�3�bX��d���X�p���?-nE��l�<�����~� RQ�@��	4���;m�4>�!�A��J)��N�
�S��'(��<\k�'�f�x���n�"�YS��	2n,��w\�w�J���8�+������m����l��t!��g{��c%��$�O�DU"I;�����"A���i����'������f}!p�6^L8��`hg��C��&f�]0�"@�v�����\JV��{8C�����Y���bI��giF���^����K,�K��Y-��9��S��q1~V4����=�q�@����t�=f
���U)}���r���Y��Hy 5��;�b��������*�w%���z8���3�r}!.�����
��$�C%�.8���!��aabB,��k`"�P���3.��u�jX~gHE|{�8���1s{|���+�����nm����e!�����s��P����o)z$�b@�w�<�~*�������p�����������ss?�@��e!�1�XZ��UQuY
�>���D�|��U0�Z� ����>�=�J�2A��P�N�����u�
{�i��5{���)���
^���{@ /��\G�v���,�`�a��=~�LD����t�G\i��y{���p�x���C7CC��I7`�%��;�f"AlA�p�dp���}��>�i�S���
���m�&g�*������8�M��p��X����Ob�g���>r���>S��p�-t��������dD%�|�2����	=�-�<���w��v���M3S�o���fXl;Ad"CX\Iv"P6��(P�������T���GK��4�����Ws���������%'lC}U����]�t�~wsx�G�P�K�"�*�E�6� (��N�����o)y�~��^�S�XZ���a��?@��������t^������p	xr6�g�r��U���pc����%�.[f���\`7��@������F=A���c=�A2��;C��	�
|h�����:c��2+�(Jp�J$��[� -S��@���P��'�+lw�'A�&����
A��r�mxU�a��������L�����$�f+��A�������	6i��4�q���B��`�</�#�@��&�c����tv�3$2�n/��*�s�~���|����W���M���p����If"���=�>C�~�b�z��p�����xz�ohx��������z%��B�D�����b:>��Ov�	T�g�f`)������bF�y1�OF�<����`�z��0G)���0f%��aW�\GH��p��N�{j	�OW��G��f���;n�@������sy�{�e�c��>��N�nJ�������p.^f���D�$De!��K��R����tr^���#zgl_�)�2�^�{g��k�U�����e!8H~>%���Gk�3~h��%�~����p>��FtH�����Iq����x��1cG\�����r���������[~f<�i���]�����*�Hy���qS���������'���8��(���Hk�dS��|G��Y_h������nE��"����N�)?���r��1��FH����&��i����2:4nf��(P��b�dB1c=������_?�G� o�=����uNfxz�4�io�����K�{gSd&*:�O$���{H1��XQ�(��b����nL�.TU�P�V�#�������D�'�X\�� ��������E��
������(URpi�D����[B��!Q�8f`G�L��~�L�g>8��e/�du���H��ah�|"�i�e��G`��.��6���3���m����/���)�yr��C������	"k����?Oc�D��h�A�9i2u7aD���?��g�q'x)Y3W7r�5���i�174�A-���+ae8�X������8���-;���t��1�����b���|�&�;�|���dl2������v��
��1#��ef�&�E��.<�p
��??<���w��0(3"�y\����DB�
-�Ck�����W&�tH���j�+�N���<tv�]��:<���E��O� �J8v��������O8��G�i
8�����.���%���'�3��m�QK7�������UZ�_�\D�q��U�L�A���g�uhG����B'\B����tA3�
.���;&t����]
3#�9���������0��������O&xg���`Xq��6`��=�������3Q��X����Ip��qy�n��EbWZ����)Jo��A_-AY#ubZ9q�r�+��%�L�M�Q�*�	~T������j��'�X��+�p�R��+S�Y�k���'���}������\N���1l���D(3��`(�m��*��<cy���jT�U1cG�,�q+��	^Z�<��a��W��"�	p���Q)�����9U�,N3�a'Hx&9���m@�$������Nc�4X\��]�~�@C~���r[��tf���z}�X��w�rMM���@�[+����g���D'vk@���f�n�-3'_���X;���M@x4f�{�UV�1�;a�H����(>r#J�A���p|�M��^X*y�
��!��T��f���"��������o�Np�
h@��`�b�i��>��=%������S��r ��yh�l�&�����'0�4��x��u^[h��Om�X�a5��1A5S=�����y;�FG�6.���W^��g���;�<.���zk~=c�p�0�J���w&R���OT�k��� ��E3>Fa*�������D4�'�BWbb(����a�D3!X��sK��;�-�X�R+��=FI��$~W"�D@*���U��Jh���*j�u5��o�2�����L����B�F������5Q��E U�o�/����5p��{��C��%~���������g��Kl��]c=p"`�@w����������`��j�"!N��~��	�jF��K3��3���F�����I
�'������?j�2o*�n\qmS�M�hm�����4��K����S��wa0�>X�
�;8d��q���7�]��v�%,�k.����e 	�)�$���o�5;�=�����;u����&�H��A�9���J�v������&R���?������^����g�k��_J�~�������1��'B�9^��|u����y��D�*���U�t�f1�*�]��o����qU��/f`l���y��`bJP�V���� z��L�B��
�u&��v0��:c�F�p9j����;5'�#�����������d�fd� ,^'o�C��{0��n��
:,�%N�����y^��S=�y����H�+��������T�eX.��)���e���r�nX?�g��.=��1i�\�S�|�9po�;Rm.Z�r1�5�Q���TC�2c�_�����G������7C�f���E�O��Ny�.|��$���gb@�
�^����B���a�n��[d�:U�?���T5��{��a6�F��H �m��]����6�5�E=J���/V�;�_����Ar���<?���$2�$���1�1S���jp&J	�r�$Q�
���]���cV�3�A{`f:{���3�4aC
65fT}S�m��&yp5�t�I�LU�^��p(���J����$Q� 5���NS���g����9���3F.���i%��������g)���BN�`q-b?&8��9t�E���+��X�p0t�6j�&����4�$�pf 9Y6��{W
��?��P�!X\�y���&���WO'-a���_������^�����?d���������<��xg��]�14Y�~3��pR�8er�%���������p��+o��P�33�+A�����~�AK�t%%�*V��\$����'�JZp&,i�����
-�v����)��
g���	����1HX�R�;TQ��C�=8�Dv&%�*����3a��l}��������� ��Cv�CNLI�-E8�����&������q� ���1�(U�6����a�51��\Qu��5]�Y�LX�M�pa�ml���RDC��54a�5,�&�	��	�.{g$���
U�*���	g}*��Q'�g�����A�k���L��}��������<�Z�m�/��r���l�����if�4*'�$����J���:C���
�J���T��F������oh�;k8�CV]��A�a��K-hQ]���_h���s&�TU>:��@if<s{BE����iR��[��q�ob���<F���ys�����t��>90m����Q��N���6H�v�	��z��)�F.s��*���DTmf��!��p�Z��B�J �+u/V
:��������dGR�Dl�!�0U)���<7��������w%��I�"����Ce3�9��V�s�$F�o����J��9dv������_�n��a��Q���������a�;+W�!�L�)�Q�	��_~�.1q�e����������J����'1���<mD���a�M6�/�-L�aJ�g�	��SLL�AwVa����0P6O��p�)����	���|��$�Mxh&������8!����nb�em�X�H)�>3}����S��tL
�����D i��.�m.Hx!Q�NKR����3�[�fF����8�b"���51�q��T���
9�|���LD���L������Vdm��,���SC ,
�VS���]|b
�W�'W�l��7�:W�}���y`��.Xf�j�};b`��H�$����y�����q�J�G��w!����}��&�Wx��6H���.��03����%�&cU�����[L�8�����v�������2��NA�q��9���~� g�n7u?r����Hs�>k�I��4�
��4����i�5����Qn&J��l�y�v�~1���O��{��8���}�r�(��rF�3��_���o�����1F�\Dk�:����j���N�
k��73�{"�Y��x�����' _������=T��0&�����G���P��[��qR������sK?F��):��UG1%������/�a��O��P)�����	r�OM��L���0L}j��2�'��������?���-�_��Z�v�X�3���m�����Fsav,��o��gs��0�K���={�e���x|�Ck��&'+��wI_u��3f1�e�z�s���F��Tj����3#�rm�����x�)���j�p��R����.�Zt�"rbv��������I-QIU���~�`�r�F����_e���Js�v��
&�K2E�tF�'������R%���"8�PvT-�CGHDI��v���/�DQ����g�?d���C\O���6�,�j���MqFT��8a�Oi�����C,O��7�Ps��(�u�p,�^�4$V�S�O����{��/���{��%p]5�0��B��^�l�K&���3c�T����c����L������1F<~�b�������mwS���k+�Q)��)*��/���)3�_��585�qO�hZ�\#��2�D�.��T����!Vk��P��0��'�������e��w�>��+
|�}�jg��;M�������~4j<k��;�*z�����<�r)���X	P�7���q���	�3���>A�v���$�0|�(���JlG���4|��&�03�#
����p^=�2Q
6��x�!m���A�f����M\&��b����6Ue�w5���4{��$$�\CU&�h�q��Wj���w�6-o�L������;���f
k�	���������-��������������4�7�4O3���4�+G���*.f�3S@�����k,�K�*�?f��������J�!~�E�x"J�����{f�MP['|L�	�3��1N���w�3�������n>v���D:��LH$4�f�3�����O�����g�5����8f�:��3�����x��M��)�P_�e�x�1fL��������=�����>Yt���O�;L"�����������6;.%d���s�W�}�zLW��*�U�t����U�q���*Q�j���U�t��|��������3_={�z���6]����t�X��\WD�����h\=z�J��>g�����;�Q�zMW����k�(]=rM�*b!�L
�<�����O�g�t�I%�*��zY���J�����*P�j���U�tu*�����Ju-���m����{�+�tu*������|(]}�|(]��|/enS��R��T�w���Z��}�(���%�(��{����C�����L��7���=��$WS���h��k�(]�$�Z$����^��M���*�|V�v�(=$�(]=���r5�(]
E�W��~���:����:����:����:���z���6]����t�X��\WCQg�W�����~�����@����j(������\=sME�Us\=��ru�\��������b�����/������b�����/�����W�l�����/�������f�����/�������b��b��uON��0�jR����i��_�C�0�j>�W�j@\��|-e��R]K���?�����rW�2�K���?�����a�����R�6��-e�w�g�����A����N���*�^]�oS�(�AD��}�vZ�u� ����7h`�%�3H�_�p�x��������VY�0��c$$�q����
��8ste��[�b4[�~��,���R��iobP����$=j&Ne��R-hO��V�����`.F��]�y�$U���O�[��.�g�����ge2�4���#����UY�o�3�Q�eD�:�3�ib�P��\�C�!����,�G	�!^l}�1r�%C$|W���2B�����F�Z~�p�<_ �uzJ�ZK	a�w��;�����IQ�@@T���GqQ2�X6D���jeN��b�Sv��?~�|�EL�{��A�LN��&B"��yVfH���*	K&&A��Q�*���(4Q�X06"�:|W��,�X`��U���Gk*
Q�2�?3#d��K�0E���3��!�����
���Lq�K"����O���DD@$�p0�����C*�K�:���f��W�uC�5{��j�M��UOJ�����+=F�zyg��&�!��]_���*U�u��cq��6	2��BL�O�k)Z� �ph���b�Sw�����o�k��"��@���3%cH��X�D�O!�O����2�S?@���e��"N�\m\Z��L/�TF��]	��_�5��������a6=���a��?���c����J>�LH�_���"R�_�a����T���"�3�m�~�?�}8JD��Y��;���lf��M�_]�@�z�x�Ghc���r"�jO�*��p9y4�Mw������N�.\�T���p]���/��Y��;&����������'���F�>��aaJj[E_>2����]AaH`�G.,�A���az$��[��S�-����-��Q�*�3�R^��^3�����(��������=���2A�o�^���2�����~7���!*X��M/&O��9bJP2���%�
z��b|�35���p��/�me��Sl�S�^gJP�w�q�����	�_�Hu�����)����A�OC,���������dp+��q������oB�k��kR�^N�&Z5aT�a��](b��S�I�4��������/���Y��7%c}9���:���������
�S~L
p�7��CnM;�gHC��x�J�l����iW��LX�8�r�2M���	���5{h��;���~(8q�+4�
�D1���)�a���,� l�P�4�f���v�e5&�"2�
���c�N�_"s
�7�Q�R�`�� �~1>�	�d��������t��h�GD<?#*��'��8M�(7�Qj��2��/��1��x�(N��n����h�S�2�������$��H���O[6Z�^V1%(����=����B���x�G;��8��������~W���Ov���'�!�M's����� ^��[��7c�"��A����Y��8��!�(
�B`������(n@�#mUY����``��TRu�.��ppW�V���e��lk��Bu@
�������?p,9_�	�?>M?Zu'&��(���=�2��=�S�����TnJ�H�)2����S���;#��H9�q���5;�����2.���k�#|�E|j���������
�����J�O>�W���*_�
��mO����L�'r~Y�������+��F��yS�~�L|���{�0Usc�����F�W��P���\816��3����������N���l"S����S�;��2�{�w%d�;,���cr���7��#���F0~����#N~�{�'"�c�i���u'��
��^��=��)/����*QF�����W��^�4d�@U���+�'��0�8�*8����3�Lt�p�=���we<�=J������A�J��|���p]g�cEvg7��PD���7�~1(D����!�+�5�7p�PR�(��B�������:�P*=��}�{�8�}&��1�5�'?�XEY$��)a�	2z�w��[�A�_�29���Q��M�
h��cC+Fu�{�
��c����>.W��|������dgT��qa�E����G�Q���S��T�8S��v����VS�z���R\me�� ��6���1� ����a��T	��#7�)A�[�Pn!��e"��l=��J�����C����y�����/v���qh�
K8Y<|���
�_F�d�30��[;1��\t ��u�C���-�A����)##�8~��X:M���V�<��+����Q���hE�~��(�X�j�y~���a��,�y����	K����P-�S��x}���M�E��������_�����>a;�k��H8�f���������tU�%���/�=�����[1�NG��c�9VR���[�E7����;2%(|}��u�r��a��5=�30AXsl,��L��6�0l@������k6�l
G���lbX�F������A��g]�iLo����%+c5�6�L����J�,�ESf��+���M�����T����T��EhJ��]%mgH�w�����fN�	m��o:H��M��u��7��������a���{���r����:������I�`��g�\�^
q14���{����*xe�
��\�4@Dgc9]:������W��� �_��:�����>��BXYn�s�R�G��+���o���|��\
 �{�`���+�M\�Wx���dx!�6��S��D�v�`����I���gc����'k�w%�;�]C�
�� ��m��:xa
���P]!����
�G��mD�~����z&)�Q%��W���>�i��^(���C	[;��������IM
x���k�{���Z�z���A�.b�$����].�R1�`�����8�/�?���-V��w*�rj��#��ACV��*�@=���&v"����f"�x���
�����T��N�?df2��������A\L��=-J�SDI7����G�}���������Bd=�]c���S��'�0���D<���`_��[���d����]^�{.�Y��w1%�|K��'>�%���9i��U�����:a����S��$�t�T
�E�2���_���������mw;g��w�7�;u�1�aZ��N43��-w��~v��/��7������`���?�1�3���WTfF*�70��d�0��f�r���]���5m��`��%d!9������]�(j@�wl�XL	�jL���<jP��0a�"O�1�#�������fee��07+�0G3.�����-�|f2�6n�Q�D4@8FqN�R��!������$��WE��n�m�7x�!$���@"@1�e�����T���)��~r��V.��7�����A�����w>z]���E�NU���^��7W�
�~���
3��e0l�z�c�%O�L�`j���oI'kf<F�;66s�����r���O���,�O����?�NW�p8�O���Bf�:3f�~1MbD��>uYR������OV9Q��N�'�&��p2�����3��7���z6�����l��_0���_1?2�VlH6��e;7��RV�u�?itB���8
������|�>���Ae9I���������a��T����O|����|v5���1�y����e,�IV�Z'V��v����P�
�&r4�v�� ����e�'��13��
�n����vA���/��s����������,\S3�\S��I�pM�H���
;���sOk�s=M��OS����vU��=-��#���zm,�v��xhP�gja��fJ���]�0�CeO�y����y��i��R�32�kc��}��{�N��O&L�}�~e%0%55g{�$����VB�#'f:�E�;�&l�{)���<�A��*_�����}�z��aB�����%%�����@[U-i�������>�9��=5�=5��
�W�A�)�[��������jf���'wS�I8��p;&�iM�����Q����-�����Z��lu��pP-���c����C.*��CrH�,�T~��f�Qn����(7�������r������9�f����������3���`kI5`�S��)$�����17�VF8����0n!�a���V6��jg
����[{�a'��
^N�N�[N��K#R5��=�*~�M��0�~~�&��v������>c�����������&[��Y������}*�[+c�?n�%H��0��
'Z�����2S�+��
X�la�N���-�n�;�����2�����a�����[��L�x�Q)G����{�t4�W�Xs��L�����	�����[1�uk�)���#�}m����1��4Ft����.�}5*1�m��VDq&�����'>!�8����%������������x�>���WO�}������yA���t��V��kX:����c1tC�:������8acO���;l�8a������	����)���'n���veF���j�qq�=���[$c������7�zlE���`��]�oI{,�{�H���O�o&Xa'o��3{l2�a�UHyW�8�w_�\xW��tg"4qsQ�������|a��B
�e��%�q����	.gz&_���]Hn�U��p����D��j{�6����k"(�%�;�E������,���E������?|����(��3%���~�]���W���s��;���m7��uf�%�����b���
hR�G�j#G�e�{�|�����SL�d��!�d��������bJ�����e��
#�?+1 3���yDQL	���"�@@�v�3��~W�|�]���
��������W���_����o8���Q��e�U�A`��������a�����!�����.�~m��a�*����aMA�z���2�m4����J�������5���+cc�
���0N,����z�����2�i��������.��1�����z�a��[�Gq�����b%��C��;���1���D��6B�raP{�ht����q[��KVOK. �)=C��5��_��1�y��^�?�����.�f�w?�lv?�E"�=e��Ck/�������
%��w���"��/��7� ��'��Rd�'-��u�D������?����aB�6;p��2MH6���/���y��q��2��m�' ZiZ�x��MH��\���i�=�6#1}��dl1������a�jL]�����x|3g�kE����9��|/��A���\�0L��b�*���D{��\*b"�����%i,A,D�3i?B��������vl��l�2,��+�.G�y{��C�����o}��Lq�yE����c��
8�\�x�65k-���M�5:��V&I��U����N���X����>���
�m�9����Z��=��A��>������OD��7�G��qB����8%��f{_�X6�t�������|����@�iz�z��Uz3�o����Q%���2��3�0�v)��b3����C\=u��@l�qB���4u�����O
Ub*�8��PC���0�%��,��wi�u)���dl��a5��HS�21h��]<X�����AF����S(��r�~13��z������v1�A�����<3���@h�`�}�|��)�]��s]4�z�#����Qx��f���d������.z���p�������2	�8qu�>���F�!���C�,D�v���������#^X����w������S<
���!YifH���T�*��%z=���2(���VA[/�� B��bS��1|��j7�<��j!^z�~HF�
��!4�&Qv�������L����#��wT�`4�_�C8p/��4�H���9,�e���;"K�(��D���X�f2_H������w�Med���&������qi�p5O��Pl�+Ao����!�`�U���/ed����0���0k��)�])
�5��O���w��}8V�>�D��]��V����`$Z��F"�������ge��=n:s��Q�[{�����D��5���1l�5���KkGZ�3a���Bx��S���������'���\�OD�&�W����^C�M��UC=�3���=F	��1���a��cF����Y�"�/T]X�F5i���OLI���^���`��*��5���WG����D4_	5O�&��:Q����m�[L$�3a�;|t2��Z��ax9�G��f&l��vlR<�T��J�/f��5�������hY
|�v�~f���e�����iZ�0�9"��fRLM��+"���Uc���71�ZI�c�<�j'��B��P].�q�"����+��J�o�n��ay��G���L�6�p����&3�'Fv�!��e�?���2ny��0���_D�q�;����j���3n{�!�_���ma���w�5�o��w%dL������y�L�X��eho{���q3�2���-X��=n0�{ �T�������nMD��������EDX��T��-��D�	�������m%j}��� ��m�C_����	#�>}6�K��N��'G�Q5��H�z��'4�-�w6����V
������	;�$j�����vmaY��Rj���-�i0����bd{��F���X[7�������������m���,�o������m�w���>�O����"���)(��R?n���P���&���7��[�.b�'��d�����L��n
�
VE���<���;'"*�����?Y��"��y$����wf2�9j��T_*Q��MwS��`%�+��qz;���T����i��f�n�;|�??1%�����/�-��i�\��%��
�v��Q"r&X��*���Q�]��;k���@�j��7hw�p�F>���!y�4�V�G_��\.nt�`�u/Pf�w9
�0	�_�>�L&u���2�M��>�p������I�{;����_�\O$V_�]pBz�)���8s�����s20u�������7wfd{��"�po���t�iw�0����l)ND����e���@��&����N��G=��}��4�!��a�O@@�6{����K�j"s��Q�;,�YI0H��%1�:�������9��G��oq�|p��}b%[������Q��)�D��@"�5E�%{gb��/�p>�v����'�|n�R&s�]	h�+#*�#<����}�������C�:����I8M��
����`��'x�H?b��}�l8$`d�����9ch&�bC���1�=�7#�6p�	 #�
����
I"`��6�@N�9�vL3�v�;�+�C0�����X�	(k�8�.��/��/@�dF!<K�J�oQ���-��y�)� h�b�}�nr9���[���7��a�{���
�p8ZblNAi�ef�Cse%c9����K�`x���:��B:2"���28����H�'#lR�vz��D�F�����xZ��	xB���������R	_4S5��~1��3	;d�����`a�v�g|JD�<�������g�b�� %8Z�~�������[��33_Zf�V��Qc��'���v���7h�f�Ek=u�QG5�����)a��<o� ��fg��F���;�&F���
����&��|��p������=������2��kb��p������������r`����_f���*@9�=��za&��,�>i#0d�U2���BKj6�\�4��1��Og(��w�,�����`W
pf��7EE
H&)�{�+��[��C���AtJ�=+�{�wSm���w�L^�3aP��������23a��h�&u�C�)�^��>{����[���+���U���@�����^������KX�
/�=�hV�@����7L��f"�T������g
�v%��F
��0V;�%Ev�(cxR���H@�I�`���U�-'�P}c�CC����9T��,�w+��\��$�w+���>+�9������eh����}c��>�PtE?I����V���'�ZT�P���������M�',\��w!B�IF��V9����J����B�������|���&"|���E��'�'��OB��z}S"��H����~�;���M��=���.��8���L�E�8�B�]�}$x���<����+���R���C���;�1�P�M���`����b|�����W������;dL?D�b�a�w	��3�9N4��N�f	Yj�_3�H�<��p�f,����������~PXN��'�{��w41��
!%P�|#�D��1�i:~��{d|JB��&b|�ao���,H��[�|!5����a#�?_��]���m|����|�aoWXcGx�<�3�����.:3>�������ov�-���!���q#3���K+1c����	>��:3��+��a�gz���F�:��|��A�������y��~��v�i���,,������#w������w|�������9�}B����]>�$y-d?Kf�r����Q���������4�s7dJP����|��&���L�/��]�|d����������uf�D4�������1�s��"���#�
�'������?0� v�M���I�����1@�
�y0�BB���9K{��C&j"`��H��"�6<�����L)�xV��(��%�X���������%�l*������:R�py��[�~W�B��O?�(v���p�����!L�w0��?-D�Q�3�Jx���V'l��������B����;�9�  u�f���UM��Nq�������}�?��~�HOj�p]�Y��N{���@13E��Y����
i.��p���s�y����if$�nv��c~�����_\����]	Jy���E�].����w�@{�lm��Aj.�w!J�<������W��$��>R��Q�o��0�!�w�����4W������~&���}c�w����c=/�g	�Q/�BwZ:i�c���J���OA��i1��������3.1�4�{���;��8Nt���,�����=���111=|��f�����t����D��1=�l�4�1�OQ�����/=`Z�2�Ig*���44���jb�hs�C[�Rz�
���� �p���(���4��5�AC��i��p0����)���qWtC�b�p��z��L���I�j}�I'Bp"�����D��0�p�t��S�����>�,�
�
�(6(��Av`��("D���\�����?�T<S0������]�Q���wI�%,�l�$�'}<]9#�x��J��pg���q��NKIRF��s�i�@� a�����x/����5�kq����w%|��`�A��k�Mw�~2o�����A�H�	��7����H3�ks
"���D�*��
;}H�����GZ��_M;����VB��v��p( ����$^s#��<��.���%�����1Z�(������d�%s��K(�>������Qzx���fWy���q������Hos���M/D�])�\w��kt�c�q�T�N�B��CR����C��}�!���`}Ni1�%l2�d=>gN�V"��%b}ink��!�[�}��1�6E�jS<�v��R�4����`\WOD���D���vW��U�>����vW������������*��F�y��������2�j��W���:���*��.e��B�x�������4�qU(b�!��_u����:��cM
�S�"N��=�*�
�S�"���=�*�N��������'�X������������*�H�P��9m��#Y���_�������(����\�>w�`�z��#�g�<���)���~�����?�������������������D;��y��w��������qL��vt2A�Q��#@��B�;�y/B-T��O�W<����	�7#�s���;6��+���y��8��}_�_�b������N ���9s��9����� ��������(�f��	�=o�`���w!X*�q�y����d&�	B����G���v��1��]	{�FuE�:[��fTP����21�?�����g0�S"p�*����x�!����!_��J$h'4Nn���2@?��H�����y��_M_�����0i!�I.S0LG��y��`�q�Ng�
^
d�jof�;�HX��o�������=$0Z��%I���|�t���/�K����������+c������Dq&��H4'M8��B
<���L��_4�?$a�u&2�:c��fN����1d��9-]���"����7������,�x"���"v���f�E�E?�f�3V�V�	�-2%�K.�.wN"C&8�������Q��J�=U�(����d����D�o���d�S���xW������O�&U���F�������o����g�e��{4Db.ml`nE�q���,d�|�9��w�H��Ex��l|�� �"��o�t&n�����|��3s!�C�^�xd>�:����\
��zI����=bJP������������6�#T�������hO����o���23�Ke���^G�H�	������!(#}�z=n�lTo� #�:qx�CLt��s�Ej���@?	�+#�<k���}��W
�Q����\9j-��8p���5��*�� ���7dnI��Pa0\�m9a��^D�>2>�cdQ��p+(�TN�13Wd^�T-�J�D����{�-F��[k:�\��'����&\Tj �� ��f�0�s�u�V��^�q�����P7q/�������~���j���8�}�e���@����9S�������C���h�`�7��$�3V�Pc�Z}S�ss�BD��n���u�����*_��i'F���1�S�[�)��Mj����������F�]�a��
�k�.��ge����x^�;����.��YbP���$8>�K%$����G���s�sBS��0x�1) ���JI;(��T��P?c�bLY�z�D}O?��a|K������Bf����n
r7y>,���az>���G��SV*c�W7-Q4��������Zjg���1O��4;�4V���A�T����
����D�Ap+D������<:��6.9#���J�P�U9?���U%�'�V���""�pf%BM���L���pg�Z�=����)A!�������dB�a�fU�d04�
���D|������Ya3Q�4p,�����ha�h�3�q:t�����l�+��D��4�NL�N��p�E��&[b����
���%�o��Ju"�����3N.���������B�F�z��h8K����a��:a�gL��)V����e]�J�D���u<S	{S����fu����!��
�����p�#Z��E��pk�\aA�i�'�]z^3��O��[�?��8�����"?�%�x��$�n�X��i����%����C;��3A$�	�]x���q�6��p���7^.�J�;3H�=�=���e/
�i�����=���H��E�`B��q�����r�.����c76o�D �yW�ve1��G/1���1flMI���{a�V\�"Dwwo����O��
? E��fG�''�J���	O������+��9%�.����c��0�:$����|d����A�iZ���'A�k��AZ����s���_�#K�fCR�)E�L�HVt�o��df����I������P�������"19��y*�5W%���y��w%s��(���fY�r}+����w�\Rf	mz�)�W���9��~�5��y�f��uD���5��#�Z��^����c'`�0�N�=Lr���]��Hc�L%�1��C(4�/���1��g�������������q����c>ei�����0�r>���a������1�^�4��0�XV��@	��y�:���1�S���\������\:�9� -�J�����0�{=�����yi��nqC������ \~3Q���%p&��4��LT���Ww��sa2�������W�D���
-��V�	���������y �[#��D��Z$����^�5r����	�(����|����K�DXg�-(l��K\N&�������+T�_��bc��0"��`�m��]�if�s�*&�t$�Eu��5�4����D�Z����i���������[2;^�3-�c�J�:T�NhS����Fq�3&��s�p��$��3�S|q������Wg��0+��^l�p�����g��
�(`����t�Uk3a�~�k��b?;��Bb'(�	^C���|�����X�0h��|c� ��j@�"Ju-$�����sj��-XU?H������o��)h��'�}X�6D!����R�������a>���,��(�OM�,O�ee�,���k��L�?�?l�z��0��&O�35��$�{_�w��+�M�Z�A��p�A���~&C�s8����>10:P�Q����F�Dt����4�*���vWR����f�����U]t`���B�����y�_������`���;����e�2����������y'�3/b�+�2��O��mS�������u�]�\s���1������.D��+�Oh��d"2��&���]N��?��>��j������P��#tx����	Z��(�=��Q:3����D�����B�+:B��(��q�-��f��36��]o���Pt�8�"c�L��~kj~���U�����4�)�B����![�./�"��d%`���\�1���`���P����Dql�������w�&;�+E��b��2\`����0(D-uG!�fa ����^��1���d�LH�*�&�OhF�����b�������)7�skU_T0�}��1v���Xg����6���8�X�Za��~�_&����n����plkb}3����&�����34I>��`}�$*��'O����fdL����b�f�cm6��-�@OUA"�!z�%�	{��`D��]��!Z��Q"W����J ri��??+30�����a<M.1%(#h���O&���{�|�"f�I�a�V���'(ThnX���	��N�'kX�#�������tD��:y�^K����0���(,!�pf�Y��n�Z�n�8��^�V1NX+hq�Dg8b�K�Z�2�����K����Y��-�B1�<�F�B|����V~��~���o�&eDv��J�C�2c���#�	M�pe���mW0��`=qHS�2�6�e|��r!����]�@�E�2�<�����mb��>,���y<����,c@<c 8c42�At���F7�D�c�6�m�5�tU��@D�I�i$��W�!�D2��N�%���*��}������rU���g��t�~P����k#�^w��x����X�s����0������^��`kZ�$��lSH�j�������\`-)�N��o����q�U�����OA�ue](�S���g��k����fL;��WJ�Q�b~3$�T2��iY���OQO�Av�-@MV����e~��R�M���o]����	����
�
�t�����)$�y1�|���Db"���z~|3�������_����eUS7�PS�[�6��E��y�.L���3����3>pf�?{�t.��J���V
��k��~|6���~��	������Dn�����5�=��B^c���A�|Qh�4,�G�w�4����O�3����P�5�C"��#�+!X���w:��D�Y�]�o�2��J�[����6��D�3���F"m�x3���LX}�z��pz�NpU0�}�4��g�\����3��D@��
rm�TV1%�{�e���kf���*|�|(���^$�L@��D��1<�5�}�����m�����'*��������z0��) .)7������Y�$3�~�2��v9|�8�Uwx�:�������;fF�j���B��$�p��gS6���j�h0h���f/:W0����������C8!���]��d��S����J{���30R}���j��kQ�FV����'��
�?G�q;(� ��h���= ->Jh���x����Gc���HW��,�'V&�Ac��Z���"���A�bi����>Ed��E/���ZV������i,���1�A��(�';u`�b�<�g���+3Dag@�LP{	s}e�7�6a���{�-���y��'��Q�����L	�Bb��XI0�t=.��H�H�9��/-�;d"WA;6le:���U���D	&n��c��2��'"m�a���������;>�R���={`)E	bT<��f��I`����kfR��+����H��=���3���M7�����L7�L�����_e���������/xW�L�)5���]p��"
�}��4.��M���@�w%��rp
(� &D��_^�G	�a��4.��6)��.G�������LW����}�3�����H�?ax��?o��W��(����w*����������<�,��S��<���PO=���00����14�4y3v�)�D�[n
w�f�7������K�.�-��T\&��	~��*���d�8���v�|�KR7F4��	�|W�
��O�
�Sm��Q����8�X�g�n6��R��#��/������k��0i�G0�:�P�$jtW)S�
�}���n��L�|��]�Pu��&c$�A)�9,�L�����������i�����F�~V�0,6V�p��-��4��Y��z+����W���*lx��~�}w����|�U��N��n�B=����������������U1l���	H�������-�g�6��bpS�?�rU���B�m��VV�^�/D��%U���������?ou#�����%���P����1%�W_����.l��Kzv�n3���a���m�9Z!nx�?! wD1�]���.l�'�C�ZxfPv3��y��c�\������u`��������t�s8�r~����O��S�x�)�tX$�Z*n�e�@�
�_����������ObA�M����+���0k���:��_�(��d7��TR]x)VfT���>�w8��KP������Rr��w�C�{xT�>��D��������	�5
S������Cq^��+&��)J�v��p��T_��L��
� X�T�����M#��52�_L��QJV��$;3��>T�=�d���6 R����V������C���f�=\Uf�����>4p��}s&��oM-�8:��.m�gA���S��mp������M�'b�`��L<1�d&�~����B�:��uR��&�p�9����d�p�E�Bh�;����c*�����'���'�r���}����0�$���d�����C���7r'��H��@�&x����	���a�K��Ri�F�G����u������V6����f>�C�a�F�n�zNd
�%�����/�o������C'�#@h/��D#�m�:f���������MU��<m�X�Ld���@��E����'|H���22�Y(�Hs��v��|+�g�V���q�H��v������U�2�H�|��B���2?��������R�W��y!��}��p�L��5q):�c_���x%Lz��g�/t&x��'(�o	�^�9u�-�������J�������B@%K�Z&y�$�02cj��]ao%7�5�<�|�h$}3���3�1�����$����p�8|����E����Qe�
�3�g��Oj��[��d���;�E#�])Z�w��*Z\b�]O���}���������o��r<t?��'��d����3�l
����S�]]������_�%B���������TO_3j��"����>�#��^Q�
�(��q��l����<;B��Y��	:l�`����(�������sW�y ���������{��������}!7�Lx�������F���/xgd�x<Z�.�����V=*P���V@�s1����b��a2�6�J��l��]����p�����+�B��<�w��7hO>��0������|nZ�[�E�����8�/k���E��G��A��pb~���o�+*��S��
&c�yN�Eu�N�o����:���/F^�2�?�F����r�5��C�e�>���/Dx��S2�������q��V:aK�j�9^"��
z��=���B�"�Z	g�x���f�������Ll�Y�8\�#�qh����
j���eh{l
i�����q���[���L���Q���������xul2��=Tw���.�-kDPdk��k�����-e��+v%	����5�#���h��M<1e�p��~T��\����rT��wa8���s0������oL����Q3�b�F�_����X��Sb�y������*�<�.G����9kXX�$X+�1V�6&/3�������b�um�0vN��`�,��1�J����B@��	r�b�2}D��~�	t6i�-�ZML���H�R�����a9�P�aY6>T�@�����z������L�Hf�U^�����u/P"�N�LW��������)g�N"�q�N�'	�����������~�X���	z�<b���/��t���G�N\|�-��w������J������n�S�w���6���g�a@ ��a��6��WZ���w���v;��b�C�~��JP�&t��_'�3�U��4��0�g&��r��D?�'`v/�M;��`��`JP��la�4
/ �Ma��J�����_o�CW���W*�����ge�?��: �R��.�w��SL���M-j���b������F��&�{�_m�i3�S9��d��+�1W�����T,0��d 2�I@�-���T7�|����c93��e��3����f��#�p{&1��z$gb����A��3*��b��#�4��;y23������������_������Z�3�as>�y��E�97`���$��@����q��gW�U7���F���-Qd�XU��V��ME
��y��Q����0M�l��va�.\�"��\`hNDh����MU���z^�?�Bg��p��P�����L�#�L>����� �'Z{,��a�,����6�����~�L��������(?�m�(u��[W_�	?/��c(�,41�S�EGP�>��/q���4K"
d�E��3��3S(�4O��2����)+C��)���~���Z��-�+���@M���T���u�q�yf4P��T0���
R���i�G�h�\J�zP��N�dL(��/��r���m����Cv�'�J�;~��sC~����4�G��!�95��w�������������/?_����������k�-���HRZ�������e�W��\��=]���}��@����qU�\�����;Y ��_L`l�,�����P2�)!�W��lJ:��N��LT�
�)��v�����/2#X]����'���+�I4c�r�^�f�b��Dh��M�Z�!�`���u�%B��=h�-'�	*DC��mX��"����X���U	�)��qp���Y���{��$�i��|t��B�U�L�a�'��h]��'B����oi��.��
���(Tz�)���zWb�[M�Z��iI�&Y�P3���g�k������o��k���������[!s#L��+>�w@��~�)7��X)|��2z���k�gF� ��u'�oY�������j�������l�;v�;�b"TT�k��qp��T�%~�L�#2�T�DF�I�%��]�_ �mz�{Y��)�NN�v�$���&F��T�&}�|'�P�|�=E��\���
��J�������>��������|'CcI��%�T~�.��1sx����dz�}c��2����F��S�b����9���+LcSS���k.O	�W���?I{G�y���������t�cLKj+*]��*�I�����%��V�z��u���N�s��`Z�����{�M�U"������0�l:��HB���Zh��A�a^-��&��&n6�g�������~'����d}���������1��*���=���CT���� R�1���DY^ak|��z�����O.�t�O��I��T��+#��������I
V��N���'[��i�����C�	8J��2�����	[��	+�4!'�B�|G2�AnIV��3�YB �o�&T�i�J Aa�u�OV� �1�����,
�4���B��i�������h��u
}x�&P�A�><u;r(;����%��<�
�2����;�	(�t����]I�x/��	3
�OU��������;�a�UJ�z%E�	=X&�l��=x�+�M��P���+L�gf4}(]��V�#I%81*'{3%��\�IV"$�y��~�Q��5I/r��~�)�����V����f0��%����~S&��&��x���I��i �B���@l
#N����������H��#���W�n~����H�e��(�UoF����QuP'W�m��`m�����$�r������{N,�J��WHe��jD��L�t�1�H&BS���Ek�4�W�O��T�8�U�p�$P%YV��zL�$Ub9:�dF38�zx�r]�D��e|�
^y��F�\y�����$di)�S�\�
q�V����'��q}9�*�2���'3�qd�-�l�������h�N<����C����wj,��>8��u�U�������r�G�����^wD�p��N��f�&�\0��O�_t8�$'cA�d���g^����@�nT�8��R�2�3f	�yu<D�������z0~�����'�������<����e���N�w�_$i>0��&B��.�C|f4M��|�c1	�9�/4������3&&0N�T��bg����s�����ZHRa����I�y�b�[�P��6;H��y18�>�Y����7�y�[h<���N�M���]*d�Qe��g �����`\��
������
n5���2�Bu��*�������!�I[��I��zI���<w:��I��3'S4%���
-��o�0�al;��YU�����&��c��4���eW+�L]j"��{ ��f(�(N���oB|6vA2�)=������
`��v~���e�Av�1�K%���K�V���Q���)��[����}@"���:�l�be2�.��BdOO�	��H�����*�w�-=%o�(7?�y����=f�1����b��jbd������)U�J���������B$(���Q6�x�����=��PG���<n+}�<w�w��p�4lfFp2��6�J�1*�b3T�w���
�h~x�v�8
���	=�|{��RFT���O����,
u��r���f����~����Am���O����9x��Km�[��&�
�]��%�3��W�u-N��5�?zt��������&"Ch�#,+�PnYF�z��a��Z�D��`w:����
���+<�q���=��D�����d��z���/�8t;L=38��������c��P_|��e��J���:��./��L�L�������;�a�~���
�}���5:'�p�$��0����dHLH�N
'"�c��yc^`��S�Nb?�4�a���c7\�W�����DS7|��r��Z�'B����"�HG��]:���{GbP�A[f�7��$v>N�c��6�����`�a��X���~�{io��U@*��=�V�c7�8:J�t��i6dl�>Z���n'F�%��Ub�V�@9�k��	�6����^�s����=�U"��AM��N���
H5�n�$6> 2Td���D����~;v��3��v��0y�9Q01��7�R�����*������08)g�P�75�f:����0���~amuz���bN��~ji]��L�
&P��e���iU���M����y1�|	8�e�u�(���������s�%k��L�M�~�XZ��9�t���a����"�vX>��.���3o0���/��\�rb����J(���'���A8�`�1~[ez�na��3�=��3�3�����JK��X���H<�)yZ����&������Lg[e�31��}M��W���,#g���p�����|`��D�������}fe�7�4�����gg��6m<>�X6����y(��#6=X1A4�9�+����M�`�)��h��U�'rt,��N�/����U�JF�#���!�O�,�We���k'~�����b).�����V�S��+^�B��������{�t]n����;Y����������[��M���\V�.�����}�����$�H����U._W�|���q���x8.�c����K�����t��ZL��Rk�qy�2`�|������g�5�t������^*0]�J��e���(���{qUQ�zeJW� ��*��CR��U�tU���*JW�3_U���2�����jL���6�]&���U��k�^
N���������^�+��K�	��^����G�1dz�z�,]0��^�0u����s��kQj�IL��X�����$k���fm�%W*P�Z�xLR��"l����D�%���q�q]��Z�uW�E���m����]�U�]�]��C�e�]�m�]�u�]�}��1__��e�����|���
_tz\_����C���]������B���1_�K���/�=�o�����[��jS��_L
^��E��1(x�/��������X��c�W�bK��_L	��gK�W�bH��_�^�����"x�/F�����������W'�4�!r~����I���W���]�&C~5
�a@����������c*�(�S��������r�_��Rp�q=Y�����bHD\/�wZ���O���z��;.�/�]��'�^W]�dh���K�5o��,��2<��H�*���?J���-0���#W?/��a����b������">���+E6�Vi��O"6��;3�����W�)p��1q��n�������h��P���-���L��rm�W����c���M);1M	��F���L��������a���Q�4V&cH�
��t�Pdn��x�Z]���h�e�3�~f���p��(��	C���B@�/�}3�n]�	���@YQ�����F
���dF�."���C�����C�Ls��d�]�X���g�7N�I��ga�=)gT@7�,��&�zq�h(�n��v����L�'���]W�f�w[����}�����}�`,N�i��1�<3!�8�?c���$�U/F�;�0���t�����^�9|fBdN��:f���������PiR�-����d|��T���`/P5B J�g�*�������$�)��K������	U�*$���]PWw�H����	t���RuXK����.C�5k�oBk�*P��uK��9������^��@��X]��t��/�.e}�U�Z9t�Db_h�D$(�lzV���h��y^������=u5��.G����a���v�(��*�2��t�~(
q����;��9F��1����yF�������K�~fBGD$��S�!M��3"8z�H@=��[:����~��n6�����b��=B�����JW��'�	.��}T�����e,��<D�D3Fu���w��
G��P`4-��b[/��`9G$A|uw�1�}���M��n�5d!T�������Yo�w(pw�	�v��LL*�����b`�e�y.�i��������'���=pSf�R��T_����!���)Bx��e@���I��_T@��G"Z( �_��9-��D�����8�l��U]F	r�f&��N�����������xA+PG�
��un�;k��\"7:���K/�Q�<Xd�S4�C�����g�9QS�kf�T�>����!�4�ei����GIi������MK���]������H&���4��2�b��_�Q�����Awbw������k�wQ��AyX643��	kuv.�{f
���-#�4�����53�������b��h�������e'B�D=/U�?��2h.��r�Z�����vZw�(����.u<�oQ�&C�Vf3���6�8j��T�����C�V��H�9e���Q�9<|@S"Z!Kd#�G kS�F�_G�Q%�-�I�n�	�����p�Id��q���v���@��{��Z���X�#]��kfl�#n>��#��3c���kT��@�E���-|�=���DD����E�m'�����p�#|��h�Q7�y����h�����@<��a�]��L�������u��������#u��J1i)�A>������1I�y���!��oE�_��Q���i���'H+%�v7$3�tf�u,7�1�����3f)�
����\��>��a�zo"�b��a��0��P _����4�n)��J���	c����'D7��Q|�<�jxu�L�T_����ye
>�M����o7�:q7\I�c����TaZ������"3p���DX�w�^K��HF�Ygy�k��g����1a��'�]U�'��{�gF^��]� ��3�wh	��m��h��	[���q�C�	�_��C���K���b>���}�'^)U���|��������S�����B8>6z�;�k���u�-zm�9 s��iN!F���KpUU����!o��c*�"f_	�8;|j�~�iN�[�;>����p�XO�&�i��{�X�KP�eM�<�e
��d�2��\!��p���!q�p�,�0K�LX��!mkQsTF=�K����)��=3�����o�gV]���H���vx��z��uf0V����\��0�
���P��0 qS%�MX�&��S
RJo���W �m����$�I��q�-����������[�z�����E��`���B\�GWd��C!MN���u�{��Q��[h�0����g_W8�����Q�\����\s"2q�����&���t�\��&A-TRq�!I��-t)��
���%�f
���rd��b��������3��T7�k�*�upe=��T�r�r�3���������=g7���Xep�H�e|�eVNa�?�qa�t��NDs�N(��"���L}F9~���o##��y9�#9.;rnb�8�G,�
=P��3�fF�N�&,�d�Wn��%!PN��p��-y�x��n��DS��T"K�u����sK�,-���@��N�t���a5��E����Q$]�p��8�Iw���{Cd,ia��:���E�Fm6d�=�����il�����rv��I]�[�����nVBJ���N���`d�S�����E���!����4x��8!���:���-/<���q��g��f��KK�8��f�A�.H�~�f��C�v/���x�������fFjm��+�T(4��3��	�p�@�x�����hw�;gnfTP���6xR+yJ'*I�57��j�Y~�V�?m��C����a@���-q5��
$mN�wbS#uZR�J4g��#NM�$�Mxf�f�u��@;�
���Y�]f'sQ �������c������i`Y��U`C���N!4�;C�x�u)�#k��������8+�61��w �h��cM�L�N"���#��J4<��'��J��0�����U����Ftq�1W�V�D$)��v�
&���To��U��}��'��������Pu�>.��B�8TE�@���<3��8��*5������eq��p���T��v�F(�1`�.X��z�
��B�2r��~E���k)��
����b��w��X��M�i1gfp3��0{�X�F�9�o��9��'s}�����u��iJ�cGBR�����f�#��vm���!��X�?���y�j�b�X�iVb�� Z�_MXk^���>�f'���(i�Bd(zF0�a�02���g���D������7%���q33��^�uT��;��T��:�o���D�N8mQn�e��P/�Qv����>b�O��Q
[E>3�!}�_�X ����Xnh��zr��?�q��Qc��n92>�U&��14}��V�w��d����C�8������iq�}�a(}�i��h���Dw�?����]k�v��G�	�����@e��f�O��!�����
=��:�y:2��d�SRc����Ai�����PW�T�mc��w��(>���A'���`����W&c��%�!�;���8;��
�cH���
�����z�	��[$F����~�]�������L����t�/�33����Ox���T�A�����G�s�`��4j63����Z]bF�i/J��`g�����pxb�X����x�o�*�=��;vX���u�
��-qgM�1�aj������r�������i�w��������z����p�����+��b���i�R����p|g�S����?�0�'��b�i�h�S�1.�)����D��s����	d>d~h(�x�3U��0%Op{^��k_�O������G���J�a�{�{�6A!�bM�p��������'B��"R��i�x�������X�#~4���i,�IV�E�~�[�#��V������� ���n�+�l����M�?a���d��:8���_	-����)����w�Z��z���������f&0BS����"4"BS���%�2W���q
�>f|	�F<251�M�5p
�^�h "4u/>���^hf{djb��V
�{tjb3B%O4���W��x(��m��z9"����& ��G�zd?�`A�L�Mt�F��2�RS���$?8W���	B�����!l�*d�T�"��M]�=S�����~~!DV�b�: �$3*5�/
OIuNi���H�@Js{�5AOU" �S���*�_���@fqb4:��T��W���M^'����V ���o7�5>%r�@��V�����/a4"'::Z��T3�R����Q��G�2���C�PMb	�7�n6��pfN�Y>3'_���9���������}����Z(r/�K�V�����*�E)����Wv �
LR����$�L:��s��S���l�Zu3���I�@��5��K���%�(�w�����l�2�����,��m����������2�oM5sR�����0-y��P��d�&����Ob���@jR�?��?B2��/J�k�1�/c�Ld��������cU0�^�ad��*Qt���Q��E"�%G}�
P�=K#��I�*�v/>8�3���.�Q�6��L7�m\��AC�m�
i�7z�3S�D&��d�����8�2;�#qn���D�_�f�������X��|��:D,8c���D,8�r��w|NbR�NE�h��B�c"��Vio��,<�Sa�B(�~��9r�U���eX-d�/�b��A����7sBt�u]�B��*�2����z6�E�gF���z���!-����M��L��cAb��s�m�U�5'~QJ�$\�����{���F��8���^����S����iV���{��~a�w�`��c�@��*��w�ETt�(9���QM��(>��2��+���I�]#�B�=l�u�m:+����������]�MT������������v�n����eV���u��s��u{WO;�a����8O����U*���1a�0��T���a����FPZo��E�	,�\ ����[p&A����4b}R���W^"��0T�e%P��9WW�N����i8m6O�nrO�|�fv0�t�f���C5��?��'��a6�[�_L���K��d0�j�)c��$ 8�P���J.,��8���2;�F
b����Y�@���ne���������9]F1S�my	[��q ��(�H.�����61�|���J�f�%5��a�/'��f0LTss���v&�(_�
�F��*a��8�����v�b��C�a�t�Z��h-u�(%�b5t��%YM|-2x�Y������-���	]�������E���p'�t�P�1�\�iO��_x�Zl�b�f������%��Oa2fK����nQR�+�.>a�����_$��ROy�&_q��TJ	����r&t��D�tl����J����/��]����JN�u�����^��I�w1��*�R��M�N��z0��#�8������i���@����?���[�`�J��[������-8�umN<F�[��NK����7?Q�������g�?�R������5^����G�����7����vs;i���_��yQ����'
R��ioNO�������:����b���C�����/^i����k\�
l:s[�������/�lA�N��3/*�TJ�
B���(�m��v_�ECr���]ML��{fB��&��������&.Kb7���-�����j��p��mOB��u�ye|"��L)1R�+W�h�g��mBx���D"SJ��l�x'�</J	�Jhq���5����|$���K�A�vXzh;�4�=/
Up���M��+�����]�z'���"�'���S�����
/��X���}w���Q��>��&�N���~�j������$�P��������8���EB�z!��:v���7�����B�w��<j3�K8�_�U#�7��j�L� �_<#��`x ���p�(%4��~��p��|1�_�5�'"4�L%|Q�v���q��]�6��u<����M)!K�2����
�g����uj���Cif�pS��|����'B������kl��(���	kO:n������/)V(7���*4�N��K�����xb�XTI��yQ��j��������tk,bYn,g��rF�������n?p�A�t�?n�/;�n
A��2��!�����������N�hL�����6OPq�f�)�����iY�1�?�AV��8�
��L��\�:�*�]��Px�0~v:D��</�-sdl-s�
E�VhG�������kj������@��8S�C��9���(lW+E�� d����c��DE�#�{���[�����	} 3�������F���]������:1
�i�������b����Q��7�N; 3�9���@�#���sl���b����w>�c*���H����t2�(t�y�
JcW��@X(�US�1$P�4��O�z���?��(�KBp�����?:@`�J!Z�K�_�h��Uya���cj���������CJ����L����a3�3���|�h���SM���t�9��E��*����U�T3.�t�S`������A��
�@�;d�"c�Z�]8z������S�@"`a$W)4���������m'
R<@����c��n�(?��w��.�@.�<�vf��*��a�e?%CfU�6�`4�Lu��L��Z���)����>.s20����nC!n8�Z3�an�7>8�owK'�u��(v�����'�������Wp���2\;����P��m;�T��X����/$���e���-���
HJ��<,��k�i���d�Qj{G&�;�o�2��H�B�EuZ&��.kx~��q��)�5*q��'��k��������Lu7�5klvH<���_mQ�����)S�C�����c��a���w�5�������f�?XV[�4S=\�����W\P����n.C�����CXb>s��y
��$,�n>3�NzVU������ba�3\��b�4
��9�����oN<o����Zha�������u������@�������nN����G���o
�����e
u�:2�����=1�<��������=uiM�bC�
qr�V��}2O���2g�� �a����08���C>��L��
m^��{�[�"�n�Ni�]}�t��p��O�_#Q)%���Ub����o�dS��xH�RJ�sm�]YE~W_+��f����+��� f�����!�/$��MMUF���?��Z��hn���p�}!�cUK�k.Qa.��J7������$�|Lx�����aL,�}7��%|5b�	�0E�����{7��KlV#	M�0"�T�L=
>��!��=����H���w����1�9�=[����
,Ze�1,�#���.�������t�,�S&��:ndL�a���1m8[�G
�<��G�d:.���y�3Z��i�q�+Q�^�c�en�����ar����.t��H���GN4���F-$��s9R������	�MBp�e���-�90�������8���`X8���"�Z�4,�Tw�����6{����J�4w����)��W75��&������u�#�����q����I5+n"��c��*.�b�I�i1����Y��c>�����<g��C��W$���y1��]	i`>�Mep�4��wJ��	�@������}���^PYf��F]'&��t��nZ��gG�
�Ki �bI����i"f*��w���'���7�G?�ds �V�����i����
tB��}��m�NFw0��P��RH�)y���WyT�e�c�/�����M%��Em�����[���x�r�}rd����R@^F�,��rg8f���2#��M-���i"8���'�Jm"��_\&�.�1z��^�R����n�_�=��c�P%��Zb0#��&�������8����F
����r�����E'�gA�&4������J���?gd<�����&����1yV)�� �����Ju'�V��&�-�_�����~bf��(��a���p$3������mE=��yqY^7�6Y�=��I����c�>��D�>=p�n���DV����f�N+�����ui ��������LK�tg�/:�V�*-�b�4iKLR��J�������8��*���w�x������\��<i�B(����S�v�F*M�z��2�������.Q�a��X�V1M:QJ���e	IN�&�4������b*��l�������5ie�g7E���G���RJh����@;g����7�����f��M����`�Q��I'
5�'�����m�b_�JlK���E5���T�����F[��t��b*?+�cu��u��k�2=VXS��(YZ7�4I��Fg�O�v��J���n����)���%����=��%I�}�`L�(�������\��
Ak�i�`�����u}H
7|�$=$c>����7^�2�D>3�.T����OlO�RI�����{P$��*5Sw�Rm���r*W�N�Q�D�����8Q!����n�
%�L��N����������	g)�ra�>2�$9z ��L�����;���-Qd�!GJ+�}��������;$�9���$<���4ac��$O�#��H!}`X�F<o��'�9v���eb����"��S68UF��Os�I:�%����j����O�h.��dJ��NR��j&��]�y2������|���T�IF�B@C,�J�R�=i��������;BZ������3�A�w}�����)_��J:Bx��BE(��\y Z�|��3
~RP2A�	%cd^R����Vh�i"��q�p(q?�8i?v�H�y�����|J���+Y����N��^���o�T!����U����)`����H��Z$�*���	���R��5��&�k�+W���j���M*�`���Jf���Wd��Xh:,�����~1O��K���b�tD1G@*<�
��������lO,r�r$
��������Y,oK�630�U"/[����F<N�|�6:b�>�\o:�����8�d�7�Bk�c".`��6S�_�65n���sd�S��V�Q��Ow\����z��y�P����_TE8���$�O���x��q���Y����<�L�B(�����*xP�n+7��L�i6���'k�r�91.�n����_�{:
e2n�+K��3;��A�4JQ�P?/�}�|���4�G~^�AM���X�E�q��[�ck:������.�#v�	��S�c�������+������<6�ua�N��d��sO�*>�G����������a6{�+���m��4��b��vx��$!l������������g6�S^�-�q���fk�����Myj}o{Yj����7_���H��3�~��S���}m�����-�F$o{K��r�����!�i��o�KW�p�3��^
�q-Q�6{m��F�znQ���(��W��'������i[&a
���0����,D/�
�2	'��J��+�F
����x��	�����V�����Y^+��'R\��#l��Y"5���AWoY�t+J����_�Z�C}��Q.�X~������$�h��VNa�?��>���8\'�,�r�U*�����A�Y`��6lwN3BF%b��?B ��L�m�����,��mJ(;��,&��f�����3��������Mi�u����n��tN�4|���W������u�z����)~���a/6�yD�*�91�2�"���Q+�mjH���~�/��?/.�����J%�{�p(���6S�7�K�T���O�T��Hs���w�p��67j"�I�Ve�rs���B��1�����!�u����=��n�B��jW�u��q�2��CT�o���2���T���vR�L���Z�`�������-;�!����F����2����2�=�Eu���^f��X��`8EQ��J3���z�� b�fI�g���A!�� �^O��c\� <\�3����t}?�|0_�q�u����YD�:`�.��+�t�[>��^�Rz^e�y����Vt\���*��^n\�b�j��WYh^���W�<��������������:-��e0�5�j�p����$:K��Lx�������dq�"�YKrH����W9��$%������������%�Fz����������������������=�����jJ���VM��}��������?�������7�_�~�����������66!rD6%eR0�����`�3��(�2��@�@7��L�`�z�����Jf����-�P%�L�[���G>��8������3���2yQ_����o��f��OA�����}��Ci�D��81�W�D�>l�~}s�6�f�`=����0�c�A��h��D�T��{`K��
��3��0&	��� 5�j0"^���'��"�w}���d��� H�{��QOaLt+#�@f�D|��ne��O.��*��q���L$(9R6��P1ER0�)!4���;��L���_����(�M5*���J7�q<K���~���fL�`��m���*#X��HH���I6�S����Ck����$)���o���zNs��t�?�[�|���3#������o�T�;3�h:T���|�mgC�C�����<yv/	����J�����N���t'�^���iN�-76�������;s]�:%��������v��c<}��E�95W������0j�]����7d��]J4,=i�(n�g���:� ��pUZ&�h�L�_GK!G�~��;G��W�x�����72����7pL�W��0|��\9��"Y�t����1��[�
�{�Eb�2�$`�!#xN�+oG_�
zz�@�k���??3cTW<�X��\���C����
;Ve��VF�95�yS�x�Z-Tw�":3�{�)����cb|��\�����o������|�L��k���P�+�n�Z���a����#a�f�M�`���[}u��tgc��5���������h�q��}��'
�U�i+�Qkb���/�^
/�"W�b��b��������Btj��A'�]�q`IL�:�G���>4���e���gT&p���V�3Z��b;��I-���t���'�k��f����qK���QRF��\�-c��g����#��2���q�y���9:��M�@=%j��,�+Y�C)��a�a7*���1��Q@D�8#x[\htSg�Lf��4�v�7�?AM����$����X:����G/�vb��L�`sy�o��H7�0����Y-t��i�'28&&C5���-�\��+�eT��d�
�X61|���@b����$5��1�������G!��]�J�w�@�z��X��Z�=�~�����>F�z�O�Af�����$P�Y���w.���K�U����C#�a�@���O���5���6xt����u���R+��N�`=�Ml���o�Y�������[��-��#xXD���KXb#����l�U�g����C���p���X����a�;�Y����Y��&�=v�~F����D�U��s��2��*2�)!LF���G�dD�a'���8��C��	�`s���4P9�ei�����`�hbokj|=<��8m����X�j����d�S"�������O�0,����F���j2��-�n��D����'�q!��D	>���/�z|R!�UwO8�%��������3�s�I��<��T��4N����fD
W*a�o<I6���hA�>�*9<j����7�R�*��W��/se��8ok�\���0�a!=���h��{������Ts�<3�\�)p}Y���51�uls��>�������V|���[O%�>Q��p���������������'�3������>c�C�*�eO
�j��<3�G��z!
����� �T���K�����31��^���X&bhj;J{�����(��d��������L�`����M�����4KD@�������p0`4�z�t�-��D@S;���
�U*���sdN�J���I����6�DAY���F&�I%�h
{��q_��1�\��'���`�wD�(��k���1��:�LL�2r����L�`5������9���S���@G��P������')9�<�g&S��>Iu���=�7�[_~
e�Se���w��2Q9���[��c����<�Gy�
���e�251��c'^�"R�$���I�c���4�W*a���
3qib����1�>���Dp��\q|W��\Q�q�:\Ua@<���!�2��\����gB+#�Ls��eAL
+���Kw=�
���������=���3�6zVf\�O�B
��*%=Q�+#=�<z^������n1C�4�FO'L~3��)K��.�[m�%���-�/�H�ge2�x�H��f/���i�P���"���"�H��]�9����j�p�E0���t��C�����bO�)��\��~���&)���lKP���M���B����E�!K�[��B�u5\0]V�~f"C��^��<����5�:��
�4l�s%���y{���g~��oM�`�����x�yZ�(�K�6���@�T�+��(�r
1��Dnn�����c:�t7f{4B��MqRj��i�J8D.y;��<���)��e����*���J<o�����6k�D�����.�#d������mN��U��AO�7R������t�A�"B��sw���`�m>�4M��{-��mI������-�D8�a��8�FLb�s*���C���;��`q%���B��.�O;1
1����'�>3�r���%��Z��Z�#wib�I! 6aoRs�(����@���u
8l]}e2sN!�~���]6��/n4B��_D��cp�v�I��P�l7�����0����-=X]`s��Dh��J�ss��}�iN�{��������R�L`����o���<��o&���]'���1��YRk��Z���B��Q>
Q����4�~�F4SgGa��-����w�e�rp���gp<3�u�o6���41����U��rm������y(��`�����F�O��I+_�m-�}�w�pJ0�f�`TN�x�8r^O���3����x�G�����kup����0�;�4����������$�;3kO�9qy��D0Nh5��5P�H����q7T�h�<Qef�8��N��b��L�v�U
��b�9����N��������
)����h���2�$����1]�D� vN&�T����+��"�p
������!V���������>�c�j��ue�ik!0�)m� U�11�51����O�q�mb_1�6���ms���Y�A����=�������X�:����l����DX�Z~��bUf�)n=�
V�W��I5��[�	gn=��3M���h����?��'�d|��L`d��)`DQ d�9%��.�H��$�c\�VC`������c�}��p�
�}0u��w91�?��K4"��+!p0�����|,u�;������m�m!JN�B���s���6{�0���-��DBZ��#:�*�D��d�0-�zt|v���{v�6��A��������������Zw���-�%D	��J:]�2#���u����h�+3�-(����6���������	����7�ND@}��D;�3Z&v��f
5e��
��aA
b����V/# 
�N��&�E��h
�x�
3�k�K)#`p��21*"��n�HF��g��r�eR�U	��2�O��b���o��w�m!oa8��@�=m�#������q����:-�1�
���E)���sR'�q23��9�P����vtR��	#�r����a2�0S 8������!���>���*�n_yR�o��A��T��=Y_�����S�DT�����I�@*�E�
0��*����O<�j���J)�.�'�)D����w�����'Q7wQ��L�l�f�S�,P�w���}���������a��J�P����� (|�b�\N~�u�wvz}��2SJ��a��z�=z�O�>c��W�%��7�����2�u�[
J�f����o��z�^�3�Ody5������)~�T!��E�������"�EtQ�>l�(��M��X��z���?��*��<���k�I��TF��1�����ZO��I�a��k�������z�qR������'�L�� �HT&-�x
if������8��}���p')q�r�x&�\�0_�8��q�	�`�b������Ts���4$��5vl��_H��c�9oQ0^6��S�iN�[0u[oo�����?Rv�J����	�B�u:��g����AE�v�:Y������/q���-vp.;��0	[�;��
����X�K��{��l�M�Z�!z��V�gx�&��.�J�  Zi�|�v�����d��v�I��K���GM�C��b#���=C�����'����|��0$�w�['*�P�<�|���H�@9_EK�%Vl������'���������#J�� =�����A�-�l�R������gF?Y�(D�hE�2)�fF���$.dR��)���(�j���DK?�fe����������(�Hr�	h��0sfF���&�rYe�-;�kX�M<r�@�����LL�����nXY2�`J,H���[���5�|^����hA�xqm<8mf.����� �O�9�7��/���2j�'�b8A�[M�F������y����������FE�|�x����2����"�2��������������������q��~a+����d��3W
>$Z�A���/���x�gfZ!���	�L�K������?|gN�������rpn<$������g��d�a��������!a�K����bbd�G��!>j�\��R��0����O�|P�~�I���)c����5'd���;;�I4c0��h:�2�c03�S�a(*�n]�>4�������W��"�o99�Ir����Ms��866'�.�-GA,.RU_���i0h����+��hZ�ajv����q�|�F���[����V�-����\9�:�����x]b�*�j�P�_��Z2F����'&�����JD��c*eb�S��Ol9	�q�pf2���X��
����`2��P8��X�3Y�Q�������h��(��v������Y��p�����af5n�E���4����5v������nkf_B�8��g�<�0�E�8YC�������o?
6�M//��T��[�F����Ls*n�
��P,-�������'�����43#/U},;�/��T��an������'��VHS�](�&�=.���JV
^~����xaE���zv�N3saQ���j[�x���CU��
��R`U�
�u�q�������[�h��|��SK�����������!�[����p�5�����$�i;���j��H��N(����y1�s	�^�nv��V]�d�X�\�13���Y��e��T��Dx��wt��b-�E��2Qy���U
^���|�i����$��C�g�!	+�X��5��DhU��5��&%��5������N������q��)���7&4����b�j��c�xJ�z(������G<�50��*>J��_�dg��>BU�#w;����Dj`z(�U�"���x@���#T%v	��nT3�V�|����E�2��]�a\����LsJm����������,Db��r��}�L�c�	#~������tha��O F�q�Y�J����`�x�]���5������}"�2r�a\�/"��	���	o�lH��n�a��|�u�i��BS���:2<���L����:�uz	����C�fM�f�����
���p�V����fF�>�-���;�����f	����@����a>3����U���"��X����:�\���*����O����������8��������`~��Ox�,bffhb�P$������L`L����IU��$���i������eCDfR�N����+��d|�zC^]]De�J�1�9&���u{;��R�����o���D(�W�}������ T��	���Z�M��k-M�D�Ex�7��V[�*�#I�{BU2���i��Jrs� 3>�&��d_�S����^����T�Bh!Y��}L��K:&B!��!B�u�����^��P}�A�2�����j��e��"3�����t��yfJ�D������B����z"��f�L��/��2�p��0��4S���
y��g+��D\\�Z�����(K������4���TO7kV�Kjf
�i�������c����j�X��Z(�`�D�kU�L��	e�\\�[A4c.=\v����L�}�G�L�|���*Pw��7��1B�����}�#rX�V:���/qa�cB_A����5��/V�j_8�e��M!��\�/������\��8K$�����F�u�Yh��7�j$��
fW���.7���mO<^q#!P��b�Zr�H��C��/:B�V�����Ib�B,��$�������(R8c>/&�ir�Y^R�d��<�MT���
@{�j[b�������F�[!4���ftU���4c����T�s��/�G�7����������0+�J��p�h�^	��k�X�)�Y��'��LeY�f5��`5�u8�L�2��@�W!SY|	4��(��+3sq�c�*d'�iN����/6?1#*|��m!��&F�U�:��^8+d_]u�8.������D�,�|���3��-�mn�Xu���d7 ��pW�u���E<�,o-�C����&&pg�����-���`H��c>$j���P�X"=��U8������7n�3��S���QWVe�3.�e���B������U������f�P���-�k��M��h�����q&��3�
�*e�]��r���s��#s��a-���m��Z��4(��I�`�:`e����}�����c�������u��E�o���KOFS+P"�N�p��T��q�=C�Q�\���X���"���pB�����`�v�zpkB��i����F��O������Mw�������+�����3;=��q���
���*���tX����A��6��W��[}D!T���x��b��Uz�>3�*h��?F4/���.
��b����b���&����j�1��G�8����� %��bFT%��-8:K���Xo��E��~��0=z��/UZa�P�Q�e�-3�?/bv@u���U8�L����/,j�v�WRL�a7%���~Y����_�i�A����!�����<����(�2�T2%2I@�i���T7����c�rbr��%4�0t���q��@|�E����_��2����kJ���;5X?S� 3���L_.\�bk������
c������c��=F}�*2s�4U`(���+L���[P�
�J��]0�]�TEl�����(���'q��Z���&�3S��H1�����3���D��&��+Knld��M�:��1�����PgOzL�_�ch�������/�����1�X������#,��N��H�����a�%2�"����g�P8qb:�D�H�w_M91���j���>�aq��[�W:�Q��>���z��x����h�dc�`<q3��9P��=62i�\J�zX�	�N�dL(��/��r��&��}==se������v�O_s��/���z�+o�=���O���V����������{����g����������}��?��7���>q}Y��e���}�������u�|]|�t]�\����OJ/��/&0�j������?#���$�z�h�t���k��	�_�m�	����'HTB��4���E�~]N�#X�u�z����db��D�N�|���3j`u��;XK��J(������!�@�5�F$�4��b$I���NXBN�5�;�q�m�a��Pr[<�JeZj�C?z��bHt���	;:�q��l[�I7�O���m9������QZ��'�\��zVb���#/L�!�O�����8P/z0��D��s�4������.�cV�3q��>N��'p��������f�^�ew���@�� �Z.�����p�x|�����+,-�f:�>X�t%�hKt?�cbT^�$��\����
�{h�� �P)��d�U�%��XY�U�!���<���\�����6��������v�����I�UF��&�w�-]��{q��<J��pvw�������_s��M�I����n(�I��N���2cW� C���}`\��?�����J��2-�0����C������F�A���&F������PE��=3#P&t[TRO���j)fB�l(�BH�,WR}X�bz�=/J0���E�u_![(��-T_!�DGO���(���%x�zRmV+��*#5�;3!� i����XG��}�@�i�gbJ����4����",c���O���Y�MLH$�_P&=K�?���#�����	l:s�Y	r�<���o*A��+ciBC	���-��JhV�1B2�k�@����u��5�IN�f�<M	��])LL`����B�h�X��Pl�S(�Bhb�3ac���3��/25x��	5��M=Xe��rE����)BMe��`!4��Hv�>L���4��xhj�k��x9�<�����|JR��4��
<��/���B"w�kB��n��N[����h����������-F��-@�H��Bhb_�� �=����Xn�P��Fk���(�kh^b��� �l��7F�P����,��4��-������N���������N�hY�GRmGVm��\<��2HU��i�1C6�3'�p�1z��{��xz��h����t$�]�a���1����`����>�t�����>F<F�[6v��k�����lh"S�V���k�`�GU���Q'��	j1�e"5�cYI%4Q���,j�����e�j])6�(�?��^�h�����2���z2��{����/����1�����FK�x���ZB�� ��u�����&P�dP']��3+c���E�P���W/B�������
0�d�g����Bj�����1B�`C����s�Q�_fq#�����g&0����-g�,:�������93�Q������r���8}���Jh/�B��=o���
�YpC���Y��Ry����TD��\hNl7�R��wW��):���oM�RM,�b!iE����8���kb�i|�n�'���tkr�k��#��-;���px����a.��
����L��i�>��.*�"e���:I�*��j}��QMalC�o��Z�����1*$�ZLd����^$V4��~b[��M�u�
�8009_a"�
	�fC���US�5�>�UVe�l�|g�������������{� TbE��Y4�0�f�R6&B��q�ujL��M-=�v?
���ai������<3��HA�u���iN������y��F�qTf������!�M�zd���:>8�G�9�oQ����B����V14��u��#VB�g�>B��	d�S�>}���G�%k�g'#��DzQ	/�����bn��f��N�$�&�����d����hz�C2#����?�����x������4�*���MS��=3C���}�`:�`�Sq*���^;,YEf�X'��������8�W=jd���:����5���rl���0���|���@JHg����1l0������M�F4��1��y0�6�|f�`��Wl�S�,$jH�U�N'��Y8����s��j���$��X�EZr�c4�Cg��f��~{->Ax���fm0��3cE�@���3��l�ZnnT���@?���A�K�����h#-T,�{��a�y"H�Q��2�x^����Z�-���]%��8�}u�i��W���q:;��i�/���2��DD�"/h�l���������	&�ge�xe�����������>���=�$�����
���Y��������FT�}4"��G��Y'=,x3-{ap���l�qk�y1�2@��:��JH��{���HK �|!za��`�r�k�dqb�%p3�R3xpe������2�W�����q���<�	�SdI�%��W�O�,�����T��s��B���D����s�:���h����~1A�y�c#vf"���������P����i\����#�v-��Lx�,!EJ�cX8rC�xx8rO�,b�o����r�l(��(�$r��:P�QAl(De�v&����� 3��d����=(�Y�~�������>$��y'V�q����6Y�S�W�
vU%OaDZ>3������#��a�D(�a��(t��5�=��[��p>����Y�������w�	�_��J!O��#�A@������7;����2��c�ce���A1�v������=6������u���40 �d;��g�D���/���P �z�h�p�y#�M0l���*�m��(
�E@SB�(%.S%���x����� D��0�D �Q��J����o����61�$>�������o2���5�71s?Q�����r���y5�N��S*1'g�^T!���U%�zb��4��d�|!��V+���1���/lzj�I��R�1����WN������7��
&�1-0L�������L���(��R����o��,��tk��,
���;��+L+��f��F�>G'��D�1��/�N�^�)�������D�����cM�w%,���*3������tx����h��r@h�����o�L�j����j{,T�\M��UXZ�F�����8'�U'�Q)%,����.�e����B ��������P��=��Q��c��&�|���3%�f|4RW,\���g�~����u��
jf:r��L�����RJl��U���
W	�s�,j���`��n���f5��6�R�FP't��V�AO~Sh����0�^�(,��#_��/q���u������\�#A\,K�0����$�	�<J�?v�����6���,j���������B��?|������&��Z���RL�s��	���OG��IMQ�����1oG����w/L����;gv����Bb�W��}1o�_��^�>p��U�R9��X��E��V�����*D���8��~{s_���G����R�D���]2�}F��+�ywg��la�2U������p0���E�R''o��$��b���*x%��j�p�C)��V^nCdB!�����s.���N� Y)��!T�E�7�i�me��i�4�����8>/.��j����5��B�����_�^�hB2\11
�)�ao��T|�y|�zD�@[{�y�:�|�)K��������L���B�Gn0y�Q���w�P���Q��Z�i�Z��4b���(?��z4A�>(�����wd/�TCO��������
2�/��\�D���?�>X���?i�b��m�<m�$�3��?���kn���?�����?���n��H~���!�/*��[������/�k���������;�/�EML��EI��En2�E�c����/�w�([���6���\\���k(..�����9�E��xo����x���G�x��{�>�������'����\���+]S�t*��)�k]L7����9gqUQ��m�W��� '�*JWK��T���j�J�U����tu�����2�S�W�c��(]K��(�n���T���y������}��#tG~���=K)P�Yz�Y{��UP���P\\s?�o)���w�5� P�Z�O��yZ'y�J��er%�5��v:JqE|:JW�ru���*>����OGq5���++����k�����������������^�44��+k�����:]���B'g5�W�ZW��OG�����Q�z��
��U�_=��{����Y����%��JU��*Sep��D��}��T���JS��*Ke`��$�q}�rT���JQ��*CeP���1}��S���JO��*;e@�����|�rS���JM��*3e0�����|���Fo���i,����%��C�]��w�~5
�1���4�P�W����������k)�:�*�1���-W�!�Z��Ne��w�~5
�1��&(e��2o���Tf?�D����zU����i�x�}cp0�����i*#���f�uk�I�����4��qv�cf"Au0�q�������Q(-:UI������X�����'j?<}����v���@����w������H����c��J��&��Z
�|p���q>?���I~�A}��?m����c��W�*��J��a�2SpS(��5C�9�q[�6l�Q��R�M�Zw_�e�����wM��A:���>����!�
�3�M��.�J��	{�]kr�[h��8/@�J����HHH.�*h~B�A\��l���8�_���}���U��q'��1���L��
��5��3����<h[=����7h�v%p�1�1x��P3����	tX�]bZ���b}���]pc-"�i���.nXj����r5b&�C�Lp�&h���K)��0����4|���7zj�����E����Pe$��.�QFJ�5e1��G��� �$�y�q�pf6�,dm���d��p{$�?�=��f-��.�������n��|2��)�1kg|l��@����	����w!�*� %?*�7�1U�+7;N���-<���P�	��8T��N���n`A
�{h��]��m�	Y�?;X%����������3�61�u`j�	7�����7��<x��Tb���bc+:���o�)T��*�BX,�-#D"�<��B4E+�z�(]����f"A����Rb�9zX�n*��tD�Y!$~W��[���1�.�?�qc�����A�`E��X�����eKDc2��N>���|l�`z]<����ur�����C�+�O$����q����YF����j���xI�q]J�Rx-DS�Q��Bq�$�I&�SD���f}x�� 3QFk�����NF����������^�~q�.�
��q�%-S/>��ZIX��AY�Q��G�A���HoNU��T%U3��A��A�[�-=:�C)��&�N" 3m��Si�g�t��M���SU�`&hkz>6��ob+�a��K�!��BD5aP�R�T�a��_��������7�,} k��H����
v%����4:b�����WM!����+�Xs����m�+8bf/�.C���k��8��9�����>��-1����~0�[W<��a�?��$Y��3�����^D!���_��;<�vo..�.������d�!c�����l�?���?"�}�!m�	�v��sO��Qf����$��e���z�
�I��+����!����_7���W8!h.��4��&L'=��R�4�
B�������I<��Mg����`�1"��0�s�/�(�)GI=�"��o0�H�U?�!(��x�E
]g��4���v:7�Du�.�F���<m���I�������X�N8������4e����T����b�
�@A��6���OD�#���H��]	�&2�����[9�:2^G4����2�����	EYK�1�����J��w��Q�l��eS����������J}�zg�9����Rp"�K�UT�]b�J�r\��s�n��uWi��pI��v����C�3����c�
^c���Z+��Ks�V�+�Q!����3���M�+�1��G����n������e�����Zj�DhG��o��*:Y_N$��0MM��n�mx���]]��Y�L��E�J����D�5��=
D�pU�P���k�jpO�cG��z��v���D���S���������]0
bG�^@J�7n����'<u�c!��J����P���;C���<��(��t]�"�_��@�����$`�+�B8:������`�}�z�M%��Z/�AE�{P�^��@~��A�r��c��t&��eb�T5���DP�{��S�������
B�������l��
���z�� R��!=��=c�������y,D�����Zm�F�	w
T��X��]����	��� ,�waP�'m��@��M�_�6��Yn�����a�og�5u��E�=h�m����H{1-%�^�6���V�=�cqnj��Y��WTCB����|nR0r-L��p7���/d�{r�(�����)A�{�4�
4�vy)��6�.D����*>�.��4A7��X�w�
9��efEYyi���q9��w�2�����5��Vc��q���a���'��%�C�G���yq�<B�/������+�8�	�z��Dw)3q���!s(r��gf|ji��x���x}���BXT\+���������(�9w����!�s�/b����b��I7tTu���b�L�R���'��Z�u[��O9]
����uqVK���i�Lb�YKo�r��3>��bo��(��%��?qhJ�3j��q1��������w��Z��� '3b��<73?���:/�\@3T�q������]�	i���>X��7c�0>��rW����88UM�7��4�*����;.���`�L���!)��b&/���D�N[��+�$�3!U��8K���U(���
����_�����
����6H�������-zre��4]��D	�VZ�����
��2���. P��8W�V�mw�i����y/��Xo������T�+c�t�	P����^GD��x����V�.p���
��b�T$����P*ea���(���eh���&.R���|���w!<���?O�a{!�W�5�� ���6�7^Yu�+Q�s��y\�v�aAS� ����oa
��	;���Bhj��s�Z���fQ��m��jW�2�d	�U�ve���&����vhO�\k'�aF�����z�-
IM:w���s�M���-+5jwK��ZE���%)�x_�n���!c��S��� �I<�T����s��F/a�(����;k*�x���T�-c�$���KX�03z�2��nv� P�=-J�SDI7���3��g����i�}W����S�!�N E'����)A��b?�Zr�~1�����pc�����{����F	�'�����|��MO��%���r�(�/��a���Y��AL	
�h�	�D)N?��0K{lGd�7"�2��/L�Ki����N��`�?��>F;�|D'����Ai[�
<cC��L��
�s��L��g;�2#xyEef4�DD
B?���k_0��t7B�D��kp�3c~q���w%5
f?���w�Q��/��oTL	�jL���;8	��p�&��\x����M#������s4�B8���U�������=@%�!�1�shZ�x;��-4���$��^�C��-w��@ji�^�G�j��_�r�3�e��w����O�we�������W��V�xP0Bg���w%����.w~V���MU'��D"���)�m��}*"��!�5��{S�K�L�n��!bua���+:��T��G=������� l�#�� l���������i~����d��YA�_L�W���e��eI�N����Y�LD�)�'���`4I��b�e�l�����vYU&��s+���|^���qCi��d#aP��l�������k��ON:��Rs<
p��-T�M��G�	&�?���HX��`6�Z�>�0�ZE}�K�>����a�/�a��e�',c�������-����a�/�a
Z�O�B�&r4�v�� ���T���������i��#w�m��@�Bt��.H����{�u��W�X{����kja�k����k�a��pM}������k�+S���O�My����"X�����pM=�c;�kP�gja���o����X����=T$�3U!�c�z���i\[�����`u��y��
�d�l�����������E��kg�?+!���f:F�U��	�^
��sh1F��EU�V����������X�()������si�)2%(#|����=5�=5W]�+��z��81>���T3���Or7y�����9��4���29��S+1���0Q����~�����~x�f�(�E�Tx�B������o�d��)��0��Q$]�CD�t�E�`������434�Vf?�W�C(��gEcX+��<e\�B"���)���2�a������>pa��� &�n�}Jum����4Yqaq#�`�������t�Nw�����A���/�M��0�~�.��v������g�����!7o��M�VY���-���*��ZX�wC.A@$��n0+n<�����8.^A�m;�n+n!�	���e���a�����2�����a�����[����evI������s��������]f��.D��N0��Zw���[#461�k3t���a7 0�1��xO��B�<��~���Q�I7�g~X�OH�(��*n	"���%(�������7����u"z�L�7���5�:lE�[.�z�\��1�0V�;C7T��#z����!�D����V�/������ yO��������{lWf����o..��V�t�8d�R4���{K������
�=���%i�%v��`a3�{~'�v4���>��v! ��
�(�E��;��=3�_���	M�\�g&�����/l6/�`X&�N����[�����r�g�A�n����>r��;5w�zMM�l����j����&��^>b_�uyK��z�����;d�:�7� ���>���<�����k�k���j3�����������n0(�M��U���7\��y��M*��U��c��v������`����/Y���7��)~_����}�����1�����A�-&<�C�e��p8���1�����7���L�im�{t�1p��z3��3MyA9������`�p����3�;T9|���5����y��0��y,vmx���]B�G��ZEg���1i
��a{ew���1���Q�DM�����G��0�|#l��c�!�h���eD=R5��j�
L|P��3��Z3�b�����XW���y�,��i?{Y)V�X=4Y�~����R9�m>�P�'��������*�����H�������B��j�,����Ic�H.`������3�.�f�w?�lvu�"�����C��Am��������mS��3aE��_��o�a`2N�����Z�
c�u�0���pv���a�Fh����+��������/������8u]�m�	���#����&$�c.\����vg���>`f2��^<����q3�R���F�5u���f�d��������&�^�X�X��������!f�BXNHtt�CE��A0X���%��h����5?�D�@��C�!�K��&Tp��h
����=v��������o}����(,b�5���_�Uj6�sQ,�J���Q��oy6���F��.�$��7�b��o��p��8���B������.�C����*����Z�9��oT�>"��L�=��o}����5������a#JW[�BC>�n�?b�O#t��;MqGv��������?6�$�V�p��oW�&��0V��u��@<�=����o7M]�2cx�S>��J�r����=�?�bI�7�G�������#��1�i�2jNO�$�e"�6&C��	��IaiWe�8}��2��z~x�����bN	�0��Ck���0�1�7 :���a��h��������$�3q���;�y�-kv&�{l�@k)Vc�����t�u�m�8������F�1�J�[�<f"C��<����L!���/�6������r�����1���	�:��i_��|T�%K��=*���TfZ��;\)�A�\&��^6N�	��j70c{����������M2RT`���gi��{2

���P���(
1i��5�U4������
������,�%�	'b
�3t}���b���������x��T�!>\j�XX��g�\(6������W��D�� 2��J+san��0k>���J�P0�O����U��>+h	z���.LTkSH����&�v�@��a�����
.&�[(�{���2b�85r�aef�uMh������:�	�M���������)A5y�OfVj���>���D4K�d&7����^C����V
������%�>��23�)�������Y�"�/T��6�������������H�>�U�;��WG����D4_	5�@�R��e�Y��>� U�4�D������{Zu�pG�0��-�@3������o)h*jl��������Du����	����j����L�w�"��GO��fasD�S���N
�������UQ'7���71�ZI��lka7?K����y��b�����F_H�B��7}7����������3#�,���6�)<1��
�Ud��a�_]��o���_D�q�;����A��3n{�!�_��0W�mo|�Q���zxWB��A�X>�#.���^nh[�{2���e<��,��7��=B����2���-�r6��*�h&2l��%���������$�2����;av���<I������*g��?xe�7m��/�����mI�/�M>%�dw�[��=
�U��3C���0�	Mm���Mo���7����.?a��Dm�9X�[��4#;�@J�C"��d��i0����bd{��F���X[7����K�l;34���������������>�O����b��M<���3��%���/0a��D�0��[�.b�;�[=�}qm�~�7��W�"M�[�	zZ��5zk����,�hZ��X�wF9]��/���+�/�(����(GD��	����8������|�����m���|� bJ"�{��/�-���j�}0e���-�J�
"t�D�L;Ug��>���W�j'gI�q�N��]�	���U�634$�{�/7�=�P�z�!/��"�����sp;~�}t��-�h���6������ZA�f
y�� ���Q[0����-B`���'�72����bN����LL];"2���&}���l`���������������}����zfKq">s���B��;P��I��X[=9�����~`����4��y���#���Kee ��t�� �1�5�������P��XCq�>�t�U�?�����@;7��O�d_cb5���=������O�y	$�XS$D���+1e�u���\�1�D��PY�������gFT��{�f&5��*5e�/M��
K!M��
z�����iO��H�����3N��|��Ft�3tX��������L�6��k���d�8�
I"�����zg�xa�1����_1����h�C����fB�:
F��>��(�(Of�o*}���	[���LS�A�*�D�8��r��W����c���0��!�8Zbl��)(-���k��#H�"%�w
�>OR��GIH'BFDB�U\�0�2y�����
�.cv"
4�
W,��Q}�&�	ESk�R���w�>h�j08�6z������5$,nl>X������Gq?2�!z�LX��G������;S��|1Zf<V��Qc��'���r��fo�b����v?���:�1e�0M	3��qj�'��T��q���&F���
Dh��-L��x�;���0��+�5�`����������=@3�!Nj{�6�73�N��n��_f�4�A(�<���3�d���)��-���Jc��0l��������{7�r�.�Y�M���C�����3+�N�P�����f��o"�S�[V~����G!4��id�:��vo.���J��o&�����* SF��-�}��d��0(��z�����f�0�H+M�
����v	�T�����(p#k���i(���������g
�r%��	���T��X�,�+�/ea�v�7��S�Of���P}���C�-�a�
�wS/$��0K���D=W�-I�i_R�>��J�oa��GI���.��of�>����+�I�(�=�>�.L�o"�E�]����\����N�������w!Bw�IF��9����h�1��:��M>�������6����-j}?bp��|s~ t����OH8	^{�cGWb|b��,�=�~��' ��|�z6|�����w!|����?>��#�'_T�N>2���}rq1&��	+d0�`�������i��<�27�W�;dL?Dx����~�4143�[�E��$���GB���W��#�3@95\��Nfa0�`���_]�U~������'��;��{L��+�?��`"|��������_��=2>$��I�1?�}�1��t#�Dx��_HM�?& F����3p�b+g���!��{{��nv���y��1��{��/���;2��gwt��^��<P���_4\Z�3|tM��u���L^�����;N�6R��}�����~��i���JU%�~1>�X����9� ���i�����73�aP�6��]y������>�����.L��+d?Kf�r�������za2���a��2%(�Axm@�|WB&A�'����|�rL��^�����['�L����}}eL�zT�����7 �G��6��0�(��_���rf`�=�`���a���J�����4������"�sJ�G���q�1�@�|j��B[X��5�Tu�~1�y	PUw,Rv�
��(�@���:&v�������O����.��^X3���Q�,T���H0�xT	�2�p�	#+N2Sg3�N��DP�y�c��:c3�����DC�8w������	z�������>w�P��Vi�&��t2k4s�T!��x"\le����@�}�7���������4�Mj���3�a�4�w%(�5��yv�������w\��1<�����(��.�sT{��wa�O�.p���o�e0>��l��|c!�H6��d�of����i�?��k����yy<�H��zi���I��E�]	��:�)��=��A��$4a�N���	k������P��D��.�����V�P�������Yh������v�a��7�7�9���r�Y�Yh��`�&|��X�)M:G�&��	}����M��0�����-��-�x����D�[J�V����!q���MR�J�L��b�@�Yy�s��N�|�fB���1`�U���q"� �xL����I��\��
MW�}��< � �����Y���
���X��D�(^����53�q?��Ou�3�.x�4*o@E1C3��!������m�D������c1�����k1�pg���q.������b���LTI���@� a�����#/���_�`-��!P���K��#`��x�^?�w�7\����b�#���W;� �����3�ks
"��U� |U�'#vz���)����R��Zvxc�VB��v���+ ����$^s#dq�B_>��G����c�LhM��
�d������B�%�x�����a��3O��0�J+��n&|9�{��2�����Rn���C?��$Z���D�<��u���gF+��d[xH=�L	J�,�-SO�Q�9s"�a5��vf}�dS����V2�IQg�L�ClS��6��mmD�B�)^�-_Wo��W��U�+4����X{\%JW���U �z��WG�J|<��G��{<��G�J{<��G��z<��G�Jz<��G�.g\#�Tx�_tW��/�
E�0�����":�Rwm�:�#��S�"���:e&����XB(��R����[k�A�O���;��������2�l��m������������?���n�[>�����y����+���p�y�)���~�����?������?���"$��j�Y�P���G��LL�J���A��q��}�d�0�3A��
�)V���"��B%LG������b&�'m�e��� |'�F{��X�[+������E}p�����G��N��:@\>��DL��0�w���O�:'*�8c��:�����a���`�lk��B<��Ly0aCHF�p�l!��
���w%�	8e�����7��
D������?�����g0�S"p�*���T�+�-orj��D�����
b�H���lN��*q��\��[_��vc F��]�R�:$g;:�q�xlyg�q�Ng�
^�X�jof#�������������=$0Z�O�%IQ�|�t����K����n��i�����~c�p"Q��7 ���T;~����F�we>�v�!�!	��3�!J���%V����
���������~������ZR}�)A�[8��'B��/Q/%X3M������?���1`+:k�u�DL	���E�N�!2��������7l�G�>��{N�Q�qK�&��������F��
+��gz��v���hR���o4F	n~��8.�Ac*���G����L��������=��L�o9f�����Zm.I��������T��'�p������TQ'O�Z,�x~f�uJ]m�e��'},LU�e���Z�$j�K;���:�f�����;��[��c5���{��cf�~���=��D�7p�������2����~����k�KCP*Cz�z�x�F���0���d�N���z����F&�Kq�����h5�d������6��� p��^
n�*��P�MW��E��E�:71U�!����%����7�r��:0Fe
�P�2���3&�}x�7�Z��@�R�Y��'���ZHA��5�z����.>�$�D�i��2H�{�R����[��C�8��De��2���C�z��D����
cJ��k��&b d��Gv��@�|H0C9��h�`*"�Np��M�A�8S��������.��
��"������m���r>MW,��`4]Y�>�!>�b����}.����L[������d��V�\�_�^�0(#��T�
�G31z;(��$��2��$8>�iK%$�"�GM�<�s�Ah�1���P������3Q�4T���>c�bLY*�f�%�2c��1�)?�@A�����
5}���A��a�U]������H�?e�2F�C��M�{f�UUOp-�3��F�)��4,����wa>��{�������~�#@���eXbc���C���C���~W"�\Y7#$_��h1=�B�3��1{�3+j�����1KWPh�ob�
��o��<�GL	��Q��>��o �a�z��d04]�Md�]�-�G�L�,
���W�E�0���y�����<g���V�+z���wb
�~�]����$d+C,_Q0��D����w&���O��%��u
������B>Z����h8K�����}��s���I�w%rU����+���>�9�\�3���[Wt���u���kx��zy���y|��`��x�>��T3�~�[C��K;,}�����d*���]I���8���� ��w<�b�2U��X��1<�S�gY��ls�1��E?�H�t������~m����.�x�,���0��=�=,����]�
FZna�!uO�|�H�c��=zoa�|�q����@�~����g�n�l���@��G�������L��r/L�H9+�Krt/��?������~���q��H�������	���D������{&�
9����y��52n����K
7�I�*������d"��
{�3�`���F��������<��.�����;jF0$��bQ���d�4�G��\Lf�0��z���%'a:����4����d�'�����=�S���`�7��kof�\����}��(�����>8��+�EeSx���t�<z3��:��(����G���L��%[�yQ�6��H�u�la���L9����JXc���M�3^��Jk*��O�4�Bc�3M����P��SCUa@|���5�.���������C��x�yA�_<������K��0�O1|N��d�k�(�����[�����*IO�$}a��=I���;*I'S�[� �}� �8��D(���yw���;h�-���%������d���;g���_z���q?'���%���3a�'%,�.n���HJ�8�"����q��b@��Jo�'��-W��?�t�A��LD�6K���%.'a��w��I�)�U�}�s2!��h���1.W"CxS�pNm:�?��:�:��N�46��	%���=V�k�F�[c�g��/��x�����S��
����`���iN�B�U�D���<7�N�oP��;�����Wg�g�v��5�D8���O���w��Q�&8>����61��^c��Y�6KDIG���!CED��
�k�Z�Z4�f�\������H����k�Q:�V�HW:w,��Y�����r�LT����}K��HY?�->������ ����OXK)�p���b�Y�6��7�Y<Qn�e��Vv��� �v���p|Wr+��mK>���*����SKL2A��{��[FI��"j����;������s���{���Q����F�Dt���:>��{���.�vW6��2x�2c�PK?�.8��D�B��pl�����whd�<���t�u��:�yw�afV:}��]HK�M�W��>�"��2.O���kmj6��_#�}���K�k���-�h����F��Aeh7�
z��0jp�����.�������������J�{�	U��B��m��O�j9m��������^����,����oMs���YEg���(���X��@���
�q��a���C�/*��`��h�S�C�0�C�^Y��)����l+3�����b12� P
+�������qwV��3'xf�86q�j�}��JM�n������K�Dp�M�t���i)��
�4���jKT�5�:��X���g��d�L��/�5�v����A��������-s����Z��a_�v����,��(�z'�|@��`b�ke��&���L�U��1|�19��'��Xu�}���i!��#fC��`}�$*�r�$����I���?��b���Y�[� I�Tw�/Yy�=,0g[�[Rp��*j��U�>"Y�Xp���#�30�_}$F�`/�L�����m ���8$v&��|�Bc�I���V���'4*47,v���A��p�a,\_Z�_���^z:��x����%�Lvo��a��Da	9�3K�j�7�s���v{�1��m�����G���V��W253e4����gI�/t���<�@�?.�W�\�]��m�o����M%�%Y�����\IW�VfLRbC�yD :��y$\�1�.@���j�'
�5�/�26R�����r!D�6<�T�(*�I�`��-S��mf��>,�������yec�1��H�� ��l��09����G�����~��^� �~�be�
&�s�YB�6�s�y0���-�������[�����,���=�����?�������8�2��ea��u��{	�	��1�i��xvv��dcpX�BB�PSg�/��^�����bvI���OY��A�u�	](�S�����]{��03]������P����� �����M��^|��x"���n�e�Q��[�|��w0���of��g��������_�V��a�?�SYoSH��b@�����%a�]����QFM_^^|�@����/���q���2��$��,oF��3S����l������3c���k��s%���A���Z�C?���*1�_�bB��RE�w ���wxM=�}!�1�z�� [�(4W�!\=f���v�fDU��_@��ar��]	��56�dU��#���V*������=C�XiS�M:s�>�I�Mo&4��	+cw|���}��x%8�*��F}.`qbn��D��~���f�1%��m2�vZ����0"�l��C���b^$D�L@��D��9<�v�p�,��B����'*��17����q����-LqJ�����5�+�$3v����m�.�Z�U��}�4E��	03*�
wW��l�����l���"�`t��a�bv!�����,�,8��B����r���/<����M�N��D��;[��a-��q�re���������VD������G���S�XDze��#\<�aw�li|�u����UJ��Gw�o5%���������Z<�7��'�
Z��9���s�<t`�	/�#T��]��_�+�M���
�}{�����lg{��c%��$�O�D�*��q7�����H~zZ����f��Ldd���]/&��3��K��cM�I��w�X�����w&~�R�B!m��P'(�y2��S�x�%=���r3��;z�S�����D|y@V��w�8����!�gE�.8��\7	T�-�H�q�c�@X�X��GO5���3\�E�\�!�
�����HD5�v����R�!��B$hy1�p��.B/����|���}O*��w��(����N��]���sA	�P�d��W��L5��3�"���4nr���=>�����~��<��nm9��,t_n9s��q<�s��#��[�I�����!��@�=�����p�������\�'�a�b���;�B��*Hk7�j �.���qG�%�.��o��V&�c3x>R3�'�S�
�9
�P��&�z�����7�-S3������o�0W�
^����r!/����9���w�r�
�FM�6�m]��g
�z�x�]3�����U�����
M*&�����P���`3� ��p��A8���L����v=��\<|��W��Y���C�Z�@���u����$�z����Q��
>S��p���������d�K���W��M���|�L�J�M��<�v���M3S�o���fX��0A(������@�����]s�bG�L����/��������R��p�D��������3]�i*���S3�Q>���H��u�0�$=� #(��+};���c^�qg	T�S�XZ���a�������'�G�����Za0tD���K��������������v���D�l��`�rz��hR.��Xo�m��z����X�d����D�$od�w�r���[g���Sf�E	�\���J���L���
�C]�BU�U�~Dl������s�������ymY��G���T;�]�I �V�s3��_{|Z� ������h�P��.X�r������wT<�{�!�Yw{q�[���@�� ?>Qfv�s���k�l��`�����.�r�$��������:M�t$jb0���^^��l��n�J��B�D�O���b:>��v�	T�-[3��#\(	�7�}��A�G0gb(:S�I�a�����6�Ajo��'�(C�#���9�'l�	��Gi�n������Pme�KC~�	���<�=�2���9�Q��'�`��"[���?� p�	o������u<����s�r+��o�������ey�������1��`2�)��e!8H<�O��qkM~��j����w8z��G������~�_��a�d=nm����8k9N��*���N:7�=����g"�������DB��+#�Fs��2�k��������w�\���;��b�tA�s���g���X�|5u+* �����J'x+?���r��1��FH����&��i���K5���P��RR�E2���
����_?���N����c��L���s0�SW��K{�f��F��e�YW=t�S�H�m7?!�<?4c%�a�\���gn[�J����������/"|�;��!P�z�H�s����h�+�
��x3m�{x�3a���X�*)8Z�*k?������zH����/�oOD|&��U�^��T+:��`�*� �.D�	���H-��<x�]��6���3�;[����=��	�JA�xr��CZ�A���AS����wX����p�n<��<E3���lD��&�HZ��G��4�y(�>	��<�Hk���i�!7�P�P���0�2�},�������8���-k���D������ue��qe0_��	�� _h#<v������:����.'��S\f&i2\����U��1��??�{��w��0(3"��t������7��(i	r5�1�Za�K���������S�v����0�u�<%�pJ"�M�J6�=wdY	��bl\�
x�����?����K���������{2>S��f��C�Q���N�����"�
5���L�"d:
:��ZF���uh��&j�p�.!E���(]���Y��]A�����5h�LHZ��fF<ru#k��9�n�9�w�/86v��'�3�jL0����6`�:����N��?%p���6i��'\���a�\$���N����h��A_-A5�n�L������{_7-9d�n���R��mS���}h��$��}be�#�X��1�vly�}`��0��t1����t�.'xa����e"��`�3���U�}-��y�
����e@V����,j��V�O-E6��c�h������1��I�Z�o������8U�,N3��L'����3�m�����;�u�`q��v	��
e�w��2���/�K�������^y8�55���)n���"�	.G��e�o��0u�nat_���X;���@x4f�{�U�c�w�����?���x�.��m��v"�r����v��O��Cb�������v���x �~s�~���IU�1>�w��L3��]O�)�&�� �� �O�n���9cz*�V�����Z�!w���U��
���<!O��ziL���,�3>����}��lx �S���Y����2��O�S=5���8kkT
�&�3����aT�k��yh��h��U�
�q�w%4M�G]h�JLE��	��h&p�1���W<�`r�j,c)��-5FI�|�+�zb@
�������2��*�>��f���>�� �W?�>�<+3���QQ]gk�&�@�nX��6�q
��)������rW���X�{��g��{>	��]c=p"`��n\5U5��1����1R�}���8���5/'xg��
N���3z%tN�]0�h���������������q��M�7�����#
�bx�l�!��U�s>�.��������]�C&\g_������s.a9Xs	<�[pX�
��MrY��FZ�v��<�f���t�6�G����iv��:m���i����~��������/������F?�K�����Nfx�����!��������G�W�6]E���J������@v5R�!)�m������30�XJ*�y�|/����}���y�`��_�%�	�p���a���1l��a�����7��I�8���2_��s�e�I��}9��9����;1�DK���DOm�����M�_ND�r����/ .L��@���@�1��T�*D6(?���hn��_��?@��
���$,��Ik��<��ln�%J���tz� e�s��n~�KX�.����~����T�3c�f�,�&�U�>��	-��w����&*��[���)t���8�����qr:f��]/Q�6���T���J�7?�nPn��@4�YOHh_��V��Az�����;�j�ca[X�����7��s�M�<�a���/��,o�=k���5 �:g
��a04 �]���S6k���������[�zq�Q���R�]��w!�J(��'.��[�fCS�Y��"X�����6T_�������.�[L�oa#{|���~���(����:��`��U������}��P;��2t����Y���a*Bi>�����s�m.Y�|3�*K�T�h%�������B^���f�`f��*����P�������������
�Pj��S��?4�U5n�ZI�@B^t��FS�$�0���0��C	.�#)��S��
7��~��%����e��HH}B��Q'-83!���YD��qbK���P�3�T�ud�7PA��d�]�(d�73��n��5�u���g;���$�Q��`��z�����;i��av87��I��^C�]���_��`"K�2�o����D M�� � ��������'��u�^	�7I
�����)��L�a�]t?'�0��]�	p�	��B=dSn�R�������2a���of�-��K����{W���g�wq0���Pq��vL�o"P�����P��|Q�h�f�kg�k���ux^2a^���f�Y+���?�r�LP8�a�]�zK(����<����Q#'�DY���E���*����&h������2q�w����zySb�%O�3o����I��a�<�v����ff`�=�vq�g�/����w�$���'O�]0���g��4����y�� ��M�j9�)
��� n��CJ��;~���V�	� B�H��d����	Q�LM��Z_���b��*�u����$�����!�3�2!3l�3���q���k�31$!CK�G�������w�!S�b%�1z��4�/R8��sWY�������>6��FO0���70�!�����c!��	+wn�C�����qIB7Bl���l�/�~�AS���z`����yB���1aYT�T��S'>�	UZ���g�xw����?�&?��s����dT���;��`��-m���P���eBZ[H%���=�3���E�����7����J������l��(�8�o@�[p�Mb�D��� ���SK~13��&��k��;��-�����>��h`!��b���;�JrI(7������F�U��J �����}b���f�*tS��e��)Q��F�T���uj��OU}.Uo�y�_�pG!�N��f7$��L��KbV�(���2������y�Bp���O^Z�^�.��l�}`���������UQ��U*gu�uj�e�t���
_�	����\����A����m��_��/��t�'L��S@����9f������?���i�SZ6��`r�d��.M������������t7�PEVp����Oc�����X�K�(�� F��9�V���{^�L���������q&�'����S�$O�83UQ�~���}�E�e�l:V��&-�1����{fj���x��{���2��	����j�T5�!:Q�K�O��q�P�EA3z�v����#Q�U������Z��{H��o��6E��)�B�tO��_��8�����uJye<� l5h��'%�P��!u����\���2�Gw�Y/5����9��!������Q�W]��r*�2��n�dZa{&�.�zy���R�����#3+�*�2+�����,���X7b���n���:S��4���B��^#c�[}��1��W'^��-����&�)�]����8������X��O=Nu�,D�a�(#���>u�1�2���$<W;k�2p�Y��#�^?5���I*����0@�>cUHJyf�������}�%Lcf��Z�&W�z���Re,x�����Xw���������VT��f��~�S��we�bQ&�d�TO��4_�S�
����{�����d�����(����[�a�<�]���xz���9�7��a���0o<<5��7o&&C�����f�7�2�����7p��)��������+8Y$J��l���l=�<@��������
������>/_T���_�o��Da���\W�v��Z�C�U`~���V��%���$'oe�qr?���4��X����lge�gH���S�PL&D�w%�	�R�4��13���:�4���8�S�o���.��>&3�c��+Y�`x� �d_��aL��("/� P���f����m����	K���,AH�����V�AG�����t��c�}=S��=,�����{���A��dr=]�F��>�Y��i
_�4�i�L a���}�o|)�6�������q,���K���Dp��tmJsQYO���@�>�q�5��[��I��1r1�$�����L��Dd���lps5N��=y��|�����W8[$.�����+�^,_�d�O����U�d�9���eTb��769c�3E&�����`av���4r�<Z�
Q� 9�<LR�����v3Q"{���o���i�9-��Is���n*�������|�]�%a%����h�c��f�g�H%�9��~�!zN%Nq|hI23����:�������J23^��Cb�X��OB6&;���Tce�Oh/Q)�{�{	�d.z�y�����(��r����|&������55)Z�"�_]�yP|���d31 -n�>�z^��[���]�����r��y�B|/���JP��D(`���<��X
�D	&�+p��p���`e�+|�go�	� P�;f���2c�0�e���RT0�{�+ZE�sG�Dv����h�Zh"v�i��stL.YbD��Q�{�'|E��-���O��M����a"o�R�+�f�������s���D�	�@���b���:�Eu�/�}rWZ��:��KK��!3h��f]�Y������`b7(N��PSW�5�l��q�A9�#�������FV�z/x&(-��G]P-���&0����L6�}'����������-�c������}��wy�V=2M@�
��6���:�����d��xw���_$� ��9�fa���,��g+��H9���| �9��O.���1���}�]�C^s�Q`��R�j���am{F��1������8[rp"����M{�*�y������|��`l������
���rw������%�w%c��w�Z��	c��j$�����~�&;S�J�3z$3N�<�\���1L���vp6W}q}f��L|r���eQ�<	�|����|���}�u�x����>����+��}�|��=�D���>S�;�J��w��1fVx�5��(P��c�*Es+��-�#�>Vm�d0�g�L�t����	�C��`���A����i�{�v]����{%������G9����.H5�w;�N��Ee����k��M�h�����W�H�*F�E)/ff�}S���5;�����F�39�M���cY��O}�q�S]R�������c���Z&�4�'�L-vM[�qK����E���vf�b��|>�������G�ZN��{�{;�=OuA8Fk����nb|��w;1����Dt��c���ZO{4X.��;��>�O����y�8��0��]i��\~���?��,����X���@��V��I�O��3f�k�{����~���@
'�?Ff3����������n��������z�|����6]m�U3,�U�t�N<��@�����D��mW�����W�k�z���y�W���}���|�=��}��/Wk�+�tu�uE4�^O�J������6_�r]���t�\��&����k�W�3�$����6���@�j��L��>w�
4���u�*Q�zl�*P����q(]��|.e>�R�K��Z�U�tu�uE��Ne��2_W�W������@��T�k)�=��^���u?�Y��$���Q��5K,Q���C����Y_%���� JW����\Me���}k�I�tu��s��k��k��{j��T���j�G�����9�����9���j(�(]
E���CQ������9�����9�����9�����9�s�E����:����/Wk�����j���\WCQ�@�j(�(]�r]
E�Us\=��G�����j��m�P.WG��j6t�_]�@W����1x��]�@W����1t�_]�@W����1t�_^�7@W����1t�_]�@W����xr>�W�@\M�0�j��W��9���T�0��T�s)�9��\J���a��=����:��Z����a��4� �Ne��2�S����������%�nf�qw!���*�*�����3��1l!�3<+0���D!����g��X��8�#\@����E~�!�1��7G��a�������7�r��r	�x|4��3q��sK	�����&E(ld�B�����!�l����I���tT�����R�+S@ M��j�2�$}K���g5;�VRg&cH��#V�����
�k�b�}������Qx���pz�+C�����U�pchi�D6h��w&(�3z"�����%���AK�T�9H���n."�9v.��mTo�)�^=�������+z:�P��H^��,�b�������D��d����Uxe���@������?~�|�~�������I���+3$���3�<LL���(�&O����['���o8���]	�9s���:�J�a	�`��������������a���'�4��enX�'���
S@4uID�m\(5�H�=��aW5� �bV�A.*�K�:�1�j��5��4D�duq���k�&P�����$J0?^�0���
��D]��t��/���j���b�_����H��������_K�:�����/=uw��n��/���1������L��!!;O���*���r33*:�c��.O�"F~`YtvZ�z�.-FD&��z�4=��80$������E�������a6u���a��?���s ���Jn�	�V����*"���FH��- ���"�3�m�~��	�>%"C��PP����^63�-�L���B`��������i�Oo����=�f�I��~�;@��.enzW&�A)Qj���2���u��3��[����'�����:�1,LIm�����OD�0��G��,
�wA�%������}������2P�o�����������`>c?Y����n� �kf��7	�RI�_z��$�^P&�����'�C�kVf`��5�*9�~!0�v��M/$��<������v����3+����hc�W��/�me3�J-����L	
�������_�Hu��)���^�4�>����I�2*s�>4�'�Aacx�������!�o�y������0��0�$-�RlO�i��s�w
>_����6��D�X_��F��-�D�L�'�W}�o��y�7���!���J��2N��T�e�	� F�]i�3��E*��G�&��>S�<�M��)=v�M��
D��$�E��)�a���YFAT�#�M���������1��!���X��&��E 
�7�'s��q�\��b|�.1��������Q	�zf�b �F[Q�=���i"F����R����9��g�U����;�Dq*��Ei�B\�K�2��q��e�p�#10^�g��q_��*��^�PL�C@>�O8��(=fg��&�E��Jb��T�5�u{H��)����]�i?��4$3��d����-��o�5�����a
���������u�0F��B�KN�Gq":��)������P�TRu�.���3������,���U�*5�|���o����|a&|��4�w���1
t�nL%����w
���!�U�Z��Sd�S3C�:�mw*Fx-i+���5�i5��2.�����G����i��������F���p�L���zE6~U���h@����=�����}"��GW��9��+��F��yS���L|����:a���Y@B�^M.C�{or����K����D@ltc��X�4�L	�>�O���^U�|WB�����	<&�p������S�0����-���������uJ�=�q"��`��%q��|����	��e���x�6��C8�!����fuT���]0�8��:fX��3��
�:�d{"H��2����������7��^�v�����:3+`wv���N�}���B@�/H�X)�V�1�o�l'���V�������%]!�]+>������US���������g��l���0�1"%�M�r�N��?er�����hg�F����/�]��3��	���1�4����������P�����J�]#'+�s������+A�+�q�*I3��.
r�����["e����*�A�[m���9b&�A����t��'�r�=#������b�\&�}��3>4�����'����E]���)����'$�$,�Dd����E���A�2�$S���V��������o��5-���ra
n	�Mo{f6��{���1����-��a�����"~j� �&���8�=�T7g���������9���������D����R`95���*$��Y$�a�b�uR�_�q0>R��0�[�pl��/:���v��KW5\b����p��OmZ��|!��#��`L7'�J������S�N���)A���_�*G?�qm!���?� �96�^C?����������=A������d>��%����@7%�������	t�����,O��c5�6I�L����J��N|�Q�Sgt��0��(&��}�#��E�-�q�3�tqiT���i�$��v����$�����g��M���6�����?��^��rl�s\��������I\�(�����>=7��xe�
&\@�B���a	�u��S�DADq�0�����:Z�:xe��������#!�^<i��]+�EuN]����we>8�}sG�+��0������e����&.����|��dx!�6������D�v�`����xK��-y�������}W� ?Q���k�`Q�4��\/La;>��T�_�������'���*b��:xe�����pTI(��1���cX.C	/��=�����/cC�*����!#����]+Q��<��E,M�~�������g�aZ;^23��|A^����ML	*��$�H�2v���6R@��N~23ge������7\������(�5_��!3�1�?N��B����A�L��=-J�SDI7����G�}������eM6"�A=T���)A��b?5�A�#���a��$. ��dX��9-Z�)%q���w1%�|���MO��%��:9i��U��1L�20��C��)A��jQ�j*��"_���9�/������g��������N��b`.��:F�����N437��G�nUwp�����wu(�1r�S�-����7���23Py�A� ������\Mw#��A4��3�X0��� !���b?���w�Q�����;WL	�jL����d��B]9Tl,��y�����_���4�����w�b����)3���D4@8>�Cd�����TS����zi��n�H-��K�i�@<����jY&������W�]�"A��'�z��E�A�����#0s�1�Dg���w%N��u����e?h�:A��O������6��X��^Ou������L��-�:Y3�1�qiB�����r���O���,�O����?�NW�p8�O�����%03f�~1MbD�0�i���F'��p
�Y�LD���'�&�`4I��b�e�l��K�q�M�cs������8�+�
����A�~d;����z�[��M'�[j��wwi[�����	�#�Q�mc)�����4��z��J�)���*b�_b�� ������0�9������e2��O����G���0�](h�3�N2�g� G��ao��"���
�������dL��7M����	�)D'
���qI_���ZG{}����!�Y��f`�����V�5"���v�i	K���
�/���9��@I���1����e+��rD#1\Sa�bl�]fvx��0�l�+8�53�<T�%�=T$�3�����~��L���v�q��9��Pdl�'fu�6)��(��9�[$�?��p����9m�s2��pPM���R����59��e��7�G�?&��M�JPR�H
��)���I�)O��>�i{������������tP�;,N��V��Q�����+���M^'�A�0��6ANk�0Mj��L�(���_�T��f#j�����O�A�0��Ug��2\TN��*���Y,�������3�OQn��?D�IW����G�E3s$�
�����+�!������1�%��w�2.L!��n���`��[�0����� ��0X��c[���T{8#h0
FV�B�C�;X$l�r�uj�r�4p`-�����QU��l�-�A����6�������p�w=3����(x�%����Y������u6�����1|�0��Db�q��/����2S�+��J>�,o��0'D���]�b�g�����?cf2�����B���:�0cT���Qj|���+���4�\�2�u!2Dp��b�n�������`_���ve��MW��|��]�������M�n[��t�m���	��QbR���`��X�VV�������:
1z�D�7���5�:lE�[�[=B�a��Z+���8	���33���=�o������."v�$�iS�w�O�Xs�������������.���Np�^Oq^�c�(��d�l��0d��Gp&��E��>]U}!�/s��O��f��yiN.x�V�p��8t�#���-#�"�2b�Gl'��K�S��?
��V����[	V�yx�Y#����,$6��3E\�;��>a���r�\�G�b�&��E�QZ/T2,��.9���k�������C�:���HnWU�������@������������ZJ�R��"��[Z�&fd���]�������'�{B�EEl�Y���������c��������
��y�%�B��!��)��.��h��D�T�����9�)U�8��_��>G�b���L�b���L�r�gJ��?�)�+���)4�����L�A�%&P�b�����,`
�a��x1Ja����p�#���<o��83��C� �������9��4���
�O�w"�������8p���a��%��Nr�a�������V��?38���G:A�z��=3�-4����bj��R������;qfc�7�N��X��qb"�]GE�#~��2S��j�j�wo="c���bw�z�Xo��1	W�{]c������b%�����U���`��O��VB�rq�$}��H���G�gw�mZ����dJ[�oYZ�~t���w7�,��d���d�E���a�v3���/6�������:w�7��g�i,K��Dv��?Vd_�%��Bg"�	n����8i��W���xh5���-��i�}����@���7=�����_G�ufk�'���2�N�]!N_x�*s�W�#1|��T��B�2���K���e��:��fz�sE�����DZ�s3����0u�OB��Y;]�c�������w���)I91���(��c�f�����XC��X�c�%��3q��M@���y�j)0;�a_��	��XX�\��)���*�p�9)��ej�(����Hst�]�L��o���+5!��#�EU��%}������^P�O��|�Og��w���}Y=��������Q�{�����]���/����a#JW��6���>t!B��i�R�q���
�1����|���c�Jb�afo����������}c��H�l����v��4u�����w
m�TZ�Ca�R�0�0�%��(�?Z��0������53��jFM��Hb�������s7f�1L
0y�,���B��'�#c�����8��xq�nt$
���m�|t3c�}��w;��SN�����qu_@Os$bq&n`2>���W�Mw/O�=6u`A&���`S���p�u�m���<�h$6">���x������e5X�����"&��wG��
a=����?��W�0bH
��*dPK�T�*��m��K���LK�Iq!��������@X��l[��O-� �Ta��u�!YT`��6����$����teGb1��_�2�-�(y��~�.�(�q�i�i�fI�0O�&����1�Yw���d6�����-�f����KM`CK���uhZ����-�<����xX7|(���I|�b��l�QC�H�P0���W����F�>3h�z"�����Vfa�H4���D�������'&�������z��3�ae� qk��aed�uMh����*���H<�����v�,*1KP���f�_�W�a�,Y��Mh�
y�����%i���������A�Q��#���1Lw|�Tx�,���?q�D�)��mtK=~a����e����`��,��)����#��xg����P�-I*���%��Vl7�V*Hg �Xw�hgJ{4)*��r�/�����=��a;�R<�T�D6?�ef����Du����
E�>�j��������E��gO�[31�9"'��Y��a�WV�]us�j�~Ci�����a�GT�@�>��xT�f����/���o��M��2������/-og*6��-��W��H��b�=�"����Y�3����/�	t�/����]q��K5H����
������y����8������;2�
�c��#^>�J�-C{�B����Q��6$he��wb���N��J�;����j:����@Tx?,�����{���2�����`vA{��#=������Dwp�Nb�M���ifab��F�O�&�D���-���|T�����o�0�	M����	����!"�{G�+��Ug���m�Po��*#;z��Z�Dv���WS2���`d{��F�����7�rv�������I
��t'
�7�=�o�%aO��}�7�W�����C����r< [�x��&8J��	�R-p	��n�a��4�6R_n��B�+S��H��w����s!�Fo
X����-B�����hyW����&���SE��{g`�]�#"X���LhlL�h���\������}�����������,����O�|�mb�L��^������+%F��#�2�T����]��-�>U�Mo�h5.�����`�u#�����lw_W�>�P+�z��Q��b`���7�X����G/��w��73l:h�&��t�h����!�O���90���
>�"�x�����NV���bFa���@���-"ig��<�f�^z�l�]��z@�n��K���U�;w�Fb�A�����r2lv�_���G=�:����!���}.�2l��23��.]*D0|�����?�����"�c)�����[wK�[�s����w�B�|p�����-|�c�L��'���#��H�1�H�>�0W!m���e���5F!�O���uv7�����nQ���,�&��M*j�8�^q��
�Bq�����M12p��������������{�P8ch$0b�qjdt��f��d�Qa2p��!),Z�&g�k}2^%L3�V�;�-��`2���r`���	�uJ����3���L����T���	Y
��<[q9��U
C�lnr9��+bNd0���@�4�p8Zbln��%V���|eE��-��)x)
�>ORws�R
�@��(��s-��+e���"/	(%\��@,��V4\1[��|�$	ESk�R��3V�L|�L�`p6����8��C	��&��j��O��SGq_2�!z�L�@� �-{f�6��w0����L�S�����wl1��w��%�����4�?2����t���-��� 	p��3<��C�`��2���3(��k� �����0�����G��#�xW8���0����5{0�O��dQ{e��)���'��V	K�fd<h�������eF���=�������`�H���|�����r�kj��<��b�U*�Lw���{7�r�!�Q�Mvu�T�#�X
�����xQWI�]<q?��HD�������|ce��l����:	���
�������@���S�U@f�z�[��.��J�71(��zlQ5lU�M�a$��T���^B�]k���Ta����Y}����O^90����R}���/v)���L�` ��������"�>L��1<(�kWOi�|22������O�71��:�U����E�MLb��K�����xKQ}��w����|���&��	�71�!�k(�E?)��I�w��~8�����~��W��@l��~�J��b�{'(2
�7�q:�b������D��#�#��#v�#b�	w>
�S��3��p���*���q=]�$'��k����+�
���[��g��]]��8���W|��p�B�;�}����:��|b��w������>C�;�t>Tw>����		��`��py����)s�\�!�~�Hx��a�w	�%<�9:EBB�GA���a��#���.�<�f�z�<�_������L�;�#��a��&��R=��O�/&`|!�@����G��$��������>>�6(�4���}�O���O��~0�M�r��r����������Z�1�wd����.:2�wT�����7���<P��#V_�!�������
�c�ud�����3�����M�W>P��%�Ww;�W�*���q�#�����t:��r[x�����@��
���]��pF>��;x\+��d��]!�U2����K��Q��
�������4�}7d������|��&���L�
��G�|d���r���!+,�ud���UBb��w0��
�Y�(��|D��=�k�Z���aQ����D��n4����F!!��T�������Z��,�����v�%�S�=��h$��G����������+�Tt������@\����3C!���O���p��M/�*���&s*��DE<���2�po�)-i�N<��j�it/,�v#	H�6b���+f	��{&���owG?��~�HO�����^��N{��\@12�J'�F���
�]��b+��������d$�nv�p�����4t����X��	J�Va�E�]^�	,8��w�@{�l�<Z��\��D,��t���g>����(�;vi-��$��+R��
�1r����.�|��71����_��<����2`�|^�8��^�BwZ:��a������������	'�`�r{��/�F��DHx4_�n��E?�3!��j�8�����z�zOy�����t����D�����7J���STGn��=Zp��9�(Sq:K�F&����g���������Rz�%�e�bv���=�����Y�4$N���Q
��L�*�Z]����)v<�p��W9����^1�����8�)�7����D��z�Xx��z�C�'��@p@��
�(���da���"�I�(���R�����?�P�S�u�\�Qy	]��(V��;RG	�%�,��;/eG��g+s�OF������\�4�P$ub4�par�t#���aS��~`���f�Yd�����Iu�I�B���=���7���	�����5��A�H���]��Q���9����������g% }2�a��4��RZ}/3��i���{&���"�v>3>1��o�D�V����d�4/=���������x��~�;S��0��NA��{N8#+��!���$�3#������A��	�����nX1�i���3���.z��p���O���.T�;�?1��T%����7�'J�,�-SO���>s!4a5��vf}��]����*�g�/"Y�!Rl�)U�p��}��R8i�W��^���u��D�����W���e��D��UV^B���um(�����e�U/3�f�uUe��(3�z�y5���*��Ne��B�xa��UGqi��P��$~�Q�6������5It��TqN1Q^R
��kH4!W'��)����m��O�1��[�cW���]<�,S�n_�y���n"�������������=?�����/���ov$��C#�����o����������?����_��w�Im��4��j{U:�#Y��dL��a��+�4�/G'�Al�\��x��N����GU0�<�+���V�)� B�FX���w l��W*�������d�c��~p�v���W����on ^~&KF���kb��	� ?�;���Q�3�qB��-2�=ow0�6+�{*�R����-X��l9
Bl��:�������L��5������oE*g����[��o�������3����lUdwd[���]A����X��Lh���\X1��d���@����Op�o���m_F"��<���@r����1��9�?�������+C����8��E�����x�edd�!������H�����HG�z����~��WZ�=3�)�����H,�������������=3?���������������K���c*���	���h����2k��uf	*o��o"����M�@S��xf6!��`�+����}�:�����"�C�`"*DD������7$6���3���TyY��e��m����o���T�.��T��5j�����h���h���F�v�|��Td[�����0�L���G9>��������2�r�p�_�i^x)�22�WBS��z����D1~C_UQ��3����i8��S��xd���?&�5�lz�����is��%���p���D�H�q���4��!�����#��'p?_'�z���/�������5}�~Q���k�KC�4���������*�mb��P��<�!&:���i
�F���������h�[���}��g
���-8�qy��51���w^����*��CvE�-2d��2u��G�`�P�
��=1�:xI��:0FK
�r�><[&q~����g�T-�L�D����{�-Ff)�����k���h�{�����]��*�3�������[�g{E�-G�;d�C�H��{�Nl�]_�vj"�T���%r���W����������H�x>$���B"%��>�UF7u���P��#�oj.���l@�$��['����h�Y��iF���v�����ip�J���\�a�;tO[��n��������t���`PF|{S�
�t�0z;�	�0��+g����~L�P�vi
I����s$!�c$�gx ��7��	��,���Q?���H��p���%�*c�S���@Q�f!3�{BM�7�.	E>��z��g:�%}-3U1�"nj4i��Vlz�k��)
'�!Q����X��L��|�{��t�uu�~0��GHP��%61����rH��K�(t�=��i��X�%�������{
�Eb�P��{��&�


�I$�T��C"��d���pE?s��LH=���4'��q(U7�1�.��[�g���R��cq�x�BDc����/��@������^�����~��;0�'��t�z��d3C,_�%���D�-6!��H��a�(���|P��+�k�T+�
��*������h8��v�Q}����h�[g�*�,Z�������D	�T���the�o#���}�;"j�����7%$OL�G�7we�a�W�5T���l�2�������� ��������/���w���)/��Ckd���.�z�N##�c���"���}��	"�O`����3���$g�o��|csYT���Aj�����i�K�FZnb�!�^���H���Y�W���g~'~�����A�\����g��?�7`!����P���������(��T�L���^e�{b�V�g��h���ow����"��fG�'
�d�D����t�DB����9(�wb�:Gvc�F������NS�+�~��$9	�>Z��/�NV%��#c8���O����J%�k���S,�3�
m>��"6�b22������
m.9��L]	_G�����'��qJ�Y�)�gB���"��72��Z�J��}�(�����>9�z(�E�L�oi��Go���Gt���E�C�|a$Sc9��:)��X	X*L����I�Z�2�D�G�`���
7qZ��0(��s����1�������9����s����x���!tb<�|L?M��BG�s���<h��a��V��@s�l��4|V�l��Z����92�j���)����B��92��^G��Q<�<�r���{R�I��VB)�[������@4�qM�m>���;r��������P��YF�����s��HC+��I$�T����9�����j1p��G�^�{�z���VB���*��#2��pI�������d���@���x�s���3�x3OK�R��_�`7��LT�h���Ug�@���N���1�U{�Fb�4o���������[c�=���d6_���1��P�C����@�P����7�B�U�@��"7�N'��������F��+�W��=���a >]
���N]��0j���\�@��snb$��5f}���f�!���[��"�^��9uMVM�C�"�o���0VC��q�QD���|��tzL� X���pk�p$>�����ty�����ND`V���X�E�g��J	�C��#��7����`�HD!���I��&�ef9�����{s���V�[����$F���d<CKL*A��	{��[FI��"j���{BmI'�B3���{�H�t�(�-��'���h<�{�u|/?�b�{	����0�)������i�Ol�lz���']�c�T���z�F��3�j���<\{����j=3��������4�y���*1�g��~g�e����>�q�&P�kD�Oc��r)r�}^�E���,�4��XR�al��y���P��L�M�rZ(��}�f�z��F*�~��P��G�� ��q=��[h�������O&5�Y ?&�H$�Z���;]<�U���aTg<:���a&��bC|�����KG���'�aj���/���K���4p�����[1�SG������.M\�:0�L����`��a�����wg���l9���L����V�����N�J~?�tN�i��D���W��LD��W�Ro�u�H1!y}e�d�LH�,�&���t�P2
����4;�"F|�1�FpV_T0�}��1V�6Y�#����1�@��`b�kf�5'j�5��8�63�����n��cm�U����D�gxC�y��?�J��?�$;n5�TR�O�a����>���\�aD	C��K,�
�����$���X�-W�Dk5J�,~�,?
n6������7�<X���2�em@��,;��|�N�4L����������������'r��q+���D�����0����q����[��ZrL���O����%�����3�s���v{�1����r�q�ZA�#�q���R�&f���<�f��B{��Rq�����U4'�������[�}�����,QF��Z��+D�2&)���""���t	We{�=�>T��b�����DO/��XNDBdo���:�@Q��L�O'n�Li�������}�^3�'u���2��������>WlNCH�?�����X��Z�1_�����bG"�p�����Z��	)�q�� ��g6���>����Y[�m��Ms���8(�b����C=��{�����|;��\e4�M������j/A<AT0��V��!��K�18L�BB�PSg�O��Z�����bvI��b���a#S�)(�����rJ�c��v��=�Nc�	0}���_e(y���|WH*h����e�?/>Eu<�u��c�H����9��N����O&q���--�w@���R�`���(������:/��5/��>���_��5�xy�5��%Z��_��u�
%1�p�~'��h��"o��Y���,6��3���a�g�����R�����j�;:��{��g��*���R1��_�"|�;��af�xMu?�}"[�^�>�.����'�y�����Q�t�(�-�C"��#�3!�T��E$UU��������g����m��?[�����9V�$����rdF���8>UI�:���^�
G|#����o�����3��D@�97r(+��%(� O��OZv�x"���8F~�sr��Dx�n� �l ��1<����23�����{��<Q�Ft�[��8y���M��C���ZV���Ie���iv�E��j�;T��.��.u� ���T70���<��
���l�����A����,��Q���6�2�N�,��,�z�[O��KkNO���$F*��+������`���i�
����:z���Aadqz{B;�n����v>J�Sba������#���~��']��<�|0����Z=�?E�����)�][�f��"�n4%g��^�����$��g�����l;�Q�����dgr��d��P�����L����+A������|m�,����-�����J>��8��8`*~O������~c"$�,�Yv!��6HY���P1�Zlw��Q���c�f�`��
����|I,��
'D2tIF��B@��� [���
�����y�������X�@��fE����sR���9q�����o3����(����u���O=h�Q��o��������W��+bn��������ND�gf���w��~B$C����Y��Y���@�{&f�����aP��c�\���@ftS�0e�t"8,QL�e`��t5~mJ��>��X>IyCl��bo~<�We�ff`�S	GF\�<�(����,��4]V��q?3�S�c**���LD�^���=���z�����7'v���~56.A�9\�[��T\&�	~��Aw��O]���Cy-�5�*��iz#z�����
�QmJ$���]|
�Q���Y��DJ��R���t�]~��$��l�M����q�h����
���J��%���:|=��3S1EB
a��'�Tl�8K���X�`�.����}>\]�����{�~��a�n�*��v�Q�M��Y���s�#]8*st?���\
��Q3��B����*4���X�S!�����K���|��pQ�l�%3cU���W�����Z�T��uFs�X(e���k�O(,{�b������n:w�.���2��I��D[u#����Y���Zl^���Ha�_v�w/���Da�)��O��F�;������B�@�@��F�c��P��~�?eB���+��_{i����7�6�g�Q��.��[�x��|�3|8�
~�T���D>�P2^}(,��r�%�)����+���9�_x�zk}��@��b�i)���>�f
�v��OD���c��zZJ]x)f&+oG�H��6�����-��?���(���S�z8�vKs����n?O}��`�i��mU��\=)aW�yf����\��.4p���X��W�g<%	V=����@���/jM���_J����Hve?�*�H�m��
1�i�(����}��P���Rc�9(��H,��Z�q[\�n��8����!f	
�AS�s���'r�"����J<1�T��~���?�(����$|�l"Oo�>2U�%@��/:B�@���i���x�`*`��A!��d���et�;b+a�I�#/��+f����r��\�91	$��MuTx��S�������0�B�jc�[����u��\�
�f�����|���K��w���9�)�;r�D��`������r�w&���	��.N;�3l��yE3i������c���TE����cf3��K�
��p�/�I���C��������BY�%l�3���I��P���d�Q�o������\U63�HM�C��S���Yo��zrB��)bLL+�a����Ke��������}zB!��0�9�3�I@��6��K�-��k=��D�Et7��^[�pD�j���d��C�$����AerLM��+��R�i<��;oi�U��@�����:�����{��b"�}������H��Aeo�QeH�B��� ������-�
�����&�41���E_�L��
<T�Z�2������>h��T��������2��Os�.35��w��Y<���P�@�Z��Z.�����h,�w�����OeJ=!wk���E��?=�#��^Q�
�(�����h����<���_1A�7,���sbq�04��
�����/���0��05�l#����q� ����9���Aa���F��L�_���2w:���|1<���`Q�����V@�7������\��8Kx��PB��}�yhu *|N�X��x�	f"B];���'��0hZ��>����&�&��hwqS�-�)���Zh��c}L��h�o���$n.WT���nL��1r���j�N�o��V��T)gFQ�e �>N]3Al���(7�F=�dEmO
s�����qH�}z�89�w�n�^�Y������i�#L����_�u���J�8��0��k�������dj����.�,x��Q�]+Vf�lP$A�~n�\|i�:�S){��=f�G�b8pT�$|b}d ������������.����72������Gk�f�m)cn�X�*I��j�x�A����d{'6����(��Cx�QA3�X��8�r��q��pH���3�R�6_�1��-��f��@���>�"L8bE�O�����2pe![����]��[HD,�d�\��:�������j���E���5��'�0��1`�t���{�\�b���Wz" W�9y�?2}D����
�	%~\v�Py7���c��#��	�j
����`���1��G�;�XYP	�,�cUT���i-�*D�)L�c�bb�����)g��|[!��t�`<H�
����tn8���Om�{v41�G�m����!!���G�����|[Y�o������H���\��n��M"�
���:+��e��Km�R_in_����)� ��:v��m~��LP�t��_'g�7�w�P�>���?29X�'+���	���x�N� 6N��Uo�A��l�f���mS�
#��]k�����5�CW���+��
+���)�33����: \)[	~�h���Sl��.-jQ�mWQL�Q/ ZV�v)���w���kL����$�qg�b�`�#O��X`�K�@T����:�0�
���i��g�y�rdjp���-�7��Om�����3�7|0"�8�4��A�OV�������)�.
��!����sH��.��������A��k<�PP��w.�w�;U����4U�Pd[����]����,�NCs"B�n����T��U����O����&�����������a���M����L"}�}�e>9
Kn|d��Mt����������+���������Km��"|��~0�S�e����=:��D�����|��6�,���/6�m�7�3����R��j���)GF�������a
�P_�mr>������"��������A��P�Vb>qwd �i�i��*s{X�0�a�V�b���K1�"�����?H�xg���,��GrH����57����v�Gj�}N
����r�����������?_?���?.��� 0mI,/��<{ ������r��\=�z�<���s��D�*R��U ��-���qG����mds��p?p��i-�3�������%N������s��>:�������i�s�2+���jA���������c�V�a6��i-�����%�O��Lb.{2�s#��
j��&e|x��cr=����Az�{w���o���ye6�ojJ��S-��$�RZ{�g!��y�
�J��	A��G�����W�fy\
-7�W1��]����1O+���d������:9�y���1�C-���QPb�'
��u*���<�{��3!�P�n>�RN��@�t�*�qG�����AY��$�Yz�8~?�8��`���4��w0�*����-�Ah��hS���A<}jb7���*���0"����02��(�<�k`�����%R~�X��qum�~M�KC�5�����<E�
�&+l��^U_��V��Z��C��$���*�t�<��u��S+R�
�A7��p�����Zr��O;JS�U�EBG�Zk�k	�71��VT%Vm�K�|dB����J��vh�od������$�
�>����q�Z�cX*��uH�Z�<\���l��^�[���U����s���m�����`��e^*�uf)Z�i�u-�8��@$�\�@�2W�#�Bmy��a?vL���,����'�Z���BN�a�/�+I��A��'r�S�#N*S_<��"�!��,U�u�P�����
��T]81!�T���2'�(���-�����J���:�A,��8b�Z��_�d��{5�&E���\���j�����Id�kS��k��(�'�0R��0�H����>������k��:�k�J-82��yD���:�bC����l���d����)���B�`�VLT8��6u�C���[��A
�m/�-kh+��
w 8��������)
�Z�{�)�k/f``W�#!�f���\E���A��%�����(|�V�@�KU#���G�[�9��F�����{h��X	 Q��O������,ibC�6���I�����v�,�������_3��Qp�4���+b��f���J�<-�)������Q�����8�cy'&1f�����>7��'z��3�.���?�
���^*d��::qf�sqP��Kd�Q�:V�.3c���!F�e���`��k��9As��]'�Q5L2]b��R�����l��O�	+d�����v�=��h���k���	!wl�u�0;�&������]�"��K������$��ow�MY.f�p�s� ~�<-�����J}(Sh�*���A�UL�Q`v?�'zA�IZ����ff��udP�j���_��
a����<>�jv�xA�C��a����X0�C=
sb�I�{�8�����
��b����Z�A���t����X��L$�=�����I1#/�5T����8�VK��$n�t?oGtv5%����_�[�����x������8��^�(��7spw�cg���������mK�S�-�/��MwD�:=�o��d�RKX���	C~��D�!^�_�Jo�8z'l�cG��Cy����vI_hm>�x��3re,I�>&���������oh��) ��L�2H��k����o������p���?&�b�:���X��AT�����)[3��S��-�T����^���'<t�����c��O�ey��>=����n�r��d�%	���8�i��}�����2��b���R���,����&��;��qT��=�0K�
��������_���W��
k2�,�� �e�S**�`�XVI���uh���T�A�Y���H�62(�Np������� ��<�����dvO_>0�����b����6t��av�E����V�H����cS�2�Ls���~)�<��fee�-��d�H��u�����*�!at��A���b��[�D�c���U�b3	��Fr6 �N%��MF�S����E8dG��elsG�����[�s���E�
R���bb ����S)l���8���D��$�g1�B���l��#d��(������gs\��5��-T��#KS��Y�[Bc	{��t��H�pqaSWm>�R��3�H�����e���7��Z��A6>V9Sw>��2t�?%CG�����2������+��Y�I�L�~12��1�M�3�%(�ZZ��^��#�����K����M�
����W$������0��}�_���z��x�U����h�C*�91��(���������[�:���f$Nn��N�lO�82?����n���[}��u�Jv�T�����8�^�R���������}�rQ7� ���m��O&v���k|+��77�d���������M���p���L��������M�]pi��M�}�	��2r�a[�M32(��6M|��4A�M�}��M�g��9��
9��x?��w�������0�c9������~�����W�Z�B
�eRj�$��0n���g���9��B���~`/M8l���0/��%�"g��^������f�p�����M��D��#aOX�������d�
��:>"����`6���	[�A�jb7u<�+���J#1i9v�d���P����ol�N����X(�y�I���M�����A��>|OyR���������3�+�x��u~v�[����Y���@���������p��77�SZ�����#������6?�cd}i�'�����M� Bd����C���4�
�,���m��$�����2S0�z>g���C�l�p�pAXR�G�q���(n�m��U=2�E���s9���3�-��$�,:f�9��C�%���y���{=�d�����q�gt+�B��)��[�X����u�O*s��/��|r�bn��1��8���hO�X�1��JU���D$�y��.t�@�!�t����a ������h��B��r��#��[n����0V���� 1����=z#���|��}�]�S;H�3�������Ow023�n4��������G��,���r�!9�x���/�M�e�4����G����=���+�g�eX��Q7W8=��'1?���J-��xc��>���j�Y�����uR�D��U�L/����M?9Y	��`�q��;�/�k^�����1��o\���0L���������X%��\�=�N�sW��^.��e�E���O
m���;��s��9y��DT��.����{n1��VM��L���*A��30���>k[e��B&���s���� ����Q(�;j���"m�/�����:a�G=e���b�x�n���#]^~u%�#\����r$���|����5'
���l���i��X��f`�d��#{v��)%�%L��X.����=�M���Vc�&�����Wo�|)��M �)���������N?|fP��6<�<��HG.��-������0�}E
�}\���3!��p����2pK'0v.�'^���+5�9z'�*[.��U���=[��;�t
I��y��FF������d����]��-�73Y�&��|���������'��G�!���n���h�3�8o[������S�M��YPm���d�z�E�A'����<�<���>�f��7�n�Gq���,����y��i�������-��PE8o�,��mG����;��^.P�������j�DF�S�q�����}�Xe�\�Y���+���`m��W���;�,�-{��{*� �����1�L7�$f��1����$<�:3�HwT�
%�_1�
Z�M��[��3��cd����/�y���A�lM�w���^;��w�-���82�q4Ps<<td*n|��WUO����1���RzE���v�}q�7�7+�����e ��d��������#��c�
��G�\_��_�gO��';����j��=��r���%9��}��`�O��X�h����O�m��O�)%��~x��(5���b��l&��L�AU��1���>{�?�c�7D��ghz�������q������o;����+~�m��~���6\>���1^>�����\,���:/����	�e�7Z.���5\���r����/���r�|��G.}�������6�a���F���>\&,��c����k�5�r����t�*��\>�J%���.rJ�r�X��
T��U�����������n�+����^������
T�e�S��P�>�j[��\���{�����������x)�������t}(�`���������H�����G�;C!,�a���t�k����{�A�1��BX.�C�/�6����6_k�����I��u6�Z��D�%�aP�v���
�����E����z(v^�>����}��q=U����z��A���P��:����}�����S��z��A���}��
��~��y}��/u<����z^%?���~M��j���|��7������1�?���o�)t�/&����������{�W�fN��_�	]��1���%t�/�����������;BW�bF����]�����!t�/&���������p��(�\��4 �jQ�i@��2���W���D\-oq�(�4 ��P�>����S���y}����=]
0���y�X����C�����M���O��.����a*�n���z���aKr^a��1�01������
��t�Q��^@ m������R���������<n�p�N>�7|bW����C.��W`F�u&o���o�O{��6�E�J��Q
�D���v��j�y�Yq�9��I�����Y@ ���j�2��?%��nE0���4i��)M+��J�2:+���N�|Pv>q�$
o������Ds�E�M��ND@�.)��<�v (?�qR��m�|g���-�����o��ak%�������$�,Aq�7�����H^��,�#*���� r�{'���������>3�����q���?~�x�~e�$a���������9�<3)�������2���Q�Uf�}�:�-�������L����L���J���y����4�VpJ��Te�+
�R:\.� J�1U�a(�m���Y@��P";g
�+
e!��(� ���_��A��O���~�S�y��7V�!��}�>	��=@;��N���;-��3?��|�G{���uM�CP�]_Z����JUk��aRj�Bi���@��k)Z� �0����`�Sw���v0�u{V�v�@m�\�6K����(}
9��R��i���98#?����VGd_�[�'#"�P�:����~�w&Lpp,lBlo�p*�L�~A�>a6=��^a��?����v����|�'�A��/�}V���0�+Tl��^�u"bq����g��G��{wQ����^62�-?Q���-�����wC���G��G�J+T�I��`6�#W�/
`~��G��8��:4�31�H�oNQ:��pfh�U�y-#Z�8�^����\��w�u��M�R����r_>�p�������8��~;��:I5�>L�B,���~;��:5�>n+v+6��3X&�`���%��Z�"��D�?��=�����e�
��+�s�~0�f�
�J���M��}i���t���+�%�85�)Y���gf|�35E_����I���i��RC=���'�8�~g��_]o�
���.�9�����/.I}?�2��a�����>Ge�'O@w=�3lOap~��������|\543���:7�b���r$���2��������/�����
���b}9R\�:�l"`$���XE�����v����j�rk�i?B���p?B���0n���
12���@X�8��D�(�@�ya?�&��6�NW�|��wi��-4�
U"1�T����>��QFA���;��������`��Q!������8�\'
��������X7p�����qNx�A�ln�W�G%������������	��0N�����%K�{tf�^��7="F;.EWx���������C����?��D�M���xY��������Y�z��b��A���~F)�1[pu����������������|��D�������L6��s�V��x�n�q��a%����Cn�x_gJ�1+��O��,Qh�fqby��*���%(��#��9z'�a�'<���^���Db��g���A����?p�r>2���MG����;F�.�MW��N�{=50K���c��ST����S���X��Z���b0.����+1�[�wf\����M]���-�P6��A�o��a8��3�1��^�\�M�v��h@����=�����}������)�b�
��Q+�#k�����JA��m�T��L��5*���5��%�ccDp��Y�"��D@sT�k7�����������X����	�vL�t.
����[�#�M�,A�[�'?�����7�w����&����W �e/�<�eO��R�*���@<]��B�pC���;��z'�.������6�����]'4������������Uu[��BP��%k�Qs�`��+���{����R�w`��?�}q@��QB����~�v8�����3�@���������y�����p�w=�Mp$��1�k�3��9�22�1"�����#�E��o�29m���F���
h���
�J���g?2�p�V_�Gr�;�Gs��H����]%x\�!l��
�����&�A-V����T�E��=ti����n�,3��VV���j9�V&|�J����B�
�^������b����;��F���,����g���>[yO��2xT��(�V��($��qi�l1`�%\�*�h�\%��O#2�30����vnT��5/wh����4'f�%<��V���<3��e�
x���'E�H��#��Cf���#��f���04����X~n{��yQ�%��-wx-9VP���[[���{�,�����N����<��b;�0���pl��/j��<��/���
���O~�6|�f�o�>	�����	+)��fN��!�&f	
_�����}�@����z�`���XY�{2�nO�21l@��7���5��8���|)j60,�M���i��e"����O���~?�Q�I�00�N}������g��Lxv��0��7��cW�t3A� ����O�}g�H'�G������lU��[:��-�������Ws-Y��&E�NLb�`f�/*���y.����d��g�0l�K��w���*xf��u��]G��(�X�����:������3��4T����TJ~��u/���T�ae����K��%������WG���Y&�����E�������&^\�N"�������H�:���O��#a�+��{��I*Dj����7�
B%LD�Y�7�]��EcX�t0�s<1���N��?	��;���
G���,����g�>�~��*	%<3���q�%��D���J������6t����q�zQ����=�o���k%��J�����w����x8shmc��t%Myf��K��'Qq��r�9��M'������?���"(�,y?�������7\�1|�'�/���T��<R=o��I�LG�4/qtLK��_-8��5�g�X�i�U�5�@Thz�k��a�=�,A����ug�9��A%3c�z��[�<jaf����$��z�Uo����'��2Y�F�-���l3c��%1��OH��G���4K���g�>��������k��W���*�����T_s�[[�gt��I| ��=��0p���i�{W�z0
��
f�[��377xyEU&��(����O*c���Q�Cw� �h8t
�+�X0r�|�� �����z���&���p��%(�1
K�A�jP��*8�!�����3x[�j�S��1�W57i�9Z�B8�����>.O����hGn��������y�vikh��Y������	Yk�(�����~��T@t���|p�,�~��~gf��o�'�z��I�$|�������v�#�fwC~ ��OB�K.�{���d7u�'�����������A�5����U;�V�NK�f ����!`�h�GWt���&��8ZN#c�/���;��?m�.W����\��V�?��]=��S�0f}0��`o<
�tYR�I�-B���rb����s�I0r��?a��|�q�y"�����o����`,a�3�b�P��!�H�n��^���u[�O.nO	K�q`ui���r�~�j����7�B���i2�����0�.���,b�b�cA�Z��V��t`a�,c�L���-����a�O�a
Z�f�������2�+��6?�b�{�m���3F�b���i��#�2��D�]�*^������^mc��e�����Mu��D9ah�D��_UK<�\���t�c�o�8�Lb}�LM�aWE������i��z8u�c��M;���4��68qD�&&�"T�D���"����x>J�Oxd�&����t��+BQ�!w&�&�emP�XJS���$�?�����	A������T#6������J-T�e���e�����`��)V�JJ*���/�S���ex�����{����O��6��x%Tw���a�|j�F�_��n�:�������)���7�SJ���)��]{_�lDMtllu�P��������G�r���CD�&����D�p83'��?��S�����z�Og������s����:P4�>�b��5�������
��W���t*=H2E
E%�0��Z�n���#fa���&�Bow?�Q
ZR��}71z�[h�������>�B���X��0t�Sci�g���u��0�F	��>(�%�>P�o�d��^~	��}��B���1���&���
�}��W1M&1i��[N�s�XM�
Gy�@%��@-:0�_T�Zk�����`)����O��@����!83,�b��Oa���������/rn34��������-2��v*��`N�G�����F�?(n��I�iA0<3?�S2\1c�b2\o����'?�0�\
��{4��b\}"�E�,�sxxv+�)
a`�=�(�&���{-Tj[qZ�]GkW����������6RKe�n��������{^[�� B����X
�p����N-���e�'k<N�A���3.�Ai��C�������N-/����Ro�)��P�,^���>��:<���=p��p�3�-�C�)ID�5�h�	32�WYRFbw{�	���[�k�Y%���Z�x�ac0)����
��5�D_�)�5�<3����������=~������w?��Z7t?�����Xb�+7�+�@1����HQ6"jLA83��5�BK����>�FR����#�W�b�|�/8�U�H�47c}V���w]"�Aq�(�J��es����(�%���p��P<���=��������������,��x�����wy��������u2D-�����g��M'��\���s�m�$6����
�"�$�<:��#"���Y�X7�e3���D����G���Frkt`,]}�b=�FP�������Hx�+����y���]�3�W��P����������b��)�FF���k��E�Pw��j}��a�n�{S��Ly�~�<R��Y*������|P��2��4]>k�Wo:�4�l�V����YHhR�>
,�g`*VK�_nPq���`��[O8|��~��R��)s������)n�E��L�!I�3���M��*m�
�h�X��]���.%�m�3���B8��2�xg�XR���Ms��Q�d�������O��OS��D��L�����.�T�w|�|��q�9���]�%�����������&�'�����h|�J����@�G��Y����
����G�������7����vs;����7fm>�B�Lq� ������T]Hh��1�����A(�������;�7����7���"v�y�z�LVN���>|A&q������T |!w�M����M�**�8�O
5��jer��;h,�����Ns����*���b���T��/��s:�-�}�	I�\/>�&&��/��^B\��L��3E���{��.��Nl�a�]lp��|P 4������*�L�I����`X����N'M�d��*�b�&���Xm���q��{t�JQ(<���|;����	��27_u�!{�>�<�v�����������RBQ��R�NBnJ��y����7%:Q��X��l�����I��,���6%S�`.yht���t���@@{W��;����'�.���V
�I/�A������\�Nk�#4�L|I��ff��
����a�W{4����-���@����m$jW8�3����=T3�oJ33�m�3]=y q��>�X���� �^��d���+�k�L'Xn�5����vs�����xf�Z����x?�e��yx�m��2�yc	�rc�<;LT0�M��#��B��h�n�/'�P4Bn���C.��Kg	��c�M-"��{�AM���E��T��C�����Y��ST���x�q2�������hm<���
�b!h��r������Z�U�-�~�"*�*tc����A���4DR�8RM"P������;���rP�>���d����#E��!�����it��O�om��#�M�tn��0Q�8���_�.����(0ur���5R �%h���n{��#|��0�?����Z��5�b$j�/}�#lV�Uz��32�/IK�Tg���b�X�s���WP�F
����r��G�O!�����%9l�[����� J�����&)��	�T�%1%���P�C�{C����~�*�[��v�U�z�2	jT���H�Q�)��[�I[5��n-�s.(��T���&�8Wn:�)4��_�E��t��?��e�#c�Z�]����C[>84
A�(��b5Z�2�:W7�n;Q��Nb;%���uJ�����`����l���I��>G�.��u�apj 01����e,.3��]0f�
�Flk�r���a���NG'�Ojs�a :o��Z+�a��718��pK'j��3��|��c�C��M�a�^7bA��b~�� ���]�*�i�uK
:P�W�vL���{��`gfs�@�/�%sso��������7�3����&��R�;*�����T<��F�]��@�Uu���#�8���oE��H�����>d���'+�R[����|����_�Y�G�_��R�<�ed��6x$�pV��B�U7;���Bq�d����Z����E�h�$������,x��Im�2,��s��!�9�9Q�{
��$���*Uu]w�j���6��\�������l�XM����� �Ojs�!1[��z�a�'��c�[��������P��I���Hm�7����SmG�*�:�:*<��#��0�{��s��z�V����<�LC���P
���d�%(6g���|p�aO�~0>qpf��U'�}P4J�{)��oa`K\�):�?v�����mZ����21R ��
�*��M���o�dS��DHa�@��������]�>X7�7�79�.���U���0�g���jjd�q�~<��I'K���MS_T���!g*�B�U7I�Vz�R6r����s����"�p�W>�fAE�=1�7���w&Tb�E �B�h���2q|��<X�3�����6|���7k�H�����^���1��x��McZ�������'��J��� 9e�=G�M��6
`}�q�"�
���DQ��TtO��B��I��w>��r��+&��BI���h=,s�4�m�.g���BW8�2��z�b#>Y���B<z�fBF�u��1a�}I"���5�,1_�f	*����;�'``8,4�A��T�2,nRw�����#l�4mw�1LM��U�6)�����
�[�v_ah
�>�� <3��c�;E�?��mi�j�x��a��K}��P��C'�e���F:gdV����.��~���9��2��"�����{F�XO
S�\)�����������|K)q��;�����r[�q�5b��I����~���>'��H�>$P�,�2�X|m���*��i�����I�������Ou��q�U�F��2`���F�4��p;��dv7�J��
�?-���*��al��X������y?�B���}�A���a"�AK��M#<�����^E���9�$����*cU�
{7�K����*1���:LNp�8}����y�z��
=M�
S�f����*�{�]��L57����D��gQ��]US\��/X3]���=X�C��U�]�x.�C��'���pk�k����bM������Y�������a%��SK����i���O��e�\�L�3W9O�<�c�#p2���Uy���T��s%�O�����t�
������A�N��N3Eu:2������K��R>�HO
��d��HOu<�Q�U:0�lj��0E��T!\�6U
���RU�	c>tb�>J7R 8X�jm�^4�@�`/�I�6��JW����L'��o,�fH��,�pM���U\�N��5U�,1�i����IM��3tbL�R��x������td��ksE��	�6j���D��������.�\!B�*;�k�O�<�kz��E�Nk�,J1�o�E�~p$�}�cM��~P���)��q�k����f�u]�S�U�j�?�i���\����T�?�D��=:M�o��Y��u=\T<���������r��1>30�AUlI2�3cyPN�|���z�r�N�2���1�(�^����cR�'�K�Cr&}�����O&�(0�D	�3.T�H��'.��J�4�����P3�P��$��A��h�[u��r'�e�C'*%�8Q���P���|}��d�!��N\�O)�t��(��'A��,G����p��=��}���efqr�Pi���'oF&�!#� /��
L�O:vH�t_JBfq*(�B���R�x?���D��8%�GX��q����<�A��T9U����(^�164'jq�����
r���@��;Y!2n�L:wm���p��r����S�M64�q��
�	<�������_��B�V�g��
�j����/j��hs�a���1�+�2�.����vX�O�^ ��D]����8���a���A�>���gV�Q7j�F{�!M�"������;W�VD0��������%t�P2F&�%�n�Phi�6�&��wO���c���c����W��H����������M!����}�~S�
A��}�B�V����H�E�F����E�*�>�M�V�����&7	_3_�J<VV{�<^obP�tT����\�s��F�a��p���=�i��c[/(�LG����J�Tu��J�`B����|Ww�=Q��Q�'��!'��/d��me`��D�������8��M��L����dse��,4�����o2��s!`���R�_�lj������4��-�^�����\�xv#LXO0=��L��P���t��a|`� !�B�
�����1���3�T�P8�����*xR����kj��4�|��5����q��N�p�_�{:
e2n�+K��+;��A�_4JQi(�?/�}b/��e�h�w�}15�o�ciA��3-�bX��
����v	��PM�����6p���{�4�v
��)j��V�BaX�(U}N���P�A��1fb����D���a6{���m�4���������IB�N?��I���	MI9l�l&��,x���M���]����!nJ����w�e�m������FRv��L���-������a��d����i;�Z����3D���P��s�*�v&���`�n��f`[�o���U����r_�0�~��k�\���m��LX��H��B�"�8�8	'�f��5���i�@�,��{,N�f����B�4�f���Z���q�!��AJ�aCD�D$j������e�����&�� �����F�x��N���I���G����:s}v�8\'�,�r�U*����W�l��2�wlwN3BF!	`/3�U�&�����.����"�P�M	%������p�Y!!0��L�=����������v����n�����i���	����J�a����U=��)~���i/6�yF�*�sb�e�@���Q+����
����_X���,G�.*���#:��O[����r*H�q�S2�sv��9{�_�w�W����BM�1����[��</��S(��93��q���������6/$��v5�;s|^\"D���`O+����J:�����N*])���t�=����n9�
�pgNnQ
2�t���^&�����&����Y�4���(J�V�f�>�\��"6�l��z��<"����I�r��A���r�S��0]�'_�����t]a�~��|~0_�
L�j������SJ��,<�z�q����Qr^e�y����Vl\�R�*��K��*�'���t��_�#Z�*Qk��r�����Km��6���������ONK�WY�8p�i}�Z��C��?��O���IJ^����W�������w#���s���.�����?���?7�O��^��� Pz��rh�d9<v������?l?���������g�����w�����fG�`L����I�t�y[��g6aQ8�5d�	���nb!c��i�P�}6�4Q	?��W��r
UB �:���)������'8�3���E}��H��L����?}��^��%&�8���b���}��~=�A�D3F���<�� ��A��L�q���	�J�wOlIx�!�}�`A��$��t$��Z
F��w%�	z���S��2jZ�z���`���
��1���<��q�-&���YXMv	Ut��	h~W"A����2*�H��9%����@���`�=��D��D��hc�^H�P���JG����|������*��s�UF�n"!%B���+�2CYy�cmy���$�'��[������%/���6��m���+3um��G�lz �1�M�*��v��zZ���]�o��lHH`����7��%���X��a���BL�I77�Cs��cLs*n:�iOT�f�H�<��r�������M
X~P�i�\;����'��iNM�U}�p<�?,D�b�����
��(1J���'��-�]����/HD|3\��	8+����R�vv���d�+n�QXK���Owa�8�j���\kyzC$fr����d��}����1��rVx����\�@�����,��
PT��ioP�9c7�
%ktX�8��2SR���2	�����K3y����W��U�;���iNMn�,�V�������.@��s��X��q��p�1��0��`� 3_,�n��[��D(<Y7B�Yi��t";-G���x[��8U'����RZ�!3��Iu/��i��2�3nY�/�����J���(�Qka���/�^��ty�x��2�H������z>��j��A'�]�)����o�@.�F�C����������c���o`�|Vb�<�h1���-v��t���'�k����k�-�d:6F�T��Ana&N"
I<a!�����[������BL=��_hu"{<��uh1y��`u���JV�B�p}Z�(�nT-�
	b({���FqFp?
�htSg�LF*T���J'����"Gj7�b��K�K}pTxx�����0����;�nPap��L��
��M<.dp�]����x2��A���e�o�X~�/�M������l/&�����JH��&��������sA����=�����:w��������e���D�,��Y��S~��j9�?��n���������l�A0�q����0f������Rk"Z�
�{a�v>������#X�t����;qje�������������t	Kla_P��9�
����~W�!CY7�%�X��������^�J�5���#�3�
�&�y�;E�I��4��0�~v_�����X�g��30�
�&0��E�w�@�h\���A��{�xCD#�������S��;>����F�)�I��1%�0M	M[0�������+LY:>0��$���-��D����'�q!��B	����/�z|Q!�U.wO8�%��������3�s�I��<��T���T�;���:�T���x�l�o����}�Ury���-�o7���B���q���1WV=�{xX��*�d��������*�I����#5�}����s����c�/�����1��Dd{a&Szd[r�02���'j�9���1�����J2�?��H(��2�C�3������=5\b��fj�4�?��1�?��
���Sof�XBw'�\��O0����?�5`"b��z�����(��d���������g���6Y��1;n�,!R�7�>p����0!�)�m�x��M�L3�:�TF��sd�8��8a���eNF"�����i#��m��=x���<�c�2�=\O<��`�#"����5C��b���`2��y:cs���&���=\�CN*!:U
�9~5����O�����;�S��a�7�)L�W�{�o&V���)�YN���:>1�Z(�D��n���YFo�����%K�1����L�;;
>�"R�$�s�I�c���4�W*a���
3q.ib����1�>���Dp��\q|W��\Q�q���c@����!�2��\����0�Che�in�y,h��a�13��W�J��c���g�������}=+3�����4�JIO�����C��G����6x>���-f��!�����o&��4e�x�"�������
�����4zV&c�������f/=��iqN���"����2�%����h2���E������=���F.Wz�=!���o��c�GO'LR
!������O�,19)�@����C�����8��i���h�&�nW"C��>��xnC�E%jzuj���i��J4�;��u�J0gi8��0���w|Sf�%�i	�x�Bu���@�TN����QL�b��Dn�N����������.DS�����4C%d����i�Q��R��<t��|�X�17Q	����1���[�%��d����2�H����6�������������M����H
q���E��'M����4X7�g`���8���aK��DL\�n1'��
���A4bs��g0t��bT�8���+��@m��~��Q��]�v�7?���J��2�!F���&�V��H�(M1)��&�Mj%�W����y����L�b�)��o}"�v��F�����M�h��u�\�b��9#�BI2�
����0����-=Y]�����]c+U��z=��&����`\��K���*�]���o���<;o9�Cu��2&1Kj�4w�u�P��9"��!�z���>o����e��s�8�B�MLA(.�����M<=���RQg�f�zXM�*������w"��(Pj��FY����2n��I+_��j<��n�L�39D����x9�'���O�]����7�}5%l$t�N���������������������tW�`�I��'J��V��JP�p�Wg$�{���E�o��3����wj_���g�
V;�*���b��VL�q/�B$R�9�R6�����@�������1]�B��M�4[$S%z���@O���<�)�K+���L�4*b�l�����T)�6smXW�^f������	R\C�9Qi�/a�d�u[�O����=�m���hwq���T	}���<��u�iu����I6|�xR",H�y�\��H�����m���@�������<��t���g[�.DS|t�U�T"_�'"y����/"��	���M���>�!�y�BYPB�60D��$���r����M��~������]L����'S���y�S�I��m���8����m>	�:�VK�'����0n�PB�p�j������F��3�1�7m)�d� �
���Wi%��&S�i��s�gWI�/����`G����hVB��rxq������kt�4��(��TI��VfDR|A�������peF��eU�6UG=qH��~�k�&�x��	2�B�Td����h2��1Z&v5�'l5e��
��aA
b�����H�!
�n��&��Em L,H�E7�DS�.������n�����n�U"A�n�9F��B�)UB������f�b���n��-rx�
���
��Xh����c��;���?�N�p-A�Ba�yQJ��v����p��J)A'CN0�+���T,q����b#�f���1�N3�����t���/~e�
q�W�T�=�=(��J_�'�+��#�rJ���!QZ�1�|R#��v��L���
`}�����lm�RJ���	j
�G�;�w�}������\�o.�k��S�lPb�A�i]{���������a��J�P���7/�5@P���V�\�,�������1��J)q<�EP��[�S�7�B�3��W��mI�����b����Fi0��kfl���]���?1S�D�WZ����I7M�S�}S������Q��?�)�XD�����B;��/����wn_���c��o���'��vM0itr�����d�n ��U�������r�5���b���z�qR���C'?>�gZ�0PyG�2i���0��VFK;��/��{?F�[����]r�x&���1_�8��q�	�`�b��t�dC�9�eN�p���c{&���������_��
��&��G`�S�@�-��p���K��)��%|QJ���3���0�cg����EE�v�:�����-Q_���Z��
�����.���������=�5���2`�m����`��7ZQ��m�T��<�+E��h���M��c���� ��h����<�����0������	��W����B���rF��'zt��k��w�['*�P�<�����H�@9_EK�%Vl������k�����_�d�%���?@�D����A�-��|�p���)3G*�~ ZQ�L
����i&��`R�C����(�j�$Z�����������S���I�2�f.��(����Q.�����{
k&d�@�����.L��F�%�������P�g�d���-�pMLD���h������9xp��<{��;@�Ds�o8��P�.�Q�?*����AX���h����3O�Q���S����Hf����	�o�R��.Lj�k��(�r�c�8]J[u�����������+�1$W'�
~H�r������@���x����B�R�;�>��!3>���3��;�������rp<$�����}0a-$�0
`��������Hazi!0�TL���40�gB��;�Uj��F��"=�������}nsV�h�5����k*N��wo�b$��yh|���*�<+=5CQ��po��
�C���l	�?���T���p'j6s`��7���;#>1\�[��X\�(�����i0h��{3%V�x�I�6���i���q�|#�b ���|���jk�b)��f���2;�O�%}
��qH�4g���������;}��I������y�1��0�)���������L�x�D�C�~�O��X3:i)�3,��L�����u�0u)����09����V���,6C���-�(���#M82���,'?�u[+�;�Y��+u�_�"x]�!�s�VF��6�X7{yIe���f�b��m�7��T��Pk�XZ,�{!P��?���P�������y�~���i��T��anX?��y�`�4��E}�&��{Ge����������������PC6
�2:���j{��o�6p�L�z��i�X�vC{�4i���3�e�Ry���C�\�X�&F���&��]�
���N^��p�5��E��$�i��L5���H��n(�`�?/F��� �����2�@�C�,���<V&��0k4����l��/���uR����RT&*���0�e�^���|�m����$��C���C0�{��a&B����*��qFjZ��4KV��lp2|�2n�����D�J���CF�5
D���� P���i����>���������TJd	�I�3x���G�	�^��v`z*�Ur0�����HmG�J�2:��;n���Z�V�M���CY�`����q���2�)�
.�>3&~B��Q���eb����g�	#~�Q�K����M�1�'�@���L� ,x1�0!�Y��B�����!Uk(`��I!��DVe"�qY;����BD���H��xx�#�w���b���g�i��BS��.�o�q2S���@���X^������>�W����'������V6����f>ox�-���;�����fM�I�+�"�06s�.���~����S�E�J�(���:�\���*����������������&)���������;e�0+C�B �6�vWec���D��3<NI�^=��~l��L*�J�OW"��x�zC^]���B%
X&��/�Y��	�:��O0��q?�'$B��R�#S���?Bu<���e����L���4/Z���q�
l����=�T�w!T%S�tN�*���AfbL
��+���O%~��;~�c 
T�"$�������R�3��P�ux`�b���yQ�[oCe��g�����5T@%��}e�6Vd�����IC�d���u��R,��+�2��������G���3�����k��b�����fj2��9 Og�l��B��x�7�������`,�w��~��OfR==�Y-�.��)x��q�a��J��G���5b�j���'�]����BxL�P��~/�i�
��0i�`�W�q�������B<�V,P��v�	��i2F<������cT��aeZ!T����I�_$�����D��m�����0�'��X���BH+�\�)V�������q�h2,�>+#�y��,�Z���T��q}0��BTu�-v�w�=�x���@iX9�Xo�>�W��3��0�r���x�����[{:V!�����#��b_&WP�����r&c�%w�(6Q
�7���m����rZ)�Q�V���FWe<�-	��=�n��ej9��O�Xw������K����Y��wz��F��J��\S�"Lq���W\@�W3�e%���bT��,0T���w������
���K��QU���+VV����1,:T�y����4�B�h">���/L�p�T��`�[�W����>Xx���'&��nl�|4��Y����+�`�s<f���%�OT�����:�#�;������e�p��~T��8�{�T:���,�T1{:��\�v[�Q��%���^�����6�&�M8`F�O��f�?3���lm���w�6��h�D�����U�&c����7�is���s
1��:m0�D��z��+C���vq/��U/�*
���G�a&-����zL[kU��}���[������n�L����
#N��������YD�(�X|�N��SZ�
���S���y$C)���(c�X���"����<��`0��'�&�=�61�AF6����A��}t��~[Zr��2��������?W8���h�����
��'�Yi����A��6���8w��B�v;	���(l&�n7������o���<�w�w�P�}�C,L��D`R0V�c�N};�@q�9�o�AJ��iFT%�������>��k���_�>L����?e�vh�P+p�,��0�?bv@u���p>+��"Z|��;���;)�����WT�~[�����O�j��T8�����<��'��(�2��dX���L�}��&PbZ�F@R�1b�0��o�����S����F�g1�6D$�1�J3(d8��>/&��q�1v�R� 3�sP�.���HJ��b���5=-x��'���h7s��*a��=&�
�t�>�"Pe�O��pm���������{V��t�D��a��������+>�3�@���|>����D�ve���L\��]G��s�fp�g�:{��D9� �.�{���H��b`8��B�W~*���c���B��K�o�2���|����}	
�����&z U���j���m�������
�������}�����>+���0������h���T0�x�
R��\�i���b%�=���L�'t3&�d��f���&��������,g|���[~�#���"O[����V�k��������������}��?����~����n������b�f��sw�l�z��3_���^���^������R��B��8����l����F���7[!J�95%���\s2s�z���"��
���Z��H,�`	
��/F��a����
��$�������:�%3+��%'�����6��2�������C�,i -���f"O]�m��w}p��.��|_��&d.�����L* �1����U��S��
���%|��]���	!+#Xl�{�(b����.�&����X�_Ib5�.aA4�s����U�X���L���T�R�������Nh��_}��Gd�
� ZIc
��Aq(���jW����v
���s��0�Y���3==��PI���H{��w�~�56�C[���y3��x��~��%a	B�f�&���S�x"��"��h��T�'�W������%�=.w	�7���V�PeQ{��t�M�t���*#yk�7��;7H������SO�u�wb�<i���y�U������&05���q��S�����g���
�2���x�,\�B ��4���*�����������(��m\�e���S�5��Bh��s&u7(Z��g�~��8\��=d��w�#I���������~��;��~�<��R�1�:��)�J����{V{#X���������*���fC�d�Wd�n�W�u_eT(���0�ng���{�
�3�+���#C�N�+�2H-���TV�,����\��T��:I*�T��Basw"}S��#��f2��)i����.��%��E�w5x���8�(!�����2��L���P��	l���HR��7���
/�7*���(��pa�rg����Q�	+!pK��y��pE&)Boo(�E��!���h	S~�8�I.�`i��_|���S&t�TC2�R-�I���H���'�����2����2�0���?PI"�������0����R�'�`����B^�,��3�i���F�.����\m�s�<5�wR��Pt�\����X���"Q~W�g�����-X�jp�`���FM<D�+���>���dZ�mO�������k���ya�s���R��^��:��t�4Qs�����'2��a��`M�+��t�>�0���0���@�"!<��ET�?�Da)������*�LH��L��+#��N=02���U���Pdy��3�F�9o�:�����[����d;N���<v���'��q��0n�7F���]��6&>������B5��z��F��|���%`�����&v�(I���
v�����#��+a%�BL�
L�a>C;�u4H|Ez����������+�-��m������/<�VM����N�����]J��3��gFs���0J��4�����X��w7rr����O����Jw����������94^����o�Qs;��zh��?�w�	I���x��	����o��7-#kf4�)|s���A@���S�����M+������1�CAT��~���A��S����X�/�'-���S	�����-as�"�jf�������������`(i�<����wX$z�~��ki�K����<<��nf�Q���^���� ��;�	�SLw-3*���n�"t��� ��`�|-bk�e+c�cx6a���� �S.�V���O�]�f���r��D���,:a������JH��m���_q[T����3��{�Y�B��@6���}��������C��Ln��H�;)�}��#�TL��(�C��g(�.L�:"�����_+�e��}j|���Dt��w���<������:��H4x�����2����8���������-L���g�O6�^ ]�J�����j=�SWF�+�h&��X)\Y�P�#y������.�f��M���3���	�! )#M�]��z�&O�Sx��G6�F1�k�X�mN��/2�_.����mq����`��T��x����4=����M��D���wt4|����-m�zB���d98C%������4%\U�'B���*��@�_��/����2�HS�#�~�
S�(V^iU�C�he$�*JK2��40�eT��Y��2�d��uw:u���������Q���������se�����|��3&���Q����u���b��}+��}��s���TN6A���8TA���R_�HX�vW-��i�/LSb���=��z0�����.�v"�Q�h�k��T�:����!8���1,�]e4�4��%���:N	i+#A&�{���:��f�������S,s��RG�
�S�"/�#�g�j����>a���Q�e�@��d�$|Z�}1h*U���fZX�����{�4�f�8�6���x�$���+�yB����+�@YM {��/����5���������m��+�o`j!
TMrwD���fx���hJ�sH��S>�n�+�A���M4�i������D3F�C��O���VF��q�UF���-���3�i�2e�h�A
���8��0H&���L���*�	��m�P[8R��;:\�L�����&�-#]0?���L�g��Xh�B�i��E�!r0�=H���2fq���"�S����R��A����|K������g8Fv��B�R�G�w��?$�\�q���������f��M�nSR�I�q��������+#������t���2�E�
����������y!�_����l,���>�c����UeI!���:!(g�b91^&���
CH^c�������e<��X�5G]y��������,�Lp��������3��4�&N���C�$:�x�0��J��;V��i�l�����|��O�����7'p���'���b�;jy��kqb�P��#��n;?Vf�~Ts���Y:���N�g����4'<���1�k)�2��
gZN;y4�(��������d�Ll�[�6�V)�z�d<g7���������t��k������*���|2%\����ef������%�s�x�P�I
R4�-��T�fL[�����FS3�:R��rI��6�����[�F�xS	M8
\C����K���5 3�=�d���d����S�.��9����{K�e;�����#u���Pn^T�s���6K
��G61�(��Ob��WF>����1������!��Ks���������0L��>x�:��/1(Q�����w�?/F�<,c]��k�����8�V��j��C���`$�{\�Z��X������W�:��	�n���R5�kZj�53���,~��2&:ke&��2�c��j�0��n���(���.��{�r�@���x������^��N_��nk�u[}�G��Y)w�WN��^@��m���Q�}
�twi��(%��X	���g�P�#|�B�9N�����{����1��Q<��O�H���4UdL?��>��Ag���T��(��9�u��-FeG(��>|o�pCL�����
�?c����	�C���^���3|U
��!�ff���n���V���\�F��H'�<�D�7Z����m��LiY�#����a��N\�J��c^yq�N4{{�@t�L>��UuB���T�{��K�������4��n�^2yr���=n���'�3J�2�V.&j1q��zVy�����R�PF�
�T�6`����������DL���0�Z����a�-�>0�2	wf��������^4gm��_����bw3�����X�����U_��g���+W	dm�����-�2$����n�\c��E�P��mX�,��:,����"��
x�j`l�wv�tD�Mb��s$���GB�tl��7U���w��\^^V���J^��
v���
���3��Fg��������9Sf�e��8�]H������G������9���Q�����>�>���F�<���d|l�����R��>L�{Od>/fG�L�Z���%�<�h�T�m�1,��a�O{sP*����^�t���[�dZr�w=B�d��%��:�aY�in�+S�i'��6<_r��#-��]6$E4��bv�m�yby��ML���O;X�jR��7�1��1�f�|��z���T/'-�Ro��4����3�(��'�dlF���S����gE�O��T"�
�I�U�*�������!�2,n8W�=t���j�8�s����Z�����3=���z��J)q�j����-���%��u�VZ8���4�[�V�8����(��<��Jl��e%Wo��	�\}�\�����(L�^T!d�%�si���;_bc�~�Kv�a�
�&��}���M����cs�����]�}��6l�)n���u�nk��.�������{���������)���YO�K��1#y�7�:����|����|47o{�v&r/��"�����vRS�L�6}g�m�#�6`>��*Y*�E�2���h8����1��(��d��s�'�wy�jpZ)�b���
p�c���&��@�cd[Ts���092fM���J�d�M
����T
������o��Sb_����y�
hec��cJ�������� �4gm8��9TO<m��t��7
bA�4M��~`�P����!]>0����z�J
�����^�e�&n�J�h��W����Ak�}���t��������l�X���%}
�~p��m:�W��y�B��jo��*a���o_e��o/�K<n�z_��-P)%�����+m�$&Z ���8?vp�-e;�������3��5�t�JO[-���p��6�j�e���c����A��#������(+�<��3�QS_�����?����[r<~���B��]����^��r_.{�|����������,��eYN�.+L�e�G��0]��`v�����)���^�S#��>���^>��{�5�ty+�����W���8�EEq���r���\�@q�����7�BU(��U�.������~�_Tw���*`�,�+��
�e�E�.+L�u�Q\V�.�b�K��Z�c)���rYa��K������R�C�t��
�����
�r�%�K�{-y_J��h����#��U�`R�Q.�Er�����^z�^�`���P\<rG�o��>��G�M�t�
��H�Q��X��W9X���hl���������z���]���uW�w�t=��0_w5~��]���uW�w�|�5�0_wU~���z�X����B����Z��oG�����Q�z����u�_���g��P�Y���^�����H\5�E���p.�V
�s��j/���Us�\��Z�"e�X8����HX5�E���p.�U
�s��j'��dU3�\��X	g��b$�U���pV�*&�Y��Xg��b �U��E���=3
�n���M�8�k����&c L��F���j��a��R�})�QJu,��v@X~��j2�WK��������& ,���})s/e�K�����EY�����]
�-��wBn���'�/��AN�� ���Y,�h���S���/��9s�T���@��m�fE����c���9~x���SN<�n�M����+#�
_?��m6�2q��/OH����>�A��q$��Z=�1#ucS-(�R5�
x�%|i�g.����2M��6�T�R&~�[�����9�}���_i\��U�nDS����LG�V�����1��}��i�B�*�	��d;��"ap��%*��XpQ�.h�����(�������;��&��\�,����H\���)X�F�q�_��d�:�����������K��ga1=�`��}ke�:�+N"Z���M��F�����R_8����������%J��k'�j�2�,���sL��LH,��d|Pbu��1~����������V�wtK�������1���3�v,�I��J�����K��d,�J�5��}�t�8�cM�Ih�g���=,Qf�T���hI<��Df|��L�iB����3s��zN����!�U�!��w�Z2��H�.x��/�5��PZ�s�09��fqb�-�Ss�+�U�j�Xt��k[wnm��N���?�UU�:��s2T�f"Ag�����_��5�?���GL���?/�?��j_�EE��6�X��]bMP%Z�"!:t`��W�}��"w��|Rq$F �O���s��V�D�a�>�����H�������	b����`ZP}r�����4���Ixa2V��3�sqA�L�X���P�7H
5�~��?B�>a]�p���J@����c|p8�D�2�!8v�	���3}`f" �z7!��������g����D�
�;fbY�Gs 1	f�vt���AVFK�����(�M�2}p�����9z(�Ni��v��?���'�c�he��m%�C?+��N�^��C����z�m�����?-a�x��]TP�0[Q0��(����W*0f�����L����U�?/�'t;>�x\�xb18����]���
���J�;��2���
�f����T�iA�<6
pn&��pel��p"Q+T����H�M�b����~��ox3�+^L�!�p��U�7��~^LT�XG�F�:*�@�������i6��z��B��������K�,���x�Fu����J)���H0�#�-�^L|�o��B`�J�������B]j�b$���n��q�t�u���f��������$��"#���( F&<�S�MW��V��2-D\�P����M&R6�8
6��4�
E"[4�����4H2
b���~���o�����=|��T	><X��7������&�����������m���>cC�g�m��a��f~��	{Yp������7-��������k�P���CT���8Bb����z]����p�Y��}K������Z��-��IGMAg�-��CP������HZ@�����P~sa�.�����H�&p�k���C�����g%���/w�&3��������]�u=}���]FS_��� +�#M/ps��,��c��dP*��O�}�������'��3��L�v /�oQ���O��4���� w!2��mk5=��m���b?Z����A�,�I��Fc�8��E<���t��Rp
UR	�
q0Nwc�������a��dO�'��I�#y�����r:�nvAs"���H�����a���|��d���DTJv�?��T`�pT��~��m�q%D��=C���[%|�AZ�:}"��C��S��mdN1lH|Ft�]gc���s�C6Gw=���g�0�
�8���������8�O����	��N�}X��bk��T�?����g!�u"^�A�sT)ZA��� 	�����0$c��'�,��VO��u��J/�A�h�|���J �(T7I�<�v���;vj��#YM�5�S	����@�[E������&$P5����'�q<�Bt����uyD�&������L�l�|����[�����j�����j�cb�k���Y�z
�����p���D�	���0Z��"�rr(�1��*�X�-���a��L���)�����\�����4��I9�j�Ik�P�q���rc�I�R���N�R6���0;����LP'������&�Ys�����K������?�A�o�F�x���,+�.6��G��PD�'����.m+����g�.g�������I8���N�~xn���c���I�{r��4!8]��V2p���3UW���V,g�)F.���$NM5�Ps�m-It7I%�`����6���������H��[T�u�Iw�	���<QVC<'�i�Z$��?8�W�d�y1�@�5a9�G��R�����p�����
�]��v������N�?;�?-D���N��G�!�[Bs��lj�3�,���i�l��T9��J��>N�,fz>M=���4-�B=P	G������iN]8f}$���B�S/2
�{�t���_�X���iZ9S�����M�������b��6	��]�@$T0'�y�[��X��*�c������#����9��j�����Q��S�a�	������)��%�i�V������=]��Z�t�����u_i%��h;W�/*��	}�������V����?���U����d&�mb��E}���*���/��n�c��Jy��,@+��&��j��i��p���;f(��Ji���E�������/.N��nZ���Y
f�����t|�""xu����q������S2#���)�kal,�����*�*��;����"o�cZ��/J=4���
�7�����gh��w���Y��7"\Jd�{!�\7t��en�
���\��"{ j����z2������jh��_�+_����B u��B'Qg-�r0N�]���D�'���*��a
M�_�W����u�'W>�nE�.�n�k!t�X{s�@��sO&5{Q����;g%�9�����@�%"�P)��=D�~e�^T+��$y�uX���h�zt��g�'5������G/
��|5��5�����:��S��U[����a�Zp�@�=8'OJ$>oJ�S��qs����~t3Hy�U&d4a[�B�B���U�b�(kz2G|����(!`�%�usBv?/�����<Jc��W
��mP����I��T����*Xu ���Ty��#���c���]������	���^���4g�~������'�J�`�A-�p�t{sI�H�q�::x���>�]5�9�����J��-��A��:���b
��m��|�h�����F~���+%�h����=��l���R	��>������n��S��6������J(�����{x�X�B����(���-V0����b�>l������
����:��6s?��J8����?���^���Y�Z�G�]v���B�0S	�av��L0�-�xQ�:��,:gB����G�V�������ox��c[��2�f
h]��t7���9���Gqt�
V9^��'���*w�,GP�K��e����5�3��_;{������i�v���-����R%���J�I����q��a��xls������ N����J	���0g�F�S��~�j���n<�bp�H�����yO�.����v��d����"28�7�������JIe�n(q1�.�3Q�#�)%�=g���K�$#xZ��g�	�GI�w����������C�Bo��Z�s�B���RB0l@%���\!Tu�s�_Y)!�U���S����0���qv{(��Ja;�5������R�0���c
������p���Y���
[�S�����F��<,�����J�w����c���|g-3�:��yS�$�8,�k����[)!\�i1�b��]���F���w_� �w+%��M��!��J�x�X��������t��d2��RM!������BtgH��	*�w��UR����	G��R3�7;f<�W	�������ED(bx+%���6U�u�TH����m?oJ��8�2oxo��p��{�R#�����H�8�`1����so�����:J1��S���o@�`� ��W_q��y���@�S�!xP����(������=��P-�'�x��B�V��<�'~<�'_��q<�������ay\w8F���E������-�����Ym���aW�j�)��y! :A�aI*���[�3c�V
���g�Rx�n[���o��u�0x�[�'�v�>G�{Q�e�����&]�*������2�&y�6��}���pez���Opf`����6,����	�o�b��v|��.�Y+/J��m��a��iA�[��L�4��E�1I^=:]-�
�l���(L"���j��7�	
'����,�}�BB��
�����!�Q|6%Z����K[�V�C�ICz(�>��,�p!0���pR).�i���TB�T��/J�`4~ ����`���#���*�H8�T�����NfR���#���/J���a�km���nq�-
�q��06��8l���8��Z(�q�n���ff���O�hoW!���J��h\��R��WF���z�m������.��;�&�J����l!8}eA�%�D�v��q�X�~�{%����du��U�W|���f����X���aa���#1R�'0�x�sX��(��H�O�!#��R�����&����B>%������Ibl�������c��RZ8_h���
Q!�
?p�@����J��`4�`�����t�L����g���j�gXW�:�c��/��o�W_��Je#"�*��I�	H�[�_[�2��yQR�'��w��{�s|�������<4J-�F|�'�yS:TX4��S��zz"�h�QrN��u����N������L��xfg���C;������������$�� X��y<i
Y�~O�z����8��o����`&���\���
"������T7R��S_'��RB���-���+V+���J	�E� l��=y���H.��c����2��	�����tc���)��3#�<
��j�[g�[^2qz�
Um�c��f[E��a���p��1b�+vT��e����-�]���li��IQDl3<|y�2I�5�h���S����%�����+�jK��H�������M}�s���m>H�7�)a����`�?��X[���A�}�J�PT��������P(<�R�f�o�])!�*�^��8`"�rF;�������n���D�*bc�y�,pr���H�}1!�a��p����V�)E���mz��YQ^�`~����������������~/�KP_	���[ Tr�o����������2%�!Uoy�
6!��o����p��
��/2a�P�Pf�<�����&
�����'�
����u������l�����D��~Q��4P{sr�/�V�ME�1#�7�a�EL�L����p!b�	����b��zS����������v(RL���D�,�>-ToS@�������X�C�EIM3��������X�<nv��M�2��rY
:j`�e�b��x[����Q�%��OH�@����	���l�zw��_�*���L+����Qz-E�P���?Xl����n��b
H��:qE��[t
�$�I0Z2.��0C��5��PZ����D��N�����G�a�������un��obSgoe�H����ba+�N�����[�v�6�R-I��-�5��W�^\}�_]��W��T!t��e��Lp��	��������b��������p�wv��<�%�w"&o������������aC�J	�`e�|~���Q�o.�:�5����J��	�����t�aK�|���-��1@A�����^���D������B����`��o��0�
�}�D(������S/]��e��T���������N�Z)!N�1��k�`��
|�
��6�������C����:��$���Z�����1�y1"�7p?(8�T0�/{��)FVt� ��r��^[w�����[���<
�A�yPa�tZDc����|�,�`3��T���!�&�U����iY�!�����x�qF#?����h���4�
B��B��s�Ct����C�\{���"�*tg��;���#"Q�8\M"Pp��^����(���
���BA�5�?�H�e9@_T�������;��r4��`r6L�	}aZ����0r��s�� ��M���C�
�1v-��\��v�b	��#��30�?���#I�����/��~?���Q�juK�I�O����(-����� �����{���b�Z��'W����i?���t"Vh�=����Gc��@��%%��EB�T��p���U]����t���1��%�������
�UF�U��5*r�@���M+%B>\���w���mo�hH	���R�wsi�����j����?�F��WzQ0Z:v=�X�Q��32�RZf���Oxh��	AS Z��J���e�����:u���>�ta`c���n� ?��O�PX"�����E��>�N�6qxnr�*��n��6i,��2wA��iHy=o;�y��a�dQ��#>o��LL�p[���]!lp�'Z����3��8�����W���{)�/������� '��{�m�A+�~���$H�c���n��q�q��{ ���-;�F{�2��&�`���J������-��.�[����*fg���_���J\���)X�r�o����J���mB�7 �io.�j������B�ch��l��x �a�&}F�-�����*r�A6�l�k�R�"�@kMZn�9��%3%�o�\���A���`��M����N�����RY�����6�A�C���	8B�v`�4*C���G���`��M���-$OeB�J���E��L<�;Z��6D���D�v����
�(�D�����������O{d�z��{��s_&{�V�X4�x�*���Z0��&��iA��yS��6^Gc ��jj�+7�G�m���R������Ni����fLWJG���i��6�A,�Ln�N�o�����o�dSH���B��|�����+�������@�\���UN��I���y7#43��5��}{O75U�8�2=����hf���N&�H�XWK�j.Sn�Z�I��'�g���h#_>�}T�:�k�B*��cN�	(���)�o<w���@��j�4��I�Q��*��M|z};�m����3�����:��s�v3�r�>3_����VpzK�T��'���a�t�D{�������
�	A;����RY���g�d:.�������D�[�J���LA��J\3,s�A\�c��Y��.t��h�;O���D�����\��TF"%�Eb�FL��B�C
a���7�	H�3l6�e���	�������nA���aQ����������a���c���)'�b��J�Sxnb6�,��`0$2���������&-0-�������;lKMp�4����R!*������1�G�:�J���ob.�ho�s�DC�Hu��������j�29/��W��P�]���y�,?��;eF����E[���5b��H����q(!�"���$P
��X�Ddc����X�D���fj%}��Y{sj����l^�YB�+K��#S�)��'����Nfw0��P��ZH�S3�����X�-S��������M%������<�����~<h)b�i���/BY(���E�A���D�u/���RZ�6l�N
�E4l>�����/.���'G����-��i2���{�z��V�3���,G��&�&=!�'���iF�h���s��~����L�,���R���+���D.�^~�����cc�"����&�Jk�}�������pf�`X1(sh����0
�]��b�U��>xL��W9���]�}��|�(�yqY^w�6E�-�\H���:v���J��S�q\���	Q��d��P������g��4��0�����8zS�i��|zP�>;������v���+1�KV*P���>Cmj������:1���I�����2��I�B`����V,3,LnuS��\�'��%��T`��#l��%���&���Y�.T�-U���?�J�D���f��4��tl-��iZ����k���W�II�i$���LP�>���4��j(��5�|�Y5�JiM�~�\�n���n�9�L�-���Q�'�Rl�U��I�VFZ��
�
8S����de:hM���
����u�N��jt�������
j���}1t����)]x8O$�wJP�����p!�pj��p�����	B��#)�c^�����43����p��3� ���J/�&��-��B����e?�l%/\����w@t2���L8Js��4���0�,��}1�����*_�=
��h���oD" �e��5N�������?&r�������$!��_
��@�R�X��7~-��B��!�{ham����"B�V&����f3�V��<�&�^,o�U����OJh� |0?t���Pg'R!�u�1��Z?�!dD���~|�C��y���y;�v�=�c����L�;��f�+c~N������{t���T�k8���5�xR�.1���G�	���L�3��&:�9�;N[�����2h�����A�
��sUu����95�O|]�|��������(��2\�"��[�����1���vGsQ�q�N�|&I����%3�0!��`���&c��G
F��0�9������D�����M������	�A9~0?�<}��DS`�t�i�xXB{�<�w@�X���Y5�>"n��L	s��������Y�g{���Ub��S�O3Q�e�YN�O(Axz�/1[<j��H��V@��$����?��9,M[%`B�8bMN2�y1�y�OUU����
7gr�@7�=����?+!���O������_�g�1��1���U"A/���%<[�����e�L���qj��%�h!6�#���b1��@���lv�����a�l��4{E|�c�us�
N����21aaKG����
yL�abK���UU�s����Y���_w��*�����K���|�������^��]s��v�/��;.N �0��5g!�g!Z���A!���X_���\G�.�gafA�h�L����,h6���V_e:��Ps��y+�,����F�u�K^�K'y��.�]	�A
�z<���|P2��&��-k��}�M��2� �~h��]	�&��Z���kN�^h�E��B�m���0��������v��������O���/>`7�����(�����9JMlmz�T���.�-;'#��{vB��#+��)M�t�%����"���VBM�,��'1��=�����;�kf9�����a�)�kA,a������+�
'�\7�7���Q1����(^��5�����o������D�(����bU;'*G��S��G] @���D�L�b&lq�K�"a[��������1�a�c9�����r5b8S���Yp.w�����`R�����B�lRC�(}Ni ��[��4���Z���ahQ7��H��N�����FLhx�8�i�`�B�n�i'��eL9F�F3T]����DF�2kA��i���P���vz������{��H_M;�c���+A�����(���$������B�6��cs���1���h�9C�.����p�B1��0=�%>����+&�q��u�y1��*#&*bya%l�B������R+e��Azzw�E����T���_��Z��~e8+���,S��iN�������G�h����GH
l��Q_��6T����Z��*�i""�6����!�r��C=�����\W��o������zv[\W�������U����H���x�����3�������>{-�9s��^�|�T����3�����5��rl��!��iU�*����)c��!?Eo��^�.u���R*�l0������Qs���/���?��S��t����_�����������>|�9��?�������������Mn�[������x�����������n���������|��_�����C\m�#G�M���l��N�(����~�!��+��O�FWJ8��B���,T8��7��,�<.�^4n��S������*#����R�
,��m�{t��}S��r;�g�u�(l�"�[8q�\�����7%�a?������'�2z`��bgR"O�#��F���7�F��F��_8Is�>�J�dL�i�sc[��0"��/F�k�k�+��B=��82������{�31_(=0�d��Q��A�f�,��!�F N�K��o�E��$ ����J$��Tr��(��2<� C�����c(�-��I+%�a�)��O�]���n���c��T�k�v�vp�"���b�P�Q�	�?�$���@�o2mb���`��J�����������_�Bh���R�����~RM��j�kTK�����D [��u����P�O���}���wev�6&v�1���j���������ef�-5����f�%����~x�v��v!U��Zp�mg�r�J�?de
��j73�
��\�>�Z�����M�]1���d&U��������
!;��p{��>�'>��|����KI~1�|Q�=6��F�������bsm0�V��w�ioN�s��H?zS�-(�ic�PBl�268	�*��d�]�i�%.K�v=H�1�X`�S������U�8$�����}^�V`�\"{���6��\)���d�Z�7-�z�������������[(�o��T[�����1�eF�	h=y_�f�B��+�R���s3�r�P&�+�*�in��o�vw���nn���|��7]�nU��p���2L������p�Pr�"��6u���s.\"hP��	H)��Q��l}S?����a��p�^�������J)���Z�=�F��j�Q���z��-ZnK)�1k[��Mgg�'�4j�'�
�$;������������#�B��=���:��J�OIX1�>{��h���]����%�N�$1M	��40������"A����t��]�aV'2ZP^D��eHDc�rS_~��S��0�;ZQ�&+_���������](���+1�2E�k�����sI���@�CX)=;�\���RB���"����^V����e�)t�B5�-�}�/a�_�~w����-w)8}��k�$F�v�[������L#X��-NP���/�Z�q��AUs�)��R|��q�N8f+�G<?���,B����D�;����t&�! ����]�'j���7W	�"�<L<��#���Jv>�����+%NX��1�J0E*��]�z���9�PM����d*�����.���b�9V��-�[����=�����>/N�n>���3�C�/3���r�-kl����7X�z(��5�\)rA	���}s���	�gv�RpT ��L���d�����nd{�[�fT&K�a��0��i�\'�D|��=�d!2����x��G�������m�������&�N�i��?m�2V3i���w������V���j��f{�X83��s��qD�B+;_+����0{O��	:[����T"�h�����|{qZ�=>?>�{if���A�1����+�����M�+�#N�j�R�_�nD�*]($���b�����t�V
���D�x�����q�_��k;�����R��,i @�:���+�`U�$��E�?/���A�?{{�2EQ���M�e�����Qq��nA�N,�5,8s�o�{�P�A|������������w1�Wu��A��2D{�|P��iDb�rX.�pd�mj��g��h1t1��G�-	��f�&b�s"E�r�)�KD_oz45;��h���Tw������M@��n��:�o</���8���{0����Y&@U��]�6sq��^KN&���)^H�^E���h�8�����4D�8`+kS����l�4���w��J3�����%U�x�q��	���������L6X�1U��%
�>+�d���m��Z�����5i&b����O�wU-�,F���P$>+����X3�X���?���{�H��%�G�R��L�$?�b��Q
��	��d��AW���cD��<��L������c�#ki!����9p���,����-�1��@i��$���!�_����H�����:.�_�EY��49��#"���J����dw3�k�H�=M���#H��g�b�>;��c+�f��v��=�{��N�_/H
f�<]o�9�EFl����hf�X�w:��;[�q�������g�����)#�������Uw���������i���7��n��6��fv!�����([�\�5dY��ag��
dv$�Y���h��S��V-`�������i&���;���l�k��3Yv�;0�������~��H���������E��$������v�MZ=5*]�lEl��������������#x�H�=��������SF�R�(�i����LP:Z��������L�q���q��1<�5��nj�V��*�0���3fXfr7��A;������������RR	�c�a��
;�sf������	�Y��_u����	i�J�}���N��W�x�H��f�0�3R��l&����
�G��~l�1x�/?�/�����o�7�c/����T �F����Jt��|���	h�aw<G���Yya8>l0�6v�De:��A����j�������L�K��Q�P���C]'
�&�D��������k%"�t���]�' %P�E]M��`�(mt�;�=��7�=(�Mc0��,�qK��H�������������G���[&�:�mT��i��-�<P	��n��$0x�����F���[�L��N�)o�T�b:�/J��i#i���)���R`��j�����%�9x$��a�k&��Sc_j�g��n|,U�C8�����}[����L��2��lu��Yz�E�c;8��6���$�XPwl�
+�P&)�0T����vqI����D�3O�gE	��'��	�1DTB�
Oy�c����8t��
I�x.����V��r�R�=�8w�YH�cG-�����n?1�T.��{*�w$��&�o#U@��I,�x��rW�JDf�9���w�/8M`%�;���Vw����(k(�	YUX�������y��'f%ti�������m��V��:��k`��E���He�i��$��'d��D%X�4��M�Ohb���4�L C�c1�����{ZR�	F�+)���?�Cw_H>B����$��o_re��������%F�l��""{�i5^�G�4@��D���{��W%��MK���o1?*]�WuW����������1�+@��z�������c?cy��O�,�p��;�]�������B�[�&T��X����E�#�qc��%��I��~�V��PTN���*��,Xs�B�N�<^|��2��c�Ty��gc|S��eE��ES�7����$�	����P�JD��MDb�2��k�^H����M���2���;W��QQ��S���+��9z+��dY?L.^SO��u���7���m���p�`d ,�6s�`&W��`���T	�k/��/�wp�f��3�P����`�'��""��zw��a��`m/H�����exCd#�
�X(�-��E��X�]L����d^L���#:�5�����&E�%�.�G���w�wLs��~��o�}
hN�}���e����f���`�"q>�bl.����SbAf���M����R`3�p�2�&��]��&p�-o� ���	i���Po�8�Q�E)/&�uU;�c�V�>�#�wAcS���[���}�Q�yf5$��M���l���G��<CG����h��2����\�8�x�XF@=��6�}E
�.����"H�� ���G��QL����n��*m�V��s�!)V���{]�������I�O� y���4n�-�������:j]K�N�(��&�-n��'��h��^��F<���e��7��X�#6����gE�m�p;R���"��y�T��,'j�C�{�n$Q����mS��O9<�h%YF38l [=Dn��q��,���vo�H�����1�|��(?�L�����$��y&�!�B���,���'��B�%�ji�,��	�_�3��'��>n&!3�q�zb�F�
��7v������$�L��������������Y��xp*�CG�t@�[�A�7��\F����)�/$�*��C�v������	�f(�;J�l6����"9#U��@2��L��&rn6����y1�A�y-��h�}�LP��Z�]��Ly�}�L��:`d�?H��-l��UF���_t��osg���C"��^f�%������e��]8��1�$��D�"k�$��������"�	�p��K�}r�?�rC�)��M���4Lx��5$V��������U.�niM&!����&��..��ag���<�]M�H;�1���QI�
�����������/4�g�����Lu}�2�^�*��V����]eT�Jv��'�d����� 
>+�"&&\7w���A�*�{��;�v.�6�!q��������<p�7)�������,�t�^b���6��3�T;�S��ME��7;m#�J���9J��x���O�|,��xLJ�������*~�<+�"�Fg{��M/��{,�&��59�v%YV]=����P����yk��S�����	����<�wf���/������=����d�l�>+�[
��3A�+�k�y[�Q��m>o1�������,���|n�Q�0��z��������Y���i7��c!"|������T-�b�������T�,��
���Y�T�?�N���_��(I.��U8�I�]^@o���n�����<�����@�P�i��:��i�?��4v�Im�$��>
�m"���!��V�,
����I�pc�5^�*~��T�^��(,��Hs��g)O�|����^�
x��r7Np��Uw*��&�\-��J���������y�}��N��@�L���H�5u��2NZ@6kX�=���'0��5�tg���L���d��jrR���i��Yr%�y�"
��VL�;�D�j������#��.bu$��zy����U&����0l;s������q������K4�������M�Y�l�U.�B)�Z��E�7�����
�5�f�s��fM&�L��z;��9�[*��'S!�����Z(
�6�
�����g�����Og�|�Y���M,.�i�4j�!Y�OrI��iL^y�$�7u��3i��J:�/�@�����~��;�z}%��������m����E�����$�4H�:L����Y��|��\8j��,n	��g@>%}u������n\��o�pD�{��m���C��� ���~�q_��*�������$Q�b�����!~f���K�����,kO]@�����7���`����v,9^���W��i#����_@c���1l����"Y�IK"�z�
����:��}�u�Es��u.r��?�����o��&�Y�MO������ ��C"�Q��f��bq��:3��M�7`
���,��V���[G����i�^�E������R?�se�uD�
��e���mU�N3R����B�}�_�N`==��<�������s/"�Y�h��jU*j&��fs�c<�������P��1�Y���D�-�1�zf�3�HU�����F�p��r�x�7=�	d�����V3(�0rx9���P��,�\�+2�V����V������z;DxO+����H���������xw�SD/���h�$���]Ap����x0W���P`�}u
2"�w�\�1q,��:���-J���i��������+�����h>�\����L���D7�"��%������hq�\���HbW/
y�El|�LDD��\'6�����C���|ry����_g�G�o�i��%�>`b�M�B�`��o�����ZIi���/F6w����MP���~j��"cQ�*�v����NY=��������'�P��B��o���nm�����*�0L�<��f�m���r���U}u����������XRj����]z��������e�\��C�\��V�td�-�~q�������2s:�,s"��?�DdG�0}�;f)�_�S����dk�7c�3�%�n���9��uc(b$J�{��#D��7��Cl�\O�����`I��-�����V���%��w�lG�����g�-����8;�s��W�9:�
��'�q��"_��]O��A"a�����c}F5���$��]����gg� J��o?�����8��+���Y���xG�'M	��0�����U�Q��
��]���YL���,��4y������g��7E�2����I���%
����
����5��(�������{����~b��xA�`=O��g!Y����O�������H����xZ�������!��<���$���U�����v�%��)���
<�{��#&�<H�c�'���jzV�����
>� My���(�[3)�XqEetV���2�?��j�_{�\iD�^�&v���s��04r���>�D��P6��5���T^@e�tq6����`&��%9�����:h�'��E����Y\����F�LV��^��Y���:��c����{�"�;��G���27�?+J��
[����`@��m���l���kf0�������+r����<�Y;c��}���;u��D��}0�88��o|����I:c���FY���Q��\�f��9�MQ����c�K���B�10j���P�%�eG�������"Xu7����pG�6�c��fPB���.�N��d���5_��'&7~f���:"�Y�����F3��al8`���z����7%�5������~��F������~rA	���:�\�����S�S7!�~'�T86��t��Y���`��t�nmb�@�)P��-�>lZh&��`������Y��]�}�3��"?�����"Wg\8���YV������tm[���/�L�5K�����O`]_t&Wy��#/`����>FC�{g�9��z;�X����#�2��r��������@�a"�����g�SP�1��17�~1����y����kT�/�
�"	�{��*�^}�s��;zq����QR����pb��,'i$��,�0��
REaD��T�z�B�X��������3���]�mq�1����I�Q=��\an{�$� |"��JP��_���\*�w7��!I*�������z�����q�����@J��h�:m���oa3�
7Lj�clf��4�����G�J�GH1�8d��0@��#��i=��/X��r�y��g�E�\���n��AJ���6���q*�g��F���3�;����@
b1
H�"_���E>f�x�,i���ACl��\����b
�m��z0��u_j\���'�;�����f��� �c��>w;L|!;�n�/����7��
��������������u�	���>�4R�r��l�{��sR��5��y�6T:�����GwHx����9C��w��{M�?��4������?~��������|]����k�����2�iE���B�$������C���c�~����tR�*�����\���{�|������H��6&��6���$��~�"�7>��gs�Yd�Z�T�Dv"L,Yz*�����E~��'PT�)�Z�[NHP+= �����f�b�:y��%��wT(3��E�x(��%��K��� �@��y�_0y�����HA�����H�����<��LJ������	�����M��.�K��\)v~%"K
����l�l��6��!���;Ry��vW�LD�[V�f��8�m��f"�&*��*��m����/4"j��K��=���b!j�����h����F����A�TT������0�N��Uc��""��\H`[#�Q��x��=��
�"Q-h�;T@���;Z�*��h�:��� @j�2���5�s��"C�����y���E�[Gn��0����vk��Fp&�n�p�(�|����0ae�����U� U}�>��"�lg�3�=�`q1�\4#�l�2����<G�i���Vp&�?�t�h���m`�5��9�����l I1�&p�<��M�(��
�s��Q�?auI�����DjD:��oQC{��}�C���#[����d�c7i�
�"!�u��@��N�b1��;&�7�xI�rZ�RZ�;�V�������^�����:
��������*����.�2����JR�n�p�a�~3A&R�O=�Fx,[���J��e
���1�Oj'&p&!�D�6[A�s�6�����������B4Q�~$3���
�@2=�d�
����� @X�vP-h���NFp�1mgb�F��`E�L;��Q!����W2rmG��Vp;7�f��Y53����D�����E������ig]x<�bX�PL��a�#���������an����/BM��FE��^u���3�f�L�B����m����'[8#�kX�v�!5K8�a	N�I�p!Z���v�%����F
u�����%C%�.�LFp��6�a
��`Y���4+��w,Y�����p�����U���Ih#�0N�Y�ol�`I��[jM;��Y���Hh��Y)���E���<"S�,���q�a[b'P�.n��T�01��d�-�I�n����"��U}���g�i0��l����f��6V������a�K�������J��>K�u�HU�U<K�)2�F�|Y�&4�2��CD�T��Q�����2��xL"<c�FP^H3���EX�`�y�]s7
�%�
�
@1���m��RI{����6���D��f�]}`�Wf��:�>�g���#W�����w�[����Kc������d=K��v�?ko	h�;�3v���?�O���!�|Dw
���Uf��	h=�a��Y�mQu1�{��8"J3.�6�N�t�L.�e�'���u��a<I?�D����|����~��.f�^P���i�_��^��g��6�������z�+i��1��M������+Kg��.6���('T�Q]?��Z��T��S�A�6��;����n����J��d�)\L~^Dd��!r��|nf;@!@6���������0�*�f�b��/�x�LBf�����^[*Kg.��0�5�x����;�4���T��\	�)����d�U'|�tZ����6���m���u%|����6B<�4@����L$�=�K����I��L#������g�O�$�����	�w�_$������4��q�C��������������:���o1/���a�	y���a���	�_�d�5���]��_���of�81�g��1
������ZUF�HQ�G���,&�g`	ruH_-�f�nL3 Efo�5�]��&��6���!�,:�X�%5�GT�J�Y��^#����[��	h�5��)����{B���;��#}Mdx��Z���<L�>N&'���������������|���Y��������<N���hw�[-=�Dp��~��T�����a�m�^�Htir���G�Ba���^���J�y~�6�|�����q��$��H��=/D/��r���4.G���$��-�,z/���g�m�����Wh�i!�08��'hb�R�L@s�',U�n��n����-��!�M�s)8��~�����tA��{����xA��Iv	�����E���<���HO���1=/�'�_Y�l,����@N����A�=�X-�L@��"�@������3�T�#f
��k�[>/���bY+��s���o����a5o����*cs`?������y�_:�X��~����:`���&n���Y�wIou�/�k�D�"����G�qb�YQ���|����2��Q�g`���/��T��c��i=x+6���m���YO�u��s��1Z�fS8�-�m�s�~��&�L
��K�`��_-T�1�0��I�+u�s�n��r ��`�j�S;�	X�5-~����s#����}�05��i�	�|?��N'x%�na�]=y�n�6����j�A��\q���"���2�'-�;;��\�r�������p�5u�����B����-f%[��� ������c���i���Y�b�����+�@�����'d��f �������������1a��Eo{Q]S����R��S0"!W�����/��������~�w�fw7�D�h��R�Lk1�,����r�,�����������F����f[P���R��FU���\���BXM���m���0��VQ�7�7v������_e���H	��/<p`�L���;P��mN�1�	`!>��f�0Tr��G��
Dlgv���df�z�.��G����!����c����-e���@�����e:n��e��yi!,�U������V���g�PX�����/�t�$���n[�h_/����<5|���k��f��3��/6C����M�E���1N�#���\[�I#��&�9>v���������L��"u���Q���N,�0I�4H0P�(����J�-��u��?b&���M"����%O���>N�F���w�p"����L��c�p*�g�����:�x&�8aq[��Nsn#�h�4>w�0�U�N���'
�gRTCm�����`'1^���8�����r].�������NQ��?�|]���5���QC�����|}[����s�~��u�uYy�����oc�1_��"����z���V������{�~������g���}�~�����>��|}��b\#_����#_��|��U)]����\�r�BJW�\���j�Ya!��^��.��.�I�!����l�U��U��e���*v\V1]����*��s��R�:�.E��=_��.S�AL����K���O�UL��1]V1]�K~/%os��R�oO<�8��$T�1[��������=��{m��d� &]m��@JW������e�7���Z��.��\M�ge�ek�>�E��a2�r_1?�-|1_?���z�-|1_w�CL�����u��=�|�-|1_w�C������u��=�|�����}�����I���\a��K��[��R�z���m�_���+WkX�l�����9���\tn�*���
��'���������*x��^�]��Wa���U��?yv�O^�]��Wa���U��?yv�^.�����?x����W��U���
^]�
��&��S_>�_M�7\
�����(�jv!�������&���_��\�2��Tu)U�����G�+���T�{)sv�����s?��Ne��2���m)�oc�<�Z��%O����J�sCFuw���%$@�E���7�T��D
~��l������*3�	F�
�Mw�	���������
<�p~�'��G6��>��o��/���Vr�!M!"�,�����g��\��.Df�L���|
�.���L�m�B
��6"H�@�{����~�����3�33���.h�p��+�pEY��Z��nJ����~����.��o���L>�A#y�4�J\�u
�T@c+P
�3�dUB�2 i��H�n�#�(<�{�e;UhBp�60�}��R7���B�'��tM�>ew�!(�
z�X�����/��|��t�;����I�+D����yD%�e�e�u�s! ?/r��.���F9�+��2+�4(��G yQ	����'�YH��L�����/��Cm�����M�f� �M�z��Rv�u��q������&p_�	�)9������(���lA����/$�d�F'"DWC�8��y�J�Z������p����������wI���)���{c
z;3Y�����Vw�e���[�m�H������J�T��+�z�z�	.l��V���q�7V��~g�ei
n���v���������TK�x�H���2Z��-v������X�:���)��-�B�Ww�vz�D�!2�5����F.�M&�7�P�����gw��Iq�]0*C��
�����@*����Qw���RO
?������I��&`�Q�����	��*�];��/�J���e�!�D�5�y��J�N�����@��>+�e=�U�Y�	/oFjm��@u�(����T����c$f$��e_�)UI��_�wz�'��/�dp�����3��P�
�@�n%���qQ2p�Nx[�S�L[�������Nr�� /�����%�51�I��s��5V��\]�mH==����J5J���2Iv��j
n>������Y&���y*��MX��J�k{BS�i� ���
-2R�q���9��A�i�=&���/���ke��.&�\�v��
p�s�C�o��FT��?�0�����B����;a\��N�Q
��y�9��yOy3m�H5�����e�y#mT{�s"v��B�#s�~<����E�x���%�\���I��/�!����������	�'Ou��������mL�};�x��4�P��g����\�R�[X8���^����3�]	��uO��L������	���D~�����:f�' �S��+FQ,�����Y�H��$i���wPR|e�z�	����gU�Oh=>���8�<)3�~k��On�w�M�)G�� �jC�~�j�v�a��7�tD*=$Q�a=����"��R.���#��$�X/���|z�mMD�>���NsQ(��*Qj[���.y�#���
"����\��G!*�������"��]<���|�D�Q��$�J�V����8��|j1�|�d��$'�������jr��Eeq8dm�]��o��!���^HI/�?9�������t���8Gq��n�e�Yf)��
P�����c��+��Kn&�\��2U�����7D]����x�&a"��O;��n�����G�N_�g���HT�,�N�|��,�_�/������L��cA���Q��@7�������yh"%�vc�G����F�	�"]lD���Z2�}�,xl8jWt�.?+1e�[��<����.�[�~x]
�>B
��
l��EVd�oKw/#s*���#���k%���=aO�V�Y��&S���Z�����
�)/��}���\qr������)�~�I�&�=�4d�@�u"Z��e�JB��[�\r���p�YG&4L�c����]"7�A�xHIq�o�G\x���\=f<DK�����DU�#E�/GDn�(K<����Y3=��������V�B���;i������4}������h6��{J�+�J��v�}g{f���~��������A��g��b�\r�|���y���h!T��vH'Nu�hsv���n���Ej����gn@���;���x� !w�����*f����Y7�>M���GJ2�j�E{9���*������4F]���rt�
,�
NcX
���=�P��qu��'"3c8,�����}!����������PI{R��L��l��AwL�#�>�����r�d��E'�	��eh ��SR�pI�Lnv�<Hq��n��C�dm������~��"[����g�t��q��3��q{��m�FZ��d��������,��S��Q�y�H�H�S��Mi�vZ���.��U��h�-v��	�Dq������$"�T��e�p��E�,�(�L����.��I�]���=8q�\���|�-�����2��W�e�B������=��F��|��^kz�%��<x=v%��\��36�����������'�$���"�-bP:)4f�6�	������@%�����]su�2f"2_�j�	�d�(X�|���<Q2���lNT�	A���#��[H�7m	x(�p;�g�h��[����o;���v7�X��t�I5�c%HUs���/���7��Z{-+�7:����|�����5U�^��B���\����n�NJ���K��v�_w_�H������o�/���6`�����n7����JD�Z#��eEuk�1`�+�5I���`/�t��B+�����Y
��?+R�h������J�����%3np&]w�0����T�}FMF���5��_4.�0#���-L�|8
o��~^,k������wh_������-������d"2R��mb=!L�J��������f�Y��|a�LS���\��mW%���m������'�,�����.����/@��&
_o0����zJQ��QEf��S���:Qf�WT����]� �3�����@-���OI����Q=���9��U_���j�W������K�g������/$�=)����#,o6���\;x��d���w��T�'s��Q�q%���.�H�f���SxEe"�����`�����e�sg�:��x�KpM^>�~�����y��P['s&�,�J��yD%X�D
��+3
:x����IIP�����S/T�j�+��M@���M�kP��v�	�|�5��W����-�
��=/����+��T�>�"��i��t|��o��U9b�����G8�Q�S���	����O6��A��H���e��$PqT��^�1��O&�*�3����Oy��|��_�����Fu�QR3Ai����sc6�f' a��$vwY��I��l����L7p��27[t��_H*�:��Q����y����>��H���M�L��}��=�{�3P1�/
P�w�V��	���7,��;z:��D�u�`��_���D�3
����:�P��e����f�;o@����7�u4sn@\��Bh>��0�h�7s7i�h���92I�D�_e��"x��d���	����o�ZL���+�l���O����Y�*������
�����hY�}k����j5����x��y�����3���C���N��;F��4�h�������d�7����4�#S3����"q���*+�?�st�q��1T�M7�x���T�Jj���%�����D��o��.KN�D���q<�t$�y�2��]�T��N���8�	�xI��#���c��l�W�|������-��U%�A����] "_n&��jz+�������++���+�xee��J<��++��4^�'��W"2o������p��}<�d�����Dt��Ov�>ZY����e�+�6��sJy��%�M��e1F���(F�z����[��w�2���i�7��a�D<^�����ASO��PsF�f���0��u����	$!|�mg��V��x�X#�7#��3w�RQ6�doEE�����#w����>������mP��PcWM�����H8��e�A�^1q�1���[Cx��ED(bx+����m�0����u�f������#x��v�X�L'&$�u��e���(����3-��)�[�#qg���H[���8���[��v���
���jAx+~����>+���v(�>(���"��+�d���Y|�A�����-�[:����������zBT���Q��ogD��X~�b��wO���u����-��Blz�e���+�J0%��O��K��XN7���=&t��\��{�aEF��[���x����].r��B���s4��/��������o��4wt����5����Y�b��	pcz�p�'�9�+��M�{)�������u��!�y+/$���?���@J�|�������#��ztO�����DdDa�7����YL���	���`N�^iA���gs%Z�+�8�o�V��4��N�������7���D��W2�
��_���h���\+R	��2D�_H�{0?2�k ���6���g+�AJ�|K����N&�\c��[���
��^�W)o��1K(]p&�L�}4��[<[H�8��Z��]�{`�F�,��}����N���6�������8n�b�+�f�-������d�&�L�]H�
�`��"�-��W!8T��.���pQ��k�v�Y@�h���Y��ZnsokP�|��na���#���0:�x��[��(���$��CF4wE��)�%�..�LD���@>������&�7(l����~��>H���N�
���P����U��H�JT����O�N���4&������maW���3A�pj��c����������T7"���pY�����r����f�~^�[�{3K�M���$R@�[��K%�]^HJ�h�ZV����7/�]�E#n�"���H�%�KwZ���n��z�l`�v�l���9������6@����f^��/�d���G��`B�;�D��3�����r�eq&*��q��AE���/���u>����/$ ��=�0�~Q��V$�/���7�Z����u>Bd]�{[����lO�.T�[&�S_���X�Y��%�V��nO���Mh�h�O o�MKH}'=�N+�����BP:]&A[����H�fK����������$��������R�u�~����/�jK��h�������|�����$C�N
u"E�M��3��~f�e|��/w���(�����x��j����P.����1M��}��	p��Z-�jLM�D���c�*�\�ebU���oL�@����bB�����s�H�#�3����a�vKT����?��1N�z����$��V�`��B�F���0��b		�\�]1F!�Eov��4%������M@���D�DX�������Y�t�����*��vhHW���=����:py�q~�N��l����P�p�C��@���Hiz�f1]��13�����"&�V�d+S^�" ����Tv�)��sY1�����b
���U1�B	�Q	`�������E�ZEy]��FR���&��<>+��e����og�����,k������W6V
������:bK�;������u@&$���3�v���o�*��1��0��3�"���j�jg�)����]%>�B������G8�5�g�E�����#A�d\}�
1j&qAZ����D����b��A�I���F>!�<6����c#��V�����U[�u�:3�o��h�l
hE%i��-�3�(���V�����_h�U��U�����z����T��?tw�J����[1n�d#�62~!��	� '�<��'��������|!
+��.��Z�w%�ry�����w��YQ��	M��n6"R����5�x�cr�x����F��%Y{�������}�vM�L�7�Z	� [J�t-y"����|�X�D/��n�
����?~�H&�������cEPZ�a��3�5��S��bE(4>�����W��������������3��fs���'����?PT���3����b�`����"�������8D2�tYDcE�~/>�B��|
<������;�?	!%[94��D���/D#?3���3��!�)K�f!���6 ���te�25��e���e�
�Y.�������P��I
�����t�T�0l����k���"M��������8U������[?��x�.tE��^(�
�f��|�G��x7��C��kAtHP�m�������gt������#*����iZZ��X1����
��a��/3��+�eX���$����s?�}���=4,�o6[S���|:Q����53f����KJ��x^Z�?��`%d$Mn>W%2=���\��!�-���~%�m��W1U��D�ZT�I���qF�� �So:'������wd�43_j�:��V;o�Pq�n:�)t��������9jZ��:������/��>1B+/�����a��[�~�J�u���:5�5�j��^�����ug�q{|T8����\7OLl/����w0l2�����& (l��bY�
D47M��\�	��a���,�7�C�7�V���!�����
KWT8f�K���c��Wb�1��X���nm����
"t6<�6��3*?��m�y)Lu��t���x!�MW1Z�s-�P@�%������6�2��.[g������\�i��n�MK
u�|�w��wc��K���A���d�e-W�
6��YQ8���9��f��v/n���w�Ge&'��>�b� ����D[f�	/t�h�m|�m\��B1D����`@��*.!�)���
�>m�#���!d���2L(�����b
c������LB��`;d�4f��^�8��<od#��������?����h��A���Bb�!f���~�p�7� 7���Nf��6�4$��G�V���A�����G��0b`���#�	M�FW���a�yJJ �8o*�s.?/���ku��'7�G'�l���R\�)���D��e[�f3�+��������j���0�Q���6���ohdSH�����a��d���+�����k?f����273��N�~����L �����t3S3)Fc���H��l����f���������B5�tI��F�,�$��u�/�����AC�?�����vC�Y�$����g(�{���1<�4u����5�qP���v����������Y'�*{���vwC���3iV�I@��Lr-
3���Jg/�316(�9
���n��p���p�n�Huy��1&�~���	h=|f����$6���q�:�:�3�4��9���JT
N6��������������Y�=�3!3�H�5�����a:���B�'�E>�s��(���7K^����h�PM,���T]�w���K?�+��v��6�4���s���N�����
����
:�'���L�c�e������eK�!�r��;|KM��$��\&a=.��P�L�W�t]�)\�w�n���'��
�MwI���P~^c�>
���*�Ei,
�����j�(�<��_W;e������/���5b��h�����& ��Q�^���p��p�?\�	%�c��r�<I�����?�����c������)��=�9R40��A�x��l�zO�^���|�f�<��e*���x�<o��	��:��'�-���x�R���k��_�eA o#�=���`x����"#9h��a'���c"xR
�O8������289]|���|����N����7���X�VI�J4,�t�����!d@;qq�I1��u��"�������3�Y�	
&r0��%�3����Oy�f[;�L���:�O�-Hk�m�
�k�p�Z���x(3|��rC7
��d&���Pm�)���_��yE
S�h�t0����y����5�I�-�<A��a
;����=�y r��+�����?��^Dd��\>�-M���4>fH�{/}
��B�?��|M�}���)]���.;�~%��dE	���S�fS���iQ[��w���t��#�rrK:�����i�2����n�t����vu�*+
�����W�%]�,�wKz���dIW$u���l�����0���k\fI"2N@uKzf�����in����`O=��b������,�������+�%]�������0��\}�&�������|�`��f����5�����F�=��M�d��tE�Y-�{�7e���dH][wk4Y����t>FP�_��b5:�x|^���O��8�'O6vJ��9��w�(��|�$���i��d�H"�c$�<05����O��u���Pq������l�����(�g6TJb�?��	$
`��V����,K��>M8(>�a�M�Y�/@Nu>/��Qq}Z�+�B�bt4p8J��B�>��7
�H�!���?IC'��n�$y��_
��Bb0�"c5�����
�}t������Y�	��F��ED��JBl>8��m��j�	�������B3��O�/j��A� 6��_���v�"M��n=��������qH��H���>4���M�������9�,���D����&:�dY��9�w�f�=��YyD�
3��"D�Hi���$���I�W��
4��O�q����
������)����0�����������&�o6���p�>t��o&\�""������H�2�m����t�YH�����53aB1���x��~&Y����S��a�r��!������I�Y}�,V���� �Qile��R6�n"e�%�'�c�
�1+N�G����%����d�[�=?d����c�����D��S�O7Q�e�[NQ�=`1�����P�EjR$H���$����7�~v�7�������Ffr����Y�]�#�U�v���n�{���.?+����O���A_*V���Eu5� '��- �^��E��*�
m����|�����:��K2�&��#�j�>�����6���
a��c��}��;,T�H��%>���y��&�X��bI�L
KG�����L�0���s�y���Uo&�[s���TV�	h�Vv]��;�pB|V-��Xq��T.�d��w��V��Z�G�'B|P���~�=�^����	�#��!���q��V>��mv!������;},�����O�f@������')s��p���(����F��.�����&��h�����$>M�f�l��Y��7���Ym��M���EdN�i�2���">
=mQ.G��m���0���`�e������r�B�����h�+0�a��)
:S�f���$_}�����uHiU�-;'9����
��M�vMcP�8.��f-B-����Y
]g5lL��|}�f1�rY3�3=�"�x�|�"N�b(bC��T�3����\�)W�1}� ���
Y�&�����.�z�.����\��:k&�91����B@V���U^���$�������Y�[�������8��7�6��|t������3���gz�)��������`c�Mj�,F�SH���l��cSZK;z�
)f��6;�o{�X�6bB������
�.��m>m�E���'�L��E�	'2��!��yp�$�1�<�j�h��C�fR�W���F~k������
(��E�;�<
v%����sl��|���u�A~l��Z���3��E	���~�p&�Y���"LOh��#���t��t��)e�</BM��D��X^8��P�m�X!52H��<��c����9�V\��a�<0�8���F!��P��,S���e�f%������nc�81p<'��c�M�G����]��J���P�t�[��ng:rM�`�u�������o���C���1]W1�9�/CJW����J�[������:�����v����Vv^���u���{�q����Qv^e�yu)�_��9_��v�$��q9�J�O��2v�$?So�QJ�_��(������M��s6X��=��1����hG��7��Y!���e}�?���Sr�?���b���|�9�n*?D1�m���������.z����^�� ������d��'��+�[���������������������xC\-�:y��@�O�	%t��	��M��D�m��������\���)�r���U �6�j�s:�4�!��������)�� ?3��J~�2�u�?%��]����U�K�V�;�G��/r����R�hH��"������t��q��2wlXJ�� >��o��$>�.�/~D�;s���a�?f��!��N�n=��DD?/"�F6!��n�,J���B��<��������A�=���Q��A����S57�����@�I�qq����4�	@^(	>����
�B�g"���	�zfw��*��c�M�Q1	tKXH_������w�f���z]<���C����q�eV�U]�4�f�Y%I��`�|�Y;��jj���)������%�/$���4�]Y�$k~�kp�)��Y�X�@C%�]�o�@��L�������
P�W��G��S��x%�w�u��@���K7a��?�����V�X�o�gke�%���T?�����on�!*�j�#�C%�0<Y�$k�\�M�}��$ �wC}.Z����hq�~�2����$UA���D0�y�	|��W������;����kI�gF����u�cG�a�w�9��jk���Ij,��wx��)��������
��\V1�R�Q���EYc��G3J�`�5n�����2����@9p��t1�S�H��36���826l�{^L���D.���tb���%��G��%����9+]W����/k8;n��������B*�
;���v���DkyH36+�oa������c3�rA(���JF{�^��\F�1_��Q���%�c,����f������{�{g���IE��z����M�i�+K������<�l%"�o4�n�_S���z�<.��E������T���Z�=�n���J",��������o)e?��-��Mv�|�A����n	dwlt-��Lvf+wU��&pAEI6Q�aV�}�IH��~�>CW�>�gjJ�$�C��-�(�ALM]7- ���G������L�D���E���A|�2�t.���fg!R�����i�����9���&k/_[[����+����BFs�H�Hc.)�M$F+��1��>�R��������I`����mc��T�������W�f��e;>��pT���]JBNo8��R��5l�u�pnA���i!"�	����cc��hI����<�
����<h��J$�8['f+�C��,J�|i��g���jg"�#Yw]�����oo6�9{����#* ���Oqkw ���*��su���m���������%�.�W;�P���6&�z�Ee�9��-�[H���}������2+Sp��K"~m�1�y'��[^����w =z�MB���*s�5��)�@\��m���i���J�	���3����xPB�����&`!Y[L��
�#��}�m�7��y��`^����\Z��=l���~AU�f����7OT����70���g@�
��>?eEYVn��!��p[�������4�V�k��c,v���\QmWT):�f�nE���LM��8���$mtA	X+�#c=,_^��+�m�g5�J�QF�$s�����_Q��W�Umww��LH��s���V�B^�>�.v�f��������>O4n�p��oj-������Qq&������_�&f����0�
�����,D�����M~���?��r�H�=M>�4"�����HG&�����}����h1t1��G�S�:��f�&b�s"E�r�)Ck����h&"�{�e;i��Z�'�V4�Kh��~;1���dj�y0���������v���f.���k	�����9�	����S�'�x�6��_�n��7ui&(�5M1�� Ui!"��p[��J7�=N�� 1=B���������k7����d�!��gE������\k�7p��eS�;:
j�L�N�	D!����Z$�2�^R$>+����X3�Z��%Q������P�{�/���tiA�]	\��=Ja�� �����6��K�8_������oE��y�7��cno����W�����������/����������������Wr�"��LN���Wd�r�[������*�&jN����^{A�i��W� ��������$G�]�6���n?���������N������{���rv�	Y=#�a�?��f��$�����V�_>�1]�I���36��^>edWZ���]i��N�_�7����~qfvEZ�-���f���.�r�w�-d���,�������2;�����Ut�
��)�T��0�NZX��b�41=w�������g��w.����)��oUs���8U�8�I��4kog����zZT�6���7q?+)
v[�����:x���A4���|�(�rGk.�i����LP:Z���l����Lj�s<�w�9"����n�V��*�0���3fXfr7��A;�����5� �����RRU�����-f�N���$5j��ouV��W�E���z�C���R1��i ��c�F[�I��l�e���)���>+��>b�[w�U�����'V�Uo��
��M2�l`�pZ�Dg���Y���fp�st����������?I��PC�xA����R����������Yz=�u�j�L����}KX�n��V"�M��Z�-�	H	�oWSezX+J@]��{��j���DdJI������[���@<����%���Q����t
������h�bN��my(��J��n\�����B�F�ijd�y!5��19�Sx��U%�@�)�s��$*�6�f����x!��fc^��������`�7�0X�5����/5�3��	i7>�*�!�nS^������fc&�W�����Yz�E_gi\d�h�����$sA��6�8Z��8�<{�yX�z���*c�4����w��m������o�"4����`�S��_������_���h��������h�\���.w=��YH�cG-����'��P*�,���E���+��:�^I�^'���8��j+����	�v��!+Q�������l��ny}V�5'[�*���RtQ�n�n�AZ	]Z��7���zxaA�����������X�}��.+R�~������C�`q�����b<�����f�	d�wo{� `�'����d���J�>��}Q�!�c8�Bu�	��X��\1� u��&�c�%F�l��"U3}������?j�X|���9bB�^��U�~����ux���ta���PH�xo��S�4H��b����^���t{&�Vcy��O���p��;�]���������
����+y���=n���0�"�'�[��%��rp*.�T��f����v��������|������1����,+�@%,����-/��f_H�����zpPW"r�m"�����X��B���TmXx^L�)v������������_�d��x!�M�����5��[Xw.���3+��+b���t��Ha��frAZfa��[M� ���M�r!{g������C�����h�����o|��az��f��� U"�Q�q�j������f����pQeq^�.&�GmU�kRw���R~;��fax�"��N��#LYI�c�w����}���k@sB�cW$ /��>'7+����}{!cs�v>D%�2�e�mb��������	59���R/4��oy[q�_OHKl��x�b����������~N+M��������lV�-�@W���(�|E�PC���������[�3t����{	�,���+<[<7�{��g0����q��+R`u�}��A&���]=��G1��7�8��U:b����nCR�p{!Gs����_��D��+�g�k�A�v��R���k�o�������D��o��1����^qB��V^�UJh��nX��y�	�u�c���N|V��>���]����Wi@-�r�6�2���Di�����M%S?�`����d����l��
��9B��5�;�����%�k��1�\cb�t&j�TiQ�W�<��l!RZ_�co���a���q��w����/����;vN2"���2b"s�`v"��>FwB�0�J�\�yEk!%���/���%:�JJ�|�v@���`����G/�Q.zzv8�	��
�!y;Ne�	���T3���N6n�a\�}�iQE�/v�����$�M�8l$�cC��b(^�,�Z�a�"����l����hE�����hu#t��V|����l��UF���_t��rm'3���O��G1}�(�1�k;�n����� �T��MD������a�c���L�Y�|"��I�(�T	
a��+c*Bt"<^Y�f!i'N��6���BN��Hk�P��YII@���LQ������
+�Ee��l��L��b�k��%6�O
�kiv]���7!|����kJt��LX�F%�
�YL�BRCX�tu������_��2��A{�T %�����Y�w��em�����;w^Lr��S��D��IF����tdB�F���;�H�9���������T�nSf����k�vj��j��>�7�K�|���
���a�+��`c�AV�B�_��uJ��E�n\��M@[�J&Y�z/*���*�r����
��.hP��Dt����"��p�7�A�� ��1T�M7]g���������p�����������N��"I����B���]Q�������d�#��Qt;	h/��������p!X�����w<��}^rFA�l�%�v��C�Y�)�P]��}��,���^;�:0��t]��jF-V��GT���c)t;uD��It�r4Zr"�5,h7{V�z��@W�:����<o�j�"����6�h�Y��_Ani�)��W�a��u��������c�$��'��������R���L��8�=�NE=�	�:1a2{�D>+Ao�M���B����J�b��������:�e�]�3b�'�5w#<>�y�	�����G��
6>�4���S������c�Y���A��|0+��M�0X�8�rr��OJ�x���KC��*��x�sp���&��0�-�{��N�6?��C�������U�o`��A15{��G����������7{s\x��
vY��x�o�=�[�
�
9��_@�����iE��h�e1P��3�PU��_�@���\JU�#� �r���f������=kT�l��Z���l����va��c����J �J7����<��'��eL�]���y1����O7[4��I�v��^_9�z��pQMY��z���b6�#Fp� ��BY��)�c���v7�41�i�����<�l\TCT�%.�%����I������*�����R}b�~Id�����&p�g��^�uQ�������a��-��D��m��0��VE���58Iq�j��B�&y'����(D@������h0!i��R&���q�T%<�.4���E���:��}n:`��5xn�*Gy�e!x�����{���=�
���yG-����*�tX/�{��I�m�l?�������������]�+� �Z�5f��f�:H�fs��{$"���1�q��&G8ih*{2%M]4v1G��k\�LL�0`3@LWu�M����:��8�s�����Cl�jG�G�h0 ��a��	����d�N��p���dCV!u�ow�&4����C6�����i ���E��;�0<��w�A���6�W2	%�t�$e��62�c~�'��/��*�g�^�����bn<��E�>`S\f��*����c��z������p��3�>�U�!9�����>/$�Y�o���=�=��L"���i:�i/�,���Z����J��������- ���B��^�^���~�W����&�����P�3��&���|F����7��>/��h38�����?������G&��x�%���J���`+��J>���o�u��X�<V����CD�@��S?O:����~IF%��6��o�$��1�u��pea6[���lm�=Tm�*>��,�����!=9B�w���R;��Po���&���{ �L8�=Tc��L�J0!��������}!�So������
j%��`I�?����d��������Q����u�c?L3|�lB
�H�p���e�>Lo�����rM}�����F���)�4#7�T	z��$c�����H�������%���Y,l���}��"O]����J"�jr�/uv��m8�����'/���gj���ED���"c2���8N�I&"C��[[����j���`�n���2Q�6�Ek|$;��H`�x"+v�T�H�#�<5@��h���7�I'm,��v��Y����*Z��gd�n��j�����+�����j����L@D�x�w��#�v�)�0�����B�W��@Q������������>o��z<EX��yz�cA@�����Rw��@'7��h?N��%�����(O'���;�t�/S',m�N8����C>V�;��i��-�&
�1+Ir���xe*���L4�F	\���j���i&�./V�W7���H�C5@R����h"��/���F�u�\��B�(�^��������7K�������bADF������'�\vm�����S�����~���;in�O~k'��p?�5F��������-I����b�R��gA����;�
��L�v���9)��������Wf����|��V���yG�wx�{���LD������Ze/D l����G��D"��DC��m��� y�v��������J����}K��!`S��������|C�v�����>|�0��MF�K��,����,�D����V����!e"�U>xf�$��,�*�T���2�QQ�&$V�Z��vo����'$��Ep�`��,s����C}�L��c&�]#��a�J2�����o��w���(�K8�sVF��6���!�J��f5V k�_r�4�����[a�UU�+�8+Mv}�����!;�~���<h��?�{'��q��v�?���vM*��N?���vv2u��fF�a���gL��f���Se��S5�����@�h��L�A�Z��=�4�:l�����QU5
��zvY����7��8�8�(^E��v�w�|p�����QI���@��`���[�3��ia\�2Gbt����	�����5����bh��I��^l���j���
�-��1.����/���+e��/��^|�����,]�YF{�����@V�.�d0�&��P����%R�,�F}C�m�w����5�H��T3-��h=k	�?!(�}+*�,8���y#�|����D�/.�(�����6���������H�P�R�(��.\��r���B��9`���A(/,k7o���#<�Zp��vE�����BW��E��I��K�7"�a/b�1�./��=};X��:K�?�F[������=F�1�U}=��M��$~ ��,�#x�^��iqm$e���'B�<��K%^����G�R�I�5��sg��BRL���+Moh+W��7s��b)���^��YI�W	U�YL�z��Z�'��-D��5_u]��3:X�
2[��D�R����gp+�T�.!���_R�Yd�$���Aym�xR��$Uq;N��\g�WFd^�U���#Y>�&;��%r_�!���|����?������^��_�>�������?|����/�r>���F�F���~������>��)�uk��"��ZV�k�����A�����;�9��C�%�C�������gS�^�"`�n]��wD2�i�;�
3Y�T�>����(��}�I0���"b��$��!o}
J�*���k-Q��8y������qc	�����J�|jB��E47k�ei���l�d�%�a����r�������T�����t��1�56Y�{�<A���0�6e�+����c;�]�z�����T�b=UW�@�,��Y�GZeG�����c�,R���3#���W��v�����b�z5>���L6�r���K<�����/������j����"����&�@��Os�lo\>kK�`Y���v,��=D�	v���n�	��T�f���i��z"����3�pO��%�[�VF��2��V������������(�A	�����[N7|w�)U��dI�7�;3{3[c��-d����0�1�>���d2��-AT�}QF�@4.Z�K��[��3�rm{�}���-�����!lm_"���v����:
���\<�I�:���D3$��ClPm�����E�f�B��Z�
�������Z���@������f�%���
�����j�2pQ�^���^�LYm���[NU��8�[�gr�
c���M�K�X��h�2��q�`�p�l�>�f��L���Y���e�D�5���.�m_&���}IMa�U�I
q�D�q�v��:�`A��7�u^���F3����XGto��G3���a�����fo���	n,&tK����f"I){�%,AvK���j	q�k0�7�H�-xy�L�GS����^����)QK���/�>��x�RE��C���K��0�d���!�|�.D��������B������p��Y5U�0P�#��7��Dc���i��8�������`e=��B�f	�����M��D�s��������H��C(5�`�]���`3�OpT7�7�!S��Y�������s I#������b��`3p�cR����n�j�4�85]ucjt&.����Fq2HIRB;k���!�)�:i��������A�M+�Z���F���������w�_y��Z����M�g����<��������"��%�~�h��<��"�a�w���J$]���S ����O2�����]��R>�L%y�Z~�c������l����*>+q�����3��Y%Up`u`#:�	��8\�b��r���j���k���	��������>Q����L�~���]��(�F�HI@��4l����V�����H�Y����G�{(�d� �k��^w?3sS��\�w^?v������=fw9m
N��x��	.����G��
�����KM��<��bI��n��[��jdg������|����������i��NNL��lWe��H$��)�f�q8�4��)��kl��q��7&[9�=jb��L����H�"��Skz��
|+@�L�_"}�p�*����\\���'�Gz:�J��#j������I[N�h'r���l1g���]` 2�[1(z����0�dR��F�M�7�{X��p����J��Vz�Lm�x���|�`:Q�����
��@�z�'�t,oS�Hf~@���h��P����$f+���`s�l&�LY�
H�t[vc�G�)�K�HM��=�����R���jo�#I���InxY���5���poM��X��'�V��i��aA"dk��WW��H�kR"����
���G=��;�eT
�FLY��p����B�G&�Y�Qo�s���$uB��p!�Z���-B~�o"�'3�
N l�&�b��o�"�R
iUe2�62�dCZ�S,�s��FO�D��-o\�h��v'�V2�����g��v�=��j���i:����I:������J$�E�1r�1wLR�%�a�G�&��c m����9���y�y$Q�'h�$�����<�E�N�d�v�OP������
$�@�H�����Lp�:���r����^�ec��-p�� �T"}z"B#���7b.�c�]K�@JO��q����R:�LMp�x��Q&?/��(�s��L7Q�V�K(���/�t����%1�]�3c:���-[������4���w�����)����~%7�s5�R���}�Kt*V�S���C�2L������X��J|���$^|��������`J��r�M8&���7�n;9`&)�$B���t�pZ�q0���.��;����Y���V�<��e��M��99p8����-���5��m$Y2N\U�I�	 ��������a�-������{��XU�[�� 9r�s�1�s���u�+A�6���jN�-U�/i�z�����Q��������
(�f���� �gE_� e�����5�7����DXi�e0�����m,��B�1�?U�����s���+���_p����12����T���b�%�"2��}�f�]�?�)�����/R�H�^�&����7A�}��]�f�	��^� Ut��1���$�����E���������_ZDa���%G/`q��������e��*.j��SW")}��+Q	���K1Ak�Y�4�����~z����L�oj�"q�.K�t�� ���f>:.�=/2��{��q�����d"#f�v&zR}�9#�����a��~����2q�p����x�Bq��4����&R���V�5�LD��#�����L�3�����-�V������XO��d�;����u-U@�QGM�]C�=/rkW�A�2- ��'q���EY�$�B3gD���W�q:DR����T~H�j{E���� Je�.�3�rd��P�T��a~���4�t��a��2�G ��_"(�i���D}b&Q�"�ha�dD�lihn~�j�����Cgv��(y����Rw���Y2�����|q1�~��:f	!.`�g��My���53�e����e�����\��+�L��k,�u��Z=6=X1��1�;e�K�����Vk)�����]�B?�SDEV3�8\�Y�E��um'2�y ���=E�-�����Lk�]��+�ma�.�U�x����V��{��ss?�Y�����6���v��\�-��z�LX/9^0G�����@��|H������k������\p�|�����/8�r��\���\���[�I�~������������;U"���+��Z�|���|���(>[Tb���}�[
1���&1������"��������<��1�y�,b�s.�XJ>r��R���=��)�j���\��O9^0W�D��3_ r� ��pA]��.o�q��}���F]��@������5��fK����]����%1�yO�!(`~�x�(��*b�s���h7������`���g]I6���}s9=���b[�8�+���#�
�r��.!�~��	�WX��{�p��
�WX����p����w��:���+��5��w
�/WlK�z� x�������?���Kmz���_���T��A�.��~,MTU��f.����~���On���O^���ON
��GE��'E��'E��'E��'�D��'�D��'�D��'�D�����k����3�_������K��?�%�����YW���r�I���L�Kb
]�{$�����Cb
=��#��`�����2���#�j,�J�G�E��������=�D�{�<�#��G�C����&����K�ml����%S�3�(�J���YQ&�]��Z�9�@r6FY�+_��XH��b�,��9�5Xw)mF%�9��@��0�A	M ��'�K=�{}<��i�;����_H$j���v�tE�{%�H�k�Z�,r�1+KeR�?���:]d��P-;s[�`�<�e��#*�9�/#�Y<�y/U�������D��E�t*����!�0�eE"K��E��9��<y�Q�qS���
e�����py��I+1y�gD* Q��������L#A�QR�%��TEd?�miA�!%��]�U�Gz��C/�-��&i3�)�����$7��M���$�|����)���I�/�rN�����8��y�nZg����������
k�����sv����#0qNT������0��<�xZg(�6���`2*�F6��8__eiFM���e`QG�|� �y��l	�eA	���I;5��,VFSF�*������r��Mp�q�M"'M@��t%P-,���[	��beh�z���S�j=x*����,���d��~��Tw����1������hE�E�e��4��bQ�y�BOw�f��,���V���a�7���~G���T�@���3&�d@vKT<o$M|7�BX�o��	��<Y�+�X{R�K�BX�)��{;�v����^%fb(9yO$r���h�z��"=J�!��Q��5�q���E�n�d"��O���sZ������4���~��S�,}�h����8MH;x������B�4��7�`c="g'�6��D����{s����,���^�4$�VN''���(�j�x��'��Og�AN����~R���	�_�+)��?3���	������u+N�
�E8#�@���.C *���m��n4�wa����W���@�&2I��3�]cUY����@�y��|�FI�aP$��a#�X��O���Eb��&N�����p�����N(���^������""1����?s�z���{�������_(�S�kM�::��p%��w6���=2G��}��8S�
��:{q5�Y�:
��z.v��h�O5g8��)o&���;|�a��I��%�H�<���bG>r�~ ���~p�"�<�O�NNst�l������l�D���f�UB��@�N��bz��6�����_�{�^���;����
R�KX8�~�������wY��uO���N0�� *;GO�Au����_{���SK��(���OD���,��Pf�$@��:�����|Y�	�=)�_��~���3������� ��uX�c���<�1���� �"l(�W����B�HF�s�\;���2��+�V��)�b�<���$��\#��uqX�J/����4������K�'���E�|�u���NF��LM�o�B ���"P�!�(�x4gW�>N �(m#���R~���,�$��|H1�|�d�C�������]�I��gdE?ei�]����UBM�{/���[����\���t�;V��W�(J����(��d9(_���k����t�����_@��LU�Tx�h�uQ����II�!��;�SU�Ydt��E=5�����=$"w���4�&>����7��z�I��/
*H�5�2�,�qug�E6w���T"��vc�n���QD���N6"����@�YI"}�\��68JWtT������pKeS�3:O�wn_�|x���>B��
t��DVd�Q�t�"R�B|���Y�Vb��������9��d�R�R+:T���!?������d��G�.��^
!P�{O�5Y�h�����`,���DY�V[e�L��QIE��|j��#�z7�YG*4L�}���]�N��'��!)��%��/q��������hiC��='���(����e���EI��	�x�5�Y{�%~w��8b�|���E�&.��������D�=MD�	��lu�Y�����;�3��Z�
����m����}��b��BKJ�;|��BTg����
Q��������U����Z�3 ��������C�r������g��Y�yv�*?/2e���,&h�Eo��
��KD��s��>��E�������Q5��21�����|�y(x^qv���"��u�Y�����y�:��w�~� v�J�A�2�gY��S�Y]>}lYf�Q����W�N6Kh ��S���A�Tn��@R�%�7�>Y���g��`y��)"[����G�d��~���H������6\#o{��z�@�%A_t=���c��>���$��������!\,����b�
���X/4&��	P�}��&���J��DYlc�������i�q��\�a��+����Y���W���z3���qb�L�)��lX����
�T<o�&����@�@�����p���|���f_PQ-8��5���h<Lp%A��H�`��
J2������	�gM��gR��w
����d�|�K��#m$�@�B�w�X��;�����<���$��:���A��y��P�����8��5*�T����[�	)���
6�����y�Y��XE��I'a�hE�q�Np�kI�!k�eES�D���`~�)����*qM�6�J��+
J*�f.J���K�����r�����f����vs�����#������o�&}E��K��h����,�{w�C�a!9zQ��"w����d����]7A�!V����M���b���P���f�MR��;�P��j��a�\��z�d0�/4��}.�0#�9do&]R�`������~���^^(�On�`�"���Z
��cXOH��9wP��4��e����G��[p�C��/�����v�9��m!�-��=�j9�
G�qm�Z���*5iw	�������{��^Ej��`��:Qj�W�����o?����b���gw�.���h�
��\#�V}����������/�+V}U��U���.�[$K~!9�F=)=���%�X��o�=�{���#!zl���S���S��?����Mr�8rX�B%=K��K��dl\W���qk7s�}�,�mv�O� �c�������|���3�$c���?��<��lY$2���)5=��&���$������S/46M�����#�7K@�"���V	�|�5��+���M�-����2<��]8^�J��V��<�SE��l��
\��PYl 7��[�Ye���a�n�pP�4>��c��F�0EY����������$*AS��So*�����<y�Vs��
^h�����y���M��*�	@�X|�����^I�o4��E�h/���M�f��P��J�����_����j`��>��H���M��L��|b�l�5' �__�~g��j]B	�gX�{w�t��������;�}�>y��$��
7u���=b;�H4�����w4^�z+/&u�����P�}�����:L;����N�.�y!y���"��N��������{��~[��y1�g��Ee]����
��$���������0�<EKAQ{������=Z`�r������{^{�0���D�0���H�����$���P��F�2/�Z5����K��FCO���3.���h����n�M�?�st�
q����8K�x���T�JF����E�H��h��������D�������g�UF��+��s���	j���8��Hf��H/�a��>�B�,����U%�A����U �<�����CiBo��x���y��"Y;u��Z��WV���W��6^YWH��J�hNl���)s���<���d�5����'�VVT�������V"�3�b��`����nN)��!_������5����
`�b���c�[���dez��y�h��e\�X����M`M<�6\����k�mz����[���$��������`�o>�a/#��#v��� �A��IL�pWcGn:��m0$������l��`�o�Z��[Sp��^�G�^Q���k�8�����[&�?/[�g`Y4��6T�uF�$����l�7��1��7
XoE�����l�����?SCx�%��`��5L��������:
1��	hG�ml���������b��y�[�u��B)�A!����(�����&P�x+*Q?%���/lif������������t��N�+~<q�'��n���#t����|3I|�u.��[c���o&D������yC�h�3�.��o��Fy>�+���
H
���������5p�"��y3<���������U���J����:���=�P*��V���,E�k�N��Q���Z�F���������lZ�v6�����I/}�m�LH���d���b`��?X]��7�����n�O�[g$�>����v_bB����i&�z.�O��A]K�p������Eb�(�,*���O_S���$9���K�C0��(:+!C�S5�Mb3o��X2��n�^^���^/�`��% �s�c���.>��X@���[h���P#w��J�,o�G�M�.>*X�n�vly;��W
��Q�6�N�����=���#B�fR��W
�+�V�}�,	������"��	��Cs�6�i�+�2�#��2�������8k���7��|a��������u���"����$��~(��lJ����5����C��k��z�$�z��v}m:���xe���A��l�����<P��	�`�:Qpoq)���Q7M,����aow�����R�b���������04����)D�BhCtk�=,t>�����O�:���2k����E��t�O�}�}��0����pt�����C%_�@��n������jhD�/��xC�U:�A����Q���1)VchT�Y�k�����hH��H���nV"��5#`���E;���C�?���F���t�?�����(�W��,{�O���"8��z�T;���yC�����m�<��X���#�N�hb�+��g��>����o�#}�\����/_�9��	���$�������f�Q������oMe�B$A]w�y���[����<�z��B�LH�e�v�������
�e��<bfl~3?�INC�}�/z����,��m�F�A6]H�j�����������dg�ps�^��T,���7#cE��qQ�;��XI��q��#_�tf��xEt"]����2J�������l|.o�e�e������� ����S=W�f�fB�K��SO_�yw�/";�K�0vqD#v�����j���a�����������79:��P#j`���S�8 *|���C4}���C_�N\����������9�)�g���o�p��	94�E�dw#z_DZ\�'$D:�d8I��*�^,�� �������{�PN�����^E��U� }�_������t�8{�H6�:h�u���_r07�j�7r�M�R��dwi$h/�;=.� _��p[F�����Y���Y��f�#�8���"�XI�G�L�9nrz!���N��Piq��VddR����$� '$#����~��f0���*<�s�#��FC-+���l�T"];��)��lV��}K,/[!����T�loQ=m
w���??0!6����g��;6��fB�{��2e����\X��w
�nj�sp�9�<=����5r��Y�O��fBj_����^�������������* ��������4ML�n[���hKu���fo�����2��� �Q>�4\�t1���,��;��v��|A�>�r22:	-PF������[�ec��N��*9/|����W��o�1�x�6�p����+����a���O��/4+������������Pup�K+�[�	`��Me��j�������XY.����v���^�o�Ab�H�<�0	(l�=q�:�O2�ph�����������]w|��� 9���b�4]��_��"�����TV����7k1�<?0���Q��S;���DC�}F�����Vf���~DE����Dt��c.m5�M#v�8���6.������z���5�����a�%y���N�C&���+*_�^r��eS�9����H��+)��~���DD�Yxa�Fz���o���e�'���cx�����W<a������u�\��fJ�I�[]t�����7�b�g�4(�n�8Z���-Y,N�>[�H`�a��������%���oZ5�{����H���=�`L��w}C���AfV�DK�>��*�����C��	����y��BgB������kh�#�8"q�ht�O{�pi�tN�h�����'�!;:������� l=F8]6�(��v�
!�SW�]����XT�����F�������E's����C�|"�`�������c�C
u�i�R�j�2@�������o>���%&��YFi����fo�C��4��h���4�����O�����\���q������!�3�����.���e}���	��M0��������+�Ck_�}���������ya��`f�O��)6��X������KS���m4q4�8GY&��f����dnp��?>�n���9��tx�~K���6�!	��In�����t&�n��{#���!��T�g7]� �)���#t��ypc��yNE[:d�nn��$�Oa�nE%_$�0�H����+�>Z�~A#�y�ep(�,����B��8��_�4��0��
|>����X�����|��IP�Y��6A����w�^��l:?c��mS�OG4$�L��G��w�&���>������j��c7R}�3?w�Q��Mp�8��M�!�����Vm�2Uk9�^������X���|�Y��������0��"���f��bY�hG�^�p(�=(a0?'#8�7
�@7J�X�����n>��0�1Tm(#e�j"���)o������������d�3m6
z-dFU�:Q��{����:R������:d6�a��,t���w ��E��
t�e�S!)�0����������7���crP�t����Jg4���*���������
���C�R�����)y~`B�4F$��M�V~!�F3�8

Y`\{O��L,��M���v�d�/�[	��mc.�7�����.#���\���\�qmf#������s�L�t�#y���:	7r87��21W�n>[g�%1�zWD��k'��*�� �f������F�B|+)�h�%��g5�y��z�U����������RY_p��&�aR`���l���
�:�WRD�{As$�%V�����prM�A�PS�����T��G����8�(�=|	��~]�A���}*�*+B��|��_
+WI�Xa[��F,r���Q�����`��h:��A3��y+@H���sP�������m�M.+2y/�0����� �
Ct20�]2B�se��DE�y����������_=zB����!�1�(~���k�v@�K������������.�|r���.���;���)�	��t"��-�=��������=^���x�4D�]�4�H��-%�����<oT1��F8���A�f0�B�4i��c����
"�3#����ff�Ll^����L6Fm:�]��:��^����8~��kb�T��p�|�y��w�h�2�s�����	���G�I:�c�������Ss���/�����o�7��l6I�C�TB]D�d�i��Er�L(���x~`��N���BQ��G���F�Ht+b5�	��M5��(���AT�0��������'���,��;	r������<�m#����+}��C�Qnr=V�Q�Dm����-�"h������3������Y���Y3\bd�!X�U��U����o��be()�ip{���g5��aW���G�B�e�y��(���ku��_�$�i(�V��/��!�`^Kb��eB��=7���U���&�������_�_��l�����ER}��b4�I��:�r��sFD���t&�D����r�|JO[�]>���]>���e�~��n��	����L�e6,��"1�|i5��0��E�z���A��,��sk��Dt������U[�4guBm��gk�
�������0_;�%�|��B��3x�OBb�`���a�zf_�|��	��}���0/�b��v �+>�����Un�m?�fnrH�YX6�v�fM`
��P�3�KO�ye�5��k�b��F�e8 �C���6+P�2_8�-��e���g$�0�[�8S��b�W�k�6_;;��	E��Y^�V��<�8pt�|���1��~#�\l�7�n��@l�����������g�0��3��BJt�x:Ts��o��kC�����c���|2����F}E��(>+�_�%K�X��BI�$���Fz���z����b0^�����Y� ��j�)�a���K	��53�F�X���N����OW����d6�s��.�r":���M������q,m�n./���q@'����yfd?m,�M�E�
<��H��5����u=�E�Cd�����||�0C����4`N]>�O
D�p�w��[R�&kR��)��If��oEY���������*��m���r�x�;�������q��ECU"\$'�G�}�YF6V�3�c�?�b��xK� �7T��8cD����t).�gS�m�l�#�qp6��N�w`��y�/�����C��#2��V�����8"���;��������\g_:�vl�,y�&gQ��E���D�N�0�u���m����8t��k�cY�c2����&?/B��do:��I�����������b4-�>v��_b8�l8\���w3Y�`�r�6����L]`5���Z;�eA,zucE���UQ����l�o��	�OG��K���L�y���D�]sU���h��KS�K�*�"}����mN>�tqi����=U]��A�|p6-���O���d5�Jf��7JQ��~W��He=�+ZU��z�>�����1N2�z�VY4�.@�a�==oT���9U|V �8~%hQ^(������\�� S},����f#�@L��;�����$�:��+���������/:�;7������a��I��g�����i����]c�����#%\�/�����/[���:Nl24���O".���\/#3,t����q�8�l�+]��d��s:OGw�(t�>�{�O#��O�lm����h{��e�/bcm/,��@���X���H�����##�)���C��@f�����$U�^'��Z��cO�����a+�1�J`�����5��������u��<�OAma�x�\|H�[����u,]F>����V
�y!6[m���'�rb����"k���/*������p[���*k"�����N��#�]9P��I]A
���j��-���5������9�Q_3��t�ry$�
����4"�����NP?I��468�� x�Md+2����F������{��D0~:c}�l�qZdTY^e+#(W�����e[�����7�/)r�����H�@T���|K�NN#E�^P��R������db���	l��Q�5Z�����+I����
	�u�J&��Co��y�(�������n:5_`���?�f���eT9�T"��#Q�'��T�K%U�_�����JQ��R���"��UV�r��]NM�/{JD��H� u�')���a
II��#7�O*�*���>6�
�~��r�E�T�����ORu�h������:2�8��n������T�(M�� s{���Wd��Q��Z���Z��LX����B�� �,3�Z����Z�U��������Z�=�a����J6u�E�N�(�j�bm&Aw�l��x<f�.���s�L���b�V�9^��w�r���|����1�� ����Q�8������w�������W���
��|�������^z����_���_)Yr��U��*������PI�e������*����Z�x��l�w��9����w��Oe�������s��U��Is^U���������drG�����8n����U���~����Q��y��������a��=��]2�K��t+�������������?���?�����cv"+�Z�������-�C��^h�(�F/X��RV2e�
�2�W#"�t";i~�����~�m��[��e��aB�C�����'�������?Hf�Kd�1�~�q4�ly��h�G���p������4�B�z�@w�{�;7��d��@z�H�@�A�D�hk�vz��'?��8Gv���P2��;s�p�Id������p����(�,�:��������N#S5_�|��Rp�OMe�-lq�L�)��+@����8���a��
4����Moc�����:�P.(y&SO�E��^��mz5�I��Ot��H^�{%%�=(X�M������
ZtpenP��9�����.�)B�"�v���dGoS�W������]/4lA�O@�$/+J�8��������������x�~��2�.$�b���F�H}�_}�G�Nc��lv��LG8�����
�d��&��X��zS$��4�����\�b�;�y�B��Oo@���7��
?>�l\z>9{�F3+I2B�����T�L������xz,�_T�,cB2�L$�
&�!�%0CS�����v��������20�tG�������n\�����/4t��|����`J��~1�"�=��F��i���Z1|�M�Q�}���*�y���"���!��+	�S�����A������)$�����|���pW&��u [����tb����%�x����wZ��#��,��r�w<�M`��/���e����B.��Hk��"ze��p����X�W���C���2��M���Ln	���$���������|����J�Z�<��E����6��j�?�����3P�;�h\z��}SX,%�sa���4Z�y^�J�������:��yD���M�z�R���=�R�A�^dA%Y��e==/"EK��DX1}�����"M�@� �9.&��_��@@�aRWY��#7����h���UX���������*���+I���o	���>0�s�eE������G����1]���Qs�2��J��Xn�tP@����dZ����w`��a+	_�aN����3B�n���BDs�h��\���H�G+���1��6� ���:�����,���G��%��W�D���G��e;>��0T���*!.�7�Z)�����O���u�>h
�c��L�/"�\��0�)������Tai�YF�f+��h5�V��r�4��������5��04S�u��
�?{�$�?�����VI�S�������	0�7��`h�`n���w���y���k��XPb�wB�w��	.�R�%�z�uo~�E��2�}��>�##��:���{�1"~����/yz`M��!9��M\�6`�e
=~������6��+6L�DRT
���_��5$+���2�|��E�XH��-b���@�&���a��F���0E�6�:f�3�����;C:���<�C�S�@=��f��k�M��UVe�&�RK�����������izY�i�.c�������}{����u9��+�`WO��u����.(m�z������I��������@�(�z*Sh����,.��q7�K����Q3��G:�p`QP�����Q�O�6o�V4��T������c�����'���Q16	���I�w��Nd ���0�ub����,D�f����&���&�"��N�O-�Hh-��A�������\��h���@���\�6s�ha����SN5ex	���G��2z|�%>��JXQs.�iJSL���G�S��q:����|%��^o����#$x-8�P"S�x!.���Tz��y�f����/����69Q]Je;��=��*-d������C����(�
�H@7�C���)�
�n���l�d�!�����<5i���79+���I��w�����i���+�wE-�<�����HlV����m�f*���M���jtAT�(�=��z2�.�h�����E)T�4����m�@?8������
In����cT+��h�$`������������/4?n��*��h�I���������P���d�+�8W�`��u��D����@^���ds3��^�w��o�"H���Y�d����F�����t��s�:���D���f�t��M�!��
HmlFx�+M����f��4�9s�����!��z&S�3��6�y`9���U��JpU7����Y�a���]��wK���t{���T��j�5d.��<��ag��u�v$�Y����r��Sj�U�=�F',,bu8Qe�d0��+�i�-�I��d�%�\,VSpoS:�k�]�����DtI3I���X{��/��^��db;�_~!E@�52�8�N�qrEX���m�);�B�6���Kwha0��	JG�:�m�����d�-����>��z���E��*��J )�&��Q�>��,�e��5�� ���B��e�|]L��P�bC�>������9#	j�dbWV�����~~[=�C��ylL�8�@������f��l�e���)[��mVN"���z?������GT[�?��-��&�1��mXO�*	d�g�i-����w���w�~�����>bVV=�D��a#�JD��.� {���@�P���R�v��X(�����4��i��}���k>��LY��d-���T�8������#~;��_�4�fw��j��e2eJa�+o�8f����h���^fM!:�S�Ih�SuCx�������H�bN��uy(�����w�:����M���r06*�NS#a��!�����N�)o��s������u!":�fl�26����\j��`I(�O�}��B k���T�O��n|,U`C���l����h=�l,$�*�
�.���_�����t�x�)jWd.�����_8����3J���'=HC�A�[����e��s�8���y��z����lx������sO6�
��@:��k�q��JF���EOI�.G�=qqT=
�7�~v���B��BO9G�>�'W�@�6y�#����X�q�������%��lg���&�dt����k��Y)Mk-������d�)�G�iC�����p@���QU���aV��u+���&(�����uY����S#�L���!��3�hp
��}B���+Xp�~�������ec�@8\H��p�/C����������S`a�=�fK��0��?��5}���8[����-��T�/���`��B�,��Q�^�(�T���SuO��]�T�p��M��/���M@�D���E6�����|y��O� ��/B��.4�DD��wUk��i`�Bc!S6/�1��+�W��L`���~V��rp*�z���Y��nE�sN�Y���M���2��w~>���ea�M�=������,�E�����A]���m�1��2���k�V4A�M�jc����2����W�Qb�S9unh_����MPu���*��'^��3����|��6�A��X8m0��a�V�~��\���Zq�QS�I��p�����i7s��G0�P���=X����d��G-��v�����R+%�MH''Z�7DJN���\YeQ�������W��f�6d���Z7��?E-�'��^�_��]�1WA�OvT�.���?*E���ff���LHX�9�H�b�YN/&D�Hr��v��v���D����c��2[l�b,�����J�g�vr����U�����e���gb"_@���_L�i2�lW\�����ab-1�j�~�EB�7�n>�s�H%N��2[�du�7���~0>�N����O,�S�c
����i��5�����A�S����@Z�HpV��5|�	�
V�]��%��{��=��w�E�X�2Q��,�����%������D`
�2y�8�B�����BZ����\+;!��I�G�n��f���WK���+�z�I�^,Y�j�9�x��J��Ut�����G�}��%�����:5�C��l��DX'C�p*��EfN4"������������T}w�y�9��;4��E��h)��i�N�)+��*�tjz�}��\��(*�E����zO��m�����D�c��
`g��K�?d:�P�~������z$v:��J"�r����<>qE^��#Mf���U�i-@F�j�E=3��,�!4}M=������jZ�P��5_L��f_��6�~��1��/_��lpN�\��Iu�"mR���@e<��PN�&'^�]����{G�Z�z����,t��Yd��
�@�-|<����e��/����~j�6.�8��_��5:4��7
�D����v��h��&��69ue��0q�Q����[Q���3�,���J����p ���=��$}|�
�8����������2�G>+)��)�so��;_Hj��p���7&Z'22��4
��&���|-Ii
R���=��}t���S��J�xy	�3	j�c���n��I�
^P�d��A:�P !�/����Q���xV����U�+w?�������YC`<�H�����5�����7�e����E\>D�E�nU�ZxK@����!���*�`fJi���B���&y�J�=��0/|���6�N	�~������[R&I�������:M-6t�����4�J*�L*?_eESF_����F	�~+*��E�~�@e���[�B��������%l;��	�7'vweR
�"��'v��Q�Ng��b�c�i���2��	���
���B���K�;�7&��6����������vH�q`x���?5Y�/��Z@e�DJ/��50/�t]�a5�/��HT�E����kx��w��@<&�����U���*��_�:����<o$ja"�B����D"��O����������d��Pc�:�������"��}}�L�1F��$i�7N��G��*u�M��I��;���]�OQ/d��f�>�`,6V�u����\�Z���?#�|�q�n����%p����A�{���e0�(
�q���$�7�.�q5���R<���������B���:Kx�Z<����1�%�x�jOBml���j�&���]�����V��s�Nf67&�����*�7�1������n�H����w�����S�T�
����������x�����MU����X�R���W�z��'�Qo���?������\ �ly&�*B�	�F���5e������{^^�O��P��t����ta��c���N&��g7,���<��`B�P����1��bx�>�����:34j��)��u��0Q�5z��8#��v��;C�^���BQ��)!�J���t7P+�^��v�8h�p��6.�!*���p3W�\�J�*f^"@^�P7^����/U���������s����(N1����np���7�V��|"k�fq����98����q��&���L���m���Z%$�C�uLo�=�����g�=TI�������G#���5�S�WAs[��6�r��a|P���!>!�R�C��!��_��t0T��.��Y�W��[���3����R6����A�"�/m���^B�7��AV6�V�E"�E��3������$'r�t�Ec��!���<��{%h:�f�U������o�����:i����
�-]�4���2����<D�%����n����7�."���\Y���J(��~���i��O�z�$��<�S��wax��w�A���6�W"q%8/�.n6�t����	�F��+��_���917��"R�)&�a�b�e[�,<0�8/�y����aP1f���J8$GXj��$4���8�Mz�;�[&��P���Qq�����$�f@��
�D�G�'N�[@0���� =u-%Qq�~�W���% ���P�#������xN#6�Aw��"������������iF��M?"��C���N�^(�S��@�)y"_�=����J,(��`���z�q�bb�z:]��a~ID%��z�~&M^��a�������P2������=��	.6|,�Y
v����!����
��bo�s�������L&�������j�����.�A���6x�#� �So�����O��3	��Ar������"�l���6���n%�#���a�g		P#��U��S=�:To����^r�>������Q�`{�;��%*�F$2��6(/�A������"�����S����S����y���_+��*��0G�����G�8���j����Uc+i��x��wP3�,?X���A��V���@�Y�HTsnM�V,�7E"��"���H(�B�-��45V�
�v��>8F��.��F���{�H&��Ah�&h{|��L��E
U����x	T"��nz]��a�a��|m�JS��yw�>���V\�� ��{5�j�_����<���0��-_K6�(�~���)��b�3�+J@����L�*uG�
���n������]�yZ���}���u��������I����������Nh:Qp:�I���@��TA��`��p�`�P��M���<Y-V�0�j �]�W����h���[=a��g�+�^�qW��i�er�d��fAC78#���.VDP@$J��3�`W���H���	%���4sga:A���J���"bE�I-�g�ou�QM����q�K�g:���]��!��7�}	��VD l����G��D"��D9�4j���d��iW��EM8=�;�D�����4��!6�	��]����b���l&������A�l�0�_�f�����LM��6�[E�[���T����������d��m�I�;�7�/H��5�l'��,}W=O���c��}Zs��\9�-�P+�&g��G�i k�C'"�=!K�RN��WV��������8����/T�ly�Z��X]����}�u���7�n�	WaGPW�q���������C�C���qy��a���N �/�r�/�:\���������T�@���62��"c�	��U[���Se��S5����B��Y��h��G(��B�7�4�t���YQ������n=�,����VRU��"J@;C�|���	)�`Iug�����KK`LWj��
����#1:���m=5�T�I�nz���
����em\�.�y��w��P��t�Ado��Pe��/�V/��p�Qq�.���?��JZ/������F��SCA+
��P���ct"V����}Y���i��j������-��*e��oE%����(�P}����`gD�H��Ee�5��z��������j��H�P�R�(��.\��r���B��9`���A(/,k7o���3<�Zp��vE�m���BW�����{�oD>�]=;�k�J���,g^���W����D��Z	�#�� ��!x��1�Hq6���7�W�mZ\���,���X.#A��R��lu��Q��:E�e
F����WX�o���.��i��f�tr'e���63+	�*��q�C��s���>��l!
.����
2������m����~P&���]uA7JU��H,�%��E6�H�������'�K�(��������S�t�z�W�c���d����W��c[�5���t����?������^��_�>������?|s0���\�gu��q�6z�r��������'� ���!n������~z&���f6���q[m#�}�"e�bH���%pf�O+W�Y�?F^�2��G�r��1Lq��9j�Ng_9_65%S�C�)��6�,��"�M-`���w���A,V'O���d2V����b����(�;E,m��',R~^d�^��<��)W9F���t�������S�q+����e����c	������l������SFg�I%=K���+x`Sf~���"��y���9�XE�+�)�%E.������x"}�E��;a+��8������S���T��q~��%	Sf� #R��������L���=/4��QX-*?/"��w�P(`�C���	9k�@(��`���r���
f�<^g!�/���;\�Y+��cT%��8 )�'RCg
�y�w�9��/i�N�
l@1�wb���6�����d����\�QF4��"����4���g���4^7Ht�_&�Zz��+&��K�D5~��E��/��R���>v�}��SvfEZn������^f�>�T��/���P��������@�B�E�i�2�Z���	��+�J�(
c��+����
���`�P�_���Tf�n�F;W����g�Oe�}	P,n�dIX4}	H��L�%��������J7m��h�2�5+�"�� X�����������{"�A�����`�2����K���HX����o����i����f���@,*�F�	t�
NCL����D3Q��$=]��H��1�2u����� �&7xa�~��\�#X�lFa!.�J���%�6�
�@���0I�|�!,�/�`��g�vlf���q3R������;`��FP���P��F;��������p��Q,!�{�Y�Z��^�e��.����HF�3x��K]��{�)���|��*�!Lr1f�B, ���H��������=q���H��	H�x���gM&0MA�&9�	�D�9�o&PG�n3A��h;z+7�	���&UE�U}g~�]N`�n��Z��8�B��}�GI�v6AS}������O��v�����1\���T���<�J~�B8uYy��o^��\�(D�(>("�m�������f0�c�k39;
�����b���B��;�DRho|G�gn��%�)j�)G���B����K�M�,��������cKw��[�b��dz���&�Y��
Q�Nut��w�A�.���(zx���9_@�!�P�\pSCg�Q�+�x.���d2�F�I>��n�W���� �8S�l���V2e�s�<�B
1i��#LQ,�G��#3`����~�/\�,�����5I|�By�lx����`��P'�i��?�Y*F��tN�;yOFH�8����)^���|�����o���XZd���m���/��qA������x�����+���L�����`9������&\5�`g�~�����s���I��IPH�����~��75�2�`��m�C*N����^`�O/P����=L��W2�+��SA�jD�Cu��&�%"�k��FH�3�H\>�0}0}�;n�,���������m:s����x�z�3Td y?�r��-IX0��4�&Z�M�	���Fg��������L�����,G������L&s8���K��$�1��TRU���(J����������������l,P�(
��@������$��u���Me�L\>�[����~tF(R��v @a���$WF8WA�tT������D��o����r@��Q���v���x�F��gR��Io��	�J_�$��S���i�HDD��A�y�J���	%s(�EZY�H���S����r�?��n�E�Z-���������x�&�������a�z��H�?�l��"��>�-���L��D���ot�iEI��)�$�
��:��tj5�U&�K�(����Dyh
m�&��&)��%2��dl�'�/d���j���$4�$7[��������/������C`�c{�{5Jd`>W�P�9[���['[:��c�u4>���>2�����_$�;�(5���5]��������GI��%����G���"�Y��m�H2e�y���!)�b�/aG��L�j�&u�dt�0��h�-u�7MMZ��bm�CO��,��V�5�6��tfw���������pW2x�Z�g����
��_�� 3�E�p������$#	�j��X�����>T|0�xn05��	��� ��eN#�r�r�D�U�BQm�[t}�k�H�"�b�x�*4�1v��a����j�0���$|�KE���r���3�����h�%��z����*�j�d��y!�u
AQg@�0�bXB�L�L�k�
,�S�7���L+��� G�l$	��Hk~9�������(s���i��h����@u�-TA�y	�+J2���oT����)�a��F}��m�����^��Fzi�[�D�)Y��{�;y+����6s�n�o5��2e�<Tf�i��0>A�����Qd�S'�2C.
4��|-I��@c�l!S�u"V,TG����O&H�5�-i:���G=A����-�m���
�U�0�N�N�=���HN������KG�Tc;����9�Br��i�N_2�Qvzg��R���xl2��tI\�$n|�	��t���s��_"/���(�R.���+m�������W��!S��.8a��w\��+��l�`W[8�#���zHb!.�������A�����L��#n�[�'S[�WR���[�dREt"��_�>��bcOC~	��s���4B�JJx����6�!���XFH��`�Ng�N�Mz�H���w�faf.HD�#��
tf��y����,�2���u�1q���'�b��R%�8a�D��A�[�m�����r�����QM��K#D5B�������|p�i�[���"��������K^�d������6�$�y�������H�N��
��FeA����-G���A7W�

����]�����4����tc�v����_-E�����:�2z�'G�kT��s���_�p����Z��j��CU=��3�}d�V�,/$��"��������4^�(t�)����������*��%�r	Z������S"�������*pi���X�{�@��2���G%|A�O����.l��EP��ms�o����B5�@�\m�&'L�+�	���Pj\�~^H�u( X�lGF4�lBH(1g��%��h�K:*/�26�	/��P :�T�Mx\#05�o"��Gc��vamH�������i��*�1�j%U���n������p�������F�[�_r"2[��ta
�7�=��Z+�x��v�c'�e8i/�e�gx�b�k��G@l\i�����������_��rb��
�E)��nmy{���6CF�T�iom�}M��])����{%�/�9"�2]����)EF���|�	��C����Z����&�������#9�0	�|���z���Qv���-[/z�/d�:N3�\���un��n�M�PU[&� 7���>����[�m1	@�&�`o��DDF��q�a��T���2@G�;n���

�����-��E$��7W,����Lb�����a�@�Q��(������@D*57Y�zST���dF���PPI�?�9j����kX=�����J���������������;N�%�:�����'$������M���������&��fg�����A��}��a�?�����K7�l&Q��/c������i�}u�N�y�#!����0@�Go~�j����S�'g�_��������p8|������?H�o������	����T�D-�4��������������w���?#�����]QCK�����Y��r3�H>^�>=����I��W_6l��7K�w�(��vGw5������
�|��~�|��i��?�s�(��r/]V1]��X/o��V/o�\�F�<�rb��	L������I�UL�y��.�!k^��ry?�e���<�zy��c���Z��/o�r����������*��g�5���Q/���T*�ty�J�(�O|��i����W!�Ud6����jO/.SL��^�CL�U��:�t��:�t�����|c-�O/P�CL�g�:��z-�X�?��\������u�q}�������������G��?a���\ &3��FCL���-�\Zr/bR�����(v ���|_���R�����}��Q�n�Z7�V�J�}D1�r�b~���3�|}���u}�����[�3�t=L�b����1_wc�����?C�����!��n����Q����V�/,~����Ra���u7�g���Y�/�~��q�X���~��K�gm��~��}�����.��h^�0�E����/ZW��}���^���U�b_��:��m���]����hZ�,�E��c�/ZV��}���V���U�b_��:��]�����.��hV�(�E���=9w��P��ll������H�_�Dr(�z���C���-O�_���k�G-�X�W<��P��Y��E�^�?��"9~={��p�R�?���Z����I��py������I�0���K�*��������9�:�RD����*h*��*2���Ap��E 7+O�<�=�J&C���3���H�m�L%�\�
�����V"9M>�&�8L���
z�$I�����	�B�����(��N��S-�����x�QqI�,������J���o�Z�L��o���I�����6?���,�6!�?dY�hN&�
D<o)��Sq��y:=b(S%���1�d�f�h�"���.B��^���I���������Y�
Pj�:��&�b�X�d���Y��DF��hb�����]�,��������#@A�n������$+N-���M7���*+���^E���R 6?��l�\��v����y����u]�Y�k���Y�X�Jc$n��p��q����:�1y���&��'01����s~�@:�Z��
!:C6�_I��Z�����H�K��Ka��8��N�-DK5�I���YjLd:�?��d�i��]a��58�A�dB!UV��;�Z?��}�@�vCfk���^��A�B��KPAA�k��I�K5,��u�}vr�p{)���/fUM�t���!j��$Q����L�]��545��nEz������DmK��I��z���u:��}�,��h�yCFGQ�D:_e�m�h���#��)�������n�I`����F���
�v>���Q���Z��jW�h��F��,����,�_29�3�X�Ne�o�5Y�Aj�9�6��h;��;����i0�"vGdQ�x'N��LheDN&R!%�o��AHr���.�X��H�����LA;f�C�F}��n~�D3�<#����/*��'U��������!_X6�@��is��'�@���X�Z��DV��~V�Eu��A]eo��h�?o�0@�������$��>�����|E���FqO=}�����%�<M��RK���y��y������o���)"�o�<Y�
�+	y�R!R,�y���`"2�^�x���S[u;�#��f��t�6��:9�Sz,(�������}33d�x@Z iw��|�2������H�.�����j���x��N����������Qk7�����Pu����0�n�/��
lzF���W
��wt����'��#����T��[�Wo������-�+hY���_,�[���3zB`�S)r�/��x�;��-�-���Q�
�|�-7\��3
���`�����JY�0��*D��76k��q �m RO���W(�@Tm�)��6��A�Q����T��&F����r1�'���A�U���#��������L����s��w2���~!�+i��*O�����P�O�'�s�Aj�AQjK���/r�GXo��(C:"cC~b�����z>�N��SM@�#���7YV�?j��A����N�$������nJc$��:�.4h���oHo�c�?+i���'��/�m��B������V�������~�� �������x\>w�!���� C>U�����w���eh�D��7LRw����y�(��yz���d2Fvf�R���?P���2�|%E>9no�����_&�o�W����"gH��i�G"������X�*{�(dr��B1���v}V����@>9��=�����i	\l��H~��z:m��&���7��>�k��uFlN��W���������i��$O�YI�u���X�#y����Z�pJt����3mB�ra�8�4�;�|, �5&@_��O�����gp�8����5�����5 �A��y�4�QS=B������M&d\d`���VG(O�!���9���;_��p����7�z����D����1���J25AK�%N_W���5����
C���U�kjW }Y��fX7a(�X�T��"m�������h����7��U]����d�?������u!���D�d7�C��
A���L�t�����"��h��v(������������h3qH������[�+h>/2�Y�LL���d��$#��l�
"U@���O�`�GM@��>������������!6�G1�*wh@��x�0ij^S���	� �d���>"�w�����I��\{om%��.��f|1��0�FmE�Tf�_�;�B0 l����ui2s�iU�'����@q�a��z_������e��<5�E���Eg���f��X%������'4��� �Z"7�.#W������"����Y����0w[�;o�=]H�-'���*]��#ngY2+��V�s��`���*��	��k�`NMd�R��w1��������wD���N>qI����'���kb���Z$�a�qg�^�?/"A����r�Je
��#-���]��r�qP��i���/~�������q`@�_�_`���7W{���g�w����.��fh��D�]��|�c/��l��.>MG��� ��`�f-���I�#F��K�$r�l.�����4"o�~�q �����������4mC[������Ev���S;0�d�����~��a�������S����Vu3z�Jv<����|�R-\��@��k��^���b�^��N��v<@���x@\��x@\��x@\��d]��B����PbjO��uI�{�������������� �&f�_���qh�E>�W@^����u���.�*�P�g`�MrK�a��q�	#�Y���XYTP1�/�S�3���
f�V"r��6wf-S�y�����~6���^(�sY�;��|J&"��Fs-��2�p[�Tv������y_�2BC'��Bt,gv[��k����?a���Y@������[�Y��������90�BRnn��{���M�=��cv|E
h>a�����)_�����L�	�[2� T����3�w2�+��
k���M\�\����)/���.��'\"e������5�����Br��;�]�����	�1N �P���=������Z!XS����T��h�f4�as�a��}�l��||����[�*f>���1�J�<1m`?noD-�5z;�@�D�y��ot��,�3_��i)C�e�S���
��.{�[��Q�8�c�`k|/$�Z��	���3�W;&��4��}Ex�i�*�g�����>���EV���!��>R��e�#�e���1H���a�v�p_�������,��	���T	�aO=�K��o���>o$@cKW���_���Mi���zd�����C�/R����?z�r��.���Y��J��S��_���y�@DT��7��!�Z0%g��{6��+P1�o
P�R������g��X=�W�`:�~X�������v����m���3����2R
gg����7����i�������-��7B�0W��|l�X7�$r����p����4�A�B��w��~��#a,L���B�
�+�l���'���d@�
Ti{_�m<��f�21tW���.�Z{P���?�������(�pO#�_����pO�=����>B��Q�S��d�o��34
�9$��mVm}E|����V[���i�3����#�oC-X���s���+���y:�v�<6�p�s�����m/ "'���X~s�2��]�Tvw'@��)8:���8��H��<�%O]�'YHgZ
T����vK�����q�������CmBo���p��
���	���z6^YYj���>^Y�������4'>\Y���j��=���m�>�v�p���V��V����B�p�\,{�����-�)��1�K�?�|�a��>{��6{�e�nA"���<{]W��Q� ���p���0'�V$�
�So�,����G��_1y�0<X��[��2���c�c
kE	p�9c$�I��T�f�@�=���[Q��#��j�#w�)@D�y|��[�!@a�C30�]5r��"�Q��(��=��sx��[���9#sx+p��MF{]�*�8�X����T����+���-��	�A�Y�����<�O�-DJfK����O�f�-���q^Gioa
�Ye�;X��&�u�(�/.o���hkJJ��9<���{�D�$�3icoA-�''���-��8��G.
����E�������_#��X��������X��8n�i����&`a�_H��j�l�~%Q�$��:���$J�e����<�F���JD���<��|�qn1�-!z����3�Q���9����h;8�S1�7Q)����$"��?��{1����1=�p�'�9�+�?M�{)�&�EM�n��6D6o��\��W�H�o�2=���� R^=�\-�:F~��+�����7�fs�����2���T��/<8;�+�����Q|S6���N�������7��S�����2.K�>N�f����Z��J�/�a6�����B��_�8���
�26���@���(O��u2I���7��n��/�Up>��k�*���1f	����AX��f�l>[H�8���P�8O��(��f����+V�����m����N��c���W"���3����>	N�o:0\�.��\%j����t�._�$�	@�|G��.�`����R!�	Y�G����*�h-����5�D^���i��������?xn��f6���=������5d���Q����Y��g�������2.s/6��
{������i�|���������
��p��2����&����N?�7+SdB���n�u��u���3A�pj��c�������RR��nU�����	��-_S��������pi��M����9��O&��
���6W�x���������H�����af?@�-1��t��]�������M�����q��������M�H>��W���$I�X<�:�����[���F�W�3<�7,>��dP��Z�97�5�h�����+J������R�����z��}<�nEl=_���)����7
-d[Gp�������JT�'���q�ez��de
|����5%��3��4�^��
���m�����Wn�w$����6�������t�&�[$r�]F6�Z�j��,"�B�^*j��"�HP%-����vpcE�����6�[�;�1�n�[^;����y'��PHS`��r���h?�dY����C�3����QL����Wq(dA(F�h��f��(���Wf�vr&��E"r�
�|S9�0x@f���������ML�_���7R��Au@�#�3�zf}����xXV�$����5fl����[��v������Z�#	���*y��b��B���t�QY��[���M@�������9��
���,����3�Z��YHW���=����:p�����y'�x���W�^(W�����2P{3�kL��,�EW�m�B4r��*��Es[��7�:�b�	bV���L�2%''�P�\�B&�<����O��B	0^�|lA��������]�
��IMsv5������X�=���v���9��e���EM�+
�N���������|�		��m[dBb���hN��mS��:.$����
��wi�T���L����1_z�i1Z����#L���3��% <��6�G�h��z�
�b�L���
N6��y���i/&��U�tX#/H?���9�����V�1��8�����b"��)~4������Zh(V���]�������C���]Qzz�0�`���f��C:7*���w+��a
��P�62~!����:��70[!_B�����{���il5�l>����l=*��"MY�5�i>+J��(�����A�{!�n�v<�J-b����F��%Y{�Y7f~V����;���|0�B(7
v} ���h������N�h�TO�;�CFK:�l�";�����������4��8�e��b(���f��	|^����hR� ^D������y�DF�6� ����jdE�h�w���y�V��J���"��
����7M��X����: �h��8�[68#V<�f��e+�Y��D�������"��T�CD@�
D<Yu~N��te�2G������e�
�,��N@P�{��H(��fG������t��t\6��A�u���f����BQ������o%���$
�#��}�fA	 `���[��������n��1��iD��e���rt��B6���!c����
��6�~ ���y���.�
9Y�:\��2���S[.�����@�#-��s?�}���A�����aJ`!����]�z�����?�%%��������PA������Ly%�����mK,,��P��v�@t�\e�[�4�����:���E�HTO������t���
�65��&�������9K7

���W�� Z:6
�,���y��������^�'Fh���@#����lQw�T�f���KM��4���w�X�"�����5�),%�����E�a>�N�);@1e��4�
�Cg����"�����o��0�g� �=�����!��7�V�}��A�u�|E���B�c��]<���Jl �����\�����/�ADD%���|���/�����&r��j!>^q�]���8Q>Z�����e)�J%��I��f���`A�n��K��|��	�P���#?����-��Tp��gRd���c�WrA��@����O{�.l�����w*�#�V���e��
+L���>���^���������ZQD��&�U������|��
�>m�#�7�Q��$�o�2T�mbh��a��\�$�+�C6O���z�(��	>od#���]�t��/h���������hC�����p�7� 7���Nf��V��
���#��{&>B�z���&��[a���!
(Fp��� ��m�yJZ �8O*��=.^��1$���j�On��4m���R\F���b	X���>�b�"-�/&����A,���*y0��Y��Fs
� 6�� u���X;n�J&�w�Q���/�p�}!�K��\�-��B ���8�?�Z���JDF���)`�GM���_o��p$��.�� w
���%E~����L,[B�w�����L _
�c5��&���{!E�/����
Pb�������J�5?���X�����F��\�}��������}���=�
=|l������U��!p��������Xv������L�g�	�>8^��=�m����c&��1��6vM@�y��H�`\Il����Wp�)he-�,~�D�`�	�6`4���!�Z��k!�m��JH%��c7���n��B�$�ah���GI�a�������J�[8Lla��#�q[P����������y������.rc���tP8Bn�6�*��5����z��Sd�3��w�^�#���"��[
����������V�*�Dp�I����`	#p�TH�������)��Q�����X��@'��Ts���4v^�� ����[��4v�D����E_�e[k�>1����n"������ ��."?E�E,(�
��'O�M������,=X��A�)��x2���3�;���x*kp`��l�zK����j����.����2�[�H�n>o���Gm��>����b_>i)j8����oBY'��'�=Qfs�p�~����J����'���c!����' u}�y���w����[��i��\����{=V�Ur=�J���d�I�I!d@;1�G��R�l�����}����3�U�	�L�[*�%�q�������f��v���7�5o_<[��� bG4 �-�'����n��C��K��/t�p�'�~���j��Z����w9�H�]�m��� ���>/��u�fS����=��a�=]PfO�����	(��a�0�������e[��y���R��;{� -��u7M��aV��.Dd|X�����%Sj��l���2-��mb����.H2=A�dI1:{��L+�����E/�'���5��(d��w�*fI$[���2�s���:A��6�Wia
���`=,�BDFT���f��-�� �,,)AO=���2�%��`nI_���{����Y���+��0���&���/��5������P��k�WM)w�&SZ���1��08���1]�j����Mo�����fHM[7k4Y�aFW�O#�qO�Ji5n���~#A�#(!�W�#�$kj�{xg��!���H��q_����V�0GL
b�`F>�pq_S��v^�FHF�����$FQJbE��B%����2�J%����A>�"�T��J|0���&� JU��ye�Q�s/%,����4���
�1I��/*�3L����#���+&KI�+��`��^��H���
|��2�w�-0�
P��V��()�-�T��!����'�*I��;���/�Jr2���D����M�+-��Os����<�Ll%�������M�]�������i%D��D5g����U���g��c')��" ��Si�d�OaR�����*7! q����.�GOZ����E^/&�
���VA����K`�)D���?4m[Qw�aah�F�1-H+�~��pp>/��c�'E�R�M,f&9J��vA\
��i3-/w�rUf_6p�vlc"<s��D&�O-��m��u7��c�to��`�TP0X6�	��j��t E*seR��<�V���J�S��i��m���WV����c���%N*2+�}�������J��`3�a���>s��PM-�����^B({��T���V�iY�n�>o���qA���pWH�'V+�E�D���[������>�����P�7��@�}�bs%���4�Q����o
�V�Eyr��"���^d3����L���������F.���quT��d��� y�4�:�c�G��+R
�@��{X*�a��o88����Y����}�����BE~�Y�����b���1�i5t��9Wqza����Z������b`�w�T��8"N�T�����!^m���e��������:���m�!���%^�e��w�sx!�7�&3a���SI�SS[���{�=1���q>���W� ���m���<��M|B�s����{�4����������G�C����������'�|�M�����!��Hy�4�!3����~�
�K����V��b�=m7�`��r����|��l�����r�l�h{�qDx�	����99����Q��p;���jh��a��f�m���z|���X��R�:�v�����*kFP����\��` �����=}���gp8�7ZO��<'c���	G����������I_d�q�C��n~z�������5��7�= =i�N;\Uc+�q�K������0���oN�dM�O;j�T���=�g�Mcw���*kw��be
����v�l/��t$G�����.N�X�����V���k�S���F�$�@V�����L�U!����������BZm=�������d�E����c�����F4LZ�����1Q�l?���X
�u U�'���!UR��_X��X�
����X"�HZ2����@Q�>���P�i�`Y����8D�kCn&J��jU�-���y]M��P2�����B���7:_�^;\g�QY�zp�Ch�m3�B�$d&�J��d�>lR�{���O�;'^���%yZ&t�Q�� �l������
��!-�E/���{�F�/[�*���C��,��2����y1(T<��5R��1����x��r]�t�t~b���@������X,qb�.���(���o�������Z���E�g-�������{r��YK�?������~��'�[���_G�[�n��>D����6\kt��K�2������@�z��k�_5���~�������?�����z������\�O_��Y�t$w�_2��������o�����?�����\?~.� ����N���X�������������O���������<�$��.'?�����|?����5�������,�@��V"2�o�������h r���Z�w��\��3��C��?���yA�#�:�b)���_�����%��6]�Q?&�*������Q������`�����������`@���h�<���~X���������t��.%*�����aNo;�SJ�L4�;'"P�":��"�'��������)bG:�<n��I���L�$��ApH�J�Z���zn���L�|��@��</��J[�d���2=3�%�Dd=�"�������,j���7�$pY��@���+iX�ka9$��;L������Y�$
���c�.Yx�|�Y;��jj���)��^������	@t���fl+*����T�u����C5}j��N����2\H�a�=����z�����_����t;�'�G�\�: j��M���=8���~Z����>��	��o*�Y�����"j����Z���a�J������o�]���
��h'�;���M��2�E���$U����`��B�$�f���������?t��U��$��;_H���q�9�W�0�B�����w=�dJ�.X���}������:�W�Jv�{�	�(K���F�o��������`�,I���RP�(/P�"��u1�jE�����UD����!���i� :��Q�y�x|^�_r�dyt�;-�����������7�c�[��o9~&����(U��(�w������U��=�T��{ws��U.e�P�����K���n��tMV����c,�t�oT������Ko�0��@��+����o���q.,:TM��?^���7�q����!��_�A�Z����,He�f��*�e���Z":_�},q�B�h�[J��S�%X�t� ��APs�v[�����7D����2�v$k\PS��@�k�
+�W���_�z��X	?�M����j����� �}��	p���$�I,/K�u���D����y|���Q+7���6��,D*����4��\��k%�k2\��h�i����i�%����kE�4��������:�S���es1R�����0o����,<��2~^���� �>��?�v<��p����.�i9���k�$"e;^����4hJ�c����	�L��~��}!Z�=�+��a�X��T>�*#Z�V�5��5x�E�T9��(�y���.��D8t]���)��n�4{�
t�^�a���5VI�S��
$�]�����q]!-���GfX������<����;�����%���I(�W$��-��7���������BB�y=�npz��b
���D��;�`���D?�O��-&���i�7I2������,�Y ���6��P?!j@5T
�8�_.�vC� >)�K���^���dm1�gl����`n�������ofgY��4�G�6cco� Hq3��u�����|1���^�i��S,��W[Q�U��tX��	���*X-L�j�~,��c���3#v�+���*�U�-^r�+0��S-���%�mtE	���������i�{�~z)k���(�A �`�V:lt���+������{�����~���|��tAM��f9�3��C���4�`?�/�5?��M��eK��D��:k�*`�����$��M%a�����BT����w��;�nK�C���EO#���%�G&��6��=����C({73q8���9L�g!M���)�KD_ozTI��s��/������ ���q���o'�`�<�����[KX��/r3�*����~��p1�efN�B�lUt�S���Zi��K �Y�� �K��l{Yb��M�*��n�n���*�>�tiAby��v���{OK&��S��d�%'�M}����IV�Z�y#�1W�=:
jR%b�5T���]U�$���yd(�_�
�z4|���4���{��F�.H@�����O�R��L���XZ�%t�>Ka����ce	,n�F������Y�02�[P��<�?��1��"�,V,�)����������9�/����:��O�5���������
��D�_���S���Y��(�ad�3b �N���LsBv7�����e���>��N�/����=�3�6���{�a?��:�gF;a� )�eYu��+�h�],od���D3�����0 2Y�g���������3�|2h���U��JpUw����Ybf�a� 7�+��n��}|����BDuo[�lS���!�"X�
;��l �� ���-VE=l�fO��V-Ac��������1w����W[\�6_��[����]��������>i�����	�i��)�
X{���o��9���������i
������s�z�mk�+��hl�O��Q�)�a[)�t�
�e�JP:Z���'|:�[�����Y��>�Oh=ie7]�V�TH3������W
��T�eF�'	,�	`�#����b0��CJZ g�?<G��M���$5:� bGU�������}���@-�~(�2�|�-��I��jVs�4	KSV���*����b�[w��O��|;����=�fS��x���M2�l��+��P���;�f�w:�P��Q�����)���8����D\^�����@Q�� ���T��T(6E��[4��T�6����%`�V"�-�������������������]�q�\����JD�I)m�/��{�'2r�sm��Z:��dP���n��[�%�mT��i�n��u��3���op3X�%�P�l�9~^H
�����,�>���5O�/1���>l���(a��2����9�6N��1�RQ6�V���g����uj�K���~� ����
�95���b0��
��h6*����g�@�,�������
24B�?_+I26��m�`pG�k��H���]��vn��.-@D>S736%t���	�1�A8��7�o����ED�"h$����)�S������{�/
��YH���Z�������DA�\��������?�B��I���u�?=��C�+�F���'����+Q��Q	�PmU�6�������
���]��4��3NYBS+����v�Nlh���}/$��&�U�t���T��V�H2|B�I�����")�4�H�B.;L C��=�������l)����4}������;��/$��?��*?}����n��H�fl�0�W�?/"�O�>�8���LC����c����Q�Q���?���X�.�GuW�����-�������@��z��o��n/d��{����w/$���wF�.�@C/DEN.M���h�s��JD~|]�?�7v��Pq������%��rp*.�T��f���`�4����'�(�:�N%3o��l�o����7*a���y��:���x���Q�JD�����y���Q��z!en�T�N,|^L�)N��1q�P3jJ|�T|.���5GO`E�-�����5�����\�\����m���p�`d ,������\���Y��t����^��/�wp�f��3�P����p�'#��Dd�����0=��fk{A�D�#,����
�
���z�l������.&�Gm�@'&�V�1�c�����&E�%]n�G�z�?w�3�9p��~���2��Nh�>lE�6����f��)/$�FE�|��h�C��)�If����lk�)�@�K�P�M�z�v��i�L�����:
���H{Du����U��F/;M?�#L������V�%�@W�?�(��D�VC�������
/�m[���8b�7�`�s��qdQC��42��1o�j�W���R�,9���'j����������H�L�fUz�^a{�nCR�p{!��Z_c���>E�O� y���
.�-�����O[]�K���|�}�+���+��h��^��F|�M����F�uq���<�N
_#����+���wi@m�e�69d:��$JC~�ii�TR�)7#*�$�h�V����m=�������{#GP�0���m���Q~�J�����$����!�B���-�����B�-�ji�,���/��tr��k���U2�4��'����g���ihy���6
��$������)���J������D�q0��O�[��i
NR�����2�EO��}��,�������,ze{1
�d�R����f�M8�+�H��B��R��$�Md2
�~/$�Y�wA�u-�c�E�M3A-�)kYw��2�y��f���"������V�v�1���_t���;�^�>��������EBFF�����.�o�J���[�C��x\�|]q�������G�4��5��X��)��Imw�� hz9�x�k �����Un�niM&a{�g�M��<� T�^�|qk=b�}q�Q�Q��|3�U�/$W2����	�W �g����q�Q�<�P�����t���U�{/L�NZ�����wWU��n�<j�+l��k���d����T���MMY7������7��'���1��:X@�������&a4^e���%v@5�q7�|�y��6���&~����+����QSs���k�|����?YI�W�������J��K��=�������{� ����]I�UW'��Q��r�/�"o��`����JZj����gg�%|�����_�3�|	�;���^A��"h�%L�S>�k��(|�,�a����-f�]T+�?Xe�y���>JF�^���x����� �����q}/�;��_@<]?�,�e������K�Uf�
���Y�v~n\����GIr�~��)K"���xj��)[�K�l��@�q��(~V�[(���k��2v0���jo�ImS��Q�O�� ��'�l�����gA�	�*���x��U�*�4U�W�;
[�(�'���)O�|��-N�':v�m-W��T����i���e>^���)"L>7����6Q�E��������p!YF�v�"
���� ���Ty�����1�4i�����V�-�����)�c�r����;1o�"w��q��Nf�<4h��5�y�>2����s�\����&�A���Ko��t&&��?��}V$���^�'���}!�Fl���yU��
��n��35euT�I�8ms�Bz7k�mV.�v������u�L!�����p\����F�f�s���K�?
�a%B�euc��qZ-��bHV�EnI�>���B)"
��.�w&'������}���������N������������R��i������
:C���L�������Y����&~V���!av0�yK_�:������s,���G���������
�!\H�(��n?~�\���M���Q_>+H�8����������]Et���"$����f&����������l���x%�V�p�Hz���/��(I��Xt�l�"���$��S����������D�Z�\4u-�En2�������O�r��C�"���P���98�b}�'�����+_�������N���q��er��jt��6?uX�����(���c8ZA�g0c�fC��d��x����T��;�����~9���3NH�LpY?5���""�U���8S��fRl6�:�c��C{�A���,��XZz�T��x�S���F�tz�#$"2,�oT<ZOz dq��#�W-��Yf����t�;]K�UQ6Z��`
�J�k��Q�DxO+�������y����z63�c���1E�"�<-��6��T�pVE$=�`����B-�}����$#����[5*��y�������e���
q���~��B�����E�������e�D��"���i�d�n�*h�����88Q��$��E!���H����9mm�OQ������0����<�:�w�f���%��kP�����4a�������ZK9���'g6��M��|��$s��Z�g��)R�S;����.Y}��������h�������U������ S���7'Y�u�f�m�)E�6�x��`W_�9N���Y��e��yB�qJo��6�;G6k
��t%���I�V��:�m��$�Ld�d����e,�uk>�T���#�JA?�H���=���s��U7]�\u]I�4?��Diu�X��Q�6@'����x�)�7'K����L�o�E^N�,N����%��*�4�.����En_�Y�t�'��g���E��Y�	�
�����F�E�i[@U�v�T������.������Y^��5�,�&�,�
�����)�[4��'$2�F�k��/����V�T-�"~Lg#���k�����H�cx�,M�e�����h���1�g�)��ZU�DYW����������������
\�P"X�Is�YH��x E�����S��E�\e�W�5n%>�2B�`P@��%��]I�5z����K��e�W��L�d�[�i��/H���g���������i/2���[3��XqMe��Y�b�����j��� �P������D717��X��@&Z�����6�i�xqQyI������q���J�v����<�c
��"���H�(2L��$��I�9���H�*��P��pY��:d_5��s�<N��(���gEI��'��;&2��OS�L�m����n��h�+?���?���>�;����:��w��&��A���j�%���O��k0Iglr#�Q�m/kT�(��Yud�iKT�:��<�K��X���t[�����[z?+8�>�N�'���74��H�&3��VA����������5<��n�}*�Bb������#�Y6c<�rr@�I�����j ������~��F�����~��_Q�m��S�moHs�S��C��I;��s�n��W"����������t��@q��?����e�J���J����J����F���"t����O��_�^��f�������J��I���m
f�;�,��Nw��u���|�X�x��&2��Z���*����HV���CG������-l������a�Dxw}Z��J�8TQ[�2r�����3��T����})��S��&}�����W������;�0��$�,�?m������r���w�&*���DC�(���*Zc,����A����	�������m��
9�1x�����\aa{8�J��)����z}r��+���f`�$u@�BG���������q�����@Z��h�u�4y����d87����YH�eq���t��3��$>����wl-��<��y� ����@4�.�	���*�D�(t�f
�u����J����Y����v8�0m�!q"�9
H�E�y)�|���C gIg8�ub��ed��g���}v�������������������a�
�N���N7�l��=�-I��@0��!q�Vp�����"Q�n��y�g��4�9IT�����Y�o��9��CU=^iC��/=#�iC$�������5m���?x����������_����~���������?~�� �p�#��q���Vq}>W�1_�{���z}�G�1_��Y���\����Q�\o������AGo �o�O�F7�����<D�<y%v�|�H^bR&�F~���F4P�FL��\���� R�E�@��wm?77���&�S7Rj���lU�y���G���?n����$��P��h2U�3����`���� ������"�^?�����k�d��;�H��@^��N��6=���������>�t
/�4�)k	zH�J���H�^|eS�������9��t���2+jJ�m�^��i�Qzt���L�0D&��g��5��}�G��}A,Z'~�5�����4����J3��o�TT:��\6�^	T����4�l����;�m�����.A��R.H�q��w�:7�x��JZ(������H�Y2�2%G��r��1��=]��3�i<�5�����#�^�M��+@�Gkzv~i7��h�ShM�IC�L�� X�������YQ|S���l�(��$�hg8�]��
C�-���V"�~g;�iLZ����,�-��'�/*X[H�fF��(��	�2���s��%;�";,�b���p0+�/��p�bJ"2�_�%���[G��$~3�0%T��N��������y�����t���V����lOW�����8ZE���7���{�L���~�lR������l^N�zX���������\fR:�T��o���mj�e��E�%;����-���E=�dMEl�����'�x��C� O�J�4�'k1L���WWKz��oq2����4��)OXec� dIu����tA	�1��\wK����G�KOD\�����{dkz2�_X���<�'��s������0����Ov���J2������=]��D���\����z)Nf�7��i��s���2[�5!����q��5]���kz��l��y�if��t	hJOz\aIA�����7�i���x��@�LYm�LE%���dG��3��.���b���Zl#Ju���Z����2e3*�(VTI6���fE�,�U�����*��J#;���P��GR#�4h��:�{>mI������~�g�[z��4g����&'`����I��926�^�fq=�A�/��x��nE�G�������b^��(J^Zs��?��x�:XQ���G=���e��Ds ���)����{��w��qSF �J���&H��of��-��*J��S�"2���R}��34+8F������l�7LvV�_Gs�%����F/$������'�>��� ��M:�LD�����1,��O
���E��&5��Q.�����osk�i�~�;V����G�ay�3�����&�?/V�6�����G�X3m������i� 3]!��2����`�t����E�����+����tP�-�R�seh���@����N��H���)MZ�����)2r�v�������|��3`���1@����$�P�^�z�Y�3�"f�n��)���H4��7,�yF(�4=iU{���"mL�W�}��<�'����������O�?�����y�o�f<t�D��������&}l�������\����o��h������#!�]���W�����,���Z����4����C��	�4����7C~,_i�v5��Y�;�H��f�>��!���4��
�)���eU^�V�e��~�r�VU��|L��us�V]�)�
W��_�X?���A'���uO�X�����5k�����GlJx��^	�Y��A�D������i��Y��Z0#��qF��3�w"
���X����'��5!�����opl��F��1�������������;����w%}�~�*������%�����,�hKj���������WB�{�-]��[���X���;(J2�|D��!����-��f��$��'W�����m6���
�`;HL�=6I��r������`u��]W"���A�����>o�5e��������+y3����~���K�p�~���j7���a�z)w�eN��x�����K+��I-����9�Y�����L%d!�1���v�a!���Q�W������Hgax���of�.�}]P�%g1�*���t�����`)6,�K#5K�,�c��BZ�%�&vIF?q�-0����0���������v���w{!���������O,�[��b��s��fe{*��O�6�QB*�mD�V�-�K������b�F�E�K.H��8����Y\���ZKA��"�������G�7Bv������
�?/��yeGV��Z��Z&���Z����h��D�x�u������d���5PoT����L.�'7�}���������"Q�z�7�,��� ��n�mR�����5���B���g:�p?�2�~.�I���gF'%5�>o��4k9�g�,�]%"ca.�i���V��v����3���5�2���������-�h����z����<)k�Z�+H��V�v��J�n�����Z~��<���s���}��p����1o��Q�{[L��V3��U"r��,ch���Z����I��([e.�[7��3����bE:5��72�"��V�n��e�t���H�V���mQ��l<���J+Q�b#�m!3�h���h�u�W/WQ�6"j�0%������O"��W��)v��8ro�m������S'L�����ey�������T���@� �0�_,-���4�#��}��K: ;�*�:{�"��H������S~��&.���6��[`�p�1�Jt�p������)��-p��}[kq�qE���*s2Zqv�������}�?�[7����6�u��f�Ig C����7A���v��6��//C;^��Q��E�@G�|�`?�QZ��i���RB��J�*@5�T���J4�n6NZv��6�:ca�
U���.��`�^��L����[��/�A�J�<I��N���m�����U���G+v$�f������8��B�v�fP�_m�%��*i�<3�a'x�2R�%�m�e�a��gk*��/�J��"�e��$�Lc�}R���,�)�)F���M[W� "�Y&��>3x�+�da$Q
Z�����[��iYm)G�Rv��s�1Vo���W�z><{�����f���vZ��!U�#�
���� �Y
?�Zu=I<�`�EmmKH�f�����u!I� A������d�<c�_��4�R�c.�y���������3���$��9�R�.v��i��-������v�Oz!�q�1^
rA�lW�!��� fM+j���xNA�<��;�|���q�������1�D����n��w��~T�BD���h��'f�pr����C����l�S���Mw�
a�<���(>�*O�����tJ���W
�\�BZ6��Yo���J���h������$�1�@W1P�U����Dy���[k�]�I�����N�Z������"�����Bh:��	����K<��P��c�\;;���1B,���8)8o����B����0h�b
&,V����|��?���)�A�~7h����t�`����j��&'�����:5;�W6��j/��cy;k:����$�8B��f>���]�/`���`�#dF�/���`�9�z,s��P����A���-�K�q}��}����<��]L�<w?��������H��+��|�@3o�bs��|`[���������2�m��"�9L��(u���`�&��XH�����eI�I��5!�U*v��xV��������o��� �}���T����2R�
juv#��������}����6�	$�g	.�����D�����U��U��Z�>���uj�L�����n����V��4������0�;�f�e�&/4��u[�[�N2R�%y��d�edc�>��)5�m�q�Qf"��H�a>\���h�@���68@��"���������Q|���4�\|#F��vAb��1�;
��+����E]��3��~E;�� _���D����+��ntL?�!���.'��~��������|5��
�1���MNF�]���]%eL7�9Rs2g��)z�5j���'�1��@�������&����������L\z�Nmw���������_��J��;���7�c#6��q�`�
M�{�q��L�q�B<�3��M���[
�J4��d#���>�jIa��K��;Bax��d���E��q��X��~�z��}�o��k!�_������Y��z}��o���\���q]�t}>�:�|]R��*���^�_�r�8���X��g�����y���Z��z}���R���^_�o<�:�|�������g�?���Q�����/�|}������#k/���]
�����h?�t���������_����[�1]��2qb�^���?j���|g��:�t}��������k�O����CL�5�s\������k��Z�k-����<�������QZ�l=z�n�����u�k����A��{�1_�:$���/�����v)��U��U���}��}W��W��)v_n�C��n�1_��x]���m����b���b����b����b����b����b����b�>���^�J�E7P�~���_tw���ww���Y�/��b����^�K�F7P�~\�KC4�����b������?�!~�n�]����tC������'7����
��rC������'7����
��pCx��n�]��b������?�!v�On�]_�3�.��s�����-srC�z��b�������������l����k����G-������
������~���\�_�������w$7�����k��Z�k-���S�!�;*S��������\��h�6EH�LRY����3}i�YL�%`�	a����Z%�8+@��<��������,�%tg�G�n�&�NDb�h�������K:�E��"�d�-����Gj�hg^����7D��l"L��7,��(��Z�:�2j&j��/�n0����*���/�����D�kph(��
P���2	�@#K�He����������{�b}������m�ajL>���\����7+	����,���,@5d������,J�c��[d������@��	��M�QY��-7�z!�sA[������d�(��=�l^H5y����x���I���Ad� j�T���3����y}��V�E9�+��]��U��|�
�`�����YH���R���9{�B0j�yw&R(�,�hA��z�*��v����l��q�1�H4�p��	��������}�9�h�7�������7���\@Y�v%�ZL>�m����������N�]�����-���kCog&k���&Z�W�emYd��i�vdQ�_��^s�k���(�z�c�	�6�_l5�&o�pK����$���T�d���Q=�i;y �%�>o�M|��V���O��Y�Z��%;��E5�(��*��C
���wm���<qhs�D5���m��������n)~�����2�v��M��{\����"���~
��W�aE�I�gN��n�2��X�����8MK�����>�/�J�~#�)��~2��J�N���qW�X������<��`xy3Rk�Y�����.JR-��.#�=�~�����#D
�N���'8����Aw����C/eC��[RT0nBHx�[��� J�1ma�JV��<�+��x���;����D%E�l`���x��!	"�<4g���j���e������j
N>�0S��{�������i wY�	{>SIrmT�M���G����"#5��A��9���f�������^(��'&��49
�&��o6���=R��H��1���?d���<l�B�����0�c��o����������VM"s^��
�_�7�F�[��q^L�B�#j�>�,����!���%����x^���)�p��D?��W�'Ou,���e���(*�����l
�x���g7V��@�V�4�l\�:����c�G�������2���Uq�9���o�|�H��Qe�sC��OE�
��;�D�����&�?�y5�/����H�`���kU���z|�`1��&)3��yc�s���Ks���Vi����jF�E�f�3@	�Ku#�5��#�����S%h���s�S
�Q�,@�@�7+�O����	K����M/`{�^�+�����W���l��v��Y���V�����I1�&���zQ�SC����Q{�@��'
L��9�"���je
�����@[�
QZ��$�ok������'v���<Wc�9KJGOS������|*� �~(1�,wCp��>��������:}>�e������-=nG��g>o�c�	��i��eV}O7tV���
���B�����9�9�����Eta���f�o:G_��eZ���W`�N���Y��8_(X�+��p6����D+B�/"9��p������[Eh��)��������F��9�5r]���6N��/HC_�����Cn���[���U���nd����+M��)����j�ZY'�,Y&�~����63�O?,H;4�Dh�w��]I�CqXi�d�o�}qLm���IS[FB���h��s��k35�Q�����G���!e��	��L��pq��`�5�j��M���/t���I(��hth��o�	y�M2�g���������VD���$��5H���/��"�Hk-beF�����
Z�g�L�0���,H�bd7*���z��6����i�:�O�l�)��m�B��l�Du�W
Bg�������L�}��H�v�!��`�]��+�tGn.�>���4���b.��B	\��������}M���@m�~A�=��j-_=_�+���1}�)#�"d�������m�H7�������;�M�/�� j��n��Q�v-�b����{	i0M�����Xi3��5�s�yyM
��?�=���x��|u��h����|�_�N���H����8���-�q����u��i)?W�������V����
4����gt-��PWg��1��.��|IBt���u���ZE��d���d�K�*�OG�k��D��;�N��N[�=-}����9�XvXm��������' ��9�\�'Y�Yd�F��PiQ�h�B�,%�H�#{YN_�_��O�����1�E%}�=Vo8;,���@S[T��a'�� �����F��8mH8G���|����Semd�5}��f*1�(<���m����d%I
�n�SW"�����#z�g����nQ��im<=�5W+�����)@��=�="�icAt�r���c"b�#�L�.Bh�,�,�BB������
�� Z�����������= -������.JG�y#�f|,��D���plE�q���������^��D�J���Ityc��Y�RU��������H����
%En�E�9�y�z:m��y�w��������WI�=��}������n�_(M��Fn�������}l�%�����U�s�l�_��F7�"�� ���T��	���'��i�&�p�n������O�����T�>���Q�����_\�QbFl%"�-L�|8��w��y��j�_*���}���J2N|
pC��|J&"cb�l��	a�W"U�}C��w5������`,�����{���d�]��/���	��d�J��v<3[�h�����q\������E��n^L�{b�D�m_Q��Ow��p�h� "{����?C�0� T��V]��]���������+V���?V���{p/����������aW�Q��YR���i����6�\����>oth����x,�BE*_�`���/�
�������*�-�����g�5����=�&/D?�������|�������b���m��������S�,��	����������:$��aV�X�.v�7+�������V�|�5��W�U��-���\a+�c&�J�<���G��9�S��O@��
���#�k�����?:��`���g���7�����������	8���` ��U�xFA�����O
J�`��mv&���7K�����
�7�8@��4�.�7ES�rI�O���y!��J�|���!�G�Vn���e�&�8O�BR���=7*��>8/�����7���<��U��q����H�������c�v��{�c�"���8������(��T"��d������T�7dJZ��O�l�5g����(@����bA	��,O�1��_���b����|���m���n��F�q*5b?�H5��}c��;/@���i�����9��|v�n�����N�5�O �vmH����E:�E�B������o�^��������m'�J �+p�It�z�a.P�=��Bmc����a��Q~}��mAY.�'�c,��u$3��O\�3��O\������_O\�m�������&$.�����jj�~T��c�B__���8�n������9:��8��1T&K5<�jpc�J�8��z�J�RDn��g�M�~�DdgJ�o���eW$�}���3N�SB'^�����"�}�Kv��|�������� �Jd������@D~�L^�j�������
���	`����l���t�2����	���O=��-LW"2������JF8��Og+p������VO�����h�\�X�4Y����4��SchK��&-�X���w+���w�����[��-ZI�i>;��3�i$/f�nE���'2�TsF�2��8��w�yB�nE^zZ�
�Hu��V�x��,�2R���:��d2���"�UwU��3	���!����	(��M�=5��USpK3/E�Q��(��15���e �����\a��'�+�Hd�o*��:#U��&1u���T����ds!��">���({/� 3�����B�d���bxR������i|c4��(�����Y����A_-�s��43������tB)��5���foT��<�.�T�~2���/lif����(����~�V���Gi���z��/���,������Xn���kZ�"�Y�{Cly�e���+��dJ�1O�3�;�D��L5y�9t��\����������l����o��\�����U���xj�}��`����o�T�������,}�LR^����7��]�x&3s%���d��M!�.��_��?_��m�l���t���o�L/y�q���{���CM�U,Jl`��DdDah�?��i�������:������/<8:�+i<���k������x�;%*/m!V��6���P"��+I�D�`����D!.�1�J�T|���
	pF�B^����}�,|m����m� e�xI����_'�P�����[|CZ�]���U���1f	e���!y����2g��ZH���E��<lae_����&py_��D�!py,����JDn���
�{x�,^�����B2n�L��l\�� ���� �#]��E,\�>��:D��8��3�
���;��CRX�t��0���������:>l��;��C\u$��\CF4wE���P&�[������3^s;�F���V_����n���p����=�=����
W�N�������f�=:��=7V��������m����z$�.C-|{Lk�������1#�������n,�p~M�j������k�Y�a����Hqoy�o	��5#)Mg�QjY-bO�o6�C�E#�/�����a�D�{N��u�
����
�_��
����������e���C�1��7d�E`��t< *�	��T<6������"�c�L��{��P3A{�����K_��"���W3�/����D����#��t�����\[]d������lO�!T�[&�P��1>3���K�aEE��]���	<^��@����^��A6�.��	Z1����a���[��Xwu��f��@gQ�7����M�a��.-�D��~��~6�!T[�D���N~�����v�����)4j"E�-��;���de����;T�`�3M��!�	����>xGD(f��D����?���Y���Y��)d����M��Q�O:�����UZ97x�e��=�@�����)+���fB�������H�#�3��XNB�?x�����5��a�����|����6�m��f��im��P�u�+�����JX��������(_��6a�o�����.��xs]W�2J@��x0�����&���2z�9G���\N�/��/�$�g{�}hCpH@3�T������mz�f1^����d"��c�B�XZI���ns���-He���	
0�k@+�8�k.u;�k.�l(t*\�%���aS�VQ������4����=��Hc����F���*c|+�j�~��&����UC�e!S��O������,@D��:!������$�/���mC��:��t����|��R%�w�R�m_�������% =�p��:�w�K@x$����DK�-�7��w���I\�VAcGJ�����	8G��_zY'OH����p���N'{+�����9����1?43�^w�������P�-�3�(���V�q�T����% ^�8X������X���f(a=�u�JD��ZO�D�������xC`�xy���Y�W|�`X�@<�]-���t�l��Mx��{W�+��UL��L��YQ���C��Z�x/D����#Q.x���gG��YG"�]�5�Dh_�]S33���VB��'�B������8�+�,�k���M`��������{B��u�MXn�;V��Z�js���������6���P�w=7[�t�������n(��{]�&���^7����&(�w�+P�E������yX�S������p�m�i�}��
Y,6�q4/������������h���� *^�|!��"��T����B-@��B��SmBT}����25��2�D�T��r���l��8�L"P���23-�#_�&��quA�y
B�Mi���PV4�,������xk���W�BW�>��������\�4c�l	H\��
�s�Z��TFy�E�����BD��2�?��#���d�B�:����c�cCD&"���
[�|��d2����Z�U4Iq�}�8y��kA���w[����g#���n����f����SW�%�Ay��T	t@e������d02=���Z��!����R�m T�~'U�V"E-*o6�6�(oHB>R4�����j��;��t3_j������g����B'��'��$Z:v9I�R�[��������'fhec�
L@c�iUz����-���.��RS�O0&�>������@V���������E�a>���m���	��d������XVd��M�����0W.�9a�����,>;�	C//hV�	��)������+*�3��8����k�+�	���{U����n}�����"����4���}��0/��<�j�0�+t�0�Cw1Z6z�-������)[%���M�m����|� �i�=��`N�%d�U��>���D{2w��h�����G�d���s�+9!w��������O���.�wX��wJ�3����<��`N�fJ���i�$�U�;��:?��N�SQh���*�{�$+%?;�)C����q�`��#�5L��m�	E[�9�Z���6(�4����T��y�p��������	>;�������>+���-�qF��v��9��g��|h���_������meK��M���#o��H|� r{��a����
3
��a��P
C����Z<8�j�3�H��A�����F8C�x�����a�hB��h	�,�e�W6�uJ�k+�+�����x�_�A,��gyf�*a���"�C#��B(���s{�����`"3�y�ye���,\f
j�����i'V��8�����Dd��xC��9�f<��*!��v��"w
���%E6���%m�����}Pq&T������XvC���$�����
Pb��p��hR&�����u]qP���v�m��e�g��l��:��&wv�Z}nI�R%����)p������@P:{]��I�X�4q32u�r���{����="���L�;�d:.��5�����������_A��*��^V&�����g%�7�P�	����5;�������0���r%$��X�	��	L����<1n��8�����O�-;�O2�a��X�9W���mAaX|i���S?��e��3��Uw%�4����gG:)��\�m�U<!��E����&Y�L��xxY>�0��RIl��� Kn�K��Vg��������c��H�V����hG�IgL��pV����g#���48����L6Kcyn��t^T��b��n�s��S$��,��.�Z#���6'~�."��n�@8��Z�Edc�:����P�p'��n$�������W5�����6gO�$YG�{�h��~�2��Mfw0�;!Xz-��S����X����`��F�u��Q<jl�Z>��AKQ���
��&�1�|��.z������h(b0�d'h>��~.'����H]�7���������b2;M��U��=���"���F+��5��R�v�����="$�������?w?�<��#_���` '�ml(��D{��">eg�>�P3Ao��x� �	�AL���@6Y[��'0�����"CK=�;�i8�7����j��Z�����r^Q�R�4��An����X����MRh�1'{�Z���tA��6����Ds�N��ss���9�|E[���i|�����7H�m�.v���Y��t!"�]`IK$nKVLi�Y)4����L���Mla���-�k��Q"9rrK���s��|�i�6�Db��1]��h�Z����)���c�*��+�-�nIOy�tER'��&�_\��)������iI�5��i�S�.3�nIW$��aI	�0}6-i��~fI7TP�'Z�v1
8-���&��������a�#��f�c�L��k�W��;\C��DZ���YUI�lLW����1m�)�$�C��zX����ft��0��6��5`x~vd3(��J����*��)e\>se�f@*?I�a�t��9�
3(��j������,J@��>�.�������2��w2gQJ�$��g>�
227��iKbi���|E0gP�f2������j�0��F?�$��M�L�6%L����au
�
�9I��9U�g��UKkF��'WLN��*gb�`��gK���
|��2�;�����L�	�VZ��()�-�d��!�����k����	�F��$����J����m����|�DP|���|�G�M��w����*([��e(4�\��fQBdl����,\�lY9��?�D�;I!<n�G8j��4y2���iB���w���zf@�=J� �=i�3�_��f�/!�i$�2�S6�B���?t����
�m����B�4!��OK�G���9w����9�$�iK��$gI��.��!"r1M�j}���U���I������{.ODB���=�W�Z�y��u�����M	%���<��jeg:���IB)6��d@o\�]�zJ�����l���2�,�?���_BP��t�d/~7����<g���������j�9�b�����qD��K����(�K�������1��H=r�O��]��E|�'"K��u���8�G��"�*�"�	0bW[l^�l���:��������x�)�X0[���~�L2�����A�D��]T���,W����!�}V���<M fr����������M�x���B��ox1����Y�������>J��^n��Y��>���j���9Wqza��i�?+�������T�����h�WsJ�N�+��������?��Ipz��FT�b?�BI�#%\�/�2�
���9lH�F�e`&Ln�?�L�c1�]���������q�4����tX��l�=7��n�
������������a6��/xq�}������\��s?�����Ds���6~$�@�)���I��}���>� �lr��'��>�V���l����6R��3�~��'��`sm����w� ����9"<��=��O��4j�s�P���v���P>��f�� �|C�W�s���������
����%����De�D}����IDm������	d���h�G��������|�����g%%.s"y����8�!�1:���_Y#z#�r
��C����8�Yx�}?��
�h+����I�tm�+WN&:zb}�4��l���v�i,fP���~l7��),����O�����:t��PU++r������J����&�LYO[2�W���b�B�.;�QO�������4��>l�'.�����W}�z>;�@���!iU�'����������l�C�`H���+CF|iH��n?���?: g�:2W���(V��|��jKA����$4W���p����H����
��hiL*�*��acl\BW�%�����u�\��2�����H|]Hdz�p�QGiYh���n����������\=ImRm��{����=�N<�?�����sDYV�X��U��?�sw�BZ�N/���qyc�?�$Ur����O�<U�#����q1h�x8H������ <�]��W1��n5�b��9��U��,��w�����f�]EM�����������Y~�����������w�����������,������������)x�+��E�;����M��������t�����?��/�v���I���s�^��-� 2������$�������w����/������������G��#����Pg�;v���������o���������"������L���~
���������������?������s~�$�Z�s�x����$�S@�.�mH>�(J�C��2�����<�c`�c�I�@������?���>�"���P��H��t��)�Uf^�D�����v��t��D�t���Q}*>a�m�iS��X�y
����l@��H�e7�9�Jk��yS$"����O�<%�����#�O�J��Q�=8�t��9�dHP��3p@�O"��?���+C!���>Y�:���*�B��$)bd���=� �v�J�Z�=D���dWs�������%����g$����	@�.	������B�3Y?U�"���j��T5���L�@�l"�����D`��X��cAp���C�S��q7���*7����d�.��1�"�v����(�)���������Cw~�d��(��|V���N���|�F�C%�W���p��$������o���^�[�Ha���j�����#@gD��L.j��:[p^I��Nt0�e�����dR��mv�v!5�@e�jA^�h���$���h���N"�04r�}�E��-�8D*�L$�
6L'�)���NU�Q�v���'���E��$�o�=7��c��{��p���l���m0�[�_c^|��<�|�p��*v]�L�{�	8(�����Co	(��U�y��d[�_I���/P4�1�/jE���/����/���lL���|���d�_���-���,�Nx�)�Cp�n���;>�'p\�������g"*���W�1�Q$*?��!W�<��zj�����a��U.e�z�d����5��Z�Y�����:g��c,^��od����f���A;�bD F��f�zZ�N��s�,:T�\��a"2�F3��
����&�Z�j[y�2�l8c'�n���J @�}-��B�h�-�e����Y^�R���x
�����M6���Ef��(�j;r8.�(�F ��[�}�1	AY1��{����v���J�l��&��8%k�����[@��>���
]�1���Uso�jv��������&0;�J�E��mM���v��$�&�[Z[{wF���g���BD�s�H��\R�f��V$��s.�m�����%7�9�k��7��x6;�|����
�k@��s{a'����l$G����R�����VJ R��S��n;����@8gZ����G�So�����<q\i<\����8io��d��6'f+���,J��4Q�sL���jg �7Xw�x  ���4!�fw���|dA�Ur�)n�.��]Qe�:-�TV%X[�����+j�$q�[^�*J�_����P��H@�-E��������y�G�2e���}����gc
n�sI��s�\��hs�K^3����H�E�I�� ��Lyl��9�/��1n�����7��F�4Q�YC��xG��	
3$+�A	Yi��}����-&{������s��,��g�&mY��4�/f��i3����Y�����g���y���5w"
���)+��
t���`^QE���*�X���
}-S���gD8WT�3�g�c���"��{:�L���4����^j��zX�l��gz'�K��d/
�F�{��`�^������+����]#���������r�i��*]P�)%��_�}�7�^+@�`?�����c����<,��\= *���Y�L>}��m� -��	�$�x0��,D����[ow��~0,����F���Z���/S5&c1ga�����E�w��p7��0���}�c��u���G��������1����k|)aE	�ZB��X8(���)�-�&K�#����_�l����x���g���k���	%2s�d���N����j���y���E�c�$��LP�'-1�� Ui!"���,EUP��3��.-H�\!�p�{��dr�����Lv]2����gEIVMj��V�V$��4lS�6
jR&b��x�)�6��ZY�����H|Uj"���c�T�gY����u�����P�����dd�� ��	��0mZ��z'���
z �/��������������:��<��C�XK���	��	L��g���������!?��V��n�k�_�>G�b������wp
\v�"��'��|~�D��6P���L���T��1�(��*^��� ��N�����������~b�uFR0K��zW�9`d�uFx�I���m�^Pe�����`e��S��L�XW��+��7>���������\��p�.;K@���������G}��t��]����g�-d���,����������,H�����{����r�Z�������E��IL�2�zET��W[\�._��K��X��N�vS*�5��&h�����$YC�����/�������v�v�{�������E�l�5���g���m�)�;
R0r�n+�}3A�hQ1�`6��V&u���}h�������V�TH1T�����+fX2�r7��A;#dCX�z>��.&�8��LT�u������j�m�IP���'&P���j��}���@e�:�DX��0/�W�V$uf�e��1B��,�:<*Z������='O��v��a�X�$��<^��GrS�H xG\�*s�������2h�9���Yya�/�f�����t"z�r�h���q�\�R�Z��B�+�A�I�I�h��}K��hm%"�r��ep�������%�j�lA�Eh��>p��X���LD���t�:��i4�b������� jYG�Ya���I��-{��0��T�i��m�:P�����
8�&��3�6�K�ej����b����L�>eg��P�����E_vVn�Q�1�$����T��s]��Mq�z���n��`�5����q!!���
Nsj�@���`��
��h62���nK�\ 8K�_�u���p��/I&�� sC�����^�G����a�w}�D��.e "�y�=+J��]�&+�z>�R
z�M�>eg��
���8(zC�D{_��J���V����R�*�����B���E{=��9�'
�����!���e���PG�+	���|��/��^���6R����O�����J��=&�B�t�����b_����������l�/��
��Q�D8�����F��>�
	��	`�n��eE*�O5"�0��:$Q�,\�=l|A����c�����+��	jiKI$�
���s8�e���;���F)� '�_9���r���;l�+���[,�����F����>����������{����zJ�/Z��o^s}T���l(�����]U��n���z&���o�1���un�1������7��c	U;z&*2�tk
����+��u��{�������8��~�V��PTNN���*��Y��nC��Nrx����H�ul����s�9>oeQ*a��c��<b�B�����Q�JD����<�e�S������L������T��W#m�^j`DE�GO���V�Ys�6$����q�\��>������O�Y��0	]gf������frAZfa����*���������
3��~���%
�p�'�[���$+�0=��f/k{A�D���y�j�%�
Kl*��U����]L��������V��5�;���
����t	���pH���c.s�������e8�5����	��8����J�)`���($���@�2�2�e<}a��oH���]���<����6����l6@������!����GTWQ������t�i��'6��u3"t6��*m�t����G��+����&�HE�X�����@�sk"br��Ep���g��N��C�F@=��}\-��X]��u��E��lA*�P��������X�J��W����))v�mH��]�*�u��$��|E���93��\nj�k_p��z������Y�5����7Yc�����^1!}E+��*��=�b|4}4�����u��	��\�=��\�
i;�]PA����M����nQ:�k]K���4N9<hi%QF7xl Z=Dn����Y�:�;���q��4���mr��l�L�����$���$�)�B���-�������[����(���/��w��p>�E#�c�B�����X����"*���bt�!�	,�� ?8�Yk!%��c%^6=8Jt/�7c(^���_k0H�#���e������!XT�����R�jY6&����v�:9l�	�qE������-v�N��L��.r�p,m/��Y��!�:����h��i$���Z�]��Ly^k�H��uB���l�[Y��UF���~���������#���!K����#}���@��6$i��~�&r}]��a�����d~��&{��|H E�����~?��1�8{�W�D�����!� ����x���)����JJ�D�-��H"�!�V����H��h���&����S[�@��ZKS�}�������5�
4'yc6���+
��'�aa�a������^H~A	�e�sAG���J~6����Q�?+��~��M�~a(���aD?eg��W���F~���$�y�o����4�V?9�_���
^���2�E\����`h�>����^��l(T��I����;�L�B]�o�)�������K@{�J�,Q�������������mh���]PP��,��?��DF6���wri@��P�,]����/D*�z���	`1��~{�8��	yWt@~6���8X�����M��3�C'�����$���v�Q�{!a�i��B>�g;��>���h���K.h-[�]�� U8�%����S��N���E]�@��D�^W����X�Y����#*�"$�
�Ns|�d�H(R2��aA	4����6V�N�B��x�PL�������
��eo	R��G�� ����l��J��p�W�k��u��������@%���L�=MO�!c��L�����^��O]�0��C ?+�h1L���B�h��McQ_�0�;M;����.�q�����vp�tC	�����W��&�@�(
�����$��i��s5�y�2,F�b������lHI�"MJ����M��@;	��1h�!���������)���nC�z�������gcQQoV����VW����~g�����������(�
�����
�X�\����w6������!'Z`����J&�f=)"�D4���dk�
�;��r����\
U�]���>��2B��t?�=�Y�����_A��aO�%��1�K�!���J �eV��@~���BS�0w
s����"���.�-:uf�������4�z��pQ��YQ�	�����Ep���<��E�)�r����s���t����`N[����8z�6�'t�����2���t�������|�H�+���$��_�n�4
�yh*�<�^[�(�f���}6��8���, ��������[
o���/k{U����?�����w���S����-���74�Z%��C��	�-��3�����g�������h`���B���:���+��M[���Y�(O���,/�B�st`�^~�tA}�o�p��]1�U����zaR��$����~!w)�+e�9��_)����j�����0�I �������p��W����<�I��)yh���q�9�������l^�U]t��u�iM�\zv��M��c��T�R_�@������OO�!Z.�M������0�$"����>��o��;\	ep�/�tH�~
q�Y<
�1����~'��N����E������H�<�0E���\��|���]#t�'�P_�����an<��F�>`S\f�x~JF6��S���~�vg�}<����?�{}6$�)�+NX���eu�d;�Mg��ET&��i�>"0gpC�X6�I�s�T��~[h���+���� �����P��J����*!���3bC�a��~6���x3�����\2���i��Ht�0�9K�
/�����V���<���s]�E%���j�Y�q�Q/�����N�0�{�_Q���M��
��xs�T���'c�up)���a���=S@e������`�����}6_n(���j�Har��='���+�C�0����)Q�LH5=k\�b�$�R?�����]P+	�nr������E8l��|-*�9�j\G��4�W�R`F��;M��������9�%O���n�ep��aE.�P	Uj=�X6(�`��Y����|���lN���OI�'���o�������������}���>C`o��p�W,�IRG�=���[�E�b6�p��%��Aw�^��u�lP3�.�ek�(+�M���Ld�:��8�LoM-+�S4��H��E
P�4Z|���t�I;���_�eV"r�������%�Q�\��a�JD���=���Z����DT��}w�>����@�D�r�����B�W��@Q��������jk���~v����
�V��<������\
L��U����h?N��%�����(.'���vp_�74�
$����4ua^O�u�M\;��e��=�
�?�mD�$�O|��[RR9�d�!�p���P��M����Y-^�0�j ��	�����E1���Fc�}pG���Q�o�&���\<���lj��>���.DP@d
k�Kl;��T�5�uu�:UI����$�s(m��@���,?�����j�5�	�g#�8�A��aK��n�]&QBH�j>�X�m�@6���u���D�k�^X�Zw��ZkA�6�N%���������yY��-�����t��g���
1	��6�����1���baT�|�+[��W�h���*����L4X`���*I6(�*q��j��e���*6�MH�D}�l���}���tT��Zkne�+����ce"2���&�o�����d��} #h�9R�^x�
�����Tf��{tC���J��f56 k��>�:�ip�_?�	W�@���Yij����a��n����������G��	�g#A�/\�~|z?�49��.�A_���=2�����0,�0~	A��sX7�D
�c2~���3����F��Y�����A>��G����)����NS��[O�Zi�i#% M��J��6 �\<m\�!R�*yv�<����/��������y��&R�s���=oF���d���]�n���|���1H{��b��3B�=��%j���?���$
G^K����Zx�kd�k��d�"�2�s/��
���v!%�7i��P��Be�\.��d�,����l��[�BkN#=[���������%��	A�1���2�G�<B�}v,��O��ssQD�����|\l
<���gGZ���gYxs�
��d?6,��X�+ec��v�Fh|;�#+��y�5�����
C���m>Ur����31)p�|b�]6��+��k����w�����Y	�o���u��������x=<"��^�����hF��"{���a$�3�T�%�y��U�f�"���0~�6�����yr�i���������t�����aWnV���|��j������?z������}bF7�w@��s������k�'��O���ly$����";P$I4e
��[����GS���Y�U����v��1%�W���z���Y3"����eD>��������K����|+�����������0��t��;EM'��#�����������~��1�]����*��=�����F�(��;rpr��	2��mP.+�������T����gG�sR�Y��~#��h ���;>�r����2���y*?��T���r������>3:^�a�Y
+�|�DsO�������dwaJ-���	T����E*����@A�J�_GlJ���3u�Y�_#�Q���cu���KVRdf����#DCWB��sER��H�������ec��OFX}$*}E4�do��"����0�.�4P�������������o�E{��6���&�[Q}x�������FP������euO?;����VI�]��]��i�A��^��\
x�#�2���k5Y���TR5wm�k$,^u]����hJW��Mi��f��eg�r����z�M��h���i��
�����!�����&����������4�u���8�)��`v�!�hB(k�b�A4�+��)'����]��gv��3�hK5�t��lU�,d�4���"�5]��
As�@�-X�I�hj�iC��8�je
����`4�%�������D�� :�O�Z��N�a�U�	hS+��D��Kw^��V���.H+��UU&	�/�������
T&S�k�����g#���
r�o�F���H�����rB������kVgd�]t^�*r�D�������������hQ��0
$���6uA�[��y��=����$�0�����E@�l�v�������`VW$���+��AY��iS��u:�#e�T���~�'H�FuA�:�v���0�	�x�o4���(O�
T�I5��E�Z�_�35���T
�'���'{��K&��y��A���iC��A�d�?^�Z h��>��rMs�����>��������e�[��fO�A�k�h�Dd����qOc��+�Z0�v�5m��Sp�#���N������t��vk������y���w���f�fJG�h����T�L)�mi�m�U�%����+����$�H��lJj&����0	���L(H�����&�����p�.n�X������G�i�����%7S��Vn�2�B��Y��~�����tO+���{`�����.��)��1m��3&5�����eE��rQ�z3�B����f� _LD�r!�>q7]�^�����������������D�ppa�*Ru-�2���6�f^��s}$Y-���k�mt`��26;�D��f��P��[�?;
@s
�C�_0w|a(\�	7n:��������(?�v
1�
	8���0����K����8_?��1M��n.�\��FU/4�BD`E���V��Y�`"R��S.XG�y��A�|����5:K�+��-�
��K�� ��O
����n�a&����:�e	�Xb����|�>S;���D�Ne������a�C�� G{����D`aZ6�;O�\v`1���6���Vt2��}��`��������o������ajQ	���r��^�{��T�j���{�J�!N���?���G���l���r=W�Z�Z�����9sH�j�z�����>}%L?���T�iA�>w��_�7h�@s���G��=�)���dz'wY}�M�iu�^��{<�����
R�,����o*�n'��~�5@	 �h�2SP�L��]�z���*U[��e%QTa����&�I�/��X�(��SN���k�����H�K�JIIH?��I�5KL(���l����"�����6��+�����!y�n�S��K
�E>,��4�q�r5g���3����-���=���H4���4�����P�i���	i*d�Q�F��eanl����d�aP'�k7{��Vh}Zm�;�+��4{�;�������ZOH�s�2��L�:��q�x�6��3��~��o)f3B���/^�`�#�S��:���B����*�H�u{4�_�0��������	���2�^��?���dv���	xm��d�����,��?T��a���}�0YB��K��Q�i�	\��qJ�����,&1Q�e"`��Y��R��	�7O>���\��)��+0�����w��-��lAdz��e�Zf��V�M�|�9;+T�����n#2��
�!��D^������nL)�e9,�
;rRo|�������'2A����q`?�'6$`�>��@1��}F4-5��:KiT[l����!������AR�.H3�!������g�"4/9�O�"�%�})iL���I��y�	�������L�BoTP��D��3����)�Ec+Y2��LP���E���LN�����f��^�Ur���)=�b�6���/j����Ib��LM�����T�K5�R7��2R/�[����"�*��f�M���Y��N����4��X�q��8,_g&���m)���!�R��m������~�A�����D�5�6�:���.���;Xc��v$`���L��KF�`-��Ok��%�=��`�>��g���N����n�"q�����5|�3��CO��@��0/r�@s	?H�?��*-HRN^��lw]��*"���z�kWU (�{�zPC�2�1����Y�D�&Gt��<��'
7-HR.��\�X'�A% '*7[/<��8x"$}�Y�u��bF+�KsS��o4�N|�_�<���5���]9�/D�Q���t8|RI(�O��
��������+.���f��AF_tp2	�J [H��G��16��= ���Rf�L:����Wv���T���)����	���o���$�F�r>��^��:q�w�pxO`S��&��*�e�t�Legf@��#���Oeg��L���g"���<C�����*�d�����U�Y�Z-H@�AGx
MT���P�E�l��Z%�i���U
�R91�� �������CfBR����TP�B}�$GS�2�,�G�K`?z�~����/x��Z�x�� Yr���~�nK�B������
	���w�t���,�S_<���f	jN?�I�$���$�(�H��S�n�����T6���������c"�A�;�6.@Dv�	��'����H�k�O����D���r�
�����]�jo�*��\��P��z����m����<�������.oh�
��'��	
�(2�3��W���
��7���������ZR�Y����j��i�\�����7������>���+0�M���&�� �iW�Q���xB������]�M��;-H7\��e�y�Q��*���W"*���a�x�De�@��aK�X+�����!�%2w��t�W���1��v��UX�����>��=�!�����E�~��b��Eu������>6IQ�G���A�+I2��)(��H�/:^6�&!<�6fKx0q���� �V��9���)%�?���'������#h�X���(�e+=}��L+��F�<)9j/[����
	��#�;���s��l���v�1{c&�Q��$��,�y���H���^���H�u2�VX�)��<���L�WuKNV��uf=;�p�.����aF�Vz�?ay���"8[wD���xZ�C����=�����Z���W�+[FEI��(vW��U��	5��F����3r\��I��
L���)�6����u�70����<���.~V��x�E�E
-a�"���pc"Z�8F�`s-��	O�rNo)�������i)�3�.wZ����r2�����L�����gc
<>/���2���rn��HM���cOL��"�\W��S�������P���mpO����d�"�N��t���
}������4!�O�m��>[v��`N!Ua~;�L�j���Y��\��`/�XP2xl����n#jB���������[P�#8l���1?vU��sds����7������'�dF�7��x�`���� �o$�t|��>�|�i���r#�_E"O	�:�X-��%����/�����H>x�n�������N`�j���"(^��cM�0�\���3hC���q���b�_i��$h~6$rjeM��s�����^
��fk\����p&Z
��j&t�g�j|N��P;���ik�Ma0�
m���vE�r�x��VFfm��#\t,w�����)�}E��wl������=��1�D����rx��������3W �E���X���q~��v��)��F��{�2�����=nu}���{�y�}�r�]p����].�����c��X.��������/�/�<�������g���|A��O�<m������/\��z��kr��X.Xj�z������s�����/��u���U
9^p����<=j4���������{�������x���8�N1�����!���N��C������|�Z��8�x������+��^�_��x�|Q����������br��\��\��;~��w�?����SA����9v�������3�H�Q�{6O��W�A#�[��U#�T���������GVI�c;,����<F���1��04x�y�W\��r��^����q#��9p��"\�#G*�>t��"\�cG,��Z�s��>z��"\qmW�N����x�Z�s�s�CF����<f�+�Z�s�u����>G�<l�+������{������������������������������������������������������������������������e��se���d��sd���c���cV�E~����V<�1��8�7�������������{#��������|�Z���D7f^q�|���+�KLy^�����+����yE~�)O{������
8.F���BY��7#
y�d\�46��+�O�-�d	��gI���S��������c�k�?*���]�yx��gG�k*�����$��"]9%�	�L��!}��y�T�%
�R�lD@��A��5>��-�fYN%�J�%�D�l������Y-B�.�*%Q���y��2 74����~���|��p�s"�+J���p����&+RY������u���C��5��.;���6&��k������I�+���JT@��P
�E���@��a&�#%]"Kr.r�Bh}iA�h��������N�!�=�C[���AI��w�=p��-H5�F��!n\^�H�\!�:���~OT&S�{!��to��F�����Ny�W "�]��D���#����L6�[���Pa2	����P��='��8�6O������(#�M](�����4�.N�(���XNfwYP��O�N/v����b}���Tt����lH���}�%��V����P��u"/�����Y�W�mw�r��#���)���G\�vf��������e=���y�H�H���,�
����X�� �HW/7��g��~��0����5
;�~Ge�
n�%bF��Vg�O^���|v�]�r�B�N�j���Z��%�YF�%�2Q�*tbK��~��=��C���6f��x�<�'�G��n���^|�������tFe��K�{]�lDt����q
������
�'��i��
k�_�m,{�j��#]�&=��=w-�^����#�)=P�=������r�pj���|>p����=�5��V�(�G�]��Z^t#6w���##j��'=|������N���O��\���,n���I�
���8����5��P������u��waUzC����@�&2I�\�]gUy�e>C �<4[	R�d�p(�`�D�}h|b5S�{����%o�i 'Y�[YBIbm'��M�P��0���""5����?�����Z�$_L���n]��:��Wr%:�v���=����[���d��O���>�D�!Q���0��b'w@����9Cj�O���V���:�b�.����S�%�&�����5�8��y\���������z\b��Ox��BR`���A��u��M�X@����O��dk;#��b�h��O�m!��)�KXH�y���������~0��uO�v\���H�V�w��L����_W�1�SKgQ.�w����E���Pn�4@b����
�r����^O~����3���/,��e&��(�'v�/�>���z��I�aFme��T������T�����<��u�-�!T	��������|@����?eg	�)�Xw�#a���rox��mC�g��d��z�+�����}~����
��y�����u��k���Q{�����(0�3��`DP���&J���I@{��(=S{��[�I>��E|}�C����m�8Jg�����y(� D?��[��������=S}��6����y<�e�Ju����>/����q���tNpC4mgq�U�nV��7����Ntr��_S�lD��X4���v�h,`���=^a�%k�a0j�����oA���e4�f�[��E8��SN�<��Vo���[��O&u���	>;�n��:�<����J��OHC_�34e��\|���p!�e��~F��h:2j.z�a|I���^�	����0oX&�~��n1�.���#8���p$�J����Av��y,����B���22e�+��~bu�&�'B����F�`g���?�)e��`��"q�O@�R����De�t�=��5�#�
d���u�=6 ��A��\!�A=�f$�Y��ha�L�|q
�pU`�
�i�E�� �P(�|Hl2SR��Y���:d7*���]�#��?��A[`�yzh���<-��
m��E�U_!H����
$��3���������w��2`��W��37�M�+?:]H�R�����P�i���m���A�k "[��C�k�je�V������k0����E*d��8:��g�u�F�.��#�8���*���j�d���r�3�� ��<��]V+m$[�-�!�}�u
�$��A>��q����W���6�-����;�8#Yq�{�9�&�
���{�$�P�-�&	0W���l���+����g��;]����4�kA�$�?zpg�j���V�$���1*��������<���LI����z��m���WT�`7H�������%v��`%<9LJ���u}���E�0���R��v!E�r	�^����+7H5H�����*���zs����`'Pg��P6�d�8��tN�����}zZ�=\��4^��� �v�������b*q�������3��J�|a(�I|N�)4��;F��n_W���6�3�k�.VF&"�Uq��q��X�������(���a �L&D!��([�q!S�����p\�3�h�:�[���n�fy�@�D��^v������#�f4@Q�q`!���H�
��'�x-++�
��}YW��ARU��1�
��*9oX�T��'�/J�Y����{���~y�o{������_�~	�������Q���H���h3���5r�^V4��6��q���o��O6�����h�7���~7�"Wepx��T��	������������$7np&]w���V��J�������o�[�#Xt;�k���|��3�����E��Y_U��Bu/
2�����}!"#����}}$�i_������S�����������e���
�i�U���f�7�M�N�d�
��v<3Z�h����/J���i�7$5�x$�3��������2������`������b����]t�;�
�����Y��������/(�+����j�W5�Z��'8����]>�Z�{����iW
��l,�G���{3W��^��@�D�2�l��#0�����7�r���;���PI=��^��Jg���C���G�5��_�=�&/
"��K�Ik63j��13I�X+�q����z��C�E������
	������������^9?���������z���V	�|�5���W�U�
	����g�}6����Kn���#V���mP=����*pA��l�Q�9��m��EG�F��&py�{}:x���s2�#R�>��` ��U��FA�������B%h��SbaA�pH��3���hv�LP��EmSt%����`�������$����)�GGIp��2�&���oH*��w��m�{�=Q}&�D����:��!{��<x�����������+��u	%���c)�m�bS/�������s��[��m���3N�F�G��s�o�|w����1�{���@7�6u����-|�7`����F�	����
�s^	�
����{�y��J^~q1e���9�gc
p��Y����}%����$�K�3��Ti�0�P�X/��e`:z�q�����
pe�d�������8��?�a�p?�!������=�������UM�2$$.����~LM����~�����W��s�E�h���D�Os��tG���*����C5���`%o��u�W��"��<���f��I�o����`���R���eW$�}� ��������,��#��^����84�$Y�Uk5�@T��&qW������v=�.�+������7�WV$�a�W"�������|��WV$+�>������+CM�m�l%#�a����8[YQIDg+��'�le!Z8W.�=MV�mx�3�)����{�IK6�1Z�nC0z�J�A*�w+�%+3�2�gG�$W�������[�7h���w�9�w�y%IVX���[�����w�>R��� �8�L�A��T>�8�JE�$�A�!�B��s w�I@D��&I5&l��`��\Z���)����"��We������ ���r�ky@goCjx�Pa����\5���~v�zu����iK��DB|Rw_Q�^FAf���!��H������:v�������+F���Boa
��e��w� ���u��l��� �-7�P
�c�1<c�T�x�L�T�,>� ��J�O�V��-�,;���5������`�x��s��^��s������`��K.�s���,;�3%�V>��z�	?;$��=�R`������4}�=Wy��\Q9���x�9����8v����s��a!�{���i��[�y�-b�}�(����w�3D�\6��1j��f���H`����o������V:�o������|��)�>WX����l,�U_gu�%�X��i^_l�����uF
��������S�����f2_/��h�����"���~�����Fb�����o��m�1IN�7��.
�2r�v��As�t�&�W�\�Xr��o|�� ���/x��#�^��J@�+�c����>��X@�oa���FZ��J�\(;�����
���y{|�;����Y��Z��/h���=���#B��/91��l7D�`�\Y$8�^����<�n����`�k=f8�:u=l���Zq�n+��0k�DW�U3���L	�+J��������m��}V����x;�����������`@��!�4,T}��	H���=2'��?l��;�5B4J��9W�W6�@1�����D-HA;�V�����
�X&�`�C���������mp:<@o�L:g�����:�kj�qo��~_bJ�'��f�w���f����E6�'sOk�%�u[�>\G��qx�IG%_�@��n?��/�����W�xC�MB�^�[5Po�8�bu�F�����|���0�+p2|a��H�y��2z��a>L��v�p��~�p������9m����y������Ep�<������&m� >v�G��2����c�4�'�B{<5y	+`j���r(����9����L�������'���G�����>��G����`�l�Y�!K����It��6��)���]<E��9��2��a�l�$����*����<CG��zq
{���"��o|g&������!�a�X-��Z
t��Tb�h�p��~����o�/����2���X�ay\�E�qV�eO\5���[��9^�[��!j���2J�mX�1�N?�.;�|w>��%�>��+�`�:yMz��y�����wG���l���&�|gX~d!�q]{}�3���v�a�����J�<J_�����PB����&{8�zp�l����r(�/c�p�i[������%�)�\&������������X'[���.�Y�����OI�t�-�P���� &�/�YY��x8�����M�r��,��/�U,��X%�f��U��f����p��@�t����<p��qL9�j�78�%Y��
�}��wY$h���'E����q[F
��d.�����}�mo��h_E�XI�P	WV����Pj�������y�������+$� U'$#mF�o��lV[�f0tcI������u�P���J(3���I����{J *�U�I���������1�����-#��/A��+w��/L�Oe����Ow|�mgJlx�/�'�'��������,=���s$
����z��P#�]o�O�$jgJ����6#���n�\�!��C��	�������qML���6�/[�p;����U��fE���!�(?��=_I7YY&������A����������,PF���sV��{]�����`P�P������n�+7��J�A��/(T���Vy�J0�W|"O���
������'�y���x��Rl����	`��Mu��6m�zEd����,�i��@G��x6�������Ej�H�<�v	(��}�`��� � �/��|������OA��5�TbJ���M�1X���hi"���y�_�3:��	QP����1�|~av�Q�{������TCNoF���m�Vf�~����U53Q���1��D0b_r���)`m<V������������_:���U��I����=p�\���x���d/�����9t�O�`����~'d3g���Xxa�F�������u�2K�A�����i��q"j�?���$����H��t���������i11m��0��2�:6���5n�c��0X�0�g�K�a����`��U�O���Y${�`P~�fL��^z��Y����gk�n��)��9��	���
N���q]��z�c�a���2��"�����_lA<7�%�X�"��9�@�5�0?�����	��j����MCH���#�a6U��Z75�}4����)�	8�vH�l#��'�������=rX���G�,�"�k�D3)���	;�B��O�{��%��/)�v�j�/�mJ�@�nVP���sV�gg%�k>���i�rA(&�����g'C�����K�f�_������B�&����������?���A�_�����1}c+��c�S�N_=����z
�b	Jl�����KW����m�h�y��Lt�S����'�g���m�)����.i`q�s��M�8n���� �k'����iV��>���0��"���!�7�4�g7�� �)=O�K8�4��$��)��sn�������n"��9':�/�P��4'��;���+9�lE���J Rk��2���_~�l��9���'a���s��"����/��������k��^~��y"��t���c�<f9O����a=�r�|~av�K>�M��%�
rzS�/>��I�}9Q�;�����Y	��0N�|�k�.g5B�-nc��WD�k/��Y���z��/=�����d��4�1v�d'Lm������f��bY�lG�U�t(�=(�	�~NFp�}�������;m�c���c��
�>��2g"����,�:M�����#3���w�f�a4�Bft�\'�Py���<�[w��j�pj�4�!���8�fq��X&����mP}>�	@SX��s)��u���{��� Lk�������-�HHH�	�-�p��
���S�W�i{��[^^�tddD�������Q�Oyuo�08&�jd1�M[j�\����&�����>��+
F)����/L	3e�:���__���8

���>O�����k��u���N����&������\���tB��"g����FGx�� ���l�������-�N������,,^��>��a��[A���*�� �f��l���N�B|Y���K����������[��&�&�5�l��bC�A�Z��gV��~��W^�dN��)�����T��d�x�1�\�,��f���}��
jO�)�s�C���c�n�����6��f�-,4��t���y���R��|~a��V��E�J|2�u6����t/g���W�<��
PR���9��t����.~
�@����<�2c��-�k(x2-Si�.��9��<�+��?oX��I���i������c��TB����S�A�!����7�|�9+��%�.4j�$x�|%�W�����rF@.�F
`���m��=����x�$D����7�{���qDd�v���F���	#��o4}�,���B�;�������c�0#��+kFRU��� ?��n,@cJ���R���S��K{���-"a
}��2YmD�;�n�a����w������������x��i���!+������	`���hq��FQc�$QEU��"� �O�v���-(��X�����X�8|V��3���g���N�z����[YM�9��:42��i.5����������n������}%���V��'�<����l���(�!���aj=n������2���-��og�L���I}�5���,���ft�4��C�%Wi\��n��c�b��PR�jL��4|��Y��P3�j�P�%P��|�F�����{���&�<l
�J4��<wF�1b~gJ����O��b�;,zm�jM�}��5���a�"�y�,3�'O'/��A�b�����a�+Z@����b��(�W��C{��������eFB�����e.h���$Y��2q�|���ene��}=�[���A��A�57�B��1��L�i�I$�������*�Y�l�J���3�Q6��.�+��o�N�����[�o7���G�����g�L�����d�R�K�a>��'�l�Ua��&��M�0+���/s�l:�an%=�a>y�C6���f�P����2{���0���0����
���'���|r�un��*Hq3����lsg��;��s�c�����4�M�a�_�#���3���8p���0�	r(h����"�@3!=�$��@c�)8�|�(pnfO�8�X��N�>%i!jf�N��E���w"[�g�;�Gk��,bA%)��y�rh���Jd�����80=1��RSE<�
^���|��<�^�P�T�����9�)�� Q�W�{ry�-�!a�������W�1 �4J}��H�
l��[��pZ~�j=�����	l��!����3�W���2�"N{����r"��"U�����HS|�m��r���u3�8E��)��FV�U#�vH��V��`����er�2q>7�`d!��&FYo��g�!`�%B�dZR��Uh�B@'��p��{�SX�ZR��A���g���
~E,�UR���_�-�<�Jr<���vd!m������=�6f���U�s����
�"L�`��2a��Y���s�lxs��Y�'�Ms��}����<�S�qn<�|j�,+�m�({���Y0�{����V	��GZ�.��!<��e�&���~R���es�
�e��Ac�mF��6V�m��{���s1oV�?����">����Yg���%��L��~����mkE��eE�*��SM�Q����B\��ozX���15\�+:5^qY�F�[=N�f~,gG�k8���z[#�_X~��W��t�N_6�Pz�������,�_ ^�3;�	���	�H�i��U`�����P;Z*�r>o���A4"*1�Cs��Ts����Y.:�HD}Y������m�n�7���Qy�.���K\�c.&��G�2+�% Kl����U���'�h
;�����b������f��'G^���fx'�����7�7Z����-�
��^nu��d�����-j��q@d���Q~��enB�������g�

+h������B;�����A��]`T���V�:����7�D}����1�^:k*���2����+�
�.��~�S��m$�~�m��,
*d����;n�+F���p6�I465&���`��xc+����i�t�:l�*��Q���x�\E_iLa��]�������|���o����dC`�o�+
+dr<��
*�^�	�Ng��o��
�x'T�-����\}mi���:1S����7����9iuc?���4ry���������5(g�_Wa���.�+/���+-��Dm��j-C�^�(3S��x��j6��.���f���x�J���\�yRA��
A4f,��[ed��R�	�fK�]Pl�I���5��/����}�	yb�X&�
-qN��ce_����$\V����\��aJmU��O�	AwupR��#H[��g��&7������>��^���g��2��d������jng�������6����n??8�h(�x��0X�q�f��[�m>C��l�
����m1)'Ow��Di�N�tQ����Z�Y$>�j������t��,z���>����B��]�w��sL�����2=�W�m����8i��8}w�3�|zN��>X��?����7:Ms9�|��3��ssl�5X�����_�B�]��+r����6������<������;���\i��1z��}	6'��q��6���Z-:a����l#��w����eN.ZC>�ski�x'�qR'���z����q��
��
M��P9_���L�
��
��|���O{�#E���Ob��A�s~n����)�s>�}������y<�}���{��s=��z��]���`�?71NeE�4�A��T�^�&��^��Q���9(��5'�����)N���o��14�w��]���2~��w5��
�/�������V��%�������o��\��������E/��~.8>�����7�����19�����_�������q~���������\|���1����I����i�����=����B���v��M�a�JY��������~lH�:-]%(��>��2=���w��d���e�}�?}/�]�i~�����M=W��G�%�������!-pG���Q�V������ND���vO&p��V��h����*%*|���m������U��!/��������BD�_d����?b����R�8���>��������!��a72p�O�2���g�����jnCU�$K�|�$�����J�Hr%� ����xC9�������B��]���"�������-�S }��N��v���d9��
�lIt������F���f��OI����|�Y;�f55���������17nzy!�F��#�����9�}a���PQ�D����={��$�m��j�����h}�]���N~'�x�����9�1}���t�f�N�=9���<,�������t���F��p`��?'w�8��l����P	\�}:)��DB.���~'�i�!����]<�>-.��*���3��*�0�U�^����Qe������}�������Z��O�c�_H�������p�������D��$]��!�|�7Sp4y���hb��R�a���H�JY�o��t�d,�yC'�pN������@�)�]����hZ��G����-=�vIw�������z2��
��M�K��,��#z��������f�xX�@V�������g2Z9�-�(�<��2Q��h-�S�\����4����>q�a�4���P&=R>U2���$�M��)�u����K3~��tt����'��(D����C���:��$�8K��9�a><N���7�q���S����#<G-�i�
��$Z�-��{���Dd0!n:-�h#�����<�kl���yb~��+I����Y|�����[��"��`�j;R�6�(�F �uX��~��IY���������)���������F8���h���et
$���rX����l�$ZP�^T����nw��r�h_Z-(���d�����������u��&������"4���bh!#�\	�)��>��x����-�\.[��@_������������id�5mFE�k@��3�����l�X��h�����$9�p�^)�H�&����	[)hJ�1S#"c{L&8������DKr�~��!�ZX��T>g�q�`f	PI�)����?�y�a�oY�_���-Yw���O�|�
4�������x���U��.n�v�C�HN�|�5
�V%�}
2��GW�<]{���N4�(�v�o
�r��#'m���A��c�_\�#~�����k�������)s����G��L�u�C1�f���:0o�����ux�e������m�:C�����Rp�*���3$	�A	96S_�Q\�F����#6hRD�&\L�����3G5 "
)�i}n30/�B�
�A�9���:y1�����\G�X�����,�@7��q�/$���[�
V����e��2�c����gG���J�q^v�y�	����~%��%�h�
%`��N��a�����[<~z(o���Q�C�r+�,��q���u{��#���;fF
����|����ECJLU�{��f�������Is���E��eK��D�3!t�p��d^��<�`�{%!�
���l���oo���s��������	�����"ZK�d���ej�$A��]�{�C({�"�����O��a"l��,z��L"�z�Q#"�sk�/�������
����2�b�`��NL��q4��}���Q��������]�6s0B�����	Kf�7�d3^���h�8.�
��1��&p�_�� �K��lG�b��w�T�FDv7��
�g}x|2�
��I�#�;��O�2Ya�f�*�M�\H��Q�E�,KZ���HrR-�':
hR#b�������I#���P$>+�����f*����~d���y#[�����M}*�.u$?�`����M
	8��z�
���g����,c3����54%[�Q������U"��V��1OX�E\u�����rw����L����-�%��x$�/2�a��N���WdQ�� ��w�W"�i_���/2�	����p�)���$v��x{����������o���a[J���h'�_W$����7y��&6!���	�2��1�lvC���I���<�1]�D�:��f���2�+}���Pu��N�_/oV�v���Anf;�������n��+�}���6d���,�������2;��l\bUt�
]�.[�UK
F'-,bu1e�D��;�������g��w.����mJ�����S��&�����)�M��6�N�H�gF�k�����Yl�&C��i�q��Av$�=������Q����nXa0�[	JG���*�&���d>k�zV�9|@�I3[�h��@��h%�,�d���c����o��	������u���qL����%��+���a�^g&I���-�U����*�����NK�1m
�urL��������l��2�4S���>+�#��������	�� ���}�����y�l�{rS�L �O��Z��������@*��>���������5��NT�!�1�n���ZIDu���L>[�tcG*��]4���6���wI��%v"�M��Z�-��(_"���6�a�(mt�w�[.��n\%"���4
}4^���B�`">�&��c^�������tC�cY����N�Q�?��zly(���`���W�����B	L*�MS#���!�13�e��gy3hM����7��6���H�}�w
H��B
ll�4�8���KA�|��u
�����/5�3������
6sj����������F#�W�����Yz�E?���F��d�$�\P'�����IG��!Q���e�6�_)@D�s{�(�k����|3�;��c��gy�����x��M�!��D[�����
v��r�R�S2Y*v��;RUS�+j�on<��R�&��(������ud��{����@�?�C�����U-�����7����YR	2�gG�h��Vk	e
E��
����G��j����q	
���7�s3=X�6��a�8:�k�*
��KG*�O�Fd�>��C���9q
��cB���	�cZT�r�c�t�%%�0ld��0���n��3�H^�S�j�,���\YaV�F����%F�l��ED�A`���9�>�����y�~/}�Q�~�RQ�#�G��m(��uZ&�����f����^���t��9�X�c���7�BS�}��;3��
�9��*�d�����<}^�?�7W�w���%����}q�?��N���*��,\s��k�AV/���L���<����������*�i
�c[^��K#!����P�j#"?�MD�<�a|+�tu$��M�jc��T�b��W�����GO����8Xs�:��d����xM}�%�;�O���yb��
�p�`tE��T��f�!��0����� ���"������n����`��x���p�'�Dd$k��>0=�z3�R��K8�K�Ox��/�z�nUeu����l��a��?.�[W������|"����0w��w���h���M�����G�(g�����)I+:!���<�Sb1��I"�^���;$�Qg�p��"Ob����lZPG�
�1�
n�z���c��k��������b)�1%��:~��}+��V���� ��z�*!�K���>:R�F�FKe�l=QE��m��<�~�����L�X�uK����?������X�L�	�_�% �U�N0	�W���[�g�e[��<\03<g������Qm����S����.%�X���}��5r[�Z�AhI�����^����M�_���Y�y��Z���:rEy�| ���U�kT�:={@G�R���j��x����sm�D�����S+P0��i�V�;�D;I
h	V.rC�A�b@38����c=���0%�=�N�2�e�����Xt�YJ�fn_���-��*�rjz�b�?^��1���lW7��������t�16�!}iC	pD^��&�C�J
���C������Z
90F������m��(� M����i��KtX4�q�I��p�����vt �����bJ��7��>8�6���Sr����*ZmP1}�1��K>N�J'�N_����E��6��or����T���8�g�6~��;#�
�����e����"s�w�q���#�//_f�����v��rk��8d9�#�
���������'OG�v�B��F}~��f�X������}J����$k^!���7IdQ�)P��Zx����I����3��_`��kGN�w�1������dI`��}��N�@V���PX1A*�?�Y G.�	��Z������� �>_Ax��}k����kr��-�+�t�_�3	5�,�y!����R�UpC���}����6+�~�"���u{�������|nS����5 ����f�2�*#��.
6)�VC�g��%��vo��$d(���e��-�JB��zw��=�Z��w&���^^(UT�$�������Q�������Yt
��E�n����`K���2��2�bj��bjo��z����6TT�F�K����#��k�7�B���:��mh	V.:F���(
�������������N����|�H��9����?�v9D�[��.�+e�t$gY�u�k��$��L��BR�sE���a�Pt;�����\����!
�e��-q;��8	�Z���G6df7k �:���N�|0/�	�.���V���H$Z�EH�������-�����1�X��P{V����@�~�:xX��]1���T-\�V���=M&ZmV��W4XV0�v?Vi�v��5���ub�7�"�I���'"bD�5���|��b�BO�QQwi�C'MLf���w'�-Sf����sr����X����9�����[���G�x�q�n��H��
�u$fP�}�o�@���<�s
�������A��|0���}q#hHI9Wq�+�Z|�7������=�s�d��k�2��i��^(d��m�~���>/�u���	,����i��K�U���7�z?/�4��#����NW���f�����|�����r��o@f���z�����_�z����$y�p������d ��yxk�uO�}��<�"�����*lVi6}���vaK�.r��J �J7����<��'���P���1���� ��_]}�h���Q��8�j�9�����
�
������2�,�-7	G@����EO��[��iw�
������s��\�'4�cr��mk����8��B>�����e��b�%drKu�i(���d;A�p�^�Q�����`!1��8���8�n[}3��D��w���OWa����
��a�C����f��P`jU��Ob�>�||)}�����T7�,��V^Q��(��ul���D���5��U��\��F�2���
�W6��7�S}8O�����0�2�^���"_;��`�^��Jy[L�Nt������h������o%��\� �[]}$"]��{s��&�p��\�dJ�.�h�b���5��`b"h:�fw�U��'�E6���9���?z��:&=���?���""�;L>=���]2L��t����&�ED�*����WA��K,�E��~
�0��yL#.�i����6���tQnV�j�J&���`��f���^�1��C�:�l6��
O3���x�����Mq�
�88�@H���J�����a�`B2c�}���>N�Cz!L"��7�	��n��`G�t�bDK�����@�s_(��''�5�L���y����h	V~#�v�C
����P�=�T)@��3�������E�}fcOw!Y�%����v��D��mI`X�B)�M
�
W�B8|��1��h*�P>VsoK16�e���U��t<fu��%-��o�;`j�"�=N>��S�S�vN%Y�v�0i#�d���FP��_�}�9�w\�B����v�T�s���H'�d��X�Z��������3����Q�ww�R?�r>���_Ir�t
Z���O�v��l<`��f���DTfw��:����>{V�3�,�f�u��M��c�7�K����]m�e,`Oq���R%��L2�
�������e_-y//������$����K��|u���	_j���J�@�3i�Z���{^��|^��6>��;~x@�]~���=�?2NF���@K�r��&���K��|�����%������0����!�n���1
�M������N:i���	���0��|���6T��;���%�Q�����a��a���m�J"����>���W��� B�=��V���w��Q�C	?�P����-��b���P�g�y�ps�Q:Jk;��R?�W�nn��~6��c�h^����<�`7����{��PLHJ��L'���=�HG�����X�E�D��O��#d��#�P��/���+�j�J`�`�T���JR]V�W7��5�@����P�A�h��*�VOi�Yc���GY�:��Q�����7
��]7��]tD���(-7�(`�����4�J�!I���um��-Zx5����~!�}
�i�5�	��E8�$#G���2+Q���~y�K�U���as�|���q�L�����������;������MM8=�ol:z�t��n
Q���(HCv]�'�'D���l%���Rl�0��O����,��9?_	F���������C�DL���Y%��K���+KV�Z$�������BF�
�=)�cz^��
'��7`5�X���o���*���������>6������c��dO-z�%K(�K;N�jB���U_h���:iiUcs�������#L��x��!']��=����{{}����C�C���yy�6�w;z'��I�������7ogM6���~��|`�:�����"t�0��c� l���`*QCy�����������E��U���]�G*���}eO�Mw�51-�m��	�[Odo�G0Y���rP�^d:u��Y"����������t���,��6-�������n�9��7�i�n������W��n��1��y��w$�VP��C��$��|�Pc��>��|*�a:DK�r����}w����\I[�R�,�<l(��TY
Bu�p��U|0����K���#o���nm��P���0(��6�����H��T}�7J�o���B�X\�Q������|\,
�������
�)=�����-�^���^(Y�lX7g�K��vo�����H#��4��M���J]�M���n���X	��"����b������w7���w����hk����W'��E�<��!n�5s��R�u��������@�V�F37���D,�#A���%_�n����i�)�*�`���z�����m\��SW�.oN���|Rv��f��X%�N.qH�z�{����������m���}���`�V��rV��*�q)���-����m�W��_Z�Ud�����Iy}�xQ��5����W�lV�z%l�k~��	�$���k^	�������,a�������������_�~���[������`~�����-d���c��
���c�W[�b�r�r����
��
OB=�m�Wh��7r��{����3���r�����6��/p.�1�y#����Sk�8D�#:�*@b	���(��Sd*���P��hZ3�^;VT����s�5q"+��VU�7JK�"�����f�nI�����z0�56(���dQ��w�;\� `C:�JD��3gf�]�*T��YI���
���g���Wl���Q�w�'�(@�B�]^'��"(���H�E�}f����?�(�T�v�|���z����g��;��7�_N���2�$�+a(/^K�t�
�����Q���!+�i������6�&��>�`{�[T����|����6�J��N~GO��7�O����|�
�����'�Sp��n����d��P+Z����H2]��5x�U��
9+����mLR��e�8��C��Dd=X;���
mH������+_���BT����\�hG�m���=��zt�
����a,�!'Z4]Z���/g�����y����D�
?d1��K�eeY5hB����`��cK#!���s��g%"������JT�gCR+�Zlc���'q5��)��-���6���Q��������v$@�u7�lnC!����@��H���C�������H�a-V�EP*/_������6������r�4��JD���Pk�~�X���yZfS���U��Kf��F�h2ljSwIS��K��v��M�,���E�Z:�\`��`^�dQ;���i.��6��v4e���������0��L�1�����Ymh2f�KM�f����^<� �R�dXy���H��>/�h��l�w���62��*���sN*9��q�������1�4Ca\�e=pk6�
�up�m�,���imDk%;�����������8K�-�����5PaZqH1�
M��6����GM}:0���	�+�j��0�����[��
M.?�����S��|���
t�6U�%��������z���V �i>�fz1�O�y#�&37���6u����lj�b�{�V����(i
�'ls�,�Q6$�G���
��1��""3�4�T��'�~C�xRWMN�[9;�	���k����h�vsG��o�m!�	x����E2K�1/\1m�S�?�a<3�t$@�����W���%NS�%Y��H��B�<z��!>��4"��YU��A����0 �/"2;��!���_�Z������s�@�J-��~��</�J��6�6�������%�o�=�u���#������3��l>����`]HCV.�i��v�h�
���E<,����	XO+�8��2�0"�C#x��o������U���u�<\a2��>=�`��5|���W�/{�<Sp�]�Qd^��	���eh�Pz~sKS``�$7���g�\13�M�	����C�."���L)�E7Z4���5=��CQ���s���c_DCrrI�Z�i�S�<77q���Y�O�qs�G�s�"\,d�k�1�p|'c�p�+Qm��Wnl�`��=���U�{�z�>�����qN�,P[���:�����/�ISao��4��K����_���#�E^����IZ{Wb4��4�<G$������w��f|7W��e���h� ��Y~7���$�����L��e��z�����|������t����}�!����1f-�m�LG 3*�n<e��������^���_��o���,��
��6$`�nLli�����Sl���h~!��o|���,���&E��6W�J�tH��S!0x2`U%�-��
!����D+�'v���G*����|�=�L'��_���qX��>������QCq��~-���eV]{T�����Lv�����0�,��~����M��E*������
I�_l"X��L���!�[(q�,���:������fm�@?�!`R��P���O��2M����|0jr����g���
~��n
�����O��|�cj�����G��]��|�H��C�h��DG�i�VeF�J�\�q	�w�����H�PG����_*H�o�O��=�iHg[lr�����gH��F��72Qy�~cO�w0\�l�
>�NAx��I}~8��h��{/�8�e�.��]�yo�c��B��Q�E�(�|Q��$�^T���an|���(�j{��C������O�hH@�<�%��8���c��U^G�
������Y[u_�&X�2��j�����$�=�85�Q��W7����!
>z"�V��Uz3����M9h����=,#O~�Lk��`�������=M1�i�P�H=�b��{�-]$�pV��TTd_��(���\6�b:��8"6�y�����<l�����P���m��e�nH�r���7��������1���S���U�����!z<���9*������9���|M������J� �7�����2ru�[����<��7+}����i#�V����*8W �����~v���+�%J��F~$s�n�{�����gr`���F$�zu�����*-o&i��Q�3��������<Q� :0��������y~��40���<�-��;�&��nV���\�&��
5I��=:@�Y���������s0�pUe������
���I!�w5�n��������$�{��j�RLVaC��v��h�R�4��Z��'E+L����$����,�����p����k�H}���O��Y/�TO�m�����w,f�DA }�o#��r	���M#5��V*�R'k�T'����QGr���}[#	}jH�^�U�(���6����W���/�n���l��*+*���I�-I��"*�ec*�M
	8O4hRmp��T�X����u�X�vL�����DP)�C���Be��:��j�)�Zl�}��c(��I���J���\N���+E���=j��X�<�b}D[���<�m�Z�r�?_����+��'��:�{3Mo�93�O��yd�#M��qa��/��*T0�e*���c��S�&Sp���~�H�����Kq����
	X�,���i^9��4:(GV���������L����/(g���X���Twg�����T����)|q������
@��=���}!M����+u���}u�)�_������/:b��_��%�y���s�T��Y���cJ�����t��<��lX�&o�t/�_�����k��GJoi��x"�P����v�p����*N�OkD�"?U���^wfV
��Ifv�;��n0J�1��a#�iao��v�k�R��	�BNG�1`��F����n����[-#n"�������9�OF�1u�����VN������%.�~�p�\�����A�\O6}����}^L��u������k-02s�D|��#��{!�n���0y���K�HIF��;���5���NW!��?���������T5��$jKHR�k�]_Zy{a��g]s)o�Q���p������(���������2�i��r0�
I�Y%�R=9��	�OG(�]m�3v���O[Ki�	�}
=Z|��x���JF��5Kr��>o���O!#"�}�l�������L�=�k	-$O��ff�`���JC*{�`��+R�$��t�\�bf�,����yPU�V�����v��w}k���qV�l��^�=v�9ae-�X���S�R�1�[O	�E`�.��?e^��-m�v���t
g��F��6 a��]z#�����.�J�B����a�z��#]�V�i��})oh�y��o[Z`
����s)���dE�S�K�������~3��*���_F��|�Y&;S���0���
�x�7h1��.�e&�L����S�4��Hw��>(�s��H'x��{56�k�H~�6!���m��5��F����XR�L�'����W���i�����X�}�k�������/v'4�8���fG���!��3�vV���B�[����I��� ���&���_�*��/�%����2��n�I���7�1%>u����Q�}-#�'�t3��s�h���5�<$l��Q> _�
�v������ch[`}���D~�i3�.&K��W�H�����7������e�MF���!��,�v>�O���pA#lJ�r��������Al�Qk�#��h����\�}i�\��i��g���L�
k���y;$gD�X'����A���(�;��-���`Z��/���������8�~�gc��>~��P�_y\��F�grO�N�O6��rh������:u����^����<V�����T�	� {�F.�R��l�r\�����#\��n)��1���2�B
|�����1XD��U������;�����gc���������?�Dc�6~A?`��5�.�'�=|cJ�#n�������}Nb��fc�c;�>�|�Jp.� �����P���
e?��#f������R3@,�j����f`dg��}�v����
��w6���86zyC<�u�'�<${��
[�5�������>p�V6�@W�.k�[,��1�| |K��1[����C�L�c���fP��}�hn�� �2��0Y[�w	��0Eg��i�}N�^gJ�nk�0���W��63�3��N� ���;g��j��wS.�}tq�����
`���Na�T�u7�X�tZ�*h�n����M�kk!*o����`����[~�=2��q6eu��)[���=/#�����;�#!�����L�$�y�u��6�ao��d��pe���S�<khq��g�h��\���/��>�`�d
�E�H����~3B��T��]�&������M��Wr;���^R��b��)U��/��h=������5pRGl�f���,�;���S�H%�B������e�~��h�+���K�b��6��7r�W��c�������B�<�I�[��-�K!������^l�r��
l��}��I��/3�����R
��
�����f���<����{k+�������:���v&���x�i�?j5��������a��8t�|��Q:�c��{�xoo�|���������||��1������UL��|�b��g]��~�%?>���q���U>W�x������������ ������?^��k��*�1}|�����Q*b�x�J�(_x�'���[�bu�}
)>E�i�R|��g��b�\��CL���	�s��sl���!��k��^���o����Y>��>��(��k��^�]����!���Z>���Z���?j�G/�O�4����a���\ f+R4bjMWm�Wk�[1p�����@L���s����,v�����V�z�Z�W��������y'Q��\x��o�f�
1�������+���[�+��y��+�����+����+���[�+�����+�����+���^?���k��������a��������k�|m�_����;������o��b���Q��������G���bM���q4�������G���^M��wq4}�������G���ZM��gq4=�������G���VM��Wq4��N�����G���RM��Gq4��.D8v��	�Ca�fc�}Z<��P����H��{��P����'��?���z��Z����x����G�:��Z����x������
�(�������^~?~p��}"q��Bt����#�LB���
?w�9���E��E�|b,*��v�yp8>�e�_� SJ���T��I!�K�D���|5Q�����:��&��U>�'�����$.�Se���|�n�DP(}9:h��j`�,��4NN�� �yT��Y��$�|� H����"`��C���I\����Iq����ml$��M�RY��'��T�)�N�������1���H�Wh����q���"�]�$.@U`�t�L���+��?=���"��s{r/��F���=Sd�'�[�nhp�����������X�t���4f��#���d�}w+NK�O-�x��}���^M�R_<]��������7%���u�,}�:��:q�]qxa�wj,����X��y`'����L",�z��f�����.���u6!IK���C6��$�b�������F������-�K��p8����5���$����S�~"��\�����'�-
�9����j��SY���n�s�|��������
���5bFW�(��D�Q�gL�H�1��������D��sw{)������V�����Z��(�lv����lh

�"#�[�-��� {����d_�i�]�C�{�@g����%��!�������&dWQ��O�Q���HD�0D��v����'����_:
:��2�|v�~�j���6�+�74��O�wf�`��N��~��P���*��Y���qL�g�Z}�_Z�&o;��H���/�O�wvGdQ�T�D������*J"�z3!���Y,�`F����"+S{P��0S��tI�j~�@3Y���-�y�-���0;<��e��T�D����������"�2&�:��\:��t�Eu�p������<a�N�����,I��z��*�E���t����1�%X���RK�����y�a�����O���d�R�w���T	��t ����"��<m���

�=6p����H����N�2�`�:	���f]�]�,���U��e��������ra}���lj�w��2I��|z��AO]{e�������c�:`�_/�o��������[
�i+?>��;H����|�T��[W;�'���iGt�dO�~���L��ceg����G�@d�/{���w��[>��CEhNC1�1�<p�BD��s-H�n*U����@��$�p�>�Y,�2d����I<�C��P4rQ�����m^]���z��wRu�ND���i"�'�����Od~�
��Do������
&^��9��w2z��~!�+i�f��uDX�k(_�;��9� 
��FQ��k�:<\1����z;�F�Px;
��;:� ����:�t=2�e�EV�?j�h�\@C��$������nJ���wZ9v���(3w�H�Fc�?�,����'��0��xut�nn�2�!*����e+��<�`q�Kc<._�k������ .��
��*zq]��]���@O
4�O">0I�K�&k7<]<�.��y �x����W'K=�h��O�>���.C�;)���}A����l���n-�.�?��v�����B��� {�(dp�Yd4#?U��t���=!_�r���E��,	�l�rK��I=6�\�`z�SND����uFlL��W���w�+O
���
����skP'Y�z�bm���R���Z��jm<����A����`�L�<�a�������~���p�o��s��d1�c�E	T�j7�1YY:�s������L�t@G������=����+�o��P���	d	�/�->F�p����79�����^"��B�z���Q%���%���+pq�5C�A����j�����H�&���u\~��4^@'C��U�M8�>o�P���������6k���?K���Um����]"s��������3|���Y�=������R���Pt-�]
���Zw������
��/��o,�`��x�Y�:gb��E7�&��`�<P�q��t9����	�S��|�B.S��"�F��`I>���Q��z\s!�<��.K��P�R��G������ji�t����h+�6t)�v���n����e��]��5�dA@��r��7i0q�iU���L|H�@q�a��z�������e��<p&D����C�1i;�L�U������:C#{�
�z0�y1}�4r����C�X�U{�?_Y��/��6������JX�#�%�.�x�q'��$�90�&/x�
��%8t�BE69W�It.��Ed�R1���"c����[����
q�:��$!cP�\�������"k�����2j�l!^�����J#�n�:p������e��{n��7��L�s=�%�~����DV�\���'T�,�l@��
�M#�����d	t�D"�.U��c���(K���w���f�Ql����Z^��IG'O���C�8j�@����4�F�u��Nl�T�������)$>
,��&[������E��I��80�s0�����*_�R�R�^���������"b�o'���f~��I��Z8��@�H(�&�tS��K�V����������= >�}{@|�����I����PbjO�/m�i��d��e-n�_H�E��wb������zZd�O����!�1�n�Y����/�9�,����7�V�@��OGZ�beQA�0��O������6u"���m��/�M����J����"��(��B!�V+p;�Sy'���b}��5"U��$��W��K�E^����}a�_H��rf�U���f�_H_���V��jBY�������x7���`�8j�10�BRnn��{���E�=��cv��/h�0���S��7 "m?s�NKw��������)Ws�$��y���8����M�j.;�7�C!�#!�����K��
�����
`�V��%j~!�u�	�;2�`�����'��]�H��n�#y`��-�p����A�nD7�y�6�f.��/��Qk����e�^����w3j�dS%E�����
�-�����=�;;%��	�ZL�E����|�M�jN�2g:���Yz�n���OU�G]�!"�6��B��%���-{pg�������Kc+�;�c�T��$[�3@:�v�r�e���m|���3���g�qTg�e��N�x�H\�I�G��6��������<#k��U$�JAQ	h������|�w7s����p�����+����SmJ���I@���Ofz����B��B��>K��1��X�)N�fOV�T�u~8�Y=!���g��E��eg ���\���'W���gs����E����U4T-�X�*E�+V0=�������w�>o�y
�n��F�1��s;�H5�����7n^�z[^L��<|69�d����_��\%������Ll	��}�_Xz!
p���<��d�_N�^L,��S:L���@6W`�+�����S*�8����sw���L]���cf7w5����YO�������c ~���"�_7������>�u��o�s�V]�#� q���h{��4��xnn`����q�d��t$2�st�1��6�+]��`��d�l��y:��<�6�_x���|'�~����9�t~�������7w�����I����E�9�C^]�'iD�i��]%� ��o�*�7��[�	�����������p��^A�tV������+	�l��s�9�p����$p�)���p���<��3`���R�F+r����h�-�+�^�^��9�\^����K�7������u�F�$�F���VF���y��m����L|\��w	p����g�9G�*��/��}��GF`�w	�.C�M��CX%�A<��G���H�u�T*��L�u�q��;r��D�`H����K�!@a�C3�vM�W.�Rd8�OGI�A����b��y�W'��Kcx	8���
���H�d?�X����T����O�e�>���������(���{�^#R2�z�����i�#m�3��y�1������;��j��+NACx�hsJ�7Jcxd1�'���h�&�g�s�kh���A��������������������'��=���r?���w�������yp�,��	�Ym�����$Z���m��1/��K��X��.���9Zu,;y���D��[���1���w�n������f���^h?m����'���&*�9�S�_����A�^��|!nL���x�������e���K!\��_���e�
Yw�V^H�������,��%�^�{�{�Br��W�NW���o��1
����]�;�jc���`�2���*@�n��N�xG�q����{�/p�D��.�*����E�P����YF�`��G���h���\+	��TF�_H�{0:~ d���`x'�u���Px���d	�/��r��'�T���R�m���
���
^�[Y�Loc�P��(��F�������]w�>o�_�{`�F�����cF{=���U�d�C�r[��bc������l�-���>�q��2pW��^%Z��w��l���A��c_��6����*�p�<�
�I��d���W�U�Bk����A%�����
o^�H��|P��-���U{�-�s��9d��v�(�^;v�d���F��x�Z�m�������BaO���CC�` -�/4��
��q
�9u#���6'`#���NO��������m�Vk��5�L�0\�Z����2=�����TC�1���pX�����\B���������.��S���"R�����������B�u��@��N��������H�������~��[b��u���������MS��������G���=���e�2�'��?/�d$�`upw�~�)d����������7��v>�������`c�6M����%pc�Xc�Y�_H@X=Y����b�"��7$�/��u������=�X%�u��u��De�������L���b
|��c��CG������V�/_A�K��@������C8M�c��'��b�E%(�	�7h��\w	Xmi��N������b�P�K�[�*Y2���(�m7:B���N��Z�����t�X����_�wRh
�,
l2V�5����,���_�Pq����2�K���^�px����W�)�!��Kh����#��Y��X�"9��m��lp��@F��������
��L����R�m��Yi�Q�=���76;����_�Qc�-�2��y���xA��B?���ux�[��P�#�1�	6z��KeJ�CT/��
6)�������1�
�>2��i���#�9���6YHW��g���/`�\�_������<[k��@/��@.sHuhy39��^�Y������FD�
4lh������Jp��b�X��n3����<�1���9O14����y�x^��6!`S@
��|G0hw,A�#�BR�]M$�y�t /�����wg����,���hj�_YiXuh|i�E�������wH@Do��	�u�F������
cu(Y�%>C��SZ-U��1��v,�����^h���R���q�0����WqK���?DK�%�n���f�*�����]�gy1�S��Kwk�����:��ob�`�=#=���Z�
��~hc
v�����PGKRa�j�3������<��>75�?F��t��i��<}bD;����5~\+��dv�ND�P��@x\\il��F`�������#��0<&"�����H�����.�7=���F���a�g�eZ�OGI<E�k6������<�fA������>o$@[Y��':�0���/��T3�������a�'N�-�q>��<X�i��j��=d������:p`�����
�
��2��<,�pg(���'V�B����R���I���y���_��S'pbP�O��}P����B�E����Q_mE���W"2��k,�w��6������7:!�����(.Y��P<',���+Y��C��AT��8	���
 ��L�6�8�/B�����W�v�7sf������LP�������aR�g��P��I�+F�?/��C8r`O1��W��� ��F�N���BQ�+OX���0|+���&��0�����hJ�\����]���D��x7�����jh\��up�w�(�1��oD�a�x c��\��7�%��!��e\�_�8�ET"�z�R�:\��a*	yP[n����	�,������!���w5$������a�5�iC��Nkw���f��
��4��@���_:	t	@K����\�tF�G����>��%���C�v�����*��*dQ@���\���vZTG0�stN.�j:;�����h\��8���g[�}-��E��N����~(����@�c�.�|d�#���V�'"����HF2p
�+:������57���O5Iy����c���?n�$��La)�nn��n����;�����YG��\�������7M�<����9d�g1�y#2����j-��C�9�-��-��P�vq��s��Xpq�0d}����]q����S	-<�������|�kN�RT�(^���$�	�*��F
���Y~��U�T0��=,5~�D�,���b	"\���x!p�|<�Z����E�g�=&E��\x��r�_�P�>���oM/�c��T#����7�����}�����Iav�/�BU�V���x�UG"�BkM��x�W\B2S��F2,z�=F>odQ����i*���Bd��a�
Jv\�$�+l�l�F%��x�(���7��!dC�%�����-��epr����6�����n��������b��l}Y����n9��3�A��������+D,�� b(��]5�m�yJ�@�q^T6�c�.^��1$���j�O���4l��F).������F��}l��#-�/����A444��V��� ��#|�Fc
� 6����a���aAW6��h������e�2��:1�oK��dv�z�uyK73U���]0��:y,>�b.��`��p��zVs�Sxq��R��Y~%���U>�|4�����`?sy�f2���|7RD������%v��.��&U���Y��SgT>����;b����3�o>|��������n���}&?1�/F��"��hi��|����t�:cA�X��	�>�p���]1#�#��i&zFL�����	h=��'R)�W��2��o��Z����_���BOg���<h�y-x���	�dp�+l�\�MCQ�����"�=�#���?�{P�v��K6��U;J��Cs�:N�L�K�#M=��LM]����F�!/�6�,���2Qox�"���k�&-�%����S�+|K!R�y)"����G��+Q\m��sLag	#p�TH����dp����Hm��� {*��!��\e2/��W�� ���xP�<��{��2Qwxee�t���N�b���t��5�p/
T���p��p?\���y�h�v5p:��w�����j�y���6WOf)��L�N��tz��p`��l�zK���?5��xl�G#:�\�F�u�y�6x�����R]��y�/�5t�P���4��u�o�c8���w/�1��JY��a'��	1\T��v u}��X������k��4�e������i��3[���P������ �h'v�!Y�j�l����}����3�Y�	Ld�T��������,o6lk�����+�M�5�5�6�@��d�ZC>��t+e�7uP��M��L����jL�.��U�i�5��� L��y���cZ�)
mc��������6��)�8.��1��Nk�9�DdxN������I���������Wq3o�����?4���o/���a'���.��-�(�R���a6���L�zg��zx��
	@�� ���,i"Fgy3��e��d50c��_�X�5j�(d��O�*fI�-�K���%mH�����_\��T�{��������P�����c��
M���%%�RO�y�������,�-(��-��r0,iGZf�V��d[s���0���X���Z�����US����V2.�b7�9M�d6c����aLzS�����6CJm5;Z�f��|���g���"���*��7������0���#�$kj�g����!��T>�x���|.��[�R�0#���a��<�ps]S�=�_�"$#��`E��D�$�(��<�J2��%�J%�p���<�"�*�L%Em&���D�j�[�Ye:�R�D�f� �|tl(�P$I_*�=L����#�����RR�Jl "��43�����O*sx����-�@i�q��zPl�����!X����*I�����=�-%�x��P������&�����1�a�<����B���Y���
���������)�"}cQ��t�i�*�@�\9��c')��"��])x2��S�Tc6��J�E��U@q�(mC=i���y��+�!��"�Y^,�=
!O����mn0l!m��FL���x\��688����)���P
@���ad�QRn�
q6DDN��[�w�tUf_8i;����cz"��mx[)j]���u�M������
���nW�Umy3
�(�Ae�L����Y��	�J�S��i��m���WV����m���%*2+�s�������J49�
VsV��3W<���j{1���%���Gm��P���8��hnK/������B���pwH�'V+����7s�>�~�u����>�������/��
�����J��Xi�Q��9�w
����n��f�|�oE63�����J�@��]T���z�+���� U���C���DE3d}��TC�t�+�jq\A����8\�t �������BE��������
���c1&���n�3q�v���mY������"���z��F�5-Y��h�H�	��"h[�O~�s ��L��Qu��=l�!�,qI<��H���B2ndMf�������/��^����=$�#�s��^iC'l�)}���=����gbK�����������/+G��.��~��M��)�N?���"�N�@On- E��I2�+0�/y��'�{�y�mFm[����L���.d�,�V��z�9�)���s��d�� '5��:J�Q��	OT��y���6�l�
�zp����#���q/����%���UY3��6�>s���Idm=-����&��=�����h=R`Wp����'����;Y
�4'rv'}m������,������_�5����-i�;�Uc+����Z�Mm��#+�A[���L�����k�T�����3������*kW��"�2��j��� �Ka9����f�%pqX��?T�����t��U]?o�SBd������>+$@z�B"����|ZH�m�>��^m�'N�,|�#f}�z>o�����i y�6�_�O�c�$����wj4CA0��=����R%�����������<]�*����"��!C!O�K}��L��B1;�
����\yr�����L�>i�U��<���y!4e�B�(f��`��@Zz��3�y!����uF�i!�������s6�)!3wr���Q����s�`F��}�}�|P��eB��!��d�U��?�r��'���7�Ps���0}�t�T�Jg�f9T��������P�t���'u�1..�Ax�|[��*��/���9����gL���>?�,��b�\>��*��G9�������?F-�1s��QK~�\�c�r3����c��k�����u�rb��,�(�����
7'_�$H:h/��|R�������co/Y�(������>����W!UO��o����:���u�~}G�n�_���^O5
��k�<%�y}��k�_���C&���>���Q~��������������b�������:����8���������������|����^QZ���-��!�?��������~���s\?�������C&q��3��5���gA�������(JtG��e"2�6&vp1;�lc������]-?�\?��������!�Y��L������-��@��S"k��}��6���?�����b�y����Ck�hHD�Qm�[�����m����ImvL�h3;�<���}��O����
�]��#����d�D���q�g!����zv����hSxVQ�gG:8����������'T�m���P��A���T���&��@�|H�D��s��j4+-!��%�CG�l(
J���H�)R��VGL����HtutK2���'����n
`Z���Dq�������Q��M��N�	�d������$���O����/������/$���4�`�h��V3����{��pCC%�]�o�@*�D���-�
P�W�[�z��Av&���]��o���Q�,�d�wN�Y��v�:N[��X�7+�~��;�z��vET&���*��aK&���~g���m�	����X��x�s,����U�iQ�g"	U��p�@0�y����>{�:�O����������W|N�|��s���+�
'e��q����E?��Q���:a�b
�$�#��U,�(+9�b���Q���&��d�ZQ�i&d9:���[/T��(�^���O�Q�C�����1�	�y1���3ll��"x^�_��dyt�;%T��]9.���C��c-�PS�����J"
�S��5�y�O�����g���W���C�{a��0�2!�I�r���4,-cF���tNV���2�c,���o�6]�������f.����$T������b���Xt���s��LDf�h���M�C��^��9�iQO[����8�]W#���dTA�\{���u�h��������-����,5�������m��}[.^���j��lDF�u��hB]�U��^����U������)���|�qq�]"E����8���+� r&���[�qm�$ZP�^����9�����#��f���D��������%�K�2	_�������� m�r�rtI���8��H��\z��y >B�H@�c.�m��@?��
���
2�2�`�2>/TP\Z��;�������xy��.d�ry��}�J	D�M���^�
�s�AS 3%"2���x�1��=-������aUX��Tn�*�+��YF�"N���r�5Q��O�]���0t]���.��.�4{�h���_�����
��ij�����7#8�N�+d4���K(�����p�|-�	��f��_��r�0#��������:�y�G���i�m��{��)8l�=�c0D�"���-��f`��{"=�M�<t�26e��_d	p]��9BC}����R�Y��t�!IH�%p��p/�\��Dm1�#6LR}y0�	LW�������$ "
��QG�6cco��$�L?}uy��0���+0�u��/>��lAQV�n�i��3���2Up�80M�
}-��3"v����*�Uv^��#2����Z<������`+vp�����i��|��R�J#�Q;��Jw]y\>�:�k[������+7FL�QP���J�2q��|�>��C��� �Oi�%��cl����l����QqV�q�@�a���@c��0���'&���D��!nml����w���e�i��Y��UNG&��6�;%s��Lc�y�M;��f�b�s!E�r�)�K����h%��Lo���w�^����2Z����R1b���o���8��jx���Q�En�	�����X�O
1�5'Jd�'d���N�l����Z��	�~�i����l�2�4�w��J+��M7��\TA�N>t)!sz�`��a�}�)�
��^��d�%
��>-�j�I�v�Je$5�jq�������z���wU-�,F���P$>+5�����f*����egT������P�~�/���t)!��	Nv��0mJH@;���=��gB<�{F}���/�zo�y�7��}mo��|,VlS����M�b���s�_���������j�mi����gP��E �/�g�)p���(�b�0����@��6P�7��L����	�����w�N{�Z�d��y�a���t���Ho�}�v��:!)�eYu��3�h�]$�7����{���"#�t�8 2X�{�!u=���{w��C+�W��+=������� f��m�f6#-�{��g���&"�;l����u]C�E��vv����	vv�bUT�
��)u�UK�8�NXX�����i%bF��e*�X����g��w.``������~��oM3t�*���,�
X{��o��i����6�vlc|"EA�5:�����]6��z8���?�cG����Rx�+�}W����^o���3���z�5�uw�9<�u��-�tM������@�!�y�|���J���h{��y!�{
 ��b0��CJ�D'cW�?�m���9#	j�t#���h������}���7�{9�ea������������a6�AX������r�
�k��c���'�|����7��	�1������T ���Nk��Y�m�����UX���0�Xy�`�a�j&*���^��D�r�DT�-drK��G�B�)����P�V�
���[���j�T�����]��3 e�x���w������Fwy�]c���q+�<`�Vm�a����2���i'j�G��`/To�&Y�49v�@&�����t
[�y�2Y�m2jt��'�xX�0�`6M�?/���b0f"�u
Oy3h�A�)�#}Qn���(a��2����4�������(�O��p7�0X������/5�s��n�NU�C8=��y1�+�'���D_�������/����n�=!���L��u�v�`���$��zo�v�vrI���R"��U�YQB������C���p�)o�o��;>'B�A!��SpN]&Z-'+�� w=,�I$�7j�^��xB��r�B�^C���W��P�;T@��	,����on��Dd4)o����7������@%�]E��[O�z2�����
���]���e;xNY@�V�����2=���m����\��B|m�X���u�He�i�� ��d��De�p��	�	ML�����6��o��9������,)���L�>���~��|�����G1� ���Vy�%WV�n���|����H�-~^Dd�>\���D�G�^D������G=��-��n����ta_��($������>@*o&��	���������^����[��x�Bz\����%44��������P&m���D���E�#�qc���Y>�5+Z@(*��bJ�n��{!�N'�<^��G����y*�����1�)^bQ.TB���my9�:�D�����Pj&"�&"1y���5]/$`�M.������T����>W750������s�W<Xs�2Pm�l�&��'���sY�D����0����#a�2�
f2#��0�]���$K����������L?o������w�����R��s[ov��R%�:NT-�8����TV]T�TY����bR}�v�o�I��x(����>����t
��?�������4���o?�-�^s@sA��2�q~����S^H�������ss�v>De2%d�����--~!6w)j�D;�K��N�e������:
���=��Y��b\W�s������a����n�^�t����G���m5$��M���l�����e����OD�K�f��\|.GQ��.z# ��}���9~!V��g}��3KHe��Q�}�>�D�f*��k����6$�
�`�����c~�g��'$����������^�������VG�_g�����d��wl���W��j�P�F<�&,k������s���L����X���g��1���
Z��@mr��o�� JC��ii�T��S.���I��v��V��i�8Gh������7r*>��af�6�����+QC�J�����Y�d�Hi}Y���ONO�����Q��	�_�3��p�E#��[����m=��1GQ�l�AZU�2���a�L�|��f}�����
���
G����e<tnA��5�z#���e������B;��Q���s*�N�,/&�����(u��pcFr:�\T!^�R�+	2����H������P���sh�o��7��`��e�E+����o�V��,��$��[�6����]�����������V&�"������{����
�&����+7��v���\�������M�.�6b}��?����������'&���]�zsU�g9|~�K�[Z�I�zLO�)�f����aW����"�r;�hw��^���Xz���a�P��~MWL����x��$n�u�<��!��?z�f� s���R���d�����2�0�j���m[�#q6��Q�'�(bb�tSvQY\W����ve�����'�O�7��<w0���[�y�S�h|�M�Ay��]�f�I`0��U�S������fXm#�Jh��c6ks���k��L���wT�O���
8�_�/O&Q���d�t��e��v��F���{�DYu��&p�@Yn@��_��� ����,@��f���E�%|�����_�3���{F���d�b�A��n�VpE q�i7|Bj�i����$�F�E�����L3����G������en��]�	��<
9���x�E3�?��tq�L���Q�l�o�2W�J%��1��?�'����.�Q�\����Z�O	"�rA��yi����S6k���Y?G��@�P�i�v�:��i�?3�4�Im�"��v>
��y�Bl{�ie���0Y'\V�����K$������jy!n��S�9���E��,��@37k�'C���\n�	2V�9���`��e>���n���o[���6Q�E��������0�(�����}�d��Y��*�������	Y[S/���L�%������MU:K~��w'�
P��4<Z���,�M������:2�����nN���{��L���Ko��*Oq��������q�K;�e�����6b�w�����T(V��������Q�i7��$R�Y����E_�W�"������6����0��G���/
�6�q&��4����^��L��g��nlb1l����)�du��%���1�{�A(�HC���3��Q���t�@�����?����li��C7t�.0�[���E��.KJ�7����`��$�O�/&�n8
�GM|2���)a�x�y�_���p�+����r����pD.�"��2s��,��!���Q������H#VU'���8tL�dDq(�?��bP�}?�h��EY-BRM�������{~�;{^z{���%���[yvm�6�>;��x$��S�/;T�[�"��E.R�����?y�<�O"�N�h.��.�E.2��5ss����� ��;'�T
L���+O�@�X��DP���+_����M�7t���q�29��5��S�}����Go���������
B�x����!p"Q�<�D���"�O�-4����p�G������~�R�p�aC.�E4s�D�*5�b`�9�1��#a���(����*����D$�?1�zV�s���$�#$"62$ps�$b+Q��@�}y:{����|�ef����Q�����(��y2�J��<�.���2��*�x��� 2l�����wltP!�����\�����
�<���\����J�}���5����yr��
��d�f���?�(Y���Q!�n���I��\��>�E��pqG����s��_��ftG�1������G���be�4� ��pn���GO""��a���)j5�)VY>��>���_Gy������Ye��`��
��h��o�����Z�3�����f���q,�4�d��C�|��E����1�n:e�$2;@+U[�/�
�������c��u��6dJS�1ps��Y�7�m��|E,cK�[���>�q:�?��X�p��{*>v�%p�oc+G6k
��4��!�lb�Z���j9�Hf���f���B����j���*�Q1�@�����6Q�4�a�(���B�D�M��N��fR+��i#QZ�sNz0�@4_���k=q�S��%��hI$���"g�����D�]�.P��+Ye�Ajp1���\���h�lC?�I��I2�_���<C$�^X�W�N�6�(j�-� �������Gg��g'
.��"0��L�����*���v)4%x���@�W�FaD��P��:1eC�$E��F#�7W���7E�2����E�;���h���U��*S�Q�V�e���wi����C���a�|2pq��z4�O"Q��������_qZ$�UQf�
���p�x�w�<s�x(��I<�{����N�@�X��J��#��X����4<�2o8��������
���2V���f��XqEe��Y�b��?��j�U�
{�\iD�^�&v��~s�E��mb�s����+(�l�\L
 ��I��(�%;�|���`%?v��=�87��4���M�"5Qd�����&�%�O�����/)��#C�����*d_5��r��7��(3��d�
���5���T#�V����kVp�]�I���+�H��O������i_|c��D4*6w�H
��z��l�����"Zd[K��)�t0����l�
]�n}�
��K��X�p�tI�c���2U����>�d���h��#U����ha+(S����_X
��<gCk����.�}?+�a����;��B�Ye�0��V:���0���X*����FW��t�=�:��W�W���;��_Q�00t�A����7����	��;a�B�'�����:�l:�Z��8@�u
O]�K^/�Z�6:X�z�s�Q���O�nt�*��{
���V��I2&��p�_~VY�ZI75������'`&�B��x�twHX�'�����G^��{}���kg���'�z��O� ��#�r3cJ�c�G��>����D�a�+�fw��-c��3����"���5�/����A@��uw`��'��3��>��&�FI�i]��b��*�z�[�a%�*h�q�������8(��L��g�iU�mq�1����A�z8����a�� � |!�<JP�WwN�[���0.��$��z��n>�+}^d���
lZ
�L4-Z�N�&���K`����\��v;�&�i��0�e?����8Ca�A������P����	�"�������`a �&�����a�e"f�e�)U����`DpD����NL,'�M,*�vJD� ���$��v�(�1w��@��F8�m4��q��RD�����f+�0�k�B������\��a�O�,l]AX	�;j����0�D*�j�6��H�;��
��
���s����yP<������.\!9%*�����sQ��5��q�3qh�� 9m����{$<m�W���z�+m��iC���������������g�_���o����n?�������@��vMQ���z�{�1^?�������8�u�����u��'@���fm���F����.5U�����j�q>�D��kM|2Q-��r/�:��(!�u	�S
WZ��]���jSEfDF���3��Y��>a�����_(�!��o��"R��&BY%��f�Dr��y#�i��KETm����57��,����.��E��Z	YS�;�~T]B���%1Q���n&�JH��otG:��	�tv	I���}c���[���)�;�1�����H�v����������p�_-�SjU ������x�����:��L�K�F��O�|�Kf��V�>����HU�IB�����E��q�w[&`L�����w�������&�����8����=��+������3����>�:#�S�y$�<���&b������T�-j���k�������'�=V���&d	1�U��C��\�I.S��\(�jB���0�Z\�e%S6��T4���l*�M��s�QMH*�>\�5K:gL�D��;�����w4��*���ZT��/Z�_��~��D���2�u0�+Y�^��6([��8MuTn���1�Y
�'���M�\d
jB�\��|����4!���hO	�����L{��5���D�o��Dk�M&�5MHk�������;�u0��cl��tEP
`Ls��7C�]���i��B��I�����iL�9^fL�scj�Dc��Kk�j7�i�x��D�;
jB�I��BtS3���-������f�9%�^V�*u��������c8v�����He��1��IMD��m�SXlJF�i��NOuE*��`^�����D���J2zzfT�l��������QM,��j��G���B.�]�.�hX3��W�		�5#����Ug���T��hs�5#M��Q6�T/5-kF�e�Z�o~�����sv�����i�VT��W0�VA������mj�.*�-�R�hd/�I
&u%P����v���o�&5�������f�6,��k���
y����L�:��Y'W-F~�������)������	-��`���	K(�aMNiCDK�C�
<o�Y=����8�������sA�nS�������y�e��c��X4='3�r<���3�|���`��-�c�&��/�}Cg�e���/$GSE26���?�D���,e���E;I7<���D������\��m8��:�k�����\����{�-HF
��P�)_�d#Y��8;K�i]#���������B��v�VW�S��d�+Sp�e�E���"��������Q(^��D�c(��;���KKY��j�UB h@��
���*1���>���)��
�����@v�fQ�����3-��{p��x��M����`$"b�^��Xd��/�����	a���)�tB�<	H't��iK^d���c������4�<�:��zOl������A�%�Y�k=��_��0�����LQ�����J!c��OA�=���i8�O�:�n#��=���������F�k�(���k,�OY'�� ����)]���������N����#�Ze��	�OZl����A,Y�JD���� i�o(X�`�0X�Q��"�`��me����"��-��W�/���ZI��A��$�\�i��</T�Xp
D�vv�� e�5o[�
/�H�0��p�j��_��L�7q$@ #��%���h�F�]�!'^j� ���������Q��2����Y��}ox�:�smZ���"������\i��K��\Z{��|5��
'��h�(sb��7�����R��gO��H4��E��g�>g��V��,���������b��dX�j���2>�Lz�:�K�4!So������5p.>�������
�	�w��E���Q���	���7��&���HH����<��k)yF�XA�s���n%��cFM�K8�fYb\cnw��X������\��b�OB��@�.�6�Pp��q[���h�E�����E&n;�<��17t���#�����b�a7t��Dav����C�_:�����b��y1f��B�c����a�fk�J,0cL�A���Q���B�k\w�R�J�?%��5�max�Jb��7��'+�Z�;6���Sc_����R3�����T��K
7Y�)�>��fe`���p���7�<�6#��T���]�i����V�K�HS��/Yj�s�������S2|^����&������<�w��B��n^H�q1���3+�"Z�����O�I��X��^��,=��VD�>��4%B�$�X�U�p��4���������0�Mf�A����A�Rp��;~����qSM������5�fs^,?DB���
mS!�>�y1�Rw��f�*�_a���(��o����5D2�������|@����W<��n��BPq�yW�?��B��O����+����^	��JBWQ\�2���i�	ox���V�i�����
!DB�7pl�:Y
7i��4����U�i��a�B���M���������n���}^��D�m�Bw��)��,�j^�H�u����]�����i�y�[Y3B�<����^���+�m�x�a0��3�yO��zX���n�d=�e�MHOT�?�e"a���G	@��mG�������o��6����d�������j��:����vu;��e]��Z�-�z�U������O�7��n���>dEE�9��>S|p?-yBp��h64>�i�=�B����n|2sAJ�������V�?�-�OCz�`~�)M�Qf�����$ �n|m}Af.��a��x�-�H��c�`z��R��b���1�������	+��z�-`%�\/����������c�y����N7�f)����o�Y����d���\x��Y�D<gK-
�9[��aC�D�!7:��o[z�Ij������;��l* ���b�5����G��
���
�����N`���-@S��c��V�mi�>X�I����mL������G;N��V��	�|4����_�0�}�������D�vK���l}���	��3W`�2
����H���F�6���c���k�����>��H����{��[>��c���q<��x����{�a��������\��]��Z�2��}���=,�A� _�2����g�������X?�"�c}�u�?o������E�2�����Ml�!�MD��^���jl�g$��I��t>�OH��~I��;����~"�`-��:g�����D�}��39�C}cq��j]��;�9�6�p�L��1��z�����������y�__�g����1���H������;�x]�x]��u��~/�!���u)\W1^����u���\��3]?�r�l�����GO������oK�A�����x}������^������x���[�~.�1^?�����[��Kqj�)+\�u���X��b�~_���Z�7�~�b�����u���j��1\_��r��Z�������u������p}-���t.�:�p}��u���Z������r�����w���`���z .�e�n��u��u����b� F���1^���o-�r�~���.�p}����������]�v�����b���1�� ����}�����
�)���
�)���S���S���S���S���S���S�������oK��n`��~}v��������^��������?��|�\�wv������M��#�_rC������'7����
��rCx��n�]��b������?�!v�On�]��b������?�!��G7����
��pC������'7����
���
1C��??���
���27���~1�!v}�;���c���-pC��Z�������\���n�_���s�������������������=��Z����	�g�l#�:e���yp1������f�,��`p�ujc�/���E�,�(����Jd�V�h�����%�`���o��Q��� �Hn���B� �U)i�K\�|cC&�t1������&��������t�L��ec�e��;����
5D��	�	@�Pj�K%���~�����8m,J��T�v�h`$#��1i��fx�!��_
�6������������<8����/d��h'����%z.e�Rl�������Lw�M��-e$�;�����9� [_��,���P��T�����O.^�@l�{!�����gD�{�"�r��>��[JT&;-����A�i����"���/Xa�Y_����V��Jw���CT&��-�vzP�D�|�4�P�������P=*�@���%t��N�1!qm����<n�\�D2�KB�'~vjX�Q2:��yk�[�K;���	��q!z4��Yn��+��DUKNQ�OzT>�����������J���<��[JE
�vf��Z���Q�Q���r�no���iu���r�����y� BO�v7�Ec���jp=oV2��w$Q����Z�f�m�'�vrC���N���6��e�
=������J�,Y[eL�����-�B;�
���'�v���
���������H�o4whG{�S'�����9@��2���v�\����n�p6��O�@�U����zR���~���p#)��-��a	)������];�/�J�������,�y�w&j'�=d+���VYO��� ���M3!��zP?�:q�E	@�e���c�C>�7�"q�%���r��OP�� ����3���~�9(h�
;��ne�E�M8���~[�o�<MT&����dvJ-����"�
_�i���X�"���mI��l�XxO�����ubT��=�=�H�������L]$��2��
x�.P�,��5��$�����fi��0���""5��`��c���y\b��{�\�!���������3��|�nt�y4�%�$*��??
�n:{�	|��{T1x�������
�f��C*o����;|�90�i��eLJ�y�����^��c���ow.�v����������E|�BR(;?����jA���:�w��"�Sde�vF�vn��h��g��Ln.�)�[X8��X�L���������|�{z�'�g�/@Uvn�\�����y#���U��������(�l�OD��I��7I8���;��������|~��~���3����x�2�������]�}�K}�� Yd5��������<e�L������n�����y#�T	��������y��������-�O���	K����
/`k�^��*�o %[f����
sp�^F�z|���a�<��F�Em�
�5������D����Ds0P���M���1��m���LmIX.H�8[n���\�����mgA��i�<T���F�"�%��E������W���>���3���{<�e�Js�Y��>o�N�~13�����<h�jq�U_�
�Uh��]���->/�+�xv���}������(��"����@�������&`�:�`0j��h}�DAB��_���������7��CNO�<,��	���$"4r����oY�)�y�`����d�c�xx�A�x���_
r�>/�����r�-�FD��Qsq�]�,e�-�f�P�U�<1�d�����.�	lf0N?$��C ��N	�$�����:����}�m���&6C[F��K+��+f�8�*�!R#e�zi'�O�y�Pf+9��(w�\��"�5x�����1'_����T��Yo�<o'�b�d����}F2�m-���)W�A�i�
�X��#����5N�%�;��4��CgL�U���$�c�����}��G�M������zhe�OY-��
���I�U�!X:���HN�gF"��y#-�����NjW`��{��#7�M�O��'�0�r]Qnj:�7
��d"�mg>#�� �9����){�Y���U�����1B�Q��xSD�Ed�����_�f6����/�h�w�ig�n5F�V���r�9�� �3+�<�e�a�/��	���>��4	��kT�������M����D����9�:m��5�>2n�x7���|�t��=���fYJ2
�tK����f����4���C�a��'����_O6,s��)	���c8+Ww����&�5�F�Q�l���x��X�P���C{�(B��K=l�����%X
�q�����Ym�Nd{!�	�]�����>��R�"k����(�>]IQ�����D�s�Z�������:�
S.���p�����v0%O�\���,�=C%�	�7:Of�����'
�8�����vD�����i��S�
G�^�����G�f2��yq�`5�S�D
���S��g�n#W�2���]����be�Dd����&@��a�D�;m,�NQ2�=��@P�L�NBh�A�eL$�C[J5�v��I�d�[���E�D��2�����u,JG���T3>@Q�q`!��e�G,����������D�LG�tn��p�RU���~������,L((��HzQb�b^�v[��_E����������W	���2��B��u;��L�M@�.���e/������$�i�_H���li��/�6��h�]�f���OHe���io5(L��V�	��$7n	������i����T�}F-F���5?�_�PM7b��\�i�����M����E�P��R������a�������l�moX�L{&REX7do<V��d�2_�2��������f��fk*���P���h����#�(�����h��r�I��������P������Udv�y1���e�=��t�����sF�����
���N���f�A��}Zu5Gc��-��f=���u�j�����f�Aj�������@J�7[��|x�9�B���
.�T	��������C�|,���T��!2�^��gT�-�R�je��C�4fd����G�5����5�&������k�f>����\�"�����!Q���T���S������E�;���P��WlX�Nv�7[���.��Vb��k2
�`��/$�[����bx����?����5�T��0m��
L��IFN;�6����;{���nm�������fv����r��A�R�;4�!�����$���Jp����N�H,(��RPx�HN�^�3��.�7����2`,Od'e����O�?:�r��.c�-sR=o$�h��=P����yY���>�/.��1Q�2Yc*��W�l�5�@�yQ���r��-@}��D���(N�\�
�����m^BS��f��8��b;�H5��}g�C��~����i���
4s,S'x���G��s�O$�*���9wU�DO_jv
��E�yO������)�E�8j1�V�g�\��DW�_<�%U��j�����]�������`�r�81����sOF����0G������z�B�������-_�U����%����\MM�M@��q�hh�	�����V�Hd�4��Iw���P�l���9T�+2ic�7������N���3��|Q��t��m���R���e3����(���!�/����?"���K�w������H�&�x'��*�
�N�6��t3���P��[9�����>^�H��D`�������\�d$3�>���W]M�a�heE8��>��V"�h%���F?G+�h�\�X�e��o��iN)/C������<-Z����&���h��w	����}��y���)���b�2�M=�qM5g�nE_y0��wcp`0�w	`�:���mR�!��`O�#`�V��v�t�9�d/�"�U�����,@D���w��L4���c���O�y)��'� [o4f��
D��[Cx��EDh��2����
��^�*��qi���^���*kF�2���c����(����3=�����{�-�7.���1����1�ubx�)��U�������������7�'m��B)��5���fo #��F�	�A��J�W������lu,=Jk:~����z�V���QZ�8�_�8F�����z���E.�`a�_H�M��l�~%Q�LI4���L��%Qp,���<��	]u,3�N?�(�h�}��������D� �O���=G�{�~�^}���~-�9�e��Ddf�5�6�^��|!nL���x&33��n���K!�.���/j��W�����B.��W�H�(�r��9f����G^=�iN�u��EW"2�0���j�7�	�7a�:��+%�m_xpt03���S�g�M���wJTN�B��/�L>��m��"K4\��Y4�(D����Z��J�O�!�B����������������G��A�D���-O�:��r�8L7���/�U��,x�������%�.xf����h��Z<[�ql7kaA�
��(���a�}�=g�����mmE%
��cq����3�3x��7|�q{�3���j��]!�
����E8[��,�Bpj�#�����
������!��,�����U�h-���n
*���/1,L\�>�:<��@o�`�V�!
�:����CF47#h������{\�����2ns�:�Fc��6��>������p��������P�M�P���	�D���`4��������yP����w
�u[�u
k���a����1��X����JHucF�UNk��e��n��O�k�����p}3K1L���"R@�[��K%�]^HJs1�(���ZV���v��>E>v3�������v���
����
�_��
�=kw^����_(r�%������E���Q��H��2��N�#Q`�����a@����.��2�DM��_(�����2g$`Z�~ka��E���Hd_*	`+R;O'�����n*�r])j���HT�'H*�-�n�~^L���p,0�0dT�[�*���������m6��%8s�l"�&�3�.nj7����2A����."�-��j�w�"j�&r2U������q)���dE��m��Pm��m�[\;��7�q����F�I��.�(�����l?+�2����;T��4�����x���5��\/��\����}�/$��2k�<�Lv���l�����*�U��qlp����R����rk�B������n��� $��H����|,'!���I>��5��ao����\m��~/t�����Q,SB%���������7��L	=D�-W\�& ���of�D���
����eZ����`����OM����z�9F��7�\^�_�_��|<[k��@/4g�.n��>
T�LN���j���8m�JD��8,��I�L�c��Jp���&:���n3�`.+��2�p����|�9�B�Q	���M%���E�ZEq]��FR����<>����q��og����e�B�����W6V
��D\�����-q|B"z���������]����mC��:����!���VK�X�u��B�X�U�s@/t���R�����0�o�) <�����L�%��n�=gA�$&�U�����
:������/���/H?����*��N{��)�sw�����:�]�����U�?�������0�I��F���+�G���/������ec���fp�7t@���~����Dd��u��i9������	����
rp���W<9ax�����������+����G��f��L���aR���L��d��%�P7��8���I���|�T;��d��7��,��}e]��d����kjf�|���L(�R*d��h�+�����M�R��
X�>e�$���F���S�&��qGFP��a��>�.2O�_����@������_������@��YO7���.@����g��jdE�LPT����!�������E���5��8%3��[D##m
'� ���G������G��Q���h���AT�:�M���'�|?S�
Q�J@�=��O�Q�U�����(��aV�LP�����Ic�q���!
`s3�@A�i���i�09!X6�������?�HS�,����{����+���/0���Y+��aCFT4��8W���u���a[�!f��}WBtHp2�{Y����OD���1 c��m<"��LvY��!�%QM{�"V"�z�R�:L��eV2���r[���$������

}WB���_6[#�!�D.�Nkw��]f���	N]5��TO.k	�����)�_>W%���Q$��Uy�mI,,�c(�n��������h�R���O�u��3�/�9����j�����F4D.3_j������g���O������M��c3������:��XFZ��um���W x��%�����E�]\R�mB�O5IyO������+���=>�����Rr����N����;����C�Z0���b���"����u3WnAs������,�7�C7o�V���!�����
K3*�*�������s���@d��Vi��[[�;�_~����=������o�����3����x!���b����F>y��<�_[HY�A�m�����`A�j�=��`�-;>�8�^:�����d��k��{��?�E��\>60�������a�`�)o�������N�������q�@����J4�0{��BU�6���`���!�N�^?>}��HfJ>odC���A�����F6j�2	��fm]��*Y�9lP�kpq%S�S�*d�4V��^o?��<od#�)��Dx2��A�m�4�%2Gb��X�������|� V8�m+��~l���yX�G�#��Y���#�V1�h����������<%e"�8;�
���.?/���ku��'7�Gt�-������`��;l�4#-�/��~x"!l�J��OF��BA,���:��^�tE�w�}�������LA�b'f����@f?6k�f�V"2rF�����9�f2�JX��WO�j."w
���%E6����H�#�$�|?��Ng���u�3��j&cN��'�E�/���'���F$�=��u�����
1�����F��\�u������ &E\���nh��}$��j�*�<��n3��Jg/�316(����L�>9^��=��l����m&��c2�l�����g6x�\�Jb�����u�OA++u�c��d�jp�	u0���o�#��y]�&�\���D"%�Db�.��Lq�Ea��4dt��a��/k�>X�v�����A��B�8h�R���)~�a�H�@$"�4�K����zu�h�Wf�����z�����fJ�����%���Fy,b����Yr�,"�z\�#������6�+#�pZb1�U�$�@mhorq�D��Hm��E,F�
���*���X��?#�����[~�a�	"�,��.�\#���6m�l7	P_�
��@8�/������3��".h����u�.>y��Yy3��UM7/����+�'SY{��
��	4}�d����`���`����OMhx[������`���x�<o@�Gm���<@���x�R���k����%!��;�=Qfs�p�^41I��
[8!M���j�|����?/A�tqg�y�z���N�ts�/����H�������H'�&�&=!���kDH�!U��M~�~�7�<���HMh0���6^h��-�����S����j&�
�b�O�%�5�6���5�
������[��Pd�R'��4��	N2���qq.�\��W9g����m��� 3U=/�����,
m1�������=Mh���"G{���hN{eX��i""�s2y��4H����!��5~
�2�E��@���fe��D.f4KZ��$�`J���=��x��iQ�`{���t		���lp���@���C�fZ��p!Q
��&����X�5�d4eZR����4#X����Y,�%�H�������������v��>-i""�T��}7s��4#�KJPCO��XfI���3K�B%<�%eF�hI3���tETU�����M������|��T}��j�q�kh�+����{q�t��gu��j��i��M��#%R�V����jF_:FPr�N����6����FP&����W�#� k��Q�3�����T>���������������I�\-�������c��a�%m�d�����&s�d�(>�*����'.#�XKS�g�#(�9��5����h�7L�(�q�8�2d�(���.����a%G�|�(��H�|���<���YZ32>�br�Ty%�X|�D=}2�����x[@��2PZi���b���J|8$�xpm%An>�C��m)��4u@>�����1�T������xIu�0�2B��<�����5�]����s�Q;�(J���sU����M� ���q%����`&���Z�m<���4��l��r��7�VW@�=J������G
�=X���/�@H�`�OF|����"�9��mYQu�aah�j��.H+�����pp��c�	8N��0lb���()6��8""'������>]���������D$�O-��meQ�e�4u����6�q���uc1��6�JLR���2I(��E���P�'hQO���i.�[3��
.��{��_BP���u����LV"W�Tl�:l�3�gnx�i�H�����J����
�2�EnU�>��������#g��)5��+p�D��3M��tx����<���3/���P�7��N�����D���JE^�	�fA�5���E���YB*7����4�N*S����-�����z�;����z�>�X��<M Fr���e}����t�+�j��!f�7��8]|2�>~u���B�|C���kj2B1�����[
]6d��U�^X���C��'#��;��OU�m\��y3�tG�E�R����M�En��s '9t��"�p��c!�$��H	�����l���q/$q#k20&7���Lg��G1#�����������3h�Y���[��l�=7��n�
����.������n6��wxYq��������X��c?���cm�9�yI7�. ��E��E>�m�P�)���6	��)O�77y>o4G���F>���������=����k�<�^�>�a�}�����h����9�<�����t	��v���P���f�� �|C�����#k���'\����\��%e
�����m�&�E[/�k�|�2�G�t����!v���|������IY�9��<�kB�g~��l�N80��U#�#XR��j��Z5v%s\��g-�������V�a�I�t���Z9+����3���g�D���Lc1�r�Mj��j�����7�f����s�G��Z��}K�N��	*��O	M���V�2�g�H�b�B�.;�Q_�O5��aAZ��fy"�$O���?>�c���Q7=-N5f�~2����&�����lV/[Bsbh��r�qf��O
����������bQ�8]+�R
���0;dh�7���TPc������P;6�!q��@��C$>7df�/}RY��o���y!4e�B�h�	�����c?/��B"�k���:Z��f�9���z[�����d\����b�
@����A�����W���AA>,+;{��0���z�����F>!�e�����6v`L�c�AR%�}H�"��S5;��g���AS��Az�zR���������s^W1\����!����i^W1\or��1^����*j��s9��<�Z~����u/?�[�y}�����v����V~^����,�]��������{�n�����~��_���c�M���~)��\�������8��IzM��}MAd�_��I��������]������������_�'gG������ge��]��?��/?����z����_��+"J{�w�f������O������������|{���_��������Z�k���LO:5�B��v����`X)�q&���P��������{�xW��9�Q����H+A�p���H^��B'3/E"a�eK��E:s\"�������p�	���}
��%^�)l.�e3�b�y#������d������8�y`7Y��$|�o��w)Q��G��@'N?�7g(���@�Y����E�!��Pr��N�YE�S)��q�3�'I#35OHt����*�>(1z�������������-����6�hVZB��K,�U�u��4(�JD���H=k�[�3�E�����e�H_��I��j��0-GBp���f�6-�$nT���A�f�A2A����x�Y;�d55)������7����������&,-�&�����<���H�1T��5���d8Ld��\7���7@}�^�[�Ha��I��|�1��Q *����N����8g������k0/���J������'wc���y��
�a4��"k�_H����;����X��x�s,����U�!R�g"	U��`z!����@��W���������a�u-��7���/��c��]Qm8@C���Q��-��$oY��:��b
�$�#��5��(+9�b���Q���E�x
�$� _���jI�+���v�)��c	a���2jv��[;f��|^L���0�����N�n��_��d�u�;%�@���Z�����6����-���<&��H�_���q�v��'Dky��3�v�+���!��	�0�2!�i��Jf{��1�f�f�kS���2�c,�t��Xm�v/���
$0b�@E��Q�v��}�	�ZJgf�������t��������B��Q��2rp�����'!�qd��F����"�|��|v�h��������-��M� �����x
�����]��"3�YM�9*J�u�V!��;.BPV�����*���)����#m�7�$���dI�M�M�uEXAl�N����K^�&��z��j�_�4�CT����G�
`v�J�E<u��~v.X�I��
�r����{Eh��g���BDse$�c.)a7�G	�q������'���a���AV�������6cE�5�������g�������w�KI���G��@�lO���ph�4�1S"��^N��9�����_�<\���^q����%�8m�2���$��r�4Q�sL�]���0$�������.,@{�hB`M�b����
���)n�v���HN��j��J0�4I�6���y���k��H�(�v����r�0#�e��"Sw����|y���D��x��$o}�@���6������1s���[^r��5~���\�7	��.����,0���.k�t/
�D=g
����//�2C�Qc�@����h^��W_I��=b����S��M`S��3���$ "
�����1m���>!�1���yF�k��Bo����;Q��)EY�I��`������*�,LS�B_�ts���3"v����U����c�g�����=�W&`�Y�m4����y��//�e����Ky+
�F�:�0.�������3jW��F��>�;fF��/FL�QP����)O��1��C��� �Oi�%��cl����<,���= *���Y;�|z�k���
T�P�����D6w����7z�n;�a����|@D�2�4����(��z����1�9c�-�.P�(��y�w�h�����O9��������h%"�{�e�v�{���J�h2�pY�FL���G����#6����/R6O@Ul��Em3'GH��L����9�����r�r�Nd5�j�x��	���I�K+A��e�����*%"��	�RTU�<�:�RB���p�����)�
��^��d�%
Y�>-�jR��0+������M-��(�I+;���O��~W�"�b�=�Er��R��k�"�in�j���FP�g@�����"�����'8�q{���)!�X�Rr�@�_�����]h�������n8�7���XK������M`�7<���/�]-?������p���bX�9���������8�S���Q��
=e��D�i�x�i�����^;������� ��^�����A�=v���=vs���T�v�����I�,���M�!g����+�Nr��=�lvB�9d	$H%����yL�W�F�qF�����)wt�9OT�������� f��lFZ�-���g���&��{���2�u
Q�
��������DfgA����X��n������m�F',,buLb��1#v�c�����g��w.�������}
���	����+Yd
M��
 ��x�V�5+]�������O�(��&C���� 3��P+���?�cGA
�Z��
�i���t����c�tf�V��X�Yf@�<��M�t���*�����g
���d����	������E@
m���!.�q�0�X9�0�9v���$�Q���h�����*��������C�@X'��0/�g�2�:��2,�!KS��}VN#���������I�[b?;�O�h		�1������T ���Nk��Y�m� ���UX���0�9����a��t"��d/��(�q��R��V~b��� �E�I+i��Q.�X��LD��4]�����)�[��T����hl���k,Vs7n%����j�
�-�v��x�M;Q����������h��=�N�D�s��a�C9�T&k�f�2�p��
`P�l��^H
��`�D.���f��8���oxc]������{���/�8����l���.�Gq�z���.�j���Z	d������9��i7~�*�!�����������J����
�\ 8K/���,I��:�%�h&A�����`����$�Qc��*��:�tw.��9\Z��|���(J��U�&	�1�����p�)o�n_�����_���h��Y�q|]&Z-'+E���]�P{	��Z������~bA�\��S����Of�ud����N`��'@�s�u&"��Hy+�������L�mCmuDd[�� �'���8v<��j�K�E��Y�����>o�����gU�����u/$��&�U��Z��T���j�"��d��De�p��	�	ML�����6���ou� `�'�/KJ"�h0����p_�E~����P��	h�X��/�b`A�j�]$_s.�0g������&p�����������S�^���T����p��������B��^�f�UeX����@�����E6��+�[��{���Ax/$���;}�]B���\��j��9�B#�o��������/r�����Y�BQ98S��w�`��	�v:�����?�D���S��v�9���e�B%$M�����S�cId�������f"��m"�����X��B���RmXx^L�i�!�3puS#*J<z*>�~��5O��T�,���k�����\�����6�AhF,�5��6[��T�L&��`����T�d��y������n����`��xK��p�'��Ddd������z�����*�Y�T�����H�����(7���/}���6$����j3��*��3�>����t
��?B�Uz�1�9p��~��o���b����������4��BlT���D����!*�)� �X��c����� ��H����.�B8���:�#�z@Zb�4��0���,Jy1���9�cYi����s���Me�J/Q�z�w��X�
�\
	`kk�"[,�����Q`�������,���kz�x�{�Ll4�0no�j�3R`u�}V�A���T���?f1�L�o�b�*��Za{�jCR�p{!���WQ�m~�g��g$������������������VG�_g�����d��wl���W��j�P�F<�&,k���������'|&��>z����/��1���
Z��@m�e�v#���okZ�6�,����-ee4��f��C�v=���ls�S�F����ymfvh����]��0UZ��6�B8$KDJ��r��}rzZ��d\-m�������?�vr;���h���Kd��i��y�/@�(�2Y�w���aL�0@&A>p��>�BJ��#/��?%:�;��1o�h��R�����2�EO�N}!�T��T�v���C-��	hf(�;���u�A/��#,�h��[	�u�� ������ol(~^�� �<����h�}�HP��Z�]��Lyn���hu������Af<,�Ek�����~�����Lkx��~!K����#=���@/������J�����s��eU�r"22�MY��\;g)
4���Sg�|0�"D'��+H3�%������fFN��Hk�2� >��	���i���$�/�5�����9>;m9��"�KG^#>5�����A�����AO���)U�9�;���Q����|-��T�n���n�y!8��	-@,�[���
����"���t[6Ih=�����{S�)?��=��S�L?����L�op�B�F�����������L�\U�U��)�Z�����]�����Zie<���|��0�<OY�����QY����{�)���L��Z1�����"KT�e@���bU��b���#aVMLmB��7d	�����DF6���wR5��1T&[n:�����BY����L�������N��D�t@>/2�6�;�v3�����[<����w:�>�,�:D��	@{��DB��f�U/�{i���}^rE�h�.��x,�e4�Kg���C�2S%E����k'�.��f����X�P������7!V�v�5��HfG�.x��	{�[ve=�����R2/L�/@�5�����Y>j��qC~|���F��7��g|���d�� ��C��hY%%ml�\�6�l�>�PL�������
���O�4�6<�$��%���Jj����_���)�I:�g�EL��,�H��%g��#Y����WY�P��C �+�h�U�q�B����#
������t7�,�Z�R��g��w��8�<���J`�@
J=�]�,�9}@m ��=''���L!�k5�y�R<�����<���
MG����+�Z|����!�N���0h��Y��X��4��n��P����x{NL�>��z���	t��"(��v��83��~v4����~CA�GP���nS�[���c/�_mb����EF��z��%}�iZ|"�g�� �k�P��#�=���D8�$�~.�M��i�����7�r0���y��w�%��1�:k�!����@�������P��
���a�c���1<����W��-:uf�S�2;�;6�6Q������3?���)0oy0��U�.�r���Fu���7��2�i=p��F����Npwn�!*��B��b1�����J�n�������j�!o��T	���[ J��k�}_l�Eu���PA.�wo�������W0���U����~�Hq�{Gjr������(�w���U���~H��b�	����g�y��C4|�^��}�(4�W�O6_Y�����&G}��B�2�#�'�W�y���o��H��E������+Ir����B��.�����0�Nu���q�h�Uf����� 4��{X$"�����xW�=�4{�1!7M]41G���5�!�Ha�f�������_��D�%��<�l�1�F*�yd����{#S�p|z��R�R�S�~��&�E��u�'����28��X;$�K?���WOyL�,g5����T��\�.��f:t\�����}G�������2�� t���WH���
Os���x���H{�������dd�&�9�v��'n�;\�����$��#,�Xi��9�o��&#A����;�Tg��ET���`���G����8�ln�����r&���<���W$*��� �j��m(�T%7���0�JHL+2+{����w�}oD��>2��p����ft@��#?T�k	��J���`��iJ��Wv�����J�b5o-�8x�Dl=�������^��DT�8�S*}LL����7�������:���f�P��N���c��BP�������l��P��#����s�U�:���3�C�0����)Qq6��z��F�>�Ix7$~j3>����V���h���K!�:�����n%�#���a�g		P#��U��[=�:To��������vuCp�(k��#�V�
� �6��e�������mQ��W���i,l�����t���m��|���*����f��/�S4l�����.z�����e������C`&8/^���A�-�:���5���,�ek�(�E���Td�^��q&�0E�$�xlTN�H���zZ��C�����H��C�j�3<�J��������R��D�/��t%S���,���Z���+	LQ,���s�m�Ra�=L-W�����=E8H��an���-��C�����������=�����K�*u��
t���)���0v��UY�������r���/\8J,,'H����p����DtY�@�����b!f%A��
e^ZR=}g"!�p����
��M���<�,��0�j �=�����E1���Fc�9��iC�Q�o�����<����5t��������9�5g��� Ql�u������L�v���9�����Kyj~�
I+�k8ou��L�;��`�8�|���)'_���D!�����@�lCR�����Y��6��x-��SN
Zwv~�� y����*��&\�U��eE�[��	��]�H��'�$����J�S��/U����~	��%6�����(�ck��O�2�`�*<3m$9�����Y�}W������
��x������������	����sl��E`����U+�)��IyE�}��}%�Heo�������9��g&�f���r�n�\�Yi�����dm�[���c���Y�)����@]Q�Yib��ve����|y��o��A���h�@�7����S������A��~v��/�@'����fFa��� lZ}��e"��V?��T
�{��h`�7^SkG��V��H#]��6EYP������n=Q��6z�JJ@8�(�J@��!_\<m\�! *Y{^��B�]�����D�s���������Fpo���Qq&��B�����x��%�X�p`FxW�o	���d�bt��#���v��X-<��3��5D�Y*�UF�o�N�P����)���'CA
�ur�D�����oh���M{/����i�j��4~o�Z�������g�r���Q�|'>]J���Ee�5��z��q�)��@��IjW��e���+�^���6,�v�����`Y�y#4�
������<�O4���7��&�1���S#?��vC>�M=;��k�
%������ ������k�4��|�A��d�cU��S��I�`V���|v�����6����'B�<��K%9������u�$����ypT��TS�b��N��	��]�eg�t��'��%3+	�.��,�V��sm����b�����`e�]�����e"q)����=�)�4�n!���_��Yd�$���Aym�xR��%U�{��y�"{Nd-�U���G���Rd��|kF���4#r���?������G������a��{����zo�o����.J:i����1��>���#�}���1�}�m��E�����s�����I����=�i�2��w(��=3[��f.���F����H�����:/Jh�����L'���yY���,�-D���H�����A�[����]N�8��s�����"�s*�����BS�|v��Z#�Az�*�*.d��>vH�����@��Q��������3��
�<����p�&Li��	���G\�*`Q~�����e2�p�+�\��,+��v �P�k� �����l*�qEv���9e#��M�P
���l����r&�X?�e��<8B�*�����Y���oE�
'����L�Ih�XH�|�>e,�,���_��Kd�$;�g#S�%�+^3�����D�Io!��=<�h��f+*���"S����T����-����hz4�<������K��5����-���hq�#�c�!�������J���"�D3���C�hFW4��c�m�n����vs@[�����,uc��Ql�/L��,{j��`JG�M^��]��]���l��V������`�S+1�4�U�&tA���M(�>�
-;{������h5��Ry$��#���j&t��c�����	���������#��7
ftE�	+:���,�D��G�P�)���V�Y��]����G;:���'��!�b������4#*�����DS���������)]�~&^�����������$�;]��T}������U]��
�1�H#Z�M@�f��+7�4#$��=m<�/�I��{����a]PjXO�
��'������T5���-k"E����kh���.�w��:���%�v������QupI��K�0sPD�r�<�v��`^WT$��y��n(]�QW4��F;��z�u���T���r��EmkF�=����pdpP"��G�������w�����_�N�z��;m<�0x�+��|�]e�E��F�E�Q3���Q�:+g&�Qm�:��e"y�u^Y�88�?�fc�x}�L�2��,j&%j,��f
F���`P�e�9p��T�%��/l���y\���<)�����V��V2e,�FBO�r/����S+'z?�\Y'��v��f�2�����w��j>�Mpk���������t���rN5z1�����{Z#�y=�za!����������`D"Q<��E[�T!��|5t�C/I����,���w$_�L�x����OB���sf�r�M(�
��k��xA���:���~��!y[����9��������	h�;xyL�B ���_��YL�{�����X�JES7������SKY�D�W"=���M�Z:�ZI$WXHx���s?�@�t��({��D���S�z�*U��%�r
w�n^�_��]IfyU("j��7�����w:������������}xW����l��]
�&N^I�A���NpF_�t���pb^* ��B$��=����a�M��	�
�'�cA��>��\�-�qV$��&�M��SF�yA��:�K��6%�,��'�s��l��L'���}���I8r�����$+;5�'�e�\e�Oe>��$;��/v!9��@�f�Y��#�����]g2���3�I���G�l5��~�l�|��$���x
%"�Z��<��,I��>;��18�����\�T>�/TsC"�N�� �@�)���~�#��&x/>%RE�����,���,L?�E�Y����H������//�D����4��d�=-s�'_����8T��
!�)�����f�j�{�0��W���w���K$�a>eg������3�V&������Ll��z���$�qf���yf��$�-��y�>��J L���W����	4�{j��1m�W�B��D��������|g\T�I�&����_3���v�6bA�4N2>��w�[f��<����������5af�G��w$�LV&�v�g��1����.y�]�����E")�����3�'��D�L��_��f�������
(�I8��=#WUH�sy���q�1�b/���
IB�L	�Xv2�7~������)�+��F�%��
��X]�2�^�l9���3�,z����H�2��V5#G$����o�E������&�U��D���V� z��J���o�3k�� w�8��:�U#y��0_\��dAx8s�4��0PT��,	�.62e���Ae���(�)��HU!��k�J2Z�J\O��F�j��&���3��(�L�]�[����P��"]��(p0����.z�m�[(�S���&7)B��PD�#$1�F %��?�#�u�HD�]'�g\���
�Pw��c�:�t�aq��r���*����lP����L���^^��]�X���LA2�H����i�_�8$�a@�/�$��>�MC�5m�:F����(?d�\>tK*��$7��d�Y���?s>N�����B6M�*���~�3f���!����0?�EO�G�&�;z�!T`�������y����@e^�f{��)^�iL��1A��U$�R�����W�����PP9�)�����p���������P']���8�����������3�(22e:��������@�*m�Z����mAp%+�f�G����N�|�y� @��8%+N"I����R�����P��2���K�DY���N��$s	A����l��D^D+��������f�3�]_��L��0Ot�LDj"j<q��fl��F��5>�4���#�>�u�4��,���Sq>*B`RM�v�M<\B�=t�FqO���p���`��WG��������!���;8�h�[P�lv���}X��Hjwk����l����S�q���i}uAt�uAG{V����J�7Qe��M%��
�hN�
����WG0�a|�����:�<��B�3VCqJ��������9�q������A	����
��f��/�%Cw��Z�����7	u}�BJ��yS�E�U�ZeR0]�*��>(}���+�]�X
��
S+�K��w��Q��.(����f�+�O�,�9����|Y}�0��Y��z��f���U���J(t������o�r�o,�"�V���]�*�� �lN�Wb$�~)�p����.�N��h�W�l�Lb�a`6U@"�����o}vEe�[�J;,�0�S�0�i���6lb��jW2e���L�!�g}z.����?�F�m���q�}{����S�G�}�Q�k���?~���%W��\]k}]��k���W_
�K�s-PG. r, �������O�M �3k\, r,�^��{-�;x���4o(p?K���W[
�K�s-p���
H��Pr,��}+p,��@�-	9x��Z��M
9�rSC��5��kt�����!����GP�#�����1�]��)��_g�;���y�r�;���\�������~�8�X@�X���D}��!T�%��K@�%�;��K�GQ9������Y~��1�h��#��'w*���d��{][z~[{~�&rT�7�'����mG�����h���b�{���j|=�J����1[m��c�,z.�����6h�Q"�8�6l��
y�%l������#����y�%l��cE(acG,B�{m~=X�F�<\��V��m��G0�� y�%�^�XJk������<h��V�����H6B�k�����Z�t�l��rl���k��rk���j��?:5��?�4��?�4��?y4��?94��?�3��?�3��?y3������|��\���<�������������7���������n��=������'�%�1��8�7��������s��Z���7��e�%�1^���D}��!\��m�n���nKtc�D~��^-�R�g�#�e~.Y��'#	x���������S����d�&���Q�a�����B
~���m@������L ��^~-�����`�Y>�*>����;��������G~��O|���FO�|a�[�����K�$]3&�����YN���f�No��@IT�!r:O(4)S�6U���_����\�?�B�Si��Q�!��D�6D�h���^;JcT���7=�H�|}R��V�;��[��/����]@�}?b��x��w��GIIE$����%2o�}iA����h�j�k!!�rC�2���H�RM��T@�����
;;��D�/�����i��$�DY�2�g]����Lbj�?�g�+�`/eo�@���fXM���-����8s�>��ST�L��"�J���}&���P����_.K7�h����:����xi6Mt�8�uI��xwYP��O�N{l����j!�9�������?��:���b����	h#3��DTk�%�+e�{��]z�^{�}7?��`P�)s��H�h�&���k'��o�����tp�S���"�.��mH�<��v/}D���Lp�-���jp9�W������Dy�3�3�F���c�Od�D��gG��O��+���v��M@����=Y��� �Q,�X���l�v"���|C,fb(�yM$r��/n��z���|[�p���hY���
�?�����D�8��[���O
?����%��eg	�mD#4���4!e��qWO,$�����w4��v
D��k2�D�d���=��XP��
�	�/��k+I���h.J�Y�?^������S����8A����+=|����DJ���8��\����
�Q�����^i:T���tQq&=��U��q�
k�
o������$�����^6��\fO�C�Fm�/�G�aP$��M��������H�����	`{:Qq
�����N(��li������""1mDp�����y�b;tx�\��aC����h��;%W"�yg<��#yO��D����n@n���{g7d#�4x�������������O���V9��5�����	>;�NUKLS�xH���@>��~������� b��pr��c�+���x���A��Z~m�J�_yh�z�I�l�w��H��;%�7������;]��YQR�"l��<�b%��"��:��3@��3B��~���s�az�<Q���ufC���u����3���L��+K�I8��:hC]~l���|����Z���,�L"mX�c���B��y�����I�aF+���g����Q&�R���V��������
��JP|$��>:�$d�Tp,��YhK�w���	k��������7�x�
*�O>9�l�����e>?+���gC�z<@�b�*I���xQ����H����9��~���� ��AI��x(6q���C�8	H/�g���t��|��B||�!��l�����<9���y�gG�"�!��Eb��<c���G�hL������L��<&}�\B����-D~�M"�9�����b2����Pe=������m/���`P��F$�p��U�n
��.�}i�B�SHX��:�6���u�x2����hD��P�E����SN���������2B'��G�,��]��gG6�9�l�rc��A��,���(��)��\l��E�b�6.���1o�a|I������a�\5f�,4�4��1�S
�m������m����V�P<�A���<{h�9����R��x���s:���C�f����� p����NA(��\>?��\�G��5��[U���THos���y�������0b=6 ��A���!�A=<=���jI�0f&.W�Ar���
���7y��|1wI���L�_��d.�B6���m����H���G�-���Z9�UV�m�Bk{q�Dt�V�`4l]�����@��|�H*�~pa�;��]W<C�t\e����-$L�LU����?;
��b"���b[��i������q����Z��b�W�������7�@�_������,"�J$2t������b@������l�B{�;�R"@J��^��hm#A��`������k�� ��F�qx^t���N�u�[���+:hKn#�KF!�w#`�z���H7�<��x�%����R��3�y�h}{�
��v��Yu�J����$\j^�%	���s8�W3����&�4Hg�Q�t�@V���x���=�-S!4��^�f��$�!�
�pb��ou���Y��	��L�%�����>��g3OY�H��p��
�O3)���pn����l�~E�z0��f��
�x#}Bk7�����@/O��u�N�����������Os"���� ����MW�Y:��������*Q��5?�n�h<�u%.��N��$6�^��4��_�6���O,��3i�Q����bcd2e>�%�6�t^{,d����%��G�H��*�&�Ei�3�M��	2r���T����q"5{���v4=��8�~7�Y{R:���f3�e!�������G@���cG���M+�
��ujW�c�7$��Mc
�6%�
+
J+�.J�Y����{���~������~	������_�~���FE9�0��9P�.y��e/+�c�����X;�
M��x$��h�74���������V$2vO���#(L���8�5
,�Jf�`"L���n�?+�Z%��JF}C?�:�E��m�[���L�����~6Uf}U���&IZ��������/��H�l;>3��}!���oO��l����D�S��K�e��8�Bo�}���l���7�.��XP��L�qp��Z��R��K��m��u3��M�v��1��)���}E/����h���e�y��Yv�|�D�>`����alg����;Z�%}�Y_�W����?V}��������4�yRs���l�,;K���d�=y����c�l�r�j:+��h�������D~�&s��vn�$��tk/�T�3<�����<�f���X�1Vyy!�e�����lj>�_���I�����?�aC��lY���{�8(�z���&����Mb�/B����+&\	�bG�Y��o���b��ks2AWE74��5���G����x��<�F��X��A�h��pAcn�]d���m\����F��I�Z�6��f�'�2"t��n���)�^��o&�^��7���)wmT����y�j�M�\;�Hm��W�(�T�R���ft�|"����7���n�\����
p�n2��N����%4Q����:���f`�h>�yt���T�7dBZ��9������^�@��zw������c.�����VL���C�K�����l��\��f��8�zc?�H4��}c��^@���I����vtslS'����f��k��HtW���>��G20���^�����{��}�@��	�E<8kQYw����'^��Ry��Dik�_=����C��������������u������a���
>�������_�o����_f�cf8P�������K���17C���G@���T��+���"z�[eES�Os��tC��}+*�R���P
N� X�x�o�?8�S"��H��mC�)��w�V�*#G�
�	c�
��lJh�kb��?�	��!�p4�$�����f@T�H'q7�@���p�v�J�����}o���WV4���D����% ����WV4V$m��>4'6]Y��1�p_zS�V2����d�g++*��l���v>[Y�T���uO�{���RN/C������l-����0z7�_�y�nESn����L���x��)�3x��	���'�WsF�2�]<e�����h�AO����zoE0�7ok3`�2���:J'����Lb*��^��3	L�&C�?��O��"(���K+��5�4�R�GrAAfoY8�����{^:�����.h�'<mh0���DI�'���~v$zUco���K��DB���:���������Bx�5����{��-��V$=p�h��Q��-L�{e���,��Ax�+����.�Y�u��B)���cx��"��9Y����x+*Q_e���/lif����`.w��t0W,���\���s��^��>|~�!<38�;�!���x�B��ba�w&D����q�I�q���.8|�p!M�u�*�x�+* 5�g0�7������c,��p3�oV�Qc�^�1��~���"����B��Q�z�;�@��c�:��6��m��F0�������M���Mmg��M�����'P�fgB^�+,��wV��������n���4k/��f����� |����m�%&��9��/��H�����"���~�����Fb�(x,*���ooS���$u2��dp,#��n��!����L�&��7�7V��'����7��w��K"��`C	���x��}��Pae�����)4��3�H����H��dg���T�C��5�6o;��!t!>�9�����Z�9��S��>"�;�!�}�`�"j���"�$b���Y�]�!��:t���p�vj��Y�81����_���D�U3���L�+J������t�`�u!�X(2������RS�Y��3�������O@��7��s"i�C���no#D��DT_�F\YY���
��� ��[Y�Nu��)hb���x.{��~���/��6C]�N�����Cp6
�O!�
�C�Q��{Y�|�u�	Q���4����f&t/��?A�
<��� �m��X���Dw<=	�c��B��(��Iw"�!�Q���,^d��}���ma�@��bL��24*�,��
���/��X��n���@���]v��]t�_��0���i�qb��i�����
�8m��������>�?;��D
����h��[<"!:��������!+��Nr�j"59����7VB��	l)���^����
w���=�C+���I��l��V>;��R��S�}���QrE$�����m8;b�A#�x�8�arN&��6[���^��UEFIR1�N��3	��zqM�DC��0��O|e�&���?;9t#�E7Z�N����G��m����"��y�!�2��L|206dX�k�|��T����?����L��H�.D�� t���;|�R�N>�.;�|���eK�o��J�B�m������j���L�y�pw&����u�$��K��,����J�[/���e����<��������t���
�!��X{e7�T7N��7B��C4}
��X�7�������M��q	���4����L;���3�1!���*�����j�3��]~BB�CmA��t�~�1{�����������������Y~���G�p�Bb�8H������@y��=��v���4��;�� �)�S�����`�JeT@��%�J#�X@��8u�Wc���|����2`�:y#u�e���\���[E�XI�G�U~�Z�p��j�w'�dh��G^22i���Nv�����F�o8.�V]�f0tcI������u�P���J(3�#�I�H��w�K "�U�I�$��������KM�������q��;��&��2�����6j��i+���uR�8	=��E���/����c.n8��B������-�����O�v&����|�E������k�H��P{zBD7�WU�<w����	9���:x#�R[��Y�l�T]4���L��v�i�o3�>��4���2��$p�C�97����b_����j�2* ��r����)|�|~aB0(���'h�L���@~���{p�d
�B���
�`��������H��lpn�{8uup��
pQ���X�[�	`��Ie��a�������|����t�d�{���!�{��|��Y����LA�@>����!t��d������0����i@ �|�*1!D>8��7b�4��hi"���z�?gt*+QQ��~��������5�tO^l5���hH��HpQ������_?��h�����n����_�H���D������
��9OoG+�s�a��7o��Lp���Q���V��;d�����aE%�K�z�M�����GF�VR"8]�*d5g���Xxa�D��@��[�u��&� ht��/�f�qZ�?������n;SR`<��"82����
�T��{p|�0P�c���,q�n�������������0�Y���0��6�����Y$�=��/���=018\>�
�q����L������oh�	��>��	fY�}E���e�{�_�:�*����A��O{�pi�t�:`�bE��]�@�-Rr3�b�=F�\6�(���!�{}9�qfcQEn:���:
nXZ������C�d!t=`�4Buz���C%��Y��L����e$�'���G~��;6&��YG������[?�� ��VP��sh���l��JB���:�����q��t���!�3�����.���e}����D�&����=jN�����W}$����1yb�h�cp��l�\{��)<dSl�%(�F4���/]!�s�x����e��4��4m�n���mGpeJ3I=�%
,�s��tz�qK��Vm�C�9�4m����t&�a��{#���!�7������#D3%�	�N#4����F�9mt��p���������&:M��+*����Q�s�5?�J��V&�4����(�KIg��/�
U��LPm6|vT}��"�;wss�6_�:�����k+%q�^N:.}��-�Y��j��&���,G�����%Z�����|�U��$r��S�I�u�6������g=D�0N�|����Y�$���j�����[i�������_X������t^C��:��Nv��F�0|:X��Mg��e
�Ag���(��������|7V���>�p���U��((��1����Me��GMD��>eg�nz�Mb�����d�3m6*F�dFU�:Q��{�����R��:���&:d6�a_�Y��$�I�w��"B������
I�:����l�����'�|�����j�s���T������&��l����m;z-��{��/L3E�6���7��h�GA%�k�K�������&�&s;pL�z�6� E��<�ugp�_}��5�29�xz�j#�������d<���A��YImbr:7��21��|���Rb������
n��W�A��2'Y������VR���"��w5��V��z�Uo�����������!�s7
jB�&��������<��N����^��d���q<�3�\�t�7�w��������)��2%
j�#��t�K��.����C��N����O������$$�_Xa_��Bx�:��D�d5�{C�:��Ng�����y@Hn��kP�`��)�����&����F}C�P���i�P�s��0�<Y�81���0����s�9�o#z�B_]<�4��^1���0�������D��F�}�fpI�����,���Nt#�4AQ�
 zsX����G$��>���x��0�>�(	�wD���#�����gvbG>;��Vv#�i>v�a+d�V����1$�c�j����S����l��"([�����"��2.���R�7�����xHL��kb�\C#"�[?�v����!�0ypS��)W���Jp��E2�]o�:���y���L�zu�f#�T��Y��m�(#F����n�4�����"���G���}�5�pd���z���g��h�
�����[��<4'�V�d��X�FF%����bs�����A��I�E���?��X������b�I��,^v7��V����� �c�51!�D����eV�;����speR���~�|�i���K9l�Vb�Z����o~u�l�2�����
�������2jW��(5h,&3�@�m��7���	t
����i��2q�O1.���2!h����B�$���
�^_U[T�b�K'�-����b������</$Y�������P#`��4q
�_n�oiK��7G_���2?0K�2'T@���2+��ya��e~�L�2/u~�}}�[a�y� ����`�)�ct�����k�Z������R� �C4�
@
�s2�Q4���.�)a3�7x'd���QO�
�s�#0������LH��c�	�a^����m>f]�r�|3��f��a�
�s��:�a^jzg��p�*���e�P���e�������F��������p��p�u���*��5�������A��h�����[���V�Y^�Vy�q�t��8|:v�|��lH��������H&��=�q���p�,?q�����>T�
�)��OH����y�Ww�"si�/�u���;"l�8����0����O�<Po�I,�HS����y`xbL�RKe��96pY���ud�]���� �2NUU�T�8N�.��8$��������E�_�mH��@�_����gds@�!J}�l�'�4�e=Gr8�_�N�5$�:�@���3:>�pb���Q��S�=*����H��D>
�����������8
L�V�����H���B;0�I#3��v;�	;�N�9
�����%,d����&���x��eO�G�:+>�%4�Y������,<����$��@��.� �����������4I���V:c���������y����j�j�6'�3�)�-7'3D|v��3�@8�U$��I�^5����u�_�������8�@�����2����yn|�� �:YT���VR�<��n��_?B���/�Lh��1�$�]��Cx<z�e�&�l�����b_xtm}Ap�^����6"�x�����{�WK��llx{�f�/#>����t0>���5������A�}�K�{��dh�T��;V���A+��yu���iMD�>�������K<:�Q��S3wM���b��>�����������m�^������+)�_ ^u+y	.�w�*���~�@GC��PWT2�z�>;���	�Mt�|(1��;�)'�Xl&���H�n_��iidT�N{j��6������4�t�2s10��������C�X=>�n7m���OD�*�'�o����������O�����3����������Qa��*�
��~Pk�����A[Z��8 2�|v�[�!|v8�c��9����%T"i��u���|��ZD���������a������'���4�"z�T���U8�����)���w�1�SH����+A�H�_��q���h���.�.u]�)����Ej���H����I����>lDHbT��;#%��W�)\��.�
�gC�o���4�p��Y�4�V~�_!�����J(���/I��r^���x'	*�:Yu�)�����cU��T�3�k�h����A����5V�(i6��@e��L��{Po?���2�ui���^Vf��4��uH�j��E%�L;3�������I�����}x��Q�2����I�3�9c"�\+!�}x�6�4[Y����S������^�cSl]^yN�@��E�4��5�IT3�r���X���/,����nUj��\��87	����������:��:'-Y9��w?���6���U[i�����V�D�4���j�|��]Q�������_\xTW<R1+�`5N��t�Y�:Qf��`b�re����=�(QX��hQ��HAA+��_��S�7_�����W�|�Y��Dz�jKtnd�Q���b��CzZ��
����*�x#.�r1N����-�M���&�m���{Siv�G5��g�b�rm��������~,1�
5gl���)U[��PX6������{��%���3���z<�K�5�I��E"���h�Cg'l1�Y����P�n�����59�
�����A��;���:Y�����Dkw*9���%D�%�y>S(9��MK�,���t�h?��$�w>����������)��|��=��������������w����w����w$��S�~*+��Y��%�6�l%�6���\GK�A���s��h�:����������K�YS��5ik�?� ��,����/)t�W<g�'���5� �_��/_����Q���)����}�_�8���2�zg����������������c���Y��������q�oy;B�3�^@�,�nh|�P���]�Z��q�N�^�^���ww�K=�}p������2A�p"������n&��d.��_�l���b~������z��s(|D,��<����K��xE�z�,o	�l���E�L�v��h<�����<��"���8s�]8����e�f���s��T�������l�a��1���'��Mq��~W����h#S5_����7R��OMe�-l9K��\eSsU}�G��L�u��&�h4������`~(5�:�%�d�r��������?���8���p��&qr$�������x,��&@^{�%:h�����F+�7r �a'?]�C�b!�v���\T�)����6p��eC�����_V�d��}s{���dBE3}+*�:}��$�]H��\K]�'���}�G�A3��|�
���s��a��*�p�������J��Y������0!��f!Sgz������������u�
���g%I�9�$�����0E�z���#�c��PmY�p�g"	M�`�+�6����Qd�k�Kl�������.5y��8xCC����\�l8����4lh�"ya3]�|C|:���
�������v4�w�drk���V4�Ay�
&6���(�/�nn� �rMoCCNW�r �$b,M��&���|.<�����+��I��4��/������!��;^�����V$@����~�|�b��(�����LDe!���r��~��7D�yH���8�O����c��7��W� �I������5I�����'�����'e��=���M�p�Z���`�N��W4��C�p2�t��@�j�W�r��L������������1a-���I$�r5�f���J s�7��Ft!R��.�94.���ybVH���^Z��,vN�A�	@5�&����*B�m�VaA?�����W�UW����HrtX��q!E���p'h��nA|��<�����~��HEmx5�7s��*���\t���f'�������-$������$��	������:���Z��s�M0��k���b3�MP���d�s	�Wpr���ab� ���h����6#���*�����VYG�Y��*���b�M����p\k�2�6x������w>i
�s��L��D���{�R�J�&wWx@&P��
H�gd'
��lE���(�s���l���w��O�!�V�u��9z��ngH���_�:1YPa�T�����t�+��Mv�*&�$X}r2�i�1O����!�/q��A(�W4�C[:�o������E,������o�;��L��s��k�����D^�|��k��
���;	r��K�m�����9��tY�f{\��(��Qp�*���^5$+�����Ly�wr�Ee���KE������y:3G-`�4������f`]jC HG�:���:��z�w�@5��3-��WYQ�E��t���
M�GkQ�lq�4mVhZ���X8#������7)��'����	N��d\q����}tAh/�S�-,_6&u��������F�i���K���,.�����v�h��;jF���N#XT�tAeh/����ynN�V4
���@�^�x�����~���blhr(.�48s��D�P&�Nl����,D��:=~���a����y����47E����(��\Ll����.�&T.P�(f����an�a ��������c=�h!S����	�^�'����%0�^�8�������K�hsi��H��%,D����U�ay����!�k1����:�	��aN��Nm�W���~Q���.%���i��
�J���	]s(�����`�4�/�ts8��{X29`�Fj*�U�<H���$OM��������	���j�7]�2�I2�����A�F���P$�*����Y��������r)6�gG�Y��x��������K+���fGB�`�>;����ks$?�/�����^����������m1F�b�L��V��1KX����z�����?d��c��T���x5�%�$�/"���'N���WDq�MA�3��ODt�n���
���ln������%����D|m������F����O�5%�
����3�����7q��&6 ���	�����h�{A�������l�����������|Jp��"��#��L��p�.;K@��� 3�+��i���n�3�����d
����(OAGo�Yfg��	v��h=nC�KM���a����El'�L�LC��`����b�t�J�1�`��2��M���!��HR����/�{#I��4[��ub!i���.]v0��G,���'C�'�e3�A�hz���?es���\�K+�e�LP;Z�a��}:�[��~�xV?����V+[(T��R�i��h�hM|��,��F��-H��lh�}���;8���!!�������a���H�������������~�=�S���mN&��86���gG��t��2z���-d��*'�^}�zw����!����z�VmAC.Hu6��
DY��pY��`��q��`2h~QX���2���x�F�Dw%"���_c=@[%�q
��,��;B��������H����`4]�J���i���d��R�"��Y����N���]c�s�2���f��Gc�n�
���&�X�D�fx�|�����t��Y�����H��xN��u{(���-eCO��@��^���:L����iCC0��t_�)|���5qm��_����/�Is�A	56$@c;���KGX���c��y	f!�uP�X����	�0>�&�)���n����+�v��XH�U��3�.���/�q��h�3��J	27��W'��Z')�&�������[�NN�2�����!t��y������w�|��F�
���7���
�������
�D��f�����l��
w��Vq�������?�P����9;�U}T�'W��8��HE'���0�~!��!���u��8_��@F���|�6h��(��Z@QC1^UX�S���Z����tJ�h��zxbC�fTO����	lo�X���uY����S#�L���!���P�{����\$]��/����|�s��#o)	�������2��O�9\�|	=���3�a[��2��D�m�%q����)[�i�EN�Od�N�{#S>/W�MT�_��������!l����.ch&��;I��lz&���6��ng2���{���y�����;���=\����9���b��B���g�G���N���eP������UU��t��c4���{�V4$���J�7^�|;�N%����9�)^fQ^4��)�F?y��u,q�����ztP2,����9g�S��Z�)6���	|W&��_�4\
j`DE�EO��%o�b��X�U���r����"l;�o	]�{>�s��.���#;4��8U4��
[���Tq�Z����l�3�v?���b��k�����d�H�<+�az��f�J�H�]�'N-�^z��\Y���E��X���R���m���������S��{"[�A10����u��T���U�������<k`33f;vt�Ib�yT�s�9&M��58���
I4�<�34
)�$���RM�%J��	��GT+��� _�+����1 �7�����	1M������el��{��lvk�E�iT��~8�cE�)�h���-'���j�!����wb�L�~c���kp�?��#i����a6�Vi��$���B$@���{�����F��2�Q7c3�DUg�<cccB�7����L.�)���>��y�]5�
AhI���_���	��������������y��x]��ld��S5+�Ld��7�eX���Lo�>5�!��H��`��Kf��P5dwjb�v=��B���'Ig��B�����pl����T��CbB�>;���J^_�������a��}�<�(�K���G�
@��q+�GQY
�W������9��3b4�1���(�,�
�<�*-���R�] z���J"b�rk�e5�����C���=�-"a���O���UO�#+K1�@�5���1!���^m.��zj���<jv��gT�C�K/||���Wi�_�c�@p�|(�]�������j,����_�����B�j���-t�\d��d���[xy$���b��@L�_��w<L�����������w����;n��}u���	����\������}+
���� K^!����RH
�YW����=�n�����^��?�������kfgt����������SD>�6�[uC�RY��(2��	�6r����"aPCz�	$��oK2��y���Bo��sm��C�
���T	`0q5l:��t���O��6���&��-x	2pm���$O
���;�����s�1\�)�5 ��w����3��q4���$�J���Xy��~��s�5���]��fM��^�_���XC���&��>�]6���y�m��v�9�o��u��S �q����7���I�g�q3����bU���2?/��f��vA	@���N��WY���k�7p@����oE�Y*t_��+�(u�2mM������N�#?������N,��|�'D�[N�5��l����EG�L��d�	��Hw��"�����������,}��������!C�C����b,��td]fv�DQ�O��2�</��W���2����~�HTr!�N���������S��@thXP�#��^�M [�Bt�Aq(&��H��Dj������D�M���L�\j��6������s��,,�����$����"��S��O�r8Hq���RQ���/Y4Q��C �+�h�U�q�B���gG�Xt6�
Ow��2��,�KFx������3�
%p�:��A�g���e0��
�q���$�7�k�Q�Vc�(5��(�L��`��?_����X�K�
�Sv�.�n!�}U{�����5�T�=��oC\�L���}�����d���vEPLI[nq�����h��}[���������`���Y��^P����c��?��H��*���<�o�"�D4����A����������gRh"$��Y�y@�gCh{��+<��
���L�p�t�]d��lL����qH��o'�|�s�}Cj����T���s���� ���.�[t�����������MAR�����V����"8t
�[	{@������)�Q|v$�
�����a��*�L�x���Npwn�!*��B��b1��Z�J���������&�fA���a�BEI�D��[ J��k�}_l$Fu���PA.v����wwo5<���`2�nq�����r���>�F�1Nys��n4
��j���O:b�><O,���<��{����,�����w���k��j�:L�����}��Q����<��������+�<�
�7��$I�"`�
]����$�M���3����R�:�� z~A�"N��������I��`��auh�������xW�=�4$�;�����.��#Li��L]��l5]���	��:p���w�G=�h�1���t��+����|od��OO�!Z�\*�wj��oW�$"����N�d����P��k�h��O�z�$��4���E��0<U�;������W"q%�/L�~l���S��	�F����DP7<��C p�!6"��b�v��+
d�&�9�}Y���^6����L�y3�|j������64s��8�MF���-vp��bU��8�y�|ah3����8���&����L���yHo�KIT���A��@5;��d���j[��*!0���9��|������7�G��BR�"����O�~D"���w-��B)���:M�a���Q��^TbA	X���%�z�q�f�v����@eT�8�W�;`j�����8�<k��#V�S��Kz�;>6�,{x	�����L��;�I(����������v���d1��P,����R�����y.u�*=�[�`5G|A��6�����O��3	���^����v,�4p�Xs�ZT "s������j���%$@�$+WU�n���P��/�FZ�Nc����y����wX�K(4��Hd��lP6�A������"�����)�X��)M���I�%[���Z�T)�_�j��B��	`y����E�tB>�SS�����	d��Jds�h����w*�R!QM�B4��HDn*�j/o	�Y�|�����h�jS4�]F4_�@P~i��x����t��x�5��,d������j��a-��G%r}�G�+�2��e�5l�j���J`�b�~�����k��W(�0�AM��B�W��Qx����K���m��(��w�x<EX��e�vE	H�V�4�J�1����n������]�{U����r����~�����S���p6�Y�c���v�'��Ez�.\Ub2	�o(��J����L��wC�8X ���cS&�-O6�57���H�CO����v,�(*��'�4��spG����d�*�,����eg��'>��������5gv��bK������Y8�G���,}���EH��@��zCH&"5���f3��|G����
{f�|u��Q �4��F_k�H�^vG�g�o��D"��DO9�4h���%���i������py�WT����oi���8�v$$Sv��7�O�I�ik��x������A�l�0�_�g�����LM��>���!��)	���3�F��Kj��;KD-�w�|l�� �����0�{��]�<!�v.@[na�+���|���d�8S^�3B}u�a!R���(d��'6RV���)�A�a�m�U7Td?��4���Y����������o|V~������:�q�]�+�����{�_~3n��n����� ��/��~\����T���~P}1�9���f�aX�a�!a��m��D��2~������{#��,�o���W�X��g��4�u���YQ������n=��
��o��c�R)�t0l2�:!��Q�	��!�g���|=������y�����Fpo���-��L:����m15���1Hz��b��a��]��%Z���?�-��Yc��/>V~�p�Qq�
I���[���+T��6���H�|j(hE��
Bs�r�N�&�9���"[���t#�oS��|� ��YK�Y�2�������H�{h�����;q�{"�o.�(�����w���M��-~�H�P�R�,��.\��r����`��c5� �������m�,����}��o��yAa�h��
��N��K�7"�����e�����|�w����}���a��c���V���H2�����`
-c?��9�E�{��+q�>-��dn�,���X/#A��R�E�z~�*?j�"���0~:*�H�  ;M��L:��]�eg�t�����8��$�����-�U��\�����x����+��KbF�w@�m��A�H\
�v�
9�P�J��Gb�/i�,�E�DU����U<����F���y��9��	���W=c����5�����\6����	�������?���?��o_?m���K=�����.����o��.#�5J��R	���}����x��J@N%�<7�y��$�3e���m�gG��on%)������eg���4��'�=^��F�,K#L�o�/N�Y��%�4��G���2z�z8A&#�ez1e9����)c3�J�}���������m�����9��#-{�^����DVDl|�&����������O��	2�w���rV�&P���2�z!k�����!
-{g�2��8o�{"K��1��D�N�x���G�m�]�4I|`U>m��d&���@����Z?��D��
%g���L^�G��h�[�*(
�-�Q�m�2N������gA�\����ON�\�+�f`�U��8	M�DP���a��(*��-�������hG�lDr��\��\��=����J�EH��	�l&Mu�2�\�����m���O����BT6[z�k3�$%X��`���tA��NP��&Z�M��5�5m������`Mqi��L����$��PkZL��4���6	�n~J��M���R:���.h���rP�M�B���efL���t��QT�15��:�D-�%/��k!��Y��(zW����g��sw�]�5���=��,�f�A�f����fo��4�����)����t����2��)m:�M��� ��6ZI���H��Z�%E�;Y�M �7�l9������d������2�3k*�1j���LY�#����Q�1�� ������t*�[�-5T������.������Os�"d����E������l�i>�\rq,��1iv����E]��s#XT�t����,;�Y������"	����/��MYQ�����t+�Q�vU�������&R����|�q�
��`��?�F���hU�:UjTM7hU]�5r&P��X�q�j���"Oj���@�����(\4��L�O��{��]����8>����*Qq��0�����%>�E]�svF�Z�����0�OU���*P	v�A�6����
Fu!S>�=-�D�;�d�o_@�Y�����;���e0�C�k3����y=�=�m�uA���-j�W��c�����,�iVa��B����A>�L������1x�'��X�)O�s�K=5��6����'������<�	�{�=��+�}_7h��LY\�)��9��M��k����;�u������=�����h��!�C��Z~����d���L�6��
�"���o)]q�����$��c���a�x�T�{C	��|��C�/�H2�w���T�	5��23Y�%1;S����3��j�HJ��[m�~����p]H�6aO�Qd�&`�1�w�y�;Q1
�P��=	M-� �����P��:�}�L��Ld�6�8�������l����]���\K�s�,���~��w���fjg%g��sx
|vd�,�	�OU��j��y%��U,Qz��=gn�L���-�q�V�f�0ah|�������]L�`����7�3��B������is
���O�(!�N-�}�	l�5���i��$4A���&'��`��L�T��w���^����>7N�����.]Y���6lH��1�5�O*f��%����%������X6,9�������?_�OeB��$����t�&��bf��4�u�w�7���{�/0h���n�8&���.V����T�3��>T[7$����I��@,D��y����k=#��}F���5�<���=h�n�!�-��1m����qV�Y������c8��H*]�\��������X���s>E���������=�'=h��!��ad��{���^����u���������`0��%�%�_%4�6�l��1I^V$yz��$E�T�K�������pCc����Nh��}�7x��CE�6����f�B�&O�/�[��d g�G�j3&��_�Z29��nA�^�?���Db	�gS�8%���D�hA3a#<7������Iz�a���-��	�"5��$��%�9q��i��"�k��[��d��S2~,,�[M�2�i�D��~�	8��v@�9�M`�6�(�d��$7����k�z�|��LK��9��}�,��%=����u}�LJ�-E>ng(��l,`��5��&j��e�D�{@�;>�P7�����r�82~y��J�0����6t��'�����&��$G)�x
�ev$k����'��'�k�V��eT$'����n���e yi�/�������J��j(�
��������,t�$Q�����l.[�f[��Y�`�����LR=���I,k����������h��9��#%:��As�|�P�������=(�	�
�&���Fe!��G=�a&������,����������H�#��Gi���KH�wT�\L��2@��S���lc����%�e�g�8�??}���j4j��+����/t���Y��,d����TGL�#�4�����(d3����5Gd&��K�I^���Db���������*�-�[.���
5���!	��1�V]
]+��,�B$��O�$��`w���}�0+��������A��e����)<���
��~��fr�h�5��3�ff�IW$C;��G��H	�nAN���Xs.-�w2AQ�(�q����dk���db�g��>�� 1Q�J�%]^Z���+ o��o�/[��}u������K����1�R�v�����6k�H������M������0w�N��=�}.6�a�S5/D�?����Gr�4�Xv���+v\>��T�2Q���u��]��{�Z�������Q.t&�f��i�e_�,��|�I����K��E&���C��M�!hc�~3����=:�Z�[�T�HV��
�Q��	�l�&?���j��$e��:�v�iu�1u������VD������$����~�n�B$!`�%��
'nz��fdrS�@B2KX���H�QM��
�]��}m��l���#*�9��2�~����w����[D%(_/+
c�2���r��x�]�0+
�2������^����fj\��Y����>!�Pf�k�rB��AT+Y��HY���i�������<�����%���W�y��S������]���*���w9�����,���,B!ibeU�t�@���ok��t�e:���@;�`B������$�H��m\��Y_>�d���q��#��Y���7�|:�R�-L�j��Y��L�i��hWw�+G*����'�G��o���or��V���-�~��li����%&��H�m����������jr<��`���]c�B��XY�
v_����V��k�����D�_�sf���zYeU~�B4dyR������z����>L���.���j���'�p�Xd��
�D��M�f�S���I�-(�Ir����R6�2��(�at3u�'%�w��!!�i��<��v�������R/�W���;�Y��7B��+�/-����)��>Rb��$&Q^5�hB�\���u����;S��������%�=bqUdb���3��Y&H+����[I���J��k;���."&�f��n�K�^�t? C����],�����et�����VAy��j����of3��-��.-����L��_���.����L����n'��7B�3��
U��U)���9
i�,�� O�Wj�~�	d]_U�S������ �������7�_�%:<���}{���aU0x��T��^&�V&$M�d�j����2B�:�]��R�7)�3���BAnRNm%i�V�y5b���;��%R�6�5���[��ncA�-E:a����/3j�0�CEI������F��/j�_�],��>$����z�L�#���C��$�*$+�./��-,�����8@�M�3���r�����a�fw1Cl gg�n��������w�R�=���%&�fc0tS_w��x!tj��t��(���������]�Z������/�mL�����@���8�?��_r���U�u
��j����i��7>u��X������Zq�6�[e�.���xQ"������b}�����G�^`�W��������KnK��������t��"tf����
���T�����M���Y�g+���j
j�����Ir4��F������+~���g-�X�{����7�����&=�<Z���$&�����k��ek|��`��??���~V��=��C�`���}~��?>?��|�m�_��]����L�,b�����\�W�\�|y���m���\���)�����/�.�9����2���v~/�{����r�r�r���ry;��-�Z��Xk��+_�����.�.�� ��#_��=U*�p��J�8/���r�j�:=�xU�pU&*�*�-�j��_���=]1^���u�����"����u-}��kk�>�D�^��zOU��Rw-����o�����K���"��=�������}-�����i���p4bs����.oY��#��ci��H�k2p�����p�%;���K�/o][�U��zV��ju�Z�V��Y+^��N"��y��b|�����x���m�n��p1^7K�����?\����.��f��u����������x����b�����^��t}��L��b�~���z����b�~��s����_��=����d��zOm��o_�/���{��������]v0�E���/:���}���]���e�b_�-���k���M�����Yv,�E��_�/:���}���U��~e�b_�+���[��������Ut!���'�N�
���;z5y�������]�=pp(�z��������u-}��kk��
��S��h�s��Z��A���G"8fQr��Z��������r�N��������D)�e��I�;�Z'"2�e8���`^d9�<�"2~�J����(����"��>w�iC���D:6(�������8{����o��b�����*�/9��.&?$~�<9Hs�=�	���3#
^�t9�!H�#�Z` ���#^qA�f['�����2A�7�V�Z6�o��]:�����a��6.$��M8����<fGI���"�,��hA��u�J����h$d�7Q�_����]��d/Q�>�1cf�oU|V�%�9�2_g�����6�qx~���<�'2��)�:�� ����g��������2@N�,}l:����	�DyH�fE����t�!���S���D^6��NJV;���bb�c;~]��Vb����(7j��T�7`O��������:�13Q�C�Tf3�#"n���:��0t*7i�_vY�%Q��j���l'��@���� ;&��N.<+�Rum����S
��l��D�V%�n���^`?
���.�O��a�l��\$bP����m+����&��oP&��(Nv9�J~r��g5����D����^�B���YS{�@)G��F�����`���5�tT"��.?/�������9_;�[{;�;fK�F�$���!�Adtt�N��]��*�w�@����������kq�����U;�y ����V�E�A�_�TW�j
u�����(w.r]I��/�5�����9e�/�TY�a�P1��(��6�6�;������$7vGDqNw�G�����tlF"�������4`���tN��G������)V8��79��Y���V�T����m:+�����J���pd\>1�4����$�e�����������t�R������(��tb%���	"]� �
�{u="��)A����A}E���zqYe�"�&����ER-U������"�K�U�7\y��%Ky�x�R���\E�x��(sgA���4�d
OZc��b��"��fv��N�'W�NN���^��m%.c�����,k ��lw[�|�2�j*���'_d`�i�)�0�M{�HB�z_k�������t��M��>�C"���Ux���=�,�-]�J������
]��"���9��w>-�_�����w��\��u%�xs�*��,�^���3��cb�
Y���u�����w��5�r�"����"z��e!�"I�
��2-�3����A�X�	�!(��"UF�vh��FQ[|�?���5:J�g�}U��������Z��_A�rc��m��c+��[�1#E{,��T~^D�9��:y������JR�;�];",�Po�����F���z
/��l_�����#����E�����^���@+�8�R���q�	�zD�yxR��5�N=��s{��������� i'�� }�)9�~>����A����#R���G�g%�_X��IO�|�0$�t���{�<D�q�����b2(�y�k!�c���v9��dd��0���WEY0$��*�Mb�:�����TMz��Z_"����g�"N)��BQ�
3�\| �����d��J�|p�^Py����T���O^������8i�RLm�1�D!��Q$�9eU�\?e��gE�/�7����^]~^}O	�������7��k�9���M�q���=e��0&��W�����T�N�4���r��J�,z������R�7k��f��^�%�oA$=�4�
��.����M�K��x��F��\�K���eKM?�M�M$�P�
��!�k�BT���W����9e\D����O��P��R�[���/���Lc>��&��n�����"���x�*I�>	�(J_g`�Fk�Ae�PU�L���@zY2�\�e�+�������H�0�=��7i���B{����~#�����^�j�:����`7���K��w�~��#��x����	+1�������%af0Z�uW}����qyhfp&:>=�NP4/2�Yv����H��#��]/`�<��Y�"\����>j�T���/�P�:�_����X�y�u�!G&.�E��������� �J�>lD>��� A-)���1�=l�d
]^���Q�����s�%	������M�����@v�*u�[W�ry�ru���o�j������4�<[�t���)�%�<u�G��l&�eR,&.?����]_ ��h�m����N�.��b9����W��ox��N���)�>�2��\��dS��a��(���"�U���%���q�M��E�->�)c��8d�?6�b8t:w%3��$�����1�DPslX��q=$��d)�0�8w`���&?/23lw���@"��.&�'�����;�����|�S�Q��/wbv���ka&�D��:�\�~q��������15
w!hih��D�]��|��/'�\�u�|�����0m��s������b��ts�`�l.�x���$ �����c*�8���H�����O���/~�����!��dGX�!+u��eP����C����6sp�J������'��H�p���BWF�Y^tsZ�����,?l��C����= \�q{@�n��j�����}���'f���jZ���Z.k1S�B�L'�&j�_���qh��<�W��'���u�Z�.�*�P�{`�MRK�i��q�v#��HJ��,*(�����1��@m�J�\7��������y��0�/����@���[-���}�)�Ly��0��I�/�n���*�J}�#����"o�S����f���U�n���w�p��|��-��RE��EY��<�m��)���=��`�_h����+�@��p�yO
���_Q�������S��/`����!?uzv�f�A����\����BI_����+�W5�������'����.hs�d���+o��LC�s5��]72A-D>nC���F����]�H�S"������J"���c��B�R�U�y6�������[�lT[��A�1_��5[S�!o;�1e�dY#��������I���d��;%���&�ZL�"��Y�3_����P+3 !��f	�A]|�eo��G]���������p�`�T���bxL�_�
^]��"�f�NU�������bh�d���m����-��2��`�f7t0G�7��~+�g5���)���B����z�C���W��&VO=�s�;���<o4��z�	J��j�|SiJ�"�x��1���E�|��.�G��n`�M���c0��B�����i�i��%�)��(.������7dB��7�l�5g ��_�~���% >sX�z�'����K��v�����>x�{�uu�v�h8;�������V^�2���B3���C�~!4u�@5�
�Ht	��s0@?.qX����E�f!x�+�V��@��	����H�O]����
4|Y�|V���(m
����(j/C�qF�!fvr�����\2�����=�z�x�O����
���O����6��8���k�lT2�.����pM��u����j���h�����*+�2z�bt�
q����8K7x�������K�<�^�6"p�s#�D���"�s�����>��F���9Cp6$4�%�q�_��}��<0tq�d!�YQP��%�A����] S��L��Jz+����7-��WV4��D����%�es���++��i�rW��,d��j��>���D��d�G++*�`)se7n���H�L�X�4X���
��S��c��|��%�F-z��tAx����[���he�y�q^�y�:S�Z2��0�w+����������e4�NO��w�����VTo�e�����=��"����0�x�������2�[Q�L����#7�I`�6���=g�e��l��oScWM�����p��Y�x���npS��-!�{gD�cx+�`��
F{��(IIL��y#��#x��A���h��d��eeD����[�,�N=0�7��.�M\���;F���Boa��e�;X�U��2V��ENk��
��sJJ!�1<2���]���N�A�����-�[�Yr,<�(8~?�\��trQ����E?9�m>0B���j����r���,��M���&�u�_IT�	��<��#s,��c�n����}�V��L�F�r����l����o��\d����
��hx/��n�6p`���o�T����%S�m�ri����M`����9g�`�d����4�U!?.�?�5�]�Q58���Mp���exc �Q�EF��Lu/_h"e�#��
��{��)#
���S�o�Mc����{��`&������
����)��j��WeP�
����|�i�f�Cj(Q��+I���}�~-N�����Z����~�G�_h�`?8�`�J��m\\"�<���� �Q�eN,�'^�:��rU��
E�(�I�4x-_���<F-�t�V3��#�����&������q�F�l���bC���hK8��fm-�B���8Ec�+����Z�ac����������Bz+Qq������
����/4�}�w���Zj���c!"�&"
�J?zD��f�@k9�<�ARX�������G �w�����Mc�(�r%��9dDsW�Hq�	4>Mf!����xT[���>�4�br�E�H���H
g�:�����_(�8C���)��vhp���	�E�o����)�w��v����E�0L�Z����P=�p��/� �
�p7]�,N�n��O�j����,\��C��w) �=�c��f����,��@�����H�y#�*4	������;�%�KwZ���n��t�i`�t�i�������OG��4@����x^$��F
�����v�)d���N�N�d�vz?�M{M��9�D�[Qq���3pP�N�+��l���O}�(��&p�7������V���M�E�:���AC�2{r���,�����JD�'���v�e����	����N:+*B.]g*[i"��|	% �]6�|��W0Gp�������b�E&(�	�_����"�`��U��3D����bW�C�a��-A������~�����Bw7������GY��oq����k�N
�!�"@'c��f��de�R��2��{t9�4�S�6��M!B�^����f�m+��&0�L[mg����DdD���s�C�n�s��A�TN$���ij���~!�����r�u^8T��*P�({��Nolz�V=�7����<[�e��y�UW�`��B�e�ux�[�K�����1�M�5zS�GiJ�!���q�a������z�= |D�/����_�:��C���&��Z�9F�h7�LN�/{g��i~<[k��@/��CM*�����s���j1N��fc2e�@�@C������/]�'|_l�33�l��25wN������t���S@^I�9`���:� �����%hp$_h�4����5��
����qw���iU��V�~�KM�+
����BL�����.q����hm[d��:l#[Q�:���
��R�-6C*��Z-U"����v,�����^�������1<���-2�GR����)�@w������I\�T����4�v����^Yv��i#OH>���9��l��V"g��vQ]���]��f[�*��M����X�ftQ��7�lb�?FtE	������~���l���#�h?6*���{+�������:2~�	`��yOcK�#6N��Xr�����[��Mpbe�|!��<t�����
�\�ExV��S������^�|�S:��4��� x�hieA��h�X����o���q��(��P.r���V�^dS�����X��V�;���.�%��'����9-������X�C���d�y1O��Yg����*���4)��)?/2u�����u'�9�<O@�T#-:��A�Co?��v�[)��g2e�O�(�w��7U�h�H���
�s4X<���
�E9��+��I�VQ��D����$��"�OU�B��HL�`!��9t@4l����eF����_f�"A�V�KF' (���C��c��L"P����?/&��p��]��f�� ��!��4��kr����o��n��!|;O�Y>�<����H������%��8�?J��	��X74�C��kA��`g��k{n�;��)w}�����(*����w����K_G��L:�6���:L��2����-'��c
p��F�IA��!���w-h��K�����]C�6�8dy�|�S���"�J ��KK�G�@�dP\n8���fg�zI��*�Cv]K�(
�[7 �N��v+�"��rhG��iQ+�!����:�4��{������)r�J{c����B'��~�����@�cf�P#c+��A��t��>1B+/6\��a� �D��-�npIuh��6���8"z�[�|G�u3���=��XcS��d��ab{Qf��E�}��q�wq�|�`(9�����XV��������	x���l��!������	�7�C7o8�Z��!�����X��
�|)v�x��9��p ���D�7������n�"N%���#�fA3*_��>�R/E�l����Q�d9�}��(:ykQ>��eR2�t�.����D�:����6\H�4|8
�>m�T������wC�?�$��\:6pY%'���t�d<���_]V�K+��)!�J&�_���0���WP�3��|�
�����&}{�""�BKM6}�a��)�~#2y�^eZ���3W�Q��$��i2���l^���
 M����8\�*d�42���'�B8L0��GA�/44�LF_:@��������hC��K���v�����q�XX��`��l	}q��]���#����^�F��0b`�p�F	%p���A<t2OHq$�Ae������E�SB�}������s���RL��}���Fi�=u�tER8_���� 4��T	�����742�)��hHaA�0w�vIQ���D�]�e�����Y���3tb&�Va!����9�3��f*�)#w��0����u����2�1���c8�N!�*]R�Q;�?�D>�X���G�����};��ac5�1'l��{!I�/���g(�y�Huq[4)q�Gr�vYLy��6"�����Ox73�XW������ac�H>c�D�J�]�h�V�y��A��d&��2��i���u�s�rpW���uj�9�b�s� L�mc2�:v
@����H���Jt���f0����h����JD
:���Fu�y2$P�7Y-8����	�dFJ��\�	+8TCpQ�����"!������C��
2�na�X�9�4����-�4wK�)�)~�a�Hs&�Wi��8��X�
��e�
r �$��E"��}'�u����{q$`P��x�o)	��4�%��U�6i��L����ShL"�n���w M��t��( �-����bWrl7���2��fh6��#
Q�y�-�k;E"�����/h��52��w��hl2���4P��Z�E���[�p
�&@�+&R�������WU�l������)I���#DH��/���\'@]��`����O�~�O]����to.�������F�
�v6{������4h)j�����-BY�����Tfu�0�~j(b0�J)A�:�����w�N���	
H\�?/3Q
�����H�4��������+�*9�h%���"YjRo�3�"���\#BR�j56U�[�j���Y�		:ae=o���>��A��fR@3�a��a�g��`�@lx����4�z-�Vt<��N�D7
��3��Jl���W_��w[��"vu�i:�t����XT�K�MRh�1'{z�a{����^t��=]����k�9�d���(�[��A��F����f��OR�[��=1�
���t!S�wa��@����M�YY)4���]���61��jI42=8��4�%M`���C�jZ��0�����.z�?���iTY��fI/�U��.h����K��K��.h�	�g��?�J��/��K��.K5�OR_nj����h�a���5�D��E@KzjN:��/TP�=ZR=
0X�u$�
F�MHM��
Mo��G}f�QT�����Sz3��4����|�����e��.H4�����7e��.Zh5����6���0�����ua�PA]���JeAM�q|&6�
��&�6��9�R�# ��$�0~���z3)	�
s�$�WFd��	N��c*�K�K�I�w �����(J��(>+�!T���OL#�P.�+�FP>��5��
��6`�dD�j�5�� Ju���i��Q�%��0�"	2�SH�uUS��)��l�d���RP�L4�%��=}V`�'�����d*���PRi���rW���Ll84���Z&A�m`�����KIxo�l5��;�m|^iA6~"��cW]��QF�C�����<9�����R>���G���If����b,����
2�]#��hc�Y�"��]a���OnB����0������B��.�FOR�^��e������TA�;#>���!�H�_���.+�f0t!m�"�	IE@��Tytp��������CI�&��I��b�]gC���4q�������KN��uL�gV�����)Ek�V�Z�q��:�M���M	%��m�d�Zy3HQ���\����GR2���:A��xJ�6Mu�����28YV{��^���"�B]����f�2���^3��u��g����>TS��m���%c�2�H��P�:�*N��Q�������$9w��[b�L���)����s+�������<�J����z�n������Xi �����$$_��pR��0�H��?\��f�2��I��G��]T���/w���u'�6�HHF�M�����b��`F]�����^��_b|���n���)��GQZ=/���uY���qA(��X�ZC��#1�vn��m�4�_B�qs\1���Z���H�uJ�/�����"h5���q��^��"�p����������-��&#	��x�����6�	�w��L\LM���{H�!
��y���^���[pO������/3����fbS��iD������v��G�8���El��b��Ow��X��� ��M�	�����;���h����"��<Q���Km#��v���
)t������D����E��^���Am7���9���uK�������K�"n�_^
�y!6kmY����l�]�X��R�<�6����-+kDP������u`z����Fw[4�4��F�I����dT��8a���^II������uA��>�����e�?��������4T�g��L|\`{�P�?jH�k6��"�2��.�����D�O{�� ���8['�����6����>�d{),��W��0#�(���
g&U++2���������M	��@P���B*����G�I!$���QO������mAR�Mgy"�$O���>�����Q=���s���B61t����j6	�7��!'S���9z!65$JJ��m���E��tQ�=4�����"�/�K���\<f��|vH{�j|��Lln��D����P���>6��)�JD>34	�9
$�W:��2�v����4-d��`�Ch�u1�B8%�&�����=t��y��Q��[��O������5��(�lK�Y�[m����MIYOz���]���t:hV�Fg�F�U���W���A��� ��O�����(���v��"��zK�V�N1^�G�.b�~����C��g��"��{:�o������\���E�{.�~���=�{�c���K����{���~R��;m��U������S��M���u���F{���(�����e�z����]o9���v���������'my��_�8������G�n������]�3��qn�����_���+�>��s�������)���o&���OW������}�����_��OC������-;dWK��^����������P��!�#�:?Z��q���u���2��^X������t�~�C]�e������@�B�)�"������_��d��D�KG��Fut�l�?�cw����<n����5N:{�h��$��XK���"�2�i������q�D���U|������#����1��n��%C&��'P~�:��"�!'H�.�]�,�:���:7:�y3�ad���C���SM�����M �E���lj���o��(�2���J[���5#es�0��kCP�L*��"�l��8u}�S����B�04m�#y�����v�6��'��w�z<s����,�-��H��vbL�%=&���`�����mJ��?xs��M��u~�M��(��V����o����j�VT����He��$����l�o��x���>��:�WR�gO4F�8;g���w�������C��^LWY&����d�wK@��&$�8����*����$����/n�]@�A�"_�h;Ow�E����e�&�P;G�c�J`���{�z��X�_�CX�����+>'w����v�9<N��qu�^�r>��D�����)o&`_�v�?z���%�]+F_jAl�g�`�>�$� �����>`��$T��(>�$�b,1����C�/l�s_�� ��j��86mU���y!~�=����	�� r���-���~q96Q������g"*�+�Ru��"y��-Iy�S��z�[�;$K�,��u�W� �I�r���tjZ�U�����������,�4���M���e�gop3����WT=����� �sa����U��f �)k�H�~����!���N{���������/���^dE%Y�g=5q�B�h�[�����,~:M@� �9�vi��[���E��c���d�*B�umVaE��BPV��gu]��i�kM��$�]W�-��qX7�:��kA�v�Sn];��9��Z�2���LW�CT�M}��M0;��L���>m~v.X����5q��������}v�����8�Z�ws�������&�q�e���N�TH�����x�,�����_8��y���*����T+�#�,�1A2T���.��w����k�2�6x������\>h
�c��LY���[{��O�DJ��~��)b@�6 ���e���M����,J'������������!���]v	�S�,	�O0�sb<���*�|�Y���+���M���Z%�DrR���+0OW���N,��v���5e���&��2,2�����-�e���[�
����u�5#~��c0D�"��=�b6��{;���$�r���u���~�9������x��>.��j����~9����&���L)��y��d�Ee��0I�i9��&0]�)?���eS�!=y�y�����/h$���~�<40d�3_@=��f��kHo�_eEQ�nR�\�+���w�U0[���
},�U}���3"v�+�W�*�� :��>bE4����@������uA���|y1)s��/��4���������+������C(�bM��bF2��C�,
�U��R�w�u1?�������*�]��$�^�Q�o:�(kj%�= *�&���u�_['2QCI�:��G:w��Ok�����a������&8���F$j-oMT��L�����uE����C(z���s�h���H���j�����e2e{o��S��7������% ��4#&��v`���d��E
t.a!���������~���!a��N&���)^H����9��:����u�l{���}�&'�K��l{�b��u��J��k���k.��J;����	|z��2�C�{S&����Je�%;�M}�(��I�8��5�Mp��kU��;
jR&�N���.v�wE-�<�����G��J92=jk�"�enZ6`�1��&��P��_��HuiA�����-J����	FOviq������a��Q# U��{�����Y�����)�d�����.���k_�C�b���[�~�P]�yg�fN����*�/��?#N���WDq.FA#����v�@%��������W4����q�u��3��>;��c��m#zl���'�k�}wo'��$�C�O�zg��."b�X��	�l�@3���&0������
J���)����o.|�]i�T����������������H�������n5���{�5�2�u
Q����<����YGjgA���[�����M�RS�j�F7:aa���*S&�\�3�7�m1M�l&Ko1�v��2�{���}�C�mH�����J��E��J��c�o��^��dc;�1~!E@�58ld�|��s�+���hl�O����]Ja��ZL�f��������������G�g�������n:��R�THQ4A2����a����F��z�M���9z��	�RMp���=|6����$��.Y��_#���m���@��|(�t�C��Q[��3�-��9!KS���mV��������OG���D�����I��H�\��zrU�H���/D���P���;���w8~:���#
���f�	A6���cu%"��8^�����@�P��c)�9�W,�b�QiA�I�H��}K��Qm%�?�����Mj���
�b��-��0~Y�C[Q��N��k,�nn\&S����s��~�����8��bm��j:�k��`/To�&i�49z��J�Q�?���ty(����z_�+���w8,��8�`:M�?/$�Xc0j"�:����&�m��;��f"r��4�`��Y��hlg�m���#��Q4�'�Ka�+����/U��������*�!���������'��L��r�p��g��������9!���J��um�:l8�������.���$�b���)����g�KI]�����&�1���u8��7k�-�������/DPH�!������D�eg���H����,$�s����<!��b�n�%Z�{�?�B	0�+	���~<���d��)����w�v���+��P	�"tm������(j��k�*<����S��l���T�����m��a�mjT+�q���6A�R�k]V$���hD�a��yH��,�d+4}B��/4���	0���~iII$
���s8������������	FK��\�C�����5}���8[����-��4p`������"S�fO�{��G���~T�n>?:�����(���ZM�H��&�gB=���P��j��=
�B�������wZ�.a��'""�K��2��?���m�"����R��q��'���EE��T\��|7�����N�l/>�G�����Ty��O���x������)����O�X���3}���L��m"��a+�t��)6��M���2����W750�"����sU��47�MPu��j*��'���3	����X� tE,�6W���S3�"��0�P����T{~�������!*��C�����<�n%S��0{�����������"FS���(mXb��]�Y��X�}�T�!�;M���#=���7���M��K2\��p���z�4���������5����M�q~����S^h�^�#���|��3!d������.-~!:w)j����R/����<������k�!���Q�E)/6���tN����O���fDhl"�Uz�S���|k�#m��	�����n�2��������Y��,��n|.GQl��z# [���A��a�	���>���� ���D���x1�8�7�h���VX����+�^h}]�Ci��'���4�q�5����\KO����k�o������k"E�7��8��^��bB��Z^�L���G-T������y��*Z��z��� �N����7~E��*
��FY:j�C��f3sq6�[��fs�����'*�$�hMg��C�����Rv_�T�������v5;���'F�A3C�J�����I�C������}c��v����=�\�t?�g���1��h���21Yc����ET���it�Co�$�
�5�c5�t\�C�x���� �al8X�P����`����Gw�Q.zzz��M�I�
�P�4���W��`����8�d��&���1|Q�x
��J��L��&�7�_�P���wB�y�Y�[�E�M#A-�.kY��nv.z�J��e@��-� !��������??���R+��H����V&�"�~��Q�n��������Y���#��������,rO��d�4�0�V9��e,*���������������p�����Q.����(8��Yd��?�HG��9���3y8	�d��)��|q^�D����<5Z�_B��+��g����36�:~���R6���>�Hd��PU:h��W$���]eT�Jj��U=��ys
�
"�{Q����������t���UV������[�7����M�<���L��X�%�P��*a4�eJ'R���EE���,�b��!����(>�7��@	�wx��1�p��s�)��J�����(�,~�<+����Z��L6�l���u�����y��J�,�����n�������M���+)	L����q�L���/�y����=�������E�����LHLs��9KjE7����5�&bVV0�4�(�Y}�����-�8��'��E�O�
��yp� V��������-�t'H�8LefYW������s8�.�DX�qh��b��@�� �./ ��t^�!���j
����Q|Vpb��S������2�b����4^,���$�G5>
�E��@l;���C�gpa�.YV#��8��Y�,_4U�D^���Nf��L�G��F��<�a�fn�w��{k�Xe��3����"�|�3��N�|��<����-�,n�������2�h���OZ@4k��ro�'P��1��L(��ZI��w'���*�%�q���(�"��s|���Y6��{�������:��2a�u2G���D"(�ucY�u�����.^����gE����Jt���/�r��w����g�P
�V���u�%�;ucc&�yN����H�jMer�E[�W�"���"��+���\������I-l
�8��M�g�k���
qZ��!�F'���R1�����\�8�4��1��D�]\&�Lv�e%�/�@�s���~��E;�������������!��[���Do�e��>h��I_�8!/��d��-��S�g'����1��S���]�k�Z��\��m�;������m�9Yd-<�p.!�������}�F��.Qs���YA�CY��������E���Z����."S��Im�<���}�*�%�+1��#���#ikZp��Y8����F*��S��tX�a������}/��T�f��k&r��=mW7�������Pw�y!��|r�)��1+��>L��/��������m:H���HN��,�#��Q�j>��vf$=�����uG3eB��u�x!Q�;�"�p�H��Fn������	�,��$���S��ir�%Q-&	�T�LN�����/f�Rw�,�|kZz�T�c<�d0���t)�)ldX����G��A$�(��t$�����|�ef������\7.���S���� ��5e�!���VY3#��h6�@#s;�T��E"af%����������d���z{��Z���#������T#��X���N\��%���bWu��n�B���������>�L�}pX�W��D3��V��v]P�A���N����%^����=�Bzj�����/���<?��~���_G������/5d3@$0
�
�Kx����%�&�VL����lV��G��(A�h?��g�O��v����wLY=�P�J��u�I���1@���rd����IsA�41n�|�����]��|D,c[���&�~����?����45�+>v�-�V����a�y��Jd�cG��*��T�1F���,�q1��D�,���D��M��L������R��u��i��8q���f�%�n����u]I�4?]G����'=A ���R�A<k�'nr���`���-������9�a`�dq"~��Y��d��;�4�b���Lr�����w}�L���;��������O��������L�]a%��� �����,�G�[�Uh'$�>��1���2�+���,���xG���Ea�? 	��z�0�����/������P-�"~L��]����T&��o4�!�w�&�s�����h���d�T���je����*��2�����|
��"�^��J��i��Dq���"v�������H����xZ�������.���	x(��I,�;�%���$VK�_�	�^�x��6&>R����b� ~C������Z	|' A��B.c���5��.�WD�j���<-�p�;��FX>4�'��f��K���D7�.��X���t���'2gPL��(���I�q��v�����2��)Q��=�=V�)N�n���m�"�f5M���Q2,��:��8���%���3~V� ��A�����kwF����@��A;<���$������7����n�+>����������;�|��*c��~���;q��D"�K4Nj-��as0Ag4��(����5*S����82m�)*t�M��n����h�p�tY����I��D0K`h}���C��`0q��k�)~AD���L_�X
��A7�K��=��~2��������GF9��F;q����%!\*U%��n4���r��a�1�Qx�m��x��^�'�\��`pyC��K���lBx�NX�PO��4�����O�%��m��N��.k`����B�H����t.0*����]�*�P7=����:h&p�{��3&t��'���UK��I��Uuj�+�,��Nw��u���|�8z�v=��j#��:�ofY�������|���g T=�{p��70�C���V=�0����B�j���UFz08�0w�
��\3���U����=Vw
K������kWq���(QR{����
�a�\��t��h�����PQ/ T����-`�`����3���*���VdD��A��z8�b����d���$�b(A�^���\*T���u��Fv��g3���_����l:-R�E�i��
�p�9p2������,��2�\�����G��q��#f1�8����AIrK�������qL�����r�Q������A��Z1��NF�(>+6R,�%�f�(��( =��c;R��;�C GI"�m7
13n�9��a�����MW�-@��
����\��a�O�,l� ����x\g�M�6��m�6,=C��-����a�@�t47�"�A�8
�3Jw�@��u�Wt&�-�<���,qh���k�P��K�HX���dYC�-�����6�?�;K���}������k����������J�����>���!��8]�d�Yo��S������;_���C����,\q^����Q�����?o�+��1�|�����f��sf���P3y�\����X���lC��<o4��*5�8��D�O"����,fp�<&��=o$�����51�C�u���\��n���J�y�bI4��G���1p@/�g%�0��w�o�P~��H��HzM�Le�Ed���� '��u�
m��0��%�������<�>��^�HFS������j�"I�z��U
{q���R�z�2N����YQ"n�$�e
��>K�n~!uh���TP�������ZSG_
N�N��}A,Z?�c�	�cfE���4��z�)�J��H(*�q��g�E������j+}^DR��l�z��;p
j��i)�����+d�Dq[��LJTXl+Y�=3C�S.���tA�=����.l����4r�k���G��k����&���5=*���D$�)�����Z�`JW4rR�)HvdE��2�X��?nF��m�&��Z�`GW4�17Czchi&S��hGo��h5�&2W�����o��,DE7�\@���&�4����3$���h��V1V\�q0+�/��v0Z2��2�_�%=*s��)]������*!;|tB���{z���hOW$�kjo������tER
���VA��x�����������w�&�#��M�B��^N�zh�t�zkKT�z���&�f��`So�����65�2L���3;f�'�E]Q�����K������Fq�wC� M���pY�nJ4�}u���~a��]Q?������;��1]���[Z"pc� nL�+����")��~�!��=�D���hM�Y�5]����G����qrk��k��UE�'7�5]��fO�����&`6�����nO4�%9�����&$�/�]R�hMT&9{��l��.H�Rkz�������Zs*������&�t�B]s�h4��*P�6qHp z���x3�9@��`G��1��N�T��m7�bQ�������H�)��g*+*$Q�YX�E�5�pV�iG/�L�N;�\21S��=�8K�E�V���u5�3��,�jU����0���H31���K%`���Q��m�dH��e�"QD����<pA�}[�V)�n��L��z���B7F��t��,!2 <oTyl��"d��{"�q5��u��&�����	U�0V�V8Y���V�:����W6P��~;�
���-����"*����J�P�����dArb���&yR
�:quf9�	���./�d��;Sh��;�^H�_��NfM����9��$`=���1z��kf�j=����&��b��"W5�Z�}�a�_gA����d:S_��9��btAR
��XR������>}E	`�����]Z]�	�
������If
�8_����E,�	v��HB� ��+t�������2#��~(Nh_ ����X"[<P	M^����da
��'{c����,~����4��&qEe���d���	�W�y��Zhwh�l�!���={rOD4��/��ZgU��i���������n����5�����]` B��|�WB���=X�q� �T�U�J�2�C�������(�2���L4#n�{��P~"������l�������<���cQ9'C����d��.q0��y�	.m�7K�s���9�y�o�����,P��n���5�eFaA���0����$|��$�����Y�[V4�����4�[�B�@-v��C����U*~a��^��f�7Q���f����D�	��~�3�=F&��-�']J��M���]S��O�#�u�t�{	�d�D��O�nT%2*(LK������K�;J�;��4��`3m�O,Hr�^%XX"����lw�������h�jo�k�e�g�5�b��������XF�r��M�Wta���-�V���&�P�W��R
��:r��</������aN������H�w��,�b R4*�I��2#��t�~~���@�QE���r,���Q1��V4����r��O����HR"�+o~�fyH���:��h�X����pH�M�1�����,��n�Nj�`y�L�����g�����5Jm��+��|�����1����zE��#����[��I�@�6_�|�{q�����q�d:.���ZQ�lN_�ky�LG��}-�c�V��
�;�k-�k��"�>�m91o���U�%�7�I���3b���=�LUn��O.��������(�_����Y�hv�'��l�Tx�����q��r�,��-j+��~�GD&��U�C$V"��F(g|��s�!�,�Uhx���C���MD�Y�8�*����'��-��S��iq���_�����/�N�,6��@<� ��/�*34��52)��J��xd\8z�q�&�D���7/T6[{����Dg��d���LtH+QK}3����s��"����b(�Ku�25��I�q�h��wv/��,��"���/���=�������b���<"	)�d�/��������<�������|*����0x�y�k�i�PjG�w���L�=�I�}�F)(�R����Jp�"
*�H����O�j3�w�e�(�.�S�:~Y��
������)2�����Hd��f�n��K�\��c�A��nI��W�y�|%�!������A�T�r
�3^HrPi����(�*OHq�i������|X���K�����V�EkV��WxR&�^��Mo"	2szT�ZJ�!b�_
k�r���h�/���$�,T�M��E��E��'�����\�Hj���;���T�����d��2�X�����*��Y*'�5���\����6vX���-�4�)�2�1
�Q����u���;#�@Q�R
�m	Y�tp�)b�&�^\�`1���VOoKs@+i�v���8������|h[�si*���K�P��6��� ��(�".j�t�����P9'�DgA��D�v�������Tb��)��/4���������_\���X�G��^�Y&S���"�u�=���Y���y1�s����qg���/x�/��d"�N����I�����H?�[�Z���-(��`����l�
��tq�p!R'��|2f����e���d�4,������io�����T���P���d����)2��n�;~�$7����K��t��������{�!&�OPu�|t���@t!�b�ih�O���n������4�8���cm�����	�2+F�;��������^��J��Nq�i��� �l�g�2�����|��L�������F���+�4����'� M�~�V^h�6H@U}x�it�������a��j�O� ����T����S�O5d=4������r�%U��Eo/IC��=L<��X�gEY�_������6�k��h�mwu�]:5��2�h%R2�\U{���+Ae� �"w���3��E��r;���2����W���&�q�~&_(����l^'kZ�����A=��T4�E	N�����d�q�����i+'�Z�<E���j;&@B��,��5��6�*��tw�`\0y _��w�J�`t���)�M�$�(#5a����&/����2�)��$���~�S�EQ?�N�`���WD�����V���� 9���Q�+��7�&�\�������������>��W43�U�����-��~E�"t�����.�!�I>�oas���xf"���oEyL��e���+��L��^oRw�e���dL��UVm�����QbL����1}����1��dC�v�z�7��8Gq��h#����;��f#�t������y��y�	ll�@���7�<O"�)�8�g�0�_��5�q}��w�g���9�5��������&������o���]��n����}Z��?>�iN���!}�c�T�������s�����^��p]�x}��
�E�����S��g>�p]�x�l���������/��=]���z�z�������v��[��z���(��W�~���;]?�����b�>���^�S�B��{�_�r}������3
[�.b�~%����g�~�������C���-]1^{�.b���?���\������zb��R�m��#��X��,���������-�s����g.�����������G�N#���z����h�}��}����z����\�����d���������T�����c��#k��j����U>�D���7^.�Y7p���|�����\����\����\����\����\����\����\����\��[�������o��B7p��_���^�n�r1^?R�y7���_��=��w����������[���77D���
��sC����\�����������!z�on�^�����������!z�on���
��sC������77D���
��sC�����!7��������h��b�c�����������o7��G�����?���\���/��
��-���v=��X���������w7����k��\�s-��M�[^��2OH��d����������+2GH��(�@�6�[H��"L�����*����	$�"��%4����R�ae��G����|Gr1���$�.d�/a�������p_I���|����L�2�h���k�ye�a��
�\^-�BZ]�|�D�"�-���&@zj�Kg������2�o���.(Q��L3,RV$2�'V9����L�����+�n����*���`Q��''oV���]#PY��,`G
��8f�w�A��)?JJ��^.�[WC��V4����G��$2=0	N�x�	�>����������~��S��^H4����l���+�(���"c�Qq&�wCf��l��E���/Xa'e��@vd=���t����!����{���0	�,�.����/�Q�6���oX�Ly6�����t>�f�D7�#��xsYP���������XM���$�=��"J;�����q���e�lb���md&��@���L�n%�6���E�_�=�-X��<��VE���$A����V���Hu�Y�;d�RI�����fV�`Q���T=	B�jf��L�[
.��)4����$��5���`���G�)�vrCvKT<o$M���V!���!���;K6��I5��(�"*$}�pv���H;��W��M�b&n%;�&���z�h�z��!s���bH�`T��U���&?/2u����~
Q���(/$�~f7?���p#���%����Tg��$+�?����Y�x!V��M����#���Y���C��pp���,9W4���f��H��l�!'���(�j�x�v����s;O����LH����+=|�
�R���8z���=ode���o5y��t3+��`�	�#+h\�6�0Wg�(�������X����/�_y�y��[Md�dI��n]��y��&	 �<�*^&D�(�3��$��M6��58����.�f���%?���A�d~�c����N(��,���p��EDb8�;��3rl��F����v������^(��9�����E�3��7:��Yph�u����|0 �:��5�7�U^�qm��|�p�����l����Ik�-����oX���y#iT�d���y���F�#�s��O�p��������Kr��@R(';�zqZ���P�M����_��cI�C�������.17���=0������������Z�H)�
(~[��(���O�QT������4|C����m+\XR&���"����f+Q'�O��U��9�����_	�?Uq���u�CI��������.P�ZR�8�bi��Ft����k�5�&	�����:q>F���� ���_��~M��g����A�I�D�+6�o�>��u��}I��������>\c:,��T�p;�S%>;�N����l�T����C���#����S���DG���%�����lC�g��d�
$�]�z���>?sq���
��y�za�����:�xz������H����;�hF%�g�M�)��A����2�%�a�F>��Ex}����^��1T�M�k�45Qd�Y(���~��[��������=S}tIk���W���Y.SU�K�,�Xt�yZc��
����<h���2���V��/h t?("t<O�1�yay��F4�p��Ec����\BD��\��{��K�x�`��b��r���;��c�J����/"9E|�����u�������������s�����sp������/U��B�x����r�>/^rr;��^�o����#��������J�e�P���ybF�"A�k5u�	4�i���m��<+	}(6+-���[s_<C[Cpk���LYWV��������L�H�|��P��N���g#6��Vr��Q$��	���"@N���2Y������{��L����<_'�b�d����kF2�-���d�� 9r�b����"ff�8]��YAI`/��Lf?��f:�1�J������h�|��-��<=�r��<-��
���$	t�gBg�������H�}�v��A;�02&���y�+\������7O�YHR�����`7@���e��)��4����V���s�����U�������+�?;�/R!�/�bo�k�#]N����/�h�W�ig�n=��e���;���D����r��J	��oqylM��?�gT}�:�Y���g�����-��������d������������_W�=���[Q�[J�N��0m_�f�� �%u�q�����w��1d��m�%!���=8��r5��]�h�\�l���V	d����u�a2UF�A������l���XQQ�� 
�
��XF�
	�Lx�[P���y}�e���Fz���h<!E��Y�Z����+z�����Z!�YI�x
��Agt����3�E(V�t��@%�|v�<8�-9�Q���@>^���f���T�y��
��p����-�h<�%S�F�B��d��3�Bcj��w=���\��dZ�9�5V+#���8S���<f�c!��D�(���#T&�{]�� 7�2.$�][J5<.��I�d����qb�A� e"mw/�HJG���T3>@Q��������~=�!���f���Hd��7�N�a���XlHU	��Z���<��l�pAAi;F�I�9��t=���q���;�7�U�������~��w_�X�f��L���i�XQ,{YQ�� �����/��o�j���d��3Z�
U]2M{e�^7�����4������"��ew���L�I��]�4��i��}F%��������%f�V"�yL�.����l,h���"���{���a���{�I���n��XO���"��7�lV�2_���E��}C����d�]���O�N�>e����'���e_���M��%��oHj�-�H�gv��1���e�}E�~�q�/���}�����N���n�AT�gs���h$�����j�W������U�'�����l�ZP=��I��+](Yv���|x��4�!����
���=tv��Q=/��ca2R��Cd��Vn�$�-Ik
*��zr��'
��>~	���|���������P['3�$�����!Q�L��- @n�N��y�����q���
U9�����������
jz���J�����`4����nH<�X7't��1<��]r{(���X^��NU:>�����S�&Ym 7aR�Q=C�z�ov���d������X]O��v"�Z��=
��=����8�OmT��M�k8PK��gG��LP�V��jSj��% ������d��$����)�GGI��.c��8���YBR����o}��Dd�Q�\�,9Q�LI�>������T������bA	��|v�1n=@qRy���w��ln�t�aY�6����v�j8;����c�[c���i�����9��|v�f���}D���'[�!}���(D���{��WRy>���~9�lL�y9j��m%�J �+p���*���\�J{�����z9(f/C���� ���	m�AY.'�},���'#�O\#�O\��������N\�q�������&$.�������4�T��#mB[_���8�n������9:��8��2T&K5<�jpb�J�8��%��-q���0tn$_�������R���)#{�Ie��(����������8��H@{���'+�d!"�yrZ��U%�A����U "?n&�]�	�������
���	`����l���t�2����	5�W��-W"2������JF8��>��V"�heE%������V��s�b��`���\��RNC�����K>c����`�nT���������Qq����::��%��b�V$�
�z"�O5g�.�oY����180���	x�i!|7l��a�h��1G2�e��q�T*�����q�]���L"�`H�3�F�1�iC���vE�0v����K�p����xH�z�^"���!���1������6T�uF�$WMbj���^�1��dsW���H���+�3��Q���gzo!R2�}���J��[���7F���Boa
��e�;X����:V
6�Cx�h�M'�Bcxd3�7*�d��J8�x*Q_�[��4��X�t�Vp�~<J+�������:J�'���,������Xn���kZ�"�Y�{Clz�e���+��dJ�1O�3�;�D��L5y�9't��\����������l����o��\�����U��hxj���w0lZ��7Q*��-�%"K�,�����/7$��i{�9����\��x3Y�oS�o�_�5��[�n����!�}�,�)�K�8��������f������X�h_4��	��T���.�u:�	�+-(m_xpt0W��{�����)(�wJT^��X���|H%�|%I�h�L�z4�(D��<�Z��J�O�!�!��h�@�K_������k#e,�)�KzMO�:��r�8D7����*h�,x�_��Lc�P��Y�i2�����e�l!s�q����Z��Qt��V�
�9�}�ok�@���<���D���Z������9f������B�*��o�p�L_y|Cpj�#]�RU�p���`��d��F���rCki�6kP�<�1,L|z}"u���w��[����WI�;���]4"������D�*���������i0(l����~��>H���n����C�
:�P��t���D���`4��������13E&���>��maW��#A�pj��cZ3=�pu�/� ���VEx�M�tc��?e��u#�����,�����$R@�[��K{�i�HJ�h�ZV�����
iWa�H��S��2�?A�-�^����x�u����v����v��:k7����v������U��H�5[��>����L&��S�HX?{�/;�a����2Y�.�������xC 1���zP�	�V��Z��~Q��V$�/�������Dd����Oe]��;��tn[x�#n�t��gc
<|f�c�N�aEE��U���	<^���G;|���
��p�T'��b�)�-��2A��������k�7���8������L������n\ZH�@Q��7n��-tw]�����c��+�w�@��>j"E�M��;���de|���;T��4�����x��j�#"�����U����?���Y���Y��)d���D�D�����UZ96x���U)zP��s���SV���*�������H������^T��A��z�/�4��8:l7�������x��oC�F���0��b�*��w�}Cn����)M	}��%=�`F�v����W��X%`/��t�����j-��������1zxE��u�r�q~�N��|���m(�	h���4P���M�7���U�6&�}/�-bh%]64��(�b�Z��n3�`.+��V�q��"�����lT8!`S@BY��l������#�iFW	k?+��e������U�[Y������WV
�������[�<��D���2!s�{����e#~{�Pa�%%]�3�"�Gj�T���v
�c�mW��m����R��7��3�p�Kt
��|\�#�h������YP3��*hlHI�|�N���sdy���5����������t��=���Q��\����)�|{�	��S@+*A�uh�_��E���h=Y�[������Z,����L��Ox�	���m��o%"���o��p�7�c#�
	����rp�g!���	C��x����!+��x @Z-���^�<�b���i>+
���b��-Q��
��[��G������
���h+��Dxx��3�/��Q33�&��r�-���������8X>2�����z�X�>e��z��
	���oi�,7�+J@-h5�Ytk+\d(���Rg���>*�����;]�lDt��������u�D�j?{�T#+:o��������;��V	���/r���S}�)����"+����A�Xl��h^r�1����v��BJ�r��fQ�����O�~�Z'D=j"6B��j���NW�/S��_���W�
=Y.������"�	���$2Ez�Af���p�A�3l����k�o�H��ZeE^�v���o�{���I�W�BWj����8���\�k�����:�
u�g�� :$x����t�"�m��1���<"��L�-���^���:�Ed"�z�R�:L>�e2��EmyYg�A7��:��>g����B�� l��w��a���H��D�������
�EO]u�@�-nZ��*�.��Lp���z�)���\��!����R�m��W���v+������H�(oHB>R4m�����A�����H@7��&oX
;��Pq.:�)t�����&�����HZ��:������/|��>1B+W x��-H?Q�g���\R����O5=��+@�����nF��������\7Ll/�����0|;��:us��(@����Y,+�pAEs��'�a�\B>`�&7�&���	���Y�&���
�s�+�6,]Q���/�n�}8��T���j(�Tk�vE������]���[���/�v�`����tQ�l���(r��k��I�P@���r7-���M�m����l���i�=������d�U�v�]v�=�9�(Z3����$Y�r��@��JN��B16p�);w
/������G%��_�#6`�'�#(Q��I~�
�;��zT��u��T��&{�����|���E��������8j2r��o�eH(�����b
}�rip1�)��`'d�42���w���
|v��C��U
"|V��(�qF�p�h!>�P�g��|h���_������meK�
Q|����{$6BP�=��a��a~+�X��&#��h��a�M�))����l��u������_��������	u.�R�Q��8 �l,k���n3�+�����x��� $��oTIG���"�C#��B(���s{��CR�h"3�q�ye���,\f
j�����i'V��8�����Dd��x�Z;s��mxX�UB8�_=	����)�Y�K�l<jgyK$���"?|?��Fg���5�3��j&cN���B��_|N?+@��k@����I��k^���1v�����F��\�c'����5��u�����V�G��TI@��$y
-�f:�?8��^@gb8(S��nF�n��`i��p\�gHu�5������]�z���
��35���"���T>��LTu����JT
n6�fFs��kv��#>^���	�=�3!�H����@L�@3
M`��7-�yb\���Ld���}�n���h�PM,���.(t���n�8u3�=li�]��8��a��v���k�E�Z)q�/���7�r�������\C
*���6}K�2�,�I.IDX���<*��sEe�K,F�J���+����]��"��?�Xld����v��'�Y�s�w���:_cu��3��"Qw�`e�t����C��8��v��5�p��A��.">���p
�� �����������j���n�6gO�$Y{���h��~�2��Mfs0�;!Xz-��W��Vy,Dc�P��K�H�n>;�@���y�����_�T5�����/BY����� �l�Q��?:��p�d�VaU����I5l>�R����xN7����[��i�f�zg��Z�i��7Z����N����j=3��8�F��R���T��>�O�.�fA�&48	+�������#H�Y���	z��Xw���iM�
b �g����,�y-�Vl<��C�����3��J|�v7�e��~�*����f��3�1��LU��E�l�B[�9A���
;��@{��g����#��G&��t!"�s2���4H�Yt�i����)�[��
DLi�aV�)]HG2�_fIK$nKV4M�<�~���weZ�lb=��nA]3|����-i"���i��	_�����E���QeE.�%m��UhIW$@��OK���*X�I��{6��~p�� ��v�q�%]��z����2s��tE�+���=�gc��6��g�tC%|�%m�����Hk����zlk��p�<��`6?��d��f��N��f��D�6�o��vL��|A�Y=�v����GJ0����MTf5������~�0�%�����L�#(!�g�#� k��qxg��!��$�������R@G��3l� E	�\������K���W M�{'s�d�(~V�C� #s��FP�$�����GPsk&����vS ��/;|e�&���mJ�QS3� j�$�0�"	�5�J�S�ji��|�����RP�L,��h�z�Y��Tfx������8��Jc��
�&o2���,�s���L����	�F��$����J����m����|�DP|���|�G�
��w5��ST6�I9
��G��(!�7�ATq.zlZ9�F�(}�$���a,�8������q5f��Ub^T��-D�(��|�4p2V�����_B>�*H���O�Xg!<#��i��N7�������" >-U����9v������$�aK��$GI��.��!"r2M�j}���U���I������sNODB���]�V�Z�q��u�����M	%��"O���Vv�)��G�$��g#�HJT���QO�[�4�����_X�e�����K*�a�������f��#����0�����>���PM+Gb^�}��P2�(
^*���j�/�*F��~���7#��Y�>���z.��7�I�o%��C#/,�h�o�c����m'@�}�d�B�����@G��t�{��9�t�7&��r�>�L3��`*B�2Q��~�v��>��t@e}HnU$�#�A���f�tY_0#��s��O�q\B�Y�
/�0?+��u��gCI~�Y���55+B1�����Y
u2G�*N/�]��!m�gE�qw\_�����2��jN�V��|��?A�8�\�g�9	Q����\���X�!	�c��K�e]F��q�8�
I��������O&S��h���<���8���{�b��2�� ��'[h��y�����B��3����nD�������^Vm_�4�k#>�6���Ow��X�h�@^���D#���b�)���d� ��F Ny���7.��h��/[����l�R����D����U\/��e�0���vDx�T{�k[��4j�c�P���v���P>��f�� �|G��x���#k_��/*�����\�v,��5����v�CO��-����&��>�j���'C
�
��1���	5T��JJ��D&����~��!�1:���_Y#z"Xr
��C���8�Y|��ud�i�'���L�����r�d���'�g�Mcy�NTY���mRQa5��j�cSX����-�aF�P�:g����oi�i�?A�W�SB\���M
���B�G�I!d���'��BZm'����{�b!��)|�����X�|v���u[���-���/�<����>;�C����r!�J|jh���	�&��X����b%X����H�24��u�6$��nh�i�`���_��[��
��h�OJ3C��a}l��Z�����i9Ni�������D���u���f�9���z[��N	��������� 	��}1jp���}����� ����=��0�������B���OiY;�Ps�����~�t�T�Ag�&y�fE��Uw�d�T�p�^�'u�1..�Ax���WWq��|��N1��l��*��9�e�b��T`������I�=w�������w/?�����C���,������[���Y~�;�o_�?�N��<��n���f����o����n��}�_����~)�3���n��{N�k����D&��W������o���Q�������������],9��<���k�v�K��������������P/����!���Q���pi�k����C�)��;~�������=�������?�gO���>7�7X�/���ujnC���(����3���q&��r������V���m^�������C�eE����"Cw����y)	��/[�����D�h�����Tx������Q��?�6�g�H���rE.�I��W2XK���"�7�&���D��o���|������#JR������J�5�;P�$":��y���4����>Y�:���*�?�y�12S���{�vB��-L�"�zn����|�H�D����`	4��� H������7�
%�Dd=ia����W����9����Z6���U�VR"��y�L�� 8h��C�S��U�q�hA��	T3� ��KvjL����b55)�nJ���������Cw~�d��(��|���|4%���P	�U��?d8\H��\W���7@}l��]�y����J*�����#@eD��L.�����7�+�������je^,�'��n;�3����c�LV����*����$Yc�B�w��	@D��F.��C�c��Eg�2��?I����hC	|U�^�v���'���E��$�o�=7��c��{��p�����(���-�`��Lwc^|��<�|�p��*V]�L�{�	8(K���,�@R����Xu�j��i�
U=����S����jg�����`F������Zph��^.�'3����"~�'�d�u�;-H��3t�������6����%��]�?QYH�]8�j���"Q��h-�zF�b�^��i^`O�0�y�B���+���[��UF�h�M]�s�I>��E}�6@���l���7h'S�D�����\O����i�+�U;����t+��F�f�]�aEUF�w-�mKy�2�l���T�EVT��|h�|v���o)e���-��E� ��APs<nXv��U��"3�1�mG�%���v����wLBPV�����*��[�M������Ex)
pJ�h�MPuE�����>���
M�1���Us�2����.�����,D*���ek���`E�J��D��kk�������Z��c��V��
�����aE�8�r��\
��\�0�a�� �����rYL��QAq
hA�}N/�D�Y�c�WrT���*%A�o��k�"e�<u������9h
�c����q�D��z���DR��b�+���aUX���y^������lEx"��E����&�z�i�{W��! �Z��]7��R;�@����G����
���S��]�����T-
tX�^�,=:��&�������~_����o���� �{�+���Fc��������y�G�2e�������gc
nsI��s�\�������f`��{"u`v��9��Z��������f����m��h4L��5T
�wd��P3C�������f��Or��d��0wu��`n������L���-���\u�6��8��/HrDf�n�C�Qsc��?g����`_��������R0�H@�X���bq`�V+�m��=�X�8#b�����Y��8��<��	����~ev�%��F��R;����ecZ�s�~x)o���(w�M�Z�c�+������v���6�;fF���
#&�(�U���)1U�������kEh��4�^�c,_�{��e\��D�Y�����
n���'-���$>y0��,�rQ�4��1a;���"��rx���0"��
�+_�6��A�]�q�C(z�e�a��,��@�q&R�)��2�����e"��7Z�k���W;����% s	�24b���o���8�L
t��\�BT��y����]�6�p��^��L(��S�� [uw*g�DV���#��K��O��@�K��lO�b��;@��BDv7�Y���J�gR]Z��9=B0����na����{SU���d�A��%Y5	��k�gGN�6�h���&e"vZ����m���E���{���g�&r=z<�LEz����9b�}v$���%ko�R��L�$?>������MP�d��A������0�9�>�0"�����+8������m!"���M`�7<���/�U����C�nU��f������s�/�+�	��q��e�+�XyW���9a�
T�E�9Sv7�z�Ul`�>�(�;�T��gy��u�F�����v�vP�w�u���3��Y�U��8C�; ��3�N���=�l��*7�������b�-�z&"�g��7�������u�7T������eg	����yB���Q��]0��g���.���([�\�5DY��ag'p;;��Y�`g�%VE����=�L�jy��	�X��2e"�`��x\>���t�L�]���b5u��R��!�V5�`@Mom$��`����x�VO���M�3�c��R��&C�G���fs�+�������S>vT1�O���0�����E�f��neR����1�����3[���n���A%�C�y|}��K&S�f�=H`g�lH��j����0���!%e"m�?�>g�n���5ztb5+���f�>������L���:9&_���#�3�-�����4e����r��\���=O��r��a�X�$��<^��{rS�H xG��*�����Y��2h�9���Yya�b���m��2��^���%.Z�����L�K�z-�b��� ����L����}K��hm%"�t��ep�������%�j�lAkETZ|v�g,��n\&"{PJ���/n��^&��6�D-�#����<�h��=�NX�6*��4]���r�LV��z,����
��`6M��?RCl13�i����Z����uo��T��6{�[�S@��
)��N5�8������G����^��2�l��R�?g���v��R>���>���+�z���$�*�m.���/�v���zp����� sA����|��k��H�7���o������D�3�gE	]������b�Y���>eg�����8(zC�D[_�m%��u+����/xJ.W=C��� �������6���d�����\Q��z%{�������{�W"2�
fJ���b_�����J����Z[z��gEQCQ�U�U�7E�f�._���������'������u�k�*�t���T�����$��d��De�p��	�	ML�nH@��2�k�9g0�����H0\I��p�/�"?�Cw7$a������~�ba��k�[$_s.�0g�?����&p���|��t���FD���~�>�)?h�?�ux��Q�����P���vXvU��]�xoc����>���t;�v����[���!-.�i���6�LTdp	�@����+��y��{�X�����8��~�V��PTN���*��,Xs�!�N'9<^�xS$�ul����s�1>oeQ*a��c[^��e!S�|�\�u%"�&"1y���5]�b���4����*��5B�f���FT�x�T|.��7k����6Y6.����'^��sYS��3+��+b�����7(03� ��0�{ZM�IR��������u3��~��K��ZO����IV
;`z^��^���T�p��R-�b=&mXbSYo�f,�,����bR}�v�o���f�qt�wgv�,.R�_�)�2o��K�p�i\���~����4b�"q��sb��x������qn.����L����bO����R`3�p�"�&Otr���x���:�;�z@Zb�4��0���,J���U���;�4���pr���Me�J�(]=���Q���l�����5R�-��v��Q4u~E���;������-�;�v�3	���q��+R`u�}��Q���������,�}����T,V��\+l�y��+�6$��.+�u�/�I�}��3����s�����vp��z������,��HQ��M�1�ip�a������W{�25�/B��kG	�u?����� �5��������~��J*hQ�����^6�)JC~�ii�T��)�-�$�h��D����4z�#4KY�r����5�k5�C�\��(?h&j�TiQW�|��l!RZ_�co����B�%�ji[��}��������NL22���-�e�4D�<���QDe�v]����0�� _8�Yk!%����Y69)$Jt/�7�(^����5������2�EO�N��L����q*��,P�P�w�:9l�	�qE������_���^���M��l$>����1�C�y-�k�"����l����hE����M#���#[���x�����2o��A��)�q3���]2v�,YD_;
�D��9.��6"������H�����u��eU�2�DddX��&{��|H E�����~~�c*B�+�� M#�P��r����r{�����0$z."�x}�H"�!�-l��2s|6&�&r"E^������?�Z�����%���]��T��$o�&��2u�uu�@�0����bC���?/$��?���2��A{�P %_I�Q����5A�
�����N����������c^YFf��f:����<����4��#}6�r�R��5Sf����kv1�A�
�`�2�Oh� _eC�,L�6�S�W����(��`�tOS�)���L���bX����$KTo3�bi��bj+�.e�`jj�T�"K ����"��
�'p@��P�2T&K=w�������T�0����:�:Uw�N�k#A�����lVs�C4uK����){�#��b�C4������^H�w�l��_,������w�3��1�dF�h�:��E��J�q���,��x�Sfb�DQ�(������������,V3����#*�"$�
�Nm��dv��\2��aA	4����6V��`���b���T-\�V��/{�H������ ����l��J��p�W�k��u�������N���{S�`Od�G*��S1d5$BOvRQ/i���#��;�����O1/�Y^>;
���x�Q�4���y�r��W��O�k�F�����yfP���]�e ����L�i������������)k�����_GR�.<�I�V�����h#��z����L�)Qk2�����
����9�Os(��XT��U�o`��A15���t���c?;�z/�k��+����nW����:����|��)�DU�r��� /i}��iE��h�i�A����d4 r����\
U�����^��2B��t_�=�Y�����)��l��lL�����K�l_g%���V��@~������a���	?��h^X�t���Qg&�z�����ac\U���'�$�g.~6����|^Fp�$_eCQn���0y�iw�-�������<�����F�t.�!*�M�L���fEV2_A��%��
uc��P���M��5��Q�>���X�)N�BLQW�����[
o���/kkU����?�����w��C�����sg@C��UBZ>$
��b����"�w~��6BTlL
�_;
�?���'��,�g�<��U��<���^�p�dv�_9�CP����p�U�D��Pn��&�^I�����gr���Rv��u���q^������2	�Ah6t���HD�h�+���SM��$i���<4]t��G�
C��G&R�yALW�A���u�i��\z6��qv6�b#��U��z _�a��	>D�%������p��DCV!5����2���X:$�K?���,����Y�j��S'�~��tV�a�J$A	.��LZnd���r��:�R�/e�����������a\�JF6�S<��<�����������!9�����>�����eu�d;�Mg1�ET&���`}D`���81m������r&���<���W$*���A���A;��tQ�>j{�1UB
`Z�������k#���7��
O!)�%����v��D���`���O
�����0|�����,*��<V�����z����~�61�{�_Q���
��01����O+�o,Q0[�y��P����f!(X�-��Cz����
��b��@�&����s"�L��=Tc��L��dB��Y���%������e� �~��ZIptX�����].�x�a}��sQ����V�:��_�>{��3�,�i���u�������.yR�fvuCp�([��=�f�
�����i��������������)�X��)���t�������Z�����K��'{�oT1���S-�������%�5�����n�7O{X������fp]�G�9K��5���HTn&�h��dG��T�������!Iq$��E
P�4Z|���t�I���_�eV"r�?��f�xC���F�o�X��ao�=�q�+V"�����>����@�Dr�����B�W��@B	��R���~�G}���OQV�}�XP��6��7�I���T��
'`���`yW�x��;�v��S�j�J�	����]ti�0�����@Q�a�?��G�$�q�����%��+
��(���C-��7e��d�xu�j��:T'�wR;M��vSOi�Y����
�����'��\<���lj��-�T_t� �"�PXs^b�y������r<���J*���'A�Ci

t���#oHkA?�u�k�j���	�o�/x��r��z�IT����}	��6D�kl����Z��D���F/�)2������ }IiJ��	��y�������[:���^��vC:d'_�o�A�����+��daP5�,�����Ybe���JM��>>��.��)
���3�J��
J�J�u��wg����
pR+Q_+�C�'���	i�P	�����"pW}�����Dd=f�����6_W������}gO-z�%(�Kv�K5a���G7Tn�V�4���Y���������o|�
3�:�*�04pV��s�s���[w���qy���?z�N _	rc|�����������vv�����C's6����"����M;�5�L�P>&�g�:�~��|m�E���j=���~����{6�,����45
`��D�J��M)ac`�
(���|s��qV�H���Y���B�5,,0���v��6-�+V6�������n6�i��N���"6[
����1H[��b��3����}K(���]G�A��Lu����k���������E�e��XI
t`%�BJo�����
��:9]����Y�7T����,y_s��5�Lk�b}d-��'e�D_��d�����Q�|'�.%�����2�1=����Xx"�����
�)
�����Z���~m(X�	��*g���e�����V�GVBN��k4���7����1���S%?�\��9����'��eCI����v>���q����C�����=�$c���!*��9�����|v�d�ium4#�g�=N�r�0�X*����~�(W�N�d��Q�/{�
i1u,v�\i�8�=����l:���i}������*�{S�>��V�C�Gqp[�[W�2��n������2��|���3*G:�kc�L<����E6�H�h�����'�GS���Y�O����D�K~����[���]��������������~��������?��_�����������W���B:������~���������7��~������!����6�]E���v���������5V��k���$+��re6U.z6���D�������y�$@��<�?hY������e�"j����r
��jC�6I5�y^��
��>;r0,������ZxS@(���8.&���x�!�+~����z`�g"^����d��'y������$x�:S���2�G~���R�&2�������AG����0M���6d���j�T_�f/���$���G��W$@R1+@��������0�.�4P��QlAQ�y~U��*2��B�h�]X�����|+�*QGH��{�z#(Q��E���:�05�!�}�j�4�u\�D?+�o<(��9�K��#s$�RF2������jA%�12�-z�����K������(�����nK��j�"�i%�mi�d�&CZ��DC� �xfH�}�iHR�}�hI��EC�����j�Q�AMvtA�m�F;����A���c$3�":��6�cvt!"�-���m���.l*���US�;W
*Vb�S�7��tEt5��U�`MW$�"�%�Po'N�Z���n�&5��D7�N��AK��������qko�~������KP�Q���;�hU1%�����"�h QUe�P}�����,~0�@e2U`��������lD���N@����5>7�+R����e���e-;���������k��U�d�fS�X�����hQ9�0
$��G�� ��|M����cfuA�^��V��������I�a
C���t)��	���u|5e7(1�m�<�NG�c�L���7�y|���FuA�:�v����Lj"�Mj7'����hR�nQ���W��
���2���z�B2��X��`Q�-Z��9
*�]N����'��"�A���`PW��5�)�_�3��+�C3���������f��LD����5m\������q�]|��>��\���<��� ��F��9t���& ���1/U�.�����L����<��JT�)u��-��
c������~6���m$Y��<�Gg]��Y�PU9<����Ab�,�0���� ;xF��[����#tB�`�~�oC8�oGI���[5���,����$R�c�&'~'����Q�@���Y@Z�����4��s:@�rzOn|&�B����>\GS�]]�+(��6�N�i>���������+_���0j�3AM���p�dVE�G�?�(n�'�����z�n���uiNh������JY��,a$^ k�D��vq������Vt����&�\�F/����-�-���SF�������S
f�|��E����|����==|����\����o*<����0�[����/�3�O�L����.��?B]�J�/��e%���8��m2!M
{�u�L�([h������5��R}F"K�����N��4�!�P6���f�R���8�(������t����-gF�lLs��,�j�n��h�i�I��m�'M�����-�x�h����y>�����`�(����������&#�[#���v���~���_��W@����o�=�1#�X��!���A~,1].�������`�;cX"��P�s����P�D���G�*��z	lX��L*��WIbN3��;G��dB���|��=��F���!rtz��N��*����P��,��eOeKn��&�{�u,��|v��?Mg
\��A�DT<+Z����Y�v?��R��	*�����q
*_��+0�����w��[0���
�����dPy�l����/���������@�9��2�$7��[S����T���DcW!gg�����LP�v�~B&��^�&w�G���w����gL��QS?�I���z�����o7��`����D,	&T�;Med��}�����@vI��V}�7��I����ii�3��� K�@��Q�(��i����
���+-���g6�#��	���d)o�3A�J���IN5wA�~.��%r�#��=���7�I`/j"�V�$��
U��L`���zN���YK�\����*����`�;^�3��������[�dU�R�6�z\�CP�lD��-�|\��Z��r���4'�a�����l������?�6R���/M��cw���1�H���LA��Us��������ci �����]|�����������YG$����9X�L��io�W �i��#����zO���UZ�$f�L����}cV�BD��U�F��=a�@P��������-Pf?tsi�,]"ES����{����rE��,Md|��$�B�D�fQ�����5
!��i�3�c@��%����*����[��?�x7�y�1�kT�MN��_����>���px���&���"+�f
O����).��	m�AF[$�^�k#���n���>����= ���R��K:����W6���T_��>�9��M����_I������ �[eB�����C�#.��� 5	T1.���2��	��W�5)b����Tv&�]@�b�{&"�n�34���R$Q�d�L����VP{����*!5�m�/���V	h2�'j���T$S�2�"4�I�.3!)F�t;��P�~���O�h��#�%�j3?^�)/x��Z�x�� �$���~�nK�/�������0����t�s��U���s��l��,�v`��
$��$�kdE�1"x���F���T6��������e��B�y�6.@D�#@��Y��~V�����p�G"��{�R���gJ�w}�y���l���.������#}�f�5���6�7<��������Rn6P�F��Yv�g�l���������WJ@D�jI��Oy�J2�����1�gGn_��jC�f�I��Z��Fh���6���|�a$����8Z�P���{�E<\R�iCp��+��'�t�;�Or����B*���Jo@��l��9�b�kE��r
;��D�������P28������
+YBR�>c��������X���oX,:r
n����}�q[�A����$�H�����#U��x	lr�C�%9�B�8S�x�h�y���a-vE
�E�G��O%��I�s�D&�����EQ,����J�_o%"{�H�'%��e�X�A�!>yp���.z_�����:Sd���PF�k*���p�a������
$����l3�VX�)�B+�!G��d�V�s1�b�7���A�>8>q����+=��`v����HN������ �iAq���|\�w���J?���Bs+[FE	W����������B�a�Xoy�]tF���&#I���	��>E�����u�]+����<3IH~��m��N�,@k���<�����2���YH;�/����90��n�k�3�Gj�,$O<m��k�;3�&wZ�����2��m��L���_x+��)�����=����t+*R���������H�����"|���z��6h��`� Q�,\����@�����EB������OS��'��a��ka��R�
�fJ�P;��8�B������D��jBf��b��]��GMH�[��:8��=V����a6h?��%L-Hp{��e����o�r���]'�E�7�Y+�`��f�� ?f$L��f���?-s�Xi��UJ6��$V��9A�rE��������;������g���x��^d���"(^`}��F��s�m��,�����[���H��p'A��gC"���ic{�b���^�����eA����p&Z
�������:jiS$�#l�5��0��m���vE�rx�<'$�W;L$]t,w�����)�}F��wl>����/e��t����rx������%��H�"��T�V���������pn�~l����������}��o��iz�y�}�r�]p�|������k�@+^�r�@�F�����[��r�@��T��+_����z���\�<���Y.�k�����r��^p�|��k�o�I����\0���/��rA�5	9^P��z���r���U
Y/xz�h�A�Q��w��{j������x���U���C����w�������������s���|�q�������+��^�_�r�B���+TNW�'_�r�"�
�x���������������	���FE9�7_p,��������-_pf����y�/�����"]�q�����5�]5�<�JRN�a�������>B.��)��y��+����D�����n�Wx����p�����+B��{�p����Wx����p����W<�z����{��]�+�����+��NC�+f�{�p����.�Wx���pE[�tv"��nW<��g/���p�������-]<������������������N���o>���o.���o���o���o����o����o���Wg���7_���7W���7O���7G���7?����1n�]���~?�1��h����}ipc���o	n��=�������>"�1��\�w-�������nKtc�g�W�}�"�����m�n��"�-���W�W���W�������Y����z������HC+�%��)���~[�N6��z-r=tZg!?���,~��6T2�)]x�A		�e/
��R�z����"y���H��mH$q���t����b%���D�k�#�����rjP��D�c�I��O�Z��Z.��.�,%Q������2 74?���~����&���
Q^Q�%�C�@w��He�C	�-���!�j�I�����9�
�%�-c���;�[^��f����]�j�-��7(e���1R�%�"&/����$�yt����(�p�c:��9]��tAkI������ ����GEpy�"�r�(�U����d�}/d��s].6��>�`�u�����k�M���#����L6�[��l��dd�]
���dC0'��i�����e$�)e<:(O��tq���!��l.J�=�	�),z�be$2����v���u���JH����S1��N�H��M��v%P-���m�$`����E�]��Xy�m}h�-E�8�x��L�u��v2��"�zH���]���@��vQ7~YBZ-�E��e_��s	���M�����O�\�T�G�����DYZ��j���Q8��������D��i�\F�����m�7��KV���$ e�x	T����{�I�������L5����D�����rh	���q"��Hq�]0*���/5�u���-j�2�)��*��7��~�q?n�Gx��mc	�cT#,i��4�!�<CK�GE��Xi@_;p���c�����+Q;��!��g�-(��	�\^����j�1u�(���T����c�#�t�d��A��?�Oz��o����xvF@{��  /��t�����'�*.Bz9'�;T[BAT&�v���i^��Y�
��P�w���$�Rpmv�U�-�Y�����3�������3��$�1�i�X��Eb��s�g��{89�l^T��t�$�vB��t�|������hoO��'}��rK���C��t�p�L������+��|�t��t�]\�DT&�?�A0�w�Y����q};������3��);����&Z��_�cC���6��d��[�������u���������!����xFwt<-��aH�YB:;����Jh~�P�X�j�[d|�8�$��3�/�p-���{��V2xrH�(^��@J��'���k���a>����mr9d�@Uv�|]������#���,�����+��XB���/�&�@
�Iz���;�s��N�z�	�<�������z|�?������:,_�a�}3�q~w ������$������C}��I��R]����X��m����S%(�'��V�S�Q�.@���%���c������K���lO���X����2W.2<F����}~��a�gC�z�����������:��5������D��o��Dw0"(I>l�NX��I@[��(-S[��K�I>��Ex}�i��\�m�8�J���<yP�gG�20� ��E�����x3h�T���v���<��2U����r�E��qE����
d�Sy����eV�.��
)?�*�Z��"B����4���?�8����E��]�"��ER���X���6��n��oA���3t��+��H��0�!��[�i��-#4r�Nn]�������y7�i�\lZ�R�o�'���`h��m!���%7������F��h:2j.���I���^�	���5f�,T�VS�����'��H;4�@h�/�
ZI�Cqh���N�5��3�eMl���LY��������A��P�3Dj��\8oN;�k�����2[�
0�G����E�T����De�t�=��5�#�
t�hth��o�y�
2��
���5#���Dcf2��s�9X�qGZk33H���%]�{i\f���a�c���J������h�|��-��<=�r��<-��
m�ur3���3z|^�����@�}�v��C;���]�����.���e����N��j�z��M���O6 �8��e�6�a��@T���F�k�je����/��-/W����/R!�/��#�$����X��#��rU�ig�n=�d����+�Z�@J8�ZU���Xi#A���m!!���5@� ����/�\�
�	|v��h���0}�_�N���3��#�"�w#`�j�sP�~]Q�<�I��n���J�"��'��=wh[{\�,��z���[����Z�OI���r5��]�h�\�l���V	d����o��j/w3%��Ro��mv������I��*��%�kcC0�&������>�����a��Q�J��[mR`*�!���ei>K��qW�]��Z!�YI�x�������<VVu&��e�J��<��s����}��I@��*��%A����u����I�~�<��
��x�3��-�h�:��)�#@!XM�c��H�1��1�=�����L�����]Cu�22���z�;���B�;,�NQ����"��dB��I���fQ���kK�C����?3���S��:n�6h�]�L���ecI�>;�j��(J�X!!���H?�3���y����Hd��#������������Ec
6T_V%�
+
J�	6%�(f�������/�����~��i�K��O�_���BEnc�&}E��c�_��eE�}�c�F�r$�����`<�����o�=N���i�Z/����2VO���GP��
!�-�Kf�`"M�>�z�	��HK��3*(�
}���gw#���������������4����wh_��eCS�mW���}!"k`k�������}!/��7NU���2_�2��}C�Q�mW%���m������O�-����I����/@��&�~Q��:�m����[��t���gc
�3@'�l��
>�����t���@D������J4�/�����"X��/2XD�����0����U_�������5�cw��� �I��+��Se6������{2W��d��.6P���������0{����"���sC%���Z�e*��{p��5O-|t\���%Xcl��A�c����k63j��cf�d�V����-lHT&r���P{��)u;v|C�B��0$!��"4���wY����(;K�����o��G]��hx���xn�n�P��1<��]r{(���X^��N�<P����If�g����qN�v��g=j�7����d����GXO��v"�Z��=
N]��[������SbaS��Tp����v���Jc���~SmJ
+��`�DV�
�6���f���%]�b��e��T��f	I%Z��T��}�`� "����E���u��^.[0{��5'����(`�VoJ>��5�R��~�
�^�k]�{��gs�����
������$���T���76����[����y�}��c�:�gGh>��G4j��~"�UA��|�BQ���a�r[	�z��w`�����r�B��J��@6W��'�U��D�q��g_�m���b�20t=�
���Mh`�r�8q�c�=�=qA�x~C��x~C��O�7���t~�O#���S��Q��H\�����������y���W����`D�UV$2����;����P�,]�����+y;����_.�1�7\��H�Q�m/'�!?(�m��^vER��;��8�	����8��H@{����.�'Y������.QU"�=�m\"��f���P�����n��>^Y��
8^���++K@�+��>^Y��Q�x�W��,Ddt5<�=���p`�}<�D����J":Z�����V��s�b��`���<��RNC�����K6�1Z�nC z�J�A*�w+�%+3�4�gGo��,�3x�"n����TsF�2�������880���	x�i!|7l����h��c�d��H����T�
2�[Q�*��:;r��D����g��Qc"��(
���������[�y)���� 3�'@',��g��[_��foCjx�Pa����\5���~v�zu��|��&���������<#xE<���"%��g��u,	�1���cS��y����;�>60�`A�W��X��<�-@D�n:����3�H���`MU��s���D}� ������e������������?�����`�����x�9>B���}���9��4�����L���O`�^}��I�q���M8|�p!M�u�Y^�6WT@���)�(�}�o��@
��`av���������=Z���T���h�Xf�#
���v�.w��(��� sB7Fmp������	�<��
�����4��������|��)�>VX����l,�U_gu�%�X��i^_�f��S��)@��j�?��KL	6��9�d�^���xxtPW�R1�o��b���H�����Q��k�7���
�7��n��i������<���*>!>�����
��D~�K���
}���;��%l&�P�+>vX[��,����[X�}g�����,���(����%*X����>�rw�+�����:1_�.��;z&��G�pg�]t^�zu"j���A�]����.��s��1X���
<�g�����V&q�����}�DW�Y3���L	�+J��rm���&�l��}��`�Pd��w��-��)5�G�7����C�iX�����V��{d9���a�F��_#D��D�s6qec! cpJ��D-HA;�R�����
�X&�`���X���#��C��
N����	c��h��B�B�x�A�������KL���}�L�*�>�L�Z4��F�c.�i���n������;3=	�����841��=��D�M.34����,�d���\�K5Po�8�bu�F5��������'�'��w������.����|Z����40����t���
�+~>m�����S������x ���B��
�x��[��XGF�z�v���j���P�c����@:wMo�$��N����9����L������\��Z�#R��?Il�m�#��gg
�Q��"�:d)sc3� ��/�6��)����<E��9�S2l��6�D�Y��YE�|?'��Q��Ev��^\����O�����3aZs_E���i�i������0@�Go~�j�hp���}���7���������p8>*J����"���2MSa|�d��d�]h�
����b�8%h��l�z�d3��?&���7cE��qQ�3����.�q��G>�l�9�{g$@'�W@hp%�ox�Q�N6l�7�<.>e��u�O%�!������\u{��	1/Q�A�������`�w�%�&������.&v��v5��#y[])����t���
�B�5���&�T'`�!���!�����/�Pw]
����-��q	�0������L;{��3�bB���:����\��	��*?!!��� �En�~H8"{��ZA���Y��������,?U���h8��X%�g����>�|V[��go	�����-�8h�qL9[��9�'[���nZ��4�	���.����	��:n�H�Y���A�R�,Z{�0t��L�E��H/�"b+��nrz!���N��Piq��VddR�����l
�y!�������:Q�`��EUb��G����Z&*�����k!J�k�o}J "�U�m�����*yb�/U!�[FTO���]{n��_�� ��|����~ZeB�{;e����,,�l�s	h
B�\p>PC�����V�9���~���7���mF"��w�nl������.���6�xnNS�������?|l�M��Y�l�����cV�Y�
b�9�YVtA���Y&�X.�|t��Ad��|���IU��Z����0t�C��ic��NarA�����So�G>9����b%mBabq�X�
������<��CW����p.�;���A�)2/S��`i�1t�fH�T�������^�!�k�2i�HowL���B��X�y��%R�k�����������Q~B�q���sB�0����[A�[O��JL������b�4]%��D`��z�?gt*kQP���������3�pO>l7�y#��n��`P�jep���#*��^3�M���/O#v��BX�V�i����2�������O>� ��$`�s�Q���v��;d�`���PQK���'/���!�}�$K�[I����u�j��da���iu����e����cx�?n��+��
�2c+'������iV���p�����6���3�����
��d��F0��Fk�����__
��%�����jV�����"��o����.���zC�Y�����skJ�D�$`�sn&dXam�@gB����;�}
�~5gBd�pl��&w{���5n��X��dEE(�����i��el=F8]��(��5v�r�=������0/Ud���j��h(�`��w��1wH��=��'<O��nz���C-��-���+Q�_Fh�q��|!l�;��x1!��2J�=t�u�`�� �ZA1���)b����ZB�?������ ��c����L:C�������o���F_�epA"�{
ea�t�����a~h��A��>�)������0GP03���|6Sl�-(�F4������9?�>N�	�c��T�i~�ps���m��Q�,�7wI�������Y�$�_X�q��9��3�:�b�0�w ��yCo������#
��������H���D�|r�q��|����1u7�mn���G��+j����,��k~�J��V�����(���f��/��:��/���Q�aNFH���|���X��
�x����:�>�*��Dpq�1�]o��������(G�?�h�|~az?����o�/���L��'u���H�q>�uG=�B4�	����s��=\���^��xET��Z"��e`k>���u�#��\�5��X��g�I�����#�bY}���0�!����������������8���:<Z�t�<�B]�2(���r|��E0���Ib�����$��l6
z-dF�c�$C
��=B2��F����p�:q���:,�)6���29��E��P^@RX,��<�������O�HM~y3o918&�j�c���T���W�Mb-��}�<��4������{�|~aB�("�����B��f�q����w��+8�������L��>8��/:6m6� E�s���7��|��F��\��8p�i��Q����`H~�L
Vs���f-�����Apc�.�~��v3��n�+"h�Q���Ze�2m�9�
8�oD,�����_�?<���a�
����!>N
Hj�:�+}d|.`��&�a��d �~��O�XR��A���V� K�&����������GM���w����6>2�u��PEA�qD0�n\���������P��P����)�~5�$!����JO7�"��C�OD��f}�5�������~��1Oa����>t� 	i���Nhr�(���0�����<�}��	��KF�t�,������a��/���O����i=.���z�b�a�5H;�[#�����>��d��K"O.4*� ��|�W2�#�4AS�.@t�!]�������d��=�!��DI��#���� }���LjU����:����4{�c3d�T���3�0���uD����g�X3+EP&6/��o[g
"��2L���R�_�K�_q�� ���ErkD�b&�!�3�3"�&/n*�p��>�\�p�t~���S'"#�1p�7��������c�u�/����(j\6I���P���(�<6�ZY s���~>��z���,�+�:�G�;L;�Q��V�T�7�	��M5��(1�����a.5�����-�����t��f�_����D�=uu��y��F����kQG��� �c�51!�D�L�n���};8gz6�L�e6����M?I�H��	k�c��*��X���q�b��PR>����C�7N��,5��fsem�R���d���M������ ��$�i(�V��d��U��S�1���2!�h����D���^a�t�����}i$����E���H�<;��h�I�y-��q|^�����f2�A\���ed�h�.O��f�'�,��-sB
��,��`��-��j���0�����n��A�#:����aN���qt5���H�	��������u�\�3����F�0��P�����OB��`���a>=���/>[eB�h�=�a.H�,u�y���Y'��0s^'�����0���.3��:�a.%��0����0W��QC����l5/�LS$C���6bl�2r&F���`D,4��DVq�g��Slse��+��c�c��9���4�E�a�_�#����������
��_��	�8p�����80��t���@e6�0�|�Q�}����@e�":e�		Q#�� �t�jQd.�m'���}GtJ-j�|,($)^��q���$J����=�����������s��V�8�>2l2����P�z����y(�
���-��8$���B�(��G�/�mH��@�_����gdc@�!J}���h��Z��pj�@J=jH���:}V���������E0}���Q����D:$�a�RUN�=�a�O��p���LU�a�nD:D����/idFQ5�j��=a%��z����H�Ma!�}`F>\��(���voq���0��P�f
�!�]Y����m�����:y���?�je����TI��_���z������\���1_�a��=i6>6NLG�K�g��
3��7��` ��*��$��]���5�_�������I0���y����bl\��0�Z'���{�J��G�,8�����8�K,�=:���r�������,3�0�����I�.���s��e��Ac�mD�������g���c19r�79��e��C��x�v���\ ��!���>H����p���,��r�9��9�~h��0���7mX�,&��p��wj�bj�F�[=�f�5gE
�4�}���H>������*��
[6PP��C��w����/��~*����b��C�g������P+j�x��������d
%�1�Ms������LT��bT�^���x�
K#������o����U����_c1��W�2+���%V�O���V�e�'"o
�'�o����������o�����f�oC}fU��Qc��.�
^�=��������7���������x�y���X�|��
9��{��kXB-�C�{S�z�WE�� ��6U�����N�.����5Q�7L=�O����A�W���
;\�U�e��yLA�R��m��,"A~������h����`�T�"�i�o��NR��OZ�_MZ�B���FT�$F��3�Qr}���n{win>/d���t��v�
��2�?���BX!�y��J(����$�d����IT�u$R��L}ui�V�:0U�����~4cs���0�O%���������_�rx��s%���K�����2�]i����Z���g%�L;3>������F�N������m8B%iv@��������!��Tr������3�q���\���4Q����Z����:�r�8� N�)��������:f��^�)�N�E�/,�����*�zT.w�����=���i�8urNY��9���>]�����>���n3mR3?��2%��[��C+L��Q���{l�������G��J';��?�
��5�9C�6C'��#��ZV�}Rn�����I��V���4���"���z
��u������W�|�]��d��[G9E�F����S���.=M����Ud�t|'M9'/b�D����A�)�����{U9�A�j.c�@�X��[�o���/�C���fO�����M�E�(:,�EH�f��A����G����/A���-.Q�Y�UC��NXc��a�5b�J}x��Z����5��>{I���w2'u�
Ii�9\��s�+(�+���9^q�������J�"K>���]���D�����{����{x�;_B�n����+����w�������N�[��m�������w��w9>���~���)���)�=������=�DW���2�>��W�4�����M�j�����/�����%m��Q�=��rA�_��?}�O_�G����~�c���%�v��,�.������o��������_���������(?g������-�vc��J���i�Z{��9����B�,��X+��\� ks��@�w�j��$����.�'����Lx��,Y���noD��[dS:��7�e$�����>"��G��d���U����Z`��dzK��Z�o�DV[���7vOp��V��o�]�vv��'?���6ph����2@��Lugn8���'����/��q��"S~��OW��h[O��V.��T�Z�� ���RFyPa�Yr��*��+�/�M��KV���M�hTZE W�
^M^��%�D�,�$R�&���x�e��N}��{M��H^������x,GA�r�x�w���E\����� �v�S�%=�)^���XM�E�6��4,m�g=���BX��� G����,9�g�I`���j�V��}��H,[H��\?���o ��~�U�u
�W�`/*4fy��`<�_�X�h���;8�\�35����v��t���BK`@O��&$�O�'{=>�=Tc�J�,c�EN��S'�%Z7t��MQ���3�8.�L$�
��3�^(��a�����[o�����N���u)��7���/$�����Qm8�f��c(�����V�H�C�;��70�����7z�v�e2�b�R-�Q^}����|*
�����9�����h�wv1����g2����SD��t_�K�2��Fuc����|^�_r��4S��SE������~�����6��
~	5�-��D�
9pN��OoG�<��OkyH�r_Z,�+�B�!I�n	o�K���P&9R>T2���Ir+z� )��M��#�(�� �tt����+t��@G�X�s���M
�di��@���a�8�J�!��q���C�P�s<&��I�:t�� ��D���8�)��F���K��"EK�R���-'���4_I����x���!:�� 2(�m�v��-�	�F ��[��~�1	AY�������)���������B��Mw�{��et1Ny����M��I��������fw�Z�h��6��d�*�q��B��EA����5'���-�;#4���<��\-��1�*����*Z��1��:� ��s��_���A���k�5mFF
�U ���VXG�Y��M�C����d�g�J	d�����V�N��AS 3��9m�D��5N>%)�L�
������|<Y�I�>0�hQ�@��A9_��������Z+�ah����~��N��{�$��~N�G
j ����������p��r�v�G��@N�s������}-�5!�.q�� �y�I\��t�� S����/��_!.3�wu7������c��;w�!��|����k��
���o�K.��Q���G�h�ei�����E90��3T�/'t�!�hJ�c3�����Ee���IE�p2�)�"��U�iH/�:V�3��y�Z�@n�To�������=�\CsY���VQ�E��4x\�-�s_s�GL��
-�t��gD�8+z�����'�{Q���{��8`���6ZP�J��m���2w��R�JQ�|j���JO]Y\����l�.���������~�G�,
�UZP[�CJ�/����C���A�OI����e������~���fl:k8�x�����{QCI�:��G:wP���5z��1�a����y��8���F$��@� }���F�d7{t1��[]�k���^�����fn�a l��4y�TS�����zT��\��2�K��kl*���\��g1q���04���.��\B!��go	P'�7Q���	^�N&���).$�j�s*�u��h3x�U������MNT�A�f�b:��J�,���[s(����!�����O���p�{�a�d��{RU���d`"�wEI^��~C�����h&��Z��w��B����.�wE-�������HlV����i�f*�Y���K��k�����|���dD]��aJeUt��Pm*h�#��� ��~q&~<�kx��FDj�
z����i1F�b�,yd+f���%�q�����9�/���u�o��k�_\�����������P���d�+���� ��u��D��>5��]������k�������"H����>;��c_n�c_f?�����a_�N���hL3G���r�����f�7<���uy�Y;��0�'���!��z&K�3�?�q���)Ot�����n�T����f	H�}�0��lER�-��6�mv&Ku��'YC���!�K��v���YGjgA���K�����>��Z���nt��"V�U�L�!�cg|M�m1M�6����sP�����t��x;$)i@�Z��"I��4k��v�ER=�W�4���=���&����_\@��8Y��0@c���	�s������t��'����tj�2y�-����|h�afuw�xDF*��)Z �GO5,��|�h�$�[^h��!�����`�&��4G�>�p=>6�sF�h�yX���h���E���zB�����1m����
��F��m��2���)+d�6+'���z?���O��� �����E+����R��zrU�H +x�8����������`28�9���YYa����m0;�E���D��R����Z	Dt\CA*�T���b��� ����B����-XM�X��u:M�2��9�@��x�r5E�������]�q�X�in\&K���j�j��6K���DX�mu��fx�'|{���h��Y����J�Q�?���uy(�������W���N��B\T0��F>�C�15�i�����&�m�����"���4�`��P��hl�P�8��g�%�h>/,Y O�Y;5���z���t�O��]��-2���'��B��"���g���8K+��S��� \I����z�v��N�=�������%Q�����gJ�������(h����������s������&]A#��w�����J�Z&+E<%�W�6���Z��h�������zN��?���% ��U���r?/~<���!W���l�EX�;*��)�<��e���Vo�UP�P��
����G��M-��S�����7z��z�m+��j�u-`k�*u���"����FD����C5g�"�a{v���$iE����E�[�A����X6����B�<��}�=��9�h}�;�M,<�-���l���[���/�Pg�?/�d�>
��I��L~������������oZ�Tw��������@{}4��#���L�b�'��i�lT�3�H��G[��7�B�L--�y�K8����%xG�+����
�B�����<n���(�K��'��3��E��t���L����$���������'o��9���H38|�o��YT��P4������c+�E���/���Z��Y�m"+�!y�l��tU�P1@��	|+�B��'��W50�&�����BZ�=��$��N�����j�/a��<$t��y��qZ�
FV4<p+��,H�A-�8���H�=�_�e����9m�#�|(^r�������,��Wao��G{3�*�d=h��6t�P_��uH7���U��i}�l����������c��{!���e`�5����0�/h���.�����G�(G
lf�������m���p��	�1�: i���`���
I4���Y���"Ob���:uZP��J�������ZA�����X��Pv�O��A��g����d91Lj��2V���k�A6���E��4�t�y8��"l�rv��l�r����w�R�<�;1����E��;����#m������l��9�
���O�Z�]����o^b.�3�xG]d����:��/&d���[��b�BT&�yf/��z�<���X��?�VvB|;n�����p���obx_-�|���XQ�3O��z�L$��W�e��Wj��b[����I`�`��KV�aW�����<����!��������t�B���`�;6�{�z���!1!]�v^b-����n4=��������pK��
,]���N_d����r���&8����u��3����~��� �����#�2T��25�|���@����Z"<jW����m5�PH9��������%rvO���r���'���rt �����bB����>8�����r�����&��x#7b�z��K>|J#�[���E�������x����P���]�_�����B�:�ssY���Ef�@�i���G�?^�L����o���vi�o]���k!dz#�~�:���3�R����-�wk�.������<���[Q��3}���WH~��Ci$�*�^����E�P�����d�%��#�+2�Y��d.l�T�X�ED>��fn�����r����/��
�#d	�N�a��z�_K2��4y���A���?�@������\WN�C�:W�S�:/]����$�\P�d��
A:�P !�/����A��*M	������Tw��HoG���L>��e�8:o��B�D���7I���>C����y�f�*so�% ��d���[C�J*���8�w{�`���l�J�=��0/X����$��~����_ZclI�$yE_t��_��2����}�-�����HD����U�d��
lPp#���V�����?�!�R@(�&���P�_��u�uY�;��	�7'v��|�'D�[����Q�Ng��"������N����N$�;�7\�
y��/������Y�^2#'R��w-�C����E�X�������fDQ�O����'��+A�EV�jQw$�|R'�n�8���;��D<&�
J�d�*��c����n��������F�&R+����M$RmZ��W$�������J����W�G�9�P&*1s�D:I{}�\�q��C��8��'�T�}5a	����!��J�[���x�z!K�7k�cq�B��8.7�����ev��"�|�8b7r�H���v$jP���.g�qJ���99	����_���J
�2��	�����-G�8X��j�io�.���\����g�d���5��Q���/f�/��w9f���	,*jg����"(��-��&�>��F�����=
���:.�h��M���?�������	Z��W�)����q�?��B��h��j�A��PP+�����-��PE�&�������P�4�{x��+����#EV�N��.�f��%@���	d~��
������X�09���nbL�y1����O��-ufh��s�=���c\E�T�����3B�0���aH��@��^(�'=%��*���t7�V`L;s�Tq&���yB#X�����3��],�c�1S��������-�����P�H��$�Q�~<��Bb����w���ro5����`2���*���<9r=����8�M��ofP���U���|�@��yx|)y��g�w���>N��~�P�^\�����E0���������B�d8G;���_��!�o8�����H:�����zaR�J�|��Y�US�K�t�D����xE��h��yx	��LBin6�V����/��=�g��*{8��\�dB&M]4t1�	C��[&���nv3]����d��Gso�������[&I���^��E���0���r�P���?|���DC�E�,��p%��n�����^
���'�<�_����S��3�(�i�~%��;K6��l����	�F����DP6�M���x�����M1Y��2G��b�V�l��
;�)3�c�#,��iZ>?t�=���-v0Tg1+F����`}0	�Pg��`����
&�kh��k)����3������,��Cm�0�JHL����Fl>����o�~2{x
I+��O3:�?m���*����U
��k��)y"_�=����%`����d4����#�8upd���2j����05w>�����c�H,���$-���Z�>�����ugHo�\�B�����v�Har���tG2��{(F[�6�t!��7��.�F�zj��/H���d� ����~&�y��]�����)i<`��f���@Dfw+q��w��=KH�I��~M����z;{#�d�>��jAp�(k��=�3r	�J�D���2�����b��������i,�xJ�}bb�u=��L<�J;`�:��o~#���`*�Z{^p�$�����e����;�o~���(*Y24h��wj��E�����������,��GBa
Y�!�88�h�jC�]g��hw�|�h��>o$�N� �h�#������U�P�EWXk,^�����M��,�wXp�����Z��(o:����:����OP�������?
�6lI�i`��_�Z��^�� O�=��V��Di��@��F�
ta��������]�ymZ���t�>���f�~A>U�R��i:a����~P�����#:-��E�D��O]�#D�8�<�`����	V��P�Z��7e���Z��`%�@:�=�x��Q4QT���0�����+�^h9�������2
�y2{{3����0�C]TD�@$J+�����V$�-�����Ed�JB7��	�J�N������5��I-�g��������w$8>A���W��K��8BHc���X�UD ;�9���!n���-��x��n���� y������	��yG��y��}K���kp_H��w�+�
1�mn6�`%N�,�f��I�"�5K�l��g�hv��*���:�L$X���L+I]h�*'W� }���������8-�����[��U��^� 8���
��\9�-��>V&K�#0���'��S'
��N�����;��*
�����V5a�m�U_�]��5jiVcu���#���1L��x��!����(����9n7��;o}�>d?�/���{��w�~� ��/L�?����'���(O��C'�O�g�n�����M��&1�Se��S=�����@�h�q�Z�P���G��1Ozi����T��;����[O�_���M+i���tP��7d:uB�#���`����b������~�����qEe����'���kd�9��}�El������eI/�w����[B��w���������R��|�;��~g��t���t��~��W�z�6����e�$M�
�(TCA�N���X���M�.��-~M7��5�L���������}+j�>
�D���y�`�x�{"�/.�(�[�=����>.vdr�~#�BmJ7GYxu������
�����b�������BN�p�������U��
��N��K�7"��C=;�k�J�����g���?������s�*A��I2��6_qa��1�����[��|�^��iqm$s���'b�,��K-^����W�P�I�5%���h�P�S�bW��7�W��7s�s�R>���ff%!_%�]\�ju�{��I�G1ph���� �/�
o�����e"q)���.��8���gb�/��,�E�DU����T<��?�F������]N�	�������6�H��Y�y'l�k������������������?������l_�[����������;�M��2r^d#�x�t�x��)W��HW@NWH��p���
KB�"'�M�m��F ����+Dgx�Le+�"K����~|�H��������Cd*Z@"������������$��(���������������7j�@V\��������Y���yv��*���_���	��AA�O%M@���=\��@�sd
Y�������W<T�f���a��TA���x��mP+ry=�������P[D����@�>TS�V�	�3u�@��z�Q�K��������K��G��;��7$��?��H$I�d%�7�f���+��T���
@d&�)H�����W�����M�y����t�2^e��X6m��B�}x��Z7�5�O���n|�ua+�����	8�z;�9P3�,;je��;_j�$���A\�GD+ZPjEq�c������b� >��nE3Y�:X;�GZ������
�?���DD����N�����\#3��{������)��X6��������=�B��M���0{��Vsc4�%w���1�K�ef�	fB�����t����O8��|f�di)�z�P�h=Z���dC�u��U��;Y��/��d@��Q����(`0�- ���P��|*�2����@��h��5nEW�����V$��%+��"H�/��sY�����D{�hJ9y�i&K>��Pm�v�X���zZjSot����d�YU��QM��Z�}�����`R+
�&u�?:�E�j�J�+��y�E�HcoO���i6�"]ml�����jB"Se�����dVjX��R���d��*��(Vl�r9��qfXjR�O���;����R�����f�8�`���6�Y����AL�4M�[����u-���3-�(���X�Mk!R+��D�e�4��^��V�Y�hY��#�V��r�����i-Hv?l��������[�����/���yC-��!�hS���N��G����j�����d ��`T��3�DS����z��f����U��|���6�0��;��VQ�Z����H������@9$+J ���\~3�w�Bd����)���#~,D�4$Y�����@��`�����3�~���v�w����?��B��;)(�r����1��4�{AMvhLsw���G�A�)w-u���/l=�1��"n#����3E���]k�L��1d%Z;^��j����Y�����")�H�� O���WQgY������f>"�A�%'�v�u�����A�������a�i����$S,���6�#����!+���+8y"�����g9/we}��5vu���^����|��[�?_H"kkSp��r��������~7�r������k��E"�J�m2M��M�(i��������	Iu�'���~���8�;k`�0��L~[���/q�Os ������M�4,H�L����D�;�sM�M���g������b�|�$k�q�4j������l�+]��\U�,Rs���U�T��='��m~�jg�9^t�,�b����L��d�v;{��H���q��g'�����iu�^�
�B7�*�s�=jn�#�;��NkD}������`(B��~�.he���Ab�p-qA�n��.���Z-�e�(���`'��//�y!�����:�?�x{����	����P#��"�d ��l$!j�����yv���-px��A��%�� 9�M5�g�N��+�/����z�*�4��o��ON^�����`�����|c�t�H����%���L8Te#�DZ3���D������}���h��b���M��!�PEx��H~Z
�������x��im���]�<`�H�/��"�'u�L��EFH��&��]���Kf�s��EO�L}��������-���j������[��t���X[��M���\"%�;o���LD���r�A�����G�ok"x�$x����XrH��8�����i�S�����T&������^��Z$�;������p�pd���:���P�j8��>**�5~0��������!�K��G�\�7%�[�X����������75a}@��'�����&�-h����$������)i��n*v3�eg(]�c��A��"Kf�p��2��2�Z���b_����	����{8��O?0Z���*�^�9WW����h��T��j��
Az��[E05Ux���^e�U����������
���6��Wr��9X�d��U������M��������R{3�k=�|�K*�|��9A���^� *Z`�W���^�S�`����1���`&�$���Mf���gj�L$��V(9�6.��I�t���Kd�o%"���i"��*G��	8bx��s��!�w%3e�����#��"9B���_7�!�c2���t�{��&���B+|�M�
������G��T��Y�U4kw&�Q�\��B��O��Qt/�O;d���!%��s��nmh���V��K.fy?c
~�h��J���N�'"S���s �,��%}*H@��^g
QH]�%�Q���
���>������P�VVT&U�oC-(�]De:S��T��a
���I�����g�w���[O�Q��hA�Tv�	
AK�vzO��LV!�d��K�2�<G��L�S}5�(��F��<�%I��s�$�/�a%y���4�#�z���V��J���������$��D��$�#"'���S3G&*�����M����
<�<���� ��0C�������(�	��*������=�;��t�Z���2������ ��y��P�v&s�Rn��z�$fE��Q��$���5������������7Kyw`��I�P[��Qw.��7����
��z�E��1)�u�|R5to���9��oL�f�2`��z��2gy
Y�`��e�R��.�1����8�� �J����x ���_��u�����
T�X�V��
�����U�����f�����W��b"7�$�;��s�W$���?����C�O$6Dyn�>�0QP�p�kV3Hj�m�02�&`�bm�y���uL�������8�y�G��wpb�
��Ejk�M�#����@������[X��/]��Sd*Bb�{+w�qd�������{���^�/�+i5/����3�T�S\x�Ol����n�$#��<t�5'$V����@+/l��'/IZ_������$�����1&o�Ib��=��3�i���K��$�,$q}R���"[����������|���->2
K�����GF��D4�N�7p?w"�G�{�d���'���L�5������\L����Q! ���{3#wP.��*g���#�f���A{����jM{�~������������4g/���������e(k�m�i���z��v�|`.��~J�K�W�m���������D�5 �r�.�������2
D�x�l�����"3&#��Q�I����/�}���[kT�
���iIw��/�\aB���]
O�`���y�L����+����"��A������:�7D^F����������32	2}�a"��a�S�W����)�U����*��'~&i���&������n��o�)�N]:�9#y,�eD
_E?dF�
�1'"���8x�����Q/�#\W�S>o������@nKlXY&r�
�_ISV�j�]�&�>u]����(Jc�t�nO���<�v���l1��"&�������0���"`K��j2��s�O�>xx�B���-�� "�����K97{��XI��lI6���y���C��_���U2b��������e��2�|MU\����4�q�n6����E��)UM��!D�2�y1[p{���fG5�!�j[i�T��I��gr��rk���z;$�����250�6���E0�6�V���t^�j]Gr@FE��q�;�����-~���>��>o�5�q$WX�x�9g�}�{.6K��N�4������e9�JM[+K(��i�����S��������
�pF�~�v8�s�=�_H��G�.!*�#��2a���6�Y�������n6H����g_��Dg\�B�����K����L�+Q��3���������@|���x��qC�%N��U�	��Z����m���`c�K�>��+Fb�����R37�]d��L�U#P��L����>�~�]N������������
�fT�M���!����X�m�O_���w}������D*H[p�%60���=H��l��j\v�T�`�m� 1!�H���k�T�X�d�2��,�������9��*r��a�B�9o�/1�#�������|I(�����9c`��6�{5�� c8\F�2.�^P����f�>�@d?�_|�X����P�n�w���a�����o��@���z�]��G$��s�j��
$@7�"�}VF~���Vr�w}�!�����7�����v����2�C#Y�`t�4 ��l��4LQ3&�f�h��\���-��>x2�Z��Pi���-vF���+����>��j_�?���/��2b_) |�]���� 7S����D/�Vd|����:��t0�'��������6��L�/pj�����~���0w[���������p����������d���]��wA}"���H��X��b����c��`���L�$!����Z��-%1(�,����L3;���g�l��^V��7����z�����ez�����~�j������k���>&�r&�u3�<��g��������_���J��'�b����|�?o��[��,�?�������v�<G���������1�������yK�����Tk�����������E>S�A>������*b��H�
q����?P-���u*�s�����O����+���.���1�}�����e���b�{.|���s��Z�����1�}����������k�_�;���gK���������Z�g�y�}��m����`E���Ck:sK>KK���A��!���{��^����u�S�R�J��V�Y���u#k��t�I$��.<]�23��������f�O�����.��������[��V�n��t1�����b�������w������{��^����s��l���M~2���������b������~������}��u��,��}�6��7��ec��.�,��=�Y�.;�h]�/f���^��q���E��s1��e�b]���,��=�Y�,;�hY�+f���V��a���E��S1�ve�b��.�,��=�Y�*��P��c'���5[w(������=z�����88��h��Ca�����{.�^��<��P��G�:����{-� �Ca�Dp(�����Z���?j������v?� �����L���P<\�d�O��CDF���L��^d9�(�&2~o������x'I����������!�,����p$��+019�|p1�u%�� �'d����`�����n��>��P�qV��U�����c-�H��� �lB����QN�s������7�VU-[�������)k'~� �����DY���8�5o��,Y��G<�U���z$��p�#�2e"	5cN&�!�E�������X��Y�Vn���
���������=y�F!y"�k����?�q����tC�� ��n���CN��e��� 'CVHe���A��8�(R�UD�/��!gD�����Rl,�y�|�~Q��	`\��'�,}�S@���nH7��+{����F/���m�H���
9�a��V���X�f�:���������m�$��j%Q^�J��|?1: x�����Y�lo�+DJ5�I.+2q�����G�������`s����4"�
C��G~�RLU_f�$�;�?jkvIV���+�cB�I���)y@�'�Xn�)��'������5���U��bV���n|?q��X����Y��D�]��U4����t�?/2�p�-�Xh���\^�m�@G��#���!Y.EFG��jS�q���hy�p"7�%��<[���	`���8l~`��2�|<�:�b���:�U�ZCrsg��(�L�UI��/un����=���e1�������oE���(r�)O<#��So��$���"���SX*�2��2�E�uW!�
GQ��,�@��y���`��I��a�|<���SHo�K��Z2��T"%j���]�(^d`m���=�@�����l�e��Y����1AU�`���E?DQ����	"]��!�z����� ��;h�"P_q��b���L�W�2��7�CU�j�s|5n�?/�#�M��?�}�8e=>�E��\���&J�}?���]T����9`���p��Nm�M�����u��E��h'�����L[%.c��*�ZWt ��jw���e�����_db}���l0���x��N��k��AO�{e����Z�);�D
�������0�n�/��|#K|X�}U�Q�����T$2���A��g��j/�o��)�����(���/^�,�.`n������8��"���e���x�s����j���b���/������s-H�l*7UJ�T�@�� J8@�X����H;�Ug��xh�`_!id����+m^\���������z����%n��	�(v	�E����B0�Fo���)�c7��y��(7�d����D�W�r=Y���_C�<����iV�k�����=HbFI�����R$C�}�X������S��6�~��&���r^�'����G�=(�j���?$���|����M-;v�'�7cr>��H-$R���G�O%�_XoA�>�o�$��Dw��6,�t�8�Q�RHJ��y^�Z���|N�!6��A�*&|���UQF�"Z{o���D�&���)�x��D�<��Rd���d��;�����qX}v����J�|r��Py����Tf�)��%\#����*����0��Sdk�N!��$��_E�>I�p=�O�rFw��"�:��bS]��w~��C�������/I�.}���9��<E��;|��R�A���'t�5Te�����8��S�U�R+��a���M����%��A�i�HFZ��k�EK��	!�-��wl���@��c��`�f���~�tg<h7?��W�I��l����Z������]N �Q����|	D�0��t��v�@�^ ��\�z�>���J2$MK%��3P�?�ftP�a�uP��dn@�
�O��1���^����!"m���y��L�����F{����~#����c����Nd`G��vS���.���/2�M��|�&r�J�/�h��j���
0����������
��F�a��3h�_2�Y�LT�����#�,��`�<��q�t9�`	}����;_B�N�-�#�B��`I>�f��C��
9�����:�Z�[@Nd���6"_���?HPK�$�L{mYC�K�N�����i1����B��Y'��-6�WU�Qj����I�#�dW��=��\F�a��2��<����������>�L8��YL\~n{\#w}��zp������i��S����X�[z��_Q��1/7u��<�3��������s���M�����&����*''	�2E\a��zj��U���A[2f�Nl�86�b8u:��[����z���:��+@\F ������qO�	k.���8G����Ll���:�Fd��%��y��.��:�WAD��i����+~~���H����~��p��ys��GmOF�������ZCS'�v�r���G_N���k���F��\X,��Ezf�WF�$�����x�=������T�P�f���?�X�����LE���4iC[�����E��+�r6��y��L�%D>��`��6���1|J�1om#��V2����,�J�p��%�}r�`��e�^�����=`-������m����=��n��z������P<��O�3�����}���O.k1S�B��L'�&j�_���qh�;�����D��:�r�A`�_�-r�Y6I-U&2�ng J���")U����d�_��Tg�����M�,�on����������E
���"��(z{� ?�3�v���<�,ybq�fF���e��V��"�$�7>�=n�y	_�2����B�XN��(�����O�������EY��<�m��)�	���:n�_h����;�@��p�yO
��������M�����h�X"m?v�f�L9�Q�cwS.�����BI_q&l�_��X�|�@�WS^"/Z����>G�.��Y�����1]���<&��]46c��F2��O�X���D��!r$OX��B-iI��V�*k�
D
7�y�cv3��c�`�����A�1_��k�����C:�B�,GG�;���Qs&C����}�N���/*�a���	1w����K��Q�����%�v�����V	�|�59D�^���^H�@g�usQw?/���%{��4��d��9�S�����g�T$��"�
�o�&�<C���UN�0p>����|�G��g5�^��N�8#k��� �-	y%@�I<��B��FV4	J�y#��6\U�����(�M	S�	��\�D&'��H����E����,��X�����o���+t@r��������Y}�.^��3vso����'��������*7��i����g�,B='���� �����;�}f�

��'t04����QD����O6�q��[{1�{�����}p����g����J ;5�
?�����p���W�����)D��.[�^}^L��
�u�s%����Id�����Di{_�m<vM�e`�:�(���]�1T{P�K�z*}�t���8���0�u�{�����������>\�V����r������k\���m��,
b��v�U�d�����tC�}+j��E'�C5�x&Y!�V7I��6"7���H������\��G\���F���9��lHh�Kb��������'�.����G+'g��(��&W�,y����z(M���?��i�m�R�p���W*K@�+�\�T�f�l��t���dt5���h%#�6�OF+p�RQKDF+��;���B�p�\,{�������)��1�K�?����F-zWQ��=;�B���%����,3q^��F}���{�����U���
�x"����]F?�)�,x��{�U�w2|��>DaU�x��6F/#��;�g� �A���"�B�k�#w�I`�6Z����KL�m��oWc����S����[Q��{g4����yK���y�������h�3%��$�f�y#��#x����G�*Z�uc��E�2�2"x�L
��%�U��=���C�"i�O��Y�^a��e�;���Ax+>6�Bx,Q��:�B���!Q$�#A�g�z���A������%�������������_O.
����_����C���ZG����t�O0�/$[�f�����$j�t����:���$
�e�h�;��s��XV��}K��%�R�om����vD��<�<���j���^h?t���+�~�����o��W�l������B��H����9g�`V�~�TY�U��_�5���F�+y+/$����2�1��(^"#c���/�6Y��t���<�M�,Q�����������.Ys0�W*(��Sd�`V"����^|U�k�����\�����|��!-��1x%I������$@d�(D�u���n�6��}D�_h���[4|?58���Jv�?�������;MC��5��x��D��B<���[���
��
^�Wio&�QK(]��
B!�F�v�g/�#��a-$���y`�FO����\>�-�8��E"!��X���1�J�|2x��w�����yz�m�j��\!=z�v:�p�����_h���H�CU�D4\/�3#�&"
�J?zF��gY���������;n
w��@VN��F#�i���K�$_>��hnE���Z@��ta
Y��	�����K�}�i �</u�	W�I�l���=��-�BA��1���	�D���`4��������L�-���L?�����nm���a����1��z�����TA��E��&eL@�.��O�j����*\��S��w!0���c��V����*��@���l
#��IW��H�iS���f����|����+��n��z�i`�z������M��=�����/��W��E������n��0�,�[���S9�c������]��9���[Qs6��3pP�N�+[Q,`S_���B��[������V�����l�"t��y���B���|��Y��;�JD�'����v�$;@?/&��g
88�0T�����T��D0�|	% m�m����;O.Q��IqL�~�Wl����2A�����u��.�B5\!�����-/�*%���I�[;���n������M��N~��������6���it2vmk6��O&Q�/5�s��GW��!.��a���R����z3z�����+�V;f��"���������n���YSY>0���M�7��Jo�	)������4CRje����c��S�|�&��l����G�����c��_6X7�G����J�����C�7�7�)�Q���+�#���'��1= |D�/SP��?�;8s�)�n�X]��c���v���T��w��������:�B���q�I�4P{�u(1�_-�EW�lL!K�
4
4��mn��q��'|_l�33�l��25�?�����B�y�)��?�������u
� �����%hp$_h�4����5��
����q����iU��*�Z�����W6V	��B\�����.q����hm[d��:l#�h����
cui��!�N��*��a�;�F�s@/4��VL�hq��;#�x�L�����~����K����gA�$$Up�!%�;u'N{���e�Kwm�	����:'��mb��^%r��o���\�~hav��`�l
��4Tf�����%�1�<l���cD+J@vO�`M���he���	'�}`�h!K�PcB��������_hX�^����wNN��7,�=o�B+Z�����B�	�S
'����c��W��E�T��S�w�A���w!��.�x������ ������,=��,3?������ef\�yP!��v}���%�%g�D��#�Q�J����e��c���*Z`b��*����J@,���`"��P<�W�m���P�w�iR��?/2x�c��N���m@N�|����j�E�
��z��>�MV	��d�|��
���<��/�4�Q������h�)��K68#q�b<�=���������e�i�i+���S��q RK<Yq~N���2|�#��e�?f�"A�v�KF' (����(���$�/�
23)�#���6��������4�45��y��<a]+����N�t�,-���B&,9'�\�����N-W���C;D��
��4y�{�y�;_�8u���`�ON�[�}j����'"^x��h�����^�Z���������-����4!�fH
:{����B�UBA�T���!�B�M'.kw��]j�n��*Z��'W�7� ��r�1 6W�:#��Htz(�!S���R���N��v+���N����t�iQ�?�{�x�T��~iztDC��M������>��1��{�O��-�r"�c3���W�;u�����fSzzn���']j?x��$���g��;��:4���M5��N�������nF������
KIus>��.��Y�;��!���3�up�?t[E:\X��i28X��[W����d�gQ�y#0D���S�5�/2,��#_QsI�P���/�n��C�DK������S��^1��K���:<���,hF�K}����K=��y/q�0.����
,y��|�_��e0���,5~#,,�� F��%��B�d�q��p�Co�3j�����]O��$I^k�ll��m���9����@���Y�����Z��N	q��2��=�l� �����a�����P��
�)��x�UE>D�e���
vY��
mh��|���<m�#�7�Q��$�o�2dm����ZC6�%������CVO#��z�(D�	
>o�#��MM:���
�h[�`p��m,����On���q������lk���AC�>rh�Gb#�%���G��0b`�191$�������<!��x�'�
���?/���kq��'7���%�p�b2�k/�6J{��3�I�h|`����(h�?��A�OE��F1�P
)����aAW4���������e.�/���3���
�@f/�0���t5S��+:*��������M&	���'�5�9�bV��"���Y��|�����G�=�LL���~f�XMe�	�!�.$����M�T����T�E�2��H����<����7b�d��3�����F�J�;{�z��>��1�/�U-�.p���������t�2���e=��M�����
�-@?Q���.?j��I��c���w>�t�+���"���>��9�2���U��|��N����dH�/�Zpp�s9���	�j������b*���q����r�l0l>�����H�p���9�4�ZQ�O���q�f�_z�8��D�����Z��dP����� �x����x�����fJ�i���%C�@'�wO�-�He���D����g��3\l������$J�V��|������.��Q�����X��@�C|���dV���_A2.:�E1��|na����+����:��ubK�6�����_�
��@q�j	���EL(���'w��'���7�G^Uu�`�um��LK��L��@�~�r8�yzsP�;!Xz)��I�����-C�xV����������kZ�������K
]#|�"��@��x=����`���P�`~*�m�N����DpR
�O������b<�.��=��+H�4���������`@�*"X�C�P�����d+Q����4E����v�L:IZ�����4*�[SQT���>�q>��t�/��AX�q��YARl����t�V�����nE�C��KM��i8��I?*���88��.��U���k�M��d0������^�l�Bk�9A�S���iA�=����&�`�9}�rs��l���9��hK�$��F4�ku���S�4��?��)�>�`J�Ur�j��*sb���`J�S��fsy��aiX����WKZ���-da�4��rDS�E���>�������n���iT��e����*jI����:\��<�9Z���#3��_\��d�{��u���pg�OR_nj���VdriI	z��>/-��9����PC	g����8X���&��m������a�#����Q������S����f��6���%������D��hLozS�����VC��zi���3Zu>����<Na�/x��o�#(�}�����*�����c�]vmWb��~=�|o�t-�
��I�� 
C��A0�
����3����4���?ij�J,Y7^�w���Y��^�#�O}�����V�0#&�Z0#��\\��T|��KZ�d������&E)� ��3����Gxb��RI,\�� ��"��5S�CQ�	0m�Q�W�A�!�L�^JX����D��cC)�"Ir
���d���#�����RR�Jl "��43�����O*sx�����`���8�w�&o*�pH�9���J��y`��lc��$��y%Z����j�y#��s����y��X%�������m����s�Y;R%D�����t�f�*�@7l��E���>n��E/��'C<�qH5f�O���k��b�Q�	y���z�_��b�� ��
��r���XKB$�G����u7��Y��4bZ6y�����ZQ�t�H9`�J�X2�L��0/���8""'�����;}�*���[L��KLOdB�T���V�Z��)tq�XRA�TP0X�	��j��4����2)?/��U@�l����.k��r�5��Up����{}��j��d+��&��D�^�b��b?c}���a����^�=�z	�d�Q��)p��"6�t
v�����qB���pWH�'V+����s�K?7u����>����c����m�3Y}����t\i�Q����o
��9�	\�7N�U��a?��lf|����JZ�|���V��E��T��d��� �<M�Fr<��d}��TC���O�8� �Y�
W�a�.>3�V��D]h��P�oh��r3?��PL����VC�������v-�������Dw������T���J���_v3�'��E6&T����82H�	����:���6�����#-n��
IG�q/$�F�d`&L�\*	ygj���x�C���@x���~��N�[��S:���=�3J������������n6G�+��m��4��"k��yp����X�(���t�&�R�,�}���5���8���^G^j�QD���F^���������=�B�_���*���� E�klG����a�mK����xl��Q��	�#��=/a��f�m�#=Y�c���cmj�Kk��z�5mKU����Q��h+7�m=,����&��=������z2����>�7_�p������iN��N�:!����t��g�?O���������4T�����D\��g-�����f�l�D�e�5]?�Z+����\�I6��q�NVY�k�mRIag5|l5��RX��o�2���a��h��\����t����>o�SBd��mR�D��1)�D����|Z�;n��7��p���������y�(���V��Al���'���IT7�����PLL�;,s�D|jH��n?�k���e��tQ��VY�f��|q]����x�����6{�j<l\%>7�f��I�V��2����Bh�>��Q�	�<"�����Og��B"�k���:*�B^ov{M�-�����d\������ ���r����c������$o�	�z�	a6�%�X�K_S�}#���^�B�Y�`��� M�Cg�f9T���g���A��� ����-�������2�u��US��u����&��*��]>Q\���K��*������o�����o������o�����o������o�����o����B��tg]�e�:���u�~o��M�������F!�K-����kN^��ZS���_������G}�U[�W���������_��N�D�c�NSY>~�����?���}z���<b�"J��7�����y�i��?,?��������e�������C&q�������[�m:�B�.hJtG�89~4�q���P����6���z�|�6?gE�����U�����/�J�B+S,e"�����_��t��e�����c��&��~�!<*�|���98xh�@.�����Gz ���ZZ7�Q&"����mc	�<���}��O�K��;?�d�9p���M8�d�D��s�$�O!�����`�B����SE�S��`�Fg>O�ffj>!y�n2�SM�����	���\�Mv57���I�o��+���F��&$��d��j�:�P(y%��d�z��n��.��96����niC��~f�2��Y������(��a����q�6����AT3����Kv<L����d55���������������u~�M�����eV��_tk����1������He8�"����l�o��x���>�K!��I�={�1��&�s���K7m:��]9�<�~Z�P����`��T"��`�]�����Z�n���C%�!l�I�up_�I�}��$���p�G-����s���~V�E���$U����� �y��������a�}���a�u-��7���/��c���Qm8)C����Q�u,��$A�y&S�����)�'y����cyE�d����������
.j���'	%�`�<9�����y�)<�c	a���f�Oz?N����2Nl�|^L���l��z2��m�3����Y��N���]9tmu?�P����D�j�[����M��_���qD;�D���<$�����0wH{f�q�W9!�I�rN���tZZ�uV�I5uMNoAc��#~��t�^�_z���D2Hw0�~���M`Y�6��%@������t3��FwmJ����yh���u�5;Rg�k�z��"3j���=-q�D�h�[�A�w��`��Y��A����ai~o6$�)�l�L��'��d#�������U����W��*����)���|#m�7�$���a�^�]�~M ����n��k[��hA�{5�/���!j��m�������H%�"��>M�;,��I��R�����]�6�k�!�1��c�	�S�%�������s�l1��4�=L��du</;�\���fL���� �>�6�)�nu?5/o�$����6WJ"R���{�8�+��D3MDd�g��m��d�����_�x����&��qW��E`6#<z���t��oM�<��_�jg"���n�u�@BV��Y��W�a�������)n�V$���'��
p[�`(H�����<��k���PS��u� �{�3��S����[e�9��->�7��9�'������~l��}^)�H�S�~n�2����w =�M��'�����Z��d��c7K���������J�9���:��LH�J���~����dm1�Gl����`n�������fg���4�'�i}n3���d������<u���G��
Lsmb�>?mFYV�n�j��g$��w-T�Z���
}-��c������t��J�~l�l�#f�+Q���~%������%�V:��^�o/�e�������fB���6�b�t�����g�1����>b�^�HE?���aD�*�P��r���8��z���8���������z�ue�R+��Qs&��Z������I@EJB��'���DT����w��v�K�C$�,�O#E$f-oKT�L�Mm���b���b�be�b0ae���,��D�q��)��2�D���G������y�y����=>�0�d.aX*FL4���l6�&S�G
l.a"��������~������k	�����9�I�U��Ne�N�/�j=x��	�~��)��R!(�^������R%�l8��rQ%U�y�t��	�R��;��{�2Y`��RU&�.��n�3�"�&�X��f�f��q����5��esq�~W�"��6)���
�z��X3i���e�5W��F����o[�*%d�4!��;;n�0m������]��=��gB<�;F}��H�oB�^���o|/>��Z���[�bL�nO�E�����q/�5��j���-���w���H�����:.�_�EY��F�����i�|�iN��f���Q����g76��N�/����=���mD�������Dz���-�	��	I�,���M�!G����bBx� ;~���.f$���D&+{��P�'"r�q�W7�<�bB��Kv���;a���1��ja���iy����>�mfv"����E�!s]��e����
�v6��Y�dg���6t���R���1�NZX��b�T���;�{�����g��w.``'�����~����������E���:4}���N�I���J�&{pl�6�O�)��&C���� g��#=������Q��QK�Ya0�[	JG�z`X����V%�>�x��C��1�o���2#2��fH@1����a�$�����a /�o��E@��&|r��bG�B�����
��sf��h���U����*����i�Z0�P���}��3j3�:��2,��� ,MY%"����p�W��c���I�[b?;��_�o
�1������T ��Q���Zt��|���	��Cg<GcV^��x~�k�?IDe:��d/�q9�DT�m(��c*�u��\(6E=q�h5�m����,�eT���6��k\��3 -P�E\���o��%�������bm��U"�JI��W�
�-�r�@|�M;QK�(�nS���t
����Q3�F����k��P�#�`��+ �LK{�N*�MS#���!�13�e����Z�������X+Qy�H�}�w
�,�B
ll�0��Y������<�`�>|��z�J [�������
�n����C8=��y1�kVO4�d_E�z�@�,�������d�I&���$�XP�.��\�4G��-�
��K��K��tDS�N�.��7	`z����p��io�.���>'B�A#
���)8�n&Z-;+E�G���ai�D�x���d����((�KzJ3�������x%4{����`��M�3��f��-�v`�t����T���fm����e
����
���]��4��yNYB8
��F�rY�a�R,nT��x!�6���B���He�i��$��'d��D-X���/#&41I�B.�L����3���eII&�g��9�UY��;����0����c-@�0�u�D�5c���<[����>��tp`������y��-����z�/Z�U�����ta_��Q+�5�4��c���z&����P�'��-��`��^H����=��
�9�d����N���/2��y��{�X��B	0�J�cb�:�h	��N��7v�`��	�vd������|����@=b|S��eE�h��)�����ul	�i{,���:��o�1���r`M�	(c���t`�y1U��5Bp���M
��)��S�/�}���x!�&��jr��z�-�;�5��>�`�C:#����c8U0�3�z0��:�NJ��M�r!{�n��9��[N�
�z��������R��s[ov��'�J�?b�3�2�!=����E�U����]L�Gm�.'&�f�U��	_}7)�/�p�?�p�G6�4����~�[���������������t<��XT����is�v>D-�d�4>1fK�_H���]���h�v�*`�[��Al���[������FTgQ��	p]ER�^V�>�#,�7#BcS���K����Q��
i[
��f����X8����u�:?1��e��s���8����r�F���6H�0~!V�H�w��_��&��w���3�i �������������BR�p{�u�M���#��SD���g�{���v����vp���������>�k!M�7�������^� }E+/��^�������t�<>/T�w^x��� �N�k���.���;�UPAe�P���v#���okZ<�?�W�S��4�,��6��Fn��q��,����7r*�u3�C����(?h%j�TiS�W�<�0$���������tX��d\-��������?�N��$#F#���$�a��l�j0GQ�n���^t�p`&I����b�����x�.�'�����Q�����A�7��]F����q�/$@'U��K�?������b3��]��`��^HN��E������$�6
�X$~aC��b(����������l�523��\�0��hu# ����46��������E��n���*Ge�w�}1��EBFF��X����� ��|_z�W<n���+�>t�{?����*%O�z&�Bn
�$�\�=AV��r<�8��X�_�����dv>�l�n�����l3l%?\Z/�*��?<�"����X�y��B)��5]1�g�yv����p�q�>��(��T����T�N ��H���;����t�����$����(�� �:1��y^\�S��*w���R|~���9��8�`qHHs^<wp
o��/'���h��&����������	&��C��md������������wDM���	D]c�	���EI|f��_v+V�����Iu�d�t��e��v�?�����H�UW7�����r�/�"/���uT�3�V�l��oBz&�K��'�_y�d�H&�3��E��S+�"���8��4�b�|�l�y�}���V�f�s��������e>Nfv�&�?��4��F�/zE�������g����r�� ��q`*��<�B$5c^?�n���8�GIr�~��"�$�.O ��v^��5�d�f
���~��3]z@A?�][Q�,c����P�8X&�ME�G�|2F�rOZ��ie]K��nU6�x��Y�*���D^�[�_)�'�����'����h�b�p�o�Y�rO4�$c��n=M����3q�{`d$���y�M�o��<\���
'�e=�]K'M ��~Wy[kO`��k&d=p��??3�����l��*;K~��w'�
P��4<ZQ�����C{O����#��.b�9��c�&�A�C����0l���C����gFR�%:��l�}��D�El���~U��
��j�&�35euT�IS�1;�
�����+6]��zL��(n�����0��:p$}_�����y�I�
��_,��xnH{�{�����	`;��FM1$��"�$J��T�B)"
��.�w&V+X���}��������f������^�{v�#p�~3�r�V�'�t��=hL�OR�L��d��Ps���&>3��]�$�`;O5o��w4I�+����������p��>�o���*[�����R���������
n��X��� ��P6������*~�h�.��Z���6v�3�������~p��S��Xr<w+�]��E�*�Z�(5JR8$�w��2OZ����}g��U�c��g"Q�V4M]p��L�i��������$r��H�:L���;O��b9�X��@l6���������a�A�
'"9{d�y�����_���"��kQ��o^G8ZA*F��P��������&���T�iD��0�p�	�oqB�g����s/��\rE�/��:*55�b`�9����W�-�E�W�YT����&��+��������P�!��a7�'����HY\�������
�u���Wv�Y�����1��2A%�k�z�,�{�	d����q4�6��F�v�w��/D�"�0��KT��]A�� �;���;-��G_]1��U���f �%�X���?�Q�,_�Q!n�n�����{���}���M��C��������V��������-N������	$q��$�7�=QM�����S�j!�,A.�c�G��,���.?��}��� ����}������n�km���y��m��{��N�%��~j��$cQ�*�v����NY=���N��u�E�j_ �[9�<����o����c��$���,�mp�+b���u}�a�S��L��2��������7��������0�`�
w�Lb�Z���n9�H�w�E3!&sZH�5��'�_m�?�Qq��>����6��4�)N�W��V`KT�tE�r�u&��������1���xm�����k=q�S�K����L�oYm>�8.�����Jz%U�a4H\�m�{�}E�#lC��I�_���<]���� ��{���D�j#����M ��d;�2���,�l@dU�>H�}���l�29*��D�e�!��FS��h�OH��U�Q�5|]���*�j�@�c:����6��3����c�~@}|������
w��g�)��ZU�DYg����d�U&��������
|f��%��\i��dQ��RT�pw��G'�e	,�UQ�x�������o�8�D�k�%���' �<l'_"}��_%o�#�+f$C�y������
[��:�e�����4��B��_��IN'��k*k5X�R�t������\=�'��Ft��ib'�MpI�??�~::����\Ae;��vq����(�����������{>���)."W��j/Qd�����N��(V�y�1�H�F�:���}�s�n�U��;��u���2wY<3J26G���z�`@�3��T����"O�=������N�i6�(��F���;��9���_��3Q�Jt`�����I�	DC>|&��
nd5����`���4�UGf�l�
]�j}@w���1V!�4�&p"Tv	~���a��a���Nf�v&N�;R���ED���L_���R�*��
�����t`�����uD�r��[4�*����=	�N��R����:�w;��uH7
���\owt�$0�up`yC��aO]7������R���'���3�Q/�,A��nmba��m�q�m�}�%��MU��V��\`T:g�'��l]�q�%�=��f�?�| �qa�_~��
�����tm[���'`&�C��x�twHX�;�����G^��{}����9�7��sX��v�n������D���6�IM!��8�C��C|��L~����17+��<388�`A������N�Z��=^wK�>�����#�8`bI�QR{�r���@�Lr���w�
4TU���TQ��'�*Z�XH���&ppIq�����y�AWc�}9�<�#��1���g�!+I� ��"%��-��?�T��n�!I*j@�BG������E����V`�RV������i���p�&6s��0nRw;�f"a�w����[��o�P�;H<��;��G,-�����s�F�W����h(C��??�+�E�(,����`\G��d�4FG�)���&�f"P���L���HY�c�49K:����2h�-����sn�T��]&��d`^���@���\��`�O�,l� ���[}^v��D:�j���,]��~CA��������<L^��3���(��,�i�r��l�{���(����s��H��uJj���	O��<k��2�
=�9m����x���������������,-?�W�������p�����B�d����{�1_�F���z]O?���u	��u��'@�g����%��ct��rsmb{�~�8/7��~��1����z@Vn�pm�V4!8��1�{r�����4�QB*��0�5<��I���c&"k�7�Q��GX%=o�V��Su[�"��4��@(�l�^������O����4�R��*Y7d/�-Z���)]�����v^�����Qp��??m"!r �dJ�^H��/tGN�;`��&$�����S���:�/������>��"d~D��.�����
��UA��R�b?���u��{X{.����;����EL��C������E`��&��6��[U� ���M�ttrB�O[&`L��9�y��
�yU��MXG������B�Wz�}������������"�OUgd}�t	>��X���L�z""t�J��E=x��H�Ql��4��)�=����,!fX��>�������2�1������NH�mfU[���T��T�z�}��dS��(�#Ok�FuB��qs�!��(&�M6����~��Ff>C-�TWX�IK�+���5����T�N��V"��^aQ�,*NS
��m�aS���~�,?��Z0�E&��NH�+�)�8���=����\{��.��2�$��bkM6��h����lM/�fk:!��nn����Z��|���
p>U��At#�)N�Lm��fz
3�?����1�I�aLs���r���������*�i�n��Y��"�>��0�j�&7uf������U���HsJ��U�*u�:�KI�G�z����S�He�
m���I��fy[��
Pl���U��	"y���g�ya�k�������l����D4��f�z�����N,����+Od�4-k/�d���8���H��m�e�8O�,���f�����\��T>�^�<%�:#M���l��^X��-����N%����T�Tu.��^��^�����d��a��
"���h;����QuQYm���f#{aMj2��@1�a6������aR'"���M�^z��`��^KD��re��Q�Z���U��_mRv&&e7�������}�|�4�s�Ic;~�zG�3���^U`�	Y ����>�<,�9Rz �GS��!�:	�e�t�i"��PI����E�l��0���W����0
<(�9��ya��;j��c�@�w��j
�����C�/N�&g.P���Q{"H<���E���T;�5�|�V�O��?���H�ZP-5���H�X��~��}����iov���@�Qto���z}��[5�j&���� 8 ��8�f�X	Y��JD�Aj-��ZP�#\��LG��
�������{�8�/��-!�u� }�O~V%���z��E�����#�B�%�i�-�j���IT(����[��f��&�����v�Ee`n�����7F-��yry/�/./z\�	k� $���i\:f|��D�	���q�-w�j�v-�"���C'���6$�P�npmf���_iW�P�&UA��$Q���	Aj�5F�����M	��5�w�?�D3PY�8��b�����3�c�C>-B��_���Y��
��oT	d|�8�udiF
���Cot�mh�3#��^�&}�G�s,96��*�������M?�7��]o�������P������:��f�i
r�(��L� ��4a�c.����I��U�]��.��7��C�_��I(>3��c���l����C�h�1F���"���N��Y���xZ>=r]�����=���<]t�z.�u��_:����P�p��Q_H��E�j���G%J=������*����C�9k]*Q�������_mazV%�KM7��M6�(�J���t�	�`���������D����3��0]�����{�3���2oc~�u��<rFpb�5�(�]����c��s�:#=��~����>w��;����:U!�g�O��{� u��y��n^8��b��������>�����
��{���^C�y$���\��IJ��_vB��l����.�Uj/Vb���ip������npTj�prp�@W�	}������`��_�y#=��Jm��6������V��x�`�f�&��U�U#�7����~�y""����e������(��&�w���+�����.�9�eT�m�Y�+�������.}�)[��	U@%����@ -���n�	ox���V���Z��������f��-�:�a�n���i���#8Wz[��?z��:P��h]�h������Z%P�����Y�)X�P�j'x�O8��i�q���~��x>���F��������Q6�q�c'��z���&�X����W|�f\OZ�]_Udum'�����9����a��C������p����/�X�s�,^�|Y=���[����u�S�;�z������|�����C*jJ�6����'��&������l9n[��BZ|S!��sz7��� ���j�8���*��������a���J4���-�o�4��%l}IfB��+@.d�H�`4�s����(��C����rX�`B�'��/��h�����*��zy���MN_<pB?��bar�~����f���7��II4���&���a�=�h�M����>����L�!6n�������@��k��;�6����y1��u�h�#��
�����������])*�mf�x��p�������MY��f+s���f�|�c�!�l��N����&�*�e��{��B������3I5���)�vB�ssgP����e�G���"g��3a�?#�u�<b�=��g$[�:M/�l[T�������k�8��}��c��[���>P��-�����J<����M���4�
�6��$*B��������O�S)x��r���b���z`�n�����2�]b�5���V�(@J���fC�K���vj�?#'q+�M���j�_��K���X"�`G�W&�K���D�}g,��G�,B�W��;���
u[������6�M4����_�;������!�_���,��s�����|�_�����*�~qb�>��������t��������Z��t}���}��o{������^_��K�?��:��u������|���5��g�?���Q�����/�|}+�Q�G�^����y����Q��b��,�v����C5��SL���\������1]��?���|�\���`x�b����������s�O9�?]�����\������s��Z�k.��?�oq���I��(�b�.K�n��u��u�s����A,��X���Z�C��Z�r�~�^j�b�^�������w��wU�x��;�b���b~�w#�|}�����w#�t=��b�>��������t���b����1_�n`���{70B���z}��/���(v��G7P�~\�u�F���Y�/��b���1_�K�F7P�~\���h��o��Mn�]��b������?�!��G7����
��pC������'7����
��rC������'7�������?�!v�On�]��b������?�!v}vC�������vrC�z���
���_Ln�]/~GrC�z�������On�_��?���|�\��w$7�����\�����\��w$7��g�#�!~�������_s�}��)������v�pg�o�]�\��6�EH��G���+>8�7�����Y6<������j����d(?N�������I'�-'x!��'��G��>I�Mo"����/���|M."���z�K0+�z3����n��Bd��T-���j��e�eH�A��!z.D�
H2�Q�^�(�o����_��{����P�p+�7������u(�k-����#�2d�N7�m���1�|����8.����I�Rc@etg�!�~r��s)�C~��r������py ����p����t�W�:�>��=���y�)�����4h��=�N^H5yC���V/W&Y> 2��G������+��t����"������r�W"��wy��m|6�`��r`�9(�D�|`I*�������P=/s���&K3����9����A��b�G)���&�eB�;~vJN`a�*���t�[2�.�������<��,���J�+�j
]��m��HH03�h�+��z��������L�����hu_U����2��@�Em�e=�w[�5/vhi��7A�Z�7���V�������d�w&Y����Z3�(�rr������x�H���2Z��pv���	���Y����^i��-�B�W�k��;��C�h�pR��������d���_qG{��������n�H�`T��Gm�d�����N(R�fT��R^H=)���~���p#3��`�Q��S�'�	�;�];#�/�J�����������<w&j'O{�:*�F�	UY�������7#��zZ5�:q�EI@�e���c������W�<�
D
�N���g���&�2�?3���"���Hb@ukA�
��p�����p��07.����%�S;dV�E/_�e�5QI������U�-k���@>7u��(�3��$����'�x�����Y����M�`�&X�T�\��z�]z��-2R�q������A���x�]���d�P�s�������iAg���`\��3��e�#j�����:���nF�����`\��N�Q��m5s���O{3m��0���.6 x�HUo0
����^(w�w����������!���%�����y��/�C

�b'�t^�_�<�q�p��S$���};#�+���(��S�l&�W��@�VW��[=ubqR��K�U��uO�����T�a��p�C������Z��.P��J�E��K"�O2��h
�I�� ����+���� 'O>?��~B���������I�I��'7��4����<�ARd5�b�u����P�G
�iX�+Kxp:��y#�T	Z�dv<��F�!j�	��C��
�S���Dg���%�o�.[[�B��Ag�
�%�Y�ru��Y���z3j�����V�<o�^�rW�	?�F��i{�P`zg*��`�����&��� N��Di����\��qVn��X�:U��`JPs������[��PA�PbnY&��;���s����'�h��|<�e����S�����cU�y0=���}���i��eV}O7t�B�+vi����h�\�����":�����f�o:�>���,x��3�����`)�y�D��B�O�u��!�Yy+�N"��"�lyX�w�^o�����h���<o�=����F.6-������������@n���[8��W����Q82j.�4@������
�9N����t���q������t���x�H;4�Dh�;�I�C1�1u�����8�����[ch�H��9��w��1�j�0R��enU/������2[��Q&��	�8U�.j
C-X�����N�3	Z9���y;�����$s�f���1�qZ��h����,;�9X�qG�c����H&�������R&�2��a&��������}��g�M���������b�����*4��&ITW}�� tF7��+�����D���FZ��)���v6���[��L}�>��E�ARH-Dg�\���/����
���2���i����V���������U�����^������~�2�b��\k�6�#C+_�'>pL��9��qD���4�-���k	i0����Z�=M�e�ak��L��>����{V�I�+�#~���=�z�	a���b���qt2}d��x7�(w�)�
_��{6;�F	�n)u#������g3�p���~��)����[�[hdG�f�� ���]�Y�N��]�h�\�,z�Jf���};b�C���q'��R7��=��5%X
r��LYa��;m��`&<�C��`s�9�O"�T��:���|k)����HS����m��_�������}C�*� �
�E%=��[�kv��|��
P6�d��!	��<o��L�A?��	�@>^�Z0����k�y���i�
G�.o��R����$���`5I����L��E�Hg�T�F�@-�����]su�2*�����v$B�#1�1�y�U�)J�Mf�1a���	�I��5�6�8�$���P�������]Tn�l�	JZ mw7�(JG���T3?��)�����plF;���Z����k�����?�;1���;�zB�JX4v��xB���MN()��H�(1������V��WAZ�?�WI�������_%��B�CV~�����P0���eo3:��>l�a'��a!�3���-��E4�.�a��Q���X=A�~��0�/��n�]2�6a��q��HKU�3*������qqE������0���t�����bY���T�C�b�'�(��;�e(L�LD����v!����D�����G5���T�Sf6���/$@���mW%��u��B�EE��d��������}Z.7i�z�K����������������'f�N���5|���._�m�Ddo��]u�B�aq�jt�a���b�gT�U������xVsI�mG3�� ����'�	3�����
��O��#�^H�a����*!:�l�y����� �P���=D���yF�mI�Xk�P��LKf����kz�k�M�>�~�������h��cVRd�V���
�`��A%@�\;%;���`�.@S��/�f_���9a�
����f|
jy���*����I0����/$�[�L��W��1�J�<Js����57�T���~AN����IV�����<CGO=�rd *�fwy8x��]J��q2�vr��!��d��IAQ	��P�zR!&��Gk)�	<o$'N�����x0;.~s���`{2�q��L����!�GG+7��.c��8���� �D��������K"��(�*����:��!Srf���gs��������{��P�3wd���n�+V0�B�\�[�����6oBI�,K�Fs����2R
gg��mo@����7�h�X�N����G���d��DlU��s������BF�y��H�����y1�����d[�>��
��$�J���.8��&"�����eb�:�,�}��	m�AY.��>������"�����t����_O\�-�����S�K-H\��}�Uh�n:.LJ��>#>.�`d��f$2�st�1��j��M'�C5X��`&�X��e��+q�������F>����"r�K�on���eg$���	Ppq��CB'^����?"�2 ^�]�'�����Z���FU�,�����D������CmBo��z�c�B{�2#6`����+3+@��x��+3�I=�Fs���DDFW����C�T�c/��i�����B4Z<�>���h�\�X������5�)��1�K�?�|���}�nF	p�n��F�&$����8�4��F����i��x1�f$�
�z"�
5��]E_'%���b�nFnzZ��I5��f����H��x��l���� ��x3jB\��W:���D�`H������H��0��cgM������p�?3�2������@�h�:�7N�����mS��^W�J�E,��y#���G���u�X�M'
�A��f�G�*�2F���6�7)�>��`��4�7#m�w��:JcxSpmU��������6�����7�g"�tS�R`k�#s�����A�q�� ��Z�O�M�[ZYu,=J+����J�=J+]��(�_��Y��}wAp,_�<�i����`a�_H�M��l�~%Q�$��:���$J�e�������U�r&"����D��[���1���w9<�=�e;��������^}���~������G"��ir,����B����8�������&������k�EM����f�c������}�*�i��-�~�-���^���f������X�h_��1
����S�o�
��lP��Y����
���gs&Z�=�8�o�����)Qy�b�f�!}(�1�L�,��8�k��Di4\�n���T|���/t��(y4\�M_��39���C�Y���(�r���_'�(��[*�����V�yO����b����{a�A�D�GG�V��r�
:��E��<laf_p���rd�C�3j��c/��y:6>�O���
�=.o�#F������ ��,���`���_HN
�w��a���
6\����!�Y���+�U���;�����/�
w��D�w��=P��-���U{W)�s���4��{	8&����(P����2n���M#��@a�����6����p��h�������J:������	��j�m��l���N��7H3aL���@[��]����	��P_s��6\}�����F�p��G}�Ap�r=~�^�W�����;���."�{�s|I�|���\h�ZV�x��7/�]��F�>E>V3��������6v�s������M��g�������?k����v�*�y�$#q��>�������x$
���=�V;H6vQH���u�#M�$pr��%p������Q�	�w�Z�X��sV3��J�������Dd����Oe]�{��frq
��q����S��g�tf��[�*�]���+�|��'�O��AH�I��=�{��CA��L������u�����Vi5�;�"j�&r*�4f�u��DZ��5����B���N��\����X�i�s�����N
����&c�-��~*�2����;T��De�bBE�|z����P./]�Z/�������^��Z�Bv�HDN�a�ozw�����n_&V��A�����H�}1!���y�AH$��V�E�Xv!���A>��5��ao�����m�b��,B�g���6�-$T�����l6z��GeJ�!��\y���������k=c4@��e&T���x0�pY���h�l��t�^|����������1��;�����6�B	`H�i�N�7����f1n��ac*�����EL���
My5��Xl�s@R�m�x��e��L.�S@��� /��.,�)�	��iQ�VQ^�����4GWIk�����q��og����Y��+_j�_YhXuh�M$D�������'$ ��m
���:���o
�V���mS��:��r�����-��R%
���S���Jl��.;�S@*�8���8ba���IyY�G�h��z�z�,���	i�lHE�|�N{1}T9���yA�y,���4b#�{3���cw��������L����:��O��%
��IaF'%���g\m;��|���
�Z��I���	��	;f��c�~������8_k����cc#�-2~!��	��A�|&�wN�"��-��	���Y^���p�L����vD.������_��q�o�����������t<��x�H���$kOtlX����W����������Pn��T�`���+�z����6�Ku��=d��c�r/$�N^�f	Xn�3*@-�a��?�d�y1O��;]��	</��_��^w�y�K�t-��n�8��f
"�a?�nT#+:� @S�Co`����U��}""�E:kq��?�w���nZlDcF�~w>���x�-+�;�����'���;�%�� *^��];�f��g��!��P�d!��9, :|����e�,��aV���B;������R����H(��f_�����i���q]�j���N:����G6��B�Q�=�pE��ch�70���Ym��a���7��q�}��;m
H\��.�����
	v��^6��t�'"�f��1���G��]6�����8�Z?��JDV�{���.���	�S[n��(���`�]<�7�CVA������
K�/����!��\>�x���~�����?�����V�������]PA�k|�\���)����*�CN[K�J��6 z^E�2��B�ZT����t���]�-.��i6����1H�e�KM�� v����,n�o
���W�� Z:69I����������w��Z{1p�������lQwL{����.�j����>y�V�q{�pBMa)�n�7&�'e����;���S�CH���z�Yl3�pADs����^y�E����A{�y����N���~<d`�#_q��tF�1_��.�q}&���CA_�[[�;���t��tZQ�1�n�/�RT�(?/b�BY��Z^z�<yY�|��VH�`��6Xj�F,��-��x	"\���� pV�<t����D{2w��h�]�a��I�e-���WrA����;���f��./����w*�C�d��9b ��A?�5��)���^������@�:�P���Z���������|��B���A�c�`�y#�BF���m���l�vFV�5��A���������u��iT����n����Y���]��x�E[z��&���=3�}��6o~B7���Nf��V��
I�����{&!�|�}�09b�o���E;�� b(��]5�a�yJZ �8O*�m�]~^��1$���j�O.��t�-�R\�y���F��=m�tFZ8_4/��c��Urb�����Fc
� 6�0!u���X;,��&����Z2,�/�p�)8����|0��L ����t3S���������9��6<��*������\F��Y�K�l<jg�'��G>&y���|�t&v����������vC��H��{w��J�^#��>�T���Gq�.�qPy��v��������9�Y�&��g:�
=<����R�U��!0Z��tp"(�����XP&��nFB�W�+\�'�>���#R]��D��i�`�kZ�+�y�s�W��2���
>���u���3U��M�������6;r�#n^��������Jd���������4����h!��"%-����_��=�D����������J��Is7u�����6G����J�4�C����.�����m�Y<!��e���}Y�L�����l�0���<�x�o)dG��"�"bX�K}p��u��&�hAu��X�n���'�$�&wI4FEj(?/�XlT��C|���dQ�s�g�q�/��G��}I�S&�/�,��.�\#���6-�l7	P_�
��@8�/������

��"���i�����I�g�����W5���nC�+�'���=�v���:}�$��Mfs0�� Xz-��Wn������-C�6.}#��y�(��u6r���[���~|�R�p�k����eB@^��W��n�p�����FG�/m@�m��	9}��.�a�	+�����X7��O�������i��\����N��	i�\w��F:�j�n��2��X�F��R�Z�T1���+�-}��gA�&t0��|/���D{����iov��5�a���'�&�5�6�@��d���|8�y-�V,�_j�|�����1��L<T��e����*�i���M�@�1S��bY_/k6E�m��@�S�������==y r��3����9���t""�s2y��4I�i��fH���
���\�@��J���������c'q[2�`J����x�3��^�&�����M�B������-i"Fg��i�2�B�W7c:��Dcy��6��iI�%|Z�	�}��'OyN�tF�8�M<q�&��������%���8�-���9vK:#�KJ�SO��X�����3K�B
%��%=W��%��������0��\}�&�y$�-�l>�Z0U_��Z\���o%���|.�>�p���'��u%cz.��l����B����^�h�2�}�|���@JT�����FA�����x�d��r��3�2d��{�?��3��DZ��1)���y%���>�.�_�"$#�DpX��D�$�(��<�J227��%��%�4EFAD�k���6��K��)�2dA���K	K����>tl(�P$IN��<�����fd>�b2XJ�\�
Cl-QO�x��2�w�- mQ�J+�}�@�m���`A�\�$��vH@7v[J2,M�P���]z��7����y�����G���P��:���)+�OG����x��E	��1���,����
r�
nv�c')������H����OaR�����S�&��3���}�vB=i���y��+�!��"��i/����	�Qh�eE�
�-�a��;���q?s�]<��y���0N���M,F&O���vB�
��i�V���>]��N��-&�g�%�'2�~�fto+E�K����i,�� n*�,��P�[���i E�(��R~^I��
�q�v"�)]�4��6`k�'V����c���KT��$
G+�������F"{�`1�a���>s��������{��B����^��aN��"�4��>������"��Y�+���z.��?�&uX:�����D>x)���c����m�3Ym�y"��V�4�(��N�7���.�&�&��a?��L3n�G�~HZ�|���V��E��T��d��� �<M "9��tY_�"��>�k�S-�+c|��c���D��_E]h��P�oh��rcM��PL����VC�������v��i��Q��q�=<U���2����R���|���A��E>x�@�:�yU������C�c��[�eCF���y�����5�	�7��JB�1p����������<��~���H���d��9O�p�P�}&����F���u�9�^�e�h{�?/����b?����6Q�	 /��M��Hy��X'���- ��>/�p������6���W[��c!�-9S��{>�����U\/wo-@������9��r�� ''5��:�nBn'������P��V�I�����?���#��W��'����%��-��&De�D}������zY^��M }�����dH���}2&o�8�H���I+����D��uB�'>�@6F'���jDB�ok@z�Pv���Vq�����
���
sZ��?"�2����v��S��O{��$���8['�����6����>�dy),����-�iF�P;;t��PUk3r������J��������&�L�Y!+�tZ�
�������V[G7����z�Y�L8��������X�<o��EOk����A?61�e=�|���M(&��,��;�u&>5�JJ���5����\y�(W����&iv�P�XG�SAp�����6{L�<�n">7df�,}R�U���c����O�d3C}���4�����L|^Hdz�p�QGeZ(���n����������+�zr<�aHA�a�5��z�O���J�fY�����A,���_��Z�������j��X}#��MI�,t�!a�`�C5wdy�u7O������zR��������(�UL�W���:�|�����z��2~b���c�u5��^���������v����V~^���u���{�y����Q~�������~�b�<}��M���z��)��9}���~}�_�~}�_��R��'�S��5I��~��)�L���~R����g���������������������G�k5����2�2~�����?����z��y�jWD���oV�t�������o�����������������E�����v��7��LO	m:5�B���)�������LD���8�4
Dv�����wm�sp>]��jY�*A�p���H^�x����2�a�eK�8V����~���x�?;�3�G��/�6����!?����GzN���ZZ7�Q&"����P:���$5|�o��w)Qy�G��@;N?�7��	j\w��":�yyf2����!<U�:������$)bf����� 8��J���=D���dWs����@����s�j4+mB��K�����
���W"���"�l�����,j�������n�D��~f�2��������4����S��q7����AT3� ��KvjL����d55)����������~��Cw~�d�����|��8x4%��c���;�����p"EVs}x��������X��b����O4F�v�(�`�&�����p��qX:Q�����b��Tr������r7Qv� ��P	l�ffRd�r�|��;	�����E�x�s.Z���*���3��*��`��@/T�7T�z�>�O������?,��%���8����}��;�
h���/t���`��Lwc���f
�I^G��7:���U�[��KMH�BY�e��RU���Uw�@-I{��R����@9�HJ��5����'��������V�����d��[g�/��?��:��&�@���Z���q�6����j�[����M��_��*d|^D���<������0wH�{��q�W9!�i�j%�=���qF��6�\��T�� ��|��
Pm�v/���
d`�����qF�i�z�7
��q�,:T�\��a&"���4�6�:���������-����8�]�3���QKD��x�i��&�E��R����[���,/@����x
�������]��"3��(�j;r8N�)�F ��[�}��IY���[�����M��������&����w2�]W�M �����p��K^��hA�{Q5�/���!j��m�������H%�"��lM�;��I��2������"4��g���BF��f$�N1���4�#�	�9�r�b.�	�s�{��7��x�vj�,������� �>�6���nu?5/o�$����6WJ"R���{�^8�+��D3MDd��g�So���9��!�����!�j,�����y^����"0���H�dR:(�KE=G���R�L�C@����nH���7�@35>'��	5VI�S�����;#8�p�V%�[
r\����y����jJ�]���
B�w8#m)2uwn������H�������)f�`��KF��%b0�ZOD?���k����\�7I�����z�eg�����m��h4L��5T
�wd�\�a�dF|PBf��kq/���W���d�a���S��M`S��g�&m���4�'�i}n3����Y��aC�Q�����{��@�X��O�Q�U���Z
�	8m�WTp�80M��Z�k��gF�8gt\{T):���Q�>bFV���_	���%mtB	X+��|}X����������V����d����]��������]G��3w����/#�(�U�����+�����kFh��t�%��c��t]I�q)f��3!t�V&�^��6yP��6���7�O�����|y����;��?��H�Y&�F�Hh-��A����F���5�c�Cc,>���t�E����Y4��X�,��Sv3eh����UrpKj����^m��S	3*@�.�����f�������dj����K���/R6�*n��Em3;#$�Zp2�efN�D�lUt�S�Y
�Z/y�_����7u��m/SL�� Ui""��pZ���J'��N�4!1=B0����>���kw��2�u���,T�Y5���4+5#'N�6�8���&U"vZ��q�~W�"�b�}���g���>�LE�����0m�����%;�����L�&$?`g����Mpl�.Mn����3��0d��zgXoF���7�~�\Ky+V,�)��,r�_�]����C�n������������W2�"�cKN���WdQ�� ��w�{"���Z��4'dw3�����ac���Ab�]�����I�����p���T��������`�|��&����N������Av��4[�=!�t�872Y��{�c�^��u�y�n>y����U��JpUw����Ybf�w��9?o��]r�;|����DDu���lC���!�"X�
;��l �� ���-VE[�����K�Z��0:ia�#�)S%bF���Umu��>�e��s0YM
���T�kx;4�`B�,���H�uh���Y;�&��+*]�����/?������_`�f������=������Q��QK�Ya0�[	JG�z`Xv�Ogv��c�:�5��>�5��n���2#2��fH@1����a�$�����!/$�u�����L����H�������>g&I�6��X�Qm����}~_=����e��N��WXx�H��f��,c�AX��JD�Y9�w��c���I�[b?;�O�h�1������T ��Q���Zt��|���	��Cg<GcV^�M]L�?����$�2��������h"��6d�1��:�O.��ne+@M�D����%`��f"�M��Z�--
H�oWSe��V��6��;�����W��>(%MC_�7�T��	��6�D-���xV�	�M7��-{��00mT��i��-�<Pv���
;��<C��8�`6M��?/����`�D�u
O{3hM����wzc�D��"i���) ��)����lc�K7��<U=���.P�`&�:5���F�P�v��T���N����_3�z���$�*�����Yz�E_g��-�������D��u�a�`���$��zo><��K��K��g^j���v�m�dF�������{O{������8(������/+1����V��J����g�=I��Z��c1�'
J����� ���vKrF�#��4���y�����s��L=���S|����Cfr�j�6�V/=���Q�PD��
���]��e�<�,�E+��F�}[��`A���Q]�������J]�6#����Qd��l��K7a
����$�	�l3��~��c����,)���L�>���(�����_H>�(�0���K�8� ���)��K,�����ED�A`]��~�'3=���""�[��K���_���o�1?*]�??/�N;9���}� �7@���t�E6������{���Ax/$���w�%��Cz%*rp	�3`��s��LD�}^�?�7V��P�F|b�:�h	��N���*��,Xs�B��Y|���e"_���vm;[��T��eE8P	���ol��.��M$�����zpPg"��m"2�!/�[9�������Rm:����*S�!8c���f������\�7�<��m�l�&7��'���sYS��3�9�3b�����H8��frBZfa��[M� ���&|���_��f������*�
�]�_in���I�A����q��g���?i�d���g�j�TEQ*�8fN��&/�En\���<o&CF&�Q���u4�l�	���*�D�2<!b�a�����*�*w`��aRm�V���&��J�&J������� ��,�����2J�������s@3!��3 n���'v+��,h�}G�!��2�gB4�<,c��1�Z� �w)j����K-(��Oy�q�_Hj������=���R6���N�H;M��6�����lVi�@W��y+���l���zio�HD�X����u��d������W�����-���]��3���u��b�g$@�R��/�7�4g��z��j�p$O&b�&��WX����;�4����U�}�7�&Q_���=�Y3x���ki�/��y-��m��:�vM���M�2����#&$����Q��F����~V�����?x�	��|�1��_]��{��4��e9���w�����]���M!i�2p����D����h��u��5B���ow���q����K�m���|���!K�EH�a�&�)�DFmm[�>�-N���[����Q>��_��� �W.2��|���������N��:��8��]��X-�a����g�������X����(�a�y���XD�]��� ���GO�Q/xzv
���E����t\��C-����P�{m��t�����*.yc�����$��"��3��C��c�C��5Z��4��~e=�]��Ty���H��1!Bd�_���f��v�x��/��w9��i
������%����6�H�mg.�Ggi�9Xt�W7��9z���@EF��k.K�����RH�Q�o�]���"���I�l�m�1�9##����\n�S�3)���CD��a�IHe�a[Df���������"����FH�T���>)�|	���z���
���7�������8�?���N,]����$p��'���L�o�K�Q7TH�g!I��t��
�;��������S~�5 {���L^��ed��s��$tH4��Xy�$��s�5������f�*�X�	A�%���u:Q+4v���
�)

��-�S�g����8&Y�

/-����B\7�������$yD�:,�/Vu�Z|����K�m��	%��%���Sf4dd��
lPp%>�(*�R���������*r����������c5���YH��;q�`���'D�[<����
:#} Yu�|�	@F����q����a3�;��60�6�<dFN�n���%����S�Cu���&EY���� s]X{�	�.��j�V����J.�X`��.�"��x�oAOD��	%psd����	dr���
Z�C1��"Q���]�&i6mx�+H�}]0�$��������
%x?3�C���������
Y���s7U1d5$�HV�����U&T���g&-�*3��^�u3���`,n�0��M;�\���.�q���+#����(�q?5(u/v�������O�����y�gc�(5��(�LY{a?�??��u��U�
�-+s��@:	���������\���x�!��Pe)������0{uc���luFPLI�lqf��}W4��<�~]A�GP���vS�S�f�}}/�_���c��?��H��*�Kz��4#�D4����A������~��f�3)4�-�d�W���������
��lL�����w�%��0�k�!����@�����rW��
���a�;0'|��������E��ltj�9�������" z��L@�\|A�)0ny6Fp�
$���(���d=^��"n$�e���z��+�8{rW�	�`���*��B��b1���U���#���$��_�m�6
��H*��vJo(�[_�{a�.�S�|B�(;�C{����'|��/�{UF���?/.R���f?���S�����1���j����� [�yz|)y����[h~�^���(4�W�O6�Y�����&G}��D�2��
k��W�y��W��Wq$U����vaR��$�����B��.�����0��,�q~i�U������ 4����HD(��=�~��*{8i�BcBN�.�h�#���F\���`b ����*�nXu������&�?zL��
�����Y��1���%��*c4�����CrDp1e���mWB��K�����B\��'�<�~>w.]L�����9:]������IPi���rm�����]#t
Y����nx��/�@��C~"��b�v��O��
 s��Z���V�vc�}|��Sr����{}4|~�G�;�[&��P���Qq�������:�
`���M��
��M ��MC����_��8K?������-(�T%7F��T		�z�W��
��w�}"�h�{�I���O3:�?m���*��887^(�S�Y!�R?���u]�I%&���j�Z�q����z��A����=�/���q\�T|'O����N��-�lm\JR����P�gp��c��DP�����n�}6_.(�����o����vU��d1a�P,��.|gJT�
r���\�B<4	���O�M����.���AT/���[��B�t��m-*�9�J\G�]5�V��F����_�zP����G#-r�1M�����Q�`G�=��%AZ=�X6(�������|���,N���&Oi�OL���M����x@U���q�b���
@������5(�Y����<f���%��VK��;��5e�,����^�������[r �d4���,	��)I14^OGP�h��x��d�I:�&�����d������j���(��J���Kg2d����k��%o�����}�������� �����rV[h���#P���>����y['|�����������=&�����K�*u��
t���!���0v)��������B�v���K;��a9ao6�Y�6^V\;��e�"=B
�������������*�@�L$��6|���pl:6e�myllmnA	5�@�.A�6j�����.�	#�1k��iA�Q�o�<���<���,h(>���M"( c
k�"��gB����O��#��Y��N��P�CB
����$� �a���f3��|G��c�{��|t��Q �4��F_m�H�.vG�g�W��D"��Dw914v��_kMH�f|?�J��	��yE��y�������MmGB2eo���'�$l���L���|�0��-F�K��,��e}~&�&@a[[������T���i#��z%5%>��;�wt?��-H����n'��i��&$��Ep�`��,s�8�\�ce2d3)�����^��$��	A��#���Y@�_Y/�f��{tA���J��f5V k��r�4���k��0^�>�@MQ�Yib��re����|y��o��A����>:�|����]������A��~���0�d���-mf�a�q|B�A6�^��2Cy���ax���=�,�E�������U�8�H���MQ&T|8����[Otkmoz�JJ@8�(�J@��A>�xzsU�HT�d������iX@������/]���9�s������-��L:����m15��~�1Hz��b������j�o	���2��]:I��W�R�W>�|o����,�*��w��I����d��&o-(4���iNVN����O�6��`�[x�n��m�����<-k	�BP�9�(*�,8���]Q�|>]J���Ee�4��z�t�q�)��D����	�+5�����Z/g�������
BYX���y#4�'�#3��yx�h�Ont^P*�Up���F>�q��|&VO��(c�]��=��[�Y�?�F_k�D��3=z�����~��2&��Q���p��]�����HF�w�-N�zy	��J,����W�R�I�5%���8*,H�)s��q���	��]�ee�tn��'��%63+	�.�
������
}R��C����+�bF��A�m��2��|�����O�J��Gb�/i�,�E�DU����U<������9N��\�Iy���E~�\K���,#�Y2"�sF����4#r����������^������?�����?�<'�7W�s>���N���1��h��G��m���>����"��[n��:p�������(|;������eet�\b'���B.�8>lu$��
��%t���
0f7 KU6������4d�0�����j&���(h��S�Vz�2���G?�#�pi�B=��n��(-4^��"O���+��B���3~W���~L��#�&��	&M�5
+;f�)
r�mO8s`DY�rh��tq�*&Q��d�2��gV���8�ef����}�DT~�S�M�<��"�?5�l$C>���8���*
-g2���p�����3!T���\l�S���oF�
;�T��L�Ih�XH�$�%���D2�~n\"�&�Q��Y�H��x���z
��&����v����J���z�Le�#S������esD
jFy���!�l{j0�7��;:����@�a��,�{����+������H+:2B�����F���u���K�"^������F��v����I�xs�D0�3���@��)��b�����0�
�j6�U����b�tj&A�v;���	��egv���fC����{����` �d��`D'b9V���U
W�9��p`���jE'BYG�'����Mh3!bEG���E��zao�j;#:�b����2�p4���t�hG;����d\3�X�tC����!����7�)�:��N(�+-i�f�lJg��y�E0�3
�f��v����Lr�^�@�j���Nh�����H$�����T�z�+7�4#$���=�y�_4�*�J��`YMv�:����<*�V�d�N�}kOU��-	��&R�� ^Ck��u"��}���v/���X�3�����������A�J(��Po,XF�:�"�|�=�����uF\O��<�'ZWo�J�;�,�:��m���g����828�����e���UK<�w���=�_�N'�z��;�y�a�Ng4��D��F�v���u9��Q�:+g&�Q�Ou��#�D�j���BqpZ0��M�5���3���O���������5�"3�A}t��w.C���G�|�hr�� 7�Y5M���e9SHNX��*�C��9����|b������
W�YF���&����t=U'�yh����iP'�d��� ?��5ov�[�OD��� �hkV�`^�������g N������F��O@��=�j��g��{j7B��l��/{;��<i*P?�%�#�����k�Y�H_�/�S/@�h�r����o��g����=��]����T@;{���v1���UM�0��y% ���h�miv8�)��^I�@��G����O <j����P"����H���7�����h(�+=D�TC�Q$$�bOc��X��[:�!�q�,6�o�@��-I~�#���)���v2��WY.$����|��:@�+�9���`��/�D��Uu����4�g*T�l!O[�9���^�$����nu��c��W���������a����,
_<�O~��b2AJ)�6��% ��$���g�������$�	#;��iE���!pK�4h"�	
��]D�>i[���=����k�O�;k�$P���sJ0!��J���m��PY�f������r!��g�N�i�.�z�^`b��Vn��`�]���klWR�4�8<�t'����������"���w�:0��Q|��6��3�����)G%��^�??��
5�������x7?K�N�.d���]N���9��������2c��t��������I=���j$'�w}:=~>9n��x�z5��wa8^��3��l������C��D?��I����zf
d��p�����y��a$��~�t��#�'��3M�tEU 0OB������!��E*�P�L��?"UU�{�J2Z��$V�w!�|��������c�d��8E�P"C3�d�	�.����y_��t��I��4����%e�ag��p�PD����#������:g$"�+��$�+����X�����'��%��Z��u����r3r
�������"�z|����	$�<�������&��� G��$��+��B�5G�g�F I.i���L����\g�d/���B��b��2��MhTL\�P1S�[3��������yn*��-�]�C]Ls�����$!��
=�*��t4AEd�ay� k��	@������7�,���e#@�c\ih^�D�r�:��cY�f|��t�e=K�{�\�y��e�:i.������L�����l����6���T-�n�Q�O�w}-��U����=���`4/��&R����n:cr7���������h��"�$����+�����^j�5']"��=�U����������h��V�H�E�E�Uz���4�����&?�|b����8�D�~�>l�w!��n>�4k�p���0M'LcW����lTDELj�,E����%4��B���_�3�����M��t+Bg�(�bld�a����@;���
eG���u�wI�4<���l����S�q�onDz���buAG{f�J��I����2D��c�z4�D�D����#�
	�0�kn�j�t��4������ ���E���-����!��f�hxvA_�G�l0�e��T�L�l&]@��"~�R�2�PF���0�2�*�2��jT
��)�w��9+�X�Xu�w	S+�Ku�w��Q��N(�mW'�f�3��Z��P}
�?��E������&��m�����"*��a��*_��M�����X"EgK|g�n������K��������X���U)Vv[4�+�mLb�a�6U@"���\\�>;�2��-^�O���[Hf�M�Q-����\����j"-]��Y�������1������M��w��Fs�H�}��n��*�1������q��r�??����q�8�\����T`����>&F��X�M�R`�
lS���O�
\{.p�S����c*p���qN���>�rKBj�-	9hS�6xZ.�����[r,pM�����r,p���,�'j4E��v��w���O�����^��z�{���������w������1�=������~}��wX<b�c�����K��P9��wJ@�%�3��K�GQ9������Y��F�c�[����;�h}����c�����=�f	9��l� �{�A#�S���[jh���Y����u�*�r|��,u�'������nf�K���G�Pb_J���6l�q�K����P��%���6����%l��cE(acG,B�sn~=X�F�<\��Rb�m��G0�� y�%�R����!$���=��",q-%���>��a#�8�~�j��IK'�F��'�F��'�F��'����W���Sc��O���K���G���C���?���;���7���������������������������������n�Z}��q�n��=Z������X��{�[�c�#~pc��q�n��=������~}�_v[��%��K�g.��e/����x���D7�K�Gq����,u~���Y�����?I�c&m�#�]<�1�q��K2GH��(K���k:)�Y,8�+��X�,�d2��:t�QBH@j����|1P���������$7��	!�����~���L���."�7nY�cV.���4M�"s-�f��k���;�-�%Q���Q���J�[Tq~����+|�7�z��N((�(F���Hdi�q�I�!G��"�1����S��De������|�����|aI* A�	������|�:�����_%%�\�*���c��/MhY��mR�����~���f��7I�!w�&�%�\�.>z���6!���'GE�[�"��QV��N������n�*0�Lbj������l����W Ms�r�Y���-����8s�KJ��0��B��P���L�Q�6�M��,�(�������;b�w��4�����!�2��eB	�'~vj��������=��#�9�����>�?��;7�2"[,������$�+}�p?�����*�Cd����S���TY0����k�Y�4��e9Y�n���8�!��/���4���h��7��:H��L0�t��V�����7�
���$��7���5
v�~�!�%��I�MF����]_ob%O���2�2)�b�P����a�����{��91]��k"�k$����'��O�^84H�`4�����q��w!C�p���pn������	5���^	 ��[V���F4BO���&d��w�x.<
���6�S rV�]�Fc&b'o���2��	e��p�p*�]�kNH���PN NEsQ������Ir�/��-<vD�I���g�����DJ��g�tm\�[��m3���!KhcW�Pg��<��mD�����W��C�UX�\��e���D&I�n�������p �<����ECv�=�������7�x�����YMv���g�>5���Pj7�����EDb8����L/����M�w����/��8����!mto�)9�;�F����5�#Qq�����:{W��]�����0��d'W�A��Ts�M�oY��V��>��;�%xW$��������p�y����������� b�-.��4G��=!)�h����,��x�������3�wa�K�z���)�8��}F���t�L4�7Hq��!p~���3'�b�#|>�=9���������IQ����gC����Q���Y��Dd�>�r�Z�LR�)�@6@��6����N��������z��`1pphPf�}�a�������G}�����I�aF+������b��Q&�R��ww����v�����JP|$��^:�$d�T�O���?K�w���	k����<z8����Ae��'���p�������2�g�.�P�;HgP[%	�����5������H���
�;�6#����x(6Q,�q�^� ��)=i��)y��Bx|L�8@���@�XP:�4�H�wE�"�!��Eb��<c�����|�p3Km(e�,��*�Io�K���Y
����9�����b2����6!e=f�����0 ����b���.D��
X5�����	�?���|,^��5�yAc�����Y�	�����~��HBH�8�����-�_���:�|�Wyn�pGu���F8�:Tn�Z�������04�|8���y�BL��mQ7"rGF��t_���(��8������%��/��hL`�� xW$�C ����$��8Zed�o�c��������R��lG�X��IE(�"5��T���A`w�]�NA(��>?��\�.U���g�������9F�
�3O)�g7b=6 ��A���!�A=�=�qk���a�LL��k��9h�1GZZ+3b�*��T@� 3����3!��=���\|���}$����h�9��V6}�Uc����^\$���+�`�l]�d���@��|V$�A?��v�@���{(������}��o	S��
2�wE����Hc�/l��5
[���,a)x����/\��'G
���M�� �/����&���ca��| xG\��|��P1�v�`&�������I��SD�v���6��	���y�q
��� �����g@G�����QG�	a��������52�d�|7�(s�)�
���{~I��v����L����oOW�� C����&����<>Tb?~WdK��Y���C���V�$���1*�������-9��o��H�k�����z������q���o���������(#�����>ICU�%�t ��TE>��H����s��,�����F���Y!o�7��v3���qb'���93@�����9�h���]Q;�iNr����*���z�x��<D�Nv<��#L��t<~�O�[!n�U8� ���A��������>��z��'�D���F��YCs�122�J�
0�����icEd����.Ru"���AdB�`��F'd$>�M���n?�Dj�P��9�6��<N��H�]ggmI��5&�UP�HxF�f$/gX7��;b���h�X��1:��*=�sA�J�4��{E;����%�c9'%�,f���=��_��}g�__������K���_���}�bo�N���(�vI"-{�Q�	�f�;��}A]�D�%�~�h���5�����9���3�'h���}Ae��,�Ij�&`"L��n�n��I��}F%���o��`�{��3br��I��n���E
�Y�U�C��Afd|>?�:����-��88&����&��!<qj�a���������/h9qEm�(������+�n����cBQ�������O@�e&�����K��/��W���Dj���	0OL�(��3*xAG��w:g��e�z���]>�(��w85�C��=Xu3�������O�+V}V��U���=�Oe��
`���v%���K���d����lA��1l68�R�7��+�8�m-�( ����`'���*��'1��4��?H��\�=O&}43���`����/��7�&�V��/3�$k�e+(b@D�� Gg�M������q���C���G�����������4	�bGYY��o���b��kc2��`������f��yx��0���U�r����G��y��Z7����

8���I2I���E
���F���`��]��`g7�>��a?��m���U�����C�K�F0��=��7bbA�p������X"�Fu�Dy��J�����72I+�YH�y��E�h+��m2���'�����_ohx�zc�0D6e!��;���
��;����kN@D/_�}O�J>3��8�O���/��������2�7����%I��,�QDIE������nea����?
���	��[������S�L��
Z���W�H�/��W<�m&x�dk�s�wapM��Ee��>��
�x%�K��I���%� <����C������M�#(�5�����y�����|����
���������
�����]�F��'���}V���5M>�OE����g4��E�h��������9:��8��(*�R���l�A0�����?�+�K�GO:H7�O ��-`���!����C�����FcWs�����N���<��h��P�O2�.�O�#�@T�H'q'�@�|���W=�.�*���}N���Wf4���D����% ����Wf4V$m��\4'6]���1�pzS�V2����d�g+3*��l���v>[��T���uO�{8��RN/C�������5������]|���
�NV��e�wE��c�)�X����
`M<����3z��Oo�l����8-��q��
��i!|��#U��(��mm� ^F"oG@GC�$�A��AL�p@
:��m24��G>a.��
���������Kn�R�4mBQFo,0�7�!z�����62����s}��`�����WS�}W$zUc�1�Q���h��{�-��Q���{jo"�f��YcxN��CoF�{��Y���<G�mn�����������`�4�7�!�rS�R`����E�5c�&���9�fT�~Jo�_����c���\����`�X����b�����������Cxfp0W�%���x�Bn�����L���;P[����D��	t)0]p��p"����U^�6gT@j��`o>�����c,��p3�OV�Rc�^�0��~���"����B��Q�z�+�@��c�:��6������`	L=��	o%CIW��7e�{�K�@}��	yl�0���Y'�����K���������nO�]g$������v]bB�q;��L��2�����ytPg�Z1���}���]Hl�EE�Q��m�;��$'��`��p��m������	�[yCp}a�|"���{Ax}A_�iX^/��c�%�\��M�Z����B*Oa���E����h����VjS�*�I�y���pG��Y���M��b�f���f�!\��T���`�"j���"�p����Y�]�!7�u�����<��`%�Vqb���0}�!�.�f{_�W�ke��������~���c����l�Nlvo�G��;*���������4��kzc�o�o�7{!%���j6���B@(���\�5!�����5S��2i+p�c��1C��m�:x��++c��l��B�B��z�[;�a��n�%&D}���L�.������hVHg��7���i	b������;����*��&
����;�}���FT��1����r3��(�zE��T�aht43���6�Q�X��f���@�����<z��a>L��t�p��~�p,��i���N�mrU�W��}�V"�$��
y�bc���@t �m�U�5�CV8�3���Djr 7��^XIH(	�����z]bB�~��������Z����O�g{�k�]��c'���y��f3� ����CgeB,8hDOG��B�i��4�f+� ��+������u��Ap��������,A4��	#����G�i��
�]!����,����]�P����E��S�E ��C�e�[��d`l��<.
wG�+��W�����f�#�wFt!zQ��Q|��_����ee���w9l��i�S�A�=�c�s���W&��Dqw�����u�$��K�Yt�UB�z��E.��0���Alw��<
��[��l��E���+;9�:qVx#`^���P�_���qu��@M,l��K��5�!�g��������	94�U�����eP+���'��"j2�y�C����eV&$�������{�PO�����%<��#&��Az-/�������t]8[Y$����[n8hg�8��=E��^��������GKv�Fb����*�`��<E�o�ypYF�;o�.�������g�q-]EZXI�Pwh�#���|w�N�F�{��!#���>�|y���	�H^��7�_�.T3���J�b-z���h�e�a&��9�*��oz�@D6�p�e����������KM�������q��;���u_c]v��zS�O��^����I�IN,Yl�}	h&�sp��������ufh��]o�O�$jeBj�����^������[�7�=���
�n���6�y�<MA������F��������7k����<w�a�O3v��0���2�� p������D��V:�yRU��(��--'g��d
_%�/L���u�i�^�W���{>�=����P��8C!�1o�;�������o7C����P���6�Zq�:M3$O*Kg����<�!y����t�d����� �{���"�T$R��0	(���>����� � �k��:��'�w!"���@���=>TbB���H
�����DK�E>���v����8DE�K�N��{����:�F���'���DC��F�����Vf���~DE�u��Dt���\;}���������5�6�m��y;Z1���/���.��I�_��m�N�C&�_�yfT����x��T�Y�q�DJ���W!�9KD����&O��};uZ�i"���!�o~�f����y������O`J
��Y]G��������6��g��<6t������{k	�8��a�`zk���o�o�G�fO���,��|AcPi����C_��7�� ���u�6p>��� ���0!��x4�BgB���2�]8�\�&��y@�	�)
\f��+
�j���l��)�b��P����N[��f���{�p��:t�fB��1BHx�G6��,,*�N�rV#^GC�
Kq�a���x�6B�z"@�i�j��a�_C%��Y�%����j�2@�v�
�#���������=�t�u����A��b<�MS�lf�&V":����gSc9!T�����q�9=p����j�S�nj��F_c1� �����rbxu�����a~��3��w�zRS�����ya��`f�O��)6��J|jD#+9����<g�HV�9�2��|���}ws���m���(S�A��.i`q�����#�[J�_X�yI��rkSgTm�3�
�|�!�w� 8���>����n�����'��F*8�$��S�����)':�������Dg�l��J.4�9Q�s�5?�L��V�4r��Q�����_*�6��>a���]Q�iNBH��o�5��j���c~������R�������gm����(�6��%�z��(yaz_����;	��X��N"��;U����j�y�O�zv�h��	�/��:�rV3��-��|e����DNo���z��Vm�3���&���������0��*t������3����������P���������|���~4}�����U��((��1����Me��[M��U���v7��$��Gf|o2�6��V2��s�(cZ3n��S�H���8��N����D�U��fq��X&7����wa��b($�c������O~y3�"18&�H�Xm�s�K�Mb=��}�:��T������s���0!��H�z^.��b�,0��M�rg���nb`2��tz�k�nR������.��w�F�"G7�6�<���O������$��Jj���q�1����?�gk�.%�[��p���<ze�d�,s�pY��X������>���BXy��W����I#[�{�E8iP�4��d�3~��+O��S|� Et�'4"Yb3iO�'�$��u5��o��hE�i|fJ�<�C�����`<���s�;!�}W���S�F�J���.��5�$!ya�}����Q�oD���Y5�������~��s�������5�	I�H���vpA����|��F}C�P7��iHW�s��0�\Y�8� ��0��7M�<Ns�_F�4�>p�R�B���/L���tkd�u �F#���{c���'7M�"hY���;���EI*���m`�������=�{��!��DI�>U��+�{I�` ���!xWT1�lF8���F�V0�B�4+��cH��b�&����g��2#EP&�.r�	������s���UO�����w�[<����X$�FD�
���y��w�����M�;�\A�*��
��w\1t�Dd�;LYi�e�|\:O3�D���,��m�(#F����n�t�luf�t|�����M�/�c�CW������@4|�fr�����������`�k���Z��|�Tj��?�0����"������z�^����������ikJ�2M$FQ[q�6z�����G���0]D43����og�J���Iy�����;����2�U_ ��<`%6�{�m����6[�5��n
nw���U���e8�l���Qj�XLb����G��c��
�����w�	�4dT��T{L1��?3!h����B� ����^kTmR}��O��oxX��<�,5�O'O�y� �:_~n�3* b��3�� �����)#mIv���kv�d��e�`��eN�����e6,��"1�|���e���D�z���A0":����aN�������K�	$����K��J
�s�u�<��0_;sE�|��B��f�:�����0�%�,��C����yfB�mx@L����&�`�O���0�b������0�#�d��e�l��0k��h�'����0��9'�<3�����u�����V�"9��2�%�|�L���Y�n�����nQ�L��m�t��������eN(j5������K����*g�����`����lH��������H&�q������l'���g�������@e��2N�������\�wzt�(2�6�Ygy�>�g>������D ���ob�F����,��c��Z*#���������{�a��fSA�e�
�����+p�
�&��8$� N�},��hnCB���r��>#�BP�����'�J��#9��/P������@��&�3:>gwb���(�����y��N��@"�U���h%�X�T���DNU��|��t�*!��y_����j��A{�N�l�����"9l	�8��)�|
8j�Q��=�mq
���0����f&�S@#��po��m���O���x����g�e'��s9i�vM�$���+�������� ��'4��5�g����t8��N�	����9�0�W�p�&Y��L:]�{���a:��.sL��}���l�'��ur���� iueQ������y��������.��_b���!���.���^Gg���	����U����O.����Fd��2y��vo�ji���'���4��i��e:o�p���Np�oc� ������{���L��\�����Yw�������o��&"LXM����>����ce~�q15s��3* ����3�G�����W�U��9�m����k�u]}�V.%���U�>����yw@��~���ttP�t�C�Q���}:xW�������Pb�S7�SNL�����j��
���Fk�����Q	m������w!"�c�i�-��e,�b�Sa�=�Y����z|:�����?Yo�W��<lP�������0��7�;�wex/C{�������x����fu�����gE��~c�8 2��+
�Z��#�w��\���=��kXB%�S�{�N=���U���[`T���^?1:m��O��zW�Fb_DO�5�
����
;\�U�e�gES9�Fr��f����B$��|���	�x4`��gp�R��&��|V��.R��-m���&K���Q�U �d���2�	1������!xd��[�Lc�}
�U�2�7��?!�����J(���/I�I���x'	*�:�u�)�����mV��T�3�k?iu���A�'����gr)�m����5�����\�~|]�e�����MzY������Y[oY��M3��E���o�d��0�Q�����}x�P���iv�\�Q�3��L�>5VB���Lm�i�1����S������^�mQl]^�;N �s�"95��5�AT3�q���X���O,����NUj��\��87��Y�{�'	GuVmuNZ�rL�~?�k�aVc�V��1��d��)�;=��]�`���]Q����=��.<*�+���Nvf1o�ZPqVm�N�Yg*���Y�E��t�/J�C�?+RP�J;��g{���U[�����W,�����,����r����:��S,�tHO�s��zY�o�ES.�����Q���t�1M�fK~�7���nt��2�|q����9�
�-���3/L�C����)U[��PX6������{���>u��8{���t
n�fq�������tv�����U��{U���&��!��Y�4Rc�qR'Kl-�9��N�R	�����J�K�q>S(9��?��?��}�#E���'���A�����>��O��C����w}���@��������S���l;��U��#������]��-���X����������:Zb����]E����O���%����[���r��IK3���G����I�M�b�M6L=��!C�������?��B��&��e����/�I���~������������7��u������G�9;0-����_�_��{�,����:@"4�^h&C�;
{e���d|�-Q���f�c���D>�C�&�����@_2����Lx�X,���n�=�������N1�e]����X�y������F��xF�z�,o	il���E��6|=��sZ�
�����Y)!"�|�#��C��~^�j��`�;���:(���,d���T�AN�]�,�6����"���\����O�z�F���PF������L�U65W�P���8�EF���7�F��f4r%� �S�q��\P�L�,'��H=;X��C��/%U��{NM��H�3����x,��@^{�%:h�����F3���4�N~
���<�Bj�&�)��VS�w�������,h����#����,9��]����q����>�J����/�e'�d1��R��	�=�G��lP�&��Bc����F��U��B�L���;��g�O���xbu���`\3�n����������d]c�:Bp`�3�$��h������	`�6�\��G���y�zgg����$4��U�D�[P�i��:������_�C7x������X����0�+�
G�����u�@$/l���o�woY��s��.ZQ?�G1�S�5�6�cl0�D:�wFA�	C��/��-���JP�K^� b,M���f�h��v�R��+��I��4��/���t����M��"�T��4#r�T�}�C~�O����E����?Q����p�\��E�/����!}J��ZhW<��C�����[��	�Nr�|hd��[����k�{Iq,;�jq�*����
�m:����G�:Qg�bt�Q���_{�p2�t��@��:t��q�3���j��t�0 L�_�	3p����`;!��DB*W#8m�P	d��������T-����O���ybVH���^Z��,6N�A�	@5�&����*B�m�VaB�gLBPV�������W�Jl$9:L�a�%�8��a�4�S��M ��� �<thc�c6C��
/���fv�;@%:��6���d2�q����=pp�������
G�����:���Z��s�
���k���b3�
P���d�s	�W�q���ab� ��yi����wA�U ��������Ld������7�	�?a?�F	d����qk��S�|��L2>��g[�K3���i\�}�@�6 ���e�4��
 *��tP�E��yon���3?�����|���=v+�@��p���|dB�MRy�v;���h�6�p~�]��@N��[tE���_��������� �y�3��-�7��sl��"�����������p��kD����`��E"�{<���5}��$��� �2q�O�e��xd�0]��y_.�.���h���q9�K
�����86S^��\��DmQ�"6�RD�&�L�b������&0DR`F�3��u�
�l 
YL\�To��da���5�\C��`��2�(�@7i�q��{]q�GL�b��e�|���3"�3���M������}��Qg4Wp�,y�P�K��m���I��?~x(����Q�5[q�����,.?�>rr�~UG�X�aF��]�,
�M:�2��;z��������A�O=����r�����~���bl:k8�x�C�3�	@D
%a������DD~���w��v�<�w�h�;->=aFBk	�'��Q������c�bE�����n`37��0v�L���TS�����z4�!�sK�p/��el)aF	���G3�b���o&��8�Xx,R�k	��2]�*,o����3$x-��P"S�x"AV�����������u���7�3��69Q]Ju;���m�*Md��&4��F��C������<B�����na�d�����TV]2p �gFI�4~C��\���L�I������;-I#\<t��r��qU���J92=�-�LE�����86���������M�Q�f4~�������M���kq$?�/����x�����H����s�f���Z�L�|d+f���%�q��K�}�_�2w����U���x4�%�$�/"���'N���WDq�MA�3�o����}k�+�����:jOh�;-�?�E�8h' �ccv�}�~�6r�~�~���)!l�~���x����f�6��+�4����Ox����(�4`Ohs:x�A�o����g2�����f>%���ou���Su#������i���I}�4��J�
���mOM���e_C����7��������;�E��.������V���nt��"6�U�L�!hq0~N[m1M:m%K��s0YM����t��x�$)i@���g!I��4[��ub!i���.]�3��GL���'C��e3�A�h�]�hl�O��q -����`�7���BX�q�N�V&�m9��6�9,����
Uw�xDF��( �G/5,q���n$�[4����������!!����?<�W�}��5�����h�_W����	��vMhs�0�������6��2l�h!S6�!���D8[��~���'O��� ��M/��M��{�\�n#��@$���������X��w#������E��*�U<_�|�;��D��1�
���������T��Z���R���IN�h�D���~K��.q&C��4��`��|)�b��j��A�EH�{l���Z��q�t9V��]C��Y*�&�bmcm��u��^�PoMbo��J�\��t*��4]M��r�8�m�Q_p�8�pS�t���$�Xc0j"�>���Z������Y'"��3i��6( ���hl�R�x���KB�|��0�t�0p��d�8�����BB2���	l
�4�[d0����`6&}�[��g���}�%����>2�$��P��V��NR
@�m��Sk��q���q��e�c3\���1������7N�����tCw���.=!�B"����5�i�3�f9�(�)�<�h����U|���xc�g��H(���0!�����% ��5@��	,�����Bn&Cf�i0���4�1���F�{����><rkBQC�q���������oj�*O�h�����L�ul�����M�q�����&(�U��Z����O��2
�#[��TC�B!�a�l�OxF<�,:��������'�'R�>�������+/���B�����B�l��Vf�a��h�M�b�$������.��{#�t��y?\�}����~��������!l�����_�fBn����������Fu;�>������z��������C������.��E��;4&2�n�"����SF��2��/�g������p1G��,�s7���:�,^|��H����(������/��a�\�����:���H_��F=:�r��DF�c<�}��=]3������lL�;3Q&�j����U�FT�X�t�\��=�
Pu���*k�7a���K�b��b��$tB��v��02�<�T�LNH�A-�8�h��$����s�8fn��&/�En\���<<p&CF��Q���u4�TjF�D�#�2<a�P���K7������]����
��[7]��D-?�B�����v�����|���r��~�Q��563�`�2!aGg$v1�G�0!:G���5����I4�<����"Ob�+u�������	l�GT+:�� _�+����1 �7�����	1M�����},cc]�����d�[�,��H�J7���>f$��R�z�=[NT��C
��$��a��H6}�58��$��/m99 r���&�}��C m`I�7��*��		���^��5�����9��g�M��EP��,��X���I`�w9��E`
13�O?�DmW��0CZk���97vB|:~&e/���n�=obx^�����jl(�O��ZX&�g������wj��b����'�i0W�%��p���;5�]����+$��\z�Pq�
�!D8��N�fx�OU�>$&�����K�������X�ZJf����-��.�T-�����?nE���~�Mp����
�c0�5�c����/�Kc8�
�4�/95��+=�|B%���������W3�J��5$uv�F�HB���O���#3V�b����Q��/LH�y�G��j����0!��]��z��z��C��^�����4�/��M 8>�.UO
<�����j>H$(��5~e�;"�
�����m�v�!���p/�$��XL�{�	���~�wy����O�_��g dz#��(�
����L���leAO?��������n�����*�(
���� K^!����RH
�QW������Ad�>>rE~�[���3�:##���]n���3)�v�!"��0�������0A"����G�UddT	�n��@B�
��$�8H��K/����0������������#���0���:�Ytu����6��&��-x	2p�
	�,$��U�no�%�?��������S~�5 ����L^��e�8�s��$�H���Xy��~�s�5����Q�[��^�_���m��w��#x�C�|��BC9`K�l���}�3�i^xC���g��Y����.-�1��L�<"�����:L��	�~_�l��N(�������2�!#��o`��+�pr�GQq�
���4�w^����F����q����8��|d�N,���<\O�\�.���|�m�9����c�����2��	���r�F!v��9\7s1K�Cf�D�����v��q`z���?5Y���lQ����2��u��`���i��_$�\���s]>�E��|��K&:4L(��#��^�M [�B4�A�q(&xW$ja"�B����D"��
OE&�;>c�C�+wWc�6������"��}~�\�q��C���Ra$�T�}t�CMT���g&-�*3��^�hxW����������e=���G����0r�LbA	�$jP�^�*g�yj���99	���S�����a�O&\�3n1��p$�����j����Kc�[w������&��X��u/���������������]XT��MfO�s�A1%m�]�����]�h����uEA�M�Nm������~������(2"�� 3�8����|"u��A��0�dK�W.n�<�Ba�3��_�zSFh{���34��31��+��E����dk����v2��8�a1�'���=N�m�;0'|�������E���Z}�M4������" �o�o���E�t
�[��!a���,(�7=%�+��]�7�V`N{6s�TqFN�]�'t�q�^�8sq���|��bf���`�%drm���Ph��v���-%p�k�}/l$Fu��O��o�����{���	�|���W9���W@�nY��k�S�����C�[��i!�	I��#���H0�.D���=����'�������(4�W��v�����������&G}��D�2�#d��_��!�o82�X8o��#`�
]����$�����g�u1�|tN�A�|���8	�����Y��o&�6;�
�#���RV�]{��]U�pR�\�dBN�.�hb��4��=A��0{v�UY��O$����w�����h����[b����W���@>2�����DS�Ce������tH�."��������2���X��f9�,�WOyL#~�\���S��st�(�i�q%������{��TF�r��:��6.�
O����x��B�=`SL��Q��@�h�S��Z�}����3���$��#|�������C�8�Y�2�`G��,V���3��;m�\PR��$��p���I�44���{)����3��*8���	% ����E���*!bZ����Fl^������F[����]H�T����i��Hd�P�������B)���
Q~g���]���9����X�SK2�R������t:�Z�����J��*�����'�s�s���<�;�l�R��lW���
p��c��DP���������C�y�h���@19�]��#YL��=��k;�ta3�w��Zss�
}����OH���d� l�M��L�� {��-~��}*���M���������ud`�U3l�,!j$Y���u�U���yp4�"g���N�e
p����\B�vD"��e����0�],|���,N���&Oi�OLL�������x@�r����S�\Hq4m N�xd�_.'�]��e���;n<�f�~0�!��c��qW��,�l�e�(�oY�����Ld4����EGkT�����}p����]~h��x��d�I:�Vm�g�3�!?�����y~��X,�������d�������K�6~%�!���>;W���v\\� ���5�j�����������gx����:�c}V�x<EX��n�vF	H�V�4�J�0�=��n������]J�"�,(.'��l�`�6�O��
v����f��j�e���?](�#t�`�����Z\nxH���z}2�n���`o�c��)o�cc�hs�J��:t�k\�6j������z�Hc���hZ�p��;@�*�,d���eeACq�c�n��A�(-wv	`���(���v������:����m�}��EH��@��zA�
��]]k6���w$�8� ���G��G��8BHc?l�%�&��T�bw�z�~��M$2^K�pG����o~I6!y��m�k��&\�U��eF�[��!6�	���U>"�����f3	V�����j�X��/������|&�&@a[[������T���i#��%5���%�A�;�6���X��k�N
��S��3�Q�"��	h�M,s�8�\�ce2d�)�����^��0��	Yb��s�za5(�K;���f���r�.�<��k�����dm�[���c��q�� �K�G�)j8�Mv]�lz�����~���=���v�G'��B�|1�p��q�~v2hR��N�A���� S/��g�a��K8��U����Se��S5���g!��,�o<��G�����G��������pTUMp��H�Fk�����plR*���w�L�NHq�pK5��AV�=`o�������ka^13Gbt�����id�8���h!v[L
���I��Ql|�"qg5���B�W��������R�W>V��p�Qq�
I����u���
�|fR2�I�7
�(4CAhNV�����'g��^d�[|�n��m���L����U!(�}�p�G��B��+
�o����<��(���{T���>.6Vdr��H�P�R�,��.\��r��YP�x��N� ���z�7B�{2<2Zp����&����
C�I������+�4y#��X=�����vYP����n=�d��{}ML�??3A��'�X����^3c?��1T�"xW�����6����d��^F�����lu��U��:E�e
F���f$�����]������������[�Z�����|��vs�Ch�s���>���!.m���d�#1���� ����A�H\
���r��4�n!���_��Yd�$���Aym�xR��%�r���)�+N�6[����6%���2K��sN�����&l�?�����������/?�_��-u���{�/]�o��.#�5J��L% �G�%�6��mO% �c�K�<JX���V��gO������$�����]��LR�8�c,��.���jR2���9)/�d�}���q�<��s���Y�Mj?��{��L5�~��0b��8u�d�@�]Q�<'w�n���yg�$�"b��4��(xW4R3�Jt"#�>�*'�d0�M���YY�@y���L,�����	�����wf �����D��!c`����>�p����':#i�����|�h��LL���Q���~D��;J��;���<�4���6UP^[�U�m�2N<��a�L�3!V�Q�;���'`.�I3�G���T�������(��0�Jc���Krj��#�������*W�6g��zf$*�!y;'���4���\Uq�RVd����}$W�����N�e���X�)%)���l��E���)�P?y�A"s�hM'4@��(�����o�k��f��2�B4���]�i	�[�L\V[*�^��|	J���vK5�t��)�P?�!�"@�v�)��x;�v����f8_E%SS���I�\���Q�&R"�5��w�9�����k:v��%YSA���P�`C����s�Bl��G[��xe�c�Y�e�B����XL��G�gM(�4�7��[�L�jW-��^8{%Z�	
 �7�l�M���������7�	ASe�g��D�,��L�,�XS�F/��

��<���-=�_��e�����)�8���:GBBb�L h���V������9k�li��Y���p8�6��-u�������.�������9����tA	�E������L���0���&uAL��*�g���t���,�e:O�iE_��-��m����i��m�W����(ZU�s=Z��@aW-�{�L�q�f������S�f�� �����Q���.[�NUUWZ�EW�7z&P��X�qp��*��f�Z��~z6�.��i&��g��A��FUvj�9��jIf���a=���]��cr+�	���aV��V"�����r�
��]=���������Q]��#���U���JD���6j4�����N��t3�'�j�1�A�Dd]s�����������aQoz�aPoL��=u�=�*l��3CB�a}���
�e-���=X;��&H��f��k����+������c�t���������2t{�8�/n/�f�:N{H�NB�����i 8���"�a�?O���,�{%"�n&KS���-�e���x3�#4qG-7�����a��-��i�����@��doEy�����B� <��"7N��	p{�*�
��O������@wRU���!U��8�����i��-2S�
5Z�������
�����
���,si���-R�e!����bE���?4�j"��b	'���S�����o����������9-�&��_���w~V%�:�z��E��\���������x�]��H����������Cz���xM�����2,4�0�+o�<���}����������*I�W	��'wD:f���4y����[~2��V������!��c�Js;"qfA��f2-��E��&���_��d��C����d^�hZ^�Q$G�F���CH��`f}���n��g������i��'����$��vU��D;�����\;�t=�x��3!{�&"�ZAZ��?��s-��Hk��$@��8�~,��9_d�a#
;���0�kv��9�	p����u���HV����Es6Kr���X�(o����������[�^sfZpB��}�LKi-E���P��@������0��=�s"����y�
3p�>Kb�[b2�|y$�)� m��A(:��'���>"���i����h'-s i�H��0������c�E/,�SEM����_=�NR�U����/��N�T�����6�ejI=e��#wW�Nc!�9��z������,�����e��CX����Uf�~9���+Jn�>hXt���	�e�oU-�e�
����z�4_�}�����	p7��4z�7"h��?��7i�=]gza
�G��0���	{D[
�����H=<+v�B�6��Yr�i�ccr��)r������W�I)Xp������IA�W���A��;�,�9<�B���������2`^%� i��q�����3^yY��JZ������������s3,AU�[\�B��c�05Pr!3�e1��\
?�dt���f��K��:�]������2X��������K�=������:{|��&V���E�+�e���Ef�Z�~������U��^'��D#��%"YP�`�+���:H����5]}O�G����	��7@������Re������a/�����a�1eg-{A�������������n�z��K�������
0����l	w�c��} %Sn���l��7�<������i��;����X���O��;5!�n�$���
��p!b���}Pnt&���y�����|?����/=n�����qd���l�A���=���=�^��iE�h������P�Z�j�4~A�G�,�Y;�2���������T�e���f�^lON���
�b!��y	p����^�����f3rpc��'[����t��9����.��z��H���&�M���-;s�=����:��������L��[�WOyjfEtJQ�4��P�Sl{h/��g��Zc0jr{���4���,���s6���,+Qy�1RV����s�T�����~��2hNe�*��S.��[V��v{�
d���e����M�l�*1M��PH�X�y��A��(o���"�=�_EM�������}�2��lgs-�p���p����'X���w��RTs,/����������o��rc4	�����U �Y��L�	v��������\f�/wBl�l?�W�
�����0%>#�h6�mF��P7+R��_-@����*:m����OamA���mz���E�p	��lc���t�����������X�����8�=�R�fg��������EaJJ��lw�1�0���c�c�6+l|nB��N���pMb mA�O�c_��Y��Cr��*8��n������9:��'u����U���B<d��[+J�`|\���p�QJ����-C���\�Db��E5i��|P���e9�5�I���P��3�g�L�qi@\��l���x\��2�c,�roV	r-��q��J!l<����:���>������N�_:��i��Rp��u������XQ�4��s��=h�7���,��������lE�%[��\������u������L�'U�� ��2C���X|���oA�X�]48�	���7�D�����J���
���v���Oaiob��YF��GY�33��!�����6��z��Oh�X�=��SR&W*	5�}���iRw����~�!q��:s��3�(L�e���:2��FLY�}�����M-���^(��/��H'l�����F-!���m)�W�r��(p5����������������U�a,HHt�
aU!��vGYka�5��/��p�H��������������\�z��v�Z@���KI�l��+L�������.\~!tj��JD���6dDe.GfQ��*�Z�_2i�����X#$�Z3{qZ\��nq#�n��?+#���;��Jo|��{��Y|K%7������
�n[����d�B�+��U���wY���j���_M#����~�X��x��i���4������a�n)g��M�|<��ng��t��\��S>K��,`-���CA�v������.�y�:�W�?�\��,�z������/|?w��_�&��4���~�6S���L�+��������+���~�����m��m���}�?���/������������s���yy��������r���r?�����e���]/��eM��U���zy�����.��r^�G���zYq\��^��X.o�� ���)�1]���{�|]�����Qj
b�����zy��k���T*D�|���H?�!�j�*����J�
)�v�<�L1]�#M�u�����I�!���(�!����}-���k����tb�>K�QL�k��Z�q��:�t���u�q}����������q��G,��?a���\ &+����Z�Y[����^���g12��Q�@�W-���u�V)��U�����j�X�nV�x��;�b���3�� 7�g������z�
�b���1_���{�����\���m����1_ws�����?C��G�>��[��������0�����{��F�1_?J���/v>����[���o�3��L�~��}�����.��h^�0�E����/ZW��}���^���U�b_��:��m���]����hZ�,�E��c�/ZV��}���V���U�b_��:��]�����.��hV�(�E���E�'�N�
����;~�x�P���A�C�sE\��<��^����Z����x�P��Y����^�?��"���=�p(�����k�g-�\���-�hG�>��#��-D����
j?��k���c��D8&�Y�LV�T����A.��A���~�
@���[�NO���Q�g`�c����vLJ�
�	����y�i�����<��I���G!�rv{�'J?�F�P��>I�I�`� �L�E�%Y��&��k�+i4�bZ�j�����w�'�
���h?���,�6qc��2�7m[*��Ze��$�Rq��y:=b(S%����G�E;|w.bg�������*0E�te��:;��L=��R����S'����L9��v?"����8�����RY�p�.}y��Q�.V��X�(�%s-IV�Z�-�sD����Ll�Q�Kr(6?��l�\��v���C��y��u~h%��8�8�������
�L���[��y��3]��I"��������sw��a�Lja�6J�i�J�,����)P��`��48Gg�d��7
�-DK5�I������`�������\��b����i��L��VYm�����B����n�l����oT&e�GD�����qr�������%�������R
��/fUM�t�����`i3H����Y	�]��54q��nEz���XALQ������Xo���l-�QD,��eY4db����(*���*�����*�w�D��H��h�Xw+N��w��jg�pp���	��[����u��v��&w�i��,w.r]I��/�m��Qe;�Nd�o�4Y�Aj�9�6��h;��;����i0�"vGdQ&�'Vq�LheDN&6#&�o��AHr�8�^d�0�gw��Y���."v8��o���YH/�K���tV�%j���C�(^db=l�vV�|���is��'��@�����Z���]��~V�Eu�.x�"{LD��yC�:��������%Y&X�a
T�+�L/6�{�*���I�(��}L+)��9��w���<���}���O��P-Om)�JB�R�8\U��.*��s-�9`����5vj+�O�{l`����X=����N���`�V2Vh�L�Ot -���@��I��&^d^|������a���x��N����������Qk7�����Pu�zX�`|� _�)t���9V�_5dT���h�3R�O��G����;7b�$��;��N�SA�2�\�bu�����Q�;W�B��_�1��w��[f�O��(Y��|�-7\��3u.�`���&7.{�0��+D
��5�:C��I�a�j�a����
D���_m��$%����I��ob�����Z��� �j��Zd��,7C��tF��X�
&^��9��;���cVb���������,�[��9�D�<(Jm��W���E�����24��{��{!��;�V���@~�Q����G&��'%Y]��#�����_�b��d�|����M�a���c8�����R������JZ���	3�|�0���tt�.�}6�!*����e+�SAs�K_1����C���&�� C>U�����w���[���#D�a��K�E��������f��w��y�T�0�#���}`���=_I�O��*��q���;���+\Z@�2����BZ�-�=�����Q29�����>����Y�����(g��?/���%�}��H~��z:-�\�d"��<�Q�{\��(���)FE^���HC�4h��F�nZI�5BB�V���<\�R�Z+W�0�GX��1��4�,�4��<���~�b���������������e��V�1�a0G�&W���V�S=B������m�.M�}p���W"_���pH�o�#v���p���?�-�q`m/kz!B=z�������:�DYb��oZ3:(�0��9�Ze:7�v�g�5
��B��7�V2qF���	�'3bV������h�Vu��o��w��al^u�B��L� 2���;��d"���"���x��p�Vj4xG;MK�mIX���i��cpr���8��d��R��y<^d������y��t�IFV7X>d^�;]�}��>j�T���P/�i"sd�78Xe��=�����G&. ���$Q�a%�-AV���#ry�Z���H����w�>�J��.��$qb�a����&wQ�c�.���w��L[4���n�����M�B\���-����>s�����e��<5�F�-)�yScL�;�	Gc�4����mOhd�� �Zz�����N��v�b91
��W�����6������J�,	8�Z��'���y;|;��KRe�����;��(a��������&2f��]����U�M��DN@G�i�[��'�2����r���_pY��5����������1��Sd=Hd���c����7��z��c*"�����������;1;~�8�|!����ps����&|�M���@Z��&�v�r���Q�%]������J�[t0_��WG�$�����/=����B<D��iD������P�+��`*�����iz����O�?/���M\F&s��<��������~����WA���v�mmd������D}��@�Z8������>M����X�����,�m��C�W�W��}5Y��};3�/�qGF�d���z?��aW{?���M�	8��A�M��P����"�|X��CO*R��4��']�U~�&�p���Y�����O����T�����a~��R��/���m�JD�[�f�p~vS�y��7�}Q�m��P�q�|g����+9��\�����"U��$��g��m�E��6�����~!:�3��J�������?a��|�	6�eY��>3l�gZ�fk���� ,�I
������jK7��d�����5|���)�/���|"���)W����L9�U�c�)Wst'��y���j�W�������f��p5��!������K$#�t]\{���%��0��u����q�>o$��8@<v�"�/{������P+D[���J��*�-���9,�f��'n��Qk����|}���9xj<m�lc���zv�V�x#j����7��`�t��+���'�B��E8��,�1
x,@C���
���co��X>��Z�`s|/$��Z�����3�Wz�I��V���9�S���$����������@�6�s��H=�n�p{�;|0��G�&�"0v�����D�5���f)@�&H�'E%8���SO*������=��	�S/+Ai.����M���*��Yl��T����D�9C������b��e��Tv{�����{nT��}p^*��G��,�7q��L��}������
T������V���g�JQ���L��qX�����}�n��t{�y��h���QF����O6�y��[{1�{����K�O;����,�U��w��$bKX^H���&�8����YHg8d�_��>/��c"]��+�l���'�����T*P��i|��������u\Y��q�����\z����j�����1�npO#�_7����npO������>B��Q�[��d�o��34Mws����h�+�Qw�[mE"��9`��Nz ���
�`���a���������<=����mD��f���1tF���������T���������;
��bHh$����F��)/yr��>�B�eE�j|��(�
�v�6�R"��fr��P��[9<���d�xeE6��J6^YY:^���xeE���W���W"2�����b�RN�����8ZYQ+DG+��A��he!Z8W.��V�m��-�)��1�K�?�|�a�E���(F��#G�$��������U>o�%����3x�"n�����YF�*��O]���;=���u�V$���{lb��V��x�#�*RY���/���A&�x+j�R5�_Mt��3���!��~������0������?9�K�p��+�2�xr���7��yk��-"�1�����m�0���TI�Q��l?o�z�s�y/G���H�����G�*�2"x�L�-DJfS��=X6RoE����:J1��)�f�}l@�`E�W��X��a�<�W��6������bxd�T��7�{���[P��� �����������������t������_O.����#����|�q�^�"7�`a�_h`{N�����$j��dc^T'!s,��cYn�
�O���c��{�-p�n��8����d��B� �w��0{���B��-�x�r�o�R��;��HD�6�����/_H���Y�x�����}c�/��q�i����?������B.���o���`d�#����9�zt�Z�u����Q���O��97�	�e^s0�WZPl_ 3s%Z�=���������)Qy�b�f�!=��1�J������~-N���Bvs�0��c������`�J���\\�u!c�;H�o���x����I*���AQt����`��^�Wio6��~X<
�a!�>��h�l!1���BA�<���6���jC&w��6�qnok�L.:�<�b�+�d���@{��>��������3X�Z��my�������_H�}�w��q�/\��Wv�I��BdY�G����*�h-����5�D^���0q��HD�p� �����[�"_1��h���%�%���ta"���)�������}�i$�b^��	7�i�|�������P�%��1�*[$|%����n����#N��
�������j�����	��P_s���>�K-Hu#"������2�Xn��O�k�����<.E�)X���Z�+��I������b��|����iWa�H�����af?@�-�����6v�k��(�m��m�?�4]��h�_(s\��6d�\I�'�Q�:��u\i
Y���+�S=�c\��p����aN�5�6������AE8l�����jn1����+VO�����X�����E�:�s�AC����GDVw�����De{���wX&��y1>3���A�aEM�m�Lu+M��������'���:xr�!4�8&m����/*A��L������u�����V��E�^�����$����E���JZ��E�m���Pm��m:��v�c,�4�<w<g�k�N
�����&ce[���~*��~)9��*����/s�tK���U�n"N�^����\)��@;7�}+���Wf�v2q�E"r�
�|S��0l7��S���<!/���0#������bB���y�P����A �3��g}���m�ay��|��"j���^f�o=������^��I��nIl!��g�+��/$`Z����������r�l����&�'���#�|d`/����_�:��C���&�
��6F�W�P!����3��$��Z�,�%�C��a&��@���\cj�Y���Y���������m!s����	�Mp`E*���S������<�l!�<�����b���yA���>� �����%hp$_Hj���D����
�c���g����*c|+�Zp�5��l4�o	�?�#����������:l#[��6���M��P��->C��]Z-U��9��v,�����^h���R���qDa�[t
���
�� Z2.��pC��5�� ���
�h���i/&��U�tX#/H?���9��|��V�g��vU[���]���[�:{�ZQK�3@����.J�cDaq���]Q�{�0kG�^��� ��M(��,���{+�`��)i!�j#�����x[!?��Hy?1���~Y����_�����'����K2-�gE!O�����B��4��yt<rg�Y�h�<�3��3?+����;4an�;�Z���]�^d""xt�0'����z�
X�2Z���d�	���H���������4���X��y1����Gh|�j���4��a����� �A���m@AD>�g��Y����z{��7Z��*���������
�������������|�YF����Q����(�E�{�+i���?/;���'!��"��T�C��H�x����6 :|����e�,������e�
�,��N@P�{��H(���$�������t���r��~uA�y
B�Y�i���/u��u���[9�f�`r���w�����%�K40������6$��wC�u��w-H�	vFy�E�����<�7dL�����M�����G �GcQ���uKH�p������c��\6��y�Hs��{����R�� lK�����B�>�(���������'8��X(���_Z�?:t	@��������)�d�t��!�-����J��6 8�$W�V!M-*����t�iQ+�������6�$�/M��h�\f�����R�=�Qs�n��)t��������q�R�N�gdlEZ�>��O����	�+�<�d�����g��;ln?����O5���+@�����nE���;�'��������E�a>�N��������t���".O�i:8���W���8�`�b��F>`���
�UkA_>d`�#_�K�P���/�n��C_�
D�G�<3��������� "N%����nA+j_���i^������x!�r���zN��|( �6�|�_��U0���,5~�,��m�5q���p!�2�A�(����Ps����z*8��3)��������+� w��������Y����{[��;�C�d��<b ��~��NJt�av�/�BU�6�������AZkr��M���d����l���9h{!����\� A����l�&FV�5�a�����JB��`�y�p����D!6L0�y#9��_hZ����|�E�z�sG����=3�X*v�����q�XX��d��l}��!��=rZ�g�#����&��[a����jr0b(���+�n�yJZ �8O*��=.^��1$���j�On��4m�����E��}���F��=l�tEZ8_���� 49�[��@���"�
�b
� RX�:��S�teY��������/�p�)8�����[Z��@f��0�k�f�*���9._h����v&I���'��aB��Y�K��.jg�'��G>y���|s�5��486V3s�`�RD���]��%v��.�&U���Q�?��C�����7b����3�o���M�+-���n��c�L�y�"��oE����L��N�������,7#����.�;�5�c�9R]~�D?1&�~���	L���2R)�We4�.���OA+k����|�D�`�	�6`4��'C�|��B������J$RbM�FL��nZ@��Q?��(i�|0�>�a���L,����9?-����-4wK���)~�a�HS�kg��:&�����p���m�Y<!��e����Y�L��{xY�dRpP��x�o��L�������`��u��&��Tu��	�n���w��)���.��Q�����X��@�C|���`Q���_A:.:�E1�Q�|>i�����+����6��ub�M�g�M@�����4P��Z�E��B���%����K��I�g������R7����J&��eY{���h`
B?�=Xm2������k!���ym��c![��M.}#����Q7<j�llA����<hy�69���>/������� �l�Q�����t����a'���c"����' u}�}�nNs��1}����N����_l=\��"����V��<T$KM�M��(�	�^�q��j
6U���A�`�XtF>r�
z'$���XQ'���5��M���f�� -���g��`�@��d��y8�y-�Vl<���N�B7
�2��J|�6w�e��>}���&Vb�M��d2��������l�B[��@���v��%`��g{�0��>k�9�d���dN�-��$������d��=
������Hr�N���t!"��p�W"nKV�L�<u>a6��]���61��fI4O���	�%-`�w��!w3�XfXH��fL����X�5��(d��w�*fI$K����@�lI$u���m�/���T�{m����.Dd�������4���H������}^,Z��r��%}����������+��0���&���/��9������P��k�WM)W�&SZ�|m6��K��;83�R���1��M������i�i�&+3����i�_�~�4��/����ler���p_������I��;c���H���G?��������9bR�3�Q�����������6B2������&1�R�(���*�H|�'�T*�
��+�GP1��5S���6`�dD�j\=�� �t���e��Q����4�"I���C%y�)���5��'WL��*Wb�`�/if$��g>|R��oL���q���@�y��6yS��`A����k�$y�����iKIN�vG�(�B�.�T�7������4�2B��jt#��l��r�>~��g�H�(!�7� �9K7
�VA��Wv��c')��
������4x2���0��l���S�&��3����]����������^�
���VA�;#>��\O
!�w�!���E�m!l�u��iAZ�3W@+*�nB)'E�R�M,"��%��f� �����4u���N�����N��mL�g>1=�	�S5c��R����B�1n���F0n*�����V��f:����2)^I��
>l����.k��r�5��Up����g�~�AEf��i8�d+�t�U�<-OT������������j{1f��B����a|�P�
'q���Os�[zQ���qA���pWH���bG��b������D]wh��LUn�c����m�3�>�\I|���:����MA�5�g��	��T>��{������2���(�b���F��"Qv*�N2}TQ��<o�@����e}��TC�t�+�j������0v?+��������BE~�Y�����b���1�i5t��9Sq����z��/��Wu�W,���jr!Z��9�������v�R�^�9�Nn���"�'|e�c!w#��������$����^H�F�d`&L�?��<���G�����x 
�����^���[O�����4o7�	���gbK�����������/+��q2����X�����p�����b���n- ����
��� ����@n��D}�+/��(F��V##A�[r����|��l�����r�l�h{�vDx�	����99y�����t+��v���>/�f��$�|G��8�������q/�cm�K�i���fe]���E[$����T��M 
{�����dhb�z����/N8Ru}���iN��N�� ����t��3����E#2z~#X���j���[I���<���:��������L�����r*�����3���<['���5|�TR�U
?�d{),�����4#d(���
g����o���Tu���O	9�Y (k�I!}VH��(6)�D��9�������-6���l�'N�4���>V=�7J�����z��,�_�O���$����wj,(&���L�{Y������*)�~�/��^,�����R%��a����!C!�\�z���<f��bvH{�j|��J|n��D��Z�J���>6��)�JF13$������?����L��3��Ly����z[��N	��������lR�{��Q�'Z��/�����<-��(�lK6Y�[����O�����?���@_6�#�g�4��4Ms9T���W���A��� �YO��3�{����v��*����vqb���r]�t}�����u��t]E���s��YK�?����e��\�}���O.�>k��'{����������W!uO�3�|����<�~��_��c�M������R���Z:O	d�SK��M|j��`F�Z���������WmY_�\~J.�����Y�t$w�1?�I���8�����������hr���s��?6�D�������C�o��������_���=�����l�Q�������so,���������P����}��Dd�qc]c;����a�C��;�5��`V�P��G��t8:��-d��:S,e"�}�e��x���n�
�����'�������Q���<n���Ck�hHD�"��H�Wr����e"2�v���&�C$j�F?]�w�K��;?�d�9p��m�p*@�p �����(
�~y�,����!|�(u��#Lnt��$�af����� 8��J�Z�=-���dWs�|��@�I�rp��j4+mA��K"eW����r@�+Y�T�z6x7O]��r�����}��6$����JZV;�@X�	�����������Y�$
���'�$]��a�Mf����O����x�^�x�Bp��o@�	�Y���"�h�=V#�������o�@*��Y�u�d|�������~�#�W�m��h�x�	L��Z�t��IM���,����7��X��O&������������s�Q�-�k=T���Y���d����b �wCw-�����hqS?������d��``et!��P?�=��W�������?t��E��$�'w����u�OG������?PF�����e��r��7S�/����Q���V�nc/����ay�$��d��(�;����Y�����z����v1�jE�`������/��M���j��876mi=���6��K���,�Nz�)����:H���q�6�s��j�[����-��_���{�v���;DkyH�sV,�+���!M�������Lz�s�d����2��[XY�&��59���7����kw����X��W�O;�������sa	��:�0y�JD������M�CXQ�:-r0hQ���Y��8�]�3�����%"�x�a���E��R�>��-����	����qo����TM
���s.SmG��5%���v���~U!)+������}���)���|�{�j��48��1�0u������>rZ���w1����Q��2��Q+7���6��,D*����4��\��k%�k"_�������}M����8�Z��'����-L�V$��1��6�R��?\����dY���'����j(�-���/��?�v|aa�����w�$9���k�$"e;x�������b���L�L��`2��hI���\<E���&���T����lEx���E�T9��(�y���.��D���n���"��z�
4��u1���xdA
�U���v	xW$����<V%�D
����+0Ow���N,�)�v��z,�������7��!S���-n���BBf���,������ic.��]w����D?�d�"���H�7I���{�Q��EH�����;5�O�z�*�8�_.hwC���5b�����hs*��b�Gl����`n�����������9���CZ������� �����i�!O��b�����\GC,��W[Q�U���-�����]��i�B?���y�83b���~��Rt����}�����_	���%�mtE	���vp������{�w"U/e�4����V:lt�q��{��]#������~���<
jU�����<V�i�xo�V$��~J/�5?��M��eK��D��:k8hU������$����0�
���l�`!*_�����t���%�!p���;�H�Z>��2�|������]���C({�<s��>���9L�g!M���)�KD_ozT����h���w�^m��S	+*@�nK����f����iq4��=R`s	Q�En�TE�$���B�L�����9�I�U��Ne�N�/�j=x��	�~��)��R!(�^����;@S�J�}���[.��J;�N�� 1=Bp��a���)�
��)Ue�����tS�+*�j�[���	8q����5���z�|���]U�$���82���Jr=k�"�enZ���������%;���>�.-H~<������M�������m���~q&��x"�cFB�x����}�2j{[���X��x����"��s�_���u�o��k�_<�f���'�*�/�a?�N���Wd��t����v�@-�d�����W$�,S�r����v�Z��d��y*k���t���Ho�3����^�������r����.�7���=��v�"�t���3|�C]_��u��<�77>����3����\����noV��Y��=u��7��n��}|����BDu���B���!�"X�
;��l �� ���-VE=l�fO��V-Ac�����������jf��|��5i��,�����j��mJ���o�fLh�U��/Rd
M��:k'���sD�k�=����i
�����EV���F<����6���)�k������t���"�l���J�s�x�s����'�l��+�*�A%�4C�y�|��K%!O3�$��@^H�~j�AN��99��p���s�l����IR��8�����*������`��l ��c��>o$uf�eX��� ,MY%"���F8�+���u��I�[b?{{����$��<^��{rS�L x�
8�������Y���*8�9���Yya�b���i���t"�/�^bp9�BT�-d����:�W.����[4��TI�i��[��Qm%"�t��ep�����@�q5;rI�X+J�3;���5���DdJI��W�
�[��j�x�M;QK�x
�Bv�
4pK�cG	�D�s�����r���m��N&����J���������[�LdY��io��s���o���<m$�>�;dx!�9�6N��`�(�O��q�r��*�l��R�?�_(�?ib����pzr���`��X=�lT�}��^.�:Ko���6�a�=!����$��6m0���k��H���y_6�t���I"���u_�m�kw��&/$�����l�9"��7�-�.�����/D�HD��|
��[�V��J���.O=,���$��E{���	A/��e�R/�DS��|����$�f��X������z%"��p�t��NGX����Ja��VO=������,�����oE�?��m<�,��bJ���.����63�2�w��$��&@����u[�����I�����D-X�	k���&&I_H�e�	t�{bc?AgYR�	F�+i��UY�;����|�;��jaN�F���k�#y���""{��`���Ob�nh�~���{��G�����n�b~T���]Q��[U��x���31=���P�2���=�B���p��;�G�p���"�KO{��wwo\�����������/������1�V��PTN����"���5w/$��i����'�(�:6O��7�|6�7�[XV���h
�����b�BB�6�����D����h����X��BJl�T�>/���F�\=����������/��/$��d�=Ln^S�|��e�5��<��0]g
F��8U0�+�z0�j����n�/�d����5g��x����ZO;�n%"#e����y�7{X�R%�G�YV����zL���BY�F3�*�;����T�m��bR9���>|7)�/�p�?���t}�<��9p�?���OF_��[������9�Yi<����Hz�1���|�Z0%d�8|b��������	5��T���\P;���b�_OHKl��z�����_gQ��	p]��i�����>�46��*��1��z���G��'������hLt�����b�Q�wF���f	\<zb��qdq�S�F@� ��A:m�j�W���R�,9���O��G	��]=���b��o�b�*�b���g�!)V���{]�Cw|�O��/H������������Z�����k_�������c\ap��^� }E+�~&��I7��|�Q��#6��(�A����H�.���I�����6����|`7�8��!�t�O�'M������d�`�@�z������Y����7r*�u���M�11�Z��4U���6�B8$[��������tX��d\-��������?�N��$#���U2c��_�E����Yt��\``%I�x^��1�uc�J�lz�p��0,���t: ��aA�7��]F����q�/$@'U��K�?������b3���N6n�a\����*�k)u]I��D�f#��?/��]�u�cnS���f�Z�]���g<tZ�0��huc@����[X��UF���_t���;������3�����b}����
��t���E}C�CH��+�>t�{_����fq�'���Y���B�&Am�,�����x�Yo��,-���rKwKk2�R����&��x����/.�?�T�/N7����Y����<�w�LF�k�b������/dw��Y��<lS����H|�C=�,s����I���"�7��*�
W�m#���G^���(�^Aub"t��Z�
BW�+�����C���o�O		ct�-t��S!��z�I�W�$����z<��}p3�����Fn&���7�m#\-U����1���F��rC���$
�W��Y��o��dQwA-�L'�^6���M�Iq���+����D^>��Vn@��_����F5�W�
��1�MH�E��E�I����L6���:��|� Do4�?�\H\s�s��,�a����-f�]T+�?Xe�y���>JF�^���8����� �����@F��i���O��$�o��$�;A:�c�Tf�yT�Hj��~l��8i",��[���������I�]^@O��4ekz�����a��Q��@�P�i�J�e�4����4�,���"����A�<���YdZ�C�gA�	�*���x��Y�*�4U�W�:���+E���W`��$?zR�����
=K�[.�Gg��p�i���e>^���N�|��<����-���k9�yc��B��G�k) �d�d���*�Q{�|?�pcBV9Y�Rx!����Y}?{LU&K���w'�
P��4<ZQ��,���{r����������'�~q���o"4��c,+�n��t&&��?��}V$���^�'���}!�Fl���yU��JKq`��������:*��y[������]���/��H��(n��T��)���q eG-4l
�8������/����~>����]V76��l����)�du_��D������A(E�!�2yg2�������T?�4������I�l���:��F������E��.O
�7����`��$��E���zGO���&~Vp1��I��<���W�1�"~�v?��c�t��\8�E��E�d�Vx�BBF)w����"�xU���.:��� ��P6������*~W�]:�����m8��f&�����}g��R��K�W�n��m$�bOCk�FI
���r�.?A�y��H�������hb���B�N�h.���"��������a^n��T$qnL���;O�@�X��d 6�_t�s��3=q�t�|����=Y&G�}�F����]�i�~X�b��:���2!b�:m��,?4�g8U��N#��{��/W'p�=��$��o+"�O�^Dd�
��(	���L����T�x���9k�AQ���E�KKo"��1��T �4I\��~
�p�$���x�) ��<��*h�0?�23��p��Y�����3�������57�5�DxO+�,�w"�q����z���wp�E�"�0��KT������A�7�xpWo��Z���#������T�q,��R'n�c��e���
q���z��B��������h>�L�B������|iE�l���
Z~�8m.��. ��zQL�|c��g!"�I������V��w��#`���X���:�w�f����>Zr�
m�>���������Rp������w��(�t-�����Yd,�T����6��SV��Dhb�j�:�"�����{+G�o�h?G�457nN�<���b��T[D,c[���M_�6�i��Y��g��yB��Ko�%Qgz�\���B�;���a�@���@����E3��&sZH�u�)O4>,��@��6����G�1Ka~p�9�n�iO���3�Z�-Qu�=@���J:R����(�n�IF���ueX�^�����|3X��EK2q���|Nq.Y����Jz%U�0�.��|�"�������=i��	H����E��Y�!v/�������Y�H���J�sX����e�
���*���/��"0SS&Geq4Q����8iJ�����4�w@#�5R��uO�b��d?���i���B:�X�o$��e(���E��9����"v�V�����U�N�uU���?dSg��/�'6���%��4���dQ��RT��;���#���5�����@��"�
G�����%�����)��%^�B�]��J��#�3�!�<H�c� ~���Ys������h���P������t����V��,d�LG��U45��pO�)���K��N������pb����a'2W�B��E���I�$QFK\{/"�T���a"Jo�_��)."7=�t�"�f
K���Q2,Y�:�qH�dj����r��I����1�;��
��%yG����#��t�jD*]�����k*x������4�W����"?����n_|c��D4*��5���Z����L�nd5����`���t0���6E��sXP��$n�U7M��*��L#��O�t���&.�;R���"��U�B��C��c)X���Dk�x�=����T���:"�Y9�������a���z�`#�)Y�@t�UG�n��F���+�7W�����(�6p���������1u��w�J�~`���~����u}�,A��nmb�@�)P�u�,y�mZ�mt�R}g���9k����e���y�!��������p������*d��nj��mu��_���5K����!a]�t&_26�����vt�c4��'��*��u�����7S�x�6]��}p��'�l�!���V���+*j��X�G|8|)���������:%�]��x�mXz����=�����&�D�����]���"'�	��4T�U�M���0"^@�h=c!},ZF�x��3��	��oCNl��;��c�;W���
1�,� ��"�%���N�\*���xH��: �B����|�W�~��7.���HmZ�M�7��- l���0nR�c��0�������t��3��$>��b�qH�cia�V��?�WYb����L��_�!��E�(l������ul#�w?+88l��v8�XT�mHD� ���Y�������<)9K���h�h�-����sn&�����l�������g���76��ba�V�TY�ZAZ	�;z��<�0��tl=�m*�X��t���vPx���<��y&�<�������.��De���EA��|�s�8�kb�5m����{$<m���YC��W��sM�?�w�6�������������_�~����������3�nHxz\!j�U\?���C���U���^����C��eh���(�=�&{�= 4��7J��$�"��<\���LSz��x�'������I�K�C�DM��c=�ZsA���=Pp-���2�E���qau�,y!M��n���II�	�J�x��/��m>������U8����J�aT���o�P~�em����x��)w������g�I�p�
m�����S�����,3�w�������f4e-A������H�^|eSCY�d�Ve���Qel�z��YQS�n���D�.���B�+S1Lu�+���`�����N��L�� ������cM�1�"�b�zzT����|�.�@��Df�����Qr�H��V�yM����v�
v����[�c�-Y2��wf�PI������|Fj��������dO���S��_���������a���.��g�e��tk�"4
��g��vcZ��=�����X�M����v3�'�NvdE	��"�9�f��8@9�'���km�]���
C� ��i%"�w���D����YVZ�EO�7���-$D3�\@���������f��vtEt���b����`V�_@_:�cS��5���f����H>�f�aJ���gEY�==y�I��+��
�7Z�'[��tEZ
����UA��|�����������w�&���waR"�y9�a-3,�c
�,�c.��T���l�����B[iS�.��.
/�1�=�-���E=�dMEl����_�1=3�aH��[	����tA��o��{[?�o�M[�1.�3��a�����%����A�%`���r�-m+���/=q�r���h>�#[��)���.D�y<��ba��e
�1]U�q�[�%���D"�lOW$�������=]��Kq2S��5-Hk_��4�����Z��dMy�^�����aMOs�5�~��9iJOz\aIA����yzo6��*0�6��V�3e��[���@��d;
��!t1�8@>��T�mD��:������2e3*�(VTI6������[����bGocb����idk�M��d����c���6�y#i���D����6����I\P���>����R��00�������nlts&���l������O/$��Z�>�|�Hr�Z,�d�bB�d6Y4;���,/����������b�v%"�!�4��5&h|���*`u��
j������y����+����hI��r������4.F<-M������������8Mq�+���E����nA�j��M�i��,s�;������}��oD-�d����{T�Kn�4������Ub�;T��_:�n����`2U5M�DqG��������?�	�q?�2y��|������J@-��$n&d���M���dw��.��t:yv�BT=LV; +���T�3����I~�J��f5�$��t!!?L�k�����D����2�kP�}��i���� ��Y#X�������R��w�[����_}1R1O��`uC��������&}^������	Q=
���(�w{�"���(r�^������bfp�y��s����� ���&3�f���M�b���H/j��������q�.��i�E.S���e9^P�sn�\�uPngWT���8x��b
��� �����H
tz|Q�G�D���=K,��������jJx����*3�,�����n�x�,���;Mg�s�����=|��l��o}�l?�xd�Gg/���^
X��$�y���*��S�������S�\-ocj��K��u0�	��n������
p�p-����y�[M�P#�y[��D*��_���*H�=���wB�&�� ��K2}"����IRq��<���v����"���Nosr�=H4(�` �k@b�����]����0gAN�z*A�c�r����h�a�{V$����0!�||a��"�L���)*p<
�r���`5�O7
�7���w�0UY�fc�pXlYw���3b"��$����PnP��i�a9��*�p\��SW�71���f�P�W��G��������@Q�/8��6?i��/�G���+���{	���D��O\aL%*B���*����}04��; f���i&m��,�O�[?� M3}�
"f���R��=Dh�l���T�����bo���e�%��f�?vK��I��7�`�����f	 :������OD�M59�������"d;Ls�N�����W��J��_j�0��92��sMD�F%BZ������r�}~���@�q��n�`&��
����iE����)?���I��4�+����� ��n�fR�"j����r�EuA���-�N�7�T1	=3:)���y3-�Y�����ED����i���V��v����3���5�2����q)�y�@����|�gq���������1�C_kEH(�|�$��lm�������3�
<>�q_kA(���}��
��z��m�@p	�Mt�s��,�g���Z���>����U��<��#!����bE�y������bJV��"��;��AN��]���mQ��o������D���Ps����>=e-�)��_�\E5�C��	��4���e���8��~%M��`�OK%Fo��uW~�������]���B�Y���vh��k���V'� �~�������r�U���F�������:{�"��H������Sp�#�H_��HsTn����r5�����#���dq/?�B�^Hm����%y�+����J�BF+D��W�9q�b�m,������o�S�������9y����M<=<�5���<o1�9V}j�����L=�E���Fh�R�-�0�r*��U��V��`F�V��n�q����b�(�h+
U���.�r�
BW���T�,�n�n��K�\I���9������'�.�����lD+�E�"M����Ml{!M�g�;��d�N%-�g��Y��6���=%������Z�F?<Z�����*����qL���H{~���W��x�ux��)���0���h���&;�A����������-�����}��G�N�?�I��4���:�|x69�5�U��HT�Em�DU���CZ5�>��1Ac���l���$���� ����fk[Bb5���,�I2#���zqK�w�%wb�+�����H��Y��3h���(��L?���H���C-�����S�(�����l2��z�R�9��� �D�v��'V�Pz�X��#�%�S��;�������2��#=.v�f�*��/����H?*f!"�<�)��f��$j����/��/��T���z�~��X�|�g[Q|�U~�B;�7J��d>k������7�z��uT��h�D�����~;�����sg#� Q7����s���C�B�
h'R��i{nX�j�9�w���*@U�3c�{��/[B�w��;�������|�n����}q"���N��}�L�X~�= �x��?���)�A�~7h����� P��[b8������;>�y��Y�^�4��^9���6���r3s�C�I>�q��	�|D���_������!S�}�V^H�}���1<�L^��Z��c� �3��.A� ��-�)yl�������|�H�����U�����k1o���i�=�}g�Z����������2�m��"#��;�8�(u��B�d���
iX���Li&���&�=�U��Aj�}%�%p�}�up��}���T�����Q�
juv#�����L��|������yHrv�E	.�����d��L|7}�:me$��O�������4�)lVo��	�T�)l5xTy1.3\ �q������|�B�`t��j.���$�,#;�����R��6�7e&"��������}3������(�AN��.[q�?���Az\|#��?�����+b w���KW"�����g�1��$�h�A����i����W$�����~�MtO�Nr�iLm��8���P�0��P��{Y������<_��lL7�3�����L,��owk����wrcL_���y������1}��C�q�o��DEp���D�w���Fp��9O�)K��D���+���t,H���X�����$��~G�
�a���xje�����[J�J4��d#�\�>�jIa���I�GS��v��v���<�J��������g���}������<��y,�G�>���,�UL��`�u���]���uI)���X�o���\?z�~���>��},��,��\��z}���R���)�1_���{�~]��u-��R���^�_��z}��}������#k/���]6������h?�t����������t�b��o�!���^�CL�k����G-������6v�b�>J�QL�k�����y����{����Z�s-�U�������G����u:J�����V�bn]gm����{�~�����@��G�I�j�����{�]��z��c���j��j�U��U>�D��������C��G�>���
�!���
�!��w�~����C,��z}[�{7p���{7p���{7p����z}���R�
����(v?���u������_t�����u}�����n�17��>�[���'7����
��rCx��n�]��b������?�!v�On�]��b������?�!v�On���
��rC������'7����
��pC�����!7���s�nH\��9������pC�z�;�
����7$�g�nH\��?���|�Z��w��G�?�z-����������w��k����W-��������CrtB��������\d��f�+�@�{c�%r���-�����8,,������j������(x�A	���9�Xs�H����H�zI�39���v$�h$����Os��J�<wuJ������YYg��H�;���$�z�R-P�T-\u�R�5j����n���y/U���/����Q?�/�HEiT�*��9ki+RY�PN��DB;� a}������m��5&��`Qn�'oV��]#PY��,@5d��A^)�N�R�i��~�8�R���"'��:!��z^H���\�����!h��%����RM��?�����re����6;��<{�\G�'���U�����dd`<���w�8����}�O��
�xu=U*��(J%f�������o�Z0��2��:�?�w�_���Q_���v��3U����wCD-X����g��H��|��1z� ��j�ypN�44Y���D75������]i6]��qS"�]&T@��������6#�Y��An7�w�f�	8��;��?� "�6�J�Z���}w'�g63C��_�=<7,
��G�����
����c��V���TY��E�< -�Q'��)��Zn��+Z#�}�	�6�_l5�&S��*�;�,KopS-�3
����i?y!�%�|V�]�p�B3t����Z��%���E5�(_�*t��$���w��zF?���������d��������n)�n��i�tFe�z$4�u���-�<��uT��"�N��'����
k��V��F5��-NN���-'\���q�x!V���l��D�����V3Q;��&��gwN��������
/oFjm5�:q�EI@�e���ct����~��w�lQ~Q���|�8�����3��?�[����US�Z����"�n��6��2��gL{��_���Z������E+�L�&*)�f�:��/�{.�.���94n]U�d�p(��c*�>t��6S��{�����w�4�K�,]�=��$��*�����#'6��H
G3��9���2����-�`��%��PG�����D�����GJQ3�1���?������-�GT1x'��1��%p��0��R[��VM��O>|����gE���V2l��	���������;A����D����s�BRhO���xUP4y�c�J1�-3�EfQY��3�/ppk�������f���
����"�4q��3Q'V�q�D?�|�{�������*;'�z�T����uTC����Q1�b���Dt�>����5�&�E~ �v�����N�����Yu�C�����b +ORf�]��~��a�K���^g}�Y����G�T.�1���F�>����0���|P%h1�]<���"����c���x��;���t|I�mz�S� �3f��������R�l���0z��^����/�����|V�^��V�	w�������(0�3��`���3�M���l!����3�'�y�F>��Ex}w	>���%���y`�v�Y���R�C��e��;��8�
����At�^}��<��2U�v�S�����k����������<h���2�~O�V���(7t?(#��*d�y?B�,D��
X4v�|Q?�	�/Xh}>�0��u�`0j��e��
�
���HCH�8��b��qg��z������6c;�����x����M^�����T1�Mqo?��c^��!.{�>Y72
GF���t_��j���qB��/=�%o����XL`�� ��Ht�D`�q��g!1�>�Xid�o�cq���],B[FB�����;V�8�j���F����G�����2{�	��L���p���Uk�1�����6_����I(�~;������{lB�c���S �z�G$�[��ha�JB\���	����;�Z�X�Q��[�x�\��2��|��a&�s��������g�]�����s���fM�[lS��e�$�����0���@�s=3y��]�����_�G���x�K8ss��|�<f"iJ-DW�\>x��8}���2L��k$�"���.a�,���/�
�X�p,H[��L������,#�F42t���q�ScD�Y����j�R[.��$�2`�����(V�L�&x{�C\�I����� �yO����]�
�	|u��h����|������CF�F�E��f�u��A�n�qd�spX
�%������
����@�A>68�8]��g���\��1��]�	���>t�����sw��Ir
��cV2�%P�g �5����!3�$R�Z�ik������)�n����e���K�x�	�Jx���v����$"K5��a��@��w���HS�����:����*������*� �
�E%}�5����me'PgF�
P6�dyp�8*i�Y��c��Ir��=���4_�E4�E'���u���i�����7?m+Dg~��$y`(�IbN]�K�8���f�@-��������beT"2^�A�	x�a��H;m,�.Q���C�%�!j���"����e�2N$�����j��� Z������c�A�$: -�����u�#��H���ur����aB��6�X��_F{m3+����Y��<:RU���~��{����X8���7f�E�9�Yt=}m���*�����^%����U���^%��5�3��L���ikd���H�8�#l���,�0���x&o��e_�$��=[4����F$�����=A�.�	�0�jBn��.�q���0�z��
������gTP1������pG�����oa���4~������j��sh_��mAI������w�Dd������}&RE�7do<����He���/��a�$@?�7��J��u�� m�7L{��rL(��"M��-��\n��z���m_���[�Qt���ga
�3@'�l���|��K�9�m��fm��[v���)Tv�F�V]��(V}FE_����+V}Q��.KK���`�.�`MH�����iW�Q������o���$�a�A�J�
:����s��
������Md�]v.��=i?�K��*=-�����k�O\�=�&O
���6���E�['�YI��Z	`eZ���r��H~���o���`�n��B��EhvA��I')�
�����~j����*�����d4����.H=��n��,�9�+�y*�}1#��i��|��o��	�:�5���g�G8���,������v�O���A�o�e�sQ��v~� @W`H�����p�k�BL,)�R�'�Y��TJ��.j��+ag@l����n&E��6=D>t�r��2��v�z� ��3*��>8/���������Ku0�LI�>������
T�������bB��,w�1���X�����tH>�����	%�f�;�4//I�(#�p����|x��-L��<�g��c�:�gE�>�0������]A���9�]S������L���1]��e�����7g-&�N��@6W�@��.���\&�J�������p��^&�������?B�GP�K�����y����b������������������'�
9�
��{E?�*4M?��|�H���g$��"F�[mF"���0g@'=f|��Z�rQ�}8`��A0�{lls	��H�RD~06n/��s�m""�� .�<M9��H*{w'@�S�)��(�c��?#�}�K>�S�I&"�;�#~'��*�M�.>�W)�r3y�z�]hU�w,t�Wf$a��d`������o�Wf$`�e���mi�2�9��N�)f+��k<��d����Z!:[<u.f+���r��e�bocaN)����\MZ���G�f��w���q)z7!�{�2�"*/�|Vt����3�x1�w3�M=����3zW����p�u=?��q��	x�i!|7�#�a�(�����x����>��L�f���
�W�g�t�}2$��d�DL�mP��PLcgM�O�y)��gFYf��Y#�W����5�7�E�<�7���mS��^W�Jr�E,���"��=G�,�\���H�O��#���(����=-�7)�}�����#��f�=���8����������
���jAx�+x!�
D���J�}�)�G�H��� ��m�� ��Z�O�&��-��:������Gi���z�V���Gi��X����a�.�����'�&�[�{Aly�e���+�Z0%���I�K��X����g�]u,g"�~XS������>"�-�y����3�P���9:��� 
|����P��&*��������!�C����	pc��	p�'1:�3��w�E���q��~Q���h7f7��,H��������@��K�����if^=����E+�Q�}���o�f1�c�"|�N�{�	��7��L�xW����MA+�S���bi3iH%r>�"K4\OO���h���\+�R���>��������5�I��C����m� -P������N&�\/�ME�(���
�;^k����m���	�P���F�<�-$f��Z(���=0�n�y���~�+��]���VQ�DC�r[��c1����<C�>���?GD�����b�P���l\�� ���� �#]���pQ���^��!��,�����U��-���n*����_�^�H^��;P��m�x�U{������5dDsg�(q/���T"r���|�z�k�~�k$06(��k��=���H���N������t��p��	�I�=���G�����~sre
L���@_��]����	:��P�������o�RR���*�e}r{L7�K��S���Y7�)\��R,�]D
�{�}|K�s��V$�yh�ZV����7���������af?@-������xu����v����v��=k7���Y��LP��IQ�U����;����G:�`B|8�D��3���a��G��($Q��=
*����������u��3V��Z����kV3��J������f"2Gr��Oe��+E�;���vB�e��?S��3��tf����*�]���+�4���7�� $������b�.:M��6A�m���.�G3��S.(bD�9I*�1�"��Ki�����?Y�-
w>I����|������������c�3��*�2Z��0�����iZ��QL���/�>�����L���f����E��z-O!�/��;���c�o��Z�7���L�J��
�7�9=�`&Rz�LH��}^zIs�U`FQK��I���z�o�(��8:l5������x��oA�����0��b	�|��b�� �Eov��,	}��%O��& ���7?�=�2�*�^fB�7fn�?*��������os�x��ur�q~i'i<�km�@J�@�9���V&lS��b�t��T"��c�B�X��sn���	�Mt
hB*��OP���X�����b	����bdA	�S	`����&���M�ZEy_�gER���&��<~f �e���mg�����,k������)
����DB�����mq�C"z��	������MA�a3~{�Ta�%�\�+�"�[��T���3})�����Jl
hA���% =�p�w��|�.�����DK�-�'��7VA�$NH���#��t�������������5\���do&zX|��ja;�.�C+Sp��u;G[�QK�+@����NJ�cDo�q%���;.����������L�~�p=����Jx=��o&"�|�~a"��';�e3�	��N��rp�g"?����c�q����.H�����n=��Z�w&���a����2-�gF!��d_��n����������O���sP|V$@{Y�u$�y��gFh_}�[�H���fB��'���2zr"�x�[O��2�&z��rv����$7<��`'��!�,7�3*@-�m��y+\f(���\n��'�YP���N����g!��7d=�P�S�����'����h�w�od��^t�J0m���|����=��8%3.�^�h�H�������bGq�g���G��Q�i��!���AT�:�B4�SD����Q������P���	���Ng����l-s1�LP�;���|�	%���D��z��,LK��������������Y��z,�2��{�0L�?�������}�q��kA	t��8������$��C�
�1vMH�N	.Fy�b�����{�X���G��=b����q��6��JDV�[*@{����L%.���e��;���9��^{�����5!���?�Z#���D_N���rm��������Uc����h	~t��
����c����bz���kU>�t�K�1�l�}��W��v�����?6�\Q^��|�h��-5�;w��zn������q�^iG�Y�h�]��=������HZ��:�����������b��&�@�0����6�M�u�pKu��z|��B�z:&_��u+���=�n8����\W�'e����;M����	��d�������fd��M����}3W���0���IG���!��t����|� �G��n��5��Rvq��k�3�	��h��4����lW��"^8=���-hE��|�[2����Bl���Mv1����f>y;�|��VH����6Xj>��,���$FO�%��B��@��Y�r�a~O�'s�_�������Y�r��@��J.��[3b����O[Y�U����x��8ch��l�=�|��M���Dw�f�r/T�n�n��@�:-(���Z���������|���M��������l�2&	�l�e[wrf5Y��6(94�XI�g(��<�J8s�����i����l�����}�$@���\;�H�6�����/n��'������d��l}��!�����z��g"�k�&���0c`�.59�1T@��
�x�b��H=�Ne�xn����p4���Z]-}�f�hA�m��Y��8 �-,��~��VLg����E7����������A�����RA,�0!u��[�6teY�����dX�'�p�)��<��|1��L s���t3S������P����a<��*�������	�S�f�.)�����O2�F�'����|w:'l_�8s�\�d�	;�!��H��kw�3���F$y=�T���wq�]qP���v�m��e�g�g6kA��wv�z��>��JU8���!p����~�DP:{]��I�X�2q3��s���{����="���L�s2l������{�������_A��
n���:u���k&�'�P�	����5;�����5k!���r%���X�	�LC����<1n�Q��d�}����O*�a�6�es�=�:�4,�4w���S�2����y���g�����{E:)<Bn�6�*���2Qo�}�,{�T�<�,�dRpSE��[*A��"�""���>*�Dp�I<R]5$#�[�z@������<�J��pV����g!���
48�����Jcyn��t^t��b��n����S&�o�,��.�Z#���6m;��=7�5Q�
����%\D6N;��XP��7���;�������W�n>�������iE����R40��_>A�x����zK����jB���]��2���7������m���t���������']#��M(by{���1\�M�p�����52������N���c!����'@�������;G����M��4I7W�a��^�i�<o��F:�j�.��2��8_�!i�T�vU���A�`�XtF�
"5�!�D��XP�D�/>����=�i��	z��X�/�MHk�}�':�M�&����`X��Pfh����a���'3�����������yF:�:���`r2S�gaY_�u���c.�����tB	��v�����ds�w����NDdxN&��&���4>fH�a�5H���$�� ?���4+nJ'"2�����D���(�R������wfZ�'���Fx+��hb�D68�nI+x��{���Vl3,$���I/����F��LK���UhIg$[���v���,��M8�mb��U���j�a��,�DD�	�nI;��I�tF�+��`O#�ga��v��g�tA
%��%�W��%��������0��\}�"�y$pn�l~�`��f����5��J���}/n��[8pV�R�z�1��)�$�%C�����deV3��|�A]����fP��]�+���1��y|%>�J�fJy���A���W�4�3��Yy"���1)����,J��}}�]8�{I�!�N���^I����$��g>�J227��e�Kbi���|E3�\3��d(j3����0����I�!�D��-JX&Q��iu
�
�9I���*�=L�n�]����|�TLN��*Wb�`��gK���|��2�;������J+���>Pl[����C�!����Z%I>|b�t���$����J����j��"�?4�/�.��QfbS(y�F70c��v��2�?���v�Y�c����[VA���;�L��������������O��8����O��th����(��|��<�4����_A>�*(���O[X��M!D�k��<���(�m����#�&
���x�\y��`�y�p�J�6�d�Lv���vB\
��i�V��u_���'N��mN�{��<�	�S5c��R����B�1o[�#�7T<U��Z[�N�(�e�P����#iP�.�ND=������l���*xXV��{,OBP��t�d/�i&k":��
6s6{��������L��qf_/!�#�F�o����/�*f���ub�[�z�,��av�w��;��K�7u���6|t��7�1��E�������<�h�;
t��N����5�;�����	�|���"��yS��@�{�V��B��T����YEA:�4�����)��?mF�!�t�+�j������a\.~f �{�*�F�����B���{jf�b���9i�zl�����ya������f�	Q��q}}z��k��L��osJ�v�+��Y��^���9�N�X~/D���W�8rHB�i�{���mpl<�aA7�.3a���SI�':�x�����@p�S��yXf�&��Bx������s��O(
��[F��N�����<�>�e����[���smO���K?�k�d;�%=��hi�|���y�' �]���
�K�����[m3���a��/l� �-gj�x�w!�/���*��{� �����s����O��tj�s�T�	�t;�kD5���b�l��d���H���\�9���a~���u��z�=m���	QY+Q��h+��m},����&��>��@�o��)�+�����oN�Su}���eNd"O�:!�'���pb�U#z#��'
���S5���8�Y��}?��
�-O��2���M{���D�OW��$��v���U��:�3����~l7��(,����O�����N�\����f���i�-�$���/	8LYw[2�W���b�B�.;�Q/�����v��I�}
1.�4�����>V=�%��i�V=8��3�/[���;�|~x�&CA6f�}�u&�4t�<_	�.�YX�����r%X��[G��:d(��}��$��.(V���p���������
���eLj�*��acl^BW�%��beH�����7:_�^;\g�QY�zsp�Mh�m3�D�$d&�I��qp�� ��F
��=�N��/_J�iY�9���A,�����#��������j��8<������J6:����`�C5Ody�u7/������zR�������kn�������Tq�b����IW1�����������������*�]�]�og���^~�����G���,������[���(����������S�=�~���G�[�;E�{GN������~)����5������M|k���&��|~��o-������������3���~_'��_�_����#�c5~&�2V����]���|�_�O����~n�cy��?�/�f���?�����������_���X���������'��vK�t�ru�+?�����Ks��j��Pz�+�Dd��1��1��I�@�����w�����#��?h��H��t8Qd�����vf^�D���dK�8*�n�:�}���nx���W��b��)l�e3����"��H���/�r{���������&K��)�D
m�3�|����|�%)���O�}�SJ�5�;P�":���	V2�\��>U���t7���$)bf���]v#8��J�7��=D���dWs���IZ�|�dc���j4+mB��KhO����rC�+YOZ�zv�j��T5�����$pZ6�@���3iX�\��rLH�v�����E\��j4!�Q�?H&����/2k0YMM������k|�=�������&l3*�&��^D���|�F�oC-���6� ��D�����|����?��X����3��S>�q�8Q j��E�.��mw�gr��Ntp��}3/������v`g`kR�����*����Yc�B:�w��$ �C������hq����C��c2IU�3
�hA�LU�Q}��w>�����Z��o�=��c�����p�����
��m�[��$o�~�y���)�&��G+����UrY��KMH�FY��C���$���U��@-�.�)�z��I��p��|Q3��,|����8f��6��0���$lZOf:�u����W����I�4!z��-�"?����	W�PSW9�Q���_���qE?�D���<������0wH�{��q�W9!��xj%�?���qF�E�h�M���� c��'�
Pm����
$0b����qFw�s=�M����3K�U�m���t3��FwB�aFw?y����u��<RG��-��F��Dd�7�-��D�h�-�a�G[���,/@�APs<nXv��&���Ef��(�j;r8N�)�F ��[���c��b\�g���'9T��+I�=b2��L���5�=&p���	$1J��iC�^g&.-�/���2���V.:�m6)����T2-�����8�`G�LRk��[[[{wE��7�N��BF�s�H���\R�n��f$`�s.�m��@;~����!��:��N-�-��5������g����f�wj^�|H��
�s��D�lO��}phWL���i"����3$�z;n�x������J��b�@5������</I��h11��������h�����<���0$�Z�u���.l@[Y�X�m������d�]����;#8O����*��P���<���INLw�wbBM��K�j� �{�3p��"S����}�r\�����x�������ga
N�sI���b�\��hs�KXc{�s�V�d�-����,0�@\��o���i����J��������H�%d�Y�*.�D����������M`S��3���L��>��1�����q������J���<�������
����`�_mFYV�n�n)�g$�[�WTp�80M���L�s,�q����\Q�8;F9��	8���q%���P��	%`������|[��y��O/��4��c�����<.?���}�����Gp��HA?�c���*�P�)%�U������z���&��(
�����=O��e\����L�����7��-T����0�
���l�`"*?�����t����	�e�i�	�%P2H��2�Q?7���b�-z]��y������Y4��X�,��].3e��1��U"��7z�k���W��R��
����24b����SpZM���Z�Dn��&��U���g.���k	�����9�I�U��Ne�Nd5�j}x���E�co�R%(�U����@��DDv7�[���J�gR']���X!�p�{��d������Lv]2p ��������E%�J�H@�i��=
jR%b��X�OwU-�,F���P$�*����X3�������5jtB�h�����>�.MH����Q
��		��b�&�A������0d�9�����f�"�1����&r�#&Z�L��g��"�:�������u������������W2�"��LN���WdQ�� ���WLD8h�|�iN��f��=!�,��~�A���#���#���Sl;���;����I�,���M^!�������
�\x��m���w:.�����|�c�^��u�Y�5�������w�7T������me���M������*B2��W���NDTw<{�-d���,�������2;��l\bUt�
��.{�U��F'm,bu1e�D����|�y�e�q�J�]���d5u��R��)�vkB��.�����"khz0�9k'_���D�k�}����'���'C���� g$��hl��|�(H���;�0X����E������������p��Z#�l��7�*�A%�4C�y|}��K%!�f�=H`g�,H�������8!rqHI$����xb5����$����'pWE;���h���'8�j���l"��c�
[�I��j�e���)�Dd_���xc�{wL�	�� ��a?��MH��y�l�����@6��
���b��������*�qUX���0�2/�f|N�I"*��xn� G����&�:n� ���T���r��� ����J�����-YK�6�m9M�2�lii@Z�|���*[��zQ����\����JD���t
}5^0�RmO$�cm:�Z��q���	�L7��-{��00�T�i��m�:P&G:sT8op��%`
f��H�� 5��1Y�)|���5ym�����Z�����9����R`���lc�K7�Q^�)~�F�%��@�A�c���1.���;U�O��@���`��X=�lT�}��,.���/�q�$��-�Lt&I��������s�I�#MrqV���@FeL�*�|t<nJ����/S�f���0�|����6t�����4�}�/+1����V��J��2�P�L$��h������T.qK�Cx��0rF�#��4x��ga��8�������n�otq����&�Dug�d����W����Q�P�fV�_]��e�x|Y�;��Wt���!7������������������n3R���E�����D-X�{���&I$���	d���=V0�����L0�I��p�/�"��;���F%��s <���r���;l�#���-F�j�g!"{X���=�'�G7~/D���[�QO��EK����#�Ge��kA	��_�f�Uu�I7�-L<���7��nW��;��@���$���;}�!���^��.=��`�f��������7v�/(�Sg|a���h	������)U�_�`���X?
�y���G�H��:��}��9>ofY.T��)��}�r�ul	��=c����<�3�y������� %6Y�M���2�W#=W/50������si+��9x��b�8Ln^S�|	��eMA�����0	�gf���[	��frBZfa�w��jAr��������
3��~$���%��^O;o&"#��v���6����	���6�'����n8���,�u�h����,�.&�gm�>����\��
��`��*.R�'�p�q�_F����_�=���94�;#y��}r��x�����g1>.����SbAf���/����)�@�K�P�=/?�ZP���q��'�%�AC�}�GTWQ��������e��'5��:��f�VQ�z���X�7����&�HE�X�����@���q_��x^6Wx��o�}���`$�#`������H����Y?�[i�&��������o�b�*}c����nSR�p[���q�GQ�-Z�SDk��=�k�g�f-�q&����:z���z-�)��M�o���+��h��Q��F|�EN���
���/<�sB��4F{��� m��K*hQ�����_��$JG~�ki�TR�)4F��2��e+��!rF�k�f)����{'�Y�a^o���w,��A+QC��J�����S�d����{c_�������Y>��_���A������3�M$d�4D�:���QD-X?��v�000�$o8�Yok!%��c&^6=8Kt�7c(_��a_kX�jE���e������ ����b������Z��	��Pj;�}�`	���3m����N�	�u]I��E��f�����0��,��G�i�{�f�Z���e�E+����6�D�"D��A"6��������~������Lk�`+�?_��%��{E������mF� H&�7*������}-�*��!'"#�Z���E�1x�D��c!e�)��|�D���i��>p���m�n��I���������IK@����4^�3������]��9>;m9��"�K��}4|j����A��_Ah��~�cJhN��l�+jIWp_B
�M,]��x!\|��
���64����@J�R����nw?3��������_J3 {�w[�6�Qed���.��h�q��4����i��$d,���uSf����kv1~�j����A���RE`M�����=�e��ZH���R������
��4�"KTo1�bi��bj�����s����N����,��?_mF"#�o`������m�+]g<�gQV�[X���oo�G��[���$9��=���(t�y�]�(��#����C�N:���'���;:.��qb���������V�^�� Z����E����C�Y~�x�!31���kZzd�k�3��EY�f�E�������+;��[&1��������0�:GVMI��@'W��`�y(&��H��Ej������D��*��
��=f��U���O��s���g��^D:I���	������������a$����ta
9���!���`�����y!z��w�����i|���0������v���#�t�y��C� �0�����>�4��+<� ����6��ll�eX���������?_G���K�R�>me��h'A{Z,�|����5LSz��%�U�����*��}��zYe���Vg�����#�L���I�_���5���q�E�+�eus���.(����c��?��h��W���>��iF��h���I�fXP�@D�����Ut#��$��7�M��i����[T��1�����{���m[�a�����Zg&���2��� �f���P�0
w�����E4/�7]m[t���S����:�p\�����f���>�=s������#�Q����,wzJ�o��"n4�e��^v�|(���Zp��	���j�Z�d!��B2��cUd&�
:5n �W�+��R}"g\K���Si��5�{a�.���|�*Qw�����[Mo��_0���U����]\��l7��������p�/�����S���|H�b�3�K��;_�G�x�li4�6���T�Q\<�|fakp�#��90?h����mX��C(�CP�PO����q�@:�PN��&��I�����1�KY\)��q��JyF����i��yy	���� 4����{$"]4�����]M�p��BgJ.�.�hb�'Mi�5�F
&&��yALWu�M�����H.��3�5��b#�������1&���C4]r������a�IFp1erW���UP�?��C2��(���x�c�go{N"O�|���EyXM��+�$%��r(�/������_p"t���WJ�>�M��|�bn<��B�>���lc��dd��������G7�v5g�}\�M��Z�i
�����Wu�$�	���X�"j�b^ 
���\P����>	>_�*7�0��k�yHO��H���� ��`�-��T�7F���T)P�z�����|�#��B�o���B��K�����]?2����ko	�f���O
�����0|��1���TbBx���[2�Q[O�<�t����%�<����mp11��v�y�x2v2[���lm�=�g
�����f"(�����n�]7_.(�����������W�H�d��X��N3]��hL�mz��F�>hIx�~jw>���.����pj�.9��'[�NY<`������DT�p�q��_=+H�In7�����_����hd�\eL3�� 8o�-X��bO+r�J�����e���
�������������)�X��)���t��������ITM~�K��/�"��#����S�b��4��g!"�Vu�����k�i3�V�^]�q�7��f�\��9QV�e�r7�E{xK��H`�x���T����4G�</j��M�����H����h
�#��LD~�_EU��C�>T#��}X:�aO�a���6�R���x��>��'w��@�r�����B�g��@���w�����u���^Q�C=��
�V���P���k.���*���D���0v����{Ay9����18�/(�
$��Q����=�����k"�,��G�B���2	���
O=���r}W�!�����x?��kcS%�._V�W7���H�Cw�P���vL������0����MGY���pr���������	���bB
Df�������LH[c]�����AU��]�u}�=44��@�yAZh��\kV��w&�8�I>�aK�����QBH�;��*[��bw�z�q��M&:^k�����u7������s�,j��a�b��y�Q������lGA:e;_�o�I�����$+q�baR5_,��W��Ybe���LM�����!���
���3�J��
Z�J�u��wV��q�
[�Z����]0��������
7A?&���Y��ql����Dd3�Mt���^���-�A��#����,��/8rN�	3o�=��v�g�YK��P��o���i\�����0q��U�������`��/���8���_����7����	�{!I�_8l�x�~v0h���������d�����EF��	� l�~Y7�D
�e2�������{!��*�3W�@�w+���F��~�eB-����4�p��n+m�7m�%����U@�`�������:D
��'{^��B�aa�B�����Z�W�,�������2�E��i�~�"v[L
��x����������~[�o���t�O��m��#���z��Z=��1*��5D-X���v�m`'m�{&��7k��2������r�V'gQ�T�g��.���Z3�t���i=�_�3����'eF�oC-�G�<R�}V�o����<��(�
��{L���|\l
����{EZ���gY���p��+������@�xr�-,Y����������<<w6�'7:/(
�I%p �|�d�2y#���yM2��mAE>J��r��Y6�q�0�������L�x��u�-�C������To��>+�W}Z]����d��\F����/����W�6��I�-����pTX�S�b��������z�������O��������x�D���8�������V����1���� �����J4._{{x~��Ue[�3����w��2)�)kR^�*^T�oMU��WdE�5����.����?�gD�K���c�������y���?������������(�����}����b��
���7DM'������1��|������{�;��wM#WQ����m'�a3�V�������6(��1�OfS��g��H��9�7,�	xN�����
�.*@&�|)��3�*��}v�*��yn~,';���{
� �yq7���gE	`���	��._�a��
+O��8�(���gE��*O�_aJ����l��a[��k@8y"P����������L������4G����������d&��e;P�w�h�
k�����6d��}�V���ma�4am��gE��7do��|h�/�QA����
T�}(6�,�<�[7����7���F���09���J�����Qo-�^��UV�Q�F���C���_���I�����z!�s)�9xd�tge$C�g�ZM�������&�F��Y�%_���dJg�M����nK��dS�i5����$[Z�~�qCz����tB�����WCz[C�!-H��z�%�'�
i%�<j�v�];:���b�k����=�'=e3:#~P�29a��NDd� �(?O(�tbY`OgM�s�;�X�H�4�7�E&k:#���T��������X�To;N���}��u�0��/||�g��IK�����l����w�t
k�e�T�Q�jE,�~d�zc��VuB��VHTU��/_��������`��vMg����|����  ���'8�V��"�+��Z�������<3��a��������YEn�lU+	�l*N8��e�:�V���7���NHs+�7y�m��NH��<�����Z�E����V��w%�:#��o�_��e"!���-�pD?FZ���a���[��Q����>]F~�k�Z��|73��9Q�^�e�jj@�Z�O��7i�DZfS����I�����E�laQ5�*�]�iLu�'����|��������A��*W�S���	s{:#�������oBI�=�}���X��8���i���dMg��`�#��k�X��Sp���}�N����s:�f�5-@��fL����bKmfl�t���N����:j������V��1��]R�b����2-O�$*���`a�g�����U?0�5�Y����.�Lvs�p��DD>��~�|37cEE~�zG����a�h*�m.]�V�sL��+�(U������(�k� ������[w|
���":������G��H�)��L.��"h0��A�c���Z��h����z����3����
*@P����InS�_	��� �>&`��m������V���	i���-��]jX��s�g�������1��D4���5��W�65x�Y��f������������<{u�fd�Up��GQ�,>��?s���q���{������T�������u�V�M��f]��wvK4��.�����0!:!����6�!��
f�B*V��:�cg����o�	`�4�T�+]�������Y1�H�:V#a1F�29�(+*���[E�~[������+���o��Z	*M�d��c�{r~1�4��>H�-Ydt^cI��L��?FZ\26i���_����B�N����r��5Ok&Ow���$_ �'������f�,�����I���&t�4�"wN�n��1U�O� �x<4d��xY����E����~t!��5\�L��qS��g���}BZ�[JfS���q
�j�����L�����_�J���F��V��%;[V��<#��x���4'����,��&�$���5+�R}F]���V���J��I\����Q�-,����52`S�O����3��}-Hn���]j�$�b�&�I��*�����0M��qe��bL�'��w�=����e8�Y���i�b�QQ���2�dl�b"��i�x$���j���V�OZm���yB7�5����p�g$�6�9��%B�\�G��k�t�����l���"n���u:s��N%G���g�����s�M�n�Fv��L|7'h�C.gBl��D���g!"�����=8�h��n�+;l�F:�n++ ����@{R&����W� �8b��@��4��������`��w��4�]�-���X���F�WT�m?	p3c��=6�Y�c�r%�wq���vX[0��H�}�e�&V��P���������W�a��\A=vaZ5�"w��[S�	iY6�.aGv������4NT���#����qbA����N(�Q�k�i� �?I��Y*��ds��]
�d��l�����vB�8����d
_�b��/y�W�"�I%"�J&B��H�G�����:�k+������A����Z�g�:�4���hl%�����_�\�#��\5G����"i���#/�!K� �>}P3��fM��������
�h|��4!�=�f���9K=����j�b#F�*��~�������dUVr���yc;�!(�y���B�b-s���wj�nN��j�c��,����^�����X�_�0���`��c�^�����0������5!K�V�������`�>��{�����cVE�j�8X�:�`	���6��@���/�G��L���66��4!�y�:����Y���V�U �1�*�=�����8>d��(]!Ms����\���[��IF�d4�j���y~��{��f��Y �d���'
���1�rft�z��?�i�I�0?���5��BQ�'"�� S}Z$T����Ea-:2}z��B�<l&}1������	d��x���s������~���G������*��9y�7�F�Sn������j������^H�u��v9�dz�,H@D	�ga8[�YV�	�Ip��q`�����L@��5b�	���V&��,{�JDFv���=vDQ���NM�@��m� �jB�'���O�V����|� �*@�P_Y��rb:UA�Q��b�!� )FZ���Y�~�$��O�h����%�]<M?^�D?_peK5�	�&�A�����~�nKjA�����������Q�.���%������0�-bA}��6	�<x1H"����cd����/�>3R�W@O-m������f�7�u��	��70��(������T>&y�	�=$�~ZeMbG-.�����������@<=6p��i�����ts��������|Noh�
Ih'���o��^e�+�`AM��-?z���+ �Mu��&�(WAEF�=�i�<�`AN_YC�=�f���-H�H34y[s�xv��TV�j?��������6X�dB��Q�iB
�'��O_����K������Q���_]�li������Z��U�W���S<Kdn�z���%���R�m�{V����k���O<�|���<;�d���t��kzR��(Hs�/B�)�I���M�/�"^�h{	���#p�]���oc^YcJ:�����|��3R04%�G��*�s�D�7��������d�;#����LD���.OJ
��V��CfA|��Ls{��fF"���uBd���PF�k�=��S�f$��u/�uw�0w0��X�)�O�!g���$�������z�d��.��x�YC�V��?ai}�2#8�6H����p"���j?��e�����*�^��_�X�*jJh��Ww�WY�`��w��(����3�Ls�I��
,���.�6^�v�"��Y_��gv����t~f��EJ-a�"���pc&"Zdq��n2�g���pzK�,��U����m_|,cp%��v����SQ��f�����1 3Lo��0��d��nc�c)1g��&7S�u��'fD��v.�+<�S�����z��}�7����M��K�7�{ ���%�i��X�0�Q}*�M��g��T�)�*���nJWP�����B���������jBe��be���� uGlw�`��Vqr?���6l�~l�-�Z�������;��7��o$���O"�^/H�����7M�}@b�L,'x�� s{�v_3�F�t��K������hU���x�"�kOuG���>F��n+���z�I�;O��y�������DD~8��6<���������&�Oe��$h~$rie�W��{�'`{�$�fk\����p%Z
�VV7�+1�|��6m��)��������LT�����j�����W���8����"��;v_|�|�6Kh�]�y��U��� �I������+��"��T�V��8�����(xv�a�E�������~~=Nu}�u���}B����]/8���c���/�J���.�ej�.��/�c�@���T.l��t����}��:��1]p�����.8������$�t������/�c��y��3]p����/�����m�`����U
Y/����C�G���!��?�GPLo�;����WL`��b��y��CL�z�;���Z�w.�[�������������z���W��09_!��+ �+��^9_Q_��t�>��>������2���I����
r�>[�x�����������DB�
��y��/8��HY��\�������^5��5~��J���a����>��1B.=����|��>h�Q"]q,W���+|���D\�F(�c��G^�#G*��|������:X�+���c��>z��"]q,Wl�Nc��F\H1�c���^�CH3��\�1���k�b���k=�^qN���t���N����O����O~���On
��G����'����'��������'����'����'���'w���'o���3c��/c��+c��'c��#���c����&�~�<���V<���{K�����%���{������1"���{-�;����{��U�%�1����W��|E}	���mInL�"�-��IW�Wq9���w��w�3���H��'(�6�T�!���_��xrE�_���,��Vd�i���:i��+�n��%��t��*�%�����$@���3���C�Q�+�$��tfc\��H�<Jn}��G����H������[6��3/����H;J�!��x�T��O�r du�V)�5D��M�	�o\L�U�`�/����n�����PP�
�x��K�gF*kb
\�����P��xw���7;��4�����o�>��/��Ae4�;��S�SvH4�D�c��K��D.^�
�/MH��g�Z�������	8�6���]��r��{'��v�	�&��?=c-����I�o���,2���`�}/d��u.���`�=�����ST�N���Z����.8@��$�����_�s� ��jsu��3d�F
f�H�O�]i6]��]��&�eB�����S�Y��Df���������,hh�(kWK$D�h#+����3����L�>3�h��!w��d����/F;3Y���D�����N��<��!���%���r�(����0����`�3���l5�&�����;�,KopS-�3
�8�~�BK���H���2z�&���5oj%/���2�!��@����-�z����w��������f�5r�7��o�$�~��[V�~����h0_���K�{]�,Dt����q
g���k�RO
�9���/�~[Xv��:8Mz:�8���x!V������N7�y�}C*�����v�cT�CE'T������/oFjm5�!�:q�EI@�e���c�������*�+@��_�wz��/��������AL�bR���M��{��i��dL!����ien�BA��i�����8��V���2�����Rp�v��{.�
����D��8�v��2	;�2�C�o3u��7�������w�4���,]�,o�$��*��_(�GNlj����fp��\�A�y����9�V���^������p�s�l�}�V'����0 <�U���}���GT1x'��5��%p����a����L{����'~0��gE���V2��xr���Q��:���n���������m�g�rG��]������ ����
�&Ou�op>�]��������ZP��w��L�o�H�/aE ���#g�N����������{�Tc�v��_��8�����!�2�gE:~U��wmeT�����D�����wPn�^d�j���!�>v���|���Z�f����2��R��;w�]�}����{)�ARd�Q��S}�8�tZ�{��p;���|V��*A��L�{��R��Z�w�������o�Nt&,_R~�^��i[�3�Y}�>������k��}~��Y��5���2(��>+R/j{+�����Q{�@��O��Dw02hE��&J�?�)@{��(=s0�gs�qV.��;`��'S��`,)�y�;�&���CY)�����L��wo�
���R��/H�U�r��r���r�E��5l���u���	N���mo.���t�iUH���R�J~PFpxa���)�&�q�c,�u�tQ?�	�/Xh}>�0��u�`0j��]�v�7�P������o!��4�d�SN/�������*B'G���T:��{���|��['���T����b��������y�.�����d��(5O
�a|)���^�	���u3J�	�_������7�Y�����?r��$���O�l��u,���E+�-#!�^q���s6���D���I>l��d:!bS��%'@��2q�����^�V%j��Ev��/��s�$h���=_'�c��d�����="��VDcV��$gNV�D���Z���'�l����[��127��t.�@v�r����L���c�Xu�Z��)w�m�B[}q�Du�W
�`����n�����|�H����0�������.���e��������)�]�q����J���D/��������l��S��X�����/�J�<���2��!�/��#/��tl� :�B�����P-�~i���[0���(�\r
�%H�e�i���aE��f��5��S����}{�� �I���|&@G�%��i���z��9�b���g��q��{�e>E����u���/I����Rsx]��$������U����g���\�a��]�	���>t�����sw��Ir
��cV2�%P�g [������H�k����v;nxFM	v�t��o��;m~A���&������>��R�"k��n��iB&�`)���x���}�~F��Q�R
R��7o����X�9`t����3�O(v�<8�����h��'�im�pI�<|�W�Y��N�5z��M3j����7����Nf�����&�9�D��X��H�#�zf_W�`Z���5U+����N��<�%��v�X]�<��EG ���ZG�-�8�$��pS��v�c�h�*�V��������@��^v�Q����"�f6��%��Y�06#m�<
:ZKO���f$2V�;F���^e�}���Mc=Y�eUr�0����%aRb�b]O�s�����;���~I������_�~���F�wX��I�Q4�8�#Y�6��������q���	�d<�����/��p��v�oepx��T��	��wK����&�v����	����;�0��i��}F����Rm����]a�&"��%�.�#��������*����@�����/��I�}"g�d���GB��������TNj���xa�y�\X�	�S������s��/H��
��d���&m�{f�>-����EIu^�}ARn�G�=����)pO��(��3jh��M��O%_��������
-���:O�	��2�E��*�
�>��Z�Y������K�����[���L�
�8Ufa\�Lv��2W��^�1�f�qt6�Y��q���G	���Md�]v.�����JZY�=(-����>;��>q	��<5�4�/
'��i>`��1+)�X+�L�`B��mj/�
Jv���`�n�aHB��EhvA�����{�bG[Y�]o;��
b��k2M�`��@�-���|m3�mN�J~�Jc�G��y���o����*pB��d�Y�9�x6~���[Y���������`7{c2�#2���m�Q��v~� @W`H����`�w�T��%��f(���H@?|�k�y�_���3����Of����"wt�":Z���v�n���[�T�
~�@����V{"��(�D}��R��S��O��-��T�������bB�g~���3�@s����:$�����m���n_������%�e�������/@���i����tslS'����g�����V"�+hAz�wW��c~1���An3�[�${�2��ga
�����m'�L �+p�It�zg��	���i~���>4���a�x��}�Gh��r�<qc1<�#q�A�~~C�p?�!������=�������*d,H\���?U����Vlr_����8�n���Gs����@��}j��E����b�L������?��v�� n/s48����{p��<�4e�(;���x�/O	����<��H@����.��LD�w�G�NQU"��]|6�R"��f�X�P����?���i�2#�|%�������}c�2#�.���fl��+�CM����b�R�����J���������'b�2-�+�^&+�6v���rim����%��-z���{�_�E�nF"�beF]����}^$++�����H�4�D�7������^I���eD����w3���B�n�G���Q��m}� ^E*�z���RQ6�doFM��~�L�Ig
�'C��=z*i+6DQ2�=�V�w�����"��f�e�`��1�	��[~�Z���-H���6U�uE�$�]��m?+R��solDoF|RwY�^EYF/�i!��H������|7q�����cS��y���<g�}n`����������m}��~f �-7�P
�c��1G�H��L�T�,>� ��Z�O
���[ZYu,=�+�?�����`�|��s��^����O��e�v����|�|�#��D�0`���j�Q���#W>����#nTn���W|)iRT0�y|�.<38�o�CN�s�0�����3!:V�@m����7$��=�Rdp�~���������m������	`�>�����c-���a�5v�Rc�V�bR*]��7� ����b���]��7�D	�|��b�3��V��"�����V�����������,z�
��y3!��
�c�>/�AG�_^]pI_�`�4�/~���S��	`�f���9�G?�����tN3���p#�=���A�K�t��������1piV48��}M����d0�B���#s���
A�:j+@b#oH��X2��n��^�^�0iX�^/�`1�%�\��C���X, R��-4��f��;&�c%�Y(o�G�M]]|,T�&���g��ZL�����Z'����0GOe��������OM�+�V�}�,I����^�2��	���Cs�O�i�+�2�'�~1�������8j���7���a�����CI�
f��b���������t�?z[��;�������O@R������?t���5B6J�A��l�����<P��	�6'jC�#Ne:�=���e2ghXv^�!��&C5�������� MC�S���� �>����,u>�����O��	�e�3:�.���`���6-a�[3��:0�����'|�|CV�w���~���FT��>�7Y%���a6�Q���1)�����f��'Mz3tD���@�
���]3�{�]�����Z��n�10�}��x���
�+�e������V�i��Q7�P$:�
��� ����#�����V��h-��p�w�H��S���j��JB]��6��{����������9��	���$:���E#��f�Q��-��C����;�$�����C���Xr���J��Y!t&d�4[i�t/���"`����{�,��E�L�zq�� *J���nGx��e���]?or�D2V�M��h6TR���O@�j�P2�]_�ke����"���(���XI��8j�#_���3����
 4���7���s'���@n��l���S�A�`���&=W]�fB�KwG������L����$��b`+��v��N5��#y�]��G��t���
�B�5���:c�������!��6���/�PW�
����-B�~E	cJK.������9�/&�i���=�eP+���'��2j2\dx�C����eV6$�<��z��{�PN]��S��_��	U@�,|����j��u���"����[����v^������9+=X�R]�dwi&h/�N��0A>Y��m	0�N>H]jE+o��N���"�XI�P�<����Pj~;'C��9�Z��I�g�w�0�T����3�|���Yu����K��,�K��[
�8��2S?m�����O	Dd�
�X��S,�/�!����T�loQ=mw���~aB,���
�]oj��i;��K;)[�����"��6>���gCh1��j��������Fn6�M?mI��	�c�6� ��w�nl�����
�N���6:y�wS�������N>�����Y�l��5���,��7�e�;��%�5���,Ia,�?:��� �Nd-����;U�?j�2* �>�Q}�[]������S���'h�����@~��#��f�d
�@������_/���d���B��9m���&w�y!�A��Nb���	`��Me��:�������X�.����v����^��1���D��4S��2�*�3��'9_F�s�'���������]5�TbB��D�Q�di�J����"w����=:��(�x����w��|~az?��{�a�����T���rSW+3�K�lQ������nr}�U�C��F�������6��[��O�G�l%1+�����w>�"8yH���2��
���w��������d/9x����2��ey������_���,�o^����`��[��.^�a�t�����_����Gl�dp���))0�fu��!�q�B&�D��o������o���%oA�gk	�8_��`�����_��G�fuO��,��8�\il������oj�:��
�D2v��
pH��F�>g�@��1��\<vW�����tu65����GPq&DB�>`�M��br ����b��;B�{M�������
A�z�p��:u�fC���{����g�8��Yu%���F�����6b����D�WD�}��3�P�9���P�=�.K�$�����/#4��aG��]��x1!�]������Uu���<j�x���J��YIh���y>j,7�b�}4�����C@g��Wg���P�<5�/�	��h(7�Ow�9�yf����3��$����<|?
��9�����$<dSl�%(�f4���oM!�9�<���q��Ld(�B�kV7�����3���,RwI�q�5
��o)�����9$!�Y�����Z���u�|����
A���������N�����'<O
#4���3��8����,t���y���j�����+*���DY����wR-ZY�_��edF4%��_�T^�Z��@}B����F����p ��t���U�W������������<O����:���(��\r�z�r�|~az?��|�7	��X�@'�v�I���v����~F��+d�0O���r�a�j�����,����H��l�G}���E:�Yk���(�:��; ��"L�KV�i��Y��:Kw����V�s2��}��g�^���V5�QP����c/T-��25�SF���EP���Nb�Gf�n�,����@�Q�X'�k��=C���Z����p�:)�!�@�E�b��$��M�-�#C�y19�b�?�R�c�������������c��Fc=����e���hk������mF�B/��m�������"B�^�/��h��GA!��[�\���g�����-�]�6�@pD�������E~��.#��f.rD`������?��&�'O� ��YIub72��nkd����l��K����"�\;��W�,;�L�eN�����D�����j��EXx��W}���I
���J����4�	!L3������+@�_1I�
��A�XM�������A�TS<����T��#SZ�-%
j�]��v���NvCP��v�S:�A�J��)�~5IB������n�$G
%>������<5���W��l,V��\�M��6$�"mS2#�A�&����F}C�P����0d�	��%#t:W��O�HA�0��M��O����)�n�xL)�n]���/L�i�tkd�u!�F#��>gk�����6p�,����3�	��t2����q�?"0l?@���=^���x�$D�u4�7�gI����!��QEX9�0���A�F0�b��T�g�a� <^V-�h3���g?X3���Ll\��o��&D\(e|Q=�N����+��#9���ErkF�k`��z�������U�'C���	��b����k=�N���|G�~�4�)��q�!� R\�[��v� QF��C	�N�t��0��"X���YC���\����>����8/���9��t�z����[9T���c�AT�0�/�J����[��/,����\~'�W��D��tva����)qe��Hw�Kv�Q�:z��\��{����$��`f��j�A�N6p�����9<�_�3~Z5#��y,�+�J��[�6>���;CI��K��S
_�Q���f�����Q��x���D�m������
�;�C!Z�F�!CV��J�G��|������������;Lz�Y�M�-g�5��a�"�y�Y$j�/�N���A�u^�W�{�* 0zSO�9�K��r����$����U�����e�h��eN�����e6,��"1�|i5��1�����
n��
��Gtr��u��HpcT5���H�	������*�dW��yC�a�N�i
�u�eJx���|N��,���#0�z����L����=�a���~k����G���Un�;O�v��E�0���.3��'tF��1��g�|u�L�a�jF
����Yf��xF�"i�f���e��'�[����c��HTa��q���6���D�|�t��2'��fyS{X�W��q`_{�y(�?�����8� ��[�|�����$�n��Y'�g��Q`���{�,]D��a��052���Gg����a+�5�S�Q�Z0T�y,($���?/�� @�����B��h�g1o��/�TF������e��q��_�����
���P�8��}H�,F�D_���X���Lg��q���/#���Y9d@���� P������N��a`�.U��7���
iD���N��>o��q��GE>7�iH�a�RU���V��uI�1L���7�u#�8EBjq_����j��A{�L�l��a��6���8�`D�!�*�gY��q��Y�0��P�f6�!��Yxm��$�A��Top��8}���<��*��Z�kc%�g��+I���4D��<�=i6'�`�Vm��@r�"]����0�U$����%7�{���a�ulA��^���9�Sf�����������EE>�m%e���7F�M��_b���ULXD��|���Gg�G|^�����b[8ul}Cp�m�Xk�y����R��m��c1+�������/�c��m��r���I���>H��u+bs��U��� 3����_������5!|`1S��;�S���i�������C���Q1
�t��a
���/,��a�JO:G��
l(|����'�r))�_ >��;y����H���_3��A�3x��J&^����F�5H�t���Pb���)��G�������Bu'2����42*���=5�M������2��%]����T�a��iV`�!K�����V�c�'"k
�
���:Eo�9�k��o�sy����).���h<U��F�m���xn�z�mV��n
<}�����xX'�|�(�z���E�7\��Fv�Q>]�*�4M�qgj���[DT-
��o�QU�Z�����
��n��y��� z���Txu�)���SV��}���DN)����;I�Hp�����7�����@��NE����f	� 5����i����d�y�[�a#�@�
D�q+���BN����47��y�#��9���BDdE�X�
~��B$}lU�PJ"X
�+I����}��$I�S#�]Q�����N�<v�L�:#���VO=�9h��~���K�m�G`*�j2���\^�\�e�����&}����4��+j�#��JA<gV��T�3������4jvB��>��q����f=+:jv� ���8��JHg�T��fs�N��������/����~b�80�,���%��-�����{���:�cad.��U���r����"��:p��	�:�6:'5Y���w�^���6Y[���H�TFO�wv��y��n����9�������s��7<*�#�2$+��<���Y����j#t��� 0
j����r���_�(�-����o����N��v�.�/Vm�N��F���w17���?\:�!:72�^����EC��4<��W�U��A4�`���9�U�[@��eh�U[���*�4{�����3P1V96�V�_��;u��P���9SEz:%�j�r ������l�M?�Q���g���Z<�%��"��"U�[5tht����	�U���*jy���w���1k{'��S'�8�|����K���+ �+d��p������g
W@NW�*�W�,�i����8��&�w�����������-��|	�����������������w��N;;z����w0n�X}WV��f5��_��c�v�^�*�\F;�C���hWqne��cU�[]cU�����5���I�j���_\����].:�+�hr �l�,��������������r��?��O��W;����������������������������V����m�����F�e!����u�^@M�E_hr�_A"]/��%c�����t�U	�wK�b��y��?�w�����e��aG������<�.�5X�~YO�����DvJ���F�=����M�W��G�����Ln\���c�w���7�����Z:o�d���w`�d���|�����������Yl
�6]^�J�s�Tw���:(Y:��"�q���������Slmk��.|�:�62U�
�u}��Kj)�<hc�^r��*��+@����8���C��7�F��v��J\I����XC����,Yv8q�zv�j��/y�96���+���89�W��I�@kG7<�cC�\�:%:hQ��xP��9�����.�&O�"�v����������S�������/�7 [��%Y����;�|�$TV#�����o����I���iG��
�>����cX��'kQ�1�{�1�1m���pB/l���Nf�S���]�y�8B�u�F�`@w��&$�w�'����*���N�,1�"7�������h'���E����e�&�P�M��J�'lY{�:���+��/]��<|cl�B�>����j�V4���}���N �����5���Oy3}��nz���+%��������7��p��gGA�@��+:��1��}�)���ac���h�m��."v[�����Tv�X1(����w�/��MzR�����FSC��OlU|�K��o�&���waG���E"r��-���K��z�[�;$����7�R�rC(�l)*����Crw45���q,3�jq�Q.�� �tt����
����D���y���M
`gi�������v�;Y���j�uw��!lh^�	3p��V����8DB
W#h��l���e����nD���e_]��-;�������A�q���DAy�&�D�qt����hB]�U���;&!(+���uU��+4%V�l&�p��@��M7:<���["���G6����x�!���Qs�2��PI���C���LV%�"V�[H�;L��I��'(�_[ZwFh��f��BD��v��1�*�P�"�-Pc�e��\����Iv
I�����9�z��:*(�)���M���?�v�`o;C���	���l{���6�������w4��i#K���H����0��)IO�
7�CUX��D�f����f;Z@T$�M���/M�Q��p������0���f�e=G@s��,9�}�K?'��
VI�S���8}G`������Z%}r2���+b��3�Zp'6T�X��]M�P��h���t�� S�1��/���F\f��n�n0��y1Mc����O�����D>�z���5���d>�����e=pi��<D2G�.K��/>.�������~9���dGXRbm�)�'`#Q[T��
�Q�	7�@1����'Gm`��.D�������-��@N1p�S}�Q'/�}���:���*;��t�*�K}�~�+�����izY�e�.���qF��sG���J�q�����;Z�TO��:K@�F7��R�e��������_?����@�(�zZqh��FW������%���HT�I�G�F8�,�V�����t�����yo�^;Z��?�TL�7�Q�/z�(��o>z@T�-Bg
[/�49�xO"j*	�<p�c��F����9�?x��1��4������(��|�����YN�,<���@��x*Os7p��Esg&E�����%���md����2�K��kl(aG	���GO���A��L@�<�x,S�c	��kI����d��mP��	8�P"S�x#AV�5���������MWa_{�Emr�������=��*md��&=C!�����C��|x�`����=���k7SU���d��p�;J���K�Mk>o���Z��;
h�F���C#\l���Zy����HlT����m�f*���M��j������P�{�/�������S�U1�q[�B�iC\�x��9��g���x�g}�aD�FlC���y�Y��cT+���[�b����5�_�U����������o�5�/=����������P���d�+������3��oD������H5�es3����w�� ��N@���� {���md�����[�����v��uF�`zr��M!��
HmlFx�+
�?�'������tp���a����g��<������O���^_����Su#����% ��a���Iy����H�u��,�OM���e^C����7��������;��h]nC}JM��G���	�XNT�2Y�`����6�b��m$K/1�`����M���!�v����f��/�dIM��*k'^$�3����N�vt+��U�d���:l�1��gz���m�)�0r������t��i��}:�[��q�|�8�����#[���[��32R	$E�5�G�����h��%	t��Z�u�$��L68$�8Z����g�hX��IP����dpeE;�\Y��o�'4��z|���!��1Y����V��h�e����)����`��*o��I�:Dv�-Z�
M���M��U"��`�8�T��������`%2��9���YYa0�|fO,����t"�j���@k%�qM�|m����Pl��t�h�F��7��%X=.q'K��4��`���R�K��)�&=� ������b���e�dKJ��!���Y*�L����V':���%w�'����4���R��;�F����k��P�#g���|�����^(U0��yN/4������<�Oy���A�����nD���4�`�p��	������i��KB�|^�0�@��d��������BB����
,�{��-2�gZO0���%���g���8K�� C6f���6dN����Z')����`����)Q���-	,�\[,�f�v�0/bC�|�As?|������s;���
����GK��w"��Y)�)��*�h��P�*��E}�5�s�O$��&z�aE_UrG	�#k�P�u�?��=?W��d�l6L���v�����@%��g<�Von�������~Wa�����(�<���5����7��8�����9���s���67A�X%����h6$�����(���qH��,\�9l��M��h���E�[6A`�7?����0�H�8����n��3���#%��gN,���\ia�F�M9�"�f_$�^d��I`���I�	�����/��������G%����.��>>�����
����'!L�]�qg�'�=�m���v&s>>�GZ��7�B�i���.�BCODD$�lB�m����%O�������;
�a��>������PT���\Ud�Y8�nGh;urX���M�L��G���1�)^fQ:*a���K^���e#.���>Q��F�<l���y��������Rn2U���(��!�=q5��!�=]>�|����'�����S�b5�����L���X�����n���#3~�l�(N����������*Nb������:8�fn��H&����s=u���,�5K��gjo�PjG�D�h��Q����
P_��U��*�;���?���m�����Gl���8��e`�5���}����2\��_T�r���������0��,���z1!#�
Z��k
���!�f��fX��R�N,;c�n�]�1���ET/V6��� ?[��e��D��H����	1M������/ce]��0��d�[��"�)|.�|6���6J��Qd�l�Qe�T�v)]���������DJ�e��g������l���fP�`�!�V����}*~�
	��?�.��ss����A�;�$c��"�j4�=6^L��$p��\��E`
�3y��u#������CX�����������#U7����M��%��5����~��2�s�:���#������_ ��L��d��KV�����w�����MOv�;@'�h����t�B$����cZ����SU��	������s(�wx|<������yl�*7�J���e����	@��q*�GQ�.�U��{8��nsu��qP����n(dQph�g����5�|cg�@t��
�D�u;����m5#/�l MQSR}�=z��A�����92ce�Lt ��C7�y1!�����=Sw�z1!��]|��mP��7r!��7^>����4���I �>\�M�vM�����	���k�����}��X+T�[?7���\d��
�!�>I�x�2U�@N�?�����#���9���~-��������=��}f����F+/���e?����M�\���[Q���3�,�
qv�g'E��"3���|�"����+�g�%���������{Vctn�g'%��W��8���y��I
Ha�,p�j��U�3rAVAq`��?r�qu��%'��y���A��uN�!��B�*AW�%������X����~���7��2Y|n�G��;H���$��j��[f|v���{���\��>��#�.o&��2�8Z�s��$�H���Xy�������=��������\o	�/�����T�
�=xp��4�wy�PQX���z'�l�+�_h�9f�)!�/tc��)�%e���q|�ej����>H��K�-S����N����*;Z2��
Pp%k`E]<zj1Y��7�i��xYE.`��~{������g�t@�_$����Y\7��p=!r�����Q�Ng��E{�M����	��H�w.o��L�n�_���u�,ficx���H�����2.�7����S��u���m �2~"��N���	�.���V��"����ptb�v���[$�cK���v
J�f�*g/�*��_��`��|�H��Dj������D�M+���������F�����S�9�Pvb�~�t����pp�r�&��H�#�d��z�&,�h���!�������x�z!K�k�cq�B���.7���[�2����=�����\I�P���D
J=���,�G�4�gw��Ipo~�J��k7���R��r������_/���mA�'�Z|���Kc�S�\����y�a�8y�`�:���� ��c��n�y���}���
���;�b���vcU}���V��n��
���:.����u�����wA��-���*2"���d���|��'�Q_�^��3l(I�����g�W���d�)��a�)#�=M������_N-B�J����b��
��]d�:�@�\����y�}�:����uw'b����E�3~��m��3C������pt�rL���f�Y���|�������P�ozJ2W@������
1m��S������F�/N�!*���p���36�w��_���K8�-���fC�>o��%���������Q�b�;P���m�����@��O����_�W�t�{���3}����&��wo4
����R��IC�����H��;�q�P
K�G��e�o���k�huk:����t[���^�(����l/0!�9����W�y���y�UICUhtX/<}'I�5v��A�~�����������;b~i�Uf�������l����2��q��������)g��	�4]t����'�4�����������tU����"7��'�����?z�����:�8�x=��Y2����|��K����n��g�o\D������6�+�N�%���Y?K���D����az��w�������W"	Jp X����O{O��_�M��:��6.�M���?L�����y��).k�88�@�h�)~�;����@��y�jH�<0��������K�	��n�x�#��:�Q1�����^�h3���9hG�X�}�?;p�.{���i���D�Y�d^
�CJ@&|��q�1UB����xN36~����E�3�v������if��M?"��C�^K�*�S��@��<���u]��J�r5O-�8h�K�&����ju��%����]��Gso ����sr��P��CIZ�S���X�b�����`o�}=���'��Ph�{�����t�kVG2�p{(F[���ta2�7�C������0G|C���&�A����~&�<4����h�����E�8��9m,*���J^G:�S5�F��F����_]=�:Uo{co������]��7��,`OQ��\B�*2�A��Ay��0�],|�����"��m��r�x0��d
����xB�����Z�7R-@�]!���7�����,Y��/Y��1�k�N;y8��#c�j��g�"QM�% �M��|���=|$f#�"��AG�T�N�n����u�����}�H����h<g|��,�y~5U��;���%�Q�\7]���%��6K�a��|m�JK��k:���6�pq��!�j���+�������W����ku�@�o�������>���(���J3���*���vK��
'`�R�����}������
�P�:R�L�	r�cO8e��8v�oD���(8��d�r;��l�_b9��3�l�
������M������nAI5�@��p�)�9��&����F}�ysF�-GY�XVY���;��7z�q�t���
�di����i
vG����:�|F:�u]/�C'hs(��-B
/����_Hj���k�j��|G��q���^'m>:���(R�i�/�U���`����Ygy�H���l��uOA�.�$����sE��������J����}K\"�P����������N��$X����A�l�0�_6g�����L�M���6��.��)I���3�J�MJ���3Kd-�w�<-���X�kj�:�`�����W��sZs��\9�-]}�L��-0�]3������v������S/�������	�����B��%�QK���������0
.|�:� ����(�P4������s���&��~��8=�^X�������3��u��Z;�L�T��N?�G����N�v��3B��X�v��i���d"�����az���=�~h`�7S�
���E?��H��6'fG����j���D�5��7���I��*��3�d:uB�#P���7���%�5- ���C�����bg��������9X��L����"4��vc��,���r$�;��;�}K(��!]�[�TY����5���#l�CT���$�c�=g�Z�@�wR2�Q�����yeL�:Y8f'bwF��]$K��i��j�����Z�eUH�G��J�O�#Q��>o������=��'E���|���3���������FR����,y��.\��r���B��9�IlA(/,k3o���1=�Zp����&��D�
����;6 :e�
,oD������vy�$����r��Y��q�0������k'Hz�$c��������(�e������8@��F��~6��D,��� {b��K�z~�*_j�"��&������I1%;8��g��7s���T�1����JB>K��8�!�j?���;�����Kk��y�}I���xd>�V?(�K��>tBJU��H,�%��E6�H�������'�G�Q������*��������~`��d�5�������l��{=��~�?��?��������������R��������>x�t�.��k\q������hO��=�}�t�t��s�"�+���NhS����o��. ��69]���\������_9�G�������v���=�7���Am�����'�r`���@Y�����������*rtn����R�y/�����mN������Hi�/�����X���g'E����zX��>2Y2_pb����
poAN�2T��-�� ��2��;���c�����PYD����@�*���Ew��ey+���11k
r]�%sD�3�����o8?Id�������]o�DI���sP.VK�p�ME�?���I�v`���\�����_��z��F�����^e
���%�X�6�J6B���Gv�k��'I�U�D���Qq����\l�bo�=,;je���_j�C�3������VtC������nl)N��q��K��d���v�G����nC��l&4�$4��� ���8mF
h��`=v
h���0�E��M��)����~nh6n����	4�%���>�1�\B/3��@��
~�lA��F\T�	�:��L��-��zU6����+la�����6&`$���:�QF�oD���%���,`0�;Z��:M�]���(�����@�������('�D3�#��#YIVA��x>���GS��"��DS���`N3Y����zh��m���E�i�M�
�QLd�YU]�QM�����:��S��I�Q4�]��v��Uv4;��:v�,����gN��i6uG�_j��^����&$2UF�*���fuCe�6�_����
�f��^�����l�Dv���a�P�*��w:vnW7��#�����TpL��Yum�Y������i�"�&��vL���uCxEI��m��jg�u#R+���K��i�K�H^�G	�e�#?��r��VC�L��&W��i-��^S��H�z��r����"���r�6uC��i�h��S��x�Yg�3�Q*��u5�7��sE���/�����>���D�,��uD�Zv�6u�b������r����l(������d��������l���;��-0��*���I�F�|^,�4s�/�!�Q��6����87K�q�Px�h�BR	}l@-V�m�l�����Ew�{���Yb���sCs�7Z�A�x���4N�>�FX�E�K�]v}F%YF��z��=��r
5$+�Y���|���X����:D�?l���*�~��.C���-�_}G�a���N-�5���$������[���
��x�z8�#���nuQE��%��uw�cP	%z�\�/7�<%*��$�k�b�y�h�'��P/���������������hrm/LyCq�3���	U��#/������D�]}����:
�D:�E�|v4���w�����H�0��)<�w��5tc`v'��(��&pPf�<����)��zG�h�Ye����5y�qSqy�;\	vs]qF�����rzO�\3B�������
q�N��	�����\�{E�������R��-^F3�����,�RW�����_.�����_A���K.��eo�u��������w&ylx�r�T�����$)�56�x���C��1���N{#A�����^�H�Wv	W�?JJ���5���I�	Iu��F`FvG	����1O!+o&��r=����Os����D��Rx~���@{�h�!�2w��5�������7�R���/%$+j�$�r��F5�d������V#VU r"=��_�_;�
�1��65,��R���=-�b�oJh�v9(Bd���YCr^�����_�.��:�Bx�j:�c������L$H\���*S��6y��P��_�b�7�N�e�gb�"6��%���[(��,��������~��=�F�w_j�o=�vC(2�8��_���9N�=Y^��d���'/G2eG��+C�Z`:>����lbkJ��u�2S"�����./Nk��,s;Z`��,3�Rb�%0�����z�;�#�Y����.�X����}���7�i���������m�2RV���k3���D��GT���XL���y1U���v��7xOBx�a$�?����!����vi��#����^�`0
]����.bG��:l&A�"#�&��]�-��x\��{���n��X��Z�m���A\!��a��{U��7o	��H��fm�}}��e������`��
�s��_arL�7���Lo"x�����~������=���j�Vp�e�&L;@KB�t`y�
�H&���	
���S�5�V�/T�E�D>IN����Q��(�#{����f�KY2��Y�(�[�X����d��Z\G�'����v,��Xoh���F1�O�����U�3��T�����j*v����a;�������,�Z��K�p���,��o�S&F��dx�]�~Dh?0Z��86�nqp���S�~�|�
N�6�C�j#K�����H����{�����C�
�8C�-�����s���l��+Z�x�uzv��[�g�J���	��g�����`������gx-����|�v��+�C�~v�#w��T0���#w*r���M�[��yr&r�n�V(�U��/	��GW�� �����H���szMU�nL�uE��5��A�SpCG�x����F&��`������F�!9z�������T�^[��7E+��A�$�m��n=1]5��Dn�O�WWp�P7����(����������w9~��yEX������b(]��y4q5CS�s��� ���N��QP���8�����5����	�)E!uuo���,��">�['��{c�PYP��<<�LQ	�dQ�npm���e�M�2Q�2Y����S�y	���Ku�sHU����j�S�J����[�f�
q$[�`AsR&u)��T��&J![��j}v9����@��������4�3�����������lmrx�3mo]��Xo&'�"s��i6��,3�#9I-Vo�T���U��
C��$�0yf�����&f�~��=��E���3��6�i�����5d��Q3}�9�I����LF�������{-f`��)�����:�'��+
���Y�.�,�{z8������6����<���;	�������S&������M���V����v�kB��^V]�(�F��X�*
�2l�N`������6=�dC�+�H��s��S^_g�0����>m#rD�����P�z�0�0�d���|o�QJ(���!o�5�/$�}�?:qt�B�O$������j�L��e�Y<<�V����i)�'���cG�c�QY/�i����c!��z|���O4\g����w�"�vMKT6����4���G�^:�l;�����l���#g��H�[���T.��x	_)�8��q��Gg�J�e����s~�F&V&��4��TsBb�K��?Z���V�y����Sg�y+����!��x;���������H~�����LSo�	��L)1�����FW����&l�F����`�����%���T�T(��X}��	s$�<r?�|�!H�! �F����THF�d���>gL���
����s~30�r������o�h�^Ht��>���V����v�w�G\\�1��l��P������-CY���C��@oz�H��"��E�3���k�#D7�b�k�z�}�H�;L]��G�^��wh"6cO��u�!^d�y� _d��s��=*1)�q����Od2}�a.�*�����t��I�6&��,�^����?��g9��{��2q��,����/����yC�kk�x��.��$���0U�0�){9����[R>n����=�
\6/�
�����h�����n��o�|�>��F2�|��0��Cy���X�s"�
���\�;^�EM�c�J02�y��l?�\��v���2��Q(�Jz���V���;�L�8�X~��4�_P@���#�3�'
w.���,�������r
��-"�<��F�z��IP��7��$l��Q��o���,df�$��������M�
�G�:���.(������P���!��,<._6N�I��������<���O{���:���yk
Q1|^��<���~��B8��sH���D:��������3�����Zo������ �P�L
��u����E0�6��uU7,��y�F���f<;*Qg+������������R�7�v�z O��x�9g�@�\�����A��?��_:-gh�N"�V�P�'9��U�~�{�rq6f�������gT�;��)�B,W�s����G�;������:�����wc�����g_�A�3N
|�Pmb���b�v ����)F�6o���_�+,�	c��+@�����@0S��2��%�,M����P��-{wb�!���Flp�y���e�q!��g���z�;��k=�������?�{*�\��\�oFe=�Mo���Vb���?�l/���T�~�d��\}�
�y�Dx
��1[���]�U���<k�	9[��j�������d�m��Y�!^��e��C\���L��#�z���/1��:#Y[W��/I��:g��j����|���C������`�0����}~�B��&K��NmQ	�fyW��[5mMD���]���oQ�.�
y�H�c\���d�:a�!���Y�������`����������L�K��_�� (��f�	��i@��������pr-�9�
�c�Z�6�Z����5�9i�i���-vF���3����>��&j_�?��!�6�Ub_) |�.����� S����D/�fd|�luD��`�O~K��v���6��S�_���T9�[��
nd��B|u����_i��o���^	k��yr�]2+@��.2��UP����$R�9��w�q���s��fR$IA�j�����$����1�nf���<{�v�������f���}E�Q72<u���j����s�������
�A\7��k���g�����s�s������<��1�y�?����H1�Y����E����g�u��5�������_�s;�����s���j
��Y�t�?C��c�����,b���j
b�s����[�T���G��V����Z =��)f��_!�_q������W�3��w�X�;��w����C�2;�;���\������;������w���-U���\�s/�)���1�}����-����o��m/��2�����
�Rs����4bl��%�[K���A*{'#1��Lv��+��oo]�T����R�]���u��u-k��t�I$��.�]�23��~��������.�����]���c�������w3�����f�o�����.�����]�?�����G�?��������'#������.��_����';����[�_�������6���7��>F�t/�}���a�M����7���E�t.�}���]�M��s�7m��E�t-�}���Y�M��c�7-�~E�t,�}���U�M��S�7��>E�t+�}���Q�M��aE�'�N�
�k4��P�_����=z�P��c���=�rw(����u/���w��K�;����NE�{.���?y�P������������-�������'���hV�7|�@�aI�p��O��`~��H���(��%��^��{C�.O���\8"��E �5��x���I�q
�������W�s�'^��Rx���[�k�wP����$�\�E>��O (�|I�Z�6 �GI�����j@�{���m��t�o����@�7�V�Z������S�N�������6n$��M��@^�v������|�aF�C_gVz�P�LD#!c���z:�L��,��O�8�/��#�k$��X*~v��*��:�w�z��F���_s�2)c������tE���D5����&7�b��c�����}/�4�
X�������P�|I�$��D���I�s>D\����!���l��|(Y���?�,\��x;��v���Q>��X�N�41�^����v"m�B+d��&��2�y
[����b���0t*7iN-rY�'Q^�J6��|?1:��C���j_+��}���$��)U�&��H?����,��A��$����&X�<��8��H�l�%�
��c�xx|����dt�����r$�V�>I\��&g�|���4����W5\,��5�tA�i�r�?��U1��8�r�;,mA\��vv%����*j�Ef�fE���i������5���������u�J"�ydP��4�q�����>;Xm���y��6"w�@���$������8���~�0h����i��M�]+.�V���[_Q��(�����Iwe�K�.�6��'A.Y�A��m�����b�[Q�I�VEy�:�;����7�#�'�����TN�F�����4�*
"������m���,L��~���4����a��f<�$�����K-�}v"%*����J�?/������v�����4�����0�1O�T;��,;��� ��8=���lM0����t���zD@�S��>��.��W\2�X/�-��;r��Kps9�NR-U�Wm��y=�A�~���'��[�Jy�������!J�V���A��4^�&SZc��bQ�"��j�����$w����S2M-��������j]�]�G
G_�<`�$>T��"
{SS%��b�O��"	��{��AO�{e�����]t]}Q�cb��
 �.��2�M����Wu�yLt����'��#�������B�E�M��=����(���/���A?�UY#��D��k�>�����;�����n(
>����E�L�sA"8dQIT)-�V��EI��5��.E���:C�����}���D�����yq
��H�}U�{<���k-�Q;���D��k����N�H�K����E���\���G^���^I�5���#�9���%x�=Q���P�R���I���Q������R$���d�(�BL���I�2�%O&~��&��I��hQ�?��h�\@MVPH1�A�N>�A������I7s���2�1[R��H���g'%�0o�Q��h���:�s�a)��K�����B�����%����w7����dd��e�'�^\%z��*8kq����8`��I�MnS�K��;p���9�p�����0����
�����L���$�7����{4n�RY�{��s��G��V�#��j��}jH��l�"��qw�"�s���]�I��L�7��V]������Mu��|�|s���4�t��+S��������S����������i���A\��(K����6W�p)���Zy0���y�?J�_� d�����7����t����������yN�Pg*V��w[c@�A�!=Y�����aw7?;�#�b�X9�d."P�j�FG(�r)��%|D�K {����q��e7�����"��z<G���7c����u&>�f:(kb@T�2����mbs���`'+�y �&\��6Q�D�����Y��j��@4���E5u�H���%3�
�<x�f$��_����3�_������PT-=u��`��;����|�W��|jf�l��A�|��Y�2f���E��������U���������%h�Q���|	�B8��dF�1��)���#O��+d��
�xJ��pJ04�IV����|�V�l@�ZR$9�L��lmYS�K�Nv�j�����a�Kfj_�:�D��@N6x��m8O�*���L|H�#��P��=��\F�i��2����&D�$�����T;�	��L�������y�d����������N�S�b������(����:�w7���H�����)�btlf��E:�� ���8mc��%���q�M.�'�"�����1Ju��G=fj�e���%b���
�x�|� .#�y��qd��,E���r��F*^DO��J#��/�c�/�z\������Z�y��7R��e 8~~�����
7�""=�mj��=n��D
Cuh0�)��$��B���3�S_N�5��y�4��7�����l��=�����Cw��Ad�l.���K}9����x��h�z},��Ct>(��&[�H�t�X������d��#GII�����t�%������eP����[�=Q���j��R}�R��p�B90�Tm���k������v/�
KY~[�������o����/���l�Z�~;5�/��'j���j���aWk�9��L�-pS3����9~�Z���E^���NP���_�Q�5����Z��f�$�T0&�2d3#����*YYTP2�/�S�;�qq�����,�n����������E
x�����whC������\�f��+�F��19��z����m#��0�D��������K������m����`���d�]5�/$�x������7e���L���H�n�������-��0s;����S����������|�6��W��)��i����NKw������u�)s4����P�W�������]��
���i���*;��hs�V����+o��l���<�����PO�,"	X�7Z����?v!#�}�
n�d�*�HKZ������y�<5��f���.��Qm����|}������f/�7�d���<��5�FT�-�&/Z�/�N���/v��b!��"��Bu��Z�k��/o��ZE;��b��k�?�������t��n8���bxL�]�q��Fg�����S����l=��Q=��}�qz2~7u���3���{�����e�����u�����&�7�D�������?o*A����T�����hj�7Z�>-\U�����D��hJ�N`���'��_�$�7���"t�t�m2�e.����%�*Q;�9P����y�`��>�'����p�{&��>������D�����i�bC	�����}t�_��-/d��kt�p��f6oCA�w/<�P-���D����l|�����bR���?�S�o�?���,�U9�Q�?��$:����9�/qX����E�f#x�d��1����l��Np�	duN|��|����(m
�����4P�^�������Wm�=(�%��n}�t���8n������=�������.p�-��k��Nh�d�oT���&�9�x�������,���V������#�������,]t�9T��=�6R��y���\6"7vnC��3"~�,����t<��O�ew�*�� �b
�BB#^�#�-p��^�f�b>�F�<�bdg��%� ���y��%w3��[�	����������-����4^�Y��s-^���J���4'�ld��j��E��v��'�J�VvT�he=��r!Z�����eO���
/8��RNC�����/yjv��w;
�����"*d�6��;Z�u�LW��Q]G���dbya&�v��4�D�/��w���)�W!2K���N[e����u����QL��vV9����G���(
2���QY�Tw5v��3	,�������'r"fC��|�" ��5�����t��E�I��8�9����[Rx�kF�rx;Z�
o*��:#Q��Jbj��7��1�7oMXoGu���3����(����35���U2z`or���������q^G������e�bz;��j^b��i�4���uL�B)�Ag���E�=���MM�%�6T�~"���/lif���}�"w�~��(�������������r��w'���NY�rY��,��-���&�u�_IT�	��<�N@�X�2]����4E�h�����k�-`����y��������A�v��R{���B��K�
������(���J�%K^m�2�{Q���0cz�
p�'0:�;Y?~�,�W��?�5���\���:���T3���@��x�D��Lu/_hm"e��
U�����������qp�T��>4'(������L@_iC	�}�� ���)^w5����	(�sJD������|��!-��|'I�������f��B6|�����Tw��2d�_h�`�?�59���������
�2&��G��5��8�u"	��7��Y��*��4y-_�������f��0f6����j>{�8��ZH��o��(���8{gg?��mI�9x��eT"�c��Es�;Y���Z�m��e���������B��*Qq�-��p�J��/��}�w��q�E�t�����T�4!+��������Vw��Ha��C����#�U��7�h��m8�Ip�t�H��c������^h~�.�F�|��|,���h��lH1�G�3�J�")�M4j���3�����L��N�L�ND��&���e����82EW����������Z���	��P�c�j������D7<�-���MJL@�.��O�j����*\��S��w)p=���4���./�J�0�(���"��IW��H�nC��T�� ���������x�uc�����!��ukS���[�������/J;�32q�N����X\�z>aY����w�����x?�E{��s���oE�Yk��T4��kew@��v��N]~����y�����1�|CK�I�6��q���,Y{�V.��;����O����p�$+@?/&��g
t:;*B��3��4t+_B	�G;�
 w]�zr�E�w�6i��)�X~�	J�i�vmQ�u��N�B5<!�����M/T^�1��%A�������t���Pm��[�tq��GY��q������N
�!�"@c��f��de�R��1��kt[��n�,�m��zc��%6^���
�\��q��z3z��xG�W���1q�E"2"
[}������w
����������4��~#��6��������H1$U�FQ��7�xt?,�z�o��Yc�-�2���~�Ug� �{�@|�[����Jn����_h����������(_��l��_����b�u����l(��o��9�)�.�X]��1zxE��u`r�Y;��N���\kz������!�a��fk_cj�Z�������,��(��"��m������|�	��Hd����T�e��ei������n�� /�jSS�:�!�����)hp$_h��fW��9�������f���aU��v��A
lj�_9hX%5^6�"�DGt���X��m	��yXF���,����
cu)�!y�VK�H������-#�1�j�G+��D�<B���Z�D���H��i?�DJ�)�
n����j7$Up�!e���8���#��������c�un|/[�&��Nd�t_�#j�3�:���	8mi\���!����2��/����?F��L�c����Q�z�R�c6�2�;[�/c������t��,@����i���-�����-����a��X�{]���v��&<�v�H�9=�#�s���� O�"|2zt�7��������x�����- �,��]3?;����[�.�(�
h#��lv}a��%�%g�D�{�N(R����j�0�e������v�@��K� %`��`|C	���a�<Hxg(���\�
���B%�%�IL@�����jr;���
���/���Q�����A�Coa����*����,/��k�;7c���f4v$���A�S��&��K8#/���f��D+�.�eQ�2�������|?U�
"e���������������\Q�/��3D��B+�%����VW���"�n3�H�Y���I��,�z��`�_�t^��v�f�����B^�7wX����]��ll�F��Bwl6������%L�����zb"Qc" tC�v��wmh		:��M��?���F���2�?��������5M�w�nl�,�]D&K�{U�j&{�L\����u�c
��H1���W����B���xA�����5��!%��f����O�����C�*�\	�0��%��"�)�'�����PS�I��*�C�N����(
�[ \��$V�V"EO_�-�v�Uw��Q�ur�u�9�u��:t�[#�v�?�$ W����b,\��S����9����v����e�v�8�*Mi��>��[�@�0����|���-��'��f��fCM���'��b���?f�;�'T�������M�a>7��X3��2�Q��c�Y,;�pa���Ip�����cL�Y|���&/��Z���a���z����������cY/��`�{1�Nm�z���.X"v%��`���O�����vc^����Q����A\;��|>!Z �P`���N-��A��6Xj�F,N�ElPx�/9�A`+����~�B��9�R�gfp��G��5��b�1mtgG��/�.����Oy�p�e�Z��N	1b(�4~�#��>#(Qa��/�B��Z|0dV�:�	y��Zj���;��Z#%�o�!C����1BP�y#�Lf� �M��Q�u'"��z� ���b&.��`�z�0r���A!&(���F.�:�����,��5�����x������i��/��f��V���*�
�OI�#��@��L<20*n�m����E�/)R�?#�F|�v-���H����y� V8�m+[B?4��G�V��x� �u�������"�F�xD	%p���A�m2OI�H=���q�n��ao	���Z�����	��Dk`wB�q`_y��Q�c�1]���^��� $��oT��A�gE��)�������a��d���+��L4��-������e����sy��
��^�a�YZ683S����7S���@1�?�t0�H8F^=	����)T�J��]���O"��|.�����>�L4����L�X�d�	�!�,$�������%v���p�x\���gr�N�qP���v����u�)~s��&�c]irg/wCO��#�����*I����L������L�eb=S�fd���x���O�u{D�����{�d�/X���s�3�J���X����-	�|
ZY�����g%�;��e���<����&�\��d"#%�D��
���	LQU]?��()y0�>�i����L�[8M,���6����-4wK���)~�ac�����Hs���}�H��6��3���"Qo���,k�T<|xY�dRpRI��o��L�\��a=.��g���$�������[�z@�	�����]�Q����� ���j�2����+�O��E�|Q�<���#�N��;�����ls�X'&��!}��	H��T�����VK���X��p
����-]�'���7S��J�<�n�6gO�$Y{�}��� ��_����&�9���,�R������Vy,D���`\�F�u��Q�u6�D���: ���M��Vp_��  ow�+z�m�p��c���w}?�6l��>��N�a�	
H]�^,����������dv��2W���p����J���iy�H������f@;1�F��R�jl����}����#�Y�	��T+
���?!�S�l��j&�
�b�>y� �	�Ab�l@�-��'0����C��K�;�i8�;�~��C5���.����W�a��6Mg1���J��E}=��$��1�aO�5�iO��S�q����$szsXk��LD��D�o��i�6�h��o���)�[����	�4+nJ"2����m���)��*fS���iQ{����7K����L�`�I��	�8;{��L+�&���E/�'��F�M�,����Y���-����:GK� �v�fq�� ���Y�2K��q�[���9vK�"H/KJPCO��X���r��%}�����������Hk����zlk��y�<��`6Ce2U_��jJ��5��L���������g�tA�Y=�Ao��
Zh3����5���0�����w��A��U�7���A	a��GPA��$�{g���E@*I<C��G������1)��#�(J@��>���_�"$#�@pX���(J��(>+�*�H|�'�*�����	��`FP�f2�`h�fL��A��F�1�2dA���K	S553Q}��P��H���E#�W�d���#�����RP�Ll "��43��Y��O*sx������@i�q��(�M�d���,�30|p-� W���m4[Jr��;"�D���R
<o��b��ty7�2��wutST6���2����!�"}����pS�id��������
��h`�F�y�4�C�1���x*��]s��Gi���p�!~����	y �U���#>��&�#!#����E�m!lU�a�4!���+������~<v��q��P@���ad���y��.��!"r2M�j}����"���I���Dx����P?�h�����)n����il�� nJ(,��P �Oy3
�(�Ae�L����#)P��M�f��R��i.�_3�Y�e�����KTdV��X�V��&+��N��`3�a���>s����[^m/F��^@(z�!JvS��nN��"�4��>����qA���p}J��%������������D]w��~s�S�x�x��m�L6�l�d~�
+
4���	�&��FJ�S�9a����m���d3���V&��9G��]�6�����PY�����v6�v2����/�����	�"W<����0f�7l�8\|V ���*�B����|C������b�������2Gb*n^X����Y������"���z���h�����_v3�'��Evn����8r�['@>/����q,�n��)����.#	`�y�����5�	���O&SnLM�#^5�0�B7���y��7��i�0=�B{n��>��:G��M�����o�l����m7]�y��M�<8Iw�y�M4����r�h!Rn�t������E Ny�����F4��f��R��3�~������X[���r�^&�v���9p�Cn�����[���h��cVCy^h��V�A�����?���#���q/����%��mYY#��.D}���'���zZ����&��=������z2����>�w_�p�����$�iN���� ��3?�e���g��.z�A_�#XR����C������<���:�������L����m�r2�����d��g�D����o�

���c�A���r��7l�3B�hV���U��"�-];����������V�2�g�H�b�BH;�QO�������AZ��fy"�$O��s����y�NzZ����������:'Q�lv����914�`
��2G/���TI��#��&��X��3N�J����x�0;dh�'��{���������`�Y�/����
��H}R�U���c����O�D4g��`��@Zz��#�y!����uF�i!��	�=���s.�SBf2zp�$;�iHB�a7�����>��~|>(��eB�eA�
b�vV�V[h�o�BZ�N/����|c���
q9f�4��n���TM�_u7NM����n9��E=���+]W1\���������*��]�b��!��R����r�H��{.�q��{.�q��{.�q��{.�q�b{.�q�B�oe����'�i[�l���<�~��_�s��u���F�|}�QJ#��S�8r����#��f4q��M}���\��>��-������O������R�#��L!��qn�������������|���1� ����E��~[�?�_����������������K�W�-?dWK=+�1���oD�������(JtG�88~��q�����vfG�m���}�]u}��?�Y��LP:�%�@i���K�������W��KdE?oT�'����yL�Q���<n���Ck��?o$�����Jk����HD�1�1s��!|�oW��w)Q��G��?'�9�	'��h\w.�@�IDt��"�LY(9�w��dQ�gG:�����������/Ht���T*�>ha��(�s�]�
`p�CR&��H����ET�Yi��\2R����7�J���z���g�w���[?t����{h�6d"}��JJV;������;�v<s�"��F5Z�<h�o���1��d�`�����mJ���n?xq��	��:��&XV�d�2{v�
D�h�=V#��P	w�7� ��B����z��������`�/u� {%�������@��Q�,������G�WR/�*�w��`,��L�������]�����Z@E���$���������	�j����E�<�9m�T�,����3��*�X�b�J���l�z�'��W���]���BN�|�jy0�+WTN��^��:�`��L�]�	��f
�En#��U,�(�V1�R�Q���EY���Syg��<9�N�������@�(!�b<1����J�����/�� ��j��8�����tb���%��G�G'����i7C�V���k8�|�BM}��g"*9�W8�j��E���Z��3�W���C��3;�����Lz�s�d����2�����M��krj��1o:�od������Kop3����t�������b�����Pi�3�x�LD�����F�B����+-r�hQ7[�� �q6��F��YQ	D������-D�������[��Og	H5�������-�D����2�v$k\PQ�@�k�
+�=AY���:uU��W�M��������R�8�w2��K��
��[��Q��h-�w/����lfw�J�i_�h��fg!R�����O����K�V�fEJ��������w�>�"b��"w�����@<BX��c.�-�R ��.h�{H���g���e�/l��
�k@b����#������;����w�y�����������^�'N��AS ��"2�#����`2��hI���t�"�����|�Y�1h30[�=�dQ:U��&�z^��������v��PD;V��Y������9�,���J*����!�������
�U	&�&�}��
�����%�.�W�
B�w�"'m���V�z�n��[��9�'���'����s��_3��_$��%��6���'���$��.�[~��d��c7��em�#4�g�z�*�8�_NhwC� >(!S��a��d��d�a���9��&0]�+?���r�:�������/H�A����
y��0�����:�b�>?eEQV�n�f��W$��we�`�80M��Z&���3"v�+���*E�9����G�H@3O��	�u�����(��a���|y1-s��^�Zi$4��Y�S+m]������=`���q�������ia�>
jU��"�!���q��f��"4�S:�^�1�o�=��Zi�gB����U�
����T��$�����D6w���7z��������a��\i�i�����m�*�#oS5����0�l1t1��1o��3�����,��@�q&R�)��2����M�2��-��y����{|*aE	�\��T��8(���)�mM����\�BT��y�b��.j�9!��2'Jd�/$�VE�;��u"}�W�����K����M��.%��i�i���*e"��	���
�t����K0�G�;��G�2�`��TU&�.�H7�YQ�U��E	�R+�VcS-��QP�2;���Oq�~W�"�b�}���g�&r=j>�LEj�����9�\��:?Jv��K=�.-�r��):n�0mZP�~��AO�������>�ad����c�����XK��6	��	L�nO7��yW]�C�B~�����2]S���4s�_�sP��E �/�g�)p���(�b�0��g(�N���Ls��n{�U��i}vQ`#H��3P�{�d���}�F��~:��N����g;a� )�eYu��3�h�],o8�����f��	p�����`eq�c����{�q���OZ� |�-����;a]�,1��;G���7�8�3���g���.��1�5�6d���\���;��	��Ndv$��y�UQ�6t���T���q�����1�)S&UO
�J��l�k��3Yv�;0�����mJ���o�fh�U��I�M��*k'���s�J�&{rl�6�/�(��&C���� W$�=������Q���K�[a0��	JG��cX��>���L�}����r����0����t��TH1$ ���3fX2�r3���v�	`�7x�O>9��L$����9g�v���5��1�3+Z����}~_=���L��a�����������aY�ai�2�g�t���s�[��	�� ���{���&!�x�n��M"�l�pZ����o��;p����Q���������g���I *���'^��D�r�����P���R�~��X(6E���4����6���o	�2����LY�u-������YG�q5U�AkEh���q�X��n\&"���4
}5�0�Rm�L$�����t���P�p�n��[�;J`%�����t
[�y�2Y���

���<,��8�`6M�?/����`�D�u
Oy3hM����wxc�D��"i���) ��)����l�n�?X2�����y
f!��Sc_j����n�^��C8=��y1���'��L�����_.�:Ko�����fA�����J��um����%��H�����
��z���I"��j���v�����C����COy������\��B�D4P�������h��Yi�Vl��;BU�x���d����H(�K�k(�W�?�B	��^I�Y���?>{~n�^��l6�w���p:�JTw*A\�m��z��]����2^TX������-[�yNY@C+��Fm�����63�r�CG�/H��M0�V�g=_�aA*�O�F~"��$*���x��6��&&I_H@��:���s���+-)���J�>���*�6f��p���#�8� �li`(��n��H��\ba$�?/"��>��������������~/}��(~�����m��J�U��cM��Q������^L<���|�
u{!��sy��P?���\q�N��K8��Q�K��0+����+4V"���"����R��h�8�1'��iEEep�.fms7����k��l>^|��"��c�T:�V���M�aG%,����-/�X���)�-�\�u%"�&�c5l������&S�����b�Ls��5�nj`DE�����U�/��/$��d�h&��'���sYs��3O�9�+b���h \�Y
N�������CU���I��p�~� {�n��8��[.�
�z��w+)c�������fm/H�tc�H�o��?������������.&��69�����r&^�`Wg��,oR�_�)�2�[K�w�kNs������ehu�L�}���e����f��)/��������\��Q�L�
2�el>1fK�_H���]�����n�z���e�~= -�u������:�R^�����9��V�>�#�wAcS���[���}�Q��i[
	`kSk�v�s����u�(v�:?ufA�?���#�MN�4�YO��6�}E
�.���3gn�D��������YL����X�J�\+l�Y-$�
�`��u(m�/�$�?����Q3�!�QKyn�|_��:�K�&R`��>
����W���g(S#�p�����% ������ ��S��P���_�~��J*h�,;j�!�u�nQ�mMm�M������D���@�z��F�s�f)����z#������4;f��91����0UZ��6O"��Z��r��}rzZ��d\-�������?�N��$#L��q�L�c��_�ET&k�f���-���+����U���w��X��M����e|�(���vk� ���.�\�������*�a����n?�������~G����M8�+��1��
�@R]gd6�}�H������P�Y�9���T��M#A-�.k]��n:-v�J��qd�?H[X��U��������Z����v������H>/2ed����<�,��Z�o��������O]����0]�,.������R4�6���IG�7_�#���q�����U.�niM&]�1=�l�n����
�Eo���K�Elr;�h_L��el�$
����t����	�E��gS�>D���������J������wWU��j������8�Q�YAubb����8L]=����'���*N>$0�<%$���_��
��M	�x�M�����z��[�&��0�F���g�Y��p	�P�c��9^��k��L���wR���?V����YIu�b�t��e��v;B�l�J����DYuuG^>�@I7 ��/���'vj}VR��1�MH�"{	�"����/�l��gZ��Y��E���'S+�"����8p�4��4����3�.����2�<��V��F�^���<����� �������fzE�4������d�-�t'H�x����2��I������['�������x?'��|�D�����KS�����YC=Ri�s��#KA?�]k(u���Lf�i,���$����A�</Z�)���:�7Y'\�l" ��	��Y4U8����:�J��8��
l�<��=�fn����%�-��F��p�i���e>^��� S>ma�w�D����������p!Q�#���q���Y�w���{�|_c�1!��E�����Z������Jc�o�����\���A+`X)�WC/������u�[��9�;��M$��Zw ����-�21����>�Y����R(�=����/�Z���\�W�K��'V�����s���QA&�������j����M}�^E�DG~���dA����0�Y���P�5l��L��a>�F�/�����`b��?��?���%���Z5�*y�'�Q�4�r?yJi���L��`%�Z�D�}���K���A�.��5����:����3�r�V�����
���tq0�~�g�;�YXs���&>+���)!;x�y	_��&)~��8��c�t��t����"s2d+<B�)!�����x��H#^U��������
�(e���Xj���'�&��i�E��.�aG. 3����7����AoK�z4,9^���6=X$�b
�5��(I��X�+s�"��,_����l���������Y�V4M]p��L�i��\�~5/7��I\�a��6� ��S�����O���������x�t�x��H��Y&G>|�F����]�i�~Z�b�:��B�0b7uZ��(�;h"�p�H��FnM��~�:�G�'$y&�~[�:�""�����eV������x��}�k���8f����Q�
����H�I�R\�S��������g��E$�(��t$�����|�ef�=6Lg�r�Xd]������� ��5w��(�{Z	d��;�#u�'��^��������BD/	3+�e���A$p�A�o�x0Wo�i�`���AF���jd �%�X���?�Q�(��Q!��n���Y��r7�0q7h.}0,��J���}`�cd�-(���G���b�@��8��b���G�BDT��������V���'��������1s��Os���\��~b�#&
�n�������VBp������w��H�t%���C�|�"U9�cf�t��Y��M�Tm]�D�6�%�rdyX��[�2����9����7�m���X��kq;f9��������x�p��{*>v�-��$���u��`iJW"��D;�~���j9�H�w�Uq��i"Q���V6�T��*�f����9Ka~�fs�L��Dw��U7]���8����i*"�W��I� M/D+8���z"I��`���m�$�[6��I�K'������^I�m
�	co|�$��Hs��`�=����f�+=D���a�n����m,&���#m�*���Le�=�8�YU��o�dyE0;�h��b4��
����L	g����?�-L���Z�Pu��d1T�����������T����H�P����,�^��a�"NMxVP7��;�lT;Q�U1�.��2�~�[���>+pq@�`=����(��qC��;�2�����Er_e�Wik ����NG����6�K���
���/��Hi�W��Hn����;���_�y��u�XV�}�t�������w�5��.�WT�j���,����'��F�hb�J#���4���&���������u��3(S��|���I�Q����q����L~��4��<�c5��$r��H�(2lV�$��0J�6�����/�A��P��p�np.[���Z7�j�en�Vd�j�m����T#R��fO�9�� ����O�|�����|�}g�����1�������:hT�#��%'�0��s0Aglp#�Q�m-kT�(���:2����f}@��%qc�B�i�,�B����V��,���d*���P�`��#U�LK"ZXe��uh�w,�2����?ooO;���~�XG$1+';>��|�<��&��z�\����e
D7�u�����"��n^a�\�w��Cw�X���f�S���^�V*��$��|V0E����M�Ukt���m��^X-y�mZ(mt�R�V��y��Y���.�������E~�Z��g�O�3.����,�BV+��&]�V�9����P� ���5���e=�v����cth�6��Y>8�'�)����"6����M�c�c�OF��<Exw���3�99������]o�/	��g�n��5���KV��$���;�j������"�X@u�����uy:V�e9H��;����LfU`�!T"����3�w���`��>�g�iU�mq�1��b� �Y=��G�0�=ZM���$yp(A��68�r�Pmn�!I����-��?��@��y�io\�9�i)�2��h�:m���o�f6��&��16�f������T��3��#j��Cq�K'(In���~�� ��`a �%����h�}G3
�e�����b�����(>+86R,�M,*�vJ�@Al�����#E����x�(���G�ECl��p����1q��l�������������W,l
������ ��V���_H��C-����:)��q����c��w]�y����3���(��(�a�r��lS������k>��h3qh���k�P��G�Hx����YC��W����
�?�WO���~������?����~�����������O�����|�>EM����n�:�x}���������u����f���r�����f�

�����1�����6��Y�h���[�)p�~���dM�-���lE�]��G?�
.���H=+RY��������5�?V"�fy�:U����QX��O��)"�~h"�U��.$�v������3��"�6����L��|�v_���:����N���K��)�"�.���xj��Ft��D��L����[���z�oL��z�8�`e
��">}.?@F����� �7��+�W	ybJ��6~fZJ���a�����.���~A,
�~.t)�dV��h�
��VUe�T}�&~�	trB�/[&`L����y��
�yU��MXG������B�W�`����i���l*,��duF��E���so��.d���"B7�$%Z��l�����.Hs��	��q�c��.�bN���C����$���*�G�� MP��U-A�%�)�Me���H	6����y�9���.�b?�����R��&��&�;����|>�J0�������Wh��])�ME�Mj&"k�5-�i�6-�I�4�zY�k�1�Y
�'���M�\d
��T��9EG��iO��![����i9\d�Sl���4��y��i�`h���Z����5�]����}dP���iFP����o����f3����3��lLyR�4��9^fL9x���P���U��4k7����L�	{?
��0��Y����L3��`�������HsJ�V2A��M]����}�M��>�{��L��M�8!���h��-z����(Z��L�S�H�#�^��M]�T���L�����h6���U��������*��.������e���L��9��������}3�s��"���u��3W5#���f�O���H���(�{��rwM�uE�e�Z�o~*P�:�aW{3�k�5��(i=�^��]]����mje��m�R[4�kR�I��1N����:�;����z|ak�nS��M���:+d��3����^7�SK�u2k1��-���u�~�kC^�L�l�EeNd�����<7��H���������m�v����9=��6+��,w���1��MrDw|�����
�
���J��h��f�Z��� ��>��ot��,���B���,��:5���"����O@oap3Hq$Y
�����������e�:T����3^L��Y�{��P�7Y�|X7uz����j�"t���?�D��;����j_�b��!�[Tw��N�+�4��AI���6�uY��9r�,��s��s	�!�wkk����5��*�4d�IS���t{z�@,���F{����n-HA
|{��o~����#���e���jo�iw���j�PPus�x2�u��������?_l��c�W�Y=�u3������w��	�q����Bw���}���D2�ff��,��9�yMH�%��B�3jFD����b6c�����5���n���g�.z���~���t^T���-�����j��E4�P��S��>���#��Y(U���|����c~��y�#�����		pK���H���K������d���Q�
��L&��X���d���G�$�'�D�y�my�������2aUcM��II����v'�N�[��Y��?r�rXj�L�������9U+�a��<���Z���0�nb
�XF+��T�^m�E�U��!�hn�neE"sp�������3��j�f�f��{�a�2rAv}�w��/(pD���_������X�_�DM'f�2�9yA��Ln�=��@�g��H*��6���;�l�4�+��S�������b�BdX�j��eh&AYv��<E����~��Yj�H>���i�;>Bg��E���m@�}���26~��i!$�^��s������"��+�b
��	r��A��	y�'�A��z�s$T*�<o�����h����='�y����l��,u���f7��*��w������������b%��d����:TY0;TMG�-���@��I���C���G}���e��J�����e
��o�i&�v�U�a�������u�D%�������/��0<+������bk�<�X�</�|-��������DSYX�AZn�
]j���OA��g4+�K����?����	8���6��]�i����J�RW�����TMzb}���;����z�[�Q.�T_Hg�P�~�	�[
���w�B���qE�|�`����������2Q��[�Z�����$�i:��I��`����+�a�"����b	����#C,_H�a�
:^��8f��(��>oD`j]q��9/��aA���������>/�U�.���h�T�;�����-0T�y*b�H����1�cb�z����1w�,��3�yb��}�J=|�����\X7���XPT�:)�/f����B_H��\X�,�P�����u�n���i��=��Gp���_��6�ux<����t>���+*��2����eVyE
�0�����M�B����\����6ttr��P<��Tmm�g�Z�`~��m��`����&j�'�8*.��-�f�rlD��ik�f\x��/Seum���������Y��!�V������d�8���z��j��:����^s@f�_�����a{��a�;p\�������[����>$����������O[�<!�wj4Ok|������>�B@~x7>�9�A:��pb���e�?�a����[0��$���u�o??�����yp�/<;�'�����c�`z��)HM���.��Z�,����qgp1Z=���,}�L��^^��a����H�cIq�����ev��c�9�~�F��bRT��So��lu\���l�E�8fK}�-tY�>���|����b
(���(�CkK�b�>/]�.�}�1�a�Q�~Y�v�h��2�t��-3O�n�Q|~�H���_��$�Qk�g3k>�q������Mp���*���
S���|I�}�L�>�-��t�����R�g�@�2
������E��G�XEN� �7_�����$�F��U��Us6=������8[�9�X����������������ge�b�y��� k��3�MFi�z�#_%�X!���c}����<�o���W4+��)�oaI�6�X��e&������5�W��W$��$�j����j�_�r6�B�f��U�3�����A�W$��k�����'����u�=w�����6�p�J��)�������������G��_�vNQ����G��������z=�u���9��:�x}��c�.��u���N��{�~n���-����Q��{K���\o�z[�o�� ���N�1^��X��+]��r�L�1^?��c�������o����yF��8���/5�C�G�~��:��������;3�S����pb�.������\�s-���w�������S�[�?��z.�����$8�:�p}�tb��������}-��W�oq�����L�b�.[�n�����}���&�1j����x�%��/�?��_�����g�>W����]������y'����8�����b�����^�n`L1\����b�>���^�n`L1^�n`L1^�n`L1^�n`L1^�n`L1^o�z[�o��f7���_��@����X�{70�����f7����~���T��Hv?\_����/���!v�On�]��b���������'7����
��rC������'7����
��rC����^��b������?�!v�On�]��b�������
1Cnb���~{�!�z���
��c�8������������n��-�tC��\�s-���w��K~�tC������y=��Z�����������n���������}-���?<��qs�<�C"��;�Q\�\�t6�E6�M�e��~p�o!?�!�lx`"Q�*c+*����ZQp���Q�9`i�=+�"$��Dr�����X��S���Ol@]�|�i=Ed��#�����,�f��?��2rN���C�lLo���a�r�e��CT�!z���HuR�^�(�o����_8��^�>@i��*\��Y��Z��:bh�����9���+�n����Yc��p��������Ly���,���,��I�_QS�J�+�c��[4})����@��	��2�Q9�h�u���/tx��M���)�����4���=�j^H5yG������+�(�u�Pd,�#*��\�+����\~^D�}�+�S���aieE��t;��9De���N��
�� �$�P���/�Q�6zL���&K3Z���9O�#���4�.N�(����@fsYP������,�(+���2|'����+/$`g��g!:�-�62�J�Z�}�m�p;��������H���[n����vf�Z�?o�����	���!)i����p���Ea��_=������V���Y�N���$���T�ks�0��������Du�����7��*�`����.@�����Y��H�(��*�}������h;Df��b�L�F�M$�7��������W�|Iq�]0*���e;�D�����FS������zR���~���p#!��%`�� ��A,NR���w�h>�*���Fp�G"z�����W�v�������/(�z*���<oo�Rk����G�]��Z6��u#�1�a_�Zv�a_�9�@8���)\�?3���E�/4�v��$��LU0���4��p�+���d��6���N<m\Y�P�����D&I��k���*o�X�@���b���%{�{@�L;�2���'�f�"qo��3���VR7a
h(I���R�i�4�����������-~PM
���$w���B�s(u4��x%��6���=�Z�J�2�����4�YX����G�M&���/@���7�pZ�S�L[+[7�������F��j������|�����_��d|�p�C���KLr�����)��N����_%4?y�����b|�DQQ�oG2_�q����{������*�2Q�����G:�D�XU�z��'�������k|����s�w��C����_-��+x2�,�Y� ��$k@��$�8��;��cU�|z�	r`������gj=>�?�848(3��if>�a������c���I����	�/��B}�8�4,�7f�����!�y�JPfO�y���F�!j��9g���S���DG���%�o�����x�
*�o ���7���,���z+*��������7R/j�3���w�v�i{�Q`zg��H�$���M�!��� NK�(-�`���q�n��4�N0<�T����)����F>�EF?��[��������:���{��
w�x��T���'�%�o�a���`�7��`�<h�jq�U_�
���r�.M}��A�C��>%���M�yGho���Y���Vp�����g��
,��?���h�:|�`AS��U�~��H��1��`��7�[�e�F���\��u�����s�no�2���6�>���*^�CS���x�o�D��^�W����#�����~�!G/���qB���f�%�����mL`�� x�H;4�@h�o�Q����b����N�5��sh�7d\�C[F\�x����9�@e2���G�Hq��@���"�Pf+�f|��|:���Z��P�,�d�9�B�{��L��8��y;���� Cj���9�qY��h���L�s���+w��13���Z"��[L�
�]�e���fA�u�nTN~��z�6��g����C+�}�jc����/�$Q]�����>��6�gF"��y#-����b�P�
�Wl�Fn.S�R}=+	!��s��X�
��dF{c.!�� �9���u
���B�����_������xSD�EN���ug��d���c�DG�_�'>{k6�AT�M;V9���Z��[�����������J	��	�+�C��`s"�$��\��k�6�|t�o���'Z�� L��W�����N�����F���&�
o-���jBV���R7�
�3���lr���o:gA�YuuO���
�\���������u���ZE��d�cT2[%������cc$�"���6g{���+*J���r��j�-v��	�Lxg/l���ID�jY���/E��)
0�x��8X�r�,���cG�*� �
��Jz�=��	8:,���@�N�e�J�G�������FP�����8�����b^��>��Q1-�p����-��x��J����B��d���H�1�a��ql�g�"�c��TdZw��������|�[�M@�|$�="�icAt�R�?j������$��A���2.$���<�j�5��I�d�������"s"AI�H����:��5��z!�f~��)��	B�plE�q��(���t�����"�1��w:6kUv���*a��������:|�pAAID�I���t=���}��}�B�_������W	���2��B�s����I�`���e/+:�|�m�i'�L��B�Gr_5Z�:7l�3�.�i�N�\��X=A�~��0�/T��n�]2��a��q��&�Y��*�gTP2�/�����sE����\�i������������Y�~����m_Q���S��{�)����-��B�'�i_�T�
��l�����������=��l�*~�l��vM{��r,(�zb�>3Z�h�����1.����N.�t���v�y1���e�}Eh��q�/���}"�7P��:�
��aq�jt�i���d�W��U�����S}U��U?�h&��U!�Ii��t�dy����s�����_Xlps�J�:x���sh"���]�H�n�;f�_QID[3�����P '�!Z�D�����o�c�������kf>�����$�b�NM�I�1 �2�igP�L�#�����B�B���B�������4'��'���������o��G]�`4������zn�nt�y1<f�_��������5w�T��0m��
\�)Gp,��@�6���:k�Y�3����{8�����G��|v����	����=
t���P���O��������7��Ai.����M���2 ,Od<�%I��l�)�GGI7��.c��e'���T�u~�@�[��%Y}�;�_v?Q�L�}������T������bA	��\�
@����X���������w�������,I��[B;�H5������w��z+/�uo~h�X�N����G���z�����V��>���������BF�y�������y1���Q����}%��h�$�J���.P��!�8�D�@1{�����o�����,���k��y��C���3�����p����_O\�-��}j�$$.�����jj�n:��SmB[_�q0��*+�?��9:�!��*���.<�j0��`%����e��+q�������
K=�D����x8\J~s7ed/�"���N���q:	�xI���D���/�C�I"�=�#��QU"��6�R"��f���P��[9��hVh�WV$���W"�xee	h�2������3�+c�9�pe!"��������V2����4Z�����J"����q�V��s�b�S��o��4�����/��h�%c������qbg\�[��W�2���4��C��,��x1�V$�
�z"�O5��]F_'%����������0|7l���ZQ�cF2��H�m���f��A�!�B�����L"z0$���-�%��i��" �]5r��"�Q��(��''l/g��!���rD���V$�o*��:#U�v&15���T�j��
|oE<��[�}/�(co>���"%��g�L���V�-���q������=��;X���5V�����>+���*��X��#U$�����L��-�D�� ������e���������QZ���Gi������cycF���c�B��yM�\\6��Blz�e���+��dJ�1O��9�D��L7]��:'t��\��u�aE�u�-�����o��\������f���^�:l��������D�4�������a'97�^��|!nL�{��	��J��/�E�^
�u�����un���������2�1�2Q������18��/$��y���9!�1��Dd��Lpm�T��k�1�6p6���L�^iA	h������-�1�x��MAI7�S���-�*����C�P"c��$YF�p��F���h���\+	��TF�_H�{0:~ �������\g�9�Px����Lo�gz����$����B�m���
�{6x�������%�.xf�L�}t���x�����7���E��<lae_p���L�{[��D�C��X��cc�+���Z������9��[����B7T&���8}e��/tq#�|G���El��>j��Cd��G�WV�|��\�^��),x��a����#���p��f6�a�F�UG�|�9d�����������W\���Qk�U{c�`lP����w��}�"-��;��7��w7x
:��p��4������w���ov�L�]�p���u[���5�H�0\�Z���W�>�K-Huc�p_'�����D�z���f��}wmf)�	6��D
��y�%�2�]^HJ�9�(�����7/�]��F\>E>���	Bo����;-���^7(����_��
�=kw^����_]�<�W�������H��2��N�#Q`����H��tip�1T&����5�h7�P���z�K�yE������v��)+�����H��d+�����O��\wg���	�����Cne
|��c������a�PE�8�|	%������37�&��-��a�{u�Y	J�e���EG���t��-��j�wE��M�$���A'Y7.-�D�;[C�wny!T[��t���N>��M-������Q)
l2��A��'�(�K��C�
��Q�De�bBu��O������B�|jk�����}�/d{=X��)d����6l�M��Uz268���U)zPA��@��?c�	)7[��!�GZf�c��!�f��|�Gs�G�����z�r�/��^�[���Jam��P��|W��/$`����?JSBQ���lB�o3�O��v��	���YP�������OM����z���W�X.������$��Z�,����9�:
T�L�������*N������
-bh%r~r��Q��&:� ��f�'(�\V����8�9��|�9�B�Q	�P�M-e
�����������mtu����Y�|,[w��v6��1��E-P���&����U���B����[�<��D�����������z���o*�����[|�T�}K��*�P��N!t,��*�9��v�/��T�q��q�a�=��S@x$����L�%��n�=gA�$.H��bC��gt��	�#��/m����c�5\�17�i��=���Q��\����)h��������J�P�Z�ftQ��=y��}`F�kDW��x��`L�W�L����!��J���o%"�|��@ ����������zp�98�Y�W<8ax��@|�����/$�ce����<��{W�O.;:�5�i���~I1�����fD��k�sb���"(�7��,����n�����W�N���(o80i%��l)2Xt��D�������6B�Tw�+����tn<B�����z����cE	�=�a>7,Yz^�S���A����*����_������@��YO7y��.@��|����jdE�LPT����8hQ[��*A����"<m��G����p���i�=���Xl�q4oipFL�������h�0�����xu����O�~�Z�
�/B�����W��_���}��Y�W�
�,�F''S�K�G�"�.7�(88*�������u
�`�_]t^!��l���leE��/��C�w�~{���I����jso
V@G��8�u\f�.�W���n����On�:8��m���/D���1 c���xDQ����vf"�hk�h�"2Y�n�m&�L�|S[��]��~��Hz��Y��kA���b���6��E�O'����z����?�����`i�KK�G'�.��Lo��U����L��Uyr��XX��P�������Te�[����?��V�(�����{�8l������l"�����������d�87u
�����C�h���|$-~��sdlEZ��5�ODh��:O�MF0p�Ot��E�u.��vA�����tA����X7#������j
K�u�cb{Qf��E�C��}uu�B�`(	�<87���"D47M�u3W.�0�q3�`�b�y#"�y�e������s�+n���0f�K�����^��@d�^'Vi��Y[�;�_~��;���>��fT~���i^����E,^�&�����h��C������DJ;]��R�7�`A�jA���K0��xK��g���G~�N�'s�_���N{�H�,k�<60��r�hj�.x����:���*�SB�J&;�`���I�Jt�0{��BU�6�������f� 
�5y��5���d���F2}�#�Y�0e	��f���1�Z���4\�d�m*X�l�F&��zm?&x��"�)�j:������-�V#��;Z��6�����
�y���A,��p0�V��~,h�a����#�A�������+D(����A��P�j��&�N���H=���q�n��ao	���Z�����	u[�%�Q��8 ��X�(������HG��f��?|bA��&@��~V������B(�
),H��N�����D���2@��e.3g����;�N�2;��XK73����qW�v���mxX�UB8��n<)tE��Y�K�l<jg�'��G>����|_t&l��~�y�f2��
�|�D��Q]|V���HG��<�D]�3�:����v����u�)~s��&���4������c�H��*	�*I����L������L�eb=S�fd���x�����u{D�����{�d�/X���s�3Ox�\�Jb�WDP��������������U��M�������6;�Q�y��������L:�@�&�%��44�)�B�'�E>J�D�O��{��v��%���U����n�8u3�/=l�4w�3#�}Wc�y#
����
:�'���H���$��)^�-���G��[*A��$�$bX�K}p�8u��&��c
�%#�[�z@�	����&��$
�"���A,62��!>�\e�Y�s�g�q�9_1�����S$�o�,��.�\#���6m��7	P_�
��@8�/�������F��	pb���.>y��Yy3������v;�9x2%��3�{
�@�o���x��l�z'K���jB���U��e*���x�<o@�Gm��>���y��5�����eA@���W�������
��$�	��-������I5l>������E�9]|���}����N�\��w���X�VI����X�d�I��<k��kDH�!U����~�~�7�|,:"����!�@.��x�N �s�)o�mk��	z��X�O�-Hk�m�X�
��������[�x(2|��rG7
�g���x�&e�x\��W9�H���m��b�������zZ�I
mc�	������=]P��D��te�9�$��������-�� }�m����j���)�[��#4��)�%C-������rb�W nKVL)w����weZ�l�zx+��hb�@68�nI3��:{��L+�&���E/�'��F�M������BK�"X�����)����H���3m�����0��^��Y����P��^���[�	@�`XR�z���"�%�,��Y�*(�-����-��:�O���
�5U��	s�[0���2����_�?�p
�7��l�;�H_�t�������1�6zS��H@	�����F�Y��K�C�� �4W�;���Ye����0���#� k����3fe�" ��$�!~��1��BJ��1�1���Q���u}�]8l��EHF>����dFQJfE�Y��PAF�&<1EP�$�����#(�A������Y����
S v�A�!�L�^J�����!��C��BE2�~�PI�aJvZZ32�\1,U���!�����
<|R��;�����L�J+�}�@�m�&���V>��I��vH@7�-%���(�B�.�T�y�DP<^R]�����B(�]�@�����e((�����(!�7� �87U�VA������;�1�u�<
�����O�8������M�5G@�|�vA=i��y�9���BZI�8�S^l�>�"�1��t�(/�na`�z#�	iE@<�Xy%�`�	y�0N�J�X2�L^��o6�q6DDN��[�/w�tUd8i;���sz"�������:�MS�7�-��M	%����
d��)o��e��LJ�yx$%*x��B�S��4��6`k��AgY��w{��0I��J��73Y�H��l�:l�3�gnx���H�����J�e��RO�sZM��QE�9��v��G���)U����a��b��a��V���j�����"x�x��m�L6�l^��tVh���MB�5���Ny����T>��k�i����T� e�x���V��Ef�����QEBy�@Dr�/3E8���H5�.@����%�1�a������~��}����y�$�����������c1&����������&
m��=,�
�:�����������h����jT�+����DM���8r=�yU����c!�$��H	�����l���q/$�F�d`&L��?�L�a2�'� �0�B7���3h�Y�i�0=�B{n��>��:G��M�����o�l����m7]�y��Md���;�<�&��v�KZ�I4�)�|�I�O��r�A����)O�w��R��f��l52~��3�~������X[���r�^&�v���9p�Cn�����[��-h��cVCy^h��V�A���4G����������Es��z�5m���QY3Q�9ik�AQ[��5��h�#8
\��'C
���1y��	g���JJ��D&�����8�Cdct���������ACu��g��d�x�j�GYa.���G�]&Q����\9�h�t���i���u���]��IE�]���� �Ka9���@�!C4v�����L.s�"r������J����&h���&�L�Y!����F��'��BZm��z���n��p���������y�(����n�s�e��	������P��������914���������TI��#��&��X��3N�J`������!CS>�.�������������`���/��[��
���R�TrU�-���8/���S(��!!���4�����H|^Hdz�p�QGiZh���f����������\=9r��$!��G
�l=�'����y����QV�� �lg�o����F>!������6�`L�c�AR%�}H�"����
Y�W���AS��Az=��-�������v��*��C���!��uO�U����2�C����u5����;�3�����v����V~^����,�]�������g��:�o����u��S����8�#��_���/����&���~)���~M�|~R��#����8r�� FG.����������w�Y��O�~N����-���O3��q���������������7}o�>�kyxEDi��K�L�U~����)���������\����/�_����I\-���x��]~��)�]��^H��%�QzVZ��8�c`�c;���������xW]��!����fY�2A�p���H^��B3/E"�����vq���O���7:���������b�y
����l�h�O�"��H��W2XKm�E"2No�M@�)�D����|�]JT>�%)���O����%C����(?��~^D��%����,J��HI'�?�y�12S���{�vB��-L�"�zn�����|H�D���rp�j4+mA��K�z����rB�3YOZ�"���n��T5�~�(�f�D&�W���D`�sX��cAp����NmZ�I��F�Mp�����b=�����,VS���M��_x�^���Bp��o@��%Y���S������j�*��N���d8\H��\����o��x���>8 u��{%�m��G8���2Y����|��������o�'�b��dr����lmBj��d�
�Z@E4��$���������	@D��F.Z����h��ze�H���$TA���D�P� Pe����?�����.��������q����X7~WT��^���-��$o���l<����F��7:���drX��K-H�FY�e�I�2
����<Pk���z�S�r�������|Q+:�,�q@o�8�q`o��bZ-84g`/����N�n]�������wZ�=g��k����am���[��oy�LDe!'�
�W�}��HT> Z�C��a����0wH�{��q�W� ���\�lO�ek\�i��4��.��e��X�����6]������20b�@E�����s=��N��q�,:TW�����Dd�i�m*t+:��g98hQ7[�� �qd��F��YQ	D�������-D�������[���,/@����x
��������es���lM�9T�D#������������W�}���'fI���i3��'�8%k`V2��+��
���<\�r��$ZP�^T���lfw�J�i_�h��fg!R����.[����+�V�&V�,_[[wFh�'�N�C1�Z��;�\R��<�V$����e���'�����(��y���]'��w'*(�-����%��?�v����Q����@�<����J	D��y���m��]3h
�1�BD��z$8�v���-������!�*,m�A��</A��h30[��H�dQ:(�KE=�4���v�! �Z��]7�c��e�	���9�,���J*����!/���T�����V%�[�������y�[���N,�(�v���6���������]y��/_�����B����^������b
v��d��o3c��@�s�K�9���=�*�I�
\z�(��#�H����M���0M�s�P)8���rB��	�A	�i�{$`!Q[L����<5��f10��x&�`������0�5�����/�����z���Y=��=��N���7R3��NT��}~�������R0�H�ec������iZ���2�}�X�8#b�����J�qv;Fy�+����~ev�%��F��R;������i��|��R�J�Q����6�b�������Wt��vi���13��W�FL���V�*BRn��c�7C���:�O��Kx��X��� ��4g��������68��o8�6���N�����BT�������;���"p���"ZK�`�>�6�Q���Ecl�����E��w��p7��0k��a��k���i���X����GBB�Qth (��QilE������sG�:+����i������H���j��[}�W=�d�����]��7������%0�������]��C�hci��H��%LD�)�P+�7Q����x-��P"S�x"A�*z������V�������hq�uB]�e;����HU����M�5EUP��gR]���<B���������k�SU�l���"�gFIM��E%�J�h��a�Z�>PP�2vZ��w��qW�"���[�d�V���k�"�����G�X}����(��CK��.Mh�����E)T�&4�u$�4�
r �/�����"I�0"����Uz�7�?����HV��*^�,r�_�Uu~���C�n]������M�����WR�"��N���WDq�IAj#�O��p�n���Ts\67CG�	
p�%�vY��v">6f�G��m#G�����zP�
����3����7q��v@:^g�7tr��-����0����������<���9�8���'���Zu���Su#���f��:
23;#)�G�f+�jf'r�C'S&k�\�5D���zv���YGjgA���K�����>��Z���nt��"V�U�L�!hq0��t���m%K/1�`��2�[M���!�vIB���k��B�,�i�^e����z�t��c;���D���{2d}q]6��������S6wH@��;�0X����E=�m������j-��Z3��Z-�l���n����@����l���a���]��	���
���%��}]L&lqHHq4�������C�3��FU�OL���V�\Y������g�P:����
[��F��j�e���)��j��l����w��I�%���mz�mB�����m$W����2��P���/��;�p������"fe���^���zK "��x.� G���@�P���T��*?�P����L�jR&��k�,�&Z���u9M�2��ii@��x�p5E�������=6p�X�jn\&C�����j�������h��� �Y�|�=	
p�n��k�=a`&��8��t5��u������
����3��I�ej��Y�b����L���2hM\���;��f"��3i��6( ���hl�R����Eo�K�-�d�H{,��#V&�uP�X����	�0��*�)���.������F&�W����gi����R?u�!}}���������q�5I14���a�����.� �-	��|�=+B��=�����1���A��t��-+��n�N���A�"($���?Zb_7����2���R�E+�U���Z��[?��DB�\
�x�G{���Q��Z%}����;���o�g2dv�&�����&�Dt�����Wd_�� �wFQC�q��������o�lO��e5������U6�����q����	
�*�H����Hd���F$���Cg�"�a�4�H����`L����
�~�iKI$�
���s8��2~����.h4BK�������Bo�����q����h��o�PW�������'�������9����!������rJ�/Z��o��>:��~�&���4��X`�e����gbzz�&��L����=
�C� �
p��;��C�%=\z�����0���;"r�u��y�����v�q`���EE��t�����k��[��O�l/�yS$�ut����s���7��*a�������:�������Q�L���3��/c�r`O��H��TmXx&��_�����������KZ�`��X�U���r��z�%�;�%�<�b��$tF,�v�&6�����T�LNH�A-����Tqk/\$-d�t�9u�#�4/�q�z��x322���6����YgmOH�7!b$Z�7�(L��+�6��*w`��aRu������I�\�opg���
����d	��M]��16_��U�����e���L�c����8����J�)@gE�Qh��q�>D��
2�XmaL�/H���]���lhT����P'�������X����{De�,l�U���v�����]��DV���C����|k�B6WEw���
k$"{,��w�:P�X�O@���,���r��u��r�;������q��3�u)c�X� ���D����������D,Z���
�{V��b��������o�bo��g4�������Z��L�}5�mu���S�&R��&k���m��	�+jyeT(�o��a[�gE	�^����9!�W�����_��c���(���d��;�FGG����o
I����B��np�
@�z������Z���;U��8k���E��6���Q6h&b�Riw���pJ6�QZ���ol��n���q��w��u�����;������F|����O|�\���:��8��Q*���	
�a���<�V��By�����?��M������(�������Z���i2�EOOO]��shD~��X��C-����PJ;��~!�	�t�G�TqI����:� ������/|P�.�{ �u)�h��i$���z��HE��tm�Hn��kd���a3KZ;����]�W9��i
�.O��g d�"��(������z��`A -�-��!_�����]��}22��,�^�7H y,FY��w�3�2�,��+$)b�����������{Fos����I	@��i���I$$5���"2s|�L�Mddy]n�5@��
�Z�����%�=���) 9�of_Q	�r�������:�Xtu�������P�2��� �n(���B��]5��%��;����[������=��SV&��g�i����#	��;V�$����zO$.#/jv�2�E��_����{�V���c��4��,(T��$OY�	���qL�B�.��SB>	����K@z�L�<�z����:L���`�>ML����_�H��)32�A�6(�O�QT������;/+�C&������q�A��8��|d�N,���\O�\�.8��|�m�����C��N2��oO$�;�w\�76����/m��u2��1�dFN�l���%����S�Cu���&EY���� �c���`��<�f�E�������+;���[$>_<�Dth�P7GVII�@&W����8�+�0�Z���m"�j��������sHR	���]�9�P��31s?D:I��������%�ur��8�HV�����U&T���g&-�*3��^�u2���`,N�0��M;�9�g�]�+��'WF����J`<@
J����,�1}@i ��=''��a�����J
�0�;S����L&4�qvaE�R���2wi����*�:z�r� bM��^��nANl:t}��
S�waAQ��*�78u�:#(��v��83���+�.O��+(�
���"��Ami���b����EF��z��%����'E��F]zo�����m�_�@���L
U�y�H�}v�M��a����yv��ec�]��Pi�.�����X:	"[��2p�b�O�]�{6 `
���9��0�������m�N�����sHF	w8d�'�"H��[��3��Ep������"�|���|�S�{u��H��h���8��.�	�`�-�*���p��q�������+���fA�>/�B%���Z(�[��=�Y�)F>��\����O�V�>���=u���8���E�Sw����8�M���/8�T���IG�b���K��;�|��B��,05|���B�{q
�d��EP������������:d8G��[`YWFx8o��#`�
]��R�$�����gre1�|tN�A��W�3�$��N�L�%dJ��lV�Q�6J�E��3������F/4&������!�Sq�y��g&����*�n�Dn�	x��������l�1�F*�������|2d����D�%����n����o\DLYO�������2���X:$�K?���OyL�|n\���S��st�(�i�q%W�C�r��\�o�F�r��:�	)�'�����C p�!�����2;�(��(��2�8��<��w�vc�wm:%G����gA���.q$���e����Y,{ga^����C�����6	>N������ih�C�+g�gy5��-(�T%F�'�� ��@fe���l�����F[����SH�t��4���������YKM�J���`-P3%O��+�G]�sR�	%`����`<�"���y��hju�K"*q�)��db�	�9�F���d�`�6.%����=�\l��[n&��]��ucH���|� ��Gg�z�7xbrN��WG���{(F{�3%*��T�n�Q�j���z��p�L�y8dX�����Oi<`��f���@D�p+q�w�[=KH�I��~��A��z{���3�ifW�����maE.��vm����e���Z���fQ�	�W���i,l�����t���m������*?����{�?T��3�Gm N^8�W,�I��w!C���C�b��^O{���i�1�f�������`�nN���HD�Ud�>�q&�0E<��#T*�h$��h���|�����+�E'x=(��g/3�!?�����yF��t	T"��~X:�!��\�V-im�JC���u���;�8����Z�j���{�|���.^�?�Z�������������{L(Di�5�U��q��mC��
'`�R��gAq9�����p�_�/�81!,'��
{v�=+�����@���������J���r�d"!����~���cS&�.���FPB
$���AP�F��4��E=a�1f�w4-h8�������������
�1����bBd�Ba�y�n���(����nF��y�,�C'�s(m���C�k~�I-�6u�YM�;��`������;����D!����K�U� )�������q�Hd��h���,A�N~�5!y��r%X������J����}K�C���#!����W�b�smv&�S�XT���%`{�X��>?D����V1��6 e"�U>xfZIr�AIU��D��,��+�������������m���dT��}���E`���C}�L��c&�����a�J2�����8R�����I�G5a�m�GT��4jiVcu���K���WL���7�?�	W]�@MQ�Yib��rg����|y��o��A����>:�|����]������A��~����@;�z��fFa��� lZ=��e"��T?��T
�{�Y40�����#�U��q���[��L��pTUMp�����������p4Q�
(������U"P��=�����������0���#1:G�����"*��c?z�-��[����g�(�u�����`������Al�N�p���X�D�C-��2��5D�Y�����;iC����H��GM�CA
���\"���i�7T���������t#���fZN����%��	A�����8��H�[��wEn��3MFT�<��(���{T���>.6Vd2��H�P�R�,K���Wh��}~,����+ea��������������������yAa���0P�m>V2X���L����Q�\�,(�{j;X��;K�?�F_���L��I�:���!�����DO����+q�>-��dD~'��D(��� {`��K����*_j�"���d���
�b�\�_���L:�x�������O�C����$���6|��j�����O�?�#�����
f�����m���K��L$._{��~�'U�[�#����w��"I�*kP^�*�T�_���9N��\%���Y/�*�)���eD�K��������4#r���������s��������������?�����t�gwQ�I���������;���������C�s��w��-��u!��~w(�?+
�� 3��s�rY�`��N2V�]�����r<G�M	
 �{�1{������l8�)#�e�i��9`��;!c�L$��QPW����.�el��'>��Mv��3B9�G��Qjh(��wE��5��r��DF����+�P]��
8x$���"<��ISpOG����������'���A�wE��=�,�A�����:3�.|L�wV���8�ef����s�	"*?�)��BWd����S6�!���@��zz��3���#d����V�_V������7#���]�W���$U�_$A�}�X"��?7n�M����B�,K$RV43�����D�I!��]<�h��f+*���"S����T9���-n�����Q��iftA�%KA�x3mK��3��& �0DC
���������Y�"�D5����E3:��e�n��(����_�zs@[z#\K��Nec��Q�7�N3�3������)��b��@�v}�R�af�]PQE�m����v�:5� ?�8���	��egv���fC����{+�������	����X�U3�tN�G�L��T�@��D(�H���z:�	
`&D��(�a��9B/�-�C�'3�3*���(�G3:!i��E;����'��!��%7�]�����h����c���	}�%m���M���#�"O��tF����N���IN�+�S
�[�	�����D1�U���jVomrsO3B������E�:�"�4[��d7�
@
��S��i�I������T5���-k"E�~���� �n�Q���{I��>�T�CuextpI��[h��]�?3�2=����y�Q�T����}����:��'�I����e��{�o\��f���wtPo��H3�hYo(�e�+.�;[U�>/{�b����������h���v�*���V�_��r06���	tV�L0�z��\�G�����ye�����`To�k���g��)��dQ3)QC�E7k0�Ef�����C��O(�)���"cu�����"o�]8�����$�k��8w{"�WsW��z3N,��u >U���
J��"�I����tAX�V�.�M�^Q�����3�f���6���A���]�H��?Y�uB�4��_����I��D���9���v�,G���=����Q��� V%��|����C�~����&�����T�[�YMF���F�����BKr�dj�l�AA3I���qj��V�U�.��d���Yg�D�6o��l�Y�4��`�2�4I���I���o=<�*�[3�����D�MsB'�@�=j�q����:G�~�T�P����t�N��@j�oM��(�z�7{!v���k�gs$M��a(��=���3�������{["#Vb3�:p�{at���F�]��0�����W���/S�����h��4N@�Y��Y�p��.f��M�H�/H�����,�s>E����� *!�Q#�2������7�%GV>M�/�I���(�$��d�*s"&$�v�Y9�q���D�@3���mu2!����e�2��d��C��st����*��O '�� ���JD^<�����Kf�L\��VIt���h���U't&U�&�|���s�����a7�%�A��x5Rh�h~��]���o�t�'s�)y���hT48��� ����h��;m�DD��	�br�
U�� }k��6��^�$����nu���o-G���A����L!nnYY8X]��?�$V� ��������:xW$���=����s#&$	�p�1�r`���J HRfP��8���5o]���5����{"�� ��vq``��Z?I�&=c����
��o��6bB�4^e|� ��=��7�i�n3�",����av;/����@w�u���w�����]��$��5����"�4e����xy��H$�#
�q�h�I)��2�-��Sjg��
�ru�2�J^�=4�??��25y�ICYY��&7���N�.d���]�^�:O�������25��N�wa�s�_>��d��	@���Pu�W5+F$����#���Y{�����efSSvD��G^!z��L��<O�3��� Su�[&����4����tuz�|����f�^�4M{�
U��<7J���B�,�<:���e2d�)���,�$����6��Hn9XB-&jm������d�M=E�����53����G7��6	�]��q����r�����#�@�9.�-I��H�����i�3�5h�~f��M���,���(9�~�%��4�3b��Vc}6�b�L�\�`���"�z��_T5|� �p�OYL����/7l�`0�' �$���g>�]3���������,���� �N�+��%[$U~�l:�|��g�A"��
f
yk"�@P0_���36GcA�7��b��S�,m��.��t������*���l?,�d�6���m?�c�w�4�����y������Px�A�q�{X����cAAm��I���gw.k�CC3��2B�ta.������L�QtW������!3�p��z|��k����5c�z^�	
@s�m�K�K�'��
@�-��
JF�7�L�H��=��vcus&���5G��!Y�DDV����S�3�[BP���.[�"�����Ujz.	h�;��{���	� b�7q�	�H�J��X��Bn�Z�uRJp# �.L@�	�XT�,g��������h��i�>�s�%4��B���_��������1����H��bl$�b�����v�	�F��cu�l��]DR�S�>4�f�w$]^����������������$X������[�gMe�g�@���c�D����#�
	�0�k��j��t�����E��gCqJ��������y�q��l�F��@4<�����a6��2�Yy*m&C6�.�n��sj)V�O�F��.|�2�*�2��j|��G����V������N�:�N����%~�SveY;�P�]�4�=�H�YDs�C�)����a`��5l����b���^��Q	��C�K��j����)�������ei�#Yw��.K���"��n�l�����$�VzaU$r��P����A�o�.��x� 
���S�����mb��bg2d�B�l�!�gYu'z.Zc��/3Bf��/�@F����~�R�����c�]���{:#��rw��qy��g��8����}�@�D�11
@����6_02��D��=_p���k�\�t�Y�g�.8�|��O���|��kr����&!��tA�/x�|�sO\�&!����s���U
9]�MXU�O�h�����������#(������z�{�-��b��4��b��8�:�b�{.���s��\��mG�@�xE}�����/�r�b|����x�|�xE~��uz�:�����}�v�?���r�����5r2
S����_������	r�`��#hd~�t�h��*�b�{��>k|��J��a����6��1b\�o.�����+l���D�b_��a�W����	����<P�+�r����F�<T�+l��cE����<X�+���}��6z��"\�/Wl�N}���_�H1�m���^aCH3��\�>���s������H6�S�U5m����g���c���_���[�����������������������������������������������������������������������������'7F������}wc�������c��1�������#��1��8F�����s�{._��������+�����|E~	���m	nL�"�-��	W�W1�������]��f�yO���'#	x�d���
��3"���;W�>3$G���<�V����D
~�������p����LF�@�Y���������LAI�|I�{�v�� $�Dr1����A�4!��_���>����s��(_���En1fe��_I���.2|���)��Z���2,Pj�����
�d���EG����W�N�2}��J;��p��q�2#���KMJ$��n�2�k�J����
)�}_[m\>yv�L\��,�u'����>���L�m7�UR�%��YE���<��]��0)?��X�I���,�&�Z�S��/AIH�v}`cG��h�����"��\�D��(�@C��B���i���:;���w!��~+����H���6���|�gA�O�G�&� �f
p�����MQ����?\�n��U��{�#��T�M�<bT������O���vb�M�����[� ���}qS��8���"%�m�E��e�L�O��4��O�u?�����.���^����yO�6���NM�^��J���,��G[�W� ��Q~y�6�Z.E���F�k7\d��/�\���]���$��7���5
v�~�!�%��I�MF��s&�M�7����]Y��z:��x	T�bAt�������C$���(N�DWr��H�������A����*)�dFe�Y=�Z�w!C�p@���p�������	�'�����5m�h��,}�L5��4!_f������PiD�
���"�#����>3;y�C���hL(������������J�Lq!���\����hl��@��������2�6Y}����2��m�33M�\�[��
�P������"��0PyR���(��3�a�����������7���D&I�n�����2��xH����!���E�vLd���O���Eb���`O�����p�-8�$�vB��dK|�fD����{g��35���ho�)?L������!g\�T�C��Hd0o���{�9�$�D����n@N������u���������O`���2��rj����w��M��H:U-�0�{�A��y����������� b=-.��4G��8>!)�������w��x��7y���]�������$k������>#�O�m&����8���"��������1�_[�����9���_��8�\�M�����]��_{�1�SK�(���oD���,�K��$uNdT�hC]�l�9<�����q�G3������2���X�;��b�8����$����|�G�LKk�B��y����]�
��G2y��cJB6 J��G���{�9���t|�qox=�}A�g�������wax��������0]����
���t�d��]�xQ[�^~��Z����(0�3��`DP���&��}k'��
������q����X�����y\h6��J��f����]���B�C��e��;(��z�������<;\e�,��*�Io�K,�].a�/���dNp@n4m�������C��2O���	�	�4����B$����E�n.��:��GCz'�����1j#�<�ioB��'�A���x/��"N9�x�����k�e�N._�
r��������Z'B�h�a��D1�M1M�bc^��!&[��Q7"rGF��t_���(��8������%��/��hL`�� xW$�C �����$��85id�o�c�����N=����*[���+V�t�_
5�H�h���z!����Bt
B�����Q$��
�p���q�*Qq�.���|��<�H\�*�'�{v#�c�d�O
��a�H��EK��13q��$gNZ�@���Z�����|�%] _���$�a&$s��������G�y�PN���j��M��jlSZ���$���B��`�
 ���������H
�~�1��<��@��p	gn&S����M$L���+�)ZP�-6 ����E�����Yk_���B�b�w����a����E.�����x)�����p"���/������P1�v�2��Z�b�K�������ITn��hi#A����!��?�r���T6���N`���D�&��s���rN����q���G�B��t��=����/I�f�R���W���t��/����(�����z�c��5![���8��r����V�$���1*�������-���o��H�k�����z������^H~\\���-h�� '_��|p]�d����,a���E>��H�����
��,�����F�Q
�Z!��7^��f�����������l��r�5TRu��h������$�@�^10����$�5�(�"�D*�4��Z���k~s�
q����G���$6���(4��o<�L?�$*��6z
���������]�m���#���h���%��G�H��*��E��=�e�H����n���)�C���8����c�A�#�w���e��y0��F5��v.��
nF�f$�3,���%��X-3��7�k�Z�W�Q�U����3Q�����aFAI���I�9�Yt=|����/c�������_�~	�����oT�M��L���i��|������1`���q���
��x$����/�o{�h���VC��Hd���i�[P���A.��&�q���0�����	g$�J���������E��;J��M���b3�<`������0����wh_4Q������0C�>�!#�e��w	i�'2���������~g$2_�r�\�-�����l�(~Wm������� ���P��xyf���r�I;:J*���5`�e���~&�<1t���������{�t���`�
`��N�P��w85�C��=Xu~ �������O�+V}V��U����������&$�0����d�dYY�4�=��,�����}�����wE�����ck�M���Jo�3����D��N�%]U:��c��{��Ekf.��]�=�*O
2����y��[73�$k� DT�
rt^����uP�3�$���"��_�f4��	���	�bGYY�����b��kc2^AWE���5�
b{���k�J��G��y��Z7����
8�����d�����M8��P����]	<���Mv���A�S��;�3C���
+0$�%�P	
x��<��BL,(N����
�|7��47�0Q�]	;���F���g����v�?�J���6�no=�A�u��
�c_o����D�yt��f�Tuo����'���^s"��E�w�^1��3��)����/��������0�7����%u�k�H��("~%"���w<��V&u������M��]����L;;�����Dw-H�3R��ES��G��o��l�{a�.L��9kQYw����;�Dv��<i}�	�w��<jx���0O�oF���8��\c�8�����8��?��g��������
�������z��i�$4\�����v��&��"�B��3��"Z�[eFC�Os��tG��}g����4� �I�o�������'���
���m"�x�S���:��hTv5'`���>Tt������E�����8u1�d"C�M=�>DU�tw��y���lN3������V��z��������`����t�2�d�������hW��<��MW&2d5�C��JF80COf+p�2����V�K�q��LD
g�������
/8��RN�!-�6�h�[c��[P������q�����deZ^�yW����D-�X����
`M<����3z��Oo�l����H�~����������k����f�x��6F/#��#�O�I&�x3*��
�����LC�����������A�|���r�USp��^
r9N(��
����&0D�������F�uB��x�o*��:#Q��Jb����D�j�������t�N$4�M��=���(����35�7�Q2~��1�Q������	I�1�u�1��	x�,��@��	A_5/s����1�7�!�rS�R`����E�=c�&���9�fT�~Jo�_����c���\����`�x��s�+~?����n���#����\���V��a
�5;�2!�V�@m��C�H�{&������Y�Dny�����m������	�,^}�/;=P�.2X���a�5�,����raR*���o�E,���B��Q�z�+�@��c�:��6������`�����������������2�k�K�@}��	yl�0���Y'�����K��������f�����	`��Y������[�|�N�4�'2�#��T��n�q�|kD�eQQwTkMic�Ir2��F`]�����]!������	��7�V��'�;���������>&XP�����5*�,���`_j����XI��dex���1��Bk�l��4��C�B|V�u����k3GOe�����K*��]������3�D���l|�fwe�����~����S��x���s�x��i�� � ��i�}eBp\Q",��7���)�RA?�D��Pd����	��J����u����C��i��z�$�z���X�����Z#D��DT_�F\YY����kr�&$���V�]��f
�X&mc��{,�5f���Po���ze�a��MC�S�~A�]tk�=,t������O�4�	�e�43��.�?A�
<����n������;����*�"NMXu_Iw"��]
���eco�J���l��cR����Q���O�0�2D]�^F�-�7�C3�y�.:���|�Z����81����x���
�+�r��o����t���4��(�&q(�C��h��{xD :��������&)�u����xjr '��^XIH�\`Ky�Y��������������Z����O�g+g��we8P����%g`A�1^2�����Xp��,�J��Y!t&��6[���^��UE�|��g���EV&D�89K�O�H7#���e�8f�~W��F2V�m�>i&TR�8eO@>�ZP�������7cE��qQ�;��XI��q��+_6��	���1D:\F	�
�?����ee���O9l��i�S�A�\�k�s���W&��Dqw�����}�$��K�Y<8
�����.r����w$/b�+��Qx5��&gC-5��������	X�E�>�1D��������U�14��Ah��(aMi�����v��7g8baB
cU����\��	x�.?!!��� �A�G?$���XfeB���Y��������Y�U_��h8b"�J�fy��KJ���t]8[Y$X:r���p��qL9{������u+�Q����.��bmA_����X�f��e$�,���A�R�*ZY���F��"�U������p��9-�f��:*-�����L�?�������d$���
��f��jC�T	Q�E��[
�,8��2C?GW%���M���fn����>�b�x�Az���*d���iK��k�����	���%a7i����~�����r��-NBOrb�b�K@�3!�����P�5g5�3C���z�~�'Q+R��m����E�v�n��C��	�_Umt��y��&&d�Ok��hKuneA�en���Yfy��(�<f���1���,	a��u�s� 8^���v�TUD����Y}=��W���A���>A���So�+�\�+i
�@����`�?o����uG��F�s����}4�x������Ql�!�]qe ySY:�*���dd��5V���cF ��Uy6������yUX*)�s����U�����Y~B�q����H�������i@ �|���R�	A �����b�4]%��D`�O����gt*+QP��G-n�cyaz�Q�{�����"��j�HpP>�����_���h�����n��iy"�/�����6xd�&h�z������/���.�}A���p�L>��X���d/�x��T6�,�
�8X"%���W!�9KD����&o��};uZ/�D7���qk�Vc-��1�r�p����O���p����I11m:/����yl���%n����0XqZ��b��j���-�/�G�fO���,��=�1(�{`bp�|��:��2�$3�O�����$���4&d���LH�q]����Kkr�T�	�)��������&@��)
��,V�%>k���@J��xs��r�Uu�fB��l'A�>�����"�F�rV#�GC�
Kq�� 2[��l���D ����������J��Y��*Q�_F����J�#������	A����]:���S�	�<j�xr��J{WVz�I�<o5�B1�?��?8t�ZQ���[7��]���2� �����rbh�K�����?���A�;I=�)������0GP03�'��b	J������SW���oM���9�2��|�����9N@����m�)� us�4�8���"�8�Q�����sH�<g�[�:�j3�Al��r��]!�7�����l��� �)9O�W�F*��$��S���~���e�n6$G�6�i�-]Q��iN��q�=�j����FN� 3��P�X��KeA��8�'Lr�+�>�I	����9�U��H�{�Q���]%q�N:}��5�Y��j��&���,G������V��m�/�j�D��O�6i9v#��9��O�zv�h��	�/`(�F�Y� ���j�����S��.�Q�_X���x��t^C��:��Nv��F��}:X����'�f;���;@Q��V�s2��}���������Vu�����c��U��H���|���E����'�M?2c��|g�l �Z����u��i�x�GHN��#U���pj�4�!����a�8�I,���z����0Ia��?�R[7�����x��}���y���19�F:�zhK���|�y�$������s��@�^�S�������@������6�)�QP����T+gp����&�&s�qL�_tm�mA��~�����E~��.#���\����j#��������W
Vwf� yWVR���������L�|7��1��n�+"h�5�����eF�i��IV�e}%�%%
�D��&�a�
��^�!>O
Hj�:�+���N��0Mj=����n��� u������F� K�&���������������-����Li��y(QP{������;]�	A����&�2�4jTB���O������������n�&G�J��l����t�Ng�����<� $U���\�����O��`4��(���0����	� �OC����d�A��2��!�w�i>i:�q���2��)��s���8�(~~a�5H?�[#��r��y��g�=���g�r���.���;����C��(I zr� ��G$��d9���
��'JB���K�\�>K���N�����ie3���e���AJ�Y����@"<^Vmq�8�>���)�2�ua�+���	W���w�S�����]���)�wM,�K#"�v<�<u�;C�axqU��)W���Jp��M2�G�:���y���L�8t�f#���Y�q�"QF��S	u����Qg��OP|4;p����X���C}4����@T|�fr�����������`�k���Z��|)T���?�0����"yt��q�����c%��Cw��'�mf����N��������� �c�51!�D�L��23�����\���2)/�yx�vg��4jF����)X�U��!�~�f����|��������U���f8�l���Q��p���D�m��SD�����w�	�4d��T{L1��?3!ha��-T�<v�9"Lz�Q�I�-f?u����Ep�<�H�<_<�<��	�$�|��u�����Mg2�A��/����J�����j�O�;b�/��`�* l0��F�e�X$f�/��`�'�2?��^��0�<A��Fv��n�)�c4�����{�:������R��j�4O(5����F�0_��P�����'!�w0������0_�zj_�_|��	i}���0OH�y��|���Y��0������9$�,,f���f���yb(��
�x�s2�3C����\['��5.�JS$�6Yf�d�/������6���3U�-j��C}��3��=�6_;;��	E��Y��Vy�q�<��q�<������<� ��-���#�LHNX��@e6�pf����������@e�":e��		Q#�� ���nQd.m�%���}"�7}��3�
	SA��B|"����7�P"MM�w����1�K5����X�eB�e��=������ �2NUU�T�8N�&��8$
�����O�����
	}���_T��l9D@���B|(@c_�s$�S��4P�QC�w�����tF���N���EP}�:�Q���v"��4p�*��D+q����8
L�T�?���H��(B;��%��(�J���'�����(��/,�jKX���v|��OGi<�����-N���*����t
hDw�M��Mu�I��To�~�U�Pv�?>��*�`����JDO�W����� ����8��n�s��t8��N�	���2$�s�`�"��M���XB��Yw��������:�+|�;O����O����������E~�����y��������.��_b���Uldo:���Gg���	����]�U��'����om#2�wb�<Zj{�}�4�X��oo�����/�4w�6�7{�@pO'8��1}�~_�T��=P�WMl�A�k�9��9����?�W7�M��D����95\�����:�Q��S37M�9�b��>NY3�������f5>�[E�u�u�[������n}&�a���X���������y�uF%/���]Qx
NHN���C�aN�hN91�%:����S��@d�5m�����6v���i����1�4�t�k,�b�Sa���Y��,�z|:�����?Yo�W��<lP�������0�����weh����>fUxWT��j��y������h�A[n�X�8 2��+��������rY'��(W���J$��x2����-"�Q������g�~bt������0�����k�a=Ev�|)���6���<� r
)��>��Y*D�����O���C�=�C�:�bL�ge	�"5�`������j��<����U �Q�OF<J.��S���]��wA�o���4����Y�4�V~�?!�����J(���/I��a�>��$���LdV�)�`��[#�Y�S������]36���G������G`*��d
��ry����@�����X����������z� �=+Qd����aO��s5;!N��>�i��=�fd��4Wt��A�>��O����><S`�m�5;!��&(����h[[�W�'��9e��Z�� ������kJ��pQ�'V��}�*�zT.W[����E���I�Q�U[���������0�BW�U[i{vF���3S"O�������?��Q���g��.<*�+�2+���b~�.hA�Y�:Qf��`b�rf����]�(QX�hQ��HAA-�,���S�Vm�N���^� '�bn$����t�Ktnd�Q����EM���<��W�U.��A\4�b���9�U[�@'������{U��A�j.c��:TV�6�^�_���z>��t*P0���"=��Q�e���e�������6�V���g����x|��kp�4��DTuUn�������,vX`�X�R������59�
���:�A�;���:y���9^���P�r�b�E�9^��������J�"K>�#)��'����/������5�w�;_B�n����+����w���}.���b�lg�����	��������iV�*�KS�+�:V��2Zb[.��]�6��O�U�Met�U�����k���&-����_����K.��+�NeL=���������?��E.���|��O��G?�o����������n?����������o�������\����P/�7|�:�t�������E�L��{���4�H�U	2>�n8i����sp�������2A�p"P�����6&��d,��_�l�
�}JdU������#���\
��%���=�<��m��iA�z�,o	i����M��6|=��sZ�
�h{���*!"�l�������M?/�%C^0��s�y��D�~2Rq�D��������M�<<E���h#S5��x��Rp�O
e�Ml9K��\eSsU}H��x�H�u��&�hT��@�������XG����YN8q�zVy5V��4���.�
`�$N��U?3)h���g�rLh�U�v�-�A���5��x��o���U6]��`����j5��*���������yY�92��(�����<	����v��GQ��Y���Xv"Is�-u
�@�c}�Q���g��-*4fx���`t�^UY������q�y&�xv�
q���`�39fO@O��.$�O�'���*����L�,s"9�����	`�6�\��#�c���zgg����$TA��W"�-(���Qd�k�[l�����?<t]J���q,���}t����hF�wk���n B���f7Sz���	8'yo��u�])��Z1|��p���`��t"���|���������t%(�!�%����7�u���d��iK����g&�����`zv��wAl�3������f$@�j��~�����}Y�j�*��DT&r�.�(��G��|B����)M
�o����c��7�T�rB(�)*����$�3��@R_���G�*�� �t����#t��@��8�1]����p2�t��@��:t��q�3���j��t�0 LHr�	����.�NHd$����vE&T�J��iD'"EKm9v���-O�'fi��R���x�b�DA�T�m��H�;�"$�P�n&�}�$e��z����z���J����v�H�����e���1Yy�����l�$RP^D��e6�;@%]tL7m:)���dT2-�&gI;pp�������HP�[[zwF��S3xh!"��f4@s�Q����f4@�s.�u�%`4���i��!��8��f@��i32*(�)���m���?�~�`�i�Xy�U A�7��\)���u;nu�q��O���i"C��1��l�vb)c&R�3�+<�����wF"_=�8i�'f3@T$�I����&~�����?cg~"�5Xw��#�{�V���a�+o��G&T@X%�O1k�#���i�����V	V���C���y���k���P�����]���;��$��-�7��sl��K,�7��cf���{��:��{�9"~�Hs��<=���mH�[I�O�������t<2G�?�E�w_.�.�������q9�C
��4; n{���E��H��-b�.Em��(�����9jC�������g6�R�@��:���:Y�z�g�@5��$����EY�I�K]�����`�8b�+4,��s,�q��������'��1�v��d\q����}tBh/�S�-,_&e��������F��l����:�����$���wI�����$�3��p����Z�*�pJ�(G6oN�f4
���@o�U�/z�(k�7_= *������848s��D�P&�Nl����LD��:=~�:�a����y������f$��@� }�eb������Yxv�1t1��G�Tfs7���Es;g&E�r�)�K�XO=������g><k��f���f��XKx4�,��v`������"��0���������(}��	^�.&���)�H��xus*�w��h3x��*�%p�_�&'�K��lgZb��
�T������9���x|0����G����������k�SU���d�"�gFI�$)e�k��"Ih���T���@M���G��qW�"���P��P$�*�����X3����G�X}��$��7Jv��RoF��IV��v	�E)T�&4����6H~�_����������	�����i1F�b���V��1KX���_U����xN�.���_<�����������P���d�+�8�� ��
��ODt��5��]�����:jOh�;-����8h' �ccv�}�~�6r�~�~���)!l�~���x��(�f�6��+�4����ox���Q)�4`Ohs:x�A�o����g2�����������J?��7T������ee	��}�4������[}m���L����&YC���!�C��v���YGjgA���K��.���>��Z���nt��"V�U�L�!hq0~N[m1M:m%K/1�`��2�[M���!�vIR����/���$Kh��WY;�"����.]�3��GL���'C����q��A�hz���?es���\�C�e�LP:Z�a��}:�[�N�����a�V�pQu�J�Gd�H���y4�P�2�w�fA=�eA��w	<����\R
p����}5����$����Y2����?W��m��Ni���9m��������"Z=�����MD��0��g�������I��x���6�E�6!���Oe�6��
DYAopY��`���q��`2��9���YYa��`3�'�3�N��C����_Z+���i(H�k*�|�
��(A'
�&MD:�a�[��t�3�.��^�5�Hq/�����^�t����U���d��]C^�4�T�L4���� �4�k�<�mA���7�J�g.��9MW���\G*���<x���<oA�T0]�F>��!�����O�-+����mk�S;�DD>t&�1�$�X���\j�`I(�O|`���w�&Y5��������}���=����3�'���D_E�,.���/�:K��I�����&dn�k'����Qzt	4��_D~�"�D�aSrKC�3�a���vrrC�=	
c�<4���!����7����{�KO���H�k��8mp&R-'+E<%
���-Zqg�j/����4��DB�\c���V����O�(qd����N`��p��r32��
�l���S f"��P	c}�+��^<rkBQCq����������yz��pj\@M*������a������>M�q�h���@��_K4YzhD�i�
�:$Pq.���j�f���g4�����-_A����|�lp"E����L���SwNg4�����>���B�l��f�a��h��o�PW�������Or���=r��g!C�W�E�*����t�����c�;�p�Y��	��w%�<�lx&���m�Q�������(@��4��6�t.t�DDDp�A�{Y����]������G���N��c�`o��?��wF(*'���Ud_�p����~�d�x���"���T��.����x�EE8P	��������L�E���7��A����}&2b�e�S����)6���	|g&��_�����������KZ�`����U���r��z�%�;�e�!����8	��Fv4|��(N����������*Nb������l�3��~$���%7��^O=<p&CF��Q���u4�TjF�D�		�E���]@]�+�&1��������R�M�m����[7��3>�Hbx
kw�>���6_���\��_T�r����0��LH��Y�]�Q-L�����C�o
6|?C�:����5���Xf�B��,(� &�b��������	�U��v�B���x"G�
�8{|aBL��x:�u�XY��",�%Y��/�H�������a3�N)g=���-'���j�!����'����X$M������������"h�l��8�
��~�XS�A'$�[��]��%�����=��w�M��EP��,��X���I`����"0���<��u"����a�!-�UZ�s�����Iy#U7�m��M��%���������D���e"y�:�e�������s���6�	l��x��:?���	�
����^!qtB��QT����"�hD'����}|?Uu������;/1��G���c18<�y�
3��S���@iX�5�����?nE��"����Z�6�`Z.j"�1��	�(�.���,C�&�%���/����~>�	c�x���n�����r�4E
I�]��K$!N��7��C��+�e^@_���&��|����5
����\jv����6
*���F�/��q�)�x\�	�����K�S�1+C9��	��t�_Y{G�Z�z����jgp�B`��^�$7^�L�{�	���~�����	?o�`����\��>+
�!~�0����
�w_�}�!_��qG�9�DE�~�d�+$����@�I�2�*�W�3�3�,��W���t�E�Gl/�H�gtF�oq������!"�}1����PX9�t����Z��2
��A7�k
 �]h-�8R��B��z���4��mT�����%��$���u]����$�<����sA�P !��$y�j��Kv�3��~��U�/~��H��>ee��{�����x����4�+o��o���.��G�Z��Ve������w�#�������� ���PQX�<�z&�&�0�y���?[�:%����_^zc�I�$yD:L�/Vu�Z����aj'�T�A�K��O����k�7�A��\�{?���t�y�OC|g�e�0mM���[�Q��G�$: ������b>�"���}�:!etF�.�8��m:� �L��D��sy��|c��;���������%3r"e{x�p;d��0�QT�������n6�(����^�����L0tQ���Z�/�J����s>�E���K&:4L(��#��^�U [�B4�A�q(&xW$ja"�B����D"��OE&���M+�~��_��s��,,�����$����"��C�����p��#Y�����=2��C ��`�h��x�z!��p����8Y!6`\��v^sX�2��W��O:�8�\:�XP�������Yc��@��{NN�{3N���g6�y�R<������������H�s+��j����Kc�[�iyW��M��^�dcF�K��-��������79��XPT���78u;#(��-��8W���+�.�P��+(�
���"��yni���b����EF��z�d��*�[�>��8�)��r0N#��.n�<�B!������z��P�0�2��{��+�����1T����ea2�5��C���u2������rW��
�Si�*�����"��.�-:uf���9N���p�rTE�T�����+B3���)0y3$�E��E���t���]�7P+�����v�8�yB'8On�!*���p���k13�W���2�����L(�'�P	��Tj�nm<��Fb���
p���m�}�����w �yZ\���\yt�O;�k�S����>w
h���&$��������"�w>����:���bj4a��v��V�^\�Q�����T�5xn�*Gy*�e"x������A�������H��A������3I��sg��GYL)��q����8	�����y	��LBi.vV��"��v���OU��I]r��	9i���q����F\��	��@�u0�����,�
`����;2����h����[b����*���g!C�p�>=�K4]r����~��&�E��u�+��9\	e��/�t7�r�)XB/���F|���N OU�����<��M��H\	�������=�{�F�r��:��6.�M��h��]������1��gmQ��dN1N�N���m���d����tJ�8��q����]�Hpgu������i��M�x�l�)8�\P
)Nl<����d7�G��<����$*��� �j�1;4�d��<���0�JH�����|N#6/��9�,D���38���2]�?������G$2~�x�@���R�75X�L�a���Q���TbB	X���%�z�q�fb�z:M��a~ID%��z��dj�	�9����yjw(���$-�N�a���j�����g"(��[`_w�������~>���2��@19����#YL��=��k;l�wjoB�a��57���s�'$~�m2|T��������C��9Z�`k�t��6kv[�
Dd����}W�������d�����T������H/9�������Q�`��-��%��
�� c��,,�F?�}�E_-x/�S����S��J�xO�x@�r����]�\Hq4m N�xZ�g����B�,���,�qk�5�$���V��2@��8K�j���������,��GBa&2*S�c���U�M�v]�>8G��/��G�^�]�,:����{�]Yve=���/��d2�}�!u��0RgyC�i�G
��]���k�}����UV���`�&8��0�L�<5T��;���%�Q�\��Z��a����K�6~%�)���:��OW[�s��C�;�iV[h|U���_�l,�Vlk�#oK6�(��Q��4Q`�������(��4�J}�_:��n������]J�"��P�N����h�_�O��zk�N��y>�������i�&-B'
�S'b2	�o(�bZ*��O&X��B\8X ���}S&�./V�U7���H�C{��+�E�(�(*�VOi�Y��M/4e�h��9
Yy2{{���X����.*"h �k�K�`+��X��E:�0���$t[c:A�Cig$Y
/r���/$�����k�jZ����;�<��i���.ND��X���VeH��#����6�H-��UN3�Z�q'YA�4����	����.��V����5D���#!�_���'� l���LB�>YT�&��E`k�X�����(l��Ut��uH�H�@���V���RUv�,Y�2����0� ���e�`(h�V�/W$��Np�h���r�[��X�LG`�+���F�N>"�� K����SO������)rG�a�m�U_����5jiVcu���-���w���7�'7������Rt�71����K�����o��A}��m��@>/������������Ig;��}�
+���p!��B�a�:\t��i���d"�rS?��T�{�yh`�7NS�
6��E_��H���&����QW5
��z"}�EoZI�&������� ���.��	�J�ly�}$`�4, ���E�H����2Gbt�������Ps&
����l14\.
�U$-Kz���y��[�`���_n�������#@��z'Bj��+�C����$���=���tr%m&-�;j�ri(��PY�:Y8F'bom�{�%o�m�����fZ28��%�V���������ip$�W������M�2�b���Eepi�G���������L��7�*��tq�%����k�^�>?/,����3���e]���])�������_m�sA��X����{�oD>����;�������w��Wgi����hk�4�~*A��N2��_qb��1��n�"x�^��iqm$s�Sd��\F����/Y������u�$����s9�W�H�)c���������z�����p)�u�����|���q�C��m]kEo�vG
v����d�#1���-�y�]��L$._{�9�(U�K�#����w��"I�*kP^[*�T�oI���zx��.��j�f��g*�'l�J����65a�������������������?�_��k}����{
���)�$���]F�k\q�k�r�b��q�+�kIW@NW�qn�B�y�%��O
>nh��7
{n%)���������I
`��qlr�����21�2����O� S��%�t��%3s�J�y��bd?LHd^7F�\+d,����Vn�8�U��+�y��xN���m/Yk�T�$�"b��T�v9x�h�f>Y8'3�>�.'�d0������4�������*�z��������d���{"K����T"y������'Z���J<�*�VZ�2�	�#;3*�����!������6n��g��&M�iEP����E^w.����k������]T��E���=4�`ER
lQw�jjNR��Exm�s<L��E���%���Z7nt'l���H�s�;s����a=�J������YM���2WU������������EkZ�����X�)%i��nCm��E���)-h��r���&Z��&��5�5=�=�i��b�#XS&S��� I`}�5mAvk���jK	�n>-X�C���R:���to�F�	�[�����vm���CV�p>�Z0���v'QK�Z0jW!-Z�
G}EsZ�,��k:��n-YSA��r�f0���z�?4n������mi&��-�Rd5�����M���4�#�5}VAA�)=h%��frc!g����dI�`����=�g�����;s �`L���H������b��d��5�n�-SA��nC�-���`g��Ps[��
cZ�����Osz"d�iA�E�����V6���KN�E�Z�f�L��,j!�����E�L��?������E��� X���$�>����lJE��J���������&|w�y�t��HCz����Y�6�J������^�`���N�USZ��+���	�������d5����j"�/�;jVoU87���pf���]����8>�Y��*Qs��3����;����V4Fg'��P5aT��n�YU����4mfU��/��`T����iU��i&S>�5�A�q��1y=]M��o
5�4��L���P/�#����4-�[������nOMEiO�
k����Z��Ju\H��Ly@�a��Z5DN���������d
x�'�G��x��'��"����L�=��������a�(�����K8�p�
���v�!���V==�I�C�2���������;�op�e��A�u�J'd�i-��d����@��;�
��z�����F��V�B���FptS���������Y '���^�� ]_��S��	�����d,Bu����Z��"~S�t��F�%7q�V���c:v��H�YF�g�/��U����=�3^����)��[5�#;WM0���3�De	\�����}T&R�[�\4����N�-(h��d��+�
��A��Y>������]���>S��*�� i {��3K��-D1e����!��,5��TC��� ��{���Xa�q)����

�B'8���)��/ ��<�b
�jE����[x�r[i*��SVABl��J���~�������E>���"���J�S2Q���	-�y��Ori���q*�i@��x�a�F��^L�M�����R���S�ZFgN�&����K�$��������,�v�� ��cn���RZR��w������
����hq��l��/�%��1m������'�F/���y��T$��|.�yj�qI���&X�;��p�ZE�'WI��qi���]S���B�K-�r�&4U�fk�D���?GT����f��N{��y3���J��n3�z�4G~	��rK��M��%?n��)��o'���f�D�I.3 �g��������G�OT^5j�s9&$eK�s�
���"�k��]��h�O�,,��r��)kW
^��/4'��x=���h�+��=Y��*���G�"_x.�H����2n9��y�,����yt�_{�LJ�-e	�����f}]�=
�j��e�D�{�86�u�5�Ca�]��Oo���*��|y������o�v�b�WB�#�:}b����l���]2����<UC��g.�&9�h��[�>����H^��������% N����������I��l���:�B$I�6%�4�h���M3z$�����A9M7H&�c����P�F3r#�04P�=-2��#%:Ua/����% �i�����@W6��!�����A+d��4�f��{�������*�	=]j��G�U�a�P�������O5#x�KN�
P�g���Z|K8$�#����=32u�@-��tq�����H�����@WP���3�����F+h��O�
(d��5Gc&-�������H���j����*�K�[.����t�
B�SbT�vV�V��Y�B$���Y�nS��e'�h�eEFe�|`;�����)�I8�������:���E#CZ����E���d���E�!+����=�<8�����K�Shu{�9�
��
&����2�o��5M}[�0��W�D��;@b�����tuiA�����at�"���7_�-����|��v�Z�xJ��%��U�G_qr]{�	�+6�01���s�q�����n�C�S}���Fo�>���i��#u����|�����+�6���,2U��B>�B$�����+e���K.��2��b��#�����$r�	XmU�t���=A����[OUv��}V�XARQ{�j���H*p�O`�`Ym��k-��$)�����!O�����^(�����D�{�Ix�L2n�I��s�V"	�Fo��p��gpSE��ENy"�V�y�$��v_�C?�����n�U'%�#�q5�*���lL+y���y�[$%h?/+
c�2����>Q6�P�����_�g���	�E���2jrX����>!�Of��}����AU"�6|�,�>�n��2������������X�
yp�S�����5�M���&�����"8p���Q%fD)����=�>;H{~��i-�����L�5!hGJ�w�e$�Z.��+_`2ja�8��=��Y���7�C�Ds4]aB�]��`VA�7r�1���M��He�9��D��."������\|�S��n��
����u��Z�k�	��/�$^Z�w�7u3#��9��I����]��B��/�t���.��Tj���.Ab�e-�����Y:�/���(DC�'5���C=o$����r��1������������I=\���jn�t1�&�Y�(����I���$9���K���%�u��2���.�v����1:$�6
�5e��]��4b!{���(���rU>��yG9��y#������bs���9�
��$9_��&M��k\��ny���c����[t1��-���0!WE&�H��F�c�7�i���v��{���W�u=�rDOH`��a�K�]�t� ��_��
�X(k�u���?�5�����Y�����ffH���E��E���*�Df+pwF��0 6�m����e����k#�<-����5
�i8���2��pg]���o9�|�Q;����>�7QE]4��.YN���&��oz��Uz�U=�n+Pv�%����4�����f�6������|�R��nRLgv��.��=��S[I�u$'�FLX�}��`�P�b����
�~�e)�	��}�v�Q���"J���JD���F����v��'|�SF:L�]X&���N�G�ef8	�
�B���zk����|O�r�S��icR��@���_����5�s�@7�����8�(�>��R�3%�/L����-��P52 N�$���d����cH��bQ�NV~��O��K$
@S�2���$Pkj/��3���4nd�m]��{E��>bg|"Yf��O�h����]
���mS�uPv���]v�3r�~o�:/�'^�E�=����5��*+�|o����C]�a��Mg�k��,����4����t�ji��;�G�Z�Z|/������6E�o�2��+S��W�/��\������eb��u���j�>�0�M6�����}�m&1!�V�uQb6�!��([��W�E;������g5�Q���G"t=�������|�/'6�u���.�/�c����>^��k��o������}��!�����U>���������'7|,b��X��v~�~������<�#|<z�x����%�D�x�S�A_���||��c��{�5���-���G�T���5U*�������Z~�u*o�>����D�}
�?�����)����>�>���������>�>�����k.�Z���&���.��Tu�(u�������y��!���%}�?�������Z�����i���
�Ss����4bhM{n�{i�=8�Ae�dd F�Nv��+�|+O��T���Y�{��5k�Z�nd�x��:�d������Ff���k�|����?\���?\��_���~n��p1~n��p1~n��p1}���KE��?\������~���s��l�}�&?y������?\�������';��o������~���������V�/�[���blE�������V�.�[���^lE��w�}���V�-�[���ZlE��g�=���V�,�[���VlE��W���N�V�+�[���RlE��G���.�9]�;as(��hl���O���=w(����C��G[����k��\���/y�P��#U���y.�Z��<w(���A�Ca��\�Q�?r�G-���6G;�5�	��(eC�|L�9K�+���I�w0/��A��S\��72w��9��r�����L�o�$��s)E�l�s����1/�^�	`c��J�����#N�����/��GA��0�nO (���i�B0d�Y��K���@�W&,���,)��lk}*i�s�`��90k��mT�z������B�,�tH0���hF�,U��k�dF� .�8w�Ge�D42Rv���|`"�9�.B\e/Q�1%��8p���O�,�K�6g�����6
�n�_��)�+�M<$����dQ����y�������2@N�,}���s-A\�8�(�R6)�����!� D��uJ��bc����������N�d�L
l�����P%������+9�����^������V�J�!�Uf3` "n������0t*57ib�.��W�i�����'F�i�0#�����0���&a�B�TC���"L�(��D�V%��G�4�OCd�I�D��bB�+<��T��n[��������de��� ��	���O��>������u���r�j�r���U1��8���6� �:������ZEC���Hw�y�!+�U��4-��o��\�0���E �(K?s�:LE[�8g�6WA�h8�/�)I��A_e��'�q���.�v�P����T�(V\~�S]��*�����A�o.r�$��K
�#f���2E���K&�3�j�>������}��������J���(�(�����(Z��!������ �
�~.�X�	��'_d'H���0S>����� ���4���t*�5����J���|���S�'�$�e�W�B���D�TU%�Y�}*���_E�&�t���������������N���S���=d�QE.c��K�sS%��:�W�r�y�q�TQ��]{����Q�(�R�J\>E�p�6�y���`�\4�f���������c������'+�Nn�)Y�L[%&X9 imi?�]�4GLI+��$�C��A�a�T����j�I�T����z��+KG-�T:@w���!���a/��u�|������"�V]FuN�X[�L�D�d���w>k(5�P{�O�NH�VA�2�\��)������Q�V�R���	��'��-3.Dh�\��<���.����:��D0�$*TJ�T��z� J8@�X��
��H;��#���k�`o!id����#m^\���X�	������r�k���(���j�m�+����[�1#E{,�����h?G�Y'#����'���������H�Y���vGuN#�B�����3����-�����H������Z!.��d�c�����8�t="8<)����G��(�l���?I;�$ivSX��w�.d����aR�����T���+H:"����D����;����C�.g?�Z
9 &�f��<b<&�i��{M
Lp+2Ta7���WEQw���7GC���x�$u��"�[�K�9bV0�@�q9���r�^]|
���g_0z^I���*��q����@��C��j,"��B��-�=C���(�w��"f�Y���H����|p�3������i��T�l���'�T2��-�&�W�LY;#�����w/�E�4H�?� ��0TI�%BB�vZ�=x��gE�V���}�:�I�~��fd��)�
�~������=!�c}�Ep��c&�9��j;��8i�������vC������M&d\D����O��P>�
�9�����Xe�1_Y|ii�m{�h�s��}<G�d�CK%��30��5����C��*U&sbW =E��7Ws���P����E�M��>�|7i���=k�um���_�k��y�A
]'2p��vS���(�����=��������8��hZ�[
0��oZw���p�]A�r�8��L4|�;@�x��Y���������#�,�^`��`�J�8a��.�T)����8}�C�9�D��9�/D
������#��+���\�&�1Kpi�	�����F���/�	j�"�l���_IG[A���"��a�f��ZE�(Dfjo�:�DMG�����4n:��*�.Wi���~�q��f.#�0�l�8#��-��qAcL��	Gc�4����-�id��2�����F���i��S�mN��s��'J��r�N���)�>�6�],��
�&?/�s��<����V�q��`���"��	2����'�6e�R��������d&[@��l�����qA�y�����zH�=�R$�a8�hC>t���.8(A�g�,���<��d*x;a��dx����,�����+1;~l�uP��D_��:�,`�8�{`�]�C'Gw ����|�P9x��[N����<y7��}0m�T ���9I3�T!x�5���������O3�e��
��5
;��T�WDx;�&m�f���>u�T\�v�;1��:��<@N6�%D>��`��6���1|H��]�FV��d��i�]dIC"���^���I��������7le�m{�\:������m�O����j�4��S��B�O{���U4���}��>�-�����f:�;Qs�B]Fn���k��CO2��4��]�U~�6�nf�$�T��,�[o7�OER�deQA�0���TG���j�*�r_�6Ky��)~^,j��g/*���
���
�������d���\O�}w�2�+I���h�[�E^�������~�.��v[��������n����	6OEQ��9�5�]�����Z��80p�B�#|�����aP�����Q;^Q������S��0E�~1�����)1 j��n��]�p?/��U�y�_��X�|nF�7WS"OZP���Ds����ko�����=�S����LP��v�D�
�7������v!#�O������PKDZ��h+ar�J�p����1f7s�<v	��j�.//����oSG��usS&I��k8$�3PlP�l�q����	�)z(FE`-&@b�,��/�����_�@B����'@��^�T	�|�59��A��^h�jX7't�y1�f�[r���FW�W�����an���T������b������k�Ye������n�9<���u��Y
�0EY�xlh���	��P�+�0r��
QXP>���x��#*�
Aiv~�Dy�hJ��N��Yl�:�lU����p�?z�t�m2�eN����%4+Q;��B�k��%�)��(�\|t=au�L�}��=�y����7��n����g^w,B�E�+Z�����v�+������l^AA�W��.���%�E$���`�'/@����W�����d����_�B]%�U����@t	��}8@�4-�W�p�h
�S_A���0z^L��c"M���@VW`�+�����T2��a|!�q_
4�����8��2f�C�e������J�����1�np#�_7�����>�u��o#�kw�B����K�y����4Mvs���&o�M`QW�[��)��9`��N�#��>���t���P
N�VVH����s/�A!�/\��N=����m/0E����9T��V4+�� `g���F�$6���h����C��ORHgVT�]��D:�����J��73��[�	���������+M���+�x��d�����JE\{������+�L�]��m�M1Z��
����J�T��������J!R8S.�=
V�ix����rz�&�/m��U����(F��c��]A	�������F��W�X\����&0�&�����3z��OGNZ�*D����wM�]�����CX� �������H�e���Wx��u�j���Mg���14���W�D����vE�0�j
�r��2�Q*�2�x���npS��-!�{�����*�7�s}�Pa�����{S�}�H���B��������e��eeD����+��(����zj�^E����:�^a��e�;���Ax+��"�5���)��R�R��F���E�w$�7UO�s���~"�W��4��X�~r�;~��\>�������'��X���#��	��|�u�����&84��B����j��W5gB�1O��:�D��L�`���h���d�=��p����z,�����Bp#�7�mW{���B��[�
X����(�f�N�J�<�d���E������q�9���`V2�PYR�T�����h����M�I�V^Z��exc �Q���v����|!,�UlB�c�-DC	��U�s,�!����f�H%��-@F�5��]^|U6-]`N���]L���;�/�B��W�d�`����F��B4|�M]+$i�|���BL0F�i���+���Kp���X���K$�������$����A������T�q��ky+���6j	��g�!4
B!�:,�q,7k!!��,���[lHa?�2�x����Z$;��<Ec��L�`�-����f���������Bz+Qs�����7��� �I�n���r����"h�Y��&"
�J?zD��g�@k9�<�A�X���K����#��<� 9��`�(]r%��9dDs+�F���x���)D�i\�����+�����i��V�6/F��4E�������
�����6=����JD�o
F�
�N�����������!��n���K�z$lv*C-ly�q�h�z�/U���G��y+x�K��S����n4"�4��D
'�����o����g���v��u��B��5	������wzK�g��������q�����a��������G���=����XO]3r!�f%A����-t���u=�2N�9�;�Grz?�M{��s ��GQs6���
`�^��X�O}m(sE���N���W+b�yAS�E���t�AC�LY{r�W����X%"���^n�d��b,|��c�A���&��u����|	%�)��&��n|]yr��	�;1,v�Wl����2A�m��u��.�B5�!�����-/�*M�C
2�e�"��N/��7*B���nj�������p�X����/���I�4:;����~2������2��{tG�K�.��V�8<j���W�)� �#eN��E=D�
\���i��D�p���H�V�T��8xj�7��/����Y��a3}!���������p�H3$U�FQ�|C�7=����/y��gK����r�m�/�����A��nAl.���?+��/4���M�����C�/9�
�	��_����0�Gd`�>LA	 &7f���B�x��bZd+>���������e���=��gk�u���!wcW��i��f�\cj�Z������B�lhhh���
�RoN���gf$��L����j������s�|
h��O>�B���qk�^��
BY��`�N_�G��fMkt�IX��T0_�.�������*c|�E-8PEM�+
���[!.b�GtD�8_�CS����8�:l#�h��iC��:��t����|�VK�Hh�����m#�9�zF+��D�8��7v#�x�L�����~����K��G��^>�BRR�<���^l�~e���UyB�zl����e��d�W�����qD-t�F?�0�m���:TQ*3@EaF�����3�����5�% ^����~��V6�_���B%��x��)��uc����W
�7��;���4�D���	�m������]hEC<Aq�7,=�q�W��"�������f2-�SQ��!~C�����]�|69`w�t<�XE��hgU����,=��`a�S��<��c'L����E(7����SFK�`�	o8���A�Tw�+�]FK�n=���	6�1�p���'ho7�/��X�C�/�%K���x���'�!�
�j�[r���0��E�t{Y��J���m@N������j�E�4�;���v/���U���3�����u���;c��N�hT$�w��v�s4�<��l�Wq��5�����h�x�j���x�q�D"?@���ju�8)�),�8?��6[uZ��e{3�_f�"A�v�K�I�Z�E�nf��mGT�y1)�#���k6��W��K�����M�����������o�i4����h]�
����
��&����M�?@Ccm�
��!z�U�8��kc�wh���2�{�a�bF���o����

�o�8��/}�"2��x�����|��d��Em9��n�&�IA��!���w4S,X�?t�fZ?�
6���`�C�]Mcv�Wp����8X�j	������:`������Q$�����tI,,��(�n������*��J�	`�~�`G�C�7�!���sr�T��?�Mp����3j��C�X��������
?�DJ�f �1�D8u������6����#��b�p@�
\A��vz����K�C�-h�T��,��O�m��������	U��d�y`b�(3�g��0`�E��U���tp�/:��".LQ�4L���+��,����A��F6`����VkB?6d�@;G<����_�q���b�+�e�</�Y�,�|������
Cq*�d���FD�G};YmF����B��q�v���.����\�<��e�2t�.����
d�b��X.�K��E��p�M/�3&j������w�>$I��\:6���8\Pd��,	=�pA���,|k��^Z��L	q��2|�=�l��%�WP���N~��[��b�&��W�a*���������3%�7�!C����q���y#5��A��6-CF��u���5�a��U�����]�:d�42���'*������e{C]��d�c�)��#X8wT��6��Sc)���G������f[�������-��{$6B�����b����F(������!�t�0��N�	i���<�l�r���{cH������\�Mh��	8J1��@��v��iER8_���bM���U2�~*�whdS��BA�0w�vX�Md&2��k8�_~���L�~�N��U�*����+��M������f
���6��.����p��xZs�S(f�.)�����W"���y���|ot&:l��~��XMe�	+�!��D���M|*@��k@����I��k�'�o������yG��\�>�y��&4��4��������#����jIv���[M�e7���R��lZ�4pSb�}��p���u����h����d�/��5�����d�.p%��WD��Z�y��f��xs���S���Q�J��Q�w�	��EZ\z_��d2��6�n���	�������"!��
������  �v[4��U+
�"7���S6S�����������X��}�H���m�
2�����H���$���������H�N�J�����2MrK"�z����Pq&���M\z5]5iJ�V��|���7�%�@8*[@�y��������*�Yit����d\���b�#n�8��)q�V}A�u����6-H��M ����� ��."_N;���P|������D������G�n�l������iI��i�!�@��7A�x\I,@]��`�����d�CWy2�����%���'Z7���Yg3g���R�cA�����n�P
by����1 ��S�y�8�Y"��<�j�pB/�'��j�|�
$�����Q�	n>�F�2R;Mr��~��p�GER%����y�HJM�E��3��8�F��)�Z�T���y��b��,��	�������X�~_l�}��
��!f�� -�j�gIM�
b �{��ZAv�^�E�7�Q>�M��L�Q�
�fYO�.��U���k�M��d0���bQ_7m6I�5�� ���
��iA�=����6A2�7�ZnN3�2<'��mi�����!=��U�4_�2�'u�3��L��e��/'fK*
�t�u�n6��[���61��jI������`I��w����V,3L$�u5�E/���F��\VKz������	�D�-)t����qh:R����J�	���\�q�%-d�8�,���96KZ�H/KJ�CO��Xl����SK�B
%��%���eKZ�������0��T}~�<j�k�8�M)���)�
�`J3�o��w�B��rN�iA�Yg4��)[t�B�!Um���De��:FP�y�[
#���*���JeAM�q|&6�
��&9��9�R�# ��$�a��\]3�f�@��I����FQ�\��T|������O �<���(J��(>�*�H|�;�T(���
d#(A����C^�0m�
�D5�Q�t�:�R�4�r������PC�^7�x��)���|d6|2��`)�r&����dF��>��Id�w�-0�
Ps��T}��b��M&6��Xp-���vH�vu]Jr��;"@M-���KU�����0��T��z���j��D70b��6�w)����x��0��d��>�j���k�id���j��k���!�]��O�l���!��N��x*^$p������I
8z�����_B6�*�2�H���p�"�v��Q~*�.����
�F�	IE@��Xy-�`�I�p��J6�d�Lr��mA�
�"'�D1������GN��uL�{�>=	�S�vY[Ij��M��7]Kh#7%�=�	d�Z{3HQ���\����G�2��/:A��xJ�6Mu�����28YV����~�AEf��8���w3Y��C�D������h���y��5���G_/ �=�
���A��M������5�%$9w��Xb�T<o��O�=5�\%��C#/.�`�r��/��
=�m������v�b������IH��upR�0�H�]�'Y��en+��	i��%����#�u+W���u#6�HHF�M�h��.�f$�w�q\B�Y�	W�06�
�x�_EYh��P�oh�e�f~��PL��8&=��N2Gb*N/l*�����/!��9�X�Y-�d!R��:����L�	�y������H'H"�yQ�����������%��&#	�y�8��q#m20����'�;SS��Wy�a�dA�8o��+-H��d��:O�2P�m&6���F�����8�^�e���*K�>/bcm;�~�����D>�@:�u�&��Hye�� 3��������)O�������h{���+?��L���$r�t�-���r�h�h{�������&�n	2r�P[{�*��v������a��f�u�!Y�fc�f������
����%��-YY#��">s�V�CO��k���M 
{�����zR$@��>��-N�Cu}*i	p�9�����q�E�n~��s`~�I#"�#X���J���������T����p6��@�e5]^��+'?m�>����l���v�b����V5|t5��RX���[�����:�*@M ��*2���������M	��@P���B*��������^��'f�BRm��� )���<�p����7����y�(���V���_OE61��'Q�l�S� �rr1	������!QR��_h^,����B%��af�=�)ry���K�g�1�/��C�f��� y�#N�������'�\�v��}l�BS�)��|fh�#rHJ��t$6/4ez�p�QGiZ���A�����b�B8%�&����p��B�a����zt�xB?6�����G)�A,�`�/}
-��lBh�\n:�3��Z���N�*Y��C��(�j2�x��8�*����y���r?���s��}zK�9��y_��"�����������"���tN�6r��;~������\����F.�v�bo#�z�c���[��SH����K�XE�yn�s��9O���U��_5:���F)��t�H�3��>W�����U<s�\������>��-������O�������4u:����������v������?�w���5������~0���������kn���.?�����w��8�����'�-;d��>S���������9���g��}
��*�2����1����@�6���O�j)�9o���:oM�	J��CN9��������_���'b���,�y��������k}�\xDl�C�f`��5'��>o4��_���\��u�K�L�4_�6@�q�D
���U|�UBD��g����^�	'��hLw�@�Id���E�M0e!d��u����S�i`p�3�7�F�j^����7R�SM��r��&���L�U65W�C��Kf����ED�YiM��\3Rv6yk(;�<�)��
.B���W���)O5�����5m�#y�O%-��a����	p������3-�lmT�����f��1A��x�x�Z;�b5%������������/4N��
H6�VQ�%�����<�{���Q���{���2,$�b��%[��>^����ga�]I�={Sc��@g���9-2�j��_���7��:��s��;�t;Y��v-MH Ps�5��=��k����$Kp������	`��
]�h�h��~d�E���������`��B	|G{"k��/�����?t����KIN>1N�|!y����j�I��o{Au]�"/l&(�m������������F�+Z&�V�>TA,�g�`���o�J@A^Yu<�c��~%�.��@9��yt1�%�������o"�`��M���I��t������tbkE|�[����	�T�9�����S>�7m8��/���e���Z!;��S����Q$"o��!)�5�X�W<��C�X��Z�I�e���C%�=
M�XQ����TS�����Q/����M���e�gop3����+���i���b��YXt��"�����7�q�hS�*�g��EV�����D����@�^�����MYO��H���<=��%X|u� ��BPs<���4��6&"S�i�L��jB���v�PQ?�����]W�}����XIr���r�]!M����=�e�WAD0Rn9�kC�;�r�D
j��Ts{3��Z�h�/-:(��)dV2,���6����K�*	osAJ�������}�����8��h�;��f�o�����	zs��c.��O.h�kH�,���������5W�D��
G��E;��B��Q����@��Ox�Z)����<^��v��\>h
�c�B��z$8��L�^��d����S�0�j,m@"�w�q��*��G�)J'������������!��b����pt�Xi�fH��	v}���@X%�w1k�"oE0����|.��*�$��~^]�y���w��&��%��5l�;���L�0�e:.M�7��"~��������Yx�y1C�\3�w^>C�/y�3����5�oC�*!A�t�]�<�bV&+_t0�����.K��BC}\��P)8���rB����.,���x��E��I��-b�$���3��t�<��bv������c�>�{���n��'��ua�6����z�[�@5��2-���Ue�&�RK����5W�lq`���Z����gD�8+���U���������h�U�=�W��lY�����K���|{1)s�����V	��:����:���|E.�G����;4#}����,
�UZP�C����u�ss�U�0�Sx	��(��g�5���5�>�.:k�>0483��D�P�Nl����"�i���s�1pi�";R�=�H�Z�����x������]���C��,�����J�an�a �8ir�MM��z��L�l���y�y����56�PQs.��T��8h���	G�S�F
l.��_�fv�Pix���f6���kq����:��Y�h7��['�X��<���N?���Du)�mKSL�n��R&S67`�\TA�6>t��	|z��2�C�{S&����Je�%�M}*J�h���(aV��	p&����5)�i���y����A�F���P$6+���h�X3i-s��Pm�-�����|h��U) ���������(�jSA�#���6��W�8���=��F@�x�������^,��Z*d�#Y1�x���s���Z�}���?d��n�}���qk�9�/n��������8*�_E*�v�k���Z���ds3�kW$���)9�7v��xZ�d�����=�]�������������i�U��8C�v�EAxB'~��l���V�������^�U�f���q�77�����=����L����no��4��&u3[��w����3�ff�����d
����(OA{o�Yfg��	v�/�*�nC�KO��	����E�'�L�����3��m1MZl&K/1��XM��M����!��K�����J��"I����$� ��x�T���.MvglG7��t]�!����� +���`l�O��q"W.���`�7��	lW�eo���ne��#���C}��Zw���E��U
<"�Ji�&H����5,����hk��y�	X�]���`�&��4G>�p�>6�uF�h���	�Y����,�����5g��t ,�c�-,<o4�Lg��,�AX��L�l�r��O_���m�'�	t9���e=���Ih�X�n��U"����2��P���.��;�p������"f������x�J "��8w< Cn�":�� ��R�so?�Ph����P�2�>��6��fT�d�:�&kT�4�Hs/������V�4��:��u-��e2eJ��!��.�T��M`�6�D5����P��`S�@�49z�@%�����t]�<��@�Y�/�:��V��B*�NS#���!�����N�io��s����5�LD:�fl�2�����j����d���>y
�����/U�������K�NNnz^���@��f#����8��������n��� C6�������e�`���$����Nt��qU���RS�=�?nB84<�N^h:�X6��<���~��x_��B���p_���U"���Rzw��aiO!A�P��xi?o�5z=�:�O�P}�C%]<��y���8�M��L���q����w��P����J�V�V79���(j,IU����}*���������i�7Z�S����E���h;Q�M`k`��I��U$���hD�a��<$Qs.��	lB��/4���	��o]n�A��o�#-)���J�����c������/����	�5�ra�F�)�o��X(�����L����O+6�=������"S^���K�8�_����}�����}U�"sz���iT���*��^lx&��}�E6��B�>|y��O�������w��]������\�
�h�M��B��)�6/�1�+�_(�.#�	lb���h���NsV��f����@��������|;:O5#o��t���WX���P4��-/����;�����V2�������|���5]/4A�M�j����b�L�k�����M
��	������-�=��&�:Yv�*7��'^��S��\�r��m���X8m0s <��9^��y#��0��ZS�I��p�o.[�n����K|k=���J������L������.H�_�d�(Z�'�p�_{3S�i�����T}�&��\����r&������:����d
���0����>�������}����L�}XE�e����f%���@GE��\���@:��L���e\mbL������	5��}�(��Oyh1��$%�NC��/�5�2��^l�U����V�>�%�{AcY��[�]=�}�V�����D��Mk$"[,���zjG�d���N��x�N�.��#�(���#0=\��q��	���>��� �YA"[W��?��������JO_+���uH�n/4�>����^���$�+/h���z8�1j)�-���������V�5�&`��^���Z��G��J��\#�p����F	����5�(�� �N�s
��.|E��*
��FYj�C�����l��6-i�BR?�����"QF3Xu Z=Dn��q��Z�����5r*���G��M>1����0U���6O"�2Kk�r��mr�-t\2.���rO�����N��$#���2q�1�U���C;*��T��u,��0�p�0@%.��k��jH�������A�Q����`�K��n

R����f2�EOO��|�	0�r�;4�SYvze{�	v5����;$4���1|Q��HR]gd6���H���C�N�s�C�k�H�i$��e=�]��Tyn}��Huc@�����+,im�x��/��w�L%�����;�a�|^�e���Es�:r�5����,��o������e�{?��h�dq�;_��(��M!{9��Q������p'�� ���Gs��*�p�lM*aJ�)�Js��w�w�������xs�qJ�e&��8l�}e	�RF�K�b�O��l���;c������M)�6%��qd^����T���S������J�n���0��[�����TE��p���'�U�0e��/���n#�Ov		cx*�SAC�M�a��*a4�e�0�u"����o���$_L�z1q������p	�P��k���u�s�)7�NJ"�S�����_�oO%Q�]P���d���}���+f%}�^!Q]E�S��.@��_���v��~*i	��1�MHO���o�y����s�/'�D����Ek4����
�$�9;�<�fQt�m>/Q�o�Xy��,���|f�Qz7��x���`fWl��'��r��C���� ���>~������-�t'H������2�����1��?W'�]���W�Q�������|�D���xH�%)[�C���p�[��������}���D��,c����%��b��6%y�j���0�����mg�Vv��\���e0��)a6�M�>�B��*���@#�A���A3m�C�����	�(c��n=
y�����������M�Y�M/���\���W=/e9�]J'�Z��<�������	Y�E��??�tM~�c����Y����+Qo�"W��v��f������sD}�ud�9���F��o�Nk"4��
�DK��0�����.^�u��S��gK�Dw�m�{!]Gl���~U�,��b�j�?E�L�@Yd��]�SH�jMY���U3H�y���SA�'Sp��y(�"���5,��L��a>��>��d����a�6��$_>��%���R1�������8�4�r�xJi�q��3���LE��_�lz�����Ios�����)��	�������D��NMJb�����`��$�O�O&����8���]|*��F�0�x�yoK��_���s`M���Mn��E�d�Zx�\BF){v����"�XU!	��C��OA�e���X��/�'�*��i�E��n��#��t�����me�[S�nK�+1�rC�I�����G�Q��Cb��k�"����G���?Y�,�O!^�Z4U]0��L�n�����E�� r�����pa�w������kQ�z�7:�������m:H���HNo��,�#o�Q�kG������G��E����9���2!b���t\H�����3�2y���B���_.N�vX�	I�	��v��?�{�"����F�HX�&fr�hNe��������RS�����*"���������J��8������[s���`%�=�����#�W-��,k����,w,�YV�/���f
�L�m�Kv
�S%����GJ�'��.@#s���*D�"�0��IP�qqWP7�qa���z���*�}��dD�O��K��`:�������%���/�Pu��nO!�������LT�9��a�8q�W����V���.(���[O�������x��$��=�LQL���&:��(�x����|	����/����s�����>Rr��Ab.6�N�n�m������\�dd����8�;-�����2�"cQ�(�t��Z7��z
���N�^�P�"�j� 0���#���GsA�41.������m����`-�g�4i�����eGU�����W��I��N�a�y��J�/�7���V�t�k�1�]�r\�4�(��s�Q-����:[�{��>��}��~0Q����f��*�6l\h@��������k%����:���}��"�[�I������)��%��k�$�[h����pIq"�n��#Y���'�F�����|�$��Hs�*��N���)2�_��Wg7�����J����FE��DQ���2�a?E���&�U%r#y�I�������VYMdy�7�3B4%x���@��Fa�`/�/������P-D?&�����Z!}�%d��P�����WF�n����O}Q[���F���Z���c7b_�����+�T`�	%��\i�B�8��
)"\dl�����}U����@�y����K&����%���L�������N�@����B��"�+f$]>x���~A��+�������>	H�����X��O�$�����R
V���e�]�d����{�Li���4m�It������N�z��3h�lC:m;'��-m��[�.?��gc�dEo���Zi���M���g*2l��IX8%�7\J��'�22��>�H?o�o5��s��.��Q���� c�����"���F:����=��������4�W���F���������/l����F%Z��Xb��V��V��	:����FQ���Q��,@�����NQ���> ��ui�1Z!�4�
@&e�����v�O��]�Pg0��H�&�&-,��2}�K���s6���������'�$���4+;;>,�|���:p����%!,��l,�,k ����7��������+�W�����	.��:���!}����C6!�~'�T��$q�����O�%H_��M0(��S����X��_D��D"��Vje���9k_@_��uQ������{��?E�1�1a�/?Y��Z�EL����s����P� ����Fg�%������z�>FB��>E��c�w�y!S\e��p������s������n9���Lf�;U�����r2�S��y��� W��r�}I@�s�I���G�����%[x���"�( �%�����V�e9H���rj�!�
BEaD\@�h9c!�,*�� �W|�<����m�>���<��W��W�0�=V�D���$�b(A��rr��R���0&�C�D���{�l����E���Ls��R ��[���6M^��W�����a��v=��7��l��t��S�$6�������:hI^����J�A���@49H��O2�����E�Y�4G���2���T�s�H�mp$��l�.1��h��S��������!9J���h�i�5���s��t����/�R���,j����'�<g!T6�fV�����>7=L���(�"��u �F�a���y�`����^�>��3�fq�g��t�$*�����L
�������Cg�{�
�K~d���
�J�5T.y�
�j�����-m������������������������]��������$[��H�j�C���=}>���r��s��s�����8?���Vn��y(��7
!7Y�6���7�&�7������%��3A<o4W��4C"�wg�s �fA��X��s�)dgYY�Y�%
Y��;:CX�B��o�%��?DY'�_(�����x��n3��k����j���L~*A��
����-�����DV�gN�\�$����9	�p�
���+�v��y*�2�y;|^�^��bG��pW�;5�]E����#��� We���5����e�����^8�xYS�N��|!�����3����+Xk*�����"���r��0���P�	�c��	��
������y�J�Kd_k���)3��	TvzH G�4��J�����m�����NA�9����qg����)[iQA���(0R{f�L���E{ZPjOqF���M G*�i<$��i!��b�`m�5�hZ���M�1MD��B[hJ���)�h9��L)@�#@S*I�i5�b�<�`D���h��uC�)�hH3��vE;zK�H�f�w"�j@KZ�������B\T3�D��4N0;z,�kfG+�`C��U��qLe����5��B�,A���5n�l���d����*!;|tBOEQ�==`��=�HJ����*?���fO+�j��`��:<����K���I���{�&�X��Mj!SV/�C=�e�E����E���R�zk��6��RMc����I�aR�����C�l��hQ�-X�)�`I�n�hw5�nH���
������ ���/pAn�K�Y����e��)jLyZJ4�!K���-7����G`�[�*����X�TQ���H>�=Z�cSGA�i!�Av��9=6:NnM3�cZU_����iAA�=���hO+�@T"�Ss@��4�%9�����&$�O�����iA��S�5��{���y��5=�T�TH�9iJz\nIA:����8����7z��k�L����}�3��5�Q�fy��!��c�M@�XG���������H�)��)���
�F�uV���f��>���]��E"����7ut�.��h&V��F�����F�~�N��\�R�S�Bf2e3zs�)�<e��,�Wg�H�����M��U�@����}�%$il����w�0}�h���D�"`�R���g�5�����.�C]G�=2��j��������ws&�����`IZ^9�P8V=b��������[-����LQ������jt�D$��Y��r�����'&�H����*��TjMY�<���{V3p�����/�S��$���#�o���wAxL�4�}#���u�r������0����t�#k�M���Y������n���Esu��s���N���?oD������Ej��;!������N]�P�����zL�}��'����|=�4ib�2�R�2��LTcYf:��D����5��h
�U�)�]��f[lc��
��*?/�����T��
w\�7������{d�eu����K��=D�e�M����2a!����_$=��q�u�~����:n��U;n/�dYxa�������t{K��`����U
/$iG�o�f��D ����[��@��Ad���E*� ��tY�R�����V��1e�kR���N�
�\����"*J��v��t�3����p�����Jf
��qw�Q�6���	M`��@
���+8�����:��2#��6�/h������l�����5g��N>��=�>�d�0�	����#�C�{�
<o�&Y��%�=�����4Sb���HgN�P����OD\�y1���f`��V�,�	`g�j�?������'�����^N��g��]����	�=��e��E����9Qq�V��V�����3B�v{��4'��x���|B�������������Iwd�H� ��v9�T}�g�D=Mpi���<sU��Q�h���#,c�8|j�v�E���d63
�K��p�KcZ�Q*���g���e��h������tB�A-6���~�RD�Q:~�^��m^���IT�>��#�j����3?=b!����5�'�*Au���j��4��*��X�LA'i�����M����@U"#d�v[p�����Zj�-�%0N��B�8�,3�gs��O$Y�����H-uzBbV�;�_
Hd�
����Ev����mB��gv��f�c��7�2%�qa %��W[
2<%`	6ar$E�����P!���PGn�&���~:�+��C[PA-����Z����t8�R�H8�d3�K���\���*r4�0��`��/
.p \��Q�������4�uNn$��o����|�XGC�D�B���+��M�'~�����:�Y��y3)�Z�5��M3�e2e�30�b:�L���6���z��o�Q|�X���5���m���Zwq�?o�9QW����'p�kU��q���J�����+�Zv�V�Ao�����Z�p����Qo��y[�������%��I������w1�	���.����(ke������gfgQ���h]��P�V���+���>6n��d���/QB�K�*`���O6BI��2O�ttb�~U�.��i**S�D��$�3SY���@��W��.6�4*Q{�J��8���N�,6����\�O�B;Tfh{j���E���=��@�]�!�i4EY&R����'��N}h����d���/#�V���f�M[O�3��~�4C�X��/Sk���r��M$J���'"U�[`m���b�cEl����uj���g")p�d��?��fGw���>�uY��-[�7 @v&=h���$o>�v�����S�}�O�����e?�,SE���)�xn�/����r@���3�����O����p��iA�������\sf����������~]�l�R���0�r*��U���T��������e^������4����&*T%
����3Z��B�He����n��K,��du�61����k6_���Bv$���/�l����jb~iA���"(Hov�t,�s6,�qd���y��i�;<��k�%m�8Z�h�L�JW����F=II��E�yP���LhS�!F��{��y�	��0���k�#17?�J'�.��/ �!����u����oBZ����%�{�����#��Ig�~e3i�'�s�Z���r�����k"�R6k�,j�7]����4��g+��7�7'�� +���m	y�lp�IU'�dx/ny�n$�sv�'�����X$��L���ec���d9���Hr��C-��b�G� [�|�v��&���d��q"N��KAF�e{b��
�����M+�8�]�:	y(,U��<l	P���;x3f��<��b�|{#�������{1�����>%��	��!��;��T���z���B�1���f�z���������)(��`�pAZ6��Yo���J8��h�1��}�CBg��|��;�r|��"Q7����s���C��b��V��=7����*;w:XP�*�E�@]�2��l.����gg^<F��4 ���|D'�-�����)B0�b�	>������?�hCS��l}=n�vk��A0��ic8%�	2�}=�u�f�}e���m�H���Wb�y-��rF�acV��O�G�|�3�6�ps�!$&�7������A���K����A�<ZD}�=�K��<�{e�����\M�����#����,�����"/��4��M�0���jq?3�2~sc�%����E��0m{[����S�M��������w�)�D��'�	�Q���8H���Dd��t�o��;��x�����/��F��J���Vg���%&���z~Y�H�G	�cD��d"r����Q��UZMD�b�y
)�q�1VO�U2p�o�a�����a\�p�`\N_���~2j�u���J����a?�$�H�z���I�y�
`��F����#�C���p�l3��R���vMXANj����WG�b'$����s���������+b w����D�����g�1��$�h�A������E��H���c�#}c@���$G�����������4���1�1�ENA����*)c�8	�X�����6#d�m�����ncL_���y������>N�!�7z�o$*��d�{�)�F^���[Y��a��9���ks:&$��F,��q��(���k�Q��)���O�2)�oJ,�nt+���'��V&��=���??4�b'
�h��F��a�����S������/�� �R����!����y���9?��c>.��t\�t\��qb>>��1�������=��{L�������^�������g����1�K�AL�����||��c>��r����^�b>~���|�,�1?J�B���g���{�z�tb:>��SL����z�K{���q}�qb:.���q��x-���k��\���|�b:~�������Z�{.��-!�CL��Q�CL�k����O-�3��������?�:��z f�����[W�������1k�]�����:$���/���o�v)��U����w��{���j�R>�D���G��B�
����?���
����F������|���b>���1�n`�X����T��
����?��{��������
���|���b>�K�E7P�~���g���������M��s���
����!v�77��������n���
����!v�77�������_�;��b�sC��on��������;��b�sC��on���
���b�������v�!q<[�pC�x��
����7$��~;��8�-�!q�������|}._�;�
��G�?�x-�=��������w��k����O-�3��w��D%d�T��!��t��L�S�5�����X��,��,U�m^�����l�-��	XX P���_�*��YOx�B	��#������}>�4(�W&��-H/��T+�z���w3�4'G55/��7��0K��D��d�H��7,����S�`=t����)�F
��]�4"'4������~����@:�C�f��N�U�o��
HXd���Z��������������6:����[����s�(7���73	��W#PY��L@5��I�W���2)�l��6B<�P.��4#����Tf�����B�7���v��z5?[9A�J%��b/��&��?��;����I�;D��Xd|+@�S�{!����p��}��+������x/��vU�N^�
m��v���=(�D�,iXg,�����`2�F����`h�4�	�nj����B�J��b�G)�D��2��������Y��Df�.
r�h��,H���}a��"
h#+�������6~f33�h���Ci�0
7�a���h
n���d��Y�V�Se�UZd����.���5��y�k�-�Pz@����&��~��0��;�F�K��L�,��M�n�F�0�x����rX���"m���h���3k��J^,Y�2&�@�@�U�;/(xN���h;�-��m��x�\�M&����nh��A�V}��i��q�N=�����BD�����������eA�I�6��q�^���+�.#�-���4!��`�k[���PiD_+���2�M�;Y�D��m9F��sBU�,O���1/oFjm5��:q�EI@�e���c$���S���V�H���������q"[��g$;�Mp�$e��+�m�U0���
0c�i��~m�������N�%x�+��XPz��K�k��"k2��������K���)3�N��Q�k��I�c�pV���+v3u��7���[��K'a�g*I���J��2{���
-2��92�z���/Tz��g�E���nA	<�����r���`���#�h���hf�|��tv�c�y�*��q=&;��7�S�L�vH����j���������"mTm�	5�?9��(w�o����9Vw.��\�r���iu�C
��N���<�_�<��>�$|`	|�����H�,
_P<�W��L..���SX����e�L��Uu����>���f��*��������z����i�uT]�^u+�b���Ft�>���5�&���@�A5���r���D������_��x���b��� �n��}��a�K����U)�ARd5�vQC}�8�tX�^������>+�N�`��L���O)�;D-�;M����^�/�Nt&,R~����-��4V�@z��q�/	W��>?3�@oF��y�q��������
�5��n��7����w���"��j%�|wq*�V< J���$��:�8+'��	|��`�`J��,)=�{�9���CY)�����L��go��3��5z����x��T�����[.���a���IF�`�<h���2����U!�)����e�A}J���g!G8V���Y����M��c����X��?��h���>}�`B��'�A��o!��4�d�CN/������[Eh���S�m#�����{8���{��@O����`h���!o���S8��Wn���Q82j.��C�R\WC����-6�3J�	��d1������	i����6 ��LR����N6���Ghko�R�2���D{o����h�H�������	!bC�l%'@��2q�O���*�G������d���@�{�������u�-6!o�I�������d�V�"Z���o�Ar�`�J�i�E���qj�^�VN���.3}b~1�����J��~\�3��?x�A[`��<����l�T�f}�$��F�!(����
$/�33���Z��@?���v6�x�S8rs����.0ICj!:+f��s#�%�|����`n^�� �9���u
��gAx�����tjA�sz�)#}#2�b1P(�i�#������w��O�im��n;#j���(��Jp-A"[�|��,��6��	�;�!v~��x_����T_S����#����]�z�	a��w�N[�9�^2N�x7���,��t��#����2n�(@{�R��	
b����@�An�N*���u�,���
�\�	�������,����kM�k�����*��x�������'#�$R�\�is��e�����An�Ya����� �	O@�T��|q^�Dd�f�5�t��-�~�1�M�ol2'kYn����u��]��Z!oQI�|�-�����@7�T��a%����QI-�gE��}�
����� ����D�����6�P�fZp�Qx�����f:��$��PV����)4��o|�'�z���h����x�\]��JD��bL��K"�1yO;�S��d����!��	�I��#�e�H�Om	�(�p?�6A�d�[��a��m9s@�@��^6�Q�����I5�e5N�^�9L	#`3��#��`�4�����6#�1��w�vkU�6gA�JX4v��^�D�O�,�PR�#����,������{���B��WI��^%��{�8��~�;5���`���e�f���^lt�=�a_��3y��-����b�M���z�����X=A��[R��mB�[v���M�E�t����	��HKU�3*��}����x�����LDn{�tyq�w��YX�5����>�/P�mAI������W�Dd������}&REX7dO<����He>0e�t�e_��kla�U�p_���W��iO�Y�	eY3��5�e����M��%a�$5�xT����,L�{b�D�m���t�a��
�9�m����
���N����8P5�GXu5G�X�}U�>��X�E���zo�kpo����		pOJ�]�B�meH����NC�������L�
:������q��,�BE*?v`����
��$����������g�5=���5�&O/D_����m^f>�������b���6$��	9_�$?���t�Y������w~�]Po���[�t�c[Y��\v�S��Q�d0��fE$��[����,�9�+�y*�}1#<�i��t|�����	u�VYm ��a#pG���u�����lfO�Gh7�S�\;u���o�	RP��x�Uo*����A3�>+��U��t��E}�hJXP�D�Of
;���7��"o:�r��2����q�I%Z��T��}p^*�����E��%�"��)��O�����\AGD��M��y��P�3�U��>�.V0�B�����`�y���P�������<%���T����l|��Po�������9��|V�f�����F}`
+[� �����D�v�{��g�9{����1�ga
���Q����}&��8�Jt����\&�J���Bmc?lf/C��d�b���M�=(�%����E�<��i���1��y��t����w\�i�<�U���Z��d_+�6W�i�P0c����x\���vk����5��I����-X9��u�V�����\Bo��������=�������>Er����������;
��|H��K��8�W$�~�������}�������	 �Jd�����YJD��L�jZ�������+3���+�xef�x%����	��W�����BDfW�:���T�m/���h%�Vf����qZ7n���h�\�X�2X���	G�S��e��\_����b���Q����/�R�nB"���H��<M�YQ����b�f$�
�z"�	5g���oY�3�Be<x7#/=-���}�!�%� �f'�A��T����JE� �A�mB\������u�}0$���,�[�!@a�C0��5?��K�p��3�2�xH�zF��yko�����@nO�*���"U���4���T�Z��1���"x3������G�*�2"xqM�MDJ�o�-�7����bx3���h\�Q��&��9��cz3��Z^������^"�tS�R`k���9RE�o4�7��@�Mh��� ������U��������y+�t������������6�10B�]��}��yp[�{Alz�e���+��`J�1/���9�D��,'�r���X�D�~����u�-�~D<�[B�.'��gx�l��9������w0|Z�������'����MnA�n�������~'�9���`�Dn~�,��(�����5��[�N���� ���U�7���\�r�����\��f�������������	p�~U���[L�8	���,�iBh�����9-�j�7eS���)Qyzbxg�"=��1�L�,�p���h8Q������!��*C4|A����������3���D��W��o~��(���r����I*��MtS�-
�����V`�k}+���2f	����A�D�G�o������cY�}�F�m47[��7xcF{����*�2��\��X|&"����
{\�>GD�����b��,�[��p�����]���rt��E,\�^�|�CdY���+kU��ZnsokP�l,x���0q��HD�����:�m��;��S\u��o�!#�;#hD�{	��S��w^�����2^������������O���>X�����
���
����3�:]"�3Q--�6xzt�������uC��@[��]����	��P_s������&��nU������nL�����5{e�H��p�n�b�`��"R@���o,	|:LkER���F�e��OY}� �*,	p��8��H�%�Sw��+�{�4@�y��4��q��t���v���{��0@yd�����$![}���L�w���(�~��9l3 ����Bm�����AE8����84<�GL}](�����_-L�_�9���K%|E*w'������[�uv`3Q�� ]��L���ga
<|f�c����6%�V��npy�
*/m�	��{n�@�I������h?4����Eg��������E��M�$���)�~�4�-]���~�����Rw'�t�y���X>��s��d��N
/��M�M�>g��T�e����;T�`(�����x���3���P.���FA��b��L���Q����r���E"r�
�|��i�v�
.{3�*E7*��f�t��H�}1!���y�FH$�#�3���\�������"j���V���n��l��~zl���J��,n!��{<+��pZ���GeJ�CTOy�
6i�o�������# ��a&T���qa��~���h��
�
����G�X.������$/��Z�,���,���R��V&lS��b�t��T"��c�B����#4��(b���MHe���	
0�s@3y�WL=�?WL�,(4*����P��([�(����Hj���A�����e�������iU��f��@��EMp���UC��DB�����-q�B"z����X�6�����?�6U�C�VN�R����Z�DA���B�r�W%6���6����G8��a�3��S@�$������q	�	7��YP3��*������:���Q��Kk�����5\���`o&�Y|��ja+�.�C+Sp��u
�����f�%
��IaF'%�6��{\��F������������o[�l���!��Jxu|�7����qa ����������z'���8�3�o������}���/��� V6��G���{g�t.��"2dZ�����i-����K�{"�l�v<���ZD����"����=Q��0�3#�_}��C���&��� ��
,:Zr"b{�K{W-�k���-'`z�hI��-�$�;�_K#`�1��QjA�9����,�S����*h|�m�W����\�,Dt�������|�Z� "w��qR����A�M����}��]��'������	��?v�L'=��������u�bGq�g�������������D����j�g��g�� ��P�f!���6 �|����fz���0�L���v9A��/"���I
��F�?��a8r���b���N:�AH��E��n!�E�w��S���~�x�������&��gA	�hP7�\W7cw���:�
=�!F�5!:$��},�}]��OD���1 c����"�h�X�];3����8�ET"�z�R�:L~�a*	yP[^����ds��Z����R�5!�f�c��c�5}���D�N�����������`�UcI	^��f-��:�.�`[;=>Wu�f�+y|��������R%�m t��*��*dS����`G*�l�E	@��z���j�^��#$�1��&opi�e�9����n�
���7�(����@�Gz�w�F�f��`~��j��m[���a������N�u�pIuj�z|��B�C���c���?n�/�'��������I�a>'�N��������d���6�,n3��������@@���+(��Q�g1�Y�2xy�m�Z�2���(e������1���^���Y�
D���c�����������	"�8<h�������vM2����Bl���]V16�Fo�
��Y>�_+d����6Xj��,��l�;��p!��6-�U��>�;lG{2w��h�[A����������WrA��7����>����./����g*�#����o�����>#)����A���z�C7u| k�CQh����y�%$3%_+�!���A����gE6j���Y����kYM�0�
J
.Vbk�����#<�q�?>L0�Y��B�7�4����h���������hC��K$������|� Vo������?6hH�e�<��3�������G��0b@��CMFp���A<l2O�H=�����_�?ao	���Zz�����[�%����A����Q�eO�1������zbB���JN�?3�ohdSH�����a��b���+��J&h(��,\e
��;1����	dv�c��nf���3��j}�s������Y%T�-��������B5�tI��G�,����>������3�`�n�3��j&cN�
��D��;^���Pb��pdx4�u�{q��qP���v��R����|�=XWZ���nh��}&����VmE����L��'�0�@gblP&�����n���.�@����.�f���i�`c���^��s�We�ot^�ls�"w������lB�
�}�_�#�z�IV	�.gB*�H�5������4�������q�OG�q��a��k�>�D��n�����A�	�n����:N����6�4�S��<�<5f_+�A��&n���5�
G"������fJ�����I�!��(���d�-�VD����GC��<L��2b
�%#�[�z@���J~%��pT����g!��
48����L��<7�#�xP�y�-?�4v�D����E_�e�k�:1�����~��5�p��A\�."_V��6\����+��N$��������R7����J��lE���<R40��_�A�x��l�zK���5��y�*��hl�
��o$^7�%p�����|�����?�5<����eB �o�=�s�`���O]����G���
�pBN/>&��j�|��������t������b2;Mr�����p����J�7[�K#�L5i'��*��x�F�d3�0� ����l�tB>"5�!�D:�m,(��D����!����C��AZ��'�&�5�6���
�k�p�Z���x(3�����n���'3�����������yF:�:���`r2S�gaY_/k6E�-�\ ��k
;����=ev�bOg& ���1���t""�s2���4I�m�E3��a����i��]p�!L)�@eS:��^.|�����%S�Ik�0����L��$�x��J7!�!�N�[�
D��r3��e����n�t��D���Q��B�%���UhIg$K������9Y�I��{�M�p�&�������e�t"�~?��xb
����[�	@�`XR��z���2�%�-��Y�m(��-)�eK:#�	�o��a�����$�y$p��l~m�T}��j�q�kj����f�=�D�����:��j���������G�dH][/k4Y���.:�FP���[J#���*�����A	�8�A%Y3�<�w�A���W{?��1��D��Qs�� Vf��(��1w���%m�d�+�C�{%1�R�(���*����+�T.��)��� FP�f*��P�fg��0��m�� ��
�L�%,����4���
�1I�G���d�������������X ���%��g>|R��oH�B��J+���{��6yS��`A��U�l����fKI�����h!�K/��gE>~"�|���|�G��
������)+[��e(^�����i%D��Dm������
r��2��G���������|/�'C>x
��j�&�m<�O��9Z��Q�	��Ix�4~����_A>�*�2�H��K�I!D�k��<���(�-����������" ^w�<���`:	y�p�J6�d�Lr�����8""'������}�*38i;�1����D&�O-���R����B�1n{j#7T���`�S�me:���IB)�d��
�s�v"�)=�4��6`k�'V����e�c���t���h%{������H�j��:�v�3w<�}�H������J�e��Ba�ExiT1�v�����#g���v�������L��X:�������T)������O��M=�k���W��Xi����9�o
��9�	<�OL�MH�n7nE�wr3!�(�b�E�����t��PY/��G��s�b$���)��?��TC�t�+�j������a\.~f �{�(�B�����B���kjf��6����VC�
�3q�&
m��;l��u�����*�6��D���S�����g!h�����dL"-D�.��8rHB���)��.#��3����$ndMf���]*	�a2�;�`�a��n<����������H���d7�ss���&>��9�Ll�=��~�f�h����G����k!>�6���O����6Q���
�`|&�F����:!��>��j�y��'���y�mF1�>l5�����L���*���X[���r��H��#>G���@����I������:�nB1�N�Q
�gA1l��L�-�w��������������
����%�����&De�D}������h�cyMw_4��t7��dH����dL>}qBO��5��Ns"y��	��8�"�1:���9�F$��D��%
���S5��8�^��}?��
s�V����I�t}�G��Jt�t��L�i���u���Y�&�vR�����e�?�	t�2�@c����j����4������3�)��)k�I!}VH��(6)������|ZH����UOZJ��,O&������������(����i���Z���?61�7o�f���M(&�������u&>5�JJ��k���e��tQ��d�����!C!_X�jSA����bvH{�����D|n���]���V��2����Bh�>��Q�	�������Og��B"�k���:*�BQo�]���sN��m��Or�������}0j����;����|P�O���eF�
b�NV����rW�BZ��^�9k��F�?6$U�����O�����}��<*�6�{�N���������W1o�Ad���K2�t\�t|��X�8�|\*0WQ��^e������v����^~���x�����v����V~���q����������iG>nbG�[?N�����c�M��s�R��s������N�&>�|~�����7b4���s�4������q��?�����r;9�_����'gG����F�e���������������z��	���aGD��������
���������������~{����m��z;�{G�.��������$�SB�N�-H>�������dXi&"cO����	L�"_�����y�>]�Ad�o�����AP:�(")���@�?�H�_�lilt��%&�y�rQ��n��Y��>*n� was�p/���?+p��t�|%��t��Q&"c�����h�%�h�;��A��YJT��%)���O�}�SJ�5�;P�":���f2�\z�>U�:���:���$)bf���]v!���J��X��a���dWs��|�l��)����g$����		@��;���xC�P�JD��B����g����9����'�f�D��~�d��j��6g�1!�h��C�]��q7����BT3|#��K�kL>���d55)�jJ�������{�	��;?M2�����|��$8�hJ>V#���-���;� ��D����{>�cy���`,@�c��t��O4F�#
D[�tv������e������c0/�����n;�=���_cm��y��
0v�ffRd���i�o�O"z74J�J��I��26����$�@K�js�!��
��l�z���ot����Z��O�
=��c���Pm�@C����Q��-��$o�~�y�l+SpM�1��V���b������������
.j4i�OJ���{���lf�w)���/P�C_�t1��E���^�b�/����CX~fZ-�4g�[.�'3���uF|�W����I�4!�	��%�"?����	lW�PSW9n��6��_a��qD;�D���<������0wH�{��q�W9!��xj%�=���qF���4��.�i[���|���6]�����wc���g�o����i�� �sf	���;������c7�-wB�aF�>������6��T���Z��A�^dF["2N����>���w)e?��.��I� ��BPs�nXv�f���es���,�������d#uVaF��X����W�3tU�wo.���i3|��D6�%k�h�"lI���z���64����H��������!�������G�
`v&��5���Z��\�"l&�m���[�������;�N��BFs�H���\R��<!�H@�c.�m��@��u~I����m�rYL�Q��������Z��x[���r9����,�$���\)�H��:�u�`��4%�1�D�nC�#$�z;N�x�H�>�����\���}���f��$cw���Hw$w2)�s�DQ���yT;aH���u����VV�&��ub<2�
�U�x�v���Hv�ce�U	����g�����gO���	mJ�]�W�A��g$���"Sw����|9N���D\�x���nXx��0���$���1c��D�u�CX��v�����S.���,��,��em��E�a�����R��#���3$3�A	�i�{`"Y[L��
sW���m��r��}0i�Dd���CZ������� G�`V�{X`�3j.�<��U@�
������(�*�Mz^K�<#��zE'��4[�o���1�b��;����*E���6��G�H�a���+�un	E�Po��������i�[<~<T��Dh��4�X+�lt�q�����]#���3#}��	x��tB�)�.���xn�f$�o�����c���I���K1{@������� �&���zm��-��o�<dsQ��F����v��D$�.�O#�Hh-��A�����;����0�h1t1��G�:J`��Es��5�B6��e��5�z��JD��F�|m|�j��J�Q2��X�FLlv���G����">�0�_�l�Six���f.���k	���-3s�'�d�����h��j���p�{�-��A�K��lW�bz��J��n�m)��*���:����s�����=���LvX��T���Kvd���Q�U��Yo������a�Z��QP�*;����xZ��j�d1�G�"9�Y�@�G����H�47�t����		h�P��Mo�S������.v��0m���~�4�
�!������_��D��Qw�*O,+�k{���g�bL��g��"�����!7rw���o�5�/�e������E&�/���������IAj#��������I��$��a����e�t� ��.@����$G���6���n?���������N���H
f�W]o�9;�����O���=�l����pa��de��C��JD�3���
�y�U��J�[��+�U�	��me����\�s��H����w�L���������B���!�"X�
;��l �� ���)VEg�����J�Z��0:ia�#�)S%C������&>�e��s0YM���T�k
�uM(��n���"kh���X;�$��'*]�����}/?�MA�5:�(���89#�pc[n�cGA
F-�i���o%(,�����M2�UI����0�cx@k��-���[e "2�����b_�)0�RI����	|��	`�7
<���	�R�p���xb6����IR�]�O,�WE���*�����m��E�@X'��-�	|V$uf�eX�1R����>,*���)��|�?��	�������~bE���x�^��M2�l�pZk������W:���$�P��Q�E��
3�P������DT��t< Cn;�MDu�BA&��TO���B�)���@M�D���w�X����l�i����aii@�@�q5U�������=�q�T���W���������[���	�X�v���Q��~S���t
����3�F����k��P�#m���[��opp�%pR�l�������1�1�S�l+����m�7�JT>m$�>�;$X���t��1/����T�H�]02�0X�U	d�������BA���S�N7t�,������F%�W�$��gi�������A�n��+M$����n���}�I6G��=�Y��7We?.U "�y�=��phx�;��:�X}+�Kl>�����3�u�Q��6m}�_+1����V��J�h�V�fw��6�B-���H�nQP*��Ax���t�'gT�:�^I�	�>�7��P~{=��l�P\�;���i�LTw*A���nm����>3��m�gV�_]�X�`p����=}�������m�nF�y��cA|m���~�Zo3R�n��E�����D[�t��	�	ML�.H�c����[� `�'�.KJ2�hp&�^��}Q���1\���Q�0���%W,����_���Xba$�"��uM`���}{�s����|��~�>�.?h�?�ux���ta��YP�9����>X��V&������lL�+���{p|b�-H����{t	]z%*r�7�O��	�+4f"���"��{�X�����8�����h	�����)U�_�`���X;
�{����2��c�T���3��T��e�8P	���7���%�q�H�����zpPg"���D$�!��r`M����d�6
,|��_���z��mJ<z*>����5O`A�M�����k��Oa���h
R�fg�� tF,�5��6�cBu�h&'��`�|���$�^:	������n����`��x���`��m�7��IV
;`z^��^���T��#�I�Z�'D�P���\Y�fL�,����bR}
V�|�������|wf�fax�"�I�����\�1�����������9�Y��	��8������S$�FE�����q�v>D[0%d��|b��/H���]�����y����
����ug�{BZb�4��kDue[��U���YV�~�K ������Y�U����y)�|G6WC���������^�(u~%�09��2x�����uC��=��@���zW�>#V��g������MHe��Q�#�i/ �>���U�k��9�
I��mA���oE=�xc�"�+��\��Z��7k)�3�������������M�y�7xo���#��h��^`������~����D���v�����h�w���1���
Z��Dm�e�/�F�!����m*)�����d����l��
����f){,wj����x��N�c6���(_h%j�T��$����!�D���,���'��B�%�ji�,�����w'w4N2"���M$d�4D�<Ug�(�-�}��0��0�LB~���^�BJ�
�L�l��p��0�o�P>E;����� ����Cd�(==�tA7v�Q���c*�7��&�����x���%Z�}�iQE�7v�J��J��&r6��A�ga(�Y�9���E���f�Z���e�E+����w��V7D�l��x�����2o��A�����dZ�{���#Y���V������z��`A���	���������U�����a-dM�r?�}���@�XHY��\�����xdA�"��������n��I������3�-�K���T^d$�\��
{i��}-���D�DN����rc��
������ �>_Ax������*���7���hK���S����bA����R���O��L������n*����y�-�6������_|nS��_�k@�0��me�2�*#3���6)��h���G�lK����d2��f�)�Z�	A�5���]<U�P�7��xh��mA���&���L�>�e�����w�N)�ZH��G=��%����[�X�������`�/1���vB@�;�R���f$2�A�v(�I��P�;g+']g��gQV��
0����:�:�o�(���B����E���!��(t�c���G�;IH�{��v�^��=����h��;�D�c��A?��V��� Z���R��}�������,�J�t.31���9��;l4���,]e�(F-�WD[=		�@�����2�������aB��Y5%m�\�:��������"U�v����D��*��
���ds��w�_3��C
������t��������6�1��BO����4a���e��|���0e�U�u���g���I;�F?�����[���_{^����gOT�\�J;6�U�
d���@~����$���������m����Q>����9��������^)�
���,\m$x_;�:���2!jM��^��nA	p������
w>K�z=�2{��F�3�bjjg�G�v�������G�^�=�9.<�u��n�����k��w�����-�������k�f��F]��$�kXP���77[�K����S�a_�[SE�{��k�s^#*�Gv&��`VQi�M�n�.l�t� ���	d�@��_lO$�k�=���etw;�����A4/����n��+�F�>�%���q=�6\TA�v�^�t+�����e�m�KvFp� _���|�S����"�n4�e�^��|RL�yB#��KGB[�d!��B2�����e��C����Juc�YP��K�����a���
�������8���T@!�C��>�[MO��_ ��ekU����_').[M�.���!oa�~_�����q� -bd��Z��2�g�x�{�:h�,��4d��ZQ��(��l>���5��U���l����a�`�KsA}��H���o����*�tX/LJ=�"�6v�� �.eq�|lL�N��W�3� �[�5��)T�J��l�V/�D��F?*xO^��'i+4�������.��!��������l�� ��:�&��k�x�H.��3����Cl��G@��k!"�;L���_�Y5<K>�4��m7~��&�Ed�x�F���;\Up��X:$�+�B\(���<K��r�b"O5��|��<�����LB	�!�Cy����?���	�F��OJ�>�
O��en<��B�>�����q~JFH��)�������a�������!9�����>���/vX�����VI;8Mg1�E��q��}B�3��N�� �|��������� =m�"����W7���
�����<�wS�@M�����!���@_Qot��G�
�6��ft�n�����&^mK����R��lz\�a��c��5���
�X���d"�����y��fuO�K2�R?~����O ���K��sg�d�vN%����=�X� ���c��DP����������/���`�zg�TM���z[ �L8�=Tc���m��t���sTl���wA���.�a�s�L�y8uX���O���N�x�n}��sQ����V�:���>{V�3�,\3����j���u�7�S����]]�7�,`O����R%�tR�1m�-���&g�~�gE�����8E�<%q�vk��L��?3����}�����_V1�����@&i��X��]���BD�������p����
:�Yh���`���r,�����(�oY���dG\�T��'�|M��!��H^����i��x����6M�s��������h�j��a����j���Kg"2����TK�6�R���x�fq�qu�C���rV[h���(zJh�&(�h?�7������T��j��=&T��tG�R��@'?h�nN���6/�����s��nA1U ���2����|���������Ml
�"l���13�$�|A��~+�P�U���V�?�O��X�TI������
#���P���vL������0�����+�$��N�x8
9�������'|��]L�`�Q�{s���� Ul�u�����r�6�a�9�V��I��@�yAZ��k�5�	�g!8�I>�a�"����QBH����%�*[�V�������Hq�L���h��o�����ZkB�4O%X�����E���6��-�����t�>�O�A������F}�daR5�,��W��Ybe���LM���>��.�;�J4X`���*I76�JUb�����pG��n���J���v�P��5_�7!�:�}L�57���c�r��U���fR_QS=|]I%Z�2��{j�/YB�_:�!����s�.h;�����U�������wo���o�n~
���T�������`������������������w�ZH���?n��M��h�|a�:�v��fE�i�a��a��5����
�S-������	4��~���:�fE���h�m�Q&�Ew�LM���������l	amx9���3����ON����!R�lly7&�����v�m�mZW�,��������l��5�
����l14��� !mY����f���G�oE��^��m��-���z'BZ��Q6�!����0������6��J��l�Y�������bU�:Y8���*�8����%o�m����ifZw�W���%��	A������#Y��>+
��?�t��'eT��x�������E�
��kEZ���GY��\���+���%��&�qa[X��������Lh�i��M|�B�������m>W2X��HL
�7����(������������tO���A������c=D�G��4~�
xzxd�Y��h���hF��${���0�,m���~��Y�L�l�(�?�9�gEZL���+Mohw���VN���|Zv��f��X%����R��q�}Q��8��/[W03��No���^�U�q)��{�5�)�V�-!���_Z�Ud�����Iy}�xQ�4U�s^�Y����N�����[���z���������o����������_����������O[���?�<>���9_o��N���3�8�|��������y�q����m�q���v�����/��%�Oc|����-P�f$Yy/���bF��gE4���:���9��nB��*���9�e��SE��.3VQ�����*�
�	P�I�A���z��(,� �7xt��gF(,�<�$k�|V������J��*7�[���S�'wJr����(	�/��7���F6G������?��Kf"��=Z�w�H���i:g$��]�xVS?�/L�o���"�j����	�T�
��uW]A�/�QA�rQ~4P�����������D�����B�#l�;��09���J�B[z[��7��0���8�
05� �}�jAn�
���$M@������?���G�H@��d�C�V����h�J�e�^#a�����)��)�Q4�����n+��4avQv����M���!�Z�bH'$��i��� �����T=�bH+YWQ�E����	%`v��h`����w2����d6�3��pFN�?fG'"2�v�#�Tl���"��������Q����Hc��M�5���$6s�����tFR+�Z�qL��������
tk�aR+���,�TZ�M����fS;���h�9�=�iS�.A)F�"����v�v��NH+��U�)�'���9�lV��`��v�������Y���k��l��OkknXg�zeQ��O�OO�3�PX�����;���U��S�j%!�M�����l���f �
}�����G�Mv3����0���nx�7��+�wSZ��i�+��	��}��*d7(	�6U.���������7�y|�#�:!M}�����Y
��D���I}�������J$�jj@�Z�w�3��-��:QLj%��=Y�a�uP#������iLu���5up�$������A��*W�S���	s{:#����,����{z���"Gc%"�F�aMo��5����9���^w��NL�q�
�^��	A$���������3��B����R�)i��ZK����L�+*mi�m�Y�%��A��X�3����}���q4�LT�l)e��Q���4��S����'j��vB�UY�-�)g���
P5�f�����'��@�\���0E:��Y0��!�7�"����.����B,���{"�tAZ��������`I��;8��;���^��T�)A~h�����j�E��6�Z?��w>�N���l���Z���Q�M�f�3�;�9�*_u/HK�"��1nZ>}GW��f���#�����tt�.���3�$?����X	�pLD�;�W��.��������G���=�'���Q����/2^LD��[�I���6H����_�5��`���b��jV�����2��F���aI�B)�p�Z�����f�	�nM��%�k����3�A�������uB��m����J� *�w;�Q4���0�J�5��g��13J��U9���c�
wA�.��\���lT��~r����l'����i/����>��� E��9^T��=����uL��w���.�����z�M����?NN�J�P��frp'��k���L"[����[���y����bA���|s(���O5����1��nt!��V�:/�������k���gxN���>�������N�%�aT�aD�Tr}��)��<������$U����V����oVr6=#��xJ��4������l�?O�GM
_��~@������S��������	<i._�nK���s��*m.��m���_$�z���Q���A�Hf[�&�U�f�����n�BG���<��w��wGZ6saO&\�f%�55�<,K��A<$��i�x$���j����p?Qh������D�o������#�Q�>�Q�$_����:n�����k\��n����^+B���O�s1�LoT�Y?�lgK�����t����O�t�<��m��X�cIsm�����F�N��D�L>$���q������	�@z[Y)�'{s�S&����G���8,}YPeF�a�t�����`���9'��.��,lB,��W��f�t�I��9M
79n������n���{�6�
�@yX�E*���o+2�����,���x�
\A=�u5�����7U�-�)���,��=aG����q����q��D%(�}�~���R?� a�8�����-�i	��?Id��Tz����#�b�b�3D��@��NH��E -��3��g>9�t>���~R��>����@v7#��	Y>�����z[�&h������&D��5o�#K�	���dy��+��TN��������K{��A&����|@<#�4m�GL�EE�HuF�{M������D��-j�1���CO��f�Z�������~����$����������_�e�3+���nK!{t�Y�t<5j�����3��m��!Axy���X^�4aw�������"���a�[��1kBL�{���e�f�=9X�wv��������U2ZG$V<�9XA��z}m
�+��4���h���Q�1p?Hn5!��x�:����Y���V	�v���Aq9��H���|��stQ�B6�S��'~s�j������=M���`��o��<H,I�3d�����f�I���p�}qAt�,�q���;�n~"r�=�kT����������>�=�p����T��t��b�*d6��T�������$�-:��5���q��c����	��:Ey��
�-r��;�F�R��>�l�G,+b>�>��B��sB�S�V'$�N���3ua�G'�P�	��H@���A*������Z�X|2�>m+p�0����a#s��Q-V?Q���NM��Z�,�j5��q��#���UAj��I>���Z����U
�R91�� �����.s�Y�#��7=+����(��M������7��p����l�f?���<H��7��O�mI#�8q���� >���Q�~K��,�����M��+��{��H���$��hF�12x��q�wB*��Z����	e�C��
Z]��8�p;r/y):v���H�c��p�&����\�Bl[� ����=���,��c�a�S9�����F��f�/��9!<��6$y�d><l|��Z����FT�D�����3��H�hC]-��w���"����N\/H��k�Pm�-jyh�$`��<��M�'uB*��2����L��mF���4�����>��<�!���#rg9�r
Ut��]2�&������
(���6g�X��?$�a�x��\���u�J�0*m?����$u���A������?&�'=vo�EGB������H�o�� �)��=�gRddvS`Kv���'�/_���cE�����)�y�hU�������H��)��P�� W)�+'���l���,�b�C#��Q�LD���NO��HK6�J3���g���53����"StO�2�^��r�����x�K��=���6�Af
�|u�Q&��3��%�:e��U��f^�>8n�Wha����O0�ovBf$@��M��n�O@�fAq�ZZ3�K?�[yZ���be�hSB���1_e�� ���@Z���'�x�k!EV7��{���j�e�:��"R�Y�6������3���9������2�������3�l����s6_�Mo)��3�
������[v�J��5��v�T��8�L���3=��V��������Kbsn����IM����cO�~>#m\Wx�����#���m��A��NK���`�$�ZZ_�/I�
�;��|����>4[F�mv[���9�T�X���t7�'v��e�`&�^�XP*��{(�	����;b�3P��E���P�#�m������InOU���??�F� ���u�X�zA��L��T�=��f���I�	��_��s�\���R"WI�:��-�p���Y��O��vWw$/<���^��X��v��L�]yB�X����MND��#h�c��\��)�xc�;��]w�
~$ry�����o�u����� Y��a��e��Wr��]l���BLG-7���6"��o#-
�!����}���LT��v��H���W{����W���8���>#��o�|�x��%�<.������rx���yE�T��H}#��T�V�����6�������mc���yJ�����q�����_������v�y��s:��N8��UOP9��dh�N��O�	c>A���T�'���p�����'\�|�>��O'���p���c:��O�kMBN'�o�I���1�0��^Ox�tB�5	9�pM'\�	g�j����V5d=�z�FS�w+�!��Oi���������6�q���y���qdo����Z�w.�[����k�~�L�g��������&�3���9��\�����(&�3��,m~�o��}��[�I���F9[��j<���������[5���B��<A._mG����|���T4�t�j�;k|��J�����1K���}���-�����D:�;��K�3���6x�w���3���E:c,gx��3���]E:����W�3����E>c���=x����Hg�{���?j�gDR{�t�X��.�gxR��tF��4:�q-g������F:������8'-�<;��cc��k��on
��������;��Oc�si��o��������3v�7w�����������������2v�7O���������;>�1f�Ml~������7&���4�?^��pc�x��������7&����s��Z�w._u[���hO=�=��!\Ngd�%�1����$7&�Q��8�M���g�����}�e�@����"
y�d����������� �QY6�<.N�Ld�m1�����uL|-h�D��~�
^�PAtWK��qpSE�9��+�����
�t���[�����xG5�/��O�yYR��J�=Jv�$"�\�e�Zl�u�f)�6j�n]������-�(�����o�co�c����
��!��n12�a���|-�n�z�~��o��N}������9X��M�g2g������j�)����2�~��?F�rJId��CY7�PAC����q�K[%�(hAN��m������ �������T�O���������$����,2��m�T�^����8\�,D�=~�
{(G}%"2����7U������-X�n���
SI��n5�����d4��u���!k3�HtS3_��\�f��0�����I4�	p_�����bU$2�ui�W@G�������l��Z"!�����J�+�ju��j�mL�>3�h��!V���[�DKAj�
������?+��~��;����iu����j�,�5/@����&X����'[
��pn�x
��I��5��n������Rg�N^�a�Z�����.�Uh����-@�����*#��(�j��$�9����PS�Vm-/6����o&��u�nh����n�z�ds�]�V��v���Y���B.���>�w�������mv�����_�-���hD������;���i|����J#�Z�����������D��m9F�@tBUn0d���Z��������Qt%����������M{�'�T���(7z��_���lt������\~Ve�:GEu��dL'!����2��Pm��������8��f���r�������Rpmv��[.S����C������5��$�1�in^������Y�pG�o�4���,�������.���~�a8��EFj8�7����*/�bj���{�|3��xt&Z���Z��hg>�w:��l�M�>��`����Lg�.�{T1x'��5���w���uP���2m����n���dY�i�j[�r7f�XP�����k2�}���E�����A.wt<���aH���v"�������x�	�����o�X���-��;�x�k��U~6�[1����"�7�q���������0|>�=M���2���*;����(|V���Qet�z����Q����Bt�>��i5�&���@�A��64��}'������Yu�B������8�I�A�-�����.�>�[��J��"��b
�����1����b������6�Y�w�[�dz�n}JA�!j�	���me�*~Yw�3a�������M���%r,���F?��������>?3t��Y�F=~A^�t`��"����xM����
���D���At#�������D	!���8h+�ejK�<N>��I||��L�����ap���<��^��gE�"H�%��e���>�x+��P��u��t���\��t�>U�r��t
[���N2�	*��ik�����N8�
)_H\�t?(#t�S�h���?�8����E:�>��?���|<^a�%������f����-��B�OF�h��D+��!9E������Vo��k
�]7���{��qJo���H�e���`�,&�,�,�7�i�K0�Er�)�R�T�,
(>�d��HJ��]u�������z#�:�$����	�b���������y�����{G��h:2j.���C��\WC	�	���u3K	��d9���������`s��6�c?���>K�.���[s_<S[G�.63�ed�:W��bt����T�3dj��TlB���9��F,��Vr��(w���"x9[��L���4>���c$S���F��9�x�
�[l��?5$2��uf2+Z-�����A2r�b����"Ff�8A��i%�[����!��Y��b/d7*7���z�6��kt�������^e���*��ITW}� !tF��H��g"���#-�AG�w��2`��g8��������.$��Bt�������
��`2��qaL���@�����!,�
����g���q�z��7rC�_,
%�,y$�a#�:�@��8�y�_[-��$Mh����*��L���"�?+)`�eU���b��ik���<���`��N���T_cB�|t���N���[��y���>�$�K�A�w#@�:�"�H7�<��98�%��&��-����`�@���h8��Q����\�,��z��kc�2�kA>$�7=�Y���]�h�\�,z�Jf����t�bKNY�^�fJ"��^6f��r�+*J0�A<"��b[PlHF����9_�'Y�YdM#]������)
0�� �!sY�_Q�n��R
R�����O<�����W�L��;�d��a&����QIu�����}?�OW��� ����t�P�����=�|����_���T��[��$�"@!�M�1�B��������}]IT&��5<k�.VF&"�Q������%��X�����!����HD���� ���e�2.$�h	�(��8�6�h�^*�V����m�R&�v7�X{V��5w7$�������hX3`+��#�G����;�{{-+#�z���Ve��lHU	����U��q�����[�(1��M���\��r�>����_���~�~��������8��S7�+
��}tZ#_H~E}{���88��
�� �d<5Z�
��b�M����2X<lA*c�M�8�b��o�����d�m.�����1M�gEZ�d�QA��o��TG��\�+���\�`�GG����gcQ`�W�}h_��eCA�������/Dd$�����=!M�B��0oO��+5,He>0e,6,���^�mW%�}��oH_���=�f9eui����/`�����k��m������{����)pO��(��+*xA��}:g��e "{Xv���*�gf}N�5�>��E��J�
����Z�U���8.��}���[����]	<XUfc	4}M~��{�lH>�d��#UB4�l��#4������R���H��fn�$�����tS�L�pWh�Z������C0������������|�|�����I��Z	��-mHT&r
t��x�S�e�7$3t.�$��_�f74���0�s��v��%������*!���&�hx��zn�n�&�gc������P�>bEx��:�z�.��?P��nl�d���7N�04���w�7�����f6f0�=B�|���` ��U}����!�)	�J0��K��C�XXP>,����������Js����)af@�,��4���$?h6�y�^�,���v+Ne�'KH*�:��Q�����j@DV��I����ET&S�$��=���Pq_�~���%�y`��S��'�n�K�p���m���n�����f����"R
gg���]/@���i����v4sLS'��������F}b+��!�����4���+.��<u��oC����s3j1�f����'^��R���Tik�/�6���b�20to�f������\'�},���'���7���������~�u��_"����U���d$.����{LM����[u�&��	�����VY���5���OU�6T&K=�������������_�<��� tn/�h�D��
��<��{^���eW$�]�	���<$t2K�q��"��!�.��,D���#@V�����{�(%"77������v���p�f��xeE�6`���++K@��y]�WV$��)^yo�W"2��	�eE�������J�VVT�h����he!Z8W.�=+�4<�MsJ9�}��K�7�X���w
�����2nf�V$���L��4�
�\��%�3y�"n��y�Tsf�2��IV����'�V$`��B���G�3�������z�$^F*W�@�>�L&�VT��
�����L"z0$���w/��(
���C+��5�<��H:������L��[���y�����^3��!wx�Pa�����wS���H������jK�t"!�]g�=��Q�������B�d���rxR��������sS���:�9��)x�,{l`��������XQ�m}��~V �
7U(����1G�H<G�5U=��!����S�x����f��_�����-���}a�x��s��^��3>B�������\=L%��ba�w����'0[�>�g�$��g]���;\�����(�z�+* 5�g
������L����fg��{�������UnLKe���}��=�P*~�n���<ErZdN���
nt�t'�E"�'�">�cD�tW[ix�)��Bo{�mv���Xa���gc4T�=�.��
O���;{�?�w���o^��������L	>n�s��|�"�����X*��M���~6k���Y�����6�{N����2���#s��g� �5	������+@�������������>&�P��/���u�!��"U���;C�<11+��B�.e6U��X�`M���o��]1��dF5��:1_��w�Lv����~HEwY�����se�h�]����<�n�����:4���<k�`%6k���_L������$�"��Y�}gJ�\Q",�m'���>6T0Z]>�sD�7���M�1��&P�g�'uKU�Y?i�6�3:k��y#����x(Qu�f#�l,$��bN��8QR�q*�i�QwM,�~��5f.���J���.�F�������A ������� �]���{y�|�y�)1���4>���n&l.�d?A�x�����n������;3=	��������nIw"�!�U���,�d�����������)�����	I��7M�:��������;�@b�����{���n>�V���p�~_m8��j���Ym�����j�^�������?����6i��[<"��h[�s������|�PH��S������JB����k��y�)����������a��H���$�y��5e��L;J	�U�<��z�x�D�kEn�����O:��S�7:+��)�6�VA"m�sT0���5t�`a��)1/N�DE�����O|e�&��l��A�H�j������Jj���	��Z�@?�������2���X�ax\�������Z5��Z�w�|�)��h��
.���������� _/�r����V�E���W,�@����L�{���(��O��"�I0���>�x�V�m���i����>�������h6�M���j�������a��F��yb������c�jS�������;JS�L0��}��3�1%���*�����f�3R��Y~JB��lA�B��~h:"����4���Z�s�o"��>g������U2Az-����k���6p��H`d�<�-w,��A,S��b�F��V*�b-�Y�����~�i���hN�yqZF
�_'/d.��������&��0Z6����Z��y�#�
��|w:N�J�s��"#���>��0�T����5�|�q���@5��K��,��G��AC�+����5L�l�x����[�G-�|��S,�/[!����T�loQ=}g���~aJ<���
�^j��i+Sb��uR�<	=��E���K@�� ����/�P�c�f^W�y��V��O�v���L�yn��-��)����'T@l2|5���s���&���O���hKmngA�un���"fymb��;%]����,Ma�h	��A���MW�5�j��eT@�|:���n��������Sh���h�����@~��#��1z���/j�W�}�a���+���
I�s�^{�>:x������A)
�VH���{!��O�Cg�8��M���#���0m�ho��6����1SR9�$Z��r	(���:�aQ~B���3RT(�p����i@ h|m��JL	�M'����,MGi�4X�f�}\��X�U/��T6�@>�0;��Q�������H5��k$�(_�jep���+(�>����&��i�>�4��*:/����6�d�n������������7^�&��$g��w���������%O6�����}��K�D�N�����%������'��}k���l#���a{�������h�=��,����T��)0�nu�+~�S!�b"lj��3��2��7k�������-�V&o��`�����o�o���F��?_;��a��� :[`bp�f�7��
dfH#?���z���\v�N�
���
N�dX��]�]�����GQ�L�����w��[P���2�b=+V���::�1���1�=M�p�L�(��t�b7_���=�a6Ud��\����Pp��B�����-�!l<`��Cuz���G%��Y��3�s%���H�t�
;�����}����)A�K.������
��z� �YA5�
�����JB��=�����PL���7��g&'C���:����Y�a��x]�@��C�0�������0?���A�Im�����Y0�l"(���Fr�Cv��X�[F#+9���b�S���f�s�e�C���>�9N@����m��FH=�KX�sj���2���U�sHB�#�����z�#��a<�����A��y���k��>������aa���6 � �a,����!c�nV�6^=���_����0'�����������A'�{�ep�,���l�z�#��!�1��Q�aNB�A����I�z��e|���K�^~��y"xt\��}�<������;��(���f��%z�����|�Ut�N^�z�r�N��9�����
��I�'�~��~�Q�N��X�xET�~K"u�e`2������8�dq
Q�u�Uv@h�E3,Y�j�bYC���,1��r
JX������B�W���|~a�%�:�<������������O�Y}L�������N����M���(@�
��U�u���F.<3$��u�������vR�C���8��.��2y��E��P6�[X��/s)�c8�����x��}z�������\T#��^�R[�2�^4��d�����>#��,�em����S���"B�Z��i4S��������V���?#�M�L�v`��y�}X�	[������.�kw;�F\�"G@�
�F�6������8,Y=�{�gg%����pn��eb��W��:w�R�mgE
�W�(K�,+�L��N�����6R������[u����y��.2������[��J5>h4�	!L�#���{w{�� s�������$s�%V����g8�.Y�7��y�����fF���KJ4��c�`<���s�� ��0�?B���N�F%��?y����$!���
�JM'b�������~o�@g��pf�_}��ga�@Ru�\�cP�d��)�<�	M.+
���Y�
mB��B`�!�L��]2B�sg��DC
����_4�k?�^~��S}]�1�Z���D�������n��
��hD����@����8�ha7A���^E�C��I �8
L�t�#R�v�N��xG����}G��i���������N��gGaew�H��
� ��]���1����xX� �zc|��5#[e���$����S���2���R�7���������&I������>�
gH?n*<r�O�+����u���$*#�qa=o�y�����0G�A���_����A���U��$�InF]Y$X*�f�����/l�zEW/����4�Q��XI3�wmz+�i2�Qj��FF�"��k�Ru��|ab����"yl��m_�Wg_�������3��|L�_�����v��?QG��� �c�=jbJ�]D43/��Y��d�H���I}�c����l?I��W}�����X��0l�/~�d������e��a�����C���9����r�����'bnS��:�M6�7�l
��l��0�:�qg1�9eJ��b���UB��&��������_����h�y^Y$f�o�N���A�u�/&��u�����I-�� �`���r���$����5����h��i��eN�����ev,��"q�|[5��0�����n����Gtr����9�0}�P�T�vN Q'�6���V���]�4�
������a���B�>n������aK����#0�z����LIg���Y{t�� ����������an��{f~����l��07��Cg4�CI[6�wc�4���f�PS[�<k4���H�c��`�2�XcZ����c��HUA�[�8S��b�W�{�m�O:v�2'��fyQ{X��y�8����<�z������8� ���N�fG4��t'��AQ��<�S��|�(������8�X:�N�>%a"jd�J�������D�(��wD����2����P��g#3�q�]��X(�mM��,��������h�s��������Ds��BAc
R/c(h��C���1<^���H�(����}g����
	g8��_T��<�2����Ff��r_�rt���0P��R�O�����,��s�I��>;
@�����}��Ndq �EU9xG'��t�K:�a`"���r_7"�Q$�v�%��(�F�����|'���~a������g��#�Jif��eK�G'+3�%T�[��Y��f�����:�� PKj�7�~��C�~�XN�$��gg%�7f\IZ���m��\������81�EnO�N���H�a#�I��*�m����X2���7�_��"�0'V8�g}r�g��?5���o�Z7U�����=G�Y0��GhR����f�b���.��!<;��2�&�l�L?)���p�����������mD��.,��J������YY��$�
_F|8lsO�������f�F�������uz���:d��f	2��A+�����==��������1;5qX����7�f~m��pL��1������>����KJ~v4_�;l\��T.#�����c%/��qw@,�y��k�;8z���J&��m����c�0 iD���CL�iN��\<391�A���@t�5.�aidT�N{Z��������ZeaO��c<��`Pa�?�Y��	Yb��,�~��^o?����zP~�g{���]k�xr��[>;���y������������r�����<}���������-�gG��'`-�#�������3����P��Zr�+Sk���"��is~���{���N�/��w����SO<�Sg��������	�/eN
?�w4s
*�����BR!�
<���D_3p6�k���:
a�a��Y6H�wp�i�w`|4b��<ldHbV��;#.%��W�)���.�
�gC>o���,�p��y�,�V~�_!�I�KU%��^���$���^���4�pZ$�*��Sp���������Rg�~��a;6�^��k��6�x����5��k�A�g��u%���K�6�ee�J��X����Z�[��D��bg���Y��i���^U�O�*Q�r����I�3y�J��TVB6���:�5�������4A�e�s��M�mx�8�A�3I������:f�5�^Wb�����02�k���QM����tW���{{	W������U�
��>�����>�v��*M0WvX��R3���
���>;�6>w��������8��C�r��i3a��LV}�N��"FA-WV���<����A:A�E�����Z:Y$>[�U�7V}�N��E���gq7�����t�Ct������1���u�ix6`�^EV9@�q���q� ��GT}xN�bh�W[��gU:�~��4��g���rl���w��;l}��Y(P����"g:%���r ������l������K������x|�`cpB��E"�6*'5tXt����	lS�:[U��4&7[C\��.� ��N.c�Nq��������Yx.�r<�������R���u?�+-)��7?������9��=�Oa��!�w�n������|�}-��N��ngG���8���;E�]��5h�<b�c�~�Z�&����1��o.��n���q�k���qj���G���\�k�V
�v�|G9�?}�W=�0�X���k�y^�t��o�����?���p��z�/"J;����A����������������'���_�?��|�\�Z�uc�����U6���a�
	���E�.L��{����v:��pr�J���c��;u,�y�e��H�����AP:����p�� 2�����v+{]�`~	�������*F<m��>*��#�{r0�p�;�M���v�o)�����I����y;���r�V��wt��t~��_���va��n��e��a_0��v`���DD�7"�XUBH��N��E�S,m���*���E�����B�.d��[�2��&@��s=7���RU�$e�x�l�u��&�hT��`�D����xC������+�Lz���x�'�i�t��	�m�4�>��JJV;��Y��}�=����EG���H.4�j���t�y���X���E�����Om�
o~��!X/�7�K��%Y������7��K�}*�<��l,��$���u
�@�ct����"��|�
��9�����U����@�_V-���h���X^������9y�	������c�L6,7m=��e4�I�5&��|?v�D�n���������e�o��-��	{J�'lT�z�����+o�����Z��O�e�7��c����6,E�f64l�������)�t����E>{8iGsWJ&�*��"e�\�v"���+:��cz����	!�b�o����������"V[��}%�2��F��k=����+��l�$��l>���BS]�����36k�UaBM��y���Bn����9�Q$*7����}J��X�W<��C��ox�/�*�2�������.�$wE���t����u�H>��Am�{d���`��?���N���W4n[�����L��sa�����WN3����������CX��o.���EE7�
 #���D�ZqT�ET�d�_�����-��&]��.���l���A�q����@��%�T��u����hf]����gLBPV����U�W���XI�tX?9�q!E���'�	�N�[@���^����M���hA�{Q5�7C0_VI]�I�4;�H%�"J��P�7;L�[Ix�X�qy���3B�~�5�L-D��kEF�����<�V$����e��n�}���/'m�1$QV���^��������������x[�c�3�D���	�|�q����mp�q���U�f�c�����c"�����P�J�$-�+\�TaiR�Y�J�30[�U�@��rn�����1��+3�a
�������s�v����.����xdA�URy�v'�C_������:�U	F�&���5O\+��gCE��K�u1	5������tl�z��~���-�e��=�
K�}6����K2~�9c0d�"��-�fb���!}��� �H��e��xd	p]����S�LQ�E�`
U��	�fHV$���l�xN���,$j����A�"�6��(���s�������CZ���KmHv���D�mN��[�l�<�V30�ut���*+��
p���;/������T�lq�4mVH,�=c,v���\�x�Y��8[�|�+p������:K@��.ho����������u>�|��J1���n���>]y^~E�M�L��gr��HB?�`�gA�JT� ����y5�1������ ��^N��c�%c�A�e��m��9|��t�0|������sP�RIx'����l�`!*���q��r����;F$�I�Oo�Hh-��A�����zO��d��{�C(zo�n�w�ha����U��2<����G��[[&��?�JXQ2�����8(v��\�G����2>���_�O�A���.j�i����8�`B��������p�r�N,�op�
X�/j�$�K��l-
1=�;@��BDv7��
�g�\>�	��#�{��LX����d�%���^Q�E���G�V$�rR-�>;
h�B6���e���E��n1G�&�Q��\��5S��el����]��:_J����>Q�V$7�����,�i����xmn�����3��a�����������������<�hV,��l���
k�1�:���!7rw��{?�k�_���%�$�/"�a��N�������M�^g�?3�N���?� jN����^{A�4����Ab�������A�=�;m#{����v��%�w��l'�_g$���]o�9Ml@fc3��i`�}g��:�	p��+�����t=���#������*#����?��Wu'������a4�����G�}m�{v������&�R�:�!�"X�
;;�������;;�*��
=�*5��m
;�N�X�����)1=v�o�����#Yv�;���n7�b_C���MI���7�dMM��*k'��3f�k����R)
������w�x�ic�+�I0��V;
R�s�.+�}3A�`Q%�q�Ff��ne2���Y�0�c&�z��Au�UfFF+��������L��hwK��-��GuSJy\>8��L4���8���9v���$����ZwpgE;���h��gOXH;l�@�iC ��c:��gGRg6Z�i=$aa�"���i���9���{�$����m��bE[���8��
��M"�l`�8�Tfg���;I8d�����"ge�q>_�~����D��Z��~[��:n� ���T�aG(��������h����i^�.q%"�p��e0���O e�x���*[��ZQ��^��k(V?���dh�kH��G��-�&��6�D����.����-�d
���T���J�Q�?���6=��@e���yh�y����m(��
f����iCj�-c&2�S���Ak�������BT�,�f��6������f/���`I(�O�}��B [�������/$���X��C��{�"��W`������\:���@p�6���Y���0�����)��P�_;�Z')��{��Iu�sV��p)yM��X�04|��X�:��}�)�����}Bw�nc�^A!�����c���h�4V�zJ��b�U\UmbC-�����n�H(�K&zJ�������%���W@��	,�|�������fs�w�;pc����tT�����l��Kn-(j,��_UX�S����:W���
����}���/&��aFU�G8�+�s`��K���He��hD�i��qH�2Y8�s��949H�"�����c�q�ey,�����}
��9Cw��+���Sb�{N�e?D�0�u�����g��������I`���{�}{u;����|^S�6}�Q�~�RQ�6�G��]���H{����@*;�����I6�������=��z����;cv	7z"*r���y��H��fh,D���"��{�����q��}q�?+BQ���)U�_�p���X;���|���"��c�T:�>����e5�D%,��s���&��,d��5���Gu!"w�LDr�0�)�t�H@�M�j��+Se�_�<3q5��%�=�K�����'�"���ir����CXw&�o�k�lsB��Y��
��b��T�L.H��,�:���2I��p��){g������E���`��-���Y�&�az��f�V�J��0�Z�'����\Y��=�r�;������O�:����X<����l ����n��uu�s���p�?��T�r�������LI��Y��&���6��b$Y�U�������WHbYgYK�c)E���2��aA]1.3�T��G��,�U�!_��n��.1�hN ���S�����i�����u�V���� ���EVIw�����a��)`���Uf��U��Z�K�2�����c�����X�c�Y����jN�����/X��*X�����/tA
��/{/��%�����9��g�I�:EQ�h�kllL��&p�w)��E�
�2��hu!������BZ���W[+;!>�u��T����?obx^+����z�(�����X&���Wg��V0gj��b����w<8,�k�i:����N�@m������*��$�h���d� 7�H'@��x�w����>$������k���������^��������rqK�4,��>�9��?NE�*�A�U7����mJgZ/j����tA�Q���[�e�������2�!Gb��/�D"1��������f!ui���j���CtC���O�����GV����
���c��lLI?y���j\��Sr����*:,�N���N������Hx�M���� kR�Yb�1�3������>�������X+T��^7��v_�����48�����3��r����.�.��������W�����w�����cbK����
	�w?��9E���rF�:�D���9�<3�����rdt!E�n��`���;�=������+�gz�\������s�1N�;>+)�|��������-!�VL����T���"��AV���]x[��8H��K/��Y���B/~h��t�R//t&A
-��t����$`���d��/A;�P %�I�q���X��������m������loG�]v�/��2�8��<�#	�����$������X��UjU������_w�����O��G�	
�]6*j�$��^	���y�
=#����������5���I�%��P1��XU1�/������.(���.)���D�^c��
n�~4��m�L�j��5��
fYU.`��?�=u�u�C�3u: �	�lN�,t����M��
��|����=��b���Y���2����~��
���B����������1<dF�h�^�%n�v7�C�Y��8�S��f����h�������������h_$�|�N��}��-���'�1�X�������r��������]1�gG�.R+����&�6�x�+,+��vw�4�
'��3��CXX��{])�$��=�)"FY���}1L�4�3���RQOi�:��e��|��E7e�U��/�+6���
�+��^�>�e�]�W��W�����Il(�����J=��5YG�4�G���$����D�jlseX�r���7>����!p$e��WJ����M������=	����r���������m(�������"�gw7&����e��4�aW��m��$��v�����5E���b�`��`����c/(_}��c��CN��v���{�o�"�D4�:yn��5,(���G.�<�Ba7Y�����}6����n}>'��)�����
f��l��lL�����K�<�N&���V�� ��x�p0����@L���9�����:34j��U�0����6\TA��m�G�V�m!0/y3%<��]6����3��iw��1m���s��b.p����	?De�`!�����.t���|������[��Y���l�l',��P��\��Db�8�T0�����5��@��o>�����*��;9��L����C�����e
gB�UO,H���8vnu��"�gn���CT|��^|������up\ui:�������=f��<���<���>�������a;C:���D��P.��n���$?;�m�����R���m��zE�ok���B�7�P��1�����pP������<�IC�z'S�h������CH��q{B214t��q]�����Y��{����9�4���#���bzh@��{#"�;>=��h9�2��c7~��&�ED�*����WB�~'���Y��%���D�m#>8����*�s
�(/���~%��WG��v�n����	��F����DP6<��S p�!6���6e�lR�hD4����<���=�*�������z!|
�C��n"?����OV�Lf�#��t�bDe�\��6�n(�[�x|�X�n��_���� �l.%Q�,��W���%����P�'�T	)P�z=��,cC��;�}oD��>2��p��2o������#�?Ll��Z�B)�O
�����0}������XP��ykI���^f0�X��NG7�{�_Q	���e��[s/`������\�;���P����� m����l������)��'SzW���
�v�����>PMN��F�H�`��X�:.3]��9����C��Y|�_������AX�����L����x����v,Y>�������@Tfw�y��O�=KH�I��~5���0�m{#;��>m���y�l��#��%*a d��e���M��Sa�W���Y.l���}:�Ej����JfB�r���=y�����bU�W���I�8!������EV��w{\�b%"C���V���@e�t��f����HT~Ld�^^
����W���W��h��f_��n��v�����}v��N� �h�3>�BD~�_EKUs���xo����>z]�����\�D/}��K"��U}���g�� B�=��f��������?�F?,�gW����-�����P�����>���(����f
L�;�U����h7�
'`�R�����p�]���������R�L�	��cO8uQ�8v�o����(8��$�=^����TE��`���x��@�����LB]���nAM5�@��p�T����h�����0�����MGY�t����+���
��@�I+"( ��Uk�C�`W�������Ka�S�M�ZaN�6���jZx5���?�!�}
u�k�j�����[v�|m��$�@Hi����^e+"�*;�9�u�!o����-<u5��u�$[�>�{G�X����<�j���h���i���lGB���G�";}l6����9XT���E�s�X����(��c����C�D��|����t��������Y� �=��V�V�CA�W-��"�n��\����"pW�}�i>V&"c	L}E�m�����had�Q���Z��KP��Nl\'�����V�Py�����Y���������W�ip�������*P7�������������C�r�8=�^�v{�N �	���B������1iR����z"j�d���yF�iO�a��O��D
e3�az����=�|�f����Z_�`"W+���F�n�91+*�;���L����F������0R��J�:��C�S��L�*Y����PpvK�������i!�X�Djt�������Vg��L�k��"4��!�i���������|G�-�Y�G��?��-�-j,�;��J|���Q�,���y��3ig�����d0�&��*H�(TSA�N���X���������4��m�����=k	>�BR�O�m���,9�����i����'���Ee�-�cz��q1)�b'��iZS������p��k���
�7Mb�B�X��������Bh�i�;������J���.���+���H�V��(#�.J���,g��e�g���b"�|�I��d�cs>���f�4�
xy�G����	�������?��y"���H�gb��C�z~�*�f�"��%���<n�V���X��������[v6���S��>����JBs��qq�C��v�kE7�?�#��|��
2�������y�f~P&����}��~�UeS�#����w��"I�)kP^�*�T�o�F���<s�fi����~�W=���?����c�
��u�����
���������K�_����|���_����.|y�:��nu���G�Q���������������z=����P��Tm:�2��(�������V6.]�����8��H@��>U9m����HU���{�,V��H7����uE���JVOfTm������&n��K��yl(L��
oO]���;��DK�;wnh�(��YIQPq;�T]Gf!"����D��*��,�&	���
m�m��8e��C�YQ�^+�)@��"D�&-�2�{mk�I��t�xf�������Q�K;d�(c�5�����q���D���t9��I��&���pv��k��`����/,y�27�Y���4}�.?�Ze�&�}���i�Xe����*���eMp�ic�d!���st���y�$I�����P6*~x�������Blj�6���ZYh��Mm��tf����p�]PfE��g+�0�R��������h&"���	H�I6tA��;Mmh;����&�"���s�]�]��
(@�+
�����4��n�D����f
1�����,��n��
h&Cg%�h@_���\B/3��@��
n�E+���Ou����Ddm)�zvS�i=$����la�������'��tC�h@��U��gC0�	`�N:�}���(�����[�	h=#�h;��u3�����(zE�������M���M���j�M)O�9�D��
�������E����2����F�#����*�j�d��E�e�z�'�I]Q4�MS���~��v�FN���/`��+��d��t����n�fSo{���&�2U��*�eHfuAE�5�_:�iV���k��/
�[�L�5�gCE�|Dk���3�������������:�fuU�Gs
S�M��2-k���.�(ok��vQ���.Dk%:�����������0J�,+���s��i���dZ4�s�uW�v�0�4�)���p��U����"���hH6uA����y������y�YG���Q*��+jff����F5o�����>�gG�MfV���M-+
Z
��h1�{�V�5��1�g%A���?���ik\��dk����q$����>�����7��y2�:
���e��TBm��t���|�s�V"�;u��'�I	����i���3Z�����*X�VVD`��������g�Y�>,��'�����e����V$@?r@�8U3L��w�BTw,���Q8}���)`g���P�-O	@Dk��>]7�/�����z�����.�f�lH_��Z�����L���PM���=P,j��@���6�3$���vC��q��k6��Ng:��K�/DdmB'G���/b�]����b�����`����h�h^�l(\=h���);�a/�aV��.����a}.�z����7��t�ix���X���1��u���w���k���._,w�Z��>"���Y���6#����5-$x��YQ	���v\p�7���g����TqX���*�7�tp�m�gCP��@���V�v'mAI�����d��Wm����������!����5u���m�|Mpq�U��'���8?��,*zftv+����!�����m�-6�;���f����)����}���z!A>u=z/���`��]"J�z<�yr�*��q���G�s����:���T,V�v*mhp+����� �3��{}57��J�x
7Q]��jo^�4�(sI���&6w�V�����Z5R2��jv�d��0�a��,<��O�#`U���B����PhihS�9*��c]����2m�}�!�=AQB�������n��9��*���aV]��P�B3�O8ss����"��7����n��.0����^�l�����/	�����xAL�P�)���_�Z\�/��k`nB�Mj��!��-n��4n�3�lO��8��������\��0X�O�\�����u��V������JmE+t��-�==KfE�i@�2�j%%V�<��������+�}�Y��{^�w5���H7�>{|���5��t#k�X� r���PF��j������3"Q�<��{��k��������g�r ���;���,�Bt'��L�u����D����Y�f�*����bG��:�&��"#�>M���89;�7��7�S���S��X��i��-��2�
��|�|\�{H�SO��bm�}�M���a>-�/�� �l�E|O�@����� c6<z"���!4tz��5�64�j���9-#WbZ��us����J$/�i�	
X����LubT�A�`�r��u���"O���GR���
/D��9$�?g{��"L2���5�zB���k�5o�v�^��a?I��#����N�����b���V����O�mp����<�Ej|d��6�Dd�i_0�ab��������o��FK�2��v����w���w$`���6���q�[-D��|��\�\z���<���a�������*���j�G2kw�d��;80���l���������R��lC�,���?+�qVo���bE�;���5jx���������{��nBEw��f��V�����n�{Y+�M+��?�E��_}Z\���De�9�/����hua
�;*x�~!�wu+��Q��@��/D7%>c��S��}.Yn���g�,�&������
�|R����6Kr��V+�������*r!���i���}�|�T[�8��[=��}\���~��"|��>����(��y-q�����J}�erk������hEr�	���k�d����	<)E�u�,�������	�+?�c����KuXe@errs4C%(�Dez,�2�iA�;�P=hR��|6"��Y���y
���G��S�%mP)��Fq���$�:���j&R�#������2��I�2����k���Q����$=Z��*�y��t�m�R�1��e�N���+�������7�������n7��	�'��[�L��08'��	�B�/���Cx0����)n�yE���#-J���BYa�.H���(��^|7����
����y!��H6�T�#�g������J�O��gg��w��O��������%��`��[�
���>��������;	��q�p���9o����6�?fsf�dP�gdp�N�	��[���8c�g!��!K3��[
R�!5&v����7YPxK��#���O��.6@~���@���i������9�������=�;����
��
��P��C��oH��tb��'�,�H<D�:�%s�(f���-k����6���|cm�<F���;��������F�T1?�/:{��+�a�����9�kx���������AI����dyO^C�����<��#�����mz�er���C�HA�>������pF�t��C,��/�V��`S�(�*����kNI�|
���@+_^�����@�[t4[��t�l�{xe���N���&����u��,%��L�k����,\�'�b����>��&l�N��ca�����%v�C��,�h_w-���gG
���\3r?��~�!�5B@��4���P!�!�����&c"`E�TH����m�����K�>��~�E3�!�����"�Z���>�AGt������4f���sv�z\�2��n/=�-	����)�34�p�v��y
����Plw-LO��l|v��m		�kt��xx�&bc`C����B����i�|���#=�R�i����7T�40�����-L�~_�$�9�e�[���g	�j�'u���f�u��6c~�����Y$���-����g���?��F��tm���4����DL��.��"��I�������9�����_��@��#\�F�6�}�i>��}��v�6)�d�&�`~��b[s���7�De��n�sO���^��:Nh�>�gg��~�qI��TW��.g�B�[��TW&��������8b���x~���6���L����pS��xe�������X��i)�od��m$�s�O�<�l!�����DD�A~x
�v�����8N�	_>/�������|$`_���~��-QQA8s�p�|X?Q&�Tk{�/H�84��j<�
���pA#lH�����~����A��`
���>�&�3����I���N�L��O<�-/�)����`���!�g4�	�+3�s�ir�e����,]��t^<����"���B������p.L�������R�U�Y=�7Lz���3�}�y.�����A��?���6-�[�N"�V�P�'b�jw����\����o��Pp�3�G
��F���������rs�@,B�lF�+��;�����83����0<��@$��}�'���
���ktR�(�]���I1b�y3>��A�E��h7V�h_|��@0Spg��G�<M�v�cb(������M��!���N|p�}��i������3�W��<��e����n?k���T��],�\v�'������d���X�i�O���{}��:���uX0�X�s�
����j�\�����Ly
�)�Luo�)9����&I���M�U�q��B���s�i�^�a��2%w��:�����`������/M�9Q�;g��j����\�{��2�0b��+�sH#D�_�����ryA����
�u�<�&6
��DT�v��{�jg�Q�{D�c�l�jL�SV&D�</#�����0%�G@����Rw�d�����?�����#�2
�m��;>]4T�)��3��<�mu����n���[{Q�i�����������>�5��`'���P|�\6��u�o) ���������{��h2#���������>��E�Ic��#�v��c��r �y�\���J|����gN�����C!��JX���'��%�_���W�
��|/������^l��q���`��w�E���d0�=g�w���A��no������5�V�~�0c���,��s�E_E��5m5��V/�Q�K^�����Mw����t0�r2�e���*�������\��s���m��g�������2�)��b�Y>@	?�~�����/=����~�����>��g��\~>R�A�?_#���s�?��g��~V1�|�Z�~n����|�J�~>S�B�������V�:;��4�)N�+��+V���)��e��;������;���~f7�~���k��\�s-�YG�b��JUG1�����?�Y��!����~�8�r����W.��������^]>�^��6�N�b�"G�h��5��%�KK���A*�$#1�\����K�����2S+��VkV��j����\���Z���;�d���g��Bn��)�����������b�}Z�g�������n��)����?S�����ws�L1�~�����3�~������O6��&?��{_w��L1�~���V?���{[�R�N��,����m���-��}���^v1��y��h��e�-Z�����\v/��q��h��e��-��}���Zv-��i��h��e��-Z�����Xv+��a��h�~e��-��}���Vv)��Y��h�^Eb:v��	O��~��v:�k� �C��G"8�{���C��G[
�=���?s���|����~��s���?��'"8�{� �C�%��Z���_k�}I��~�	6�����.����K�O����CDN.�f3�������WEe���:c��x'�����F R�����I���"���5XM�$@��rv�w���w�����-�����?$��W7[���YlW��B�����,�t
�(�K���������J��2�-r�����J���Z�j������]���x�)ZI�U��ld�(N�s7D��	_�C<�qF�Ge�D5��6���Z����@u��k'�*p�t��X���
d
�nR������Zl��1��M6���o�����)��.�?��j��K�E�t� �~-L����YZY���O+N%���M�("��^��#�*J}a�k����D6���v�^�?��������dj,�|Rc�v#��
���\�o%�k:�M}/]��d6�d��s� vJ���u�<He���O��%Qk�+`W>��
`�����/I�aqn�7��-DKuY�+���%��"�k��4��5��E>�!rra6��ZZn=v7W�t�0]�!�5��K��vP�\�=������
�$�\����R
7���2�D���t{)������V�k�uSwX����L;+��k3��.]5FE�"u���\�8�����B�<������0�@w1�#�e�g����(2��E����%V���h8�.�Zt���W�Yq�:���0��-!�������V\�V���j
q�y��r���+�2���^~"����A��&�c�/������oC�$�g6����p�`�;��I>�EE���H��VF����A�SWs�\����ja��_�����6�3��[f�f~��f����J�D�5�T%���\X�a������M�����)�E�AWT+��,+��� �Z\�MP��` ��_"�m����O	�l
��i�"0_Qdz������h�_�%h�j%��*���O�����r;���'����mZ�(���+���J%�L<T��]T&�9 ��.��R[��BGt����t�&I��:9�S:M-���L��A3��� e"iw�h��a�4>4��i"�E5Uj������E:������:���Qk7%��*C"�|U�����@|] ��)�������)�:�]�gE*�
Lqv>g(5�P��|��x�0�f%�xr��E�i�'Q
�2�`���_b���k��A�_�i�����ch��M=S�\���DL����i�fQ��t>$e"������x[��o!idQ�����m^]����.��T���������3�'���A|����:��Dou`D��X�;�?�~�r�NF/y��O�z%-���e���u�����F0��B^��s�Vraq�$W���v��i(|�LG������\�@����:�t="��I���zl5�2�����?�:�$I�)Y�N�������L�^f*U<�j�������<�����-Id�:�s/>�r�!J���e+��A�Aq���Z�Q~�k����Jpq1��
��,�������mUp�26\R��$U�>�|
�/W����9�>����Sa��)~����Opz��$?��*�����d�n�Gx���u����S)SmO�O����7�D.��c�����_U�>+�~��F9W��g#�{J�5Um��q���\���z.��C���3��r�gE���5U`�����-O���A+��fH�������K�V+�[�����yv��2M����0���E�~�R8�7z��][�gp���\/��Z���8��j?2�o��
��
���X2!"{p��W"����+'�2Q<��h|d���#�o����k{�X��"���x�*���J%��3p��5C�A����j�����H�E�&�z�2�����K�/in���(d�������lUW��F����������N����"3�M�s��H��7r�[F\�}��+5<��E�R�
an0j�u7}�|<�q�<,3xVL��x>^d����&6ru�HS���
0kh���=8+]NQ-�E5u*���Ps��4��/�
M�����L���\�\<�I�+K�-4	������<��Y�&��H��Cb��#Y�dK]���l��>�)+���*�����l"Kh �
R�$��<�V�\�D���L4�f������,�,-Cg]�"[����q�66Fc�������Y�=@Q=h�\L_8��u���d��{�������\����������j1�a�g#��M�e��*	�D����	�Z��'�"2F���a?w�S�,+����>�OQ!�Y'�p�����+��Y���\�"a��E�hL�l��A	��J��~������=����
*"������+@���Gbt���K��x# ��u�������^Yd_"�n:�0�kLZ:j6��������
{8�6��4�_�����-���1��9Iqt3�}�Y�LQ�����|'#��Y��4V�m""��A�64��z����b��u{'.��8
����1-���/3u��ePD�p��]G��F*?�]�(�]@�����8��@���>�Fx�M�v���OY~�<@�������>����y���g��������P0�`O���z[���V�/[2��P3'�;1s��Z_���E�+��"|V�2��i�k
����"�v���Y�����;�4��i���E%����R=����6�D�zL�,/N��n�?�p���}hC��eCA����aU����09��Z��e��m!RE�IbO�D{\�Z�!|`���6{C4�3��J��������1-w�/�G��(���kN[�Y������|{��������u���
���'�~�����]c�ry���h� "m��r�i����8P5��i���`�?J���|�_�6qUs��r��h���bC$�]"���yqeg	�"J���+��|u����.B4k���zf�'���]�H��."�m�������$��5X��B�p�l����������`�������en/��m����u�S&I�����nn�7�2��k� 9];����X���|���wg���P=/s��rZ��/;K@������T	�|�5]�j>���mH]�	X7t��1\��Y�p�,��d_��NUWk;�`��������'Ym ����4��z��UW����fw{0��E�AX:�l�=k	���s��kd�
C$<%�P	��$��P!���f(�|v$�9=\5��4����S4%m' )�����*��H�4�g��i/��eL�|[.vER���������K"��(��,���to��<�'>������������{x�XP�3�U����.V0�B�\���g���n�t�r���YUc;�H5�����w�<�V6�uo����1e����7�fa��i��b�'���!��K���{u��Y�����B�����"�l�W�\��Dg0?WO�@����Bm�}:(f/C��F�d��_-�=(����.}�v�[O��������{�������~��[���U���d$.���j��������i��	�,���VY���5���O����P�,��:T��k�-�vs�t����������=�����6 "�s��T�y�2��]�Tvu'@�����NfI<��W$�#=����}���<�bte��%� ���<J��������6�]9<�qX�=^Y��
�D`����xe^���	�w�WF�9�pe!U�����.�h%#�6`/O�����$���\��r!ZY����eO��?
8�9��^�������<-���������B�����D~���e���gG�-�L</�����ASOd�S�����G~t���w�����w+������La�(&���#�����;P�(2��[Q�Xq:�u�#w�I@D��?�j�6h���cWM�)�y)�����(3�7.�X/���t��,���``��:�����
���H�������gG�W5f��cI���H�u�e��eed��5-��)�
=0�78$��V�-p�l�����[�������V}�$���X����gKp^��m>���#s���s4�7.3���[P���$������%����������E��_W.
���r�/��y?30B���
�w���x,��!6���Yw��De2%��'�	�K��X��dI`������\�o)������s�|����].r���l��s4�
��}���3��&J��������M�@�u/�_nH��g,�c<���\���1Y��Z���������i���!���Y�7R&��������^n�����bQb#��BDff�����9�a9A]�����`&`����}����\�i���]���l
J:����w!V��w&/�S���W�d]H�p����D!.��k�+�>m�!���i������%G-��Se��������]������u=�,���
� �dtP�9�"xO�$������C������
l~��W�)���e��A�D�9t.<q��D�ub�T(�e�_H���`�k�*��vN�n���q����������Bf��������t������wV����&8��eT"��<;�X|%;��f����2�c,���mpW��^%*��o�t�_Y��v.�0��H���/\T����'sX�Bd	Y�G����,�h-����5�@
��bX��z}"u�����y�p��D����k�!#��"hD�{	8����8�o?mQ�L���
�Pc��>6����`EZ8�h��7����g*\u:e�W�Z~[2�m�yv���i����������t>[���#A�pj��c������}��n��n�m�$8Q��?e��u# )\��S��w)�������$�]^HJs1��'U�E�������������nf��["��t��]�������MC��������[����nm�K������\8�s%Af�r�����V��WB����5�S�H�k�3\����0'N��*�����5�Jq��Z�P�h�����/$`Z=�����9[S�$�O��y��
-Dd��u��n�n+;���lO�.t�2�
���x��c������a�L���{�J@?�>|y���;w.1$���I��������t�&�A[����H�fS�P
W�"b-�������t��$(��v��W[��"T[��D��-��|������[���,7H�D&�`���8�O&Q��������V�2�V0{���Q"6^����\���gl�!�R�	p��Zmc&��E"r�
�|S���8�k�l*rH���o�5����"�����w���Mu@�#�3�\�FW������A>���5��R/����g[m�b��Z�#��-�eJ��6�1�	h�����4$��[�8�M@���of����`=V�2J����`���h�l���N��3F��7�\N��kg��I>����Q�
���v�I�0Py3����o����6f!���U2��"��-��a��ps�	��He����������l!
�<�!�f?��
�s�m�zZ��o�v�)hp$_Hj�����9��
�c��8]{�aU��V���V5��l4��/��a0k�;d ��m�e ��2���?�6T�CII����#�Z�DB���?�X|���P�=Z8��y���8f��[0��e��G&��q
4�(��k���V����5�V��PG��_�[#OH?���9��|�{+��dW������C�`��q�g���
��
���;�/����_#zp��cD�kDW��js�:&��]������*�v�������9�uV6�n��a��;��7p7�D~t�������� �BW$�����P�u`!��������L���(�\�%�P7�:��VZ,�?�����F��Y{"Y��c����}�v7B-��Z������Jd��D���]�C�2�&z��tf�O-���lE:�ul"p��}0��B	�=�a�5}8Hxe(�����d����P���Iq];��ED�,�m�N`�6�IlO{�Y���;������;
P�?p&"�E8��@���������������D����h������������h�N�g���xq��� ��L�*Dl��ACZ���iQ�Y�+������_���
Q$���r�?	���}~���n&�(���?/�c{	���{6��W�W��d��n'����������oe7����n4�.tG����
���3������mH��9R7tX�8��	���3��,���������2�?z�m���d�#:3����u���Dd���Ds\>�e2�27���Z�&t^^g��df��!���w-�q��@��f��XH��D�v��e�l��`�OcA	0�d���A�S2(S��[���Ly&�����6%��1l�-@�H��*��J�(�E�������[��t�f��6@�l�������H74��&��Y�=���p��O����
?4����@�c>O�<3�"�����'"��b�
L@c��':����N��vA�������>�{���������8����\7l/����w��>�!`0�(����,+�pADs�48���W4�>���z�y���N���~<d`�#_���~����/�n��9��D��Key�{���;��]	-<���4��c�]��y)�g���x!������O�E
���Q���eR2ht�K�������1�_,��-j�"�V����Pq�����38��#I�����@��JN��Bx����j^�a�?�)!F%��/Xc�@��~�k%�C�=��{��wtS��n{��"t]����@�r�'#)����E�������F5�� A��!�`����lk8�%�&3qQ�a
V!���	#�����	�7��a���6;t&��h[��B���dFb��Xj��v������A,��p0�V��~,hb�G6��H<B��u�01b�o��E���D	%p���A�6�wbglG�q�T6�m�]~^��1$���j�On��&�l��F).c���bX����6b�"-�/^��s��7�dG��Y��F9�PK),H��N�q]4��4N<L���/�p�)8����\�X��@f�386��{�?�D���]���5�b.��Q|�F��l��S�f�.)�wQ;�?�D?�����G���L� �~�O2V3c�h>I"�W����5������L�5?���|������~#tHS�>�9�YjJ���n���}$�������)0Z��tp (������2��)p3��=�N�@?���a+z3�����_��5�����`�Mp%��+"(���S����s>?+Q5hlB����sgH�o�Z�`�s9��n(��&�%�j�����04C����L�������c2���!�h��%UW�E�b�v�����6F�
���H�U5f�7��p�r�AC+!��E�8(��WQ�{zY�xC
�#���-��(�$�$"���>�*��6�W9���H�[�z@�	����&��{aT�����"��F�}�Ts���4�^��@�E��[��;E������/���5b��h���3�MtzO��lc�E�A|�%\D~,d�"&@������$���f���U������L���$k��j�N�I����!�M�`�wB��ZH���~�v����-S�8�����y�x���`������-i)j����>	eAL ow�+z�#����{�P�`��R��a	'����@pR
O�������"88\��{6�/� ��$���[�z�H�����8�*��&�����N��#BR�j�l�H�s��������|Dj)�I�E�����'j�7k��C��AZ���g��`D v�d���<<�y-�V,�����@��M��o<�c%�IY/<.{�Y�+����M�@�x���bQ_�5����cN����=���0{�=��=]��dNo���9�DdxN��-�� }�o�������OR���6��]�f�M�BD�wi\�5���SzU��M�~W�E��M=�Y�	�I���`Iqv����VL3L$~u3��^�O4�w�*+��Y�1}���)���rC�hI$u���l�/���d�{m����.Dd��������%]�/�h�/N���y�hI/;��,���GK*���%]�������0��T}�&�y��@����
�4�X^?M)g�S��|m6���������f]��zS>�h�B�!5mm�h�2���:"�v���B�.���7���A	a��GPA��I��;cFP�,R�'��S����IIm���9[0"��\�����������'����(J��(>+�*�8�OLT(��K���`FP�f2�`h�f<6��(U��� ��Q�s/%LA���D�KsC!�"	2�u��d6����O����*gb�`�H/�tZ����Tfz��S*�1��Jc�O��\��d���L�s���L�|{`����fSIx��!�D���R
<o��b�n������B(�]�n b����w
��G�Q��gU���nV�	tc���;I!<o�	�X��'C<M�j��-��7i-��Y�y��l5�/�z3���BZI����)D�>��6������0�U�2�	iE@�g�<��T0��C�0N�J~$��
��;��.��!"r0MS_�����~,p�vl1�y���H��Z���JR�7M]G�4��F7%�O8�K���i E*�����<����m�6��.k��r�9��ep����{���<jpB����"����f��f?c}���a��s��c��^@(z��
5�i5Q��F����j��9w�$��������g�^v��J�u�F^�����
<�J���6����3�Ow
�4�(��N�7	���.��f�|��$������:�������X���qUT�N�<�HH#�A�%Q�=e}��TC����S-�K9���Fw�Y��w�U��V�%��f
/7�g\��>c��j���9Wqza�����9~	Q��qE`�w��&�u~�S�~���?!?/�6Q�|�2���[^D�.�ey,���1R�-�e]�*���v/$y#k20&��?��<6M�D#3,t��<)0=������.H�����ss��p������������[7��
/+F�U�F}^�cm�)�J?���f���H4�)�|�I���F����"��<Q�{�Sm#���n����!�)gj�x�'��`�������V&��>�#�s�����$���M
<���[���cVCy^h��V�A�	���<��vq��65���9�v����-+kDP��������E�A[O��~�	N�����f��]_��|r�������9��6���l=����7��	�'��Q_�#�R��j������p�<���:��t��?#�2����v�����O=�g�Mc;���*kw��"�2�]���� �Ka��o;�@�!C�9���jeE�[�v�Y]�7�!!2
e�6(d��
	�j�B8v����5;
�AZ��Fy"� O���9�c���Q��V���Y�?!jz�����w����IOy�vr�B|hH��n?�k���Ehq�(T�E;z�0:dh���R��O�6�/4G���0��A��V�e�cCn&R�TrU�-���8.���C(������sHKo�t$>.$2�v����4,��6�f���m2�B8$d&�
��l�vX��{��Y�{�['������I���,�A,Yc�cG k�o�BZ��^�9kc��D?6$U�����%�Q�����W���AS��Fz-��-���������u��.�A����Z�u�ud��:�x]7���U��=���[.}�c�{�e�w,zo�����-�������R�;�����W)��;�/���q��_7��>�)>v�E��p����/5J����#�L<s����g.�o�h��K7������G}�U[^�����������;:����}t	�v��m�������~��"��=�����nD���?	�%�b��)���~���������W�?���?�o�&��Z�Q����r�o�F�t��`�,@Q�+�����JD����<
D�]8?��"
`��������2A��u���J�B��L$�/�l�+^���S"C6��F���D�Y=�K������F���(W$`�?�
������G����c��M ���w���CV����]JT���r���mN�-��%�&?�;'v��$":�yy�,�t��)<Y�:���:�yr�ad���u{��jB��-L���zn��9�;�2Q�E�]9�^D5��� 8�K2eW����r@�3Y�T�"������D����Hz������!��~VR"����h9$;��wh�=s�"��F5Z�<h��1&��mo2k�XM=��mJ����~�s��	�D����&XV�d=eV��_�tk����1T�����8�p!IVs]���������`�/u� {%����������Q�l��cv�|�5�Y^I=���k`�V=y��M&"�{���6!5�@e�j�\�����$���r�|��;�����E���s,����Y�nQ�g"	Upcft"�u^(�o�����u��x�_�C'Xt]Kr���s���X7~WTv���/Tm�~09�L�]�<���E�G��7��^Q2�V1�R�Q���D�����2
re��9kT�o�P�]^`
�~,!�b���j���zk���� ��j����E[���4���d�d���wZ���f��j�/�nm���[�<���3���+�:�Q$*w���p(���`��-����d���W� �I�����������������:'��Ic��c�6@����,��7�X�/����ix�7u���q.ls�����
�V"2�F3��m
����e�������,He������+�Q	D`(��y-Z��R����,~:; ��APs��m�1�7�
A��s�.Sm�w���$�Y��*��^Y��~��SW�>]54%V��o�����R`;����6����)���#�umhz��"��z�"j�_�`~��nj�m��,D*Q:��Z?��`��J���0�f��h�	i�������s�H�b.��"�	�1�r�b.�	NNh�{H����e��_:J��;QAq
hA�}|�pD�Y�~L�uT���.� �7��Z)�H����u{`w�4��i!"#�	��;s_����~��.b�
K����el�6�	���N�S�|k���9��u�v��O��]W	L4*f��Yz����>'��VI�S���8�wE����.\n�"MR�����|-�*J�]��8�/x�+p�����*S�1��o���L��>�������4��$�w��!��~n9e|��5~oG�)!A�5p��#�${�M$�uY��
���n��J�>����nHTmj�����h^���Dm1�36<���3��&��Wn~>x:��e!�`FZ��������0������C~t��U�wz#5�\CR�b�������k�Y�+���2U0[���
}-��qF��sEu��J�q�/y�+��#�_��]g�h���V:l�^O���2�������FB����qY��Z���j��WTG��]3�����HF_��0b��Z�.�AH�u!������kE`��4�^�1�o��(��Js���8B��Vn_62P�RIx�����l�`!*_����XS�����a�	8����Y�����L�Mm���Gc��b�bE�bp��	Nw�h���H��t3ex����eRm+��2/����Z�g%�(Kv�����S�,�&C��q6���_��<U���.j�����kq`�	%2s�d������:q|�W��}�K`���M��.%���4�4�M�2���HU����.-H�!�p�{�0d������Lv]"���t@IVM���F�V${��Z��QP�2;���O�Y��jd1��G�"��R���k6E������l���7P�g@��;|�'#����O��q{���iA�����6��W�8�a�3�cF@�x��MYOo,������[�b���~\��/�.�/&�!?�����}���a��q��
��@�_���S���Q��(8��:�{��;����p5'��f��^��3
���3H��3P��>{����������t���Ho��f;a� )����zG��."b�X�p����D3������c��`e��C��B���8���OnZ� |�-��������Ybfo�������[�}m+�if"�;��dK����(�`�7���ig'2;������N��Sj�U;�q�0���1�)S&bF��e�������G��w.``�����~��o���.{��H�55
�����x�V�1+]�����-�_HQPmN��/
�a3�A�H�'=������Q���K��0����E���2�dv+�z�9�u��sOh�ad7]��2032��bH@2����a�d��mK�f /$�u�i����&|pHI�H�9��c��5���L5����uGR4I����'����CY ��c���7�:��2L��C��,�}TN3��5���u{�$�������7���x��e��'7���{d�a-�2;�O����$���9���>rV^�����f��t"�/�^��t����[*��c)�u��X(4E�ZY�I�ho�}�������m8M�2�l������-�j�lIkEh������X��q���I)i�j�a���9	�\�v�v�����&!�t
�����V����9M����G*��{X��=��,����`6L�3~^H
��`�D�y
Oy3hM���7vo����,�f��Nx!��9�66���`�(�O�}��B [�������/$����T��p�s��b0��
��h62������r��Yz�E�}�-�����Y��/L���f���
�I�#�0���[�$���D�3�gE	C�������A��x����O�������/DPH��s��S����J�u�Z��*���6����$�4�'
��g}�'_(�������N`��'�x(Y�Dd6���N�;~�cw����T��Ud[m�c�����X����h�[�E�O�\��,�S+��F�v�����ofT���8^H��M0���']��"���U#�?��C���M��&�41H�B.[L ����s���3M)���J�>�����C�#|!�#&{J,���������S,�����ED�$0��A���'�K�x����{����G���-��n����ta_�]Q���1�:`���^L<����$��B�����Ol��p��;{�]�������7��	gh�D���E�#�qc��M��#���������T\L�"_��9w/$���$���O�Q$�ul�J2o��,�7�[XPI�oM�����.��,�E���&����D���D$�!/�K90�����d�6M,</��4W��3quS#*J<{*>�~����'�"���nr��z�-Vw.�Y����mA��X8k08.s�`&W��`���j�Lk/��8i�����!*��C��������JD���R��s[ov���J�?B�H�o�^�6,���C��*�;����T���;��T�?U)�&|�Q�����C�e���^���z�a����~�[���	�����H@���}NlV�Oy!����aq�v>De2%�d�����M-~!6w)j�#��o��:�����_HKl��z�����(Jy1���9�5�4}�G ������Y��(]=����X�������B�vCd�E��/�(��'�����Y'?���#������H�G�����E_��K������3[�������YL����X�J�9W���ZH�n/$�^W�k���bO��/H�q��6~�Z�}K��Z���{��zM�(��&��4�c�WLH_����
@������~�(���\���<�V
_{�����H�c���,KCm2d:o�� JC��ii�T��)4F��2��n#��a�`=��4K��t�����O��hv�&�90����0TZ��6O"�"��i9��>8=-t�2����r}����I'ws����2�2s��'�gD�����/8A0
��)Khu�vX�{X��/�n4%:�;7���Q����`����G��(==����`P�PwH�CY�{ey1�J��m�v��zN�x��H��L��&�6��?/��]�e�C�[���i$�[e-�.ZQ�<�}�H�� 1��$����v��x��/��w��������*�"����1^Y7;���`h�j�|��������s������=��������q�/�M!E�����'���]8�G?~~��_����dRW��Yd�t.W�������pj�����C�O��e����<3?LF��q�������:c��c?w[���k32?��T�9��U����"�7��*�
WRm!��Gv{A|VE����8'�������q]���n'O�������
o]wY��MB4�e��3�p�W��g��|�Z�o<8��3����p	�P�c��9^��k��L���wR�����W����(�*����`���}�^Ch�e��K��]I�UW�����tN_�E�.����@?+)	���&�g���o�������6��5��|V0Eo4�G��
�$�9|B�,���D��[����V�0�4�(�[}�~}{=Z�c���X�Y��3�d��]z#v�����tq�L��-�t'8N����2��I������[���T�Q�\��;0�.��������^r�f
e'�{�s�\�(��$��/+$���2V���5��eR��dy��'Cap~�Q���2����3LA�	�,��s�D�(l�M������5KO��8��
,Sd����Y3��
�K�[��fd��s����"v��J���tb��&�y�Mo��<����
e��]K;- ��zg���'0��5�<H������g%�������MU6�����F���ix�"q#�WCO��n���:���	����Oo"����J�-[@���S����gER��{�� ����T�������r)J��j�,r����Q�I����9���K��
�O��8"���E��U��)LaV<��i-l
�q&�<��+��]����G������������Z5�����\�(}�r��%�0�q�u&��Ld`b�}���������N��_�z�~j��3p��\D���C@I�����L&�OB�,����{Ws���&>+���)!��������I�_A��9�c�t��\��E���e+<B�)�D)w����"�xU5Us����� �CY���A��U�d��:�����e����L�}��Fw�W&�����a��J�����<-�V����[�Q���`��Y�"����
�^sc��U�a��g!�N�h.��&`b�$S{Z�������y�A��8TS�C�����p��X��D 6�_��s���x�`���NDr�8$dy8r���:���3������u���2!c7�,^H�����=�2R����m��������8��g�������c/"�YM���U*j&��Fs�1O�����j�)��c�M�������X�$.�i?����L��V�x�I �{z:�����������t�+<2�u�F��� �d~��_1���VY>oC>R�h?���Xf�!���A��^$����U~\��`z�t���z���Z����k���68U#q,y.3tb�[�,��������w{�^nC�E���"eX�Nl��D7�'2���5�P�A��������q��C��?z��y������?Y��� ��?���(�y6��47���k���@�-B��	�����T���J8�~�df����8�7]@	2���2�E��HUN���Y7�z���������hT�V�,�h�'����9����7�m�������-���0�������SsO��*��v����i	S���+��!�lb�Z���jg��x��t���9M$�~�j���j�"�"��)}�1G)�	0��C��s��U7]�u]I�4?�"QZ�1=�A ��=t�T�������<�,���eK"1��yu�.Y�����v��7������ t16�g���a���;��k��,2�_����C$�^H��S'v�YQ�L���J�����G{� �J�A���,����^Y�&�\������oQ��HS���(���
���k�KC�, ��1�F��n�,�r�u�F�����1�Yd�p<��
[/�rXv/���-�0�Q�DYW���X��e��-C\Ol��O(��Ns�,$��w\��b��A�rt�H����|�����x�w���D7��/�gww,��r��|�����J��3�;F$�|p#
������������+�$�I��BS�����<�t����V��,d�L�?Yt5��Y�	s��{i��It2�J�Z,��
 :�����A���m�\�8��� J��s�D���LD=5K�#�}���4�I��G�Qd��j��.�D�����HO�52��.K���A�U�\+��z[wy��gEAF����:����F�����z�s�A7���t��O�qE��7��(��Y�9�n_|c��D4*QE�����A���W}&��%7�E��R�Fu�r��#So�B�Y�����$n+�'�#8*����tX��?�(��������pE�6�=�ha�)���A��
�e���5�������'��#����f}?�l��c����B����T����F���]��WD���+�g��M���a`��NoH3��{�E��	3��u�n�>+�"����������:��S��u�,y�6,��6:Z����v����]6D��^C������@8�B���dY�ZI75�h[6��3�j����!a]w:�/[��������1�Z�*�~3�<yS�CJ�����k�\�B��m�}0���i�S�w����a&?<^EmY�e�����t��]r�kl����:e�f��X��P������G�����YR����p`�\��tO��NK4d2���PQ��*Z�X������3s��m*�>��X�1��1����G�^��Ax"IL%���N��*T77�	p����S�w�������E��q�����*�q4-�f�6M��o�fn��M�f��,d��
������%���
q����O�����$����~�� ��`b ���~P+�E�(lv�5H��b�V�vfG�)�g@�f;%&"P�Q@z�s9R��;�C GI3�}%b;q�H����/��7�����6L*�����'������b��L�Q��g���R��P��80D
|"o��PP����p�y���;�yP<������.��De��7gt&�[����l��P�t����-?�F��
�J~j���:6�����������|������Z����������n?�����<=�)�a����-^���������k���u	��u���Z���74��7
����������f��q�eA=@EO�5�Y���A�\r����8�hA�������^��U�G��K�D�XPV��1�c%��@T�3����7
3x����E��M���sB��5��7��pF8Ud�.r����<y�"�;��}���"��Q/M����Qu
�??e!Sd"����'����$Q<7S����[���nz�oL��z���`e
�������G]� D]������UB~0�V�>~�����'���s�_�\�-2-��X:4�~�.;�jAZ�`���UU�$U����n��D�i����='?�]��>/��|�	k������/�zu��J��6m���M���>Y�q����8�����.d���'"B7�$%Z��l�H,ZN6uAz��>�p�3��1�U��C��\�I.S���(������fV�y�L�l6�G=��>FJ���f4�#�	�FuAz\cs��x?�0�	T.K�&���4r0��*�����.Z�_��v-�D`6�S4���������)���5��i}���Pg5��L��7�p�I4�R����8��M{� =r���:hv����L{��5��f��o��Dkz!������)w�u���~^L��Fu��5���	�iN��fh�	�i��0c���WK6���q��/3�L��15T�1uU�5��
s�j<�����uA�I��BtSW�'�`^���Q]��)Y��	��m�B�\J���k����jF*SmhS/l�L�B���-z����(Z��'AO5#�{4�We/�6u!R�:�2�fT��a�{����7�Q]XT��EW�y"�iYy� ��^�	�uE$�=-�����e]��L�:C������g�h�)�����esO�������H���TB���O
U�2�����5�5��(��`X��.���B�FoS�(��^m���G#{aNj0��@1�a6����=�C����[�t�
l�����Bf�8����u�:���Nf-��j������:��I#+	2w������,��L&�`�W2�g�Un���z]�)m������>�i�
"���S g��[n�GI�dgu!~��V���)�em����u��A���<�yez��iP��WY��#,��=��*!=�pc+�F�]z(�Fw�����6�6;>0!=�o����T�j��V�
�[z�`�����+S�vnuw�a�y:qz8��0�����m=E\
�y$�����4;?bE���,��Y�J�D�[�i��~����Xd�����:l_�=d��1����b~b�L���)wM8�'|��C�/����.���s�����f����u@��m��Am�'��$L��R{n��@��_���X��n���A�v�l��
'��k�m�"�e��M�!n1�m�W		�PVKI��'���m71�f���sr�I1�W]�"8,B\Qs�+���&�\��B�4���H3�;���o90c(������	�������v��I�!�:��t8����K���P�������t�v=�9���<a2!�������3�bbf"2s�p��L��PC@e2!T�
ww`"��=���m����R��y�m���������geR�\G�II�� nw���,��Y����h6t!8��+pWw���7�\��Z~�W4+C���M<�=�����)5��/J��&o���[��4�eE"3	������S3P��,;��sos�N?rA�e��;��OpD���/�J��j|l���(��afxq��>)6�;���kc�&l<�������(=��N�������aEvJ��O�{�\���2�p5���2��4A�)F	�QSo:�i��gE����&|�G�s���gB��r��#`�%���^���������X�FC�9��sG�����XA'�����LpV�4aN��~����\gO�����k���>I�Sr��
o�R7��8�RW�J��)��t[W��/m>�������>=�RI� 'Il3��U��u�t���A��Br@�5v�~���Q_H��f�*�)l�l�D;i����`����*�B�y�E����p��q�����x~A���Y��.5��$�������������1�d��=��]*A�R�M��:m��hV��k�R�M'�	��+�{�R�z<���z$��z��UZ��"=>�~���>w��;���:��s*C��Bz@F���uG��j`�������x
g�d0E������������RC{���t7��OM���+�cB'YxV[57�]�d�l��F�s*dy�dj������)�hv]O!�j;s�z�����L�q6�0���`X���p��YwK��>/�U�.����,��
���r�'�x���<�@D����#
��������ig|�>w��gz�����Y�+��%���th �W��2�����lC�2��r7��7��\V+[BZ-�r��CC�������HSy�NvV����fzHJK������I�}K���b��-��C���P�D�F���\7��"[)������j�#�{W����t,��.3��*8"��9�=��f��	�����F��l"m���v�i�6;g�,�#��4����> �k��F����?����?��j;=9�s6����a%{=b\�\�:���������]��/��2H���w`[���O�7���l��C2*J�6�}���~�B�	��S�yX����/����
�m#��Of�Bpl��j�8����2�Y2��!�����������������������`�p�M�E7��������}�D
�������Pk~���^s���Vw����D������=6�:��;�Fkm���f���1��]�Q^LJ�1k�O�9�rbI�D�������rY��}���:����j��X%�n�Z�����I�l���Y���>B�o�oGT�_������JPz<�[0�0Q}L#�7�6e��7��X%����y���6���i����L���aO��l6�OX�8�S��O� 5}���.��oY�9�b���b�H��h�=�i����3<�_��Qiz5���9���X_��Z��Y�9�X�y��X��5��]���$���&�c{�h��y����d��]�+����D��?��c}����<��}
��hVF�S������b�i2�a+w���8���h��5�j����j�_�X���6c����1����Ny����k���I�P���Z��s��-�9l�����	X��m�M4����_�F��^��__�1E�k���t����=_���e��*��]f����������L��U���+]?��z�z��v���^�o���\���}�������;��x}��c�~�t����#��x���}��R�B���T���qD��8���,�pb�>��S�y��]�8�r
��N1\�X�u�����u��z.������;��������=��p=��\��#]���=]�����k��\�k-���u��������Z�h]���c�:r�>��]�����L�b�^�u����n��_S�R��v�v�Y��U�����y'����8�����b�����z���1�p}vc������z���1�x���1�x���1�x���1�t}����������-��������Hv^�u����#��������z�����@�����4D�?�H��pC������'7����
��?�!v�On�]��b������?�!v�On�_��b������?�!��G7����
��rC������'7����
���b��E~������en�_��bpC�z�;���c���-pC�z.������;��%�#�!~}O���_��?��'�#�!~=��
�����Z�+��Z������0�/f����D��u�rv��-�E6�=~1�zzg�o!?��Y����R���Ld�V��Vn{PB4j )5[�B�(��� �H��!}�����K;~�a��J����S�)�x��*5��e�y>��H��7��c�C�l<���[����]�
5D����	������*J������F�Z����/��*�_������l�,��|�O�~F�w��M}�:Kg��p�4������L����,�fq�"�o�d��8�c��[��R�;�&��-�Hw��z���I;H�L�������1%����CP�
z��/{ ����jrC���^�H�|@�����GT&�v���[��}w�y}��������@��aU��G`)Q�,h��]�"��,$�;���W&�_&�Bmt;���L�f� �M��`����U�M�y�bI~7��\������m�D��"�Y,�p�y7N^y!���a���Qn��O$��@��N~��[	:�;YZ����Ci�0
����rj
�vf��Z�D����<��\�R&�.���u����k�lO�����������_l5���z�:��I��5���d���E�������%�<o�M|w�B7P<����q:Jvd�k e�x������j�{O���o������H��D����nh�����a���8�.���9������ED�������1��qB��'�:����n|�b	�cT#����i����]���/�J���l���n�vp�����<�!�����e�}ZJ�S;/o�Rk��� ���.J�s;��.#l��%����)��}e�q`�V,�D�������_h����$��LU0�����\�#�pW�Go�i��W2:����_a�������@�&2I�n������b�=�z8�RF�(�3��$��CW��58���L]$���$���-P�,��9��$��J���#'ZD����#�?���A��-	�n�;�����P���::y��J�3l��{\jQ�����d7���>o�=����/v�����������V`���7���7�FUK<|���/;�;��m���ow.�v�u���$�����B�R(;�����*���@o��������l��d�����|�O���4N�)�[X8��r��������_����|�{��&�'��P����g�u���xNK���SK�gQ�@�?
�s@��$����;(�����}'�����gU���z|�`1�9pPfY�q�k��]�}��w/�>H��fTL�|I3���c�N���>��:a���F������s�S�Qx/@�3+o����u':��/)^�����+����c�V��p����\����B=�An&�40���zQ���&�����H�{C���A4#���o�6QR�����(�V< J������<��M|}���S�gA��i���x��SY!�����H��wwg��3��yFo���Y.SU��,�Xt�]�*^'iL� ��Z\f��pC�*��c��>�����!h�OI�y�������7`��,�M�^p�X�B���|����fmt*Z;w(X�T����������4�d�!���-���n���N�l����-s����p��9��!�66O�'d��}SS<�	r�>/�����r{����#���
	:�/�u5���<���b�f�"A���,'����~X�vl���_��|%�������~k��gj�U�29S[F��S+��+F��������R��[;�}���XB�����(w�����"Ce�t�=���N�#�
Ty�,����[l@�b���!�A=�3�qZ��hi�L�|p���+w��12�����u�KL�
�����?��4� �Q9��/��H��>c�XuVO�l�)��6U�Y_6H���#	�3�|\�dp<3y��ia�t_TjW`��{����������YI������0��M gXu����<3��4H|Dd�}�2���*z��W:� �j�o�H���~�����4KIf��f�v��#|
`N��8�v�fF-�����[��\�@JvB���ZP+m$H[�g�C��`q"�$��A�A���6�|t�o��'Z�� ��W������,71��-j�����{�=���@V�pK�a�h�z6
������CiL|@]m�������Z�I4�x���\�{��U4I�A=F%�YY������]]
���H�c���lO� }EE	f��p/d���[l��������9w����,�|����wn�/E��)
0�xb/_��r�(��zo�]��Z!�YIO���6���X�	tr��P6�d9��*�N��Q�<�6�z����|���l��84{P�M#*��;�y��'�5]I�y���&�1u&Rh��X�'�zvZ�
T&����|�X]��LD��^Zo���D�c!��6D�(E����y/Q�L�Bh�Q�,�B��kK�C����?3����rku`y��HPR&�vw����t�_��T3?��!���@�0�"�8by��Z����kY���?�;��Z�m��B�J�4vV�w7g"��.((��H:)1������V��W9����z�p���*����U�u��(��M���P0�:��������.������3
�	@0�}�h�_���/��v��e�M��T��	�����i�"�p����������i��i��}F%��B���/�o����\�i���8���bQ���T�C�b���(�X�)�
�=��HDFb�l��	a�W"U�yC��#��gE*��)��%�e!z���vU2����:l+*�� ��XP�u��>3Z�h�����1.������*��PE����)pO��(��+*�@������������Zv��o5
;�U�c�V�������(����U���U��V����D{p|�	pOJ�w�@'J�7K@j><��z!Y���G����������&��X���T��!`'���WT��$���^��S�y���q
���`��������p�5���u�13I�X+�qK����J���vJ�}�	�]����_�f_���9aN��@;��%�5�����*!���&�hx}!��&`�����������?���+�k6�T��;4�8&x��@�.�j���#n�g���g��ov�����5�A�����'��.��"�xA�'D�?I(T��s�O=�������7��Ai:��E��hJ���d����V�����"t�t��2�����/$�h��=P����y�@DV����y�c�L���>qe��^s*�������bA	���L/���W�`��H��[
�����[P�m�����-�E����d�ko@����7�h���N����G����b+��B����G��a�]�(?/��A��m���S����ZL���+�l���O���On�����@�#�z�U��z��������}�"��e�$N\�Xt�kO"��w\���;.����������o�uM�:u����%����\MM�E@�uc���W$��"F�[eE"��0G@'}"DvCe�t���P
N� X�16~sI�}%��?;����w�~���<6���l���eW$�]�	Pp1O�!�/��q������K�w������a��dU�,���m��D��fr��6��r~=��[�=^Y��
�D`����xe>���	G�WF�9�pe!"����7{(������}<�V"`�����F+�Y7n��B�p�\,{
V�mx�>�)��1�K�?�|�n9F���(f�������|F+3�<L���1.�����[�7h���k�9�w}e����������w+p��B�n�"���ZQL��c=F/#��;�q� �I�!�B�����L"z0$�����J�!@�|OE@�j
��4/E�Q��(�L������@���5��}Yf�<��"Gx�Pa�����GS�}�H����|�jK�t"!��=����(����gZ
o!R2�}�����!��"m�w���:�9��)�Z�=6�w�"��%�5V����&��@Dn�P
�c
9<2G�H�M���L�'�T�~"���/lif���u+������V���VZ���[i��X~����w'����c���8-��Blx�e���+��dJ�1O��9�D��L7���:t��\��u�aE�u�-�c���o��\��aG���hx/tv[��`��"�7Q*M���?���I����/_H���^�x������d���B~]��_�����5�n�[y!���Y�7R&��t�8m���^���f������X�h_4���������7�f9�}�&,P����������Gs%Z�>�x��MAI7�S���-�*����Cz*�1�J�,�p��l8Q����ZIH%����
!��h�@�M_�����>��;��i� e�x�u�'�HB�Nl��nY��*8�X�z�&�/vre�,�,�4��X;m���f�������c�F�m47[X��sD{;8��eT"��<��X|%"�L���
�=���13n����b�P�,|[��p����/$��;����U�t��kX�Cd	Y���+�Y>�ZNsOkP�<���4q��D�����:�l��=��C\u$��CF6wE����p,.L&"�qR��G�e�V��Fc��>6����`EZ8�w��7����g*���mf�W�Z~[2�m�yv���i�b��5��mb�5��G���2�����������RR��nU�nmr�L7�[��S��mQ7����R,��D
�{�s|J�$��Ii.&���"^i��iWa�H�����nf��[��\����x�uC���^�!��u��p���v������%@��d6gD��^$�88
�fi@T&���x$
���=�v���H��P���
�G�	`�B�
�jz@�}u�yE��;o-����cV+��J��T�N���'��"2��Vv`+Q�� ]��L�P�y1�>3�X`�����d�,T����/���6@����D�;�{Z1�����a���m��."�M��j�w�"j�&rT~�>5��pi!%]<�^�l��Pm��m:�8w�1o����%�Mx'���HQ`��W�l?�D_���,M�2D1�"6^��""�����oF���,H�{e�j����"9��m��]�J�������\v��/DJ��	)�6�K7B")��
�(������U����1�{���uc�j3^���e2>+��Q,SB%�]����f���?JCBQ���3�����f�O�]�9�X%`/��4F��Y���?5��VhHW��g�^�o`���_�_��|<�km�@/F�����0Py3�`��o���8mL&"�Z�Z� �J.Y�g���MthA*��OP���Z������e�s��
�JS�6� �5L��*����7�����$a����X6=�n�v6������_�R��F������)b�Gu��8>!�mk@&d��+�&�k���o*�����[|�T���VK�H�ja�:���Jl��.��C@*z��/��Fh��#)o���$Z2N�npC�9
j&qAZ'R�<[�S^L@Y�~�n�<!�<[�Us!�{+�����U�����L����*��
��
��EaF%���{\�P��5�+J@�jp�:�+o&�zc�u�T����o%"c��#���F�-2~!����A6�|�;{C�y�n����3����Gx��{Wr��8k.�"<+
���b��-�
�,y�K;�[\�5���meA���������o�y`���P.��T�`���3�w���e�M�R���@�2Z�<p�wOHw^��4	Xn�+J@-�as�����P<���6k</T�_���W]~^Dt��������t��$"��{�Y���;���uZQg� l_��|����1�O��d��N�h�H�o����a�����e�3bb���[�/�D+����������� ��L�*D�j"�,�:?�D�g��_����J�The�4:9x��|��C@w3�DA���?/��C8"�u���f�� ��&!��,����PV4���O*�@�����Lz<���6���aEhP'�\�[��������n��q�]�!Ag���,���_����1 c��wn�GT&�,��������^���LDV�[*@[����L&S��-����� )�����~�+h�]�tS�	�V�0����B.N�L�z��a�]W�%�O����A�S2(S���|��3��\>V�}�iSba�C�v����U�*��J�(�E���Ho�(���|8�C?�n|�����H�e�KM����n�9*��M�?�N^�+��$Z:6�I�_�����Hk��������������nA��8�G�R���.j��X�O��f�q{�8����\7l/����w��6�!`0��P|+�������M����4Bs��C�I�G<o�C7o8�Z���A�u�|�aa��
c��]<���J,���Y���-��)Vt�������o���1P~^��� n2�����-x( ��Gy7-��A��6Xj�F,�\-��x	f�oQ������3��=�;�Z�������$�2��c�+9!w����Oy��W��;���;%���d��k�<`�Oz��D{�'�q/T�n�nj| s�^h���Z��^o��HFJ>od!C����1B0���E
SF���m�!�`�����b
g��d��b&.�3L�*d�42a�������0���F9L����I�gE?h��9��J���6����� A��Y���q�XX��`��l	�X��n�lV��x� ����ab���
�v�� bH(�]5b��<%e"�8O*���.?/���ku��'7�G�l��F).c���bX����6b�"-�/��~�����M�*���~V����AN!�R
R��������h"3�������e.3�;1�+��X	dv�c��nf*�qf���j�x���m����2����IX�E�N��U��8�G�,�$���"w���Igb��;��l���1a4��$������
Pb�p���lR&������}!w�o'���!MY��v.�y�������wC��#��TI@��$y
��n3��Jg/�#1���L����1�p���p6o�Hu�6}��L��]�z����#'��X���fp�)he�����>?+Q5hlB������������f-L0��	�D2%�Dr��ihS����0O��|���<v���v�A@&�-&�h��'U����n�8u1�/=l�4�y|�4eOR��X������
:�����HD���}'Y�L�.�t�dI��g�6�T�s��JpJn�K���TLg�������B���H�V��|������U�Q����� hr�O5W�l�����3����/��G��v��)u�7V}A�m����h��_�����A�{i ��Z�E��B�
1���y��>I�����?xU���v;�9x2%��3���h��/H����`�wB��ZH��h�v����-S�8�����y�x����Z������a�k���$�1������1�2�c�{������!;A���r��s 8���'�@����b.>�{6�/� ��$���[�z�H������05��R�v�q�h'N�!)�T�v6U$�9�A�`�\tD>
"5�)�@:��x���\����7�li�j����������&��]�Y�� OO`^���"����/t�p�8Y��j�r,�\����W�aWc��3���������6k6I�-�� ��m
{��@{zrC�hOW& ���2���t!"�s2y��4H�i�E3��n�}
�2��N�4�g�YqS���]�~��dE���S�=��x�+�0ek��3��V�]:!k�H68�nI3qv����VL3L$~u3��^�O4�w�*+�2-��M_��tE0E�-)��EK���S��M<q�� �_,,�B.,-���)8w3�nIW$g����=/-�i���%}���hI�z��+��0������o��1����c�Lva��4�'g�����|m6��)��68���f]����)�$�C�����DeV3���A�66DP��,��Ye����0���#� �I)���1#(C���x�����'+/�$�����9[0"��\����������',^z�E)�A�gB'7��)��%�c���<�"�T��L<��@;�ox��i�!�2dA���K	S553Q���P��H�|�PI�aJv��fd>�b2X
���%�!�����
<|R��o8���L�J+���s��6x���C0!��'�2	�����M%vL�P���]z��7����x��������B(�]�n b��v��2>����(!�7� �87�6��3��(=v�Bx�P�p��o)x2���4��l����x�v��Bl��]�GOZ�VC�"�7�	y �U����Oy���B$�#��i����[%
�����" �3V@I*n�9V'�%�M,2���b�]GCD�`����r�WE����c����sODB���]�V�Z��i�:����6��)�`�nL�K���i E�(	���<����9@�����/������_X������/!�H�I�V����"����f��f?c}���a���Y1�}��P2�(>)j��j�u�a�~;T�bOy!��Y��%���\�\H��<&����V��;4�,_���c����m@�=l�y!������N�!��$�_s��(7�-H��~�&�f����A�D��]T����;�����I�G	i�9h�����������$W<���������at��x�_E�h��P�oh��rcN��PL����VC����������0��"���������|[�D��0�T+���R����M�$��} '��E������8C�c��[�e]�i����^H�F�d`&L�]2qy�Pb�(f$O3,t��<)���A���z-���>�)U{n�Sn��������{~��~�fc�]�e�h������x�mbC���+�<�&��v8���"�B�,�}'��$C��� |^r��'�{�q�mD3��m62�6�)gj�x�'��`�������V&��>�#�s�����$���M
<��[���cVCy^h��V�A�	��d��6c���c�j~���9�v����mQ�����������FQ[���TN����a���h=R`wp����''��>+)	p�'�}]����r�4F'��=kD@�os@j�PM;\Yc3�q�������QGV������L�����s�d��S��d��{�D���LcA��.j��l���#�\v,���<�S����+9`�����#���Z�����^���Y-`�t|�+�I�� ��(,���&	+B��8�s����@t�"2�R�S��J�������U�T�U�����B�.��QO�����*�Y���M���y
����U��wE�����������c�A/�f���M���l�3}r#�LliH��n?�����E8�rQ��v|NV��|`_�.
�cv��C�A8�c���_�M����L�iL*�*���cl\BW�%��|eh,�qHJ��t$�.t��!w�QGiY�����7���u3�D�$�&�	��H~�$!��+��{�������|hVv�(3�jKv��e��z��lAH���Ug���p���A�J6:����`�]57dy�u7.������|R�8��D9����w��O�`��!���z�w���q��b�����w%�����u�X~�;������Z~����g���V~�]���{���,��}.��]EK�S��w���zkW�:DN���v��T�*�~�_�\>;)^�;�������g1�x���~�������q��?������q������%gG����s��������_����~�s���������e��?��]2]���O��]��l_���_�o�����w�y��=����)�7l��odz
�����7��A��G�V��|�z�7��	�2i�����!;��*�p��=�i�)�'�<���_�����'k��g|�����+��n���:o^K�#Oa3��,��;�+`��9�Bki?��H��9����dF�)�N;��Iv��x��O6�H
t������d��!A��N���D�~/d�+BNy�o���}�������H���������vB��ML>r����ljN���7Iq/�XN~F��g�7Ih$�z�!�x�(�<JE�Y�����,����'��d�m�M�����LJZ;��9Z�	�IPW��p���A����hB�q��;H&���/Rk0YMI�����������aA8�g��$�eFI���g��A���c5}+*�w���O'�d1���`��>�W��c��0������
��p#
D��_$Ky�o+R�ui:��a��u1/��&���6�g`KT�]��*����L�,1�An��[��mj�h��>���E��2����$TA���D0ZP�I��:���?����A7<t]J���q����}t���4F�wk��.��"
6���������L�9�{?Z��]%�S+F_jBl�����l�@R���\Yu�������%���Vi�A0�4�5�K��o;�V��i;��|&��Cs�UROj:�u����g����	�4!rN�-�C~�O�8��/��������D.�
�W���(�O�������3X�xu�$/�%|h�z�B��'W2�S�5[��.�6 �6��~I^e����
�m�����#0��@��8�q@&O�6u�F���u������t3�	��7��k*3���NZ��[y&$2�l�����VT�J�)��]�-��(��s[���4/@�APs<�iv����� 2�F�D��]N�|!_@PX�k�
3��c��b\���a�F�J�$9�H�a�O)pJV��p������q�C�6t����H��6���k�xc�t�1�h�I��D4�	��~qp����xku�����wg��}��t-D�9�����0�%����aFr�y�s��s�>/qs��]Ceq<o=�|l������
� �>��8">���MC���	��a?�J	d�����V���IS �3Md���G�So���A"�8��<\���>q�~3�K�q:�O�f$�r?5�f��r.�8������@Y������7��,I|w&vnU�#* ���������wF�T��\�]�k@N�g����������	!�/��� �{�3��-E�����m��]�����x�S�nhx�]��C�\#��l>c��@���K�Xc{����y�����,��Y`d�0]��i^4:��r�*�;r\N��!���+���gr&�Ee��0w�m���&0��*��3���L`��!��u��g6c�h?��#�1+��40d5��Y3��z����2�(�7�i��yF��*8Y���
},�s��gD8gt=�W)�G�Q�1bF�������Cgq����^���ZX�,L�\������B���pS/=9�����.|f����������>����*�PS�Q��i���z�H�����G/�5_e���	r��K�z@T�I��i�D�Oo|m]<��j���0�5���t�`""?���\|�)����������9�T�[���Z���/�8�;m�C(z��%�fn�a �9)r�SMz����G�����F��z�y�v�/%�(����h���)S��	84�6���Z�D�?KT���M�>sr�$^�]L(��S<� k=�Tz�DV���G�[K�P�8�:�.e���i��yl�*Md��&���*���3��.Mh_!h�p�{�a�d�����T6]"��>:�$�&���V�f4����U-n(�I�;-���x��+j�a�-�ER��R�L�N�5�"�����![��wETo�������T�&4����mQ
��	
p�.Mn����3��0�g�����1���m�#ki"����9P�k�E���J��/8
�Q	�E��s�/�������E;�S`��Q{R�����'"��J���ds3t���wZ�o�E�8h' �cc��a���6r���~������}y?��:�Q0M�jzW�9`��uFxC''o�f�'4�98�=Z�v��Gu=�!�����~s�]zt����
U7`��D���������08�+��nq�m��mfv"Cu�S��!s���!��
;k���#�� ���%ZE���M�RS�j�F7:ac���*S&��[��n�-�I��d�%�\LVS&p�)�5�.I(P����d	M��*k'^$��x�K�}����'RT��!�������k�3��`l��l�8���Kwha���	J�:B�6I�V&Wk9�����Z-�l���n����@���y��R��%�75�$�3B4�~����u1���!!����?��W�m�H\�����n�J�& ����{�SZ���ja",�c����:��2l�h!KS���4*�I�����c�����D��'Z�	
`s+[��\U �
z���Z@���x�����C��G���YYa��`3>��$��D<^��D�v����k(H�k*�s��X(tEi����L�����-����f2d]N��&kZ��(^2\�G6�� ������bus�2��F��W��,�$�P4���d�,�O�Ya��E���k�=a`&��8��t5��u������
��>��3��N�ej��Y�b����L���2hM\���k�u�LD>t&�1�$X���\j}]����Ru��0��0���	d�8�����BB2���
l
':���f��D��I�U$����YZ�����O�d�)_i".?�P�/�>8����&|�x����nN�2"�y
{V�pjxi��hCD%`@�-+��m�����A�"($���_Zb_7����2���R�E+�U���Z��[?�>"�P�1+��������Q��Z%}����p=��^�d��6'Lp��'M���NC%������z�A^����� �Y�E�E��4~�����n���]�����vojT���84��MP���7]�2#����H2�#[�$*��E��6�-hb�tA<�1����[�������H0�I��p�?�e<����.h4BK����@x`�7�r��Bo:�����-J�j���![X�:����
���}�2��p�[�QN��AK�������c����p���iv����ee�31==m���v&�v�����Ax���w����K:z&"r!q��7�������b7v�/�A��+���si�BQ99.��"��{�4��S'���o�(��:�NuJ�9|�O��YP�����7���9�c����5EM8���:�!7�Ld�<��������Rl2U����2�W#��:50�"������V<Xs�4@�����\���p����2��{^�s��������f_8�P�*��	I=��9z��*Nb���0Or�8fN��&
�Kn�{=�@���dGaLO�����'$J�!_�h�dh�s�m#�1��p}&�fm�2�1�UW��fUWax� >I����^��/s������O�14�;��6��}b��x���Y�g�\ �Qq&D���2V[����+�p�"�&U}�-'�����u�8�����1��|������
`�*�S=�N�74��:��j�Vqt�����b�3������5�=���v(��:�z�}e�l.�lq_�*��aF�g�����E���K�>�Zi�&$�
������p$o&b�*��WX����;�4����Q�}�{��M>�q�~�p6o�Rg����o������5�"��7ict7�m�WLH^Q�+�
@q�x�E
�Z�W�����?x�	��|�1���\�I;�]PA���M����nqt��]K���4N)�1�^H��
N]�V�n��{R-�����ur�5�����Q�|��(41a���;l�D8%��(�m��7��i��q��X�;���@��x����EFD#>c�D\FLc�\�:�:��8��]��:0�p�0�L\~x���VCJ�
�L�lr�p��0�<oFQ�D����`�jE���d���������r�;4�KYv�eY��Ji�Q'�N7�0��������;t'��u&Af�w�����]��@�R���"m�HP���Xw��R�����Huc���
����%��e������U��`Z��D��Y���W������z��`A -���c��&�_G��U�[��!#�����E��x�@��c1�:*���1�Ad!�_y I��zFl�n��H�����4��LJ�
��S�!#����PX�������h���((����k4��O��$�1H��K
z��>�T��$��M|E%��.�W���bA����$����P�2��� �n(����$y�j��C��wFQ������/G3 {�wY�4��ed��p��C�y|��I����,&._P����O�Y,�����]��d��Be_��A���BE9`M�����=��$+���k�Y��|/$��-�]��f���[���?X�ajQ��Rm��N(���,����2�!#�O`��+0*������E��������*r��������3N������� {w�`qL��zB��5�
�B'�l��HHG"v�Q��=�0�\�q!��������
��d�����9��=��x,�3���E�X|���Lfb�	Dk�'l"k�3��EY"�^���Q�!Vv���[$>_����aB	�Y%%m��\�:h����PL��H��Dj��}���D�M+��
p��nZi�v>��j�Y������!�I��w�EL��,�Hy��KRa$�T�}ta�G&st�{&-�*3��^��3���`,v�0��M;�����.�q���+#����%0�����~�,�1}@i ��=''�������ll��x��)kO�������H��+��j����KC �D���Z,����.D�Ic��S��-(n�����1{��Ye���Vg�����#�L����F�����+(�
����f
vj�����������@CU~+2"�_)@^��sO���������(k3,(�gi?r�p�����=@2��������|�{>^�����'���w�%��0�K�!���L �e�8�h�]�{: ��lq�������E$/�5]n[t��F�6���?�;�Mo�D$k������wa�:�-OFp� �eAQ��)��:xW$��d�s�S�����'v���j���`!���������[$�
25.	 �W�-��B}��@v	;�VJ��f�}+6��8��w(�q������j x�'��eO��2���Y�Hq�n��D�*Nys��������q� ):�d�=7�/E"�|�wu�����h�r��������3��nk��G�*G���A�^�C�s��gO��!�ox�����H��A������3I��sg}B��,�����8��JyF��_�i�������LBi����a��pQ��������$�����4]t�8��aJ#��y�`b ����*�nXu������;�b���������	@^��{!C�p3�7�Ya>�.9T��t�����IDp�?�
������2��I,���G!.����+ �s���D��|����<��M��H\	��O�|Y��7_�~9B��~��A��6�/�@��C~"��b2;�(��(��2���wr����@��y�*��q��q���`����d$���e����Y,{g>/
6�m�.(����:	�q�I2@0���� =t�"Qq������vhA	`SU��G�
s���i=���"6/��9�^�x��gp��.$e�����>��#?T<k	����R�75Xt��'����F]�sR�	%`����`<�"���y��hju�K"*a?tJ�m����9��h^6����3[�z���.v|l��
v�'��Cz����
��a�zc�TL�i����,&��������L���A.���kT����wA���&�a�s�L�y8dX�����Oi<`��f���@D�p+q�w�[=KH�I��~��A��z{���3�ijW���8R��"�P�9+�X6(�������xW_-x/�S����S���=R�)����TU~�Km����b���
��G�y�]�~2d�
��<f���O"24h�������5e�"X��e�Q$"�*�ho��8�Q�"8�)T*�h$��h)��\\��{W$�N�!X4�^f&C~�E
U��E�>T"��~X:�!���\�V-im<%�!��m��(=6�)�0������B�g�����s������$���{E��SD��j���=&�����K�*u��
t���!��a�	���E�������|��0�/��
F��=-'H�����A����?](�#t�`��3� ?������r��DBp+
�����n�2	uy�Z��`%�@���'��&bz��'�4������
GY�<���<���,h(��;�l���
��B�����3!Ql�u�����#��YX�N�����`J
/�j~�I-H3�-�5T�w!�8� ���e#��wq"
��F�6�X�-�@���;r=k�!n���-���>h����&$o�\���py���=/3r���C���#!����W�b�smv&�SW_,�f��Q��=K�lY��	�	�����*��jR&,P��g�JBZ����FE��,���n���J��A��b���f��&$��Ep�`��,s�8�T��22���&��������L��'d���C/�did]�Ps�y[�����=s-�j�.@����wxz�4
.|�z�S�pR�5E
g�����/��?�������G����� W�v]?���vM*��N?�#����A�V[���"
c�A�v�j7�D��2��T
�E�[�~3�f����Z;�\��Gt�jS�	���i���Z������&JW%���� \<���C$*��R�A��a�B�����Z�W�����g�v��"*��c?z�-���m�	I��Ql�3���'�����7q���.����+e���P�Z��e�k���tV��v��]�I;��A���/S�����\"���i�7T���������t#���fZN����%��	A���[Qqf��(�P}����
�3�b���Ee�4��z��R|`_k��8!�B�J��,x���Z/g�_
�M�����`Y7�Fh|7�GfBN��\��o����0T f�`��6�*�����Ll8n��k�%yOm��wg������k�0���f��GO2��6�q�#Ze?�7�-�"xW�����6��;�'B�<��K%^����G�R�I�5%��vrTX�S�b����4��Zd����Nm�������|���oS���>W�I��p����?t_��3:X�
2o{������ko'��O���ty$����";P$ITe
�k[����%��������3{����|�=�D�H�Y.Y2"�sF���5#r����������U������_�����?=X�G�����(�����o�����3��8������C�s��w��-��u�;�c�P��+
�� 3��s�rY�`��N2V�]�����r<G��@��c�0��I�E�pSF"�z��%s�%g���-T3���GA-\�������]N���Co�]�����b����Px��<Qk$b��r��DF����yl��-������EE�P���7+���eAA�x���Q4�����jU�� k��L�,�IygU@����Yf&�/�@L���� ������*9v�Bv)��9e#�I�P
�����WQ�9�q����Df�	�h����/�r0K���vv�^����Tu~�����s�X"��?7~".5;���!�����~���9m�[��n�)���J������T6�12UN�.y�[6�A��f�'q�]r��B�$�L����8�	�1����V,
���������Y�"�D5�����hFg4�����\��kXohKo�ki7�	�l��4����i�tF�=5�{3�=X�[���S��P��.��"�����WS�E��I�/�����N��3�	e�g��eeH�[�=��V��M��@�����D,��������t�53�/SA����#�o���&t��D�����Y��o����`������X~`���:�������(���!���fH;v,�!�����fDE����6��N(�+-)7�eS:��H��/�9�Q4�7��D�tf�S���TC�VuB#7$v�D"Q�hU'4����[��������G��f<-�	I��Z��&�a�PjXy�L4�\vU'�����i���hY)8=����a���Fu|���dX��N=TW�K��-�	
6F��Q������5��I�������*���3�pz@��<�'ZW��J�;�,�:��m���g����828���={��7��������~����	�\g�N�K�`�Ng4��D�j��vU+�/as9��Q�:+��Q�Ou��#�D�j���Bq�
F����f�>|�Y��I5�5�Yt�#_df0��'���$�<m�n���'G)�$��N��jS/����$Il0�)am.`Ib���T�q�ry����2\����;�:��`u����g3�%$/s�����y~f�j�E�"�x2#��&����a/�O�<��9EgV��D�=��a�8��i��v&'�vB����l��d��h�����4�G���i���^=�U��������P(|�=�?��(G�� 4Q����_���aNcM���&oZ�*��H��8�vUF�5gC��.�6����'"�meL���j@���7�q&gw���OYX�T�$��,�������$��_��k-#0��wIH���k�a]/�UB�F���7�hm��R]��1w.Pg���!5��lQ�������jFC;�If]���R��US�.u]f�	_��(� ���tT�kH�p%�^�p	5�d�T.����Q	�2m��������u�Y�4os�����R����.����%+��AI0���]����+���}�F5���px�.dR�z�_�y�L�th$�2��A5�ZWr7'��p�
�n��D����0oI�������4�53���8%u��D-�D���������������.���@J7�V��������8����x2��WY��N���WO6?d���H��vh`���<Q�V��A+CF��H;����#�f��{U�����.4����>��jBX��~�Z��r3Y����xf����4���L���+��g����W���,Jt�0=	����qY�S� NhyvMN���mMkz��=`j�\������WW�I�9�O��S��zv1�t����:7v���j���m��2����Z����p��*��`�|,�.LJ�u]I�yY���+�E�u�%�����#�|�4�����%�\{�(���#���*��9<���8*�[����$�cj��$ �5��8����I�v�w!C�G����B'�<{F�������v�waHf�'WO��� �~���������x �\'���0�6x�.3���#�X�
�cf���x��Y���;�2)�wq&�&]C��0q�,P��L/g��6���@`�%���w!C��TN���2�>D����K(����)�M�q&�������h�W�d�2=E>o��VYd�x�!�n�$Y6X�������P&�Fl��)Bb�p���'1>#������i�3�u{��-��'PY^k�1���u _��$ &2i5�����S{@$C�a��qLYrn=��/�:�v�L8r�,�~����6�"��c�f�d�S��������/�z�@��p:O��Is��\��� ���L�2g��2?�d��`���f�
����yn*�/I��C]LDuj<i�4A�}��w�6TAEd{��O�5�������MS�)�����zvk��Bf���.�k�j�#��j�X����������kg��3
�5��Q�r�L�z��X�^G&�(��E���`sFw M�����n����]�%4�-�s�1x�&4@?���&R�>����N�����`*6 (9%��=�$������%��P��2���K��Y���N��ln	A����l��D�.�V����$���L����&&�����D��& "�+�c����v��h�Y�g+��t�4vDZ*3qI�FET�����!���x���8[�����z�:�#�t'��Y�8���������d�oB�����:x�n�.")��a�G��;2+/�UGek������B?uAG{f������G���,����U=�SA��V8 ?:��������j��CJ��K��_�]}1��(JOmY��\���h$0D����>f��/�����f2d3��i���%)V��p��!V]��e�U&e�������~�j���2����Ugn�0���Twp��e���@�vu�l�8#��g����p���[��
f�����{�Q��z��^D%\t���/�@�-v�?�K��l�mv�6\�	��4
^����yn�e{�]u��i�E6�m{�`k
+���9E�������A�o�W�a��A������7?l�b����g��d��O)1C��R�N,�\����_�}�6�/�
F?r��#|s"GN�G&�;������v�&���k�����z����}�`�.����D�cb.�/h�m�`�g��/��|��L�-_p������>_�Ml��t�>_����.8z�I���6]���3_���W�I���s���/8rUC����!��5��kt���!��?�GPo=��������w������w���R�w�����}.���s��������W�g�"������eB�r��9����UTW��]��.��1�������
r�>[�x���]S����_������	r��f�42�E�^4bKM1�=k|�5�nY%U��0i�RFp�1.�7���l��6h�Q"\�/W���+l����_��F(�m��F^a#G*�6t��"\acG,��\�>z��|�>]�/Wl�N}���_�H1�m���^aCH3��\�>���s������H6���oUM�1i���������������������j��rj���i��ri���h��rh���g��rg���f��?:3��?�2��?�2��?y2��?92��?�1����Q�o��?������G+��{K��O~Kpc��q�n��=����������=�����nKtc����+�3_�_�e�"�-���+����"���n��w�������R�������H3i��\A<x�u�<������6�#lu�\��H�c�����:�p����J&#p0�lS��F	
 �z����R1�
BVa��HfqX��H�&�\���>�u�L���|��[��1+�H�H��&v�y�C����n���^�`���PC���hd,��-�8�
?��_�s������%�cE�����,u���b��x���%y�^��S��4!e��p
:��;����LN����DCF��M��e����_%%]"y�Ud��qC�K@&��M�Uqf� ��pA�R���L�K5�%(������7l�hM>PrZ��+�(_eh��RHT�5��=�B���n�����:Bf�=���i�_�jB���
������U�&� W�,	���g� ��
�9o���e�F
��U_�sm�f�D7��X���w�	%p��
��8]���h�,���B�>�)tA��D�-
�z"C	T_vJ����;3�h��!�P~��o����L���NM�^��J���,��F��O	A�#�<y�6�Z.E���F�k7\d���\�'���;�(��`����~�i�� �!�%��I�MF���$�����X��%��|lfG%�Q�*T� :�s���D�!2	w|�+f�+9��H�7��{C��,o�r�*)�dFZjI���&���S�D�8�3�����/H<)�y7?�i#���ee	�mD#4���4!���qW�$�����W�pl�t#�w=H�3����do`����\O8`���X���X[��@ NEsQ������1[�GN�[[������22��s��������'��N���N������l��Hu+N�
����@�q��n� *���m����8t�
k�
�|�~�XMd��Qp�v��z.�������/�K�aP$��
����/5u��7�����t��,\t�%���P�7�����EDb8���s�=y�!��
���

��Q@��)9�;�F����5�,Qq����Su������:��zNvrEt��'���sJ��2��r4����;�&xW�x�x8q��x���@���~ ���~p�"��Xw�K89���s��C
<��� b�?6^%�M�[F���wi[O��������3���N?�	��()��%����<b&���:Vlu��g��'�q|'p�D�a��iz��L��d����!����7�M'�<��D���,'H��$u�@dT=hC]�l�a���kV�o�z4�oXZ�dl�x�k:��.�>�[�
��$��V4�>����L���c�P��liS���U��#����1%!��}[X������HX:���mx=�}A�g�������wa�����~��ga��]P�w������+/j��k������H����;�hF%���Pl�!��q�^� ��)=iG'*y�����
�����<��b,(�z����wE�"�!��Eb���c����O��g��p���L��\&�Y.��v��-D��N"�9�����b2����B�<�Jnh~PD$�w��G1����B$����E�n.��:��KR���+�d7����h�{7�7!W�������A�II��C<��j����2B'�/��u�vT��l�sP���Xh�a��D1�M1�bc^��!&[��Q7"rGF��t_���(��8������%���j�����Y�aB2p�;8��p��L���O�A���<{h��HQ��-%.�Vq����9��3j���(��e�]~�S��%���"1�o��KU7��g�"�����s���2G2�g7b=6 ��A�����V�d�Z�$j3�/�Ar���
�i�E���\y&%(����df��
3!��=���\l���>����h�Z��B+�6e���(��IDWm� !F��H��g2��{ER�����t]q�p�f��s��o	S�Ad���.��]��}��D,��5
[9�j�/KX
��U1��_������o�� �/����$��FdX�D�v��#.|�1
�b��Vg&������{	)0�����E��F��5A�Cb�>�r���T_���
��w[��;��7!,��):h�<,%S#�"�w#@��m#E���uOA���dA4���������+�p�?}I�V�@��u�H���K]�	���<t�N�u��nZE�d����d�K +�g �D����H�k�����z������qT��o��=�rA`%<9%�B7�H��I�<�Y^���T��M�/)��x#�6����J?�v\]G5�j�\���x���F��;�n�����,7ND%U����Os"�L��� F���n�f�LOM~TT.�~�o�[!n��:� ���A���������������'�D���F��]Cu�222_��z�yxK�=&2�icAd����.z���8D!x�p�5�8� #�*nJ5�v{�)�C���8������A�#�w���e��x0��F5��6.��
nF�f$�3,���%��X-32V��;Atyc�<Y�U��1&O��J�f�T������E���\?�"Y`���_����%����_���Q�7mS3�3
��]G�^f�z�����c������d<�~�h���u�L{���j�����4�}�����7|M�n��	��.�����wFR�d�QA��/�S�-X�������D�\�`�%?m��]X���YE���F4� �C�����Od�l�m�	i�'2���������~g$2_�2�v���.����vQ2<Wm������� ���P�e[��3Z�	H���%�y����0����n�`��:Qj�gT�@G��w:g��e0D���C�?S�`�;����S���s��U�P�W��I���j���]�b�s�����0OjL����ee	��Lv���4>�f��+U���+�������( ����`'���*��'��KU�L:����y2�����>v	��<5�h�n����Cl�h�L�<��|��
���A���6��Jz�����t�E�9��.�o�:a�K2Y�(+K���m��UB,umLF�+��������u������65~J��G��y��Z7����
8���_�$�
������E}#�v%pY��6����OeD�����m���U�����C��$*AO����T����y�]sO+xW�7Mj�Js�&vM�,�<k#:X��$A��B�|���.����Xl�����'_��D�zC�����=�!��(��yf�Tuo����'���^s"��E�w�^1��3��)��O����u��tom��f�&t�b[�t��KB?�H4�����w<��V&u������M��]����L;;u�V �+hAr�^�#90�h�^�����[��~���]�����Ee��>��
�h��~���	���0��zAQ{��'�7�o�mAY�1O��X��Hf�?���3���o�������o�a���Z5:����K����l�i�P�q�Z-��
`q-��2�!���0G@'�f|����t���P
n� �I�o�������'���
�;��0D��pp�x����QvF���9��x����F�$6��#��~&������$��!H=�>DU�tw���JHg�U�E�����p�Sm��
���+�|ef	�|��k��
��4_y.���Ld�j������p`�6��V"�leF%��<��:[�����eO�{^p�9��CZrm�����5z������/�<z7�!�����L���?���db�b�f4�4�D��j��]F_�m�%��w���h�NO����zoF0�7nk3`�2y;��4�d2�7�2��~�p 7�I`�6��#���dC�}����WM�On�R��qBQFo,0�7�!z�?/[md`Y'4��6T�uF�$����m��^��mWua�T�Hh��{�-��Q���{jo"�d��Ycx�������c4���cx�Y���z��j^���?�E�Q��*��X=����(3&k�z�CoF%���f��-�,;�?�������W�|0W�����~p/�vn>?����}�nu.��[c���+�k���?8�x�$��g]���+��-�:|�W����3�����a�j��E�2����������W.LJ����m��=�P*~�����,E���N���
fto�t#E"�':#���d(��������
z��o�2!��&��;3��D�_^]pIVpx��������:#�����������L>n�s���^���7���X*��U��8~��5�����;�?�����$9�_P#�.����n���TGmL������+@��;���������>&XP��o���5*�,��B�+C��10+I����R�:��X�`M������;b]��j��u���^vm���lv��}He�N
�+�V��,	������E��p3X�����N
V�e^+F��b��������j����	�qE��T�����II�
�Y'���"C���M�fW����T��������O@R�'�k~�}#�Yk�h<�(�����++y��rMN���[����{�LA��m,�ut�����������th�^Yq;f����_:D���q�w�]bB�'}���2{��	��f�������6-a�[#��:0�����'��J��SV�G���>dWC#�~���Y%���f��Q���1)�����f��'mZ�.s/#���
����y�.:���|�Z����81����x���
�+�p��O����t���4�W�-q(�C��h��{xD :���������X��9����@v~5����l�`Ky�Y�w�	q�y�N�/�����	���$��V���we8P�u����(9#���Z��<pV&���Fd�T���
�3!M��J'H���6�*����<Cg,�2!���Y��(�F����,��1��B�M7��Zl��N�0����$��@>�ZP�]�����7cE��qQ�;��XI��q��#_�6��	���1D:\F	�
�_����ee���w9l��i���� ����5�����+b^��;�lG���w�$��K�Y\8
�����.��]
��H^�vW����j��M��ZjD
�5��9���B��}��!�>��a,�PW�
�����M���5�!�g��������	94�U�b�/s��g$������H���i��pD"�b��	I87g�n�?�����|���W�p�Db�8H���U��f����p��H�t&�Vo������r��7�D.Y��
�~�d��H,���z\�0A�Y���2`��y#u�e����x#�h�*��JB��B������R��d����kEF&��}�A�RqB2�f����`��B5��K��(��G|�FC-3�����U�t�x��"�Y�[,�����X0^6C���
��2�z�4~��������T������MmP?mfBtx9v�'�'9����/����cn8?PC������5r������D�LHmp�y���.B�[Xu`�jOO���f��j�����41!�}�X;oD[�p+�-p����0�s�F��1c�y�3���2�� p�S�9���O�j�IU=O�@��Y}=��W���A���>A���S�G���{�=���(P��8C!��F��yg����Q���7�H��0p���P�[7�"P�3$o*Kgg��6�E�-�k�L�I��@F���l�������R�Hy��$����4��������?���u�����OA�c8���	A r��o�`i�J����"����0~k�<��	QP����	�yr���������2�;O�=���TkF�����Vf�>}?��553���1��������P
�Hk�����=o�G�[��`��'ov����X���;d����6��${������9d���L��gR"�]�*d5g��|�0����4���o�N��e����c��V�1=o�	<un���V��))0�fuo����I11m:����yl���%n����0�y�Rah��S�a�3��_0��V��~�,��=�1(fL�}]��0@fV�d&c������6�	8�>��	��G#*t&���.C�U�k��#�8"S����7���P��M���X��J|�4�Y�u������r��u�fB�t!$������0�*��\�j���Pp��D\~�	Y[�����@����#��
�8"�g)��b�+Q�_Fh�q���>�c��?0!��rH��t�u6��z� �ZA1������m6hb%���D��Tc9!�����t���!�3�����N���e�}���	��M0�C�]jNo�;�Co��������<|?��s3�\��M�!�����JNk<u�8�9��c�3�D��mJ��J7�����-��2��n���9g{tz�qK���6�!	��An�����t�a����|W����*���n�����'��N#	�f6 � WNat�s���,��(3w�Dr�j�S��+*��1����#���gRm�2[��ndFJ�?�TTm�3@}�$G�����������kfa��+R���^��e�aWI�'����C��y�c����,����q���������V��m�/�j�D��w�6i9v#��9��O�z��h��	�/��:�rV3��-��|e����D6����z����Lg��kM:�!JseU';`j#E�>,Z���q��a�#h/q���%���d��f����{u'����GA�M��c�6��2nq�#f�Y�(���^���M��k�3���w��F�h�����\'����{���g��[�q8�N����DE�H���Nb����#+"���$��PH���
�+��?�F�>y�f�rbpL�����R=�2_e^4��d��n���#P��r�>c�����03PD�#=�yA���((d�qmm��=8�wOv����8��/�6�6� EH�y����"?�r�j�a.rDl��C����t�?0$?i]����3H���X'�CN���X]&�
�����]J��*"h�5�����eF�i��IV�e}%��JJ4~�>��&�a�
��^�&>O
Hj�:�+���#��AM���3���xv�&O��S|� Et�'4"Yb5iO�'�$��u5��o��hA�m|fJ�<�C�\����=w����w��=L0e�i���P�;�ri�!%	��+�+5��u*������ j���u:��W��s���
���sw�AMH�E��dG��
M.3
��K-�����nB!����&��.a����q�@�]a�w��y��(���i
=}<�R�y ��L���tkd�u �F#���{c���'7M�"hY���+9�	��t"�'��
��D`������nH}<Q�����+�{I�` ���!xWT1�lF8���F�V0�B�4+��cH����M"�;N#����fF��Ll]�)��`B���R���S�����]��H�A�5�H����q���������U�;�\A�*��
?����1t�Dd�;|�@3/3���<�F).�-��c�E��U��&J'�-��,����h�i���y�#�X���C}4����@T|�fr�����������`�k���Z��|)T������]c��Er���^����c%��Cw��'�mf����N��u�t7�����	a&��hfn~-3#h������+��2���kw��O�f���@N����X�~�!uo��f����������������P3j6W��(Wh�l{Z"�6�Q���d�h��@��0[�N?!��L��������H[]m�j�@}�I�5�6�����N�<,Z7�3�D������y� H���k��=�wAF@t&��!��2����%��SG_����y��f)X��
�,��`�'�Y�K�)X����O��Wp+�0O�#�����D
��
�����7�D�P�|��Z�Bv�n�'��kgN�h���](S��^����;f�d��C=���>���4�>�N��f�'$��u�a>�����Un�Of�v����a�
�]f�Y3tF�<1������u�a�jF
���:Yf��pV�"9��2�%�|�L���Y�n����(nQ�L��m�t��������eN(j5������K���������<�x����f�@�8<p~��"�F ��|����l'���g�G��=�����Et�8�6�F�sA������\��Kd��)����
g>������D ���ob�D����,��c��j*#��������~64��i*������8TU�SAW�8<p�R�	E@	)
?������
	}���_T��l9D@���B|(@c_�s$�S��4P�QC�w�����tF���N���E�}�:�Q���v"��4p�*��D+q����8
L�T�?���H��(B;��%��(�F���'�����(��I�%,d�l>�������)�������O�i	kVab:4�;�����:��$��a�>��j�N���rR%4M�$t��+�������y�����lO��������;U'HW����	g�a����6�b6�C���=t��������8�@����?e6�`�:���AR���"?�������w����g�eB��O���v�w��x�wt��z��]Pq?)�
}����>!�l�vh|k�y����R�����	�b���oB�.�/�4w�g:o�r��7���gc� ���\D2��V�N4�#w�)s��i��0�n�L��D����9��v���'\N\��S3?��sF�4�}�[h��?��� �Y�7��B�k���c+���������!8l���_������.�C�Q���}:xW_������Pb�S7�SNL�_j�D5��Q��Ld�5nm�����6v���i����1�4�t�k,�b�Sa���Y��,�z|:�����?yo�p?(�
��bw0��f�9���weh��?C}��������+�
����������A[n��cq@d�xW_�k�!�+��Nv�Q��a	�@���=�L-�&k����A��-0���Y���6���D�+�#q�E�4X3���)�P����B�mt�+����)�P�}0;�T���;�;���Gj�=\]�$�aL����Ej���+����@���FT�$F��3�Qr}���n������}�-�Lc�}
�IC;��?��V��lSU%��V���$���}�� �I�
Ug"��N1S_���J�*uFp�'��!�I�'����gr)�m����5�����\^l��2�ui��&5Vf��4o�1k�-����J�*vf���5���F�N�������x�J���L��n��Ad�R"m�*+!�}x�:�4[Y����S������^�mQl]^9v�@��E�ih�kp��:f��^�)�.�E��XX��;U���r���� �N.
 ��O�������d��.��x��V���:e�V��2��d��)�;��]Za�������s�~��.<*�+�2+�`5N�At�Y�:Qf��`b�rf����]?(QX�;x���)(���E��z
���-�Iw��+��]��d�����r����:��S�������`|�*��:����\��1�?�j�s�$c�b���~�J#���R�e���=RV�6�^�������3/L�C�+�z8%�j�r ���wR��qmY�K>3�^����]��Y\$���r�����c�&G�z�^�<��yo��}�)
B����8��W�t��
���������+D�W�|�p�t���x���O�HG����o������=�w}
���B������;���
������/���oW���mg����w$������"����~*�\�*�~�c�\FK�����hW����'��|Oet�U��w��5��Y��j��
�������M��1���L=�����]������?�P.�\p}���_�8��L.����������_����>v���w�y�����~���j�	�{�,����:@"4�^h&C�;
s�*sU����%J��l\E�O{��3A�p"�#_��A~3�%��������w�������~<8��?�r��W�����t\5����3`������Z��(�!�`�_O:h�i%*h��������|�G.��67��,�y�Tw�
�uP~:���q��S%9��.�Yu��m
<<E���h#S5�����7Rp���2��&6��%gz���9CU�$�Q�d$�:�}��dm��@��|���u�J������g�Wc5���y������M�89�W��I�@kG<�cB���W��A�D-����F3���0����tIy��������ZM�_�S�����,h����#����,9�����^���j�VT����H,;�$������o ������f�f�3��3��6F0�}���/z�Q���i\�I?5�������L�[�z�����`�������u�
�c�3�$��h������0D�Z.Z���h~Q���3��c"	U��� ���>�F�uT�Mbc��n>x������X����0�+�
G�<���u�@$
6�E�7�����L�9�{?ZQ�����������16�(�]�0� �L�b�\�[P?��B
?��fi�f4����d���iKm���g&����"'ROj:�A����g��f*�w��9h����!?����	dU�K�<��?&�2����r�z?�D���<�Oi��+�B�!I�n	o��^��P&9R>T2���b��"��@R�N�Z����Eg�gd���`�����:�|�a��g8�Q���_kS8�D:���Cu0'9�!sl4�����aB��xL��������DF	)\
@_iE%�L������H�R[�ch����ybv��+	 5j��,6N�A�	@5�&��rBEH4^��*L���I��q�r]�q�
]��$G���-�)p6]�G�&��&�"o�����]��I��6���k�xc�t�1�h�I�N&��a��w��/.�:7o����>��������f��BD�s�h��\�����f4@�s.�u�%@����
��$��x^�al�������
� �>�};">�����P����@��o���Re�<v�����;�4�9�D���c"���m�R�L�$gWx@&P��
H��g'
��lF��2)�s���z����g��O�!���.�s8j{�V���a�+oU�#* ��������}F�)��\�]��@N��[tE��Gv_��������� �{�3�7���z����sl��K<�7�������
	�f&��9���������D�{����5moE��?� �2qy�.�1��H�h�e��������J����jHf4�%�����gr&�Ee���KE�p3�)�"4f��@�u�%�!�����������@������$�����?k���������(�"�M�9��6�>�+�����iZ���L���8pF��sF���J1p�z���3�������Q��
@{���ma���~���H]�d/
D�����C/�9������H!s����<��f$���u����Z�*�`J)u�i�g����kF� ����
�F^e������~���bl:t��c�C�3��J����/8������X��s��A����#�N�OO���Z���/��������{���=��2�����,��@�93)r�SM^��z��D�l�-=���7\�K	3J`�%<�qE���C�hci��`��%LD���%�b��&J�99C��b�D\L(��S<� ����Tz��q�f�:�UXK���MNT�A����tw�J��	Ms(�����`�'4�/�4s8��[X2�`�z�*�U�@o
P��&�8v���]�L�I������;-I#\<t��rg���H
|U������fU�{Z�9�b��+�z3�dw-�fD]��x����E)T�&4����6H~�����������	�����i1F�b���V��1KX���]�����A�n]��[uM��G]���W2�"��|��l~E;?����o��aQs�ln����NK��c$�	�����r������2`kJ��':^g4
���Mo�
9Ml@jc3�^iaT�9
����t���<����g^q�����w�����EW����������4������[}u���L:O8����e_C����7��������;��h]nC7�KM���a����E�'�L�C��`����b�t�J�^b��d5e���a_C�������/�{!I����� ��x�TO�J�.����&RT��!���xW���A0��Q6w����X�C�e�LP:X���� �Ij�2�m��������V�pQu�J�Gd�H���y4��a����v� ����X�@����-	)�:���?<�W�m�H\���X���h���o�'tJ�5}��i�DX��m�+u��e���B�l"C�U9�p�������M��:�w��M�E�Pg�6���H�*	d�e�e-����w���w#�������>bVVd������tj�^��D�v��t���|M��;B�����@�&"���-nM�8�!�r��e0Ys>�G���j��A�EH�{l���X���L�lA��5zc^���T�L4���� �4���y���8U7��7�J�g.�D:�s����C�����^!��H��A�qx
`���25�9-H��`�D�}
oYY�q�����u"":��l�j,H��v.������$�g�	��D ����T�O�a�OU`S��Y�"��f���1����w��gi��>�R�u�!3}|���������g��C�'�cV��p����.e�yr�1�e�[4����2/bB�^4�MoYYo��;��d��A!���~i�q��L�ZNV�xJ��b�V��Z�����N����P���st+z����Q��Z%}����p=�_��d��6'Lp��'N����NC%������z���	E�����
��/��Q~��AM��q�R��+�#����������c*���h�����o��eF"���FD����Cg�"�ac&�Cc��x|Yt���+��}�������D����}�����������C
�=�f[��0��D]c����R�d�%�P��i�"'��#���%O��������OZ:T����1�
��PH6��fBa���f6<���6��ng����{p~��
.h�;m��>$\��������::�H�r�u>�<n������U�la8���PTNN��9���f���
����f���?�d���S�j�h>����e�UT��)��~�r�X&b����7��A����}&2b�e�S����)6���	|g&��_�����������KZ�`����U���r��z�%Zw&���=/�9NB'��i��
)��T�LNH�A-�8����$�^��$�m��a����`�P���o��S�����y���t�8���(~�`�8�o���s��M��*�;0��_�n�M�y���u��x���@�����4����a�J���U�����C�(���������e���p����i�:d��`���3$���8k�[C�<�ef,����r
b"< �������Y��Y��l�#"0�]�9b@�o ���b�,��I��X����aa-1�j�~�E:�sY����a3�N)g=���-'����CJ���wd>/��Erk;�������_Zsr@���M@�V&"5�,����b�NH�~`��R7/1��d��n2��(���fy�����O���H.�)���>��y�^5�AhI����s����v�L����n��obx_-��_DO�(�O��ZX&�g���Y���N��*:�x�h�����h�dtU]v�f 6�k��Sx���	-����,]d�+��Fp�p�����T��CbB��;���J_�����R�0��>Un	�v���P�������V�WQ�.���	�u9��as����&�c,�����lvlg��<�*�
��\A�H� �F������$��~�Z��p�#�z���PE��E��18�P�
����a�u$z���J$kN7'����}5#/���AQCR}�=z�$���|S�?zY�.C�*��C�y1!O��n�,��h��/L�P��^UthP1���7n�q�����T`�&�?.�.U�N�c���j�S-������wD������m����Efm�yn��Hr���T�_1����{&��n���_!���p!~{������V^h��[����c��������{�yf�%������RH
�!A�o�{�E�����.��h����H�guF���m������""?�����
�L�����Z���
��A�k- �]h-�8R��B�v��M�G��C�*AW�
HL��\����~���7��2Y|nA#��
$��E�|�u����Em?����'�~�����wy3i��e�8Z�s��$tK���Xy��~�:#;q���]�����������2<�Z����K�|�
��5���w��`g\���B��1�N	�~��?>�����2I��8��2��X�ejqp��9
��n(�����?_eGKF����W2��VT�����?
��/��%l������>����������69D�[<�����
:+gYu�6v�Q&�v"a��q!wl�a�_��4�1/��)�����!C� ��FQ1j9�.3���(�'RzdF���N0tQ���Z�/�J����3��o��@���@OD��
%pqd����
d�W���u��8|�H��Dj�����D"��OE&��T|�C�+�Tc�:��������mJ���ps�%K�uf��*&�8E�*��.|������	F�G�OQ/d4�+^(��
�c47���Z�2���"�|�9�02t&�B	�M5(���Yk��@��=''��Y'�����<@�^F�3��:7��T`C��\�*V4)�
�S��]�B����$t�C���	kr0�n��/�-�����~a;�������U�o�u�#(��-��8W��~�h�{�V����+����S��u��|��W���-U����X�R���}r������K��({3l(�{���b�3)T��[Y��m�)#�=Lw��{�^�Kcb�N�}�Sd����aK�!��N&���k��!O�����'��:�I�O����"kW�7]n[t�����s�K4B�~��0QI�3��,��S`>�3$�E�./����5����p�r�9m�������8O��~���`!�����z���[$�
'V^"@&�P7^�
���Y%�&��
@	\�,xn�Fb���b��m���[
ox�;���7��t:��r���>�#�������
h��B���#:@��~x|)y��g\O���
��}�Q�~/����[�9L��G{��������{'�e#x�	�Q����+�<�
{
��6�#`�
']����$�����g�_e1��uN�A���;�$|h�Uf��������>���=�e0O>Ue'M��N&��t�E����F\�>B01t��tU�����5�Cw�h�����"�4����#�~�%c8>=��h��T���?|?��DS�EF�/s����/�t�r�)XB/����4�56��T����.��j:t\�����1Y������k�/'@��S�j�A��6��@��C����l�����2G�������Gy������y?U�)9����}H/���?8�MF�+�[&��T���Qq����`h3���p!��M��'�m ��KC�������8K?����avhC	��/y0�v�9UB�����9��|����o���-<��l��O3:�?m���*�Z�tx��O
�]���0|e����7��P��kI�A�^j����:9R���	TF%��v��Sso���������X���$-YS������`�����`����6�������{
���h��}���nw��HZ��ba�w��.l����<�Kk.�Q�s�7$~�e2|V���~&�<��-���[;��4p�X�l-*�9�J\G���a�g		P#��U���T�����h���4��]��7�,�H����B%<�D���2x����b��������i,l������G����_;��*�g��:���G��T��y��&��>/�d�F�d��P��l?����A�A�NqW��,]$��<�(�M��|����|$f#�0E<.:Z����j��9���h�o-����d�I:�m���������WQC�<��j,^���u��^w�d��f�5l�����$�DX�CW��K�lr�
"L�gP�����]���i����p~�_i-�E�� O�����(����fT���@7?�[��0l8c�����_(.'��l�����!_*h��a9�u����+��gD���](hCb2	��}}���3�n�
����.�2	uy�Z��`%�@�W����i���[=a�1f��;�^h9����e�e�x2{y���
���C7]����H��y������H[b]
�����������:t�>'���WRx1�U�O����4C}��F5A��&�3����y�~'�@i�i�/�W����*�#��Z
q�Hd��ha�4$h]��d���G��MM�<�;�D�����4�OCj;�)�S��|CL����f:u����j�X��/������|&�&���ik���
H�H�@��+	�TK�JfW�;�wTTE'�	�����R�CA�wh|yG2*��m@knc�+��������q�4���G[����Ha;d�Q>�#u�!����X�UM�y[n�*�|��4���Y�������4�����9��S�Q��71��u���o�|��o��A���m�@�_$���������Yg����u�A�b�9��j3��0,�0Vi�lL&b(�����j�/Z����40�����
�Lz���CFt]�����QU5
��z"m���7���c��U@	�`x=���	)�@%�<��G���x?4��t-�+v�H��93�{���6_�*��}�E�������I��Ql}�!qgk���-!�y��+�-=TY�w"����=�0��,]$���NZ/��N�LJ3j�qi(hG��
Bu�p�N�*��mZ������n��5�LK�����U!(�8�VT�}�����Fn����'r����2x4��z��\|`_{��qGR������y�Wh��}�P�xh� ���0o���`xd#��4��&����
C�A�X�!:e�
,M��|&�����vy�$��v��yw���=��������=f���u�~�{��I�@��Y����F�J�O�k#��?�lq"���H�=�T�%Gm_��C�S$Y�`���?������2;��M��C��[�����[�V}�����|�����!�jom��N��p�`h���� �/��,���=��D�R�������ty$����";P$ITe
�k[����#i�km��l������v�Wm1a��d��q�+a��'l���E6����������?���������J=����Y'���7�M��2r^��>�t�t���g��8�']9]����
����z���A�Mh��7
��N��+�7��8ne^=^���,Y�F"X�_����["��m#`�#&w�H9� ���2�h3����v2{��
K]^I�7
����C{�^����DVDD�������F+5���9Y!�&g��{2Xm��G��,M����d6�`H�z�{�����Y�d���3�%s�Xv"y����[�&�7�*y&_X�O+����	�+;3*����� �dE��x����;�H�-��"��R�ZSE^w.��An���z6��=T���"���E��I5�G���T������l�O�xXk%��1i%���Zw"Y�v���H�s�+s����a=;�������UM��bg��8s)+2�Mo���+�?h"��q����k3�$%XRnMf�!�hJ74;�"(Bd���x���^���" %XS������9��$��jMK���f����K�����,���RM)�hJ74;>�\�^�)���������Y5�E%SS���I��BF��H���t)�>��tG��G��G���5���K}�hC�����~��z���LV��Rd5�����Z���0�#85}���LSz�J�%�D�6j���3&K������LZ������I}���7�
ASe�g��w��}7�%Kp��1K2���-���[��K��l�����5�tSnd'�~��!�hO7�ZTn}������Ps���hR7���%�~&��I�<g����<��}Yvt�������2�)����fSv��`F�`W���j�w�������D
�S_3�s�m�xK�y�zjTy�{���:UjTMhU7]�=r&P����7���"Oj���@����Y��pnV7$��G0������We�������`V����4����+�hXw�fg�x��z���:��]fU�J��i�������w0�Yrs���*r�4�%��.�5�A�	���y���w�jiP3Yrm:P/�����4-�[������nOMEiO�
k�����Qo;��l�E�>N����[g���D�82���$���H�tF�������O�3�����������z]4����7 ���A���m�=	���
<6�1�L��lx��t8���!Zdu:N{������{�T�����#��gQ���:�,Yv�7 :��U���hNS����*T;�uc_���k����>I���}���j��P"����$��91z���E���������������D~V��V��|=@��Xy���B2�"�8���y���;���r���oD��j���9�$�jMZ����	����������5�x���m/��/I�#��i�O�r�C"Y#Ar���%+��
6�SG�.���G�*����u����>uP�D�����>�%�X�h)#hn������.F`�j�;C�����\{q�bdG�p'4�k@�t�{F+����-������9�uq��8M��}2�z����g2�t��9=��e��}���������]$����D�Q��2!Iky47r��G�M�q;Z�?'�������f�������8���G����^;�L���sNy��4Q/��_���w|V&�=��		2{�e��u�
!����&%jO7��y�!P�e��C�H�!�����_�W�.=����zK�`GR�����M-.	�Jh�c�l�C�_v$�q��$/��h�������-j���:����	-U�O0�&����j��/}ke�����r%�D�~s��k��)f�Y�8�K��S�?���H,+x��iE��Dn����x�YfJ�+/6os�:S�7��	�5��	��%��O�����I-X��m�����`ca�������i����-`������-`3x��'�S��$!�����h��It#Y2�C���$I���,u/9y5����|�LJ�=e�P�(<�b����
�����"�M?��hu����XlK8�����*������0��<1����8)��JH�>����2;������E�R�09���QM.�Q�DL��z��w:1��@�����5>��(Y
x�'?v`��l�+;#��
��F$3�v%�4��kk��h�W��t���0I�t�h��W@���
'|���F����5�,�GJt��^���_/����yn_0V���
�&�����F��Mg��Lu���K����V�<O���
�H8"�V��>o$�S�_2���WE��[�w�\��g2*��`��������J�T}�[�������_hN��r�����s0�C'�d�6�H<(���a*���w�
(��:51c&%���d�?��+/��l:������+��l��@hC��v�C����J7h;1���6��w����g��dM�����I��Q��.��(�4���7�6�9��'M���/<{Z$�Eg2j��"3�HC�yF�r����	� �Ps{���6����
��������&�\����}
�?{��cnm�l@����ui�����coh������o	����9���B��c���GC�P�Ue�t����b�'v�����p�s�|��{XTey�o"I�Z�v���&����ysO����j��"*� bw2=�B<'��D�m����Qf��i���3l���I;>�$���=�9.2��B��k����X��	�Te{e����mH*j$�v�+�2�W���f+��U����)��`@GrTG���^(���n
��H��y��@�9	��nsh��H$�YK�N���UQw4H�4�������H�QM�������#l���"pn#��nATe�~Ig.����#��C���}��eo�!,�-{���|�~t.L�`;���1j�-�P@K���'�D�~�����?�D�~�LY}��rxe$>����9�=�i���bU ����:�����u}��D2���"����Q%�A�
I�F|w������H�Z�n�E3*B4����*�:��H����8�[DS���Q=����#����/�n�'1��h���	��S2����o&�6ct�Pw�����sd��'\D��������j���; v@�_���)�s�m�	�/S�-��������wm@���$8pj��K7��n���
=�O�}��?mg(��K�M�h[d���;w�O]���M�(DC�75��<z�/$����r��1S�EbBR�Wmwq�I=\66��jn�t�&������m�����1I�9}�Rj�FU���e0��������1:$d��M>�!k�=���,o�(����*�p>P�2~��e���h���jx����j�D/�U����k\����WY�����o&d'��q������"�Y$pl#����e�\n�{'>���!K��k��rFQ�������4��d��	�|��T��BY��ZU����d���UM�@p��lf���j^4�[$�@og��j������$�V�-i�3�XJ�Al�6����2K:a�Zs�������,��-���+����7_���8�?y�SyCU�C3�N�eY���4���x�����+�������;�+�W2q5��UZ�4�]���}�/t�I1���]�5#��[{I��Ud$����0��N�-BI����u+�~�.K�N�&;�cF- �K?Q�>����>r����5�/�.�V������e��X���aU!C��xY����
����8AL�3�>&�'+(��kv��r�,��K��=��j��w�R�={��%&d�3����;Y_H��GF!Q�g�+R"2-��erO�m�K$@;��2���$Pkj/.�3cKv�Yu��p��"Bm_q0�mo�����`}���M���>�������s ���w�&?n�	Wi��G�^`X�IV�v�`���iY�Ou�OK}�r�l:���>�pMKm��a��E�r������7X��R�y(��jK�*;����
�+����+�������Ll�}��07z��}���7YWS�����LbB���p_���pd��5��N�i��_m�?~@���0�t�� G"�s�[����,Z
endstream
endobj
5 0 obj
   802703
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�������������������"	�������������������1�,�
endstream
endobj
80 0 obj
   57
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �������t���
AH��3������A�5�p�VD("����s2�$/
endstream
endobj
82 0 obj
   61
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 AO�PYU� ��4�HB�n:JA�Y� �Z1��dN��o�{q���E-�
endstream
endobj
84 0 obj
   61
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 A7UP1�`�t$t��������;k1'{"������Q
�^;�-
endstream
endobj
86 0 obj
   59
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��;!�0�T%�@�0O�\)�Jf����N���9�Z��9������-g
endstream
endobj
88 0 obj
   63
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0����C��ADDL����M&DP���r�=����Q��of�3
endstream
endobj
90 0 obj
   53
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ��,��8�C88�%�� ��|uy��U`����N&�)G�*�3'�1�9|'-
endstream
endobj
92 0 obj
   60
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��� @���	��	��#�����R^xfp/d������1����Dj�f-�z.�
endstream
endobj
94 0 obj
   59
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0��4C�`2��
�D��<������]EX|��q���4'
endstream
endobj
96 0 obj
   49
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�����������'�<�����/ &H�����%����������7n����T.-
endstream
endobj
98 0 obj
   59
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������}��\�>�?v�K�}������

�W��������~������7�<���.
endstream
endobj
100 0 obj
   60
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���=gq����H)�zd��=2��j|oT���If�p������3�
endstream
endobj
102 0 obj
   54
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�! @��S�@-�b������!P�|��9�B�����fN�"`T!gRj
Jy0N-c
endstream
endobj
104 0 obj
   63
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ��M'�(F@ IATU�d����9��[�����*)�;�"�Z�1�.�
endstream
endobj
106 0 obj
   61
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0����8�8���.�$d��T1#�
�Cd��u��K���2�
endstream
endobj
108 0 obj
   51
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��A�9��q,-���P����#�^z���LNU��w�2�c`��1�-�
endstream
endobj
110 0 obj
   58
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�;t���=��\�����t�_��c���9��Z����;w��x�����o��$���.
endstream
endobj
112 0 obj
   60
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������?�����������}���k����s���7�<q���_�� }�2�
endstream
endobj
114 0 obj
   54
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���&��.Np2a���-��If��w�/����_c��$�9yX</
endstream
endobj
116 0 obj
   56
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���C ��3� He��=����`-��w3(E��s���w�$�Z�1.:/+
endstream
endobj
118 0 obj
   61
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
0����!;
� ���9(%M�����{Q%s� k�����Up�7{?�3
endstream
endobj
120 0 obj
   53
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������?��������W����@�o�.\���H������������
D&$Q�.�
endstream
endobj
122 0 obj
   58
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ������X �X1��+��}.o���Z��;�aV���C��Y��?��-�
endstream
endobj
124 0 obj
   60
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ��7J� ����"�j�<Ud���������f�I��o��_h�1�
endstream
endobj
126 0 obj
   58
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �
 8�#�p,�`%�S�X�v�Ak�����9���9yp�ZQ%gR��*�,
endstream
endobj
128 0 obj
   61
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����&� ����@�Q$�KnpgN�R��J�V�!gDH	z������/+
endstream
endobj
130 0 obj
   61
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����pji��h�<nx�KfovT���aN"X��C��@��Z3�
endstream
endobj
132 0 obj
   54
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�����������[���/_��a`������	��� !������ -j,
endstream
endobj
134 0 obj
   52
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �����q�XPc���br���9����;�c�_i
P%��o��	�/_
endstream
endobj
136 0 obj
   57
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0�������`2���]xpT�I�;8���9a-������j���3'
endstream
endobj
138 0 obj
   55
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��	 �M3GfHe�P�`!!�EJ^��X�{9����1� �����?"�R+�`��N�.�
endstream
endobj
140 0 obj
   61
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��7�@3@E�@�J�A!A����{���f���C��I	"��9��1h�"Z/�
endstream
endobj
142 0 obj
   62
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���aG0���CaAA|��{2���"�5��aoP���1{����_ll2�
endstream
endobj
144 0 obj
   57
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�����������7��=������PH?xOK�_W�����MM����?mi�/�
endstream
endobj
146 0 obj
   56
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ���
�0���TV"
E�p����sZco��w"(Uj�1��{��1��/.�
endstream
endobj
148 0 obj
   60
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0����N:�8888�4�p�����t��j���z/Dpk}�c���r3O
endstream
endobj
150 0 obj
   55
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U�Qk�0����e�2�DM��C[(c��m�!��
�H���wc�c����s	��( X��NB _-��D�~�5�J6�E������5>G�7C����vtT���-J���'|�X\���&MG�X�_Z�c�8�=c�����k,��e����L<��G��)��(:�+iu����M�[�3?T���|�D.���v���P���5C��"�[�H't"je�����~���������U�>��������*����'2*+��'�-��^~�����}=���o�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 509
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-�]h�������#q��"�����M�me����-d��6��lv�12�`5�������[�������������uz/������ �d2%"A�)����A
��#�W|��>����7���N�������qc
f����p� n���c1o!n_���XP������/p�G�3Kfb�j<���U�����|+~c�D�^�5�xl?��b�S����	O�����q9Fr���}�����^r����9��	�v`�$����O��-�J���[�����)]�1������;>���ao*�a�|��1L��{������_�1�^K���^��Um�������=yS�5�^��rza�������zq��K��Z`�4{���Q{��r���=V���t{-�W���L�S�����^���6zo�i��*�u�^��
[����h]f/�-�W���G��>���a/���v�����}�^C������k����_`���h/�y�������1��B��4�'F.�����
endstream
endobj
startxref
843319
%%EOF
mac-mini-result-5.csvtext/csv; charset=us-asciiDownload
mac-mini-result-5.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����.����S�`��]�}$$$@�6
T�����\qhp�/#"�i��t�5����?�t:m������������}����*����v?_?��O������������������?�������yb����n_��k~_�h�����{�������Fb������4�3'Eb}r"�H���4�;'�����@)q��)q�9h$�)���5��H�r
E����)�>R@$��r��n��tLI{��}�����{��h���^a���"��)	 ��v�4�����4��H�g��@#q�j�����9C�>9h$�\9D#q�m�s��3'��g��@�����9�}�m�s���������|�>�2lt����h�9��s�q-��H���&�sG�S?���Sk�5G4'���T�I|�,>}j�%;����R���@��c�@)�O�}I
-{J��f�@#u���W��Y�Fj(��[#54mV���6k��:��P����l�~�����\WC�f
��\WON|�������q����s��#�s��+p������S�qQ�gI��}��i��g)���}��i��g	��}��i��g����}��i��g���}��i��g����}��i��g���}��<>�����y�d%���$)yp�'9�c�>II��IF�`��������q9R����)i �Qy��q���66�G�P�>$����:�����9/i��x��T%�#-����L���#m�>GZ���s>{�g���!�_����������U�=8��~��q�<vx~������u���.�M���w��	�w>�x�����W=n�	Zm���H�����>_���q���>��������k��"�-\>����5� �� �H�������KB�>^�B��������I��$d��J=x��������5��#�_�����.��~������gh�?�k���R6	BR�_Ok����q������l����Xb+)�C
�L|�h7Y-;��.�Q�u>e�uIA����Z]�}�r#�.����#�������we>�j����?��c�:�%����(�u�����	\z��>0x��Q3�Qj���:,c���.z�` E�co���`+]<�<��(�b�B=P��t���T��e�a���'�&1L8P��\6���
�����MQX����d�l�p1��*�����+!�D��0/DI�T�B9| ���?�����:��>�z
O����e
�7��/O��1$��T�M}_����������w>�	�:�Gm	Q��n
�)	��[^����Y��w|���V�����G����p�Pn��W�x�A��T���$T
�&����n��h��j�w%����>j��S%����v����^�.x�O�c70����w|���}A�Y;�|x`*��A=&����(+���qT���E�22E��T�`&�d����QnU��2���ssL����9z�
����D�Q!"�W�7+a��1y��6et�����i����DJ�;l���Uv����O�J�����G�O�7>j���������]�����J��tX=�����t���!�h����99��\J������f��|��%��+�0����y��>L����(���@@/����r��5h]��	��z8���>�'z��%-SO���ZIX��AY����G�A�����r��L�*�����a��<T0���^������GE5���I�L\>p�|lC�])�
OG���d0�5��t����
ea4��v�3�2Z�P�7�*EHe���>=��M}b�'��%����L�@'7�1��G�]�����9��/m�h�'��w����mB�b�5
}2
mk�PX�#l�Qw�6}q�0m��@cXh#��3.Q����+��	��>���h�bv��a&C��������������MM�������J��o%C|����9����ft�.	��E���3!�nt��e�k��I��]V�\��kmhN�\���=���fLL	����@��n��9���u����G�]���L=^x�����A���5P�a!���q����=��g���1�v��0Jz��&aL��u���o��Ts�@P�C=f�
�6�`�g�(���q=1���nY��a�8��.>��i���:4O�:�mWf�M��q������n7��6�!���HU5�5$���Q>�L��M)<�h��k�{��%�����`s`-yq��.�,�n��2��[V�Ci���;3�cw��n~�r��QSB���a�:�F��K����V'WL:���'�9�6c���	��	�Z�1/g5�0���wJz}����	����?�����w���D��=��&@�{����E��
}M���K�t��X#������z�����@65�	g�D��#���"c2����=>W�����&Ew[����uc*:

�p�����FYv����M�����5K�0�����������w������8`q{�/���.t�w�����7�9�;c5�]t�XE	�fg(����Ph���������PQ�6>�3��e��Q���~3��b�h=wC��BglF�e@=�@��d-�~t�w7{����u@����#�@djK�������?H>N�'����o��D��MC.������&�@���0V�{��Ho���`G�N�L{3��;C9[{��3�L/x�������p\4����.������B��M�2�Q����4q��������������m5��y:���;W�����x)�edU��h�4��!������#�CwV}��!�T�3�����$�?F��5��1�a�m���p�����A~,��&T��6�����e�&�1�����Lb������`��3���F��cm���p��&|4��� �U�����6���JrAd��
�#(���e����:��`���]���H�V�>�}���Y������c��m���������e�������������"�u�@����(�ue/����jo����]�����O.X�N�x�FU'XO�j���Ke�0}�/Hz�.�$
yZ�R��)�%^������D:a�} ���13�o��]�Y�-������iT�Q,l�� ����S�j}�gLS�l�3'�l����G��d��:��
�fj7s`��E1��>X����{���X3	��B���~���Me��]T�YO�=�#x����2�����S?�+��6Fw��XP�)Gs!������i�$q��V��k�a����6F��v���s��H�����{a��c�\�'Wf`jL���1I�`�-o�-t`�'����+c�|�|W�+Sm���4xHm��Eg�lt����T�+c�p�	P���T�#�3��&�=�b��F���
���T�H�}p1��JY�us-���vZte�����*/_�$�]��S�?��7$� v
P�k����CRE�jK�^�3��w%������]EcX�,�;�3[��v|B��>�����\��YdG��mD{y����"c�����W�+c���49B�.��?�s��`�D�����z��IM:w�������&���-+5jwK��?D��bnk��g|��V�m"6+���)��U���` ^��J��v�c���M�D�O�05���F���\c����e��,L�0}�J�<��<��i�c��"Jz��V��k�M�����ZS������b��5���;bJPF����OqD�x�?��F\@��H�����M��+�	��+������w�$3#[Z1��%��1L�20��R3�)A��?���\p�����tY��<#B+o�
�[��gh�������l=�G;_����w�����]��M.��clW����v�S�#^l���{������ED
B?��ax�2F�=}���$@����E���`��{%5
f?8oG��GV�Y��S���!�v�B5(�t��!�� 	e�y���������.���A'�����z�O�bk���dc�^�����5-�|�CZM51%I��W�H�"1�Z����Q��E-�
�,���Xv��L��������������^� c�/Q���eO��y�u��X�e?8b5��a��%/�:b�~�J;������tSgG�J�<�2=�	��F��N�x�j���0Z�#c�Y��dg�#��hgJ����������_�G�����cV����g������eI�Nz_�	|g�3���|2a�+'I�?a��|����B�[V����ez�/�y9�-�K���
�F��v_�������z�[��A�[j�GN���J�������m��(��*�|��5;
�YO�^	�>��n�E��'~����|6e5���1�y����e,�IVzV�2���1�BA���Ta���A����D���t%�?a/��dL���B���	�)D'2���qI%��s���~���W��,\S3�\SO������\S|&-��<5����������s�GS���1����s��rD{������1��1��A����1L3��2p�kf`y���>o<�1o�YS,d�(e�r���1��e��'�'l�'f}`;��������E�������Jr������U��	�^
����
"U�A��G4U�Q=*�D�4�b�:��$3���S�@U���9N�8e�O{zK��S31 �S�u�U��������}(�A53,e}��)�$Tc����&�iR�@�(������{_�lD-gT�:�I8�R����2�z��
���Cz�f���[D7p
�1��?��H���R�)�\;�hf�����28�zM�s�YQ��Jh�+O��Hj7cJ�`��[�0����b��0X��c�[�p�afg
����[{�a;�t�Z�x�J���c`_�����7��[A�����%�81%(#\������#Cn&
�z
�/�f�����ULh�[�V������K��a��0w����2��+��
Xj��0H'����]�b�g�%�����13s���^!�q�\�C=�.I�Th==W:��G�Xs��L���������1�uk�.���s���nW���������v!�yP��o� ��"�3����/������U�-A��G\�����_����>�#��g����7�p8/���9��r
K���X��X��)�=gf>�CS�o������."v�3<H��&��r�O�q���������������A�����CO;��4svm�t#�=����v!2<%�����#�lFw���D��v>n6����<����U�O��<Q���c�����;������d��������0O�����[�����r��2A�n��h�{S48|pw����D���W��0��s��_AI/	��/�<���`=d������m�(bkz-�c�L	���]���W����y�&,�4�.2q�u��3%v������6O[4�Ie��x�`t�.��U��s�V��%K���F��B���?����������Wb@��%f�u��L	��p��]1��NS<;OSq�of�W����c���d[�����n�];sJ*���l�/�r|���5����y���0�����6<6H��~��Y����[cX��A����W���=����>���	c�}���������1PO�c�!w`���3����J��g����3�xK3�b���y
��:�0�Wd�i�zY)V�X=���>F����VU��6B(�aP{v������;�h�^�����2�g�_��n�'�a�#�(k��%��f�]�� �~������D�{����y��>�!��-gS����g�����o�a�2N��Rd�;-y��:�!�o�d8;q<v��!a�f��V���|�s��P	���Q:N]W�p��z""���wa��	���W� 3���Y��#$��L�8
�W���?nf��S�����3e�Lv�h���D���� Vf`�A��E1c��NR���_\1uh�`�:3� ��[�-[�����H�
D�w�9�F�Y�1<6]AJ�!����'������o<W5�Yd[P]�����X�f�0�B ��M�E��Ogi�N�O&I��2�b��o��p��8���B�����6�]��>8V�����3H��s`�oT��?]'R&����{����5������a#JW��$C>��z>b�o#t�f�;Mq�J�g��������;���V�p�'�_S�&��0V��u��@��c�����.U�1���O%����j�+5D��XR�����z��1�>�<b�9d��"�e��x�PI�F�B|�w��&���;���:5=�����m�|`;Lk�0��i�}4��0��������x
��D����s�"6�$m&J`6/>ov�qInf���	��Va���h����$�����+������no�Ad�1�@�����1�h������MD��
a7/`ai.��F�L���8]s`M�����#:�z�=|��	d���	F?�p!���?Q&o�0
q{�����|�N$c|&��~KF�2�MR��'�4���8�5�5���*XU����0��p���q�����l�@&3D2<A�`�f��g��*���l.w��<y"�8\�dl�dfp������DY��(A�^����k��,	����*���5	���B�`�0?���E�f�J����w�Q��&U3c;N���s���x�dAwf�l6D!�����������k,3c�l�Cr��o���u����,�5N�l6�MB���>t��~y�h&�{p4*Q#�H�*�q�R��2���Zd���:������;�q�!�%\<�}���mtid��|bJj�S�Bg9�O�mm��{��N��|id��}e$��N3��<^���f��W&U��9O�A��OL9|�LT0���8.D����,]=1lIX�Bb�����3p�z:5o5��o<N S��S�O��b�����K��^-a�/�a�s�y�`~�q-A;��tp�7����8�Pjp�;��;�W�L{>|��8�n����D�^�?R���w��E��3��V��8��o�d~t��S?O�D�n��_a�!=���>L�>~,��o�cY�6>~�8������K����c�`�dM[��*�q�m�
�	����I��[��~���F�Q�����1�;������1��Mr��������r����UFqyfX��7�������^&}o���JD�����'\���)QF�7�?xC2�UO�&6fo��he�
��g��nb��
���bj�Y�������P�F��V����w�����`���mX�N�a���d���QBW�+���������pn���:f����Q�-jN��}���m�P2vC|�S��n���x@o��c?�
i����(Ok��ef����v7������P�Oh���uKzq�3�!�+����*F����x����CC�O��#C<3S=�Tf#��'�30�N���q�K������B6a�l��)���{o,C�3aw���Q���No�#aF�43Y�����������PSt}��H�+��t�F�����w�����!<���o0e�c�c8�d����6F|�����pW��XO0��Q�p����(���fwi��o2���LdO:�u*i�]u��N�� $Ml�6���]�{%L)�����<���B�a�����`O���L��^���O���QW��������k��.�g��)�NB�w�>T{�{;3����Nm��Rf(�,"<?�N�\a���U&�Fi����0��F#]�����<fm��=�����
3�+�6��]_�9��������/^�[�s�����_.�tx�=3P��X�S��W*_1ss�P����f����$L���m1��Fe5�h�I�_���3�4=��;=���`�)���62N��|�?cP,~$�����x;��6�&���~
l"`��.�����K����~g���|q}�O�k[9�����	�"��1����s#2�	�(?�T��f$l�#��=��c��_�.v������0�I�V���8ZdlF:�E���w�<�doq!��S��ORw�v�!�!S"��,.�cq�<�5
��y������(���5��������L�?������&*a9�4�Wr\e&<t&a�����~���� ��.��O��,f���W�G���B�4���Sy�0�a72��~��l�'�����c�D��d�&F���I}�Q
{43��xJ����6
�qr�����Q���
pb��+~�G���w��'����!�_��P��GO?������lbbh�KmoY����]�d�sGi���/#
�^4NaP�^�	6 ��i2ma+S��%�����\���+&����A��d9u�,��/u��gf`W�t}fxsya(��W����o"�S][V~�����uh�k���u>%�v�D�V�7Y��}�C�)�^��>{a��[��r=VT
uR}3c��c���{��P}�v	�T����zr���Y�����������0|��L��d�g��������jI�����0�'eym�)���� �p������oacm(T����I�-��R}������wd���=�>��>���A���4�]�u��Fh������'��T�I�q�a�}a-�~�������@l���n�0��.D���� �(��"�c�qs#��{���ygB3�@�f�{L���>��#��:�c{J��8�/���<������z�K�{�pI^���>��6�}�������g�1����������5��OWz�yF�����j��kJ�7�6.�8�Q�����}����'j�s�������Z��,���!KcZ�@M�Y���#��s
et��G������U�I�&B���l>q_a8`>�������;j8�@�hg���ni!�S�[a�U�w!���=���g�9M�/�?}�����.��O�)v�H����K�U[%.�Fkj����c���>��3`�]6P=c�"4a(��t����1z��T!�i���N�d��,AI�����O��;��O����n�?U[7��a&D���M��>�D����.�����ea8-��}9\?�9��Oi:�t2g"4���I�?6�p
p��}�
��oX����[�Y����4?D	y���$m���������8o?i�=q�b"
F]>}p��������� {U�T���ap����|W�Dl���w5?�3�MB�����7��5e=�P�1�}8��#�^��.��������a�u�D���/��?��>�)���:�>�6X+q��m�d�l~�Z�0:)mt����r��2�K����[�����R�@y��O=<0Z�~2���lWq��:�g�B�#W$�=�����R�I����g1A��a����[7d�vO�c^�{��3F��	"�{��8�)p���c�lO����&����'tSXn�RK~��f���c&t�iv�
"�
����E�	
#�/��@o.��2��'2v�H�]	
n��S_������F����8���(�w%FI�(� &l��:o\"RD
�"���,/�|��k,��(�`zbN1&��Tx�:��d����LhT��p�1��<*��Z�M<�j'�������z�R��0_>OK��}�?AM���7����fr�+��g���hpb���=[����Zw��j}8�h`���n#�N�>��-����s3�w�1WKXWhKoB_���o�1W��l�y�������r���c1�ZX5=��I\����(m����
�26a|I���,�,34<�3��IR�1����p����\�2vt����b��/m��f9�R��>t�,f���!g��/��*qA;pE���e�A;y,y� ���_��'B;��:J��RW��a��C������64�]�f	�E�m�3��H�p���k��]�q������b�d){WBnvG�2�&n��������MX�u�F�C��������Ku����)���#L��o{����K�M�>�%B�u���>N��y��\�o��n�3,�������r��o��P
��mS��G�#<�����'^1/8x��{B&�]�����6�
�^���/�`7�w�U���<����_����p�.�vo9O��������-�?V���@��\�S[���p�9c�1c{���w�w9H�������t���JV���]�v���4ay�
��qs?A�c
�c�|�_���JB�\�v��%�K^q��D�O�N{�����o(R�Fj���T��j��G*�HE�&Oi���i����L{�r�?)�{���?)�{�r�?)�{���?#�{����������� O��.�$�����<��E0+�#�4�H[j������)/q��5�&R��)?\K��r4d�����M��l����U~�%����Ut�(.A�_��qQ|���_����,����O����9m����1����Y���������������������?�+������v$�fLb�'�l���a�'K���L���g�X2��:M:�Wj�������,��A������� |'����R���J�e�R�&����S�=�~'TmC'.������S�����`��C��[�x���a${xXc`��?���\�vNk���<���?�z($~H�$
�����x}���gp�M�������y��?�yK�z'�Ewf��T(8Z�dwf�5Q!����b�d!����lCL�L	���q# ����T�D��������,$��Lrq�������z��`P�o'�3���H�73Ug�C$,G�3�����L�1�'��yJ��sQ��(�Y�!<���������l�pfSbb^$D�8����CA��_\��J#��2�j;�!��������d�+`-��8'm-E�h"�u�o�*'���xd�n�1�QO]�u���'/� �&�z$����>�E�U�������7"CX�F����a`C>J�9G�9G��zN��e�=5%<��2��P#l���]�I�'N~�NN
�*��A4�b����f��'"1U��h����I-��L��g�����Z3.C�RAf��Fh*�Q�/<�&&h����:?���g�"��C�j����nba�������p���8EbJPU���ndA�H�q�`e��rJ��6�cf��c��;��D�P����L�P�pt�i�_$p�n�Z�����������Qe�-�a;����91���'�*o�a�'x*����2����L�Z{�����K��#�ZSO�X�zu\CEzLWQ�2�J����a0\�m�J��^�z����8��F��k�14\�r�����Q������A���r�Z����Z�LI-���	��g=�l��.	�&�y ��<ga�n�Z-�g{E�#��!s�f� C��:�\�����~���L��k*M�@�^z����O^.��C���(� ]��Mp��M�A�8c
5vc}�M��8I1Zl�Eu��K�N:����^�k�f���tea���x���dp�
�pM��>��u��{a2�yw)z��g�Wy�<�RT�73�:������ ����(���JHD��vG�8�<����c&��C���
>]7��r�'�1�����S��3A���~��z�Z��/��!d&xg�i�V3!����t=L��3����UV*c�1|����gXuP��R�7�-�a�:�v@��|���.���^�n����Q}a?� ���2,��1|P������w0t]}��Cwe}��QQ�,2eLO.��pg�u�����D�I�-|G�wE��I����DT�Q�)A�2�~v���{wa�8�CW��>EW�e��h��������
���po��y����|em�����p��*D.�gx'��@��Gw<^�"��xe�e#��������H;��W"A�
�3.^p�P��s��/�V��*w������h8[�z��>��<�4���8��?������Z�u<S{�'q���AF�>��5�v�x��t��P��$��L}p��,f�n
�k"��[���p���������Q�+�
VIO�Z(]�{������53�/�����
���0����l��9y&z�� ��]��k�~m����.�x�,���0��y,{�
���w
7i����������q�����W���7Q>���;��@����h��������;�e���l=z���^��q���K���0���~�[���s�>� 
��eB;B�9���@L�\
4qO�L�r�9�y�cf��Fv3N� \R7'$�]P����L.'a�Gk����XXIP�yf��^�>�	���F%���I�y���������s1���d��}m.9���l����uT$&-���CJZ^��^	��o��p������u����w�\Rf�>x�0��,�6����1��y������n�����253U����5��Q'�&9j1��Tc����}��O��s�G�l�'��O�4�Bc�3M����P��]�~���L�4�.��p��7��!ta��sA��N.
��a�1�:���	>'\����������F����-�~OZV��'J��0�L<I���;*I'S�G� n>C������N�n$?�<7Wx.������J\���1z.L��D��}I���FO9�]���6��L�D����������I��Z$�N�P/����6� 
p�r���#�4=������[P���/���LDU�}8��"��*��B|t��$��9�+u�W"C��T����H����w���G{&t�����z�Z�i���0��^3���dv|�gZ86�����Lp�p"�)�@t'~B�U�D����yt�Dr�<c9�P87f�7���D���v��5�D���5i����%
��\f��Uk3a���k��b?��f�B�a�%�c�P����}M]�U���LQ�HO�c�fa����{��.]_�J���8��W� ��������s��'�#>������ �������R������f���;?@g�Lx&ub��V��0�����Gi����������c�����K��{jb�I&(�`�Rs�(��Z�A�� �� ��=?����k��}b`t��G�Z�J��h���1YGa�|�����b�+	�.mz6}^��Z�Qu��]y�l!�E8�J�����	������xH7��_��)I�%v����
�3/b�+�2�������f#��5"Z��u=]�\s#�3�cWg]�p� �2���`Z��5���;xLz�8�>s�}���43P��]fB�r���Ad[��'h��H�?�������c���"���PY�s�����(����>��Q���s���4:n�V��S�/*��`�v�l�]�]�{e�'�|��������~������d�@5���,�<�z�3&���Ye*�F���1���[����w�&��]�R���>Z&�l�p-�A!h�m�L~f�oY���R���^����JAt��,�&�?���=<�d�7}�`�vI�����CpU_T0�}��1v�z0��(��&�|@��`b�ke��&��c���n+c��l\���c[k���� �>-��I��/h��'Q��3&����OJ����I��53�f�omxZ�$QRU\��d�9��7�a����(��}%Z��Q"W���d�b�����H.L`[��Wu��}�e"�ez�`���Cbg���{5��0Mz�ne�z&k547,v���An��]Ry�i����D|�������$��OD-9����}��L��s8Xr��n�Z�n�8�����b��V��|M�J��J�f���o,�,	�����'���b{���0xk;<��u�u��a�-��R��X��t�he�$����B�	�#���awbWp����[�)AA�������M�(���FQ� O��(V�o0e��f��av����w��a�y���`�D'�
x�f�C�0H�	����Q��D?��{HG??�.*�BSW�"�������b�2����V�>��i-@���7����
^u{�{���?�����[]�s����0�����r/�?AT0�5��A���%���r��:k�4�{9WXKJ�SZ����7�/Y��wA����|J��|nm�����0�y�����JC�;�[�wf��R�J��7-+�y�-���0���b��UG�n��yS��`������A�����	�v�R��d;����[��P����p�����}�e=��e����EiBI�;�KV5u�%1ezD$��Y���Mg����=�MU�
83����F..��J� �0�^�W��{�R%��T�&�#��*�G8F]��n�����/�1�P�{d�
����v�O�u��5�7��r���Q�@'kar��^	��5��YU%p�����]��R�����c�M�6�����"�6U���Df&,��
�Z��y�B@/�	��
�#��>���l������7m�4�#�dJP�o2�vZ���0�������b�%s�d �l"J���}8d_�'H�w�n7����w�������f����Z�oZ��O2c��}��4q���'�ZJ���)��N��Q�.`���&��1.,6e�8�C����g�5���\8^����0l���N
�"��Z�pqk���Zy������������B�=��3N�M{zq=�i�-��;��_+��0�j8|���&x�.]� 	�<�aO�li�6��-��$�������]U_�N��:�7��'�
6{�q8e��������B����������@��w}��C��?lS.��o�X�w)��3Qu�!O+��Y]� ����CK���f��Ld�k�\�vm��p����.���5�q����3c,E��T�o�3��N��Y�P'(�����@����r#^'��������(
�7q	"J��rj�a�Q���|H���-�����y-����K)�=f
���U)}�T�6y����S3� �kL���p1���i���Xwn�D�9K/�"�|�@\8����
��;��J&�^p �P�fe��Za�\,t���H(T�����+e%S
�����O�:79@'�Q ���+� ��
���!N/���n9_:�N�5�J@�CdK��dp���y��"f��h�b:��E��x�#2H�'�a����Aw�����b:n�j ������;�/��|���1��� ����7
��0���Os"d���cM��:�{�ni�Q��J��9e�\���|��A \��2�^�\��%�Q�Pt�&���_O��q�]3���w.���S����TLz�����B��H[P*7H����T�9Nj�>�mR���>�k�:y�����~�V��H��;��C��eN��&�3>�]��4�?S��p�E9��-*�|���C������������[�y&`%���q�QD��g���M3S�d��~n��9���	2���{/&y��������Q5o�R�_6-	D��n,�q�p�D�=������<�eP�i
T���S3��q�R���U�D�6� (F=� #*��W�[�2f�����4�_���a��4o9.���7IN��GtLO�<8��;9���C��	81t��Y��DJF�#�eu�~oR�����d���|F[w�}��z��9�_*]��b1`ex�*����:c�^o"�(rp�J$��W�"-S��@���PI������I�I��[��4w��4p4�auw�Q����L��Q�5��l%_XS�P�<M����*h���8�
!�^�W�g��K�j�J���yG��6�3T����@�<`C��)���!�
��5aS�l���Em�tH2����M����#���9NG�&��"�x�VT�X<p|{g@��oW��H��|�PL������O3�)����x�%A.���)��q�R	�F�5}��L
&�����|��m��
~������p�����;a]�~=����A���[3��e�SC~�	��^���py���1G���oM�j�����2���s�2�\���De!^�����qa���V�9��h��3��aJ�T7�G���q+�V!o���S�Bp��N���B�T���9�{�����	G�����7Q��/>���a}0C�����1cG\���e�r�J����n�����w�A������
[�� �a4g|������VB���{�\�����7��7���7�y�2#��X������~������+)��u}g�A~4�@����6AlM+8���Q������@����Q��Hj��3���c��o]���zx
���2�n���o�S~ko������ �{�Uw=���w���+�B�y~h����w�BP�O�iQy6�QU�iGqq�G���:��k�L$xs����h�
q������ox&j�
�5�B�z�*k?������zH����/b�_=Q�5�e/�du���H�~�*� �.D�	���H-��<x�Un�	l���5�+�R���{U�&x�����]/�x��w�$���jW�c3,�&�:SB��x ��� SwF$�����?��5�C�3��CN��&o����#&�����w%j���y�:,I�.�2��
�-����DJ�gp=.���k�������6��yd������V�R=���1#z���$M&����U�Rvn����������2#�~r_�;	�o����� ������k��y1U-�{%�)9 �s����wa���Oj)��.D��YV���;���:/?��O�{�F�K�w��3�b!b	�s�d����p��&�^���;tQ����"B��,0&S��N�����g|��������B'\B�x��#��|<��*v.����w&�8�3d&$6!�.�������Cn��i���~O|����j(2�;C�&���E�
XIW8z�g��]��W�6&�	�`d���Y	����w&�0��F����5��Al�B+'R��W��,Q7�G���&xoX~gb����I>"A+b��D��5cL���Z�� �:c+����?p9A.'���7�e&U��!UR�<c-�w^ZdU���,j�F+`���"����{F��r��"����;�_��a���3
�I��Yp�'^
�$g���
h���UxJ�6�6�A���]��������T�G��|I�2�x�~a,H���Y����Hqk7�f����v�����m���!U��m��Ub��i�v���0�������c�{���������(�Y����'�Q�����Tr�
��!��T��f���"�����������k�������oU�S)LN�����sr�%�����z��fK�%<�g�9����yAH��D����!�pb��S����u�f�����5V�
G�6�
dsj��=K�]���'����<�K��{�9����	�L�*�f���+c]!Q�A}4��TT�E�+��hBw�����PT��`���fB��5���o�=��[
5�1����������|�+z" �H��	gf(��#'UT�u5��o�q\�U?�>�<eW;��^Qb��.�
r�z	��6���\��Y��%~������0&��50��OB�v��B����z|pJ%�c0�-j�"!N��}��	�jF��C3��3��uH_�x�Y��,����f,��r��i�:o�Ek�:�9*��f������v�������3
�lW��	W��r���\=d�OX�\����$DC�|�\��p�Y����Vq
�zo����7����4{`�7�^�M�O�.�M��?�����_���_�O��R������O:t�q��rL����mSj��o�F��3��SZ?SZ�[��7��u=2�/����� �!����y����/h���+clBx2�����ge��Rm��x�S�13�k���6Mk�36d���.�k�.OmX��L��r��~����;�m�e��`wd#=��b-�vl���X�[�d�rc����e���'�ce�����K���	�J��+L�{\�c�+�������i�E�6�s�bKb_����An�Z�v: ����������;�����'��B����	c!�2����T�����L���5C�����.�����=�` gn^����^��v�Xa8pYA����%��d��
b����i�&��b2v�*F��C�$��Y� ���bW1��@+�>�����0�T[��S��L�|/im�-C�h�������.�',T\��ZR�- '�5uqnZ���&���:���C�$h�dm&4��UK�	o+)���|+'3�-�����"�f������(F�j���6zd�Zl#������<���%�������n&��Sa^I�X�s��G�n4�K�U�+�P�����b�K����a�����B�L%3"�J]�e��g~��k�	�v���y��q7C�m�d�$J&a�`�3�m���5��dHjf��L�6����5C�L�����ct	��p�����5G'�|i�������r��o��qS�~�~�)|n�zg������"0�K��N�+^��
� �s��r��*&A�Vw�@���L��~�����X-a�$X���_���&R�`2t�E4@�C�L���W�v�����k
�@Bg��6�@;lnY~�#>=C
��_�����Ri���T�[����|(��xQ�:W���-�T=�xh�u]���G1���1�:�d�Z��2AH��������Z&�F�b��m����;{�Wj��b�r�w�%9�Mz_���{�����N��a8�^��_fSLD]/������W������V1����R�'W���7���C��z��8j�vc�"���NY;if+���u9�X��~�m[�A�+���H/c���2:��2Fg"V����UGN&����M/56o��3_����q���7�<g���.5���r�+�:���TW����@�|����_B��7����1<Y�%!�d�������q��������,{"pyEO�D�a��*�����t���GO�g�w�u:q.���?���~���t(�/�H��]���_A�1JuY~���H0����
��}��E�A�o����r��[���kwXpfWX ���q ��v�?����ip7SB��6����v����D�^���	���g���6c����wmc������
mr�P.���������I�/j5�	wO�x�&c|fk�-�&l������I{k ����6��`�Y)��8����W�H:�{���x�����~M"�p��;����O�O��{s{�w>e��h�2����%	069w���~��@�����>��;������I�^�k�0����26��9f���#��Njgx����$H}�`�}P�p�����W5%.)�^7���.$I�6��Y��g���`#�}K{��/�z�fb���$n�!�LB6�o�.�Ek`>
��;�X�m.��lqE����s����n��e*G�_3�����0�Xp#Um���pU\%�s��*W�7���C�S�UQ���/���.�Z�p�KR9��}��*P�@t�Z,3�@�������]�:��.6�S�cuo�&�7�_cEL�!H�d<��������
��j����%�������(#�e4-����*�����|E8����K�e�.��]	3F���Y�������W\gt�`��|����o���z�@g^��L��@r,XgXy�K�s�Z��;���]x�#������d�sC��^W^��3H��zT}���s�tn���d@�B�������������#���GsY'�����M����+�W��x&�Gq����Q���@��1�O��n��U���1��~��	9P-�@����uO�'�H���drM�b�A��QA�'l�����W?C�>����d�����>A�Q*�a���D��|GX�K1�/�
���n��(,��9aC���d1�}0��-F��$�Y�O]�P4A�G�'3D����Bz8`@.��pa�e��'#1v�B�v�kf��f�m�/������(X��pE�C8$bK��Glp�Gg�����<����f�!��{u���I��8,�	�W�09�[GK��1eh��s���ph�uQ�>��M�(M@<�����\���3vDc�a�o�	3G��F%�2y�������K���>�)�m}jC>����<ok�h�@�e�%�k'A\#������t��D����+�m��;lU4,�qN���{2����]8�]��\�����w1�pc��	7��<q���|���`�zl�`��N��O0����!V�/�k��"�}Hk���t�>g���kq�|�MX!�o�e5@tm�$�v?���#�����N�[�d?+���mE�d��7����
��1r�37�M���2.�+ ?�S�-��!B;^���w��R�UW
�����{<�9��]�>A�l�d��OX���Ur���+/��mAC����;c��K�of���`��?V��
���e!,�:�+�0��D�`����������$���m�Q�z?��X�%�4aB^�9��d��GO���dr�p:���a��}�n�w���>�f^�����@� ���H1���
A!y�~D��3��n}����5M\<��2������:��@��3@+���
�d"C1���r���0�����kt��)��j|�T�K�^ ����-S�z�����7��-�<�2��������qr2f���8�
�=!tF�|������f�>��6<m�{�����4)qs�pm�zp�����^��7�L��`���^�k���["�����q�h�uj�i�b��
�a�O��b#�NN�2�5L�Oy`u����`���h
z��
���[m�K��8��	���Z�)����w���u�����<b �VCB�A�VE[����o��������x�
��"�<�O�����
������{��Qk^s2�����UE������F�<k����QY���K)��8bVP����q����kI����8����������:���7�zb������gY�z��qI���n���gf�0��ht����{�h���R r�tX�u]1_��)w�����hl�N�,���{���<R��H�'��@�����%K��2���h:�2���b<y���h�����4%zh������M��{�{L�C=�iQ&������|�>�5�����4
�
 O�	��}�h�������>-����d�>�d�e�a|sG���iQB�N�iQ�)9&B
�����l	JH�K�Oz��F���d��K�YJ��i�'����MzL���!gL�t��
��;�/�TFS���MS�q���q���Z��#�gG��5������Pp��������4��?>?�w��9~z�#��V�{��@)�O�}Im{NJ���S�sJ��'R�R��	�T��z�9(�����
�S�)u�S��S�:��)�/�5�QJ�r]��''>s�}������\M�\KGN;��=W�>�_�����p����(��3��D��xg&�����"�hgJ$����F���D��8���s{L:��<��D���r
��)������s"�H�[N�Sn�9����k����z3�~�14����(����(��9��s��-�$��ze�p��������b�OE=j�A��8I�1K�9��9��5����P�Y��Sw�����w�������������w��:t��+���u#5tp���:8k�H
���H�kt���W��Y�Fj_Rk��������m��''>sZ���W��I�z�9�����9m�����s�����,�}��y<W����J���\�3�+�o�s���x������7��R�f<��?��J���\�3�+�o�s��y<g���s��y<g���s��y<g���s�-�����x�}4iCC�`>����cy�������6�C�G�P�>�����c����r�yI���#��z��i9����4j�>����#�H��<�|^9����8^��ovX>��`7�B�+��*�;�����1l~�m}�U3���Ts`�����?��Vk������/��axb����uq3 �JX`�-�N����+����>�����3�@�	��<��M�P�8�MF�fb�Ew��jLI��]j����3��;�W���oWR�J��a~J�_���y#Di���!M��[X#Q���M��i��r5�����Gk����D>��oV���^����r�"���xg�"��m�t���U�*]�U��_��v����d�0��y�c����<-�����w!�
���`�������y=Q�@@;*'ol��A���
76V���2�nbdLd�5�������o\�N�3��w0�.y��9�=���X^����abl�jnr��|�-�g�7��U�����
�+�����mhR�4�F_�?3c�b�Um���iZa������uA��7����������[\_�H�=���9�q?s�+!E�~��@�YG|�h��~C�/V�!��V�O5{M��������?:�eo�#e=��D]��t4��<��S�R���"o��MD�X�������k)Z� �O�����zjs��n�UOE%�1�����L��!!:o��1��>�y#:���Q=N��A�iM��a��e������(Vx��nr"|W���������[~P�_t����[����gF�-��0o����1m�
��8�K�r�G��������`;�p*����t���{����Ddhk�9h�������6A�����������&����7�D@��U�j���oz��G��������IY:�C������aw�4�v��Aw�s�R�~�����)�mu�,p�|"2����X����'0�+���������2P<��~#�B����3�yy�B%�MW#�^3�����(�����A�?����1t>�dx*���|a	�0�������f_�4�b|�NL	J���M�xk���� ���F�U��E��P�0�,���.�����6��f��`���3^� G^|[�oe���LClo�&E����zgG������AS�������zI�{UJ]�h�����h'E�����a|Z�u���0Q�������mg�d��#�CS�����h�����+R4�O���&��3�?1���S;B�x�E��Tzd�	� F��[:3����1=#O����q��-�bJP>zh�O�Gh �&�,b\M��}1V�������D�3f�V����8!(��pW����L���8Fz�
!3��[���v1z��01]�Y1`��'1�]�
���8���1�S�+#��0#������Ny�������b���"7:3�����z3&��������g8������@���9Y;�p�
��g��:��C^���nU��LE�u&?�
6�!zh�B�hYh6����J�&C~����3f��D��s��!to�p������~'y���C��0����[J�
�3�0�q�������D����
�i���1a�
55����D���f�VM�+w����G1�3����p9O�Kb�iC_r5<D<�H]�y]� ��$��q��v�����w%|�p�x���
�@�zx������Q�-�W�Q6��~�$�����#7� |D�{�c�PEg�MD���R��~���dy�FM�_>u��E�_�_���Ro�ID�5�b?Do���P�i�p�;�>0v�j�1��N�����e^����]�{����Nn�}g"L�vj-F�Wy�+���+~�#��;��[�]r�5P�3"�x��;�++���Z9��S��r7��6���N�#Z�D��e�}����k�2D/���B���Dj��-jz���S=v^;���]���n�HUS�N����3o����wr'�z��v�7�;��>�l��m��C?\�iE��Z$s��������C���5w���"`
��i��k=�gM���E��`�cQb&�@� N'�y��Sa�[x��,As[�v�7�C�O�v������Qr��+!M!?k�pZK�o����EH�4��kZ�����=gLg�8L�������
�%v�_o�6��>,���
%���V�����,\�O�z@=���%�X^�w%�'�+~,��>c�|e����!Z=lJ|?�����qNr���������0d��X�a�V�.�.�y�@�[kV]�b�G<[����������U\��������v.��0h�x14��s��eOg�c�b��X��b�sa��k��e�u��'TK����au�K�Z'�,a}�bV�I
��`���J2�i�:��ck���G�75��
������A��E�Z9�Ys!<9��u�d���:�S��^<�b�2t�D�L	
�j�.U�
?���L���6�����fI�X2��<�����F��J@�(������Q��Q�f��������{]t!k�����>��<���(�d`#�*'��J�����G����7�T�l���G<��@P�@���V�n���$}���I6��V�M� �������������)�[�Gj��:����{Wf`�`��$��I�`����M}zl��34����1����*xe����&l��0QQ�1L��:������W��� �_OU	Q��M��w!,/'�9u)�#k��������vW>ea�-t��N���]o�"�����W>I�b@�`#\?=�����*"lX���<^�*]��q]3�xg
���AQ�}V���1,h:���^��v|B���B�uYO�#U�6����W���hOR��J\	��a7}�r	%�Pl����v�1/cC'�*����!#G�Mr]+Q��<��E,q��*���r����W���a7_�"a]�K���:���xem�j\:( p/����Q�4���F��.���rf�\Y�%�����2�W��m��1��7}yO�{�Q�,��\�h��cm�TQ�d�����������������
s�`�+c{/E�4�-K��V����0�3>�K�E9������;J���-�1�|�*���z�u��D������(�5��wX���k�������G���QOj�qD���NL	��c������D33����^����<cC����P'��\{t92e<��v�L������h@���~��p�e�|z7h6	�+V3�B�`*#?,� �������Y
H���U �e5�a�l�z���D�a��XW�Pl�����wM-�>��Y9��9�q!��f��������@9�!����+";���BSMLI���]-w��@ji���Gi��_ ����L�����fX�we������������+�Wp����L�:|W�P���^���-?(����������TUD�J;�������z�c�%O�L�`j��AS.�:���8�.>�q�\F�4���Y�1��a������)����4�����x����0MbD�(�����F'��p
������oj>�0�a������L@������B��v5��7�-~�X�(g��|�PZ�!�H��G�3qyP����&,5����vi[�Q�����{�	&�#`����kv�.VY�>�0�ZE}���},��)�a�/�a��e�',c��F����#����a�/�a
Z���!�3a����������|����:�-��S���8������D����h���Z�����1F�������k�d&�].W�
D��-�������dL��>4���?(S�N�)���Xw�����jk�Sq�M-��
M�
��Fh
D
M�-��v~�+x��vw�>n����Z���`
�=��#���q M���-3;"Sc�f6bSe��,���P![B�P�(�����RV/mD��/����4f�IB��!w&�&�D1-+��(����-��\{[�Y	A����4�-�	�^���})�=	�J����}�z��aB�����%%������R���"S�2���cO��S31 �S�q��%Tw������)@53����pS�I��p?&(�&�iR�@(�ku_�T��f#j�����O"@�0�������Q9��CF�f���[D7p8�e�Y:�%]���-���n���Qe��I3Cne��y�:��zVT0�5��g�qa
��v3�d�
���j5&a�-��:l�tle�Y��F�`�������v�HX?�������N��>5"U3��
��M6����Y�iZ]v������g�����!7o��M�VY���-�K�����2�����\�4�H3.�p���Zq+c��xA����m"21������a��S��2�����a�]��B���:�0�cT���Qj|���+���4�\2���Z8�0'=t+f�n�8e��;b��f�]�n@��1��x���B\L�q��Q�I7�)��aw|B"FqUqK��-.A�me�/��>���WO�}������P��[Q����!��L-������
����33c��=�o�����!"v�;"H��&��������������������n�!�Mw;��4s��3"��Q�v!2�$�1���#,lF�>
��`�����Y�9b���������X(��1������A��D�qsQ������l>�yx��2����?�8����	.==�/j�.$�QU�������D���7{�����k"(�%�+�E\����M����= [������O����u�u]���k���j3�����X�����`P����U�X�.V�<-��&�}��v�1�1L�p�O���Q0Y�:*1Y�8+1]��a����NK����m��#�?+1 ��Zb�-�e��p�5R������/lKQ5Q[�;��=����\��wn�����\�/|����}(��A!b���r��R6���<�w!rt���I�$w�)23��5�!�[h��+��pA�����2�o-�����Q�DM{m�M3������a��F`���1N,����z�Ou/+��MsV��c2��1t��p1��~�I���X��zvw�"��R��1{h�r%�~1�����6B�r�y�:Jt4����~t���-r�%+�;�������bnkQ���	l�Zb-^01��ny���f��_$�S�:��b_�!��,�B���&����Kp��<8�C��d)2o����y�:w���:X����(_�o�Y������t9�l:�M�/���������L�}���(��L����������~���_#X���W���3�1�'�-d�������e��:����d��6���9��|-��A������*KMLB��v�)%����	��"&���,�,��Bt����#�f����~l��l�2,��3�u��& ���q�j)0;�a_��	��(,�X����dl+c��
8�����25kM��~���cW+�$��*|�FM� ��]�)�f(���0cC�E�����*������>��oT�>"�6�:<Rt����y�]���/����a#JW�fiC�B�?b�O#���+M�eV�����7_c}���~X���`~���D����A����78
y�P@�w7M]�2cx��B��J+v(,�=�?�bI�7�G�5��7�������cN�I�|DL	���s���O��9���
���J���%$�uj�j7�������v�����F���m�qH+cc`C�n�X0�x�U�U>��Y���D	��#^ov+���J�������n.��D[oIp��4��S#M#8	��k&2��p��AZ����3ov�9�����������k:L�q&"~���<c9udJP���D|�Q3�"�Ui���R=�����#n�t����	D2�g�`���[2��qp�u��=�-H��t�L����MU6���	����b��m���	���J�UB���	�34�r����Ul���l��H���([�L`Cs���kh:��])�K���)����� L�&�z��Q���p���D�-J���z���=�53���=K��y����j�98�:F��a��J��2��2��G������������D��5��1l�5����T���
*[�f�t�d�Vl_TW��:�����a�&������9P�y�u�"AWU���!�<x�1Nxu�(����;�p��U�0p�@D�Y��U�h������SR;3�*�	�����,��E���F��1�gFBMR=R����K��f�YT&U��Z�������|�LT0��h<���k�����$,�v�%1��H����|H=��[m���(e���Ss�1�ML��K��
^-a�/LWgLW��`~�q�sp�]Wy?����71JP�;��W�Dt�����i�@�����D����R���w���<�og����m2����������$���p�`���#B�G�����������4�ek������q���?����>�
�G��U�������,�Vu ���m���+����Pb�����n1�;������1����N�������j�����X���.�OX��1��-�����2�{[�U"�����/��<^M��0�t�{��&�����M�����!Z�����y��OMW�
��<�P�Z&BV8K���\V�P�F�����{�d��R?aUoU��x��vC�%(Y�x�<J�j�w%�w$���0��������hF�:,,qe��C��"��7���J�n�o���t��D6���!�[`�)�bJPnV�{�}�>����7g����{�U�p;j�	�8�nI�`(C�����fg&���Y���x����CC�Va<��L�T��Y
]u1}��x�w��xH������B6a�lUS�3�}��V5�
�_�#*��c��_�Q&y��^�3�a��	�4�.������Y?Xre�������Pu���R����}�)C�0n6�Z(��������L�P[sW���64`�G
�H��weJ|�����4���7g����I'�N%-y�N>	�<��`�w�PW��]�w%L)/����<,��q��C���_L��$���/��]	���d��0W�@��3���/�������=�����>(��������8���A���p�2Ca�'"��Y$�n���U&�Fi�^�weP�;�t�)8��]	���c�=n��P������1��F���P.�����z��'��q�g�[P�@V" 
�?5�G���c��J�-�~1P�v^L���Z��c���������:�%��<��'���#�93p����7�t���	D��|�?cPL~$�t������x:f��`8@&����G<6�nM��=� ��s��N,�w�W��`��"���+�h���-������'����FdF!<��J�o� ���'���d�8�g�p�C�0 >0��~1�m�waZ��B�
-26J���E���O���dOq!j\S��|����<	�D��H�����C\&�5
2�y�������}lE���t>�?������)p��D%��������Uf"Bg��v7�#,L���O���q� ~d1C���I�-{q�������������
�'M�;��E��'���6��"�������:����hf#��0���3=������kiP��AHb7'���cc�Vn)F���O��7����!�o9T�\���4�����711�����,a���]�d|qEi���"�A�����)��3�d��&��������_9�5Sh�����/f��� ���Hgi6���83K^<�3)@2I^�_I����#�w%�S
�Y�]{h��3����]#���L��[F��Z!t�Ld�K�U@��z�[���C��oaP��z��jV}c��cd���{�K��k�.a�*l�{���<H�L��q`
�7���-L_�8S��+��O@������`g����/eaO����S�����y���.���[��
�wQ/$��0K�]�ED=W�-I�]4KC�]��I�oa��g�,�&t��>�}�����'��T�C�]\p���DX��J�][XP^�3��C�]Mly"���N�dzo���|�7���}G�w"�y��Q���������G���<%��	��G���G�=G\�������4��?�<�� v��q����3�@���[�ig�>���x���~����`�%�������.��%|�gL}�����vw�9����w�7'�W���K�"8��Yn��s��W!����*�Oq�.:���!Lt��M�������{�'B��O����z�F�N*���`e��!�.��T���w!���#�V�g�9M�O�?�d��d��
t<)v)H(��98��U���0ZSKU��^��q�������
��1�?r
:���I��n`w��F}���S��������
�����������!������j����<!X :{<�k��H�{���r�pn\���/����3�C�H�@���D��=�I�?����d�
�����X���%��0��;���(!O����-������7b�����||bc�D���#����5��JQ�AgG�3�����XP<k��;3�E���B��2 �df������n��������{���wah=�`t8�&���A�3
��yb}&`S��guP��6X�"v1`c��$@��IiC�bZ�r������_��������0��@i.M�hq����J��Q�r��	@| &Zq�"���������za��'�EL��>l�K[�d���sC� Rz!�1�	�m�q�k��8Ax�d���bgl���	�,8����),7K�)�Kkd��X,���}'�*D<�	�"��F_����P�w������#c[�������h���W��;F�^��XI�f��J�/�S�9@L�b�u9B�E���WL��\����i���5�=J7�L�����
�U����3mZ�	�*0��5�p��G����9\��G,G����9��.L�i	�������P������4{O�|i��SW;�5�G���i�����!o�j������q����.��>2{p��|3�w���%����������5�b�j�9���;����uP8�<2`LY��'B���e�����@ia�6�X���a�%!���,�,34<�g��IR�1����p������<��f1�����G���`��qhjW�Mr�����}!:�TO��e�&A���$hA��y���Z����EX/�-cX��4�$hb��M
���I�b�{[��A����#�." ��P��{n�	YN.V���+�0{�=d�M����_t�CK�&��:k�ssl�8��va��:��a��NDD�3�~��|N�b��H�'Q�<K�\�o�S?�
�����[�F�M�m�����mj����%x<���~>�S�.���n;���������O� ��������P��x�u����Dx�`t���GwPg=�P�Z���X	����SXpG��R�\���?R���I���xL���H�<|:a�dt�e��m�UH|���!7����xT8��A��~��r���r��t*��E/E�]�!J}:����#������@�j�)�~�(]�A-qh\�c�"��f��2���h��hSyuU���(/�zyyu�WWU^]�������Q^^Syym)�_c�"���k�2��5������U@���\wl���?��P�J��
��<qU�O%�����T��1��������da���a~�]��?�W���H�Z����,��a�_�������(��s��������A�A���<���������������O����_���?�Eq^/�f3_�S���#�c&���4��1�>���L�M����wd�F_�w���W��g_�	��~s#t|�;6��+�a���s��Bt�k�>�a��~��+�~'�N�N'.�+���m�+cx�Op��M��Fu.�8c��=��1�/�����`�l����
s�hH��?aC8)?$� �|n0&^�+�0�MQ������7��
de��q��N�����3�k(�q�dwf[���]A�ny��5Y�����+�!�<&�L	�$��qh�}�~���DD�@<��t/$��Lr���aJ���|>�������+Cgj����L;-�����4g�edf�!����*I��K�[���g=�S��t�����X��g�0%�3���L�����xm��q~4�����T[���C�[g"C���J� X��~*��������A�|��zW�>����-����_��K�)7|<�k������::�~�S�j
��p�����!#.j���0�!%�\"�\�tK�&�=����o~8�S2��?+���	5����?5�T���M�Q��oT����7hLE���u��'"1M��h�s��J{���2�r�p��_$�i*Y�K23�7BS��j��s3���aWEun�|vm|Z�����N���Od�X����7O ��|��"1%���X���D�H�q"ae�vxJ��>}��?����w����o�~����L��L�����_$��n�Z������Y�o<e��x[�{��;1���'�� �a�l:N�]��Y�O&���j���6�_�2�|�L�t���k��*���^E�[d��#e��/���0p��BIz{a�����#�2��K�(Q������s��U��(Qj1+���#S�-:�8�\��'���j/����(�fN��1����%��g{E�-G�;d�C�L��o�NlcWL�/�A��eC��Z����3�x��Q��h&P<�P�F�}_��>�	n2��3Hg�B��n(�7�?�OZ��b���b��K�[m<Qvx�����0���!���=���1\����=m�[�~&C�w�u�}�������
�o~3���C�<�%1W�L����c��D��+s�����\��0x���8n�9�u&P�3���g��pY�g�85c�Af�r
x(��*d&xw�iD\3���]3����?�������75��������Zjg���1�#��J��4��{������-}G��1�xD�De�eXbc�Q�1�e@�;��~W����z��?bYd�pOz��W������BM���L!��:
Q��$S�2�e��
Tv2!����Y>NC�P� n"c�]t}�T�M�����c��
��������p\l�8�����^5�q�'y�W���) p����������4^b�����R�<�Kd��h�+� ��}r?��p�_W��/�V��*��D�Yb4�-L�gT�c��O����W���G�T`�����8���OL�mfPP� wGD�����Mi��
u&�g������0x�r��D�L������� ������AX_z����Rv�;�D��T��A���u+���l/�a�G��7v�
+��� R�]��k�qm���]�ol.�J5;3H�<�=,������#-�0����q��c��@o�+pKg�|�q����@�~����g�n�l���@j�G���K������r/L�����zi������r�#����7�p�7��nv���J(��YR�;n�H�L����;��cf�<G�y4N���P����tAy�w�$'3a�Gk��J{�e0��g�p����6;���J��5#�"�m6��������s1���=��~�6��L��T;l�C#���HL��RL)9�<��J�~�$���f�p���T�����rI���,[C�e������[��c������2x��h�O�dja,x�����I���:��0�Q��]��c�L
�c���M�/M��?c����1>��#���9P��}����x���!ta<�yL�y�C��x&�A�M85<f���8P�1~6Wg>3�k2��3�>z�rko������$=Q>z�s����Et��&O)������'���7JT��<���\|'M�%��d��;b�\���[��AX��g=o�5��nM��V�	�H<)awq�@��FR��������{�z���6� 
���*�Gdh��2��}	
[}�����0��;���
���3���B�9��m08v�w%2D4�����}(�-��������u��L(+���1{eX�4��Z$����������e�=�P!8{8,t������Fq�3HN�"77�NJ
��c:��<a�8�h�:8+�����&"������]�EJ0k�2Q|�Us3������/����,CH��)�6d������}N]�U������m�N�7c5���E�z������?���W� �}z��K��DJI�nq'"�����(�"�{��JqFC��#��7�;��`�Lx!.�m�;|��X@����C#����[�?���6f`TyW$���Xb�	J�O���t%�W�0���g�r�Z������9@���'n�n���2T�F�D4���d6^�C�l�c�CI������?�L�<A/eu1�]��l!�E8�J��Z��DbJP����y���6�����$�-�L��1�{��~W�e�I?�>�q��FP�kD�Oc��r)r�}^�E���lLi�Q�v���L�3��7�x����#�3�{=^M3���2��~�"��=A��Be�G>6�s2�����?&�L���i��n&Q�1k��������0"p���8��2�����'�ah��K
s���43�~|����+&y�t���0z����K[L��j8Y	����_�1�5��*��r����(�-�3|1�����a'z��_�^Z&�l�[����sE!?�
M3����6��4�����D�[$�J�	�G�8
a����/�=�D���6�>�)�:����3��Z?#y&
���i�����	��������i2������5��`���k���� t����|�
�`��U������u32��Aj��>-wXk�)nm��O� R��J��'cO��T�]�l�%Z��Q"W���\�n6����2�o�g�6ec�o�L�����m���Ib'������!��i�{���1|�	
�;qq� �r�aL\���_���^z�s�O��~��-k�13��	`�3QXB�pf�Y��.�Z�n�8�����b��V�����p��K�Z���~�g���_h�y@V2T�q���F�B����~+��u?T���`�2"�r%]!Z�1I���E��D���pe���mU0��`=qHS�2�6�P��,D@�/�'}�8CT0(�:����SF�mb��>,O5s{j��1�g@<c 8c42�At�X�7�a&
0r�!bx4�<��������	���{�E�RH�~�P������b�y��u������8S5�[�����,����=�����?��������2�aoa��uW���Q��[�$��lSH(j�������\`M)�N!f���-w�������Z?x2�B����f>�U{��031��Q���P����� �����M��^|��x".l�8�.��r]i�]'j���73p��������U��T+�0x?�SYoSH��b@�`�y��D�A��|�b�Q���_3�D�3���\7�PS�[�>��E��y�.L��?g�)*C?�g�0�������T�:a�;:�������_����R1����"|��A�+#\<,�5�������u��l���\iX�p���C��������Q���ar��]	��5��YU%������eLY)�u{��l1��V�t�X}�I�Eo&�������ap0���w!���Q��H�}��	,:���g&��7����CJ����}�Qw�R,�x!�d��'*��E��E��K��&�d��a�r����vN��!��_��"c�}.A�����y���hRnh�}���~��k?b���]�.�j�^�%��.�� ���T��](���7\"���
���Z$L�83�Y��D�G�ge�xe�!��U��.�����o<��c�eC��30�|���5[��}-*�S�1
7��=���Cy�HX�`f��e@;z����a�cY��Sba��o^��Hc����h�}�tW&�g�8l:�y!?E�M�����Om�[|2�x�X���^m������kY��,���(�vP����~�S��?���V;��e�(<j/��C��B_���M��:��q���:6�2�8�r�T�]�	n�&�=�~c!$�,�Yv!��6HY�#����/-�;d�x��	�W�`��
Y�Az�$J0q�p��%����\$�G�
�����I�w%F�X�����H����x{&�1�L�[F��bQ�B$q���U��j����J��U�%��3�1%�!9P�C���|�1�o]?a;�*�hb�D�G���]p��*I���;��`{��<,��]�G��\��[A�s�-u�L��i\�M10$lA�t!8�(����40�g�����>�8Q���'8h��:�z�}�2|G�ix�N���qB>� ���s"ODq�o�a�Qe�Ne]���1�K�~"�F���+p��#*�ri��\q��v�y1�����;��tK�����f�_x��e0�S|�� �R�lA���������'��O�
$�e�2q��nOG�J���'"��C��^�����]g��=�i/L��C}y�P�$��8�R��[�3����d�G��B�{�d0�-�R>��XJ0Y�g��>�.M�r�t�h����2�a��F������(zU��E�0����_����KL��n�:je���I��z�<�u;"��jH_���[���;�������U12��;L@b_^-��\\g�6�e�����,�U�
���k������R�m���
�;��(���K���*���p*}U����97.�����v�w]`������p����.7�$�m^�h���D�8���i#�����������������-�gn>�����.>�7��C~���o��f�[4�;V�k�n�$�iM�xuSX:,1��K
�
�_���P~a����I,8!E�b�-�X����Y�4�v��KF"�����SIu��X�Qy':��
Q�%�|����Gj*9����!	F��L�z������ X�0������5�U�W&L������.4p���X�����O��������������~1��G)Y�5Ivf����#9���f���,�H���d��k�6�Ym�P��e"0��
��%|��2�K�����������q��.1%(�M�����?��<�:�-w� ���9�@�?�L���:�tdqh�'0#��q�� <x��p!�������G�2{�P����B�����|8.���]	���;��Nv���o8i�\z#Wr.L!�<���^a�df�{����1�%�D������(�>�N����a"t����?��'��;,#�e��m]O�Ka�`�;:,�@���v1�����f9>oN;�+l��^��<���g&L��qWL��~1��;�%���~1���'|H9��22�Y(���}�kf�l�{�8�ux�"���i��(�3W��L*RW��_xI��L���7���<7�B�G�������B�����k�Tt���<!��J���f���:^�L���'(�o	�^�i\�-�������J��#����B@%K��&��$�02cj��]a�%7����;in}M�f"PE��|����h��\e���>T���e��/j��[U�}�A~f�����I���mp+c�I�.M���h���R��U��,��]O���}�������Mc��]f9�����������t&��|<�<����cqy�(K������4���TO����{�Vf��3�#��^Q�
�(�����l����<+B��Y��	:��`j8� �3����O����S�,�AfWf����t��.��C����F�	��~��2�H�l&�/xe�D<����|1�i���Q�rl�Z�
��2���/s&�,`����N�����<�:�7�j�Z��w%R]z��;���."B+U����U�{A_�qqS����Eb-4�I�z0?�?h$,����]��`�K�NE�1c���]TA�{�����
�Yg���(�]&A�����2�����(���(�L�;��������$�>=y\�w\n���Y��:^"��
F��=�������Wwn����5�j�����g���.X2U@��g!��
5*F������1����;�����!����!{L�=p�Y�����rZ�F����@^-�sT������9qHus�cE����i�����-;��+V%	����j1����6����(��Cx�QA+3����)�C=�]�Sn�!Q�������Q3�b�	F�_|&�"���`�������]qy�.��-$"�3�s�aa�`�L�����s�A��b�umc���8���,��1�J����:&���c��#*���'0P���j����B��H\R�����a9aS�aY6>���x���o���`���;vE�;�N���a�	��R??�)gl{K�8I����`�}�u�s��v�~i[���D��� �0��t���G�v\|�-��n������J���\���fg�`W�������0�{L�M{.��N}�	�}�N3�n� _�X`qa��o�]	
���x��Dq������������`��'3���0������@p�m0%�|�R6�`kM57������|�����)�����>]���_�TX"`?V�y�2��]X�T����bC�m�hu�[��b�����h�����{����/�5�rr]� �qW&c�`�#/��X`~S�@d�$�]��)�n�b���<b93��d�s3����f��� ��I������X�9�dx��z�����vE���jO��L��8�d��pa��^��}ePa��<+�>�~��v�7�"7\S
LEV#�=1Y���,+
����r���@EuR�5�*t&���Cc�F��w��c�L>���5��>����D��G|�LZ�����	��Y:�O��=�c��1��Sp�M��_�	�_-��TfY`�;C���8:!|"_���k�DLP���/�/�b����M*�kzk�)gF�]q��~���Z��/����Q�H������������� Pr�T1�x�
2��4�4��G�t%�=���\�N�RL(�d,��r�7�6v��Q|�$������v���y!��5/d��������!�������~������~>���_����O?��)��BM^��|u������%W�1��:];�t�������	�<��?v��z�lw���eX���&��~N�I#�`�� pDm�<
�3K8����8�m����l
K7�>`�-~!l+�L��������1DJr��!��y��<�\�9��K�l�
G��!����m���w�(�HI�
2�6��0%a�����������'�4��%L�����"���S#<�o�D��Sk�/�Uv�a"�>��+���c~���
��]4gM��t��+{��(����3��1�����h���0�.@\��:Da\>�`)J>c���:Jo���;N`{3D{�^A��8u����4aC�YN	ToN:F*�.;�����'A���J���e���]�6"�z���P��4�4�P/	!m�\�CU�:.�[�_����%A��+���?�7�	 �:U�P-;����y�P-	�4�+�v"0�e���=�o��>W-���Jx��C�-".�b�ZT1SC��-��IHC�����`&l*������`2.�f�H�^5$b`C�e��(i�D���j�V�P3�N\W3��ft 5���/�L�E0�D���7M���=������a�Z �h���0����a���	B��G������5.hp����
3��P�$�bJ�,p�ip��P4	
����0C�$�����J{hSi����q�6qh_�JMsq����m<�Au���u���*�
M�	���EM���Cf( �����!���6x�:��a�������)���2��Vf�2��Z&��m%%�����ZW2	:�c��������d�/���%� 2�~�aq��__�8��q��C�����7��c.�~��5;�]�L�N��@W1����k�F��
��I��E?)���a5,}tX23�("_q3"e�`2���2eVU�O�	��8�S���7�^D;���B6�7�7v�v��H�$a�~���r��T�Sth��-�"N������p�w!%5r���~4p�V�vb1�.�fy�k�~�p����Gr���UW�/�pf�r�5/�������)��K�z��RbZ�C���U��G�]ps���x�����F*��'t��6>j`~++��'m$��2 C���	yJ?�D���&Y��_LX�xN'���������p��F��:�l:�a���fL�����w��5_�g�	�i�8
��T�^�%]>����������X����uig�G��x���	�w�G;v���oz]��<�^��0tK����>F�*�@L�.�N��0����<h9����T-����SQ��u�0����sr�d���\$��,����M�Z�|
����i=���'Qfu�~'����R7V�^����T@��B[L��A���_�:A$���/d�w%C�P29��\i4�����������I��v���:Q����cQ�(�V�����q����,��Sb�J��'�S��KE��rL���{s��){2Fyn~���=&,C�om��������$�rx�9��[;��W��!hWOhd��9�������������!��(/�#�(�%j�/�<,?g�� r���#�7�r:�o�V���zO�4�8mx��E�����C�Y�������o+2��Ni�N-o�1��Gn*��ZT���� ���m��Mi�PK������J,�($�F�2��A�j����7[�xi�>C�>�����5:-qQz>���9B+�tY�A����z����z�bp�Qyh����mVI����ny�l?#o��)S�/{�'X���x�X��
0�ro�f���:|A��e��r��:��d��}aBY��:Gqy��S! ��y����nw��`��U����*0���Tq �Rn
b��J�	�vk;�0U�*�5��9!:�$���	��"��;G�d�q�8��>�����yO�C��_R�(�}27����!	"��G��@t��bs�Z��u�);R�.Q�LE6Z�y&FY���C�������Jg~Pb�N��r
��-�������;���������Q���[%���0��L|����@�Y���0����D\�j�@�(S6f�pk'��i�	7�p��b�(��O�:�2mN��eqpE�<�4�Y&���{B�w.^,��%4�(q�2cC��|1�H�Ty�1eh��bTy`r��!�P�b��vX��1F���?�mpa>�piN�$ �(�DM�`� D�z��F�R�eh���Y����
&����&yt�l�U�Zh�����~��;����[�!��B=�����#� o����sm��x�ph4s�Mi������Kj��AC��C;����4������R[�����Z����ho���������Vf�M�'OL�z�(o������&��&��*jk��Z�	�lo�R_�"HWT��:A�.����592Z���c��y4��3�&6����p����
!MB/q	��K��x��M|n����l#
M=;_�������M�{2e�M�e�D&\����t@C���nirdd��4.�������=�J�PT4}����`�x���C�?T�%��^H����f����c��r�XxgBE��gG�[�����`�J��xO�l��Z*�@�7�`��)\����;���]4.�G��7s�d����O���e�e�L������8�}���0�D��Sy32c��oN��4��hz��	5�{�G��",����u��d�����l�k����L}��Q����w�Vq�
�R��c6c�|!�����cVw�{c���O���J������"BX��	0�G�gt�tV�R��;L�����xn`>����@Q�����R��3p��+',?��������/�>$L�c�DC��.aB����[��2�h�� �.����,	L��s�L��D4����{��z7C��o%�<�}�{H�'��=}dSz��.�!��q�Cd
edW�F��C���L���^�3����Pdl���������P���Za��2�����(`Et�_�+�r��s��gX���*�t2R���*~B��Q��~�m�HLV� �
[Dxge�tO�JR���:qkM�������5O0� ��z���q�_��;����H������
!��47�`O{��	[} �6{�.Z����H1���l������xa�1�es�����zy\��gB�
�2���@�F�3$L1�W�������`�������Ce^��C5�-`=I����^�����Y�j�1�_��%G
d��dgS�/�1��;q��5����
�^s�q�#	�14^�����d���L=�!.M�LD4`�/}�/�n������1�������s���Wp-����g|���v�T��?�r���*{^��$>����:V�������{������������F-?�T��g��������~�/f���%,�'cC;c��H�pw=A���k{�������x���A���1����p��V����M	�x���1r��J=�]�����B���{����f����m+���^,m�a������v����v��bk���X��c��.��c����e�ty����5]��t�0]�\S�2`����2`����2`�������Y��g�/��c�\�Z#L������g�����/�m�xMv�����m�xNuy�UyL5yDE�=�&Q��
:.��q�g�&���/��;��"��h�,��@��y��@��T�g.�3��T��HW���������"���5]L��9]L�����u.y�K��;�����?�n��n@�����0u�k����C�Iq��}�}V�����o�h�?[�L�qq��g��O��%�*z���P��'
m��[������{�����^�����'-=�����t\Z{���z��IQ����'M=����Tu����P���{R����^�S�
�=��q}[���.?������;���z-5���m�zN�z.�zL�z�]�E�>f��M]�AW��@���t�_�^�7�@W��8���
t�_L��g�@W��0���t�_�]��U��6
x��6���$��?[��g��>fY��{<s�n
�kC��10��1�m���F7��1��%0�
����������|rY��,y�+ ]�=_�}���&��:�0��1�����"�=0��T�:�9����Y���T��g��B�;v!:x���|	��`���mSMS`z&
1�����=:�� )�83��P��h����a�F6l����	~pr]>o�M����W��^��/��3��H����71(Ba�`?�(�D��0:�)�Z���mT��=;Qqs�$��
��+S@ ���j�2���%���q7�B,&�3�1��g�����Ng���*�7�[��:��A�m�Em!LC��Tw�Cg�-D@N!PyR�DP�Bb{7���+a���V&&��A�p~]D2s��.b�:tk�~ ����)�+����w��+����NBQ�@@T��GqQ2n,��� WA������,��/~0���~K�]�\;��������?�B������]2� =���[^���q�+���W��0����91���JO���Ri�k��?3c��G
R:\Y*� Ks� ���y�o��S@�����&egb�w%��!$��vM��3��A��O���a��[���.C�5{��j�O�����v�N�V����4���X�,^�d8�����?��V�j�x���E�i� H����Z��)�8�H
�~1���C�t�v=���<zj����(SB*��a
�>����x����a�]��:#?�$���V'v(�w%n�X�1�pp|W��v
�3�:���E�~A��-��[����gF�-���P��U�1m�
|�'��]���>�H��c�	3��I.E-�8�v��=����DdhS�%�Yl�e3s�����5�����wc��~(/j��������`6\�K��x''��K���i�eaR��b������>���t��g�E����'����=
sZjaJj�&��8�|"2���]�FD��Y$0�#����P����HD
(�GJ?�R�n+*���O�P	7�(��z�L��&�������=	��e�
��dx��y���;��F�t-yZ�7��&���H=�������t�uk���� gj
�f&\���j;C�L;��k�6+�B�C���������.Rr�a�o�g���gb���S����OP�zg�~���M�����]j��������VM�i��,���������R�|&��7�f!8��%c}92�:�b!`$���������o�.�Z:����!�����,3{�S���u2���+'p&��h@���Q����:���)�Oh�6u�G�]�Vl1����%��A"4�?���3�(�����I��7����0|����tZOO�� ���
M��G�hi!||KK�;W��CQ�I�	1�$"��.� ���Qm����%��m�	V�<��D����-���Wh�2�5����1��MfL���w%
��-��S����6�@�<�p�v\t8���~z��D��f�����D����b�
�@�<��7-�\���Z�f�A���L�|�}���7��K�����B�h���tYM���;�(c k��MY����>nN��|T_xg�a�!�Pmw�������P���kL�OCM��]p'"��G��USw�����p+���?B�L�K�L�[��I�AG��a�.|p��$�����������w%|���g�i�����q"n��(a��q����>�(�IN7'Qi-7� |D��#0T����&"�GQ)��{����I�55��u���G�m���x@���'9�zST4�0[�<�)��CU�Sv�o�aGX��Wm6��L(|nX�{	}�;z��fG'���g���7q�K�s���s���=~~��;��[�r�x6��;D�q:QBe%?z`����p`��0�_�e���BY�D��e�c�8���<A�R;mI������R���i���RO���j�]���n�HUS�N����h��B��;�A=nO�#�ljbF�D����x����qB��}2h���#Q����qh��ql�}l:�k!�*�;�O��5	p{�(���I��0�$�b����K1N���!�r��y�>�1b
v�Q5�+�Q
�x"�)l��$-A�b��[��8�csabfH��7�M��%{�pg�]k�g�x�����U!�E�C~����i��aLg(�d�0�$<�o�>��l���z��IK��iU�B8���F��1�g��Dx�u�is��9�w�7
`�������������n���aX��~�����c�)3Mk�3����:4)�����) 0]�i�Jb���bcTK��V/c�6'Z=v�h������538��a�����\���)�H8:V�D����%�
�X��w";a	������Nj���������#2��Q$[3�����V���vV5\b�������S5s�u��B�3��@��o�	+)fB;����G��%2%(|�S������O�A~\���4z�`����X�	<
��+;3l�c#aZ%�G�fb@H2G�RDibX�N������~�B�Y#�OL�Tu���X��M����)~W��`�N������et��0��z���>�������|���+.�A�]�$}0����[�7m���jv[V������?�gOW���}\����t��,���I�(���#s���a����W��hK	lW�+�l��t�(�e�����a����6Z�:xe7��Y��UbG��x����V�����������|���:�#�OY�u��a
��{�����]D��#���gb@�����:x&b�������I*���V#X8�o��JX��D���pC�
�A2��� ��u����:x@u��:��*x"X���a�,�2t���'c����Q%��W���>�i��^(���%�<4�\O���z�
~�4��!#m���A��k%���G�;�%��*��g����V���1�����sy��T��Ds�#�P^���5�:( �7����aj�����7\�1����7���d��<R=o���@�������1I�t�Zp�yk����6�������&"C�3�YO�)A�T�?5�A�O�X�X3�u^�nY2��2��e����[c�����-�MO��K23��9�Qn��Z�T/�.��1%(<��O�����ze�C��_���=���<�M-<�)&��?�y��S�6F��e|E'���NB�G"�����
!�w�Cq���7�2n��v�ux�����������d�0�a�\Mw_L_
�+'V3�D�`Z�]	A-��u;z<��S�� �e5�a��Q���[<�!������x����O��_����3����|7+����L�4F���������y�vi{h��)Ib�z�����[$RKs�R?B9����5��L�~SQa1���2E�^�O.�V%��/�X<���I;��Qs�!?��{@����U��G\����j���}xD��#��Ck���:���u�G������%�:���8� \|��h�����������i�r�������6/���|�'d��62cV���h�����F������
������w��L��0C'���y�a0��6~���x:�4���T����e����J+6$	�Z���u���EY��-��z�rK��(����P�;�u�>�M0��en>u��N��.a�]
�U��'���cAJ!$�a��u�n�',c�L���-����a�/�a
Z�6�w���D�h00����A$��7
��������i���!�m��@�Bt��.H����{�u��W�X{]��yhjefh��8�p��H�����:��=��_�c9P��C#�Z���`
�'��#Z����������A���Z�4��*GtjaV����~c�W����1���T��#���0�]@�����~��
�3a6_��@&Jjjz{�$����VB�#�y:��E�j�O��K�)��D��|QO�f`}��}�D��~7�*u@IIfef���5P����m��N�n��'���������C* ^�U���h�`�4�f�_Y�n�:��������a���)����������0Q���~���y8�{�
R�`!����rf�!"T�XR�-��
�?3��?����� �|�O'�������Eks@�(r_����z
W���B����@:5<H2I
OE%Qn�9U��n���#fa��p
���������:#JAK*Q��Fr�T���2���!��v�V�.rj.
���+l��$Fkp����@������j3'�oe��K�!V��(��(���l�'����@���-��i2��_��d=��U����pH�WT"
t����E"�-G}�6 ,��8�I35���'CpeX�3�x��5��-���x��k��!=�&Owe&�UFp2���N�80�S��97 |����/
�[$p��<� ^�~����`1#�o�mz�=>'1�\
��{4��b\�B(��V)�sxx���$�01����/�p��k!Suk��V]Gk���Qc��iqE_���lu�cqn�G�W�bD�=�������Or�&VC&��� �S%������d����(8����dP���pH���s��`��)�aG�Vg|���t��/���{���A���m�DS*p��t�=�������$"��@�����+-)#���r��]�-�5qo��s�G������%/�~����PI�w�E�t�'���Ql������'~s�gD���������
�;�zb�1K,|��u�(��V�)�FD�)�3�AM���w�5{N�1(�����e�+OP�s��=��Y,_J��CF{h����|Q*���g��{�� �h���2���Q7�'>+2;:,2_��i��������Rk�b1X�|1	�cZ'��@T	��f���8#}Xu�I�y��A��>���IDqhG����I�������<S B�a�m=��usXF�R��<O��x�y���k$�A��t�la��l��:�GD�%������/p���P������L��|��5��]
�S8�N8����p�����/�����b�� U��� ���G��9D�����y�w�d��R�wm��Tmi��<c(��8�o:�4���6����)$4���S�����R�/7���RT0��G������"Q*<evV|-�6^3S �*�^���&I�3���M��*m�
�h�X�����.%�-�+���B8��2��g�S�)Eo�jN�r�!����~`��������U�@����?��;�[�`H���[����c�-<�t/A�N����N����7?��o�x4>z&�cfj"������m�
����G����>>q��:8����[�	���}���JU�K)fn�7�Cd)��1p���cf��r��"goV����5-��5:���"v�y�z�LVN��L�<����J����/*���#��po�4(��mD���X�%Cr�P���&f��{W��U��������.Kc7���-+�ea��eDKto� ����u��D<�����W�0��^(b��$�s�u����ub�
�b�s����A��=�p��*cz$����������v:�iL�|Q�����nR)o��������.���g�B���K������-���Y],|y�y������T�}�VA��s?N����b�g�_��E�M��<)go�Cm:tf&����y�FaN��������K��L��������Ug���'���of
4w&>t����!��t�
����w�u<�C�}�YH�-GxF3��\z�NF���
O/���E\�,��]�f�fs6��B�D�&�x5g
��*�x�3}hS�b����x"���L�)�}�x�����vQY���F������:a��v�Y;3����k�&��=�P�PT�U�`QCY)��L���H��A����HU{�U����~�!<�w���^{����Tf���v)�a��d�z�`V@�Z�[A�����b>�3;��0j%~���J�/�+�xf\��3R��JPo�MIOfb�0Y�ib��2\����s�T�o�V
|�kM�+�(�hE�.Fv�9��J�zA��k��|q(\����]a��|3���lg&N=�gE|Q��i���P4qm1�v��t�g*�d��
�w��������3�G�d�f
��'�P��*V�Dz-[�1���&Cg�HhL��������$f���L	�������VUA�_n�O��y�<y���k�
v���jZ�21�>l6�ga=�7X *I�%Gk���=���Y�/�>Q����!~���y����:~�)V���D�*UZ�]>Q�T��m�H�#��P p�
W�w��
�������^k��	��������a�vj���
�=���b5H�5W����_	Z����3��������T�}���(�	�����3�����������fJ���A�~]e���h�&���~�sr�J�������J��������F��)�+S�7�
��:~���NC�/{XL�h�{���!�W���r
?���C�aOL�P�����i��]���<Gw�]�m~Q��>���8�>������6d�������)��u�-�s�_����C+�����Y�������FE��0���	���&�o0�W�tJs&|&a�&�h���%���Fm��\��+3�6�x�Re��[���:�(15�����	��|���p6�Q��+l1�?3�7a�n�pm�+l��b�j8[����m[�9x��{~����V�i� �}P�d	�[�<�G2�L
����L�YbR������?lO�Z�����)�������7������C[�����Ma����5S�����W>�=[V�����,�<�7S����@������Q�X��4��>����G�����DH����~�YY)`�����u���M���1L/�W�~14��4��u�����Y^��/+U�������F�)�
���O ��VE=n��5��� ~ �J�l[j���������O��s��7���� ��&8� J���To�Z����l[T��p���7�|�}"����x�*��`kn\���J�����-U;L�mXC���{`h�k�>z�o�)��Q��]�����oP;O��+��EC��S�W	���J��r?3���a�*��y�K�>Y�a�v��%������l���g,�"����(;���H`�\�aw���0gN�-�x�d�-�:1������.4����'�	�G�z������Yhe(����T�o0e�;��g���B!t�~�����!�330g��.T�C����ruB����������{�d�^���K��qWTd?5���lv;��{v;�}�g
���0��2���Yf�v��L��sL��)A�h��s0�&��q�P���?��3,����	�x
�3��l������b��s�/����4����T�d�L�|�S����Ri�C��)�C�������+�f������}�1��K{�V�f�������K%��X�Pdcq3��L%�t�������C$3G����p�H�<1�f���'���� ���-�C���%-o����<�X�137c���K��D���T",���X�H����bBu��,�X�2S�b�v��h1�c0�����P�����bx2w4��U|�h���G6F����2qi����s�����d�������q�)VI��xd��Yj2n���LPOt�3p���h����5���l#8�����P��`Z8���SfD<��g���c]M4������!�)�� ��EU�:����N�L+a�$N-uw���]��b�<����a��f�3Q 0$���?��������m�@G�9���Ma��O*�O�v�d}�p �:m�I�����s;>�.����	Ezj�� S�"=�A��JR��v�&-�I�t���T����6�T����!:��>J7S 8X�jm\�=4�D�`/\�Z���,��L��]�.r��X}�D-LI�kR_��4�B��\S=�%Z(I���jh��$���d*��,�M��m�:Wh����IEZ�����t�@�q;�-�D��|s�M��'�I�)�t��1���I�5q&�����{�8�L�P��U$�wR�M�a����f�u]�vm�J���a���wv-W�\'��.D��3:M�o��U��usnr��{�'������.����=~yO[~���)��|�>�s��<�������������Es���	��Y�����U�p����G���\�3�as^�s>-��!���3� ��P�s#x�
���gW�U�o'���g-iKY,�d�����-aN:�Z������/<��?g�LU�E�o�D)�s��}��	��4�QOi�U�p�~��5��*^ev�"�&GsSIs#2����zh�1\�t+0>+
��(Kia8+2�l4�X�����F��T���d�\T���}��[���Y����wFI�U�B%��7Z#[��`el��S���W�3��(���*a���m9Q�B���>���ei�4����M1���i������#�������#g8��)�6	��8m{����I���N��2}�
';36�h��#������P�h>a�<��xcf��q<������X���`#v����#Mo�����4~���3�e��*>�q�	��!�w�~lJ3�=��K��"B�XE�b��a�Y���ac1_#O���n�%)�Z1���\�	�K/�/c����%��;���f�7�}���aC���������-�������:F�A�:
����`Z"���~��2^&�Diy��Y> .k@���;[.n��a6'8�g�PXnC�C{��.�R��'t�O�4�bl��,`-�y��J�<��
q�G���_�iOX)�4^��%��R9�X9��0���CU�7��B���o��#�;7�2�j���������*�B}�����Q�H0�w���V����fs3���iNwsK_����B����5� �Z���vL�S�N�=_\��B9xU�Z(��"�A�(�.<�/��7��Il��cbL���91�p��C��ys��%����
�6g�&<y����
�	���11
��Z��!�gF��L"`ea�3F�j�Ol�����h�.�	;:���b���-2)cv�D�9wu�yo��)��~�d~b�IC;�G�;��!���:�9iGF�4'�9�w%lF���~��*LH���4�C���a�	i?l�	`��gO,9f�`��6
`�Gl�,�OJ�/7`R��5��<������RI��T��y�(����
��f|�f�;��JS�\����4�s�����f��2;u��'��R��y��pb�1C(S�������m���,:c��	X�Y'�vfa���q����_3Kc"���I�8�H��	B�_��"���8��-va'`�F��>Gn�`L+��<Y ?��
�0����1��L$bQf�,���q���;��$��7%)�23�.���Yly�y�+�c_dZ� ���>�7�[���Q�����$��������L���������_UE������3jh���i?�Yi&v[���Y�����~Q��]�U���o�0($DRg���;Nd����C]���94�XO�U��������D�"�������u���v��$G���",j��mM���i����eN��,����F��������F�6���V2�P�Y����e4#|}b���������D��3� {���E���X�����	�n��l��j�����m�"A��P�1u��8�����fb�J��@z��*���J�\���kR��w5b��3����~�N���8o{
$-QF"N�k����0]�������"]W��K����(]���qU�f��9��8�Rr^e�y����Vl\�R�*��^f\e�q�K�k,0�-��k(�g]��kv
 �iP��t�gO��X
�������_�?�����=�L~�������O-WH���������~��������?��YiMr��C�?G��������?�����}n�\����������dn�����?o?�������������?��<�!��)�����DR{���s�_�`=���XS�����@=�5;���fpb�b��J8c��R�TB���BV&�#�B��#�dZ;]�������������o����oA��q�X��H��%B���|�'�~����-:ph�N0�5���j������B�T��X�j��IP
��IL�M���K51"^�+!O��i��g����Q�
D�z�����0&���g �[".��d�2�%���.��n{��8-Z�%UG�S����B3-I��G?��z���('Y�����x�J����)q�Jr��e�pF?���fL�`���9��*#X#Q�HH�4�!�-eda�!�����`�
��PGW=��2�t�?��b�*��UV���o��n �1�]���k/K�i��������NkH{H`������c�V���JS�"������o2�m�'���[p����+1O�\�������*1-��c�?�+d�S�nJ.��v!2�y�74�mo,�F��KD�K�n����o~A"���@�O�N��L��\���h�}��'G�����F]��<�F�u]����T/��d��L�t�v��R������z�Y�1�_$frI������,��
PT�����Ds�o��^�����Sz+35���^��H���Y�����7OEz�yZ�22������u��:�v��3y�hrk���s��X��q��p���
�//�L�������"
OE��PkV�6-��T���'mTo#X����eU1������T��v�0���2�3nY�/����?J��
�r�f^���jxw���F�-4d.�!�s���.�6�'�]�y]1�X����A�C�������gT&�z/�
��w%�D��N��I-v2����x�	��G=�l��5�� ���M�"�Df3�*$����{6+�o���.s�
!�S���B���5\����X�W��"6��:Fv�Bh�lHC�eL����7��'����
U56tYD����"Zq���}�t�������r�i'������x���nP���t�����	�.L�j�]=,>��hu�����73|�v�q������+�`|��K%$b^�Qo:9Js� 8������HSB����l����Y�#nSLP��)��k�1d�2#X-'�/�[��#x��jZ]������C��aw������Xw<
��h����u��	��d']�[�.S�i�wa>�0����������!K������4�p@�7��~W����nl�������d�3�>|�gV"�IO��<#Q�`�D@]f�)��
�9%����������=���4'��qHU�7q���}��������-K������
��Fp?R�k�����y����q7g+�@����#��4%4z�d��{�C�6s�0md����&�H�Ew���D����'cz���|�!\E_ ��BD�\>=�p�g3�����H��f�(S�|��R���4'�u\�����4���hA�>�*��k��������B�$�q�>�����0��n
����&z"��g�W�]>&��i���<}�PL���Q�����O*���2��^��9\��lk������'j�9v��3��~��U��9|�D^sf7���^��0E��.�����C-�0���H���V����9�W�D���qcy���r�.�>���f�l���������^"�2'���0#	5����{a�~���g�s?6��4YA�
2��
i81���@YO�n��<��hjg�9� ��Q8���PNIT�0I���IF"sA���i#��m��=xc�W��1�\���'W�`�#<����5C������~&CY���7G1Y�j�[����9���S%`M����5�(&��?!&�CJ��N�������0j�2��\���m}�-�YN���:>1��+�D��)��re������3�K��c&.3������*/
JV����2I��n�C�v�cD���
lc���L��_�-�1c����1>�)W�q W�b\�<\����-|B+#i���8���y��DJ�As�`i�AhhA�j�P�?Sg>3�H��f4��ge�3|aR��U)��2�Xy������w���3�t����l�t��7MqZ�T<G�Bh�m�DnY~��=+��hE���l��3���k�h�%�=!�,L�����M��;C-:v��?�7����j�r����h����<��p�t�$���m
Z�����B����9��V~�'������������P���;���)��DM�N�}>����+��\���+�\����������2/���0�G)Tg!�zXJu�L�/���TN!����f`��%�������1c�����h��R3t�f��C���v��w��w���5Y�|�Z��6Q	��0�1���[�%"�d������F"_��5u.V-�6g�X�8���oFj��5��4t����}�G�u�s�1�\X	��(����J�����D8�a��8�FLb����b���/�U/��|����BLd�F��Vr����B����C���
�+�rK��%��Z��Z�=�41���
[�7�yh��^MB �n�q8�<��.L�b�)����D`�@���{����T����z�W�fF����J��m0���x~|e�l����{����.���*gp�r��iN�qPs#4~��AV&0$��������Q�y'�������L�*��R�^W	���#�|���I�i���-�h\��:Ga��-���
|@Y�D��h�1��BaD���m��jZU��h�`�<�u����G�R{
6�j�|l�q#������m/�x8w�!B�3y�X��t�c ��x8�(Xw��=W���#������=��>XD�1~WFd����O&}�7#��L���.o���V��JPp���I���2~�l����xqd�����{~W�`��R��/�/m�����!��������T��������4�:���+�x�q�H�J�*��������#��<Z��_�� 3�r�����b$3\"c�Yk��+���Ni�������!���4W�l��~1��Xg���XCa�)n�>UB��I��7p��'nm�[6�$��?)�����X��6+~k1����
1ww_��������]����.Z���D~�����n2��HV����y�)HD=�e�95��B�r4Il!�D����8�P�xEe�|��.�knX����Y������-5���WB����O���I�����Z2�]�-��-DC	1���P��
��,�0���1���i[9�^IH+pqD�_��8�5�*LKM�5�$�<p��\������hVB��vx��K�m�;���iN	Qk��n������z�#��>�I������]�s�PaA��4�����3���	�E� ���z�R�h��t�{"E��2�l������������9O@<1�>�M>�p�@�A�/�a&�bM���v�d�i��������������r��P���H(�`���}�l�������u����0\�M������������q����uZ�kq�
��D�h'�I�AVJ	N2�|�@������b�zF�����n2�^)\f������s���/~e�
q�W�T�=�=(��J_
�;��G]9%LD5���p�4ojR�.�U��u��X_����������b�X!�(3�o�N�XdT���U�e�2�J�f�[��pX�I!���=��J�`]j!�E��R�6T�����i
�l�].?��:�;w������R�x������[�7�B�3��W��mK�����b����F��K�f����o���,��>���8m$�K��n�Av�
q=Qw�����R���.����/
�hK� 6:����6��=�7jG��Z���L���2��b2F7��������v���||_��\��$������_�3-^(�|"Q��u�-�K+������y�kT��'I����b�[�3����2�2�U&0��X��,�
����9iH2�}�`na#Zt�c�����(/�8{
b�0��|������E��������]w�
����������a�����EE�v�:�8?��W[�>�;z/��������$l]d?9_>a��_��(�4CZ�I���ibX������(<��41�n��`���J#��(�+�:���A����y��x�>��at"���F��g������O���q�fxMCr�����Dej$��"��w\�{���\a�>�k�����h�?�]3����+� =�����A�)������9y�pee*�k�#�i+#��B�<�A���(B��/��~r"��K��������(t�+�4~H�MVF���&�rYe�-'�kX�M<��@��t���0n��$�������PbA��<�%�F��/�aD`@��&Z�W�&�y��dS@�99����p��>X-��#�]	i1�u_�G:��4�������S�Xz���!�V��e��"0�_��V����
�Q��A�pqz����<���zPt#�z=�%�������A�/�Vn���x{�%�[���+�
qv'��`/�7d����w�q���iX���{@����]�����f�E�����~W*��e H/-F��������L���3B�O$����H~"��*�����;�b1��L�RqB6��tXb$���������F�]��a�J���.Vo(��M�sC�Q�����d���4����mllN�1\�[��X\D/�����i0��Rq7E�B<��J�|�ws�l���[�'��z�oU���K���s-u!0����Cz"��R�?���'�^�����s��I��b��qx�1��0�)��7�>�N�2w4$�*�B��I0�I�R(�gX,����Yq?��a�R4(4��Sj���`����������^�������cl��#M82��n�X�`:�l���F����������)��a
�K.����~�m��n����H�7�n��o2�)�����P,)��1nl%P��?���H
ro�O�2�R�c�E�J���p�z|������+�)���������2�U�^�������6�����.[�\]�D��	_R+�k�2(��=N�����k�qhK���h�e*��S�}sic����G��C��p�7�K���9�aq����
|�$O����W���q��L������C������2�y���fG�X �Lk��1���>f���%��IF"��6wt��b-�E��2Qy'��a���nN�[n�}$�����a�Z��0�U]�V����@M�)}t�?��!��O��q������wg@��(g�X�@M�p��O	U]�������g����I�D��I�3xU���txMm�����
a��:���>Pkd��H�*��H�����Q
L8Z�V���%/�3���2����!�8B�9�����g���Oh["
q"�\&�� ��xv>�0�'��3,�J�6��+�	����� ��S	B��q�y�s�M�(���MG'���'��N|0.���]	�H:yf��g:�H���%�x���0� 1
�f��:2����L������cy	���J�&��t�W�	��c��je3��o�s`��"yj��l]�
a>5�������_@��	��]�����k�����R,�:��]y�e�qSG����Q&3K�_�c+m.)�����`~|��p�,bfehb�Pp$��>���L`,��,������|����3���
�IEz�;���D*�����t���
�(`���9&��1�v8��R����9�����D(�W�}��@?���x�3���?@��)�|�e^��w���j+Q�'�v�B�J�~�\&T��
��������p<-7�&�y��$d�>3���!��1!.�^l�X��>P�L8|"`S{������\2����b���^*1��+[��"3�2 �5�:���+�X<�/V�c�s!b�z���G���3����7��v���y��c�L+5�Q����ie�)<�.�x�
7���������������3-�d&���c�j�NI�L����[�UT�~�8r}^�s�T�X<���?����p� �����}+�f����u6/'�R�,�@�����6(6��<M��*}�sf�aeZ!T�,u�b�"
��>��O;�k
�_�<�;���}bSi��'~0e��_��u���D����2���\���p,�hjr����ui�#������+n$�V�m]Ko�}q�����>��#�/�b9](M��^�`���1����7w��r&c�p��Ql�o�U��
'����C/w+�:���FWe���������� y��Gvs�;�{��-���d�m9����J�YL��W����2�a�{�����������J4�9�������=.���L5%��U�T�UG�~r���<z�4��~�w�L�9��A>�n���1���xA��-���8u:��J)d����'�;U7e������^A�j�2�#��4�U7-�QMv�-8<�r�[�w`���e�p�3����	|�gaI��q��`HS>�Du��Q�������q�>m�M��p������zft*��u�/��K?p��D3&:��V���0_����^��[L�!&�P����g2:{�\�b��)��xp*>C,^���(l>2��/<A�K�%&��iP������u��v�I��
�ec���Q;�%���0�x!P$��:"I
����J.��)L.$�"b��n�M�2��yI�t�`\$X��;��`0V���y4!�9���2���'
Z6����)����} G��Q<@��D��3��~���
�6��.���t8��=������� 
���$�����0����������5�yy�,���@����!�����78��U��S�	,�8����� %��nFT%��1��������O=�������
x?�}FU�VX"���1��h�|��u*�?����z�����5o�}$���qS��*��������~1�1�S�#$�wa2V��?��P�R�7�L�g��1HeZ�z@R��c�0�t�m:����ld ~F#�Gb��4�rA�#*��bbO����N
�?�C�����9(�����:v��/F+�]cp�"?b�?qF������0M�,�
�u����NC��mw,b@7U}/�y��	�N���j�1b���w�bs�fJi�g1':����P�rc#7lj��D�q�f���/$8���g��)�Ww��H��b��#�@�z��eh��\'��B$�K�o�2����|�Am�p��])nj�Q�������ra�h%������as����wN>�5}��R!��/���K��QGIg�6`<�4����P��=T�V�cn�����U���Q��n���L��,�������Z�����2Z�V��9xY+?��V�_Y+�5k����X��������_?������?����_m�~�7�~=�yY��sw�,���m������Y~���=_�{���|�[�V��9����
����� =k�gK:=
��3O7vx>����a�>�ah�LR�2�t����%�������&�R7�T�	%k���[�/�9��&K��0DQ�Z���3r������`bo���j��B�^C�t�^:�EX�t��b7�*7&*c�nz��`��7��hW7�v�����C��*���$��;?�@��������9�]�6�Q��T�i"�FuM�s[����H~3M��3��������S)t�,����M<RN�Z�����������@�AG���6/P�Ft1,�)G
�3���Y�"'�x������8*���<�H�&L�%		,�h��M:KC�dl��P,	#������U�N�X �:k�����	���[!�VN�agE&$��`���+�-t
�)\��N!��W0Q3�rj�JS)	��e�����L��|�����uJ��u��:�-�5�JnI<���]����U��r�Q�d�b�R&�O�Q� ��i
��=��WGh�S�I6�)�T)'bhR��p��N)X��j@W+�b9��q�b9Vv"��k�����P����|�qY�h:_s�����#B�g��3
����d�&�L����������3S��gB��f��I�X��\�l�Z�T��+�%�a������\�,H�~�����V��.�I��atk�3	
�P��K�\����&cA"#�4�inM���������>��
�R(�T�����TM�6�^����4l2h���x�t|S5�f��"���P��m
��/
������o������*`Orq���%f��X�e�� �=Gm��I�$�G��l�F�I�l�o��(��������QXU�����X�}�]�n?�fXqY7L8R������bu���5��u�@��F�P=s"�������i���}�����j&�IE�@[��hP�����
F��E�B&7���,�d��b�����������{��_�
�j�t�m�U�����,9a�aj�P.���VC�������O�
.fK�m�E�qi��ht���O.����k���E�-x��WV�!�N�b��FV a��+-Kd������������&�~��_4��������uz>%�����Q$��b�j(>=#�r6-�``M�'�2r�aU�)�[�����B�zOH�V'�`�Z5a���&���>_*�d�?�����q=��Rd��'Q���������@Hw���E�NQ2����%p�0*��*e=ut]�I���|x����jHX_4`n�`&��c���
�JG[�n�\`���9'��`�3�?^����i��0���Z���;\]d�>=�k�f�������H��V��:)�h��\��R���OB��&����}:F�}`!�o&y�.�V��E+���!����Q��%����qG���a�P���B�T�,NG����n,/��60c-�����Zxf����n���3�_9�T�'{��=�'�� ����{������:K�����-�'@+�Y�"T
�����2�|[Ra�)/�d���������,�	j&0y���|��
�p�vM����N��A�\����)7j��QKOnv�X�J��2�6*�����>a�_��n�M]Mb�Rn$Tr.�U@wrQ����	h4D���3�L�#��M��������4����8M��_��a��������0c��Opa�vs7���y�~��i��2���r~��������!Ot{�'�^,��X��@��P�+R���P,f�@��2gC���T,H��r�0����
=|���h���?�P���6XT�v%��4��:�]���L-��K,le�H)
���u������#n�M�O-r��q3})6��L��Y�}�OB���?�����]�)�v�^�����/v8+��� s�S��H-������f����>��{z*�@V����Q�9��������{�I,��'LZ�-o�v�?�B�a�vtZ��=���O�)��ji3F�h>ZiOK�@�C��l�b����@I���-��@��q��P�L���`bi:�[�4�����2,XP���k>���vqr�������}k�-j&��j� �
0����*��W�=�v26`E�
8��BsX������l�6��
|���??������q��P����3k�������k�#�cb�����C�
���F���7��eB�f�l~	Z�9XR���
E-.����1wQ
	�/R��dS�~p���_��S`��9o��w���1�G2:^����O��x8h
���#���`X4	+��C��5	N���������b##--���!Hv��ouzC'(���������<4�����V`MM�
��0�=s�$hY,�
���c��hd�lm|��������T��0��RP�!L�;�j�gew��T�q������dv�W���^p��0{��W"�IK,/>����l1��M6o��>��|�������bd���i`:����X�v88�S��i!&�l�g`x�pO.ulb��^G�iYP���&�f+��n�~j;���x!����!� �[	�����f}t���Y��r���O.�=�<zT0R���L�bh�t)�
Q���O.���V,���d����V��\'�Ns���gTG����V�$/Fm�����N@�3�>#���m!&bfRq`���|CxE���=i�M��3�Z�Z�18��f}���h����$F��8��<.�n-�,k�n�@������H���q�����I�o;����o���D
E�5��=p��]����9���X�1�vtf�bv�%�L\�@r��:��w!��T�����3!��K�`���d9�������{DVl�,pr#js�YR�
�2�5���T��8�������+��p�q2��.��f7d3���c��,�ODD'�9��L�Y�4�O�2�r]��&7h!��a�B�\�Q��	��-�"��H���+s��a�dD#��O�@)���v�c�aS(��'Q~gQ+�Y���c�Oo����0�R����
K���4B��[�\���o�])T�hs�M+pK;'�h.�~���&M����B���]C�<�l}��]�!D���>���sX��v/G<��v��X��<��v7�
�p�o94+��f����8!����l�� �����n�+	�n+P&	�����8�I�:L��L��?>�*�	
�*,�F�Xg�?��g!���
���EF42H8��������q���X~�+a�����_��W�,��Ky�NO�t�L,�3�z������d|GM��L�����y�ao���p8=��cC���E��"Ap-���^����$�����J/&V\�"%NC�������#C��.zK�-J��|�y�wKf����V������'Sw��|���v�IfCD&bivCZg�G����9w�!1�Cd5t�F#���t�K�����f��y�pfC���4	�$��N�3t����5��2
Tw:������E,V�p�R[���w���`E��N5*�~�
�i-��	�I=s�3��<����8���J���)�v�wa �X�?�:�&��.}�Z&�h�O���Mu�6U��� R��I���
L�~3=�W���Bwq���-��O��n�L����>\�.~y�t�c;>.�U����IT���l ��������{�&�X�V	����_��HZ��H�~+��lJXS��[�Gc�?������V�0�A�1�70�����6d����g�����3���q�4�y�@Q��j;-%��%O#�	�w��;N����
2�&��zKZ�	�R��G��g��S�Xo�f��&�����qJ�X�N���+�<�{�X�y���J(������#�H
��>�����<����c8�p(��6�}�6���fh�n�nLxs����)��!��V�9=���Y����6��V��@J�F����9���W�i%�������7rf�bg�����������}:�&w���
*xz�+�0�������c�L��L��8�;J����e���{
?-�4NX�DXj���g�#����d�B$�Y����Vy����{At-6J}b'�����?���B����pJ2�a�
"��H�X_���ah�H�w��Am�p�V6����V�6��zP�V�N����p�� ��10�!]C��$�^�����n�el��1�D����]�`
��Q�c�B���N����/6������OV����p��#����+>V�m �D���2�rT��G^�����C'���~Tj[��
�_��u����������'9(��~WB��X �����R���Y���fd#��PL����'cL��q���v'������8�|~,���?�zH~����/*���\�����EEqq�������/��q���.u#�_T��/*���_��(]����\��b��\C@qq�5������,>�EEq��5�r���\}@q���������JP��=m�� �i��� ��*v(]���qUQ�z�|UQ�����*N���R�})�QJu,��t�|UQ��s5�����R�Cvl�UE����UEq��2������/e��{s�����u���(:���(��.������*	(���(.�������;%�Pj����^u_$�(�t,��K��er�5��v;JqE|;JW{������oG�����Q\
e|���q��~��qV�~��q��~��qV�~�����\���^������*trV�~u�uZ�v���Z���w����Y��k�z������_��/�X�U���~V�*��Y%���g��2��U���~VY*�Y%���g��2��U���~V*��Y%���g��2��Uz��~V�)�Y%���g��2��Uj�h~V�)��Y%���g��4z�Pn�Lc��v-�D��Z�c(��i�������0�r���m�~�x_J|�RK���C�_�����R�c)s�c(��i����5A)s_��K��Rfy�������L�7����t�0p}��A���-�	�g�5�p���=76�;~�5B�u���B$(����0��$�d����"P�V ��+X�B�K�>DgJ+���+����?�w���c��do�=�
���X)�w���i	I;�����,�f�R@$
m�\�����D���LN�D��#������J$��r��A�,�J�|�x�q�J���w������]��[���c���E������)���A���#�����pC��O�1<r�05�����;v
D0����<�P�\h_������1X��>iv��c��R$�R t�\�����{+v&8����e: ����A=c��#�����b�����0aG��1/��u�wa�kwmtQ�/��w�I������f�n2`JhG4-�&��s��/p��	3���|��P�qp��2;{�(�sS�����>)'��H_��q�p!:����A��k��D�F2�$
l^��AN�S����v}����0n�%�+�����+79���U'���	�T%&H$�
Pf�����n ��t
�;|WB����G�
�ZT���N�����RWf��L���wl{$���g���90�X�X���hl�N+E���)��	9�����H:�����P:�u��f"A�\��a��1z�$�tpln'�r�B@��D�������l*��#���S�	$4h8�tY��CrV�Dt�'���'�6<_^M�����������b���uK���x�t��N��t�/#��T��	2VDw1)!|W����C���-�`�����/{�A'�be�-Z78�O-8!5R��+p���A��+k����"�&�v�q�E-#+�9�J�4��2�2�6��c�����0�Jv�D�0�lq������-=:�{O��k�\�P��H���9n$���U���������lM��'7���g�-��.�B(��p8y�f��x,M�Bt$�8�Ot���5��
��>��_�N>lJD�o��]�����YFG/e��,;���
�����HPs�y"m�j[�a��M����]�7c��M_���bX8���7�������a�����_��$E�b�&�r`����`�=������M�� .��J������e�C�����7��T\��;s���[G�z�BP�K]GB��2�Sj�H���*��o��24'�S�kZ���k��	p4C���R��#k7�����G���Lsb��n!8�$���s�c�E�p��� l��k{��}	{Yn>�%��� Z�A�"���
A������1��������4 :��
�pn`:�0�d%TohlV�r���!}�k�`�(�.�����|���=CDx�������K&��$|h���Z��C�		[�+A�D�|��A���_G�����b�.m�F"]FS_��[�������#���0?��������g��2�>Y7��
:�Bc�&���D�}y8z+��8��!������V��|�
����Zl����~j��0I<���OZsG�x&:�`�E�#��@TI%���lgs���>�]�
|���Btd(�<VI�nv�������������v��Y���	(��&��	�D,��p�8�E��J+!�W��!T��l%�>� �x��pU�Pe������o�
����hG�Yh������[8;�u���w�0�
!�� fO-��2��o!X��q'��y�+�����"�<�w!�u"^����/�M@�5 -
�����a�R�;��`�}Z=�N�JP��v(�T�M���V��Bh�#��a25�P�&�	w��2�G���i��  �������0M�Bt������p/�a�Xf������"-� ��YP��������M�a�o��U�%/�p�7s
d��X��k_��V	���{���h_�`��@��}��� 8RnM��u���V�46
W-��A�,kW�Q�tZ��\^m6i`�N�&��+V_���%�l^����5O/���w�`����Jgn=�.�M�Tq��O�|M^��cr[�B8��X������S]h��D�V�5�s��<#�V�^Z}�6M��ae.8���Q�,p�112L���� @��?	��X�9�x��<�'�6]'O�u��5�����@���l�d����������\I��V$��<F����E���pD>TW��NZ#�h����4!���Uqx��}=��xb%��Y��q:t��F���(�q��Ez��/�W�h�LhC"������j����U�$~��%?txV|�l����d�`�����B�\���DM�c3n?�u7?�3��?���5���yZ�S+�2������T��`5�{�c)�1����A8T�~�.>|����(�B��U�P�<�����0���[�^w\X���t��A\�sP�w��[�nNl�Y�aB�!�1.U�7�J���U(���
��m���7H���
�q�O���������]�'W&04�`��1A4gv�z��<��[�u����c��E���\I�*{+�:-I�7=�f2�S��a�Z�se����SAK*��ZAw����s!�[V������~1;U$����lJ�-��}3-����+\���5q�2]E��#g����:OM� �B%�^�U�ax�F�����n�o���|WB >����C�Z>cc45�pk)�M��+����ul@���xh\�[\T�6{��Y-���u����w��3�Ub�ve��b&�k��B;��:W�Im�xk
R�;���r�[���u��E"��t�J����]�ROF������g"2mq��`3D�m60",�iN�[4&�?�f����s�Q
^���F�����bCs�'�.�J�2��Z*i���!�����H�<������{O�[�$��
�j��Z�h��}>m&����.�*���~F9��D�9%��{�$�88�\v|a����[�0c���F�I��a|�����HDfT�E��'���D�������uq��4��?���^��N/�|H���#Wy�����'�p@QLx'~��F�G�vz�����2�O=�+�+����}dOg�:�9n�u��-�����Ex[Ee&��((�;��dF�F	�X�u��[���p�5���1��8��'��!����0�.8��Pw�=�������$��q��A	�C��PW�}��p��0���;��7G3n��nT��b^�����D0�0��99-��C����0-I,����ld��"1*�0wo��?������h-��~�n�$~W�Q������u�JC�Oae�S��`8N5��D%��#��%�#����?`-��Mt!j@ <Nv~>7����';�;
�%��[tm��G�g *�Q
�~�f��������~�� l�#�� l���������i~9.�$z��XA�_�>n#��+����N:�8Y��)�;9�L[&��$���!�	�g��o����>hU��������2��2���
������xh;����z����&��Gn���J�aS����6A!�����	sv��f-�]	�6�� ���i����97�����y4���i,�IV�E�~�[�#��V��7��J�hX�m���H6��9x��O�>�2���G����2��x�M�2n��yw�um�����:�1s����kjj���R"��>�NZb"q�+�������<S#�T�Z�r���"\S�V����������3[}S-��k&0=T�D�7^�
�7^����5��+|��#�D���g�,�&bM=���@!Zjj��I����-�!FN����jsP,�z���>�7T��|��E���!Bp����)%�Q�A}�{j��E�{
LsJ���#AsOU" �S���T���y�������rPU_���n�:q��~z����0
��C:�uj5Oh*�}	�������O�A�0*%�_=TFf�Q��r9����%��"����SD�0��Q$]�CD�t�E�`������430�V���U�AU��gI9#�+��<e\�"���!���2�n����>5�B���@Lli�}Juo����������v�H������tOw:���� xr�����B4?���7;�LsJS��:<r�h���Xdk�5�����v�;Kk����k�\�0�@��n+.gV��H� �mBp�b�UB ���-�n��'�������>�2��g&;n!�Tg���$)��>�w�J���ji.s�q���;�`��p��	��'
�����nWF�:�bb���v!�����6A�mI4c�
��6������6'��-&A��mE�/����>����+!���7��A���kT��6���4,S#ez|1t��5|y��L`="O��7w��1B�
���$�i�i���'f���ve���~�`q�<���-�!c-���
��0s��%��`��]�oJ�/�[�H
��8��[T����@}f��B�d��*���M�(���94�t6 *!��3����W&�����-lv+T0(�m'������Te(����|��f��B��N:P���9T��
����3�c���_Io	��/�����`�h�T�@Bsx`���5~����j�[c�S��Z�m����7:�q?�	������B<p�I��{����Qm��h�&�}d�6p�`p�.�����{�V���/Y���W��/]�C��?X��es����J�+�[LpR���u���NOx�<it0�����+�tG+�����;��0�w��������������]Y�}l 5�.D��=����Y�J��}Zu7�f&k�=@�Z����
��-�`N��a}p�^��{�p�!��JT����\�<�������{������o4��J�w���G�m�t'1��LnQ6�NkU��X����	�>x�w���.�go+�J��C�q����t
��m6�@��[�!KO�a��>�������_�bx8�
i���������A9�3	�o}�%��+�|����l��=��Dh���7qD���}����=}�7��?���;�����`��O�"���������a~��pv��U��CC3�������|���a�o��jP���S����XO��i=�]�O��$8��;����p�����e���d��z{���*�R�>u�2s�Zq|3f�kE������&�����2�1�h�dbB�pB���?XpQ	�<4 �u���%���p�{�� �7h�,���p5��_���6!�T�3 �����j�0:�`����Y�h("�����D0�VF*5p��(�q�mj�(\��cy��5:FwY�$	�����A��bG��2�����,��(�v��Z������w����z����<�0y�x����C�Ah~�]o+�F���3��l
�y"��h
 3(v������l;
���7��?6���VF�>
t��`�
�f���v(�]�����������&U�|�)�J��T�]�=]�b	�W���.�J�.�����Jd�c�E���E2�)!DV�����pi��w���9�����x�*���Mx�y���X&"a�`��G���[����c�|��P7��^c�Jn�����3AJZ%�c8��"�Bn*!�#���Ra:En��D)������q���6�.�\�Ah	��*����������25����\�����`A��Wa��<�1��JT��u1~h`N��4������A6DUB�$V�uc��;�RL�	9�@��a��7��v ��x�u����a<�R��u���lA`U�+z
�������z����P�����7�+�Vqtit(}O%�3��`.�U,+��
nu�W_��l.3��(����9kn�-���J�����,1+��S��8z�^��>L���Y�c�TJK������j��X��/����O>�G�&U3�W�ZG���0�P����,Fpec6#����A��4��P����#W,����G�4��*�j�,Z�"3X
��T���	�������*!P������5��u�"BWV�e�!�<���8a�q{y*#Bn��`8������V�Dm�~]�,P�����C�V9�O�me����
]����H����2�j!�V���EJ�`���+�����!Pmu�7�\�jF����9�h�N�����AK��y]Q�tG$���bTO7����9#�P��������W����7X����0�A3�T�R��5�m	���'����W��]�A��1r��-D�U<����G�-Be�E�p��R������9������O�j0C���m�o��5��t-������7q��
Np�b��#0mo<M���������1�[�����������i�0�
N��W��]�*����[���1KjcbW3����[.����	nx��o.D�������|�+x�XG{{��]���7����M����V�{��U"����<�}N��D�q������
� hR��6Nl��l�����V��2Qa~�
��P>�L�p�H��������F����O������J��U�1���V!��
��-q}g�����0C��v�<��h��u��Q�sK�D[���AJ������i�eP�$�!n
��h}����4F�Y��s��R��\�6�[���Vu��pU����c��-�"�x�au�n�V��Tw������q� l��C<3C=�Pf��T'�1j����
�b��1
]��D:l���m������l����9xl��|��LO�#a�L�D���+#���a���h���):_�X��Q��6��K���w�:w����K��:�B�j��������T'��ED���	�8�#y�A��!�����4���	fwy���*�u�I'�F%-�����nA)8��#�'0���� ljJYihMk�D��k��	Gq{�(5�����KC��+�f�(�$�@��3����
���@�]��$t�������)�P{�y;3���!��8�4]���������n��*��J�s���Y�we�N���h�j�w% �O<�5�~#c��Jhw���kg�����>�����a]�����g���Cf0�o���+���9��|a�2������x1	C�rc�B���CY��>�u�K���%�������0:�:�q�_���Y& ���~�4E��������@t���@��x�����y�?6j��.9o��T���:ts�1�d>��=����V���D���f��y�(��L���B��F����lH	����<=�x!�����y����-����bk8
�*\*�_��W,���4���R�bB����(5>��(u������DB��Lc1�D�W��r�.�H�U��4������?������Qmjnar|��P�����Xp��q�����������s�x�'Et����Z�*ztp>I�����'hizs{������	|����&�{��sw���cM�u���M]k�L=�hw{43����0�:�77
�1B��@���6������c�o�@����L>����ol4C��r�B�~���6t�M�:���%l�p�c���'v�f�+�m���q�u��L�Q$L�i�G��%F�+]3����O��'���d95i�fQ�;h(��6�@�Y,/�e�7�=�_!j�z�����5���k�|������)����Y�UB ������0-��o���a���F���k�������@bXs�R���-T��ap�*�xw�h�No����o``
�W�����
���R�oS2O���I�UF��@�L�}�(���������<�R�����{����0�um�U�����&0U��A�s���T�/��>)�YT��t��M6�K������8
��+���$
R9�������
!-�~h�o�e��2*6O�~&�
l{���['H2
���qL>�@���|CG��p����>b.���16��X|j���$Lw��������*ijt����B�;�7�<�����<�R6cf�	�1>���3#l"�����&#�����/>�J(1,�M@���-S>��?��	��H�����xt��b0�0ij?�x��G�\L?��* 1�0&����GG�4� c���9L6��V��B�O2�����)�bxx �y��A0/V�gZ�-M?����~�u$<=�q�������+V����4|6
�_�M?2>)�{�~����C�w�����7���9�W��D���	�1��' �P������S�,����
�,�� b��<����,���G�0�����������[��NA�u�y��1�����DbV���\���3�Xz	�{���{6�{al��}<����
a��dP��p%�����q�<��C&:Vmt�#u��������������HZE*��YP����^L8�f2��F""��m���L��	�x��F"��a�+r���)���h���,�kwFM����(�v��%��P{�n���������6�Q.#�C���lBo��:�q�2��6V�3����N��?a�xR�LG�l��������3rtO���3&���9/+2u�^� �$�\�G�d���/�?-�#�������Q�C��� ��F[p� 7���%���<c�h�]�4���tH�91Q���(a�B�hHVe���|���.�6�^���q���Jq�E%~W�3�@��P����Dj��z����P@~���l��cN�G��#	w�-��������/.>F��
�fez����b �{+'4��Obj{��D���c �v�c7�:Wb�3?��@4c�k��0��R�d�����=jq0T�]�InZ&'�;U��w�j�
}�_��b��k�`��vn6�ah\��4'��9�I���]	���	i�}��R2>!M�����3L�1!h�g���������B!��%�gO�����Ii7�'��s"���w�f�.�T�ce�R�QwSY���n�Ii��=��#;�h��4��0>)M�~T�&���evN����
���]Ll�X"dj��21u��N���bb ��P�4��l�I/O�6����y�<i�kA���I	CI�8�0�#)&q��,D�qkI��;�S�1y��d���~0	��z�o�9���$�dbL �Pra�?��q��	����	��;��Y[	qy\��7l�<�[-��EVb�����S���~`��d��s��E�/����M�,b��%�K��*!o��J�2jh��	�����������0�9�+��eA�Y7�;�+��
���LC�q"[[�p8���L��0�R���=/X���T_��s��W��j��V�{��n�� p��W��dl�B�.�j����V�2[�D���c��,��6�|���9�Q!���caB�?�"��V*���f*��]��]g�\������[U��*�����N��0K71�-�N?����=���:"_8T���(l$����1@�V�(�3���"�!$���!m�B����f������G�����m
f�K���#������W��S�fW���c�W�U��W��U�W��3G�:{)�9S��^�{�T�����3�����LE={)�9SA��]N���-]4�W���y�1��`W
y���z�Z��.e�,Dw)�_%�K�<��]�R����{��IX?��?����������Z��c��\
�4~��_~���mr����|}���>���y�G�����?o?����������o���E�
W�~!��%��G�$F���/f�p@%c=�)X-)0N�C[��)n��8\��R	�`��b��Q	�854���[c���u5�$3�������G���:������8'�>���R"�[��1�/E�p�����e^�x���`tx�]�J��N�Bx�!�����HCn=�����x���<AIM�`����ijL6������D�2�d}J��>H�[����e�PE��N�=��	J��{�UL�LsJM�2t��O0��~e"���@��$"��Dr������xn����_#�1q�U������`�k"!%�@pl��0&#���8���i�%�'��-�Q�U�i��/�����U�V������~cdz��
E&��i�.��_���J��2�j��������Jd��D���*`��O`V|MX������E�2��P�d�S~��>������o�a����N����-T�cq�>�jLsj�C���t�.D���D����7d��(%��:/J��w�z�4� ��S�e��V&�������h��7�(�%x�����0�
S5��|���0+�sO���d���c����Vo9+<�����\|'nI��C*#xN$��7\8�H�o�YQ����G�Vf��zU�#!t\��davd���� ��"���y0N�L0�Z����2;��R���|GeO|��<��kD�7`�����|�Lz�f��/��Td��f�h;"�z'n<i��x[�r�2U���b��tOgvzBk���������h�{�I����W
-J{"0�<x�ve��1��^
o�"-�.)���j@;7~Q�n����s%����DI|@���D���aNP-�8>ca����7�Z�����3���Z����5�zR�}ZJ��[�LD���0�-���mQ�-�l�h����2���;���R'r���7,�@
t3��X�W2^�W�w�$�Q��Z<�P�Fv�we����F7t�f�T�����������j!���V7�b����?}T�#���$�����lS�N�dp3����i���A�iE�]���{^wX0���2��p���73|�0�U&F�����f_*!��j��4�{4`�s�)G%���@��qLQ[	-��T���?1AQ"�,��Y��/)?����������b�%d"x��i��f����	=��1�J���V*cM�(�b�Q{WF1�`�LKHY�0�5wV
��� ���|�0�t������1�t	Kla_P��4�
��]W�+����G��/L����_�3�>{�3+l�����#��S�`�D@�+�SD�0LsJ�Q�g#���#�aP�6N:��T��F�M���4Pm4�D�����q]D#����hQSq����]f��6����~��[������L��Li���/fg�����QM&��[�~W"A�[��1<�B	����/�V��*c��	���p8[�}^}�5�E����L�(W��m@3"��+�0��` ��o�5�@30���c�� ��1Ay�Pg�y\��6���8���rB��DO�����*�	����3�3����y�Gz�9�X����O.�k�g{a���g[w��3���'j���3��6�Gf���P]L�0���0�j;�=$uX������[y�~�q~X�����^�[�at|�qcI���r�.����`36k�Dh���B�j�O�^F"����f�L�����4�3����M��6��4L|@��������`��0�2y���tW"�U�e��*�wa��F64HQ'LR�($�.(o��F&��B����8P5	J0��+#�������q�����f]R�����d���O����TF0��Z����)'��*��u����F19��	1!NRr�u��� ���C
S�UF����I�/��2I������a�\Y&*GL������:z� �5��(?��a�|0&S����{^%��R&�dnn�k-:6�2"���J�c���L��_���������?��]�������{��k��e��7�4z�pr�#�N�=H?�UE���'���U���%��(�|���1~��i����Be��f�]�fK;��������8���5
��9�}U�X+��?���?���s�@wM��s���F��A��-�~OZV��'J��0���$����Y����7�w�!H)B�;J��<���\|'M�%��d��c�\�����y�����L����P��GK��g��uXK�r����*���P���Z$����^�5RC�m��A�c�U>��(�}.)Qq^-K���%.'a��w��I�)�U�}�����&�8�7���]��M}�9Uu�f���:��}U��g�W��c���Vi���0�}�������L��{*��Bp�p"X(�@k��WH������\�����II��g,�������F��3Q��R���v�07)XM�y��@�f-o��>Vy�M����v�1�����6KD�����!CED��
�k�Z�Z4�f�\������H����k�Q:�+��+��?p�=>g��\8�}z��[��DJ�n�ID`V��Q�E<�������/F�Uo��|��3������c�ee9�����^�+��������0W�>g�LM,1����]j�����E�����><��.L�f�j��}b`t���h-��OMa��/����x����aw%a`SV-��� 3�O�����{�Y��@��*�sk�SF�)A����f0�������zA��oOt!-y���h��C��E�we\&����k��l"u�FD�4z]/�"����[��h������ ��n��i`&2��&����4QQ���}���43P��.3�j�G�� ��q���C��o{���o|>�{���o����Cs��tL"�3��P�����a���s������0W�����aj�1��y�-L��W����l���2�o>��X<K&T��J�5���WgLd�{���E����g&��0������w�&\�gT������e"��v���B2-��U!?3���D��W[>�b�;p�JA�t�,�i�%�&����NJ�hg.T���o]"��V������`���c���h�3Q��N���T�����kM
p�2W�V�po19��'��Xu�}���i!��3fC��`}�$*�r�$�q���D�I���s�f��,��
O�$J���KV�cO�c��.D����U�(���}D�n��f��G$f��=�*/����2S�2��`en�!�3����j \�a����oe_z��B����N\�0�u6�a,\w��/��G~/=�E�N�t���0fY��/�����rg����o��f��1���c��=��!�	k-���	��y�djf�h����gI�/t���<aG�����U4�����6����^�C%�}6)#�c-W������Po�N�h	Wf��v��������HA	P�
���&x\S�(*�I�&��[�)C�63�P�����=����,c@<1�
�At���7�a&
0��1$�	����Q��D?�������
&d�6�2K(��"��}���U&�Z�� mm�k-@���;��X�
^u{�{�y��������8�2��ea��u��{	�	��1�i��x�>�dcpX�BB�PSg�/��^������}����9n�jm������ZW���b9��a>������ia3'��{�+
%��n1���J*����������'b�R��!���(�{�6��l���;����
�{�����_�V��a�~����&��P�����^���0��.����(��///�f |�vg��UM��CIL�n���,oF��3S����l���
���a�g������N���������S�U*&��*�G8�w]��n��gW���lc���A�|Qh�4,C����C�|���U��~��q�ADXz�w%K�<�NgU��3��#��(w�J��3��+mj��@g���D�T�fB���2�6��>��]��+�yT���5����p�s|&"�����o>����)A��&������n�����\�D�P��_1/��\2�e6%c��=2���������4��-f�47�>�'�g�Z��I����Mk�=�$3v����m�.�Zu�W�C	��i�z�`fT�w���1x��K?��a�T�D�A�g�5���\8^����0l���N
�"���dqg�x�??�)���]��\����Zt%�D���`���q�����Y����%��Z,����D�j�S>���v����� ���n��Gi��N�
�S��'(��<\k�'�f�y���n�"�YWT�	����������P��w'~E8��h{��������	�i��o�X�w)��3Q�|�"`7�����H~z��%D�	3�w&2�Y_����;��%���&��t��`,E����������P�
p�:A�u;3!��b��o�l� -n��z�S��K��Y-M��:m����~4��w������I���H�q�c�@X�X��GO1��i1���_�!��%u>�b�������"���D��Q��1�������p���:���J&�]p 
�7+B�s����X\��(DB���g\\)�2���������pr�trD�y�
i7��@�[���sY� -���0��\����#��[������!����8�uQ�u������fh����OP����PAw�����b���W
D�u1���;�/�t���U0F�� ����7>Y�/��� �D(�C�����u�{�ni��5{���)���
^���{@ /������T��.X.\����{�������g
�z����Z���������s�n��&�n��K
z'w��D���R��3��  '5T�	���]O}4��4v�����Y���D�Z�P6w���b]�.">������e��;�������#ny�#�lW|������J�|�2��8�	��-�<�����u7�c��L����j
��?�(:����	";��J���A�5t�@��j&b�S�_6-	���$�3U���=E���<\r�6�W�O� �^�������K�8��"@]�iT�.�!��j��de�t�[J^����(�W�� �����p�l�h��.���7Igk�w8�cz�%����q��W�r�N0������_��ek�iJ;}��7��Nec9�������}��z$�d��w�(b1`��*���u�^-dV~Q����H<����AZ��k�X���.aO�W���O��M#��Z����U�a���m�]�X��Y��lH��D��K��lm�iy�]Zg��o��^!�����9r	T�o:�|����>Hu��f���u��{8d�L��6�(3cq������T�����Z��!�Ldtq��'�g�t�-��W

G����M}C������M8�}0�W��+�L$�|�PL������O3�����,�!��a���(f����NH=�'UC��LZ��-��v�����3|�5�Rl�������Z���(�gt������qS�4�g�����S�.���[���t�uS�lmO��V��s�2�\'�%!�(P���
J=g,���y�F{����}����x)��1z�V!S�rJ���� ��TL���:o�����E���,�G�����7�!1�_|��'��7F������q�����b��"����#pS*dn���x�D���;	��U������qW6�FRS]B���w�\���w�w���w��PZ�#��9���������[Q��Ho����z� ���{����$7��	bkZ��ah�����k(
T)��"�P�XM�Q	����O��`���[�n��2�n�b����������
����wvEf��s|GBm��	)���+j"��BP��������U��vT�UD�wb�C���2����2��=H8����x3m�{x�3a��a,J��G�*k?������zH����/���_=��7Nyh�#Y�jE�4���
4H�f���2R�#0��[}�����`�d��L��}��M�yZj�\=���a��	2��D�����~��&?4�O����s�d�n����	�@�N�)�3W7��
������5�|�D��
���y���cv/;�N�������@�'�e��\g���+���Lpw�B���d h{5o|W��5��	cF���I�Li���4����]��D��v�A�	��q_�;	�7���L�o��^Q��!=/��E���;%�����wa��x�xh��
����,+��]���6���p�'�>�l��^�����X�X�:�{2>����p�����:����Y�E���-���� Nc2����4h!K�e�s�Q�v9<\��KH 9���w�aV�e�c��g�������Kaf�c1'�4�����V�F�#|����4����y��+��D�
X+g����t����(sr,�Q�$8��������H�XT~g��(���}�e��p������{_����u�xT�Ji����L�>T��?��B$h�Xy�� ��f��[^k�v���G�����
����/�����e&xE��7R%��g�#o���B�
�*f�H�5n�0������������(�H�`�liA{�����]�*Yp��	�$g���
h���]x0��i����ko�%��4��[��T����K��S�x��a,H�;g��&�]p �����C�3��h��5�l��
3Q7������Z�Z��qe�& <��=��*����0d$�������
���s�D8����e/,��S�r��Xu��G3�@FX�@�����7
a'8�4 �{��
1�O@���������K<�;L�z��0���t�Ni�3�\����\�8k���y��2>�m�be��X=��jF�w�����U���b��i�+�5�Y����2��O�S�4����N�G�`o�;�Jq�'���W�T@���0����Jh"��u��+11�`G�0f��,�w��e����S�SWc3H	�xL��%����]���D6W}f(��GN������C�m����o�3�3�sc(��������T,��}�}AT�6���\�kl'z>/����F,�=��??3�\b~���B���u'�.��DG'c�V�X	q���k^N��P3�4���3z%>��r�'5��P�&����������������p��t��Q1<h6c�V�U�A��`�}�v(p��+�l�n�k��v�%,�k.��}�@�!R�I.��Hkv�{$O���w�4���M��:��"s����:�\S����}�N��?>����������??�_���T�����9�(5�*l=r����<�*Q�z��������*Q�z�|�������6.�W���b������7�&�U/e>�6FO��)P�]����������1l��a��������Q���w����ai�\�_�zq�}3�}��7��Z
�=x�c��
:,�eo���Ky���/�zB��Y#*�$'��_o�rS)����g���F��U��@�a���jz�Ec��$�*�&s��$ZW��\�.�b�k|���k��pe�0���!o5�L��[+S/��1��'<��b������$]���N������p3<P�L���B'���
��=���$����g��<5U����+c�
���l�o�{r)x�
����%R��/V�;�_���Ar���<?���$2�$���1�1S���jp&J	^r�$Q�
l����x�1+��A��=03��z����Q����3��35BT}�<�T���g�*E/�`	8�Dt%�H�I	�(b��x�NSz��g����9���3F.��:��J�YI�)NECS�R��S��
���Z�~L:p""x��F���+��X�p0t�6j�&����4�$�pf 9Yv��{W
��?��P�!X\�y���&���WO'-a���_������^�����?dy��������<��xg��]�14Y�~3��pR�8er�%���������p��+o��P�33�+A�����~�AK������QI
.�n���L%-8���}\ZP����
;�M��i����I	���l�$,Y)�����������f";�����Sh���ZE����UW��
-�Az��|d[=81%5��,o$��p&"�Vh�����
�0T�Ta�$_��](��0�rE�!^m������n�T��X��$>ta����.�)�64a�5,�&�	��	�.{g$���U�+���	g}*��Q'�g�����A�k���L��>t`gDe��ee�W
-�7����I�h^A	�M��H�43C��kN�K\%��c�������c%��b*�Jx!�_Vq��74��5�!��z���0IOSZT��A���.�0��I1U���W$P����P����|�T=�V�k���v�o����t^\1u�u*�r�OL[b�sgT6��sLE��yku��f�^!`J��f��Q�=����6�=.]��Q(W	d~�������pD�����|�>���-sH/LU
 ��1��;n����<�����<I�"����Ce3�9��V�s�$F����G��s����*��~Q���W_��+_DIX�JWOfek�AX�B�`�e*M�bO�����`���q:�~3�>3+I�S�<�-���#��}8l�I}!ma�Sj��O���bb"��
-o����yB����M�66�O(m���+d%1l�C3���|u�	�����E���qb�"!�L��d��=<W��OLI�15�w�/��;��� ��D];-I�[�_g��j9*����*Sp|�D�"�3k$b�'*� �89er4���.��q������Vdm��,���SC ,
�VS���]|b
�W�'-\�\��	L�����J�<��E,��p��>�1�nv��}��[}�<b�g��8@�������H��<���38L���n�m�X���<_���c�����U�����n1��g+6c������f�c��X4W:9�)
p�<0�3��#9t���q�[���D���Y�(�H��I��`|H�����F9QC��_}�f�$��v�Gn�������[��('�	�~�(7��r��(g�s�0��33��x�7e�Q.����er]c�AG�k��a��{����
�=��Wx�fl��aN��/i���zX�*yb���r���#�`b���-R�9)e��	bo����H�������E��{L����g�'GM�����9�#�x���5�S���)a�?SA������1���ND�s�����������oW�=#Q���G?�{Lo�1f����NPvWM�����f�g���33����|h����de��*���x��� ��l^�~��kD�J�6]�>3�,�&)�����7�R-��.
1++�z�^���E�-�!'f�.�g>58)��A �#������,T����;��������Bia���PQ�d�$S�Ng{b1��I:
!U�N��/���e@U��9t�DT0��=l��j��L\��~��CF���{���$�j������'�p�)����0'L�)
�ts�x������jZ��.���kKCbE<�zI>�������/�gy\�U�7�/�����l2������*wg �'fi��a���<�)�c��7(f����O�0���cj���am�=*�2E%2p�Z��2��,�K�S�������5:.cHt�B]i@���b�v,�����z"�{{R����������?�J_}��������OT��BxM���5Z�G���k���I�Xi�3>3VT��>��_8��������>A�v���$�0|�(���J�G���4|��&�03�#
����p^��2Q
6�3����
F�����Z��v-�q������B�T����L���D��wTh���r
U�d���-�^�	��������2Q�[�k������(��I�T7������0��f�>N�f������x��<��w_@�x�4�����L��[���P/y��l���f�>�/*)����3��(	{lw�G���A,�>Am��0'<v���81>�}/`��3�>3K���i����dB"��4���v�-R��}<�`_�yx?��c�S.>���NL����1��	��X�w�`�x�,�-���{��Y���}�������?>��#�������K	�ou���U�t����U$4��@������MW�'_%JW-��
���������W�����W�g��MW���1]=��5�Q����"W�'_%JW�3_�������(]m���\=sM��G�I"\E,$�I�!�����@�����(]eRI�
4�6K7W��U�V\JW��=���S��R�6��-���m����{�+�tu*������|(]��|(]��|-e�S��R��T�y����ch�+����k�X�����^K���"J2��� JW����\Me���}k�I�tu���H�5����U�Z-U(�����;PzH(�;P�zLW��j(�;P���4�E}��uV�q5uV�q5uV�q5uV�q�|���tu����c�Zs]
E�Us\������������W�����j��m�z���:���z����<f��
]�@W����1t�_^�7@W����1t�_]�������1t�_]��W����1t�_]�@W�����pe�(����a���@�W�@5����a��4| �&�<��:��-enS��R�<� ���������R�<� ��!qu*����Oe�K������oZ�c73����),�����W��6��R��"b��3���0���(|�A�,9�A��b��s>�������2�b���p#�  ��|�n�M����+��\���<lAV�u&n�#wFH�����A����<�P3q*�@�v�jA{:G5��zT���$���we
��T�Rf>�o���X4���w��������W
��V$�3�Ve�b�����/#��v���!LS<�J�s�=��B�3���%�WD�x�����1���]	�J���Q�#��cAjU�z�
�|����)�je,%8���C$���?�g&E=PY�~3��D���l�lS=T���JQ���(��/~0���~��R�\;�8��
3
L�D���<������U�<LL�����UN��Qh��`l8D�u��7YP���-Z����:T�Ze<�f2F��c��a���'flg�B��C�K��]��P�Dd���������H��`\%tm#�T0���	t"��+��������k�Z�	�l��%��� �D	���Wz<6���yg��&�!���/���j���:��`q��6	2��BL^w�k)Z� ���"5��������ME_
�6cE�C����3%cH��X�D�O!�O����2�S?@���e��"N�\m\Z��L/�TF��]	��_:�5�������}�l�U�OHxf����kr��;c�*��O0!~9���H�~1�:.cSa�0�(�@�]��~Ox��(�f���,����A��>A~u
!0�}������.o����=	�f�����7�b�3�R��:��paR�NF�uQ~��g	��������#�e�O��a������)�ma,p|�Dd��_JcDtA�!���x��}������2P�oax.OU�n+z"��OF5_���J��G�f&��)Q�C���A������1����)���|ak��]����D``���6M��<���)A�<`�,v�����A��#,'�U����=�!�N�	O�{�)A��!����n��&�~1�"��"�"#���G+��gb���?��2����|��6�G�;�	��z�K�{x9E�[�h��Q���w���NA&����R�|&��7�f!<��L����������Bx��s?�R�������o��7���v���(�6�:�n�8�#���e��"q@�8e��S9�|N��|B�`��)=�C����@D+LY�`�����}~fa��z��7c���,�1��aUx^�W��"�S�������������qN�� �G6��3����c�1����|���O�4�P�TF�}g��pV���G�h���8�?�+���kO��P<��?�iL�M���x��	c�F���*��^{�����|��pBp_����|�{�7�@U_�}w�����������|�4$3��d���<%�������X�3h%,/|�|<��sH�1J��X���3�
�}��*K�����J���s~���d��dY�8��3�PP�{�w!h>���K�f���O��^�I���0
t�n��=D}���!��< ���-�Bt��pjf�T'��N��%R�`\�}q���N%�w��������>�">�ole���s���alR�w%�'�+��W�/��t��'��^V&�9�,lU��d�
��Q+>G����1�)(��N���3Z�Bh\����e�q�M.������a���D���['��p6�)A�G�����J�=��2�vL�1�H��W��VG���g#�E�[�'?�����_�M��'��
��^��=��)/���_*QF�����-EP/�c2n���*������vL]Gk�aj�����NhlO�u�]�j���?��j��DP���#�<d0\���X�����F(�wb�~��������������8�	()��z!B���kw���Hw(��c�>��~��>T�C�����G��,h���0��
=��b������LN;'pT�{A��������A������y�1�i|I
���q�ZkND@��3*Jp�0��?W�����(�B���J�C�������pG��G=�clY)����}��V�lfb��	t�X�v���I����#7�)A�[�Pn!��e"��l=��J�����C����y������;���84`�%��,>�b���/#O2�m����m.:����������F��lK@�����J�_�a,�&lIN�W�\�a���(��y��"`��L`�Ru�<?yP��VY�<�w��V��%��Mw����iOl�pqf����wedd`��c��������5�xq$[3��.��e��a.]�p�)j������zhu�+��B��F`��nN�����Rb�M2t���L	
_����T9���0�������?� �96�^&@x�^6�����{��5��q6���|�k61,P����q�����3�.��4
�7�c�����e�l�a��w�����+�������&I����b*��^v�Zg��t%�����3$��RI�vN3'���[�7$���}�:������?l�OW��i\��dmc��we�n<�4T0�L�x��iS����W���. ���W�m�-�:�`�0QQ�1��t��VG�S���� �_��:�����g(����\T������}W����4�C���i
 ��t0q����&.����|��dx!�6���s�	�0��0���5>�*c�T)���$���w���J�'
>�v
,*�����i�[���)l�'t����1 t0�U�D�8REl#��C�LC����G��^�n�8��Jx���J��	�Pt��
]�w�`HjR�3���=�o�B���L
���]�IW���4�R1�`�����8�/�?���-V��w*�rj��-��ACV��*�@=���&v"���i
3�q<����I{�P*�A'�23c��T��v� ��xO�{�Q�
�j����d_�cmv��CE���B�h��a�=���������S����[�+�s+�[��4�2���vO�����zS����6=��/��(��I�(����w��	�.<&��TS���US)|��4So�����G���v��	��.@w��1�aZ�E'���m��;�L?��{����
�C1x��7�2n��v��Lx���������
�A�'�1����\��Ff�h8t�C����`6F	YA-��u;z<���'S�����-��h:L��������=�����fee��07+�0G3.�����-�|f2�6n�Q�D4@8FqN�R��!������$��WE��n�m�7x�!$���D�bP�2����;��+S$�5��To�\4�o�X<�3��b	�+�����<�Y��2���:A��/����]�f��e0l������'S�[0�vx����53���9�p��h���i~����c������g��8����e�!3�E���~����	1"~�>uYR���'\���r&����O&�M&��d����	�g��/.1/D�7�����l��_0���_1?2�VlH6���v����^�����rK�q��.m5����}�[���r"
0�.�K���5;
F!���O)�vgC����y�*jX�c��hY�	�X&���t�N<2���1�BA���*F�L�h00����A$��>4x��O�?cf2��B���	�)D'
���qI_���ZG{}����)�Y��f`����I�pM�H�����bZ�������iw���������3�0�]�pw���Fb��nD���if�gja��fJ���]�0�CeO�yc�W���cZ���}��L���v�q��'�'l�'��>poY	LDIM���"	����������������v��
y/�S>�G7�T��j8�7�G�?&��M�JPR�H
��5P����m�M�N���cO��S31 �S�q��%T���	����-9�f�_Y��n�:	����5��a�T0�C9�1�������0Q���~�����~Lqn{(�E�Tx�B������o�l��!��0���&]�C��t�Qn�`�}TY43G����[��m^��<C��
���T�<e\�B"���)�qne����Z��Apa��� '����T{8#h0
FV�B�C�;Y$l�r�uj�r�4p`_����!V��l�-�A����6�������p�w=3����(x�%l����u�o���\�Pi�ZX���qC.A@$��n8�
GT�����B^A�mFh��f��tB|m�u+f�qF`������d;��Lv�B�Tg�s�J�8J����s��������]f��.D��N0�Dw���[#N461�k3t���a7 0�1��xO��B\�S��o� ��"�3��������D������� ��[\�����_~c;�}ZG!F����#yc
���[Q����!��tL-������
��E����q�����7w��q��E��$�iS�w�O�q��������p���{lEM� H�(����o�9�������c�^��Xb���6�{���L��N�������]�@�O�B����R���c�
s�]	�������E}f2�7����������K���p
553\��L� ��m���GTu���^S,[�������o���������q]��r�6Y03s1�=��m���}�kQ[gJP��������6#�M��=�wp��m7��uf�%�����b���
hR�G�j#G�e�{��G�d��)�d���S2]�CL�q�O1%�`��2�j�������@���<�(�e��pfk ������E�+S>���P��u�qe�A����	\�/|���7��zP��e����(����?������ G�}C�'Y��]B��F5��U8�_��4����a{e��h��9���	[s��;k��W�0�|#>�'`�X|������/+ex��|w}�3�n�.���_w���5b@l����N_V��4VMV���/���Y�m>���&����1�������������\@ Sz������Nc����+~x����.�f�w?�lv��E"�=e��Ck/�������
%��w���"��/��7� ��'��Rd�'-��u�D������?�K���0�U�8WZ��	$��s��P	��l�u�����c�	�V��#���i��1��Af�~
g��HDL03�@�G���?nfX�S�(���3����Z�6u�nk"���k+30� S�"���
aa)���.1u��`���4� ������hN�@E�
D?�Ps6P�M����
����=v��Z
�Nc���ab&
�8���F������J��a.��@�i��5�����M�5:��V&I��U����N���X���������m�9����Z�����A��>������OD��7�G��qB����8%��f{_�X6�t�������|����@�iz��Xg�2�f�|����J|�ae�{�a��RJ�f������f���	�{w���*3�w?)T������B
����,��{��~�^�&��XY��1�4�4�A������s
��x��q��btYB��` 6'^��[�v~������������Bw�l�
��2�16��2�
�����Q%����F'AI�L��t>��f��Kr3�9�j`�;�����E5�(`�-	n|����@biD>E(!5�Ld�1�!�AZ���nD;�������`C��X�5�?��8�?j<���&udJP���D|�Q3�"�U����2DH�`�OT�[�����q���|��H��Llz�yKF�0NRc�����P��'+�6�D������l`U�n��b���m';��(�MqR��2P���<w$���L����X�f-��q	����Y�-d&�������5kh�';_(�K���T���a�A ��O�J���3���
3�V���J��U��Uk�b��}9V�>�D'[�T�0�Z�(�4��P�]_��+30g����C�PL	��1Lt�\c`��f[7E�����@������"�5n��[UP1%�.p�q�����v�`"��8����w\�*�q�Q5����av��W����r�	���.���J���m�5�~bJjgf�[��?a����?v�8����1vLD���P��yR����K��f��W&UB�-�A��oLi�j&*�pr4F!F3����'�-	K�,�G�F��_������yk�5� �
E��$���5���)�p����%L��1�Ay`N5��u�	��L�#���71J�l��?{�ND�U<����9�WqQt"Do�o�	L���;����2�����[m#>�d~;%����_��{B@'�
p���	�[x����������e{�ip,����/3��7��dk��}L���i�0Z��{�gB��m�$����*���%��0���&���t���	n|������ao.w��7�=�����:��[Db�����7:���|WBFx���m�U"�������>�WS�&|4M[��g���I�z�4���u�C�2a�o�y��OMW�
��<�P1�L��p���$+5��D��������������OX���Z#6�>�UH�nC�%K������]	7�����1`�Ls'���5����E�a�5'(��x��M:�qC7G��"�!����x�������������}`���;W����{�U�p;j�	�8�nI��5� b0=WX�3u�m��,5���1����p:�h�g&c����l]u���L����q\<�i\C���I!��i�u&����6����7����\�3=Q���e��`�kf����UZDQ���)�����+��r�F�����w����=Cxx�{�`�P�7cl��
�p`!�$����<
�K&����� ��+S�k�O8�������Y[�}$��:��������aBR�����w��D\�������Q���M�x���\Py���`�'�_i)����{2�n~���3���/�������=������>(��������8����Xj���K�������.+�n���U&�Fi�Y�weP�;�t�S��]	����=n�3-��J���CoG�-���q�^�[�s�����?.�tx?�o��d%2������R����c��]B��w3�m�b������CV���G4����/M�Nz��������L����G�0�O� ���`P�-]��B3Q�1��+���'����@8�k�c��t�y�]r���������L��Etm+�;1�:�P���y�=��x|nDf���T�%�J�"\�WxL2A�?&����b��`@��'�_L�#��0��E!\���RZd���1��,�B����)�=�N�?��N�L������1�e�3���^�;$�wu�D�c+�\��w�&J��hjma
|��a���Oc�y%�Uf�Cg��v7�#,�J��O���~� ~d1C����I�-���rmzw{�`L������nD�	{G��S���$v���
�d�&F�����>���=��p<%�����Md�����s��(~�y�	81t�"������G�����7����!�o�U�����������lbbh�KmoY��"���{2V����.]�$�4N=�iw�bl@��d����gi��|E�&�k�0�iHUg����MO��UN�E:K�)�Gt(��X
��(5 �������.��7�)�����=4�E���r�5��L��>�:<���L<<@�I]�Pd�������x<Y�-��]�UC��oas q����t�p	�wmc�%�R�Mw<��q�iS����P~3P����T���3|��y�$
��0V;�%Ev}�(cxR���J@�I�`��U�%��P}ckC��.���oa����o�z��[������U���T�����24YTM���1��\	[(���$�Ry�w)���a-�~(�wmaAy������C����!��w�$��{����q3���|:Z���h�1�&�=���}8����-���T.>�0��n��|�v��.8!,��|�x���N�O@r��	��1q&�F�yF��O@���K�	�����q����sR�T�JN���/���A�	��H����BMw�~8���KS�Y�+O?�����q3���~83�-��{�dH�1>�2��F�����C������]	����p|���D���|��bni����%��mOXq��������4A�X����~X�g�������#�SZ����O?�}�	G���q�
����cbL;�����[40���$�g|Uq�l��_:�1��|T�[Y2����1��W�}�������H��T%��1�����DaU���|k
@s���/�sH�=����>1>���>G�����x�$C��+Q>����\�<�0�	��M~3V�P}N���b�������������[M<�e�p�����\�5�H���������'�Na��;�
��w�2B2<J��&�%���{�����)��?4X���D�4�Qy�_�����H+2��N+�3��-�4�^�=SC���^{4$w�{�����pP��t��t���������Ku���������c�����&8".N�$�\�G|Q�;~���`���W<0�(�`>
���kT�t;jJZ�~&����M �K��|�V�uA�	F���2�3�?�5�0SgS4�t�p�^Xjp�����t6�'��Li��������/�	�6��1-���OD�7E�V�q����X@}��9*�<�s�%\���k���eC��y�39*��M�X
�geH�&�~1��Z&B-�;�l��+���8�"%��^�������w�D$�3�5Qg�'�l.���=z���M�5�$�,�M�*U��>�3#�~�_l��i��^CC&�h����8��0�������Q����H�������	����&�3��3L�cB��|�a����b�n"�qt-]jz��831)=���I�!���J���L\�,UDLJ.s
Z�Ii��Ii��p��gP�4M�����&|���q����C(�W:zCf�X��L���dj��ibr��J�,���,N,�,���&�0��wk��t3nO��L��~�8
q1�q"�82�{������b7�gi�i��f����p�@��D�Y ��l� s<0pg�L$}��d3���3��I ya$��!���'�������!����f�m�Gz���Q��2�3��k����=V)��Q���E�$��u
�E�	}�YB�Tq��BU��`7�L�����~�Y�L���}(�Q�'���+����������Z[�f���w����/T��l�M��0�Ra��Y
�1$iaby���}5�V�i���I���L��*���
+��qL@�}+����T���5�*�5�>����J�3�T�B��2�b,�"�����}����w%<8C��D1��Ee%��&�>�:%��[��)a��CG���z&|�"A8������Z���o���8�@q U:�6��B"�<�����X�3�����Jg���X��M���v�#R��e9W�����*Q�j`�U�q�����D����W��-��a���Me�U�YW����e��Qf]U�u5���^f^e�U�YW�2�U���P�t�Q\E���*!�����:��bsM
��&���T�X��JW���T�L��JR'�w�_[���l��������������7{(T�~��qv�t�����������g�|�����/�������Y?O������n?�����������?���_���������e�Y`G����5����9��q���e`�	� �=:��*����3w�+��������1f� �G��7�A�N�
=�J�����=3���������5����wB����O������s�+cx�O���)����Q�1�<d��s�����,�m��������d��	B*������K51&^�+aO���GA���T B����_��z'�Ewf�L��DH�;3�-,{�� D��A�k��	�Q���!���O�e���<,q������0x1Ns���2S�������#����u�83n��P��T{3c��E�J�~�x'�edf�!���:��%E��-�Q���CX�/����S�~NT����1L���LE�8�o@�{ ^{z�?�#�we�
�I�o�����4'X��~*��������g!��y�or�M�����z�45'E������G��=A��<�l`�vE���"S�j�S�pX�����yP�E��2�M����T��3���[�5AffI/H���Q2��Y+��CPl6K���S�I�+.��Qf���`��\|��T��y�e���h��4mu`
��-���y[����s��'~���5y��l|���\���Yo`�Ag�����<���-������Ue<&#p��4!���Q�&E�x<���T�y9�
qK��ZY��#8����O�13������u��8�����L��L8rc�.Q�<�����4�1 8�����lTocx�SubY�CLt��	��Aj��H������h�5�d�������(m�h\������y��\E^�WT����%����_L��0p���sIz{ah������DC��T�(S8}��\��]oP��+����On12%����	��g=��~<b�%Ae��"��Gc8w��-�������#�2��n&24_��A����0��7W���DXH������L�x>$�P�F�����>�	n2��3Hg�B��n�"����g|����������:����G�Vl�������)�%���0�����C�i�:���0���u��+�2V&�b<}�EF�c��,1(d�b�K%$�]]Y���:&Gc�1M9f��y���@<�gW���@	���/c���3A��������|x(��*d&xw�i�b3!��egu=L��3�a��SV*c�W-Q4��������Zjg&��1O�6\��Cl�waWU�zS���p8�/L�jD��
Kla������B��`���]����*5h����1=�O���H���D�I����9��B�}�j+�G�������I_���N&���X5NC�P� n��u����n��<6%K��'�r-��c�a�S N����@s�\��<�t���7
�S@����L�����{e�e#�����d�J����w�+� ������r�_W��/�V�7r���D�Yb4�-ca�	#&F��]��\��.�jW�$b��H���J����[��63(�����m����|��`��x���.�~�[C����M=������9�}�U�_������wz�;F�fy�{*������0�iA��}o�Psc� "�OX�������Ig��w]���,*�� �X�����4\b���R�4��G}����y/�I����m���0x�[/���������
�+�9?=z����^��1c���5����r!�{����}�=n@��)R�nv�>pr���/���t�-�����B��sP2���y��#vQ������BR�\P���G&��L����`g��,(�q�<3�~u���<�������)<jF0$��O7�.L��it�o��df����I������P~������"19��y*6W%���y��w%s�i��T{3��d������;Q.)3��7O�)�W���9��~K�t�<zc���-�z
��F��H��R���(��{�D
���{��&�c�)'�?S	k���
���b����3b�O�������}�@T��~��8n�a�k]�L���H��C��x��A�;M�4<V���:P�4~6Wg>3�k2��+�>z���o������$=Q>z�������w����R��
��gR��p��DNK���=��D���d��,��c���1�/gdh���&����hxk�4��L�D����������I�$"<�"����t�b@��#���OD>�\�c��� \R&�:�oAa���X�r2}|'��\�B�R~�;����G�Sm��JdH3;�SUgl�[ Q=�����Q�|&
p��=��]+?�����=f��/��x���h��%+�P!�z8,t�M�_!��*g"L0�����II��{,����3�����uaVj�{�]3LD�M
V�f��-*P��Y����Vy�M�D��v�7��7tx�%"��~h?
����7���k�ja��)r��.lAx$&����E�z���J����S+�o���A"��O��}K��H9C�->������ ����������/F�����@g�LD!�xzk�wcy�-+��`�>m��	�'�:
30���d�SKL2���{��2���E��
�t_H��wa2�9��-�i��uEk/�h���qY�&�C�`���Jzd���y~|e�h?�.:�7�[�V[�!���1���L���sg���AVf`�����'���<��>��C��E�we\&����k��l"u�FD�4z]/�"��4��zLsu6�4��(C�=�vw�~�`2jp�����r�(`_��o�Y�W��@%������������uO�j��FY����b[����[���xk/����!K����a��B��}_�kL�=��4:^Z17k��O*��`��?����%hf�}�����Li
��2�l]Z�l:"K&T��J�7�g������u���E�kxf�8����q���]�	�N�J~���L�N[�B�RW�3c��if 7��xS����w%� Vw�L�	�^���-Pq�x0*���i�6
_��~s������1�+������X�D!�;?m�!Uq0���2�Z�4��L�U��1����������+�+H�O�gh�|�
����IT0V�w�f?����1=wR�O�i����g�[[��'U���x�p_r���gM	��h~��G��*j��U��.��7_��Y��l���.��r��)AA3��}2I�D\[����i�&�'�[���p�P��a�'�;E��a
�\�_�>W��p���Mwx-	?�`��a��Da	9�3K�j�7�s���v{�1��m�����GNt�#�����)������%����}���=�?.�W�\���������{����-������\IW�VfLRbC�yD :��y$\�1�.@���:XO��������0Do��Y�a��qM�v��`P&u��!��v�f�~��SG����yec�1��1�1�� ���V�f��1�H5&��G;3y�lZ	:���Y|Q��L��Sf	5-����@��p/�G��\t�~���������?(a���t������/����s.3��p�]w��K�O�aM+>�������aa
	9BM�U_����+�%%�)�����9n�jm������ZW<��b9���|6��8:-�a���������-�73@R)@%C��������Dd�1��e�Q��<^OU��`nN���/�����	]���4���xOe�ML!�������%a�]����QFM�^^|�@����/���q���2����-�����ta���9�MQ�~���a�g���K�����Q�}Q����~�7���~��	������Q_WFX{{����=1�6�P�{d���J�2�KN��UGY��m ��G�
��q�ADXz�w%K�<�NgU��3���V��f������J�Zm"��c�A'�6U���Df&���
��y=�}��x%8�*��F����W.`qb�|f" ���6r*������2�Z��53^���C>Q>lr_/��\2�e6%c{�u�#> 3x�9Ah?�x�~AC���[K��`�@=���M�
�eu�ib?�������.�/G���V��}��p'���T��](�#�7\"���
���Z$�%=3��F�
&�^���Y6^Yp'�z����L0�y���c�E��30������l�'*�������`{�?����<�03�H�3�=�{��8�]������?���,j|�1�O�C��G+3D�I���?@����d/���H8�b�Y���|+�OF�����A[z-+c�C���������by!E��(�';u`�l`��V���e�(��
�	j�!an�����&�r�z����{#�A<��88�q�T�]�	"�VH���!	f����e���i.�����v�lA�/���|e:���U���D	&nh���`��2��'"m�b>���r*����L�+1z��R��"A��o��d�=��Q&��-���bS�B$q���U��j����U�^QK�g&cJnC��^C��[��-�x�����+��2e"L���D�����PY�����L��u��>
$~Wb��=(��p�!bBt��e=J0
d�qA7����Ia�t!8�(����40�g��v�aD�y�(_���F��I��r�~e�����z����8!x����\�Q����?5��*���PO����00\���14^4y3v�i�D�[.
w�f�7�����=16� �1\�[��T\��	~��*���L��r, �R�tN�������We��@�����@;��aK)u�Z�\�S��!��f�.q(�K0��=��������f���y�$�%L�F�q��0%���O�
����d�Gm�U�P���`2F���9��R����>3>�y�pui�����:����aXl���(3[�*�`�"�BRoET<���9n6����}w����|�U�v��_�S!�������ne��������%+cU���0�}{��������`�P�G�Yg����	��*�0w����_�0)K��q���y?^�FT!3���iO��y��P�0x�e=���s������p����.7�$�m���
q���
�H�����I�J����4�j���A��������}si���������������|�gk1�s,��J
|�$�O;���W�rK�E����K
����`8h5/����3��Z4Y(���R�L����A�v�E�Q�C�ob�����R����C9~�p4Du���-��?���(����$`����}���@UOw#7_�	�5
S�Uy�O��8�&����I�6����W.4���A��	��n����UOE������4��Z#������d�oI�3�|���GZ���������~i�l���-�4����2�L6��������3Q&|ij���1lepi�>��v����l��������h�<���e��$3?�(8�'��cXZ'��l"�g����Zr�
��B[�1/p��kL=)d�>����h��v���Ddb���t��W�|�!H�����sa
	$���o�������x�0�%t�D�4d#1�-o�L�:a�und���Y+�k�DD3��!�������u=O2�y���ag�E��7��a��J���B� �)��D#�m�:f"��������MU��<om�X�Ln����~ ,��`��?�C��������B!i������ff�KY9K�z?��SDR��{�7%�����IE��;�6)�������\����/q{��p^�n� 4\*;-gM\�����'$0^	���`���A@��	^��	��[���z���`���0n����5��$���P��/��In)�#�����peW����L�y��%U�����T��0�1�����$����p�8|����E����Qe�
�3�g��Oj��[�M2tia����H~W����������s��ybD�4sf2�������.3��Os�N+5��;��L3[�n�$��fW�rc� .�Ec�Psg��;-�d&����Z��H+3���G~��D�q�l���g�P���	����,D�vZ0[LnAgSs����pW�y<L\����x���y+����Q�$B>n@�����)A�$��_$�������]|1��+�zT�&6a��r�b����`��d�%��=���1����V'"���R��q�O�J��<�w��7hO>��0������|nZ�[�E7U]qL)^$�\#����>��FA���~1_.WT�G��SQ�dL#���������m�����"������LF����2���`h������T����_��X�d��'����qGs+���g)��x=�X�+`�a��lG�
�����xf�x���f/e
��h�,�* ����q
�
5*F������1��k��8����E
��6���X�������)���������xul2��e��Cuw.��R��f�AE�����[|�����b��$�wT����q��=��"f�l1��
Z���z�T���.�T3{�XiH���7&�b����W1�#������X��Sb�y������*�<�.G����9kXX�$X+�1V�6f.3�������b�um�0vN��`�,��1�J����B@��	r�bd��
=��	tvi�-�ZML��n$.���gf���p���,*G ��@K�'z�QcgA&X$���*�r����"�K��XO&��<<~�S�-��I:}0�$�c��?wNn8��{���q���� �2��t���G�N\|�-��w������J������n�S�w���6���g�a@ ��a��6��WZ���w���v;��b�C�~��JP�&t��_'�3�U��4��0�g&��r���s�O��^F&���@#����->H�2��i^@��*�9���#i��^���b���T*,��%���vau@L���]8�J����]�Z�n�'���q�F���|r�������TN�+5��d�,d�P���7�D�O�z��0%��%���;�X�LnnY�<�"t��Yk>2�{��G�v&vi*����/f�)1bOcl��� 3���!��!\��}�y�W��qk��o���{��oREn����l���d]��E@e���\��m7.bP���N�y��	�|���C��p^��Rcc�Ls���=��s���m>c������
��:���~���'C����P��m�)L��[�p_�	�_-��TfY 1�;C���8�:!|"9_���k�DLP����<Z�J�p�<����~>������Z���as=�y��Ku���������0v'�3p?�\�7U��>k�e�$�"�c5eeh�5%����W��!}���I���
�w���7N=��J6�j�7�A
�q�5��qD�V�ea��X�U���Q��N���L��,��h��K�q��K>�WrH�������<5���=zM
y��!��������~�����������Z�?�����?�\�n�<��u�4��^��HW���=?W7&��U�tu;�����zj����,���/&06�	�h[lQ(�����e
A6%z`��g&�a���d�r|�v���Vg�a��	�q��p����b�����v�X#3�uj���|F�;X�<q�j���o`��c�
�P<�5�I�
�x��b,�]�����zV�Au��"�Ed��R����T���>��U��z����	��o�
��:o������J ]��^�Q���SS=�����������M���f�O���2#_�;���K�(-�3�
�u�m�B�F��CW|�������Sn8a�R��=d�T-�~���A�u�N`5��0n?*�����bel3#PA-�Pw��3v��D���i��qp��T�%~�L�#2�T�DF�I�%��]�_ �mz�{Y��)�NN�v�$���&F��T�&}�|'�P�|�=E��D���
��J�������>��������|'CcI��%�T~�.��1sx����dz�}c��2����F��S�b����9���+LcSS���k.O	�W����I{G�y���������t�cLKj+*]��*�I�����%��V�z��u���N�s��`Z�����{�M�U"���?9a*#�t2h-���:����z'�0���Z\�M��M�l��23f�Wm��N������]�
,M1�7�cB�U�{�}7���}�	A��+b
�7��$������&&0����I�\����$�;�R��rC
VFRq��
���������~�O��+��F34���B2p�4ae4O�}S��CV&�iBN��*���d4�����Sg��*,�@��M����@��d����A4c��S�Y�4���B��i�������h��u
}x�&P�A�><u;r(;����%��<�
�2����;�	(�t����]I�x/��	3
�O_U��������;�a�UJ�z%E�	=X&�l��=x�+�M��P���+L�gf4}(]��V�#I%81*'{3%��\�IV"$�y��~�Q��5I/r��~�)�����V����f0��%����~S&��&��x���I��i �B���@l
#N����������H��#���W�n~����H�e��(�UoF����QuP'W�m��`m�����$�r������{N,�J��WHe��jD��L�t�1�H&BS���Ek�4�W�O��T�8�U�p�$P%YV��zL�$Ub9:�dF38�zx�r]�D��e|�
^y��F�\y�����$di)�S�\�
q�V����'��q}9�*�2�����82���?6ud�Z��`s4S'�v~�������;5�{�z����*���y���N�Cf9�+M�G��^wD�p��N��f�&�\0��#�/:L��� �d���g^����@�nT�8��R�2�3f	�yu<D�������z0~�����'�������<����e���N��nO$i>0��&B��.�C|f4M��|�c1	�9�/4������3&&0N�T��bg����s�����ZHRa���x��<�	���-c(��P�$l��������h�����-4
ZlV'�&B��.���2K�3�eV�{0�zxb�l�[p���lUU���|M���P�L���M����-R�$BA���mv�;F��������)�G������7w��0���������I��\��1qv�	eT�����W�.5��=�W3�'F�{��!>� ���Z������
`��v~���e�Av�1�K%���K�V���Q���)��[��a��> ��p
n�n�2^�N!��'���T������*�w�-=%o�(7?�y����=f�1����b��jbd��O���-CJU|�-�������D���	���g���3�k:q�FO�4���k1��J>��]!"\'
����-��q��}�J�������}C&����?��&|fBO3�^����)���9jy/K�B�%���4�Yiow�_��/�gP[���S�wsaC}�R[�y�	���Ajk�����g]���g����o!�E��s�����Z��
�3�[�Q���X����'��*8�������B���
�x�31�w��1Q;-{@"4��5��� ��:�S�N�g�8x���e*�_nz��R|s���Nra���`9*����'����n��;v~Cu��|a�N��5*	�4�2��9R���	����.m������T������_0�b�?1��
���px6D�+��
_i�\��V��h}�ZQ��#y��.������FbP�A[f�7��$v>N�c��6�����`�a��X���~�{io��U@*��=�V�c7�8:J�t��i6dl�>Z���n'F�%��Ub�V�@9�k��	�6����~z����{�D,���|�'�8X��j���Il|Ad��������'w�,v�&)g\=�L�a��s�`b�;o���q��U&0������apR�h�8oj
�t����a��5=amuz���bN��~ji]��L�
&P��e���iU���M����y1��p�.H�6QQG/��S�=/��K�&"E�&"��.p��nos�6��
�b�3�5:D2�<�|tY]��g�`�Wq_0��2J����?�P���OBS	�p��:c�������{gBz �g�g�S�������2k�x�S��@9�IM,4'
��
Z/������gb������4��Y&F�����\#d
����!��?-'x�e���HnFiT�������_m(�x|�j�l��iS�Pd�Glz�b�h�sLW0��y����S������p
N��X����_�����8��D3F�-yC��dYN��Dd��N�0�M����R\��=m=��������d�{��}��6]�����u'�<���Z.+L��zy�.�[��0]^�ry9��}�����$�H����U.+L���\V�.��\��ty���zy����r/��./����6�e�t����{���Rk���Q/���T*`���J��z��)P��-����t��2��"A�]UW�����@����_U���g��(]-eS�G)��J�mR�L����\��t��0_�+q]�����\W���������O����c�0��#��Y�`R
�H1`�"g����{�����^E���k��I�J�����K�T�t�H����/E�s�W��K�BQ�r��8�/r������"���|�;��b/�<��f/����j/�<��n/�<��r/�<��v/�<��c�����t}����z/������L�:^���/Z=���/j=��S�����c����
=_4{\�j�3���*}����������W�bP��_�	\��9���&x�/���������v�������������3W�fE��_�^��
��1!x�/�N�ifC��4���W��
����-��M�0 �jx����I���WK��T�QJ5�R�!q�_�z������z��������^��0�L-���[�n�	v\:_��0��O����H���=��k�H9#X�gex`���'T�s�[`��G�~^q�R�����+Ct3#��4{�X
�����
�Dl<�wf�%'��?���?��
z�MB�o{�Ehh,�B�fn�@�2�����^
�����9/gD4���4%4c�j�2�����������#F)�X��!M\7,x��-�C���__�ykIta�Z����f�$��H�b�����L�C�'YT�3N
��H���o��N�g&��EM?G7*h�D$3�u���=k��n;�4�nK��u����z&|����.{��rFt����l��'������6�ng�����}�P�u%lV|g���~I(��\;A�H����T�6<�9��	�����<d&��z1
���af����E������3"s���1�.�NE�����J��l��W&�s�P1r����!Q=�T��t��v
>�����.)JD�.CDJ�g&T���`��vA]a�-G )g�_��0d�9$����V�?Q]��k������U�����:DsF��MR|{��E��bu
C����l����V�j����}�i��H��Y	X���5��y!_Z�;~^���� z�r����b�Q��@�?�D��qh�9l�(����v���>����C��Y��N���.=���	��NOU�4
��L���y#�4n�x��R�Ekw��t���Kxf����
ir;�b�*]�f� '�?�QE�>/F�����r�M��m'X��W���,�hZ���^V�r�H�����c�������Nk�B���;
f�M��|w(pw�	�v��LL*�����b`�e�y.�i����������b���)��i�mw�/������S��!���2 t��$]�/*�������
���#N��9f+2Ac�;:���wU�Q�\��I��S@x�$��b���#�=~�����[G��:7��	�����JN.��Xo������Y,2�)���v���U�3c���)�53a�m�T���fV����b������i�����MK���]������H&���4��2�b��_�Q�����Awbw������k�wQ��AyX643��	kuv.�{f
���-#�4�����53�����D`��L����zv�����F������`^4�_��Z�L-���UnE;��K��_w�:����W���L+�fbYT��e*����	��o�eT$����c���>�)��%���#��)��������
�$Q�g���.=�&�B�u�{"��]�b))��d��u�>��H�-�����2����������o>a�%�|�`ot�4Q(l4mQj�I;3��'��
�4e��c^���4Z!���y1��xX�GW��0�#1j�,�`]��?��H�����[����� �qB�QJ��$��v�]�	`��������(��������J	��
�L4��s���x�*�����Y
7����3�!c<��=�C�������px*��:��Wgf,2���B
�����g��G@;�����M$d�,O�^>��69�L�����Zy�����@'��+�}l����*L�]�����Sd���������k�y��� �,/xm:�l��33&�==��U�!z���xf��u���0�>3a1y�V�0Ja����������7<T�0�%{8d�1Y��Z�Z+�#���wx��R�>z�P�N���kPx=�9�=)��c�Gp�c�v���P����v�27X��b��_�WU����	�:��p.a�����#��v����T��^��#,z_���m��6����u�U\���C^�p�O�(#����a�g]�7p�z���
�D��������57@e����N8�����33�o<�?�����D@����3��+��3��b(�`7����=��o��-������*m�J6Y�
��j�Rzs�D�Yo���$1N*���m��.��xL}%��u����
��,Je��������<�"��h�
ir����{���
���B+��g��=�����=,0���"�*w�7�����[T�V��6a��{��
�6j��z���I�l�K�dWh��,�6S�mE�� k��lf�G��v��6��a]�T��+��4�����G���L����gHFf�9�A�$�*�[F�-��.�r
�����#�����p"�x��uB�
D1�\d�;0����}�o��1�q��s����E8bIV���
���43�u�4aI&#��r��/	�r���n�K�#�t�_%�b���Y��.����[�ei��\��u��;��3���8/����"�����N������ cI+X7��0,��/:5j�!�q���Lc;��^>���O������$��/pw�RR���p��`��m#����=�.*�_��8������W�	i��y�
�8hy��W
�#��8��5�D@]Z��A�5+
tAb��5����{���.d���E�L43R�h��v��XY�B�v�i�N���R�+�@]���D����9s3����-��+�Z��S:QI����I6U�������i�,���t�[��?l����l is���:���
V�9sqj�t �m��334������T���R�:x0;���f�`�N�K�<t��>L+������v
�)��z��h�KQY�������Y��������F���k�f�w��YW"���1\?AWB�.�1������
,5��C�����&b Iq��+T0)g��zs���g:xb�q���?U���
.�CU�
OL���3#���
�R�JL	��X7}w�KI%<Qh�m��������w�`Mi�p�*#��W4������<��*��~g������D8�sf7��g�%ld�S��]��^y2����n]������8v$��������h��"���/�����T&c���W��-��F�xO�{���
�j�Z��d���6;��UEI�"C�3�Q���iN
?#G�� bg���X����)a�%�[���}�Z��b���4��-�Q�x��d&�u�i�r�,���z	���3��4���G���|f�C6����@���������<�M<p�/����rd|x'�L`�ch�JY�j�����kc��q���y����l�P"���**3��;DA������]k�v��G�	�����@e��f�O��!�����
=��:�y:2��d�SRc����Ai�����PW�T���`{�t-�Q|fs�N��	7�z7*vq1�L�0Fe<JDC@w�kqvz)n���]S�%�5����s�H�J-����h�:�a�%$-1Fk�&�uCQ��_�gf��Gx���T�A�����W�s�`��4j63����Z]bF�i/J�>���mE�D8<1{,X��^<��b�����;,���|���O�������05A�l��h9������V�����;]��V�t�[���_�s���\����y1��h���b����Nzu
8���)DS���?�0�'��b�i�h�S�1.�)����D��s����	d>d~h(�x�3U��0%Op{^��k_�#R��OXj���I�D��0�=��g��M��z�pb��N��a�!�\
�Y��O���kA���Q���?�V�4��$�?��V������lB�_�I��D!b4�����J$��:8x��O�>�2����f�WB����6A���/������^m#�u2nf���	�����p�M�����3k���</f\���_��LM�`SEj
\��#�M���|l������0�U�������P��o<�'�o<���6JI��^�`��#u=�X� s&�&�t#@V�h����M�����-�g�#�x:Bh���Y/����u��C�l���#�/���_����X�H)��J
�K�S�@�S��90����mM��S���T�n�
��D��[ �81�OM���+�H�&�PM��k+�nM����9d�X]+Y�s���0���~b��Q)�����T���QeL��F�&����D7p83'��?��������|�Og�������xkc@-��%V�^�M	�|������j�+;�F�	&��B@Te&�Q��r����|�P���Q��$j ���q��v�R��J������B�Y��j}�E}	nb��B�EF��`��_����9���{QJ��<�D�j2G�of��Ob���@jR�?��?B2��/J�k�1�/c�Ld��������cU0�^�ad��*Qt���Q��E"�%G}�
P�=K#��I�*�v/�8�3���.�Q�6��L7�m\��AC�m�
i�7z�3S�D&��d�����8�2;�#qn���D�_�f�������X��|��:D,8c���D,8�r��w|NbR�NE�h��B�c"��Vio��,<�Sa�B(�~��9r�U���eX-d�/�b��A����7sBt�u]�B��*�2����z6�E�gF���z���!-����M��L��cAb��s�m�U�5'~QJ�$\����	��o��W�b�h�qMfX��do�)~�P�4+xy�^��_����u���Q����������%"���8�	S�gZRb5{�v�;�[�k$�^(����n�C���J�p��e�3��+��J2��!�9�<3��������������Qfeh�]7�:�
]�w���c�X����t9`�0[�R�
�C�3?N�[`�����l����Xd����hL��gTn/JKs!�'��x�%"/
CEZV�L�su��D-]���fC�4�&����jf�O�j��:T3]����rP�fs�U���$���$�N����26��A���a�<���2��S��/���(�A�����!k��<����R���9P_7��(fJ�-�#a+;d���%��X�v�&�o�T	�L���yq ,��|����j`n�xT�����T!�h�W%�`������.T��q�2,�._�'���Rw�Rb�� VC��YR����"���E^�/x�B��i��e����[^�-
w"M�
�#����4
�����)6jfNj^[���&c����*�%�����6���n{"Q,�z��0�2X�{�L��0��{-gBw�H��A��m::���o�{��
�����Tr��{f�������Lz��1�(T��oB�pBh?x����!���������v.��>SB���n�nm�-+��o��>SJlK���t��9�Uo��:-%���g<~�6��G�G��L�
/F.k��3(^��o>z|b��:���A�����g�m��E%�6J�4Hu���9=U�oCO�(:�2�m+�-b�ff�x��C#\_�qa�*���m�Kh�b
gf�x�:�c�O�h��D�S)a+��n�XV���}M
����ft51����	m,����s����,���b�_Y�X50�&& Td�Kto{C
E����(����fJ��B\��D�=3l��k��&�R�w��`��;����yQJp�VB�#l.�Ae�O����?�J���C������yQ�����nR-X���8������;y� �?�^��
�����nx�����G�������w���6iu�6�cTs.$Tg&����\������� :�2cd�i^Q�����
�o8�S��;DP#fB!��]`�V���J)��;/]�5u�|1���ZX���<��E)�C�|��@����U���������MU�#k�Qq#�Z�'#S�*��&s6�	�\+Qc`��3���*�x�;mh�q��Qh]�:3�p�W���9UFBj��S�z�q@Y���hS!�t�u��������(��q`�Pa���J�*�ZV�.jh3����{�Z�{����X���^7����n�G�H�6Q�v����T*�����`@cG�M!h=VF1*`�Z�,�6������w<v��z-��^�+AMo��K��2����p�d��dS����
�(���X9��DNh�B���cT�7�Vu��!���J�F���Dd'1�s��D��'5HptN4���SWD���mS�=�W)����������+�jnF������|l<��E%��
J��p�e{qJ���� �F�J)!�I�a�X��*���?�V�P��~5n�=�8�+�Zv�Q���������/iL*o���r�=�DV?i��TS����T�q��F�
���#'u��]@*I�AGk�>����OL���MT���0��������{�<��E�JnT��R�]���J|,IO��L�z ��[�]9
L�j�/F].k����L��s�Z��g��3(�
-rZ_���}��(TU��s5q���@�H�����3�:P8��N���G�71 �37e�r������3���?\d�D?���K-���3���HN�Q������y�/��k�j]��}����������~^L7�!������3�@�����a7S�NC��\ ��W�����i��4<3���6��.��y����u�mu�+���y;���nnC�^��w&��+�kq�������
7aYx���tw�X��5J�}�z���Lh�]�d��}��34��I��Bl�9`��b���1������y
�m<��V�2���[����yHX��6a����Lw�a��n���������&����U_a�3���]�#�����'�u�;��?���]��:(���5Y��-�qb��t�������0��4x�� ��y���?DH����(7�~u������Lu���f�G�J%�
��wK�HusT��I�{�*��}(��<���+5}�l���}�������]
�2U��z�NFk3�X�����:����M�����^�b�����@���65��W�sL?��/3���X����{�TJ	��N��O���&���E+t
�t+��:S,��B�auW�������=�N�Kj^���X�a�:��r�E���n�'F����Pj���C�<�������c�iR<N�lfHkB���5�����������	���b���?�&|Gl���z�'����q�;~f�Y�{}F�0�����V�V������U��n���ou/E�f��X8���-�x��o��B_��HF�����d��tbX���Av��	��L�\cC�Z>�n8V��M�x�d���:1��u��6�K��~^{B/�4�]�*�fO���b�b�n�q��-���o���&JC'�'z�?�EWy��.P��N��_�N�}��Xm���Jal8[_h��U�w��|x������c�<�f�s_�t�n��#�\)���75!dRF��&v�P�1%���q��`�0H�Yq�����?B��[>�(V��{$�Dzch�����$��.�f��Mr	cY�����p��J����63����0O��)�-Mh��y.I1���R�2��T�uU���:c)��t�����'�l(p/	���bIC����i(f*�����'oR9ko�~���@��$���5�
�Ai�3
E
f�x��p]������B�OqL��B�%�f17����������`��4������xs�my�>X�X�R)j�{�)X{&�0{^%�b�W���{9�S�\�7��������/.��1��=Y�A�����j��8���YK��3f�I��8z%�'N�30���h�������N'�gF�&4������J�F3���33���P@S���,�p�U
5�>�uh^U��_��n!�D�d���FJ��R;�E#Z]���(f�����^|����Z��D)�C�jQ-L��'�</.����&��3	}ztv�������,�t��������,�ie�s��.
$S��"�9zS�iI��� �E�JR��Q�v�&m�I��R�0Uz�Rbm��U������#Fx/]���`������I�B��������5��)SouS��\�I��51-�I��m����i�jP���4iRpI�L��:�(�R��Vo�����I�VF�~vS��Mx��I+��&>��-�s��w��������L��)p7��k4"�4�D�&����x����@��Z�m	����F���*=��5���hk���.=VL�fez�n���Wt-S��
k�������y�I�
5:�|�������%���+e�����;���r��7���L����$�g�s@�������V0���3mc�5t�q/Jp�uKH7����1�����2&�(a<0-�d���^T!4-�Z��Rf��;�^���P^���C�%2�i.V{�H�t��2�|(��*3�P��c��eT"n����$o:m�N���J�	���s���*�������*��QJ�GB�������@��~�c�/��2����_~$����ySA��#��7lp�yq?�C�X����E%*=�.��r��0J �D�DeyS/�D�����I8�%������1�X����F,�T��T�prE��H��O��PIE��2f�H�I��B���T��P�����y@U�;�n�*���TW��zz�T"n���koj�(���Ri��%��vL�9P:����������p�8����s��d�&�����.��":*r�>�0�����$�+q� 	�o]�f\����
p���t��^���iJL�uv�
�U*w�
��y����0K$Cu��}#���;�b�\+�;B5��M-�[�o���(\���e�.c��%���A]��8�7�K��;Q0$M���Q&0n�&J�A��N�f�\���s|��.�pw���������s�_6�	X�`D���&��YobdBG���c+��ly�C5(q�#�A�����}�L���bnt6�������DA�b�T&�w�r�I2�+��������1��4Z�e��N��{��^����Z����F�{
�xl��]R��T�������9�������
��e���m��c.:������
'U5�������96����)��C�b����o��K-(����������d�A�S-���`����cVEa�D��wnV?����f"`������^<\�f5-���z��_�@�(n����]�&�T>�������?������g�{�!��b��vx�X%M�x�D�����������#�h#��,xO~���l;�3fYC,%�lu�������
�{�i��E���"�=����'������,�$��M&|�L�s'�+����w*|�L�b�o�ON��&��F5����@�X~�yq?�S�^�X�o�N[��L"��la`@�X�Zdvx^��&�4gx!�Q�L#bd�%NRK&ImfZ"�X�����V
����R| �
M�p��Y(eb;Qx�E����Yn>D8��o�e����b]�����3�0�~�)r[�T{�[�g^���B������wb[�1��,��2��m�
S�*2*��80-$o1�&��M�Q�e���nsE��]d�
�Mm���U�������Hu�*�6;S�C�mYDe�M�l�(��_Q�D�����9�����/9P��uJ��2��E-+R'{�0�f����=�/>�kQ�����;�G�	�u����	x�������/�s�h*r�^��LL����"�������n��n]�����Q��i,r��[�>�GLW�m�H���F���i�S�k�9�����L�7\(+����;���Fy�����?��?�U+.nA����K�J�b�H��?������t�$��'���<�����F��BO�)#���Fu��u�1�7O�����z=�[Nz1���p]����
�����u�|]��I����&������O�jF�-�w�W)=�����e�U+:�F�y��U/7�Z�q5J��,4�Ne��D�g��UC~U�����:S��e0N>�j�p����$:K���x�������dq&#�YKrH����W9��$%��������������F���������}�?������?�W�������{q����o��U��o�����������������_?���n�Q�����66)}=%�R0*�����6�[�{	Vs�ug��#�3����/��LT����'���UB���Br�G>���J~�)o��33`���/������-.��)��76��/1pt���'F��G45��-������T��C�ol)s<l�P0:6}&����T7~�@C"AM��4u�I����H�6?������A���������V����^�\�W=�1������q�WLv+#XN�r�%T�m��f"AI��a���)���iN	�Y�n�d-�`�\��D�]F�tQ��\N��Dru��l���b�@��������2x�Q����S�M$�Bk��0�����8����,)���o���zN���t�?�[���]+Y��UF0$���pD3&���Rw�If��Tu�40���V�������"C�����$�^+p�����/���u����d�S~����������3��s���?�p
X������l���$���`p���BOD���M����_,�F���hX�(Q���ucv��D�7cb�e�	g&����o��h��'~Qx���L�;1�
S5	���Z��\J��"��t���1��[�
�{~"1��[0�����
'y�/(�����v;wP����V���GB��0<-���;?tFo��+��#����)X�S��;L����n/@�������������1��0��`�@f
>X&��5z��D(�Y7B�Yi�������>�Fa�f�M�`�$��ScCb�������`��{`/��gf(�{�2i_h�IC���u��a���q��L�W���H����[��9�(W;7�(�@7p��ybt���r����	�#�-������L=p�������~������(�����R��<`�o�Y�	��G=��>��f�d�6��T��dnb�n�hY���h�����q�+�@����D6}����<��0'��J��B8��}��Q���Z<�P�F�o����.4��3v�DfH���������F�����G���K'��\�������N���l.������q�<��n�<mb]B��C[���;xx�mgg���Q����7?����j$F�^L��Qc�*!����zzJB�A�����}w�)������+�%�����Z��(.��c����2#X-'��'����B��sq5�!�L0�q����|�����6Sk�������M{O�b�A�LK��;1���7.[L��	��������[�5,��#xXD���KXb#������U�g����C���p���X����a�;�Y����Y��&�=v�~F����D@]i,p��2o3���&����#w2"����6N:����o#�\t~7
T���hYt,>��+"����_��k*N����/��C����#Q��4%4��`.�sa@����`�����QM&���
?3������z\H<Q��3���d'�T�h���g��p61�<���Tm��'�2U~"���~�6��B��J���M��2ZP��J����a�
k�
5&������\Y�0���,W!$I<L�DXH���2�W��vd��/���D1]}
\_x�bM�`�3�OD�'F0,(F��:t/�S	 �O��3qmg,�}���$i��������<3<�=1�������a�S�%�Znb���Q��^H��z��-�>x1��r�;���L�����f�,��������^"�2#"�=1#A8SF�{bs3X���h���/s��M$"5x�!�;
��"�v�G�+���0s�$WF����.=f+��&)�/s�01e�~�('�h�5������i��4re{���>��q��_��F�B���7��31�|����9���V����]�CN*!:U
�q$|5����O�	q��3�S~f�0����r�UFp��������B��T�Y�;�Qe������-G�1���A~����$�\G�2C���!�����W)e����$��1���D�+�0�x�	3q���h1�c�}�����O����hp����5�Q�S����Z�qA.|r��|�!�2��47|]4������t�c��i��L�q��X����]>�o�ge�u��.� M�R�e:�2��c�����Q</zJ�3�O�l�t��7Mq��T<�"����[��z]6����;��Y��E+^8��:����y��H(GCN���Y�Hd�
����H��H
�h8�"��O�z�����Jo�7�oK��X?���	��BHg�%(h��&KLN
!��w���pv�[��B�uu�d0]��~f"C��^���;TnQ�^���b�y*�w�����58��m~kb����������%���jc!0{XJu���~��TN!���������B7wL������a�F�W�)NJ�P7�P	�H�%��8?�6?3�����|�Z�>7Q	��mQc���fm��[3�ex�5��5���s�jb�9�)b�F�{q� 1RC��1hQD� �t���?���g�9]X	��Z���.+s�[��pl���q�����T�3:?/�U/�w���Jx!�`�F[�mfbl��7�!|fB���1J�0���/F2����B@*l�����Q�{5	����p�H�gb2sN!�~���]6��?>�h*�@���������*F���l�$�n���w�����-=X]`/��7�E0�R��\��<-d�S�^���� p��3�?p����]�S�Z�7s�[�������L�,���X��UB!���(����iRd�{?y#������?�D�6�#^q��D��h�1��DaD����a5M����n�`�\��p'��q�J�5�(�=��Q��Y�{I�8m-�}�w����D3f�*'f<n�;��5
�J1��o`�h>��t���75�z�����������`L����3S��������qb���^4P�b_�1�4��*�
le~^�G��}a�@������N�J!~^�0"�`���b`��Bv�n��z�:4f�4$�j�A�}���6�}&B;'�d�D����a�?xI_�v�������{�G��1O�Y}�'������a]Yk��W��7���*6&&�&��s��������W3#��y�16l�c����� �O��w��
��<X���Z�i���d�G�'%���c�����S�zt6�*��2��g8���w[oh���LDS�n.Z���D��ODr�	7_D$+I��`zQ��iN	��� ��&�-���������3#��4v1\s�bW���y�������Wb��v���o��$X��wX-D��0��B4�>�.��a���3�$!c��
[�1�X��'Gt�UZ�~��TaZ4����*	x�{v�6��A�����������#��s��8m	6(!J`-U�����_P�+`��Q��5]��U��T��C���K\�6n�Hz@�����LD@}��D;�3Z&v��84KMj���CmXP��j��y1Y)2��������C���MA�/�a&�bMz�#yD�!�"��H� �~v)g\&u�W�Ph�*����,����1�{�p������	~Gc�-�\���x�w��O?�e8� ]�0��(%�B;yO�D8�a����!p�
m��%K��02*����q��L��4���.7�;%U}�++U����������S����B����a��&�z���p�4OjR�.�U��u�P�/�}�UV����PJ	t1��}���������Y���]To.<j�av>~��q�������o<P)�K=�@khS)`�Q�}�bZ�/[l������N��N���^��eX���bO�����{���mI���u�b����F���R��i �1����e����'��zP��������;S����Vwc��g��c]���/
�hS� ��^��eA���z#�v����]L���2�����
om�zOJ+�\S^�.�G'��j�z�ik��/��3-^(��#Q��t�)������z�����1������u�z0����r}�|�2�U&0�	�1��).��s_f�!������x7������
��&����	Ls*����z{�(�����!%`���_�:�SH�N'pn���^�%�Q�d�8�W[���+z��������$l]����7����c�.��J�?��6Mk��`�1IZQ��m�T��<�+E��h���M��c��_���5�=}�.}��a4����	�TX��9A�2���3?N��'�aHn�~;�NTF�&~
()(.;�r"~���%�+����������KM+�LC�D{1��Yw�>��"�V.��P����pf�����Aj�������ir��U.u��c4��9�!��#���x�����m3����[!��C��e��~6a��*3n����E��+w�Q�]�����=I���%A	F���t��u�X�a���\�@��$��	Af.�����/ �O�9�7��/���2j�'�b8A�f�T��z=8��g���D���T�^�"H�U���Q��(s�������?g��",':����:Ot�[�n��������+�1$W3��h�M-��\|@������B���&�3a/�2	�����i\8u�_@|f"`t����q2.:'�5�"L��2.�3�� �h!0�TL���40�gB��+���>3�h/E������`8	3��h��X��d����G���S�$�1Xp4�UY���3=u��������
�C�l��Z
l
|e�*R����������4��!�ccs���2�r��"kQ%������>�)�B\X����vQa�`�����n�O��u-��h��,�	O;*y".�_;��}�����*�j�P�_�	x-�uW�����se
v%�{�1�21�)��'���8O83ohH�wT��W$���$G)�=,��L��}T��u�0u)tG��c���gf��&G�u4df��o�Y�[hQ8F��+M82sq��`9�9���������/N����:r9�r<N���0gof��O��u���TF�XS��������Ls*n�
��P,-�����@�:����5x����Q���S�2�J��V��/	���y�`�4����h^����Q��d����]���V��<�g���13�j���%��[�7X8�AQ���p�(V���^w������h���������9���M����M�!�89���%��q�gXBd�yQ�ws����L�i��H��N(����y1�s	�^�nv��V]�d�X�\�13���Y�	g��T��Dx��wt��b-�E��2Qy���U
^���|�i����$��C�g�!	+�X��5��DhU��5���(��5������N������q��y���7&4����b�j��c�xJ�z(������G<�50��*>J��_�dg��>BU�+�p����Q"�
0
=�*A6	y��zU}�S�J�2:��7��&��D+��k��!�,e0i�����q�	����{�����,Db��r��}�L�c�	#~������tha��O F����Y�J����`�x�]���5������}"�2R�a\�/"��	�H9�o�l���n�a�����6� 1
�fo�Eudx�����W�
�\��G���T�5���0{%`���
�je1��of��3�"�m��l]��
a�`�C\	I����v1�3��k�P�x�,�=Q��Z�/�cKo��2n�H�����o.9����H!)������`~��Ox�,bffhb�P$������L`L�����U��$���i������eCDfR�N��W"������T����
�(�csL�1��v����S��o���D(��T����3�� T��	���Z�M���Z���@��~7n����U�G�j�.��d����$7����Af|LM��+����?��1����i�@��*B��K��z/�tL�Bh�C�8�6��EEo�8! ����|e4��Q*1��+�fcEf���#�<\c���b��;<X��Y���u��D>������?^8X�e���a��i�&3����'�V�.���7�����yQ0��;Cw�i�'3��n��l���|��q��[E%���#�����O�P�����F������	�>&�����h�\z���;����B�6��e"j
�M�V�;�����!P�CN����9�L+�
W`��D\X���W�m;zMa�����NgY�cSi-��.��y1:�!2�	��{ ��x]@Z-D������n�?=3!P��f�#]�����+n$�VZl^Kniqw(�EGH�J�R<I�W�e��DT6w�[E
g���>M��`��+bI9��~8w�(6Q
�7�U�3'�����0��
�A�/6��2����vH^�����!<b����MOn�M��Y��Wz3��+��rM�0�=����d������J4�9������/�m�3a�TS�_�Le�%x��:�lW�������us�T��L�9���p��,��d����#��`���W	�l�~z���}u����Hh�bkr-�(�up����gKb��,V]�D�D5�
�9��r]G�w`=�[���P=����	���0��qK�31R%�TP!Q���(�����f�b�	F���
��p����b�X�����*[�qy�.[�������-��
��d|\6��z�\n!�\CLl�NG����3��)W0�P)�������@L^�(��6��G
k�v�uh���ZU�Ay N���+�-'��+����#N���8����[D�(�X|��_7RI���r"�N�p��T��q�7;��(c.l�	q,�i�q�`�8!`_��`0V�s=�5!������d4�5�O�>v�����@������+�����3;=��q���
���*���tX����A��6��W��[}D!T��������"�0�n7|f�U������<<D��p(�>��!&���3���B
��������Ls*�b��L#��Q�P�����,!��b��S��i�������`Teh�%B�G�����h��������Er��Sd���X��+)�����GT�1�n�G��bPc,�.GH5��d�1���0���'�L�G�~Z�2-�
# �������d	
�6�jmv62_wl#AD�6�Wi����������~2�N
��!�L���9(�����Z�7��b���5nz(j������F}�*2s�4U`(���+L���[P�
�J��]0�]�TEl�����(���'q��Z���&�3S��H1�����3���D��&ZW;��52q��v�]��k�d��'=&�/�14J]j�����w����e�
@,M_�Th��B'��D��K�o�0���|�A�u��3S(�81�k�o�
������vM	�y�t���Z��-�+���@M��T���u���se4P��T0���
R���i<��LZ1���c�VmB&F�:J2�p����	%{_O�\�e9�+o���������<m����[y�y+��������~����������Y~-?�����?|_���������!�}��}�|0_������6�|0_��r}�����S��iB������~@�^�C����gd�S�$Qo�M�n��{
>3!���
6���|��J|@s��X� ��k�I4c��.P���u��@������i�o���vF
�N�tk�1@�%��r�8�B4$������d�&~^�$����	K�Ip�$�0<��l	%��S�T���>��'9�C
�K'~O��a��td�rp�M���xR�`m�iG\l����*�>���U�C�3��ya�F��J���h���z���v8'Zn�s�9%��O�tI�b���s��u�}<�(g�L7�w@�5���-�Se��:����p��hF�5������e�6~���j�s���`NW���D��s9&F�� -�
�V,W(�Cc\q�J�O$��,�&�������v���t���o���M�!,�u_e�����&�O��2��5���m������?�Q
��������f�����P�ph�O�f��pC��H�vr�}���������o��9�~_,�P�~�i���i�$����_%6�?_H�71R�e
���*Z�u���"0����z�^�PK1�gC�BZf������s�yQ�1�.Z���
A�B���l��
�%:zR}GA����(����j�Z	�W�Y���	�I�M�6�:B����L�=�P�����G�~�a;-�~"=W��obB"�����0�Y����}����L`����J����otxSq�g%XKJP��nYVB�Z�:�)\C�������N:pb4��iJ�%�JabSH��D3�R��b�BBs��s�&=���o~�����L�A0��hl��*xZ�a&Z��5�A����L�#���0arCT������5����D��������'i��xp�_2A�*D�d��M�B
�������m����S;�[,��5[�����������A�{�{��������P��Q��*������A���o�V��G
XD�i�[[�ykM��8�31"6���=�����z;���������xZue���������\�13��Ez\�a���Id+�Yg��.���v�!c'���kN�A�z3��I;�N����n�����{����L�Z�*#?#0<����:��NP��-�1�J*��b]�fQ�$�E��-��T�J)�aG������E�_�������L��M��@�U�|1M���)���4�X����F��:T���[�.?�_4��'�:��P\�Y�G-�����O�=Ro&Z�+�t���53��
�!O�

����^��IdF�|�����_���L����<����pvbV{[.���Fm�ob����q������,^�	=����K+�rd�
U�Rfm<sK��Cp�KLS�g,s�9T8��J���]E���l��t�5yJ!4� �����Vh�|c������w�?�uP�[��_V���n�����c��Ls�V��p|Ee�HLC���uQ))K��I�T	�|�P��(��jB�`�J3���E-&�Q!��`";������ �����lu~p"4u�Y*d����|�Q�P$6x$��
��;VMi�0��VY���Q�e����T��W��j��I(�P�=Ifvd���,��Ja���l�y��1�/ 7�����(�w�����>���
��h�#=�Z�,�r�9���sb�����iK�Q�q�PF|���7���{�N������T�E��M��#X���6����X	=�=�d�V'�iN����S�J9��1�9��@g��E%��SO��}#�a?:��`<hd�t�����n&8D��i/��`3('k���z��m~b+�Mi�U&�����5{f�f��F�t��4��T\���vX���h�N�
��7�qD�z���_����/\�94?�c�7H.��M���NRB:�����a����L7��lZ7B�)|�9%������A�3S� w��f9E*�B��$Y��t�,��n�N0�Q�O���HH���5\�%'z0F=tF�n�z�����w�Jh��;3Vtd���!1c��f���F5����4���0�k�o��6�B�b�'8�'���*�I��E
�{�����U����W��v�|e�L������6���-s�LD�.��������@���L���`�Vfp�W�������
z��s�����C��A���*��76K�:1�u]�������F$���a�>���Eo�e/��_��1�b�</FRH�!��TG�\	�|���i	��_H�^�1�����!YF�X}	����\w(h&#������:�n�#"8ObB�T�FRp	g����0K0n92<U�C����P?�3�tv._�`R\��pR�/&H1��bl��L3x�s��783{��h�=k&���D�7@'.KH�����+��S��X�;@"2D�>J�0
}���)�T$BT
Q�����sb��&���1Yih�z�q�����/%�"��2�	�i��!A�1@�9��M���q�]U�S�����D�z�/��o�F7
w�/8
�p�}O���~1��1��m�v�2-};�x�E��>�R�����j����=�<��hhy+�(<��0V6(A�kw/J>��c��Y/�YPZ�K�H�C�y6�L��q���(�y����6��'�7�1���	h����&m��pYd�4�� ��R�2U�o\�w�#�f!���'���V��M�}��^>���� ��Gn:/���dJ	�k�n>
b�~������r���y5�N��S*1'g�^T!��/�U%�zb��4��d�|!��V+���1���6=5�$OA)��Eq�+�ov����7��
&�1-0L�������L���(��R����o��,��tk��,
���;��+L+��f��F�>G'��D�1��/�N�^�-�������D�����cM�w%,���*3������tx����h��r@h�����o�L�j����j{,T�\M��UXZ�F�����8'�U'�Q)%,����.�e����B �����A�����{>���	%�\!M.����1gJ��(>�j��X���'�L�tKe?��+|�����2f�+�J)�-�WM��[_(\%������u�/��=u��57�)����6�:���u�R
z��B3�`�����@�`���Z�'/|]�����s1��+q$(��e)����L��p����c�k�z�n������6�i��mJ��/����WO�����i��\(*�t=W�����t�J�4��ooN��v�w|u�����\w�����~�RH��Y�/�m�D,�U�'�Yu.����U;_��n�M���Bt�������7�%P
H}�G�x���$���Y��3zD_���;s��@f;���J5�����Yt�/����818�xs')g�t�U�+q�5V{���p�RXQx�
�	�j�vb��T;�i�d��{�PPI���=����5{��D+FHcV������>�Y�7g������Z���b����d�bb"2pS���<���`��d������j�Tu6�4�?R�L��a+�I%[��W�����`�z�t�5@�f'�&����I�t�:�Z_i�D8�-P~�}�h��}P��7#����^Z����u1L�Y��dJ	4^">�����3E^}"�`�_����K�@y�G�g\m����l���?�O���������9�GqQ7D�EEqq+�zq]�EEqq���e�uw�_����/�G�(������x\����(K�������|q��Z.��b�5�\C@~��"P\��|QQ\<s
���\<��=WP\�r���R�JPp�V{���)�k:f���.��_JW�����(]������UI�W����}*�ZJ�N����|UQ���jJWK�������_U���ff��(�n���T���y������}��#tG~���=K)P�Yz�Y{��UP���P\\s?�o)���w�5� P�Z�O��yZ'y�J��er%�5��v:J/qE|:JW�ru���*>����OGq5���++����k�����������������^�44��+k�����:]���B'g5�W�ZW��OG�����Q�z��
��U�_=��{����Y����%��JU��*Sep��D��}��T���JS��*Ke`��$�q}�rT���JQ��*CeP���1}��S���JO��*;e@�����|�rS���JM��*3e0�����|���Fo���i,����%��C�]��w�~5
�1���4�P�W����������k)�:�*�1���-W�!�Z��Ne��w�~5
�1��&(e��2o���Tf?�D����zU����i�x�}cp0�����i*#���f�uk�I���9��i��"|l��5���������v{�>2Fl8FI�H��T%�#X�B�!n_be�����M('��+O�Lx�t�D Yg/z��o������H����c��J��&��Z
�|p���q>?���I~�A}��?m����c��W�*��J��a�2SpS(��5C�9�q[�6l�Q��R�M�Zw_�e�����wM��A:��������!�
�3�M��.�J���
�gf6���wd����b�Dl�Q(K=5Y+n(�v&p�5XQ	}���f4��h�R$�P t�z�ueT��"������	o8GH��^@^�7�R�AR6<���J�C���J1L���`���!�gb�k�6�F�5�l����H-a�����wA70%�q��C��h	kJl�����[���hI��j�������gi��E�����%��'��w��������U�`���w�nk����>������<Oq^���J�I����\&T���N�����^k�q������U��R��8Nb��8��AJbG���$P;�x>z�����]���7H��J��aL�����})@�D�x�$Tb��4�����B�XP���|W�a�fB���V�m`����83����B�Mc�Z|�M96�0�
�����<0�X� ����
�/����[y
��e���Kk��H/O��M���6JW�>.��HP?�&���&C������m1�QnV���h�Vgla����g�X@��g�k�@<X�2�,�|�{���f��O�><�3�^O!2�}��&6���P��J�I����Eg�����C����n�Z d1^��u\���^��z���P�6Ij�I��x�/��A^�"�L��Z�!�����r3��u���3���2�_����B��CoI����9�V�!fP�a����ve`.R��Sf"UI�L�u��G�>nP�V�cK�N@��P
GE5�����LG+�T��7|�x��D��TU2�	�����M"�����h�1��fHe�QM��!��BX�h����y<���u��
7K�Z/.R�+1��G�]�����9��/m���US���wk��C�+�\�fDlh[�
������ug����/�({N���������zK�������x����/e��|4IA�b3�L�vl"?�Q���������e������+aj/b�������9����)���m�xH[gB��*��:}�����'I�uYes��^kCs�<�� ��wH��"&����C1�N��{<
n�	�IO}��!�i���w%4�$hzO�~�����y&�|���`1�_����K8��p�QRO�H���)�a��}�f��^n�B����(���u�����
3Q����t?O�u�Fa}��p4A8��N�6� B�u7M�3d�5��Gv2���|?P�a�
v��QF��l�1�9|WB����0=�V������o��m��ED���>��wBQFG��@gLps�u�����a{T7�k���8>�g����R_���s����n������|�t����o�����}�U�e!\���3z���L4.�2������X%3���`�������JhTx�w��;pS���h>���h��` �:.~��a����7��a�A���N��	"�ES���F��icW�}V:�Q��R/�/3c��xO�;\1T������S��#��l��=)3Q8;���~�l;��;zL�����M��2o��	O�X��8�R7x�)��������2O�w!�w"]������&6�r� 	�����dz��.�.Xv���iS	@����KmP�T��w!���b�3�X�.�	7��C��#UM:{0�uA�D���k�D��l������b8f(���wC6���y'�T�A�A�E��f��;�~3C���p�q�,�V���r��]�U�6�:|W�1ck��i1��]��	D[�#xs����M�w�i?�.cX���pMA?k�p�e[#�g&�^LKI�W�M:p��t�X��Z�y�a���������d�"����\�s4��D���Y���2J�<3>eJ��6
��1�]^J�����vm�������<M����?V��aCN��A��YQVF^Z�g{\�����L8�=cfM��U���0u�?�nm��Ir�������|�B7������`(?��J(Nk��h1�]�L8�h����l�����ZZ�7�>7.^�����Jrc�u�&kd&��t�����g���������!�`���uR�
U����1��'���x�����o��h�SN��@C"�}j]����{gd�2�y������-������/;Jut�����BZ�������f\�s�����0�����7��4����($������4w��$��Ul8i5tFc||B!���)�M��&�������|�w%NU4����4M3��>:������@3>$e�hH
����q�(�S������ ��LH�1�g�i��E�{�t�|����q�{�����
��j����`��\���1
C��$Q��������t~Cg��a3{�T~(���g�]u<��y��Dq�0�[�>?x�6���>]}��b���u'��?C{.���\#�>��|��*��yj1�JY�us-���vZte�����*/�$�]���5������D�^�U`�0:��c5����WV��JT&��f��]EcX�,�;��[��v|B��>�����\�~�YG��mD�z����L%YB}F���]�n�8��14�B��:���l���26t��aKCR���1d��C�B���t�J
���]���V���CqI���)�W��"6o��qc����-z�<��ve�6���_@�4J��da����8��?8U*D��9�C�����,L����L�����1��EO�{�Q�
�j�����dk�|�l�������Dd��H�I� !dJPF����O���_�al�#. �X�+ne��d�)�Q���r5�"p*�b�n�{|IfF��4��F+c��e`���fS��#�8Q��?/L���������S�R��)&��?8����������ff��c��G��Dw����#S�q��w�S�-������^^Q�
(QQ��O2c���r5���|�p�\��X�_���_�]	AM�����]pu@��~�S����d���NB��+��	*3��<j�C�c��dn�4�����w�b����b2�1jP�h�p����4��!mM51%I�����ld��"1�Z������x��\�jY&������S�]�"A��'�z����A�>���#�������]�*�q@����U�(��AS�	�6��x2t�a��y���0acMv������'S�[0�v�X]m�������9�p�Q��:2���8���8���� l������_�3d�9Y2cV��S�bD|s�!uYR���;<�{V9Q�y
B����e"M�~�a��|��>���]V��}��J-��1��3�b�PZ�!�H��-���t~+e�Z����&���\.m��CS����m��(��*a%��4��y���O)L�VC�����l*jX�c��hY�	�X~�g ��t��xdX�c���V�S����	�
��6?�d�?U��l���3f&c������C�&P��(�R�%}���k���6�^�<f��Z����b����z��#\S|%-aAg�����������s�GS���1����s��rD#1\S����h�T��Z�4���*��fa����b6@��LU����#fd��*�w,X]?y8aC>�0��A$��&����lo��������Jr����pU��j�����?�Z����|Q����F���'��`��)V�JJ2�a}�=�\�E�{�L	����=AwO���tO��UW�J:��3,N���8'���+���M^'�A�0��6ANk�0Mj��L�(���B����%�F�rFe�����ja %����7�pQ9��Cz�f���[D7p�(2��?EIW�Q$]�CD�?p�yE3s$�
��������s�YQ��Jh�;O��Hj7cJF0a���pp��2|��B���1����p�R][8#h0
FV�B�C�;X$��r�u*������4��f:9���d�n!����K��'�e�����1u�`d��D�[/a��U��s|���e���w�V�����K��a�����s+ne,��Wt������[�pB$|m�u+f�qF�D�����3f&c�q|f���:�0z�]�2.��u�\�h�����r��&����s��]�b����C�MG��]�+c�
�i�x8��s�;���6A�mEg�
����1�C���[��_0nq	
,o+�a��gs�i��^=�
-yc
���[Q����!��tL-������
����33�h�=�o������."v�+<H��&�����������G�������5��(�Mw;�����c+�gxl�q��BdxI�c���G"X�������`��}�����]�@�w�B*��B'���s��L��/�gB7����o|����5����4����jjf$����|AP��v! ����N��^S,[������sw���������q]��r���`fm������?|����(��3%���Z������7���u�&����
q�uf�%v�
+m��h@��>rU;����]������(���?��K�����������!~���f;A{������tfk�	O��)A�#���w:i�+���%�+S~Z��l\������GS^PN��~��/�8��������U��(��k�?�=f&rtA�]7)~�P������V���i{LA��j�^�]{�p� �c+Q�F��k�����1�1������h�=�3��jQ�T
�e�w�1�����L�c�~��!�U� fb@7��n��^V��4VMV���/�����T�_�!��0��=;<�ht���~t��-��_�bt8p&�����-K��>yR��<���1�������K����7�]]�H���?��;wP�'3�4�%��m��;�LX�}����y���d)2o�����x+��/2��8�j����j��J+��?>���9�K�`u��:N]W�p��z"D���wa��	���W� 3��Y���$����q��d}q���T5��QfM]g<��3���q~��9����5� Vf`��m�t�/B���]���P3aP����:c	b!Zc�G�l
����"+��Ps���_�	�`&���hB0o�wx-9f�1�[�x2k"
����B��3�c��
8�\���65k-�[�Mk"��)���$I8�����5!��3�����%��������Pz��j��w�r��|�����������wO��[_:�8�@����}ba��������O���O��X���]d��NSD�Q�����2��k���*����1\����U��b3���~(G]o"�w���h��MS������O%����j�+5D��XR�����z'C��Q�>�<b�9e���"�e����PI2���`CXT?�u���&�"^��[�v~����l�O�0"��9{njhac�8�a^5�:Urq���3L�����(��|��wFJ����}��|���YN��M���7>Nc�L��4rj'�Rc�D�#N��1�A�]�x���7�6�����_s��4g� �G����kRG�5n�OO��5(�Y����2DH�`�OT���Gt�t��d�	6"�3a����.��tXwH
N��;��jAb(����M{
��Te����q���~��� We�J�w%�*�N8�>� J0C3)����X����m�%�������������.��.��K|�3�%����)i���� ;O�*$0�����3pu����q-�])�
�����j~��r��%|��:��0���r�u���o��[_�1�gf`��/&��*����1b�89r��ef�mMh}����qAm������`f��#����o_T���	��������f����'Gs�5���^E�>������C&�y���8��~��r��� �����"��R���6�5�5�?1%���P���'��6U�g����|id��|e$�$�#����;�D�:k��2���z"�Vwx�`���f��1'�y*p�&Vd���aK��<��$f��:y�������y��pW��q��l_�}j�-���)�p����%L��1�Ay`N5O��3N�%hg��NnWM�ob(4���
���^��|���
���n�(!z5D�LM`jo�a|��>�����a�m�

���S2���
�k�����N��k�	�[x�������������48�ek������q���dk��}L���i�0X�{�gB��#]���T�����FWb�����n1�;������1��Mr�������ql_��������r8�F�b���L�/����3��D�I�)�y��y��5aD�w�{��&�����M3�7�C�2a�o�����@41?a���P1�L��p��U\V�P�F�����D�*���J��Um������	�!��,q<C3J��&|WB��#���0��i�D�Y0����2l�Ps5��xx�&X����Q�f��d�;#C|@���x�a�SnV�{�}�>����W����{�U�p;j�	�8�nI�`(CDX}��fg&���U���x����CC�{`<��L�T��)3������x�w����i\C��IG6������p�h�{�������
;N�[4;=Q���e��`�kf{�r�Z�"�E�������L�1 W����2k��C��.�)u���J������-������>8PgD[��6��n��#���@&y� =Q���)���'����~f��������t��T����7��0��AH
v�p08qz���,0���2�o�D��3F������~Q0��'�_��%�+3�O�s�tK?3M��� ��������������(��������8�B
�6�s��Rf(��Dx~��t���� 3W���Ug���A��4�5OA�j�w%(�O|�����,���+�6n�Mo��nBOY��W)?/`���a=1&��>���)c&a
6
�l �J%�'f�a.���,�~1P�/&axb6ml[�`x�#�|R����gG�=M���������`�)��!E_g����<~�4�X�HD>�i7]�t��6��k��98���MDS^0�nA��?�cs�3�b>{����X�D���n�F��>������L��5�7����\�f�Z|"�����8�]���+���/�0�{	�*\�/��E�Fi�w��23�.c����).D�!��|����<	�D��H�����C\&�5����WH8Sz�D�>����Y�G�����M�-L��&*a9�4gr\e&<t&a|����~��i� ��!��'
��-���a�SfC�-{(O���������������&�u��O
�����c[uB���M�\k��:����hf���0�:�6
�q�)�Ju���M���cV�������������[�L���TU(w����ZF��y|611�����,a���]�d|pGi���"�A��7�S��f�
�"q�,[��y���W�fr�#����3q�n���]��4���A����]2�gV���C����{��g���0�NItoY��[h��+����M#���L�{s���Vj��}3a��/�8T�2�%n�����%t���|����j�����H#G�4�+\���c�%�R���x4+�	���W��4��Dt���T���3|��y�$�K�of�
v�����0M����z���(3x\u��[N����0��B���I�-��R}�Q��xKR}���O����[|�Q�&{�K������O�m���~�(JeO�����kQ�C�~=,(�~3�����4a ��]���;A�Q��E�����(��&����0�|�����\��g|�������M%a�[O@ww&��%4���w�	1���c��+����q�xL@�����&_�O@���5�	H��	H�� %��' _T�N@2>���?1& ��1��6��@t�%�~1�~�4��U���c���~\��������o��~�S$C�}�����9N6������4�,F?�����\=<<r�\
�@<UI?�m��[�~8�s�K�����x�~����9�X����~X�g�������#�CZ�����������#�R��������cb����������	�=�'a��8��
���K�:��tc�1z���#��d�gc�#�4���+�;�|��t�d"���>��wO�0�Z���pl��K����������'�������>����G@N2��]���y�|�H���1���U��f�����7q$'���>$����j�Y.��cH/'}s��|#;3�_\�4��koN�����w�47�%�o�X�@B'���se�
�����O�w�ML�#��l~�ha�L�fC,/PI0.#����;_���nau�q�2��>���GC�Ms��.h���H�L���X�_���QL9�AZ�H%����Dx�������F�XrI1��:~�����������QE�!�Q����/������o�0����p��(�<Z��=�B$�;�|N�(����3�����$�0��H���]	4~���l<O~����}��\�]���A����J���a�Hu��/���?���l��W�"f�%\���i���eC��y�39*�S���:��Y��	�_���������Et���J��/��A���W'�s%f|�����[1p���D����mc���uj���tMr�2�4Q�RU1��gpb��{�Eg.J�\�z0yD�.>�qh\��4'�S��4'�A�����#���-�5!��wf{b��xLHq�xLH[�|�N�qHa"���V1������Iis��&�-r"��Sw�f��f�"bR����S�xLJ���&|�?�������\�����O'iJ01�l�@9<��2b��2����T2���41
��N�m���Pg�iF����xF
���$���|�4fB����Qp���!�!������8���,���&7K#7�fq����p�@���@��kq����<��21.��>���������@��H�P
�tx�=9d�@N����<.r��U���t>~,S83���>�)�)a�c�B�u!}�$���u
���&\�R������X���r��L�2k(�*z���u�PX�����+��gA���3�3��
�<f�C�i";�P�3���"ea|�����|������	#����c���O+���@gLr�	���+R�d1�Vae�<����X��-�d����F������\�P{�|���4�1!���&��g,�Q|��^�a��Z����}I���J�+�W)L>}�uH��[��)a�6�����=US\g���p^Q��
	�@���nuO=p&b��0=C\���!Z�@���
TG,�����r����L�!�)�U����6P! �������^��D���W��U��=���,f\��G��u�����
|������{�����
{������z�����
z��r�5������EGq���P�CH0��(��-u���s�1��9�)�D��SC���O�'���*e�������$a��?�0��.�����(,������\vY�?����~��b��-�������A�C��qH��������?o?�����������_���?�E��WK�#yvf��{7�$����/��\��'7�*K�Lqd��V��7�w�w��]���!�W���`��A����=>���c���u�03��������W�M=����P=���|�cE��la�N���-&�����S��(�F����4���`�*��,���U��'��&l9Bp"��ibL�~W���CR�~p��fTP����6������q��{�>%�����a���+�-or���D�����z�)��)A��+���\��[_��v4c ��]�R�:$g>:��xzg�q�Ng�
^�n�jof*N�&��!��������F��LZ�����HG�z���t�����X��g�0%�3���L�i���xm�L~$F���|��RC�C�[g"C���K���c?�YqhMZ���:������S��p��O�%������������tB�LD�P�����Z�S��rH�pX����	O���i/���|��S����%��k�8}�_����\�*��)���x�	5����M�^q��&�(��oT����7hLE����8P�O4Db��4�],�N���_g�|�1����HL���pI6>dfo���=��;���Mu2������g�^�����KF`\x"��Td6�y!����������	&�E�� +Su��P2~��w����8���|�(���_p� 3>U&��y��/xy7b�yiJe�oV����2����L���S1���'�*O�a$|��O�]��Q�O&���jhS��cF����b�E�
ck�AwE�[d��#e��/ODU����\Iz{a���x���DC���L5����	�`����jyW%J-f���bdJj!��N8�<��f��DL��(U�Baf7Z��X�!��6�����L��q���zk%0�����
Qw��
S"��^�x5q�Oke��f��!��h��'|W�" �7��$�3U�0*�oj�Z�������1:����>j���t��_F���1�S��N�dp��}�<�Bw�3m���h��!��[�u�X��~���73z;(��$��J��$8>�iK%$�"EHM�<��s�Ah�1��)Q�����3Q�4T���?c�bLY*��f��%�2c��1�)?�@A�����
5
�k&���4�����pF[I�Je�$��O5��������Zjg���1�`TwV��C�wa>��{�������~�#@���eXbc���C&�!to0r]��D@����c��e�)czr?<�,g��c�BgV"��}�Qc2���`����k�ID�0�L	��Q��>��o �a����d04]�Md�]�-�G�L�,
���W�E�0����{�����<g�\�����~��;1�K?J�y_r�����!����)����D�n��]��7��~G��2|]C�&}A�����V�5�'���laj���#�E��]�C]��.�
�?�hN$��L%����r���AA�>@�^;eh��7%(*4��<��n>�����P�&���D�����f	���oW.g}��,��$��w<�b�Z��XJ�1<�c���<���C��]�� ��>�A8���<��&Q��������"]��T�c��RP��5�`���R�4�w�>���W�����7��<��wa���x&����
�$9T�]Y�����D/��d���r�$G�� ��3����M���>�7 L�����Um�
G��I�n�%<�31�W������0�=��u�����K
7RI�*������d"�hM{�3Vk���F������<�����oTRO���b?���0"��9��1�,���Ghs��D�N�`�5����"1���I1q<�d����+!��M�����5����z_~'�%ef������rQ���o9'3����Ft����(?������5/
���{)0�N�-Lr�b`�)'�?S	k��W��s�KSiM�1�	���Ah��)���*c\j�*���������8���5
��9�}U�X+��?���?E��9a�^����4z.��o��{���$=Q���a��$�O��$�L�nqC�x���� $����g������D���d��,��c���1����EP��F�����s��HC+��I$������y �[#)�b�P�d��=���Fj(���0���\�c������23�,�/���L�A��'=W�W��Q����-O��� ��Jdo���M�i�[ QgT'z�I���@�3Q�����zeX�4Z�Z�>�|If�K|�ep�
�T�NhMs��(�r&�>���QH������c�qx#���(�Y����v�0�#������])`��	��4�|�M���������~���B��S+�s�P�/{�������"�o�TO�7c5����E���_����?p�=>g��\8�>=���./����[|��Uo�AaO���R��������m��o��x&��g�B����|Y@������ ��DU(GBI�9f`T�-OF��Xb�	J�/����2Jr�aPk7���y�]����������@�������0�&���_L�+�bb�E���.�vW6e�2x�2c�PK?�.8�?�����@��*���_���|s��S����2{`��|���.t���'���<�n9��C}�E�we\&�����6��l"u�FD�4z]/�"����[��8]�5���� ��n��i`&2��&����i�8�>�7����if���^fB�r���Ad[����C��o{���o;��t����g!�^�}k�;]L�$�8c��~����aN�5fl��cF/�\1��*_T0������0���$ha�������S>�Cq�Vf�������YX2A�VB�>��Y���2}fN���Dql�t�������p��Q)�������[�9��0(dZ
-�B~f�oY�F�W[>������}%B�����E2M�����=\�0�v�F���o�D�qW��~jU_T0�}��1v�z���(�z'�|@��`b�ke��&���L�U��1|�19��'��Xu�}���i!��#fC��`}�$*�r�$����I���?��b���Y�[� I�Tw�/Yy�==J0�9���r�K�VQ�D���������/�\���)�#1�{�e"�em	`en�!�3���{5.�0Mz���2�/=��P��a�'r��;(
c���z�B|����Y���Mwx-9~`��`�3QXB������
��,�2���q���G[9�8a����5��4��L�LM�l��Y��80 O8�����U4�`�vx��[�}�{S	wI�(#�c-W������Po�N�h	Wf��v���ICr��K�����xC*��Bh����S�v��`P&u3�
��Lj��������:j�{���1�Y��2xb  �����ot�L`d�cH�G�����~���� �~~�^T0!����
-����@��p����Vmi����������?`�6x����u�=���}^���9��/c8�����K�O�aM+������%���r��:�}i��r����`���HB��~�x��d|J�+p�B����0�?8v�qtZ����c�^�JC�;�[�of��R�J��7-+�y�)���0��c���UG��oi�M�M��t]|3�*��wX������K�b�
�����z��BB��{�K$&������7����������%���_V5u�%1e�EH��Y���Mg����#�;]?�g�0�������T�p:a�':�����}��JL�W��P���T>�1���wxM=�}!�1�z�� [�(4W�!\=f���v�fDU��_@��ar��]	��56�dU��#���V��f������J�Zm"��c��M"m�x3���LX��C�4��]��+�yT���5����p�s|&"�����o~0���)A������Y����0^���'��ru� �H�r�@��D��9<�v�p�,�vL��.��_��:4h1�����q��3V-LqJ�����5�+�$3v����m�.�Z�U��}�4E��	03*�
wW��l�����l���"�`���a�bv!�����,�,8��B����r���/<����M�N��D@&[�T��]�8Q9�2x���q���q�i�Z�)�yT+��s{l�	"i5
d	.���;m�4>�FJ�>���y�#�;����)��v�W�`g�'�f|�d�AK}��g���L��NL2�Et�J���8�+�qe�&@���|����������lg{��c%��$�O�D�*��q7�����H~zZ����f��Ldd���]/&��3>�K��cM�I��w�X�Y����w&~�R�B!���P'(�y��LH��b��;s��;�3�����_�D|y@V��u�	G���2$�`��h"��G{��&���e�2N{���R����r�v��� �� �!]����'\"9���!�39�,q��	�������\_�����aC'[��=�d����z�^;
�waB,.�%DB���g\\)�2������������:������B�0��@�[B^'.��[�\�w�EN%��(���G"+f�}g�c���Ou�)���Wu�������>A
;���Yb �ZA���UQu);��;�/�t�L�`��7A���;>Y�/��� �D(�C�����u�7������8�fO_���:�\U+x(�Jy������U����W��0j���m���z�=k@�{����5/O���/>w�fhhR1�l���:�N������28��I
�g�m����������������BT�$�0X�� ����P���E�'��3�8�.@m�����#.�p��>���%M�&#^B����"mB]���gVl��r��0��D@m�����0x{WD�	Vn2L
����b"P6���c����Q5�&�����%��|Fb�Tg%�3Q���%�G~f�L�w�
aE����q�E���)��b]$�!IGOE=�����`H��=�w�@�>5�u����.&O;;�y�yb|���H�-�CGtLO�l���M�0���9:���X�%�.[��������x�r!��rx�o&���}��z$���X_� �X �#�k�����:c���2K�(Jp�J$V��eJ��UX��*���� b���H�vV��V�
�G��k���=�]�X������Mi�����iQ0'���������A�
�]�*/
��%�5/�/w��xP�:Cr����@�����n�F~|�����6�	��-�8�Q�2D�;]���I�2�{�eu�{����������W9=�p�[����3����,���������fUk����ZqJ�����bF�Au�@������`�z��0o)��
c��[��	>���)6������&P����3~����ti��8�=?���'\F>6����������fk{2s
�.3��u 'zB4Q"��G��2z�Xn�������;c�:�,�>��:d���n�U���L���� y�D>�V��5�Ks����e����s8�f#j#��g|y�\�=��x��1cG\����8r���;���
�[~f<����B��;	a��,�G�����������z��r9p��(��{����5�q��L�3��v3bu���������L|�'0�����g����� ?m Mrso� ����.e�4nf�C��JI���b�z(�K��;-bx�n��2���u1��D�������6�����z�����P�n~B�y~h��|F7��Mb}�N[�J����������/"|�;��!P�z�H�s����h�+�
��x3m�{x�3a���X�*)8Z�*k?������zH����/�oOD|&��U�^��T+:��`�*� �.D�	���H-��<x�]��6���3�;�]����=��	�JK�xr��CZg��	4��1�{7�E�����S:	�S4��L|��Fd�n����	�@�N��R�����CN��&�����E5j�]	�(���2����;���_@���N��|�������+���Lpw�B���Km�f��quW�p9a����23I�	�"m�R��Im����;��v�A�	����L$d��PDIK�����+
�s8���T����p����Z��g7��	����
��p� jdY	��bl\�
x�����?���e����fL�B�T�����S*{�QK<ux*�iAZ���\D��f��U�L�A��]��3��-t�Dm.t�%��9��v>}<��*d��
����ACfB����03���YN��
p�s:����l��L����	0��f�{4��U�4{w:��L����?��n��'\��V����E�w&lnvF��
�j	�qt�g��VN\���zG������c���&x������C[��'�X��+��R��1�c�k����:c�H���K�x�r�f�`��]&B�	�>C��P%���.�G� ��N[dU�X������hL��Rdc�;����9AN�#����=�[�%�v�%�*��#���2��g���L��I��.<�{�4�m@����%��w4��.�D�L���K���l����� �W�rMM���@�[�qF���g���Dvk@���/4�D��[]�W-v-������Y�b@�����0d$����)>2�J�A���p|�E��^�U2?i 7�U��4��O��������U��p|�'U������>Jd�@L�zjO	7�.��-��|��3�����Z�z.�k=0���BGV��+4C���<���;����3>����}��lx �S���Y����2��O�S=5���8kkT
�&�3����aT�k��yh��h��U�
�q�w%4M�G]h�JLE��	��h&p�1���W<�`r�j,c)��-5FI�|�+�zb@
�������2��*�>��f���>�� �W?�>�<+����QQ]gk�&�@�nX��6�q
��)������rW���X�{��g��{>	��]c=p"`��n\5U5��1����1R�}���8���5/'xg��
N���3z%tN�]0�h���������������q��M�7�����#
�bx�l�!��U�s>�.��������]�C&\g_������s.a9Xs	<�[pX�
��MrY��FZ�v��<�f���t�6�G����iv��:m���i����~�����������������/�n?��O;��M�
�;r������*Q�z��������*Q���|�y~�H���X�Qf���?_��<�b)���u��`bJPHo��7>O���!/�~1��&�F��Q��1l��a�����7��I�8���2_��s�e�I��}9��9����;1�DK	���DOm�����M�_ND�r����/ .L����~�d�Ne�Ba��3�(���FL�U��N����g!J�rM��&
�3�0���Z���.O��
R�;g�z��G�����BP������<N�<3��n���1i�����C.� ��ly�.@�}>a�B���(
�B�/�c���\'�c����lS�O�q���Ax�3�Q����	4Ac�������n�]��;�����9���e@���x�N<G�D�c�YP1o�^���������]2�s��C��
;e���zam�a1����������*%����~�����x�")��1l64����q(��X��`C�%XX����������0R��*|��L�����A���|&Y�MLI
-�7���/�@�?������"�����/<G���%�w1@��TMu�Vb�����/�5J�o&va&�R>���uh����]�8�������f
�0U{�C^U#����$4�E�yh4UL��S��\�c
=����9��8eJ�p������_21*��]f������'t`�u��3b(-�E��g!��aMO�0K^GVd)K��E�B�|3����XcY�q���}�C!��K��	���GO�O;����f�s��a�����5�����%��	&�d/s��xYN��	2R�O�����zB�]��P3����o�;�B���`��E�sR�c�
������](�C6�F-�!_=]�i/V���f�������y*�w�~<}�P��~���a���&��Na�^������mF�v&�6*)_��%�%��of��2k>l��.������u����[H������5rbN��E��Y4i���k��k�F�0����OI,�z�z�)��1�7%�X��9�6M���$����kw�H���jf���Alg}V��Z�{�O��^	y���#�]��JCh��g��r�T��������	��M?�$1�����1�m��0"�a�4��AV?
`���e���m����@� vaP��rZ�:�z�H�9|�=b9)2��:c���OK�6;Cr2�d|$���>
�z�a2%(VR��M�J��� ���\=w��/YK��csh�#J�	q���i�{>�`;��r�V;�<�^'�$t#������o����'4����6OA9��!T�
�EuI��?u���P����x���ww�����m���?wM\KF5�a������_�������jXf!���T?;��8s�_�Wdi�x�??����|�������"�3�4�'�$�O$�J��pN��?U��D�3�<@m��������R��-�,��9�B�/&����$��r��/���lD[u���m{��'V��of�B7EqY��	�5a�od�GUp�qa[���T��R�V�g�u�p����T�np@����aJ�t!f����(���W,�+N����U��������6��J?Z��;��Q�X��qV'^��[�;A�����)���o1���i�L���f��uj����K�}�4�O?�PI?��c&�
�A����KO��:�e��&7Kf���T8�I���8
�Mw��UTa7�]�1 ��46=�������t|�B;b����j��|��������M����gy�n|>�O�4�3S��G���]dJPF����c�	k��0���nA���g�v���'��~�)�-�0|���LUQ����4���^4��Pj���9U_�?��-�����Tm�=oSd���/�J��q������o)�]��W��V�FXqR�	U>R��������|(�{t���Rc��k�c(
������U�|e�u�� �b/���FHf��g������ �}�8Y=2���2-��;���2+��u#�{�> 8�3%�qKc��-D��52��U��S9yu�u*����:n��"���Xj�C�_�������T'�B���2�Lm�S�s+��~J�s���(���Q�;���S��\����O�	4�3V���g�����?�G_�4f&�+��ar5�wo�(U���pk����uw�/n�H)o�A��kfP:��=U?`yW�*e�M6H�dm�@�58�������GZ��M�*����"���_���3���_������yC*f|�	�f��S�h�p�fb2�����n�y�0(�O����op'�0p��,8N��2��E�Y�fY��s���MP�������y��H���EU�>���q��K��N�5q�O`�i��08�]���n�0;]��OHr�V�
'��NXO�<�������vV�p�t��8%
�dB�W�����+�L��3H���M������>��6�QL�����c2�~1��;���	���y@���$^�I�"��	��(m������f\���$�y���K�>�j�;t��L���M����:F��3��A�����j��l�711�^���I&��%�a�-��#�u����EJc�����������rk�k��9�����N��,LI�O��4����}��7
�a��7\c���[�$.#��K�K��!0���LD��?�7W�D ���������\��E��[\Z�������M��D(��{_eK����:�[F%){c�39Sd������)f��`�H#7���������$%�=n<k7%����������H��b��4w0>��v��(_�m�����+QVB�����6�0��iF|F�T��������T����$3��H����	�����$3��]9$f�%��$dc�.-O5V����2���G���H�� �wm�.*��0-g0
J��g2!���9]S�2��U� ����5��'�N6��6�c�����������5lZ�<)����.����~�����I��/���P�u���@�`�
��MGM�V�r�{�v��	E�c&� �+30v�Z�=O/Ec����U�9w�L`wp�n����&�`���A?y0G���!F�^����z�Wtm�2�aM�t����+�&�f-u�kN�N�[�9x�GOD�0��l.F���XT'�"�'w��<1������$��2�v�k�%0�����l�&v����5ueQS�v��S;����})ad%0L���g����|�����nC�_�dS�w")����������7fl�M�����|��je�#����h�>|q��+-�J���ww��E"�
����ai&�Z���xlq��*��31[��������oN�����>�5G���0�+�V`n���g���[���%� �Z�}����r���y\A������	�������p���P!w��]9i�X"zW�06n }���<�0F{�F�_]x�Q�iR�3%��:����A2�T����j����^igs��g����'�
�Z����Q�G�hX��/j��^70���L��Y{�LA���P�a�'�7_�cH���3u����ycf�'\c�%�~1��R4�B+���;2��c����A#}��IW�@��  =4@�f��oD��y����gJ`�5	���W"ji�[|�O[���T��z�c��*_T�]oL�~�����
X�|����b�X��bff�7u�h�Y�3����m8cq�S�Dh��0�������<�%�a�[���>��J�e�I�|"��b�4�U�4��M�P4]jg&+���S��(	��y����j��w���q��T�c���n���&���{��s�A�/OD@�>�k]���G����"�q�c�������|n�?�'���	#}��������m�������1��`y�5��	$luL�D��	o0c������Qh?����q�x�����5���|~���������~���7���m����fX��@��v���1]��|�(]��`�*P�z_�*P��S�q(]=z�z��j{����W����\������-���z=�*Q��[���|��uE�����s�z��$JW[�I"\=�$�DC&�$>���=�3Q����*��zZ���D�����@�*�b�U�tu*�����Ju.��jMW���=�Q�:��Z�|]=_JW�����S�����T�{)����<f~���J�D���,�D�/\S���g}E�d��z�(]�s�Nr5�9�����&���Ib�Eb�I��E�����R�������:����:��������{�t5u4�E����:����:����:����:���z�U:u�++������\�������9�ns]
E�����{�t��u5uV�q�\��&����9���C�\m�����1t�_]�@W����3t�_]�@W����1t�_]�@W����1x��]�@W����1t�_]]W����i�@\M
tq5
T���y�@\M��0�jR����S�����T�s)U��W�\W���T�k)s��W��?��:��Z�|Oe��2G ��3
��<������8v�����O���
��������87���h`�c*�.�pa�{F����d�0,\��mg8@�1k;#���D����2x�%|������
;�-%d^~����q�Q<
5�2+����6.'�j�^�Qq��BK��L�4
��U����-y8����[Ii���!M
��X���."s(�A�M�y+bW_:D�-�����%��V-,D���������������;�n+���-uP�� =����d���P��YP����z� bJP��Z���xBu�."yet���ET0���2O`�{g%��e�2�V��9�����vf�",^�`�����M4jg�~�&yj�9�J���X���X�01	n�����<�+�>o�x{?�����w%L��%:0��|(E�%@���*�<�f2���*�*_g�0��|���a
����v(,L��%��q��p�"P���]�����Y=��`�/���������<������aH�f���@��l �3�(�`�hx%�t6f�6��uM�C����,p?~�U�Z��~u,jP�&"A�f��6��~-E��Z�~����!{��Z��PltN��63Q2���<q3����S��������'�<1���e�}�i��z���l����8|W�h�� ����*�V
�j����U�OHxf����kr��4c�*��'XxZ���>����c!�3����[�(�@�]���'��p��m?CA	v�{���T2	��k�Y���nj��>�!'�� �2�
$1���1`��i�X�]�T��8D�)���
�x�t#��#n]�����B:������0%�m��r_>�p��R�(8�l��~$��B��~�G"�P@q��7��n>n+z����d����Q�\��I��$ J%!�~1����pzA� F��[���Y�����0��TN�������6M�����D�bJP2���%��N���r7��i�_U����=�!�4+����2%(�;���VFPr�~1�"�!G��~Jze���LCl��&E�����`�p��q���Q��oB�k�����=l�"�/L�j��N����P�J�=��g���5�,L|�o��B��$3%c}9��
(�0�2;�h^9�)�E������7���v2(�b�8�S��
&P��v�����
�"e�L^g�LY��6A<6�|��y7�34�
�D1�f����}~fQ��7���f���gG��_D��{�b�g��2�(��l��}�>��s����qN�� �G�n�g�G%���q���mE�[�b�����2J�;�V�P��	W="F;�������1
qi/��P<��?��I�M���x��	ck�}i+��zmC1e� ?��>�������|�[+��;P�� ���!����OvE���������9g�?�����_�t�6g�R�4��>K>��1���W_�,Q8�3�
������bJP�C�RI���`�������[�@p2ZpWy����]�������������tT��v�(���1�4S�v��5�S��Vy@�k
�N�N��D��������b0.�T<�,��������[���3/��c+��G�[nm���M3�����U��r����$�+����_]a��L�0*��s�M��3���r����/fY�kTx5�5����ccxp.m�������b
H�`2%(�(>��3zT��]	�;&��\$��+��VG�O�S����#~�{�'"�c�)�����{���� �eO�y��>&��J��{�&"�������������Q���w���8���a=s�f07������ �����v���?��j��DP�{���o2���p�x���M|#��;1�
�_
��0 )c��/X��T�������[�{"�~�v�<t�@wt��8~��sWMY�f��ch���
��*�����07��Y�:����i�f���	���f��v����&N������>.���Vb@e��W�*Awa�����3�K_���Z��:�3�$����4�Av��nn����j+��Yo�1�f&���@i��B�
����q��XdJP��;��F��r��)[����>�RO��2�2�um�~W��O����H������'Z^�����L}F[}�F{�����.���w{��) �%�6������QzW�0�N�+��+.��0��Q�p�\�"�x�L`�R����.�;�s�8�;�n�C�u��;TK����'����f����f�}�I
�~1���H[ 4�nI��5�������c.]�p�)j�����?�iu�V,��P�"����1��+)V{o�72L:}vG���j|]�}�D�����>f�`����X�{���rF>3l@������k6B��8���f���X|>���{{&����>��<	�_��(�$a30
C�+�F8:��F�N���&� �#��lw����2=��������qPI�*���lB������i�~�b��6��������a���{�N����q��2S�&qL�sn<������gh��1l6�p�v�2��%\��O
��XN�>�hy���1|���������{����w!�,�9u)�#k��������|���[�^kk��{W���H��"���O���P:��OO�a�a��
k|�*�-�R���ss�c��]	��D������EcX�t0�s�0����P]!����
�G��mD�~����O�{R�Q%��W���>�a�%�Pl����v2cht��
]�w�`HjR�3���{�_h�>t�D=SC��~�4��%���2��	�Mh�x��v�y��61%�|�@�#=X�����k��Ha;������r2�'��pA���C_�T�|	���L�X�8�_u��;q2}���(�wL%����kM��>�f��?T�5�Dd���P9�&�eD{x���0�H�2��/���p��a!W��hQ���9c������-�[6=���df���m��W�V�0�����#�u*�D�����|e�C�����J3/B���^���b�;������:���3�#:���p �i�U��=cC�c��������L��g;��<�����h@��Q��O2c���r5���J�p�\<��`�\��,� ��������GQ��G�\1%(�1
KfT�zlu�P�����Q{�Z|%s��s4�B8�����v���dc�����T����sH�BSMLI����I���Eb �4w/�#����/l��3�e��w����_�we������M��?V�������i���8D.�����*_�a����}G�B<�zl����
�0ccMvz=����'S�[0�vx��t�d������	���G�edL��?���?�NW�p8;]����?�/�;d�B�������|4M���l������~�5�g�3��j4�L��L��$����	�g��O.1/��7�������/K���7�VlH6����L\�/���n�'7�Pn�9����m��w���'��lLD������NX��`6�i�+a��&R���O|�������V���<ZV�2��$�?��?V��v�����:���	�
��6?�d��+�N6��3�1m��4=w�&P��(�R�%}���k���6�^��f��Z�����'Z
�����g�)�%,�GZ+x���3�0�%y����"X��D����pMu����w����Z�4���|�p�,���P!�L�P�(��Z��32�kc��}N��KB��!�L�M����&����lo��������Jr�����v�A5aC�K�����t��*_��s|��}�D��~7�*u@IIf 5�/�����'��<!�SF����	�{j&�{j<��
�W�A���81Z�Gm�c���Or7y�����9��4���29��S�~QSE�K������Vg?	��@Jx?<T�A��pQ9��Cz�f���[D7p�r3��?E�IW��&]�C��?pU���434�V�:7�T�P�C��
���T�y��0�DR�S2�	ne������0��`��ALl���R�����4Yqaq#�`�������q������4��f�GU�o�i����O�����S�2������:|02�f����0/�f��[��.��TZ�V�����K��a���0�V��XL!� �+����&� �	_[v��v�8+;.c�����{�O�
��[��H�x�Q)G����{�t4�W�Xs��L����-?���3\�F2h�_��}m����1�7]�����v!�����6A�mEg�
�f<��'$bG�IY�D��q�KP`y[Y��o<��O�(���a���7�p8/���n�n����cja�LO,��$H�#z���6�D����V�/����zx���MLI��?qc�=�+3���W�7�c+j��@2F)��v������V���������������D���}~3�
;��`Q��c����X����w������O�D����&n.�3�1���<"A/�j0,��.i���-���Hp9�C�:���]H�#��Ss����D����O�hc����&��^�b_�uyK��z�����;d�:�7� ���>���<�����k�qw-�v_mF���~���\��m7���	L��y���@��-����\��|����8$��W��G/J���^�7^^���mf��?�'#"���E�n�t$�L&3��L�#�R����k��{,V����,��o��,Ws�d^����������B#��3���?���J[��>��E���:�/F)�����w�{|���M;g&1v(�Z]:p�~��/�6������	�Nw��R6���<�x"rt����I�<���B���@��*t�g�q�H'hXo�g����&��Y�B
[��U3��v'��a��F�)��1NL����z���_f��W�Ym���Gd�t"\���_O���5&"��}�k�wq9�2S���=4Y�
~�l���(����C[n n�����;����q��M��b�[r"�L�aK�-K����?|����e���u��L��_00��ny���f��_�S�_�N�F3�1�e	�����{����w_���L�8������'-���:wb���������a��1��;�W��[$����+h	��l�ut]g����|N+-����e����7��2�~e��<��L�8.do1 s}���T[��Qf��#�o�';W�����aM���113���
S�$�����a!���;&��iz\n���Sq����>�\p`������5��%8��drb"n��	��<6�P-f�1�K�01��k^Q#e����X�V�0'�B ��L�E���`i�����)��m>�&Dw����
2����~���w�j���b����R��>��/�G�?�v�:<Jt���C�K�����>11lD�j;�������/DBhx>�P
``X �4=P=��6z#�o�r}lTIL?����`~���@�r���o�a�	�
�;�����.U�1��N���J+v(LT��F�������y6dy$*���d�4��e��s���s����w��0�~�\��<���������;�����?���D6���
��_�a����0���������i��S�$m$��>��;�����}��4�NY��E'^T����R���i�	4 �F�Fp(!5�HT�1���6�A���8��a����6��������i4��A����W,���T������!j$P$�*[��G"�:�����#�t����D2�G�`���G2��q�p�#L�0�6U�Nq��h�
{
�������q���~��m;���b�tN�D�U�3��hx6���Lj&n�������l/yFT�A��5d&������M^C�	�L��[�^���[�k��~"�W�'�<���k6x�m�\�;S(�w���jmkkd��1{V��'�p��)�sp�u�BS��
�x��x��$�7�8	a/���b����������ed�mMh}���
$���
*[�a��:F���p�v�����v�` ��8�-Q#o^�*�q���N�����;�qB�!�~1�)��/	���%�<q�,U���6�5�~a�����7��nk���vt�����;����P����tD��%(���Z��L�"L�L�A��mLi>k&*�r4�B�f�5�IW[����.�E��_Lbf�'�
w�;�(e���Ss�1�
�����Z�d�����l0�_g�@K��d=�\�Z���Ph(��D��W�@�>���$�����-.�N��m!��4���Qp�����ON����W�j+����)��]���}���p����
�[8G�r�N�y���#�lo>
�e��x���`e��F��_����>�%�K��U�����#!���������:rf��Zq���0�W�����/��\�����W���W�;�����g��}�:��{��22��^i�B��O�����e `����U!��^uHp�[�^M�0�Kv�{]�&����U�����!���������}����Y�	5T������[��5��@���v$����Y�'��[��Yk�������_��%�g����3!C<�n{��i�D�Y4�F���%m�Ts�r�6<��&M,C�����-����O�����Ox�f5�g����$�8��v7�X�V
��p��Z7ph����d�"��[X�#u�E��T������8�Ch�W�b�G��{]�(�30�.���q���q
=2'a�D`�wM�����7(P����8Uo�����
�OL�I�A�kd{�r�Z�$z������������X�Wevk�U�;a�.�^!"���o0K���1�}�8���p�rt$/� ����<����Y�k�'���@?2�df�o�}�:�u�hIP��a&!)���=�q'M�oN��S��(C�{��1��7�����`�^�����;0���`{�1��{dn�����+��N������w����S��������)tm��T
+?���2����@\er��V!�gu��H���.M��E�"R���Y�iY~fm|z;��L������<`=0&���oA%;�	A��D6�G�
�+<�0�o�S~��o;/�`DbV-l��`x&�M1�y�+����C/���h��������.#N�O0Mp�=�l��v���H,7������x:f`H�>�CD<��n�G�-� ��3�C'�;�#�C0��qkY9�����	�"O���g����7"����93U�e� W����"bR	F��x����}���s�?_�a���Y�(����"c�pW&-��$�eLsW�}n!D�kJ��������T�)�!S���Z\sq�d�)��r>!����_�����+f��s��
��(�ZK�9:T�
�i,8[	\U&"t&a|����z����@��S"�x�(�_n1���*��l��.������T��_L�3�F�4a����[0���nc��l��-�Bkw/=�h{�2����XO<�C���\������=I�&��00�:8�q#�Qb��I�k,�d�d�
q��
����FQ���������.��V	[u��x$3���U���p
r�4N���J�Y$������zi���r�k���b�� T�����A�S���l
P���G&���U�E�)
����F�x���0�N)�W�w���.�\������V�|$J�7��Z���F��ZO�8T�%�%n����@+u���|���E��U�71�9�8����M]�%T����K�I6��8��'&	/�'��B��D@��k
S��?���J��	0R�M�U��bI�]_&�������4�G@xc��.�S�M�a�
��������I,�wi!>��o)���u��.��T}�O?��dQ5��&�0���c
E��'��T>��.�`��ZT�P��Z���������Zi�@`�w"Bw�EF��f9N��z�0�c<�;2r>�������!�q_��G�v���T
^��0��n�|�+�&\�������.�; ���q��3�oqV��	w@{�6|$o�Rq��K��9)f�|���G_��I�ri��9��N<8��~8C���i�5�Wu?R��������3�o�������1�|�����R:2�?w8\��p�z"�C!���
��Jro�\����������\�L�=��4A=g�F&�k�j:~�w?*>%�[q?H��a��;�w��Tq4n_��?�'�T���=�h�������w@�*��6�Y��I����<����,�q��b�x�U��}X�<(���}�V��H��>��?�O13�t���Q){}��= �O��=�>0�{@g�Y-O�����t2��]�
�~�b����x`��U���|�\^�!�@��0�.)bHN���j�Q.����K��Y]��o"�5�
h�3��k5M����hn�K���X�@A�CxWQ��4����je��,It�C��}�mD�e��X^��|@^�V���;�l�n�cu�q�2��
'�Z��|��;dwZ�Iw�@�tp�G������Ku�r�X���fB.��{&8"^��I,�d*lf�u�~1������x`TQ!B�4
]T���nGM�A>}�7Q�������������4Q`�(��0Y��8�%�����f�~�H'�=�;h�m�88�i��h����"���.�T���v#��r������H=*06�_�ox�������3.�2~LH5�he��Pne�'G��T��AK��W����C9����C��|'8��Z���3(����	�\���L|�/p "�8cQu�G����b��L�<j��}��!��q�9��k�(=��H�?�L�e�BC'SG�+��C��i,>������&���p���;��vYR1���3�Y�q:��Sp��M��h1_7��u\���z\�pd�)=<�/��P�����������������.��)������o�q�*.h)���SZ����s'�Lx��(��l�!C����%<S��,c�cr��J�(��H�i���MVa�#_��������*���m��8
�8�Hq�"�7�q�Y���AZ{���qy.�y#b�z-n�9��@�dB u�])��p}���}H�@H������59dR �gBRG9���,��V_���4�3�w���������b��s���D����<��E�	}�YA>Uq2^�*6-����`
�T�Ay�#�����F\O��T��?T7-�#��
��y�W�;:�#�W&�tSd���0|�W�oI����0bo_��F|Z��	j��0����t}�����2��C6���Y�J�bZS���k����H���>.�=��
g|���ee6��$X������i��Z��H��*MI,��_��Ub|������S����[�%,��q���S���P���~����@�;�-���81Aq!�3�6��e���@���
TGL�����h��@�~LN������������p �nG�
�W��.W��U;�%��UK*�W��U�o�W��-���d�G���*��F�y����Yf]U�u5���^f^�2�����S���P�g��r�Q\E���*G�!��_uG��5)�����$��P�8��(�
���5������������?���;�������������Y<�,3�n���4���~�����~�/�����=���sq��g�w;�|�������?������������������?�]q��.����V������#��~���X06t�M� b'�
���Nw�y���g�
�~�2��;E���I+�#�����^�X������9Q��-K�i�����"�����(S�M��]?�Q��v�Z�������a$�p�Mb�g'K&���e��T_���L�0`CHe��`+r�Tc��3�����S����[��
�Qmq+'�Q������=���
�#����aK��+�]� 5����X��K�!�<���������	.���W����H�sz�G�R�H.��X�����dzg�q?N,��
^:��������.��\�7�;0.##c	���V�*):F��"E<�9������p]���1}82�)���	�H,�������������33�jkjHH�|�HT�R���%V����
���t���i ��(=�M~�N���pw�?1f.&�5�g{n�fk�	P����h~�l`����3KPMq�.+~;"�5��oHl�G�g(����Dy�v
�R�
���@ �Jps��T���a���?5�lz��7��7�Q) '��1IY�#ob�������R��e]�1o�e������(L����R,?dd�����x���
��
}UE�<��[<�2
�At�U�����#M��4��lz��	������_������;���L�B����12���q���ub�7p�������L������<�����4K������O��2�&��~��iU1���LS��0�@6��'���D���O��=k����8C�����KG�y�:~������������@��/�`�P����=1�:xjI��:0F��G���p)U��Sh�g�L�����A���JTZ�
���bd�r���.��<��f��B,xI��AHq"�0�M���mY�K��^�q�Q���P7y4_��y�&� ���:�����k q!�vp�a7	��3��Q��;3��}���n��3V�Pc�EP���<�j"�yx���_l�tjs����[<���]����_����T������{���v��LL�0�.����3�2���
�o~+������
���rf
����T	�h����Qop�����\��0x���, pd���v$P��������"]����?��aXN�OE�����	5�Pl%��z�aF>��
��_�LU�����M�{d�U���Zjg&��i�'"3g'��������j���������bw����Klb��E=���B�����LT(���VbYd�tOnJ���5�%�MBMz�;:��+(4�7�������Y�2�e��
Tv2!�����|����TA�D�����n��<�K���=�
M��c���p��q:t��< z������~��;0;����z���3C,�Q�%s/(�~W���D�����1��e��B�F}A�2���V��pO4�F�������s�31�&�u���rK�%�
�?�hN���H��M�[��62(����#�v�oIxS��T��d�x�>��+��"��r
�%-��������Fy���oW�g}�vL��'?�%x�b��\��X��ndd{b�<Rd�Y���^�� �>�A8���t�k�X�������eQ��G�s��R��e/
Wi����l{�?G=�g�^�[n
��q��s��r�L���}�n�����@���B�Jv�O�^&"��S1��������A���q���M�����pz|B������t0`4�����["�=	�Bn7��d��|������`���<�($�V*����Ir2}��=xs�W�d\#����?mt0�+#�+�T�5#�B���~&�B���+6�b22�����
m.9���^	_G�����'��qJ�Y�)fB���,��72��Z���}�(�����>9�z(�E�L�oi��Go�_#��X�"��Q�0����T�[����D
L����I�Z�2�D�G�`���
7qZ��0(��s����1�������9����s����x���!tb<3}L?M��BG�S���<h��a��VZ�@s�l��4|V�����O�}=G�=WL�R
���$�P>z������Et��&O��������b.��P&�V��t���;h�����K�_�����T���L�"��K�2z>���{4EZq$L"��������o��T��C-����{�z���VB���*��#2��pI�������d���@���x�s���3�x3�K���/lO���
M}"8�j��p$���D���Xu��H,����1{eX�4�������$�����~�B*g���4W���(�r�=��y8w�8����0fG4�_]��*��Ql����R��4w��w��Q������U�s#�|��1�����6+D��%�`KZD����>�����As�S�����������t�C�"Ju��t��c����}�[��#��9�>��%]^"�-����Uo�$a���R������4�"��p��#�`2�&	3l������nK;�����;�[�?��6&q�nc�����JP*|�����QR{�������P{������9@���'��>�nK��	�i �sG��d��O���^�1��$lJ��<�?>3���������l�����@��*��h�����s�S��������-�.��I�.�|�[�.�)�C��W��>�$�;3.������ch6��_#�}���K�k���-�h4Wg9��N���
c�0��D��d���q9-G�>~�{=^M#�|?�H�Z�#tx����Z�-�Qf{�c�t���uo	�&"��B�&��b�&�3Mg���f<x��A�6��1��a��?�W>�`S���~�?]�F�������On�$O�63FO�4qyj�,� P
'+�T���_]1�5��*��r��^�(�-�3���;S����"�~1z�2�`;�}l"
Aa�+
���mh�����$��J�UG���+'�dB�g�5���}J�hg*���ivJ;D��ZW��1W���`���c���C�Gb!�;m{p�T�����kN�6-*	�{��c�n�]��m9�F]u]A!�>M�q�7do�����t��N��V�I�� ��d�;LL�S���U& A�0D���"���5%E�3���h��F������� 1�f����f&��V����2�em@��,;��|�N�4L������KO��khnX���9�����1q}i�~"v���t8�u��;���p7��0nGba	��a��z�.���n�8��^�R1NX+hr;n����R�&f���<�f��B{��Rq�����U4'�������[�}�����,QF��Z��+D�2&)���7Mt"F�%\�1�!@���P����Y�26=��:f"�)��5u ����A���N�n�2�l��a���f��<3��e$�����6}����0]�!,��nX�I��5�h�*vd "��{ A�|/��`B
o�0H�i�Y�M����O��4k���g��4�[�����,����=��������������s���71����k���Q��[a��|P,���01	BM�m>5�k9gXSJ�S��E$�~�Uk���L������s�(�S�;��3W�qt��L��c�v�U��7�[�Oe��R��
�oZV���ST�a�]�7������K��:�4��+����g
\[Z������K��}����������:/����H�AtY��/F��~����D����/���q���e�e��k4�[����,��~�b��G�0���H�Tx������j�;:��{��g��*���R1��_�"|����3#�xX�k�����r���Av���\eX�p=��C����SUMW����8� ",=�3�K�<XDRUU!���Z�[QJ��2��=�g��6��@�3����DYT�VB��HX��*iX�;��W������k���>��	,Z���g$rX6���C���Y��
�4�t��c��'"��T�x�b(X�>^�����2��b�/g�����m������Zd#�����A�<�DV��)7����*�,~R�k?b��o/�Z�U�����E�=02*�
��r��]o�B��)8|c�h1��sdX��.hF�G�gf�x��C8!�������cBl=�c.�1H�"���I�<��������kQ��	x7�;l�����=n����yu	�x���P���bA	?%���8�.>�;n��~��Vf��)�g���zS�C�dO���H��6�c��][�f��"�n4%g��^����!��j��]a6��,�G�R~�����d��(�{����IQ�x*`%��S��B����-��:�����{�Z�G�L������"�;�oL�$��2�.dx��sU�v1?_Zlw�D���3��������>] =_K0q�	Q�]�Q��i;���(���A����3I��D���R''8�"Ad��9�x�����[����(a"�85�f�g��[�n��Y7k�t��TL��+���7�(�����@\'��?3��y�;��	G	�������,���4�eX �3	�{��]�Q� �	��!\.Y�eX 3��)��up_:	�(����20�g��6���>��X�I�Dl��bo{��~1|�N];�|����� x6��<�3Xt�v�J��:WvfOe{iw���g/����/*��]�{Z%Q��K�]?�oN����������pYniRqyF�H�U�?�Jl"��Rs�����%�3��y�nA�����@����g�q�r"N�>o��[O���x�5���#~�_�:�11[w��=1e��&�m���I��q\�L�Thn����
����"!�����d*6[���gZ,K0Un}��>�.M������`����LT�U0������2�-�(�!���G�pT����Y:�����f&1R��g�x��<�u;"��j��������_��V^23V�L){�	H����,A�-\g47���<�u$X�M?�������Vf�^�)��z;\J��dc���4[u#����Y��Q;�cxe^���+�{��U'SO=:��}3��E�:���g)�7�(�E�Y&�.J����e�8����We���<c��oNm����~�]�1�����������9V�k��$�i����Ca��H��.(L�t�_����[���>�OL��B����bfJO���Tv��'"�M��@L=-�.�3����C$�iQ�KP������Tr��g�)	X=�U��9XT�p7Ok�I�i�fZ9?WOT�p��0iu0���E�
\}1(�3@���OI�UExv�?�C�k��Z���d��R2�c/�]��O�
<����m��
1�i��J��#�q`L���PT^#R��>4ps<PF��X|�����2����y�4����������|rr�"����J<1�T��~���?�(�������l"Oj�>R�%@��/����y+p�;��g<K00u����}2������2:����0������V�3�p�b��F�����m��:*�������x�c�K�R!F�11��h�H�:a�u�S��p�VV����f>qP��%���;���<��)c"1�H�H��fv����L���RO]�v~g
�����:f"�+���	S�����yka��frS���"\��d��/��,r�efdb�Pr	��L�kds6����+P��(��y�xUn�*��R����������Yo��z���E����\F�BXu���R�i�5)�X��>=���J��
���$�������%��`���gw"�"�?��h`��B
8"I�{OT����i�GJ���29�&��l��;��Y_RU1�|���@!��u������r��DR�P*���c������z)�������A�����'[�n���M2tib��G�����%xx����e"�w=��}�������Uc��]e9����]fj*|����x������8����\����E�X"��L�}�����zB����43~zG���
�Q�5���B���'x�������	:�a�=�[�3���n�>l]?~�0q�DD����~+����Q�$B>��s���fj$%��/
xU�D<���P|1<���`Q�����V@�7������\��8Kx��PB��}�yhu *|N�X��`���	�P���������/"�V:��k�������/�]�Tu�cJ�$���X�H�� >��������\Q�����
�b��O�E5	
^'�7B�
+��r��3�(�2j����� �o{�r�EW���a�?�>��OO'�����t��<K�o�� bZn�S�g=�Wp]r~u���X���Y
^�MY�=Z��	K�l�Q����G�����bef�E*����������3:���A>��c~d*�G�K�'�G�jA�����1����oN��R���x#��l�|�fnf���2�v������&����a��O�wb����i8��43��U=�S*���N�T��)�RJ���7~�Ez���h���o��B�	G���)1X��W�,dkU\����r������kXX� X3Sq�}V������A�����DF�=����x��+C����JO�� '/�G���`����@!7�����na*�F��zp�pda9aS�aY6>��x6Z���}�+*�"��w��*�:={�D���$>V)&��}���N9s`�[�A:}0$�ceQ���p0��������hb2�$U��Y��?{���������u ����1x�����\K�E��6\�$��@O���0��1]60���f+��&���;�@@���|b1�����
?3A��o�X��T�UC������`�r��D?�'`6/�E;���8-�T��)�F�e���@�Mi+�@�u��WD�����>]����T*�����������p���U8�L����]Z��v����*�:^@����R�=���O����u%IP��L����G�
K���������u�af)u�������������[�o.����5��gn�`D�q&Vi&�
������5%[S�]lk%BP�?��L�!\X��u���T���#�����~RmnHSE��nL��[��r�44'"���9�A]�@E[U�[�
]�m�q(Y����Jf�nJ�$X���$�'��\�������G&-�D�9L���k"���
1{��Dyc���R[��_>�_-��TfY 1�;B���8:!|'�_�~��5K!���
j���M�L�p��l�T&����j���m��8v}�nXC-T��l����@$i{g���Cu�k�yf(9T���O���ak���
C��*�zX��%.�RL��d,��r�7�6���]�!7�'��Rw������"5����r�SC�������~��������������Oo��,���B`��X*E��!�&���)W������(�^J���D��q���'C����Q���ym��62�9�h�8���4�����Zh��kz���w��c��[b��y�����F��i��al�Z� \���gD�.x�����A�MabZ��>>_�$����I�eO�ynD�QAM������u`zL�'v�~1H�w�������8�l���MM��x����$ZJ+cO�,|2�P�Z�gB����4'��8�C���Y�B�M�Uks�D��qv���J�l)Y������@'�4�41�q�ES�;�J���D?�N%����u��w&�����@��0(�N�A�6�������_���H��������1���
�1Q]���ACl|��bm=����v|�65����&�p�-�r�>:#��LL
#3������f���{["�71���W�����4�_�:��nX�S����k�����U�5h����y>T}M2��L��s.\�]<�"U�@�q3�|�����%�����45_%X$t4��v���P|cxmEUb����G&T�nWj���@��~#�����$�o��q8�@�?�������R��C��"����%�g�e���������W^����l��G���C-�-�Ry�3K��M��kA��"!������j�c���cJGfI=h��?���ezpb�|q_Ij�LE81���z�qR�������Ff��v���*����ml �����	I�*��9G96=�l	U
D@W�7O�IbI��c�j\�Z��� ����	�6)zpd,��utW����UO"�^��B
^OEI=81�q��,@��F"����L��E,n�]+���i]Tj��A��# ���O������e��$�8
-8H�O�*p �
��b�������J����R�n{�oYC[��m��� �U'n��HNQ��*��f�H_{1�	�4/,�*�o$��,�?�8�f�D���b�^���l=�����K�72��5��C�5��J���~:�,��@4�gI;��A��L
��� ��g!���w����kf7
.�fz�zE,����[B���=����<1�Y�����q,��$�l�=p������@O�v���X���[��K���UG'��}.j�u��8�V���ef��9�H���_��pm�6'han~��� 5��I�KL|^��5`;c��M��	�#a��q6��N�g��}
���<!��M��f���s�5y<�k!Rdq|�R��2[��>����)�����~��/��e���P�e
MW�_12H�*��>
�N�g�D/�["I��W�������\MV��Wt�B�1�;�����#^��P;cX�2i1L��@O��}�7C�^<�f�&�s��;�������VuP%����q����/Vd�*�kO? t�wR���p
���!����!2�4�G������������|b��9Xo��t^'b������2��f��|��Lx�4w�xR�m	�uj���E�����HY���m�/�����u���� ~�W����=��	���`�P������,�]�Z� ^��,��\KR����;;��k������z
��p$��R8�:�0����pg�4"\����o�	����5����27���>Fx����|}-U��`��z��	��n93��{�f�A��O���0����m�:Yy�G��<q�ht��a�.#��v�`���-�3K|�O������s��z�/������@��u�6��KY���R�aM�%�����c�@E%�a�*iB���M���
1(=��i�Fe�	�v>}|��_Dt�g���4�������{�Wl:�w����1�����U��J	�t�{l
Z��)`�~��/%��21���L�%���lI��NB�����T�>$��w6�r�U�~���r�_^��Tl&����A�$��������y�yX]�������=��m�z�b��yk~�����PA*��XL��w*��!y'8C�����d�,�T������s����"��������jdM�gb�����T�d����X�G:=�o!R3\\���U����:��*�)5g�i�<��m��And���U��]��1�2�O���:~~�����h~���#}d�<��_���eL|�F��Lf	
�����Wp~��$f������gd���hq��	)�3�;3��x��c���h9�jG�o�@#����kN�5�q���*����,��+���#������7���-��-��������u���]��?����32(�����T�����D��!t�\��3�&Fkm[j����|����p���
��*�6�uD7<��yFS���1��7�ea�o�iz��i�t\�4e�tq���L��{�n�����M��6Mi�t��w�F������b����i�_L�;�
W�z��H����~�WnJ\?R�G��+N-d��2
)�E]f7����3J���Pn!�L\?0��&�}�J�L��^�3�w��SH��X3c�E�S��av"����'�e���{X�[2��F��C���b0Pe��-� �n51��:�p�W�������;W	2^�_(W�P��76��vw��D,������m�&aO�W� ����<)|��LT�������\�����:?��-L���,��N��wE�STF�p8����)-[u����i�
���X��12��4���X��D
��d!2~�dfS�!efd��P|����g
�p�pK�)�i=�3e���}�A��� ,)����8��Wg7�6J�����[�����������w�Q3
���!�����<�����_2s��_3����V���aS:����������T�Z���U������&�0K�����=Mb	���+UQb���0��:��Am��<o�Q�sxr�����c��������{��"��ko�����X�nP^���@�����<ssf�r�9�v�N�\ ���>J>��G?�u�����,��[��2&J8R�Xf��1���Bg<| 
��6��y���vfe.o����`f���a��GA|�\�D�D�"����P��*�0h���A��g������;d�j"�k|�IAa��W�2��w��7��d%DH���}�@���y��{f�� [�q��;S�0����#���c��*s���:�]92hz���������5���Zc�X�5F��q�Q!S��.���u���o[5Q{2���=��,$.b��m�p�
��g�����K<.�����WD�\������I�<����:�pL�A�0�m;��q�uj��'.��ty���X��pq
RZ��(��������(|�������1�cM3c����F�����B��0��0EFb��G����.41hk[�����b(�^�����7���0k~��o�f;�:�D��A��������"�(C��SS$���,"��)��q%sXc����/H��u�k'"��-��@�E��x���������0�lu�8JRT�b#��laf��R�)$�J����F�+��Y�6��vm<�����di�|��s�U�J��J��"
�L�m?��6�����������m?�_nO�7ygfA��j��������ks��P���������pD���
}���
����1��%�3��9<�[T_��p$�|Y^����/5v���\�*s�}_]��06��b���f��A	��������V�yW����(��7���aw�Y�[�>b�-�T�AT{c3�c�?�n�I�N9c�s�Ix�uf����:�J�b�����g�h?g|!���	9�_P����+���:������v��X[��Yqd�(h��xx��T��E?����7�c�������'��r��zo�;<nV������@,
�l��=4L��K-F����@E����^������=Ov82���)���{\}���Kr
��|�����u�V�(G9�%`�����8SJL�7����Qj�G����Ln[������c��{���c�7D��eh���<t�q��������������n�v����
���c�|L�-Ca�X.��py=��w.���o�\,��k�X.�{�X.��p�|��G.}�������6�a���F���>\&,��c����k�5�r����t�*��\>�J%���.rJ�r�X��
T��U�����������n�+����^������
T�e�S��P�>�j[��\���{�����������x)�������t}(�`�������l��m`���������
RLX��5��k���������b!,����YJ^oF���R���A��$��:�`��Q"����0�q�q_��Z��P��"���|=;��bTy^�>�����}P�y=t����z(�A������>���T���y=������>_���K
?����N��:�S�Z=����z^���K5��m�~��z~��y�����s��7����BW�`Q��
]��=��2't���������?���SBW�`I��	]����0#x�OV�������?���BW�`A��d@�fvO.�oq�(�4 �j������dH"���7
��Z�xqu(s����R��T��P�������������P��^,�b@����S��������J��no����a*�n���z���aKr^a��1�01������
��t�Q��^@ m������R�������|v�@��'�~
�+}���!�p�+0#�:�7����������}�"l�P�(�}"k�Z;sg5�<������
�$��x��, ��^R5K�y������[Lz6�'MG�bJ�����������*��"����O�-����k��gf(��\np�����K�" �����?NJ���\��L���c!;{����1l���=�o~���%(#=�����w�������saD=PYD.p��$�T�X6�q���gr�Q_<N�p������o���$Z���<�9��g&%���<T���z1
�j�����['���t���	�9��I|" �y�N�7*�Jsl���L�PV���!���"�4S���v-�����.	%�s��p��P�����kk:�u*�K��:���g;u�w�~cuq������@����������}9����+��t��a�,^�d8��������U�ZK.p=�R��@H����_K�:����E������;dO�������b(��j����X*��P=�@1�S�9������N{������e����:"����<q�����vN��3a��ca��`{��S)f
�j�	��Qm����������k��U6��?��~9���H�|1��_�b;��R��3�m�~�?�}8*D�����,����1l��
�Woa f���
f�<�m>�WZ!�jO�M���\�i�;@$<�.�������)E�|s�����3C��b�k������b�]V�����;�s�lb���������������=FD��$0�������P����(��
(�����S�����a�b��<�e�
�yY�Z��)�~H@��C��b���^��/X������B:7���a��0��i
�D``}��V9^Hwy�r1KP2�S���K�yf�9SS�5����T���f�)5�c�8y"�S�wv\���V��q�~1�"�C�88�������)�j�X�]��=*s�>y�;�A�acx
����������3�����V-����w���#a���g��>5�LL|�O��D0o�L,����j��f#�m�b(�W���S�w�T+����[�N��4��R�<�q�<T���|����'�G�����41=�	v�:����K�l1���V���A�*4����{e�����(��I����
&�R�im�����q�������}�u�������d���ve|TB�����x ��z���O��Y(n�Y���Ggf��Ox�#b��r`Qt���$�^�F~��g���F'nz����^����b���kS�P�����l��}x��7>@��K�n?kb������~ZB;3�tn�mZ�*�uj��EW�R�������q|�)��\R?��D�9xG��
������b��``��T����0�������{-V�~T�Mjx�N�V_���������n:*���1
t�n��'w
�[���YRl7E@s0���2t���DvP�b����q�����_�����3�����l��&
o���q�~�$(�!G��	�����zo��F:���i�g&��l��M9W�ZqY�o���V
��o�j���d"4�Q�m%d�q�-!�#�s��Z'���^�a���M/�-_�f���<���L��w��c�sQ����!nZ0(f	����8�����)������7���w�!.{��)/{:��JT�G�"�������7�@���qd��;atq�&p��N�F�
�:��=��-����>������������,Y;��C#t]�����7�J�c�������������-���+�����V������%�Nd�;.���c���l�#A��1�X������Y��1��`.�?VA.*T}��iK��5�^%hT@��]V�V��=<��	��(�����>����q>�k.DBn��8�*����a#�Wx��
�^0j���g�r-�L��K�d���pKd�)����}��V�A�2�#V�X}��n��"U���������4B��e!<�l=�C��l�=�zR`��Q6��wX9��|c������p!�x���s�(/>�<��g`4������k^�����'iN��Kx����A9.?2xf��
����+N��0h���G�=���[yFb��z3/�ah�;�s'����������K��[��Zr����m������Y$�97�g�l��/�9x�]�v&�al�#����_��9x�_zS�fQ;���m�T���:N}"*1���9VR�����)C�L���o�uY9���0��������a�����:d���eb����o�I	=j6	q
G�R�l`X����?��=�D��/�Z�!�~1V�h��a`^����)6�
9�B1����xa��n��>��f��@z-��7����T�>N,��	m7�o����-�t��[���l(W� ��Z��sM��������p_T0�%���\��]�R��a�`�Nm�:s?U�����.����fQ�8����up_����g�ci�4p�)?���*�#�^<i��|'��rQ�S�v%KH�;3��WG���Y&�����E�������&^\�N"�������H�:���O��#a�+��{��I*Dj����7�
B%LD�Y�7�]��EcX�t0�s<1���N��?	��;���
G���,����g�>�~��*	%<3���q�%��D���J������6t����q�zQ����=�o���k%��J�����w�����x8shmc��t%Myf��K��'Qq��r�9��M'������?���"(�,y��������7\�1|�'�/���T��<R=o��I�LG�4/qtLK��_-8��5�w�X�i�U�5�@Thz�k��a�=�,A����ug�9��A%3c�z��[�<jaf����$��z�Uo����'��2Y�F�-���l3c��%1��OH��G���4K���g�>��������k��W���*�����T_s�[[�gt��I| ��=��0p���i�{W�z0
��
f�[��377xyEU&��(����O*c���Q�Cw� �h8t
�+�X0r���� �����z���&���p��%(�1
K�A�jP��*8�!�����3x[�j�S��1�W57i�9Z�B8�����>.O����hGn��������y�vikh��Y������	Yk�(�����~��T@t���|p�,�~��~gf��o�'�z��I�$|�������v�#�fwC~ ��OB�K.�{�/��d7u�'�����������A�5����U;�V�NK�f ����!`�h�GWt���&��8ZN#c�/��;���m�.W���\��V����]=��S�0f�|1��`o<
�tYR�I�-B���rb����s�I0r�~�a��|�q�y"�����o����`,a�3?b�P��!�H�n��^�/��u[�O.nO	K�q`ui���r�~�j����7�B���i2�����0�.���,b�_b�� o-QM�b������L�X��X�����'���~3\n���@t�����D��=��6��#S1m~�4m��@�Bt��.H/��u�X�h��������M�Lb���ex��04E"CS���%�a���b�����bX&�>D�&���"Xw���v�4RM=���������LM�a��L�8�S�X*{����_~c�Z<��'<2�kc��}:S�����;f���6(�J,����M��\{[��	A������T#6������J-T�e���e�����`��)V�JJ*���/�S���ex�����{����O��6��x%Tw���a�|j�F�_��n�:�������)���7�SJ���)��]{_�lDMtllu�P��������G�r���CD�&����D�p�93'�����S�����z�wg������s����:P4����{�^@\�^T�B�����@:�$������T�tN-�
7]x�����fx�h!�7��uF���T�d�M�����5�e��/�Ch�p+��.rj,
�����N�f�(�������'����L����/a��/��(������F6�n\|Q �#,��i2�I���r��[��h�}Q8���*��h��F���Z��N�
K	d�
D|�H
��\��a���,~
��5��-���x��s��!=�&Owfl�	���0�Ss�<2��O�0�E�p�N�N������Nu�Xp����Xp��n������r)\����/�Up��P,��|s|������(����X��/�p���P�m�iIt�]}3g���k�3��H-���Y<{<:<3�#R�ym���;Wnb5T��C;�W��A_���8�k�<�L�9�	���6�;�d�8�"3�K�%���C%�x��_<�8���<<�:����S�-����eTt�$5���&��_eI����'d��o��Q�g��6�k=�E����X8_�r�7��PxUd|e_�L�x��P��b�����
�zF�����k���DW/�:�c�����������*#E���1��0��p-}�^�� I���_Y���S�s|����ZG
����J�F���/�CEYVB�,�s�D-]������i�-����������w�f���C5��lv��V��_L�
Z'��@�N� !�qF�p�tR��%?A-�}�So��&�i��U�Y$A����e)�������9,��)`_�'�W<�<�}f�5�[�c�����	6��p��%5�G��_A���`��������J�Y�J
�MgX?�g�p.(��p`+FO�842*�-_+��.���+�U��T
�v�����(g��c�c�����R	l(E_����R��������Xc��z�Y�a?���� �F��BB���Q`�?S�Z���w��
�������+��Q(��2�	��h!����VY�Z��2�D9��-��o��F�����%�����Rr��=3(�/�s�k!�wqfq�U ���m�4'q��UO�G?�0O9�V��4�M�@������Yw ���%�*��o��>S �5�[x����:5�r�uZ ����D�6��=
��^������|0�p��U��x[��Q|�����A�Z�/�nn'4�V����U�� .���Y�9������:32���#�9{33���q#��X�qs�(b������d���|��20��������
�N�Wr��D��O���������P���V&���3�����~��4��1���R���,&z�J����21	9�C����������:`b"���L��%�U+�4�;S�>�I��^�"Q)���6���,�B���z�qM�b�������/	�%;i���t�TN�|Q��+�n��H��Vo���]�G'���#�����S�����M/ss���Q������S}`�MZ��?��qj	.%�1�/��$��DO�g���t���#�)��eaN�����
�|�IDx��	@�n8;���t�b����]������:d>���`�k�!����/
�\��s!��l���s�U�+��*���(��b���������l��a��� ��\)��������
�[_��C��Ff�pN�XH�C�{'�����V5B/�,o��������f��#��N��.{r�
��
�
���e�X63}[C	$�I����HU�x�m��/2�y�	����"nz��b��Rg����������82����k1	� ��q��7�|�g�I������E��
<`1�{e���8vF*�Q	��m����J$����`��� /�����/��T���&h��:'�J��E�F7��bd�0�s��Bl�'$h�&��/��+�V�����BE`�������Z��Wkc(�8�F���s�u��UE2��G�(���C'��A��^#4������C�e+5N>?���o
GBcbC]��//����2�&S8���b���6U���[��r�[�T?u���I��S5�?��e`�}�l����8z�o�@T��S��$'�{<�]�;1	O�>QU���!������lO]?���aE"XU*��]>P�T��m�H�"�2Q p 
�y�]5
L�������e���/���\��ms�pdX��Z����Aa��v�X
RE�V�Is8�G��@!hd�L�>3l�����0��D}�)�q'��<�W�������B���yl��[�l����UR~�E+5�w�Q�ip�W1"W:����5�nN��u���l��@����b6w*��|�a1������C@!�v+��iX�17	<�Jx`6yV�2K��4�3Up���.���L�/J�����-yA��Mm�6T���:|g�������$<�?QK0�IZyhk�:�hf6w@�nk��"�wo1�68���b�%S}�uUh�>�0Qq4w�����_Y��j�+F����=��7��2��-�GO�/*��C�����?{0[8+U������##{&���kkRd5{o!�������������;��pjs����N3���=���MV �{"O���-���2�F}���4&�������Ob��`�!=�NT�a�	�50[�Q������)��L�^#U�+u�v�XG�A����n�tyo�6w�(����HeM_6�65��>d{�`	;�}�������aj�e����t�|H]���D��=`3���#��dh.H�i�M��������q��L-nI@u��E����AX��D�����F�N]#+]�V?�u�T6�j��������m0����opE��Azk`�A,?�j@����A^`���Pi!�r�
���ok.��
j�f[���.xTg*���b�� T��bS�]���36�`����Sn��8�~gf��o�o���7_`;S�Z�V����%�����V�N�0��O
/���92��t���;�i��Y"}�
�V�\{����!��Q�:G���fDq+�r�����q�$���WI����\��wZ��r��{���QO�����] �	�~���A��b��������&~�L��(�N�Opd=�sd�T=$C2�R��X�ru�8-|��W0R�c�������y11<�@.��O���8[�N�-r<���]&2G
���0�&�M������.�}��0g�,=�S$�3��5�I6G�T(���#�3,�d������]Lo���21?�����>��D�xD�4����lt���0�AO]�l&WJ�<!��.$4:�<��g��r#C�xee���c�3�&M��7�M[�wfmH��$P�:��E6��)C�R�����~>{�l��h�S]6iCViY3��mP:�����a�
���;TvR��VH�i����G���0�l�&�|����y��B(X�#
��6D���(��!�}v<��������+Zg&�{�$�c��R�
{9�K��Z�7���x�����_\%N-19i����b1':�L�63x����b���j��Ib����Z�F�z�i��3�(������Xc�_�fp�P13r{8�0G8�U�]fD<��#���c]M4��Y���!)�� ��EU�:����<$\�,V�H)�Z�$�eD�8��bf6�$���2��m�>C��Q-N���J�/�����
t�+I}�6u���U������t�@Tu��9����f�v|V]�����	Ezj�� �Ez�����j����f�P�.�)�t�
����Rrm���R��H��r����V�Z��M:�1�oR���G�EW����L'��o,gH��,�pM���U\�N��5U�,1�i����&mJ�:�
�R��e�i���T�
M:2����"]��m5�H�@�S-��e']��B�&U�4���x�
��D�&�(��Y�bT�J����H��>��j�����STi����������iWU�m�Nu��k�2m;����W�J����7��,����NV�����{P�������'*|����O.e�%�] �1� \��cW��D,��}��k�&�(���[b��^�^xH���9�U��eL�-������5H���^�Pe��3^����XQ���Ct�t�Z�b��L2l�+>�S�C��}���C�`�zHP���*��S����I�/�����d�a�y���K��������@�Gb�������b��r�	%^��LxC��������
�#���a]����+|(��vu����U~�	�\��"��2�9:QU��E����Z5	G���BZ���J�\���h=���T���k4���.}+>ba��**B.�3SE�M6�+	M%�%*\(+[T������jd��J���`%���
qk�������@9��)�>�1Q�@a48K==����Q�x28O>�����	H�D0�!�������#�Jw�j%.$#����i���]F�&'�kz��!r�
����Q��i�W��Z���{�l|U�u���H�p�����M����t�O�#�O8F-��M]�ej_c�DE���������~LwoOY�
V}��f	�?�8����}��(�]����(��LX����S�iC����7G��_tn�)����b���'b��I���'A^��|c.ma�_�M��J`�~b{���-�:������0l����&_�R��om#�Fg'�|+2KP��,�9 #S
�M��zd�z�������H����S�P��Kf_�nw�0�h�~sK�Q�z|��1��\��F������LFF�3:< �������:Jc��t�	��W}���7�
�%m��Q�BT������JG��N��|�9��I����s���?�����b�8.\t�8����T�����$��g��M�N	b�K�V�f�����%??3�a\�����0H�8Z�M�W�nkU��(�Ng���\�/����C<u�hq��A45�/���:!T��u��v��|�R}^3�����T�����[3w�������w�]�8VI�:�>��n��wg�#r��^���in�����b����Y�B�%e���`?�]����{7�fAc����#�=�B��'����}p{�����&��w�=���+�aG����{gpH��]>9��7It����3oT�����b?���������:m��:�l 3�B��.6;���������&�4fx�(F��l���jI��f�$p���0���"�L��-����[��a6���l'�G��/�P�����C��|�/7�F��4�9Bwg8�^��S��t��l�����=
�'��v���0�j��Ld�����W��y�*2��nc��'��F����(���aOh���7�������f�l�>�����"�����e1]$��ET�����7�q��-*J�'>Nf��hLl�|���v��p���W�q�hI`GH��*d��"�w������(,}����#f�.����L$��5������ExA��j^I��`"�M%Qj�e�H�������9�6����bG�����'^���� �Mi6l�5���8�y�9gz�g��I�
di�{�>�����Q����G���g�k��-�Z��R�RQL)�������[�f�D�9j�I"}=C��o�b��FI�)#���Fu��u��cXo� r�g�m�0o9��$���u9*]W������C��r4F��2]��?���K(�t]�F$m�(���%�������W-��)�U&�W=��j���H5�2��:���Ry��HWM�U9�%�R���P�s�d�|8�&�����	u�%e~l<T\�s�X*��������s����P����j�7+y���\~J.���_,�7"�o?{���.ev���O?����.z����~~/�vA����k\e9_v�y�,������?~��~����o���o���������}��r��D��>/"Z��&�e�����q R��X�zed�cD�3���7�~������bZ��2���|
��J~�!u.l��r}���u�"�f�^g��)��o��|���5��������'�q�v��#�����]�m��L\&�T��o�T?y�C"@M��4t�Y����tm~2���@��{�h�6��OV�f������\�G=���V"�@��N���n%�5P��.����8�h�gIJ��/�f��) �#��%�I�����o��H�eJ���y/,�������B�b/�1��,3x�Q��JD�)�f�"����Lh#�
�_�{8�����|}t�s�����^����)�#W�86Z�[#���6I�A����g�T���H>3�f���	�_- K�������������(���^�9�������Q��ul���m?���p�]�t�����S���8�gSk��r�8\���5�'��nj8�E��~!�(�%zIQ�����e�������w�jK�M8����5������������b��������w`��A�Nr���"���$�]$�����C�,���rT���/\�@�$����R\��a��`qb7�������Z\��r&C[��R	�zaxX���;?tG���W�7��;C�;;EK�T����<3��I���Q=�pw���%��:�%�2)�d�t��X�\$��Pe��f��X�E<0�aa�f�����M�);ulU��k8��qwO��a��	M��[&��=y���>qH�2�Z'��|���]������6d��l��, ��p�<1:��J��������f8q`�W
'C3wQ:^������������N������������t�y�����f������$5a����Rl9Z�K63�o9����X� �p�<�M���c"�(��=���}%�`���a��(�eX�
��Y� 
e�(�v�Q�����\����8x!�d��1���7�?6*N > ��^����N�\���������+m]�����

���=k�����u	���B����������1M�������L�{(�8(M��"I�K�6eB����|�Ec���]�
D��@z���)�M��]?��������>G�z�O��LDk�����A��f#������!�8�qm��1�a��w??����X��O~4x���fl|�y��c'"Z�}��U��|`���W�6����+���Z}"���4�DKl"�O�?
R��q����\r(�BD�4��D������v��`0+����i?#!�`oRW�l4Q�mY	0�rv���Q��]X�g��4�
�&��E�{������%[������"����������95����Zz����d���&�(�������"v�L��F���l2��-Xo��A��om�h���'$������@t����W9�{��,Vg���gZ�j�'�x��������R���*4i���������T�*��Z�@���Q;��V�.tC�5��}�m]Y�a\��5��$H<��lH����+�����M9�;!��O��
<x�&"Z�6���#��"�#���#m�8����6�\����a����J����W��9��3���'2n�����;Z��p���Mdh��T��;�g���w/��B������4]�����b��?�}�Db��J@*eb�{"Y#@8C�@�DD�����6�8�m��AI��Iu�lJ���
��F���� ���a�9�\�����n�����,{�&��}�kX�D;�@���h^X��+� ��+����������
'5r�P�?��Y,�� Y�|�<�cs4����&�}���7��T >U
�X>������0�a%W�����2������W����r~3����� k9U"?��@5jCYf*Wt���3����F%?���Z^y�#�LhS�������$�sx����{�T�W�4�x�	k�����h2�u�����	���]�~W��������^8*��[�V�V2n��O�7��
�D������M05�:f�o}��@)��������ZU�R���}F�j�J��}bV��Ui�	�O�Dz�\{�>:j����R�������t`����:MY���o����D�^����T{V��x������#��6����S�Q{0,�Z����C
F�v����"���'��_ti9r��[�	�m�Y�GX{:0K)@
�-A�W?l�����V�C?��[��O�@,��q�d�U��~f�����>8�r�P�E-jxvj��Xg��E��y{���Y�oMD���]_����i	Q�K�����(��}Q��(�r
}-#7s'���Q��yc���F�[��NN��j���A����i���gF�5��n���Vy�MT ��6j��B9k��p#��~��Z�e��6�������`O�7������Hq����"�uN$����O��`]�>����
D��<���.Kc�[����U��j����T�T���F�K�;����
<(�D�[��LT�n�����f����-�?�Q����	�Y~s$��O3)Va�f57%�T�������G�?�R�s*���2Z�m�����wo4 ��_���ep����pj$�m(I*��{�s��LD������}`g����n���\��8-$���w���X�2Z��*	�"t����E�S���WC�u����D���W���
T�~���ju����so���i����?p��w��P]�*����x�6!������z�MQ�|��f����;�m��)����2�G�m�~!�P���M�
Br-��>���,F��������d_����+|:��e_���;�Vk�N��CKS�g&bs�V��dpL����3)ZKR������ 4d�6P(��u�P�qwd�H��u{x&�Y|�����~fT��-S����.`�����_�H*u��{"�=v��
�@����~���a���W�M��=[����������E;953?/2�����V/�yj��s� �m������C�+X�������+6\����|���4g�&"��y�1�l[�z4|��`��}����[��Oc������d�gOJ��9O��U�|�2n=6�6,+�����:��2��j�
������{s��MM-�e~b��O�I�"&YI�%����S8d2N[($m3@��M[���"��E4���s&�/>A�.�{n��U/Db��1E���e�������e},u�;,�L,�'���-`A
����P���\,5���1Ycno�R���B�89����`�*d�O=V�v���Z!�j��|y���\/�~I��u�����2��2�r��dh���FL��h�+�1bPV��j�'V���/q�cvt����L ��+���,@l9�+�:B��>o6e��
��Z��
b���EDk/#$<Q\^i�|���abQ�/�a�j
z�#y�+vC&�&��#	��P��DN�
��T��6�����uv06){�V��"��G�x~G�B��#���w�>�������i�i�� T4/� -����B�3f�����+�Whc_/Q,q����}q����g�i&]=]7�;��>��p�[^t�-�z ��N_���+�v��93f�z���p�4O�D�]��@����
��������mm�"(bR%�(����F��������Y�7���C�[4;�*�b�q�n�y
���v�T�������6A[U���VO�}�@x��V��|-����������R����P����S��	�3��Upo�����u3c����<������,��cs?��3�+2���,nO�i�I�3*@��[�iGe[�1��c]��W�/��hS�+�gov����]�~#�����E$�N��>/�5�����^O��$���s�)o_�E!��j�{E�:|���y���#�;���O!�/�DS�
������zw�R���A%7�gR�m
�e�:���LP���f��-���`C���I����c9vsu�� �6�)�Q�@G�T@�-������?>>������R������Ey[^L�IG��(y��86�������'��������"��/�h�?/����5��p���i"����c�4�h<��i"�n��`\)>�R>R��V;k�S��[�{Ap��s���Gc�i����F(���<]M&���h�Xt� ��0%�o~;�NT�R?����vz�D~�3��PS��^�K�.���q;����0$
���������O����]�ov�D�%)��5�� ^Q��:MD���%��1[w5��"?M�!X��������|���f��{x�������0�+~6i��23n� ��O���5��"�t4��}&R�F�s����d�`$JCO�
���%���H>/�_l7�/�A0�'.3�Ln������D�`q�7�z��.�Q�?5i�_t�rGT$�'^�3�(���L�DF��<��e��b0���H���,�^��D�ps:u(m�y��~P|������o�$kX�N��|�r����E�7�@�u�x�g&K����P��=�o� P���=S� �c�\-|f2����y������3�-,�2U �^��a���Xa��P,)����b����6�Q�efX^I��'if`j����0���!���bSuRV�h��k�#�b�f�[$<�e��{g?�M�Qi�p�V�
���b�������VE�o�X������<�eqv��3�Du�n9�br���ac���a����X*�x�*�p��gq�l����8���]����6�����D_��O�e6��DP�6$��%]��8���_�w'�����>�T�_s �;a������,��s_CS��9O8������u��$k
����"�-��I��������0w)���919��g&���v&�!M?F�t[����#�82����k4z��nk&�1���%�y���X�Dn����7���L��/��f+?R�F�>,Y#i[�M�8�[�j�H�&��x�
���c9��e�eE#Q.z�M.%���p����+����	f�����yy��D�:���7���^��;'�r��!g��KG����������D�{=A�0S
�N{��������g�i�T����es��R6Q���~rV�������[����}8�2D�</�Y'Ok�����x��$�p�����y�N����n�(3�CD�f�q��LR�f���S��2�t[���N�-)/"�D��t�����{q�o�,������t��L:,��g���4����b�
gT �5�d�*���g�MZ9t�f/Q=�3m��h�z���8b<%�^�1������x�5���D��T"p�H��I��B��z�o� }h$z�D�dg���i �CU�.#�
���F}�`�,E_�Z�qE�4����B��s�	��H�'K�5��m�";����{
�I�����1~�Zh�����6�������PDfl�b(0#�Y�[c�<��r������G'���'-��x��Zn[)@$��F���g"|�%Z,���4Hd����2���8���o Q��O?����1*R�9�^Z'�<��^�7re5�����BOr����k�Zo����!�I�7����v1�3}�	.��.���jq��yl����U�M������`7���D4"�����~�\�A~���t�-bf&lb#QHb���vW%�1�j�D��#z����6z�2Z�v[�IJCM��D*�����P�:�e�JZ+&��
^P3o�V�Z���`�;��OOH@�����pL����A��TG����%�M���Z��	���~o����J�hI���u��/��$�N�y� ��SCo(
�������yR��U���Y������8W���A*�}�w����m�Ei�X
��=.�y6���:1�,+k��"�{4��6T�X��H���<������������F/�9�����.�o�	$*������LM&���t���q�Ps7������zy^�%H�����4��I��k��Kj&Ew�|���YF%�c�#���5b>���7&O�1�V���|L�!~�6�]#��s5l%�;�9��#@�nn+)�k;�D��4���o9����1rX�R���_;��	��t������RS���Vrz�"�wl
���t��Y������q�hpXryf"��Q6�Z@��c�F�q
���@���fcG�pG�'�z!)VvG���O�������[���V<Y���e���=
���G���|^$�iv���%r���%w��6S
�����m�9����TN���KZ���]�� v;�]7;$/���a�|�����MO~���k�qX+�J�b��y>-�(���gm�-N@�[��ZT�b9��`9{2����M&M�Z��W#S[|<�z>	3��t����6�j�nvr0��(l�Md���Y��d��:^�������������{w�=0q��ucS���M4��a���v3�����ok���%�'��n�q.����;������icu�=�����n+K�T��{&�*U�=�����_,#=���p��o�*��	����f�Z��D��j[+���wi+6�,F�p���j��&����
�7��s��s
3��:�mw�0�D�D{��+4��)������U+�j
�	�6��H��e]-t��������L[��u���n�����+j ���_�^��j#� I��k8uB�V��r�Nawv X�r7;������9����X��?�C����2���nM�{v�� �D�[�����?�|��t����:�}��Q�<>3���p\a�bs���,5� _y`��~�}�>k!(��f+�'�v_Q�z��?�c1*3�m�>3�q�����G�����
��b��De���L���X���v�l8���(�b��Ll�Q�<EC��zO�P�`P?�����>L��|�Jn�vX
�V�v��D�|��,����<���PR��o|�}��J�)�����,�.v�����*A�1��N�w"Y���?�`U�R�I)�2�$G2����J��7Iy�����e�0|�}����������#�����Y����EbM��=����F2)��8m�v�������K}�0���&<�~��7�	W�Ys��*i��-&�
I�p�"Pg�
64+po�����xQ�������u��q�vPK��f}If��kZ� �D�R�'�7;��U3q���������Y������`H������/{����e�@Z����FG�:�|&�_�~��y�����d�����@H�|��k�;B�������v�����au���-�6v>#5|�3�d��Y)l�O=W�%��Z����� �8�����c#�f�m�B��@�6)3��I]J6�p����%�m�<r�&�_q+���m�q+���V�-���������,n����~���������������Y�����>�!��E�=6��������u�|�(��_}����z;��f�[=�����z�!�y��X6*Z����
Q����A�����������"����D��h7���h��_	���Bk�*p	�'�#a#1u$Kff2rZ��2M���LBc�����Y�@M����@�����3����"Y���W� ��L@$�	�K�[���H*�������5�4N��+(�L`I��bq������6���4�fu�q@N$#�u��%
�����XT�����V}�m�[3���S��j�|�_����~=��{�Gt��PL���`i�0$��;���w�8o��pC�����g��K
%�PK(�{��w�r�tlL�o�"��qLd ���2�l�
J2��6
�M���S�y"��d�/�T��'�WIhs{X��������Z����Peq{����E����*���R���+���]ud��'���;0I�<�DDky�x?Kh/�	M�w�i���T��;��!�&������S#/��{�D���������n�/>��5}^5��zwyY/.��i�5��4��1���4�n���"������m]��$���/y�
�v�=��1.�7����j���y���U@nO��o��MD������4�W���/�f������D�^��^m�}��Q���a
���_�W�Yf�V�s� �v�N�+q���,��
K�]����Hh:�C;�*H.��Bcsw |S��}�#5��)y��Y��%��I�w7x���8�(!������m����p���6Gx�HR��?��,ott��Z�]�D$sG���5��V rMM�cg��!Hr����'s�/��',`I���������DD�Gqo���U�~J�J6��\��-�������S�V"��-9�������!�������&���'<��~0���W�O����b����4�I����`2���'�_��
���`�N6W6~�QZ�QS�Q~w�GC�������
78[���[F�<��+	}�fo����$K*mw�'5-�L���Y��� �8���Z�K?@x"�u�
���D��7'���DR��3i
�+#���m�a<�q"��}�'E@x�������R4�����*����M0�+mU���a�*�h9Y��C����H2����`>�&e�����B3���Xf4���i����J��	�	/Z6z2���]Ih�o�����	!�r�?|��j�J����$a�u[�v�)�70e��,�
�)+GRiQ�J�	�<x�|�<+hR1��oUz����E�����(�[����eE#pZ.w<�V����/6Z<���R���M��~t�H���a.@_�^L�\�y#'g:�����:���J(��M��]�]�kW�s���4�����6��q�qNH�n����g�&�$�����!jy�"�f��O�7G�M�x�[k\�[�'����#�`h8�
L�+\*o��p�������`�p��T�QW�e|I�:Uv5}�6rzD"���|FY#�J�!��r&��-=p?e�9}�S?���C��0C�54�
iXW�
���$����5a&vH��`�D��cQ�_@W��%��Fl-�l%�nh�B��fk��	`�r�y6l|����4��r����H�m'�
a;����;0H�G/��Y���@�M+�gZ�����0����l(�������Q�������$�L$�)�}��
F��L��H�K&��g(}&���H�I'�{��J4��b��`�;�c������g����5��@����3}s��so�0�u6��^�
Si[���������K��)�:k��^�+����
��������H��h��n���(�l�hx���?wRA�������N�M��X��Sx��znnMD5�k����:L8i�	��ty�5��7\��I6��jc"j�'�`��p�po^@�MS� �7������ag<�����\w��e��P�3\r�.�/dQ����CH����S��d�����#��R�����Q?g�)N+�4+��N������%�p���2�4�~�������;u��^����c(����������\��������DB�|-�cA!M����iC���o&���Rt�wd�����B�d�s�����B��,�wW/��i�OdQ0z��-���`*��%/n4t�DjCF4�5�����������Q�g�a��*�X��� ��8%d��H2A^�/�3�a-z����`;��0g�_�!�H|C���}��#o���	�y�>a���^�3J boj�$}X�mj�TT��������� �[�i�5�M���4r:����4XU�D�����}����D4���}�k>��(��Z���;��/3���{S��4���1zd`X{���e�q(��!��F���E��0w�3*h*4��99���`1������O���f"��q�Uj�4f�)���Qg���eX�*X�
5�Y�{7�I��BL����=���T�����@
l�H%��hp1���=l�l��tA~,^�5��n�^�B+Z���M�	}��]"3~!o_��H"NN]/��H�7#$_SV���K��^ZjO"n#�g�Ft��F�R��=�+���H�'n��Z;0��P�M3�h�{����a)�PG���8��{��JD���pq]���D��U�����5b1��,��^�
?�N�����������W�-� Qu�P�X�r��L��g*�H^u�������e<����ku�1#6���'�,�Hp��������3�NG'�y�!G���������
�X��	Y~����~����>��:���9���U-5��$l�=�yk��y���T�{�;-�v~�d�~T�,�!"�����d9N���E>���1�k!�2�H�#-�<��n+"%;��H����{��&�*�a��WZ��zvu���z��x��Hw�6�t�\��>SEjp�C��^=�Z&���t�8��h��c�@�U�5H��D4��h�����J�k,�L<��yl9���?����Io����
����.�]�.q�������v�@%�6f�%�V�1T�D4����qyoi�hg���U�d�O�����}3V3j��p	��sc�2x�$��y��L-�q�q�g����.���7f��i�C`��}��u8
��D���\���L?/"Z��.B�5`�L�|b�v��j��K&���R4���D-�_%�(�W�4/��-�
��������XR6k���:
k&(��,~�oe$
k%��_Y��kq���z����(�@@'�=�Y�80����
4�g.���r���b����v�����3����s��y�����y���R�Ft��|z����7.����;^^Hut�U���=#�}�����������L�!{tF�\�E�D������k��a(w��m�����8@7���P�|�h�gm��[���,	h?���#|U��z{�f�z�	����V��R3���V��#����b�h&���|�o��d�iY��%6���ub��*����p����M&���:�`gw��=������J@{e@
�f�^�<���Q�no�]��3$e�J+K�L-&�tU�L�>�+E��� �w����X�L~ '�t��
���*i��B�sp3I�1��z���T{��9��)�v�/�����n��wb�5�������m�2�m���*@�Fvu�v��B���v�,�k�T���u�Mk#K��*k�b�{
~R��Ux- 6�;�ivDn��DT��s�@�# u�	m��U����������U|V�J���v���
���{AV����������9Sf���9p�X�������M}GZ����"������gs���P"������=,�-��R���t�����"�f��E��������vo���n���y�7�S9G������D�"ly�y����~%�R�\�tr�����G8��h�N���{����%m�y=�J����E6�]2�cy��� H���;Bv�h��$m�7B�����b�YL}y^(����t��w�sWk��w��	���h�[�9�[�Y9�����J���I�YUV��������J���\���s :W��� :W�lE��~u����6���J+Rp���f'�C6!�K��5�VZ<��/
��aZ*a����Z��o[���[�kQ���MV�:�����Y�)X9e��������
��gZ����_�l�����d�v�����p���9�n�����\a���������yN�������;}�fk��n�(�,��������J��vF������a���������Rp��M�zmn��	m�^t�E������������:|g�e�#�J�0o
�\�,���xzZ�h8������`(��d@�3��oy�j&pX)D5�ju��1^��f� �1���mhqVn��&w�TEH�&���s��T�@��^L��������1�4FknD��j���	�\�zY��D���
k�<�����7"��F�Al�E"M�o��/X2w��0��+F�bl��P�@�������E,j6���d�/x��_]�>|������v�a��b��>-�8�f`rI�
�����l:�g}�\��c��7+@��
l��e���,����}���f�����T����;����&�'���3l�vGe����{oi���>o$�+��3��5R
s��_-���p�6-�������f������,,?������S�e%��|��?�-a��x*�q��_(����Z/��r���ty��e����������(�!��~�����e�G��2]>�rYe�,{<�e��r��r���^/�����d���\���c��Pq������x����g�x��G�K���rNB���DV��e�.��������_T7�e�U�tYZ��*�e�E�.�L�u�Q\V�.�doS����}J���rYe��J�A��5����]�t��*�����*�r�)oS�[My�R�m��!����3g)��l{��������k*�[qb�a�w�#Pqq�=�����/��%7!��j��d�{5�}2�V�`N�{�����+d~�{�+d����6_w~�����_!����W�|���2_w?~�����_!�u��W�|�]�2_���}����g^�w\_k��;�\����/W����.z��~���9[��g/�W[-nfr�dq��pL�V[�dm��pL�V��di��pLvV[�de��pL6V�
�da��pL�U[
�d]��pL�U�	�dY��pLvUZ	G���H8�M�6�Q-�4�jO��pTk*
���Rjx����*Vo���M�q`�rk �~55�i�WS�-���t4�jI�6�x/���T�v@�
�j��d���4�S�s# �~5��E�^���Min%�mJ�q��(�[���?��p����3b�-_}p���	bj���b�`Q��;t�:��99'N���� ��
��RH��/����l=JO9�$�������3��\��
�6�I�������}��'$J?��pF�&��?f����J��
s�qI�"���3�?3Y4|sX�le�o~[��K�0��m8<�k��Z���h�j�X�4�oUyuI�.S�����
ZS%j���Z�K-2�+/Q[�������.3r�L�R>3��;��E^G'��Y,i\�_�C�����~��5,��V3<6W�����K��ga1=P��s��Y��:��������i��/"��t&bWR��<Q.L~}�z��R���I�a�Z�L?�=5�9&Nf�(-Y��X]�b�oX�=�\���H�h��rG������<���I��!�a�LRK��q\���$k�Vz����S�����j���9����v3E�h��I�"xP�����'2h��Se
g�,
����I�����_��c-���H�.xo�/�5��P�����\�z3�8�O���XF���U�l8���k[w��m��N���/nU]��#����$)�l~V��,��h
�3�r��y�-��"���:��%]Tt]��U�c;���H�	�`�Z,D������vs�W�,r���G"�2�t���<GY�a�I�u{��g�6�D���O�G'�Y��B��,���B���fS��f��d���������f�X�Z
v]��Z�Arhq�1����I����g�U�������QY��$`��&�2"'�cf"$�z�B�N7V-�
N�]?d
{4Tnh0S�R=6Ir�viC1��d&����-�����3i��\L����C�6Z{FZ\V��,���<x�E3��\f�/�� Km8�\ GxYLD�~�q����vs
�3��%i�x���tPX[Q4[���KQ�(4f�";��������U����	���5�<EX��di�Dg�P�:Vf	b�<3����,��xav�:yN%���c��j�h�gb�������f&"�6���d	$�N�%^��4��t��H��"�p��U���>/�*����AM]ke�����W��8��qq��8��9a~����,&7�����������j>A�IF���T�-/o��3,����5���_�K�' �D5�]��8���]~]-�����[+=���EXdD��[:�@!Q3��O��,��&ei�@�\�R�����4��B�ql��Uh��E. j�����k� �(�vI�}����x�_7����S'�N���BGt|���'���<�nd�|f��-I;�@wQ=��H�3�lV�d@��I#?��I{Zp������7�%����Bn�s��2�.���,�������-��a��H�%iL��3-�mM�������@����`GME��[�I|���z�G�B"�������[w	�o�R"���n]���>l��Z�|f�!�,����	`�(;�,�������N�5=}����O}����,��4��������c��dp*����6xZ�����'�_#�v /z��BwWO��4����$wY^�mk6��u��;H�}k�6�2�2��mK�	mn�4Lrc���K�5dI�7��X8���OL>3`��f�ZeO�z��$h��'������]��9�e�����kt-���U>\tj�Hr`TJv����Td���18���,����+�;�,�ROr\*��a�jE����WU6�2vl#����������l;�`�\�����M��2�L�iS�k�"r<XG���	����&��>�������Wm_?����0�L`�B��lP�U��nZ���$�X�g�dc�����I�A���PsT�h�RJ�R��8�a��T��Uj7I�y��f�I7��4�D2�tk�SL�{^`�[M��3h�&$R=����OL�x�	4������S-6��e^e�g������_��]�\T;����k��^�^l�[$sTO��}R����Y�z��>�2z&�y|�B[N���P�
K�%��3��Q��?��<\B�">h)�e��O��v3�Rv���IC�%��@wV���&U�x��-,tx/%��!?�����auW��dmf_FO�}&b]�$a�V�R4F���,�o� �����3���B/6+�.m.=����RL�%���w�.]f�Qc��u��]�����_9��l�s��H5u����ku��'+�sV�M�]��#'��t9*Z���:�T��18�Z�xS�Xf'F	
5�Rc��Z�$�n�
����"%�6�oS�39��H���T�%��Iw�����<QVC��i��$���8�W�d����1�����Z�
)p}�|#�w`q�J�Nd�w��������9�7�@���N�G�!o��N@c�0m����ht�@�@�M���R���+8���JY�t�|���'pjXx�z��XEz�+K�8:q�0^zO�#J���6�(z����Sc�b���i�L���`�24X�z�'��E��oZ��(�HP��y�K?
W���U���T�����YF��
�39��j�����Q��S�7a��������)��e�i�/+�uY�?]������=]�u�{��+�d�����%��
�'���}�r~��.�pW�B.Xf"�&��_��,�U�G}Z���vR��g:�mK���B�����+�Tp	����G8�gF���e�A�1��7UW�������f"z[�7���3W��X���w�L�CC_^(i�%����|J&�,���buwfMD��,������9y_�����~!zh��m52����'����t'�3��W4D�����4]|��en��B��n{�=��m�&o=`�����|���BQ>���+��H����N�����A����h� ,Nr�3*��b
M�_�W7���u�W������o�s�fly������A�^Hv�`�v�������	@�%��_�H�m��_`!�-�hI��Z��IOD��x�<C>��x��n%z� �������n�C}�l���h�V�n?n�aDK0!pz7���J��y#X��(��,�+���7k�����6c�Y�P�c��UALmMO��W�9���Z�������W���[�=#�f�JU+��%_�S%f�a�h���m��A�G���f�>f������������}g�lc���Ic��8���RP�;���=���%��a�n�h�q�/$����j���.���(a������]:��y��/�+$�/���]s�|��9g$�h���������C����>�'�^������!Sr�6����[�������{��P�f��(���W,ab~�iU�@��[�y
�y
�F3y�6���(#�pV�_�y�my1�{k�k���v���/�baM%���1s0An[��B�v�7m���	�ph�Lo�����7���S����~�m��L��)�����^��yf�q�c����+�X�����;��MU���kP�K��S����&�g��_;��������c;_�m���=�~�UI��S�4�>o��+,
;�m�{���H���8��o-3��f�96����1�+7]x����V��5�t<�wv�@�:+���&s�����9��)���Y��H2{�F���Cp�%t)�~�?E�1�K^��D�d"��e���2��(�u��6�}����v�E�m���X-��_�������WfV���x��Wf$����26���LD4;o�fEo�"l����q���h)D{+�������D4qn\L{������5�)u��%�M��nC^>z7�8z'Q)h86z7!�W�2���*�mLc�1\#>.���	p���g�9G�*��c'6x�������p���w������� �<�{���H��r:��droF�7!����f
��!q�_���H��p�a�����?���"�Qf�5�F�l���U 2�����e1"cx3p��MF]��~Y���FjWV���q������H�w������U�5F���6�7I�lo���<�7#-�#��y�1��)�[��7`�`F�W����8��|��6���(��4�G�xbH����f.��&�d�� �d�����������������������v�o
����c��� 4,_h?����E�e�p�/$�f�]�wG��h	�$;�`:��aI����K�3b�V�3�������m�_k�����[����ex m��s��O������t�MTRsr�?%�;&y�t�^�}�B��^c��	f
����_���^�m�c��L�^��9��l��p{��j��@�@�i^�gZ�����$���b#��DDc&�k����\��	
���l``�4��|����9M�f�7cS���Q�z���f�!}(�}��-��0����Di4\�aM+�R	��2����o��������g���H���ZG�I�@���,O��:��tq�GJ�����f�5&`���U�7���m�Q�H�;�����j��"����BA�uy��}4#�����^������Lt\��R���D���3����>N�o:9�����vP(�,}[g���
�������&���p������U��D6 ����[e[�J�e���
T"^���0��������?y�����-��(��H�w�!c4wF��2�%��M�����B>���q3��
�+����f?���B�&�5�
�
��q
�q�@	��Z���h��������af�L������n���nE=�0_s]f6\}�-5!���VC8�Lj������5��,�����p
�.����_�'��Ijn4J.�G�SO�y#�*l4��)�n%=�T[������U�\���o'v��oGv��������vh�o���s�*��H��������NS���s��:�S/�;�n~����3yCK��V�5�h��#�Q�!�����4�H@x=�r���b���Y�H�/��u���!<��\6������
l&��	��q���tc��b
|�������%������O_A�G��O ��Ut������#��K\����N�	�_��9�2���*d��F��p���J��k�����%��%=����3B���N��Z����X���y������+)��B6+{�M��SI������7���UQ���BE6�^���	!]�)o���Vk!�v�	�V������M$"'Z��m*�v��O���"m`�;o�
�h>I�/&��m��Yi�S�����7���Y����1�]z�������V����B_@|&����\B!�[�+��/$�����?*SBQ���+�����M��k���=�"{�	�}t<�y��x&���MRz��GO��70\����3��$��Z�,�%���I�j�@���1�l�����Tt3�����
-bh&�u�v��Mp>^E��g�	L��eMV�5��3�b
���H1�B	�,�6l����&�������

�����j"i��3�X�<n4|;�V����4��d&����U����������-q�|B"�lk�LH�����=~�m�0f�����3��{)�4��ZK�X��6�z�f��b
H��#4���-��S@x$������q	tC3��YPs��,�~|.'r�w�,/&`�UG�t�B^�~��s�{�&6���D���8j���`;tb
v��������d�:4�/��d�_'zr��v���_:���f;�yuzbNo��	�y����k�	���Db	��#q������LH<w�]�O��@�����@�����a���H�\��(�_a�</�.�;7��4d	�`W��-���iMD�M�l�R���Z96�l.H���W>�U��%�~]���M�h�'y�4(�������gSgqq� $#���<4�������h��
����X3J�*�X��i��H��M�K6a�	<o�?����z���E�6�~��R�3#������q��D��������Z��Z�����	�h�{>o������<r��.��~���
y����}<�8Fu��D��d���
Bn8�Z1,x���
y1
zn�e}����3�n�y��w6��`c��rtC�.�z���Q��I����5�J;����MH2��	�X��1���87�&������|>7?�|B	`$�:8�u����4t�":m�h�^���a����Bf ����+]���~��������gk�YIT"�h����kY��Hh��nf�8��+B:�-�D�?�����������S5���RI��Dq�����h���"�d�G0Ov�?b���^&g��DUTO�4LT-��l����?*H��3#����i7��H5�*�e5���y!z����V�����Dl��2�r�y�V�����se7h"���^�bYA�p�o'��`���r	�����5��6���/t2q����YF�7j>�t����o����W�q�<�7�c;W0T�J�s+*�~�E*}�u`b+u%pF#r%���7�^�hs��{=<�D%�7,[����y�4$=x���b
��}�����������-����/s�X�2�y�Hj������gFIw�����a����;
��Tn�#<o����W>��t��� @�3��hI��je7At��F&�qP������X�����-;z��I}I�
g����I.}���,���';����`�y���[����o��w�n;S����� �y�g3���I��OA{q��][�������# ��s$�D�u�8��0��y;�89_���~��`��y"��L$�Rt�%7���@$�9���� ����'`��:�g����o�5�_���rg�=���b���8�g"`���� �����1�rK������u���'9}�t��!j�!��L!6�(����~�N�[f�����������������Z�^��f��D�������50�
4@~,v��h�����cz!�(�����`Mn���F�N_�V�'�����������+�����E��,������/mi�+����o�}yi_Ok�g"�����*�'y�������u6)CKnf�k�8�RzTGr����= ��	��0��D�n?�'�QS��j��N��������n���,L�V��!�aG��H�gi�q�Kf��o��v
��O�T��Z�5[o�
���$�|{���L����
�:S��Ig��
>��~���v�}�fk�D{��2����WX�I����f�>��f�'�C?/���}�/b�#��y��F�����~�,�Y���iS��+'��k�#M$4#�]�7������$:���?-X]�
&�u��z�N�K(g������T��}�����c�s�SN�������^�	��z+��Q�����(Z�P��6m�,��DB�"�`��E����"aY\�#���ID[���	�q�����H>��Z���q���Y�����K�+��A|��f3����/�/����xQ��1'No'�����u�U��#f,��V����V��ik���@���Y������7�%����]}�$�������j�y���\	Z3K�Z)5�~�������+��6V/���j�D#����D��i`\
G�y��Q,���8���y��3�os��������:�_��pxeR����B9V|����aK't��
��f�`C��1����2��N���E�9!��$���-:�|o��Yr��%N��D2�������O\3B�R��YT1,����Ng�3#�8Z=����	%����E�gy�f[=V�,�WXY��C4!�	�A� 8�]k��t�	�&�k�d�/uP�hD�������$����5��5�>3��Wc��I=?�y�l���b�6�\ ��m;���0�3��?����N����V"
'�{��4�v��9R
*��O��������T�����ND4����`��/�Qp���6�mj��5����jx��j�@�/� by�����z3��E���n�t���������6O���b�tB��pO���'�P�,t���_�JSP���Z�2O:����<
��;vO:#�
OJ����y��Io��f�������T^���tF���V���[s���0	�@[��|-?��b�}�R�xM����(���p8��3g:!��;;������wxhw�f���l�p���Gjt��(!@��O!7��=���=��S�j������#��(�(�����tRzp����Xm�\�k�q��F����5��� 	8r��u�D�������� �[�����a"�-Z�(��'����m�)�Ql��o��������E�=�5-?�y��Q�\t�Ou���������ShC
+%H�W6�>P��J8�K���df���zE�������;�U�e&�����\Sg���j�M�=�;f�J��h��7�15X	;A0���4������>h���s����(Xjw'�R��q�_���?:?BNl��H��+m�����jt|�X�G]&C4������q\�dYt���L����N��#���!���$��=56d�U@tj����%}[<����8A���b���.�#�������������BPx������#WX��%:0���Oc��4*9�����-i1�y
��`Y��`~�N�(,�EEtt�u���������e�������W�y�^��]n�9��V���xC���'��&��Jg��@R'��n����4nb�������,	pT�8l��D<M�T1���K�42SH���
��
nQ����iUa%�p��o4��>�T��Ah$
��}��D�@�[�Q!�������8���o������d�%���M?/�/�/�5�m�O+�f�P��V}�v�)��}yCy+8�x_��w]2'����5�$=y����I�?��2�fj��K�ai�71��@?�V��l}��[7*!v�#I"#��D��{U�������0���n����@�C�^�Yx&n�h�0��������q_�6�o��D�*�<������~^v�-�Cc�}��3��s
��p�X�J$^3�����`1"�-,�H�l�v5���^�_v�'��2Y�������{�`!t�=�EG�`i���{� �F�B/V��j����'mHr��6=9�3�����>|��R��&�#(��������KL ��s���Y)�r�����N_�Y�wJ�
��S���q�r��OW��x�����]\G��n�Ni��=��u�F4Y����wJ�>:_=VL.N�����2y��Y ����[����f+S�;.�Z�-&[�@[��O�O�xz���	(����9�5f���H���� ���d�'�F's��R���<[���^2� f��`�C6�S��f���xq���q�@2�D� /����U�MU������� 1p�i�H��@� ��pn������u�Ge���1�a$���>�7�)��_%�9�5���F���E0��r�	�ELw�er���K>�!����t��X�C�Ml�d�������������P�����h[�S���3
��l���30O.�,��6D���wK���wQ�����S�_���]��A��v�X���pNC��~�F�m���e����y)������`y�|�����#�D��'-$��O�9X|C_|����lyfr�2g*����Il�B���_��[K7��[�������z�l��;�^��{w4�'+O����(�p�%#C���7�1�8I���,4;|O�-OH�W:�d�iv��6����A�r��K=�����\W���:
��!�u=�-����CN
��P��D�����Q��;ZM�1r��V�}�����T#'�h5��HI>ZI�1R���N�_��H0��.���z��R�Y|V�������<l����<��(���&�z
k���5��I��������?5�_�c~������\�����0�7B�o?{����+���?�������mr������)%��	���������\���������^��[�U��:��Ev��8=��:%#i�}���,Jto�X����n�=�7�z��#����P�O�����y���P�,
O%HN��X-�/�T"U��������Y2��}!����m��Q���<�����S��}�/$`�?����m�7j���fd`�mJ���-�F�����Q}�#��O��9P�<@���l���t�������C6]2��<C<U��7=�y�/33�	��(��
�>hbz`����:����.�(�"UO�Q@���)H�9	��2��o���W�'z�"igv��X���\n%St�^H_�3�%�;�'y�	�y�����)�����2����A�2l�a�%;�$�d�`�����J����~p���:!8��7�A����|�������o~��������o�@D��
w�g��
��W���ux� 6#��*�l���Q�l�,�tc�=��If�]��_\t1��M%�����\�"�h	�]v�/k�8l<���e�b<D�{f ���^�vs�tNZ��]U3�{��LR����	6��P��O�������������KJn�1�|!}��uw���M�]�/��t�`����\i���/��������f
9,c��&$`�������������N_p����i#0�#U���D3�����c����bG��b�-8�ep��Dn���<�Y8��NR���a~Y���xX����q-���g2Z&r��p`�L���e���������j�B��-�9���$��+B��D���(Oc���3�8��@���7y�����m����:xy~�
CZ��[�_Hd��]�Mt����`��bI@�I}�Jp"��M}A[��*�����������T��pM��A�ZdFK"����2�����o)i�G��`���9�	���C�nM�;��5$#���]�v���������z^�W��vW�����������^��Iz��������2uL�&�u��d�|[��n;���hB�z3�/�m�������?Z�S�3�/�(������O$}��Z����]�n����2b�kFz&m�sI�l�DaFzfv�s��>��#����O��a����m�dw;�bF�k@b�C���e9Fw����-w)	��p�9S���<�����!Q�iJ�}�����l�I�ceL�� �E�Wn�g����&��U�4����H������LF����D1�+��U�! ����!��x�7�@�
�7O����#Z@�%���nG�	�1l\�*`X��`9� ��}t�����Z�x��_
BE�pFN�RSM;�����G�&��}�`s����S���%vv���a�/���t�5�����Toz��c��eq��1H������
�RW�!Sp� ������$�%ts���mM�J�����J�=�������3���L@$��d��
�������$�l����V�����El��:�E���eFY�@3�_�wF���	V��4{��g�[��Xqf��sF[�#K����u�����S+v`U�����%����Y�_^L�����Ky)��N�se@)����|\~FR��4�5t����Hc���GA-K'� �}X^l����]����<�o,�p��7�w��'f�g:��m�D�������
T�P:�A|������������wy�����n�g��n1���S�����x��������8u4z��&PnQ|_qn\���;L�
g!�>�0W�������u;��(�7O��V��S	3*@���"���e�LA�q4IU��8�K���RM��w�e�`I[-8��df�����,:�Q�gbz��<g�������l���(SL��
�L�����L8��dJOAN�4��iz��{����HS&+��(YE�d��>3*Z-	���j�7�lQ|��-���z�P�f���E���}���g���>�LC�������9��7��g@�����S��������}���iB�V���l�h��4&��1b��Z	��Mc&��%�jy����x1nx���E�"���?��e�v���)���7Y�<@�t&NW
��4�3H?��^$���B~���e������a�4�T�a��/FU�_$B��~F������,CA*���v�@%�D�I����W$������$t�3P�y��d���L��v;�aG�[�=�h'��$�d��7y��"#���
�\�y4�]�H�;�����8|�C]_�����Lb��\���]i��[v���;a]�lbfu�4u��iy�����v3�Q�n�`�-d���,�������2;�����U��
��)�T��'0�NZX��b�4�����|��5i��,�����j��mJ��u��v��m�U�8�I��kog����zjT�6���N�����`�5:���q�	�����S>v�q��\J�;�0���	JG�:0�������>�9�5n�9��F���M-�*�A%�C&��|���LB�f�=H`9�_H��k����:���!%%��;�F����>g&I��&��@���Ug�>�������ea�����%�������a6g� ,M�LD�Y9����z?��<�������g�����������6�'7����g�i-���'�f�wp�����>bV^�����V�2��V���%�-Du�BA&��T��T(�����!k5i&��O��%,@�y��JD��4
[��x�*H	�oQWs��<�a�(����q��X������A)m���d�[*��#��6�D-�`o<���\�h���E"���D�Q�?����<��@%�>��
�t���a/`lT0���.�RCl13��:����fdP}����(������{����_H��v����zXf����1]�z��z��@�N�}����/LH���T��t���b0�mVO43I���A=ut��Yz�E�c;8��z2��?+I2��i����7$�����+��..��0\Z��|&
����7y!4��J`��)ovl��;>�A!���S��{%Z-+e������g!!��h�'K?����R�dTr�����������TI�^'���8z`_�JDf�9���w�/�x^Du����"���[�e
���U�E���.������E�]Z��7:�fzxaA�����������X�mg���l?��d��l������	�	ML����f�	d�wl#f0�tOKJ2�hp%E����}��|�����G�9� ���V��K��07��?#�����H�-~^Dd�>
tO������y��3����_���7-�������ta_�]Q8z��R�N�J�<�L=��~�"��B����=8>���/$���w�=����>9��8��M�\�������G���J�JG����V�h	�����)U��Y������&�y���e"_���$�������x��0P	���ol�����b�3c�����}���<�e|+�t���)69UO�Y�*S�!�#p5��%=�K�����'�"�M�����5��[Xw.�xC�Y��0]g
F�j3�
frEZfa��[M� ���M�r!{�n��8��[n�
�zv�_�������� �z���^�*��l���
y�Ey�P�[��*�;����T�a���T��Gt�k����M��K:\����������]���s�2�����	��8����J�)/$�FE�|~��\��Q	����b����/��f�.eBMtq��M��[��A����[�����Q�E)/&�uU;�c�V�>�#�wAcS���[���}�Q���Rg	`kk�"[,����l1����	U��x�.~.>�#�,�.���@��>���E_��K�����Y�������(�}�@�f�eS�*m�V��s�!)V���{]�������I�O� y���4n�-�a�����:j]K�N�(��&�-n��'��h��^��F<��ag3������EW'>+�l;����?\��w��4��e9Q�2�v#����5-m�J�~����E��fp�@�z������Y�3�;�����%��I�c6���Q~���!HS�EI^a�L�C��Hi}Y���ON���K����Y��t��g��
N2"!}�LBfL����:3��cjvg��1�+aa8�0�J���+�X)��~(/��&����4�[��n
��H�r���w���"�T9����T���+/&������'��p���p�XT!^�T�3I2����H|�����P�Y�9����E�M3A-�.k�w��2��M3��F���-� )��IkW��~����������{�9�H>/2�}Gp�� �S�SP���5-���@�=H�O���.r��7=��Ohvd�,7�Dh��&VFO&�����`����R��*�t��&���?�&��..��ag���<�� �^�e���$��RF��3�g�y.�M��Y��m�)eC�f$>�F*d��pU����H�����������O6��#N{A|V�ELL�n�\�3��U�LYw��\�m�C���!!OI�p�YAA�M����&a4>�&����E�:��Tg�����tJ���(>�f�m��@IUq2�������D]��X8)���D�g���U�����dS��=�������=p�#��$�XI�UWO���-���2���?��z�[�S�����	����<�wf���/������=����d�l�>+�[
���xyW�9��F#�& �|�bF�E�?��Y��G�����a���h�����b�dyR���x�����O��R���YN�d��S����*DR3f�Sm��8i",~��$�x?W��&vyI���R��^2d��rh��~���]z@A?�];P�,c���LW��Y&�M�,�:�d(��U���eZ���E!4]v>�n����k�Y��"w�*�+Y��pi����"�I�oX���5���/�Z��	�����@���d��%�]����2����<��o���[(`��s�����}���������fOfn�	��}�!���b1��?+�-����'�k��t�| ���(rE��w^���P[��U[G��\��HN�n��&�Aq����c��a�v��
������I=#�z���&�����6b�w���s�K�P����gy����:*H�X�-�Y���5m�3����H/�(n�h��8L!���J�^k�(`k��>�Z�^3��_����?����giV76��l����)�du?�%���1�x�A(�HC��e����?(+������K���A�.���������v�.0���C*�j�{��o� �?�`0�~�g�s(WLp����
��1$�
�����w��Z�q9����i<�E��E�^�Vx�B�I�������"�xUA�]�tL�� ��P{�5����3�V6]:�����eX{�bV�=�������)�c��J����6OI_�n��X3�M�|��"Y�IK"�z�
����:��}�u�Es��u.r��?�����o��&�YNO�1�+O�y
�%���@l6�(���3+n�t�|���q�2'o���uD��:�����Z{����� �3;W&[G��x!Y�:�VE��4#�/�-4�������#N�-L���:�:�""�U�����V��fRl6�:�c�nLxI
5����a��MD.���g?�T%q)n�)ldXw@�(��x��@���8�~%F�.G�X*�����rE���j_�_��5���Wo��i%�� �q���vy����Nw��E2-��6f��0� %��`��Ui��>���dD����Tc�X20t��[�,�->*���M��=q/W>���s�|��x!��a���14�nF/DZ#�lA�J~�8m.��. �]�(���E3
������Vc�3��0������)���y���\��	��6�
������_�n�k%��������nz�7]@I2G��e>��E����1w�n:e�,$:@w����D@I������r�r���js�S]�K&Y�Uy�����U��m����:O����<�3��D�45#��0��9-��5��N�Jv���n���#�n!���'�>]X?������d�i�|�� ";*��#�1KA?���2�R�';X�s��-Qu�=��Y���C#QZ�;&=A ���1�b��z�&�,wK��hI&��\�"fv.Y���Kg;:u���?�la4H.�����\~*���m��=�!�,_��]O��A"a��~.����Y�H���JvqX����e�
��(�>H��$�+bs�(�,�&fY��!�4%x���B�W�FaDlG*�v��_f1U����h�i���Bv����H�P���'Yw�,�(�"Rr>+�7�B���v���b�]*g�O�������
|V��%��<i��dQ��RT<qw�/����"���2�Uh
'�����K�P@��xt�+c������Kd�S�W�x$��cGL>y���~O�!a7��,�k��W���i��lF���b�0V\Q�����L������,�a�W��0W������D7q�\k��\�t�O;�y%�
k~M<:'��D-]��;�-?����(���=�AS<���(RE�����g7�d�Rn�:����������.7��{y�9n>�ug����YQ�W��==F2��o����f��0����t��O�yE.�w�G<kg���/��ug��H��ux[|?����7>y��$���FV�,�Z
��NQ.@�������u��`�.��
9�i�,��P�%�eG�������"Xu7����pG�6�c��fPB���.�N��d���5_������g?H�#����������{X���������d���u��r��a�!�(��8�:��@.(�2yW.o�������^��V*�I������}�^l:m�6�q���(j���|6-4mt�R_��Fe�����.�>���P��~���g�+�3.����,�B�V�MM������`&��%q\tw�'��/:���������DF���������a�Q
,�W�����m�c�+G��>������;��Oe@a�����l���\@�<��
��5���	x�w��=^wK�>����=�8`bI�(�?�D��8�jn��4��]h�IT
��0"^@�h=c!},Z@e�v�����y�vGCNl����1x���G��O��'2����z������B_�6�8���HP����|�W��H���
lZ
�
�������p�6��87����YH�e�\�sKvg(�;H|!�L��}���e���y��6���,DC9�<�����"_.bFa?����������qE��S)>+�6R,���(�6$"P�Q@z��v�,�1#�C gI#��b��e��ht��S(l���[�y]��R����?�X���'U6�� ���n���a����p3}9�����o`�&���������L�x�����.��De��������<�����2�y'
�?�C���~%�*w����k�������?���������U���������_+��?����M����5�*�o�����k�{�q}0�.CJW�3_=-]��>�+������EB��1�e����H$)���k���d=�K�"���x��
h'�ab����S��.��(��Xf<����O����rB��X��5���5������`-�����@���.��@��-il\2�����������'7Mb�1 �~�"�"3�o��e&%}�S_{����m�����%�v��;��%��F��K6E��tT��������<VK�+W&"�-+f3w]����K3Y��ot�n���b_�5d�%����d�a1�5lR��le���Bi#`�F
� [*�ohH_�[m'c��1�y��Q.
$�-����^R��
�����G�����* 
GD�-D�ft4NB�X 5c��f�����IK��i�c��<�lg�"���#�dJ�@���U���f#8M7w�\t>���L��2�`����W���Q�b{��3���v��a.�D��d�~�D�t�#�4LHf+8��x�X4�^�60����aol�K6���
8k���&p�YA�9��	�(��������]yV"5"�a����=i�>���X��-�LTs�����v�����V�
��n'@��������f��]9-O)����_+����d�P/���Dd���@�����D���O�I����@%�Q�~8�0[�� )��u#<���LB%i�����^���'�8���"V�� ��n��d�������fp!��q?�D
�dg �a�h��ojV �`;���MWJ'#8����3�d��w��\�l��vpE�+���{r+8��P�|���l�h�"�m��A�"��DJ��4��.<�L1,�(&K�0��L�BDV�HS�0�D�W�	�&Zr���P�:]���H�M�p!�md���P�i��-���5,a;���%����
��$S�-RS�M���D����:Ifp{���@l&#8�
��0�kM��DD	o�l�;���BTSn�Wj���*���$��Y'�,�7�h�$B�-����,�EN$��u�,��hj��q�b��N�c��8��-�(H7�s�~�	
gb�����d7E�qa	����>aF�����4��~����O@�[B�
�ixJ�	�0�%D��mos[%g�d�%�:g���*����y#C��L�d��mX�!"O�^��(m�oFg����
T<&�1O#(/�@o�"��Q0�<�������x���}���6n�)���=�x��A��g�ZH3��>0�+3�l�t��3to���skfL�;�-Hl�c��1a��JD�����iE;����4d�������'t��R>�;�}�E�*3U�����0t����(���=�N�i�~'L�Z&����@~U�:��0���S����A>Xu`B?jy3�D�/(U�c��?���I/w�3MP��Vwf��D��������o�&�l����T�������3�ntgR�*��.��~��_*�����n��_��	^�^7�����%�\2�.&?/"2���NX>7��� 
�I�����eo��z�x3X1_��H�}&!3����w�-��3�F��p���J��y��D]*[n���Rdu�
2���Y:�����t[������~����>��hE!���N��n&����SyI�$Ht��������3�'R`�TM�����/�D]{EMr�8U��tK�����Z��qf�d�e�C������gE@�0��<�@h���D�����^2����}����R�7�V������
���fZ�b�*��O�(�#�Iu�3��:$��a��7���
���h�.�f��oH�V�E�L,����#�^��,@s����W�-��4���i����=��L��X���&2<�o-��o&@'�����Y�mD��}�J��r����,������FD�wrr������`"8N?�wr*_{���0�6R/g$�49f^�#{�0`�W/�^n%�<?ul�~z�B���c�~�^�����?���z�L��	�����g����{���e�3�6���Hm�+4��T��4�j�@&��
���@�wz7Gb@��C�����&����O�R�_u�z� ���ZN�o� {�$���z`���"~�u��}zG��r�������,_6��dI 'z@��������R& �L�a�FsVrp��*������-�	�DA���_���OG��hg����7��H�m��9���L�Bp�<�/I��b?�LTT���kU7��L���������5f�i��Z���81��(}�U���gB����3�Bi��M^���1������ns��������'��e����-D�)���6��l���r�f&�h���c������X�M�$��:�9z�bO�G0\�������,����?q��������j���K����4���{�m~���c������~7V�e�pc�
� �c�8��W�qg��D�������?}��U9Ed�����8����]��{��������-b��S���u�d��|�������t����D���{ ���Q��{F3�?woJVD
�v�}�D�������������
o��a)o�)��+��D����ovN�c����;b�;���\�K4��M)D���@�@nY9{�\���ZUO@�El#�[��e�-����M)d����GY���WuG!��y���cC���B����;tKn�}��2��L�Z�80M&�ba��t�6�g����@L��*�P�#�g"�3�
;b^�h�3Q=b��F�#x�w��	Qy���1�����2��fW�i����27��2L����Z��HC��tY+M@��E(,�L�R���[:�v�z�-E���AQ�b��G����~3Q��j���}���^�����'��BD�-���
����a���Mu������x&E��o�:a��(��C'���$Y$(o�����x%��A�:��1���&���lb��'��e'b#�����8�x�LB�r���8������BjZ�i<d���-�d�9����G�;����l���D���3)�����GL�������X��k�mq�.?li���OQ��?�|]���5���QC�����|}[����s�~��u�����o�|}�u���dI�U��[������{��b�~������g���}�~�����>��|}��b\#_����#_��|��U)]����\�r�BJW�\���j�Ya!��^��.��.�I�!����l�U��U��e���*v\V1]����*��s��R�:�.E��=_��.S�AL����K���O�UL��1]V1]�K~/%os��R�oO<�8��$T�1[��������=��{m��d� &]m��@JW������e�7���Z��.��\M�ge�ek�>�E��a2�r_1?�-|1_?���z�-|1_w�CL�����u��=�|�-|1_w�C������u��=�|�����}�����I���\a��K��[��R�z���m�_���+WkX�l�����9���\tn�*���
��'���������*x��^�]��Wa���U��?yv�O^�]��Wa���U��?yv�^.�����?x����W��U���
^]�
��&��S_>�_M�7\
�����(�jv!�������&���_��\�2��Tu)U�����G�+���T�{)sv�����s?��Ne��2���m)�oc�<�Z��%O����J�sCFuw���%$@�E���7�T��D
~��l������*3�	F�
�Mw�	���������
<�p~�'��G6��>��o��/���Vr�!M!"�,�����g��\��.Df�L���|
�.���L�m�B
��6"H�@�{����~�����3�33���.h�p��+�pEY��Z��nJ����~����.��o���L>�A#y�4�J\�u
�T@c+P
�3�dUB�2 i��H�n�#�(<�{�e;UhBp�60�}��R7���B�'��tM�>ew�!(�
z�X�����/��|��t�;����I�+D����yD%�e�e�u�s! ?/r��.���F9�+��2+�4(��G yQ	����'�YH��L�����/��Cm�����M�f� �M�z��Rv�u��q������&p_�	�)9������(���lA����/$�d�F'"DWC�8��y�J�Z������p����������wI���)���{c
z;3Y�����Vw�e���[�m�H������J�T��+�z�z�	.l��V���q�7V��~g�ei
n���v���������TK�x�H���2Z��-v������X�:���)��-�B�Ww�vz�D�!2�5����F.�M&�7�P�����gw��Iq�]0*C��
�����@*����Qw���RO
?������I��&`�Q�����	��*�];��/�J���e�!�D�5�y��J�N�����@��>+�e=�U�Y�	/oFjm��@u�(����T����c$f$��e_�)UI��_�wz�'��/�dp�����3��P�
�@�n%���qQ2p�Nx[�S�L[�������Nr�� /�����%�51�I��s��5V��\]�mH==����J5J���2Iv��j
n>������Y&���y*��MX��J�k{BS�i� ���
-2R�q���9��A�i�=&���/���ke��.&�\�v��
p�s�C�o��FT��?�0�����B����;a\��N�Q
��y�9��yOy3m�H5�����e�y#mT{�s"v��B�#s�~<����E�x���%�\���I��/�!����������	�'Ou��������mL�};�x��4�P��g����\�R�[X8���^����3�]	��uO��L������	���D~�����:f�' �S��+FQ,�����Y�H��$i���wPR|e�z�	����gU�Oh=>���8�<)3�~k��On�w�M�)G�� �jC�~�j�v�a��7�tD*=$Q�a=����"��R.���#��$�X/���|z�mMD�>���NsQ(��*Qj[���.y�#���
"����\��G!*�������"��]<���|�D�Q��$�J�V����8��|j1�|�d��$'�������jr��Eeq8dm�]��o��!���^HI/�?9�������t���8Gq��n�e�Yf)��
P�����c��+��Kn&�\��2U�����7D]����x�&a"��O;��n�����G�N_�g���HT�,�N�|��,�_�/������L��cA���Q��@7�������yh"%�vc�G����F�	�"]lD���Z2�}�,xl8jWt�.?+1e�[��<����.�[�~x]
�>B
��
l��EVd�oKw/#s*���#���k%���=aO�V�Y��&S���Z�����
�)/��}���\qr������)�~�I�&�=�4d�@�u"Z��e�JB��[�\r���p�YG&4L�c����]"7�A�xHIq�o�G\x���\=f<DK�����DU�#E�/GDn�(K<����Y3=��������V�B���;i������4}������h6��{J�+�J��v�}g{f���~��������A��g��b�\r�|���y���h!T��vH'Nu�hsv���n���Ej����gn@���;���x� !w�����*f����Y7�>M���GJ2�j�E{9���*������4F]���rt�
,�
NcX
���=�P��qu��'"3c8,�����}!����������PI{R��L��l��AwL�#�>�����r�d��E'�	��eh ��SR�pI�Lnv�<Hq��n��C�dm������~��"[����g�t��q��3��q{��m�FZ��d��������,��S��Q�y�H�H�S��Mi�vZ���.��U��h�-v��	�Dq������$"�T��e�p��E�,�(�L����.��I�]���=8q�\���|�-�����2��W�e�B������=��F��|��^kz�%��<x=v%��\��36�����������'�$���"�-bP:)4f�6�	������@%�����]su�2f"2_�j�	�d�(X�|���<Q2���lNT�	A���#��[H�7m	x(�p;�g�h��[����o;���v7�X��t�I5�c%HUs���/���7��Z{-+�7:����|�����5U�^��B���\����n�NJ���K��v�_w_�H������o�/���6`�����n7����JD�Z#��eEuk�1`�+�5I���`/�t��B+�����Y
��?+R�h������J�����%3np&]w�0����T�}FMF���5��_4.�0#���-L�|8
o��~^,k������wh_������-������d"2R��mb=!L�J��������f�Y��|a�LS���\��mW%���m������'�,�����.����/@��&
_o0����zJQ��QEf��S���:Qf�WT����]� �3�����@-���OI����Q=���9��U_���j�W������K�g������/$�=)����#,o6���\;x��d���w��T�'s��Q�q%���.�H�f���SxEe"�����`�����e�sg�:��x�KpM^>�~�����y��P['s&�,�J��yD%X�D
��+3
:x����IIP�����S/T�j�+��M@���M�kP��v�	�|�5��W����-�
��=/����+��T�>�"��i��t|��o��U9b�����G8�Q�S���	����O6��A��H���e��$PqT��^�1��O&�*�3����Oy��|��_�����Fu�QR3Ai����sc6�f' a��$vwY��I��l����L7p��27[t��_H*�:��Q����y����>��H���M�L��}��=�{�3P1�/
P�w�V��	���7,��;z:��D�u�`��_���D�3
����:�P��e����f�;o@����7�u4sn@\��Bh>��0�h�7s7i�h���92I�D�_e��"x��d���	����o�ZL���+�l���O����Y�*������
�����hY�}k����j5����x��y�����3���C���N��;F��4�h�������d�7����4�#S3����"q���*+�?�st�q��1T�M7�x���T�Jj���%�����D��o��.KN�D���q<�t$�y�2��]�T��N���8�	�xI��#���c��l�W�|������-��U%�A����] "_n&��jz+�������++���+�xee��J<��++��4^�'��W"2o������p��}<�d�����Dt��Ov�>ZY����e�+�6��sJy��%�M��e1F���(F�z����[��w�2���i�7��a�D<^�����ASO��PsF�f���0��u����	$!|�mg��V��x�X#�7#��3w�RQ6�doEE�����#w����>������mP��PcWM�����H8��e�A�^1q�1���[Cx��ED(bx+P���
����*�Q'qj���^�9�'�n����tbB|PwY�����^<�Bx��qk���:w�������:J1��)h�,����������������m�i�R��r�,�x��K� ������[P��� �����3����J���'D������vF�o���,��}���X��]7�i�����0�/$���]6����S����:���$J��t�-��cBW�����V`����]����K���B� �/���=G�{������M+��&�JsqG���]��:��u/�_��7��X�x�������d���B~]��/j��W�N"���B����o���\�q�����|!9���G��	�����LDF&�{���������������4m_xpv0W���B����l�iN�
����|���|3��J�|%�,�p���h8Q������!��*C4�����!����+�k���Px�������:=���d��ua1V*�E�_H�����~��f����Ga� �D�G�o������c��	���F�m4�"X������Nok3*�h\��f,��o�����=<N�o�.���d�P	��-��8}eA��Cu��r�U�p���`��d��f�l����6w���Ha����&��>�:�����7[�1�U{����L��9dDsW���^����D�;/
T��Qk�hh}��V��>��N����p��������P���[(\uz���D�|X0�m������A�LcB��km�v�nM=4���<��M,\]�K-Hu#"�������n,�p|M�j�������7��O"���9�$P����4��F�e��mZ}�B�UX4��)�n-=��["��t��]����������o������#���z��o����kF�U��"IF� [}��Q	&��S�HX?{�;+�Yg����T4�_�Bnl[�S_���B���C�u�jE"�RI[�z�������\�#D����ej^����B�eb:��)������x^QQ�m���./��&��������d��w�#��b�)�-��e���E[���l��J�a)�����IRyI�<���h!%�[W�G�oK��B�����6�[^;��7y��I2���Q'R�dl;CL�g&Y��:�r�
���QL���O�������H)��h���Y���������4�DN�a�o:v�����e_&V��>���D�)�/&�|�:/='��8�*0�(�6�a��D�[*h����d����[O�m��~/�l���J��,��P�5�c�pZ�f�MSB�|K�+�����M�O�5n��m�>{�M@��x0�p;���h�l��t�^|���+�
��������$��Z�,�%�Y �9�:
T�L����jc�U3�}/�-bh%M�2��(b���-He���	
0�s@+i8�*���_ /����m
hA(kZ��U��u?o$5��j"i����X�<n��v6������	~�	~e�a��xYH��-�#����		��m[dBb���7j�������X��->C*��M��*1�v��B�XN�U�s@/���[L��q��Q#�p�[�O�H���?DK�%�'����f�Up��\N��o�)/�$���Kk���cck�J=6��`o%z<}��Q��\���3Sp��������VT������0����h�P{�3�6t!��=[5��za�{adB��W�V�����@D,��:��VO6 ��	��N`����	�H�'/-<�}
���B��^8�R��
k�y�V�2�b��e($H	��)�b��-Q�fKD�M�l��\*�	V��hK��g�k�8���~]���f�2�::�!5�d������s%�TC9��,��o�������I�v!"#�VO���F�/��*�X���ZV�eS��^Z�{�����;�����"��?�'E5���T���W����W"���'�j3�XG�"2+�`-&@"���|�H��?��OM����S^�+�;<�j�vWB���w1��x���NN �]O��B�L��Uo��V�ac�j,��&d0��V&|!����i���`�����N"Hp
N4�k>�v
�����[�Tf;���8s��r���:}D__Lz�J���<]��@$C��|)|Z^L��;��{-H�|����U��	�x���+u�}\�
�S`}b�����Zvv3�:���+QqT�U��"![�5XA������{"���{-�a3���TM�\Yf�|.Q ���j?z��`Q�$P}�	��-^Wz�������U�=��a��d�{�����y!�����`U��v��y�*�n=���y!z�
�����X����������Vk��e���u�yu�0h!Z��V�f[A� �������]{n��8��)�7���K]��E�U5����m�y��M�&���h��Y��
�����M�x5�
�"��5�������������P5���@/of����� a<�r%7��G�B�y4$y��y�����"k��FZ����	q�P�2���V!���@�n���=��(�8S���<0����i>�M]�#<o���$o|(�QZ���@=`�E%����G���s�V�}m=�����-j�2�������H+Ha54�gV4��r�s����k��Z`���5�q�v&��P���i���e���$����Q{���A@�M�X���$��8�|��XAj�������T����(�^�`s������94k'��{B?6~p�y"�\I�����[�a ���I�i� �q�O��"jH����!��j���c�_�G�n3$b����n3��`��D>|P�;[n�[�2���r�{AQ�U���1�{a��b�����M�h�����yS����f�8��"������>�4�2�f���du�@}���fp�����fE�<	5���B�Q$���=��\n��A��������swW��!���=��Jvr:
��I��Zf�c��w����M�;�J���E����W"2+|V�a+���X���=���K�*����l��BGTW2�����P��B(�Lm2Q���=�|{l������q������{��J
������R��N^�������[��Nt�)�j�A�Y�����������Y��o��B_#DN��8Y��T:���8M@'z�;������A��3���&���u&Z�����!�@~^-a������F����"�'��b����HI�������65� 	�X;��=tW�������]h(���(�$���7�f��i�P].��s	�JR�80p_�O���~6;����O��sxyA:B<B.�B����f�~��,k�T���C�"�r����D�H*;�e�Y\�#@�_�z�j�.��]�����5 �$R���I������Z���`H�g�����B��,Jcia��ttT�Em ����'�����jm�m�3��M��_��6���A�{i t���p��p�?�	%�����>y��Yy3���UM7�������)�������	hXz�0��Z3����R��9z��Y&n��q)����F	0Xj=�ua���b?�5�os�����`��6�_�c��3�������7}?�6l���>��U|�j���#D��}�N�q��sBf�I���-:Z|w�'�U�F�t��,5i7��~����C�Z�*�b\
�o�yp:#����x`"�R��N7���3;��f��z��������l@� �	�A]��UE��������n������.�
N4�'3���G�<�:\�k����t�u�M��
�����X�������p� �����tA	���< 9���	��T�����?/"2'��lK���7��R��K�����t�h _Sz�4+nJ"2����`��-YQ0���s�������-��;��V�	P�0�
(��31:{���V,�H��fL����x�5��(dZ�{_��tE8�0Kz���dIW$u���l�����0���k\fI"2NDuKzf�����i�����`O=��b�����,�������,�%]�������0��\}�&L�$pn�l>�J0U_��Z\����L�k������J2fc�"��������������k�n�&+������j����������O��=��=��S�%�I�%LI����6�@1E��N��"'I��Q��-�����D��LI����^H�E�$WC������?mj,����\�s��X!,e����`������m�)@����Q�OU{���pxDm*?�z��Q�\�A�����o��
��(FlT:�1P���0�K�� ���Y���Tn>��~}%FrYI6��bni0d�F5���Hr�Y�	%�[4Z�����	AP��|�������|QA��s`�����NR�,��a�r��1�<���	��J�:����#6�QSq�G��h��#�h�QE��N��F;Y��}��;6��"Y�S�i���P�A��v�{���$��$�	:q>��#�W����{oD�������f_Q-�#W�a������1�u����������$�Sh_���E�s��������`]*f(���'��2`B{1~���<G/	��a]��TD[+�m��t �;*�}�����L_ I]xg�$"'��46�c�r!%Du���6�-���A�;��d��������������8�1k��
���`������,�4#�m�
�4gh��Q6��8�B�����I
+�nd�
�� �%S/5�}#a�����C.6<.�Y�0�B7�Z���kM���c$��P����*�a�>l����$��w�X��D�C��=��3�q�h����1�p�Y�~�}��f���a���8�OE:���\�@D9zo����vY�P���n���P@�C�Q�ix&��p~������������� W�h"Z�4�6B��������e�p���,��@���.{FnfV���H�f��m@1"�6��L���Yv	���7P_XlY5Kr�3�8��i�|��&p&4�=�&7�s9v��Ar�v�\��C��t�iLzbP���H�Y��HM��1|��R�&�@V��#L�c@*�R����y���(�qVN�rzV_�9��6��A��g����w|2��Q*�JE>������
�&��.[wiD�����\3�Ai���W�����2O�L���,���������:���40u����m�� ��	�g���amgV���<;'�4�y�����}���bRG�P�	PL���;��L�/%}����Y������q&X���i����M���@w�e5�2�+$V�����,f��B
�
�5���&^iQH(�Dl9\���g��a[���!��H�FB�wg������1�����I_��3��z�$�t���~l�C~���t��(�������of`S���FM>���%���'�����L0��//#�;��3��F�:����DlnC��F5���I��-
����>�!����]d�.� ;�i��mR��4���i����lX��4�f��~���������#�m&�g2P��^fE��O�9(?6��/����Z���c����"���4���.����un>��HqO�D�k���3�	�$j�
f����~8Y���v��Gn��LZ�F�8+1p���NRh��9������j��$��}v��6����������6^�\i�����v��:�|}�u����B�2�tU���U�4��5�!w�u.�]g���������e��,�]�������������Rv�J���h��I~U��UJ~��&���&��{s�R����F)��T.�nb\�3�����9��~}�F;���y��
q��/���������������t����u��!��������_~�����=���{��"J���M��[.�����������~��������?���?�G �j���S���p(!q�>o$�;-�&D��
P'l%"�p��ag��#��M���o���<��E�b��g%(����2^�3����-�_G��S2k�N_�^�q���u���X�E�L���T)�$�H�a���+�����e"2������j!*�F�N���Q��G��4�����d������U��3�����Cv�h2���KBxfQ�':����In��L�$��Ap��Z�0z���9�Ps�#-�(�"IA.n]����y#�%HZ����R��3Y���H=�����Q���;�&�-�E }��JJ^;v4O�������;T;<8i�`f5ZP��P#k�mI��d�����,VSss�M��_8��z���`~����h�5�5xz
����X�@C%�]�o�@���L��������������)��H���T�C�38��m/ *��M8	���'+���Z���jez&���T?�����oN��`������`4y%��;���4���N"z7���5n��E���{�q�Q��LR4LBN{�^h_�De���n�}�������Z��7���/��c���Qm8����|�B������Y����7Sp-����Q����b��$`�,}������f����k<�������B��!2B��O[��jG��
zk���
���j�Q-��'3���Y��������wZ�=+��"7���N��[��o9~&������9J}D;�D���<�46+�oa������c3�rA(���JF{�^��\F�_��Q��%�c,����f������{�{g���q�������o����7K�������/���7�q�%��CXQ�O�����E����"�qr�n��[/���������E�h�[J��1K�|�O���APs����W�`�k�\dB4[����T�*J�������;NBRV����*��+GSb%�<��c!E�k��h��9hI�D�>���
M�fB(-�w/���e�m7T�����6��,D*������;�sa������������=#4��#�#���\+0��KJx�����y�e���n�D�w�/��{�(6��x�vxv��+VTP\Z{�gB�Y��S�G��;��$����\+%)[���^�
gG��)��"��r;�:6�_�������c�0�*,m�����F��C�b`�"<���tP��&�z�0���C@�H�]-%�S{�l���<��,���Jv>������+�<_��0�Jp�P��6���yj[���N,�(�v����
�pE�1����8.*S���%n���BBf��+_�wd�Y����\�k[����;����G��������<t!��e1H�$�uY��{�h�&�B3T
d����xPB�����&`!Y[L��
S(����m�7��y4�`�����\��k���fl��T��o6M�|��kxOy3���}��@����SV�e�&��J;!��z[�Y-L�j�����1�b��;��vE���lv�o�+������:KB�F���R;Z�����j��;�VzFP��4e$W2G��`,O��V}����vGp����45=�<
jU� �����b�����z�H�����'�������-�O�gB��������m�`*Z(	� >y�h���BTn����<�t��A��4D�i���	�e�-�b82�6du������E����=�6���Aw7��0k�)���LZk���G3��-s� ��j���JX�d.�Y�@L����G�����8�KX��/2�*��.j��8BR�%'Jf�/$d���Ne�N����x��	����� ����l�4���w�T����n�m��'U�y8r��	���������L6X�1U��%���Y�$�&��*�f�V$G��Z��QP�f"vZ�$
��~W�"�����"9�Y�@�G����H�27�*�5�����P�{�/���tiA�]	\��=Ja�� �����6h��_������������������<��1����|NV��+^�df�_�]my���C�nU���tM��nI��_�+��	��~&��e�+�(�Q�a�;�+"���J����dw3��^P�6Y���� ��������$G�]�6���n?��������N�����r����rv�	Y=#�a�?��f��T�/%��V�_>�1]�I���3���^>edW���Uw�����������0�+��n���6��fv!�����l!s]��e����
�v6��Y�dg���3l�fO��Z���at��"VGS���!��3�����&>�e��s�XM��M���x��@�{�jg2��`����|�VO�J�&�����R��&C��u��Q�-�hl�O��Q��>����`�w&(-�@X��Ogvk&��9��
�%�c,�4��2TH1$`2��g
���$�nF��������5� �����RRU�����-f�N���$5j�cvuV��W�E���z�CZ�L?�
�urL�hK�y�����aYFOAX������r��#���u��IQE�n��nbE[Pe�v.����T �F���:�>����o��;	8�����P1+/�)���i�H���X���%�-�27�u)U��'�����g�@M��6���o	���dHD��4]��r�y� %P�E\M�-�a�(mt�;�=��7�=(%MC_�7t�TH+G$�cm��Z���x��	�L7��-��<�0���6*��4]���r����h�9��/`lT0�����RCl13��:����&�m���7���|�H�}�w
8��Xl��m�y�b���{�����B [�������&���X���p��y1���'���$_e����g��}��qq���������$sA��6���CR	`�������$��pi"���w(�C��������b�����
Oy�:|Aw|.�'~!�B�����J�=�+�j�X)b]�z������Z������Q*�,���E���+��:�^I�^'���8z`��JDf�9`����P��"�;� �{��mu�������b'�����/E����b�'����
��Q�D�A��7���q��_�`������"����1�0�	�<$Q	7
�a���$}!�6������A��O�=-)����}���,�C>t�p���#�)�0,aYF�%W,0�����%F�l��""{X�:���)1=���""g��K�*��oZ������.���J���}J���_L=�����n���j,�1����D}!w^�so�%Tm�3Q��^�o,k*Wh�D���"����R���,���o���������RE��k�^H�i"���o�Q&�ul����s��������h
����\��}!!v>3��A]�����H�C^��r`M�	�b�S������2���;W��QQ��S���+��9x/$`���~�\���|��e�}fe�� tE,�5��6������\���Y�s�VS%H��t�\���Y7s��G0�P����`�g������o|��\*
2�7�����p��j���^�7e�E��*�;��w1�>j�au_���L<�����6����t
��a�Jz������~�[��\�b�"y��9�Yi<����������!*��X�Y,�nc����� ��L���.n�z�	\|��:�3�zBZb�4��kDu����U���sZi���@���Me�JoQ�z���G���e���&�HE�X���}�b�����^�7����
��
��5��z��m\-��X]j���Ep���T���������uK��U:b����nCR�p{!Gs����_��D��+�g�k�A�v��R���k�o�������D��o��1����^qB��V^�UJh��nvd�M@��^tu��"�5��^�����~��J*hQ����q��$JC���m*��)0F��2��e3��!rF�s�f)k,w���#�K��J�c6���(?�L�����$��y&�!�B���,���'��B�%�ji�,��	�_��o'w��dD4���-$d�4D�4�����J��8�X��+IrE6}���t�J�lzF��0*)��-��[�A�7��\F�������H&U���q*�R��P�P�w�:�l�	�qE�q�EU��i+/��g�d6������
����x
��sh��E���f�Z�]�2��e�3��f����"[�A"��IkW��~����������>��AH�D�y�.�H��`2�f#��lTMO6���sp���!'���$k��f'�.�(��	
a��+c*Bt"<^Y�f&i�lI���r��FZ[��_HI@����Q������t�
�MGZ�����HA�N�!��
���j����7!|����kJhB��q3���+�g1tI
m`�B���?/d~A���|�uS��|^d���g����}V��}�{����a(�I��>���c���(�;����N���w���xjG�+	����HeV�� ��&����
zc�,�'�4���P�����L+��`c�AV�B�_��uJ��E�n\��M@[�J&Y�z/*���*��b8��8�@L��&�HNw[.��"����7�A�� ��1T�M7]g���������p�����������N��"I����B���]Q�O�v�����d�#��Qt;	h/��������p!X�����w<��}^rFA�l�%����
0.1T������|H���Qh����s�+A�EY�f�b�]De�	y�@�SG�o�DG,GC�%'b]��&p�g�L��
tp������]1��F�.R+��ao��V�U<�d��L�BR)�����9�P��+qs����I�wO���=�5
�m����@��v*�!Mx��	��;$�Y	z�n����ro-�P2��w�����-����{>������M@�`e?��U�����<����$�FN-��jl������R�l���������w|R��S�,\m$P������+%��5���Ym��%Pu*�����^�=/��^�2�������82��>o$������{���Vm�@��v��n�}�������6:M�Dle�0k����'�Q��@Y���B	T	�~��f�s)U�h���zk��������Q��1�kEo�J�)��b��u��]d�:+��(�����0���w8�1uw
c����"���?��m��g&��}�z}�p8�Eo�E4Yd�r�	����ep���<��"�|�e���t�=��F��h"�0��]��8X����`���,Y�p��C����|�L�th\&�3�S�Xi^(�'���D6
;M_h�}}�5�X�)N>Q@�(�N����[Mo���@Z�jkU����_��������x~y�p���F!W�8���|�O�IJ{��2�w�����*�t���M�(�?��v�s������s[T9��0>(��p��%FewA}�k�p�QK �`�
']�s!�d�o;�� �.eq�l6�c'�s���8��h��������������H7�z�`�|��N���L�E�E�]���4�K�&&R� ��:�&��k�h��i��^j�gC�!6��#�#�4������0���r�i2|��~�u�M2���!��:��;\������!��S�E�4����"V��D���;����XM��+��\�m�2se���1����~G��3w/e��\17��"Z�).�a\���,�S\�km���;\�������n��y!�4}��5�	�Y�f��N�YL{�`1.��z��P��}|]8Un��_�G�����D%��3��:8i�^h��J�=��jB
��a�gDl~���"���1��HO!)�-����O�~d�����^��{���M
�]��a����\�kQ�M�c5m/�8D�Dm=����������dTr?nC*�7��/ ���M�����lm�J2����P�e
�l�Xr���O`_7������7J��2B�q�����j��t2�H�P-��.�3%*��T���sTl�'�R?�v>����V� ]��l����M���9|.*���j\G;��4�g�&���$��~]�A����:��-����]}!8o�-X���N3rJ��G�O2�
���������x��Z�^^N���OI���-��e����$�&7�Rg�����	�
<q��9n{fCZ����K�E�d6�p���LD��������M7���(+�e��m"���Hv�3�
���:��*�C4��H>�@
P�4Z|���t�I����eV"rk������[���>mc�JD��==���Z���+Q-���9�����@J ��������U�%P��yw;qF����t����%�OQV�}��X���n.���*��
m"���0v��u��+��	�)�����T�	K�����=�������DlZ�(@������D�J�\�u1^����3
��Q6��Z��o�I������}1��|'
5�@�j��x�c�Do_�	#�>�������Q��vG!'O?/o�4tS�#��}���
��Ba�y�-�Y�*������@C�z4=��Y���V�Ki��@�+3_HkA?�q�k�j����#�<��q��LT��8���Ve/D�l���:F��d���F��/i���Z��i5���&��_�=/+
��w`l����t��g���
1;87��h������j>Y��o�f��}T�PAM��6�[Ex�4
���3c%�<J�J h�9�pGUUl�;!�uX�.
�=)}7=���
��>��[Y���o9��X3�L�'�#����Jf��� #h��S3;����/��N�&��O;j�����J���jl.�������1L���8�&���uCg����_�����;�~���<���?:z'�������?�����lg��}`t����Om��"#����>���D
�e2~���=����E������\�A���{m���!��JtG��i�������7�i#%�����]D�����ON����!R�*�}9�l!G������v;�_��+�F�3�{+��������<�7�U�
d[�HI�0`�{���A ���w�8���X�['�;l��G�%Q�b�x(�9��]4L���j��am�[��,i����^K�~=�����������I��W�R�w��^|�3��5D�Y:	��v�3i��I����H��
z�PX��%R�|8���"n�m�w����5�H��T3-�����%X������[Qqf��(����7r�W�.%r����2�5��z|
�q1)�b���7�"��t���wP��z9��z�`��b�A(/,�m������Jh�i�M����/�
�/
@6M��X��yOk���vy�$�������n�8{um�&���J�I�8V����h�I�@g����F�J�N�k#){�E�8���H�=�T�)[��~��Z�H���(��;[�����X�9��d��rVoy3w:+��Iy�����|�P���T�m���n����|�y+C����m�y��~P&���]w��K���t
y$����"+P$ITe
�kS����#����*iN�:�(�2"���������!_���/���5��w��~����������/_o���~���?|]������
%�4�o���!��-]���O�aH��q�������}�����A�����X;������K&)�&r
6X��?���
�8�:�E���n���"�)Oc}��0��M%��2%S>N�$3�\�� �
y�>(+���k)Q��8������q��
�����J�|JB��E47k�ej���l�
d�%�a������T�dSfn�LJ��^:k����L����E� [Wv��M��J��y��5j���n�,D����-U�XN��+�)K� �i���V�� 9,J�X%��<sc��HDl���\��X�P,P��w�Ed&��L���lO��@s��p���QCF�bQ�yI����(�5�S���D'/�'N���u��d�SwoL��=D�v���j�	���f���i��z"����3�����K�[�fF��2��Wu�v"�B���Q����r�7�.47|g�)U��dI�7�;3{3[c��-d����0�1�>;��d2��)AT�}QF�@T.Z�S��[��3�r��d����S>������A�}�~j��;�m�ip��%��aw��m^&�!��b�j�%%�=L�5����g�
;
k�Om
V/MojFo�c��{�7{'\G�{&����E1{��3xe2e�b�N�=Tm_�(n�N��e6����B4/�b	~���D�F����v�����2@h�{�G��	��h�n6Qn�2qE��Kj
����Lj��$��[����'�i;�������Z�`&3�b�<1R�`&S��R;x���!<�5�'81��-!&~FK��$��oZ�d��������Sxb��d���w��~4�	L���J�_��� }m��~�'(P���>��Gm��Dj(A�x2���B$����=<*D �������������B�'<�l'�L$M�\��N��>*�l��guSH�,a�!��wb�i����������0���_�J�D;��E�>v$X������}���xV"�������H�.D��5�_L�L`�yL*�4��V��&���nL����F}�X)��$%��K�t0�2eU'�=�?���~!H��NcE^+c��HT�6��v�7��<��LY-�`��K�g����l��������"�wa�x4�r	��"�a�w���J$]���S ����O2�����]��Rn�L%y�Z~�c������,2��=T|V �%F4�����f�T�������QAMp��������,�h��=�n��1�J&L�:B����LD��p�� f���+@F�|�u�_�b���$��!�a��J�0��?+Bj��H;�I�q�^��lu����2CQ0�1e����Lq��c���7Z���c6���`���-p~'H��"�
9W*,@DFF�_.%Uw�p���!$n���o�����ik;}���%�_i����H;�t�c����`��I�"�L;��������VM�_cc~����1����QE�dRm�>"���;�F������T���i�%2�W
�����������n���+����U��~g&mi��r�4z�3u��&0���=����0�1)O��Qp��s��v{X�������J��Vz�m�x�����1�(�������B�Pw�'�t,OS�Hf~@���h��P���]%f-9��`q��&�LY�
H�tZvc�[�)�S0IMn��mzE���V����jo�"I���I����+��>���poM��X��
w�t�4}�� ��������H�kR"����
���G9��;�eT
#�,IU�Sc�o!�#������
s<��$uB����c-�\!���7�Q��L{�+��<Y%��QD���!-�L��
��%���K�<���f�6��7.I4w�z'�V2�����g��v�=��j���i:����I:������J$�E�>r�1vLR�)�a�[�*��} �����1n����y;���TA�bH6T�O}D�'�����T��t��:�I4p�t���u��L��:��_����`/�����0\�8��uAjT"�{"B#���'b.�c�]���<=5����VKMph?�25�!�=xD�Fa����&Z�\�zEKQ�V�K(���/H���'��+Jb��Xc�t.��S����;�n���>���E���3��}�������Ji�����(��C�*7����010�F�P|Vpb&�*�f�B��ywu��� b��`J\�y���&���^���5v�I�!��p�TZ�{hVkL�z�����z%��-���"��j����K�$�����, ����<+lP�N�F�%�D��"w
O96��N�����^#��o�,�]������'����S���xNT0�C\	���zt��i&[��O���RY'���<%vI�����l@��|03�I��q<+��)S�|�����NLZM`�����J\+���(�
I�U��������rb������f����	���TF��b�%�"2��}��:��S��+�z�H�E:�T� �<��7�S
�2�v���&���{��T�lh@w����8��(JD�������w-�����%?�����VrC�k�nC�������Ww-\����r�D%D\J.�A,�gRm�/v�J����gW2e�3���Y�������� ���f>:����r��n��^fl�g2�3O;=���[�|��a��~��Z�2q���9):�(2"�	j���j;�H�f�+�[5�t����G�O+�%V�hc3_='[t�2�m���
XK��d���M�u�S�u���5���"�6e�(���Q�$��\��A(TsF�hlq%��A$���M��$���W����
�T���;�*{����@Et���w��Og��h�	����A�Lc?�� �3��<��
zZ@F$�������
�/>����5�Dn���Y�N��>�Bf��>��;'���9�a����~���7���d>��(�X����i��]���$+���Y���A�!��c�����c�S��T�~9k��B�
��EQ.���ETd50����U��HP�LY�v"���]�S$^Y��?�����?>��&���oiPw�7�y���-��������U&����Q/���v����-'�	�z�LXO9������'l#�9�0�!�D�'\=� r<�����	��'�k9���	����/'��	5�$�x��K��0F:1��t����3"�p���}9�R	C��T��p��Ct%����pX�p�JUb8���zXD?<�/?1�[l��"��s�pX�p8?�X�|�G��}���S�'�+�P�������	sFq<A�x���	"��KP'��-���`��f��6���9���j����-��\kw�frP�+Y �����CP���lQ�-0�p8k�X���_T0��gMI6���}s9���=c[�8�3���"�kr��&!�~��	�gX��[�p��
�gX����pF[K��a
Cn	�����������3��L�q��qH����!�~�\J������
���$��c������h�����_�=������R��oN
�������\=�����sP��o����=���y'z�7�D������o�	������/�	������/n	�.^��u����-w���3�.�
M�{$z4� �������?bG��ww���g�3��Tcy��|_���+��r<=��~<x�����~�O�o�[���uy~[{[Z��e��oFeX����W��G����5��	$gc�e�r�H�B
~�ehT��,����fT2�}�	d�Co���j|�9�soX����L� ��T�l�Br#�PCH�_���!��� 	�]Djm���%��Y*���FnM��"s�b��������,�8Q����~���I�{�������| 2>�(��Si��
��,+Y�p�-r�!g��G"�1*=n�����l~>���.o�4i%&�����Ce$j�����x����i$(?JJ:Er������
�.-h��D~�����#�����-��&i3�.�����$7�����fE[�h����R�v{�H��!�>)S�<,������u�2k�n��"��~������9g�|P���D�Y�nL�N�
���3��e����c�LF���B����,�(������L����D7����
#��,(��`o�S3����h�x��y��9D���x�B���D���F�Ff"M	Tl��V.�Xj�^{�cW�Z�Jg5��Z;5Y{�_o"�}eY���[G�����"i���,K����(Z��������"w��0�����i����Dy�3�3��F����I=��U�I�MF��
��S?ob%��gs�@��x
T=\���N�"�&�W��J��D����7������H��bH�`���j�0�y��[��Hd�S����9,�B�I�g.��n�����Yz��yp��v�������B,4��7�`c9"{'��EV"v����ws����,���N�U�����	���h.J�X6�/��w���}��_��6p b��J�����2��n�3S�� {!�+��n�IRA?	{������iD�����W����Uf|���9;!+�L�,��jw����r�n �<dc>Y
���0(�`��F���;v5u��7����<i��,���C�Ibi'��Mf��G��h�""1�����i��6n�u���S>����d��(��I�+���f���#s�����3����4�����/d-�4x�k[��p�lj��w�S�Lj+r������<o$����#��m/�����F���;�q�?�K8i��������������F���W	�'e\;����t�m$Y���������w�l%���8��� �/��U�+';l�2>���lP�s�`�@Tv��|���y#i��,�	����*��hV���t�Y���$I�D�5P{�
u�[�	�5)�_��~���3������� ��eX�c���<�1.q�=�AE�Pl�8e��c���H����0/��.�q�mL)k���][�H���Y>����W�x
��w4�9(l:\��ug�� v�����FT��)B��I���H����u�,
'M����8J�H����5�%S/��>��t�D2�!�A�4ub��������OY��-R���,�K�{/���K����9�y%���w�����Q�N�i�Q�S����|�s'�u�$����CN�]�"2U���d��E�~&U$)���?D�i��J�"��.��1�n���!���T����g0�R|��U�3I���A)���*��8�f�Ew\���D�����
��){���)5V"����@��I"m���zm�q����&?+Qe�����:Gt� �\
������b�9d(>+��
Y������:R��=��%n%���=ao.��c{�M�,-��]����S^H���I�i���wl�`�j���{B���F�4���
c�&&��h��*e����J*B��S�T1����
�P��b������tB]n�j�����-^�4�-S��I;Q���{N��Q�e�����O%
&`���{�A~��	\Y�c��]�
SzY��l�2�:� ��\"�M������g%Ro\�>�������w����-{Q�H�V�;C���ZR2���E�!D��7����u�n�}��^XEj���U0��j����`bH\�-�/3�����0��C�r�
����LYZ� �B�	���7s��}�.�\/��{0���%��lT��b�������|�y(x��n���"��u���*���8�/���z@��T�:d\��O�h������"�:��������l$�"�PA���$�a��V�|q�I1���f��B�`m��5������p��I&�Q��2�i^N"�K���s�p�<����-��}�Q��S��qfs�8\O�D
j<tH��m/WT�p������6��;b��(`&@��yp��d�s(e�e9��UE�d.��H���/'�T�^�}���b��
�x!=�-7�
e.����
=.,�B!U��XFP� k A���������|��jf_PQ-8��5�������J��M�&�d��.d>4F�/��N=�t)Qq&�1jx�P\,�L��W�Rn7�F��,d~��"#x�r<:����06�����(kn!AF�>��j���3N��.*�����S�	)���
V�;)��F�����	�N�8����������CV_������
���zSn,��*qN�6,J��+
J*�f.J���K�����r��������O�9����s��>�o���n�WM�������H�"<w���41���e/�q�h�_H|n�u��gE\K}�i[P��*�6�,�Ij�`�a{J�VM��",���Y7�F���������	f�"��m��KJ�;��������*���}���
����:������2W�l����/D��i5�����~V��-@�%��!X��Fn�m;����m!]-��=�j9�
[�qn�Z�`�*5iW	��������`����n?/&�<1t�����o�^��e;�3��2��#���]��-��8��18GT��4Gw��J�
����X�U�?V]6s���H��B���zR���&K~�������{��l#!�m���S���nS����^�����q;r��B%�K�k��Jg26�+��������>v
��^��O� �c�����<�|���3�$c���?��<��l�$26�9�(]��M�	�� Nb�/&N���4��up�d��Y�A��mo����&q"8|�	�����-�V���
��������5mT�s�
�~C.h�	��,6����`��-��2t���j7�;�[��J�pc��F�0E��yU�`�FO^�P(L�'w=���s��S���6x�	d�#<��+L�o��T��O����l/���J�|���.�G��N`��d.���~�Y���a�����}�f�0E���s����M��L��|b�l�5' ��_�|�s��u	%�y`
�y��(F���v�\��s��C&!�m��(3t���QD��l�OV���	(��bR���Kp�t����B����
��J}2���K'����g����M����_+�[�A���*�@��	�5;{-*�D��@VW`�'�I�w�^�(m
���]��������|"�vq�������SInc�<�-q�A��#A����%A<�����O�����qi��Y��f4]��7�xb�0�q�u}EX\���VY�����0G@'�{|����t���P
��W2.�}wN��B�K����[c�d'�����Mu�8�}�2��]�����N&��Kh������"�#������$��L;�b@T�H;q����@dz������R�����p�wseE2w���Z��WV���W���_YgH����iN����)����zS�V2���x��{++*�`VYg3n������r��Sg���'47�����/��h�K�c����q����c�[���de�<L�����q%b�b�V4�4�D��j��]F_�������{c���w+�`0�����k8=�����7��0��������N&�x+*��
���
��LS���Ln����dC�}��JoM�%�z)3�wEQ>8������0E��2�y�j-�uA�����h�3%�{S�}�H�����i��"x+��:u�e��eeD����[�|2.
���A��[����qVF!��0��e��w� �����x��y�[�u��B)�F!����(����KM��VT�~Jo�_����c��vS���e��t��N�3~�q�'��nm������`��$>�2S���X��7�c����O��!I4��@����7\�,�l�������R�&�x�9?�y��]d�0o�������]�=j���S�Rw�P���G��k���|3D�����b�3����"��'�"����V���'e�g��o����	��������XX.�7V�����N//~���S��	@��7:7��]�����s���^��r�f6:�+�S1���}���y�X"
�EE�Q��k�7��$;�/�V)~��Eg!d��Q��$6����� ����A�����A�������P�8'����v�a,> B��-4��f(�3�c!i�7����J*X����X����W
��^�6�L����f���f�!|��h���Q+X?W�����X�ewe��������yZ��J<�K���������� � ��i����`7�D�T�����s�:T�u}�`�M`og;��NV�S����`@E�!_tk��z�$��x�,�����h,^Y>����h6���B@(���h�\��	8�8�hW��6M,�{��������!��Oi��^������P!�������B����������>�u�L�,��63�s��$���>��<MK��H}8���qx�I���Ob @�7C���Cv54����,^d����S%P������b�z����CC4$V`������D �iF�~m��6�k3�V����:F�O��3~�I7���V�?v���;�����E����������yCk����
m����X���#�N�hb�+��{�5�Cf�7��>f.�I�������	���$:������f�P������OMe�B$A{]w�y���[���<�r��B�L���lm�%#������9���$X2�f��� ����L_�t+��QY���4���l:���b��/{E%U:I���
�������X,�	oF�����pg$���Nkq��#�?:2Ms�":�&JA�p%�o���s'���@F{Yi�+�l??�"��=�������L�y�twj�����Ed�|	�
�:{4bGJ�[S�`�05�?#y�]����N}���^%��>Yc��a���E4�6.���g�m�?�q��T �&^l<�8%�)M�8������9�/&��0}�T���u	��,?!!��� �In�~p��@��2+��Q/�?����S��|���W�p�Bb�8H���W}}@��:=���,��F��h]�����l�M�Z���o��TFD-�U���}�N���"�'�\�,#f������j��(Zy���_F�@G�^�$��v&��9����N��Phq��ddR����$� '$#��:�~�f0���*��s�#��FC-+���l�T"�;~�]��:���X0^�B���Y�2�z�4��se~`B�+�1�g��;6��fB�y��2e����\X��w
�nj�sp�9�<�����%r~��Y�O[�fB��w����u���s�i���'T@t2|U���s���&&d���u�F��:�fA�7N���Y�fy��(75
7�Z��`��:��C���\���1.������2��R(����<?0!h@
���7�,���'}��>��%�����
AC��h���1K�y���]u�q
_���
@��O�a��T�������G�����c�,�I��`���
]><�rW��H��tA��k�mi��@W��n\�	�y��0 T�~��� Bv�1�����������%�7^���f�w6�M��O��"�����N������]D�!�>#�A�_��2��������[��@=�c������`�[s���������
a���*~�����$��vnB�B��Q������������A���o�V��(����m��Y�DD����������u��7��	������E?��DK1W<"jr$$+�i��]4�2X5\����g����I�H�6������
��O�:��:;���V�����i�Y$��H �
�LE}���7~HMdf|Y��^�#�=D�e"�����7�
�U�YPc�1��{
6@��3!�?��cL���p`�?!U�aWE�_h4�l���@J.�x��������P�&��*(co�eYY���C/E���3��E\>����!�Dm#t0�Z@9���oj�6m��IYq�2�Y�Z����U�z����D����i���xe]s�M�_���}��##�z�!�����R{��X�~���F�s�����#<��mM�W��#������L��i�F�I^��i�1��-���a�W2|��j���u���2(<|I�k7��a�`AP0���W��6���t4Y�^�t��>���6������Hzpo7��/�B �L��	�T���n���y�j}����h���jW��ZWg���[#sZ#�����:�b���K�Q�^�,V6�F.�YP7������GAy~��<�M����!y���/��x��;��.��Z�e�
������,5���L���V�I"�l�-�����l�2dwpC#��u�OM0"�YY&X�}�I��\b|J�\0�(j�F��fe�P���[��ET���!S�"����Z�g�}����iWa6�����/C4���I�jQ��*;/��{��^��dh�������^m$x��j��etq�m{�ny`�%�S�����!*���E�=����@�u{&@�S�8J�X�nO���[+h~��1b������B��T��0���c������!���S>�6��saU{=	��3�ut���!K+~t.�'�z�-e�G�VSs:&��X&��h�vNu_�����Q�J�7+�����;��GE���]���Y���10\�xo,�RV���G/b�jaB�F'"-���1#�e�_���|����T=���%n?1)0�\!�O���A��������[���,��H�/�C����uX.����)g*2
���A���EQ��n��Y�����5�u�[��`����P$���k,
:;��?�GpzSQ���D���I�����F|
�U@H?3���~1)oL0vgu�9,N������C��B�na4����C ��+��A~^dv-T(A���$�tP��r�M�*��|h�v:'	]��B�����A'Q�ve���kG��y($0���>��1��y��5���0����'���~#t���������
�Ww�<k��A/}�ub�eeC���mj,�8'
r��G�H�������`��,-O_[T���R[<Z�k����=u�b2�C}�/L����c��1�x�:"��cd0�k�g-��Y�!qY���EI:��b�����AD`�Z�u������:|�$D�u��o�����Qm1#�Ut/o#�����^��Si���v���6�M5��-N����)u2�!3��?0!X)�������������W�~�ta��j���b���=��=SaF��'���I��~^�"���a�}�N�������y�/���~�]H�t�':�������"9t�J���b041��nZ�$n�2��r^������j��6U�j���)��52������\:_�i����"9��F��U�����<��A���:����w`�ir9V����m��4.�YQ�i"�������-q����1�Y2�Bod�CR��E,V���o��Y�����o�)-����[J�M���Z���aa������Z7�QV�/�.����x�_��H��D���h[�XG&D��i���W�\�a��j�_R}��/�d��^}�����E���szi2�I����u��cLb���Ls} -��&-mIv���5�����e�t��Y��
��K�i�����H�2w-�`��g��}���0��@���E�;���aN�����������5�D�P��u��T ;��`����#�P2�}w���4�7x'd��,f�Z.G5�+���������*FV���h���0���f[ o����a�
��f�Y3ZF��0<i������0�%��rsm],��h<
cO�j�O�XX���c������c��HTa>nQ�L�m^t�����t��2'��fyQ{X�W���qw�?t'������r���=�� �&0s�>�m��D�nS���qh���3���?��d��q����1�@��7������s�N����|'�RWP����$��Q~^��|	H�4��t���0s���z{6^����	��l��w��h�l,��Y]'� �U�������zx��D�BOQ���@On�I�����vA3��K��{v%�����|�0��	`�
5�cx<��������&O�����y�zjZ6�p[�_v��9\����u��ZD����B�M�m����&������"��.��F}�NA����(G��M$��}�n��%;��>�'#��7���(�&ml�������`'C�R�v�l@�	���"���g����}~].����f!\���b��
������#�T�L{i��;��&���P����hX/��������X�'�/�����)�[��c�UV�c�*r�z^���3���9I}�	Bo_�}��z���E�S/L�u���j�`����L�Y�c��������[�:�?uE�(.��o���!xJ����q[_c��,����u�����Y������[i5�,Om��C�d�����*�-���Q���^E�@�}
H��M���l#{s�Ly3��x#�g��)�;o�b��f��s_t�88�T`*�y���y��XH�}���L�-Kl�v)�^��=�|A�<���r���,s=�����������d�w,Z
u&���������Mo����$��h����o_W����Gz��f��'�����ky�C���|�ul<0#>*_G��l�f;vs
���/���!��*���t`��*��[5�<����S��;�^kE��}3[���/�����u:R�l��l>K�*��f�����G��D��>����5��t6�/�:�q_/�b�j��]�i���.��V1����`����\�L�,�����]�{����!K��_�:�&J[m"��D���`Gv���h��<����&f;����#��T���Y�~���n�y����������9����7Nb}o������}�jT��#�z�N0���������#��������>t��H4C&���h�\�������{�/������:Ip[T���l"p�����L:;,w��C��i����� �`D����$hm$%����d3���U���o�7�bU���kOJ����p���E%���Io�>����]m|[�)�
��;Bwg�^����6t�Z�[�[�����;�fz+�+W���>�e[���3��T�0��(��1njp�`Y�y���_������A3�}�Xu�����A��l:��(�:��"�����gk��:f4���M��-2
��G:�O��7�g�z ������L*�J2�E�9���K4������H,~��p7���.M����*q�y
/�l1��*�����A�$�����:�LDj��Z�v�����k5�YKF�(��m�+���t�tRuI���
DI�0F*�����������NH���������6�<"�����e���]����}d���F%#��������Xs�:Z4eF�v���b(���GM.�d8���W���V�>���"S��e]���{��m$y���,�!r<c;�t�tF���c��'@���+Q=i��{��[�q���w�q}�7��|=n�����8�O��|x]���R�\[GU������R�MB%������E�R����K������q�xN��������g��SsH�����j?i��~�:��<�?~�_���\6�h�-��}��q������~�E���|����]Lq���e�,�b7>��o�7�������_����X����(?f�����,0�`�������%}����������d�p`�`l�Q2���d����k��}�)?t��-:���\Wx!�O&�y���)We���0%������B���
�JQxD,� �Vtn�}r���`��d�������(�)��/v�
�\JAT��>M�w8D���8�{��h������������'����/2o�ftlt�Og�"(i��8
�7�F�j��y��7R����2��6��M�)��+���)��)�-���h��&��=�Dy�(J������"�L���FQs��f[��fr$�������n�,��&@@���N�
Ztp�nP��9����Q�t��x�Z��=�d5%!����S>��?�K��,�6G�' ���%Y\�yW�����65#�VT�u���n��$���?�o ��~�Y�5
Sgfqd2��ep7]�2l���p�%�
�����V2����w���9��5����b�>9�4|�y��us�P0$��$����4���NS�f���vq[��h~R=���.��D���m$X�B	�����U��^bm���a���vS��i_H�G�q�'�W��^���.^�6�}������y��Eo4w�M�i���V4t��[vp��l�gEA(:�2���+	����V� hb���[�2�fHi�����
k���b�����~���tb|jE��-^�����V$@�����e���N`��O���e����B:�BPl��E"r��5�����r�[�;$��,�����\�I���BF}�V��\D��f2v+3wjq�('���
�m:����Z�Qg�������}S�8%�sa����U��f �)�m4��[��aA�w�`��E�Y;����nkET��������<Z��
q��-��$��3��APr��f�DA��R'^��#����h���UX������jw]�v����B�p��|YI��C2�oDp����?���6m�zL�G"j����~��4��t�2�t,m�)���d2-�)g�w`��E�+	_�������vg�����xh!"��V4�}���7=�!�h��\*[�K�|�P��0;w�����
�������q����<	�gY�q?{�t����c-�@��
�|���{�)��2e,������R+�'i�]��At�
�6 ���2�vx�lEp���E���/M��������v"�tGf�e�V@��fH�����I�]�������	�k'�N0�H��#��q�]������;��"��%�:�r�pEt�R!�z��:~�E��2�}�i|c���	8��5#~��}0D�"��=_�y`M����) .��=e��${�9��tY����b�TQ��F�`t��rD������2�|��E�XH��-b���@�&���a��EG���0E�6�:f�3����/4�_��Hrc�xOy3��[�@5������*+��p���O��������V�#��e��e���b�����"E�y���F�h�]�=iWh�Y�:������o�//&�\�������F��m�C-��]<.��q^�a�H�y{pG�HBY7����Z�*C3,�,>�������Z�0�SW��/>vpY0�O��(k�1= *�&��v2�������D�P:�Nl��������|Y���b���#�.M~E4�����#��
�;�&6JRwE����������u���Es+g&E�����%���-d\��[j&�{�O8��V��K�4�)��v`�������q:����<}%���o�����L(��S���x
s*�vb�,3x�3�}	.,��Du)<[KCL������qwn��<����T0���*��}�;�l�v#e�%�}�(�S�N���G�V4<1������&-d�i����C�]Q� O#oqd(��rdztZ���t.c���'JtAT�x�s�/�dD]Z��q�
�E)T�4A����6H������q�����
I���x�[�X&�j���S�F�2���g]�}����a�����l��/��������*�8&�_�9+�*�>�#�����)�$jN����V{A�i���,��F;/k���-����-�e�Sl�L`
���D�����i�b��8BN������=
�_����^��t���/6��uyT�3�rq�N3��|-_u���Wu#l���% 
�n��fvE��[j}u���L���WM���e^C����7��������;k�Xu������R��nt��"�U�LSp�R4m1Mj6����s�XM���M���!��e��n����"I��4K��t�IR<�]�,3���IHRT��!�����!x�hz���?e}G��}��Y�C�����hQ����tj�2���Y��>���0�����U
<"#�@RM����P������|	n���h��L��+�	�0�����?\�G����5�d�c=+���gQ?����.���n�O:��A������f��h�e�!S��)���D8����P�o�<	�@�����z�>��&�>�=���\U �
������7���4��`f��G���Y����&���/�����D\/�V��t����k(H��<��U|(���X�4�����}��@��dH���i2�������G�Ywvq_]���t�5�5>�en\&S����r
���c�
i%�&�X��l�U�SnzMB4�
���f��o,A]�T*��4]�N�8Pq6�][����wo&�W�9L�������kFMd����7����m�~c�����I�
�F������t������$���>yf!��Qc[����	I3>�"�.�u��Ec�@�	fc!�W��hu��,������e���_+	2'���~@G�H�b�7w�[�����]�`�������#��E,H6�x���d x������x��*������>n�t\��[`wzJ*�����GE)�������DB���DO�&G}�O�(��mb��<�9��b��p<t�C����Ymv����������]�Q�_��uu���R(j(Vi�*,��R�d+&z�����W@�%�������
��0+�t��&��	
0�[�)���?=5"�4��l�8����}�
hr�tE�C�o>����`nC�����B����}��������h~�;��s`al6�Jfc3�;�_��X(�����L���(O(���.�L>Y��e�!�����U�Z:U����l���.(��uhJ��%
����LTOO�d������Ptz��O4��Mp��;��������������������Ly���<n��_Q��3�
�_]- <*;��?���,�s��	XO�,^|��H���q*M����x�EE(�ESp�.yi�:���H_s�D=:���m�Df�c��-����M�b�����|e�L�j������FT�X�T���q���FT,�w����Oa��|J�b������ >�V��0t����\���Zq�QR�I,�p�����i3s��G0�P<��5��ys!�J����n���
2�5cWjE�D�����
��Fy3WV���������S��Y�
���e����7Q���t �����0v�C�U�����_?��<J_���1{3!aF��5y�U����#�F���p���h�Y�l:Tf��_�u���D��V�5.�z���V���������=9��j;�R�w�bBL��a�q"*�{-��Zb��n� ��iT��������RbC�)�f���U�N���t`]:G?�H�~��g�?��GK���M�zMw$+����O�C�S��.H�.���R7bn��3�xG�d��(U��br��	��v��s��L!V&��.��r�-�VBKb�V������q��}����)q_��O��P�e-3��~�Ld�����W�35�W�����7	l�Z�dV6UCf�f 6`h�C���b���[Qq�N2C� p2� �����SU��	�����s(�u�|<�������e�T��)P��NCIo�O���S�Ee9IWu��p�O��lL��AMD?f[��v���:��C��UZ���&����#����J"���j��>�����!onir0�����)�y�|T[,rh�P�����T�5v�L���F���,���	�jv��k�A�/����v���qN�t��<;~�V��{b�/Y��"�sB59�"�24~e�;"�
�����i�c�L�d��
�@�-|<����i��/����~���kt�8W�_��54��7
�!~{
n��]�[y�K3fN�y�)�a���j^X�oE�.�������.���6�u�3�3���W���.Y'7�������kfetygZ���d���_Xa����V�ISf{|q�)"#�A���BJ�	$��_K^�y���A�^��[������+��@c�P�:/]����$������}>�4����|�H��^�nW���(j{�{��W�~��.�wy���$#�'K?otI��w��H,'|?/��!J-jv�2��K������T���"�^���P((,�#`+��`e������?��:%��E�n4�>��L�<#�/:M�Vu�Z,�����ij�T�B���eESF[����F	�~+*��I�?} ������t[�D������9%l��	�W'6ge��"��;v��Q�Fgv��b�c�i���2��	������B���K�987��+u/��y��WM�C��N����b,��tdM�����(���<�42}`\x%h�(�jj)v]�HT�IH���>�}���>�ID��%p�e�|��d�W(��ep��<o$ja"�B���6�H�i��_Ab�>�V�Btao2���e`a%f��H'i_�=O��,y���� �Z�JE�g>d�De��|��������2�}�jQ0��ss��s����v�w��w:zlFN�I�P��
�����Y����<�{NN�{s�RWc�(5��(7&�������MG��|�C�
�)o�.�N!�}U{���	Z?D����z��/�
\:v�acfsc�����@��+�bJ�l�H#e���F������S�T�
������i��u�������a�m"#��z�dc��[�>��5ko��3,(������gR("lp>2��n�)#�=Mw��� xdg2�����������	��tl ���2?�l��|7�C�{� \�J[sw�O��^D�����E����>Go��p�Fo�D$�h?��pDhe���-w���@��E�����+��F��@��O+y�FVTy8O�'�g�B�����^1������& ��?��By��*�`�z�
@	��Y��m`"1�������n[yo���7�������*�e}���ya�v���&���L�v��"O�m!���!%�f��=���s�=�;��%������F����v�\u�"������9��B��,/0 �9B|B~��� �a!����H��A����D�+I��}g�����R^��c#Z��zE��w�����B�7��@VVoV�E"�Iw�3�������'�h������C�F\cn���T6�����M`����N$�����4��bc������@��~�)�9>=�C��r�����n�M"���.�$=��9\	e��/��N���S���x�c��)v��@����c�E�XL��+�����R�bs�0��Q���k�N�B������6�C p�!?/"��b2+F�dkd�&�>E�V����[��3��S$��#,�Xi����O��&-���-vp��bT��8�~��`h3�������:��a����44�i���D�Y�D^
f���L��Cm���JH����9��<����o�{�IYN��ft@��#i?Tl���y����5S�D��k�um�J,(��`���z�q�db�z:�Z�����Jl��*�'��/��������kwx��CI�d�z�Cq����	>��u^��3��:'��P��������br�]5�#L��=��k;�ta2�W�C]��u�:x�#� �SO���������H��9Z�`k�r��6mkv�
Dd6����}W���������U���T���`k������]]�7�,`Kq���B!��D���2�����b��������i,l������F2����J<�J�F�m�1���L��h���B\2�Z.���k%S����=`~���L �V2eh�q�V'��+Pq�N��K��E��|��G�xK(�B.�|!ij,T���:�}���1/���F�����:I��G�����,d������j��a%O��J���E�+�2��a�5L����_I`�b�>���G�mv@���#�iV[h�����&���_�Z�E�� O�}��]Q���fT�o��@�MQ6���KT�C�wAq8Aodc�a���|���6ga8�������e�c�(P#t��8t &� �xC������3�l�
�ac�P
M��LBY6�wc����$�@��W�F�X4QT���0�h���M/tqU��i��rpg��fAC78#�[']����H���g������#��;��J�_�g���9yZ�}u1������BR
��S]k��E�qA�T�����LD���/k}	��VD 6X9�����D�k�2�`���+�$os����px�WT����oi�KC6KF�B�e��z������66��W�}�`aP5,L���Ybas|>D���������A�D��|��XH"s�"!h��e���e�����C���P�����U����1j��-��E`���}����%{��G�a ��C"� K�Rv��W�dE	�9^�y4�C��~�r�����Y������\�_G7
.|�����pV$��n��&�������!��~��8=h��v�['��q����W�gM'{��5�Au��t����yFha��F6��4�L�P6��3O��_�o<�~�f�~�2�>��q�(<���F�n�91+*�UU���g��_���M+)�*�M�g%��!f����	)�`J���w����yg%�+�j������#1:���mm�*��b_z���
����fm��.�y����}K(|�.M�Z����T���u�����Qq�N������LZ��3i3)���MCA+
��P����D,����}����i��j����QI��`Y�2��oE%\���(����7r�7������'E������k�����������*��e���+�^���^(X<�X7G���z�7B�{3<�Zp���G�D�����wl@6t��X��yO����QF_��P�����M�.y��=���O��k%z�$s��������$~ ��Y���y#x%P����,��"[���ea$�X*����_?�]�S$Y�`��][��cb�
g���Y��A�,o�N'WR^�;Q�ff%!�%T7Nq���}-�F�g
Q�����+��KbFo���V��2��|��r�P�J��Gb�/)�,�E�DU���6U<��?�F������uN�z�k�S���5$��,���5����?�;M�\�����������?������_?*��>�9�[Z3���2r]��m\������9�1�;�1?�t��\��~z&���f6���qKm#���I�$�����S��,��Z����)~���e���<�;�d0��f�af8�m��}Y�@P�Lyv%�(�4��=EL�Z�h��w���A,V&O8��d2f��
��b[��h	���"�6J��)?/2S/���A������#@��
n�������S�v+����e����bn	������l������SFc�I%=�lk�+x`Sf~���")�����1�XD�+�)�%E.d����^<����"{�5�Jyn�LRM����.�����E��8%a�L�dD�������gSf&�L��d~����H����+��P�D>~B��;��:����\�-g��"��Y��/@��.�,�s�>��Al�������<����t����4~M�B�P��5�Ss���Z�}�Lyz�������/�!C������f�����?��������DRK��D7	������(��Y�Q�������/��deV��f�@��5L�2���e�"�~����Z��8�G�_*�?(oH�����f�0OHm]yV2EQ�m^H5�VMg�xMs��`�
�R��;q�\y^h��
��>���%@����)a��% O�k0}]ZA5}�y���$n�P*��e2KV&JE0�A�~���7
���{"�A�����`�2:���'K���HX����o���j����f���@L*�F�	t�
NCL����D3Q����.��$A�n�:�m`g7H�����vL�6p!��zaK��(,�e�A��@��D���ah��& 	�O7��������R���te��E��i�.�
X!3�� �!����& ��G����:��{K���f�������b����NUvC�����8�T>���Ma�������0��D���X@���:�vi���{"�=@)�h����198[M&0MA�&9�	�D�9�o&P{�n3A��ho�Vnp��L��4L��������J�����{���}�GI�z6���
Y�Is[7��v������]��mW���<�J~�#��������7{7�+���gE��
?���?t[��x|mf"g�a����)V\�/tj��H$���wT ~��YZ2�����%l��?T@I�w��Xn�%`!L���t�[��D�j+o'�C��4��bw��r�TG�M{7l��bs�u@����:m��R��B��M
��BD{��t����d2����|��:������OARq�B�*��d�r�V�'lG
1���#LQ,�G��#3`����~�/t�
&WOY��vM���P�/�5��8�5����z���w2����n�����'#$�8��]��/~�|�q��M����^,-�O�6�������������x�����+��W���D��m���U|���*\5���*"��y[
�����Nr��L
��B��p���WK yR�+�
�����cH���""}�x�L��J��<�I��J���x�T��Q0��P�����6��H�o�R�����>���or�-<���'}��3�7��MG���[���G���"������OI��n���4QChbM��7:��n4����5e��N�g9�V��]Uf�3����[��% Y��XH%U5@�1�����N��KW5�lz~��XL��<���
E������y�&^A:X����T�������r���3�#E��(L�2����*H��b�^�v����fn�3TE��nvV*�����L��>�%:4!C����g*���3M�����32OV�����P2�2Z����<5��>��C.~X�u;�k�$�Dc;<�������&�������a�z��H�?����E��}n�;nZ�Q�����$+�i��������RI��L�s���\W�N1�\��u��'�CSh%4���7I1O�n��!c��~!S5T��$�"f �aX3 �,�>$���|y����L<n,Ou�F�t����
2G+>�~�`���F2d[x���*�(����n�����DyG��F�hM2eu�'{u�QR~=e0}Q��H������p���C��)��+U'�I�C~
*Nf�Z;4�S$�fc���������@�Q�W����'���,��V�5�6��tfw�������E�+�K-�3�j�?`ST�/n|����Z8Bv��^Q����?Q5�[|�����>T|0�x.05�r�iY@���2�^9f9R"I�*c�(6�-:���U�$U�Z1v�\��?�������F1tt�?&	�����wT�9n{�L�#m4,�p����n)��J��2�z^HJ]�FGC�P,�l���%{&��j,�S�7��v�L+��� G*l$	��Hs�~9�������(s��+h��I��f�5PC]f
UP�_������5�U3�/d�����Q?b�1'��]��ZI���%O�J��e��8�����Lm3�F�T�Q-�O S��Ce���Z�g!��s�8�=��r��a*3��@�	���$a�h�-d��������h|����i�F�%��6��QO�O�Q<�b��9��C}����S�s����L$'�IE���K{�Tc;������Br��i�N_2�Q���fZ)o�J<6�b7]�7���e@Ar!u��v.r�S�%�WEJ�qv���J�v
����t��LU���`�no�h	"�V04m���8��p�G�/�� �B\>��g��s�I1$@�%��cG�`�!N��|����������(�Dl�_�>��b}OC~
������4B�JJx����6�!���XFH��`�g�N�Ez�H���w�faf.HD�
F;��$��FC�Y�e�Mo����UF�8�U�J	�(c3�mA3"o�<���
��}9IG��W�(�&�J�����Q���/$�RSrP>8���K�CE/f�����������	h��=m �5H|��7�&":�7<���An�%*[�E�/,�N�F��% �$���Oi�M'������)�;�Z�/Du�JW�����>9��Eu�;����
�K
s��j����U��
��`��YZ������Ev}=Y�!1	�i��(t�)�����������y�Q�-�lF���]"�������*�5�[b,���@��2���G%|A�O����&l>����9`n,���};��d����b{49a*\IM��|C)qE��y!�( ��lGF4�lBH(1g��%��h�K�
*/�g>��^�=�@�+$9���#05�o"r���Hk��R1|����jB���d���ZI��c��l�.#������u!�������u�/9�5U��e�0�	���n�UR1p���4�N��p�^H�
����������xq�=����#�
n|X����* ��/�]���qm�������Z;}M����O@�����|���L��U0���Y�.�rB�c��"G�b���}y�	���#�c�H�=LD0���Y��n5
����Y�i�E����"Z����6��y5�b�/zl����^(��5q���f�b�����'Zc2��M��������:sb/� �����e��L'v��S<_�n��("��x<9c����pO�d�s����
d�S�����n>D"R���Z������X�Om$3��hBA!i�����U�Mx�[�zh!U���T��
�/�����������XP���X.�B��X���$�v�>O Y��<6X=4;���~
uc�-�����*���=,	�4��Dy���m�������~����N(�N���Vw:1��H�/y_�?A��(��>#��O���QAM�����i��b5�H>^����Dd$���.6���%��W��a]�����������E�|.o�cZk������<<����"��{>����|x���=��t��0�p�>�������pX�pxN%
�E���������q���������R�A���|8��>�a���]�a��3��p���}9�R�B��T�����X ����u����(2��QH~�NO�S����C�E��8�p���q��x~��>���o_���
����#�p<?��>�~��8�p\���C��G~�c}�#?��>���c��n�z�.���I�!��r��|.5�&1�����pxOv��+?y[����T)��Y����{��}��#k�����Hf}�x�odf�t1����u|�����Y���p�M��b<n��t17c����?]�����.��f�O����e�]vm�u0���b�@vY���
H��I#H#pj��0v��4��� ���s�������LQu�|����Ta�'����������?B�������Ov>����6�o������1�AS��h��clE�fc+�7{[����������Vtnv/��q�w�}����h��[lE�f�b+�6{[��������~�Vtlv+��a�W������h��SlE�f�b+�5{[���B�CaO��p8v5�p(���A$���g"9~=��������'�����o��}._���<��P��1U��~}.���<��P���A$��-�\�Q�?���Z~?�HZ����X���D4�VC�|��SE�L��i�������$�`]d�07�Ee�=���xl����@���g�n������D��f�L��2QB	��y�'��2�T%�����g0�a�C7���$in{�����#��(TCN��S-\���������YD���O%���o��Z&�������	�Z
m��XH�U�p�?d��X��
D<.)�F��j�s7z�P���FBF(�����-�E�����$�T�Hz
��okZ>�O�6@i���Y5y�F!�	��]���/�,��� �n������G�NV��tO+K�>���8	,Y��l��FD�P�d�z��N�K����A�e���I�k'�q��o�w�����36����8<"���Ki��
�
G�/n��d�����+���a2�yqm�7��������I[qDg����dY�����At�!q��,M�*�
��ho�+DK5�I������H8�"����e���1[`3���TYm���k}\����^����t=��m�2�(��"�@K�M]�?)c}���E@c��n��N��n/�P�������n|�D��6�$�:������ZCC�R��H�y���_M��$+�D���YwP�}��bK�EC��� ����@:_e�m`k���#��IS����f�I`\����f3xT6d���t�u���_kTW�j
��(����9+���%����)�f��������CmM�w�Z}��{�[���	����~Mrgw�Ae�w`g/��VF�d R����$/���,f�$�q~�Af�]�F=�$��_:�L��T2p����nI��;V2p>{�'��D�qxmA�\V�D�Hc�y�R�Kd5���,����*{LD��qA�����zd@��$Y���a;
T�+�L/6�{����B�Db��q7M%S-5�����"�6Sy[�q�3�<���-P�$��J��b���]T'�9`���w��U�#:�{l`[Mm�a%�����mA��U2&�����%�YI�[;��I��&?/"M����J�W�����$u��U{�=��+kG��T�m�`3C���b���z�|���e`�3
T�_5dTg��U?��'��#����T��K�+�7�����cIhK����������������T���*5^�dy��m����4Jf������"z��U���y\T)+S���B�p���Y���uh'�$q�MA|�I#U[|����k�t�@�0���ob��O�+��,��v]�}��+�1���H������E����x'�����O�z%-�=��:"��5�o�����f�xP����V���"7{��v�F��p��w�T��yC��Q����G&g�dY]�Q3F7�$�v���� Y'?�I�vSzF�>�1v��&�,�����6:�1��dI/���\|�/�L$>���i�<D�-��g�J���`q�K_1����C�qaCF�P���g��.��]���@3p�R��Ij.=E��EQF��f�&�1�1���
f������/~�2���I>8n_Py���L�p�^��j��.
s>Y\m�O<k^eo�2��P�����]OE�/�7�����B~^}�����*��w������a2����b��U���3
`1y�^�gK�^72�A���<����,k���X�=y����Z9�Kt\��w�3mB�r"~�d��
Y>
�~�	�K��������}��.��N�j��8Y�����1�=��:�&.�0!��"��D>1;Byp�F7�Q�����������7�p��k{�X���c<G�dh�:�(K_���Nk�Ae�80U�L���@z�,M\3���c(��d�}R�6a��d~��h��������Y��`��?���U-t=���H"3�My��������Jf:�x�{w�Vj4xG;]Km�@n0�N�n�p����$��"�0���R�,����s&&?/2�|<��q&���H���rn�%�QP��u��z!���i#�B��`}=���Q�\�=��O&
�k�\
� +��������A--�N���^>�J��.{�b|1��0�FKE�Tf�_�;��`@�L�
���K���M�B>�&d	��f������,�,-C����(�%�,:8��66��f�xL\��z�F��3����������g��{�d�E�J�+fI����l�������E�p�7T���"<q;��YQe������n�UQ�&<�_��sf���Y���}�*���s+���~�)����'� 	AMy���8"���E��G"nL�k��"r�zO�l�RY������v��NMK��8���v!�����?�����s�����1 �N�/��f����s`������$6�2��l"�o�*/?����SQ�t�'��#���ce�������9�������{5+��CUy7�F����H�Nj�������bx{��������D�y����$c���y��lK�|�G�J6�,"c:���c��U]<=��
F;l*#�T�{9P0��w��XtS��K�N������?o���m���o�����IXh���
@C,@�����&Iv�v����Z������������vb=-����
��P���_�Qn-���-�a���In�
p&Y��0�OEZ�����&��B�R�;�m�D���mn�Z��y���^T6����P�;bYm;v_|J&"oXFs-��2�p+D�+I���l��Z���/LGC'��Bt,gv[����'��r'y�]f�dXo}f���-��Eg�q`�����^�����nr�����-�@�S._>My"��c1�&�^�)q�j��0��9��)�(�+�y�_��X�\6����)O�����.���2�uq��M@k>�;����d�
&�7N��������'��]����=��������`Ne�V�Q����h��b�a��}�,�]>>����-C3j�d�L&y l`�oDK0!j�6H.���FMot��,��/��0��G�e�!���&�A]<�����G]cL�^���^H\�X7���3��
A2+��d��9�SEq$[�#;*j}�k+��@�m����zVLs�1,�f��`����M8��������k��R�NM��'J�`f���
QXR>���dt���=[z&(���E��hJ������'�C�C�������Z�8�v��NF�_H*�:?�L������2Q}&�\|�C-���'����k���q���+��L�&4���)�G�+V0�����s��������
7u����QF����6�q����bZ���#^7�d��y#4s��c������iKX^H��:���;}8x4����$[�����Q��G��l�+�l�@�'�����(3P�mi|��q������8��3;�c���,��>V��WO�O��u�{���=]�u�{�����F��Z%����K�y�v�i��!�.�Zh�	�(��+���"���9`��N�#��>��`�M�C5�U��]��i<���mDp�sv����^@D���X��0ed/[�Tvs'@���	�DI|�G$����%]�')�1���.��f�6`:7�m�"��f���P��[9���Z�}�R��
��3��JeP����JE0��C�����p����$�
{(F+3�i���#��������h����1Z)D����O����9�<}����&_�[t��w��r0L���D>����y^�y�&��w����0�w	p������YF�f�������<,�*�]����1BX%� �}�H�A�������[2��hi�#�~5����L@D�y���/������0�j
~r��"��*�2�g7�@��D���?�7F�"�W��=�m�0�����}�f�����upzE�]����tbB|P7z�=�7�$3����^!R2�z`O
?�.�M,H[���q^G)�W��s���
�T}� ��%���M��@D�SjP
<(���"�w��� �=h#�W����A�����3���O.
�������_O.J�=�����G��wO������ypX�������f��W-��dc>�N w,��c9�t�s���U���[�-;7�'��k�c��%D��<�=�
e������P�m���+�~M���S��D�K�� �u/�_��7��]�x���Y����d���Bj��_�������������}�Y�7����{��i���!R^=:]-�:F~�B:7�M�X����c���0!��Ls�JM@���J�x[�q��M�2��N���[�U������P"���L�D�`����D).d3�J�T|���������5��;}m������ K�|��OO��u2I�X7��nQ��*8�,x�_ey3}�YB���0n
��A����Bb�����	��p���h&������^�	tok3Z2��<'�X�����{x�,��c��]H;s�h	��-��8}eA��c_��r�/\T����V6�Y@V��#{em�������T">���0q��HD�p��u������jOQp��I>c����S�K�>�0��|��|
|<j-�4��d�H�Z����M�CC�` -�/4�
���P����U��Hx%������G�o��������m�Vk��5�L�0\�Z����0=�p�N_� ���p�"l�&uL@4���5e�Y�����8O"���9��O��u+�l��L#������h$��S�W7� ��|��taW\{�<@��h�4���h���������G��2@�c��f^�?/�d$-`upwk?��no�gt�z�G?�����n���H�1�c��
p��W��.l�kL}!��	�'����W�V����D�E�����x�P!��<��]e]�u\��*Q����7���F��x���7��%��3��4l^�	M@?��3R���\j�H�IqLZ�b�+�_���2A�l��Qw	Xmi��LQD�����$T������-A3Y2���(�e7*B���N��X����X�i�y�x�����Z�D6+��]��3�,���/w��GWQ�!�	q��*6��ra���*oF��W$��2k�������6l�Me�C�n����U)�[?Vn�/DJ��	)w[��Cu@GZfu�����n�aY��|����l����[��m��c��Z�=	<�-�KH����1�	�i��4%����y��4���D�D�[D����e
�v����*D�g�,�+��s��^�o`�<����y'�x���g�^(g����4��fr�1�V�']E�1�����2-r�[!c\�v����&8pF*���S�d��*��,d����v�SL��P</h�6!`S@���F0hg,A�#�BR���&��<>����q����iU��*�j�QEM�WVV
�/�����[�|�		��m[dBb��U4�������X'��[|�T�kj�T�	��v��c�m$>�B��h���G��a��n�Iy��G�h��z�
=c�LbAZ��y���Y^L@�f9��n�|B�y|�������t�W����qT-l�U�������S@-���*�3Z��kDw�������mh!��=�n������#��68l�X��:��T "�Pl'Oh9��� =�M
u7��O��@��0LnZx�{������X5�r�e������62*��}��0���s��-��j1���U�y7���O�V"b ��		�����d��d	�_W�n����_!��33w�x%���q:�������,�*Y����!���nm!"��lf%��(DU��V!��t�H����W�"@�x��?�����������z�� �j���~p���vMj�����qk��^�m�#x����
h���AZ���i��39*�`FQ���B�^!�Hq�]������1��-F��Mn'g��<��b�L��U�A7�6��,��C�&�ior�&[��zB�6���.5?PQ��6;� �vq�yy��Si�������$���6{,���(W>N�������h����XP�
����!�o��������h�N2z���<b=E�����w4�?��tp�cc����X��g?8�x�n��E����\����VE���l���
��|F(��rOd��z������}���d�\��cQ�x�upt�[�E�������'�[������q��OTE�4����%[^�u���MH��bEj"�Ti'����4���Im������Y��`����@Az�i�W�22�k�y���v�0?��0�-]�9�V�)H3`[����Zn������x	�����^D������v.�f}�h�D���o*��d���
�����M��n*@E�sk*IaE'4�����i�`(�-���@O�^��F
"�Y�A��=k�L8nX����E|�����G7�)���D������u���a���?6D�
y^�FR���������$�(F"����\+�w��q���<od��,�|�y4�P������D0��a���62��������K`c��5o�P���/�4V��jh8�$T4=�������a���U'Xkn� m$���2���eO�7��I�|��	}�<z<���8V����D�o��q���o�����N�P���#Q�-��������|� ����T������L�hA���B���A��zr��"�BB>b�0n&�.��"jH����!��j���N��G�n3$b�WA	ln3�F���">����-�����pt�,�������i]�]>�<|����K��U0~��`o7�E;�n�H����������sE�wgY]/}�0�2�a���d�=K�P�4�A~,v�T��'��s+/d� ;vz����VQ7��N[/�bG�V��!���=��Jvr:
k}�qR����X6��zZ��&��K�!~xk�a�����!�q��$��|��{&O��1�d7�_������,/4��Y��v��{3A���=��FIj��t������-�����o�o��B6��rB����W���c	��?�-��Nt�)�j�A��a�M�a=�J�S�w����1�e��`R��{�d�T:�����;�	���B�u���|"��83��y�+4�D��)D+����9�B�����%�I�91���@}^Du`�n.?F�t�����=��
��l'zg��TH���'�����	G8f�������cTP��
��K6�\BYI�/�K�������a�f"��a� �`E:B�!/�B����=�������=���
����v�:����IL�\!R�N�2��,.����QO\
�f����F����|���������Y����������S��d^���o����xQ��&vw�Q�xee��,��#f,m�'�D$@�
*�KUW�j	G����(N(���?w�
o�s�Y������6�y&�f�I�Ni��s�&Oe��h�M9#Xy-��W&���LM&n��q)����F	0Xj=�6���y��b��os�����`��������yg2���gO�nI��-�����IC/����G6D��y�:��;����d6��z����w�|BZ%����ny�HJM�M:����������VgSEX��!�
VNg�3#RL�� ��V��\t�,o6l������8+�
�
��`D��=���z����psY�������F���!�`�J|$9.F�uw}f���6�*z~��bY_Wk6�B[�y����5���%`��g6M��0�9��
s:��8Q>�lK�4N�1�!�e���O�����O��)=�J��BD�w�%]2q[RQ0�v���M	QT�E=�ML=�Y�� �CdeO�t"Fg��i���L�W7cZ�?���k�RQ�fI��U��$����<�9[���N�=�M��U*L�lO����q"�[�s5s���"H7KJ�RO��X��vF�[�ZP�-[�seD0,iEZf�V��d[s���0	��X��|-�T}���)���dJg2�$�Rw�����ufcz�����Em���u�F��f��|A�{p�JC����A�+���*�Vr�R&��Hl$��,���JtW���e��,�c�~���n&>��q�S�]1����g"�4�2�(!��#)?/����	O�FQ�46d�7�GQ1�BMXy2��nV���X��D3�����6�``�*��K�1T(fCu9miX*J`�����<��b��*4����� *M�t
o�3�q����"�i�u4�(�������kC�1�����GV7�%pZ$g|^�D|^���P���j�y�4��_a������6�Q�?+�FQ��suTQ�4�����y�N_��s<�X:2�4��8��GL����g�C�06�2R*�n�1�	���T�
��|%e��*NH�.n�*��BR	\��`�J`���?vChfy3@��_i%�f;
���[�'����GO.s���d<Yc�'�9���f�7��I�1��1��a�gb�&��$1���4cI=w*@Q�i�d�FM�-��L�|�Fa�Me[����t�{v�<x���iO�<���P�OK�T��H���>����K71��O�l^EQ�����Zwyz��,WT�V���_�S���[~�����&m=oA�H��
����L�[���ai���s�������1�m-�3;�\<p����|K�:��M��gs��%����a�c�oypC��
r�'��6�'Ew�;�����E��|�������*d����5�LR�0![8��,�5�`�I��&?�P9Z�g�Nc{�i�wBZ����-��(�o���2�K�d��=����9�hp�4^��q�bf�~tl-�+8|1�f���n��h����T���ix&���`�)cIc�&����l����>A1v�Z���u$x�hIo��8����+D�H����Yc��<q�i��NO�6����S�*Z"D�����LH;�k���Y����
4u�G�����nyw��#��'$|^���&�P%��<m��.N��;��t����1s������'�I��]:3�,%5���c�u���{Xl�3���3�}X�{>9��8�
����Yj:���$��	������"��J���?�z'��0�s����$���#B�G�������b?>����q~�vr��:�lFP�B��tv�b���{$#�8'�D����� �!v����Z���Y�|I�z'�-�v��<,#��8�AG4imB��ai���*��!�YogC�]O�U���<<�� lG	�A���Oe�#�-���#�����J�I���bpej[��W��/���%XM�f�%�2�a�=:��-���:z�J���O9��!S�g}���4S$�[t���g�Pe���D���B|�G����4��
J��65$�������Dt���)��3��"��"[��O	�lt�olM�y����U��GL	����|I���k|K��B1]$���Y����L|�(L��+-�"���zZs��H�����.b�Lw�������\�VC���F=e��5�j��M'-���D�h�
)7k���r��3�����S��-�U�2��E�2#�[����E�-���DF������c����iK�#T�����$�\c�8�W�WU����1��-�N.�Qy���t]�t]���1_�T�q]�t��i-qb�.���u��6���������������������������������������W)yZ����.�ud���&�����c�]��k���z�Q�8��y� �q}��k�_�sR"��K������_������x�Sr�?������#�{���x��z�����������.r�����/v� ����Nv�~��?�������������F�������o�1���4����Xe {jV��$h�y#�bk�E!�m����U"2����1����@dK����O�����6d�C�%H�	J�E��(^hg�L�#��lu��[�%����5���gm�BxT\�E��`��6��-�/$���pd�n��%H3��LD�A���%`;��|�o��w)Qy�G���8�Bg���!W�����<�����E�!
��\���%!<�(u��%n���$?bf����6{�~B��&@��r=7�������(�"���GT�Yi	@��k�ar����C�g"���"�����`kT5��|�TK�8-�H }�O%KV;v<R�	����������Y�
�P��m�Y���|�Y;�b55?������'��
�%�� 8��7����&Y�jy��u�G����>�������o��d�kO��7@}�^�[�o�]�!8�f��6q�-DK�tOv���$Q%�������[Sd�of���mv��s^�h	�,�k=T}W2��Mw0A�u0;�D�n���vp{.Z���Y��R��d�����	�`?�M@"P�����]������?��.%9��8����}������I�^����`����L��y�S��_�Go���b��fc/U�����
.�X��T�dF/du:��{;_��A0P����OUQ�c��o*�h�����bZ-8.��Z��-��B��[��e�I�TP;�tK�����M�z��j�[�?��R��_�,���v���Dky8�
	U��<K�T��{7s��U�2�a�����nK�XQ������%:m	��7���f������Kop3���*����v���M�0���%@����a^;3�"2�F3�lJBE�l<��A�E�-�X��8���!VN�E*Z�h�?���v�h������{��`��Y�����Cu-���7D&��X�j;�9�(�F ��[���9IY���-tU��P�M���� �
�J82KW����A��$2��i)�.��D����y|��oh�n�G�
`v
�J�E��q�M-9�;���5y6�����'���<F=Bq�U��;����7�@|�PQcKU�lc.���%���I�0Yo���<�����hAq
hA�}�6�,�qW�������B&���
�Q+%)����n1�K��D8f*Dd=ix"8�����-�����G�a���	�������b`VQ�S�����S�|k����_C�a�<�uG6�@\��f3�h���>'�#- �������H�[�����n������GW`���k��(hQ����-��aEv�R���L=�����#~��L?����`x�y1��\�g�c0D�2���-��F`��;�|�_H�1�s�>��ypY ���6��P�u�**�=�_����� �����r/�\��dm1�#6Lc}z�0�	Lh�����/�o)@D���������/H�E\LP}���/`��f`��HWr~~��������1W$���%Tp�80M�
}-��b���3#v���G��*^v�r�	����`��$�m���J/;������i�[�~z)k���(K�yZ��Zi�����+j�����k�������n���*-hi������Os�{s�UQ��}��4��^�16�t�Y��K1{@�8k�z��$2i/��g���J��7�O���B7�$#x�����\���Y���F$f-oKe�L�Mm[{8�-�.P�(.��p��Es��5��,���L^"�z���4nfH-��a@���=>�P����'���)G�R])���BT��9U���.��'�8���	Kf��d�����h����j�u�/����61]���MSL�����LDv7`���*m<�:�RAbz��r���{KS&+��=U���K���S�$�&mpn��TEPc�[t������c�C���Z$Y�����H|V*��Q�X3����k��F�$��g@��;}�gF�K�����(�iSA�1���6h��_�	�0�������)^A�^���o�%}no��<&+����r�_�]G}��C�n����5�����qGP��E"�/���S���Y��(�rd��c �Nh�7����n{����?��N�����>;��c�#l#zl��m��[�}�h'����YV��<C�v��EAx� ����.*�N�������}�C]/D�y���n>y�EA��kv���;a��������Anf+������}���l!���M�Q����k���{��p;��,H��q�UQ��S�T���1�NZX��b�41W����g[\�V���[����-VSpoS���w
�a;mB�y��"��C�^c����z��tm�;c;�S�(h�&CG_l��s�	������|���=�~.���`�w&(-����>��������Y��>���4����p�DD��0���g
���$����	,��	`�#1��_; rrH�H����a�>g&I���;�}V���}����	i��`��l ��0�a^���U���g�0�s� ,M�LD�Y9�������c����z���g/��W�������v{On*�I�-�����������?�6������x�*,bV^�.�����bT�2��s���8���q���R��R��w]��5��4m�����,���S*���4l���3oA�@�u5��/zX+J@��w��:���I���l��.�TH�G$�cm��Z�����/�n�&Y�L:B�fw�F���������G�������^�4�x&�%pS�l��K^H
��`�DN�����5w�O1��Eo6�Kj���N�r�����f�����(���@����f�:5���F�0!���R��=��y1���'���d_E���\ u��~��K_�
24��??�$��:l0�!3��H���]A_7.�. "����B��u~�@c�U�p8�,o�W_����3�_�`!�.<�O�>�J�Z6VJkI>�������h�'K?/�J����GKE�;���@[�TI��Nb��@�7l��Dd4)o�O������ETw.T��UD[����ZBYC����h�[�E��l4��;Z��7��iz8����nT�q��_�`V��,�lZ5"�0�	�<$�,��I>��I�p�f���������L0�d��p�l�C>t�p���#\9� `�=	����\Ya�F���k�#y��y�=��t�9��C�>/"r�~/}����~�����5�G���nE	�h�����L�.�{1�L����"�v!��X�c����}!G^��[t	;�DTdp	��`�f�
�JD�}^��=n���0����nEKE��T\L�"���5w/$��i������|�����~>�����B%M�ol��&�q)$�����zpP+��m"�����X��B���TmXx^L�)v�����-J<z*>�~����'P��f�eW7y��z�-�;����3w�9B+b����@X�~�S3Y���Y�q7��%�T{q�\�����!Z����-~����q^��H"�G\���������T��#L����
y���f���D3�*�;P�]L�����NL���#�5��gap�"�%�^�G8��{G;b�w���?�-Co5�9!�a	��8����J�)/$�FE�|~��\���L���2v����/��f�.eBM4�]��&��-� F��	i���Po�b����,/&�uU;�����O���fDhl*�Uz�"����>�5?,�9��6�F*��"���i���������2�\|.GY�M��E# ���m\-zE
�.��������?JHe��Q�G�>@ }���k���V�����+�^H��������_��D���3�����v����vp��z�����k+�:�E�7��8��^���������,�O����~�	�u���EW'>A���g���.|E��*
��EYj�C����H�4�����M%S?����"YF3�6��"�a�8Gh�r�r����@�yfvh�GL����D
A�*]��6�D8$+DJ��r��}r:,t^2����r{O����I'�����>n&!3��m=��,��<[goLLAt�����$��s��ZH���%�e� �$�aT������R�����e���^7��"=`�C>����������Q>f(�;J��6���X����*�k ��z&If<K���T����T�y-�m�"����l����hE����M3����E����xXa��V�����/�1������i���H>/2r�}Gp�� �S�+���4K��w��~����q����'��M�.i^�������*������''&���0�1N�����������5����`�M�����T�f����8�����z�1���������LF��#���<��BL��YG=��RVtmF��89*�\{a�t��*Ry���2���f���0W��)`�F�
���	���kqf���MMYW����������CB
y����������&a4>�&u�K�
�:6Y�3��i�d����p{��O�Y��pXRU�������D]s��,A���J�� ����W����,��h�g:���q_������xJN�J���:����\
���c�E�s�t�j~*Y&����s��$G	_"3�����L6_N����|*�[
�{O��5��|�,�a����-f�]T+�p�i�Q>��(}}{=Z�������Y��,w<��db��|������d/��t'H��_���eU!��1������I�a���z�$/���0eI�]. ��v^��5�d�f
w�8n���]z@A?�]�(u���I�����b��6M�<���Pd���^x�iew=�!Y'���	a��H������J�JVGa�E��>X�<��
�f'E?������r��,c��n=My�\������7��c��y�m�[�Y\���
�2N��-��7w8d���Y}�	��}�!M�������J��������MUN�����F���ix�b�n~����#��#��.n������7���:����6+�1Uq���\�T$�����f.e_�^H���s�_U.�B)�<��Y(������a�s
i��)�Y�����&:�[�����a
!Du����uQ��@_��W�����������!U��xZ���b�N��QS��~��$J����;B�D�C]&�L�K%�/�@����W?��;�]f<����v�.0��R����iiAI��������'!�|2����A�p���,n	c����Y�W�a�W@k���9
������^�|[�R�l��.$���n���H#^U����N}y*H�8��=����gM���V��T�2�aG.0W���_��n��������J���0����v��/G�Q��!��vZ�"�<iI��C��������O!Q�V4M]'�"���ss���r��M�"���P��x
2qH�z�'�����+_�	��������q�2]��5�uD��:������(��7�c8:��� b�jC�B�|<�D��4#�7�-4���r8��#NH�LpZ?��:�""�U���qp�J��I1������w�-�����Y��m��MD����g?7)r��!���n�Qq_�x��@��t�?�%��,3���30=������(+������\������$�{��6.;]�y���XdnC���1E�"��-��6f9�
�^�t���z�FU����k���m�R��c�L����lQ�,��Q!S7]���^���.�T��������&���@������`������@iI���BZ��'U<����������V��g��#`���?x�:�Wdk�?MK�%�>`?8�P�-������T���-)+�����f���qL���%������"U9�c������SHt�&6����D@I���#po����:�M�����ps��Y;o���RD,c+�[�v�s���E_O!?�C�����.�n�m:W���:��J�;���V�t�Y��$�2[2WfN'�eL�5k>�T����a�H{�R�&`�iK��mg�u�D�MW�;g]+i��g��(���� �k#t�6�79e�b�$�w��db~-ru.)N���J^z%�la4H;\�q�='y�a0@d����t ��,��u��:��0D���	|%����fQ#m$Q�l��Le�=�8�Q:}�~�I�W�f`��+���Y���xG�iJ���	�w�i������{��YL�R@��49l��RH����4������,�/�lC��E���
�Q�f�e���������H�>��|*pq@�`=��SH�w������I����Er_e���:W��C��%x(��I<������l'_"����J��#������y���~A��-=�����+�L@�4���e����}�Xq��Z
^��:5S���Yt5�E[�P������D71V��(�� ��u;�y�+[G����I��(����q���3��(I���=V�)�DnziE���W������p)Q��Y�����pY�g
�����8n��ug�����(������~E0 ��4��`*0�K�U��w�'-�Yl^Q>���3�w<�1���_��3Q
J$��.x[|?����7>y��$���FV�,�Z
��NQ��Yud�aST�:��3�C����
�����K	~��>�V�L'���Z��:�H�&�'-lK��u`����`��s6���������g?H�#������0�e�0��V��Z�^S�Y���:��r����C�Qx��su����Wp@����7��\��>t�����
��>I7��
B��>]��}Q�6�r���(n����]6-4mt�R�b���8k_@c�A� ��"?}k~�S��F��g�U!��tU��m��~f��,��Fw��u���|���x;�Md�1Zo'��Y��kHV���H����t9���s��'���0�]v��L~8TQ[�2���s��������	xuJF�$��������S���^�_Y�$Q���������jn��t'�h�IT
��0". U������������y�ASc�8�rbc�$^Q=�_����p��d�Od�/�������,�V�a�IRQ$(t��n>�+}^$���l6-�
�vZ�M�w��+ l&�sq�z�16��Y������#��q��#�Io��K,����s�F�W����h(M��&��U���Qh�N���f�a���+1"xe�������lp�a�lCb �����#e���S<r�4�����[�-#���c���l�^�uqbc�����?�XX��'U6�� ���g�����DWOjKR��:D7��
�b:���H�@uj���;] '���+:'�[�y��G�PU�W�P��G�Hx����YC��W��^���O���
��������Y�����[�?�������G�i�S&���5�*�����!����{��zg�^����>]�F��j�GMs�B��y#_���@�H�&g1w��iJ�]���Wb���F����2A���
�	����$i��IM�/=D��(��fp?�j�����4����R;���VU�%�u<�X����)p�w.%���z�&S��w&?�,
6���
���j,�����3�/��:K�������$����-��:)}]u{�?e����>�t
/�hFS�����f��H��|eS�����Q�F�ed[_���hQ�n���D�N��|!�����
f%=��D�����L�^������������H�����?�4Qi������}Z�}&PYxHv����e+}^DS�nl�
z��;8�o�J9!���i;n�56{{���,��j���#������)9�=-�A�S��?���`��L���\�=-�
g�e��tkZ�Z=Z���K�1���=����4t��V$���)=x�p�#%��1�Z��?q�rw2���#������0�\r��LD��lG���\����^��=�o`��`K!!���lF�iR���
]Kv�",�b����`*�/������"2�_�%���YG���&$~5�0%T��N��(d���<I��"-]7{�U~`:)�����+G�(����MG������V��w�&�� �I-Dd�r��ZfXT������r�I������9��L[��N��Z^�c�j��V��-��%k*��,�!A�dw3�aH������d-�)-H�u���}a��+��8MS��r�U6�!K���K�lLJ��)w��[�T����_z���lOg��t�lM��kZ��c��9=6:NaMg�U���~��f�5-(����*{��iE�aO7s���$�29�����NHk_�������9G��<w/[��</uX���fsM��N3k��K@Sz��
K:4�������fCZ�V�y�����g�j�� ��#��-��z2�\mw��6�T7���U��H�)�Q��dE�d#j:jV���e�U]����B��4b��M	�/|$5H�V��> ��q��&�y�qdH&�a��f�u'�9[�N59��UX�'q��������zX���|E��J���G�F�I?i��t��(yi�=���k�����E����Z�yO�����@v��Qf���{��7�u�(� ��,H@,��� %�w��Y:�?�(��Ne��t#WK�Q�ghV���Z���If`�!�9�:�3.��m5z!�p���mp@n�Y_'��6�I'��(
�l>���~2!/�Z4��n��W����������������a����p�#`�������������f����[�9
a�mq�!�b9�2��e� �x^&�K7&���h��>��2���Pz:����Y���g�!6<�Qm2���#�IK]�����IF���yu�x������4X"�vA< mw�uYP�6��T�g�"f�.�'S�'S��r"�pK~\���`�,��ET�I~rE��Z�A�8�yjw���y�=\A�>����G���3� �����n��o�Y��
��z��??��r��m���KO[^^h��u��cW��2�MH��Y0K-��1����=�|��!`��&8�#���o�W�E�]Mx�G��,RA�:�l_{�>bS�&w��9e�-XV���NU��������hH���Z7�e����pU����I��w:�;����x��		�,|�9X�l>��<bS��~u%Tfdu�.K&���@5:p��f1Z��a@���3�A>�p4�B*cW����7Z��g��O�`���F��1����������<8?w���'#�J����U������%�����,`kKj�����"��������P�tE�n�:b b�.�1wP�:d������R~�Z���0�'I��O�
��{��Y9�o$7(�� �y@"H�X�@����Wc����������.��/��F��Q��iw\
gcX�������F�/�
�������n�	V��t�R�H��P��F;��-
�*j�I-��b��$�6b0�D�Re�v��]WX��~9��*
a?�y�S��to���C��r_Oh�����_�d!����|���=��H��=�G���+��%�~��$��8��J�hAa��O0������)�����B���-3�����(�Y��"F���'�fe�g0N�.�QB*�mD�6�[��|aI/�F�F�E�K$M�e�����Y����ZKA��	D�O59�#�S��7Bv����P��]����h^���4@�T����3��<l"Z4*2�blq�8�n���|
�U�/�`&O�'7�<nuZr�	����"Q�z�i�~� ��f�mR����5;	��4
�G:�p����~.�I���{D'%5�<o��4k��gY-��LD��\�\!�#��~�a����y����	��fC��o�<h	�E�����]���yR����=f��kU�v��J�f���k�����<�������}��P8�m����u�(��-&w
ok1�����<{F�14yO@K����I��([e����3�����"

�������-�yeY������D������QV����R%*�l���-d-h`AM�.���UT�FDK0��� Bg�R�$����E��`���{��+�z�x�r���rC|!�4�,o��v�>�!U�;5�	 �O��M��@K��c��6�}��K: ;�*P�=�$���H������7S~��&N���YM��Ra�c6n3���5L$J6��OF�L/�����e�����|v3�9�.d��(��L40�Mv��9�xo]�/~Y�#������@������/[9k��B>��X�BG�Z�=�I�}�FXB�g�J9�r�*5�e����U;����������QGLLR�f�)�'M�a�^OE*�tn��N^|��� i%��$G�S�[��m�{�~&�"�QE��DX�`��{�X�^H��Y����(�T��3��6�;O�!uZBCK�z�=Z3��*�����q��$3�Q���g�)hQ�!F�j���3���0�`���#1�{��Mv���� �!��`����-}`AZV���������<����^~������9@�������N���6d�*����n��(�5�Gi����V�w�;7�A&XdQ�m	��lp����dx/n��f�3��mI�)�+b�H�S���Yg���
��/I�9s���]l�	������W[s��>��4N���x)�����1��	�/��b�hE������+���������"7n�H�������|�������G�"�p/F���5��U�%��o���>3Q�d��j\!���}���SWyX�v�SJ��d>k������7�z��|T�B�N���d�j;��:'�\���$����_Zs��:$/4Y�Df�`���?Zdz��G-��4R�����%��le(���E��|x�!N���8)8/_��h!�b�i��O�	��n��������4�<����m��?��
�{�Dt:���#_�$���^�f������_�"�X^�����|hY��/�{����G������,t~��h�eZy!�m�s����2����y� Hv���t	2�w_��^YA������i��nG����Y������"/����i�=��g��eY�2~sc�e�[��E�����-P�v��A�&��8�e��o��4���/hr�S�n���~&"{T`W�m�{n��~��k���'��ed&?(�����'k�2#����z�Y�H�G	N�����D�<������VA<hU�>���������U�l�7�*��x�
(
S?�63.�y��F�m��*�d��Kr��d�edc>�)5�e�~�Qf"��H�f>\_����hd�mp�c^� '5k�=WG�a���s��x2E����sW�@�4p�/]��/{L�bL�	������:����4��H����1}O��:�c����B/�y���y��14���U9Iv���w3���q���#51#�93mFH���Q�W����~Z������>n�!|����DEp�Lg��+V�h#����{�S�������[I|%��y#>62`�O��;�m�h:�#��-gr���T��/J,�n)|g�����v&��=���_�4���(?��N����N���?C���?�_oz�E��K}�=D��]�t]�|������:__���O��>_�tb�.)��u��s������F�t]�|};���Q��s�>�r���{��N�q����K��{�1_��t�j��1��|}�����6�/�|}L�Q��{�^����lH�!����������C������SL��u�1]���:�t}.�^�����k����u��z���b�>����?daz�1]���qb�>����?�����_����}�'Y�}j=��h�vC����[�Q[w������d} ��}�I���O���oS�RL�g���v��U��Y;^��Nd��r�b~�wW��z�����u�����
\!���
\!���
\!���
\!���
\!���
\!���
\!��}����u���&������n�
1_�n�
1_?���n`��q}����~���~\�!��m��_qC������'7����
��rCx��n�]��b������?�!v�On�]��b������?�!~�n���
��rC������'7����
���
1C��??���
���2'7���~1�!v}�;���s�����-rC��\��������M~GrC�z���E�>������������w$7����?j����g-���&C�;�H�!�	���J��uM.6.4�v�_� A�I�9�mg���a�,,���>/��D&g�����4! '&Kf	]�G�(�e�$�D��M@�B2X,$��%�aQ~^D>�D���S*|����"?��C�;�"�$�z��Zp�x�����L���j��/�n0����*J�����/LQnz84���	���	��U�'KT���a����q�����b}�������<���|>��E�.�7'o*	����,��p
P
"��%)�N�R~�,�-2Wbb���@�������Q���,7��B�=���n���`�n��QO{ �y!�����=�t/W&Y�!��"c��L����:�8>��E������r�W""����U�|�
-�B�WZ2(L!I��KK.�����d4����H�h�4��D7u�U������l��q�	L$�KA86�	��������mt�9��h�+�������W��?8!"�6r&���j1����F�m6��E����]���d��-�a�����LVo��M���Y��e�q��hC%����ktv���� BO�w7�X�������-r�R�h�3���7��0�p�TOc�Nn�a�Z�����w��*�0��is
P+��d�,cR
d	�oQb�!���;��C�	p���Y��qX��B�7r��q��[
���y��[&�.��	�q�����n��s��O�|��H�P�zR�3��q�}��_l����X�&=K���i���x�+
��FV�S"zJ��LZ���<�!���
-h�5����U����Z[�zG�NEwQ�jYy�z�����K�}�� j�7��>A�~�B������p4n�{�(�/��-A&��p$���%lvwepJ�1ma+%�Sj	n�
++^(}���%�51�I�l`���x��&	"�<4g���j���e��X���j
>q7S��{������i wY�	k>SIrmOh�7]f�rbC���pw��=P�m��'�3��%0t����&G�o2���b\��#���d
��%���a@�����f/�=������|��6@_�L�vH��ik�$2��?�b�k�y#mTm�2z'D�P����_�I��\���q� �;:��g��0����D<��������'�:pt��2�Sd�e�vF�:���P��g�Y!}��*�%P���$��g6V�N,2�}mr_��9��i����/@Uv�+n���i��g���p��3���������"c������X ��:�����}'����|~��~B������@b���$������a�K��~�f�� �d5��N9G���2��B�������y�J�DO����O��w�Z��������;���t|I�mz[S�B�gT�X}��W���,�97��Y���*Z��7����<o�^�z��G��w�v������Ds0&�L��?T�(!��1�3m�Di����|[#���&�>A���g��C���t�4��	<o��,��PbnY&�vQ8�c��%����O���x��T���g��T����8q�y#�M[[\f��tCc��y���{^V�����(?/�q��,�E�������Z���+�dp1j�c1��'

r?nF���^I�"��E�!g?n��mY�q{���+�y2�vp�x��{8��F��Y�h����T1�N������}^��!.[��-�FF����8S��������8��R+����e���j:-&����=�P�vh���o8�����b�R�d�o���m���N�-#!��J����9���k��(���F�=��ElB��d��(w����"j
CK��&{��:�s�$�4:4��������&��S �z�#�qX�&���3	�s�#'��^�i�E���q���^�2���L&�1����c����_�t��D���g\�V��C+�}�f�MUh��M��������>�@�s>3y��ia��HzLjW`��=�������;O�)$
�������}�N�l�^����>�A�s �6B�����g�
�WE��~��b4���2�/�C�_������G� �D#C�/��2>-�A�8�u0�6������$�d�4��r��b��ak��HqylM
����U��y�3�#~���=�z��0}��b�6�����8���-�q����u��a)?+J`wK��	}O3���lr����t-�O��1���}w�� ���?�rg�:�sw��Ir
��cV2[%0+��#�9�["e��D�R�������E	V�8�XVX���������' ��9o��'Y�Yd
#mp��(�5��E�����,���W�m�����M^���t��[F�����dj��lX�r��qTR��������8Gz�/��<x=q%�����s�<��S�G���|�R���L*Ir�PV���z&RhL����'zv�nvj�1�������be�Dd�*�� ��a�B�;�,�NQn�"Qt"6:����$��A��E	Y�����W�������Tn�����%�Yi���X�I��7�j��X�hX#`���.�_KwF{{]*3�z'���msc]���Ec���+���'
%En�����t=���}���;�w�U��_������W���Pq_~S7�/��]�Z#��KE�z�����W�%���v[�5��h������8n�E���A���T��	���%��i�E����$7n�����w���"-�d�QA�Q�o�_�'W���D���I���{����e�P��R�����BI��On���O�Dd��������"��7�f��T�2_����dX�����������m!��w��$��((�j���l��r�I����$l�I
��&�3��������2�^��4�0������ "{�����!Tv�F{������zEY_a����U������q
����l�*ho-<)vM@J.o6���\;i��d�l���Ag��z��=�x,���T>�!2��V��2mI�[+����h�F4O>;��}��16�|���'_s3��o+s&�,�J���
��`Bt�B��\:����~!X�{�p!��"4�B�d���������&�5��c/�	�|�5��W�Y��-���\a��1�������������:U����_Q��
	_��������C{K=��O�{�;}8����J����s;��u���=
t��?�P�<�fc2�gy��|p�w.�p����4��~��~S4%L�L@��=�'N�d�4�#D��k�n���e�&9'!�D���o}�����3�'����o��2%G��{6��g�b��(@�����&�>�<���a�
&^��.�]��/�}^n�

����:�P���(#�pv��8y�my1�{������	�7B������F�9�'��V��>G�"�4�NM!������������)�oG-&�J�J �+��It����\
P�mi|��q������8��!�vrZ�AY.'�>�s�����b�������'.��������<C�=uB��}��k�B�t�~�8)���x\�����R����0g@'�G|CK������ �d�V~s	�}%��\+;��3�����"2��3��oSF��Ie7w����������q������K�85�$�������U%�A�����@D��L��jz+�������+	`����l�R�t����JE0#�C�oK��BDFW��6�����^����J�T�LDG+O���J!Z8W.�}���������1�K�?�|��b���(�E��;�R�� ��le$ET��y�h�N�9�����U$�
�z"�j�����2������)xW�����w�mR�VE	0����� ��T^G�@�#��U�q��vv��3�C��]�&`�6(�wh��US����	G�SQ��cj��������mvu�a0�y�b���7����Zb�L ���QkmP7�|>�}���Z������K%��8�X���5�'����X��F"C�Pa����wS�}W�z���%��	�I�yD�#x�<���&"%�������t�&NH{`��8����������
���jAx�+6��!�D���J�}�!�G6�x���lA����BoB%�'�x����f�������Gi���x�V���Gi��X~���a�N�����yM�\T��x/H�-��l�~%QLI4�	@ur��(8���*�����:�3y~XQ������>F<�[@�.'��gx�l��st�����w�lY��7Q*��O�%"K�,���
/�_.H���'�5�������x5Y�oQ���o�AM����iSd�V$�q�?���@�@��K�18���<��\���Fk�LDF&���S���YL�h����L�^iB	h�����9���>L�F�M�n|/p�D��-�*��f��J�|&I�h�,�z4�(D��\�Z��J�/�!� ��h�@H���`�L�����F(<���R��<wzb���$���!���_�VA�����JY�>�,���0� d"�������B��c���������6��-���X����k�H4.��y:�����3��fs����|�6����*���E8[��,� 85�H���pQ��k�^���G�W�g���Ts�u�@
��h&��>�:�xCo���6l�f����#I�c
��A#R�K�=�0��\��@>����9|�5h�����~��1H���N����C�:n�p��	��jy�`4�����n��X�"b�����mc����G���2�����jz`������T7F�[��>�=��%�_S��e��]��pu3K�L��w) �-��-��
�����a�QjY-��v�,H�
�FT_"o����h���4����&(?��&?�����Y���?������q��*�.$��-��v�x@T���x$
l��=|;���oCe�G��	5���@���_��P�	V�v-����kV3��J������f"2Grmu�u�nm�f��=A�Pn��C�wa
<|f�s�N�aFEI�]���	\^��@�m��\;�� H�I���{��CA��M���-�=�]D�fx�_���#������P���0I��&R"�O?B�?Y�-w�Mu�{'_c��#�?��g�A
��HQ`�����2�2Z���>X~��������x����xGD(f��D����?3�G�F�+�^�S������|g�4�tl�M��UzsnpY��])zP��s���Sf"��������!�GZf��\�����'��M#j���V������������J��(�!�������/��W�r����^�|�w�	3�g�O�=���7�qd`/3�t�����j-�}�!C��s���~���T����N�x���W�4W�TsHu��L���j��U6&��[Z�"�L��)�F06����Tv�)��sY�4��q�%���� 
�Jl	hB(k���U�u�+��ft5������4�m��'���U��YT�+5��l4�/"�|����D�����ha@�yOB��3~�m�0V���.�R��-�Z�DB����r�W%��������G8y�=�g�K@x$���DK�-�'��>VA�$NH���#%��t���-��/=��'��csk�Jm|�����a���U��u�����?��`�|	hFeh(V�&�����cDo�q��]�?6t"I���6��������	��.�A���
jV�w"b���?��D���X�:��-h1����Xxaj�!���`�	��+/s��n3��<7w��H�e($Hh\��C=���jMD�M�l��=�JDl�����`A��LmJ�@���v7����M$�:;�!����Dd,����E����>d�#yb�����}`�t"��.(DU��V!��j���M]_��g�����7Y�7����������IQ
�;#�o���%5��3���7���nt���=NDdV��Z��@�^��"��o��O"��g�oY�+�H(���x"4q��jp'#��W�~��\���T�2m�V<�H�Z��vQ�!U��]�{g���Fw����	��4���N"H 6���:�������v���|���jg�=��,(V����1M\ZLF��������
p!��AI�Nv-G����1zMH���<�g�PY	�x�����>���]�o�+�k�e� ������\\�'~X��
^�$^yF(������'�^*B�M�..�H���d��Z�>���Uu=�l 
j������&�x���w"C�c�_��S&�J�����}�4�i�4V��b�=g������Rn6��w>�c�.�[m��FW��D(�*#3�lv����:�\3?�s4-�A+R�W0(\���	i5�)���C���.L���d\�����Y8���
�����_h����AY^������
r�=:c#~���"��u�����	�9��o��0i0�5���@OO/+�Y��f�u�pv��9�
����B�]�O�����0�i�/�3���{�!h!�
�	q�P�2��M�B���@�n��+
����`�hS��7��� xwZ0|��s��l�������}�@�3�gTy8����nG:��'
6��z/���%j�"����_ a� ���p\I�Q��	������i���U'Xkn�$��]P�w�#m�T�H|�d���1k�#>y���M,z�[�����{�����f���4!�@E^���_�k��=���A��I�����e�1[�'�`�����t]xr�=�h43r����<�?��!=�?���x����2G%��g�n3b�����f����D>}P��'[n���O"�	��t�{B��/YN�"OF{a��>��c��P���v�N�+3R��R�9��f���<#�����>�4�2���ki�����v��2�}�!|I3�b����kz!k�		�nh@��0��*��):hk��{A�@��l��bf����L@ga��d�e6�5�|SO�X�����o�h���Ddd��((�?�v��������R��Jt3��UwU���
F�]�6�=�.Du/#���#������P'O)Y��v�;������ �'7�.H�;y����eV��4����x��Rg��7u���	�;��J��D��Ct�����%;L�#A��q����	`BC��+xl/���8f�6�x�f��o���hE��6�\���]z����s�� ���BTN��������.��u��3mi`B:�~r]��W�L�����]h(��p��'����G�Y��tl�].��s�L���0q��O���8��gW�=N;���	��rBW��x�5��{O���R�W��:���!�$�`��Ys�\�����O`&���A�,vY��k�.��w ����<�j��0"�����L�Z�?�O-t��Fi,���HgG�xQ���&nw�Q�xce=O�m�+��M��_��������p�BW�������x�QL(���?��;O$�����W5�|�o�6go�$Y����	hX��0n�;<����`����O�����n�"�p3�[�H�n��`��4��
.���<�)j�������������1\>�$���h(c����i>��{n����G����]XHF������1d6��z�DG���yBZ%O�V��[�d�I�HW�#��8�g��R�:�U�n����+���	���$uBlt#��'>�x����C���u���&D��`�}h^U��<$<��,V�I�-uQ~�Dc
p2��L|&y6F�u?{�}F���}z,���)����n�m�B[�9A��n{��	@{Zy@r��3�i��rs:��8�|D[���i|�����7Hm!��FS*y�dJ'"2���D��dF�����r����0-�lb
#��nB��^l%�
�[�D�=��L+6
$[�����E���QeFC�%���UhIg$������>K:#��f����d�[yn���y4��n�SP3�nIg$��aI	�0�����Z�?��*(�-i=�tFZf�6��`[c��������*�����������3��f���VU�����T��`L�Fo���J0����u���jF�3��a�*��Y}B6�2y���6���9T�<��V&��Hl
$��,��J����	�$c��s��u�C����D��o�����b�d�;�+����Y�Lk�!��B|�9��iKc��~G>�"�(���'���
Chc-�N���W]�31�Un��4���P���r�8�2�M���%yR�f��|54�����IT����������<c�t���7�6�B���IK��9��1��7������]Q�E����q�]��C�Z$�����0�wa�����6�Q�~V�7��B�sw��a%H3]�]X�o�A��6��dfQjk�1c��e?�O����)���"����3p#���B�J�fU$m�ZM��BR	���2g����������qe�'P��-L��j��l������c����eN�8�����16yR��	�	��"EtT��;�HBN�<�4����� 	olN3���L
�fMm����C0i�$�l��T�v�tf66�s(^s���[=����y"�3�F?L�� u���G��	��.Bhy<��'x3�k��(�O�����'����z�4xDzK�����]�#������
���M��Y�	�fSm��,��;:���1�]�����b�yV"���H�7��M�5"_�.��k������]�������� S&�����D���z�����*g}L,�F:;���&R�q�n�1w@&
>�������X�j�z6Z@�������	�c��$��Ck����e;��9�����.���2?���d����
������:�������T�} Wp�b��6Z���Q���;&�j�o��H��ml��&�2�����ln����T�����r�FUZ~I�wE%���
�X���7	"Yw��TeJcS���H�AO�6��|��S�fTF��]M���i��@B:X�,#s�:Q���m�4|�l�cvu���_k��7�i~/���&�x_��|l�n�1��`����ha���C���Nr����	d)�yq�������P'4�������3`���5���<'��7���u���0�&S�n�e�N�H9������1��R]�b��r2��'g�.��;5 ����>�1���-���������M*U6����>��u��O����>��'�)��W�����M�p��$+Z;!|���!a�N��#+E@�����/(�s�6�1�p��T�5���Si3G�eN���|a(�Q]Qo]>�.N(����2�[L�\m'e�]"����'"�a��PB�*t������M�Q[
�=#_*�*�f�W��#�����,���X��G
qm�8�������q�y2���
��=�4$�����-��d�s���D�Z��A�m<���\6;�7�.�.,�>?���c,	����z�O���e,K���r���S$V���F�kEn"j��\�vQ����k7g7/*".�T>f7����V�kEZ
��k�S����\�����M�3
E��6���{4��r��@����b��K�/�e����2!L�w�B�W�B�����=C�q�n�C(prAl�H{����|���s��3����B����|���������y��*����������w��9�e�b��&�WQ��^�(���s���,������[���Q~�;�o����V~�}�����������M�$=�����yq��&�Q���cw��B��������K���|~�<������D�{�I�L����ig�����w��~�����?����?}������i~����%���L�����������E���_������Csa���������m��?�������������?��S����N��p����
HbI�+�/o-�(D��n�.�L����
 hL�"_�6l��W��9��j��my�2A�p��&����)���-1�.�}
S"���t_7�J�m�U���X�yh������_�/H�a7�I�Jk�8yS$"�|��/���
��3�}����|�%m���Q��w(R���4�"���HD�"�q�L���2�7�R�8t���o��<I������A�=��D�R��&&@��r=7���@��/�|-�*Q�f�MH�zI�����xG�������1�zVy�v�7����}&�	��|#��~��D`�c�&�1!8�����s��q]7���nn/�a_�F]��e�Ef�&��iSVS��v�`�����		��<?MCXf�dMO+O�_'x5i����P	����?�@�H��\����o��X^�S�\
n�������.�v�/?��`������X[;��}[���<����YzO&����N��.��v[��F��I��#;!����� �C-����X�q�^������D��bu"��qA	d��f������*Xt]K���q����}l�;�
gl���,���.�`���n�����0�$-�����w��\V1�R�Q�����U������%���W��|(K��(5��N�ozk'���u�waZ-8E�u�Yk=��������W����w��=���"?����	h>.��������Dn��#�Z�(�/���p��@����

�}{J������t<������s��m�f��Sw��e��X���
�m�����ug�l�����j'Z���u�9g*y�y�0�c�w�A�aF��&�.Z��B�R��7��c���J @���n"Z���R�����Y��R���4�(
�V�d�����\uBSmG��	%���v�0��;&!(+��z]�T���XIz6�m|�IQ�����
����&D���G�6���U��"�����j�-c_�*��s�i�I��D��io�|����m�$�&�!�Z[{wF��7OW���8�����\R�j��f$`�s.�m�UyH�����w��9|���g�s��+2��������^������8<�Q�����y�a?�J	D���\b���z�IS �3MDd=�8���:��ODKr�q��2L�
K��I{e&� ���11���Y�dR:(�����m��l'�P���#��@���4e�����|dB�U��)n�d����� 
tZ^;O2n�G
r?�GW�<Ij	��p'&T�x��]���;�������w/{^0K�K<�7�!3��������)8m�%�gs0fcD�[^��5��@��?� �������6c��9�.k�t/�D���J���jfHf$�����
{%`"Q[L��
�[WO�6�yL9*OMoL�2iH;fwm�fl�'$Y$�V�f�!���0���=j�@x��*3��
t�nK�<������dq`�f+��L�9�X8#��9���F�b�|���1F�H�a���+p�,�>:�������/��kx'�K��d/
�F�sS{,�b�������gt?�O�5����13��G~l1�GA�J'T�pJ�x�������� �Oi�%��k,_�<An��i�gB���LO���m� -��	� �x0��LD��;=~�g�6_?h�1�H@M�O-�Hh-��A�����j�������c�bE����L����Es�u�D�>�2S��:�z��LD��F��<#hx��_J�Q���XG,����G����#��0�_$u��Xy���g.���k��	%2s�'d������;���j}x2��L�c� ��LP�+-1=��T����n@�s��*U�[tiB��As�����%�
����2�u�?���Q�U�*v��U�	��7�u��L�N���C<m�U��y�#C����@�G����H��6���-V��"�h����RoF�K�����Q
��		��d�&�A����L|<����=���x3���}�9r���g�b��5�37��qU��C�B~���������,?���J�_DB����)p���(��$?���@%^d�3dw3l��������E�E�8h'p�m����a9b�n?u����}��G?��:#)��gu��+����:#�� ~��6`O�f� �����w�I�3����,�Y���)=����[t�pUw����,1���3��iy�8�6_�63;����F�B���!�"��
;;�������;;.�*:�
��){�U��8�N�X����)1-�������W��w.&������}
�7|eP����I���X{;k'^����J�.�0����b"E�n{2t}Q�-�q
rF<����6���)h�t�����t���o�m�tf�2�[��������V+[��������@����l���a�d��mX��	`��I���L����2����v�?�g������5���7�;+Z�sg���wOpJT�����.��f^����H��V��-�� ,MY&w����g�c�{��<)`�A�g��bE����x������@6�[\�*c�������2��9���Yya4c_����vK *��xn� G���@Q�P���T��._�P����g�@M�D;���[��y��LD��4���r�Q� e�x���*[��zQ7�9����bUw�2��R�5���M������H���t�<���8����I��-�N{��L�Sq<��j�=��@e��o6*���*YP�
f����dAj�-c&2�Sx��nB<��tN-��Y��F	�`pX��Xl�6�8������[���y	f"�mP�Xj���a�OU��S������f`�D��I�Ut[���YZ�����/�dh����4� sC���
�|!aIq$���~��rK���Rw��L��B���6���
T�z���[Vvw������DPH���?Vb|�>����"V��G�T{'2�����d�g��H(�K6zJ�������%���W@��	,�����/2g"2���w�-��]B�BTw*A������q��;�����8��j������,N��wtj�����������Q=��cA|o�X%�*Pf����G#���C���E��&�4�H� �}L S���cs?A5m)����}���,�C>u�tpA�-������|���0�+��[,����w!"{X��������"�q�[��������|����2���ZP����YV�F����	�gbzz�&��L�v��=8�Z��	�q�N���pkG�DE����,�\��1�����G���N����C�/�?�- ��Sq1���k��[����l/��)i[�����c�O��YT��J�4��'/�X�2�!>|���u&"7�LDb�2�)�t-H@�M�j����0U���A��N
��(����\��'k�����X�����/a������7�&�3b���4�����T�LNH��,��w��2H��qZn�>��0s��G0m(^Rq�z�C������z�LO�����'�J��p��j���m��
e�4+�����I�Y�����J<�}��Wap�"��.�qN����e\��O?�)�~���8��H@���yN�VOY��}F!��:����X�Y,��c��xA
l�R$���N~.��.�e������
���=���R&�uU��L;M��'�����Tv���"����+���-�9��6�F*��"�_�nE��]�W��N6��l��!�]�l��@������E���K����['HMHe�Q�m�` }3�Ui{��=w��b�����E=��bo��g$����������v�������VG��5�k"E�o�������^1!}E+��*{���P1>����% ������A��=��\�i;�]PA����M���a7�(�[����$�S`��et��V��C�v=�����v��;9����6�C�|��Q6h&j�RiQw���pJ6)�o��7���a���q��5���@��x����b���7�!#�!2��>�&���q0����I�/�������~�1/���D�QI(^���_k0H�"���e����a.��`Q�PwH��KY�U�,L�m�R�Q�d��&����*nm��vx]gdv��gci{!��P���sh��E��M#A-�W����e���M#���	#[�AF<lfIkg�������Lr� ���/A��E���N�H��<yB�,H�=�A��ww�����y���
99����_;9v"E�f�xp��/�T4��^Y�&�y�?u�1�9#'��mC���`"%�M��""����y�i
��z���
#��D�D
�L/N���Sh��tR��B�^v���*�\���c���+��'�aa�a������^H~B	�e�sAG���J������no:��3�����M�7~a(��|bD�ee��G���F~���$tj4����&M������d���jVM��"N����qT�P����� �eA��`MXe�	���Q&Y���?[O:�����zv	hO�I�%��P��?XU1�7��gmZmbj'�T�F��j�%��DF~���wrh@��P,]t���D*&�zh�����OoG9�H���B�<���1/����[z`~���}����dq�!�N:��oO$�;ut\�;6��a�^�����Z�c��D���.�Xt��	0/1T���u�LU5�(���^��a�u&�(���x�WD%_��X`����"1���Llh�P�#�&��U���P�u�z�	��Z�H����6�h�Y��_A���mH�#������5x?7��'�$��=�!b�'�f(��/I#�NE=���0a2G�@�g����2�)����8��#����>`�}�v^��g�]�q���;#u�������A���w
��LP���� �����s6�y�2,F�`�k��$�$��&�Z�ee��!�N���Z,H�}c�L�Z�����m�[P�����?}b*�.,*��*�7���������o�����H����|�@�W0����`������]P���}�<������2�L��Y�ZO�>��.+��aA����\ T�<�BaW����/�M��i�������ec*����{���mY�a�����Zg&���2��� w����P�5�]���]^D3�z���E��L:���,,
��>�m������Q�	���6�v���;#�� �eAQ���j�xW�����s�{�kG�����Npun�!*�
q
��?��w�d��N�K8�?���fA�>7�Be��kc+%P�Y��W�f]�8��z���>��@��O��gm���?���q���</6>r���p��������S���|H<��^��/E��|���:x�Y`l4��hD��Gql���q
�[���Q�(O���L/�!�9��v/��������B8O�����p�e`�0M�L�\m�l?��������9��_)�����:�90��0�I �������pQ������<�I��)�h���q���������l:���.�	��:��&H7=���M��c�����^�@��^���OO�M��&�w���O3�$"����^��o��;\	ep�/�tH��~
q�Q<
�1����N O�����EyXM��+�%�ta�r����o���r��:�
I�'���m�?�����.D�6�ev�����
$@�rDor����@��{�mSr����{}$�I�o���#A����vp��b���6��`O����pb��'���S�&L�i�yH/��HTK?�����vhA	��*}0��s��`����
��6h}/D���38���2]2~���i��Ht�0��K�
/�����V���<���s]�I%&���j���0�^ j���'��fV�t�$��q�RY���>�1���������lm\J2����pi�p��c��DP�����n�]7_.(���j�Har.����b���Z�]����&�6=�\�b<��/H���2|V?wA�$8@�,���[���,��Xs�ZT *s������i���%���$��~]�A����:9�%W���.�ep����\B�n��$c��,,����F��]|���,N���&OI�'��<O����k&#�j�_�||���|���8y����Y��j&"�Vu����C`'o�Ddh�yk���8x6�K��UN���HT�&�h��8�L�GC�r�FRI�t���F����H��C�h
�#��LD~�EU��C���F�O��t&"���\�V-mm�J"����;W����@�@�rwW�Ym���rK������������cC�+
@MAQV�}��P���k.��
�*���D��
'`���`yg�x�X;8�K���6,'��{~����k�[(
�#l���S������sKJ*���L4��N|�j���)�P�'����dJ\i'
5�@�������I1�]�Fc��}�Z���Q�o�x89x�yY���}�o��A�Y(�9/��<R��X��p>�`P=����N}��xh �����Z�f8ns�QM���`���|��>*?}�D!����K`U� -Xcw�z��B�&�5Z��}C�4�]I���4
p%X�����c��y���-����-H��zF������k�3��hc�0��/F�K��,��u}~&�&@a���b�?|@�D��|�����`���g���Y�;��b���J���v�P��������
7A=&���Y��al����2�Lj�=����J2��^��8R3��;��/��K5a�}�Q�*�~V�4���Y����������o|�&\��5C
g�����;�=�8���~3n�;�����B��_8l�x�~v0h�����>��{d��K�aX�a���i{�n����d��S{�/�#���@�����Zy��oi�����(*c8�MMn=Q��Vz�FJ@8�(]��
��A>�xZ��C�@Ur��p����YX@��>w;�_��3H���3�{���l���c?v�-�����	i��Ql�p`Fh�+���B�_:���6I��W�R�_|�^�h���2X�����;iC����H��'M>
ZP����%Z�,�E}C_�mz�`�[h�a�Gk�����<-k	�BP�
�m����(�P}����;��R"��\Q��=��O7�?��q����
�+5�����Z����,��XW���e}���}�	-8��sG�p����P�!f�O�\�q���LL
7��k�%��m��|�u���a�5=����L��I�:�>�C�������8[�p��]����������${��a$�#�T�%�~|�(�f�"���0~�������s�i��v������t�����aWlnV��6|��j�:���/�?z�����=}bF'��A���������k�;��O���ly$����";P$I4e
��[���������Y�U����v��1%�G���z����3"�O��eD���������)����������������\���t�W�����Es��!��_�~���3(�����#���t���YS�J�������,@��{�
�eF���R�a6Unz6��H"zNn|V��9��nB��
����;>�����>2���yn~,';�$n���:�QO���>3:�a����_>��I��'���"d}�/�]�R��#Go7w���"�l�p�D� G���#%����:6�,��Hq.9�X�+�2����2�hI����+!L�9#�
�j��j�g��e���O�'#�>�>#��Y��bsJ�M		h^nj�J�PlBCV�{��"��LD�v�/!l&D=7L�7���	����>���D��]-��4�2�+����VI�]��]����q��S/�|.<�����2���k5Y���PR5wu�k$,�u]����hJg��M����nK�������]��l�-�@�,����p~�!��Z<3��5�0�	���-)<�hH3YwQ
;�c���PfG+����&���`o�5�ftFp6� ����y�����L?���E��=�5�F+"���m����H����9U������V45�0���v�r53|g�|0�����Pu�TNZ�M����M���N�a���������jF,�~D�zc��VuBZG4���2H��x�y�t?�U�2�*�]S��}x>�BT��
r�����a����=D-��	�[��2SX3�Y���w�y1����j&&����{
R�E�b�0���>��	in�c�Mn�3��������n��)�I�f
C�Zw���Y��x�]�W&�2�!���#����F�������NO����4u��2��_f)`Rq;{4��9Q�^�D�jjA����B3fj&%��LO&5O�>,*��LU�x��m��4�:��������@P�u}0�3R�����=��3�S3��l��oB.�=�}���1�q�[��=����Hk�G��n���Q'��8[����	A4=�i����4���RE���m������0��	�=9�D%�R*�����0���K*���W�O�fe��d6%5��iI����P&�VL~���) m6\��� f�9��s?-���J�@���)rO�7o�H!�u=�_�h?fwO+���{`�����.��*��1m��3&5�����eF��rQ�z2�B���x�<�A>��\�B0���n$,:6~<+�)��	�;^��M;����<���.�5T6���e�B9l����	 �zK�Z��n�mt`��26;�D��f��P��[�������/�;>1��	7n������dsQ��J;���ln�:A{X��K����8^?��1M�QO.�\��FU/T�BD`E���V��Y�`"R{�SXG�y��A�|����5:J�+��-�
��K�<!��W
�������L4���u�3�����e��}���������S:�Z��=	$&���j`C2�=��i����s��Y�(��[�6�[q��Dd�_�}��uVw~��A[{��+����ajQ	���r����{��T�j�?�{�J�&N���z�&���=4�=��;�s%A�u��4�0gI�@-�����=�O�	���OxxN*��4!M�;�����7h�@s���G��=�!6���dz;wY�����f���=
BxO��)X��	iE�=�s��{W�x
PH0��T����KU/6�=���-Y���(�ia����&�I���X�(����`S�n�����H�K�JIIH?�YI�5K�P�kY����EX-6�um|OW�#��� y�n�Sp�K5�E^,��4������Q��D�?�d�_���{"���f�P��&��B����3'����F
�e������f`�g�1�q@��w5{�h+�gZma���yB�=��23�7�f��p���A�,��N&u��:����mz����P�-�lF(������lLzc$t��[��+T�q�����Y�G#����p����oeL�
?���8��.D����}��y�#f$����"��{YY1�z+�~)M��0YB��K����i�	��qJ�����,&1Q�e"`�>Y��r�-�o�|��9��S/W`x����vX[0A��
�������@����H�|���P�"��>t�Y5WP�];��f��Jv�`J1!-�f�V���z�C���l|��8�	JW�8N�
�a�8� ��p���������i`��8�I���F�����bI�{���L$u��431�HO�^`z�+b@���/q�.�[2��������Do��'���Qw_��iV��Gu0^iBP-<�ZY��HP4��%����_(]tyX�����jv��pJ��Y%�����)��`A����f`��*�$�����i������n�RM���kb�'��YIja�C��[3��s{��ja'VYFH�~Z�j;bCl��3Mt���v�k�����6�nN��j�� �.����q���������{�V�<��	�}&��%#s�&d����5����ur��v�6����������@$�xs���~���=��
$8
�"�4�@������'WiB�r���f��p��U9�}h��U��]U��������3�1~����Q�D�&Gt��\��'
7MHR.��\�X'A% '*W[/���8x $}���'���1��f$@���~3�h���0?y�6�kT�-�r������c|?�p�*��P��p������{W�
gK������`g��@��~����clv""{$@<By7����t6�����5��r��GMa|��L��= }���$Y7�h��I��������8���{�4!5	T1��Ce*+0b
��x#�>��	��05�����1���-WT)'C�&d���-�2�jB�'�O��j���:��
�P�4���JAR*'�SD����8d&$��	vwT����h�S&��}Ks	�G����.��+Z��O�7�8�%����St[rzN���_�+��t���,�]_<���j	�N?�I�$��$�(�H��St7t���;#���tO-m����r���{��v���wG�'/��#���|L����H��^�P!�"��(������[���8Vs��:��d�"}�j�52Ov���y�	�
-�!�$��1@�E�g��J�~��"���M��;�R"�TWKj�1��P�Qm�yZ'�t$���f�6�5�O"i���0C��5����NHe�Uf���&�PnF����pW�I�x�	)����[_����K���%�2��w]��@��l��9�b�kE�=�7:v�g��c']��dpG�m�{V����k�����G�d���~��d��Eu���h�S��(��Jt� ��$���z$��m����I�����nL\k��<��U�f��a=vF
�E�G��O%��J�s�Dn�},r�-�b�Jw�r�)�LD���.OJ���V���dA|��s{��gF"�/����`���	eT�&	�g�y3�������;y���Ad
�*�:�,���D���U�b�Y��(l�>9�q�������OX�����H��z@~"���j?mO&3y�C�<{������QQr�F���U��	U���b���w�����$��&P��U��������d}�j��q�.�3�Z�~�G�BKX�H+#(����!��-��9`������[����,���m��[J�L���Vc������#�D�-=��Afx���.L���%��G�X�[�������B]{��)�g����
���"6|x�1Ty��n��>h�2X�H����+��|eA���d��)M����n�q�����.�SHU�TS���n��f2-�$��.V���.��v�c#jB����������P�#�l���6>vU���es����A�q�?��$�����4���������%r�� �7m�5Sn���H�)a[Go�k<@���T������;���1���wYY�Q'�cw���"(^��cM�0����g���g���AP�b�MH�������-�.H������-��'`{u
��jfk\����p&Z
���L�<�
�x��)���a����`��g�vE�r�x��VFF���#\�Mw����l�)�}Ev�w�������=��1�D�����y���y����5V �E������?��?
�N�����v!{�Na�|�n��>�|���{��g�r�]p�|����c��X.�������lG��������/P9^�\����	j�@�x�U�W�.8�|��L��|��kr�`�.�j���������>]PsMB����|���r���U
Y/�����F����CR����z�;����.&p��b����2�1�]ub�b�{.���s��\�}��x������W��|E~	���Ea�r�B�O�r�"�����}z�}~�����w�?���s�����5r�Tu��u��{6���B?�<A��v��o��W��RES��g�����&�v�4f)�8y��K�m��a>h�
4�(�8�+���m���
^��F(�c��#E��G�<T�+|��cE����<X�+������+|���E��X��r���#���N��+����p�!y�W��N� �+���+��E���8�~kj��IK'�����cc�����������j��_���o>���7�����Gc����������sg���y3��_���W_����+c�����������c���cV�E~����V<�1��8�7�������������{#�����s�{._��������+�'_�?��%�<��nKtc��m�n��"�������e���l#q��m�3���L��KcC<��{����l ��,���n.�L��g����������J&�D @�r.���H�~M%�3�n���C�*��S��@��t��i�G�����Q��B�d.D]Y�#��bl�eGP�W"�(�� jf�T-v�j92uV)�
5D��
�	8���E%���~����m��(�(����!�����He��]/��E��i���;]v��;lL��`���[�I�3r�JT@��P
9E|d���A�L�_#%]"Kr.r�Bh}iB�h��������N� �=���^��/AI��w{`cG��j����C�"8�\�D�����"c�=QL��Cf�����B���������@DF�`S�*��G`{Qlh�lW���d��}����{N��Cm�J�Y�QF���P6���Si6]�Q�uj����2�������:v����b}�������9Y����{SK$D�h#3��DUkG^T��;���=���=���K_�)���G\�vf��}�Z�V��e=�x?y�HH���,�
���E��e-@���>������0����V
;�~Ge�
n�%bFa�Vg�O:�a���i?\F������M@�����YF�%�2P�*�cK�����{����Vl�T3��\�'�G�����������'{���x����]~"����U�8��������'�����5k������=F5���NN��_/���C�/�J�^�����(_/������j9Z8�tBY�/8`H�Y/��Rk�i	����.JR-��#6w����5���>���ce"%���g���;�4���[�ne����"$�t�3oM�-De0�a���C�]X�^Phe>/��L�,�n�����2�!�z���Q�g�I�c"�>T>�6S�{���%��i 'Y�[YBIbm'��M�P������""5�Gp���R���P-X�&a\P��D@��+9�;�F��t���NDe0����Lg/n�]���b�N�k��+
�����!5�[V��Us���?~0C��"�T{��Id<9||�(�=����������: ����\��x������=D<����UB��@���o��)m�I��3�/pq/���{��&r`���2P���d�����:�H;�����P�4k�����?��4n��z�����t�:��!P�Z��8�rX��_�N�'Y�B
�I��!���6t����H��<���U�{h=��/,��e&��(�;v�/�>�G��
��$�����S}��K��R���n��������A����L�{�����Z�>��SV����u':��/)���o��x�vV_�s�"�c����r������]P�w���>$xW�^��3���w���@��O��Dw0"(I���j%����I@{q�(=S{��[�I^g�"��������m�8Jg������<�E�J�-���A}��3��P�@�6|A2���r��r��f��������j���$"���M�^\f�����Uh��
r�@��"�����4�����h�X�f�"\T�}��Z���+�d�74Fm��]�n�&�
^;�A'��BF/��D�r�x���`��z���ZV|2������G�v���`��N�>=���*������{�r�1/^����r�=�FD��Qs������J�3N�'n<��e���jz,&`���+���!��G�$��8�gd������:�O�-#C�����;V�l��#��i
Vpv}�]�MA(���c~��|.U���JTK�c.�Pu�1��@���=���y�
2�����1"���Dcf2��k�v��+V �Hk-be	�x�:@I�Cb���26��t.�@v�r����H��7>��Xu�Z��)w�m�B[}q�Du�W�`�|]�����@�}�W��A?�0������.���e����N$L�������g�.(��i<��m���A�k "[��C�c�je�V�������1����En���qt������&�|!xG�q��xL�8v�2��Z�b�%W�^�@JH��*wXQ��� lM�k�C�����A���G�o8�>:���W���6�M�����qF252.�|7�(s�M�~Q�T~I��n���$L�X����h8�2����.�	PW�t=���<�\�	������9������ZE��d���d�K +�g [r=;�fJ"������l�7<���A*NO��V.���$+��aR
��O����,�,���Nf������)
��X�CH��T_��Q;�X@�A����VIo���������@�ld��a'����QI������������� �y�z��"k'����&TL%������B<��2� �
�n�SOD
�������c_W���6��5T+#���8yS���{LD�icAt�R���~�*�	�E��#�e���E���jxl��� Z�����qb�A��A e �w���%�#xW$���(J4,��i�\�����D��eF"c��bt:���9hA�J�4���U;����
%�z2�����,������������~	�������~;OF
&}F�i�
��-{�Q��6����`�����^2�u��}A_��i��Q��MHe���i�[P�����kXv���M�E�t}���	g��J���l�`��)�,���5��DD��`��`��waQ%`�g����P�����/����i���l�m��GB���t��eo��'5LHe�0e67,���4P�mW%���m_�6q�=�f9&d��xf���r�I;;J���a�$5��%�3��.L�{b�D�m�QA�=�����/���
`�E�?S�`�;
�zg���,�U�P�W��I���j����'8����]>��P���I��+��Se������=�+eA�2P3��:xW$�8�������T~�!2�N�?TAO���\���h���=���q
���`���S�Hc��p������:i�L�,�J���De0!�^!`S{Q9(=v���`��������������w���'��ee	<w~l��J�����d4����.H<�X7<��]s�.�=�����^��Au�P��o��	�
�T��s���	�"��F��N��n�}:x���1��^���`' ��U}���]�!�-	�J0P���V*������H{��hv�LP��EmSt%����`y�z���B�\�m�����8ow�_�<��/H*���P�6���j@DT��<Q�w���������6��T��_)w3�K(��{������L��nC�{��gs�7���p�Qg�J���"R
�`_�������������9���+B���_�iG����c���������F���An3���b�V��@�������m'�L �+p�It�����P����Bm�}8(f/���Dg���0GP�K�����y�����������<�!����~�A���VU�����d�+��64M?�����B_�Q�q���*3�?�	st�q��m��.�x������������_�<v�� n's4�~�����~Ju�2r���T��N�����)��Q�G��:{f|I�|��������U%�I����U "_n&�U�����pe1�����0l��J6_�Y:_�����`E���Ms�������&����b�������J����$�����'�le"Z8W.�=MV�mx�5�)����k�IKV�1Z�nA0z�%� ����\��iy��]Q����^2�x1�w3�M=��5g�.��.I����������tzZ�5�Hu�f�xm3�2Ry;�*e�L�fT��
�����L"�dH�3I��1�`C�]����WM�-��	G��Q��������{����������mC��^g�Jr�IL��]���#x�v�-,]�		�I�yD�#x�<���&"%����{�.��f��_1�ubxS��Y���y��Z^��O����D���J�}�#�g��*����������Q	�� ������e����������\�����W�|0����]��a���>��:G�8!�b���+Sbk���W��]!I4��@����N����������
��3�����a�����fex�{�y��G�\�����7�"����B��Q�y�+�@�ac�9��6���V�N0�f���������Em��������
��Y����
��~��2�P���.��+8<���mV}<���H�7 |P���~_bJ�q;��L��e8��xxtPg�R1�o�]���.$�������Q��5��=&����2�e@!XF~���]!�e��N������+@���������N����>&XP�^���5�!��2`x��5Rc`>V��BYe6U��P�`M������;c]���l���|A�����3��>"�+����n�vC�
���E������^�#��)�������Y��7��e�V�������Z=�q��b�+S���a��&:?�g[*��L��P`o�8��*�R5�z��;������Q?i�^�G�DZ�����[#D��D�c5qec! cpJ,XnN���-ne:�=j���e�694<:o�J���N��������Cp6
�O!��Ct{P��{z���}�)1��i4���in&l/�_d3~�66���Z�X�E��ud������:*�"Xu3���>�0C��~����l���0����zC���ahT�Y����Q�X������@����t�����?�aj��i�qb��i����OW�r��O��}���>��Ep�<����z<M�A|�V�H�
d���n�ixN��\�xj� V��ff%!�P�Ky���}�)���I���'�[�#R��?Il�m�#���2(��}D�}�R��"f�A���CgeJ<8�DOG��F�i��)��6[��\�������26'����EV��^\���n������,�������
A6�H�j���R���<��GE���S�E�}�|	6&���o�����p5��YI�]q��#�le��xF
l!Z��B��(�����;�`�����)�/1?�~*���������j���L�{�pw�������`�w�%�G�����&v��3�?#}�]��G����7=jA�3��d�TN�-B��C4]��a,�P������	�M���5%�������xs�#���0��{���`V<#O���$D:�d(����N���LH�<�����B9�s�O���*��H��R��h���Ym{�/��,.�)��-7��@SN���
�nIV*�b-�]����>����	CQ46�<�-#n���2�ZW���>���7�w4��"-�$�^��++��iA(5�N��Piq��UddZ���v����6��7�'���]XR%D�=�om4���0���mR%�������nt�(dl�`�l� =F�R��eD��%h�u�������T��
�t��V�������qz��m|.����cNn8G�p;�n���5R��&��O�V�don3y.����5��?���P������m��.W����i��� �R_�[��l,����1+b��!F�bt������K&�����K��
A�+�~�EE�d�B�lg���u����?0%@
P��7�-��\�z{qN�k	��5C%���.<���nB���H<�v`z;���`�>M�����������Z�!y���2��l|���B�c+�m����tB`�������0�|�Tiy���BT���������R� ��a�H�;p:/��{F���xUw/?����{��~[����Z+�����$+y��o�j���HpR�zY����W��v�[��@=�c��9��.V�	)`}�
���������C��x�h,'w�<3kAl�(��V��ea�Z�f����u>��eFC��Pe/n�7���p3�������`w��f�H�u{oD0V��"��O�+�de�p����"0�e���������>�Q��i�h�6.9\���,5	&'��0���RGU�,@9�N,��Q
�r�����
A�n��������
��c�>[��������:�����N��������P����R}
@��`Jt~p��1����p0Y�����wE�_{���@J��x���������
��7������)����\�X�7�VH8��B��������G@[L��Vo�oo:���q�4!���r�s���\j���,�|
�o�n_�^������{�������m322%���#t�Qk����/�:
�����m*7!S�6�f}��}�����Z��]�W\(��p��H��\:)ygh:���L�B�rw���(����XL
�6��.�j1�44���~�t��?����o��8�1��������!�p��1X����C�* :����
��H������S����>����ha��X�0��\G_����1%�h�Y�T+�A�/�L(���a���y���t����/w�� ��X�2�I�m|r�~[D�O[���
�:��"�������.�[�lZ�x�w;�l�6�F�OpC#�}�"����-��,�����U�e/�K�:+s�	����2�h%o���v�>������;"a�ch�9��gO���5��`�_�X��b�<�G	�s�.�X�V{�fK������i�e��F�wE�M{��)�<����<����)�lk�����"�,��:]�}�#�O��y`�M{�i�>�{E��m��^�M�c">D���`��&x�H�<�!���GMy��/��v��$�Y� �&p�c,T?�-���f=c,��G�V�976�.,��F��0�wa��Bz���=R2+�����'���G��'Gw%�I�����������2`,%!��7���0OPDVM��bF��h�N�u)d��=��V���k2��Zm��2.��a
 YG��o����d0<�@�\���#���n�<��)A
��"��u�� y`VeB�2]��������B��:�W.K���"����9�����4t��m�lr�E������P���_����{aZ���1�U	�A�Uj�H&O�OD�lx�O��!� �y�;��A~"J��/9�C:���f�:\�*VF�	��&�B��6���q�n�A��K;3�s�7v��m�Bc����yJ��9{��9�x#Ab����ItZq���]Q|��H���3j��UH��:s<����`�"n���0,R c�g)��A��L#�=�M����47�������2��	��u��&�g��������l���&&h�#���{2\�|q���n���t!�4A1�.������������]�'����#s�TI��#���+�gi,��FT[�������������W�P*K�;�I�=^D���Q�	���X3�3(_2�����S����$��\���G���VD���E������<M��w�t���]�;�{������&����BTF������x5t's�s��C��k�������i�������w��]Y���|�z�C2y���8��a�!kk��)AG
��]�W���X3�A�������E�-���2��E_v�<ZX������M�]U���g��0�w�)���4���Tc�AV��N�����������e�����/oK�������x����"L`a�A��=��z���/L	S�eD33�}�#h���QC����`L-!p'�9)�<Md�SRc�����.�?|L�{:CI��A�T�fe#���1���5�u	T*4_�������{���(�<n��\��7��x��3b�1K`��t���8y%�Na|�E�W�����~k$b���,B���21�|���b�)����\��F�o:�iN��_a��i�b���n���r�,e�\����I���e���d5e���|g�z&��
s� ��`�n2��,�c<�����I$������*�T�47���sg��l��=\(W��
����
<�s�\�n�mb3��������#�sC
4zN��p��M]�a>��;3w=���f��
������1������q�0w��1C���6��5�/��S&���6k�2�6�|r�un��*Hq3����lsg��;��s�c�����4�M�a�_�#���s�?r(��'�8� �����E$X�fG��}y'�O����t����BE�,���iJ%#�����!����zDy��+:rx��XP���k�1��Y,�4t���]M�Ke��^��#c�B4��3c�XE��A.�������� �2G���5�����\�c94��i�5���\��80)0������P���Y��s�E4��q�����w�@�����O��H�(G�Z�^�#��e�c"���}�yN��Em�s��F��2F����e$$E�8��/�d!Y3���c�\!��
;G��er�r.���x_�X�X��j�8��D_�"���"L&U����R X�������DJ!}<�����(�E4'����A.f:Ka`�f\vr�+�}��_��0P[���@!6�������Qq��Z�qr�9`X�+
z��fn�Y��R�-���+�	~GF���e�������/0��i��T��~�(�=k4(�~ep��m��4����P�����7�mOA%���
�����d_����;�����_'#�����a[��&�b�=��� p:6K���}��p��N��28q���
A�7M�$����x�2�����������j��E���zw	4��|q���������A������U������N>�0���!�
�oKo(}f�Vw�������������M9����;�:��N�X���B��G�����>$��3G�ZS�4���,��K���> �k�����6��,����e����7@�|^���������fe��������:����`����+�~cs0;������c	�b�����L����mKCi��G�~��7��\����k�pI>��\�0��s�O����Oszk�'d�v��d�������hc��e/�����������1���=
�+���}��u����q��n�1��^�v����(T.��{.K����;l[��������y|a5����%p�rN`������t�YJmc#v����wEf��Wc�30W�C�y!�����6O��?�y�l�ap����29���`���1\0h����l�~�Ic|�4P9����\�m���U;1S����7�����u�1#cvr�����|���5�VXG,���E�+��=G������(��K�{���\�������5�wA��6n�I+E�s�������h�P�c��s	�2���������e��,��&�n*����z���>pdr��3��j�;������N��}���l�s�	4����}G���������y@j�vY8�^Ybt���j��o+��1�g����;������*�):A>��f�v�%�K��,�7�|�.&����]e�
����V@R���n �[�����O��E�<4�D��b#F�|�N�m�7r����|�l�9�d`~���n>��{�&���l�Y;-�n.>�mdf����svZ-�nd��[>o����9Msmd�1�0����a-�����v�OYR��>�����u`4������\���]�����FP&o�U������"e��L����[Pe1�}:Hj��8����yk�'�n-U��2N���V�P9_1��\�\�I��*�+v9�)]�\�_�
�5��(��>�]��~�������^���[��|	������+��x��/`�����&zF�������#	��nb���k^�.�����M^����)^����wP��k�t�w+S�.ky�F+ch�%������5e��I�j����(�����p����:��I;<|��O_����,z�^�s����n��(���	�����
�Y��?�_����������������Cu��2��	����I������o$�mtU��_ @]�ND�1<��&�0�%�"�����UW�
�:-a]%(Nzt#fz��I�2�^Q��e�}�+}/�]t�_h������P����y0������hH���dT���o�'�@��M����{l�L��N������W)Q��G�|m;?���J��a�;��c=|�>�����Neg����c�����)��u����<�W���yC���d��?%��jL��7�zn������,��%�(kp��j4*�#���H2�E_��	%�Dd=%D��������j��0��O��DO��U�;Y2�������hHr/�w����E���I�:�P����Y��0�|�Y;�f55_����c���I�����%�iCp��o@��_:*�����_'�h�TT#���%�g��7����Y����6|����K}<�)��HuT2��*��	����X���4�uz���u2����1�'S�=�LO1��2<'��fd �6@m=T����zD�����������
=�hO}�E�����8,.��LR\�;.�s_����l����-��o�C�������������n|n�6a#u?�e4mE�~0I)�������M��t�M�dY*9�b�R	X)K�����#����u"o��nQ~��G0A9�
a���:�'�=�L������i���*�
1��NL�u�/y��,�Y�SG
�<*�U��w<�M �B\BM}��g2Z9q�~�hG�Lx�2m�#�b�^��i�vO�#�~���Lz�|�d��i�t;�6�-@� ���m	�1�.�KT����[������T����y�1��M�0���%@�J�k^9�@%��7�q��S���<O�%���E=1���He$���m���4�$"�	��i�F���oiS�[r".��&	�����C�sX�qk�\d�PiSmGz��%�������;!)+��3tU��35%V��0�+�Y�;]$93�u�HIDh������1�!���Us�2����\4�M�4;�H%�"��xb�tA-�F7��&�����"4���bh!#�\	�)��>��x����-�\.[��@?6�k�<=��x��%��Cs:ZP\Z���
�?�v��l�/o�JI��
�������+7�n1����D35"2v�d�3����b�hI����?PK�����2N#���#<��IS:(�K��Z����w!��d�u]ZB<Z��*�\���C������V�������2�#8���L��	d^����y���k��hhQ��w
�r��#'m���A��c�Q\�#~�����k�������)s����G��L�s�K1�f���:0o�d]
/�EY�������m�:C���K}Q)8j��rA����������(.@#Y[L�4)�l.�Iq�`��������Q��>����B�1�A��9���{1�����\G����k�(�*�M:���\{kU�jq�4���X�3b,v����h^WT):��H�>�#��{��`��$m�����i�>,����y��O/��43�����Z�e����w4��vi���13R��<-����V�
-BRb�b�k�7C��� �OyZ�4wp�`L\t�Y��p1{@�8BgM���'�y�1���7�O���FT�������v�����H�U&����Z%��]/S%I<��b�{��@���4jW�e�da��d��f����S���[[&@x��|�O%tT��%�������G����G
l.���k[
�*^��Em3#$x-8��dfNq#I6�5����y�K�VI�W�	��em
b�T�v�)�kzHUjDdw�Y�=+�~����y=iz��q����IS&+��,Ue�����=6Td�$���f�:���T��������i�.��~W�"�b�}���g��]>�LE�����Ys�}�H��%�f�R���K�p���Q
�����x������3��ah&��aAf���Q�(o|>�hV��G�b��yb��/���?����!w�N�������%���d�E&�/L��)p���,���C���@�:��r��E�9!��a�vC�2��>��N�o���=���=���S;lK��������`�]��&����&d6�"��Y&��R��a7$��~�;��C��JD�3�?`����)3���U��JpUw��zy����,r3���w-���t{�]���soE�!s]��e����
�v6��Y�dg���3l�jO�J�Z��0:ia�#�)S%b�������&>�e��s���poS*�5
�a;rB����~�"��4koc����zfT�6�����9bYl�&C���� ;��hl����Q����nXa0�[	JG���*�&���d>k�zV�9|@�I3[�h��@��h%�,�d���c����o��	n�H�������E0��CJ�@���g��
���$5������h�_g����	i'#��6�:9&_aM��FRg6[�eO��)kDd����g��~h�OO��r����bEkH��<^��=��@&�
��Nk-�Y���g \�UX�Yya�b����NT�q�xA��5�:nCA&��T��\(6�S�3d
�&5�
|��]�8y�M'"�t��ep���� K�|���*���������qo�X��q����R�4��x���
Y?��X�t��e�}.��B�
m����zn���D�s�����rh	6��z,�L���//�����45����b�1Y�)|�7����m�~�k#*���{��S�_H����f���`)(���#���X�@�N�}����/���lU��Ss?^��`����`6���vE/���/�q��%0b�%�p'I��:��`�d�$Y	���$J����p���<�LM.�(�k����|3�;��c��gy��������M�!��D[������;�j9X)�)�|s#b%!��h�7�J��F�\}I}��OvT�:�^I��Nb��@�?��h<*�v(��w�-���@��"�a��S	2�'�N��T�m��P�P����j�K���f�p����Z��o4�fz8��mN7���qt$��&�U�\KG*����2
| ��Z�����m�1��I���1-*o9b���t}=�O��`#�>����vs����`G��2�0Ws |`a����
�Z7��H�f,�0�g�?/"��><�.1�
��""�#����?*����TT���Q��DuJ�D{��1Yz��x�3�LLO/_dc�]���>K�`-���y[���;3��
�9����0is�
�FD�>/�?�7W�w���%���Ng�O+ZB(*�Sq1��|7��u$��i����/���|����t��8��U��A%4M�=�����4"}����62��~0�!/�[9���#el�T��w���F������%>z*>�~����'����&�����k��/a��|���|����:b��������8U4�
i=��Q�5�)������u3��~��K.����������Z����vf�i��*n��#�exC���Y(��c�U������e[W�p�ln]m.�R|��\���K�>*�h���M��������}`�2tfo�$��\��&�[^L��H�'�{
�S�Cu���
)����X���u���J���&�[:6���l#"1��������X@�S8^L�k���j�G_��:�ab�0�n���JFM��<�~��6J5Z*�e�!r��Y���Y��!��o,;�n��c�i����e5�;�<�m�l	d�LB�S��6�����w��(1����d��-2�bA�E�X�fJ���=���'W�+Dg��yl��V����CZ�����WvA|;n������f����Z���:rEy���_�]���	:������V�7�7��6�k�%�t�UM]�Z���iMO����&��mh	V.rC�A�b@38����c=���0%���N���-�w�c>��m���������W��
�\��^�X�����-�"��Mp���6�3�p@��~H_�P������P�R�?������Al�����V�G�X���ZQ��#f ���1��D�E3'���wK�J����	���4���g��n�N�y��Sr����*ZmP1�����x�����I|��� ep�����#��Kn��2C9U5''�]��_�����B���scY�h���}�rM~o,���[�x$����L�_c����]�c�'�X����qAH�F��F	���?1&��������u����tQ��,m/���t�g&YS
�vro#���r������I���R6��_`��kGN�=�C�����%�UF�ED�:YyX�
�@a����X�fU��� RP��Bh:�k_K���,�~��v�>���F�ZBW.�U:�P��b������B
�
n�1Y|����w�f%�/R����n��:��Q����m��r��|d�#�^�L?�^e�=�E��#�j���o�tp���NB�R��]����[��k"��hc��b���^�{y�TQX�;f�:��`c�0/}!�o�u
��E�n����`K���2��2�bj��bjo��z����6TT�F�����,��f����
w��`���%X���O�Ei ��
�B�������N����|�H��9����?�v9D�[��.�+e�t$�Y�u�6�v�^&��BR�sE���a�Pt;����������%
�e�y���e�o-���G6d&<k �:���N�|0/�	�.���V���H$Z�E��������-�����1�X��P{VM���@�~�:xX��]1���T-\�V����M&ZmV��W4XV0�v?Vi�v��k�1g��B'n�E����wO D��"kZ����Y�'����4���&&�wH����)3�b^�99\�Ba,�,�K����<���.�=b�'�3w#�E/T���#1�������#P���)Hro.��nlkeX����r���P�!p$�\�
��j�Y�,\\B����t������&+��������q��������>/�u���
,�������&�����I���oX��q�E�+�au�o��]P��R�~�xo"'Z`������[u��F������
% �����-��TE8?]������P�4�Gz�#*������f�f����i��t� ���2?�t�j����{�!\����~^/r����o�F]5}�s�F��qz.���ay�O��,��B`>r��p�{y�,_�������v7P��iy8[Q���yB#8&����YX�#\,�h�y�j�[&�
+f^2@z�T7Q��R}���� R�k/_����>�>�x���Y�|GB�p�����j"x��������U:���0*[�0�-,�ofi�
�Vi��!&���?���2�w>���Iupc�b�h`������:X�V�OtL�
[��^Q�(���`i/0!�9���@������rj���I�����*���I�������g0@/eq��-�c'�ruG�Ok���L^B����A�l���>�.z���9�T�c8ij�w2%M]4v1[
i��i014v����N�
=N��AX$5��|�l�b���8���������0���v�0��e�~�7�."BV!g�/w�
�`����]4��O�F�t ���E<��$����gL�(7�i�~%�P��@�tr�y$�/��_N��k�B6W���qn<���h}�����qX9�@4��\J�>;�g�}���>N�Cz!�+��7�	��n��`G�t�bDK�����@�s_(����'�5�L���y����h	V�F^�n�*@|����{��
R��og<g#6~�'����7��
���B��K�Ost����G&��xlK��J���`+�p%/��W~���GS��
���{[�q�Q/3XL�ZO��1�;�/�h����e���:�"�=N���S�S�vN%Y�v�0i#�d���FP�������;.}����v;���9������=�C�0���a�k;�5��s�vz��������O�\�����W� ]���l�����"X���}.*������v��i������$��~�Am���������iaW��F��S�iF��T	'F"��i���*x�����Ca�WK���)����)����E]B����P�� �������h��g�L���c���i�����TV���5t�A'7����8���-��E����N��2Q�2�E��H(L#7��k`��+�C4KK$�g�(�4Z|�����6+�d&�x�FD��_E���^c��Q�����a��a��~m��DT�7n�}����89CA��{&5�j�������~��^��Z����%��r������t��v�)0�~����l'��a�p�]�y�V���t�=�����~C1U0v��i:al���E:B��������-�&
~��m=B&I>�5��R������}�H�0�o�$��`�xu��P	t�L���
jG�DU��z�H��+W4��8����Xe�Bv����Yh����	����#�DGi�!GlG�-���Wj���3�?������%C�r�������3�����&��A�8�����Dl��DC���/�WYGZ�����Y���m2��ZG�~0�n��I����}f�hj��a������Q���5dx����]����
��>7[I4j��,L����E�2�5K�l��W��(��s���w��*��S>xfVIz��R������I�;��bnA����Q��vOJ������Ip�
X�5���r�[~d�X��S���3���&���u�����=�sC�_�q�T"����~���N���U�������a\����
9��U�1��75�������������������;�|�H��/6�y;;8h�����~�+���l�G��[�a��a�6_S���d�OmI�`�@�_XE����Hy����i��n�&��%����4�p���k�� KB��X�*�:���L��y8�C�@Ur�����B��������������@7���V�m6���A7
�m��"4�,q���Ccl�H��H���T��v�Ido����J�|�'���T��t��`�"����\I�������Y4y�PPG��8��d�8:���`���E����F:���i��0���h	�UaP�	�mhI���H��T}�7J�o���B�X\�Q������|\,
�i&V9v�UhM�a��w0n��
���B��`��9���X���{#4�7�G��y��l�o_��P�*nz�t�Uu��J�F��8/�k//T��~�ig���?�F[�Lt�:���,2���Xqc��3?����G��>o�$���6����d'b�|	r,-��u��~�O�N�T���n�+t���Xl��~�����wy�p:7.����+V7+�*�ur�C��c�{E��<ET;<��K����B����T��K���lA7�m�������"P&E4eM��K����C�(o�~E�fU�W�f���9a�����q�+a��6����%l���������������?�~����Z����y�`~i��~l!#�5��*W@.W����s�+ �+�^�����POA�M�
m��F~z{8�6�p���fs`��8������G����5
n"��A �rcO�e�)2iBY(�D4�f�+�^h������8�We���%�%t��v_�N�|�$ZZ���z0�56(���dQ����=\� `C:�JD��g���U��g�(
��cG4m��Qb_�
�OGY��X� �]�-Bty��8�t�Z�#��V���c'j����R]�%��2W\�3o�o���$zD�@~9-�a7e�I�V��P^��>�
VDU����:2aOCV.����"�/�|,�`#����inQe���%��2l��+i�;y��Z7o��"�W]���
�O>/��d�� 5c��+�V.�t�Km�d�2=�k�\�lErV�G�+���W�q���+Z��z�v�g���{���
=V~`7���%�=�
"�� ����{���(���X.���h�tiA�B���gC0{�1s���7�!3����\B/+��A�TF�:�4��O8��|V"2�����D�z6$����6�z�xWc
�bQ�r�
h#�]���<8
�hG�[w���6�YQy(�[��z<�[Q)�Y�����b%YQ���E0}!k��MiC�j��M)'O�9�D��
�������e����e6K��Q�n�dV��nT�&��6u�4�\��LjG���R�+Y�����va�L������R	k�mjGS]��z���Z��T3�<�/���!c&���lVJ������/J���k����J��B�V����p���j#����;���cz�l7��0�]]�w0���f(������a���!����m���W1��h�d'�V�\�v_�g	�e��a[�*L+�/������fZ|���O&�]=�~�U��f�P�r�6�����a���wj��/��Y��&�
��Ot����U�3�
D<�G�L/f�I?o���a��=��.���MmZ�t�������2%
����mn���@>��D��P�UR1&^Dd���
���ohOj���	p+gg ��>w
��y-�n������x[��Bkg�w���v�WL��j�����E��3	���2��{����g��TnI�!�4T@H�GBv0�G2�FD�<��j�8�xc2����EDf��2�>�+WK������:�
t���Q�/��,�S��_I@��f�������~$��Fe]%��H�=7�$��F ������=X���Kmn�.�TA�������t�~!�i�GU[�F�}hv�M�X��y�
�`X�.��+L&��������f������e_b0�gc
{�>���]4aa�����J�oni
�����z���+f���9�Z�p�@�E$y2�I#E��F���==�S�����t(jYv�����`��hHN.)Q�4�u
���&�qy1�I�"nn@�HqnU���,|
�`:���d��r%��w���v���h1\5����g������������?���S(����O�
{����Y��e@>�d6����y/�� ��VO����it���9"�\���@����4����.�N��i�HD~f��	��o$���/��`j,��W���wX�z�?H���H�G"�}AZc����tT2�r���S�?����6y���8��9�k^�����a���l���-���}Wr�M5�/��������R��~oRd�ms��K����3�'VU"����b���N�B}b�@�z<p�R��[����t�m��	g�E��3�h���5w�Q����_<]f��G��
]�t`��1����"��7��������C�J��+�(pC��W�%>�g%nH��J2�|"���x�i;�Y�3����0)nC(�v����Y���HnO>5��hq��3]eC?�f���`�^����[>�55��uy��i�.�h>o$���!E�s`�#�4`�2�x%K�����;���Lv�y�#B�r��
����S�ux����\EdF�F(#�m��<yG&*O>b����S���LW�[x��)/�8������}�E���������2�m�yL�5T��;
��E�/�������}<L�����������=D�)�y����������#�[�;�3��0V�]�u���zLO����U��m��.s
�V���]nH����QcU�}uc	l|���� �nu���\�7s}�����V�|*��2��������vk8
-�>������+��:���ER
g���@�AE���b�7"��Q,�C'"?G��5�c�70�'�-���^jc�������
	�AN5���Q������q�,��,��F3&dp}�>��O��Dd���h��&xNt'"_���_ ::~�%H|�
����%��\���su7O����J�%?|���U#"o����H�����?���}��C�
h	�{��_����w�$)���@i,�I�^����A �J��I��qT����t ��q��$O�;�����Ul���t�<��w��}x�����f�h7��^�D�k��$s�� �,_�nq��g�De�9�w��2ZmL�yfj�������z7u���	Wv��h�=��?5�D)&���!�w�WY4a)�p�oo�p���&pXv[���iu��ji�M8���������������,����]��������w,f�DA }�o#��r	���M#5��V*�R'k�T'����QG����}[#	}jH�^�U�(���6����W���/�n���l��*+*���I�-I��"*�ec*�M
	8O4hRmp��T�X����u�X�vL�����DP)�C���Be��:��j�)�Zl�}��c(��I���J���\N���+E���/)z��d�~y�����fC�y$�����8�
:�5�W�O��u\�f��sf��&fw��DG����v�/��*T0�e*���c��S�&Sp���~�H�����Kq����
	X�,���i^9��4:(GV���������L����/(g���X���Twg�����T����-|q������
@��=���}!M����+u���}u�)�o�}�|���N��/X���<gl�9Q�P��`���%��[l��Y�FD6�	R��[:���/�����5a�GJ_i��x"�P�����"���;T�x����E~��?L��6��n�����w��`�
*2�c7�F��������z���$�(��Nc�DI��e�Y	�L�kU�ZF�D��k��s���c�h��e7��<�y�i9K\�����
W������l�h�������a�J-��ik�Z`"d������#��{!�n���0y���K�JIF��;���5���NW!��?���������T5��$jKHR�k�]?Zy�`��g]s)_�Q���p������(���������2�i��r0�
I�Y%�R=9��	�OG(�]m�3v���O[Ki�	�}
=Z|��x���JF��5Kr��>o���O!#"�}�l�������L�=����'�Tr33`0t�G�������)x�ri�i.O13G������<��*r�u�{lW�h���~�5���8+s��B/����0���a,u���)l)�v�S;C���4���2����6�b�kaz����y#�n�0y�.���DlL�e%b!^f���A���I�������L���/�����-�0�kL�~����Z��r�)��O�_�kA�?3��*���_F��|�Y&;S���0���
�x�7h1��.�e&�L����S�4��Hw��>(�s��H'x���46�k�H�6!���m�~��#��{E,)j&���fd���HS�4�Zc��X�}�k�������
{��G���y����L�����[;�D�OD��+Y����VbFy�m]����/P�����d�c_�>�	����c�������Q������n�H���A.�L��\>Z��f�<	[�kAF��oa�N�2V�am�����J�G�6�Q��b�4�~��,���� �,=�^��(�m2�\�
)�fQ���|R���aS��C��uO����b��ZC�nG- >�����H��j�L��/<Cv�d�mX��`���!9#�:�����F
���F���li]��:/����zPGK#f�|��;�������B]�q��m��=�;-z<��+�}�y.v�����I���z�O[��X�V."�VVP�'������K���1�q�J�pE�������@�)��Z&SO�"�`!vV	3��z{�8+��GP���A��}��$c����/���p!>Q�Y�Sr�q�mM�O-� ���p�h7[��y����`���U�s��0���_,e���P�#��b� �[;����.5�R�6���j�AvV	��m�O��~W�q���O���c��7��QYW{��C���Vao3�n/����le�
tp�`��������$��%[�	9��<�o�)�G�����*c����y�`)
St�p����t�u��������x���`�����1gO���]d���V�M��M���m�e��Rb�*���cH�:�UnP���Dc^�i-����Y�e�N��BT��oo����b���*�{d��6l���S�D�>/#�����;�#!�����L�$�y�u��6�eo��d��pe���S�<khq��g�h��\���/��>�`�d
�C�H����~3B��T��]�&������M��Or;���>R��b��)U��/��h=������5pRGl�f��oY�1v����J��lK1U9�����0W�/���r�_m��o(���5|�:9�.�-@��
y|����':[~�B}���������S�
�9�~3-�A_f��_���?8�1����i�y[����V��7���8�1Nm��yz�ng2�[:����s���a�w:Qn��r�N�Y���^����,?��~^�������Y~��~~�������Q~V1�|�g��z�G��b�y\��q������~^K�A���Yj
b���??��������Rk��g��l?�R!��G�T����|�Z ���)V�����Wd��_!���z��)����;�����~��~�6;�b��~���k��^�}��w���Q��b������e�_�b�}��w������������tMs�}�#l�Y��lE�FCL���-�j-y+bR��������x�Z������.Z��Z��Ro]���u{��Q��U:�$�Y������_!������wC��wK��~S��w[��wc��wk��ws��w{�����{�}-���x�=L~1�����}�������_X�b�����~��
�_,}�>j4�;��U�h�W]��i^�0��w��8��U��h:W���i\�.��o��8��U��h�V]��iZ�,��g��8��U��h:V���iX�*��_��8�vU��h�U]��iV�(��W������;�p(��ll���_��
�={����s�
�=���P����[/�^����"9��(U���^����"9�{� �C������Z����G�.��O$�S�N�60pd�I�_�S����!"'{6�(1���O��Ee��]�C��y�������`�)�'R��>����3_M�A�+k���������1q�O���A�C��2I�M>��O"(�~��B50p�YH'�Zx��<���,�W\�q>V$���d0���U]�$.k�?Iq����ml$��M�RY��'��T�)�N�������1���H�Wh����q���"�]�$.@U`�t�L���+��?=���"��s{�,��F��_{��:Z%2N��$����#�U
���O�N���gai���FVHe�r�$�V��,�Z6���;����x�6����/[��oJ^;	 �.DY$�4x;��:q�]qxa�wj,����X��y`'����L",�z��f�����.���u6!IK���C6��$�b�������F������-�K��p8����5���$����S��D��b�
{uN�[`s����47��S��2�6��U�����2[�k���&QV#���^����c�OJ�p�[d4�k����������U5���_����f�DQg����x�dCkh���l!^��M��$3�"O��B��:��e,Y
<�Udt0!��2G>x���
G"z�IS��1�"V��c�~�4�`�B���	���!����Q]q�����Z�3�3v�e�K����Ty0����
>X�c��������P�i=����<#���n��"���2�����3�2��9�U�D��fB���/�X�������CV �����a�,+�$������f�r�O'Z���[R��'`v2x
���1���$b
isYy����"�2&�:��\:��t�Eu�p������<a�N��\�h�$�b}�I����"����^:��Q��_����I�����xB�����0�X�q���REy�h)�;	y���?�G~:���a[Zx�������M����8V�E[$��urb�t�Z0m����Rj���.@�@�����2i|h��E�����l�l65���x��Nu>��������v��Mm���1T0�����7z
]�f��E���������T�$�Hbt>{*�������~�{��,Y���_,�.�n�X���G��,��}������.�P��P|�%\��3�\����J�C��250��$�:�ol�K�Y��a3`O���+�\@Tm�)�h�W� �(��z��T������5�@�YT;x�����/V!��m����=������X?Gy�NFy��/�z%-�����k~
�K��9�D�v<(J�sM_'��+fy�GXo��(C
�"cGAbp�O'��D��Q����G&����������1�(������?�:�"'���;v��V�]�|:���&������O'Kza����"?������mX>D�u��l����,�y�ka����p�r��T��2T�t�SE/����xZ�I����I�&is��d���������2D�9����a����i@�T_��2���"_��T�mq����MO_�����zh�Y\m/�i���
�7�B���EF3��W��OG�/���(gl!^}�����*��w���a����W>�TA4�![g���)zE�k������9
���=�;�u�e!�G+��L.e�h�����c���Hd�K�&�4�F�~m`�h��>i��F�9wMO#8\�@�v��`����s;w�[8���Ot�M\�������������@�@�>��K`����Y}���n��%bM/D���<U���YX�,q��7Z3�-q`�V��
�]��i��8\���I�t2t�[E������!
�h�}x���lU�Y��@5�Y�v86�:hC�����������D���E�*���]���
^�h��k��Bh�
�~���>�\|W��|�8��~cap�����z�9�?/2�I5�X�.����������y�`�GM@��m�K�r�j^�7�K�!.n�b�U������uX����`����<"�w���tPK���8���G[I��K��}h�w�D��,C���B��y'[��6����I��{L�B>uf�C��K3n�C��e6�,-C���0!�%�<j�I��f�h��������34��� �-��N#W���r���jo��+K���r�M�������E��y�k�.�~����&�z��������T�(�&���3)���U���Y*&8�#_d��trr����OQ!.Q'���$dj�+V|��:�^d-�0�\F��-����Y�SiD�
]��|p���A��^�[c�
.���\Oc��_����5���h�	��7�dg�e�H�#�"#�Y6���K�������r*������4�o�Y�D[tr��W#r����S����/��5��-9��y��L'�K����ck���mC�����D��"��$�l�9�����a	�/�(X�c
��EdL_�uX�H���K�v3�����Z-��e�`$�Q�h�)����i+�o�d���o�_����= ~��d���[a~_(
��'n�������g2����7�/$��f�71s�B�vc=-����
H�����_��,[�X�Z��n�MrK���w�s ����#-U����b�_��TW�����M����a����sS�y��80���m}y��a����<����x�\������*�J{�+����"/�S�����/$@c9���d��f�_H?���V��jBY�������x7���`�8j�10�BRnn��{���E�=��cv��h�0���S��7 "m?s�NKw��������)Ws�$��y���8����M�j.;�7�C!�#!�����K��
�����
`�V{�%j~!�u�	�;2�`�����'��]�H���#y`��-�p����A�nD7�y�6�f.��/��Qk����c�>����w3j�dS%E����qx#Z�	Q�'{�wvJ�7����wg1��B���fe�t�y��������� ����CD�l����UK�u�[����������Kc+�;�k�T��$[�3@:�v�r�e��������3���g�qTg�e��N�x�H\�I�G��6��������<#k��U$�����B���
�XR>����9Zy��	�vW�hi��w���T��e�`�!�������"E��l��G��\���e,��r�7+H*�:?�f����Y�	���3��"���3vwo.�U��+������\��q���{]�**��O,B���+V0=�������w�>o�y
�n��F�1��s;�H5�����7n^�z[^L��<|69�d����_��\%������Ll	��s�_Xz!
p������d�_N�^L,��S:L���@6W`�'�����S*�8����sw���L]���cf7w5����YO�������c ~���"�_7������~�u��o�s�V]�#� q���h{��4��xnn`����q�d��t$2�4���;b��mh	V.�����3��s�t<�y�mDox���|'�~����9�t~�������7w�����I�����E�9�K^]�'iD�i��]%� ����U "n&��jz+���;W+��+	����,^��5]�\�W:��>=�Fs��J#"��I��PD+���x�g�h����V��;��J#Z8W.��+�6�`
sJ�|����&_r��o��(���I*���5$����d���*�7����'���0�:�M�9�Ps��U�#_�)������ �:�]����1��:J��x�X��1�W�����T����h�*��;r��D�`H����K�!@a�C3�vM�-�y)2���$� ���w1�W�������3��^G�����h�+R%��"�f�y#�+����y�����u$����'9F�*�2F���>������8�7y�{��H[���q^Gi�1�����:��� ���G��^"�������Y���"�
�D�l|��x
-Y_1�������X�~rQ8~��\�~�������'��X�������X��~>^�"/.���~!6���Yw��DK���m�4�@u�cI��r�%��1G��e'"o���h�}��Zc<�[B�.���3<P���9���m�vp�$P��D�4'w*�-���!�c����/$���5�O0s0;�?~�,��R����/j��e�
Yw�V^H�������,��%�^�g�{�Br��W�NW���_��1
����S��k�1AaB�g�f�J
���f'Z�#�8�o�v�=��S�r�b�f�!m(�b�N�,��0����Di4\�a���T|���/$�=?2�k`0���:�kc(<�X�����gy����I*��uS��6
�BZ�l����,o��1K(]p�
B#�e���x��;���7���=0�n������1���l��*Z2�!py,ND�1�Nv���p��{Lo�W���Q
�+dG�-����p�N_� �	��/��t�W���
6\?��lR!�Y�G���mU��Z.s/kP�,,x���a���#���7�u�����X��Q���:���C�hnG��2��c�Jva�m���G�e���]l	<+����ahh����F������
����S1��ns6.`����{f�����w?h��Z�~��g���2����\���
W���R��nU�����D�z���fg����pi��
����9��O������Bp��w��?o�]��F>E��f�����;]��^7(�m��_�6��?�4������(C��?�U�y�$#�5���[�;M!������TO����g�io��an���6�c�8�h����(�[��S_���B�����}�����!�}Q$��3�n4������*������X'*�t����e���S��g<t:Z�<��T��dpx�
*@?���������'��iR��?���/*A��L���-zr�e$`��U��;�"b/�n��AB�/M|[dl	�d�[;���m�����;��k�k'?��Ec�s�cl��I�5�(��X���b��J��_jl�C�=�c���.��;�z���Q"�^����P./Ml��Jt�V���Wf�vp$b��D�D�����a�n�/�R��~�6�s3}#Rz_LHy�u^8Tdq�U`FQ������<,�z�o���<[�e�����n������/�]��nI\BB%�xW��/$`����������^r�lR�o�����1�
�>2��i���#�9���6YHW��g��^�/`�\�_�����|<[k��@/��@.sHuhy39��^�Y������FD�
4lh������Jp��b�X��n3����<�1���9O14����y�x^��6!`S@
���F0hw,A�#�BR�]M$�y�t �����og����,���hj�������������Q�%�������5 �����1,���M��P��K|�T���Z�DAc��?�Xl�����3Z1���#�q�0�����x$�u�?DK�%�n���f�*�����]�gy1�S��Kwk�����:��ob�`�=#=���Z�
��~hc
v�����PGKRa�j�3������<��>�t��H��g;��:�0�{adBtw7�k�
�q��D����	-W��=
	��N`�����/2����B�>n;��#�r�e��k�_y,2jd\\�`Y�B�,���N�C=�s�j5"��s6���.�t&a5$@X�W>�]��#�����;�<0��H�qf�����4"2N�=757Bd�p*�_���!����FD�a��I��:J�*�2o��N��#-���?������x�U������y�����AQ
��#�O���S��;������j3:XG��������z��i>x��v1%7���B�^!������7B����AT�N6��� ���/�qc���/�A7�_�~���P�g���=7�_�5��d�&�?�Q��I7'��>�����`�^���"0���a���������c`4����$f�v�36�F2.�K���D�G�;��:���<�7���W��
q���W�8�q�+����������!�y����\����VE�q�;��tn� 
����{"���{5�a3��8Us��,��K�;p�������"���s�1�MOp[�������'�x�����*��Z��=�������V����D��n�_��4��/�Im��	�#wQ��_p����@C�2w����2be�����2xh�.���A�h�vZ��m��4��
i5�):��B����b
�
$'�P��"��N5�|��F?o4|���<"��d���y��������Td;����V��3\IxS�`(�N�J��p/ofQ��f�5H��g���q��=��P���
I��y��1���Ad��AqY�[���/sY�`�y���-q���>%g
x�p��Nr�������#����
Y^�P;�����zf����D�����62��A�J_[O�%���^��-�;���I��V��3�LBG��E�����V�\u���Vi#��-�.z��=��(�<v����y�A<x�'51V��_vK"�7q���=��XAj��LK�@@*rgp$���:�f�y� �a���*[sO���-��X������'��a�h6�����a<�D�!=���!_�j���N��#}73$b�WC	���A����������r+^C>d������wCQ�C������C|/�,!�? ~(����v���[:R������f�8�����YV�K:��Ld�z--�9+�t
�U���c�����<	5�G{!�(

���U��m��m5���5��� vDnG(Ro�����d'�(l��������e3���n����X�|���[;�nDdd0�=#�'$0 �����a�t)>���f�k�8=S"�#��
�@p�j�q��Q�����=��FIj���"k�!{a��?�,,�V�A��������~�����%����\�;���x�E)�g�����z���O?�v�7K��/�
&�}��%�M�3A�&�a�& ��B�u���|"��XT�<��m"S�4��Oz���m��E��"��E�/0�4P�/2�t
��17�?F�t�����=�������P�5�Y�	������27'�p��������#*hH����%u.��$u�7����}��9��c��v2���i�������zB|�5���,�����m�Y)8)?EL��B�6-�RDh���Y���'������I%��/S5 �Ndh{��]Gd�P��B��]��.t���4���4::�E-cM��'�������*��#f,/fs�N	Po�
��@���Z�Q�����p
��c#�G�����un�1���UM7O����J��,E�Nix�Y�KO�_����"Xy-��S��w{��7C����x�|�(�ZOs�X��y�/�5���fQ��{�����pxgR�����+����aK'��	V�u����G����blHs"`�����2Mb�n����s^�V�=��8-/I�I�Hg�3����f�d1�����bX��!�
V���gF�&t<0�����h������,o6l�����
+�D
iM�
"��
�Z��ktH8��,�V�I�_��|��F0���$��'\����3#
��tL���)�K�:�5���6�\ ��m
;�iC�����bOP����V��JD��DY��
[������!�Wv��)n�1�o!�r���T�����62��;Z�%��%%S*O3��Qt�E��ML=�Y�� �CdeO�������i���L��1mz�[4�w�Z:
�,���Y���eK������lI�:A��6�W�1���<p=,i#"�DT���j��-iGCS1=nI	��}^,�����3K�BJxdKz�K��������0��\}�"L�$0�d6?��`��f��r�k2������
fRS%���64x@F������?��fH��fG�2��v�O���G��q�#��L��|"�o�c�4[��K�C�X$��,���������"cYc��yl
]%E��q�S�=�"B2�]�Q�*#E	��iM�C��"Ee�dHxj��Ri,d�� ��"�BMXy2���|�p�\,b(�����U�+���*���C�b��|pXR��%p��g�$O��X�"��B30eun���4a��{#���(���"F��~�/P��/����k���D�o~������F	\6��lm'?/��1��E�]
|^(�PqB&U�<K`1�������!�"H�����r�(J�����b\�l)��X:RQ����`r)u�}���C�0Bii��V�	N%XE�!���T�T��������2���4B/����,����1�T��@	����,��������c�x��2%�'%x�>��'�9��\�����I�1��I+��D�J\H"���4cI=*@S�5���Y�� h�$�l6��l�T�a���P�������l�v��PT��}Y:���E��M�Ufw�%X��C������u���:���.��a�g��B���N������~��s=7#�'����
�#9�����L�[���'�����Wt,o��9���B����E�&2<������)0F��������/�
�^�������<�!�B-�\�%�����M������~���yr�?dltv`�[5��~�a��RI*x&d�����~�RTd�������*������z��-��lL���)��%s�.s�d%K����s����D�x��������t[ Wp�b�j}.��B76�T���ix&��V���&S��|���xd\���%#'V�|w���mkU^�����FKz��?�m�^#2�d�	i7kL<�'��l$j���k���|���u��A��3��(h���"3����Vz�@���:Xm�l�us��#�����f��E<�6q��"��m����"�N`g���A��3�|��{|��d��K��R�1�afs{���"�66��EH� ��.���8������,5)�&��;��r��S�4��x���(B��rx.y�I"��]��>5 �
����'�x�M�{)b
�];��m�*�T������\��u��d�����=�s�Y)�+�,���$�-dI`����NZ�6��oyYF���<	:kmB��
ai���*�C�Uo+��d�Sm��3+�A����Q0������L4�:�����5\(����2�[W��]}���R[��cUeJ3E���C��'M.����M��Y���F>U�@f�Le?U���sb����=y���g�Pe��
��U������y2NX5�7J��65$�������D4�N���z%1W�3CPd��3��"�Eg����?/���[u�z������8����{������/�ER\���z<F���\Q���+-�"���zZs��H�����.b��SC���V&�sEZ
���k�S��Ys.�H!��raW�&�D�-�<�y<����������z���K���e��N�"��[����E�m���Nk��� ��P��������8C$���./��b����s�rOG��z������������b��R��C��K������SNk��!��5%T����~����QK�\�c��3�����?F-�1s��QK}�\�c�Vf���iy�5�lb��L��;E�}G���D��U����j����y� ��{��k�����D&��/}�~�[}�U[������O������K������� ���z����o���?|��E��k~~��o��������0���i��������_��?�����������J���3���`���WA2h��F�������i��u"2�x,.vp3�l)��u�o���?��>�C�%H����"���L���td��-�����%�����E�������G�%���a�<�F��T�	��&��.n��)�q��s2pv`;��|��>�;_�	'3��G�Q<���3�4��!W�����| :�����l8U�y��!|�(u��%n���$?bf��
��{�~B��5&@��r=7�����`d	�/���GT�Yi
	@�.�7�h('�������g'�^[��9��?��9.K,H_���%�;)Y����q��pNZ�	��F
mzT���a�B�.�!2�"�v�jj~��)������U/��!8��7�������)o���<E�mhI�]��Hv�H�a�=���z��2]�Dg$�`%����-�_��A�K�4F�Mu�]�Y�9l�Sd�=�l~��;�98�D��lH�z�8��I����	
���$ �wCO-��m��hq�vU�J�?�I����NH�_��ryE��=v������?�%�7���8���6������p��s���l]�~0]�z%S:t���M��t�mXk�TrX��K5$��%�mv���p���b�}�$N�9���b��iZG�Ap�������;Z����,�)�����(��J/�Jyg�d����x�/h�+�z���3_��O5�j��w�8��0�����Zp\N�5���� ~�3��e�I�4�z����o�vX����p5u��g2*i�+�e����BT>!Z��AV�ng��-��n����y�B����T�lO�7��ZPY�N���Z����M-~`���,�_z���Fz�.������o����-+K�������������[�)u3�2@?����C���8�]W3���QIYu���R�MD�����}�o	�?��H`� �9dQ����q���\.����j���3���e#�������=
IY���5tU�GMM���� �
��82��G���
ZH"g�nK��m�:P-�w/ja���v|Ce����h�A��D�e����D�7v.��9��5�}��h���-G2�A���N�c�	x��K��2�G3P���es�<
�����I�0Yo�yD��v~��
�k@���{a�g�������w��F^*��
�c��D��5@�u�p~W���i""�I��!��3��D�$g�Wn5�TaiR�=����	��8��N�s�DQ�+������}'��l����ye#�h�M�@?'�#* �&�	k�#E����<.��X���?� �xt�C��k����>/�%��� �{�3�hK{x�}�� 'n���DB6�z��`x�]����\���!���~�o���5~�@�)!I���"�(����@\��m��P�u�**��~y@��		�����w/�\��dm1�#6Lc}{�0�	Lh�����;��L@D�n��+l���~B�.�3A�}Y`��k.�<����4�����h��eY�I�ec������P����4�V�k�z�1;���q���=�V�����G�H�n��jqv�%!o�3J�������/�2�x��R�J3�Q��Ls�����E����j?#�C32���l���V�*B8�<��W�7�^3@�`?������������%_������
������3�&��{��0�
���l�`"��7�6�Wu���;�D�a����Y��RY�#�oS���9nV���E������n�a"�8R�)��2�D���G#��gz��yPx�q�O%�h��vK����b������hR����K���/�7�*6��b�>)�XWN&���)�H����;��:��Y�6Zg�8-kS����l�0���w��J#����p��I�NP�tiBbz����a�}�)�
����d�%����� �&�tncVjFPc�gt������c�C<��U�H�y�#C���T ���c�T�}������F'$��g@��'}�wD�K�p���(�i���c�K�����q&��x"�cFB�x����}�/���6����0�{<�\�qW��C�B~�����}����?�����'�*�/�a?�N���WdQ� ��u��v�@%�d�����g$�����#H��G���}v���~������t���Zo�sD;a=!)��au��3�h�]Lo���{���bF���' ��G+��>���OD�q����|��	��n�������uY������lfg���r���L������v��l!s]��e����
�v6��Y�dg���6t����V-�c�������i$bz����g[\�6���[��������VS���O
�a;mB�,�,d�uh�����|�VO�J�&�����b"EA�5:�z����69#�p@c����:Ny�-���VL����E�1�~��3�5��\c<��������f�p�n�����@�!�y�}���HB��h{����/H�^��L����H��O����>g&I����@���F�>�������ea�����%���>���a6�IAX��������?w��c����xn_b?�����o$��<^��{rS�L x�8�T�������N@��9���Yya�����l��3Q�N�����%�MDu�BA&��T��T(6�S�3d
�&�D����$p�����l�i�v���[�(���������������q�\��n�H���gh�x��I��n����H�����������	8M7��-����w�;�h�bN��my(��J���dTG2�n�I��:�����dAj�-c&rX����Ak��O1��V���(a��N�^���4�������(�O� �<�f��	d�����������&��
|������g`�D�1���`g������E�}�m��y���I���n��LDR	���kW�o'�D�.M@D>�9'�����&@c��{�ee���3�sqF��
I�x.��}�3�j9Y)�&������$�A-��=����(�Kz^5]�}�'4��=����Nb����6l����h6R��?�/k��]��NG%�]E��G�xg�5�1g�_]��2��A�h��]+���}�Mw,h�77�;�q,H��M0�d���T��V�H2|B6IT�����M�Ohb�tAn�L C�}{bc?A���$�gR�9�_'~���.H>B����$��/_re����#��K,����w!"{���sj%��X}"�~��-��U�~�����-�G�����@���J�:���2�L��u�E6�������=�B-/��\y��^�Khh�Q��%�S�I��+4f"���"����RA	`�E�O�����������RE��k�$��i�����(�:6O%�7�|6�7��XV��0i
�����b�DB���X�u&"w�&"1y���5]0�&�j����0U��5BpE���fT�x�T|.��k����T�,����k�����\V-�g6�9Bg��Y�����v�S39#��0�S��J����&|����c7CT����-��k=��|&"#��q��Xo���'�J�?�9�exC��QV���
'UVw`�w1�>j��}bRm&J�5�����&E�%�.�G����Q����]���s�2�uh�}���e����f���	�Q�8���6h�CT�)� �X��'�li��� ��L���vn�Z�N��e��~=!-�u���{Z#��(ea\W�s������a����n�Q�z���G���j$��M���l�����m�����^��e��s��qdq�5!��z����Z�)���>������	��]=���b��ovY�{��;�
�{V�b�����j}�<�B���	�<f7������������VG�_�T�)
���>��o���W��j�PB#�|�����u�c���N|g�v
�{�w�g��1���
Z��@mr�t=�I���X����d���}�e4��f��C�6���R���z#�9�a^3;��GL����D
A�*-J�
�w �MDJ��r��}r:,t^2����r]'�~������+��>n$!3���z�g��HD%��#���d��a��$��q��X)]�~(/���#�qq�oA��5�Z����2�EO���>#�T�;$o��,K�X&�����(u��p���t�XT!^�P�#I2����H����wa(�
Y�9���E���f�Z�]�2��e���7�D�[D����a�v�x��]����d������V��"�,$dn���kA��7��&���+7�������qw�E����G�t�mG����l������'7&���n�������XV�_�����d���LI7�p��H�;�.�q�������L���KO:�>�#J�/�x�T/�������Ot}���G��Y"�\{a�t��f�����eT�L�m��������po�F�d�������
��*m�++���~8��8�|rH�t�h���� �v����0e�pJ��|{7�Yy'����+J��m{qe�����F���lqG4����D]W�|�%��?YI>3���m���U���$�:5:�3�lZl������s�vo"YV]=�	��\
�p�1�"�9q����@��f���A�."3����{&����d�>3p�y���oO�wE q�i<���E1L>@�������j��G�f�s��������en��b�dy��5��w��f>������d/��t'���nLe�2�J$5c^?�n������$�x?'G�|��D��	$���K������aCf��w����~H����Y�N3������Lj�Y���Pd�kL/<���M�gA�	�Q6# ��	����i�Z���F�)�'���E��,��@37k�'C���\n�I2V�9���d���B����m=.?�0��m�|�>�k9�yc��D��S-+?����&��Z}F�����,��nL���zQ����Z:<9��[��T�b��n���\���A+p1����~ly��l�_p��X7���{����a����a�*S�����q����q�K;�e����'Rm���\����T(E����\�%��:*<�������j��i�s���U$Mt���?q�BQ<b�Q���1�3�W��<������Og���?�muc��vZ-��bHV��\�(}s�7�2�4�8;�;�U+8�A�4~.iz���X�-��z����F��V9�ra������
����1�h?	�3�7�[7�}���&�3����0k8s�-��O,�Z{v.���5�����^�|[�RV��?1�	�������i�����p����$Q������~_��(��sQV��T�2�aG.0W�������7����������[y^�<m$}^t�'�#�N���r�E*��]�"]z8/�O^E<��3��S+����p��L�i��\�~3/7�v��W�IP����p �T�G}2�����������a�A�
Fr�8d�.����2�?��pD��7kQ��^�pt�L<����x"Y~<�D��4"�O�-4����p�G������~�R�p�a��Y�h�
��U*j&��fs�c<fPG�D�AQ��1�Q~,Q��H3b<����a#�I4<GHDld�������d��2�,���q �J*��YfN_��eq
*�����j��_��5���'��%��L ��!�q4���"s'�T��E2a2%�����j����s���j�����AF����K5F �%S7C'���E��|�G�x���z�w"���g��y.�4w�>8,;w�5�nFwDZ#;mA�J~�8m.VJ'���^�m<������0i��gc~�Z�=��(�G� ��;?x�u�{dk���f��~G��e�*�!�t���/U7��R#+�����f���q�t%�����N2E�rj�������;��M�Tm]<�6�:O:�V�Q����\�0M�G��I�g5�,��3�s\�6oq��z7����N��r���<����7��|[9�YS�t*g"����j���#�2��D���fBL�t Y�DZ���O5�Q1�@��Y
��O���f��4N��q�[���+z����3������(���� �k���$�u�'nr�rg�$�w��db~-��00\29�
���JF��h�\���{r�i4G�������>����E��,�	�������0�i�@U�N�T�����]�3����Y^�����,�&FY��!4%x���B�W�FaD��T�	Tub�(�j�@�c�<l�\�HeD��(:������,8�x������j�;���tT�Q�DYg���4����C���a�|f��%��<h��dQ��RT<pw�O�~�i��WE��*��������!���/����%���A;��f;��}�*Y�Grm����ix�$n8����:~_�g�)
���w�	#`����fwf����&~F����������-�&v���p������F�z��GP\�$=�@�'�'�D-����e�F�c'�����sC���x��Q�&���7�
���(�~��d�qH�dj��%~V� ��I�����YwF��wFIFBm�?��dP+S�\������kM�����N�-6��#�������*c��}���;u��D���#5D�~�x����.�*�h�m-kT�('��Yud�fST�:w�F��.�c�M�e��.�/S�Hl����N6�!)j���;R�����6�2}���R�Q�9Z����tc���?��N���Y�Q6c�8`���p��X'pa6�J6j ��QG�.��F���+�+W�����(�@����
�o�=u?t��;i�B��'���3�:�l:�Z��8@�u
O]�K^o��6:X�z�s�Q����@e�A��P���V���dLV�p�/���
Y����tm[���'`&�B����twHX�'��E��#���DF���z����a����'E����)���n��	4�&����D��m��,�e�%����"���5�/����I@��uw`��g"?gz��gLL �%��Ut]^��Us���'��n���DU ��*
#�	���3�w���	4f����>3O;�jl���!'6Ob�����
��<UI�A�@�3��V�����8�r�8���HP����|�W�,$���l6-R�E��������M l���\��^v��D�,3a��~nI��q���������C����� ������_�0
e�����a�e"f�
�$%P�n�k���,�3���	g@�J�
���b��I>�)�|���!����G
�e�2���!b��k��z0�k�B������?�X���'U6�� ���Z}>v��D*�j�6;��H�/�-�
*���������L�x���']�B2$*[�^���o��y�{$��dNj���	O��<k����
�s��������?��������.��������������93�2�o�C�d��~=-_������CL����:�|�������z��8k�6h��+rp>�?Vu����r�/�^4���Hti�Z���5���d+�������+-����?JHe��"3"����^�BDF�7��O�pp���%�3$/��&����@(�d��,��Cn�+��� \*"�j3����Qs������oL��.,kF�J�5���G�%��_2�0�L	!�a��		@R�����ug,����Vt{��1��������)�;�1�����H�vL������q__����'���@�����x�����.n1�~B,
c?�{X2�	iE��
�TU	��/���.
�`���e�T��������`���:?l�A���Sg�f�z�t��J��6������"������4�<|�`U'b���#B7�$%[�[k��:!�e��=V�aV'd	1����������$�)�YU.��fuB���0�Z\�e$!�Me���HI6����<���lT'$��.��%��I&u"n��L����;��|
�dR]-*g�-��T|?j�DJ����u�L�HD��WX�e����A�6�0���jR?Y��ob-�"�lP'������}�����{�����j�Q�iO��&���h����lM��d���Z���`7#���d�7�G��5�AaNq�fj�Q;-S(�>)S������e���;7��J6������v������r��N�A�T�*d7uf��e�ys�0�iN�����J��ND�R���1�}n�TG�2�������ND��m�Sl������-OuD*��`�������HU#�d&����ND�a�{����'GubY7hV']�q$-+r��*w�f�:#��}����dYg�53x����U���}���a���O�(�{�7����uF�e�Z�o~�����sv������f#*J�;�� �]�����mj�.*�-�R�ldo�IM&u$P����^�]�&u"U��[�/l��m*X�����
y�����I
�e��Q��_mRv�����Y{Cb�	
��`���	K(�aMNiCDK�C�
�+�����@j�G��cO��9 O���SUN�����y�e��c��X4='3�r<���g��<�}��[4�B
L�����
C/��n^�M�I����(�?xv��5���|&Y������ODd��m��.\�a_��0�gE�s���`��X
�)��C�C���f2����X
O���~����<�����
�[��O�;���L�cf��]f���DxP�N����]8�������I��pi)Kx^
`�JH
�q������J�8OD�a�Z�e���� ����Y"���(D��x���"6�����H�9NF"#&�e��A��H�rj/x�O���N��'�j����q��Z0 m�����x��[�0�aNS���'B�U����b:5C6(����_����ZO�xf<x���)�������RHb���Aw�D�=�m����t
G��px�#b�q�?�<7��Z3J=����S���AX�d`}X;2���b���_��^�����;:��Uf�������)zL���u�Dd��j�Fa���J�A���w,RK��K�VVO���!���r�A?~E��������H�����o�������S�#:���O��(����JUx��@���\��T�����20�n,���@.}�y^,y���E�5���r�M@���}&$r8ST�3J�YF�T�6��!��_z�MpX�~�\}Q�+�?��+��u�����gQS��pY���@��cg�i,�������?{�e���,Z�<k�
�[-fd<B�,8f_��i�n��I�7	d|�Hz�:�K�4!�7�_mO���5p�>�������
�	�w��E���Q����p^��i�Ma!&$�?h1���Z��<�K���s���n$��cFM�K8�fYb\LcnO�h�T`yW�)������P|g�y~(8��x,��H4�"}qX��"�t>��17t���#�����b��:TY���D�����uA���3V�P=/F�����J�����e+���1��?��*8�����������J����? ������.�o"I2OV��.On03bN�}�#N/�K���5=��]j���OA��g��.��M;�����	8���J���@t���#}�[�.uF���~�R�x�����LT{O�����R��	i�������[u����y!}���&��� D���;�����5����VoYz�����>rA�!u��y,��y8��4����|j�j`��ff�A����A�)8����@������h	}VD`j�����1!�Mq�����s��.L��]<���Y�	���TGvo���zHDd�"��E����~�> �Dq�W<�w7�D!�8��+���g�S��P����Dv��	��JBWQ\�H�4��7��\V+���Z��Pk���"���[�N�G�MZY�&p9���6��3l� 4��m&��zk]�j����gAe$zl3�+�U���-�b��U�D�����}D��N;~����:#��-����c�=���'K1s�O m����'@X����l�M6!=Q
3~^������%�F���?~4�C2~���v�0�"���GR�d�-��Us����_�R���*��n�2l��;�z;�����|�fN_�!#*J�l����&�~�D�	��S�����+��{L������x0s'��.&�J�a���F�?z,�OCz�`~�)M�Qf�����L@�������\<������[4�@5��?@x��R��b����j��������O���0y��W��G��f���Xb����s�]�]=���n)��l7{����0����g������R�D�LDbq�_������o��,�Ck��b�>��Y����S���ogT�_��=���J��4u�[0f��m%�-��;�; iSV�����U�?s�Y�h�	Cx����6���N�����-La��e��aG"�	�%�;5[��vBj������e�G$��f#g�g�����{�����>���$��=���jk�|����{�q<��x����{�a��������\��]�g�d�������� s��o�$:#B��v��+51���g���>�8���|`����_QTF}��~�����2�d��`�a���������8	�Z�����j�_����uc1���*X�C�������4 �d_���Lb�o,����w����9�y{ev�|#s+�h����_�'���[���?�(m��>\W1_����|�����*��[�ou�~=�u���d]J�U���c��b�����������g���p�����x}��oC�AL��3��|����r}�o��k�?��z����9�/�|���^o-k/���SV�����>h?�t�����z�/��)���I-�CL�US�:�t},�������|��;�SL����(��c������%_����}�1]�������s�����w}�G�Nmh=�2h7�����u_s����������|}�C���������P���Q������}��}��K������C��n�������}���@1_�n����G7�C����!���
��u�z���w=�|���b�������6�_t�����
v?����6^����P�
v?����9�ot������M��c���
��rC������'7����
��?�!v�On�]��b������?�!v�On�]��b���������'7����
��rC������'7���n�r����Nn�_��9�!~=���
��������������l���������m,_��7��
���P.�����\���Hn�_�~GrC��X�k.�=�����'���������L����M�\�t7e���I������,Bf	Xx !D)?*#�	[���:g�$�K�%���m���	=A>�<<3A� �U)i�K\��`�L��b�������YY�����BN�
"S,�j��b�����.�Bk�B
�#q�m@�,������~�����s���Ei'4U��h�������Y3<������H��������ao���\����I�7�Ae4�3���vI�\�����_#e�[� ��� d[���lbv�s���la\��Y�7M��O�.�e�[�\����r� �����gd�{�2�r��>��[JT����VV���4�M�]��{�+�����i�mE>�t��=D%Xh����&��H�o���
3�� ��
����d}0Y�������I;&$����t1����EK&�\&4���O�Nm=�����t>��E��N5*� �0.D�<8�-�6r$���j�)J�I���"�R���Z����Ci�05�g\zK������L�^��JN%�eM�-'�������vQ~YO!�ji,
��"�tmw\4�������f� ���~g�ei
n�%�aF���y2m'��D5��"m���hz����~'�V�d��(cz
����
�\+�>�����}�Q3�9�7���h����N������ti���������P~"����TF?��Wq�������4���}�I�6{�j�%���&��=�����x!V�gE6�S"z�����g�v����}��?�Q����$H�zx���Z[=��@�8���$ ������1�!�7�"q�%���r��OP��`"%���g)���1(H(��\T�dP��	���K�m���J0ma�Jf��<�+,�XP��L3����HY0�Kr^��b�=�zzp���j���e���������e��,�,�����`�&�M%��=���4K|����������9��A���%^�u��+3,(�]��:��y&��w6���=���$�D%���a@v��CM��"�Q��0��d'W�V7������L[+�k_������+�FU���������3����s!Ww.�v����������E|�BR(7;?����j@��@�v��2�Sd�e�vF�vn��Q��g���<\^R�[X8��X����C��mw/��P���O���_��8�����!���"���Q����2��QK6�'���I��7I8���;���������|~f�����3����x�2��������]�}�[}�� d5���������<e�L������n�����]�w�%z2}n�>e@�!j�	�Ykee�S���Dg���%�o����!�1����H�63�e�cJ�9�PoF�z��<�a�<��"���g����n��'����w���A���j%�|o��@[q�(-S[��������;W��{�fC�YR:z�;0���CY)�����L��w���3�G�W^�w]�r���\zG�������u��� �;M[-.��k���
M��K����wA���g��y�C~rZ��	�hl��k��~,`��i�,��?���`)��}�`B��_������hE��F�!��'[���a�9�G�:�oY�)����s�?��u��5m<<�? U�CS�/�x��o�D��V���u#�pd�\�)@�nK���<���*�'f�,T�V�m1������	i����m��S�f��P�Z�:��[��8B[m?��Eh�H�����bv��~���(;�K;�=�w!6��Vr��(w����"�5x
�`�M���/t���I(����h��o�	y�M2�gO�������6��I��s�vZ�+V"�Hk-bfF��n��n1M7���mUl�0���
��J���]�3�����N[`�Y=������T�f}�$��������
$'�33����H�vph����U����n���e��Sk��IR��,75����|����3���i����V���������U�����1B�Q��xSF�Ed�������f6����/���_� *��n5F�F����r���� ��3+�<�e��d_&[<W�C��`s"P�� ���7N����g�����M�����������q���E��sP���Y�4�R2�N�����i����@�A�8��NA|'@]=�����e.��|JBt���u���ZE��d���d�J`T�oG�s�rt���p!\�K=l�����gT�`5����d��j��D�	�Lx�.l�'��ID�jY�H���E���H�L%^8K�<w�e�|�~F���N�A��KT����z���iS���lX�r��3TR
���<�17�z=i��|���#���7O�}TL%*�gx���B\<ru&!���+�IbL=)4��oLE�����\�J0�������be�Dd����&@����D�;m,�NQ2�=��@P	&D'!��$_e�H���<�j���3A�d7�[���E�D��H������#xW$���P�hX#`3��#�G���������������YS������Ec�M���J���d����v��%�(f�������*�����_%]�u�J���~����v���f���]N�5�^f���>lt��p��/H���li��j�E4�.r�^G�OHe���io5)L��J���n��	������0����T�}F
F}A����/x�����\�0���p����waY%��/*���}���g2l�7tO�S2�-��
���i��T�
���l�3R�/LGo$�� z*������J��jvM{�n9&�e=5^��-��\n�����d��jz�U��QEf���)pO��(��3*�@��]� �3��	���@-�����l����Q����9��U����j�g�������z���D{��}A������B���H�����C��_Xlps�J��
�+jvM�X���|�Cd�=f��Q��$K�����%�����'
���>~��<}������y��P['s$�,�J���D%X�3���@�t�����E�;��.��f�+�@';���5��c����X>��F�+�����sK�uC�}���+��T�1#��a��t|��o��	59�c�����?����=|�Y�6������`e3�c0(=��s��T�N�Gt���y`9	�d@Q	��U�zQ!&��Gk)�	�+�����7����M�)]X0��7�'�d�/4�+D�h/�
���e��I��H*�:��������2Q}&�\~]���`��������k��qQ���rw��
@}��D����8�r�6�:��>o�y
����:�P���(#�pv�\7��,L��<����c�:��"4�u�v4j��������s�������2��B�y����	�wa
`7�ZL���3�l���O���o�2U���j�����L]��������&����q����{�{�4�������~�B�������'.�6��|	�W��2������
M�M@�~p�hj�3�q=��2#���0g@'�G|C%�p���P
v� �I�����d�.v���t��o����m�����~'Ju�2����Tvu'@��8�	�xInG�	��'��|WkO��I���	 �Jd������@D>�L��jZ������
���	`����l�2��x%����	���=�As�������&����b�2"{aOG+p�2�2�tF���h�\�X�a��o��0�����_r�h�%O��{�nF,z�v�����D�����8M����)���b�f$�
�z"�5g�nD_�3��w�s`��	`�:���mR���`O�#`�F��v��_1�doFE�����#w���>��+�	�;4��YS�'�y)��wFI� ^o�,d1���[Cx��ED(bx3����
���*��qh���T�j��uK��	�A��'9"x#�2"x�L�MDJ������ex����>9�u�bxSp��cz3��Z^��_���D��h�MJ�u�)�GQ�������&0�x*Y_����td�c��QZ���~�V���QZ���Gi��X~�b��w�����yM�\\���^��w��;�J�LI6���r��(9��M�<����:�3��V`���������K���D� �O���=G�[�u�^}���~
�9�e��Ddf�5�6�^��\�7��3��3s&������B~]��/j��W����� ����o�����q�����\��~������X�h_t$"#
����S�o��b�{�M��Ns�J��/<8;�3�����Q|S6e�����o!V��o&�B�6�� K4\��Y4�(E����Z��J�O�!� ��h�@�C_���\���
�2����@���
O��:��r�8L7����*��	X�z�!����%�.8
a$�>}��#��a-�j�=0�n�y��������
�z[Q�DC��X��c1���|1x���}��x��q��2pW�ApC%X��g����$��;�m��.�`����#�~"���^Y���2w���Ha����&�^�H������7[��t��W�'����4b�{	h�3���(P��G�e<��]l	�
�|n��:���������C�
�P���	��j�c�h�������
���	1���h�������3A�pj��c����������T7"���pZ��n���z���f��	}wmf)�	�D
�{�s|I�����47�R�j�a������h$��S�}7� ��|O�iaW<��i���Y�i���Y����g�������e�"�^b����d$���G��`B�;�D��3���n���N�1T��������:7/(�����2�H@X������E������T�V�^<�l&�n���pSY��JQ����De{�t��2�F�wa
<|f�c�N�aFEI�U���8�|>�f�_�37�	�4���wsS���LP:,���-���2���*����(��o"'����(���&R2��l��7��,���;��k�k'_c��=�����;)|��6{I��3�,�K�C�
�@AT�(&T���W�����Bx	������^������2�y��G��Q>w
��T�����i_&V��A�����H�}1!���y�AH$��V�E�XNB�?x��|�G5��a���[V���c��6B�g��amKH����1������aJ�%o��
6i�o�a�~E4@V����t�����*��vhHW���=����:py�q~�N��l���-(g�nn��>
TV&'_�k5���U3�}/�-bh&���r%8�b���MHe���	
0�s@3�qWL�v>WL�,(4*��)�	��iQ�VQ^���Hj���D���w��ly�s����*c|3�j�~��&����UC�e".r�Gu��8w>!�m��LH�x*�f@�n#~{�Ta�%e��gHE>���R%ti�:��v����n;�S@*z��_�#���#)o��H-�@pC��5�8!���
i�<��S&��Q�t�F> �<6����c#��f�����U[�u�:2�o���>4��TXg�&�����kD���O�m�DY{�f����i���	��	�
��v��f%xg "�P��s9�
D�fB`�x����_�n''O-<�}�<nA�����E~���h"w����e($H	��4Dp��a���5=�������l���wS�����%y�3��))�����5:��Md�ut*���Z��;#�?=�7b,7Bd�p�����!��;�"}����u���uA	 ����
���eF�?u}Y�{���GV��_���.Dt����|PT���H�f?{�A���&�x�Z�p��6��u�q""�6�b� �8���"m�'���>����!�eA|�+���l�3��ccT�;AT���a'"2�j!X���*����Z5;
���7!U��']0Nb�+B�V���.5�9-(�nvA��
]��n�J;o�����7!M�p���X�F��\�������Io����.|�	%�H�%�R8��,L��m��n�$����=�9�g��PY����W���8ox���X����p������HD>���J4��aU�.�e��V�45x�#B9��{"���{M�a3���TM�]YFr�\b���������o��(��!���'�#�x]���D\lz���U�=��n�mv�{��e��H���"%X�+�>�\���F�r�����,Hr�
W�w�]�LH�����X�k��.,�N;����MDK���\l+������V�����zc�]�x	��8���_��p�����F��>�t���7m����A� ?���o��Td;����Vt@���z��A���p"7==���F
"�Y�A���T��p�Pj�����4$���c7�)���D������u�����e�"X�����!��f�%�����2��q�N�!���+�aC�7>T�zg��cP���QI�b����;�i&>pP�����x	l�0���-�Z�\��%��
RX

g���
�h�������k��Z`���5�q�v$�.��E���S��2��C�q*��Q{���A�]M�X���$��8���}h�c������P�'G��gx���3���A��A�v���'�c�1Z�'�`����A�.<���"����b� �q�O��"jH����!��j�����W�#}7���kB	n3�I���">��}&[n���2�	��������u:m���!��,!�}�4���v�N�+3R������?�\q�yF�wgY]/}�a�e"������g�����L?��43*�I��<���2!�
�9]�r[E=t�v�x�^;xF(2������d'����2�2���f^#�����%�M~[Dk�8�|&"#s�WAa�nl�v��7�����t)^C%���MWU���LF�]�~�����1�w��=����.��v�R7Y��[C~gRX�:�
R�<;�.H�6x��j�`�_��n�S]~���(EPqf��;���$�3��T�7Kd��'D��s�d��t&(�=��q��(�Zw0���OdwG�6�x�f�X7��L�����6�\���]ZB�����F�V������`1���k��[�e]��L����N����*����s$!#��~J7'(��qx����LH���r�F�K(g������D����y�y 4������	1��r�t�2�$����_�<�,k�T���]�"�r��r"k� �A�fq���'0��� �	;-���j@�I��6����&
#�j	(�����@����n3Y�����������@�5��9ND����u��l����m�*~�n"���+n�@����p��p3�8����'OR=++SH_�t�f�
m	��2��)>������=��}��NV^������m��D4�;�����]Q�ZOs2/����b����Y��� X��=���1�����y�P��om@�m��	9iB�*�Y5����"��.,��������2Mb�n����s> ����V�K%�L5i7��~�;���C�Z;�*�b\
�o�yp:#����x`"�R'@�p�?u �������C�D�<��g�	iM�
�:4�*�wE`.�sR2��:)�p�18��d&>�<nF�u?z}f���m:&U���waI_������p ��c
;����=�x@r��3���U�rs:��8��g[����i|��j��?H�oq�l bJ�f%L�Dnf4KZ	[2�`J���r����0-��l��zx+���_����-�D��r5��E�j`�t�����]���B�%e^�lIg$�����j�-���N�=�M�~q�&�`���mK:�q"�[�k7s��tF�;������]XfI/��g�tA%<�%e��lIgt#�iETU�����M�I����|
�`��f����5�����f���d�����:��j�������������i+����jF�O#(=��z�J���'d#(�c��������2��)��2qEbC mf���V��2>(���#�����;��H|���p�s��b�d�3�sW�Q������&��.�GQ ��:��ri,u�����b����d������XfD������P�le*���0�
�Lc(=���ye(��?�K����uF�#��L��:O�Qhj����H|���1����+�
��#&-���PFb�o������]Q�E����s�]X��D-�����4�����IU9�a	l%"��
~V�7�������I9�(
�F��(�._���{=���(����1b��e?����D���T�vSkun$8�`C("B�@�c-��GP$>�s�z@Y=�+J����?�@h���P8�.
����f
5 @iop�z���H|��2J�O����16xR��	�	�}F�DN�h���w�����Gb�&;\�Hb���i��z�T�I��Q�A5�-ZM�$���z0[�g_��Afcc:��=
>���:��'BQ=j��4MR��6��2a�`�&�����m��Q��m�Qv�
��,U�V���/K�G��X����&��wF�H>�
����L����<fSm��,��+:���1��5�+;�\l8�Jdx>
��&��)�F�/��7�*�&�����m��H|��
�2������'�����(��Y��
5�6��
��I�Fgv��D��_�6��; I�sA5�������g��H����\~gB��O�������}��E.�����}v7�v�s�.s��H�:��[�9s6#�^��8����?�����h��VG����P����A�Z�f�����
6��aQF^c�&�����}�I�������mT���$xWT�[��nk<��&"A$kN���l]Igl
w\�������k7��������)v�<��H;�>��\�N�����k����{�<��q�Myc��g!>�6���"��m��v��;���:D;Hcf��4��
��m�Pr�>�:�R�����
�����N(������XQA`[�����@�q0NbCo����,5i�MC��?��u�L��Jc��?�z'p��~>7��7I���]��>5 ��-}b1���-�8�];��m�T6!��H�t��x��#�i��r�g��AiA�!v����Z���)	������N�v���H�����{�"!S�	ai�����9Lz;�B8��|��wf��h3���%��^>1�������.�i
T�O����+W�I}����-��M2��O�)2@6�o�|������i:j�BI�g�SE�P�w}��������s1���L�������\1��i��'��U��(�����;Ccf6]$z ��+�S��'sE03E��8�,p��L���������;�GL5$JO�E$!�>\��X���t���S$V���f�sEn"��W*sE�M�zZs��H�yQq2��ct�M
�4��L�������k�S����LV��Y!�m0<�4Q�p�Bx|{��������1MD�+.na�t���NeB�W�B�g�R�����A3��hB��b3D��m����.�POf���7��������,o9��E=*��5�g\W1]��3_���kJ���b������1_���u5
�9�wm,�]g������������,�]���������v����s��:��Iz��������S�����u��\���\��},�]71��i|M������D�>�'�������w����O?��\��?�W����4_����k�vQ��P���������(z����������=�7��������o��������?����v����Y�����N���q�@�;�L�����>+���v���{��7�qnG�DQ7����N���|�|W���MT�C��M	J�sF$&q�:��)����-1�N�}S2k������R�g��BxU,�"�qp���~r����J�?����t��~��2�;w�FK�6|�o���w)Q��G��A'�G����	�dHa���q����3�,DRq�L�V�/	�E�S:��q�4�'i335��<����(Tj}���1S��&��h���@���rrW�j4+mB��K,�]�u��4(�HD��B��5��l�����/l���|#��U?3)X���I�rLH�"����\��E���j4!yP��-�u����7������MYM��_���M�^����l����!,3dMO+O�_'x5i���c���k����8�AVs�<K������>�;�`I-8�f��n�v��D%X��i|#ksG3i������5�9@�f$���v`�d���MD%X�H��P	0">�A�MvB.���~'��c�w����M�e�5�&�T
K��m��~C�^�v���+����kIn�1��\���u�OE���
���?PF������f�'Sz�t�������G+jX�QFrZ��KMH�FY�/,Vyg���Uw��-����2��n7�8�G��(5�f�����cz����0����<tZOf:1=5#~�3��%�I�4!z���E��Ok8�<n���r�LFe"
�#�d��.�O���p�U��Y�xs�4s�������	�L�=V2�S�|�3jk��8u�N-A^c��;~`���,���HP��l�_P���O���pJ���C%�5�f`""�o4�n1��!��]�vp���Z���8�]W3���QID<�xh��w���o)e���[���,s@�A�iQ�_���K��"s�YM�Y'T�d#��������8IY��^G�����HM���g#����8IK�=\�okI��}�a]���\]$ZP�^T����.}Ce����h�A��D��iO]|����6m�$}��\�����="4����#���\3��1���2�G3P���es]<$�f:�O��9|����e��w;VdF�5���������l�U�G��;��$����1WJ"R���{��8�+M�p�4�fg���,�����_�xP������b&�$�����H�,w2)�s�DQ��_#�aH*�uG��@\��h�`M�b���	VI�S�����;#88��~��c��(@� ��<���I����;1����%��Z���i,����+���7���-��H����Y��w$�����\����1{"���%���{�O�I�.��FY��i����m��h4Lu�**g@�_�m�dF�	�g7>�y���}$Y[L��
�[_�<�m��r\<5�3��D�!�u�������OH�Ht�����<���s���#������2�,�@7��$�3j8`��
N�i�B_�t1�b��;����*E�y�Y��G�H�n���+�u����N(k�v��������5^?����Dh����JO]y\~F�n>`�H�}Ep������m���*�P�!�������9����)
���|��7�w���d����L�����7��M�@E%a��'���DT����wyVl���n��\��SO#ZK�d�>�mj���t-�,�-Z]��Q�3;��f�&b�s E�r�)Ck����h$"�{�e�`�h���J��d.����8(���)8,�&S�G
l.a"��H����x���fN���k	�����9�I�U��Ne���.�Zo���_���7ui$(�9L1��w�T����n�e��'U�xnu��		���������L6X�g�*�]�p[�gF������\k�	��W�+:
j�H�N���!���Z$Y�����H|V*�����f*�9�M���5jtBj|��z��zGd�4!��';n�R�6MH@;�4�
��g��a�QzQ�f$�#�9����c{�H�{$�f��u�3�E�������{h
���J�/�����d�E&�/�������"6"����;x
�|�iN��fX�=������� �������I���md���~j�m��{����X=")��gu��3�����zDx� '~���aOH�����s����!���HZ�g�$6�.|��]i�S%Uw�����uY���R������w��o��n3��m�wd����,�������2;��l�bUt�
��)u�U��F'-,bu1e�n���q�}��5i��,�����j�n5�b_S�
�l�C���#d
M��*k'���sG�k������b"EA�5:��o���mrF���hl�O��Q�m���;�0��	JG�z#,���3�5����Yf@����MO�U""�J)�����3,#	�2��A��� �EvH�m���!.�q�0�X9����
;�sf���i���Q��_m����	i�J0��\}r�w�b|FmFRg6[�e=ai�F"���i��?����;O��r��nbE���x���M2�l��#��P����o��;	8������"f������g���DT�q7� {���@Q�P��m*���O.�����P�F���\�8y��LD��4]��r�Q� %P�E\M�-�a�(��F����b5w�F�8�	�a�6���R!���tb�����T���f@z
���%��v��D�s��n�C9�T��g�^96�yT���T0������!����a��[V��s����7���|�H�}�w
8�{A����I�6��t�?�S�=�t�V�=�H��	���F�0 ����
|�������g`�D�1����	D�gi�����s� C�=��JI2�=���G����zz..��9\��|&SQ
�kW���H�a�1������=��;>GG/���h����c��L�ZNV�XE�/=S��H����,���J����� ��O5rFPG�+	���$�<z�g������f#�������.Du��d~�i�V=���Q�P���UX�QtQ�n�
'���;�)	���1=��������\�� �6���e(3R�~������C�`�&�a���$]���6����j� `�'���d���L�>��}Q�!�c8� �},<�K.O�%W,�_�����k�#y��]���5�<�Vbz��g!"�G����_���7-��[�{��J����8��^��`�a=�/L=�����n���Z,�1�j�j$���w�-���
}$*2����0isp��LD~|^�?�7V�/(�a��w��%��rp*.�T��f���	�vd�x��?�D���S��v��S�f��F%L����-/�X�2�/>3��A������H�C^��r`M������4��.L�)v�\�z��%=�K�����'� �&��nr��z�-�;�O�}fc�� tF,�5��6'h��������Y���VS%�P{q�\���Y7s��G0�P����p�'7��Dd�����`z�����T��G8�C�o��6��BYuQ����,�.&�Gm8��kR����������,nR�_�)��p���=�9p�?�������b;#y��9�Yi<eAlT���D�����`J,�,�����--^�����	59���R������8��'�%�NC�}�FTgQ����j�T�a���?��y3"46��*-�t�����b�7Kv$��M���l���_������	XW��v~��l����E�`$�#�?�����H����Y_�_'HMHe��Q�=�i ���������������X�� ���WQ�-��;���g$�x�:����BK��m���o����s�����d�	��7{��+Zy�W(�o��N�^���������An����7~A��*
��EY�&[���n$Q�cMK�����rc�YH��N��V��0z�#4K�b�S�F�����63;��-&F�AG�� M�%y��;�&"��e9��>9:/WK{e�X'�~�������X,���&2b"c��plQ	v��Ew�000�$8�Yk!%��1/�����(�����5�Z����2�EO���>#�T��T�v�����ea�J���n{,e����H�*�~��Vx]�$�l"�n#�����x7d����?-�o�	j�vY���V�)�c�4�n1�$�a3�v�x��]�����$���O��G�f}V�������z��`A�(���*En�����<�a�c����������������9�!�����xeA�4���hR��3r��FZ[�3L��t���H�ua��"�-��!�;2F^<�����^.d:��S�Z������
�����R���������r����P����n�y!8���X&>��#h���Y�g!����t[6Ih}BI����Mu���g@>1�OY�~�}���������C�y|��?��[��Q�LB����f�)�Z�	A�5��tm�������|���Y�6_1�4~6Fd�/T���A�@>	��Z1���4�A���b@���bU��b���#aVML��o�xYf�2#���7�A��T
�~�`�M��~�"R1�T���N���~{���\����g!!�hN�,����'D�[<����w:�P�,�:D��$�����DR�����������w���>/9� Z��%�v��C�Y�)�PCf��	dQ�(�����s�3A�EY�f�E��GT���+t;���-����
O| �5Lh{VMR��@W�:��?�+&xW�j�"�����6�h�Y��_A���6$������1gj�~&n�E������@����J[��3H	���RQwi�U'&Lf���g&�-�)3�b^�����>�d,:��w��i�=��,�KF�����n�=�=]��yfP�^����@�(
���)Hro4�H�����A���3�-O��gA�H2��|R��[V.
�6|�������s�L�Z�������-(,�?l~�j;�b������2��������82���+�z?O/�c��+����NW���f���]P�z�}o<�������2���5M3�OD����&�>������\ \ly.�*�!�����F����>�{Q��1o�8i���mY�va��c����L �J7������}O�;���a��g��L����o�F=2i���H#����.��y<y��*r��,����|��n�S�������������	`L�6�v�8'�<�'4��sQ
Q	��������_���q������,(���/U�����p�g�so,�Eq��O*��u�{����[Mox�����VE���ys���</����w`�~�Q���
L���C���+'d�GKD���3���������a	�gE�������M,���mQ�(O���L/�@�s����JuA}C��!)����*tX/LS=�A�l�l?��������1:���.�q�������F�J��l�V��#����<�jr���:Sr�t�Ec��!
\�����l�U�t��5@XHdY�������Cl$��#S7��z �����0��/�t�a2|��~����dCV!m�/w�4����C�����i �����f��D�������r��6�W�?��e��]���)�d�TW�o��7�N�A�;��	�4�����7i��g���*EQ�J�����}G���e�~s��	�F��'$U������bn<�w!��)&k��|fd��9�v��'n�;\����mN��V��	
���'NX�������;8Tg��ET���`���E������ln��s��r&}��<���W$*��� �j��-(�T%7���0�JHLk��
��w�}"�h�{�I���O3:�?m���*��`���oj�Vh7%O��+�F]�sR�	%`����`<�"���y��hju�K"*q�)���{�'�s����z8;���KIj�6�pN�;>��L�x	�����yp���B??���
��������,&��������L���A.���kT�������O�M����.���A6�9Z�`k�TH���5��E"2�[������f��YB�H�rU��T�v����h�E�4��]]�7�,�Hq���B#���$c��,,����vZpB�����8E�<��>1o�}�6�~f�U��R�m��H�hh��'/�+\t!��L�,[����l3�~��H�
:N���;��5e�,����^�������[r �d4���-���Q9E#)����h���]�,:I�`�<{x���y~5T�32�"�Q�\�a�L��{Xp
[��m�W�X���s���;�8����Z�j���{�p���an���-��C�gE��SD��j��JQZ~�%@��a\:�A���a�	�D������r���Q9�/��
%����=+$#s\;��e�"=B
�������7�yiI���DBp+
`����v�2	m��Y��w���IB
$���AP���1i"���z�Hc��;w4-h8����������������,m���bBd�Ba�YD��LH[b]�����Au��\�w"�s��%���r��3sA�
��S]k6���w$�8� ������>f"
���~��K�M� ��������	q�Hd��h!���I���L��I�r%X������J����}K�����)���>�O�I�����x��_,�f��Q��=KllY��	�	P���V1��6 e"�U>xf�Hr�AIM��D��,��/�a+qu��	C�7j�T��Q�"��	��f��r[�G}�L��c&�]=�����d"�=!#h�p�fb�wF�_�qf�h&��w=jyA���J��f5V k��r�4�����Oa�?j��J�]�+��?���_~3n�
�G���YH��v]?���vM*��N?�>��d�cK�aX�a����i��n���Se��S5���g!��,�o<��� W����F�n}l�2���QU5
��z�����M+)�h�T
(������U"���f��q��{���|�=>�k\�|4�03Gbt�����3�ET�I�~��-��u����g�(V����[B�����.����+e��>�|o����,�*���b'm�P�N���z���������\"���i�74�����lyo����M5�r���e-��O�4GE��G��B��+
�o��K�<��(���{T���>.6V�Y�4�v��Y�A]�B������`��c�\A(��6o���Fxd&��4�M����
C�-�1���S#_��vA>��zv�1�.J���]��A��������a"���	�=�X�����v������,�"xW�����6���d��^F�����lu��U��:E�e
Fa��8*,H�)s��q���	��]�ee�tn��'��%63+	�.�
�,�V=�}n����b������`f�������e"q)��u�=�)�4�n!���_��Yd�$���Aym�xR��%U�s��y�"kNd-�S���+YFd)2gD>�9#��w����������/����|����������d�f�3?���N���1��L�C��A���~���C��[n��:p�����Vd���4v����;�������N�#h
���!c9$q�x���@��c�0��I�;�#F^��D���!K��KF���j&���(h��S�Vz�2���G?��]v��3B=��n��(-4^��"O���T9Wq"������@:���X���&�4�t4�����,��q���37@gJ�	
 ��\�T#�r���w!C�������rg��L���B������r������A������d�'�C5G���^E��L��~r��yp&��U������"0K���vv�^�����t��`�}�X"��?7.�M����B�,K$RW�f�K=��h��B�u�xN�h%�V
T��E��I���rRw�[��9m�$�hFy���!�l{j0�7��;:����@�a��,�/����+������H+������2X��v��v�hE�������Z��w�{$����������F����q�z������+3����j�hK1f:5�iAC^�hB'd����2�������_��=��V��Me0�G2�y0���fB�:�L������*p+:�:�?~�`Fg4�������Y��O����`����Q���nE�u8��	�[:[���Q�`Hy2���/��v��nH3���M`Jy�N4�
�KK���/��Y�G�E�x����Y���$z�3���W4��r���!�#&�bD�:�h������=��*{tOo�
�����l-XV���N(5�7O�
��'���z��S��bKB���'~���5R�:���>��{��dX��N=T����K�\rw3Et*!��C�|���������`_�J|�
p=�N���h]�-+����|����5#�����z����ND^s���F�"X���@���U�����w:!������s�w:��'�U6Z��h�X�m5���/�L��rf���T��<�L$���++���z��X3^>��L�$��I��,�Y��/23TfY�6�0�B	 A��/6i'$�)w�c�9&������������� �������7g��t�M{��L�z�5�]���yB���,�hof��n�� *-��S��^L~2��bOk$4�;S/LDR��Z�����H$����:hK�*d"C���N~�%�_����#1�gE����T,��j���$$��o]{����|#�r�)�� yWt
H�]��[���Md��|��Wm����;xyL�D ���?��YL����t��X�JES7������SKY�D�g"=���
�Z:�ZI$W�Hx���s��e Y:�C���F"����@�i���wEj��\�]������rG�Y�D
�����<�����vll;u��]�pq���Y�B�mS�C���k"I�MPup����%�>�)����H-1I<~�h�Fno��MS��h�vBnI6�@�p��e2ga�I��	�A�&���i��%����p�M�3���N��Fxx�'0�I_�ro�&r��o�?��$+�5�'�e�\e�lWe>��$;��/v!9H�@�f����#���:��{2���#�N���G�l5��v�l�|�q�m�=���WM��
���XK�${{���s�y���A�A*�����!�a'��\� ���vf�
?�F<��"O��S�*��d���vQ�@�?��{���T��%�����������en;��+�4���
��!D4%��/]ht��}���jBX��~��h���,qq_�y&��Y�4<����VV��Y�db��>:����$w���0�s�GZQ	�I�4���'4��tw�����mM��Z���0��\�������j5	�����4�bF������FL����I����N^c��#�G���{�4�f"��w�x��x��A����Nc����Zv]����4�=Y$�"��?N@?�{��H$�$
�q�h��
k������#��3rU�T=���~Go�T���� IhSC�)���@��_jk�{2�~��~�i	�}A##V��L�����!���z�EO'��IRu��f��D2�<��b�R�b���3��m�t!������7��&1�(?�S��, �M'����q���D���������e1��4M��
U��</K���B�,�[:���e2d��*D�w�XBIF�U�����.��C-�b���^t�]%�!���|��9Tm��D�f8��I�Z��4�������p|��!�I(���#������:g$"���3���T�W�;y��vs;:Y���e9Xb~�Vc{6�b��L�\�`//a�.Y,T}v� �p�nYL����/ul��0����f�dM�������6�m=�ksY��		2A.�%�}P����.�|&�*����$A��b���&�
�e�?��n}^r]i��������y��3z�!T`�������y����&@e^���rUS�[�1�z�MT��K�k�Z�#\e3r,C�bAAm����k[���7�W�f��2B�tQ.������L�������������|ht�����Z����j�z2^�	
���n�H]�S\>ot
��?�����"��.YqI"<�G��6����2�����<]"$*���*^x|u�w&�K�}��e�W$�"���*�z.	h�=��ej�
pE��D��& ��{Hk��"]��3�J��o8��]�����f�.���.��I�4q��7�|p	
p���o��xr��wGn�6f�{t$�����w]����v�	��f����������v��}h���H��0U��-��W'$@�Pt@�g&a�:��1�$}U���Tb�Y@������oq<}t�a!!�{��P-N�����./�]}1��(JOmY�������]��Y �]��n�a6��"_24��L�l&]@��I��RBD���-b�2�*�2��jT����A�k�h�Y������3�U�ZI_����}���vB	�n;��0{��|�g����p���[��/���}���6��w]���ETB��v��|��^}c��|c���$���Ua}�	�gs�#Y�Ky���}Mu�uj�E������$�VzaS$r���m��ggT�������	�84��F��(�a�&�8�v&C�����"~��wb���mL��e6�l���s���6����m��I�c���?�W�����G���>.�����r�c�}*��j�D���l5�v�Tr,0���"������������y��58�\����T`�l�%!���:���@[
lS�m*p���\S�k.p�����!K���M�5��}�������#(��������G�K�;���cO��>�R��������\�>��n��K�'���\"?�������c���% ��QT%��,u~��������u�N9Y����c�����=�f	9*����X`��#hd~�T^4bK
M1�=k|�5�nY%U��a����6��1b�7���l�`	4�(J�K	6X���<N�6n���K���G�P�F�<T�6t��"���#��97��,a�G.B�})��6��#^��<b�m-�M%��������<h��R�����H6B�c�������t�l��rl���k��rk���j��?:5��?�4��?�4��?y4��?94��?�3��?�3��?y3������|��\���<�������������7���������n��=������'�%�1��8�7��������s��\������e�%�1^�>�D}��!\��m�n���nKtc�D~��^M�R�g�#�e�Y��'#	x���������S<���d����Qa�����D
~���m@��YP�d�mJ��{W4����+�GT��+��A>�t&�X��H�&�\�K;~��{����[�#���%��.\"�#i�1�E����3��5w"x[�J�B
��yB1��H�����6���!r1�7�z��N((�(�C��,m�P��q	<=v$�<F�t��oz���������6.7�[7�,	@e$�;��3���=��Fd�0�WIIE$����%2n�}iB����h�j�k!!�rA�2�o��H�RM|	J* ��]|���mB���ONg�`�zE���
[
������G�m&15��B���
6�C��+��i�V�;x�+ *�\�7|��&� ?��*�p���`2*���i���e4tSV}pG��=4�&�y�:�ZF��L(���O�Nm
{l����j!�9�����>�?��:���b����h#3��DTk�%�+e�{���z�^{�}7_Py0�����-R0����k�Y�4��e9li,����|�H���<B�,���K�F�k7\d��/�\����i�w$Q��L����Q��c�����-Qu��H��n2z��qy��z+y�fW�q�3Hq�@�*Dx��H?D������JN^�\#��o�w=d�+�V/�#$C0C���q��w!C�p8���p��}�X��'�����k������6���dp��2����'���h@�
���������f"v����-���P��	�	���k+I���h.J�Y6������|��o��I� b�O��>A��ce"%���g�^yo\�[��
�Q�����^i:T��{�6
��Lz��������*�q.(��
��Z"�$��K�{�T�s�=H<9����]z��"	vl��7�x�����Y�����g�,p�Il��R������N-"�q���3gz�'O_�7�)W�|XP�|�8�h�N���`��7:�H�sk\��L�y7 �������u���������?�j�p��[V&�UN��o�����	�I��%���yH���@���~������E��6�K89������_C
<m�� bg-?6^%��<�q=�$��]�����N�=����3�����f�=+J��X�
�� �GT�D�X$9�VG�|�{rF(�'�� *;�o�w�E��H��=�w$�{3�t��
 2M�d|�,-`&��`d �j�
u����!x���U��Z���,�L"mX>�c�u!�q=�p�B��$�0��[��=L���(�i���{��yli{t���lP%(>��}/S�Q*�'p�,��%���m������C�k��y�B<c��'���md��s����`6�.�P�;HgP[%	�������9�	!�#��*L��9�$�C��#��l�I@zq�8z���}����5�
��0�,�����7j[������a��,�E�B�-���Ay��3�OW�f�f�n/u[<�d��e������%l!�em��	�������58��*��X����0 ���a���.D��
X5�����	�?���������Q|Ds7�x2��<hD��P�E����SN����p����2B'��G�,�����"�h6e��jA�J�OH��S�A.6��"\1Y��+rGF��t_���(��8�|�4V�%��/��hL`W�qZ�aB2p�;B������1�i�u�5����v9<"����,��{���N�+B���/e�9-2�.��)e����G���wI��F�s�*Qq�
�mN>�m�c$�@������X�
�zl��?{dPw�d�Z�$j3�+� 9s�jb��������D������Le&��/fB2{ �Q�����H��7���hsV�l�*��6E����H"�j+	a0���@r�zf �y>+����v=�@��PD?WY����o	S�S� �d�wE����H��?�mk$�2dm}����VFx���U�~rx�����\�������>�����| xG���m1
�b����L�k!�=���{	) �TC/bU��� lM������k�� ��F�px^t�;��N�u�����+:hKn#�KF!�w#`�z���H7|�����%��8�R��3�~�h}{�
��v��N��z���Pi5/	������9���6����&�4Hg�Q�t�@V��@<l��l��)�n���f{�I�3*B����=c���"zf���Jx#��v����$C�<d	#'���*X>���R��ss�^��V�g����h�����7��X�`tx�v�zx�g�v�<8E
�T�+j?��@P _����7\�Cd�d���:����D����������3q��p�&�9�DF�����P��g�~bIT�Ik��54#�!�Qi����x�c"�=m��,Q<�E��@Pq6�,BH�A�5�8� #,nJ5�v�'R���-�q`���G�G��:;kKJG��h43^@"q�A����ay�x[r����2�!c����t������*a�����E;�������L'%�,f���=��_��}g�__������K���_���}��D�M���i���������e�Fw~����d<�~�h������������3�'h���}A�o���]%3n0&]n�w7����V�>���Q_��V[����m2br��I���-��waQ%`�g����h����.�L�D�4(���3�h�'2���������~g$2�r�\�-����z��}�=�f�$���iw�,���,g�������O������]���h��y���mo"�����'��N�����������/�A�azf����
{��S�.������3�h�'��f}�_�����z���}0woMh����+�(YV��)������������JU�tV��h�������D~�&c��v.�$��tj/9T�3�<�����<�f���X�1Vyz!�e�������|H�/3�$k5\��D�� �^1�&������G;t�z4�9��.�o�:��p% �ee	<W�m��J������hx]]P���6��>3���U��P�>bFx�C���-��oh�	���w����q�/(�[Y�+�j���t���u��������6�	Q����FaY�!�%	y#���r��
1��|8R@
�]��������x���N�+������729����$��6����VR��M����TV}��F#���^�������2�������@��L��|b�l�5' ��/����M�.��3�������/���������1�7!�m��h3N����"
�`�����������9���+B���_�iG�����
Z���W�H:�M�+�6<u��o��]�X����u'�L �+����.��'�O@����E������0t<Q�}{��8��^c�8�����8��?��g��������
����������U�S���p�>+�c3�j�|�,J��>�,.b�E�Uf4d�4'��I7��GQq�
���`����������S8%r�������m��MI]��:T9���kNwg����F�&6��#��==$��d"C�}���}���$��o�H�N�n�C�B�r~=���J�|eF0l��J:_�Y2_���|eF`E���Esb���CM��7�l%#��/Of+p�2����Vm����H�L�X�4Y��a���)��2�M�/m��[���[�F�����8���h�w�2-/��+�?%b�b�f4�4�D��j��]F?�������qb���
��i!|��#U��(��mm� ^F"oG@GC�$�A��AL�p����t&�!�dh�g_y��H�!����}i������[����P��@4�7�!z�����62���
O��:#Q��Jb����D�j���wWua�T�Hh��{�=��Q���{Zo"�f��Ycx3��������6
1��	x�,��@��	A_5/s�/�������MJ�}��SfH�����������Q��*�YaK3����s������b����%~?����n���#����\������a
�5;�2!�V�@m��C�H�{&���t������r��Wy���Q��?�Y���_vz��]d�0+���k<Y�K�=z���V�-�_��Xj�#
��G��]��Q$��A��.��`F��F7�Q$0�Dg�'����X�vt�����A/}�mV&�����gf�h���.��
O���;�m<�w���o@x�{�{�u�	���tN3���p"�q������b�_u�������"
.��������w�1I��/(Y�����+9�Q�	� ������
��Dva���������Gx�$��	��X���m��V+���B�+C��10I����R�*C|�T�&���O��1�.�g5[�6Q_P�]�9z*��G�pe_R1�W
�+�V��,L"�����E��p3X��zm��N
Vb1k'�~1��������j����	�qE��V~W�.��NE����M�fW����T��EMC���' i����9�����Fz����P���f#��,��bN�������{�[Y�vu��)hb����{��~�����6C�N�����Cp6
�O!��Ct������y���>��h&l����L�^4+�3~��x����n���r��'��qx�I���qj����'���Kv54����Y� �*���q3��(�zE��T�ahT�Y����/Q�X��f���@���]v��]t����0���i�qb��i�����
�8m����������E�#��a^����-��h[k�c����N�9u5��H�W�+	!����w�U�KL���w:��=�]+���I��lo9b��+��R��C�}������,H"�u���<pV&���Fd�q��.��LH�m��	9��������b|�<Cg,�2!��n9K
�w�H7#<��e�8f�~W��F26�n�����J�7�m�O��|�����oe����!���(��k��bg\5���_�2Ms<#�-C����2J����K�;�`�����.�-1?M*�"A��>>��}�2!�%���vt�M��&A}gX~d�T�UB�z��E.��0���Alw�|%��[��l��E���+;9�:q���/��q(�/c��8���V �&6���%L������3���O�p�����|c�_�2��H�w�		���<�!�D��2+�7g�n���#�S?g�6}	������&q�^�����@y��=��V�����-7��@SN�Z��^��������GKv�Fb����/�u���|e�f��e$�,���F�R�*ZY����[EZXI�G�U~�Z�p������u24Z�#�
���y	;H�	�H^��7�_�.T3���J�b-z���h�e�a&���$J�{���%��*��q�b�x�Az���&d���iK��j�����	���%a7y�7�A���	����)[�����"@
y����gB�17�h��k�j^g����&��O�V&��	����E������k�H��P{zBD7�WU�<w����	�����y#�R[�[Y�l�T�4�kV�Y�;�0�'�{N9Yv��	e��T����B�J�d��z�TT���]H��,�M�<��W����u�z����7WoO��l-�|xT_Y�����N����nB_@�xF,�2�z;!�R,�^���"yPY5��%�hVeH^ce*&}2��7�1tBx���y��B$��!�P�N��6�����p����[��M~"2?]���zOH���T%���x,���F���xTwO;����{���Rt�@�_�^�;i����?]D�!�^#�AYF�wa���������2*PO���t���F�vB��FC"�vTtvi��/���r�� 8����Y������ ������;L��C������$�2�����Ddl��p���;yaxaW�~�tm�9_"?.C3WT��u"\$+c�ff��aO9�����k�_�*�8�xE'&
#1���p><tF���J09�����U�����?;O
_Y$���z��V�w� p�|��:��!2�$��NW� ���D�C/oh	�1�S�L��b1����18	*������c�����F�Ru�vUD��Y�P�
Rr+�b�?F�Vv��K	�/^�
�nS���*�4E���#��BL�p�r��a�#�.&��+���B�m8�IYq�6jl�����9���2C+��k�7~��K/L�_O��w����Z�������jTo��X�M�����{��{��9B5�m;�]G�����>34�Z��Z�G���b�B"��s���5T����gGc����}fPx��'>���%�W0!(�����d�9F���������N�<��8���)
�:�"9�{���4�!�n����Lm��:�P��� U������js�p�u�q*T��I���X �i�T��A�
��u�����)AFUg-�Y1�;�l�gBp���k���cy��q��������wel�1�I�m�s�vYD��-���
�:��"�u ����F�y���;?�����wA|��-\���nhD��.��p�e��er\:��8��c-[gcn:�<yWV���Mo�OQ�9O��5��sE��<�<5����*��_�h���+y�E	�s�.xk����W�-�>���i����F�wEU�=.c�3n{U��6YR:��m
���X�C�/�l�T�����Nq�������t�#����|�\����<��O��H��(��7��$�������GLy�������z��g �&p��,4�!���I�K9������N�	�w���q��0�f1z���=R2+�����;��GE�'Gw!�I��br��������0��/!<����	a������i����~����v�S���
���dt�)0�\!��\��AH������[~t�,��H��=d��e�v0!H��O5d�94H�_�6E��LDgb��/��y!M���kc�)��M[(����k�4@��?�GpzS��������B^���]j���]�z/L�<�Y����8��r�B���9nmS,l�V��r��0��BF@A�$�KN�K5��,���@E��'�v��s�0�M,�~�Su7� ����@���@��y($0���9�����]P��S�UX�������>+*�������j�]Q|tL$�%���rfD_����c�65T��BHB�F��)���YJWc&3��sM���#]�]X��������2��	��d��&�������� ���xY���}�=�1\�|r���.����DRi��$�����n|���H���x"���R�O���0�H�%��������wE��f�]v�n�W�P+M�g����D��nQ�	����2#gP&�d�����"���$�k\�����K�oq�L6�@��sn�w���]!]1ypS����>!�G�H>�����8,�>L����G���!���%W��l�OF��C	�Ui�����"����Xv�1��G��b����Il��
�������>9�P��&7�O1���DE��t���C��6��?��H�������jp�{uF#ObsY����6)D=�
An��~bB��."����������#j(�_���%L��|Mj��O�����i������g�y��PS����W�4;�M�&���P���G�Ac1	��NS���� ��I������;��lFr<���s����udB0�6
�q�j�'L�#�z=^B�YU�"�S'���j�<�,3������A�u����:gT@��Eg2�A����SF������������|�,E��P�3��$Z��Eb��b3E�<1�����
n��	�`Dt�/��aN�������K�	$j���K�J
�T�4O(5���$G�0_��P�����;!x0����u�#0�z����LC���q!�		��s0��Y�`�u��
����n���C2���a�bn�5eg4�CM�l�/F��a�ZF
���:Yfk�XkO�j�o����-����[����c��HTaT��q���6���D�|�t��2'�Z������K������q8��OL���qx5s��g��Hv�|�����
��q�UAr���,(�\����j-,�D�s�Ru{R��0��,O�'�3N�3�b�~I0F��H��eB�������V��la�9LD��H�X�"�9nd���7�C���/�f�T�8TM�3A��8��%:g��"9u�'}�n�����<0(0g}I�3S�t�dyk��)f��A!����}+�f�C�i ���}R�-���LP���<b9�Hp��������������D��H�	�b�	&r���H6H�	��(�����D��V:��Q7w���sAe����s�q{����2�����}�iU�L��'����f4�0�0LHF\���&�D>��x4&��$g���ln4
�g;���,L�5����/��7~%���3Z���L3�i��3�7\Q��!7�N�p�S@�6�+7�,�|�Se�������
����M���m���
"{��_`T�S�cR�<��N��_��Cq�Q7-?l@�/��@L	.z^x�[�)���P���h���s����=��w�Qo6��Rp2�0P��~�V����t���.��*(�q�%&�������`��O�
A865�I�n����q���H�Y�����f|:>��&N\��I�b�����^A������tU���u`�R����9���*\�Y���k�a��t�U�PDx��O�������;�:��F�X��D��g��&�!�H:��1C�T7ZS�4�4�t��K*t���5r��^~b���jy�Y�g�H@?�d����	4jg�G�����Z��7����A��;�����i�+��k�����a.C�e����^�<6�F�e���NT��t���wag�gE����;�y5.���M3�~��>����>�e������t;������������-�ZP��eXY��B$1Em���il�
���^�W��)�����b������<� r�/��s9�_�dg�a��;��L�L�/�W?���������we|6Yp�Zk���/�5�@��H��+�	1�AvFo�������_�������Jc����c��l�2a��!.S#\p��9����`{�sL&�{I������g0%�M������jgG���Y�M�'����gr�I�#P�L h7�A��YX�o��9�vg��kg|�c��OR��x��G��zO��{�~w���	q�T�F��������~7������!�����s�6�3���=n�����o�
�=��o���u��@���b�,��k|��s�n��;���M�uu.v���%�p����Nr�U�k��
[��i�ye������"��6vW1$W�F;��W��za��YE�D7�-�L�����\���AP��U[�s�:h�yW��7C}�TS ����� ��?a�n����g!A�e����v�4N������N���~<?J�X�5�``~�&F�l:��4�L��3�j�vR�]]|�����U[��f���j
W�� ��7��jdb�����&����f���|���zJ	
������-�E�h��Y�Xu�N��_��a�~We���"���Y-����	����&�����������<��Yo�'��)U�8�d���u�%D�%��L% �������5�p
% ���K�,9��t�h���$�w>����������)��|��=��������������w��2�mg����w$!��S�~r+r�Y��%�6�l%�6�x��������=�MW���u��e){�Ec)�������k���A��Q�?��_R�s���t?�9e���������(RP
}|�;v��G?�_�B������m?�����o���]���g���sv�.�Z���J�� �H���o?+�ktu9��5��32��i�>��|� e �����>�n����u��v89hW��@'��E2F����W(�X���[��~`iA/�r��W�����t�o5����3`��d9GHc+�/�d�8��a���/]�
��w��RBD>�G��;7a�P3�S�9q��c��H�~����nD?�oG���[\&���|����Oh���)����2��&6��7gz������?$�Q,2e��I4�6��[w��"�c���g2d9�E�������(j��0�pk�'G������u�d�`9&4r/�{����E����h���h�~;uI�����LVS�U�����mm�`���G�	
���~r�|�Q�%/����:�+�R��DE%^���7���I���n�m������h6(���I?�66���F��bU
�����������yX�1�S�k&�-��� ]H�g ���*�g�d9"���y@���h�P�U�x�C���w�qX\��HB\X;N��.(�����zmz����?t����KM>1�^�<�����p�M;�9����(�6RJ�������L�9�{��c'K�����C�h���L��r��Q�4��,�A��'��r��k
�!�R��h9)�����G2�|"����YphUk2�vR�����M��"�f��4#r�*t9�Q���>��^�����3��\�
�u���Q$"���!�J��lW<��C�������^��P'9v>42�S�D�3��@� ���Z���B���od���`����`�M����zj��S7LnYYt�.~�,����96�q����0�~]<K��M�zbI����H4!���6�L�2��~���F'"UK���D|�'�B��$��B�r<��q�� �L��6�v���P�@hk�
�>c��r\�\We\�BWb#�	c�h"E��kp'����	^���m�z�xH"��E����iv��B�t�����LF#�"��yB�|<��6/$1�o[zwF����Bq�5�z�s�6�@l�0�j�s��s.�
��'�a�� ��yi���������
�"�<�U������a�X}S)!A�'���(�����ho[����)��&2d|1	��n
�f"59���s�0�*�m@"_=�8��'f3������h�W=����D�a��������x���2�\�7�o������
���.f�v�L��8�����$8p�I�w���y���k���Pb�W�2�pF\��#��z��F^�"~q����Pw���wa�s������H�u��<=�����x��� �n�!�,��|2G�.K��/^e�/G�r\N�QC2�,(1�w�{&`"Q[T��
�Q�	7���r0wBcv�	���a�1z��dL]�����D��N5����Y3P�5$[??eFQ�n������9Z�
f�#�i�B�2]>�������&��y��>F�h�]�=Wp�,y�P�K�4n���I��?~x(����Q��T��Ko�]Y\~F����~7��I�+w�F8�(�6��J�D_h���y6nN�f4
��L���x���������b�k).848s��D�P&�Nl����LD��:=~�:�a���������=7E����(�O.&6J�vFC�.(z#�����fn�a ��������c=�h"C����	�^���R��k	�f���A��L��q��4�X�@�&"�{��U�by����!�k1����:�	��nN����)�YG���N8�/j���DP�3-1��@��D�ln@�7kqdm<+>�	
��#�}��L6X���Je�%�nz�P��&Iv��Z��h&��ZhVN���tf������E����82���J92=�-�LE������)6����LMa�}tn�n\@��uMbm�#![�T�����Z�����3��0���>�0"R#6����y�Y;-��V,�!��0#f�m���R�|��������o�5�/M�I��I��H�_���S`��Q{S����'":h��;�
���ln����NK��c$�	����d������2`k���':^g4*���Mo�
9Ml@jc3�^ia�y<����0������)��z&C�+��m������[��+��T�����d��udfvFR�-����mv&Cu�S��!s���!��
;����#�� ��zm��m��w��U5}�������D�)�aZ���V[L�N[��"�\LVS&p�)�5��9r@��V���$Kh��W�:��4O�F�.��y�#f"E@�=��8�.�q
rFX���m�)�;$���Z,�f����>�>�������-���f>��ZX�B��n���H#�ED�h���e".�4�����_f4������9���!!����?<�W�}��5������h�_W����	��vF�s�0�������6��2l�h!S6�!���D8[��~���'O��� ��M/��Mh��X������@V�[\�*>Xb1����C��G1+��%.&��QN!���t"��Q��v����k(H�k���U���|c�4�4�����,��3lf2d]N��&_<~�8�E��)�=� ������j]��e2dJ��!���,�~
`��1�6��.���N�
��MSW}-����	D:�s����C��T�������3<<�eA4*�.S�[��!�����O�-+����m{M;�DD>t&�1��"� ���6:�3��P4�
F�K0����R�?}\HH��>5�M��fu��������D��"�	���}�%=�G&&#��L��
u�������$����>��qK���R��V��"��]5/bB�V����!����7���{�KO���H�ki����Lz���AOI��"f��V��[?��DB�^c���V�^���Q��Z#}����;�����h<2��'rI}+.�/o#T�.�7�jwY���B�<�jE
�lxVa��E����7�l����~G�4�gE�W���z7���>�u������(3��C��exG�	T��B���w_��"��x|Yt<��+����/����p68�"��t_�v}��;��3/�����1���B�l��Vf�a��h�M�b�$�������
�	�Y�����o���J��7-�{������N(���fL����7��������Fu;�.�(J���gzA�i�N�!�BGODD����X�9t��D��m]�?b7w��(�[{��������rr:\����+@������7/�d�]������t�o��YT��0i
��O^�a�D\���}����n�����=|��=]3������lL3?3Q&�j����U�FT�X�t�\��=�u����H�n�_=P+a��|J��7���x��r�adG��9��SE39!i�0��k�J#������6��0s��G0yQ,r������3�������CA��f�J�H����2<!��(+se��^&Uw`���K�6�����q��k����g [�A10�,�������;p��~�Q��563�`�2!aGg$v1��0!:Gc���[���!�F�Gpf�[C�<�af������J��R��#���	�U�����u���gb �@�S8&�4Y����>���.�EXXK���U�D�Q�����3�N)FKd�l9db\T�)����!���X$z,�V�c�N�W�����/�h�l��8���A�U��NH�n���R7�1���d<�n2�f����f�9neB�'������K�bfr�~��<����a� �$�h��sn���t�L�^Ru������j���:bC�������Q����3��������+�;�	l��x��:���N�@l@��']ZH�E�(*�R!3�'�������������T}v�y�9�<:<����QKi��c�Ty�+P�������7�������2���	�u9��as��h�c��
QX��y
U����R�] ��vB%�V�[k,�f_��+�`1D
I�]��"������X5�+Y��A��Y9iX����F���,����\jv��GmT�C�C/�|���Wi�_�e�@�28�.UO
t�=�0�����"��5~e�;"�
�����m�C����K���}c�n�������z/1���/�.�d�����/��3��}V�������B��4��=r����n���j�^���p
?���z��������.��H���#W�lzd��;#�32������,&R��e�����W��������Qd��Tm$�E������-�GR���=����q��?�YPq]�q�VL\
o��,����I@xB	������6�,$��U�n����(h���uWw���d�#���������G�wn����4�+/�tp�y�&���]��Ve�����Dx�E���	���A>eA�,8`��X�	�;����7$�^�)��B\7�Ft���'e��q\�0��X�aj��{[�&�vB	@�q����O����~�7�A�������,:���Q�	��V��&��������s��q��,������3���	����sM�(��3�x��Q�.�a'e�o'���;��x�8��Cs8��3K�Cf�D�����v��q`z���?5Y���lQ����2��u��`���i��_$�\���s=>�E����=9&����U�1�&��_�
���8�+�0�Z���i"�f����"�e�����F�a���]�9�Pfb�~�t����ps�!KZ�K��)�0�U*�>����7��C ��`�h����z!�J�]Q0�
b������c=K���G����0r�LbA	�$jP�^�*g�yj���99	����������J
�0�'s0_�������#y����j����Kc�[q_���83/ bM8U�/����Y�xt�������ug���vFPL�dnq���}W4��<�~]A�GP���NS�S�f�}}/�_���_<����TX�R�d����V3�OD�~��d

���\ ��y&�&��� �;�h~����>�s����\��I��E����dk����v2��8�a1�'���=.N�m��0'|�������E���Z}xY�p���D$;�8��n���,�M�������W�S�������wE2�@�`N;�#^=)�������Np6n�!*��B��b1E{�Z�L���������&�fB���q�BEI�D��[ J�����>�H��#�PA.6����gso5<���`~�fq�����p�������@Y����M��
�V	I��#�����b{i��3����B��������gE���������L-\nkp�����0?(�t�p�v�+�R�C��|B8ON�W$U����va���$�������.�����0���_P����K;�:0�E��fj��!lX��(e���g��Ue'uI�N&������!fS��5A��0[MWe1o���Bbz���R�.zL�%&}�����@>2�����DS�Ce�N�����7�."���\Y���J(��~���i��O�z�$������E��0<U�;G�����6W"q%8L�.~l�	�S��	�F����DP7<��C p�!����M1Y;���#s4��)��Z�}��iP1f�����q���>�
���'N�������;8Tg�*FT���`�0	�PgpA���n��s��w&}��<����$*��� �j���P��Kn��aN�������Fl^������F[����]H�T����i��Hd�P��%^(�S��B�)y"_�5����JL(��<�$��Q/5�L|�:92��'P�8��U�N�����aG�c����P3n����=�3�����g"���K`_w��F���xMB���v~(&���zu$�	{��ba�wm��.l���s��W�Q���9�?�6>�W?��<��9Z�`k�TH���5��E"2�[������f��YB�H�rU��T�v����h�E�4��]��7�,�Hq���B#��D�ea4�a��X(,"�j�{Y�"��M��p�v��C�P��3�Rn��q��)��
���]�4>�15d���@��D67�X��qW��,��-D]/�D�[EV��-�0�o|6�Qm��������h���]�,:I�����^�=�D��<������b�T"��~�:�!��\�F�9T�Q,���������;��
��=�iV[h���_���-�d,�����}V�x<EX��a�vF	H�V�4�J�0�=��n������]�{U����r�����@��	�R��)zXN86���6^V\;��e�"=B
��1���7��[%�C�'��]P;�����Ih���b�
#(����q����&����	#�1k$��;�tB�p2�a�e��d��2���rp������5gv��bK�k����Y8�K��~'�>����"��b ��;:�d"R�S]k6���w$�8� ������ef"
���~��K`M6#��������	q�Hd��h!�����_�MH�f|��Z1�	��yE��y�����i�mYv$Sv��7�O�I�nk��x�����A�l�0�_�g�����LM��^���!~�)	���3�F��Kj��;K6D-�wt�l�?!�W���0�{��M�<!.�{�����"0Wc�������q�����>����D��'d�Q�����:O(�K#E�����{�c�Td?��4���Y����������o�W~���jj��q�]�+��?�{�_~3n�
�n���YH��N]?���NM*��I?�>��d�c3��0,�0~	A��j�`2Cy���ax���=�,�E�����k������F�n�=13*>UU���'��������plR*���w�L�NHq$@Tr���|H1��4, _��U�H���bf���=��u��Pq&��B���VM�� �Y2���y��w��Ph�C�� r���f��v?�X-<��2�a:D�Y*$��o�NZ�P�N�LJ=i������b(���1:���l���ly�o����M5��i���e-�gU�4GE%\���(��|�����q�{"�o.�(���������M��-~V$M�]�q��gP��z9��,(X<�X7W���e������-8��sE�F�	����wl@t��X���L����Q�\�,(�{~wM�.Y�?�F_�����g&z�$c��~��2&��Q��Y�E��^��iqm$s�;�'b�,��K%�����|�u�$�������0#=�@��4�3�w������q+_�^b3������8�V=�}n����b������ ��������e"q)��U7��@i*�B�E�����IUY���V���K�Z��S6�adM�le~�6%���2K��}N�����&l�?�����������/?������n?��{����5�Y]F�k����J@N%�|�����Tr*q�\�����z���A������������$�����]��LR�8�������.d��4��������Y�O�y��y*�����d2Y�C��nN��26S���;?�m0N;+�FzW6��]/i�]���3BY��Q�hD�+��e%:�br�d2���G��,M�<��d&�B�.=�5]Z���d2Qq��D��!c`����>�p;����':#i�����|�h��LL���Q���~D��;J��;���<�4���6UP^[�U�m�2N<������gB�\��w��O�\�3�f`��U��8	M�DP>��a��(*��-�������hG}"��U��m.}��vX��D��"$o�w4�����k.�\���t���������	�t"*�-=����R�,��	Z0��ES:��k'(Bd���h����������`Mqi��L����$�uWkZL��4����>��|	J���vK5�t��)�P?�!�"��5����������
����UT�15��:�D-�%��k"��Y��(zW����o{��cw�Y�5���=��,�f�A�F����Fo��4�����)���gw���h����:�wM�5� �����nI3��]�DK�Pw��@�
n&�r%*�����7�	ASe�g�T�c��w3�G`M��$c�MAnK���m�P��[j��-u��1����g���A�.��	p����;���|����X4�b����y$�:I��{����<���Xvt��?+uFE`�fSL6eF��J���������&|w�����YM� =���5�n6���x=~D�j�v��6u����n��N��k�L�hW�4�����YE��hU�~�^�Y�P�hV'$���-$�E��MY�q|f��%�U����bGsQ�K���:����v�p5aT��n�YU����4mfU/����D���{Z���w����6�[g�jP;N�w�������v����f�O��0���I�[�	iZv���^����z������Y�5�{dH������3�2�f��~�@����[Db9��<���c[2�;(�[n{j����������,|P$�}������C�s"���$�hw���~a�U�!{��3N����� �C��Z~���ug����m6��
�"���o)]��.����$��cl��a�x�T������O������f$������+����b���,������D��3��j�HJ��Sm�~���~q]H�6a�Qd�`�1�w�y�;Q1
=P��=	M-?!�����P��:�}�Lx�Ld�6���������l��������\K�s�,���~��w���fjg%g��sx
�+2K������Zg�
��f?���*�(=f��=�p&�����8+z�W�0�|���|[����H�p��orcF��$�&���D�[�����|"0F	1whA��L`{�F�����0N]�&��W39D-{x[�TN����!r3!�������x�[����#�8���
�7����N�����������Z��e����������F�$���O"�U�P3!����;q�A����gF#
i��]�
�������	�4z�{��8&���]����e�����3xSm]�<�'�+����X�$���w�5�zFHq{�|��j�'�y�<��+����C,�[��c�R�/�c�v���B;�{���?#�t�s�������W%4�v�l�u`���H���/I���M�������pCg����Nh�ro�
� W�`����_����������&y3�����Wm�dc�����L���"��-��O�$KP>����)����hB#a#<7������$��e���M��	�"5��$��%�yp��i�;#i���]��d��[3�,l���������O��
��,����X�h&(��E�'Sf$�y��D��7�����5[������b�y\���<\�weRK�)�r�by��F{�K�i�Kmv�����v_���R7�����r�<2�y��J�0�r�x�����.��#��$G)�x
�ev${��/��'n��uh�V��eT$'�������NQ����������x!�dUb�UCy��@%����w������1I�]	#������4�����z#3xXN2I10��1$���W~Tn��_�@���i���8R�G�4���% N,O���}����j�^xWDP&r,���4���7uf`�'&����=Nd&T"������wM������>QiL��2@���[ML����LF����2��i�_�����j4j��O@;?�_P�#	
�T`(���m0����Gh����R��U.�t��I���q��]~#1W~|������*Y�-G�E���H�����Q�M�.��wb�c"���X�jK��eG���=���!�2h>��������Ixws
o{�j�����F����,aU�i�LF��Yd�������Q~��R���"�i��=��K��=LP�[�n�i��7������m���������(���%]^����O@��'�����c��;A{��z?}��v'�Z�����&��f���<9�,l��������r�v���b��lu����H��=z;�NN����T�c����O�,c�A�����j�ELk"������;�Bg�j��N�,�UL�R��{lHj��o��.2�/c��k��i��)�P���:GBBb�L (��Qk�f������9�Z�N���r;��p8|��g��l�A���!�����i�2������b��`�5J_�<`�>�	��L�'�)����%�!Ok����^��������-k"�7�L�[r,�]�����-	��p��Wp�inF'7
�HH�)[�������R!��9�f��VxO=����3;)��lLky��K��@T���eEal_�U�-7���<43�3��~������_��,B���V�r���RU�����'4nD5���8���<���H<�������.����*,����6����l��IH������(��7�Q%fd�
I��J��Y�?@y[���[=�iE��#&d��n�M&YF��u�����.������y�-�6��NzLGz
��)�w3C;�[��L���hXWw.��@&����'��G��7���79���^���=�~�W���Z�g�)��7�����.��nV�`�_M@�y
l8�U�ak�_?�[&�d�#�pZ*����.Ab��O�����U��^WY-�J,dyR������z����>M���.
SR��f��@O1���}�c�6�>7!�~�LC��&1�6��'����^�,���!�hE�nAWWRax�Rr�����B�n�&�!{���Q�������EG)e���e[q}Y�u��N����
���1��U��%t�5��\��lZ��3�g�L��Y�|�����)��*2�e�6X�����������R
a�9����~��]FL��D�����{b�y�)�����*�b��V�<����f�m
,��5���@r��lV�
b�KK�r����������+�`B
|&��G^w���!���l�*����,���9Mi�����O�W���� �m}U������W-o��N�Z\�}s���X�#B����Wm�^�;�������������JB�7� �yF������<u�&�uf�?gPQ���ZI�5$G����4����D�Kb��-v�m^���X�n+�N�&�;���ZB0L��P1R���D���Q�j�3�/���4K�~��Y%�#���RZ�V���W���V�4��w�o��)�z|=���b����b��D���|	W;eK@���KI�l�oW������M}��G����eR!;�H��2�2�vmfQn����d�X`jV&���j���a�qe��������k���P�G��O_,��i�-��f�-�\����I�6(�l����C�
9�x�W]�������z����F`�M7��n�����\����Og�=�`�];z�mEK�rS����]>K��,`K�.�����m>E_ef�����=ye�a���eBx���J���n�������C�d���<z��s�)L	7&�uQ������l3����h����"�(;��G2t;�A�����|/{O~����c��������*���^���v��*���Z.�k��d	G\��._�\�Z�,r�e�eY��.��.�.�tY�ty������^/���z��k��v���(��W�|M���\V1]>J�AL��zy�.o�R!���T*D�|����W���y��*��:Q�W1mW�8�qb�>�r]�|]���*��G/�U��k��\�^����}��r����Q�����z-�����\W1_�V�UL�G-���?j��\���y�b������B1���\^�F�Gm�����Q.�b������r/v ���|����R�����m��^���Z7�V�J��D1�r�b~���#�|���}����1_wK����?B����!��n���u��G�����#�|���b����>__�r}���L�b�~���|���b�~���_�|\���[��������Q����6i_�1�I����M�W=�m���`l��U�b�t����q���&}���6i[�-�I��k�M�V=�m���Xl��U�b�t����a���&��N�6iW�)�I��K�M�U=�m���B�CaO��p8v5�p(�j� �C����
��{��P��l��C��k��\�^����"9~}��s���������H�_�Dr(������������s��N��T�C�.D�����%�H�6������;�WY)�`Q�i�>��(}��y�����!�|H!�U�l7LVS������
�.�
��<�0y�������$n�''IVa���DP(�8i�BM`�I���k����L�D�%�m�`��g&���o���L�o��gXG�%
!a��6N$��M8�L�
�cd�xZ�KJ"-������C�*Q�����.�9�pS������*0D�%f6����gC��SZ�ud�O���1���+���[d���8�d	40oY�pk.=�<�0�$��,��
2t�c�i�$v+NK�w-�QEl����M*J}�0����A�e��������8Y�'&��������L\cW���N���F�����[;�qR�Wf&zh��l�	D�]��VGCg�&m���!���$�b���L�zb.���Zi0	�a2����3-��&)VDN5Tc�^�'2�)	v���E��9�vi?Q�e�]�H�`��5%��V�!�5]�+L`[�L!�
"�Q����*��2��j�Y4�k�����R
������S�H9��6�$�:��j`������Q��V������
b���d�V��z��fk��"bHK�EC����(*h�*�����*�7�D�C$=(~�+7+N��w�u��`���	�Qg���5��v��w�i��,.r�I��/u�����)�v����� 5�8��?Z�In���g$���U���(�,����p�	�����f�$���9I^��,fpJ�>?d�'X���0S^���g"!����:o%2���DK�@wU�����#��y$�w�L>!m.+"
�SSU3����gYT���J��	&�]�� ���{s=2��Y�,����*��*������hF.��d���)��8�W���.�6y[�q�SD;(Y�������$��J���U����N�9`��Sx���'
�=v�q�Vd���	;9�S�z-�������jf����,���������L~^d�|��MN������e�:���{�=u�����nJ2�4�l�c�:4=,�0�^ ��)t����bf�_5dTg������'��#����Tj|��E�M?�7�t-��,��u�XD]�=�meg�t����9��u����x�wI����\���P�r�
=S����H��B��L�k��D�76k�u��CkH����:4�
E#U[|�����5H:J0��>I��7>�o_/���
dQ� 7V���_[iHFo������k3�y��(/���#w���X�����<�#�2C�<��h�iQ(���R[�����~��=�z;��740~���}���	4��c.U��Q����G&��'%Y]����L��;X-,��?�:�"'��M������f��Sz��J
o�c���,���&=��aH!���s'�>x��-��g�J��T��������������^�	@\ Cv�*FqM�C*�V�I����"^0I��g��m����]Yx�y z����)Un0�=�g�>���.C�gR�����w���������N-�n���vj"����3&�(�7�B���*�+�EV�zf���yC>8�-��E��,	p��>�����>2���:.=�r���l�Q��M������5���i��$7n�I�5BB�V���<\��f���l��k�cd�[I�2Ms�q��~�cS���=����#8W�b<�c�E�R3N�G�`��hp����u`!�������l��)�.20�J��#�w@�,��-|���@�~�1_Y}mi�k{�X���c<G�d`�J�%��+pq�5����
C���U�sjW =��w�%d�+�0����E�M��=���m��=[�5k���_K��^�Z����Df���`��L�>/2pD9�x�.r�J�o�h��k�mI���>h�M6.B�;@B�-3(�����,�W���;�M~^d\��B��X>D�~��s,�����:��%�9L5w�O�
��C\�E�U��#'"v��:u+�e� �R���;`_�4��E��1������l��Ks��<���-3�Eqi��|5�d�h:6����I���M�B��\d	�3n�C��ef��!���a4E���EG���f��X%������wh��� �Z8G���i��S�,�L��B��'K�7<��&����v_�"Kl��p�����0�@�%m��h�'	6u�U��	2������Ed�R���������${@�tb�u��;@\>��W����q/�	kN�;��ha�����]d9He���������sx�q�*"�=����|�����?.�Z������`}�
7'�]��=�ob��C2�F�.-m6���K����`���T�%]���������b�v8g(���IGLU���!��M DY���A�NM�`��!����7������
mC7[������"��o�y56;�y��lK@>��`��5�
�1|h��]�f���(�=@�w;�E����'���2�����b�^�����a{�.����t����?nH�}5Yk�};3�/�C#_���
�2��v�}nsm���)~!53����j��zZd�w�x�IE*c~�F�����/���=0�.�����4���~�~f��*VT�}Ku�_�\p`�i&"�5l�|8�`a��K�R��(��B!�V+p;v_|J&"oXFs-��2�v��TV���/s-��0e�l�	��%��*����O|��Y��t5�,���g��~f��:`��'�a`�,�I
������jK7��d�����-�@�S._>M�D���y�i����8P5�{�r5GW2��}Uk>��nN��\6����)O���NH��D:�@��-oV�NC�s-�����V��#��y#0�	�ca*R�����6,�{��mI�Xk�P����eUl��1�d��}�,�=}|����~���|���6�J��k�z�?n�7�%��q�&���N��y#X�	�(qw��j2|��������f��.?���*����iL'^���^H\�X7
���3�+=C!Jc+�g����j������5M��6�?��3G���U�9���v���Mb�����Y�O@D]�x\h���7>l��E%8�j����
1�P�������F���JP�V��jS:8��������R�)��fs��?z-��e,�<vF�_H*�:?
�����}p^*��Gy�"`��8��{C���>qg��^s*�������bB���w,B=v��`q��C�<�v����	%�>x�{�lu�v��j8;���o�����Xc�	=��f�%��|�Bh�*�t6j�>�����`�~\��������D��W��~/���S����H�O[�<��
t|]�|6�R�*mK���{w���L]�������C`�r�����j�����1���G������i�{���
�A_{h�4���K�y�v�i���IJ������x�����2#���w[�N�#��>��`����4�V6�v���9���@�:7�O"������u�O���Ie7w�����I����E��./y`�>�D����	 >Jd���w������o=�&�V���{�Vh��H��d`����esk��+3p�e�r7��LDdt5	l���JE*���t��G+3Z
�R��n�G+���r��e��o��0�����/��h�%�E=z7�lA��������G�2r�w�Wy��I
���J<.�����A��\=�����d��x���"x7�v�.C��n��!�� �<�G��U��:rzo1�doFKc�������u�}0$��-��:E�6(��+�����'�y)��=�$[Oy��W b4o
��#B����=�m�0���TI�^��l�7R�j9�w4�����n�$G��,#�����D�d6���~�]0�8!m�w��y������>6�w0#���u�(�ENo��D�9����YD���.��x��	� ������M�[ZYq,�xrQr��xrQ�������?�\�'���G��w����~yM��8,��BlV�e���+��`J�1/��K��X��������U�r&"��[
�h�}�~���������A�n(�n�
���n[�X�����f�N����M.�\����B���8�����?L��?+���w�������Yp���p��_exc K�|������^��"�������{9��I�X����c���:�G��e:��+M����d�`�D���G�M�,�wJT���X�?|3��J�1�L��sw_��_���h���\+Rq�o�h�	p����Q���M���%��#�X������bz����I*W���Tt����V�qO����U�7���%�.��a"�>}�����x���{`�F��6db_p��������*ZA\�Q,>����{\�>��������3X��`�m�����#�Bp��#]�RU�p��6�Y@V��#{e��Z�a��a
*��/��,L��>�:�����Mc���r��9dDsg�(q/��3�~���|<j-��j��4�br�E�H�����
�����_(�8C���%>�~Xp��p�����f`f�����-���9�y4���<�8L,\������FD����'*�����5{e�HH
�"�<�]D
�{�s|�������4j-��(���7������O�_��~��["�=u�������?m�:�4]��������6��e��kF�U�~�$#5���[����u{k?�;��=��7�u;�����%����AE8m���8�j�1����3VO����W�V���	���"l��q�������\{g�u��q����������L��y1>3���I�aF������V�6/_A�G��O ���,�N����~�Wl����2A�m���.#�-�B5�)���������:
Sdl	�d�[;���m���-uw�M���N>��Mc�s�c�_�wRh
�,
l2V�5����,����;T���(�����8|z�B&�r!����f�}+���Wf�v0�v�E"r�
�|S�����\yj�7��>��nF��'"����������: �#�3��g}���j�aY��|����l����G��m��c������#�����J������a����)����r�l���~�acl
�>2���P���f����h�l��t�^|���+�
��K�����w���k�m���!wc7��i����\cj�Y���������hXh���&2�e������&8�"��f�)S�s��uNd����"�Jz�(�N���PV~#�3����|!�iFWIk�����q����iU��f��~�KM�WVV
�/q��?�#����������:l#��6���M��P��[|�T���Z�DAc��?�Xl�����3Z1����Ga�[t
���v�#A�d\=���1j&qBZR�<������vU9��n�� �<�_����Ml:������qT-l�F?tb
�o�k�>4�%������0�����~��7�����)��l��W�fw/�L������+UP��~f "�Pl;Oh9��fB`�����~�/2����
Cyo�|6#�r�e��/�_9md4�qpe�l����Y�-����P{oT�������W�	@����� ���������,������t���H�qf�~#���;�������]d�p*�����!��/�"�q�a�+�I��f��*�X��i��H���������7����/~����"����AQ
�3#�w���U��;�'2pf�b��g�#'"2*`�Y�	��t�=�7���grT��x�/�gy!|��TG�]����ccT�;AT�N6��� �^+���m���A7�6��,��C�&XU�9�(���N5�P�C��Lx���8�N"H 6pG�:��Si�������MH*��	l�X�7�\�8�7D__LN�t����m�P�dhP�/�D�G�;��:���&$��S����
�U����,����W����������eg'Q�`�UpP�*z^�e��NV�x���[�=��O��&�a"��j$k����s�b�=�����`Qh��"�c�'=����u��������7���������%[��������i�\�HM$�*��A������Im��	�#wQ��/��we/0�q�;����[����28i���N�&����"�
;����	
� ���Zn���y^L���dl��?/�_hg�Ps;T��>o4|����l���y sE�7�7~�#61���l����$��-(��~4�%���Q=���@O�^�������F�����p��������AC�o^�<� ?6fPY��!��u�q���e��B��@�P��7�4<3J���#�_p�I�3�w���n#8x����"�|�yT���zf����D�����/ldb����.�$��C�Eg������4x ���VC�p&aF��E��J����+[n3f+Wf���aFK�=����o��
�<:Kv��y� 6xP�'5a�����D�obs�}��V��K����� (@Evn���k���<~pd�}��p�d���,D���L,4?h�UOn��>��Fs"!o>~��1��'��������A?��`_M�/��	�3���
a�D���P�m&Vk�9,�C6|���'[n���

�����=���.�i��(����0~`	w��1~(����v���[f���A]g�?�\q�yF����m�n�z*\����w�Nabh���X����BO�s�^�>��x34 �w�r[E�t�:m
�t/��;#�
�7�����v���^d=)�m�c,����+�;��$o8B������'"22������<��M��p�<]�����~�
�g��jKF�y#��{T;\����JT��g{�=3����?�&k�!{a[��L��� �����������[�����[��`�����J����z����+���#��o���/���������{^��8�|1,(�Z����|*��XT�<��m"S�LD+�`�`��Mr��AKhE�91���@}^Du`�n.?F�t�����=��&$�k'zg��4���]�8�)ss�Q�Y������[��Q���o�]^�Q��������}�?�����<����*�N��CyF:B�!/�B�B<������]�>(�LTW��H�N�*b
�j`�6-�RDhV�m��g�OD=q5H�E�:�J�_�j@�I�k{��]#�j	(?/�!�U����.t���4�eg�;���/j1����q"�������M?#2�'�D$�N�p/
T]}�%E�g��x�Q,(����`�+&V�������j�����6Wof)2v���
K������"Xy-��S&2���,�����7'^7��,��fkX�����E1U
��w|�E)���l�=��;���
e���d�6`}U��a��K5���#������%���
n��9!��$��c���s^�V�yg+�[^*��&�&=c+���5#$�!U�����������C����hMh<0+�y�.��\&y�7����9������hBZl��y�G:����=
-��,�V�I�_j�|���`0	�L|$��X?���3�>3���`��I=?�y����5���p.��d�N�tB	�=���e{:1����o�9�Dd8N��5��$��b�fHe��h�S�,�-do������)����.L������)=+e��	��iQ�lSo�tB��!��1,i"Fg��i���L�Wwc:�~��y��eF.�%��W1K:!t�%e�lI'$u���m�\��)���yd�%���������0W3�nIg$g�0�/@K=��b������,�-(��-���,���K%�x�&d����f7a$��&��Z�����USz3����l�\�:��lL'��ufcz�����Em�����F��ft��4��.�V���v��!A�#���q��|��f+�|)�P$6�fLNm%�+�3���X��1�u����E���n�����b�d�S�V�UFb%�������">������2�J��!��(� FQ�	+O&> ��,1�1�h��t�|W�
f����t���B1���6��4�2�������<��b��|��SV�	� *M�t5o���8JFl������b��1i��<�2c(}�=���n�7J`�H6���8�������D-��j�y�4��_a������6�Q�?+����z������&�H�(A�o���e������b�HEi���+H�s�1F���Pa"led�H�i�[n$8�`C("BI�,�������V���TW�:��F������T�<�2�(��+
��l��l�������c����e�������16xR��	8o��Q����^��#	a%Wb�&��$1�FjcI=`R�2j2h��k��AS&I�a���Se[�r2�1C��>�j�u��'BQ=j�n��f�.�im�W�Y���`�&�����m��Q����]�.�����rE�l�i�������~��s]G(W4i�y'���m��m�t�U����l�
�p������c�7�Z�{v����<+���l�����M��gs��%����f�c'�r��L�Zk����d�_���|Rtg�����]�17�������|��,�_�Xc��T�
�	����f�����BeD��_��3*GK�����o���l"oKyE��{�Y�v�J�
.��e�����PT{������m����@�����|'3���"��:nlR������h�[�`�M��%y���.�lM��f�}����?�A1v�Z���u$x�hIo=���x��MD�H����Yc��<q�n��NO�6����'O��!�p5��ED� �,�*3��u�Vz�@��<f�������#����y��u���E|�mb��"��i��v��;��t����1s?�����'�IF�]:�@���N
�a���uB1���g����=�B�:'��7@��;KMAz���;�����SD�Ri|��wC��rx.yz��8zpD�rK���D?���~|�M�{)b~�vr��ZU6#��D�.:�s�k��=��^��C����(-�bH���e9��$im!K��� �w��	a�N���e�?��&�M��vBXb��J(a���m%1�p����j���g���;�v���{��P&:�������.(���t��-W���2�*�����_�4Sd(��!�
��n.����M���*��F>U�@f�Le�*�l����)���-�O��3E���sC"sU�D|�G������CM(����M
	�34ff�E�:�N����Jb��f����g��E6��[^,}�����z������8���(q������/�ER\�O��X�o/��������2W��tYOk��	��>����X�~����������\�VC���F=e��5�e��M'-vEi�H4����5��|����������g������]F�/u*aX��
��lF(Z�D|�Hd�x�^�B(prAl���q�!�
�YT����WG�*��
]���,o9��E=*����\W1��[S��u��z;�u��K�a~b�.���u��VN��F-�v��o��}�s��QK���������\�m�Row.�6�P��
�yZ����&�u���)���y~���~�U��^�j��J�"i��^�����{MJd�_����q����'my��_~\��\��?�����L��~:_]|�~�����~��E��{�����.�(-���]����{��������?���������\���-?�W��7�tx���o�f$A����q���������o7�q@����	��"[J/�������9�-hX��JP:(ra(^h0	S&���_��:G�-���F����>p&
��-�G�%_��0v�ls
nI!�~�G�+�XK}�G�����/nE`;��|�o��w)Qy�G�(���P/tF�P2��q�9p\��3���<��T�{��$���R�8]���fh>O�#ffj>!y�f2��O�����	���\�Mv57�q0����|�7�F��&$���@������C�+Y�]�z��n��.��9��_��vK,H_�3�%�;)Y�		��������h����F�P��vfN�%;D&�d�`����mJ����� �V��NH���|�����N�<�����"�Z����Hv8�"��n���o��x���>��;��!XI�>>�����x-��M���cm�h&����Z��)��7��|��8lmBj��`�����C%���L���t^��V�x���W-��m��hqS;��C����$U���2�~�*@"P��z��'��7���X����3.�g{����u�9<N�q
�B��Z��$q����|1�$�+�����
��lV1�R�R�����R�%�`��<^�v�+5=���%�]����Q;x,��c~4�ub��y1��s�B�����Kn�G�i'����y}�o��w��M����������d�Ld��p��uD;�D�
��<du�V,�+���!]G������	�Lz�s�d���7��1��@'iu�N[�<��M{�m�j��;xY~�
nf�U��;��v��SHM��sb	�����WN3P���7���v�ut3jr�(����!NHe��~���v�Ef�$����������-K){������R$P>jN���p�jlH"��1VmG:�	-J�Hu�VaF��BRV��g]�$��zSb%�!H��e&��uq�m�]7hM ��ZJ��6���z�"j_���Z�Mc��j����H%�"�������3g��&��6ZwA����c�#���\3p�1���f��f$��1��6�:q��`��'��d�IV����/;?dF�k@�������g��qJ����[��>���
�1WJ"R��{��8�+M�p�4����B�m����d�%�r�r��1��6!����8(-f3����LJ����DQ�#����a�<�uG6�@\��fh�^�n���	- �������H�;#8!�|�V%8�(H;/���<]���;1�E��K��� �{�3����\���s,��[<�7���;os7�{^L��1�D��+�`��e��[�P���{�O����9���N�AH��2��������TQ)8���rA��		���N&��{��T���d��0���Y��&0��+�G���e"���<��<�f���'$�".&�>yr�0�~k��:����g�Q�U��4,��|��
V��4[��e�Z���qf��sF��Q�\b�*G1#��=. 0��sI��������zX~y1-s��O/e�4e�pZ��Zi�����g����o�������n���*���t�mu!������kF�����4��^�1Vo:�,[���= Z�	��6l_�&*P�BI����@6w0�Oo���<�����R	8����F$f-oKe�L����������C({���w�h��Y��O����%��7=�Ddo���E�L��T��
��|������������\�DT��9Uq��.j��8B��	�LX23�x"I�*�����y�K���G���8~m�61]*e����{h�T���&lv@{R��T']����!���������
kw��2�u��?|fTd��M�[����8.��b����T��i=�>�a���E��ns��R|V*��Q�X3�Os��?���{�H@����w�ROE�K�?���"Ja�4��%�	Ln�&��3!�Q�02��P���<�I��m""�b�����P.���k��C�B���[����t
g�Y":�/����H����u
\v�"��'�E|����Z�M�9!���^{F�2�/����iW���}v����G�F��~:��N����N�_OH�0���&���]d�v1!�a���f��	p�@��W+����DD�3�_p����)wv�������������f�b��Anfg��]s�{�L������^g+���u]C�E���Ga8p;��,H��q�UQ��SZ�UK�F'-,bu1e�D��;�{�����g��w.``'����)���;���6�C�
^��8�dgtL��v�MZ={T�6������)&�(h�&���6w�����G���m�S>v��?�-���
+�}+A�hQ�p����nU�������}h�if7��V��*d1$����g
��T�nF���^����y�����O)Y	8b���c6l���$���y~���m��*�����-��C�@����������l���� ,MY%"����?c�[w��;}9����{��~S��x�n��M2�l��*�����'�f�w8�:�#��
���f��A>��p*�LT�q�xA��MDu�BA&�S��}���bS8<-i5���ch)/��2�m:
h�>���+�|!�� ��������Fwz��r�6w�*��R���f�&���%���i'j	���>�P�=�d
�2�\;���D�s�����rh	���z;���ng��P'��������[�LdY��,o��s���No���<l$�>�;���B��S���m��#�RQ6�'OP�=�`=V%��Sc_j�g��;M�Y�Njy^������F%�W9q\�����������n��3��g&I����vd&"Y	��fK�7.�j.M@D>�9'���[�M^H�����f�!�gy������\��B	rH��c��L�Z6V�.�4y�����$�b�;{�[���F�\7�+����|�������$��x��ol����l67����%T������JPaX[�a�����������oE�?���(z�~GM+��F}=M�/h3���������J�>`�����U#����C-��M�B3&41I�BN�L�y�;f0�t�%%�`48�E���>�%����|�+���ja�F���k�#y��y�=��t�9��C�>/"�6{��K�*�������m��Q����;��ks�� -o&��	��u_dC��Ho#��`���/$���wz�.aGC/DE��OY&m:Wh�D���E�G���J�J`���m1��V��PTN���V��f���`�4�����?�D���Si�M>���M�&�c�YS�����u\&��g�B=8�3��m"�hi+�t����,������T�b������������s5��,[�	h6Yvu���'���sy��f����3#�����_z�R�+��`F*����^��/�wp�f�g��x���p�'w��Ddx
z�L�m������*~�s>T���<Wcy�P���������.&�Gm���I��xd������0�I��N/�#����1�����������9�Y��	��8����J�)/$�FE�}��\���L���2v����/��f�.eBM��]��
����u#������i���{Z#��(��	p]���������q���Me�J/Q�z���G���e5�����v����O�(�P���7��	�;��G��wr���~X��q�B
�.����/�"8*jB*{W��?���������k�Za{�fCR�p{!��X����bO��OH�qo�����BKO��m���o����6�k!��o��q���V{��:O��^���������Gd�P��^w\�����>{�w�g��1���
Z�e�69d:n6��!����6{8����}^$�h�f��C�6���R�X�����9���3;��#&F�A+QC��J%y��S�d����{c�������=���t�����1��h��q��l1����o��D��c��.���I�;�s��ZH���%e��2�D�Q�(���wk0H�F�G7�Q.zz���3�I���X-�`�������(u��p���t�XT�^�h�����$����F�6?/����u�C�[���i&��e�K{�����&��hu���"[�AR<lbEkg������,�1���<��Zcz,�����s�v-�����$���c'�W�o���3��u�{?'�����4;��XT�E������������X����>��t��&J��U6�����EBv��3���3y8&�d����2U�����^�2V~�Li�~
�|f �g�_�����_p���g���n��&�k/L�Z���T^�wgU8��lz�N��G����(�� �8��tSIYY\Wl1e��|����|H�H+��y��\�`��EZ�Un7	��*S:����,*�R/�.��:b��J���p��p,����h�+g*��b�E�}R�;+	�g����*~yf�E�5�3�lz����(�-9�O�	2�,��r��a�,��Ay�zN\�U����,�����r�L���/������{&���H&�3��E���O�wE q��/�YR�(���6����w����L3����G������2�'t�����iX��c�'����@<]?�,�e����	�S�U����3��c��&p2������a=J���v$�H"���xh����K�l�p�P��9��N�1:����-�W��K�����b��6Y��d(�L/\eZ�]�gA�	/U6#��9����U�h��g��\w����x�0R�e��4s�f��o�����ePY��;�z�,�n��g�Fw��!_�0��m�|�>����yc��D��S-?����&��Z��<z�	��}����;&����Y:�'���*;K~��w#�
P�E���������_
=ly�n���:��:a��������d���a����a�S�x���q������~���Q�u�i������r)J��@�*����n����5����-�������X��\�!i���EWw7��)���U�m�ZX�5���L�V3��_����:�.�!��&'���Z5������$Q�4��!�
�I"
��.�w&��e&�/�@�sI��?�?�u����������9���C*�:--(�����{���I_�9!&�dz��VsM�i�3���FM�lC:�g����y��W@k���9&`Mw�#r��y����U��cx�w�?~b_���K��E��|f�Dq(������U�T������z����\��{��
y�X�
p��L�����<m$�bKCk�Y�$����m�HE�y��H������W��=f��D�Z�\4u-�E.2��m����o��&�d��
b^��!On<��8�b=����l~��������a�A�
Fr�8d�.y���2�_���"��wkQ��o^�p��T&D��P�
�'��{��&���T�hD��0���~9���#NH�LpZ?�R���v_�Y�h��UZ�L����T�x���������1�*����D��O=�4L���?���9~q_�x�) ��<�W���|�e��a���,NA��UQV����r���N8d��L [���B
"�XdnC�c��
�H&L����rPM�w�t���z[�����m ����6�T�q,��R'.��E��|�G�8L�t��3�r�3|�<����
��������f�!���f�*X���isqe�tI�����m���g"?HXM�����V�����0����<~��+�������!��T ��-$<����Ru�����1���nz��N`I2G��e>�|"���w�N}`���Ht�&6���.�
��Y@���rT����ksA�45nN�<k��b�.Fp��el����/s�:��g"?�C�����.�	����t@�����B�;���V�t�Y�1��]u�L����e~�f���j"��b��>��Y
����A43M['n�1�
�D5LW����3i��g�H�Vw��#D��C+8�g���MNY�,����%���2l>�8�LN�?�J^z%U���*�p1���,������7{���>U���CO��}Zc���~lg������	$Q�l��Le�=���mB?� ��E�W�f�:{����D�[�5������B�W�Fa�`/k�@�=�KS�L ��c��on�Hc�l�F��a���4En���64l\�	���Q������������������K��3��s�>�����B�N�F�_qZ$sJSf�
�ae�f����q��
h�_������B����K�]%���/�����G&��y��/H����S[G	|
� ��B!c�o�uc�P+nQY��k�1C'6KS�T����v�	s��{i��It�zJ�ZL��~:�;��n'2W���qQ��;'�'�D-m����-?�D�S�${>w�X������S2��"�f����&p J�E^^��I�����pY�g
�����8n��ug�����Q��P��������\�7���Xz�	�|W|���?��+�'��wf��g5��7��+[w&��Q�D�9�����@4���`��Xp#�Q�m-kT�('��Yud�fST�:����K��X�p��2�Ce����`$V�n���N�f�v'��y�8�/�ha,!���A�J���;�P.%��t`����g�g�q����r�V�<�~�����nG�N���U
D7Zu������Q�t��
����vG��+
� s���
�7�=�����;i�B;�O�M?�g!b]�.K�I1�&V�t��M��������*�F+��\`Tg�'��qPE�<������L��g�wg\���*�B6+��&]�V�9�	��oP�$����Fg�%�������f}�����~��v.E���Eh;3.7�@hvl������n�Dxw��a����(4�F��\"K8;����+n�=���n_
����JI@��u����3��-�\���&&�D����Vt]^������;�]�@C%Q4����x�������8h;Fh��>3O;@�������'��������a��d�R����z�q��R��V�a,`��n���n�E������E����V`�R K��h�u�4y;��	���q2�������H�e��.��%���#J�GH1�8���0�R�^>�i�_���0�)��g:��������:�5��~������g;��d���i�
���b��I����|���!�����������l�s[1�����j+�&`^���@��W6��ba�V�TY�ZAZ	�;h����f[H��9[��Xz��[�o(hvT��em��\y�D��QP�Y�S�r��l�{���(�?��sl���6M�:�
�[~t���
�J�5Tny�
�������iC���������������k�������?c�.���}�3DM��#�������q��c���4#�1_k�>,��'@�d������~��^Q�h������/�)=%�����jp
<o$	/�)�
�v�K���=UJ�:�����<D���'
TY��~��|D���&�S7Rjb��l�/��Z�&f���/it�wV,��5��\W��8���3d��w�7�&�jF��E4�&�Lc�EY/��14�(�+���V��-�	�\\�=���B�����y�kx�E3�������0���4��W65K�Z��:7z�q��j���%�6
Q/k�i�Rzt�i�%�X]5�Jz��5q����Z�i�'�r��0��s�)�;ff$@�w����f *-����4_��[���,2V����f�Z��"�wc�m����)�}�&HK�k���A�L��l�d�
�m%�#�ge�t��6��N(��8�����	8��L����f{:�v45�6���H���������yO�-4���&S:#�Im����9pS��j5�d3z4k�4���&;:#<��
���A2����]����j.�Mf�nI'=�o�3)�2��rQ6��iR��gH����
�V1W\�q03�/����bJ'"2�_�%=s��)��|��T���>:�gFY�==p�I��3��u�7Z���I{:#���J��*��T^���~��}2�3Z�;e���u&u""�����2��������r�I��y,�������M-��:)�d��d��3J����5qI����|�(�f���N���@"\�b��		������/����+��8MS��r�U6�B�TwK���N�AS��u�t��w�~����=�D�������
k:��������q
kZQh��YE����N�e������tF�
���f.��	I�'3��[�������@K����!����� [�	Y^�dMs�5=���j�D���WX�B��N3C�kn��tBZ�1�&���)�-��L}�#0�Q���@C����[�j��(��?6kqnGg������3��U��h�,�����e������4�bG�%�:����Y�/�D�f�,��;����fy5�h�
'����`��lF��aM�\*������odG������,��":��X��	1��b��iQ67�e*>�#������4b2�^����D��Q��
%��<�'�(W���Qg�I�eG�X.�Y��R������o4�.��T���������L���[�]�?ET��7��������������@mQ]��:8m6��r�'�����P��roL�}��A�B���Fv:kr�V~�3|!M6�l
��~$�W�o�|[��(.x�C�f��4�/�1l��APyy^H3���J�mK1:!���\,-�����n}��
�����	���2S`�#���'���������,b	�,��		�lT��=���d�D�)�����F���H^�%��-������,L	��bo��5z!��/ps'I��jg�Y��#�mvKP>#�[V�B�C{�dk�u`���{2�Q�����+8����e�,�~�us�u�a����-�?D*������*H�=��w�,��P�����!��8XK�}]v��,���P`�D+B�vo�O&���}���
�����=����>>�s2y�~�J�`�w9���X �	����X,���sH�j�\���Y�%�n�	V�����	�����"���
�T��v��2�eF"o����Dn���j�A6-�����������[g~���&�{+�������?��u����d"�7�'��K���Z�U�k�,��zD��	��
Yr/����H2��3l��DE
�K?���r?��������i��+��6�'&�9^���Xx"�����w�������h�lo�k�e�%���g��Rr�MH���}C��I��N����s�� �J�����`
���7B����0G�������`�Y��6�Y�z�4�%�;VK�L1-����pv���Y��>?��k���"��fr<��eQ1��f$����r�QL����HS"���h~�eyLH�{�:�h�X����pH���1�����*��n�NJjpy�L�i���g������v0�br�J���6|��{���L�����k��I�@�v_�}�{r�?o��<~2��S�k��i6������Y������q_+�X�����&���C�������L���Z�%�7�I���3b���=�LU�n��O!��l�9�f�(�_����Y�H;���UVu*�h����r�nr�,��-j3y��#"�I�*�!3Q�d#�3�C�9{�`��*t<[����_��&�%X�8�)��
�������&��Sl����yo?���:X/�N�,7���f������9�o�L
	 �����xf\8z�q�%�D���7�TV_{����Tg�^d����2�Vb��f�;���kC|����Q�����j��1�v�l�l��^>y�uFj�m_h-�{�Q������.="t�yLDRn��_>���=��/xD]9�Y'1��8Z���7a�t���������/t�I�f":z���v�2��J6Wj*� T�(�T!K�&�~�U[I��,[C�mI�i����MT�J�������F��3#�i:����K�/�r$���9����ik����)dE*�u[l��EsP��)��x!�Ae$�d�<%K KS�,���������]B�n��?��{�f&�'UB����&�$3�G����t����C����M[����>��LHLB��B�o��.,.�Q
��I�y����YKwb��G3�
�?��
��4��W�z�=�����Q.�|����DT�lv9�x���b\�|�f��l��y'y��H#P��)�����F6����q�	��,X�.���3��h5����"_g�Wsws���w.K�0#��d����7��,��-����\���!�q�JT
r�A�lg�q\�9�O����"b�B�<����|������#=Nv�f�*��/�����H?*f""�b4��Q3l�"Z�	��!^���l�S��6��K��0���g��}����L;�[P2�5�t�i��f���*�D�N���d�j�z��:����p2b�q��/������!y�b��V��=7��ZdN���w�Bhn���K��l�������|x�!�O�l�|t���@t"�b�i��O���o��������4�<����m��_��	�1+F��}�b��1�SS����8�4��� ���g�1��Z��|�H���=d���#j~��t����'� M�}�V^H�}$�j1<�4:���X��b� ����%H?���	-Jn[����:�:x�H�|�r�%U��eo�MCg�=L<e�Z�gFU�/bn��tP+��Hut���J�.��d�i�
Y*�\U[��L$*B�� �"7���+���H�]�~�2����W���'�q�~%?(����l^'k�������z�!�iH�G	N�����D�<�����i� ���>�����&@R�����5��6�Z�q���`(���|iG��=3���IF��$w�I&YFj���=&�M^6��e&"������~�S�e�>�F�����gD������V�;!y�������|���sW�@�4�3�]��/{L�bL�	��3��~��:���u�>���_��c��V��<t:)��=mN�^u�L�y��1T����9q��O�����&s�B�<��@�4�!_e�F�_]��c�
��-���������&������IT��/��kW^�s�?e�H/��s+�3���>o$��F,��q}���$�����z&M���X^S�/J,�n�,+�<����Q�-Ia��C��'�������ecv�m�r��+��������]�����c�L�_��q��*���^��u���*���Z��k��m�:�|]�y��*��g/�U�������������6]{�>��z���|}=����_��\���^����]���t�(�1_���}��������R����g����w�4l�����U�b�~���}������1_��r]�|}��u��Z�}.�^����;p��]����RG�����?����/]W1_�z�~��z-�1����?����������$����C�X��\_'�������u��\o��}�K�>��^�C��Z�r�~�Vjb�^�{�����w��wV�x��;�b���+�� ����^����wW���wW�q=uW���wW���wW���wW���wW���wW��z���|}=����_�����^����
\!��G��������|}+��@��q}������I�&7����
��sC������77��������!v�on�]��b��������!v�on�]����uC������77����
��sC�����>�!n�]���~;�!~=[������/&7���#�!~=���
����'7�����s��Z�}._�;���{�?�z-�1����
����Hn�_��?������\~?�j���{g�� ]p>�m���~����	���Y�@��3�7�a�,,��^h�D&gh<E�m*H����R_�ce��G����|2������AhW��_�����f"�������H=K5��E~����Y��u�a���\Q-+�Bz]&�|�D5D[L�	@zj�K%�����/d�_��N�U��LYf�2�'6=����L������n�������{�(7���73	����,��p&�!��W�%�+e��h��������m�!kK3�q2��2C'D�����0�1'�uk.>K��']<��8���T��O����{�2��QJ�2�
-�T�n��3�������{��vR��JdC���J7��"Z��v�X�Wf"I�E�K.�����d4��&�+�,S�f4�mp"���Si6]��2�H4�	pl��Sr�)�U��,��An:���TC�/�i�(+6�	Y�"��/��J�+�j!����F�m63C��_�=��FA���M��0I����LVo��M���*�
2��Yi5��5��T����y�hv����c��l5�f2�Sh�E��I��5���`���G��vrCK�<o�M���V����!1��K�W�j K�|������9����P�^6m����l�M&�Y�}�h�v���s�����v������]~^Dt����~
Q��+Q^H=)������>��t�/V�=F5�R�MN����a��g)��Xi@�7����#����������
pp����9W,������H��n�!P'���(	H���=a�d��l�i��y�	���r��O�b?�D����g=�c��7��I���L�,��
*�n���:��	�����0�������N�%��+��x���;�����D%E��8����k�\n�R���uBT��=�=�L�[u��Z��O���eb��s����{8��,n�y�Q�R��z�e��.'6��H
�qgP����[b���w����S/�N��:jz�y��/6���=v�~�h	F>�N�����Y��o����N�Q8�J_�L�vH��ik�-���?�b�����Q��o����7��]���y����������%�l��x����!��d'�Y/N��
�O��X�����O�QT�����X�B������\\X����"���������'���|�{zv<�����*;�n�;��$x�H��^et������QKc�7���I�^�7I�N�T��Y���9<�����	��g�
���I�I�D����.b�:u�U�>�Y�h��n1���cL�����\���T	����S%X�'�x*��F�!j�	��������c������K�o����B<c��w!���8���/���,L��-���fP��	�7R/j�+��u�����w m��w���"�6Q�(nq*�V|A���-I{4�8+7��
t;G�������,������"x��BY"�bnY&��;^w���KZ�^}�]�r�����Ty�E�����8�s��tL0 _4mmq�U��
���r���@��2B�����9;��Q~^D��
X46�|���"�
�R���+�dp1j�c1��'
&�
.����T�3�"��E�!��[6���[Eh��{x����F����p�m�\lZpS���R��04�������-���L����nd����3t�_��j���qB=�G��%����tZL`�� x�H;4�Dh�;2��$����4u�����8B[�,��<�3	YWV��7��q��C�F>J_U���!?/bC�l% �G���'��Tr�?��`�&{��:�s�$����y�N��&�-6����������VDcV��9H���X��#����5N��4+X�
�o2���3�������Q���O��L��_|�E[`��<����l�T�f}q���3�3�|^�dp>3y��ia�4��	C�*l^��[8rs��y����!���I�x�%��d�2vf��9
#6���>2�t����*z��+������������c��f����.'��P��;�L�w�i-��nm��U����v�����sv��u+��6��	�#�!�}�5(��[V}�:�L���M����D��&��s������d���������9(�
�=�������(�����H3���l��-�C���(>���zw�KzJ/�U�
��NR�rp0N&0��������{�k�"���@�yU�UEQ���z����!;�N3/	������1������ZE��d���d�J +��#�9���Tq��RO��mv�����i8�XVXmHb7Z,Hf������/����,^E�0��}M[���)
0��p���ei>K?��:�[�A�r���4,77�����@7���y�J�WS����]�iK@�sT����8�����;�Y�62�m!�B-�78
O����B4�?�!�F�B��d��3�Lcj�F� zv�6r*�ii<���X\,�LD���L��ra��H=m��NQ^��YG �&D��jAne�H�om	x)�p;�g���Tn-��
��`R�v�����t����QYE	�Rkv����r�0��+,��7k�eF"c���w�6kfv���T��h�5�w<�C��&'���H:)1G1����V_������_%���~���o�U��}�b�������^��(X�2���An���3_�a_P��f�����h�Tu9�0�����!g�2VO���=(L�������%3n0�&]_w<���3�\%��JF}A������+J���D�}&]*���~4f}Q����,h���
��=�o�����n��XO�>)"��/��l�3R�L��"t�� z���vU2����i?���-�����������O@��&
��qI���p�����~��=1t��������gw�A8g���\7h�]uZ�u���r=�[u5G=Y�%}U�>��X�E�?V��<n@�G���kBu��'%��t�dYYR���v���d��.6P���#���]Q���ka2R����;��\PID[���,Tz"u��96Od>:��{<	��<U�V�ZqR����uR��$Y�����
��`B�l��tJ���� X�{�p!��"4��*�U�2u:�QV������v����?��F�'�����s�e�Cw���5'���Cnl�����u���	�~CN��z�a�����&E�=��[M`�fw�p�l$j:�/������`' ��Um�� @O�#�#	�Bp��m��F���P�����+��e������u�M�!.��D�Y��B3IrC�iC����0�.c��8��}YBR���=o}��Dd�Q�����XDe0%-��;{6��3Pq�/
X��[��P�y����U�t�I��b��O<������P���eI�h&	�("�pv����<��r+��7��h�X�N����G��F�9�7[� }���(D���{��gRy>���|9z��<�P�m%�L �+p�Jt����\&�J������z8(f/C�qG�B���&�	�e�d�8������8�����F�_O\��v�B�������{hU��Q��gEs54M7����6���H��E�h���D�Os��tG��*��D
���XA0��7����>w���}C�F���m�q<�)%�y�2������N���q::���>��+��'~����O2��<9-�g��� ��o#�����c�CmB�r~<�~X�}�2#p���Wf���W�{}�2#���
�o�������&����b��������J���$���~����D4s�\�{���0�1�)�TZ�k�IM^c����`��W����	�����+��4����o\�������7h���{�9�w}d=l�z��`�f$�����]�M�#�5�,����0�����;P)(d2�7�"�UOUv��3	���!���6J��4��+������f^�����(��������e �h�������Q����kC��^g�Jr�$�f��H�j�<^6w������<�<"xE<���&"9��g��u���1�i|b4��(��&��>��cz3��Z^�����y/m�i�R��b�lD�zE�lA�^iGoB%�+�x����f��oGi���QZ�������v��7��c��}wBp,���%-r�,�� 6=��Yw��De0%��'��K��X�DM���	]u,g"�>����u�-[=F<�[@�.'��gx!o��9���e{�t�V4�M�rsq��_���&� u�����	pc��	p�g0s0g"?�L�[����|Q�>:wZp���	����2�1�2PLri��#�rAr���n�b��h&"#
@����L�,&xt$�u:�	�'M(m_xqt0g��������)()�;%*Ou!V�K�IEZ(���3I�D�`����D!.�2�J�T|���	pF�B�������6B�Q���2PLr�����I���CtC�-
� -��L���Z+ee���������|�F��g#��a)$�jw���h�0�x���V���eTA\^��t,>��ghy����g�cC�
1n�6���l��� ���� �#]�RU�p�s�`��d��F�l�rCki�6kP�f<=�-L�{y"ex�����7[��t+�WI�3����4"������D�*���������i�7(l����~��>H3���N<���C�
:�P��t���D���`4�������913E&����������[S�
�e��/�i���������T7F�[��6���Sz���d{���>�k�Y�N���I���������5#���@���Z�;��Y�v�h>E�3������;-���^7P��������v�n����v�
P��������� �mQ��H��2��N�#Q`���}�a@
KT�����8�h77/(\�(���.�yF��k�ff�_�9���K%lEj��d3�=���SY����l&7�-\��L�Q�]���X���0����*T��.�_B	��6�@�y��@8M�^Z0���&��a��?A[t�������W.(��"j�&r2T^�=��qi"%]D���mdA(�����,��|��DG�;�e�wR��D����� ���I�QS�ow��ah�!�	���������/����V�2z�����n�5�^��Z�B��HDN�a�o��Z��c��jf�J��
������B0��;��|�:/=��8���=��b�8���EO���F�G��f�=Xy�/�-��2����Q,CB!����/H�i����)��('��
6a�o������h# ��c&�����b��v�O
����z�9F��	X.����K=I��Zk�ZP���!�i��29`��o���8lL&"�^Z�$�Ln��W��MthB*��OP�����������(�wE�Q	���MMy
�������wER����<�3����q����iU��f�~��&����UC�e".r�Gu��8w�!�m��L�X��|&����}m(0���������Z-U"��;���������t���R��'��#�p�$:�WR���A4g\}�
}�,���	i46��y�A�,L���<���yBZ=6�����F8��D��sT-l�e~hf
�^������JPa���ftR���;���cM?6t"I����{uyf�{adBn^B���gl�V�w"b	�U����d�g&$�;��/����]/N^Zx��j<nA��^�
M~����D���a.h�2��I*"����g�C�&"��s6u�{.����9!������������v��*����M$�::�q0���LD���U����q��9������v$o�|"�`��I'���@TE_k�U��4o��V������!+����]~":�{�A>)�ag�r���zR#����(�VT����b�{���(��a)@b��i~V�
��c�Id��-B}q��p��3��ccT�;A����N&0D\qz�6����j���b�X�����JN�j�E�zx���P�;r��K�sN
�6;� ��8�\v�T����n���oBR������4���W5U��K�IoW�>sZ����H�%�Q8��,L��n�$G�5!]�v��Y�*V"����������+|�����e�������D��do.�������������+dB�������'�^*Bx��=������dr�\b�KC��n����W[�E4�����EO�[����3�'o���S&wm��-o��[w��� -����`U,��,s92	�����'�}>��H!s;k��������"��7�+s����Ep��u��n�&��;hE�
;�������]{l�
�8���N��.��������n.�f}Wt�D���4t���{���?n�<�#����2������M(�>~��%0
�8�����ee5�lf]Oqz��9�
���1�]�
�����a� �l����9B@&�u�	q�P�1�/�@��p�e���3
���\1r��O�]�;���.���+��!�_��M�3�ecP���Q	��k�����48l���,^;�$z e8�����d�4���3	3J����������>�X�z6����A�������G����E���!�8����Nl����M���f���k%s~�����4!(@A^��_�k}��8~pd�}�z�dk��������8�t&>~��On��>�HF3�!_>~��8����AE
�q�� �R"�W��f���]���m3b���8�f�����l���L���7!>$����=�	����l��H��P_?0�U�}�J���.�ixeF�~6�:������g��;�zF���4�2�������d������3�v����������J��o�d���\n+��N�A[/�3b�y�M)f�p�}��	�(l?�|�F���X4�2ek�X�������Z;>����9����B7�B;y��D���`~��������*tDu#��H���b�q����������cs�z����D����������0�{~W�<;�.H���B,�X�-&��;
��Q��6JT��\o�������m����#}=Ct���>'sv�JG�����;�)���^���k�Tv�13��y�4��}3��D�x�ms��� �AK��\91��.��Y���Ip2���k��$��.w{�M
LHB'�N�K�@u��d����z��ts�Q������E�Q���o�.�h���r&�{l�O�'��������V�=;���	��rB�d�x�5���'�r���>u��A��R�I�\�u��&�$�uRMp������ ]	����k�.��O 8�q%7wMFd�P~�!Y�@�!���7������HGGu|�
�X���@�;�XX��e�~�m�M��_�DD����-]]��"*��-p
�������D;�����O5���n�6go�$Y;����	hX��/ `�Gs�o3���k&��:09o[�1
7C�N.�#��yW4��`��4���eQLUC����_�(eB�b}{�S�.�Lp�����������<*��i��j���W�\��ga\8bB��������hs���i��;�	i��O�7�:'SIZ�Z�h'v�!)�T�6U��:G�����lfDKB��������F�{������[=`&*�q668MHK�mP��yQ�+��p���[1'%2��E���!��Of�#��1*`��y��gD:�:����
����.,*p�f���	��>l���N(����;�tf7�Yt�����9���p�L>�-
��,�h����*@������4���Y�t"7.��e��D��dF���[�g�M	Q�L�z��Bo����7~����-i"���n��	���t�<��y��2#����m�*��3�A�Y��;��%���	�g�����41������-�DD�Q�%m��c��3���aI	��������}fIT��+Z�v0"8,���$��m�������0	����*���������7�m6��%�m����T��`L�Fo���J0����MTf5����T���'���OA���c���O��P��)��2qEbC mf���V��2~&P���#��z�m
]&>�y��%�e���#$#?�\i\ed�����}�d��EE���:OL|3����EG>�"�(���'}@������=�OLup��;��r��1�P�0���R
c(C�t�9^�75.���GPC39`��<!DE�W;����2�q��{��z?����P(51i��8�22�P��5���l�P-���:'���1��E�]
�
c���L��1K`c(������aE����&��(Az����EP}�.��c�HFa���#&m_����j�B�
���g�F�S	6�"�!�����`�7n������2���;����-w�(c>�Rm�a%�f;&d(�
�XN��GO.s���$
��������L��`�F�.rRD{E��s�$����
�D�J\���7.�6���L
�FMm����B0h�$�6��l���J�����t�4>��r�v��PT��]yM���E��MY�"L�2XH���xk�-x3�k��q���	�����l��N��5xD��c'��4{��#��+Gr7e��*�H�c6�m�e�sEGY�:���kb���.^8�Jdx>.���z����o�.��k��D^���l{�DF]^��)������G"���O�o�����.�6��8�=��������HI@�������H��:����=;-�F��^c��;*���g\_�/��~B�"������{7���9���.�I��C�e�3g3BV�s��S��m{�]�@�����a}..�P����T���4<-y�l���E9y��D8z)�q����~f�h��Q�v�$������
���������9iw��u%��)���:�����v��~����"pWS��yZ#"��v=�zs�n�(u�m����{�8����8�>t���B|�m����}���Cb�M4������A��0f�
�����v�����@�����m�}�uBc�}�,V��-Bj��'���$6�8��R�A��$c�@��\���)���8��h���_?�����d��O�]��>5���������7�nQ�<�v��Z�mR��������t��b�������sNw�GP��� ��KqEyh-I��DJ�/��e�Ak'�M;�.;.lt���}d���vBXb�%�a��f2�p ���V�;��4���#lG��z�.��DGTW�[�����
*�OH�z��������Jd[����~��0Sd(���Y!y�������4�i���3������o}����5�7s�L�����_67$2WEL��}�������bB�6���!v���l�H�@F�-�S��'2��`f�l�q$>Y$����~�5�wa��On���cL	����|��r����~Ac�H���).V����B|��MD��R��u�i��v#q>�EE������~���>[��u�k�S����\���j:i����D�h�
)/k�|����>��i"�Xp#	�Kw!���L��������r3�9"�5h�� f�C(prAl�H[����|�������j�_�B����|���������
���*���O;��)���-�]���.����C������U�k`�t��u���;�o������=�������=��������3���)���w��g?��M�{q��)������7��>�/E��\����7���8����5����%E&��g������o����?������s������.v};o��������������_��hBM�I�y�y�_D���?z���m��?�?�o�������������������tJ��T�[]��v�����X���`�����nj���Dd����2��k�@d������T��l�?t��I� w8g�����A'�f�D�7�e������)�]��T���R�X��^K�#�qp���n��Q�nn�����m������"�;w�F�6���k�����|������v${'���
���S<>����B�%;�����!Cx�Xy>A�{��>�612S�	��.{���B��ML�3�zn�����c<�2PL"��\�U�f�MH���;��~�7�
%�Dd=�a��������Q�[�;6
P�����SfR"���S�����E��P�\��E��`5���h�����	�dg��Df�&��������|�-z����y�����(�z=���������Q�*���u����$Y�u�[�(���?�Q�w
�3r�`&���Tc$���� *��Dz�jx����V�p��X�U+o��g2�~$�;%�����`������`D|&I�MvB�w��	@D��z�����1k#��������D����D��qA	7d���n�x����Xt]sr��q����{�v������"�\��
���t��1�[V�������VT��drY��GMH�FY�+��3
rc��<u�7n�\P��a��?�����fT���~Co���~c��]�N��;�N3����k���<��&�@���4����em��$��U?Q�H�S8�����"Q��h-�[����r�W�;�7��R�4�!O�������gTkV��q������������kw�X�Oo�v^B��
�w�Qmv����&��,:T�^��a&"���4��N�������.Z��B�R��k����"3*�Ha����&�Y�u�;:~�%XLd7�*%���"s�56���E�U���<N�(�F ��[�}�1	AY���s�����<�I�F��/3)
p��.�{"��okA��P_yZ����xW�f��Us���o��D���f����H!�"���B���6m�$�&.��j[[wFh������BDs���:o-�"�#�f$`�c.�m��pH��`��OH�;|���g�s��+2�������������l�X���x~S*%A_��s�"y�y.����c���)��&"�@���X����H*���J�	d@�������`������lFxf��I����&�z�a�5��C@r��[w\r=�B�,�2�=<��7�L���Hv������{gTy����M,4H�7���y�����%�.��nA(�gTo�����y���y�(��x�o"Cf��W'�{���1�D��m��x{ Z�������Rf%A��"�(��yd	p]���^4���v��3 �/'�������J��V��\��Dm1�#6�����anx��)G������L�6rq�Q[6cco?!�E�����-0�wn.�<�k���;�.���Ufe�&�vI��4���
N�i�B�t�c���3"v�3��5��mg-�>bF���_�]g	h��	`��N���|Y��y�>�[i 4���1���FW��Q���5�~��13��G�m1�GA�H'T�pH�����>��C�	�A����K���XNt�A�v'��= *���Y;y=������T�P�����@6w0�oo��]��}����ADZ�|�aDBk	�ON�6�����.F�F���=�������Y4��X�L��[.3eh���7=�Dd�n��g����T�������p��A��L�iq4��=R`s	Q����P/�wQ����z-p2�DfN�D�lEt�S9Z�}�X�7O�������M�P�2A��4�t��R�&"��	��m��xnu��		�#����L6X�'���K�-�gFIVM�s�Z��H@�)��mt��L�N���C<��U��y�#C����@�G����H�47���-��"����=����L�&$?>������MP�d�&�A���L|<�Mq<&D��Q��W��~x���4��d�0��~���/F�k~��!w���v3]S����t�/�'�	��~��e�+�X�T���1a��y[Hd�3dw3���P������ ��N�b����A=v��=vu���f�v�����$cv=��M�!g��������h�{B����le1��t=����<�o.|�]i��-����;a]V���Y��+t���*�����>�mfv"��F�B���!�"X�
;;�������;;�X���n��=����8�NXX����)1=v�������g�,�;����jJ����v��d5��B������K ,��H����M�fl����������E6m�9��~�����S>vT1�O�;-3�����E�f��neR{��������V3[H�������@�!�<>>S`�%�!W3�$�[�$�e_5���5&|rHIH@���a�Ug$A�.��7����]�h���'8��<|��V�
�urLja�]�����aYFAX��LD�Y9�p�g��c��'El9��l�G,k�c���=��@$�
<=Nk��Y��d� ��x�*,bV����V�}�#��L'���@��MDu�BA&�)Ww-�b��O]�5����6����p�T���l�i�����G����bq5U�����*->;�=f�r7.�=(%MC?�	�[*��G$�cm���=���	�L7�����^�u&�����tu[�y�2X}6��t2���J�M�ijl:Y�b����L���2hM�������fR�_��	�N�u/H��v���1/]��8U�C�@���R��	d������9�����"�!����.������F&�W��hq��,-~��Yz.d��_i"A��:������E$��zo�(�>�K�v�2���U�U/x@X'3@c�=f8x�����#�{qt��
�����r���3�b�X(b]�z��;� v��VI�+��B_2��i��'g��:�^H�>'������#s&"��`�T�������t�����Ih�]�%xg59�UX�QtQ�n�
����;���VT���p�����Q���cA|m�X%�U��He���F$> ��$*��DX�&�'41I� �m&��_��1��������D���L����}Q�!�c8� �����%��A��}���Im�%F�l���=�k����M�?�8��-��Q�}��>ex��Q����ZP�����������	�gbzz�"��L�V��l�v]����x�m�K���3Q��%l_�I��+4f"���"����RATq����Z�BV98S��w�`���X;d�xq�C�H��<��m�c|*���"4��)x���\b�D�X���P�LD��MDb�1��k�$ �&S�i`�]�*��5B�F���FT�x�T|.���%O`Av�,����K��IXv.��%���6�A���9k0]m6�
�LNH��,���VRe�Tz#jn���Y7s��G0�(&ix�k=�}&"�nY=�
�����aiOH����2|!��(+�zJ4cReq}���6��1�������Og��,)�/�p�PD����@�}��O�sh&�>vF�2��{b��x�������86h�CTSbAf���O����)�@�K�P���]jA	\��f�~= ��u��kDu�,L���vN��V���v������ViE����7��%_��s lmb�Td�E����u�gDt`]��"�Y]���{���.z# ���6�}F
�,���=��WQ�C��]=���lZ�_�b�"}�Za�����X�� ���GQ�m���D���;�k���v�����������������5������2�ap�f���~��W{�24������% �}^tu�;#�5������_��c\��(���d�h���!?���m*I�����D����h��F�s�f)�X��{#����y�fvh���e�f�� L�%q����d�����b��:.WK��|�t_��O'w��dd4���M�e�4D�<��c���`�8,����``&A>p����BJ��c&#orRH��0*)�$��[�A���^.#_��6s�g$�*��C�u���[��T3�Z�R&�
7�0��gXTQ��N[	�e�I��D��F����!{7d����?-�:��`��e�E����:�D�[D�l�
���%��e���E��)�v��CY��e�.�f��(�1��3��=���$����H�����:� �r"2�\�^�r���)
�f����`LE�~�O����n��������g�����\0�@�������#_��-!-�l��r�����;9����������?���tR��B�^����*������,*CW��J��P�f�AW7���.������T���!CJ~����A�ek��'��u~7���������~���2�,����f:����<~�����-�Gz��
�V5k��j'����d�6�����������0���Y���>�e�,��{{�N��,d���2�aM@[�L�,Q������bU��V�b��������PP��{��,Qf$2���6(��M�?��`)�u�����@���W�$���}����T�-;���y4'v�Y��]��-�/��FH�;�P�,�:D��	@{����~�����b����G{wPo�A�m�� ���O���]F%���PqJ<�!���	DQ�(4�����������,V3����#*9��
�Nm��dt��<�db]��h�Y���X�YRt�AbWL��H��Ej������D��
��
.�����8R�_i�s���g��^D:I����=����j'�������T�C��~:d�����E7e�[���/�����i����0�L��e�]�+b�7�5v#��]Q�>3(�Q���2��r����4Hpox�llseX���Kl�����_GR�.�Q�T+���l�4�HP_�:���2%jM:/.���nA�p�����������;����F�3�b�e���A���}W$�~]���@�O0���NW�������^��On�"�mM�D3lO�M������'�Q�����aA�h@��������������������y���_6^���"��h�������V;3��
�nX���1��w������0&|���b��r��Qg&�z�����ac\U�{<+N�I`�]o3�zl�W^#������(7zJ��xW����q���C�n(��Y/8Oh��E5De�a!��b�z��Y���O��qIG�����,(�g�&T�5�k�(�f���6,�Ev����AC��������/���q���H����')��o��"y�7�m
�V	i�pu��?�<��~��w���b[`�4L���(������s����\�����(r�����L�@�s��~���=�
��yG-iCU8�2�\xM�L��l�l?��������1:��s���8��h��y����LBn�
���=�zd��|��#�$�������.o��������l�����z{`�q\7=�s�8;z�q9��U��y ?�a��	^�)�i2|�f?|w�M"���!�����WB�K�.QH?������x���~'��v����E�YL��+�%8�p(�ss C��	�F��W�T}"��f���x��B�<`S\��a���
$@���%�6z���8s��:mH�8�ur������.�'hY�2��N�YL{����@*���3��vL�� ��q���I�-4��e���`�gyu��-(]T�/��naL���V��G���e��~��h28���2%?������G$��x�%KnR�?5�2���'���?c��5����X���`F�Dm=���q�Y�����J��mHeupb�����O+���3�`�6�0i#���c��D���G`_7�����/�����)L��O=�@:�p{��Z�����T���9*�������Om.�a�s�L�����-~��������5��E�2�[��h�~�f��YB
�H2s���e����^'{#Kr�>������Q�`{�3��%
A�=&�ea�':k�G'_-x/�Sd���S���f>�.S��k&#�j�
_��>�{�F	�
<1�r>��y������W�����:8y��LD��8}4���3�@�YJ��8PV��"Q�����|%;�L�0D�l�=*�h$��T���\i��y��t�I���>���D���*Z����JI���>mc�LD��==�va�Aj����j��j���k���2���������Y�%P�P�����������(�x�*�Z�s����@����>9�HR������0l8c�h^�;�8��Dc�����/hL��Z�0�p<��Y�C#�q��o�����(���m=B$A������]b>�~2�����y?��n}S&�,w���+q��4�@�����&bx��'�4���sE���Q����9
9x�yY���[b���bBDF���Lb�y&������r<p�S=.=����r{ih���<.��\���V�q�k�b:��	�O�x�������!�q\��X�-�@3��9�u���D�k�����uz�]I���i�%X����|b��y���-�H��������D~!a�fg�D��A�|�0�_�f�����3A4
{��*���;�L4X`���
I6(�(q��j��e���*6�MH�D},o������'��B%h�Xr3��]9�-�>V&"�1�����6�|]I&��2��7{j^���(�Kv�K1a�}�Q�*�n+�Z���\�����s�u���7>6n����
�
u���{_�������G_~3.�o�����B��_8l�x�vv0h�����>��{�d��S��[�a��u��i{�f����d��S{�/�#���@���q�Zy��o�i�����(*�;�MMn=�m�m������10�J�:��!��<m��!R�*�W�<��Pptt5�����M���
�F�|2�{+�6�s5�M�t["6[
��x�����~���PG�o	��?��b�6H����R���>�����2XJ�YF����!CV�N�d�$M�
ZP(���%Z���E}C_mz�`�[��a�Gm���;��=k	�?!(��1T��H�{(�wE�������=E�A�x�������E��f���qBZ���:GY�s�
��`?�,�lX�3ea��V�Fh|+�#3��y�k4�������1�7��B���vAc$&���w�����|����|�����amk������L�x��y�m���Xk�L�����p��]���������I�8�5�H�G`��$�~��*W�N�d��Q�n{�i6u,�=\i�8������l8���iyX���JBc���=��T��������88����+�bF'��A�k��A�h\
�����#����&����"P$I4e
��K�����W��5nE��&��NdK�K���+�?���|���F�6�����G�y���~��O��g������_����}��?��/l��x���Q���p��s��S�?���sz��%�b������v]����W�J�������Xd�[�\f$��^*W���E��	@D���!���>q��h �����3�2��Xf,��P�YNVP-H�&)9��r�����"}��9�v������/���%�\o�]n}�/�SRw,B}g ����y�l�p�D� ���[��Wg�~t��#��'�<^J��CF_2�u�X������^�9#)
Yj��9�����>����J���U�
p{��Cs�C		�^�(J�(6�(�<��q^y��D4k�]X������f$E�����g�FP���DW��:�05� -}�j�4<��D�Hw�;�B��R�s��	��qz��y?~��J�c�P6�5.,�u]�+>0L���)�\������V.�vQ:�hK3�K�k2��O4�@�g��ZEC�����DK
O.�LD�UT����dG'�`���h`��	!�-DY)�{2�3�C�@N�?fG'"�������l���"�=�5�s��be"&�1�z�hMg$@WC��*Pe�tFR*�Z�q������)�7���hR3*Jt�����D�:!���Z��F�i��\�M�X��jF��~D��)�dU'�qD��*�������d�������T�-Mc�>��y���X' �������^�K��VH����
��a����'���k��U�d�fS�X�����hQ9�0$��G�:!�[��&w{���	������m���)�J�f
C���t)��	��}��j�nP&b��Tye��k���6�7�y|��FuBzu��2�G�z2�	���O4��9Q~�*P�&j�5k	~e?��])��'($���]�,j��E��U#�A���aC��A�d�?&b)4��uF�\������guFth������2� ��������1�� �aM�4k:#-sa����:1��3����N����aN;�l��	��{~�K�>K��626S��@s'�����`J]siK�n����.W��7�U�m$Y��{���e��"���2���#�]�.���
��p����g�{��(�=��N(��O�-���(�zPx����~K�� n�&����>���?�D����D�Qe�� -���gBz���;�������42�*�
*�rM�o�t�[,�LD6��2�������s]e-qGWj��>0j�5AM��|yVnV�����Q�O�9���_5�n���u���n�z�5~f�f�x����%����Idna�Lx�"�����Mw.H/���F/����-7[��G��.�!6�GR��R0���\��=t�^����N���>�����<!-������A��[6��������p�S*��o?|J�z��P�Z�Z��5+��|����&��a~���e����05|�8A�����e������$��f�(��r�qwR���qNQ�?%07�3�W�27��m83�eazh�2���F����9�3�����D�W`>{�lK.�]4��o�{>�C���(Q��sc���+QM�M�n���Z��?Z�~��_�<OH��}R���	���	���y�e�����Y��H����#�.b������7oT<�Uf�K`������\z�qI�n&�s�QL�u?v��q�]H��<$��#��>��������-+K ����]n��^���'�X��;xW����8X�7�����o���e��gB��y4J�G�<����T>v�W`�����vX]��	�c1b�����(3���1�4�����
��k���%�Q��"�RL�v����$�
98'�Od���#�r0i������q7}��zG�����0-l5��:K�W�l��VC,Lz������	U���2n�;}�����@����V}�7<�I��������k}hBv�k����F��L�N��������	@���fed�yE�������v
P��R"=�8��2Pr�lcu�,/��y�e19;�{Az	�A�@$�
�$�����;������Df�h��m����:�*����b���w�W�sss�>o}�YF�Z��9��A�]�^���vXko����������N�]P����?jW����&���;X}��V$`��������`M�wjk��]���p����;F�����p)�uD�`u���5�p���������^*��g���]�	��l���=u�o�������J��>�'L������>����N.��K��b�z���&���a9#��,M��f�I<F�����������4���^����iPBL���bX;���n�
�����[��_��lr���DD�5���I���e6�����,�zkx���MqB��M�h[2�"���?�\�w�\>�����#����!��v	Ag�������������c��cS�#~��B���>mr>��V��:qVg��p�E`C�&�&��*�a��T��21���&E,���Oee�1�,��g"r��y�F�caU�$�����U���jB�t�g5D�JH
u���:y�Uz��JAR*��SD�K�.3!�F�t���P?����L���-�%�j3?�)\�R�~���y��$����E���/�������0����t�sY�U���{��lv�YBm�a�uT���]#3�����N7b�3R��H�����L(���
A$���8�����\<88�����$�>�������Jb'�-(����������xzl�@>���y�+��i�Z�~�����_�7!|��6�^�
(����,�_�3bTD�������OJ@D�jNo���|%�d�
O������������&q����0B��5��GNH��#A-�������VXdB�mqsUHH�M�G:?��>�$O����+��T>e3���"Q�<Pks��R7��f+�*v�g��u;]�!gpG�m�{�����}����Jk#������60Yt�5�X���@����n$�p\�L��K��z\Em�M���mI�]�T�)iL#Z�o6��Y����>@Q���S	)�R�\9qHq����(v����J�_o&"{�H�'�&��f���hA|��c{]�>#����s���s'BE�Wi���37��5�U W\���6Bo�e�.�Br����L�n�z.�P��Iz&b����w��0��+��]3:!3�(9����	��[�C���4����C��{�_hny��(�j��T�UV�	X ������?Egd;x�d$IV70�V����x^0��"n�J�~p3�L.$�����Z'i&����EY
5a�"-��pc&�v.���&l�d�������#5f�.O�m��cwf�Mn���=d�ai&�n��2�>�V��)����9,{���7���HIn���cO��xF��<�p{K�'b�Gh=����-�3�$*��D�
����}�Y$��OF~����>���0]S]0���0V�6S���n��f2M���%��P2���)[��z�����(�
k�c�M(�l�`��c[����g�Y���_�|�pG���u�X�zAzk���[x��3^��f���W-������TJ6����9@�r����'��Uw$/|�m[��)+���z�A�7O��x���WMND��#h�m��;�K	h�����{���;	Z���DN��������	X_��F��� [p�>8��mY���{:j��NH�G��6��0������P�"Q9<v���&�m�S���8;�De�����O�s��K�����u�����{���y��]��3�Z#��T�V�������W���-���	��PN�a��|����-�M�����<n	�;'P9&8���@+&P9&���`�R����P�	����@���>r�c���\WNp]S���g�S�cN��9��Kr�O*I�1A��9����3%h�$!�uJP�W.j�1����&�����F#3��*����E@��O�;����G5��1��<��U���3��b�{��3����{����v��S���)�{N�?�rJ!�nb
�S���)TN)��P�)��[��[>.��Hw��'����d\��`�4�iS�os��[N�g�iD�<A�	�l;�F��H�U#�T�����?���[VI��&�Y��N�#$��
9��;
��N#�!����n�)����DH��F�(<E�8rORx���������W��w��"���9��L��G�.B�cI��9�6�i�@�bt ��)������.$�!E��tt"LQ�W.����n#�8s�u5�)6�l��sl���k��sk���j���;5����4����4���y4���94����3����3���y3��_����|���\���<�������������w���������n��=������'�%�1����7��������s��9�O��3�/�-��)�;���9E��!��m�n�H������S�<���-��-~t�������:k�'#
y�����x"F����l �������D
~3�X�. ��,�d"S$���� �^|�R�z���W����O$���-H_$q���t����b&ROO��5��Eq�y�5(�w"�X�$��O�X��X��P�`���PC�T��H�	��O,�(��/����eP��!�+J;��pp�����e(���9��1��?����S�x8�����?2����y�3r�LT@��P
9E��%�A�_#%%�{1y�/��4!�E����H�F	��X���^sC[�������%��v6�	�&�(?=�(���I�+D���X~OTS�{ ����p�]�~�x�vS�����[Co�t'_��De���rdf�&� ������5'����6W��?���(#�M�(��)@y+����<n
�@Fs�P��O�Na��f+#��-��{����L�PBN6n���'t�E��o��L�+�j��m�;�>�Z�={������@{o):���;�cf��}�����+�������a_-H9�.��/KhC��2+���v;�@Sn�e�����jp���]v���$���Tk$��������<��%�xW�M�p�B�fo�Uoj%/��f�����b�6I)�O���v����3�L<F.>�>#���%x���$���H�`F�]j�����-j�2�)��*����~�r?�[%<�����5�vi��4�!�<Cs�GE��Xh@?+����c���1g�v��K�����P��.�px~#Rk����G�]��X6��n#��c$+H� ������'�~��L����08�5y�����L��<IT����9�y�C�%De0ma�j7����0+��Q�%���D&I��k��YT�ry��zz��~��U{�{@�;&2�C����H��U`��ysO'���D+IGNRi'��Mw(�G�Nlh���Dp���R�^v��c�;d�M��(�]g���v����v��
p�s�K'���NDe0�����D�z����j�N�k��+
���x�9���oY��V�i�U���{l�i��K8��U�����?�_�{>_������,q�m�g�rG�����xK��N�����JhTy(c,N5�-2��oO�����\\�=���?���t�R�IX��n��j3���Zt�n������g��\����������7%xW����et����z����oD�����`��$=���;�����z�	r#x��kV������?��$(3�)eX~b���F�c�t ������$��������<�L���F����c��m���*A=���Z���w���g����,��_�Nt$�?R�
`{��x�v_���r��5���>��gfv�*���aP��+R/j{2���w��<i{?�azg����$yo��:a�X'm���LmI�.�'y��D�|v�@{���Pq6��������wE�20� ��E���~c2h�P���v��T�r��R]z�\b�=9��h8>�]Q�Ms*w�������C�������R�?("t8�A�N�~�]���0k�,B�v�@�H7Iy��0��5>���Mv��n�&�
�nF�Np%����8��b���>��r�������Q���}�wE��
�[#��<T���	�b��������y1��m.&{�>Q7"����{���$��P��zJ��3J	�_�������'xW��C ���
�I�Cqh����5��#�eMl���Y��������A��P�3Dj�R�7���1�w!6��Vr��Q$��i9UE�s�*Q,%��\����c$C�����q�-6 o�A��!�A=<F$�Y��ha�L��q�#'�V �Hk)bf�4��o���^�yq[��	�X���F���o��H��w���Xq�Z��*w�m�B[y������"tF��+��6��|����}h�����W<B��\6}>��t"aH�f�����i@��D���,��4����V���y�Y��P����S��r4��� ��
�~��99-x�G,����������zL�8v�b&����\9�R"�1��r�e�r	��Oq����?�{T}���5����g�����M�����o�qF2U2q�[T3��"��������N�p����t,�w��sq�����w��3��n��t�kB>%aC�.���sw��Ir
��cT2[%����29��fJ"���6g����%X
���uU��$v���`&<9LJ���y}��Y�H���fE��N�(�Tb�M����,���Y�w�b�b�\F!�1������ay���y�F�V���G��������L�uU�.	�@��w�,���N����#L�P�
���/�����d�����&�1�D$����1�=�mw%QLK������bad"2?�&���J�=&"��1#:E)J��|�*�	97&�x�����	��-/�n��� ������qb�A��5@�@��6�����]�3*�(�c��06#���4���y���Hd������m�bYOHU	��n�P|X�7�((�^�1)1G1����\_w������%�������o�_���BEnc�&}F��c�_��eF�y�2`�9�J�}At0����h��l;�l���\����aR�'h��-(L�������%3n0�&]_w<���3�\%��JF}A�\m�����`�&�����t9���~�@�>�~���^4d�vn�`�'"���m�	i�'�����Td8�aB*��)���`�$��e�vU2����=<��L���rL(�z���3Z�	h����r�{���p�����~��=1t��������'���sf�X"�7�e��U�a`���?��Up�E��J�
�>��Z�Y�?V��N���1v��[����h8Ufa	\ZM���w�,H6��b%�\��+c�x�^�P@*��`'���*��%]�JS�L����yj������`���S�He~�8��f�Cm�Tf&Ik�l�~���De0!��D����N��c�$+to�$��_�f�`�.3X'��ee	�5���W%��Q�d0>�fE$�[,.�y���|J���3�g�����b��
8!����d���m<��=[�Y�������� �H������N@D]���GA��k�A�HB�4�Bxk�BLl(_�!�
��	h�x� 7��.j�jSjX��D�Y�"�YH��M"�����v�n������B����(x����b@D�������ET{�l9x��������#}Q����*&�|�k�%����eL�����F�����6oBA��%i�y�$���T���76��f�[Y���y�wG3�2u�wEh>���G4j��������{>�P�����{���f���A����S�g�Z(���}&��8P%�J����*��j�����]������Mh`�|�8q�c�=�=qA=�!�p����������o�7|A?�Z%��OF��������i�	��1����:Q�h���D�Os��tG��*��D
���XA0����u}��%;F����O ��-��$6��:M���H
{w'@@{��!���G�	h��>r��e�$yn��@1>@T��q�@D��L�jZ������e��+3���+�xef	�xe���+3�k������+]M�i/�h%#�a����8Z�QIDG+we7����h�\���4X��a�k�S��2�&�J��lc����@�����8���H���L��4�����ee�x����	p�����5g�.�_O��������������w�6����� ^��H�A��T����JA� �A�!�Bx�fG�:���>�L.y��H�!���ncj�>����f^�����(��	����M@��������#�� 5|m(0���TI����l��^�1�'u����e:����G�G/�(#�����D$g��l1�K�boF���)F���Bob
�3�>60�`B�W��X���y����6��C)�E!�g��*����������Q���A�YaK3������������R��s�_���^���������`��C/s�'�Y,v|eJl�|����+$��=�R`6�����4}�9fy���Q����x�9?��8v����/s��b&�{���i�l/�x�&���Gr�M��]��Q$��A��.���F�Y�;A/�y�3�6#�jQ[ix�������|��)�}�0���]X�����K�������Xg��S��� |������%�����f2>/���F�<:�3b��7�n��|K�@���pT������$m0��t�L#�\n���2GMW�	��7�V��'�z/�/�����D��`A	�R���nm
>���A^���+C�����dw���2��w��Lk�}�~w~�C�J��f{�L��dusG�d����l�����?�D�`��Y ���u���wc�4��\?��y���JL��2��_�aV�!���f{_�W�s��L��M��T�s��f���o���@cSj��6o����P�P�>�' -����rT-����<�k#D��D�c6qec! cpJ��DMHA��R�����
�X&}c���X���r���N>�������A`4
�O!��A<��f
������%��|���L�*������h��F�},�i���n���t`������:*9�&��{���>�0C��^���A6�K��e��Q���3����������N�V����X�����;�@b�����{���n>��r�p}=m8��z�pL�����������O�gE�@[C�k��}�nUSbm����F���?C!��&R���kza%��vZ�O�]�n�%�d���7������2�_�Ib�l��V��)`G�P����%��Y���$��\��<pV����Nt�q����LI�e���FF;gs2V'��Q��EV��^\��
����nF��3�4q�
�]!�f�X,��Z2t��Tb�h4�@�j-(��k���^��e`,�0=�
�"y�����������sd}g��&���
 4��`��������2�����>�|w����"���@?���m_����Q�+:[��"�I0����,$<�s��m���E;�0~G�!��R�G����7=jA(3�^e�TN�5B��C4]������w[
������q	�0�$r`��v�_�p������Yc�ow��g�������H�������pD"�a��	i8/g�n�����O���)�>���E2@����T�V�/O����E��3%�����v�c��R���>�JeT@l��?e�XL�-�[��CQ4��x,#n���/2�Zg���>���7:���"-�D�V��3+��� ��u��d(��F�
22-������
�.H���>'��&�]XT%F�=�om4�:�0�����D�v��[Q���n�2�X0^6C�'F�R��eD��)h<u���~aJ|(��
�^�����)���<({�����"��6����gBh1'��(�}�9�y�J���M��[�V�d�n3.�\ �-��)�����* �~7���s��
�����6�_[�p+��p�������A�Q�NV��'�J+�P�@/s/N�+�y5��U�������w!E��\�*yU�8��S��=|�����go/��|.�j<���P	�x��/�}x7��im��8!������kn0�[w�?2C��:kVyi�+�2$��2%�6��[:!T<�bV�\�4�4���u"�(���p�
�8�
���~O��BT���@���f��� Y�O�I�7p8�a�=#K�n|������\��^��K����q�~a��d9��s��"R
��	N�����@�_�zV���RF�	�n��H��Xhtl'��q=
����Q�������/>������Z+2�'����DYX���q����:t���n�Q������a���y�������=��_*�&�l7������X�;���}"�$+�d��]F��r�?3�'�>�o���mdtbZ0���SW��3KU��I�#v���^���u���H��@.;]�����������w��eg������V����		�A3a����������S���c�n[{��ef9��pD��]o�"3k@��}:2��-*/���u|�c������:�]������^����L���~��6rW���
�k��]�����N+��Z���@#+;��RB
����waB��-d�,���;�iQ$�H[��!_��cC����{@L�PGi��<��a�'e�!��f�^�T�5^5��,�lN���N���� �utf,�M�_�+���{w&���lTg1s���1�bU�e
����yi(W�)n'��U:��v���Z���n���.�	<�)A��P3�OG��)S(���+����\�h�hI�3��.�?W�p�t4[��Y�i�K{����?�BB�c,�=���8r��D6�}v�,d����'�@d��"]��������:	`;��cW("#]C aX�����������^���w	2��Z�Z��d�`OA�����S��}~��q���F;F>o��_9�t��'���Q��E�,W�H�Q*�����;[?������"�������v|�p�Fx���F�5t�Rc���t���L����V���K���V�����f���%����vu�y������<���<B����fk5g�/S4�0�I�nY����	Z�������u��/�ws���41 �H�y#~�(K�#�=����KJ���V�{5���"���
��@��=��d�c���{"P��G?V����9bF/x�}/��H�=�e���>I��(����?���r��d����,L����,T?Ng��'F=�/e�#I��9&��X&��7m���(?/ �Y<��7�U������6�����9��QQ���][2��2&9�����KYsK��^�>UaBxNPDZM��bF��h����U���R+'G:4�����9M��
i~���T��B�S|~a��/�+[�a����fvb;,x`����g�!{x����U�
�)��)�?46�y�DO�_o�;�����d�-K�������'0u��M�M�_���>o���Z��u��s�_L�'x������D��/Z���"1m!v�U��rgh������
-H���d�5��Y���@M��7�v1�B��B������B����@���@��y*$0���HcG�S�y��-���d�cg|��3����AG���<������;�Ar��A���Q��[c�`����XPs.�*|0^�H�X��c���1�La�y��[��t>/����y��]��u�)���)�����AZ%��2&��'�#���<��Z���G�w�cJ\�h���MI��A�A=�=�D$fm2�g�x��'JB�������$���aR�bF>o�^�F�az,z%��c���iP}�k�H<1�e�
���f��A������m�(L�x;P����� ���^����;��M,�[c��G�����
�����
?l�A�R0�M��A�?/"2����2��a-'�!tR\�[�
�M����v(��Y�N��
dn��/�=&C����*&���0m��D��[%S���''��6���S��kdA-����Sk*V��[���/,��������^�������X"���"L`b�B����!�����OL����f�s�LE���
YC�����%�d6&%5#�S'������/c����eqOe()u1n�
�8=�+5��fsem�R���d�-u�b�ucf�A|�Ip��G���� �HV��N�G�1�XG&��	�����l�z�I�o����[�4�e��N��se��y>��O��@�d�����[����i&��%�~�]�-�������d��e>`��eN�����e6,sa��e>XM�2�2_����0�\ zD';<Y7��4�1n�����{	:a���f[�Bvv�n�r`���y�Q4���.�)�i���px0�`�0�������2!L:�l�n� �s0��,|0�:t��y��o7��G)G�,,f����
sa(���y��,��2������Xf��x��"j�O�c����M2�e>�b��g$�����8S��b�+��]�6;;��	E5�Y.j��j1�o���q�b��q�2�	bx�����#�D�t�|���/��l�8
�(��5����^(��c�w�WR�Hc��uz�2�CX�(O�wF3�������X�_#�������Cd�j`V*=����;2LDN����rE�1d�}�OB�����0���1TM����o��V-F��":_�A�z��bb_f��?�
��������bF
al��v���d����V���}R�-E�D1��8�D�g,��s,�[����,g	.�����	��	&2U�S&$D�p4
�_��D�fp*����B��]�9T��������`���<k��-�u_!�E$H��`00��.�����g�)$�@p����Mf
��<�[����N&O:a���_68��������B(-��a�":�T�����L���$W�_���0L����
-�#78Y������I���b�d���9-�Q�"2����j<T=�����c�{���/�Z:������_ BA������5��j
��x|�K[�n�znx�*8N���G�������q*�:lh���yN�+h�rN�%
�]�v���Y�;?}��}����Pu�<���a��F�BP��|�l��E���zG
4����DK�O6����������CUc�@������h�U��,�����[��R��wIE���Oe.�:��L��{�m�*j�x�g��
��>$��1C�oZS�4����{OKM���F�|��O�#_�R)��e{��<��L>��X7���W�����Z��:g�� ����-�o8�{�D��Agl�b�\����=�3|�x,��i�$�_Qoi���w�#���|�Y�z.��� ��zO�i�L�4��6zB
��HZ'g�S��K�-{�nIs�ae��9�����+.��}��t����v��n>�vDR)���'�o�	�S~a?}�ea!���s�u�wB_�X�L��� ���+��f�:F�	��|���&��Pj�1_��	���$�|���cLcZB���B����m�O��?�Y�4�0�@�~�C$���	�
q���AK�����`Kt6Cf|�$��ou-ySb�4�U�LU;#8�E�?��t�0#���x�r'F��L h7j�,�v��%9�vg����g>�iCTn]%�(2S���+����;!�K�����J���L�98��;C	��}x. �f5�~�q�X���|
mP���>Ih{������#�G��Erk~��s�iO�v`_��*��\l��!�p�t�������s0�j_G�+��~k-r�mcs�CBq�n�={#��Qa���H���P��|����--�,��h�7�6f�t�x��"��o�zZ�)T���@��'�-��i�����K�����g�6l��������pQRa��������+��yk�na�����n�vR�]]|D��[#�ncvR-}W������"��9�j�f�c��Z��������<\�e<����m���n�u �}V�v����K��u��d-�YE����Z)��#ubl����|��0����y���w����������W��w�
���9G��r����
�����)\9]��|��r��H��J��7���"���~�����-�w���n������������K��w��ND�f�]E�]!��)����x
��W����]Q����S����{>7]E��e
��R�+^K��������_5�]
�����������p��H!�/k��������?}�M.��~.�y����%�v��,�.�����o��������_���������(�6���������/9e,���~��X����Ed�����Y���
�����<�d�	��
��W����?4���LP:�t�^h�P�HV������{#���"�t�_Hf��~�#�P��������������!^h�]o��!7ki�)��!���X����.D
�����W	y�#���6v���}
@�pv�������%�#Y:��"�!�O��A���,�:���.�e����j#S5/h=h�����2��
[@��3=W��\<�o��(^��X��F�U��S����M^��%�D�1�$R�&��[��9v�XI�u0��Czr$��]I�@kGwF�� ��t<�;pd<j'7F5�h=��h��[a]����Ej���������_
��Y�T�:�� ���������$����s�0�����j�V��}��8|��$��~�x������W}��),�Y���������@=���X�hJ������J��'=��|�<�`�S�cG��	����C��g��$Y���^P�NK�n��E���!�/�g��Y\�3��*��D�>���/����[o�������K��$�[����v�OG�a�U��}���(�[GJ���������Y��7����,-�����h����L<p���� ���5Y���%�/��LPl���;���GOYvx��m������j��U7���zR������%g�IO3�w�H��G��
K����	����PS�����Z!��f����(�'Dmy8b���X�W���Crd�����Z�I,e�m�C%�=]z�nE���d�������p�|�od����Z���`�M���/��
�}S8�Wga��Z�U��f �%k���]w�BA�qp/1'-�����"�q����pX/RPdE���K�-D�����D������Ez�I�����A��DAyH(3m�v�[P�@�k�
��c���_=\W�_=BSb%�c6��&[���8d�HAD:S9�kc����$RP�^D����;@-]4�M�4;��J�E��	��\����5'1�_[ZwFh��o��BD��*Z�	1�*���E-�c�e��\�`�w����Y�COI�u�����@
b������g��7q?5+o�JH��
�Q+%�U��[�[�>����@3��9-B"���'���d�~���!�j,m@"O���f-�����r�4�G=����d�a
h�����������e g�/p��D<RPa�t>����#�+Z[Rr��V	6�r���eW�<�{���N��X��]C�P�V$yq����L=�D#��2~���|��<����be��\+�w��!��|����k��
�O�	���_�FY�w!s�������p���L�E�`�U��	�jH*Z��k��3��DmQ�26hRD�&�<&���g'�<]��%��^�:V�3��S_h�r#� �P��s/���������_��(�@7i�\�Z����*�-����Z����gD�8+z������{Q���{��8`���6ZP�Ju7nK���2w��R�JQ�|������]Y^����,`�L�y{rG�HB?��a���j��aH�����{3��h�)98��GY���������Q3��5>0493xO"j*	�<p�c��|Y���=�9�?��l2��4�t����(��|���k�yO�,\���@��X
�1�{m�f����I��L5ex	���G�<<��[&�{��x�
%T��K��TZ4���	�G[C�e
t,����������(mf2B��b��	-2u�	����Jo���B�����/���E���.%���4�t>�R�
Y��	7������^��������p�{�a�d��{RU���d`������4i�
MorT��xh'������&����.���~W�"��yz�d�F����k�"�el��T[�FZ��g@��'|�OF�����������M-pD��r��_�����������k�fmZ�Q�X&K��0#f���W������u��>U�����0L��J�_DB�B�O������������>=�N���C�"�����^���4�]�Ab�������A��r���2�)�a���D���V��ti��8BN������G��.O4k�]��t`���a����g��<�|�f>�����EW�����������0��lER�-��6�mv&Ku��'YS�2�!�K��v���YGjgA���K�����>��Z��c����E�'�L�,Cp����6�b�4m$K/1��XM	���t���x�r����V��E�,�i�^g����z�ti�s;'��)�	�:'C��G��N��hKz����b����tC�a�LP:Z�i��}:�[�<���Y�f>�%��0�����U
<##�@�=wO���S
K!.4��%	��T��������"���!!����?\���
���5��[vGV�����~~�=�!��������@X��W�����3-���;$aa�
yn��d8������o�-��A���z���,���=���
DY�sg�a-����w���w+������E��
���x~F�����D\^����t�BD�5��QJ���8d>C�hR!���}�,��6�,Y��d.����/�4G���j��ImEH������X���L�lI��4��x�m�
�~-`�����z
�=��-0U7���zt�}`�l%�����t�:=��@�����H����m_^(��
���X��Bb�5�&2�S��7����m�~�6�BDI��N������j���L�$���	#�!�B k���T�O��n�)U`!�u[�"���*�z��($�*��\ 8K/���Y��?�����J��	u����TO�f��/�����EN���2X"�)�qB�n3/��h7��[�!�O{���	����M� �F"����%���J�Z&+E<%�.D�$�7j�^=���b��������dE	�#k��p�����?{���G&Kf��
a���XY��y���P[�,-�mu����P�P$��
����G��M-V1�h�#�L�~#9�z�	mr����sGEr��S���u�*����,��;�qH��,\�9l��7���	W������-�� 0�{?����0,��s�Kh�*|�h}�;%�MK,<�M���l���#�S<l���8Z�y�x��4p��p��d���G���KT���i�R�����[�[P�����F/;&�U�������M�Q��D���=
�B���Z�L�w�4�DDdr	����u�F!K~l\��<n���(�S����C����t��z������9���l�/>yS$r��������1�)^fQNTB���K^�����k>>Q�j!rX�-Y9=[-
s�*��Ubn2U���L��W����z��5!�=]>�|����'P�]��]�f5�����L��X�<�����i��
�Jj&�zP#��s�A�$���"|9����n����`��x��{8����+�3k6>um�$��io�P�"���Ew�Pn�����uH7���U�����Y�����M��1F���
��20�5nX��a�_���������Q)�Q���3{3!aFg[$61l��bB4FZ;b,���L�
I4���X���"7{���:uXP��J��R�����ZA���g��������c!�@�]8^L�i�l&��}+��V���� ��z�"MdU:�<�~Q�6J�8Dd�l�db���v)���fe��"�m���O�����������M@��5�@Z����"���A�S�����K��w"�{����e2����,&�����J`�o���%`
Q�<����K�U�f����*�������q��}����'��WK����cEY���_,������*������R�7�7~�4�����t�U=2;5��6=�oFH��}�V�����"	�hD�����Su��	������sh�w�|<v��9���\6O����Y`�2��v� {�8�����tU7�����\�i�d�c��9`E��q��J���)��N����F��h�e�l��B���5%5�G/��{"���7=���������4���{��.�����/&�P��/��
���F.������|��F�6	�@���I����[�}1��y�lAy�G�W��#b�P�N�����A�d��
$Nc�-|<����e��/����k�j�:AY�.�4��_��7��7
�#{���8|��h����wk�.������zl/���pO���.�QC���[H ��\�������Ed�����d�%��������h2'6*i�i�"���g�~�Hj@
{�>�����]��������. *�����A��_B��S�������f��
j�+'6�J�������AW7��E�
.(�e����� w(���I�v���k��$�
�~�|o�;��|�xG���L>��e{t"o�y�K2�|����8��>C����y�f�*so�% ���wa����T6�'�q���B�,8`��0V	��
��E��)Q�@�_�uc����[R&I^��]����L��e�u��-(���C/O=F�U�d?����F0���9K����,J�����	`���{���2m;v: �/doN�,��G:���n8�����u:�/����m�� �L����~�����D!�v����g�6��������]���.� @x���j9�.����(�'����W���2�����H$j�"�������-�����D�k((��=����-���:���|�H��Dj�����Dr�(z���Wd�MCm���F�a�_95��CX�����$���p1�����%����j�=Y����	K:�d��|W���Ve�S�Y��Y��(��b�q�i�5��,�K����I�������%0v�H�����]�2XqJ���99	����_���J
�2��g0���/�-G�8X��j�io�.�}x�jOB�����k�C��u�����c�]v��osc���Ye��V������I�����Z�>���Q���q�E�lj���y���4M��&2"����\nN�y!�D4�s�� �g((�u�����-��PE�?}�~���2B��t��=w���M�F��4>n/&]����K��_'�����=!?j��a2���n"&��^�������:34j�9������D�t�c���#B�0
����0%lE �n/�����t�7��F�*��<!*��T28Oh�@�;���-�t�G�����_���K8� �����P�8,�rI*~�N�,x����(N3�
(��������j x�+����/��L:��������������cT<�!@�*!)�4�p �<<�����3�;���M
;�~�Q�~/��m��t�"�nk���U��L��������r�_��!�o8������H:�����z�9��$���Y���,����t�D���1?�����������l����O��>��������G�'2i������Oi�o!�����tUN�z�p�On�q��7�C��h�b�@�#G��?���~�%�;>=���\2T��t��n�M"����u�#��9\	e��_b��m�
���'�<�,��C�N LOu����E�XM��+�%�,< ��O��_N��5R����%���m��@��C����l���0�92GHL1w�y�����f���94$GXj��$�|~�{�3�[&��`��bT��9��`}0I�Pg���8�������]��wM�#A:u.%Qs��2�6�C% ���P�-�T		�i��i����op;�~�F�'������r��if�O�~D"������r�����Z�nJ��Wv�����DA	X���-�z�q��8N
��q�*��q�K���<�<�����c�b�xD��lW�-s��
|
A����3�7wN}���w�v;R�09��z�#L��=��kj�d
^h<C]����6��#^������AX�]��L�� �� G�l�S.�|��}�ncQ����V�:����6z��5�,\W���A�G�v�Fz�L}������Q�d{�F�
�0��2�
��ep�s��Ra�W���)�\X������E�B���O�R�
��v���i��
��k�y�M'�W�d�1�d�����`p'�J�
�:�]���t���}3P��"�T�E��H(L!�"����V�����D��<���_��F2�$
B��p>��L!K��_EMU_t����%��������%��K��qS������CG��a��P!�~��f���W��Q��`K2L������#�}�Q��4Q`����mE	H��+�T�o��@���6���K4�M�[PN�������/��
~@��p��X����~���":,��E�@�����G�$�q�y���-��;��}�:6���o�$�eg�Xu�J��:t�{\�:��h���[=a��g�7g4��r���g�*K�sg��f������tQA�,�Xs^�[�(���vt�'�=��=�?�����k�)��}rF�I-�g��������w$� Ox�����LD�������VeH�N6G�g�g��D"��dy��k�~q%YA�6��K���&�]���"�-
Lz�v��I�~w�"�A�nc��+q�`aP5,L���Ybes|>d����V����!e"�U>xfZI��BKU99�dC�"�pG�ia~Ab%�G�6a(`�V�o����W8�����"0W}��L+�%���D������Ha'd�Q�{j;����/��oU"�]��~�v�����Y�����/��a\����9~U�E�nE7�q����y���!��~��qzP��v�{'��	�������n�l2i���&��~"��d�i�yF�a;A��n�`2C9U��az���=�~h`�o\��#�~��w,���F�n�915����i�����oz�JZ@�6)]��v��
�N���H��d?��n,�X`�5-p�A�z��4-��9�3������-��L����"4�zp�I��^����#|�=���B��������-@��z��Zwx�����5g�"���s7���m�I�I��I��5TQ�,��P�,���'�M�.2�-~M7��5�L����������}+j�>M�D���y�`���{"�O.�(�[�=����>.&�4��+�*��t3��;��h��}�P�x��� ���0o���`z�Zp����&��������wl@6t��X
��<��zv�k�J�����{���?������s�*A��I2��6�qa��1�����[L��|�^��iqm���O�-O�rY	�'�Z�d�������)�,k2J����^�")��bg��7���z�����q*�.[`3�����.Nq�:��V�����8��o�W�������A�co��2��|�M'�\�t�Gc�L,�%��E6�H�������'�����~���]6N�6�5_ke���#�y�r�������?�wz`s��~��������_��?�������?�<k`���3�gwg^�F��x�t�x��>���t�t���C�8�C�W�D��z���(dP�t�����le@W&`�"~���7����wr�.,pa����h���l�e���LFr��(��e����3`F�59:w�����R�y/d��0����!�{���[%R����m���X�����&����=���@�}d
Y��?����#�|���"��)�z���-�3�A\�A�����<{@�Bm�^�
E���x�hE�;S����[���K�;��q-���|��x��N"[�
9_��zS$rH�d%�7�f���+��T���
@d�S��K5��_Y�/K�i�������{�)�*�����`�ic��j��{d��1��~�$_u�Kt�[�|^L����!������3�V6Z����8d:3��kp�hE
@�(�v�V��u��X7����[�L��6�N@��hCZ���u��s�6���P��Y��V���kdtr�b�0:e{b���t��F�g��km��,h��8�����d�H
���%�23�3�EU���t����O8��|f�di)�z�P�h=Z���dC�u��U��;Y��/��d@��(���d0���n�L��{>EVtnj ��V��\A�[�U~�64�I5l�J��R���`�\��=����h�M)O�9�d����M��=��VOKm��n0���L7���4�I�aS���c�9u)����I]���`Q�ZE2��>������V$����e��4�Z���6��O�F5!��2jV��_2�5L�~��nV2�f���(V,�r9��qfXjR�O���;����T�����f�8�`���6�Y�������i�"�C
-��r��gZ^Q�3f[1�)��B�V���z��i�K��/���������`[9�M+6O�� Y���fZ��n.��p���F��
�H�j���M-H��:�b���w��/����$k�Qj��M5�'��uD����?jT�O�I?o$�daf�w��������E�q�{f��rl��!���J�-��of��_�����5��������5
I��xr����3:x�q��{��Z���v�w����?��B��;)(����Z�1���H��������t)O���"zS�Z��G�_�z�c��E�F�7jke�L���*��d�c�J�V���/�~a����C��QER"5�R�A�z�}��� 2�S?�_��|Dj��Kv4�2��[����C��;�K�Q������b��m��GX+�8�N�=~'w�^r3~��r���YcU�����y���r��������������v.����z�B�|���\�5x�"��J�m������Q��%fA)�#��?'$�1�\0�C������\Y���2��*�=��~�GH�-�������!��6�C�����&�"�_��3������b�|�$����i��B*��2�q�t	FrUU�H����W%R����hS��UT����x�5�L���^HN�>��o��'o�dY���=;yE-�x�L�k�
U������9����F>����S�i���~��5�P��_y�Z'cJ,F��X"\K\��[(��,���V�h�5J�,>��1����^�������O$��,V�8����4�H��p�a2p��,$!j���G{s�&�7Z����U���!��.n�=�tr��X�~	'��GP����F����5	oJH6�����7�N���\Y�a9f�E8Te��c�Z3���D������`1e����T7���c�yC��n#���"�^{����k�HT�`t
��i�"-v��:� ��a3	��p^7	����@^2��+�.�a�����7�
Z�m���A!�1a��+�����%zLw�����h�m��]�)��y�].{"���\ ����|~��mM�����5-�>�l��?>o$�y����e��(�	�%�n*�Wz���ULh@ER8T8N��0;���P�j8��>**�5~0������2�)�K[�g��,�o�c�7��K�;�Z���Bm<�v.�F�`��`���/�I���<\i���~�M�n�~��J��X�kP�����3\2N��@�Q�d�LH�/x�a���w��=m���-�e=*�^�9WW����h���U��[����o����{���*s�"�<*�=�{r��2��B
%w����uMf�.�e�������t��=�Ujo&�Z�,���
�������In�v-0��W���^�S��T�S�c����P�Cn�l��[�M����9��r��J���q���%2���5��1��T��ja��{����!��N��L:����v����{�������,7���8�=�KZj�`�>��h�L=����G���,�[O1V
�S�3���\/4M�T �E�����i��{8����s�64��|+i��%Oy?c
~�h��J���N�'"S���s��Y���� )�z�)E!uu��F%K>+@�������SSZYP�HTq�
��Lv��DN%jSA�4����)�e��"����Tl�EGuJV��R�5
$(T-���=�V3Y���-��X�I�9�.e����ID)��Q4��Y/IzT�����!������c&[w}����_	_�v<��a�L��"�fr�#2'���S3g&*��
����WS2x�3x�
6v�Av��	u#:��7���'�����C���-��Q����re�#C{�><$t<�E3����X��#7
��l�Q���Z(�br���5������������7K�2�`���9�6�u��\��o�;	���z�E��1)�u�|R5tm���9��o<(2��VL���������)D���,��e�R��.�1���:9��HA����]	�@t������<��t��>�96�����V��J
�����2_�B��%�1��x6yER�K����!d�Db!�s���������\��x��V��F��W��;�|"�����^T����B>/����ND?�p]�����D=p��-KTx���	��z���S;���p������8��������{���^�/�+�j^n�����R�N�p��?�0���u�����{�9!��%����|����<%i}EC��Z��\�?�����$c������O[���yJ��2�!�SJ��T�b�������o�w#��q��M1E��L�o�C�M��h_�����������}�ze� �	9!6�t
�-�Fr�<@&�Rf������
��={3#wP.9�U��u3G�������G�����,m�q���I9ci�6^he�}Q�Wk�P�R��S���z��;E���$���R����+�6�B�tsg��F����P�G�^��wh":&�����y�<m�/2c�9�����i�[�B�'/���0@�0y�1��t���%�+L��Y���I��3�r����e��~�Y$O�=4xp���
q.��_������zpgd�d�~�DT����ZQC,)�$V��"x��|�U���?F�p���m�v��������Czf`$��y��Wq�NF�
�cND���q����}��^4�9F8�
�(|��1��9���v�ae���b(�~%=���U+�����S�5�_�~��4�_P@���c�3�'��6�-'�Y�������r4
�.�-"6eGMF�z��	���7+��I��M"�<���->�s�������8-i�"r�?/�#�u(@'��)�v��
����Ng�q��{G�t�U\����4�q�n6����E��!U=bWS��d��b6��:h
-1��:j �C2��$�fGg&m�&���n�=��f�J���
b]Sej`�mR��5�`�mf�tU',@����u�d���Z!j�lu�9���[�~;�������Q���#������93��s1��a����A���Z���sk�t�����r=a��Z�~�r�rq6�����W@��H�����|.��D��y����D#De1B�,����4�83��{Ph�fAb �>��qj�������^�����t��	9S��m��
-� ��������������a��e�m��4�u�_Le�����O'���Xom�������M�t<S|����,��}�O�v��q����������
�fT�M��������X�m�O_���w}������D*H[p�)60���=H��l��j\v�T�d�m� 1!�H�\�5I*�c,n�zwq�0A���i�lL�^eB��-t�����=��;���?6�KRyDFD���i�������'��e�(���%�J:�a`�������4�a}�E%�@���]:�i��&����o��@���z�]��G$�u���p�8� ���Y����Za8k���Q_�����@�}�i�X�(/������[�S�9te��C�5cBl��6<�uk]�4k��'OY��3M}xw����uF�������D���"���\F�+����������b��w��������pPGt�F��oi�1v���q������*r��_`!�.b�����>�W��.r�W��|��}��P�����*�OD�]i�����\L��\t�V����I�$=�0Z����$�����if�������������f�������f�n7���v��l�3�~���~��lw������?�3�,b�y�?���~��E�����?C?�����������L��E?{�Y���Z0~1�<f�y�������[�5��sR�A?�����|��g��g�5���#�|��g�T����*�����?P-���u*�s�WH������������3���|�b�}��w��wYf��C����Z�=�o������w������b�=�����T��;������!��#����\�Q���L?�����
:Rs����4bhMgn�gi�=8��=$#1��';���K>�[�=�*��{V�^�z�Z�W�Y+^��N"��u��b|�����������f�O��n�O��w��~������������Y���������������������[�?������n�����������������~����Q��~��'K����U�f���c��{���E���1��ec����,:���Y4.{��[v.f���[��k���E��g1��e�b-�~�,:���Y4,{��Wv*f���S��[���E��G1�^E�
}r�����_��u�BMDp(���A��~�=pp(��h��Ca����Z�=�o��KDp(�����D�=���ODp(���A��,J.��������vH�h��	b_�����kk��%��T��1?Ddd���$���"�G4���6I�����w�H��E 7�5�4�%��Id`
�����-U\I���)��;���^W2q��c�	������/XQ|���M{�'J>�J�z�
�-=��>r����z5�q6���|��QNp��w%m��o��Z��������S�N�tA���G��h�)y�k��Y�T��x��$[��8�b �����h$d$`L�s
0��.B�e��D��d=���r�M�T0dU.��^g�����6
8'�~���'26\��nh`�dQ��M�y�.A��Y��d����5�>��'��C���("�EW2d�HW}a�Y���w"/���/JV;���b���O��c���
�
Ey���v%~�!��|���J��wh���0dr��l��[3ym���Ma�Tjn�6�$��j%Q^�J6��|?1: �������^�lo��+DJ5�I.+2�����'"�*�-#�	�<�	��"#�iD������H1U}����x�������V�^I"vB��L9T��������3}b�?��m]���\���/fUL����[{��� �K���� ��Z
��!���hV���y�!���(m��B��ho��2l�:��i�(/
8�Rdt�6u>����6�'
G r�X�l��]�E�Z�������.(������(V\�Z��JWkHvc�,���rUe�KSA�KD�<0iOd�o��c�����f�[Q�i;��w������;�;�����T�
�LheDF��yD�o��Ar�V�"/3p�����Cf�L����0C>9��SHo�K��Z2��T"%j���]�(^d`n��=��;Is�x��	����1@U��y���~*��8N<�%[D��qC�:�~u="��iA�'v�@E������zqO���e�/z	n.��$�Rg|5n�?/�-�M��?�}�8e>>�E=����M�jm�~R���W[Ks@���p��Nm�E�����u��I��h'�c���L[%.c��*�ZWt ��jw���e��P�����/21�l`o6��]{�HB�����������t��M��);C"S}Q����j���=�)��>���������U*�OX�G���C�������~�{
��!n-�xs���(���;�.k$&�`��������(��<7Z�~�F�n(>���.����:��D����qS��L��DI��5y�8i�������vh��F6Q[|�����5:J������x��/q{=�'���A,��2����V�]#R��7��y��(7�d����D�W�r=Y���_C�<����iV�k�����=HrFI������R$���d�a�Bt���d`��?�T���d9/��dqM�G�=(�j���?$���|����M-;v�'�7s�?��8ZH����G�O%�_Xo��}"��$��Dw��2,�t�8�Q�R���4������1���B,*)b�U8L�d����D�"Z{o�p���7LR7�S��h}�8����>n'��C�0�����}`��
&C�+I������.���T�aSx�K
�"����*���b3��Sdk���90���v}*�~�z ��rFw��"�:��bS]��w~��C�������/9�]���3r�9y�^�w����0�N�4���O��k�$��!�G���������V�a���M����%��A�i�8����:���~�R8�7Z��X`&�@��c�a0H3���~�tg<h7?��W�I��l�E�_-����}�*'��(^�GL������L:N,�Q�m/mz.B=v�����9��%�����Z3�51��T��
�]��)���:&�����!�=D�M8�=/l��������h�Zu]�o��w��an^tPS������n�;O��d����,��3�������PT-�uBf0���]�ap��_���8��~`bp���Kf=�����7{$�e����r2.���.�,����8}�K����%3�/���Clf�<������pqJ���i���r�$+����|�V� I-)��0�=,�
��.�(��M���'�*��"���f�l"[l ���4:��*��&i���]���6r���W�X����"[��KG��d3a4�I������q���2���@k�M����Y����b9o���~E	�����������B���v_�6g6��"��M��>0"�UN�LId���&���e�VdeOm��:����8�����J,���)�A����q��c���kC�=�R$�a��&sb5�?/2�&�kW�eA����7��L���
""�]H�w��]������
+p�A@�0�@�����^n�=�Y_2�������$��B���3�����kJ����E����X�e���(�D�$�����x�=������T�P�f����1�
tQc��?�>��3h����;�������(��8��r2�������:��2hK�p�)]����\�[����.�l_(���^
J\�d�������7,e�my��:����������/��m6Y�S����
����	{b��U��������i-f�_h������D���~a>-rg��S��_�Q�=����E3�&��*�D����R#��HJ��,*(��)��88�@mS%K������$�l���bQ����m��P��^�
��aW�B�<19LOF���e\�V��"�$�7>�=n�y	_�2����BH,�v[�L����O���������Xoy���OR�f�(un�_h����;�@��p�yO
��������M�����h�X"m?V�b�L9�Q�cwS.�����BI_�'l�_Y�X�|�@�gS^��
-H�s��Q���ko��,���n<���V$���a���������������>D�����^�%"-i��JVe�����
o���������%�6�-�||������+��6{H�XH�e��}�?5�F��I��"Y����)=��EE��sg��|!D_je�$���,���>>���J�����&"�
6��B�:{�����y1<f�.Y�l��t&{Ex����,��G����"IgYl �6n��3$)
�Ye��c���`����E�:`��=�	�$�pB�Y���	oI�+���SO*DaA�n��&I�>o$����U%(�����M��0���J��Od����$��=]��[���6�2�S����|�$7*^�>8/,��G��$��7��n�
��3��;{6��3`rP�&��;�U������I����x���4�����a6�����CS����E$���d�/@����W_6���,����Y����Qc���Nay!ytlP��NM!�u���B�y1�3H\�	��@VW`�'�����S2��!��x������u\Q��3��b���,���T�X��_=q����!�u�{������_��A��k�jT3Z.����tM�0y[�h�����j-�Z��	�N�!F|����t���P
6�IVH����FR7�
��
7:7��@�o{�%29���'�(�����nN���)8	�xI,��G������<��OR�������D�M�m\��ifr��4��r�x�����x���6`���+�% ��?�����h��O�9�p��%��	`}(������~<�V"`�RQKD�������h�)�)���{^��9��>�|��G[_r���e�*
���g`ET����3Z�u�LW��Q_G���ebya&�*���M<����]F?�)�,y��+����h�2d���u����(&��c-F/#��;�gz��$^EmS!�5����$�D���#��q���al��r����Q+�2�x��h���2X�7oI�=�!��U���6T�uF�$����l?o$z�c�9�4�^EXP7�([/�(#����^!]��J9���{��U$-���8����+L�5�l���������X���y���`�:�����=����"�I�=�&��x���H���-�,9���\����;����(����E�8�;�w��;!8�/��hM/����`�_H�.�"�u�_I���z'3�	@u�cI�t��w���h���d�=���hK������7[���B� �'�v�=G�{���%�N�Tt�M�Jsp��?�%�6���{Q���d����)�c<����d��Sei�U!\��_��_M]�[y!Y�h�����4G������^��Z`d�#���z�0 7e�dda87{��sn�g��d��L@_����NM���Y�o�{�U�N����S"r��*������T"c�J�,cwky�I��Q�����]3��lV�}d�_h���[6|?59���Jv�?�������;MC��5��x��D��B>���[���
��M^�Wio&�QK(]��
B!�f�v�g/�������<0�f�'����\>�-�8���E")��X���9�J�|2y��wZ�qY�<=��{5D`��n�j+��C:{�����/��}�w����m������`�
�&d�=�W����Uw�������;nMw��@VN�������&���%w�/CF6�"hD�{-��i�0�,���X<�-��j�lH1�K�jf��4ER8�h4p�K��P�qm���'g�+-4�68,;��=#Sd���'��a���[�z$h&C-lz�y�h���/U���g�E��I�	��%��)[�^Q7Z�p
��N"���sl��J|�Z���h�Z��@!����t���6D~�j�xo��w�N��������MC��������[�������e�������"A�����n��0�,�[���S��c������]��9���[Qs6��#pP�N]+[QH,`C_8u��p�����������-�&E�<���FC�,�=�Z	'�L�:v`���O������IV�~^L���08�0T���:�T��D0�|	% m�m����;w.Q��I�M�~�W,����4A�����u��N�B5\!�����M/�*%�X�I�K;���.������M��N~��������6���it0v-k6��O&Q�/5�s��FW��!.��a��XR����z3z�����+�V;�f��"�����Z���j���YSY>0���M���Jo�	)�:����4CRje����s��S�|�&�so������g�u�b��_���-���\B%W��/����M�MiH�C�/���B���x�d�1�gd���e
J���pG{"��E�+��3F�h�LN�/kg��i}<�k��@/7���T�7[�S��b\t���d[@�@S�\�V��z;p���&�0#��f�.S���.+7/+d`�'�����P�/h<:�P��
BY��`�.��G��VM3�H����`},��|;Ve����j��	��F�*��V����)�7���mK@����2�����_�6T�CHK����wj�T�������2z��{�bHD�#�qxa�Kd�����G�H�8z�
�|TMbAR'R��SW��[��Yv�t�F��|[�s�{�"6	�*�
�}9�������C�����gC@���2T�f�(���~`������B�,=���������-"���v2����?,S(��-gg�{
Z�;����|1�q�,�-,�=��������Y��`�G������3�&4(�PH���/AW�!6��}^d�����������a5'��4� o|&�6!��|]y���������$c��;^-��S���;,��J9Y0(�]���.��'��#�%#�6��N��U��@VE�"+M[ER6q}����x�V����M����n�Q��*��?;��F\a_�R<.����U��d�{,d������|2���a~��4����Vi��O�O{!|/��"�.��Bh����#����&���xa��~����Z9X��2�"�Sc�i{!���`UU��������j��drL\"�~��N��H������
���m3�����U�`�c��_E����o��&�����f�}����_/2�d�k�@���pt�#:����� 	7de��W_��J`���lr��jv�
?/&@�D�����X��Id��9����?�rC���".k�ui=� �����H�'�^5$��x�j����E��%���|�K;8���N�"
Z�p���'��-^fz�-�E��fU�=e�Any']�c��r*��V�$*��F�}i~���=���|^H\���p�_p����@A��@e��\����Ep�������
����"'�
;����������=�P.������d���y�B��;8��m��F���0I�������A� ?�G"�e�UY"��kS	�+�P��@����d��f5,Y��	k4��fd����������!��zLN�,fX�$�5B�B���&����e�/
�B>/���CqKLi�T���QC��9t'����I�BZ����F6Dy�Cu���<�9�9&�+j���i������H,p�����c	4v���y�@���]�%�+��Jj8�$T��l]tj�}������'Xjnc�6��P�w�#����F�X����d���cwb���Sc)�����?���+����jiB,���-����>lO�Y��c*�����������y�P!?��+�\��@�Y������7�~�4~X���4~P��x����e��\�E�nH3��WAt��}l9~ ��A��Sl�� "����f�wA^�2�V>D�{!~`	��#~H(��I��������<������+�;W�}w�����u/���R���@�S(,9� >+i*j�I���������5C27@]n���N�N[/�
�[�V����
5{���d��=��)Km�GY4���f7�Ds`� l!~Zk�f��n�+
*Vhy�8����,^d�������(j�����=��<��F��F�y�v����LD����A��a����.�����������=���/�M7��H�#y�k�Xs��?�%��Nd�)��Q�B������������'���f������`R��g�d��t$(���Aw�-�`B����a�\�%���T[=�
��"��)D*z�m3��i�?/�C8Q>��_�s��_��BJ��b<����.��5��g��@A2E��D6�t`�,�2O�;Os���0
�6���h���� ��[4��BYI����D���gc�9���a�F�"�w��r!dToK�F"~��$y���F�v�:�u�|'1$s�8�4�-��,N�Y{�"��������J(�_&j@�H�6�&��&3�b	(^!�����S�f2+��_�� ��Q
�X�9���w����+�:����M�����o�
��@���Z�Q�����p
����U}�I�g����WU�<�n]�3�7��,����3IK?�H��x6eF��R�/N��g�H�
����X�|�(&K���q6)�H�eY�����\,���B�b�����1L�L0~i(s��4 �6,��>��Y|U5���#���f�#��rx���=���F��C/Kt����'��$��8�\*�R�z���G@;�q�IS�SP�K3���d##�"�mAjA\t#�����io�s�a&��llp$5�6�3o@���0\#)a���[Q'%2|�I���`��J,�����3F�I�5��}P@�O��X��K�MRhM8'{�=X�=-(����8���dRl4��[nN3��qW0��mi�d^���t��=~
���B�K�4�\�Li!2k�P
��������)�:+e����b�*mb������nw���K���p9�)�$I�I�B�WWcZ��H<o�*rY-����Z��d���,)7x��� ��L6�W�0��^�p�-i!\)����075�fI+����=�D������3����PC	g����8X���&��m������a$����Q������S����f��6���)������D��hLozS��i�����^�h�2��V�T���#DP1�^�FP*{�o���*9����L��H4Z��,��BdU�w-�����	;X�(���(�+���x4��q/"$%���W)�(jML�>�?/bQT8	OMQT(��L�dQ�GQ����E, �Q8|,1�����}��:g0��*��KS��b�~��C)
`���xi=��d��,�r�d��� �"����i&G	@���S�o8�����FLR�-�PJ<��7?B|�u�y��f�qZ��A���}Y%��E�U���B�w!dU�iX���������
QA���U�#DQ�ys_,�i�vp$��SG2
Q����H���1��Dh��T�^t=3J���B�U6M��P���B�B,Z����F�z�v���c;R3��,�m�C���v���3����2���dJ�OR��}�O"s0Gp�6��"E�W��;c�EX��h��D��e�������,��N(
��&�5���M�y�F]-_��R�x�2��x��o5u�v��P��=�8���E��M�Y�)�@�Y���e{��K�*��&�����2����(��>�S���S<����\����&�=oA�H>�
��<�L�Y���R����%�W&�9�hvgt��8��WjB�v^�x������sE-^d���������\����K����D"_�~�|Q4g}G74����1��]�Bg��U!-��7k��LB��@6w��X��3E��L:�.R�S	���kl7y���7!�����������<�w��%3i���[����PT}�[���f[o:gwd
_li��V��;"j�qu`=HK��G�]��+e��#cI>��E�2.��t�����?�A1Nv�R����H�y��z�pi�A�W�J"is�1�]���+�f�v�x2����w?��PE�S�j>�yF !.tO2p�O]J�(u�g�����n��wln#�]�~����*vn�$gi^:������v��Xm ��K�!��Ol'Y;p�N&�W�������mjAz�
��QA�K�����D���h�
�?X�%�� ��$zp�C��;E�)����Fz��!��%��7������[X����dK����o��Ks�m���n[V��������t��x��~��19���$�i��3���$Akit���c����E;�[�z"��<�IG4hm@��aj���(�y����C���O�Y���<�6����8`P��eC�HD5�����9\(����2�����w��]g���|��>%Q��H����a(>��c�v#~���1�Br�$�
����IQ�b�x)�Lmge�U"��������L��n�88+$Oz�DsD�l��>���+��"2;d*����}0f���w�����L������\1������� �}�	88�aSC����t������9�x}$1W�3CPd��3��"��������K_��V�I=b�H�wT���H\<6��e,���b�H���)�K��3���0c�T��������\���)�3*6]���OL
�4��L�������k�S��Ys!���f:i��G�&�D�mHyZ���������'���*.na�r��K���0,�l�Zk6#-w">G$2�f�����,�'�f��%��*�gQ].I�,���kV����c<�[zqQ������UL�wM.��!����0����W�>qb�.���u��9��wc��'�<���O.�y�%?�\���}>���1��|r����2�UH����[�lb\G&\�N���
���~}��c�>�(�kK�I�(��1k��~}����}<��\��>��-�������������K���%�)�z������������E��{����]QZ���]������������������/�w���{�-?�WKm�'v�����H�F�	�[�/
�m���o7�q@G��P���@dKiG��O������R�C�%H	J�E$�p����)����-���}S2;��.��g���j;CxU,�"O�q�x�M��%}Av�#=2_Ig-��(�q�s���lgQ�7��a�|��O~D��pjGg�N%C����x :���B�!��t�����Q�:���n���$?bf����� 8��J���=O���dWss %P�E�4nQ�f�MH�w�]��������#Y�]�zv�n��.��9��K�ZA8-�H }��LJV;v<R��3��;v�s�"N�f5��<(�j�m��d������LVS������/���V���		�!<��7Xf4���V��_�<����SDC%������d�d5���1�
P����������#����`7��AT���
d�cm�h&����by7}
�������>;���W"*���t��J�������r�|_�;	T;P\�>��6�\���^��C���d����Z��`?������W������������Z��o��=��c��SQm8LC����Q�u-��$��u%Sz���������G+�XkQFrZ��KMH�FY�O�Jyg����k<^��������� !�b<u����c�����a��	�waZ-8.�#�����N�C��_��d�v�;M�^v�%�������=�p5u��g2*i�+�e%S=�u��|B������e�B��-������_�UNe���S%�=]��qF���4��.��%�k,����F����b��7x�m�_�%��z���M`��6��%@�J�k^9��HD������M�C�Q�+O�v����C���8�]W38��QID<�x�e��&�E��R��}�o	�?��H`� �9M����q�! �LJg�2�v�s�PQ��@�k�
3��($eE�z��U�OwMM���� �
��82KW�=��AkI�"}�a]����\$ZP�^D����v|Ce����h�A��D��iw]e����vg�$}�Is����= m���c�#���\3��1���i��f$��1��6��y�������a��$��y�����QAq
hA�}6/l �,��=�~8*^�|H��
�c��D�l�{�6����D8f���z��@pn���}"Z�3�+7�����	���Q�Ai10��N�dR:U�UE=�0��C@����;�Y�����@sh�91�Pa�T>�����3����W�cU�3�����{t��'_����o�����P��H@�-���*S�� 'n���DBf��+����.vd
sI���1C�/����|���w ����$�Jm�m�u���@�o���6{j�o��H����/��!��J�d�~�stF���d��0���Y��&0��+�G���2iH/�:�������OH�Et&��/yr���G���:�����2�,�@7i�l�3���*8Z���
}-S�1�b��;���:�Rt��U�>bFv���_	���$�mtF	��v;����eaZ���^�Zi&4�������FW��W�_��A�����G^�<
jU:�b+�Y�i�xo�fTi��Oi�%��kl����l��b���8BgmG����6y0-��o�<dsQ��F���������"p
�O=�H�Z>��2�|���������������EgJ���Y4��X�H���f������Ddo�L��M3��S	3��%tK����b������h25�=R`s	Q�E��T�����m��I���L(��S<�$[5w*�u�w���x�	����)���@P�s�b��;@S�����#{��t�g�uiB����#��p�{�i�d��{��2�u��?|f4��I8����]w�d�8���&�D��S�a���E�+-lR$>+��h�X3i����a�5:��8un����C�2]���x���G)L�&T5�<���m�D��8�a<�1#!S�	U9��X����D���@Bk6�)��	�������9�/�-����@%��%�3����
��D�_���S���Y�<�4:�g��;m��o2�	����3p
S���$t�#P��>;��c?G�F��~:��N���9������������r����.&�7r��=��v1#�t�����>�y��y�q~v7�<�bB��[v���;a]V61�<8��iy���>>�mfv"�����l!s]��e����
�v6��Y�dg���6t����V-�c�������i$bz����g[\�6���[��������VS���O
�a;mBr��q$���i�^e����zZT�6���Ncr����d����l>������p@c�������t���#A�hQ��O�tf�FR�k�g=���z��n���2TH1$`0����aI��mXz�	`��" y]&|r��bG��xZ���93Ijth���Q����(������`��l ��c�e^����H��f��,�IAX������r�|�X����'El9��l������x���M2�l��#��P����o��;	8������"f������g���DT�q7� {����&�:n� ��T����\(6�]�3d
�&�D����$������l�i�����g���@�q5+����V��6��;���u�7�=(%MC_�7t�TH�G$�cm��Z�G�O��	8M7��-�N?��t&�����tu[�y��>�z$�H��L�%pQ�l��K���b0f"�u
oY�&�m������D��F����S���R`��f�����e�ya���<�`=�H [�������T�41gU�C��{�2���g`�D�1����QC������]�m�A��o���L��u�v�`�"3Iq$�����`;�$j�pi"��7sN
�kw?�&�������[V�o��{|.��^A!
�������>����"�#]>���w"I�Q��z����O(�KzJ3��������gx%{����`����r&"��t�����i�BTw:*A\����z������b;���������_f�p�h�#��Y���6����ms��q�����J�>��He�i��$��'d��D%X�����Ohb�tAn�L����3�	��%%�`48����p_�e�1t�ppA�z,h�XsY7�G$_3�X����BD� 0�����JL�O�,D���[�����MK��[���.���3J`�	'�lU�>����	�gb�Lw_dC���^�X�c�-���.H����5����>\�����'���������=n��_PL�R�����-!��S���c7��-H��� ���/�Q&�ul�
�����M,+����ol��)��L$D�6��P�LD��MDc5m����	b�C�i`�]�*S�!�"p�P3���=�ys�Y��	�6Y�w�����oa������3��3b����� ��
frFZfaxP���P{q�\�����!*��C������q>��DV����y�7{X�R%�1G�h���j����bQ������.&�Gm8�OL���o��_��,nR�_�)��p�G6�4���o?�-�^�������H@^��}NnVOY��q�{�\��Q	�����8�'�li��� ��L���6n�Z�N��e��~=!-�u8�|OkDu�,L��*��a���?��y3"46��*-�t�����b����33�a��G��������j���Q����e��s��qdq��T:�j�,H�q��������#�"8*jB*{W��������]��^����������X�� ��X����b� �'��<�9�nn�-�m�����������^Rp�}�;n����h�Eb��7�T1�����
@@�
/�:��d�)|�������~��J*hQ���!���n$Q�cM�����~���g!YF3�m [=Dn��q��,����7r���0�C�|��(?�H�����$��y�!�D���,���'��B�%�ji�,�u����L:�����FH7����y�y�����J���,�{�	r�0�L�\-#��qo&z�����y"!�aTR�[��n
R�H�t���w?���H�N�������,}bY��f���f{,7��v��d�j�����I�-
��H����wa(�
���T{|�LP���v.��Pg���#[�AR<lb���2o��E��.��]������b��BBF���3�p
}��!�����(�b{\z����"��p��K���	;�7�U�h��be�y�����h����cY}~�K�[Z�I�	F�$��y�+q�f���pi���������L���������#J�/|f ������gw�}���G��Ae�k/L������T�����*�I��|��M2���)`/����������8#p]��{SV���'��2�W��v=_Nn7	��Q6�Q���o�����N�3���`�m#�^�7����p(�*pG�����D]c�	��?��(������V����w&Y�]P�=�����}�60~3\_�7�,����wY.e���~���8����g&e�9��	��d/�*2s��~y�d������ Do4������$�9
�Q�fQ��m>o1���Zy��Q��G�����a���h���]�	��<
~iC���W����@<]?�,�e����	[�T�(��
���y����	p�>DX���GIr�~�aVa�'��K;/M��^2d��
�������@�P�i�v�:��i�?��4v�Im� ��v>
�^���l���M�R� ���(���x��Y�Q�4U�����_)�'���E��� �$��Y3<�z�����2�Xu��[O�En�y&nt"#!��0��m�|����ZNm�Xh8�,���Z
�8Yh���g��}�	��}����
g��3�j��x��c�r��|7b�E�H����8���_
�8G�7[G��\�zsN��m�&�A	���Ko��	T�*������I=#J���l�}��D�������T��
�8x �(WfI���
rk�9f[�@j5kz��M}��&:�[4�]�_�BTN����BQ���1�3I��i��b���sC����!��&'���Z5�����$Q�4�vo<ei�u��3ApX��@:�8���K���A�.�Io_�{�M�g����C*��=-(���+>�Agg0�?I�3�7�[�]�5�����f�Q�0;;�_�D��Z{^\�1k�'����������C��p�����8��:�����"� �3H�8������~_��(��K�����L���\��{~�;{6�=���%�3q��<�y�HZ����8J���F��"Y�IK"]z8O�O^E'��}&ujEs��u.r��?�07����Dn:I\��	^yr�)X,'�Q��f���\��LX6$�pa$g�C@���O��Q-����G�=z����uGG����]��!�D��x��<�iD*�4"p[�Q��_����G������mE���������h_uT*j&��fs�c<fP������������2�O�#�y�Hq�&�p�$b+Y��� ���t�?��
�u���Wv�Y�����3�����\I_S��d��L ��E<R�h6�E�N�;l�"z�L�L�%*���������`��Yi�&�>���dD�O��j��@K�����lQ�,��Q!�n�����{���}���M��
���
�
���
�V��N[P6��-N����@�����bZ�������&M��c~�Z�=��(�G� ����#�u�{dk����>Zr� ����s������n�ke����y�7p��{�7�@I2G��e���E����1w�n:e�N$:@+U[��
��Y@���r�r��'�!a������,�j�Yl[g��\�6oqU_���T�����45O(>v�M����f�����5q��$V�U.��i�$zW]4b2���?��f�w�' ";*��#�1Ka~�ns�L��������l�����v����V���F���{Lz0�@����Y��XO�����`I��-������s��������0o���W2�F���b'�s��W�9�6���t ��(��u��:��0D���|%��]a5�6�$�������gg� �J�A��Y^�����,�&FY��!4%x���B�W�FaD��T�	T��_F1U����h�a���D*�X�o$��e(����\w�/[��q�TM~gP����5��(������F��p?���\��D��;��;�,��qC���N2�����,���*��Wik �,���!��]p�9�K���' ��m'_"��_%+�H�������_��H1������>� MYP�X��o}l�F��+*k5X�R��B�����\m�fJ#��h��It\��������F�z��GPB�.��]<9�<�$�h���E��������{>W��"W��j/Qd�,Y��*p!J�Uk^�_R$YG����������I��������2wY�3J26G����"�AeBv�tq��E2���+>����b���	��Y~�Y�1��������:hT��5�;'�&
��L�nd5����`���*S,�W������<�K��X�p�t�����K��������;��N�&N�;R�����6�2}���`��s6������a�����$f�������K</�rq@��Q��0K%5������~��F�����������d.oX�0�M����nBX~'�T��I���� D��.K���Z��8@�����������f�B#�F+U;��Y�	TfTQ�K�=�F3���In��p�/���
Y����tm[���'`&�B����twHX�'��E��#���DF��u�9���(��qc�����db��`��m���h�O���0�B|��L~��_�N����Z��	4�3� ��Fu�2�N�Z��=^wK�>�9���=�8`bI�(�=m{�uY &9IO���
#��@�!UF�H�g,����Ah\R\�� }f�vP��GCNl����1x��g�!+I�A�@�3���q��q�P=�0��$��:�g7��>	{�2[�MKY�;
�vZ�M�w���@��'��I=����Y>q|��~nIe�9Ci�A���z����bia�2���y.����/X����<��3�z��\���������b��l�FD�g��A���b9�hbQi�!1��X��;�'�#e��yR<r�4�����i�-����snb�L��<�d`^���@�����\��a�O�,lAZ	�;j����0��Tl=�m*v��n������c��]��L���3��q�g��t��$*[�^���o��y�{$�H�:�
�[~t���
�J�5To����mN���O�6���������������?�_���Q�����
�O&�mw��l�����!��������4#�1_����nit=jm�5�h�?+J������i��|a��q�t���c�;����r/�>��hBp�s"�{q������QB*��0�u,x�	�*c��LD�,oZ���(�JzW�V��Su[�&����@(�l��������O��Hf�p����DZ#Y7do�-Z���)]��eE�m;���w�|���O�H��]L	!}�� ��Fw���3��nBR+z���1��������)�;�1�������}��uq����i5 OL�U���HK��z�=�=�q��������"&����0�#/pX2�	iE��
��VU%H��|?]���@�e����=?�S���Qu~��5�~m������^�!<O�1t�HU�q�3�ER�Q���i�y$�<���N$d��#B7�$%[��3n�@�H���NHs������c��N�b�U��C��]�InS��\(����4A�aV�$9�HB6��T4����l*��y�i
��NH�5.����I�&�<�dR��OGf>_C%�TWX�IK�+���5����T���I��:�
��xH��8M5*���iLuV�����|k��d�:!U�0���H�tB�r���:�-����L{��5���D�o>�dkz#�������)O��#(Y�M��G����5�AaNq�fj��l�w7c����e4�<�1�i3���)�wnL
�lL]UiMG��9�5�)2a���N(3�v:arSg��[6�7O�JFuF�S��e$�R������}���n��=��L��M�qB2��,o[�T�2�hUof�H���T>�����5���HU������Fu"�
s��U}x�RrT'�U�fu��72B���%�v��N2�3 ����7���e�����u��3WuD*_g���a���O�(�{�7�8f�:#��S	��7?(U�����n�W�5QQ�����X���D�foS�htQYm���g#{cMj2�#�b�f6������aR'"��q���^ou��`���[�:+������&5��Y'G-F~�I�����L"�:��A���|����$v�
����#f�G �~�b��v����z*�}��%�3GJ��hJ?>$^'��,��{`�&��#D�s��s�-��H����+MB�U�^�����������1�����w��3����C�oN�&g.P�����?$<���v@b��		p��e�M��7��jRa$��mP-5���H�8�5�>���h+Y�iv���@�(�7���'������@5��U����� �4v��,c�HD� ����tC-(��v��r&����F�t�=6���5G��sKd��/H_���5�b]�x��E�����#�!���4���]�
g��IT(��}�[��f��&�����x���20�d�o���},��yry/�/./�����1 $���i�*f|��D�	�����-W�j#P��l���������4 f���q�k3{��4���]IB�TQI&�D��c&�9��"n<�A���:�?{��i��f��!cG��3&����������R�g�w+\Mr��H �����#K32 ?+?�F�����3B
������u������r��
<����]�w���q
1�J/��v��-3����.�-5�H�����0�1�����$ pUi���K�we�wH���?	�w�|�yJ�E�nK94M3�Q�q�H����~g�?&6���]����{�C�y��P�\��I
 �Pd3��������.H�sD�j���G%J=���?��*8���C���.������_�����0=k$�KM7=�MQ������������G���K������gx�a(�T�)�OA��g��e���&�R���	���f��zp��w��c�����.uFz�������}�v�w2Q�=u�B�g�O��k
� u��y��6/�as���#����}F�)?.Z��k�������H�������*9m|�	�3�e6
�����V�,l;��N���a)�]gT���dg�@W���>+"0��?X����|W����m��b;l����J��3��[57!�x�
��������YO��,#�������~G�o6}�$4^�����8vA��-�Bo���^�I�n@�{?\�R��������$tu���_>�<�
o3���6 �s9`�jr���tA�-[';L�MZY�f18����Jo���Go3Y����-]R��,���tX���U���-�rU�8�����x��N;~�q����f���<�j�=�����p�����;Y m��@�8�=Y��2Vl�E\��k�q=i�V}U�����~#V�d��f����o��:�A�N,4]_=����Y�h'��z
��U����:�)�V����L��	�u3�/��%g6����7��&������l9[�� -��T��\��3p"�k`���6�,l����r�����<�D�*����VJ3����/�LH�}����DC�1���}��}�Y]vj�����`�pq�zq���F"���j�w���y,��~,;�����6�=OM��/�7���$��Dz����0����g������R�D,�<}���N|����!�4�rYv����	�l��A��KF{�)����3*�/���g{u�Lh������qZc�I���c�V���9��y���!<l��I����&TF�����{��B��#��/W��jN��3|�	a�����e�-s?"�o6r��~&��H@��G��@���3��U��k�mTc����6��k�����#�>���
[|�4��-�����J<k$�X?n�?���`nh�I��$1"�_h��G�\	c��x*����������k}`������2�3����6�[%�)�CF�
����og��H������&���j�_��K�����DT�Z��L8���3M�I|�1�Y�C�`1�_Z�����V�7[A���]�V���?��>O,�?���������q
�U�����>_��p]�t}�|b����}��������/H�U���>\W1_?���yL��s�~���}������� ��Hf��!��}����w��}�~
�1_o��6_?�����C�B���e���{^�pb������3�]��zSM����s�CL��B\�����os��X�6���&^����C�QL���_s�/9�?]����}�1]�������s���������'Y�6����l�vC���[�5��:X?�C���|}�C���������P���Q������}��}��K������C��n�������}���@1]�n������z_�o��m���@1_�n����{7�C����!���x}��oC�E70�}���`��z��{7�C�������~\o��s�������!������b������?�!v�On���
��rC�����'7����
��rC������'7����
��?�!v�On�]��b������?�!v�On�]��3�.��s�����-srC�z��b��#�!~=���
����'7����os��X�6�o�;������\��c�������������������\�{,�=�������UF�t�w&��a������f�,�@4?Z�5]qc�o"?��YH��(�gAe$2a+�����	�Q�9������"d��dr��������iz��?}c'�L�hr��h��c_�YY��	$�DNK�"���j�\_T��Q�	 �Q�����6 ��G�[TQ�o����_��{�����T�v�������u(�kt-����#�2Q����qf��|>�s�T�/N��$���PY��L@5D�O�=�2 i1��Hn�<�w.d[��
����J�s�����Y���67�#�O�.�e�A���x���dA���Ow�g�{�2�r��t�vxQ	vZ����:��7�w!������r�W"��w���|6�`��r`�5(�D����?�1�� ��
���2}n�4�	�nj�9�%����a�X�M$���p��	�)9�����,���n�<��\�� 7y�Yn��#����u����Jp"!�������L@�mL<��[J��z;3Y{�?+���GY3�V��
Riu���(�cg���������kw\4��������u�d�w&Y����Z�f:v99�v�@KT�+�&���V�'�]<�rj%O���2��@J�|������>����)���f�1r�o29qd�W<������|z��[&�.�q�B')���	E*�����urA��������u�2-l��;�}p�������3��B�4���l��DtV��	�3Q;y�C�>lD��(���<�`��f��VO�&P'���(	H�l��a���}�6���g���?)Wz��~�`s�DJ��gfX�\�� /[C�[	�U0�������#��+���d��6���N�<�YY,(�2@��kb$�������jO�\�a R�����W�d�p(��c*�>\|b3S��{�L5:6	T���`�SIrmh�7���;��EFj8�'��g�=P�m����c���t����kcZ��hg��7:�L�l���J0����p��������{T1x��>��%p�<v3gXo���ikE���?�q���"mT���i�O�����?c�~�<mu�"h�X/�K9����8�_C
�f'�t��_
(>y��Z�$��Sd�e�vF�v.�Q��g����\^R�[X8\�ro�L���I��/=zT}>�==��3���*;W��R^�+��ket���2��Q���'���I��7I\���se�y�	r!x���U�Z���,N�L�L�uX>�a�����n�?r��d����	�g����<j�L�����W�3��y�JP�'��I�y��|&���
�O����	K������mm����Ae�u�%���������0��fT�����V��+R/j{F�	?�F�yi{?P`zg*^�`���?T��S�A�h+��ejK�rA���p^�������gI��i��q$���CY)�����L��w���3�G�W^L����x��T���;�%�o����1=��N�>Q�����2����U!��4���e��K���;6�Q~�q�},�E�����X���w,��?���`)�u�D��B�/F��������a���"�lyX�w]^o#B#�9<�N;��xW�=����F.6-x�������`h�IV ���-�q�+�g��(5w
��\WCx'�mUz:NI�8�����j�-&����i����m~�a�3I}(S'~��Gh��8�5B[FBV���bv��~���,��zi'���.�� ��J�e�.���SU����5T�
7�cN����c&�@;���<'�b��dn�L�������6�����s`O#'+V"�HW�P8��D~��7`����L6}�	�X���F��k����h��|F�-���Z��SV�m�B��l�Du�g����y�������|V��A;��bLjW`��{��#7����G�s�p�4���b.[��%p�d���L��s$>"��>6e�>�5!|U�|������x��i��cg����22lD#C;_�'>0�AT���:Q�Z�b�-g�Z�DJL/�����L�}� lM�\)!����@A��\��7$����g�����M�����5����#�&�w3`�r��"��}�������g����R7�
�h�z6
y�p�7l���N��z�c��H8����$�G7���\�{��U4I�A6z�Jf�F��v�:��s{e��D
�K=l����gT�`5��s3e���[���	�LxM��`s>9�O"�T��F:y��E�fL�(�T���6O�/��s�kF�y�w�j�j�\���|�-����+�<�x(V�����J���'�FfP���m�8�����7D�x��qo>�0�bZ��Qx�7?l)��sg�d��`5I��Gr2e�AG:'�2p�
T�im<5�5W+c$"�U����D�x$�9�Ye��D�d�K��L�NBh�Y�(�D�|iK�C����?DKvS��:�=\dN$()���=l�}P:�wER��X'�\Of����N&����t����2#�1��wb�m�O���T��h�j��xB���MN()�������,��v[��_i9��_%]�u�J���~���������I_P0���e/3j�m6��I8a�$��L��f�����\D3�"7�ep���T��	��V�b��/�in�]2�6a����	g���3*h0���|�qsE����\�0���4~���]X�5����wh_���%���,Ca�g"2[f��XO�>�"��7���~g�2_�2���e_�MBb�]�L�m���EE��d��������}Z.7i�z��m_P�zX�>����wa
�3@'�l��
>���q�/���}"�7P��:�B�aq�j����j��`�g4����Y5�����Z��f�A~��Z�����B���H�����C��_Xlpp�J��
�+jvM�X���|�Cd�=�n�Q��$y�5X��D��Y�D������o�c���s�p�5y�m�|���X+�����D%X�3���`�d�w.HV�%��"4��V�9ap
@';���5��c����X>��F�|VtA��%�������s�����4����^��NU:>a�7T���LO��@�6���j5��[�@T�������fv�`Pz�������`'�xD��;^�	?H�'�Jp�D����
1��|8ZKAM�]��8=��t���������@������	C3d>�
�?��p��2���SY��$�h���Q����y���>�<�J�y�to��\�'����k��qQ��=�ULh�3Wd����+V0�B�\�
�����6oBI��%i�yxKjG���������7���������;�9���+B���_�iG���";[� }�S�#��a�S�(��[�${���S�����l+�g�\��DW��<�e��kbDQ������L]��������&����q����{�{�4�������~�B�������'.�6�����K�K��d�}�Uh�nj7&�r[����8��n������9:��8��*���.<�j�a�LZ���%����SD����~#�D�o[�����p)�����������;
n��|H��Kr�8��H�����;�.��LDd]W���LQU"���m�"��fr_�P����_��Vh��H��d`���
@�+�\��Hf$}����LDdt5	��=�����x:Z�������h��0��LD��������9�<|���G�/yZ���w3J�����3.E�&$���L��i�wE������x����	p���H�C���W�I�������H�CO��n�T#�5���=F2��H����T�
2��Q�*��j��Cg ���?����D����E�0v���e^�����Q���������5��/F�"�7#-�m�0�����m�f��H����|�jK�����������e�x���&"%��g��u�,M1�i|r4��(��&��>F���f}� ���`����3���*��XS���*�F�x��FoB%�'�x�����lt,=J+����J�=J+]��(�_��Y������\��6�i�����0�`��.�u�_IT�)��|P�@�X%�r�������U�r&"������������o	��������5��hx�N��������o��4'������i�����/$����L�s<�������e�����_�_�5���s���[Y���}�Q�7R�[N�8G���^.HN3���MsB�c�/:��I�����7�aL6�����������L�xg�q��MAnp�D��[�U������P"��3d�����E��R4\�i����T����l�
���@0|&W�i
�2����@���
O��:�D��.��_�V��L���i_�>�,�t�^�dF"�������Bb��=��]��F�m4[��<1���<>���:��X��c1���|1x���}�q{��q��2pW�ApC%X�9��`�����S���r�j���������u�, �~4{eu������),�������#����t��f6�n�����#���2��3�Fq/mraF"��*��������d�H�oP��s�����}0����t�
_P�q��/���#>�����l��G����0&����������[S�
�e��/��.�W7�RR���e{�w�
�����5{g�H�[�k3K�M��� B`�[��K%�]$��h�ZV�x�o�]�E#.�"�����[2�=u��]������g����g�������?k�����,�U���$#q��>�������x$
���=�w;H6VQH���u�=M�$pq���h�S_'�<#a��G�u�jF"�RI[�z�t�����\v����u��l&7�����L�Q�]���X���0����*T���^�
m�	��gn��iR=cO+�����DP:,���-�r�e$`��UZ
�IQDm�DNB�/��d��4����lMEo�6� T[��D��-��|����<w|�����QR�d�}$1��H��/u��6,Q��P�^�;�"#���[[�my�� ��Y��)dW��D�D���O�*m��ebU�Tp[n
�_���R�m���DRi�Q��%�� �CT=�Qc�����`�j+^0�[�m#d|V
�f���Jn���/H�a���?��^���;�`�F��7?v�WDd`5{�	
@��x0�p����h�l��t�^|���+�
��������$��Z�,���,���R�*+����f1��acF"���1`�EL���
My5��Xl�s@R�m�x��e��Ln�S@��� J�J���P��([�(��~W$5��j"i��;�X�<�9��lZ�1��e-P�rQ��F����2�1��:bK�;������u@&$�<�3�{���m�0V��2��3�"��j����S���JlhA���) =�p�/Z��|�N�����$���K���O���I��V���4h�o�)P�(�_�[#�~[�U��N{3���cw�����:������U�?��QI�3@����NJ�5��g\�k���d����W���F&Dw'�
���TA�J��@D,�8O��w;��@�o&$�;����O��@�vr�����C�g��p�.W^�,
�+���&r7�;��-�PH�(nAW��6f�������M���K%"6�j�m`I��LvmJJ ���v�������DYG�B4����w!"�p��Qc���"%���<d����[;�`;��F�
�U��Z��F�2#-���m�"@�xW�?����z��w!�������wF*7���j��3�����W���:��8�Qgg-&@"���|V�
���}�'�q�3��,�+��i��gB���w2��x���N Dd:�B�L��U/��R�ac��N�"*�M��&�t���4�B�V���.5�9-(���$�b����>�v6�������Tf;8��8�dA���_>������Y��]��J��v1�u6��Z&��wD�u��{MH�������U���x���+u�}�
^��0�'6���//;;���|����h8����]H��y=VA?��P������'�^*B�����S5mse��s�M����w[G���B,��8�t��[����g"!��w�OTE�4�U%[^�c���?��l�A��
�J��2�#oa���=i�}>�qR��������������+s����ep��u��.�&���iE.�v
���	i5�):kn�
�8���=@'C]�w!����c�{k���n�h:u��7m����A� ?���o��Td;����Vt@��av��4h0�@
'r#�����l� ��u$�}x*�L8n(�G�B�]�����������"k��FZ����q�P�2��
�B���@�n��<L��Q��4����x"����i�.u�|�`�]�
����z��;��z&���J"'�V�=���N3���������K`c��5oh����?I$�����3	3��8���_��}X-�r�	���8H;xT���G����F���!�8���=F|� ���M,�e��M��������W���@@*���H����asx���!?�s8h�N�5��~l��"F�DL:�?H��'7��@d�9���?�o�����������<~�7����_3&��|$���0C"�{M(��6���8~ �����g��V�	��!��l�yO(j��t��!��C|/�XB����a@���h�4�2#u?/�:������gd}w������^&r�z--Y{F�����\��C�I3�b����sz!�(������`.�U�C�h�������g��!S��=��Jvr:
�� �P-����l��zZ����%�:�)��v|>��9��i�nl�v��7�����t)^C%������������"��-�.��^�HT��g�$������xJq�d�?d/l
��Ia���7HA�l\`� u���~��*X�W��[�@����6JT�������W��V*��%������9X��T:���8M@z�;n[�'�;�#�j�g�A�M���u&Z��Co�C.�k��.-�r�X��#H��Y���Ap�Ou�5R�-��.w{�M
LHB'�N�S����9���|Q�
������8<��Zt�
&�}Cs�d��%�3I�c��}�?��.�lv���y�y4 OHG�{�E\�����L�/~�A�5T*�L��^��F�b
�
9�5w�� B���G����z�j�N����h���	5 �$���Wrs�DaDV-�w!���� >��m&��X��?#�xQ��&�;���w����{�m�3��M[�/�MD����-]]��">���x�QP7����'�������j�y���6��Ld��~@�������d'+��������l��D4�;�����]Q�ZOsnX��.�������mn5�.V�oO�+z�w&p����i���m��	9}x,^T���>���������_�����1'd6��z����w�|@Z%����
���T�v���g@;�q�I1�����",��;�1}W�3#RL�� uB	�t#��
oY�m[=�L4��llp6 ������C��"xW�!����[1'%3|���
'C��	Of�#��1*`��q��gF:�:��cR@�Oy����f3(��{�3X�=�P��H��tf�9�*�[nN'"2'��lK�t_c4Cz���S����|v�4��vL�DD�w�1��-�Q0�L��fSB3����&^����M�F*�����-�D��r5��E�_�������F��LKzm�����HfI/���,��n&u�x��*ML�h/���t""�DT���n��-�� w0,)AM=���hI/��g�tA%<�%�vF���Hk����z�lk��t&A8�d6_C%����_�?�xM�w$���|�L_[8pV�R���1�6zS�6ZhR���MVf5����T��OA	���ler��j�q��|��&O����c(�h3&�������@d�q�Tq��E�\�n��{�{1B2��9����(J��5��w!>������a�Kc����|E�(���'}AZ��2#�W3�����*�L��E�[tpC�b�1T��jPCJ`�����<��b��*4�����AT���o>�5G)�c�T{�P�W@��|��%���H����[Y��+J��H62�uN"��1T����x��P�W2�*�0,���DD����oE�o��Q�r�Q� �t���28}����X:2�4�R[s��I���x&>�
aC(#SE�M�����T�
��|%e��*����V���TW�:9��hA	����V�f��|����J��vL�P����<>6=�����a�d}�
�T�dr�u�K2��"�+b��c$!�����ID���I@��8�XR��
0)�0j2h���E��)�$��Q�����Ry������xO����:�N{��PT��}2M���E��M���E�D%X�	��xj�-x3��5��e���t�q�A��d�~Y<"���:N��7i��3RG�1W�d5e��*�H�c6�m�������Ls��YC<�����Y���@b�	�o
�����
��J��+ z����N$���
��� �$������;�;���#��>����$c��;�j"e�/_k��������=������p���I�4����L����c��>���; -r�v,l����a�[��w��%GRF����
������:��������u�@�������8.\\P����T���4<�y�l��������M<2.�q�������q��FUZ~I�wE%�������o"D��������t��p�i���.��m�v��/�:4�!w5����H;�>��\�N�����k����{�<��qQy�zB�g!>�6���"��m��v��;���:D;Hcf��4��/�l'96�d	d)�Q9�l����:�	����Y�+*l���A���5�Il�
�?����� 
�Ib��@��������Sil��gC�N����sz��8�����-�S�/,?�,,����E���k'��m��&D�������\��u�����sr�Q�A{�)��g�CkI���$P}I��'��6��o����	��>*EB�����/(�
s��v$1�p��T[5���s�f�a;J���|b(Q�Yo]��.(���t��-W���2�*�mQ[����Li��PH��B����#rg�t����b��������(�l��|�H~}���eq��/���y���D��������7����
p�����3��"�}_��b�>��+r��!(�����dQed��&�.,}��[u'��	#!�Qq�/"q���}nH��(�����"���^0�+rq��R�+�n����s�F�x�����1�[�mj����w!>W��P��^���wm5��m�h��6Q�(M�!�i���O> w�w�}�� W\��|�.#����0,�l��5���;�#Y�f�b�<�'�f��%��*�gQ].I�,���kV����{<�[zqQ������UL�wG�u��zm�u����g�:�|]���*j�s8��<�X~����u/?�[�y=�o�Y~����u+?�G��:�o����u�����=_71�#/�_���/d���&���~)���~)^�X>?K�b\������1I��~}�O��������3����~�9����k����4�5����q�?��?�����\�F��{�<d�+"J{�7�����������������������C��)�^�O������ v��%TBK��Hv�Z�Q����]����s;:@&��V
Dv�v����w�s��*~h��I#A�p���$��B;s3e"����%f���oaJf��5���?k���b�yh����H���rFv�#=I_Ig-��(�q�s�x:�pDT���]�'��D��Q��8���z'��!���N�)��Dt��yH�a3{��$�w�Nq����=�|��M���|B���dg�P��Ak'sP����jn�����H����JT�Yi��^r��]�u��4(�HD��B���{;�U��e���8-�H }��LJV;vjR�����;4;�9i�u�MH@5�v�f]��e�Mf�&��iSVS��>��]�^����l����!,3dMO+O��w����<*�������7� �DY�u�,
|������`��p�%��H�m�;�M�v~�`�&�������LZ���by7}
f���I�#��)�}�tQ	�,�k=T���d�u��������I@D���X����s���z�2���?�I��K��m��~C�^�v���+����kIn�1��\���u�OE������\�5[��L2��.�=�[V������?ZQ��2��*�^jB6��7�xb��;�$7V��S�$1���������>B��xF�5;-�_�[;1�_�w|���St$��p�������%��G��'����1~����w<�M�@�������3��4���B��w!*����|�~Y�P�xs�4s�����y�B��{�d����9��Y�Y�f���;�y�����m���kw�X�oo As�y~A���?��@Zki�3K��U�����o""[�H�n1��!��]�vp���Z���8�]W38��QID�����2�MD�����}�o	�o��	5�YDQ8~56N-���Ug!4�vdy�PQ��@�k�
3��� $eE�z��b��#5%V���d_fR�$�w2�S�mM �X���<�kC�����D�������o�7�m6(����T2-"_�w`��M�3I_�@.��kk�w���Z��c�	x��KJx��#�	�y�����.qtl���{��7��x^v�y�cEfTP\Z���?�\|�����7���x���+%)��s��no���D8f���z�@p6n��~"�	!�_�xP������b&�$�����H�,w2)�s�DQ��_#�aHb�n���:�B�l�2����91�Pa�T>������3�����W�cU�����{����'���]PQ��U-����4�R���<�^��`���x�o"!3�wWs7�{���1�D��-�`����~ny�=k����S�B���E�Q���4�	p]���^4���v��3 �/��!��J�s�7��-�H����f��<y���90��xjzgZ�	�HCza�!��m���~B�E�3o��-0�97`�YG@�
�<??eFYV�n�nI�g$��X���dq`�f+��L�c,v����Q���Rt����}�����i��]gI(����Vj��zX�,L�\���Ky+M�F�f�����6�������|����������}���<
jU:�"�C����{s�5#4�SxI��o��$w���D��:k;�So|m�<��J��7�O�����|{���������2	�����F$��@� }���F���Z�Y�[��}��7o�f&v����9L��@�>�4S��}���HD��F�|xFPx�q�O%�h2�p[GL���G����#6�0�_$u@U<x���fN���k	�����9�I�U��Ne���.�Zo���_���7ui$(�9L1��w�T����n�e��'U�xnu��		���������L6X�g�*�]�p[�gF���ta�J����l�q�����&�D���^�a���E���{���g���k�"�����L[�F'$��g@��'}�wD�K�p���(�i���c�K�����q&�F�����oF���y�7��}lo��XS��y�������9�/����j������������W2�"��HN���WdQ�� ��w�gD�i�|�iN��fX�=������E�E��i@����$G���6��nn?�������n�N���������rv�	Y="�a�?��f��'$��Y�?Z�~���t}$��3��y����)Ov�9��T������ee3�O�����w��o��n3���wd����,�`�7�l������$;�XaC7{Jj�2;��I�XAL�F"������>�����L�����d5u��R��)��]�	5YM�Y� kh��WY;�&��;*]����Nc�����d����6�����p@c�������t���#A�hQ��=|:�[#i���������VO3[��	��@DdP	 ����<>>S`�e$!�f�=H`Y�$�uj���L����H�������>g&I�M�;�6*��WE���z�CZ�L?�
�urL�����"�3�-������4e#�g�4���X����'El9��l�?��MH��y�l�����@6��pZ�Dg���Y���Fp�sTa����b�����$��D�
/�^��r����[(��6��n�'�MQ7�
@M�6���oI`��*3���t-����)��-�j�lAkE	h������X��q#��R�4��xCwK��D<���������X���t
��|-����ID�s��n�C9�T��g�^96h<�dA	\T0������!����a��[V��s���.o�#Q���4�`�pX��Xl��m�y�b���{�����D [����������3U����e��������H��������}����A����JI2�=��	�H���d2���a{..��8\��x��T�B����}�	`^��\�ee����sqt��
����/+1���D��d��Ut��3���$�F-������J����� ���vKrFPG�+	���$�<{���3���N�;~�K��]��NG%�������z,�;���
�*���(�(7���H���6��������c���ks��q�����J�U��He���F2|B6IT�����M�Ohb�tAn�L C�k�1�����kXR�	F�3)��EY��|������#�!��X.�,<��\1� ���W$_3�X����BD� ��	������>y?B�}����~����u����ta��,(|rm��U�D����	�gbzz�"���\[��=�B-]��\y���E�����DE��9S&m*Wh�D���E�#�qc���8u�!�'��fEKE��T\L�"���5w`�4�������|��:��1����,+BC%L����-/�X�2�O>3��A������H�C^��r`M������4��.L�)v�\�z��%=�K�����'� �&��nr��z�-�;�w�}fc�� tF,�5��6���Bu�h&'��`�x��T	2�^��/�wp�����L?o��7\����3�e��+���z���=!U"���P-������PV=XeReq}���6��5��f�7U�ogV}7)�/�p�?��R�{Ls����s�2�ch�}���e����f���	�Q��16h�CT�)� �X��c��xA
l�R&��@�K-h'����H�����:
���Q�E)����S=���o������Tv���"����/>�5�,�9�U��6�F*��"���:��3��XW��6~��l����E�`$�#�?�����H����Y_�_'HMHe��Q�=�i ���������������X�� ���WQ�-��;���g$�x�:����BK��m���o����s�����d�	��7{��+Zy�W(�o��N�^���������An����7~A��*
��EY�&[���n$Q�cMK�����rc�YH��N��V��0z�#4K�b�S�F�����63;��-&F�AG�� M�%y��;�&"��e9��>9:/WK{e�X'�~�����^9�����&2b"s����$���w��b�,�f���S���R�=3��Ij��0*)��-���[��T+�=]F�������3��*7���v�����ea�J��R'�
7�0��������;l%���H��&��6����]�wC�y-�c�"����l����hE��<�M3������� ���������~�����Lrx����B�,����#=��yBo,H��z����q��9� }99�B��/��;��@3[�86������W�Ic�^�`ctsFN��Hk�3s�DJ�{VD$�����]������rG����;9��"���LG4|j_KV=�}�����W_S�@s�_7�,���\8�j�B
/X,��������Ohb�������n*���Byk5����wFI����Mu���g@>1�OY�~�}���F~�2���<�c�i�-y���&����\��2eV�8!����0O�j��~�7�K�|��RE`M>�e�	����z���Q��|�q��hK�� KTo1�bi��bj����M�ML��o�xYf�2#���7�A��4l�*����#~�;�(��e����oo�{��;��B������f=!
�����|������d��!�n'�e��'���
r�b��v���;`�m�1x�����+�X��h�*��O��2SUM �:G���N�5���]e���m�QoBJ�������C�����3�ys^����E���<�������q��g�����}�A�O=����b�X�X��@<R��'�C���8�J���2�
m��
��b�wE�&R+���>M$�l���W��db�bH��j��������!�I��g�EL��,JO=1�8�HV�����U&T���g&-Uf�E���bhaA�X\�6`���v�9�g�]�#��;gF��]Q�~jP�^�*g��j�7�����I�gc�(5��(�Lb{b?�??���X��j����KC ���`�bAG�\���x�!��Pe)������0{uc���luFPLI�lqf��}W4��5�_WP��qa���i�����������g[�
�U
���<��iF��h���{���aA�������gRh"">�c��zSFh{���34��1��+��E�h��d{X;	����2_���|7�]�{6 �������]D2������:�������rp86z&����]~3��\o3���)0n�Fp�
$���(_���^�+��Fr\�9m{������'wu��	�y�O@��[��.�[�X��?�L�K8�?���fA�=o�B%�K�N�-%p�k�}Ol�Eu��O��e�{h����@��w��gu��h8���"E�,oC<����o��
�V	I��:�������H���q=�
�Y`zi�2�����^]�Q���L�	�5���M������:d8G����T��7lg��gq$U����va���$�����B��.�����0��,�q~j�U������ 4��/yl��B��g��Ue'�^hLH�������O���k�z&R�� ����6��W��1���|nb������|�x<��B���0��/�T�P���?|?:$GS�A�,_�p%��n���!�B�)���z�c2��s�b"OU������l�M��H�H�P.?�}��e�/'@��S�Mu��l17��i���ch>32G���Uky��j��b���o�pJ�8p���gA���.q$���e����Y,{g>//�~"PgpAlX6�Ip�p���I�44�i���D�Y�D^�vhA	��*�12��0�JH�����Gl^����g!��>=�cw!)S�iF��M?"��C�V�����B)���
Y���0|e����&��P��k	���^ b�����G��a~ID%��:��;h;��O�������p2v0[���lm�=T������r3T��%��Cz�r���B?��Po�OLN��zu$�	{��ba�w�;S��l�S���� ��"�S/������j&�y�r��������6kv[�
Dd����}W�������d���WS�v��vp4�"-�ijW���8R�aE.����I��AYXO���nQ�	�W���i,l��������!������TU��K�{o��h�@�<�W,��@���Y����<f���%��VK��;��5e�,����^�������[r �d4���,	��)I14^OGP>i��x��d�I:�&�����d������j���(��J���Kg2d����k��%o�����}�����k����S�nj9�-4~V�(��i�%��#�"~�������)��b��nq�	%�(-���J�`\:�A���a�	���E�YP\N`!_;�����S����?6�Y�g���v�'��Ez�.�13qY��
��Ub=�>�HnEl�x�[��tl���r$��khnA	5�@�NA�6j�����.�	#�1k�}�;�tB�Q�o�����<���,h(>�����	�1�5g��3!Ql�u������~����D��P�CB7
�~pg����5����l����H0q�A��a�?}�D!�����@�lAR�����Y��6��x-�B&�����Z����,j��a^Q%z^f���~��[������|D>!&a;�fg�����A�l�0�_�g��-��3A4
{��*����L$X���LI��+�)���h��e���A7lAb%��uk0�����MHF����'���Y��ql9���d�8fR^��C=m_I&R�A��#5k�3
��H0y��0������C>+�Z��X]����u�uL���7����x�z�=���&�.W>z���/�~���=�^�>�G'��B�|2����q�~�3hR��v�A�F��2�����0,�0�Oh0���S�Y&b(�����j�/�#��B��Y���M�A�Z��#�t�z�eB����j���D����7�����R)�t0��O/��	�J6�<,�	�
��{�3��ka^13Gbt�����1�ET�I����-��u����g�(V+�����Ph�*C�S'i8�JYj�������O8���8K������:v�z�@>3)���CA
��q�D�����oh�����lyo����M5�r����Z����y}g����]Q�|>]J���Ee�h�G�����bS`����IjWz8��3�Wh��}~,�v�����`Y�y#4�
������<�g4����
|��L���~\� �����e�������ww�� ������k�0����A��d�cm��i��I�`Tg�,�D��^��iqm$#�;�'B�<��K%�����|�u�$����s{8*,H�)s���N�����z�������O�CKlfV�]Bz�U���
����!m�[��1���� ����A�H\
������O�J��Gb�/i�,�E�DU����U<������>�gE���<�D�"?�
��D�J�Y�,��9#�������������+��?�|����R�����������������~��C�?����+3(��������k�p��|�N=�:���Oc����C��l��p�%vb��.�����VG"�������N�v[����d���C�2Y���,����[�f"9��V8;eo�w!.c���q��:b��+ �s(�����BC��+�D��� ]���.d��>�w����<hbQ:�`�\����c���� w����#���C{F]���{W1�zM$C���<�*��\��,3��v �P�k� �����l*�qEv������Q;Tq$*��UZ�d�w�dm��gB�ZE9��'�>0K���vv�^�����t��I�K�!c�d"L|\�D6M����,�H]���/� '�Mz9���9E��4[)P1���&=F��I�%o���i)��I�fF�\��]�I���%��
 �vrC4�`��^-��Ui��U$�|�hFZ����dFg4�����\��2l7�������P7�H���%�)��eO�zLi��tk��)}��f�]PQE�}�����N�$��n�p~4����nB���lhY���`c���S���~��D,��������:�����T�@��D(�H~��z:�	
`&D����a��9B/�O���N����X~`���:����-�'����E0�<�)�.��v�cnH3���M`Jy�N4�
�JK�`3_6������<�"��@�zq;I�Ng&9U�h �r���!�#&�bD�:�h��^���=��*{tO/�
�����|�`YMv�:���^<*�V�d�N�uiOU��-	��&R�� ^Ck��u"��}���v/��^X�3��������\��A�J(��P/,XF�:�"�|�=���A���:��;�I����e��{�/\��f���WtP/���k~�e���UK��w�����_�N'�z���^<�0x�3`��]e�E��F�E���
}��f��3��^M�k��2���:��P����ec�x}�L�2��,j&%j(��f
F���`Po'���P���x��4�6�\�J����&�U�����$'��E��!��������J>1}y�}Vs���,#��_��]�Y:����<�uc��4�B2[�n�o���7����'"t�_�d�5���_0/J�r	I���3'��J��jt!P�' ����A������=5���I]������I�4��������s��H���|�/��������4F9f���W�����V��y����c	I*���N�K;�VB���z�������`���4;��L��O
�����\��O <j����P"����H���7������P*xW4z��Q
eF�L�X�=M��c��o�P����i���x3R�oI����yg4MAe^��dHJ^e����
#��W����w��o��Ac��$Q����-�����PU��<El���{U�����.4���J�)�_Mh��B�/���y��xdQ��1~����	RJ�\�a�!YR��H�m{7�hOH2�0��l���VT�|��H�&"����5AT���=��z��{"��B�r�	�����{�I�O�9%��w���v�6bB����c�������&B�]�f��H�T-�b���  m��N����0�e�����y4�p{��H$����=CZ$'RN�x�M�&u`�;��&�m<�g$f	y)�S�2�J�=��~$�j�M% +�ee<�q\�,Q;���!�#�w9]^�<�vF����������.�����'Y�t����@������H����������������ifS����"�� ���L�|����5X@����-�J��rl�B�I���p����������4�/�
U��<	A��w!C�o�T:��D�YD��b��%�d�Z�I���B.��[-&Zm�K
3�����=l�D�P"C3�d�	�.����y_��t��I��������2�������p�(�koA��H�����i�3�u���U���N�x�]���N����dO��u����r3r
�������"\z|����	$�<�������&��� G��$��+��B�5G�g�F INi���L����\g<e/���B��b��2��MhTL\�P1S�K3���������/*��-�]�C�L�ts�vj����B�;�
l)MA�~X�'��vgBjFe�qA���f����e#@�c�ih^�D�r�:��cY�f|��t��z�
�����s[��u�\��c�{��K��g���m���Zn
>\t�n����Z�����z^�	
�h^�M�N�)�]t
n��.f�Q��A����%D"I���CW.�U'�����k]"��=�U<���������x~��^����������u	hz)O�M~����=2q�	�H�J9|���B��]|&Zi����&��<:a��,����f�"*B`R�Rt�M<�QB�'t���E=����Z�!_�Z�nE�LT���8�u:�h�������:x>��]DR;
�y4[�#���Tu\�[��^�"��F]�������1c5�&���������)Q!���xz�f�BB2������.N
wy���3��8%EQ�x����	Nq����F��@4<�����a6��2�Yy*m&C6�.�n\��)V�O(#`�UW�fj�I��p5�������V����,V'V��]��J�R�}��c���Ju��I����$��E4�:T���7�o�0+�������C�� ����J(t�����nb�7v�?�7�H�����[���'4��h�J�d��s�-�����+�-��\��&�����* �Sd|..Y��Q�����'����$3����z�N�q.�L�l{5��.D�,}��B��������k�&��;�u������[7���8����{�s��~������q�8�\@�X`�
�s����/�{O ��T�Y
lS�m*0�Rc�c�s�D����c*p�\�hS�}*������C��sKB����3��\�~�WnI���98�-75�X��M
Y
�;j4E����������#(��3w������}$w��S����!���+�b�{����s��\���x�*���%�=���r,!�<��K�-��K�GQ9������Y��F�c�[����;�h}����c�����=�f	9��l� �{�A#�S���[jh���Y����u�*�r|��,u�'������nf�K���G�Pb_J���6l�q�K����P�YKlS�m.aCK�����P���<X�mn~=X�F�<\��Rb�m��G0�� y�%���
!,aCH3B�knSDX�\J���>��a#�8�~�j���N����O����O~���On
��G�F��'�����F��'�F��'�F��'�F��'F��'wF��'o���3���/���+���'���#��������&������{��������4�1����7��G��������{����s��\���D7�K�;���\"?��^"�-����m�n���������Y��,���ci0�*+6�d$��<��������S�\�9@rDFYR��\��H��b�1]�
����gA%�8xx�@�%4����W�/��W2{�|"�y����F�4!��_���7�p��x�`�E���-�\b���%�?�G����\��Yv�Z�f�No��@IT�!rE(4��R�U��_���/��
��
����J
�(��'-3Y�p�e�H��#��?���Bq��oz�����P[m\�xH�L\>�$����DCF��M�Wu@�v�����H.Uyp�����&4�,L��>R�����~�����
o��C�RM|	J* ��]���;��D���E�n��$�'DY:�:�**��t;V��fS��.D���`�����y4�-W�E���
��3����tM�
�I�O�
�?��dA0j�.���e�F
��U_���+���nG����.J�j�	�����2���I�A�$-������8����q��p`Q�]�%P�G"��w+���=Z��=D�/�<�zJ�a���������Hs�Y��E���y@�#���mH����v/{�������K�_l5�ny�� ��H�<z���	Q��a��1�'�[���]�t��d�
9�����& V��fg�q�)Hq�@�*D���H?D������J��D��t�
�]O��:Z�ph��h�����q��w!C�p���pn������	=<^=@����,��h���?8M��[9���\x 6�gEll�@����"��L�N^z���{4&������T��Z���X[9��@�8���0�ec���1���_��[>x���F���g�����DJ���L��pInAV�q�DW��,�s��
�B8��@����n� *���m���i:�����-�H�%2I���t��Me=�G����T��/�S�aP$n�D�}�x�SM]$��j���=��8���@�Il��R������ZD$�����3-���y�)w�o� ��������q��Ld0�7:��L����3����4��U�wvA6��w����N�(���cSs�M�oY��V��n������+�NUK�N�x"���@���~ ���~q�"��X/�K8i���Y������9������W	�+m\9Cx��<[O��;%��[�g���I��D��G���W~�=qbq-�:��3@���>	�Qq�����!)
��"��,c���4*zU4����L�'YNqA�I�8��z���|��	r!x���U��Z���,
�L��6,��1�����6��� I2�h������Yl�8�dZ*���nv[�.�2� T	��dr�S���l@�
�	8�ga	�.v[s�#a����Z�[G^�3�l>���]n#_W��|~V����q��a�$��"�����&����I?Pazg"^�`DP���&����A��?G����������R!<�&L����@�XP:�4�H�wE�"�!��Eb��<��3����|�p1Km(e�,��*�Io�K���Y
����9���i��d6}
mB�z����Aa@�����0'>T�]����j�-B�k��~4`!�y[�Bkv���Q|�{]f�&�
~1t0�=��"	!)��s��=[x�@�-#tr�����"����]��p4u��X��S��'$��`h��p �b.��l��D���1w�a|I���:����6�d�,4�4��1����]�����W�/<�0��h�i�u�5����;��zhK���U��buN'��Pc����R��R���w!:��^r��(s���T�o��JT��Bz����s��hg�Rt�n�zl@�c���C �z�{$���%Q����\;� 9s�jb���"Vf�8U&(��|Af2O{�/fB2�!�Q9��o��H��?��C[��Y-����������"Ie�]�`�
$��g2���"��A�����]W�C��L�>�;?|�H�RW�h��0�+
��b"�u?�-��4Hl
d�������]�*F�p��)x�7E$o��L�X>���<���I$2����q���1^C������l�B���g&%�O���*Z�H�&�W�C����5@N��\���HS��N`��zG�&��s����r����Q��������H7|���8�%����R��3u��
��=]���u���L|'@]=Ry|��~����$*�������nZE�d����d�K +�w ���~��D
\K=t���c�gT�`7���6�~�
E���
���FF����IdQY�Hr�IU�#��XJ�p:���r�*������:�a4+�����2�n>v�<�3�
;Yn���F��=?��@N[@�^10^o�������{�u�	�������u+���
gd�y<v���z"��X���x@�n����8���5<kh.6F&C��Vi���px�c"�=m��,Q<�E��@Pq6�,BH�Q�(�D�����)�p��g�H�n*�4������	RI����OR:�wE��*(B$<#`3��3,��oK���Zf4d��_��]{���� Q%l������M�y��������s��z�����_������/���~�����/�w���}�f�gM�$������	�f�;��}A]�D�%�~�h���5�����9���3�'h���}Ae��,�Ij�&`"L��n�n��I��}F%���o��`�{��3br��I��n���E
�Y�U�C��Afd|>?�:����-��88&����&��!<qj�a���������/h9qEm�(������+�n����cBQ�������O@�e&�����K��/��W���Dj���	0OL�(��3*xAG��w:g��e����,�|^Q�a�0pj���{��<f&Z�	%}�Y��W����_����{p�����<�1�J����@��d����lA��1l68�R�7��+�8�m-�( �o���`'���*��'1��4��?H��\�=�>���cE��X��������o�g+�����I������1 ��l����&���AI�8Z���{���A��EhvA}��	C��d���,����}��b��kc2��`������f���y��0���U�r����G��y��Z7����

8���I2I���E��-����Pv�n���n�}2(#������N`��W��7
�
	/I��O���^T����y�j��@b�DP�q���+ag@#:X��$��g!I�m/��OIXm����j��/h4�~�A����6{Cd�Q�����S���	��O�����D��E��Y��P��q���|
���x!]�����
����	�>�-I:Mg���"�H�(���w�,�v+��W�~���M��]�����vt�����]A���*�������p�	��	����9��0����Ee��>��
�x%�K��I���%� <����C������M�#(�5�����y�����|����
���������
�����]�F��'���}V���5M>�wE����g4��E<�n�
�?�	st�
q��QT��B�C5���`&���e�W��"��t:�n$�@�o[��C�����*#G�����0^��7�6�5�y���3 <$���d"]���G�'��*�N��@���L��JZ�����M+m��
���+�|ef	�|��k��
�I�z�'��MW&2d5�Co��JF80C_��V"�leF%���<��g+���r��i�bO���)��2�M�/m��Kc��[P������q�����de��L����}�0%�3x7����'rwWsF�2���&[2,x7NK8t\G�nFtzZ�=����f�x��6F/#��#���t�� ��� �B�
��I`�6��-�0�dC�}����WM�%�z)H�6�(#�7����{�K��VX�	���>mh0���DI�3����+��1��0�Q���h��{�-��Q���{jo"�f��Ycx7N��CoF�{��Y����G�mn�������������ioC���
��>V��)3$��k�dMTO�s���D�� ������e����������\���s�����{Y����Cxfp0W�%���x�B.�����L���;P[���D��	t)0]p��p"����U^�6gT@j��`o>��5����fe��y���<���W.Lj���������=�P+~�����,E���N���
ft/mt#ESOtF|�K�P�UmG��M����'P�feBn�+L��wf�AC���\pIVpx����e����� |�]����KL>n�s��?^���7���X+��U��8~��-�����;���My���d~A���.#s���B������	��7�V��'�;���������>&XP��o�h_{p���PA���SX�}eh�+�C#���de����1��JEk����~�pG��Y���M��b�f���f�!\��T���`�"j���"�p����Y�]�!�u�����<��`%�Vqb���0}�!�.�f{_�W�ke����������D��Pd�/����[������>C���Pu��	H�������7�7�{!%���j6���B@(�����5!�����=���e�l��yt���������ep:,@��8��ih
�/���.������]���I��f�v����	��f�t�O����2-A��"��t�����^C%��D�5��t'�/������6f�� Sb�^nf[%P���j���f�}�����a �+0����cC ahf�~����0�V:m8N�~?m8�����P��
�6���+��}�V"�$��
y�bc���@t �m�U�5�CV8�3��j"59��_M/�$$	��R^kU�KL���w:��=�]+���I��l/9b��+��r�dY�!�:_�bF$�� �y��L����)��]�9
��G��J'H�yE�*�b|�<Cg,�2!��.9K
�w�H7#<��e�8f�~W��F26�m��h&Tb��d�=�TkA����|��V&>2,���]���J*����W>��lp���H�.D�!*���2J����K�;�`���q�.�-1���TbE�l7�����\����	1/Q�A���z���`�w�%��,:��*�o�L�"��jG� ��r|�G��or6���"j`��5��N�
o��C4}
��X�7�������
��q	���4����L;{��3�0!���*�����j�3p�]~BB�CmA��<��pD"�`��	I87g�n���#�S?g�6}	������&q�^�����@y��=]�V	�5B.����@S����f��`�JeT@��%�J#�X@[P�o0�^�"�7���,#f���7R�ZV���j�3�����"-�$�^(�;4����Pk�;Y'C��=����I�g�W���]��d$�Q����U�]XR%D�=�om4���0��]�H��?z�@D6�p�e����������KM�������q��;���u_c�v��zQ�O��^����I�IN,Yl�}	h&�sp��������ufh��]o�O�$jeB�3w����u���U��o�{��	�_Umt�\k���	�����y#�R[�[Y�lY��5�kV�Y�;�0����MN��dB`m�6.�+��DFtZLykTTI�.��v������{���0!@
P��7�,��|q��qNdk	��Q}e�B0��'k��e��	}�Mk����@�vB0.��2.�:�3E���j� �4+�2$��2�>���:!�xl�<�s!�j��N(t
'�
 ���0��:�M��������A�k]]�		@��#���x,���F�qoy����f�1�x�:�'�;G �/L��������?]D�!�^#�AYF�wa��z{�����2*PO��3���zz:�����D��h��?�0t�����Bprw��Y����oe����!�h-o�&���!�|ju���,;2PVns�s"26�sE�O����0��3�K�fjs����f�����D�HV�b��]F��;&����P^T����+:1i��F�%�v�����+��$�#Lv�W)��MG��<)|e�0�#�\4��]!�-���a����<�����1��2��_��;7���N.���jOi���e���DPcBd~����l+w3
�#/���@��"B�[MC�6���?8A&41���ss]J���}�*l�87���,�H����H���b�C�Y���,�<�b����rH�.�������h���{S3����Zfheq����/���� �un�X�����n��SgddB��cq��z���JlJ/v�`�����������5n���/:
����Y���j
W����/	��LJ^C�^}v4f��������%����
��LS"������J�����������N�<��8��;��q��,�����8��!�p��2����|BD�;�Tu�6����u"�q�}��PU�:$��:`�D�5R��y,~(�6���p��S����ZF����a�=
�q>�����	��4�s�p!��v��+c���N�n���n�ETm�2�|������,��9O��������g�U��(x�g����e��������M]F���H�mf��q�TR���%�Z>�������]Y�.��?zk����y"8����E��(�6���I�l�Pq��2@�
����%H��1�`����a�0[24
}~a���K2��+�:�qS�q����<����)�lk�����"8X��:L�6��O��(yaU�=��Gn������u�"O���!R�=
c��&�6�-O{���z���y��zN���'�z�ig=�B�������Y����������N�	��C��(��H6��t�x05Q����{�.?P�|��5����'!2��10������_���XK��� ��&&�y�"�f���.��:��G%,�^�V9���@L���m���E����$�H����-�:V���$��;�������;��@�*2
Yg
���MQ&�,�����h��-r��>||}�w�-��-I#p�Z��U������T���m�lr����:xW���Z��:}�����FwV�o�*N��\�����l���m��
�
��[���]�(�P��}�Iv��fw�����T��|h�N:	S��B��9Uw��.�������	T���Bc�����yJ��95^�m��_�� ��gE:rZ�^
�+�������n�0��;Wa�j�
�9�����,BR�0^�H���?�R��0��F�s-N�:���X|2.4
����=M����&�������� ���xYw���}�=���N���G8	�,���@
I�	��T��b��W"��O�3yvC����}"��-W���X�@�3B���bz�)@������,�J�D���������D�,�6!8������@���_��v����&=�N/�Ko�@��.lb��:g�G��n2��+�+&n*�����'������~"2����e�^���d�0|Hu�o�����v1 F������t���6�H:�I���m1��G��b�Q��$6TE����4�zs��p��T��O1���D���
Rrs�~���9��Iw�����������F��� ���<�O&d�� ���nr;V����t��l�|fF���QC��>�/-a�N�kR�e�3�@��$ul���t�M�n~\6��j�[]�7����ImZ71������8J
�Ix=u�����e�x��������w�	��dT��T{�5�+M�#��������4>�����I�-�?u�a�O����"Q�|���d�'���y0���9�"F�.j�4q�_n�:(�.7��f��,�	�-sB�/�,��`�'�Y���-��P�;��3�f�'���O�
s"�}����>��@�N�m>���� ;�Z7�
@
��3�Q4���.�)�e��NH3X2��A�������63!:b��`�'$@v�������KWn�S�a�W�0�����a����0O5m�0��i�a�ZF
���:Yfk�XkO��d���e>qH�[����c��HTaT��q���6��wG�|�t��2'��fyR{X��{�y`}��=������<� ���a���L0��4�o^s�c��!�2���J HN���%��x����
K*�\��T���T�O��c����Q��������X�_��+��`���72w50���+[X~F���6���2�9nd���7�*���f3A�e�	������o�	���3Ae���_���q7S��~|��������`�N��=��)f��A!��������P�wOm���I��4$�3Ai�sO�����"�1>�����.g>j�k#y&�q&�HS�O�l�0��Q��E�L$j���\06�����G�*���v.���mo0���|.(��+[H�5z�U3A2�������D0!�\��W��DpT�������4-#���h�����t����^l�������_��i���'N�E���4P���
W����B��g�S�4\�P�M��
2>����N�d��
N�b�O��~C��p���=|�/0����1�z��y������Cq�Q���-@�/��@L	Nz^x���dBO�dp�4dW�9@d��n�����?6��Rp2�0P��>�V����t���.�V��8���U]i�eV�O�+��t�L�Pu�|����]��MA�����<3�,�O��#hi������O&m���t���=��:�<��k���0m�2!�
�}�>���mX�;R�.�Jv{��?}7e�\Du�����0b����$�un��P|�@�����k�&��)w����N�zI������k��m/?��xMI�lf���2��?�|�.l���G�����Z��7�Z�� ���y_P��������Ag��b�	�!�u��gx!:��4��I�_;Q-�����1t�K��zsuvG6���%ya�	aF��0����A����FOHA3���Dpr���t�q��e�1wVV��IC�3s��4�w��`}-D��\��b�/y�b������<� r�/��s9�_�dg�a��;��%p�X��&��|V@��0N�\7�TD�g�gA��A=��c �d$�������t�P x�)7�}�L�	��;1�����?!�I{�e��eC\�F���%s��o;����1��%�*���S���X7Mn�j����I��gu6��&#G���'�N�@��@�n"� _XbT��%��$��,|����������&9�Qd��������5�wB�/U��n�[g�����N��!��aJ��g����t�UK�m`�[���~g�[h�zO*����E�u���*�;e�������[�y����`Se]��]`ba�.\�\��I��j��]z@b���q�����p���"��6vW1$W�F;��7��M,���*�%��l!dbU����H�������jkv�@�7�*"��f��M5��J�,���������������| �j��<�8�j�v��:�FN�� �(ib������e��u�����fb�P��U[��j���c�}l������4K��Tk���,���s��jdb�RS�b��=���Cb>]�e=����m�eB��"@4T�����V'`����{��"(��xF�.'�jQ������	����&����@P�;L�]��:���x"h�R%�#�L�i�,�=�����w��J@N%���PB�X��3�B	����!���I��#;��w~�;D�n����c����w>������G���	��|��\�;�j������I�������k��*{���)[���)^[��%����y�U��k��tY�^b�X���%��)����4��n�q�?����k���&��������������E
J�o�q�]�2��O�����q�?�?��������������<~������9;T-��	�_g��v$�h���
��5��e����32��y�}6���,A�7�#��u�6K�}������	�2A�pr�����v&��d����5#����>%��n���q��#^���
��%��C�<�jT
��g4���r������(�!���`���Q�;���XJ���/q�k;p���!��j��a�;m����d��g!�&�O<8A���7��Mq����gY�~#_md�������?5�Qn4���9�s�M� ��!)�b��(��O��h�
�|����<�u�J���� �gKo{��9N�x�$�4��#y��LJ�:z2Z���=��x�����A�f��2h�~;uI�����LVS�U������G�i���tB�`���+_f�d��*#x%[*����������|v"Is�-�
�@�c}���
CgFsd���*4fD����}��,:d������������j�O�,�L���b��f�.$�3�u
P��3I�?�E�}��0D��\���>��y�ze�����$4����D�}���o�:��G/�����.���u���'������a�W4��yv~����;�������u���-+�&y�E+���R2i�0|�
�Qc��
)G��W�b>���������Z�p��T~3@NJ{$��y$��
If&��C��`L����tb�mF|�-^�����f$@���^�!���M�2/xj�*��DT&r�*�����"�A���+���B��)�����g�:L��P'9v>42����tg�5�=��A��O�8y��B��od���`����`�M�����l��@��-+��y���3�D��c�w=�?�����\��\~g$2MH�j�F�	�@�|�ozi���H���lX�H����1+�9MH/-�N�A�IB5�&����*B�m�VaB�gLBPV�������g�Jl$9a�vM��vVPh������r�C�6v=f<$����"jnof7�TR�c�h�I�N&��iw�<!�����Ix��|4�m���s�L�����8���=��F
�@l�0�j�s��s.�
��'�a�� ��yj��G��QAuHE�y6��#�,��b���b���@��O���Qu�<�����`<�4�9�D��/f"�����b3���4��?L�
k��g�2N#�����a�F&��r.��U�ks�/�D�j���/- -��$W���N�G&T@�$�w1k�#e������@=@�&���@N��[tE��Wv_��������� �y�3��-�7��sl4�"������]����p��kD����`��E"�{<d����oCT\I�e7��u�u�|2G�.K��N^e�/G�r\N�TC2�,(1�w���0��-*[�]�(���iRL9�;�av�	�������f c��@���N��Tc}na�����j�!����)3��t�v��]�����`�8b�+4,��s,�q��Q�.oR����c��:������Cg	�����^��q[X�,L�\���CY/
D����z�^z�����3�#oW��:���3��W�:�p`QPm�	�A8����7nN�f4
��H�c�U��w�5=��c��Y���g^��J����-8�����|[�����9�X?�57�WZ|�����(�O.&6�{��G��������������fn�a ����KSS�����z4�!�sK�p/��el)aF	���[��b���o&��8�X�-R�k	��D]�*,o�����\L(��S<� ����Tz�����I�����Q���.%�����tu�J��	�Y�#���������<B�������%�
����RYu����'���I�74��U�
���T�����4�a�%�������A��3�J9�U)G�G����H��6=R��{W4@����]=��7#�����;h�-J��4��h��Ar8��L|=����=����M��-80k�b�j�2����3b����/u���1~����~�R]���d��/��������*�8&�_��7��l�|"�����C��j���f��=�����A��������A��v���6�)�&����~��uF�b�]��&�����66#<���G��i����t���8`_6�Q]�d�y����|�T|Bx�[t����x]V����N����H�����V�m��d��s�$k�\�5Dy:z��:0;�H�,H��^D��t��]jjUM�F'l,bs8Qe�d�'�w����f+YZ����j�n5�����>GH���,$��`�U�N,$������v�vN���HPuO��/��f\����=�������@�\�C+�e�LP;Z�a��}:�[��g��,|UY���b��n���H#�ED�h���e".7���M�/3�m�$��}\L&lqHHq4���w���C_g$A�9-;�3+����E}��{B�����aYoa�]�h3]-���'aa�&�����p>����w?>y4�n��}�����9����H�*	d����Z@��O,��;�p������"fe�����QN!���t"��Q��v����k(H�s���U���|��4�4�����,��3lf2d]N��&<~�8�E��)�=� ������j��e2dJ��!���Y*d�$�bmc}4���^�P,���h�������H��xN����P�#g��uT@��N���.*�.S�[��!�����O�-+����m{�v���|�L�c�
8E~A4�s�m<t�g�%�h>/l /�L�jK���q!!���6���[d0����`6&}IM��@p����,�GD���ex&A������`EVO�bhzo����[�6N�2"�yKr�"��������a�i�N��������x��.=!�B"���Kk���g"���(�)���!b&A����xc���?�P��������'g��8��HE'���8�?�xd2dv�&������]����F�{����~��V(j(>N�UX�Q���3����*��IV�{�Y��
m��Q�t����	
`�4�E�����C#�L���!���P�{���4�H:�n_Oy�
�~�����| �
N��}8���]�}������KxR`ad��s`�o��J+��0�G4��o�PW������hO���L��,d�������W%�����m�>:����
`G��1y��c���z?�3Q=�l���v&����G{���^�W���}H8����%���hSu��D��m]�?b7w��(��-����������rr:\��D�5���h��N6�_�(��vt�JV���s|S���"�h�ISp�~���u,q��f��ztP'2��>1��0�)�t�h��L��4�3e��F.\uj`DE�EO��%o�`����U��]�b-��"l;�w	]�{��s��N���#;:��SE39!i�0�������z^o�e�t��l�#��(�p
�z����9�y��P����R3�L��]hCy�GY�+�.1�������w��f�688>n�t-~��d1(�_��%~���b����?*U9��ff�V&$��,��.�[&D�H�D�!���)5C�:���4���f�J]�,(&�S)������Z��k;b%C�u<9�@��|)N�X��d9]Z��26���k�A6���"5DU�x?�~1#����Xd�l9db\T�)�������"�c���w�������m<���&�}��C m`9{d{U|��[�����k��w"�s����e3����Yl�[���N`�w���0������:�[�US3���������N�O����%U7��X�0<��\�_D56���<}a��/4�%����Lo�>5^!�qO`�`��KF��P�ewjb�v=9HJH�E�(*�R!3�'@�pl����T��CbB�>;���Jn_���p���a��}�<�(�K���������V�WQ�
�W������9�zpQ��1�N(���4����J���!ex^�h��	�D�[An����}5#�����!���-"9r"8N>)�j��X���D_���4�L��*�<m.�Y���	9���
�f��5^�1�^x���������6� ep(�]�6
��{ta�'T�FnAy���+{��U�^��nn}4�'�!���p/�$��XL�{�	���~�w��cx��*�����t��>+
`C������o��,h���%r3���8������(\��3�,��n=�w"E�dE�q�����Ad�>>rE��K���3�:##���]~��b"%�N4D������]���T�&Hd�S��C�����"����[w�Nx[�����%������qt�.~h����r��0��^:�Ytu����6��&��-x	2p�
	�,$��Y�no�%�?��������S~�5 ����L^��e�=�s��$tK���Xy����s�5����Q�K��^�_��m��w��#x�C�|��BC9`Kv�������qL���8I��|��1�KKo�=)�$���b@�����S��3��~J�
S;���7�^^�F��h�H?����JN��QT��B��������*r����S�Q��O@���YH��;q�8o�tp=!r�:����Q�Ag��"���]��N2���N$�;�w\�6
���������Y�2#'R��W
�C����E�X�������g����H�e�9O��CeXMkE�"���B�������-���^2��aB	\Y%sl����a<=���D-L�V��w}�H�������dy?O5����	��\]�9�Pfb�~�t����ps�!KZ���r8Hq���RQ���Y4Q��C ��`�xT�q�BxF���`,.6�
����eN�Yf���8�N���SgJ��u Q�R�bW9�`�#P�����$�7'�M��6Pj��Qn��,G�b*0��H�s+^)�
�-+s����<M�]��7��;�;8Y��-(lb�u�~?7l�zuc���vFPL�dnq���}W4��5�_WP��qa���i������������{�
�U
�,w�{iO�>���� �k�P�%�+{�I��0����j�)#�=Mw
����+Z��M�"��ea2�=����v2��8�a1�
rW��
��6�����\{|u���Sg�N�>�&a�Fo�D����7����"xt
�[��!a���,(�=��W��d��
s�q�������:O���'���-Ds�)�o�������KHO��k3����t���Ko(�K_�{b#1�S�|B�x������[
Ox�+�����J���N����?7�����=���|���f!�	I��#���H3�.D������������c|V���k`;��u�)=����=��Q���2<@��h����+�<�
G���gq$U����va���$�������.�����0���_P����S;�:0�E��fjs�C��:�^�(e��s�����N����LH�����!�=aJ#�q�!�������*�y�$�|g���xw>7�h�1�����p�
�<�g!C�p|z��h*r�������#���)k�a|�|���P��kw�,���%��I �����E��0<U�;G��r��6W"	JP1Y:���'�Oe�/'@��S�j�A��4�_�����.D�6�d��F���2�h�Z�}����3���$��#�v�CZ����K	��n�x�#�Cu�bD�����@�u����6	nN��@0���� m����8K?�������P��Kn���=�� �U��^�|���B�}z��BR�"����O�~D"����m���R�75������+�F]�6����X�]K2�R������t:����%�8��U|m�>�	�v�?�N�5����5��{��l�����3T��%��;Cz�rc��B?��v~(&��U�:���=�C�0���CM6cz�aR��5���	���z�������IpdZ�����O�4��X��ZT "s������j���%$@�$+WU��zP�������iiLs�:!8o�5X��b+r	�F��2�
��2x����b������eq�46yJ�}��#�B���L<�J������O.�8�6�B���/�4>�!�6�!�w����d��L�L���6�]���THT�y8Q��"�R�U�yK(�DF`�x4.:Z��M�������o->��"Yt��U����Ld������j��a-��G%r}�G�32��a�5l����_I`�b�����G������+D�r���Ym���r����x��e�:��pE� O�����Q��/��R?W�n~l7D�a�p�.�{}��F�v�w�'�K;Ns�	�c��z���k"�,P�G�B��u!&������ c���d���
`���
����]@�-GZ����&��P	t����m��IEeW�����5���V:��(�w��U�Y�����������n��A�(-wv	`���(���v�������#��;�9�v�!����� iy
���5�iw�;L{�<���g���!��6�X���@*v�;r=k?C�&�%Z�����_��lB�4��F��IM�<�+�D�����4�OCv��� ��?���'�$l���L��8}�0��-&����,���>�	�	P���V1��6 e"�U>xf�Hr�BIMypg���E�����M�'$V��Z�CA;�4�<#N�k�����"0W�c��>V&C�����������6��|:Gj��<��/��>�	3�]��^P������Y������\�_�4
.|���A����(����9nb��r�������������o�}t�,$�'�M�������Ie?k����9P� SO��g�a��K8��U�����2~�������h`�7nS�#T��|Q��#�t�j{bfT|8����[O�o�y�M+)���T
(�2�:!���-�'Y9�h�����|=�W�? ]���9�s����M#[@��t�[��bjX5q���g�(6>N������[B����A�h����R�W>�|2�a:D�Y*$�������*��I��'M�44��X�9Y9F'b7�6������6�H��T3-��O�|V���������48�'4���`�6������"���x�����������v9�H�P���Y�A]�B������`��c5� �������m�L����>��o��yBa�h��
��N��K�7"�����e�������ww��%������kb"���	�=�X��|?������������'�wE�J�O�k#���I�8�ea$�X*��V��_�S�S$Y�`���_�QaFRM��m��������z���������^b3�����.nq���}n�F�G1pj���� ���������D�R��7�����ty$����";P$ITe
�k[����-i�k�/O�\qp������������+Y�f�Y6�9a��������������+��?�lm?�������u����9�[u9�Qb�G*9�8�= ��i��Tb����9�-	�HY+����'�YQ��V����z���\V&)�N�Kj���B�������aN�K"�D�6�~9Oe��d�E���D���F��vp��f���#F�S�c�H����9��0u�d��;#$���F�@�����YV�!�!W9A&��n�����	�8x������}����.,{g�2���yOd�2��H������}t�`>�I�<�����Vy��������Z�GT�����l�����p���h�TAixm�W����8}�q�����gB��CU��/���g$����6Sq�.�k�|0��X+QT��[�/��u�����.Dr��\���}������^������f�T3sU��KY��nz���\Yv�Fk:�iK>�6SJR�%ml��E���)�Po<����9L�����(�����o�k��f��2�B4���]�i	�[�L\V[*�^��|	J���vK5�t��)�Po��r {;��Nd��K�?r��|v3������A��$j	.����])��E�����hT��5�S[I�TP0�
*�bh��ot�X���`��hK3�l���"��lY��tB���)5pk��	�����tK��T��%Z�g�DK:�$��f�-���]��7����c:!h�����6��b��d��5�n�����`K���mi��&nK
����0��r#;�������E{:���r�C�Ng6�0n.�8M���4�d��dQ'"��{U3��4���n��g����H��l�O����(ZU�s��hW���j�w�����j"�������dU�����Q}��]���*7��
�����9(�U,�8��fyR�UM����j��E�:!��~�h!�7(�Uo�J��3;�]-��7�'�8��zV,n�:�0;��*c@=�\�Q=��]fU�J��'���U=q�W0����i�&��i&C��	\:kT��q��{���T5��:���f2d�sg�i�I�[�	iZv���b7��������f�l��!!��c��~�Z>����u�g%H�mfM�k����3���G[WS�i�oQREH�M�	�mX�����.���Ko�����f2:�9�$�r����{�&r�d�{U�%)���6p�E]�����
��*��_�Z�����I����"@��`oy}�_����H&O������gB�=D��l����75�0�A���yHY�-t����_�Ef����!�CR�����[�Er��??�lge���$���)�� ����bF#7_�4�b"�Gc	����	��?���UKtx���zDK�/M��q�$������� �	1y����*x���g����H�2�!w�����5�!)��>��w� o

v�re��c]S8F�H*]�\������W%4�v���X9*3����Krn�������2��,��Q+�����	
UV���m*�]7��6���o�l^8cH��I������Er�ja���9)��f�[�7�$��;��K'n��hB#��vg��D=��,Lr��V��?�����=M�`-!�[������3�V�.	���!����=�C�d�]gz���`�W���s03�<ln���2#IXy�&:4��i��H�������3�\���^`bi{������~�]��R{����B���h�����Smv�4���v���cy�7��}-��w������p&�����OB1�~�����8��HH�=�G;i������CZ]�z�<����&��H�}���3�H���$kh5t^5>�/�����]u~�T�z�]0W����"��)��0�<��o�fgB��|�3t�|GI�r������L��_Qp#�F�F�8{��5����#5���!��??J@�E<�/�������P����"�2�c���%��Q�d�X��	0Y�WD�H��J$u+�t��9��<+v�F��u!k��>�����}���zO?�Q��4�$�t������G��L1���' ������d>���0Ld�6�H�/�������%����[�eR���c��c��i��)�8�q��		�A3a��E�Zu@4x|���"k�li��\Y����q1'}��'w�e�fX6�-T�oq�
Q��Y� �@�!D��H�9��Zs)|����<cP&�
(�c,I���wE���2��`Iz��NjG�.1
��S8����uf|��&V���E�+�e���Ef�Z�~������U�-�N��>z�cKD��(���V�u���ek���>�(�9*]r�o�l�+��9��,��_	E�^�c+S��1eg-{A��������P�q��G�~�P�%�������
�����l	w�c��} %Sn���l��7�<������i��;����X���O��;mB�i�$���
��p!b����S��L6K��u���~<E�_����)3��:�e���9�6n�o���K��z�V�U�}H���vB�x0�
hV���<Bg���H^h�|��7J�B�*�P������iz���K	n�B[���S7�d=�G�f�����O0���)2����s��9,]H��,=���M$��i�-����VuiA�c�������L��[�WOyhfEtJQ�4��P�Sl{�^L���1�Fg����	iDw{�T�~�������D�9b���������H<���l3e���rU ���\6����l��$�����e����M�l�*1M��PH�X�y��A��/P��#8Et{���6%hGr8�/�-$�������T?�e��L�8|�#�O���F�	OJQ���PSrf��:������� �����W�Lf�#3E&���G��o���or��?��	�z����n�����0%>#�h6�}D��P7+R0�W�=�������N[x� ��/l[���t����F+C�-\�l/{_"�/���<l��.=�~�J,dyQ�t�����z�3�C��t�c��0%%�k�{�1�0���c�c�6+l|nB���LC{�&1����'�1��^�,���!�^EnAwWRax�R����a��*d��{!�����^0>�u�OX��(���o�~��!�Vl��x"1�����u
>(������$���%������7SrA6 �TL�gaJ<���D���
c�7�����q���B�x�7��_�}D���3f>�t<��������~/E7�-���i��5��h`��Y��f	$��fe��f+j,�R&��je��l����u�LH��d{R��	�)/3�����'/����%�E�s���~�Jd�.�����[A _|��?�a��SX�71E�-#���,O���e��oy��Uv�W=���'�z�����))�+��O�52=M���m����������AEaR.k%e���1t5b�����&$l��b���Ba~��D:a�������`�N[�m�,x_���s����of�_�]-�e>$|��������DZ�V2��w���V�4��;��+pE
�HUO]4��k�_���61�k�@_��N���w�R�=���
S��18z����_H���=��Q����
Q��Q�Y=�J����L6k�W�l��@���8�?��_rZ����������}���B��_����o�R�M��|��c���|�m<�����g{�E���]V�'�Z/p�W�������-� <�5w��=<������g�Y���y8O�:m�{�n��Kx>���������{(���S�UV�$5/�aAG�����������m�x�{?�������C�d�f����f
S����p��Z8�@�_m%X��������@�����l��m�����|��~~����s��c����<�rY�t���}���rY��|<w�1]���{�|=���,��zy��e�G��b�,G���*��c��c���^�������<�Rk���^����U.��.�� ���^����^��:G�T�r���?P-�~zC^�"�UHq�vR\mZy~�b�.G����u=M �CL��^�CL�k��Z�^������]�:�t}�����������:�u����������k�G-�X����?�X�����@LVd/
1�����si��8�Ie�bd �����x�Z���u��V)��U�����j]_�nT�x��;�b���3�� 7�g��z���z�
�b���1_���{�����\���}����1_ws�����?C��{����{��������0�����{��F�1_?J���/v>�����^_�7�bj&T��h_�1��{�����Uc.zW��h]�/��s�����U�b.�V���h[�-��k�����U�b.zV��hY�+��c�����U�b.�U���hW�)��[����fU�b.z�]w(�=9w��P��ll�������"�g"���{�p(�z���P��Z��������|���"��Ru&��Z����x�P���A�C��G-�X�?j��Z~?lIF;�9��o!�\��VP�p��O_�
�CN�1Y�����e��Me�{"�<��cg�>���>�/y����V������_T��N�8S������������Y+���&_z
����!���($]�nO�$�B���H�jC��'I#<�,���i���$k��D�u�{%����V�Z&������A�s�V�m\H�U��1Ue���-�Dd�2��R�h����<�1���H���������i`u��]��
P"i��qc���
��Oi����S'���L9��~D�ig�qn�hp�JeU��\�,��i�$]�,��
2��Q*K�Z���8	lY>�l��V2�	BD�/,�����A�e���������X�����]��V���������H����(�������t��:N��f��`D�����?��3i���P��M�W�e�V��L�s������|mo�[��jX�+"G}�1��g�1%�t���9
���!r2��Ze�a\6{2��	���V�!�5]O_���L.���8UA�d����2��j8X4��k�?�{��K)�?��U5�����k��� ���fg%0�vm����iX"�i!^d`1EmK2_+�c�]���@G���-��!�UFGQ��WWQf�7W�<i8��4����."N+N��w�jg�pp���	��{���_kTW�j
����Yn\���,�_2
�����v����
�X/h��������P��~,r��'����i?�w�;���(���8Q&�2"'����n� $y8�^d�0�gw��Y���."68��o���YH/�K���tV�%� ���*Q����z��/����q�����'��@�����Z���]��~V�Eu�.x�"{LD��qC�:���zd@��%Y&X�a
T�+�L/6�{�*���I�(��}L+)��8�w��<�������O��P-Om)�JB�R�8\U��.*��s-�9`����56j+�O�{l`r�Vd��\�urb�t�Z0m+	+4u&�'��-���@��I��&^d\|������a���x��N����������Qk7����c�:4=,�0�� _�)t���9V�_5dT��g�rg�2� ��$F��S�'7b�$��;�f'���`�2�\�bu�����������9��u��������"4J�rm>���.P�����d��iR���LL�������`�!����0z5��
��B��
D���_m��$%����I��71��Q^q�b�O�E���X-�~q����m}:#E{���?/b���;�y�1	+�^I��TyXG�e��-x�?����P��D�+�Q�"7{��v�F�������^�k�N���z>�~��&������IIV����ZfCC��h1�A�N��I����0g}�����LYZ�
��mt�c�g%[�����D�mRH|:�s�>��[�����B��`s�K_1�����db�� n��
��*FqM�����UAo[���#D�a��K�E�������fHw���b*7���g�>���.C�WR����
�w������3;�
�P�����Z�j�c�pz>do�����F1���v}V����@>9�-�������>a}$��C=|.d0��<O=ET���3
`1y�Q�W�����9
�������V�e����ks$��T����0���&�lq�m�a��j��Vx�v1����}R��F����36<�c�E���6�q��������;b�{����7q���)�.20�J��#�����[����@�~�1��'��=��%bM/D�G��<U1P��(K_W��Mk�Ae�80U�L���@�,������y�M|���,"m�������h��������Y��@5���v�W��u!�0��`7��t$��;|��@. <��]���
���E��n[��7Zw�C�\�w��<,3(�?�a�</2�Y�LL���`��$#��,�
2.��I�s�`�GM@������p"Md�����!nn�"�*w���q�0I��[	nA���s��\����A--��)7���G[I����H'����h[��.���u�����-d����@&�}��~7�
�s�:�(nif������,�,-C��a6�lI!��cR�l&�U�yL\����F6{�
�zp�����p������)��p�~e	������?u4��W�	���s���<��������I�\�*�UNN�L�%Q�&7 Kt�O����:�����N��]����"��!nQ'�tH�j;V|�I����Z$�a�p.�d�b�?/"���O��L �u������7��z��1�^���������;1;~�8�|!����l���ys���	�������h�D"�.U^����EY�u]|��� �dX�E�UkyuDN�9�����{5[@����a>��{�?�88������?��>'��l����;����������d.a���=�L�%T>��`��5�
6�1|j�1ok#�;�W"�b��3�J�p��#�}��y�M�v/�M[Y~� K���= ���= ���= ��j���};3�/�qCF�d���vX����vrY���pR3����9~��.���E��^���T�2��i�[K���B�����Kf��"L�>�?a�?+�R+�
*���~Ju�_p������������4�����bYn���"�;�!P�����s�����^���ye�Z��e����"�$�7>�=��Z�-xa�y|x���c9���d�w�p��~�',w�O=����,���g����@�u�lM~=����������@��t�{O���_��4�0���S��/@D�~5�����)q�jt�0�j��d�?/T�U�����9qUs������0D����p�dT������=`��{>�=�B
uj�~�����	�1��]�H����he��~/��-��l%�N�^�nD��c3���`�������c�>����<5��N�1URd=��w�L�m����7���S��P�	�Z���!��"��B��<�!���
���co��X>��Z�`s|/$��Z�����3�+=�$Jc+�W�����an�p[�BV�:r�dYm �6~��G���U7X���>���#qN��g-��u
�y�Y
��	����q}�I�XXR>p��%�y#z�e%(��_���M	��n��lH|�H�O4�3D��{+7��.cY�8���� �D���o}��
Dd�Qf.K��8��{���>qg��^s*������V���g��JQ��+�x!�������}N�yJ�=q��6����v��j8;���o\�������y���f�%��|�Bh�*�tk�3?�����p���G�v�p�h����c���)�oxL����y%����$���|x�J��-�/�6��f�21tW�;cf�1���,������=�z�|������
�������_7��6����*iT�V$.����M������)���x������"���9`��Nz ���
m��M'����iei��yz��}s����f���1tF�������<Q�a��^vER���Bp1$4�Jb��?#����<9tq�d!���h5>@|��q��w)y���o=�&�V��a:�4^Y��
l����WVV��W��1^Y���(���1�������&��P�V*�i��t��G++�
���<�S�0ZY����e/�{�asJ�|����&_�[t��w+J��;������|f+#�}�y��5I��V����[�7h�����,�w����j�����n�:�w+�]��=�1BX+J�A�����x��s��JE� �A�m�R5��:���D����g?rGL�mP��PcWM�ON�R$����� ��> �
�@�h��{�E�<�����?��MF{]�*I?�X����T�Z��1�eO�	�A��Y�^EYF/�i!��H�l��1���z���H[���q^G)��0����
���jAx+>6�Cx�hsJ
J��)�G�H��� �3��� ������-�[ZYq,?�(��O.J�=�(]����_�~�10B�]����5-�&��,��ul���Yw��D[0%���I�K��X��t�s��X�D��}K��o��=�1���w�<�=���f���^��E��Z�MTJsp�����&�D�t*�����|�9���`��s����K!\��_�����6�n�[y!���U�7���`d�"������zt�Z�u����Q���O�������2��9��+-��/����-�5����)��
����|���|3��J�|%E�����_���h��i��T3��
!��0~`�Q���K���%X�2��l��-:�O��u2I�z�=(�nQ���wU`�k�*��u������AX���)Z<[H�8���PP?O��(���)������1��p����ZE[&{��b1���|2x�a��=No�gD�zTC�
��D[��my��9m����/$���;��������}�6�Y@V��3{e��'Z�i��i
*��/��-L��>�:����>�� 8Q��.�s����Q�^,>Mf!"�y!��Z�����F(�e���p#�!-�/4�
z��P��i��T�"�+��������H8��#��-�-��Vk]�5�L�0\�Z����4=�p�A_jA��VE��&��tc��?e��3�FB���`��"Rxh�X�'�����4����>��_H�
�FL�"��������JJw��+^{�<@��h�4���h���������G��2@��F�#��JB>��������JS����_������~�����sb����-���5�h���]Q[��S_e^���z���?�jE,=_���(�����
-Dd3Y��s�[��������L���b
<|f�c����6%��3��4L/_A�G��O �����Ch"qLZ�c�+�_T��a�������u�����V��E�^�����$����E���J���3�>m���Pm��m:��v�c,�4�<w<F�k�N
���M�M���f��T�e�Rrv�9T��;�_�v��������D>��M!B�0R>��v��!�V�	p��Z�`$���D�D�������n���ESy�B^<�M7#������bB���y�P����A �3��g}���m�ay��|�G5��R/����g�l��~/�h��$�H�$n!��G�+��/$`X���GeJ�CTo��
6i�o�����1fD����eTv���Y�8sh!Z<�d!]������q� �R��w������Zk�z�x��8��rh{39���o�Fhnc"�o�1`�Ens[��y;p��b�X��n3���q�e.+/[��9O14����y�x^��q�O-e�7�A�b	���f�'������X�<��v6��������EM�WvV
�o	�?�#����������:l#[�6���M��P��[|�T���Z�DAc��?�X|�����3Z1���qDa�[t
���w�#A�d\=��^1j&qAZ'R�<������vW9��n�� �<�_����Ml:�[����qT-l���0���5�6��-i��-�3�(��=,�5�����"k�v�{5�0�{adBDDi���&�d�@D�<xB�����,H,w��O��@��9J�Zx�{N;�lE�gs�e�9�E�|^d�\6��/�PH�-P���C=��P�"��s6��i��a54N������d��d�_oG�!���gf���,Dd���h9Y0(�����!��o�"�`��w���%���>�*Dw�n+����;��B���dU��5�?/":���A��V��av�E���~!�x�Z1q��6��:����Yk1z�N�����O�L�J�3@�������B��H�x!4ql�jp#����&���x���~���]��x��I�������N��`UM�6;r1o��FJvj��	�XQ��I	��D��b������v�=�|���lg��c�V�+�����h����I4����������$_
�n/&��wD�u��{-H���(;`�,}*���Y|��s?@����)�>Q�~8�����$*y��z����*��H��y]VA7?��P��rO�����6!l&�+N�������s�S<��������B,��7��^�?b���^�.$D���U�=U20��e�;������Y�V����D��.�_��4��O�Im��	88����p�������_TF��Y�}^,��v�4?��0h!Z�N+r���S���.H��L�l������b
�
���.��E�,j����i���h�D���"_�'d�����ot�6�A]��l��T����T���l�i�`(�=���@O����F
"�Y�A�q{��J8n��������!�/�nS�/3���{!h!N�v��a��\_6D�
�������c����$�m�p<�Nr]�;-�c�����l�����#�*�1�U��_���@��a���62������6V�
�8�`"���-�����Ic)���3�L��
���N����V�\�i|��q�`��B[�=����o���<:Kv��y� >x�'5q��E?�'����a���9������������(���asx������94#;�3,�Z���L�hA���B���4]��V{�d4r�����a<?��!=?���|����e���"	��!����^J`w��5�����">��}[n�[�2����������5���!��!��(��C8�
*�v�.�yt����<������+�;����,����^&2l����x*�t
�@���b'��6�$�t�����,hp���M�j"U�C�����K����+B��z��Vw%;Y���Z/����i���e3���n�������q������y/Ddd0��Z��'$0 ��7���a�t)>���f�kv���8�����=���Bt�2*Q����I��0JRk��������m!V������/���]�:�G�
e��`�����6+���x��Rm���7u���+��Y\�g���kp0)������uS�LP�������#�I��\�o�`0l-���8V�6�x�f��T78���6�\�6��"�K��|p,b~����~��A0X����1��[�eC���65� 	�X;�C8x������z�]h(��p�cVmp�a-:FX�c���:�P�$u����D���g��S�o�]��cZyE:B�!o�B����f�~��Y�P��3Q]�"���)���M�����?p��B�W�4,��T��2U�� �+�����
�Y��?/�!�]���S7��`Q���_A:::�Em ��8�9ND����u]U��G�X�6�H�7>�So�
��@���Z�Q��B
8�%p����>y����f��U���mhs%���������g�~�0>�907eE��ZH��L�a�>��f(��R8���%�`��4����b_�<&����,j��B�b��0~E�azgR�������;8��m��	9}x��R
:�x$�{��b��	�������hs�u�������J�'[���R�,5i7��~�8���d3����T�j}��������+N������%p����>lo6l������8;�
��5�6��G4�s�z����;sY��������|���`0	�J|$9&����#�>3X��6�*z~�������l�B[��@���v��%`��g{�0��>�o�9�d�V�dN�=��$������d�-
�-��`�d7�f�M�BD�w�V�D���(�Ry�x�lJ�beZ�+�����%]�8-�Cl.L���q�������r�@&���1]�?���k����������%]�:�����lI$u���m�/���T�{�����.Dd������"�dIW$�faI	Z��>/�-�e9�������lI}#yX�iM�}�]�m���n�$HcOf�ch��k�WM)W�&SZ�|m6��%�����f]�����<:~�B�!5m=��de�]u>������JC�+���1��W���c�4[��K�8�"�!��6�`r
h�uW���"cY�L�>l
]%>��q�S��1����w!�����(J��5�����(*$C�yb��2���L���(�E�&�<����da�\,�P���}��v�``�*��K�*3����U���P�?�K����u*�Th&LY����4a��x#���Q
0Fj,GC��_@���l��%���H�����4>����Q�"���vs��b_>��(�����1T�
C&U��%�1���z�YI�0�"H�����H�(A�o���`�����c�HEi���+H�#���x&>�
aC(#KE�M�Ag�F�S	6�"�!����H�yOn�Z����2�Ig�J�q���������T��4�`����3�����J|��2J�O����<������i��*rRD{E��s�$��\�
�D�J\������%�lT�E��������=ZM�$y�F]�-�V�\��kL�P�������N��D(�gB��NiE�"]�&{���h�nbh��:m���p��Iw��\^��?����u��_�'�}��uO�P�h���.H��\����p���qZZ>�����c{3u��F��8�������D���-	k���#"��>��|�W@8'���.$�e��LL^����I&�u���Ew�;���~����9�26:��|��l�_�����TO�	����fAw��X_eD�51����P9Z�G��{��^�}B�"�M����QToy��2�KV�UpCo+<g�V�����6N��l��������v���p��6��9�1HUK��g�5o}�
6�2��c,����2���m_2����{EP����V�iy	>o���n�.k<��"A$kNH���1�l��cX$�������n���S�V�E� \�'y(H;���L�|��,P�>���bv�u���cojyw]m��">�6��P��y�M��:�e>>�v���"�4��S�m����t*�,%;5���c�u������ V��-Bjy�w!g�����?����� 
�Ib���������Tg���;���K���$1���*�dt`����}���z�R�:�v��Z���lFP����\t��b���G$#�9'�D�OQZ����^���&��	�-d�Z{0�w��a�N���e�?��&�M��vAXb��J(a���m%1�p��T[5���3i3���%��^>1����f�[���NPPI��m��\������D���2�?;M3E�8����<������t}��~�����������>[4ec���_������"TY��!��*b!>�#��m�A.����=ljH����2�.=��w2��WsE034G�C��d���T>7�M��b��s���1a$�gT���HB||���e	�_(�����"���c����������V��t[Ok��	�������X�������?���"����{�z��5k.���q�NZ.���D�D����4��������R���Rqqs���_�T*����j���P������������g!8� 6C�-�f�PA>���������H_��U��Q{���=F:O�����*�UL�q��:�|��r]�t}�K�u���d�I�U�����7G-�|r���e�O.��������{>��s�R�'z����W!5O���|����L�~��_���c�M�����R���Z:Od�SK��M|j���F�Z���������WmY_�?.J.����k���H��c~~�-��o���O_������}z����G�nD�����]��O�������������{_�����G�[~%�nM���&�K��7#	}��l�����6-@}����:n�tL`2�W��G����>���5K�T	J�En�]�^�1	S&���_��7\��-�N�������{��3���[���a<�F��T�+��Gzd��������<�����ED��O���R���G��@B�q�g(�lw�9q\��3�~yH��27�t��>U�:���7C�y�13S����=�?�R��&@��r=7���@�`d�o��,���F��$��������xC9������.�H=�����K���so���	K,H_�{%[V;v<R��3��;;�9i'p�-H@5���f]�Cd�Mf����Q����x������.H��
h��mEE�<��T���G�7?x�����~w�7� ��B����y:�����?���y�����4��w2���m� ����4�jz�M����Y�nX��N����T���mv��8�D�k��*��WRd�M�N&(�;��V �wCw-Z�6�\����U��R��d���c�t!���B�������x����N�a�u-��7���/��c���Pm8LC����Q�u-��$��n��>��)������7jXk�U2�b���p�!,����U)�%y���uO��|���@9�
a���V$@����
s�`���V���Bk=���<���%g��e�I�� 8�^��E����	�\�PS�r���������g��LT���� ���b�^��i�`�� �N�X���=�Jf{:,q����h�M]��� c��#�6@����,���g@Wj���v���M�����C%�5��f���o�q�`S�V�����tZ�f1������p-�a����D$b=,��B�h�[^���,:K�@� �9M����q�! �LJg�2�v�s\��$�T�nV��*$eE�z��U�O?r4%V��d+\V�)��Y�z��`��$CC}���
M�bR.-�w/���el;����4��6(��Y�T2-b�U���`w�J��DF��k�u���<F=Bq��"OsI�[��!�H@�c.�m�u�4�������$��x^v��e���hCq
hA�}>���_X��h����@�o���R��<������]1hJ�c����'
�T1��/DK2s�r��1�6�6!����8(-f+����,J����DQ�3����aH��uG6�@\��fhn���������6VI�S��u��]���������]�GW`���k��X����%~�X���	8hK5i���s,��[<������,����>/�`��K"~�c0D�2��-y����{R�M��+��-��$���=tY����'D]��J�a����nH$��2��vV���-&{��i�/��6�	
\9x<���-�C.�:�������/H�E�LP}����/`�l��:����_������f��W$��w[�`�80M���L��s��;���G�����P��#V$�����Jv�[B�FW�[�m��zX~{�v��N������fB�,���,�J���<.�������o����HE?�a���*]����<V�i�xo�V$����^�k~����+��|)f�6gB��5���o��MT����0�
���l�`!*_���wy(�����"p���;�H�Z>��2�|������]���C({�<s��>���9L�g!�>e�)�KD_ozT����h�
�6���� s	�%k���f;1��h25p{����������VI.��'�8���	[f�/$�VE�;��:�k��z�|�8-kS��BP�Y����;@S�J�}��0����J�T']ZP�g�!������i�d��{JU���d���WTd�$8��5�7�}6�3:
jR%b��������I#�qd(���
�z�=�LE�������\}�7��3�d�����"���0�q{���iAMwj���
�h�gB<�'�>�a$d���&G����83��BD��0�{<�\�qW_�C�B���[����tM������DP��E"�/���S���Y��(�rd0Y+�����n2�	����+p�)9�v�N�/����=�3�6���{�a?vj�u���v��zAR0���z�g��.2b�X�0����@3���O'M@f���}�y����8��'���Oy�+�G�fW:������� fV��L������{�}��63���4L�l!s]��e����
�v6��Y�dg���6t���R���1�NZX��b�T��;w����-�I��d�-�\��.VSpoS�c_�x�v���,�~�"kh�9,
�=������sD�k�=��LN��MA�5:�(���8�"�p@c����)�k������t���"�l���J�s�x�s����'�l��+�*�A%�l��x�L��JBf�=H`��_H�~h���u1���!%[ g�?<G��
���$5������*Z����}~_=�!��SF������N��W��������aY����4e����r�|�X����'El9����{��~S��x���M2�l��+�����w����$�P��Q�E��/��x
�I"*���� {���@Q�P���R����r����g�@M�D����%�x|�JD��4]��r��� [�|���*[��ZQ��.��[.Vw7��=(%MC_�7�n����H�������w��/$`�n��[&�{`��J�Q�?���my(���`���W���&�$y�L�l��K^H
��`�D�u
����5yn�����������{��S�_H��v���zX*���(�S0�l��R�?�_(H��g���A-����V`�D�QI�U�+z�@�,������wdh���V�d,��������D$�#��.f��q@��sT��D�3/������M^HXs3�>9"�lo�w[�]��3�_�`#
��_Vb�S_�V�d���H����YHO�����UR�7J��P�]���O�Pz��W�f��X����_�z���l8S���] �y��� .����z���e
e��+�(�i�
������*$��B}�L.h�������:_�_�`��-}��"��O�F$>��Cm��MX�&�'41I�B.�L����3�	:���L0\����p_�e�c�����G�s`A��K`���n��H�f,�0�g�?/"��Q�<�V0b��""��������7-�Q�����ta?����k�d�2!���/&���i��������F,�1�zY^�p��;�E�p���"�K|h��w�\�����q�+�_(��G�1�V��PTN��l=v�`��	�vd�x��e"_���4�&�����x��0Q	���7��e�u�"���X�u%"��MDc-m����Pb���4��y1U��5BpF���f�)����\��"��B�M�����k��oa���TK�4O�N�Yg
F�
�8U0�+�z0�jj�k/��_.�����!�����-'~���w��Dd$��#�`z�����T���x��h,-����,��i4�������I�QN������C�����0�I��No�#�~�sG;c�w�����)Cok@� �a+��q�<'7+����I/�{�\���L���2v����/��f�.eBMv$U}�-T��[��A����[���~�i����l/&�uU;���J�O�D�]��T6��E�����|k~XVs lmj��@7 nGq.�(&�Nh���7K������r����O�3�����
m\-��X]j�%�G<��6�(!���G��QL����NKt����������X��B�u�����>E�O� y�3[��%-��%����:���K��)��&�W�{�W,H_����	`����n;"��
U���EW'~V�v
_=���+���Wi@-�2P�2��F�!?���6{8����}�H����d���m=������y#�9�a^���������!HS������S�d����{c�������=���t��g��=�dD4B��JBfL��z���#m��=��.��0�J���8�nc����W�e����$�aT�������z#���e����m.��zGne����1�uY����f(�;J��6����"9#U��R���$����F�'6^�� �<��-�z�7��`��uiO��\����n�����a+Z�����������d�z����kL�E��".s����A���@A������x\�|]q�������G�4��iG�V�B���AP�"K.7��/^�B90KD��������5�t1A�M:%,��"q3l%_\Z�!�_�n���|3?�y"��P(eT�5|�@>��_������������]����89*�\{a�t���H��w�Q�+i��O�N��#/N{A|� �:1�yr-N���]YO������7��'��2��:X�S!�kz�I�W�$���|{<�y�,�f�/9(����L%F�ov�F��T�#j���OQ���R�P��(�����V�G���J����{��M/�c��f�d��$'�J���:����\
�r�1�"�9q�[���+�
��1���>��%|�����/��l��[u���^A��"h�N�wE q�9N�YR�(���6����wQ����*���|n�Q�0��z����]�	��<
Y�����X�0��tq�L���YN�$X<&�2���*DR3��c���I�a��i=J�7��d�M"���xj��I\�K�l�����Y?G��]z@A?�]�(u���L�����f��6Y��d(2�L/\eZ�C�gA�	oU6# ��	��U�i�D�du���W�4�	|��"�I~4����[3��z�����2�Xu��[O�E>,�J��8t"���y�M�o��<\���
�e=�RK'- ���Ty�����1�;S���R�:�i�O���)�c�2X���1o�"W��q��N�����H�0[G��\�1���=��M$���nb�e��6[@c��o��>��"�g$�?vs�(����4��;��U�R*-��y s��$PVG�5�n�s��Y��+6]��z
I�-��
���0��:�v�P������I�n�s���K�?
�b��]V76��l����)�du_�-���1����P�HC��e����?�Vrc��>P�\������NZg���I�$0w��C*��<-(���+>�A���'!/����=)���Y��|�&a6q��g��>1�"~�v\��o�pD.����"�2d+<�p!��ww���E��:U�]<tL�YA������A����]Et���"�Vo�aG.0W����������%q�K�W�n��	�6�V���5�R�$�C�Q9f�� �<iI��Cs��*�c����S+������E���nn.�~7/7��t*��7&x����p �T�G}2��/:������8l:H���H���,�%O����#:}�aE������?���h�L��E�N/$���M�N�<iD���t���ru��'�}&�~[�:�""�U��E�ZX�M���lNu�������n�YT��D�&��
��O"
���8�Oa#���D<�,��@
�b/O���l�0?�2s��p��Y�����7����V�B���u�`�=��|��x����RF�Xdn ��uO��d�dJ.QY-�8�s��w�vZ����
AF��f�R�
���K����%���0u��n����+����s�|��8�>8,�*���� ����el�����x3P��$��E1����G����&m �kc~�Z�w��U���A.�c�G�u����.��h��(@�	3$|Z���O�M��������l~7=��M�%����2?��E����1�f�t�����MlTm]\D@q�p3po���m-��H������I�g�Yl�j��el������8���?���05O(>v�-�����/"���v�U��cg�DL��{H�w�h&:�dN��?��f����hX���cS�H-f)�n6��4�4N��1�
l�����g]W��(ME�Diu[Lz0�@��+��x�ZO���������-Z���-��s���p��D��1o���WRe�A:�b���,��u�9B�{��:�T�������<C$�^(�k�����Y�H���J69,SYo�2�tAV�����Y^��0ZTGUn(����o�1������ha�`/k_@�=�[S�, ��c��on[H����D��E?�>���c0v�6^�.��
�Q��������������������
|����@�`=;��g!Y��qC��w'�qD��"���2�U�H�_���!��<���$������/���H�K�W�x$�cF2��ix��o{<k0���}��4H��P�����	��6���ff��L&~W���c��=a�4�{/M;�n���Z��@&t����\���-z.N*/ �2Z��{����/.QzC��::Mq��Q�C6�w�
[��(��z��8�H��5���m�s���$��qs���Q��������6�g2��OS�Lz��Zx������l6�����E~�Y�1�i_|g��D4*�D��c��I�DC�>�t��Y��lk)X�:E���#��MQ����T��.�c�M��N�]�_�
��X��'�x:�N
���dz��*�B��C�>����s�5<��&��?|!��HbVv|�����a���v;�u��hJV5�h������F���+l7W�����(�6����7�����>t�����
��>I7��+��tY��E����:��S�8u�,y�6-T�6:X�6����4��/�1�����P���5�����3.����*�B6+��&]�V�9���oP�$>��	�z��|����v�������z�7�<�k8����n���6l�<v;���h�O���C�w'";����WT�����n	g�e����|���K^���.	�{��v,��^��L/��,���$Q�����F�e����IzB���
�xUpSn�(���*Z�XH����� ^w��<�A����!'6O���1��+�m���k�}^H�o������.��j3���$u@��n�?��@���"ao\�9�i)�-PX�a�6M�������'��Iv��B�,����[��o�Pw��8B���!m���[�{�<�������Pt&�������"f��N���f�a�����Y�������6�hbQi�!1��X��g�'�#e��yR<r�4����~�[�-#�sn;&�����m������h;����_W,����*�A+H+AxGkV��&�����Z�]��@��.C����^x�:����u�	lGA}f�IA�I���������k>�1{$m�uMj�|�	O�#y�P���6�\�������
��~���?����?�/_?]��������v	N&�=�5�*�O��!����b�>�f��!���.��������Q��<���(������L�]�b��S>�3<y�&|�H^bR&j�������%�p���kYv]���H(����+`�i2?u#NLJ�Mx�PX����x��n����$��p�\Wu��;�?+A�QO�� �����>/��5��S.Je�d�8�HR�U�h~r�nO�������x�A�W���4�)k	zx��=��nE����+��J'�*un�*cC�c���6%�6
Q/K4�b���/D�2�TP7���>����8���t��4�b��Z�98��3+�/6��E��J���R�d~LdF�+���n%g�4�l�������Ao�{G���i-�y�d��d;n�6|��,ek![VP��Y�=+C������=]PfOyF���������&{��v6���k�����(����_��i!���BSzbYd6�+������<j8��%@S�$�����<�dO��MvtE�7���n2���<�lG��h57�&�������7��l[H�fF��(��	��nG��t�����,�[�\q
���L���tG/�t!"k ,�����)]�|��T���>:����{z���dOW���fo��O����������UA��|���H��dRW��w�&���waR"�y9
�a-3,�c
�,�c.��T���l�����B[iS�.��.
/�1�=�-���E=g��"n�����������0����H��ZS� ��w������������i�S����tA���n��A�%`���r�-�V��=�_z���lO+�|�G��'S��5]���x�9�&�bM+�c��~�q�[�%���D"�lOW$�������=]��Kq2S��5-Hk_��4�������=������lM�y������k���Qs&��������t�B]���lH�U`#l��#��g�j���S����vhs�<������vP-��.�8�50��+Re�fT�^���lDCGaE�,�U����6���d��*@�����@g��7�o�=��R����p���y,D�Z�<�"s&qAE���Dk�J���Tt[:�BZ�����l���#v�q�^(
b'>���Fj��\�/t�y#��k��m��	�J��d���oO�� �
W�M_�<�S�+�1�i=�1��������Q�����_5w~�1O`?*H�����������(w@�>l;iJ�b�����m����KI����]��7�b?�/b\���������4���2'��S��+

�G��F����Xw���a�-���4�w�n�X��p�/V�����`0U5M�@qG������d�������V����m>�~o���J@[0!�I�L��/=M���d��`��I:�<;d!�&�����T�3����I~�J���f5�$��t!!?L�k�����D����2�kP�}��i���� ��Y#X�������R��w���c�?��b�bV����n��/�I��
�����+�a�z���Q������ko���MzE���Kj��=������/�C[�N�p���7C~,h7������h�H�l�
Y����y!M�h�e�>��,�j~���������
@���9~^L�U�$����~���N��/��(����v�g�%=Y�=�w�PM	��7QeF��y;�2�
/�E�y��v���Yz��ot�M~�����������T��K���>o�5d�J?�t
4cA�:1��c����mL�tw���&?����Gf��V�8�{�qE��<�d��&A���-��D*��_���*H�=���wB�&�� ��K2}"����IRq��<���#�$-�qE(�������,{�hP8�@�����=��A����ca,.�����T����� u�m���2��H�m��aB������D\�p�?�ST2�xh���n��|�<�(,��0�w�1�`TeE���Z�a�e�	��H��������S;By�ZL���� rF�U��q�z�Lq\��to���C9x_��������3\H�E]���:��xL�!O�,�c��B��K�M�&��~�
[`*QRU�-�PQ-�|���9��1�����f�v����d���4��VA�L=�zAjV���
�����6r�V�-�=����{�����oI�� iz����0V��Y���s�� �S�qSM���k6=��E��N{����>/���3�������L������\��Q���c����Y��>?��k��8�o�`&��
����iE�G��S���'�����H�����h~��&��E�,��G�,���4-.�[��o��bzFtRR������f-{|���bg��B�Z�~�a��g���m�e��	�R�5��%�M_9�Z��>��'I
_�9bF�����P.�ZI��lm����{������� �x[�>�mqo�e���@p	�Mt�s��,�g����|�M}
�e��y\u"!����bE�y���������h��D~�,7.9�Kv%"��>��s��U��Y����L�G}z�ZDS��r�P�L���A��.�������+��)&��Tb��+Yw��y�N���h�/$��������9�o�u����d�/������8���e�hq�F}!�;����^���m�af���,�������<���6�9*��R���x{�D�a��M����@�L/����������	���|����
Q���hN�Y����{s�����s�S]9�Ywr1'��-9|~Oa
mz!�[�@�U���-�r&�9S�|�`?�Q�P���k�J9�r�*U�V��`F�V��n�q����b�(�h+
U���.�r�
BW���T�,�n�n��K�\I���9������'�.�����lD+��E�"������� �B��"(�w6<D�l�J�@�)OgQ4���NszJ��m�%m����h�J�JO���+RL�M09&�#�����^���C����M[�T "�,�����_���XA�@TC�-d������-H��z|4�����$��M�X~������9@���Q�j��D5^��LT��?�U�A��}4� �J��:]O�on�����j��%$V���_����$3!����D|�OPr'F��-�@���D����8�6�`�R���3��$��9�R�.^�<��[����M_\/�B
'�t���>�h������J@���z�o��$��Ca��ci��_��n�H�����JD���b}{"���Y��#Ov
���6��`B|x�|�/��T���z�~��X�|�g[Q|�U~�B;�7J��d>k������7�z��uT��h�D������v�d�9�#��FlA�<n���5�.�C�����N�Z������"s����/T��Jc�@��_�����w�g���b���H�y��DD�-���N�!�l��z@L���?�hCS��l�<n�vk��A0��i��p:���Q�I���c^�j�W6��l/�`{lkLt��9����$�X?B�c>���]�/�����������B+/$��
r��X&��[	��h1@��{L� z���)yl�������|�H���r�U�����k1o���i�=�}g�Z�����_���c�v�k������X�F���a!h��L~�lX��Y�4��_�&�=�U�� 5�����8����?�����}�]*��4�~T���Z��H(x��-Sa,_8���"�<I�.�(��r���!��>�����R������B�)���R�L���V`�&��L5��V�G��2��q���������-�
F'�����'�d�Q�������L��(3�}$uh{���d��L �j����B98���l�Q����qp��xRD��������i`s�/]��/GL�bL�	��+�����:���u�>�_���c��6�<u:���1��:���x&C���oCuL��e�S�+WZ�|-�1}�w�d��;3iH��M�v�F�_���c�
����#_�������&���}�o$*��dn&�c%�6�;��y�����L��m�bxmN������?1��L~A��q���[a9�c\�O��q���b��R�M�<��-�2������0�������)����N��Av����2�X��~~=g�AS}�#D��]G��b�����^og��b�~<w�1_���{�.)��u���^���G+�U��g/�g_��Q���\��z_���� ���)�1_���{�~]��u-��R��Y�����^_�w�R���qd���;eCO�1]���SL���\�z]��L�)���&qb�~�rb�^���?j���|'�����^��b�^���?��\�����\������k��Z�k-����<�������QZ�l]���s�:k�>���������,�b���uH�W�_n���J�RL��v�v�U��U�����y'R���x�����b�����^�n�1]�n�1_���{����b�����r���;�|���;�|���;�|���}�����n��}��@��q�^�{7p������(v?�����^_�7��;��P�s,���!v�On�]��b���������'7����
��pC������'7����
��rC����^��b������?�!v�On�]����������
1Cnb���~;����-s�!q=�������w��s�nH\��?���^���?j���|��7$��R&��Z�s-�;�
����7$����k��Z�k-��7;�C��3d^�.8_�X��"�O�0�_�R���,��s2���
@��D�,�aa��L��V�L�
�x���T��		��57�/	>�t���;��	�^h"��Fr�_��������]D�R�#�8�`V���?���x0����T�"U�CG]&���D5D�{M�	�Y���*J����{�cu���1E*J��T�~��Y+����"���T�[K�!����x�n���9\c��p��|p�f%!O���hg�!CD
�JtZ����Vniw���!��lK+�q2��2C'D#�BpX�	���:����� q�$^�@b�B�����3�^�L�|@���D�^�-�j��u6{w��"���V�E9�+��]��L�n��7D�K�}����0I������OF�_&�Am4�@JC��-HtS�:&m�J��b���k�������?;�X���Hd�� �����b�0��O�{?8!"�6��J�Z���m�p������Wj��I�s��4��`}����LVo��M���*����8�d�]��_�[R-���_=���c��/�\������I��5���`������i;y �%j>o�M���V��N��Y�Z���U���(��*��=I�5����P��?;6m��x�L�&��u}�wK�p�r�����v������=.^Dt'��X:��6	������������d��1��mqp��lo9���G�s'������H��zJDOM?��j%j'O{H�+������}<�RA��f��V���G�]��Zv��_0FC��c_�1g��I���'��q![����~p\���B^6VMu��dL7��v�K���`��1ma;%�Sj	�
++^(�2����D%E��\�����b��z�C��	Q5J���2	;�2���'f�2qoV�9�Q��=
� K7a�g*I���J��2{��Zd���|2�f��A����)���w/���;&��4Y	��v�7�N�)Ey�������0 �:{��l�B����0�}��o�@��(/`&[;�����jR�s�������6��U��`����S��������E���2���<;����p���;��W�'Ou�\)��e���(*�����t.
_Q��w��JN.���[XH��x��J��Uul�����uO�W|0~���s�wHeK�y#��z���S��+FQ,�������$=���T���Y>��9<��ZU�;���_Xd�I�L�4��wn������9�ARd5��'���>\c:,��T��v��|��;U�-z���?o���Y�n����>��Nt&,_R~�^�����+h����W���,��v��Q=_���m���aPL�>o�^��T�	������>P`zg��(`+�O�6QB�r���(�V|C���-I��5�qVn���\9$������YR:z�]���y(� E?��[�������S�9C}�4�S�W��.�g�LU9\�Ty�E��5l1y.���tL0 �4mms�U��
���r����@��2B����B�{��"G�o���Y����p~Y�B���x����nFmp��y�D��B�F���B�i���"N�<wv^o��c����l#��|��{8��F.6-x�����b����~���y�N����{e��(5W
��)����	���z���qT�V�e1�����ovm�y�]���X'���7��#!!��th h�_^����4���}�/��k,i��U5R��8N*�� ��Ht�D`�q��g!1�>�Xid�o�cq���],B[FB�����;V�8�j���F����G�����2{�	��L���p���Uk�1�����1_����I(�~;������{lB�c���S �z�G$�[��ha�JB\���	����;�Z�X�Q��[�x�\��2��|��a&�s��������g�]�����s���fM�[lS��e�$�����0���@�s=3y��]�����_�G���x�K8ss��|�<f"iJ-DW�\>x��8}���2L��k$�"���.a�,���/��C,��I8�-rC�_����e}��a#:�B����)�1
��,����Z�k)�-�\�{	i0m���zP+m&[�=�!.�$��y� ��A���knt�|t�__��'��7!,��Wl�F�!#S#�"�w3`�����H7�8��98,����R��	b�Z�V�� z��E�3��Y�����.��|IBt�����sw��Ir
��cV2�%P�;�j���w)p-��5�n�tf��`7H�a���j�%v���`%<�ZP���u}���E�0�u ��;�rL�)�RbGJ���}�~F�ubt�j�j����>��[F�����3�N(v�<8c����H����$9�Q���@����"�������:BE��`�Qx�����3��L�<0��$1��D
����	���k3W�Lk���]su�2*����<���D��6D�(E��G�%�!j���"����e�2N$���<�j��3A�d�[�c�n�nIt@Z �w/;�(JG�Y�T3��������06#m�<
:ZK�����f$2V�;F�k�^eyt���Mc���r'R�}�pBIIo���s��z�����Ud����{���_�WI��{���oT��x73�J�]��Y�6#M�����������/H&���}��}A�(^�l��k�ze�xrB*c�M��&�b��/�	����d�m.�����7L�gFZ�b�QA��/�[�#��pG�����oa���4~������j�����@�����/>��{����l�mb#!L�L���o��xT�����xa�_�%��/H�~to�]�L�m�����0�I6�1�,k�4}f���r�IC�q^�}ARn�G�=����)pO��(��3jh��
�.-���}���n�U��S�0� T��#����Q������Y��W����_�.KK���`�.�`MH�����iW�Q�����xn���$�a�A�J�
:����s��
������Cd�]v.��=i?�K��*=-�����k�O\�=�&O
���6���E�['�YI��Z	`eZ���r��Hn���7�gE�C��p!��"4� Y����w�bG[Y_�Z;��
b��k2M�`��@�-��e>�cN�%�����3�k�6���' l��
���C_��\Q�m���������]��n��tp��=1��`_v�N"�^��o�
	o)(*����v*�����@-{�	�9@��4�pQ�]	;
��`�d��w3)rG��!�GG+��.c�m��w�n��@�����Y}�yb����R��S��O�sds�������{z��P�3�Sl�>�W�`����b:$������6oBI���N;��KR?�H5��}g�;^�zk��7�����N�Y����L;;��%�DlW���9zNc�T���}8x4��|L��~����0�����d��>��
h���y��Ti�4�P�x����0t<Y�}�Gh��r�<qc1<�#q�A�~�B�p?q!�����=q�����V!'_A�����k�B��# ��W��I}}F<.�`d��f$2��������PV.�x�;fr��m.����/E@���qp{yf��mq�ap����������ww ?U���<6��;��7��38uq�d""��<�w���$��o�*%"_n&�U�����p��B�|eF6��J6_�Y:_���|eF�]�+L���+�CM����b�R������J��������S�b�2-�+�^&+�6v���rim����%/�1z�nF	0z7n|��w�g+#)��2�gE�x��8�3x7#n��O�9�w�����.��'�6�#x7#/=-���}�!�%� �1�a�"�u�����c�� ���W!��|�Ig
�'C��I6J�D����E�4v����K�p��3�2�xL�1�
D���!��-"�1��Hd�o�*���"U��.b����^�9�g��RoF|RwY�^EYF/�i!��H��������)�7#��o��y���<g�}n@�`F�W��\q����U �-7�P
�cM1<2G�H�G�x�����xjY?�������X�z�V8~������QZ������c�5�11��]��!O�M@�,�������f��W�`J�1/���9�D��,uy���X�D�=�����u�-�}D<�[ �.'��gx�l��st��A�V��e�p�MTJs����=�C�� <�#�������Obt0g"?�M�[��������i������� ���U�7��K.m�3bpp/$��y��GsBl`��DdFa���j���b���E�@�f�J*@����h��Pc/�+��V.p�D��-�*��f��J�|&E�h����	"J�p!��V2�Rh�}D�$�=�y�k >�~?4��g��AZ�|�s�'�LR�^���nQ�i�w��Vi+���%�!8
�y��y<[H�8���PP��{`�F����}�+��]���VQ�DC��X��c1����<C�>���?GD�����b�P���l\�� ���� �#]��w������k���Y@�h���*w��n�`��Hc�������G"R�ox�x�
��jOQp��"����h���%�%��\�JD�yS���Z�x��Ov����}m��:1+������`��P����3�:]"�3���0�8=:��='W�������u�������c����1��X���/5!���p�"\�'��tc��?e���u#�o��f�b�`��"R@�[��[���")��@���Z����Y����D>3��h���4�6����&(����&�������Y�������e���L�J������q���>�������x$
l��=|;H>"�E!�Z��8����	���xA	\�K_�<#a��������f5#�}�$��H�<�l&"s$�/�T���R����LT�'�*�-�~��Y���\���0��d�.T��./_A��6_@�y�Y ��4,�cO�qh"(�	��Ew�����f�rA#�����IRy��Y?\�H�@�lME�����Pmi�{��H
�~�����v�H����4���I��SI��RL�)},?L�bDe�bBE<}y��##�3e,����C|�g&�h�(ze�ky
�|y<x��l����m���k���\�2�+E*�{3rz
�L������a��� $��H����4�����Q� ?�)��8:l5�����w�������!�Y)`Z��*��w�}AN�����,	}��%O��& ������{���X`/3�t�����*��������os�x��ur�q~i'i<�km�@J�@�9���V&lS��b�t��T"��c�B�X��sn���	�Mt
hB*��OP���X�����b	����bdA	�S	`����&���M�ZEy_�gER���&��<~f �e���mg�����,k������W6V
���������<��D���2!���yOA�a3~{�Ta�%�\�+�"�[��T���3})�����Jl
hA���% =�p��;�g�D���H���?DK�-�'��7VA�$NH���#��t�������������5\���do&zX|��ja;�.�C+Sp��u;G[�QK�+@����NJ�5�7����k���)��l��W��v/�L�~�pa�����f%��@D�����}���=�����nvZ��/.^�Zx���x0��`�������m3��<7w�]H��e($H�����a_/Uk"�n�fs�=�JDl��\��`I��LmJZ m]���f�&Rd��
�����T"2�17?"���A���?��tk'"2l��>�B0c]P���c�B�C�6#-�����E��'�Yo��l����BDvo?�'E5���|��^������(?���K���:��8�Yk1z��^��"��o��O"��g��� �W�PR��Dh����NF��}��BD�S-���Z��]-���.;
����`UM���}��^5!����uR3������N"H 6���:�����������MH*��	\�X�F��\�����@4qi1�n��W���J�
J��p�k[�8:>=6H��5!z�s��2V��
���E+
�}|�z���)�1���z���s��D���h.���?��>	���*h�A&�r^{��~b��P�nbwq��z]Y*y|-���m��8���m�"JZ������&�x����DB�C�_��������!�[�NW�zy����J+R�U�������KhT)I�;�	�1RZ��-x���Q`B�m��P�3�j���n��a~��i�D�t�Hg_��p�x;�g���\{���8��)�7�N�����h�,j���j����_h����A�B��3#����������L@E�s�*IaE*s�������P[8�����Vf�����$�<�s&�74�}��B���4$�����<� |� ��m����6��IC��<l�`�Y������|`��3�$��9��~/��� xwZ0D�|�`��"�6dy�C�������@�3�g�99������t��Ol���,^�;�K��e�S��3<�D�\A
�����0���0|�^�xm�V�\u���6N��>j�.z����o��O��S�_��c�`�'����E�vK"�7q~�62'�+��MK���T$?R���k}��20��y'�:@�����?����<��$��u��M�0&�hV�����<�?��!=�?���|����2�J^����fH�F�	%����/����|��v��l�oB>}�'���=�	EMk���!��!�������PXP���v�N�k3R��S�9��f���<#�����>�4�2���ki�����>�����K�5�$�t^�Y�LH�wCzN���VQ/����^�����L)f���+��t�E��Zf�?�������"��%Y�|�z;>�������B>�v�1�/�w����R|��f�5q�����dd?+������B�eT��a?{$y��\����y������Ic��zR���l��]��o]�����%��S��O�Y��������������c���Y"}�!�pB_e����0����Aw8O��\��~���^>��q��m���6q�L�3��>^z��r!_��B��"����_`��~�:p�,����1��%��!{�-
LHB'�O�K����YI����BC����%>9����	��p���Q��������}?1�.�l�v����y�y^@���������'����_��E�=T*�J��^����(b
�*A��"�"B���G����z�j�N��]�h���5 �	ra��J~5�@�UK@��L�F�?�Omt��Ri,�������xQ���&nw�Q�xce=O�m�+��M��_��n����A�[4���%E6N?��XP��?���'������W�n>�������iE�A���g�~����c&;!Xy-��W'&�m�>&��f(���p$^7�%�`��4��
.����(��!~���,VLw�]�.L
p�|����-i>���~`��tt�������
^��sBf�I���Ot�����U���J<p��L5i��~���=#$��������wC�l���WF�&4�����	%��F�s�������O=�L�\����lB4!�	�A���UE�Y������a�����R�N4�'���g�R�O��~�y���N�N��XT��S>��������s����u���J������lOg& ���3���t""�q2���4I�����!��
�� -�B����|
E?iV��NDd�K��`��-�Q0����
�)!��iQ�d{��t�~a"<F��<}K�=��L+6
�[�����E���QmF!���-|Z�	���,i����������&�_\��)�������NDd�����s�U��3�����{�>����[�?��j(��-���U-���&��m������Ka$�sKf�c�S�5�������V"���{q�t����:��j���i��MYt\@K����[����ft��4��v]�� �O�fP&��zb�?!�Ce��S���9�M�.�����2����	�"c��s�k�����E��s�s���b�d��������,J��5���B|��9��e�Kc����|E�(���'�}A�X�eF���H����8gb�-����e���P��IJs(C	�t�9_�'un���gP���0eu��O�2��N��KX��<J�s�o9��+�
��3&-���PFb�o~�����gE	��FF��E���b%jQ|W��9T��)��r��JDD=o�YI�0�"Hm��Q�r�Y� �t���28}�����:RQ�E��9c�t�P��B|
&��PF����t�����l
E�S()�T�`t\��j">�J��X's-(���/�X$��(c>�Rmi%�V;&d(
�TO���*�����(q<)�'cl��2���G?U�����X�I+��4����� 	��76�K��S&.�&�6k[�L�2I�	'Ue���2��1�C��>���>�
����	5�d�����X�<��M�D-X���x�e���(
w�g�Qv�����k/��'�ni�����N��wi��3RG�5W��n�t�U����l�M��e���}���1�]{�gv��x�<+���H�7��M�5"��.���P�y�sr�����<�A�L&�:o�D[w�U~(��~`:8s��cb:�e|�l����&�
�q������L$
���%���cAs�e�9h5�.��7��L����9��U�X���E.�����}7�v�{�.�s�JZz8��\9��j�3l���l�M�����m�������u�������M�3�����&�8,���X��G�e`s3~�������A1:�mT���$��������<�&"A$�N:��lC�`l
W��:�����~��~������)v�<������22W�u������g����y��3���<�>�����������|���Cb�M��f�|}� ��E���[�����
��Y+�,%��o�f���C�PL�O[e�����>R;�k~
�u2NbSo����Yj:���$��	������2�r*�����b�����:1��7I��O�Mf�2����ga1���-�X�������M*�U�����>���u�����kr�Q����i��W�Ck������>LV��vB�h'�%6:�d�9�R$dj;!l
1��>0�Io+�)������qgV�N��w��QpRo��C�����zkr��n
*�O����+W�I}����-�����2��"C	�_�'�\����M�Q[J�=#_*
p��~���E�|�a+E���E�i|�|�U����!��+b"��#�����<�J��=N�������-1��G�)kE�2E��8_,�xL��
y�,,�>?���#��|g�i��$���kl/�R��X.�T��l ���^0_+r������������\��8_��2�bL�c�~[��l��XD�kEZ
���k�S����\����t�&��������'}a�O^�;���LD�+..a�t���AeB������5���[����A3��hB��b+D��m����.���=&�gj���
]��{�Y�r���zT�����*���R��w����'�]���K����C��c���*j���w�w-������{��w+?�������w/?�n������w���>���Nq�$=���nb�yq����Y��&���������������7����������Q�&��|��&����w��~�����v�9�������<};2�M�w6(c�(�w*���/�O��M/���|r��?�o����|����������?����� �o�_�����)��vKnu��U���&��HbI?+�/o-�(D��7]�����s;6@&p1��|i:D��W�s�U��ny�*A�p������������o����q ~��2;�/��n�������Q��?���;�T_���n�����>������2�;|���}pD��F���'_�D���(i�.��:0F}&��!�����)��Dt�g!����|��%!|�(u�C'��F��������OHt���L*�>hb��)�s�]�
����@���r���hV�� �����9y�(7����8��g��N�FUs|�/�������W��I��j�NMJ�cB7I�p���I�����hB�~��f���E�.��2�"�v����)�)������V���		��<�MC�fTdMO{�<X���I�X�@?�Z���6� �D�����,
|������`����Z���>����&`_~�`��C��X[;��}[���
]���YzO%����N��.���-�k#T���������N���w���Q�v���\��h�U�YS�g2IU�#
�g�*�x ��������?�����Z��o�#?��c�����p�����
��m�]��$��~�y���)�&�������*��b��&$`�,c��'6�|f���U���-�.�W
��|(���!�3J������_*���qc���0����4mZOf:�<5#���o�<��&�@���2�����e}��%��U����M��]8�j\��2Q��h=�[����z�[�;���=%��:MbE(���Jf�-���n�5�l��sgoA>��EO�6@��:,��;HP��|<���������{R:���C%�5�f`""��H�n1�4 ���'�vp���Z���8�}�i	�6���%"��x�m�&�E�m�;:>�,_d�(
���,�([���S��"s�YM�Y'��d#��������X���W��*�I�]���J���l��L���5�=&p�w[H""�����6t��\]$ZP^T��e�+}C�\tN7m6)����T2-���/�8�������<�K��������o�����8����7�����<�!�H���\.�������$�?q
I����v��c������� �>��������X�& j^�|H��
�s��D�l�%��}p�WL���i"�f�	��7��ODKr�q��2L�K��I{g&�$���������{�J�\4Q�s����v!���n���:�B��M,����|dB
�U��)n�d�����}�^��~6���yz��k���PS��w��r�pFn�R���y���y�,�/���DBf��+_6$�����\�{���1{"����G�����)!I�
�"�,��yd��.k�t/�D���J�������H�%d�Y�*.�D����f�����M`�S��S���L��>��1�����q���d��[���<�������
���t����6�,�@7i�$�3�-�+*8Y���
}-�s��gF8gt?WT)���Z�1bF��t\	���%}tB	X/�S=,��e����Ky/M�F���Xz�e�+����~n��k����13R�W~l���V�jB8��>��������� �Oi�%���X��y�<,'S�5g�~OaAMO���m���{lJ��7�/������x���������2	�e�i�	�%P2H?�2�Qcc�s�=�.P�(dGp���g��Es��u�B�>�2S��c��Q%"�{�g�<#(�����fT��%<���~;1���di��H��%LD�I�P��\�>sq��^K.&���)�H���w*�w>O����d|o	���� ��JP��,1=��T����n@�s��*u�[�tiBby�`��a�����k���2�u�?���Q�U�:v��U�	��7�=
jR%b����OwU-�,F���P$�*����X3�������5jtB�h�����>�.MH~<������Mp��.Mn������z2�o�Q�ft3V����\K�,V,�)��<s�_�U����C�n����tM��a���_�+��	��q&��e�+�({R����+&"��Z��4'dw3l����^���??��]�����I�����v���f��������`����&��s�N������A.���m���w:d�������z%"�g=*����)ov���
Uw�����u[Ybf�e� 7�3��������n3���^d����,�`�7�l������$;�X�aC7{�^j�2;��I�XAL�*C0�`<_mqM:|%�.q�`��:�[M���x�W�	]���g!E���`vt�N�H���J�.�0�s1g�D����d���xl=��5�	�����S>w�`���V,�V����^�����nUr�Q�Yc�����V�p�n�����@�!N����3,��|��� �e]_������?qB����H@�����j�i��IR�C��pWE;���h���'8�j���l"��c�
[����������4e��Y��o��c����"=D��?;�+���\��Ne{}$7���wT�e-���O����$�PA����"f�����x6�s�-��L'����%n��e�(�=�����\(vEM�]4��T�v����%��T���l�i�����G���@�q5U�������=>p��X��q���A)��j�`��B�?"k�A��@���A,H�e��n	v��/Pg����9M����\Gj��`��i�9���J��)�-S����1������O��V��k��~�w�JT>m&�1��� ���6��t���R�H��0"�.�L�
jK���q� ���
|
���|c�����f�����<eq��,-~��Y�!�t|H���$����&��4G��1�u�87HdL�*�|��R\�gX��H�Zc{�L�>me�k��sqt�����������D��b��Utg�}&���Z���H�YQ*��%�!��c�?9����Jh�:�������3����j������BTw*A�>�m}����e
E iVa��E�E��Y6|~(�o�������kz�
m}3��%��� �7�rf[V�6#����Qd�@�I������M�/hb�tA��@�~}�cs?A�l)����4}���,�C>u�tpA��^�%��w��+��c���fl�0�W�?����'0���
���~"�q��-��U�����������2���gA	��_�f9Xu�I7�-L<���7��nW��;��@},]����y�o1$���+Q����,�l��1�__�������J���_�n+ZB(*'��bJ��,�s� �O�l/��)i[�����1����,+��J�4��'/�X�6�O>36��A����?�������=]Pb���4��Y�*S|5B�#p�R3jJ<z*>������'� �-�����5�����\�EK��7�&�3b�����p+�T�LNH��,���VS-H��t��\�}��a����d�P�����|�!�LDFnY=�
�����emOH����?T�`iy�F[Y(�.��I��X�]L���p�����\��
�w0�})�/�p����/#��e\���~�[����q�����������4�� 6+��B"��:��`J,�,�q��1�Z� �w)j�����R*��[v ���	i�m�o_@��U��0��:8�g�i�I�@������Y�U�����(��m������5R�=����6P\<#:!��XY<�������!�]2��H�G�x���E���K���['HMHe�Q�#�i
H�L�fU��^a{������� ���WQ�-Z�SDk��3�k����rIKy�I���������^i
�}�7�wl���+ZyuTh��t����T�X�=>x����A�����.����.
��EYN�&{Fa7�(����}SI���,$����d���m=����c�����C�y�iv�&��0��D
AZ*mJ��O!��MDJ��r��}q:,t�2���g�\�~�����s��;�M$d�4D�:��c��Z�~���a``&I�p��>�BJ�
�L�l�*F%-P�D����� ���G/�Q.zz�\�	�E�������XV��0�Jm���o,e���q�M���i;��+I2��q�L���=�e�C��Z���4��}e-�.ZQ�<��i&Z��!�
�����e�������]��$�����G�f��(@#���8�	�6#X�$
����������)\�~99�B��/�N��HS��-:��u�/�[t!<^Y�&���*S�`ctsFN�=��B~��`"-���"{ud��Hk@��tp�2Fv��D�D
�L/G�	�����s:i�~�A/��kJh�r��I�pA-�
��*�B�a������^H~B�e�sAG�T %?)�v�Y�����em�|oS��/��O����L��2r�t��>+:5��w�y�����9��LB�b��Y7eV�8!�����V����1^��-(UT���*�L���2�J-4����SJ~�t�]��fRd��-T,�/VUL����|�+�&�vB@�o�
��Y��Hd���
lPp#7�z�`��������A�U�V����[�QGs��A�g!I�������f=!
�b�jW>�>�HBA�<������2��I�����81��K�pp�<�V�^�� Z��w���C�M�y���,��x�!3U���kZzd�k�3��EY�f�E�������+;��[&1��������0�:GVMR��@'W��`�y(&��H��Ej������D��*��
���LlC�)�����9�P��3qs/"��c~�B�dOd�Pz�\ri�0��T�C����]�����L0ZSf<��=���}F�X��>`�w�v^sy�r��W��O:�<������
���A���w�@�(
��
�)Hro4���g6�u�2,F�`��P���?G�g�K�R�>me��h'A{Z,�|����5L\z��%�U�����*��}��zYe���Vg��d�~g�����������h�
��������9�wm�o�j��mM�Dlw@�������'�Q?��&��aA	HF�����RT��C� =��yo�uO������"����x������K�ma:�
��Cdk��@f�0������}O��C]�4��~��L��t�m��+�N�>�.���q����
��������6����#�Q����,wzJ�o��"n4�e��^]�P����<�\77��`�B�����W���L�tj�
�Q��n�4J��r-�[�N��
��,x����(Ns��
� D�����o5��S�`�Y��"�����Hq�n9%Q��me�~_�
�Vi��:8��^g��2�w���>R����h8m�gE�����s����JOp���s��r�����M/�B�s�a�^�tA}C=��B+���CU8�2�^��z&E�6w��A�]��J�����h�W�3�$��Nk��K�$���4�^�#��q�'�jr���:Sr�t�E�s=iJ����FF01����b���n���vG����a�������]�8�x=������0������d�N�~���dSV!w��;\Up�/�tH�P~
q�(���Z��~'��v����EyXM��+�$%��r(�?�}�S�1��D���?)��DP6}����!���?��P��u�gFH��)��k�}t�iPs������q`����� ���K	zU�J"���i:�e/�,��`�����8�l������r�~��G�����D-X�D^��������,>��� jZO����`�Y�z����<�SH�tI�4�������a���L3LJ��[�^W�B��{�u�&��P�y���CD�@��S?O:����~IF-��6�b|���� �aw��`�fk�R������L7;>��L�y������q���R?����
�����z�@��p${��z�v����GcBn���5*��AG|A��v�����O���I8�F��3�-~���t��6k_�JDe�����0�������d�v���<��5��N�Fv�U�4����F��)��"WP��]j��X6h�`��Y�=
8!�j�{Y�"��M���O��y��M��?3����|������@��>�+�t ��LD���"c1�����f"2��������=��f�\��9QV��2Q����=|$�J�0E<qXn�TN�H�#i�5@�����}V��N�zP4��^f&"?�����yF��r	T#��}X:�aO�a���6~�a�N[}�_O�i�0�~]-g�����-����'�
�W[�������z<MX��1<�1����\
L��U����h?N���v/����^k�����X*���(�	����_�Hc����[h
�#l���S����|n�����r9�~*���R�_|��j�����T�/����eJ\i'
5�@���x�K��4��E=a�1f�;�$��~k��,����meICo�98}�����Ba�y�m���*�������������������������i-�vs�YM{8��`��&���}���U �4�C/��h�.vG�gW��d���F��/i����&�o�����py�w�=o3
�����=���t�>v�"����k�3IV�����j�X����������� ��=|mC��R%,0��gf���R�8�@���2����� ��ke�`(hO��7!n�~L�57�����r��U��8fR��~S�|_I%Z�2��Gj&���(�K���j�������N��4kiUcs���G���c���>�)L\�wU�ah��45��r����~y��o��A����ct�YH�/�[?������g� |~��A����e�a�Q>b� ��_��*QCy���axjO�{��h`�7W�@�w+���F��~�eB-����4�p��n+m�7m�%����U@�`�������:D
��'{^��B�aa�B�����Z�W�,�������2�E��i�~�"v[L
��x����������~[�o���t�O��m��#���z��Z=��1*��5D-X�����m`'m�g&��7k��2������r�V'gQ�T�g��.���Z3�t���i=�_�3����'eF�C-�G�<R�}V�o����<��(�
��{L���|\l
�v��]��*��48��w���k�^�~�,(Y�4�'W���e=���=�	-8��sgr����P��T2��J+�7������$c��T����~�� ������kz���f���[d�cm���G��4~�
x{xd�Y������hF��${���0�,�|��~�o�N�T��Q:~nG�i1u.�=�i�9������,��
[��>����JA�K�gO�Z��c��������i5�m_��3:Y�
2���D�R�������|ZU��<�~i}W�(�"��&����E�����������fR�s"�%D"%�W���z��y�����;������~�������������������?�y.|}1����������=��!����~���3(�����Q�~X�p��l;������4��\���A��H���|2�*7=��H�@jD���a1M�s"��tW�tQ2y��+HY6��T��g'����7���r��jA���P
r�w�y=}V������M���6�������%��Y_���.L��<����=9l��}
'OJr���}Q<_�)���p6��(]2���~fp,��ng��D�!�����T���l5���J}a��-L��f#�mZ��H�������-�e7$`x�i�*�C�	e�����DE���w�6����Q�M���H�D!�K��F������Qeu`idAZ�:�*����O�& m<(��9�K��#s�;�(#:>��j�<�����P6�5��.��,@&S:�hJonnv[�V&��O�q�E=�&��
������O6���|�5���:iA*���-)<�lH+��Q{�������	%`v�_�-e�� �8�)�������	�vt""�iG�yB����{:k
~�������Hczs[d��3��!hNP����H��:��L������)�wp[��ZQ�����lS9i�6uB8��M���N��a��L���!�Q�����lUo���N���
��jAR����tt?�U�L���l�7<��BT�_��_�����~V�zeQ�z�66���gf��0�U���w�y1�����j%!�M�	�����lQ��
3���>��	in�#�&{���	Iza�Z��YC[���h���������dVg$�������L$d�Ty����H��7�7�<r+[6��������~�bR��f&�1'����lRM
hQ���W��M�5��������lR+�d�aQ�)[X�A�4��m�aS��I�d�?_�������dPg�����i����H�f���e��P�aO�F�+r4V"2bvk���1Y�i-�����/>����`���:!��F�����nM�~��?��{��636S:�Ds'��dJ�dJ]QiK�n����.�l��`Y
��'T���k�0�3C�i�M������HRYc�Y&�9F8|{""Kw�E�����"?w}"{��r��o4�6�.H+�9&p�p�*�Cn�zF|���[S��O���;>�w�Y����X����Zr$��WG&��w�	4�^� ��C����B4_�CM=J
����gFV �c���$��
���`mZ��q0y�6M�f��z+�f��4���T��.5,��9�3a�[�?f���b"������+f���,zb�G��r��tF�������^����@|E&�Q$��?c��9�a�8ME���M�]kJ�o~���D��w�����p��p�;���FFkgB|���f���f
������3b!�mG��3Q���7�0Ge*��.���YF���A�`���#�a��f�������"M�-L���_����o��Z	*M�dq���39��QBu$��,2:/���tf�Y�#-�����������n���O�����?�<��\<��aJ�|����nW^K��	�� /7O&5�7M��i�E�����1U�O� �x�h��+���c33���5/��t!��5\�L��qS��3~K�>!���-%���iS���F5��LqT&rj���_��Ifr#�s�����-+iv��VT<�mA������S�e[z��jj����>#�.�NI+H�g%E�$.OZ��(�������)�'��n��M�~�,H���]j�$�b�&�I��*�����0M��qe��bL�'��w�=����e8�Y���i�b�QQ���2�dl�b"��i�x$���j������(���7p+��n�j�)����<�H�m,s�/K�����K���s����=lE(�>����t��	��J��?�����%�-�f%����T���nN���\����c�t�3��BD����{p�����Wv�.�tr�VV@N��M��K�h6��^Q�(���-3�����6����BT����dwI�b"`��^�������n	p3c��=6�Y�c�r%�wq���vX[0��H�}�e�&V��P���������W�a��\A=vaZ5�"w��[S�	iY6�.aGv������4NT���#����qbA����N(�Q�k�i� ��$��,�Qm������X2�^6����l;!Ml���H����/X1@��<|�+u�R�������`�7�iB�c:��Q�vme��q{��:�W�T��VG�F0��d�������p$z�Kc����Zs�A$#�?2q�e5d����j����Ir�������/��&$�����<8g	�'��Y�,6b��r{�������$���������
A���C���v�k��mN�S�ws.V���gA-��J��F�������'kL����v���o}E��	Y2�p�B�,���'����>�F�7<s�*B6P�����1+H8X�������|=�f���w���]�	IF�����:�7fUNDdZeW������@P���zPC�����!�'E�
i���]O�s��n�sg$��D�I[���MDNT�9���f����gF��4�[r������Y#���y�'I��D�)[���:Eq����x�L�i�PI*��_���\����+N������$�/:x�#j&��������}���7���" �{�.8�?�:[�����	hO�}G�f>b��FOH��g!E�}&��|���� %|��1��lgY�&�&��*��%CW��2P����'��S[��~L�V���+��B���E�r:5!-�j���P�		���#{,>�Z���O�a�<���B}e�RP����TY�F
�������i�Wpg���IDY�*�$�[�K`�x�~���~����j��M,��$�}��������'��?p�2�;F���V����/�k�d����
��$@��� �$G3������N���He_=��	��;����{������o`�*Q����|L����L��i�5U�����G�jo�*�����rX����W�o���Fb��6^v��9!���6$��dC<4�Qf{������5������s�W*@D��jIMQ����j{��zy�������j{l����[���fh���6���	��v�&~Z�}���5m�4��������pO��[_����K����%�6��w]�li������Z��U�W���S<Kdn�z���%���R�m�{V����k���O<�|����v���#��b����I}l�� �)�8�x&EF�7���x���%`sk��-v[���ye�)��F��+���cg�`hJ<"?U��������@�����G���������3��F�<))d[���	��#�3���k��l���"�vO�2�^s��i���7#y�{����������:�Lwx�9���p&Y�����XO��'�u�'�;�Z�����	K����	���Ab7����q� �8U�i>.m|�Vy��+���������(��c���� ����mE9w����v0�m&EV7�������xYp���H�Wd}�n��q�.~f�����r)!����2�����h��1����0���;��-e��|fV����}�����h�����kOEyG���[z����0����x|^����������Q���L.�����}F��<��xO�+b�G�=��9� {��6e�,]�������_�,��jA��aJ��T��R�����.�SHU���������?���,�3q{��g���.��v�c#jA������;j��&�~D�m�����[T� ���G�1w��o������>�D,z� M�{&��4���y3���!����M�}��9�UJ�)i[GoK;�U�F��������;���1���O[�v��L�=yB��O�^H�&'"���?���]���4%-6!��Q���N���gA"�V�|�Om��}���A�h�a��e��W���oeu���Q��<!a��H��`���K��D�<��y@Q��v�Q�h���W�9xS&*������}�����,��vY���Vu�����'��+B��:�W�@j�TS1[���ivX�m�I��;��k�SF��?���y�l�K����	Yn���^�r���.8����*��w� ��t��/�4�����t�6]p�����Q/��������t�1]p�l�&!����$�|��.��S/x�����$�|�5]p-l�SU_g�j�z��d��=�^�1��)=�b�;��w��������;����(���~��w������\�������o��/09_�?������/ar�B>��W@�W<W�r�������}z�}~�����2���I����
r�>[�x�����������DB�
��y��/8��HY��\�������^5��5~��J���a����>��1B.=����|��>h�Q"]q,W���+|���D\�F(�c��G^�#G*��|������:X�+���c��>z��"]q,Wl�Nc��F\H1�c���^�CH3��\�1���k�b���k=�^qN���t���N����o����o~���on
��W����7����7��������7����7����7���7w���7o���3c��/c��+c��'c��#���c����&���<���V<���{K�����%���{������1"���{-�;����{��U�%�1����W��|E}	���mInL�"�-��IW�Wq9���w��w�3���H\�C�vY(+HC3�2w���n�l�;Y �������u&��g/�<�-~�N��YP�D��R���T���J�w"=;h���HWNI~2���� }��y���K~��]�D�E��5>��-��,H��w"�(��$j��R-8w?U���A�eX�$j�=�6]$@�q1�[TQ�
����pC�MW�;�vB@�6���z/1���u�5p�q]��~������e��������p
���|�����|a�
*�Q�	���"���@��a&�#�\��$r�Bh}iB�<;�������[Z����@[���A+��w{�`G��j����3�28�\�d�����"c�=Q���Bf�]���g!��q+������h�"�Jw��^@��%��u��*L%I��o5�����d�P�����!k7�h0F8}Z�J��b���BD7��.*�_�	�)9%���Hd�k�W���������&���v�DB4�*�6�J�Z8#^��N���3C���`��^�� �F�x�0���:���J���*�����#�@Z �N���6�Zn����F��p,{�������9��~g�e�
n�%bFa�Vg�O^�a���i?\F���}��-@�����UF>$�(_��%X�z8}���P��3�L�F.����#'q����R�G�4G���T�_j���g!�[8M]e�S8{��\[_�zR�����a������`�Q��l�����������O�b���h����� ���7������n9F8TtBU�/8`��)���f��V��G�]��Z6^�=0F8N�(��"��D
�Ey��O0��XYH��q�����+&	y��|��L��<IV�t�Z:��V��-D-����w�����]X�^P�2@��k��"K���=�*��L7���&�C��w�3��$�����O���e����3G�;J���@��t������.���~�a8��EFj8���U�*
��C�`E�����-u�r��Lt0���{d���:�`�����z���nF>���;a\��N�(����e���>me�[5�M?��h|V��jo s��'�������������P��: ����xF.wt<��aH���"�������h�P��'��0>elo������0��{���f�}+FZ�|	+�4w�8ubU�G?L$G@���;�Cfp�T�a������	>+����2�@}j+�b��$6!:M�d���p��"��P{�

����F������?��h�a1�|()3�.u�~r���R��������I�aF��R@L����i�������n�3�Y��-F2}�mcJA> j�	�������;���t|I�7��}�� �3f����}�+����>���(���l?j���eP�|V�^��V�	?�F�}i?Q`zg�����;�M�r,�S���Qz�`������\��w�'�O����XR:�4w$M�Y���R�C��e��;��8�
���g��_���<��2U�v�S�����k�B���$#���M��\f���������O������0 ���~1��STM�,D��
X4���~��,`���x��K�y�`�F?����oB��7�A'��B�i���"^�y���[�U�N���t�;���`�N.6-x����R��04�i!7��%\q�+����Q82j.����R\WC����-6�f�,T�V�c1~o��"8���6�(�I��N7���[�X���V*B[FB�����;V�l��������|���t8B�,�� ��KN��e�.����	���J�����1_����I(�����{�N��&�=6���=2��{D2�����$��5H���X��#����5N�0W+��4.3cdn�	�\���F�fk?���h�|��-���=��YS��T����"��������u���3���Y�F���a�;�m�u�#]������c�G�ISj!�`����i����
�4^���5
_�j����UZ#_�K�<���2��!�/��#/��tl� :�B�����P-�~i���[0���(�\r
�%H�e�i���aE��f��5��S����}{�� �I���|&@G�%��i{��z��9��G�83252.�|7���|�t��#����_�,(��-����8MI�;�G�/4��������g�'���\�%	���s8+Ww����&�5�f�Y�l�@U��@,����_3��RO[��v�������9��j�%v���`%<9LJ���u}���E�0�y!��;��L�)�Rb�������*��������ZO;n�*����zs���ya'Pg��
P6�dyp�9*i�Y�8LO2������ �y�z�F����k�`g�f�L^�on[!:���$�3@!�M�s��H������G����$j��6�=�k�.VF%"�U��)�y�H�=&"��� �Dy"-��@P&D!��,[�q"I��'��T����	�%{��Z'vtK��i�{�YGQ:������X'�\Ofd����q��(�h-=Q��k���X�����z�%�Y��6�u�dU��U�y����j��I�9�Yt=}����/�����K���_������K�=6*����M���i����������~������/H&���}��}A��� ���|�(���&�2vO���[R��5!�[v���M�E�t}���	��HKU�3*��}K�%�ngw������L��z�d�?��>�~�����d|9?xxN2�8��%���>��O��������pR��T�������/H��zl�]�L�m�����0�I6�1�,k�6}f���r�I;_�T�%a�$5�x�3��Y�����2�>��:�d�q�T��*<��-�����aa����4���/3X$�>���0����U���k���'^����]>�����d�U@��2+��f�����R�b�!5������������7%��c�	v����Vz�+ie�C�h���=���q���K�����A�1i8i�N�['�YI��Z	`eZ���r��hS{�mP�c�$;t;C��/B�z���0��+@;��
x����oU�G]��hz[]�znX7��k�s�.�=�����^��Au�Pa�7T���
�N��s���	'�;z�4�nw�������n��dPGdb���`' ��U��FA��������`�O�T��%��f(���H@?|�k�yx��/w��7����Of����"wt�"t�r��2��v��� �D���������Dd�Q�����Ku0�LI/>1G���P1�o
X����	������{��kn��|�����	%���-I;��KR?�H5��}g�;^�zk��7�����N�Y����L;;��%�DlW���9��I��b�{���f��I��e���������m'�L �+p�It�zg��	���i~���>4���a�x��}�Gh��r�<qc1<�#q�A�~~C�p?�!������=�������*d,H\�����rM����+6���H��E�l���D�Os����@���j��E����b�L������_�_�t;�T��9��o[����=8�Z~�4e�(;���x�/O	����<��H@����.��LD�w�G�NQU"��]�m^�D�������v�U9����i�2#�|%�������sc�2#�.���fl��+�CM����b�R�����J���������'b�2-�+�^&+�6v���rim����%��-z���{�_�E�nF"�beF]����}^$++�����H�4�D�7��������$+�������f$��������T#�7�����A��T��v��l�� ���W!��L�Ig
�'C��=z*i+6DQ2�=�V�w����K�p��3�2�x�p��D��-���4bxp��MF{]�*�q�t���T����������G�=�WQ���gZo"R2~�l1��M)�7�����q^G)�71�Ye��w0!���u�(i[����h�M;��X#�g��*����������Q���A�YaK+����s�������������`�_��}���a������:WSI�X,�����Zy���~VH��{%���������t}����m�����?S�Y���_vE��]b�0+���k�X���=z���T�-�h�Xf����G��]��Q$��N���
nt�U��"�����%]�V:�o���7��}��)y|�0M��YX�����K��������f��So��0|�z�w���������v:����U8��|xvPg�R!�������YH��EE���[kj{L���U �u%\F�v��
A.s�d���W�\_Xr��o|�� ���/xiX^o��c��������P�Y. B��-,��2�H���\I�eex��T�s��5>o_��!t%1��^���~����g��}DW�%;���������3�D���l|��wc�t��]�-�y���Z��k%��_�����S]W�,��2%8��������<�l������c���|�.l�]��?��&���M�B�{�OBZ��yk~�}#���H�x(Q{�f#�l,��rN�=9QR�����0�h��V��X�����1G(�o�:y��ks��l�_B�B�x�A�:������+L�������]f�p3a{��"�������k	c�����Aw"=I�����851�����d�%�U���,��d�����F
�j��XC�R���O�0�2D�!)�����D�����<z7��a>M��v�p��~�p������9m����._��i�]Qq(�C�4i��[<"�h[���5��!w8�3r�������jza��K��_�����+LI���'������
����Ib�l�~4�>+S��R�[e���/%g�A���CgeJ<8�DO����S2l��v�B�(���"`����3t��`��)1/N�DE��0��o|V�&��n��
A6�H�j���7���Z������Z�@7��K�1��L~30VdZW���|��r��W�������#��"�-CT��UT�����;�`�����)�/1?�~����������j���L�{���(��}�}�$��KbY��r�bb��0��;�����y^�����PB����&�8��pVj�����r(�/c�p�n[��X���;KXS��?��>��G,L�ia��-���.�Y��<y����0[P���
G�/VY���#�pV�v��B9�s�o��xGL$UI�Y>h���Y}{�-��,,�)��-��@S��b�����������GK~�Eb����/8�����)��:n�H�[�������U���/8m����lia� �B%\��GNB��v�N�J�{��"3���>����T����m��{�Ym�����UBk�#��FC�3���������aOIDe�
]-���-�������R��oQ=}	w��~aJ|*��
����`~�����r�=NBOrb�b�K@�3!����O��k�f^g���z�~�'Q+S��	���D�d��U7�������m��Mml��u�����O����dp+K��p�������C�Q�x�X��dY�%���O������`zs]E�@V������3� � p���F����O���������^|��'�ER't����!��
At��H�lcPQ����E�n�����`�#y~aJ�!�4��G��D~�����1��%�����*A/o6������~�Ek#I��	��mA	0���0.��O0C��:j6&�x&eHg�\�m2�l}hA����9�s!�b���tt;�	���y1l��	x�g�����\������.H��[�8ix���2D�A�Y�g�U����`�;�A����Y�H����}|��������H5d��H�)������^m�������1nfs�I6���)`}\�
���������C��Q64V�����z!~�,wx+�����eky2�P*?�����m%���DaX�Oh^�1�~`O/������������m���#���7��[!$k�e��]$F��/�����V�F�0���f�!�1����`�'Ap�~#;�Sj�z��'w
�L���D.;����!�����u���\Y�8�������ET����x��.�S��kL�u��������`��S��������U������l�L�+#�xlKW�6�,���	��d�tiA
����waB���T�u����K�x#m��C��H�7�����D�m���]���
<kQG7+������Y�F��9>\�7|\��� �5&3����_ul�v��`J������,fn��g-We\v�`s>�
B1��q�����6b�{e��fc��k���L��I��%�����>;*S]�{m��A��K��k�%�OP�m��]J�p��4������(���C�c�4�������I?J�C���Ot�w�����;B6s�>�7�<���Y��Bm��l����5Z��;y~�<���������6�Z�Z��Od�������-�9&6[i�/�=�c"��y�c�y3V�D;�}>��~[F��-Bt���l��L�u���zv4��������������v|�t�F�=��m�H��\�
�T��~X(i0���R�������'��Y+7Z�o{t�]F��<t�k|"C�bC��<B�m�7�������l��'�6�,���6���rO{�=EK����_���������/�m���G{l�'V,)��b[S�C�`�����~��6$�y�#�Oq�<�����,��GO�h~��9b�^�M���"-�1�/��	��g
{���z����Gx9�,�Y�A&0�1���#����D=��2��1-��N_l%��7m,��y^@O���z���������m����;�	�Q1���]	[2��eL&r��sX�e����GH/���0%<'(#��9���6��n�.�l���Vjep���d?1)0�\%-.9>a
����/��e}e[Ax��$y�|������
�L	�@����34H�_�UE+�Ld����;�j\H�G�z�������P&� �k����n?�g�E��v���jr��(��y#���UF8_��6�����q�G8�?_�lA����"	��Y�N���=���h�@�-o
����$LhI���E�S�'���]�jVF�	���N!)�]X����s6�
*�\���
������}"��gd�#�)x^�Y���]������4�Q��t�n��������'������0^�d�>������XQ�.B��F�)���s�2��`�0�<G�-�6�����x0/T�k����}	�����P�����{�V	�t���
�DuFp��\�L�Syp�Qa���9%��J4#��9/LH�d�f�3�g�����S%!�Nh�Y��=Ks	�Ym5#�m/o'
��M�^�r����fT�� O��Y����X3rf�J|���P����D�(e[��� ���^������g��������b�i��?oHW/n*<����/�,@_o��*����HvtO���UC�y��1G�>���������"f����fU��+,�kR�/�3'C�_�UL2\�M�]U��x����aZ��SvU���S�uhdY-n�
iku�|}ab����2�����k��-9�sF#O�1�.U��`B�y����`��-<��)��t�����3A�v6pd
�����1����,���ft�_"W����^n<�����{*CI���q��f�F�u��f��|BY[��B�e��^�9M������A|�Ap��G��� �H���F�G���%��L	:��~�r�0>�E�O����~i$b���,B���21�|p���<�XgY����x^����Mc1�I��+�2���.�}�.k;j���d��@���2;I���L�2VM�2�2_����p�\ z� ;<�0�i�c������I$�����6�Z*dgW����0;9������r%<��M>	G�'�����#p�z���U����@�������:�a>f�
�<x�wf�zX���0�en����l�CI�j����i2���f�P~B[�e���a�)��)�l��6��|p�un�+RU��63���Ylse��+��c�c�yAY�i����*��G�����8P��O�q A��i��"\���$ &��� Nd�1�G	��;�n/���c�7�#
�dd�`�lz�2�SX�(����F[���x�_#x��b�V�arw51/��W�b�;2\��n�����b:<�E���|��<�Z�H�4u�Cs$8n���#Ac�l6_�A�<�Uqa_&f��(��R(�����]3�W���y�C
�D�"[�����O�Y"A�	jE�B��X�	�9��O�����p�E$(j��k'k$�.c$��a:�d�AR$(��Q���N.$k��y,�+��\aG_cAc�����XP�s��XP�G�p���H/"A���I��v��.H=W}���DJ!=�@P�d,aQDsR)��d�Ig)����6���?y���R�-��a�d���@�gFT\3�Tf�g�9`�tW�P����dA6�,[��0'V0���/�C?�9-�Q������o�E���/c��
��_FtZ:�FP��/?�@��=/�a�5+�'�V���>tF�|��Z�����<~�� L�����ak�a`1���"��f����K���u���,�����7A�$>�EW��c����vO3���T�;f�T�(�o��#�K�$����|��Xs�v��=F�:�<����F�_�UG+�����J����]+��v���"���g�.�:��L�H�{�|[���B��c��
J��	f����}��/A�Mk���]
X�7�r��[�N��'_���!_��R7��n+R0�?�|��X7���W���5+��t��:����`����s8�����N��V����:�q�2��c#�ZAi��G�~��7�������k���<��\��D�{w����&y5km��t��LZ����a��a�����Iw�ae��K9���+�pW\wc{��t����v��n~I1�����b�u��7���K~A�%�5����B&;��%������c�v���T����,@��tK't,>������.��z� 9�@��"
3��+�:V6DB��y!�����6�'��Oa^*�1t&��_)�����f��eG�F����9�wX��?6�ae|�&��ou-yWb�4������������q���vaF����E�F`�X@�nCV�������U�W���g�0n�_�r��I�2s�.���V��0�Y��xi��>���wb��7
���+�9L��cx.!�f5�6���Y�������Eec�����6�2v�!�#v�29-���9y���;����]�mt.7����]�o�j?E�|�n��#��R������p���"��>l��bXP��z�g���7*,������@Ha�
���h��H�����6��:h�{W��wC=<�D�JV�u@��'
�	���_$����D�j32��m>l'���g�w�a��7�|�.�_������u����Mq*�|�N�����h{���X��cvZ-�nd��k��ep�s�\���"
�.(k9���pa����*n�A��6���P���/p��:;]����7�2y�gV��r���E�h��:5>t�Pe1�}8Hj|�8�|����w��Q	������W|��
����W@^��M�*�+�������\!��+T�3������_�����"�w��^������%�������o`���k���7?�3��M���r�;�-vn�k^�&��:��W�:6q�e��;L�k��&�R��]��Y�k�����)�wMzU�?=`�E��?~�_z.��K�����y����O_������B���������"����F�^t��"�����������������������o����)t������2�����o49�@S���]�JD�6<7��&0x�%��	���g��y�^���|��f�����A�\��m</����D��<��v��/4����x���(<*��Gn�`r+)��H�n7�p�����w���������:W�5|���;_�D���(��ul�|�{
@�pv����`[O�g":��"S'�,�����U�:���.�e���y����$� ���(�>�0���������{�&i��%rPV��'�hTZEp��-T6}o(�|%"�F(!R�v^��l����
C�����H_����������,GAp��OZ�9|���"yP�[;�u�6����(VS��z������D��!�	��Z��V�U��z.�<�~�p��{�}j�>���>[�"���~�
�@����R�w
�3R+�X�
���t��h�*Vc�"�^�X;�d;�Y,�d���#��B�1��N�&�0N ����*&�+Yd�"^�I�}��$ �wC�Z���>���E����,.�L&�
8v���}��d����n�����a�u-��7���/��c���Pm��F�~��h��"�`r���.�<���"�w���&f�����TE>��op������$cPY�
�����c�)��ZB���Q~��S@��m�}`��y1�lZu�k=���`[E��#�d���;U�@���\�/�am'/�%���?�Q+��]��[��L�2Qy@���#V����z�[�;�G���8�a^eA(�n;�*�����t+����� ����1�.3~`�������
$ob�6�x�y�6��Mt���f	�����WN3���o4�n;����y�K��I��aH��He4���2�����x9z�Q��h��o90�|��M��";�$������A���@yH�e�T�q�nAMI6���*���������������+Iw�@�4��N'I�����$�DLx�Gv����x�!���Us�2����\��M
hvV"�L����	��\����5wb�~mm�+B��x|C�2b�U���b.)�m�G	�r����\
�\X@���dY��NI�l����k@b�C�,�?�v|��+G����Ir����R��MnM�u;�1^M�0f*Dd���{`�&�U�%K��}�@5�6!������0��p3B'E���/M�Q���_3�a
H��n�u^ZB�Z��V�g�8�s")���J6>����#�+�-)9�Z��*���@A��{vE���'_�DAM��K��-	��aE�R��A��c�Q\��BBf����n0�����n1�d��=b0d�2��-/9"�f���|�_H�u6��e���,��em����N�E�`�U��fH*�I	��E?�X\�B����4)�lN�����n�.U���D���f����Cn�t��0��s/`��V`��H'�~��������������Z��jq�4���X�#b,v����h�gT):��6H�>�"��{��`���6ZP�Jm7nO���2o������&bF��]�S+=-���|ES�xq���%&��,�G�F�,�UiAm�y������\�xo�^	�A�O]��q�[/��,��p1z@��	����
�%g:�I@EK%!�
���l���/o�����������&#p.�OW�Hh-��A�^/S���m�.��G����=�k���>�f�&�����Of����S�
��[[&@x�O���*Z��%\v*-��vb
���dh��L��%��{nmTE�$���BL�����9��$���t�2Z�u�T�<^)}	����)���BP��1��;@�R!"���������^���$ �Gnw8���4d����KU�l��`�I�-�h����79*U��I�8��(�I�����%B����Z$y�@��H|T*�����f*�Y���d�5��H��%;g�R���KM�Dl������M	8��z�
z��/����q��������XA��y�Y�c4+���j����m��������C�n��������I�"^���L�_���S���Y��)8�;�3��O;;�/2�	����p.C���$v�P��>;��c_a�c_n?����#�����X�")��.�z�G�ib2�"����_W$���.H�;�� w���<��+yq�3������J�W�dW:���������ia�����������n��W"�{_�"[�\�5dY��ag��
dv$���������lK����at��"VGS���!�sg|
mqM>�e��sP��poS*�5%��9!���EYS������/���Q��d's;�g��l6'C���� +�I4���<v��^K��0�]	JG�:�����3���y�|��q��Zw��E[�U"#��@��{[����K!!w�����/	`�wM<\���)i�&V���f��u���$5�u������U����',��f���CY ��c����FRg6Z�iwJ���2o����)��|o��I��b?{�-V��&���M��M2�l`�+��P���;_��;I8������"g���,�y{0�c�JT�qxA�;��:n� ��R*yT.�����@�
�����d6�aS��6��s\���2H�/WSeKzX+J`r�6;�-kw7n%�+�n��/��R��O"�k�N��S`Ev�����$6���������N"�����t�6=��@-��w�p�L����P�`6L��*/4�������<����&�m��;���r�H�}�w
�E��Xn�0����g�eA�|�0"`�)�uj�K���~aA���R�]��-3���'��B���G�\ 8K/���Y�O2�,�_��$sB�}Y0����$��xovt�����������K�mJ��]�{	��7���p��io6o���>w�ID�H�����X|_�V�`���dr�B��$�D-������~bA�\2�S�]��dEPG�+	���$�<{����JDf��`�o�;pI��y��� ��}Y[����j-���XZUX����?���}�m�yA zO�o4�fz81�mN3����7�<�hj�.;��U����hD�i��8$P�.�����&I+p����e��~��cy,���B�>����v<����F��%�0?�@xba~|���c��?"��1��H-~^DdO�>;.��~���������oZ*�;b|T�0Q���i�s���7���y�L<���'��n�d�+��@����p.�wft	�BTDr��rh����BD�>.�q��3�+J�c���c`�:�h	��N���*��,�sW�k�A>�/>yS&�ul�JG��1�+���"TB��cK^�X�VH��5gL���Z���/�����/�����,����x�|e�L�j������f��x�T|.���5GO�"�
�����k�����\�4u!�<�����Y��
?@��T��f� ��0����Z�\{�"�rI�����f?����%'��\����+g:_��WdZo�P�"U"|4�?�ZK�m>����j6����U�������6L}�����#6�7>��e`�5nX��qSIE���&����G�(GMl����)I3:�����a��)�Iv�9��L�
I,�,�?8-���*c�N�
�])�]���^�46�A~����n�I�
=�R���bJ\�uGt����XYG�"�-���_d�t���N>�_T���R5V�-[7�������a{}'�d�o,�����l�1~��#}�X������6��Y��#B�S����S���l�(17����d��M2��(�6�f19��������?��\!*����rY������D�mF�����L*>���'���J��/!j��0���V"�_T��
T35�W�X����|,�k�i:_���n�
���t#)%�B��m�[.rC�$�b@3�V�����T[���)���a�5�������Xt�-o�n��y���h��\����1��?OE�r���&8����u���n����~H_ZP��(�����2T��2,�|b�D�����Bx��>�rY'�������2�RRc�=v����A?���h92g�\�:�}��A��)��T5�g�����}1%��]|�m���'������)>����O����"kR����ig���	���k�������X+T��>7��^v�'�#|�iH���G�~�|��� '�������5z}���~	��oD�o����^s�������c�N��p���r�f��}J�pyf�����v�-�)�SQNl��2_�� }~�
G6����3�Z��|�4��/gQHK@�
PG���������Vf���S6��"�B�~�Pu�Zz9H��[>����	p�=����Z��v@gjxZ��B��^���Z��,>��#h��
���E�slY�O��T����{���\�(�'�}�7����2�=��9MGti�����&=N���=������i��5���_�;����*��.��� ���RE`M������Q�����?������I�!�v�
��V���q|P1��XU1���ZmbjZT�����#�*���>Pp#�pC]\v6=�r�����
��*�`���{����b�}�t@�_$����Y'�t=!
�:���Q�NG��"����f�N����^H�w�h��/L�n'^���q�xfmcx���]�K��2�7����S�����
����h���9��+A�EV�k�V$��"�����cD��It����B�k(h'{V=�9W�N�Jup����b���T-\�V��w{�L.~�������n���J����W�i��u�����N�^�=�aE�c5���!i���mT�]�p�A��;$�]	z���O1/D����>�d,V�w����oYn����������"�Z@��#1�����
��#P�s��$�7?Fe��W5�keX�������_/$��l[���R���f��8�B<��gA�����8��@d���B	`�����6z^,)���2{�a1lEPL=��ob�j�}�H�}/�4���q�E�+�������.(�v�}���7�-��e��;�[U��F]��,�g((M��
����RT����������iE�{��Oz�OT����h6�4>n/�]����K�_g%���V�= O��	x��3���nGL��^����[�-�����sh�9��U�I�73�U��e!0y1%E�n/������0���v7�V	 ���v�8��p����	?D-X��b��v9f�|�L�N��d��	R�Di
J�yjj���Z��N�,x��Db�9�NT�w���o5���������:�cp���>����y���4
���Si��!&��G��R&����8�TK������(U���o��tWz�=l
��G��<;��V^`B�s����W6��7#���������2�^xNz%�|Z�l?�������������1?���3y	������l����3����W0;�jr����N�d�t�EC3���k,�dz214t��v]���C�x*���C�Ss6��
=Bl�I]��������0��Q�������n�M2����ul0>I>��Z�
v�%���YN?K��DO5
azj���I�b5}�_�$)������q�r������S�f��������)������P��5;F�,��)~�su�?v5g�}��Br���W��F��C������$�	t�Y���`���6��P�>q.������ L���2���R�`�� ���v;T�t��>���)�Z�5��f<g������"���s}OO!i���if��]?2������L3LJ��[��+�B���{�uE%
Z��j��-���^f0�X��N�mV��_�Q�����o06��/ ��_g����d;���d�y�!�`���BP������L��'��Pj��v;���~���`����Zk]�n��1���PJ���cTl��;���z������+	�����Ld��l�,Y>�c}��cQ����V�:����>z� f$Y���k��M�����%c�������%�SliDnA�6d"��a��b+�����������%���Y.�xJ�>�l�]�P���$���	_�w{s%-��@�
q�
�����JD�i�"�w|��5p'�J.���X���]�Z��"UM�% �M��|���]|$�����s��+�C4;�H>�D
P�h��z����M����)D���U�T5������G5s�m�k%"��vO�a��~m��D���6���v�pp��!�Lj��-4�*�������s����1���(��OSV�����h����f
L�o��@��h?N���6/����	� ;�o��������p�~y����3y����
4h6P��6����'=���-��{%���B���X ����i%�.'���FPS
$��#����OjG�DU��z�H���O�hz!q�u���������Y���H�n�.*"h ���o�>��`+R��\����R�T�]��~
A�Cie�-��}����Z�g���f5m�|g��q&y���w.�\�*R���/�WYEZ������}��M&�_k���&�;��� }���ZQ�����c��y�(|K\r�)�/�!������v�]I�#���`��~��%V6��W�lv��Ut��wH+�d�)<3�$�t�-U�sf�Y�$��w�R+qL+������_�H{������+,w�����V"2���Ot��F�
>���5GyO��~�sA�_��!RM��w�����K^���jl.�����������7�n.����S�6tc75�������w]��o��A�����;�|�H�����7og�I���l���f�����G�+B���
�a�6��5��d��S[�/�#��������j�S��I�^��aO�Mw�91���6S���'��q������0i|�
h��7d:uJZ P���wc��C'F[Z@W�;@�������spo\fs����6��.b�Eh����_H[��b�I����>��-(��G��$���mPcK��Zwz��^6�!j���4������I�����`fM�LKU��a*���1;��x0����Y��5�H��43�'(��UK��
I�;�������H��T}����Ll���+&e����=���4�74��7�*��t3��w���k�^���^(Y�4��#���e�����v�G
��y��l��Ot.(u�����iu�����("1)p��!�n/��������.y��=��������I������|�s��i�@������F�J�M�k��Q�"{����4�H,�|�g��~��N���%����������}8����~8���Y8�N��g\�q����%�98�!����Z�������a5����}i���x�|�i~�J4/_�cr�P����g��/��Ud�dMY���T�E����(o�~�������6�5_�q`����5��z`���6������}�??���?����?�/_?����������������`[�8�Ws_���\��g@�W��/W@^�������8�C�g��M}B���QXs+@�}r�r{�)��M���_9����Fn��'���u��$@3��3p6�DY>�EfEz��Fw�c�z���`F�5=:w�����R�y/������}N��f���hi�������@�����@sqg=�t�BD�N����U����(HR�UP�?�D�X���,�|l�&]�5!:�N
E��t���H�E�}g���5k]�%��2g\�3/;�<#p���y��i������>X	�M�y-=�
V����s��>�����\���"�/};M�}���4��2Qe�~��Mc%�Pc'��]����,�~�_b���Qq���b
��
���;,{%��FKw���L�L7����*[��0+���+Z�)N�`q��K�]����v�gZ��\������&t!*BIh@gA$Z��6ctp�b�%@:�=1�e�r�E��a
��r�����>�an�]��|A3�r4����eM�	-���{��VH�f?�\g�����]X���-�gA�se�-L��q'����E��f�Q���vm{K�s0�hE�����%�eVT
�V���I+-YQNH�f�"���b%YQK�����B��=����j��M)O�9]����aM��=��6O�l�m�`����0���4��&��u�c�9u)����I��uX��V�P�8x.`��M���������8�:�M=�S�Q]��T3���/�����>�_r���0�zr/��K��a�Q6n"r������g����]��BD�d�t��J�)X2��
0�U]�;�)��
��2-����lZ�+jr�m��T;7��h�d'sp,!;��.�"}�%�������9PaZq�bZ�\5b����GM=�H�z��
�����"���r�6� m��4�y�zK���[�h��
>��U�L?�03{��^G6�+�0i3���'}�H����
`��Mm%-�M-Z���W�z!���u�4���{��#@�
���q���6�?�:x�H�d�j����M�y?X:m�!<CrE�,���'Z�,(����6�����]�Y2��+���u�(����BM�[b��wpCs�	8�$<�@�k�F(��\���o?�~E-]F,����=�H�n3$��rj#��|� �V�T������ �X��� w�P�����^�~���EM@g���:��d�Oh�m������M��|�z8�#�RA�������S���1��#E�
��;W��`J�K�y���*p����z��{*Z������a�LL14��������m��J�>�G8�OM�D��|����;
�D6���~v4�f�����"�<\lh
��s���D������l�{\p�0�$�V��	I�m��.��.�v�T!!Ot���3��@���\W5��8����=���$17a�B����DR���!)��^�5������8��g�����|�����T���C=���W����r���+�}^�� �Y������W���39�c�����Z���n&��i���[�����n��I����\�kF�2�_et8x$����i�%��Q��?N�_�VG�k���V�R:,��)d����M���K��8��lY����Z�hoM�,s7��B-���>�.3
2iA���MY��9����LTYz��oug��JDO�������PchS��pT���\�����Z/��7-H@?4%��'�B�bh�"����c��������PQ�3��@T�:37	��e�����M��E*��/G���)���L,"��nV���n��!����a�*�O�5gy��x�<���v>mA(2�8�&^���9A�=y^��d���'/g2uG��7�<��t|N;?������Sr�2S"���V��#����=3�AE�i������\�q	�e>�icEz$4��y��+�9������u�"=��?,�{y�Y!����g^��<xG&*O>b�o����	����
~�nw�n�� ���d}����!�������Gh�R�=Z�<&�*����/bG���:�&��bE8<L���[DGq��
1�!�������~�
6�nI� ��D0V�������$B��^��bm�}}�`���\�\ v� 9g���!'�$Q{�.���&�W_���a��y}lp���{�ym��
�a�	Se
hI��<�UP�d��������p�p�n��{�-]tj�����@�a��n�`�������z3��BD�13��j���
<o$@�	���j}A�����'����LK5���6�l�y�I�o��-:%;iws;y���a;������ED���GM��U�es%"3���`��������������FK�f�-N��U<��7�npB���V���-�Up�@V�*�:�s��_#�W@-J��F~%s����u
f�[����9��t��=�Ujo&'����G��S���������Z`Q��n�h�W,��|*����w��}���jz�v�M��Y��������Z��W���~M�lvt�nq	2X�LF�}������h�0���^;�{[z�$�)����"������s��y�A����FX�=���hB[�4��Z��7E+L`�A�$�mUY���n�S"�����.>��f1��C=�h���}�����W�5�	��~i��KP?�%�fj��Z�))kx�N�(�QE��8���.�T��}�����:Kj���
��{�6���{���J������g�ZR&���t��@hSA��
�Td�>�D,�Y���y
�.���tjp�Tj���i�W��"[�7K��D
�Yl����2�@��K+����5U
��/T����G�9���/�A���,��3����������������g��6�����LO�E������yf�"=I-�n�T��y�
o&�|9���0{v\�7���\�9{�vmA>{�wk������[���Qs��sb�G�;��z��/(��m�Z���eS��C�m�O��*
���YK
��o���G8�����Lb�B���\��\w��>`�k��FL�4p��A��ul��<�:nJ���q]P�������)Dd3�zVi��aKmc�d�������G
J_�DB<�������8����@�$�i����*�JS����y��[�$���+�{7�-2�c��aM�ia/��v�z�����C��=r��,���r�iVO��������4��k�^��@�c����Z�bc�����E��D��
���,�!��
B��������{^LA�)�v��a���q�D8��g#�]n9��"�n��f7��<��R�q��V��^�R���E����K
�X��85��l,5�$W�����@+/L��\�?�W�6�/ZyA��7��0��� =�7&Y��u���u=�/��$�l%80z2��|�S�mFW����&l�N����`������%���l>�P�}=�8�N�)����������+�3���H��������+�xH_0&*��R*@e����)��r�������d����>h�I}T�[�������Ov��|�����2f������	=.k�R�������nw�K`g(�t����)����Plw-LO�4���T���%h{v��xx�&�3��H� �e� �P�
����D����Z������m1���mKsL�
��cVT���`XT�0%�g	�������7�������%����2�yZ�a�����7���V�g�^�2�!��i���
b��F8u/��x<�'��������qp��T�\��?F�p���m�~���H��aq>i&�������81�'�k�u�� *��W?x����Q/��'�P��������rer�!���Dw2D��+�1��I�������y��Ui<�`�n�G��L�t��pP����"�������Xu�m)��18�6�9��@����&a�w-����|���d!W�J�8���U`}��vW"?������";����q����'�;������;�d�}�X���C���������/�4��T�8oK!�"���|��u���������Cr��$���M_���x�b��GZ��`���!9"������Z������������(�o���n�SQ+�l��v��0}c��X��O�K=o�����\i�����������f��v�:hV�S/�a�rn+�����-h�'=��U�q��R��l�e���_�GxE�gK��F���%�B
<W�s��1XD������|�w�+��GP���Ab"�}M��85��~��ktu�(��Sr.1���f|h�A��"��0F�YXb����'���o�]_��������0��c���>��+f�����R3�n0��c����f`de+�����I���
��=�]����oFe�������[k��������]�f��7K�Nk�[L��1�<�%���-�ZM�!���iE�7��)���m[M�*c����q�`-�x�.��m���Dx�)9��p��s�v��`����l]is�4�G�De����V����r��X��-����!z~�J��&K��NkQj ���������u!*o������[lv�_��G&�1JiN>��NY�"�}^F~�-^�0%��cAL�o�����L�C��6���AP���R�`�L�-�n��n���dJ|��6|����i��������I�L���;�b����l�����vb�������������>�
����Y S����D/ 32�7+����<���oY��w���q������*'r��_`!�*������|�1���+����������*���WA=�wYH��x���-Onp�V�����i�4��a�����0(�(���<����Z��j������o�_���o�x������m�({Nu�����?t:����sw��_�f�Y�.KV1�y_���?��IV1�|�+�b�����.�������Y����UL�%���*�?�&��g������������{��g�5��g=�!�1��^�|�?����g����� �?������/�
1�����*���?P-�����s�����8���
)��}��g������w���X������ev�w���k��Z�}-�^��cN��CL�K�QL_������������g�;��{_��k��Z�^�����)�����A��\ &+�Y4bn�kK>KK�1�������b����������*���U������u{���j��t�I,f].<C�r3�����������!����?C�������n�������!����?C�ws������1�}_���������x�{��������w7�g����Ra�;��}������O_����(�������b��y��1����(Z������^��q�w1�����(�������Z��i�g1�����(Z������V��a�W1�~�N�(�������R��Y�G1�^e�����;aw(�����C�]<�p(�����"��{�p(�����C_����k��Z����"����31�����_<�p(�����������Z�������n���d'	��.D_�:,���)���"r��f3�2b#�����2~���|���x'�H�~�
@��:��Ry�!���'���xf0EI�����^
o"9M>�'����C\��
I����DP(�8���B��gI���n)��J��K����98����&���C���I\������?�~k��G��j�8�e��9Y�����v�������=b(�JT#!c���v:W.b_�E��n��/��#�2�Q,�
d����&��{����6
�<�V��"�����k�)��:���j86��"w�b�������}/�t�
�����I��8	�,Z6Mx��u��t=�CE�/nt
���A�e������N�b���B����1TIh,�_dy��b
;I\��0F�;7��D����=����l�	tl��l����������}pjQ����dY��n~����������$��}���4�W���[�+2>H�OL{*������?i�����9DN:g���6�������]�oLF�n�l��G 5{-��F��M�� �t����R
���u
�]�����B������R�[�s��� ���fg%1�vm��P�.2"��B~^�cs���d_�i�]�b�t,"�y��eY4�s���;=H�:'D#���F�A�����E�!h�q_�a�I������v��v>�?D���k�{�����Y�pk�J��~Ig�e���r�I�"k7�S�]�w�j��
��tnU����<��`�O�a�ygw�AeL���l�	���I���$��7s������ba:����rk,U��0S��tI�i~��R"c�O%Z���-T���"��0��jE>p�WA�\>�Ef�Hc��;�*��l��>dQ��������a���\�hZ�e��>�����|E���FqO��(d��(���P�,��1��w�����
&�O<�=�8�%��'�vZ|%!��T��*��?t�;As@��k2�5n�V,*4D��,���.�$�J��;���2�i�$d��R�uEw�u}��
�������t�yLQM��v������$u���=���z�����nj��c�:|&v\-�u�|����l&?/�_5dT�g��~*R�O��#�������B�E�M��=`�|-�xs��o�
x*vF�����"C~Y���g����5,*B�����P\r�
=��� |tQI��RV�$x]EM��5��.C��I�!z5��
�����
D�����yu
��h�}'U�{"��d�����,��^Y*{��5i�$z�&F�h�5n0�y��(7�d�����X�������#�9���%x�?����P7��9��������#��C6������XQ��\�SI�2�'?�T����co�,�k�5c4Q.��+(���� Y'��I����������OG������m4�1�����-<*��������;wq���h�D��,[)���4������q��J:��A�*.<��5Q�w��}k�x���7L���S�>��T��>�<���AD��<���S���>��e�y%�|2no�����/��`��<N��tms>i��C�������(�9��]�p.�U���H��kB>��-��E���.k�2Z�$��v9�t�t|���i�{\��(���)FE�����SC�4h���$�\TI�5CB�V���<\�R�Z+�!w�5o�c��%��I�i�8�����&���~�I)�=�s�8��38L�����UL���4Gv���a����L|*�#obX9"��%����7W9��@�>b�%��/�5f�����k{�X���E<G���7c�����
\�h�tP�0��9�Ze:6�v�S�>�������P�D0D������&
+��{�����n����j���v��W���B:Wt��d7����63�w�~�_��|�.r�J�/`�C��t�U���?����}����$��2�0�{���4����z�1���\��d�~�Y�����C��9:K���&�N���%��@����q��)����H���]s!�&u�����
�$+�yzD.���?hRK����������$[�RD�doZ��<�V��*2�P�j��.a[������}�
y������K>f������,�,-C���0!�%��oh�K�`3a4���9q������� �-�����W��W2�rb���_Y��1.7l���\[H������������`t�d�8�m��C	��hT�����$Z]���&2F�N�h�L��Q�J.���)*�u��+@BFR��`��y#���Z$�a8�)��id��"vX�uW�.\����(�qu�����Z�y�Lo���u 8~�����
����6-�,�����H�6����@��v�r��+�^NE��u]|�F���/���X��9IstpWp.�Df�
Q�����4���t��Tc���4��y
h��&[�����c1*�}��7�%�iN>r2�����w8����&2��O�:�xD=�J��Q{�����}����6�-Hh��UtS��K�R������^�my@�����w�M�m�����J�X���V��V����vrZ���pR3����9~�m�0�Y��z��\��_�Q�����/��
k`�]2KU��0�C67�OEZ�������B?�:�'�m�D���Y>����?/�5�������@��%�,n��+O!"L��b}��"U��$��g����"/�S�����/�mv��J��5��B��gX�$<���,���g��~*�r�0[�_��AX��ps{����N�)p�����5|�>��o�	S^����j�U��;4S�@������9���~^h�W��UumbUsY���hZ=bf�F*�.�D@�yq����(�soW�B�����.B4k�y#4����+R���Hp�L�{��mI�Xk�P�B�p=��n9�0s�>~	��Z�.���~��O���6{h�X�"�FN�n?n�7�LH��Hn�N���/*���M���Hg��&��aV�(@S��� ���co��|�5��*^���^H]��N�x^���K7.���L�����:U��m���c�����g�'��q�@~�����Uw�py�;<���"q�������{"�F������Q�<pR�zR!
K��S�l	<o$��=\5�����E��hJ�^���������+Y����?z���eL��r�7[�T�u~�F�[��e"��(�|����
��3��;{6��W�b\��~wo-@}fy����~�
&^��kXt�q���6�����������QF����O6�~��[{1�{����S�O�?���,�U��Q�?��$6����9�uX�a��A�����d��1��b
p6��&8W�\��Dg0�7wOY�*����������L]����93�*�=(�����>V��WO����u�{��]��������_��A�Gh��^��d�o��gh���������W$�� �l�ZE"��0g@'="�oC-�r���P
n�IV�v���;��7�
��
7;����s�~�����Dz_��O�e+����	Pp0�!��(������s./y2tq����U��L���D�
�6�R"�p3���P��[9<���B{�R��
�d`�Je�x%���JE�c�W�Fs��J!"��	0�=������}<�V2`�RQ[�F+�����h�-�+��+�6������1�K�?�|�������(f�f�����+H�3[9e&��<o��2��V�ya&�*�M=�������~d����P���'�*���2d�n�:�HaU��x�����[����;P�(2����	q�]����D�`H��yGN�mP��P��USp�i^����V�e&�f�h���V b4oM��a!��U$�Ho�*��zE�$���K�}�H�j��yZ��3xm�����Y�����^<�Rx�H�l��9��}�S�"m�3g���"�W�������*��Z^c�9h�,��mLi�R�����#s���{4�7��@O���~"�W��te�c���E����sQ���;����s�/����D��^��uH�M�i	X�`��.�u�_I��)��|P����$J��r��;�4��h���D�-����o������K��e!x�{�e;������~�m'f*��&ZJsp��?��M�Dn�^��|!nL�Y�x��Y���i�6���?.���/j���sMf�V^h�2��<�,�i��%�3��|!�D�������������	p~��v�����:�'4s�J-����J�x#�8�o���-�S�r�b�f�!=����E���s���e��R6\�0�JC�s�P��/$�=�NK�Z2�����R�Y��w�(_"�����N&�\7�M��[���
�Y�%����7�9;|�,x�
B!�>����B"��L�����t������w*�W�hk:.��mmE-8���Q,^��'�ghy�����32n{TC�
���D-X��Hg���%�_H�}�w��q�U�t�����T�,!������m�O������T"�_��-M�y}$"u8x�D#���L�-���|�2��A#����O��)D�3O�S�������}g�H@�y^���	7�i�|�Q�=�������3�:�d�+Q-���f����vO��]��t�O���gk]�5�L�0\�Z���WOW��
R���*��6�1�r	=~�^�G����p)N����H��1�+��I������b�QkY��"������l$��!�{7� �����v��]q�us�����)��uk����[�������/J�/�32qg%I�����n��4���[�+�S��c���������9q��������T4�ake+J�c	T���N]~!a�d^�>��lEL=/Hd�	��L;7*Dd��%���:;�JT�'������+@�S��3���������R���oA����>�<l����K	���m��;��b��JP:L�;h�F���|lj��JYD���}z����:���X����vF��-�����;�����N>��E����{��|��BkXHS`������h?+��~���q��kt����.]��1{���Q"v^����P.D�8[P���/�H�{e�j;3'\$"'���7�����kP49�R����5�������dB������: ��V�E]��mx������A�qSd�����l�K���l�b����G��[[H������t��l�iz��K�<�M@�������}D6@7���^��`5��`��B�x��B�B/>c���~�����u���;�����6
�B	p��p�C��@��d_cj�Y������BD�4,��en��~��'\@L6��+R�m��2��?��r��B:�y�!�n?��%�����T�
�����]1
��IM[v5H���T �����og����U���B
5��|hX55�
	�?�#6������dBb��U��G�|�Ta�%m��GHU��VK�XP�i�;_Fbc@/�m�V��y��;�H#�|����?��H-�@w��W���I,H��dCZ5�V�����~�n�|A�y|�������4��D�H��8�6�k�-L��K�6�?��%
����0�E����=���-.lh!��=�a�������	������Pu;������Z�a��� ��	L>�c�����s�`�@h�)��m���������6&�<Y�</�O�6�L2���;�K���b��=n�V!�n:f�eeM+�	.4{�H�6�$�LvmJZ ��x;:�����3���W�;����a�����A�,��/�������E����`�I/��U��*�X�]i�*����+�*������F�������\~^Dt`���ST��T��a?;�E����Q<.�0�����c!"�N�b� z��i�M�J;7n��i/����3�w�B����AT�6��\A�6�>�������*��'����O�����tz0�.�U5y�6N�Z�B��
%�c���*J`��D�@l��.���Ci?���{�
���hg��m�*���]��@6���d'�N�y�o{A	 �����66m/��H�a�d�^	�ue����Be-@�n?��tr�ctx���)�>Q�~8�?^vv+yt�������*z^$d��.���� �sl�'������&�����P��]YV�},q��1{W����?m"Q����L=�Ml�:��o!!b�7���i%U-[�AWw��UNE������Zi6�_��4��O�Im����[��p��n�+{���i����P13�j�y���i~�`T��n�9�V�)t�o�VU�3�\M\����z�d�����~���C���Wk��uh�G�������+���A��G#61���l����$��]�3�'$���P�{��!�]���Y� ��u
��O�X	������P~^���$O����1���AdM�[���8��]������,D�
y^�"�CuK\�V(OEI����m'����I�d��0/�����
Y�������"�����Dvt�D�=������s,���%j�2���s�/�+Ha55�G*Z�n]tZ�]��v�Z`���5�a��x^��w�#����F�x�����d���}����������[������#3��k3-]�P�;�#Q�^�ds�K�`��y�f���5���,~0���<���4]���=�"�BB�"~�������ADM�Y�` ��������v��#}7������t������5~ ��A��,���W��`���v�� ������!��!���pbm7��-�v�.�~t�"u?O�:��n����Y��eu������D�����sv�Ba+���c����f����Q^�>JA�����r[EM:E;m
�t/�m�[���7��avW���(l�;e�M�e3���nl��
���a��[;7�.Dd�`0���z�8���1�/�w����R<�Zv3�57��y��B#���~�#�.��^�JT��g�$��0JRk���������B~*i,�����/��6��H�c�
��lX�g��d���N?�S-J��u�o���'�O?�v�7K����
&�}�Y~Z��T:l�q��i"\����+������A��3�@�M�Q7�hE���6C.�6�y���.Y>��_@2q����t��b����HK����|�3mh� I�X;�M8�)K��������P�9a�mV-8��QAA�7.�l�9����=v���D���gs�����9����i����:�R���L�/�s�e��>���A���|/bJ�*��������?7�2}^D=q5H�2a;�0�L���;���&��&3�j	(?/���^���S�f2/��_�� ���xQ�X�;���w�ae]�*��#F,E�>8N3.���A�{i���[-�(�c�j<�(.(���?�2��T�����W�nl���+�7�Y;����4-=�H��x6��`����O
L��Y�h��
��p$^7�%�d��4������<�ywN/9+�OJ)V���|=���������_�~�mX�	9}xL~�]<�Df���e���
&��9!��$�������9_�V�5��8�\*�R�v�ql+���9g��R���T��l}��'�3���	�&rz�ZP�.����Y��j&��|��, *Hk�mg���O����s����n�������N4B��C@*�H�s��u�#G�i����cP@�Oy^,��a�fQhK8/���������r����&`1����0�+����mi��e9F3���:@� -��`�c7�7������m(q[RQ0��f�bs��iQ�lSo���~��A��$Y���=��L+'
d������E�y��VQ�fI��U���O����<gKZ��	�g����J�)X�����e����#�[��c��-iEp�,,)��z���2�%���:��/�P��-��aF0,iEZf�>����.�a$��If�1������US�������v�l)�;pfLR���1��Myv���6Cj�zX���3Zu>EP���JS�YerDP�qACe���\>��1��@"����)�-��U��E���L�=l�J<�y��%�wG�����B�W�(J�%�����x�C�S�(*��B��
�(� �(���'�.����c,1�h��t)�2d1���K�*3�P�����P:����I''���#��LLY�� *=0�������(���"�C]gWX�}Y��%���H�P��G���n�7J`�L6Nk�9������P���j�y�C�]�T�s��b(��D���
QA���U�#EQ�����/����vp$�SGV��(�5\��:���?��e�v�����S���J�R�@�i87�4��?�yl�n���I��KQkil`���f��b�u��x&B����H�H�I;��Hp*�B("��l6����c�F�B<�J��X'�i�^(���/�����L{3�T�G
��lGA@io��z�||l&=��@���<Yc����L`=�\������g�$��<�D�J\H"���4cI=*@Q�)j2hQ�X�� h�$�+l�z�l�T.��5�1�9���[A|*0O��z&����)U�.�emr�efqj��MZ��n���(���NwmuyzF�+*d�O����N��56F(#�����#y�+�sS�@�c�H�m6��6�pRK� �Ls���C\�������D���-	���7��<3�x�|�W@8'�����sC������d��iIY�(�������}���������e�[�&�~���2�(xL�57�C��T�H�f
u������=t��>���;!Z������}�����2�K���`@��3g���:���ff����{ Sp�b��>����j�qs`#HUK��g�5o}��LK��7
K��b3��D2���S�d��UyZ^G���Z����W�����
�A$kNH���1�l��c����.��m�x������QF-����#���	ig1f�	��n[��M��Y�b+fk��#�g��{�>/�q����*i.���!vE����t���R�,���nfSHa�:|��L k�nj������P��{���+*l���A����9�$z�7vg�� H�7I��	�����b�)����?��`zH�%o�7I��+#B�G��F�c����~<����q�];��m�U6#�l!�?O:{p�k��#����!Q{�=)-H3�����Zk$�v"-���� �w����i'��2��1~�MZ���mAXb��J(����3��d�Sm��3+�n9O���%�z{/��D#�=���#��b@A%���Lo\��Ve�U"�Km9���4�f�%pp���B���K4g�����=+��F>U�@f�Le�Y�����L���j��f|v�Kh�x���D���B|�G������C��=ljH���Q�M�h���)����\���$����'���������_�[u�z����oT���HB��e,���t���)��lf�sEa"�^���������\���)�5�.b��;�����L�������k�S��Ys!���t�ra�(M�&[H�[���O����wj?�5W���\�.c�/u*3BX��
��lF(Zn!>G$2������
�\�!��l3F� �Eu�%�<"X��W�WU����m>�[zqQ�����������_�:�|�o�u��KNk���u�����(���$�}�K�����6�}�s��m.�~����\�����������o����B���g]�e�:2��u�~]NBN�M�������F)��t�4��1����8�����&��t��������_�����x�)����[���H�.��j�V=�m������~�K�������#��.�(-���]���n����\~��������k���m�^���������������}�H������6=v�v���:V:&�1�l)8������9�-?�X����t8PD��B�0e"���e`�9�oaZf����c��(��~�!<*�|���88x��X�%����Gzd���ZZ7�Q&"� ���9�YD����}�'��D��Q�8u�3z
@����u��q>�����E�!��lR���Y�:���6n���$?bf����v{�~B��&@��r=7���@g0��[$1���#����� �X�09yo(�|&"��!R�:�����~��{�7%�Zb�@���JZV;v<R�	����6;�9i'p�$
����-4��"�o2kP���Gy������<����$���4�`�h�5�<�~����O}��w��_�2�j���c��>^�������+9g�m��A�l�Q�n���x�MU�O�,*�w��`�,���t?{���=�+�`��t��J�C��L���r�|��;	t����s�:�����M��e*�&�Tk�'���/4���l�z�'��w���]���B��|�n�2�+wT�x�n�Z��I
3���x��)�����Go�����d����*H�BY�W�Jy*J���;x���+�z��a���*����zkG�����i����t7��L'��*����Y���N)���0�.����[����q5�-��d�
9�W8�jl��2Qy�h-Y
3�W���C�"�s?�����P&=�9U2��n�+�6�,@�n����<��MG�6�l��;xY~�
nf;w��P?��O����Zga	��:o�0f�+Dd�i�m�)u���$k+-�bc������p=��z��Z"D�CwKmW�-K)�z��,:K���APs�.��Wc�! �LJgce��H�XPS��@�k�
�k���_�z��������J�C�l�K%M��p'Xu�VI�"}�f]����\$ZP�^D����v|Cm�i+�XP�S�T2-"VY�w`���������4w��h���}m<F=�2b�U��;�\R��y !T$����e��.�q_����{H����e�_v~HE
�5���!x&��E;�.u?5/o�$����V+%)����n��AS"��
YO��;���%�s�r��1P��MH���e��YEx8���t��oM�<����D8$	���#�u .z~�hn��Y��s")���J:���nE�����<.�p[���?� �>��4��w�����%���A(�+�?H����2�r��+$d��]���{^L�f1���]#b0��e��[��/1���H>�/$��R��o�	V�3_,���XB��m��P�u�**�=�_������~�1(!���a���I��}��i�/��6�	
\9x<�`��Dd��#����6cao_���LP}�60��5_�<����4��������������1W$��w-Tp�80M�
}-hs��;���X�J�q;T9������i��]gK��hE	��;������i�{�~z)k���(�e�Z�j����W��W����=whFf��#�(�UiAMC�z���f�U��)xI���o��,[���= j�:�Y9}�`�������6���7�O���BT����wy(����a�������H�Y��RY�#�oS%g���#Z]�1|��n������n�a"�8'��)��2�D���G3��-��a@���=>�P�d.aX�FL4���l6�&S�G
l.��_do@U���Em3;#$�Zp2�efNq!I�*:����y]-W��#��K�d��MAL�&�����8�4U����&�v@{R��T']*H@L�w8���4e����SU���d��>M�j���(iV��n5j�GGAM���i=�>���]U�$���qd(���
�z��X3i-s����1gEz|�����zfd�TPk;;n�0m*��5�$@q4��/��xw������)^A]����X���[!"o�`�w{B��/��^�C�B~�����4]S���Dt�_�1�B�"��3���~Ee1
�Y�G)'�j�&�����`�]��s���7AB�=/����=���mD��������z���-�	����`����&���]d�vQ�0�����f������9��������z�C]/D�y�q�^7>������{C���;a��lbfy�i6�u�C����3�ff�<�7�6d����ylh��ng��Iv6n�*�aC{J�j�R8��I�XAL�f"�`���^|��5i��,����b55�{���}�����&������L�M��:k'���sD�k�=8��19E!MA�5:�(���8Y��p@c��cGA
�\��
�i���t���e����n����<�u��s����f�p�n���A%�4C&�x�L��������AK��BX��<��	�R�	8c��>b6l���IR��y~'p����:f�>���`H�����@X'��+,	<o$uf�eX�q�AX������r:�y_����;�'El9����������y�l�����@6p�pZ�Eg���Y���8������b�������3^��I"*���� {���@����P��G)�u��\(6E��6i5i&��7��-Y����T"�M��Z�;��i��-�j�l����Fwy��s���q3���i������
����X�v���qt���Bv�
4p��#Cn���D�Q�?���<��@-X���
H����3I^(��
f���]�Bj�m�L��N�io��s���vo�3Qy�H�}�w
8������a�q��,3��s���L!��Sc_j�g��n�.U�!������U����L���y�^.�:Ko����.��g���J��u��1�	'1J$��xo�$��K��g2���v��o�B`eDtv�<����tO����/D�HD��/+1��W����Rdy��Z��*nOUm��Z������~bB�\:$�S�e�Z�����}����u�?�=�������fC{����S�*�Q��q������<e
e4\TX������'-�R�w4��?o�.����������`�	��	�*]�>�U����jD�a��<$Q�n�YX��	ML�����6�<�r�b?A���$D��4}�}U�eD��p���#�<� �X����0�u�D�5c���<[����>��t�9��������n�~/}����~�����%�G���nE	���n�Ve~�_L<����"�v!k�by���������3/�Y{t	�DT����]�����+4*��y��{�X��B	��8���aEKEep�.f_c7����k�A/>�G����y*y��g1�)^aY6TB���my��:�BB�[�X����o�1���r`M�	��&�j�����T�b��W750���GO����Y���m�l�&7��'���syQ-�;=1?��"����W�2�
f�"��0�P��Z�\{�&�rI���Qs�������������DV������7�Y����p��j���j�7e�	*�*�;P�]L�Em<�OL*g��
6uV���M��K:������{G?c�w������a�u@sB��*��q~���������������@;�L�
2�e\}b��������	5��5�]��&��-O� ���	i���Po�b��������������O�D�]��T6��E�����|k~���@��������u����xt �D�)o�����sqdq]O�3���2���Z��X]j���EpTTA*{W��?��������^�������BR�p{!��X����b�$�'/H�q�}��%-��%��6��ut���z�HS��M�1�0�c�W�����W?@�x�M���~�	�*���EW'>A������?\���;�UPAe�P���v#���okZh�k8����}^$�h��d����0z�#4K��r����@�y�hv�&o11�:5i��)�+l��0$+DJ��r��}r:,t^2����rO����I'ws��G�����1����<��[��Fw9[�������kCJ��J��v��m��0*i��-��l��
R�����2�EO�2��":�r1��xN��8��f(�;J�,n�a�HN��E�5�Lu=�$��l�E�6?/��]�u�C��h�}�LP��Z���7����P+��F@��-� i<��Ik�������������v������H>/2r�u�oS�)���AI���	�_��]z~����E����K����#ag�B��s`P����'��x�ypN]�����>��-�-����	f�$���$����������H�y�\�Y���J�0�9n2���|*���,�3�:�u}���G��QY��W%Z�OE*/��*�
+���o���x��)`/��OY������kqf�z�MMY��/��|H`>9$�������	4�
�f��Y6	��/������0����,�.�x��6�M����QSgfu}a�E�}R�{R�
���*~�=�dQwA{��M/��{��e�V����e��
��N���q�{���~���8vj}*i��1�MHO���o������{&�����|*�[
�q��}W����fQ��m>o1���Zy��Y��G�����a���h����b�dy��X�L�h��O��$�x��$�;A��c�T�,��
���y����8i",��Y���������}Ja�H����&qM/�YC=R)�9�O��R�i�V�:��i�?3�4�Im�$��V>
��z��2����!�:�6�& �/�0;���
�R��[�_)�'���F��|���j�b�p�o�Y�rqo������&�|X.�J���	���y�m�[t/�rj��B�B���Zj) �d��Y��,o�������)Z,�����n��J��*+K~��w#�
P��4<Z1��"~5���8l�_0q�u����c�D2h�u;b,+�naX���C�����"�g$��os� ����n��s�_U.��R�2�r�"euT�[���8�����v]���/��H���o���,h�q�BQ8��/ZM[����$_��k��b���S�~��x������l�N��QS����$�$J����B�D��.�w&X	�Vp"�����K�^��7v����zh��HG��~1�r�V��%�t��?��`��$�O�/������GM|*������'�����MR�
h��s9G�t��\8�E��E.e�Vx�p!��ww����"�xU��.��?$Q������~_��,��K��������\@���w�/tg������u_���w+wlz�HZ��Bk��Q��!��W�HE�/�|+�������{�>�D�Z�\4u���\d�O������y�I���H�:;_v���?���-F}2�����������a�A�
'"9{d�.y���:��w�H{��Z{����� �	#vQ��B�B�|ox��<�iF*�4"p[h�O���	�/qB�g����s/"�Y�h_.�JM���lN5�C�]���(��1�Y��O1e^O=3i3I\��~

�?�x�,��@&��uz:��AK��:����/����b�u�bV{��[�&_s�
�"��J:�%!W�>0���2b`#s�;:���d�dJ.AY7�AU�
y����\����*�������.���8�pc����F��|�G�����z����r�0q3��>�m�M���m`�cd�-(�A�������$q�����=���&m�a1?E���g��# ������������FK�}�~b�
#&
�n��������RVp������w����i-���S�|��E����1�n:e��������'��g���<,���	��|��dy�����
��l7��`-n�, g���#��L~<�8L���]z��V���t_�)\t*+w�L�[�q�H�Lc$��n�8!&s:�,k��;��}�z�����0}�%f)�^l��i�S�(��q�[���+:�����t$JS�(��%&=8�@^�Vp�>��$�D�n�%�����|��0p��87�����Jf��� p1���9��+�a1�nO�H�3�\�!�Wgw�u;w/L�+��b+�:�V@U�v�e*��Y���.��}�~�I�WD����,F�������)���S������������C�mS��E���Fn�o��y��~#Qt,C����dYp<��
qj�SA_�n0�Y�DY�b��8K?43����Ol�S��J���>�dQ��RT�pw��G=-���(s�J[��E|�7d]"����/�����C>m'_"}L��J��GrW�H�|� 
����,����W�����
���������Z
^��:5S���Yt5�E[[(���K��N����S����;�L<�\�v"�Z(�o��rR��$J��s6n]m��L~v�����y��Zi�'��E:D�a���Ua�%[�����/�I��P��p�/p.��_5��3n^�ug�����(�8���-2���FS���0�V7���|�����|�}g��xV��n_|a��D4*��j�+'�
����L���j�e[K��)�4�UGf�6E��s�>`w���1V!�4�
8*��l�tX
8�>�J�03�r0��H�&�N"Z�Z��uh�7,�e���5���6�}?3�Ab�����,��,��!���Y'���b-��l,�l�@t������tD���+�W���~E�2�X�0������nBx�NZ��w��t��� D����M�ukt���m��^X-y�lZh&��`�d���L���tfTQ�*�����?E>����/?��
�����tm[���0���fI�w�;$�k��}�8z���7�����z_�o���a=)��n���M�c�c�F��"��e�a�3�98������]o�/88���r�k,���	Xu.�.	�{��Z�M����[Gq�DI�QR����pa��,'�����h�ITRE!". U���������?3O;�jl���!'�'qD�0����X�${>�IJP��N�\*�W7��!I����-����|�W��H��i�lZ
�
��Z�M����+ l���a���v�M!a��
/d?��3���w�x�Wz;�XZ�M��?O�m#����@4�S��??h�}g3
�i�u0����Zc�9"8��Tp0l��v8�XT�mH�@Al��S��������i<r�t�C����!��[F�WVDq���},�R���,jG\^��'��Rea3��J�����a�����P��8�D
|b������XA}�M�y&�\��@�q�g��4�9IT���X�9)����s��H�51jMj���	O��<k���J��������iC���������n���������_�/?���v`�������&[��q�|b��M1]��f��!���5]_-��'@�g����%��ct��yo�����I�|�+N�;����T ���[�\�$@��S�~����M�z*RY��������5�?*Y��i��D%=o�V��Sor�H�
���sA��%x�H����R]�q!"��-2���
�T�Ag�^���Y����~Z!!r �dJ����=o$@W:IAT���mx:���V��[}c���[���)�;X��s�f�����Aoq����n5!OL�U���HK��z�=�=�q�����"������p���@�KfU�V�:���nU��L�7����	h?m��1U`������7��ET�o6aA?kkv`��^������M;n��PX$���Y���#���NV���iSOD�nRIZ����
3�'&�M-Hs����q�c��d	1��^����\��$�)�YU.��f� MP��UmI�2����2�
�c�%��eFayN`6�u��2�!��Y
��	h���N&���A7����L��,j��
�������T�N���Dd�����laQj����^3���zR?Y��ob-�"�lPR�
s�,�4aaO���k����a9\
J2�)��ds:��y�������lM�Z����=�]������A_������aNq�fj��l��0c����m6�<�1��a��S��15��1uU�5����j<Sd���A-(3��U�nje�����X���jE�S��m&�R���H^J���k������T����^8!��B4���=U���T����L�S���{6�Wg/�6��j]Q9�fT�l�����m�M8��eU�Y-��DFH���BI�]�8��kEdl;,�����e�Hkf�:S���:#����@��a�H���(�{��rw�,kE�e�Z�o~*P�:�aW��\�Hk6��d��a�:�`���h;�������z��-}�F����dRg����s��;T���i=��5K��`��^KD�2���-�p��Mjh)�N�Z��jE�5������z.�K:�,[vQ�3f -��������,��E4��i����uD�CN�B4��nES#���n<�?��t����j-��T���^~[IX���<�X+�6�9�g��]?%��^H����T���2SB!�i�}}z��@�#�R��}@�]��a���6l��PU��&�x2]�f�����o�:0y�n�����j�"\H�
`��&j��N�S�}�����������4d�Lt�����I>�C��NkP� G�=�������������5��3bM����3��o����'���5K���u��T�[)�����_����&0�Gf�o���	����n(�;d��vBI��I��X���������|�!z�a_iF�������?�a{s�*H��{���[����$2mf��/���q����	I���[~d��H��^���Fh���i�P���e���g��]���u��p8�5�>�5�����Z�s�(�P��S�E������~jJ�D��.���������j��L��3����%��I$q��K�9�9���.����P&��X���`�����ItOV��������7�����g��U�5�q��$sm��N���W��Y��?r�rXj�� w����%s�V���7y�5�w��+��0��nb
�\FyN*y�u�E�U��������[�Hd�p������t�g��������f���,H�f�o����8�����v%y�6>V�N���P����������`�;;P����(��v��` ��
���"���iuo�N��"�
��o4��@�pud��&�):Bov�	���"��>�M��^�}���:��/25�fZv�u����{��(H�"G�����V�gS�d1�e��	r��A��	y�g�@��>b$T*�=o�����X�'9,{�4�����-����R&���^�������C�+�����G��I$��C^�Pey@t�����`�b
'�P_Hp��������V�,�U�,,�l-S��|kL31�w��
vsD=�g�K%j�����=A���Y3�]j�	)�B����@pK�y!��X�?:<�=�7�h*k?H�m��KM7Y�)�����2���X���C.O��H���.u�������f��UZ�Z������j��s��������@���\6�e��i�
������_}7/���8���/3�S��w2��C���{�R����t��\��#H�dc	�j[�&�H�I>����.��>2tr����6����}�A��c����H��F��g���b�
��Wj�\Z��y1�Rw�x�DWPc�*��>��P��YHDd��%"�nh�b?�H��u��k_��{���Y 5g����s�,�����&�����uA�WDA3�����0H����y�Z
e|!�s9`�zr�0|�Bk�lU����p���L��l�_y7��������)���,�������vcT�f���7�r�Y��,iI5�s�<�����99-�]�l���6��P<��Tm]�g^������Q6�q�c'�v����|#�p�%�����=����5_�������������,��!�V������d�8�J�~��k��>�����1 3�/�����a{��a�;p\ge���M��s���QS�G�������i���{�F���g��_H��c*���w���,�TLV3���}/6��
��4���'OH�l.������}�Q[_��g����p�-j��9���S�0���4���rX���Uv~�{'���{���0y��W�X�x�4��~,)�����9��Yz�S��n�h/&%A�<��,��V�D���6c���$r[�R�>���v|����b
h������-YJ�e��t��d�������vF��e]�}�vW��&��mn��y�_������MY�u
Mr�+������v�0�����i0�gAm&��l��aO_�lv&b����;6|�� 5}��L]Fc�R��{�X�l�~&��+pX�X�e�W$�7:M���k7g�c}����q������#��W_����������t'�"�+���L�~�lMP���]�H`3��4P��G�J�~!���c}�9���<�_}i��(*��S���%��rR���V�5�F��i��X�"'t�(<�/H��~I����5b�BT�����
z�_�h��Bj$��P������3�1���+��b_dne�y��������f����#D�k����u��u��������������!��c�>�u�x������"�t]�|�X��*��{����\��������|}����� ���=��|}��G�~����,���� ���|}����~!N������qd����������1i?�t�����}��9v&�SL����tb�.��������G-�1����;����SL����(��s��Z�S�������N�!��s��Z�k.�U���u������$�tL�b�.�����?�����>Y?�Y{���@����:$���?��_�O�K1]�����}��wV��f�x��;�����#�� �F���:__�u�F��zt#�|}��G����1_�n`���{70B���!���
���u�����T�
Lv��G70���>�u�F���1�_t����{��M���d����M����_qC������'7����
��?�!v�On�]��b������?�!v�On�]��b������?�!��G7����
��rC������'7����
���
1Cnb���~;����-s�!q=��������7$��~;����-�!q}.�Q���;j�&�#����N�gb\����O~G�!q=�������g-�5��������g��o��Oh���}�<����������	���Y�,�;�
i�Y�%`��D��aT�f"�thE�m�����K��Y!x!�&�'������>H����K+~���J�hN��=�����YY��yk�Dv��"��jY����e��e�e��C��!zM�F$�:�y/U���_���/�z�K��M@n���He�CY1�DHK���k��N7�m���1�|�g���s"���7�����(N;N�����W��\��#m�E��R\��@��T�.��s����B�}��v������>�����M?�e���RM�P��"����I��:F(2���`�%�����}]]~^D�=��vQ��Jd���"oT���@��,i����2���d�D�
�q ��`2:�F����q�diF�n��sQ-O��t1��K�w��R��?;��X��*���2|����+/$`c��g!:�-�6r&��@���Z�n'�v�������nH���[.Z
fxz;3Yk�?o��}��&��r����.j�/�	�R-���_=���	n:�������^O� ��I��5����Fa`s�3m'7��D=��F��W��*�`�����Vrg��Y��H�oQ��z\���A�"3l�1j&n#;�&��n���������:��H�`T��'�m<���"�[8Me�S80�\� ������t���}�	�^l�
-Dp����f�kG���PiD�7��?&���<x����=d3����fYO��� ���M� ��zH>�:q�EI@�e���c�6�1�+w��:�+3�"'pasA!-���g&v=�����l�NNR�Z����&� g`�.��2L�M�-l�_������`����|�y�xM�d�����.V��\�a R�Y1ubT��=�=�L���L�p�����L��e������VRK7a
h*I��	M����#'Zd����3�f[�����������PC�
@
f#�D;�����gBSKPI���?d5��U~��{�q2��D�����������7�����+|A�k�y#mT�����W�'�B�#��~}[y&�����b�}\"������B8��.v"~.�������'�:^!</��H�e�v$�+��W���������@Z�|+9:�t�D�XU�~��'�������k|&��T�a�P��i��y#���YF�q�3���p�E��#=�$c
�������y�q�j��;Av�|~��~B���������I�IM3��
��.�}\8�,
}�L��Q1��%�s�P.�1
K���>���`���F�����.�����w�Z��=������;���t|I�������0�QAg�
�C����*�v�����P��F=�An�i`�y#���{����n��;���
�w��	�I���je�<9�3���T���3	Rs�8�n���\�*`x0%�9KJGOS��-���|(� �~(1�,w��=�s�Z�������,��*�K�,�\t�]�-.�����A�������n�V��W�����:�S�i�����q��
X46�|��������|��Kv�Gmt)�u�>QPP(������o!��t�CNw��~�������u����"��x��{8���\&�#����'�����s;An���[8��W��u#�pd�\\i��:������qB���f%����t���B�A���vh����8�����b�R�d�o�����Vd\��-#.c<�{���~�#5�Q:R�j'������ ��J6���2q�O���*����1��M7�cv����c&�@�g�<o'�b��d�OO��#�mms&!_��d�`�J�i�E���q���n��t�n�r�+`��)Hc����_�r��D���3m�Ug����>e��MUh��M��������>��.���D���FZ�����v6���[��L}^����$��BtV���c�^(��'0�x��%�s$>"���Nax^_=_�+�Zpm>���~�2�b���%�l�h�������w���k]mL��9;�9�6��4�-���k	i0����ZP+m&�&��4!����@A0��'���m�����>;mO�^� L��W�����N�G�M�w3@���^���k�=�2�T����R7�
�h�z6
��p�����@]������e.WA>%�?�0��r����V�$�Y����V	�����u���1q'��R7��=������9q����Zp��:�B0��q56����$"K5���H;�������B�L%�8>N���>K_��o�]��Z!���'��z��ay��:yt�P6�d9q�*�x�h���6�~6=���|���h�J���y�5����=��fK!NwZI���VV�DL=)4��O������lX��/���Lk������X3��zk�	�.>���wZX��%�����D-����:X�l���$y����R
��&����rku`{���HP�i���X��t+�_��T3?��)��	B�p�"�8by��Z����k�Hd�������Z���B�JX4vn��n�D:w�,,()��HzRbF1/]O��~��r�����*����U��_���u_�x,�}S3�/�L�X#�������FvN��`<��������`���v��epfA*c�M���b���Pr�ew��[.�����;L�S��j����������G���+J��U"r_������{����e
P��R����^Q���S��{�)����-��B�'�i�D������l���T�S���d�_H��bm�]��k���;���=�f9
���������-��4|=�%a�_��rN����h��S���:Qf�+j�@��]� �3��Ddo��]u�B�aq�jt�a�����W4�������S�����v4�h������4�k�P������s�����_Xlps�J�:x���sh2���.�H��"��1��6mI����Z��9�
��'
���>~��\>�~��������P['s&�,���D�"j�;��fR�������'����/�f_���9a8�:���l_�:=v�[M����I0�^�fE_H=����}^���W���4�?�"��f��t|��/���9���j���#�g���g]�	\��./6�+�A��(�����w8xD�}r����!��L(U��?���T�����h-=��������4'��E��hJX0lOf<���I>�l����M7��.c��i'���T�u~�@�[��e"��(_\~�!�D-��3���=�{�3P1�o
X�����&�>sG6-�f�b/�_��oto������t{��$m47oI�(#�pv�'�v��[{1�{����f�e���Yx�7`�����\]IlU��s������)d���[�${����S��9��l+�+�l���O���O�R�*mO���%:�����u\Y�9��Mh�e�$N�},������"�����t����_O\�-����*d	���d�7����4�t\7N�Im�">.�`d��*�?��9:���}�`�M'�C5XAP�1~sz�J�)"0vn�R�;Q��D�8����L��V$���	Ppq��CB'^����?"�}���C�I
���`T�������������\�z�M���_w�Vh�W*�a�+X�R�4^��z�R��qL���hN<\)Ddv5���heF8��>�F+0Z��MD���Y7n�J!Z8W.�}
V�mx�����1�K�?�|���}���8z7��K�w�|f+3�y��y�c���m&>^�����ASOd\�����W�I�>x7�>xW�������mR�!��� ��poF*/[�@�A&�*jB\��W;r��	�����gC�0�lC��|�" ����?9�K���*�2����������u����1���mS��^�H�d=&qj���^�<�7�
�^E<���,������x�
�"%��g�L����*�x������+L������*��� ���_�^�D�
D�����:�4�G�H���x�0��x����+�[:�����(�p�~?J+]��(�t����~q,�}D`��{Bp,_�<�i����`a�_H�M��l�~%Q�$�	@u2��(9��M�<����:�����k
��oyk���K��e!x�{�;�v�=G�{�s����O+�~M���e��Dd��X�{1����1=�8���J��O�E�^
�u��~Q���:�Ytc��	����exc -P�e����������zt������Dd��8�������:p6������RA���g�-�j�7eS���)Q�|���|3��>����I��p����p�4.d7�JB*>U��������k`0����h1�e,�i��-�1=q��d����@��6
�BZ�]�
^/8����1f	����A�������6�}r������c�F�m4[�����^�	\��f�2�!py,���1�JD>9x��7<�8�}�q[�2pW����Z��m1�-��W6�B'7b�w��q�/\T�������u�l@�h���,�h-����5�D>���a��������?��x���jO���#�|�2Fs+�FL�^����D�3/
T�������}e�H`,P����7��
}�"-��;��7��77x%�P���4^�j�m��l���N��7g���c��w
�u[�u
k���a����1��>\}��*Hu#F��������D�-��){�Y7��\�Rl�{)�
��Ke�������@���Z�kZ}�B�U�h$��S�c5� ���.�icW\{���~�n
0~=k7]�������Y��(�Dy�W���$����H��L�w���(�~�PV$�m:58�j�dq7
*�����/�������e�H@X�����i���VV^�|E*O'�Dx�6,|����;�JT�'H��G��vU������;����a�PE�'�{�&4|��'�w��AHw��_#���������/h��\w�{[Z����4�����IRy���d��TH�@w���o�6�B�����&�%��|����<w��:���G�HS`�����h?3�2����;T���5NT�(&T7����5��\��m���}�}_��^�jy
�y�E"r�
�|��k��
v�2�*E*�,��/D���bB�������H�#�3���tK
��Q� �Q�������[V�����]!��R@X��*��wE��B6����iJ�!�o��
6)�����a�z�h�V��)h�����e��
����z���W�X.O�/��/�I>����Y�J#NsHu����M�7�q�U3�}/�Z�$P%r~r��Q�b�*He���	
0�s@�\8�+��.;�+&@^(4*��)��P��([�(��~�Hj�FW��5�O��ly������*��*�Z�~�KM�+
���BB�����-q|B"z���LH��;�fB��?�6U�CI�n�R��ej�T�	][�)��e�]%6�B���) }a�_1���[t
�����#A�d\��
�c�LbAZ'��y�A����>f9�������Xl
Wi�F8
�*���cw�������������u�?���%
����0�E��F��W����~mh!��=�a����9�#�C����:V��f%x*��u3��ull@ �7	��N��C�|1���9Y�#��!�}��p/$]�����Wv��
�����8�PH�(n��C=�}P�
�w�9����R��a5OH�6�$/|&�6%-�~]���f�
�d�N�������Dd�_j,n"���A���?�H�8�������:�� b}�0����
����"-���;7�=����GV��_������@��y�����H��~v�a�%�x�Z�cM�6��u���Y'k1z����F��w���}�=C~��{%��c�-�r%4ql�jp�D��vr!"���eZ\��x��Z��v;
���7������:[UA�������f�9�J`7;�A�����.�J�7�����W�Tf;���8���r���:}�&����v����g,(�d��$_
'��G�;��:���
������g��PYq���Wby�>/����C������Nb&"�{sq%��aU��H��y�VA?HA(��sO���WAM����j���2���wu���]����?l!Q�L�����+��)$D=�������fra��e�{���O�y!�������\i��j=�U��zR���B�Nh�V��/�Z��^� p���/*#V�Z�=/��N;7�����[iEN�v
���i5�)�{��
�8��)�7�N������:X8����l��]>���3';�
�MOE�7�7�F#�}��R��l��T����Nh�����4
0�p"==���E
"�Y� a��Y	���G�/����!�7/o�yLA~<fY�-B�B���N�AC��\?"X�</b��!��;f����m�"�{���/�N
v�e����F6dy�C������@=�E-��]+���H�J<pP�����x	,v�oQ��N�����I��V��3�LBE�`8��K��7�V�:�Zs��-�����W�H�=��(��S�oD�<��A��M�X���$��8���<��XAj�����@@*rgp$����z�9�S�`��y�f� [sO���-�q0i%?H��'W�a�h�$�����f<�D�!=���!�tY�/�qT�y$���a�D��*(���fj���p��<|P�{[n�+���p��y�5=t�i�s���Jx��J����I�h������<����73W�w����,������L���ZZ�����v������a'ME�<	5�{y!�(	�fh@��0��*��S����K������l��bf������Fa}�d�e6�1���PO��$��%��o�h��W"22G|V��Vh'��|��{�O��1��������5����}�H?�����1�W��5���������?q������=�������o��d.�}!u���+�������|�`���.?�S-J��]�����W�
.+�������UV�j�VS�LP0{t�q��'�z=t�ek�Dv�qfPm��h��}1��D+z��m3�B�����%�I>��_@r#���ET6���������n��
y�3mj��Y�`vUX���LBF�E�.4�nN(��8<��ZtDi�p���Q��JR��!p/�'��W?���
����s�|� �����:�'�Z3Q���'Y�P��3Q�zD
�c�`�d���6��,.���*QO\
�f#a�%�bm��|������]
�#�j	(?/��l�@����n3Y�����itt��Z ��8�9ND����u]�l����mZ:~�o�=�So�
��@��K-�(�ca����8��sW�<I����z@xU���v�<x3m��S�<���K���h�e&;!Xy-��W�o�7�g��p3�K�H�n�7J�����l\���QLQC��e�E)�����E�a��d����r����3m��N���_X�WU��.ybd����RW�����1'd6��z����w�|BZ%������I�I��8�h'���4C�Z+�*���B�`����|fDjB�9=H-(��n�?wG������j&��,lp�5�6�����6�w�B>$�\t+��d�/�S��D#�����$����}�s���^�tL���)��e}=��L
m��=��a�=-(���$g{Z��lN%��]��""�q2y��4I�����!=W��S���[��5��)=7�7�����r`+X"nK*J��;z�l�EeZ�+��3��V���_����-��sI�=�n��&��������]�ZE!���K�*��	`�a�������V$u���6���U*L�l���Y�BD���nI����[�� w0,)AO=��b������,�5�p��T^a�-iE��QDU%�:U_��I��%���P��k�W��+^S���|m6��K��%8���T��dL������h�����h�2�}�|���	�S%���������+���<��@��\���1��@"����i@[��]��$c��1�5v[C7��D�\��\�#�^DHF>����HDQBl`ZQ~^�����	O���\K]�g�QADQ�	+O&]\UEa��XfD�n��Re�b(S��N1T(f����U�Re(��?�����`��<�
�d���� �2��N��)��x�������)����(��GLZ�%�PF"��7?R|du��Q��d##��$��bC�ZL�����R��IU9�X%"F=��.��(����:�(G��i��^,���� ����#3JQ���-"&m_���x&�B(#�"�&��3p#����<�����*����
�PH*�+c�t�,z����cy$b��y��>R%�f;
���8�uE�����x��2%�'S�d}�O*s2���,r��"�+b��1�V�L,h+q 	�����%�\�E�����EMc���)�$��Q�Q�m������4��=|}+�O��PT���2M���tY�\g�0�Z�t�����m��(
��6�(����c��l��N��4xD�'�u��Mo��y+RG�6W�d�2�������l�m:���`a\�:�|����f�=���Y���#�^�������t�C-���I���������y�)9�'����,_�Y_�
uF}����$c������*�M@�����RH<�J�����PK�9hu$]��;��*G�����<���;!Z���X���gu�j����2�K���`@��3g���:���ff����{ Sp�b���[m��EF�:nl�j���L���o�`�Ey���xd\�q�������S�d��������xk�+�����"�H���;U�����)���H�JO�6������QF-����h�V�LH;�1��\�N��������V��^7G��������'$|^��n7�/�y^6���(��Vf��=�v�bf��v��O�>�:�Z����f���C-(B��fY0
d����=���s0Nb�7�zcw���z�D�����m�))��X��g�w������Bo���WF�.��O�h�����E�M�{)�~�vr��RT6!��L��t��b���Wd>��C���{RZ�fH���g9��Hh�DZ�/�A����a�N��	�0X��Y)2�-KCL����a���D��2���j�����l�D���A���Oe��������p1���~�m���\m�2�*�������+D��L��q���<�������4�i����TQ�5T��E�-��������6�o�g7���G
qnHd��(��}������((����j���Q�M������H�9X��7����d����3�1���b��s�nQ��0����|I���5��e���.��l0���f&>W�&��{�V+�n���s�Fb������1'�[�mjH�0���D|�H�����F=e��j����q�NZ0<�4Q$�l!�n�c�O>!w�W��=����+�oa�t�1��JA�;[!j�3B������D�A3��h>�'�f��%��*�gQ]nI=���U�Uz:j������^\���x}9��*��C��!��}�����_rZK\�����T����v�����c.�]g������������,�]���������v������~�b�$=}��M������)��Y���~��/E�^���1����7q����&��|~T��c.������������S��O?��\��?��y�v?�p��ZEY����O?����4�Qo���}����=��Usaw���9������������o�������������N����7�(����n2��������6�(DwSP���qn���6�U���I�?��^��MT�C��M�	J�sFdL��/�07S&���/[b��c�>-�N��9a�?;�3�G��/�����!�eEV�#=I_�`-��(�c���v�%`�����k�������#J�����QO(R����"�����~^D�q���V�/	��E�S:���i>O�&ffj^�<h���(Tj}Pa��)�s�]�
t�x -P�E����U��J+H�zI����xC9��3Y�c�z�y���5��c������j�F��~*iX���I�r$G��w8�\��E���jT�<(����n��Kv�L���@���6�mJ����~����Z�����4���I�������M��j�j������@,d��\���o��x���>8p���Zp&�m��9����� j��M]�7��6wT�qX���`A�q0s���L?������MH
���~g���Z�G�+�d�d'���>�w���1�sw{.Z���Y�YS�g2IU���z"���BX/����a�}���a�u-��7���/��c���Qm8cc,<��[��L2��.�5���L�^�u�?z�K0�Lv�{��,��opq�b���$o����n��[>_���a�8�G��(U�a���zk'������i������ZOf:1=U�������w*H���ix�/���4�[��o9~&�V����Wc�v���;Dky8�j�A`��-�����Bj�&qF(�z�����[>��k��8u�NoAc��+~`����,��7�As�y����N��o`��mo���[��0_!"[�H�ncP�C��87p�`�E]lh� �q���g�Z/RQKD��x�n�
���o)e_��[���,s@�A�iQ�_����es���lM�YjJ�Hu�V���;NBRV����*���B�J���l�K%MN���L`�}[$������64����H���������]���t�V�h��f��dZ�E_�w`��M�����9�kk������ch!#�\	�S�%%<���"=�\.[�u�������O�C�eu<O;���cE*j(�-���3!�,��������7���x�{���������^�����)�L���Og���Y�����_9y���^9h?�	&�8?-����r'E���/M�a�ud{":�d���:�B��4e���>'������)n�Vd��H���_�U	�
r\����y���k��(�)�v���6��aE�R���<�~l\����_!!s����npx�y1��\2�w-�1{"���%�X�����o�d]�-�EY;�� $�uY��{�h�&��UT
��d�<��IE|PB������PH��}����OO�6�yL9N��>���rq�8G����}A����������
�iov0)��>jn ]���ieY�I�%i�H�ic������4U+��L�1;���qVt\{T):���Z�>�"��{��`���6ZP�J��_�o/�e�������&B����q������+�����u��:cp������eaD�*-�	aH�`@����*:�u������������J���L1{@��	���0=������c��$�A|� ��rp�UAq���2	8����"ZK�d�>�mj���kv1�-�.P�(d����n�a"�8'��)��2����M�f"��7Z��3����{|*��	�\�e9�b\*S��8�L
\>R`s	���"�s�b��.j��!����	-3s�I�U��Ne���j�Z/���_���7ui&(�>M1]�w�T�BDv7��s��*�<�:�RAbz�`��a�}�)������d�%���h�U�N�PI�R	��W�3:
j�L�N���!n���Z$Y���#C���T ������H{����������(�y�/���t� ��;;n�0m*H��Mv��
��g��ap�${Q�*:�J������������0��g.���������rw���>M�������E������[r
\v�"��&����#a�=8�n2�	����pNS���$v�P��>;��ca�cn?�������>��X=#)��gu��3�����zFx� ;~����.H�;2�7[��{�c�>����������.�������u{�	����Anf+��.��>�mf��clL�lC���!����w����2;��l�bU��
]�)}�U��F'-,bu1e�����I)V�mqMZ}&�nq��XM
���T�kx�.��tO��E&Y��X{���o�������^�����������_`�f���H�z8���?��� c.�f����LP:Z�
��#|:�[39�����p���F���Mw�UbD��	����3fXf�jF�	,��	`��:��}]>9��p����b6l���IR���'p����:f�>���`H�����@X'��+,	<o$uf�eX�1� ,M�LD�Y9�w��c���I�[b?;�O�h	����v{On*�	d�����Zt��|���	����x�*,���0����3^��I"*���� {���@����P��G)�u��\(6E�+3i5i&��7��-Y����T"�M��Z�;��i��-�j�l����Fwy��s���q3���i������
���X�v��R���fBv�
4pK�3V�@�D�s��a�C9����b�rl$����J`���456�������I��N�io��s���vo�3Qy�H�}�w
8������a�1����Q��i�@���G���	d�����������Kx���</cU`�D�1���h:��g��}��{� C�|}�B��u��`P���Qi��{��D�n�$2����g2��v�e��"0�2�#t����f�m�'�����"h$��������^�V��J�h�Vl���SU�x���d�����P*��19Qt���'+��:�^I�^'��������Y��l6'L��k4)��"�;� �{_�m��c	����bsBUa������Z6���hh���o���m�bF�\��B|m��J�eh�l?���I�����D-X�	k���&&I_H�e�	$�;�3������L
V��9�EY��<tG8�B��4�p[.�X��/����=��#��K,�����ED�A`]�Sm��V�y�B�^��U�����p��Q����y�m��b9Xe�{�_L<�����n��\�X�c-��t�/$���w�%��C�LT����o(@'m���+�"�o��������/�������+ZB(*�Sq1��|7����k�A/>�G����y�]��1>���*�h
�����b[!!�|f,���Z����������o����0�MN�����2���3�nj`FM������_qc��x!�&��jr��z�-�;��}��6� �"��P�}��Bu�h&�z�	{�][v<����/��R]����;ine�c'��p?C�����l��oV�PIEQ*Q-����Tqk/\$-d�t�9u�#�4/�q�z>�}&CFnY9�
���h�Y�%�M����
y�FY�+�6��*w`��aRu��C��&�r%~��1����*/�_�%��7�P�16_��U�����e���L�c����8����J�)@gE�Qh��q�>D��
2�XmaL�/H���]���lhT����P'�������X����{De�,l�U���v�����]��DV���C����|k��d�@w���
k$"{,��w�:P<#��l\��Acs�g���xW9�
F`zh���X�	���1��Ep���D����������D,Z���
�{V��b��������o�bo��g4�����������4_
[����^)�}�5Fw��6}�����2���7\����%0�{�^dw�;#�W�����_��c���(���d��;�FGG����o
I����B��np�
@�z������Z���;U��8���E��6���Q6h&b�Riw���pJ6�QZ���ol��n���q��w��u�����;������F|����O|�\��ylQqv��Fw��0�L\������������� T��0
)��%2�����V$?z��r��{�e����2bh|,e=�U�,l�K
������2hA�~�M����;��3	2����L�����P��X���w�i�F�Z������T�*O�6�D�"D��A<6��������~�����Lrxwy�??!o�gE4�H�mg��[g��n����&�?G��B�G��!#��������c'RHf�����SD�����1�$�u�1�9##����\���`"%��3D$�����]��
;l��
#o��Ddd�^nd:@��
�Z�a���%�=���) �����,�]�YT	`Xj��AW7�� 	���	%0,�[�2��	�,$��U�n_2��3��~��U�/~a8����>ee��{���f���:��!�<�c�M�~k����D�2���f�*�X�	A�%��4�������A>eA���&�2�����8&Y������uJ�g!A7�xv	HO�I�GTo1����bU�����_xH�
S;������Y��h������Jx:�GQq�.:�i����Lu�����[�Q�����YH��;q��.�p=!r������Q�Ag$$���;�(c�=�0�\�q!��������
��3h���%3r"e{x��Xd��0/QT�����LU5�(���^��.C�a5C-�WD%_��X`���"���:��'�C���9�J��X2�
u�X�����]�����
���o�T�V<�$������_��s���gb�~�t����p��!K�����3Hq���RQ����,L���!��L0Z4Uf<E���dhaA�X��6`\��v^sX�2��G��O:�8�\WO��x�����Yc���@��{NN�{�D�����a�w&���?�
Lh8�����&�Z�ee��H'A{U-t����A��4&.�t�����(t��x;�b������U�op�luFPLI�l7qf��}W4�]&�(_WP��q�ED`���.(_���W�mMdD
�w)@�R9�]{RD��h���Y�aAN�v����=��PE�����g���������g���_6���l�v�mY�a���� ���L ��0,������`��a������H�Xk�������Nm>���s�C~�(���<�E8��\o3���)0y3��E��E���t���]�7��2�i���W��sI����N0�lg�B�����8��]���L�K8�?���fA�>/�B%���Z(�[��=�Y�)F>��\����O�V�>�d�=u���8���E�Sw��sG<�����/8�T���IG�c���K��;�|��B��,05|���B�{q
lG���nJOP������������:d8G��[`�WFx8o��#`�
]��T�$�����gre1�|tN�A��W�3�$��N�L�%dJ��lV�Q�6J�E��3������F/4&������!�Sq�y��g&����*�nMN�}g���3Bwnb������O�n��Y��9:�OO�M�*�w������IDp1e=ec_�os��`�_b��D!��B^<	�1��q�b"OU�����<��M��H\	ih����o����	�F��'$U��&os����]������1�gF�h�S�j�y��M;��1��6��#|n������C�8�Y�2�`G��,�����0/@�������hX6�I��p����MC���_��8K?�����vhA	��*y02�?aN��1�j���l�����F[����SH�t��4���������YKM�J���`-P3%O��+�G]�sR�	%`����`<�"���y��hju�K"*q�)����W}a���l<;���KIj�6z>�b������`o�}��;:7_.�������
��������,&��������L���A.���kT�����z��p�L�y8dX�����Oi<`��f���@D�p+q�w�[=KH�I��~��A��z{���3�ifW�����maE.��vm����e���Z���fQ�	�W���i,l���������m������*?����{����;g���@��p��XpSE���Y�����z
<�a&C���x����lPS�.�e�9Q��"�V�E{�H���
���N�P����C�y:j���Fkcf����M���������WQC�<#CQ��?*��C?,���a�a���6~%�!���������Ra��M-g�����=E>�m���"~�������)��b����JQZ~�%@��a\:�A���a�	���E�YP\N�E�v�?��K;NL�	�m��]t���k"�,P�G�B��`!f&A���d,��>�HnE4|�j����I���j��nL�;�IB
$���AP�F��4��E=a�1f��ou��Nh8�������������
�1����bBd�Ba�y�n���(����nF��y�,�C'�s(m���C�W��\���aS������	&�=�;<������.ND������Ze"����\�����D�k�2q_���_kMH���\	5��0��=/3r����h��oA2eo���7�$l���LB�>|�0��-F�K��,��e}~&�&@a���b��m@�D��|�����`���g��Y�;�W�a+qu-�	CA�����	��p��Xs3��\9�-��X��LJ]=�����d"�=!#h�p�fb�wF�_���zTf�����r�g�QK�����o��^1M���>�&\u�5E
g������M�����/����G���YH��v]?���vM*��N?���d�aK�aX�a����i��n���Se��S5���g!��,�o<��� W-���F�n=l�2���QU5
��z�SK{��VR��D�*�t0�����7Wu�@%w�<? `o�/���g�K���bf���=��[cd��8����E���n�x��%���q`�����}K�k~�2��]:I��W�b����{��g�"�2�s��
z��v"%�5yk-(TV�r�T'�Q�P�'g��.��Z������i9�_������'e�������#Qn�������4Q1�����2h�Q=~����Xw��IjWj�e�;Tu�
��������s@��s�,,X����������<<W4�;7:/(��*2��JK�7"���]=;��k�%yOmWO=d��{}ML�??3A��'�X����^3c?<-�"xW�����6���d��\F����/�����|�u�$�����0*,H�)s1~�.�3�<�-+s�s�V>��b3�������b��s���>���Z���+�bF��A�c/��2��|���3�)�T�n!���_R�Yd�$���Aym�xR��%U�s���J&�9'�^�3T�S"%��,�,��9#��w����������/����|����Z���~�@�Lg~v%�4�����w���G�b���J�;����I�5]��v�.�����gE���d�ww�P.+��8���I�*�2�C"Wn��h�)��z0f#}�t�Q�
�0e$��7
Y2��s'dl����<<
j����������r��G~����wF(��(�:J

�W����F"��U�U��h�>�w��SP��XT�U0i
���X�1�OYP�>��3w3���h9�g�:����5Wg&��������Zsg��L_���By�5AD�9eYU���� R�Ss�F2�����#QYO��Ps&�X?yd��<8B�*�����0��Y�f$���K���T�����$H�_�K$a:����-�i��]��e�D��ff��Sp���6�#�\����Z�l�@�X�Sd*���*'u���-�� RP3��8��.�di!ho�m	vtF���hH��!�7Z<����<kS$�|��FZ���hFg4�����\��kXohKo�ki7�	�l��4����i�tF�=5�{3�=X�[���S�C1�l�*�4�-����nQ�f���p~4����nB���lhY���`c����5:�;A?7#:��j&t��c�����	����
��e���PO'6�����?�b}#G���{��dFtF���e��hF'$�t�hG;����d\3������ksC�MS�t,tS:�����
���)��~$^�����(����I�w:3��zEy�!w�:��;b"�(F����A���Mn�iFHV��{z��hX'T$�fk�����uB�a�y*T0�<�V�������[�eM������5R�:���>��zy/����*z���.I[p
���gFQ��z#�v4�3*��w��}�OU:�Qg4��D;��z�u���T�c���������{����# ��:i�-��E��z��yg�����e�tB,�����!���
�?��Z��]�J�K�\���`T3����	fT�S�k��2���:��P����mc�x}�L�2��,j&%j(��f
F���`Pu�q(�P�	%�<���Qd��]8�@�M���xW4�$x�����nOD�j���W��bb��e0���j��PA��_$=�_��.h��
�e�I�+J�<bc���� z������&�2���+�[�'��N��fr�����:���(?�1'T"������8�A�'�!�:�!�Qr���U�/���t��sc��:���.���xV��.����j{&����=��Z"�qP�L�|�o���Ue���K�,���j���$��M�[a=hV�������=M�xob��9�[��
���$/35!�A���	%�x�Z~��3!���Q��>U'��j/�]��6:���[ScG"�����^���0��C��Ip|
4d�"������E6ah������������^�:v�Q~�/L��+��r���T��<�f=x4�Pq.j�?\�����xS$R����l��:!���O�u~1�0��F�e�����#���n��}����O�����a�7�.��#�����	I���fV�q�k0Q3�Lh�Fc[�LH���i���)?���� ���C��z��������-9�/�=���w-`����;��U���+��l�	�IU�� ��y��<��pb��|�a�"^
��3Z���`F��b�["]��mJ^e�"�_bb����~Gr�Cc��6d"�t�u�E��M���p�>�5�T�^c��T����F���[����_Mh��A�o_�7��,�.���g�L��NCT����Z�+�lh����W���K8��[90�}F%$)���G���������I���z��=`j�\�80��h��$P��1��O�YS��zv1�t�2>N�w�[��4Z���V������0�����x��A�;���A�;�waR��KN�����\`�H�2F��A�<qc$�����84�����r��D�)�3�E�t9���~G%�����IR��<	����,�[\��_Kk�{2�~��.I/t��c���t`u�va���0�9�/WO��� ��n�:���#��y���u���C��g��2��);"����#�=�a&Q~����UX@����-�B��r��B�M�:�H>q��U3�L/g��=���@`�%���w!C�OT����2���U���P�Qk�b��F$�,���������d�M=E�����53����G7��6	�]��q����r�����#�@�9.�-I��H�����i�3�5h�~f��M���,���(9�~�%��4�3b��Vc}6�b�L�\�`���"�z��_T5|� �p�OYL����/7l�`0�' �$���g>�]3���������,���� �N�+��%[$U~�l:�|��g�A"��
f
yk"�@P0_���36GcA�7��b��S�,m��.��t������*���l?,�d�6���m?�c�w�4�����y����K#���'�����9�a������/H���Y��(\����f��e�2��\��c�{�H����1lQ!"#Cf�����t�f	Mik��;��l�� ��&R����O:��[�/��o��&�$��{t�����L(�{j���%B��������W�xg�����G�]�rE"
qm����\��w&Z��4	pA�@o"�P���R�����������6��F@�]������`Y��%5Q�s����}��dKh���n}���G��9rKw3c�u���zE��H����C'3�x
��j����������t��}h���H��0W�����		�=���I�:�K�]���,��N�*���i�����GG0�a��\
�6O��s������� ���E���-��.��!��f�hxvA_�G�l0�e��T�L�l&]@��Q��R�0�p��!V]��e�U&e�������isw��9+���Xu��
S+�K�"����>vB	�l�:i6{��$����P��S��a�-���k�^u�����]�xk/�.:l�������;�`�%R�5���;t��'4��4x%F����]�jw�E���
�$�m;�I�5����
H����?�+*�X��]�a��AH��0�1������d����2C����N,�\����_f��6�o�@F����~����|��8����{�8tF>�9��Z����]/8�|����}�`�/�D�����?����6]��F��x������D�\[�@�x�Y�g�.8�|��O���|��kr����&!��tA�/x�|�sO\�&!����s���U
9]�MXU�O�h�����������#(������z�{�-��b��4��b��|{���������\�>��n�/P9^Q�|E}�+�K��-�+ �+�3_9^�_E�pE�������7z����`���� G��e���L�������l"!G���y�/�����"]/������5��_���*�v�4f)�
8y������a6h�
4�(���+l��6l�q���q#���\a#���#�
:�X���#��s�~=x��y�W��[�S?���W��G�pE[��!�W����p�5��"��\�8r��(���x��oUM�1i���������������������j��rj���i��ri���h��rh���g��rg���f��?:3��?�2��?�2��?y2��?92��?�1����Q��b���q���{�������X�n��=�-�������n��=�����s��\������e�%�1����+�3_�_��pEt[���nKpc��UL�+��.u~;�Yv�����H3����x���~6������Qg�$��U?��3�����c�b�h|-\w)mF%�8�s�$c�u2�� 9SP*_�����E�+	�A>�\L�� y�,M���v����f"���$�W>|d�[�YY�D�G�4k��L�eg
x��D���D�"'��eD �15oQ�l�E?�.��IY��B�Ci'��Q#NZf$���8b�I�$���X&y�^��S���!e<��+c���'������B����x��W��:��i��&�JJ�DR<��|�'�+@&�G���8�A�9���eA��SKyJ5�%(�I����l�hM>PrBZ��+�(_eh��RHT�5M���Zg����.D���`�=���i�z{��\Q�������,h�)����d��LB��3Y���)js�������2��J�tw�|�J�i��G��*�xw�P������N��)3�|wv���`��/n
]�;7V���M�H�l����)�`�&=������z��{�c�k���;�)��Z0����k�Y�T��e9�hk���8�!��/���T���h���Hw�f��l���V�����7�����Dy�3�#�Fa��c�O:d�D���"�����r���i�&���Q�+�8bYOg6/�
U,��6z;�~�������JN���#Y�w�w=�����_%�����#�gS��.d�h����Z;5;!���3����� ���%���)�& ��&���w��@�*����6�S$r�����g&b'o}��2��	e��p����[���X[I�@�).DsQ���y����-�#h�V>4s�Vf��&��<q�L�Dp���L�7���e��T��$�`��2T�T{�6
��Lz��������.�q.(����b5�I�G���=�*���`$���>��]���"q;&2���'^j�"1oVs�'���D�Y��Jk;�To��>B3�S���p�=�3�����t�����]XPMN��3�o*��ca$2�7v���=�kZ��L�y7 ��l�����:��zNvrET�����oY��V95����;��&xW$���p���������q�@�����E����pr��cG���x���A��;~l�J��<�����[d|J�z���H�Nn}����'�6�YQR�KXH�QyL�L��������P���N�O�/@Tv���w��D��H��=���%��^Mn�'"��I���Pf�:'��^��._6v���|~f����������y�A�I�x���C���gp��I�aF��>����L���c�P��liS���U��#�<��1%!��}�#[X|�=���HX:���7����� �3fPY}����0<fh�sw��Y�.��wA�z�A:�b2P��H���g�	?nF�wG����Ds0"(I���bG��5�����q�L�I�8UQ�k,]��W�<�4�L
T��SO�bTW���BY!�!D��H��wl=��t�iR�L���x��T���7�%�.������ID2'8 7��ZLf��p��UH��S������T����w!G�W��i��{������!�`�n�����h��4�7!W�������A�II��C<��j����2B'�/��u�vT��l�sP����W	���B�x����r�1/^����r���##��	:�/�uU�@g�p���f]��E���jz4&��`�+���!���c�g�P��4
������C[��L��Rbr������s:���C�f4J}D�����w!:��^r��(s�x�TE��U��8K�cN��m�c$�@����=���Y�
2���@��z$���%Q�����p
�3'-V �HK-beF�Se�B��.�/�Lf��0��������~L�#��W('m�Vg����MY5�)
���E�U[!H�Q�u�}���@��|V$�A?��v�@���{��37������&���������-(��i|���mM���@���/KX
��U1���dia���xSD�"d���q������y8�����w������k�s;V��v-D��%g�^�@JH�$*�kQ��� lM���x���9A�r
��N��x'��i}��z��9Em9�����������l�WE���u�@��$
`3K)_��+��z�
����k���	PW�t}=������-I��n��i�n��M�h�L�t��Lw	d���������LI����C�lo=�}FEv��p/$?..�s�4V���/`w>��O2�Q�C�0��T�"�N��R�����^��V�g������Q���W���z3���x��	t���P6�d�q�*�:xW4v��[�@�@ _�����k�Y�eT��mQQ-x��5��n��y��L�����n�SOdK�7
�z��XgR��w
����d�|�.�6����{Ld��������]��Dg��"���e�2N$�����R
��~�����rKu�mp�1� ����������<mA���X;�\~7#`3���G����cG���I�����B-������*a�����(`gUr�0���rZ�����,����������������_�~	�����oT�M��L���i��|������1`���q���
��x$����/�o{�h���VC��Hd���i�[P���A.��&�q���0�����	g$�J���������E��;J��M���b3�<`������0����wh_4Q������0C�>�!#�e��w	i�'2���������~g$2_�r�\�-�����l�(~Wm������� ���P��xyf���r�I;:J*���5`�e���~&�<1t���������{�t���`�
`��N�P��w85�C��=Xu~ �������O�+V}V��U����������&$�0����d�dYY�4�=��,�����}�����wE�����ck�M���Jo�3����D��N�%]U:��c��{��Ekf.��]�=�*O
2����y��[73�$k� DT�
rt^����uP�3�$���"��_�f4��	���	�bGYY�����b��kc2^AWE���5�
b{���k�J��G��y��Z7����
8�����d�����M8��P����]	<���Mv���A�S��;�3C���
+0$�%�P	
x��<��BL,(N����
�|7��47�0Q�]	;���F���g����v�?�J���6�no=�A�u��
�c_o����D�yt��f�Tuo����'���^s"��E�w�^1��3��)����/��������0�7����%u�k�H��("~%"���w<��V&u������M��]����L;;����+��
Z�<g�0"�����p�	�������]��ss����d�	duv4��R�y��:��>y�*���wa:�(����#�	pe��<qc1<�#q�A�~~��p?�!������=����xg�*$Hh�d����B5M>�OE:���g4��E�h��������9:��0��(*��E7�C5h�A0�����?�+�K�[O:��'��0D��:�����u�����jN��9}���/��#���{O/�q�b>�D���z�}���$��o�*!���:�L��JZ����>���+3�a�W"�������?��+3�]i��\4'6]���9�88}(f+��m<��D����J"2[y.�u�2)�)��&+�6��tsJ95����h�%o�1j�nA z��_�y�nFC���iy��]Q���db�b�f4�4�D��j��]F?�m�%��w_���h�NO����zoF0�7k3`�2y;��4�d2�7�2���z8���$0D�
��+����
���K+W_5���� ����� �X8`oC��=n/[md`Y'�������h�3%��$�n��H����h��K��DB�����l�����?SCx%�����?�.�M�����q^G��������
�;��U��2W|mCx�.7U(��zO�!Q$�3&k�z�CoF%���f��-�,;���������W�~0W�����~q/�vn>?����}�nu.��[c���+�k���?8�x�$��g]���N��g��+���
H
���������5p�"��Yf^��B^j��+&��o��F[��}�(����w�2D��:��0j��[+�F������ox+J����x�)���^����L�cs�	0���28Q��W\���f��6�m<���H�7���U��������v:����e8���������b�_u������X#
.�����[kJ���e0�B������
ANu��M���!���d>����� ���/�4���D�1��x����}��Pae��������P#w��J��'+�����!>*X�f������B����k��/��]�9z*��G�pe_R1��lWD�`��Y$n�g�{5��+3$�f���,�������V������/L[=�q�Lc�+���a�n����MI�
�Y'���"�'0��M�fW����T��MMC���' ��������t�Ho�!%���j6���B@(���\�5!�����5S��2ip�c��1C(�m�:x�
�++c��l��B�B����[;�a��n�%&D}���L�.������hv���	�o�q�n�uk�>^��8<�$��P�qj����J����jhD�/�xC�UB�^f[%P���b=��j�}}����a �2�2�la���H�1���w������O�
�����
�+~?m8\�����\}���^���gE4�C��*�E[ ����#�����V=���5I1�3���S�9����JB���[�;���%&����'������H���$�}�r�ZyW&��h+����QrF$�� �y��L�������BgB�n��N���m\U���9y�� 8XdeB����QQ�$�t3�Y��c6�w� �n$c��F��vaB%u�SF��S�E �K�K�1��L|30VdX��#y��t�W�����f�#�;#�=��B��(����:w��vY���S[b~��TbEb�����\����	1/Q�A���nz_D0	�;���G��*�o1�����a�������y^M����PB����&;9�:qVh�o��q(�/c��8���V �&6m�%�)
�8�?��>��G,L��a��{�2�A�xF���OH�t�-�p���	G$b/�Y���#�pV����9B9�s�o���*��H��Y^�������=]�V	�����-7��@S����f��`�JeT@��%�K#�X@[���q�6A�Y��m	0|�|�����VV��n��e�tia%!�B!\��GNB��v�N�J�{��"#���>� a�8!I3�~�~�Yu�����%UBk�#��FC-3�����U�t�x��"�Y�[,�����X0^6C���
��2�z�4��sgaBl*sI�M���6��63!:�;e�����X������L=����5T}�Y���P#7�����I����6w����}�������P{zBD7�WU�<w����	������ �R]�[Y�lY��5�kV�Y�;�0�'����,;z��2�z�xr	�]!W?V��IE�d�B���S%O��U����`@8y���Gov[ _�����9��%���++�1��O\���M�&������$��
��p)
�q���G�H^TV�F�X��<�!y���2��l|���B�c+������tB`�;q��2:��1��cs�{O��BD���������� ��#D�����2���0�$�����{�i�'�S�m�9yaz��%o�s�v��TkF������.���eE��-eT���1��������c;!��[�!i=���?�0t��7�������gf-�
���<_�Cf�Z^�;L��!�|ju���,����p�k�������^|��������n��i4�v{kD0VsE�^'�@��0^v��E`�<t�����\�<-���tbR1���K��Cg:KM��In#Lv���Q���^<)|e�0�#�\4��]!�-���a����<�����1��2��_G��edc8.���j/����e��HPq&D�'��m�nF<��-������P�����*��?8A�#\+�j�K	�/��
g�)����<\�X�7�V�p�?q��4�%����h#�����:���'e�!���r�c���XjV�ZY�|�����.�0!���k����&_.���	��>|���z���J�J�����g��{��9B1��q���Je��}f��fg��+�rm����BG&%��bMG��yv���}fPx����g�pXL
f6��.��U5�(h������(O�!NuZ��c��(����n$�5MvA����}���Mk��	��R�
��+�6���Y�a�`�F�Mu��Nk�0�
�X�PXm�#/�����U���j��?�j�=
`�|X�5�R������).d����we��1�I�m|r�v[D��-���
�:��"�u ���}G�y���;��No�����L�!5B��Q���(�������29.�Jj��r�����27�p��++��Z���������'�C���P�9��js�A����vkg�/C4�p�I�jQ���K��V��/[�l���������Y����]Q�i������^����M��N�d[�����'�jd��
�T�����Nq�������t�#��V�l����^�M�}"6D��Ga��u7�2����=D�g=b��<FX9'Vu��f=�4��e^�����>i��c)�=��54�����eB��hcwF�.@�Y�]G�����we���t��������������.�=	��|���}�9|���8��d#������	�H���V��p����>
Y`a�:����������bS`��B�_rmn YG��o����d�v A������Nl�M��� �W�i�:sh���0��2!d��.����+����&�����w�-y���$p�Z��U����l�$���(�&�/�rW����V!�Nk��{aR������8��8�V��Ec���DdC4mS,l�V��r��0��BF@A�$�KN�K5��,���@E��7�v��s�0�M��@��9Uw��.�������	T���Bc�����yJ��95��m��_��t$����@G�C����wE��`"���"��>�����a1��nj,�8!	)���-R >������ Lf&����G�C����4�M�5G�e`O�s�4�>�OL��������i[Dp�{�`l��!��y41���e9��!�4AQ�.������������'����!u�DI�>u��+�gI,a �j�!xWT1�lF
�e�6{%��4Qf:����Ad>q4��MN���9�2�%34���	o�8m�i�S����ta���2��M,�K�,�(v<M��w�t�������=�}Bj�|�|P�w!"#�qX�}�x1ts�(3��C��K��q�����i���J'��o���7)>�-C����Ul2:������@T|�fr������C������b�]##�j�po(H��������_X$����|=~���Wg4�$6�O��E|2!��QGOwC�����������f����A�vvpD
e��������;��I����������i���]�i�����|��y�x�����uC�p��\Y��\����i���G-�&6�<	����x����HF��J��\�8��:2!hO
�q�
��4>�����I�-�?u�a�������"Q�|���d�'���u0���9�#�7��4qj��.�2��d�O}�.��w�2_4K�2'T@�`f���<�H�2_ZM�2Oe~�}��[a�y� ���d�0'R��hUM���uBm���m�
�9��i�Pj���I��a�vw�L	o3x�OB*�`��]s��a����^��l3����S���		8o@`�O���0��������0���d��e�l��a����0O%=�aosN�yf�5��k�d��F�eX{���&��,��C2�2_�w�}F�
��E�3u�O�yf��'��k�c��9���4����*/�#��i�y��r>�0��y��x�cf>LD�#
�����$n���� ��$3��,(�\����igXR�H�����6�2maZ�Y��OFg�g>�b��`��]����.}����Y�4_���;r.��d����rE�s:<�Dk�8�3���/�f�T�8TM�3A��8|��3Ae�l�_����4S��~|��������`�O��=��3�������>>�c��5Z�?6���oi&Hg�R��H����"�1>��}oq�3�	�����<�q&���:�"� a&8W�0��:�H�n���`�us��<T����0�����*���X+�l!����V��|"L�F����s�g�i"H��QH�Gc"(or�i���F�`���Lga����m\��g?=n�J,L�g�8
D�f��@gN���$Uf���p
��+�*�)�]�aQ�����?������X�������|�7���{�Q�7U�I����;�~m���_D��t�����/SA�����!�w!��J��C��"���hO�
�A����������z�a������
�s���w!�8�UA��s�/1!��u��_fO����cS;u&yP�H��q���H�T�����d#1�"�v|=�=M4��\�I�b��V�Rcq�KV���:]���qa�2����:���U�,}B��mX��R
��w�n/"4}�x(��" �������x�������QI��|fhB�"��:��1C�T7ZS�4�7:��%]t��l��'?���U�kJ*�if��-#����'��&���M_�V43+Zj}7>�>�q���������6����;��&�2�\��Y��At��i4�-���0v�Z&�3M��������?+���������pI�_X��H�Q�U�i�
����io�'�`7���Dpp���c���^f��1wVV��ICQ����r���i����U��|
1�x�b������<� r�/��s9�_�dg�a��;�0�vb|a�N��YY]��h8aG��we|7Yp����;�1�OF2�\�O�1�����wA�r����4��G��Ri�ag��b��Mk&lX6�ej�vZ2-~�Iv�9&��$�@�\�u�3����mV��T�3��?�v������d��3������|&�[7�}A��^�N�����k��c���K<{���L�'��=Y�;k���8_����������w���Q�3��L���/�������Z��G�;3�B�{RY�$�-���.��>q�NY$��w�87��k^��q?�TYW�b�XX������$W[���.= ����+����G�%�,��P\��@����o4�H��"]��B&Vu�nh�D�`����+��f�`g����e��iSMT�����n ��?a�n�o���� 7�z�D|�����U[����7s�����]Y�5�``~�&F�l:��4�L��3�j�vR�]]|���fa�����I��]I��+��"��9�j�F�'�"�j]l�|j�i6H������Xq��2�j�u �cV�V]������[�~We���"���]-�Q��:1�tWPe��}j|�	��yZ���O�S��q��8��W�b�
��M�+ �+�yu�
���8�)\9]1���W�,9��t�h���&�w�����������-��|	�����������������w��2�mg����w$!��S�~r+r�Y
��W,uL����X���h�;Tl���w�TF?]V�6��5V���+��)����T���q\��/��.�#�0=F����?�������P.�^�}���_�8���2�\���������m�������������?����Cu������|,>���d�h���
��5�:��_�N��32��ip�8��d|�p�'^U����A��M�e�����&���mL���/kF����>%�J�|A�xp�o�r��W�����t�o�6��v�I�s�4��~��H���{>�`��.Dm�?�*!"�l�������
C�;���Tw�
�zX�>�������T>��F����f�sy����F���T�'4t��\�SC�A@��3=W��\b���(^2e��I4�6��Oq$;{���u�J���� �g�Wo{��9N�A����������~fR"�����������`��+�A�.�5��x��o�o��.�aP�"�v���|U�)��|k[���IL'4��
���eFI���������M��9G�QT�}���$��H��\wKo�7��X_}�G�Aa����L�L���@?0����pQ���?V��f�O���6D��������tK1`@3H����u�
����$Y�������w�
C-����X4���Y�aq�g"	UP�v���]P�YG����+��]��<|c� y�{E���Q��(��;����������������p��:v��LN�����(����)G��@���"�~���.G0A9p�� b,����fi���y$��'�.�L��V5����tb�mFl�3������f$@���^�!?����	d^�K����?Q����pX�X�R��D���<�XijX�xu�$e�%���8!�I�����tj"�u
r i��MO�'y������
�m:����G�7Qg�B,hL�p����&��,:T��������j���0 LH��	����4���DR��n���J c^�=5��D�h�-O,A��<y��]�9MH
�����StAd�P����#�����hB]�U����������*���+IN�@)p�]��v�|;2� bL�G:���1�!���Qsk���PI�M�N
hv2�L����	i.�x&�5+�������:���
Z��s�
���k���b3�
P���d�s	M�`����DY�K�$<zh��
��@
��C�&��E?~0�4T���*� ��c��@F�:�&���8�'M�p�4�!���Hpv;�Ql&R�3�+<���K�wF"_=�8��'f3������h�W=����D�a��������x���2�\�w�!������
���)f�v�L��8����Z%8p��8�^m��������	�=�>�uh���I�(���L=�F#��"~q��>f��-��.L��s���w��!��4�x��k�������Yv�YgY'�w!s$9�Z�{�����l�E���U��	jHf�q��fT/�.�D���lt)�hn�I1�`����R"�\<�|�>������1��Kp�S�����G�Ts
����O�Q�E���1/����W\����X�a�.�cq�������$��o= ���
���'���% ��
@{���ma��0)s��/e�45����z���+���H2��~�d��8=�HB?#�
�,
�U:�2���r�g����kF� �����<F^e����������bl:k�f>������ ���0�ub��t�`""?�����a;��MF4����0#��
��/��������{���=�o
#�����,��@�93)��SM^��z��D�l�-=���7^cK	3J`�%<��E;0������c�]K����]KT���M�>sr���Jd�O$�j��9��;���j�;�ZXK����MNT�A����tw�J��	���������`�'$�e��A3�C���%�
����RYu�@�M�J���{�Lk�I�+$��Z��
h�D�z=�����A�$�G�"�U)G�G����H��6=2���{W$I��P����z3�.�H27v�K�-J��4��h��Ar8��L|=����=����M�?gp`�N�1��d�G�b��Yb�/��:?���s��p�����d��/��������*�8&�_��7��l�}"�����C�"�����Q{B�i��y,��A;���#����#�c�SlMa���D���F�4���M\!��
HmlFx�+-��J9�{B������}��Gu=�!��/��7>�GWz��]i��F8^��% ��� 3�3��ni���n�3����d
����(AGo�Yfg��	v�/�*���n���jU����	�XNT�2�����9m��4���,�����j�n5�����>G���|�d	M��*k'^$������v�v���HPuO��/>]��]��Q�=�������@�����Z,�f�����>�����d(p�g��|h�������U
<"#�@R
���������h7�����]�k�"��G���\x������5�rZvWV����Em~�=�S�����IC�DX�������\X�l"���A|D8[��~���'O�d�����-Z�	Im�}*[��\U �
z���Z@��O���w#������E��
�up��QN!���t"�/�Q�r;�D��4��5�j<*�]q��Q�I�~X��`6�a3�!�r��e0���e��(^2\M�5���(�t�
�5�����-(5���/hf����h���A�i�Vy���#xo���k�]�N ���i��n�:Pq&����$�����/
����25�UY�b����L���2hM\���;��ND�Cg��mP�)����Km���?,	E���k�%��@�A�c���>.$���0�U`S��Y�"��f���1������<�@p����,�]��t��,�3	27������#�'I14��_C~�"�D=���zk�LI.[������	
c�<4���!����7����{�KO���H�ki����L�ZNV�xJ��!b&A�P��z��	�r����CX��O�?9����J(�:��w������#�!���0����#T�.Dt�����Wd_�&h�5_��*,��(�W��F������;jR���^U6���F�i��cF��b��uQf$�����(���uH��,\�=l#�����	�h���E�[����_?�X6�����y��2���O�9��h��#���}�-WZ�M��?�.9"�n�A�j���![�i���p�p$�g!C�W�E�*����t�����c�;�6����|W2����gbzz�&��Lz|{���G�L/h�;m��>$\��������8��h�����!w[�������3
`����|a���h����sT�}��=w3@������7o�d���S�j�h>����e�@%L��{���sX�2�kv��Gu"Cn����y���O9��kF��d�6����(�5Bp{��S#*B,z:|.i��5GO`FT],k���j�����L���<�b��$tB,�v���r�8U4��zP#�;j�8��.���
p:�����L����{=~�>�!#�3�
�u4�TjF�D�	�����
y�GY�+�&1�������w����6��8>n�����g ]��e`�5X���U��b����?*E���ff�V&$��,��.�[&D�H�D�!���)5C�:���5���f�B��,(&�S)��������	�U��v�B���xr���R���0!��r"����e���{���v�Y$9�������3�N)I�Ef��C&�M���r�Y��L�~c���t[
��;�_i�KkN�6�u�	�_��H+X����
:!��g�R7/1���d��n2��(���f�9neB�'������%`
13yN?�D�WM�0CZ����9WvB|;|&��T�p3c����Zri��z�(�y"��2��W�0��?* ��[E��/m��4�����u~,~�)����ARB������8K�!D8��Nl+3���~���!1!U�v^b%����bpx��Ff���C_��.�tjz�}�����**�E�U7��.�6l���\�D�c��
Q\��Y�*M�KN
)_8�>MX;���V�Gk,�f_��9�_*jH��z�^"9r"8.�)�j��X�.C�*��'
+"G�b?�j��]��K�.ZxT��A�p#?��z��[>.4�o��6� ep�H�T=50pi�����P���]�����#b�P�nmnn�5�'�!��i����Hr���T�����~���_Lz��~B�7���h��>�9&��:[Y�H{�����MwTM��Q����A�TC���;�"@���8����x� �H_�"e�-m�����������t)�jCD�����Hj��N�j��U��� ���!t#���U���|� E�/!4��w��I����fA%�
�J�IPC��,����I@+xB	���4���@B>I�v�����xg���{��_�����}���1�,#�������G"�|���$72�q��5�U�k�-A�%�4��;S����A>eA���&�������8�y������uJ�g!A7�>�����2I��8.t��_��0�(�Rm��N(�������)32���6(����`�GQq�.:�i������	`���~{�8�\���A��� {w�`q]L��zB��5���B'�l��H�EG�M��d�	��Hw.���ol�a�_���u2=��1�dFN�l�n��7����S��u�	�&EY?��� sX�	�.���V��E"Q�!�bv����H| ��"{�D��	%psd�t��
d�W���:h=���D-L�V��w}�H�������dY����i��o��+wWc�:������"��}~�\�q��V�:�Ra$�T�}ta�G&st�3�M�OQ/�:�XP0'+���t��k�Yf���8�I���KgJ��u Q�R�bw9�`�#P��t��Ipo�	����6Pj��Q>������~4�q�bE�R���2wipa�9-����i�����lL�{���98������&'�4sc��]���ag��L�v����wE��e��uE_A\D6�-����[�{���DF��z�$��*�[�>��8�)��r0N#��.n�<�B�����������a�e���<�W��3W4gc��S����dk,��C�d�
8�a1�'���=*��6�U�	���E�=6]n[t�����s��7�����$� �a���W�f��S`>�fH���)��MO�����"n�V0�=os�Lq(���Np���CT��.R���bf��pa�%�'u���P�Ot��)��
@	��,x����(N1�	��	w���to5����@~�����I��<���N�v�X(+s���i4�q�2���O:bHH|�_�D���3��`�'�����F�9�Z�{q
lG���nJOP������������:d8G�l�[`�jFx8o��#`�
]����$�����g�e1�|tN�A���3�$��N�L�%�3	���!lX��f��]��=�~��*{8�K�w2!'M]41w���k|>!���Y�:J�hX��:�vGR����4��bKL��X[�?���,d���'x��K��;���OS�$"����re�6�+�v�%���Y?K���@3����	�����9:]�������+��1Y����'�O��_N��5B����%�����/�@��C~"�!6�ev�C���9@��4����@���]�N�>7�CZ����K	��n�x�#�Cu�<-���b o����6�:�
�!/�M�G{�q��&�h�G�����D�Y�D^
<f�&��l��#=��T		�z<��i���e4G���7�z��BR�K����6��D��Zh:�P
��k��)y"_�=����JL(��<�$��Q/5�L,ZO����=�/���q\�b|����� �a7���S�C�v.%i�vz�7T����
>A�.���3�wtn]���q�=����9��^�b���X�]�a��S{:�R���F�>��#>!�So��������~&�<�-���[���4��X��ZT "s������j���%$@�$WU�N�������}�n2��q�:!8o�5X@on+r	�kC$2�X6(���s��Ba�W���i,l������G������x@�r����]�\Hq4m N�xZ�gVd���e���;nM��D1�!��c�S��g�"Q��8Q��"�V�E{�H(�DF`�x�\t�J�)�&�%��Q�5Zr/H����h<{|���y~5T��;���%�Q�\���L��{Xp
����+	o��G�u��W(�0��AM��B�g��*��i����������CE� O�����Q��/��R7��@?���0l8c����>��	� [;��'�K_P�����6��E�h��v�'��Ez�.��.�d�(�bJ*��O&������tl�$�ec�Xu�J��:t�{\��c�DQ�U=a�1f�w4-h8�����9�y2{YY�Pl�`�M3"( �k�K�ag$�-���tFadP����N}��d)���rG������������H0q�A>�a���ef"
���^m�%�*���`w�z�~��M$2^K��������lB�6��bR.��*��2#�-
���fYv$S�V��|CL�v[��$t�����baR�l�+���� ������!~�)	���3�J�CJ����%�A�;�W��OH����l'�������p����&��r[��22���&�z���.>LD
{B�e��-�����4Rd^�9��w=zA��O^��f5V k��r~�b��q}�AN�
i�����s��`���������������o�}t�,$����W�g'�&������O��� �����0,�0�}�a��m��D��2~�������h`�7S�#l�U��q���[mO���GU�4w���5Z�7���c��U@	�`x7�t�Z�����������M���x�4��t-�+f�H���3�{�5�lg�����S�M'/Hz��b����z�o	y�o]�� r�lz��X�D�C-��2�a:D�Y�Hb?���;i�@w�fR2�Q�������b(���1:���l��E����t#���fZ2xZ�|V��Ls�QT�}�r����-�;#*F�\QM�=��OW����a����
�+5�����p�����gA��9�I���P,�n������Dh�i�+���6:O(;�cr�Sv������gb��qsp�\�,(�{j�z��%������k�0����A��d�cm���^3c?<-�"xW�����6����d��\F����/�����|�u�$����s�uT��S�bw���	��]�ee�tn����_��YI�w	m'�8�Z=�}������H��5����~$ft�xd>�R?(�K���tC?���-��X�K�;��@�$Q�5(�mO*���Q�u�=es��Ss�f��g(�'l�J���,	��9a��w�����������/����lm?�����?|�u���Ss���e�����t�t���9^��=]9]�?��]s�[�~����C��YQ��V��������\V&)�v��q�9&���0Q2���� 3�!K����%3r���y��bd?LHd�^�3����f���F��T��+�]Q�<'O���M���3BY��Q��l�����d���\��F�4�����	�8x����<R����./,!�q�L&.>|&�d�L$�4��Q���
�|�3�\����i�U 31|ebF��V�$��(9��g��8�dF�ZTA�x��W����8}����[��	�p����_$>y�Cs	�H��=�W���$U�_�f�|0��X+QT�I+������c8aG}"��U��m�>f���HTJoB�vNpG5i����������H7=i�H�,>_��q����'�fJIJ����6B�"Cv��Nh����w��&������z�v�HHH,�
�}L�U�p���}����X���'��r:��p��v���&Z����3�5=�;�i��b�#XS&S��� I`��5mAvk���jKO	�n~Z���6K5�t��)-����r��Mi!������;�����(j���\��D-�Oh��]��hMw��iE����t���[����1�R�`C���h�~��Z���L�'�.3��j�/�
hIZ���e�Gph����LSz�J�%���B�-)"�������;yz�9�h^L�����p�1-�*#=��;N��m7�%Kp����dL[�O��hK��]=�RC�m�k*�iQnd'�
�����]����K�wZ�0j.99MjAL��2�g���H:��	U3��4�/��n����`Q+j��4��d�)@�*y��[��"�����m��n��j"
���'�fS�p�'����S�zs�]���:UjTMhU���7r&P����7���"Oj���@����Y}T���$���`FQo-�U��N��;;�U-��57��8��z`�
kE`tv1���P3pF���v�Uj��H�fV���2�F��%wO[�"�N3Y�up��Q
�������jbO�j�1�A�d�}h@�x�`??o�i����������w{j*J{�UX��G��� �Oz���B��d�������!rr�19x��yIl�J���7y�P�cr�/`��:~��)�	^P��:�Co�=I(�����A|��#
�.��1o7���i����*���:t� �	�Z}�x������_��<�X�q�tB&_�
@6?z�tNs� 	?�W���*;m���lE-���hjG7��P������8p9�r"��X���N9�I���y��E�N	��%�)�w�O��k$^rj��|���3��E��2�@=�|[��K
�0DP�xp�i%K�[5�3;W-0���3�De	���PK�>*)��N.���W��4]]2�U�������,�l��?�W�����R�%{d��T�4�#�i���F����2[�h����Y��@n�!���gm�}D��h�0������w�	p�\�U��rg���N�B1��ZQ{x�F�>�<�A�����U��w��%����%��q�*�G�+�������qI&�@��3�eB@X��En
<13NE+
(���>���i���	x������_���r�Z��������9��9{���������2ae3��$$��������V����D?�f&�B��h Z�;-���7�����6U����Y��i�7�@���X*�Bw���<���$�UBl���y�n�"���I��yk���]S���B�[-�r�&�T�ak�D���?GT�~i[+q`�=������Hp�%�P�z�B�#��Ty���]�%?��)��'���V�D�I.3 �g��������G�oT>5j�s9&$eK�sM�
��OER�$��@��X_�XXn��x�)k�/��Z��Ij���XT��
�����SiIn�3W��/<�o$K��h�\F���,����{t�_����R[��G�)����{8�fw�(�h�q����kv����D'��<r[%UXm��x:��'���><d�M^	I�����ZfG��"Owa�`���7�TM
�j�����d�=�_=�N�Bf ya�/���	(q��S5����-uec�F��i"I��)��YG+�lm��� 9��eO�i�A29���
uA`4#��C-��"��8R�K�����B	Hj����c5��-`n5i�>oD�
���|��4����<��2�
lBO�A��Z$�u�a7T$�;iE$���S�>��-�G(�����Z�J8$�#����^��@���~ts��=��H�����@WP���3�����F+h���xP�&������X^$_�Cj\�Db��XT�l�U)�B�rq%8|�OD�*I�.u�Q��Y�Zm'f9
��c�gI�M����,�|V��A���G?���"����cN��7�6���6�i9���AZ:�Qkf��H>�v�����H�nAN���Xs���L����e��dk����da�g�t�(�o��@�+�-��������]����C��}u�����g��Wh��j9�)�_/��V�}��u��wl�ab��;L�j�>��-6��f����&�iDo�9���i��#�\���|�����+�����,2U]�B>�B$������2�V���-7�iXj1���T�
��5�\d������'��OD����f���*�w�>+F� ��#Y�M�f$��'��
�|�Z��I��3uf�����d��
�@�<f:�^k>o&���$h�9w+
��|��W8q�3x��"������|"�V��"IF5�T�~hA5>|��b%�NJ�G<��jDU��o��V�	����=���}��(����.{��D��C-{[P3~m~��j/&�0��`���,C-}B���]��;'nU�����������H
<����9�=�K��b�*��S.��[f��v}R�D���"���AJx�F��� �&v�<�� ��\ok��t�e��	�@;�P�|����(#A��q��f]�&�����<�8k�6��Fx(�h���+L�q�:�� ��fB.3F�@�������:G�Hp�Ed1~�a%7��RsX�b�`��_�:�7�YbBl��#����]�C��H���*@���$x�UA��q!���
���K(5�Ze(��K�Xj%2�B��+�S��e2���h������=���D������a:��v����U��}�A�E����0]����eVv�4��ii�>IN<}�Rj�tm�l�{������=)1�k�	yLC�C�!kWg9�X�^��*J��~\�/�p�Q�2~��e]�|k�����t��j��/�U�M��k\���y��|c����[t3��-���0!WE&�H��F�c�7�i������yC�^��q���."���D������0�<~A}�l-t�P�3��QU�\���
�����N 8�f63C*G5/��-��WY&2[��3�x��`3����~�Xv�A��6�����L:a[s����c��,��-O��Z��-'�/�j�������O�
ATQ7M��E����F��~=���}{���aUp�
��g�+t&$M�d�j����22�:�-�����������[��&��V��o����p��F�E(i1}G�n��
?����m��s����t�%ioM%"{��g#����l�X�>�%#&�.,���.�G�ef��
�B����h�����N���K�icR��@����fw1Ck �d������%q
QH}W+��gJ>�0!r*oD��+J@��H�8�����u�F�CJD�"u2���>��/�4mL�����@���8�?��_r���U�u
��j�����d��7�t���7�o)��V\�M��A��S"v����u�����X��.-��Q�8��IVY���w�%�%���jO�=m:�:�����p�hj��M����O�,������]z7��m���Je�\W�t�?�\����_�eb������j��ah�l�]�����LbB��&"���8�fC��([��W�E;��j�����(�CI�#�����d�/���������9v�z����1/����py���\^Y��e�r�xb�|��w�|]��u��+On�,b�,���"��[����������#_���j
�_��Tk��;_����H�E��Tk��=_����*b�<R�B\�O|��r����|9�
���D�]��W�r(�2�p}��:�p}m��!���H�!������~���Z��n"]�O�>S��Y�n���Z�q��:�p���u�~}���Z���?k���,K�����#5���lI�!��t��|������T�LFb��d��r����}�Z��g��U�G��Q�nf�x��:�d������Af�O�����z���b����t1^����^7[����?]�����.��[�^*����b�>��Q�o����'o���'#���z����b�~��s����_�������~��~}�6�����>�^t/�{���a�E��������^t.�{���]�E��s�m���^t-�{���Y�E��c�-�~�^t,�{���U�E��S���>�^t+�{���Q�E��aE�'�N�
���9v5y�P���A�C��c��_���
���k�G.���K�;~}��S�����Z��A�C�����]��������Z~;�m�v�{���MD��L��1	�,��b�����pL�"�!�4���p*��7��F�������@nk�<��	���$2q.��?�u��}��{��7|�3U_%�lC�����f���o��GAZ�0�i�@P(�8+���*`�� ��k�� �LXz�YR4;�����-0��������[��n�����w�mk?�XH�E�N	�@^�z�����~��^%Y-������C�2�����&�9���m������% *0�$Y'��U�S�:K�V���Ys~�,��B&����������&>$����dQ����)�R�3J�=�e��LY�(���Z�8�8�(R6)�����)� D\�uI��bc�������E�j'�y��'&�&������P%�����A��|J�l�����)����k�Bx��������cw�z �J�M��������DyY+$�����aZ.��)�k��vL���I�)��&��3��"��������#[���!2��}"Ki1!�#�<��T��n[����InP��Eq�q�������O��>������u���r�0{�
��/fUL�%N�d���� �����+0�v��V����D4+�]�����*J[Zz���v.OY��I�"�Z����`���"����D\�w�� �4����$o�����]�����g�U;y(���d�A+.�S]��*�����A>.r�$��K
�#f���2E���K&�;�j���mG����������q'y�;� �k�xb8��VFdd�f�(���:AnS���,i~��2���D�p�)�r���� ��N4���t*�5����J�?/2Y�&cw��N/H�����������J&�`/�� �R\$��` ���"���W�#���~�a
T�+.�^���UF��IF/��}L��Z�_��������������'�<����.����K�
'oC�'��&��@s��ku�h���*�/�=V�o���z�������k��Ub��������Hs���"��L2>T��"H4���*�Pb���x��N��k��AO�{e�����S�v�1D69,�0�n�/���U���}U�Q�K>G��	��|��?\��g�R���7���)	�*hQ���_�DY�]���3��cb�
Y���1�Gy�e����Zk����"����"z��e!�"I�
��20��7��7Vk��q ���H� ���WH�@Dm�)��6/�A�Q��������v�k���(���j�m�+����[0#E{,�����~�r�NFy��OD{%)�����,�0o�����F���Y�5gz%2�/r�Gho�O������Z!n��d�cZ����8�t="�8<)������1zP.��j'�	�v�I������G<��_*K�qHo#����^�?A��o�$��������>D�q�����b2h�y�k!�c���v�kR�d�[��
�	�,zqUU��*�9���^�&���)�|��D\#�iSd������;��p�S���>�����J�|r��Py����T^:y�J.Wcy�N�\mq�u@�F����;�1C���]���_��'G9���y�=-�K��������7�Lz|������4S������)zE��K�@�:
������*��DH��.ks���h�
C����GG�<)�o��l�L�|#�R����Y��O�X�h����XG��rN����9 �A��Is������P�T@G^�&
�
."P�j�fG(_���[���/qj�2��Y|ii�m{�h�s��}<G�d�SK%��30��5����C��*U&sbW }�,o��2��	��)���H�p�{2�n&�~o��F{����~#����c����Nd�����0�Q$��_db^��|9a%F�7p�C��T�$`�?�����q��A�r�8��J4|�;@�x��Y�����y�y�GrYv�������y��A�s���`�G
@��>�b�8��d��Q�3�6b3{�!�u��X���$�!f	n
9A���s��|�� A�U��-���G��V�5t�I�u�G}z�V��.
����W�N6��E���Z��Cg�Z����� ����5n�C��ef^-Cg �%�<oh�I}g3�h,�f1q�s�c�}��zp�%���p9���m_S,'���%��r�N���)�>����],��
�&^���Gy���r��/�.{�E\adAd�Om���:�����N���d%[@��j����'��2����k����!�$K�����^���M���~�A	�:Hd��%���p@����a����4~g��?�����sG��\<1 �X_�������'�A��:tqt��:�������`��D\K���O��?�cc�-Z
��vrDN�1U^z�Q�\�K��i��
���C��Ac��?������Iz����O�'W���ML���f�0���a	�O�(X��
/��dL��u��������\�"���,iH�Z8�����>�0_tsY�����,�mXK���=����=����=���j�4��S��B�/{���U����}����=��Z��f:�7Qs�B]Fn��|h��CO2��4��]�U~���af�$�T��,���OER�deQA�0��O������6U����m� ���)��X���^T�6��^(�b��,�n���%�XFs���e��V��"�$�7>�=n�y_�2�6������mQ2�]5�/$��q��]N��Te����Z3�H�N�������[����EU�������������>�|���/�����%���)���PM9�Q�c�)st��y���b��������k3z����y���z�%Z#�d]\{���%���:/�v�`�zp�e	�*���4�����|�C������Z"��������*��Mo�Cc�n��}�,�]>>����|My���mL�$Y����\�@�A��E�����`�t��-���M���g�PS�-������%�N������b��krh�������t��n.�������_��&^]�^^sj�*���l=�������b���#��1�G�Ye������a�9<�7���c���X��a<w4�dj��?I(T���8�<��B��g�>o�i��4a�|S4%Lm'p�,6gI�*I��fs��?z�t�m2�e.����%�*Q;��F�k��%�%��(\|v=a�{&��>�`�f^s"��M��[�((����E���S��ly!������}�y�8�]��[B;�H4�����7/��zk/&u��u��c���_����J C���O �����9�K�i��><�B��w��~w��>/&��1�&��J �+0�Id�y� �Di{_�m<����20tW�cf�1T{P�K�\-}�t���8���0�u�{����p��
�������
��Z.���}��i����70y[�h�����j-�����;���[Qs�n:������
���yr���5($����������������oNUF������8��!�/��#��8�'������$�tfEA5> >J�����w	Y�nfr��P��[9<�g�B�x��6�x%�T���W��6^�h��H������p��%��q�O}(F+���x2Z�����Z"2Zy�v�:Z)D
g�������
o���RNC�����/94�h���`�91f����p���:�1��|��?��*�3xW�f��yWsF�2���I�^��X��������G�!z���[��0�x�������J�7j����&;r��:sjL
���1�!@n�]0���������p��E�A�u���78�%z����kD�bx����m�0���DI����l?o$z�c�	!f��U���usD�"xE<���
�8�+�����!�W���'F���<�W��kf���*��j^��+��eM�S�uN�C)�A3����"�7�[���9�
jQ?�+�[�Yr,?����O.
�=�(\����_�q�>0B����m5�����X�Z@g�MV����9�yP����$
�e�i{<>G+�e%K���\��u�-��y<�[@�.���3�Q�C�9��C�h8�R��7Q*����$K^m�rk����-`��|
�O`t0+Y�TYR�T��q�i����M�I�V^Z�/�exc �Q���v����|!,�UlB�c�-DC	��=Usn�!����f�J%��-@F�5��]^|U6-�`N���[,���7[�B��W�d�`����F��B4|�]]+$i�}���BL0F�i���+���Kp���X���[$��?����$����A������T����k�*���1j	��g�!4
B!�:l�qlk!!��,���)�����e
!�Nkk�H��9y"���+Y���Z�ic����������Bz+Qs�����w��� �I�n���r���"h�Y��&"
�J?zF��g�Dk9�<�A�X���[����#��>; 9N��`�(�r'��9dDs+�F���x���)D�i\�����+�����i��V�6/F��4E��������
���CS���Hx%������E�������y���H�u�j����	���P[s���>�K$��nk�
>��-��)[��Q7Z�p
�N"����/_�������3��lL���:p!i���m��j���R������+��n��z�i`�z��_��h�p���M��q����4+	2'z��y���q�)d��syw
���~�����s"�����l�M�T4��{e+
` <07���Q��p�'�����V�����l�"l���AC�,Y{r�W�������	�Bo�L���b,|��c�I���&��u����|	%�)��&��n|<�D����}�+�_d��a�����h���h�M�V��E�^�a��'�JSy�P��-A������>t�FE����-m:��v��,�4�8w<g�K�gy@R&M�N�.�h���L�,_j��������R�K<����'�Z���Ul
)��H���sS��W��ye�j'#\$"#���7��N��M��y��o�9l�/d��R�����4CRj%�7uz������A��#��l����[�����c����Gx�[�K�����1�-05z���4%�!��\q�a������L���2��@_����q�P!R<�d�,��c���v���T��w��������:�B���y�I�4P{�u�1�_-�EW�lL!K�
4
4��mn��y��'|_l�33�l�����I5T��Y��9O>4��'�y�x^�|4T�S@���F0h�/A�#�B��5��$�y�T�>�.�[��y��*c|�E-8QEM�W6V	��B\�����.q����hm�y�u�FV��6����
cui��!�N��*���a�;�F�s@/4��VL�hq��_F����#)o���)�@�����|���
N6��y���������CyB�yl����e��d�W�����qD-t�N?�0���u�?���
����0�E����3��.G\���B�,��P�j�����-���9�znTA9�S�y�r�	-'��"���,w��O��@&}>��S
y�C>�h���,/��1�!����E���a�
2�9�[��W1���/�V!��d�fW�|��(����>o��4� o|&�6!��|]��j�
I2F�N�Z���%c���P��DJf7`���hG�I���%#����y	�(n9�[����U$e�wm��:�=���GZ�7�^7��"K�}?����OE"�g�;�w���[+v����:��X��<��|���h�{��H���-���~���B�^..��H���86F1����e���d.�8�����ol�V�x�2:;u,��YH�
��M��*�\�:[oA�����b#��0�N"H�N4��6�����`+_ASN>l��X�WQ�|��?���/�N��t����m/(D2$(�������F��#:��������b9`���*TV��}g;��P9Z��W�y1�'J�?�����$2Y2"4;\�Gnh}^�e��.���� �s��'�����������S5�|�y�is�;�N��}J?:�7X@���1�EO�#�xY��o!.��7����)����`yw����G�T$Ur�"%�@���g$2�*�S{R���B���(\����(h��?�����Zk��`�����M�
��
Z��m���������������[�?/&���:��^D������.�f������ fg�<n�T�1���72b�'���@D�sm*AaEJc�~#[r4(
�v'r#�S�����a�j�e� k�g6�p����������!�/����/3����._���KE44����C�����`��4h��
3
����1r�!�Z���\+�w�
�0��c�7�aC�7>T�<����zF�E-�;�a��olDb}m99�@��1o�P����H+����g*J@vg�}_�j{j-�r�	���8H�|^��_�#����F���!�s�d����pb���Fs� E?�'����a���9�Y�WW-M��"�aH�w��asx��A��t��t���/?�������:r������_����hb����a���<?�.�+���C��:�l_f��+������h�UP��LyI1�y�@d���O��Z��l����/����GF��!�����(��s<?$���N��������<������+�;W�}w�����Nu/��^KJv<h:��2�@s|,v�T��������R���q[�rkE=t�m
�t+��[���j���+��d�G�qR�����h��B7�Ds`� ��L�����Y22�Lt�
m��,�����K�Q������3���jF��F�y�v��y��<���o�#$���p�������O%����7H~q_zxnE���+����9`������S2��Su��P36u��9��_A�T�3���f���kp0)L������
U�HP�����p���s?odz}���k�d��:��A��3���*2�M!R�����!�
@����J�(��_����_d�t�t{,��M�(i�{Y�o}�N
4�Bl��-4`Y�
q�K��w��4s�Q�Y���{���h$}�ar�F�K(+	��������{_�lv�)�{v����d�8\n���9�E,���������h3QC�"�;�!�+�M��������U�O\��H�`R	%��D
H��
�7��5�@�K@��"������6��dV���_A2::�Eu ��8�9D����u]Y��G�X.m��N�o�6�o�
��@���Z�Q����'p
`���]}�I�g�����R7�[��L���$K�4m�������Oo�M���R�)�9u�G!�?�\&��E���F0X�=������b_�\j��}h�mQJA�b���_�c���$`�<�m�X�%����-����?����]<�@d����a��w�9 ��$����������J�'Z�C�R�������g@;qq�IS$�5�T�����f���lfd���N�+�������fS�z��8�S�X�DIM�
"���
����=�uG�.�uR"���)_p�1�LR��$WY/<���q���&��O���)����k�I
��aO/m�nO
@�)�����@2��[nN3Y2'��mi�~���������O��[�6��M����)-d��.;��91[RQ0����q��B�IQ�hC�����:����&�D��!w5�\4I��jL�^�'2�7�j����v_E-iAp�a��<GKZ�<5=���_\��d�{m�����d��j�����%�h���%%��'��Xl����SK�B
%��%]��gKZ�������0��T}~&A�j�Ok�8�M)���)���`J3Y_��wpa�y���� ��+����E�oZh5����6���0�U����W���B�W�#(�}�]>�/��PH����2qE�C�%����!���-�2�hI�����{��Ll���uKL�w��#$%���i\��GQ�h`Z�P�����"@2$<5��Bit��_A6�"�QjB��
�~@���b�4c�ta�H�P�r/Lc(W�0��n��0�R����u/�'�\�����\39`��\�
�"��I�e�4G	��-�Nc(]�sh�}��IJ��1�C��a|�u�y��F�����$����l��"��
>/�P�+�D�c�@�PKD�s��
��QAP��*�FQI��_,�n�v�����#�Q��L� ��=}��
��D�JI�H�I���Hp*A�PD6�Ze��*�j���
������5�1��9XJ8����*���J���t�� @Io��z�,>����L�@��I<i��'�9��\��s��I�1��1�"��Lt����O�|\xcq�2W��>LU�4jR���{��AS$A���I'u��J���|e2��=|y+��
��(�	5�k:���E��M�,3�;Psnbh��:t^E^���Nwm��^��?�����v�7�(��<�q�oZ�V�*H�G]����kD<jSu����7Wt�7��o�w{t����<��IE�M��& �*0"��`��������s����B�[n��){���;��H���O�/���tC�l��c��eltVp��V���/�>D$/xL��57�C}�],�����q�S	���{�u���K�oBZ��-yo�}�[��������n������YE(�������f[t���*8}����[�CQ�����T���jx$R��7�`�E)�(�7���tl���H�
��+�b����*O��H�y����pi�A�W�
"isB����g��]#Q�.����x����C�QD�C�j>>���@B�Y�Yf��D
�����}�l�b���q�=0�#�!'$|����U�|��'��a��n���e>6�6��K���U'��\�K'�R����l���y#z�
�z�EH� ��N���qz����t����aC�{���Ni
��q����`zH�%�CoG�����O�hb����}���z�R�<�6��Z�-�lDP�B�N:{p�k��������C���')-HS$@����Z���6��mKz��;hmA�����������1jm@��ai���(�
C\Yo3�!������qcZ���W��8��^��&�"�����+�����J�oS���J��*���^j���6Q�0S�(n��Y����K432g�t��J�y#�*2�f�Te?Y����N���bN�)"��"TY���m��A����zol�wr�UP��������t�h�����9�x=�+2p3M��C��d������l���_�[u�z���"?��0_D��e�5��&|!�.�xZ�N
I��#��"7�Wj�"��[{Zu��H�����N�t�������VbsER
}D���k����>�P��\������:���y���'d7���Oh?��+�na�r���JF�w�B�5���[��-A������4�'Dg��%��*�fQMnA=w,��U��
�����,�u���rT��z~]�p�/��C���H�E�7���u���J�������$�}���O,�>s��'}������\�����g.���B���2�UH����-^V��#�]�h�yn�^W���jt���F)]�t�4H�+����x�����*^�t������?����R_�?Nj]��_�W���H�����/+5�������������h�>�����sq��%����,&�rW��o��������_���=�����l�Q��C����$���u
d/�j�
}���b���Ed��=��U�d�qc�c���@������x�V�sa������I��t8P������ 2Y������B����Js=�6�~�,"�Y?v>"�x���8x���pK�-0�Grd����4&��q���mg��"��o���}������#��@B��}
@����t[���#Y:��"�!�/���w]�dq�)N�40���[�#S5/h=h�)��'TjyPa�yR��*��+�8�i��-+1���#�����@��������XC9���,Y�]pzvo�{�l������"�+����E��~W�"�������(h�9n�a��A�8����� ��-4��"oRkP���Gy��������_���p�o@�
���,yhV��#��X�@��Z��i���d��$Y�u�t|�������q��]93���o0��n� j��M�2��6ITI?5����[�'��o2�v��=[��@���kHW{(��$���n���������S�R��M��2��&���g'$���/��� k��o�������^�.%���8����}�:�
�i���E�u]�|���L�c��f�"�;���:�Z�Lv�}���(�����U)���<Xu����������A>����-uTE]��_vx�G_OL0~^L������&����P�K��G�i'�SA��>��/��w��M��r�������D�
9�+�euoG���C��������B��-���zJ��:MbF(��*��ij���������D�7'e����6@����,��
f�U��;V�O=����$���YXt��s�+��d����k�)t������h� �qz����������P���E�h�[^����,~:M@� �9I����q��@��Nce��H�XP����[��������W��������M��$� �
�J��u�{�����P�<rj���w1)�������e.������f������BV%�"��oG��\�;���57$��_�;!i�W!��BDsU���\��w�@l�P�=��L�1��� ��=��~I������K�����
� �>���g���S�C���	���3k���v�b���w��)��
Y��4���'��"%�c�r��1�K����e�������F���r�5q����_B��0���uG6kC����2����91)���J:�b�n EoE��4�.�h���? '��-��t_�DAM��K��a��������^�����,��[,�W���[�G���`����c���n�!��|���|����!���� �J�.cm1���7�1nvo���6��P?.�"UT
{d���0CR��X���k���I��-b�4��e	3����<�f�������c�>�{��@���	��SC�\�����{���d%��W�(�"�M�1��6�~~�\���i�V��2���X�8#b�YQ��W):�[U�>����{��8`���6Z�m���ka��bR����/e�4euS+:���|E.�G����;4#���XT������T��������`�OI�%��GY�������|������:��� ��C������o�69w�"��G:wP���5z�]
{��������|�4�t��Z�GSY�#ouse�9��-�.P�(��og����Y4��h�L��Sv5ex	��U�2�#����2/�^��cS	%��nM�����;�/�f
n��\B!�����`���~���!�����	-2u�	�V�aN����j�Z�o_'�Emr������)���PU)�%�����A�vPt��|z��6�C�{S&����Je�%���]Q�E�v,E	�R-�}6��w��L���c�]����Zyy�#C����#��a�f*�(s��Tm�-�����|j��U) ����=��q[�B������Rq$��/���0�����*^Av�����Y���T��5�@���r�_�][y�����u��>U���x4���U�_B�B��8*�_E99�D9�v������9A67��vE�i���AB�������A���n�c�=��=�^;�gz;a]�*��a5��3�h�]�7t���[�������X����}�
y������i�y��~s�S��J?���n�T����f	,3�h:Q7������>:�mf�9l��I����k��f���Yfg��	v�o�*�nC7}JO��)����E�'�L�����3~6�m1M�l&Ko1��XM��M��}}B�
�ik����$YB�����v�MR=�W�4�������4]�d���s�|��9��������l����;�nja0��	J��a��}:�[�������T�����f�p��n����@���y�l�@
K&.w5�$�5��-���x�y]&lrHHs�������aS?g$A�6�����m����~~[=�!-Ps&J�29������V��l�e<!KS���mVN"�������m���.�?{[���oZ��<V��zrU�H +x�8������Y��
8dp�sDa��������g���$��D\^�!����
�P��G)�u��X(4E�ZY�I�H��}�[q��M Y�N��Z����C��[��)�=� ������b���?��-(����o��R!��k�NT>��}x�v�
4p��swl5�D�s��[��r�9�����i0x&�0�`:M��%/$�Xc0j"�:�O{3hM����7��f"���4�`�p*�	�����qj��KF�|J�C��`
����R�?�_HH���T�
��������_h=�ld}��\ q��~��mlC�����J\���nlS�72�4C�{���m�������g2��"��&/��h,[�Kl>���~���\��B����\>��+�j�Y)��|���O!A�Q��zi�(�k-�<{(�}��|����Jh�:��?�����^V�d6������,�a?/"�s��!"��.�|*��@RU���oE_�j��������7��z�mcS��&�.�yA��X���ZE"���2�#��$j��MX���Mhb����t3�������:���H0���s8�?w�!�c8�B�#�1���1R`(��n��h}M_b�$�^d�F}��Z�p����,yLW��>���?�i������GW���9X����vM��f������g�z��-��n2���=
8>���/�����]������\�
�h�M��B��%?6/�?b7V��P]F���uh�BQ98].��"���5w/���S'���O�(��ut�jE����_����P4��-/����;�����V��������z���5]/�@�M�j�����D�|������Qb���s�W��9z-�u��*7��O��u��RB(2<1;��"N�/ Ge
.C�����Z��t���$�^�	�7���c7C�����-'~���w�W�d$��#�`z���vA�D���-��\��f�����U�����L����}��r&����	:���/�p�a����~�4����?�S��k@3!�a-�q�<'6+����:*Z��as�t>D��
2/�8lbL������	5��}�Q;���b����X;
���kDe������9��V�~�G ����&�Z��8�����O>�5?5�9�lm�
- �@q.�(�vtq]��Ep�s��qDq��B�F`z�k�b�+�u)}��/���
��z������H���D�R������:$�
�Z@_W�k����'���Z�x�����rAKyl����������R��4s�7���{�WLH^Q�+�
@s����n="��8.����*��;����]���;�UPA��L�&�L�����mZ�6�p������2����h��u����j)�/w���q��W*o6y��(?h&b�TiW�|����UZ[��ol��n���q��g��{����lur'��W����i]O����S����4��c���a�J\���
����y�
����PI��(�9������z#����(=�S]�����)��z;Le]�>����J��s��������by
$��3	2���t$�
��C�.�k�C��h�H�i$��e��]��Ty���Huc@���}�+,im�x��]����d�'V����;�c�|��������<���I���AI��_{���c�����Y���7=�$y]N=6��U�^���������	o�yp����K���*�p�jM*L@�e���/�������H�����hoN7.�����x��YB��Q��t�]��<��b���8��v�sS���M�t�e��0U����H������J�n���L��G����� �21���s-N���<`��s_ N(lF�I`>�%�����
o�
[nW	��,��	���D�Z�����_�{3�������h�*p��������Ol�����<���?���
��_U�Q���$����3�lz���714[V�J��{�DYt�%T��t�1�"�9q��~W�X�c�7!}�l%|�����/�l���M>�w.Z���?v��o�@b�s -�jE7�sDbF�D����L3����G������2��b���4d�[���� ���>������/�t'H�xLef�GU,I������+���.��C{� 7����8?O	"�rA<���$��%]Vkx���~�����
����B"�W���L��-��f��6%y=j��Pd�;�^8��������x�,���x-	��Y����Wku��_U�9����y}������r���\LpD��p�i����B������.��0��m�x�zV�ZN=���"Q�S-��q�P���'�s��@-��1��������������,�TU:K���w%�
P��4<Z�����?�����#���#��&b���}���D�L�v�-����:S�x���q��V=#��~��F����u�&���W��RI)��2g�3KeqT�[��tqN!��5�d���V� ����[N�?q��^8��oRM[����$?2���x�/&#�7�_�l<�I~|�;K�i�4b�!i�'�q�i���� �$�o�2Yg�7+��b(����������^W���K�g����!��[]���n�����D�����|1���x�#~>��OX���`;������Th���}r9G�t�� ���|[�R�����%�n�����H%VU�Hf��1��� .��������;�*��i�E��n��#��t�����}0��I\��%���[�#m���E�ahM���(��!���5R�K�Z���������x��w!^�Z4U]0��L�i������z�A���%-����zr�)���*��>,��/:�������m:H���HN��,�%��Q�kG������G?�E��x��B���B�:.$���U�N�����m��>�/'��Bi�	i�	��v��?�{Y"����E�ZX�&fr�hNe�������RS�.����UD����OK�*-���?��<�%��+A<��$�����3h�0?����}��r�z�e�F�=����+����]�A��T	��y'��G�
����D�c��
�H$L�d�uj�8����u��MU��� ����TU��r,��:q��5J��?*���&��>����>�O�g��@���M�������ft^��"F6uAY->z9m&���[�(�u>���S���Mh�c~�R����Y^�\^�����Q�=[���<�GJ.}@_�!�������D�����\����f���q�oZ@2G��e~��E����1�j�d��S�u�&v���B�����`���6V�,����	��|��9��Yo^��)y��elX���<
C;Rxd�e9�QU�+>v��hZ���k�r�`��Hvhb�Z������H�w��q1��D�,���D��C��,����������z�l���UQ�i�B�D�L��g]+������(����� �k?�O*�W���MNQ�,��]�%���B�\�K��w��������a4H]���Lr�i�P��>iCb�,���%����5�q�B?tb<��(���(J�sX�9�O�q6�	kU�<H�}��+b3q6�UGY^�
��'M	��1����E�Q�>��j�����e1TKQ��h��}s��>�2��e(���I�������"4�SA�����vKY�b���F�����~b��xA�`=����(��qC��w�q� �Er_e���5�|���]��%�P@
��Xtw�b]>t'_ �N�_!o`���I�O�a�_���bjk���� M{!������b��+��,�`5{1C�d�P�;��F��fJ�t��i�N��;�Zpb�����'2g�\��t�&vN*�5Z�97�.?��kg�d�7<�c
��$r��d�Y��56�
+�D��?p)Q�>Y�����py��:�_5��s�<6��(s���� c�������V���Sc���
�k��]�I��4�W\��A���������ol����F%�Ps,18�U�7�as0Ag4��(����5*S��`V����N�2x\����M���Ce�����K��'���f�3�Xw�J�ID���L_�}`)X�y�����X{���d���:KZf�`��9L����8`���p�Q������e
D7�u�����c���Qx����x�c�������,oH����c�&���	+d+I\��]��X�'��/��&6�d��]������"�F&it�R���J��}�E�?�8��������"��0�/�,
�����ti[]��P���fA|v�;$�����K��#/�����}�����ygX�A���,���}�c��v��
�Exw���f������,�e6M8[��y��� W��v�}I@�s[)���G�����-{x�qGLD����Nt]V�������n�4���W
��0". T�����|D�;~f�v���6C����<��W��w�0�=V�D���$�f(A��vq���R��Kj�!I"��D
��6��^��E���Ls��R ��[���6M^��W�����a��v=��7��l��t��S�$6������K�$��y�������P� ��
�!�E�(l���1�OMQ�n��MF�(~*88l��v8�Xt5[��@A4F�S�������<!9J���h;h�5����sn"&n����+@��
����76��b��,���f��J�����������D��d��2�:��<��s����y�,������.��Des���IA��|�s�8t5�w�P��K�HX������-���wM�?�w�6����������?�������_�[�����5������\�d�����!��3�b��1��C�����M�k	Pe�����P��(��d]����<Cs�����<��-y��	���Fk��L3$"{w�&Rk�K�H8���Bv�e�E�Y�@�e<x�3�E /$���]��8��(����u<������6���?2�Ur����J�at���������D"��g.�\\v�%chN���'��h~r�nw���oEQf<���+]�5Y��Z��s�f��H�^|eU�������9�|���L�TP"�/ki�����/D�2CUp�!��>����8���t��4��\h-�<i���h�q�A==VZ�<Vi~��k�`���dF�3��.	���fW[��Ed}��v��72? �SP`�di��v��m�B%i��DZTP��)
����!����q����S����ia��
fO�"E{ZH?���X�fM+Z�F������fL������c�hJ+Z@k7S
��HE��J�sZ���@9�'����hG+Z�w��bJ(�L�����>&R��������=�o`��`���bQ2�-��������������hc�uS�|���c$SZ��%��t}�];�]��l�Q�P%d��N�SQ�aOOX�hO+��
�7R�g�~��iER
���WT���y1g��1�dR+j���I=7��u�Z�����Pm�nQmxjQu���>�!�M}�T��k+mj�e����+;��'�E�(Z�s�t�-X���2�C����4y�$�e-�)-H�"�����~����"C��j�S���iA��jni���iA�1�����t+d0�U��i&�O������QPkZ�l�=�`N����[�����V�O8n0kZP�iO��6���������zINf�7��	I���s GuEkZP���`Mq�^��i^�`MOu�5jNE����[�D��.5C�k,N�� ���^������U��rO���5c��� �n��:��E��
��hE�L��.y$+*$Q�QX����e8�����v�Td��{>���]  ��J��77���5��I��'Y�k��>����d�f���S�y���Y*��x����L�M�?�>��Wa��6�JH���'�C�*a�V��w���E��"u?6��k��F������:�����|V��P�`�~�L�|���1)��n�H�������1�0����������;����g�D	�Js������p�gER��Ks0����8"�Zg���S�U�d��#�'��f�����E_��IJ�CG����;�����i��F�c�r������0>���t�#�?������,L�����n���Esu��s���N����������Mj��;!������.]�P�����zL���?+N�em�y49h&���c��|e�S����Yf���D����5��hO
�U�)_]��n[lc�[
��*^Z�4+�:���._�DR���e��i]y���/z������12a!������d��Q�����`���=�q�
9���P�eI������&�KH��i,I�����_W)����Y~��!^��3�M�M��9�M����a5��b�"��InES���&5.H����P�u�0��(������M�9���.Z��Q?����>��/j�&��0����A��z�T��0_�Qf$U���Z$�?��( �0{�$B@�Yx��otx��o-Y)�|�������������>o����#�=����i���	�!4����P��3�?qQ�����o#������dqdH;K�P#�y[��D(��_����j�r���"�"��-p��.���,�@��=���{���
�����8#���o�sR��7(��'�i@|��������X\tGv���	k��L��{�L�S���~��3���e�'aD��3P��n��|t ��Q(���\��{���5�R�$_�
84�,�[EK��`,g/�<���
j�CV-8��"����������y1�����7��b��B
?��u��G,���>�|��T���v
H�-���:`
�H�����n"��'.��!3����}��R{���(�q�n/$���2�|6���DA�U�nx��R�'$fe{2�������Df��n-�[dw|����&���{ew,h5=�;@,S2R2�s�� �S�`&GR�����U����:r;6�}^���!��:8��"��L�%K�H��.�����A6#c�&�����@�QE���r,�����+ZT�o�>a������������W6 ���hj����_H��rz��I���,i��Nj�`����S����e�s�,Y��Lu��4��S=��a�^���q�&(�o�4d�E��l��S���7����}���	�Z!-����kn��������g�xl�c�VA(���}��rb�r����#��&:	�Y<����.�=�x�M}r�e����v�;�/>���,*Z�|��MN`Ek-������c���J����%�u�F^+�b#�i.�dOG��Q���_�LEeJ��9[�~� be*���'���4y�����}%Kf�V����B'L�-��U.��o�*3�����Q��������@�]�C�h��L�����/������Dg��d���/#�V���a�M[O�3��~+i��-�T�_�&�#Y����H�,����T�^Hl���[[�y�-�'�o��9r���������m��������o
xx]�Y7r0��6����0xzn]����B�������\s���B�������~L�4W�SWg�Jp�2d*�H����-�j3�O���(�."V�:��h*��qTP��3Z�����4�����K�/�rVV�C'�<���vM��$�����C
�H9h��N�jb~��$��FP��l�t,�sv,�1�����<J�4��
��7}y-�������T��WxR&:5u����Y��E-�LAM���������D�Y.�^;,srkU�IOqX���jp�\���.�a��W�����d���=8��d�H�|�<��t&mX�8�5�;�\}j_z��*DTJg��E
��8M�l���te������$bE����GM7!�j!A� a��5����u�F��-�@���Dv�B~�A_fqo���,g���V�7u�W}�xp"Hso�N�{��MD:'�d]�*�}8��]>���/���&5�K<'��8^Uw�|� ��"=
.v�j�2Y�M_�����~TL!K���H����f�8J��-b�C��cY�'�/��,�]�����"��U��\;.f3
��d6k������7�z��tT�B�N���d��G6�d�(n|�=�w>o���L����������P���d�����Rdz�O:x�DU����������p����;x��1BL���80o���@�i1�4�'�D�e7��b�g��AD
M9����A���'$A�8��y���d"#�y�����������H���.�����lhY�:f�,��lD�[�/`��������L�B+/��~���><��]�vj��}���gl>]���N�++�	yti���a��t���Q����� +�w��R'{��Ne������_����	�6�k����mOw�]sj��2�%�2��x{���+�����V��A��}&K��>��-���e$V�	�3�T��ML#�G&_(������kZ����z�k�h�\(��=0����w�W��VN,hU�<E��R�1�Q�o�UR0�����������t�e�F4�����B��t����?�$�H�:mh����`��F���G�	�0�f$m� m����B18)I���]
��-h=��7�,��YC��	-�g����i`/�/]��_����>��+Z�D�
�eL?N�mL_���E��#�1�x�t�!�Z��u�����}������~�e���+��L���o�;��gf2&��r�6j������g �Uo�1o��mL�7��]���W�����[��q}�����?���R�v\>�V���ll�@���D��H6\�;�V0e��q}!�Iyp\��h�]3�f"��'��V&��=P
��/M�o?�B�8� ���I�8/s.+��������a�K1���8\\���s��"��#_��
���"��f����;_����A8\1^_+��u���I�EL��|}+�gO�g/�G�>��-��p}{R�A���|����#]��r�H�1^����^��~!��#�/D�~Q{)���k�u�1\���S��+]�|��Q�:�p]��_���t]�:�p=����?r��Z���x�b�>R������������:�p��:�p=�����r��Z����y����G�NGj=�u��vC���������'�1j�������:���O�����v)��Y����g���j����U>�D��_7�.�Y7p���|}���
�.���
�.��w�~���
�.���
�.���
�.��[�^*�����x}���^�R�y7���]�n �}�~���
�.��G�?�����{�>S�z7���_�!�����_qC������'7D���
��?�!z�On�^���������?�!v�n�^���������?�!��G7D���
��rC������'7D���
���
QC�b���~��������]��0���b�@vY��v?@�iT:ii#ur��BU��g����4W56��7=lY�(����{��������n����������nH�=[�pC�����\������W��pC��{�?����c.�;�
��g�#���{-������s��4�STBNN���!��t��L�C�5�����,~E�D��*�1���H�D��t�h���JdqV��S^�QA��Hr`��cg���"MJ�����o��)�J.}��G����������������YY����D�Q2z$Q��j�Q��Z�:�e����QC�x���H����-�(!�_��?_� ���g3Ci'T�*�h�i3RY�p����p=u�s��5�N�����Qc�|��rC>�x3��w|5���TC�y��)���H+��'��9���K3���Ce�N�Y,g�,H�a����gw�C���W*���g�,H5�@��i��^�L�|A�S�E��D-�j��uv��������/Xa7���DDF��U�;x|7D��%�>p�{P��$Y���X�����dt����9���d�F��<Ep����f��0�R,�&�eB�������Y��Df�N
r���OnVY������1�D�FV�C	T�	h����ff���+����a�a��rk
6�vf�����D�����*-2N�i�t�:�d��u��7�=�Z#���	�6�_l5��NHw	��I��7�����hl^r��������H���2z�&*���fj%O���2�@Z�|���������A����c�G�j&^#'���FN���2(�����H�`���'�@�^�?��A�*c����s'�����c6��k�	�V��F4�������<��];��/�J#�Y��
����~1��L�N���T��:'Te��tlL#`��f��V���G�]��Z6^��0F�{�rt�e�
 j�O��>����i\�?#���{�� �(��_�R�Z����"��n��;]�c����W�:�������bA��/�/��J������'�_#z�n]0������tAT����=�L����j
�x�����Y��+`��,]�=��$��*�����#<Nlj�����	��{nPm^�y0������	�#���,D��p�s����S��Z0�������?6[���b��}��+
0P��f�u@j+���9\F���e��gE��z�	5d<�}|�(�o���9Vw.��\�r���iu�_C

�� �yvn�
�&Ou�=p>�>�[dk;�x�[���S~6���@Z�|	+9;�L��:����q����9��i�
���_��8�\�\������"��*c���2*FQ,q���N�'Y72��$�����=vY�|�9<��3��Oh=��_X����d�#��O��������H��"��q�������1����b����f6�Y��-F2��ecJA> j�	h���x��;���t|I�mz�S� �3f�Y}����I�2��Y���f���/�����|V�^��V�	w������(0�3��`����&Jy\�T����(=S{�/����\��'������'S����t�4w�Q���"e���s�2qwP��y+g���u����|���\��\.}��r��r
[�|y�dt"��M[o.��{��[R���Mo�~PF4������!�q�},�E�h�}��,�>o�W`��0j�)��q�B��B�F�:��B�i���"��y�����*B'���B������"���wr��Jm<<�_�*^��)�J��|���p!�e��+�FF�����S��Kq]
�2N(�����Q�LP��&�	lf0^?LHv� ��r~�$���Xid�o�cq���+�-#!��J����9N��Z0Dj�Q:��� ���Y�MA(��1?��]>7��n�C-X��ns���{�������u�=6!��I�������d+Z-�YI��k��9X�qGZk+3j��%�W�����e�O�
3!������\l���>�����Xuv�l���b����/[$���V
�`�������L�}~V��A?��A�`�C��+����\6}~y
�D��Z�����o<vA	t_l@�q�����4H|
Dd�}]�2�YZ#_��.-��7e�-rA�_,
%9,x$�a#��B����)�1
������1�V�Z�bo���$�2`��]�gQ��� lM�����m
�}=��{R}M���o���K���vG�&��s>�m�3�djd\��n�Q�Y$���{�=�e��Q�������
����@�A�z]T0�3��Q��';��\�%��ZCuY����kM�k�����.��x��X�P����;���z�����93jJ�d����
�X��	�Jx���v����$"K5��a�_�hQ����4XJ8dN��_���y]��Z!���O������s�N��:�l��2p�>*����<qN[r��=���4_�F4���l�5��G�-o~�V��t"3I��Pv����)4��>�@=�m�
��im�=�5W+����8S�}��{LD�icAt�R���9D-�]��:��lQ��$�����R
��DKvS��::v���i�{�Y��t�_-H������z��0%���HG,���i4����6#���?0:���*K�� U%l;���;�����JJz`&]����E���V���_�����U���^%����U���Q�������%�.��,{���������p���	�d<�w�l�tm/�l���|�(�<�R�'h����}AM����%3np&]o��a�?3�R��
*F}A���/n�(1#6��&]N��n�?��f}Q<�����d|�)�
���.������v!6���D������j�?3R�/L3�d�$�|Z�vU2<�l�����0�I6�1�,kF4�g���r�IC�q^�}ARn���{����)pO��(��3jh��
�.-���}"r4P��:��B�aq�jt�a��=��������Y��/j���W���;0w�O�&$�=)�v�%��
��O����$�a����*!t6�Y��w3�����|�Md�]v.��=Ink*=-�����kz�{�M�Dsm8i�����:i�J�,�JnaC�L���"����N�	������������~�6�.@;��
��r���� ���&���
�*� ���nn��ga���_��Si����5Te��~CN���`�����wt�4�nW�������nv�dPF�>��zp�D�����(����T	����*����A3�>+��U��\������J�P�D�'����fR��n3B�C�V.`�]����'_�T�
~������K�F��|s���XD-���}������
.D�Mn
X��{��
P�Y�bc�aO������0$����m���n�������%�e���~��7/@���i���?����N�Y�����vv�KX�����}��F%���a�O�������~O��>S��\���l;�g�\�M���s��*mO��������LC�����7~�6��,���1��<���'.�����=q!���~�A�wh���Q��gE_s��]7Vlr_����8x��j3����9:��0��1�����C5���`&����%���������8��<�/��m�q<�S$�<L9��H*����f����N�$��#�����/y?���O2���<�w���$���y��O7������V��z��n�����0l��J6_�Y:_���|eF���W�����BD�P�<����T�c/��t��g+3j��l�9l���D�p�\,{������=�)����k�IK�c����`����e\��MH��������4�]��da�x����	p����s��3zW�W�����P���H�KO���>R���`O��� ^E*oG@��l�� ���W!���@�:S��>���,�-��0���������R$����� R���@����{�E�<�7���xno�*���"U��*b����^��c��#E�f$�'u��e��U�eD���������>[��wG���H{���qQG��������
���jAx�+>�6�Bx�h�MJ�}�)�G�H��� �s�	� ��Z�O�&��-��:������Gi���z�V���Gi��X~�bL�0v�rA����En�`a�$���]6����S��yP����$J�e�h�}z,��c9�{�aMg��[�k�x����]N7r��D�.���x�}����eE�o�R�������,}��6^��\�7����x��9y�0Y�oQ����������s��n�[Y���}�*�i��%�6�18������z�����>��*�Q�c���o�f1���E�@�f�J*@�n���h��P�(�)��V.p�D��-�*��f��J�|&E�h�.�Z4�(E����Z��J�/�!� ��h�@�K_����$�����m��-:���W�����I*��CtS�-
���OA+����J[���,��Q�0���h���x���ql/k��q=��Qt��f�o�hoW��ZE-
��mq����g"�`�=��������������B�j�R�"�-��W_���v��q�.�`�����{"�b�^Y��@o��P�4����0q��HD����u������jOQp��"����h���%�%��\�JDyS���Z�x��;�F���|m���i�|����p����M(�8C���%>��������G�_����)��@��u��u?��3A�pj��c�0=�p�E_jB��VE8�On���t	=~�^�g������Y������zcK�}��V$��h�ZV�x��7�����������~�4Z"�=
��C�<��	��g��	��g����z�n����v����
�	����$!�}��Q&��S�H�8{x�v�|D�E!�Z�{��iP�~h��v
��K_'�<#a��������f5#�}�$��H��d3�FriU��]w�6��2�
p��j���g88�0��)yl��v�����h�/ <s�,��Nz��V��E����t�&���-:r�etso<�	E�(��o"'I�5�H������t�w*���F�jK��h�������|����o��������c�#��*�2Z���*|�De�bBE<|y�~���P.���GA��������Y���Y��)d���D�D;���o�*�878�ebW�T �����)3���fB�������H�#�3��XNNB�?D����G5��a������m��~�m��f��im[H��+�s�	8,z����$�!���y��4���D�D�������{�	�st��u���� Z<�BC�B/>����������1�����|���-(�	���2P[��M�7���US���-�-bh&�|��w���&�4!��f�'(�\V����q\�t��\�����0ToK@BY��l������"�i��I{?3����q����eU��f��@��EM����UC�m"!b�Gu��8?�C"z��	����v���{�?�6U�CI+��
���Vz-U���H_
a`9��[Z�m�b	HE�#��a�#_�K@�%�m����q�7��UP3��*�HU����0��r���u���yln
W���t�7=�?��Q��\����)����@�gK@3jICuh�_��I��F��W����~m�D��#�e������#�C�w��k�
jV��D�q���}�@ ��		��N��M7�	Z�����Xxbj�!�s��p�!W^�l
���fF�/�;��-�PH�(.AW���yS�&"��k6_Q�s�D�&@X�	��������������y`�o"E���
�}�=��q8�9�X\��"%���<d��s�����������uA	 ����
�U���l�������gE��U����.":��� ��f��e�=��F��&�x�������N������ip��	4V��������8���-�������3��cgT�;AT���a')N�,��j@��2�6:�4(�V/�U5�����jB7h����`�iA	f'$xaH���Ki��<���7!��v&p�mq��r���Z����d���>�'��^P�dhP�/��]��������A2F�		���p|>wzG�x�c�J�>�KhxS`c��u���e� Q�����\\�'~X}�
^�U�`�L�<{��~b��P�nb��R�d��Tr�Z������n���_��(i2�.z����N�'�zw�BUO��X�j�������|�U��"%X�+�>�\���F��c#�}�� 8FJ������&$��9��2bg���ga�s��y�A����"�}����������=W��E����@'C]��B��.5wsC5��gE�/4�:p�|�h��3#��������T6�����U����T��y����PO8�����Vf���<n�u����9�@b|��Y�O�����nS�?>gY��6C�Bv����e�?6E�
�,�fR�pK(�V>3J2���)Bw��� xwR��X�#����
Y�xS=l�3�?>�L���D:�V�=���N3���������K`s�z���pj����K$�����+	3*��8��������a���U'Xkn�$�H���VE�����e���$�T����<������6���~��M����>�������MK���T����(�^�������!�?�}8i�A�u������E���8�t&1��On��1��F���-����<�?��!=�?���|�}e�[f�Q�+��������5���:YPsX�D>}P��N���7!�>d����=�	E�?��65D�>D{a���]�}�
*�v�.�ixmF�~�:������gdcw������^&r�~--��V���ga�wz���Q3OBM�9��5��x74��t��m��)�ik��{A�@��l��bf����,�f��,�P-��c��?�ia+�;�Z�� <����������K+t�Sh'c�"{�p0?]������&vU���LF��"m�+�.��^F%*���=����������.�������Ic�{�
R�<77�.H��x���-��K�N	��S��f)�������������n+��Y��
���*�g�d��t&(����yZ�4,����/n����[����A��3���&���:������)�5@�,=���\��#8��g!���b������.��u��{����$tb��<Ua
tW�JB�|I�����	gJ|r�m=:f���r�e��-�3I�����4~b�]��<�<������=�<!�!�!7q!tU��i8��_��E�=T*�J��^����S��U���EnE�fq���'0��	RUF$��DcG�N��O"�c+���DaDV-��B0%{*��A�k��L���7G:;��Em"����9ND����u�U��G�X�6mO������A�[4���%E6����bA	����U��I���L= �*u�f�
m��L+�J�O?����' `�Dw�o3�	��k!��:19��1
7S��������,���������?�5��o+�oJ������W�L
p������-i>���G�,�AG����wa��U���{x�	��&1�^?����s^�V��f+q��s2��]t]����{FH����Q��"���N�WF�&4�����	%p�����>����������8;�M�&�5�>�����v�w� 	0���9)���N�7�hL&<���$��7���8��3#�x�������|����nS���������N(�Sf{-�tf�9��-7����{��I�������@k��4����S�=Q��NDd���O�q[2�`J�a�b{����w��#��V�		P�0�
�[�
D��r7��M��V7c:�~��y��6��iI��
-��p�a�t���dIg$u���6q��*MLA��c��e�t"�~O��xb
�n��-�� w0,)AO#�ga����g�tA
%<�%���lIg�5a�ms=L��T_\�E��-����L�����w���[��6���-�c��|B�Yw2�c�7e�q-R���:MVf5�����&�(�7��Y}B6�29fP���	�*M�r�V&��Hl
����,����G����@+2��8g�p��g!>��s�s>1����O!g�W�Y�Lk�!����,*ds�]�,*��R��,� fQ�	+O&>!��,�����7��4�2ds(S�E�*3������9��r����Pr���:�*4�����IT����}	��Gm����#�2���<�������[�C�9��S�|~du�YQ�"��H�p����C�Z���gAi���IU9�a	l%"�����o�E$e���I9�,J�f��wat����{Ol�(����1c��e���Pa"l
ed�H�H��Hp)��PD>���Y@	F��ZM��BR	��dc���_���moD����O�T��4�`��	��g����c����eN�8�����16yR��	�	v�:��\�Q���#	a%Wb�&/���vi���i�B=��
0)p�5�Y��E��)�$w�(�_�l�T^f66�s(^s��������y"�3�Fw�iZ��H�������I����Z����	���p�~�e��_:�8{��>9�K�G�?ym��3�KS�f���k��Ne1�5#��T��!���me�����b��{y��=�?���Xo���kD~0]�����/�
H��f��N$�r��2��m��I&���[���;�;���3��>&�m�2>t6p��Vi��<��Sr@&O@���C=���9�2�|h5�.��7��L�������Uoz[���E.��)���a�K��w��KV�*x����+g3�y�^��yj3�m?gd
N_l�6�q���u�������L�3�����&�8,���X��G�e`s3~�d�����gFP��aUi�%	>+j��_o��:��H����*�P�06�+�E�v�x������.^f�2j"pWS��yZ(H����\�N���	T��1��v���n�y���o�y��������D�/�y���i7QL������I��4g�s��{?|�������@��=\~�i6?���(�������QA`���5?��:'��7����,5i�MS�.��i�N�H9����G1�N�T}|m�So��G���|����l?�YXL��w�"���k'��m��&D��D�����*����O��!G}�[��R`W�Y�5Z[HK��-=HV��vB�h'�����N8Y���	��N[CL���7�a��Jb
��2���k���g�f��s����{��P&:�:���|�=\�PPI�e���\��N���D�Em��xFZ)2�N��U!��������4�e���3���{�����Z�����9���W��|�U�������1_����g�A.�	%`��U��gh����Dd�=�9�|}"�V�`c��p�*��"���������������z������8���x�t�/cY��ER\�O�i���f&�V�&b�Q��i=6��s�F�x�����1���O�miH^����D|�H�����F=e��j����q�N�d���P$�lS����c>yA�p������v���K�/�e��bP���������s+�5"�5h�� �C(prAl�H{����|���������Z���B����z��������oW�����]����C��tw��*��orZK�b���A������=�Q~�q����Y~��������Q~�;�o����V~�=�og���s����'��{����w����S��d����������}�_�Z>?K������n�]��G5�x���~����������������������?�K����4����)�ke�N�������������z��������"���������<�k��m���}������������?��Q��S�����b��V�����&#�%���:~ykaG!�5�s�����8����v�U�/M%0��|6�����B��4�Ry4J�sF$&q����D�7y�%f�q�OKLJs��2�KNn��g�9B����yh�����/�T_����QC��>�~6'3�;?�-�������C�O�J��'Q��8����J�6�;N��t&��?��t6��S�/	�SE�S:���7����M���|Br��ndg�P��F��L����jn`����H���_��F��&$i�n�1'�����W"��"���x�v�7����}	`K~�����W��I��j�NMJ�cB�~U��v��\��E\��j4!�Q��Z4���-�/2k0YMM�����|�kD��}������4�mFE���rW<������GE�c���]����@�H��\_���o��X^�[���`I-X�e�����&`_~�`�"��������\�%���k0s�������v`�d�/���Z��"�6B���L���	4������>=�h�h��>�����c2�*������3����mT�������
>Xt]Kr��q����}l;�
glH���@]��EL2��W�{�O[��s��'�hE�`�JN�{�		�(���b�f�������n��%���S
��|(���!���R3���|����81�9���Y�VN���8�tbyjFl�3����w��=���"�����	h�PSW9�Q���_���g�~���'D�y8��9�X�W���C�9�SB<�y�B���V2��a�gtY�Y�f���;�����l�j�u8X,�w4���9�x~A���?�Mt�����P�}�+�����v[2��J���q��k',*����C��p=�n���Z"2O����>�������omK�|�eH�4jN���pl5N6���E����j;�<N�)�F �:�����X���W��*���;�J���l��L��������~�5�$b������
]o0W���Usk����7��E����&0;��W���Z�8���������K��������/�����8����7�����<�!�H@�s.�m�5xH�~������$��x;���cEf�P\Z{�OA|,�����5/o�
$����1WJ"R���{��8�+&M�p�4�K��	��}f������c\<�����y�>�	&�8?-&f3�3��LJ�\4Q��	����B���n�������^Y�2X�e��������.n�vd�����`�����G����+j��-�Zp'&��x���:�P��H�E[�\�������R���M�e��������>Sp��K"~�s0fcOD�[^r�����6�/$���[d�e<O�,��e���E�c��{WQ)8��rA��	����1k����H��=b�������M`�S��S��u����!�uH�s��q���d�x��z<���0���Ps���?mFYVn��Z��	��,L�l����>b���3#�3��3��mg-�1#��{:�����>:��K��_���i�{�~�T��Dh��c�����<.?���|����{Dp��HA_��4"��Z�N�]�������y��9����;B�B������c���N�c9�b�������`�hz����*P�BI�����@�v0�o��x.��}|����ADFY|z����(��z��(�g��b<[��@��`%���Es��u�B���4S��c��Q%"�{�g�<#(�����fT��%����������h�4p[���&�����6*
�w��}Q��	���23�x"I�*�����y�-W�����%p`Z{�P�*A����t�>R�&"��	��mO�4xnu��		����{���L6X��T���K�Y������4�C%�J�H>�q�1PP�*;����x���j�d1�G�"9�U�@�G����H��6}_��Q���P�����Td�4!yx���G)L�&$�:�]���?��3��0��7���x3��]:���Q��M�z��Hh�0�{<�\�q�6���y��[�?{����X~:��J�_dB��9�S`r�Y�=)H~���@-_D�I��6jOH�(K��w�A�o��#���#���Sl;���+����I�,=��M^!�������
��x��m���w:d�����S��JD�+�_����x�7����[v���;�x�VV��Yy�������[}[�v3;Q���E����k��6z��p;��,H��q�U�6t���R���1�N�X��b�T���zR��W[\�v_��K�����N�VS*�5���mBz^��B���i�^g����z��t��7c;;sVL�)��'C���� g$��`l��|�(H�SKwXa��[	J�*Mv�Af��nUr=O�g����c,_��[e "2��fH@1����a�$�nF���e]_��}���ss2��CJZ #��;V�k�L�m�����*���UEk~�=�)-P�
ea]{z1��6#�3[-���'ai�*�W�4��������'O@l;�=���X�&t���Z��GrS�L x�
���b��I�����*qUX���0������a?IDe:��d�m�v��\<����T��jr�����P�*�~x�����SUf"�-��^��m���������=�%�������bIM�C2��R�5����d�[*d�#��6D-����� ��:�%��Z�m7���v*��4]�m�:Pv���
������J��A�ej|t� 5��1Y�)|��.f�I��%�cj������%�}P�a�R`���lc�K7�Q^�~R�@7�<�Gl���
jK���q� ���
|
���|c����f����h:������E_g�=m������DB�����l2� aIs$������wpW���R"��LE)�S�am2#t���V��|����7tg�����4�}�+1>_��V��J�h�Vl��;SU�x���t&h�((�K���!���)�����W@��I,?<�C/|�9��m�r\�O�$T�Y����J������z���e��W��
��/�.��X�A����=���z_����fF����cA|o�����mF*���Qd�@�I������M�/hb�tAn��@�~c�������Q��d���L����}Qy�O�1\�4�S���������+�W�����5c����Z�Y���=�<�V0�m����#�o���J��7-����X�!��?
p#���,������2�L\OO�dc�]�����c��KW� #o�[	�v�JT�vo|�,{���������!�qc����:����eEKE��T\L�"��{�$��i�����?�DZ���N�;G���x3����&M�o���S�c�H�����zpPg"����H�C^�?����	(��RmX�,L�)�!�z��5%=�K[�`��X��n�e�nr����KXw&�B�����@3b���<j�/U�N������o��jAr���0}�8fN���
�K~���7?D����-�'_���6����	��G8�C�o��6��\Yo�fL�,����bR}v�|Mj�J���O��Y�U^��O�%�?�����O,s������o�14�;#y��>�[i<eAlV��D��t�!j��X�Y,c��1�Z� �w)j�����R*��[ ������6h��/ ���*J[��U��Qv�~R#y����lViE�����5Y�s �mb�Td�E�����gD���XY7�+<[�7���3	�x^��j�g���R��/��	RR��z�����o�b�*}c���g�))v�-H�~��U�}����|Fr�����\.i)O3���������9�k!M���7h�7���+��h��Q��F|�E������;������A�����.����.
��EY�&{�xa7�(����}SI���,$����d���m=��4Ky�v����C�y�hv�&_�0��D
AZ*mJ��O!��MDJ��r��}q:,t�2��vd�X�~��������h�w��H��i��u���&�`��7!, 3��$d���p[)�73��I�Ht��@��v�Z��T+���.�\�����3�ElQ���R�mY��\f(�������A��6U\�b�����$��"�n3�����e�C��Z���4��}e-�.ZQ�<��i&Z��!�
�����e����������$���;��G�f��(�1�s��'t��`A�(l����������S9C?�����k!k��a'�N�)������0�"D���i����T�����9���u�/f.�HK��=/?��<�li
����l��*+�VH
"E���}�4|j�uN��_Ah��~�5�
4W�|��o���t��0,$5������/�����Pb�x��F�Q7H��B��]=�6�������|oS��_J3 ��O[�6�^e����������;����}�M&!3� j6L��"N����N�T�Be���� ?mA���&V�f��`g�IVj����V�R�����zvhO�I�%��P���XU1���]���5�**~!o���mF"#?�o`�����uq��c����GC�� ��r���������#)8�2���,$���8X\'����n]�{��Q�AG
��Q�(��t��gO$�;Wt\�6���c/���u�Z�cx���h�n�J=��eN���%����(
���TU�"�(^�������]�5��h_��zRb%�a��c|�$�k�'^�

*`pd�$��
tr���a<o�	>+R�p�Za��m2�j�����$���4G
����1gj�~&n�E������@�4�/6���%g�#Y������.L���!���`�xL�q�BD�7��%cq���qa�y��=���_G����0r�\=]Pr?3(}o��`�������9I���������m���Q�����s���	�#)gv4)�
��V.
�v���������r��&����nA	p������w>K�z��2{��f�3�bj�g�g�v�������G�^�^�^����V7{�vA��P���lk"'Z`��d*�6�i�|"u�������4H������R�"".����{SE�{�����<���ec*�f�v�m[�aK�!���L �u~q<�����|@���1�m�~��L��t�m��+�N�>�)���q��6\TA�x�Y�t+t�z�Y�M�y���(�O[P�=�����p�9.������%���!�'t9��I�K"\,����h3�-�x��p�+��R}���Z"���J+0�Yp��uQ���'PA�P����V����8{�^�8���E��v���gs�[X��'��x@���-H����c���L��O�c<�:>,��TY?+J��u�}�:���`[��nQ�(���A�^�����S�{��{
��W�U����za���y�����������9��_)�����:�90//a8��T�f��zz$"]�\{�����$�����4]t�8�\iJ����FF01����b���n���vG����q~D5��b39<�8��z$?�a�]�z���]�%�����=�~�7�."3��7E�pT��Ob��D�<
q�(��,�����0<������r��6W2	%8����g���k�/'@���?)��DP6���C p�!���6%dv������s��<�;|<>�j���8^��#|���� L���5	FU�J"���a:�e/�,��	
`�����ln�����r�~��G�����D-Xy"����
�������#��
R�����i��|�O����7��{�I�.�G3:`�v��D����mx���M
�����0|��1���TbBx���-��z����~t:����%�4�6��6x�W}1�=^���'c'��q)���F���F;>��L�����!������~�0B�1D�&��_�=�.&��������L�Z0!�������#� �S���AX��5�p���l���}��,��X��ZT"*s������i������$�M�N���kz{�����ifW���8R�iE��T	��Td,��U���Y���Y|���,N���&OI���z�nS���L"�j�M_��b��������l �4�W,���$W3YgD"c1{X�����
��Yh���`���r,��DY����D��-9W"�)��3_S�r�F�I�����_��"]t���)���23��-T�32�K�P�\�a�LD�����jik�)���m����a���Z�j���[E7B	]�{=-���~V��z<MX��><�1���;������
t��6�����]j�"�YP^N�E�v�����/�{YN�/��"=�%�����@S�a��B�L����!���C�O%�[Q�x?��mcS%�.oV�W�����Nj �]�����I1�]�Fc�~rG���Q�E�7g!;O?o+Kz���}�����B�����:��T�5��w�0w����2&�>��j�����7��\���6C��F5A�,�7�;<�}�����!��o>�X�-�@�lgw�z����M&:^k�������ZkB�6�J��	�������6��-���	��S��������\��I��{,&U����~��%V�����(��k��}@�D��|�����`�V�g��U�;�ot��V�z�l'�^�}{�Q�"�Xs3��]9�-��X���c&���7�����T��=!#hs�fb������SC��3���Z^P;�����U��������1M���~
��:U�C�JS���_>v���/�~yf��|���B��3����q�~�3h����EC�;�0����6+��H��� ��w�f���<M�c��I�h}w��L��U�g���� w+���F�n�}�2��Q75M �z��J;�Mi	aox����3��p<�.���)�Jv���E;�ca�B�ov��v-�+fH���V�V�m6_���}�E���n��&�=KG�����~���[AQ�_pU��l��#���z'BZ���XC���������I�
4��v"��7k�v3��TY�jT'gQ�T�'g��.���Z3�t���i=�_��T-��O�<�~�`��������|��O�
�csQF<�1=�_�q�)��s��H�����Y��C7��z����d��$v� ��%��������������������4T 9s2��J+�7���I������v[P���v���A��������L���A���X��b?���h�i�@�����gE�J�O�k��?��q"�+�H�#���%[���*_f�2���t�����i1u.�]�i:8������,��
[��>����JA�Kh�7��V�}�+���s82pX����`f�,���=��D�R�������|ZU��<�~i}W�(�"��&����E���������������v������_�3"�%sF�{�3"��������~��?~������������o�O�@�Lg~�!j:i���[�;�����b���J�;���}����.�s;k
�o����wE	��X�q�+��6#��{���M+�>+�� ���i
�y�&$@���<�?hY6��T�W�m�*J�YFY�A� �6i5�y^QO�%�-sd ��[w�|f�����DcO������O�_��Z��g+V "_�f*������u@s/-J���3�E���Hs�.����A�X2�������#D�~%L�9#��oU�]M���������"�j����	�T�
��uS]A�O�QA7��v��AU��b�2�������f"Z�U���uaI^���H�D!����z�p�>Sp>U�Q�F��/C-������$i���N�����<2G.�H��(�j�<�����P6�5��.���2(��%@Szass�����:�B�]��l�-�@�,_��b/Z1�@�`����CZ����fK��\1��������"�S���0;:4X�hA(�H�:5.����l,������������^*�tbY`OgM�s`��bm"!���k�lMg$@���*���5������dS�u�r53|g�u�0�5%2K6��bS'$�����q����������nA)F�"�����^6��U��V��
$��)����q6�@-�*�]3��ox>���:�6����a}�
��T��&jY��������,���32�N:/fUs��ZI�fS���0�$-[��l�H|C_l��4��y�����	Iza�ZUI7��i�$c3��U]�]���H<�C�W!�A�H���r�+���6ul:�L����0���4u��2���f)`R��f&�6'���^<V"�TSZ��%x
��9������BD1��X��dQS���5��kc���Tg=�_W'.b-|]�
��T���"�5M���	����4�i��&�d����������1�5��gk:#�sa���G����x*�[uR'u�Ht2��l���x��S(���-�����'M4;A���:j������V��1��]R�����z&"��i�nG�`�����R�*y�5��f���5��D��N��*���4�,cY�-�U��l���f��Dd�(b30,��DdsL�mJv�
�He�"�p@�Q+�I��'I���M�-�����q���xG�����OEM	F�]3��m���Um.��LB��xv���g[���������m�v��������P!��{AZ����C�'�mt�
h��k?�L����p��`��$���u��b%��1�s�H��.C��������G���3�'���)��QL��/&�I�-��$��?6I����5��`
�[1gl��U*����Z&n��"Kb7*H��������3[=$$��*XGK��H%S	Jg��zC����C���9l�����L���.a������l���8�3�a~����zW�bN������P��b"�)`!�J�����\����:i���������%HQ'q��C��E%}�f����h�I�����^0h"���������
5�j&;Or����H�@�$�E����L��9����n{*t!}R��B�������|N��E�]A��%��������4/���D���q�3���H���[��	iE�����4��4"�*�>S��I[n~��L�m�*pn�kn�K[r�e%g����Oi[���6C�Q�m��N����kC�/H��rYwJZA���J������2�Ei[Xz������Mik1���%����Y�����Ng)�3��0M8|U�2�����\vq!t4l2=��kc7
;�<������d�iVb�QQ���2�dln�C�|��{����f�?�
��B�-te��&�~��LG�M��pF�Y�2'�������X�t�9���w�l�?����"�?���uN��	������n�i���_�����b��<]���4�L�
?�4���)��Q�`����O$��K�}������p2oc:�n++ ���hnO�D3w���0yv@�T��f6�5���o���b7�D�%���M��e�z%
+����g�����}��}�^���.�����[[0W�������T��O�^d��O�
�Y4�6?����z���H�[Q�U�-�)���,��=aG:����g�g�������tc��s��qbA��p�
EiX� &�?I��Y*��ds��]
�d��"�T Yl'�I��Hz�J���/N�%_�L]?�Dd_����Av7#��	Y>�������L4noVP�J"�j�����Rf����,��84�r���d��1Pstl�K{���$���	��4����\�3�]<k���O��&$2�mQK��&�zB���j�b�x�O���������dUV���Qc�sC��:��9���G��eI��S�F[�H�3��Q�Q�������_�4�taw���z&��gEb���<��zc����w+��r��19X�v�6������U2�@$V��9XA��z}o
�+��4���h����%s�~�<jB��q7u�_���*'"����l�
����#������E�
i���]O����B�%����^�h"�d{}}S��FbI�(@&�����gF��4����$@W�B�W���'"w�b�F��
(����\y�:� �$�']d�=�
����?�p���}1���.���	dd<���q��f"�G�#�NQn�����EN���������wj6�=�1H��g!E�5��K�V'$�N�5���0���X����wO@c��A*S[����z�X|2�>��	�0�w�����9������RNB�&d��Vu��ZM���X�S�� 5�c�w��Vh��3k���TNL�*�"4��}�y�,H��V���++��Or�T�&T��\��'�������l�f?���<H��7��o�mI#�8q���� ���>O�-E[YX+�}m��+����|sL$�]�Hh4#��d�������T~l�{hiP�w&����7�u��	���{!����������Or�	�=$����T����$�����;���@<<6���i��� }�a�5�@��Z}zF�	�
-�!��$�����2�Uv�Q-�����G7W���
���ZRG���"��n��n.\/H��{�Pm�mj�i�$�I34y[s�xN��T�]er���<����6X�dB��������!���W��rD���,��d�&r�W'k�;P&*�j}�V�nHh�N�,��y���>#��aT�v�Wa%+H����A������?&���l�EGB����GS���$EAJS��3�gRddvS`[6���m/�[�n�����5gJ����9�z��<����
Rp���r"�Hs4z�(�%����G�3��F�<9���l@�f4��G����53����"StO�2�^��������x�K��3�v��� 3�>�:�,���d��C��b]U��f��>9�8Wha�Jg�'��7;!3���&r�7�' b� �8U=��������U�^��_�X�*jJh�WW�WY�`���1�vq}�E:��YH��
,`��.�6^�K��@D
�"���� �p}f����E�"%���@�VFR�18>�`6�d�����ozK����U���f��e�D�\��gOE�G���[z��y�n����e��������@>�95�����D]{����g����
���"6|��sy��m�r���d�,]��@O���%���������)-��SA�m��g��T�)�*�6�aJW���Olf!�r�L��|�bU@M���Q��l�6������@l�9*nB��H`�
�[|w�$�=��2����7�����'��E���q�d����� 	o&���d_�9�i���r#G�J��%m���e)��*_�J��"�kOuG�������E���	�aW��$��'D���zW��lr""���Cn�����L	E�MH�����q'A[�� �K+kn�����>��� Y4�c��e��W2z�.����BLG-7��F"����6��64��������y�����D��#]�M��W���G���+�]�q��;��YB��� ���X��[>D?��?�=cR[�Z���*�'N���).;8��D��_#x2������9�c���{�w��s�@��.P9_�O������.��(@�<��|��;���/O�@�|���.P�\�Ml�G�}�`�.���Z����[kr���.x���^p_�W�I���s���/8jUC����!���5�bh�3z�;���������[�����o��)��{�;��wdo��CL������|�\��mG���|E������/ar�bl�
�����W@�W�W19]��w���|]����n�G�_W�T������C����z�5��^M$�����'�E���HY��\�������^5��5�oU%M��0i�RFp�!��H�3� ���A����}���
^��F'��7�@��x�+|��>r��"]�CG+�>v��"_1W���G�:\�+�����i�u��+b�#F��Y��!�W�R��t�5�i"��\�8j��(R��t�>�[S����t�l��sl���k��sk���z5���95����4����4���y4���84����3����3���y3��_����|���\���<�������������7�����nL�=[�pc��y,
7��^��pc��y�7&����pc�����\������W�����+�]���|E}	���mInL�"�-��IW�Wq9������]�|�g�9�����e�� 
y���������7��my'$@��,�x��\��H�c������]X�YP�D��y�
^�QA�TK�����PE�9��'����7��\����w3�x�"j6+���O�yY:R���H;Jv�$"�\�e�Zv�u�V)�5D����������-�(��_��?_��l�}�����
��!��12����y<Z"=�u����5�N���f'���5���C�g2W������j�!����2�y��?FZ��?Id��]Yw�PA�&!�����/m����	8�67���.~Z�@r�%��>�hRM>Pz�Z��+�,_�g�����S�{!���}w��}��+������h�CCo�to��D-X�n]��
SI��o5~����dt��9h����U$���/`	P�J��b�G=jX��$���
';����X��b��p�{���dAv�S-�=y]md%:�@�.��j��L�>3�h��!v����0�S���a�3����g%Z�w��$����? -�Q�,�
���E���-����������f�a�5�������dYz������=Tp�J�L��9,Q�Y�v��e�
Mq�����<Y����}��K�B9�����A�j�9����������f���S�GG������H�`���v���Y��)�\�8�s�G�������c6��k�_�-���h�e�A'�IO��#��>z=^�F��"�)=��z�vw&j'��d*���r?��!�&O���H��f4$P'���(	H�l�~�a����/�����Q~R���	�?+i\�?#�O���(�v����*�.BK�)d.�BA��i���q�8��V��Z��������Rp�v7��{.S����C��
�e�p(�d�D�}��e�.�f��%�i =Y��R�J�k��Ro��|���M-2R�1�����4����e�;��|�J���h���{%g�������Gf[��1���?�4�}��vA>���;`\��N�(���?�6,@E>me�[5���|��dY�i���d	�$������L�C��pN& ��D���=t�BR`*����'"�}�*(�<��������e8��"[��������x�����`���(_��@����g�N��c����P�4�F�v��_��8�\�\��D���"��*c���2*FQvKX����I�L;�7I�������!_>v�����U�'���/,��N��o	�O������~��B$E��J1���cL����B��y�em��"T	Z�dz�����|@����?me�.~[w�3a�������M��K�X@g�=�n�\f��h�6��Y�G���5���2(�������k�����o ��
L��;�"�C��B�q
�^�@���=I�08�8+��
�h2�O�4���t�iv��>+�PA�~(1�,w����q��<Z�;� IWy<�e������-�/������IFs�������2����B�'��
�����t��=��B4����E�n�.{���c����X��<��h��mn�&
~0D�$z���q�)����_����"trM���a���=�gE>����q-	���A�x���?r�1/_����r���#���N:�/�u5T��8���b�.F�2A���,&���x=�0!8����?�G6�4����i�
������:��Dh�H��W��cu�&��Pg��H�t$!�A`����Pf/9b~���|n.U���J�����6'_h���I(P����=_'�c��d�OO��a�H��������<����+w���2��	"�l�M)�2�C������n�nT.���z��v���xh�:��V6k�n�MUh�/.����
AA�^_W ym=3y��ia��{;�-����K8ss����G�ISj!�`c���l�%�}���
����A�k ��{�����������tia����i�\����BIId��F�v��#.|n��v���&4�vKvI�]KQ�
3�g�2@�eU���b��ak�w�8���`��A�rO��sB�|t�__��;��7!,��)6h����L���8��=j7�d"��}���`��$
�_����KA�@[��
4d�(�B_;]�L��z�����e.��|IB�qg����V�$���1+���������r�~�TD
\K=l�v�q�3jJ�d`>"��6\b)($+�	hj����ID�jY�H+�(���D�,%�<`/��U�=���U�A�r�J��k��0:|��	4����
;Y�G%��=�~ ��*��%AH���4O����v�t�iF��`��{}s�
1��d&I�
�n�SOD
����T>�g�u%Q��������X���W������D�c"�N�K��E��j���"����e�2N$��	�)�p��1A�d7�[���n�a)|@Z �w/;�S�����I5��x���alF�8by��fx���f$2V�F�c�^eI|���McayU��U�y�����[;)1g1�����~��e�|���_������K���_���c���X��I�Q4��Ck����y_k��w����
��`2��;z��z��=[4�"_6����	���4����}AM����%3np&]o��a�?3�R��
*F}A�Rm�����d�&"r��I���~�5f}V<�����d|9/�
L�DDF`�m���HH�>�"���*�I
R�/L��%�� ��������f��M��iO�Y�	eY]�g��x�n�`i���{��}ARn���{����)pO��(��3jh��M��}���/V��
`�E��S�d�_83���M�f�_d��V}BE_a�'�U�>�������=�sw�xkB���iW��,��S���{3W����1l6��R%D��>+@c n������D&�`���Z!�I����T�-����>;��}��16yji�_NZs��P['�YI��Z	��-lH��	9^^���6(�������!	q�����mN��.@;��
��z���� ���&���
�*� ���nx&�ga���_��Si����5T���[��'�n����j�l������wK#�v0���>�foLuDx��zp�D�����(����T	�y	wT��%��!�
z�	�Ox��4���)�v ����L�Q?)�@�!��O+��.c��8���� �D��oc������G��&�a���Z0%�����k.@���)`�v�*>��=��c�hN^��!��/8|�n�&�t{��$�4//I�(#�p�����y��-L��<��A7�6u����-|�����S�X�J�v-H��v�HN�/s�x��L��O��~O��>S��\���l;�g�\�M����LN@�������kw��^&�����`���M�#(�%��y���<��i���
1�������_�oH����_f��xC��S�[��d?+z�-4M?z��+6���H��E<�n���Gs����@P�C-X�h�>T�;f�������w��%���~���N���9RK�	�%]�Z�@���Y�����J�t������p8"|����+EN��t tn�hp"~���<6���T���hTv5'`��a��BB#^�#�
p>Oz�����$�s�G�LYU"
�:�W	r73��z(MhU���{u-��+3�i�+h�2�$^��Z�2��#�+�Asb��D����Ao�PD+a��x�D�heF%�V�C�q�V&"�3�b�S�bo���S��c��\?�����5{����{�+�<{7�!����y��]�3W�k����L��h3h��\��9�w�<���0.3d����=-��n]��	��$�x�E�H�e$��bz�d2�7�2��������$0D��v���dC�}�������[N�RF:��E��8`oC��=n}xh���8���
���H�d?�����"��3x��UX��	
`A]��l�����?SSx%��g����7�j'�\��b6���sxp�,[l���������Xq�zY}g0Dn�P
�c��2C�H�gk�z��CoF%��$�f��-�,;�_7�r���6��W|��+^�}c�/�e��������`��Cv�s�0�����_�+w��^|�w�$��g]���+��)�j>�+���
H
��F��s~X�D
��`aV�����Y�C�=Z���T���o�A,���B���]���X"�d�>H���Q���Z�F��DFOtF|�S�P�UmG����
z��o�2!��
�c���e�Q��W\��l�f��ovZj�:#L�\��O����[�,n�s���^������X*��U�����5�����;����|c�I2�_P#�.����n�����64!6�����
��Dv�C���}�C���zI�	��u�����n�!��"U�B�+C��11+I�BY�6ut��P����_7_����j�G�D}A�����S��>2�+�����i�]���sf�H�]���j�qWfH��d��X:O5X��y�1����/L�zH������W&�%�Rz�*��CO��b��0G�wa8��N�GOk�}�|�������Tk�=����t��s���x(Q�G��WV�@1'����		8�8�hW��6M,�{c��x.�5f���P��������06D�����_��:��6K�?v_bB�'�n�	�ev�f&t.�]�?��x�����n������;�����*�"�&
��{���>dWC#�~X�������0��x�|��(=�����4�}������#z$�2r���mC �kF�~���v�s7B��m8F�w�W|�m8\�/�
�j�:�E|�V��'�9T8&m� �w�D;2�VY�|RQ���������@WM/�$$��P^�U�KL���Oj|N����H���$�y�����+��r�"c�����,I2�kAf���Y�K��S�7:+����:�VA"�zsT0_���=t��"+�^��%���'�����e�&�a���B�M'��Zl�u�]�PI��I��,�ZP��W_�ke����"���(��k���z5��[�u���	����E\F	�����ee����4b�n���� ���+6X�{���+b^��;�lF�y�}�$��K��,Nl�Ub���.r����;����cy^M����PB����O�Su����/o���)����/l@]u*S�6�����\��ig/s�#&�i���]�eP+���+��2j2�����#���LH�x8�u��������S�%���#&��A�,/�������t8[Y$02BN��ol��@lS����F6��V*�����.��bmA���w���:n�H�Y���A�R�(ZY�4�x#�h�(��JBh�B8��ENB���d����kEF&��}�A�RqB2����
�����L�.,��X���6jp�	e�~��J�s�o}J "�U8�����6�����<1�����-#��
A��=7��b���n��zR�O���^�N��$�$'�tN|.����b'�7�P�1g5�3C��lz�~����	���m�A��w�nl�����
�N���6:y�wS�������>|m���,h�����1+�,�
b��m��.{,�V2���vu;���`sux����rX���"�[�W�d?��H�/L:�������G>9z��XG���������7�&���x������`"\J�a\��u�H^TF��E-�KK�+�e�&#��`�C'����]=")6
��2@G�����;��6�����\�	�]��\�^?����$!;�1R���e���0�$���Z��m7����������8y�0��O����s�v��T����q�����_�wV���RF�	�������Yitl'$��qh6$"�GC]���C���qlh,;ww��� ~�(7x+��DYX���y����s�8�Z�2� �F�(���9�;���=N�/�H���LCK���Gc5W�|�D8HV����]$F��3&���'�c?�{A'&#9�8��wn:��Y�$N�7B�3J�U/:��s���E�,N����;���+������]o�"3+@��}:20�CT^&"7�u|�c������:�]�!uw�?���gB$>��cL���p��l!U;����%�5uuVa���a�1���~�.%T@��>x&t��B��E99��(o�������0�%��:�h=����y�k�O��C������T�W[jV�ZY�|���u�^�����������x�/�FddB����(�^k����/k4����g�PnB(&�6N��W�l#�������W���(�f��^H �p$(y
c�t��Q�2����}fPx��;��c���D?���`f��%���3���&kZ?k:���b�S�G*$�:�"��{���c
vAd�����BB�z��'T@$����9xWT-���Y@�^��F��:`�D�)�i�<?V�u��.<��� ��Q��V���<�
�L(��xX���`T��_�y���vt��%��X�#�I�m|���mU[��
�8��"���sg���������l<����N��p4�S�Q��e�Z\��t�ff��CCI���/�Ky?��M����2��%����vU�y"h����E�yU�y�j�7��T����lC�'��e	�s,M��Z�����%C���/�2���41 �����a��q�c��ay`�%�S:������x6����iC ������G���U
{��G�XE�3n�k�"o���.R�����M��8b[s�CT=�S��}��sbU���da�e�{�j�������R�=2�54�����eB�}��VlF�.@N�x�������b�A�M�@yr3�7 8*j<��aKBf0_��` �3��~)+c)���������V�����6����>
Y`a�:�����~�����m������A8,�=����[���,��H�7�w��j'���42!8eLi�F�~aZeB8e"�8��a.`�����k0Y�[k(�N���l��d����O`*���6Q69~���:xW����������^��7N�pg����D��/���LD&D��baB�B ��+C� �	J�8/9�.5j�C��wS�����o���s��&�m������AQ�vfh��ol*��S!���w�@;���wAE[N�wa�#��7l���iDM��T����;�Ar�c�0^�Ga�<P66�������p�g��hx�"���R5!��z�c�-vi:��R_�3/4u�����=��I�������'&���J��e�u OTG��y2��D��y41����rL����EI��A1��
��	�Yk�'��<C�����FtK�\�>Kr	������wE��m�����W�P*=&������6���������o��qfP&6dF�9+�_��v��%�_� ��_��.,�"6��X$]c.���a�&�2�+�W~����'�������J���f�w�
�r�B�!������������i���J'��o��D���]1��g��b�Q�l�����m&]���''��6���S��kdQ-N�
)�:t��`����Er�������jp����F��bY�&/����D]��\��=����h��hf..���ogG�P:�G_���������Y������U��;]x��gf()�7����H-��j�]���Z�

�m���:M������B|�Np��G���~B��'y�X��XG&m����Ba��n�_R}��O�d����Ep�<�H�<��<��	�$�|4���:gT@`���Ls�����r���$����U����H�9h��eN�����e6,��"1�|h5�<1�����n��	��G4���u��Hp��j��'��j��l+U����M��P�|���d���](S����'�(�`���a>�zj_�/>���0u��k{4�<!�������Y���0w������a�
�]f�Y����yb(i�������<3�����u��^��2�=E���2�%�|`����]�f����(nQ�Lz&�<3��m����s��P�j��I�a�����Mv�yR8��OL��@�n��9f��`"r:���e���X7d�QG	��������$s���v�0�������6ez��Q����z�3��\�0F��Hc�2�Cd�j`V*=�la�&"��H�X�"��2��@��������H�j#A��	���Hp�7��	*�zt����4S��~<
��/)~f!L��)o��c�y4�aw��7�H��xZ�?�I��	�HP*��1�V���E�m<�����,g	�����	��	&�U�S&$D�p4
�_��D��p*����B���d��*���t.����67���2��Zqd}�-����<&T�����@0!�\��g
�<��|4Ay���2"��F�`~���'��0�k�.����e��=�Y�e�1D�f�a��3�+�(I�.��x��JC@�
���,x�����I���b�O�B�!���gb��5�U�I�s�������y�b�Q��������D(Hp���7��.��P�@�ay��1@d��.m��>��-����d8a����V����4�]~���W%V�n���p�����2�����B�Mw�H�Q�H��1�~�H[�S�o��33D|;�AM���7NR<xh���Qc��%�0������8f�*y�0��2!�G�-K�P�����(@��%������ge.�:��L��{(�l[��D��={@
�	f����BP}��r����5���S�E]��@d��<����XE���Rv3��n	x���|�.l7���W�����Z��:{�� ����-�o��{��K���9��p�Bkw/��A���0Z��*y�06�Z&�����Qt���]��|�Y�z.����*�'�����k�c�����6zB
��v$%����n[-F�0��X����������Hb���	�+.���+�:�s!�]�����8���R�lp��"O0���<����B~!������~<1�S�h����~�q/�+���0�N����+������K�����c ��H������ ;�7by�1�����i>��~'f������r��[k&LX6�aj�vZ2W\�I�l���Y�h�r��:�L�u��6�v`�����t��S�M�'�`�=39�I�#P�'�[�����n��%�p�vg��g>0!7)��K\{���L�'��]Y����	1^�����������M��;C��������s�4���������������T�'	m�z����c��8b�,������=5����l���s�	L,������;��F�6uyh�����������q�nK1$G�F=��7r�M,��H������U�Z"Y�#�(�����9�4���������j�\%gu@����|��KBO��/vy�qb���F�5��!��&,���������u�����31�)�����I1wu�m���12�6f'�Rw%�*��+���s�\�*g�"u�.(wm9���y���xJ�g�.�6X���g�/��X�������Z��"(��xf9.'�jY������	����*����@P�`��4Ng�!�Z���P&c7O^��
���x���cs�x����m���������+D�3�[�v����&�w�����������-��|	�����������������w��ND�z����wBn�h�
�c
��W,uL����X�+���P��e���xMe��eU��2�����w��kJ��IK5���/������pmS���{�E�?��?���?�g���������e����w��E���)���~�����?��/��������Mu����@���/9e,�����h,h��� ���b�d�������v�g	2���q��Wm�s.������AP:�t�r�B��LF�8~YO���g�;�7��z����x�#�PxE,�����������C,h�]o��!7kio�)�!c��0�\�BT��>�o�J���q�������.��J���Tw��m=,Y�������Tl>qc��=.�Yu��o
\������F�j>����Rp�O
e�Ml�o��\eSs����G��qPV��'�hT���y�r�V����r@�3�l��"���x���E���H����T=������LJZ;�3Z�g/�w����E���A�f4�@4C�NG]����Ej�&�)�U������m�AX�q�����Z��l+_f�d9|<�~�p����#�UT�}���>;�$��~�x�������>n��������
Uh��N��[��,\�]T��6v6���I������s��B�q�D;b����s�^E���	j��hb&I�-�9i�O���h����F��.�g��Y\��H�
�d�6#X���������[������?<t]Jr���u���}�*�
[�\�3.��E;���n���:��	������=��R2�Z1|�
�Q}��<r��Q��rE'�s�����	���� �bn;�oF��2�p���
�����Z�i��\�IM'�f�/��Mz������~T��0����k���~	5u��g"*9p6��woG���!j��+w�b�^�����v(������$���Jf{jz���Mr � ���Z����E����6��l�?���x@�����qF����75Par���Cu4v�rN��F&Cf�h�]w������^bNXTt3�2M��R.�j���J #�`e=����o�1��e��cv��i@� �9n�x3DQD��6�v�;�"$��`&�y�$ee�z��J�z���J��l�D�la'�$����@1�E��kc����$RP�^D���\����.j�M�4;��J�E�_G��\�x&�kb���kK������
�Z��1��xB�5Jx�b���1�2Yc�������(��y�)	�n�3���*�����	�g������}Q����@��o���Re{�5������<h
�1�D��3�`��a��L�$=�+��Tai�x���=0�������tP�E?�ynn�%��S@g
�]��9�����2���8�s"�Pa�T>����#�g��q{�\��V	6�r���eW�<q?}���k���1	������g��8J
2�����M�d����������	hs����{��_$���KvO���V$��	�
Y����]�
`�,m�<\x]����l��~9�]
��������9w���L$j����A�"�6��1)�<;���R"s
Q�h}f3pb����!7N:p�S�����G�k���db��O�Q�E���C������W\����X�a����qF��sF�yz���<u�t�#f4�����+�u����N���R�����eaR����/��45����Z������g��@*����'w��$���XT�tBe��R�Osm���f4���Uq,O;�4.��(��p>z@T|�����a�@@��L�=���$�Nl����LD��=~�h��c������8���"Z����������F];�{Rg��������Uy�����,��@�83)����/�}=�h"C����	�^�����%0�.=�E;0M�hch��L��%LD�WV�Qix���f:#$x-8�P"S�x"AV���S����J������%��_�&'�K��l=
1��u�T������k�b�zs��`�'4����p�{�a�d��{RU���d`�I�J�������������T�����4��F�i�+j�G����RlT����i�f*�9�M���T���g@��'|�7#�����;���-K��4��h��A�p��L|<��y��FDj�&�\=80k�r�j�2r�V��1;����j������!s���SuM��K��a�d�E$�/T��)P���(��)8�:����O=;�.������'�`aR���<��N���m����=����=�e�S:l=8�:������������7q��&6 ���
�4�]�h�{B����b�}Z���������u��lX*>!|�-��L����.+K@:��a���Iy����H�w������dM����(A{o�Yfg��	v�/�*:��n���jU��u�&�:��2e2�;���h�iR��,�����jJ���a_C�
���E��I���X{��/��y����>���<#f"E@�92�8��qrFX���m�)�p��5-�}3A�`QG
���MR���so9�uo�sxB�#[���[��32R	$E�s�dM���L��J�}k��[�+zn��+��"���!!����~�����hX��IP�Mv�N�����9����fOhH�`3���@X��L8���h����aZ���0e���I���>�����	��r������E��#�����XO�*�s�y�<w�*�Y������`$28�9���Yia��<|~F��d&"���� Sn�MDt\SA*S���b���ke
�&MDx��[��s�l��u8M�2����/Iq/������V�4��:��uo��e�\�'�F��W��Y*��I4���F'z�)���=����M�~��U���v�;�H�bN�u��P�#g��k���g�����hT0��Z��!����4O�-+����m�~M�DDnI��N��/H��v��M{&X
�Sz�<3����/U�������*����l���_3�z���H�U�h������Eg�>5���4>��D\�8���4�q�'I1�p�{���'lT/2����g�d�"���i^���}���:��-+{n������'DPH�����X|?���JO��Tl�����U��E}�1����H(�kL�
��~��O�(qd����N`��p<��C�����l�����6�BDwnT������Kk-���X:��h����6� h�h��K*�wE�8,zxaB���Q�#��
`s`���uQf$�����(���qH��,\�9l<��in�]�����l>����i�X��hp"E��p_B�g�������G�Sba�d�������+-���������L�h���![�i`����aK���<8���o���J��MK��v]�P�	9}�h����<6z�1yof�31==m���v&�s���O���
p��;�w	z""r�7�C��	�������������3
�6�Z��PT���Ud�Y8�nFh;u�Y���M�����T2�>>����x�E��Q	���]���u,q�������Nd��-9��2���s�f4@�M�j�1�3e�U#�'�j`DE�eO��%_����	�h���e��r��z�%�;����3�9�b����������������Zq�QS�I��p�7����n����`��x��{0������g:s��� ��f�f$J��0'Z�7�6ee������r�;0��_�n�M����u�X<����@/��q���J
�|������G�(����������e����a���h�4v���5��R3$�����a�SS���af,�����a"���������Y�P����l-"0�]��&z�H�����&���R�����oEXK���/�H�i�K'���/f$��R5�-[6�7��]��{};�0���D���jp��I�H��9��x��1���+���e��A�S��NH�����R7/17���d��N2��(��F���2!��������%`
13y���D.�W=�a� �$Vi�O�+;!�]��G�n�yb����Zr�~����g����d8^��(0#�������o�$�i2W�%����zdvjbmz�����:�E�UT����"	�hD]�c7�����nR��a�%�Pr�p�x,:�K�7Z7s�<Un�
�f���P�������T�WQ�.�U��:����im��/=��	D��q��J�c�
��19=�vB%=[A����m5#/����)���=z���A;���x���de����k�V&����K�j�=�0!��]|�QE�&��\�q���O�8�)��p�$�x�6��51�������P����]�_�����B�:�scZ����������{s����H�����z/9��������<t��G^a �F���.�o�O����O�V4�����{�xLwT=��WQ���3�,G
��s�D�9���o�{�A���G6�b�������{Fct��q)�|�!����~�+�@a�	��U�������[w
 �]�Zr9H��K��]�p�m\h��t�h%��$���:��n��A�
�P�d��A:�P !�I�v���]f�3����������g��wD�ee�1�,����;��HB���G�[y�w�@���S�Z��Te���������i�;��#x�K�����r��<16~6���/t����SB~t��7Ik�-)�$���b@���bU������j�vB	@�/zy�1"eFC��c��Wr����UT���z�������*r�������q�����.$����Y�����!r��f��|����x��^�n�n'�e�o'���.������fwp4�,m/��)�����!]�A��FQ1j8�.���	DQ�O�������w!��(�jZ-��D��/�i���9v��"������ID��	%p�g���c���P7��~bWL��H��Dj��}���D�M+�������[+�~��_95��CX���{�.�$��=#Y��<��A�#�d����&,3�Lf���L�[���x�z!Gc�bA�X4V�uGs��kvkYf��������C#�%�v�H�����]�2qJ���99	���-�fc�;(5��(w��|`��??������R���2wip
!������lz~�8��P���N�[P�S\:v/�_���1�E��L��k;#(��dn71V���+�.a(��((�
������k���Y��WO����&2"�����c�|��'�Q��s.��0�d
�G.N�<�Ba��p�;w{�������'�?����Y�f��u��,L����c���N&��G7,��C~��`��P���
1��0����O��-ufh��9�%�G��m�(���O�f�Y���|������,(�'=����Iw�r��v�q<Yq���'4��8���8�],��y���[$�
#/�x�P7^�	�����J �,(}�N�,x����(N1�
(��w��������w�|��,������# �����b|����onk�	�^-e0!)�H����"�w�|�y�:�X��>|�������Z��N5�'������W9��!>(�<���g�_��!�o�������H:�B���z�9�3I�������,����t�D;WP��A���V������$���Ax��-.��=����*{:������t�.�h�b���k���LM��8���*�yUv�~g��;���|��GC�����G�8��z$�2�����D�%Me�N���u�o\D���Y>��J(��~��;i��O�z�$��'�?���S����(�i�~%W�v#X:����O��_N��5R����%���m�?L�����.D�Cl��lM��#s4�����Gm��@��yc�h�^�����4������gV�L<�@S���Qq�qA{�h3�����p.�����wp��.M�#A�t.%Qq�~�W���	% ���P�3�T		�*�]�S�������7z?�=<��L��O3;�?m���*�Z��{��O
�]���0}e����'��P���jI�A�^j0�X��N��V��_Q	�������<�	x;�k�v���J����F��h6|L��
v����)�vsb��B;����\(&��]Ou$�	{��ba�umMM&cz�������������	��z�������;M��A�?��g�H���5��E"2�[��H���f��YB�H�pU���U�����%=�inW'���&�S<aD.�P	2�A��AYX7�0�],|���,N���&Oi�O��HI���3O�R��RU�������
���Xa��6�4>�!�4�!�w|��
��L�
����w*��E����@Yo�D�SE��#�0��U:Z�Z��������(_4Z|�wE2�$
B��\��e&2���*j���wX��K����n��u&C����&z����$0DX�����k��G(�r?AM��B�g��(������*'��������(�x�(�X������,��4�J}�_���n������]J�"�]PN����~Z�?!*��������n�.�M5����(�"t�`?u &� ������K���	f�.(��Z��o�$���j����T	t����]��IEeW���F��w�hZ�p�e���a�sg������9�:�bFD��b�y	��D�%��c-�(�t��&{F�A�Ci�nRx1�����Z��Pu�QM��� p|���a��ef"
����Y�K`U6#������Y��6�H-�B?��q%���m�#j��&�U��eF�[���j��.HB������v��$4�����`aR�l�+���� ���ll�]�uH�H�@���V��pPRUn�Y�!kd���fa���J����P��U�/�Hz����'�57���c���������|��	mt����Ha;d�Q�{j;�yB�_�qp��&D��n��r�����Y��������_����7�'����(����>nb��r����������qzPmX�����B��3��u��Z;�L�T��N?����:;��[d��E�];A��j�`2C�U��0=U�~���|��@�h�q�Z�P�!W-���F�n�913*�UU���'��q������0R��J@;���L�NHq$*Y����������u���i!���#1:����vif�f�kL����"4����I��^l�������-!�����?��-o�TY�w"���x�3�f:D�Y�Hr?���3i�@'g�fR2x�&��*H�(TSA�N���X����}����i��j������������**�>M�D�����-�va��D.�\Q��{T��G}\L
�U����
�)������p���������s@�X9�P,k5o���2=2Zp����&��D�	����;6 :e�
,oD����e��eAI����M�.Y�?�F[;����g&Hz<I�8���!.�53&�Q�f�;�wE�J�M�k#'7��ly"���H�=�T�%[����Z�H���(�?�C{�I1%�8����n��[V�N���|�>����JB>Khk��j���\�����H��5�}^Af?�3j,�����e"y)���N��@�*�B�e�����IUY���T����1���r�����6�5?u�6$;��,6��������6������?~�������?�����n?���Y
+�������8�W�gKW@NW��������
�����W�z��B��]�i8��������#�����f�4��m86�4L�1��h�{4�@�Te�ms�
02�F,����e�.2���r����������U*rtn�QN����<������l�q�/��)-~�����@��w&E@���=�� ��>22_{���8���7� 'ANT��-���A�c�����gFQ>�X��']��� �i��@�*��G��h�����;S����[���K�;��q�g^z�yD<�|'�-���/��w�)9$����r�Zz��6��`��'"���	i�T����V���'"��������Q;Ve~	?��������Pc�#���n
�M�|��/Q�.lT\x�.L���[!������3�VZ�sQ[2��l���N��
@�(��lE'6��eP�(��&+������	���l���q�4��}�6���PP�-�tF��Ff@���Q4�]�'��,�CF�h'~WM!F��������Vsc4�Gf%�h@/���\B/3��@:�
~F�:V&���Oq����d��R���U��zNh�
;[����*w����;Y�.JG:����`?;�����hv�4�t	���+�75�fEg4@��3���M�[3�3z8w E�(.�~&���<��N���^��b�4��L�|ja��4m�3�hQo������
�Q���fUu�F5i2l�����z�'�I�Q4�]R�nQ����D#�:v�-��8��d��4�:����Wu�aS��nT�*�f�2$�:�2H{�_����	�f��^���@���(7�RS�*R�O���;�������M�)X0��
0����w$����������GD�:!���Zn[{���i���Jt2Qo�1�u���`�0YV�l+�@���	��N��4����2����i.��p���F��5�H�j$�M�����nC��w������`��dT��3�D]����z��f0�C}��z���]�h��������-�M����g�z����3� s[������@��8Z���y|��.D��6�9���|��<Gu�7�|�2w�*�6�Er����I�������<(�q8�M	�=5�]��Bg4�!W���`�[���",�E>��)!O+��{h`AO$#��-��S��hY��&��f��������h �@fFa��^'&�-�5����[���uw�t��� J+�4�u����bt����s����y����BSd��'���b/������!<X��d��y��.L���:�7������	��y��[�"��
`y���_��N�?������e�������P���8�`����%$��i��~k����]jt���v={&@�#\��)����L�g��V����Z�h���@�����mF�1�ZHp�K3�&�K�y�q��_P(^��=�T�����N���}e��v��z4�����aN���J��GP\��?��8:�����@$.C�p������+��{�������q������~��@��l�}���gFg7#9��B����:�bAr��n
N
��"����~���z"A�e?�.&7�`���2D-��T����@J��\6���q�	Iuh�#�X�(�T�5��Qdee6x�\��%���8��,Q���:!9�^������-5sM���D��w���d$�jV�d��0����,��eouG��
D��W���g&R�6����n��T��u�EW�2m���Z��pP�����z"�bX7���U��J|�p�V����+tS�!��137�Y�o�����W��W��%��' /���Q�L�\XI0���i�'4��J�2�|�����}��>=�`�#<�vB(��8��_���'��,9�8������H�\��0��OV�=�������O�s����Qj3z�C��8�����`f4��P���ZH����p^�t=�qFr.4�cz��������a���_�c�F��d��_y��D(#o�:�6#y��HDV���7��u�R~�*�����a������G�d"r���'���1��HT�P7��LC)�����Q���IP�����I�p�#������r���.L}���aB��#P��;�#dR;��~eyk�{H������������a��i�}�������b'���,��/�x��'0���8��N��#��G����j�V��e�NL3��n:8��L�Dr������I�P�8
|�tP#�B5\t>�P��>**r~0���H
�������9$�?��-D��L2*���u�zB��'������d=�X8l8��}���G�]�����[M�:����������Q3����4��<�m���-W$}��S����N�>��X#?0Z��8;��bs���S�]�>���w��o5�!��[E�����{����>?�������T���j�WR��9X���#80�X�8=�A���3]���q}�Y>����qv��k���hG����S��3����w*x���sw*r���M[��yr&r�n�V(�Vn�����:=�z��D��Dd�9x.m3Ue�:1����B��$�Q����e�>9�x�}���%�\��'$���Y�PR#|���V�������Y�C���Y]�MW
�Q��#�wu��&��w�@�5����i' ����p�����= y�_%�P��si��
M���z1�d���N������s���K�����	�)E!uuN���<���������f����:���29x����.�2��Sqm���H�4���&�B�e>'y�n^���-��ITJe�(%�P�$k��L���(��l�u����Lr*A��L�S}��(E�"��_��%I�&��J/�8U�{[�Tv�ds��]�������Slm�x��m-G/s�V&��"s��it�=g&fT���l�U!��/���C81��M���l�q}W$E�Op��P�C����a�=��6�������0����gW/�:��������,�
����j�����+�\����(x�l=j����p�����.H&�y�u���}3�I�_��{���xQ�y�
l$�S5�����A��'��NrM(��b�t��<-Y�'x��� %]Rcb��9Z�#
_��?��[������	;T�X�6�����1T��)���[� ���+�{+�RBI�wy3,,_��R�h���gY�H,D�:�%3�(]����#k��6=�6�"`�bm�y����:���#t3(���B�Tn1?&:{�CWta�)�������X�����~���AI����d�L^E8�����e���-c�:���\��x	_)�8��r���g�J7N~����o&R:���������������;�����6��9��+�V>�n�l���<���	�I�u�&pO����@g��XY&85���s�v�	��jt��?�������w lS���#����>���B������;�+p?w"�#�������'���H�����
���\<��3��B*@d������A�����H�7Y4s��1��*2���=�9]�E�]>�WX����m������*#���e(�">z[�M��S`���p�v�)�������Z��n�l�+�����5��J,�C�1�G��u�!^d�y� _d��s��=*1)�����j��UT�\U��������;����r�l�@�jxR��7�,G�w��G&����Er���Cc��x�+�A��`��^�2�I��I��w���:�N��yF<#����t����=�	����_��@��#\�A�:���m6��s�7[����F��!�)`~���Xs�X�s"�
����;�EM�c�����++@��c��H���:�Ld;CJ����:�Q+��6;X>�#�/P���
�vu?W>3y��n�A�r��E����(G!�0���"`kdp�m$��,o�<�l"�M�oZ���-l��Bf�J�8�$|����w���H@W���v��#QQ� ��,<._v�(�N����'$`84e�j�����rA#tHU����,�x@P�/X����wA8�sH���D���������39�"�rMk�VI����AL����L�[5�`�mfe��NX�������yfT&�6����91yc��o,��'���U=Y=�+Lz<��3�}�z.N�����A��?��:-��Bm�D`�,�\O2��������\��'m���O@���n5v!
�S"~A,W������G�3��'���u�83��{P��Ab �}���85pAPmb�L�b�v*����)F�6o�����h >a�vsb���Nj3W���8di���_Le�����w'���Xom���k��.���t<S|����Y&p_��*������yO�O���m��
�fT�M�������J��6�������>pM��W�6
�Nm�������j�^�dz�����eNUpO������:'I�����������	:|8M�ec:��f&���a�B��o�/1���D�=l�������l�3�l�i�gS>�{mt�0��O(V�����_�����YAmQ	�fy�NlzL[��o��@���z�]��G$�1��CV�k���E�����n������FQ_�J]����G������u�	��i@�O}c���bL�������n�K�f�}p���f
�Ci��6���������>�4��`#��]P���6��2b_) |������	r1����'Z�����luD��`�O~K������6����pj������'2�\!6Y_?��|�1��p����������dV����WA��wI��s,��������s��2)���oF\��x#���8�1?�������5���N3���f���mm�C�7��u����Tx����.'Iw7��������?����?����{�?�����1�����?_g��u�?�(��"�?����"�?�
��E�������=�y����Z��nO�5���w��=�yL^
1��H�1���?���-U*���=U*�����@�@jU�Tf��_!�_e���������)���
���!������C�ev�w�����u.����������1�������������Y��!������w���������\�6���L��=�f��qt��1X�-i4��������%�d� �=����\����%��[�p��}������Z�g��g�kY+��Y'�����t1>����b������7C�����t1��������?]�7c��n��t1�����b�����M������[�?��������'#������?]�?R���Ov������T�n�������
���I����'��.F�4/{}���`�I���'���E�4.{}���\�I��o�']��E�4-{}���X�I��_�'�nE�4,{}���T�I��O�'��.E�4+{}���B�C�O���;��hl����&"8���A���{��P���-��=����s���|�������3�������ODp(�����Y�\�6��������%{�D��9�A�$"��h�1	����|2?Dd����$��M�,�{ePD���8B���G:���K$���`)5�%���$�x�����{��8�����4����o8�E�c��d���������Y�O{A������j��p��G��p�\q���nd�[d�c������9�j������W�I��;=�I�L�,��m� �q;�b'wC�:a8�M_�����L��FBn�l���	�����w�#8Q�6�MN���P*�3{@�*��:r��x��D��_�`������qJ����G�E
{5���&�X��gaj��&�����;w-N%���M�8D���I��oG}a�k���w"/���/JV;����=by�7~]��f����(��XY���/�0�V��m�f�.�q��d�C����^�~��Sr,�!�A*n�6l���j�L�<����]�~f��_K��?l���&Y��H��6�aE������?A{TI:N�z��E�i�M#���G���]9M�OLF�nHm�.�N�oT&�E�vr�U���?~r������D��c7{9
���*�v��~�����Q��vv$����*j�k��fE���B�l�����a���ho�r�}P�#����A���3��Bdt4��Q���6�;
G rCQ������"v-N����m<B2�|�	?�b���*�]�"�8��Q���L������KD��x���d�8�Key�QC����x��3��S�xF0�����I��EE9���>�	���H��A�[Wu�\����bax�_?N~����+f�7��$�]���f���g&R��=�U�����]\�=��5!i.o�#������	�d����;�(Jq17Adk��H��n�0@����G�?%��P8y�A���C���=e�F.c|�K��j&��*��v��.�g8��7\y��7�&���?�OQ�q��Ien��"h�����kt�h���*�

�=V�7�E�$9�����ij����e�������G��
G{�7,���*�M��(�J,���]{�HB���s�������t��M��`�!���>���va��	 �.�/���U~b_�eT�v��~g$2� ���������Be!�����	`�J����Q�iO`8��h����E��#&����V�o����F�n(^E~�
�E�L�sA"�dQ�0��RZ�	��5�������G���:C�����}���D���i���d�����z�G����#=�'���A����_��`hDo������w*��~�r�NFy��OD{%)�������5/�����F��:� +��9}3i�\1�U���>E
�C��n����g&
�D~������G$�y��$K_�N�G
�8������ i'�� �njlG'O��]��t*�,3�*�F4@�w&%�0o�y�C�5I�?�����D�q�����3�3(�y5�����v�XT2���D�*&�Y���(� ��U���.�x�$U��In�����;p�Y����v2�[�Sa�w�	�����L���$�'�����4n�Q����.)����vj"��v����L"[�H�q�s���.�U�������d�����B���.m�c��
r�v93i<���M�����d��hN��Wd�^R��ih�l���K�fe������.��h��0����[#q������(�4_8�x��]�.:�{oH�X�h�Voi1��Q`��r�.�G�dI1���>2�oi�
�wt�U,��![p��WC�0:B��*'��(^�Gt���0�����t,�Q�m/mz.B=���pTI��:�DQb�:Z3�51��T��
�]��N�h��..czx�3i�}�H�p�{^�D!i�7���������D������@tPS��4�?d&�)�<n3���iX��g�>v9`%F�0��hZ��&`�����'� &��f�a��������,����B���e��.������`�t9��H	}����;_B�����~"fph2E,f�<�:����'`��!L�u�,��	 'H�R~N���;`��$�5���>$��I�� k�r�������z"eF<�Udv�����MaI
d�Aj��m�w�*�+��}I�#��V��=��\F�i��2�q��0)�%��nh�I���0��XN\~n{L#��/�ATZC.�/F�:�W�c��g���%��r]�����)`J�����,���B:�� �}`DF���%�K�H��/E��=�!c������8�1�2�K���?E�X�N�p��Hj�'�c_���`�	sNl��9@����N%�cW�eA����otJ�kDDz{"��Yv���_�����pJ�\<��e�U��	����c��)��C'��������|�P9x���/'b���x�D�g����������:��������\[��qx�����,8�
;^�mCDz;�"m�a���>m<c&��ob���#i '�i	�O�(���
/�2d��u�[�H�R��E����s�'�2PP��'�O�9����a)���c���/��~[���<��n��j�����.(�`O���zh�����_�d�4�I�t�o��xA�^��C�\+v.5Exg$2��i�k
����2�af�$�T0&Y�?n��I���E%���O��x��	j�f2���mN��f���E
8�����whC��eAA�����<r��0��A�/�:���*�L}�3��2�"/�S�P���
 ���mQ2����'~�r��<�	EY��<�m�;)�	�U���_��3�w���v*������Q;>���7�����)��i����NKw��������)st��.(��X�Yem���cz����=#D6tB�K4"�d^\YY���?��q��n0@}p�eI�*xWT�M��,�BF"_���&��~*�HK������y��5��f���.��Qm����\>��k����ucS&I����]\oD�� ��E���)�����\����1w���������"��YYc}|�mo��G]����t�oA�Us��9��������d�/��d�^�i�*���-�z�2���.�I���M���P�C�*�G88���q�[��g5�>�!���q���ch���$*A��SO*����u�5�wE����JP��;L�o�����FJ���m�
~����t�?z�t�m2�e��n;�Q���=7*^�>8/��G��$����aw�L�}��=�y�������Z���y<E�����^�(W����v��l���nW�^�w
�jlG����?����PoeaR���_7�9�,�����,�U��QW���SX$�a���a���W��D��w��~b�wap6�tY'8���;>��`>O����(m
����c7P�^�������WM�=(�%��N}�t�KO�����=D�_���]���u����>\�F��'��������k������L��g4�eA��n�
�?��9:����**��E'�C58�'�D��n��4r�\6"7���N�r���m"�s8�t�fSed/;�Q���Sp��X��h��y�K�]�'������&�G�4���m^%d�������4�U9?��i�-^��L0^�@���% ��?���
p)^y*���+�rD|��7}(������~<�V"`�2���D+��;���D�p�\,{
V�mx����r��%��6����E���(f��),T��Mh�g�2�
aWyWT��r����L��h3h��<��9�w}�SF�,y��X�nFp�!�w��C���`o<�"`$�2yk��A&�x3*;N��;r���h����Y�Z�
r����0v��r��2�Q��(�L�=�������.�)�76���K0��Q}�����
���H�d?�����"��3x��I���h��e��eed�������(�=0��pH���HZ��q^G������e�bz3��j^bElC�M��A��M3xC��=����"�I�=MM�%�&T�~"�7�/lif����s�;~�w.
��sQ������8��qz`��;!8����jz�e�S�0�@G�MV����8�yP����$
�e�hl	�K�����k�-`����~n��������A�v��P{������%�8S��7Q*�����J�<�d	���E��
`��|&�1���`�d�����5+����|Q�������[Y����Y�7R�Kd�C����9���U,B�c������qpn�T���4'(�5�\q�f�JJ@����:�����WeP����<}�a�|��!-��|&I���?�C��
'
��A��V����}����gw[����d�Lv���;���� �Q�d:�x��D�ub�T(�f�$Up>���|�������f��0f&����i>{�8�����~���Q4�q���>��m9���am-�����c�#���g���h�����*N^e�"�m��B��*Qq�-��p�J�����C�#]��;LA���'sX�B�	Y�G����,�h-����6�@
���5M\�>u�y����<m8�Ip�t���������4"��8�3�!�q"�~��O���
JQ��=ll��5����p6���v������3.:�2�3-4�6�,;��=�#S<�<���S���fk]�6�H�0L�Z����T=�t�A_jB������m�'J����l5��n4
2�4��D
<(��|��H|���\L4�I�"^i������l$@�!�{W�� ��H|O�iaW<��1@���i0�nm����i����M�(m�t����8gd&/w�[�<uu�~�!d���_���G�_��p������8��WQq������*���keg@Ez�m>��S�4�[�����������M��y��
Md������]��Vv`3Y� ]�~�e����X�Lc������[���A��%��|����]����D����M�~�W,����4A���h�u��N�B5\!�����M/Tc�Q���LJX��E��pcF����
m:�8w�U.j[;n����Yn���,L������O&Q���?�Pq�n������^=�y��
�bQ��P.D���36�m)��0�L[mc&��E"2"
[}��w]
pp� o*��JY[�6mN'�Od��&R�u�6�)��
�(r]�C������M�5��R���K���:����>���tbq	���]�/h���������K�/���B���x���g�+}�	%�m�;�sh"R<]d!�S�����+���S�����;��gs�uhA0��5�*+�S��b\t��LDv��J�Z�2���v��'|�l�=3�l�Du���.+7/�H�>O>�t�'YP���M����PV~#������\��i��:	s������d9�������,jf
�j�_�hX%5^&���0��;d0Dk���@��ed3j�"~�m�0V���.�R���j�	�V��c�e$:���{�2p���8<���%�������#N�d��>J����I�lHY�t%NY�������6�����z����I�7�!���J��\�~����4����!����;�r'�����cD��tt���cC'�d�"u���0/�l��\a�>������+o����l@ r���������nz��l\!��#���w�����@�;^flcr�fX#�B���a�����)��dp��a���5��!"�����IX�	
 
,����MHq$_oG�����$��)v���3�!cw�.��I9Y0(�]���.��'��#�!#��������(�VO��;W��I����l����+�MZ�7�^5�]���j�r�(�����nG��y'5�
����/XZ�9'��i}�n�8�!�:k1z��\�������m�O	R~����\�&v����'B����� *^��Nf�b���'6����Z9h�=�(����P���N��E��*�t�z��eB�V�L��K���(�]�$���Rg��	�o���V�	5q�K]�m�f+�����l����N4��so�o��@&���q}~����.?G���$������8`�<�*TV�)��,�����^��������
��ceg'���{co.��`�
��w!.k�ui� B9{�=����^*����.����%�fc���������M��$��>��7���L�&�"�x��*��2i�*��rGZ�j�)!���)	�J���F"��R>�'�u>�[��U~�]{W��}+�:�3s����E��������&"��iEN�v
���	I5�)�5V���@o��q����:X8���	�l����
4}��Lg�\�nzg����� ?�G"���1�6��+�v^_W�n��Q�_}�q�q#H�P�������F|����d��{���x�HK�Tb�����3�{�"���J�_X�u1���J� T��N�L��pOo���d�u�+�f��q����_(?/AC�o^^yLI~"f0�#bE^�C�n�4L|��G!�*�yEV���C�1���(���X"lw�I�#�wg���)Fx�HaC�g>TG��'bX�\�G42�����{�S����L_�O�%P�������{���Rb+��Xp&aD���F��Dm��V�;�^s3�����������^zj�Q%<y]X�+��uI������������8l�n��Y��MZ���"G��[z�7����B?�s4#;��j��(~��h����B����.:��fQ��@R�3~��X��P�`��)~��C�	�U���=�V�v("73��k@�a3�F0��Q�nw����x���]}�y(kO�����?��7�{D�����n��:�n���u�}�*s�y������^��U�e!��ky���J�0��@s},v��h�'��s^He@�
�q[r�UQ7����^zDG��eC�
�=��*v�+� V'e��?b���i���p`L)�q�G�������x�Y��5�1~B�G���w/����x���f�k^<��'���}��?����.�u����!��K�#3����?�&�����-�g$���A������#r�}���o]SV�Qo9�;%��OU�bh
�jr(��E|F�����Y"}�L
+��fl�d�T�����;��d���k���j-���8��-�x�fKd���xE/7�m�\�6�y����;c�"H�y���`e1��#2�[�eC��LM
���g;�!�wdYH���w���9a�e)
������KT0 OOy�F�K(GR����}�?�����v�8w���k���<B\R����9#1�Z���AU������Z�� r�S�:��:Aj�N�:���?p��@t(��	[�TB~������������	�#�n	(?/�����{|�D��,J��K���h�U ����9.�����u����G�X�6�H��7-�������A]W�j	G���p;T�J�����I�g����W�n�l���=�73u�wJk���a�����#�sS�V������[�5�Y%>�L�R8�����
�`�zL�w#����5�ij���U�X�2 X�k��_�cX�3�@����+>���m��	�|���F����Gn����*������-=��d�I�������9��W�yW+�+/�P��i�[h'�!��\�6U����7�cp������x`�-�������.�7[��������j
�k�m9�l@�<�a�3�WrY���I����W �p��L2��$��'��}]j�Y�^+�tN���)��U}]�l:���saOO5���*@��gw�t`:szs|+�iOL��D���--���2>4���P��d�����@�ot6��0�1��e�V�$aKFTL��T)Z�0����6�����2�0	��K�����dZ�h����eL���x<5�(eY�+}Y�`���<WK: �v�����Js���sV��%��85,�9��%���]i�O.���y�
hIO���%}�	%��%�W�zK:"�	��9�������&L���@��q,Z�Rl�OS�������6�o����JN�t@�Yg5����h�eH���MUf��Q�K��H"\"(CB�"(�A�g�����Vr�R&�P$
�L����2���}W�gS'cYc��Z���'E���n�����{!�|:�uq�HFQF40�5�Kf�$��
�	O���R�L��(� �(���SID��T��\,b(���J%�J*���.�J�,1���A%�*����x��tp�N�"�J�d�T�y@DU��l�#iO"�r��-�����Pk?����s��D2��7�K|��y�(�5k$��.N">/�1��E��
</Tb��+�L��u�@1����B��o����_\5(G��y���_��k�e;HIw����(�m
&W�R���~����D(�*R7y7\A	N%(�"����U$��7Z
$B!���a==oT���cO�X(��\��@�l��@yo��z:c|�'=��@��I<��Q��2'�����V�M�1���+�'
�L�J\H2���4���L�5*p5	*j��l!�*)22��z�N�C)S�<��=;|+����Pt��=+����E:�&�^fw�)Y��C����-x#���lt�����a��\Q)�>��_X|"�r���oF�V�; w$o�087�	DkEn�Tm�ixqE��f�������\������N&5�[x��K�1"����ToR�^������������Zpr�O*��{��|Rg�3�	9��c�?elt���2u���K�'��	��-jn��B�0#�7���9?�*G+��u���S��C�(e3y���q��r����.�����R�9s6"U�s)N�d��G�����3mVo�����&���R�����J���7(�d�X�G���#�*Pl��K"7V�|F�8�m{U��H���T���p�����
"�9!
"�H�-�86�w���j�������QES��yg��#����e&p6'jI�%���c�V���n���D����?!��"wKl|_��yja7Q��,L�yG���&k�s��j�]��]:=��%c����3��(C�Ec�"�!��������Iz,7vg�� (�7I�����M�N1�TJq��Q�� =���z�d�0"�(���,?���O�����"��wh'�����V���������[tv�d����������dZ��;�Vrj�HjmG��X����Ek�M;�[�H��88����Im��!�/WB�8{��I�x ��U��T��6���Q0��{��P%QmUoC>�.T�O�Mz��Jj;*c��_j�����j�L�P+�88+dO��D�G�l�����>oSElvH*��b����h}.���"��)Z�V�sC��
$�}����?�>��
��������i����~bD���"9W�b�t�z�E6Egxc6������V�A=r���7*.�E$)��e����r���������6+���4}�4���.��r��H���M�.b��;������,$����R�k�S��Ys)�z�.�T.���"�d�����%��C�p/��K�������*C|�S����V����l��9"�1hvq���|1e��D3D��5c�
�Y�����k�k�*��;jo�����^B���x}���.�����!���u�],��{���u?�/��h���$�m�K�������}�k���/�v��ok_���������]����9�R��<�\/���	7�K����G�C���]��C�R:��E� �G_��.��KG7J<���>����Q~��������O��������#�{�Y������]?��?�����:�}~�������������1�<d���������?����_���������[q%�Nmo<������Td�F�72�-�_4���
�o7�q@����4�O���'2��]D`�T��Wf����t8P���B���XGf���'�;�L��t|_��+�D���}K�qq�y:L��'�X���rD�����b--+���q���mg	.�,"����}����������8�Bg�%�������@t%�������t��������)N��r�'�g�+�����A8��J��?O*�\r�9g?$S�z�%f��}�5��6 ��u^~���N4�J������g7��W�FWs��?��$�f%I����T�jG�#�1 8s<�����q�����A	\3�-�����7��V����M�__x�7�z��2�Cx~�opQ'{���	B�g�c5}���w���o���n�[�c��>^������r��i��A����hJ�7Y�c�`�`$�Pf�����v0E��MOL����oBn���5
���*�C�#�d�Mg���>�;������6�Z�����C���TR���Z��`?�u`9!�Wo��$���:����^��o��=_��G���Pm8L��x�5�k�f)�|;�������6��U����ZL=�T1z��)[� �tE~����v�u5��|����� #�b�H5��c��z��a����y�`�����M'm
</�/��?�� ������1�n����M�������[���h����YVW�vT��D�<du�7X�x�C�"8r?X��$�e���K%�=y/m���Ae�v����)�#Vo���z������[op3���p���CG|�7
�|��8�@��M�n��=1�}����J�0�v���-��1������p���M�Xe==/�E����������N)
�>j����p�j6�I�4V���r@��j���*����P����RW�>��4%V���.#��(�s���Ak)r��?rU���w2)�4�S��2���M�M��G�����X%�"Z����wv.��9���'V�_��C������sh�"�\#2p������J�aDZ��BV�u�4����O�CRew<O`~���M(��D�C�t�?������(o������:VJ!V��G����4��i &�I��!���t���l�_9y����-����e������p� ���r�5���H��C�����PAZ��f=����nG����&VI�S��-H�;"8!�|
�������W���<]���;1��I�K���A��G�N&~�0��z�9qK��
$e���7�

�=/�`U�e#~��1F�*��my��X�����Rd_�m2�,�=b��.{��JC}R�E����~�C-�����M&���z�'U[$��
�X��%,l�r�x���[`"�8c�/l���~@M����<A5IF�{�7k���FZ��BX����FTe�&���1������T����4�V�k������"v�#j��U�������G����d���]��(���
`+�t�o�O/�en���R�J+�Q���uj�E�tat���#j����_[�����+�
#�(��t@���^�i�|o�^#2�?�/�5�������/������HN8X58��o
pQCIx���A"���3=~���^1p)5����|�JD"ky+�e:2�6�Qv�R]���C�z�F
�G�Y4���qvd��l2ex����G=19�-��a@���=9�0��\��d����,#s�j�����\�@���:@U�y��f6FH���d�T����YU��S���<�Z�;���/����6%�.ue��)�k�P����M�t@{Q��T]���!����{oe�d�������D���u�k���(eVjD��&�b�������~L}���]W�"���qd(�@�J%
=Z4�,EZ���k�������%;����I�d?�`c�������.
n�'���0��QyI������{c;/�oo1y��X)�	������_$�a?���}H������N����*�/
���q� ��+����� �{�@������r5���f���������AB�����S��^�6���{�a�:�^��f;a= +������r����.�7L���c���bD��������K�<������8�K�Oc1 |����	B�E�_Oo�3�7�h3;"/�\{�[3�afb�{���5d���l�zo��ig���;����Z��YOi]�*�c������D���v�)o0e�m	M�c&K��s;XM����k_�2���������t�M��k�����g�{��9����b ���5>�h@�f�����c��T���\}�V��=A�`Qmc��&�n���G?�u�9�����n:���T�$d�3�g����$�YF[�����������E0�CN�D�����
[�9+I5:o�����S4����'�M��C)��1�
s�Y�i��2�2KS��cV�G8�3���uG�d@�A��W�����C"������K*�,p_=�����������p�����PcVQ�����UR��t"�/�^��r����k(H�>�����Z(4E�Z�P�z�
|��;�p���	$&k:��2�|��[�)Q��\M�5��VT�7�3:�V�u���cP����o��R!���k�NT	M��72�I7���I����t$�����t]Z�y�)Y�/�
H�Q@��$/T�B�45v���b���Dv�����5un[��Z�����U�4���p*�9���.�����K���������duj�K�f��!����
"���Z���?G�z���I�U<���rg���5-�� ����3��O,�[�U����D$S a:�+X�����K0��d�I#
w~�2@c�����3��2���
�\��B�u��|
�����ec����W����JUK\Q�z=s��*��pN���O�P�|�J��:��O���
[/Gb2������;~��?</��s���E����xFT5�F6�+�)���,�5�tx�h����tLF�<��������V��iD.��]#��(�!��d�&�a3��$}!�6X���w�  �3ttKJ*A48����p���C�#|!�WX0�/��P_�C���}�\b!Rg��19�Q�"�V2b�y��5����_���oZ�U�6���ua_�Q�kS�U�0��{/f����-����=�����G���������.�YZv	;zG\�D���M8�Bc$&�1/�	�+�_(������?w� �����VE��k�^���i�9���Q%�u4Oe#o���K�V�j��AS�7����u�"}MW�pPGb��Dl��^&�r`M���&�j�����\�r���W75���I�����_qe�������k�<EM=��]��i�?sg�C:"N
�a�)�
frD^�0��TSS�Z{�&�I)G�n�h
������<��|$&#��q�s�7�Y�r%�a���o�s5�7K��l4cPewF}7�Q�3�������k����&G�%����p����v�4���o?�-��������������|<�����`ss�w>DS2'd6����������]�����z�[���P��_/�K�N���e)kD}ez�e)���������������,��M���|k~UVs lmf��������(�N��^�/������e�Q�e���`l���uGw�>"�K����;>��?*����Q�GS ����D�^�g��{6��X��B��^_�r�{:1>�����zpb�\�R[������#"R��#��o��8��^�^�C��*��*Sj�Sn�tD�u����^|u�3"��)|.�������J*�Q������a7�h
�V����,�����1��H���T��i�4z\=)K��r���@�y]ivd�������2U:9�+l��0$��6����cr:-t]2����r{O����Y'ws�����$e�i,ZO|m<�hJ����x�	*��#I��Ox����K?TH���:���)Q�P��� ���n!�\��v��#2�I���!{;Le�J�8���]����:k��r�����b��-"]]���l"��H|�����P���sx�o���V�Z�.k�w��������xu#@��V|�26�NkGo��E�����n�G��}wL�'�y��1_�f�g�S�3���4�?|X�+�wH���w����?����u9t$l/��Vq��xr����w�Cn���QV�_���m�I���,���p�I���.�7q�������L�|1?��"V~HF��k�����l�3f�:n��M)<[$?:N��2�^�*��F����eT�H�6����x��)�(�������+��� u��������S�I�'��2��:��	o���n�KB4���0f~"�w�N�.������6r1��'�l�F�L�*pG�����d]��p�������;?�������U��I}�`�|��e��v�6nv��i9AFRe�����rp0u7 �/��`�Y���L��1�MH� G	�"3�����,6�=��|F�b��}����$�9;|Bi�4���������2�<�V�O����e���Mp��i�rgg�,�� ��.��ts�$)�e����	����^�Q&������p�>EX���G)����5vE�]@��<�ky��e
�$�;�9��N������
�,^���f�3����er������O�� ������L+���)�:���% �/�0��M������}��"�q�h����
'h��f��7�,�h��e���.����+�H���8t"�U���&���^����������j������P�Z�{y]��@��kg�h�n����IS:<;��[�[�2��7|�7@�+��8hE����_
=8G�mZG�B�JN�n�M��)�nC���o
����8�K��{Fd�����)��r�{HS�����W�[�P��2�rc���� ��vkq�@��2y>����&�[|�\�?q�B
Y�����09`k�����+�|ng��Y^��~4����s:U7�X��zi�CR�w�TD����}�A(�C�!�Tg���w����0M��\������Nz;��z����9��m���*D[�JJ7���x���D�$�� �Lo�mn��pT�3,nL	1������W_�I�_A�]��c�t�� ������e!\J8�=�]?~r_�HT��j"p{FPDs(�x~�bP����^��K����z;
�J��=?������u���x$�V~Ek���]l%�&�Qj��pH5�����)�6�Q�k�����f�1�$�TEQ���+��i_�n.u��r�x*A�����	^{r�)��a�>���]��������t'�����Y�K�b�FSG����y���E���y�hJ�0b��Z����J�N=ry���B���_�N�����>���v������f����]��L�����c<�����z�)�V�z�H3!�zz�s���Q���V9p+K��V�x��@���8�S)�n�)r�^�����e_�?�j����$���_����F�>���HG�)�����3T��E*a2�����rP
����r��\��������� #����K5z`�%35C'��c��U���
q���z�g ����
Q>�B<0���l=p�W'�=0��1�U�z0�G�������r/�i�w�?z����[�����?�lA.�_����U�2[��4���{�����	[JL7��ru�_�JVp�����w������"3�/-�d,�t�����u�)�g �������@Y���c�^���K-6� a���7����f�mGp����-���0��#�GO~"�8L����]z��V}����)���#m�x���Z����Lc$����h&�bN;Re?[S���@kTY/
3�G�r��~0��������1�h�j���.����5��K�(����A ���|�T���79U��`I��-�D~-��0p�dp"��.�#_���O/k
�Nc�{v����a��'-7��2�_7���<�$�^���F�X�gU�G�PDW��a��~{�q6`���������pb;*��D/7��JS���8�_���z�0&�K)�����z�T������E����4������P6,x�_x����M94�WA�e�lU;S�Q1��v�F�<3�M}p?��g!P"X����H���!��w�qL��"���2���5�|^$�S��%x(��Ibtw�F��7��+�]����7���3�)�<H#�~A���<�����|:��4�����������&���ff��L?�j����Jc���4���&l]���s�J��\/:��S*�mq����h�����e�����z�(����=V�)�Dnz4i7E��j7W�
��(Y��R� =���������5<H_���1nn��3�7�?#*2�	4����5���
,����p�]�I��L�W�Ox������j����g��J�A�5�P3�X8�5�l|-�`��hp��Q����5�S��`��vk�
]gS��;u��VH���iB�����������b:���Lw�z�Y:-�S��uh����2�����o���a������dfeg����,cYp����p�Q�80K%�5�h��M���5D���+l;W���E�2�syC�7�����	��;e�B[�O2L?�g)b]_�5���&f��N���k`�[��PO���J5v.�C��@c��
Q@c�k������� �gBX���^v�l*��&mKs���oP�"����Fg�%����yo[S�C�V�o���a���q���E$f�p���:�{g��'�l�)���v����
3V���o�/�9�0�r�5�3�KT���
�{TwS�M����[�*����GI�i;��(��Us�\�;�n>4����
4��BD<�R�~�B�X4���U?3O;���)�G(�b�"^Y=���Zaa{,��#�H'_Jp�7����T�]R��������we��f��"ioB�9��Tc��@i�fu�4y3�����q2L��Y��$����s$�qnIc�9�w�D��[.-L0u�R?O[����`a �����VVV��Q�7���r��P�n�m^8"xU������������lS�@
�1
H� o��TE>�.�!���#�}%be��8�6c�����Y+� �k�B�i��3�ba�V�RY�����w���\u��@�z�f/����o8h<V�_x�u�����<�b�Y���@.�-u/Wtv
������l�8�"�w�P���{$"m�W���~�+m�6�
�?��H���~�������������?������������w?S�d���]w��^_���X��L3����e��/J�	P��Y�����F`��_���M��_�4��� �	T<c��g&�Y	��~�3	��h@��2�C�w�Z9�s���o	3�cA�	p@����4,��P��\����QX��O��)"�~(��?�U��x������p���S��1/x0�"��Xq|���"��Q/M��,�Q}	��?�@R�@����'��_�dq<f)���d�����S����/����A<��G�������up�������P$���X��LK��z�=���q�����&����C������I�dV��X.6�����$]��M�t	|r��-s�=?����>/��|�	��1�����r��/��F��6u���Ra���Wgd}t	>����I�6�@D&�d�u����������s�-	����cdV���iUO}��"g�?�)��U�B�jV�	�VY���iPz��l*S=��>"S��\f����V�: O���<!��,Lj�%�I�~?�d>����PX�AK�+4c���L��"v�&�'&{��u���E���2���^��Rg���-��7������r�9EG�������K��4��.*2�)��Ts���y��Z������k��M�[��.��b���A�������iNq�fi��l��%c����SoLyRc�]���)���
M��������
s:j<Sd���AP2��U�n��<3�^
������yN��L=A��M����}�M=}��T{�2��6���������S�l��
�U=�	�x�=ry��l������WTv�����@<��T�z��IGu`UhV]y2#��lz�"�����)�uDll;-�9K�����k��:K��U�����z�O�������([x�'���uD��S	���O*U2�������f=��,g1�gcvu ����u���QmyK[��=�&����@1�]6���[�
���P�/�f6���s���Af���g��IM-e��^��_mPv�������hd$E�����^8��M�,�qv�����F�������:�����H9���m6��<wZY �F���(��,GH��������_V�/��s�=h�����G���A�
P�2 �#,r�=k�U�<Q��V����P������]C/�����>�C��o���4���i��\�
��fh:xpd��Uw���������a�����k?E�
:{$������1"�ZK/���U�N�D�G�y��~7���XRd?���I���'�<j�t23_��l�)7��Lyc��d<=�7`00�Hj|�;R����s?����v��O/Vl���m�
�i���8I�r/u��.�
���f�&t������������h6"�2�����B����P(��R����*�s�&��	�j?w=�LB0{-��]��
�����x]oQ)�
�:46�J��i�[v�*2Gm�X�������T�-^g@�G6���:�N������[�����������t���\��7f�����<���,hQB����1L8f����'�������������Stk��ERJd�����7&���/�������z�79)2��Z4�!��Z
�(G��� GS+V�n�������b���4>�+�����X����k�(rO�I���t��x���wn����Fd2A�����h0���\�f��!{�-�����2�j��������@T����,_���n>�]EO&���?KNR��;�0��X�	#Yv�U�	��p���[6Lv#R�������^�S�\*\+r�QO �eb���u(Rq��lN��=#B
l�����uNU��L�]��f��U��#2}TpZ�`4$��\���FYSj��S��� W���0�I�?�X����?N#�V���f������|�UYr:��
oy�3�*^��M_��bHOw�\\�K��X�����O�T*�.X&�9�����2��P.G���t�/d	���C�������{���)�j���L�b�qA����j@�N��X35&w�0OQ�O��@��D[X�����������;�</��K�G)����SV��K%���r�����M�ee�[+]j��`r�R�0;"�V�T����2�G�<��5�Ju�#��!�%��>w>�;��^W�T��,��y������ ����_}7/��P<��.=H�|��<���4zO^*��-�OSnKj:O\��(���\l�<vD��b��Q�������u��6���80�B64��O#�j7�Mz�����H���������gi�m��1[��b^���	���p��#��u_�@���|
��Q������~��z�<��Q_q���#���)��6����^i/��C�{�-���P�$tu��dJ����<�
O����u��E.�[;4�\����"��uR��0i��y�������p�����������T+j]{���4��M=����*+��*���\f�����9W�Q��s�|&K��S����+B�b�s^��Z��=A��^��X���%�v}�
 -���8���P�ji��C�> �k;�F����4���?�_n;cp
y6�<�a$K�k�<�G�����1D�;��?4o�m�~������#���o�o�����hr�e�����S@�i�'���������/���1�[3������Hv3T���}/������8�x�gm���o??0�[_�����f+��[���&�<>@z�����F���K�V~�-�_��{p0Z]8,H�}���s��^��������G�o��.�CvMi���Z�}C��bV��������,�4��-[������>��
]�����/~�p5\~���n9�*�C��I�l����KF{������h�~�K��,-���xz��`�0�bN3�7�6���m����e�b�c�!\��w�M���zr��5L�{��e}���}����Ne�B�v@n���t]���e�G,����Y�~%��G�,1��X�����l4�^���&g3b}����X�����Q��K���X������W$����I��M������y���D5=Bv����(VC"�Hdj�X�������XB�+��hw�/e��7�Z��M�"O�rw�����c�-�A�U��QD�? �v���������l����4;�����^#LJ��~��_����!�
0�6�`?J��[YMc��������e�����V(�_���t�]�����2^�(�\w�\���^�X�_��k�nK&�u�u[[Z��X�oWw��z}����=^����p}��/����?���zw��^����x�����6\����X�o��m��v��^_�������j/����V�������~��:���:���[��N�\�X�u����u�!��}����{_�},��Z�N�\_���X���?����]�X�_Kwb�������?����8�����?�u����Z���n��u�}�����:��j��Y��z��C��������[W���^��Q��^��Q��^;^��N���v��b}PtW����__���
\)���
\)��W��G7p�X�G7p�X�G7p�X�G7p��]����p}��/������:�����~^����
\)��{W�
tv?�o������:�����!J�� ��
��?�!��'7D�������]����rCt�On����
��?�!q�n����
��?�!��G7D��������]����rCt�On���n�y����o7$�W�\���^�����z�w7$��~��!q�Z��������X��/�>���;�����B��}������Q���^���������X��/�9�?v�o�ar;9r���"��X;;�"6�N�7
e�%2������7�
d��b��
$����BSOl���
��zP�x�l�RZ�7��q��� �JV�K�B� �r��/-��MGb�sW��,�x��*�LeYn�����y3E�1.�23�qT��)uY��M�?v&o#2������*���/�����z}����P\�x�*�����6�v�����~:�3����n��Y���{p�I�'rF�rC��,����5������[��#2u�x�R�s���F�'�n�A����H�M�����;{�J�!��<�p���mm/��������
�(W%U�!���X�G4%��Dv^Tg�������{�+����U����3`p�[�l�"���^p�\P������R������hP?�wEf���d���s	LH�s��1����w��2�;5/X�1��d�F�h�+������{��{+g�
�z�J�+�jm����n#���ddh��+����avn��rx
N��d���~�����eO<=��2%�.j�/�I����y��������0�����b�a��L����&��J�l�!L�
f�(\�D���
9-QK���7�%d�
?@q�i����(����^��[\�����5z�$8��������E6�M%�7��vF{������:�)�w�H��yD�qw����n�4��O�`�c���rO
u~�w�#�H|�b�c\#��ap���d��#��B�4���1���v�=����\=�>����>m%A��3������a�z!��R�������iln�"���WFJ�{�
���` S[��L��q�e�6����MI�
��pR���]8�pe�z��[�����)�7�
�,^�|�
�+$j�'����/7O���h�XxO���_���%=#<�J��}��[��O�e�*	o���{��l��d�&�-%������|C |�+�B���pw���K����#	�M�;�����P��5�::�ux$��_l�3�{&.U"J�)���4 �t�t��Q��f�V�e��oTt�_@&�;�����"�����
<o���M=`
���F�P����__���v�"x����H�����n�)L';�8�����C��@�'���������oG�/���/�����l$+�W�L��-��nh<�a$���`��~���|�{~�&���/�Uv�k����1OK'���N]��EQB�?�k@��$�8�(:(����}'����������z|��a1p8pQf��q�k_����}��a�^� �d7�f��K�P.�����l���/x�(:U�){2��>�C�!z��yf��u�O���]	K����-/��e/���4V���g#c��8��gaN.��D=�An�y ���{Q��xM��0j�������;�(�S'�C��6�l��i��o�Dk���|�������O�pu��+�)CS��t�4��Xx�(������e��;��x�=8�T����9z�]1�2Ue����=n�a�����<&X!_4mm
�U��
MUHy�.M`�A�C��>'��}I�yGX��Ec��7K�����3�+X��pq������J_8�8�m$[�!	1�4qc�k7���z�F�:W����e�7�.�rG#��3$��5�;�$p_��)�p�<E�Wo�DH�Q�[�����qsq�:�/��*������{���9JV	���1�Y����y�����6��Y�#)}(v-
�l��}_�C[kC���I��V��7��1���a��>J��o����QB��d����p�V�E)�E>BS��&=f��9V�
��Y��-��h�E���2�A=l9�q�h��a����s����UH8�^���q����n��r��2W��3 ��N�aTv~�3��o��q��:[����Mc����/M����A���1�@rq>�{��ya��\TLzW�y�����-d�3��zFRBj#>+2L��F	,���V��9�bN�$�@LV�����B�����_����s�����������N/���#����/���8�A4K�usD��ke�n�.�%(d*@��������`���>�8��6'%���VT�S�����	bvZOT�7 L��W�i�qNA�����V���B�t�����@��	dD\a)}#�������4�o[r����H|@]]�����%�k@1%�r�T��:�s��I

R�X�L�z��v�>�zl�jX�]D
�K]5g{���MN���{a+�f���'_�f���	��y��>��V����|����[Q|o�@&�J<p���e9b�~D���w�j�j�<e%=��[��cm%��#�{��a%����PI-��F�����c��|A�����b���G�iE��`��pwo�j)��cMGRd��5��$S��
���;�P�E�@S2�������be��d����f�<�H{�������)~T��M���$���Re�2����<�j8/�3I�d'�����M�D��)��������n����j���9��1�����?�Y��o<��:��d�����Y�J����������H���*J� ����Q�K��n�����{,t�u�J���~�r���*y=*��~S��*���u���O#��S6z�I8i�_���J��U��B��se�M���������4�{+���B��=,{H2n&���i��y�:��
���}k���s������6�I���1���bU���T�C����GTd��4�����JL���l���0�#�*��!�����gD.��)��%�����q$��J���m�]GQ��Y�c@U�
���j���
�����$m��~�U����h��s���(��M�@���}��b������-���7�J���h_����jZ���:}u�>���N��k�w�d����/d <)��Z�/����V���:r��l�������7�uM�X���|�!`w���G4u�[�=V
*=��Y�<Q������[��X��A�c�?�}�M��m�}��t�Y+�q
M�v�Ae���;%��B�B`r�/�f_ho����+�����:�5��c�x��|�5F�+hV���sK��9�����1+�����F�#F��\��Z�������y��t��6���?��yB{+=��w`�fwF8����Z����>�v;��0q�2�	��C�����zP!V�Gk9h<od'Nw���!�7ES�������T6����t��fs�����;d,�=f����U�:��B������Y}�O.g.�GhJ���>qc�^s\��'��9Z��:�>3FzQ�U����b��l��v�-l���n3a�7����vT�k8;���o=y�mz1�{y���f�e���YD�w���Q7La�UA/����{$�;,:����"x���Q�+b����o6F-���}$��
,�$�J���.�9	�FD�vY��{^]�Y���o��6��,���c��y��K�����~�B�������'.�A�gj����v�\��}�Uj�o������>"1.��vk���i��IO���#4%�n:����#��������w���\3;�C)�����&r�K�o�RF��#��n�889N!a�(�q������K�wU{�����%��FU��m�m����-����CoBo��z���BG�2"6`�R����u���|n�+#2p�]�r�4'��dv5	�UE��#{����J�VF4u���kU7�he ^�P.��V�mx����r�1�K�?�}�Mc�1z7�8zw!N���G�2��O�<o�_'SGU�����0h��\g�9G�z��qRb�}e1x7"7=-�]���CX#*��x����1��#���v���A&�F4	�_���Cg:`bC��]�Mk�6(�w*��QS�'����{DU� ��s�@cx=01���}_�#B1�7"{y�Ra��=r%Y�N����F�W�����k�X��2A��T9F�zTe���35�7+�>k�bJ�2�7"o�w��:�1��98�^����������X��3��35���X�Z����"�o|��eco@S�O�
�[������(�t�~?J�\��(�r����~q,�f1#���c�B�>GM�<84��B4=��;�J�)��j�;�)H�%Qq,��{N�	]w,GbrK?lr�h]���/9�� z����3�P�]�
���M{�\1�H�M��f���?�=l�}V�"����1=�p��0:�#�?$������s�EM������F��8���exc S�z��g�18��/d��E���9#��E{b2Gas<Us�\.��
�t0;�WP�}�����oK5��K�L�
���<|���|3��1��|$�l��8���p�2nd�ke!���*�h������50>�����t{/c�?����r���x�JJ��[��Q��*8�h�z�!�/vp��Q�,L���;-u�Q	q�7k�C�~�F1l4[��9�=�����h������8OGc�#1���Z�������%���p�8.4%+���8}�A�2�S���rl��]�p���`��d��V������r�<��
�X��/.
���B�7��}��g-��/U{w��;��1�;"hD7�e`\���|�E�"U��U�3�F���cnz����y�b����a����
��8���{��H�H\�o
F�
�1:}�oV�L���w^h�Z�u^j���a����1�!=�p�N_j@�9�����M��tc��?�����FA���,�%A���H����Xh��YiN4Z-�E<��7/�]�F#��"�����D/9t�����-��g�����v��_��������K�����f����_��H��G�M��Dwj��3��������}��d�X���n4~�����
e���z������>g5"�c�$@�H��d#1Y=�}��\����z�u��2�F������c����&'�V��nw`��u��hsL /<s�,��N~��W�����@P:,���-Zj�Ud`��*��v�QDo�DA��/��v�o\�T�o(Eo�6�B�����6s];�����:w|Z�����Q;29�d��1�OO��/��#*lXJ�2D3�&�1�z^���P.D�������?3 ������c��D��|��y���
6}�\���������bB���y�AH$S �E�X6!���A>��5��ao�������������Y) ����*y�wE��BV��4�Q7%����u����or����9`�U�2����x0�p^���x��C���(>c���q� ����1��;������z�0d��C��@�����~Y���b����{q4��I�������F1��M|h@.��4O��\V����q\9t�|��y���p�^S@BY��l�����y#�i��&)k������{����*��FV�������WfV��"�\G����
01��dFr���7:�������XN����!5y��VK������B�X��U�9�:u�/��\�q����0�Zo�) <�����$��q	�
7��YP��ylH��i���b�����.j���������<�����s\-��k��3Kl�k���T4�g�����kDw�q�o~�������g��^mQ�=�02#8�����U���F`"���AJ�������,w7:�O��@�}�d���"������^��\�M99��,��r�\�!W[��� S��#�^�����5{7�������;�����;d�X�g>�]��)�]���2~�d�N�����wzb2�3;7Bd��dq����v��tkb2����;����
���?V�U�y�����d�^��F�#U����B~^�t�����Rt�����]?�]�a��HL���b����6������
�X���H��=�7��������8��3��W<�M��GB���w0��x���Nv Ed:�B�Ls�U��p��Xh�iPDS����.��1
��FJvx�Z	��^��Ev�[�D��bgL�m���E�d���6=���P�|�W���������Y��]��*#>(�����������N2{�������
��W�,�����
0�o*s�>q����eg'�������;N�P=/��:�[�����Z���~���t���w�+N�X&*KO��K�<	��S��]��� ��KO�Gl�����������1Q��SONLTM��tu������W������Zi�:���[hT)_�I�����)/\�\������_@e��\���b,�s����a�@�t�����N�E; �����jj��y^���t2��^����.��N.�f}������O�7��-���gD��0�7��#�m��2���T����v���[%h*�L'r&����7S�`���	��S9G��ahW�/������7/��<�$?3l\���P��!
_��Q��
y^D��!��7f��|��"lw���/��
v/��E� �����*�|�6���'bP�8�?����]+��u��H"pp0����x	;���y����sz|��X�
�C�p&aDXw`8��n���^U�\w���fik�M�_�#���x�J"x(2NE��g� ����I�X�CR�M��~�m=V��=���C@En�L���Zo6����"~��0h�N��{A?�BD�`O���#����.<��fQ�fOR�3~��X��P�`��)~��C�	�U����Se�7�H`�^����Pg����}�@����{��*��"|�'�_Gx���>m:m�}����Jxc`�C�:{{�.�4�iD�~�u������G�����z�CW����Z��%���o��X�{�!���$O�M�6��>��D3�s��r��n:Em
��(���L)2{X�U�d<
kK'�P-��G����=-tc�l�)��#)��q��HLF����?!o�#Vo������R<BSu3�5�������F�y#��{T���^FO\^��K���;�C���Mj�)Ga[��H&���$��#�����w^��;%`���K�S_~��*J14;��4��E|Fp�T�7K���;�V������%�yL���0N3�`�R�=V9����p{��g<C�%�Yz]�W�r��f��|
��AKh��3�_ ��^�qX	V�n!?"S�%^6�K�����l�D�d�\a	�9��')#���0'��Dp���]��y���<U��%�#)�cC�>���{_�l
;y�|
;��R �#�%��\��cj;8��_|��lk�t�)]+�:�N�R]����e0�	��v����,.�1��F����U#a���9��A
H>���������	�#�n	(?/�������S'��dY���3��h�U ����9.�����u����G�Xz���_����������4��RK8��X���(v����?w����H�^��y���6������)�~v���o���l�)�]����������������`\
Gu��Q,UO�X����O�b���O<�V����W���L:��i(��O?i�tB.~�*�Q5����F��~�
������o�1$M"����x��9��W�yW+q��2��n������kFH&!W��M�b\
�o0��tE13b5����l����nD<�]���Nm�P�+��
N���&�}ZVU�y�/C�	���[��R��F���`e���D$�6�
�u_�}V����6��*~~��bU_W5�N�5��A��[
;���
�==x@r��#3P���8��t &�q��T[Z�����'qi�S�L�-|9�ESj�C����d~�[�
	[2�`J����f��(Fvb	W�����*��N_�uM����������!7�V,�H��2��^�O<���F�2-�1��BK:":dI�N�Z��\��6���U����2�P��9��@�3Sp,2�aIGd��aI	Z�������P�?Y��P��ZR{����#���}�C�m��/o�$H�\��#4%;�f/M��������6�o���cNNu> ����c�7��qS1����MUf7�/�/�z���A���AI�j=3�P�Px��3�21�"Qd�f$�m#����`�d�1fZ�Ek�zQ�������������#[W�deD��p���"EU�lN3�==Si����(�(���P*O%��R��s�������J%�J*���.�J�,1����J%T�E����=��b�E��������"���S;�GLa�$�(g�L�C�@��"b��5����|/����y����ld��8���X�P���*��P����2�*�aX�P&b�s��U�
QA~�����(Q�!�t���p��lI��\:��E��Y3b����$B�4
�D���M�AWF�S	
��"���i@	F���V�P�*�+cEXO�pq�E�=q�B
��"�rm�Je@�R���V������D�2%�']��>F����L@N�>rZ6�W��;c$#���(h2+q �������^T�A���IPQ�5gA�TI�g����&k�����bC��>���g�D(�gB�������Ci�M.��E��N�
Vn��r>�i���p��1f�#���G[�d�';�Ci���Onu���h��yG���-W�d�2��c��<�=0���^\�1��;�|���8W�=����0Mv����Xo��K�}D�'&x��z�*������$�%�?>���qr�O*��{��|Rg}�n����������t��@�x�|���p@R
�����C}p�����eI?|�'�g$T�v��Y���z��v��l6��Y����{�]�v��L=����
�����z�Kq�$��?:��(���������&���R�����J���7(��aQ"�X��G�U�������X���`���T~I������W|�S��@lI���S���\��;RlX�|��W����QES��ivQ�V�t���?����D-i��D]�y�`������������{�>/q����|���!ve�]��l�w�J��4.����d����=��%;9��0{9c��2�^4��aE����=��}0N��`��;�MA	�I2�.`��lZw�D��4����2�.`s��"����8zaD�Q��-X~�y���w/E����N�u��-�*���;�=�������O/��!G}��)-�$�@wlUN�I���T�Kz���h���i�~�	�0X?�^)
��KC�_P����mO2���T�����F����A��+&�*��j�z�Q�p1���~�m�[W���2�*�����_��(3EB�����=���G�����jZ�(��b�(��*��b����h}.���"��)B���
��U�y{ol�O��[��{���#�����L,�>�9E�>��+
03u�C=��"��3�1���b��s���9ad���"����2�R�B9]d�e|�l�g���\Q�������"u���V�u���U'c>���kj�^`���Bb����-��F=U�Z5��g��I�=*E��
)75�K>y���^0���~��������C�_v*BX��
Qk�*-�'1Gd����G���P���h��[�f�PA1��T�s�`q-_���BwG���Y�v�K�~T��[w��r}�1���^�#������j���u�����/�]�4�[w���d���:���Q~^W�y=���,��G�y]���,�����>�?�K�$=m��C�����%�Q�����!�Q�C�J\��{�J<���Y���|q]���/�j�x�����o_��~l���������������S�oG����\������
�����~���7�M����EWL�������������_�����������oW�������sq:%�N�_ Z|{z���l,��F8� ���wS_]������cL�i�@l���cx>�.���*~���7�'(�9}}s���'���/+1��M��������%�l���z���8y��yq��X�G~���������JL���'v�%����h�7�vm�z��7~DK��|�}�3�)lBw.�"����~^��p����KRxzQ{���G������I���l:�3Q������+G�s�������L��-��e���Ek|H��t�������Pv(yO����g7��W�FWsl��l����o$���g$S���T,��������a���E�8�[�h@����-ZuIg���d���iS����/����W�����<�OC8���==�=�����=��"�M��v}��r ���\����o��x���>8�_p�-�`Ovm��9�[�v~M��&k@|���'�d��p����k��9���'{�@�d{r4%�5��������}��������`btCW_����k���v�2���?SI��K�;�m�/�����^�]��������{IN�1��|!u�wC���
��;>PE������f�UL����/�`��*�F;�`L=�T1z��)[� �tE�����N���{�J�v?���AsEF��:-�Z��:1�Z0����WN��0|��$�����Kn���������1~��7��w��&p�y�B��-��T4
d�_��+���U��Q-�[]�
�+�B��g��V�4�=B����d��kQ>��k6��8�K9�I�z���
��t�^�������l�!;BG���&�ar�7K ��h�0=Q���@p����w�A�aD~����������\���^�V�^���B,���������oie_��[����9������<�(
���`�A��NCh���.4� �@Q����
#��c'eE�z���f�,OF4%V�����/#��$�����ok)r��?rU���w0W�4�Ws}�S������u��YA��@����Z���`��H�k���e����{����t�Z��1����sY	z !��O9�1W������z��=$Uv����������
xA�>O���l�7MQ�zH��
�u��B�l'�%��=q�WM�0f��~qGp6��0�@����+O �mH�����8?-����g����A9_�h�y������p����uG��@Z�f=�����s���xd@���)a�d����u�nU	�J��s���y���k����$�%��q*���iK�������q�N��#~I��}g����������l���3c6�B�s�K.9����?�/�����dFY${�]��^4�D_��J����;�dHFd %l��?�����"9Fl�����aa��@�q����i]`"�x�����3{�@��y��KC�s����o���@X����FTe�&���4�����^S����4�V�k��5c,v����~nY��8O���}��,���_I��sJT���
P+���1,?�������Ke+-�F���0v�tct���#��V����G������%;�5�U�
P��t�x������0@P����*�.��x���w5���T<;3����a�C�HB_��i���j�N��)��(����7�^3��{�B�-������|�}���L�z@T�I��� �������x���J����/8�����|[���������Dt>��K�	3ZK�`�>�2�Q�S���l�c�bE�����Ll�17��0���yJSS���c��Q&bv���3;�r������%0�n��x?����GK��t-a"��%�b��&J�i�!��b@Jd�O$�ZE�9��;���j�y2��L�c��R&([KKL�m Ui"�}��p���A�.�[tiB�}����}�+,�l�v=U���K�Y�gFIM�.��wE'��G��|��&e2���^������E����82I��J92=jkVEj����G�X}����(��CK��.Mh��������M�<�]���?��3��0d[z�0!*��3Io<�+�����s���X�9�/�*�/���(�D%�����a�d�E$�/�#8&�_��'��ln>��
T�E�� ����������sZ��v"�6f�F��m#G�����z��
����3����7q��v@:^g�7t���h�{B��0��g+�4����g2���<1�o.|J���h�-��L���x]V��0��~�wER�-����t����P���I����k��t���5�v���Y�`g����m��O��V5��������D�)���'��n�-�I��d�%�\LVS&p�)�5���m@u�&�,$��`�U�N�H���J�.{3�S��b"E@�=�����Wu
rFX���m�)�;$���;�0X����E!�?�6I�V&���x�����X@�	+[���[��#2���h�d���a���M��	����X�������-	)��|���}5������h�nX���h���o�'8�*���t",�c����:��2l�xB��,�!���D8������m�4�n��}�-���9����H�*	d����Z@��O�L��F�!���#S}���0X���Co	Dd:���(��h"��
R��Ju��W,���V�jR&��k���~x��L���i������pA��x�p5E�����N����]c���q���R�k�����,2�
`�6D5��y��h����`gD8v�;�H��xN����P�#gg�tT�g�TU��v*�.S����!�����O�-+����mm�g��������9�����$@c;��F_�.zS\�~B�@6�<�Et���jK���q!!��T6���[�����3�z���$�*��3�.���/�:K��$C����Jq����~�d�F�"�bhF��u��/n��8]�`�|&SQ����m2�h��	�������;>GG/���H��~k����L�Z+eXE��b�V\U���Z��[?���B���dt+�w&CrF	�#k�P�u�?����
_d�d��6
&����6B�BDwT�X�����8���Q�X|�9��h���C��������.������U/lh�65���}��&(��o�*Pf$���W#����!���p��
`�X$]��~L0�~�V}s�����$�gR�9��e?dSwL4�I�����<���r����k��h��o�PW�������'����r���>�~��-��U����u�������ZP8���4���J�������6�d��������G�'��vA\q�����pJG�DD.�!�=�&���1�!w[�������r���la�>�h����sT�}��=w@������o�d���S5�;����x3��TT��)�G?yi�:���H_S���m8�3�c�����x��{�4@�M�j����0Q&�j����U�FT�X�t�\��k�����X��*��7\�ug��7��'�&�3b���<b�OU(N�������jM'���E�'�l�3�v?�IC���`����g2d�����`z��f��=!Q"���?D���<n���u���I��;���0�6k����I�����w0��
����d	��M�����2��������s@3!��3 n��>'v+��,h�}G�!��2�gB4�<,c��1�Z� �w)j��Q�'�rB	4����~= )�������*JY���28�#�4}C#Y�����Vi�@W���(������`o�HD�X����u��<#��}c_��"��\����.^U6���@�O�>.}F�.e��k� 5!�m�G�?^LmG�f"���{��=�NI��mA���_E�7o�7���3���fp�s���<���W��VG�w��5�"��7ict7���������WF�����=9{A	�^��������h�s�$�wi@5�r�6�3������v-��B�8������(�4]�V�n��{R-�����ur�����Q�|��(41a���;l�D8%��(�m��7��i��q��X�+���@��x����EFD#�c�D\FLc�\�j<6��8��]��:0�p�0�L\�y��<VCJ�
�L�l#�$:�;���Kd����V$?�LF�������h,������R��Y��8�PJ;��5:���8�k?���SZ���V���]d�u&~���wa(�
y�sH��F��M#A-�W�c�E*J��k�F"��	:�7���f��v�x��]����`���D��5�f}V��i����'����@�����.��M|��EEF���k.K��KO��H �-.������ ���<�$��g=�6F7gd$�#�&7f.�H	_�u~*?���l	I
��8���\eU�	@AFA���B��$|��uF��_Bh��w}M��U~���eA%�
��J�BPC�X,����I���'���L|nA#��
$���$og��}����(j���Vu?���h�#���Ic�YF���wE�D����7I���q�?�O(u�H�'�,qB��7��t��Y���� ���PQX�'V�f��`g���B���g��YH��K<��'�$�#���ai������_X�����PP�y/�,Qf4d���	lPp%##FE]�<9CY�����xYE.`1����:�:�$�=
: ������`^�"��qx�:!etFBA�8�����2��	���r�fv��m88w�A+}/��)����c��9�N��(*��OI��d���@�F�y�� ��:]�%����_��|Rb�a��>�E��IO<&����U���*��U���u��8�+�0�Z���m"�j�����$�'��C�+WWc�:���L���N�>�{.b�7d�P��_��#Y�����=2��C ��`�xT���B����c����q�n�yM��ev���#�t�q9��.(��<5(u/v��������{NN�{�5*��_�����a�w&�m�������#9�.�hR��[V�.
�ti���X����]�X���K�n�[P�<����]�����.V��A���������n��T��h�{kV����+����S��u�����W�7��lk"#R`�K2���=M3�O���KQ�fXP��~��b�3)T���m�)#�=Lw��{�^���T���{���mY�aK�!���L �e�8�h�]�{: ��|�p'5�UC#��H�Xk�������Nm>G���;���a����q ��\o3�����l��z@>eAQ��)]�:xW$����sZ����?8O�;7�g�B��%����M}�H�dj\�Q��n�4
��.T�%��Z(�K�������#�P@.�$�����@��w�g��U���U.R4�M���x~Y���mC��m�<hAR>tD��6�/E"�����	u�����h�r�������:u�����nk��G�*GN���A�^�C�s��g�R�C�������H��A����4�3I��sg���GYL)o��q=����8	?����y	���� 4���"����3�������*�h���q�iaJ#�q;C01���MQ]�E���:p�D����/1���c����X��? �G�Y��1������0H�*�w����G}���"2��3�O�/s��`�_b��D!��B^���A?\���S��st�(7�i�q%W�Cv�S.�,����Q���k�N���A��6�o�@��C~"��b2;�����
 s��|%w��m�T�����N�>��Y�L���5	��n�x�#�Cu�^D���F��a��:�
����N�G{�8I&���<���W$*��� �j��ZP�T��f?��*!bZ&���
��6x}"���38���2]�?������G$2~��j	����R�75Xt��'������k�TbB	X���%�z����~t:����%�0�:��6x�W}>����������{bfkS����9����-7A�N���1�w��|����oF�7�H��4��WG���{(F{�3%*�9U�.�Q��t�$~�e2|V?wA����C6�9Z�`k�t��6kv[�
Dd����}W�������d���WS�v��vp4�KZ���.�e
p�x��\B��X�$c��,,��g�~��"�j�{Y�"��M��p�6���M����x@U����f���oV1�����@��p����;�\�d�2#2�y���["24h������`���t,���������,��Gr �dT���v
��)I14�G
h2�������tM���������GQC�<#CQ��?*��]?,���aw�a���6~%�!��m��(=6�)�0������B�g���������?�ZCU�YQ��Q`���iq�	%�(-���J�`\:�A���a�	���E�YP\N�E�v���K_P����7���6+�����@����������t,%�C�'	��(���Z�tl�$���j����w���H�C���x��r�DLo�����������(�"����������
�{�m��A�Y�Xs^��y&$�-����t��A�v9������VLI��@r���"�i��e��j��.���l���.ND����F_��H�UvG�g�5�m"��Z��L��n��Z���OW�EM�<�;�D�����4@�h��oA2e*_�o�I������N]}�0��-F�K��,��e}~&�&���nk���
H�H�@��+I�^bUVI<���2�����-H����t{���m�ooB2*��>���"0W�cKU+�!��Ii��{���+�D
� #hs�fb�wF�_	&O�f�����rt�g��Y��������_�����o\O~
�B�7�G�����`���G���������G���YH�+���W�g;�&��l���v�a����63��H�Xu�����2C�T��0<U�~��V��L��Y���M�A�Z��#
�n�)���GU�4w��v-�EoZI	G������z \<���C$*��R�A�G���v����Z�W�����g�v��"*��c�z�-���e�	I��Ql�3���;�����7q����:I��W�b�������!*��EXe����I
tb'�DJ=j2�L}W*��r�T'�Q�P���Mkly��F�[S����/�~����'eGE��G����{W��o��#�o.�(�G�=��8-�����'$U�]��,���p���������s@��q�,,X����
������<�g4�7:/(��:�:2��J���vA>���+��eAI�S��]�Y�?�F_k�D��5=z�����~���*�����n�'�wE�J�O�k#�a��lq"���H�=�T�%[��(�j�"���d��G�I1e.�5�4���"��ee�tj3������$���6|��j���\�����H��5����!ft�xd>�P?(�K�����O���ty$����";P$ITe
�k[����#����J�Yrf/9���_u�)���eD�K��������4#r���|�����������������R�_���K���w�sn�EI'������C�?����fP��!���g�����-��y�;�c�P�?+
�� 3��s�rY�`��'N2V�]�����r����@��c�0��I�E�pSF"�z��%s�)g���-T3���GA-��������]N�x��^�����)?���RCC��+�D���������#�g��Y�~��wf�z�DL��{:*V����|��
��Q4�����jU@{ k��L�,�IygU@����Yf&�/�@L�<�� ��9eYUr���� R��9e#r�v��HT���(���8����"3��P���RY�'\���oFR;�T�ZM�I�:�H�H��9d,�L���o���K���.d��D"eE3�_�)8@ND��r���s�F-i�R�b,�)2�Mz�L���K��'�� RP3��8��.�di!h/�m	vtF���hH�M+����h�hG�J��M���iE/�o4�3Y����B.���5�7�������P6�H�kS�4S:#�������,�%
tk��)}�P��.��"��>���G�uj&A>�q�G:!���&�Y�����!-n
�0VZ
�7]���s3���fB�����9��p`?M	��N����w|�����o����f1���#���{��dFtF���e��hF'$���hG�~
)O�5C��c�i�>��4#*�>�����M������r3_6������<�"��@�zq;I�Ng&9U�h �r���!�#&�bD�:�h��^����f�d�=���i��N�H*��	��d7�
@
+O��������^��T5���-k"E�~���� �n�Q�G�{I��:�T�Cue8upI��[h��1����LU>������H*�}��j�t�������N���h]�.+����|����5#�����z����N������^P��W�w����|^�N'�r���^�����h���v�*���V�_��r06���	tV�=0�z5u��#�D�j���Bq�
F����f�>|�Y��N5�5�Yt�#_df0��
�zfd�6~=���'G)�$��N��jS/����$Il0�)am.`Ib���T�q�ry����2\����;�:��`u�����1�����z����y~f\j�E�"�x2#��&����a/�O����s���~	�\{�s�q4���s�����	9f$:�Y���>�U7��NL�����G�����	 �*m���E'��B�{��H�Y�@�8������P=�/����#�d�5�d��\�hn�0rod e����U}���
�"��� 7������}(c��M�(HU�����8�3�8����}����:%)�d���tv���!)���_k�Q}JB4��X���z�]	��wp��t��U�Ju����@�A����L$��E�6�
��fj�
�h�����g����������(�_��(� ���tT�kH�p%�^�p	5�d�TN����Q	n�2m��������u�Y�4os�����T����.������`�$i�H
�vV&>LH��4k'��1�43��u��uH���R|���3������C��j]}��8��}7H"�����w-`8��~;�%s����HN����	G��AR���@�~���W�u��x5R���*�8��I��o����������Et��{��	 ����$x
�t�'"J�T�l�����e)���/�H;�~B��*RI����nu�3�*G���&��_�����@�ty��<3Ue�tv�z��L���+��g����W���,Jt�0=	����qY�S� NhyvMN���m�����{"�� ������l3�^�I�&�H�>!�L����m������:�\�}BdDZ��Ut�m���0��I�B/v�LB'U��N�X�]���������F9<�W$����K�����3F"�i���KSKJ���Ql��#���*��9<���8*�[��~-H2���I@vk�������I�v�w!C�G����B'�<{F�������v�waHf�_>��d��	@�%���_C��DR}��\���.�
�=��������V��B����D��!6�3��� Su�[&����.�D��k&�j��	���A��&�@Q��$�\~2d���A����(�!��HQU<�`	%�V9���7����#�b��v���*��C�M�v��P��"]�Kyt�� ���z���Yo}�L,!���+R��"�]�Ob��@J'DGH������;��l���8	���Z�����[��d'1��Sc}>�l�"r
���c���p��e~Q����d��#e1�������I��Ns4�$k��U��<~��3�2���y�&H�C��d<9��f��9�|��g�A���
f
yi��@P0_�>�3�E���!��v��������S]-]t�C�����
"("���YS~M(��	�.�4u��]:�9�g��yOd�9�������8���F�e�m,(��l_������(���F-��e�2��\��c�{�H�����u���4Q�v�Q�O�wm�@���0��C���6�z�n��M�N�)�v:7C�;3��|����I�3�$����d��L(�{j���%BF�������W�xg6�������l��D�*�V����$���L����&&�����D��& "�+�c����v��h�Y������	xt�4vDZ*3qI�FET���6��v�C<�ZB�'t���E=_���[���p�=��c#3�w'����M(�kT�<V��[��HJ�4�C�h�|Gf�����l�xY_��]��.��`�L��u�1;5@y�>��ESy��J�gs*���
�[G0�a��\
�vH��s������� ���E���O�7&W��-BF9	����������`�� f�����L�|�c}I���0��������L`�uc����Z-�*3��Xu��
S+�Ku�w��Q��N(�mW'�f�3�l~��P}
��,�E�`v
�����u��o�ET�E�m�P��
��b��l�D����f�n�����(���+1�u7���lO��.�;��h�&�loLb�a�VU@"���\��>;�2��-��o����|�{��6+z�N�q&�L�l���3D�,u��B�EkL��e��l���`�#�S?B�7'U?b���q�1v�����8�ML��k����v����"����}�`�a�@�pA�g�r���.x�Fz�x�������/hO�@�x���G�/�����}�`�/�rMB=�$�x�3]���-_p���3�$�xA�.h�G�j���=W5d���Q�)�F?c�{�;���;����OO���#����b�����b�����b�{.���s��\��mG�@�xE������/�r�b|�����[�r�"�����:�K����o�>F���~��SA��g�9��s�����k6���B_�<A��l;�F��H��Fl��)��g�����-����&�Y�hN#����rz�
���<J�+��
6x�
y��+|��E��Y����W�����p�
y�W����p�1W��z�6_�OW��[�S?���W��G�p��\aC��!$���s�SDxE[�8r��(���p�>�[U����t�l��sl���k��sk���z5���95����4����4���y4���94����3����3���y3��_����|���\���<�������������7���������n��=������'�%�1��8�7��������s��\������e�%�1~E������/��_������m�n�_�_�e�W����]�[��R��[Vl�d$��<_�s�A<x��.�O�h�O��:�t&R��Xp@Wl�8����� ��t}PBH@j��|e�Z�x!�0�'��Y$��	!�����>�u�L�E����,r�1+�H�JMM�"���j������;�.�%Q���18~��XL�[Tq~����������J
�(��'-3Y�p����K������5z��N}�������5�.�< n&.39T@��
��7�bv�A�S~��t��qV�I;��/MhY��}�XgF�o�X�s�)O�&�%] y�]���;��D�����n��$�'DY2�g�f�H������.��s!��n�^_�<�_�jB�>�
������U�&� W�,	���g� ��
�im���t���n�����9�J�i���Q�C�e�����;5N�b�22��s�8��n
]�;7�AdK��C����P�����w+���=Z��=D�/8�����IU0����k����;�r��v�SB��H���<BR-'����Z#���	.���[
.������;�(��`����~�i��A�CvKT�+�.���^!�I��6ob%Kvf����J�x	T�bAt�������Cd��XW�DW�xO$r�������4�K���J�!���Z�s@����B�n�6�1N���k���O
u���{�������1��edp��b����G��Xi@�=86wz��;o������K�?`����\0fv��kNH��dG '���(�j�x�v��-�#����|h��K[�W�9A��/K����@J��g��n\�[��
{�n�IT�p�a�<���mD�����w]7�C�]X�\Ph���b5�I�G�����*��LS$�r���i�N}�y@�;6d���O<��Eb��&ZO�����pQJk;�To��>�cD����z-�LK
�x�!��
���

��Q@]�)9�v���=�k�Y��L�y7 Mu������:���&;��:��Fsv�����Lz��{m���o�+zx�x8q��x���@���~ ���?�pd@���%�4st���aH���D�P�������@c���o��)����mG�/���}F���t�L�gEIq/aE G�Y3'V��b�#|>�=9����������	�����gC`�)oF�N�y��_�L�'YN�B
�I�8���z���|��	��������z4�XZ�dl���k:��b�%g��I�aF+�v����Q&����P�v^��)xWd�*A��L�{����
�R�>���-,>�kNt$,_r�^@f_�3��>���]3���n��Y��~T���3(&������z����f�zw$��@���A4#����x(6q����A��?G����������E|}L�z�h��P1�N=��Q]��"e���u�"1wP���\�����g��p���L���&�Y.��v��-D>�N"�9���i��dV}
Z��y�<����0 H����b�w���Ha_���"\t�u�/
XH}��P��]��a�F>�9��,��\�wF�F��^$!$E�r������k�e�N._�
r��������Z'��6$����	�b��b..����x	BL��mQ7"rGF��t_���(��8�����:%���j���������d�`wpB��l���1��L����y,���Q���C[J\������s:�g(�"5�Q*6�� ���.D� ��K�Eb.�7��.nU%*��E�����s���2G2�g7b=6 ��A�����V�d\Z�$j3�O�Ar���
�i�E���\y&%(����df��
3!�������l���>�����huV�l��Uc���Z_\$]���0u[W yt=3��>�Ia�n�{;x �u�=\������?|�H�R"6&w1�����-6 �x`1'�i����W�}Y�R�.���/�%K����-HZ��L�X>���<�a%��B����9��4��1�[��l�B{\��%��D��r�EK	���
q��>���	��kP}�N��+�#�	luZ������|�_�A�a)�q�z�n(�
���{
j��$
�1K)_��+��z�
����k���	PW�t}m�X�rM��$�G7���\�y��U4I�A:{�J����}�aK����!*���z����G����n�GU��V.��,4V��S2q,���d]�d�����u)N;p����H���������U�=���uT��V��+���h�`t�h�	t�\�P6�d�pZ *�:xW��4'��0�|�
b`4_��h�Q�����wAE����������9�3	2�[�IlN=�Qh,�_8
x��~bIT�Im��5T+#�!�Uo�����D�c"��6D�(��������Ad��Y��	2����T�m��q"%���Rv\z0Hq$����>Y�6���Q�l��K�����I��#�Bk��#�_�����~�N]��7�zB�J�4��	���U�y��������s��z�����_$�������~	�����oT������@�.	��e/3zz�����c�JK�}A`2I�j�����e��kb`5���D��	�����i_P����e7I��L�I����M�;#)U����d��-�,z��QbFl"C�[0����	��]X���YE�;�/��hFA������i����2��%:��OdT�
��S�
���Hd�0e:��}A]r/���d�]���&�n����cBQ�m���h�' �2�vt�T�%n�4j�,��u�v�]�����R�>��:z0���9S_,�!r4�e:��B��a���w��nV}��'[�	%}�Y��W����_���0+��1woMh����+�(YV�@�f��^L�����6�\���0g�]�4�������D��!c��v.�$���������t�e��1�����>v	��<5�h�n����Cl�h�L�<���q
g��mb/.��������	�s~�]P�nu�$�d��QV��}��>�V	�|��1
��������
b{���k�J��G��y��Z7����
8��=��$�
�o�����F��L��n�m:x��u����c����`'0D��z��d���$*AO���^T����y�]sO+xW�7Mj�J�x��]�:�o�����72I��YH�/t��E��S�,���v{m��/hT�~�A����V{Cd�Q�����S��r%��#�{�	������z�����c.�����L���C�{k�g5�7�������t^�QD���/v������0�{������	��[����ig��X�
Dw-H���x$���W<�m&x�'�V��u�.L�i����;�gY]�M"��/��>Q��]O@#(j/��qG�b���M�#(�5�����y�����|����
��?������
?����]�F����p�>+����&���Q���>�,.b��v��h��iN�#���3����,]t�9T�;f�o�[��%~)r�I�ap�"~���8N�y�2r�����jN��9n}���/��#�����	/�q�b>�D�dR��OQU"��5�6����C�n�C�B�r~=��i�m�2�6�|%���,���sm�2��3�W�����+2����b�������J����$"����a\g+���r��i�bo���S��1�%�F-yi�Q�w
��~��2��w3������i��[��L,^����0�&���]����W6��a������q��
��i!|��G���Q����A��D��8���O2��Q�Tw��Mg�M��v��/%�A�|_��r�USp��^
6N(��
����&0D�������F�uB��mC��^g$J��IL��]��U���vU���DB�����l�����?SCx%�����?�.�M�����q^G��������
�;��U��2W����.��`���T����1<e�D�x�����i|A��������4��X�x0�;~;�+^���\��������[�|~�!<38�+����\<L!��ba�W&D�����q�I�q��>+��%�:|�W����3�����e�5p�"��Yf^cc!O5����R���~�-b��GJ�����\��Hv��	]������n�Hd�Dg�7��%]�vt�����AO}�mV&�����gf4T����ta��Y}��.O��3���e�����������v:����e8���������b�_u������X#
N�����SkJ���e0�B������
A�:jc�&�V�\_X2��n��^^_�tV��K"��`A	�g~��}�����bQ��-4��2�����4����(��c���
���y�����B����k��/����9z*��G�pe_R��S������3�D���l|�fwe�\���~����S��x���s�x��i�� � ��i�}eBp\Q",U����4J�T�[�>�Y�?����t�?zY��;��
UW����Z��k~�}#����x(Q�W�WV�@1'����		����hW��1M,�gc��{,�5f���Po���ze�a��MC�S�~A�]ti�=,t������Oz?4���~�L�^4�Hg��o��.���5R���xz�k���85Q`�}$���Kv54����Y�!�*!L/�-��WT�I�n�FG5���i���0u�{yla���!�84#`?��E�y�S���6'F?�6�����p�_N�ir���n{����"�$E�{��m� 6v�D2��Z�X�K��q�� MOMd�W�+	�f~���Z����������'�k�#`�?Il����+��p��,"cr�QrF$�� �y��L�������BgB�f+� ��}���/cs��Ap�����'g	���I�f�7>�L�l��
A6�H�j���;���J��"�TkA�w	�lL|+����E��H^c%]����W>o68��3��c�
 t��`�������� 7�r����O%V!p`\�I�U?_����d;:�G��&A}gX����QX%�-�u��v5�?#y�]9>�����79jA�5��d�s���B��}xc���C!~���U�14��Ah��(aMi�����v��7g8baB
cU����\��	��.?!!��� �A�~H8"{����$���Z�������|���W�p�Db�8H���U��f����p��H�t&�Ro��A;�1��)jo��\�R�h���H,���z\�0A�Y��m	0|�|�����VV��n��e�tia%!�B!\��GNB��v�N�J�{��"#���>� a�8!I3�~�~�Yu�����%UBk�#��FC-3�����U�t���O	Dd�
�X��9�m�`�l� =F�R��eD��%h���������T������EmP?mfBtx9v�'�'9��n>���gB�17����k�j^g����f��O�V&�>p�y���!�-��	����'T@t3|U���s���&&d�Ok��hKuneA�en���Yfy��(73v69Ve��	e���������cR���*�"��<:}�J6��U����`@h.
�|�f���/��6��l-�U�WV(c|��A���nB_p��4��HTo'�R,����[!e yQY5k��5eH^ce�L�d�c��������s!�b��N(t
'�
 ���0��N���=!�����Nu�'$A��#D�����2���0�$�������4��������]�s����>>IK�����E$R�	�2b�8����m���Q�z��h'�9����c;!�������
R��:~���@c!8������!�|�[�W��Y����Aes�:�Z�2� �8
��m�yND�����&��;y`h�3�K�fj�9�c#���+�x�:�������.#�����I9���E,���:1���F�%�Vy��Bg�I09�m�����2��t�����W	�8��@#[Q������������
��c�>]�!*/��u4�X�@6�Vy��BgBt�=�����^����L����m�nF���-������P�V�Pgv�?8A�#\+k��RB����waCG�l�2��#'�4E���#�g!.��F`���Pm��CZw!]�6���8D=������>���k�V'��o���K/L�_�b���t�u�	��SgddB������,vn��^c%V�_��`���������p��]G^�����>3T�Z�V����\��2z!����I�k�C��gGe��'w��A��KV��C7�ZL
f6��.����4�(h������(O�!Nu��"�:�"��{���4�!�n������u>�"��A��a��wE��:�8�/8l��H���X �i���A�
��u��n<��)AFUg-�Ze���b�����a����3���4���]\�j�%��X�c��������mU��"�+d��(3�d���'[�
��]N�d�iAw�.��&v2���}nhD��.���f��63��8u*����c)����t�y���L7j�}��]D��<r�xG�"�yU��r��o�[�8s
����&��E	�s,]��X�������WM4.���*�=|�d|!xWTu��2�8��g�iy`�%�S:��0�!*���E��U�C�iC ��= ��S%����'�����U4�����E�t�'bC�N{��n7���ly�CT}�#���c��sbUg=	`�3�M8�Q���K��Y����������N�	��C��0�wa���o:Z�^��++�����'��GE�'Gw!�I���������/e�a,%!��5���0OPDZM�Y1#�m�_���(d����T+�+�a����m�������AH������[�u�,����O�~�s3;��6y`�(_E�!���A����*���e"�8���:m0�����d��P"���k9�W��?�G�xS��������������"���UD���\��{aR���������D[������'"��h�baC�B ��+��A~2
*� q_r�]:���f����-#�����A��6���qN�����K;3�u�7v������X�;�@:wD��wAE{N�wa�#�o$Hl�YQ��D��W����;`"���E����0g����}35>+{Y�IH�`4�n�����t�8��F�s-�t�wai,��M�5G�e`O�q
���	�Q=?1��W0/��y�:"���g06�����hb'������EI���b��W"�v0�g�����%!�DtK�\�>Kb	iT[�������c����n�W�P*M�w����_D��eQ�	���X3#gP&�dF��l���v��%���E��^��lEd���X$��Y�Q�x����
����U�;�{�����&����BDF�����L&��$3��C��K��q�����i���J'����Er����+C����Ul2j]����Y *��f�T��}r��jSM~��b�]##�jqrohc�Ru�~�&Gw
�'���76_��������<��A�S5y�L�2�A�����z���'&���"��������};;8��2�u}A_Z������F��g~���$ulZ��t�A����gf()�s�0�fc'�i��P3j6W��(Wh�l��D�i����s���Mw�����L�a�q�ib�����x5���&�>��K�o����|V�n�g������'�<A�d���+�{��
�����i��~�]F���r��W�r��#�w�,��Pa��e6,��"1�|j5�<1�����n��	�pD4���u��Hp��j�O�'��j�O=l+U����M��P�|�Lr
���eJx���|R����y�G�����g���5��f�'$�]:��07���0�������n���C2���a���0k��h�'���l��p7���f�Pn���e�
�a�)�c�,3X��'�p�|r�u���*��5���>���A��h�����[���V�,Oj��t�8<�[��������lH����a���L0��t���wF�l7d[�QW	z��G�>eAI�*'~���%��t.X@�noC*�'L�1�S�����aq�s�A,�/	���\�L������J��-,�#���Hv�g�
b��2�Z ��������� �2�US�L��7��g��"yt�'}���'�`�|��������`�O�����)f��A!���=�������_6���oi&Hg�R��H����yp����F{_[����g�Cm�sm$��e�	&�T�S$$��jf~Q'	��p+��c���{�d�??�@���sa.8o{�9T�sA�V\�B���#��	��D0�P�f&&�	��*���D��'�����DP���i���F�`�V\�zm�e����88/�Y�J�x�4p]d��Ne�i^qEI��pr��0
W:ThS@�r�������?������X������-���Ad������zL���~�)8�{6�P��E�FK���H����� �I�K���zB%q�������W��'�������������zt�oX��Cs��9����L�ZUPb�T�%&������,������`l>�MW�P�����q���H�Y���33�"�v|=�-M4���"!�Ov��j,]2 L9T���q�]����iu�	�U��Y����}XE��K���^Dh��O�������;�:��F�X��D��-{@��v��������5�N�����t��tQ�1 �|-O�������T�ff��-#����'��&�P;}5[���h������U�\����
�
���t���.v���rZgxZq��������L�����j���4u��!l���zsuvGV���%y`�
aF���Ocm�������	<��v$%����'��#{�IK�ZP��eXY��B$1E������N���=�r�S�aG�#�����"0��C,a�����B|!��y����~y``�-�"c|a�������u;��v������&��n��zv'1�@��H��+�b������!x�)7�}�M�	|�;1+��vN�~��B�!��h��
���L�p�NK����v��v����,	4P9Wu�����ir�U;0U����O��=�����09�L�>)wb*��v+�`5?����^�N�����k��c�'����G��zO����~w���	q�T�A��o��;0���8�w� W������s�6���������������T�7	m�z���1R��=��)�������z�v`��6U����&���}�U���j�v����Uc�3�,0:\0{z���CBq�n�={#��hb��YE�D7�-�L������2��AyWVm������]E�u��&*�UrfQ7�b���p7��i�,$�Hq���.�4N����(�N���^���we������a��u�����fb�P��U[��b���c��_������TK��T����,���s��jdb,RS�b��=���Cb>]�e=����E�	U[���P����Z�������z��"(��xF�.w�P�wEUW����]A����i ��&���i��zC<�N��P&�4O^1R��+D�W��IW@NW���9^q�3������+D���G:v����&�w�����������-��|	�����������������w-#����M��#	��]E?�9��M��[�:V���s�x�2Z��\F����TF?]V�k*�k���W�]S��5i���< ����?����"L�j�9���t�}����O���_�G���������e����7��Er���������������;���g���sv�.�Z������A�x$�h���
��5�:��_0���32��y0��2�%��&|�7����UD���b��w&(N���r!�o&cT��qo,g|Jd�n���q��#����
��%��C�<�j
��g4��7�r������)�!���`:x6~�BT�F���"rc#�|mv~0��@��;Lu�m8������,d<����'(����fq�)��5p�,+>o���L�|B�AM�����(��r���������H��x�H�u����	��
�|�#+�]�u���P�L�,��H=��z;�E�q����M=9�W���D���'��1�~\��`��+�A��0����l>L���NG]����Ej�&�)��VS�O�r(�<�I��$�k��X�2�$K^�Vy`�+�RY�@E%��m�@���$Y�u��6|����G}<6(���I�����@?0���2���'f�X[;�Io���~1�'S�{&�-���p?\k����k�ZG���I����A.��K'�!�0���u�����+�8,.�L$�
�w#|���������[l�����?<t]Jr��qt���}t���#l���3.���"i��RR�.��ee�$�O�iE;YJ&M+�/5�6�clPQ�g"_`FA��r� \������S�����X*�u����k��L"7$]��T�z:�zR�����%[�I���;�H��G��
C����	d^�K�<���LDe"'��a�O�~��
��<�Xy�7X�xu�$e�%�yv�*'�2�������d�>Q� ��Yv>���U.j� �t������M��C!�O=�����[V�@����9^>�!sl4��'��aB�<y��������3�&�p5}��@F0��zz"EKm�������1�Hs��5�N�A�IB5�&��rBEH4^��*L���I��q�t]�q�]��$'����8���G�&��L�Enx�G:���1�!���Qsm��1�T�E�t�����LF%�"�����O.�x&����g�[[zwF��7�7xh!"��f4@s�Q����f4@�s.�u�%@���(��yj��[��QAqHA�}�����������7^d�~���([���V����)��&2d|1	��~vl�����q���aUX��D>{�q�O�f4#42)�s���z^���x'��U�u�}i�-��$W�UyH�Su>2��*�|�Y�)�g��v����Jp�&��~�]�t����;1�"��%�:�r�pF�b��Q/�q�z��Fv�G�&�2�}_����x��	8t�5"~��s0D�"��/�<����H��d�
?d��${�9�tY��u���([}Q)8j��rBU
�����8�E�%`"Q[T��
�Q�	���r0w���R��N��>D�6�����~i���N��Tc}na�����j�"ll��*3��p�d��Mh��}�U0[1M����9��8p��_�W)�KH�1bF��}\q���8
}tBh/���-,_�������������Q��T��K/��<.?�~�6a�H��xpG�HB_��4��EA�J'T��R���4��������A���+��y����;���W���A����
��'5��	�_<p�k��N���7���X?�57�WZ|�����(�O�Ll��3��:��=�.P�(����6s�ha����S��2���������[z&�{�o���f��XK�5+-��v`�������q��0���������(}�q���V���P"S�x"AV������y�%T�����Z��Emr��������m�*Md��&<�f-�����~B���c����L6X���Je�%����(�C��ohx��R3�I;���4i"�NKv	wE-����5(�_�rdzti�Y�������jtBTo��������K3?��q��(�j��8��Z�����3��0���>�0"R#6�~��<��5�1��d�G�b��Yb�/�*�/��?d��i�}���qk2L��J�_DB�B�O���������|h6_>�A���!v5'��f��=���u�.4��A;o�]#����#�m�SlMa���D���F�4���M\!��
HmlFx�3-����u��P�D���8`_6�Q]�����3�yR�.|J��4>���n�T]���ee	��}q�fvFR�-�����v&Cu��&YC���!�C��v���YGjgA���K��N���>��Z���nt��"V�U�L�!x�`|7[m1Mj�����s0YM����t��x�������g!I��4k��v�ER=�+]�lgl�2G�D���{2d}��^����=�a�6������Z,�f�������R��v+��l9��l�sx@�	+[���[��#2R	$E��<�X��L���F�� � xW4�^�u1���!!�Q��������j������xk���M@��m��Ni;#s�0����F[���Sm��2���)���mUN"�O��~���M��:�w�g�E�6���m.[��\U �
������	�8X�e�#�.�L���� #.^��(�����PC<��%:�M�3��s*�xT,���V�h�D�����-�8G�&�Y��d/����/�G���j��A�EH��m���X���L�lA��5��x�c�
Y?��X�D�{w������t�GSW���jw�N��������\Gx��^!��H��A��/
`���25�UY�b����L���2hM\���{v�����4�`p���hl�T�x���KB�|>8�B@^��d�8�����BB2���
l
w?V��`��h=�lL$�*�����YZ�����\:��\__i".����������$���0]Xzzn��8]�`�|�$�-B85<���P5�'���	����?��;>��KO���H�{~k����L�Z+E<%�R�E+���V�@-��=8w�]Q(���9:��9���Q��Z%}����;�zh�M�����mL�c{$T�.Dt�A%����|}�[)��Z@Qc����������o?������.�����$X��:���~	�q�h�����5�E�����C#�Lo��!���p����4�H:�n_oy�
�~_t�-%�p68�"��t_�v}��;��3�����Hm���B�l��f�a��h��o�PW�������OUs�9��`��y?\�}����?i�P����c�;����w��<�4;6��lx&���m�Q�������(��D�L/h�+m��>$�������0|=�&��Cc"C��.�1��;�g���*����Z��PTNN��9���f���
����f���7E2ZG��d5}4���M�2��TT��)�G?yi�:�����f��ztP'2��>1��2�)�t�h��L��4�3e��F.\uj`DE�EO��%�x���	�h���e��r��z�%Zw&���3O�9NB'��i��
����������Zq�QS�I��p�I.����e����x��{������32r:���� ]G3N�f$J��p��h���|�������I������R���m8q|���Z<��3�.��20�,���n%h������?*E9��ff�V&$��,��.�[&D�H�D�!���)5C�:���4���f�B]�,(&�S)���?����	��?�f;b!C�u<9�@��|)N�X��d9]j��2V���k�AV���,R��e�.>�_�H;�$5�=[�7��CJ��������'�K���������Zsr��O7���+������A�����Xi���K��w"�{����e3����Yl�[���N`���zr	�B�L��[������fBKb�V������3)k���������K�Et�����'�/,���yu>�P`F�S3���5� ��'��'/]�CU����
���� )!qtB��QT����b�!����nxo�OU�>$&�����K�������X7-�3��S���@iX�5�]���?nE��"����\�6�`Z.j"�1��	�(�.��Y�*M�K�~X����h��	�H4��<ZcY�jF^H9�����Z�{����q�M������de����k��4�L���A���nK=�0!��]����M���F~�q���o�8��JB��	,^�]�6
�{ta('T�j�]�����#b�P�.mnl}�&�$3�6��
��x$���e��@L�����?��'�^����_!��gE\����1�����
��wc;�.��MwTM��Q����A�TC���;�"@��\	�|3�3�,��W�H�t��7�������{Fgt�1��DJ�{H����X�+���Y��{�O
P�
�0d9�.d�@B�
�Z�����%�mz��i���,�]�7 	`0	j�s�AW7�� 	hO(�a����F��;H�g!I��u�������|oU��_?�f@�;�OY�4��e�=�s��$tK���Xy����#3q���AKe�����Dx_�Hg��b��
/
�)
��5ybl&lv�1�-t��z�)!�������`O�$�#���aj���������(S;���7�^^�F��h�H?����JN{?���tQ;��!�3���\2�F�z�8����8��|d�N,�3�<��n��rS>�6��4^dq���t�	@F�����q����a��;��p���1x���H�n�5�2NLoc���#�2�M ��~"��A��X�	�.���V��E"Q�!�bv���[$>�c+����aB	\Y%s�����a<=���D-L�V��w}�H�������d��U�a��!D�+WWc�:��������mJ���ps�!KZ�S��)�0�U*�>��!�&*st�3��*3��^��3\��`,vV�
�����T�Yf���8�I���SgJ��u Q�R�bw9�`�#P�����$�7���^��6Pj��Qn��<���1��p$���MJ�x����1�-�x�jOBw�4�8+�T0d����nY��u�������Em�L���vFPL�dn7q���}W4��5+_WP��q�E�)X���k_�������p�7�)����r[�~��'�Q��WQ�f�P���b�3)T�����m�)#�=Lw��{�^���\���{����qY�aK�!��N&���c�� w�����:��:�I�w����"cW�7]n[t�����s�K4B�v��0Q��N�f\�YM��|dcH���)��EO�����"n�V0�m�\;S|8���`����,Xw�$�5����������� ���fB�>q�@	d�Tj�.m<�b#1�S�|B��������[
ox�;����Wit�[�
��;}Z��>PV��w�h4��6LH����	�����H���q=�x<^j4��YQ�~/����S��L��Z������1���|~���:d8G�$�R�C�������H��A����<�3I��sg��GYL)o��q=���8	?����y	��LBivV�D���s��|��N����LH�����!��)���#Q�A��0{���b��_�f"�y���4��bWd�FBU��z$���a��	^���Ce�N�����o\DLY9�|���P��Kw�,���%�����Y����D������E�YM��+��7&K'?6�����	�F����DP6����!�����H}�����qh92G�������Gy������y�*��q���>�
���N�������;8Tg�*FT���`4���3��.�e�I�q���	�~ih�C�Rg�gy5p��P��K�=��*!bZ���9���l���g!��>=�cO!)�%����O�~D"�����.^(�S��@�)y"_�=���I%&���j�Z�q���l&n�N��q9|�Q	����m�`�|{<|�z�%����%��{��gp��c��DP�������������$����n���br����#YL��=��k;�ta3�w&�Zsq��}�4G|B��^&�a�_��g���!{��-~��}�H���5��E"2�[������f��YB�H�pU���U����%�v���}��Fpa��-� @�4�n��N.~u:�d�)q-��J��_���DQ��T��N�Fz���4����FY��)F��K(�@$2��6(/��������"�����S����SZ�S�)k��|������/u��)��
���|f��4��%�2�%�w<x@���`'K���V���@�Y�HTs���HD�U��=|$f#�0D<N:Z��M�����u�&?4Z������4}��?f#K~�_E
U��+�x	T"�M7��d�����kX�%��_I`��x��>�_�B��3Dr���Ym���r�(�O��������?R[�E�� O�����(���N3���*���vK��
'`�R�����}�����7�S
�6L'���=��Z���?��EZ�N��1���������3�j�
����n��2	ey�X��`%�@��W����i���[=a��g��+�^h9������2
i<���Y��g����.vDP@$J;g��5��bK��a/�z�T��3�?A�����W��b �����R�j�C]k���`�8�|�����23BH�N�}��vD EV�9��j��D"��D�~0h]�N�
��<=j��&��U��eG�[���������G�'�1k67�Ih��'���daR�l����� � 
[�������!e"�U>xf,$�9}����2�QQ�&$VB���]0�{���w$�B'����6��r�[��X�,G`J��m�U�|����Yb�c�����
�R�����0�nz��G��F-�j�.@����>�z�0
.|���!'\u�
E������;�>���������j��m��@�_$����K������A��vv��c���L�62��"
c�N�v���d"��R?��T
�E�[�}�f�~�1�>���I��{9��A��51;*�UU���'�������MJW%���= ��R	�Jly
hC��{�:4��4-�+v�H��93�{���6�x�I�~�"6[
M��B���[{6$�l�w<��%�%/����r���b��������g�"���s;W��u����d0�&���v
�� '_���X�G�V/��-��i�M5��)@�3��`[�2�������H�G(����;n������"�`h�G�'�"���6��qGR���GY�<��+�^���^(X<4�g���z�7B�{0<�Zp���G�B�
����w�����{�oD>��� c�]^(�-�]mzv�����a��k��?_;A�c&�X���x��������E�G�7�W�mZ\I.��d���,��K%^r������:E�e
FI���+�H^S�bW����4���z����yp)�*��0����:�8�R�Z�����;R���O_W�����N����=��D�R��]��
�RT��<�~Iyg�
(�$������I���4����S6Kr�W�f�������G�|�����y�	����4as��������������������_����;�/��~U���W\c�+ �+�����s�
�����Ms�[���V:�6���(�����.W.o&)�p*��(�Z���Y�L�D�<�&c��["�\m#`�#&W��{8A&#�ex�&F����v2���
S]^H�7
����]{�Z����DVDD�������F+5���s�B�M��Y�d��f�G��,M����d6��K�z�{�|���Y�d�b�3�%s��Xv"y��7��[�&�7�"�����Vy��������Z�GT�x���l�����p����� ��R�ZRE^v.��A.���z6��T���"���I��I1�E���T�����Pm�O�xXs%��1�%���Zw"Y�6���H�s�+s����a=;�������UL��bg��8s)+2�Mo���+��PEfM7�2m��-�fJIJ��\��"Cv��nh^<����1L��Z`h5�5����F@J�����)�)Ds�!I`=��� �5��e����i7?%X�[���R:���nh^�F��W��t#�:��hL������(*���t�N���Z0j�FJ��KQ��4�;Z��`Mdj�YSA�����O�f1[
��������-�dU���!EV��ho@K����w�?�S�gm(�4�7��[�L��z-��b?c���\����������7���p�1�4UFzfM��#B��d��5�n�����`K�S�-���`O
��Pq[��
c�)7��
�����]��
@-*�>D�tg�|����X4�b����u&��I�<g����<��}Yvt����
�E�Q���v������@���Q3�U �����m�d7�f5�������jn���~�U����P�J������+�G��vu�y�q0Y�*��F���������
�fuC���3�r+��zQVj����j	f���a�L�h.*w�F���0:��A��f�"�j��v�U*��v�i3�������Q������%�{��,��u���'����jbo�u�1�A�d��i@��w���7���nQ{E7��nOMEiO�
k�����Qo/,����<����U��*��{D��3���$���H�tvF�������O�3�����;������z�4���Co@~Q�:'^��i��$$sm`�8�A�3I����E�"��dC���+��q�G%$/x��WOu�h
9�~�����N&K���h
H���t��1;Z���2Z�Q�j'�n�K��{������' )���O��S-�%�m�/$�����C$v/�^����F�oZ���?;y0�"�����z2����������d ��bg�/��G���4����8�#Rwcw&~��	 y���$�8���0�i���z��X�[�����X����8�K`��<.}}H$"k$H��dA3[�F~��>���R��V��8���N�8B��KG���f"mL�XHB��I�v���4�b����)F`�j�;]��pa��<�f7��������K"������K�+���J��	��M����H�'��W���z&��K�������Yf
�s�����
�Hr�?_��2�eB���hn��9C�Mlq;Z�?'�������f�������8���K�����;�L�9��S�3oM�K��$����Ia��"!Af���]���!���3���D��F�<o7
��.�!^����g���/�C�:sE�E���`G����%�M-.	�Jh���l�C�_v$�q��$/�=4B��o���5s�J�xb���*���]W�9��������V�Ql�\�3���#�Z�i���)��,��G�_zK$�����"	�t"7mheI<�,3
������{S�/��	�5��	�wK�����Q?;�R�&	���)�����%�?2Om�����;Z��?�/g3;Z�F�
l:O��IB�;����C��F�d��n�$I���,e/9y5����|�L�R[�r��Rx��Vy
��
t�����"�M?��P�*����X�p.S�#�UR��������<1���{�;�������ZfG�������Hg��S���rI�D{�wM����$�yQWU����% Sk�c*����1r�V�46"���)������c����^�q��Kca����������:�N��5��3:��jZY�+����
{��|�P��f<>a�zg�BMj5��������|��4�#5���3,
�<O���
�H�#�R��>o$����d|��WE��G�w�\��g2*��`����?~��������"������_hN[�rc[���9��g�d�L$���0Z��;^�R����1����d�?��+/��l:���%�-WV��|�����y�Q�E���.�vb�c#�m���|�j����$�h2�@VM�a��M�p�$F��9��}q�����w�8i�4]���"A.:�Qjf�YpGR��3��7 %|N�����cMt�!���@��7��dk����Na�g/�����
(�����.�"���7�
M]���K�eoh���[�ipa���GC�P�Ue�t����b�w��e�s���;R����-��<�7��K-z;�NN������|�&����O��^�E�;���	!���D"��N���(3L�4�v����|bR���������"�l)n�g0i��������POU��Lx��
IA�d�n4��T�J��z��l�������<ew�������|Y/���x�Vq$|���d����y{�94uY$����%��
'nz���+$[���������H�QL�������=,�|�"pn=���_\���t�%sI���}�h�Y��14YQ��i]�v������
�3���������bl%S�4FM.K-��'���,���r����O;�:}�,�>�i9�2�>����9�=�5��b�(��S��WfV�.}��D2���"����Q%�A�^�&v�<�� ��\_k��t�����@;�O�|��o#QFV���jM��LF)\!����|��|]p#<�I4G��mL�N����hnu�3!���@����]�Tf�#�M$8�"2���p'�_�������Z���]C�`���b+^�d[:N�r'u3#���9���`����n]��B��V64���&5����.A6��m����<Y>u
S�6�_�
Y>�8�������7;��>L�Lm�	I�_����'�pY�d��
�|����.�f_����v��$9���K��U�wf�A7z�:��������i�5�d�,�66b!{���Q��rU�n���\���F��u���������6�I��WI~4�j.qI�z���R���}3!�;)@\�l���X\��"�c����,�r��;�A���|{�^��>�#��f�������>7&��/H@���~RA�/e-0�jiT���f�UP>oV5ab��7���7�y�dn�h��e"�x:����H��d[��1�XJ�A��6����2K:a�Zs�������,��O���~�	���Z�S��<���!�*�����,�nd���C����Wi�V���H�h�����	I�+��_�+��4���o��,_hw�b:����Ukz0)���4|��H�1aa��.[����o����t�O�,E:a�������`�n��$m�����s���/j�_�],��>������e��X�]h�����!���S[Xf����8@��	`�����5��iYyN���G��
,p5���o���{6��%&d�1������/$�N���CHGi��{EJD�EjQ&�d=��DR�0*�={H������83���q#+n�N{VD(�;v�������4R�o���w>l����0]6�����V�S�q�L�J_}zT����D`�mu��/A����TW��4��Mg��3Ki�=o������8\�,W�5S�8�j+�^j5�[m��keg��[�a@=xe���s�z�����u�cZ
s���/m�e5�<Z����$&���E
��#s���Sw�E;������4��]OF�9UOW���-y(
endstream
endobj
5 0 obj
   801959
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0��������t� �
B�T
������7�}-!b�4����[�0�
endstream
endobj
80 0 obj
   54
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0����NN��9�j��H�Y��&��=p��i�6�X��<4?
endstream
endobj
82 0 obj
   50
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ������9���XXPBa|i�9zG��^��hm-��(`N��:�����/3
endstream
endobj
84 0 obj
   59
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 Aff���rK
C��1��+.�s��1(%���s/s��������;f<2�.�
endstream
endobj
86 0 obj
   58
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ���_O����H�h,.�������7�10+�9kU������p&3#
endstream
endobj
88 0 obj
   56
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������_���������Y�����_`) �q���/ �o�@*����.4�
endstream
endobj
90 0 obj
   51
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���3�HU�@U4Ax@^��bo0C�9��w� %h��o)9�H�\]�0�
endstream
endobj
92 0 obj
   59
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0��wK��"�B$?�:2Qeo2��w`���/�s@��"��{�r3�
endstream
endobj
94 0 obj
   52
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@���OG�A�\--4�f�Zf:�dqF8��[F�S��>4�
endstream
endobj
96 0 obj
   47
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 E�� �8�3+����xbupTITq���7�������K�D�p�1�
endstream
endobj
98 0 obj
   58
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
 ���? �Cx��W�clD"���E�9ao�����9��/�t3k
endstream
endobj
100 0 obj
   54
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��9
0����RR�"A��r�n2�w�����j�9L�0A����r4'
endstream
endobj
102 0 obj
   51
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ��������!�����K&��j]����7*"�A�sR�o�0�
endstream
endobj
104 0 obj
   58
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1 ����*���`��!�+���7�pkaV��N�R�O�!���0��2�
endstream
endobj
106 0 obj
   56
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
0���W�DD��Bi�4��!�dRu��;�Kf�/?�4�
endstream
endobj
108 0 obj
   47
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�U3�:A�H%)������"�*����{N"�]3w�"�������1�
endstream
endobj
110 0 obj
   57
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
 ���/|����q+���*"��������s0����G@f�x&3�
endstream
endobj
112 0 obj
   53
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���Gqpvq(��
G G����^��Z�~�L�D��spW��p4C
endstream
endobj
114 0 obj
   51
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ����1H�t4�j����[��9j�w"���)!f�V��1 gT/9�/
endstream
endobj
116 0 obj
   59
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@������AD�A���Jh�� w��v#���~�C�UX�~{F3
endstream
endobj
118 0 obj
   52
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ���M�R�QO�H�f0�pU��s��s&�����h4o
endstream
endobj
120 0 obj
   51
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
0�����M�a��%1�����uC�d6VeB�k�7�+2�Ty�?O�0c
endstream
endobj
122 0 obj
   56
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���?�:� "��.�p���C&�!
��&t���������3�
endstream
endobj
124 0 obj
   54
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
@B��ojjj��h�3P���K��L��*�*��<��fz$|�V4'
endstream
endobj
126 0 obj
   51
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ��w`*�`���"�����{�����L��@�bo����Z�n1�
endstream
endobj
128 0 obj
   59
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�-��P����L2Ib����H��R mej��}�����r4;
endstream
endobj
130 0 obj
   47
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�1
0������S�R�����H7t3{��!��Q�r�������4;
endstream
endobj
132 0 obj
   53
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �vu �`_����P������>�qmk�"�I�msvt�
�Vx1w
endstream
endobj
134 0 obj
   55
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�-�A
 �����S)R���QA�m"a��"S)����1���Z��}��4�
endstream
endobj
136 0 obj
   50
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
0�����a��"f���U���C&*_��[*t�f����4o
endstream
endobj
138 0 obj
   50
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �>0�����@����0Pek�V�I��wC��*�js��;c���N,�
endstream
endobj
140 0 obj
   56
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��K
 �S�p"���������{A�I3h�U�f-3��?��4c
endstream
endobj
142 0 obj
   49
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0C��z&����c�����E�w�x
tS5��1s��s�Z�2�
endstream
endobj
144 0 obj
   52
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 A+
���*`FASL
!L�0���k�;{3�q/��3)�;���J)���
X,o
endstream
endobj
146 0 obj
   62
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�����A:�"R��.�$U�7� �;fd�U����������=�3�
endstream
endobj
148 0 obj
   52
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�>����ED:�
!dH7D��Z�LT
{��{&���9��3�1�
endstream
endobj
150 0 obj
   53
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U��j�0��~����b�����!	�R
&��� ��e$�4o����`>v4���E\,��'!�/�QY"=�:����v����8| ��������f38*k.�����5�3�����wn�������r3c�$�?c���i��k��u�2���L�za�g��1���(:�+iu��
�]_�5?T���|1G.���v���PL��5}��"�{�@Gt"je����n#~���������Q�x�H�?jgz��C>e�����������Nz�e��~���h���o�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 509
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-�]H�Q���y�� 3�
�.D2#�� J�(c���*�
�&)5r������`�*5J���0�V)4RP��tQw�YI��K7���9���c�����1h�������{G[z���w����&�ZeV����N�[#/���>yqZ:V���,�%�������LV�de��<(�fd����G������z�t�����="oM��y��l��-��=�l-�m�eg���������|)=I�{J>��}7d�#9����r��|-���'�?_�]��[�����/?�WLfj�|�,���]��n��
��y9�K.�����<�9�z�^L��z�"�ze���^nzu��9����n�k�R��M�K�j�W;�����^������O/���bO��5D� ��e�[b��F�s���W#�8�=A���e3=��7�^��+�W3������������'�UL�zz�!���
�k]Nn����W����v����^���&���u�^��U��Z�����[���wv����:
endstream
endobj
startxref
842428
%%EOF
mac-mini-result-6.csvtext/csv; charset=us-asciiDownload
mac-mini-result-6.pdfapplication/pdfDownload
%PDF-1.7
%����
4 0 obj
<< /Length 5 0 R
   /Filter /FlateDecode
>>
stream
x�����.��8�S�����Wsx`{��#�S���py�~|�R��>h\�{VD����(��$�~m��������|���w�_e����=������}���������>���������_?wl_�����?|���������_��������=_���>_lG�4.nW�k�����������������@��6]���G����}���k�!�qq�5D{���K��.��+W�5���/���#��1U���l�*��j?`�
��t	 .��.���������"�����E�q�j�"��8��emS��\�V{�4.��r�����m.m��|h\�[�����\�}*�>�v�u��?���rL�L6:r��H4��z�5����Q\���'����O��KzL�X[�9�qq�:Ke������O��g����`V�v�(=#t�(]����r5��(]
5{W���~e=�Uk\
E�uk\
M��k\
U����:��P����l�~���r����6k����u���>_�{�J7iY�v��t�k�|��x�������n��t��4
��,G�X}�R4
��,C�H}�4
��,?�8}��3
��,;�(}��3
��,7�}�R3
��,3�}�3
��,/y|>&i���1�J��IR��|Lr���c��<4����Xs����M�r\JO�r\I������}P����c��6����Z.d�K�rY�\�4�x<���J48��\�6�3��>�kc���8�����\�=�s���!�_��k�0�������V�qG��;��s������A������]J��Y���6��|������m������d3����mw�_���8���]��ul���q����q�jO
&{�%�.��.�w��:�OI�:���A��v������KB����g����Z����*�X^�����Q��E~���"�W�-��p�~J~A�f"AH����F��7d\�~>�z�[��kk�b�R�������a�Z���w�����w�P�]$���j�u��N+�����O���o�1I/��|��<���k����}5�K&>p������U�7h�v%p�1��L�I}G�lgM�y)����������u �����w��uq/��n����?��A;%e�O�O�Q�����3l��5��(e3q,��`�k+����=����,]-n.�]ZE�Q79p%d����.�Q6��Pe1�b!�_���Nt�O��{���1��g��������6m	8?��P�Wb��w%�w�~��O���_��-!���M�� %a��b��;�������������}��WS��RI`h8[(�o����N�� ���=T�	d*h�Zu��@7�H���5����ZF5j�W�m`����83���������L->a��f5��Pj���o�Jl������Rl�}���r��w!>BQ��L��5U2�	3��-l�G��]f3��~n��Z�� G�Z�w����(7*D��J|�f_�qm�|��	�2����d�4H|pq"]�l��XTv����O�J�����g��Wo��T����=���`��G-������z]��w'�tko����e������s)|Wbg%4�����]2i��	����_7;h�U��]�2Z�7�O�pB0Rn����3��w�:G^�����Co\��e����R+	�3(�0�x�h;�2�	]oNU��T%U3��qX|}�
�
F����0]������f5�uo�B� ���T��F���Qt�*�mM��6��tzCY
;�]�R-�C���Z�"�2_�@�j��>������7�(�@�X���A��[�`Wb�{9`N�#�K=���������1!_����>����~(,��6]��;�W��8c��6�}�1,�QTo�������+��	�/����5I1�S��0��v��h�
D��v�MX���MM������J��o%C|����9����ft�)	���xH[gB��*�l	�>�l�T���}����~�����$�v���=���fLL	����@��n��9���}����G�]���L=�x�����A���5���B����z��yz�/�;c~�S����{6	c����-O������
����`�*�.����������q=1�����D���q4!�]|�,��}j6��u����,�5��;�_��o(�z�,O��@��&"U� �����F��2Y���@�:�m?�����<�'S�+�k����w�fq�*���e8���l��>v'l���+��5%��a@��?��iTM�$xi�iur����^���k3��]:��8!Y�aL��Y
��&�9�����^;���yg:����d�����`io"��:~����F�^�N���S���&x����%�
:S�
��z��b|���	�Hx �����e�a�Y��'c2����u�+N�Td�	A�=�����t?��NC�;\>t���Q��o (`�)��j>��&�ir7�1��^s��P>Pta,nO|�M�8����.x ���f6gyg�������(�w��EvZ�M\|����y7 *�Z��G�w����2v������0��4Z�=�����}P�<�(4Y���=���^�*�>{�����[ 2�%���NK��$'P/���[�8�s����XEh�e{H�PEe��=m]:��u�.�Q��@>���k�����{��3��^����1����h07�[]�h_Yk7��2a�H7�.�7����	�����^}���>��V���7��
�|��[�~/�wY�n,�7
���~������#�CwV}��!�T�3�����$�?F��5��1�a�m�������=����.X�u�&T��6�����e�&�c����	����o3�?�5���{2mP���m��3�h�M6�hh-�eA��5�m�����������GP�3q�No�9�u��c���]�������}�J���*3���G����^�Y����������)��K��/�-�Y5D����f�L��=���o��	�vmB`�Z��\�x��q���N�^@��	�������!�����\4�e��Zwa-�������'"�k�!�>����p���9�:������8�H��5��������6��Tq��Z���&x��9��0�����A2�@;��O
�fj7r`+�M1���X���zx���<f�E��]��Q�4�� ���0�l�*^�{�G�4��Ee�
I��~~W��m��T��nS��B�!�3!U;�9���vZ�������n_��w�}����}��?m�Wc/L�uL|������0t�kL%�j��WX��1#t���z�����se��b��:
�R�hz����ju�6���>]}��b�����W����Q�me�Fd}���`�T$�>��J�,����E�X�-�2��E�t����Izb@����O��D�N�U`�0��xJ��X�`)������]	��D��������1,h
��]��-La;�����/���f�8����j���a�^�ve������sT����1���c��q�������N�a��el�b��\��&�;c���B�B�<Y������������W1�5l��3��_+���d|���e��-X�Gr���������E7xaS#���1L�9p<�p�T����o�C&c��x�z���@���iQb��"J��_��9�<�lm�O������k!2��mk*��w�����;o�������?��F\@��H�����M��+�	��+��o����O|IfF��b2��K*+c��e`���fS��#v��~:J����>d��_m�3"�������%�c����N�L	���|��e>��x'���OL��L���]�!8�u��i�o0e�������c���23��(��A�'�1OT�(���/V��������\<L�O�^	AM�������Q���@Vy/����j��=�P
J4&l�u%CBE�]�}h�
,�����lt�����|7+����L�0F�*
�Q�C����sHk��&�$���j�����-���{���c��%P���eB�O��`���	zM?i���N�A�*���;|��F�!{b&����^�?����g��w\Z���#V���S�a��N7uv��d��)�-�@;l�������F��p�Q��:2����Nv�9��v��8�����p�����2c}���������bD|s�%uYR��>wx?Y�LD�;5�L��
�I��FX& ���������Uer�p����|^�|�����bC��0�=�lg�����^��r������Q���m��w��}���6�D����z��f��4�i�+a����������X�}SQ��_��G��OX�2�d��[`��#��_�.��{�B�&r4�v�� ��o��;��	�g�L���{��6�L�L!:Q`��K�b�=�:��G�X{5y��5�0�5�w�}�)�5��W���y��W��S�����<Sc�U��~��rD����s��A��v�s��J�����
�T8�53�<T�D�7����7��)2}��z9����v�2��u���	����D���&����lo���j�l���9����tU��j�����?��A��*?��yDS�7�G�?&���X�()������5P�*��m�S8N����%����������U����~�����sJrP�����n�:	����	jZ�4�` �rcj�����/a6��3*[��$T)���P�T�>V���CrH�,�T~��&�Oa2����8��e�������W43G����[`�'�9���`k%4����SH$��1%c0n���pp����n!�a���V6�m���A�i0����F��"�{-A�N�[t�1�/�H�B�����l�-� �=amd	;NL	�WW�1u�`d��D�[/a��E��s�����	-K������/7��Db�q���qn����*�
�n3B��m&�	1��e���a��}I��2������m�r�����@��!�^f���K�h�=W:��G�Xs��L���p���1"b����C
�#�k3t���a7 8����s��B�����6A�mEg�
����'$b��W���`��X�VV�������u"z�L�7��k8�t��J�\n����cja�Lw,������33������p��q��E��$�iS�w�O�q���������������nA���Q�Sw;��4sm�t#�=����v!2�$�����#,lFO���D���n6����<����U�O��<Q���c�����;������d�����^���L��d�8�PS3#��L�e�����.��hp����^S,[^�O�h��xM%�$|����������33h{w��u`o�A�[�kQ[gJP��Z����������;6a���waP���3T�)�{Lo��y��M*��U��c��v�������`����.Y��L7��)4]����t�����#����g|���:~F�e��p8���td�)����8�73�k�7�G���~�man��k�A-|,)�`��������]��������1Rf� Gfj���l )�}0��5Ng�'��No-�aMA�z���2��������Q�DM��������-�a��7��'6r�L�����Gv
�e�o�3����3�xK3�b����|
��ufa&��(n�6��R���z�k���VfG��2`���B��Z�����Fw�x�!n@��������	@ Sz��[�������1�y$e�ch��!��a�v3���o6��"�����a^;��_G�ilK���}S��3aE��_��7�0l'��Rd�-y��:�!�o�d8;q<v��!a�f��V���|�s��P	�����8u]��6�1�G�x�MH��\�����c8pt���3�1�����/�������5������7s&�V4��hk"���k+30� S�"���
aQ')���o.���	�:4`��:3� b�Y�l
��D�"+����Ch;�%��a3�+H� ���q���cv������&���lj�;v�`[��l���X����Y�h���l"��)���$I������5!��3�����%}���
y�1���b����R��s`}��}�D�:�0y�tP}�9:P���z_�X6�t�I2�S�]�'b@,@�i��2�q�)NR)��XX|�5���*����1\�	���T��b3���~(G]o"����X�����KUf7?�S���vN5������Y,��f��h���D�(p"���dl��Ms�q.�8c��a����F�:�[�2��U;.�B��!ZD�'3c�7�����X�K�~��2�v��6W� F���H����^Q#w��8P����&2��@2�f�ZO����}$���jSt��
M����qo~f~&�����X$PJ\��q��D���e�@x�N?��#N�8:��7����$� �H������5a��K��Y]�.
�y������9~0�	������h�:n����t
&"��0�]XB���	�^oH���*��L�6U���h�.��������!>=��*���&�	���)� ��b��U���mu��\�f�>��J�dl�b��Sf���=�A3�	��C���/�U�W2b�����0{�����g�����o�K/:����[�0�C�S���Z��kY���&� v��G�2���������+2%(#`p��qjC��6C{J:
�����]�f[�)�e1]z�S���>� �%�FU9��=�D����"�fnV��S{��~ &�1l�B���a
������No������i���tKI�LL-����I�O�o��X�T����J�(2�����<hVB��qG�(T�#�bT�N�zaS6����q~����d�0V.X�$����xa� j�d}��G���^1�f����%#+���b5@�y�RW�����:�3!���dL���� M\@`�?�d!�'�I�5��O�
GG���A���
�GxUfb�����+B���v"\$5P��Y��Un���+[��$&9�#>�$������$��E7wn���l�;�&9��Y�(�&�3n�g��r��%��7����F9���["�(�&Lox�5LrT
n�),rh�n����l�G��je���6���M<���3�4��ma�MD���F�<��Pda2vk�a���|&�q���`};|W"��L <b�<|"��F��3��&�����"�=3�8��
c����	c|���0�'c�o�1>�N�c�Dc|co����]�M�[�����
{����rS����p����-��b��'��"������1.X���;���D��}g��rc����w"�=��^�AD��=n%��I=����9>��o{�0��6�d\���'�+l��)�8C�qS����3�9b
��1+]���=�CD��(�bq�m��d����9�b1b���d��6v
?�D	f�|@k	�+��1�9x��O��m9���y&����)���6�����x�:<��Q����C��w�6�����s�$�\���J��;v�������!N+��k3���"����{���K����?|�DwFq�C��������z�QA8r(����irh���+b����>�r�0�T���}s����H0�7�Z��C�`|@�0b���-����{��E��.�^������	�����b�qj���Q��W�?c">3���,C������K��.z�`�:eA\5�1�
�*��	�l��������sB�|:�Tk�:���?�\2S�kB'_�������4��he�bu���9'������=R��~,�nw�nx$z��*g
@e�]����O�Z~0P��]��g�����h��������:��)���HS��A��0�F�������D?	��g�Q�@������Fk�r���E�`�	��>��y&`��BQ�4�GgLk� �[�^�������3�A>�b�	��JS0Q��(?��-�g$l���'B��������S��h�0�qL��
�����c�P�������xD���B�s��S0?�y��������1��u��1��L���2�B��z8����+f�{�)�Z��+J��R	_�5����yt#?\�������f�n���h�� ��V>n�M�C�-���������������7�P���<{p�����s���v�U@��06C�	�3:��#����a8�f
���2N@n������w��FC��
�<���330kM�d�q���eW�r;<z�|��5-����)&��e	k�va��9����Y����9oMp��{a&��d	���9|�����eg���l��������xx7�r�n�Y�M���C�����3+��qP�|~e�GoL�a���������|7ca���7�L^�3aPoy%*�B���0������L��P����u���|����j�����H#(�4�+\��{��KX�
O�=�hV_P@���LC�MD@W}O�
�r��/W2�O�����ffG.�Z�"�a�,��IY��z���)3��\��n9���[��=�������f`��[�t�}$!�(��H���}L�oa��GI��G�p�73���Ox�B��$Q��'�>�>L�o"�E�]�=aA��������C�1���1<�$��[�xL>:�3��Ggz�����#��o��I���}ty�b
7c�
��Z�/EF�)��3���
��s�h�A���~JR8����c�Z|�vA\c�!�S��E{M+�j�Q<�C��s"������-�\��`2a�y������p7���-�X�����"6yV�4&}�T��im�3�^C@4���	'���e�����C�l�\"d�s��i��\j/w
�y�T^������>+�JG�pW�6e��n8�D������g"|)�_z���x�wq�	�[7��[]�94[�	F��������1s������<kQ|����Qm�`E=��A����F�Tm��/�/$h}�{&�	�\�aV���oc��c7�\$�������;��������	B�
-�
t�-|�_
��es�u�>/�
os���'Bs���>�)a�X��1���/c��s]c*�k�
3��H'�����L��-����D$H�?��~x��KU1���e��p2�{j�54T��wah'��3�*�D$����Q���/���,cl��O2�k��E�N&�{;���<�$|*��������JD�F�7���{�f�W�,pG�f���e��E�&������u7m�
Jy��Z��<���q�>q@��!�&i����������n<��&��;wy
{TF������h�y�G����ZJ����9�`���������F��	b-�o�/�8�)�L�fD�l��������E�yXB�q���bX$�Y����-3!9�������tn��E�b�'C��������SF+��k�}�SfkB'.�V{�*����7(������i���'�w%�W|S�������@9��#t�t'��Ig������D���2�����0�:M�+z��d#-RL���Z��>�p�Z��1k��7h�����{%4k�Y�?�Y���j�r��3�����K����6{mc�F8�N�l��4g;x�Hs�c���9�`���c�V>3a_&�
�,)���s�v�q�c�6 r_�
��x��hC�9[|
�h��w��	���}W��8�����Dh�&)Y�&��B��)g���D��L������(C�"��v�(W���'������5��hH���8�z�H�����.��"�����H�5��b(�$^��K��:�/�����L�������|91�M����������O��1�c�W �����|Mmw�Ypb�{[�K�(��u��C�&w
��]@���
O�$a�I����.po�������c��I���t�r��6�{��6y���K�\���'��p���[�g��y��������DU�|�B:�7�pS����5P=�1��
/�w85�{O�V
�Q1_vzq�/+����GS���p�����i����t��q>����gBN����"����eN�s[��i��r�%�#0$�-7�� f����p�y�/��q��=����J@����t�+QdzbN����� OP��=���|�;�#��2Q���&,�8J�
�����/�f,��u�����1�N��\m�&ox�d
��OAO�}�?B8$^E���
4�V���J��Z|�qh\E�&�0�!��_�kG��t�Si��
{�SY���z�SI��
z�S9�>�y���G�<�e�+(Sd�T@~�`\CF:���t�
�t� �-���ksm�SY"#��=�&�
�Sy"���=�h����{�o��g�O���_�����������"j�j��#W���|�������g��>w|�~~����
Z_�7���9[p�]���m_������������[�#���x�T;�kG!:m�O=&�������z�8�=[;� �T�K3B������<��W<��-�D���F�:��;�!��J�����+��rM�c���������`��C��,���e7��<N�A����Dq�0��uf���������`��<R|���d��	B���,X"��`L��W����7��/�~3*�@�4�[w���nNg�Ewf�L-��L�;3�-YT�� D����5��	�����!��
O�er|<�e������DDb�@���7��� �\&��l`����v�83n��P�T{3c���%V"DS��223'h{jy;�$E�	�-�Q���C�����w�U'*��������L'D�8�o�n�S���_$�a���^�O�]��zH�|�Ld�R2�t	��~��8%�:�!�U�\L"p�/p�kUL	j��q����t�y,D�����A�z1�1~0���V�P�	�-2%�*7^��F/�Bd�C(���B��
�(��	��[�5AD�/HD|���J&�f_��?�u@������&U���F���x���
.�Ac*v�^�c�Z����ZdG���4�Ij�_g�|�1����HL�*�p�>dfo����x���=��pCSE����g<?3�:���GF`\��tba���r!�zp��k�)�Uu��)/�E������<�!(���3��p?_'J��"��df����p&��~����k�KCP*�K�z;o<d��x[�3U'b�r��t�`����U�R8�we$�GM?��/����Mi��68�ZS/Z�zu\CEzdWQ�2�H����a0\�myL��^�zs����Fe
�Ovm[��07[G�7�Z��@�R���R��)���8�\��'���w/�������f
��1��-k�����L��q��	�����B!(A��1���0%
l�ki�&b �+����Fv��@�|H��mo�Q�1��	n2��3Hg�B����P������-�n��_�N:�����;���vb4]Y�>�!>��=���1\�t�����q�^�a����j���e�<�V�
�of�>tH�"�u�`P���Ip|T��JHD�����Njs�Ah�1���C����%8���KfLP@�)���O�o�d��J���E� v?���
5�)��� ��������p�3���WY��qb���F���`�A�\K����Ft#�i�4��������[�a�pT_��=$:�.�[�'����{C���J8tW�����"S���f�wf�O�^��J�����w�3cTPh������hp��*+%��.��g��
����q������8tU�7�1�St}�T�3Q�4p���_!���[j|Di+�]�W~����<=������y��wb
1���x_r�xB��!�������^H"������J$��a�<=�.����5���E�|��Scz��,1��>-��qE����E�tU��M�T`�������������-
�������)
� ��)�P��$��L}��SY�0�#�*�DX
\���p����� k�����	���8*�����>�%r<�b��&��X��0<�c��{�����C4M��'0��_;�k�(���u���e����A>���ay��e�n0�rc�-���G���D��-7�Q����L�A�\��T�G���?�7`"�I��PM�������/��d�#��2-
G�� �u~�G���s?>�7 ��eB7;B88���@L�\
4nqO�L�r�9���3��5��o�����tCR���~���r2}��=���e0��g�p����s�`<���oTR=��`H���"~/L�Hy~�o��df3�����\r2�S-N�@�F��Q����RL)iy��{%s��%���f�p���������rI�{m������\T����-��c���	���F����253U����=��Q':���e*�1����>��+��9���A1[Oc|���Ah����_�1�[j�k�\e��!ta<�y,��yMC��x�sA��N.
��a�1�:���	>'\���������G^�� ���l���U%����/S�'I�{xG%�d�t���g�>��D(/������s��4��LT�������sa2F�8&��,��#��rp����mh��0�d���������I�q�E2�������^#5���OD��\�c��R���2��}
[}���������'=W�W��W���M���k0H���zH9�<�t$����"h���$�Z�g0�S+?��`e�L3���dv��gZ66��T�]����D�P���N|�4�������<7�k'%�n�XN��n�D@�F��3���I����v�0=��&��R�+�Z���w�*����`�f�W�k~�g!��l��:�9d������}M]�U���=-� �r��A��k��E�R��P:w,�0����~�F������./�2P�[|��Uo�Aa
n�XK)�h�������s�@g�Lx!:O6��l��<�c�����(m��1��PR��U~���LM,1����]jn%�W�@�C�^Z�7�X=3�
���~�W���j`*e�i"���~�d6^~B� m���J����M}S`��AD]�tWu���C��.��U*��~=��S��X������M;�Wf`J�|���/�
��N��������L�����6���H�~���i��^.E��E�t����l�(?����A��f"C
n2�J�])��}�f��x5�L��� ��{D�5�g�V{6�{������8Sj��g"���Pm�5wzx�YDq�0�%��l����k����q;�b�\�|Q��{��gS�t�we,p�������I^���26��GV�Q���j8X	�}M���.���`���4��?�(���_�=�+5a�t�J~0zi�.���������#
iG���@4|�����^w���BAt��,�&�?���=<�d���s�+��["��Q���U}Q���k��Y{�b��B�w���*&�VFXk�h�'�����2�o��6y�z8�5�6���
���B��$|�f�>�n�b������D�I����X3cm�����H%U��KV������<������Dk5J�*~��[,�1�����yU���G.1%(#��\+����Vw���0��i��:��2�/=���;qq� 7��.�Lxc�j�?��^zz�|N���qG��c&^7��0ng��������-6�s���v{�1����r�q�ZA�#�5��^��������=K�3�	����^E#p!>��i{�w���l��mr��J�B�2c����E�����K�2c�]��\}����bJPF�F�;'�����h�E�������A��0Q�4�`�P��?���1^3�g^���(�'R��=�.��F7�D�y���Vu3�O�2�����VH7�yLD�Rh��Z$Zp�a���P���&�\��J�G�6��0|�������nu�;���^�yy��s.3_�p�]�Z�%�'�
���6H�6�dcpX�BB�PSg��f|/��kI	vJk������-���!+��!(����J����0�[��8:-�a�Z����_i(yGu����T
P����e�?/>Eu<�u�[���(���6g����h��'3������a9�j���Z��v�u���0��:/��t���J�A��|�f�Q���_3�D�3����n��$�L��	�h�7�h��)��~$���j���a�g���K��)�"�D��������S�U*&�#��*�G�A6WF��[�k�{T��<��u��l�A�����zb6���i�wFT5]����q�ADXz�{%K�<�2fU��#��=���6,��p����{����&�9v�$���7�������aP��6��]��+�yT���c����s�=�����}��M���R�\�r�������G`w7�D��a\<Q>���W��d.�d�MD����������m�������&w����_�Cvn��&��53�)����7��>�'�������q���j�^�%���)��N��Q�n`����]o�D��)���:-�����0�YL'����^��a���pR��������[�~��,"�W" �*#����:�D�����>Hn!O��!n����/a�
p���?L��]��AP�[��fK�s`N`��!��#�;�7�N%*�������u��	���ow#�����S'�$8��=\�B%�v�M����:=�������`��p��x�J�KIl���������&��Z������ZB���0��g"#�Wr�;��b�!���:��������9OR�����\J8!�{8C���Onf����Nm�>������7
��)���%������K��:e^�!�MM���h�{A�$��.I��8�1k �o�J���vm�o������!�\c�=M���A�>w;D�x�����	Z-=h�����q��??l�d��K*��{����H��t%5����XxE
�P�d��W��L5��3�"�������\�Q^�2��0��@�[����z�����3���\���"��[��'���&�c��b�|�����._����="�t}�v,@��Aw�����b:n|�@T]Mcw_����V���a�86��?�@�A�
��1'B!;k��	����H3��i�k�7���c�+x��G� ����U����W��0z��a&�������=�F�fh���
.���K���������n���'�\���r��u(8H��#���j���&5�z���6� K�}�����Gi��C�PU�	�uY���i�:������X��	�����#.�qmQQ\�3�4�������Vf\�'�����3+	G����"��.</m�����0��kS��	VF�N�!,6�{1(���$t�����`����hI >�	�*Sz�p�DU~������yZ��N������fL���u�]�Q��H���5=� #*��W�[�2f	�����4�_���i��4o9o���7IN��GtLO�<9��3N9���S��	�0t��p��H���cY������;?l,�7�b=q��X
{���{n����.A��	�
|h�����:c��4�_%�r%t��|��)�Z Vaq�K������� b����b�i�Zi�lr�*i�Y����L��a�5��l%_XS�T�<M����*h~c���B��`�</�#�@�|��������P����q��������43D(L��M��w�p���K�$3���Y��D�!���W���q:51O!P���"`������z%��B�D�}���b:>��v�	M���E,�+\(	r���L$���:H 5����35��&?�����m��
~��+�#�n����6����o]��f��.�[G.]�3N��������(��[s��>������,���������:|�@4Q"�����X�"g,���y=���3�����W�/��3��3�GU�T�uJY�G�D	n+�KE���QRC6��$�==z���lD���~�_���c�.��pkc���d�Y�q3�P��;n:7������g�A�H�d��H������W����}����J�{~�����-@yg�DjR{'q��|G�s'3B�����WS���H����1'x+����v��G�
�In�m�������H�73�P�RR�=�������^�:��O�QN����������]l��3A���E3�~�������z��^?����B�y~h��j�����Kv�BT�MpTU�@\��������Z/	>�(cq=���cC94��-r��
�D��}Qc.dhOS%b�t���U�2��1;�eB}��3��Q�Z��HV�Z�9��V��w!�L��\Fjy������O`����	��D�N�U_6�����=dcB�	J!�.�]���|1�@�����<E3���������I+�6i��6lM�Tb`�{x�	������5�<�DLl�W��r��U�%��W��Y��e;"|8�.�5���)����.��t���6��yd����>�Vp�z��	cF����$M&����U����������/�eF$���}}�L$����v�L��o{EQ~wAz^LU��^	wJ��~����0�u�/j)���/�	dY	��b��v��y�	�r�c��gL�B��������T����4q�:$4ur����g :f�1�ZE�tt�~h}�����,.t�%�hg6���+3�f�q|o�;_��2��.����"e�)���i���~O|���:M5|2�;C�&���E�
XIW8���D�������'l��
��v�Hp��;_��y��
�j	jg���,�r�jU���w�.D�$��R��{S���}�����H�>�2A�A,e��2����>8�����>���U��� �����7�e&NU��)UR�<c-���,[dU���,j�F+`���"����=��9A�H0`���N�"�>`��}gf!D���������3��g&l�$y�R����
h��vi��_?�P����<���K�Y�l����� �v�rMM���@�[�Q6[�x&�Mt`���mC�=��
&o;���M��3����GcV�B�����	CF������3�f�;����\4������%h 7�U��4�d�D�o��V5�8�XkM��h�7���09����S��	� x�w NRn9f|j��Y���y��}�	�!�r�:�Oh����ii�T���9&�f��|��k�}���T��lN���g���=�<.���zk~=c�p��G�`o�;�J�Fu���X)$�6���U��J�(�{%4M���������63�L������r\���9u5�1����������|�+z" �H�q�wa��>rREUZW3�V����g�_�P���F��(1�\�9O�jc��a�������k~n���[��s����z�D�B���g=	�>9�:0#����H��o�_�r�w������Lo�0�GE���3>d�**�����������q��M�7���i���f3viuXUq�S��`���
=�P��	W��r���\=e�OX�\�}�@�!R�I.�_Hk��3�U��[����/l��ii���5o���M�O�.��}�������/���������{�����O�O:���!��2��_%JW�3_=���
����Q�����E�7d���L��v��,� �s�c%c&��YR$��6�<\cB�*S����!X���q�4�6cfi��O�6Mk�36d��u����K�Kn-S6O��3;�1"���COe��`wd#=��b��mwl���X�[��W��|c5���b�x���F��d`,
W�&��t�V����}��W@R��5dp�u|�� �i�-�}]>
f�ylj��t@�<!�M7��%����q�����jJ�A|O���~��jW��*�ngln�@�Q���!j�Tsd��.z����G����K�q���cs�a�+'�D��]R�� �3�MBf��M�]�d��U�b%��I�[�`Ah�/��b2�}�����J^f��Rm��O�k3!l���]�������.#FR�D?��Pq�����[@I�k������+L���u�-t��nI�N�tm&4��UK�	o+)���|*'3�-�����"�f��������
����6zd�Zl#������<���%�������n&���0��\������s7�����L��b.��P1�e����a�����B�L_f>D*}u��	b\���0]�L�kY����:��������`(�����D�L;h���X2$53��Z&K����i�P2v$%sC����]Bch�%c������/�"\B�\��:P.:���� 2�O������w&�������_2vtQ_1�^&A�����A=TL��Vw�@���
&Cl?��Yn�G���],�L�/S�V)W0:�"���b&�
���+a;TL�q
���j����x�a�;lY~�#>{(�<
&cO�����Ri���T�[��B��P.	����u�h��[2�W�a����fP�
��n��2TK��u�����e����������Z&�F�b��mF�D���J�T,Y�<�^�3d��b��i��7�;�m��p*9�T�_fSLD����L���+�|M�r�UL����T���rp����}��[�������h7���/w��I3[�����1�z��cn��*��{"�^����
:��2Fg"V��y�]GI&�|w�����GF��,w��zy�2�������V�'IP>�������F�:�p|�_���#�0�x������������eX�J�#��N
�������W�f���{&R#<�%�0?��~�����~������t�\>���~>��t(�/������OA�1���$|9Q��`�y�
��}��E�A���x�y
9��������YE
D�b.2JWP.����P��L�����������<pu&���^�W$�j|=���F�l{����6Fi�	���&������g��j�
���Vc���i�~�����ZhK�$���J{9a�����N?�k��&���)�S����g�q��~��o�x|��d4�����C(�#?�>�#����G�|���&6T?K`lr��Z#xxB�������>������B��[�D�&��<�W��85���B�ot����i`C�
�~ Y ��O:���	W,�||�QsQ��.��:1�TB�
`C��5��qUO��x��G��������k����-I�2%B��(l*1����Ek`�
��\��m�]���[����Ufn��&T$���������0�X����aIL�*����Gv����{���!�)���|O��^cW�	t�a8Y�TN�w�
T<�@���1����P>�u1�#�t�y���{6�~p�+bBWA�% �aWF<<��@�7DG�4N\����]���3��L�hZQ��ebG���l2���/��J��f���r=���O���Hg��`��|��s��vKz=y�3�H�L��@r,XgX����s�Zd��0����P\�t�.�'��������2��� ���Q!��0.^G`���GwD+�U��k����du�
�&�>��:	M��{6���YW���G�L(�����-��3,�0�w�1�O��n�UT��L����%�qBT4��`�#����e	�v�L�	W<���>D�q��l��C��P��P��j_h�
�F�@'���u'��w��C��������V�����x�6�t%����nm1�0����%������E4`?p�q|�1CD���
!���b�
�-p�b`��#�NX���s�,U��Q�M������Ru
�)�XBUu%��
��2~�w\������qh���������7pXF�jar�GGK��1e��I����u84��JTs����;�&��������\���3vDc�3�����Y���Q�\&=�MIiP���z���MIl�K������y[GS'8B/#�L���F������t]G"��e��y��N[
�2C�����t��L�e,����k��+y�W�.f�nQ<���C�g!n=��o&���f
�.�����	F8{s"�j���r��]��i����N���~�|-a�/���	+d����&��
���D����y$������R���g����h|�#����%����g�����rSg(C�E���8��"��"����Y���*�J)�0�;��xLsDS�#`}���~��<6������2�9�W&��mACOw������-��7�>�|0�m��+����V��E��U�s"��e���L�VpD�P��wm���W��K����&Lh�[1G<-@��z�$J;N&��10���n���'h�1{;Zj�4�VFbB;��[@���'l
�K�������
x��Z��4q��l�	��Y�������L����YXa�Ld�O��s����4�&�z�k�a��>a
;�o����d<��e�_o�4��F�����Vf<�V��>=NN�l���O��bO�6s3<Zv�,�g�����y���4#��&%2g���n:1������yg
,��G��^cL�'��vnLU��Dk�[P�M{�*��?a��8�89�v���0���]D�m�)��.����6@S��Pgl���m�j�\����1�O�5��rO�=���3f��3�m\n�A�B�[m�b�rV�$Q��=o���{�
��"�<����GWJy��Op�����{��Vk^s2��8��UE������F��<k���xPY���K)��8bQ�����������L��	pvu�}������:���7��7����������@���.�g����e�
���1��c��3\}�D��_��;h~��2�1���:��<M�V�gh����;E)X�_��|G�y��C�H'��@�����%K��2����h:�2���b�����1��W�iJ��R�E5-���{�GL�C=�iQ&������|�>D	�{�vW�)HO�"�����-�"�����E:IV��'�/x
��;bL<L�BqjL����H�c"��-�����>�����55j�$������Rj�Oc���m���(!��bj�T.�R���<���Fo��F"���q���Z��#�gG��5���d���L�~�������~������(�l����@�[]=�|�����tu_��#_JW-��
4���W�����W�{�z?�*P�j�V�U�|u��n�U����8����tu_��\WD�����h\��b��=g�����+W�5�������#W�1����o��;�$�D!��!4_�,�D�"31�E��x�+]$�-_�#_���si��@�\����t�h\l��������\��z�E�q�i�"��8���K{O����n���������W�w���kL�$�����������;��{�{����{C���S��k�h\��������������{)P���u��'PzF��'P��OW��j��'P�:�	4����:8k��:8k��:8k��:8k�qu�����_Yg�W��j�u5tp��qu�����}�:���tpR�~��k�������+���o����}�e��gY��s]���\W�f<����u�o�s^���\W�f<����u�o�s����\W�f<����u�o�s]��x���y���9��y<��?����������\�T�{<s�>��kCC�`>��������Fo���1�H>�
������y��<sY��,i��Q|\k�^4���\�k.g�}����#����y���s9���q���ovX>��`7�B;V�Uwl�{+Dc��|�<���f&
1������9*��)�0�����	�����axb,}���J����l��q(����!���W <���L���� !�����������dj&%���T`J��R70��������2|���U��
�S���p��!��qf2�4}��na�@Dq��7���}���(_OB���X%LC����3����^����r�"���xg�"����Yz���U�*]�UY�����vK����d�0��y��@�Ab��S�:<�eE.<�:z��2��Y<�'*������[g%��eC���W�P&F�$Aa[,^�`��������vq0c�%O;�}�+3$�)�3�<LL��[���M���a���B�p���5���0q(��J���9��I�����&<�f2�2������!���,� KspIoW�n�o��-L��Kb���"}}�"P���DD~��)!E�~��@�YG�\4E|�!�7����tM��'���'�������?v��>�J�����uM�C��\_��O�JU�s��@M���:'=kSq��R�NA�;O�����zjs��n�U/E%�1������L��!!:��c,
}
	��
�#5���#?�yZ�?�f��r�d!�}�,���]����0�A���7�������nu��Qm�������m���3��R�w���%~9���D}�`D|Z��F�gXDq����3���Q"2����4�{���f� �����������&aV��r"�j���5pQ��7�b�3�RfE<u�aaR�N(�%��C�,a��:M����d�]6����;�s�}aJj[�6_>�pj];Vy<�u�	��� t��az$��#��gd]��@~��w,T��t5J��53I�O	�"�
�?���'�^P&��`��=�K��Wf�KX�Q%�Rt.��}i����</�������d��f���A�O���jk�jk�a�Y��]5\�)A��m:2/�������`�lA�8L|[�oe����!vo�&E�����`G��q���AS�������zK�{UJ]�h�����h'E���[�0
>-��i�Y����������3Q2��#�CS�����h��N��s(R4�O���&�g����[�N�����S��
&P����tfbkE*czF�&�P��q�y�P1%(=��'�34�
�D1.����>��IFAT�k�N�������c�O��^S8�;M|���
&Whb#�<C�L��� v����.LE�vV������nZ�aa�e���(���Q�
��`��c\K����f�"���6�(���
��po����]��dK�3��h�B�S�V8Y;�p�
��g��:��S^���U��LE�u&��l�!zj�B�hYh6����pL�|��yg"�(��k�c4��P�J�""]VS����P�1Bd6���F�
=R*U��!��N���'[����6�������4���[P�;^_�m[5����n����;(���y"\w�6�%W�C����������J2A����+����:|W�����(�i������8hY+�%�R{�e����G1Mr�9�J;s��Gt��w8�
Ut6�D$����t���u&��5jj�����.��|!����J}&yhT1�p��<����CU�S���"��������hB:r���Ax�O��w��mv�r������0q���A��zW�aiw��@9�w���~��0k<��gD�qCwWV�G�r}�;��J�n0��d����h���AXP?���C��@e�^j��������F�[���m��z��v���1����=������Y�f�<������N��=�	o2Nw��>�b��m��C?\�iE��Z\�<�E�����C��
��{�����S�������&���E��`����L��"A�N2�~O�n�����m9�-��M>���W��\��3�]	i
��Y��������j��^���H�!/�^�R���P6��_1����]0�A��K��7��]~{�p�A�����P��>�aIxj+���K��]�g�����������C�����3��W6:�!����'�M���S�Lx�W�$g���8�����!��:S�2u3t�����Z���(v{���) �\~���n�
7xX��1�Q-a�:lX������V�7C�7�[p�t&
0VpnFK1��;�:�8v
Q8�,X�N�t�j)�~��v+Z��Y$������:����q0VI�#�0B��pl��/���`��v������v�8�����V�oE�\�/N8%�l��[g�J�����SS�n�(�)A��{��K�����Cy%�o=�3e0A�,ikB&@x��v]6���0��=J31 ���q�/y�&��)����e����.��5bS\�QUGV�j�m20�����w��f��
��,���M�A,���lw��2=��s���l�3��o�dn�M(�U~�1�?�?�m5�=]���t�[����gun�C��������I\�(���-s�����gh��1�Sc���U���[��&l��0QQ�1L��:������W��� �_��:����Z�w!�,�9u)�#k��������vW>ea�-t��N���]o�"�����G�$�1�t�����'$� ��H�������J��6�k�7>Y��+a��(�>�`Q�4��\/La;�����/����x\V���H����"t���'3��T��W�+c�M��\B	/�a�����`E�����z�
��&<c���B�B�<C�J�35�wK��]E��rV.��p0���v��,V�]2%�|���x���+sj�T��A��HZKx0gm����n� �i�����K�?df2�����5� Nf���%��)�����s���~����BPEY�MD��g���S�2�_ok4�A��9��a�����,��[��*b�|��<Y.%�r*������O|IfF���4���P+c��e`��GS�:��t�T
�a�2�!����Zy�������Gd�[������:F�����N43���u2�fs���
��w�C]��s����q��c�`���WTfFJ@� ����;,c�������$@��\X��I������Z.���q�.x5 ���@L	�jL������A����
����T�������_���t����w�bk���dc�����T��;o���BSMLI����-w��@ji�^�Gi��/�PjY&��PQa3���2E�^�O�����A�����#8sD�
t�V�+q*HV@�K�~��0~p��}��B� UQ���N�>0��&;����a��)�-�Z;d��[�Nf<F5�����z-��1�/�t�x��t�8]��i�t����4����f���YA�?���	1"��07�,��I����OV9Q��N�'�>��p�����	�g��o��X�����&������/����/J+6$	���e;��ujP�j�Rs�����q��}���6�D`��8=c�N�Qb��0�S
�U��'~����|��V���<ZV�2�mDk9��?V��v����l���	�
��6?�d��+�N6��3�1m�g��|���-;�-��S����K��GBB�q��@4P��Z���������������U��ql��B���	�)D'
���qI_���ZG{}������Y��f`����MH#4"���v�i	;?��_L}�F7t��L-�aWE������M=8�&��������1L3��2p�kf`E��-!G�Hgcv�G)��:���c�[a*��$����;fY�����D�����I��#�-��� GN�t*����
y/E|��i��u�������Q=���0!8�n�U�����@jX_O)�E
O�)A�n�y$����������U���������������~��S�)�$Tc���[�4�` �
��znj��}	�5�����O"@�0�������Q9��CF�f���[D7p8�e�Y:�%]���-���n���Qe��I3Cne��y�:��zVT0�5��e�qa
��v3�d�
����{L��[���}���
g�:"A�i0����F��"a���S��K;e���T� 7��7��[�g��iuM�qbJPF�������#Cn&
�z�l��f��[��.���kae���
�i�f\��B+�Q��V�N��
�n3B�7�Ddb�{��[1��3+�d�e��13����G�d�-Ju%a���������h�=W:���i��<d&u!2�p�aN z�V��q��1w����0t�2����OcD�x���B�L�q��Q�I7�)��aO|B"FqUqK��-.A�me�/���>�G!F����3Ecou�����-�[=B�a�Z+S���
����33c��=�o�����!"v�'"H��&��������������������n�!�Uw;��4s��3"��Q�v!2�%�1���#,lF�1
��`�]��?���]�@�=f!��UE��;��0��0(��9n.�3������'6O/�`X&_]r���PS3#���g�A�a����vP��N�zMM�l����jaN{��&��^�c]�}{K+�Ze������m�����kQ[gJP���x��{�6#�����
�V���B4������Z^p�2��i�4��#W���a�e�{�|������Q��R��Y���KW�tZ���f�����Y�� �(m1%(#|������@@�~a[�v����C��C���.�������{������� y�qeuw"V�u�s�����8��9�a����mNZ'yxN��!�����B���_�v��0�����1�hA �
|�b%j��ksl��<��oec�7{��X��qb!�]gF�#~�{Y�vl��b��1����.��1���Ib}rg�B���������b%��C��;���i8&�x��������3�Q�s��N���;�
l��/Y1�q��@���M�s[�
�0�HN`�������a�v3���/6��"����������
1�e	;�����g����_���>�8�O�"��h�_��s'
����������a�����;�WZ�&�M����%T�:k|]��i�������i>�]��!���d��p������d���G����f����u�2�u���fz�kE�����D���� Vf�S�K��&&!��Y;���]�s`���0���a�8���n���c��Yh"b��[�9��&��B4%�	��<v��Z
�Nc���ab&
�8��6m<��X�f�0'�B ��L�E���_�h1G����$I������Q"�;�@�o�~J�}$���wQnv~�l����t�v��������������D;��C�c�4����}ba�����Y������O�������&��JSl���@c�ae���X;���V���L0�CJi��c���o�a��	�<v(�����.U�1|�N���J+v(,�=�?�bI�7�G�U�r\���������8Q�1l����x�a�������PH�'�	�dfC�&�ygY'Z�8uq��y��J�.91
^�g8\zj�1j��|.��
��=u�DvV�2qW%��Y��5��m����Bl�%A"�U�'
���<�FJ���+�1O���7����@�Z��E���0���@��;7|.�AD����,����DMr+[���x���[������_�~��>�R��h�}����	�D\/�A��`�z�Ps3a���7R��l���E8S���M�&|����������!/>=��a�U�D�M3���X�a��#�PQ��*��l�����,��}��(������CL���N���PT3\]i}���X�|%��~b���!�$�-�������@I�z�N�u�[��fx�y��2Q��s-K�cD�)IJ����03��m����n��e�0�F�1���a3�������<���S�f[<��_a1�)A5��}����hU�D4����HX�F�q�Wa3L
n��{��������
~��r�7������D�I��cT�V�h4yW�����o�$�'���Y�X�n:���J�(2�gJB]��[�W�"���Jx��a[�Jb���1L]x������-x��|X�`E�I���	��� �UY�u����^1�3��Z���Q��A�@��Ty��a�,
�.C�I2&�~1�1H�/���h�JT	��5u�����5�ae��{c��"�2�'��k�����<�b!\$5P��Y��UnYH�;[��$��&��jgXMD#���ke3�
o5����In���8�����$w�M��;/������q����a��>�%��r|E���7��$gu������P''�����?4i|
���V�
��j�����.����	������&"�q{#u��a_�2��������q1?n�������a�g�L��y��p�%:�	zeyW&�����"�=3�8�������	c|���0�'c�o�1>�I�c�Dc|c8E�b�w�6n�f��mXg�,����&��5�CE�����=�Y���/F��`����w�n1TS���Us�1^��a�;�
���� ������I=����P��=q�l�6����I��sbJ"j(��"��h� � �B�� /A�J��� ������qeTl������9>Z��8���:4�3���v�qt�4���*�y�������<���M3;���y&����)���6������"u
������d�
���::n!p{������5�00J����b��-�e?2�Q��������k]d?��g��0�����������~K{0��������N=��� �,����4�����]��Y����� L Uc�x��\��a&����g@����]8�����[���H��c��A�r���������8���o������1�fk��2tg6P�}�]��t�K��G}�w�ij������������a��EA^;U�����
?�I��@��T���S���*_|�w�rn>����Z�d�`u5��w��S���Q���E	c�	?&]�{�7<=A��\�������akY	���/��N�u/�o��4Zu��y0�(�y�%�N�%����7�H���#�'2K��3�(h����D�+���:"�J4<.L�7�p�>,���1��B��5�����/*aZ31�b>{������>��L��`~��<��I�3��af���Lf���W�!�77~�fV�N|b���b`%�i.
�*p���(�.��23���5nQ���U.0u
�>OR��PIH'B�DB�]\�8�2��A*�'$\��Q���h�bF�u&�!�����)p�)�J%|�2�Xp�����p��67',L�j��/�h�� ~�V���&S�!H	���H����>�������V4���{����g�>�yf7�*��W����}�����1��S�8��<��}.��\X�R�F��w�C����H?�q��������|$�����-�*�����#��9�9��bR�[��C����4���4k~b� a�����3��&K��%��+��.\��]S���b��j�rf��� ���Egi6��A�����o�� �������l�����)�����#4����B���F&���0(���'�B���0������L��P����u���|��XQ5�Y�-�a$���W��.���m���Ta���f�y��?y���o&J��[�
�r��oW2�O@������`����/eaO��>�S�6���u�C��
���0��z4T�M��T��,�w+1�\��$�w�,
�ws-VR}�O���dQ5���0��	�[(���$�R��ws�a��a-�~(�woaAy����
�wo4a ��]���;A�Q��U������������w%�y��Q����$�������s��o(�j��<G\�;�8i�yW�w8����U1���m8v���4��k���q��
�w��1J��?�7_zb�����%������wr.��S���@n'��e&�����"6��INE?��m!��G��9b��pq��0D/c9XN
�V�!k�%�&��q��=40����
�O����+���XO��QF}���At�z�!���?t<a������?$xQn��
�a�^�<
���]H0���
?�px�F3g�� "�5"����5�(�5�o�i����3�p�!�k�����B���z��E��+XT�=%l�^���*�n��K��gL�fb��W��a{��&���Z�
��{����w���j������_T�H�y"�t��p`����!��b���?_Kp�/����0���a6L���E:I]vB2�<[H3��D$���q��g��RpT��#����d��i�B���^\��.���>��fYf"A3�����	/	��*�/�H�O2�k���g'��v�7z	�Y=����X�Pnn���JD�������=n &��]�eE�r��`q���Mpc�E?=�=a���7L��;��	�������v��6���7���{F#==���<���8��C�0��Ge���'LD��Ku9ze�z�0om'rs���:s57R��F���\T��_�q�.��aFdh�\��`&~��	����%�G��e�W�B��c&$��:���������8AQ�-v���<]FMVY�hS���1N�2�'TqIK�o���~�b4����5D=-�������zm����s:BWH�I��$\�\��y
B�Z�=aw-�l2��&3���]B0�<��Bh@��u��
��eL^�����k;���w%����v>����{m}�3���F(��||���/��N&��4�������]�o$���s�l���	��V�+�Ix�%K�R�K��f�&��g���X�*b��.���g�O9��/VHd�>�u��������	q"��IJ��>[���l�h��5���l���![��������=	W�@�H��t)y�KW�T�^�$J��DHWcB���g���)�F�><�.��n��R�����1k��W�2Y�|U�r
�1�������B����Q*����a�_C��|�H�5��C�&����m/���c�{"*�����..$d$I�M������PZoB?[?������:c�Y�G��O��:�����V	^cP�D�}(�na��C�"Q�.�*����~f����M�����D���in7z��`#��N��3GS�F�b�t��'��S�=A���X�����
�F����+CV�
�G��W>
�����U0q�1��w+*������P����� {���~g���)*^~��n��Ex����I.���D���P�Q1��Jx�<A�1T�9<.�����V�U��I+4��a!����������������A�K���`���H����t�i;��G8�W�����;����D�*�k��@���5�������4]g����*��Fyy����������j��WU^^������kKy��9,1�_#�����1Y]a���F���c�]�����T�8:W�M���Bm*Q�%��2��	��]����� �����;�������5E����x.��2q��'����~����>�|.~����
Z��d�����!�)���~�����?������?�����0^,UC��i�X*������b�&�2�6�����a���X
{}����a��_�t��0�	�A.���w"Lq�+�g�����X!��5Q� ���^w��N�^:R��|��,�]�V�j������5�s!���8����!��
�c�����M��*&���W��!������n0&^�+Q1�MQ�A����7��
d6e��r[Vw+;3.�3c�`��D���$�3S�!x�� D���`@�w%���/������x2%(#�����A�	.���+a���0���^H���b��g��<|����q�W���H�73��|Z"a%�!dj�wb\Ff�-��$I����(�Y����/�����z+������~cf"Q��7 E�=���E��'��2�j���zH�|�Ld�R�t�+`��O�S�:�}�U{_L"��xW�UL	j�B����tM�,D���hJ���A�LD�cJ�����;1%���^�����Bdo������7l�G�'�H8�(�����#���o��_���+������?~���d�+n��%h�F�\|��Td���l��I�2Us�h�v��JG���2�r��x�_$�j�X�K23�7BS���xC��=|�7��C�x�J?�SfejmRW�h#0.��E�0U�s~�����W*�U���9i��;:m+S��CP2���;f��;.>�=_'J��"��23��2���~�~����k�KCP*O�f�v�x�F���0��6U'������T�'
#�`��p���H4�=�d�������(��G�����0���k^��wW���*j�"C�)S�}y&����@J��So���t�@�14��G�2�	�����1��oP��+���=���n���	��g=�l��{	���F �03�,���mo��L=�+:n9��!s�f� �Kub'$�Ku� q�J?����lK1gd������L�x>$���Bb4J0��c���n���P����M�������b��.���I�6�>Zy����#wea��C|s�{2�IcxO��C����|�]�a��:����x�`PF��M�7�����!�[���t���L�����TB"����9������sB.�L���@
�8�5��(��T��#f��b�,�k� ���~�����^�b�
�	�j�S$��A(�q����p�3u��OY�����pU�I{���`�\Kq�����G�)
K�!���0?�m^�ni��p8�/����<I����T��B������p����4**�E�����Ef�-�e+���;:�H*(4�71�	���YNOVI�e��(����dB�a���|����TA�D�����n���4%K���
����y���qhl�8���^'�j.�����^��g�����]	 �G���2������/�%2n�L���D�����#��B���Y_P�,*��U������h8[����>�;��M�tX��r��#�
�?�hA���L
�M�&��63(����3�v�o������C�:���3���]Yx<l9��g�z�LxH��of�L���v���b��R�����(���53H��R��v���1��#���n�'7M��'0�G\;�k�(�7��|cuYT���A��1�a�&�e/
�i�����G�?�{����4����7�@;��wa�a��v�g�Llw�PFm~z�2'"��0#+jS��^���#���<G����=n��n�	���6��P��s-�Hw������+��9���g��sd
����0���ic�sAy�7�$'3a�Gk��J~�e0��g�p����:;���J���I�X�������;bs.&3c�H��������0�j��tj$|���O���!%W���]	��o��p����s}+����w�\Rf�*����+BY.*�p���:��y�f��uD�<�{�?4�'F2�0�|���|�I���:y�0�Q��]��c�L
�c���M�/M�y�1��g�������������q�9CUq@�����0��<&����C��x>�A�M85<f���8P�1~VWg>3z�d�?5f�}��d������iUIz�|��f��g����U�R��
��=O��o&���fy�\���N�nK&*q���w���0#��E/�:��K�4z>�kJ�=�"
�8&�xR�
�����o��T��C-���M�P/�9C�m��A�s�U>����
�%e"�3�����%.'a��w�I�*�/�g
�g
�aDR����������'�S~:�t$�Eu��5�4m;�	�f��=f�k�F�[�����������~�B�*g'���4W���(�r&)�S����II��gL�������F��3Q��R��v�0=����S�+�Z��.��*����0x?5f}����f�B�|N�!CED��
�s���Z4�<EN�XuoAx$�jH�5=�(����tzL� X��g0���0���_��%Rb�t�;�}X�6D��	k*�
��_�0����|��3���\^[w�p��[V�c�-�� ���V�;����U��x�&��d�R��.5MFI��"j��G���A�3���s����O��|��P)[Ma��/&��^~B� ���J����N/�Af_j���b[{�]�c�T���z�@+�U�&��3B�������X��3DSe�F��'���q���'��6���H�~���i���.E���[�(�Q]��)�w!��n��i`&2��&'�+�����^�W��@%��������������L�j��FY�����#^a�[V���h-�$=L��P�D~1�a-=<l���k^�|�	��nF���l#T�:d���`�>���%hf>
�}����)&y�X���0z����[��	�vEg��!+�]0�5��*���pxf�8���D<�����R����"�~1zi�N�U����0����`ee*�����$��Jh��DA<8Y$�J�	�G�8
a�L�����H���8��<5g�Ec�g�cem��:�X���y�T�����kN��F�4g�V�p��fp���k���� t����|�
�`�L�O8��k�'%���������X�Mqk��0M@�HaK��3�=���:�`���B`�[-�ZE������� 1��4�+�a^�{SF��Q�DL	��!�LK�$v"���Z
��h�&}����1|�	'
�;qq� �r�aL\?��_�]q/=�����]?p�������
�0���(,!}8���F|�?K��a�gsn�k)�'�49r�3���R����?���$��p�������X^E#p!>Zon������*��K�I�k�������O��Pt"F�%\�1�!@[��:YO��������t6n�~_��&_O���g����tb�y`�H�M?������fO0�2���(�gW�F��=�n��F7�DFn7D ]MW��D?�YU� �~����
���>�,��W6��\���������?�������@�?`�6D���u�=���}^��Kp.3��pZ]w��� � *�r+>���X���aa
	BM��>5�k9WXSJ�S��E$�~���=de2������])�S���g��j����f
F;���4������fH*�dh����7��:���N�d�Q��.m~�A��B�������}X������K�b�
�O���z��BB�������J�A����b�Q���_3�D�3��v�n\�$�L�m�c�fy3�6]�b��W�)v�~���a�g�����T�:a�;:��{��g��JL�W��P���T>�]8{se��������u�^�>��/
���e��<��������j����!a����,Y� ��UU"���j�[1mX�/�����?k����&�9V4iQ��	923ae�e��k^����w������k���>��	,:���g&��7����bJP�q���h��g���������`��Bx�,���,��(cx8��=2+��]��c�g�/hh�1��>���a���]_���J����Cs�O�If���i��v9}�8�Uwx�:���\���3�R5`w��]o�D��)�G�H4��ffX�p'�����������C8!���]��3�{C�X;�`��Vg~����<����������1�"
�~��;zN%�$aq��D����y-�zW����((��;����E��<�5no��G+�@c�pe�p���G!�)�m�D��vi+���JUj�������������kY�a=:f�X�A�"J�������������Z��2CN��	j�!an�����&�r]z����{��xd�88�AS�wa&��=I���!	f�����A�*yF��~1h��![���+n���TY!w=@��/�L�p�(��4>�NB���%!i<W�@hP�����L�+1z��R7'8FE��O�[������f&5~[!%,D'.nXu���o=h�����^�Z2�83SrqN��WD�n@�?��� �[Y�L�[�;��G	�!o����L���-:��@�w%��rp_�� &D��[��%��2����b`H��x�Bp$(QL�i`��t5~�J�>��(_������y������'��;��b�	���LO���<�,��F�:�ye���TTn��Y�u4n���=]��|�������o�5����K�.�-uB*.3O���T�`0��tE;@>��
i��L��	�|c�zB�����@R[�-Uw���Dp��)v��#5��Tx+�H�����3f����&�����<p(aGtW)S�
��2vC|e2��HH!�G�d0�-�R�kX,%���>����W��A�Qz�i����2�a��F��
G����:�r�"�BR�v������&������Z��9vjRu�-u�C"X�jH_R��[|����n�����*F�\�'������������`��:����`�v����D`��i����K����rXR��bF�����n�@R�q^�FU�3�����P���/�O|w����
=���������LR��u�V���`
h�"���]���.l�'�C[r�2��[��h����7�6����_m[c��i�wt*Q�^���+��RWw���d��*,��t�-�~��/�Au(���z�}NH�d�X�SK)V&��a� ?������(7}�1�TR]x)VfT��1��4KbJP������Tr��w�C0��=�9�T�t7r���'A��aJ�C��Kk(��+��2a�V�m/���p���/�z&�nu��A���+w�?���F�Qkd~��T�����=Ivf����#7�y����=0�i���L{���iV�#Tev�l�S7�A�g�L��k��10lepik�q\���CL	
�AU�s���'r�'bB��e��$3�S���5,��JG6���|32���
�������8��]p4-�6L=)dz�L�����2�����L�A&��v';~��7���Xn��+9��@G����q23�#��B���C�T�Q�L��M�	Z'�����0kes���h������2�������0[0%�		_���A���]	|��g9�N;�+l���D3A������suwU�����c�I3]R�=K�����d�-+#����K�����ff��C��%����q����2f���\U�2�HM�C�-%�2?���������R���#x!��}��p�����8��y,OH`�&=��3�����l��	��[���z���`���0n����5��$���P��/��I)�3��������p���s���]]��[_���T���H�������,����pc`��Z��~Q��*���/4��b����?���p�����[#�<Z���-�;�S�.1|��ybD�4sf2v�x�X�m�B����9v�4S��vP����^�C�qi��k�1v�����D(���������z�L�����2~�0�8�{E%*��fk�>���7'O����g!"&�������Q�1L��
�����/6&�\�L��L-��<��.��S�����j>� 1e"��8�L�_$���#�x���!3�bf�V���@96a��r�t�E����q����PB'�`k@Z����S5�)�)�B�����w�'\D�V�}^7���[����MUWS����'������A� S���/f��rE{�Zw**��c�`
��:
^'�7B�
+g�E���(w���[F��D���#E���G�ejr��_��X�U2�������q��V:�������z1-W�0������\�<��q�L�9`V��,1UW
��`�T�����.�*x��Q�K+VV�lP��n4��3��4vF������c~f2�G�K�'�g�jA�s�y������'�O�nn}�Of�iP'��fne�������UI���&����A���h��M<pb6����~T��|�gqJ�T�{�C���N��u�����_l�5�*�`��{��7a�+�I6����+�:���r�B"�83:��9	��d\����^1��t�)&>Q��6����x��+C��+���s���87�>��AO�|�M�j��VS��+�[���w��8,'l�5,�����#Z�����XY�	�,��PT�q����%"���"a�bb\ :���T1'��%q����I�m0�>���s��v�qk[���B�y��v�_~�5���G�>N���~[Zr��������k)���)�
3���*����0GL�M{.��A}�	���N3�n� _�X`qa�w��w%(\:�����]��4X<�0�g&���8��~�O��^F�v�������->H�4��5�l�DB�vPe��P;����l2��M���U�=����@�%�����-3��MX��c��R�)6��F���v����2�:. ����Q�=�O���S9��d��+�1g���7��T,0��d7��
����M��)�n�b���<b93��d�q3����f��� ��I������X�9�d���z����do��K��-E23�������[����A��k<�P�����b������pM50������p���r���C�����..P�>��=�*t����Cc�F��w��c�L>�q�5��>����D�v����`]����t�{��=��Dye���R�p��|~�Z������w�aq"tB�.D
���V�,����/6�q^D_����W�L������rfd�����
[���������9*I���B�T_�z^JN�j#�/�A&q����������a��x��U�����	��	%���Yn�F��f�8��#����7��.����"/�������51���xb�������o?����?�O?�w��/������]��Y������AWw8�~�(]�j�z����}������k�g�����Nh�����Y�#n�3d����,��,�6	��sZOi36�#��i��Yz��0�n��)u�l.��`�X�I���h��aCXQe2��g�g,T~����
;M�d��|��(�%?��)\�en8����J{'d[��r�=?�+R��B���
�4LIXs�3C�:>�&�~n)�	V�+5	S�5?6�������O�5�q����/,������tt7���b6d"v��4m��E3t�c��)��sdX��Lc�� ��z��	�'�`�}����!
���$�HQ��^m�QzS�f?p��!���
"/�������	��rJ��p�1Ry�v�a�,H��8	��FTB�.v$�R���K���Zx,�a�A�zIi�
���q	�Ri�J��p�-	�N^)f����N�,w���Z2vt3G���ZDinW�B`*4���A{����}�Z24���Z*�������QkQ�L
��Z�@&!�
��V������!�4���������M"]sx
�!�/s�-@I�$�LwW3�z����v���!5�����U}�g2.(�&���M��h2���<��D�]C0�aF�5��!E���
�\�s$��]������5.hp����
3��P�$�bJ�,p�ip��P4	
����0C�$�����J{hSi������6qh_�JMss����m<�Au���u���w��&@����G��P@��3��j�Xj���-���Z��g2F����t=C�d[�]�p�jh������LjD>k]�$�@V�-�?K�2���a�T�2�0�L������������a�W�;�n�
m��pc�]:����Y#���U��
��	Qq#�J����6hdYJ���T����B�L��%��K&c�E�+nF�,L���S�L��J��2A�� x�];�&�K�hg����M�
����](2R/I��_&a��p������;CK����"C'"{<��]CI��p�w?8C�Z;��Q���4{?�8���p�"9�E��)�W83c������E��B���%���G)1-�!���*�z�#�.x�|�u<�zJ_�	#g;z~50�����6\�!�s��<�K���_��X�/&,�<����z��_q�F8�b#���
sV�0�CG3&Tu����;C�����{zZ NC05���qI��|/���F$`����������t0�M�}?�;p$G�q�
�����o���^�-#���1>�Ro�����J<����S�'��`e:Z����6UK;0�TT#r.L0f����2Y�+.���_X~��IV���Rr�0M�G��d"������T�[����������
h�Yh�	#�T%(����V'�P4����n�d�J&�^�;��o��5#���'�q�y�_����v��N�/l��X�)
��g���q��8)?K������:����A�r�R��,�0�>\`sE���Q��_�%�C�	���G��4a����)	"���s�w��]Z�+B���'4�I����L�pf����dOM�fj����l����G��+�@O9Wl����g9]��f���|�'fY�6��v����~^�!��,���y�mH����c��Q������#7��@-*�G�Eh|�6}��4T�%l�������l%�q�B��
t��H5>���7[�xi�>C�1�����5:-qQz>���9B+�tY�A����z�����v��X����Y1���,�3��d�~2F�$�S�X9^��O�U��r���	`d����
u��p������Iupm������&�Au���2�#�B@P��(%��[�L���/��1>�%0��U`�����2@���<�����1d�v�a��'Tk�/sBt I��[4��E�'7���*�j'pJc}�b}�;��V�v��/��z)P<p�bn����CD���n)�6�$O�������.���
-p��f*��
�31�z����l<�.��&W��0�Cw"~�S��n
��J���K J]#���<��n���n�<tw����
�Qi����.2�a�A�1������8�Q�2��2���N�?�%��������&�Q�%.^�3t�e&��0c�����y0�i��,Lp#��	) ��xI�Wf�����~��
����#-R�����r�Q����(C����
~+|����9F���?�mpa>�pi�c�v�v��S��F"Z=����Ty��d�D?5Q�a!��!:�QW%�� ��*R�}\���/�~g8?�p�>�Z����u��x&�
<�8ct�mX��F3g\��������qI-�'G��}d����=>�M?��w�N��	Gcg�H�����ho��;���u����O^�l�Q��!;���M�M�m
T��~��x�lo�R_�"HWT��:A�.����592Z����c��y4��3]��pY�l8��g��������j�%`e��&>7�f|o�������/EovaYCX�&�=���&h����K".XB��:�!c�B�492��M@*���u��|�����N�PT4}����`�x���C�?T�%��^H����f����c��r�XxgBE��gG�[�����`��������$��	�T���oz�(�S���	��7�M�h&\O�No���$26��m����V��
���1�C�qB��Q�a������fd�x�N��4��hz��	U�{�G��",����u��d�����l�k����L}��Q����w�Vq
�
�R��c6c�|!�����cVw�{c���NO���J������"BX��0�G�gt�t���t{w�0��=����|�����B������
����H|]9a��t�ah�������	b����bh��%Lh��1+QT�7
Q{���a�VTV�%�����c.�6��0+�9��������k�?�h��	�f/��^���a��p��YC����#��C���L�����gr�������3A�������	�Za��2�����(`Et�_�+�r��s��gX���vf�d�4#��U���{���������*A
�����!�#�*AH��p��5e&b.V=�L����d����b�����Fv�`�
9���Hsc��'_���n�����������P�����Y�j0=�_�9/��3�����KwY��b�	M6T�����X5��!a�������.���6��0v���?T#��QOJ��.��<���Z�P�$�1���*�,9j c�`%C8��	�!v��_#�������5���1���C�U�L�<� �efr���
qk��`"�~��}�w��N����)e��t�����_��L�/���7
�;������+'W��24`'����7���:�G-g�w<��\�7d��� Ho7j�s�R%��ir;��3�����j���xR��
�Q�"}�����������%�s7��'bN��o�D��Vf�i�[�oN�lJ����u������AP��B��]������������0��0�oM�v.�ci�O������#
~�z��;�6
��u�:���9_>���r�������%�L����O�	���M��6_n�t0]�}��/o��m���@~9v��9_>���Tk���6������}���|����{��{��:]���k��k��s��3*�jI4�B4�q���-5�����~(.v����D����0.����/��Si�\�>�����LW���M��6_��,�.�R�t0]n�t0]�
.8.�s������w/������a���$����s��zL��p\n��h��8��}�};D��>�o�2���Ib�,���eK0U�,K�B�O��;���9��y=4�����s�:��CgOZz\�=���>������P����CoO�z\�=��t}����y=T�����s��O�7������m��>]�������;���z/5W��u�zM�z-�zN�z�]�E�9g��M]�AW��@���t�_�^�7�@W��8���
t�_L��g�@W��0���t�_�]��U��6
x��6���$��?[��g��9gY��G<s�n
�kC��10��1�m���F7��1��%0�
���������r�\�>�%��a��{�W�6_��u�`\�~�����HWs��zc*�>�9��?�Y������<��x�Bt�P���@Q����������Lb���{t&�AR�qf��a�<����a�F6l����	~pq]>o�M����W��+^��/��3��H����71(Ba�`?�(�D<�0:�)�Z8��mT��=;Qqs�$��
��+S@ ���j�2���%���q7�B,&�3�1��g����Ng���v�o��"�u�������0M%�S�O�-�9�@Y�IaA8?���H�N���AK��31�}�#��"���t[����[��B�)A=�rx��#{���]0D�������PT0�����Q�A��+�fe4�U�+�(�E�{���?v���r�g��A<L~[�O����s������H�.�I���F��-����8;���W���0����91r��JO|��Ri;��<�f2��%�, �t��T�A���A g���Z�S@����8�&�`b�w%��!$��M��3��A��O�����o���X]��k�}�&P�m�v���v�w��:g0~�x������"xg��&�!��/�P���JUk�C4,BM���8@z��x��R�NA�;��"{���AO=������{f���1�N���f�dL	��k���)��e�;t�n�q6����������:��A9�+����1�����&88�k@���8���/
���na6=���a��?�B5�Va��Uv��?�6�
��QE�~���O��Lr�(j���[?8�	>%"C�.(��b{/���'nf����@�z�x7�����6o�����w��r�>����D�v)��VM�,L*R�RQ~��g�:����bQ���l�	���tO���Z����J}9�/��i8i��q`	�Huy�%T��0=Q�������T/���Js<����.T��;J��^3���J@t:�������=�k��L���[{�7�����ay�aTI��������/mr�����I�)A�<@G���v��r���kf�U����+�!��K�{����feQ�w�_���<=�������9�0�7����I�j����x�-�2��T���6��0{}��y m����f��ee�UFu�,E�#l��a|�\�K��������,��W�d�/G�C�Y,�D��;;�XBw����CK�>�1����QC��e��!uJ#�`�N�����v
�<�4�4p^g�/���C�`��S>z��2`�
�h�,�E	�)�a�?�,� v���M�����>���'D���zZr|���E�whb�<�EK��[�X����]��ORO���'1�5Y��0F��h�������(�l�Op��c\K]���=���
�T�c��!A!�������q��D�}���y*^�f���N���;�n'�����O��H��1���<��j'��|>�!O�hUK3�D����s3i���Dx&C���rD���Q�%����h��T��ED�������P�1�5u���waPE7�aS>�oxg�a�q�6���~H��b(�`����5&�������.����#o����rw�r���������]&�%Q��#���$���#���Av\�*��f��:���`�E�]	#��{Z4d���!N�����%L��"�r0��F�4���$*�������a[�
Ut6�D$���-��_5Y���QS��]W�	�Zn���V�B�><�yh�������B���M�"�r�|��;��Pv��fc�!������������w�mvt!�|{f���q��=lZ<�������������&w�g��AD7�%�PV���Z�PV*���C��!.(��O�.XaA�0�����D/����x��1)e(���^9n��Y������<�Q�T5��	Y���,���P��I��DP�����&��8��[�W�6�|8N(�Oq�~�#�^�n��68�+`k�s�I]p��2��S���Y���yD�"�����H�> ����N�����-g����C#�`�@��Fe8��?�i
��=I�D������l-N��\����r��a�f��@����yh���2���� CU�g���yh�c��sX�J<�G3� 	Om��Of@$[r= ���i�C|nZ�����?��,u��m.<G���aB��y9t���0?5>�����?��S�o��s���0�a�j�F�[sV�&�����0��m�GI��_�a�j	��s��eL���A����������f�c��#6��S��X2E	G�
���7����X�+���Cd'�"a~��pX����b���63���cs	���"� x�����.1E�|�{��S5s�t��B�3��@�io�	+)fB��}�G��%2%(|}�������O�A~\���4z�`����X�	�<
��+;3l�s#aZ%�G�fb@H2G�RDibX�F������m~�B�Y#�OL�������e���	�N��])6�Y:�'��*���&� ��QL�;��N�2�2����Xq�NZ��J%��q��&��*�i���V����_����a={������Xg�y�B��3�t0�s&���.s���3Mz��+�7�R���U���
������_�(�(��qJ������+c������;�����>��BXYn�s�R�G��+��C��$�P>ea�����)���]o���w����Y�����{�D<�T�up�>>I��j'����P	a��(�37�P����H&:���^��v���T�_�������'���*:;�g����W�>�_]��*q%�2���qL�%��B��>�p�4�\O���z�
�\
x���z��yP��Z�z���Q��b	������o:��=J��2��|172c.�S���\hd��+c�=���S��f"���1L�9p<����1��p������13�G��m��c(�9z��8:&��n�W�5oM��>�f��?T�5�Ddhz�0���)1%(#������9���+ck���0�-K��V�oMv�A��V�L	*�����'�$3�X�c��Y��1L�20���S��#N��~:J�+�W�>��������[��g�o������N���yNN�m�v[���N43W��`�D�O��B�R����o0e������6���+*3�+E��~���e�rU�}o0})@���X��I�Ah�w%9������]�(j@L=k���������B5(�G<�!��`gfE��w��%���;��t�9�p!��f��!�3�1��������@GT���`-�'o��v�����$���GN���Eb �4wo�#d���g��A-��n�
�+S$�{�����d����+�G�s�h�?2j.7�'����uy����q��:�3���]������#�i�.��g;��cK^��[�Z;�[����Q�S��G=�������?�\^���.�������a����~��&���YA�_L�R��w��.Kjt��Gh ��U�D`�S�d�\�1:I�_L���t�3���{$�7�i�M�T����e����J+6$	�Z�e;������z�����3����Q���m��w��>�se�`"
pdn�}��N��.a�]
�U��'���cAJ!$�az�:v����L&Y��X��������~��c�b"r4�v�� ����o��	�g�L���[��6�L�L!:Q`��K�b�=�:���m��n��<4�234�N*�)#4��Q��x��������\@04���1���@�!����g����?f����������T8�S3�"T�D���"��
��U������1���0V�=��6����D|mV�(����-���G[�Y	A����t�i���{k�K�)]�w"@U����X�7�G�?&��M�JPR����L���5�qy�c��SF��s	zxj&dxj<��
�W2@�zX�
;�MS�jf��{O����P-��vNPn���0��R�,�O>Z�}	�5�����O<@�2�C�G� UQ<D��3C�Z���o�l����af���|�O���:	�f��][�6���!�E}����pq�19��|Q 4�:p��S��$���DPT�&�S%����9c�V���a�x���PWD)hI%J����An�]*[�Zf��>�6�b�
 �EN���~�e����h
NX{_��w_��7s2�V/���b��B���1���*���/
D;����&��a��[.�s�XM�/
��x�@%��@-:1�_$��r���a��r+��4S�N|p2W���B�G����Xs�op��xn��
���co�tWf��Qe'#=�����d�s��z	��@�E'	L��X��|p�:d,8c����Xp����������r)�����/�Up��P,�R�9>�����
����{���C�`�=���B���nn[9t�o+g����M3�;��L��`��s+<:�2�7#R�y�
iy�$�nb5d�-;U�Km��/N�x�����9<�L�����o�k�	F����q4�a��o�����5���~���?1���?����c�@���ny&��|(��+%���&u6af�NK�Hn�<!{�|Kv�D<���\�/:1�b�|����p�?B�-T���}�2���+C)���z<=���7g�#�F�_{���n�=�����Xb�+7�;�@1����LQ6"jLA�F��
j����c��k��A����,x\y�����9����`��P��X2�C#��D���P���P=��<B��FKF�����P����=��Y�����a����N�L��x\���}��XV�?_L�<�X���p<U����$$4�H�:��$�����Jp���$��8����J��$�F����e�)����v?��usXF�R��<O��x<x���k$�A����la��l��u����?J	A_�t�a�
�G+!���F�25j�C���8p.(��p�+FO�843*���_P�S�%
���A�-�AA_�b�s���15���L�������E���p����<c�\��J��X��|�R�f����f;L�gb2VK������KQ��MO8}��=��D�\���Y�e��x�L�p�,z�fB�L$Q��c�6�;���7��eb�v@�7���<�J��Z���O�)N�
�1����$n������G�	@�j�o��k����2�'�urk,��[|�|��qnc��g�%�������i���&�'�����G�D|�LM}t>�u��U��x��������O7�������vB���_����A���A������YJ�k�b1�����A(���������=-��5���"v�yz�LVN�����4*o�*�3f4��D�:H��@�
�����TV�����,�+��Vt51c���h,�����Ns��[�,���b��lT�����s:�-�}�	�Dz�����V
DO!�\aL��P�>�I|�^�"�)���6���,�B��yz�qT�>�H��/	�%�h���t
�����X�����*R����#�?3���N�)
�G�o��o����0<��^��b����+d��G]������v�>��T	nH(f��]������r���cM�.�D@O]��.��S�a����/����o����V~
#���)P�������X;d>���a�{_JG�2�t�{0�_7_�D*��\z����p�K�������
�G��f_�J�>��l��u� bd��3�V�el�P=tp��[�>����A����EM�IO���b�%'��]����ju�L�o���L�7��{sWa��sA����25q��u�:/_Kgp��n��A����H-px#���/��{3
��0���"�z-�'�"_H g�G+�TLu�c�@�6�IW���;s�F+~���/>��Uyf+�[�(5Z�������g�u;������j�&�������{���k�L�,(
�K���7�2��������b�^��j�/fDv0~���6t&���:Q��lpK��_<4wn�P�$�j�k���25����KSp�[#��(^��*������C����g�H]�e�f
���4��
���SO`Uf�3""\3G��c\�8�M���`���xT������	CYe�wS:Zi�T�k���j(�eU�����8qS�!.�Q���|=<�:Mf���V��X���[R�#�x[r������N��I���w
vR�L�M���)�����]uT��\�N	�V'��q����L2��]��*�FA�7�I�A��%j�
.U^�t]�d���xU�H�X��8�W��w�X�2���JZ)02����;e��P��
c��5\���4c����[`l��F�if(F��O�����g�-����#K�Tj�&_�R�\��K8�	��=���H���He�U=��WjwGb�M��FL{�������x�\Y��]	#���������r%���p�:X����X��p�<�./B�����J�a�����D86����''���D���������z�p"D�����BQ���pj"N�o�}�ibvw"���	'�qr"�[� 2���������Mv�`jX�����*�>�u����s����#�N��T��F��"&��.D�'a5����.��5�.LV������X����h��J��
�`�"��/W��@����u�����ad���&�	s&�7-�_���R�~i��B��.�37Ez�0���#�Io���DXQ��}=����n���y��djww_x>A��cr"�JD���q�����I��F@����z;�7S����F�S���1���_�5Fv"F���`��{XND�&"S�&���D�u����<(V��b4���{rZg�v�Iq��c���e�3^O�3��(��9[.z���`���?�Qv����
��s���~�)s!|��L26
��e^IGf�.�~Lat���=	KEm��!lO���
[7��0��T'�Y������v�����7�|?~"�D�>H���)��H��%�~1l��X�n3��
�bb��m8W9p2qO|��`����GI03�������&�L�^&��������nA����W���*����xt��'����J���������2:����'X����;�4SC�e	�>��=~�E����X@��������v��(���{��?��D����/�Bp�/i$�2\I���K��G���)���M�A=��:"����y�
���03?�'�}�����G�Zf��zV=O/�G����4tw�16���	$���y���0�[�����a���C���	�������J�L���l�3.��/�BM\a�=�j��<�W&b~C����sN3�C�*~����3Pa���7s�4J����!&nk"�]��,�XY>s���u����7�t�Y�8$p_(Y]�RF"�JKFb�q�l(7���W��9ZA�T��N�)I����)������ "B���d���Zh�AI�[!���������0���#���#u�~S��i��X�jLJmp?��jRk,�X�2S�
091~E���>�� ���Z(9��$mC�'�����,n����a���L��Q�s����:D��@���B�����%�N^��57����D��g�(�����4���NTL�XM(�O05��*�s�����������&|�����w�X�������b�y�v'Bv���T������k����~1ll����/��k,�^(��-���8�����n�:����>�I�.T"\�Vm[��t�@duZ��"���f�v|e]:��-��Tv�h
2%)�K]�R�$U:1�lj����Jg*�J�Pj�
�dUz���X���)�B�V���t"c���Z������L��]�.r��X}�D-LI�k�z����t�@����d�J����&��(:�N�R��2�4��z�s�&�`L�P�5a�gM:S N�n�������|s�M��(�I�)�r��1���I�5q%��w��{�8�L��P��U$�OR�U�a����f�u]Z��J��a���v-W���5��2����N���jt���AuN���C�~�w��Cc
����p�Y����srB~�k;�l�0IT�`���6;��Lv��W���OK"����2�L<20����c��A|��Uk�������YK�E��"Y�qB�N��a�,�5��I�rX�����[gC Z�}f��v|>_�vbj�S��1SJ������')�"�Q)S�~|����^:}�x!b��k���$�<�-�e����d��U����.M�fg���	|��.���C�n�*R>+r��(	i&8%�H�w����PbF47�6���}eN�?Wk���p��#����<��e�c��]���.8���o����T
���%���Z�e< �S�U��@��]��J��p��u]D M�fW���/&�H(�)��h�0���Bk���B�T����L����;la|�����y�+s>��'7�s�1O�1_������q/N�`�~S<Q;P�>�K��=����T�����0twBw���|� >�q�0Zm�+���l��j�4&za!lZ37s�c
�������h�W���XSs��`�B�I>�d���s�g3���Lb2�
�k����<�4�0��;�\��'@���i����a�#�!,7zZA���V�?�

�E�e-n�5,\�X�1t1�J%p��X7�e��+3nb�>i}��\0~���T�f6kD�36����j7k��*��\6l�gjN��3{,]! �����i���/&���������9����[g�C�$4�32��aO4������w�H,&4����	F�����L|@����&Ge0�{4J�-�1�G,�e��W������E�p��r�?�4+�4iZ�>�D���Aa}W��H��C���q�Bl�OeLf�
�j���!��4�Rk�����(��2��g'xghc�\[������W�AO�]	4���(+
Y����n6�:��6o� vq���8u;�!��a��\u9���#�h�����;�HJf`e���aH��I����u���4�qv���iv����f�A�������?�����&���?�+%a��v���fbG��#1z�	�\��tt�������=�Me�����8�� ��t�X����M�]�s���#87����&(� ���,R���2e����}�u��)�������ZG���ib�\��B�����U��.n��k�"H&�`a`���F�dA|]���5�sf!���R��*��0��N�����*R�)v��d�0�,�2{����F�V����.�$�S��_���'���Ir���E3,�12~�"����cd9Dj�$� �S��/����"�ta��7:T�q�<��e����@42f���qM#D�;�8��F���#�8�c�&�������PC�>�^�a�fb���>0���_t�#n�6F�zaPB��a�t��e*�n��u	c��+{b�\j>��X�	*D��;��`$H
��k��C���5��<��Jq�?�!h�otwqgb��EK]�k���nk��u��q%2(�M4���N��� hx~�j�V%�(k��bw�=�����=Z��(����N���IUah��������*/�n�KG�����S�F���+�H����+Z(t�jD�r3�sqBz��k}��H��p��V���.�9��^�IK�����A)�+L��k�������H���.$.+JW%Au\U��0{�#�w)9�������U+6�F�y���U/3�����%�5����5�S�H�5��4
�]CN���9\�����Rh������.%�(�Dw)�_%�k�" �]�RG��}��k����������F.���o�JZ3]�?��S��K"�������?�����}n�\���3��(=�?�����&���?�����������a�?�����&t��mJ�g9'4a
I��`D��~1���f�������`�����	L-����J~p��^�L�{S	��y4��[���J��{ 1�������p3�-�~���t�����OZ"��[��������GH4ck4`�����c�L�E���@��������
�L(�%&	c�����>���x���<A��	�>����i"���������0&���m[!N��d�2�%���.��n{����w%�5��*�H��95���-�@��.����L�@9�H7\~��{U�>H$W�j�1���`��~�h��
V���j�2�5����H����PFF�X[�b�$)'�o���zN�e|���O��UP7���2�!����@4c�
X�F����h�40�+#nAkH{H`��������
��X���T7����=�

���L�9��P�=��\#Z�9�w��CU��Df#`�A%��\v� ��d�M2��I���E��"��)!.h���x���O.q.Q�e�
��A���o��i��W&c�$o>����?8��|��7�����72����7pL�����vU�_���m�0un����	L���
�g�Eb&���[X|���E���
J4g����p6R������0zU�#!t\���ga&b	XW��cv�#���<8(��6�����L%"���G���Q<����-������|�Lyh�/�p(�n�Z���i��g���������,�ySu��!�@�tf�5*X�ND�4��Es�-����^4�Gi�c����Qka��H�^��wW�cc��[h��#i��/B��P�M��ve�y"���Ku`�J�N��(8>�2�,��
��w%�D�����C��0h{���QO0�9s��%��`t�#���.�v�B�=�����o�9u��p��N$��<�k!j��yp�a�^�pW�@Xn��u�2�F����� ��7
�hg����F7u�`�;0R���]�����!����?q�/�N�����a�c��NWF�My�����
��{����6��l�����w'�D?(���hu�}���73|�v�����3�kW&�����JH�<'����tr��Ap�Q	�c��)�aE'�BK0��G����(S��,PCL�dF�ZN>^
b�
�G������H�99z>�=�0<�L$@��i+�1�9#��6���(f�|�i)D~X�Ml�Y.��O�������T�\GX8�F�4�Y��F�	����r��3p]���Ase]0��/L����6g�u����DX���<#Q�`�D@]f�)�L�9%����������=��64'��qHU�7����St~7
T���hYt,�v�W�E�0���_�F7���w|�l��8[���&=�z=�-LSBC�O&��6:D,����F�
<3���%�n�D���D����'����%��B���@�E��V9}z��,1�f^�W�a=Q�4������?��u����
hN���R���1�i�o����}�Ur����-�o�!I��I��J}�mSYl0}���rB���DO�����*�	���og�v~����+����q}���ZM`�b�L1������u��f<����N�}��c�k;c~��]%�����O$7g�������7������.1�r#��4�k~���.��{nA����7�\�	-�����z1l��f
���9�X(�e R/s����12Q3�\8�Fp����9yv?�m��A3� ������	��z�t�-���D@S;�������Q��5�[�8eQq�$e��&m���f���L��J����� \n��1�\���'~�:�����oPR3���c�
u��0�z���o�b�0���v�����J�N����:G��P��\����)��:��J�~s�������s}3�����Pf9UF^�x`5W���Sx���:f�1��#�g��t�L\f(S3%V^���w)e��n�C�v�cD���
lc���L��_�-�1c����1>�)W�q W�b\�d\����-|B+#����8���y��D^�Aos�`iXq�3����1~���8|f<�u7�Lk�G������]HAZV��'�tbe��g�����Q<o���-f_6C���	��L4�i�R�|��B�nK&*p��kw��Y��E+2)u`���<z��i�!�Hc�,�H$R1�sWo45������"���t��C�����fO�)�[���?���	��BHg�-(h�a�%&'�h�;p�s�M���D!Nl���E+
�=����7�v���^/��DM�N�}>���i*��\����{r������`��;�(���i	��)��,V�B�����WP���)�|���y�v���������1c�����h��R3t�f��C���v��w��w���5c�|�Z��6Q	��c^c��Y�6KD���-	�!C�D�l
lk�\�Zm��|� �KZ�Y�!.�4/"t�P:���?��{8gx&�+!�9����e%b�t�M"��jmD#&1����b���/�U����
pW�
1�
�F[�Y��2
1�����{7����-�b�(>kak���d<��!&��T���I�M�$�j�v3����,sQe2sN!���'k�m�[�����B4���{�uenf$*��l�$��r����������.8�y}!��`l��y�_G��4��sPs���:>��|eC��K���A�U�W��>u�]��X%�V���*���sD�O���2)2�=.�B��i��s�8�B�����u�Jd���&���}W
#���l�V���J��V	V��]�;�m��)Pj��FY�����\H_��g�D��C����;=8N�#X�%�WE�����s���q<��������������@�}�
��p���z�0"s�W�~2����ue
���p��b\>0Nh5T�(���w�@��U�/�h����xqd�����{~W�`��R��/�/m����:yWB �*���B�i��2*�~�� =7{�����A<�8Y$S%z���@O��aN��hgn�\�9w��a�f�������`[�6�;ko�X���Ni�������!���4W�l��~1��Xg��7O��0�7N�*���$y�
�����[����'����OJ�9��'G-Ve����Z���DrC�����<���74��P����Ek5��/�������+����y��E=�e2�����^���Ib1%l���M���"�+*#���w1]s�bW�����H~"X�[����I��>/��`�����d��`[�q[��b�[�����Yja&��d���i[9�^IL
��C%��y��TaZjzD�Y$����r��v{�o��X	�����_�o{��GLsJ��XK�t�hef2�{DTt�G3)\�l.@
�4m��`�d�SB�F��^�����p(������d+���2��R�DJl5e��
��aA
b�����s��4xb �|4R�|��4A~���f�)���m'M���,�����=*A�f�!��I���k�Ph�*��h���J16?���
���m�z����	����?z���;6�����������+�/J���N��:N����d�ay��C1^H�'0��JD*��dL��R ���,��aS���O~e�
1�+/*���JL������}:r�/N	Q��5#���T��v`j�o�����(����F(���FR�>�s���S�k�0}�Qj����r�`��m�����Pb�A<����T
�R��a-��������o^Lk���e��r��Y�����s���m+��qA�o��@o���g��W)C�����K�n����X�53
�xc��g�h���,���$�\"�t��>��o��u7H�])��D�����v��_���r�l�����#Ov-��`�������1����V��N����s�5���b�����$�W��|�b�i��@�����oa0_Z-����/��{_��-<IJ\����:�� �w���P�1�2�a(�j�i�SH5�>��!���Ap:�2�e.��\����\��(/�8{
b�0��|������E�����CJ���,��J)�8m�_�82JL$�[9%N*J�����������!���{��N�eG]&a�"��|yx$��c�n��R�?���6Mk��`hTR�(
��6M�[�8��A@��H�&J���N�����[����q#=��?��D���	�4K7��6%�AoIJF�~����n�\�����D�wfF��	(�y�\q[�C"�as�a����B�G"����U0S\(�����YO&�Z�O�t�\����!���-@�l��t��5Z��VF���en���'���Q$�'�_-�d @��K8�������(Hp��
�fS���-��=2F��2����u�<1�F9N���.L���'��Y��`J,H����[R�jd���bnL�	���G^q�d����M|!�� �3~���zc�|���w%T��,��J��<�i��	�w%�g�2���yA���19�x�E`���#�2����O����VW���D7~�A��7����%�������A�/�Vn���x��%��	:�bt'��`/�7d����w�q��d�iX���{@���o2.:B��d�aL�7�� ��	Z*&F|D�3������7<�$��"������O`LV�h��X�w2AJ�	���v�u`��D3n���*;�e���PT:0\�u�B��xA�el
�����\�$PZ����9/����xc�L�����PR	|ag�`�	��n�6�x�I�Z����������O���(���Cm	���z~��'ev��!=Q�`�
��3��w����u;����y)��v%���c*ea�S��/�<�N�2w4$�)]��we2��P8GX,����Yq?��a�R4(4��Sj���`����������^��(�~-
����G�pd���2��av|����	���7�{��N��R.������6�[���`c���%��*Vo�k&l��4���;��@������@�v��������4+#/�>�
P��T8��
7��7>P�����B��~�,���|�wTF�*���/;�������LZC�-C���.�D�-��
�������g��i�X�vC{=y���*3Zv��{���C�\�X�&F���&����
�����|gX\d����6I��N�3�� ~�"!�n�h������bt88
r^x���Q&���E�Z"l<bR�F]���$#^n�;:�E���"JQ���A%a�3���T�����Gr�����w�!	F�Ums0Z��nuY�
�����A�����xp�������n���;:�F9��z
����� P���������xVk`~��T�QJT��$;3��P�Hd�Hm�����
a�0��D���Z�4�E1���e$t@cw��&�D+��������HJz��Z��Y�?!��R��d�3�a�'�-��+���G��d<;H���Kk@��&�p�9����dA��b*aB�����/�x��i�0�����1�D����e��<��R�H6�e��gz;��,����o�3
�@hf�)�#��m��|�;P�k;��@}y�t�a��I7{%`� {=v���p�V6����ff�-���;�������<�m%P$��f�b�w%n[��r�	�f�''J�X�LC�v�x\�U�M�kG=�L'�~1������_?��{��'�	w�"�aV�&6
Gm�vWec��f�{c�J���y�7f"�o"2��t�wh/�\�T&�����j(+T��E*��0w����	��N�'X������_��F��A���F����S0�Z�
�h����7��V�
vOR���P�L���L�PIv72�cj�;��q�����y���u{�\�B��������8�{��c!B�@2��@���~Q�[Cp�X.���Q�z��TC��l�����<����Pk�<�����b��;d��q��\���u���^4sf2�������.3�;�WsL���dF�f"���Sx�.���
7�������n����sg���~2��i��f�`��V�����[�UT�~�8r}^�s�T�X<���?����p� �����}+�f����u6/'�R�.�@�����76(6��<M��*���y*���2�*tFe`�"
��$�Ng8�wa����}�r�U�Ol
!��T��7��������q�h����2���\����y�T�)�7&3]�P��;��;��x��FB�j��������
����;8��/�b9](	�>u��A���b�&WP����XR�d��<�MT���M@{�j[b�������b��n�P�v�����;�?x?����$/S�������nK��<�/[�;.�����F��J��\S�<Lq���W�t@�W�8ZT�f5��`5�u:�]0e�)���B���%x��:���++sO&&6�����"�iN��a���*��d��*^�{��*N����R
�������N��C���6�y�W��������1�b�MK�oT���p�Z�}��,�����lu��0��,,��=�]������m�F!t^,�o�*\`�����7n���?(�����TVe��_s�~�p�fLt��-�^ka2>o[UC�r-��\CLl���g2:{�\�b��)���q*>C,^���(l>2��O<A�K�%~Lv���O��a���	����L����#�vhK�3z�a�B�Hb�uD��C���(n�0��T��qS�9��t�J��yI�t�`\$X�"�&7���<.M�{�61���$���I���=|�������>����� ~W"����_��n��M$�p`����s����B��W\�;|D!T�
B�@}1
�	���
�+�*���_#��G���n
��ba|�8z|�SH�X�?��o�2�4��-6H�2���U	�*lL�!�n:?vf:V��t����a�dJ��Q���d�����0�?obv@�����])���ck�n��SfX�M�3�|��n�G���A����!�����<����(�2��dJd8��~��	������Tw�X.Ln���B�N�6;O�������#���4�rA�OT����������l��� 3?���L�.\�c���R��0v��3)�c?S���T����C��B]a�.��"���ihV"���E���*��E=�>?�B�iz�@-1Fl����T�a��L)�#��"�D��|b*[nld��M��5���A`�?3<�J��o�14J��"\���O��s3�1@x ;�C���8�:|"9_�~��i�DH��j��3V�J�p�+�{�h�}���s[D+!�����
��������s������
�w|���/=WF%������a6H!�s���{�0����B�1G�6!��	]�	%��
�Yn��	%���fy+w�e�f��?r�0�V~�'��;��Vk��������������������������j����I�����rq��!�|��]j*����,��Y��<-.+JW�������7�X�Y���`CXt�g����`I��!�v�������� �q"��G4�c�	A��C������]�d�������W��f��5��$'�3`��7���d	�n�(�P��y�����C����V��7ae[5�[�u�!n�N�?�",p���
l�_����b��m�����A���z���qz��\t��v[T
�����A���������44��mL�`��*�D�������	�A���b�P#��������S)t�,����M<RN�Z�����������@�AG���6/P�Ft1,�)G
�3����k��~<�|Q�DJ`��V�?�m$C�&����E���&���X26d��d(���mUMEO�*N'W,	
w��5jSj���d���P+g�Y�	��r8�3t���Na:��0�)��
&j�S���4����_lMM`]�TJ����n~�{�NIP��a�N�a�C������V�-��~��+�@���JQS.4J��W�^��������[��P������q��Oh���$��`����T)��)�C��j%CP,a9]�7*���"����c�Y
�/�B}�����F�e1��|��K�*B�<y�*�4L��N�1%� 7�dF��L&��*=�1%�z&�	j&��������L���e���\�$(�;�@u�r%S� ��9R[#�[�:�'�j���M�$(@Cm`>.ir5B�k����P���I�94M����j�"H����6$J�ResO@�/S5
��z*���i�d�4�5�T���j�~�E*��P��m
��/
������o������U����HW�K��X�e�� �=Gm��I�$�G��l�F�I�l�o��(��9�����QXU�����X�}�]�n?�fXqY7L8R������bu���J�:F �[�d���"�z&ctc��;�rB�dh�5��M������-.}4(��[��#C��
e!��B�1�.�p�X��'���#�9�������@��&n�m��d�p#KNXq�Z>��g����0~!���h��R!��Y�Ri��{�c\Z0:�������?bA�r���� ���h�O����1d��QLu��o�
$r�e	������_v���������f1������N��$�;t0�d�SlS
��gU��e�i��RF�8�
�"qK�u��#�@�X�	���$�Q�&��@����i�����S�iG�h������"[``�<�Z�oWg��B����(�v��Q�/�,���Q�gT)�����O�6n�����T�@��:�s�3��p����U���P:�u��h&.�9��Kt�������gO��������2]]\����"�����^S4�
�����{�PiK���[�����;-*���$�j��z�<��ct�"�f�G��l�]��h	�A���1e�X�(�nGpT=�8,���Q(�J���(�9Rw�����i3��\�+��glI�a�v. �����j�y��n&A,HU+�+"8D���k'�u�`3cAS[jO�V
`�:�E�����2�|[RaS4���\e+2�OBR�aY"�L`�
��y������F5 ����9y�CSn�|{��nv�X�J��2�6*����0}�V�H�]Z�������H���2���0���K9�4�h*���Y/f��>���M��wV�w���k��4g~eS�����/����K�	�a�y������O���z���*#QOX(��'QOKz<����D��}����rN�%n
����",��b�@��/cp6tPm`�I����)'7�zqy��������*X��`c
���������"Q�F�X����r��e5}���,)"��Ts����������w���ENP?n�/�����S7�y�O�I��"�]�'���Y��3e�N�k?����g%��u�d�14|���|�`��5���M������,Y��L"�FA��B���#�.�y&U� ��0i�����	�LE�Q���d�{�3n	�)��ji3F�h>Zi�%b ��[b��1rb\Z�$O��	�d ���`M�78,�XF����!M���wP,����5oGZ�8�`hhb���>�5�5	�qM5H�\P��tt��a��;����I��9,[R`A����6��
|���??������q��P��[�7f�n1�O�~�yl�t�]�y"��G�974,Y����n�eB�f�l~	Z�9XR���������i���B���'#������hF����f����]pcvL��'�co����Dh<����X�����k0,��\��}������F��le�h��
��������$;����:���tep`B[�h[s�X[+��&��v�����b�,�V�g��1dc4�^�6��70��'�p�
��<`Y
�<�Ir�A�6Vvg�Ie���)�Hf7%�P����&�������`$-]�d���p���,��6������uq�U���&s\t7k���q�J���T��&&cA���@,NUN"���<�K�����i<������{!��eA�Rb����hr�M����Bb������,<�p�o%��*����g�f
\P#����o\6�{�y��`�8��������R�����"\R]��X�iC�4�	*&C���N.�
s���gTG����V�$/Fm�����N@�3�>O�z�BL����2�4)�����'�{�0�6�g^���8Z/bpJA��|
&_�DS��I�&_q��y\.�Z�Y��z��q[��'��^��4���t���[�]�V8N�P�X���
G���o.�Y�S���5�nGg�,fwX���U
$��C�W{B�K��:2��47�O�sS_Y��_�������NnDm�4K�_!P��t6��'W�t���u����;N�����#����l&~4u���%��@Dtb�������H���-C-��]hr���.�������y�B| B��@�d��1�]��g>;g@�=��(��&P
��������)����(������,Jt���O/����0�����=��A�i�����=�|�R�X����V��vN�\(�/��M�5���@���ry���:4��bC�����u[���8���^0�x�����b�1xn
�n��|l����p#��~����W������WoG��El�$��@�$dBK�H'%�0��2��~����'(���4c�������px���*�'c�� ����cj����ux�b������Bb�~=�_1��+.���^�2�8X�{&$�j��������k��K3��f��(K_�pzR����g�2�E�
�Z�'o=
Y��I~��oJ��L��
EJ��P�����
8��h;�-��(����M�-]�y�B[33C2���2�����C�I'�
�P�u��
i�������x���I"��f0�~,�S������:�h����3b���I��&y���>CG���^�0�+�@u���A\��X�b�77-��I�9�n_"x�����Fe����#
��t=��"�gc>!�L���>�I�1�4%�#���s��a���]�'���g�f���@�>U-�4��k���:`�*���a)��$}|m�n
�����Ps�;�_���L���}����m�m�S���t�m;>N�U����IT�_�l ��������>��M� ��^-�T'��*j���3�V������(����|!~<���
)��a��c�o`��
��m ��E�=�b7��g�=��(i��$���b��6,%��%O#�	�W��;N����
2�&��zKZ�	�R��G��g��S�Xo�f��&���o�����
���+�<�{�X�����J(������#�H
��>�����<����c8�p(��6�}�6�;�����_��_�1]��]?����[,�@zZ����?�f���dlO[U)	{��^�3���{�^���`V���{�8��U^���/����
g����p��Y~Y�5���Q������Rcb��
2��2-��@�~�L(��?��N��)��8�d8aE:Xa��#��@g0�O2�M��f����[9�!(������(��N�A��T&��-�B��#��d��>D>7X�l#������
�#���f�YZ��Z�l?��JX
��ZR�AYZ�:�cg���������4�t
=��\z�a��OwC.cK���a&z����jS�&���/tz��d^�|�dC��-|��d50;;�7�<n�9���c����L$x �.�.G�^�q�u���9t��n�G@���QX��������R6�v��Tu�����R�]	�?b�PS��.Kib v�@�#��F42���7i/O����?�$�������n����f������c	
�s��i���@�S\G��(.�r���G��^.ng�������"P\���~QQ\��|�������E��_T�.n��V.�r���{�!������}��}������+�P\<���^����b��$/m����V{�vMA\��[vMA\�U �"P�*G����tu<���tU���U�,�����R����XJ������t��jJWK�����������������j/e�K�{)s_��1��E�����+?Pt�=K)P�Uz�U{��UP���P\<r?�o)��;%�Pj����^u_$�(�t,��K��er�5��v9JqE|9JW{������/G�����Q\
e|���q��~��qV�~��q��~��qV�~u���V�n�j/W�ru�u:9�a����
�|9JW]-_���+�U�������\�&C3ge�W{�K&V�JU�G��2��*QelU���>�4��}TY*���T��Q����JQ�G��2��*AeLU~��>���}T�)���S��Q����JM�G��2��*1e,U^���C�=3��>����}(�ky�������;�r�����jR�1���R�})�QJu,���w�~��j2�WK����y�������;�r���})s/e�K�=�U����D4��3�����N�
 ������*#P��&$���p���\�����[�i�]������;������1�c��@�Z�X#D�`y
�/q��)����P��N����[���E��7��c������%$�������QK�4�s"t���BHtmT�"?29����?��T�*��J�����tPpS(����u�*E�&�����C�w%�n�?����1�bC��2�HWX2�}�S����SJC�.X�
=�|"�������y}�g���3P ��,D����B�*n��@e�����x%�I�k���@��"�@�)������ME��[�3�q�  -�qy]�7��xN,x��D�C��<(�	;�U�y)w�K��^�k����~���H�F�~4��6t�SB;�i94a^��������''�pL�St�)"Bi�������Y���.��w�}R��H_��q�p!:����A��s?�D�B2�$
l^�� '��P��(k�����}8�����{��v��p�&'����D9�u!�������R���]��
�����v��JHw;2��QAX��XU�@9���]q uev�-^p��wA���yfZ����������`Fc4��;��:'�dj�B0xZ ]��-��Btdx�Bq�xX��d6	����7��e��C$������vB-7*��JtlOh��������;����O�� �A�I����t!G�aeKD�}�	�x�n������j�X����D�N��[�`'����+v4���
���BSU�&�XI�����]�����_G0�p�q�c_���F�����J�h-���>����H���g�C�C��m_�����.����������T+	�H���x�hD��&s��L�*�9���f#�7L*������{��0�X���:��
Gb^���q#����*�0<ue��w%`kZ�s����0vD��
�������
���4A��TV�}�+����o����t�Rt�aCP"b|����}/�2:�x)��d��9� 6��W�7"AU���@������+,�.C�;.7��o� ���l�	��pDQ�%*n�m��c���K5����I��#L���*9�A���
�6�����M�� .��J������e�C�����7��T\��;s���[G�z�BP�K�GB��2�]j�H���*��o��24'�S�kZ���k��	p�5C���R��#k7�����G��>Msb:�n!8�$���s�c�E�p��� l��k{��}	{Y.>�%��� Z�A�"���
A�����s�E�H���M�^{qN870�z��746��?9�ZX������p0A���qrLhb>>8e���(���4���7�	o��R+��}h6!a��w%����/w�#�r�K��0x
o|!v��&n$�e4�i�y
iK�;��������nH�zv�(3��u�����`��316�keG�����s���w��.D���ZMw��+�C{k�1KW��>�]�$����>i�!���X������Q%�P��=��e\d��JpTpx�wiX�7�������P�ox���5��2#'y��������v��Y���	(��&��	�D,�~s����>6+���_�c�P�7���J�X���u z�U�C�y*>����y*�C��:d��S�B�n}��x�
���� 6�����=�f�����x�`!��
8�"Wl���7�EZy��B4�D�NkQ�_����k@Z$y_{���v�w����z������Pz���{W�^���6G���dj���M:�8-�eB�d5��&mA@������4��qrB�jv��{1#��B0���6�y�hA���D���Ul��x`?�����fNY�Z���w/p3��@���������8`��zZ�Gh�������D���*��#��$\���m%LS`�p�"����F�w%�M�]�e��f�V� ���a�����b��(�]B?��%}n]��b-���pW	�����t���CA����)Aw[�4������>&��.����+��7�y���q��
�|�s��g����K�������X�Nm�s�*\eL�S��9o(��'�K>��G���a1���8y2�c���w%�	�z��Y��J�m��=��W����O.�H,?=x�h�m�~q�0�|���
Z#�h���;5!���Uqx��}���8�@��N��:��i#HOv�8��"=x�
���+w�N&�!��N�6�Zzw��o�p���k�7����7~�l��8�Y��e(~O�>6���X�q�}�A:���S�^�k����Z���GxoM���.���8�A�v��K9n��|�.�����u�F�{���G�b<�z����0�}����^Z����:P����7�r������B���psb�������q���)U�D=�B�v�o�>/����A:�}o��k� W}���4��2=�2��1�.0�	�9�s��t�����
�3WF�5#5-*���H2U�[A�iIb��I4c���1��v���>WY{�>��b���t�>���=�e�l����P���SE�����T���7���>�����X7*�U^<r&�]���S�����*TB����^U���m�h�H��f��+��w%�	��8���36FS?�`-E���we�x��
�>����c��j�f�w5����A��U�2��]w�>�JL���`3W��p��Ph�>]�J;�
�/cMA�zg�V�C�s+V9��H$��n[�<U��X���Ut�����L�C��"��l���F�e2��|����G^���2r�@7��������t��_�`h���D���RiP��RK%��0?da2V�W���3��2u�i^b��$Z�_��YkM�����$�3{���T%2���(�y��4���<`7������/�`�w�t�f,2T��H>i�8�O��y�\�����������$3Q,.E�m�heC�F]\l2�)}D�O�l�����#�i���U�C+�4�����(�	���������Nb:>�U&�����H���
\� �Gvwv���q��3-n��6��,���**3��������%$c-����+���k`�3c!qf�O�]	BN�������(�C�
wopLsJj��������L����O$����D�a��W27:n�f��������2�1*`�`(aX�38-��C����0-I,��cp6��n��Z���Q�c�Z��xc��iB��n�$~W�Q������u�JC�Oae�S��`8��N{���'��%�#����?`-��Mt!j@ <Nv~�����';�;
�%��[tm��G�g *�Q
�~�f��������~�� l�#�� l���������i~��.3H����~����\��o��.*:�s�'���UN!�b������e"L�~�b��x�b��J��*����Vj�W�y�K������F�A��i;����z����&��G.���J�aS����6A!�����	sv��f-�]	�6�� ���i����97�����y4���i,�IV�E�~�[�#��V��7��J�hX�m���H6��9x��O�>�2���G����2��x�M�2n��yw�um�����:�1s����kjj���R"��>�JZb"q�+�������<S#�T�Z�t���"\S�R����������3[}S-��k&0=T�D�7��
�7�����5��3|��#�D���g�,�&bM=���@!Zjj��I����-�!FN����jsP,�z���>�7T��|��E���!Bp����)%�Q�A}�{j^�E�{
LsJ���#AsOU" �S���T���y�������rPU_���n�:q���{����0
��C:�uj54������\�����'��Z����	#����(�P��CU��o�d��)�H�Y�(���!�H����"0����f�H�p+s��U�AU��gI9#�+��<e\�"���!���2�n����>5�B���@Lli�}Jum����������6P$��e�kT���;��UM<9���d�n!�����7;�LsJS��:<r�h���Xdk�5�����v\;Kk����k�\�0�@��n+.gV��H� �mBp�b�UB ���-�n��'�������>�2��g&;n!�T#���l��qK��k�ks}5�4���8A]���p0Wu�n���V�A�F�#�mm���l��i�����]��:����Mn[��t�}��=�	�����bq���� ������xvs��Q����o��{� Ws�5*�r��Cd����2���i�>��T&�
�'���;l�!�����r��������3C�c�2�~p�
���`[R������b�nC�7�xlI���6zl"����K��?��f�y�-*l����>��v!T2�}�S��&Op���i:�H��N�L�+������-lv+T0(�m'������Te(����|��f��B��N:P���9T��
�������r��XM$�%<|_�uYK��z���������6��ck� ��#��"=��4��+����|��ot���}�}Z�����:��S%v�
+��<m�PMJ��Tm����]������(����;~_����/��)~_����}��u���#��+�8`n1�I������F8=�q�>�����7rV��L��x6:>�������wC;L�v���_7#���3��@j�]��=�{�����(0��
��6��n�L�x{0���);�*<��0�9i���a{e?���s�G+Q�F���
�aG�F��_>����FC����~W�z�� �VJws���e����V%L�u�~=?!�AT"��;������m�PI�z�;�~�����Z�����x!t+8d����;�:�Gw���}��VVB�"MX�w����a�<(gx&A ��o����ae�oR���m6��"�=i�M�8afS����o����gB��s��ay���Td���<�X3��/~�N=�j�hh���0WZ���9����_B�����a��2���	!2�G���N���\x�2��g��.�T&c=�����W�j�����S����1�]+Z�|5�4��e�5��	���`�@[� ��m]�����J����#�N,A,��k��~���@�g����Ws��?�&dp�Jt�a�a�wX-F�l[�p2�
ED[@�����H�fN0�\ ��MM���r,���F��.�$��7W1��7hBu�V���cU������.��]W��|�-g��������~~!:�:L�=�����!��4������A#RW�NA6���?uO4�;Mq���u���^e����Ub�+#x
t��`�
�f���v(�]�����������&U�|�)�J��T�]�=]�b	�W���N�J9��}�ya2
s��t��h������g>��5�[�2�u]}�p��YsH�O*#X5o��3r�xf$����U��A;�'�+!PG����]S��5������g`�����	
�ga���Y����/+#�"�'�Hm���B�XzK�2D�����6�~���  �<��0�Y�S��(Dv��(������3N�B 6�&B;���lf%���C����)Q��^�E����h�t�{2��J�t�~1�	��`K���v{��c<��x��5��j�������������[	V��])��	�0?^O� /���v���h����]	4�#�c�e��qkUa�fY�<*���|B|v�T(�P<�)�����`����a2L2�)T!^����=j����Z��-k����(E6��X+����q������8����^���9N
':L��ppe��%H������B
0N�b1�T�#`^�0t
V#�`A��F[ t�`ZL`�S��`rt,��aUB������6��7n�*"�a�6���G��u6X!��#X�����8��Nk��p����h��tSQ�������-�����>������-�T�H!�����DF�W�"��"���P��m��\n+#Xu!0j^���`���h����H�N��f��MH	qS��B4����	|�V�hd�wa�X�B
	q]T�����k�~;
�'����t�^$nJ��?�d!�=N�P7����U���\��2��{i�J����<����X=�z�Za��B��l�,���U��*����V�1	�I>���H424��V�D���/W�L�![�v�Cpp0"Lrc�$�x�2�{�&7��r��F�����D�Q�_19��ll#��-5e��B9����1o�0��|,f����s2L8lo�l��[>�x�ThN��
����Qu�m��4�0�������|��q�����6�������������0�ZKt<�mT�/���E�{*���V������1c\k����
��q��x����B�1.�=1Qy\���@oFZ���C������"�ZkCEs�'c��<A})��
�_�q�f����0u��PM�&�\4����c��W���rB�����p�O���/��x@���0��6W1�������6gaZ"�+8
F,�Vwo\'� W���A���J��A���5zT%ZT��h/����h��(�
��L�flk��-���5�.����j-�w%0<&��,3�v�NcL�f-�S �.+�����h�V��������V��0
����?�<�z�-�7����s~a�(��b�;Do[���G�Bz>�&�0j��]h*�m���#���.��t�� ���\;��pJ������
��z���4�1k/����,��]�C?���� L�B�
���}�����	z���5�T�{�7TOZX	3�F���DBb���zWB-�g,�g�0�kLs�s�_���k��(�g���eh�YG���+&�]7�K�4�(�U�9�@n�X�V���\!�o{�(��	�*+����yWB�U��������@��!�{B'^�}vlr.s�����rG�@u��O9����^��M	��DB��u�n7����H�rN�d��	cX�'����WU�g��{j�0i�z���`�Qp���l �D���]E����i����#�B��H�[$���3���V4l�O���d�L�*P���@���/[s�Os�TB�[Q(��-}@���QA �K�C���":��+�a�Kg4�<�b��O{��/�I����eC~����g��77|<W��6��#X��Q�V�R!�8�bhh�b�	���������
�F����G�;a������@��Lc1�D�W�P�K8V+����S4�"F���a9$B������x J��R	��9��]u�������'����s�x��"������E���D� %-�������>������7c ��H���/�"i�`����
Z���F0��TzG�:�	Ye��)a$yw�1B��@�3Ugx��>�`8�m�@�_�L��(�x$�����-+���N9t������������wa��x`{i��4$�h�������0�h���X�9<|�������k�`����UmP�� v�YN�-Z�Y��
�2�M"�gV����|���o"�{��B�N	toY���k���\��G&��J��#\�vd�W	���>��
������'��[-�mz�����*#�aMKM��P}O��;U���G���rd��``
�W���7l3d�_�d&���H����T�WWd_&��t&�s|o�)�TF���P}7����F��u�w3�x���	L�w3[�\��$�w#`��>)�(�oa:��&��%L�UF�z���+���$
R�$����I�BZ�������i�����I�=0aT`��.��:A�Q��E�c����=,&����~1�|��C�n+8���&	�w����[�|(6�+���@���������M7�@��J��C���*d�1�0��]Bl�7a���x�^@�]�|$x���m����_T�����k&�a�qs�����7��3}V�|�0���'!p1�������	L���C�bB���Q6�p��\#	i!8�HH&&�>�����k������GA�����-'U<�"{6����{����+�p��r��8T����O����/�f J�L3?���r�����������I�0b�����0�M�3OB��I�J���� "���$$z{T��[~2c���a��aN��A�$D����-u�0"� �����������
�����#/���[�b
"�����)���TQ��J���!���&`����C��������}4-���>���N>�W^1��s��E����|��GH1&�����Gf2�������o��dr���B����@��i$��[�(�/Jp���+8��
�����B�����^/��,�pU�E����C3�TBo��;�|�2�<F��t&�V�v������~��R<M�6V�)/}�l����
;��U��z�A�������7-�-n.�X�C"V��_���f�*�&B���l<z (����B�i�v�N�0���O!�s�J�pOAU��V��|�!�7Z������������������d��W�
���W�z�����4�0�w3E�}o�r� <�f�~�����aa�K�2��c����X!���0�YZA7��7U���v��&���L�����l�q*��)�����B@��O\����\��D���;�]��"~�iq�b���`�6wB�'�2�5����921FG���F���a�M�]aVFU���A�v�vW����5|�q�0.�c`��2
}��v���blv��f���
e�C���i@�����%cL.�x�d���� d�~��)pB0Wx4Z������M��Uh�M�mnjDKS��}��>78 �������/��4�Z�|X���Hi"��T���&<�3
��&J��Ej��Z��T�=ynJsS�����V����q��VD���Q�����
n!���7���<g�B4�3I�C�B!�'����f���B��B44'!�h��\t!&1��$9<��)j6?��2��A�Nr�La���E�O8Y��s9��}5�M��%�VF� ��i/�$��b/ug6�X�0�������`
W'���f27��+��	C��#�n��0ryB1��� :��.�/Ot&[��DgR�w%l��{�]b�C{���;�9k���u�
c�@�T��1%��m]��-P����[B�4!������$A��V���f��	!�e��J8d���q^���V'���	�r�E���^b��.u�y��%��&c!�}�LK$liB���N��� ��L(�E'�DY+���s�o4s� &���	�{�-�4���4�X-��U�����D��,��=&�����S=�XL�S�cB����.A���#o[���r�V����U2��DHo�h�K���#
�F���}��������U�t���UEqU�p�U�tUB��UEru�PY����
<z)���������
;z)���������
:�w9���e8�t��_�{�J�q�4��]5�������j�;����SE]�L~��*e��gDW)SHY�������$a��?�0�C.���oL	ka��g�*>4����o����~�k�������s�0^����p�����?j���O�y��/���������k��/��m���q�	#�S��U����~	�yM����	�zj����T�N<�W*�������d��h�f��|!jT^��W�gfb��E}p� ��~��-��7�A�q"~����F���h`��gD��7�#X����F�S�!����	�J�>L:x�!��`A���%������0����'h��C���5�@
���v���f�g�D�2��~J��L�[����e�PE��N�+��	J��UL�LsJ�����+�`����D�����D���a_zO�����5�7Xe0�I���� �&R"��xc2Ry�cmy�$��#�-�Q�U�i�/���w�UC+Y�aeCb�1�=�h��4W���p�_M��J��2�j��������Jd��D���*`��O`,um!vB�s3�F�1����"=�����b�B���=<(�_Hw�?(�n�b3���	U[`�S;��>\8�X�X�u� �M{��Q�)%��?/J��W�&� ��Xm��r��d|��a���Mv���E��7��	F��c��`�pV]kyzC$f�FmI;�g���1��2*<������N�����TF�(*�H�'oG��
z���:�f�<��2�uR]�&�����,����X@�-��<8[%���y"N����Z�����2;��R���|GeO|�����kD�7`�����|�Lnf��/�p(�n�Z�����Q�7��4�F��-M���}1�x��3;���5���}���P4��~R��j�UC����N?qX�ve�����^
o�"-�.)���j@;7~Q�n�����%����%�q�����A�C����Z�=p|����ko`��+�%J-v#�Uj10-�P'�k��f����	��/�.!a�8Z����V[��V�~K��eC]%����\'�D���!P��L,g����W�p���q�u�A7����1��Q@D�8#�n4��3@4c�BU�=�SH������b\�'n���Ik���DHN����+#��<�N�dp3����0yV�����A�]����c��2���h�h�X~���]��*�3���I0>j�������vj ��s�)G%��3����~�\5[-�H��F����(S��,P��dFp�}F�~V�R��2�����H"wA��q�����0f"���O[��5S���	�h���Q�:���Ra�2�5��D���|���]�|�������Q}aO���p��%�0�O�?MG�[�����w%��uO�����bzr����������6�����#��S�`�D�C��[������dT��^����0(K'��qh��n#����n�6g�ei��}���.������z���8u���GW�Y5�
�}y��8��)�A�'3q2]���������n�d�[d�R-D����'��i(J�u�p}�����Vyv��p8K����������yyC�?�j���"p���4#���R	��=�_�ma��fh���vL���7f)�L8�+�����:�x��5X�BH�b���0���_e4��3��L��/��w��,�I/1�C�2�����b���l/�`XP�l�/����?p��5��_��k��#�����7�&�pm/����e�C��i�`��F�i�,jz����������2��2�;���]�:�`36k�Dh���BLm�O�^F"������}�	+����g���6����	v����B�&o6�}``��F0�s*P��=��hr�9����Q��5�G�eQq�$���&m�����O�LN
!�Fk��"�dA	�4re����9�������f�B�`�E�;��PS�����TF0R�Z�����B�N���:G��P������')9�:��J�~�!���*#x��������B��TF^�x`5W���Sx��,:���:���2�O��(��Tev������_��`�v��z��r�e[�=o @��Lz��A�����;�� y�,V)Jk�6�We/[�(��$r)0�N�-Lr�b`�)'�?S	k��)�4�/Le3�1�	���Ah��)���*c\�n��=,|
��y�cq'��!ta<1����EK��ceXI�}��>|N�z��=�#V�5z.R�o��{���$=Q����
;b��PI����7�w�!H)B�;���<���\|'M�%��d��c�\�����������L����P��GK��g��uXK�r�����S}$�Zt<�"����t�b@��Jo�'�[���D���pI��������b���D����p�sE
qU~���]�0"��`���w%2�7�	�����n�D��N��F�F����(�U��X�2�U�o-�a�������iS��d�B*W'�����j|�4�����O�<7�NJr�<c9��\a�8o�:8+�����&"�&�I��CZ�J��7��?�<�&f�`��k\+�����!�%7�6d������}M]�U���L��7V�[����r�C�"J]J2�J���8��3�Z.�	��>=��-]^"eM��$"�����(�"�{�ZJ	�C��#����w������Bp���f[]��0��mk�	V��J@n���09�m.����K��{jb�I&(�`�Rs�(��Z�A��<�>���g&C3�5��>10:���h-��OMa��/�M%���*i��vW6��2x�2c�TK?�.:�u�|!�E8�J�����3�bJP����~��-�+3�^�|��]HK��re[~�Pjy�]��'�����15�@���>�^��R�����E�����(?����A��f"C
n2�ph�])�����>��j����.3�j����Ad[����+�Q����������-=�B��j���.�Q�1L�J�z����c:�36��5�!�\1��*_T0����0��M�0�C�^Y�I�O�)>��L�����b1J� P
'+�����w�D���L_������Dq�����������J~���L�N��]�B����*�+++�����������B[�!����E2M�����=�Ii�L������K"��V&��kU_T0�}��1v�vY�3Q��N���T�����kM
p�2W�V���br�oO8�5�6��}���i!��3fC��`}�$*��c���eR"���O��X3cm�����H%U��KV�������?����K�VQ�D��������]���7{^Uj:s{�e"�el����Cbgb����@�L�4��N����'(ThnX���	�\waC�������0�����#�������Z�,�?�`�3QXB������
��,�2���q���G[9�8a����5��4��L�LM�8@�$�:pb@��#Zt�b�y(���0xk;�M������P	w��M���X���C�2c���#�	�#���aw��`4��z��\c�)#h#!�I@V���&x\S�(*�I�&���%S��mf��>,O5s{���1�Y��2xb  ������7�a&
0���g�h�yT�3��"�q���gFT0!����YB�6�sF�2���mWT�}�Z�n�w���X���P�������E���uq�eF���N���=��DcX�
���}l����0�����v_����+�%%�)���9=
s�b���a3��)(����J����0��}�����0����������wT����I���oZV���)����q��x�.Yu����6g���������l�uk�+,�wB���R�����xOe�ML!�������%a�]�s��(����_3�D�3����n��$�L��	�h�7�h��)���L6����g�0�������T��_��U�<���~�~�7���~��	��J�#���+#\�-�5�x���lc���A�|Qh�4,C����C�|���U��~��q�ADXz�w%K�<�NgU��3��#���6,�e�n���G����&�9v\$���7�������ap0��y�B@/��Q��Hc���,N�m�����������J"����:Z��a&������<�n���^$s�d �l"J�|�{8do;'�GO�/hh5
ZL�nn"}0O��@-S@4)7������Y�$3v����m�.�Zu�W�C	��i�z�`fT��.+�#�7\"���
���Z$��43�Y�.����^��a���pR�����R����&�;���
V9�+���J���|�<����"����_�<������7~� r��@��	(
��i���9R!\�������q'����DR�^�5�z3�������e,�� ��|~��G������"[�����o`�k�=�3�6-�8��m+�.%�}b&�2K^�vS��Z������ZB���0�~g"#�����x1��?�*!���51����c)rd��v�V"~�R�BU�+�������j!/�I�f����������B�K\��/�jiZw�p�)��h��M���h�� n�T�$�e���5�7V���S��wZ��b�-D��i�.O�>�bI�����w+F��J$x������\_����������q�d����z�"V>7,LL�E?�F!
�,�;��JY�����w�T�����M��e|�g��	n��\�6d���e!���/&����m%����R�H`�0��y��TtQ�����.?\�7C#���>A
;�����,1P��b)��W
D�ei��1��$����V��c�86����@$���
e����k��	^��pK3������oN�E�W�2,?�y����k���w�r�
�F���f"����5��=�J�fh��I�Uc��s�n��&�n��K
z'w��D���R��3�� �)������}R���>�kc�:�{�����\D�Z�P6w���b]�.">���qg��������LQg��<�z�����i2�6����"�lB�~�'��$$�EA�c��L����j
��?��<�� �	"+Y{|��D�l�{
(P�������T���GK��4�����r���������%'lC}��i��k�t�~�9�d��|(��M�F�"ab�w�)�AFP�M�����������+}j�@K��]8L����������#�lM�GtLO�<9��3N9���S��	��aG8|I����-�)���6��:����&�0�"��=����������MpT�C�����{��Y�EQ��+�x����AZ��k�X���.aO�W���O��M#��Z����U�a���m�]�X��Y��lH��D��K�\lm�iy��������i��
!�]�W���K�j~��1����t>^gHj���8���q���)���ef*nux36��<8��S�_:$���:g9z}�L�b�z��p�����x��74�>�������z%|�B�D���g	�t|�����4�Z�0l��R��^7��>��	�G��j(:S�I�a��|�<�n���T�w����:Bj���w�?�SKP����ko����b�M�k��8�=?���'\F0�!��-?���t����Q��7��e&��N�KB4Q"`�\��2y�Xn�������;c�:L)x��
�R�;c�\�B�:���-�A����(�mu�Z������l�[I��p��9��z�#��g�=A.�1�O�6f��KV����!w�����NG�����3��L3�5v�w&�a�0;e�9�KY�-HMu	Ycw��r9p�cP���:����Bi��o��nh������nE��"���N�R�������1��FH����&��i����2:4nf��(P��b�dB1c5G%0/�^?�[� M
�=���o�u��m�r&����h��o������Rd&*:�w$�����b����&2i.����N[��1��PU�iG@�[E��p'6?JZ/	��(cq=����
? Z�7���7</=�E����HS%b�t���U�2��1;�eB����g">��)-{a$�S���F��V��w!�L��\Fjy����r�O`��??�"��-�r`��el���'W�l�<&V� :0Ad�:���il�C��@��x H?'-@��&�HZ��G��4��7su��!'@Z������D�*���Q���e���'�.�������@�'�e��\g����3���v0���m�'c�������u\�+��n�'\�$H23I�	�"m�F8-Q�c�uOt��`G���<���3�~C����1������/��b�Z��J�Sr@� ��|&���������w� �J8v�����M��'�����p����1]KPwO�gv��	G-u~��!���VZ��@."��8	���*B�����C��3�:��F�rx��	��"@r�)k������8�F%���	�9|7z�����bNd-h�C����:�zG�����4����y��+��D�
X+g����t����(sr,�Q�$8����V���"�cQ������F�����4��L������{_7-9d�n�JW)M��b�����j��'�X��+�p�R��1�c�k����:c�H3X���`��1l����Pf��P�~#U�i!x�<���+�� �b��dYP�VZlZ�<��a�����"�	p���Q)��f���*Yp�v��g���L��I��.<�{�4�m@���7�����-|c=�+����0;���������p�kj��R�Z)�=D<\�&:�[�v���0u�n��9������Wfn��1��C��*���	CF������3 7R�tt����t|P��R�;%h 7�U��4�d�D�o��}�v"��cn@�������Y���4N�f\�����`
�.��'�U;�y0���������q��;X��
����mc+3��ziLP��.����j�qTl�2:M x����=K�^��Q&�q�	y�]������yT
�&�3���|��]{eL�-��1
S��'N���&�	�Q�Cv�c&�	�|��[Bt�-���o��2f� X����1Jz�'���'R�l<��.�PB���TQ���~������g�g"���P�5BDE=:[5�XRE�&����m\�����N0�|^�w���X�{(�~f\��6��5�'
�p�?�N�]0���N�H���*����������f�+h��
�f�6J|���OjX?��M�g��Q3�yS�w���M�7�����#
�bx�l�.��*N9������`96 >�P��	W����H��w��KX�\����$DC�|�\�����8�H�f3���i����#u�E�4��+u���N���H���|����k��~�����������s4Q:��]��cW����D��y���9]Ev��J���[�zz��H�V�`���z�|1�`K�����S��]������:2
�6te�3�F0���`��b.G����s��D`���4c�8,m���Q;w �7#�a�:y�������>��l��`�,���m/��y�_L����7�FT�I2NT����rS)����g���F��U��b�a���jz\�1i�\�S��{�9�7�V�A��VW� ���7Jx��jWf�+/:�����ws+bejg(��~��(������)O������}��L7C���=|aP(ty9������JWT��L��������se��6z��0����.�R��
����%R��/V�;�_�e��Ar���<?���$2�$���1�1S���jp&J	v9I�(C6uw�j<����� A����n=����(M�P���;��bj��ze"5�D�I�LU�^��p(���JP���$Q� 5��$����I�2[r$�Yf�\\�3t������S����
������	8��� ���t�DDZ�����E}W����`��m�PM�U�;�=h�I�5��@r���{�W�])`+�P��CN�`q
�������#�^9<Y������~Q��Z�r�z�of���	�dO�of �=�?,y����P�����,k��av8�O�2�tIe�73C$����*��*���<T���J�>����j��+��������I�j��	���	K��>.-��gC^
;�M��i�g���	����1HX�R�;TQ��/�
zp"���LJ���B�����=>�V]
^nhI��?��#�b���)���gYx#����3y�B^\;H�paC5J^����q��bM�.WT����8�	��I.���M�C^����3��&�v
��	gBph�k��3���t
UxU��C��Tu�NB
��A[-���()��@+�}�������1x�Z���_B.$�����6�W#1��iTN�I8/q�`��u�J��
�J���T��#�_Vq��74\����UW=qPb����-�k�� =���,�0gRLU��c�J3����*2���I�3n]w�[~����1�v���S'^��-�����%F?wFec;=�T��@��V'�5�
SR�4s��*���DTmf��!��p�Z��B�J �+=^�<t�#j����;����n���Cza�R�yn�q�-����.�����HRy<t�$*�����R�3$1����x4_��1���>��2������E���E�����q��aV�����+��^���(��P`����KF\~�C��'1��33��4>����RY�kD���a�M6�/�-L�aJ�{�	���������F��`�l�P��$fS����J��1���$�Mxh&w=6_�qB2���nb�em�X�H)�>3}����S��tL
�����D i��.�m.Hx!Q�NKR�����aW-G@��Q��[e������=9�F"�}�"����S�!G�/>��������jl�@�oE�F(���:5���n5�X����'���{���e�%������:z�+a����.Xf�j�};b`��H�$����y�����q�J�G��w!���y<���gp�$_��f� ���wy���-��/�5�:�����b
�1�Vl��KwE������h�t
r�S�<�y``g?Gr�vS�� �0���49���Q���'�r��!�b�^�4��
l����(7%aE��<r;~����'���F91N t�3F��}���F9��3��_�����u?��1F�\Dk���u��5���v��O��T���@�f���5c�~sb��|Ic 4�v�����'�1��(G���>�
&����� �'���=�@��;��c����`XZuS�zz����b�����	��<~0gpdO����&xj��0e"l��a*�S3��>9f?;��(N��[��~17���j��g$�1y�����u�����/��������a�^
�s3��w]F��@���w>�f�59YD��%}�o����������Q�q��]���+���3#�rm�����x�)������ fe�P��]����E4����E����'e�0D}$]T}�����B�.�0��������?(��N�
L�M2E�tF�'������R%�t�E"<p����*Z>����
����2T��_�����5��>�^t�����CYmY<���Dn7�Q����?�A�Nbn�<5���C�A+�����{miH���\�"�g�!��_��K�Y��u���D��wz��=�L���g��������Y�;pXF3a?k�2�q�
��>3(�S'Lm���Zu�wX[q�J�C��DnRKSfB���58]�����"��F@�e�n]�+
����!B��B�������D���To�f,;�8�+����������v&j���U}�^��F��g�Bq�QE7��o�=)��!Mq�g�J�j�|�C�x���w&�����	r�s�%1� ����Da|W��u$�,N�*j�39���N{��]�!%��`�<3�kH�`��n�Y�E�~���?.��~1�CTh��2�����^�����
MV��*�l�����+5a����M�[/�%�����{j�������OuCo��|�z3�if�3�Dh�0��n<����!��x�4����@3�������>�e���������p0�iv�C���b�_}>�����v��}�����&��>&����p��'�g����pb��gf`	7;��SY"���LH$4�f�3�����O�����g�5���q��u��g�{u��	�^��"&�3S ������c�������eW;r����>��w����0�����[;B��m���e������z�����W����\EB��
���Z��
4��O�J���=_��|���U�t���*P�����{���6]����t�X��\WD�����h\=�|�(]��|�>��=�Q����m�z��$JW�\�D��XH.�DC&����@�����(]eRI�
4�6K7W��U�V\JW-���
��NenK��T����c��_%JW�\WD��T�����;_JW�=_JW�2����T�k)�g*�<f�~�1�J�}�(���%�(��>�����=�+�$�W�D���{w�����^�o�5I��N����\�E�����R�����n���������t�X���������@��P��_YQg�WCQg�WCQg�WCQg�W�g��MW���1]=��5��P�Y5��m�����@�j(�;P��s]
E�Us\m��3��P�Y5��c�P.W�1��l�����/�������b�����/�������b���~���������b�����o�������b�����/��.�+[G��4| �&:����a��<� ���sq5��a����m)s�J��R�!qu�u�(�Ne�K���?�����a����})�5��Z��N�|�.9v3�h�a��r�:��z��oS�(�G;v����G�i�?F����
�g�����#\@ �����}����  �f��y���D`�8n{�Q��7�b�����y�����L�`1F���:OO{�"�_E%yR�f�T����,���t�j�a�����I�1�����$�Z��|J���w�h<8/��??+�1�i��1�Hg���jg�����/#��v���!LS<�J�s�=��B�3���%�WD�x�����c,"���t��FG��/�0�0�������1%��S���XJp��H��.�L�
z���f�=�3��qc���z���9����OQ�},^�`����1���vq29f��d��yX�!�;��$,y���G����+��Db��p����]	n��b��[�V):&�u�4D��xH��d����.���3N �������2�*<��2��.��2�?
�+�l���J��F(
�`�/��0D4�W2��;D_9�9I���~��k����z�P%�^���0R���%�������,p?~�U�Z�����5m"d$!���w�k)Z� ���"5��������MEw�k��"��@m�\����1$C�
��b"���C�����m��� �	��2dm�y�6.-FD��b*#��G���	����/�5�������}�l�U�OHxf����kr��;c�*��O0!~9���H�~1�:.cSa]Eg���~���}8JD��Y��;���lf��� ��������n���tK�r"�jO�*��p9y4�Mw������N�.\�T���p]���/��Y��;o&�jaG@��Aw��F�zF�����0%��"��/���KIc��.��0$0�#��O��0=Q���-O�Tu���'B��dT��J����Mx�kf����<~����$�^P&�����O�MqVWf�����)��Q���z�/m�x1y�'�S��y<4�.Y����/�9SS���Wm����P��:�&<u��u��~�w���1�������T��H����B�LT�i�e^��|���O��	zg�M��&4�f��Kj���)���D�&��4�x�E��u
2)��=�z���0����7�y�f�d�/G��]G]�c_����b���>����3>�1����~�D1�����t��Y���v�/���*��(�D����s2���+�N���
N���"Za��"�?4�?���3�(�-t�Q�3f������V��������/�9����(�R�`�� �~1>�	�d���vf|T:tL4�#"���o���a�&b���(��Z��\���x<@���_�������je(�����4&��Gb`�l���e����UL	
��@1e� ?����"��q��]�E��xU}
��	�+S��'�v~�������9g���� ^��[��7c�"��A����Y��8���c�l!�D�9xg8��H��,AbJP0��[*�:z�a�pW��&'�.���=S
�5�|���o����|a&�|�~\��t���@�w{�e�!��p`OLb��R�)�"-D���f�Nu"��T��Z"���w1x�������qa��]>�g^�����{./�a�T�]	����<�U��r����d/+����_����j��FE�V|����c&>SP�O�0U��h��q�
�&����7�pbl�g�G�	�/�:1����L	�>�O��<W������!���c��E"��2|iu�a�|6��[T��q�#�{?!{�m���8}o0�����i>Oy�����D�Gn"�A�8�i���*��k�WvO�1atqUp����f3��uBc{Z�+��xT{�N�YUW��&������!����������7B�c�����m��>����l�����N@I��P�
d�]�K<G��C�������Pt�����z��g��<bea�@�F��y&�T���n-U�er�9��z�������V��t�'&�#��M�K�h�\����Zs"zv��QP���a0����1#?���TA�+�q�Z{�������0��e����*�A�[m���9b&�Ab��t��'����L�5n�C�i�+��p����*��s:TO
<2���+gb��o���'����p"�x�D�(/��<��g`�����hos������-�].na���\�212R����1����-��a�����"Z~�P;O�V�W���U�K1�O�0�U��9���}��!a�:y����rj��*\��Y$�a�.edd`��c����L�N�F�8���E��q�vh�KW5\b���q�~��Z�ck!��#��`L7'�J����+��&�>�#S���?5�.U�>~"��^����?� �96�^&@x�^6�����{��5��q6���|�k61,�E������A��g]�iLo����%+c5�6�L����J�,����'W�S��$�3�'��<p{��j��p)�v�\;C��+��o�4s�Mh�U~�A�?m���C��i?]����t������K�6v��{Wf`���SKC�(���g�\�6��xe�'p�vp�2mCl1���������a,�K�:Z�:xe7��Y��U��u/��?C�.���S�S��>��]�N���S�)d�to����{W���H��"���O���P:��O��'$� ��H��t����JY}6&I�o���}W� ?Q���k�`Q���M[�B/La;>��T�_�������'���*b��:xeB�$%<�����v��1-�P��v8�P��N0���el�����!�I�2��P�MG]�J�35�wK$Y\E���K���yW[�d� �T���XJ��|���v��

Yl�����f+����Of�)�D��D��.�'�yC�|����d��<R=o���hL��=-J�SDI7����G�}���������Bd=�]c���S�j�c���N
"�ne�����hnY2����./�=M{��]L	*�r���w|IfF�:'m�����2�1W'����8bJPMAr J��R�.��i:���#- B+o�>>3����!��t@w��1�aZ�E'���m��;�L?��{����
�C1x��7�2n��v��Lx`����h@�w�� ���FV��Q�Sw#��A4���m�sl0��,� ���~�oG��GQb����������4,i��%��.�/�q���G�}jj��2�p����N����nV�b>3s��(Y" �8�f)o��VCSMLI�������n�m�7���	���@"@1�e�����T���)��~r��V.��7�����A�����w�z]���E�NU���^������m����
3n�2�ym��a��)�-�Z;<�[����Q���f<�8Z.#c�_��p����pv�������g�i~y]!3�E���~����	1"~�>uYR��^O��Y�LD�;5�L��L����#,��`�w.1/D�7�����l��_0���_1?2�VlH6����|y���z�[��E'�[j������P�;.��|�{PYNDF���k64�f��(�B�)��,b�_b�� �]E
�as-�?a�d���n���G���0�](h��Te���	�
��6?�d���o��	�g�L����CC���3�2��D�]�2.��u�\�h�����:�7���,���0��)�5u��SLK�}Z+x��v_}�8�/���L-�aWE(�}��rD#1\S7������4��3�0�if3�����Y�����'����+b���1-�Q��1#���0�]@p�������	������[VQRSs��H��p����91��]�����!��x�������|Q
����F���'��`��)V�JJ2�a}���Z�8���)�)#|�s�	�{j&�{j<nw�����S �8!�7�%���+���MQ'��Z��1AMkb�&�P�bL�>x�r�K������Vg?	��@Jx?�87�=���r*<T!��P�bI���n6���f�Y�r���!�M���(70�>�,��#ifh��Lo�W�C*�����1�%��W�2.L!��n������2�a��Vca�B���1���l8+��L����7�N	��x���:
��F�j�=�*~�M��0�~~�&��v������3c���������va��U��s|�����C�ukae_��r	�"1��t��V8�:h�����
�n3B�7�D�b��e���a���^v\��3�1�8>3�q�R�I�1*�o�(5>Zw�����jk.w�i���;�0�u+f�n�8e��t�����u�2���������==���E%F�m�t��(����v�'$b��W���`��X�VV�������:
1z�D�7�k8�t��J��n����cja�LO,�n�X�-z���6�D����V�;]D�Fwx���MLI��?q3�=�+3���W��c+j��@2F)N������V����F����K�c���G"X���}~3�
;y�s�>��v! >�
�C#�J'���6��w%Jw&B7����������j0,��.9���5���Hp9�3���f��B@r9P��w�zMM�l��f��������JzI��������`m�`f�3�=��m���}�kQ[gJP�o?���������9l��\W��
q�uf�%v�����@��-����\�<F0�\�����|�����SL�d��!�d��������bJ�����e��
#�?+1 3���yDQL	���"�@@v��g\\/�]��!v���7����+30:�^]N��~��/���PV�A!b���r��V6��7VF8^�]��
a�de��wa�k��V�Tek�0�����1|kC�Il��(V�&l��G��y�N\����hT���qb!�]GF�#�����M{f���	���B�c���$�;k,���r=�[����+i������/���Y�m>���&����c�����;�
l��/Y1<-��@����w�?�:�a�#��K��[�\vi7����f�~��@��������b�b�*�����g����w���p&b��'K�y����>����7�M�I�����aB�6;p��2�&�l:���_B%����q��2��m�' ZiZ�x�J����p�2s�}8lF"b�����b>����q3�R���F�5u���f�d�����wsX�^V_�X���a�:�!��UK��.�p`���0����(Ic	b!.;���#\:�>P�q[�9��&�
�B\
����=v��Z
�Nc���ab&
�8���F������J��a.��@�i��5�����M�5:��V&I��U����N���X����������s@-�c�X��}9����X�7�G�?���9<�w��F�<�)	h��7��
������������O��X����&��N���:[��73��>���*����1\�	���K)M�a�>\8����7�
=N(��/7M]�2cx��B��J+N(,�=�?�bI�7�G�5m":���#���i�&����\Dq��m�9���j<UoXm�0���~6�B���S"���1�������A\�����|�����_�1
���h�OC
�"F�p��ya&������x�o6����ee�[l��1m�����E�(`�-	����,��xZNJ�c�+��?�o����~����(��]	����t{��$� �H�o3�[TS�&��-�����A�0�m�(�O����OX��Z�
����������a�J��Q��jn&L�0�FC2��a���J��G����z����L	
��C��4=uPt!�4U��q��LCE!��
c5���S�f�{�O�B��Pg��Sf�'�{�fh	�NzK_gJP�B��Z`�
�2kE�-I�E�:�|������u���`P�q��Z���w4�,��Z��kY�#�LqHb�	��J3��^���9{���]�������Ql13c��1(q�<��36t��l���,&2%�K�`r�M����f��<ZEX�F�q�W��3����#&���z����1!��P^������|���Ug+]RF�$SRK3l�*	����}CV2v�p��K%c���WJB]�J��_�]�P	�8l�QI���1]�4������V���0���h�����5��!^�$�2����b������r�v��
/���X;����i���)|��;������ M\@`�?�e!���bk���v�FG����/����U�����k������.���?(u�,��*��,g�V�3	��I~>�VQ��$7�Z��_�\7����i�N��7�3~x��>$���7�
_�0�Q��F9�����7��& ��j�@k����vjF ����kledP��Q��-���|�EJN���?O�t����:���a6Y�����Yd�;���qs�0m<X���s<��it)n[�D�=�O�,��d�y��/r�33a����a�;~�7�Q��������h�'x�X0a�a�)D��6n�f��m�w�~���!�=�����l��qK��_�,o��#c\�����;wW7��	�/W���x�c���}O��AD��=n%��IO����9>��o{�0��6}2��Q��p�sbJ"�Pp����g��
�
r(�y	bV��y���_�'QF���g��d����9�b]���xf2vc��RPm%�y*�3������g5:b�<���(.���v93%7���@9�2^�����Q����C����I�������rIz��FiO�
U%�������"����r�-30�.�.2�/��g�1����?|"C>M��bh&���_;0�K?���5�s����4�kR�]�������n&������P��`��0	F�f[�ct�!����z��%����E�b���zW���LA��@���8ui��(���3�D\-[��,C����O����;\��2�Q����ij���������+�K�\\)��C�j+���@��>I��ZM�".��`JvM���G��]�mN�;n!�V>�3X]���#����y-j��#�)aa�q ��!��v�\��K�'�vh*���h��0k�R�|����w���^%��4Z�TW�`�Qp����d��4%;+D����4jO����s��rH��|�-w�+D3�Y���g
�*��q�`Z�	&���,��3��B��5�����O*aZ31�b>��/��s���9�]�H�.�g1���?@���(�g�Y��-�����g�!�77~�V6�N��'�_�a�����
�p8�blj�b��������{Q�S�`~���:�B:nL�{q�������Y���p�ND�>���Jg��a9$R4��3>%�]��-C�gW���W a|���������[<�S"�(���M���L� %8Z6<as���{c��/f�&oFg��3-�*Xp,�v�9N�F���{x�&���yGu��tf���0c|�];�8�����F�����:
u+���g,����t���:�����Pn�GO�����&s614����,aUayW�]�+�\��2$��AN�K�?U/��<�,�<�0���b�0��(��f����N�g��!��w�,�������:��,�7EM
H&)�����_W���3a�Rh������:�vh>K�z�T�3aP���~xhNi��0xx�X����
��Q/qu�=�x��[��r=VT
5���1���1RK���%T_���KX�
��x4��( G���S(��(���0|3�LwW2�����������+��e�,��IYv%���+���"+���.g�P}c�GC�u���oa���J�D=W�-I�ue�p�g�>'��0���MU�oa������+�I�(���}]IYG?�kQ�Ci�����;3�kh?��pEW��1<�$��[�xL>�gC����i��/F��5�0���|���G�e�~b-w"|��NWBw���s�w�	���O7��Z������[�!�\Jx�?��������m�&|�ax�|�!T����G�M?��oJ!3
��)V*}�&c����w"�������7�~b�33>�paZ�+O>��������~�2W-#r�aOq!���)�|��q���t"4�H�&.�1�B���������G��k�5U}�aEM�����>��	�:�d����x�7��|������l��}���b|��))����@ ���h9H�<e<Z�`;�"0&!��e��3�1�u���I�3>	��oc�R�<	3&!���j�;3>	�C�y�I����>iMP�����1�/�*��=�gf`�P�)�	�p��%[�a���>� ��k:1>��NE����?r�!���(�~^w�6R/��>
Jw���}_l�I�&��}L>c�V��!��{@��<�R������k��������,4|4���9�S�����xh�r����e$�
��d�o��C6�R_YO��Vzf�L�	xz���E����{���M��f�����[�(��/��qa`�=��?����+��:�m�|u���������V��{��K�v���������]����B�db��3����_\uB��Y�����^�lvi|:u� �4~;n�����!��\�5�I �j��3�`�����e�������������������K�>�����������'�a�����z��I>������)^�
�]�3ST:�_���
�������
�LiX�n���M
�p����5��B>\f��?8%CV��we�E�f�xS�w0L���h��A���|^��3%������R?�F�a���J�#�p"�\���,�S�E1>u����5��U~,T��]��y0c�:c�q�8.�c`��7�divz\���/�g�}v�!v?���)���h���+MN�9����!�lW�@"q�L=��h��h�����)�����V�57���%ME�#��&"��'�k*z�i�&5��573Q=,�MU�4�e��17M��K|��Dh��Ri&���47=�����.I�g�in��MJ�,���X��j�[��K��.�W���	�'�D�'Ia@�BC
3N��#���������X73'!�i�e!��,�3��I�iD�����,C�!��e9tfA��/*}
��e|��f��>�n��c�?�$�3�)H	qZ�+6	l��K}�[l�������a
��N�q�M2���!�3���@�g��qu"�Q��m,O3"�<������-����|�9V(���E
��)Z�8���b�@Q ]|��z^������@q`�aI��&�U�1$h&F+�,����:a���Y���T���8�B����3�:)�Y�d��K\�A��4���k�X_�x����)���_�03��"�Y3�"���E'X�����	|hSw��������0��/L@t��0a�'US�b=.�5:�[�3�c�dR�Z�pF�7�zV��f�S1��k��*w"�,�y����v�����#���A�I�M��)��u�(T�J����`\WOD���D����W��U�,>���Oc\B��3��:�6�YWUf]�2����WG�uUe��(3�z�yu�YWUf]]�W�"IC��UGq)��P�C���(���5)t�����S�"��P�JW��T��v&��R��	��]���?�$������=v��������������������?���~���=���sq��g�w;�}���?����_���������/�gm?�����W�+���ji�>�yhY�������b��_�8���Z�$�A���g`i� ���~W*a�2�+��sd��A)�o��G�a��^�<X7��g��������m�����������+:��1?���d�~���������?�^����Y�?6a0H���,������llHfM�0BX�w��g�	�"p0&^�+aO@��G���+�~3��P�k�[����N���� @���z���g�������dW�[� �,�]�-���}�S�'S��Yx��.�:���0x1X���2]������u�83n��P��T{3c��E�J�~�x'�edf�!���-"I�BJ�[���g=���_���b�����������~cf�"Q��70l
������J#��2vJ[
�I�o��GE��`���N��Nh�-D��$�Cq���,��X��#���F��)G���C�������hF6���O@m�)A5�%c��p]c!2d2���Q�$9cC>J�S�O�7J4n�}�L��^����\2-��*��dlq�#l���S�I�+:��3����@.�Ac*=��V�O4Db��70����u���-d�|�9����HL�"�pI6>dfo��lC���G���o��PUQ#�|p��g�!�C�����wut���i
��(V�bB<�&�bJPM�3�-��k#��4����_��3��;N>���N�|��/8^��	7�	Qhl��%*�'�w#�����4Fg�>����*�ma��T���!&:P�i��F�&�$���D���'����^5�GiwFs�Qkal��G^��7W�����[������VV��0.��</Io/�M���12�(ch���2���g���Y��U��(Qj1+���#S�-�K�p�y�l��"&\T!y� ��|�0�s��n!�������9u3a���R��
]��aAo.(l�k��&"�V�������L�x>$�P�F!1%��>�MF7u���U(�����V���������p�/�N����Q�3��h��0�}�C���O7�ap��������o�L�]�a�u���;J�~1(ce�,�s��(b0z�p��{0}�+�����X*!�_J��var4����c&�g�@
D�|���(��Tg�1A1�,p==D}O?��a|K������Bf�w�����n�|X�V���|8�p���OY��a^uZ�h4i��VT=��#��axB���������]W���x���p8�/L�kD��
Kla����#�j��3r]��D@�[�4|Yd���\��������D�I�=|G}��&��Vv�\A�3%(�����r��LH=�S�j����TA�T#��O���2P=�l&J���O�+�"Z��>�c�S N����@s�t�VE��w��M����<2�Z��<f+C,_q0��D�-6Q�ND���3�zv��2�{��/�V�7���D�Yb4�-b�	W����R0QW������0��4'��x���������
���u��m����|��`��x���.���[C���M=�����$;�}�U�_���w�~�C�N/q��(�� ����u+���l/�aZP�l�?�#kM��'�v������$�3��w]���,*!�� 
�X�����4\b���R�4��L}�����/�I���Op���0x�[/��������
�+�9?=z����^��1c�� k8�)��,B$x�6����	��!��H=�����	���T3���[��=z�\n�)^���y��B��<�����O��}G.�h��G&��L������G��$(�q�<3H�u���<������8};jF0$��bQ���d��F=|s.&3�<�����6��L��,&th$|����S	��*9������+!��M����d(���������rI�$�y�N��pe���c
���I���7�������h�O�dja,_{����_�H�ur�a��du�2�D�g*a���B�1~aP��c�F����y|�������#T��3,|
����cq���}��W#hs�	������rS�J�����L�g�@wM���bE�G��A�-�~wZV��'�G��a&�<z������4SJ��!@|�AJq.��(�i���'��4��LT���Ww��sa2����4��W�D���
o-��V�	����%c9wq�@��FR-��H&>�7�C��k����Q��-W��?"C+������[P���/���L�A��'=W����)��9]l���O��v�w%2���)��=����:��.�4����D�Z���������X�>��%��%>���?��T�C����D�P��6�o|�4����0�����k'%�n������n�8o�:��Y�=��v�07)XM�����])`�����E�<�&f�`��k��b?;��Bb���	�!CED��
�k�Z�Z4�f�\����#-�,Lh���(�h!����?�V�o���A"��O��}K��H�C�->������ ����������/F�����@g�LD!�xzk�wcy�-+��`�>m��	�'��E�Itf`�w��qOM,1����]j����^-���n�������i�ao3j�����@������?a4M�A����K��b�N�aw%=2�T����2Y�U�:����6��Cn���Qb1%��C��?w�m����|e���{�i��-��'�=/b�+�2���\��qL�&P�kD�O�������!=�c������.D��Q������&��7�x8K������7����if��������:B��m�~O�j��FY�������lx3Qf"���PO����"�3
�^i��-�)�]s�	���F��s��Y���1L
����55o.A3c��{e�'�����m+3a�V��eS�(2A�NVv���Y�V��u��L�6���9n�=�+5a��^)���������p�aP�Z�G!��YY�����9���N[�!��'�dB�W�5��CT$xL�a��i�6
�Mg�11��'*��r�;k�,��(�z���3�*&�VFXk��0������2�/����plkbmT��
���B��$�|�f�>�U����������p'��d��;,�������yDrC<O�/�L���~CgnD��]��!Z��Q"W���|$��seft��)c�}�e"�e�@��$����{5=�0M��C�+c��	
�;qq� �S��������0�s%=�F�N�t�������}��L��s8���F|�?7K��a�gsm��V1NX+hq�Dg8b�K�Z�2����VI�/dk�d%cG��
���P�a��vx��[�}����������+��he�$%6��G�>�G�����]�h����!YL	��HvTq@V���n���:�@Q��L��CL���f�~��SG���zec�1��1�1�� ��g��
3Q��B^D�G������<I6����0���`B&o�)���\e�t��u��#�U���`=�j-@���;��JX�62��u�=����>/���������1�v���{	�	��1�i�g�0[�18,L!!G����K3��se���;��]D��X�6~��d|
J�c���R,�4����c�G��1��>v���4������fH*�dh�����OQO�Av�-@��:�u�����K1|`6e�fF@k�a9�����
�
x?�SYoSH��b@�`�y��D�A��|�f�Q���_3�D�3����n��$�L�������f�m�0�~������\?�g�0�������T��_��U����ZB?��Ub
�J���|����D������+j���}!�B��}�-_�+
�.9Ve�?��@T5��x
��������J��y����*�g�m-���6,�e�n���-V��j���.iS��	Mdf����08��s�����=�yT���5�|F��r����39�7���SB�������;h���x!�U�D�P��}!�H�r�@��D��1<�5�}�����m�������
-2�o-E�������0D�rCk���@�������e��v9|�8�Uwx�:�������;fF������R?r�x�%��M�0�?�E��I3��mt�`"�5^��a���pB�W������RO���c�����bfr��3���-#��Dc^.�J3�G���<q;(� R�h���o= ?�EA	-#���Y��Hc,���b��O:�L���8<��j!?E�9�H�r:��2�d�A�.z����2V<���������Q,��_%�dg�W������[�vm�_�!
�MA�=$�-������Y�S���z�c�0�G�G9N���3A$�
�=�c!$�,R��: e�<0b~�����-�����M+s�Qe��z� g����:74�z��G����$1�`
��i���$���g,e���1*��xf^�x{&�a(���I��W�M	���{W�g��[�nT	��Z2�83Sr�6]5��1'c�Y����K?���@.L�Sjz'���(�7��?��4.��&�iX ����A9����AL���l�G	�a��4.��6)��.G�������LW�}W�>�������H�0�<�v��W��(���w*�������z�B�����X�QeUq�W�z�vLE���k��B���i�f�
��)���t
w�f�7����=16� �1\�[��T\��	~��*�����8���v�|�K�8�%�3��{e��@�����@�b�=��d�+��Q�R�,��]�P*�*�H�_��]g���5�^�4�#q�p(a5:����)A���<�6��+�1�qW!B��'��	z6&h��b��(�d]X��<|��4
�S6n���ge�b��`�
G����U��Y��z+��!�_��p��aD;���Vf`��;��z��:���
����%��u+�o��������U1l�v�	H�������-�g�6��b<�S=,W�O(,T���kee���B�IqXR��;�|����gW7r�
)��)l;kB�o�/�0�,^}��]tac�4��M�> f���2Im��s�B�p+�B@��`���p3��.l�;�C�I�����f�E����������G��?0���5�;��������9��k�>}����r@��O���"�<SqC��+�~1�C�/^o����N-�,�][)V&��a� g;��_�(��l7��TR]x)VfT���>�we�S���t�<RK�Q��I���Q��0����FN��3k�t�����Cq�M��	��m
���$\h0�o�w��2����O���ps��i��F���I?J����dg&��Ua��d{Im"�
1��*�8So[84��j{���.���}h�f5(�L�	wM-�8:��.m���8�:�!���������'� O�(���m��c�L���
�	e���I�#��c���fd��d�p������wG�"��S�0u���9�d2[��q\F��;|+a�	�����_1�
� -��7r'��H�yC�&�������x�0�%t�D�4d#!�-o�L�:a�und��p�V6����f>�C�ayG�n�z~d
3b����3�"�����0�w%���	!��}r�����:f�+���	S�S����y����2����%�j�~1�1�O��,r�eedb�P���6�9����+�g�V���q�H����xS�m�*[�T�.����I��L���7�Hm\PW��=�u8/�U�w.����&.Eg|����I�`0���� �������2��`���_w!�"�?��h`��DM8<I�{/T����e�[J�� 31�&\����;c�g}IU����o&Ut>Lt�>��B��������:�8�:,�~Q��^��2�����������'5�
�����&�Za�i4����%�<T����c�zb7O���f�L�>?�4x�e�����i��i�&3��Ny:����.�8�����;���E�X"�����N?�I���5��,��L�~�q���+*Qa�0[#���-���x��`G�??>A�-�-&� �3���x`�x���<&]�H{}<���y���~�~�>	����P&���Ab�DP#I����� "���������\)��5�Yk�+0c���/k&�,���C	������������Tcv��(e�B��<�w��7hO>��0������|nZ�[�E7U]qL)^$�\#�}�������b�.WT�G��SQ�dL#���������m�����"������LF����2���`h������T����_��X�d��'����qGs+��J���s�D,�0�0�{�#��E|u���(^s���Yb���w�����?����Q�bD9�XY�Am�6��c��!�:��!{��<���3����w�\��V�j�����F��s�}q�~���5�"(�5��h�����-e��+v%	����5�#���h��M<1e�p��~T��\����rT��wa8���s0������oL����Q3�b�F�_|&�<���`���Le![U~y�]��#$"�3�s����I�V&c��mL^fk���5���0��1`(����%W4�X)���^��1A.^��LQ���7>���K�j��VS���.���;�����e��A���h��D�;j�,��d�Q�U�8t������S>��$>�JA�T�����s<� B'���x�`�y��9��`���M��=L�C�c��~�}����n=z?p���mi���`f$~Wb@�����Pt��������A>��>+���{.�Y����^��L��)��X\j�~W��5�#��:Q��*���}���?31X���d&�3~f�2v����S���� e���Qx!!l
�h�P: ��u���?]���_�TX"`?�.���^����J��]8�J�����6�����SfT�DU�Aw��
�O���S9��d��+�1W����Ca*��T2>I@k�daJ��.���;�X�LnnY�x�D�To��|d��Ix�������9�pdx��z������=���'Af&|��C2}�p�?�|��/��qk��o���{��oREn����l���d]��E@e���\��m7.bP���N�y��	�|���C��p^��Rcc�Ls���=��s���m>c������
��:���~���'C����P��m�)L��[�p_�	�_-��TfY 1�;C���8�:!|"9_���k�DLP������w���g���z��i�u������_~��8��]�V��n}���M��bU�b5��zf
���i�*����MY�v�����������������$m�L��;���;��gF%;k����� ��8�����8�D���Pb,������(pB'cBI&}n��4m�%�8L�$��+9$��i[�
�E�������<������Yj���?������_����Z�?�ui�����~����R��T�Z���J�Ri����R���o^
�J��K��������;Y!��_L`|�'X|�}�M�d���Q-K�Q��v|fB�V���lW���o������<��8a5��Nb1F�n�X�ejf��{d&B�N�����qk�'������Al=yLP!TO~
{��A$�A���r���#!��UvP�8��A~Y���{��$�YRWx�*	�C�U�L���O��uw��?3����:@�4V+�_xUF�:�+OiL��B�#�j"�^OK41����A<=[^��|evt�	��QZ�U�D.��O�27����s@|�_�']r�	���{o!��fY��{f4��[w����q��P��O\�+��23u�����1cG^L��
��O8n��F��o�	yD��*��6���q�����M�ay/���,J`�S��8�?)�����I�4�I/�4��BOQ�1�����5���x6�w6�O��&F�=��;5���X�~[�1����C�e�^m�&;���t��X���u�5��c����8~��nN0��
������������+D�����#���Xz�Pz�xi:�1fIj;*]��&jI��x��%��V�z��u���F�s��`�P{'c5�����D@U{K�D����`������$�q|�}	�w2c:������X���V�,3c�{����w�|X�L������o`k�i����2H�����9E���L"u_S��I�%�>�O�obS��Z������n�IR�#)�N�j�2����l��<8�����/���^uEx�l�.8q�PhB��&���)�oj�%����	l��w�
y�#� �&+�����
!�7�"T�i�J Aa�����A,�Dw���4�h"���X�
����'F�n[����@�B�����C�y3��0'�.���Ao �ae4U��L@�+T�J����{�x)tM�1P���b�M�V�'��<8%��W)���![$�`!��s)�|�Z��{%�q����������t$�'F��/��K3��J��1�`���=*��&�E�?��sEJ1��#!��g&$��yb���-Y�)���zS�Qw�$��, �B���@�
#N����������H��#���W�f~���iH�e��(UoF����h:��+��PH�������=����7>l}Q�>'6o%W��2��g-��@&l����]$�)���Ek�4�W�O��T�8�U�p�$P%Y6��zL�$Ub=�dF38lzx�q_�D��e|�
�x��N��x�����$di)lP�\�q�^����'��q}9�*�2�����<2�%�l�������h�N<�����������=�.=dF��cE�A�{'�!����&���
g�;�E8y����U��A*�8v�����d,�~Y�w�����31�
���wN�������Y�,A���_�!!������f�N�l��Y`je

��iT\���������D �����D������M�n_xY,��X���s`ZF��'T�{�V�3��w�9�z�Z��M-$�0qDo�R[������1��F��6Ax^��Oc�Z4F��}^��-6���}r��;��R�s������A����\���/[SU��C�.�R��:�<��s��!D4i�T4��CP/w���N��i!��:s2EW�����r:��������5����9i2���1�N3���K�Z�xdR!p�>q|5C�<@qb������9�,N�������V���}:v�����/��3�/E{�N��+�S��������@"���:�m�be2�.�N!��'���T�������;L�����wZ�����cK�Qx������y1vP51������gH���Pb��h��|� ��O/D�b+�������?�8�CO�4���k5��j^��������N�����C�>F�Kl��p7=k�������GA>3����/tZ���x����|�%B�~%��4�����;�7����3�-�p����\���P�����E>j�8��m���Z�D=3*����kq��������-��j�`0B�aY�x�r�:
�������B�$rX������V�\^��{&�n�>&j�eH�&���C>WdxQ���a���i�����Q�B}����a[+�;g,�$Wf,���3�2��~��?������c�w4�����D������F�,so��!1!�(�`��N��h�������2'6��,~��i���i�.������#]�E1�������f������U�8��%�	�,?�7�Z
�2����&�e~�L8��i�b��#=��
��	� c�������k� T`�{�K��]���,�a��������ph��O�����V�!D\�J�����L��9��-��;?����g�K��?��wx���-�S���Ob�"CEfN�O��<���j�n�r��Sg
����������:h��1T����/n0^O��I9�����)4��6��yV�t������2��(����u��316�@�S�!��UeN�6afp�g����G8�1,�"��DaF��wK-���.�2)�4��hw���u{�#H��a��P[����� �i�������8\=������U��Q*'v��S	E���!4�0�A:�1�o�L��,���<�?0��Xi	�+��V�'8%O�3���Bs������b��l��&F���-m�Y��21r}K'��!���'f
!N�@��9�+��5+#u��Q��6�?;K��h���������-�C������	bQ�c���]������B����P�kp!G���2�t���>�]��d$c��7d��@����L�@6{����q�Ol��N��v��|��N�o��]&���{�}�{�����_���,�[)�[-�k�>o{)V��u��b�Q�G)L��Y���_W)V����+L���l��{���Z�����Sq+�����j�Q��R���^��^���j������T�K����4*���&�@!��l��RE���2�J� �JE���9^
�JU\�TQ*�g.U�JK��T�Qj5�Z�U���	sy�Jy���Rq�\�%Q�����r���T�0��Z�6��;��!�����;g"�I5�"��i��u������RLbz����2������������@��H�����E�s�W��k�BQ�r��:�r��rW�E�G�>��bG�+�����5{��^��(�(w�^�y��r/�<�]�}�}��k-_�����sy+����(_�������V�rW�E�G�9�_�y�sy/�z�h�(���3���*}��`�_L
����`�_
����@���	����`�_�	����`�_L	+��%���,������(�����,��
����,������0�l�����0 �4)�0 �4Mna@Xi6����4����I������c��(�S�����(oW)o�T^*�0�����(OC2 ��T�ah�Z�6��?��-'�q�z�����?���&%C;�)�o�����3�%{V�>>���J,��>J���-0���#W?/�x�V�����Ct3#��4{o�
��
���>��y.���CN�CBO�#~���t���O{�UX�9�(��*���h�4dj��{C��D
k^��hJ��Y���i��Y���~K�?_�
1J���di��a���nE��������D7f��Zy�l�L����D*�`;�x*�D8�y��E�8��������m��	���@�Q�h���4c"����P~��5�f�/�,N��,��'V��f�����c��Y�dO��]Kb�	n^� ���M?�hv����L�'����6����^�^/	E��['�i����8���c�yfBbq��&�I��^�
7na��y�mU}��zw�������u����Q�!-sk���6{�!������*F�a�P5B j�g�*���2����(�sH������	U�*$��C���0n�#��3:.yt���RuXO���h.LC�5[koB[�*P��5K�bqF��]R|{m�U��bm
S����\t+�[�B���#'�B�&"A�f���qMEk���B�0�Hs����A�t9
���3V��Q��@�?���1$����s�DQ���?u~9�}�1b'�	4���3����g/]z�3:#"����i�����F�i4���Y^��/�������=\�3C��GH�����Vi�w{9������&�y1������`���h�X�Q�v���.x��(��Ek���6�*#X�Io��@p�v_q�zA� ��iYU���`�h��7�
%v�K���s�gbR��]����,��s9O[V'�������@9��&fI}�����"CN
[S��!�g����_�t������G"�P@~��sZ~��0[�	�8�l���.��]3���S@x�$��bt��#�?�����KG��:7��	�/k���"7:��K+/�Q�<Xd�h������g�&9QS�kf�T[�T[we3
;�DY�t�y�()w�ys����%����!�b�A�R$z^L�TG�b�v��������h-s���nc��x�M���Qz����mC3����6g�f�g��y��:2L���k���f������lV��%c������{��P#Q�K��O0���/�Em������*����������R����j2��ic6�L���	G�y�
q3;z�z��f�,N�����z����^����#��+c�o������$Q�{���/=�&�B�5�{"��]�b+)��d��u�>��H�m������d�������YI�5*�}"�&KR�>����i"�R��t�Z���3�~�����N�QF�<�u�.J�U[L����~t3=���:
��{����t���U�I{H�O�'���T�I���[��H�h�5��nG!~ffI/l� �������D��9������r��O���p3(N</r1�c��!�0��D.�)
������C��|5f�"�8u�XH�7UR3�L��h�6\-Y �	�7����7��D�|@��
�M�+S��cn�6��~�a�����J�;���\Of	������cPd����A�m|������dt^�}��6�y������ni��=	w~s<3������0�>3a1y���0Ja���������7<T�0�%�p��c�p����U�G�8����+��}����/�x9����Z
r�{R��F��|�~0�1��n���m�dn�2�S�Q|[�\U���g&h�\00�s���_\>u@?�,N�K�/a��B�xl'l��a���`l�%���%���C�FYD��f8�
������pm,�`����q=B�0�����z0�B�	�SF���������l���7��{������B���\1[���s����;|^�VBE�����*m�J>���a�AJ��ox&��v�v�< �qR1d��G�u���c�+��s�����h�=VQ*#Xg��uG�����>��6���&�|��7{��Q��_i�0����g_W8�����Q�\��~s�9��E�ic
n�`�q�G.���&A-4Rq�!I��-t)�����%��V[��6�Z��$��3��W�
�n��$U����z2�Sq����3D�\&�b�22$#���n�#������~��}�Y9�aH�����|�rK8Y<��:��"�XF.2�����������7����������Y���E8bIv���
���43�u�4aI&#��r��/	�r���n�K�#��s�J,�u��BdI��b�|9wbn���U�so�']a�d�A����(�7W0��{.�6i��s����%-�`���a����Q�Yh����ve����m�U�:~�����O�����nVBj���N��O��,N���o���/�@��������+��t��
����c����+���cz�]@��U"�n-�� _��� ����Y[��^� t��bw������(�$�?66��P���3��	�q�@x������w�;gnfTP���vx�*
yJ'*I�57��j�Y~��*�@����T��OR�>���K6��9���	L��iI+�8sqj�t �m��334���E	��������u�`v2�1�u9�:x�����3#�0
� �_+6�;�BS�1�����.E{d�;3_�W�g��L������5�t��X/�'x���up%���tp%�v��_���*X����"�9��Ha"�lp�B�rfh�7��*@�{��'fA?��9�'"��`}\V��@u������i:xf��q^!Uj4�)��������s)��'
���P�c�2\���<T�.Xe��B��&�C�R�3��[�R��,��,cEb7���������3�62�S����a�<��kf�k�����E	q�H�-���>c��`��0�/>�k���L�������[7�� ���f5��	bI��	k�K���G����W%]V�E�F=,Ffqj��8�D0&;�df���m��fY������^�uT��;���|�u�'��&��j�p�����63��^�-��%2�S�����Q�E>3�";}�_�X ����Xoh��zr��&n�q��Qc��n=2>|U&��1,�H��j�����k���q�������%����D���5Tf�;DA��o����]k�:��#�j���@�2c,���+f�S��qp���	GU�<�\2�S�b����
�Ii�l����V�T���`w��(>���I'����z5vu1�L�0F�x����~O����Rv\�)���*��$����NH��"1*�0wO���j�������me���
E�~���Y(�-��Cg/�*
�6��>��;��Q��!_����+�����
�MGh;�'����c��������0�l�_�a�_d�K��6x"��/k*�Y
K���z�-��1����;��?}��J���w*�����/�9\fp�uf�
���Ak4pCZ�4dA� ����Y�bQ���?�06�'��b�i���K�1.�)����D��s����	d>d~h(�x�3U�Q���'xy^��k[�-���OXj���I�D��0�=���MP�E��z�pb��N��a�!�\
�Y�tL���kA���Q���?�V�4��$�?]�V�?����lB�_�I�zG!b6�����J$��:8y��O�^�2���N�f�WB����6A�xIo��k�k��F��d��BS3��q��P��)�g�wY+x^��g3�B#��������K/f4��W	��~�4�=251�af�X{tjb3B%O4����p��P�'b�,%�rD��y1�M@�si������3!6��d%��%u5��Ip��y���Lb�OG
a3@U� ��y�f�{����|��E���!B����4)%�Q�A{ixJ:�qI�[�#)!����-<U��O��6��I��2�����������n�6��������4}����)�C����
=W}	������'���\/.�J�|q!*��	9��$�P~��f�g�����3sr������:3�f\[����	�P0�^����y/JX�����W_��4*<H0I
��(3��Z�+����W�����M�<^3��T�(,�D���>�,���T�c/�K�c� V|V����Z|3�WF�����aN*��^��%�1����������X��%����b���L�����R�����&����%�|x�
����#��yT%*���{�0��H�����Qa*�_��,��R�
���N����z��8���t���-�k_<�����#-�FOwf
���X��0�QV��<�F	[�A$�E)a�:I�X����C��3F,�L���%�Q�x��$&����Tu��(4�9&��\�����1��g[�LR����5G.C���{�k�L��X��2h:�_����W]�����J-��
��X=����3��DD
#�������Op�"4C&��� �Q�s�o�U�5'~QJ�$\���v�A��Go�@��(�a�G��*>9Z|��T0�U��qou�/��a�
�fC2plT��.��z(��3E���&%�j�TF�������^�]�N����W
�ak�����s�R��my�y���
o���7�E�t�'��|0�kcp�`��{�kD�Y�����}C��C=1�)�s�<]>�V�d����a���r	,}���{�������,X\�@�)�9��L������\��I#C#^y����T���@=���\�;�fKD���t��x�u�{��C5����C5s���L�<T�OJ��ln�*~��������`> �8��M�b���<C}�O*�����������5�h��|Q��=�[<�V�J)�Z������m3�������
���b���W�@�M`�'���i&�R��8�r��f�D-`n�xT��D��e��4~W%>�4�)%`;��]h>�PeX;��w@m������Al��S��"���E�-��1^p�C��Y2���S�?!xQl�4��4�6s�$�/�i��_�MR���, ��y�	��S���S�/3���()g�����z�u��b��S�1����B��3�R��2�\	�4�H��M�t44���{��
��[�����������F8�72��.�,F�	�uz��	���M���<�S��j�����	���L	������	.�����+}��Rb_c���n��Q��+��R"<���'j��v{4@}�L��T����`����O9����������+�h�������O�y���Vm^T"�n��I�TWn�7���B�Mc�IE�TF�}��C�X���/�h����k\��
l:s����X���/�mC�.��+/*TJ�B|y7Q�+�
mk�'���LiK3��������vwM��}�5O��M\��nf1���P�_&& Td�[to{B
E�[�Q���/��#��r��&{f
�4��<jM$2��u"�
:�D�c��E)�I`�-��������G�[��3�Y�����IS����������&Z���yq �]�����LA(,����s*8{���e6���������c`���	�?[�1jq.$TW&����\�hgN��/lE�NT!TOu�W��)�,F)!�����	�1�M������|�V���J)��;\�����/�)qh�����1���(�IWx����aj���Bl���"��h�w$-'�x>�@����R3�/&k6?@���k�L)!��2�I�h<K���zW^���:�X����*�O���KJ�~Sb�i��Js��k�cu�@��^���3���X����(�0��bCga�h�L"N���`�u'��h�&;�#�7e7�6��f�y1*
���xTs��)��??�����gF%+���H�y0���)%�
���4����S�s�?Q�R��8��Y^;-A�t,O4_�u��	{V�l}YxR�ge�Y����2��DEa�w�F$��z�jY�X-9��[?��l0v���J�:S����X�h��-����Ls{�*�� �H`k6��-S��XE����a:�]0��~���E%��������zyqJ��3��|���J)!�5�xv?�����O@�����W�@������j��u+�Xw�u�i$�����2Q0�����yq�ioy^b���P%qn�~^�b��
�r�q��4�����H%9�YN���8�e����	84��P�&�S�����oX�\Vy�������������@�nuB�����p��F�@R��R��\z�]�R��jS�wp�����\j<'.�:NA���8��m���O��p��;Qh	���	��U.%��jdBm���|��BG��nx���M�Y?��������=�L�����y��xp�D��^&Y��R3U|	I����K�	=5xx�	R���@W��5���0��#��q���L�{�j�Hb����T3WB��N�������4�xCx�p�E���i<���S�A&.�h��c����u/�l�>��f��D��D,���a�Q��0��? ?L��'��B�4p�����
����������D�KDABk������f��V�vT0�[��)�L���g:�36o\3BnK.���J7
M#��a�]2�\��w@�j����f.�����MY�G��4?�_�{�f��+ ���4l�)��e�L3�A���o�7����"u!V�Azs�����N=������]c�������~FE%�4u�JS��Fr"�x^u�jX��z���@��������]�'��D����������{P����-�F<o��� Nn�<u��A&Z��:��3�]F'���t"2Uwt�]<�}�)�r��C��H,���p:^2��<������r��w������x�?���{Qf+���r�o���(���m�E����6��5����f�w������F�A���m^YGf.X�
�0������OO
6��)�%|��n�:�$��99�m�2��T�q�������|��|"���q��P�s����H7��@�>/}{f���p�yQ`h�UN&.f�����E�GM'03�U��{4���r��]���0�
}.NX����B������3#�b���g>�Re��v�8
��a��_����h0�U�p������4S!���m�������p
�=��u?�3�6�c���g�z��g&8Z�n��D������@v�%����+�gys�eq���3e�4r"d���N�IL`����F�7���������'�f�c��i�q�z^���7��e�\l�����k�M-��kv����)��e����Q��Rb`�Q�W�+�n��m��.���P7+^2Dw���n��X�R?�8���W"d>����f��]2a.��
���������.f4�K�a���S�[����]h��v9�xEc�����n@��#��'_����X��RVg�����������D������I*g�����j�90p�4��R�LM�g&����)����u���z^*�?�#�V8/�A�Y>�7��3�6��J�����+)��~<~���5���*��Up�#���_�Z�	��EB������it��:�u�G�h�������~q�8,�sc��k��2k�L��#���Q�J�I����`���<�hI�H�r���8���1)����������),�(_�����t_{��D�����8@�Y�*hj��-��Z6�3�����������j
N�L+n�$�=��/s������b����m�_��{l��(%tJ�h`p�D��?/.����&�G�3	}z4��������-�t���������iecp�Y����|\�vN��`��H;�����Tia�_�I��$UZ�D�*=�(P��SKV�]My��G��^�J)���U�����&-�B���U�a�k�ES����L'��=���DM��������i��R�4M5(K���4)��If�t�xS)5�R/����\�I+������.<Z���RB�����i�����������L��)T��
v�1L�t��=)Eo>|��8���}
������{'Uz`�k������5]zlX�������c�oZ�L�
����D���M�o��Y����-L�~#���M�e8<(av_ZK�{PK
�G���2H�G��=�	q��D,s���$�ud'��;Q�9O��2&�(c>�����	'J���d�|f�=��5=��<�K5av��S�@�J[���1���(8V"t�I����H�e����A�X&j3_��D4[��$Ob��T�&��,��q*c��CQ}^��PBt��c�����>�6�mv���yWE0�F������z�T"v,{�e���������%����|5�yQ��Jw���"�fe�F����k)B����KE&��2UD�'%������2�����&X��I�J��{M�"opO�(�����'e���~���B@_t��"���`���+�o���8���C?�eM���D�vV�jI�_��Q*�rT�uBO��Q:+l�����NT`�K�W�es��P�/[Z�6���1J�y'J�66�%�<(�g��������������\<(#����*��2U,��*V���9�T��M������L�0Y
�d��|T
���Y�Z����FC<��+*�V�����o�)���
�$���<3�['�s�J�d<Q���'��L'��1�x�����������o��5Y&)��
��zb
3��%0?�9��rl��Q�a��;>�0�q._d
�5X�$fN���&�M�I�nw$�{��u��b�`�=w:N�����Of���iw����R����(��7T!W� �i�K�*W�px�f=���!����M��~G
��'�7�V�*>)�7����+�j�`=-@s��l��D�x�U�9���</�$����c�j���;1hux�,A�s3���V�����oF!;���@"NL�lG�$�,o.�p".�5��3M�I6�h�H{�kaw�(�v|�����b�S�qx�4�L�(��3���Fc��6�J����y�~�&S:������g�g/|���>o��p�����?{KLx�	��%�*N8w�w���7���P��}p%��i:����}�P���%���L���$����~W���w��A�����<a�����������;>8���������7�7��f8�	��_���*R��S�^�W}pJ���N�jT��J�zQ�>����6�����G��(�:�#]X5�BV�.�`��&b)��M�n:	ka�������c��dyp*�u��(��]��j�$����1f�s��%���%�N�����~TS��0��z�����~�T��W���v�$�Uc�:K+�{_}�D������AB��-3���I&���,W��
Q��R�T�l�H	�RT���>n�bT�5"4fJ���;l��4[���fh�LOFI��#��J$���\%2�q�HD��*�+W�f�D$b�h���@����9c�(IYa�,��bKD�H����i��v;	��A{�3�&����	Zi�W���VZPh

>�^������f�C��������4[���������(�f�C�}UP�e6����r���������NT������!��i��r�Z&�-7��xK������4�LT�������,M�Gna��imG�)1\�u��T���ek@=���L���Ed�sba($=������r��A���r=\+���~��0���9�\a*�5����rI(��j^�=�woW�=KYy�z�QjUGi����8K��(�j�4j�RV��S����3��=��R�
/%��u��[�`�8�&�����It�����Dg�����fq2#�YkrH��.������k����SR�����|#y��n��6������������E��k����p��2���M�+�������������������]?���^�����B��e�8X���$�R0��?/F�~J��-@�8'��l�����lV�kMT����'���UB������5���SQ���L<x#����'/����2�g�����)��7��^�>z�!!���x�&���e���KH,����%J%Y�;�$�v���J�w��$~�@G"MM��4��I�w����f�(#���	y��;"�����OF�6����^8�f�����3��/�d�2��l(�]B��q�a��L$(�Tv|��b��)`���\X�~R-�`�\|�D���2���N��Dr�;z�=�������Xc�X��z��g��HH��HJv�S����Ck��<�&I
�z��PGW=��L^���e�)*�����M�2�!�o��{ c��3��d2��&�C�������:;���Z�Q������x��4�m��D~Z'!v~���r2�S~���j��������I1��B�Y�
�8��yB�}�$T2�S��T�.��LD�7���=��'"�.5��4j���@=�)�@"�����dK)3��vr�m�]�9�4���_�\xG&��}���
���h+���n �~��_�����1f���
�{�#1�[��$`�"#xN�{
/�_���t�M����ff�+zU�#!t^��ibO��r���V�F������W�����f����73�yR��-���(x��\����%_�9��2S��:��P���H�����Z�j��{0k�Lalf�M�`9:95�8}�tg���5���#=
?3C��q��}��'
�U�6l+�Ykb��c2�]
��"7\F�/1C��n\����������IoWf��q|B����S���Z�8�Fe7�Rc��fyfBk�{�����c�g�%<Q?���h'5��������%a����e�vX�yd����#��2���qgj9h4��6��s"����,�#.���v�2F����� ��w
��g�[�+�n���s�H���u���7�?�P��1nc ^��e�N}.c�����i'����6��F�<����>n�g��
��M|�8��31�yw�����=/F��F��
������0�n$pF+������>5B"�1��2�m��T�sA��{wdQB�|\���A��gh���D�,��Q���Un��`����
b7�W������J��:F>$'��aD>��N��Yf*c�X{6�;�i��Q�6h|�i)�13���7�i6`j>
�?����T�|�[8��'F����A���&F���i���jCW��p�P��
�)�f	���qX#�Y����Y��.�;R?#Q�ao"�����#�,��8%����������#��&<�'��qHU��l.:��*g�B,Yt.>��+"����:_O�^T�v^���_,^5v��H�Q���&fQB�fD>WD,���F���f2��%�~(����o�O��B:��|�!\E_ G��BD���p:K������g�����O�k��D�'W��mB3"��+���7=��[e��fh���x���.ejL�+������a���5X�BH�x�������_e4��=���aoo�IG��b����,�����:�9f���lO�`XP�l_^��=�b�D
:��v�����JR�_�O��<��3�C�#��eI��=5\b��&f�p}��/��4�_��
\�����7���	��gb�	f�6�g�L��x���2i�Q���i��0�3���"��E�,�}��h:�����
��p0`4�z�t�%��D@S;���_�VF����.=b+��&)�/s�01e�~��('�h�5��X��.�����z����yG���e]�l���d(�!�t��(&#XMp���vm9���T9�<����1�PLN�BL����y��3�i�|����z^������m,?�2��2���;�Qe������%G�1���I~��������F�2C���!y�����u�vV?�"iP?�Mrh��}H�9�R	s���0��M�Vs1��k�����+���0�+Zb^�WU�O��m
��� �8|]��Z�gZ�.�`iXq�_��cL��i��L�q��X����]��o�ge�u��.� -�R�e:�2��c�����Q�</zJ�3�O�l�t��7���d�x�E|�]�&x���+��Y��E+^8��:p��y��H(gC.���Y�H��
���^H��L
�h8�"�O�z�����Jo�'�(��������&)���l[P���KLN
!��w���pp�[��B�u5g\0M>U��D�M�<8e��KT��7�����Fc��J,���u��\��13#�<�'e6~�<-a��R;+���B�R���?��(�r
1��Dnn��,)ts�r
.in��h��u!�I�j�*������_���R�VVZ^P�r_�������1��l�>K�����2<B���:����X51���|s#qQZ��i!.��("t�P:w��
���3�\.���{+��mK�����%�D8�i��8������R�3�:?/�M/�w���Jx%�f�F_In�efbn��7N�!|fB���1J�2���/F2����B@*l�����Q�G5	�\��pXZ��d(��B��6&��lmK��p��-�"��/���U�fU##�BI2��L�w��43�;{z�������Cs+U���z�������7j�R��[�g&0���o���<��of���]���1��UR�������B^�Q^
Q����4w?y	#����������m��w�e�rr��w\��i�0��������&FU�u/�`�\��p'��q�J�-�Qf{�k��'r��b�T�����/�N�~'�#�+���1'}����R,�i�[&8Z���7]��3�M
����h��gfD�l���2�<x����#�����C�8����j���	I��h2����|f�:��N���}o7Q��h�B���aD&���y����y��
�[%���efT4n}kYA�/����MDbC�d�L��Yz�=,�/�+����ptf�Xq*b�Ub����tO��+����Y��X�����	R\C�5Q���M����|�:���&������� �>UB����y��?�����;���OJ�����V�2cLqk��S �HaYT���q�����z��g"����5��J�K�D$�/�!���Fz�1�YRB&��b�Bm@��M[�1.��!p�����3#��4v1\s�bW�1��ud������Wb��v���O��$���WX+D��0��B,�!|8�
5N����R34+D+k{��r��!���]~�IY�
�DW��Yp��:!l�1�J#�on��_�o{��Gg���%���t���H�o��0":������
����N����_�^7�x�w��a���B��;8�h�rF���K�����)C�V��Mj[�?/F�zi��Dp�l�6��O�n�� ���0�b�vyk�R����n�����
�*� �~�+�r�eR�U	��2�������KU��[�ny���^
����%n�Z�^�z�W��O?�u8� ]�0��(%�F;yND��~����!_���8��Tlq����%�d��Y�g
��p�Efx��S����R����'��=(��J_�d�w�����8%LD�_m��i��	��_t�S���X_������/���bz��B�Q~Y��F�����$��WTo.'�����T����h
�=lh���R ������#Hk2Q�6U������
o��.����}����^�����eX�m�cO������U�\�������n��~RP�53|���\��p���+��z�(��%�I
�S���B��v�vc�+E����}�~Q�G[��r��f	~�}v���:���M0ivr����b2�0�/���`xRz�9����}1-��������:���<����"�_$*��n<���43Z[���o���>F�K�%)q��Lr�|&�\��^�8��q�	�`�b��t�jCjq��t������3X|!=]E���y��u�`OALfq*_�	��~{�(�h������;�{����B�v��#��@f��S���D?���X?r���;z�����h��$lC�u����7q���X����l�O�V�!zt�6�gx�&��.�J�! ��I�"J���N��?��?�5$\������0������F�KG����O���/'���0$�7��NTF�f|
(�'��7��_{f�j���z���K6M�q�i%��G�X^L�AF���,lA���|��P3	];?2�}e��h��a��>|����iV�YU.u��ct��^%�!��[����mKN�k�g3���T�L@�����03�W�l���5f\����E��#;&��GW7�31�GK�cg�DP�Q)� ]�w~�u
��0��b.|@�����	Af.����� �Obq�/�	`*C'e��O��p�`Mh�B��zpn��������,�DC�|kxdN�xE`�_��V�����]����pq�f�Y��n|�A�����_�[tce2��^�m��!��4���z�%���S'f)D��7��	{
��������L������i�g&��������������d�i��������!a���3�����/�&�xM��sc�J3�����Jn�A�'af��b1�7�����l���qg�#��L,������D�����
CQ��p6b���Q>��V
l
|c�*R�����$����4��)�s����e��(��E��J�
w61
�|6Sb���M+?L���$��31��O��>!�����
jK��$<7��N�E���s�/�E��
�g���t�����}��I������|��J���)��'>9	�s�pf2������
�m~K0�I�Z(=,������x���a�R4hGn�c���gf.�����������^�+�q	-
�=x�	Gf.��,���}[3(^\������/�r<N���0gof��O������4�f?.7�m�7����;��@����~W�j����d��O33�����K���R���7|I�������dQ�_��&�=.��JV
^�������G�wc�2��\���u���C�^`}�P&E��]�0Q
�J{A�i:Fr�2�u��*��v����261��v9����|oH��{��>�a�������D<�3��?
���	�t�IE3�?/��z.!���fG�X`�5L���M3��x�5�iV�J5�H���|G��(����ZT&o��0�1�
���|�i����"��C�g�!	�Xk�-��DhS��5���#i[ZM��1(1�������q��)���/$Lh��'��������� ��P�������x�j`>/&5|�
�&����>BU�#�D�mI}�D�`Tz(�U�!���z@��9MZ;BUb���	��s�F30l%��O��|��R���� �k;�?!�8�����g���-�-��q�\&n�A2����@���@����:�m"�=�bdJr�a����	��	����Ei[C��N
�'2,#1�ey#���L����������������_�n3
��������O�q2S����J��6�����S�fP�f������A�B��������|��h��0[�xC�%�WU�7`l��.|fB�k���"��X��~y[�x�e�qSGR'�T�f���df.."��lj?.�#�w��)�X�����I��{�]�	�V�5�Jx�$��=-z�2M|�l��L��������J�2����cW7QY�|b�	�9f��Np�u��`�;�}������ja7������x���i�`��)��YK�<�^���w��V�
�HR��P�L��s������0����	7��Zrwh�
���a����T�Bh!q��cL��[:&B!��!B��3��E�h�8
! ����|e4��Q*1�+�nsEf���#<�c���b��;<���Y�����~"���f�L������2�	p��0���R���y���h�K".n�
-gs���(K�����������N7k�
����|��q��YC%���#�����O�P����>F������	"U]���+�����\�����B}�$;5w��G�
�/�����!P�CN����9��R:�������1�� ��:FMa�����+�����)��������o��]�g�^�>�����? �"���R��Y����!P��n�#������+^HT�����\,���P".&;v���VC�'��
�|�'�����N���y1�O�+(����XR�d�/�/x�������m����B��b�^
�A�/6��2���w;$/S��a����m���'�������t�+=�����J�����E���u�oq2ao}���J,�r�����P]����)S���*d*�/��F�e��cef.~�X?�����,N��m���
?1#*|��m!8�&F�U�:;>?�pVH�\u�8.:�����D�,�|�j73�����6�U7-?�Lvl5+�<��;������u�t��~4��nYXR��I�31�R%�����l�F!�/�H�w{.0��6l�M��p���w��j�?3���l5�����
��X��������`ML��e�jhW���5���t��|��p����L��1�F��+��P�������9�j���x��V�c�C[����2����z0l�2��r��}�����a�������7��U�o�����>��V�D�����=i�Q���Y;��J��g8!�E:m2.,�'�
�
&c�;���&�5�v1���|H���I���n>z��+����} ��OF}������g\a�a���$��c��N[s��0��f
��p�o�(�j�N��X��x �
Ckv�g& \���������h}WN:}3���d�5F|�����f����G�8�8�/�IJ�����J(Ta[qt��C	���)���v��0=z��/U�`�P�Q�e�-3:>/b@u���]8�La���.lj�~kWRL�a/J��_�������A����!�����<������2�T3%2I@�i��,�mIm������-K� �a�T����������3D$nc|�fP ����z^L�)i'���`�L��|[��2}�p���
�f^�6��ME
���;�0��T����C��B]a�.\�"��\ihV"���E��EU���z^�?�B_iz7;�%��iR>3>�T3�@[K{>��HTj�"h����f&n����E�q�fp�G��z�b���7�F�K-��y��N�y1�C�e��+�
-:��X����|��
�YQ �/2�}�~c��*'NL�����{���C�nQBm^=���2cB�F�3P��=3B��`���\
����
�'�f�B�0Z��C&m���B��@�6!��	��	%��
�Yn�����m�g�l������.�i[�[�E��R/y���������Y����?������_���Y�?�ui���>j�?�%��|������]���r�\�{)������������[�O��)y�4��
A��b�{@�^��C����gd�4I�^�3�$��w�|fB�Wi\{W0��O���4�K�&�}�Nb1f0M�@=���&Y��-3��i�w���:��&O���������{=y�Q!$������d�&~^�$���	K�Ip�$�0<��Wl	%��S�TfI}�KOr�;�T@�N�����������0�tS;��\�(������i9�Mp������`%f��/ya�F��Ho��h���v���:��7�9�8%D��S����0�L�9_�8>���3Z��; ��t{m���2x�D��fY�	|f4#�p�I���e�v~���j�s��`NW������s9&F��7 -�
�U,W(�Cc\q�J�O$��,�&��������~��t��U_�9�M�!,�u_eo��E	MP��_e�[R'����W���gwg�W��9L�-C���)?I�u_��7F�}�������jd�R��+���u���X����*�DG����z�S~�0�P�A�@����:�[��/T���[��(�-�%�j�
�3�c6�_!�g�+�>�x1=�</J0���E�u_!�P~'4[��Bh���T��Y�oy^���jI�Y�������~��	I�M�v�6B����"�v��(�0��?����_%DXF���O��jY�MLH$�_P&=K�?:��#�����	l:k�Y	r�<���o*A��+ciBC	���=��JhV�1B2�k�@����u��=�IN�f�<M	.	�R������)�"�c�kC�
�O���9�P�s�&=���7����MS&� ����l��*�Z�a&��Mj*����DG��0arCT������5o�����N���)IN�'+��~����]4EX��j�h�u\N�Vh=x�����8o�0
�l�EBB�B/q�0��c��C��3��m-T�y��+�$�Y���B"D�����0om_��5}v�`����|^���w�����q$�vd�L����+�T��5
=f��p����!�(��r�OO"[�:�6�����0;9���sF�����N�h:��c�cT�d�`�%��I��.2eku������H�I�[0��{��[&Rc��TB��h���IZ��![�q���Z���������h��'����'3��g���:�b�<�S�Ii�������%t��?��P]~��h5Ou�U��8�1��,Z4e/��zz��L,	_l�Mv~��>*��<y*(#0T{9>�&�u:�f7�HNL�}f3=.���,�E�����z1g��5jK|�(����/=]	�����cp�;��-G�P%,e��3�T�8G���,*���e.4�
'�A���{�H�]M���[��B�ZHZ�,l�2���1�/��}�������"�����s����tI�[��21�esX�Z���	|"1
����E�P�,8Z'�S%4��J��4:�	!��}b(���Z6��<F�d\�����>�+���fT�-�������]gi����F!B���#a^l(���5�Y��C[cUF�F��y���/Q�q�uxP�6OB�J��H2�#�&f��6
��DH�a�Y��D����2"o��0�}����p_;�3����D`jQg�����)=5�7����O["���{����0B�Ev��)X���-���+~d��%���XhR���*����O<
�J�a��'C��;�����O�:����s�����t�;�^T�+_��t���71����?	��N�I'��~1��D�b6=�!�l��dk�c��^�x���K��"���b�v���n���,?�s�(��:������e����"3Z�z@C���J���+�52lW�:���k�����
��a�S9���S������?1c�"``9�M1��!�������F��@�3S� w��n9E*�J��$Y�ht�,��n������'T�D$$�]�.��=��#D7S=��[�	�%4k�i������;$f�-�l���h���v����f�����NZ�X,�W�"�D"���@Se�����so�R{����J�q�����������tvVX��L�8Cs�\*������q,{"0>��R��'������1W/b�v_�������#�$�����
�~c�4�#X����:�hD�m���AzX4�fZ�����-��,���b$e�2>Mu4����w���HK ?-�B�� ������2���K��K����q��f2���ly�!��9"��$&�Oe�m$�p�_�?
���#�S�;t���+��|&B�.����L�+��N
��)�S����D03�w=WM�S1��N��q�1Y39G�� �|t2����)�a��������R?X������r�j(��(�
$r��:Q�QAl(D����sb��&���1Yij�z�q�����/%�"��2�	�i��
!A�1@fqJ	[��)��]U�S����,���~_�b���D(��_p:���=��KV��p>����[���,����.z��b�B�>GP��<���������������X��enP����>^�������c9<�f@iu���l�p�l@�X2������-���mB�N,���t['p��
�v��%��e������/J��T�N�s/�e�\��h^F��2J�[�37�M�z���&���'o�������)%l�o��,������-�=��Q��Z�:�GO���\�zQ��7>�v�X�����X~�u��x{�D�'�d�*w�����<�cp��m\���+���w��M
&��,0L�������$MkQ���Q!]�8�]���j�Y8�Aw��W����-r�EL��R����x�}��O�^/EE�&���[r�+aqe]T��GK�A�O�gK�)L��y1��6j��Ia���Tj&=�{n���A���dP����7�����q8���Zu��R�����K����U���_27hyq����Oz)zB�1WH�����q����3�>�+Vn����3S?��A�5��
jfr�,����]���W��&�w����\�����`s�����f3��6�R�fP't���4�����#��a��(#P7X��/F����	�o��#�x�\���J	��jY���-���(&�(e~������m��Y��=m �
@)����0u��	�92U1M����E����
���]��Ti�����������]��2�R�����>����Bb�W��}3�bw��^�>q��U�R9��X��E��V�����*D���8���������x���R�D���]2�cF��+�ywg���lc�2U����y�`���2�"<N.<���I��0oU�J����pb�R�M)�(�����B
5S;1�\�����I�R��!4�E�w�i�}c��i�4����
�8>/.��f����-��B�������.[t!�������wOb*>�=�X="s����=U�->����%��|�����L���B�#w���(]e���	h�f�hRK�h�z�m4b���(_��ZtAk>)�����wd/�����m1L���ydJ	t^">�����3E^m"�a�_�������i0�{��>��U�]:����n���>p�����V��^�(
�R���m���V
������\/�BML�����:s�u�������P��G��(�G.�G)�J�V[n!�(\sy�9r�9j���BEQx����������=7���4��s����T� �t)��DY���R��s��R����*J�� 'J��R�6�x+���Z}Uy.U�J��L@���y����{��T:�\�(J�R�}��^��Ou^]c�>~��#?P���(��,����q�*	(���(
�<��]Jm{}���J�EP�$�[��m�����\'W�Y��e���W���T���}*uU|:J���OGQ�����q��^��8+`/uu�5���>�*�K{m����������m*m��B'g5��km�����T�j�t�J��V���*��c*��%C3ge��{K&V�JU��{��2��*Qen�U�����4���WY*{��T��^��L��JQ��{��2��*AeN�U~�������W�)z��S��^��L��JM��{��2��*1e.�U^���S�=3��>�[Y��>�[Y��c*��4y�T��i"���K�����KK��T���j�j�'����t��d�KK����y����K��S�k�R�}��^��Ou�sL�����pP��Lh���w�n�&��rv!9Me~����n�@=I�bA�;�r��q6�cf"Au0���r{�>2F�8FI�H��R%�#X�B�!^���l%~=Q�PN�QW����~���@�����������H�%!�������M����c|���������L�#�K��Yv|z7|p���J$��rj�B�,��(��i��\�n(��a;>�Q��R�]�Zw����Y�!~5���BV���/{3�l+D��w�B�t)I�;@���~���5�K���'b���B����Z�pq@��3������J����-�Q~G��"�@���������Q)��}�=�q���i���-���h������XBqhf��0aG+��VK�H����m�������g�;"������>���)�����0O��������UYT��i��M"�u^88��2w�,����2�@{x���������59�-4�S��o�RRs$$$�	�4?�� .x|��Zv������>kU��T�8����?�=��f-��.�������n��|2��)�1kg|l��@����	����w!�*� %?*�7�1U�+7;N���-<���P�	��8T��N���n`A
�{h��]��m�	Y�?;X%����������3�61�u`j�	7�����7��<x��Tb���bc+:���o�)T��*�BX,�-#D"�<��B4E+�z�(]����f"A����Rb�9zX�n*��tD�Y!$~W��[���1�.�?�qc�����A�`E��X�����eKDc2��N>���|l�`z]<����ur�����C�+�O$����q����YF����j���xI�q]J�Rx-DS�Q��Bq�$�I&�SD���f}x�� 3QFk�����NF����������^�~q�.�
��q�%-S/>��ZIX��AY�Q��G�A���HoNU��T%U3��A��A�[�-=:�C)��&�N" 3m��Si�g�t��M���SU�`&hkz>6��ob+�a��K�!��BD5aP�R�T�a��_��������7�,} k��H����
v%����4:b�����WM!����+�Xs����m�+8bf/�.C���k��8��9�����>��-1����~0�[W<��a�?��$Y��3�����^D!���_��;<�vo..�.������d�!c�����l�?���?"�}�!m�	�v��sO��Qf����$��e���z�
�I��+����!����_7���W8!h.��4��&L'=��R�4�
B�������I<��Mg����`�1"��0�s�/�(�)GI=�"��o0�H�U?�!(��x�E
]g��4���v:7�Du�.�F���<m���I�������X�N8������4e����T����b�
�@A��6���OD�#���H��]	�&2�����[9�:2^G4����2�����	EYK�1�����J��w��Q�l��eS����������J}�zg�9����Rp"�K�UT�]b�J�r\��s�n��uWi��pI��v����C�3����c�
^c���Z+��Ks�V�+�Q!����3���M�+�1��G����n������e�����Zj�DhG��o��*:Y_N$��0MM��n�mx���]]��Y�L��E�J����D�5��=
D�pU�P���k�jpO�cG��z��v���D���S���������]0
bG�^@J�7n����'<u�c!��J����P���;C���<��(��t]�"�_��@�����$`�+�B8:������`�}�z�M%��Z/�AE�{P�^��@~��A�r��c��t&��eb�T5���DP�{��S�������
B�������l��
���z�� R��!=��=c�������y,D�����Zm�F�	w
T��X��]����	��� ,�waP�'m��@��M�_�6��Yn�����a�og�5u��E�=h�m����H{1-%�^�6���V�=�cqnj��Y��WTCB����|nR0r-L��p7���/d�{r�(�����)A�{�4�
4�vy)��6�.D����*>�.��4A7��X�w�
9��efEYyi���q9��w�2�����5��Vc��q���a���'��%�C�G���yq�<B�/������+�8�	�z��Dw)3q���!s(r��gf|ji��x���x}���BXT\+���������(�9w����!�s�/b����b��I7tTu���b�L�R���'��Z�u[��O9]
����uqVK���i�Lb�YKo�r��3>��bo��(��%��?qhJ�3j��q1��������w��Z��� '3b��<73?���:/�\@3T�q������]�	i���>X��7c�0>��rW����88UM�7��4�*����;.���`�L���!)��b&/���D�N[��+�$�3!U��8K���U(���
����_�����
����6H�������-zre��4]��D	�VZ�����
��2���. P��8W�V�mw�i����y/��Xo������T�+c�t�	P����^GD��x����V�.p���
��b�T$����P*ea���(���eh���&.R���|���w!<���?O�a{!�W�5�� ���6�7^Yu�+Q�s��y\�v�aAS� ����oa
��	;���Bhj��s�Z���fQ��m��jW�2�d	�U�ve���&����vhO�\k'�aF�����z�-
IM:w���s�M���-+5jwK��ZE���%)�x_�n���!c��S��� �I<�T����s��F/a�(����;k*�x���T�-c�$���KX�03z�2��nv� P�=-J�SDI7���3��g����i�}W����S�!�N E'����)A��b?�Zr�~1�����pc�����{����F	�'�����|��MO��%���r�(�/��a���Y��AL	
�h�	�D)N?��0K{lGd�7"�2��/L�Ki����N��`�?��>F;�|D'����Ai[�
<cC��L��
�s��L��g;�2#xyEef4�DD
B?���k_0��t7B�D��kp�3c~q���w%5
f?���w�Q��/��oTL	�jL���;8	��p�&��\x����M#������s4�B8���U�������=@%�!�1�shZ�x;��-4���$��^�C��-w��@ji�^�G�j��_�r�3�e��w����O�we�������W��V�xP0Bg���w%����.w~V���MU'��D"���)�m��}*"��!�5��{S�K�L�n��!bua���+:��T��G=������� l�#�� l���������i~����d��YA�_L�W���e��eI�N����Y�LD�)�'���`4I��b�e�l�����vYU&��s+���|^���qCi��d#aP��l�������k��ON:��Rs<
p��-T�M��G�	&�?���HX��`6�Z�>�0�ZE}�K�>����a�/�a��e�',c�������-����a�/�a
Z�O�B�&r4�v�� ���T���������i��#w�m��@�Bt��.H����{�u��W�X{����kja�k����k�a��pM}������k�+S���O�My����"X�����pM=�c;�kP�gja���o����X����=T$�3U!�c�z���i\[�����`u��y��
�d�l�����������E��kg�?+!���f:F�U��	�^
��sh1F��EU�V����������X�()������si�)2%(#|����=5�=5W]�+��z��81>���T3���Or7y�����9��4���29��S+1���0Q����~�����~x�f�(�E�Tx�B������o�d��)��0��Q$]�CD�t�E�`������434�Vf?�W�C(��gEcX+��<e\�B"���)���2�a������>pa��� &�n�}Jum����4Yqaq#�`�������t�Nw�����A���/�M��0�~�.��v������g�����!7o��M�VY���-���*��ZX�wC.A@$��n0+n<�����8.^A�m;�n+n!�	���e���a�����2�����a�����[����evI������s��������]f��.D��N0��Zw���[#461�k3t���a7 0�1��xO��B�<��~���Q�I7�g~X�OH�(��*n	"���%(�������7����u"z�L�7���5�:lE�[.�z�\��1�0V�;C7T��#z����!�D����V�/������ yO��������{lWf����o..��V�t�8d�R4���{K������
�=���%i�%v��`a3�{~'�v4���>��v! ��
�(�E��;��=3�_���	M�\�g&�����/l6/�`X&�N����[�����r�g�A�n����>r��;5w�zMM�l����j����&��^>b_�uyK��z�����;d�:�7� ���>���<�����k�k���j3�����������n0(�M��U���7\��y��M*��U��c��v������`����/Y���7��)~_����}�����1�����A�-&<�C�e��p8���1�����7���L�im�{t�1p��z3��3MyA9������`�p����3�;T9|���5����y��0��y,vmx���]B�G��ZEg���1i
��a{ew���1���Q�DM�����G��0�|#l��c�!�h���eD=R5��j�
L|P��3��Z3�b�����XW���y�,��i?{Y)V�X=4Y�~����R9�m>�P�'��������*�����H�������B��j�,����Ic�H.`������3�.�f�w?�lvu�"�����C��Am��������mS��3aE��_��o�a`2N�����Z�
c�u�0���pv���a�Fh����+��������/������8u]�m�	���#����&$�c.\����vg���>`f2��^<����q3�R���F�5u���f�d��������&�^�X�X��������!f�BXNHtt�CE��A0X���%��h����5?�D�@��C�!�K��&Tp��h
����=v��������o}����(,b�5���_�Uj6�sQ,�J���Q��oy6���F��.�$��7�b��o��p��8���B������.�C����*����Z�9��oT�>"��L�=��o}����5������a#JW[�BC>�n�?b�O#t��;MqGv��������?6�$�V�p��oW�&��0V��u��@<�=����o7M]�2cx�S>��J�r����=�?�bI�7�G������4a^��M���i9�Eg�����W\�chXm�0���~����.A?����	?������D��)%B��Ak%`D��0�Q��Q�k��P������|f
x+8����Y���7��z��ee�[l��T���g9��*4Q��[�!Go�A��}'���@	t2a2�Y�Qh:���b0��x�iPq:�i��0�
��@�8���	��"bh�k�jJ��Mn/�����waP(�{OEu��r�~1�	�zWKU��vu����	6"���	��`�z	�jn&L�0�zCZ�8XJ�P������z��)A�C|zTe�CG:�M����a�q&����	ZU��V7�}�ga���T@)��
],|�,��D|�`�g�����)A5E�7�=��Z�0kE�-I���u�|��P:��c�L`J�3�=Oq
&jk�e�s��(F�`�>��J3��^���x
���08b�85��!ff��=%��A���
5��m�4��e1�)A5��}����'hv?��=��D����"AfnU�=bb�������
~����b�@y��}������'h�[�H�dbJj�N��"	���mg$��u8���1�LD���P���J��_�]�P	]
���$��_�����y�_97w�-�a8>�\�"4I8��_>Ie�-
����^1�3��Z���^��A�v@��P(C�>^����]�ZO2&�~1�9H
�j����w�D�=N���XSG<��5:�=��f����������h��w�t�B�x��N�����J8����o�pV�3	�I~?�VQ��$7�Z�p���Mrg�$�-3E5?�'�I����?���^���q�����Q�2���7����7��&9����1X*�������F ����=f�������0�����9�o���Zh���M7a����dlV��������"���.L���i���v��D���@�������5J��	�m43^����\��L���}���/��q�t�q��0�q������z��r�r���ey���]�7�M\Qk����gS\�[���Rdy;~�����o�swu����N[/X5��E�3�q'�Cx*��A���V���~������'��msN�5>�����9'�$�����Q�q�p�
��A^���.o�A���"z�L�Q����Yk=���eh��X<�Cs<3���nsy0g%�y T��%����`��Y�?�4�3M�qP�>A�]�LI�
oc<�#|��	+GqoT��0��P���'��	�~����N��Z�_�WRl����M�Dd���5����wkt�a|��=�@��aH]U������a�
�	�_����1������b��N�&#�S#�Ayhg�x�a�������  �;��7?�D�Q����
�tC��W���%���3�-��u9�Z,��L�z��������R]=�gL�g���e���@���W<�w�E/,��GY�Y�ij����������ee�����>T��b�	
T����D�Zw�����!��]0%�&t��-f�.�6����@+7�V�)����sbJ��#j������0�8��c��u�{.p�%��	E4���b4pL��|�k��|3�}N�u�B-OL�n��y0�(�yiJvTiJvl��/��=��#�7����8��y2�(h����D`Vf�5���$4f\ ��m�	�����'�r��DS�0���w*aZ31�b>{������}n���
��h�'|�(M�D!xr�|S�[6�I��#��O��������n'�h���7��i.����c�P�������xD���B���N����I��)	�D�11�u��1��L�r+u�'%���3Q���h�bF�Q���8H�����1J��R	�5g��fF~�	�KO76',L�n���h�� ~�V>N�M�C�-��������1���3�!o���wZ���g�>��aFgP�#����~����>��'d3c�����8����M	�P*����g��FC��
�<�q����xg�">�]��C���
�vx�t���k�d�&������%l����.��n/��_��4�Axk�s��fBM�PK��Gl1]LY��f���_�&�����A�Sw���l
�V
pfv���Yv�A
������,?C�M�AtJ�{����B�������42y��D�7�x{j�V�7Y��}�C�)�^��>���[��v=VT
uR}3c��c$���{��P}}��U�����f�u����s`�o"���a*�f���\�<|2�%�73V�_C�}�(���(�����:�23��U������oac�h���z!���X��V� ��oI�O��B�i/VR}�O?J�dOt	�}3c�������'��T�����0����U?t����r�73�;i�N[��1��$��[�xL>��6&WgR��/F��5�0��
�M>D��#A�j�{��N�O>���J�n9tn�.8!����6>>�0��i�������n\��/��h�!T����G��~����D|��E����#c�ln_}����1�����`��A��������*\y�1nL>��F���x�2"'�"M>���GH�IH'B��������c%���cL?_�?�\�����XQ�"� |:��m5�����J%�������o�������}����/�g ��'�@H�h��EK�1�)���;�q�1	1�,���������lg��8��H�6&!(��'!b�$d��QM5��d�'!c(�3�4	����'��J=�?81� ��X�\c1xf�
����G,^"�� ��kLA��tb|
��*��]	��\C��,Q?�~�Z����'������1����-?����������/j��= �g�|)���o!��|d&c�;�0
+��f#����^�GF�.X�AB�p<J��.	���P�(�i����)�s���D��?Wq[��D!+�����e&p�E�������1:���G��I��B����W������^��l�_j�*��d�+�^��x���Qy��MFKU��-$�kL����b����l��"4p���G�|��A�i�����w����C"��\%X�@H�4.�MD�Q�#��w����Nit��:3��u�/��D�oa�t�_glz����XUs���0S�G���
=mF|����:��^���j����N��g�R�h_��Hfe�<&P�n[H�&�\je-^?��Q!7��A�����dH��cW�DP�k�'/b���p���J��/�v�FK�u��[������A��D����xw1����+
�p12�D�S�a�=���83P�=`�*����P���W�M�yt�����iv�T�iv��������i@����'?���)���h���;MN�9����!�l���+�M����3N����F�����������[��
��������KDs���5=�4�%5��>73Q=,�MU�4Me�����&|�%n>L�&�,��a��jMs�v�}f87uI*?�hMs�7mR�&&Dpa`�N2��IO�t�|_
r�&x>Y'�?I
��R�qB�e9J�N�,����07	�E#/	�Ig���bOQ���=.��v�c�I�E8�~�������q�'9��}��.���IgS����Wl�V1���j�oX���s��'K��:!��7��'���Z�pto�D����F-O�cy�p����	��/HX!���_n�w5a�Cy���b�h9�M����E�tqc��z�uef|�b`,P|���R��&�U��$h"�Ui���cu�R��V���H5���\���(�:���N@�Yfdz<�;�3A�����_�����D`.D���iiB�/M����"�Y3��+���KT��~1kS��s�W�}��&���	��=&_G^�S�b5]���~�_���%�����3Z����Y%�8��a�o~�����D>Z�@��}Y�bN������W�LkCzSD�6��mmD�BT*^�-_Wo��W��U�A4�����{\%JW-b��
dW�*�hS��'�hSy�'�hSi�'�hSY�'�hSI�'�h���k��O����*��U��3��`~�QD[��MW��c��s*S�� W�,�Bqu��P��U�����k�?H����a~�]��?�WQJX���?{?L���������?���n�[>�����y����+��#q�y�)���~�����?������?���"|��zr���a}�31�J��8��0�k>U��d�0�S�r�,uD�<���R	�����'��	��F`)7����D��W*�U����tN������S�#�~'���� ���`PV�������� 0��3��;��(�F�8��Xv��!�[�]���>(����
��6��!	�d!�\��1��]	{>��������-nm<o�������g0�S"�3����d^!����!���J$hA�On���2j?�������>������0h'�bT��u/%�Crq�W��}|���Dqf����'��f�0���HX�
N
�N�����C��=,D�����HG�zA��t�����X��g�0%�3���L�����xm�t~'F���|��RC�C�[g"C��a�K���c?�9��	-���:�da�f���q,�5n�D���o--D������P����?����b+�k��PL	����E������#.j���0�!%�T����F��-�� "��$b|3W�J&���2�7�F����C�I�+.��%���J��0���H�by�H��Tmd@�X��������c�{_����v��l|���M�;z�
'�����Mu2������g�^�����`F`\x")��TEe�Z���d����i��N����E��+�+Sy�FP2~��w����8���|�(���_p� 3>U&��y��/xy7b�yiJe�oV����2����-M����b�]O0UNP���x)F���2����L�Z{����c	G�����E�
�KEz�]Q�2�H����QKr�m�X��^�z�.��cdQ���h�,SM8>ca?Xl�7�Z��@�R�Y��'���ZH��5�z���y.>�$�D�)��2`H��M��g{E�-��!s�f�2,i������K=�A"*�/S�aJ��ki�&b .5�i����L�x>$���Bb4J0QI'����� Q���!�Q�`}S�WN,fb4 W���1:����>j���t�2`F���1�S��N�dp��}�<�Bw�3m��#h��!��[1v����_��o?U}�������*{0��+�����-����<!5���4�9�)�L���C��~|�j�U!MC����3&( ���2(l��O4� 3��3���
��K�L��P��"��
B���z��g�P��)+�12%>�h��3�:�z�k)�0X��>�0��ai>�w}����[��p8�/���=$���,��1|R�!�����\W�+P��<4*��E����������{�^��J���o�;j����������������.��g}x�@�������`h�*����)��[����(Y8|�����ha�=5>���S���x4 ���M�z���M��2�(�}�!�	�V�X62:�$`z!��-6!��L$��a��;�P.����5���E�|�J�1=�p�
gS����"/���]QC]��.�
�?�hN$��L%����r���AA�>@�^;�i��7e)*4��<��n>�����P�&�R�D�����fY���oWBg})V(��R���^���Q��AV�;K96�g{a�<�g����.�ADr���~mg�k�(���u���e����A����ay��e�n0�rc�{��GM}��+x�d����d���0Lu~<v�g�L2�?*�������e"��{a2FzZ9_��{a�k�~���&�sw�`�+~@�T����N0`4t%�H�n�%<�31�W����S�`�kd������r���6J�\P����L.'a�Gk���Y���5��w�p?�	F?���zr���S,��9���������f*Xo�#���d"L�Z����F��Q�������8R��u������Q
S������[��/���23����Qwe���c
������Go�_#���O�?|�����Xb��?x�'�3����$G-v�r"��3���x{��8g�41��T���!h����g�"��o�2��������s<i]�C��:��������>�*y,
��a%���a��"b��pe��d�k�(��Su�mHAZV��'J��0L��$�i����)�-n�>C�R��w"�7������s��4��LT���Ww��sa2F�������/=������z��ih��0����s7dk$�Zj�L|���Gz1��H
���Q����|�Qj� \R&�b��`������:�4��������>
�apgL��i0y������s��tO�@���N���>�M�ff�W��c���Vi���0�9c�������L����%+��\=�
:����+�Q\�LD}��s�p��8�5n���q�~u&
pVj�{�]3L���H�����.|W
�l�s��*k3a���5������B��t$���2TD����������Ash�����-o��X
i���{���I4���?p�=>g��\8�>=���./�2��[|��Uo�AaO���R��������m��o��x&��g�B��nZ]@������ ���V��|���*8+�djb�I&(�`�Rs�(��ZDe�SX)�>`���3���s���{���Q����F�Dt���:>��{��Uc�]I��Z���?�L}�y�q�*����7�"[�r����o��p�>]~��R��-����X]���oOt!-y6�r\���������L<�'��m���D�~���i��^.E���K���q�:k��A���06��:�Ld��M&M�+�����g=^M3SO�	U��B��m��O�j��F��G�.��X���-=�B��P��4w�x�[Dq�0*���o����k��w@��y?T���1L
����9?$AS>�������I���2����,�D�	�p�j������wg���0s��g&�c��&|���������J~���L���.�A!�RhY������ht|�%5��z��Sh�g�S��d�DI�	�{��a���S�+�o�D�qW&�~jU_T0�}��1v���Xg���h���������(��2W�V��}��h��plkbm���$�����3��
�4�����t��d�g�'%BNj�d��53�f�omxZ�$QRU���d�9���0��S��Q�-��Dk5J�*~��[,�1����Y��.�K.1%(#hH+�C����6���0��i��:-�2�/=��P��a�'r��;(
c���z�B|����Q���Mwx-9~`��`�3QXB������
��,�2���q���G[9�8a����5��4��L�LM�8@�$�:p`@�p����h.�����6����^����,QFd�Z��+D+3&)���<"���<��v��
FS5������H�#������1��;��Nu ����A���6|�2e��f���B{������W�0f�����T0h��?���
3Q��d�#�	����Q��D?`L/HG�KyfDR�9�,��������<�\k��TT�}�Z�n�w���X���P��������>/���������1�v��{�%�'�
���f�������aa
	9BM���4�{9WXKJ�S��E$�~K?u<de2>�����])�S�����=�Nc��0}���_i(yGu����T
P����e�?/>Eu<�uL����(��-m�a��;�N��730���wX������K�b�
�����z��BB��~��5/���>���/��2j����k��hw�Y���;����} a�fy3�6��b��dS�t������^#7��S%���A���Z�C?���*1�_�bB��RE�w ���wxM=�}!�1�z�� [�(4W�!\=f���v�fDU��_@��ar��]	��56�dU��#���VL���2\�g��+mj��@g��7������&23ae��U��w!���Q��Hc���,N�m������������TjJq���6u;-u��n��y�����\�_1/��\2�e6%c��=2��������4�
ZL��-(�A\<9�ea
�S�
��6��^�'�����n��p���w�Z]���)��N��Q�n`���&�`
�~6e�����c!�k��p����ga�xe�!��E��.���������M�N��D@fp�T��]�8Q�����������s��H7ys��0�j������&�d�(�%L$Pb��fK�s��������Qz�?��}C�)��v�SdZ�{�	���?x�Hy��g����	��	�I&���P��w'~E8�3��������p��LTm[6��=����R�'f�R�����b`V�B$?�?�i	��O3�w&2�Y_�������l.	�u��;��.K� ��=��l%�.%+R�8�u��'���t!/�I�3W��Xs<#���O!�%.A��d�Zw�p�)/C"�S�&�]p��� n�\[�.��������*���j(�mg�n���	B p��;�bI�����w[r8�\\��V��@�]�^�/���������-:��T2���QH�Y����0!��"�P���3.��u�jX~gHE|y�h���\�Q^U��p��_ ��
!�����-g��;��"��wdK�#�s��3�1vH����w~������fh�ks]�����Qc��,1R� �������<)����D�|��U0f�� �����$�L#��s"���cM��:�{�o%a�f_�����R`���x��|fs��Pe��`�pK�W��
3]��g
�z�x�]3���I�U�����
M*&�����P���`3� ��p��A8���L����v=��\<|��W��Y��\D�Z�@���u����$�z������
>S��p���������d�K���W��M���|�L�J�M��<�v���M3S�o���<��M�	BA���^L��wv��s;�f" �d��|�$��_�����{&*w ~ �����������NS!�_��1���P�6EU���0� ����AY��)���� �������4�����ig�5o9O���7I�yh�����	����>���W59G'���/�t����4�l�����!6���|[0�D`�{>�#1�����Q�b�Y�]�����{���Y�EQ�+W"�@��� -S��@���P��PUa����$�F*������l�=�m^[�l���r�2��r�lH��D��L�������'�x(���x<1T!��V�E����E����^gHj��^�V�8?�����O������7#�Z�G8*��/��DFg9z}�Ly�^uY�&t:51OO�

��rz6�x�z%�]!g"���YB1���?�����X�.�o���>~�� ��#�?1�����0�a�Rjq� ����|�-�Rk����6����|�v���Q:S��2��!?����\���pe���s����N�nJ�����%h
���7��\�	�DY��:	WP��9c����7�{D��������Hk\�V�{�
�
�������$�������&?ci5xW��;=z���lDMbD���/O���g��6f��KV��'C�AWw'��R s����3�\�`�}g"!������9�[Y��]PS]B�X�;C.����q���X���9����	v���nF�~���p��o�����+��A^yU��G�
�In�m�������������}(rT)��"�P�X���`���`�`�C����2���u1���������6�����z�����H�n~B�y~h��|F7��Mb}�N[�J���������$/"|�;��!P�z�H�s����h�+�
��x3m�{x�3a���X�*)8Z�*k?������zH����/�oOD|&��U�^��T+:��`�*� �.D�	���H-��<x�]��6���3�;�\����=��	�JG�xr��CZgb�	4��1�{7�E�����S:	�S4��L|��Fd�n����	�@�N��R�����CN��&�����D5j�]	�(���2�����]p���/ oYC�'�e��\g�+���+���Lpw�B���Km�f��quW�p9����I�Li��p��n�g����9�]�#��Hp7dxg"!�
�: JZ�\Ml^Q���!=/��E���;%���<��.Lx?��T@OH����YV�����:/?��O�k<�R�A/�o�tA,D,A5����<��'��C�Q���N�����"�
5���L�"d:
:��ZF���uh��&j�p�.!E���(k���Y��]A�����5h�LHZ��fF<ru#k��9�n�9�w�/86v��'�3�jL0����6`�:����N��?%p���6i��'\���a�\$*�������67��%�����	Z9q�r�+��%�L�M���UJ�mX~gb��-���|,D����)�b)k��������Alw
��}��	����K<p9�3��}�.��S���uD��ky�#o��O�-�*f,�dYP�n�&xj)�1�{F���� �m��NZ���|��%�v����R���3FB,�I�>3a�&����`���X�
�~h��_��P��p�z.�����n@�/�x��a,H����\S�.8���2��A�x&�Mt`�����B�L�M���e|�b�b��+������!TY���	CF������3�I��J�A���p|�E��^�U2?i 7�U��4��O��������U��p|�'U������z��br�S{J�	u�%n������"c������������3A�]/td�y�B3d,O�����^�f.}����y;�FG�6.������{������L����TO��g������	�L�*�f���+c�-��a���w��]	MD�Q�CQed�c&�	��k�-�)�,�����AJ�`�cKA�QR=_��J���B�����0��r�������~��2H�������+��to#�@TT����I�"�An�����m\��n��&�����U�s#�G����1��OB�c�X�X(��WMU�kgL%���`��j�"!N��~��	�jF��S3��3���F	��{�)�!�������?j�2o*�n�qmS�M�hm�����4�qH�`U���O���wc96 >lW��	W���6n�;�w��KX�\����$DC�|�\�����{$O���w�4���M��:��"s����N��5u���D���������������?�|����R������G�%�;�@�1�������D������MW�<�����W�����oH�ee6�������-��
Y^7�&���f�y��D^/���c��l \@`${e^�6�������{���$�3�j� ��q9�0��W��ti��3I�c_]���O����)K���;1������DT(��J<���4q�z��@�1��T�*D6(?���hn��_��?@��
���$,��Ik��<��ln�%J���tz� e�s��n~�KX�.����~����T�3c�f�,�&K�>��	-��w����&*��[���)t���8�����qr:f��]/Q�6���T���J�7?�nPn��@4�YOHh_��V��Az�����;�j�ca[X�����7��s�M�<�a���/��,o�=k���5 �:g
��a04 �]���S6k���������[�zq�Q���R�]��w!�J(��'.��[�fCS�Y��"X�����6T_�������.�[L�oa#k|���~���(���d9��`��U������}��P;��2t����Y���a*Bi>�����s�m.Y�|3�*K�T�h%�������B^���f�`f��*����P�������������
�Pj��S��?4�U5n�ZI�@B^t��FS�$�0���0��C	.�#)��S��
7��~��%����e��HH}B��Q'-83!���YD��qbK���P�3�T�ud�7PA��d�]�(d�73��n��5�u���g;���$�Q��`��z�����;i��av87��I��^C�]���_��`"K�2�o����D M�� � ��������'��u�^	�7I
�����)��L�a�]t?'�0��]�	p�	��B=dSn�R�������2a���of�-��K����{W���g�wq0���Pq��vL�o"P�����P��|Q�h�f�kg�k���ux^2a^���f�Y+���?�r�LP8�a�]�zK(����<����Q#'�DY���E���*����&h������2q�w����zySb�%O�3o����I��a�<�v����ff`�=�vq�g�/����w�$���'O�]0���g��4����y�� ��M�j9�)
��� n��CJ��;~���V�	� B�H��d����	Q�LM��Z_���b��*�u����$�����!�3�2!3l�3���q���k�31$!CK�G�������w�!S�b%�1z��4�/R8��sWY�������>6��FO0���70�!�����c!��	+wn�C�����qIB7Bl���l�/�~�AS���z`����yB���1aYT�T��S'>�	UZ���g�xw����?�&?��s����dT���;��`��-m���P���eBZ[H%���=�3���E�����7����J������l��(�8�o@�[p�Mb�D��� ���SK~13��&��k��;��-�����>��h`!��b���;�JrI(7������F�U��J �����}b���f�*tS��e��)Q��F�T���uj��OU}.Uo�y�_�pG!�N��f7$��L��KbV�(���2������y�Bp���O^Z�^�.��l�}`���������UQ��U*gu�uj�e�t���
_�	����\����A����m��_��/��t�'L��S@����9f������?���i�SZ6��`r�d��.M������������t7�PEVp����Oc�����X�K�(�� F��9�V���{^�L���������q&�'����S�$O�83UQ�~���}�E�e�l:V��&-�1����{fj���x��{���2��	����j�T5�!:Q�K�O��q�P�EA3z�v����#Q�U������Z��{H��o��6E��)�B�tO��_��8�����uJye<� l5h��'%�P��!u����\���2�Gw�Y/5����9��!������Q�W]��r*�2��n�dZa{&�.�zy���R�����#3+�*�2+�����,���X7b���n���:S��4���B��^#c�[}��1��W'^��-����&�)�]����8������X��O=Nu�,D�a�(#���>u�1�2���$<W;k�2p�Y��#�^?5���I*����0@�>cUHJyf�������}�%Lcf��Z�&W�z���Re,x�����Xw���������VT��f��~�S��we�bQ&�d�TO��4_�S�
����{�����d�����(����[�a�<�]���xz���9�7��a���0o<<5��7o&&C�����f�7�2�����7p��)��������+8Y$J��l���l=�<@��������
������>/_T���_�o��Da���\W�v��Z�C�U`~���V��%���$'oe�qr?���4��X����lge�gH���S�PL&D�w%�	�R�4��13���:�4���8�S�o���.��>&3�c��+Y�`x� �d_��aL��("/� P���f����m����	K���,AH�����V�AG�����t��c�}=S��=,�����{���A��dr=]�F��>�Y��i
_�4�i�L a���}�o|)�6�������q,���K���Dp��tmJsQYO���@�>�q�5��[��I��1r1�$�����L��Dd���lps5N��=y��|�����W8[$.�����+�^,_�d�O����U�d�9���eTb��769c�3E&�����`av���4r�<Z�
Q� 9�<LR�����v3Q"{���o���i�9-��Is���n*�������|�]�%a%����h�c��f�g�H%�9��~�!zN%Nq|hI23����:�������J23^��Cb�X��OB6&;���Tce�Oh/Q)�{�{	�d.z�y�����(��r����|&������55)Z�"�_]�yP|���d31 -n�>�z^��[���]�����r��y�B|/���JP��D(`���<��X
�D	&�+p��p���`e�+|�go�	� P�;f���2c�0�e���RT0�{�+ZE�sG�Dv����h�Zh"v�i��stL.YbD��Q�{�'|E��-���O��M����a"o�R�+�f�������s���D�	�@���b���:�Eu�/�}rWZ��:��KK��!3h��f]�Y������`b7(N��PSW�5�l��q�A9�#�������FV�z/x&(-��G]P-���&0����L6�}'����������-�c������}��wy�V=2M@�
��6���:�����d��xw���_$� ��9�fa���,��g+��H9���| �9��O.���1���}�]�C^s�Q`��R�j���am{F��1������8[rp"����M{�*�y������|��`l������
���rw������%�w%c��w�Z��	c��j$�����~�&;S�J�3z$3N�<�\���1L���vp6W}q}f��L|r���eQ�<	�|����|���}�u�x����>����+��}�|��=�D���>S�;�J��w��1fVx�5��(P��c�*Es+��-�#�>Vm�d0�g�L�t����	�C��`���A����i�{�v]����{%������G9����.H5�w;�N��Ee����k��M�h�����W�H�*F�E)/ff�}S���5;�����F�39�M���cY��O}�q�S]R�������c���Z&�4�'�L-vM[�qK����E���vf�b��|>�������G�ZN��{�{;�=OuA8Fk����nb|��w;1����Dt��c���ZO{4X.��;��>�O����y�8��0��]i��\~���?��,����X���@��V��I�O��3f�k�{��I��O����'�?�Ck�S������?��
���3��VW���u����m�j���
�����qh\��|�(]�g�����}��@�*Ne�U�tUg�u5����Nv�j����}��/Wk�+�tu�uE4�^O�J������6_�r]���t�\��&����k�W�3�$����6���@�j��L��>w�
4���u�*Q�zl�*P����q(]��|.e>�R�K��Z�U�tu�uE��Ne��2_W�W������@��T�k)�=��^���u?�Y��$���Q��5K,Q���C����Y_%���� JW����\Me���}k�I�tu��s��k��k��{j��T���j�G�����9�����9���j(�(]
E���CQ������9�����9�����9�����9�s�E����:����/Wk�����j���\WCQ�@�j(�(]�r]
E�Us\=��G�����j��m�P.WG��j6t�_]�@W����1x��]�@W����1t�_]�@W����1t�_^�7@W����1t�_]�@W����xr>�W�@\M�0�j��W��9���T�0��T�s)�9��\J���a��=����:��Z����a��4� �Ne��2�S����������%�nf�qw!���*�*�����3��1l!�3<+0���D!����g��X��8�#\@����E~�!�1��7G��a�������7�r��r	�x|4��3q��sK	�����&E(ld�B�����!�l����I���tT�����R�+S@ M��j�2�$}K���g5;�VRg&cH��#V�����
�k�b�}������Qx���pz�+C�����U�pchi�D6h��w&(�3z"�����%���AK�T�9H���n."�9v.��mTo�)�^=�������+z:�P��H^��,�b�������D��d����Uxe���@������?~�|�~�������I���+3$���3�<LL���(�&O����['���o8���]	�9s���:�J�a	�`��������������a���'�4��enX�'���
S@4uID�m\(5�H�=��aW5� �bV�A.*�K�:�1�j��5��4D�duq���k�&P�����$J0?^�0���
��D]��t��/���j���b�_����H��������_K�:�����/=uw��n��/���1������L��!!;O���*���r33*:�c��.O�"F~`YtvZ�z�.-FD&��z�4=��80$������E�������a6u���a��?���s ���Jn�	�V����*"���FH��- ���"�3�m�~��	�>%"C��PP����^63�-�L���B`��������i�Oo����=�f�I��~�;@��.enzW&�A)Qj���2���u��3��[����'�����:�1,LIm�����OD�0��G��,
�wA�%������}������2P�o�����������`>c?Y����n� �kf��7	�RI�_z��$�^P&�����'�C�kVf`��5�*9�~!0�v��M/$��<������v����3+����hc�W��/�me3�J-����L	
�������_�Hu��)���^�4�>����I�2*s�>4�'�Aacx�������!�o�y������0��0�$-�RlO�i��s�w
>_����6��D�X_��F��-�D�L�'�W}�o��y�7���!���J��2N��T�e�	� F�]i�3��E*��G�&��>S�<�M��)=v�M��
D��$�E��)�a���YFAT�#�M���������1��!���X��&��E 
�7�'s��q�\��b|�.1��������Q	�zf�b �F[Q�=���i"F����R����9��g�U����;�Dq*��Ei�B\�K�2��q��e�p�#10^�g��q_��*��^�PL�C@>�O8��(=fg��&�E��Jb��T�5�u{H��)����]�i?��4$3��d����-��o�5�����a
���������u�0F��B�KN�Gq":��)������P�TRu�.���3������,���U�*5�|���o����|a&|��4�w���1
t�nL%����w
���!�U�Z��Sd�S3C�:�mw*Fx-i+���5�i5��2.�����G����i��������F���p�L���zE6~U���h@����=�����}"��GW��9��+��F��yS���L|����:a���Y@B�^M.C�{or����K����D@ltc��X�4�L	�>�O���^U�|WB�����	<&�p������S�0����-���������uJ�=�q"��`��%q��|����	��e���x�6��C8�!����fuT���]0�8��:fX��3��
�:�d{"H��2����������7��^�v�����:3+`wv���N�}���B@�/H�X)�V�1�o�l'���V�������%]!�]+>������US���������g��l���0�1"%�M�r�N��?er�����hg�F����/�]��3��	���1�4����������P�����J�]#'+�s������+A�+�q�*I3��.
r�����["e����*�A�[m���9b&�A����t��'�r�=#������b�\&�}��3>4�����'����E]���)����'$�$,�Dd����E���A�2�$S���V��������o��5-���ra
n	�Mo{f6��{���1����-��a�����"~j� �&���8�=�T7g���������9���������D����R`95���*$��Y$�a�b�uR�_�q0>R��0�[�pl��/:���v��KW5\b����p��OmZ��|!��#��`L7'�J������S�N���)A���_�*G?�qm!���?� �96�^C?����������=A������d>��%����@7%�������	t�����,O��c5�6I�L����J��N|�Q�Sgt��0��(&��}�#��E�-�q�3�tqiT���i�$��v����$�����g��M���6�����?��^��rl�s\��������I\�(�����>=7��xe�
&\@�B���a	�u��S�DADq�0�����:Z�:xe��������#!�^<i��]+�EuN]����we>8�}sG�+��0������e����&.����|��dx!�6������D�v�`����xK��-y�������}W� ?Q���k�`Q�4��\/La;>��T�_�������'���*b��:xe�����pTI(��1���cX.C	/��=�����/cC�*����!#����]+Q��<��E,M�~�������g�aZ;^23��|A^����ML	*��$�H�2v���6R@��N~23ge������7\������(�5_��!3�1�?N��B����A�L��=-J�SDI7����G�}������eM6"�A=T���)A��b?5�A�#���a��$. ��dX��9-Z�)%q���w1%�|���MO��%��:9i��U��1L�20��C��)A��jQ�j*��"_���9�/������g��������N��b`.��:F�����N437��G�nUwp�����wu(�1r�S�-����7���23Py�A� ������\Mw#��A4��3�X0��� !���b?���w�Q�����;WL	�jL����d��B]9Tl,��y�����_���4�����w�b����)3���D4@8>�Cd�����TS����zi��n�H-��K�i�@<����jY&������W�]�"A��'�z��E�A�����#0s�1�Dg���w%N��u����e?h�:A��O������6��X��^Ou������L��-�:Y3�1�qiB�����r���O���,�O����?�NW�p8�O�����%03f�~1MbD�0�i���F'��p
�Y�LD���'�&�`4I��b�e�l��K�q�M�cs������8�+�
����A�~d;����z�[��M'�[j��wwi[�����	�#�Q�mc)�����4��z��J�)���*b�_b�� ������0�9������e2��O����G���0�](h�3�N2�g� G��ao��"���
�������dL��7M����	�)D'
���qI_���ZG{}����!�Y��f`�����V�5"���v�i	K���
�/���9��@I���1����e+��rD#1\Sa�bl�]fvx��0�l�+8�53�<T�%�=T$�3�����~��L���v�q��9��Pdl�'fu�6)��(��9�[$�?��p����9m�s2��pPM���R����59��e��7�G�?&��M�JPR�H
��)���I�)O��>�i{������������tP�;,N��V��Q�����+���M^'�A�0��6ANk�0Mj��L�(���_�T��f#j�����O�A�0��Ug��2\TN��*���Y,�������3�OQn��?D�IW����G�E3s$�
�����+�!������1�%��w�2.L!��n���`��[�0����� ��0X��c[���T{8#h0
FV�B�C�;X$l�r�uj�r�4p`-�����QU��l�-�A����6�������p�w=3����(x�%����Y������u6�����1|�0��Db�q��/����2S�+��J>�,o��0'D���]�b�g�����?cf2�����B���:�0cT���Qj|���+���4�\�2�u!2Dp��b�n�������`_���ve��MW��|��]�������M�n[��t�m���	��QbR���`��X�VV�������:
1z�D�7���5�:lE�[�[=B�a��Z+���8	���33���=�o������."v�$�iS�w�O�Xs���������������nA ��Q����ozo���3<����v!2�$�����#,lF}���L����>X�g��.d �'V!qh�])���1|��1�;3������d�h�'�H�K�����K�qx553\�����5�m����������55Q����G��0��sw���������q]��r���`fm������?|����(��3%���~�]���W��>���|b�}z��|����8$��W��G/J���^�7^^���mf��?�'#"���E�n�t$�L&3��L��9u�������bf���
hR�G�j��T1���Z���������R�ML�r�71%���bJ����7v
����DB�� �(m1KPF�g��0F�8Ka������#���<o:�83�qB� ������_9u�4����O�w"x������9pe|��0��A	v��\���B���@��*t�g�8}�4�7
�3c���@����,V��#����M�g�0�|#,����.D���:*�����L���5������C7�c���S�z�a��H�����]�N��+)WMV���/�v?%
x���������Q�#Qv����7<:�,+��%'���4����������nY��^���4���.�f�w?�lv=�E!�=e�u�4o4������A����'����Kp��<g"�	����8i��W���xh7����/
�7��n��@_ifn9�l:�M���%�����u�����	�VZ�#����&$��o�Ae�����HD02#\��b@����a��p]��r]G��LOv�hs]����H{Yc
bf�[��E1�
aa!���;���4�.7�$��D�v���G��57��&"V �c
5�����lB�@L��p9Z���c��R`v���
#�����5RN�_�Uj5�sQ,�)���Q���6���8w53E`��b�������q m��h/��_'6�]��Z~r�X�{|9������������S��2��Q�!�<%��f{_��6�t���1�.�����O#��;MT@�u�M�������U�3cx{��.�4Pl�\}0�{��F������v����2�w?)�Si�	��J����(��{��~�^c0�����0OL��a�l�S�"g�����M��2��Vc���6����VD�'#c������a!^���H��o��=�O�A��'����P�����9/xoo1�=�a��f�ZO���[5h�2V[p��Uh����hCD[�`"������o$P����S���\U��"�����(B���An�-:��yt"b�d����5��P���=�+��A���6EB�$�������w��&�m��
L�Z�A����0�h%F�������F��co4�Irv���L��G����zJ���qf	
��C��4=uPt"�4�����>2A����lRa�f��A|����$�S|6@)��
],��Y��D|O2h�V�7��<�b��X�|%��lfkE�-I�E�:�}��<����^��A1�$��������2Q�Xs]�:��4R��BA���41�/��H�5�W����08b��5��32����A�C�aY6t��l��s�gXLd��n������'��	�f����D�D��y�W��3]U��G?�z����1!|!B<�W�vx� n_�j�C+�RF�$���~8�6I�~�<���=
f�K%9���+%�./��m��1KP��G
�EV�A�zbC��q~��>�71�1�qr�)�j�p��x�Ie�-
��p��*��b_��Y1�;1(�h�E�7����BU����P{��	�_�a�'������-��hD��XKG���5:�=N��1�!3fUF�����q*B���2.����
(u�(�i�[V���V�3�r���>�&b#���ke3�
������I~w�3X|pp"Mrg�$����u���.-��r���F9���[!�(�Wt
ox��&9�����
�4b���~���}�[��fF��N��p5��-6�X��?a�
D���F�<���df*vk�a��{d~�9n�6�o��L�9^	�=�
�B�m����?�ryg�����"�=#�8�iOc�����1��>~��MX�����x������M.*w(��p+0����a���3��MmW���T������b��'�>ey;~����/�x�������vO����ELOc���-�g�b!����q+����_����2���i\�m�`\�����3l��Y
q���|��[4nn�C!na�/A�J��� �������$��X�M�^��l��,�g��L�nl��\
�Mb	f��8���Lpx,v�������'�.
UIB�]��R��z����"�p/��J~'�* ��VL�����
�<]P_����Qz��;B�2�\��BX���������5��0��y�8vcRW�d�@�a�H�Oi�T��b�k�����D��W�i��H���DP�7�|��a!�*8w��Mf��#Q`�o��.��7�;�y�px	+����E�0�U��;���>`��x�;�=�nm��R=��3�n�Z����
�|E��;\�
�2�Q�]D>�Am����V���q}���3y�T�&th��wwG
�j�h`:C�;aJ�VP�����]�����[H���V�-����s`��yg���GjS����������}�7\=A�@P�t���0��|�k>��F��
�u/��L�n��q0�(8y�%;7�%��V��������#�'��Eg���>c�h$���h}�1�J��`���>�|��M�$`�ZG=�l��
E��A���A+�������}n���
�d~��y���&g��Eg�������>�C%do��x�8l����?_�a�M�0��E!�������Xe�Z\����B�7�:��'��i������kq�q�e���R<!�Z=�����+f�Y���
�	R4��3>%����OZ�l����� F�p$�/�U���01�v�W|JDC��m���n2�
A*0[6f����i��i�����f3.������zg,�j���$���|����'����YG�OGI��6`���3��}��8��n+�lT�V��CMFC��
��������I�x�z$��O�[6U(����<�b��<i������Z%lUX���)����V�/CB�$����{�����&K�K��gl1��,���
���-V����� ��
�����(���(^��$�����(@2E^�U�h#���	���B{U~���b,��|������0(���j���	$k=u_�Pd��������n��}�����U�VU���@��[i��^�%T����K�I6��8���t<�~���)��H����0|3�H_�d:�!U��X�~uEv}�(cxP�����t8ed�����d}���1�����.�S��&&�T��]��sK������B�]����&�~.���jB�M�aHs���n�O
E�|R�]2�������������;2�;�������.�D���	��B��r����0�e:��:?_����r>.��H�C�;Z�������p��']	}Z�'7&\����a����!�����C�H�p����q}\�m��	�?��;B�;�|���m�M)d���b��w����N��W_������K{	cn����|1�|�0��U���t>��)���$^��H�iOq!����;!u�5�������k	�#������L�����GIhj�5��,�'��>��
FuT$k���x��z�qhd�19����_�{ ���^<��@�}���<U�-����D �c�2���I��r@W7Y[uB�q'R���R����I'${{V�w��q'�bx�Y����$g���N�b_�U|�[,�Lb�P(��0'b�1��@��tA������]*���	�?����w+�����F��A�cA��t?��b�O!�|�W^�|���|Q)����*���H)����!�r>*S1�:�B�G�mZ����7�;l>�b*6�w��
B��Q��WI�V�/����6 ����2��������D�8��=\�T�&��U����&�[�(��/��qb`�u
���D�8������C���a/}�l�_j�Mvoc�s	~��x��b"������Tub`!K2���Yo�_L~�*��,�E(q�����{��O����o�
�7��<���7�VB����:F���*���7����%������P}qg���M��t$���F��x��V���St��L�vW����P?F�'�[���'�(^�
�]�#��t*�f&.U���L�dVV���m&��=BjW)���V��%��
�p�MB5.~�%�Q��we�E|���"\�7����3h���(+M���_g�r����[�`�6�fO�l�[�!��P>n�C��6��X���F����
3pb����U�l�u��L�^Gl2����y,���E��������w�����
e�NI�w�������.�����!t6�+v �87&�qA4Wt4����oJ"|Sd�)�����N,�=�X"��MO���+z�i�&5����&�'���TE*�h-�@�oZ����F�����RiOVk�M�+����o�����Ek�MC��IiE�����U:���
nEo���|_
2��z��X�{���.�$R
+.��#�jJ�@��B6���EyU�{EG���b������eh;�y�*��d.EU���)<YW��rX	��0�]��EG.��4�WlXg1�,�u��$02�o��hy�0��W'���&��ZD��Hhq"��@$~\�a��p��	�aF"�'XC�� a�tKv |��yn����
����a���#����W���2��/P$���z9@
����
#��"R�F"Z����W����6e��L8<��R���\�W'���	H9��d��7�N�.L�y���F������;wf���,M���	��)5���$Y��/:�U��_Lbm��<'�q��?-L8��;&�S50KX��%�{���V����D��,Y��&����CW�,�V���C��aX�;Z�@��}Y�P;�jv"���5IfY�H�-��!��}d*D�����W���}��*Q�jQ_�*P^���y��\�C�y)��+�<�Pf]U�u5���^f^�2�����Qf^�2�j�YWUf]��W�"I������*R�U��+��~�Q�kRh���5It��T��(�i
���5$�����)����[���l�������������,�t�iq�_�s�~�M?F��O���_������������������>-�����w�������~���������y��xWDu���YnX;`�iY��dL��|1�q��`����$�a��5��XZ>��a<���*��!�i��w�0� 2W�G�a��^�<XO�W��G�E}pCl���W����
�I�|�A��lb��	���::�p���3Mg�
�����&c�7��,�����_�����0`C�g���rW���2&^?3aO@��'��-�@�k�[yZ�������3����Ydwd[���]A��������(�b���g1e02KPF 5���\����,�A;����z�G�R�H.�kb0�����~�X���2�����4�-"�N��y��222���hy�Q$E!%�-�Q���Cl�/�����z�����1L����Ebq���~���~�?��F�gf>������������d��%V����
�kluB�m"��&�D����O����4�?���F4�)G���C�1
1~0���V�W��x�Y�j����"��u�����5��oHl�G�g(��i��Dy�v
�a�
���%��\e�����P#�����F�M���F`���7*���4�"3�}�M���3����Q>��+?&o!����#����iZ�^���������T��o��<����WUO�n���4����6�q�G���i
��u��1!�&'V�T�A9����Z���`fO�J��}�����������K��c��Tf�MeB��f�(�	������!X���z;o<e��x���=T'B�r��t�`��F
#dS�>�wf$��V~2h_h�YC���h\�8jML������]E^�WT�"C�)S�}y$��������'�]��>�cd���p)_���3��3F&pG�v����	����x����,���.��<��f�'D,xI��FH3Eaf>�����V���������2��n$2>_�g�W�y��z�W�D����
k qO;8�����C���($�Q�1|�\etSg�X��
�{�$������X�D6 ���b��S�[m����va��L�awy�/����T������{���N��LL�0�.��}X���A��M�7�����AO-��9�;3�G�c��B��V���78G��HB.�H<��@����6(�YT��@���H��p�D����1�)��I�(v����=��?E2�KB3WO=��g:S+��Zf�b$P�*�&�=2���MOp-��3��TDf�N,�������j����-
���bw� A!+���4�E=���P;������L�T�M���e�Y�=�)�>�u���(�lj�{�������B�}	��`���*�(�%(#\F���@e'R�����`hJ�Md�������d+�Ti�X�c�BSDc����/�] N������D�����'y�_5�����t^�&D<����FF�W���H�� ����7��d|�/��u�p���jeR!�r��h8+����i���xC��������*��[�������D�:����)�e�o#���}�;b�N�-	�oJ^�*4��<�n��������P��2�DO�����F����oW�g}).��R����'�X#�d�w)���9�=1�iif�Y��Yk �4}�.p�k;�}^�����]�ol.�J<2H����4-{i��H�M�=d��8�x0���5zn�<����'8���f@?����Y���]�������LD�rOL��Z{+AVNtOR�����}����ow����OH�zt�#�����[�^f�������^!��s�W=2�O]#����A�x���N��k
*����Ir2}��=x_��Z%��#c8����6:��3�+�T�5#�BL�X��d*������9��1����Whs��@4f�*��H�:Z$&g�RL���u��g&k�a��Z{#cx���������rI{m����Oe������-m�1���A�kD�<�[�h�/�djb,_�V?x���u��a���L9Q���*Xc���M�/-�����3b�/�������s�@������8 �a�k�OO��O��[�#���cm>i��a�\Vn�@s�l��4|V�l��Z����92�����)����B��92�_G���>x6yJ�7�O���p������*��+<��@���D%^����='�bd�g�a���_z����yN��GK��G�$O*X���9�����j1p�E2��?y��b@��#���OHb>�Z��D�V.)a������w_,q9�>�zn�B�R~�o�t��F���dp�g&*�l��S�{�uGu�����Xu�f$�M��X�zn��x���1���K2�/qO��g(��Bp�p X(�@s�_!��*g ��37�N'����������WWb�J��,�k��p�t)Xw�;u�;S��e;6z��*����h�|�Yc����mV�;e���-"�eo`_S�b���9�)r��a���|31���\��g���rO���������}�[��#a����?���K����w"���m��",�?�RJ0:�aV�9��N�D�}�$���������v�7���w& �����9�m,LbT����ghb�I%(�`�Rs�(��Z�A���}O�x������9@���'��>�nK��	�i O��d��O�d[c���0�)���(�����'Oxiz��g�']�c�T���z�F��cN��j^�s����b���$Vj���G����[����>�"�;3.������ch6��_#�}g]/�"����[4��\����;Kj7�
z��0jp����T�LqD��7����42P�������>B�Qm�����Be�G>6J?���g�D�����|��'�E,���4�����/��i�5���0��(�U�;�7�?���K���42���W�rkN�T���0z����S����j8Y	��v�����qwV�����������;���{~gj���R��/F/]�l��N�A!(�~E!���23�_m+H�h�J�UG��3?
{�LH�,�&�>�G��$�����3�z��_��q�j���a_�v���M�H,�z���-��8�X��a�����u�e2�������st�[Ll��6���

A�i"��3�!{�<X��D����p��:�T������v���6��?x\�Q�!z��Kl�
��~CgD%������K�fQ�D�����i�Xpc��I|3����u��)1KPF�6pd��"�q���j z�a��M�g���' Z��;���A��0S�a,\_Z���]�^z:�z����%�4�
�0���XXB�p8i�������f���3������C��
Z��k%�����Y��h��Bg��Rq�����U4'�������[�}�����,QF���ZIW�VeLRbC=�p���M�pU��O"���C��#�el$zz	.�ODB3����D;PT0(�:����-SF�m`��>,�0����	�g�0���2xr 8c4�����0��`^v�J,����9_�����bG"�p����R�Q����0H�i�Y�M����O���j������[����X����P�u�=���E��o�49W
{c������K0� *�r+,Z���l���D�����f|/��kI	v�v�fN��X�6~��T|
J�c��;S,�4;�og����41��"������%oV����I�-����������� ���o�!)�[�6g0��d�\�f#��5cZ������K������	��I��YH��b@�`�y��@�A����f�������I�/��L��M�w(�Y�[�;��F��y�N�b��g�)6�2�82����F:��K%����U�<����C?>�Ua~��	��*�#����3#�����T�`��r���Av���\eX�p=��C����SUMW����8� ",=�3�K�<�DRUU!���Z�[1m��_��m��?[�����9v�$����rdF���8>UI�>���^�
G|_#�g��7.`�r�>#���A���"f	����S���ODB|j*k�����>^�����2��b�og�	�����B�q�g�/hh�1��}u���IS���YD@�
�eu��1��T���XfG�-��V���jt��w���O��Ju#`��kb���+?�����F�����Nk��������6�2�N�,�/�z0"��|��`=�X�������u��-#��Dc1�n�J3������{��
#���	-�����5?���~J,����3>���wC?�G+#����?���P���	k�����u�of��(��@Srm�u�+"���Rc����($P�����dg��d�-���is���(X��T��;%�-��^���Y�S��[N�����|��q0�q�T����m+�s��DH�Y(��B�w��
GR1?_Zlw�DT{��BP��UV�M��Kb	&n8!���K2��"m�o��^ 4��ScV|&������X���GV$��x:'�}�"�����m���0E�&�f�g��[�nl�z��L7�L��\�b_�p�d���~�:�rb��8�x'�;�(�7����|g.d/.����H���r���� &DG��\������~f*���^^:	�(����20�g��6��C��N,_��"6�C�7��U�C���'���##.��M����'bq�����T��8�3C=�8��b|>����/*��]�{:%Q��K�����7'v���� �.�-m@*.����PQ��`���Pb�X���.+�RM�z��v�o��oU�F�-�H9�i�r"8�(D�n=;�J�+��}�)���u�l�M����q�h��^1�;����Y�
����������(R�?I�b��Y
�~���Su��G|������4(52����G�0Tv��<�(��X�q�,
aH����.�9��8����-����I���U�4:����
lM5�_�n����/���f+/��b���& �o����p���,��(N�H�\�~Ba�T��v����tS^��v��
�;�$�!�d0[u#�%��YOf��cdC��+����^ta��+���p��X�.��+��=Ki���D�6(B�*!��Rb(m&@��2��8U�A���4��|��S�������~��i�w��O��v��&�f*��N"�vh2^}hZ:,1��K���Y��+���9�_x�zk}FL��B����bfJO����wN�OD���c�XzZJ]x)f&+oG�H�)���%�z����Gj)9��3�������,�z��I�	�5�t��f���vM8�L��
�%�~�BW_���9�z��$���"<����5�E����b��K)�����L�'U�`x��Q�������J�/�B��@�C_�e���2���n���9��/��z'��.m�{A�������%(�M���E���<Y����*��R����
��	G�=--&�^eq8�O���g� K�'/:BD(F�w���K00u����}2������2:�s+a�	�#���+f����r����91	$��MuTx��S����a�K8�������f�G��	��s�*L������/D4��@%��;Z�p[��#S�w�����#�"�47��.&|g���z��T@l��yE3�������cAGi�b����cf��IYa?.�E2��|H��232�Y(�r	��L�kds5����;P��(���������U63�HMs���SJdf*~d�1G���w��10�����V�>Ah�TVZzM\�����'0^	���>#~�t��Y`s�O���L����N[D��q
��U��LR���,�rh����<�0�L���7v;���D�y��TUL.�f PE��n��a�k���e1��>T�J�{2,��~Q�[/��rJ�B���`�����'[����M2tia��G�����%x���6�LD��'�ocD4se*v�x�X�mWB����9v����#S�y{�6	���K!Nmvu-�c��~Q4��;Sw�e��2����5k��"������G~��B�q�h����h����<�������tx��9z8� gCs<�}��~��a���0����y+����Q�$B>,I���x����,A��Q�X�(�U�%�9���|1<���`Q�����V@�7������Z��8Kx��PB��}����@T�<\��y��Q���0uy��6��=�x�E�A�JG�u-����7�E����nqL)�$��Fn����?���;�3?_L��rE{��w**��9��s2�.�IP�:���VX�p�,�J93��^���)�kfb�����r�������i�?1c}�q_�<N.��[��Wy��0��z�,���S�g=�Wp_r~u���X���Y
^��T]-���%S6�(dtg��F��r���23f�"�o`�sK��[C��J�� x��
?2����%��#y�I�����1����o.��R�<�x#��l�|�gnf���2�v������&��A
��\�'�;��"f�l��G�L�cU���������!�����K��|��@�/��5�,Z`��[���a�kf�����+W��j^�����������kXX� X3Sq�}U������A�����BF�=����x��+C����JO�� /�G���`�����B�G����,T���%���;��>�r��Z��l|<X916Z���}�;*�"��w��U�9tZ�{�
�v
��X�0}���C�r����"��t�`<H�
�<��tn8���O�{v41�G�����Y��?{���������} ����1x������K�M��6��$��@O���0���\60���f+�����;�@@���|�b�m�~f��5�#��:�8�������5����b�8Y�~�O�l^��v��qY&�%�z�R��`���7�&l��V�$��3�I��[��0tk�?2P��B�~���pf��V�+e;����{�
1��M-j��*��2��D�*�.M�g�]�i#�S9��$	j����+X���Ca)��R2�"��?L��,�n�����|�rdjp���#�7��Om�����3�|pF�q&vi&>YY��{J��Ywi�������y����[[�J�bPa��<<�������IU��9 MU0��cr{`�.�zXP�[��9�m��E��*���z�z�'P�:l����d�=��f*}���)E�`-{>�H�h_s�OC����a]�05�������+���������Km��b��)��bh�0��!����S'��D�����as�R�j�������w�X8sb�C*�Z��r7����[@��_7��*�B�M�gV ���3U����:���<3�(9T���O����4�4O���}Z�0>������(qA����L��*�#m�m���r�|�_�!u��m��!?(RC�_�!�95���?xj�������?~��_��������_������'LL�_����g�T��z�V����Q���p���oq��\=z�zx*�Hm���'���n#��k���� O�9�T�X�B����=K���	�_���l�}��w�W����17m�2��Q�6��X����<O����&������%�/��Lbn{2��M������A�u`zL�'v�~1H�w��������W6`C����{�j��$����8�=��*�+��L��=���t:�p(��@4����r�~�:�5Q�|��������U�O
[����<W��FP���w������J��'O�^)�L.������a$P"E�A�6��"���_�/���1��f�u���b#\]��5_?3h���`�U��g_[�� �������A�>51�b�����(F���Ff�e���f���{�-�����R~��k��k�^��q�th7l�)�o��5Ya������Z��k����I�C�U��0��u������ ��@�9\���;��������|�`�������`-��&��������})��L�����|mW@��~#�����$�o��q8�@�?�������R��C��"����%�g�e���������W^\���l��G��G����y�����h����������Jp���\
�
�e�1�vL���,����'�Z�Pv�'�0���NR#h3��@.{��vD�2������Af��v���*����cl �����	I�*��9G96=�l	U
D@W�7#����
|"��7�V%82�0��j�M�K�h�������Id��S��kcT���c��d:�0�/e�%(bq��Z���N��R�rf���|���?�u�-�%u ���hh��A
�|��P�!Xl��U�g�M�P����wf�w��~���dm���Zq+4��@r��V��4G
�����H�xa;W�#a�����t���������z��od����v`�����od<�k����k���B��~
T��o �����I���F&R�o�O���[�?�w����kf7
.�fz�zE,����[B���=��:�<1�Y������wbc���	p����2r��K;C�B�N����^��BV����3c��@-�/�G�������[?���������M��-����NR�j�d�����n=P���l��#`���s��XO;���k�b|�5������;�:c��g��I������H�E����3e�0�}���mS���#�A��9�_4O�0?1&�R�����bd�bU�}���c�D/�["I��w�������T�������h�0�0�;��^���/hp��1�8�LZ�
��i��O�f����`Vl:�+x2�i��[jU�*1[�OP�S�5|�fF�2�����S��bF^N�Pi� ��Z-"��A�}4��������O�~�Ol��#��M@��K��D�
\�8Q.�9n��������'OC�����mK�S�-�/��MwD�:=�o����������|�!��j��Tz���;aC>w$>��1��h1�i��E�����0�@0#W�%)�������@�Z�m������bb8��U)w
��v{ ��;�������a�.��cMAl+���_D����p����5'p_�BK��)X����x�C��[��=��<�,;��6�������-w�b +/�H ��C�6�7~���H �]/���+u����Sn�����G��������:,�)n����RV����mX��dIG�/�6�X*PQIc��J��%u��I?S!�g���#�������l���<~}�I�M�~��2��/@�EL^�)���3c�����U��J	�t�����;S��v�_J,�eb�YY�tK&�'�*�luEB�����T�>$��w6�r�U�~���r�_^��Tl&����A�$���������<���A�WL���C{v�<�~1�������%/oQ��T@�'���-3�T
['B�|���N��K��X����-�9�=���7JE��g�k
��9��������Q��T�d����X�>�tz��B�f��1�)��6	Z)u�U$Sj�j�2���7��Z��A6>V9Sw���2t�?%CG�����2���y���!}d�<��_���eL|�F��Lf	
�����Wp~��$f���R��3��\A���~EB��L���:�w��X��'Z��Z�Q��*���yH�kN�5�q���*���b�r����#�����������m��G�S���V����g��.����j���G���^*|�TWQ?n�G(u����Z����db'|���2y#�@Am@�J��k�
��i����b����dY��[m�S��I�.m���i��8a�T�B��=l�iFe����Op�&��i�/��I#B���bN��EC��?�/�����+�=�m$�X���~�WnJ\?R�G��+.-d��2
)�E]f����3J���Pn!�L\?0���}�J�L��^�3�w��SHxx��1�b�S��av"����'�e��<{X�[2���:>"����`6���	>�,H�8���n�x�W��_9>�Fb"�r��%��2�B��
����^�����P��f����=1D_)�0?��3�I��~f�BV���X��H��=�F���1�moaRNfa�v-�k�<Eed�S�����U����� L��y`��������'R`6%���[$3�fRfF�)me`�G�n��w&�����[�L�L���)3��
�f�aK�g��>t�����QZV�����V|��,'��ny'� e�1�p�!}�-Y\�����X�����\�������+�s#s��N�-G�fy|���'����/��j������&�0K�����=Mb	���+UQb���0��:��Am��<o�Q�sxr�����c��������{��"��ko�����X�nP^���@�O���ssf�r�9�v�N�� ���>J>��G?�`df��hv�-Q%�8R�Xf��1���Bg<| 
��7��y�t�vfe-o���_��8�o�
����������0HEH?����-Uja�,��(���7W�w���BV���HAa��W�2��w��7��d%DH���}�@���y��{���A�~�f�w��a�e�GNo�_�U������T<w��������&^T/#�}khK������k���p�Q!S��.���u���o[�P{2���=��,$.b��m�p�
��g�����K|^3
��^�r��V+�&���^�o���1}��P�������p�/\����+������#P��������(|�������1���f�0'VOV=�g���R�i��)B0��=��Gu��A[X�jL���3@��-�o>xD6��Y��|}S6�!���g�o���s�t����N]p,��K
���W��`?���a��3��!��1_;Y��)�e������}�7G��Qe��e�Q�B��57�o�f��*�B�d�����h$ �r=��ls{n���z�M�L���G;<_%�d<�$x/�����@����)���n���h�Nf�q���?�_nO�7ygfA��j����3-�
:1������a��9�������s�8���?f)�������,����XoQ}�*��x�myml;2hl7������r���%�}u�V��I�,v�8�q����K:k��w�����|�*�v�e�e�#�����<�jol�tL���6��)g,0c�<	�m�d�;����������&�U�-����12xB.��<�f���E����'���n����;��ueV�
���������'��M���}k+�f���v�}s�7�7+�����e ��d��������#��c�
�f����^������=Ov82���)���{\}���Kr
��|�����u�v�(G9�%`_���_8SJL�ox���Qj�G�������2�U���YH\������i�n~0�~���u6�}����c��>�]��m����c]>���������1]���2`��d�y0/�}�LX.?m�����}
���v��e�1��q�\�u�/�Yp]����tyj��\^�Z#��W.���1\~���5�a����m�|�JX.C���y9%J9},U^*W�*�D�*�n�*gr�j7�W���c�W��U|\\*W�2���}(U�J���Q.���=\����Pp�z�N������}��s�>_�\���oS�?6R�60}�Q���E�j�)&,]�{�5��}Pj�EL�A��������
%�7���Z�D�� �}��m�M���(s�b@�������B��z��A���c����C��<��fty\O�>(���}��y=�����zh�A���s������}��y}��oC���tz^_��K�������C�j=�_S�����6_?��M=?h��~�����9F�m
]��I���(t��������?���kBW�`L��l	]��)���$t���������?���'+BW�`D��l]��	��� tu2 \3;�'��7
��Z�mq�ni@��j2�W���D\-J<
��:��Oe�C��T��b(D^����vO������b(D^/C1 ��P���e��oS�#�������5�>�D�J�[��������Ec���W�6`,)��B��q�*�OLcm��(��/ �6~��U����a��`��a>;�-.���G���B�J�43x�%��
,����
|w"���ioap�����R��x��>��r���9��O6+.1��1	8;�90$��T�Rf^������VL&=�'MG�bJ���
��[9;+���"E>(�Mv>[���Z���P"���"�����s��E@�����?.J���\��L���cSv�,�#c�Z	o{:0��<���%(#=�����w��������0�����,�D.p��$�T�X6�q���3����/�$\����c����(k'	�6k|H���K�3�����]*S�J�^��`f����f�K:������-�$>1!�y�"��f�9��S�G�b(�]i�����pQ���r
C�o���O��P�����k8^Q({	�D�����:��~B���g;�;D���8I����M�f�Z�F����wZ�/g0~x����{���uM�CP�]_Z����Z������iRj�Bi������R�NA�;`j�-��������-0�u{V�v�@m���6K����(}
9��R�[��K���X��N��W��������W�z���/���	��&D�`{���3��������{Hxe����kr��5b�*���`�v�_���"R?_�a�W����^�u"bq����g��G��gwQ����^62�-?Q���-�����wC��\G��G�J+T�I��`6����/
`~��G���A}Z���R$�7�(�~83��*���-�������'����y�kf���=����D�4�6�)0"� B���o����/)�����Q�%P�o���S�����a�b����2Q3F���ke����~����|��b48xk������$nX�7�*i��6X��U���_��\������d��a���A��}�B�j;'�v�2��vJ
�.NFq
����_]o����.�9���`����_LT�0�r����Q������q���)�oB�53�R������f&Z�`T��(�L+G��+,��^K}j���������`���X*��#����f#�m�f(�W������v�||c��i���b���S���{*����aE�����Q����:�~2MLm���N�����z[h ��D.b��
M�/���Ga{7�0J�o���n��I�_D��{��v���rC�(xo���>Cc�����f��9�%<���_�P�>�#"$Uo���a�"�#9K�������	ozD�v�,������������C����'~p���������c��}�d��%(����=�|�}F)�1�pu>w�?���M_�-L������|��DQ��C[hg&����M�[E�N
� \t�*E�AIh����[s<��3����[�'Bp�(4������^��\����J���0����t���n"1����I
��������8v9�_��MG����;F�.�MW��I�{=50K����9�NQ�f�Nu"�������b0.����+1�[�wf\����M]���-�P6��A�o�M�p�|g���zEr�7���r����4�3���&�l��-9W�ZqY�o���V
��o�j���d"4�Q�me�P��[�pbl��kg����q"�9������
�xao��B5�4���|gB����8��B�}e���q��A1KP������������wEH�����x�+������C�D���@<]�1!q�!y
�K;BV
�F�i�L�T`d�������z�������?����-�o!(�����Ys�`L]W�cE��n�[����o��bP���IgF	}��6��
:�PRz�(�D��o����G��G�{��c���l�#A��1�X��q���U��1��`n�?V� ��������}�4*���.+D;�������y4�����>�)W��|��\��<jq�U���!�F�����x�`"8��J�R����H3�O]� �=��["�Lq��U����Z��	�� ����t���r�hg��%�����"W.�s��3>4��v��'��0�~��30��o��4b���.Dw�W������L}F����������-��Isb��`_����<d����l;�
�W\�a�f*.�{�1������f^���w,�N�c����7�E	��������X��������W�"�����u�~���`��-&�a�#����_�0ks0�_zS�fQ;���m�T���
�>	��L��9VR�����)C~
L���o�uY9���0��������a���X�:d���eb����o�I	}�l$"
G������@7%�`J��\(�.�F��"�C��b�F�&���:��;Slr.�B1����xa��n��>��f��@zm��7F�}g�H�G������U���:��#��o����9�Ws/Yg\��{'&�t03�b	�������+�Bj��1�R�������g���w!��=DA��L��f��}�����������Q~R)�UbG��x��S�N����:�.�J���wf>85�B���Y&�����E�������&^\�N"�������H�:���O��#a�+��{��I*Dj����7�
B%LDW�����T���1,h:��������C'T�������IR�#Utt����g�>�~��*	%<3���q�%��D���J�#tU���X�T��^��!#mO���u�D�R)xT��XB������W��3�0����LW��G��s[�$*N�[N4�?�)����i��\Y@`E�%�c5Up<����1�o=�D�%������G�����#	�����%��Ib)7�����&�nk3�����&�
M�t�_5�y1KPF`����3�D<P���d=��-K�Z��n!���D1���,A�[�6<��/�L��i�r�*���zI���Ib�����?��f)|�������Zy�������
�:�;���q��k�vk���N42�dT�G���#6d�����,8~�Y��l����^^Q��<(
 � �����C�(���� ]��s,��@~fB�C��~p=��	GQr�}�t��%(�1
K�A�jP��*8�!�����3x[�j�S��1�W57i�9Z�B8�����>.O����hGn��������a�<x;��54��,Eb�z}����[RKs�R?B0�a;�A-���**�?	�3�H����K�u��I��cf�x��N;��Q��!?��'��%7�����M��I�;�'"`��qg6����C�j����i��������v�m����sT������G�id,����z�������o�z���9������Saj����/��l���@J�%����bj �SU�@,�<U#�`n2	FN��#,��`�7.1OD�w��M;���%,q�G�J36$	��������EY�nk����)a�9��.mU�C�{��Ym��X����f(����&�ZO��	��R�H�"�>�%v�����'����`�d��_n����b�P��7��v�_D�)_1����A�����/�?cd*������?(S�N����|��k���6�^��SS3��SS�2<QN85E"��_UK<�Z���t�c�o�8�Lb}������`
�=��#��h�>5�p����G�vrfjb��f���1;51�5CeOt���+�ol��������G�qmb����Og��"rg�l"�v�%P��45��I��k���gB�#�y:F`
[T#6������J-&��/�p�������	��wS�J��T�3M_LO=:F��Sd���p�������H���|�&�������h����T#���z�n�:�	��1|�[S��'�o�O)���O����
f#j�cc������@Jx��8�*;q�STN9�r��I,��&���ob������9���b�������3n[�5Z��@����>���kxq�{Q�_��&���Tz�d��JRa�9�7�t�9G�����-L��<�0�>����
%�nb� ��N��I-��}QB���Xy�0t�Scixf���u��0�F	���(�%�>P�o�d��^~	��}	�G!���FL�6���p���qa�UL�ILZ~�����b�����F^=P�`4�E�0�/*q�u�����`+����O��@����!83,�b��Oa���������/rn34���������,F�4�S9��yd�
_��L��-8I`:-���w�C�W��`19\o����'?�0�\�.E���/�Up���\.Ze������g�R���s`���x��{�v��Jm+�%
�u�N���[���m ��k#�T�f�X�y�����8#���V<�)b��M��J�}���N-�����/.��<�{�|r�Js�/h~���Hp���%���.2��[b�?:T2�|����������'�Y���>q��p�3�-�C9+:S��:���&��_eK����'d��o��Q�g��6_k=�E����X8��r�7��PxUd|e_�L������w��z<|���o�A�����}C�]�0��%�s��B4��V)�F�S��f~�n����kvd#)����g�|^y��S�s|����ZG
��9�g�L�x�-"_������Y6�j?�2ZrvyN��Q��'��Y�����T�\�mP��9(�wy�����)�aBF���p<���S3HHh��>�6E*���'�%�s�m�$6����
�"�$_<:��#"���Y��7�m3���D����!�gX#�5:06��>�M��`#(�L�R�~q$|�+����y���]�3�W��P�)��s{���A�	�X1z
���Q�l�Z�u�6�]�@���j�t�����E9SD�>�xg�J�`@)��#_���w&M��#����������)5jeZ���K����R�/7�xZTT0����'�^y?��B�\��yN_F��������j%���$�vl��}c�6�g�Ll��)o�f������A�}#��]�����)V��"��m�����CT=��(f���[m��h��6��_�)#~���@nm�K"U��*}�@k��0����:5�r�}Z ������	l�m{b6>z%�cFj ������u�W��m��G��G�O�X�k��l����x���6_T!h&��d�b�f��U��:32�~�#M-r�ff>x���F��]��5P��3�]���%�����7d`��_���E��
�� ����RY��	QE���M��9�Z�����K�&��������M\����b���T��_&&!�t(#�����4�^|]L,��_�)�Lq�
3M���/h����HT
D�:����w�����E�� p��>�p��&U1Vz�H�u��������v�4��=_������"c����g�a����+E����K������M#t���\,|{�y������T����&����~�Z�K	EeL�K5:	�)�S�O��5%:Q=u��:}�B���d6}�yR��&
68��9�a��R5R ��+�y'�H,�|����fo�i�S8g��}����(7�D| �^������K�=�����ss,���gLJ�>��l�V�Q��� ��\)���b���Xb�����q6��*qv\����'r"��5~T`�:��������e���+��������4��
�se-Tj (�2��.u�|q,�Y�m�5y2���7�?R��������(l���!��w���^K?A�t���@�R���8�F��1Q P������"�������(v���}z*P*��|Qj��*~d\��c.�U��m���N����w��
�k�J^,(
�S���7�e�	Z6��&����Q�U��3��x��/�-u&&
N&!vb���-1I��s��)���E{��5Gj�Je]s}j
|s�a��iJC���MT!.u���]���^�80zrD�/�06R �)�g�<����&j\�6"f�F�D�r\k�_*��#�'�~��*z���>��M������T�s���j��e��A/�_q��*�40�EM�]j��u���S��D9x4g9I�~�o[�����&��69N
q�`'�D����}�b�<�U��`z�_	�� C<Z�z���f����f�5�?��J��������%j�
�T^�t]SD�3'�I-��|;�~�)Z���������y_�R�L��qP�
����6alx>��(J3�J��ctN3���U���4���)��z�tTI�J���KXj��|	�*A���=�!�����0���#�68Nm�H�}gH�h�����������a������0�~�+���PZ�M���.]��w@������������7\2Q�1��V��/�m��?�{6��T'��MN��-8����D8��?`/�
M����@2���������0B�'����n11�jO
{�0��(���dZX����*�>�u���y�6w!Pq{q!�x����i$6wHTB��.D�a5
�����0b=�0��)&�Q5��O��������0�fE:v��\��!fs�����Go��0�Q�q\���1��{(�����K�A���$n������~�
$��:�aE�zq"�x�(�Fh����P��@�6w����B]�N�S�8R[n'������'��
�7������F7��������}���WcT'"�LN����r"*5� ��]������Q�`�������h8^*4���0j+E;���\��q����*qs�6�����(��9�Z�;c`��/jc��VF�Zs?����|�B����Z� D�<l��:�t��}��F�k��'�^m�[C�V����nK���cP��WQFQ���
Hg��y��7���{�
����)��H��P��_��9V��vhi^1�
�*�#��`�������X������A6#�xs�P���&����%�����V
L������3c���^�Gg�~����`	�~{�����?���d/?�9�f�_!��J��%�{������q��(��z���ax�c*%��v>�">�;�[��?��D��m�����K��W�����-����������-�A=\�:b�0���
C��_X�_����S�`�82�e$\��g���2}d�5=;�����[}M;:r<���#'R
#�1���0=:s�9�B*����Q��g�fd;E�?��`�qs�K�l�������'`�%3qwY��u���+�1?������9�d��r-L�_�F��	Saz��F3�R%
�3�w!��p�X��
�f��������Y��	z~�M[����!���@��,�2�XTZ2+U��WCy���9[�9ZA�T�M.�UiY4��mh���3��\]����;�GR��VH�i����x)'����|����y��B��]}�A�(J-�_1y�����*x�P)Y����h7�0�ZK"ly�P)5��"m8�y�:�7|�����.yp��/����<:���@�5��}��	d��Y��b���j��tIg�4�&�&L�U�z����3�(�����4���
�������T����<Q�����\�x�o�t5���Xk5�+��`��f���#��Tp!d�pX	K�pj���vw�����_�e{|����[�'
��M��O������Uy���T��Y�JR��M;��D��ic(�A�N��N�Hu:2������K��R>�HO
��d��HOu<�Q�U:0�lj��0E��T!\�6U
���RU�	S>tb�>J7R 8X�jmH^4�@�`/�I�6�i]�F��2��B�1�>$jb�B�&m{�*�I'
����K���hRrE�6e���S�T�2�4��v�s�&���\�.j����t�@ �VTDl�I�o��I�:�5�7��n�5=��E�Nk�,J1�o�E�~q$�R�cM��~Q���)��q�k����f�u]�t��*���M�:���\����T��D��=:M�o��Y��u=��xP������r�qzP���V���*��������r8f��c:���&b��>�LF��:Qb��2�qZN�3�D9�Sfm�f��2f�bYe���b�����r�$�N�g*(�@���@9�����s%��Z(|7�%�=(�/	<���A]}S��/��/�[�')�T�&��*�T���G��~1�Cq�.��3�P�~��B��e���*�I7
�7�+���
�s�C.�5,�s�/�W�Q&��S�W'�/��Q�W�� �aV&�n�4���� tp��X*r���E�xRFa/��_\%���Yk<)Q��B'�@��~xl��
O��
yR�L�7���#&��I�
O�0w������0��Gd�p^����z��B�vV���=F?���� �>���<1	=Q�GaT�K=�_L8Q��/i\|(k���}i�����_��P(�S|(���,V������A����W�t�Sy����Y������@p���8���|st��q&�1�#�;2L�S��t>F����9BX��7�
��X�����X�P�ck�@�9�k�D��w��������9O����4e�?i�~S ��W7�����'�k$�E3ps#��%�4��X��Oc��������w��i�����T�d��}�q�Q�pC�U�!�-AG
��=#��[r�����#g2y�(
z�0�m���Fg�&�����&3sm�T����������j�~���9���s������f���?3*:R��~^�R�*�"�[�BW��+��.}���������	���S7�����^i����r����Y�2�����L�/k���d�����9d��&d����5�=0<���Y8�����X��w7�D������X	����",k�.o6�F4��"��7��q	��f��\,8K2	'�'YQbS�@A��\	�9�t�Wu��s>3�����9��	����m�>�-�e
�(��=�����L�	�+�����z�^x�Q��7�^8u�����������y�N8�w�������@��+hE��������J������>8I������	�n����y����Q@�����6�X��9%�p�s}p�������Doz_}�����>��y��wy������w���n�d����V��s�*�A ,���Y%�v}U�����tc�P
�X]���$cM�}��
7���tH��]���D��/���(�uBx�V�n~C=`2��w�3���:�`�6ox����k1W�TS�����l��c���S*����\e�Y��j��>d����g�>dB	\���� jgmF��4��|P��JV�!
���>U�6G��Z)�_:��i�V�#B������7���.d�	}mmI����8���D�=}���D�V��	����z�*Zm�� f�� M�Zm~H~�51f����G���j1E$D�L�������N��|����TZm�H����w�\]�J�������z���6?��jw����JV�=�c�+����DAV�����^f6=/�2��
�
`�N'�rvV~�������#��u?����8�l P+7!vv:����	��R}�l'K���[�j�C���C
,�9_D�rnH��
k�=����l}^���Ca������-�����y�.GC��*�����u�|]�H�U������!�u	(������=�woWI=�2���i�UK:�F�y�	�UO7�Z�q5R��L4�Ni��T	g��US~U�r��Tq������2�N�I���knB�GI�W�?���2)q2#��5ea�<Z�}���A��J^������������E�F��g��o�ui��?���~���mz����~|/nvA����ite9ev�y�������?��?��������o�)���������.��D���ED�V��o�=V��8��rp`+4k���%}!d��,(Q"O=���I	��q���<x���Ln�8y���},�7C�7��OQ�������7"�d�E��,":wf��_B������ol2m��8���K�'�J�w�1I����05E��2f	�N$PjL� b^������������i���~���i�u"21��D��|	���JDk�V�]J5��8�0�gIJ0��/�f��) ��������l��D�i	�t��o����ru=�=C[}�/�1���
�<�(�^%���p3	IBC�����62y�k��'��I���^�-�Q���i0�����
���f;$�\%C��l�j��hF�
3U�?�-���E���7�v~HHh�jY"�'�%�x��d�m�
�	n���v��{p���9�[n�����Sg;�b�f�%��?�@����	�Z&��4G�c�^]��1�3�,u�H�	O{�/�e��]Rt[�HQ���E��N��w�,s�S)3�z� Y������6Y�'~QXSp�xw"��S5��B��<�C$2��D����������H���Un���.e�n���E&"z�nj�/(hN��� �v,=}��3<�D���G�^�i"��h#L';ne����4G��:EKgN�����������_[~���x��n����o@����}0Mz,�X�\$�rWe��f��h�����`
c���DD���);�����s8���w�i��	Ms�[&��=y���>0����D��c2=_���.r��eDq2�H6uY��
\�m���v%���2�O�@�[�U���7��	�Q�ky����lyf�)�_G�/��� ��'�'�s��f;��Y���q�8��&�Ps]���r.��h����v�cUW�H����D��]��H=Aj`;�k}_	?X@(L���:j�4yV%HC�?
@|'��V��F7}��sA$C��I��#����Cq������K!�����g�GO;vW&"��<�7F�S�(��m��-t��������H���;x������4��L��������s!�Md{�$��F�2!�q���|z:U�9��Q��}�HS�g���M@S�g��3���� �,��Q���U� ��r���dP0�����w.���I���8�q���1�ad���O�Q��V����=����O0/�c9f"Z�z�6�M�����D�r���-_�-��=lD�c�%Zb}��iX�������g.9�u"�B�i�=9������{/�J�>��cG��HH?�����Ev�(�7�4G�F���G.dT,a'�Y=��C��	D�u���l��6.�ek���\}��CD��������S��+^��E�W�{R�������4�`0"��p@�B���md)���&�H�r���gI���}�=.������*�1�'"^���	��DX�Md��g��U� O~��_s�_��u����Uh��qEI[y�����U�	���f���v,o��ab1�P#1x\�W_����y���U���g=�
�Y�U�����wG{{S
:���A����e�������5�����Dc	������Do�P>��k�62l\���WI��k����f���D�� R>tyE��.z��
����k��lT����� �R��7�����3}��^L[�g���H��X)H��@�rO$k�	g@�����>b���&����7h8��0��7��2����F�����n��G�+ingXs�cWh%*�<Gv�G6f)�_�iCM�!(������vR�H���<qRf����G�D��S�G�`�w��/pR#���ch�E�o�R�C�����LD�6�����{s�I�S�L�P�5�c��LN����+9�<�g����XA�s��k�oF`���d-�J�g]��Fm(�L��.��rd3������[�K8�m$�	mj"C��EoW1)%����$��1��� ��%�:^~��8��h"��mDo��u|��iW��U�"W��^g���Oo�[Z��`>9|]|�*��g��.4�������������2w��3kU�����3�V{V2��'vaiZ������J��G������Vy^�)�[�!}Z�jOf�4�i�R������nIMT����w������+�/�^U6��=��6����S�Q{0,[����C
��v����"���'��_ti9r��[�	����,��#�=�� �������6YbvR�H�������qo�'q ��@cF��E�*|f����^>8e��[���g����1����*h�W�����h��p~k"���������XOK���$�3�=,�R8�M�b.��q/e����I3�8�[Vo����}�����L-�*0y#T��::�����j��[���J�<�&*y�6j��B9���p#�����6��e��6�������`O�778����Hq����"���H4�s�>���u��.NV ����o[�e)b��t�u"\[�j�8@�&w��Jq����"��z�|�0X\�'a��h|+���f�u�,��w�V���n9�!��GMLh���#w��0�`6aoVs�Q�K5�H���my[X�J����J���L��tY-�����M����u}\���hT5�6�$��@{���f"z���.�����"���.��z=��&i���q\g�����
�PIh����
/B����e?��]'����M�,�}��Z��@%�g�(��Q����<�~��h��:ka�-�����2PA�����;���4!������z�MQ�|��f����;�m��.Rr���2�G�m��Dl!�,M�
Br-��>�'v�4#�U�L����}c=���F��eW&�t������ov�v��7=�5-M������ZY���1������h-I7'.w��@�aG&h�r�[g
%wC���4T�=<O�,��������M�hm'Z�P?/�m`�M�<3I���=�����d`]�Zf����n���	��
�4�,S-z���A�;����h'7��dH�Q3�^�����JAD���i]Y{X������o�$]��������q��:$�n=��ED_1�6F��m�X�����
��S��{ohl�������:��x'������Aj��dU"���[���
�
ib�>|��3��zC#��s��@S�u7����"_�'&������$���7Y�>m�d�Ph0<J b�&�-`H���e�&����3}�	:v1�s�����yD������W rp��O��I�����\2=�D`�>��m
)DN�B������Xj"��=cs{��r�������~e��lS����8Gi����Z!�j��|y����^���~[��5: ���Q�Q��y��D�R|A�����2w�t%c���
�O��O����_�Z��5^��[�7��+�a��q��@NZ���bS�����U� ���~^d \Z�l�DEpzm�m��[�n��xQ3h�5���!J�+vC&�&�p�[%���dx%"'n��S���V����b��M�����������������'u�����q�?~�9M�1
�������v��T���~F
�����"}�6N�!�%N ��D�&c��p�	G^d�fIV|��
��-O:��=RL��G�	�}Zs�S`&���jGM���@�E�
4��[�@���>�(����F(R�"��(�D���e]��qr�'���,��ep�s���|���E��+�=�h�������{]�}�5��U���u�d��7[l������N���>������2-��n���"��OH�1���sMV
���c��G:�P�5���!�1V��<�iFxE�W��������)~��9���N;*k��8��Et��^m���M�,\��Z��e�7;�FH-��EK�&H���}^$k���^O��$���s�)/_�F!�3��{E�:|���y���#�;���O!�/�DS{�7��{C��$��U��Jn����[;��0 u\%�1���1���5g_��!��p���$�����c9vs��CA<m2�S��4G�T@�-�������?>>���������`�qP��&pJ�^L�AG��(y��8V���������������"���/o~,����K�������o�s��a����Q4���4d�vy0�����o����������n���������$�	�X#MW�	@%r��%T��{�D�������:Q�J��R��O���D~�3MS�)Vm/����_R@������#
���?@�5��(l��&iC�St�D��%)��5��
 ^Q�L
��H�4���1p������Q��	>-�����\Y�Zb"_+��$L��*f�f]���^��I#]��q���5�p�����4������H�R�-v���	���(�9e6�q���'����~��$��F���8�2�P�J"W>�}r���o���:���P���E�-5��	��A���t;�^"#��2���^F1D�L$}�c��]��@�ps:t(m�y��~�o
i�)��������-������B`�t����E/�@��3z�DZ�	�L�S������_�3��;f���g!�x�N��N�@��snn��L�H��oX1$-V�~��-%5^"U��p�����Zf���"H��?�3S��i����7�j���o2zM�IY��q��S������Hx:���'��~�6
G���X+����q��6�1LQ��du'n6�sh�����e����e��(��E��
���Y��F���P���U����>����',��w����Z���.�}.f>	\<�]�OB'�	�.�����>�JA��4�����DR=������/8�R&���>WL
�q�p&Y�QC����$H��IS�r��biN�/\G�}����K��;<����??3�-�c0a�i�1��-lQ�F��4���8�R��!�M�������J����
��_r<��7���L��O����'��Tba�����-�&i�����?����y�wH��?���p����43A4h��r�l%���p����+��'��	fHSm��5'��KG%���g�����xaC��S�!�����.7�D����|�`��%B��A"��Rhu�
��N��q�NU&�vI����P6�o,e��q�'g���M���;y���3�P_3
�����u�g�O|~�EB�n8�@QK���V�I�/\�v���E�f�r��LR�f�F��S��2�t[���N�����J"�6:	�+#��4G����_�InO�����P�{���L@����.�X-"����d0�������7i�����D�
�h�C����D���)���%���\z�Q!��Hd|J%"��d�����U�#o�^��(H��*�*��}����:M"V�P���������Q0
l���]K>������zA��6�?!i��mp��Y�a�O��, ��\�n�A2�zt>�2�OPm����t�&B�S�@�u�,"�
^f�2kti�g�^��5�������D�e�zY��c+\�c�����t��N7tJ�XN��u[� ��a[ud���q2)z��@��e�~��S�cT��zq���N��c��6.��b�?�����d����k�Zo��� �I�7����v1�3}�	.��N���jq��ylq���U�M������`����D��+��M�����;�Iw�"�af�&6��$���hwU��K�|���I���a������U��$1�����N���o��cW'�,Q	Ak�D���j������V<�'����o����S�������x�=���?D��0���y�"��7��-�*�G�j�.@]2�K�4�M'��a�I���W��j�sh�
��IYbVic T�fG�(cC�Z������TK���h=������P����k����g3�1n*�S���t�+2�Fg{jgCug���u��T�����}X���������k���3������v�@�����+��d���`O{����
5pqnx9�;���Bh,A���}���LR>]X�\�]R3)�f��[�eTB?�8r^[#6�S[(c�D�kU��L��)e]��b�����@��5_e�����H����X������$.n`������#��������A��H��������m��B�������Y�����+ ]�iV|��Et�Cl�)��l�LD^�/��V���1U#��~3��D���6v�w�{����H��r�;
��<|r��EGX�f���/���b�F,n���X��G?�&���"��+8��sE,����/��G��j���_ToK�a8-,��r"�nh
�wotU���}�gt������;s��#���lmz��#��]���Z��gz��F����\Sb#Lq���[���>����f9��`9
�u��L�6���W#S[|<�z��q��L��	��C��w;9��9
�c��6l~"Y����eo"j���7l?������uL�ot���yipM�|���R��\��qm��Xu���d7��������;������icu�=������K�T:��{&�*U�=��jnQ���(@��2�����'q�:��M��p���i���L�+���p\}��`sA3�s�V��5��u�n������-�k��M�im�y��%b$�E�Dc���.�	�]�"1y��`�@m��\�D�I�Q��B�ak�*ip��I�`�
`%����t��h�l�>XP�������/I�_��"���/o	J �)���y$�UMg�|R�&�ph�c�N������8���
*c��m����g�Or��F��O?h�������y�ZZ���2���g!��w�+l^lv|���fG�+w���O�-�g-%�l����� 
P��S�t,Fe3cXW��3WQ��1�<=�W�waU�e�CL$*���d�������N}�G�8i��-VI�t�:�U��S4T�����i�I)�a���������Bh�V�����p&����f���z`�3#����	�a�m=�c��y����i�����Z%�1�S��	��N$k��G��
#YJ>)eX���H�}��M�DZ��������D�����o>���qX�@}����#�_����#���5%�T��G!�����9h�����}
_]��h��h���h�����G��'\�j�z��5����+$��ux�@��:������W^����.���=���'��WV������?F
��(�0�������3@�����OoW��X���Ztt>�k@�d��'kL�3�!�RK�W���~^-�p�����O�6:����	�3�4���<��$P$_$+u�@��B����\}#>���j���m������
���LlA��������%�7�Ja�|��(�L��'n�)@�a�4��4c.J�z��I��N���P�I_����o
(�����+WY���[i���[�[�U�Roy���������fq+��������������������������}T������W������7�!�����{��O]���!��>��n?=��}/0�?/�FE��>[!J�
�Y�19K=L?/"Z,��!R��@@����A����� iX,���'�`|�>"6SG��df&����+��M��$4�Y@�s9x��
$�D�O����M>3�q���d��[^4���3�x'D.�o��#�4#����gk�h��EWP��@Kz�;�r/;�����6��4�nu�q@N$#�u��%
�����h������V}�e�[3���S�����������4�������[D�

�`ZKc�� 9������H
 �L/�Q<�j�a�����r+��Dbj��aa�\��T����i���QD�<���2^�����x$%��ppJ5O���,����J%<zr{��6���.��q�K��[K{x5�,n��Ww�DKq�N��[+�������-�UG�#��{�����MD���W���B{��Hhz�]O���:���=��0��^%��x�,�� �dGmg�w�|��y�����)�'�������4��-���
����H���ip{��~�8\��5l��w�%	v-��U���n��v�q��Y��T����smN��p{��m�no"�eT��������^Ex�%{6dLv}� �t+Zz���U�Fy%��)8;�~AT�w���e&\`%j02����)�`%n����@��^���D�E�?9�������|����-T16wq;�7%8��2R��������uAl_�4}w��aq?��������+�Gj��GXIhs���$%Oxb��]���FG�����ND2wdO�[3�<a"����76)��$G���p2���y�Z���_-��'"Z>�{��>���S�P�!5�R.���������'������}����N�?��1���@���0�����6O����_�<X'&/X��g���'�ND�.��@���~�}��5�wr��:�\Y��Gi	NDMEF��
�UV�'. �^�Z+��l��/5���$�A��X07��T���OjZ���]��
�A�q�7��~��DB���1���#4�ND����>nS��5���T����������k�>)����\D%��sX���~^D~PWqd �Lm�]�h�:����wKVAE�����
�gvOD�9N6u��5)3�}����v�D���/���'�+��H�L�i���IG��JB[�xyG��L��k��c6V�W�������fx�m��$��T�l����7 ��I�E	+q&0tlhc���Z���I�@ ��T�����}�����nI�o���p�h����Zmr6m_��8x����48;G�~'|�M#Uh���}mz1ikp������ �I��?�tg+��6��vu6�]�������+J�������9!	�y�����dKJ���CC���Ed�D���o��8�x�[:k\�'[���D�#�`h8�
L�+�*/��p������sg�p��T�QW�e�%m������~9="�Z]>��A
%���^9��-=p?e�1}�C?���C��0C�u4�
iXW�
���$��9�5a&�K���e�V���(�/���_�
��k#�_�{74V���fK��	`�r�y6l�����4��r����H�m'�
a?����;0H�G/��Z���@�M+�gZ�����0����l(�������Q��P����	�?H&����>S�#PJ�ZP��%J�3�>�Rk�����<�k%������+�A���X�z�j� ��Y/����jM�"���db�LD_"F���=Lo�MD��i�T��|f�z�#�E��R$r
��Z���J4���o���3�++&�8��]4^r���hH�i4<�e��;� IiH�H�k���B�	���)<}�wnnMD5�k����:L8i�	��ty�%�o�N��$;{��1��M��L���7/ ����C���^���c��f<��}K���������,g���]4^HS����CH����S��d�����#��R�sMS�#�~�S�(V^iV��:�J$�*R��d��-�������3��m����]���@^��MlC���������-�J�dPgl>��	}�q�8�U�4i�"j�
������k�����&�����"���8TA;��<>6X���^�s�5�HS0��'k��T�/?J^\h������h�k���[u�{)����Q�g�a��*�X��� ��8%��D$� ������=XYk�g��bq���/�q$�!�c�������g�����h��g�e+�%�75g��-�:5h**zg^kZX��J��5�4���q�m9���IM��g�qBK��:YWze"@voE����5
�����������D�#�����HP�n�1zd`X{���e�q(��!��J���E��0w�3*h*4��99����Q}D�z/O���f"��q�Uj�4f�)���Qg^��eX�*h����Y�{7�I��BL����5���T�����@
l�H%���p1����m�l��tA~,^�5������V��)D�f����Df�B8^���D��^�3�"/FH>����[������D�F&"�p����>���[�g��?��O�b	�v`h����f`����7�i)�R*����ur@a�����>�5�������D��Y�����5b1����a/���I'eu�H��L���MG��?��B���:a({�b�Q_�v�3�a$�:�bG�z[�2�^rl�5�����[����F�f$8����a�s�Q'����r^{��D{�o&"��t4s�*�1lB�_��1�o>��w�����oN�2~UO
��E4	+rq��{qb6!����F��3��:Kr��(�}`~'Y���z����^y �v-$]&�p����G�@�mE�d�����6oY��ZE0��B��X�.n�P�	����t��k�L�����g�H�NygH����S�d������-�s�<����i4�MDs*�f[�����F�f����c�9$���Q��hNzk���7h���y�r\u�Go�
��kWT2nc&Y�k��C�ND�xm�����6�vv�_�K�����wB�y��/��cF-.�[nb��^?�D��D^�:Rc\y\����!���������oZ����E<d��~/��s��G�;������e��u
�m&e>�Uo��j��K&��@+�.w���K����47������kJ����F����5-����	��(���[��Z���W���kq���z�.��(`G@'�=�Y�80����
4�G.���r���b����v�����3����r��y�����{���R�Gt��|z����o\:�	�w�^Hut�U��n{F"��-��Rd��0U$��f����3��L.j&�����^�C�#�n�o����!f�����F�?k�����M�%��!��o��U�U<������&��[V[UhrM��
����t�3J�}���n��p����H��l�K���y���9U��y�`�4����M&����:�`gw��=w������J@{e@
�n�^�<���Q�.o����3$e�J+K�L-&�tU�L�>�+E��� �W����X�L~ '�t��
���*i��B�
sp3I�3��r���T[��9��)�~�/��������wb�5�������u[3�l���*@�Fvu�v��B���vZ-�k�T���u�Mk#K��*kmb�����1\��
j 6�;�ivD.��DT��s�@�# u�	m��Up3���?�������<7p�YH�c+�/h{g�Y��n�+����L�}.�g�y�J`]o�?�*7������Q}���|?�����G�<���������zs���^�{�d�Y5�h-j���.V� �{[E��Ay�a�����128�5�w%Ba���K��]��W2*u��L@'7,j1��z��L�6�d��n��\���
5/�UI1������-�+���	���)�#�n��JM��y#�I\�q[b�7�����R��lI�|�p�9w��yG��� ��Y���N�������-�X���Ue0~�b���J�����U�;W�s�.��s��VtM����Qg�l����"g�[��p":dR���|
P�h���Cx����V	c����~�z����*]�JVo�
��M�^W��F�`���6
����*@��hK;��G��_7���f��Z7���^��o����'����X�j�
����i[NqZY\�Q�����6h
��2�r���}����}��v��!�{��4������u�x!���]�A��������@�Ew[��{����vz�m	,�w���?��
�������O�������C�z:���
6�ryM��!�0�V3���H!�9W�+�5���6;�q����������r�����5���*B��7�4|�+^�"j^�
`����7S0�������
h&��O�2'pp��i��Jy��6������������A�4M��7�`A���k��.�
���k�C��l�J�_������-g�_��U��}&�Z�:knf���������h�X���%�6���J���,�J�	�9r�@��joV��	��g���WY"���}���f�����T��:�;���M O"�2�g�������c�����=}�H�W����;�H)�w8=�jI,�cw�!����Z������������������S�u%��|��?�-a��x*�q��_(����R//�r���ty[��m���^./�\^F��.�r�tYe�|��u���Y.�L�e�g��2]�w���zy�����Zr
2]^J�A��1��1��{�U��3gT\<���^�s^B���sJ.����B��,u�_T�������J/;�B��r�R��2]�s����tYw�e��rM�:�{�I���m�(�U���dd�\S�M)�dIW��2]K��2.���>�����)�������?s�"�\����k��u9ki=���'ze?�\���j�����Vr2]��N�U#�&#������/[�;C���?C���^��u��g�|���2]/~������!�u��g�|��2_wO~������!���^���k��p��}����_���U����t���9���g�W�����5\z��~���f&�OW��do���O�V�dk���O�V��dg���OVV�dc���OV�
�d_���O�U
�d[���O�U�	�dW���W�*����Ti#���Ja��TZ{���@��-��7���b���]K��v-��m�WSc �~5���2���KG�����S����mJUnD�����M��jI�6�97�I�WS Z�%J����^���4�����u1�S��M@�;B!�X����/DNS�H=���qKM5~o�a������8���"�
@�o;6+B>����_������(e<e����O+���Dr�>~4�h���A��'%���iO"H�~��DM@��J��)���
7�<��>4D��g�f�t|sX�le�o~[������_W����d��tb4E�L4'�[U���D���\�u��-���H�U-���������-Bb�Ej]�-3r�L�R>3��;oSM^G'��Y,�\�_��h7���:$;�X�f����Iw�]�����bz� ]��5�d�u��%'����i��/"��t&bWR��<Q6&?��l�_F�Ty�$�1P�R����:�'3	�E���7Z�.v1�7,p��`�yx^�s�j]��[Juw�b�@G�$�;��Z�|&�.mA�n�3�Z���k������8���Z�dh�g���]LQ&��nER��Tg"3>���0#�TY��9M��9�X�Z}��|ug�%3}i��}�e�f�J��KYo&'�)hAv�e�?)]u���I@a���p���v�����V���<��PO�A�b��g�_�rm��P�0c)��YC?/�/��CjY�EE��oX�8��	:����
Z�b!Zu���(*�W�}��"w����q$� �O���s�U����m�~���!�������Ib���� -P\�v^�l�-��Yx!Yk��s$��.��>V�V��.@q�� 9�}�?��}�����k�����]���(�,e�C��LJ��~cf"$�z�B�
���'������=*W4��e���$�Y����l�2MQ��cM��16�L��E.�/N���T+�=#-.�DtHa������K���>3�RN�^V��_g\O=��_\@�����%�����*k+�f+6�{j ���,_�`�����\Z���w��ExB��}���������,m��LB�jT��,A��gR��,K:^�];�S	��yl`_�m�L��[p"Q+�m&�a"�j���.@Z )w�,�Do�#v���E����
�_\|b	��"�R�\�>��k���VS�b���1N���'��5'�/�\�e��f�_54�s=PU?3R�'H�#��|��j|��"����7�2��������J]j<i$��m�n�q����j1\�d��z_����,j�"#��P�r�	5����q�jR��	���A]�p���y����Uh��M��

��B���f�O�G��6
������'������u�~��?uR�/,�G�7-�z�����FF�g�����
t�3��49��nuO�MO2�a�M�����=�;���|�
����^�@�����Fw�+�#$������"���1��.�	h!�K��g�^v��:��^;;j*:��N�[up���8��d��/���\��K�|^�a�D���H���a�����3�d��VMkF�1fI��|�v`���������e|����eit��N��D~C�$�SYM<U������<���~�`�y����z���iN��&a���do[��j����a� M���Zy�����mt,'���g�1��Mw.��%h�c�t7�?1���u����k�=�O��'�L�#x�������zL7��As*��kK7��Z`���|���l3�����������>�Q�cp��{����?�@��X��K=��U�u
��������l<el�Ff�)�MI�Eo��vH�����
����me��4���v��uD�x*�&����;7�M I}����7;����������a��@�B��lP�U���Z���$�X�g�dc�����I�A���Qs�T�h�RJ�R��q��f�
0{��n���4��:����iB�d6�������y��o5-��c��H���O>1���&�q���=Z��F�l2h��<��L�V�Wm�};�����v.oTV��
�z-���H�������D��$�$�m�e�LD��P�����
���;�tK�ug��D�\�y
���E|�R.����
B���K����&
�#����YI76�T��A���������C~"w4;�����������&�L��PI��������C{i�/� �����3���B7�C�6��G�T)������w���p�Xgng�������?$[�k"RM�2�pmZ����
����n�b�����4�.GE+8p��3Ug�N+��3�T#����Q�]C����u��$	����&38�@���f�m�s&��{�
�"O�tHh��e5�����I����3}5O�����7�Y��yT��!���o�#�v,�W����4~g
)�?�����kE��	����$Q|t��x�4���q�:�FG	��m��o�2/_�>��T�b������<�C�����p�*��]Y����1�x�-I�(M ��x� ��e���������3�wK��eh��������o~����EFB�����C��Q�����&S�����2rn����T+��/T��-�
���$�o��\�Mqv/�M�0~Y���j��R�t����������u_i%���v�~_(��n`�?qG�f��i�}���?���]�	8a�����;~�o��V�Y�a���MH5�����5���5!��eW��&�.Y��p���4U��"��c~�o���'��7�D���o��f��y�l�>�~�>��^(i�%������LD�X8Ew-��2����dVY����9y_�����~!zh��m52����'���^u'�3��4D�����4]'|��en��B��n�b{5��M�z2�����5|���BQ>���+��H����N��Zr� ���~�D'��{]���������\�:��+
/�n��NH�7��c�f��Y�y���f/$�J0y�rVB����	@�%��_�H�e��_`!��B�$�c����'���Q<7�!��\����|�=}|����~�m3���N��TR�z�m���0�L���s��R"x�H�)4%���y�3Z�n
R|���bl3+@j~��oU�G[��9�l������f��>/��t���y��Vy����R��o����T���*Z} ����[�Y���{�;�3�#+�&ld�X-�X�D�o��)��;N."���2��F/tq�t{�d|,c��m<�����wW� 5���~S%L�p�� g���|^������[��}n�\#���3�L��OW�n�_V���R�Hd���d����o��!Sr�6����[�������y{��P�f��(���W,ab~�aU�@��Y�y�y
�F3y�6���(#�pV�'_�x��������5��n�
���B����f���9� �-�x!};��6Xt��m8�h&�������V���S����~�m��L��)�����^��yf�r�c����+X�����+��MU���kP�K��S����&�g��_;��������c;_�m���=����B��"i�}�h���4�t�/���e}F|����V��h�4;�����=�����t�94��GZMd�����i��.�����m����h��Drp'n�ov3F��3��^�����w	�DJ��O��s���'�.�&���a�=�0>Jd������@D��&��jz���;K��Wf$����d`�����+����	���_+��wW&"���{����R������8�Vf�
���<v�q��2M��^:+�6�a	wJ]>�~��G�/�������(��IT
���MH���������F���l���s�nF��i2�f���������
�}5:1x7#|����=z1�5�8�'��0�*R��\��=:���Q�&����W�L"�3$���7	�;���R�'��Rd8����� ���
�1�
DF��?��,F�boF���)���+R#��"K�}�H��*8�2N4��	�N]�������^<���&")�����
����f�%p��8��4�71W���l��j���W;|��U ���V����bO������� ��Z�O�M�_ZYiX�zOj��zO���q<��o�������3:F��B���������6��BlV��yw�+�Z0%���	�
K���,7���s������5�-���m��\b<�������-�i;������v��ev���o�����x�)}c���m���/_H�;�sL�s<���9������� �M��_����}��]dk�������U�5��[�y��i���c�<{t�Z�U����Q����js.6&(L����Y����
�����L4y{�q$��MA+7x�D��-�+����C�P"��3)ZF�`��G���h����V���Se
!����!�m
��d��L�Q�����@���(O��u2I��6��t!��sL�����7���m�Q�H�;��l��j�� ����BA�yz��}4#�����^�����Z&:.��d)��g"���J�i}'�7��w�MH;(��K���8}e��/$G��;����/\������`��
�j=z�V�Z���rZs���Hc��_�6L�z~$"y����<^l���-��(��H�W�!c4wF��2�%��M���>�B>���q1��
���s��~�c��"M�/4��T�>�Ba�6���4>��a��,��G���M���k�]7�����n+���`��Y����4;����m�	�m���neR�D����-g9����$.��S��w�����2?�n/$��8�(���J=�������H����o+�	����T�6V�s��;(����;�����zfg������uP��s�����"I#�/��;?�+M!������TO����g��m��S.��}�`�/�k0��G:�'B����i����z��~�jE����h_	`�L��Cx&"�5�l6S��K��LT�t��v�g�����)��3�\3jJn[g�[^2�=}�m�}y���O�0$�m'!�����
*A�t�`�}���.#�-�B6\i�7_^�$���-�w*i	��,�I?�m���-UwbM���N>��M}�s���-^I�4��d��6��O%Y����_���>WEATC��}z�>&�t���bCj_����ig$�[eVj;G"64���h�����n����<Q��������/6�s��D$����z�u^8p�9�,0��{��Mot;+����?�Qc���r������xA������H���%�B!�{�+��/$�����?*SBQ���+�����M���}��=�"{�	�}t<�y��x&���MRz��GO��70\����3��$��Z�,�%���A�j�@���_�Z�c\l*����h�@c��1	4��o�v��Mp>^E��g�	L�����<�k"g �P�C�b���Y:}�P�MMi�7�C�b	�/$9���D���g��ly���v6��1��e+����L�+����������-q���Dz����X�-d3��{�|��a�%���3���Rji��v��b�m$>�B��/��JG���#�z�E���H�e�	�)���f����'�Yp��\N����i/&`���v�f�� �<�_����Ml����	�q�,l��v��l�5n���)��d�:4�/��d�_'zp���c�������S���v�S�4Gts�������{�6#XE�w��se����8�o�!�+?H����BK�{KJp�b%�Q���Hq�^�#����a�����O����9�x`����������	�����l��=����	�rA��%��w���h
M�_/�]�	�v��
��Bn&��4�8;u����#����#�,BO�i��#z"�1���X�Z���PPb��5��������N[�;O�U�O�y#��}��qu��������Sj{�����~V�	nN�4g"�-����^h���1#���9��Z����� �|��O�(n]����Gy4��\�D��X0;���C��N<��l��EB���Vz�D�L�6�O�<�Z�	^����~2��!W��:���A7�v��4�e��}���>�&^�_�=�%nB�:	�l�����
��������	1��3b:��j^���Q����.��

��	@��k������&$��[��Ek������Otrd�>�51��\���/K�����u.z�e'���,z^$�Ue�e��ZM)��\/yE]VQS�Rb���}��T�}fQ���Oz�OC���eYD�p���R�GV�oRH�g���U�S�t�[���w�|�a��i��V5hQM��=�����8�^6�9���@;�����Y
~�_$�2���������X�<}�i�>j�4}�����+���������o��U��<#l`��g���K�v�p�C���>o�1��W�����u�3M�������?9x����*
[=h���R*}		&���/a(��H,��!�#Ad	���	{�4�yGb�E�k�H�����w$2����yWB�u�������L��������IY�@2��#h�}�����@�=�e�v�������
�1��N�!�Dd�����N|�N�!����������.���D�!�Ot"L�ND�E=[8>V�j��L�;�IC;*��Z����J��3fc����pY��<o����@'�a�]�B$�)��Y5��#�B����N���x{���O�������+ �����+��r�����{o��5���v���c����ie�|���f/]���0zg�E'Z�>�K�����XtEt�Dx^��������yw@���}�V:���["�������f �F��]S7���F���N�y�Q7�����c�>F�D�'C'��;��DT�uP��C�f�-�Z����>��"�������m��	u[������t{�N������/�i�G������1*�r��qb=�3#�	�����Dp�����|��:Zq�����nE�p|��k�.Wf
����5���*�d9�i���B�Y����9���y�����M;�s$�#��n>&���v��v�B��}^D��1���,�5X�����v�<��L:�� ,���)�Z�� ��aAb��D��6����SkM{�����*��
O��LA����H����^��o7�q.���I�H�0���F3A��2n��320�0t����O]�j�e}������`�L����R2������7��/���������>pZ���>�&5����<�����j�&���=�+Sf$#'VX����6ZIh���i��]Ws�}�h�V��O0!���z�q�~^{�^3�p}S��j�U���&�0�]M9=�@f�=�-�v�t�oAp04&2�f�E�z���.��#b$�]����dG��[�:�r��{�O"�W���h�o8��	�Vj$�D��{��
�B�B=��"����(���f&���^�����/j�.�D�u�V���������A��'}�M�O�h����@���Y�����6bA	���?y��Y{3m���m,�a���A����	���@����������k"���!�h,>���7���,����y�:��V��{qV�������&'7�x^^�^F�+6����%�My�P��o��dm���p��?�
N���.�a���e�9����LS���&�0_�]G��{�'#��kd/qX��=:�)'�&��%@?�s�I3�����Zc��}��������Y��$���8Hz.Bb>���m�X�H_aa�����4'X1�yD���	�Hpk��Z�NQf�R;�����yQ}^��j}p�����������:�4����X�������Vl�A� s�������J��)�?.�tb�;�
wZ�h4���%����e#��H5���?H�o�K�o�R�+�W:��.+��%��dF	���S����8&���?|b����N��b��e����� 2*{��\+� ���9��.�'��w�j3
m�����y�		��SxR��=���ia<�'��T������
�y��tl;��i�H�$	O:#�
OJ����y��I/��f���R�gO*��WO:#�	�o��a��9��M�I�/�m>��Or��z���_�+�D�6�/|)�7���NH-����fk�������H�ZW+4���Fg����omCFj��}�yv�B���)����t�������/��/�������!mC��I'�cq�I�PX�I$�iC�:j�15'�?rp������D/�jHT��L�zJI�cF�u�	@���QzXN�wbl�B�t�4L�\��i���J�9jnL�q��Q\t��X<�u%����]���)fD�$Y���]�d�p�7��ln��#
�D�H��G�h���g\#�����[��VG����n������$����t{�����J�jjg��O���X'(��V>�y���] 5@[=se{�:�8w��& !����"���?,&��;?F���V�D�GS}��	���H�=�i�u]�X�'k��g���C`=�)�=Mu�W1}ys]`�z������m�)#�������us��������B0�J��2
����n\�C���6V�g���t���RX�-����^���/�J�=-�gthOr|��J�f{�����b�e����]�L��}e�x�f4$��H�5�C����	�L�M��4��Q�77��I��&-iEqcT%�5�x��T�I�,����I@��l
���q�*�����������Q;V����J�@CPM�Z�	���l�������d3�)AOe��f���e�����B��������D��L����"����C�j�a	
�����[
E����ix�3:�����n��T�u��������c�xIz�v�L���
�Z�9K��J�_w�}q�����NH��k���Op}�4G�f�({	�Z��U�I6��1��y�L,�V��:���'3��~&B�e+��X����V��w�Z��v��!w���q:�������}mm0�5�7�"A��:/�j�A�#-n�W}�,������Tq��jfX��
�.NNU?fc����{o:u���hV�q^��W�����s�����s��zq�S�Tv�a���C3��"�;ui�S��i��w
����R���R��K</��f?�s H�g�I���bvAW��o
�}�}�|;���>�G�RWt_}����8	�]��N�8�&x���!�'����)��:�)M�x�4�?r^�oJ�Ss�s��;����7��w�+��-����U��nn\��t�&8m�<>l���0E��1��k�)a�.�
�
�N
�~O��IVX6���u"�y2B�{JFT��,{Hv��e�eDC�$�l&;tI����W��Y�[�����f��aH��� �a%�Y1s����:,�b{��:L$4���i
�4"��5���F6�g��pu-�
���)7FNq�>b�C�7#��Fc�|�$�Z��L�`�������Ph=6��c_l�r"��hj]Xl^���T�Y��u
c�~W6�1;��.�_�;"���S�#�����aM��h
x��1�pV�f����Rb��.J����%&bs�1Q��z���\�����$[�&@�I��#,�%�\y^$4�cr��!9_a�f+�t���}�y���y����^lf����Z�$�����NR�����L�X�bZ�w�������/��Z"/���v�T�w���&%�z�Yo�&�{:�M�j��u+�U�����u�|]�x��*����B�2T�*Q���*���c��^S������t�#'{�5�����{M�>R��^R��������� <��������U*?�OC��US~�����\���'��%U��2�� �&��Vc����/���?��S��:����/��������'0 �������z������O?����6�Mn�^>��6�"���;a��-�������?������.���o�_����C\m�D������o�f$���F�q�)��c��LD�����Id#���]>��kz��cu����"�T������d����J���/[����?-�K�v�7Z���7�g���xT�|���88x��}r+�	���p6�a��o�r��hF���4���A����K���Q��#������: e�i�sb3:�S����E�!+�/\�p!�*%Oq�����R�<	�������A�=����Q��&&@.r;�37���I�o��7( ����$��n�59z�F^�h���vfw���������	X�����g&-�;�'y�		���������k,�MH@-c�SY�-�%�&�v���@oW��^���f���		�1/�m>���{����<���1��������7�������������8w��@��j���bt_m��C�D-X���F{�}rFj&�i!,����N�b���d�C����Z���`�ig��J��t�L���k'#��d�Dz5t��]��I����j|O?�I������*@���g���m�u��:��j����o�����X5�;���/�{��h������]�3����J_L�>��N�F��(d��������Z��76[?3Jz0�����JA�1��X2�������j��c�o�G��}w��i��$����:�x^�_r�d!]�;MH��
w�R^����neGd�-�������M��_��$�n5��D�i%�a�b�B��-�9���A$��+B��T���(Oc��3Z9��@��9�7y�����m����:xy~�
�Z��Hu0!9�'u�7up���7K�
��%�'�5*���V6�m�k�f��8�6z������1���5��j��D�Gie>=/�I��R����-������(9�s4q�j�l�����~f�u��7pB�g�'����0���"+��k
[�!��(1��\-���HS���n��&p���	$�:���OR���]��D�	��E���A|�Vn��-�)������F$W�����A�'��&6L_�� -�S1
-d�>���\���������������2�}.�	0��I�0*l�������{�4>/��\�{�� �,�q�2���-w)	��p�9S��<������P�iJ�}����#m�Q��3�3A��\�\<�
���&��U������H������LF����D1�3��7!b��pH"e�w?FE�����.p]<���Pa��|�{�
�`g$��I�j�%X�d�n]�{�S[��	5%^.�W��P�:�����T��T����7n�����x�5�������t�s��]w��0���~�o��%�����ToZ��V�^�c��-k��SA}B�D52��^���3����Mm���hkT������0^�����'��|7��=(d"9�`��^g������ .��V���m�io`-�}��,���:��i3�Z�I�iag$��w-L�z���}=��F�gF�8g��[d)��m��F1#�����X���2:���n;K�����i��x�x)/���)�
�\J7�]�������i(^k��W7R���g7"���Z�N���ay�jx{ov�f��w�����'��z�uemQ~b���9���Idk1L�1yP�z�1��o�<p4l�`"�//��]���1p["g�|�S��������������8u4�;J�@�E��#�Nof�&b����O����%��7;�D���7J��h%>���J�Q���-*��0��)�6�&��}0��&���
�)��.����!i�%'Zf�(�Hh����Q:���l=x��	���)��R!H�^����+@3�JD{3`����)�<�8�������
{�=M�,�v�du���k[>3*Z-	G#��<o$9�f�GEAK�D����[��f��8yG�!9�Y�@nG��5���in�������w������z����E��y�2�L22���Uitg�<~���H��g���-KE]�rtA�(������.-H^����Q
��	h�d��A#Z��L��1b��<��L��1���%������b\��G.�"�����a�4�T�a��/F���H����F�������
z��#:"l��J����dw3�j�H�5M���G��h�@����${��d���{�`;��qF=a{� I��t��3���^,_���>��z�"�t`�w��8v.��B���8�$f���O���v���B����.o61�:����vl�Hfv�L������v��lC���!�"X�
;��l �� ���-�E{�����O�j�����E�� �L3��{n��s{���c��,�����jj�mJ��u����A�}p4M�L&Y������o��i��Ze�v��&��������h�����������*�;j?e4.�����L����E�o����n�d�<�e����f�p�n���A&�C&�x�L������h� ���~!�����3�CJJ�����-f�N+�L���AcmV���6�V��z�]Z�L�:�:
3.z11��"�3�-�l�H��4e3�g�����X���_�l9���{���o&$��<���-��@&�
�>Nk�h�?�6k���	\���c���y�a��~c��JT�q7| [�����:nCA&�%U���(�����P�f���x�%,@�x��Jv�)w�8�l�@J�|�������V��Jw{���d����d�q��j�
�-���<
��T���T/�M�
n�Y�t��h�b{N��my(��J�}tk��<��/`lT0����,/����`�DN���f���A�)�s.Q�����	~���g���ifOk�1�2�d>��`C3���5jlK���vaB���%����Wc����fc&�WW��@�,�������d��oY���$cA����l8���8��"l
<��%Q����g�8AI��'����bTB��f���3�sq����\>���D��2S�=�]O7~"�������	�tI���S����'_h�6R&�����p>����+���P{���73l�JTw:2�*�����YQ�P���h�[�E�/�vu��j����/tl��a���cs+[������X�]�Z��l�V�H2|B6IT��Mk���&&I_H�m�	��wl#f��tMKJ2Aop%E����U�"���;�BR=,h�'�Y~��+K��f��HJ3�X����������O�������d%"g��K�*��oZ�U�}��Q~�p��W�l�6���y\�z&����E6�����{�R����\y���G��P�'�"��0�-kWh�D���"|�{�X��B	�D>�7KZBH*;��bJ�n��{!���l>^|�G�H��<���i�Y�oaY2a�����T
���;�����D���Dd�C>��r`M�	��&�lcD���2���+�50���GO���R<�s�V$`���~�\<��|��e�o�3�:�+b���HGX@�����\���Y�s��S%H��tJ.do���gZP���o����y���O�cEA��f��� U"�qIU���JB6�P�KF3UVw`�w1��k��y1�6_y�q�,oR�7�p��K���_1������u�4�:�9!�a+��q~������������cs�6>D%�d�x���/-~!6w)jr���R/4������8���[����q�5�:�R^L���6N�>�4}R!y����lV�-�@W_|s����@X���������m1��^�'��uo�Aeq���qd�8t�>�������Z�)���6��Dn�5f��7���+�iH���H���w�����K�n/$�>W��8z��3�^��g�����x�����^��<���K�N�(��&+�;n��'��h��V��F<���e��7��X�#6����gE�m��}��~EZ�y�T�FYN�&�L���H�T�aUK�����rc�y�,�6��Fn��q��,���v�������1�|��(t&j�TiQ�W�<a�l!�Z_�c_���a���q��W����/��4r�����6n&!sL����:3��\go�87������0�0�J��p+�XR���(O�BM��Si>t�nA��58H�F���2�EO�4�}E0�r�;$_��������	hf(����>X����1bQ�x
$S^�$��"�f=����\�wC�yM���"+�L���Z�]4�Ly��i&��:���H[�������~��������n���2c/�|^$d0���g���P��"L��_�fT�;�n��}?����>A����Y�
A�&��&6��������d�w>?2�W����6�t0h�,�����HH$n���g�D<�v���wL��2�eT��u�RF�k�\��
�x��B0q�q�7����i3����
�k/\�h�?+Ry�{WY���6�	�&{��)`O���
���	���kqf����)��}�����|H`>9$�'�w�����7I�������,�t�^b���R�t�����(u��������n%e��h��S'gfy}��c��n���D�gQ�uw=p!Y���l�t��e��v�	����[�]\I�UWO��������E�n����Q��J��p�;O����H�KdX�~��d���#�|��
B�A��4��$�9r�m�JD1L>@����������Y��G���#�a���h����D�	��<
!�.�<�BD������G�Y8�,'�	������Y�Q"���i�n���
kQ�\��kpn����$^�x��L�YC9*xD;G�Y�.=��i��:��i���j;���i��Q��A�6/Z��ie�N�p���I�p��5^�(~��T�^��(,��Hs��g6R�d)����V�^����!c�������"7��7���e4y��y�l_6��`��M�e��W�e
���������fOfnj	��}�!���a1��?+�-����'�k��t�|��z'�
P��4<Z1�������{k�����������Z�*�Aq�k��c��n�v��
���j~A���z�F�}��Bv���7k��9�%UH��3�gy���:*��n[���}7kzcr�D_��#�����a@�0�";=z�����ac��f�z�|6���>��tf���r[������VS�����$�$J������L"
��.�7&�^V�H:^@sqI�[���F���d-t��<������R��a��bN��
:H�:8�h���Y����&
�p��gX�l��|J*u�;�_A����c^u���<�E��E�^��xt�B����v{��}�F<���.n���$�CY��u`1(��3��6]:�����eX{�a6�=�������!�c��J���]����k������;������6R�e��$��C_��gQ���B<O=i.��N�E.2��������y�I�-�&������'�<�������@l6K����
7l:H�Sp�8�2o���5D��:�����j[������ �3;W&[C�[x!Y�1t|��<�iF*W�-4�������G�S���v��������V!Z=B�Z���I1���j���1�%-(�����,��n"b�_�O=3���*�Kq����a����H��2�,��li%%F�.G�X�����rE���j����f�Y�z;DxO+����2��:ny62W1������d2�[2�u�qW������\��h��6���:����zq����d`�D��(Y��(T�����w{�^����s�|��X1��n��q�14�nF+FZ1FVmA�J~�8m.�(]@�zQ�,���DD4(sb}~���=��,K!�������r�P��j��)�6`b�M�!U�n������J
9m�����nzS�.�$���T3�E��HUNm��Y7��z
��;U[�O�u��Z@���[:f�[C���tS��%�,�j�Yl[�Nm\���qM?��ahe�������������a��i���*�t*W���/w�U.�wr�\=i��b�@2WfN'�eN�Y�aQ-@D6Tf��t�,��j;e,�:Ov�xq�u�D�MW�g]W�nE�Diu����Q|��y��}�'nr�r�`I��6Z���-�V���K'���Y�N]����,�0�����I.?����6�jO�:w��u��oy�H��0���H�X��Ei[@U�*�e*��Y���.������'Y>�G�xf�71������)�W��'�C���H������]���YL���,�e:y������g�k��c��>~�e�q��b�/v��Y���B�f�e]���8;}b/��?�Ol��+����9|�E�7��x��$W����"���2��PN&n%>�2�.�Cm���Gw�26z�l�j3��4���
|$��cGL>y�����<C�nh�Y�����|&��4��B6�`_]�&��WTFs`9Y,S�3��F����'��Ft��ib'�L�;�Z,]#���Nd�A	e��_��I�$QzK��qG��3��Q�kZ���x��Q�&����}�
.���J����3��3T��w����r�Y�}g����9��
����<����1b0 i�6�F7��f���|+�t)����"	���#��s��Z�o�����%�&�����I�x����L���j�e[K��)������)*4���3�K��0Cn�.��Uv	~�q�aY@c~b��j�����pG�V�cQ�fPB���.�N��d���9�������g?�#�������4����V.j�iG�.-�)���hFg��\�>�:��~'W���%�����qyC�M���nBx�'�T86��t��Y���`��t�nubc@�)P��3Z�}���L���J}�����7�l�@s�CE�����"7tg\8���,�B���MM������`&��%qT�;l�����*�8z���7��������n�r����Q
,�W������m�c�{��
�Dxw{��g��8�����cn��r�g��;7�{i4�/��"	h{<��^}�S��=�8`bI�QR����pb��,'i$��6�0��
4��B�x)����TX������R1���]�mq�1����I��=����an{�${'|"��9��Vo���o\*��j3��!I*j������Z�����q�����@J��h�m���oa3;�sq������Y�`��~n��#��~��#$����XZ�L����kZb���b���Y�n#_.bFa?����������qE��S)>+h�6R,���p�j"����,r�v�,�1#��@���p�=:h�-�������	/�P�v[�����������\��c�O�,l�AZ	�;���s����c��f�r`�|a����>M+�,������L��8
�3K#
�@N�-t/VtN
����<��aC����;~t��
�J3T�x
��������AC���������*�����uA������~��=���P��Y��M�z����zL��1]���/CJW����h�C��
�ec����"!c�������V$�G�����((Y�����"�Y<PS�'�ab����R��.��(�~,3�@QY���j�.9!AE��X��q{��]����Iw0�\��Qy���n�>���oM�L}3A��&?/"��o0y����ZIA��_�BRd\�������>��M��_36��w�]�����`�W"�2��_p����n�j�\�>�~#��riw��Dd|e�l���#��~i&"k����������j��QC_R?��I�3Q�M�>���6z!�(���D��-��/4���M����{������R@�������^R�X�c�uq��HTK����#"���J3:*�v�/,���H|3qM�������4�1bq�G6�3p�F���[��%L f���]Zk�����;\.
:avp&Xf�faz�+HYS�b{��3��v��a.�D��d~�D�t�#�4LHf+8��x�X4�^�60���a/l�K6�����	�����q8�������l�D��O�@]Rk��<+���0�[���4k����X��-�LTs�����v��HHe]���d7��X������M@#^�����Vb����w�{2n��l�f"�NCg ��l�f�
ye������xf����[?}���L���S��0<���LB%i�����^���'�8���b�6[A���uL6������l���#�A� LVp�&�V�>X�f�
���V������@#�m�B,�(��(�ioDT;8��rMF���<����
�Y>aV���h�"�m��A�"��DJ*l�Y��p�%�1��L�BDV�HSxcn����	!'��FF��^m���3�j�L�B�l����P�i��-���-,�}�!5K8�a	o�~�L�B4Iw�Bl���p&Z�F5�I2�3�o,*t�f2�3�RhG��S�V�JD��M��7��%+������{c{��f��(��r�!��Z���"'���:�,���jw�q�b��Nc�B?��-�(7�r�~�
gb����R��"������fsU�0�F�YAa�|?;��i�'��-��Mk4<$��~�"r����,�3A���d�3RU`O�Bt����!WK��&Yf`o���'U/Dc���oFg����
T<&�1O#(/�@/�V��(�g�d��M���XCqP�6�z���@�#��cO=���Ak�g�ZH3��>:0���h�N�OZ�+}���n3�Zq��Xx�LX�������aiX���g�-�y�����}��?�+t��B>�9�}�E�*3T�����0t����(��Vm'������M�]-��^-b�_����O��)���� ,u`B?jy3�@�(Y�c��=���I/wo3
P���vF��D��(%m5;���
3����1�`&c����h��
�3)
�	}T���j�v�/x�P|P�������/d����;�@I2��1��������5D���f��D��>�9����l
Q�_+������$d�<�������t����#X�7�YI��#O�Od�Ke�����R�Y]u����oN����1��f>8�����\WA���G������������G]u*/I��4��>:�����:U�>�}�~���:�*j����T
<��-������������:���_1�GE@�0��<�@hE��D����k/x�?zy���Di���f���yV���P��l�5��2��D��>�O�{�����x��!q|5	��f�0��U����@Et�7����#�[m�(��db������*�g{m�O~�n��&��p��H'~��F3�;��#�&"<�����7&@'�����Y������������F���s#g��y��������Zx���8�����\����a��H���h���y=�������^���J�y~�6X}�����q��$��H��=/D+��r���4�����greD��=�������}��fk$7��uZ2�e�U�Y(�	h���B��No�H�~�b����D;������W���.[K���Wm�)�7^=b�]Bm=��G[?�:��>�!�S�{4L�����5���"��,	�D�?9(�'�����	H?Sd���9+9���}���Y��������|"�X���c��Q�w������W��H�m�cs`?������y��t1�����3QQu�"��UM��
��Y�WI_U���3���y-��j��}V��t���L(#]�~V(-@�XiZ�Q7-C�,H��k��6�l������z�[�k���B4���l�n��j����4#)D,�U�5Q}����l"'Yn�����%{"���w��V�:�'���:P�r�'<�������������K3(���Q�w:�+9v������pc�Y�7V��?����qw�a?iA����l������V=d#*w/��[jw=�������l�J���_���X�^gNv�� }�e>����
;?�+3�@�����'d��f ?woJVD
�v�}�D��1a���^����6�-����\�`DBn4K)3�/��_l�n�q;�z���q�,�M�y�J!2����r������v���z.b)�:{,�mA]�W�J!c<0�z�!sz�����H��4�Y�vl(\cZhu��kc�n�m�O�5����@�����d�.���J5�9=S��'�
��4�>�C%�<B|V �}&������#���LT��d������dBT66c������s��hZx<�7M��>�t�>/"5����*�������D<�
�2����T�qK�+�a���l)��^Em�yj(���kQ~3Q��j����
�������7�=z�	�����z���cFR��Ib�����:�|�t��<��������b�����L�,
�7J�����@I�E��=�G�Dc�����A�1`��������a�]��H|}&!S��������lFr!5����	"N��-~���[x��#���;F���l�v��D��:�3)�����GL��������X�nk��-�����-=�q�ST�������X�>����B�_��m��-�����^?�������<I�UL��1]����:]�u�~�����z���*��\�o�}a�]��{������1_?������m�?�q}�|R���|���+g�t�MW�r��l����9S!�����B����.��.�I�!����l�U��M��e���*v\V1]����*��s����6'�-I��=_��.S�AL���_K���O�UL��1]V1]�S~-)����K��-��,��H�M5b��1]�g-��k���Z����AL�zg)]=r�O�6�=���O�
1]�5�-�|��v-�v���&������}=����=�|�����u��=�|�-|1]�C������u��=�|�-|1_w�C�������c�~���)���O&=�os����.��n��K����.,|��~�-Wk��������s�s�s�\tn�*���
��'���������*x��^�]��Wa���U��?yv�O^�]��Wa���U��?yv�^.�����?x����W��U���
^]�
��&��S[>�_M�7\
�����(�jv!�������&���_����4�)UmIU�����G�+�����kIsv�����s?��Ni��4�S��%����z���8�<�*����sCDuw�������"eY�k(�$���b$*���p>����Ld�Qb�s���Ft��9c��js�"���d���/�B��K��������a%�i
d�H=p%���<��O�ZP��3e���)<[�L7�2�nj����	@�j�Ke�����;?3��(��&�
wp���(+RY�p�M��r���G}�g�������}����p*A��9V���S��:���9�HV%�����)�-z���v���c�
MH!�f��1-u�M?/T=���k:�)��A�n�#�B������B��'�O��38<]�d�A�����GT�U��(���3��y��C�(3�n��_�T�����t'��D%X�n,��f!!�2�3$~�}!��j�'U�X�o�T��n������0����|�T]4����Sr�	�5#��,�+����_H����FD����q8��"��@�]u�uw'�z���F����wI���)���{c
Z;3Y�����f�=��u��� %�6Q'����J�4&��+J-];�l��V���q�V��~g�e�
n���r�����X�qz*�%�<o�U�p�B��x���JV���2&�@J�|������>�����n����F*���F�u�w;����#)��	Ff�a������"�[8He�S83��\��B�I�5��q�
��t^l��;}p�8�������A�4��U;q&z����gW�v���}�U�Y�,���z��Npxz3Rk�g�G�]�$[6���0F�`FB�U+e�T%Q^)���	N,W_H��p���
F�}�H��R�J�I�&�d�<�����D%��������j'�
�R�J�|�y�xN�d���\�v7��k�.�6����rw�d�%{�{@�$;��L�����e��,�|���<�`�&,hL)��=�)�4H|�������F�k�#��!���$�<�����VF��2 �J�1����{�Y�6����0 ��l����U�	�z,v����?���3���7���P��/�V.�i�����H��
�������dow.B��z6.����'a�_�
��F�������Py���'x?/`gnnc���H���B����g+��H	���0#p\����+Q'g�0>���0����P��@�����i�u�2O@����U��X��?��/���@�I�C�@����m'O>?��~B�Q���b����� ���>�b��b�c��N9F>��6T���&�k���{cH{���C��2�.?/b�)��
�>�YK������1��7q��D�o����4'������[+���"�|�7���A�������HD�R��T��-�*\�A���$���6&YW���K�I�#���&���J�>Lr��M��;��&�����,�������kt9�m{�R��'q�7��$����8�(C�-�,;�L�;Y�;w�Y}L�UC;��b �P,*S�	�,zrC���z��g�n&R��T��:�&=���{�x��%}��1���D����4����`�5��L��/d��T���}��dM���;Zti�����DJ����?�-U�L�A���2�"�r	������F�Q��sw�Y�){���:���|p9�J��u)���#� ����f*\dF��m��edN�V��H�E�Z�{&jO8�'G���lr�)kFk�XW}c����R�>�I�in89wl�`��4�v�IcM�6�H�8!����Qkw�(c�����!��|s�K.�T.>+`O�����rtR0�K���E�+�!)��-������qK���`�C��a��^�zITu9������)��
N������}N������L�S!bW��4�Z�u��\�
`&���U4��P�R�������������o��^<w8�:������*79B��������h"T��6H'Nu�hsv���n@��Ej��#U�
���Yw�����;@B�>��;F��G�����!��i����-R��U�.�c��f}S�.�l�8���p���G���)G�������9,�s���P��Q;����1�a��Y�}!�����
�����!������g�O�15�|���"�:#����R�F6v�PA������8�V�|��� �Q�r�qc��	�����/���=<Y�\V<��K���������m#4�B/ ��u�p���f�'��6�:��# �C�D
�j<mJ���*WT�p�����En�S�^H&�hw`����&Y�RD�Q����5)��`!Ef�.�M	�R��^Q�'&:���ar�Lz�=��<���<�rHz����L�<oT+�f {��1� �x�y8�Jds���X-fTLN��c���V
�<p%I��!Xl���H�1�}c����]�T�in�=�5g3c&"�S���
6�r����%�K�ds�L"�HY�A��$y����R
��_DSvS�5;�����AJ �w���OJG���d3
�(A�����|!-��	.��Z}-+����E����*qM��W6�P��|.mAII7tY'%���K��v�_w_�������o�/���6`�����m��M�%"@��[�����V�����$��B0��	b�e���Mn�����f�����4�mO���B������������;F��gE���>#�&��B����7\�[���&]
N���~?/�5@��KE���{y�$c��7t��)���;f��XK���",��/���~V�2?�2���e!�����dx���j<O�L{��r,(���R��-�4]n�Pz��x���P�S����,2��������2����:Gw)A8g�����Zv����;�U�v�UWs�'���I_�����QwW5���<�G��w_H�{R0]GX�l����v���'�����i\O��y���J&��]����=D:�`L���hM��Z��J/�1^�U���������-X�k�R Z������f>��Ia�d��Z	��m4��k<�H���1���������E�;�X8�Bmo��"n�t����uzl����G]��i��8|!��`�0j��bx��_��Sjl������5���	[�!���EV�w�G8�Q�S���	�^�n���fwt�E�#aN����I���| �c�O&�2�#����Oy��|�������Fm�QR3Aj�����1o��N@������qd�J&�B��B�K{�n`��en���~!�Dk�FG�[��e""�L��F���$*��\�'�����<����{u�������%�WGKP�h��u�N������L(tn6�]�k�z��j8�����y������y�wG5���u�/�j�����J}1vs�����>G&i������L~^_��l�{s��y1���^����{%��8P$�����#P��S��1��b�214w�+F�n��Z@���J\N��E�����������!��o����#�k�g�S_���H\��}�Uh���i7#����">.��g�UV$2_�st����1T�M7]x��b�~%�o,sz�J�H"?��j������"r'�;OSF��+����	Pps����N<%��#��\c����8�$Y�[T�	`T��:q���] "W7��[�
����������	���+Xee��J<��++���_�'��wW"2;o�iEoeF8��
O{+����2�������V��s�b����
o8��R�
CK�]hR���}�nE	p��7lK�w��V�_�4��F��X�5/�����ASO�������W���b��[���[����$�u��CX+J��x�X�coF*ogn@%����A�!�B�UcC�:3�3$�Y��!%��0��������\���p��+�2�z������@���:���X�������)�h�g�Jr�I����F�W{����mb��NLH�w��#�>�7�,c/�iCx��qk���u��cx+�8�h��Q�[����e��;X��������U�Y��6��C)�Ay�,F�zC�l�x�z6>�A�����[��tf�c��Q������|��#��������������������9-rp�,��	��q�����$*��dc>�N w,��c9�t�s���U�r%"������oy�#�c��%D�r!x�{�ikf�Q�^�����A�iE��DSj*wt����5����Y�b��	pcz�p�'�9�+��_&������S~Q���:wZ���p��?���@J�|K��9c����]�=��L�5�V�3�0	\�?�~sm6&xt����t0'`���	h������M^
5����5�9M7�S��Rb)3)HJd|%�,��0����Di4\H5�J�T|���/$�=?2�k`0|%W��kc(<�XQR�[�6=���d��U�+%�F�_H����k-��f����Gb� �D�GG�v�=�m0&t��E��<�`e_0bF{k8����d�C��X7cc�+���j^��������K0w!9n�Ke��l���A��CuP�t9��El�~�}��Bd�hG�W�����r�;xY�J�0��/�
���HV�`t��f6F�lO���#�<b��+�FL�^����D�+/
T��Q��hh}��6��>�E���@�8_wt�7h�}(��B�m(\uz	_�j���h���G���13�	1���������V�3A�pj��c������}��n��*B�:����-�_S������B��]�Y�n�
O"�{�s|I�|����h�\V�xO�o^H�
��|��[MO ���^����xmuS��Sds��cd�����M�=H����O�5#�*�}�$#^��>�������x$
���=�;+��(�D%�}�6�h���\��.����������&&�/����D����"���]+�-��G���u/�����	��
p��p�+S��g��-�����n�PE�'P=}�
m�	���i�	���G�i��S�ZR����E[���l��J�aiQ�7�����y�u��BJ�����_����m��m���v�1�o:���-���B�N�(����1���d%u��6�Q��PO�^�;����2B@�S�u�^� ��Y��!]7�@9��m���5K��J&V��>����~!�z_LH��u^zNIq�Y`FQ
�>lz�a���P���5��Zo����$�����^��2����Y,!!�[|+��/$�����?������;�`�z���?vs�n}�	��,h�G�������
����z��GO��70\��_�_�I
��Z�,�%�Y �9�:
T�L����jc�U3�}/�Z�$�Jn���W���&:� ��f�'(�\V����iU1t��U1�B	�R	�P�M-iM��5������$�9��HZ���@
����eg���[Y�5�/5�[6V/	�Eu��8w>!�nk�LH�;3���?�6e�c �a��gHE>���R%&t�i���v����v�-��T�q���h1�p�[��x$������q	�	7t�,���i\?>���t���Mr���U�	i�X��R��p��[�O�sT-lW5?tf
�^������J�P�Z�ftQ��m<j��,�5�+����f�U�<Iq$@7'T����Vo�V$�(��A����C ��	��N`�=��8�[�|a=Q|�[R�uy!"�������*_�9���n\V52������g>j
���6(�B�a:gS��� �&@���,����cA@J -]|GJ�s�M@w4
�L��i&"��������2E�[�=����{%"c��v�C����0�	������ 12+���\q. �>����#+������������������"���V�	�Nf4W"�-^��V�v��H��fN:�,T�����iE�|����������B(�$�p�O��_m+�Ie��!r_}}%�x.$�+i�@�4/&T�f]#��P�o��5��#�������J"v��%P�fb��V=����}Z��|q����I.�X$df���t�6��k�E_�B�W�I���J���/�@C��8�U+
_y1pz�E����flA��l�EV�o"��Q�<H=}�ka
����W�/K��3��\tE?
 ��y���)�A�K>/���=�K�C����(a-�_q��W���>�X��W-��m��f������\5?�/KX�]H�����>o��Ln�[�l�/z�u��"��nM�V��m�|^Lm��n�����%�6h-:4�w����f���u[q��z���s�h���}>8T�i���r����o���4'��T2��wk��q8�B)���S���������w�Vtc����5��hfZ����;�Ty��YP�j�2L��:��/!���5�%e���m�8�w$��#!�{�5����0��m�8�������D�7����"�J�{�JhZ�)��]	~��N�����$�H�Ys�g�y/�$nhpQ�c���S_�|�m�p|��@�;���e=y�\���C����&���^h',���i&�����S'"���-�.O5-�h��G%��K�d�����yf�ll��w!4����0��Q��7�O+��@�B�x"�'Ekj��N+S45�B���L�[���?�"����!X3�B����t���X;r�����<���������=}�aF+�d���������]#!W��j��u��!hz�9B'B�����0��l#,���K������;�_xv����:�8�Z���F�k� �F���S7���F������������m���F�DD�����t"&4� ��5�_V��Y�:73�y6��
����m����|K��g�������Q�/�i�E����_V3���e��S>+�Ohg.���+R���HI&b�W���.�~L2b�[���\�)h�5a{��_�|� ����x�^�9���ba�4@7��p���b8�p�����cA%���G��&�y-����\��Vx���b����$���
�Y�${Jp&H9lX�p��'�.z�\�['#({�_��n
S]���ZgfB��e�����X>i&�%ltl���$T$g��<MG3A�������q��N(��0���	��'X�gLu{�N�z���y8l(%����m��!����A�{}�h�
l����@T	N�%��m����5PI7y��\�LY���Xe�e_���LB���Z0�H�t�����[��>���eh.������y�ez�x��-M'��W���r�������8Q�7����v�t�OH5)u���dYO�b5�C\lG
�>���CIE��I.��3�����a�+QG\�R������"�o�j@�I�����AQ@n�,�P~^�>%�S}f�H����3��Q��^s"����W�1�8q�r�8�P���o�|RF*�K��/���������8�vN�r��<I����:A����7�mh�L���I��	���@���[��:��y<	��k"�O���1���d���T0.�#��y�(���552'`C�3�����r�I��Q����m�_�m��&�'���h(l���I�����I��m�pQ
��x��Q�_,��;[�4�>#��$������c���,�G�7�M:Yr�n��\���GH�!U��U��it_�bT:#������D�z^P�fdz.��x�����C��-`������`����f��#��mA�b���PR�����}xU}^��j<�:���+�W�}��u�.>�#�A�����[����'{:�b�=]P��K��te�9�vo�9]��p�L>�-M��o3������DYHhHT��)�N�7����c[X"nKV�L�<�a6e`e��;��+����	���l����@�h�!�fZ�q"����.z��h��5��(dZ�k_��tE0�����	����H������Wia
f�{V���.Dd������I���+�5�hwKJ����y�hI/�g���
RX�%eT�lIW�9a�ms=L�5g_�	S 	�[2���L�����W���;)mT����TI�lLW��u'czm��l����k�n�&+�����Gjt�#���C9�������]�N�T������(1PDj�srP��<-'�6�	����"'I����$�n��D`�&�,c����c*N�4�J^��K"o�u�(�g�SJb����V'�D,r���w���e	f!_}�A����)�}�A�s���t��+��\�o
]�16F2]��}pn} y�)Qch?"������t�M�u�A��R�G$r��!����\#�����#IM�#X�F?�������$��3��H������TT�������X'(��Z>��s`] U@[=sg}�r�8w��* !�~��"!�12XM��;?F���Z�E�GS�r���x�'j{d�U��X�'�: �����C`=�m+V o�^�@�m������-�&�r����1;yzXz	�usT�����l���+mw�(��
�w�"�1���kc�{6��[Y7&��	`��h�z�j��|�V��h���C#��g�
�������3Z��L�\����$����ak��g��]�gH�5�C��\�	�Yd�I��G��n���:,7k�$qc�L�D���8O�Of	,������{�t�0����\-j|�2��[���7�H78��*����"���C��Mt��m!��*�������e�M���aB�f3����L����3>&?/�_���bU\S�����I��f�Tyw<
��7�x�a��!��:������T�uI��U��Z��}���%�u!���0_��ri[L�:!���Y��,E�=4��wS����i��,�8g	O�>�_�@���3�\x;���1����!\���,�������t��h�O�Zz��u�� �����4�'zg�����@��,6\<8^es>+�"���"�m��c��[owM�Y�(s2��z M\qyw5�����k	�vlL�2�w���v����w��5���SL�e��8�������uC�����wz�|��;=�f��E�w���N����`�;��i����t��)dt.�0|:�_�tH��H}S�I��rbvAW��o
�}S����oJ�g�J������&�}��� ��vrD��������=Q>,�M����i�P�M�\����}S������D������;<N�Q�b1����7uu���mVA#��3Q�t���9���J�6*�md%���!�-t�� �0�I��_9iY'�M)��:��'%d�������p&X����V�Uq^�3�p�M�yY�D.�n�P�D�r?&=�������!��
Ig��S�U�|����!����}��LBF��5D�#��Q�8�*:�q�t|��8\9��r����H���9���I�y���
�N�5�P�
Y�
�4�')�y����W���4���I�)���!�d��J[FN]�� Ju����Sd�������0gQ��Nc�,�n�����
qg�K���j_�Vb!6w���W����.8s�����lnM��c�"�\�z����EB����"���-��|���P��c�Bd�TM���*��HYE�y�����I$s��#��P���'��j`��i#r�:g#Df�N��Z#o��I���A���jf���Mg���a�r���zV�K��t]�t}��|b������q}�i!~R�*!���J��N�����i��L�]�������#�v�i���v\���r��W�v^]��W)ylM�]5��j0V�J�O��@3v�$?{o�QJ�_��(��N����)��9j��~��c����Wm���������7}Y��?�^%����))!�����J�C��2���������E��{�����aD�z��tY6
�������}��?������}������e~"��VO��7�;I���������E�n���+i�	���&0@gc@"�#e�C�Hw��s:\4�<+A�p�E����A����1�7[����O������Zm8��?k�
�Q���<�����U$i��"��H�lo��
wn~X��8HX��$XN;������[���Q��%>M�A�>�3��R\w:��S~&":�yy��SM�T}o�,6��@�1*|������|A��n�p��Z�0z���9�Ps��I	�o�� ��v�y������$
�]�s��4(�LD���!R��n=\�V+7�s�1s�O���$��c��$���V+���rhv�p�".��j��Vk��kI�d'�����,VS�s�M��_8���f���5����W]V4���]C�ht8f#��PI�kV���[�$��n�_��x}�7?������4�=&#np�#�D%X�	�G����D�JZ�����g�C4�of���gvs�x�'Q	��
�*��,+�d���h�/{O"z3������I���k�q�Q~M&)8�;����������~�m��]|��������B�=�����c:N�~���zt-0	����Oy3u���~�F�L�Z��G-H�FY�;�`?+J�`��<����eBMO�r�t`!hb��.ZQ�c�1�� ��a;��b�-8�e`C��L'�0��%Y��,�K��)��������o�V'prv�BM}�����B~�����z�����<���%���0wHC�z����W� ����LF}�V��\F���
4���6�K��X���w�6]��������h�$d���eGLZ��0����Cu�l0;���Dd��f�m)ljV���g�8�������He����3�����$"��P���"��\���c�e	�o�#��
9��4q,5v6���EE�U���'���$����
+�~�$$eE�z���b��3U%f����5[HQ�3�:<��n
Z@1���<�iC���D������AV�n:�m�)��Y�d2-��[���0��BRib��R�Z�g���x�w-d�>������^�@���"{�s��}.Z�W�I�0Xl������^5��$��&�����_�z|ruQ��Nw)	9}�8�LID�v�\���DE�)��"��t;��:8��MI����C���*L��;�C�$grE�lEx8��E���/M��a��	�L�C@���{3X.�f3�������}XdA�Y��)n���]Q��p��aY��j@A�����������%^/����P����< �"����s,��[|�o!!s����n����b
N�s����E�a�����<b`��H���|uW��,�=�	p]���^4*��:�L���l�3�eN/$�%d�O�N.�B����#6�|y�*�	<P��������C�.�ri~����[�5=��UF$_<_�*�S��<�����H�|~�����$�CZj'$������Y-L�j����>����3#6�+jw�,E�y�Y��F��1�S�+��,	E]PVK��Y�//������35YK�QF�%s�������&1
j���W������g7"���Z�.������5��7�^+���X���16�t�I��'f��3!t�.�A���6y0m(	� >y�h���BT������������n�i�\��SO=Z��[(�pd�m���1.�9}�C({�`\��,��D�rN��S��2��h�M�f"�7j����tOL%�h2�p[�@L{wb
NG�����l.a!�����h���u����^KN&���)^H��E�;�Q;u�wd�����$pWn{�P�f���i�����*-Ddw.;<���#��.-H@L�tw8���4e����)�(�.������IVM��E6�J�H���M-�h(�I3;����xZ��j����{I���T ���c�T���MK���}�	����k��zfd���v�*n�0mZ��vNviq4��/�����{������������<�����K����W���������9�_����j���tM��n���_�'��	��~&��e�+�(�Qe��6�������9Iv7�Z�	��)��|���T���Nr��-l#[���Sl;'������I�,��M�!g�����3��x�4[�� �t`x���z��t}&��3������	B�n��v����uy�	������0�+��n���6��fv!����'���u]C�E��v6���@fgA���[<�����=e�r�B��I��AL�f"�����>���t�L�����b5��6�b_��[��v��9q4M�L&Y���{;s'���sG�k��1���f-�(�mM��/r����F��1����6������9u�%��3A�hQ�e{�tf�f�z���z7�#�z���M#�*1"�L)�L�q�L������h� ���~!�{@����DL))���w�?�;f�N+�L���ocmV���6�V��z�]Z��������������$�l��2z��)�I�6*�1B����~���yR�0x7���O,ij���6�%7����g�i-���'�f�w2�0�+��]}�YybS�b�O�I"
�b�����h!�cq���T��r�8K���N@M��V�����P�h�	$"�t��ep�b��@�q5U�A�E	h�����s�nw�f"�JI��O�
�-b�5�c��z�|Z�h�PM7P�-l����Tl�i��-�<P	���+����#^(���`6M�3[^�q�m�I�e��S��q3r�O1�s���|ZO�m�7
���B
ll��m�y�b?�S�=�����B [������h&���X���p<�ze0��
,�h6f�|����_.���_�u��(d�:>$��J��u��
g�G8TT1���UFwi"��'Vjce��LV$�������;x�����3�sq.��}�_�b������L��r�C�����E�����^(�KzJ����	�'W4ud=��}Nb��8z�4����js�_;�h+i�]���iDd]�5 �����#��
���]�����N�h�����/��0=�X�vmne+�q��_�`��+]��"���_��d��l������	�	ML�����6H�����A@�O�5-)����}���,�"���;�BR}X�D,��K�8� �:�Ii�#y��y�}X�:@���6
�����|��~/}���?�i���<<b~��_(�Y�6��)�4��b����V_dc�=�kk����'�n_H���\[4	M+�LT���	����+y��_�7V��P�e��w��%���s*.�d��f����z����������SU�;g���x+��0�	���7���j������X�u%"w�&"c�1��k�^H�469e��L�)v�\1p5��%>z*>������'�Bv�,����s���0�\V-�g6�9tBW��Y��j��W��frA�fa��[N� 9��M(�����f���G0-(�r�7X�������������� �Z���^�*~����Z�/DD(��������E��x���T��5}����6_y>���,oR�7�p�a�JZ������^�M�~��b�"y��9�Z�x�	�^��16h�CT�)�Af���M����R`3�p�2�&��.�B�����3�=!M�5���5�:�R^L���6N�9�4}R!y����lV�-�@W_|s�Y(m �mb�Td�����[�3�����{	�,���
��
�����������Z�)���6��Dn�k,Heo���=�iH��[�u��k��;w��b��	8n���zlQb�$Z��H�1�>��MZ����{m���h�U�|�HQ��MV#n��'��h��V��F<���e��7��X�=6����gE�[j�=���!-��J*h�,'r�5��I��<�ji�T2�S`�>/�eT�j3��a�6���R�X��{%G��0��f�lr��Q�L�����$��y&�.�B$��,���'��B�%�ji�,��	�_��o#w��d�h���[H�����#�`�qptw`!tXI����cmHI�p����Gad���(��
���58H�F���2�EO�4�}E0�wH��SY��6���Pj9��}�x4/tgZT���N[y�y=�$�����w;:reH�
Y�94��F��L3A.�.k�w��2�V��hvc�#[Q 1��IkWo��������w#��?�����F	0|]�����G�B����MDn�����"y��K�Dd�
Yc��;:�HQ�an���8�"D'���iD�[�-����BN�o���|0��BJ��PED��6���4�X�-*w���w��9��"���0:t��JK�����	�@���kJh �{�f�*IW��bh�Z�����_/d��_��2�����nJ����L��������������nS��;����S�L��eB��\�#:u4����G��>��_I�8KO��2eV�� ������zc�,�'}4���P�����L+ay�2J'+���.�tJ��E�nT��&�5i%�,�z/*���*���;�]8�@L��&oJG��)+��~�	T?�J���z�W��X@J���'���~����`�jnt@>/���Nl,t+����n�`iW>���H�:���E����2����v�����b�hv���9���lc��3
�i��+�X��h��*����Cu�1���s�zmd����J�tQ���l�Q�oB������[&������X���	\lY5j��\�<���>rSL�������
�~��d��fOa�q�c�8R��\��9�P�W��^�)������:{"k�K9Yr3C="�d;��*�����l���E7e�S��6-�P2��7�����5����[>�l��1��M@�`e?��*�����@5<� ����K������2,F�`�T9��FW`A�H���;��j��7��@+	T������+%��5����l��%��TO��ZEW�y����2�����"(�F��gj�}�H��VO�0P��q�M�+X��9��.�o�=�[�y�>�M����`��k�V��F]e����h2H����5���E8�Mb/���iF�{�����EF���8�
�3��h��i��:6	��tV�(����
y�}O����;\^�aH����E���Tj�9Z���p�Jo�E4Hd�r�	�����epX��<8�I����EO�{�������	�O��vIq�8�+��E5D%X��b!v��A��n��'h��L@�s�Xj^(�'���D6�6z�	\V,��:�X�)N>�@�H�N����[M_x��@8�fkU$�����I�j�i��1�_�,����(��F�����qi08i���L��+�q��%<�.�ThD��)��s��Xw�<��,Gzn��B�2��
s����=�
�H�yG+����*�t�/����I���l���������>����W�Nx�Jk��-�Ij 14����G"�M�3'�jr'

kO���t�Ecs�.���,�)� ��:�&��k����e��U5���G�q���*��EDFs�|z��h��4��e/���&�ED�UH����	���71u�5�
�B�<�c�a��'O�|�9��������LB	�n�����@�{�/���W�{T�=b�B�6|M��C p�!?/����2+Fm�JFH��)j��G����g�}|��]r���k}^H#L_8aM[�kV���`G��,���J��H��=s_(��is���S��Lz��y�V[�HT�M������v��&�����P�3��&���|��
��2��>/��h38������������#m?L�{I�Z�B)�M
�UW��p��c�k]TbA���{/�8����z��I����=�/���v��TV���������+���8�dfk3��i��X���f!HX�O`_7�����/��y���=xjr��j��t2�H�P-��.�3%*��4���sT��'�R?�r>����V� ]��l����M6�Y[s�\T"*���qm���=��3�L�n�U�����m=��-uj�����7�6X���J3rJ��G�O2�
���������x��Z�^^N���-���Ok������YI��|��:�O��8�����'/���g�#��u������!0��?�Ddh��A�}���`����&X��e�Q&*_&2i7��x&��"�H�2�]4��H�g (7-~��F:���ISp�cV"�}�*�P5��04������iKW"2����kX�����L@D�x]	�W;W��@�rW�Um���r�@������32������>o��z<EX��y����&�QZ��R`J������&��6��c��^'���<���b�����PL���i:�<����)�<w�'b�Ej�M�'&bV��������E����%P�y?�B��i&)/+���FP�H�C-@R�J�X4���z�H��:w�hz!q�u�]��������7K�������bADz�������,H[�������F���\�g!�s�Z
/��Wy�\��B�Z�e�5�	��"�8�$����[g�
�!���������4a����Y�H�6�h{���'�!I�6��Z�~��B	^j��a�b������-p���l�����g����	;87���������j>Y��o�f��}4�PA0���}nM��
�Lt����3I�QrVA��Y�;��b�	��h��Va(`�$���|B�*4��Xsne�+����c�Dd3�E�F������D[!c��fK}���gE�_����M�y�v���S��f-���\�Y����������o|��
���U�������`��_v{�q���_����GG��y���������w�gMv���~�>�:�����6g�f�[
b�tV�f���.;��Lx��W�7�mQ�$rn���I���/?��	����b�o���d����D�����P6��3O��_�G �/
����mj�r�G���H����(*�UU���g����^���G[���������^�! *�u9��B�]��B{����T-�+V�H��12�{;��6�]v������Xm�5������fI+6W^����w��P��4�A��v�����T�'_�
/���a
Qq�N�(����L��@f�.�d0�&7��^(V�p�'N����{��]0�-|M7��5�L�n����������g�r����[���t)��'E�A�x���=���������H�P�Rg/��.\��r���B��9`��A(/,k7o���#<�Zp����&�s�������M��{�:oD��Z� ��]^(�{�v��yv���=���O��k%z�$c��|���h�I�@g�p��y#x%P�������"[���a$�X*����_?��Z�H���(��;[�����X�9��b��rVoy3w:+��Iy�����|�P���T�m���n����|�y+C����m�y��~P&���]w��K���t
y$����"+P$ITe
�kS����#����*iN�:�(�2"���������!����\�!�5��w��~����������/_o���~���?|�
��3=�������m�xb<��t�����KJ�0�p�����i�-��9�g}�����_�e����������I��	���
�f������)N��r0}�.��+"��4��}��,n*q\�@P�L�j8A���rMDL�Z�$7<���A�X�<~\K�"����>�ml���%P�xed�W
�S*?/��Y�,S��ld#W -�����_�
�Nl@6e�����O}���&��y���D��+�X��u����)��X��?O;�F��@��-@���8?�������r2e�D0����
;$�E� �d��gn����
�_�k�a����u�n]Df�Y�����`����u4}	Gx�5dT+���4��T��|��X���
��������Lq�n��XQ�C$�`���
������K�hv�L\�V,�'�J.*<S�d�\��j�0[0��D��������hL0|9/�x��l�,�[��t����*L���$K����������vo!3�_��Y>����,%�i�.	����2��r��]��l�B4�i���'�7��_�!n�_�>�
��K��S�����g��1������IjG�y�h�d7z�
��{��`�0��lX(�T+��7<QX|jk�zhzS3zS�l�������:��3Y�^.��+���+�)�
�w���j��Gq�waO.�a,�`���x)K��^&�5Z����c \`�o��Y>��M_&H�[���l���e��H����oQ����I���i/��v$�s]��ja4���|�uD��H}4��LfK����j�������dB����-a&���wZ�d��������Sxa��d���w��~4�	L�u�%�/L�Z���6x�����
(J�sj��6�X"��	� ����p!��v��^
"���Kv�qcg�T]�@���^X��a&���
.�T��M��P���)�h�0�����0�4��L�qZ��.l���D��`�D�L���K;�`�	��F��>d�z<+�t���U~uv$i"z���/&Z&0�<&�M���F��N�]�U7�Fg�r�����AJ���-z:B����f����\j���D��"���1�j$*��?zs;���+�"#SV�;�u�V�Y�"99[8����0uS��>E�O<�f9��M�0��FHy%�.s��)Gs��'HBN����@)7���<w-����t���LY�����*>+q�����3��Y!Uvp`u`#:*�	���\�b��r��M5����n�5fQ���SG��\pRcC�������L�~���o�N�P�� ������� dV#L6Z	�:#�g�BH��i�P ��O�@���+[�=�D ��P�yLwd`sS�y��5�sG��{��r��xwr��	.����G��
�����KI��<+�bI�[7��-vw5�3m�I�Df�|I�W�����$'��>���>3"9����o�H�SZ��cs��US�����_�`1oL�rh}��F �T���H�"��Q�����V�*\�4
�D&����U�=S��x���G�;�J��=j������I[}��-��-�L]>�	D��x+E>��LlL��0n�����u�"���Q�YI�J/��-~?�OnL'�;p6*���(T���`���e
�����8JT�����%,��$�)k���.��n�ra�2E~
&��-��M�9��*��Y���&�+2��M���/K�"�9�Z�����q��n���o$B�6yu���D�&%��=Z�pI.y�\��_F��7b��T�=5���<2��j�z-�h��)�%���2L��9�b��e���~�h��78�p�2���U��E�����d>�`�\�
i�O����nzj&j�ny��Ds��w�k%s�
�}V��kG���)��&~�������m�������~�D2YT�#Gc�$������e�R�����s�V��;��#��?A$)�dCu��q�(bw�$���}�������_GU �n���8��<�	v]���KN5t��#�a�,��N�x���H�����k�������u��q OO��v����R��LMpH��Q&?/��(��^��G�U���E����R:��	q�����*��1��e���������4��O��g��&��z�~%�s5�R���}�St(V��vV�!�b&f�hV��
.��X%��YHO�]]|�e�x��0%�?y���&���^���5v�I�!���k*-�=4�5�X�����bC�����hk�\a���J�K�$�����, ����<+lP�N�F�%���QE��rl�+8X�N�V�@z�,�~�g!{����viR�$G�~N�zN��P�0q%�;��q2UM3�R��x�m���:)��)�K�,�=�f�����A.z����Y��&H����8����.���%�Z�����b.����4��P�|�9��X �Xy+~��k������!�p[�Ietx*�Z2("���w���k�0E�����t[�SOA������F x�A_ft�Ymi�9H��tw�, �c����`p��Dd?���7�S��(�������8�Jnht��m�2RX�����+��>_�����K���� ����@����N_	?�s��J��75K��|��G:Y�
�X�]3����r�^7/l/36�3��������T�w��-d�ggX������L\F;|cN�@<���Cq��4����&R��
�V�*]&"s���Js�U&����W��]�Lh��}���x^2�
������T�E5�w
%����MY!����j��������#H�j����-���t0������������\7UA���]~g Re�|�4����`��n����U��2�{ ��_"(�i���D�c&Q�G�QBO��$��������A��g:���F��
�>K���gY�LTR������p�ak�%���)���/7����53�����Vw�?���kST�de�X6���9(0d�zlz�`�cLw���j�o!W�VS(���~�(��v����f�2����	��)��Nd��@��k}��k �=W����R���g����S�vK��������l��|.���i�C.���.����m9a[N8������$� r<a�0�	"���O�O�-���r�}�D�'�W>A�x���	6_O�{;�&��	�r���PsIB�'l�$!�	c�������}���T���3>��-�0�p�H�Q�;*1DW�>����"��w��af���"��1x�a����b#1���"�������#?�X��m�x�r<����z/'���O�3��	"���O9��_�r8�.oQ����c�6��G�Qg�8���{>�f����R���v�l!������8�o�%�RC��v�E��e,�Es���x��d�?��7����=�3���c9�x�a-��!7�kr�gx���p�5
�gX����p�5�g����a��0�� ������L�i�mA8c[��9����qkR{����4�}��s=�Ra{��?~,UTU��f.����O����)z�7/E�������>���E���y(z�7E��������=��w��sN��/�	�����/�	������/~	���������YW���r�I�h0������D�G�G���
-��#v4XwG�hz��<�HO5��J�G�E�x���z/��������?�������&���_���U���R��Q��H�+��.{E�xpqt=7�&s4��l��,W>9������xYs4K�����Lf~�zG��%4���`N����*x!�&�w$�;����H6�r�/������J����."�6nY�c�,�Im#]�u�����Xv�>�b��y(�0GT�!�5��F4�xR�^�8�?��?���O;���T�%�Cx`"��D�2�{�ty"����H�5F��M}�6����s0�����&����u�,�DM 23o�w�3��GII�HnS�������M ����vy��<���z�n�7I�!w�&>%� ��]����mA���K����"��	Q�I�2�ag]3��M����������,����W ]s�N�����������:�&�gO��
N�x!��
���~;��WY�QFS7eoY��Q+_'�n��%FBuYP����h�f������X���gs��]9���&8X�a�&���&���D��&�H��\n�2�h�
�p��J����jJE	�vj��Z��D������1�����ehE�D�eY�4����h��/�������������&/L#���$��6����5
�gL������:x�H��n2j�l�v]�y+��dg�1��8��@�0�S�}X��D�!�kry�������H��?�Q�u�7�Ez�C��0��sP�����L���D"���>VW����'�������d�Oy��6�����4!���vW��"������h������t�X,�����d�������\0f;=�j.H���N NEsQ����|YO�#����4�����(Wz������v���bu�����X�u+N�
�I�#�@���NC *���m���i��0�����	�XId�d��gV��Ee5�[w��!��:P%��y@�;��0b
.��TS�y��|8��&*��IX>�$�vB��d�
|�nD����F-�LK�q��k�������_(�&��&@5N:\�4��p�s���f_$*���w�TgO�}!kQ��;`\�b'�(���cSs�����fR[�����wnFK���T�Z2`����^(6�#������w.B��p�����=��!n�y���>ok��O���p��D��d�v$�\{�B������h6n��(������;W��D�X����8�|�{�A��y�?Qq�9z�
���������&P�ZR����Y�~#�M_dY~�0�$E�@��6����N�I��ZU�����/,�>e��,��+�^���q�����(��b{�){73���G:����Yx�&v����hcJ�X&�<�%�D[Ay�����8�}%���zGs��������Zw&^	b�\ykD%O�"��w�T���*��@Y���p����@}�@�Q�F�eV���-�zI$������%��Q���sw�;������~v�*�Ff	���{!%��^�5���9�+�O��c�}��t�L�2���,�K�;y�>�|5�����u��T�S�'���.���k0�"I1$~�!b�u�*=���{����\#�1���D����4����`����*��g���K�
Rx�ET��pvg�Ew����D�����
��){���)5V"����@��I"m���zo�q����&?+Qe�����:Gt� �\
������f�9d(>+��
Y�7�����:R��=��%n%���=ao.��c{�M�,-��]����S^H���I�i>�������e���X���i�%�M
L����U���]�T������:b�w��'�bA��;)��5������I1O�[4��e�[�;�v��
V��h����"���#�(J<L��C�����(���n������,�Tq�<De�u?@&���ET�p�{�ZW��H�����>��������x�p���Q�H�V�O�!_!��d�����C�jco��k]!���\��'p������K�`d���Sn1v�����-�/3�����0��C�r�
����LYZ� �B�	���7s���)"]��^tV�"`�e�K�����b�������|�y(x��:��p�x�:�|�����	y\���w�z� v�B�A�2�gY��S�Q]�mlYF�Q����W�F6vK� ��S���A�T������S.3nl!|�6�o�����~sQ8D�$�E�(�j��2/'���q{��m�F^�	D���vK���(z��O�8�9|���I"5:�y���+*B8Y�[��FN��^h0�`�<8�M2�9�2e��X�*�"K2R`�����p��
b���2�f�B.^HO<G����G�D���`f�g�D��PH���F�`��Ud
$���y�z7v><����M��*�^��7��77\I��)�$�la�����������	�g�.�#*��4F
�����������[G�H��������Ad�@[�GG����&����e
�-$�����R
��~��<�M���80�>� ���������<o4���0�$��H>N���$��ZV4e�_h����rcY/HT�s����(�`Q��_QPR�6sQb�_�$���C�e�,���Z�����#�y|����I_Q4���2Z��"�����Fc��d�_H�^�a�H�U�e!Y�u�i�E�f��q-uw�>��0�/Tdm�Yv���-����(�8���gEX0��n4����)�E�.��-D6���I���=��������*���}���
����:������2W�l����/D��i57�����~V��-@�%��!X��Fn�m;���������U�d������8�L-��W������e��m����=�m/"����	0OL�(��+��[���o��L}�d��������%�AG�>���U���g�����0����U_��c�e3�����_Hv�QOJw�3�d�/����}so��mc$D�M��}
�7�m*��������4nGn�#_�$�{��Za��������z2n�f.����)�����>���?|��5/5b����$�X�|��k4��8�D&�L��|.6J����B`��$������S/46M�u��#G(o���En�����Q�$N����/4<�X6���p��Wa{1{]>�"����*r����o(��9u����qL�����U�NV��uuK���Ai:�kS���w�
:2x����B!(`�=��E�XXP��;o\j�4��M ��iv^a�|ST���~�=��f{1�W����r�?�K:��v����3��B�����)���}����"�O��9�Wgl��8r%��-�{�	���(���]�.��3L��:Z:�bD��ig��h>g�<�gr����2CW��E$���b�;n��r+/&e����[���|!T��u�vT������:i���>s�F��/:���~�o����{W����kv�ZT���+�����O"��o�Z�Q����h)(j/C�qG�B������sa�����y^[����qG����qK�x��=	���6%��-���U�R��h�d�o4$��0�a�9����&�����VY�����0G@'�{|����t���P
��W2n��ON��B�[����[c�d'�����Mu�8�}�2��]�����N&��Kh������"�#������$��L;�b@T�H;q����@dz������R�����p�wseE2w��o����,���}���"�������9���B�����v�M�[�s��a�O����$�Ye'�q��,D�����:+�6<��9��>�|��G�_���F�^(����n,�����|%+��0��F��������[�f�����9�w}��MO��w}c���w+�`0���]�5��[Q���{2�e$�v�����doEeS!\u�!7�I`����M����l��`�/Z9�[Sp��^�G�]Q����1p�1�L����^�Z��g]�gx�P`�����gS�}�H���^�4h`�M`��c��E�2�2"x~O
�-d>�k�� x���Hj���8+��[������
�;X�U���W�;l���0En�P
�Q��)3$��k0q�V�A�����[��4��X���Tp�~�o*����S��w�����[���&<38�o&������ri,v����X����>oH�{&���t���
"�(�����m������	@/�|�k��c,���f�56>��������t��_��Xj�#
O�5��]���Hvm��	}1j��K�Z���]��R�B������2�3��o����	��������XX.�7V�����.//~���S��	@��7�6��]�����s���^��r�f6:�+�S1���}���y�X"
N��������ol1Iv�_(�R�##��B����&�Il�
��+@�������/���;��%���dqN�m�����0���`3�����4����VjS���I�~;��5��UC�B�W�
-���s3GOe������T4�U������+�D��ro,����2C.�P]���yZ��J<�K���������� � ��i����`7�D�T�����s_:T�u}�`�M`og;��.V�K����`@E�!_�5T]�|�bm�F�]����h,^Y>�gP}4qee! cpB4X�N��\[����{�MA��o|����;��l��S�d���������0T����)D�B�Coti�=,t>�����Ozw�	�evw3:�N�?A�	<�eZ�X�F��yd���COx�|
���~`���U?���AV�q��Y}
��c�X7C�R�b_�|x~`h���
�t��f%�M3�k�]��_�����e��1��H7���N��������s5w����4�(��8T�m����$��X�
��Vo�h[�>8t�����
��Yt�D��X���;��P2���1s	O�|N����H���$�y���@V�7��������|i*�� 	�����C�����������BgB�N��=��4P��W�O���3�`�����O����3}�����Ge�&n�4"/��D2�M�f���T=�$E +�^(������b�&�2���]�<�J:��Q��|���i��	��h4Q
b��(~���:w����d�����2���+�P�S�z��������Hw�6��yu�."��K�n0v�G#v���u3��S��3���������7�:��P"j`��5��6�
_D�m��M�{&������Nbh��&�C��S�����?L;{��3�bB
c�7�A���^��;��"j2��{��b/�YY��z�����{������S�%���#��A�,����g���6p�f�l42u�D�
��
�dcn:�jod�l�2* �h���H,�^�vz\�0A>Y��e	0��w�gUs7G���}���0Z:��b%!n�3	�<�������v2N�B�s�� #���>�$a�8!�g�����s�@5��/�T�������6jpX	e�~`������w	Dd�
�4�[�b�x�
AF���"d}���iC��j�����	����Y?�.����7���T�)[�����"�p��kHvS�� ��������p>��f(������~���7R��m����E��f�5?��?���P���U�F'��f
�����6���������P8Y�?fe���BL���44�W��de�H�6�F��?��4�����C?��
���Et���t$�L��4x�}�e�|����4�C��S
����5��v��������7uc>'�p
����J$�7���AD-��?�O0X3[cP��y3���x�vp��Bq�}��fJD���,�����l��*0t�[g�q�g��������2T�y�]/����Wq�pD�Jb��[�o/2�t�1��l�-sk������be�P��w���H�������
�s������)��`A���)��4��%k��N+����t/}�KGr�g}��`���s�>p��j�2��vy������x5��&�x	&8����'��T�����yf�0�v�H�����e*��KO��:�I�����u�8*+�i�M0����+���S�����rar=J'��w>�a�2��05b�B��,�M�M��#���,�l�����>W� ����5��y���[:5v�������l�n�I�v�U:��MZ�������HPq&D�
�

\�^
���U��[�[���0�<���:>o�m��M��-mB����~}��x2\W�kG�����J�P�E�P�D\�$�@"�����;vSItF��w�����r5!
�k�s�� vcV&��Vtn����LBb2�K����l��k�^�	����87u�.nB������t���i
�q���A�����1�����P2��vW��h��v ��g�b��|`V~��+C�c|p>���VoH����gf��3~:����=s0C����pA�i����@3+Z�rHY"_�:;�`���X�������a
^�T�m��u�
T����u�HBh��Y�Q�.�$fJ����Ty��ZH^o�2��� {?�@���q��t�"� �sI�g*���xA��x��i
Q��Y����d^��+�Q�>���9�V2:���Q�����/"��>/�u���;FOG��B�����H`��<����a��^tZ�"��Y:�]���
�HY����$���t�m��\�U��D ]�	�1�7��Z�g.T�.����(��.���n�$�S�b��>����mW";���!����w:42!����V����	��>���dJ���Z��(���(���
tt&�<�����y�q�����p��������}�;1�U������Q������Hv7��7�!-���������l��[sp��j"xV��j"Mn�S��(|���9^�����L�~��xb�~���5��'6u}^@f�Aj���y#s�5�l�]Os���rP��n����	�Y���\����u{Ne��?��`oq�G��ZX��������*Z�K�p�4��
AB��� -n"�NV5�J�Wc��m�nb��om(���oh.�IW��(s�s3��CX���Z����$�,����j�r�e�iUb��u���+ln���#��?W�x��\����-���G����J"���k�_b%'�������fT0b����2���~����f����`���Q�f ��b��E|��x�O�t������2�tTn^�s��$h���	t^��B%��������e��H�j0h�u4@��[qX���v>��J�aC~^����=�����@T�g�����#���!�����>�������u�_�|B�^�7p�.gT"�4��f��0��;��O"c���c0�������@� ���_�N-5�W����
����>����L����b*�1�x�5"��cd0[�'"-�$�YdA
)�	��t>�I�
-^Hl�h���qRWO���;"��o�����S���S��y���e7���i7�Zh,<�&U��i�����*��~SF��7����#�^D����?0!X8���`��R�_�K��_f��kb�T���y7�����7�����	��W���E�J?/"2���_/u�`�e��~���o���-�P'Y:��ce�����1�����Mk�D�Q��u�����#]�X�<:a���&�8��v�� ���Zo�T,��?�4�`��F��E��cry��>l]��5���7���n;�	)��WC���L��*B�\���?�:A�vVp��%VuU����3��%c�9$��Z+�H���Ap����9o�'��6N��o����~Bb(65�+kq�
4��u�N�s��V���
���#�{���>�1��������L�4�m�s��W��L��^s~����_*�4�g�e�j�W�����M�y^ H������[��
���%��)�~�]��GIv�� n������]�m�9�r��uZf#�2/,���S���3������0��@���E?w.�5��Hp�T5��^H�	������
dGSL��P�|�Y%�|��B�^f������0�%�|����?�l+���jZ�0/H%�anf��a�A+7��^�3���07v�B��if�5�e4����l�O�% ���d�Pn���e���a�)�C���6�l�2��3�-��i���g$�0��q���6��wG�|�t��2'��fyQ{X�W�������n���8~��vU.������@����h���������6*�b� �/�$��*�������M���(��$�����@�ob��2��@�������EY������,<	s�����G`C�(�+���Xwm����>�#���^&����(��ST�����e����1��9�C�0�7�$zV���v����EmN�������U�y��M�t��V��[����tRtte���=O�q�]���?B�N�y��O>�n���
����77��&���</��K���~���9��'zjs����N�q���T#t-��"�7��Y��X5�_
�v�����i����i�
��}3d��`*��P���$��G{�[\�Y�m���&y�0}��u�f90m��-��r�u^���wD���ig
�T1\�����P����	��"�Es�[��]��O`_�=����{����>3��c!�6�m}�_ �-����}�	x�aMbAO��9��Z��o^U��(�����
l!��7C��LD;����z&%��������8���Y�����e���7�q���m6,�G��������`��H��J��x�`Cz���/�%���
N�2 x�H�P��N>6W�?����}g����X�s?�%6w�����Dz���B�L��S�1�}r����X<��8,[P3��?�5|�(���W���G�����
�iJ ��9E�����{p;����O�L~^D��d"[{A��v�B�wb�S�����F����,w��GT*� �/�M��aW8q?�Mp$���Z���6m=#>&�K�<KH��-H�������c)��b���g�/����?L�A�K��s>�$\�����B�$�8���#�P]5/h��������Oy�����8[P	#u���*�9Q���k".���'b1b+yG,x<V�������m��o+6���V��;
-���P�1e/|mtc/��c�����Y/�r���M�I�{�A���q�L%v�����aksL�y� M6��^@I2]'����kW2�>�p�N��$����1&���[����l���d�o����������B|�����$��n���S�
���B���YD�����/��M)u���h�����{vU�5"#�j"�����s$]�bWV����dSV����$�:_E�V��H��,����#�o�����Q��.��F��OrxGu��{&c#��F���nvX���7�&u��RI]A/�Euu��-�D���<��u�rm�:��\�U[9p0�n�\��-8�4��YY�9���W
��I�8S	r3-}�Xu�I�z)b_���;2�&�:��"CK9}��r�;��cE��S����sJ���F2N�A�*G��
������eTud����L��4��(�dK����e����m( ��'M2C&_�Z���=�8n4��mAUG��N�K�,��^���9BiH���Bn��7*�#H��f����L��M�{~g�+����DA�M�F�_f1=/T"��# �@��.�r�Z~��������g}h-)�Px%�$)P"��^hKT9P$2�TrT(��D����0H4����D�*G��*kX����F�j��KTV?�����-)��W����dl'�3��f����u�3 �3��g��s!?b<��������H{^���o���z�����x��@����=?�����?=���ytyv;J�qm-U��J�k;J�7��^Vj*�V�K�R�~.U�WK�f�U��9M��v��������O�%��s���q��9�"����k�����d}r����]zn�1G\����o_����Q��y����9���)�������^l����-�����������?�j�o�����l�V���x�/�������o$�zu�>���V"&��ub:�i;�n~����>�
� dfF���!sD�^������0�b�;v��.�a����>�Q^6�;���X�A��tx�_\��B�z���YJ���"�6X<���f��n�CT���[�N���#�j����e�'C[��3�t��D�~���I��c�s0\x�8�����,�o&F�L�|A�FMo����:����&����9eWs�,~�G���s=�h4
mE`���|�E^�*�	%�d��t�E���-#�"O5����������JJV:�W�����t�m����t��h��}L?]����Ij�.���jJb��)��L�?�K���z�a��~���%Y\�yW���0��6#�VT�u���r��$���G�o ��~�Y���+��qj��h��'*��I7�P�����d4M)�/N�����5����?��{
�j�l���9[�n�.�$��c��L�����5C=?���t|4?�^Y��D��HBpH<��P3(%YB��j�K������?,=��$7�]����f|T�����}����Z�6c�L�!3�^L@[�����h��s�iZ0|�M�Q���������<��Q57��_Ih4�t&�zA3,g��&���������
�c?/&������>RNj:�Q]�d�������H���$�)���M���~
5�-��DTr�*�!��j]$"7�Z��Q����P�xu�dN�e_�z��3I@22���bV�"�Fg?@ie�N-Ne��6���MGs�Z�Ok0�"�T��+��|�ojs��r.,:T����\6��)�m4��{P�aA��-\���@>+�Hy�A�VdA%��a�MYN�����o���������$M�@� (9n���9QDf���������"$/�`�y�$ee�z��J�z���B�8�T��K)�7Z��9��*aA�d���M�S����Z�"j�_��?VI'�E�v
hv2��L��Q��R?��`u�J������kK�����^�Z��}�M0B�k>������&��������'����p�tY�S���M��y���U ��C�$��e=>8����������pk�2�M':[�L��NS �3-d�X�	Fb�=W"O�R������*|��D>G�1���M����,J�|i�G=�����A>�	C@W
��
��z�$�?�����I�]��a�����L�jZ$���d\�EW�<]{���N,��z����;\�'m��L=�DD?�"~q������
���se�s����{�H�s��lX��mh~���CRL��,�e�&0]��y�_�b�(3VQ(�Q�v9"���BXPBF����h�����El��(����8L9��h0������I���6����X.������Z���f�����j��{Z�����(�7����/4�u��������izY�i�N�c����
���uy����t*o#V4�����+��,y]PZKu�g���g����R^KQ�|i��PK/�]Y\~E����.���{pG�HByh7��EA�HT�fZDY|>���{����	`�����_|���`��t�Q�<d>z@T�MBg�b��������$tx������c��J����LQG����h�+
>��GBk	�w>Ml����.��{���=
�+�`37��0V�L����)�Kx[O=Z��L���p/�	��P���c	�n��������C�hsh��`��%,d __I�����(u�����Jd�/�e3^��J��H^`op��}	l����R"x�����a
 Ui!��&tn�[��ER��/hX���9��=�l�v#e�%7��}�(�S��ohx��R+���jquo(�I�vZf�xh�+j�i�-�E2`�R�L�lb�*���M_7�5���&���d�_��������n�R�6-h�3��� ��~p&>�}x��FDj�4$^z��Y�Q�X&�n���S�FLH�����>�_h.�0�T�qk�E��J�_DB�B�O����������]�_��F��D�v5'��fh���	�4��Ab�������A��v���6�)
��O���z��uF��4���M!��
HmlFx�3
��BiK���	��������/����g2�<�|_f>��hA��[t�
��a{]�,i�/v����H�wK���t{���T�~�$k�\�5Dy
�z��:0;�H�,H��v���6t���T�����N�X��p����`*nW�f�-�I�F��s.�)��)��5�N����K��I���Xz��O��^�Re����O\HPuN��/N��f�\��0@c���2���J�Ow��`�7<-�@X�v�N�V&�o9��7�9<����N��V)���IQ4A4�*���e!.sO��t���h��L��+�	�1�����?��G����5�e���h��3���m��vi�&V�>m���X�\�>���Yf:Z�i=aa�2e��g�>���{�I�:D��%�h���<�l�ZrU�H +=ko���il�#�
�.��t�����]M�3+;$�%��L'�>��l%nNZ�����T>������Cq�^6�MMZ�T���oq �Q�	$S��4��`��)��)���,���(�t�5�5>�mn\&S���,y�L��o�b�&�%��bm��y��+7w{�	���T����t���H�b{N��uz(�����wm:���L`�9L���?��!����4O�)o��c������u!"��fl��v�����jm�`I(�Oi}��B k���T�Oo�f|,E`]����Ec�@�	fc!�W�whu��,�����4k��3��J��	u]7N�'�s )�|�~oz��Tzcw)Y?8,{_{�6*D��M@cx��w
6�	���L	���UzAC�7���������JF����[T5-���BQS�v+�z��D"��\s��l���>�'W��n�~��]Y��?������L��j�����'e%�K���/�j�m	�E
��/*,��R��������S2��E�/$;@u��aV��<���c����Z�a������2
�#�*������X6��A���{���� ��7���SJaop!���v�/��c]wvW4?BO���)�<�06�r����a�8���[e����V�
P�����|��V�p�{��G%����N�m>>���/���:4o?@*o6=���&��ng2fZ/�������U�/4��&�oNT�DD��U�.�342�a�"���9SE #�6�?��gExTvN�c���Y8�nE���Y���E�����T2�>?���M�2��0P���]���u,q�����ztP2����7cc������a��4x��;��L��W�\���������sC�"N�|�h���e}W�XI=������.�=O�9vB���
#3��p����I9���%U���'���l
�63��~��S.\�������L�v���
2�5cWjE�D�������P�8�
K��U&�.�,�������m�m�$��u���&j�=���40����u��
�|���p��~�Qy�s
lf�������s��-V1�k�bB��$;�oWXk��VH�QgI���P�M6~1>�����J�{>�������Z��g;�C�g���gb"�@�
�^L�i2rlg����:�a`-1�j�~�Ej�4�t�~��kEX)����Y�+��oU�����~'vJ��'I��X�c�,�G�n7�^�u��^c�YYq���g���� ��J�K����Uzdx� �u�1&�LT�7��/&d���[��j"0�X��g���[�U7�_!-�Z����N�o�eR���n���bx_}rf{st�����a���D��Zq��~E>S3~�k<?@|����`��Kf�aS5dvjb�V=$ ��+�0X�oE�Y:�!����F�����}>Uu������;/1��[���c�8������6O�;��Y`�4��v� {�8�QT��tU7�������i=8����lK���0U�0�f��J�������z$|XQID��U�\������sK���;,n�NA.�����b�Cw%+�iM@_��]�_LH�y�[��jM��z1!��]|��lP��ra���>�����8m��IZ���\�_���E���jr�E�eh���wD,�����B������ ���[�x$����T�_1��T/�)�8�����������}�Q
������]����B�Eo�ue��0q^Q����[Q���3�,��	�J���qc/\�O�{&�A����-��&�y]��x���.��9����@���ow��[/$%���p������DFn��Ud�����|��0R���mz�>$e=��>oT����K�IPC���tu��O�����&��-��p���"I��u����gEQ�+�[��r��=��G�wy���$#�'K?otK��w��H,'|?/��!J-jv�2��K�����]*#��U����./
�K���J�=Xg7/|!f�
$��E�n||x���&e��q|�ij����r������4�J*~��K��*+�2����7r0G5Qq�NjG��Q��g=���&
�������%a����|�H��:���0%�	����;L�([�3;ld������	@Z�����v���y�D!ov���\�J�Kf����
L�����{���?5Y�O��Z@e�D�^�s`\x%�����6�K���D%��<}��9��o�xC|�c��aA	\lY%�o,�������M1��F7�bP�V��]�&)6-x�+H�~5�����L�!o2���e`a%f��H'i_�=/��,	���� ��������
#��l�^	Z������rmW�P0��ks��s�a5K����-�t����'�B	�6$jP�#��2��<
���sr��k�����@��F�1���}��~��p$��'<T���f���B�W�'�{l���C��l���:����R�[��7l�lnL`AQ��"�7�>�����#�.�Ho���,w�����S�T�
������i��u�������!��y`�J���7�[�>��=ko��3,(������gR("��)���jSF({��3����#;��h�Xh:|\^L����c���N&��g3,��Aj���fW���}����"}�O��-*uf���9�&����m�(��=�fZY�v�y��!a���BQ��)!�J���47P+��J���U�+��	?D�Y��ba����Y��B��K2n���fA�<�K�@6&�z�.�,r�60��S�|���np���7�V���
D����*������v���&���L�v��"A{���������S�v�/E"��x���"�X�?X�hD^��q
lG�U,��m
�{{��yn��B�2�#�'�W�y���y��K�40T��.���W��K���3�����O�sj7VP����S+�:0�����$4�����j��pR?��������!����4�.�hlb������4}�U���a�*�yX}u��	��:���?zt�1��.i�����|�������!ZN9T��t��]}���"��:������2����t�r�)XB<	�1g�O��@����c�E�YL��+��������=�x:G�r��:�
)��g���?��������l����1���.��S��Ju����*����	���K)V���&`����IKpeu�����#*��_0?���3�B4d��Npk��n��7
�#@�t.%Qq�~�W���% ���P�#�����`N#6�Aw��"������������iF��M?"��IX�VKM�J�oj�>P3%O��+�F]������X
�]�q���L&��������DTb;�W�7`2�xv�?�v�O�s(I�lW�{(Np��c��B�`'/�}e~�	01��B=?���\(&��U�:���=�C�0Z��CM&cz�9��;�Q7���9�?�2>�����Ip�dZ����v,'i<`��f���@Dfs+qi�w�=KH�I>\U�j�A��z��FzJKm����y����W�K(��Hd�1lP^,�N?�}�E_-x//�Hca��4�'�9��B��k%P�<'����o.�8�6����L���nd
_��1cjf���s��	d��J�
�)�f�KqW��,�$�9�&J-��"��C"��-�0�m���9�h�j]�]G���N��6�����=o$�NR!��&���2��}�(j���wX��S���>t��J��{Xp
��k�W��X��
�G��89BA�.�j���*�G������o�W��,DQ��F��SD��jfnW��Diu��U��v��b�)���0v��u��.('��l��8��_���,'�5{v���q��7��Ej���d�3�P��%=���L0���h�X �B��)�P���b�
#(����q�k��EEe��	#�6�����B7W�:�VYz!wf/o4t�3b`�:�bED��\<#�vE7	�����dV���=�������J���	D����R���_�Z�� ?/���2���7�ef"
���~[�K`E�"y������}��M$�^K��@���uW�-H��>�V,j��a^Q%z^V���.
���HH��2]o������f3�J�,�f��I�"�9K,l��g�h���U4��5H�H�@��Id_$�;�wt���� ���gk0�{����yB7w:F
��%����C����2�e/[��2dut���B�ad�Qv�<��'(�K���{��n�B��%�QK���������n\����9�,�H��:�q�]_Wv��~�z�~3N�7����	��E\���������Y����g�~P�5��;�g��E�:��M�6
&1�Me��S5����B��Y���M���`�;
������[mN���7GU�4w��d���������b��xQ�b�{W�NHq$S�;k^��G]jc�bP����)z��9�s������-��L*��'�����q�1Hj������G�~g�o	��qJ�D��]�U����k���{���g�$���}���:8�6���H��4��PX�8�p�N�"n�m�w�)o�k�����f�K�4h	�U!(�}+*�:
�D���{��-�;#*Fn�\Q]�=���P�;�Y��IjU��e���+�^���^(X<�X�#���e�����v�GBN�p���w�����Ttz�dC��^������jW��2�������o��ggi�����k�4��V���H2��|�(nL��8�E�{��+q�:-��di~��D|.#A��R��lu��Q>�:E�e
F����UX�<&�pV����\1(�������J��{'
���$�����)�T�������!
N-���
2������� ��U��L$._���.���)��X�K�;��@�$Q�5(�MO*���Q�u�,as���^�������t���5�)�t����k�O�N�5�������?��{�����������~���m��n���U���gl��3 �3���h{>C��� ��GO��wm��%���of���}���v0b��NR&)�$���'`f��r�L�c�U,S�|�)��1&�)^0{
3��l+������d��+1E����d�)b��FC`���\b�2y�,%�1CNn87�7FK� O�1�QJd��H�y��zY6T����\e*�o��s��#O���dR���������%�&Sb�.�I��NR_N��$��|��Q���M��A:`����[��bUW�@�����}���{�,D2����q�`+���3	H14A��S�d����`���)3��y����Y���L���=OT��QX,*?/"��w�P(`�C���	�k�@(��`���r���f��^g!�/���;\�Y*��}T%��� )�'RCg
�y�w�9��/i��,�����kX���
q�h�2���8(���_&C������-��q�3����D�����j���n�0Q��%{Q��2�T������m_&����(B������k��e��#�FEn�2)����Ap>L��T,�P���o!���a������d��0f���jP�������e��%06�2�w�2������e<�}*��K�bq�'S���K@�������
��+�
�$q��R��/�Y�2Q*�Y
��[�|�}��k�hE���gB��������Mf�8Y*���F��%-���#U[670��bRA4�L��Vp�`�0��`&�����)���
�@$��6������i�3�������
\���^�d3
q�vP�EG'�(���n��'7�	H���
aa~�`�<?��c3�����A���?6�`�\+d�0�d5��_4��$�~��x^�{}��`	������Ru�2P,S�]pR��.D2r���/u��Q����������0��D����`"t�<�e6�Y��{��D�
L@������j5��L4��@,��&0����@�%�
����
�h��&��G�Ti�V����w������k&b�
O�-%�����+dU&�m��;���>��Fw�B?T�]���,+���<�e��^��y�fsE�Q��,��\������n�������L�l4,{B�O���]��<I������i����-�l	��P���Nu,7���S���b:X�-�}"n5�������B�^d�;�E�;��e��
m��\yP�6��Ns��C(���9����~!��g������_�d�7�'�cu�0_�������L��UN?Z�����rO�)����0E��Q�������Z���pRW0�z����k�����|Y���������v�������T�f��4>w�������L�7�x������.or�%��bi��{��i�>��}����&�o�sd���_lge�H$����\�7�{��U3vViW�n5L��[������������WK yQ�+�
v����1��T[��p�����%��
^��$��q%S>�xw*R��(��`�N���C��@�{�7�)f`F�o���	��7���E�����v2�7��MG����/Q��d��$�'Bv|�$	���f�D
��5�P��lz��@��r�s���:�4��Z��wU���dGn��$?K@����J�j�vcE������j����4����Yy�<��)
��M��$t�n;����o���
��(��Gg�G��qP�>e ���U�
�$����7Q)����;f�<�\3����T^+Q����}�KthB�� �;�T #g��1t�gd�����#?�de�H+y6j��E-|���\��:�&�����\;�=��/&���4a�Ne�Lg�����D����g��1@{��Yh��i�F5f
'��p�}�SN+J�JH1$yT8���,��S���2�bF���u��'�CSh%4���7I1O�n��!c��~!S5T��$�"f �aX3 _,�>$���|y��tl&�S��Q"�9���������_:��y�H�l���Y��x���
���}�(���t����B����d�.?J����/�W���"Y��mM;$����Ru���H1�����d&��C�:E2:c�N��-u�7MMj��b���=�/�f9��������h��3�K�0��'�4.�]��^jQ�IVC��s(��|q���4��������t$���9�2�CuX�%����9�s���(�L��4�9���1��IrTE��m�����g ���:�������H��}���?7��Dw�c���OU����>G�w�D>�F��	�8����@��$�)�������5ltq0D����f��a	Q2�g�\���"=e|�(j���2/]	r��F��P?�4'������N��2����6�D
m6[5�e�P�%|�(�H_��Q5C�B�,�	Z��#�Qs�:zj\[+��qo���d���1���</2S����Q��tTK���%�P���f���Y2�0�u�"��*h���(�lB��$IXw�!��Ly��X��P���>� ������&7?�	�)g/��n{�?�P_�{�����6�G�8�ItQ�of���1�X���8+qyv���n����Dr�5o��V��v�O�M�x�.�������2� ��N��v.r�S�%�WE�i���`%"�M��<5X��B��r"6d��������%�dp[���e�����i1o\��C�q�`��
n��$���d
�q��2�8��������*�*����A����=
�)�V����s�=+)��+7����p��b!m��	�:�!:i�9#]�[�m��Q�� }6A�T�#��
�d��	7�,���60 �<q�v�(Q�f�&�fD"��y�	�4P�#��I:�F��RD141TBT.�,��h �Bn5%���No��>PD�b�zXy�y�+[�����v���
��/^���}�k"��x��ZA�QY��\����Qt`��"��lTA���P�Jr;|��&1�t��.��r������BT7�t���������n�S�9���W�]j���UkT�}X`��T@td����j����Yd�������� ��S�._"%���]Z�>g%B��DT.A�7��w�KDx�0TN���Kr�h\YUV����/�����[���G�~<@���������KF���!^.�G������-�7�W���p�
fe���
"�PRJ@����B	`!���v���������bO(�
I��<���7����Hk;17�b��Y�W�4��C��������p���]F�M�UhM�Bb0���Q���/9�5U��e�0�	���n�]R1p���2�N��p�^H�
��������1��L�z�[</F@��*��[/T@,J_v�����:��S����"��
4A�v�`j���?�sD�e���YS������.'?v}*rt.h���7��K{;�;�����D$�iN��j��Qv���M[/z�Od�N<f��4��!�|�c��7���B	T����\��7���n��ph��H6�{�f&"2�����,�*>/�2��q�NeT�p|={8�EW|�� �c`p����e"#"�u���iC�q>��W(�a.5
sgO�!"�J�E�:_����Ji#��F�

I����G��l��u
���T��R	�7|�X�>�z��#��{�	��$P�W�\6��$�1��I��}�@�|���`������5l����l��#�L����$p��f��2��?H�o��P��	����;���J8i_�Z����0d_ �d���Z�Q��>#��/���QAM�����i��c5�H>^�^��Dd$���.6���%��W���S��b��������c~��������.>���y1��x���������-���mO��=>F:1��~X�p�n�����9�41�w��"����w>����rxK�1���\j�H����51�R�A��|�\�T���#*�y��>Q,��]����QH~�M�($?Z����)��GK�!����~b8~��8�p<?|]�~������i�q������b8��_���tb8.���!��#?��>����X��s�1
���Ag�.���I�!��r��|-5�&1�����pxOv��+?y[����T�_��]G����u}��I�cn������Q����6f���&���z�p������S�(�����U�{���j��Z7W�x��������G��An�����^������\wK�����?B����!��n���u��G�����#�|���b�>���^�,����z����G����#�|�X�/��b���^�oK���_,}\�k4�����>�Vtou1��y����[��h��_lE�V�b+�z[����������Vtmu-��i�g�=[��h��WlE�V�b+�z[������v�>�Vtku)��Y�G���.D8���	�CaW��
���.Dr(�z� �C��s�
��myr(��Z�^K?���Z���H�_�K�������Z���H�_�Dr(�������s-������e�qy�����,D�j0u��K8U����^?�!r2uPe%XY7�������Q�!o�-��/�H�<y����`+�<:M��hV�D�.e(a��3o�p|�M�y�a��59�a�C7���$in{�����#�Q��8�$
�S-\���������YD����J���o��Z&a�[��nr��V@�F�m,$��M8���B4'�C"��D�S�c�swz�P���FB�P��;��q��"����P�"�)l?��i�(> ��&���j�,��B&0��]��:<%2^i�&�� �n������G�NV���tO+K�>�8�8	�,�Z6]d#"v�T2u
��R_'��@l,~}���qR��I`����]'v��u����������R#qF����CV2O����+���a2�y��.o��'��3��I�����M�+��X��c&�������t�R�0?����x�h��5I�"r|�N�Od0��@��,W�0fM6c9�PH�������c���~����������o�}�L!����8PAA���+���K5�,��u�uvr�p{)���/fUM�t���&j��$Q�����]��54�*���������DmK��I��z���u��*V��,�]��
&���(�m[s o4��L�4���A-*nV��e�~�i6�GeC��O@N��,�Zq��Nu����D���Y�����,�_29�1��*�|8���p����RC�����G���}P���`���q-�`w�Ae�wbg/��VF�d"R����$����E3y��<&?�
&���3��Y��B���/�h&�{D*�8�E�y��J��+�8�=��F"�8�� m.��,��|�:��*���j��OYT�	�U�&��v����������OK�����v��W�^l���7����(A�n�J�Z������"�6Sy������<���-P�$��J��b���]T'�9 ���;m������=6�}Lm�a%�����mA��U2&����!K��I���,���&?/"M����J�W�?���$u��U{�=��+kG��T�-@������u�� �n�O��lzF�J���������"���?���H������x���7+XZA�2�\�b���;��;6<�"C~Y����Y�oy����n%����c(n�����ip�G��</�������W!�p���Y���uh'�$q�MA|�E#��->�?���5H:J�Y������D�?N�+�?A�b������`GL��3R��7�����s��w2���~�B�W�r��<�#�J[C�<��h�iQ��E�-�o%���#���h�!
���X������U����u�	�zd2q�M��5���1�Q. i���?�:�EN�O7�g$��:�.��d��5^�:�Fc��JZza�	����0d!�����L�f�!ZnQg?�V
= d�=/}-���|l�B�2
�� Cv�U��������U�f�24u�K�&���y2�E����<M&cdc�-�;���)@�T_�����J�`��Py���_&o8��pj5E�����9�4W����W��B&���y�yU���H����|0��=��E���N6Uy$��M=�6��&���?��}b�&e����<E����o��
���
�I��fSI�u���X�=y����Z9�Kt^��w���6!n91~�d��
Y>
�~�	�K���!�}g�][���pQ�t�V�1�0�9�M��9
b�G�Ot�Ml�0!{p���W"���<��h��(��Gl|	����#�o���I����"�cD<G�dj�:�(K�^����AeC���U�sjW =E�&��M�1�T2�>�H���{2?�J��^������[��`��?�������B&3#���n��V�,,U21��g������R���Pt-�m��;������f���O�����x���g�31�y����IF�3XD�~��s�,�����:}�%�9L5O��q�������r�;�@�B<5L����%�l(Y)��G����S�ji�t����h+�6t9��y���7jM�P�]�5�d���-�
���K���M�B>�&��[v3n�C��e6�,-C����(�%�,:8��76Fc+i>&�?��C#w{�d�`�%r3}�4��S�M�X���)�b���<��&���{Oi�$��S���J�����Y���*�Un��%�t#��2l�s���1gMd�R��W16�[����N���N���$dj�e��91���Z$�a8q$����&?/"���E��W*�A?��Q�N���i)71�]H�7������;1;~~p�x!D���n�]��='"��ozNb�� ����&�v�r��+�n{9eI�y�i���9>,����������4G<�/=��Q�\<T�w�iD�������������>.o��i�����O����'�v`�(��a	��(\�����&2���:��Z����+��`���2�aJ�p������C����b�^��v���=@��y{@\�m{@\�}{@\��d]��B����PbjO����$�=F���.kqS�Bjf~3�/����8��"��+ �BA*c~�F�����/�z���e��R�"L�>n�a����T��E-���~Ju������lS%"�O�����a���*1��EE�;�!T��BI��{����S2y��0�k!��q�[!REXIbo|d{�j-��0e
�l�	�X���*~���'��r'�c��(�������OZ�f��ng`�����^�����nr�����5|�y�)�/����i���Nv�d�A��#Lyg��d�+��
k^�W�&V5�����j�!����z��%�(]��lZ����L�/$�n0A�q���x�H�q�X���|�C�&��~/��9�����*]�nF�6�f.��o��Qk����c�>�����P['��V�����6�F��	Q���@r���7�:�@#�pg1��B}LsHy�X:���l�������X>��t�l����UK�u3�����1��a��Jc+�+�kN�T1�8��������Ym ��	��H=+�9�������0��	�����{"����f)@�&H�'J�`f���
QXR>���9���y#z��JP����)}lh*�n�;tp��E�@�9B��^m��1���pr������������}p^V "����������D-��#���=�{�+P1�o
P�R���nAP�Y�b}��_���h�n]?������6���m���3PWnG����?����Po�������x���e����,�U�(5�
�DN[��B�����p�h
�[_I��=?~Fa
�78*-d[�\	ds>��`>'DY�*mO����}8hf/C�qfy`��������\��Y�X��_=q>��
�)�u�{����t��
��E��Z%����K��F�:B���C�/\f���+�� �l�ZE"��0g@'�#�oC-�r���P
&f�+���y:�v]�6�p�s�v����^@D�!����4ed/[�Tvw'@��!8	�DI<��#p����B��I
�L��j���h�D0�w�����o=�&�V���X�=^�H�
��3�x������z�R���y�qw�W
]M���"ZYN���q�V*j�h�������s�b��`���7|��R^>�~��G�/9lt�G�*
`�w�����$�������*�u9�~����]E��i1��m���w+�������y<X��Hwr���}�1�UQ����d8��"�?3w��A&�*j�y�_Mv��3��!1���z�6(�wh���)��������,3>�qj���@�h��������H���6U���TI���K�}�H��:8�"���T�f:� ���e�[Q�9����!�B�d6��1<)���`6� m�w��:Jcx�)8�*{l@��"��
�k�(�/No�O"��R�R�Ai�,F�n8>�wO���+�%�� ^�_���-���'�����E���'����\��c9�##���c�Bc���En���~!6���Yw��D-��l��	��%Qr,��y�s��XV"r�������[���1���wY������f���^h��E�����a��������G"���C����/_H���.�s<����D~�0Y����� �5����[�l��	8��_exc -P�E���Ls/_H�����j!�1��2�9l���js|lLP��Y���{�����f%Z�-�8�o���-7�S�r�b�f�!}(�1x%�,��0����Di4\�f���T|���/$�=?r���`x%���kc(<�X���[�}y����I*����Tt!���.�����7���%�.8
��y���x���8>7kaA�8���6�I�+�g�h�ok+j���<'��x%"<C�;,��Ap�|��p!���v�*Q��-��p���_H�}�w��a��
6\o`�
�
�j?zd������r�;xX�J����_\6L��>�:����:������jO���#�|�2Fs+�F,�^���)D�#/�S���������M#����}nz�M����p��h�o���P����P���2^�j�m��l��G�o����)2!�������:/k���a����1�az`��;}��T7b�[a�6�1�r�k�V��~^H
�F�)���"R���<�����w{��c%���j��?o�]��Fl>E~
3�Ro�����6v������G�����M���G����m�K�"��a���^$�HZ�����q�)d��:��N�d�qF?�M{���9���P6��~
*��m�lE	\�5?1����/$ ���k�_�ZK��E�:���AC��a�hv�u��q��De{���WX�	H*S��g�t*jJ.[g�[i2��|Z�~4,��H7�r��#�&�1i��%��~����/`�D���H���V��4����������?u��%h%-l���_�q�"T[��D��O^;�K7�O�;�����N
�a!M�M���f���$���f��*��UDe�bBE�>��M!�\���Z���!�V���Wf�vr$��E"r�
�|S��0�@F����������L_���R�����4GZfu�����a�aY��|��b��gK����z�m�/��^���I��nIl!��g�+b�0m�����)��h���+�����&�O����h�����LA�n�9���C�h�l��t�^|�������K�����w��gk�}��pH�a�N�7�s�����8�*��)DO�=�
lh���
����C'\@,6��+R�m��2%;'�Pa_g!�<�����b���yA��	�*e�7�A;c	�����j"i��S�|,[wO|;�V�_eY-j��	~�C��C���1��:bK�/>!�mk@&$�`YEsz���M��8�`'��3�*_K��J,h�����m#�9��vF+��T�q����ca�[0�GR��� Z2.��pC��5�X�V����h�a;q��	��*�_:��/H?���9��|�{����G��Vp1^e
�o���>TQ
�P�_����?Ft�L��}�?F��������8OA�	��	R���C
��c�HVQl�>z��'��UAz����n���v;?�� ���m�5���������������r����SN%��D]�������x(��@����^H^L�l66;�A�M���$@X���.;�CI�_/�� ���W���(�b��K����a7���=�[l��p�!��E�	�5m'wK"2����Prx-,h������'F�2-�z�O�U�O�y#��}����]~^DO���yR<1aE_8y�?�q����JD������������"���5�������m���!o|�����R~���������4�����aN*�bQ�:��'��$�=iX�UZ����a��c��7���<��I��]Zj�?��*��1{%0�fb�`�8c�6��d���6���r[�
�Z��H��6���mAQ�88�|
JS?��J�u�P/��*J`C�������2pz�G����n� =�xk��Y���`>���<�6|��0���RW�_Vt�/V�B�\�����aU��H����VA'x|^%�z�����/[Q������8q�����L�Y��}�|��4���-�"Jzp`��j
��Z�,a�������V�O�db��e�4����~�:��k�����)Q+S@�j��~�������mX��qX~�_-H�:5���������X�<m�a~���`Z�YOS�7���}�)�hW���*���H���9x�R�H?�Nq��U���`M�>��xq��<���iD&�ge���n6�qRK<�fE���a�d��-��$W��%�0�A?>�!=� �@BD3�5��K a��y��:����@"��7�p�V���+�Z�J3a(�7��	�R#�"YP �g�d��QI���Ee�0e��X�C������=b �A�!"��G���5gA�!�����f�c�^h:�a!��R!DL���� ��D�[��e�#r����e���
~T"�y��,2]�i�g6����y�7Ra�y��G�&s�� �$B$yR���#��!!&W�2�n)W��(?1�O���<��<���t��[�>rA���<-���s�Q�vB�1�O3Z�$7qjZ��B���H��y.>:����!h��9B!E�w
"</�k�_h�p`A���@��Ka(����o[|y=�����=��7�0�r
#����Dm�$]�9��O� ����hZ�hh��o�z@V���M~^��1��>P�-h-h��--�����n/������T;����l�hZ�^��>�J��,�6v��|*�����M/W\T���q['5����F.@C�>	�W�a!Wf_��b]XO���+��v.��?�5r��"2r��5;��p��ic�p��=m�GA-�l�G���&�y������,�9��&&-����s�I�
���E��p%(9lX���?��T�.�����NFP��?�-�uLt*�j�����e�Q������J~��_��CM
9	�s������X�z���g�H��Ptz�\��&���`Y�1���vZ�0:��|���V��cw�o�;���=��,������M��h�;��J0��P��9��;k��n�
p�s�2�"����dT6������3���"��k���xL��n�:b���g�]n�U��j�5���q��+]'��W�CM�Jx-��&�#�id8B��Ng�t��L�-��E��T��7�C\lG
v��"�J6�9]���:�p���_�:�j��I�0���V�$����{��
�Dd�����"���(���3�yil/��A���u�&R�D��+�7.��:pI�w��H�:T������>"?,|�%��d(w�Mu���Y������6�y%ph�"k�U}*��y*�����rE0�ZH��$���G��f*���x�<o����j]��	����|�rn\jrp�����`������n�(�Y��������JiI���sr��?�
����Gv����b�l�9�����F�h*3��������H������-G��f�I�	�r	�NL�!i�T���9�_�
bT:#������D�Or�r^�sy����l��5�����v��iM�
b^s�d���Hps[��XP���F�d�vo���x�6/����>}tE{M�i���G&/=/���c�fQhd^ ��i
;�iA	�=��M�=-L�bNoo�9]��p�(��lK�4Oa4Cz~���i�-d��hJ������]`I[&nK*J���0�)��iQ�lSo�� ���%]����C�fZ�q!���1-z�?���5�U�Y�+|��	��SXR��-iAR'���&��*�`��'_KZ��8�-�i�$aI+�����=�D��e@Kj���%}��n����%�Hk�����0��\}�&L�$0?�l>�Z0U_��jJ��5���L;U���83��f���^��|�Em����c�&+3�h��A�'��j����7������L�Y��#�$k����9zFP�,R��)�h&	���h�����IrD�A���.��De�;����&D	� ��!>x�d�D��*�����<�"�Jk������d�����YpiwYe
���%�
�L��nO^Pg�-�se�#(�M�KI�W�T�5qU�y��l[���C}1����Z��N�*a@���3�QVA��?��`�4p��F�}y%�8���x^(�Q�W��T���L��(�S[�s�E�H
�)2��a/I�� ]K���%��W�FZs��Ii#��HJ�`_")CI���H�H�L�	''@{a�=�"�Hj�`7e�
b%L����y��z�([�j����-�Q�<�R�?R%����8J{���	��"D��x���CY_c1��'g���M�y����W���m}�X&Ais>R%@������^�bE^"(�A]��TA-h��M�<l������T�eK�����
���,S�?>^H=����*���V��!=�f+
r�i�t��W�,`�qdI�NRmy*�����w.Dt�i��������B��7��%�3p�"s����k�O�n:D$����,�h._��s2��u�lF!���
c���yFc�&������f��J����`�_d2y��"k�#�����AT��cMD����;9m��E��n!?/��������a���ES�	@�I��;�r~�j������/���Q+5����&�E���OE�|@K/+7WW�b��zp�������\����2��O�3���?{|Y���~�zg2����L|�}�B���A�E�yy���!���Q�8�qk=���@
~a����p>�Ad4�����'6�����LB��Q���o��Tc�p����Z���c�m/sv=ovE����D�B4t��.�����Q��2��O���F�SNQ��l��J"
Y{���"�A<����?d[�fD��~���E��6��H��2�1��$��$)��>>���O�a!���3V1x�������%����(bp��3���"M�����[�����&�������n/�[cpWJ�t����5�"����r=����J����*�&���HSV��e
����+km�w��@��P��`�N���%�O�z��L�j(ikAX�[������. ��-�PRWg�,<�� lC	�`~��������I��.�KiQW�k�%iI[�����K[=y�i�C*J`�fn��z�*r��4�^4�y����,sB���*���=�	pG�D>G�*�I!)���+�	}�-OY�<o����d3B�=9����,�`�p�7��g��wG��O�"���s��tP������m���EL�����y�
O��4E4�IU���&��!���})���|~(����*�|~���f��(?/��!������sJL�u��2��g�/���j�p�Bd��m�iE>9�Z~�����-�C����'��hN6�����-���� �R���'#y���B|vHK{S=�A�r�����lnH���sC"�����Ye����Phz:po�'z�|��z`���\W1]�~5�C��5ah\W1]rfK\���K�t]E��-��ms-�v��os-�v��os-�v��os-�v�bos-�v�Bo��2�UJ��g|�e�:���u��Dd���.���F�z��(H�k�<u�����5���55��~�������?�����z���x�)�����k��H����{���v}�����?��M��{~��?�]QZ�'Lw��?V��������������A���W�O�[~%��.��u����~3���F����C���������JD�!�J�=��R�0���:�s���h�4I+A�p����L����f�e��x�D����`�Q�'NF���}�Q���<!����m����^H��?����m�����q��eI��I!j�F�S���R����(��q�O��%C���'P~":��"����e�l��!<�(u�3&Lf��I���L��m� 8��J�*L��*�zn���!~��@���w�Q�f�$Y����
e���Dd=q!D����17,��9��s�4s�W���e`�cG$%�Q��<��a�1�I�8m��� yP��aG�$]��c�Mf����,)oS��<��7�������������EV�Z���N�h�>T#�������o�@��B���2�
P�W����RGp+���O4F7=89,O����x��?v�D]%������5[e�����	��P�k���D-X�\��80�T�"c��`�B�=.@D����h��s���~�2���?�I��}/�9/�~��^��?������������#�}!}��u;���Ip���2���E?���q$S:u	��)��<��Go�����d����*H����
.��
|*J2�1��gkI:H��u=����	\zj��u;������nl�|^L���\������y!~�-����I�TP?���K�Y��O��4�h������g2j���+�bu]��2Qy�h-�{��QEH�s5\ ������,e�#�S%�=�����n��t:VW���1�o���V������Kop3��@������o����mo�*=u��?^~%"�o4�nCN�C����'9��;6�?��3�/^��^������CoKpW�-K)���o	�?�%
H`� �9����Wc��yCdj:ASmGR����lR]�U���������CW�z�=5%V�zt]<\���'e]<��n�* �LvyZb����U� ZP�^D����fw��r�,���f��dZDw�����2+I_����_�{A����tIV��sU$�N1���f�Gu�����e��x������tS�&Y���1�P����k@��3�����l��K*���w���C�7�g��D�l;�!��E����D3"��7���{q��-�����G�!�j,mB*��*�d��*�z��5x��t��oM�<���D�3�g�������l:Z�<���,)���J:���n QoEp(�����������y@A�y��
���|-�5%�.�W�
B�wX����T��T��c�a��#~��L?��������b
��\�g�1F�2���S��k����S�B������Q��3X�	p]��y�����KSQ)8�����.7$	�A	]^�E����-&��
�Y��+�m��r����Y\
���f�qa3>�����T��
y��0�~�+0�ut���jeY�I��d�H����P����4U+�c��1;���qV��U
�x����GT$`���Z�]gK��hE	��^v�����2�x��R�J3�Q�~��k���+���_�vm���;4#+��w#�(�UiAMCJ��#���WE]��<`�C�<����3���)f��3!t���E������I@EJB��'��A!*������t���%"��w�������m	-������bkg�����������w�h�����O����%��7=Z����h�
�K|�=>�P����1"N4���LG�R]>R`s	�t��n�*���~��'p2�efNq!I�*�����y�-W+�s|	����)���BP�m�b�v�M�V"��	����Ti���I�
�#�;��[�2����KU���d�@Z���Y5	��\k�7�s�����&�D���N��~W�"�b�}���g��
k�"�27}M�������(�q�/���t� ��;n�0m*H�>�T�M7��3!��>�a$d�WP�?�y�7��Wk{+D��X��x����"�:�s�_�����o�k�����3���A������Q��e�+��uV
���%�j�&�����`�]��c�����f��W���}v����g�F��~:��N�����N�_$�l��7y��"#�����A6��4�]T$�����#�����<��BD^g�����X�����tWu'����-@��=,r3[����{��g���"�{�4e2�u
Y��]�Nv6���@fgA���[��z���=�/�j�����E�� �L+Cp��X��\�����d�-�\����������;
���a0!����"���k��v�MZ={T�6��c;3��t[������|��z�~�1����6�������-���M+�}W����^������n����:�u�s����f�p�n���A%�4C�x�L����|���AK��BX�HO'�^N��R�u��9�p�16�sf����l��WE;��W�>���`H{3g��~�@X�a����Q�H��f�0�s�AX������r�
�3���uG����?�����^���o$�c/��=��@&�
��
8�������Y���8,�����b��s���=�=�N���D�;^�����@����P��{)�>*�MQOo]4�����4�[�;O7��#s��:l��e�i��-�j��_>�a�(�����q�\��������R�4nfg��bf�#�cm��Z����a/$`3�@��9v�D%�����t]�<��@-X�/�N�7��U����`6M��p^H
�����\�)<���5w�O1��Eo6V&�P�>�;l�x!6���m���c�eE�|���wa�k%��Sc_j�g��n�.U����)�����X=�l�$�*����������n�3,���T����$cA��L7�@�	��6�+��K�&��D�3�B�n������$�����N^l||Aw|.N�~!�Fr]x.��3�*�j�X)�'��=�O!!�\�x=��a?��T.Y�y�T�{��|����*	���$�<z���L�JDF���v�	�9=*Q��P	�PmU�6���zi��
���]��0���Y���������pbA���Q�\��B|m�X�I��U����jD�a��yH�,��I>��I�p�f	�����~��eII&�+i����������G�������$��_re�9��#��K,�����ED�A`������%������c�����G%������n���(2@�P;�k�<�:����^L=�i����]��3��`;�=��y����%�h�Q��KH�$�6WhT"���"����R��@�!�'��������T\L�"���5w/$��i�����L���<����������*�h
����lb[!!�|f,���Z���o�1y���5]/$`�\��G�U���F�����5%>z*>�~����'P��n�e�0�yM=��������;����X8k0�Os�`&+�z03�n5��,�7�������L?o9�7\�91NP���+��`zn��n�vA�D�#L����
�
��-,�u������T}��Q��I��x�������0�II��[���^����i����~�������H@^������t<��XT$������!j��� �X��c����� ��L���&�K��6��a�L�����:
��@��Y��b\W�s}Yi���09oF����[��(]=����X���	`kk�"[,���8������mXW�fL~.>�Ge��}��@����6��"V��g����?Q�%��w���#�i ���ai��J�X+l��-$�
�`���5�_�YD���3���������������������R�i
���>����+.H_����
@�x�MX���F�>b��>-��>G�w�+���Wi@m�e�627�F�!����m*Y�)0F�/�e4�a3��a�6���R�X�����t�0���m���Q~���!HS�MI^a�,�!Y!RZ_�co���a���q��G��{����L:9������V2�4��'�#�Qy��������X��*I��s���6�t\�C�x�dj��0*i��-��|���Hts���7�e�H&U��X��SY��=������(u��pcEr:F,���d���$�Md�,�^8��2��,�Z��F���f�Z�]�2��e�s�7�D�["�����
[���x��/��w����M��W�L�E��"!#�\�X���� ���������d��3��u������%��rN�6���<�����GONLx��a�c�jU��,���rKwKk2�3��*���	��P�z���K�q����@*�c�/ff�#��h�dT�f/&��@>�f!&��YG=��R>����G�#�>����J��wE*��UFV�m#���
�9������,bb�u���8+]��MMY?�xqq��o�O	�c��tp
oR�����h|�M��Xu��Tg~�~��6���&>�f�6�-����QS��?+��f��-5��
��|W�V�G��SIuj��3�lz���7Q@=����+����D�>�@[n@&�_d��`���w%mj����{g9J��3�_��g��rt��&����E������b�I\s�G��& �|�bF�E�����L3����G������2�7��b�dy���<��)�v������g����r�� ��~a*s�yT�Hj��~v�?W'�C���/�Q�����a���\@��4}kz����8a��9�O����~H�6P�,c������b��6-�<j��P�����
�Vv��B�u�m�M@�5^"av�/�*�+Y��ci����F��,��u;����N���+E�W��p�i���eA�����C'\>>�0��m�|�>�k9�yc�a!Y���Ez���G�l����s�=�Y�cH�6w�(����n���������*'K��1o�"W��q�����#�h��9���:2��"�����7�Zhb,/��at&)��?��=I=o���N��{/�[�����W�K�P����rgJ��� ��~���Bz7k�eV.�r��t����u�q�BQ�I���6l
�e���4�����^z��hH+'�V76�X��ji�C��_��D����}�A(�HC|����	���J.x_����%M�~��;�]f<����v�.p��s0�r�V�%%�t���9�h?	���'[�8�GM|*������NK_�u�_��n.�(���G��{��m�E�!\H:�n?~r_����������A$Q�f��.,��C�^Et���"$��p���R���?tg����������J���p[$��t��Qj��pH2��6R�e��$��C���������B�N�h.��.�E.2�������r��M�"���P��y
mH���Ob��E':W�:S�M�7���q�e���7jt��>��pE����������pt����]tD���=�@y���T�hD���tw���qB�g����A�����B�6��3O$>3)6�S���;}��BzP���1�U�-E��H0�#�zV�u��"��
��������8�����T�g��|������Z�����������k!�57�Q�DxO�@�f�e�u"v62�a���1E�"����Lb��+��UIw<���m�P���yud����s��
��d�f���l�dY>��B��n���)���
�]4�'�>�m�-�����V�l��l-?Z�6JH��^:o<��)DDt(C�b~�Z�W���,A.�_����Y�"O��4-��\��|��C��&L7���Su�_k)�����f���q,����dF��e>E��HUN��/�n:e���������(i�{�[9V���v���ij>.��dy���������
���]}]�8q��S��e���C��K���|���#k
�Ne%��I�V�\:�m��$�d�d���.$��H��|��
���#�1KA?��w�s��L�e�:�%�n���9�ZI�4?�E���{Lzp�(^���x�����)�K����L�o�E��K��wc�@�H�d�m
�c�|�En_Y�t�'�@��<]���A"a��~$��$���E�����J�1,SYo�2�tA�N��~���L��xe1�XeYo�w��6M	��q�?!���0"�#��>�IjS��E���FN�7�
�<c]����0�|@}�"���/���q�d
�:��Q�V�e���w���O��u������
\�P"X�Is��E�;nHQq��$o����"���2���W�����K�P@�%���Y�����7�~-��J��Gr'��uy� 
����������+�^���
�����'������Z
^���2�!~����.���BiD�^�&v���p�EH���5�a'2����
t�.��T. �-m���-?X���������c
��E��G�vQd��qpUX�	<��u�Ye�u��e���A�U��;��qXwF�������O�?Wd ������]ot�Sn�7����|�����@���|��:��7����L�A��#��%'�
��'��9��36���(����5�S�h0���8l�
]��>`w���1V!�4�
������qI�S�n��t���E�����Tm2c��V�B���>.,[e���5����.�}?+�Bb�������#�Y6c�8`�`@8�(�������nt����a���C�Qx�cpu�����(�2p�����7�����c�&�����
��>I7����u}�,A��nm��@�)P�t�,y�lZh%��`����F�s������*�`�CE~����w�w�3.���g�U!����&]�V�9���w�Y���	�z�3��1/�v����cth���7Wy��^G��*"�v���rv;�{g��'���0�]�v��J���-���}b������-��kln_��)i�����n����B���r��"�( �:J�O�����V9Iw��i
+���@C�(D����3�w���8x;��,}f�v���6G���X��+��1��+,l��${��E�8��V�ON�sfY���xH������?��@���"ao\f+�i)�(,�i�6M�	�����<��M�i��f�[@\�sK:��3���#�Io��K�E���m#����@4�.�	���*�D�(�n�uL�S3��[��+qD���S�q3�mp�a�lC�@
bc��"o���E>�N�!���#��:
�e�2�q�����>���+��.Nl�=.���l�I����+H+AxG��v���f�������T�������c�k1��S$V��:u���;
�@N�-t/Vt.
�������������v�������?�g
�[^iCGM�?��6�������������_?5��������dy�l���u?C�d��>�h��1_��r}���![��:�|}���i	W=�&{�d�h�?o�����7��7���F�/x1M���|z�J�T#x�H^bR&F�qd��F��=1I�~R�K�z*�D�"��O���/.y!M��n����R���y���G���r~
���AI<�����Tq���O%M�����A�����E4�&~���e�`�84��,x#I;��j�D�������*�2��v���5�P����%�!}+�jW�&b=�������`��N��c��s�c�LEM���B���;Yzt���W�b�
�h0+�Iw�� ���|e���X.����5p�LEt�����J3��o�PT:�r�6���,<$;~�����>/�)p7��������7k������i;��ul���-+i��j���#������)9�=-�A�S������`��L���\�=-�g�e��tkZ�Z=Z���K�1]��=����4t��V$���)=x�p�#%��1�Z��?q�rw2���#������0�\r��JD��lG9�I���7�e��%-z�������BB43�D��$��nG�t-���l�x����:���L�_:�>SZ�����T>�f�f� ��S
SB�����B6{z���dO+��
�7Z����=�H�a��q��"X*/�t�?R�>����~�lR}���BD6/�C=�e�E��SX��\.3�<:�T;���i���E�aR��Kv�i]�[���E=�dMEl��2���n�>iA����i�O�b����WWKz��oq0����4��)wXecZ���[�dcZPfL�+���V�w�~����=]�����5=��/�i!"��N����8�5]QV	��"��
6��iAI�=U��bO+�{����� ����L���tAZ���e������&�������lM���aM���5=:����.M�A�+,�B��N3C�k���
iAZ�1�&�:8�=SV[�CQ	`t$�Q��y�C�E��v�Zl����f���hE�L���<+�$Q�Q��E�-����bG/t�M��-hH(�#��@��D��Pp���O��G�d���m�^wA��uX�T���Y�e�|�m��E��h�������+�*�?��e&����-����5�H�s~"�g�������?�����7����g����?0�)�����E���!�(�j��������	�{�R��|"2�������34+��
t-N�h����7v�@����K��m[�^H�����
�}0���T�f4�$2E!��G�",>�O�S���Mj|�}��>��
��m��]/H�m��:����U�_��&��^l����c~"G!��m'2�!��� 3]!_������`�ts�y��&4�	=�!W�����A=?1���9+C�=�
t�
��T���m�����.�\�\�"#�h���j<z��#8%����]A��|�D������j��T$�l���b
�b
�[N$�����<#l������=�O�HS�+�>Nl��a9<5���+����x��H�<w�7H3:c�������h�>�����������l�o�����-���y��|[��i�?�R�k�E<o�y�*��i0�@��3����&@mWS��5��TP��0�����T��-<��c�U� �����~�r_VU-	���C�����2S`�����^?���N'{��yO�� �
_k�$��w%���p�_]	�Y��A�D�����\i��Y��Z0#d�8#~��;F�/�2fp�x�N�y�&�s�?��l�y��S5f���[M�8����T���OF\���b�q�d���k+JG?3Y:��� ���-��
"�������ZP�tE�n�:"�r��;(J2�|D���)��S���0�'I��O^
��{���pV�HnP81A���� A�c��/�}�lV7��J�`�w9H�}�$4�����L�3��P8�r%� h;�n�������WD�V��&XM����\��9�n���������eR�`��lF;���f��SB
��hG>�u���� G5_����Z#���&�{��=�sZ��5�Qr����,�[~>�O�ba�c,Ej��Y<"X�\A���K�M�&��~�[`*���������W�'.6��;F`���i�n��,�/.�~��n��2�1Z��� 5+�{�����?JHe����{���/#,�%?1l#�"�%���2N�C�uko��m���R�bj��SM����������]ud0m���]���}i^���4��TP�d��VK�?6-�o1��<�����C._�F���E�����[���xA�����_�����F�v\+���Yb��T�g��i��NB!M��#�j�o^L?��$p��=���l��i9�Z��Y>��n%"cb.�i����D?�4�a�g���k�e���Q)�[#Zh��+��u����<)k�Z�3H��*B��k%y��n���Z~��<����[H��VA(x[�>�m�������m5CiX��W��2�&�	���.������UfA��Q9s����,*���;��9Q�V���W�u�)*�#-�JD�.�������>�T��'��h�G���@PDS��z����Q�!�D��[���D��W��)6���so_�6�sd���S'L�����ey�������T����4>A:6a|�XZ
�!�4�#m%p����t@4v�U�:{�E6m��|3m%f�o���M�>�/�m�9Zn�����l�V�s��0�(��^>�2���h����+����2v!�����+���m������{��x��<����;��d��p��&��}��Y����ehG��</":z���v�2�B��6�r*��Uj!m����U��������F�M�����B�DSv/���\���T�����]��/�A�Jr?I�N���m��������U4lK��4M�g�E�!��4���� ���!JfU�yf>4�Np�i>�NK��P������������I��{EJ��II�������g�)�)�!F���M[g���,���v����n�c$�Q
Z�����[�����6��Y);S�9y��7���U���^������?l��V�Im�DUjO�E�n�(�5��4K�gK��;����� ,�����Dn������$A���-����y�F?�-i2�~�X$�����������3�KE�d�j�o;wA��@�uQ����v�Oz!�q�0^
r�A�lg��8!���C��V��-��	�r(,U��|���q���8���1[��}Y]�/��#���BD���h��;F��s����!^��_��Y��'�MW�
a�<��U����� �c2�R�%�YL�����a������u� &c>�;��hL?��(�*�F� Q7����s�f�!y��
h'�Z������"���<j������&��gg/q�e+C��-r�����G��|�nqRp^���h!�b�i�O1+����4�}�2jh�9�����c�A�t`��iH���|���K�gx��
�+���D������5yhY��/{����#j~��~�f?Bf4�2Zy!�m�s�Gx`�����<z�}|b�����w��������b������F��{�G�"e'��K�]�f�����3y����Vsc�e���_�x�0m�{����S��,3s�B�
,=��Li:��_Pr�K�n���~%"��>����R�8� �����R��OL#��J�PP��	O��eF��;�|�N >Jp�W��|H&"������N[�A�B�)6>�#Pcc��4l56��&Z%�|�Ja�w�����E^h��#�6_W�N2R�%y��d�edc������f\l����>R�����4� ��l�
pl���I�Z|���Q|���Az�\|#�L�?lAb��1�;
�KW"������3aL_���=���~�SL_��w�1�H��:�1�H�q���3�j��
�1���"'#�����n%KL7�9Rs2g��)z�5j���;���@�sL���q�����0�o$*��d�^��F������OY���/sn%]������xld�?�&� �t�G��-gr���x*g��M���[
��hj��Fn��	<�jIa��K��;����.v;iO;�B�L��������'Z�m������(m���\�w�>���u��^�����7�����{�1_��r�����-�U��e#|��b��sD���#b�y��]�s>��X��z������g�^�o��u������W/���� ���z}����~!��s�_�z}���R��d�@�1]�����c��_��w��_���o��:�t}�������{-���o��;z��)��c�?���Z��������:�t]s;�u���Z����\�������-���?�:�K����G_�bn=�������b� f�=�1_�uH����]�~_j�b��j�^��X����w���*�w"��������B���z}�����r���+�t=��+�|���+�|���+�|���+�|���+�|���+�|}��G��Y�/����������B����B������X�~\���m�����gi���,�W���'7����
��pC����^��b������?�!v�On�]��b������?�!v�On�_����tC������'7����
��rC�zuC�������vrC�z���
���_Ln�]_�������o'7��g�������������|�����>��s����?j��#�!~=��
��k��Z�s-�Y���������M��!����J��uM.v.4�v�"$@)Y����#}�4�,���a��0U��Bm%29+@�����	�1!rb�d���}�"]FM����y�	�^hC�F��/���E��[uJ������yY���������0���p��2������.��f�F
��e�m@&4��REr�E?����(7=J[�T��w�U�'KT���a��W�q�����b}������}x��1�|��r]�����$��F��:�S�j�Q�/ItZ��c�-��\�������*�����2C�Yn!8��L{�	m���A[n�q�$��@f�B����{�3^�L��C��D�^�L����:�q|������_��N�Q_����r���*��#�o�������@a
I��\j��G�_&�Cm4��D
E��$��;�,�y*���a?F��R��
?;�����U���b1�������*/�i�4�����@��JT��|L�n'�6�������N�]�~�d��-�c�kCog&k���&Z��*����8����EIYSz����[���D����&��~��0���E�[�w&Y����Z3�(\<�����rX��y#m��e�
=�`���Jn,����Ti��-�B�;����{�v�9��67KT3��V����}�h����G��\�-i����������ED�p�����p��*R#T��~�p?���p#���-��a����g��<7-�O�b�}����)=��`&�J�N��q�g����fjr������H��f�#P'���(	H�|x���1�����L���9"@��o�;=|�����������ptn�{�(�/��� �
�M8���6��28������Jf����+��x���;�����JY��
.��-�$������N��Q�g��I�cC7��58���L]&��
0�;J~����d�&��L%������t�=|������8����#P�m&��y0��%0u����&G��d������s���5<�Z0���������^�{T1x�u;�F	`m����l����ik�$2��� �5���6��V����/�;�{���`���;A;�~��D������B8��Nv"�����jA��@8��o��)Ee�������/����Y!���U -P���$��g6V�N,2�������9��i����_��8�W��7��7��k�2�����gE��;�D��"c������X �������}'���<�����Z���,�$e&�5o�wn�wi�c���*
}�,���a'��3��<��L�R]Hu��8U��y#�T	Z�d�����y����,�����c������K����5e/���
:��B~������ss�����@��F=�An�a�0��F�E}����q7j�H��D���A4cm��C��2�|v��@[�QZ��$=����l���O0l������Ps������3���|(� �~(1�,w�(\�������C��w����,��*�K�*�T����8q�y#�	&����7�Y�=��Y�&h�s��B������a���u���q��,�E������,�>O�0������68��}�� W���hw�+�V�s��r����-�?n����c�4O�n��y�`���u2�1m�>�� U}��CS\��y��o�D��V�g���Q82j.�4@��eq]
-��8��R+��%����t�������i����m��sx+I}(6+�N6���/��-]��������ue%�{����a'��H�|��`���yA(��L���2q�O���*����1��-7�c6����c&�@c���y�N��&�-6����2��#F2+�"�0�JB��d��u����#����5N�2�+h�
��d�3�>LA����������}&��/>��-���>���O�mlS��e�$��>C� tF7��+�����D�����0hz$=&���y��na������S`
I!��s��A�/����
��8���4H|d�F���s��VA�����_a�����M��!�/�boM�m�G� �DG�_��e:|��Qsv����j��(�n\��� �����
+��6[�G�����D� �����_8O~t�o���'Z�W���+�i3�I�����nlQ���H7|��{K�YQ�[J�N{����g3�p�����kA|
����~����\������1���p����&�5����d�J`U���X�POl���;���N��=,}OEM	V�8�XVX}p�%�y!�	O@v*`s�8�O"�T��:���������B�L%H�#kY���h�&zW]�u�����t��[��ce%���+@�����!����y�m�9m�q�
��_�y�z�JN���m��y�5S�G�^�|�R���L*I�@(�I"�^�S�'��	����"��Nm3��q�x�\]�����W�1��}�b���ND�(7x�(:"6:����$������2�huW
�����	�%;��Z�
K��i���X�E��7�j��hJtXG�*���]�������*3�z'������.HU���.�w7W"�OJ��E���t=���}���;�w�U��_������W���Pq���n�_(M��Fn�[E�����x�X��m��B��g��B;��iy�^�.R�'h���������-�In�
p&]7�0�OEZ��>����B?5��8����X%"�O�t�p:~���y��j�_*���}���J2v|
pCw_|J&"c`�l��	a�+�*��!{�k5�OE*��)��%�����to�]��k�����a��l���$�m�3�e/@��&
_�qI���p|-�gv�y1���e����4�0������ "{����?!Tv�F�����Z�zEY_a����U���U�{����l�*h�=<)	��%��-@j>=�Nz!����g��������v=��^A<vaE*��	����/��-�k%U�-�����g�5����5�&������knf>�m�c�d��Z	����!Q&D�+��@�t�y�/$+tO.��_���.��fe�t����~�����jA,uM���
6+�B��%����+�2<f����SilDEx�i��t|��P��	_���m����C{O=�g_��fwz88����G�H���\[���V��:C�?YP�<�fc2���YR>8�;n8x�H�ZJc��~S4%L�,@��=�'N�d�4�#D��������$'��_H*�:��B�[��e"��L��}���Mu�{C���>qg��^�
T�����qz�(h�3�S����+V0�B�t1��'�����6���m���3�RWnG����?����Po������?/4s,S'x�������s�O"��
z!}��;,Di��><�Bv;�e���k5�S����ZL����@6W`���*�����J�S|��q�����u�Y�0�vrZ�AY.�k�����)������p?q!]����t��~���3����Q$.������4���7�AJm�">.���v�U$2�st�1��6��-7x�`bA%���7����;E@��;��3�����"rgJ�oNSF��Ieww���������8��H�q��%O���|�BD�u�Z�wU%� n�o�.�77�����������^�
��JE8l�x%�W*[��+�\�W*�I=��-�+����&�m�C���^���h%F+��h�r����V
���r��K��o�F�S����/��h�_������qB�\��N��T*�#!����0@�K|j��f��k?�;Y��9����zS���N*����c����&��]�e\��-H����i>;z��cN#�|1�w+�M=��N5g�.�����<y�ynAH��H�����]��Tg
kE0�����$^F*w@{�A&�x+*B\�p����u&=�����m�4�S3����[�y)���wEQf�G��^"���)<9+��(��rE2��
F{��*��$1u���T�������BoE<���({/� 3�����B�d���rxR������i1�urxS��Y�����������X�������@D�n:�X�rxd3��������.$�T�~2���/lif���u+������V���[i������/���,��cwBp,7���kZ�"�Y�{Clz�e���+��dJ�1O�3�;�D��L5y�9't��\������D��[�����o��\��aE����xj���w�mZ��7Q*M�'�%"K�,�<�
/�_nH��6�9����\��x3Y�oS����������s�����lH����������%U��98��j���\���Fk�LDF&�v�S��vXN������L�^iA	h���������>L�f�M�|/p�D��-�*��f���Jd��$K6\�~=N��B��VR	��2d�7$�=��5�_I��Y��H�G��A�D���IO��:��r��D7����*hc���V);���%�!xf�L�}4�vZ>[��8��ZH�=�=0�n������`���I����Q�DS��X��c9�����<C��{x�,^����	��d�P�,�-��8}eI�
	��AhG�v��*X�~��{"K�b�^�������l��),x��[����D�����Q��-���=d�UG�<�2��+�F����gqa2��E�
<��1�9|�5������~��1H���n����S��:n�p���	_�j��d4�����a����"b�����ma����G���2�����fz`������T7f�[�Z�<^�������f���l�[�v���&X�;����������i�HJ�2�(���M�o6�C�e#�O�����a�D�{N��u�
��{�����v���kw����v	P^��O����YO�"��G:����p*�g`��6z�D��P����m�D�m�C�
�5= ���*��"�������u�jE"�RI[���;�JD�H��.�.�m��JT�'�*�-�~����O�`,0�0��(��
Ut;���K(4�a�mp�
��p�T�H�����8������6b�E��	o�+�8������L�o:
�d�pi!%��#����
���p'����v�c,^t������9|�B�&R�d�{q��L�����q�
,�<�������x����yGD("e|"oF���Y���F�+�^�]������|e�4�tl�M��U�06��2sU�nT �\f�t��H�}1!���y�FH$��V�Ei,�A��z��4���:l7�����O[���oC�E�hV
k�X��J~��"F��������9N	}��%o\�& D�v���{�so����^fA	h�����j-�}�!C��1zxE��u�r�q~i'i<[k��@���@�9�:
Tv&l�k5�1�*N����-�K-bh%�|�W���MthA*��OP����Z������k�s�	�
�N%�6� �5,��*���?;��fv5�����i,[7n��M�2�����Wnj�_9hX55^2E����������}[���a�8yOB��?�6T�CII������z-U"��_
a`������k�b
HE�#����i�;\�) <��q��L�%��n����f�U������:ec�����^�������R��i����~��ja+�����)��������VT��bh�_��E��F��W����bDW��������y
��H�~�Pq6��\�����`E���y��}D�Z��/��|�����/���<�-%����1�V�b+?�5�Y��pe�W�Hf�>>(N�H�i	�������������n'5��k9!�����P����L���������
%�_4
�,��R&"c{�����(c�,m^�E��7��g�Dd��*��&��J@U�\������i���������o���������*����o��OV��c?�q�������o�J+T_�?V$�u�X�L�~2��~v���A��>7w~��)B�gK�i�B[��yS��9D���_�����L�	v�*% bcA�a,4"�*�"XY�+=2�X�K	�V���T	�61�P��L$
���#�O���e�����-HjAs��Ym�3�[��f]k�6�|[������V���oETt��|W�����������rc��<O��Zdu�2��'��:�A����)6�J]���6^d"����5p���>��
e�*���.�����������2*J�K�.N���M��>�(f��I_�ip�[�E��!g�j
n�/KX�]��f�^����T&/��J4���o���H�����]5T�F���)�m5�m\���\PQ�,P�4�6�e#x����iS��m�5k�c,V��J[�����8P�L�wA�����}�5a�c��y_}�X����d�0}��TV�
�P| c�u�lE/f����5��i���>++}��-/��}V4u�R�&��&�b	9���K���_��yH$�,����F
�'�<���z���$�=�<��`�l�XV������PB�bCi$%����`� 5�I�Ry6A��S�(�d^P��2b����7d>�=�Hba���(���_�:Sa���a���'���aq��x��2� B�O&� "^��-�a?�I-��-��@��#I2]��^�l����y�w���gG��o������B�x���
5�?��)���;*���2�G��p?5^�5C�P@[+�e3�%�������<F��F��E!���A�2�I�q2[Sv+8C�B���L����S(����A��!�0��l#,���-t�p !�
�n��V])�0�����u��'�a�Z�3�>;�0�r#�����Y��?��#��D�x�8ADB	X���VyAY�z�
���g��g#�!��5�����|K����	��������.�����iU{�k�LDf�t��`=�gE��v��7�\q�"u���AJ*����L@C��J2]�_}/�"S��6��A��T�u��~.��_�:9gQ"2��
��3���5����-�XP�zv�Gj<�&��m�g���,�Vx7-_����� O��gEI��.`&(9l�$8�D�m�����Or_����u��%��	t*�j�LB��e��x����R&�,	�[�$9�f?o��HP:�"y���fj��Ttz�\��&��[������������tx�,��V���>�pr���!��3���=�������O�D��f_B
���^>X�p�W�����)+���u]�5Au�d���S�i���oq�1���_��3&X����%[��W;�Q���L�2tb����j�C�j�]��gG^S��Ng��Ts�"Q�x�$�z*���b;R�P�Il�J*N�MrI���?\$@�X�:�j��2��j�����R5 �	��N^~AQ@^Dj	(6���g�Y">��g&���3p��4<z��Z���Q�$��,N����&nO�."�n�@������X�P�
��d(���o��S'H_�t�e����	��d����hZz�`K���kO@0�ZH��$���.�h��
�eq$^7�p�u��F�,���O_��KM~8j��!X�~�x�Qf�j�+/
�&�m���7�I��-q��}]<�D���Ep1��8r�)���F�����������*yG�/�M:Yj�.BV.����GH�!U��]��i���;��#������@N�z^PX�5�{�c�O��k�}����,��==� �	�A�k������<<��-V,(�-U)�������g#����|����zE{���t����K������u����dN�tX���tA��6n����Ds�N����.Dd8N&_����o3����MRf[��D��aV�)]��hX����S�nV
��dV�E}�Mla���-��c{������4�`�4��%���V7c��n���5��h������
-��`��-i�����H���������0��6��>-�B^=����)h6I2-���aXR�3�D��E@K���?��*(a���]LNK�"�	�o��a�����E�	�>���*�����������3��f��"WU�����T��`L�Ao���	(�����i�2��t>DP�l�QSuu�?;���A	�mf-��������s���Y��%�)[6�i���$c�c�$�}bE�A���-�22�(#?��H��� J��z�D������C���@���	FG@�Jk�����B����'"x6���,v���,�2��40EPS-Cu��#]7@�,0�%y��Y��GP�����6g�T���'��g#C	�5�PZO1��PZu�MR���"D���0�*���	$Eh+3�-W�a��D��W�
�0j���IU���,�R=�%8oIJ�@���"S�q0�YT$DR�t-����W���� �Ii'9B$�o��H��GR�TX$ed�L�H��h/NKY$E�����kKa��f����y��U��Q����7�8���Q��-�QWo��^��Q:*\�� 6�A����8������T~����U?�J��C%o�k�"�J�s�u�>�����$EN�A����
"����|�@O}*;����|�x�(��
���(S�R�����E��[X��C9[�"��.NWx�meO��3�6H��-���ai�>�H���D,���D��������<���w��q&+���55g����3(.w|��x��W�l�B��7�i�vr�#c�"��0���fw�}�k�%��;"���#�:��a���IT��k�8���w7���eFI���)6���Lp&���W��h�)�	��L��s�K.���*X<�b'T����!�����8�_E]H�YQ���[��rxE(�9��	�f5��K+r��W&�|��=��n�l��U-�m���:���e��$h�����C�I~����7G8
�g#��7���$�����O�Z�9�JL"�$�J:�6|��A�R[�L���R���joOCL4s�p�I4_�z���������7��8��F����wDC�6t��o�n���G�1
�q���<
�������Lf>e�D|S��m��lk�����?(I��d�=���Lf~�x����$D�r$�y�BB~c#�o�9#��O�6��c�P���fb�{������=l����Ic�oY��WU�5��m��cpWJ�t;Mu45uA�=U�z��U5��������w�F���8���S6e5��AI��58�|*k&�f'�k���IW;=�����.KC���������L��I]���4Z��#|�2��+�k&E���A��]�+���~U�K���.:��C�M[�������,(�s�|����"w,��64uy!�!R�C��Z����)x��wdx�;����������|�L|�G_��i"������lFH���@e2�%�/j�[g��w�#|���D���K��D"�p-���F�y�E-�������O�5L]�oI�"N�O�K�����^�����CnZ��*T|~h�uM����B8?�#���+��"Q��f�/��>*��S�
�e�+��!���'��,N4���=��2P8gw��@��.��� �7���������������ii��4V8��3dsC��_���F3�j���Z������a��7��-��������Q������w{��!���=�]���K�l����G����������_��\~�;�o����V~�}������������������������w�����w����q��&���8�����o������?��/�v��������a�&��[>��D�����������]?������_�O?'������q�y�����L�(��M����?��?����E���_/�����w���}�|���������?���������_����=*����D�~������P�����|lP��W�}pVy%O��w�_p!��W;������'O�=vzR&(���	�����Xl�e;��c���Y���gGO}�a
o{j��G����c����?�|iC.�I��W�YK���"y������B�w
QA���_�D��F���*vI��P2d������O"��?����rFH����'�R��z���=n�<9<12S����=��D�R��&@7�r=7���2�?$e�x���R�Q�j4+mAp����}�(�<�u#�)R���������J�Y��_H_�g%%��9)X�	�����������Q��paY��j;�]�me�Ef��������?_8���+b_$[���/+J�R+O�_'���}�F�C%��X��p�B��������������4�����<�i�h�������EMc�����w+y;v�������YzO&�o������.��L�Xb�F�f�V�dMd	i4��~'}��h���X�y��������D��S��`�gC	\/d��n�����Xt]K����nH����q����F�q����U.�`r��~�yM�);SP����=XuQ2�V1�RpP����������^n�%����$���0P4�1~����3��������lL������
p��D��"�d�7�1<���@w����Z����Z�����j�.����,��]������"Q�B���3}p���?��C�?��*�2]o�d��a�:���4�=�S��e���x�; �t6��
���Hbt\��l�Ok�	pn�t��@�J�k^9��BD��h��2Qa@X��nnp����>�v��"���{��;�6���"	���a��-D���]���lK�x��@j��r����l�Z6yb�%�T�q�����hB]�UX�����j����}���+��t/�����B�l���9n�~��� b1�>���
]���.-�/���2����.���
`v"�L���w��\���JBkbU�����3B�~���L-D��kEF�����<�V$��1��s)�&�G�?���du<��n��[�gC�5�������g��/�� *^�t�� �7�Z)�H�^�N�u�b�4��i!"�6��`{��y��hIjWwCUX�7�������lE�s��E����&�z�i����)�6�uFF��v����@Xs"YPa��|�[������� 
4,�#9�J�jh��=<���I�p�wbAE��K�uZ���	xhKq���M���.���B��|O�8=������b.������x&{ �����L���'����Y7p����Y��c�����e���E�c��+VQ)����rB�dkC<)!S���5���b�glx�u�#��&��S����;wY��4�Q����G�	�Y��W�n�!?ysc���3j�D�x��SVe�&=vT��V\���Z��ez�cq��������*����F�s�X����=W&��Y�}tAX/��=-_6��uz'�K���d/
�F��pS/�]y^~E��x�������������ka���*]P������>������ �O
.�s�'c�E��n'3����L����T|m�<�@EK%!���'&������z���>�;��?�vn���&�z�Hh-��A������m1g�������;x>���n�a �9)��j��u���G�������`z��x�O%�(�Kx�$GL�����G����36���_�<U��z��TFH��L����9�	�U��N����[b����[����w�R&([MSL�� Ui!"���l���J��U]Z��9=B�����na������Lv]2�pZ��������B%�J�H@����m��L�N���S�m�U��y�#C����D�G�s�T���M��i���	8g3�dm���dd�� ��	*n�R�6-H�s'���
z
�/����������������_�y�7��+����|'+6�)^����1�j�s�_�����o7�5�/��RG�b�������wp
\v�"��&G �\g �A���Ls��n���z���1�(������A�#�3m#G�����������'6^g$�CZ]o�9��l��o8I��{���=��*��V�WyL�39�8��~s�SFt��U��JO�����u�Ybf�wj�?;��q��>�mfv!���=�l)s]�el�������DfgA����X�����3����8�NXX�����)1=�������g��w.���nJ������������$YS�����/��yg�k�}���<�n!E�ik2t~Q�M�qrEOg���m�)�=�} ����`�7�����If�2yz��������V3[�hL������@����l���a�d��mO������}"�uL����2��6��;g�nk�H�5=8�'+Z����5���`H�yX�3m(�ur�w�b|FmERg6[�e=$ai�2y�gEq��_�w��	�� ���n��-H��<^��#��@$�
��������e6~ 	��|�*,rV^=(�/�f|o�%��D�^��D�r����[*��g)�<*�]Q7uM@M����%�K�7=Z��6��k\�(@�D�q5U��������>p��X���LD���t���������<��H���t�� {��az�g�����:���J�Sq<����<��@e�g6*`�:���P�
f���gCj�-c&2�S���=�x}��^Zt��rI���>(���
)���c�q�K�)NU��?�#��B �������9.$���X��4�������]���F&�W�ei�gi�����EcS��:�� sA��S
�\��Iq�p��S�au�i4.��.e "�ya�l!t�.k�	�1�'�]�	�����#�s�i��
������[��D���R�*�������L�����9�'
�����!���2rE	�#��P�u�?>F�qb�����n#�=q�G}���e/�KE���->>+��u��
��o�.����U
�D���hzC���7������u�k�*�t���T���jD�a��yH�2Y�k���&&I7$���	$�k�9g�	jiII$�WR�9�EY��<tG8�!i��������}���0�W$�9�X�������I`]8A�C��]�6"�uO�������MK����k���`�
�hm��*��K�mL=����lL�3i�3���{���
	hq�N;���hG�DE&�p��L�T��X����E�#�qc���x5����cEEep*.�T���5w`�t�����7E"�c�TU��=c|*���"tT��)��>y�b�B����s������3�y����X��!)7���;��L�i~5B�f�jP#*J<{*>������'�!�M�����5�����\�������p�a��l�_p�h&��`���T�$���-7e�l����L��4����7�+��Ja;L���l���J������exC��6,���b�V�w`�w1��!��5�����$��`v�,.R�_�)�2o��qt�s�W����������fBcW$ .��>'v+��lH�EE�QH��q�>De2%�d�x���--�����	5y���Km(���l6@������!����FTgQ������t�i��'6��y3"t6��*m�t����G��;�H{�X#�c��o���{��DT��bg�l�����Slg=��D��>���E_��K����MTxS@*�P��������u���*s����i!)V�mH����U���-�I�5����������������������.��HQ����1�4���WLH_�����9���*�G���Eo(��^w��D]�'���������c\��,���d�hv#����u-��J�8���g#QF7�6�2���q��,�3�;������4�����gN��A3QC�J������C��Hi}Y���ONO����mQ��	�_��� wa;�F|���L9
�1O�;3k�]<��Y�.fw�����+	r�vF�XK)�7+��I*It����%:]���T;��.�\��.s�W$�*��C�v����T���������a�&����*m��Vx]gdv��{ci{a���x/d�����Y�F�Z���e�E+��gX�F���3[�Af>leIkW�������)��y���w��#'f��(�-X�q�}-"����i"?����{;f����DND�ikS��_�7:HQ�gZHY���reNE�N��W�����?up0��"'��mS>y�BJrZ��8��=�����PX�UZ��s��s�DN��8�����4}j��'!�}��������RzJy��eCe�J���	`X�j�,��t���I�����X&>��t�
���g#I>�3�����gEQ������/�p��O��6��e�R#��LG�5��w<y������W2e�j�L��".��'��H��Z��/����A~��BEM���0���;�Y��xJD0mJ~6t�V�.�I+I�d�6*���*��A8x���&�vA	@��H����Hd��8��N.M��*����~�B�b�����&����[�QG�������� ���������'DS�ts��	)��#G	��Q�h;�(����0���q!�X�3�{i���i���K.h-����c�!�!@\b�8�?%��yH���sZzd�����`��,Vs��c_��|�
�������q�H����%�8�����
4�
u�Y}�����#U�����&�6�x�+8\�m��[��o��+m�1gj�~%n��x��d���`Od=��[R|H�D�N*�%]���	�9:�����O1/�L-lh�g�����i�yM��ev���#�t?qigO7��<�
v]^Y>�4�G���$��i��s5�y�2,F���������!p$���4)�
�Sv6]�$h�������9]&D�I����-��P�n�������}6�f��X��"(���712��~v$�^��o(�
������Z�\����;����3��h��.8��i\��"�D4�:�dk�
�+��r����\
U�U�p0�S�7e������=�����!�_A��aO�)��1�:K�!���J �eV�]!������5�]CL��^D�����m�N��tj�9�X��s��pQ=��Am'��W�i!0y2�;��S6�FO��s���t���-@L��t���`Cm8O�upQ
Q�lZ�:],l�}�a�[$��^��
����l(���]�LRz�P��E�[;��8���, �����]��V����5kkU������I�z�9�X���7��~�&��	
�V	i�ph�89��3���s�3Zu�����h`���B���:8�3wn�@���m��Q����,/0 �9:0w/�r������
f:�z�D:�Pn��P��$7���g�r���R��q=�����?�i������L���lV�D���se0n>���N�^�LI�����!�!
\�+$)L��U�t��u�iMp����dC���Wz�g#"c8>=��h��6�S�~��&�ED�Z��$7w����_b�t���S���i"��@����������]���t���T��S��?w���1���k�N�������m���������1j��dd	���V�y��Z=�*����������k}6$��?�aMG���-����6���Q�l��`o����
pc����zcW��~[j	�j���d�g�yup�m(]T���^!�JH�?(���|�}����7�G��BR�K�O3;`?����&��p��B)��l�]�a���1��.*��<W��%���Q[O���tt����%�8�[Hem��0cX��=������$3[�yU{���Kn��=���`J�V.��P���j�Har��5��t2�
�P-��.|gJT&���5�Q�^t�7�~js>����V ]�h����E�8l��|.*�9�j^G��4�g�R`F��;M��yP�0��7G#���1������Q�dG�'��%*��ZO2�
��2�#8k�;>;�����)�\��)���s2�[�)��g%3�j�_�~}���|����y���XpS�i�+Y�����ln#��yK$"C�����p]�����`�e�)���,��Gr �D*!����C�2D#)��yj��C�����H'��C�h
�+��JD~�_EKUs�C���f�o��t%"����\�R-mm�J"���S�`.����@�D��������U�%Q�����������cC?;
@MAQV�}_��XP���k.���*���D��
'`���byW�x��;�/��S���6L'��{~����s#6-P�G�D���^"	r��}KJ*���L4��n|�j���)�P�7���FPS
$��g��x7�c�D���z�Hc���h��8����/�������M
��������Ba�y�-�Y�*��������A�j�/�g!�s(m���Ky5������6���k�j���������c&�@Hi\�G_��
h�:�#����6��x�����S������o�>S	65��0�85{^V4}K�C�a�#!
�u�ty�!���s�+����s�0��OF�K��,��u~~%�&@a���b��|@�D��|����tc���{���Y�;��bnBj%�ae�0�{�������C����V��r[�2}�LD�6��D�}����L��2��/Gj�/Y@�_��K5!��l��
�[?+�Z���\�����������7�.~
�:T�������`���������/����G��	�g#A��/\6|z?��49��.�A_�b�����fFa��� l����e������az��{��h`�7^W�� �V��#�v��{���2����4���
+m�7m�����U@	�`�:������:D
T%��=�(�������=��k!�X�Djt�����ff��L�����m��Zm���g�(vVl�����P���C�cA��2�����Zx��g�
k��d�"�2�s/��
���v!%��4�f*hC��nN�hu�p��
U\mz�`�[h�i�gk������=k	�BR�O�c�L���(�P}��w���D���(���{L��a>.~�I�*�iZW������Z��~�l(X�	��^� �����7B��"=�Zp����&��B�
���C<i>Ur������8.>k�
%��m7l�}���a�5����?+A�c$�X�\��#Zc�?���3�=�����L�>������Yd��\3�y&�J��8�?���Y�H�l�(��'G�
i15;O�4mhO��-;�N���|Zv��f%��J��7��V�u�]���!�S�>��8 2��n��L/�0?(�K��>O>���iU��H<����Ev�H�h�����'��U��*����Q���v���H���'"�%���u=������?����������_�������^������[�t�q�uLQ�����q��C��g�{=��/����1��~��o;N��v�#x���
����\�,@�����eEr*oU��i�\�l��#��9y�Y����9t�]T�����(��=�2��Xf,����c9XA�!p�NL��z��(�3���6������QyH4���������.��"�8�7��+{�gq�l�psG� G���#6%�����],����(\r���VHe�%+y*Nf����#DSWBxL���6d����������������HT���Q�pz+���nJH@�:�pSGU��b�������y��B�h}	i3!��	��|+z*w���4�Yo%�^���,��x2�������J�:.���Hw�'�B��R�}��	x(�0tp�&;�:�2�T�]����.����hJW��M����nK�������]��l�-�@Y~�!}��DC� �xfHk�iHRy�-)<�hH3YWQM;�m��]PfG����&���`�5�ftE�7�$�����l��>�L?���E��=]5�F+�"���e����H����9U������V�h�iC����je
����`4�%�����Z�M]���M}���N�a�=���>X��jF,�yE��`��VuAZW4���2I��x���t?�U�2�*�]���cz>���:d��E��"�+{�Z���[��3SX3�Y�q����bVq6N����<m*v8��)H���	�@��hS�g+_���n�1�� 9^��VU���E@�l�v�������`VW$�����`P2e�Ty�3���2m�|vv��H�FuAzt��2�G�f)`R��G4��9Q~�*P�&���5k	~�f��LJfS5��Lj&~�����^2YT=�;T.���1���O&��E������A]�*�4�8��9���"��=���������v���g4f"26bvk���1X�i-���8�_�>��\w��<��� ��f��9�t���& �~�c^�(�]�-���Li��Ip��I%*��RQ��f��1]�]���\{%�����D�s�4%58��a"����VL�lD���c��B]\�=��:���L��L4/�yD�m���-)�������)�������Ho�=�����lKVK0g<6���z���<�eE��rQ�z����$��5�x��A�*���w�����������a�����5?�c��3:��8�0�J������B��kP�y.u8s�'Y-�����E�6�
��z���N+�jG�YGn�T�����������/�;�0���7����
��dqQ�k��B{C7���,���%���E���	d����nK.���$�������-2�ZQnfu�=�HMl��\��&��`�
�{��,U�dK�46��v�������Zm�W��������;�������2�S�H�0g7�;;�t�,�=H,g�'���0N��ec������"&@�����1���N&"�����*�Y���l�:�����>FS��J�oW�8����u��3�y������^:Sr������z����{�i�����J�{��s���g�������?�����+�1��^��J�7-H��]�����
���3{���S����������N�������5{��i��{zb�7xJ�N�_�V�3R���\����%�FC��'������R�������hK6����0e���&��^_|��Q�I�78������
Q�qD/�+%%!�Xg'I�Sb�0���X����.N�
��)�k�{���?�G�:]�{YY���)�O�sFy�x&z:�;J&g��6���k&
�m)x�#�=��~�qBz����Y�<�eanl�x����aP'�����h+�wZm�����yAzz��e����������z�2��I�L��w��k���n?B��#f3B���/^���7FB���u���B���p����u{4��:a��v>;�[b����{�S�lD��p����LG�H����E��{�Y��P�V��R$z\�8C���������&p���P���,��(�	e"`������Jy��	�7O>���\������~���]�<�lAdz��e�Zf�����H�~gtV�l�Ac_��8Y5WPO����f��Fv�`J� -�a�V���z�C���l|��8�	J��8N��a�8�!��p���~��m���Lp<i����YJ��bs���
��[g�F9:wAz21g�������g���%'_��.�[2������[�DoZ�b=�;����.;�S!���|�@���fud�F�����0�V'(�B���i-�Sc��.�����.���*9���)=�bglH��������&�uo����	��������g��Zz�5����YKIja��C��[3������ji'VYF84��\�q��8���L��s������X;���hS��$TV�9���Jl����8�15�taw��������#s����u}����i����r�n��8X������p������@$�|s��G?���z���y�{z�@��d��s$WiAr��e�v���1�r!"���i�a_��Aq�=�A
�`�c���E��t�=�]O�S�D	NnZ���&���<�L*9Q��|�ye���'��o?+���A�N9�	�����<o4�N|�_�<���5���]9�/D���1~�t8|RI(�O��
[}��d������T��� �/:8y�J [J��G��17��= ���R���t6����5�����G=���k���{@��?I�.d�.�A������������{��� 5	T1.[�Ce*;0s
����DD}*;�� 4������5�u�%WT)'S�d�L�:-�2�jA�7�w��j������
�P�����JAR*'�SD����8d&$��	NOT����h�S&z���b	�G����)��-��'����9%w���[v[�.��8I�����	�g��_eg�����6L6;�1�v`����9H��	�y*���N?1��H�n����
@=��P.yz�	�q"���8��KqbK���T����~$���+T��v����S��m^e�@����a�Vw����M3�'O[�y�1��ZjCN����	
�(2�3��Wb��
���nz�y�+% ���ZR�Y����j{���9��!�/4C�a�}��H@����M��uA*���D���k����4~]���wZ�.������Q��*���W"*yxWe�x�De�@��aK�X+��~��C>Kd�����%�c8+������%$u�Z��\��
�}�L/z��
,��n��?z���MR��Jta#��$��)(��8d/^t6�Bx�e�v8���k�5|�Y��<������HA��(�������T:WN�-wA��B��eQ�����\!dZ���4��I9���Y,�+���<�Cl����Hd�e}����7fBU�����3/����x����'�:�z+���pVu�(��J�n��*Q���gg��Olf�1m��	;788!+��u'�F���_���%9��:o[���<>C��g������QQ��B����U��	5n0��b���w�9.��I��
L���)�6����uqn`����yf�p��Y����y) ��%��2���Y�h�������x��szKp���e�caO�<O;�8�r���Y�P��y��h��gzu�L��V>S��y9M�+s�=����������=��#�W����
���"|x�1����i��:h�2Y�H����+��|eC_���b��)M����i�q�����.�SHU��4S���i��a2M�$��
+jBf�F���]������#�:u�c}R�-(��`������	n���������F�����~@�I8���
�y�w0�E�&�������Sn����m>g��~�<%,���c�OP���(�����~����}� ?�Sv���	���e{����a[�3D��e�mx��il�(�����{��;	���
��ZY�~s�
�	�^C�d�����-�f/����>�}�$t�g�j�'oJ��}f��5��0�����9�]����������W{����.[qu��7E��������'�o��S;<fCz�w��C���D�������sR[$[���*�gn�a�a<�6��l7Yt����{w�ol�����<�)��v�=��X.�����c��X.��������@��;_������T��'�����t�/�]G��
��� v��\p��&!�����&��/�/�g����-�$�x��\���\���w�j�zA}�FS�����1��M=�b�;��w����CL��;����J���:1�1�=����|c-�yw���x���+�w�"����
��0^9^��'\9^�_��p�������w�C����~=�SA����9v�������3�H�Q��l� ��l;�F��H��F��)��g����GVI�c;,����<F���1��04x�y�W\��r��^����q#��9p��"\�#G*�>t��"\�cG,�u��9z�
=�p���+�\�s��F�b��9���9��!#\�CH3�m��9���g���Z��H6���oMM��h�������������������������uj���i��si���h��sh���g��sg���f��qf����2����2���y2���92����1����1���??������G+��{K�cO~Kpc��q�n��=����������#�o���nKtc����8����S�WD�%�1����D7f^�_e��^-�r���������`��i�c%����)�����-y'�H��?K��4��i���,f��]@����P�D��TN�.�	���|�~�N>E:sJ�H;x����A��Q��/iz��g#��Qg������e9���+�v��C�d�T-V�j��2�uf)�
5D��
�	����M%���~������,�(����!�����He��S7/��I���4�k��.;���6&��k����cp'��L�c�
*�Y����"���@��i&�#%]"Sr.r�Bh}iAtk��������N�!�=������AI��w_{`gG[�j����M�"��\�D�����"c�=Q�L�o@f���������;Xa/�Y_���v��U������2��nY��@��$��VC�;��l&����F�OY�QF��:Q6o���l�8����b9��eA	�����:V����b}���<���9������PK$D�h#3��DU�����wO���2�h���+��L�S�)'��(��d]��g'Z�o�u�����C e"�n���6�Z����F��r,k�������xZ��3�w$Q����Z2!f,%p��d@������#�����z�D{�yP+YY�'�8p	�L/�
�X,��}��D�����f��F*��D�������n�^|������@:�2��A�.6"����U�8�������
�'��i��uk����6��=F5��#]�&���U��v�^����#�)�P�U������r��k���|V8`8��U��Rk��(�G�]��Z^�0F�l��>HGF��W�'=|������N��q�D;91��Y6l�Bu+�$���L'��i����L�=��]��q���
����5�I�����^V��\�g����V�
��(�3��$�1�i�������Y�p��7�4p&Y�KYBIbm'��M�P����Xh��6"��gjjP~�K��C7��3�PG7�J�D��x���q��r�Q����i@��l�"�
��*��q����Q��c5s��)>eg�[�����/��E���v��d��Id<�||�(�#��z���>Bv�"��x�KLR�����/�)��r���^��M�X@����O��H�������+����n[��u+F�D�V���g�J������~0��uOO���2���q�[!����f���t����!P�Z��8�r�y�!�/�n��p��	C>@]m��;q�@������?S�����b�x���$z6J��������o�B��$�0�����C���~�4,�5z��v��^[-�!T	������)	�����?eg	�)�Xw�#a���rox��mC�g��d���2W.2<F��}���,����
�x�&��� �gG�E#xM�q7jcL���F���At#����x�6QR��iI��w��3�']�����,]��7`g��'|*�����yr�5�gG��"�%��E����c�:�G?Pk_������\��<.}�\B���Xv�4ocu��7�N�v�Y�g��f�\�@N�~PD���������g#�G�v��Y���\@�c	����X��:�6���
�xro�����o!�ao"��"V�<l��Vo���[��O&u���	>;�n��:�<��`P�oO�'���/�25e��\|���p"�e������td�\�!A��%������o��a�����^�	�w������m~���+	c(��Y�����x���������)�Zq���s��H�:C�FE����)6b!e��`�G���'��T����De�t�=����{��L�N��9�x�
�{l��?WHdP���hV�$Z3�)_���
\X�qGZk338��{��t>$6�GR��Y��b/d7*[�u��D�~�3:m�U����������*��'ITW}� !F��H��D��gGZ���q���e���p	#7�M�~t��R�	����P�O6 �x]��}N���@D������������/��U�W��#�y �/���W�>���H43t�����)��9
��l���L�k!�-������p����eE��F��5�h!!���k�&A��U�c�������'��� L��Wl�~��������n�Q���H7����9h��dC<n)��0s�Z�f�� K���U?����z|��}��\�)	���1������ZE��d�cT2[%��;�-�������q.��9�f�
��(�j����e���Kl+�
	�Lx���v����$"K5��i���CHQ�S���Jl8CH��4��_Q�y��T�T�m�X%}�5^o��+V�<g#�
+Y^�w�J:'������>��M�n.	�@����� �v���6���b*q��������y*+	��PV�xL�)4��_��g�}]IT&��gx�P]��LD��b�M�>���X�������(�`�0T&��ZW�-���)��Qw��
8.��I�d/�[���j�f������
v������#�f4@Q�y`!���H�v����E������������+��ARU��1l�
8X��V4������3��t=|����/����_�~	������_�~��wF
&}E�i��-{YQ�6zp��`�74���Q2���}C_��i��Q��-He���iGP��
�q�kXv���-�E�t}�5�	��HK��������o�[�#Xt��k���|���0�i�?�*���~���^6d|9/�
L�BDFb�m�>��/dp�.{�Te��aA*��)s��i�74t��2m�*~�l�����4�A6��� �m�3�e_���M�=PR�K�m����[��t���gc
�3@'�l��
����A��|�D�h�.:�
��a4p4��gp�U<�"X�E}�Y_�W����_�>���j��������qOOJ��v��XU���{���

��@�D�2�l��#0�����7��k�;���PI=�Z/����h���=���q
���`���K�Hc��p������:i�L�,�J���De2!:_!�P{�8(�����`�����������������y��eg	�O~l��J����I0^�fE7$�[�����s�.�=����X^��A�<P�������F�8��q&E�#�������nx8x�������^��e�Q����FA�������B%hH��SbaA��I��3�����~��4v�����J��% ���	����?IrC�iS����.`��2�&y�'��T�
~���m������>�����T�7d�����mz�	�8�/
P�R�nZ�P���KQo�+�z!���N�����6oAS��f��J���"R
�`�������������;�9��|v�n��_�iG���'��VmH�3$�+D��N���Fn+��b�V�/c������Q����}%����$�J����P�=C|�������a�x���Wt��l��#(�%q�:�bx^G�A����p��!����������z�1����	�K����S��#����?(�����y=���"����#�������2Y���9T�+V2^�[��%~)�����0��<�a��60T���(�m��QvER��;�`��CB'�$G�
�����4�$Y�Uk5� �JdA\�o�*����k�C�B�r~=\��9^Y��
�D`����xe>���	�����Cs���BD�P@����V2���x�D�heE%�V^>1���h�\�X������:�)����{�IK6�1Z�nC0{7��A*�w+�%+��4�gGCW��������[�7h���c�9�w�rHV����L��H�����]��TgoE0����0�����P�(2��[Q�*��^��3	�����gr���D�
Q�w�S+��5�4�R$�����$��8��D��[nv���mH��6T�uF�$����m?;R�:cO�����j:����+����(����3=��)�}����p1����z���8����[�������,�jIx���g)��h�M'��Xg��#U$�#��������[Q	��$������e�������������o���}c�_�������0�gsg_ry���8!�r���;Sbs���W���C�h�3�.f?;\H�g�s�W���3�g
����eu&j��E�3<����B>f��+7���o���6�e�=�P*~�n���<Er�dN���
nt�U��"��'�"�a3��bS[�x�)��>����L�����X���2���gV\��l����6k>�z[g��>��l�/1%����i&��2\��G<<:�+b���7�nq��l$�������Q��5��='�`~C�4�L#�\n��!H5GM4!>�����
��D~��������`�Gz�$��	6���W��v�k]}g��<0��%�w�i11+��B�e6U��P�`M���o���1��dF5��:1_�.{w�Lv�������pZ�����se�`�zy6�W���1G
�u���1�y���� �l��w[�x��Y��$�"��Y�}gJ�]Q",��D���lS����v�C�-��+5�G�w����C��[�����Vk�=i��ndto����ep��l�����<P��)�d�9QR�����2����&�I?X����yc�PJ_u�68��7V&��4�?��7�1�A�:������%��|���L�*������h~�E�}.�i����n������;3=	������0`�����%�U���,�d������FM�*��X/S�Z�j_��|���0
�8�>��}`$��Og��
��0B���6��w�W���p��/�
�\���e/�i��Q7��?m����I� ����)�����<m[#M���_��j��&O"i�6++	�e>�W�i�%�d���'���5��
�_�Ib�l�n�V>;S���i�Gd]�,en,bF�$��Z��<$pv����Nt�y��odL�iL!���j'H���v�*�����CG6��zq
{��E�����2L\X���!�a�X-��Z
t��Tb�h8�.�TkC`�(_���oe����"���*\������j�5���?63Ms�"6�C���e������;�`�����)�O1��~*���W'�I��>���������}�$��K��,$=�s��o�<�Eo��0���E|u�~��fK�to�
�F��z�U�T;`�!���!�.�B�2�P������	�M��9%�������|s�#6���4��{�q���xF
���OI�t�-�PH��
���,H�<��z\��&B9�s�o���*��XH��	R�|��[j���t�8�Y �:S��[��hg����N��l���TF�>Z��,�	�
}�E��CQ4���-#n���2�Zg�������7Xw4��"m�$�^��3+��iC(5�N��Piq��UddZ���V����6��77��&���XR%d�6=�o4�:���L��mR%�������n4h2�X0_�B���
��2�z�4��rg����x(��
/�t�'�v�������yz��m|.����cn.8�A�����o�j���-���D�L��0�f��A��;�lH���zzB����6�x�VW���\�i�9� �R�����lL����5+b��!F�2�W+��H7YY&j��y��@���G"�����RO�?V����r+�o\�NG���)��Pm�hA������Wn�������*O�.S�Q�"���`��|����VDb ��ddl7��h,P���
��:k&)��U���gg�z���>�j�F2B��M� �D�����e�[��Pp�����s}���
|6�w��6t@y�e�E����r�pBmVJb��;�o_�9N,��T?�vz��r�����+��V�n�2_/"U��[���F�2�s�j�D
�u�7�p�+*�������h���b��)a
�&���S8��X;u�����un�]�����Q�����l��,����fZ�&:�W��������@'�Y�DT��{����jL�������}�Tq��'�%O=�z}��'b;T+���i��(��?�T
'ZH�O���M���Z��m�����7K#�B��@��f�
"�]Y$��3(�xY�2��5��a�p,3+@��}6M �h&*��4�c��2�����������{����h�P�T^����h� \�i#�u�����L#�WG��A��p�L,���	�~}��xb��-,jI���J���E�P�D��nNL$�<�����6�8-z�{���,�Q���
;���"o�1+Sb�����8�w��L	Rb��MhcNV��>5�:'S��9T+���U�qVb}��*��s�7:�V��^T{}}����F���f���S]�Dk�����B����3Pq�|(?X����������Ga��=sc��o`YPq���M���=I�i���c 9"��K�`���������;B�'@�0��U��L�3@F>��� �	i�G��N���6��]�P���N���o������H�����
���,2	r��8�:�g���K|Z�c������tg�/pW8��c�y�|+=w~�e�qM��\g~������;F�c������pR�<�=�����.L�'�xPQ�,�����t�(dg��y����������-�\D��>h�#�3�>�N}�wR�g�]�>�����a��)��9C���f�:����+>D��{�I���r�|~al�n|��%�z�}Esy�|�fQ=�)�F}p[X�@G@�Y$�S�X�s�����C�=%o�;1������3�1�w��g�H�i|�JR�^�Y8�������p��c"xU��j"�~�zS�C���,mTr�3��Z��~���t��
d?�.F�����gG��{t���>�x'��>����b�	�U���<�v����=��	g!6��������\%V��=b7��h����P���������Xf-n"'O3�Fpp�����nb��_(Om�.�CW��(��l�MaeT@p����
�A������0CyzX��Lu�Jl��m'h���#C�?+�|ls�:"h�M�����m��QIdzuM3�K���2�K�<}�L+gyL�S�EZ�I���B�G���%��a���]��[��~�4��d��_7z�.G�r�J�6n
�ua+��;����o�_���%u�A��k>l��sy�8|@�,�t�9dZ��g#�6|�c��O�g
�t]b��AGnv��)�a��5}���W����A|�����0E���.gT"�>�h1����CL�����>�e��g>\�Z'Y��a�a�{�9�ocz
���.P
�o���_�:�
�j�@�[#��>F2��\�iaA�r�U�1MP�����������W@
`���aK�q��1�.;�+�z^�OQ/�uH&o�`���57�amm5%HjX���������ka�GV2��2WO���;#��od��a��g�J��!������q��� k��R�,k��3��xm�'�~SE��W�������������)Q�J���<U���j/�W~E�9z��e�������4m��7�7�/�*<�����$�*�H{D���ET�`��N#�xm���H�9B�����5�3;P	��Q	m�e��;:�d��Utf�����b�w����~l�������n��{ZM�i�X�Ff����Zo�T�[�/LL��_X&�
s=l�#/��c��$�~8es�����������������0S]F43��i:���l����8^&��o3X�JI��d�����\�q��������>o���Q������F����P3�j�P�%P��|�::����{���*�<n>��4��<&{F�1b�~gJ���P��+U*,z�reMS}�o�D����E��Y&f�O�^^�s� �:��ca�+Z@����b��(�W�em,�.s�#������`d�X��|���N�en,��'�)[��P�;��3�n�A�[w�a.d���T���D�N�m>���R!��MsC	�a>w�<������r%���M>	���a>wK
���������l�)y��8�#�sC
t,��-|2�6i��`&�0��Q���-������2xf��JzT�|���l�;C���\C[�e���a�)�aF�
�}6a�O,��|rb77��T���g��l��3���m�����\P�j�������������6���q���yH��@A��=3�80��$�Y�@c�)��&�����!�],�>!�YBA"���J!�)I

}gs�h	�������m��E"�a�=�SX*�e.�{��������R��pn���RI��=W��yH��q��i�C{s�?�y��,��V;0������
�"f������i�7����"r��,8��.��&u�p:k�����R�@9��[!���/,P�qy�����[�,�A������5@j0�nc0X�a
�� )T}��YwU�B�z��"1�s���+L"�?��D|����=�.a<h,�AmS��#�������
F<�M�J���x� �����*�xP�/�A}��2j:��N�w���J4���k�s�)��R4����ha����;�hP��T���R��&d�s�H�t[	�HP�m�|�^}C	j��	���J��<T;`���lR�����_e�#>[��q0|���V	��~���B���5�������9�!^���R�~	}�!Afp�nk�!/x��c���c"h;��>=�{3��!����!{����%�v��M.����������i���eP����������J��I��F�y3�����H�<�X��b
�\7e��>/����o':?�7�+Z�!1e����t�N>�0���!x3�b"������nJ����������>���
;k��Y�����P����(���F�%@��N/@a��UN�j�]1Z1�M�u��t3�����Z��VN��&��DT���4�>X�p�&�����+������Yb{/����l�[gh
����K�}Wngl�q__�/�C����m��m�D��!�����|�x����l��#�c��hq���-�n-M.��f��4t[K[���d��Z}!��l4��6N��<�Z-��$D���vrQ�0�u���z�p�����-z��r���F��u���w/_���!tn���_X7���q�"���pC�G��Y;�Q�����4��n�ig�r�8Y���4������3�6�T��`����jAy�Y~8���~XN%i�!&���*�
�D6��o0kX:���6�1�1}����;����q�pGc1�@�4�[���][2�v�v�4�1��]�y�{V������i��Ze�(uWjCT���"���GW�f����Q���o��:}�A���,i5X�?<�.j=aK�Z�b��0X'�5�6�U�g����5��c_YQ��
��K%���(�ucB-���������6�����u����lZN�~��:���yM�mZ.i}C�f3u��#����������D�5������B�>��C-�SV�~� �8����nZ
�VHr�3�E��n63'��g��l�N��p�P��(�a�2��~@����<��a��J��PV��[�^z�������7J��3�lZnq�]g�O�i������C)C�`�6�J�A��W�W�����-�Uhh�y:��X�z��������t|��=�m��~T���c3rBl�sc,������`������������y����t�`]��wR��t9<�)����Jy���]��b���������g���c!I�����	�h�h���L��-d��;����r�c\g�r�C���;T�w�r�S�r�c��*k��Q�}����]���u^����x�������n����v�/`�{�����m=�u�:���u�W$[�t9�p�ul����uL������b\�	�M��V�8f���V��X����u��k��]����7�Qn�����7!��/��G��}�����������_�Qo����������;az�q���?������?����������u�W�s~�.�.S�q<p%_Bb���Hv�?�.DO.��w�L�P��%�N�dt����]W���?��N�\W	J�����^�dv�L���_������%�K���7�3���'P�����<���9WR4��hr�1���������d;�^F�$�\�"Z���[���R����(��Nx�i�
P2$3�_e��)Dt��E��P�Y0q&��!|�(u�sp�<���������7$:�AN�S�_L�<�zn�����~�,��-�1kp��j4*�#H��HV�E_��	%�Dd=%D��������j�#08j��9	��~w�d`�c�%���$a��`��I�g��u$
���'F%]����Mf�����UoS��e��'��s���l�
	��Z�u�����	���`��iSQ�D����;���d�m��j�����h}�_]���N~f'�v����3�����%X�IS\������d���9��n��] �idz��
�9y��Td�����J�����Yr�|_�w�������z.Z��]U�qq��d����<q!��z������c?������E��$7�A���X7>7TN������2���H?���<�dJ��|1G��'���&�,�V1|�����op��$���$c��:���S_h�M!�O!�b<�_G���`�w<�^��:�j�qU2K5��N���K�G��,��#z����D��kH��PS�r����FN�
��=O��LT> Z�C�d�U�<�K+}���\iz�
�Lz�|�d��iu;�6�-@�!�b�m	�1�n:f�m�j��t��������cG������:�ar�7K��<��r��JDf������OBC��K�����OG*#��n���^��%L��N�9���|���o�c4�&Kn�@� �9��0D?����Ef��6�v��mhQ��@���

��c���_=CW�_=SSb%��b��� Y����A���]#
$��>rX������$ZP�^T����nw��r�h?Z-(���D*����1��\�����5�z�}mm��q���4��c���sI	�@<B�H��c.�-�R��[���=���du<OK��-�������gxa����\7B�xy�]J�o8G��D�l�g�{�b�Y
�a�����+�	N�~8�����(�
O�C���	�|�*���:���4��r�4�G=�5��OA~�3][����,!���fh��k�Q��c�HC�d�S���\��s(x��U	�/����+j��=�Zp'Z�x����
B�w�����T�� S��*3n��FB�x�5���������d���#��_&���%�X���H�7I����:<����@H���������7@���U������2���(.@#Y[L�4)�l.�Kq�`��i����Q��>�8��� u���'
Ns�W���b��[���.�`�_KGYV�n�+�B�����`�8j�^VH,�1;���qv4�+��e�G�����=�W��\�6�P�J� n�_^L�������V��e���[�e����w4��vi���13R��<-����V�
-BRb�b�k�7C��� �Oy~�4wp�`L�t�Y�<q1{@�8Bg
kg&����A��c(	o�<ds��|{���=�;��?�-I���L>�)"��J����6J�y�����h1t1��G!���<��d6�&��Y��O9���%���5"����L��?��J���K�-=-&���)6�&S���\B#����@U�x���fFH�Zp2a����F�l�k�S��%��Mf��/����61]*e;��5��*5"��	������3��oh^O�!x����~���
k7KU�l���B�����,�d)���TG���jq=�Q@�;�y%B���Z$Y���#C���T ������HW����#k���	��3�d�L_�Su�#��v�>Ja����3������~q&~<�{��=����54%��Q��>|���X%"�j��SRg����?����!w�N�������e���d�E&�/L��)p���,��$F���@�:�����M�9!��a�vC�2��>��N�o���=���=���S;lK��������`�f��&����&d6�"��Y&��R��a7$���{�;��C��JD�3�?`����)3���U��JpUw��zy����,r3���w-���t{�]���soE�!s]��e����
�v6��������[������=e+�jyd����E�� �L��!xrg|>���t�L����@����M���4�vj������"E��i�����7i���tm��c;w�5�(�lM��/
�i3�Av$�=���?��� O-���`����{T�M2�U�|�:����s����f�p�n����J Y	�����K#!�4���6������?��`�'��,�\1�p��
�93Ijt����h�_g����	i'�[GL�a����&�y#�3�-���'
���5"�������z?��'�'El9����~bEkH��<^��=��@&�
��Nk-�Y���g \�UX�Yya�b��u_g'*����Z�]?�VQ�� ��V*M��
����
�&5�
|��]��:����l�i���eK��������
zX+J@�����u�W��>(%MC_�7<n����H���I'�X:����o/$�0���X�*;��mT��i�[�y�g��+7��n��N&�p��%0�`6M���^H
�����,�>��Ak����i����E����S�^�R`c;���a�?X
��sb��=}��=V#��Sc_j�g�i7>[l�����-3���'��F���]�������~�%m	��wI7�I���Nz1��Y�,��{C���<\5.U "����!t�v�"��c�p��,�,o6_���{�I7D��h�{�����N�ZV�zJ&K�.VqG�j�8�&^on<���R�&��(�������JX�u�<z���E�Q�|x���w�O�������� �{���*�r[�%�5%�*���R������m��3���/4�H.�����9��[���_�`Vi��^:���N�Ye�@>	�K7q
��w����	�cZT�r�c�9��z,���F}�}
����v$�)�R2���\}��f�n�o�|�Xba$�^d�)O�O����LwD~�����{���J��7-�=b~�_(��uZ������f����^���t��9�X�c�����p��;3��
�9���)`�����<}^��=n���(�K���L:BQ���)U��Y�����Y?��6��x��e"_���t6]>����x�eExP	MS���r�u\	�����ztP��m"2�1g���5]	(c���t`��b�L�k�����I
�hQ����s�W�9z	�l���M^��>�����]��<�����X8k0��ab�N�dCZfa�yGM-AJ��M�r!{g������C����Z��q�FDF:g)��3�7c(��*~�S�T���X�IVX(��c�U������e[W�����u���a����O��60�5������+Zc�c�����G�(g�����)I+:!�����Sb1��I"�^���!��:������a�^���lZPG�
����
n�z���c�?��6r!C��?�QD�b)�{1%��:~��}+��V���� ��z�*i4���pYG
�(�h���mgD��f]����wa�s�����_����#�Y���e�t����,��A �`�`����!������F�y�}fx�$�m�1��,�e�S����-���\!:���ck��z�����x�m����q���-7�{1����/�#W�����~�Jt�jT��� Vj���[���x��`���H�aW5uujj�5=m�Jr�,���%X��
!����@w�����T[����l��;��8l��z�;�c�9�f)���}�*�*���m����@��y)����n�]��{:��nS:�
������
%�y���*5�Cx8��E�'|�h)���>���.�������0����i��[tX4�q�M��p��O��vt ����a�bJ����>8�6�l�Sr����*ZmP1��1��K>N|J'�N_rC��&kR��/�����T���8�w�6~��;#�
�����e�z2����k�{c����#�/�f����o�����_���<��+������%00~{�����{[��B����MO"��E���T�D���o�=3��dH����$�(�|(RV-���{n�,]_'��{�k�y��I��4��7�mdI@�����t����^Hk��2���+��oK@"E� .��C�����d��+��_�@��qMn�y�%tE����t&����:/]]���`�Pb���A;���J�_����e�^uu�����+���}��G��uG����~���Hx���MG
���7�H��G :	J�jv�2o��_S���G���z��� ����
���1�	���y�1;H2mJ�_$���s�`K���2��2�bj��bjo��z����6TT�F�K����#��x�7�B����!N�+7#���(
��"�BX(����:�:���;��Ir4'v��g�.�(t�Z��u�����$�"���������I����\�p!oX(�N�4��s21�m�m:
r[�+�vh�q �1�8�J������,����^;����p'��(�jZ-��#�h�7!�b�v�'��L�#>�<��*�b����s���T����+&�������
����d��fOE�e�l�c�F�a�_��s��N,t��^D:I{�BD�(�&�����TL�8C��6*�.Mx���������c����rNW�P)�t���i�=��,�K���I����e��0v�H��l���
V��(
�y��$�7Zc7���2,F�`�e9��F(��8�r���OJ��,o.�.!�sM{
�5���5Y�^���/�N��m�~���>/�u���
,����9��G�U���7�z?/�4��+����NW���f�����|����b"'Z`����=/���>��%�7��J@��[�K���ZVR������P�4�Gz�#*�Wvf�Va�J������{X:v	���T�P�a5��i�=�.����]�	?/�������E����>�9T#��8�
U���<���u��f!0�qH8����P�/zJ��|�H��U��<��(���<��~n[�,,�.���<h5�-�x�3/��e��(MC�>WmBK)����@T�e�E�{<XH��,N���!N��V��o5��]�����U:���0*[�0�-,�o&g�
�Vi��!&�T�?���2�w>���Iupc�b�h`������:X�V�OtL�
[��^Q�(��D��&d8G��&esA}C9����4��!�`�
�.���;)�e����KY\)o������A�����90�����$u�+Dt���D���s�`>��N����L�A�E�]��B��{LLM�������yCO��t����9���?z��:&=���?���""�;L>=����2L��t���M2����U�Y����*��/�t�r�S��Q<�cNqO�;�pxj���.��jZ�_�$��8,��l���=��`�C�������m�_���"Z�).�ag�	���8���F������{�i!9������^H3��8�M{���[%1���0����,��`:�����J` #�����w
$�>lh����$Z��?��W����
�_�`���b��������
����	��"�%��`��)$K�%�4G�O�~d������$0�{���M
�
W�B8|��1��h*�P>VsoK16�e���U��t<fu��%-��_�78�����a�������T��SIV���L�8�������O`_w���Pj�{�����������=�C�0���a�k;�5��s�vz��������O�\�����W� ]���l�����&X���}.*������v��i������$��~�Am���������iaW��F��S�iF��T	'F"��i���*x�����Ca�WK���)����)�����c��?_���*�g������%��L������y��2�wrs���?<�F�.?�����'�V�qW�%X�IU�{�	��LT�Ld�n>
���u�Z�t�J�m�����y�\�i��z�7�I'mV4��_����W���y~��X��TG��mz�Dd����kX��_�����fq���'g(�r���Um��]���P�;����_K7��~���Yn�����vT����N3���U����D�?N��K4����P�N�������o(�
���6M'���=�IG�����X�E�D�����G�$�G~�f8_J9}W���/�������M�����nAj ���7�x���4QU���0�����M/$���t VY���'�/o�c�n�-���`�QZn�Q���m:h<���c����O#hs(�l������/��|!���i�5�	��E8�$�����2+Q���~y�K�U���as�|���q�L�����������;������MM8=�_l:z�t��n
Q���(HCv]�'/�7D���l%���Rl�0��O����,��9?_	F���������C�DL���Y%��K���+KV�Z$�������BF�
�=)�cz^��
'��7`5�X���o���cUrc����9S}l��-�Y�(���Z��K�P��v� ���{�c�_h���:iiUcs���C���0
.|�}���t��
�zp���������������������;�|�H��/6�y;;8h�����~�+���l�G��[�a��a�6_S���d�OmI�`�@�_XE����Hy����i��n�&��%����4�p���k�� KB��X�*�:���L��y8�C�@Ur�����B��������������@7���V�m6���A7
�m7��"4��
c��m;4�v�0����d�
J5h��D���j�����z���O8L�h	Vn���x����Q��+i+Y*�E��
u�*�CA�N����F��]t�[��a��k����
����`[e�@����;������F��
�^���2������{���E�?���*���
�)=�����-�^���^(Y�lX7g�K��vo�����H#��4��M���J]�M���n���X	��"����b������o7���w����hk����W'��E�<��!n�5s��R�u��������@�V�F37���D,�#A���%��n����i�)�*�`���z�����m\��SW�.oN���|Rv��f��X%�N.qH�z�{����������c���}���`�V��rV��*�q)���-����m�W��_Z�Ud�����Iy}�xQ�h�m��H��*�J�����/'l��<_3�y%l�z�����������������������O�~�_��~�o?��y}XB�c9�q���1���ql��ckw�:dw@.w���1,��'��c�6�+���9��=p��@���������m�?�\�c��F����(�q�LGtU����=Q���T�	e�8��f��v��z�ES�j�DV\���>o���E��}<;����hi�/�������`���E���c����	W"��?3pf����B<�EQ��;��i��z��mP:������b^h����0P�����I�����L;Q��e���n�O���Z�y[~����|'�#���i��Q&�$�`%���k���`�AT���<�#�4d�2M��+2�����	6��?���Uf �,��+������F�����S���
�S$��+_b���!r�����l��c�f,Yv%�����z�-�LW�q
�k��hC���h�bE���j� ����aE+Y��@��lC�t��u�����&��$4�WA$��d�1zp�b�%@z�xb����-�.-S�����lHfo�<fn��V"��?d1��K�eeY5hB����hQ��FB4�	�:��JD�wa=���X���V����ToO�jL�S,��[��mD�K���G��H�v�nB���B6+*��t+���C��v+*�7kC3��V�Z�$+��T^�	�/d���)mhQ���)��i2���|Ya��4��3�lQ����b	w1��m��*t��j�d�������K��I����TY�s%���t4��.�������v4u]�\*am�M�h��+s�aSO��aTR�*cf�g�e���"d������jC	�Y�x�A��@���x
7�ZS	|^h�*�����]mdb9U��c��TrL�-�f5�f����\��up����1���6�W�����|�*�����d���c���n�K�,a����#l+�@�i�!���64�V�L���5���D��'�����y�,��Cn��64��8���[�N���M�6+���dT��`��3���}f�Z����H���L>���T�<���'���#�R��M����2X�;4W���4T�����3��G�����*@*������X�R�����
��Im\59n��,$����a�>/������|[o�_H�c��.�Y��y��i{X-�R�����q�#z�P�wO�$�y�Y�4�[�e�d* $�#�;�#�I#"k�UQ5Xd�1�
���""�sYR�����]�H�n�:�
t���Q�/��,�S��_I@��f�������~$��Fe]%��H�=7�$��F ������=X���Km~�]&Z����={��0��B���%���3����>���<�*��b���l]"W�L��OA7��y��72������`����}���h��nacZE7������9������>W��m�s�7�(�����H�d:�F�|���GzzD�DM#�P��������`��hHN.)Q�4�u
���&�qy1�I7�"nn@�HqnU���,|
�`:���d��r%��w���-�0�'��b�j�cW����x��?���j�"�]�PV1��?i*��c��f��������w��xx�����tY����w%F��H��sD�����l}�i�ws
\�����
"����&7��$?z������Q�L��^a��#,�a���� ��."ei���iu�YFp[ �Q�����O�,o���m�_������y]Kc��I[�Y7&�4���]�)6M�T4���7~ulF����{�"kn�+M�X:�����<����d���}u��;����#�j��Z��U�o��^H�8,Jt�QD����x����[�b?�����6��=*�@T�j�;�����GOqN�����M�?�T�?_	E����:�D�(��>+qCL�P��Y�	u���M�q����~��IqB���_<���4=Fr{����D�3F��.*��7{4L���/<-�����	V���M�v�G3�y#g)�}8�	��[��+Yr�-0��I��f�#�C��C �� M��?�_���!M�m��UDfTk�2�q ������D��Gl��xj������wo��o
��=N����lD3w�{��i~(�v��x���{�hp
����obG���:�&���"d�p�W��`XGqW�s�"���<L}Z``�CC���-���Fn����:j�P=��tg�����6�b��T��x�.7$��Y���1�*����6�Hi��Q�:��H����>|�h�A�n>�ay�Sg
Xc���5���L�i�	
�H�
G���O��m�&�����s���"��F1���e�(�����#b������	�����Z��Z/�1k����X���� ��{�����M��8}�uJ��w��2�>D��_�'Ru"2�BE^��X<'���i~��/?�$>��������CF�nw��������Fb���>mD�����[e�
�zWq������>����C�=���d��q�;X��LL�4���$_�n�}� ]���$��8�|�K:Q�8��|�'j�DG�Y�*6��~:B�_�;
L�><�oA�f���t���?s/W��~��BM��rO��l�/{��D�3t�����;\U�6��<��?��R�]DM��:�{��+;�F4	�����G�����F������,���F8���V8�M�
8,�-�f��:�`�4���mD���cR_�p���jk��?��.@����C��;3q� ������Q��s������U+k��5|������#yN������>5�`/�*CZWW��D������V��{_6�a�������k���L~���1������4�68M}�D,�����y
�n;&�t��I"����QF\�2X�l��l�Z�b-��>m�1���$Y�R%��X.�Jq��"�����=j��X�<�b}D[���<�m�Z�r�?_����+��'��:�{3Mo�93�O��yd�#M��qa��/��*T0�e*���c��S�&Sp���~�H�����Kq����
	X�,���i^9��4:(GV���������L����/(g���X���Twg�����T����-|q������
@��=���}!M����+u���}u�)�o�}����o:b��_��%�y���s�T��Y���cJ���<�t��<��lX�&o�t/�������k���4�����Dl��?���E���v�8�>����T9��z�m�Y5�b'��e�4���(Td|�4n���/����?����J!�'H
Q8�������B���"��n����,
�;��S�>y���"/��nX9y.��"�r��,�	�us��O!r=������y1���Z~������D���+7�8�����������_��o�+%y��������R:]����`�_'Z�^�2R�����9,!I���w�h���I�u��|EG���I.�����D;oH3���3������k��`6$�f� K���'x>��ft�������>m-��w$,�5�h��bX��~��+5��,��w����g>��������V2fP�3M���%��<i�����q �#>*
����%�H���K�Msy��9�l�^H��A}T�[���c��Mkv���yG��Y���7z������q��c�[�GOaK��_=%�3�]�I;�)�<oic(����k8�7R��	������M���tYV"�e� �P��������*L���K�B���'}��ZS������K��%+*��_���u����7�������e$����e�3E�i
sL~��g}����2Zf��t���
1uL3�z�tG����9����w����Oc������l�����?��o�a^}��%E�dzR��p|iJ�F]kl���O���9�w<�M�������~�l�h?�1$�z���*��Q(�J���3���D�c[��~��T����$���W�Oz�m8)����"6�����c!�0���e���� �n&�s.�-xx�F���-�� #���?a�N�2V�am����~���<m����di���)XQA�e���z���L���r�7�@�E��w�I��_.#h�M�ZqB�=Q��?��3j
}b�
������"����2m#�����)�a�7�U2o���h��;3�5hr7Ep����uU,@���C��:Z1�����lL����W��+�K}�h�L���i����\Y��sq�3��]�N����K~����
�r����j=ad���%_�\��Y�����Pr�+��-v8�X�^�_H���2�z"!���J�>��{�Y��<���n�X����3�� ���_��|a
����r��������nk�}j�A|���X0F������f�O+����'��)���ba(C�W��A�3����O��w� �j��L�U30��J��n����_��o6�)w9pl���x3*�jozyH���*l�����������=[��\-���o���|���-I��l��jB�2�����AaJ�Q��m�������dmm�%X��������9Fx�)9kd����<�]a�G��D���']f��Wd���V�M��M���m�e��Rb�*���cH�:�UnP���Dc^�i-����Y��6������������f���0���v���)�3�N�E��y���x�����	Q_O��fJ&��������/��x;m$��(��������YC�3%>sF^���.}�����H&k`�F�xd,�n��*���j��}0I��P|�m��F|�������*8m;�O�Jn�x!|G��^@Vd|����:b�t0��������^>��T�/`[����\��7����B|��}�+�jc�~C!wx%��;���w�l�T������=������s|���-W���V�����i�t�2��-��-�0(�����ynvNk�������b���Y����~j�i�%����Nm�t�~�����.���z��1��c^��t�e���^���m�������\^�r���2�t���e��{�������\V1]�3?��������q��{����k�5�q���� ��O����k����W�5���Y/���Q*b�<J�B��>��j�t�V�X�kW!�Ud���������2�t]��!��rdB�1]�6;�1]���z��Z���o�f�1]��(����{/�.K��u���\�u�q}���^�Q�?z���9����6�,�b�"E�!��t��|���1��]��ty/v ����ho�c��V��V���[���j���nT�x��;�b���+�� 7�W���^�����+�|�-�b���
1_w[������B����_!��n���u��W���^����Z�/,~��~=L~1�q�y]_���]�J���/v>����Q�7�~��q}�6h�w4��>��t��G���aM���q4�����t��G���]M��sq4m����t��G���YM��cq4-�~��t��G���UM��Sq4��>��t��G���QM���=9w��P��ll������H�_�Dr(�z���C���-O�_���z��Z����x�����T��~����/Dr(�z� �C������Z����G�.��O$�S�N�60pd�I�_�S����!"'{6�(1���O��Ee��]�C��y�������`�)�'R��>����3_M�A�+k���������1q�O���A�C7��2I�M>��O"(�~��B50p�YH'�Zx��<���,�W\�q>V$���d0���U]�$.k�?Iq����ml$��M�RY��'��T�)�N�������1���H�Wh����q���"�]�$.@U`�t�L���+��?=���"��s{�,��F��_{��:Z%2N��$����#�U
���O�N���gai���FVHe�r�$�V��,�Z6���;����x�6����/[��oJ^;	 �.DY$�4�sLu�����,��X�a'���!
|�$�N�M_�DXZ�p��<���]>8�y�lB��0i+�%�l��I��Z����O����!;o[����0p�7�kDK5�I�90�����s�������(��"'��inNe
�:�e�m�K��o;�k7d�f�<�
]M��FG��15"�����X�����h,^�$����K)�?1�jj��.���� ���fg/=�������)2"��B���w��mIf�E����<4�
t�<*X�,2x\���(*`Bve�|�D��D�C$M�n���xXq�������)!��'`'���V\��Fu�����i��,�8�I��/
�"R����"k7�`1���RC��oC�G���m�|�	��_���)���(�,����9�(Z���]EI�[o� $y�Y�"���(x];?dbj�f�����@"I\�/h&+��t�%Z ��%UZyf'��0���*�H"��6��?��0[dU�U'��K������N�S��`"���"�i�7�#��%��X@v�@e`����b���N�w2��+�CuRjic|5��?/b9#L>�x��)���TQ�,Z��NB��b��*�Q���c}��V^:���q��bS�!��f��t�Ivb���)]��L['!c�����+��%��1�*?�L��y�q�E.�/<�MM�n=^&�S�O�q?��k���vS�cz��|U��������B����y��!�:m���#���?����J}p�j'����7
����,���/Q�i7p���v�#q���e�>�gy���K:T�F�4Cq�(D�L;��d�����P��L
d:I���5��.C��m����:4�
E#U[|�?���5H:J��|'U��D���V ��,����D���I��M�H�k�`��E����x'��<��b���kVyXG�5���-x�?����P;�����������#���h�!
�w��� 
1�����m"O��SM@�#q^�YduM�G�M�hhc�b��d�|����M�;�I+�.p>e�Ni��h�c���%�0���"?������mX>D�u��l����,�y�ka����p�r��T��2T�t�SE/����xZ�I����I�&is��d���������2D�9����a����i@�T_��e�y'E��/�����/�-����������N5���^H��c�do�N!��f�U��OG�/���(gl!^}�����*��w���a����W>�TA4�![g���)zE�k������9
���=�;�u�e!�G+��L.e�h�����c���Hd�[�&�4�F�~m`�h��>i��F�9wMO#8\�@�v��`����s;w�[8���Ot�M\�������������@�@�>��K`����Y}���n��%bM/D���<U���YX�,q��7Z3�-q`�V��
�]��i��8\���I�t2t�[E������!
�h�}�����n����j��D�pl^u�����%2�)L��������U<����	+5���E�R�������u7}8��8�	��p������
����s&&^dp�j���]V�7��M��,�����:���P/�2��,�o�
��C\�������57"�����
� +�yyD.���?
���I�q\{o���lC�"j'��j���,Y�X����W�N��Kl 7�}���V�|����d	�f������l�YZ�8��aBdK
y<�������X%�����[gh�a/PAVZ"/�/�F�:����)�{����W�������SGS�}%�,	����7\<�����M���[�<��N�:P����+���:W�"2f�����|�1����-b��?E��D�|���1�y�X���z��{��HX��s�N��?/r�dYO�Y7t8����m��e��{n��7|�L~s=�%~����DV�\���'T�,�l@��
�M#�����d	t�D"�.U^��c���(K���O���f�Ql����Z^��IG'O���C�8j�@����4�F�u�?0��.�+���y7SH|X�
M��'��������q`��`jk#�%T���`��5�
�1|i�a#E�V�N,]���"�>k�p�����PF=L���X�����,�m��C�= ���= ���= ��j�mc��0�/��X��7�KG�vZ�3��vqY���pQ3����9~�m���Y��z�mnHe��[v�-���-BN7�&��j�����9eF�����XYTP1�/�S�+�����M����a����sS�y��80���m}y��a����<����x�\������*�J{�+����"o�S�����/$@c9���d��f�_H?���V��jBY�������x7���`�8j�10�BRnn��{���M�=��cv��h�0���S��7 "m?s�NKw��������)Ws�$��y���8����M�j.;�7�C!�#!�����K��
�����
`�V{�%j~!�u�	�;2�`�����'��]�H���#y`��-�p����A�nD7�y�6�f.��o��Qk����c�>����w3j�dS%E����qx#Z�	Q�'{�wvJ�7����wg1��B���fe�t�y��������� ����CD�l����UK�u�[������_a���V�w����b��H�g�t��8�>�j����&������Q��Y�;=���"q&=v���{"��k�����W��'E%8���^T����Yf�������_H��{�jDKs�����M�)]�&�[>��Y�/R���
��Y�
��]��Lq*7{������i&��	������>�O.�.;aw���\<��=��=�{���/
P�������h��"T)���b�SN���Zz���v��P�6�l��;���T���_l|��
���������a��K�/;?���,�U���1o�������>����w�p�h�[?I���d����"�<��d[��	dsv|]�|�<=�����Q�m<w�����u�Y�1fvs�P�AY.��T�X��_=q>��
�)�u�{����t��
��E��Zui����%�~���B�������)�zG|�����������3�������%X���s�;�$kd{��������������;��^@D�1���E0>o$���������N�$G�-p�Y^�B�>I#"O���2��(�q�6��p3���P��[9<��Z�=^�H�
�d`�Jg����z�����y�17�W]M���"Z��
����8F+-�h�"���\�V���r��%X���
k�S��c��|4����~��]Gl�N��Pql��!��le$�L�W���6O�>����9x��7hZ�y��s����RO��~d1x���2����}�1��Q���z�A��T^G�@��,�� ^G�W!�j�#w�)@D��<N�K�d�;4al���2/E���t�d��8�.��*1���t���4����3�m�0���TI�����~�H��:8�2/4���xP7�$�^EY��?���������&�}Ocxi�y4��(��5��U����AG�W��Xq����@D�S��xP�#�Q<Q$�F�5Q=�� ^CK�W�5��-��8���\���'����\���zr�/��~^��.�����5-�"��X�`��.�u�_I��O�vMc^T'�;�D��,7]��s��Xv"��}K������5�c��%D��<�=�e;������~�mOu�MTJsr������<����B��^���3������/��q������Xv��uo�����W��(�"�ez���/$�Hy��t���E�0	\�?�~s�6&(L�,��,�^���}�����D�w�G�M�.�'�wJTn�B��/�L>�
%Z�I�e4\�~}4�(��9����J�O�a4�����B&}
�w�_'}m�g��A�@���,O|�u2I���n*�F�_H���
���~����1f	����Ahd��|\��u����F�u�F�m���;���;f������ZEK&:.���(6���Q[��b������=�!w���U�%X�����+!8���n��_���
��c��T�l@V��+{e[�/������T"^~��0���������u�����X��Q���:���C�hnG��2��c�Jva�m���G�e���]l	<+����ahh����F�A��C�/:nC�;�.b$����l$\����i���"b������j�����	��P_s]�6\}��jHu#F�Uk��[��S���Y7���p
6�]D
����2?�^^h�.:��"�)����v6	p������zK|��taW�{���z�i
0~=�4��~�i������(C��?�U�y�$#�5���[�;M!������TO����g�io��an���6�c�8�h����(�[��S_���B�����}�����!�}Q$��3�n4������*������X'*�t����e���S��g<t:Z�<��T��dpx�
*@?���������'��iR��?���/*A��L�A[����H�jK�P
wE�^������_�����T���vF�o����-uw�M���N~����������Z��Bk(dQ`������h?�dY����r��{t����]�%w`�����D>��M!
�\^��@;������	p��Z��H�
���6l�Me����2"l_&V�`o�Xm8`�f�F������n��p���H�����Y6���yXV�$��Q��l������g����~/��<Xw�G�%q		�<�]����a�7T��>D��;�`�"�M�����=�#{��
�n�1���C�h�l��t�^|���������u���;�����>�B8$�2�T���7�s�������*��iDd�@c������1[�'\@,6����6SO���s@���S@�~�	�J���i6���o�v�48�/$5���D���O��ly��v6��1���Zl���&�++
��/�����[���		��m[2!���:�"~{�Ta�%K��gHU~J��J4F���������
;�S@*�8��/�F��)Iy�����q	��z�,�����
.6��y���Y^L��T9���yA�y|�������4��D�H��8�����������m�>���TXg�����6%�1�'�`��k�1� v�4���<��H�nN80d;��xx�����86����I�W
	��N`�������k�|���5����GFV"2:]yi.��?�5��`\\v )^��z+X��
<��b���A���9����RS:����
,��	���q�'G�u�r8�(���wT��P����K����a���=�Gl�^9��n�"��������l��u��\^ *~��|\4���i��>x��5>o����7�?/"���g�<(�<1�"�O��'�:���D4�[,�+_L>)��GGX'k���)�Oe�J�B��>H�����)��G�D�Ey"M|#�ul���^�!j_'��I��"!I�6Z�D�XPu�/�>��z����2��v� �*���$���u���6���3v���=��V+�����
�����EBf���n�
������S�P����Tf"�zi��Q����o�p,:��{������<�7��"��W�����Otq��|��1��\���/+������������oX}^$d��n��<~^%=��/y
E_V�����~����y��3������v����eYDIN�YvM������?��x��5���~���y�%����q�����c]�6�Tm	~^Lm�������>Z�`H
xBk�Ho���
�y���$�5�1�+���������q�%��o����_�u���
iM���P��������9@��(-��:)����������'��/~��}���������n�&Uk���T�:�E�aR*��$W:�K� �k�8�DH�h�^��Y	CH\�d^�hHr�c��&o���KGJ��JhY�+����PG':��	���<�� ��5�"H����5;�#���y�����$�,���I<O;k��C�V��)z�t��B�K�x!�'��S�oQ�����������Z4�Q����gRd�*�^�l����B+nO!���������B�x��A��!K !�)��L�[�J��'������������Z�.��_
;�@�x� OA�c�`��l�����eF��w3Z�$����n#��!���w��Xu�E��C(����A�u���>/�k?�/��p� �
�c`���Ka(����v���(j #��n)�0�y##(�0B����������c� ">�o�"
*�4�������� �]�9d&^��1�}�N�����a��.l{)2&��K@K��j�����M���~���dh�����
���t����\��^���h�~����Qld�m{��@���[������.lK�`r�
 �����uy#�,J#"#���`��=M�=�z��$	�X����������>��|/0����P��\��Vx;-����s�IW�5�����%m`%(���D�C���\���gqO����u�[.vL	�*T<�����a�N�x�_��R%?a�/��RSCN���L���t4��o�'{[|&��:
E�'�e}j�7�	��S��������v�
�d�����'�7��a���,������sRc%�N7�&�BWwP	���hI7yx��\����6X�����p�$d�y]��M���^�xL��i�:b���g8]^�U�O��ez�x��������������P�����H#�=d
�t�O�aR&��YdYOu
���RpR~�x��Pr �i��"���e@p�~#���U:v��;L�o�j@��\�7�A����,�P����%�S��d^���o 
��xQ��X)�
�^�������'�Afv�N7	P��
��@���Z�G������XP=+�?2a
��������j�y���6W�f)��LP�O:,=�`K�h�SY��R����������7C����x�|�(�
��u52'`C��}���up�����>/+��3��n�1l��w�ECa�~*eI�����I\l���}]<r�(���`�����3M�Wd6�DS��v-��.OFZ%��V��UG��&�&��%@;�s��bHUkgS5g���A�Jg�3#R:������
����O
���Y�l������V68t�5�6�y�3��>7�#��mA�bAQf�R�����{S����jL�����i�5����#L��y���cZ�)
m���������6��)�?.��1��No�9�Dd8N��l���I��7���{e���fNC��5ghJe��^Li#�N��%]	[�Q0���1�l�(@gZ�;�����%mH�@A��dI1:{���V,A,$���������QKG!�%}�W1K���l�~XR��-iCR'���&��*5��������%mDd������I���
M���%%�RO�y�������,�-(��-��rp0,iGZf�V��d[s���0��X���Z�����US�����V2.�p7�UM�d6c���aaLzS����6CJm5;Z�f��|���	Su>H-��FA���a3k�x�dM["�Y"(C�l��m4����
,E��b�$9"� Jdh�QF"�2���O�$��' Y�D���GPIFN$<�P�$-��(����@�X���l�}"�|!.�."��L�^X"�P�A���I�J��,0�%y����fA�n2^J�\�GPI��IT���x%�8R%�zJ��J��k�:-�H����)��
��Q�����O
���<�:�0�����P
��W��T���L��(�S[�s/E�H�6S�
0�7I�� ]K���2�13Y�Y")�Ii#YS$�op�H��GRa*,�2�*�n�~:�K����GR"k�ye�
b%L����yH��#�%`�Y���8���Q��W���tCGi���z��y�\f��~��P��X�����{���y����O���m}�X&Ais�R%@����e=���E.�A���55DP���'V�&eZ�LC*��%�bBM����,Y�f?�����t[�����UV����P��h�����+X�X�S��"�Vd�$���OG��������3nH���dn��&����F��vp�"s������PJ�n:D$���L�]�2v���6�<6���:�����������|�U@���P���J��,�Qp����}f���y���r6�2�k"Bg����i����%=B��K�T�k������M!&�0���n�W��t,����`�J�A
/>���s�*�B�OGU������+�;B1�a�8@sY
q�RG������z:M�ae��n���e�Z�a������}�x2W���+A���|��n�o����ET#.v�Z��%{$P��Xz��5�5T"��&yS�������k#.Ok��1�y�c�pN��MmHm�U|���]���Q��s�%��!;����u�9
8�=G�����Q8�G��S�Cv���ID�!k�%�]�p��-������cpK��:Y�=��PI��2�1JN�bp�qsK�����=�vrF���xO�1x����G���)�?/��xl����%�1�>6�w
�5���������\��VM
����z�IU�cVU�D��1�|�|�����H��)�W��"�\������`�N���%�O��C���:
mmKC�%�O�!���Dt`2�e��,�r�J�=�6������huduM�ov�]JE]��K���v��!�K[9�����t�B>��z�t���i�,��y����,sB���*���3�	pG�D>G�*�I!)�������������f>o����d3B�xl�h	f�D��X��L�-oj��D��k��a��I>?$=1�������n��M-b���1 ^d�#}�q�)�s��Tq��m^�k�s���������U(h��!����c�<?D��!���_���������6+���y�%nU�� \v��O�<�����u��!C�YK'���>����&$,O{�/i�&�T~���������ii'��4.�x�������)�>7$�-- ���*k'&�B���{���-����������*����p�1_�<������)g��u���&���*�����w�Z�c����������%?f.�1j����}�Z�c�B��2�UH�'���|����|�~��_��������_5:��V������SQ��5w��~}���L��/}����>��-������O����o��XG��kt�����=_��?}������}z�����~z)^QZ���;q�����/�q������_������]�U��F��?���������<����}|i�vi:h���8���@�{
��*�8z�C����1����ai�*A�p���=��BS1e"�Y���a|0���dvj��F?V'�<6X��Qq�yB�����H����#�����y���ND�q�2���;$�h�7Zo};�yN�?���M��Y�+@����u��I�?��~��<d��2B��>C�TQ�gL:<����,����7$:�Ap�	�Z��=U���dWs��o�%P�E�n�Q�f�5$Y��~�8���rB�+YO\�zv�n�
�,j���>M����U�;Y2���#���hHN��0���E���j��<(�j�nG�$]��c�Mf����,)oS��x��U�^�kCp�o@����"��f�?���O}Z��.����<l��0����o��x��?d��w
p;��_��fWw���*�
p:Nb��#!!1h&�p���f��W���cg�f��W=��8v�\�-��wY0����D%X��v���`�n%�[|�q��-������	��P�q��U�����P	4L#�d�1b���f� �7CcNZ�tNZ�T�,�L���LRp�{"��y�	�~��z�o�+_��b,��x����B�����+�
�g����Q��,Z`�^�'Sz��Sp.�>����byE��ic� e]Uib�l���$�L��4����P��_�<��7kb<�������������M���i����a�a;���B,�3�����oZP�v������O\�M4�BM}�����B~�S�]�y�O�V��g���W|��C��a �0�rAH���2��iX��UO����*�� ��|S�w�6]�������f���5�,�v;����A��-o��~���T���6�q�!�� ��J���N��M���T�����A�VdE%����p�MZ.KI�~�e	���$0r�6h�Xj�l`���m��\��AsE����lR^�UXQ�f!)+���������*1����q�p��8)k�G�����$�P���+V��hB�yQ�%s��!*�M����:0;�[?����4��\I*M�A�K�{BZ��`������	���"w�s��U��xaEj�s�l}.Z���I�0do�y&�����y����������@|-�q��
������������X3%yZ�1���
�uE�)��"��7<��;8��M�����G��U���Tn�,��c�"T'���r�5Q�����&D�3Is������Oo6���hq�?���,a8��v;��H��
��xj�\���������|-���E���n�r�pEm)��n�v���O��G��i�m����SpX�z}0��e���M��b`��H�������y/k�V�@\��n�TQ�ui*2��vyB��	�A�9�^��3��b���0������&0��+I���iH��:z������ h�`��������|1���:�\G�	����&�e�&��yE��+�����iZ���2�},6���\Q{d)������X����=��l:KB^GW�k���~}X����������Z�	����0�Z�[����WT��v�������}�f��>
jY��R���y!E�����Z�{��ui�`�`L�t]Y�L1{@T�U�A�>Pp�����$P���$tx���A �;XHu7�����U1��<��>M>��#1ky[@�pd�mj��Q2g��J�@��;��f�&b�s"E�r�)�GD[oz4��m��L�%>��JX������������$U�G
l.a!�������x��u����p2�dfN�B�lY������v����:{I�T��MAL�&�����h��*���n�i��'U:y0u��	�����}���L6X�{�*�]�4����h�U�N:�1+�"�1W�3
j�L�N���!���Z$Y���#C���T ������H�27�}����y#5�)�w*�gF�K��8�p�(�i���c�K�����q&���c��<��L�Te�9}1�����zo����
`�w{X��/���>�����������k�����3���A�������S���Y�<�5`���m;1�d���l�WTq����E�� ���A�Y��f'�[������A�}�i��`�G�����Y4V��<C�z������AN���Y/V$���G&+{�����/D�y����|���T��JpUw���������u������<�dfo��63�Q�a�`�m�\�5d����;��ng��Iv6n�,�aC7{J�r�9��I��AL�fR�-���f[\�6���[����]��v����k_�4��4�`B��m���$k���W�;�&����U�ql�b�����dh��n6g��^��-=���Wy�Q�)w������i�� u����w�tf�fR�>�g��}����n���2#2��bH�d/�)0�2���m$� �/$�y����L����H@�����l�a��IR���~'�fEk�Y��������j�L�:�:
sw�b|FmE�g6[���;
����Dd���2��X����'�q_��^;����7�}O��-��@&�
�c��*�X�m�~'���UX�Yyb����lC8���L'�j�@�����:nCA&�%U���(VE=�u�j�L��^�%Y����Dd�N�ak�-�H	�oQW�n�������]�p����n�LD�A)�7�3��^lg�?">�����}������t����Y+�J����k��P�#�`�����1���V�J`P�l����b�19�Sx��Ak��O1K�rG��
�J�{��M/���v����Z��(�O� �<�f��	dk�����������,�.O_����'���d_;�WH���_�w���:��JV�/$�XP�o�u�@R	���kS�o'�D��.-@D>���l!t�*����b�^�C�N;y�}����8��
�x.��3�V��r2SjMr�=��B�x#������PJ�,��5%]�}�'_hu�S&��������7�I��Qm$�?���c%�;�0vYWo=��YQ��KS���h�[�E��Y6t�D����B�v��X��onTw��x!�6���N���He{�jD�a��yH�,��5l|B��/$�������;f����%%��7����aw��x�w��|!)��4���,�������#���%F�l��""� 0���e�����?/"�~����������_��[��"�%�`�_��u����	�gB=��/��n/d�G,�1��s{�	�y��^�Ih��Q��K�$�6Wh�D���E����R���,�����%-!$��Sq1%�|7������A6/��Q&R:6O%#oZ|��7�[XV���h
~c[^N��e!!v>3��A]��������|�o����0�MN����V���Fz\�����=�KK�`��X��j�ec7�xN=�����%���:�N���8�0��.s�`&W��`����T	2�^����863D��o��
�z�'X���+�0=��f7s{A�D����D�2|!�r��M,�U.������bR��v�����L<��k�w���M��&�.�#LY}��=�9p�?��������b�"y��9�Z�x�	�^�8���6h�CT�)�Af���O����R`3�p�2�&��]��&p�+�5Gz{B�bk4�����FTgQ��	p]��i��J�'��y3"T6��*�D�����G1�h$��M����������K{�������2�Y\|.{Y��.z# =��u\-��X^j��^"�3R��z��dZ�/��^����������X��B�s5��}D�=��E� y�}�0Pr���vp������������D��o�������>qB���^mUJh��o����M@��^x��� �N�k���.����*
�����Mv��
��D���U-��J�v����E��j��@�z�
��9B��G,w�^�q�Y����m��,���!HS�EI^a�L�]��Hj}Y�}�ON���K����,���/��4r8w�F#���I���m=��1^Q	����b!tXI��[���!�>�E�x�dj��0*)��-h�|���H_z��t������H&U���q*k�qO��43�Z��f{,*�����B��)�g�dV�c���m^��� �<�����"+�L���Z�]4�Lyn+�L4��Cd#[^ i<la���2���E��.�2��u�������H>/27{o���P�j��/
�Y7?������.r��7=������C��q*���&=�0�w!��.������*�t��&�6F4�eJ������D�f���pi�����8�8�Y���Xz���aC�����������T��q�����(�z�f�$s����'�Y��������T����P����pO�F�d�������
��*�m�++���~8��8�|rH�t{�\��u��z��l��i��5+�~}Ei��m/�l��V�7���-��j]9�3�����O��|c4D�)�����[�����YIujt�g:���q_�wp#�
����dYu��&p�@�n@$�_d�������	���wV����H�Kd��~��d���M&�����v�g���5���	�Y��7�U�Y�}���g�f�s��������en�Q^�	��<
�����x�E3��tq�L�X�YN�l�o�2g�J%��1��?�N����.kQ�\����Z�OI"����������#C6k���Y;G�Y�.=��i�v�:��i��j���i��Q;��A,�val{�ie�����.�lz@X�%fagy�T�������S�9N��)O��a�fnV
O�C���\n�I2V�9���d��EA^���m=.��0��m�|�>�k9�zc��B��3,+����B�f���|�sK`��k7gmM��VR-����M�m���r%�y�"
��VL�3����~ly`o�������C9����U$�Z�>����a�R������I>�,�v��F���/�Z�M����,�T!���reH������f�sR�Y����E_�W.�Q�r��6��a
!Dv��1x�Ek����$_����;�G?�Ab�����&����5��,�'�$Q�4Fuo<ei�qv�7&�^V�=�V@sqI�[��bm��Ck��g8�[e��E[]��o�������J��E�����{.5�Y7��>X���O�R?�0\�
h�9��cVuO8"�{��kEYe&�D.$���o��_�i�����p�- ��P�����~?�h��EY.BRM����(��{~�;{^����K�W�n���zZO��t��#�N����r�F*��]�"uz8;�'�"�g�YH��%�ES�	��E���fn.����M���s"����<������Q�j�=�����8l:H���'g���,%��Q�Zl��w�H[�f5�-������ ��gy�n�/$�����3�f��I#���{s�N`�'|&�����?u��_�V!��BP���z�o�����;Q�E�O�Y��m!�MD����g?7+)N��9B"b#�n��Dl%�����OO�sPRb��2������,�SP�lU��V�<��V��Di���DxO+��*��HG��a��������*D�"�0x�KT����p�A>�x0W�<h��6���:������R��c������?�Q�,_Q�S7]��,��\)�o����@pq���e����&�����V�����l%?Z�6+J���^�m<���Y��0i��g}~���#��,K!���������8���a�c��~��]�3$�n������J�x����#�����1��J���O5�Yd,�T���y�u�)�g!��X���x�u�� �[:fyXC{huA�457'Y��x�������2�x�;���9N��g!?=�����.���������B�S�q�z��*��'������9�H�1�V����P+U�\�7��t�,�����AT3Mg�'�xx���-Qu�-��Y���J�sZO�V��I� �g���$^u�'nr���`I��6Z���-�����������0N�D�W2�6����8:�s��O�9:�
��'5D �e��.�Wgy�H��0����1cL���- ��d'�e*��Y���.����E��,���� ��Y�M���7�7B<hJ����	����7#����/��$5�)[�E�LG#�7WR9�e$��e(Z���I��[Q�q�3��*��Q�f�e]�����������d����J�y�>����RT<pw�O�~�i��WE��U�
��[����3������/�����.[��L���������b
�+���_���H�:x,��_�g:HS^(d������&��WT�l���,�����EW#�:n��J#���4��h&��k-��&6:����<����m�]��T^@��d��������N���������x��Q�&���7�
[@�(�~��d��K�d���.��Y���T�\+��{���2G��%�B���~�`@�2�H����7������V�R�O�y����]�;�U9�}Z�o�����F%��n�!"�[��+�-�t9gYF�lk)��:E����#�7��B��[0�;tI��n�.��*��L=�	4��;�h�$��:�H�*�O"j�J��u`��K�f��lh��������g?��c;}c��_�4�l�>p�Jg�p��X�1K%�5�����n�C�C�Qx�{��x���Z������7��{�~�&��{�J�:�O�M?�g!r�x���jubc@�)P<u�,y�lZh&Z�`����F�r�~�qU�`�CE}�~�����
��7?��
Y-���t�[���`&�B��x�twH��'�����G^��{m����vs�O�U��?q(���]nFL�vlwco�O�YA��NDv8�v��Z����;Gz`�H��N�����e���{"	h{<�,��,��L��,���$QGI�iM�'�b��,'�Nz��@�L"+0��2
=����3R9`q�#iT�?H�������c�����8"{�9���0NU��>�IJP�WwN�[���0N��$��$:�g7h�>/��e���)���uk�i�:�����8��Mj�clf�C\�sK*��3��$������+�(��O�3l#��}��@T�M���?��e���Q�+���@���68"8�����NL,'�
,*�6$D !6F�Y��������i<r�t���FCl��p*EDq���o�Ro�umXTZ\�X�'������f��� ��V���_H��CM����:Ip������XA�`�=w�h~p�g��Q��Y���WH�De��������<�s���U���aC���#�aC��G
�[^aC�6���<l�����������?�/?����J�~����a���x��
Q���z��|b�~n��s��7�z�!��G��p����Y��A��}#���cU��*����f��8�v"Q���&>+Q-jn�p�V� �t	�S
WZ��]�?JHe��"sDF���3��Q�$0|����Mu�P<C�s`�mr�H�BZ%��f��8����F0��KET��Y#jn<��Y���!]���Q5VM�{v-T]B���%1Q���n�Z�]�$	��/��	�pv�\�����/����V���l`G�O����v�}����q_?��_M�SjV`��#��'���s�_un1�~AL*
�~:�{X0�iF����;I��o���@��p���2c��vOg���+��"��7����w������^������M;n}e���3�3�>-:���>Y����6��G�&��d��`+�@b��dS�����g��2���, fX��
�K�ru`�\�0fU�P>��i����jq9���l6��h@#%�T.3
��s�Q]�d�}��k�t�&��	��w2����o4��*���ZT��OZ��T��k!%@�T��N&u&"k�+,j��e���T��r����g5��,��71p�I6�R�
sZP�u����4>�^�=%��ZV�d�Sl���t&��%[Sl2����4��)����#(Y�M�1f��
�����aNq�f��Q-S(�>)S������e���wnL
�lL]wiMg��9]5�!2���A]��0��U�n��42`����a2�+���u/3A��M]������c8v+n�Tg�2�������.D��m�S�l������-OuF*��`^������HV#�d&����.D�a�{��7��'GuaY7hV]�������r��*w�f��"��}��#!���Hsf�:S���:#��������H���(�{�����uE�e�Z�o~�����sv������f3*J�+�� �]]����mj�.*�-�R�ld/�IM&u&P����v�F���I]H�}�����Z�MK6����Y!oW�O�0����:9k1��-����B�u4&]�p�	�������:�C��)���cix����4��u;�������btN��mj�T�0{��v�l����$MM������z�i<O�_��l��1Q������s�e���/$GSe26{y��2����0KY3���g��
O`�?�q��BDF�L�6���P�l��>o�1W��z6���Y�j:T8���l&���gg*<�k&ZX{-�y�
H/���`Y]�O�;���L�mf��]f���DxPU'�n��R�:$��C�����.-e�W�,A��(���W�W����3�_��Y��D��[4��!m"�o���q�������H�9NF"#�e��I���rj+x�O���N9��r����~Bw-����I��~<V�-z1>4����B/�2��[���t&j��S�cI�_V���jO��	3<�M�UzA��S)d1k�� ��G"��6
/��C��#������l\�G��F3�MkF��]c�~�y8/gXo��L�b�X�������G8}����dk��/'$�>i�q@�m�`�3Y�W�I��xC�
%� �����,RK��K�VV���!���b�A?~E���������H����o���BE�
N�Gtj��_�GQV_������-��w���6v�+������t{9�V�q�����mV	�vE�����
0�� �������T�E�K@�k��;D����kG��iB��$W_�@�J��/�Jbi|����Y��f��DT�=&P6����nK7qi�r�kO�Q&|�F�g�>�br���,�G�������b�dX�j���fAO�GaiB&$�����I��!��7� ����7U(&t�U���G��~<o$��Z^�O�l
� ��@�yF]�RV�]ru�ZT�� ��Ta.�h�E�q1	s�[��J���<����	�gw������������D#,����>ld����W�sC���a^&]�([��A�%
��jH��N"hP_H�p��
�������G���a�jk�Jl`��F���hQ�S�B�k\wnR�Jn?%��5�maz�Lr��7�$�'+�Z�;W�1��>���lRW�sM�7�S��n��S�}�Ef`���t���7)<�vE�37��=:=M�i�����X��"
mbo��&��n������Q2|^��� 
�a�'zfsoV��v�]�����&��� D���;�����5����V�Yz�����6��4$Bj$�X�V�p�i���y����0���& �F��M_H�y�ct�x7�7��jH�����L�7c��b�!��)�T7urn��,u���anA��+�5�k����F
��"rh�f/b�H#Q���g�w�H��3��b��]���nB��+���������FqAJ }�i�	_x�����	i�����!��>o$���u�8n���i�c�U�i���v/����bc��_M��S���P������
h�W�`K�X�y�F"��?r�wkE�����)�������m�������n����1s�w ����;O��p���.�lBx�f����#='%-#f�����������N�fW�q��H������j��:���d���F����V-�M���w�������LP����hCfT������	�I������{�F���x�H��c*��3p!�b�����������iH/��o<�I#�l�����������$3��a��x�-H��c����D
����5�r�@����o��c�����T3��zz5�G��^6����6�s��5�5b���f��b���bkr�{�f����Z�3j���a]���Cl��D������@�-��ewhm�TBL����k�$���4�7����5i�����R&4
���/d[I���`z'$u��_o�1�J�gN3k>�q�����Mp���*3|�
SX�v_Vm;�O�-��l}n�����+05�m���H���z�����}�	h����7k
���"	�QG�����ny_(����xD��o�����-�����r�Wdv%�5�������c{Z��A��%����g�5��Wj����"�}}���7y�~�������zO}���!' E��H��S__C��}�	�~@�a:��/H����}�������U����{�����4!�d_���L��o,w�_�����c�s�m��^��6����!���������y��/�E��]?�t���}�����
M��b����q]�t���u������c_�_�t]�|���u�un}������sk�]��Iv}�����m�?��z���������x]����r�O�1_o���^?�����S�B���e���{�
�tb�>&������tb\oZ~�b�����:�t]5%�CL����5�mN_[�����:�t}���b�>�����p.�:�t}��u�������������vO�[����:���@�����s��s��k�����������|}��C��9���Z�u�]�����m��>k__������>oD&�/7����!���|}_�{30B���!�����uoF���7#�|���b����1_�f`������}��M���d��z4�����u}��o��>�_4����m�~N���d����TD���X�oqC������'7����
��rCx��n�]��b������?�!v�On�]��b������?�!��G7����
��pC������'7����
���b��E~n�����eNn�_��brC���w$7���v;�!~=[�����9�mM�����M~GrC��>���~}N_�?��
����Hn�_�����_s��5�~����/����	���]�yp1������fCYd�`p�uj���B
^�!�lx !�R~^��D&l`�F�y{!\�.�_���<������3�_H�cUJ�����o�cX��.&��H=�*��E~t��rZT�b9e����-�wNy�Zj���n�`����*���/���n����(��&�
�sZ���HelL����y�O�F���m��hcR|��t�@0�'rV���@PY�Y�j�nr�2z.i�Rl���2���Lw�M��.�Hw61���s�A�0���Q�7
��O�.>e�[�\����r�B���O��`�te��;|6;���;-����A���7��E������r�W"������|���`���n�/
��$_8
%%��@��dT��| ���R�t��N�1!qm���a7
.Z2����	�����z���o��u�[�K=�Q��
�B�h����h#g�M�����$EzT>������P��Wj���T�q�5�"Z;3Y{�?or�(�,kPl9o���EP���:�f=�\��1)�^^Dh���&��X�/�\�����A��I��6����3
����i=�!�%��7�*���Z��;v�����'S�f�k %P�EUh��X���w����pH�������d�������N������ti���zz��sY(?/"����TF;���8�qE�I�5���a�p#(��M��a)�	am��v< >���y#�)=X����������}�{�4�z2���^��Rk���G�]�$[6��]0F8��Kw�2�Z��?)Wz��R2����r�����"m��Eu+A&��p�������y�����W2;���������R)3�x"�3�d=�|�-�y�����D�y��=]'F�(�3��$�1�i:����e��,�,�����`�&�M)��=�)�4J|�������w�k�=������Y�N�2B�%����G;#"�D��
�����8$��3>�n:{�	|��[T1x�����7J���dk�T�Lk+�kw�|�90�i��eJ�y��������c���ow.�6����Z�����E|�B8�P.6"~6�������@���o��)����������V���~�����@J�|3��T+�ubq������>�����	����P���7�;D�!x�H��}�y�<�L�b$�����h7}��Ds�M�"���<�,7o;AO>?��~B�Q���b�,���$������a�Kc�R=
}�L�������kO]}��F��R]YrU��XMM���7�%Z2}n�6eB� j��Yk��&���c������G�o�����x�
*�o $������/<�)%��B���
rsP��	�7R/j�g�	/w�v����H0�3��`L�L��=T�(C���A�h-�fjM�rA���t?�`���vm�lc�8KJGOs���7��,�4�����L��o�����+;��]���\��4��Y.)�q;vj���A_H��A�V�����n��B�w��l<l�y!4X�������!?/rZ��0i�����������LY�Gm���(X�+�W�hP�����E��F�.��'k���a?���#���[~���F��9�o��:Y��6>�?!U|��_
r�6/����-s�-�FF������]�,d�M��8�n��yb��e���l�lL`3�q������@uH�6��)A+Im(v--�l��s[C[m?�������ui%�{��;�@%Fj�Pv��6{���X�2k���L��pq����1T�M7�cN~Pw�1�P��QoQ=o'^c��d���2��{�dtK�$�0�LB������X�qGZs33j�v�wp�i����l�bS�,H�bd7*��}��g�U���������fEYmlS��e�$��>C0!4F7��+�����D���F���C�=�0�����t{n.�>����JR�Z�ue���|�(���
il;�������l��M���j-���/�
�ID����2�i��cg�~Y������A����p�1
��,�V���l��(��r�%H�d��J;Oj�{�����wO��=����kV�������M����Dk���s��m��5�2nb7���|�t��=���fQJV����a�3�@[��4���C�a��g��c����X�r-��$���p�����kM�k�����*�Y��
���������Y��9�z��m���WT�`5H��j��
g�u;���`&<�vV����$"K6���H���I���L�L%v�%r�;��t��_�y���z�0����{,�pt���)y��6�d�p�2�x��<17����4�@��w��bl����>/TL%*�{����Bt����/����$����$S���@���z�@%���]�[sv13f"2?��|��e���B��6&D�(�I�@P	&D'!4�$we\H���<�j���� ���������"s"AI	���fe��<o$���(JtXG�V��#�GAGi��c��eE"c���u:7��v���*a�X����\���O.()�@OzRb�b^��v[��_E����������WI����}�b��yk&�������f����vYa�F7;	'�	@g<�-������s��������R�'h�[M���B�Ul��e7���\�I���w��gE���>#�&��B���<T���JD�[�t)8��i��y��j�_*�������+
�]��{�)����-��
���i_�d�
���l?+R�LGo$��B�TT��m�5�n�_��QT4�!��XP���x}f���t�IC����f�_���V�nG��~^L�{b�D�m_QAww)A8g�����Zv�i=��;�U���UWs4&���I_�����q�W5�Z�fG3�� ��	pOJc�f�%��M@r>=��z!����g����������C�A<vaF*_��`O�Q�WT&�5�B�jf���D#2Z�D������o�c����|���i�Cm��L&Y�����
�J�fgP	��@�t���/$+t�w~14�B�6s\�]`:�Q�l_�:=v�WM����Ig4}�����xn	0o�����1%?O���+�g��J�' l��\P�#81��n����;[���nm�������jvEgPZ9���}�|O�Gt���y`9	2�����O�T��%���Z
j�	����y�����V�������d�q��J&������Q��ow�n��y#�Dk��������DD��|qx�%*�C��\����<����+��u������zGKP�h�N�l����m��B��f#����r=�H5��}g�C��~1���i���
Ts,S'x���{��s�O&�*���9wU�DO_jv
��E�y����	����"n���l+�W�\�E���/��U���j�����LM����o7�-�-(�%����E��������������t����_O\��m�����e$.�����*4M7��������H���8�n���W����tG��}�`�M���XA��66����>]����o����m/��}os�N��0ed+�"���N����t�%t�)���G$��w�H)W�O��A�$�`T��:q'���@D>�L�o=�*�V���;vK��WV$����d`���M@�+�\���Hf$��1���,Dd45	��=����+<��d�����D��2x}�V��s�b����
o���R�
CK�]hR�����������h��F�$r�Vf�y��y�6.�l���s�nE���'2�Ps����G"�i^F#���c�nE���w�6����� �<�{������������A�!�B�UcC�:3�3$��W�uL$lP���tcWM�O�y)2����l�x�1�����@���:���X�������)�h�g�J��I����F�W5��
�#x+���cOr���(���g��B$e��lcx��O>��"��w��<JcxSp��}z+��� ���`���>+���*��X�Y��
D��A��hcoA%�+���-���X�z�V8~�����z�V���QZ�8�_�#���c�B�m��"�`a�_H�M��l�~%Q	�$�	@u�cI����.��1����JD������o���1���w�<�=�ikf�Q�^���W���iE��DSjNnY�#�j�����/_H��~/�s<���\����,��R���O�EM����a�c������}�Y�7R�[N-�#���^���~������X�h%:�1
�@���������>p6�����}��&����J4yg�q$��MA�np�D��,�*�RfR�6�h}��L���`�?
'J��BNs��K%���0�B����!7}
���7��Px������\mz����$�k�a�)�6
�B��^�
^o8����1f	�	���A��|���U�=��f.L���E��<lae_p����&P����d�C��X��cc�+�s�5ox����9b�m�l��]!�*�R�b8[��l���� �#����pQ���:��!�Y���+���Q[����*T"�	�~1l��z~$"yx��@o�`���i\ud���C�h���������03��E�
�?j5�6���j$06(l����^th���uG~�����_(t���U��������6�:x���m�aT2!��]u�v]��z&�.C-|yL��6\��K-Hu#F�UN���e���B������u#�o��f�b�`���H���_(���$5%��"^������F#�O����~��Zb�{iN����M����M�_��M�=k7��~��/9�kF�U��"IF�([}��Q	&��S�HX;{x�v����C%�%;ZF��I`p��%��>�u"�+V����X��sV+��J������Vr�Vmn*�r]Ij��E&*��	��I7j?/�����/0�0��(�
Ut{��oB@�m6��%8s�,�N��{7������2A�m��y�����Vi6�;�"j�&r*��G�d�������dKI��m���m��m�[^;��7�y����F�H�P'R�d�u$1��L���:�r�
����QL���O�^�������eq.��B�+�Z�S�d����|e�w
�|W�����i%�R����bk�B$�����n��� $��H�����������$�(F�qt��l��+W[����]�CF�R@�6�%$dr�oE��6zS��iJ�!�o��
6��o���a��c4@:V��Y����3��_D�g;4�)�����>�o`�<��8�������Y�
�Y�����O�7���������*��������
-bh%���r%8�b���-He���	
0�s@+�pWL]v>WL��P�T8!`S@BZ��l�����y#�i��&��<>+����q����iU���,����/5�[6V/q��?�#��y�		��u[;dBb�]��	]����kS�1;����!���ZK���u��BhX�U�s@/t���R�����0��o�) <����K�h����z�,���itV�I�|�Ny1u�r���U�	i�X�����p��[����sT-l�i~�����������JRa�Z�ftQ��m<��:u���M@�T3���<Iq$@7'�X^-gnCOo�V$�(��A9�uD� 0�	��A�(N�vr������{KJ�./Dd4��=R]���h�<+�W�}E���|b�9@q7�PKM����
J��b���P��ds5� ��		�
�dm�������@Z���K;	tnL~�	��F!���7�Dd|b��&������-X��j�<u�o2�lg�:��t��	M@U�\��������|�dh}��GV;������B�b�|PT�Y���^��W'3�+
�/��V����X��AcN:81%��Ln���V����<��S^���
��<��/������O�����u<��4��*M@�������kD�*�M��&���N�qy�����J"v��%������l�b�����jbeYzn�-q�p���6{��mB����kQh��*0i�!��}�%p�Zu�w�&���� ��E����flA���l������x�PD�� g���)���������[{1������D=/�5e�eP��.��!�g����P�e3*JXK�W��3�����E1{Ez�M�[�lYQ���1�US�#���������t���y�h�fr�n���wz�j���&�y2�i����M{���)�m50�]�l�sAE	F�$�
Z�����~5!��65}�V\3�c9��u��>*�4};dI�~A��[�� �	�����5����8�L����IOeEZP�b��U��w�Vta����5��hfZ����R����}�������0i2L�����D�:���0���w$�m���� ����f��� `kSG��w$���������D7o���eE��p�����XS�	��B�`��lOH�)������1u�E��
\T��}�x�2��
���Hr'��u"���?��N�C����&�3�^h,O"�O�L�!�':&�ND�E-[8�^�j�Z&�����J�����$�U9�������1�Bh���a�y���o�V��@�B�x"�Ekj��+S45�B���L�[���?�"����!X3�B����t���X�s�����<���������=}�nF+�d�$VJy[��B��.���w��6L�(�>�M�i�����V��;��B�����#/�=u&����c(�U���0������g�����n�Z����7�n������W�E�Dno��U�E�N�w#��DLh�A@E;���H=�Y�:HL~^��1��6�f[�uA�-��t�Y�ty�N����)�/�i�E�����V3���e�����������wz"��bE�:��)�D,�J6r���$#����������vYV�|�u���D�s�o�+9gQ"2bH���b����:��$�#���|,������:����>/�e��4����
ob���ly8W��pq�X��h�=��8�\mX"�D2nwQ�.z�\@]<f��}��6L	�*T<�:3*31%o�u/�4��6	:��LrN$�6�y��f���'2n��3w75�P(:=a.�S\�'X�gLu�������i���PJ&��;��}C����Pj}�h�7����I7���K������5PI7y�\�LY���Xe�e_������9�`h�n���*N�O��e�:�����\f�~���k/�[��oi:�������<0&�������y#��!k�Ng���� e�n�}O���R�4�C\lG
�1�����D�I.��3����hl���#�V�+��?-�	|+U�O"p�����r�g�����"����(�Z�3�Ej,���v�Z|������D��������A�
�'�D$@*�K��/���������8����P���'���7S'H?�t�b�
m�	�2��2AU�����7�����eOB0��H�S;$�H�K&:�;�,����y�*\Wkj�=�8g������R��������E�A���Z������I��m���9M��`��j���#7����bT�t��i�}Ff�I�������!�Yr��Jp���%'�&��%@;�s�I1������3�����Q��|fDrB��|�yAD����Oy���}����,�q����4'X1�yE����Hps[��X�(3��I�bo����>/�}���<������^����i�����^,��q[����'{z[�{��fO;K��te�9���[nN"2'��lK������i��zQ��(�����)��J���\�h��$�dE	���S�;����L�z%��So�[�
�����-�D��r5��%��j`�t��D���QeE!��2Fd��+��'���p�-��$O�<�M���JS0���3���.Dd������$IX�	@aXR��Z���0K�-��Y�*H��-)��fK��O�("��m���n�H����c�S�5���������DJ��������gy� ��+�����e`}���!5m�]�Y��K�SJ� 9���]rM=(C��29zPB�Y��{PI�(*"��e�z@*�@6e�$�0�ge�����$�j�E��(��N['�Ht��|���o�(!��=&��
��du��TN�E0�3�At�4z�@��P�9�$�Dc#�4���2d=(S��N=�P����H#��%pq��%y��Yy3�A�n����y&��J��x��>/�}(���P8oj�C�*��4��w��p���QF�!*��#u�,��7J����LR����Qd��e�Gr_
</��Q�+��T���L��Q����*���#�l���fWfQ����k��}������[�zRD�'��dK=)��6��yO*L����,�i7i;���fD��"�������0[��	�="�uy�6�l5�=V��:�~�1�G�������ZS?�����U�S>A~^�;Q.���ve�CY[c}(��=&V��E������AY�>�Aiu���GP�s�,��e5fR��e�zPcKU=�	M@7����4�Sy3�RQ�-A��D!>+�cR����]��d��e�smna3���������8]aI��=3����
�I=��Y~r[C����h�W��B{rc'�:��������+]y,2������H�t�:4GQJbs7�A	�}:��a�Q��TX�m;�~8y���,@#>B�w������e-��_d��;�Y��gk�Q�_�#�Ig�����3�dO���"Ly�	b����"���B���5�d�x�����v]���,�	�bX�0����/�>~u!���Y���a����!���v�t�!�]Z��7�2Q������������v����?L�3�\G�c`�����EP!�$7^�9�����ET#:n���$�!���pY��B%��h�W%mQ���t�����g�i�����c�p�I4_�j���������7�j�n�����|��`o�t���F7���kN����|�����)�^�q����D/<dm����X'�;��-������i?(���z���M
3�>��nS�$��IR���}�n&�~� �rvr��2��x��O)���Q��R\r����$��>�-Ps�����-!���]�w��Nu{���w��J�m�TG��R�9�*�c����D�����f��_�F��"D(k���F\Y3(������CYg�=;�\v:N�:�y&}p�� ,
�%���:����s&uui���F�����}V��h/����d�����&u���X���u�A_��������>dA	���m�AT������f�|P��B0C�f��Z����)hi�H�;2���sD�������=����>�4����F	�	L6#$��	_��f�D��dB-q�,�����0G�$��jKl�A�e3)��muQ��""c&������g�"j�I�"N�N�KC\�c�R�������>�Bk
*>?���8`�{!���=�V��>���(���l�����M��L�U���p���|rH����!��'��G���q��P�:�l P�nB��0�m��lrHe���sA����g�4�7��4f���D67�U���!�ht��6�Rr���Phz:p��O���^\��x]~�u����|b��������z�3[�:�|]���*j0�s:��<��~����uO?�[�y=�o��~����uK?�G��:�o����u��C��=_71�#:�_���;b��u���������>������`�&��>�*2����I��������]��������������x��g�le��i��?��O?�G����
����WD������������?���������������g���:?�WK��z
�e*!���7j��?@Q�������JD���J�
�l^���w��9'"O��N��4�g�|��_�:�)���f�8p���d�����������=�G��/��O�'�/����~���+�����2i���,#\�(���BTPF��_�w)Q�d!J�������2�q�8@��3����4�O�3a�|I�,J���I�g��y<13S����HG�P��A��M����jn#��(�"Q[Nn*Q�f�-H�{���~�W�%���zC�����1e,��9v�sT5��O���d`�c''%�� 8�������I�8���hA�������t����7��X��Oy�������M�^����h���z�eE��Aj���v�GC�!�>�J�]�2�
 �B&Y�u�X
��������a�#��+i��O4F:	t���`���}�x������faG�����?@3��s;�����3Y�J�f��B%�0���I��,!����{���1'�qd:'-n�}�q�T~M&)8%>L�������u�O���|Q��E�5%�]����f���6��!y{e�l����7k#��CW���s���~�F
�.�LN���	�(K��b�$���$_���GnIl,��Z��^ZXB��x\�5;3���O�{%��l��9�F��d���$��#���iA
�$����E��O�8�<n����xMFe!
���V2mZ���'D�y��3�v�+���!���!�0�rAH�~����4,����
3����X�� ��|���m�6/��m
dT�����qE����V��XJ*���C�+����+�m�w�J
��Z?x��������gE*�hwM\��[+����x���aq��I�e�w;�(�,�d��
9��4q,5v6���EF���5�v�z\PQ��@�k�
+�~�$$eE����U�O_9�3I�B�jx�'�8@K�tJ/@�[H"�#k�P�:#v�hB�yQ5��9�����c��f����H&�"��/[����k�$�&Vu,���{F���g���BF�s�H���\��n��V$��>����R�E�M��t#�&Y�n���]���PAr
hB�{vOl ����r�Q��Nw)Ir|�}�������������NS"�3-��1�������+����]�<q���^���&�80-:f+����,J�|i�����M�hg"�w������uPo6
��V�8�YPa�T>������+������n���
���GW�<][���N,�(�z�_U�r�pE:�M[������s
��n������>9q�����@+SpX�KF��-�`�����|�k,�@R���$��"[/k�hV�@\��n���i��XE���G���%[/�V?�P��E[��dm1�Gl��{1�	�v`��yv�`p��HC:��h}�����/HbIF����<���5F\�7Rg@�
���}~�������B5������*�X���
}-�uD�
gFl8W��3�
�e-G�"��{��`�Y�:�������>,_^L�\���Gy-M�F�:�0N���������]�;�:�~��132��|Y7"���Z�.�a��H}���nv�V$��^us�D�;�|0&n��$���D��:k'�To�l�<���6��o�<dsQ��J����v��D$�O�O#�Hh-��A���������0��1t1��Gq��O�`��Es��U��}�i��5�z��������� ��'��S	+���%\���������dj����KX��/B;�*6������=$�Zp2�dfN�B�lYt�S���J����{I������.�i;�)��������M�v\{R�����.-H@L�w8��{�2�`��)�Lv]2�����IVM�X��f�V$���lS�
5i&b����kwU-�,F����H|V*����c�T�s����ik����(�������.-H^�d����M���.-n�F!����z���=���x+jcO��~��}�����6��Hh�0�m.�������1��N���_�RG�">���L�_�#9.�_�EY��H���a�
T�M�9!��a����u�����M�S�=/o��-v����������E=��zF�0��z�g��`'d�����AN�����^��_J��y������<��3ic�q� ��u�S��Js�*��Wu'l���M@�,5>��iz�����63�Q�q�I�!s]��e����
�v6��Y�dg���#l�fO�S�Z|�0:ia�#�)�L�����g[\�v���[��X��v���T�kxkx0!=���"��C������7i�\��Ze/��\\�������_`�f��\��p@c�_�}GA
�����i�� u���eG�tf�f����x�'��|�n���A&�C&�x�L������h� ��^!�z���NM�C\L��aN�r�a\1vXqf���i�	�Y��_m��}���@%��u�url�b|FmE�g6[�e#
�����
E�	��3P��<)������a?��-�v~�i��%7���{���Z@%�O����d�a=��
�1+O|N|��:�'��L'�j�@�����:nCA&�%U���(VE=�u�j�L��(�dNz��m:M�2�l(@J�|���*�����+9�������I��'����x�pK��D�]�2X�a�(�������t�b��+�i	h�i��-�<P	�G��I��\�A�B	*�MS�|���"f"�u
Oy3hM����^Yg��a=i���(`o�5Nr�%1����~���G?�#Xm2�X3�l��R�?�]��6��������+���V`�D�1�����C/���/�:K��=�]���$�\Pw7�8���8@�m�����$jgwi"���f�kW�LV$���B��n��j���X�}Aw|.�~!�B����e)�Qv+�l9�)b]����YHo��}���WL(�KzJ�������M@Y�$�b��X~y������W"2�����'|3C}�Dug d~�nVWo=��YQ��#��
���]��eCp�~G;7M�P�o�CS�77�;�q��_�`Vi�k]V���������C�`�&�a���$}!�m&��_�j� ��'�OKJ2Aop%E����(�����������a�,���\q`A~���*���%F�l��""� ��	pY����������~/}���?�i���<�c~��_(�S�k�,��t�w]��b��������t{&}k���k��]�/$���;}�&�iE���\��j��9�Bc%"�>/�������/�b�����Y�BR�9S��w�`��	�zd����e"�c�T���#��T��eE��	���7����Xb�3c����<|���y���V��z!����m<Ale�L�k�����M
��(��S����<�Pm�l�&��'���s�-�g6�9tBW��Y�j�q��*��i>��9�j9U�L�7��B�����W?�iA����p���q���������s[kv3��J�!2�j���h�&���rUw���bR���@t_�Zm&~W��6f�gap�"�I��K��������]����o��hN�m���e����j��)/$�zE�VH��\��Q	����2V����/��f�.eBM�s��M��Wvk ����4��h��/ ���,Jy1���8�cZi��B�9oF����[��(]=���(�|�8�@X�������^ok(���dt`]��e������sC�UO������:�}E
,/����//�K�R��z���dZ�/8I�Yz�Za��j]R�p{!���WQ�-J��D+��3����������������-����%_'Rp��wl���O��j�PB#�|��~�hb�klx�����R�o.�i9�UPAe9������H�T�����M%S;����"YF58m [=������Y����Wrz�����Mn11����4UZ��6�D�%[��������tX��d\-m�������=�6r;�c���o���1�!2���df����`g}�mt�F#�V����cmHI�p���&�P�D�QI	�o�h���z#}��2�EO����"�T��T�u���y
Ty1������^�B}?����%v�J���$�Ud��'~�9�+C�.�2����m���4�����y�(S���4�n�qd+
$��V6i�*c���_t��rn#^�>��A��E�y�[����#���	@��K���.>?�}[���������hk!k��k���B��iq����������dA.���h�G7W�$�Fj[�C!.����SD���7O�z!�Ml�!���ci�c��$1^:b	��S(-��R��&�=�W_S�@�����,/TBW:��	�Y5���x!��������/hb����B�V7i����L��j�m�$��J��o~7������HbD��fZ��,#JM�y��:��o�����6��WrU�V5���j��Hc_0�Bo�_F��:�)/��B���Y���<X���J�Q"�iS�y����e�:�I+�d�{P���XU1��4�-$����]���
)??eE"#2�o`��;�:��1T�M7�Gzu�H�RZ��7L����W�V���Dnt@>/r�����a�G���-����G�	%H�[�hv�V���������*��r�c�������G�(������c�&��_b�8��5d�Z@u�BS��L�0��4]��j�\�]De�	��@���h�2���]��'bM��&���jx����Jy0���M1��F�.R+��n_��f�e<������H��o3��C�_��{�$���'":{"kl�68�R�%�T�]����r��C"������x�y!mph������`����\^��.��������vs���& �0��S�W6�> 5��3<� ����!�g5�seX�����<����G����H�VOy�pi����-^������5Y�l��%���������+��XV��Y�_`��A15����=S{��F������
�s\x��
vZ���~��W�����DN4��+�Q��4�>�z���d+�J@'�r��Y�\JY��� 0v;�6�yO�}��<"#xec��~�fO�)��b��
��Md+��@fJ3����|�}O����aj�8���>Dc�z��e�J=3����H%����.��<y��Jpel��#7��F@>�����)��x�H��n���m�k�s���yB%8��`a!�p������J���Wg�s�)o<5/�y��*�zz�	t+<��b]$�8��*QW�G~�#��D��������*��p������qxq�&���[����4����jB�����w��%W���|�z��ya�sh M<40��>�mX���b�����g�W�\Lf02H��c�	����g�y��C4|�^��}�(4�W��q��u�"x�����79��`~P���!>!�R�C����~�G2�P.�l&�^I�����gr�u1�|uN�At��,>����G;�:0�E�$���0���"�P����������	�i���q�9���q
��@
6DuU�&����-$�*yw~��eC�)6���#S��x ��2����|��"���������7�."���<Yn�p%��i���������I �i���f��@����k�Ey�L��+������r�����\F�r��:�
�����i�����i���c\�����2��a�����mw��1�>~��Sr���+�AB0���d$hY�2�`G��,����3������P'��m|�8Un����G�����D�Y�D^
T��
% ����P��T		�i����!��tG�o���3���,E����6��D��Z���R�75X+t��'���]��������X�[K0�[O���tt����%�8���J�-�������p2v0[���l�=���	v|l�Y*�����!�����
�~~1B}�<19�]5�#YL8�=����g�<�g�kT�������Om&�a�s�J�� ��-~��c)���C���������ud`?U3l�,!j$Y���u�U���}q4�"w���n�e
p����\B�d�F��lP6�A�Y�-
� �j�{��"��-��t��'�]�M����x@U����l���|�&�
�p��5�b�E�q�d��U}�X��!0�/�d����6���'��5e�,[�DY/�D��"�����3�
�)��d��Q9E#)���h����#Yt���	x��0+����*j��gd(JE��������L�����j����$0E�x3�����;�8��{�Z�j�_�{�p�����y[����� O�}U�{,(Di�5�U��q��mS��
'`�����+��	,�kW���!_*�p�XXN������q��OD���](�*bV�+�P��%�C�w&��Q'>��p���Ih���b�
#(���� (�I�X4��M=a�1f��;�64e�����Y������\C�.>G�6],����Y(�9��v��bK��l��T�G�e�,}�}$4��@�wfnHZA^�y�k�f�����������LD��8}	��6D {���u�!n���-<�M�����ZkA�4��AU�MM�<�+�D�����4�/0j;�)���>�O�I�����x�>__,�f��Q��=KllY�_	�	P���V1��6 e"�U>xf�Hr�AIM��D��,�=�a+���
C�7k�U��Q�!h��r+��\9�-��>V&S�1������k�J2�����9R��?+
���3g3a�}�Q�*�|V�4���Y����������o|V~
����PW�qV���]����%_���q{P��>�G'����e|����j��d���������9��A������E��� �V_�f����U��0<U�~��|o�E�������U?8�H���MQT|8����[O��������&J�����u�OWu��J����p��g���|�=?��\�|5��2Gbt����z2�ET�I�~��-�������g�(V/����[B��/�������+e��/>V~�p`
Qq�
a���[��6T�b'�BJ#i��P��Bc�\.��d�4����l�������F����i9�_������'e��oE��G��C�}v,��O�y}sQDt����C}\l
�8�{G����:gYxu�
�����
����q�l,X�f��oCxd%��4�M|�F�
����a�A����?�����jS��2��eCI>���z>�>�q�0��1M�?_+A�c$�X��C��nc?��9�E�{��+q�>-��dD�,���P/#A��R�E�z~�*?j�"���0~6$���X=���qB{pWo��;���I{h���JB�K��7��U��\����������+XbF�w@�m��A�H\
�v=x~�'M�[�#����w��"I�*kP^�*�T�oIU�NU���s�s"k��z���?�eD�"kF��X3"������������������_?
��_J=����{�������������8��!���G��}���c���!��_-���t����y.�z�p9���>��@fx������af��>��Z��������r�W�E	M �{�9{�������#�`B"�z��%s�#����B��yx��3({+}6�2���g?|�Sv�|V�zNE=��QZh*����<Qk$2HOP�\����#��a�n��\<haQ3*�`�\3���c���!��]p����)
4����P� ���7>��L&�u���8�ee����}�DT��S�M�<��"��5�l$S����8���QZ�d�'����gA�ZEy��8+R���HZ�d�U��8	M�v�/���%��0�K�p�l�dG�ld��D"u�kf��Sp���6�-�\����V�l�@�X�[d*[��*u���=��MB�f�'q��r�������%��M �vrC4�`���X<��Vi��U$�|�hFZQ~(���f��z����-��2�nhK������n��4���%�)]�eO�zL���z������+3��
�
����a�tj%&�������.��3�	e�g��eg�^s{��[�` �d��`Db9V��N0t��532��U�Vt!�u$�����h3!bEg�/��E��z���j;#��b����2�p4���t�hG����d\3�_�!�1��fDE������hJ����c3_6������<�"��0����$z�+���O4��r����!�#&�bD���	h��6}���f�d�#����E���"�4{��r4�
@
k��P���$[uR[����[�eM���;~
���� �n�Qg���$��.:U�P];�.I[pIf��TB.���.|�������=�`_�
�>��&x�h'yXO�����Jw�Yn:��m���g[tP���B�5�hY��6�C��VU�������X�;z����tE�o��l�hW�h�H?jsC_0��@g��3��V��<�L$���++����lb��/�iV��~�E��D�e�����*�,<R����������4����'�9������J����H�IU����zj�D����+��d���=��\&R=���u\����	n�c�rtt�`V������Q���A/&62��bOk$4�'S/,DR��Z�����H$�����hK�*d!S���n~�%�_����#1���$����XO���IH@��z�^��	e�!�rm/@�]G���o�6$o��94�2���U�>2�{"�I_d�4���2�)zO�����W�h�F�b��Ssj)����J�g�Z��UKGQ+��
	ow�yn�gcH��y�e����}yu*POZ����#�dQ�������K^�+�,o�
�CD�u�f^Px|�N6�������pq���Y�B�mS�K���k"Ir#�:8�	����n��N�Ke��X�$�G�@3�7���)CV4A�!�$�a H8��2����0���s����I�u��4/��ZGpi���������~.#<������u�Q9	G�����U������2g��@��2cB���;���dh S��,����A���3���	�Y������A�#|�l`�h6A��q�mx����W-��
���XK�${g�M�s�y���A�A*�����!�a'��\� ���Nf�
?�E���"o��S�Q��������,���w$�Ag�Si���D"J�cg�gH���������H�|�*T�����_�t������3�3���&��t���l�O�Y�2����L��	��ix�3����!��v��|t�Y� I�D�u`^�������i�Us3.h����3o�E������=`y!h��@m+��j�I��7i����������X��#���#������g*�>8��&�8�ij�D�Y����	����	���`��lLj9t�K^n� ��<d�H����8���I##�4�4����/o|4�9��o�|z��UR�\f�em����kC����S������_jk��ld��
���i	�}C3#V��L���?C�����$��.bq5����U���d y���z�z�B�=3��m�t!������7��&��(�/�[��, �]'����q���D�d�������e1Y�4M�2U��</K����LY>�tP��'�d��#RU���Z����V�������&�Z��D��'����>J$Sv��n�9Tm��D�1
���$���^u�������<8���M����$��I��H�����i�3�u�	���e��+��|�X����lX\��,1�J���.T�}x%S�a���pd�,�>;S�L8R�l�~����:InP��K+I����y�PuM�������y,���� ����>(��M�l�|�)����$A��b��M�p���2�����Y�>o���C=��e�����I�N�^w��"4AEd�ay� k&�P����^�j��tS�gL���@��������8�U6#�2,6�F�h��vd=;\p���h�m/3 �I5�B4�e�ud"/Ew�(�ne��>��L���N7������%�J[����'�u[�\�
��D�����y�S _�A=��q4N���H�����w`eu%���L5G��!Q�BDV����S|2�\BP���.[�"���������$��Ld���5S4,L��#�Z��O!����j��D+�>~�����t�0��0����T������C�]z���w���_�����1��;�������j��blnH?u�Nf���9�]n��g��"�����y4[~"���Tu\��xZ_]��@]�������c����MT"sS��g#�S�B����������d57C�8��?��������P���(y<�g�`��_�"$�{uuPf�hxvC����`��|��|�V2e3���MB]_��"z^F�mc��V��LW�����J_�Ec���~'V�)���J�R=}���c���Ju;�������<�hNu�>�;_V�"|aV������m�B��/�
]��D�G������K��U$yg��
�C/H>������_�#���k���S�-��4���XkX�M��)2>��[�]Q������'��@:hf�8�
������L���#Sg��YF����������Qf�������<��>�9����'��9������_>�y��Z����\\=��R�\
�k�:r�cYnD~�l*9�g.����{�"�s�}, r,�O���}���
�������8�GnI���$� �})���R�X
����c�g)������c�+75d)p�Q�)�F��?�b���z���>��!����w���~������Y�����s��Z���7�����b�c����]K��P9�hG.9�x�\r,�E�P�.�R�g��7������`���� '��5r�um��m��5�H�Q��l� �g�A#�S���Gjh���Y������*�r|��lu�'���y��nf�K���G�P��J���6l�q"��q#^��<R�6r��"���#����y�%���}�`	=�pJ�[�#���y��>��#��{�c)q�%ZnSC��J<[�;���"y�%������k������������������������������������������������������������������tf���e��pe���d��rd���c����V�D���c�V<�1��8�7F������������{#�c��k�G��X������x����]K��p�KD�%�1^"�-����Q\v{�<K]��� ����d����$���~�^7/�O�>'s
�9�@��Fy����k:)�Y,8�+�a?���J&3p0�lSz���gGH@j��d����B�c��H�KlHn$KB��?=�=�J�=���oY�cV.���t���"���f9�~���;�-�%Q����<��H�L��Tq~��� r1�o�N�]PP8FQ��4+Y�����xz�H(y�Q��S���#e��I�[m\�<�n%.�X��HPwg���m���:��a�%%���*2������M ���]������S�
u��~H�"�K5�CPRI���7��hM��~r:[��+�(?eh��RHT�uM�=C^h3��Q�lD���`���������a5Q�����������gO	Pa2	��L*��/��l&�Bm�F��,�(�������;b����4�����%�2��eA	�?;ut��)+�2�� ���~��PB\��2�M"[&���D�Q��� ��A�	�we��z�!������A���e��"��������Hs�Y�������O-��d����3�!���*���
a�{N3�E�\�b�a���_����~G���T�H��;�I?��U�I?MF��3.���7��7k�d�;�G�T�bAt�������C$+�
������5��5������!�?�m��9b@2�1di7L�ld����l���oH<)��c~\�� p��%�����'������]=���F����)9��]�,���Mor��GcAY�70&���k.H��$m '���(�f9X�xa����CN}�O�~S���	�_+)�?���vpInC^7|Fu+N�
z!��0PyJn�mD�����W���a�*�qn(����Z"�$��K�{�T�s�=H<9���h���y@�;6e���;>j�"1oV��'���D�Y(j[;��n��>B7�S���p����N/��������re��
p�����N��\�����s��=M�g����Ug/��������]0��b'w�C��Vs�c�>eg�[������'�'��H:U-0Mu�!����������;A��-.��6G��W�!)����������x���������������d}wJ�nn}_�?�w�l%����8�E�H
RyD�J��E�lu��g��'g�|'p�D�a����y�>;����2��I�>:	gv�?��/2>W�0�4p02�
Pu������	�<��ZU�����X��D��|�������������$��Vn{�0����L������f�����-��A���H&�}tLI�D��X����6��b�5':��9�
���o��T6�|r��n#�o��|~V����
�x���U���#�������?!$s$��B���A4#�����Pl�!��q�^�!��)=��':*�K���
�C������#xr����0���,�E�B�-���Ay�>2h���|3����K5�g�LUyL�d���{q	[��X�D$s�r�i��d6}
.6��z2V{�c�^�9������H�����"jg]@��������f�tFm�M�f�d
>y�&�~�����A'��81�����k�e�N����Y,:c�����l�s�������*}Y�?!Q<CSL����p!�dm\8���;2b.�����\WE	�	����j�(Y$h~i�Wc�������!��G
�$��x,����y,���s��!���e���+V�t�_
5�H�|)'�i�A�t����Pf/�|~��|���k'��g�����5�#q�%'t�a�zl@�c��9C �zxz$�i���a�L\�\���	@��9��o�n�b��
�2��#���\��lF���~M�#���y�N[��Y-�r��������"����$��h������������T����w���x�"������7?|[H�R?��'�v@��D����h[� �5�)k�����W�2�[��������3N7$o��L�����YD��Hd���;:T���4��1�[0���(�,rw�%�D��R��U��F��5�h!1��9A�r��������[��;��� ,��Wt��,�F���B��F����A�n�yF�3��K�
p���/g��+���t2� }�6�������C�H���$dK���pZ�f��iM�i�����.��x?��%�{�[�$Bh\K�t���I�+*B��������@=�xC`%<��dK���u}�)�f�������Y,�fR`)����	����*����`t��0�r�F��2�n���;�^������,/NQC#U�����D 	(&��WA�������%�t��=uaAEU���k~r�
�x|�J\~9��IlN��Yi,��8�m����Xg���g
����d�|�K�m��>��X�|O+"K��v��#T�M"��g��Fd���M���i?�Dj�R��9.�6hzD1Hq$�n����t��f��(B$<	#`+��3-����%��X-+�2V�F������oHT	��*lJ�V�V2]����M���\��2�����~	������_�~���FE9�0��9P�.y��e/+�c�����X;�
M��x$��h�74���������V$2vO���#(L���8�5
,�Jf�`"L���n�?+�Z%��JF}C?�:�E��m�[���L�����~6Uf}U���&IZ��������/��H�l;>3��}!���oO��l����D�S��K�e��8�Bo�}���l���7�.��XP��L�qp��Z��R��K��m��u3��M�v��1��)���}E/����h���e�y��Yv�|�D�>`����alg����;Z�%}�Y_�W����?V}��������4�yRs���l�,;K���d�=y����c�l�r�j:+��h�������D~�&s��vn�$��tk/�T�3<�����<�f���X�1Vyy!�e�����lj>�_���I�����?�aC��lY���{�8(�z���&����Mb�/B����+&\	�bG�Y��o���b��ks2AWE74��5���G����x��<�F��X��A�h��pAcn�]d���m\����F��I�Z�6��f�'�2"t��n���)�^��o&�^��7���)wmT����y�j�M�\;�Hm��W�(�T�R���ft�|"����7���n�\����
p�n2��N����%4Q����:���f`�h>�yt���T�7dBZ��9������^�@��zw������c.�����VL���C�K�����l��\��f��8�zc?�H4��}c��^@���I����vtslS'����f��k��HtW���>��G20���^�����{��}�@��	�E<8kQYw����'^��Ry��Dik�_=����C��������������u������a���
>�������_�o����_f�cf8P�������K���17C���G@���T��+���"z�[eES�Os��tC��}+*�R���P
N� X�x�o�?8�S"��H��mC�)��w�V�*#G�
�	c�
��lJh�kb��?�	��!�p4�$�����f@T�H'q7�@���p�v�J�����}o���WV4���D����% ����WV4V$m��>4'6]Y��1�p_zS�V2����d�g++*��l���v>[Y�T���uO�{���RN/C������l-����0z7�_�y�nESn����L���x��)�3x��	���'�WsF�2�]<e�����h�AO����zoE0�7ok3`�2���:J'����Lb*��^��3	L�&C�?��O��"(���K+��5�4�R�GrAAfoY8�����{^:�����.h�'<mh0���DI�'���~v$zUco���K��DB���:���������Bx�5����{��-��V$=p�h��Q��-L�{e���,��Ax�+����.�Y�u��B)���cx��"��9Y����x+*Q_e���/lif����`.w��t0W,���\���s��^��>|~�!<38�;�!���x�B��ba�w&D����q�I�q���.8|�p!M�u�*�x�+* 5�g0�7������c,��p3�oV�Qc�^�1��~���"����B��Q�z�;�@��c�:��6��m��F0�������M���Mmg��M�����'P�fgB^�+,��wV��������n���4k/��f����� |����m�%&��9��/��H�����"���~�����Fb�(x,*���ooS���$u2��dp,#��n��!����L�&��7�7V��'����7��w��K"��`C	���x��}��Pae�����)4��3�H����H��dg���T�C��5�6o;��!t!>�9�����Z�9��S��>"�;�!�}�`�"j���"�$b���Y�]�!��:t���p�vj��Y�81����_���D�U3���L�+J������t�`�u!�X(2������RS�Y��3�������O@��7��s"i�C���no#D��DT_�F\YY���
��� ��[Y�Nu��)hb���x.{��~���/��6C]�N�����Cp6
�O!�
�C�Q��{Y�|�u�	Q���4����f&t/��?A�
<��� �m��X���Dw<=	�c��B��(��Iw"�!�Q���,^d��}���ma�@��bL��24*�,��
���/��X��n���@���]v��]t�_��0���i�qb��i�����
�8m��������>�?;��D
����h��[<"!:��������!+��Nr�j"59����7VB��	l)���^����
w���=�C+���I��l��V>;��R��S�}���QrE$�����m8;b�A#�x�8�arN&��6[���^��UEFIR1�N��3	��zqM�DC��0��O|e�&���?;9t#�E7Z�N����G��m����"��y�!�2��L|206dX�k�|��T����?����L��H�.D�� t���;|�R�N>�.;�|���eK�o��J�B�m������j���L�y�pw&����u�$��K��,����J�[/���e����<��������t���
�!��X{e7�T7N��7B��C4}
��X�7�������M��q	���4����L;���3�1!���*�����j�3��]~BB�CmA��t�~�1{�����������������Y~���G�p�Bb�8H������@y��=��v���4��;�� �)�S�����`�JeT@��%�J#�X@��8u�Wc���|����2`�:y#u�e���\���[E�XI�G�U~�Z�p��j�w'�dh��G^22i���Nv�����F�o8.�V]�f0tcI������u�P���J(3�#�I�H��w�K "�U�I�$��������KM�������q��;��&��2�����6j��i+���uR�8	=��E���/����c.n8��B������-�����O�v&����|�E������k�H��P{zBD7�WU�<w����	9���:x#�R[��Y�l�T]4���L��v�i�o3��8�|v��e"6�V��*�gc���}����zz�����-72o�f�U���	��R����^�����{���j�	7�O��	�(�\N��J}6�#S7&����_��dd�����\��e��)e�l~�����!���M/}2^'��� �
���I_������Y&��7�z��p+�A�w���'�w�yLF|6|1/C��>��� �F.j�(�e������|�X �)~�����.�gge�P������E$�R�mjW�Y���b�#��:�7�pn�g���5\��z�;�LC����z
Wr���a0��]��!�7?���f�/8.?���������i�;�5?A��'��
U�l�����77������/��I���M�����]���Yx�N��Je�a,v�	F�d.��R�Jb�tW.���j�0i��Fp���gX��0�l�X�&>�����tve�\�����/�Z�A�{�08t�efH&5v�.������|�]����R3��U:2t�������)t0T�	����c������'�:h�[�|�4�Y�qt��������E��6��!��_�n�i��-,j���U�x����p��� HZ��X�X���6�J�[�N�\{X��&D#uv��CC^���L��jE����kQ��	AH��V���&�!�c���W��X���nn6��X����.ZM�7�\�V���T{yy��������2��vW��h��V�^I �x����1����C�]����z���Y���G�Co�����x������833�:}��$���^zF��qw�s e�@���������)� "��I�'O��a���:[� %�_X�	I�M�n�#�6�����z���gg��@�x�����S���g6��xr��8u�"� _��9�i�Fg����|�6��t�����0�I�����qW8�js���s��d�\y��,��t>�Y����]�[�c�t|6'?�2dJ7��l��F�(�	=6��(u�.}V~a��j3iK�re������.|���~��ETm��L}&��SE��>�WR���.�>��]����I��lc��>��q�>��+�=g��U���;��r�����:�	���R������h.��c��6�)�F��(
��i&:4�"I�HY����������7��D���q�X�9�<����xg��8��p�[o�;��u`�N�?b�uNn��[�6D���u�Dn���M���
�������g?�29�AE�%���'�Ll^��y����$�������|vd.@�F�
��c�wb�Q.�S��)�� ���dG������8�J�|�������NPb��<#vC�����/[����/P2�����hq�t���U��!��_�u����@Y
�Cs��
w�2�mMYm�.aeT@�eT�b�	5H>���+��������U��[>����7��M^�����m�RG��h�@rqA�
�;*�x�W�4#>�J��
����C&��\��	F(�7�J,4'L},Dz$nm���@��*��E|��x�o�L�?D��/�54��e��9X������/le��c����^����_jP�������>�M�
H���N�����%"6�n��>�ix��C ��sn��#�������4����#,,>z ]o^}��+���%z��rF%�S�7F�6L#�����*Fq�1��uN=���'����,�7���H��~��4����i���N~���q�n�i��&�ikD����`�*"����0���g9L���1MP��x�7��5|��������iK�qRWO���;"��;�{I�fR���bF>;��^v#��i/4j�Y���tR��c��|�>�o������)�2y�"�};*+�0!��@)K���S������{�[�����X ��&��{�����~vHoL�Tx���O��*\$#"T�����^��b���_LE����.�-���G* Z8(���,��>v�,��5+���[�G���v�����c�X�>B4|?Vr���yt���PM�qc�AT���l���}�i����ER5����[�N�9v���P�<��_�/��An��d��B��;��v4��0!�T����iV�;�����8&���p��R�el1���]`%6���z���WgJ���������iv�0OH-���pe-�R��b����S���� ��M����=S�_��I���=}�q�>��	�@������$�S%����%�_T���K'����j�<�,3�O/O�y� �:?cn�3* b��;�� N�����-#mIv���kv�f��e~`��eN�����eV-��"1�����e^��F�����A0":�>�D
�����~��@���m~���� X���yA�a~N�<���9��2%lf������0?�I�a~.zf_�_|��	�}1C0� +`�0�f��a�E+7�)��� �a�9i-���0k�h�����0�����2�����u�������"���7����-��33�2?���}F�
��E�3uh,�ye��7����c��9���j���U��G�>�q�t���a6$����.[�����H������l'��,L����LCJ2�X��&y�4$��`��U
�MI�TP�wDU:��������K�1����< N����B�4s��Y��'��O��i�"��=XQ/����������lH���@��<t�����w�u�Y$��v��o��7�e���@WaN���'���"I�F����g����7N�D�"����������[���4��dPZ�����>��H�_�����r�({�*�����S���1������'�������u&����5����HT��31��QWw�9�����aH&w�p>�������uG��q�yM>T���`hBS��XX�&DssX�,#�N ����<L�5��n�6�8�)�}h�[���t������d�X�
J��-�_,��2�
�x�(I�
!c�����3A�6��*�{�N� �	J�{�	������<P��.0V������Z	F}~�:���k��@���#�,���o7�Mr=�Z� |�N>�{���g#t�J�C�f����u{�S�\���I���@�w��my��n��C�{g�C|
���`u�9%��8���������2*����������>1�g��gg����:�@��Y�n��0���}S9r>q���=L���}�.�8�D������A%�_��GY<�t1�>�r�.����o����mw�pDm8���� �O���0��d���|v�3�[�cH��N��EZ�����#�u0D��q�S_d��~j=)���E��<�U���`��a�&�F]��������B�X�KUM�L7��]AB���f_����A=������1�����h�X�2F�h�1$b�����B�7����c�����P1�i����&�����/z��Ae�`��F_H��yEf�k�W����pO@T������/��V���(���v�K}����X���z��[����|
7��������O�/�27�p�:�{��B�!#�,YW�Q�K?e	��B*��5q��(������7;���<��P
6�`Q6\��W������y�����$`�x�T
6�i`��4�Pt����
D!fpu����p��l�.w,��
TIU��h	6�����c�hcA�7Ui��U:#�D���G��Zf#)�SjET���$?��Gv�F����;��9}=����\Tg��`A�p�7���-
j�H����Y7	jm,�p���3��������,�uF�
���%���(���lB��������M�u����mZY$7�[�e�I�7/��}���
��rA�T����E�k�g����	Q7I����{S�Zpm���AY�z&���b����4�]	N���H�p�����wm+C��Z7���qRQ\�H��t��9�gb\��?����rAU��'n������f�����\�,�\~����-�I������+�R��A���JhA��/3�^i�o�-\UXP�u�	��u������Q�U�	l��=��do���~��+r������V��W�7{��~�s������.�-L�}�AC�M�"�z��2<�%����JY���o�"7��������	��W�&��c"A��4��'-�y��G��%g�<�d����%D�%Z�S	����_(!r,����B	�����"K��+�?��7?���������1�w
�;B�n����#����w>��}����b��h�����������r�|lA�������������hY<(��su��Z'?f����4���o�?k���&m����_�����-�0�:1<�L6�kX����������"��O���~�;�e����/�I���<|�)��?���������?���������u��2�#����l|M;���	�;@"'��e��L��0��2N������>8;����u��v8@����w�@7��E2���eM��q*�w��������8��!'P��X�y>���s�f��CxE�z����l���E�L��v����Q�;:^y:+%D��/q&n�p��-Kf��!�����%�?�L�����Vl:�.|�8���`4N�7�F�j��y�[o�������������*��+@����8�Ef����;�F��V4t���[�q��<P�L�,���H={X���E�q���#�<��JJ�:z@Z��I�=�zx�����A�V4o�@4�N�
��GA�Bj��)��vS�w�im��8��g6�M���~���%Y�����|$m*���[Q���;�
 �B�,�zX�>������=�
�3W2����1���q-��8�p�������J��)���mw�a�B�y�B��0�����TdC��:B�����$Y���|7���h�P�U{T�U�B�e�����$4��u�D����������%6�W�P�O]���|bL�7$�����h6�Z�o����������i���Sv&�^����v4�y�drk���V4�Ay�
&6,�~V�M7��`~�q������@��I8�XN�
M������ ����2iW5W�.�KM'��+����E����iE� �.�����3��'����PSw�&���W����z?�D���<�Z�Z����PwHr�[v����\�$���Ff��QwEC��H>d��T����P�����c8X-��h0�&�T��+��l��@��-;����z�4�L�c�w=�?���4Z���~V$22NH�j�F��@�<�o�5��B�j�]�80����Y!Mn@z!h9��9E.�l4������6�v��]P�@hk�
�y�$e�����������F�3���� R���w2�&_�, ��(!��thc�c�C��
/���fn�;@%������d2����1y\���J������mK����e-D�9��&a�5k�����&�q�e����+�������Y�G�%�S���PAuHE�yN��#�,�q���b�M����p\k�2�6xF����Ix>i
�s��L��D���;�]W"5������0�*�m@"?#�8��'f+���Y���i��z����OE~�3��Z
�]���b���2����_6���|dA�MRy�v8�gC���X�C�����vZtE�S;��wbAE��K\ui���M�����d�9vez��-�e��~�[���=M+p��kF���s0D�"��=�����oC�U�B��e��n�eu~�@�h�e���q����7@���U��	��
M`A���(/�N.�B���lt)�h���r0�Bg��L���[Bg�3��c�64R�t�<��S}H^���G�Ts
=��}�EY�Iz���&h����`�8b�6+4-��s,�q�\�h��g��}�X���{2�8��Y�>�����A��/�:W��P�KQ��4�q��MgW�_�@�l�j���5#	��C�,
�M��24�������?7�^+���?�V��	k�c���FY����Q164��\��xM"j(	^'�x�H�"�k���\��c���$eDC����aFBk	�w.&6J�wFC�/(z3�M����07��0v�L���VS�����z��)�sK�p/���R���k	�����A��L��q��4�Z�@�"��jI�������gn�����bB�L���Y��0��{'�K���lao_�Emr����v�%�6l�*-d��&t~�GV~e
��&���n�>wK&��HM��������W���I�f���|v4�wR-4=�k�B�N��qW�"���[�d�V��5�5S���6�^�Vo�
�l
���skw��.�hh6k�	9����h�'��m�dN�8?�{y��FDj�4�;80k����e2�+[1f���U/�������5\�*��x5+&�$�/"���'N���WDq�MAb4��ODt�n���
���ln������%����D|m������F����O�5e�
����3��4��7q��&6 ���	�����h�{A���s���l�����������|2����V��J;0U7����,��N����H�{���V�m��d�nk�5d.��<�ag��u�v$�Y/�M��
=�.5����u�6�9��2e2
A���{�j�i�m+YZ����j�n7������#Lz��9�I����z��I�ot������_�-���'C�'�e3�A�hz���?es���\�K+�e�LP;Z�a��}:�[��~�xV?����V+[(T��R�i��h�hM|��,��F��-H�4���	��M��d���G4_x���]�:#	j��'(	<Y����,����:��n�s�0���~�c+j+�m��e���C�l!S�U9�p�������O�M��A�g�^�U[�6���
�U"��`���T|����8~G04��(,bVV�G\L<_�|����D�������V	Dt\CA*?K�$UB���|Y�4�������,�-�P?��.��^�5EHq�LWSd
zh/
@:�kw��z���d���]C��Y*��$��bms���?<�mC��������#9V"���9MW���\G��v�4��SG��x���Zl(�N�ej�F�!1��Q��)|���5qm��_����/�Is�A�*nH��v������$�g���	��B ����T�O�a|,M`S��[�"��W�������tYg^] 8K�_��,q�:g����������Y�CC��������;�D��.e0�k��=+B��U�"4�a���:����n�#�}ov��}�/�1�\�4��FOI���E�M��@+��I����B��F��!���P��+J@Yk$���X�q����G&C:2k'&����c���u�=d}�v��j�5��U�E�7E�Q~9���\%�g@'������@?:6�����cE���J']��"����FD����Cg����L6[�'����,>��� p��<;a.g�)rN�ej7N��s:��1	(x�X�m���:�����[,�����F�lA`���g�|"�����y��m�����MK����>���
g�������R���LTO�m�Q��d����(`=����&hi���!�AGODD����X��t��B�<l]�?b7w��(��-�����t�?+BU99�.�l"���{�V4��S'���/�d�]������t�o��YT���h
��O^�i�B\��9|���L��g"3�1�>����M�b���$����(�5B�<p5��!=�>����-GO`ET],����Z����L�%t1����q� VN;��h���N����������*NR�y!�9�m��a���G0yQ,�p
�z��,d�H�<+�az��f�J�H�]�'�Gm(b�a����	/�*�;������M�.���q��k���v��b`�5���������;�,�����<k`33f;vt�Ib���s�9&M��5��j+$����L�4���1V����D��������jceAw��k�b%C�u<�QD�R`�1!��?�V�����x/��Zb��n��H7"�*5�'��H;�-�������VR^��~'v���7��������?�����|�<Af��U��)���I�U��.H�n���R�1����d<�n2�f����f�vcB�7����<o,S���}�]�j�jR����X���������3){I�
7���Wk����F��<U��D��zsZ*��N��V�S���
�j�dvUCv�f 6`h��.-$����}+*�R!3�'�������������T}v�y�9�<:�����UKi��k�TyP.P�����������V�������	�}9��as��h�c��
QX�y
UZ��5��%�@|XQI�B�Pn�������W�b����^�E$,���I������de)��f�3�7&��������S�����G�.�p�mQ���C�K/||���Wi�_�c�@��i����2�1��9��"�24~e�;"�
������P9������5��������H����T�7����~��w��������z5����p"~����v_��lh$�{���)?��yEe�I�oE�~�dI2$��y�@���2�*�W�b�G��\�"Y�+�'8y]��x���.�	�������SDr�6xV�������Qdf�m��DFfE�=�!���U��5wd�y���Bo��sm��C�
����	`0q5l:��t���O��6���&��-x	2pm���$O
���;�����s�1\�)�5 ��w����3�Hx4���$�J���Xy�$���s�5���]��fM��^�_R��XC���&��>�]6��������}�3�i^xC�L�����n����`O�$�3���ij���������J�MS�����W�����h�H<�8��F*s�g��}�����, ����5l��oOG�&G~�A�{#.?��8X<�!���u��A��|�m��	����c�����2��	���Wd<Pv��9<������!3r"u{y�t;d�x0�QT�������Lu��(����^�����J0tQ���V�/�J.�<�`�y^�"��x~|���
J�qd�D��	d�Wh��6�#���Z�H�����4�H�i��_����Kmw�F��p�W�Pc�6�������"��s}�\�q��P��\)�0�U*�9��%�&*st�{%-�*3��^����(�����n�Y����v���#�t=qyt&���S5(�,v���<��<n����f~�8��jl��x�����U��kC��|kx�Z|����1�-���jOB���&���G��m(����}������d���vEPL�anq�����h��}[���������`���Y��^P����?L�@dD*�W)@����~��'�Qf�
���p����\ 4�<�B!u�H����?B��t_�9/o��d�����C�"��ec2�u��Cd;�@�������P��
��6�=�~6�ig|u���Sg�N�>�,u8lnm��vnD��W�V��S`��`H���]6�FO�����#n�V0��i��gf\<�yB'�;7�gn!nw���}`-f%����K�n�&�fA���d�BEI:Srn(����}���)F�C���nk{����@��o������Un:����wX������3w��F��
�V	I��#�T���b{i��3��G��
��bzi�j�{G����������,<nkp����y��c!x����}�W�y��o�I
E2�P.�lfH_I�����g��u1�|uN�A���zE��?�i��,B�7�P��a��<�F)+��3�q��*{8iH�w2!7M]41G���5�!����j�*�yXu�����zt��c�-1�v�W�?������1���C��T��������IDp1e���r3�+�N�%���,���%��I �9����ax��w�A�e3:�D�Jp_�,=���S��2�� t��)d�q��nx��/�@��C�lD�6�d�W�M s����g�l�T���1�,��F���iC0�����d$hY�2�`G��,V���3��&�6�n(��m|�8�n����G�����D�Y�D^
T�CJ@6|����5���Z9���
����;���x�}dp��.$e)�?������G$2~�x��
/�����Z���<���u]�E%���j�Z�q���l&n�N��q�	TF%��z������s����z8�;��[G�f�z���	v|l�Y*�����!�����
�~~q�;�}�������,&������u\j���;��.^�G}k���/H��f2|6���~&�y�r��������kN[�
Dd�����T�������d�����T�����H��iLs�� 8o�5X���+r	�F��2�
��2����w�PXD�����9E[<��>1%i�d�?_+��*���Y�����G��m<�^�����Wb;��,�q�5������f��K� �
T��B���s�,�E"rS�U{yK(�B���
�EGkT����2��zZ��K�����H��Ch��K��f!S~�_E
U��k�X�?*��K?z]��a/�a�WC��
�(of����_��x�BA�)�j���*������6�
Y��<@������������(����fT�;�U���MQ6���Kt���]P\N�����aA�Tpa�����=+t����DtY�@������BL&A��
e�VI���	v�n(��V8ul�$���f����P	t�	������EEew�����u�h�>��`Ze���<����5���4�t�"�"QZ��,��"Ql�u��;��������������������
!����V���t��	&�#�7<���g���!�q>6�X���@*��;r=�|C�&�%Zx"��k���%���i������py�WT����oi���8�v$$Sv��7�O�I�ik��x������A�l�0�_�g�����LM��>���!��)	���3�F��Kj��;KD-�w�|l�� �����0�{��]�<!�v.@[na�+���|���d�8S^�3B}u�a!R���(g���o}X�
���ECd�iW
<��*����Z��X]����u�uL���7>+?��Ru�uE�������]�^�=�/����o�}t��H�_�n]?��������(����A��63��"�� �VmL&b(o��3O��_�G ��f�~�5��B�:��J��4�u���YQ������n=��
��o��c�R)�t0l2�:!��Q�	��!�g���|=������y�����Fpo���-��L:����m15���1Hz��b��a��]��%Z���?�-��Yc��/>V~�p�Qq�
I���[���+T��6���H�|j(hE��
Bs�r�N�&�9���"[���t#�oS��|� ��YK�Y�2�������H�{h�����;q�{"�o.�(�����w���M��-~�H�P�R�,��.\��r����`��c5� �������m�,����}��o��yAa�h��
��N��K�7"�����e�����|�w����}���a��c���V���H2�����`
-c?��9�E�{��+q�>-��dn�,���X/#A��R�E�z~�*?j�"���0~:*�H�  ;M��L:��]�eg�t�����8��$�����-�U��\�����x����+��KbF�w@�m��A�H\
�v�
9�P�J��Gb�/i�,�E�DU����U<����F���y��9��	���W=c����5�����\6���	���������������_?m��_J=�����.|y}kB������(���I(9���\�>���L5���J\-��4��%��)ke}h�?;2p|s+Iy�h}nW.;��
�q�<���*62eY�`z~S~q��B�,��	�<b�<��s���	2�,��)�i77vpO��V2��F�6�����h#}v6��]i�S��|V�$�"b��4��(��h�f���Df�}�UN��`������4���YX�Y����ih�;3��D�y�Y2���e%�w�����>:l0����I����i�U �0|dbF����$l(9��g��8�dE��TAixm��"o;�q���=��t=b�:U}��H|r�\�4{���L�Ih�X&���`�DQ1&o��$��]��F;�g#��\�������a���HTJ/B�vNpg3i����������H7�h�L�|���`M�����X�)%)��������]4��@�v�"D�0��.h���Q�i���o�k��H�5e2�hN$	��Z�br�������I��v�CP�%m�-������tA���`���z�hJ2nn.3c:78��������E��$j	.y���])��NE�����hV�8�5�������`Lo�af14[
�7;w,�fp0{{����Wv�fH���������&���Mi��~h������J�%�D���-)B���.h	6��d����^��'F �`LM���YS��QS��d��5�n���)6�-��>��S��l�����U�tQnd'^~��!�hOd�-*�>D�teL�����c��.�I�K&��,�B$����j����f�e����>�� X�I����~�l���U�<��[��"�����m��O�f5����m�k��l�g��<�5���E����R�j�A���
��3��]e���CWs�fyR�UM��G�fu@��Y]�drj�����7e�������`V����i�E�/��.��&��3��b�=�\�Q}��]fU�J�����U}p�W0�����i�&��i&S~������ �����-�A�]�A�d���a��m�`�����nQ;�b7��nOMeiO�
k�����4���Age��>�����;?����r�Oy:�\��!��!dwP<)�����	M������_Y��H���A�ld���N�?���n���\�]L\�������WE�����8ex��F�
!�������'SD,d����|U���t}K��C��p���&	�Vc���(���2�*H����p|�}iE����o=�N��h,�����,����L���	U3GR�l�j#���
���B���	{��"s4�	�������P���>�Ihj�I��m���f���(��dZ��
`";�������w�f��D^�*���ZB��e9v�3��{��5S;+9#��k��#�d�O��uV�p�m�+�,�b��kf�9sg���n�����7��	C�{��f���b"E�/l���M��F��58�>M�k��}|"0G	1whA��L`{�F�����0NC�&�	:�W79D-{�,f*��?-�s��,��wF���q"^��W$v��2N���aC�������}R1��..�6��-����V���a�Y�����W#@B��+���L���d�<�����$]_��������.�=|��ec����M�D�������_��}F����j�������2):��H�|1����_s�g�������a~!�G}�s�����?�B�%z>�-U���1�j7k5:q�{���I�+�K�|���$�*�	�gD`s���eE��WIR4L���4�m$L�:�h���<GpBS�GWop��CE�6���o���8NM�|w�[��d g�G�j+&����dr��A�^n�?|�%�X����NI�=��E�	��������W6&�%�]���hAxMH�1X�%���-����/M?+�V�.	��NVO~j������Q��2����a��	���v@�9�M`���(�d��$7o�Mti���|��L[�ey��y?Y2�Kz`s�������R{�����X�����^�Qw��Q�]-�} �����+x��������<0��o���*���=������al���l��YB���y<�2;�=���J�w���4P�y�2*��kgz�����(�Ks��y���w�P�*1���<v`��sn�k�3�C�0h,D�DiW�H3��t�6�(��	l��������LRW�}�X��+
?*7:�/g�pE���aU����
�����'���c�nv��&07��t�>;"(����\�Lu�:�:3�����C�����H8"��G��C��%$�k�'*����\(yu���6������[�X��6�c����=3BU��A-��
����z#Aa�*��
&��S�a�����%�lF�K3CsDfR�?��e�rX���)�\G$u����=�A�
��
#�������b����6v�'-%E���%��t�����O$���+�l�U�n1�rq&X��h���.�I�.u�Q��R�Zq'f9"��|"�%�6�[v�����YYVdT�GvptR;\6���������������8i&7�FXQ#AZ<�Qkf��pE�1�#�{�/�!���:��4jn�5����p5���#�����&�X����%�={���^����[���M���������5��W'h�^�}���M;�C-Eh�hOJi�v���<9���m��&����t�6���b�>lv����H�����LN�����}q�����jY�"*��]=��54����B$�W����r�3Y5��M�,�*`���;$�s���&��L@;�q�G4a������������Rk�FlARQG�j'l���*p�O`>`k6�	P�T�$)�����#O�����^������"�=�D<o&���$h�;w+"	{-�p��gp�anF&7HHf)����I2����B�C4e_�y![����J�GD���L���3��]�.-��Q	�������L�����"�r�8����8�q��q�Wy1�(�Y��=m��(��OH=����G����q�JD��8R`�h�.(#)po&����5wI=/�U�A<��a��efh�'!�J$��."��|�E���eA($M��*��.Hy~��m-���n�L�!hGL�����H��Y���+���LF-�!�oy�8+�6��F�OGZ
��	95C�Y��L�e��hWw��#�Y�H�	���#��7\���\j�+w@l�l?�+[Z06�YbBl�����������	��W��A�+pt���O`eAH6�}	��r[���$����!�������e�U�
���E��Rz�/$�}�rS�0sk�HLH����.��d��m�"�P�m&Bmnb6��2
�a��@��R�$'��z)�`GU�<�ep��L�I��]ctH�mrh�Y�m,�B�2������U�����r�����/������u2��GJ,V��$��&M��k\���y��|c������pR�l�����	��*2�E������,������[I���J��k����."&�f��n�K��0�<~@}>��N4X(k�U����jb[�y�������
P� ��@4���2��~y�.l�`3��?r�N,�o� W\���+�R�E�s�
�Y&�-A�����[N ����?�a�.�*ob�N�Z\�}s���X��C����Wm�V��������������L\�w� �[F�]����,u��&�t��?�P���K[I�U$G^���0��N7r�����M������Pu�����"��M�w���Z@0L��PQ����Dd��Q�l����m���%s��,��K�����pV��n��zk���}���)pF�_rVP�5���]���Y��/aj'�8D!�]��t���v�	������{4^H�Zf ��@i�rWEJD���]-���U���H
�6�fe�iI���^��g�/�k������n���}�������_�XP�o��R��V\�M��A��v!J����Vu^��x�������$�l���w�%�%��jw�X�m:�n:�����p�h*��M����w�,������]j5�[m�����$9�aBG�������������L���}a�M�A����m�Ij����$&�����k��ek|��`��??���~V�q�<���Qs�K�_������������u����c^�g�e���/��r�r������/����/S�%;�_1\�Z�|�|y.p�E��.�pY�p��r?���/���v��[��:�Xk���/���u��"��g�5����/��=U*�p��J�8/��������uz]��H��LT�UL[��:J�1^�{�.b�>���"��gK�E��s��Z������}��t����������Z.[���3]1^�V��E�{._��s��Z���u������6����b4w��e�������%�3]���}�G22������W.���um�V!��Y����-k][��g�x��:�d������Af�O����������x�,���_��t1^7[����?]�����.��f�O�u�����z���z}���-�_0��������z����b�~��s����_?��{�_������������h_�1�E����/��=�}���`���e�b_t.���q���}����h[�-�E��k�/��=�}���X���e�b_t,���a�����N��hW�)�E��K�/��=�}���B�C�O���;z5[w(�j� �Ca��
�{��P��h��Ca�s��Z������%"8v���3����������]�Dp(�������=�����s�����������D)�e��I�;�Z'"2�e8���`^d9�<�"2�^�8���Qz'8$��E �9|����|�!�tlP�3��1YMq���[����`������*_r��]L~H�yr��*L{�
%gF�P�r�C��G���@�W&G������N�u�{%e��o�Z�l�����t��o3
1�m\H�E�p�9��y�����iE<�,��hA��u�J����h$d�7Q�_����]��d/Q�>�c��:������K�sJe�����g�m,���
��qOy�OdQRu�[A5��I�"w9�=H�=�e��tY��t�+�M�@��!e�E�V�e����.	S,,�y�|�(Y��/�������<��2?���
��G�Qc%��{���'����_��������2�yq�w�����S��I�p�����+���V��&f�0b`��4��1��tr�Y���k��Vd�j(�d�'"��*	v�v��"�i���v�?�e�mr��AU�cJd��tCjk�$WX��A�\�;D #�8���*��s�?��`�X��I�:���Y�~0�bj/�#��X��8��vVl�4����JD�"���E:VS��4�k�|ko�r��l)��D,��DyjH�uE�S�9{���J���#�A���y��w-N}���j�3d��:�
�(3H��*�U�ZC�;��xG�;��$���t���vdY����t��U�w�5T}+�?��E����g���HrcwA��q�p�	���H�f� ���:A.K�<-L���}V~�:O��b��Ly������x��������Mg%R����U���"������|�d�Is�������0�1U���Y
3�}VEq�.�d��5�@���"���W�#���9�*;h�"��(2�X/�)��Vd��IF+k�y�TK���>\~^�s������+O��d)OO]����(O�e���"��;�����L�Ik��V��T��,����)c��J������k����e��75C�e
�8��nk�,���R�y�~�E,6�8&�i�I�T����z��+KG-����S9$R���!�P������@��S�R�������������U?+�O��� z��B�������~��,`�Z��(��e�x��|{��������+d!r�?�1��w��[��KBDh�\�U<����E�L��B"�E�*�eZ@g^Ce%���Z�CP�ZE�� ���WHY@Dm�)�H�� �(A�5�T]c���1�������(����)���V*���zcF��X�������s��u2���~"�+I��,w����BQ�O�'�s���5����}%2�_�����;�u��>2vx!w����K�o~��&��I��IA�d\z�I��zC��g1�A�N>�A�tSrn�|�y3v���)w9BG����1���J�����IO�<t��}�������
�t�8�Q�R�1�����1��M;���k��2T�0���WEY0$��U ��u�1��TMz��Z_"����g�"N)��BQ�
3�\| ���~`2�|%I>9n/��K��_*���'�pIe��8/���S�gL Qdk�tNAU:W�OY��Y���
��(�W��A�S�>ay$��M=�|N�3g�8��Y���P���c�*zE����HE�4H��Z�+7�$�!�G;��<\��f�\�l�������-��G������x���)r���x�h������(0Q������4�DRu�@
�\;��������e�.�)��"���|av�r�(��(��G�|	D�`���7��v���6=����pTI:�I�DQb�:7Z3:(�0��:�Re27 v����qg����?�J:�C�"m�������H���@{����~#��k�K/E5t�H�Sf��rg��H�;|�H��x<����	+1�������%af0Z�uW}����q��8��Lt|y���h<^d���tW�y�>�#��]/`�<��Y�D��{g	:}�����/!^���y��~!fp�6b1{�!�y����f�S�
9A���}��|��-@�ZR$�c�{�h+�����Q�����s���w�j��&�u�tl '�}�:���V��s�:Hq��t5n�C��ef�-c:�]����\�:��Tw6��2)�?����]_ ��h�m����N�.��b9����W��ox��N���)�>�2���\��dS��a��(���"�U���%���q�M��E�->�)c��<e�l\�p�t�Jf�I&F!��'�b�����a������{��HX�p���G�����x��I�g�,����_|�Kr�8n[D��R��/�G?�����s ��L�6�>�t���}p�����}P����Z�u"�o*/��~���8�t]�&#�|>��L[t�9CyeDNR1U	^��x2j��
<
u�h�����c*�<���H���F�'��������kT6;�y���K@>��`��6���1|J��m3'w�d*�>`��~!
�T�{/.4!qe���E7��{�o�����Y:���������������]����
���{b�����Ck��\��e-f�_h������D���za=-���x�IF"c~�F�����/Tj���e��R-@E�dy\��?+�R%+�
J���>�:�/.8P���)��m��p���)~^,hL�KE�whC����\��`v�|J$S��8��z����m!����D��������[���q|x��/4�>��mQ2�]5�/$��v���T��j@Q�-�t[��@�u�lqOx�� X��5`�v$���n2�I���+*�@�vS>� |*��L��;��N���L9�Q���)s4��~^(��X�Ues���s3z�����y��M`.���"�uq���i(���z���F&����m�x�h�����|�Cdp��PIDZ�|�6X��Bj��*6��s0s�>v��j�^>>���}�fkj>�m�6�L�,k�Z�?��7��l�~�&���N��y�	��1w���s�v��9 !��f	�A]|���J����IL�_A��^h�j�n*t�y1<��Wr���FW�����S�0����!+��&Yl �6~�eg�j=�Ls:���:�#��N�j?����p_�e
�9�,'�����E�/��`���SO*��\�N��j�M �^f�����(�T���y��bsv�*�~�$�h6������Xl��,�<u~�Y���I����������Y}�.�g!4so����'n���k�@D��`��*������"����y������_��<��-(��������3���D����l|��
���b�'���K�O=����,�Uil��7|"�%,/$������]��A�f!x�d���1��b�����WY]��O"+����T2��a|!��h�����u\Qn��]�1���,���,}�t���8���8�i�{����x��
�?����Z5����K��Fu��i�����C����&�(���VY����]��N�!���g����T�V��:��������@�F���m/0E���}}���feWs���������E���^����}��TfEA5�@|�Hq;�6���nf���P��[9?��i�m���	6�x%��,,���~8^Y��H������pe!SFW�����d$��OF+p�����2Wv�6ZY����eO�{���9��>�|��G�_�it��w+
@�w��
��M��Vf���U�7�3@�%�3x��	��
,Ww5g�.���vz���O<x��z�.C��n���!�9� �|�����H�����}�� ��Je�������t&�)�`h�g��}�)�!@n�M8�]5?9�K���?+
���!�2�����[Bx������V4��6T�uF�$�Hbj���^���O
XoE���� {/�(#�g���Bf�t��1�Y�NwAm����1gubxp�,������������L-rY}V0E�S�P
yP���y����5�ww�@�-�D}Eo�_����c���E������x�������N.���l��#��	��|�v��)�	N
��x��:�m�Zw��D���h���82��(8���������c��)��[N�������<�- z����3�Q�C�9��C�h8�R��7Q*����%S�m�2�{Q���&0cz���3u0W2����4�U!?.�?�5�]�Y58���Mp���exc �Q�EF��Lu/_h"e�#��
��{��)#
���S�7��1AqF��=�t0�WZPh_����\�ow5����	(�sJD^����?|��!5��c��$Y��>S�
'
��Ivu�dH�]����/4�y0���Z0|%�c�6..�uA��w��(�2'���N$�\��B�5
�BR��
^�W)o&�QK(]���B��H��i<�����y�v���Q4�)����}��3��s�Y[����|,ND��J�|2x��w��cX�<=���"0WH�`%*���2���A�y��&��/��t9TKMA��r,D��B�Y�G����,�h-����6�@
�~14L\�>�u��s4r��6�Ap�t�H��s������^h|�.�B���'"�����K��`�@����"�J�")�-4��
���P�q��E�S$|%���#�t�N�����)�w��v����E�0L�Z����T=�p�A_jA��n�:�Y�(�B��������,\��C��w) �=�c��f����,��@�����H�y#�*4	���hj������;-���^7P~:�40~:�4\��h�x���M��vq���?/dd�`upwk���lom�w�r�G����������X"���8�}�8�h���]Q'�@����v�yE��������W+b����l�"t��y����L�=���S��_��l%"�d�fn�d��b,|��c��������Le+M��/����a��n|s4�IqLZ���/2A��L�~A[t���h�M�V��E�^����A\�O��I2�eR"��N/��7V�j����s�k'e����������:)��D������M���I��K���*���Dd���N���*6�,�Bx	�3���C���+���2m��a�.�i����
�����YS��x�[~���a3�Bf�m1!����p�H1$U�FQ��w����<,�z�o����<[�e��y�UW�`��B�e�ux�[�K�����1�M�5zS��4%��[���m�0���x�d��w����,(����q��B�x��bv�V|���+�
��S�����w���Z�,��C���&��@������~�]E�1��m�Q��Ens[H�C�+�	������D6�)�L���j���s!�<��W��F��&���N-e�7�A�|	��5��j a������ty����tZ�1��-�_�R����UB�e!&r�GtD�8>!�)Z���$���V�����mC��:��t����<R��J$�{����E����u=�S@"Z����z�E���H�[�?�DJ�%�n����j$Up�!%���8��&�#���6m�	����:'��mb���J��t��#j�+�v���lk\���)����R����.J�1��������cDW���S��W;�)H��	ds�^�F�F
��c[�XE1���A�~V�!���&����
<h������q�pn������$822�)����3����H�<+�'W�����r�Vo����Cg	���5(�B��d�f?y���16�ZNhi`A�Nh?�!��|]������.��d��$���_Z��q>����Gp���#�,B�i?�[z!��#�w�CM��ZH(�������As^^LJ'��pE�x��?�/������LU��!w��'&d$��V�	�Nj4W�qv^	_��W
��cE�v����)�'3d�{!i�;4�����_�Oy!|4��G<�&~!�ul�����!j_&�v����".��a�V)�)�,�8���E%�+�2��b�.%�Z���J v����f34�+��(J�M��!w��Z��Z�X$dV���n-!�k��|
J�~�y*M�+-�%c����v���J�W^l8=�#�_z7��	�^"`_=eq�2�b�'�q�z�p-L��}�����]��L:�5��yL�9VE����]���l�����{������e!l%�+N�L3�e�mfq����2����eYDAv�,WM�����%��"�^w���~*��y�
�N�w?�\�����A�j�6	>/&��U�������!���F������������E��k�Q+�@��;����8Pq&�k��4u�h����iEiW�Jfm��M�h:�s���"�P�2VY�6[Q��_Q��s�_q�FD�mVv�����A����u�Q�&��&��\i?�X�P6����8�$q !�{�:7�v���!H|�`^v4JB�cH	�����PB�5|(��hW	�|C�N`� 5�$���<�� ��5E(�\���\���}��������0�0�AD�e��\�X� �����	���P���A��Bt!�����)� "�"G5F�#r�S�_�D�(��@��#I2]����6��yc:�@�5Bx�(�h�d.:` C%:��r��]�$��!�)��L�,e&���'��)��'�yL+���(�T��j�KbG%:~����Uf
 P'��7m8EXe�����H���85m��6� 	C#.W�����y��B(��Js�!��p���mk?�/T�p !�
�PPh�ZDr0n��X�=nN+�E:����>�0���*�0B�*���j�#��c�AD�dD�x76Gb�P:@@Ck<k��H<����'^R~^�1��>�Q�u�����[(��2&����%^�O�S	_H�F�&UmE��12�2���������������
�+��������z��	���$#���W�!Wd�K�����@d;���3(���Y��L���*1�	�<�|��$�X�������Ji�����E������r��
o�����y8Wdwq�h�^Q�����	J.6,�����_NH\�#��6`���H>:���pM������4��u/���g���pn�T����8����:	J�7���9>�D
+2EWO����q���e}�:�[��8:C��4��Tv�c��]n��Ah5��-p���9���HD	:�j�P�u��������z�����6$�2�LG3q��g���d���u#:&�����}L� ��K���X���2�g�0}K��n������L�Gj�I:�Y����2���:&��A�D���Nr�wu?��mH�Ay$���!dG��$�$��YuKe���G\��G����`B	|+Q��@���I��rad!����"���Ho>��g&������H�G�����Xa��D���������A�E�7M�
�P������>"���B�GL(�����LXL� �'H^Uu�`�um�MI2v���$ a�������<���K!��2 �����D��j���[5bu����}���]���gf_�5��>X���,V��Wt�2�U�\����i�J)A�:�/�I��[�pQ
���H�$��rd0K����_���Hm4��2�v7�'"����V��U�4CM�M��@;Q�~��(�jl��Lc�����HgF�&d��	+�y��,����!Oy3)��	N[�bu=f���&�1�yx���i$8u[����(2|���������>/bc5,��r���
�����M���x��,����m6I�5�� �������P{:��E{��	�9��rs����8Q��hK��/�0�!�K�z������6=�b
f�M�B�����(��-Y�����Rh6g`eR�+�����%]���d�ctK�����\��b	b"���1]�?�!�iTY��fI��*jI4�����%eN�hI4�����\��	���9e�%]H�e�U�'i1u��-��&��6L�PCO��X�����SK�B%��%���%]QG��`���������&L���`6E�����_1�7cAnJ3�_����\�h���D��hL�)[6h�����m4Q�aFW�#�1q"�jt��o�#(�}5I���HldI[2v���J���D�@6e�f*��� ��d|/�&@���� j��.D)�A�2�����Q�l�H*��
ld�D��*�DGK�
�����8�Rbc��9�(�DFP������m�����p/
L#(W�0���$�
��,0GK�I�g��le���R��LldI�DU}^��P�{CMp�4���J��kJU�5?^��a�V��F�zp�4?lyE�e����m�U��Ba����IT\��t%z�Kp������=��v������D�����E0|2�flGI���4�-���
�4�Rd#)7:�R�T��$�t�C/�H��FRS�4�:��7��0NlD4�A��@���(]�j�=�.of�(��3��&���t%�B��yD�����4���F�P"_�Y��5��Et%�a5����E�#(i�gAM ���bQOOm1I��J�����
FP	% ��T�$e*o&C*�sK������1)Q�f��]��D$���3�6�Y��Cu�bA�5
�������d,��$k')��<+�On�H�;�;�I���LKy�5�6<o4�m���<�_�|��CZ��M��$��f�N����>��~D�f,DzUaL����2�(�7i�N�r5sP��Sj�]���H���;��~.���L9+�o�5.��onl��eBI���.?/���L�]]�C�rB24����*�����9��hWyj�N� ���CP���_0���(�B�gEY>��C����+B1�a=�9���viE������'5����Q���=�t�*���zG"��Q���:l�p&h5�/7��)B���8�qK=����@���;���l�Nf4��������V$.��Q�6��o9*�Y��
����7uAb[���:���f�(���-�
��.�����Qx������<�od�p�a��.]��G�.K�5�+
�Al�u�����M����^@I2\'qc���">g�0'	cp�0��]k���18rk�������e����<���������a������h�_�@�d��1��il��j6��18���ynJ��n[�TG��+�9�*�c�YU3���Y>T���HU����euY�U�)k%��t ��+k&�����������<��rm]�����7�WR�|t�2�eH������J�a��[V�Ld�Gu
�mv�]JI]���K����:h�C���2�?���CV@�fn��@����K��;i��"�!�y�	��>Y�9"G�#����l�Uf�B���sgb>��{�&��y�(9�Ig�����/Pq��D�	�-��y#���.�v{�"=��?����AA�)��k�Q�"�d�L������{�"���Z���&��!��lW�zi}�������U8Q��!���
�-~^��C�m�wT���)a$
b�C�����jz^�D��
:4����&�D�/�b;8�4;��<��8)|{s��@��nB���}��trH�1�'o��������Tu���g�)��!i���
MQ�&�j�G����C������O�����(���v��"��zK�W�N1^�g�.b�>d�e�!��3�{�.��������K����{�e��X�����w,��s��;{��������W!UK���xYE�.�p�:E��$��]W���j���K�B:k*�����s�^�z���T��/}�����?i�������������?
S�3	|�j279�m|�����~��2��{>�?���R�0�����d���8����?��������4������e�Q�j�3��Zp�>��4��o4v�!�]z\�>^��qH�\�� ��TV�~����9^����i�2A�p������Pg*�H�i�Y�0���]"�e��F��8�?����#b�yB�������}J/4A����Bk�u�(�)�8�������o�]�vv��w~��;p�M�e��!c�����(?�L�~�����e$���]�,�:��:���f���T�4�����*�<ha��R��*��+@���8���q��o�f�-hd���tto(�<�)��.R�v�����<���>
@���U�WR"���#���X�8y��C�c��uz�hA�AD3��tI���7��X��dIy���x��<����g����.+J�8�����7��T;|��[Q	�;�����p!Is]-)���z�O}��u
pWR��O4F6=;8�'*��M;K�������S�����'e�o2����C��	�*���4��
`�4�J�����4�:{���eE�h;C��h~S=��3����$T���l�%0�OrP2�W���+���?,c�Y��o�1���h7.�����g���*���������l��f�En#���*�W�Lv�}�M�Q�}��f��d�<[��+	U9����5	�K ��z�p|LwV;f\����T���9�����tE��{����	�� rd�����O\�M�n���e�3���N����HD�!j�C��qi�P�xu�d��e��z�B����P�lO��o\Qe<Y�L����Z�<��M��m�l��;xY����92!z��S��oj	��q.,:T�����d2e�i�/=�;����$#��c���"�q���	;����"k����&�[�-~�k�c��[��O��H5'��P8~56&"S�1\mGR�!���6���ze!(+�����N�4����J�C�����R����}����� r�������@N����L5�/����tS_~���fg!��i�l������2W�&�o,_�;!i�W�a�Z��c�Mp�1���]=!�h��\&��K�|����0eo�������c��*(�)��O��:��e;�����Xy�]�A������J	d���1�V�N��AS 3-d�r�p"��^��S"����_�x�P��
H���2NF����&��F��|k�T����� S;a���u?��N,xz�$Z?�����VI�S��5$�]�8o:W
��*��< '�]�y���;��"��%~uk���Mp���T���s�8�[,�����nu7�{^L@�1���]��`��E"�{NrlX��v4?�$�fs6e]<������X@���,ME���G��	�fH4�%d�5��V ��-*[����/�f6�i
L9xH�`�L����r��t����_�H1���:50d)6_@=��f��kHo�_eEQ�nR���+�����*�-L�j�>�iTc�������h^�\�'*{��	��{XD`�]g	����`+z������I���~x)m���(��1����+������C(�b���bF2���#XT�tAe);O���z��2����uFe������`���bl:k]�,��u� �:���0�ub��t�`!�+���C104AQ���=�H�Z�����x�3;�:cx���=�q1����,��@�q&R�)��2�����G�L��-S�{�O���V��������8(���5�&K,R�s	�X�[�*���Di3;GHX5a��	%2u�d����Jo��Ub�<����k_����R"(�����a��R&u�&�z.{P��S]ZP{�!�p�{�a�d���SU�l��`GZ��%Y4i����y�	N��j�{GAM�d�i9�������E����82���J92=jk�"�enzt�V��MP�3�d���������w����(�j��&8z�K�� ��p&��q{�G=��T�T���=��\����B���s��w[Z9�/��}}������:�o��k8�L���q{P��E �/���S`��Q�7�J[<c�x�x�j���f��^Q����g�F~� ���@���� [�}w�����t���V�������^��>��M�!G����bAxC'8���l+�ww�������
J���z�3�p��\��;����n��v`�n��uy������ 3�+��n���m�[��B����&YC���!�S����`0;�H�,H��~�VQu��Sj�UM��F',,bu8Qe���Y�Q)6�m1M�l&Ko1�v��2�{���}�C�����so���$��L��i<�N�I���J�&{0�s2C�B���k2p����q�[��&������l���]Ja��ZL�f�����A��������g�g�������n���R�THQ4A2����a���C��	4��M����z69$�8�����������3��F�d�M�����:����VOpH{3+�1�P:�I9�z16���Yg:[��tB��,�)����|�[��:���l9���a=���Ih�X�n��U"���pZ�xg�o��;�G����E��
��� ��H'���D\^�����@�P���R���X(6��c��P�2�����`:O7Z��u:
Gg6���+$�%�� ��������FwY�]c�vs�2���ds���L�=$��k�NT�>��������&���$V"���9M�����G*��=�W��>�w�*�B\T0���A8/$�Xc0j"�:����&�m�����f"r��4�`�����hl�P����G�%�h>/��vX�A{�L k���T�O��n�^���p<e|e0��
��h62�����ZH���_��c��2��1W�/$�XP�������H��	������K�*�K�"�����I��m�&/4��������MO;y������\��B�I�~i�qf�J�ZvV�,�T��=��B�8�cJ_���/�u�/�����J��XIE_'���`��L��L�����aZ�������J�k[�Y���������S���>��T��d�7��P���j��zXmA���u/4��MP�T�Z���Z4"�0��<$Qqn��>��I��������}c�����$�WR�9�SY|������0b`a����P.����_�����BI�-~^d�F}85;[`r����LY�=�������'-��n�|~�_(���ZM�H��&�gB=���P��j��=
�B+����g\���w	z""2���M`��q��J�|����y�X��Bq��'��C��������*��,Xs�Bh;u�Y����"�_G��$�V���U�c�US����O�X���g�B=8�+���m"��a+�t��)6���G��L��w������!=��Z_�y"^h���e��\���x��d���zb�KjE,�6W����{!��0�P����T{~�������!*��C����Z��8�J��av����������G
��exC��6,1W�.�������>M�����&Ug��2�c�����&A�K2\�Gr����>�������}����L�}��&��8?���J�)/4���f/�}s�t>D��
2O��lbL������	5�Q�v�J`�[��A����k�!�~ka�������tU:�V�J�'~��y3"46��*��)����O>�5�5�9�lmb�Zg7P�o�����~G�����"`����r�����g0��������K��>�����FF"[W��?��������~��t���g�!)V�����X����'���4�q�5&JZz�n}_k]���^)��I?��wl��	�+jy�3��6�P1���r.�%0U�����OYw
_-����+��Wi@5��Q�2�7����!����6�;����}�H����D����=�������Z#����y�jvh��O���f"� L�!q����d���e9��69�:.K{F��'�~��f'wc������eb��4��'��/��8k}��.��XI��-��jH������IA��(�8�����R�����d�����.��&���w�oh�<�����J���N6n�a\�<�U��������$�l"}����/W��]�e�c���h�~�HP��Z�������M�+����F����x�����2o�����K��dx!����Z����E\Fv���IP/9���;�>�q��|]~�!�����HM%L�U�6f���h3��bc����rg<�_b�5���r	w��D����0�*�|�_	��"7G�uq&GB_��yL�gyp^�E����<?Z�_B��+��g�_��f?��M)N�Ub]!
2�^�*����+y��]eT�Jj��U=��ys
�
"�{Q��	��yTZ��
`�zb[�*+��kpq��o����y9:�@��HKv���U�h<��.dk�8��L��Y�`��!��$bo��n�K��f�;�Yo����-��
US�]����F��
������Q���$��j�g2���q��Q�{&d����+���*P|J��kP���hq�IT�{%%�i��on�;�d/�Kd��~x�`��{���^���"h����@b�s�YR�(���6����7����L3����G������2���L����iX�s`�&���_�?}:~*i��(�	R+'�2����f��G��-�b�(a��S{� ����"���xJ�%��K�����P\�9��
.�1A>�^k(u��k��!�q�Lb��<��d('b�Y��=�|�:��e0�����8��ASu\H<{s!�����)��W�Hy��7,��M����!��Z.�AE��p�i���fA^���N�<ta�u�D�y7IK��B��DgXV~�����Z���[�	��}�����&��|��j"�'���*K.�8Qo��."=v��p2��G�h���]Gf�L���S���H��c,+��P�����?��=+����V�;���}!�#6�s�_U>K�R�<�>�u�%�;uccV�c��9�U��L��h��*�%�[duw�?q��^XU]7��"��acNg����l�b-��T!�Ck�=d������XJ#���}�Kg���0�tCu�HC���d�	����x_�����Mo����v���Y�!�	�S�T&"luiBP�a���y�&}id�����[�H�E�������FU�l�����;Nm�~�v���c�tw8"�{���2���Zx�\��(w���E����&^L�� N����O,��/�wU���jk����Lf)���W��M�P������8����E�ahM�5k�f���n?4Re�b5��B����������x�j�LTuM�D.2�����������bj�bd��O�<��6f�Z�'�i��E;:W�:S�M�7�����e���6jT��>l�aF����������h�L��y�������*���D�iD��0��m~9���"NH�Lpi?�Q�����~�Y��I�/$>��r�9�1s�#���AQ���E�oMQ�"�w����n6�.]���{�F��?M�(Q<��$���.�:,���|�ef����gGy:��E��j�_���H��2�ExO+��Y���8D�
2����x�F"z�H�<�$*k���`�>%������h��>z�2"��w.��`:�pc��~�Q�(_�Q!vU7Y��,����>}���-�����e{��_I43ZiE�l�e�������1P�� ���Gf����Y�RUS�6��(�8\���������_Gyx�����2�����Vaw	O���D�����WF6��M�#}�� s�Z����K;|w��;����x�b�j�:�$�j6�=�Z�,�h�4dH�1ps����<m�`go\��kqM^}����?����45�+>v�-�V����a�5�v%2��3�Uk�KG��]e�����&e~�'�o�`���f���}�B���sUM���{g�5.Qu��=@���Jj���:���>����v�
�Us=q�S��%��k�$�[���$�������]�'pf��e��,��|�$��C��c��O���8��������O��������L�	b�H�D�DQ���2���(s+�
�����'y�"0I���8���\o�w�H��[������7
S;{Y-�jG&�$�jY@��$�u�\YHe�l�FS���}gi�<�lE����)|P������n*��������XP����.-���X�D�����YH��-��� ���
�E2�4e���6n%�ug�O�C5�Kb���.�U��&������j��Hnc.$�?��R��o�s��XV+���$HS^�e������2`����f!O�t���ES#,:�'��f��K���D7��Z,��~:����'2gPL��(������-���k�.?��kg��a�����'Q7|6�Q~�f����p"J�E^V��A�����py��*�_5��r��v��(s���� �h@�?h�"���d�������]\{���w�']>�St^�!u��E��Y�1�]�����8hT�j�%'��
��9��3��je]K��)��`V������}@���tc�B�i�,��P�$�e��%ph}���������t^N�"ZX�e�:0�I��e�������N�}?|����8�����rDY=�v������G�.���e
D7�u�w9��a�1�Qx�m��x����Cv\�3����&���	+��}�f��W�"������mb�@�)P�e�,y=uZ(it�R��F�r�~�yE�?��lNz���/����	����eQ��%���K��:��5�j�{��C����L�d=���T����z=�ofY������`��r����v��
�!T�wW�v�����B�j�C�%���,��<��w���5�/	Xu��JA@�cu����{!_{x�6��&D����6t]V�
����;�]�@C&^4����x�������8hF��>3O;�bl��oEFt����1�����b�d�'���P�X�Z9�p��G��0&p�XWlld�P�6��^��E����V��R ��[�C;m�����f8�L����,��2�\�����G��q��#f1�8�����AIrK�������qL�����r�Q���v�i��*�C��bDpD�Y��a#��,P�0i�.1��h����;�#%���C<r�$�!��v�3����sn&�����t�������~yc�O�+6l�	������ �����l�����������g(�������G5nX6P;���HdP,������.��Des���IAK>���/KZ%1��6To��=�6�#Y��y�;m���
������~��������Z����k��}��R������%�3�q�(�Vd��$�z�b���t�����[��:�x��z����U�=J2�����z��0F�o�\�X�LRz�,0<j&����y�����"������4�M �JM ��q���zVd�E3x\<&��=o$�����5q�Q�	�206��9�1�C*���K�y
?2�U����Fw��
��o��yI��?S�rq�4�����a��T��-�	�\���gE.�����y'@��BE2�������&`V�I"����j(��	rUV�\oY�����2+*B�m�D���������_H=4Q�f*(�`V�cwX�����N�N��}A,Z?��p���&��;iPw�JS��o�PT�/�>4��	T�n�kL����yI����V�
v�L�)�c�&HKqH���B�L��l��D����E���33d:�b�hO��S������&8�L�)��F{��zV1	�6���hZ=Z���K�1MD��B[hJO��
�tE '��R�dGVd�L)S���,���f���&iO��
vtE�s3�7���f2�}D;z#LD�Y���\
��.z��WP����rQ4����fGO��;��	vX<Z�Xq���L�_����)]�����,�Y�K�M�����T5T	���zVe��g�D{�")]S{#U~j�4��+�j�G0�ZQ���M��#q��I]Q��M�G�1����LY��
���������V�KM���c���<T�+/mj�e��E�gv��O6���hQ�=X�)�`IO9�����f�
��4y�$�e-�)]���������[XvE��j�S����tA��jni������1��\sK����G�KOY���i&�O�������[��LY|���;'����1]U?������L6{z�\�hOW4���=���w{��Y/���f�4!�}q�"�RFk��2���5e+��tA��:X�S@uMO&d��S�������44�K���[G�!]�T�z�����g�j��0S��v�C�dH���v-������-����D��=q�r��B�u��]tX�gU�vt�f`�v�������:����Y�/�D�j�4��9��^�dyU���'����`���F��aU�\*�������o��@������,��":��&���b�����JQv3�f*>�#�kM�P�N��^����D��Q��
��������i����+�4����s,'T��X�Z�HdY�7Zu���G^�\@YC��l6�S���S�?ET��7���������,����@iQM���t6btf9�	���./�d��;Sh�w���$�������C��s�/$I�z��ac������z��.���/�/r�\�@j��4�U�:#"���$����������j����r�_}���(���������p��_�X?����=��/jAL�"����r$!a�u����*��N�MD���l���""y!��TB��72;!Y������k�B"�_`�n&
��I\Q�d���,��4A��4oYX������"������'�DD���b��[���j�7M�Q�8�����y��F���x�D(������Jh6{��0�L�^P�����.��8XJ�}]z��(�����D3B�{o{�O$���}���
����=����}|,*�br�~�Lf��u9���X �M0���X,%��s�h�����/:�@%�n�	V����������0��VD�RB�
�Z���Y�[V4�����4�[�B�@-v�������U*��q�zm�/��Duo���C�K�&T�#�XW~{�L"zS[�/��R��]��Hs��G��)�$%����� �����JdTP���	���	~�`w��w./$il�,�f���X��x%XX"����lw����?
H��b�t�����2�3���g��r�Z[�lz,#�
9��&�+�0����jKA��������*��<o�T�-���������>`�Y�[7�i�z������%K���J�eR8���c,�����5PoT��������94*�X����f��g����@h�W$)������Y�����6=��$'%�m��A�!�y�'�& ������5X�7�r��l�Y(?/2e�R��
19_&�i�z;>�n�^�/���������FR����W6_�^���7�w���������VT%����ZA�5��>���{��
2V��`�|��p��P����-'�m!�a���#��&:	��xFL�������M����9�Z�������������&`�{1��&N����m�*W��nQ[�����L�V�X������2��S��dWI�i�Y{�f���6gM����3oP���@4V��"O1��O��f��J������x�w�d�!���iy�}	�P��	���I!��P�����G�������4aP&R�M�y���������v :{�$���D����7����>wX+��~+)��-�T������H���E�E��{�Dd���-0��=�Z����j�#W�]<rD��X�$����6��-�=���<�������|*����0x�y�k�i�PjG��w���L�=�E�}�F)(�R����Jp�"
*�H����O�j3�w�e�(�.�S�:Y��
������)2�����Hd��f�n��K�\��c�A��nI��W�y�|%�!������A�T�r
�3^HrPi����(�*OHq�i������|X���K�����V��������L��"���Dd�����*B,��_���x�L��_�	�I�9X��M��E��E��'�����\�H��?w�3�ZR�K>�	�k��4n`��~,����f������L��������Z����n!�O1�Q�i���4���3�� o���R��RhmK�j���_Hq��u�0���������zy[�ZI{�������U����C�����V43.�C=����[�@��x���m�W7'�_H@�D����)���~�B�S�a��@��#�g�K��<�o�H�����L�<��"�u�=���Y���y1�s����qg���/x�_���Dd�~��i�0���g[�~��\�T;�[P2�5�t�I��f���*�B�N���d���z�������p0b��c��
��S���!y�d��VA�=6�?RdN���w�B	Hn�	������2)����7;x��1BL���8�����@t!�b�ih�O���n�����ADM9����A���'$A�d�������5����y���T)��)5���D���lTf���:��7��|���d��5?��~�a�m�I H�_���@�
PUh�j�x���>@������%H?����!�.���S
Y
<o$o~D���*v����������&�RY,���,�>7vk:������:�j�]�n�N�h��4Z��4W���4��_P��#������L�lQ}��Nup��}���*��i���
�u6���bMk�0_�pP�wD8M`Q����!�L9N|y�<m���V��h|^"Pm�H3������@W���V@%��.��b"��v����*�d�y
r��De�&��c�@���Ll��L�|$I=���p��.��Av��n�"��lm]�����YL��j^����4y��(��v��������I]��#��~E3�_�A���������W4�-B�1}+~��2��c�6�A/�<�g&�8��V���m,����]�'e���z��c.{�NF c������j����m���>)l�c�6���1��dC�6l=��xE\Gq��h#q}����f#:�W�v����}�h)��'���'��Hn�3���@4���yMu\_�h�]�Yf"yN{
#6�*Aa���I��}�����m����t��<P�O+��������]������N�8������k�����^��p]�x}��
�E�����S��GM�G]�_-]1^�Z��"���T��mS�^��w�n���z���z}���-�_w�?������z�����^���� ��G�~���T������\?������3
[�.b�>��C���+]��|�����C���-]1^?�t]�x=��X���k�N�,��!��-�����;s���������������\��?��_���Z����?�����:��PL��N��E��3��sm��L�k�~�����x�%��/�?�._�����g�>V�>�����]Y;^��N$��y�p1>����b�����^�n`��[70\���.���
�u�����u��x����b�n��p1^o�z[�oW������p1^��X�[70\���T�
$�����������d��z�
��o���-n�^�����������!z�on���
��sC������77D���
��sC������77���������!z�on�^�����������!z}qC���h���vpC�z���
���_n�^O~GpC�z���b���n�]��?���|�Z��w7���T&��\�s-�;�b����������r����v6�ny����yB��|%{�uM.V,4��_�9�@��GyB������Y����@@X���B%�99;��S����&��29\�#7��S���^��H�1��<H�B�KX;xp��J��G%{=)g�:������Bv�7���7L��a���e�RH������PC���p�HCO�{�������?p ��V��x*���kX�0�"eE"c}b�S�-���_y�����������p��|q�f%.��5���v������2�\4�GII���b�u5��miEH�L�����D�&�I/4A��\������t�O�x�q���&w����A�rE��,���+@T�����Yg2G�yyw�+��������;����7DT��voX��f!A�E�%�d���`2*�F�P�
k�)�f���s������l���qc$0o.J���'`����,VFSf���'�YDi��}�]2.@Y��l�M,�6~�Ff"]	T����Vn�YZ��J��l�b����*��&	*���d�Z��D���r�!����H����,�mf�,
��}��'A�]�L0�i�`�a�%��<��
��H�<[��j	f�Q<�N����[���y#i��d�
96�d����Y�#��T)��-�B�W��[��D����:wl�3q+���H�7s��y���y���}>J�!��Q�Ww�����-�+2�)lD9�Dy!���gv���~��~_,}�h��:[�&Y1�!]�G�R&������h����Y|2��J�N���62��y���\�,:��7"�����@�8���0�e���c4W���<U�22!�S���	6�G\H	������<��y#+�L�~������Y!]�M8YA��	sep6�2ia5g����VV�������j"�$Kj�v����[.7I���U�2!*FI�aP$��m�qV���'j�"QoV�:�^��<
�M�7�<F/I���R��2{���-"�q��?#����h�������1���S;'@U����t��
p�s����_'*������<^�y#�Q��u����7
�^��������V�"y���*x�HU-�x{���Q����������\lt�,.�d7G��\�?�
��N��^\�_%��<��gS�-2>e�����N��@������N?[���*��(���@����V"N,��||+��P���x���@Tv���w�#I����_-����%��^Mc�7"��E�^�3I�NdT��Q>���<��ZU�����,Rbe&A���0�w�����V�P�d1����'��>\e2,��T�fv�J<od�*A��l�T����C���#���%���c������K����5e/�x�
*�o ���8���/���,L����
r3(���������:��f��������;��F%���M�)��A����eJK���<��Mx}M�Q>o��QT�����4%Qd�i(K�G?@�-���Ay�qgp��>������w���Y&SU��,�Xt�y��9�_H���i��dV}
7T�B����:�'w2�������"Gho���Y���V��l0��yY�BKv��Q�q^6Q� S�y��:��A��B+�9_DrNqg��f���z��{O��#\��7��@������T�n��D1�Mqm?�b}^��r;��V�w�����sqy���Kr]%p3N(G��ybF�"A�K5]�h0�7���!���<+	}(6+-�����/�����%O�J\���h��s�g�����6Q/�������2[I�_|���%=���*��SGI����q�`0�Q��?����8�/��\�)���������(��Nc|��|��p��k���k.~Pu�1��@����[l@�b��9B �zx�HF��%����y�$GN��@���R������iVPR��7������������
�r����}$��;��i�8w�lV���6U�Y^�$���AB���W 99��|���43hF���v6�x�$��l�|����!u��� _<vA�>����o��9
#6���>n�9|VkB�U�|�)�����wEZ#7d��X��7�Z�H��hd���;�����4���a�.F��]Q���?fR"����r�e�r	��O
q�lM�?�{T}�u�����g�����M�����y��T�H��nlQ�|�t��#�������Q�[J�N8�0m�g3�p�?mIz��E��u�L��Cv��f^�)	���c8�Wu����&�5�F�Q�l�@V�OG�s���2�"���6g[�.�%X
Rq ������n�X������9_��'Y6���a������3�'R`*��>X�R}�~F�ub��+�2
��iXn�����@��Yd��a%K��(�}�wE��s������ �z�ymG4��F���#dT�m����/?m)D���3r�0��$cL��dS�
���Y�m�
T��x�����X���O�1�dw�6��z������3H��@PL��u�28�\-�8� 7m	x)�p;�g��5*�����n�)i�{�X{R:�wER��,��g�U��bAZ9zX�p����2#�1�_�;]�53��bA�JX4V+�;�!�d��
J�0�NJ�Q���a����*�����W���_%���~��w_�xo���L���i���(X�2�����F��|�}A�^5��L��G���[���~��^7���T��	��{����"�v����	�H���;�a��i��}F%���O���D��3b3y��I�����f���
�Y_T�C�u/2l�7tO�["��z`��B�'�i���
��l�����lg�e_�=��l�*~�l�����a����cBQ���������O@��&
��qI���p�����~��=1t��������gw�A8g����n�,���+������ln���d�g��U����b�5�X�{�q�=2v�-X��}xR2�J@J��% %�k'
-H��b%Z�;�����Ac�x-�BF*7{������D�%�k��B�'r�\8����G�5|�'�c��
��\+Nj�2���N*3�$�����!QL��- @�N��y�����q����r��mV���Nv��%�1�����*!���&���	6+� ��`����wax�������1#|�i��t|���P��w��0�j��x�"��=���������p�l$�:�/������`' ��U��� @O�#�#	�Bp��m��J���P�����+��e������u�M�".��D�����f���fS���%%`�]��[q*w������{:
��>8/���������XDe0%5��;{6��3Pq�/
X����	%�>��������������K>����6oBA�+�%i�y�$���T���W6>�\+��,L��<�����L��]����:��s�o$�*hA�=�Q�8,{5��'�����C����]�<�p�B��J��@6W�@��*���\&�J�������pP�^���E�B��q���2_2N��Xt�sOF�_O\#��'.��;q!����_G��
��z:jB�����c����&��=8�&��	�����V����i�#����#�Ce����=T�+fr��u.�����" �@������~�DdgJ�o����eg$�����1N�CB'������"�y�G6��|������i1>@T��q�@D��L�jZ������2���	`����l�2�t�2����	�w����8\����j�N{)F+���<�D����J":Z�'�q�LD3�������
��RN��5�V���e1F���(F����q!z7!�k�2rET��yWt�����x1�w3�M=����3z��G���F��wF�nFzZ�u��:BX3��x����x�������A&�x3*B\������u&}0$���F�1�aC���vE�0v�<R�K�p����x���1�D�[Cx�2"4bx3�;�s��P`����wS�}W�z��/�;BoF|PwA�������Cx��q����:V�����>1�ebxS��,�����������b��y��@D�n�����#Q�~�K� ^�iGoB%�+�x����f��oGi���QZ�������v��7��c��}wBp,T��KZ�"�Z�{Alz�e���+��`J�1O�3�;�D��L���g��X�D�}�aEF��[����o���^������f���T/��������o����[��JD�6Y�7�^��\�7����x3s&���d��E!?.���5���s���[Y����������b�K+�18������xt����F3Q���o�g�f1��#6���L�>iB	h�����9��5�xd��MAI	�)Qy���_�L*�B�6�I�%.S�
'
�p!��V2��Se��/H�{0?���@0|&�n��
�2�����b�v�7v��HB�v��nQ�i�g��Z)+���%�.xdf�L�{4�vX<[�qlK!�zw��(���a3��g�how����J ��kq����g"re�-����{��#�v�b��]!�
��F�2�-�W_���z��aZ��
��=��!��,�����Y�h-���j
*����'���w/�@�/>�t��f6�n����#I~�2��3�F����{ra2��E�
|<j-��b��4������~��>H3���N<���C�
:�P��t���D���`4�������913E&������maW���#A�pj��cj5=�p�M_jB�#���pY�������?e/�u#�O��f��S��w) �-��%���i�Hr�h�RV�����iWa�H��S��0�?@�-������x�u���Y�q�������og���=k�������^���Yo�"��G����xw*��g`�a�U,Q�1Tk�a3pP�7/(\�(���.�yF����ff�_�9���K%lEj��d3�=���SY����l&���.��[&���.L���p,��0��(��
Ut;����P���'��� H�Iu�K�����D�;,�'h�Z,�����f�rAGQ�7�����Y��K)�"����m#B�������v�5q�����P��6�� ���I�QS�ow��ah�!�	������DD��K][�|=��fBMo��Wf�����.�m���>�����e53V��A��aFNO!�I�N�(��KB")��v�G{PL!���I~�������l��+���c�5!�Z)`X�2$�=�c�	8-z���4%��$-�`F�����kG�X%`3�t�����j���������1z�DO�2p9��8_�I*��Z�,���,��j�N�����~�]�ac2�����"&�f�dCS\�"`,6�9�	��6S<A��bh&
�q�) �QH��`��	���ek�u�����]
$�y|g �e���ug�����,h��EM�+
����D\�����-q�|C"z��������LB���}m(0���������Z-U"�v��B�XN�U�s@jv�/��T�8��'�F8c��+)o��� �3.�>��>c�L���*R�<��S&`�Y~�a�<!�[�U�c#��f�����9����2?43�o��`�|
hF%���M�3:)����;������Qb�n��.�S�Gts��}��Gl+`-�HVQ\<l��'��>5!0�<L��'��8_xa��y�����w!"���p������;�vse�u�Hf�'6�'#���}YPjA�a:g#=H��Dl����m`A�N��<�������j�nnL^P����hv���Dd|a��f�23EI�=�&y��g"a���:�D��BB	����|�4�ea�;��/����]�8X����BDv�F�'E����|���8�����LD���k����?f$�ep�$��}3�D?+��|�E���'O~��������y���&~"�ul�'�=�C�����*���!�A�vZ�D���:��
�^C%'��5��G&�v)!�*X�*��!�
`w�����
b��#�����?,�enBR
���b��9��%4�Zg�����o�0��n���^:��Q�Ue�����������Y9��		�W��}����e �io@u��\�G�&���>W���mY��"�/���^k�QD�B�l]�ct�H�wa����~�Kh�e%l%�'n���L��,������6
n�m�������ES���xY��g"C����V����������|�f��%�e��k���MG��������V}N�(A���x���z�nO%$��iS��m�5K�5��A[�����8PL�w@������}'�%a�c��y[m������d�0}��Tf�uS�!c���C���g� �7�}���&�|V��yg��L�/{g4t��2$M�IM(�%�f������~�@b��!m a�	����N�;$�@�x#�u4FB���	<L����l(���1�@^�+��C	~�F'0t�y��A��uG�w��9�02pQ1b��'�G\}���+�m�`$"q�d=��#{D8����0Lh8iA	��8<��9��2�A����q�<)�O�������
�5�Q����G�d�*�}��0����w�!��wE�!��k��C#6���I�����iu�����Z
e:�Rfb��U1�O=�N�-����Z�.��/��G@����-��d��-����]�������H���X�VV+�C�0�p2��^0��W�@�w��w�<8n���6�������0H�����(�UGD8�?n-�H/��y�N�����F8xW�a��c�o=ZE���z��\a��d�Sz�"J�hh�"(3R�BV��H���B�S*��j�
Z'��|��Y�tYX��k�[���i�h���=��UF&"�]���8��������M�W\�H]��X'%������L@�`��d\� ��rE��n���A>~_����\��?�5r��LDd�!�l4@�w���U���v[�1�2�l��Ty;L����{�/sY�9��&vZ����s�A.�k�?3J��t�3A�����Ht_��rB��������^�5&����C)n�zWT��������I�4�X4��&9����<MG#A����-l|�����	���'��0��=�����n?����3t��R"��>���7�� 2�`����O����g����HD�Jp�-��9��w�@%$���{��q5H"'�Xt����h&C���Z1�H��Zk�������7k�cL0!�n�K��O����2�g<a�������������C���gE:2<���M��g5$u��'�r�����b;RpS�I��J.�����D���O�	N�|���Z�k����c$��T
H~������ad������zz&�cg>�����8G:<������%F]��W���8q���t�h����-�u8�p�BW�����:a��#&@�d��{�N�3����:A������vhs&phJ��g���3����_�-��9�fO@0��I��H�|�H4�;�,����]��A�Rqf����������_�@eB�b}{�StD����������x������&�������u��'�~�YX���Ne���32MRN^4�BNH��=�J4,�t2��%BT.����GH�!U��M��i_�=F�#��-	�o����(��9�{6����}�Lp������� �5�h@6�<!�`n�E���(7����M�]�����y>s�O_=#{�l�t�19y��������MRh2'{��a{:�hO�F-���5�������s:��8�|D[�V-�h����*@������4���Y�t"
��2KZ"q[2�hJ���3��Df�Ym�&���[�&����^"��1�%�@���C���b	b"����Nz�GtH�Uf��Y��
_��tFt�iX�����%���	�g�����41������-�DD��Q�%�6I2,���aXR�=�D��"�%�v��Y������K:#-	�o��a����B"L�pn�l���`��f��v��F��Dj���r�t��ge>!���i��M�20%R��n�&*���E���w��#��q����le�A	9mf-AYoQ�N#(C6R���-�i��^�J���q�$��qE��(��O� ��DC����d��l�GL��*���	oL�������Pc��P���������'"x7b�|���.���[T�E�j�eA��x������hI��zVV�#(�M���6g�#� �OT�w!>�p]a%��4��1����&�uXTD���a����:f=8d��=zF��a�(����j�]PF��0jR7�2F����V��a �m���s(3�HI	��tA�1�`��H�(����la$�_p���!I
Sa#)#SaZ"��#�����l$E�#)��fKa��fI9��H�������Z���Q�|�_�8J���'d�(��PN���� �e�����1��56�R��1bbS}bc(�gc(�Z_+����9�0��8�)�����Vk1I��������
FP	%���b��@o}*+�!e�Ty�(�wtLJ����s�� ���5�,���2��_������9]�Y��=�X���l������<���'f�;�i��������B��	x����?�97\uW�NV"u�!jh�����3(C�n���Uy@��u�M�u�����r����@'���
P~��d�'#�f=��'"���O���4��
�2�^#�A����'�-3J�������d�;���=#�v�B��z���>�|b����z�=�z��*�bX������D|���.�g��
-��o���ike��Z	q���\�����z�[�#�������V���?M�#�R�������M�-�����>s��K~�Q�q���I
�M,|���6Tb�&yS�U�u"��d�f��a~��G��3�w8�Nwp��3R�Z�o�6�<�mw�P�)_"�9�]����������G��(���(�r����8
��!k�%bK�p@����������3��d�N6�>�mj�d��%�q�18I�����}�.�0?q�
�O;9#�12��xc�������h����l��|"c4}6[���o	��<|���������_��Rr��6i����R�9�*�c<YU3Q��|�|���m�)k�m)��C6e5��AI��5��|(k&����c�c��N�3����������k��C]��q.CVWg#/�V���P�`����������A��.�K)���:���������m�V��y���	pb3��	P=+3r���i�AC�'�"5;����o}�H����#����|�E��&�$��sg�>��W�&��yW���d3BR���*��,�� ~9�P���8K���^�{�)�~��!�A��m:hhY&%V���Nj1���H���B ����Q?�H�q��m^�U�v��K����]����PP�����1�b���d��;?���0��!�mV�2��]P��[l*H����'�T��O��8�<>"���8R�>TR"\�{�/��M�,��|.(��L|vHs�P=�Ac�o��g����)7���F3j{E���CC���{-��-�������rc������S��w���{MW1����-�������w�2�+�w�w�������{��w�?��og�������������������w��_����&���������U�����������}._�uO�'�S��������"���~R���7�q}������|�9�����������D�Q�����������+�P}|^�����=����-�8��/�����m���?����w�������'�9?�-�����Y;�2�* ��?+���E����������;�
��l^����R]�{�[k��i�'e������������)����v=c�k�S"�t\�����q`
��:�W����c4�z#Y�=�3p�Cz����R:N>��8�YLn2��N!*�����y*%*_�D�<��)�>��r��l\w:��&":��y��#g�^��!�Y�2���n�q��������OH^t���H*��hb��)�s�]�
 ��CR�I����J��,�	�z~������rC�3Yb"��bj�2VY���U
�����SfR"�����������"B=�v�s���ga5���h���N�	�d���Df�&��������|�-z����y���������^"x��>#����������8�$�����~�c��Oy��;��3���O5F�����B"�f5�����L����'&����g�3��~0�;+������`�m�6��
����L���,!����� �wC=g�bd:fm$�k�q�T��HBpJ<L�,(��A�^}�����;���E�5'�_�����{�v������"���&���=��SW-L�5�G�������ec5!e�\�1I��(��E�x�V��	��[���r���.�����mg�c��Sbz�^�waZ,8=Go�8�tb�:#���kx�7MH����u�������6�c�Gj�*����L��S8�����"Q��h-w��f�B��+�����b)u�������Bf{jv���n�����w���I^c1Q�
�m�v����u�U$�;���v����7LnYYt������LDd�i����=:����G.Z�{������5s{��"3*�Ha����w�������~4�,&��H�����k���[��"o�c
���'T�D#�����>������W�9tU�S=CSb!�YH�����8@�W��u����������
M���.��w/��^3������C�
`v&"�L�x��l�v.��9�P�X�1�������o��>Bq�5���c�����9�aF�8�r��\
�
���'��M�AV�����}�<�*��������?�v�q�Q���TJ�<��9�B	D��x:��m�!^c��LY�!Nd���|K$7o��J��c@���A{�}0A��ic`6#<����tP�EE=�0����v���n���~2��S+�@/��.���#* ,��oqkw������E���>	V�
r���+j����}�wAE��K<�[������B���w��5�oH�����>^�pxx�]����\�k���N�@���#�Xc}��J��t��e5�J6��em��E�a��+VQ(8���rB�dkA�^�a�YC5�m��g��d������W��M�m��g�w^�2���������a36����$:o���C~���������]b�~~�EY�I�]�<#�b������i����2�s���qF��sFw�F���lv���#f$�0O���u��F�P�J��_���i��������B��.8���^6������v��]#��������>r�a��"�P�!%�*>���n�f$��~��r	'����� w��i�gB�����z�g��A*Z(	�A|�` �;����=~�>�a��A�{���4������(���Lm��E�]���C(z������Y4��X�L��[.3eh���7=�Dd�n�L�K|c�J�Q2���&GL����G������K���/�v��x1���f.���k��	%2s�'d+��N�h���X���{M��W��@�K� oW�bj�;@��DDv7��q�A�*���4!cz����a�]���k���2�u�����~f�d�$8��5��T��mjQGGAM�D��Z?���]U� ���82���J
�zty���tMs���b��+��j@��j���tiB��\��=Ja�4!�����6�-�_���������oFw?���_��1��&"�����x�o���Hu���!?�����]M����vK���I�_DB����)p���(�|*t�����*1�i�����^{Bj����G��i'�b�>;�����md�}������������$cvI��M�!g��������h�{B77np�y���b�-�z&"�g��3����<���Z��+=�����ee	�����B������]0��g���N���Q����k���{���vv �� ���$VD�����eO�j�;��81e�DA��q?|��5���,K���d5u��R��!�v���U�����$kh����tb"-�6
]�lcl����������E6m�9��������S>vtct�rwZf0��	rG���!�&�����=��l����XL�������@�!�<>>S`�%�!�f�=H`w�/H�������0���!%e u�?�6f�N��H�]z	pwV����E�~_=�!-PL+��:9�����H��f��,�� ,MY&"���F8�3���u����[�7�?����������xOn*	dO���Z@et�?1���H�!�:��
���g.&>���N{$��D��^��r����v��{���*f�MQuM@M�D���[�8y��LD��4]���]@R�I��T�����i��q�1[��q���A)i�iL��R��?"k�N�n����H�e��nw��3�F�������P�#��@��g�^K'��A�����q>���[�LdZ����Ak����_�������fO��w
��� ���6�y�b�����`��z�L [�������/$���3��x���`����h62���vE�gi��>��s� C�W��4� sA�s�`��y$��zo�!�~*�D�.e "����l!t�6��	�1�V3mv����tG�����m}���G��D��b��Ut�����D��Q��y�<XP����u9J���PG�	���~<���*���l6�)�zG�������t���=������3���*���(�(7���ND���4���yLw,h�����8$��&�U��Z��l?���$��d��De��k���&&I$��f��m3�	�iII$
���{8�e���;���J�)��ts <��t_r���<u���6�#q��]���5�T��-0������s�������7-��S������
���Z7�~U�y�.�[�z&���/�1���n�X�c�-t���	�q�N�F�pkC�DE�p��L�\�1���������
�����o�e- d��Sq1��|7��-H���A6�W>����S]�v�1����,*BE!L��gl��%��Ld�7�9��A������H�C>��r`M����d*6� 63U��k�����C
��(����\Z�'K����6Y��������\>EK��7��3b���t��7(039!-�0��[I�AR��D��!{g�������������'����TV2�az�����T��N�R-�b=&mXbCYO�fL�,����bR}�v�oL�n3�86����>�D��K:\�C�z���1��T���s�<���L�}���e����f���	�Q��ql.��������bw����R`3�p�"�&�s�������:�3�z@�c�4��0���,JY��U���3�4}c%��7#BcS���"�@W��|K��{�����5R�-���?�QTu�Dt`]��"�Y]���{�X�.z# ���6�}F
�,����o���c�	��]=���lZ�_��tX��X+l����+�$�h.��F��I�*������xr���vp��z�����}M��HQ��MV�0�}�OLH?����
@��D���(������#Q'�}�(s���Wi@-�r�4�2��f6Di��5-m�JR?���g!QF3�l Z=Dn����Y�{,w�����g���fvh��11�
�D
A�*-J�
�7�&"��e9��>9=,t\2���F�\'���g�N��1��h�������i��y���H���qXtG`�0�L�|�8#}���t�LF����(�aTR�I�:|��T+��\F���m���H&U6u���8�����0�J�G)����pgT�3,����N[	�e�I��D��F������� �<����h��i$(�e-�.ZP�<��i$Z�: bdkT����,i�,#���/��O���7���.cwA�1��gE�n��3����F�+��n,�~\|��c��6��L�Dd��6d��E��%�z������!������������2�xh����g���\^�8�����"����'\-HK@3[����qx��K'r"�/����~P[z2H��Kz�SS�@o)���YT�����W��VX,�����$p��'��X&�����
R���$o�t[�&h}BA�k�wS�)�Z
�I����L+��2n�����#	���7�|H/��~�w!.7(��Y5eV�8!���4&;h�Ao����
m��,(����7�2�����(��`�xKD0mJ~2t�c��&�-i&I���b@��~��bjoN�������N(���)����D��P��w�i@��P,%����"y�yq	`2�_��:�:������B�<�;����.�h��\�r�FH�;�J�,�:D��	@{����~�
���8�������n��V�>2�A4o�O���]�M�q���,��x�C�%U���Qh����+�^g����X�P������D�+t;w�[$�#���%�&�@e�����"x�������b�wE�.R+���}M$ZlV��Wp���lw�B��p�W�c��e�������N�1{C�`Od��T�0�L�p�!z���zH�;����!��������x�y!���]Q0�v�;��
��4�[����"�|�y�n��a�+J@�`�.�,> 7��kxN���'���6wPf��(�����9��kA�H���;��j���
��@	��b�bA��1]�D�I����-�[P8n����p(�.,*��"�/������z��?t���k�I�_���1P��qa�����9�g������w9��SpG�}qM�����_�z�l���d4 r�P��\
E��>�b����������y���_6^���"��h�������V;3��
�nX���1��w������0&|��;b��r��Qg&�z�����ac\U�<o�����Y�cC`��z��,���E��S��>��"�n�v�0���vCq.�z�yB#������������;fEf2>����tn0���fA�<�6�H�EOJ�Z����u����'dP�u�{(�6��@��-?��fm���?���r����^,���7��~����P`j������c?��K��7_|G��nlL��	�����u��{n:<\3�k���E��\����p�pg��������:���.iCU8�2�\xA�L�\m�l?�������������N>������90�0�I�
B��[��G"B�~<'�j�'I+t�������;��0��k��`b ���t��4��^vM��|c��
=��������<������0��/���4�S�n�|���"b�*��ru�+��%�N��?������x
����N O�������XL��+�%8�p(�ss C��	�F��W�N}"��f���x��B�<`S\��qp+�@tLq^�l��;��3�>�����_'��,H|~�{���-���4���Ql���Z�����c�����S�&L�n�yH/[�HTK?�����vhA	��*}1�vc����"�?"6/�����F���y����)��iF��]?"����k/Xr���������<���s]�I%&���j�^�qQ/������!fuO�K"*��!��/�����i��9#
fk3��6n6|,��2v����!������v~0B�!D
�s�S�>�N&������}�De0!��Y���FG|A��V������
j&�y�`A�?��gJd��������Q����u�c?L3|�,!f$�����2jLo����%�R�fvuAp�([��=�f�
�����i��������������)�X��)���{2�S�)��5�P5���:o��m�Q�D`OL��O�w^��{&"�C"c2��N��0��A'N��8��.Ps���U���HT�&2k��dG����'.���!Iq$���(�4Z��wE:��
�YS���13������y�����?����6��Dd����kf���+	����m���:��!��j9�-4~Vn	!��a�z�����/C?+
@=��
�V��<�1�����O�5�G'6��h?N��%�����(N'0��;87v�S���6L'�w{���a�;��i��-�&
>?��G�$�q�����K��O&�[Q;6��R��o�$���b����P	t� (�N��4��E=a��g�+�$���2=@�(����eeCCl�
��E"( 2
�5g[�3!Ul�u7�
��q����D����KC����2sAZ
Z
�i�5���w$8>A>�a�>f�
���qy�K`E� �Xes�|�QC�&��5Zx�L��uG�n�	���]����pz�O�=/3�����ai�C���������I�uLU����~	��%�����(��s�����2�`�)<3+$=�����Y�}g������7!��cy�`(`�$���<!�n�zL�%7���C����ce"�3�*���F��+�D3{AF�������������0�>����S��F-�jl.@���9�:�ip����T{W��:�JS��/Ov{�q���/���
��G���� W��?�����lg���|a�:����fF�a�j� l�^��e���2?������g!��,�o4W�� ����=�6���eBetG��i��'j��Jo�H	S*��3������Y"�������
�na��u�3��ia\1�����Opo4�9W�5�f��l14���c��,���f��;�}K(���]�m�4���,����������!*��D�e��nXI2�a%�DJO��������9]����Y�7���������Fz���i��XA�YK��	A�>���2�G��C��+
�o���D�X\Q��=���1�?��s�����)u���
��Z��~~-(X���n� ���z�7B�{#<2Zp��vGs���BWq�a��M���/n�]��I����c���$������\=�mm������	�O�1����7��9���dgk��+�W2���6z#�;�'B�F	�,��d��__���S$Y�`�����^aA�M�mW�Vh7��-+N���|Z�bs���X%�a�b*��8�����h!N+�n�
f�����m���n~P&����=|�������?�~iyg�
(�$������I������������M���������W"$�����F�:�����G�y���~��O��g������_����}��?�j6@_���z���I_������)���O�����w�U:�1�����O�N��v�+x�������5V��c����V�K����r���wE�s"k�.&i'����m�d� @��y�pSF��E�{nl�S�T�I�A��������]���a����L������/���%�\o�]n}�/�SRw,B}g ����y�l�p�D� ���[��Wg�=�X������t/�j�!�/����@�o�w�h�J������,5�\�����ea��OzX}%
}F�*f��u��������t/�u�m�P�q���q^y��D4k�]�}sJ^/����:B���}�A��]=��4
��������UR��vx}g u�)��9�K��#s$�����;����=T*Q�qC�����x�u����d0�3
�����f��ee��E��.JGmiz����
�'�		��3Cz[EC�����DK
O.�LD�UT����dG'�`���h`��	!�5DY)�{2�3�C�@N�?fG'"�^���M?���
E0{:k
~�������������5��]
As�@�-X�I�Hk	�1���S�f���l���I��(�����r�m��h�>l����7ZO���2m��%(��f���G����IVuBZG4�(�2H(�����t?�U�2�*�����gx>�BT����������uF�W���7�nY������fu������Y�����f2d��z�lpOAJ���L�{��M����|�{��������za�?Z��YE[���Q%u3��U�X������n:������6U^yG�5R�M����<>��
�:!�:�t��_=��D��'��fN�_�
T�I��E�Z�_��'h�D����	
��fb�����l��v��aP��r��Pf{P?����X
����A��*�0�������:#:4s{j��j�Q�aO�F�k�����z����k�5����9�����b�G������[vR'u�H�0��n�[�D�=?���b�%�R�)�a���{rR�J0�����Y�aLg}��l���
�n�m$Y��{������Y�PUwx��.L�f����G8g���3��=bn��w@'�v������V�d=(�����~K�� n�&����>���?�D����D�Qe�� -���gBz���;�������42�*�
*�rM�o�t�[,�LD6��2�������s]e-qGWj��>0j�5AU��|yVnV�����Q�O�9���_5�n���u���g=�?3x3�<d��f	#1��}��[��9^���q�cY����%��\���|�z���{��!���`�����+��,�(��`]�W��.��wz����mw)OH�~R��� ��-�y���G�k�B8��)����>�w=�J��Z��&+kV�S��#���M&�W��9�?��m��05|�8A�����e������$��f�(��r��:)�F6�S�O	�����U���
`k�3#Y�w��Y����3�;<�u&����H�
�g�����������~�gBzah�3%��ubnl�x%������u�_���Gk�������������'�}�p��Z�Z�� _v1].���i�DY]���1�"���������P~#�F��ZaF�����Ln�K�2.����w�!*�	�����<�!��;'	pG��H��������}����%n�S�.7�D/�{�u,���+��?Mg
��� f"*��e�f�����v^��r�#�<����T>v�W`�����vX]��	�c1b�����Qf���c>1h,��������+3Jr�
�E0����y�j�#z�h�*�l�l|�x?�	rW��O���=;�3����0��E�Fp����D�������YJ��dsu��b�`����D,LN���i*����'�L�<ndI7��;����L�~��k�x-m���&dW���u�5�eezw��DmV���&D��;�����	��Z�+o�5@�J��d�$��@�P������D���m�������%�5�l+h�X��n������/��&$2CG����&vo��n��M?��S��_�O��d}��$+��p��is��1*�����m)���.�.0�Z��9	�}����2�OUS&�6�>K�/M��cw���1��H��o�����`M�wjk��]���p����;F�����p)�uD�`u���5�p���������^*��g���]�	��l���=u�o�������J��~lO�*�9G9�!}N���\Z3r�H�+����3�M�w��rFr1Y0����f�x�
���E��#^�i!g�=#�1�;��������au������7��'"o�F����	v�����N:.{��4�FOd��[���>}h�B�lBF�b��	��Y�2�����o����	�P��
)��K:�����lhK�}a�^�y�l
u���YH�5��M���*@'���]��l����$8P�8l6��TV& �_��������L@=&�����LD���gh�>&P�H�NM�@Z�
I�&$�nAGxVCT���P�I>���Z%���^Q�$�":�A�Q��a�2�l�I�]���'9����u���Vm����;ec�+Z��O�7�8r��3��������8q���Z��0��.s.+s��t<|�u���1K�n�#l���jt��kdF��#x���F�wF*w�������	�2�S!��<p' "��������3R����8�#���=_�@���%����<��E6��c�a�V�{]�~M5���=6�����	�-�!�Jmx�@�E�g��J���"������;R"�PWs�|~���P�Ql
�����	8}9�
�7�M�j�	�a�&_kn�0����F�Z�u�����0����,������F�G:?��>�$O����+���|�f*�E��y���0��n�e�V��h�!�%2�U�t�g���1����UX����[�~k+����b�f�m`���kp����-��7m��6H�����$�.)(����*&���m�mI�]�T�)�L#Z�o6��Y����>@Q���S	)�R�\9qHqT���(v����J�_o&"{�H�'�&��f���hA|��c{]�>#����s���s'BE�Wi���37��U�U W\���:Bo�e�.�Br����L�n5=s(V{���������G~,Lk�
�o��N����AN�=a@~"���j?���y���P+m����-o%\�:���|��By��b���O���6I��
L���-�6�L�+������\�3��������I�	h)n�G�BMX�H#(������"�	�#�#��6��u��H��e��w�:�����h�����kYyG���[z�G��u���wa
<>/w����o��t3*R��������/&��6.�+4o)�D,����6�l�r>�jA�2XH����@�����EB���d��)M���������kb��R�
�jJ�P�����B������D��jBf��b��%h��&�����@lX�nB��`�����$�={�2������;zm��������[+�`����{��1#���A�6i��jy����'�RR�9��x����,��0��$�c������m������2���d{���gX�z���DDn�C�-��<.%�Qc�_�����$h
�9��^�r�=���
��
��eA���}p&����;��>t��M����im�Ea0�m���vE�rx�<'$�W;L$%���l��qv>��>#��7V�|�x��2���p��e� �I��!p���g �F������?cS���m�6�p�g\�B9��]��y��'��W}z��6dy��-'8����sQ��@��@�F1��#��sK	(�}�	�>%hGN�rL ;�b�cn���7�p��'������s���[.��?�$)�}J����	�3%��$!�����\��!�g.j���jQ�!�Ff��U�o�E@��O�;����G5��1��<��U���3��b�{��3����{����v��S���{�S����R����B���]9��)E��1�>}�>��e{�����u�FE9�''�&�����������D~Q6O�c�#�����+Rz��-4����������U�r��Ic�<z���IzlCN/�N�)����DHq,)��`
�6r?Rx��;
O:��S��s��"���#�!����)�kN��Sx������XRl-���2
R�$�!E_Rx����>#��s��N�)�%��K}�"��)��n]M�9i�������������������������wj���i��si���h��sh���g��sg���f���:3����2����2���y2���92����1����q����?������G+��{�K�cO~Kpc����n��=�������?s����g�_v[�3R�-����"��G���D7f��nKtcF��)C�j��}�?:K�g���j������<f��C��C<#�[�N6�����{�i���,f��]@��YP�D�Ht��%$@��(���0���"y���H:/E[��H�< ���������H<=���W}���e�����������?�b�Z�b9�.BY�YJ�B
�S%C2 '4?������?��AI��(�(����!�
���g��������H���7��g��N}����:����X3����g2���6�,�Fu'�r���
J$�&�FJJ�� b�B_hmiB��@��X���� ���A[�������&��;��T�O��u����$�7D���X~OTS�{ ����p�]�~�x��(��
Dd�K���*��W`yQlh��Y'@��$�<�*d�r���`2v��Ui��!k3�HtS&��t
P�J���0�[ED7��\&�@���SX����Hdf�_��y�"��?������b�	�j����62�J�Z8�C��N���g�mO�b����l<��[�Nq������c������$�!�2�v�W�R���:����b��k^V��K��7��f�_�l5��SQ/
;�~Gei
f�5bFa�Rg�N����+�&~��V�g����7��svg�����b�6I)h����h;�������j&#��D��q������D��Hq�]0
��}?����w!�[8�Xe�S8���[_�zR�����n��`������F��}����d�,��M�b���H��r
D�]�n�����j/9z8�oBY�/8`��N����H��^6F�NEwQ�b��~k0F8�I�HV�8AD
�Ey��O��f_�H	�g�ap�k
���IG��<-y���!��s��v���P����m|�6��OaVzA��J�w/�L�,�f�XT�ry��zz��~������"	vLd���7�f�"1oV�9�#��=
��N6�XI:r�J;�Tn�C	>BwbC���p�'�+���*������!�l�wE�:-e�s��L�3�l��{\:Y.u"*����� 
��w�Y����q�&;��.����3����ik��&��?x�
��"mT{������/(v�O������>Bv�"h�(Kv�����kA�/�!�����!����F��2��T��"�[��$��������3����I��Q e����+�v��6<�E���a�|�{z������_��8������~S�wE�YF�o-�WY���Ft�>�z	J�M��=����;m��o�;A�'?�f��Z�j���;@�2��R��'6{n�>�O"��}I2�����0����d:,�5zms;�e~�V.�;U�2z2}�m}JB�!j�	�������;��0w�Hy6|��i[�3�Y|�>��������p���9t��.�P���A1�^@��H����^~�������D���At#�����&���cA��w��2�%����u����M���oC��P�j����"�Y(���~��[��������^C}tCw��ARy<�e���������qE�����:n�S�����e��V��/n��5�A�C��Bv��c��B4�p��Y�f�c�BD��H��y��sV�@g�F7�����M��6F�Np%����8��b���>�y�e�F�����pT;�s�]��p������U��B����x�-��}^Lrr���^�O����#��������J�a�PO��YcF�"A�k15�	��x�wE�q�9B������>�fM���[s_<B[��Fh���u�8����9���:C�F*��ys�	C~bC�l%'�E�.�f�SU;W���R"{����9F2�����<'�b�d����cD2�e-���d�� 9r�l����"ffpM��()���q��������d7*7k���G�M������s���fU�[lS��k�f<���3z|^�����@�{~V��C;8��������p������M�	Cj5s-���]P�O6 ����e�6�a��@T���F�c�je�ZE�������l�i�����������Gz�	�
?��mN9n�ig�n]�d����+�Z�@J8�ZU���Xn#A����!!���5@� �y��/W���#������z�	a���b�v�g$S%#���EU�9(�
?��{.�$YP�[J�J�"��'��=wh[�\|'@]=Sz��:Nw�&�S6���2_�=w�*�$� =F%�UY�>�)�S��n�$R�\�is����QQ�� 8	]W�nHbwm,Hf�����9���'�_�5�t^�PiVt��D�L%V��!kY����H����7���r���4Vn���ZY	�x�F�V�4���B�xW��Ck&���@�q ���k:�/����m�y�	jA���{�r[
Qy��L��6��`5���'"���~�N����J�2�����o
����Dd~*�M@k|%��z����%{X>D����I���jQ���iK�K����?3���Q��8N�6�v�HH��������+�bFe%z��F�f��su����5������~������m^,�	�*a�X�
��������6&%�(f�������]w�ov�������m�K��X��ml���(�v������?�Ul�#GB\��/H��y�-���m��-�v�o�epx��T��	��g����"�v����	�H���;�a��i��}F%���O��`�yvW0b��c}
L�p�`���
�Y�U�C�u/2l�7t0�Y[��?���4�yxF�}q*2��0!����q�\��p�2l�*~�l����c�}�n9&e�T@�-�4_n��9��=��I	��I��n�S���:Qf�gTPA�����93_,����N�*��?0pf����`��?��"Z�	%}�Y��W������l'��6��e����'%��*N�YX�V��w�])��c��@	*Ag���0^�>���^"���sA%���Z�a*���q��5O�|t\��x�16y���/'�Y�|�����$�b�����[���&�|�hS{Q�)5;v|A�B��0$!��"4���w��{:�QV�@��k�UB�uM��lVtA�����B�wax�������1#|�i����,���P�����IV���C81�����u����=6$����c=u�2�	��kU+�(�u�:Ih���Vo�T��
��8$R���"�������E�SmJ+��`y#��~���fS���%%`�]��[q*w������{:
��������G��"�j�u��.[0{��5'��H_�|ooJ>��5����~�2�^�c]�{��gu�7�������<L�QD����+����V�eo~�h�X�N����G��F�9�7[� }���_ts�x��L��=�^�c�wa
���Q�f+�g�\�U�������Ti�0�P�x�����u�(WD�7�M�=(�%����E�<��a����0��z~C����������m��gh�4�?�K����mC�t��0����:Q�h���D�Os��tG��*��D���XA0�����>���#������'���p��\����eg$��� �>���������#����I�a�2|��<
�?P��U%�A���F*�/7������V��x���L�xeF6�x%��,����xeF���+��9���DDFW�u�K1Z�fX��h%�VfT��J����he"�9W.�=
V�k����r������&��-z���{��A*�w3�&+��4����=��,�3x7#n��i�PsF�2��t����]�80��	x�i!|�m����h��m�d��H�����
2��Q�*��;r��D����gr���D�
Q�wS+��j
���H8����� ��8��D�[}x�1bxp��
F{��*�q'15�wE�W{��I��6�t�N$$�u����(����;=�7��>[�aIX����i�b4��(��&���Y���y��Z^�����Yo"�t�����1G�H|Fk�z�CoF%���f��-�,;���
��_�J)���R|=���{�o�6�G��3����9��qG��j�X���)������O���$�L�K�����
'R�]���UosFd��������kj��E�2����������U.Lse{���6�e�=��+nj7�re�"9�2'ta�7��
�	z�������P��J���������Y���c�	��~��2�P��(.��+8<���uV�?���H�7 |Q����\bJ����i&��2��n�����:#���~����w!�D������:���
���n��i�����
A.s�t��yCp}a�}"�������>�����zI�	��,�������C8��E��+,��2�H���XHv���*��z�K�T�&�������BW2F5�ceb��%�7w�Lv����v9�h?�����l�3�v}��W;<�n����`��x8�5X���Tq����/�j=�a��c�+S���a�\�����U�*x�}"�,������&P�������`@��!?�-T���	H���3�UK~�u#O���x(Q���F\�X����{r�&��nq)�a�QwM,��1���X���r���N>�������A`4
�O!��A<��j
������%��|��i&|�Y�n&l-�'�?Axju-A��#�1tg���'��JN���/��t'�9������g�� ��%��2_���zC��f�14�w��}mi����=+p�}b�{�H����{�b�������_NN���
�_O�)��6�up��3�i��(�bk�pM�A����jJ�#�m�w;�Hc�p�g(���Djr ���V�j��T�u��\bJ���x��{��|,�)���$����k�]�v�z���Y�\���<H�����CgeJ<8�D'OG��A�i��t[f�� �kd�sV0'cu�%8XdeJ��U
����M��f�/>�L��0��l����b�%C�iy@%6��A�t���"�����L���_�����p5��YI��8k�����w�����D�tQ��Q����9w�a���������[��J�(B�
K
�3������)q/Q�E���v{."���aI��B��:��V��.��a��;�����=J?�����PB����*�8��p���>��r(����@��R �&&���K��9%������m|9�SrZkg����2��HA�����H�������pD"�a��	i8/g�n�����O���)�>���E2@����T�V�/O����E��3%�����v�c��R���>�JeT@l��?e�XL�-�[��CQ4�4<�������K��heep���F��f�V"b+T��nrZr���y2Z\#o���ywl
v{��h�
���j��.,��X���6j�p�	e�~�\U"[;��-���VA��
K,/�!�����2�z�4�:rc�0%>����Z���`~���X�r�=NBOrb�d�K@�3!����O��>�����%R��&��-Q+S��	�y.��f���Ck�	[�������rML��[��/�-�	����	�Y�?fE��� �(_'���-��Lf�����<��@��t���k����^���X����7����FG�~aJ�'\v����i�i���+'p��m��.�D]�����(�{y��L>r���0#p��p$� �v3����1-8C|���]�.����'�]vt��v����n���i�����Dc���h�&K��M.�r�o��Ocj�x*3?�3�����|��U/m2�'�<������MO�fZDW��Y&��s �(�1�
9��!����yX��
+�mh�������"���~:�R��A}�yx?Q �)~�<����!���[�X+7j�o�.�z��t����$*_CQ����;p��#�1�s,�9=���p���r0v�LS�?�g����CGr;7D��L}���M�'����f��9���,�M!�6��&2�'�i0��E0����f���E1�������w;8uq����u��cU��n������xYw�D��W
#RH�Os��M����I�H�6��O���/?�F�/���@v���9t2��E��!�L����7�������p�,3k@��}:L���LD�|�c���{����<����;�}��5gB$V�������*(="t��=�6��P��S�gU����� l?F8t�,���	5v�'������mT�VX�����J�Q��}C�q��u$�������:����{.��,�Q��n�v��CE�1�	Q[���C�?-k\���VIj7�d���]S��L���P���q67��c������W�M%�q��P��j/���t6��+C��{��6G���e�J���i���<(���}e�{�N�U��(x�� �����~���cdf�uzW�I:O]ZF�����y��X"�����m{��Hd�Dd^�"�� c�F�*=�L� #�_X�H�@B�i=~D]C !���x����7����&O���O�F?R����v�O�!�L����F����
����i/:F>o��O�Ov���u�a����[��)�1���57_d�)�Q��������Q!�
�O�
'%<���P�e���*"�@������o�5�A]�!�1�y��n�V�����"��$0d��gzg��OQ��G�6��
��}����?�!�S�b�Bi��S������=>���=�$�W�J>�0~��,pD	�;�>������o�j�OS����P]�
l����Y$�)��~P��/�8��������}������0x����Z�=F?��7���\d��g�u�`�5&��������U���L������"����x^����'|LF?(�����$���5h�;6�����p���0n�R������nC�z���|�A}:o��M���dd`���;{*k�����b�G�H[�-V���/��h�N�e+�l���
��?f=��,n"'�X%88�6DW|�K;�n���K~�U�w�1mk�j3t+���P�M���5H>��XF(����e�iUb���:p7���������`�����A�-H�#.�����Z"^���f���.��a��;dR�8��}�G�
���-^���)DZ$m�Xb 8�
��Ez��V>�7I�OQ���5�&����K�v.�pS�����z���`���6.���&u�C�/s>l���-D|�C�5���9dZ"��E�l��C
�0<���b��7��6��CH�:�����W������>x��	�ya���n��Q��g���a{L#�����dMz����t���3�.<��Ae�Ls�����OOa���Ja�8E'�a�8H3`�*���<l����d�z�''"p�Y���3�	��t>�<�H����6��-'���z�$D��%}#}���PLjU����:���H:�A�
��R��Q��iP}�k�H<1��M�{�X3��L�	�G���&D(eK�wqW�����^�����"�9Ia^<�o\h��7�7&/n*����O��*�$="T��""#�1N��b���E���).�-����-�p�$K'�wT�i�[�����sGf�_�U�9��a��9/����J�j��G'��6�dG1�����\��T�N��L��_X s�4������7���������u�\��L��d��B����!��h��0!<�."����4A�v6p��%��	���8�Q)��a�}��X�~��>.��f()u����ll�!NH5��fsem�R�����	D=��k��hn_p\|^{j�YL�
}u�=�����+����s��+!>S%���7g����}i$�<�!���"Q�|���y.$Y����`�3j b���Ls�@��v'R�d�'{_���m���Y��9��f��H������`5E�\�|E�z��s� ����d�0'�������C�	$�����{o�
����i.����)�d���](S����'�d�`���a>=���/>[eBn�>�&�����X0��,|0�:h��y�$p7��'+G�<�����0�	��0���l����b�+C����\[�e���a�)��F�t1�l��3#X�c0��}F�
��M�3u�)��2��m����s��PTs�����������������@e�8p�a��y���t�X�*�N��XX��E4��$��e���u�P�HC�r�T)lJBAE!���M����C�E6����1���8 �������e���00�1b>��3���<��1��2�����haR)c�z��@�����s��,�Sg;0�[O��e~y�*��/�}B!�7��oT��y$����YpB:-iM��t:k��y��TG1��=��������<�����X��Kcw������`���`"S�9�NB0(�lS�����D��5S�,���������/,�;��0�8����2��M�������%T��`04�*�F���`n���ey<(�\63��3�C��z��'WJzoZ����e:���}�!��B4(�Cs������i4(�M���$Uf�'�`$��-�Z$(��Q�kO�� ���w����L��,;���=�M�A��>������b���q�����80�L0�v��^d6Z� |�O��<���E����F������]��]nx��b���c h;��6<�k3��!�{g�C���%�r���b�<��SE���N[��������y���%g�����?f�5�������8CL����h~^�e.};x�����p���!Qe����	�J>�0��V<�+�b �+[�	�B��}`���S�������
;k��Y�����P ���z:��Q|	F(S�aHA�M��A���xx��IM���f<z���������M��@D~F�i�-Y��0y�I]��l����W��{i���*�In��)hG��c�z�������>�4o�C������5xT����g�|�xv�L��M�r���6��AcNz�[=&�����o]����2��J�iK�/����"��S#�GW
eD��j;9)~�q%��������x�O�u�Q����=b������|J7����n8�������g�zna�6�)��n@���cjV���C��`s!-3�����%��4�0.]�SP�q�.��j�(%�b�a�>��Pw^7>�����,'��l�����R�!�H��\C+h��+'�B�`\6�����R�a���(��
TIU���$Lwu��V5�X�����W������!O��������L�Q�[EI>t:��L�J�������-�N����guq�Z
����Zc*lT�DBL#�K�n<$������������~���j����j�2��^DA���j�/5��m/���u��N�,���tXn���Cu`_�����\���Z��:�i�6��m�NO:��k@�M�j��"�K�86��n��-1�uv�j�=���D��M�tdn}k*��h��S���0��8��.C��	���������������\P���J�X����0T'{�i�NQ�����r��]�*�6T'm�n#��_M��20�2�nUB
�����"��7N�-U(��8���5z=�M�����(�6v�������iDW�������y3�j�a�4�l5��1��_v�(km�m�.�@�UYx!��M�����U�Z<V�����=� Q�1:1������|L$��|+{��F�����������W��w�
���9G��r����
�����)\9]��|��r��H������D�����{����{x�;_B�n����+����w�������N���h��W��.����)��e'�X�*��:�lW�:�x�TF?����=�����e
��R�+^K�����@S���������������5���}����XG�_�������&�E?�<����_���������~|���?���������w^_�������������g�wY~�
\������-�U�M��\p_��d����9�����e�7�?���Y�3p�������2A����-�\x����"YF}���{#o��"�>���)���Gv����?r(���������$#8Bn��>xS$2�Bv�]
�N�s�)-��o�]�vv��'?�:�m`�g��%�!b�;s���?�,�~����]'���.|������������L������Rp�O
,x�d�9�s�M����&i��%����%C�hTZE�`�{����u��P�Ld�H"�l��m�5��cf�PG" y��JZZ;�AZ��4�������Q�8�1�QE���IUl���K�T�H�@��rp�����0�Q��H���L�<���q�[EI��g��`96����������p
m!Is��97|��������S��Y�����1����XQs.���c6+y��|s��s��B�uO!��5`@��&$�� {�k�=T�'W�d�Th������	`��
��h�I�X4���Y�vq�g"	U����`,���/����[o�����N���u)��7FP�B�>��?��]kV�?��"z8�l�-)K�w��ff��;��F��<�D�V_��6��o0�� ��� ���5?�����/���KP�S>�"�b�L��=��6b�<q�BeR-����A�ROj:�V�/9�Mz���SEd#�[&�/��w��&p�_BM}��3�B��m����Q$"O���p��}i�P�xu���v;g�:LbA(��?*����u+z�� �!�d���|������
�m:��j�z�c����;V���}S8�Wga��Z�U��f �%k���]��BA�qp1'-���OE"���O��^����v����9Z�-}�������h�.��MH5��o�� 
���B�k��������hB]�U(���������*���+I��O�YH���nx��j�� "�)�������C)�u/���e����.��M���LV%�"�����+	_�W�������s<�c��xB��Jx�bBE�s��1��X:���)�A�����.e��PCqHA�}����x���f�MW		���3j����p�r��;�y�c�B�<�EH$��^��S"�����p�>P��
H���26 ���������tP��&�������)��vF����u�c�:1���2�C�8�s")���J:�b�������r9W;��U���@N�s�����s�����k��kh����$/N[��o�������X�����;��L�}^L���ke���c0d�"���^rzbM����)!A�$p9�EY�!�9Z�tY��y��qQ��R��*���t�-`I�5�(v&���-*[�M�(������r����L�DRN	]��l��{�pt�����C��M�Ey1��g�@5��\���Ue�&���/���}�U0[1M/+�,��1;���qV���W):�S7H�>��v���_q����m�����F���o/&e��������F����C+=5���|E�yY�.���������~�G���*-�-���2�k��f�U�4�)98��GY���������Q3��5��Y`hrf��D�T^'6x�H�
��F��=�9�?���2��4�t�����z��;2�2�Q�d�=���-�.P�(��CgL�^��Y4���qf��)SM^��z�Q!~��	�^�'^cC	%��.=�M;0C�hkh��L��%"�{��Uq�z��LFH�Zp0�E�Nq!AV���S���K��{x��}���,��Du)�m�!�����T���M��L-��7w����|x��6�C��C&����Je�%��}W���I�74��Q�����T�����T���r���C�]Q� ?rJh�r`�R�L�N�5S��26}^��^�-��3�d���'#�RE�_V�@�mY
���8��z�
r��/����q
�����H�XA�5���6-��V,�%�l���G���Y�C�b���[�����&����b���WR�"��|��l~E���f����v���[n���ln���-p�!���;�D��������F����O������/o'�_g�
��L���r�����f�7<���uy�Y;��0������Gu=�%��������'�����
U7`�n��u{���>523[��wK���t[���R���I����k������u`v���Y�`g����m��O��V�Y7:ab���*S&���3�����&M��K��(VS��)]�5$�9�4�s���~�$Kj���Y;�"���+]�������t�4]�d�����x���BX���m�)�p��
-�}3A�hQO�e/���ne��[�g��������.��V)���TIS�@4�&�jX
q����-Iph���X��$~^��
	i�8}��z|4l���$���%(	Y���#���m�����[���������y�Ug:Z�iwH����d����}�Z�����t:�����h�
Z�b+�c=��@$�<w�j�Y���G���QX���0X���g�u���L'b�o up����@D�5��QJ���(�'
�&"
|��m����y�%�p��e0Y�hi��%��Y����FwY��c���q�,��R�i�����,��$Z�rm���8�{r��Z`�nH���*���iT��i�n��q����w����\h�B\T0��nD/$�Xs0j"�<�O{3hM���wic-D���4�`��V��hn�P�8��g�%�h>/L��0��*�vj�K���~!!���R�]��-2���'��B��"q�������~�������}7\I�9��z�vlfA�=�������=���p)�%��v�����m�E$��_����p���L��/��N6��������[V"�2Y)�)��*�i��P�*��E{���9�P,��t������(qd�����y�������xd�d6�
�����96�<���2ei�l�7�5������/E�Q~�q$_����u��~!9�z�	mk�}���8*��L�*u���"����FD����C>�%�9�q�:��ex��yn>,��r�c?f�;F��4y�}	���Cw����-)������Xx6�r�����������rb���&9Q���N����L&~�N�r�{���J��7-]�;}|'��P������	��f�3Q==m���v&�s��l��+_h�3M�y�K8����%xG`�f��,��q��y���_Q�>��/g�S���t����l5��U���S'���O���::N%����1�)^fQNTB���K^�����k>>Q�j!K�m���y������U�)7��M�e�U#�'�j`DM�eO��%_q���	T�@���{W�YM}�%�;���.�3�9��p�`dF��R�����������z�+I�=�_�e����9m�#�|(^r������d��
{��<��1��H�7�����
���6,1W�!9����T}���m��m�_�[7���
���@.��a�.���A�vt.���?*E9jb33tfo&$��l��&�M3^L��Hk��%�Z��V!�f��9��R��{1��aA�'��X�"�k��?��6b!C��?�VD�Rl`�bBL�e�4�u��XY��"�%���[i"�����a���Q��!"�e�[����D���0+�7I����c�)��������@��	�����i�&�����-H�N����7/1����d��N2��(��F�<����W����X���s����^�P�
AhI����Y+;!��I�G�n��!���}��8�/�=V����~�X&���iG	T�35�W���o�o�$�i2W�%����zdvjbmz���������9K�!D8��&�c3�����n���a�%��r�p�x�F�s���l�*7�J���e����	@��q*�GQ+��n��=�[��:�>0�����Kr�,��=�,C�
�!SS�76w
����Z"�tW����m5�PH���������%�{O���r�������rt ����a�bB����>8��uo�r�������x#b�z��S>|J#���=�E�����������	���������+���V�^�~nN}�2V�!|���p�$�x��� '�����?�z���i����oD�o@G��z������v�B���K��]������<j��[Q���,A���!���	�	��PVY��*���,"�/�W��%3/vd^_�H�g5F�9��SI`M3���7��z!�)�)��/����7����������^rDhw��u
#M�/!|��w����kM�{��5��;&������X����~���J`�,>��#H�
$��E��=����)������7���N�#�g�}�7���g�77�{�K2�|���� ��>C����y�f�*so�% ���wa����T6�'�q���B�,8`��0V	��
��E�� ��	�~��5�_ZclI�$ye_t��_��2��#�u�-����������j-��6(���g�5g��9�Oo����I��&
�������!��c���"A�������QO�\��n�G�:�u�Y�u�6�v�^&�v"��9��B~0Q��iv�������%3r"e�x�r;��8�(j��O-G�euV@e�DJ/��qb\�t]�a5�uE"Q�������o�xG|���$�]CA	��Y� �X�����up?�+&�������
���o�T�V<���]�P�}k��o��+����u(���_"����{."F\��y\i���u*������Mf��w%�-nUf<E���b������X!�a��v^sZ�2��o{>i�94�x������7��Y+�@i ?�=''���u�����A�^Fy����9��P���HK8T�>����1���U�I�z6=9w��|(X�N�{�0~q���0�mnL`QQ;���@c����r���4�����7Z�>���Q���q�E�lj���y���4M�a 2"����\nR�y!�D4�s�� �g((�u�����-��PE8Zv�~���2B��t��=w��e�)��Yi:|�^L����c���N&��W7,�{B~��`�d(m��DL�y1����O��-ufh��s�=���1��"�������#B�0
����0%lE �n/�����t�7��F�*��<!*��T28Oh��;���-�t�������_���K2n��KSP�O��x$�%p�g�sOL$Fq���P@.^p���/�V�^��LY^�'0���W���������)���j���Ob8�x�_�D�y����[�����p��(T���6zn:`L�5x��*Gy&�(/�@�s��`��+�<�
��y��ICUtX/<!��$�;�� A��bJyiL�Nt���W� ��F���K��fJs�AX���W>����3x�����9��L������.f>!��k��db h:�f7�U����3]?��q�������G�-
�����^��E���0���r�P���?|���D!�"G�Os��`�_b��m�?K���D�_����S��3�(�i�~%��;���g�������	��F����DP6�M���x�����M1Y��2GHL1w�y�����f���94$GXj��$�|~�{�3�[&��`��bT��9��`}0I�Pg���8�������]��wM�#A:u.%Qs�~�W�����	_�`��b����n��4cC��7�}��x������SHZ�����i��H��Pq��^�R�75X�M�a���Q�u�((��\�%��Y/5����9.@e�b?�w�7�G_���s�uv�bJ�s(IK����������	>��`o�}����;'��Ph�;{�)R��iw=��&�������
5]87��Po�G=�
n��$~�i2|VW?��<H�.���[���4�i_��XT "�����t��j���%$@�$�U��zP�Q�����^2S��v� 8o�5Y��b���B%d"��a��b����w�TXD�����r�4V<��>�H��=��L<�J+`����o.�9Z6p�����7M��^��e����;�o~���(*Y24h���_���z���t���}3P��"�T�E��H(L!�"����V���:�=�8����F���y#t��E{8�_��%_�����/��Zc���d��.z�d�����k8�K�6~%�%����>����88BA���	j��_��G��t�g`��_�Zr����7
@<�&
,V{���(��r��*��~��b;��a�	��D������}�������|���=
'��u{z��w;�wD���(���K{�H����l,�b9��3�l�
�cc�P]��LB]vV�U7���H�CG���S;�&����F}�~sF�-GY��6���D!;wfoo��_pF:��"�"YZ����
�"Ql�u���/N"{�){F
A�Ci�nRx1������Z���u�YM���H8>A�����e���!��O�}	��*"���l�������D�k���<�Z�_\IV���:�����	��yG��y��}K���sp_HB������v��$X�����`aR�l�+���� ���6��.~�)I���3�J�MZ����%�A�;�O�+q<Z�	C��J��'$��Ap�h���r�[~d�X�,Y���':��FO|(D
;!K��~�S��#��(�K;����Xw��]k.�v�����Y��������_G����qA�_�oQ�[��}�../w���}�z�_~3N��n{���"A>�_�:~���M&M:����O�@��L?-2��"�a'��mL&b(�����z�/�#���f�~�2��`�C��ca��4�t�����yw�UMp��H��}��V���I�*��3<o�t��4GD%���wc!���i�[j���i!������d��w�l5g��/����a����HZ��b}�f�����%j~��?��-onj,��������w�L��9KI����q&�h�L�LZO������Be1��d����U<m�w�)o�k�����fZ�6���%XV�����[Q�ir$�w�����M��|rQD���Q=��q1)������X�T�6��Q�A]�F��������s��up��X���y#4��#����<\G4��Mt.(t�c��Sv��R�F��X?����X��P����.�����q����Mv���U	�O�1���|�s��I�`g-�b�����F�J�M�k#'7�ly"���H�=���%[��~��N�dY�Q�n��
I1%�8����n��������S�tq�����|��vq�C������'�-���5�����$g4X�
2{������ko:!�b��=�gb�/��,�E�DU���6U<��?r�r���G6w�8��l�|���~`��d�5�5���z`����������������o����������������Y+��H=��8�z�4r��eWPNW�'_1�r�����+ �+���z��B�2'�M�m��F ����+Dg��Le+�2Kq�+��(���$8e
��va���T��dPE���gc?(��]d2�eEq�,;���!3�^�����FM8����x!��)tv����;���*���_���Zc����J�����{8�a�.����?����#�|���"��)�z���-�� ����V��z
�����y���L�[��"��P<Z�"����cj���B]�%�e���g^z�yD<�|'�-���/��O�)9$}���r�Z��Vm*b��� 2�)H�����W����y�`!������^e
���%��"l�+)�����nLk��$�W����V��'�p��v�s�f���L�����|�-��L6��� Z��P+���-l).��
��/�V4�%����x>���� 7mm������&""��trD0�- ���\��GE��N�������n>�����b�m��-��'��3��,�����^�1�\B/3sM0ZT?���c��~����3�%KK	����E�Y����%���s'������|�~'Z�h�D!f?'����V��t�fBh���(���sSiV���
j��������H�aKV�E�*/^��������D{�hJ9x�i&K>��Pm���X���zZjSot����Ld�YU��QM��Z�}S��K��VM��t���*��PW�9'���"���=-�����t�u���~j7�	�L�Q�����Y-�a�v�K]v�Z�7�<� ��@��b����9��3�ZP�*�5����]-D��E�tM4�1fU�A�jU�r
�i��:5x��k�U��iAxEI��m�4�hZ�Z�N&�-;��.�"���F��#?�m�(7��<<���d����im��Oh��H�z��r��7�"���r�6� i��4�y�z���[�h�O��
F�9�O4�������j�.��Q�^<�'���h�������������-�q������h"����*��.����!��kv����#6~,D�4$Y�����@���)��;�1gj�`[�����Ra9����lwRP�eW��c�q���5Y�1���R��E�������j������'���>o����jw�U2������h�x��_�����g��#����Dj �b�<��^E�Adv�~��r����E��h�e���;�	��v�v��c���UN��r���va���@�:�����z��@�����N}���:_H�^f���|��[�?_HD����T��-��s��'�n��
	�)�C/p1���D~���1�g7����K��R6G�ONH�c<�`���%����V
1|e��*�=��~�GH�-�������!��6�C�����&�"�_��3������b�|�$����i��B*��2�q�t	FrUU�H����W%R����hS��UT����x�5�L���^HN�>��o��'o�dY���=;yE-�x�L�k�
U������9����F>����S�i���z��E(��������1%#hB,�%.h�-��e��C��
��%Q�������?/����^�^��'oO�]`o��~j$zF��08�R�5g�h�����w���-px�p��eK���d7���e:�BZ�`�����#�H�ie}#�~r���7%$��w|�s�[Er�,X��w�Ba��8�����;"��#:~c,�L������w�rl8o�"��m$�?��B�`�kO�`���cm�����a0
]����YG��:l&A�"#��&��]���Kf�s��E?�7��0���CA��#�[;�#$6&��~e����B��N�Y����M����"%�;o��aOD����`���73���s������S������M������d?O3�v����2�$�M�J/�"��Q��T$�C��d�
�����p���#��s���"[�����)�,�����Hp���B���:V�y#����#���M=�> ���k�RoD�-h����$�������)����T������t�������,�9�%��y�q�J�����G&=P�ax�]���V|�����]������suO�����p=*\U��U!8^<�VL=*�W�J�2�*�������3�'W*C�-��Wr��9X�d��Y�����:�8�A���3]��fr�����/��@�?�	Z���Z`Q��H��5n����p���
�>����r�f���j��h�L����P���8�V$]���5.������1�����Vp���s��!�w�d��Q_��G�s/D��c�~���<�d`�$�A�Y^��R#���7E+`���L4?z�Le�z��j������(m��z�i����(�����N����H��������p����J�\<���5�y��+Y�;;���L�*Z�q�#gq�[����l�u����YR�,��)
��?��OMuhe@e"Q��6��2�ET�9��M-ph���O��L�e>��k7�S�u�)Y�TJe�(��P�$k���Z�dbK��:pbIT&�H���z��&��BD����^���88���1�C^��5Me�L�������:���xH���$�1E����GdN�?�-�f�LT$�"/�7���*d�<g��l�2�����Ft\?o$E�Op�Wq����!Z`����9H7���G���|x6H�x�f�};���Gn����$FE��P����S�k"�_oasW
��o��e�=����sBmZ�F���s�Lw�7@?`���M�����q�I���%���P[����6;X1!���.s���%�����[
��%=&v�]'���d_I���D�Q����.�#=9@g����
�cC�,��hU�������Y� ���+�{1��Q��C��g�W$���?�q��B�O$�<��k�(�Q��5+��'Hj�mz`d M�~�����'"��*j�E5M�Y9q,��"�n���D�
��Ijk�M�#9���D�������X��_:�#��k�[���#���H�[��g���>��R�q���VY���(���	^�c*y�Z'�8�A���+_���1���[m��S��W4����8�����h���yAr0f�o����u9�K��$�,��0���OE(�]i��O�f{7���y�S���4-�f?��D�����;}�H���������Qf2��b#M���j$w�dr��,e����
�����73p���Xe�Z7sd����<h�I}T�Y�i���r�w�[���1��l��V����p��e-��=�-	��w�)�S��]�H;��z
v�_a(�����;�7�����=��J,�C�10�e��x�,�S�i�|���n����L����>y������p�������;<�/�\aB���]
O�`���y������+����"�x������Su>o�sm�����e��;#�$��&��F8e���`I�p$����{\������d ��1��sul{��l���n�N�3#y����0��S�p�0jl��9�����{��z�����*���y��l?�r����e"���P���h��V����C�O��$~q���X~A����y�L�t��pP��xgbC�?��H4�������u5��9�'@����&a�7-���d����T���62V���
��U����L��������UN(�N��;������e�9�zTqA�C��������n/4B�T��]M!����������5��0;���X�T��H�e����x&;��)�����*��Crx4�uM���Q�IMn�,�9����U�������52�
2*j�����y�p&ol������c^��F]:��
�6���t���f�q��S�jj%?tZ����I������m�j��Q�����x�j��_G8#9~�;������/���G�.�����Lxp�f����LK�A����� Hl�}�5$:����������s����t%*r����Z~A.Q�'����5 .���������V-di���_Le�����O'���Xom�������M�t<S|����,��}�O�v��8���)s9��j{C��u�7=-$���k�M�������\�����Hi�>���["����-Y[��.����,��$&d)���&I�q��MV/�.�B&��9�4m���0��L��#���s�z_b�G�p����|I*�����9#0�V�����pb8\F�2.�^P����F�>�@�~�����+��-*���,���M��5����oM���]v��\<��CV��n�t�(��ge�w�j������2D}\{�fB�]��c}����~h&l�N�����;
S��	��3��<��ui����<e-X|(�4����;#Tx���SClD�/�S�,��Or��>R��Bg��I��)^�Q{�X32>oV�A�y:����hc�4��
1���85qU�To��B$�]�&��G9}��4��7\�r��5|�<9�.�5��A���UP����$��9��w�������� ���7�"I
z�a�?cKI
?8�1?�������=���������������f�n&���v��l�3�~�������kw������g�����{��^�����~�?���1���������-�����W�>��g������g���L3�y�����Tk���I�1�������;�Y���3����#��(��R!�?�T���O|����Z�2;��
�����WH������g����i�������1�]����!�����Z�=�o���������G�:�����{-������C��w�����?j�G.����q��g���?���@VdK
1��3�������������';���K>�[�=�*������j���n�Z7�V�Jg�D2������ 3�����{��^�n��t1��-��b����~�����o��f�O�����.����?]�7{��������[�?��������'#�������.�������';�?��g�_������Gn��~�h_�1f���b��y���E���1��e�b����,���Y�-;�h[�-f���Z��i���E��c1��e�b�n�,���Y�+;�hW�)f���R��Y���E����>9v��P�_��u�B��<��P���
�{���Ca��<8��\�^K�����|����}��3�������'"8���A��,J.��������vH�h��	b_�����kk��%��T��1?Ddd���$���"�G4��{�$�]�L�;A$��"��R����$20�O������*�$����^���C�+�8�
��~B&���!�V�5w���	������^�dK�(��k��1�^
r�M�� rj��9�]I[`��C�������y��q����.�>�hc!Qm:%�y��4#K�*��{�d��Rd8�C�2�����zbN&b!�E��l�����X��Y�Vn���
���������=y�F!�D���g��"c���)���A5���O���b�����1@N��
��Z����kqhQ>�l��"b]t%C��q�6���X|'������d���X�'v�Y�4x;��*1��p�P�wj��aW�b���m�D�|�V�
C&���f���5������N��&m�I".��W�e�dC����b���J�Z�?����&Y�B�TC���"��?�xTIn�[M���M��M#��0$~��G������v��Gm�.���j�J������d�9���+��{J���u�p��u�n�r�_��U1���Ol�)�6� .uV;��h�k5����#�Y����E�l�����-�������M�H"�yd���4d��K��Qd����@\c�;�@�4��
cI�?w�qjq��;6���L;7��Xq��Nu�������Y�#�;��$�����:��dy`����
�2�dy�UC����x�v���'����7�w�wvGDq��L@�������"��������E^f���y���`��I��a�|<r���� ����/�d���DJ� ���*Q������1z$��3v
�����5f5���U%��m`/�� ��8]���lM0���
�����������|�A���K���=e��"�1��%����TK����]���T7yn���I����,O��JL>7Q����Ie��"\m-������;�U�{�`n��S'IV�����[0m������j]�]�4G��m;��I�C�?/2.��������`�w��"	��s����:���QK7�����L�1Dz��� �n�/��|#;����.�:{GW��Hd>a�A��g��j/�o��)�����(���/^�L�.`n���������"C����Gy������[5JvC1�Q���p�\D��9$�M���*�e*`��� J:@�X����H;�Ug�^U<�C���4�����S��6/�A�Q�}��wPu����~����?A���`�-��Y�V������=��A���h?G�Y'#�<��'���������H�����	�DuN#�B]d���A2�3Jr�Gho�l�"	��%c��s�O%�D~������G$�y��$�k�Uc��\@����H�v�I�O7�����t��]��t*�h!�:�Fb�?�4a����|k�������|��%��GYK!G�f�����B���s�v9����
2T�0��E/����xh��9��'"�0I��O����%��\x�z ���L���.~
���g7�=�$�'�����4n�R��M�.)��~��v���j��@N��Q$28d�C���U��S����d�3����y��z$��C=�|Nd`f��|�q���������S�����_��!u��_�|B]C%Q�	=��?E^-�r��o�o�%�/��?2Ms�a�x��1]��{������28}����(0q�h�c@�A�!�v����;�A��������M&d."P�j�FG �W9�4G�>b�%��/�4fg�qb��m{�h�s��{<G�d�1
,Q����@����!���a�uP��dl@�
�O�7�1���^��Y�!"m���ya�L�����F{����~#����s�����Nd`E��LvS�y�]$��_d`����M���
^�h��j���
0����������
��f�a��3h��_2�Y�LT�����#�,��`�<��q�t9�`	}����;_B��-��}!fp0%b3{�)�u�l�\��S���N�����$Y)?�E�����IjI�d�i�a�V�5u�D�doZ�]=�VP�]�}5�dA@�`QU����V�<pp7Is���j������4��Z�r��8���\^:8��'�	��L�������5r�� ��%7�#g����5�r��������q��������0%`�>��l�l��E&�� �}`DF���%���q�M��S�4�"�����1Jubi��q�����X"&��S��>���'\�2I�����{��H��paM��>j&^db1L���4"��.&��ot���kDDz����,�����+1:��V�����`~��������j{2��dDw�kk
MH������g0}9�������Xga����Q^��I��+���{�5+��s���>���]�1�
tQc��?�>��3h����;�������(��8��r2�������:��2hK�p�)]����\�[����.�l_(���^
J\�d�������7,e�my��:����_[��}y���f��>����}���I��'f�[E�Z�������b���8��N�M��P����"w�AM>���u���.�*�P[�0�l�Z�L�q���(5����T�����a~��R�����6U����m^N��f�?/5p���whC������`��Zm�v������az2B?�/�:�BVa&����q���K�����/��Z@b9���d��f�_H>���;���.(�b���n�?H�N�-n����Ufn��{���E�=)���v���47�����)/`���X
,�YZ0� D���M���;��%}���EembU���?�My!D^6� ���>G2/��Y��������Z�<��]47c��F��',�BF"_���'L�{�����}c+Y���"��<w�1�����K0mT[t� �����5W��m����$����?5�F��I��"Y����)=��EE��sg��|!D_je�$���,���>>���J�����&"�
6��B�:{�����y1<f�.Y�l��t&{Ex����,��G����"IgYl 7�������{����fwX0��E�"l�O����{�K8!b��}bh���$��`N��'���|7NE��D�7�L�n���Fu�D��hJ�N`���'2����E����.�G��.`�M����Tv}��$_�������KKd�Q>8	x�&�@���!rF�xg�f^sL���~�����y?0	���O@3���FWw��<��t[w�`j=����D����l|�����bR����f�����S��~!4u�@v6j�~"�),/$�a��
�W�����)D��.[�^��>/&�`��:����
��$2����{J��=�b��@S{��+�;rfW������J+���'��@���=D��.p�u�{���������j5��-�����}���������W��eA��n������=y��n�����,]t�9T��{��ou�����e r�����;��^`�L�un|�I0
>o�*�� �`
�BB#^�#�-Z@���K�]�')d��Vv��Q"
�&W�,y����z(M���?��i�-^�h�
�D��Je	H����x��0�g���iN,\)d��j�C�h%#�6�O���T��he=v�r!Z)D
g����`���lnN)��!_������5�h���`��X�w-��Vf�2�U>o��2{o�X^�����s�AO�g�!{���|��K����=$�*Z����{t���*
�I��X�����H�m���d2�WQ[�Tw
t��3	,���������D����vE@[5�����t�����$�38�9����[Rx�dF�sx-p��
F{��(�~$15���^���{N&
<�W���=����(����35�WH���R��x�rxI|b6��(��
p�,[l@��"��&�%V|&l���2X��)u(�<h9<2C�H�G�x��	�$^A-�'�xEaK3K���;�����E����\����E�8�;�w��;!8�/��hM/����`�_H�.�"�u�_I���z'3�	@u�cI�t��w���h���d�=���hK������7[?���e!x�y�e;������~�m'f*��&J�9�R���%�6���{Q���d����)�c<����d����4���?.���/j�O��@W�V^HV)���exc �Q�D"c���/�Y��p���<�M�,Y�����������*Ys0�W*(��Sd�`V"����^|U�s�����\�����|��!-����$���Z�z 3D����j�L�,��`����#��
�OM�j2�������(c��NG�P�d
,�'��:�x���n���!���)@���U���c�J��q�P����]���x��=�����4������w*���hK:����+j�H
|=;�h��%�L����{\�>O���^
�+�[���@cA�������$�-�m_��r�j�(���e~fX�B�	Y�G����,�c��_u�X�t��i�n�����V4r�6��$8Q��N��c���V�Hy�4?M��%�q"��G�e\Z��M#)�y�S�L���H
g��A�o��
:���<��Lx%���&���e��g`d�l��d��<l��ukS�
�d��M�9O�MW��
���(��6)1Q��?e��+�F@�p!NA��I����z�M�[���B�4�R��(D��7��B������]���-��.�icW\{�����i0~�����������nm�K�2��sF�U�}� �pkVW��WB����������_��p������X����9c�8�h����(���/���B��[������V�����l�"t��yp��B���|��Y��;�JD�'����v�$+@?/&��g
�t*jBn�g*Ki"�V������6�|����;�(Z����&m�}�+�_d��a���A[t���h�M�V���E�Z���q����d,	��E���^�CnT�j����s�s'?��Ec�c�c�?�uRh
�4:��5���'�(����9T\�+����	]���U,
)�Bz	e�=D[
\���i�L��p���H�V�t-p�u5��]���,k��������Y�����w���Mu@�!�5��f}px����)@�q�g�����l�#��v������~���&pK� 6�P���1�-04{�yS��K�8�m���=�?Yl�����#}���j�1���C�H�t���
�����+���S�����wZ��Z�(��M���&��@������~�]E�1�,��(��"��2�����|�	��Hd������������
������n�� /��N,�!��PV~#������|�U����<~*XK��=�N�U���,j��(j�_�hX%5�
q�?�#:���X��m	��yXFV�����
cui�!�N��*��a�;[F�c@/4t�V�hy��;O#�x������~����S����GA�$$Up�!%�;u%N{���e�Kwm�	����:'��-b�`�������Z��I?�0�-���6TQ*#@EaF���Q����u�?F����:���� i���	����\���-�Y��jm/�������������h�����s�x!wR��^%����,��������F>��3�&�sy�Ro��_�MW	�����z��b2f3n*un�M���Z@X������!�9����;�������% +�Y|�R!K���Sjs�����3�LB�i=u�=�,i�915��j!�����2�Is�^LJ'������i��V����������n��Aq��	�|��J�`��F����\b�_��i������X�5i`���'3�J�B��'��S������>���OQ�H_m���'s������#&����{��@���OT�SC#����/��Uy�G6w���B�U��$U�m�*
`3�������>{oJ�
���$O��Z��V-H.2�Mf�EK����O�Mi�[����s�����&�]�4����c=���+HB��"`_��Y>�S��q/"D8;�f�
�h������E��"�%O���k���ZE�qY��K+hb��������~Ik(�e�/���xn��M�Y\f��'����-?uZQ����e���-~Ma�[��������S�����I�w�V�	0�5HS
�&�����4����������d�&����k~�]	i�SjBL��3�YSe��t���~���8Ps&��!�n��
:�_{����f���d�V��tE���W>��J�"�P�2fY�*��=�eOP��hK32lTV���-/��j2r]�T���0�	�Xb�4�K(�����<�DH,Q��D
lG
$Y �������$�=�,�������Ud���B	)�v��0��Jv���~=�4(X������[�(��/�pQ1���cV�>��8>1�� B�Q�-������E��)z�$��!���B,�X�'��C/���Uy��k�X8 E���^z$I��2����in^��Rq{!|�(�4�0bAb!D�E�ji�,�X@v�5e��Rfb�(?1�O��~LY(�[*�d5�-�c����)hy�������B���A~zW����g��i�
zC%&?���@���R(����A�*jB���B��ba�&�B[�p@�p�
m���E�f-%�X`������,��C���FFPa�z�llW����'��1b��A����"J@4����[E������#A���E�Cj��wj����e)��e@�`�|�?Uw%|!)-�T�}������.MFm��O�������M+g\T�	�I
xq#��$�{�q���k��+�/����� w.�D��5,~���9�R��f���b��{�y����H�����>
j�g}���^`b?/"��(�T��T���F�7��p�2���
��]Q�����%�
s�30�K]���E?�(��T��?�%';�d*���LBm��S/���)���O���pn�T��0Q�G��P�������-��*2EWO����w�����n?��k>�3�vM�D"�����7�;�d���������C�]���_DbS"���T��;�j�"��>�3S*��"l,8��@7��en�y���=�k���XL������c���g8Ln��?w��eZ�������������@N"��k��@*��pwY:�[d��������5�J����r�

��N�i�!d���$�$���i@`_�B���#���y���V�$����{��
�Bd!����E��H��Om����4���?@��u�&B��D�����������@�."Z@*�KEW�j	�{!�GL(����\���$z��L� yU������984-��3AU?HZ��/����xNeF0�R�/N�������`��Y�����x��jW��mZ�~x���/���&��g��B�b�����6,eV����KCa�~*�m�����$��5qXT���<�kn9�&v&{�0����h9���r)�4�'"�1���gTM4CM�E��@;�q�IS��P<:�_�;���ldd���m���.�H.'�|����`�	[�b
�f���&�1�yx����,�@�t+E�/5)_�������E,V���}6�"���4]|�#�����E}���$��$s�����%���P{����=-L&�Fs�0���4Y*wszm��I���hH���}
������@�)��`J�t�j��8sb���`J�S��fse*���hC��� �{�[$8�=X�d��M)'L�O������EBz��V��jIo�U��$��wu�`I��s��a�f����J�	������nI��I-����$nI+�����=�D�����������PC	g���9X���&��m������a$����Q������S�����f��6����������D��hLozS6
���VC��zi���3Zu>DP��"�~#��~#��T�j��#k�Xd9�d�G��i$�&�)k6S���	�$�{1dZgDbA���]D)� J�w �h��x���D������"� �L$<1P�$-��(���@)�X�sL6�6�j}!
.��a���WE�{i`��\-C�6��C�
��(0���$���fA�n2^
���EPA�������j�9C��y�
��1�T�:�(u�T���!��
��QF=2���9�"��0j)�~�U���B�w!jW�2
�DOu
����!��:Rd
p�.*"��d.��������U�)�"
��4�-DR�G��Y$��B#)%�2�����^���IY$%	^:�`��0N,"���GiU}�(��j���m�7�8J4�q���.H�(��XOC�"2� �d�K�WR�}��P"_Y�vk���J�y�j����D#(i�g�����bQOm1I�S�P#�{MTB	��6���@ejo&!��$����?�1iQ�f_>^H<�K�gm.��5���hEA�5u������$�=��I��-��p�����Bxg\��������Qmz�>�5<=�K'�����_��R"q�!�Y����@s�}.�6z�:�Q�8������#e�"���OW3��?�v|7&���#����et?�ur2s���|{��p��}sc�-J��t��y��e2��,��rB��4���F�-�|�%��V�����Sw~���������9zG\���(�?e����Zn���T��d�������L���-e�������w��]g���|��>u��H����a(>��c�v#~���1�F�����]��4)�Xd/��pf�p��?�����L�3�qL(���:|�p%�/g�����o�0���j���[���d�j�'�^8�e
g	�"�$oJ��^�
�2u�H�8�
'����y"P�
b�y�p0��j����h�`��f�(�����zCv���~�t����Y���k�}���p����-]�$��������	qz���!�6#z0�g��:����������%���$��$���
�}��$|�A�rovrF���O�>x���?����.�p�$����j.��0���/d�	�����>8����w��J��jj ����9�*�c�UU+�q�vW�0��_�F��"D(k���F\Y3hE>��9�CY+����]OKN�t���3)����	aiHo�~��Z@x&�\�����,;������3�Vu�D��=�k�}���R*��w�X���u�A_�����I���!3J`�fn��z�f�K���h��"�!R�Y��LK�*���#���)�c�����Pe>)$��1w%>�����i"������lFH�''|�Z0�%���dBmy��8K�cw���]i�H$��DO����e����-�?�EL	���?/��)������GR��SDl�!��v�R��~|~(�B���*�|~���f�:R]?/��j�������>�O�g�D�YA��YM��L�U���p���|rH����!��s/�C�|d�uN
���l6�����<�R_2!�Ry������;����T�q9���?"���|�����h��P�-��}��
MO�m�Do��������(�UL�WM1��!����0����w�Dqb�.Y��u��^����Z������Z���E��Z�����Z������Z���������W!uO��.���q�p�:E��7��&��W�n��T������SQ��5w��~}���L��/}���\��>��-������O�������X������������O?����4�O��^�G�vADiy�F���=�����o�����������_���k���[~%��~t�w80��oFb�?o$�j��Bt��89}<�qH�\	�� �]��>��m~���C��I����"_"����V�b�DL����a8���2�$������d�Y?�[��b<�f����BV�#=8_�`-��(�q����$eQ;$���-�����D��Q�8���*@����u��I��BD?/"�8[f`�����TQ�gL:�x�
�'Y335��<h���'Tj}����R��&��@�C��[$=���#����		@���F yo(�������g�����������i60HH_�3�������,����q��������Y�&$
�����9I����|�Y;��jj���)��/���U/�uBp�o@��mFE�l��T���R���O}��w��_RN��j��'e��>^�����RG8���>��(��'j��M�:K���u3���+f���DY�7��|����c���D-X���P	l�F�I�5b%���>�w�v����mc:-n�g�q�T��LRp�����P��z�>�O������?,��%����a_H�������px����(�n�Y��I"��L�t�%@/�`��u�?z������*�^jB��7��c6��Q�V�������_)�����C?�v1�@jF�������~��[����i�����c`���t�#���������w�P?����������.�&*�PS�r�LFm"�
�X�T�i]&*���!y�8�X�W��
�4Q�g���*'�2�������NK�8�n�d�|SW���1�o:���M���e��7��sd ��t������VEi��XP��u��T8��o�q��S�f��������+6�?3Rg�k�z��"3j��;zZ���h����e��-����D	�����
Z8~5:���tASmGR�	5%���v�0�~U!)+������}����XIz��6���HS����/��[�&�D��Gn����]L�E���E�<��jv�������s
`v&"�L���l��\�/s&�kb��������}m<L=B�����;�\R���@�C����}.���R���;?���M�</;�|,Z����k@���xa�g�z���
����w�$9����JID�v�b���u���}�����
�sp'8g�%�s�r�h18P��MH���2NF�lFxD��I�T9��(�y���D�3���+Y�������7�@38�s��Pa�t>����D�3�C�dp��V%X��_��+0O#��0��PS��u[�G�3p��j�n���Xq�x�o"!3���w����.�2��\��F�`��e��[��/X��$���d=�]d��N��J��%tY��H
�	Q���Rp�#���7$�A	�+���!@%Y[L��
�Y_�+�m��r����,.�����!��m���~B�4b0M�uZ`�Sl�����^�i��M,����(�*p��ZN�	��]��i�B_�4z�X�83b�9�>��Rt��NT�>bFV�i��]gK����`+v������i�{�~z)k���(k��,�JW��<.?�����=��f��,N�+�(�U�����80��3�����:�s����"����`L�t]Y�L1{@�������
6�l���J���'���DT����w����?� �H������<���%���L�Mm��F�C�1��p��G��-�>��9L�g!��!r{D_ozT	�{�@��|�O%���K���~;1���dj`x���&�������w���>���	-3O$�VE�*�u^W��z�|�8-kS��BP��L1��;@S�JD�a�n��'U�y0u��		����{�=M�,�vw�*�]�lHK��Q�U�v,EI�R3�MG8&��b����T���?��Y��j��N����Jr=Z=�LEZ��i	���{��#N��f�u�RB�K�����(�i���X�NL�M7��`BFwD}l���)���%��7��JK-MD��X��x�����E�������^Bk8������tt6��#���E"_�����eWdQ� ��u���;m��o2�	����g$�,S���$t��xy��d���-l#zl��m��[�}o�N�_OH
f�X]o�9�EFl����hf���t�882Y�{u���>���3N�3�n|������
Uw�����u{������Anfg�q�s2���t���H�c�z�-d���,�������2;��l�bU���.��^j�9��I�XAL�*���Sf�-�I��d�->������:poS���w
��a0!=���"E��4k��v�MZ=GT�6������&�t[����l��s�3�Z���m�)�)�t�����t����w���nU������������n�bXe "2��fH@1����a�$����	,��	`��" y]8>9tc1�#g�?�G��m�93Ij�i����h�_G����	��@-�~(s�ur�>m�3j3�:��2,��S����}VN#�������yR$�������������e��'7���{T�i-���'�f�wp������"f����/��xm�'���A�u��Kl\4�q�|L��G�B�)���E�I�h����dV�n4�m:M�2�l�&@Z�|�5U�������]�q�\���q���A)i�j�a��B�?"k�N��0���^H�n��n�s�,��h�bN�5ly(��Z�~�v���*�B	�T0���A8/���b0f"�:����&�m��;��V��f�4�`�����Xl�0��Y��KE�|�X0ra������/��g�i7~OU�.O���5�'��J�XEOz
�t�����e5'C3��g&I���u���8���9�����`��$j��4�����B0��n~��4�7��Nw��io�.���>�C�A#
���)8�n&Z-;+E�G�����g"I�P��z�y�~��T.Y�)���>n�'_�=��+	���$�<{��3�g"2����[|�sz�Dug�d��l�V/=���Q��%�TX�������Y6d��w�pw���e^��G��Q]�������J��mF*�O�F$>!��$j��M<�1��I�p�f��_��A��'�,KJ2�78���������p����|�����jaN�F���k�#y��y�=��tpXv���������n�~/}����~�����%�G���Xy���Y��f82����/��nOd�[,�1��p{�	8����G�p���"�K�}������+�"�o�����+�_(&[�{L�_�-!��)v����k�^H��� ���O�Q&�ul�
G���M�&���YS�7��e��&��g�B=Pg"��m"��i+�t����,����f���F�\����tWmDOq���E�'��t�,���k�����\^UK������p�`pN����
frFZfap:�j�'IJ��M�r!{�n��9��[N�
�z.��Ddd������z���=!U"�S����
���6��PV,������Y�������sbRm&~Q�����gap�"��N��#�[?��8�9p��~��o�>4b6#y��9�Yi<���W���is�v>D-�2k�����/��f1\���h�v�*`�[��Al���[��s���FTgQ��	p]E��^V�>�#,�7#BcS���K�C=����X��%4L��Yk����������^�'��uo������������1508��� �B7��X]"{�����FE*{W��?��������^��������\R�p{!��X����bO��OH�q��&JNZz�n{_[]�S��p�}�+�X��W��"/���z��Mw=��
���c��>�d�)|���}?#��y�T��,j�.�y�n$Q�mM�G��������d�`��l��
��9B��[,w���q�Y����m������!HS�MI^a�B�l"RZ_�co���a���q��g��{����L:�����FHWI��i���x0_Q�n�Ew/�00�$w��c>�uc�L�l�	�F%-P����� ����.�\�]�
�g$@'U���������^L�a���b{,+�������n+��+I�E���/;�rf(����TG|�LP��Ynv.��Pg��
���-� )6��������~���[������C��y_�y���]���1	�e�P�n��/=v�+�K��w����nztI��gG=�|!O�m.vFO�!,���
v�}~,���rKwKk2i0�a�M����
%.�[�����������U��r^8�j J����	>3����_������+��>DA���Ae�k/L������T^����*�I��|��M2���)`/����������8��r��)+��)P����CB�����nh��z���n��*�t�^^��wb�K{&0��KN1����Q�'����p�T�#j���OQ��}B���wQ������U�*~{f�E�5�3�lz��������b��k�&�e��
9�(>���LL������qkT�3�V�l��oBz&�K��3�_��g������� Do4�VW$E q�9p�i�0����3�.����2���c�MX�bF�^���8����� ��0.=��8*:l�?�x��L�\�YN��V<LeV�GU��f�����M���!����(In��X��D��	$���K������������Q|f�K(���k+J�e�4��j��������O����\��V6dZ�C�R� ��[�M��5^"a�����8�xV33�Hs��g)O����q��.���D�=�,��Uw��4Y��� ������H��-��n�(��{y��S�7N$�z���2N�@6k�������,��.L�z�h�~f�-���MUv�\Ab��\���A+
8�V~�����#Z[G��\�zsN����M$�Z�Kon�:��8���q����%:�
�(����t�������r)J����*w�D��d�<6[�3����n�b�E_��t���
hw��)����������5,��L�-pzt���2rC��C����X���ji�C��/rK��i��~� �"�o:d������L�8���%Mo��7�����=��������M��E��.O
�7��{�>L�OR�L����;�oq����.f5	>�>0�i��w4IW@k���9&`Mw�@��q/��-�(�l���ND����3���*3\<�6hI�e��Xj�����&��i�E��n�aG.0K���_8���=}��%�3�a��k�4OZ��\k�FI
�$��n��,��%�N=�;�'��{�>�:���h�Z��\d�O�l����l��Dn:I��B�O�<����b=����l~�
�+_�������Nxr�8d�(y���r�_���"��kQ��o^�;ZA*"vQ��\��d���@y�SE*�4"�0���q9���qB�g����s/��T��(2�\H|&fRl6���1w������(���E�oKQo"����z*���Hq�&p��hY<9) �ky���0��
�,3���R�,���g�
������r����'�"FO3����H��Ad������w��/D�"�0y�KT��]A�1@�;v<�Po��P`�}u
2"��U���f Kc�����dY���B�L�t��3��g��y.�h..}�-��UD7�"���������-�6����	$q�(�	�o�?z&"��4����G��*�G����X���:�#���O�`-�������Q��n�������������|1������|�	�$��O-��d,�T���y�u�)�g"���������@I���#po�����'�!C������,�:x��������m�������S�(����e���C��Ko�%T�1;-n�5�v"��3��j�KG���]u�L����eu?��f�W�' ";*�8FZc������At3M{���1�
l�����V����w���<QZ�5&=A ���y�,^��79ey0X��EK2�q�j�9e��p�4���1O�d�WRe�A:0��v�g��W�9�6����!q�y��H_��A"a�B_�6v�F�E��M ��d;�2���,�l@dU�>H�}����lHR��Eo�����q�)�[4������7
#����O�o�$U�T-�"~L�����k�<c]��(:�������p$q6.�L�3��<tT��v���b��p2�*��2������
|f��%��\i��dQ��RT�pw��G'�e	,�UQf�J[��E<�2�.������$�]qR���7�>J�W�x$w��d�7���/�������y,��>��
��
�����}B����V��,e�LG��*�����{�LiD�^�&v��4��3��s���z��+h�l�v�.��T�@�[�:y��������b���U�4�E��z]�%��%k�Te'�dX��u��E�"��j��������WMr������3��e��(��i����zg��tfG�<�������O:}���������L����q�����Lt�F%:��/�rRk����I:c���FY���Q����:�:�Y7��B��ZP��$��n�n8�*��q��q�2���s��<�N�&N�;R���ED�����
���`U�9Z�����9H�
~�XG$1+;��@���/�<q��I�p��X'pb6�JV5�h����i��C�Q�
����vG�Jb���]�7����u�M��I+��}�n�>3����/��&:��Vw���Z�~��P%��`����F�s�~�yU����#��f�?�|��qa�_~��
�����tm[���'`&�C��x�����w&_2�y;�Md�1Z��s�oVygX��v�n�;Sm��.m�����?��>���!��������+�	s�ri�3��������n_
����uI@��u����3��=��:��&&�D�����]��g��t'�[,�PIT
���O U�����M�������3������9�rb>xGT}��+,l��CV��Nx!E%��-��?�T��n�!I*�C�BG������E����V`�RV������i����M l���a���v��D�,�8>�e?��3����w���w�v(��0@+�Z>�i�_���1O��L�o�,1��;���:���%[�Y|fp�m��v4��4���@A,F����������)9K���h4��q���9�1Ufk��	nz&��k�B�v������XX��'U6�V�V�����>/;L|"[�@���@��C��~CA��������<L^��3��q�g��t��$*[�^��,
������5�v$F����-?�G���~%����iC�eN���/�6������_�������?�_���������lv	���z\!j�U\_�%_���o�\�F�.�����m/�7K��	P��Y�����F	`��]���\�����4�������aL|f ���[�\�MH��w�rO�z]����?JHe�&�����0�2��Dd���:U=yD�U��F	`�>U�u/r�H�
���F�����=��	�LC.��H��uC��0��%=_���y���m��)�=����&"y'SB@��Bt��D���3��nBR+z���1��������)�;X���s�*B�G�F_8�:�q__a��*�SjU��'�R���|k�e�~ur'�r{��	�th4���+��Of5!��u�a����I��o����h?m��1U`������7��ET�o6a�����5;0��T�����1t'�HU�q�3�ER�����4�<|nk��	�6��G�&��e�z��7�8R���	i.�5R8{���	YB����}h�"��?�e
cV���Y��&�����$�A�$d��L�@�i��r�Q�G������4]��rCz�QLj�lr��I�~?��|>�Z2�������W:��k"-�����I�Dd����<
$YT������4�:�I�dY~���`��L�A��*W�Sdq�	{:!���lO\��eBI�=���lN+���wo��^�fk:!��n���G������u�|�dM+�:h#�)N�Lm��fz
3�?����1�I�aLx�1e���������*�i�n��Y��"�>��0�j��a��43��
����Q�����k�U�6u"�����6�Z�s�H�"��6��@H&u"��m�#U�bSf����Li�Z��{6��&�:�j]QY�v���ND�a�k��7XJ��eU�Y�t�����e���L�zq'�	��vX���d���Hk��:S��P�"���W���dXg��S5��#�K�e���S	���q*P�:�aW���^�����d��a��
"���h;��M��:De��[�����5���V��������I����5�*z��jS��M���:;����SG-Ljh)�NV-F~�I�����L"�:��A������M���+x�;1S\���U�a�v����z*�������@J��hJ?>$^'���L�>+D��.TRD�s��s�-�`%�ri�+MB�U����ya��;j��c�@�w���N%"�XN��8��s��<���A��m�/j$����7��Q���*����&F����j�9$4E�����!m�G[��o���fW��
4��{S����#,��	T3Y��p	��7���Ac�'d�*Y��>Z�
���G:�^��F��
����6��{�8�/��-!�u� }�O~V%���z��E�t�mIG</��K���#Zv�*��_	��PV�{w�����M���5���#�����1�Io�Zv�3��0�^�_\^����FAH5��t����L���f[���*P�Z�}Ez���NJ�um*H�$�������#*��~iW�P�&UA��$Q���	Aj�5����FPg��������e���e�~�G��z��1�!��!��/���,�a��I�7�2>P���:�4#�Y��7��6���j`/�>���KD��
cX��E�h�y���	`p��n����%pD�]'w��<�A����rK�T	�Y�A�<�r����:��~u��������b�OB���&����f��RU�i��uo���_v��������������������U���C�s��;5�B������F����G��B�-zT��L=*Q�Q�H���U�nc}?t�aX�R�Z�?��E��h��*�]j����o��G�W����KN��������.u&"��~���f���R���?���QT�y���K-��3����I��@q�R_H��8��������Kv��������Dup���
��>MHO��=L����&����y���>�/T"��s���S~\�f4���-�{
M���3�s�S')U��|�	�3�e6
���<�V��X��vS����a)��`Tj7wr0x�+���>oD`j����������~���W����>/�U�C<H�t�p��������n��o?�<�����2lXI	�]��p��b���OB������c���2*���,�����
J���
�����U��*��p���@ -���n�	ox���V���Zl�k���I_H��d�d���Iko�Y��W��������6�u��_������;5���J�L����Y�)XR(W5��<	���'P����g���kF(��C����3/k�`~��(���8b'��z���&�X�����+>{3�'����*�m'�����9����a��C����CG8���f�������8��_VO�r����,��}Jz�U���y3���o�o}��/�����=�M��4�I��i���1���l9n[��BZ|��p�sz7��A^��%p`��U�?�Y-'
�ea���J4���[��Ji
�K>������W�\�H�nA4���b�n�����3��a�V|�	����'����_���D�����69}�X�	�Xv���)�e6jx��s_o���h&�M.����,{"��R���GK}���L�!7���o[��3P�����Z7'��}^�f]2��H1�a��Q�~Y�v�X�+eB �f�G��iaL�}�H���k��2�����G;v������	��oB���_�0�}������D����K�9��O�����;��e4�-s?"�/�9���	}�	8��������?#�Z�iz�f�����Ww��_{���m�o���nn���@�����"�+��J��7a<���`nh�I��$Q�/W�#_�_"�J�}��;���������u�N�W������im,�JFR���4�]|}��S}�	p?�[aho����V��6_2U|��Q;���2�\r�g$����8c`��?\�`���Z�����V��B�W[�.s+�h��?���w,����k=B�����Y�o�t}����z��u��U���:�|}���u}������/H�U����\W1_�������:���u_�o��z}��/�� ��Hf��!���^��k�������� ��G�~���R�����/D�~Y{)����]�CL�G�~��:�@�u�q�PM����})�!��z!�CL�k����G-�1���&^������(�����\�SN�O�!��c-�!�����\����������[����$�t��1[��h7��������u�b� ��Q��|}-�!i_-�]�~/�K1]��}��}V�;g���v����H��r�1?���b�����|���b���1_��x]_��e����1_�n`���{70B���!��k�����R�
����(v?����w#�|�,��@��q�����~�(v?�oSC4���I��a�]��0���ib��4��?C����!~�����a�]��0���ib��4�����?
Cx������a�]��0���ib��4�����yb��E~���0��g���!~=��ib���#
C�z���0��g���!~�������s���#
C��Z��E�^���/��4��y���!~�������_s�}��)����yA�x�3�7��.v�N�e���������&����%`���N�R~^�U"����89��B�k '�l�x��Q��v �L.�B� $�>4��������l&�4�l�H��G��/��,���"����yFS�p�/�������Z��QC�\�t�d����TQ�o����_��{����P�p+�o~~��T�:��5���a��}
	������pf��|>�s�T�ON��$��1�����j����%z.e@�b���Vn�<�W.d[��
����J�}�����y��Sm.�G@��]|Z�A���x�����T�7��� �`�re��"�A��}D-�nY�2�L����w��`�]����-����n�#������3�	@a&��K�S��_&�Cm���
G��,�hB��r`����f��0�R,��&�eB�;~vJN`a�*���4�-�G���W^H����DBt�[md%��@��.~���	v$$�Z������	�����yK���`Cog&k���M���*kf�n��AZ ��6�������;�4}���w�n���r��0��?7�l���$���TK0����.'g�Nn�a�z������.�U�	g'����Z��%;���5�(��*�}��6���h;D��
'5�������LvY�w�w;z�+�^.����Fe�z���IF����n��"��OaF��� ��t$���|7�#��L�b�cT#�T�	`���������E�b�}�H��zJDg�N��;���=d`#��������Z�����Z[=��@q}���T�����;��s���y����r����nl.�H�`��������@�[�U0�������#���s��i[�W2;��@fXd�B��Z&^�YO�]o]u��r���HG���}5J�evLe���O<��e��Y����M�`�&X�T�\��z�]z#'�Zd����3�?����Jo�����7��~���;�h����D;���pp�D��)����|n�0�t3�U���Nv���0~�V3gXo��7����;|�b����Q�V��<���rG~�~}[y8�{8�!�v����D��:~��aH�\�D���������'�:���������l��������3����?����U -P�����;�V�D�8�u��G����uO�����T�a��p�C������Z��.P��J�E��K"��O2��h
�I�� ����+���� '�'��Yu?������b�����$Z�����]�}�F�-�>H��fTL��8������!2uKue	�@g�<o��*A����'y��;D-�==p��Y|�?����t|I��x������3�����D3��/�_��c~�s�������jy���t��`��w�v����o(0Gg*�6�(����M�)�� N��Di����\��qVn��X�:U�pgJPs���#M~l	<o��,��Pb��L|8��8�
�=�G�W�L����x��T�����-�o����`z����D�A�������n�V��W����8(#t\�}0��b���E4�����f�o:�>���<���Kv��6X�v�>Q0�P����n�;�8+oE��BD�S��-�����"4r�������z�����s�������7Uz�A�x���dr�>/�����rG���b ���J:�/e�j���qB�V����4�y9Z�ZM�������F�q�9$B��qX�LR������������+�n�����u����1;G��C�F7���^�	�!?/b.e��
 ��L|�'��T���5x�`�&{��:}��I(��)'4��������&�[4S �z�F$��������,;��9X���t��9�L���[���L�e���LH}����_�r��D���3m�Ug���b��[lS��e�$��>CP:���HV�gf"��y#-���c�P�
�W\�-��\�>���� ����b.[��J`��nE[����4H|Dd�}l�^}VkB�����_q�����^H����b��\k����������� j��nm��U����r�>�� �����<�e��d_&[�g�C��`s"P�� ����nW���M����D��&��s��u�������q����|`M���u���`���g����R7�
�h�z6���1�_�u
�3��V������y)��$�G�pV��G��U4I�A�=f%�UU�������^���H�s�����v�����9qn���Zp����B0��!i��9���'Y�Yd
#�<�Z��{3&�`*��a���e�9�5�}���J5H�BnQIO�����a���/�a\���,6$��z�����i#3�g��6A����]�Y<�}��G����(���7[
q����$���&	����){������@�����{�k�.VF%"�U����D�x$���Ye��D�d�K��L�NBh�Y�(�D�|jK�C����?DKvQ��:�=\dN$(i����l��(��FR��X;�\wf����v&�8��t����6#�1��wb�m�w���T��h�<8��	RO6Y8���'<����b^��v[��_i9��_%]�u�J���~���Y��w3��B	��Pk�����X.������������>{��/t,8�L����28GyB*c�M���b���Pr�ew���\�I?��M�3#-U����b�_�[�#���%f�f"r_�������������Y�~����O�Q��;�e(L�LDF`�l��	a�g"U�uC�����gF*��)3|X��IH�������m�����iO�Y�	eY�N�gf�>-��4|=�%a�_�XFX�Qt����b
|$f��(��3j�@��]� g�����Zv����������UWs4�U�Q�W5���jr�Y�%���$����/t�#)M���.�loV��|z�9�B���
6�T	������;�&�x,�BE*_�q�`���B�%�c��B�'r0-�5O>\���-Xcl��A�c�?�|M(F['��"���?-lH��v��s�������M�~�}��6��U�Nv�7+�kP�c��UA,uM��x�}!�%�������������4����^s�NU:>a�T����d���m��3t���.G�lv���7�����'so'��N��"�xA&� ��������'bbI�p������Fp�t!(�������7�^�D�����fRd>��?:Z���v�neP���
�J����x��0x�@DVe@��y�To���yL������������{��P:f��j�E��W�`2
�r��lm�v����	%�>�,I��[R;�H5������]���^L��F��@3�2u����,��0�h�'Sd'b��^H�sw�\:`�S�(?/��I����=/�3���l+�g��+>��R�x��.�	��3)A3{���+�;�o7�M�=(�%~����{�{��A�~�Bx�������z�B�����y��Zu�q�����F_s������R���H��E�l���D�O�a���tG��>�Z�r���P
� ��1~s	�}%��?8���'�������p)�����������\���K��Kr��G$@W�K^�K�I&"����j�'��*�9q;w�����\�z�M�����X�����H��W20ef���ueF0#����hN�]����j�7{(���p��}<�V2��2�V�z+�����2-�+�^����9�\>�~��G�/�[���w3J���q`g\��MH�3[�q�i����qI�*�x1�w3�MG"�
5g������=x7���H����w�6�FkF	0�7Fx2�U����T*��L�f���
��t��3���������1��!@a�C�����?9m�"��f�e������U b4o
�����������mS��^W�J�E,��y#���#x���M,��	p�n[������^<�Bx��q����s������9�u�bxSpmUv����A_-�����7�g"�tS�R`k���9RE��ho4���P��� ����������Gi��������_��J�=J�����,�c��� ,_�<�i�����0�/$���]6��q%Q�$��:�|`I����S��cBW�3��8�)���c��X#��[B]N�����f���^��m���a��f��JivnY�#Y�49�^l|�B����8���3�?M�{)�w�����������c6Zy!������H�o���l������43��4'�:F�����(L��O���6cB�A����&T��/<80g���C����l
Z��%*O�B��/�L>�������
��_���h����V�R	��2D�_���Qr4\�����39�����,c�?H�o�������I������Q��*8�	X�z�!�/��1K(]�&�J�}4��Z<[Hx��Z(�<���(���a3��;f��#���e�{y,����LD><C��{\�>GD����|(� ��,���0}�A��S��9�0�vQ��{��u�, �~4��z���6�_
�X�������#���p��b6�a�����#E�c��A#J�K�1
a*����?j-��j��4�����~h�>H���6�
���P�q��O��^#>�����l��G�o���0&���@[��]����	��P_s���>8����FD�O���z����?e��+�FB����Y�a�����qoy�/	��w{!)��@���Z����y!�*,	p��X��������;m���^79(�����_��M�=k7��~��/���,6���E���Q��H��L�w�2"Q`�����a@����B�`���i�&���_(�C�|�kG�g$ ��ykab���Y�Hd_*	`+RO�N6�����?�u��y����-(;~�-�n�~^L����89`�QS2l��v�������@>y�Y �&�3��b�)�M��2A���3�]F[Z����E��M�$T��i�"�����tgk*��m#/�jK��h�������|����/Y���>j!M�M�^[��T�e|��/Pa�2P�!�	q���k�/2B�^���^��a�}�/$�Ge�jy
�90D"r�
���w�*=���ebU�TpYn
�_���R^m���D�i�Q��%`���CT=�Qc�6�����V���{��<d|V
pk��BB%����_H�f���?*SBQ���+�$���&�'����h�8V��L����`����O���
�
�����+�
��K������$��Z�,�%�Y �
Hu����M�7�qs�6��}/�-bh&�lh��Q�b����n3e$(���������b
����b��@����64!�5-��*����7��ft5������|,[wo�v6���������&����UC�m"!b�Gu��8>!�m�C&$���S����oo�*�����[|�T�m)��*Q����B�X6�Ubs@/t���R�����0��o�) <�������q	��a���f'�Up�!��
:���Q�������c�5�J#6���7=�?v��Z�
�����)X}{]���)����:4�/����_#z���m�y�_#:��N6��9OA�	��	;Rd]�J
��c�����n}�cc�����n���4'��s���0/{����Ddt��>�\�?�yfp\�w�dB^���9�p���@����^H^L�l$��4;�A�&@X�	��d��������@�u�r�:	����B��F!���_�Dd�c��������-X��Z�<u��d"2�l��u���^�*nC�}�9o/��������	<o�?�/��#v��U��!ou<��H��~V�W'3�3
���;����������t�bJ��Ln���6��������g�O{!|�$v�O���m�Fe/���c���y����a�V�OT���F��Vo��5y��L*��RA�U��U�C_(��m&�:�o��7#�O�qCh��V�	I-h,2��~fs�VP������B;�������^���(��fu2��[���b0���9ms76!z�s����X�D��	�D�� ����)���������[Q��z�����	���	����*h��.����{����P��*jJ�J��8q#f�T��3�b�N|��m���-�"Jz�!f9k
��Z�,a�g"!n��|�*��J.�[�l���6����������TS��'����V����B�jJ���F?�j=���*H�e�MM������X�<��np��{p����������o����&l�8�d�V�q��W�p2	�_!�96���ft\��������7w�fta����P#��f�����;bv���A��(t�S�&��T|	������0���;��8�;D�H�h�iz�MC��;�����;���rG"��7�x�6#w%\#�Z�J3�+�7��]�z!�S �g�������y$qC���z�<��l���>�1�d'��9Y������Q��0����0Lh8��
�`qx���/U�N��?�D����|�Z����Sm����Z4��9l��I�9T�����Yl���Zqkr!<o���[��}�n �$�B$y�h]���f�]
]���iuKY��G��1�TA������Z�.��o�kv H������[0`�l���"dx����L����\���`� ��0������0���B��/4Gp"���NN����`����Z�;P�����0�h���DJ`��T'B�_^�I���'7���F�FPNn�<u��A�?�J>�}��D�'����]�'���A@C��E�f�#���uk��"��!5��+5���	]�|K�5��	��b	��OO�S_H�F��U�E_�cT"2������)��OhgN���+.f�C���NJ*����,@]��I�W��\���ua=������	@d;�i�cx#�,�DDF�q�]�A�#�z��|1	���{�j�g�H'����>/�������,�
X1�Xh�N�<��Lrq�X����^�iX	J�H���y#�ex�de��3�2�1%��P�Tsf
j�-;�������*��`E���S�$�(�m�s3����H���3�ijZ�+�����OMp�?��>c��7����w���j��L��W>�����
"�@;�Y<���G����Y����D�`c[B
^�<�Z��+ ���re��$rb�E�}�������9���"��k����O���u����p�U�~������=�
�7u��v_]lv5�S ���U���g������	�m���������J���2�v���<�x�o(��A����:�p��-0��U���:b���`l�j@�IC�7�����\�,�P~^��@�D|j���,Jc9p���=:�E��bM$�+���V'n\>�:|�i��e��H�8�p/
����cD|�

c���8�~�$���f:�W5���nC�+���Y{&��3
K�������l����R���v��K&o��m\G�u��Q7��������8+�����s���������������dq>���q��'i�w��&�o��I58��GnQ�^,�����=g�r��l4�ys��b�� ���J�;[��&�L5i7!*�����#$������j�i��<��y#������D�O=O(�K+2���ox��]��C��-`������`���
�f�'���6lA�bNQf�R;�����zS}^�}���<�
�7_=#��6�i���l�b��X����MQh2{��X�=�P��'K��tf�9=;�[nN'"2N&���&�:-�h��\���i�-$�:hJ%A�ZL�DD�w����-�Q0�L��fS�3��^�&�����M�BZ�����[�
D��r7��%����n�t������QmF!���K�UhIg$sOnIO��,��.&x�x�2T���jO���t""�tT���M��%����%%��'z^,Z��r��%}������+����Hk����z�lk��t�@��d6C-����_�?�~M����l��O�K���'��u%cz.M�2�s���!um���deV3����A��`{���@���F�A����f�2q*��Eel>GO��y@*[ ��E3��5(�]]&���(w�DF?mN��p��|�U��$�(!���g�A%I����@��X�?#w����Z8�e�}�ns�I���F�~!�����}7��E�{i`��B-������/���Y`zK�$���f�A�n�_J�\�{PI�OT��E������p��C��U��i�R�E��!j|�-�QVA�%pa��.�|�uT7�,�(Q�u��������IU���	��zjKp�V��T��"W�����"���k��y�����Y�Q<)��Ii#Y�'�opO��{Ra*��22U��t���a"�������l)�+a��G$����D���([����A���2�~�j���(����Q�+���6�����(��/�_)>��5�Cu������"�Ci9G���m}�X&�Ais>�%@�G��e==��E.�A�����
<��
�
m� )��O�����,[�Nf������ej�E���t�tY�����M�i
��������:�+������E�^d�$���gF���:������xFZ.�'��r1-�����n^9��"s��a�k�d%�a:D
��x1�v-d��9�XUN�����D���:m{v��a�1�o�
�N�5�~�S��;�����L������~N��Q�o��$�`����-+*��t�y��U��p1�������P'O��j�;�w�e5�@W���+�pA
Q+�^|�E"����.�fT�Z:��\9<#��'4���.�����s��N���gF
�����Z���;�uzX,A�su�y4�^���W��!��ET#Nv��GK:I�!���pY�YB%�H4��������t��V2V:��1�ym��p����>L����3�m����B��RO9|���7d����N7{���Q���KN�Q�p"��)'/�KV���Ix�!k�%�U�pw�7[���a3�K->hE���<���M
������N�|p��qo���U�|�
a������2�m<����$�p���|�����	oz;m����%�>�����������S�^�W}pWJ�t[&Mu�:!='U�z���j%:���*&_��HSV��e
����+k���t sy(k%������N����#���B['��!�%��`C]��d��P��Y�����3�6�t�������guM�ov�]JE]��K���N:��C���2������L(���m>H��Y��,��6�<�������>U�9"G�#��r�9"T��M
u�^�'|���<Md5��Qz������/Pf�D����dB�p�,���5��v�)"�|~H~P{b�
-����n���Z������"����i��o~$��8E�6�Q�*K��l������]8k/4W����C�Wk��'��!������sJ�DA|vHd��x����P��[l*H����'�T�/�b;0?�F|D>��:���f�Z�	I�@`/�����������R���g���7��h������lnH���sC"r�h��[VY�811�������r���z`�/�\W1]_�i����~��*��]S��u�����U�d�{9�o��Z~����u/?�[�y=�o�Y~����u+?�G��:�o����u��S��5_71�#;�_���O����&���~)���~)�K-��(O1��d�&����*2����I������c�]�������������5O��|�_�!o��*F`������~�K����
�����(�������|
�?������?����?��w���{�9?�W�!�u3���L2B%$V��F���)�]�����LD��%��D6�����wm�sp�]��j��*A�p���H��x���2�-�l�z�����~���S:���c?CxTl�"�qp��)�X�H�j���+��u�e"2Ny����S���r���]JT��%y��SR}���l\w��":�yyH��3{��$���R�8z���3n�<I�������A�=��D�R��&&@�r=7���"��(�"Y[vn*Q�f�MH�{���W����r@�+Yb�z��nL�|�;w�3�����W���e`�c''%�1�C��w8�t��E���j4!yP���N�I�d������LVS���M��_x��z����y~:o3*�&�����W�~&��PKw�7� �D�����\
|�������0����39lk�h�8	����`�&l��������qX���br�8�?@�����v`ge��g��`�v��J`���L���,!'��i�����
�Z����\����U�QS�g2IU�)�B0��B�d����?�����N���������}!}����j��G<ot�*�`��L�h���f
�I^G��7:���U�[��KMH�BY�wL>3J����x���G�_)��ca�H8%�]�����ag�c��Sb�J>/����sd~g��t�Q���������w��=�o��k�/����5�[��o9~&�6�����1�y�w�����g�V,�+���C�?�C��F�B���V2��iYgtX�Y�����:�y�����m�j��;xY�oo Qt��3:N;���i$���9�8�����f`""[�H�n���!��87p�`�E]�w����8�]�3���QKD��x�iy�&�E��R����[���,@����p���_����es��,����\�jJ�Hu�VaF�w,BRV����*���RSb%�YH���si
p���p2�]wlM �XL����kC�;���D��������Q+7m�-���LD*�q�}����`��L������kk������Z��>�������6qaFz��\6�K�~l���{��7�:�<�t��h�j(�-�����
��eF��+-���7���x�{�+%)�����n/�NS"��&"�C\�����������<qTci������d������r'��A9_�(�9��"��C@�u�~�X�fh�`�P���?2��*�|�[��{g$g�
�*�V%X������y�)��jJ�]����|t8#m)2zw��5�O��#~	�����[<�hf
6��$�w-��1'{"���%���{�O�I�������u�hV�@\��m�(
�D]��J������%[/$��2�x\���-
{%Y[L��
s\��B�m��r�<;}0��D�!=�uH�s���������^}y�����+�����}~�����I��j����b������i����2][�X�83b�9����J�q^v�r�3��xO���:[B�F'���R;��������=^?����Dh�/&m.�t7����3:��v��_gw����/s#x��tBM]J�#���{��������%����������<,3S�5gB8X[��z�k��A*Z(	o�<dsQ��F��=6�c�`X� "g�|�#��J�SoS5&m���X��p�1�y��o
#?����,��D�q��)��2����M�*��-SA��|�O%���K�,�#&��vb
6��������K���/R;�*n��Em3;=$��dB���I�U����h���r�^<��K�}o�R%(�^����;@��DD�a�i��'U:y^u��		����{�3M�,�vw�*�]�l�V��Q�U�N�PI�R3p��lS�3:
jR%b����7�wU-�,F���P$>+��h�X3i������5jtBz|�����z*2]���x���G)L�&$���]��
������w�1zD}8����7�c�i��o<V�1��&"�V�XS����b|wm�s8�kh
���j��m|1,K��J6�������A��>����-%���a�
��M�9!�0�z�	[��X��v*^�g'9z�#l#{����v�v��w�G���+��Y�V��<C�;!��+����h�{B|���<�de��.��z%"��������W]�P:�������
3+�����y#-��{��3�ff'"�;�^d����,�`�7�l������$;�XmaC{J/�j�����E�� �L��!�3�V��i���L������j��6�b_S�����	����"E��4k��v�MZ=WT�6�������&�t[����l��s�3�Z���m�)�)�t�����t����#�tf�*9���,����<��Mw�DD��	(����3,������ ��^�c������q����!%-��3���a�}�L�m����*���QE���z�.-P��a����7�:��2,�)KSV�1<*���_���'�<):�P�������6!��x�n��M2�l�pZ�Eg���Y���*8�9���Yya6b�����$�9��� {����&�:n� ���T��\(6E��V4��T�6���oK`��G3���t-��������P���'���8xv;�����0��=(%MC_�7�TH�G$�cm��Z6�����:�G���[N;bb&�����t
[�y;,�����h�9��/��I�ij���B�"���:����&�m��;��Vr��n�=��x���/��b;�����n�Gy�z���.P�`&�:5��6��~� ����
�����3���f`�D�QI�hz�������;X�ws2d���&�d.��s;�s i�p����q�\��]�@D<��qn�������0��

�O�CO{������84������/+1����V��J����[���$�B-��iB���R�d��4/�%����
���W@��I,�x��G��Dd6�;���e������@%���}X[��\�gFYC�
�*���RtQ�a�
��D�-�4�B�}���`A���Q]�������J��mF*�O5��0�	�<$Q�n�6>��I�p�fq����|?AgYR�	���4}�}Q�!w����|�Q�����K�X��u�D�5c���<[�����5�K�����y��-����_���oZ�����Eb�J�����_��f821=�}���v%�r��l�w����3/�9��m�����6g
��M�
���|���G�X��B	��q������%���9�!�T��f���`�4�������|�����l��S�f��@%L����-/�X�6�w>3�a�:��o�����o����Pb���x���T�b������QS��Ss�W�Xs	���n�ec5�yM=�����h�>�`��:#��P�}�xBT�LNH��,�vw����^��/�wp�����L?o9�7\�� N0��TV
;`zn��n���T��G]�D�2�!b�a����y*�*�p���bR�k���_��m&~Q��vf�gap�"��N��#l.�p�4���o?�-C���fA�cg$ /��>'7+������������@;�L���2v����/��f1\���h�v�*`�[��Al���[�!�}�FTgQ��	p]���oe���?��y3"46��*�D8���O>�5X�s�����������o�(�:?u��x�~����!�}���H�G�����E���K�����������T���?�����
���*�c���g7�+�^H�z��U�u�/��>�����+`����������������>�k!M�7�������^� }E+��*���G=U�����B�u����G�N��������~��J*hQ�
���q��I��|[������S`�>/�e4��f��C�6���R���{#��ga^3;��GL���V�� M�6%y��S]��Hi}Y���ON���K����Y��t��g�Nn��d����q	1
�9O5�F��;�����-K�a��$��8#}���t�L�l�*�JZ�|�v@���� ����.�\�]�
�g$@'U.���v��Zx
T{1�J���j{,Y����U��6[	�u]I��D��<������wA�y-�m�"����l����hE����M3���C��V|�����h�,#���_t���/3^x�??��1���F	0�����z�G�B�"��EE>n����-�����DNDF���5�����Ci
4����[��;c*Bt"<^��%�mv.����9��O mQ�~8`���$��@�_>�d{`~����|zg����J����b�b
$�b�	~��������kFos�a*������!"��u���IHe�a[D~�����NddT9^.�8@��
��$2H��K/��U_S*@��_?fYPq]�p�\
/�X,����I���'���L�o�K�Q7TH�g!I��t��
�;��������S~�5 ����L^��ed��s��$tH4��Xy�$��s�5������f�*�X�	A�%���u:Q+4v���
�)

��-���4�v�1�
o�Y"�	�,�uC��*HO�I�GTo1����`U���W(�_?�����PP�)�������P?�
���GbE�Y*��i����"������:�:8V#: �������zB����aM�(��3R	��Q����d����HwN���l��aG��f����������U�c�!�$��DQ1jx�.3I��(kR{d�k�3��EyX�����Q���+;���[$>�D.�����0�.����66�L�B<l������]�����
���O�4�6<��?O�C�bH��j��������!�I��g�EL��,�I�����2a$�T�}t�**st�3��*3��^�y1���`,.�0��M;�����.�q���3#L��(�q?5(8uyf��j�7�������gc�(5��(�L_{b?��_���X��j����KC ���`�bAG�\��lx�!����V]��
S�waQQ76�=��Vg��4�vg�z�wE��[��uEA�M����^��^P�z�}?�3���TX�R����=M3�OD�~��d}

�� �W..�<�B!��H�}V�M��i�kx�����$�:�lzY�-�!�a�8$@��3�|�c�� w����p�k��s�wax�k�.�[t��F�v�c������m�(��w���Jpf<:�-���U��S�������wE2�Hv�0�m];W�q����:�8o�	�8s���bb��"3�G�qzu�6�Fk�����t���DOJ����������#�PA.�����{���	�|s��^���p���E��Y��x~Y���<��T���!i�d�m��K��37��zB������e�gE������N]���nkp����90?(�t�p�6���_��!�o������H��A�����3I��sg���G]L)o��a�Y�+�$��N�Lg�2	�Ah6�_��(e��s�����N����F�E�9��0����L�0`�ATWe�m����cz������gC�)6��7�
��x ���a��	^����2F�K�~tH�."����Y���J(��~���C?�O!.���@�@��Kax��w�N�f3m:�D�@�r�ey��\F�r��:��a�DP7<���!�����H{������S22G���Uky��j��b���o�pJ�8p���gA���.q$���e����Y,{g>//�~"PgpAlX6�Ip�p���I�44�i���D�Y�D^�vhA	��*�1r��0�JH�����Gl^����g!��>=�cw!)S�iF��M?"��C�V�����B)���
Y���0|e����&��P��k	���^ b�����G��a~ID%��:��;hL84����������lm\JR����P�gp��c��DP�����n�����
��2B��<19�����,&��������L���AN���kT�����O�L����.���AT/���[��B�t��m-*�9�J\G�]5�V��F����_M=��Uo���H��4��]]�7�,�H����B#H�'�ea<=:k�E'_-x/�S����S��d��lS��k&PU��/u4[��q��h���_�����g2d��>d,f�����D2dZ},�f������B�l'�xQ$"_*�j7o��8���"8�$4*�h$��x=-@������+�E'����{3�!������yF��T�?*��C?,���a�a���m�JC�7�.�\����@�#L��������Y�G�3�}��^�y[
>�gE��SD��j���JQZ~�%@����
t���!���0v)��������B�v���K;��a9al��B�xYq��oD���](�;bf����K��z}2������������������Y��	`%�@:����&bz��'�4������
GY��sps���������\"�f�.&DP@�,��Et;��D�%��7�n��!�2�A�Cm	
�4������V�����Z��vw�#���y�����1Q �4��F_m�H�NvG�g�g��D"��DwdS����Z����,j��a^Q%z^f���~�!`S���L���G�b�smv&�J��XT���%`{����>?D�����b��m@�D��|�����[�������Y�;�t�$V��Z�CA;�l���dT8	�}l��E`���S}�L��c&��=�����d"�m���9R������
�����G-/��Yi�����dm��\�_�4
.|���)����(����Yib��r����������������}t�,$�'���W�g;�&��l��`�?� SO[���"���� lZ=��e"�����ax���=�,�E�������U�8�H���MQ&T|8����[Otim/z�JJ@8�(�J@���|p������dc���������|��W=�_��3s$F�����#[D��t�[��bj��rc��,�j�����`�
-_e��s�$
G^)K�^�XWx����g�V��[�NZ��g&%��4yc(hA��6.�Hs�r�
M�8����-o�m�����fZN�p?YK���2�������#Q~B��+
�o��K����(�����]}\l
�8���"iB�JgYxu�
���������q�,,X�f��oCxd&��4�M|�F���_p �|j���.�gb��gGs���$���]z>�:�q�0��3L��_3A��'�X���`�*c?��.�?�+�W�}Z\���N���P/#A��R�E����Q>�:E�e
F���=$�����p���	��]�ee�tn��'��%63+	�.�
���m���n�������
f�����m�y�[��L$._{{x~�'M�[�#����w��"I�*kP^�*�T������Y�+2)O9���/��R"%��,E������?�{��\�������/���������[������n��1�s�.J:i�}�[�;����I?���:�*��C�?Z�����-��y8�x�P�?+
�� 3��s�rY����K��6�]�)����D\����E	��������
�R�
�0e$��7
Y2�m�
2�P�Dr�pv��J�B\�v9����u�N�W@��P�
[����+xW��Z#�A�b��]�x9b}���!T'��	8x$���"t4��)���ae����� w����#���C{F]���{W1�zM$C���<�*��\��,3��v �P�k� ��9e�T���� R��9e#r�v��HT���(���8�����"3��P���r��OL}`��I+��R�j3'��b!	�8���C��D��&�p�l�dG}2dY"���5�_�)8@ND��r���s�F+i�R�b,�)2�Mz�L���K��'�� RP3��8��.�d���x1mK��3@����hH��!�6Z<����<��H������##d����hd�[w;
�$+�e�nhK/�ki7�	�n��4��KS:#���>��,�%/���S�`!Z������@3���?3��I�����hB'd����2�����2�����F�A��2�#�<��X�U3�WU��u�53��� �Z��P����7�tb�L�X�Q��,f�'r�^��`����Q���nE�u8��	�[jO���Q�`Hy2�R,]�!�����fDE������hJ'�����f�lJg��y�E0�3
�f��v����Lr���@65�nU'4rCbGL$��VuB��Y����{��U���^<�/�	I��<�����uB�a�x*T0�<�V�������[�eM���A���H
�D�7��#��^�a���g�+C��%i.����":�P���^X���uFER��{��W��uF�w��<�'ZWo�J�;�,_:��m���g���^828����D�z!@,���5�lU��y���N��j�;�x�a�Ng4�~G��F�v���u9��Q�:+g&�Q��:��e"y�u^Y�88�?��&������fe
�;Y�LJ�Pf���|�����:N�;������#i>m4��� 7�Y5M���i9SHNX��*�C��99���|b������
W�YF���&����t�U'�yh����iP'�d��� ���5ov�[�OD��? �hkV�`^�������g N������B��o@��=�j��g��{j7B��l��O{;��<i*P?�%�����s��H���|�/��������4F9f�_�E2��:����Gb�@��2�XB�
hg����N������&t2��d�8-�,�G?E'�+����y�5����F"��6��<x�j�4d���D��n�??4�
�
��"yTC�Q$$�bOc��X��[:�!��sZln%���[�:&�8G�
@SP��1��WY.$����|��:@�+�9���`��7/�D����`Ak3�g*T�l!O[�9���^�$����nu��c��W���������a���Y>y���<��d��R:|�vH���+��C����G���L&�� �o|�#���-5����&4�0vM���m&�^���0���s��t��!��j���yN	&��]���������/���x-+�DF�m=��c��Y'�4R'U��/01H[+����|��.Lj�5�+)u�8��t'�����n�����"���w�:0��Q|��6��3�����)G%��^��_��
5�������8.~����]������.�sC;�k���e�dol�x�������,z:���HN ��tz�|$r��
���z`����x�{��4��g�G��Zo�tz&Q�o�M��, �T���I%�g96f!�$]�H8�����mG�Og�����@`�� �����!��E*�P�L��?"UU�{�J2Z��$V�w!�|�����V���1f2d[4�%����6Yd�x�Akn�$'�saR�jf���2��b;�l�b ����[�oR28�#:BZ��Dd]bE?�B��`x���'k�1��������1��Sc{6�b��L�\�`m��:����p���#O�b���?=��I&/C��Q#3I������Pu�������H��BZ<};$��/��O�����������?c�W;T����3��b�ft�g��
�}~Bb�P'��4����$�j����[JGDPD���	�������QYl\�i���E��qd�H���o
��k�Z�#\g3r,�"�����O���=Y�R��^?�yn�r�N��qq,s�#y)���[��b���{#U�����n����]_K x��8��C���6�������?����N������<*�6 (�:���H$���p�
�e���2���yM�K�S�'"��'_�����r����+yW�w��?�.M/e�����#���3�G&"5�_)��]�t���D+�<8��]��G'LcW����lTDEL��Y���'?Jh���n}���g�9RK7��V�������������N'3�x2 6�Q��[��Hj��a5�f�wd7]����|�p#��U$@��: �3�0`U:fL�F�D�!27�{��9%*$�[Oo�lXHH��^s3T�������./��}1��(JO}��1��n�:�H0`��g�u}4��_1+O��d�f���+���`!�*�	e��
�,C�2)�F�����|�j��V������3�K�ZI_����}���vB	�n�:i6{��d����P��S��f�-��fe���7�}|h{��Q	�[^U��Ml�����)8[�;;t+�?��F]
^����yn�e\�]u�be�E����w�$�VzaS$r����%��3*�X��U�a��A����d&�t!�B���9�e���m�&��������X��xS��z-���Nt�h~�Fo���u���I�c���?�W?��}��\]k�]�k����k*�O����P@�
�cb
@��������T`,��"����p?��
�Z��������T`�l�%!�����<S�g.p?���L����c�s*p�Znj������hw�h����U��!����GPg�z�;D�{���������w����J��������\�>��;,����D�s�z�%�C�K�;% �w�% ��QT%��,u~��������u�N9Z�-k<������_s���DBN}&�'����mG�����h���b�{��>k|��J����1Km��c�(�o.�����6h�Q"���6l��
y��>n��"�x��Tb�K���6t��"���#�D���G���#�����r����/�H1B�g)aCK����P�����8�-���"y�%�����>����g���c���_���[�����������������������������������������������������������������������������g7F���v�8�7���xpc��q,
n��=�-�����?�1��8F7��������\�>�/�-�����%�=������nKtc�Dt[��%�����jz�:?�}o�X�������$�1�g�#�]<�1�q��K2GH��(K���k:)�Y,8�+�]X�,�d2�u�z����������@1�
BfO�O$7OR_��H�&���K;~��3/@l��T��e�K�Y]�D�W�hzP�k94��\��,���m(�
5D����@�Pj���#���~�����wxC�w(����1�"`�I��D�6g�<R#����O�1F�P\v�����l�>��V�/�4�O,	@e$�;���1y��UG������"�KUE�l���	
 ����T�2o����,��t������T_��
H.do����6!���'GE�[�"��	QV��N����G3��U`����(��g�+�`7eo�@�q��fQ���������{,)]��d�iB�O�3YLF������pY�QFC7e��w�|�J�i���Q�C�e�����~vj�������{�-G�s�EK?�;(�vn�eD�4X�}"C	T������J���3C���`�E�:O���Rqd�h�&k���J���,��"u��< ��Q~y�6�YNVE�����AJ�f�����\��pl�w$Q��L����Q��c�����-Qu��H��n2z��v��z+�X�3�8��8�E�B�����N�"{����Lt%��D"�H:����'��O�^84H�`4F�}vj\7�]��-��$2�)��5~�vjvB�WEE����-+K@o#�'�ON2�V��z<���Y��)9���H�1����d2��	e�68`8���5'$�VN(''���(�f�X~�a�$9��l��;"�Q��������X�H��1��)].�-��6���j��%�aW�Pg��<��mD�����W]7�C�UX�\��e���D&I�nw������p �<�����!;��E�vLd���w<��Eb��&;N�����P����N(��li�����EDb8�A�?��m������r���r0�9��kH]wJ�D��p�s�������8S�
H��^�{gd#�0x�k����8�?65g�d���IoE����y�-��"�T�d����'�-(�=������w.�������f���%�~ )�h����,z�x�������3�wa����$��Sb���}F���t�L4�7Hq��!p~���3'�b�#|>�=9������������+��k�2�@�kI��WE�����4}�������S@�l��7m����� �'�_��~\�����b�����$�h���C���zo����$��Vn_K�����L������f�����-��A���H&�=uLI�D�`������b�5':��9����p�!�1����O���6�u�]��ge���]P�w����J�+/j��k���Q������w&�eF%���Pl�,X<�I@z�q�L�I�8�L�k,��`���L
T��SOS�$ xWd�,���nY$��3>=���������R�2��r��f���[q��p�L� ����ZLf��P��&��������x�s��A���Ha_���"��:���,�=o�W(`�.^�0j�o{��,��\�/F�F��^$!$E�r���a�h�e�N._�U�[$�Q�+������t��a��D1�M1�bc^,����q���##��:�/�uU�@g�p���f���E���f�5&��`�+���!�����g�P�2
������C[u��Rm)qY����W�����"j���R*�_� ���.D� ��K�Eb.�7����[U���THo��@�y�����S����X�
�zl��?{dPw�d\Z�$j3�k�$gNZ�@���V������`%�/�L�i���LH�b7d3*'��mz�t���xh�9��V6}�Uc����^\$���+�`�l]�d���@��|V$�A?��v�@���{(������}��o	S��
2�wE4[l@���'�E�����Y[_����[������#�a�����������R�C�G��0�D�v>�#.|V>�k�s�u0��Z�bWx�fR"@�Q�]����ak�~�8�x|\��?�5���4����:�w�QoBX>����-)g�L/�8���=�k�t��=����_�,(��,�|9S�=�@���h8�P'�k��w��#���J����lI�r8{x/��y��U4I�A:{�J����}�aK����LI����C�l/=�xFEv�\8js���PD�\�X	`d���|p]��AU�%�t ��TE>��H����s��,�����9N���F�B.�Ho,��f����a'���93@�����9�h���]�s��������U�����+y�,���7]G�PQ-�x���\�B\<�p&A����`7���'2*��}��7���O,��3i�^����bcd2d>j�v`���=&2��������]��Dg��"���e�2N$�H|��R
��~�����rKs�mp�y� �������$�#xW�0I��"D���06#y9���������eFC�J������W���U��1��+
����7�((��9)1g1�����~��e�;���~	�������~���F���;5�>�h�%�h��eFO`4�yp_0��r$J/���F�����q��wM��������=A����0�*��f�MR�6a��v{w��Hj��3(�}k���;w������L:�p��.,j���"���2� �������Od�l�m��1��Od4�
��S�
���Hd>0e��}A��+j�E��w��/H^qw�d�����,���}R/3iGGMe^��}A�g����&R��.L�yb
�D�m�Q�:z0���9S_,��w
`����
{��S�>����U�13��O(�+����b�g5�Z����{Wf�^��I�iW�>����&���df�a������1���]�0��mk�E�|�M�;��\PI=��_��v��@:���������\x+�=�*O/d��^�x�<[��n��L�<�U����g���6��Jz�������
b�/B����N�|$ �ee	�g��cO��G]�Q[]P���5��������6��{mn�>bFx�C���-��oh�	�MN�I��@�6.z����oad���
��u�vv���A����
vC����Q@V`HxIB�x�����BL,(��PxW4K$�����(�]	;���F&i�>I2o{��}J*�j��m�Wc�|A�u��^�����"��2�������@��L��|b�l�5' ��/���z�����c.�S��h���:��tom�<��M(���mI�i:��~QG�G�/v��f�[Y���z���n�m����-l�����S_L��
Z���W�Hn�/u�x��L��O��}o����	�5g-*�N��@VW`�+�]�7OZ�@�.�0�	hE�e`:�(_����mAY�1O��X��Hf�?���3���o�������o�a���Z5:����K�YQ�7�4����sB_��1�D�Uf4d�4'��I7��GQq�
]��`���������_�_��z��@2��|�mCd)/�o��eg4��0�x��Tt������E�������|��t��q���D:�k�m�r33��z(]hU���{7���Wf4���D����% ����Wf4V$m�q�4'6]���1���)f+��}y2[�����Dd�r�h;��LD*g������=
47�����7����&/�1j�nA z��_�y�nFC���y�2���~�1��L,^����0�&���]����W6��a��qZ���:�w3���B����T=�7����0�x��q
��L�fT1�U85�LC�����n���$"(����V��j
.��KA��	EA��p�����{\:�����N����iC��^g$J��IL��]��U���i�BoF�����l������SCx5�����q��bx3��c4��(��&&�>�ls�&}� ���6OCx�.7U(��zO�!Q$^3&k�z�CoF%���f��-�,;�?�������%~>�+���`�������G�3����/�����ri,v|eBt������/�$�L�K����g���^�����9�R�&�x�9��y��]d�0+���kl�����raR+���/�E,���Z��v�.W`�(�]� uBFm0�{i��(�z�3�^J���j;:�O���AO}�mV&�����gf44����ta��Y{��]6����H�7 �����������v:����e8��y������b�_u�������"
N��������wl1IN�����22���+i���	�[yCp}a�|"���{Ax}A_�iX^/��c�%p�������
+d�<<��W��b`>4���OV�[�MC|�T�&�����w����l]�D}A-vn���lv��}Ie>J
�+�V��,	������E��p1X��zn��N
Vb1k'�~1��������jf���	�qE��V���P�/]*��NE�~���������wT��E�����O@������-��������x(Q�W�WV�@1'����		����hW��1M,�gc��{,�5f���P/��aze�a��MC�S�~A�]oti�=,t������Oz?4���~�L�^4+�3~��7�\�i	b������;����*��&
����;�}���FT��1����r3��(�zE��T�fht43���6�Q�X����	C3���]t����0���i�qb��i�����
�9m���U_�?���YQ����*�E[ ����#�����V=�h|Y���p������@.~5����$P`Ky�U�.1!n?/����{2�V>"���D��^r�ZyW&����(��Cu�X��,H2�kAf��Y���S�6��s0!�n��N�H��>\U���:y�� 8XdeB��]r� J���nFx�#�4q���d��dl�h}�.L���q��{����"��y�!�2��L|206dX��"y��T��U��|��lp���H�.D�!*���2J�������|�]V��y�����G*�"A���xLz��y�����(�� ��y=z]D0	�;���GGa���n�u��v5�?#y�]9>�����79jAh5����T
'`�7���!�>��a,��������
���&aMi�����v��'g8baB
cU�����j�3p�]~BB�CmA��<��pD"�`��	I87g�n���#�S?g�6}	������&q�^�����@y��=]�V	�5B.����@S����f��`�JeT@��%�J#�X@[P�o0�^�"�7���,#f���7R�ZV���j�3�����"-�$�^(�;4����Pk�;Y'C��=����I�g�W���]��d$�Q����U�]XR%D�=�om4���0��]�H��?z�@D6�p�e����������KM�������q��;���u_c�v��zQ�O��^����I�IN,Yl�}	h&�sp��������ufh��]o�O�$jeB�3w����u���U��o�{��	�_Umt�\k���	�����y#�R[�[Y�lY��5�kV�Y�;�0����M>y�n2�L�&7�V����G"m���F=m>~N�aG��-�_��J���	 ���}�e�|���Gg�������ea0�7�$@��z��oZ���KH�s:�I��k��@�e��)e�l$�8�����+c�K����@�N$� �x<):���_Y&��
g�	@~��� ��8Ei���5��d�g��2t���1�� �x�OF�7Jb��;�o/���.CVS��v���.���2]�U����E$�R�mjW�Yy;u1���S�S87�
G=��������ifBB��Q������F������uO������6�|�qi���%���x5�|'��'����"�97h8�f�l���������d�������	\�qSC(�M��M�
��u�'T*+c��M0%m�}�R�Jb�4����4 X-'&�"�����8�u������
a�3A�7����f��ER��/�Z�A�{�0�9��2�$��N�	�;��������45��^%�3!]���xg��O���������\���v{�	p`����#�v�������O�LG�w� �?F�t6tOG��
��~}��x���A�X��C#��*�B5��K�el��/2����hc��$�E���@`�}��h�G������13��Z���(~Z�xfBk��s�5Y���AgBn5�bE�����t�����UZ�s�7�|�af��N����C�mXZF�����8����W	<��k���<)��������X?�hp<�6!����W}'�
��9�!�����t�z�q4R��+���%	g�?����U�
�����y���L������	���VmD&@�\�F���M���8�:u��'Vm
$��y��&@l0�~F���'�
�M�,2	r��y��wt�w��������Nt��+��t��,�w�3�6�??�JF��'?�2�y���k��������w����wAq��.�~/�62�js��,�'t��"��Y:�Y���
��`�-�8�Q�������{��"�6��@�>�`����jS�A�#���v�Se�.���i� �S���S��	���>��+��{��U���;��r�����U��p�G�������`.�d���6�)�z��(r�7�V`�3��Q$�=��b��Z�'?J���Y�7��ILb��0���O~���q��,����LuiA/p��w:���sr���!����$����;�~��;y~���Q�������[�9�I,���s��wa���W&(������(w=��N>�A}���MK�O2�c��o�'{*+��;_�=�n/)#����<;��]��������rl����?f=�A0Z�D0��j`� qH�m�nf��o(���wh.�IW�=Q���!���%��
��<]�XgB
����M��}�
?3�����0���6}dx��o{�K����b�Ap��6|VT�J��iF|���P������Ic#�����0�o�*���q��D�F��6K�a���]�����'�$���� J��8vuKE���X��Z=��O7�}a3�N�;���j�7��]�:�����N6e��m��m@�5���>'d$-�]�
�{j��������gE������R�s
dZY|�@�y���'(�����
T���J$8�o����F��0'T���5���l�l��	�,�(����0�4Rs�_��4�>p4S�F����&��tCN[ev ��F����<�7"M�$x�&��rL%�^�6�A�f�W@`��f����
H]=Q�ODpIW���0�@7�NbF�UL/#��i/4j�Y���tR}�c��|�m�7e�}c��B��z�o��"����V=�N/�K�o������X$77)4~#;�&��]!�1ypS����>���p���P�w!"#�q�WO�7A������.�-��o��-���M�N|��Y$���`�6����{�=G��c�X�>B4�������yt��iSM�qc�AT����Tj��?�0�~`�t
s=�����������9`��)@ov7��>�'dmtw7��4LL3�ED3��k�A�vvp��%��	�������h[�!yl�X�M��ni�p��bJ�����8�fc'
����2j6W��(5h,&q�@�s����c��
6�['���:��lN2*}W�=��������]��w�d������I�-n?u�a�O�����"Q�|���d�'���y0���9�"F�.j�4q�_n����%������rc��e>a��eN�����e6,��"1�|���e��|G�z���A0":����aN����T5��^H�	������d�P��yB�a>w�<������2%���u�	���a>wM
n��<��}=��f&����0OH�l
�����Y��07fw��� �an����bf�5�g4�CM[6��i�d�g��QC���N��Z4��S$�6Yf�d�O������6���3U�-j��C}��3����6�;;��	E��Y��Vy�qX�&}9��#:����lH������#�LIC>�<P��������=����(�b9��>�T�H�����RHlJ���>u���3�
�1|/�� ��y @��m��B�4s��Y��'��O�J�@E>��XQ/��������<�J����y��������ye�����S�q7�\��/��
s��>�0�I�7���"�	�to���.�@Z��4�����- n�q'��GM-���"��=N�K�}�3������q��H��b�&�����$LE�mk��3�����t>[D]������,�;,�!�X�]���2�J�R����G�k���B�C��l���|0!����e�|p����Q]0����|R7�w�\)��i�[���t�����%���lPz��hi���Lg�2���,Jrcz!d�3��`�t&��f�n]�����'�3A���f���}�aD6;p�y� �M�E��>��������<�;���z���e���i�����$�G��O�N�(��.��Q��<i�l�41�n�vj���9����N��-��
m}�y�l}H������>�@<%���g>�Wu���YA���:����[r�q��u�q�$�����R>�:<6Hs
��7���q����L��\�����3Uv�����*y`�eB�������l��m^B��}`|�O����>���
;[��Y���9���L������� ��4E�U 1L��U.���n��=j:"��q�]_d��g�zR�'����Lo�
/��Mu��G������
Yc}.
T]�d��mf�
:��8�6�*wf��q_�t6^0���M�`�����GT��
��J,�.#8y�~9f�k?��1h�Eo�m�irI��>~���=m*�����4�B
n�Wd�����������2�rV��������O����������#J`qX~�C�8t���u�O��g��p���>?07�p�QmSF!����G���2#��)K�R�0�i��(������ov&Tm�y��+�lJ��l8n__M(�;�;��bt;,'�l�I��S)�k����i��L���;�B���l��E_@
6�T�������|��l0��-������FOn���<�=�tF��}�����zRj�����eFI>u;�|��:#��Zz�c������F�8��3�j����������N$�i���7	jm,��C��w�����������a6�\�K&��QP����j�5��m�V��K=�m�Y$;�[�e�A�;/���r�WX����O�T]����k�;����*3jW�� ��h��o-DcW�)��F�m� ����&��j"�)���u�����mehbUW�����.C*�����N�6�q��+�u�����,TqBQ%N|���MX�h����(�S���e�z��w3��T'}�n#�����JZ[�*�����8{E��/ln[��0�j�t������Ob�^D�V���[8�h���}oL#�����
���'�Z53,w\��f��9�_vm(�m6�X�U�D=���]!��]��.���U�z<����A�5dTu�NL��s�Jkk��D�:���:��h�:�LgA��c=Yb{r	�c��4+���J�q{����D�9��S	�C(!����G:����$�w>����������)��|��=��������������w��R�m-�]E�;����)���$���*{���)[���)^[��e����	�U��k���Y�^b�X���%��)����4��n�q�O��_)�)���YL6�J<���_~����"������������`R�8�v�O�w����������:�_���S���������~�����7pd�h�����W�E��\0���f2d����_tH�g�#|%'��R�|�Y��v�\�	j���d�����/�a��/kj���|Jdk|V��`��e]N���X�y>���s�F��CxF�z���y�J���"2N����E�����
��v��Y)!"7������	��,�j�$b�;���������B�M*N������fq�)��5p�+�o$��L�|B���78��|�����9�s�M� j�!)�b��1���N��h�
������<�u�J�����gKo{��9��`�8u$�G���D�����1��������-:�j�hF�[�f��QA��(�XH��d5%q�jJ�Q:w'~�#M?��Nh��'��(�� �U�F�J�T6#�GQ���;� �D�,��[�>������=�g�����Cc�3@�ZQq
2���\��Io�������d�B�q�D��0�����Td]��:Bp����$Y�����w�
CO����z���W�q\\��HBX'NkYJ`�!��^��������C��&7������0�+�
��<;�YP��D��FnI��xw���	h��?�����~i�0|�
�Qc��
�������+�\1��8uA�u3����A8�XN�uM������ 7d_��4���T���s��M�x��5�g��9���M�C����	�`�"��U����L��U8v�9�E"r��=�V�K��v�S�;$��-;�hu��	�Nr�|hd��K3���k�{��,��jq�*�Z���6��l�������3P1:���z��S
&��,:T��&?k���ulT��G��aB�<y����u�7���DF�	�\���(2����M/�9:�Zz�
��w�x����&�������� 
��l�kmG��	!���v�0��3&!(+���uU��3t%6��)&����@��]�`�4�&_�L ��{ �<thc�c�C��
/���fv�;@%:��6���d2�q��1y\���L������mK����f-D�9���a�5j��b3�
P���d�s	�W�O�?���Y�S�%<X2|TP]R{��*��?�����F���7�	�?a?�F	d����rk����|��L2���'a?\w�����q�'�aUX��D>{�q�O�f4�42)�s���z^���oE��	C@W
�]��tb���2���W�Q�����	6I�]���\�
�s(o7@�&��E '��-�"��+��wbBE��K\uh���
p����d�9vez��M�e���C�
����	8t�5"~��s0D�"��=�y`M��!	*�$��L\�f����!�9�tY��u���(�
�(8c��rB�mAXPb�?��m��H��-b�.Em��|)�L��0���HC���}f3p���@��)O��To�ea�����j��cX���2�(�@7I�_�����`�8b�+4,��s,�q��Q�.oR����c��:������Cg	�����^�q[X�,L�\���CY/
D�����C/�tveq������UYfU�I�+w�F8�(�6��� �RbSF�7nN�f4
����c�U��w�5O��c��Y���
��&5��	�[<p�k��N��=s��~pk�2����t�	�%P0H�\Ll��3��:��=�.P�(�-���6s�ha����]��2<��������[z&�{�o,cK	3J`�%���E;0������m�]K�HGJ��U�`y��4�����bB�L���Y�W7��{'�K����lao��Emr��������m�*Md��&<�L-��O��~B���c�>��L6X���Je�%��}f���I>�5�yW4�wR-��
h�D����.:��Z�K:��*��V��]k�"]����%��]��_jv������K3?��q��(�j��8��Z�I���3��0���>�0"R#6�~��<��5�1��d�G�b��	���^���C��n�5\�*���5+&�$�/"���'N���WDq�MAb4�/����}i�r+�����:jOh�+-���E�8h' �mcv�}���6r���~���)#l�����x������6��+�4����Ox�����@�����{���<���9�8���O&����]i��F8^��% ��� 3�3��ni���n�3���5�2�}
Q�������:R;���&:��nz��ZU����	��NT�2������l��4��J�1�`��2�[M���!�vJ������B�,���_���ub!i���.]�3�s�K��U�d����l�5�
�k���m�)�;$���;�2X����E=����S��I��z6�9,����-��V)���4IQ4@4�&�jX&�r��~,H�4�2���M���d���G\��pw_
;�uF�G�'pfE;~�Y��o�'tJ������(����x[��F��j�e<!S6�!���D8�������<	@����>z�VmB�����m$W����d�e-����'���8dp�}Da���`���(�u�Dd:#�����?�U�P���T+I�*��(�$
�&MD:�a����>�w!C��4��`��h)�b��j��A�EH��m���Z��q���R�k����c�
�?��X�DM;���$��&��?��J����t*��4]�n�:Pq��]Gd�	���
����25N#Z�b����L���2hM\���wig������9���o$@c;���CGX��������D ����T�O�a�OM`S����Ec�@�	fc"�W�d�yv��,-~��Y����#��L��
u��u���,H��.��sV��p����.e�y��,��I#�����y���;�����[V��������'DPH��=���8zp&�,��"����a�6\M���V����3�	�z=8c��>�rF	�#k�P�q�?��#����#�.�j�vb��;�<63�y�c}o���z���	E
��	�
��/��U~��AM���3��_p/�3�����u3�������7A��F���Hd���Q��wd��@�Y(�=l}�M.��h���E�S����_?��l.g�)rN�ej�w��s:8���X����}�-WZ�M�����6}����Z�.d�F{8q�����,d�������W%�����m�>���
`G��/�� ��
@�D���M6����~������]�W���}H8����%���hSu��D��m]�?b7w��(��-������L�3BU99.�h"���{�f4��S'���/^�x;�N%������/��'a�\����a�D\���}������DF�c<�}��=]3 �&S�I`�]�(�5Bpy��S#*B,z:|.y�[������X��*k�7a���K��?��U��N���#;�����������Zq��R�Ij=/�7��
p:�\��L^�\��{=7�	&2d�s�}`z��f�J�H�!b$Z�'�(L��+�.1��������R���m8[p|���Z����m�-��
kw��*����;�,������s`33f+vt�Ab���s�q����[��6C�:�3�4���0V��eA9'������V&��� _�+���	�|�7����	1M�����},cc������d�[�,RC�Q����	d3�N)������gDl����3�>�ak�O,�M�c
��;�_i��-'���t�	h����i�������������n^ce�3�xF�d,�QU��2����w���q�X�3���V'rk�jR����X���mn���t�L�^Ru��������������������e2�����J`F�S3���x�x�=�M��/]�CU����
���$��8��QT��BfN4"�������������T}v�y�9�<:�����VKi��m�TyP.P�������7�������2���	�u9��as����&�c,�P��pi��A�&�%MC���"a�aF%��#������W3�J�����j]��"rp|��'��C��+S1���k�]��^��g��nm.�mz�����jv��GmT�C��������4�/��M 
j���K����[]�	��q��<K�������*T�K_7��>�2V�!���p/�$��XL�{�	���~��r���?�*����@H�F�YQ��wo��{�leA ��-��!���qE���>��5�<3��dH~��M)$���T^��x� �H�"Y�%YV�y���x���.?�	:��l'"��]7��Z���T�&Hdf���W��QQd��kk	�*��;2H�<_Bx�M��;�G����6*�+c���%�����������~���'��0Y�o�K��;TH�g!I��t�{�.��	m�n>7���+����>ee�2�,#����Ku$�["�|���$�x�C���e���]���������ol����3���S�[�cl&|��c�����Y����.-�1��L�<"�����:L-RM��f�vB	@�o�����*32��6(���3�8Qq�
���;���%l��OOG�S>���g!A�����Dh9�	���	�����
:#�Yu�2v�Q&�v"a�9��B~�Q��h��������9����j�2d���(*��O
G�e�:�@e�Dj/��yb]x&�(�jZ+��D%B�0����o��@,_����
J���*��c�������q(&xW$ja"�B����D"��
OE&�;>c�C�+WWc�6������"��}~�\�q��P���Ra$�T�}t�CMT���g&-Uf�E�����(��
b�y�ig��z����"���q�a�����8vH�����U�2��ro�99	���$S�����a��/�A��
Lh8��\��WJ�x����1�-�;��}Wt�M3���NC��
��n]���
����EE��d�:��Sr��E���m��vo���}u\Xh7k�6{��{A��%��`"#Ra�J����[�>���� �k�P�%�+{�I��0�)��j�)#�=Mw
����%Z��M�"��ea2�=����v2��8�a1�
rW��
��6�1��0<���W��-:uf���sl��pl�6L9~;3��,�G���e{�*�|���|�S�zu��H�Q�0���=)�H�����N0��{*��B4w�����Z�L�n��D ���m�6
�yK*�\L���.}-������N1�	��w���ro5<���`f���*��;�rwK���>PV���Hr������&$���R#���y��{\Oh��O�K���YQh~�����S�i�������&G}&���C�s�c_���j���#O�����8���p�e`�0C�L�|��Y�QS�[�tD��/�g�I���V��"�3	���!lXi/l��B��g��Ue'uI�N&��t�E���0����L]����B]���]�O�3�����;��4��bKLzo8y����!c8>=�K49T�h|�����E����0>A���J(��~���h��O�z�$����m���D������E��L��+�%��,����S��2�� t��)d�q��nx��7C p�!����M1Y;F����dN���<�h�iP1f���I8%G��������C�8\Y�2�`G��,V���3����6�.(�
�m�6�x7�`�7
�#@�t/%Qq�~�WG7;4�d�����{�S%$@L�9�:x�G���7���=���LE����6��D�[-�����oj0+D��	�Wv���mR�	%`����d4�����E��t<ju�K"*q�����}��9��l=��j�s)Ik����O�8����g"���K`_w��Z����~^9���>PLN��zu$�	{��ba�wm��.l�����Ck.�Q��+?�2>�S?��<�� G�lm�
i<`��f���@D�p+q�w�[=KH�IV��~5��jW�mG#-����vuBp�(k��#�V�
��#d,��e��s��Ba�W���i,l��������![�����T)?������G��T��i���@���Y��Y���� �f2dZ}�� �
T��B������^�������[Ba&2S��q����h��f���|l�o->��"Yt��U�7�{����5T��;��b��D���u&C��=,���^���+	Q,��s��6�pr��S��4�-4~V���?�\8���#o�����(�x�(�X������(�~i&@����
t�c�!���0v)��������7������?!_*�q�CXN����3^V\;��e�"=B
��1�������K��'��]P�V��N��myllmnA	5�@��p�+�F��4QTvUOi�Y��M��|h`Xe���<���,h(�p������rg�v��bK�k�������!gF�A�Cm�iRy1�����V�����Z��vw�#�������~���(B�a�/�5���b'�#���3�m"��Z��;R��N~�K�	���o]+&5��0��=/3r��?
���HH��O�#�	1	�mm6�`%N_,�f��I�"�=Kll��g�h���U��
H�H�@���6��PRS�Y�!jd���a��	��8����P�6�/�HF����'�-7�����r�����q�����>z���D��
��(���z���,��/��
>�	3�]��^P������Y���������i\�����/UoQ�G��s��`���G���=�����n���YH�O���W�g�A��~���s��A��63��"��p�M��
&1�Me��S5���g!��,�o���G�����G��������pTUMp��H�����VR��I�P:^d:uB���[�N�r����a�z|��@��3s$F������F���3���b����n����,���)w��W�}K(�|��?�-=TYj���z���O8L��8K�$�c��:w�Z�@>3)������f�� 4'+��Dl���������i�j�%S����Z����y}�p�G����{W,��C��}sQD<�Q=�����8>r�.�IjWz8��3�Wh��}~-(X<�X�+ea��6�Fh|�#��y��h��mt�P*�cr�Sv������gb��gGs���$���]zv�:�q�0����?�f��GO2��6���f�$~0�3>0c����]�����H��w�-N�zY	��J,��������)�,k0J��/��0#����6���g^_�]�ee�tn���t/��YI�w	m�8�Vm�>7t����8��o�W��/��������D�R��7�����ty$����";P$ITe
�k[����C�(��_������)a���%_�Z���d��QfI��������k����~�����{�/����{���J�~����|y�4!u�.#�5J����Pr*q<���L%��L5���J-�84��%�)ke�x����on%)������ee���4���v��.���I�`x~���$�!K�i�����TF�M�^d?LHd�^l4��a����j&���0b��8u�1V����(l���P�M���3BY��Q�hD�+��e%:�br�d2�����YY�@y���L,�����	�����wf �����D��!c`����nx���G�m���4�����|�h��LL���Q���~D��;J��k�L^�G��h��
A����zy�����8��z&��=T���"���KpF��Q�j3'��b!�6�s<��E���%���Zw�H?���B$������������J�EH��	�h&Mu13WU�����'m��e7o��q����k3�$%X�v�F�Yd�.��	�������Dk:�}�bM/}��F@J��Hi�)�)Ds:!I`���� �5��e��r������Kzi�TSJ�>��	���(���M�D�����#w8�g7��**���tN�������5���P�+���F��=X��;��dMc��R�,�f�A�F����Fo��4�����)�����hI'���8�R����P�iJ/ZI���H��Z�%=q�J��@�
n&�r��Q��I{��9�	n0����L��iC�,��L�,�XS�F/��

���o��6|l���Pq[��
c:)7��
?����]��
@-*�>D�tf�����c��N�I�K&�Hu"����`Q5�y�O3�e������� X�I�}�M�d�)3
�VU�\�%�U �����m&��D��HAz���k�=Y���9�#jT~`����������+�F��v�K3&�YE��hU�~=�F���p��NH2��5ZH�
�v���R���dWK0�D�
��4�����[���h��:��P5aT��n�YU����4mfUO����D���{Z���w����g����v� ���x=UM���5�4��Y���{�l�uB���-�C��
���z������Y�5�{dH����������2t�l��Y	r�Y����8���$!������n��[�T�xSf�nw����K��������/������sN2I�f�������3�^�dI��/���zQWg�a>nC���J����S��z���"I^��\���#�O�����F2y�'En��<��!�T?�`��^&��I������'�C�zmq�K����p-2S�7�
1�����_���N����?����,s	I���=R��A�
2]��Fn��iF�D^��.nS)���o����������_�H���H���I�A2b�P?$�9U�.y��/�Uc�e"C���uk�CRHG}<���~@�����B����
p���T���Ds-[%	�Jh����#R�rTf$�+������I��I5d$�Y��V����3��&S���T�nQm��C���p����=��+I�K3��H���3sRy�,��nzI$��wt9�N2�v'r��F���2g�z@UY��\;�v5�	�5������J�5�������u������0@��G�: �<>��qu��-����J�####/��i��ki���\8�������7I��-Pq)>�XX)r��<���(�\������d,:�������HV����EsKr���X�(o����������[�^sfZpB�o|�LKi-E���P�t �u��vp��^=�s"����y�3p�>Kb�[b2�|y$�)� m��A(:��'���>"���i����h'-s i�H�����L���1��������Rh���{���*�d
��/��N�T�����6�eI=e��#wW�N���bM	=�}��fivz�3:k����;jz��G��_�t�w�����,���sG�2��GKt�}C���^��q_1�c�3��P��5���F���f��MuO������nL�����"FB��G��@����T���rag.4��&�K�3�u,L��<E^��3��JB4)e������4)H��j��WB>����s�b���-�+hDd�L4���B(aI�����+���%N�dDy�8�m!2qW^vn�e#�J~��V��u��J!"dF��!F��K���'���3e���":���W�v��qnkU,I��q�I��%F�w
w���:{|��&V�-��� W���57�����~������U��^'��D[�cKD�P�`�+���:
��w�������#J{�J���� [G�Jk�2���WB��zlebj�{L�Y�n��uW���1�z�����_/Tr�����{Pa�;7�4[����X�qH�����!����<�����<gq�,�Nu��4�t��z�����{�A���Hr���X&l��Qt&WK��Lu���~<E�_z�-�Sf
�#��=g��8���a����
�u�U�}H���vB�x0�V��
i��tf	�H^h�|��7J�B�*�P������iz�=9	�*��F[���S7�d=�G�f�����O0���)2����s��
��.��zZ�h$z�C�&e���������RC�c��eEal_�U�-W���<5���R�$
�-T����)��:���5�=�GB�o������r6���,����)+�|��9v*�����~��2hNe�*��S.��[V6�v{�
d���e����M�l�*1MAC($M��<
�� �����H�N��������Hg�e��F���1���\K��\F-�)�oy$�	6�mt����������03t��A����\n�&�uu���
d2��)2��`>b�~�Nn��e���r'�����u��^��
S�3��fCYft�u�"{�U�g���� =�P�iO�?������O��9�o��n�d{Y��!��U�i�Mu���*���E��q�{�/����d	�O�1�����������cNa��mG�c�6+l|nB��N���pMb ���'�1��^�,��Cr��*8��.������9:��'u����U����F<d��[�^0>�u�OX��(���o�~��!�Vl��x"1TcQM��&�k�cYk�k����%������7SrAW*&�����"=Q&pl��X��*A�%�=�F)���Pz�^�+����2:1c��������1�<~A
{���Rt�P�+Z=����j�
������,��������lE�%[��\uV��V���:^w�`B
|&����OOy�!�w�N,>yy�� L,�.��p���U"ku�d~����
�����)�/��2��u������<ff�}3B����Wm�^������{�C��L�Tj��������6�-���C�&�u��?gPQ���ZI�������4��.7�	���ZlS��PX�_n+�N�&�;���ZB0L�-�6R�w�r��(p5����������������U�a,HHt�
aU!��rGYka�
�����}s�H��������������\�z��v�F@���KI�l�oW������C}��p�������Pr ���,jCFT�r��,�P�Uk�K&��2k�$Pkf/N��+���-n���]��ge��>sg|!�]��/[ro�7�o���V\�w��A�m>�6��Q�u�����X��.+�Q�8��i�X���w�%�g���jOO�:}:��2�Z���y8O�����8��y.��)�%P|���������]}�"�Jg���E3,�H^�p����!<�ZG%���������}���6����Go�3����p}g"\��q-Y�j���,���W��wl������K�>���G��~��~�����������s���yy�����V/o��z���Y.��/CL��z�n�5ek\V1_^���^�-�����U�.��.�Y.�Y/o���./�� ���)�1]����]��rY�t�(�1]����_^��Z��,�
Q.�����Oo��ZD�
)�b���B���V�_����.��1]��1�:�t���u��z-��K���m�|zvW�1]���(����[/�v��:�t]�J��������������8��#�����AGi.�Y�FCL���-�l-y-bR�����V�@�W-���z�J�RL��R�]���u[��Y��U:�$�Y�������!��[����n������g���]������3�r}���v���b����1_w{���o����/��������#��~���b�~���_�|\�_��z��o�3��L�~{���c�M����7������:{���_�M��{�7�������:{���[�M��k�7M������:{���W�M��[�7
�^����:{���S�M��K�7�����*��P����	�C�W��u���"���=�p(�z���������C�k��^���o��+D8q}��31���o�����"�g"
�>k�g/������~���v$�s8���B4J���VP�p��O_�
�CN&�1Y�����e�������?r�X�r�����@2|���tz�N��E�����g���1)i7|'p2V'�����KO�y����[�B�����O"(�~�4x���>I�I�`� �L�E�%Y��&��k��k1��Z&����=�����`+��66�e�&nLUY&��mK%Y�L����D#Z*.�:�J��T�j$d��u��m�E�l�X"���x�
L�4]�����������S�:�r�dX��"�)'���Gd�v�6��@��V*���K�&O�6J����j� K��d�%��'���C��������M"J}aI�������o%���������v�u��$4'gy��jb,#q&���;��v2/�q���8I�2�y�q�w��y �I#L��CIC6��$�b�,)�5: ��J�stvN�k{�0^#Z�iMR�����s���cJr�b��s���!r2��Ze�a\6{2��	���V�!�5��8���P�\�q���d��-��2��j8X4��k�?�{6��R�~1�jj�?NM�K�AE���J`��������Dt+���y����-�|����v!O,��E�"�
F�EC&6-�����������Mn�Ry��HD�`����&�uq��$0o{���v&�L;��1�Q����Ju������<-�����\;���%����{;�lg��������&�;H

G���-G�����g$��lw�7vGdQ&�'Vq�LheDN&6#&�o�����1q���ba&��>�����c]D\�0S�5O���$^���/%2��t�%����*Q����z��/����q�
isY�'��@������dZ��
�E?dQ�������a��{s=2��I�	V}�A����"����������1�%�����RK+�W���"�'W��/���)������-��$d(��Ue���2�<�B�^��A[�Jm��ICt������';�NN���^������r@Sg�~���&*��L:>4��"���L,6�Xn
��Y��I�T�������W��Z����z��|U�Ux���=�.:<�B'�UCFu�|n#w&@*�	2�Hbt>[*�������~��i��1;�,���/Q�o7�/��V�1�s�,D�e�gy�e������\���P�r�
=��e!,z����e/S���B�p���Y�C0d��F�&���W(9@Tm�)��6��A�Q�;��T��&F�?�+�U�	��v��E��/�r34��Og�h�u�`��E���<���O;&����\O��uDXfa(��'��9� 
��AQjKd�������#��C4���>�m��x�q-�	�����a�G�j��L��duM��f��2��E�	�u�EN�O7��9�^�]�tg��oH+�F�8&:���'� �m��B��������������~��z@L�=/}-�x\>w�%;��4q@�*.|��5QG�*V�:M�!�
����i�|��T���^0�@�y��WL�fx�����>��������}��.���������-C�y�N52Bmq�N�������yw��(���U��OG�/\�������y�=#��G�;?��i��B&������j���uF,&O1*�J�^�@2�A��%����N��z�bm���R���Z�V�y���##nA��2L�X�3�j��.�|o��'�p�o�����
��pQ�h�+��8�����
�}�Uw�To!~:�#o���KSd\d`���fG(?�2�[���/��}�1+�OhK{X�K��^�P�5��pTI�@�V�,1|]��7��m��T�2�P���dMCq��y�M|�N&��6���dF�J��������n����j�=�v�W��u!�0��`7���H2�w�~��\@x<�cs�Vj4xG;MK7�����m�u�>l!� !O���J��+E����Ef=������L��ddu���@A�E{����'K0��&�N���%��D���7���!�Gr�;���B�:Lu����� �J�9}D.��}A
hPK��i�M{��G[I����!I��G{z����.�}������l!�M'����7i��w���7.W�������>s�����e��<5�F�-)�yScLZw6��*��[����^���h�a��/�F�:���e���4��_Y��1/����:���+�$��j1v�lj��E���$K.I��*wN���K,��Mn@�"��
����:w�W1�6������"��!���O�$d5�+>�������	k.���3I����c����z&����k����eo�]����TDx����������;1;~�8���o����l���~s���	�o����;�h��D�]��|;CFeI�u�i:�o@V��b��������d8������$2j�@����a>���f?�88������?��>w��+����;������}���\�<;�4�3,���+u��U0D�t��]�~[���Q{���~1�T�{9P0��i��n��{�o�����Y:���q���q���q�W���n����%C�"#j2���u=��aW����7�/$��f�71s�B�za=-����
<��"�1�N���I`�_h9�,�d��a��q�F�����XYTP1�/�S�3���m�D�u	�,N��n�?/�5���7����@��%���L��������������"�$�7>�=�y^�d6���X���*�����O���N��'�|:��Zo}f��OZ�fk���� ,�I
������jK7��d������>�|����OES�����j�U��;4S�@������9�����P�W��]usbWs���>\Mya�,6��u}�%�P�.n�Yz��?�|�{��V����q7`
|�H�q�x,�BE*_�=G+,�{�Q���ma+��t#Z��s�s�9���F�E�����p?_s����u����"��5�f�i�7�L�|x���vJ������<.��,��/d	�Q��
��7+@N������
b��kzhU�������jX7t��bx��_��&Q[��^sZ����I$�m=�h���&�j���#�8Z������7��s<x$n�)����po@D]�x�h�tj��RPT��
q}�I�h,)�Q�&�y#z�e%(���pQ�)�BS�<�-��*�~�"�h6g���{�Xl��,S����� �D���o}��
Dd�Qf.K�M����{���>������
T������V�P�3o�JQ���L������{�y����k(�������<�%���T����l|��
���bZ���_7�9�,�v���Y���Y��1���-ay!}��|T�FM#+��!{�r�y1���-p���>��`>�R�*���j���0{���+�cf�1�{P�K�\m}�v���8���4�u�{����t��
�����#�J���K��F�}���n�����)�zG<
���vkt$2���������Vn:�vO+kd����s���@�nvn�Cg~������;J5M��v$�����@.��FRIl�g$�|���'�.��4�ZV����G�l���y��w7��[�	�����}�N6�W:����W2��Jg�x������G�<+�>\iDdv5�i�h�"�6`OG+p���(DG+������J#Z8W.��V�m��%�)��1�K�?�|������(F��#G���VF����*�7Z%���J<.��]G���'����,��U�#�����wz�����u$���{lb��:J�A�����x��s��JE� �A���j���&:���D����g?������0���vM�����H8����� ��>!�
�@�h��{v�y���Ano�*���"U��(bi��7R�Zs�y/���H����e��U�eD����kDJfS��=X��^G����:J1��\��>6�w�����:V|v�<�U ��)�P
}��bxd�T��7�{���khd�D��/lie������p�~?�(]����t����~q,��������X��v�^�"�`a�_h���*�u�_I4�)����NB�X%�������U�����[
�h�|��\"�-�y���A��(�a�
�����h;�Q�a��Ji�T�#Y��H�K���|!nL����$F�����\�^
���3~Q����rt���	����2�1�(����18��/��[T�NW���_���	p.�T��s�� �Q�50�{��
`���9��h��Pc/�+��Qnp�D��-�*����Cz(�c�N������~-N���Bvs�0��c������`x'���\\�u!c�;��o���x����I*���AQt�����xW���2�l�����Q7��� �������cyXm��E��?�V���3��9���U42����D��w"�����>�8�}�q��2pW��`%����)��n�W!8���.���pq;����O�&"�j?zf�l����r�;xZ�Jd���/n�^�H���}:�Ap�r�]�+����Q�^,>M�����O��G�e\V��M#����H��aH��&�=���_(��n��T�"��l��v{7���p�lC@y���|2[�u���3A�pj��c������}��T7"����[�\.��v=~�^�g����q)N���E���
\��O����4����>��_H�
�F�>E~of����N+)��`W�{�<@��h�4���h���������G��2@��e�hA6�NB>�����������u{�vEw�'{lW�3�����0'��~��\����	�W��vl��KL}�(sG�������+V+b�yC"��H[gz�<h���xH|Ddu���X'*�t��v�e���S��3t:Jn[g�[i2��|�m�}����O.1$�&��mw,q���JP:,���-:r�e$`��U��+E�r���J��k��"cKP%#l�����q�#T[��D��%���K7�%�����x'��P�P`������h?�dY���]i����/s�tK���U�n"N�^����P.��Ol���y���#��Y���D\p���h�6�T68l����A�T���O�f3#����H�}1!���y�P�����@Zfu������������E��gK����z��j+^0�{�@|$�G�%q��J�������i���T��>D��+�`�F��7?6��=�#{��
�n~}0�g5���M�Z�m��7�B.��{g��I>����Y�J�����L*��������~�6Bs������������9o�v����&8�"��f�)S���\V^���9O14����y�x^��q�O5�����]�
��IM3��HZ���@>�-�{&��M�2��Y��5������jh|4"�TGl���'$ ��m�	�u�F���6���M��P2�->C��]Z-U��9��v,�����^h���R���qDa�[t
���l�#A�d\=��^1j&�!���
�h���/&`��~�f�� �<�_����Ml:��D�H��8���k���������9l
���4Tg�����6%�1����xf�����S��W��$��[r��<������u$qH%+��lC<\��F`�xx�]��@��q�<1�3=�=uz��"��s�}����X�����yre���x!����`8�x(��@����R/$/�s6r��*%���qa-4O���d��~d���d�����j��m����(�f��K���@�m���=�r/�<�[�=�&y����Dd����u���^ *~���O���bZ:��w���Z�����G�6~������*��!O�OL�H��~V�	�Nf4;
�����vV
�	`l�I+�D?�!C�iC�� �O�8����x!|�E�n<�&��:6�Ie/���O<���	yM��* �����~����ch��0Sc�f�%+S��j�?�A�D������y|e��?�:�L�V�78Yn+\CR���j���n�
���88�}
J�?��Jc�pU/�u���f�3��a���L����/�kH����W���_"N{>��y;8��b
�s��p�~2�n%"�:�����oX}^$d����X���y1�t_s�d5�������+N���U2}fQ���Oz�M�[~��,��b�]S�G��e	�����
������dbjcd���U�m�W���m]�6�Tm:����V�����>J��4^?�f=�mU���L����V\��>�r�9Xh�N��<84�i�6�z����J����!�	�o*��U�7��8	���<@it���x@�t��!XG�O|E=^���GO352}V�G��"�;�������P4&��2���J�Y��2���q[�D6�8�����,GH���!i��<� �}�!Hd��N8:�����NC	-�u��p(�7����mC�lP �g�d�����Y��r�p<�����x�����ID�AD�u������la����jB3�1E/T�F=l� ����"��� ��4����e�G��S�_���Z4�Q���gRd�*�^�l�����B+nKC�7J�i20�!�!�<)ZW#d�!�=���iuKY�����p?u� ��1u�CQl�H�o3���c�?�S��8Z0`N6��n��e���73Z�$����nc��FB~��bA�g��P�V��9Z��'�� ����`������4(�����60h��2�0������M/N+�C>�P��a����0�rF�S�`�N���T��1� ">(�lf�"
*�hh���zBV��H���awi�����6hmh��--�]eL@�K`�xm<�N%|!--�V�}��Q��lo�Q+�S~:������M/W\t����X'5���b#�!��	�W���\�)8.���$/L.QD�s�����s����������&��ig�p������������G���&��"�m�&�������7A�2�
��..�wGE��6��6,r`�����~P��&{�����:��
O��LAc���(����^��y^��BM
9	;���������t|=���g�H�#Wt����OM�j�e}�T��iY���v��R2�<��7�������$��������}��@T	&�j��-�w�@#�����reJG9���dT��u���yx�|Z��t�����Q�1AC�x�@"Y���v��s�����������CM���wjN��7�����t�O�nR&�?O�e=�����b;RpP��x�o� �i�Gu��2 8W�u��*� U����$��T
H���p��dr��0�PK@��"��h��O����4�����txt�����5�F]A�+^XY��q��0���MRk�M�O���A�{i���[-�#�c�B�G,(������'OR=o�N^��y���6W2��.��3AU?hX��/�������"�y-��W$�H�K&o��M.�#����Q7\W�jl�����<|y�\jrr����������+�
��f�pW~>f�~*e$m�����$��-p�T��.����X7;\��)���F�h*���u����<i�\O�����c��j�nBT.�	�l�q2�jml��Lc�:����gF]}��L.��n(�S+2=�@�l���mj&8mA�e����� �5�h@6���G����n�E��K��/�������E|�6w����>}tG������c<2�x��bY_Ok6E�-�\ ��e
;�iC	�=�����6&������0��L������d[�������!���S���?�
D��4+nJ�����q[�Q0�������(@gZ�+�����%mh��"6&KZ�<���C^��b	b!���1mz�?�!�k��(d��w�*fI�����<�9[���N�=�M��UjLA���b��,i#"�tT���M��%�HR�����'��X�����3K�B%��%�M�aI;��0���&���/��)���������k�WM)W�&SZ�|m6�����;83�
�f]�����|�Mm�����F��f��|A�7�V��~����7���1�2mf-A%Y���x��!�l�l��4rq�A���^2	@��F|%2��QFbe�;��7�A��#M���������Hxb@���h���|E(��3���Xh��l�}"#(�B6���6�i�**�K�*�2�����$�
%�s��%y���x3A�nr����A%Y'QU?/�c(���P������8����Z��N�*��h��gFY}�(��2����:�"��a�(�v'������0*�
�&Uqs+�a���-��FQ:�v�)r8�7I#)A����������U�e$E�FR�H�4��78�H�����T�H�H�L��8�
h/,�����|$%�������A��	�#"�u9r�6�l5�?gw�q�1G���i%�b�
�8J{�-��fs�� �e�����1��56�R�����yS�������wC���Z�Ll���L#(�}^,��n-�(rA������TA��6�	�hR��f:��,[�N&��������25������c��yV���*�@[Cz��V4�^�n�Vt_�S�<-�T��I��-���'�u����qCZ.�'7{����v���<-a�����<m�c,����D��iY�!c���l��a���Co*�i���}��7y@'~��_�)�����G����D?��T������S�FT��cMD����;9mYP���{��a�G%�n.�a�\�Eo�BLj�H�}���[���v]��n��
D1�tjx��	���_E]H����'���rs�pG(�9�'4���.u��
��Z�����eF
7����Z�i����:G\�#3(^d��LI>xy���!_��"�';n����=��o,�p���*D�I���G�V6������/�(]�������(b�p>�����������9��7���S^�D��h�t���N7���l%	�z�~#�SN������Jb��^"^e��i�C�5lF� ��F��:��{�����Ktc�18I����<}���4�brO;9������6�X��Qp�� ���a�����<l����%�c��xl��Z|��cp��K�����+�����\S;R�9�*�c<UU+Q�~>U>L������H��)�W�F���@��P�J�g'����']=�y&eu�����#�O�WQ�bt`2�e��,���J�aJ������(j���d��������]K,IK��u���,/me�����t�����6�O.L�ci��M��f���@�9!��O}�H�����#�7����|RH�k>w%>�����i"���%�'0���|ON��`6K$*��K������8K������g�"�����s:(iY!#t�7��)"!3��E <e���>�H��8E�6/
I��]]��%���Caj/��P���!�+�
��y~���C�}�w�|E�S�H�g�D�YA������L�U���p�iG>9�Z~�������!C�YK'���[|6h����<�R_��M�|����u�-����>Ts�����?"���|�����h��P�-��}��
MO��z����|<=0����\W1]?������u/�UL�w}'�1_�;���r}/�����~r��Y��?����%��\�}�r�O.�>k��'z�����BZ=9����&�u�������l?v�D����Y������y� �Z:�n�SK�8�����>��?����jK�?�q�)�����a)����:����w�c�����������c�}z����G��L^QZ�#Lw����������������{_���9����F��c�T��k���S��y�~#�U0��vi��Dd��8W�)H���M��;����`[V��ji�*A�p�������L����f�e��x����m:�~���8��{G��b<�F����	�����|%7ki���LD�����CR���r���]JT��%K���P}�������8)���������8[F������R�8c���a6|�dI����!y�n2��O�������R��&��@��d��Hz���GT�Yi
	@�{��@�:�P(y%"��!R�6����%��q;>��	�c����w'#�;")Y����q���qNZ�i��F
���flvdN�%;?&�d��YM���6����~���������P�{tTd�F{\<A���9�X�@��F�����/))�����2�
P�W�������8v��>�Q$0�'��M�O5=v�D]'�i�E��P��DY�7��~�;�^y�*��Z�z�6L#uRd�X�'���q"z7t��mA���M�Ye�)�&�T��.�9/T�vA�^}��O��_�C'Xt]Kr��1�}!}������3���@���E?�$2;�dJ�.z1{��;���X^1*��b��Zq�!,������OGI�Yu���wn�{�U��r���.�Hu$@O^�t�����6E~^L����D��f:1"��_r�d�v�;5�g��"!�/����/�[��o9~&������)V��(�w������>�X�W���C�(�3@H��$V�2�������K���j�d�|�<-�/��X�����6]��������
D���z�A��ML���f	�����WN3P���7��[�)u�����l��+6�:Rg�k����"�D$b=,�]#Z��-���9�o	�?�%
H�|�m����q�! �LMg4�v$ulh(�F ��[����
IY��^k����kMM�����;�kd(�IY��^��[�H"����i]����\$ZP�^D����fw�F�i�?ZlP���T2-����;�s���N�����������}M����8��H���\R��7&F	X���es)������;�!��:��c~=Z��
������S������hxy�] I�7|f��D�l�!��=pZW��������B�0���hI���\<Z���&���T'����#<��IS:U��&�z�a�
"��C@������T�SoV�f�.�Q|�6ih��JV>����D�	��x7�F�U	��Y���+0Ow���N44�x��_=�r��#m���V�z��q�G�	�����Zx��b
���$�w�1C�/����|���w u`�$��\��GY�`%$�uY����'D]��J�������4$��2W�v�.@%Y[L��
�Y_�+�m��r����Y\�C.�:����X��7$I#n���Ny��0�~_+0�u����eY�I��d�H����P�jq`����L��s��;���{�*E�y����Gt$`3O���:GB�F;J�����~=,?^l���N������fB��-d��O0������1���{���HE?�a���*mh��r��4g�7�^	�A����."������+���)f���U)Z�D�Q�7_�&*P�BI����@6w����7z��1�a���m	���e��N#���%�G&��6Jv�l����h1t1��G!��3���,��D�q2�)��2�D���G������� ��O���:*@�nK����a����iq4��=R`s	����'��U�����B�L�����9��$���p�2Z�u�\�O��/�S��61]*e���}xh�T�z�&�v.{R��S']jH@L���p�{�i�d��{JU���d`CZ�����������FN�mj�GGAM�D���N��~W�"�b�=�Er��R�\�6�5S��67-��s�}�H��%;���>�.5$?`g��Q
���V��Q�Rs4��/��xOD}��H���UN���?��YK���	���x����"���s�_���u�o��k�_<�����'�*�/�a?�N���WdQ� ��u�r�������7����n{���e���AB�]�����I���a�c�=��;��:�gF;a��������r����.����hf��H�;�LV��|�C]oD�:�������dWZ���]���N�_�7+@�����:��iy���>>�mf�Q��Z�l!s]��e����
�v6��Y�dg���5l�bOYK�Z"�0:ia�#�)S%b���A��N�?��d�-�\��6����)���O
��a0�]��|�H�54
��[Y;�&��#*]������u������E6m�9��x���m�);
Rp��M+�}+A�hQ�D��$�[���Y�Y��>���4����p�DD�2	(����3,��<�h{�������������b0��CJF g�?<G��M���$5�4�oGU�������}���@#�~(���|�%��I��l�e<)KSV��>+�����~l�1xR$��������/�7	�1������T ���Nk�����m�' �
�x�*,bV^��x~�k��$�2����������q�|�R��r��������J��O��#Y���u"�M��Z�-���oWSezX+J@�������W��������n�T��G$�cm��Z��{�a/$`7�@��9v�D'�����t��<�����W&��m��N&�s��%`
f��8���[�LdY��o��s���o���<m$�>�;l�x!�9�6N��`�(�O����N�4�:5���F�P�v�O������`����h6*���vE/H���_�������JV�7�d,���i��7�G��]L��\�S���O
��n�-��u���������e�p��3�l[lAw|.N�~!�A"(��Spf]'Z-;+E�G�<u����$��E{����/��e�R/�DS��|����$�a��X����/�I���l6�)]|�szt��s��EX���S �t�5�%n*,��VtQ��,N4�7�����B�r�>\���Q��u��_�`)����#���U#���!�F�t��	�	ML�����6�<����~����$�;��UY�;����|�;[	,���������%F�l��ED� 0���n���]����ED�f��KT�����Gu�%�G���X�^W��*��.�{1�LLO���P����{��rM����y���F�p���"�KOyX���^�B����������/����c�cb�:�h	������SE��k�^H��� ���O�Q&�ul�J#o��l�o��XV���4c[^v�����Mg��zpP;��m"�X�V��z!%6Y��G�u���F�\=���������z_dy"^H�j�e�f�����[Xw.��%�n�����������8U0�i=��Q�
55���K7��K�wp�f��3�P����`�'��EDF�X)�
��Xo���R%�G�1V�e��X�IVX(�������t}����E[L*g�/��c�7���M��K:<��~�Xt}�<��9p�?���O��4b�������9�Yi<����Hz�mK���!��X�Y,��c����� ��L������eC�|��:��~=!-�u��o[Z#��(����j���e��'}"�.hl*�Uz�"����O>�5?-�9��6�F"��"��m�u��:�3Z�����x����r���m;E�`t���Vh�j�;R`u�}�v��_��X�"���G��QL����NKs��������
I������b�v���?yC��g_+`����<�$����^G�_{��B��o��q���{�������Fh�'�t#P��F�*n���g�6�v
_[��p�;���Wi@-�2Q�2��F�!?���6�p^�O�1�~�,�l6��"�a�8Gh�r�r��9N7�:iv�&����D
A�*J�
�O!�5"��e9��>9:/WK{fy}O����I'�p����*	�1���_�E4�m<ef�����$�Op�l�{��������S[�D�Q��oAd�5,H�F����(=��\������������:d��:p����(u��pcGN��	o�b<�'�u%If�qa�^8��3����s����4������=�C���&�N��1 bd�?H��5V���������=�����^�w�21�����b?#8&A=m0d����Q�.H~x2��w����/nztI3���o��,_�S!E��6E�\n��_���8rl�����Wy���5�t1�a�M�|�_�/7�V����������F�V�c�off9Oau#J����	�;����_������������]�����zPY��S�����#��n�Q�����O�N��#/N{A|w�E���<����U����'��X�������CB��b,`�TH�V��$���l��B�=�<>
�L�%�����I�(~��n�W�HU�;��n��Tu��-��?EI|w�������O'Y�]P���d���������!I".9���,��N�����db�E�-�[�����ds���^����i�������U'�|��B�A����&E q�9N�YR�(���6����wQ���`�i�Q>��(}}{=Z��`�Wl���,OC~�1.�;��o �.��I��2�I@w�������*��
���y����8i",��[���������I�]n ��v^��5�d�f
�]�0��(~:���C��
��2v����jo�ImS��Q��A.=���i2����3� ��G�M�k�D�,l�o�*�+Y�h��"�q�X�<����T3k�;C����{�Y&��p�i���eA�����C'B>ma�w�D������������,��Z
�8Y��l����s�=�Y�c�09��,u���j�������=�*�%W0��7@�+��8hE'3n��R$}��#��.��PN���M$��Z�c�e��m���$�!�����OGR���%z����Ym����>�*�Ri)���WyeJ��� ������F�����+6]��z+�%:�[=���a
!xu�I������9�I�����/���^~>����w\V76����ji�C��/�H��i��~� �"�o�2yg�����S��������?������6X��I`��o�\D����� ~����]&�OB�n����;zR.5����L�&a��������c�E�
h�~p9G�t�� ����m�E�C��t"*��~���H#^U�����5�Dq(�?�bP�}��h�.��Z����;r�YJ}��Bwv���������N���q���U\���G�Q��!����O�d��$����}��*��c��H���ES�\�"S�fn.~3/7��t*�����O^y
mH�z�'�����+_�������N���q�2Q��5V��N�uX�����(���c8ZA*"vQ�����d��x��<��"�w�-0���~�:���'$|&�~[�:�""�U��E�T�B��c����T�x���9k�AQ��1�*?���D�y�x�S�H�$q)N�)ldh���I�cd��R@��t=����
��,3����eq
V>[W�/f��������5�5�DxO�@��;��8�W����E�&�\�D�H&L���u���8�����-�P
���W��W.��@K��������dY���B��n�����{��~�<�j��� ��a�|p�W����V���-(�`�G�����@iI���bB���>���&m"�kc~�Z�w��U���A.�c�G��,���]~��h��(@�	{H���������H����F6W��G��
�$s��Z���X����m�M��>�Dh�J��u�E�7�V�*���"~�ij>n��dy�����q���X�����E_�6�i��i������<������c	���^�)����q��$2a�>��+��x�:u�Lt����e~���o�O`��6����GZc������ V3M{'�+c��U7]���u�dE�41��]c���xm]��k���MNY�,����%�����|Nq.iN���y%#��*[
�cN�g���a�A����!q�y��H?:��0D����v��8~1�ik ��d;�e*��Y���.��}�~�"�+b3���+���*�(����o1�OHC�p�0"^[*x�D&�"�ji ��1�FN�77Yy��~#Qt,C���/��a �c��qq2�O+��Q�����v��{`��Cu����~b���=P"X�����H���!E������8"�i�\�K��*m
$�/����qt�
h�_��n����-ao&�]��J��#�f$C�y���~A�������cY���� �x�(3V��[?�*`�
���f!�e:B���������������4M�$�	.����;�L<�\ov"s#�
[�\��Tn �2Z��{����/.QzC��:6��"r��H�(2l��qUX'�dX��u���!E�ud��/\�����WM��r��m��Q��OGI���8���@�?M5"�.nv����<|W|���?��7l����O<ke�{�/��ug��hG��c���Z
DC�}&��7�e��R�Fu����#�m6E��s�>��'tI��n�
�*��L#��O�t���&6���d�"��U0B��C��c)X���Dk�x�=����T���:"�Y9��m;M�����rr@��Q�
`#�)Y�@t�UG���F���+\o���;�S�������,o(s�S���^��V*��I���� D���e	���&�t��]������MU��Vj��������o`e�A��P��~]��w�g\����*�B�V�EM������0��B����twHX�;�����?/`����1Z_'��*���8����n���6l�<;���h�O�9�C�w'";����WT�������p�R�I2(>`�5�/xuJV�$����[������=��vgL4�D�����]��w�����-�*�����TQ7�*Z�XH������;f�v� �p�m�����xG�p~�
s�� ��e�R����z�����K�~��c<$IE�h�����|�W�~��7.����mZ�M�7��56s�d7����i$����9.��%+��J�GH1�8d�cia�Q�-�����,DC�����!��E�(,���1�O����Z�r0"xg����a#�������lCb ��O�wnG�"��x�,i�C����!��[Fv��-��b��c��z
���`!����//l�p����>�������w����i��7�b��hQ��:������o(`�����0y�:���QP�YzR�r��l�{���(����s�[$]51jOj�|�	O�#y�P���6��iC������~�??�����y�����OW����u�����]�;��W��l�����!���*��U����*�C���,��%\����Q��<���(������pm�x3M�)����R>o$	/�)5�S��Dj���A	4�{��Z�Ee6�E���qau�,y!M��n���II�	�J�x��^���|p!(��5���:p����N�aT���o�d~�em����x��)wM�����g�I�p�
���ON�������(����y�kx��MYK���t���vi"���lj���	jU����U�se:J�m�^�h�����oD�2�TP7���>����8���t��4�
�\h-�k
����l��F��J���R�d~LdF�+���n%�iv�J?/�)pw��z��;8u����wK�L�l�+�
_�$K�Z��
�\>M����2d:��=.���0{�3��=mL�:_nO���i#����X�nM;@�@kz���nL�������"�)�Hk7Sz���dG:J��I�a5���y>�$�\k��hG�7���n2�������>�j�MfY
hI���o�+)�h$D3�\@��hCp����s1]s;���eu��+n�q0��������)mDd
�%=W3anJ;���j���G'��(���'�<I��#-�f�F���a���v�����8ZE���7�����O&����)���g��ImDd�rV�������5<����\fRm�r���j:m�M-���^�cN{�[���E=�dME����_�1=3�aH���H��ZS����r�����[p�V|��4��)wXec����[:2c�PfL�+�������~����=�D�����L������$s�M���V�5��������
%���D"�lO;�Xo�Sw@��6$�R��TonM��W�.
?dk��X�;YS����iC��:��i����/5g"M�I�+,i!h@��!�5O����!��aa�<SV[��8�
t=M��@��@C��S�-@��F���������H�)�Q��bE�d#:
+�t��WU;z�����6T�����7����7�o�=��R����p���y4�	Y�mO�9��P���>��eC�`X��nK_Hk�Z�6���9}�b6N�EA����H-�|���>o$9u-�`�
]1�Q	��,���I�"0��m�Z��?1u���t�1M�i�	�&3��
�G�v|CC�_5w~�1O`T�~����������(w@�>l;iJ�b�����m����KI����]��7��v���q�j�[���6�F�dZjl����N���4`4@yr��&Y�5�����%�|�
i*�4��X���
��K����:�L���)�h"������&�3���mBj�O��LD��m>�~o�e~%�L�u7��K��Q�h#�]�r���$�N������jd��p��q��7��WI1����Y�;���m$���u�tS5����6��B&r
�z1�V�[B��52����XX4�zP,��<��E������yZ]h�3�
���'�W6��jt����M��Q���F���Y��XE��tG���Kj��=����V��_����4��6�o��X��(������h�H
�6�Y����y!M�h�e�>��,�
�~�������lG A�a����?/��*\�_���Dj���{���<�'2,h������,��;y���M���2#��~;����������t;�N�,���7:�&?������GF|t�B*k����[�>o4Vd�J��hFC�:1��c����mL�tw���&?�����#3��U����E��X�����$5�����{�@�r����~�����x<{7!tl��
	��\��Y�I}��=L��{��L[�G�IZ>��P���;���Y� ��p��,��A{��vI����X\�9������A����!�e��H�m��aB������D\�p�?�ST2�xh��M7�j>�
�nZo
����a0���fc�8,��;FG"�����=�<���j�C6-8� g4_e�/��SW�71�[�f�P�;�#�XW}{x���v���@T���4����#�uL�T������n"��'���!Uu������}04��; f���i&m��,�O�[?�����G3�\��YY�
"4p�QB*k���Z��H��2���q1���%�cC���M=/`�h�Y���s�� �S�qSM���[mz�����N��9r'v�}^�k��J��_
�L�������&�E�!-�����Y��>?��5Po���?��E�d���8l�H~�9�g��?i���#����D��-�lB*[D�R�zT���6�iq9��}�$x�O���3����7�r�����P����;s0�b~�J��N�v|��{�a_&P��0.�[#/Yh������4����<Ij�Z�3:��:BB��k%y�dk�]}-��l��7��`�}��P8�m������-���������$<g��,�g���F���>����UfCW�����wfg���<���g��bJV��������AN���D�������������t���F�9�B�Q�����h�u�W/WQ
��`B�'
"$uY��?N���d�S��i����;Yw�Xy�Nx�k�_H�s!�����9�o�u����d�/�����C�X��J���F}!�;����^[�M�$��@[�Y��)8}�y�/�md8*��R���x{�D�a��M����@�L/��������������|����
Q���hN���y����3{������r@���bNC#9|~Oa
mz!�[�@�U��Z,�r&�s�����~\��P���k�J9�r�*U���d0�j+�\��8i�mU�i�N���DShM9t����#�/���[��/�A�<rG�p���a���K�>%� QG�mQ����4x�x�^H��Y����(��S����tE��M�4wO�7c�-�����m=<Z�	�_�I��{E���	&�ds�=?^x�
%b�_��uJ�f�5�
�Z�d�::�����[:����kH��n1��d���Of��7����J=�<������*��HT�Em�DU���CZ5�>��1A�DS��R��I����A��Y�z[Bb5���,��$���l��%�;}��;1�+����;b�H����3h���(��L?��t$I�����v���)��o�N{[l2��z�R�r"N�KA�#����a?N�~��P���m�-����y(,Uw�|���@�������1�D���,��OD�Q1��<�d���an�h��C����l�S���
����:��>[G����X�v<Lo�nA�|���/�eso��f�����h�D�����~;�����sg#��(������s���C�B�
h'R��i{nX�j�9�w���*@Uee�@��_�����w�gk
/#��	V %���9mD[�;
�S�`���|�1��o�AFM9����A[�����:��%�����?�|�b��1�S5�+���"���V&�\�����#�'�!k�1Q��v��lf��aD�Tf_��`�9��X&���Z���A�g[b����W��P��Zs5
��s�y#}�#�[��d'�����*�L�6���w&���tTe�E��=��na��l
���iD���2@�&���W������eJ3������V�;�Q��l<�(��[����H���g���w��F��J�PP��	/��e*���|�'�C���,Jp�w��|H&�������R�����U#���kHi��5����MZ9�j<��6U^�����b�v�MF@m��*�d��K�f�I��u���I�zo�l7e&"�����z�gg��L �j����B98�m}����a��qp��xRD��
��sW�@�4�9���D��#&u1���c��$����|�o�u�>��H����1��6�<u:���1��:���x&C���oCuL��m�S�+WZ�|���>n�;f�{�3iH����^�Q��n���1}ZX���/�v_���q����}�o$*��dn&�c%�6�;��y�OYBd&��v�bxmNGC|ld����oL~A��q�w����1�o�S+s\?�X��R�V���'��Z&��=�H
��/M��8��N�8�����?���b������}_qP��}mG���v}��<���^����,�UL��`�u���]����������/����k��b��s=����a�y��]�s7��V�o��R�b��?�� ��w�~���U�_W�~��������������~�Y��^?���C{w����CL�������*�!�u9�2]������u��������Z������;z�Nnc�)��[�?��z-����w�1]��rb�^���_��W/����<�������QZ�l]���s�:k�>{�^������,�b����������_-�K1]��}t�>���]�����y'R���x�����b����[����b���b�~��w����b����K����b����b����b����[�����n��}��@��q�����C���R�
������^o���bn(��}6�kn�]��b������?�!��G7����
��rC�����'7����
��rC������'7�������?�!v�On�]��b������?�!v��!f�M\����7$�g�nH\��b�!~�������o����7$�����G-���W��pC��V����^����#������pC�z-�����_��~<��18tC����N��uM.2�����Y ����9wF���;�d$t�`���F%29+@�)
{PA4&$@N0��$�$�(��^��LN&�{�	4�����������]D�R�#�8�`V��3�$�e�`u�a��E�����L)s�5D�{M�	�Y���*J������(��S���
�
�t�Z��EFG*k�����HCh�$����t��o�p����=X�����NB��k*�1�TC����2��(���QnY�7����-u$@�d��2C'D#�BpX�	������.~F�A�FI���8���T�'�O7�g�y�2��Q#{�F0��2�l�6�?/���
�(G}%"2�����M>���F����{�
�H��|���3z�B0+�F��L�44Y�QC��h�a����4�.�y\��)�h.
p��	���������,��An����*/$`�q�8�~rBDmd%��@��1K��J�m6��E�_�=�&���G���������m]��D�����-��#x@F ��&~YSlI�,
�W| �t��&��~��0��L�����L�,��M�3�(�\�dL��9,���F��7��*4s��46
���Y����T��-�B�')����A�����M�j&#;�&�9���h��R���v#��v������=.^Dt'��X:���`%��'�������#<�8�b�cT#,�bp��lo9���G�s'������H��zJDOM?������=d�+���
UY�>M�I�`��f��V���G�]��Z��\0FS��c_ye�5�;��>������.�����������l<���6�dL7��v��	8����?c�����N�%x�WXY�B��F&^�Y�sm���-K�����N��Q�g��I�1�iN>�0S��{�������i �Y�	k>SIrmT�M���G����"#5��A����*����O�o��{��1!u��J�7�hg~�.t��R���~�`���������f/�=��	��5;�F	l���dk�4�L[�&u9'|�������Q��d�8'6�P�������I��\����Avwt<���aHa\�D<����UA��@#W��o��)2���};#���w��]�����@F�|+IW����:�����'���s@�����_��8���R�|�H����������Q���'���&c!����������^�\E���g*5GBBbp�0@���l�� �|�~%���%-����T�8��J��$�8_����f����F���kV���z4���8�')3����~��a�����d�3�>H��f���#"���cL�R]H���y�F�Y��-F���?~V�����~��VV���u':��/)���5eB>c;�o����1��%5��>?
����|@�z���L�i`��"����xM�q7j�H����;�hF��?���DI!�����L@{��(=S{��7k���\��7pp��������,)=�C����<�E��J�-���A}��V��P�
�k��;_��,��*�K�*�\t�\��e��Hc���i�����=]�[R>��<����0 `���������#+`��-�E��'��,a���x��K�y�`�����'
&
~3�3�-$z���1��b��vg��z��������{���|�sp������/U��A�x����r�1/_����r���#���I	:�/�u5T��<�������7���jz,'��`|V��C"�������C|�4
�����8R[��.�-#!��J���s��Z0dj�Qv|'����g!�Pf/9">��]>��^�C-X��s���{�����s,���N��&�=6���=%2��{d2������$��9HFNV�D���Z�����N�W���-��<O17��4{ �Q�����}&���1h�:wO�l����6U�Y_6Ir[�!(����
$;�33���^�����������t	#7�����]`&�Bj!:+����`����
����a�>�A�s "[����������]����x���En���������23lD3C_�'>0�A����:�Q�v-e���kp-A"-|���J�	��oOy�K?I�{�=�����z6�k�:�/��N�m�����+6h��!#S#�"���G]�sP�~Y�v����R��	b�Z�f�� z��E�3��Y�����.��|JBtcg�����V�$�Y����V	T���u�?�jH��D
�K=m���q:3jJ��c�bYa����}A0��~-(�����>��R�"k�:�n���rL�)�Tb��:����,������*� �
�E%}�5����ce%P��:�lX��`�qT���"Y���I�������4_�E6�E'���y���i�����7?m)D��"3I�@(�I"��D
����N�������x�x�\]��JD��>�7��G"�1i���)JQ2��n���`BtB����e'��[{J5��� Z������c�A�Ct@Z �w/;�(JG�Y�T3��������06#m�<
:ZK�����f$2f�;F�k�^e��,HU	���E���J�~�d��������3�Yt=}m���*���?�^%����U���^%���g����%�.��,{�������������/H��L��g�� 9(^�l���q�6����	���4�2������&�v����	����;�0��i��}F��������+J���D�}�.
��{����e
P���~�����d|�)�
�;��LDFb�l�	a�g"U�uC�������T���"��� ����vU2�]���&~��'�,����G��3�e����MZ�qI��I
�E��n��=1t��������7��� �3��	����p��:�B�aq�jta���b�gT�U����b�5���2��5�bw�kB:�d���]�B��������vZ�|����3UB4�l���[��z+���.T��c����\P+D{�~��<Uz"Z�3�'
��x��k�M�Dsm8i����N��"������!Q&�|y�����o���`�n��B��EjvA2�I'G���me�����oU�G]�`4����.H=��.��,�9y���Jc�G��y��*����*pB2}M2���o�&l��H&�}d���w�����n�D0(#�
�����D�����(��RPT�nn�O�T��%���Z
�>+�}�
Ai����)�V ���������������\�b��e��N�[W�7*��>8/�������7���`�
���}��#�{���7���{��
P�Y�bc�i�b/�v�!��>/�yJ��������$���T�9�wv������0�{����n�e���[x�7`���/La%b�����}���x���G3����t���'�}��<�ZL���3�l���&�U����L@�vO�����p��^&�������?B�GP�K��y���<��)��}���p�q!������q���yB�p&_A��}���\���G@���ni����x^���v��Hd�4���B��m�+u<���3���6�����/E@���qp{�g��my�ip����������ww�|���<G�	���_�]�'����0�����D�]�m^�D�������v�U9<�q����H��d`���
�x��������+<�-�+�CM����"Z��^X�i�����B4Z�u.���h�\�X�����G�S��1�%�F���,����%�����e\��MH������i>+�����3�|1�w3�M=����3{W����p�y�?��q��	x�i!}7�#�Ha�(&���H�I��T��vG� �I�5!�B���&�)@D��?��(�q�;a��)����"��g�e&�x4k��*1����F�����ft� C�Ta����wK���H�j�<;l.e�f$������g�*�22x�LK�MDJ�o�-�7�$�H9�i|s6��(��&��9�����A_-	���������@D�n��X��rxd�T�x�&��m#�'�&��~"�7�/lie���u+�p�~�J+��������J����,F`��� 8��M����n	X�	��q�����$j��dc^T'!s,��cY.���=&t�����{�aM�u�-�}D>�[ �.'��gx�l��st��F�V���B�������'�$�C��A�EG�/$��i'�9���`�D~��,��(���O�EM�n���n�[Y���}�*�i��%�6�98������z��9!60Z�V"2�0��O�{�f9�c�"|�N�{�	����L�xW����MA+�S���bi3iHO%2�I�%���td��R6\�e���Tj-�G6|A����������3��Cs�Tx������<wy����$���&����_�VA'`�km��2}�YB��0a*��������D�������=���6��-���1����k�L4.��~:������3����G��9"�vD5d�����Z���Hg���%�$���r<��E,]�^{�^���G�W�W���ts�u�D^��&��>�:�x�;P��-�x�U{������9ddsg�(y/���T"r��x<j=��j?�5�����~���H���N����S�J:�T��t������\��#����k����b��3��ma�3��g���2�����nz`������T7"���pY�����z���f{���~
�7��K����_��0�Ii&���">e���t��l$@�)�q���FK$����q(�G�����n
0~�k7����v������K���<�^��	�c/	[}��Q&��S�H�8{���|D��B�`�q��AE������4= ���.�yF���W�u�jF"�RI[���;�LD�H._����u��}���lO�!T�[&�P��0�>3�X���0��d�*T��./_A��6�@���Y ��4-�cO�qh"(�	��Ew���=��~��"FQ�7�����C-�~�4���~���~������p��s��~��y���S||�B���d�s&1�O%YFK�0L���`��1-FT�(&T���W��;2B�)c�]����?3�GO��Wf��������7��Fi>������V�������U)�Q��s���]f"�����[��!�4GZf��\B�?D��|���c���l��+�����������f���J��]�/H�i���7�)�Q���+������������
���{�	�1:�:��� Z<�BC�B+�����q� �R����N�x���f��f�tsHu��L6�����x�*���Dd����1	4������. ����Tv�)��sY14��q��c�s���@��T�MMeM������������]M$�y��@����'���U���Y��+5��l4��o	�?�#��y�		��}[2!���yOA�a��m�0V��V.�R����Z�DA�����r�W%6���6�����G8y�i�3_�S@x$���	�%��n���f'�U������:ma�Q��K��i�Xl
Wi��p��D7���sT-l�e~he
��n��aS@3jICuh�_��I����=�tB��]�T��������$���8��F)�}PO�f$�(����s��C z���x'�����9y����'��}<�}�J|"2�_?�A�|f��\���B���9@s`SK-����%�$/�s6��n'5��k� �������|nvRnD��x�K�N~�����F!���_�Ddl|�#q-�2����,BO�I�z��LDF������t���
P7��:i����t�_�Z��gE��Z�`#�."��{3B>)�?��������	�Nf4g"�O,��/Z!���05-H��`M:�1%��L.�^�v����>��3�O[-�8[R�H?�:v���^�!j_}����	yO��* bgA�a�-4"�j�"��._���b�.�Z�kR%��pA��:Z���f��������N��
7!��EBf����n�
��>u}n
������+}���]P�Ug�������������2��		�]�p�Y�
D<�	h��y�sx�kb
^s�����6k��u���m'�*�,$d�^V�ubK���P�k����P�*jJ�K�.N���M�<>�(f��I�ip�o[�E���@�r��d=^���;������V1NU����v�������+H�d���]5U�F���)�m50l\�,�9��Y )�
�E@#����
zn����o��k���X�<m�0����@-����,%�7���6�N����W�J�}���}5'�@�
	��8��S��6�M���U���`3z0��W�n�������&�������Ty�>�3�����P4&��K�����X�P_H�r�Q	"$t����q���<����{$H��c��^^����<����#�ZJ3a(�7��C�{X�a�Ry6A~�S�(��/x7����w���2�~8>1�� ��Y������Q<�0����0Lh�iA��8������*� B�O&� "_��-�a�������Z4�Q����gRd�*����0���B+�H!�����M�f����B�x����
5�_��)���3+�����G��p?5^�5C�P@[+��a��v9� ��A����h��9���!D����3Z�$'��j#��!����:���)�t"�������6�����������<�7<��F[u� �P�[��"����8	 #���)�0�Y���S����E�Dm�w�sc� "�A��b[V`:����������w8��?�p�a�?���N���[Z�QeL@��%�k�6�j�$.H�F��U�E��1*���e������������Bp����u��
RR�X��ld��G�q����+�����
a{���.�u��~.����N�Y����3$��zx�{�����b����j�g����y:L�g!���$_��tsX�� Q��F�*�..;�����%�<�JPr�� 8�dtwQ&�.�]\�G'#({��|���)��B�S-�)�=��4�7�z�W����As��"'�Bq^����h&(o����g�njZ�+�y�\��&x�[������K;-����pX*%���������yC�{o�}z6�7�W���t�*����|��|�t�W@�a����I��:�.�r�C��p2	�sj��"��k���xL���N�b�	��p���U�l���G��o:1�.Cl5�[�j������42<B��Ng��\� e�n��Y�S�x��!.�#7�Q����t����3�7�	��f���Z%��������w���J~A�@Dj	(��lT�Y">��gK��3p��4<��E-�bM��+�z�+�7.���I�m�v��_t���:T�E���Z�Gdc�B�G,(���P~�'OR=k+S'�J�|�oC�+�C���#T�3MK������y��If^�������������`'���x�|V����jC��	X���/O_�����p��gA�b��0���pm6Y\����k6N�I���;oN�x�[�pR
��x��,���`0��9r�)���F����{�%!'�U���J<X6�d�I�Y�`'���GH�!U��]��i������������7$�����@E�����O[�c�}����-����	iM�b^��d���Lps[0�XP�Z���0Z{����x�&ee����+�g����>M���S�>�������$s����u���J���s��lOg& ���3���t""�q2���4I?���1C��)@Z��p��c(�I���t""�]:>K�m���)���o�M��L��$���o���=4!�
�[�
�����n�K��n�t���!�kT�Q���}_��tF0����s�dIg��a��&�_\��)�������NDd������$IX�	�9���{�>������fI�P�+[Ry��Z�iM�}�\�m���.�H�����P��k�W���_S��DZ��������gu>!��'�����e`Z2����:MVf5����J6���A]C����!��L�J�i3k�x�d=Ee>G���E@*["��e3�<����Vd}�<w�H<���QF"�2���Pm_IQB��#&��x�d��'�*��N0�3�� (���(#]6'�d�����?-d��_ux���oQ�
,T�e���q�H�%pq���<I����#(�M�KI�+�*�z�U����\W���Qb( ����v��QU$������FY}V�@��C&i�c�0�,�(Q�c$���gA)���5���[���Q�b����!��l���3��T$ER�t-�����d��*��I�HJ;��")}��DR�<�
Sa����2����+��x,Ad��GR���PF� V������G-�;gl3J�V��cO����<�R��)�`9�	Y���������J<�r����C�Xc1������]������#�P���V,���;�A	P�����������%�2h��RWAUP�A�
�U����V�!e�$��$Q���1iY�fwR����YE���X��C9[1#��.NWx�meO�\{�m��M[>3�-�
������xFZ.�'#Nx�Y����+]y,2��_�LV"u�!jj�����+h!�k���Ue���"�L��7�i��s�#c�"����P��+��_��6��wd��;�*c��m�SDe��f������'�-+*���
����U�3���������P'%Lz]�����f��*X<�`�����!����	��������3�*wh��rs���PLsX;4�j�k�f��
�L�y3#~z0�5�����Z���;�uFX�wo:l��D�!�"������#�������h�Nh�lb��<�q�P� �M���#j?����k%!?�Q�����n���Q�
���h����	�m���Uo�����O(���/���lC�~ts~��������yN9E�8�;G� �������"�A<�>m������X��+hE��d�y�G
�D~���<'I18I�����w����Fr��sF���xO�1x*��F��\j�)18ID��m�\�O������~������T�E�j�J��n����BS'��sRU��x��V�~��V�6������8"�5dSV#���"�\����CY+�7;�]yvc��A�3�����	ai����=����Dt`2�e(��,��i%���J�GU�J4����&�?v������U[,I��:����me��:O_2�v|�m�AT������f�|P��D0C�f��Z����]�<����l`O�#��sD��/��c��<Md�'|x�x�$��	%�;0����''|;� g6K$*�_N&�
7!�9���G��=M���C��:�tPhY%-7���NjSDB$g��B 7<����u��T3���4��|�����/�r���(4W����Cq�����p~�G~��W�9%D� >;$��
�_f5}�2��
6dGYV��C���O�X�h�{�<=�����@�\�C�@b/������������[��ii_��9h��������v����D���
Bm����811��6�{��������a��g��UL�����������w��/����1�]7�������^eC?�u���w����������{�����������������Y~��\~�;�������w��8��N���q����D��\���s��������&��|�w�Z>����������������w����O�����������!�8o��d���2d����i���|�O_�g����~��_��?�7�����\_���_�������O���A�o������|�J�����~�:����P	���^��
F4%���9�<��w�_	p!��W����c~���'��v;=��{�����<�)����v<�@���evh\������a
o���G�����c<��f��|iA�I��W2XK���2�<K�KN2
`{�5������UJT���rx��]R}�����l @�S����B�!;��r�������)��tps�>OO���|B���d[�P��A��M����jn��7I�/�S[.~T��J���5v�>H^�;�
%�Dd��!D����1e,��9��gV5��W��I��j�vNJ�cB�!���m�;'-�lnV�	��w��5���t�.��2�"�v����SVS��|��z����y~���Y��^n,D����X�@��Z���6��$��Y���g5�
P�����RG�'gr��}�1h$p2[O��������;��fr�v���R����YzO%�o������.���-�k#Tf�fRdMd	�4��~'}�h3��hq��������d���`!��YP��F�}�->�����]��<|c�����a��Qm�SC������U.�`r��~�y���)�&����7�TrY��KMH�FY�OL~f���U�p�-�.�W
�u[(��!�����m{�c��]b��o%?�j��9<�M��L'��%�|����iB
t'����E~�/���<.���r�LFm"7���V��~���D�y8�g�V,�+���!=?���Z�I�e:�Z��O���8�����LN]��� c��'~��t��3��G���8�������p�t��%@�J�k^9��DD�����2Qi@���Onp���E����gF*ck���%p�(2������������-�e?l��hK�|���@i��r����l�Z6yb�%�T�q�����lR]�U���;!)+��~���}�g�J�$���>~f�`��1�S���@���G�6���u��E���E��[f7�C��E�t�fA��D��iw�.[���>��IjM���Z[{wE��7�X��BF��f$�M1��������9�r�b.�)2>���kH���g�����d����k@b�C�)�?�~,��J����W�$9��=�JID��pwb���xE��c���z&�GH$�wp�s&Z�+�+�;�!�j,������`��
�"0���'#�9-0+�s�DQ���� ���0��d������VV�,���D<2��*���v������'���Z�`�P���<�������wbBM��K��[���	�iKq���M����.���DBf�����`z��0��\��{���x&{"����G$�����)!I���E�(����d��.k�t/�D]��J�����%[�I	�B����0��-&{��g\w?B�mO;0���;}�p�	��C�Q��G�������,�����������0����jn�C,��W�Q�U����Q�3�-�+*8Y���
�X����gF8gt?WT)��6Z�1bF��t\	���%}tB	X/��=-��e����Ky/M�F���Xz�e����gt?���iz$w���#?F�,�U�����XS����{3�������%��������y�<�d��= j���Y�yH������
T�T� >y��&�����{���c�`��ADz�|)"��J��^�6��A��]��E����=�������Y4��X�,��S.3e��1��U"��7z���?��J�Q2���I��8h���)8-�&S�g
l.a"��8�9U�*�E�3#$�Zp2�efN�D�lU��S��yZ����{K`��<��.U��]e��y|�*MDdw�m��T�s���K�#�{���L6X��T���K�V�=�"�&u�PI�R3��{��E����T��i��>���]U�$���<2���Jr=�<�LE�����6m����=�%�oj�OE�K�pq��,�i���g�K�������L�x2�o�Q�ft3W����\K�����lS�����W�s�_���u�ow�5�/��RG�"^���L�_�39.�_�EY��#�|�"��
��E�9!��a����2�/��Y�T||�Nr��w�F����O�m{���'6^W$�CZ]o�9��l��o���{���		p���~�����C��JD�3����77>���������\��p�n++@���,r3;������63;Q���E����k��6z��p;��,H��q�U�6t����V�|�0:ia�#�)S%bF���:�?���K�����p�)��o�<��%��|/�����/�AX;�"��'*]��������&���&C�������t�MKz8���?��� �����`�����BZv�Ogv��{����}Oh�4����p�DF������<�>S`����O3��$���$�uj�A�O�99���Y���a�5g&I�=���*���]Ek~_=����6��nx��%�Y��c�]n
<	KSV�mo�A\2����~��<)�^��g��bE���y�l�����@6��
8��b��������$*��UX���0��/�f|N�%��D<7^�����@�>�U��R��r��uS����J�����-Y����D���t�q$��i��%�jr�w4���nn��{��:���DdOJI��m�{���	�\��v�8�o��tz�
tp;S�����v*��4]���r��w9*��7����0�ij��� ���s�cZ��i+����mo��;k%*�Is�A�v,H��vn��1/���<U=R�@�`��2bUrs�*�����P���T�q�����?3�z���$�*�,.���/�q��������W�H�����-���Is$��_����DF�T��x�3�o��v��6���n��a|����t��b��4�}�/+1����V��J��2>��L$��h������T.qK�Cx��0rF�#����u�?�#����g"2�
>��v�/������T��>�m}����e
E"iVa��E�E��Y6|�(�o�y������5=�����Q�!X�� �6�N�~�Z��l?��E�����D-X�k���&&I$���	$���3�����$D�3i����,�C�#\�4�(��w����w��+&�a����f,�0�g�?����&0�e��{t���BD>�P�ET�������:<b~C/(�]�k���U�a��{�����E6�������=�C��_�.H@��w�C����\z�	����3��y��{�X���N�8���s[�BQ���)U�_�`���X?
�y����L�ul����sF�O��YV��0i
��O^.��m"!�|f,���:��&"9y��k�$��&K�q���2�W#=W/50������si+��9x��d�8Ln^S�|	���]�D�y��!�gf���[	��frBZfa�w��jAr��������
3��~$���%�`�':�g!"�PY)���ym4{Y�R%B�m'�����{}���BYw�fL�,����bR=j���L���x���f����"E�%�n~��e1�������~���sB� ��3��q�<'w+��,H�EE?����q�>D-�K2�e�}b��/H���]�����y����
�����3�zBZb4��kDu�-L���N�YV�~R#y����lViE����w>�5�9�@��������_(p��wF\W������-�b�����$z����Z�)���1�x�<kLHe�Q�#�i
H�l`'V�k��=wI��mA���E=�h�O��g$�x�����������Z������������7yc�ap�f�X����WG��I
8m�+*@���pK�	A�����.����*
��eYN�&{Fa7�(����}SI��}/$����d���m=����c�������y�iv�&�11��D
A�*mJ�
�O!�&"��e9��>9:/WK��|�t��g?���s��g��H��i��y���H�`�8,��a``&I����>�RJ�
�L�l��*F%-P�D�����$���G/�Q.zz�\�	�I����1�����-L�m�R��8�[;,hA�8���[[���^��$�]�8,����P���sh�_�Y�f�Z���e�E+����6�D�2[� ��Y��YF���_t��vm'O8|���/A81��{E:����g�v�$G�u=�S��u��u����y23��q�Z�z�����Ci
�L)�O�]�����W���t='S�`cvsFN�=��B~x�DZ��OE��;w�Z�����V�"��;����HAq�K��}4}j��'!�4}�������cJ�)�������Z�l�W��P�n�����^H~B�e�sAG�T %�)�v�Y�����em�|oS��/�p��w[�6�Qe�R�;7�[���<������-y����$dL���uSf�����Ic�"B�
�=86�K�|���
���e�	���Q���B<%")����$��gW����Y�z�K��US{#��s����N����)���D��P��
n��T����\t���?3����*�d�?��uu���2��|/$���8Xp���'D�[<�����:r� Yu�b�I@G����q�����b�v��}8�oL�}/YQ-����c�!�&@\b�9�?%j�<�jY�9
-�2�����`��,V3��}�G��E8+;��[&1�^������0�:GV=�6W�W��`�y(&��H��Ej������D��*��
��M{�v�4�
��f�Y������{�$��'"�=��l����3H��l����5��2G�D�g��b�2�)���7SJ�����������{���?"�|�y�a�{}VT�<�
v]�Y>�4��+<� ���#m�������������:��~-HI��.MJ�����KC���u0i����.��d������-(�2�6?.�Pi(�YXR��e��\�����<�M�L���I�_���5���q�E�+�eus���.(����<3�����2�3J��k�f��F����dk�% g��� t�<���n�)c�����P�4�[z�-*��x����{���m[�a�����Zg&���2��� �f���P�0
wb����"zF�7]m[t���S����:�p\�������y
��x���2x,�#fp� �mAY���t>��gE:����	 ���v�8�k�yB'�n.�!j���[_�"3�W���:��uc�YP�O��y���
��,x����(Ns��
� D]����o5��S��Y��VE���uq����4�K��������p�G$4�Z�����pr�uF~)}����#���-���f�W��?��`;������G�<��*Gy�m"x�2��
s��	�{��n��Z9�H��I�����gR�n���R�RW��b:��_)��A�m�����0PI*
R�iX��g"�E�>*xO>��H'I/t�������!�zRH���5R21����b���n���v�A��;��WC���_�q��z ��a��	>D�%�������3�7�."BV!w��;\Up�/�t��G�)���x���1�"��;�0=��w��.��j�l\�$)�&�C�}����z���'R�H�~���'������_L�����Y�������cl���,��)��k�}t���9s���-$GXkq�=(H|~�G�^���Hv$p��b�����@��3��'��=>_�*7�0��k�y$HO[�H����A����ZP��J�3�G��
R�����9��!��
F����7:�
�#=��M��O3;`?�����&^{K�4���j��u%/��+��\�kR�	���go�8D�Dm=����1�����d��8n!����CH1�N��qg�d�6N%����{@�p��c��DP�����nL�]_.(������������w��	G��ja�wm��.,x4&�6=���bt��~jw>���*����pj�.9��'[�NY>`������DT�p�y���=+H�In7�����_����hd�\eL3�� 8o�-Y��bO3r�J�����i���
�������������)�\��)���s2�S�)��5�H�����:O��}��!����S�b�MN�����T]dLfw����LD����WWp�����`�:e�)���,��Gr �D*!���rS�2D#i��y^���F���Y�N:��A�<Gz����<�������%�Q�\��a�LD��==���Z����D��;m�=�:�B���Z�j���[E83�������.�@�+
p���T��j��*YZ~����z`\:�A�������]j�"�^P�N�E1wp�����e:�x|���i�<w�'b�Mz�M���c#B&!�[z���7�\��J4��T���Zxml�$���j����T	t��w���I�.�	#�1��\�� q��[��������%
���H��E"h ����[�3!Ul�u'�����?��0�J{hj���<��\���a7�������	�7�<�������!��z	X�-�@v�;r>��R�&�5[x`
{���_kMH���C	5��0��5{�f��~��`3�Q���c�+�
����I�WL&U����~��%V�����(��s���*�d�)<3�$������^�}g��������_+�CA;x���	��p�c���e�����|�JD�6��D������J*��^���8R�^x�J���-���y��������f-�jl.@����>�:�4�����Oa����
C{�����;�=�8���_~3/�o|���B�|1�p������`�dg?;���#�:��78�|-#�0��A����nV���d��S{�/�#���@�����Z��[�7�4�u��C�	��vS���'���������&*W`�a�ON�v��)�J��y{	8����{�=��k!��Y 5:�[���ef������E��
��x������a���~[�o���t�O��-H��W�J�o|��^�`���\�YF{�6��6
�=�V��5y{�
ZPT��r�D�����o����������#�ifZw�W���%��	I���P���,�T}������z!O,.���a����5����*�	iZW���vs��W���%��&��B[X���{#4�'�#3��yx�l�O.t^P*I%p���\�`%x#�H��&�v[P���v��uu��\=���;���5$=�"ck��7?�5��U��3�#�����@�V�FOD�L���P�H#A��R��l����|�u�������s{8*,H�����p�ig@�qUo[Y8���i}�����b���(�z�\�������j�����!gt�xd>��T����ko��O���l	y&�����";P&E4eM��K�����G?�Jv*��')�g"�%_�q$���'"�%���c>����D�����������?����|���_�[�������������7D=N�>j�w����S�~>���|U���~����'�g;�J��"�W�������(��1�O���E�>+�%���sro�L��8�nB�*P��	��
R�
{0U�%���UQ�
������Z�5T�����|^O�%�%s�&p��|u��gF(���M�iE�>+����KqBjN�f`kO[*_�����u@�}_��WgJ�7��
�9J�>v���Kf��Y�%QG���0'j7$�!K����R_�fo�%�Y�k��>+�%�����
������
0��4P���������n]D�"���W�6����Q�M���T�:B���=���e��]���4
������u�U�q���$M@�xP���?���G�HWFQ�a���R������e%�	e�^���Y��������(�������������jvQw�I���"�.�����
���3�a������CZ����fK
O.�J�y���(>�,vtB	����bGBY{2�7vz�ftF���er������xA�Q~�Pl���"������9��bm"!���\�����j�ST6��3�o��b)S����jf
�������V������m*��lS'$������yk������������X���V����������0���$U_��M@g��Yj�T�����}���,D���A@���Op�=��gE�W����ic�����,���3N��t^�*���V�����b��pOAZ���l�H~C�m���l�#�M�3����ahU�f
m-��I�f
C��w���Y��x���W!�A�H�����;���6�o�7�<r)[6����O�q>�5�I-@D������(?^�e�jj@�Z���o������Moe�Z��u���E�H3�\v�1����O&��EZ:��OuF�\aNq�5M���	`hF{��IJ2�i��{���������v�iL�tFZ�8�.�����:1�9*����N����0��n�[�D��a���>|/��"c3�#�;��'S��%S��J[Zu�t�w9�����p���
�A�����,���p�4�����c
|V$GYc�Y&�9F�|{""Kw�E�y6cEE~��D����a�h*�-.]�V�sL��+�(U���u��(�mk� %O?Uw�����gEt�p�e���j!8#�B^�\�A'D�`z���2Wh}���?��c��0���fdUP�:�m�Lr����J��	�1�wo�� of��,FMH3��mAE��R�r]~f{&,}K���l�����son�j���&�?��X�h�[^���'���v��g�n��lS�
�"�Q$��?c��g���1LE���M�]kJ�o~���D��w���Bf�YW8����
k���3!>L�NH�y�u���D{��r������������zl��jxFe*��.���YF���A�`���#�a'9�(l+*���[�4��4��eW����d��T�&�����d|1�4��:H�-Y����r�3O���1��:��I[����t��t���7�[��P��frqw��G�����Dv�������W����I��M��n�;���70���S=8a<~4d��x��c33���5/��t�@�k���������#~;�}BZ�[Jf��i�E\C����LyT����o��K���p��rkKv�����4�����gR|q��lsBO�QM
_�b� �g����S�
R�YI���'�o`�hK���{�����s���B�����t Sp�K
�.�hbz�]��1y�f���g\����D���w���%���=�~�pAzR�����Q��2�dlp�D�����H:��j���V�OZm���yB7�5�#����<�H�6�9����X�[��k�����ol6t?�"n���u:��	��J��?�����%����J�t{4N����ws�?�r&��;H�8C�,D��|�p`O�2[0�����J�
���
��{bQ��R&z��k��I�qD��D����a�Y���I!*��Y�awI��&D���x]7~E��vK��'�\c�g!�|�^���.����k�6�n_zY���i��^��b�n��V�������\A=v!��P�;U�-�)���,�y��#;���
9���4NT���#����qbA����N(�Y�k�i� ��$��,�Qm������XN��l���r�����`K/�G�=e4|��	"���K\����JD��B�'���M�3�<a5�k+�C�7+��x�	@���nud�f�������~h�B�"l�����9:��\�D���yp�e5dG,HO�>��B��&�uoH^���b4��s����V�Z���=����j�b#G�*��~������mL�*�g���xc;�!(����-��6��������������� �YP�������q�bi~��t���5&��{Eb9���o}F��	�a��`�|���{��������p������@$V��9XA��z}�
�+��4����i��zw��U���y�:�]��������C��*�_�U���QjH_~?d��(]!M�.t��\������3����Q�6��������s�5&��L��A~��n�3�\��n��y�G7�?I�'"O�b�F�Y*���DD��s�T�&	���}�EQX���L�����P8O�I_L2����gD�2�T������|�}3��+2��g��������EN���������W$�	�G,5���	��~/����D����+Y��C��q�UiBj�b�2tej+9{�X|�>��	��l����q�^h�+��RNB�&d��V�6[j5!��td��'S���P�I>l��Z��P_Y��rb:UA�Q��b�!� )F����Y�~�$��O��!�[�%�\<��~��/�����x�� �����~�n�����'���	8l����k+K�Q���a�����
�X ��� �C�f$�#��
�~����>zjiP�w&�}6���=p'�7_��T��'>3R������L��i�5U�m����G�jo�*�����rX����W�o�������-��~����������4�#@�e�W��J�XP}{�M�_w}�D�PWKj��rTdT�c����$���5T�cs�/-����������S'���U������5m�dB��Q�iB
�&��-�������%T�Y���Q����.��4}�De�@���,������)�%2t�t�g���GQ�����
+YAR������O<�|����v��������������$E�1��"d`�����)��W���/�^6����*c;�o�����t^#Z�#���cg�`hJ<#?U������G��4G}�m��&�3Ck
�DdO���!{�,V�,H�O�)���mf$����N�<�{"�Q�z���f��y3������uw�0w0��X�)�
O�!�L��3��%��d�z��=Y����kha�JW�'�X����H��
����5����%9���O�qy��gah�g���_�X�*jJh���;�����D�;�R�s����l���������U/v;Q��Y_��gv����t~f��EJ-a�"���pc&"Zdy��n2<�p����2�^>3�����|���+�.�[������0�4���L��	`z+��)���v��6�>v$�����f�p��=���g����
���"|���x����;,S&j��E�
���{�u��~@�-(=LiAT�
|Q����2�s
�
������w�'6��e�`&n/1�,��P�e��C�.xlD-H�[��:�bE�U����(`��[|��$�=��2b�~�������~@�I$b���q�g2�M����`�L�L��}B����>g���*%����#��;�U��I��'�_�Uw$/��c����2>���d{���X�����&'"���������}������(��p'A[�� �K+�y�Om��}���I�h�a��eK��W���oeu���Q;�yB<������64��������9���AQ����Q�h���W�9xS&*������}����m���vY���=���-�'�O��W��Ou@������b�
�n�Y�m�E`���6��1��)#������n*q�����}B��������t�1]p�H%�TN�� ��t��/x�z���l��t���T�pO��7��i�_��v��t�1_�����.��Z���c�`�<O��y��Z����t��\�MLU}���!���5�bh��{�;��������H����/���b�������b�����!�����s��Z�w.��mg���|���+�g������
��/_9_�\�
����*&�+��]��]~\����n�O�_w�T������C���O=��=�&rV�^��|�QmG����z���T4���������VU�����,e���r���\����A����c���
^��F'��7�@���>r�
9�P����+|��>v��"]q���������c�b�u�G0��@�����>��
B������:�A�W\��t�\�1���s�������t�l��rl���k��rk��?z5��?95��?�4��?�4��?y4��?94��?�3��?�3��?y3������|���\���<������������7q���q?���{�������Xn����-������nL�=�����k����o-�;���-��IW�O�b�+�K����nKrc��mInL�����q�>��>����7f��l���DYA����8����'gt�eK��	��gE��f�8�3��?{a�1�m��������Z%2E @�r������T~�q�F;E:sJ��I�i��i�G���t�����L��QD�Y�#������cp�L�%��D=x�T��O�r eu�f)�5D��M�	�o\L�U�d�/�����n�����PP�
�x��K�gF*kb\~\'=�������t��o�+�1i>\��7!���}&!_�i��hVw�!����<�2h����H+��#����Z_����Nth�v�����$���<��kw�C��2����8��&��|��t��/W&Y�!�<��X~O������Yg�q��Y��{��
{(G}%"2�����|��`I�o�p.�
SI�/�[M����dA0;�����g���*<
#�>-O��t1��v!��Ht�	�/�����bU$2��5�+�F����dAC���v�DB4�*�6�J�Z�#^��N�C�g�mw�r�����I�S��e�hg&�����hu?U�����[��@:D��eImh��,�u/o �t��&X��������r:>����$���TK&������������>+�.~��^��B������KvW�!��@����%������w��zlA?�0S��k��=��=�w?���T�~b���h��&������Y��vSW����'����~�p?nX#���ma�cT#���	�i�����q���'�����W4t��wz�{�������n9F�TtBU�/8`8YS����H���rH�NEwQ�j�x���a/8������� j�/�;=|����BZ���8�A6L�"(H��&���f���I�
��p�����������������8�����Vh�xMTRd)�v��U�=��
������&q�;��evLe���'�f�2qoV����%��i���tNyK%��]P�7�B	>�pb�EFj8���U�*
��C�`E<#qA	`&Z���Z���`>�7:�8��o\�D���?���v�����*��q�&;������3�����io�#n��?x��gE���VN�����5�<��u\���>��;ADY��[�g�rG��#�~!L)�x����N��xUP4y��}���Y�2����vF���������m3��#-P����4wn�8ubU�G?<H�����j�\���P����;�L�Y��_G�1�S[�(�b��a�$��;�7I/N�j���!�>v��H�|���Z�f��%e&���w�v_�}����{)�ARd�Q���>\c���>���2?���J�b$���6������.�i++�O����	K���{��7mB>c;�o���r��1�}������<�����F=~A^&��{�gE�Emo����n��7����w��Z��C���B��%q
�^< J�<��9�8+������)��`,)�y�;7�&���SY)�����L��wo�
���R��/H�U��r��r���r�E��5m���u���'�A��7�Y�{���*�|�S�~%?(#���_LsbU�?�<����E�����%,�>�W`�:o���GvW���M(�f6�d�[H�"M!b�)��������[E��8������=�gE>������M^���	��T1�LMqCZ����|	'B\��}�nd����'%�0���P/���{����%�����XN�����Ht�D`��
g��$���O�l��u,���E+�-#!�Zq���s���#��z�������?��2{�	�Q&��]\������D-X��s���{����/:����{lB�c���S"�z�G&�[��hi�JB��d�`�J�i�E���q����Z�@��q�'F�����bd7*7[�q��D���3m�U������r���*��'ITW}�� F/��+��6��������0��
��o���+�Fn.S����N$��Bt����{�.(��'�i��[Os$>"��>v];bV�"�*F�t�N-xN�7e�-rC�_�[G^����A43t�����)��Zv��##��nL�T����r�5�� ���>U���b��ik���<������ ��A����?�L���K����D�&��s��
���qfdjd\�x7���|�t��#����_�,(��-���u1LI�;�g�/4��������g�;���\�)	���1������ZE��d�cV2[%P�g [������H�s����v�nxFM	V�t�Yo���m~A0��l&������>��R�"k���n����L�)�Tb�������,��������ZO�n�*����zs���ya%P�)?�lX��`�sT����qO2������ �y�z�f����k�`g�f�L^�onK!:�;�I�"@!XM�1�D�����8�G����$j��6�=�k�.VF%"�U��)�y�H�=&"��� :Ey�X��L�NBhY�,�D�|kO�C����?DK�P��:N�6�v�H���egE�>+�jfc��r=y"�f�f��#�GAGk��"�_��D�L��t���`��*a�XGOV|Y��f��TOI���Q����{���~�ug���/���~������/��X��kS7�3J��{x$��f4��6��6.zr�� �3y��-���
{A�i��Q��MHe���i��0�jBn��.�q���0����
������gTP1��)��,���Fl""�[2����1���,,k���"���{[P������9��Od`/��l���HH�>��_���*�N
R/l27��� ����vU2�]���&~��'�,�������3�e����M������m_���[�Qt���ga
�3@'�l���|�q��S��`p�c����B�����3���t���<�"Y�	}�Y��W����?V�����h��������'%aW��,��K����_����k��h\&�
|V$��8@<vo�)!�{��`���Z!�I<\I+��JDw������k�O\�5�&O
"��K�Ikv��:i�J�,�J+���D-����E���n��m;� X����w~��]��=�����t���������V�|�5	F�+�����s��y�����1'���Si����5OT�
u�~CN��p�i���#~7aGrG��F��.`x�{=�fo�:"�$���v"�Z��o�	o)(*�&���N��XR>h��=�����^#(��;\|���y�Hv�}2�)|)rG��!�GG+��.c�m�3�$�h��;P�6��������>��Q�}����)��'��^s*��M���^1��3�Xc�y�@s����:$������6oBI�/,K�N�����2R
�`��������������9��|V�n����ig��0����
Z�>���#��/��W��m&x��d�_��Y���0j1�V�����DW�w�7U�=�j��A3{���'���7~�6��,������y�S���
���C����7�����/����*�X��d�+z��5M?z����>#�q0��j3�?��9:���}j��E����b�L������?����� n/�hp�m""��`ck��������^��P�I%�8��H@���C�I&"�;�#~'��*�q�W)�r3y�z�]hU����)^���
,^��������?7��	w�W���IW&"2���iE�R6����h%F+3j�h������V&��s�b�K�boc\aN)����\MZ�[���wJ���y�e\d�f$r/Vf�i������ae�x����	p�������3{W��+�d�y�x�nF^zZH�
�H5x3J�I<y�G�H�U�����X(eA&�x3jB\�pNrM:S���������E�|��Z��USpK7/E�Q��(�H�	��sx1�����9���[��;�m�0���TI�����~V�z�����4���xPwY�^EYF/�i)��H������|7q�����sS��y���<g�=60�`B�WK�k�(��>�E?3���v(��F��#U$�#���������Q���I�YaK+����s��������o����}c�_��}����0�Wse?��:WSI�\,�����\y���~VH��{%���8�����t}����m�����?S�(�|�vE��]b�0+���k�X���=z���T�-�h�Xf����G��]��Q$\�N���
nt�U��"�����%]�V:�o�����o�����<+L@���,��UGu�%]X��i^_l�����uE
��y��;g���~~aJ�q;��J��*���G><;�3b���w��y��,$�������Q��5��='�`~AHb]	������B��5	������k@���/����^V��[!��`A<w}���6��p��Ty~K��5�sb>W����2<�l���P�������;s
]ID5�kuB_�/�7w�Lv����~�����d�!j���2�t�>��y���#��:t�{�t�uj��/�Z	����0k��DW�Y3���L	�+*��z�&:?%�*x�}"�X(��/��@gW���v��	5{�z��T����V��{����l��;�5R6JT����+K	y���SrON���-/e:�=���U26ghxv��#��C��
N�'�����C �������!^{P��{z����
Sb>�3h&|��3�L�Z4��"~�xzw-a��2��:0�N���'	|�zC^���Nf?�0C��~����l���0_���zC���ajT���)�V��HNHJd�����!�<4#a?����y�O���v�����
�+~�m8]�����v�*x�O�����C��*��@��#����u�m[#�r��?C!�=��������
��N������������x��W��|��)���$����G#��2(��U�u���QrF�$��Z��<$pV����Nt�T���
a0%���j'(����*�����CG6Y���t/AT�=	#����g�i�n�v��d��d�_h}�.L���q�^�~���ta�����7cE��qU����Y��	{���&Lk�WQ7�����!�HHH�	���������S��t�f��W<e�K�###"O���G�����;G~���@�tQ	�WQ���s�t�v{3���S�1_��TaMr����I���������Q�3:����&�|gX[dqc+���v��v3��#}�])���j6�M��z!��X�d�1��X���}���M�M!~���
�7�
����	�M?��1%�[��3��o�t��)�������?�2��H��g�)I��
�#����B��*k�t�j���{�PN[��S�-^��IU�@�,����g���6p�f�`�L�i����v^�������7z�a�*j �h���L,�^���q!`h�b����*R���|���:����t�x�&,Ez�VZ��yp�����v:N�J�s��"3���>��4�T����3�|���Ym����+��,�K��[jpX	e�~�4%����=%��*�j��O�b�|�
Af���*d{����C��k�����)�PFO7�w=�
���L�u/}��yz��@��\����tN8���-�����5r��-��K��L�v/ �f����ni�M��?��^P������M���0%�/m�&�~���,i�����cV�,�
B���6c��%��LVV���a`�(��b�H�O�������f�td�~��FG�����Oi@��\�nK�G>9��o�O�<������]�P��<�l%?�Ek3>���a8RI���(
����a��-u�l��c0)C���^�d�O;:���o�o���ZF����������|��Ub��yt�(�K>G�8�"�V���G�b�R�T���7\��RX%h�����YL�����;�\�mn�bm���~�w���He��iMM��1l0,���~��+\���}������
8i�d�����0�:v���^v���������{���M�����f�;��E�QY1��,�M+����)�
&��6���0�V���?vF��9����vp������S�%���w�v�4�����DI��P
'ZH�O��6�C�R.LkE��{2�G~��:�F�_����^��U��,���d`�X���!|���������iP���0A���_�����Ow�)����<x�1%��x������dg��S�����������xn���zkr+C��Vz>�2��7a�q���1�S�����~�l<v��/,k�n�U�x�����2��*�C����/�����7��1�;kQI�u;h��";���)1[m��X/><k�2%H�IIj7�d���CS�-�����ZQ��U�8k�>�����1o4�V���T���I�z�Ox1����w�k�6{�^I&�x�m	g����|`V~j�+��c|P
~P��Q��z[���}�]?�eC�12s:�1�):O����q��1��B a�����b�@"{'�����Q c�F4:�L�-@F�_��I
����{��6��\w��LQ��6���&o������H�z���
���,*	y~�A3�9��������������@���f)�)����sW���c�y|k�?�*������[
~������;F�c�y����pR��p��m�hu@������*0g���r��n�h]�9�1��Y+7�^�����e�y����>�3C�ch��G��u���2�1�r��s�pN��m�H#@�2��Vb�Jf�^�-�y�+�#�/l��',�E	�;�>����2^����4c3�>��V �pFIg������������/w�B���31�m����~���9�	���w$#��ua������{wpm��E�*��V2����D?D�\���F�F?�1����/�V��5h�l ����p1?�0n(����QP�z��]|�N}:o��M�����d��[<�v�4�F!7~��?RE
�r�\=��}!�E�u�/{u����'�����lqA8���5��C��Ct+��|YG�9h����t�����6��	#r���P�y(�mVl�@
�����U�#'��~V�_YL������`���3��?V0���]������	���m�~�VHzuM+�K���2�^��C����<�7�:�c�����E0�s!:5��p�0�e�"���$�����SA�QfukA��rF,�d�����������sjh�a���~���-��M����`S;��C���ni���9 ����a��sk4|B�������o�l~'��&�k �����'r���I|��	�ya����L��J�e����b4l�52��SL��i-���\����"hd1����i���fG���K�u�J�����/Lm�[uVP����������D��w�S��3�	��r>��41!�p�+!�m?�����
�\=U�������4�0��i��!x�hCxy;i@�?�Z��\*;5����G�6��}��T��kF�����H���aJ���R��w����K��_f��ka����0�FV����yCzcxqS����������t���P��ETF����j���wEb��-.���T?��-���$� �w�,�KT�3����+���1l���zl��g���9���z7�A�=}L�i�X�Ff���s�
U��������mi..������D��m���v��Bz��y���<!���k�!����aaJxR]F03}r5���};�������\�6��������\>k��*��N�����G��J�GX�o�a#MqBa�v5�P��Th��s�����{���*����^��<&�B_��F�y�+S����sc�WBb�J�E�O��YT���K#�|lf�<�,3�w//�y� �:�����B
F�n�4'Q����zt����.�}�.k;j���d�j �`n��$���L�2VM�2/e��}=�[��y� ����d�0����63����H�	�����U*dgW�yA	�a>v�y�
����Jx���|NO�����#p�z����L	��'4�=�a^��qZ�<��g�l�Va�O��E�0m�F�27�v�g6�CIG5��`25���f�P~B[��5�/��S&��Xf�b������4���+RU��63�������A��l����]X���V�,/j��j97�r�����a�8PP�a��"�@OJ�1	:���<�S���6taM[Q���2�r%$�P���6U
���P��wF��`

�0}���A~^$�@��c��R����f9Lo��O+�,a���F�[%1�C�G �0���94=�q`ho��}�\�7�d�l�|���\V�W����������|��F�~�("A!��f�	tz���i�t���m��y*M�jm��������s��G�y�+�`P4v���vR��t��B�5 wx��`P���f]U1��qZ$f�`�su�I�������p�X�]�x�X�����u��_�.��x0�T�n#����hn.��U������Q�^0����"��z��� GIz��=���l�u<��!��R4���r���'�Wf���7�2��Z�qN�s�H�t[	�HP�e�|�^��,��%�����y�v��q�q�lP�������*�}�F�`xR�bXX%;6����)����K��Q�y:F����Q��iap�.k�!7���1�_D�1���d��������!{��O���r��S�r�\����p��N�~����-�a��x������3��v�0�����8�Y�p{ Pb
��7e�T���H�\�v�@���E��0������Q��c����f����H��H��������dx�'�/�\|������68�5@�O���*j�D�G����K�0B�/@a�o�U��?�t��Y.�$������>f��{�rR�7��Qy�U���dE\��M'u��W������Yb{/KT�Ve6�meh
�����v_��26���/�����m��M�:�j�99��<���	�@-_�.38x��s�����3h�Io�uk���<�0{����Z�'�L�Ml���8#��,���}�����UCQ97�����q���/�P������t�-z��r�|�B��u���w/_�
}����G+�����n���TQJ7$�}��zJ��"K�m)K>���8���D�zq�Y����Y����.��Z��$�r���1�ZPw�'�z5:�7��$%�!����l�%����Y��-h���&�R��>�Q@�P�
����E��*i��-��]�2�Y5�Y�����_U���g���H�8\��U0�Rp�6D�n+*�a�yt	NV��M���%|�w�i�I\{U�`��`I�������-Mj]H�ipi���$�v�T����g����U�����uE�G�u�$�z%�^��PK{���1=���jq�����e�q���_u��+|^S`�KZ����H]�4B��E�|�N��If�>��������h�>XJ��9)������nZ
c+$9E3�E��n62'��G���h��)�s�P�(�!ocs? ���y�N~�}?���*.(��������:A�7��F	�����F�]�V��P��!��8����Ee�dl�����}�1zE�-na[8������������7q/��G���-{�[��~T�[�c#r��?o�R
7,W�����"��e�����Q��6�+9PtU�eH�f�ez�Cr��D���U�6"'�>CE����	�v�����|,$���V�2@�"o
�-g&�^P.c[O^���*�+=�+��\����*�+�l����\�����*�����?z�W}�;_�������k����w�������W���
��|��Z~�;���F���w��8���Nq�-\q�����q���)�k�8k�g-������1��5y.e�5��������&����PQ.��_��^�K��{{#�����-�����?}�M/��~.�y�OC�_D�v�����w�����������������<���?�����u��6����
7PN�KH���M��hJt������JD�n<��%�N�D��K�JwfIW��s������JP:l �C���x����e"F]~�����+�w�l�����f���o����G������L�s%E��+��Upj���	7WU�Dd��+�;9E.�������������<������}X������`�+��BD�_d�T��gb��SE�S�����V|�\������A�d����X��b��`�s�]�
 k�M��K�����N����	�����T��u��P�JD�MPB�������U����	�#�����JZV;�AZ��C�;�xx���Q��F+�P����.�VP�"�v��������_m�G�AT��f� �Z�7�N|[Q���py*~���������
�|��_N�]H��\O?��o���~u���;��+��:U4F��:�"�Z�t"�x������aG>�����g�=�~��;
@���8
�lZ>�z�v����"��BBN���~'��k�v&�s�����2���?�I�����*`� [���v�������kI.�1�����n|n�6�Z#u?�e4m"�~09[R����f
�"�w���&&��J�U_jE>��op�c�YQ�1~,��Nxpq��1��XB����~+�vF'6b�<p����Z�]��Ru�n�1���%G���5�wZ�����I�"_�����`�K��o9~&���wa��{D;�D��Z�Z�+�oa���������y�B�t��T�lO�����iIoz�Nv�Z��X�h��m�j������78:Oj��qE������:�0����C%�5��f���o4�n[��aA�8�����u��gE*��	-��A�^dA-������9�-Z����o9���_d��$P>j�[3��A$���Z�M���.�)�F �uX���c���_=BW�_=RSb%��b�'oI�)��u�@���9xKI�D	}d���M�G�hA�{Q5�/���j��������f��dZ�MG��;�s��������+����]��s"��c�	�)�����x��"[��\��K�|�K����,��y�q	z0������� �>OA�Y���������W�$9�p��R��M�Q�u;�^M�0fZ��X+�	v��9��-�(�
w�C�X��T>f��af+���,J�|i��z��0�?���L�:�d�����f|�Yzh���>'��5V�������</$�P�8�^��*��E� ��=�������wbAM��K��-	��������L=�����3~	���yX|cN��t��$�w��!���~ny��5���t.��$����e\�@H�������	Q��R��*���l�	����?���XH��=c�&E�m���R\9x���c� "C.N	���6����r���9�=����[���v�`�_mEYV�n�m+�B~�k�����izY!�LG�X�83b���y�Q��8O� =��	����~%���P��%`��6���|{1-���^�[i"f�O;�8����+���h����i��%&���#O#x��tAm��������\�xo�^+@����6����1V/��,�9q1z@��	����3�%g:�I@EK%!�
���l�`!*_����Gw���RF$�,�OW�Hh-��A������v�d���G����=�k���>�f�&��YI��3ex����G��[[&@x�O���VT��%\v<-��vb
���dh��L��%,D���ZTE�$���BL�����9�I���Ne�N.�o�d���/kS��BP�Q���� Ui!"��ps�Z�Yo�������������L>�v�T���Kv����"�&������y#<��jq��Q@�"vZ���[��j������"9�Q�@�G����H�26�Gt��sE��(�9��z*�.�h�HbSt���0mZ��#�����9��L�xW��=����-h^#90k�s�f�*�W+�����:�W��s�_���u�o��k�_\v*&��x%�/2�a��N���WdQ���`4���D��>��r��4'dw3��^����_�g��i���}v�����6����~j�mGFx�}E;���")�3�z�G�ib2[��(���f��$���{�;��C��JD�#�?`������]i����JpUw����Y�a���]���Sz_���Q����l)s���e����
�v6��Y�dg���#l�����Z=,�w��&�:��2U"�����5|��5i�H�]���b55�{�R��)�v�	�	����/RdMM��6�N�H�gF�k������[HS���_`�f�\�Oz8���?��� w-]��`����u -{�Ogv��yj>�����	�;�l��-�*���J i������0����;���I�n��	`�wM<\���)i��1�p�
��93Ij�����h������}����������@X��+|x�H��F�0-�NIX��������b
|6��[,xR$������v�mA�x�l�{rS�L �w�j�Y���g 	�
�x�*,rV^�"���;�u�De:r��dC`�������L>�R�Q	�Pl��yp�h�B��w��-Y��x^DdN��.�- -P�D\M�-�a�(mt�w�[.��n\%"{RJ���/��R��O"�k�N���`EvOA���6�����-9V����9M�m�C9����{�^�#�`p��%`
f������&}��s��2O�io��c���k�Q�[$�>�;�U|!��9�6v���`)(��F�!��@�N�}����/���\��C����ec���	fc!�W9t�yu��,���g�;���r��J��	u���|��Is$�������}�Nud��D�3��id��%�E,H3�i�o�CO{�y������&� �F����c%���+����?��L��mVq#U��'j�^O���((�K&zJ���K��\Q��z%4{����`�����Dd6�&���<�f%��P���=�\�J����:��_TX����?�??f�0�����=}���#����fT��?o$��&P�tM��mE*�O�Fd��Q�C�`�"�a�{hr�tE����1�����uJI"���9�5��{��W4�'R��&���\Ya>���#��S,�����ED�$0�����?Ob��-��"������G%����������/�R���K�15V����3q==}���v%s^1��Z(����e���.�@C/DE$�.�B'�6��������G���L�%�1ep�1�/���"�����RE���s�V$��i����O���|����yD���WYV��JX4����!��-$D��3&��A]���/�����/����	(��Rm�Xx^L�)V��������������_����	�H�f�e�nr��z�%�;�7M]��<���b��������T�L.H��,�:���$�^�H�\����n����d��x��{0���y�q���K`z��f�V�J���-U�`iqmXa����XTY��U�������6L}�����#6�7>��e`�5���}7^}b�c������Z�cMlV�������MHnb�4���X�$�l�k
���
I,�,{
8-���b,�i���+N!��;�5�������f?���s!C��?��o�b)6�{1%�����z�e��#Z�
�lv�Y%��2����d+R�F������m{D|�������waH���A"�)�r��Y����jN�+pO�	���Ns3d�{�
�O�� ����e�D���}fx�$�m��NFQ�Y4�3`_L�~������2p�X�>g�m!�����BX�����X+� ��I�G��psC���Z���%D�y
���_X%��Eu�~���b�f�*k<�@|�Y�����/���������������$w�Ah��
�`�"7�H����27�W����>�d�w����C������.[������T�Q.P�V.CM�������?��r���&8����u���n����~H_���EQ���K�e���������a�aE����G[.�d[�(
)�/-%5��c������o����#s���T2��y��/�������j���B
Sr��������\������q�S:�p�$�����Im��m2�b('T���.��W��3b�P�N���zqe�1G����pK��~�|��� '�������5��y}���~	��oD�o����^s��������N���.�\�g��P���3���qv����@�C���[�|������7�tj�W�������{�1�|�L���d�q8�yr������,p���q���DN��8=�s�hj�����4}���A���O�[?���6/��� �+�I��i��AW?�y!X/�1Y|n�G��;H����slY�O���(k���6u?��Q>��#�no�s�2<��9MG
�4��w�x�'����LBFD��4e�oI��G����T�
�}��xi���B���&o�������Q����x:HR %�/�tc����%URd�8����_�����q�61�**~��K��W[��8x�7����u�������E��OC|VeU�U������s�#�����|�H��9��8Nu����n�]�({�#x��^�o�n'�e�o���#.������fwp<�Y�^�� Z��w��q�(ko5g����
�G�- �:~���N�^	�.���^��"����p�b�v��[&��F��X���N��zs������f�3w���Z�H�����6�h�Y��_�`YA7�}[��o��+�4c�:�������N���{!���jr��C��'����4���&&�wH�{%�-nSf<����`�����8X!�aG�v^3�e�]�G��O�G�F�$^���[Gbe�����#P�s��$�7?Fe���jlkeX��������_/$��l[���R���f��8�B<����k~��\�:B �M�{�0�z���a�=/�uLV����vEPL=��ob�j�}�H�}/�4���q�E�+�������.(�v�}�y�-��e��;�[�>��x{Y����4!�#7'[�KQE���#������P�4�������e�)�*lVi6|�^L����c�9�N%���V�= O��	x��3���nGL��^��������24j�a�0/�Ep����L�#B+��������"�|���IOI�
x�H�U����];S���L8Oh����,Y�p�p8��a�[&�
'F^2�q�\7Q���<�	�D��B��Y�����(Ns��
� ������j"x��������:�cp���>����y�{tKh��)�i��!&���G��R&����8�TK�G��e�o��?�������tWz�=l
��G��<;�X^`B�s����W6��7#���������2�^xB�J�|Z�l?�������������+b~X�5f�������l����3����+��O59�IS~'S2h�����W
i�5�m2=�����q���`���y<+�����Ss6��
=Bl�I]��������0���rI7��i?|���d!��`|�|��UP��Kw�,���%��i"�g����azj���I�b5}�_�$)������q�{���rn���)d�q��l�6}�a
n<��E�>���l
���@4��y����@��{c��y`��������%�gU�J"��@7���Qq���hs`���'�{�}���I�=�UF���\J���2�n�C*@'|��q0��b���i�7�9��<�w��Qo���==��-��O3;`?�����&��%`�aR�75�
4]�a���1�u,*��<Wsm��z�q�db�z:�Y��~IF-��v���0�~)���:;w�N%�9�d%��{�|>&�,;x������pb��v�ao�s}����w�-�&��������f�03O��99F�6x�#� �SO������4��p��AK�D������"�|���},*���j^G;��4�G�
R`F���L��yP�4����]2J�vuAp�([��=��F�
J��!�d��������2������Sd���S��G�]�P��ZI$T)��T���JZ �����6�i���+Y������}����(Vrqx�G��
�wj��E���K@��2Q�4�E��H(�B�"��AG�T�v������
�����=o��N�zX4��_f!"_��������X��?���n�^W"2�o��&z���� ",^��G������#D�gR�����U���XX|t��W������Fv�x�*�Z�����
�,��4S`J}�_���ND�a�p�.�y}�PN����~{���*��^����=�H7��c�DlX�)@��������JB�������\��J0���R���@��i}S%�.'���FPS
$��#����Oj�����o���F������B�(�:@b�5
��3{{������&]����h���9��{�]�*���v���h����g���9�Vv������w��|!�|��\kV��w&g�<�}���JT����w�}	��VD�l���G��d���fw�{JZwp%���m�#k��&��f�����t��!
>f;
������|Ca���V�������j>XX�/������|%�&@aw[E�{�T�&L���Y%���T���%d-�wt�=�_�Z�cZ��`�����W8�}Vs��]9�-�|�JD������������had�Q����E/�d	%i��H5!��m�j�.y�ZZ��\�����������7�n.����S�6tc75�������w]��o��A�����;�|�H�����7og�I���l���f�����G��[�a��u��i�O��D
�0?��������E��U���\�{*������F���sbV��;�LM�����}��6����rP��7d:uJZ P���wc��C'F[Z@W�;@����R��gpo\fs����6��.b�Eh��� !mY���r$�;���$�VP���v�Idoy���J��Zwz������`�"���s?7g�z�@�W�*�Y�?�RA+���0��d����U<m�w�,a��a��k����\w�,�BR��m���,9��;U��Fa�>��r����*�-�cz|M�q1)pC��~#�BkJ7�,}��\�F�������@��9��^,Y����ogzd!��4��M|���J]E�w�@7t��X	��"����b��BE������������a�5�/���J���E�8�'�C\�k�L����g���7�WmZ]]��,���X.O#A��R��|���W�0��I�-��'��>o���X��Y������Y������p*�=������b�����T�c����vG��3�T��9���} ����A�h^
���&�p�V�M!���_Z�Ud�����Iy}�xQ��1����qd��������/Q�8��G���q�z`��Yl��;;�y��~��������_�~:����m�����Y+��H=��q�5�84�W@.W��^����!�T�����+��{��P��C�����}���V��+��t��fSr�����r��������O�v���=�7^���v�T���e�`���@Y��:�����s���jzt��QN��l�<^(L��o���;���%���/���Zc����J��1�=�� `�}d"2_pb����
poEA�2���E[�3�A��ePW���������y�&D��Ia����n���+�zoE��:�f�@�K�d�Y��k}�e��g��w�"��|9-���2�C�+a�)7��']�j3�vny���� +�i�����K��N\��g{�[T����|	?V�������Pc'��]����I���/�A]�����y1[�qt���]	�����/��!���F\��Ze+����rk�bE&G��2�A���aE+Y7��@��lC49�!l����	-DE(	
��,�d@W$���\�����������9�����0��|9�����>�an��Dd���9�K�eeYhBU��=�X[H�f?�\g�Y����.��m��sA�se�-L��q'��)��E��f�Q�Q������`0�	`�N���.(����PH��+��������lFW���)V�EP*/_������.���^��r�4��JD>��Pk���X���yZfSo����Ld�Y5]�Q-�����S��K���(����[�E�j+�ja�LuE��3��t���9�fS��aTR�*cf�{�e���&�����fuA	�Y=��A��@���(7�9�lX���g����]������~��9&�S�dVC`VWu�� ���f(������r�i]^Q�3n[G���i]��Jv2��c���.���Q�lY�������������U#fZ�~����iW�_aU3���Y$T5Sn��.H��9�j���wj��/��Y����Qj��
3�'��ud�Z����H���L>��F�Mfn��mj[Q�R��E�q�{e��r��[�JXP�'��?t����W��n���3���Lv�F�h~�$|!"�K��<��gHVTd��5?���r�0��
oM_H+a�0K��r�C6�`�D3�b;��P��X�������F�;��9������
D�(W�;��O���e���E�v�C�')�m�D�XNm�1�/bd������`������]p����o���+�{����	����Y��A+)�	��-�uZ��������@�tdQ*�4U�~zr�{w7#�Pb��Q���r��S�LI���K�kE��B�X�~~��
��3�<����)�&����w�=��������}������������}�Uz�a�����o��F�L���B~^D���
M�b�c~���+���Ei�6���2[�<L9���3+FBRg;�.���7���'����cj ��a����8����=��Pg���0^����]Z"������[t���_��O�|�����h�G���Oz*�����x��+��AW9I���>/rs���{s�	�gm�+�s�������mS-^H_7�d�����-z����,��:��$y�V�.�5�`���2:<��\~��r�{k�=�������������
�!��b�B��L��m�_�X?�������J��������C�e���Xh��{��o�e�A�/�+j���z���F5�d������Vw��D�Dz ���V��c,m���J�s�+_t�*���ySA��)�%?X/D,��(��[
(C-��_��G��
�����������H���-�M�>��m���`(R��~9�^�������"!>�f%^��-�8d��3�Q�����\�q"�;3���O� m�n�s��� ��</tp2OK����3����u�CV`:>���klbkJ�)9R�)��NQ[��#����=3���L�������\�q	�e>�i���Hh�7���+�&VV��`�w|��4���k���I��f���U8�����;2Qy�~c�,�NP~^�T��w���w����r�������h_{��a���*{0��yL�5TH��_��"�'u�M��EE8<L���[DGq��
1�!�������~�$ l���A)�:`��{59�'oI��]�������6�b������@�����y�W����D����"3�^�-���o�����m�B���y��2r��)�%�n����Z&��4���H�
�)�]���E�F>E.�������Q��F�[+����"2���_T�mul�y#�L��7P��6f�O��!�0-�����8����&������������U��I���t�'����Z5
�V���+��o��&F��dxg]�}Dh�?0Zr�86�nqr���S�~#1�'���o����[e�
�zWq��>���5�������j�W2+�;X�`���-������^�������R{39���*���
Dd�m^w�;������~�rH|�gE8r��N��?r���j�������?�A�D����
�����k�d���w�K��Z��a����9����V��8���������'QO�M�i'v��<�.��g���6����{�EZi��|{k�3��0�a��\v���28��t����8��\Ay������,����]���n�w=~��yEX���������\���,q5SS<k��� ��]��'PR��s�xkl�Z�iA
������:���JD>W��/����f���C-UVT&'�?3��2�ET��FB�$�8<��I�A&�S%b��E��������L���L���Fq����:���j%R�O�E4e���Y�*����5U
��/T�Y��G�s��_�(=��Y*;g�m�)�����������g��6�����LO�E������yfbEz�*Z���3&�
�y�
o&�|���i�=;��M�H���=z;�vA>{�wk�����������f��sb�G�;��z��/(��m�Z���eS��C�m�O�U�����n����G8������>��C���s�����>`�k��FL�4p��A��ul��<�:nJ���q-(���`�e��,Dd3�zVi��aKmc�d�������G�����x"6g����uq�1K�
I���G�U���^���n����^����`�
*2�c��aM�ia/��v�z�����C��=r��,��Q��4+����Z�}�p�D�����y�1�'P��V��E-M��r�X��"��	p"�����L����
B��������{^LA�)�v��a����x�p���F���8r�����������/��K�JI��WXe;b��R���E����K2�2��85��l��S�+_���1���&m|��������V����hJ�G�v� =�7&Y��u���u=�/��$��=�Rb��Y�mFW����&l�N����`������%���l>�P�}=�8�N�)��]H��}����
A�L9%>�tu�-�Fr�<@%��D�����
P��;��"wR.=�y?��M��������G�����\����~�O^\�8+c�qa*�������a,u���)l)`t��.�����E�3���k�#D�b�kaz��=o����.A��Ko��;4���G��/3y�"mP/rc9��?�0-�go�m1���mKsL��O����;��PTnaJ��������7�������%����2�yZ�a�����7���V�g�^�2�!��i���
1uL#�����x<�'������_	��Z���R1�k�H�6��q���6�����3&��|�L������Wqb(O4���cAT���~��#��c���s�pB	F��7k@��#�������������d���Lj�]���������J��t��8R�2}�n�A�s���0%>t�������n�H�/�����H���-xx���7	[�kAF�����m'Y+���S^W�����]����F>
�Ev��_u�4E��OwK����;�d�}�X�)��!��w�A��_.#h�
��q��B�E�������5���=/���#����I���^���x�b��GZ��`���!9"�������4��e����-]�	�t^��������B���J`w8�o���u��y���6?T=�+Mz<��+�}�y.n�����A��?��6-��B}8��[YA����W���������e���_��#\���R`����$�_H��jy�y"!�qe�����/����2+y���$&� �����D��S_�l>�FWg+��r?�}aJ�#n>o���_�+,�	c��k@�����D0S��*��%�<My������_V��_1C������u-5s��J>6���j�A�������t?�� �q���������
�fT�����!�m�UX�m�O_�����k��~�d�������[�\�������i
�V�y3(L��K4�mk�T[]��mw	�r����������%�[���F��'u����
�=�f&�u����T���sF`Z�6��j���o8th|`a��/�V
sHBt���*���h,�:�E�@���]�Co�kk!*o������[lv�_��G&�1JiN>��NY�"�}^F~�-^maJ�GAL�o�����L�C��6���AP���R�`�L�-�n��n���dJ|��6��u[]�4k��OtL����Y�i��X�+B�o6#[�`j`���X����c*�5��&�F�+%��T�a����?r1��;ZO�2#�y������>�-�6�Ncz�#Nu~!��P�DN���	s�����n�	�����P�^	k��yr�]*k@��
���UPOF�]
i���������
�
�9�~3-���w3�����R
������p�sXk�c�v���������+vX�
��������9�����s���������A���g��,�Y�����y_�����Q�|�+�b��]�|/���g���Y�|��gY����b��nV1�����}��������Rk��z�C�b��]�|/��]��*�?�� �?�������J������J=��T�k�:��\�+��+{��B��n�#��b��jl�b�;V~��!��c���b�{-���~���������w����T���Z�}-���?�1�}~��!��{-_��k��Z�?dN����
:Js�����h4���kK>���1��Y�������x�Z������Z���^�z[�z�Z��Z��V�J��D1�r�b~���3�����}_����1�=,�b��]�~�w[������1����b����3��w��g���{�����S�/,~����0��������n�����Ra����������o��b���k4���Uc,�W]��h^�0��w����U�b,:W���h\�.��o����U�b,�V]��hZ�,��g����U�b,:V���hX�*��_���vU�b,�U]��hV�(��W��p�b�'�N�
�k6��P�_�E�={�P��sE�=��p(�����Z���o_�W<�p(���T����Z�}-� ����g"
�{���k�{-_����wN���h$��[��.����K8J����f~��I���,����z�WMe���	��'��N���"��)u���C
���'���xf0EI�����^
o"9M>�'����C\��
I����DP(�8���B-@���feS-�8R<����C�s2p���J���o�Z�L������u���Q�[�?���,�6!�Y������>��l��>�{���#�2U�	'\����"�eQ]�����|���i����b���@��Mj�:�w�<�mc!�g����Sd��!26w�6%�P��#�U
������X�t��05�s�#���d�}w+N-���M^"b]�J������7���X� ���������@�X�<�P���v�$4�/��Sc���$.�j�����D����=����l�	tl��l����������}pjQ���+��X+��z����"����}I��r��io!Z�nMR��� �?1Y�YA��$���I�d��,�!r�9�Fd�a<ul~._��c2�vCfkv=�pR�We6��l������'%��j8X4��k����������U5��:�z�;,mIu6;+��k3��:v������"��P��$#�"O��B�6X�����QA��hH�>�7�wzV m��e��sG�
G"zCI��m�}�'�~���:�yz d��l�����mTW��o�cv�wd���IW�e�K:�.����'A��� N�vY�Aj�9�6�o��UY�V���3��?���.���(�,��J�I�(Z���UEI�[o� $�q�{���t�w7?dk,U��0S��tI�i~��R"c��J�D
r�[���E:wap�;��|�<�is���	#�y���Z	�d[�����,��t�#��`"���"�a�����OK�,|��4P��(2��(����+
�2Jpr9�JJ-m�����"v|����kO�$��d�N�_I��*���Jn��
:���9 ��5��7j+�{l`|Lm��J��;���2�i[I��/ �6�����8�R��I�C��������*�V��[��I�T����z��+kG���6,@0��Pu�L�����
���B��������Q�����Y��|��I��gO��j/o���Y����eo�~����
�����k$�`���_�����Y�oyp
���(��b�1��p�BD��q.H]T�o���i�VQ���fM0���uhRg�^M<�C��P4�����S��6��A�Q�����vOD�����S�O�E���+Ke~�&��Do������
&?/b�����>���_��JZ�Y�n���u�/�����f����(��9}+��\1��=�z;d�i(���Q���?+�\ �d�G�j��t���euM��f�&��u��$������nJ���O:����t�y��H�Fc��������G�^���y��tt�..�2��K�����B�����������p�P���dd����S�(����xX�[���D�a�6��E���K�a;p�����D������!>P����7�=_I�O��
�wY��e�lwq���	����m�G"-�v����U�E!���8�E��_U��i�pM�'����������eMUFk�$��.g%�'_�da���3
`9y�Q�g��:���9
���=�7��$��!�G+��H.e�h����;��7�1�����$�4O|����&��.���R8�7z��qB�gp��i������1i��d�k��^���������m`���\d`���FG(�\���K����@�~�1�5��X�K��^�P�-�y8�$]�K�%��+p��5C�A����j�����H�"���u\Fv/}��HsA�M8�=/l�P������h�Vu���T�����������\�%2����O��D���E:|=<����+5���E���V!,�
���u�>�'� !����;&W�</2�Y�LL~^�s�j�1�]f�w�b�_4�.��,A����:���P/�i"3�_��L����E�U������aR�H(�m	� H�R��G��X��Mji��p3���{��dK]����M���'�Vd����.���w��  l���l�.�m�����7�xHZ���c��z������2�q��"[R������
6Fc�4����}fh��^����Dn�/F�:��6d���^���c\n�����2v!�k0J�S"�bl���"��M�u�D��q��%��QQ�&��hteOMd�R�8�����,+9�DL����[����	I������{��H��pbSn;����E��$��4�]�8HQ����%k��
����^H�w������J���(\@���\�i���8�i�n����H4l �o�*/_���r*������4�_�Ql��=�����4Gw��Id�l!����|=�f��x��j��>���!:�����Vw}�y,�J�m��e���GIi������%������U�D�p��]���gSi��D� �;.n_�&���s��gD-�)����i)�o�d��?/����< ��������&��a����%C,��q[��V����vrZ���pR3����9~�m�0�Y��z��� �1�N��mI`�_�m��,�d�j.�$o��?+�R+�
*���~Ju�;N80����O�f�p�~vS��X�����~�6��^(��e	p;�]y"���0�k!��q��B��0����������K�����/l�m���n���w�p��~��;���_P��z�3�V?+�r�0[�_��AX��ps{W��}���)p�����+j�@}�)�0��|"���)W����L9�U�cS���N��y���j�W�������
��G��3��0�"�IT���koV�n���y\���PO����������.T��e���L�{�V��$y�5X��B�p=��n9�0s�>~	��Z�^>>����|��`�cm��q!E�����~�oD-��>y��.���e[_�H�b4%��"��B���Y�c��ooV��������
b��k�?U�������jX7�\���y�n\����+�kv�Tu���'[�=@V����>�8=�������=���{D����������u�����%� ��a�q�M�M����J0�'��'baI�p*��-�������FP��w���M	C�HJ�=��8�z%E>�l���w+��.cZ�8���YAR����o}��
Dd�Q>8	��m�=�0%g��w�l�5W�b\��~wo*@}fy����~�
&^��kXt�q���6oAI�;w/��P=���T����l|�����bZ���_7�9�,����Y���[��\]Il
��s���������B��w��~�@��)�=� 2d�����
��$:����{J��[�/�6��f�21tW�w���bh�AY.�gu�c�{~��y�_��������.pO�u��o�}�V�����%�~��>C�t5�v_\�m}E<���v��Hd�4���B��m�+�x����d�ns�t�������f�v��sN�o{����@��|�i�����7wL�yH�$J�q�?"���%O�.��,D�i�;�d��(�q������<�L�o=�&�V�w~����H��W2�xeeh���xeE���+s�9�pe!"��	0�=�JE�m�>�F+0ZYQ+D�y�N�B��-�+�^�^�	sJ�|����&_r���g�V��w�cET��-H�3[9e&��<o��2��*��0�w+�M=�����]E?�z��U�����w+���2d�n�:�Ha�(&�t;����H�O��T��L���	q�]���L"z0$����#'�6(�w(��USp�i^�����(�L������U b4oM��a!���H���6U�uE�$�Q��l�7R��ro��4����yFP��,{��,#����B�d6������)��"m�3g���"��0W����V}�$���s��Y
�mLi�R�����#s���{4�7��@O�-�e�Do�_����c���E����sQ���;����s�/����D��.����$�&��,��	�Qm�����$j��dc^T'!s,��cY.�~G����:�+y���F��[��'�1���w�<�=���f���^h?l���3�~��\���Ddi�-����/_H��s.�c<���\���i�6�U!\��_��_m��������e��y�Y�7��K42�g�{�B���W6T���������	p~��v�����:�'4�{���uz���J�x#�8�o�����)Qy�b�f�!=��|%E���s���e��R6\�0�JC�s�P��/$�=�NK�Z2|%;�+������� -P�D�o�LR�n��JE�,�i�s������l������Q7��������g�
���=0�n���Y��bD[�q.ok�L���'wD��JD>�<C�;=�8�}��q��2pW��^%j���E:[��,	�B���#]��w�����u~fX�Bd	Y�G���mU>�ZNsOkP�4��q[�x��HD�p��F���3�'*��E�b��A#J�K�����,D�3O�S�������}g�H@�y^���	7�i�|�Q�=����%g*\u�d�W�Z>-�6�=;=����)������?�����nk���a����1����>�K-Hu#2������D�z���f��	I�R�����H��1�+��I������b�QkY��"������l$��!�{7� ����V����x�us�����)��uk����[�������/J�/�32q�J����X\��_iY���Wt����~E?�E{��s���oC-X��5�h����(��%P�C_8u�����y����1�|A"��H�g����BD��\�J�1���[���]���a�t��b
<}f����������y���&���+��h�����������N�&m�c�+�_T��a���A[4r�e$�cS�P
W�"b-�����$��a�"cIP%-,���w[��"T[��D��O�;�K�O;�}���N
�����ceY���~*��~���q��kt����.]��1{���Q"v^����\��q���=D_
�"��Y���D�p���h�6�T8�����A�T��J][�?��n.�_���'R�m�6�i��
�(���n�����U���"k���^f�_���f3^����>��-���BB%�xW��/$�[�f�MeH�!��\y����=�?���l�n������
�j�����C���"�
�����+���K�����w���s�m���&w?�4�T��������~�]E�1����"��-����8�b�	��He����T����������Su��)@^(�����mhA(+��S��H����eW��9��
�c������lX�9��e-�P���W>4��o	�?�#6������dBb����w������XJZ��GHU�K��J�{Z��������u��C@*z���#�=_�C@x$���?DK�)�n���f�Up�!U���8��lw��/����������^��M������G��fp
��S����
�����V�������0������{0M�n�cDWT�������q
��H�.NP�%K�?�����`�nE";�p�D#z���x'0y7����@��s����tO{c���E�����Hsa��5������q(�����!hN�n�x�L�KJ��������M�����rA��%Y;��m%-�~]}����5�n��WT��Pr��������a�-���K�?�<�K0	=�&y��{2i��cj!��BA����2�������N=��p�G��o��"�d_`�G�\~^DTa���S��cBE*��'�:��\�h �X�W>y���+�:�X�>}*��t/�
y�A���������G�����D������av*{1��}xR�M*q�P�6Z�D<YPu�O�C�^�-�M�����f�
B���5���6{+J�v�����:j�}kF����?�,�nAR����j���n�
���������4��]i:]iU/��V;�t���[;��u�R�tX�����e������=���8H�<��0��\�+l�<��=/"�������Nl�aU��H���]���c����P���~�j(�e5%l%vn���J��,��;�I/�ip�O��E�cC�r��d-^���]H��[�q���*��j�z�j���
�6��o�M5U�F���)�m5pZ��-����Y��E4�w��o���~��<����[��z���3 �;�T�����8P���!�n�����[�>o�9������y[�~�+� ��(���:(�1��{����'��n/~����L�>*���:�1�����u�i�E�aR*���4�K� ���<�DH�h�^����<���X�-$��1��D�`s��"%\w
%�,��f�P�o��	�R#O�,(����2�[�(�$.�pQ1��cc��|�[fs�9� �A�!"��[����� �����jB3�6E/T�f=,d�_Z��"�09��l`�����/*�p@�?*����L�LW����
���1!���Bx�(��c�=`�!��I����y!@w�ue������Q~b��/�~L+�P@[+�e3���c�����<F������B���Az7��I�q7vM[�`� 9�0��s.>:�����j:�R�m� ���B����v�}��N�@A���@���Ka(����6F|y������[
#<oda�F�S�+G$Q���c�>F"��!�`���ADAX��
���k��H=���ul�j��"��!5��;5���u���������b���x��]	_H�F��UmE�����h�!kmL���������M/g\�H]�sZ'����b#�l����W��B���ua[����@d;�a���F�Q�����d��������_/<�$l+�6�cA-����4x�L��"�m�E������7A�2�
#9\\6���K�x�����aAp�}���"u���:A�������1�Y�x�3�n�N�x����R%?a�/���������L���t4��o�;{[|&�)�(��0���	��L�3��=i�e>�3�vK�d������7�; 2oH�s�K��=pLj�Dc��"U����<��<�Z��+ �m����I���r0]G+qyr�L�0�H�t�������?��SL� ��[���^��F��3�L��u��}u�9��C�j�����F�!k@�#|B�9H��[<g�e>����q�)8(�E<�7@p�i�[u��4���>/���Z%�������w"p���sE�Y�%���������>3����2�W��GG��E]��uQ��������o`�Af��h��h���:T������>"?,|��88�i��$���f��U���mhs%phZ��g��>+����/����xNeE0�ZH��$}$�%�7S�8-����y�.��������8+�����9��<��>AeA�b�g���6�i���+�y8�)���L�����0�xK.�A_�<���b\L���i��"��$z����:7�y�H����JvFU�@3��]��\�7���4C�Z;��9�_����������7$r� ��8�"�s7<���-�P3�aZ,�f���&�1�yD������w���������y��J�*�
��N�� 
C����lx�_~��<��2�X��#M�R��"��	�Hps[��XP���A�3Z��7��E<V���p�w_=#��v�i���Gv&^z^,��i��(�
2{��a�=�PfOy�q��P�����0�����r_�-M��m��i_��O����6I!�hV��NDd~I����%S��U
����L���ML=�Y�	��e��
(�� bt����V,A,$u3��^�O4�w�Zf�Y���Y�	��-�K����%���	�g����JSP�o_�q�%���8�-i�I���3�����-�D��e@K�-_�Y�ZP�#[Ry��Z�iM�}[]�m-�7a
$�}Mf�1�S�5�����_�)�d�,�l)�;pfL'����1��|���6Cj�zZ���3:�|����`{��������,�29"(!���e�T�5m�h>G���E@*�@6e�4rq�AK���2	@���x%2���(#D�$�U��$�(!+"M����GPIFN$<�P�$-�/�P@i-\9�2��P��l�}"�|!.����������4�DP��)����$�J`�,0�%y����fA�n2^J�\�GPI��IT��E<�p)�p�C�0����Z��R�E�0 Z��{
����7J���C&����a���Q���H�����R��IU���,�R=�%8})J�@��L�+��xR�I	��t�XgL�����,�Q�����)��78K$e�#�0I�*�n:�V��%^�H��#)�5���2��&�GDR�<$r�������Xd��(cG��_)�`c��8J{�-�S���J<�r����CY_c1���3K}������PZ��b(y[_+��EP���A	P��y��������%�2h�XSSAUP����@hR���4��,[�.&��������ej������c��<��sp�U��!=�f+&�^S��
+���)`�3s�l�����r[Gz���OH�������M����		������"s��a�52���Id)��%��%d����6:����:������y����X��+ :�#�,����:>���"���Q�2���;��S�Fvl����"���n��i����%=B~^�%_*9sYN���v�L��"�9o�=���-LZ����S7~���bX�0����_$ ���*�B�gFU��������3B1�a�8@sY
q���\�����z:��=��n���c�Z���;�uF\|3W�������=����73�4��Q���qk=^���@
�����p�P� 2��MI{����NS������e�p���!�XA8������NHm�U|�a�����Q�)/_"?
��.�����Q����G���`�Q�p"��)�(�K6���ID�!#y�m�p,�z���!�6�]�Z|&���E��a�*�|?��yN�bp�q����U�b�aX����D2�m<���Q���"H1�~����D4��@�e��|�}l��"��������Rr��Z5�Qh���{N���wU�J����*�&w�m�)+�A���l�J���R��k:��;����������IW/z�IY��NKC��'���k��s������F�����V�������I��.�K���������\[g��!�K[9�������(���m>H���2#w,M3�����`�H3�B�9!����>G��LsD���7����|RH�k>w%>���}�i"������lFH�''|��`6K$*��K�����	q��|w����go����'�tP��B���m�R��""c&��O9�4E�w?�jF�"b���������yi	���P����U(h��!�+�
���y~���C�=�;_���������6+������	�*�TP��b����jy��!���(�C����nN
���l6h)71ay���dB69����u.(Z�D|vHK{S=�A�r���D67�M������h��P��U�>NL�����z���������U�����U�:�|������z�3[�:�|]����*�����w�����������~�����~������}�����}�����Bj��g[�e�:���u�~]�CN�M�������F)�Z:Od�����&�Z:?���QK������G}�U[�W����������K��$�2��f~�c����������_�O��^�>��K�������0��{~���������?�����_;�������[~%�.MR�����[��y�����X��v�qp�x&"���s%���Dv����w��98�.~h�4I��t8T�K$�R���TL��i�_�<�':|���~���;NF�����Qq�yB���������^H�f��+��m�e"2�s��CR�|�����]JT>�%K���P}���k\w.�@�)Dt��"����e6%IO�Nq�������y�%13S�	��{��}B��ML��*�zn���!~H�@�I�rr��j4+mB��k��H^��	%�Dd=q!D�Y�����Co������1HH_�3�%�;")Y�		����v;�9i�m�MH��[����Kv~L����d55K���������U/�uBp�o@��eFE�l��T����.��"�Z��]��Hy8�"��n���o��x���>�K�q�I�=|�1Q$�qX�h	�n�n�x�����������P�b�,��J������+_%Z�5��*��i��YG��\4���NM�1�/F-Z�t.Z���*�L��3��*��w!��y���z�6�O��o���?,��,����/�,_�~��j��g<o�l9�~0Id�{1���f
�I�F��7jX^�TrX��KMH�JY�7�>3J���;y����+5=����RB��x�	���0���8��M���i����tw��L'"��K��,�Nz�	)�#������;�&p~y�BM}��3-9�W8�j���2Q��h-�{��+���!M� �a^��P&=�9U2��a�g�l<Y�&��U9m	��7�����kw������920v,����e}�7u�,��8'�*��b�/_���7����S�f�z�IF6Z������3��p-��z�-�H=,��D�h�[J���~K���,Q@����ph��_����$25�����#���%���v�0������jo��b�zKM��������MdQ�����6��5�$b��>r��
M�35���Q��2������O�ZP�3�dZ�U7`�w`��}�3I_�7����]�6���0�Z��1���)���?��aFZ��\��K�|�������$��xv;��-��B�k@b�C���E;��K*�/o�$����>WJ"R���{��8�+��D3MDd=o���;8�9-�������@-,mB*�w�q2Zf3�#��LJ����DQ�+��� ���pH���u?��v,xz�
4Cpg�4���G&���J���nC��	��xcn�,�
�������|-�Z�x��_�6���������[e�9V�->�7��9�������.�2��\2��G�`��D?�d#_c`��;�|�_H�
\�������q�l����6Gj�O��4��3�/��!�����B��Gu*��b���0�u�\an�������fq����D���f���'$I#�T���<����G�
Ls5�`��eFYV�n�j9�g$��wK�`�80M��Z&���3#v�3jc�*E�9�D��#f��r<���:�����(��a�����bZ���^�Zi&4����K+�,��q���{��#���������iaD�*����i!%�j���f�5������:�E�����1qS�Y�L1{@�8kc���,M���`��m(	o�<dsQ�{�����;��?� �H�U&�F�H�Z���2�|��(9	g�.��b�b��c�vSg"b��Y4��X�,d��f�����U"��7Z����|�O%���K����vb
vG����#6�0�_�p@Ul��Em3#$�Zp2a�����$���t�2Zg�K���'�����hY���.��e�i���*U"��	����T����I�&$ �G�;��G�2Ya��RU&�.hHK��Q�U�,EI�R3jVc�Gt��J�N���!����Z$Y���#C���T ������H�47=v����		h�P��N_���tiB��v�>Ja�4��p	Ln�������Q�02��P�����q�b�����+����r�_�]m~�����f�<�q[::�/�T����u
\v�"��n�ud��E �Nh�7����n{�	������:�
T��g'�{�{����A�}�i��a�{�����Y6V��<C�v������A��4�]�H�;�LV��<���OD�:�|on>y����U��JpUw��zy������s~�H�������n3������u]C�E��v6���@fgA���[��Z�����J�Z"�0:ia�#�)S%bF���X��N����d�-�\��NVS��)���;
���a0�]��|^��:4
��k��|�V���M�����uY4[����l��s�3��hl�Oy�(H�����0�����E�1,{�Ogv��v_u<������;�l��n���A%�,���}��K%!of�}�����������`�'��,�\1�p�1����$�Q�l��U��_g����	��@K0�P���}��3j3�:��2,��� ,MY%"����p�=���uG��H�-������7	����v{On*�	d����Z@Kt��|���	��CW<GcV^��.&^�����'��L'��xA����&�:nCA&�S��Q�Pl��W�h5�m���%Y����Dd�N��.[�	�%P�E\M�m��ZQ���w�-��W��>(%MC_�7�T��G$�����������p�n��[�;Kb&�����t
[�y�������lX��a�9���/��A�ij��Bj�m�LdY��,o��s���o����[$�>�;l�x!6�s�m����KE�|X0"�N�L�uj�K���~� ����
<��)�3���3�z���$�*�����������l�fA�l���I2�m��`P&��(�,��{�>\q.��.M@D>���l!p�z�7y!0�2":�������t���t�"XHD��|
����V��J���&k�.VqG�j�c�_O3o�O���C�-]����|����$��^'�����_8�|&"������v�9=f��3P	�"����S xf�5�������oE��h�:V#��;��B��M��fT��8^H��M0�VI��v���T��V�H2| ��$Z���x���&&I_H@��:���1���O�U��d�hp&�>���*�:"tG8�B�FXpne`���n��H�f,�0�g����Q�v����q��y�C�^��U����_�mk��"�%��L��Y���M���x&��m�E6���lm��=�B����p��;[�.�DC/DE.u��l��o���������G���J�J`C�������-!�����m��,Xs�B��Y}���e"_���t�M>����x����&M�����C��2��-��A��������GK[9�������Rm<*lf�L�k����������GO��j�Y���l�ll&/^SO��u���Z"�<�����������U��T�L�H��,�:T��%H��t�~�${�n�hq���\���Dc}^Ddd������z���=!U"�������b��6��PV�RUY��Y���Z��o�m1����7���l�7)�/������;���������[�4b6#y��9�Y�x�	��Hz�����!Z�)�Af���O����R`3�p�2�&;����^���oyY��_OHKl��z������,��b\W�s�ZYi���@���Me�JoQ�z���G��wKh$��M���l����n��Q�'!�D�)o�����sqdq�.�3���1���Z�)���>k���/�kT��w���+�i ���ei��G{���l�b��	���:�m�{���|B���h0Qr�R_�k��^G��c��B��������bA��V^�L[��G��'�4����F�*n���g�N���[��p�g��1���
�(���d�t��I��|[�B���yE?e����"YF3�l [=������Y�=�;5o�8�,��N�c6y��Q~�J����EI^a���l"RZ_�co���a���q��W��{����L:����0=��U2�46_O|1_�l�W��lY�$d]���a1n���1/[��$�aT������6H�F����(=�n.��6&�r��c*Kz�#3�x�L���j;$,+�����B��R��$�Md_-?�����x��s�<,���M3A-�.k]���{�(�}�L��qd�?H�X��Y���?��,�1�!�����c�|^$dd�k�%A�,
�,�7����������S���!L�4��>y�g�#O�M�M�9z����ud��t�������*/�niM&]�hXe�t[,w�l�\��L~��^�MnG�����x�9���<l`(�2�_�|f�V&8Yvg��uL�����c�����J������wgU8�f����G^���(�� �:1�yr-N��'������@�R����'���1��:X������CB4^e����#�w�.�~]�E��e�o�m#\K�
�5�9�SA�u���f��.�h����3���c���<3�������N6�l���aG���ZI_�7�,�����G�X�
�����9Z������R�l��oBz&�K��3����g����i�L>�g!z���?��6)�k���WM�(��?y�g"n�]T+�?Xe�y���>JF�^���<����� �������fzE�4��tq�L�\�YN��V<wLeV�GU��f�����M���!�����(I^���sr�OI"���xi���[�K�l�P�T�~��3ud)���kJ�e�4��j��������O�� ����l������� ���*��k�D�,l�M�Z~n�Hs��g6R��[��T3Wk�C�����x��Uw��4Y��� �����I��O[���6Q�E��p-�6o,4�H��K-d�,4�l��]�}�=�Y��1\����"��f�,��A��Tec�,A���ix����"~5���8m�_0��������&���Zw ����M�1Iq���\��H�Yc)����u�i��;��U�R*-��x�}��)�����g��9i��i��.�r��t�����{��&��)���Tm�ZX�5���L��a>�F�/��z�0I�����?������Z5�*y�yI��i��~� �"�7u��3a��e&�����%Mo���X�Ik�6��u>"	�GgH�"���%%�t��?��`��$��$w&�>���GM|f���!!;.88K���6I�+�������G���}�Y�![����Q������"�xU���.L4�$�C���w,��W�SEt���"�V/�aG. K����W����AoK�zlXr<w+lz�HZ��Bk��Q��!��W�HE��Y�
�^sc��U�=f��D�Z�\4u-�E.2��5ss�����$r�O$q��/�aA���G��>��_tG��Wg���� ����=�L�|�F�f���+������u���2a�.
uZ<�,�;h"�p�H��FnM��~�:�G�'$|&�~[�:�""�U��E�2w$>�{����x��}�k��^9fQ���Q���S�H�I�R\�S��0���������HY����\�	,�0_g��|���Un YW��f����������V@�=��|���:���raO�F�v�w�tP!�����\������ 
�� �7v<�����P0�c� #����K5*�n,ub��(Y�{|T�����w{&^���&��M�����e���_E43���b�l�e,������9P:�$�����c��3���p ,����8B�TY>�\^����Y��]~�l����3k�)0i�t���?U7��%����l~7=��M'�$��~j��$cQ�*�v����NY=���F��u�E�jE��Yr/G��� ��� C������,�:y�������2�	X��1�Yem���������������7���w�N���B�S9q��$���;��,N�w�UqBL���,k����}�	��A�c�a�Hk�R���D3�t�8Q���B�D�MWt�+g]g��'MED��j����Qx!Z�Y���I�K����L�oYm>�8.���,\�!��T��� �p1���Y���4s��`�=�!q���C�����6�^(�+��b+�:�6�$���T�����]�U%� ��E�WD����,FUn��]���pv�����������|mG&�"�j�@�c:����e"�g��7E�2����"�����mh���1���j�p���j'�:+�?���P��-�~b��8�D����3�,��qC��;�N2�����Er_e�Wik �������K�P@�%���
�b���7�6����7���
3�!w��c� q���u�XV�}�t�fy����7�z�O�������5Y,�����FH�urO�)���K��N���N�����@&�t�7;���%�
��]�8�<�$J�tp6n�l�A%?GI6��<�cm4�E��G�NQd���qU�.��m+\J���C�$kd��_��V8�[�����7o��3��`��(�8���=2h��F�����9�������O:}�g�y�
�����;��8�}�_��3Q�J�c�����I�	D��}&��
nd5����`���4�UGfk6E��s�>��;tI��n�^&p!Tv	~����L���d*�������	pG�6���ha,!���A����<gCk���=���~*�Ab�������N��d�0��\7;�ufc�dU��V�����!��n^a�\�w��Cw�X�P�f�S�]7!�~'�Th�I���� D��k�M�5k+t���mh�^X-y�mZ�mt�R�V��<S������?�q��[���I>����/?UV�lV�UM���fs�0���fI��;$�k��}�8z���7�����z��oV�������NW7��T���M�c�c�OF��"��u�a����PX�Jr���7��N�3�7�\�������U�%}����j������E01�$�(�?����t���r���;����J�*0��*
�RE��;`q���b�3�����vq�1��b�$����#W��[+���yp(A��:8�r�P��0�C�w��[h�?��@��y��7.����(,�f�6M��oa37��&u�cl&f��B�sK��Jq��m��Cq����"o���~�� ��`a �%����	h�}g3
�e�u0����Zc=8"8����d�Hq9�hbQi�!q �1
H�$���E>�N�!���#��
�e�2���"�C�l�c��z0�k�B����+\��b(U6�V�V�����>O;L|"
[�@���@���-�
���u��i��u�	,>������] '���+:���C�y���C�&F����-?�G���~%������ns�������?��������_�����Y�Z����?���~b���|�gQ�����S��:�|}�������l�����}+�wK��	P��Y�����F	`��]�s�\���Y�h��{�)p�~���d��{}G��		�����o~v�����[�D�X�������3���DU���7J+x���9Ed�
���sA��%x�H����RM��DD�&[d�s;�/�YV�qzi
~g���K��Y&"�.���xj��Ft��D�ZM��������z�oL��zk8�`f
��6D|�\~����Q�5A�-n��W8��
���Z�������'���s�_]��-2-��X:4��\�R`��&��
6��YU-AJ��M�ttrB�/[&`L����y��
�yU��MXG������B�W�`�nk��[�Y(,��TuF��I���s��U�H���"B7�$K����
3�&�M����� �����Y��%����C����$���*�g�:!MP��U]������2�
�cdI6����<���lT'�������R����&�;����|>��dR]
`Q'-����Q�&�d`6�S6�����WX���-,�I�4�zY�k�1�YK�'���M�\d�
��T���"�#MX��	i~��e{���.J2�)��dsZ�������i�`h���Zh���-�]���l����[��At#�)N�Lm��f���f^]�1�I�aLOs���r�����%SWUZ���0���3E&�}�	%`&��
�M��f<���
���Q����l�R	��m�D$/%�mj��s��Z��T����I��fy[��
Pl���U���<��T>���������HU���B�.�Q��f���lUoso�Q�XV��IW��iZ��P�iW;'p�a�����W�8��3��)^g�:sU+R�:Z:����4}�����**w�bYg$�\v*�u�����sv�o�zEZ��%[O��7v�nW'��0{�ZG�E�j�[���l���dR+�b��l������MD���_����T�dS�Qg��~1r��u�Z���U��_mRv�������^+��V�e�.*p"c�d	��)�F�~0�������4m[���g�;����f�<�hj����'��+7�����2'�J7�7��o+	g�9<�Vk���,���F�EI�����f,��9���0����>���� �#�R��}@�]��0'���6\"�����M&�9�b��
x�CK���������S�N(}T;�#-7��Q&����\��4��K�
�����4d�Lt����
�"_�!k^�5�L�#���m�;go:���|�6��zE�i]��LsA��4u��I��wM���F4��
L��5!%����~���gV�����-g&�W{[L�����5W�������������=/m7��bC���RE�������?�����FMH��{��[���N$R�63��Wd������kAR/����Y32�|�},f3���fiZJ`�?�6(9xF����k�����:�E��������zW�wnE��x*.���w�{bd?5�j�Wt����'�>�{l��9��l�<Y���z8�$��8c�2+�c����\?����-��p��t�l5����D�d���!��-�y�� }�O~V%�j�)���$�k+ow���!�����#w(������o?,�S�����C0������_QT�-�tS��02�������_�]�@���M�F�����Hd�p������t�+P�Zm�Yuo3��SFNH�n�o�Nr���4���]I������E�tb�!#���x��`�&���T��?���i3H�sD�����e�����C���"�
��oT	d|�H8�:��Fy�����~���j�(�>���i�;>Bg��E���m@�}���27~���@���s|��d��gS�d1�e��9t���	s����S�$�}��	�
\�7�tg�_l����=��y����l��,u����f7��*��w������������b���d�Xc��,�U�t6:3P8A��B�8��E�P='E��/�ae����da�fk�B��[c��a��GUp�#��.8�c]*���O��@��D[��UI�R�MH�2O5��{�1��V���@���d��,�� -���.5�d�����3����c�&��<yvF�#w�WO�.��4���[�u�3�����TMzb}���;����z�k�Q.�T_Hg�P�~���&����y!uF��"r�T"�8�k�b���d	���-K-w�B�y��4A�$��`����3�i�"�����
���G�.X����Ft0�6�{q�R�Q�	}������Ls^,7��4/DOm�K+��>/�U�.���h�&�0w�K}[`���,$"2T��p74v�b$��:���/x�#~w�,�g����s�,��z�t�����.����PT�:Y�/f����B_H��\X��,���v[�E�d9,��-o��S��W�
n�~!4��m&��x
k]k�|`�1f�T���v�r�Y�)X��j�6y��srY�������m�3B�|�S�u��y���;�m�l���Nhk>�Qq�Fn�VK�c#2�O�Z�q=��i�L�����~#V����f9@�����N�F�
'��A�dkg�����h��	��2��"��l>�#�����:g�?����4�/���%G��>!>	��6yBr��h���l��i�}L����n<�9�A:��%pb���U�?�a����[0��$���v�o??����%�yp�/<;�'�����c� <u��,HM���.��Z�&����qWp1Z=����|�J��^^��a����H'�cIq�����ev��c��r?u���bRT��So��lu���G��E�8��>���LDb�F��m�^1To�{����%K	�l���Y���>�����h�~Y�v���+eB�`�[0f�h�V� �����)+�N�I��m�?s�Y����p���m�&���R��/�0�}���4���D��R|������NHM��"��X�������X-r�X?��3pZ�X�e��Ho4�^�
�f����@9�����#c�;G�o���c����e{e�N~EfW�Y��X?n�?��(���.E$��hA�^��WI"���gp�X���q���/��Ee����[Z��
! e��h�Y[�������3�q@���c�	i��/i97�B�E�?U�3��[�E���H4��!5����E��j]���3�1���)������[�Ec������h������v�(m���\����V�o��v��*��Cs��u������|��r����,RL�U����\W1_��#�����:��u�d��z}����� ���.�1_������\��t�,�1_?��c�����X������yf���{������Q��b����vb\?����N1]���u�������CL�k����g-�9����;�N1]�J�QL�k�����$�I�!��c+�!�����\�^�������w���d���z f����XZm����[�~��^��@���b���������R��������W��k��^��U>�D���G��A�
����^����
����F������|���b����1_�n`���{70B���!��[�����R�
����(v?����w#�|�,��@��q�����~�(v?]�����O�7�!v�On�]��b���������'7����
��rC������'7����
��rC����^��b������?�!v�On�]��b�������
1Cnb���~;����-s�!q=�������w��s�nH\��?���^���?k���|��7$�o��L�����\��w����nH\������Z�>��w��y��9r^�!�L��(.6�N��"$@�2fY���������Y6<HT�����Jd�V��(��A	��Y������G�i�|29y^���t�J������Ol@��|�i"�g��z�T0+�v3o���a9Cdz�T-+�{�����L}�j�G�	@�Nj�Ke�����f���P�	�
�qZ���He�CY1�DHK���k��N7�m���1�|�g��|p"g&!�X���Q�	8��+j*_)r�C~�,�M_Jqc�y ����p�����|l�u���/tx��U���)���`)7h���=�j^H5yG����6/W&Y>!���X�G�;,��Wf�����"�����N9�+������S�v>�s��`I��F�f"I�I$��;�_&�Am���L�f4!�Mr�#���4�.�y�b��n"�\&T�u�'`��=���ba���������qc����@Y�v%P-�������cfh��Wjw$���--3<z;3Y[k?o�����	���!Yi����p���Ea��/�����/:�������^/� ��I��5����Fa`s�3m'7��D-��F��7��*�`����N@�����U���(��*�}�����A�"3l�1j&n#�&��n���������:���v���MO.�y&
��ED�p0����p`��qA��'��i��
�7��X�
-��4!��~���#����>o$�����<x{&j'/{�6*���	UYO��� ���MsBjm��|u�(����T����c�6�9�+7��:�+3�"'���`"K���L�zq�E�.����-A�
��p�����p���0%7����%�SOW�E/�����%�5QI�����:��[.�0�����:1�F���P&a�T�}����L]&��2�q<�v�����MX�J�k��Ro�!
>�pb�EFj8�;��3��?�&���w�;O����9�:�F<���J��	M-A%����0 ��,���F�����&�N�J���7�pZ�����V$����+�_�i�jKL
��<���]��}���ow.�v���q� �;:~�����������������'�:^!</��H�e�v$����(��S�l&'�W�,��-��th<�a&���:��/=�X}>�==]�S��P��@�C���������.�� �����p�E�r =M��Dk�M������j8V5���� O>?��~B���������I�IVM3��
��.�}tc��>H��fTL�|�~����1�ai�1�gv^x��;U�%z��S��7�QxO@�9[��>��Nt&,_R�6���-{!�g����������&�v�����PoF���9(�q������Z�
�5�����w m�;
L��9,E���je��8�S���R*J�<�iq�8+7��	6�N0<��8KJGOS��=���|(� �~(1�,w��]�u���{��Mw�x��T�����K.�������>o�1�y����eV}K74�B�vi�����)i4�[����8��,�E���������>^a�%����6��_�OL(��hP����hE:�d�!��[^�y���"4r]�'���mo�7���v{#�����q���T1��bn'���y�N����{e��(5=
���9z�n���-6��(Y&�~��nc+
��F�q�9$B������>���N6�����V��q-������h�
�s���`������T;�-��E,��V�D|���|:���Z�����d�9�B�{���5f�E���x�M�[l��?-
dP[�d\V�"�0f%!w�A2r�b%����"ff�85Kd�s�i�A�K�����LHc�������]�3��?��A[`��|he�O�llS��e�$��>CP:���@�������|�H�v�#��0�����t#7���R}=3I!��s��X�J`���4����|N���@D���),�����K�S���M�9!�/���Z����=��m|!xG����fcD���c�#j���Ql��\K����m8�E��f�ak��J��>����[R}M���o���M����D��&��s��u��>����q����|��D����u�A�!3J`uK�a��}=�����n8���YP|&@]����`�2�kB>%�?�2��r]���V�$�Y����V	T��v�:�z�����H�s����^vp��%X
r�9Ya��;u��`&<��/l���ID�jY���/E��Y`*���q����Y����U�A�����{Xo8:,���@�N�e�J�G���Z������j3h�����8�����b^��>�P�bZ��(���w[
q����$�9i�`5I���H�1�a��q��g�"�c��TdZw�w�����Dd����&�w>����� :E)J��C}��`BtB�`���2N$���<�j�n�3A�d�������"s"A�H����:��m��BR��X�\&�������������^��������Z���}_HU	��������H����JJz �.J�(���i����U�����_%]�u�J���~������oj&���ikd�}����n�O;	'�	@0��}�l�_�\���L����28sB*c�M���b����"�t����	������0����T�>���Q�o����+J���D���I����n����f��"��;�}FI��On����d"2������}&REX7do<��~f�2_�2V$��B�k���d�]��/t�QT4�I6�1�,�����l�'��r�����$l��\��v;U���b
�3@'�l��|���._�m�Ddo��]u�B�aq�jtna���b�gT�U�����S}V��U?�h&��U!�Ii��t���fH�����C/$������L�t6���i��d��]�H�n��f���R��$f�Eem�C����h����kz�k�M�>�~�����y��P['��"��:5Q'����`��Au3��vJv|�	�
��g�q�C�/t���0��_�Nv,oV�������X>����lV���s���������%�Jc�#f����S��O@��8�S���d���m��3t����g��]�p�����G��|v����I����=
t��RP���O��K������7��Ai.����M���2�\��x�L�|��\!�G�Rn`�]����N�!�D��������K"��(w.��~�%��+���=�{���/
X����	�>sC6-�n�b/�u��w���}�n�&�t{��$m47oI�(#�pv���y�my1�{���@3�2u����,<�0�l��_��$�*���9wS�DO�?�2�����G��~O�@��)��\�ZL���3�l���O���/�2U�����Kt,f/C���|p����&����8q�c�=�=q��?q!"��O\H�=q!]�����"��C��%� q�>o�5W�i�	��7N�Im}F|\���vk����i��I���ch	Vn�����
���c�7������" �ce�6,����^@D���p)�����������;
:��<$t�%�G�	��;�d]�'����0���FU�,�;���K��������������p�f��xeF8l�x%�WfV��+�\�Wf$`�%^;���+�]M�c��"Z��^���h%F+3Z
�he���[�2-�+�^����9�\>�~��G�/y�����(���;�����D���W��y��z.�R��s�nF���'2z�9G�*��8)��$;�n�:�f$������a�TckF	po��d8�W����;�qE��A�-B\��W';r��D�`H���[��lC��|�" ��5r��"�Q�(��''l��y���e9"�cx3p��MF{]�*�v�4���T�Z��
|oF<���,�^EY�^<���&"%��g�L����f�-���qQG1�71}����f}�Ax��`��D��h�M
J�u�i���*�F��i&��&�d�� ������U���������(�t������_������������X��u�^�"/.���~!6=��Yw��DK0%���I�K��X��.yN�	]u,g"r?lQ�h�|���b<�[B�.'��gx�l��s4�����`��"�7Q)��-�$"kv� �j����/$���uO�s<�������e���K!�.�?�_��_��-�1o��t���od	�o9���1����43��4'�:F�����Q���O���V�n�u:��+M�m_xpv0g��;B����l
�r�;%*O�B��/�L>�%2�I�e4\�~m4�(��9����J�O�a4�����Bn���uv�C�g��A�@��~�'�LR��(�F�_H���'`��+i1}�YB���0a*��������/�]u���u��(���a3��;f�����m��%���<�����������#n[TC�
q��,}[g���
��������r\�U����h`��
���^Y����r�;xY�Jda��_&n^�H��{��W[�q��4
�:R�;��1�;#hD�pN.L%"_yQ��G�e�V��Fc���>7�����i�|����a�����P�q��N�������6�6����m�sf
�:��}�����>��g���2�������p�I_jB�1�}��n7'*�����5{f�H�[�k5K1L���"R���;�����BR���F�e�����y!�*l4��)�����zK|O����x�uS���Y�)�����t���v���g�����^��/�d^��#���`B�;�D��3���"�n������Lw����	�h�B	�:<`K��.Q�	�w�?\1�����+�[�"����Dxo6,|����;;���lO�.T7����p3S��gtf�(�
Ut����WP�h�O <s�,��n��F+����LP:,���-:r�e��mi�VC��(��o"'I�u���qi"K��5}���B���N7)�y��c,����c����>j!����{��T�e|��/w��a�;j��QL�n���>��\��Om���>��/��l��k�<����"9��m����JO��}�X��t�����3����f��� $���V�E�X���A���z��(F�qt��l�CVn����u���Y) ���*��wE��Bv�i��2%��[z^�& E��71~"�oW�H`U����
�f���T-��������=����:p���8�|'�x���f�^(�d��!�i�����mj�Y���b��JD��8lh�@3���[^�" ����Tv�)��sY14����b
���\1�B	�Q	�P�MMeM�����������mt5HZ���@>�-��w|;�V�����_�R��J��C��DB�����-q|B"z���LH������y���M��P��[|�T�}-��*QP��N!t,��*�9��v�/��T�q��q�0��o�) <�������q	�7��YP3��*����������Q��K7k���������p��D���9����0?�2�o�k�64�%i��M�3:)����<���u��� v�4�j�<��H�nN�����5p��mF��b�����6�5!0�	��A�X����|�������>�~&"������r���g�����\>Vl>X��
X��%P���A���9I� �Njc ���hK�vB��cJ@�@�u���]�6nL~�tG�����/U"2�>�I\�r����,����@k:6l����f;x~L!��BA����|l4���i��>p2�>����G�6~����"�
�?#�������T>�g5Npu2�9�@n���|�
�>���� ����t�)��2���F��>H��s������������<pw��"�ul�;���C����;����".k��@�T����i��ch�7!s��L���v� �*XU��v��%0�fb�@���go����jbe���r[�&$��c��Ym�3�[����uvd����>��|�����oF����x�ni����{�n�etc�zt���j����@����O�l�l�kb
n�s��p��~2�n%"��Zk#�*z^$d����]����Jz��/Y
����E	[��'n���*�>�(f��'�n�����,�()F����)�#k��������%�������c�j����{���H�dX��M5U�F���)�m50�_�m�sB��X���q�|�_$��iS�7l�5k�1�+��~��
��|ph	��� K��
��z�	iM��8�d�V������p<��;OzZf���xB�*��C�u�>��j�}���L�>+��k�"�}�3#�Ui�����ZP�%$��q�X�P?H�a��HY !�{��g	$y 1���=����������3.3�PB@)���XW�	C	���N0t�y�dA�T�uG���-� �n������x�2��������$�,�����|7�G� �����0�	�L�*`���I����T��"�09��l��{���D<����J�4/=�"�U��������1!���Bx�(��d�������C�$�����V�<���Y�V����?�O�S�!X3�B
�bkE�l�)��rA���<-���s����&�!#b����he�l����m#��!���Fz5``[�|E5���)j�Sa�y!�FXX�#�Bc�p� �
�a`���Ja(���e;����N����-��7�0�r
#�g?/���������d"X<,YEQP hC7s,3R���v���O�yv����5���	u[���U���b�in������BZ6Z4�j+:��EDF�Yk�^������v��oz!��bF�:_�uRR�X��ld����H�p��������[�B�Oe�n��eZ���9�2��CB�O����A���b��pD���cBK����t1;L��"�m�I>�e��aUo�DeZ��Lr�� l���K:y�����aA��D��/�.�Y\@��M����-�:��
up��FK�e�Q���=�R%�
V[������~�����t����L�}���NO����7�,�3��}�N�zFg�;��������27���gh-�'�z���o��I7���lK��N���q����{.W���#C�������u��o����6]�}q�1q����:����ty�V����(�z�{����Nt��.6��;��������}�H#�-d
�t�O�aR&��w�e=�����b;RpRE��7@�A��Ku��2 �[`&���U���������R5 �$��M:wP, ��Z���  �(���g&��X�?#
��xQ��X)�
�^�������'���;�O���Iu8�p/
����>"?,|��89�~�$�����	��R7;�mhs%ph�"k�U}f���7�dDs��<��`����_
H��%o��qY����F	t�����#�8+�����s������@eB�bc��_�m�o�,.�]y�P�4I���
�;�I�������u��� �X�;{�4�^��h����Eg��A�	i��;[��e�N����0*������������j�4��}�Q��|fDjB��|�yB	�Z�����7���C��-h�v���� �5{4 �}���0���E��K�;���yS}^�c5)+G~����zF{�l�t����b��X����MQhd.�����tB	��^<,9���	��T����?/"2'��lK�����k��>��BV&��|M�,'��)����.'��%��dF	��rw��M���'�x��J7!�4!��[�
����r3��%����n�t������Q��B�%���UhIg$sOnI/��,���N�=�&^��JSP���Y�2K:�q:�[��&I���H�����=/�-�e����������+����#WqETU�����&L�$���l>��`��f����5��J�k���\>}���Y�OH5�'cz���l��%R���MVf5�/�OT�:�)��
�y#��L�J�n3k�x�d��"�Y"(C�l��m4����,EF���I@?sE�A����-�2A��O"]��M"��v��(>3�*�H��'�*��2�yE����(#u��M�OD07�h��]�c7��E�{i`��B-S�����/���Y`FK�$����<�r�d��������)�����x%�8R%�%��J��y�$�N�*a@����FY=o���Y�L�a�Q�(��D���W��0*�
Q�����	X�zjKp�R��T��"W�����")��k��~�����Y�Y")�Ii#YS$�y���FI���H��T�v�y�
h/. �H��#)��nKa�X	�#"�u9��mF	�jV,<�G�8J5�Jq�����Q�+l����ET�A�����������T�#"&6��E,��r�C���Z�L,���|�J��G��e=���E.�A�����
"��
�
m'��*��O��iHEY�]�$
���%����������yV���&V����P�V������
/����@c���:I=���������s!�3�����IGOw5��n�iFn7�t���\|����D��C��9Of��`	�}.&V��fLDzSa�����0��7y@'~��X~�S�����[Ox�/2��;�*��9��SDe���'9�}wcwL[VTd/���",�R	r���=#
EM�NJ�t�����o��j�U�x��/\��Q+5�����e��K������|AK���+�g�b��zq�������z�+�6��t���-3j����G�j�wS�L��u`�\�����A�"���q��RA~^D5�b��z���:d6����5�5T"��&yS�����NW�JBF�y������b��N1��kY����+��j���Z����ROy���h�t��o�n��w�����
��|���p�)
�n[�RID�!#��m�p,�z���!�6��r�`)2\'����65T1�~����$��$)��O���$��;���{��3*�<d��xb��SI,��3�|�Z`���z��I"��[���o	c�)OG���<���������\��N�j(i���{N���wU�J����*�&w�m�)+�A���l�J���R��k:��<������u`�c��A�3�����	aiH[��uX�P�":0��2uue�h%���
%����k%EY]���]t�RQW���UW���N:��C���r������P����AT���cI�������`�H�S�BK�*���3���>D�q �#B����Pg
��E|�G_���DV3�%�'0���|ON�-�l�HT��L�nB�%r�]S�������C����tPhY%K��6�:�EL	�1��_���G�"��I5#N�M�KC^eiW����~|~���U{��
->?��q���D8?�#���}N	�(���l����YM�-�p��M�Y'����jy��!����#r�Z:�-WAT�Rnb�����dF69��l�����r+��!��A�0��r���
iS�>7��l��sBm��K�811�����Do9��E=0����\W1]Z&�1_o{��b������1_����u5�Q�;�������v����V~^���u���{�y����Q~�������~�b�T=m��M������)������~}�_�~}�_G-��(o�����&�Z>?���Q���i��������]�������������O������(��M�����~���7�M����]�"����iF�&?��
/������?~��^����o�����������c�2���X��	�f[�E����cY3gwp�+v $�yu ��'������<�?�Z��JP:�5�%�)^he��L�b�/[z���>Kf���y�80�vW��K���ct�z#EC�	����<}%������LD�)�2�%����)D������.%*���<��)�>�VJ�D6�;P~
���<���!��nO�Nq����g��y�<13S�	��{��B��ML�6�zn����,~H�@���rpS�j4+mB��K2��E_��	%�Dd=�!D�Y���2��C���Q��_HH_�3�%�;9)Y�		����N;�9igs�MH��[�$��Kv�L����d55y�����o��K�^����h���z�����Ij��<�����1���;����	q"EVs}z���������0��������O4F�6��-��MMc�x��������+&������o*9�`nvV�6!5�@K��v��J�avi&E��,!��e�����
�Z����\���]U�QS�g2IU�)�B0��Bl���m��x���CXt]K���m_H�������p������F��r�&��t���Y�L�1��H�F�����V1�R�R����
��������:��;w��yv7��~,!�b<���N;3����3��|^L���d��z2��@uF��G�#K���iB
�$����E�����	k�PS�r�LF�DN��{��LT> Z�CN�a����0wH�{b�u���P���Jf{:,���Nf�99u�N[�<��M=~��t�^������9
��������o`��]�,:TW��{
g"���4�6�:��r��^�A��b��3#�q���e�Y/2�%���������-�k����[���,@����p���_����es��l`M��'�(�F ��[�}��IY��^{���'f)��g!i3��'�,
p���\d����@��@�[���w1c���Us�2������O�ZP�3�dZ�U�e�w`����3I_�:�����"4��g���BF��f$�N1���2�#�	h9�r�b.�	:6}~��,��y���]���w-(�-���S��w�� Z���.�$���\)�H�:O'���8�+��D3MDd=���;8�9-�����'�!�ZX������`���"0���\�dR:(�KE=G��oAD;��u'�~��X�fh������c�xdB���)n�6������7pn���������}��5O_9|-�Z�x��_5�r�pFN�Rd�n<�k��t���M$d���f����S�[�%#~}��9���-/����w T|�$������G�����m��h4Lu�**G?�_.��l����)D��Gq&���d�a���S��M`�S��g�&w����8s^#l���~B'O���������
�Y��djz#�jn�&����(�*�MZ-U��\6�+*8Y���
}-S�#�b��;����*E������#f$`3O���:����N(k�v���//�en������&B�����m��Z�a���������:����13R�W�F�QP��	-BR�������kF'���S7�K�����1qS�I��)f�gB���LR���m���s�1���7�O���������w��v��D$�*�O#E$��@� }�mj����-�,�5Z]��Q|k��w�h��Y��O9����F_ozT����h�
�K|�=>�0�d.�[&������)�mM����\�DT��9U��~�����k	���%3s�'�d���Ne����\������ai��
B]�e;�S��R�&"��	���T��y�I�&$ �G�;��W�2Ya��RU&�.h�V��Q�U��e���y#N�6�����&U"vZ�q�~W�"�b�}���g��>�LE:���������7��3�d����S��������}���iB�����m�,��8_��$�����7��;n�����m""���0��m.���������p�� Z�1,K��x%�/2�1����~EOnjH��;����t�iN��fX�=!W�����J�]�����$G�}�md�}��������vb�uER0K��z�g��a'd�uEx� ~�������!	8O2Y�qx�c�^��u�yn>y����U��JpUw��zy������ 7�3�����>�mfv"��-�r���u]C���{�
;��l �� ���-VE{�����J�Z~�0:ia�#�)S%bF�����-�I��d�-�\LVS��)���NM<��ny��H�uh���X;�&����M�slgg���,
�����E6m�9�	�A4���<vtr�T.�n���o%(-��a�>���J�1�x��s���H3[����@���@C���y�}��K%!of�}��r��������E0��CJ�@��=f�v���$5j����*Z����}~_=��h	��a����&�������aY�H��4e����r:�9�X�����"��~v��X�&$�c/��=��@&�
��Nk-�Y�m�' \�UX�Yya0���g���I"*���'^��D�r�����P���T*yT.����)@M�D���wI`��G3���t-����d	�oWSe��V��6��w��j��U"�JI��W�
�-�	��6�D-����MA�
4p��cGL�D�s��a�C9��;��z$I`��J����45��y!5�6c&��Sx�7����m�~�7�JT�-�f���v�����-����S�`U:�v		�F���h��G��A
x|����f�Ui���ff���N��hl�R����Eo�K�-�d�H{,��#V&�uP�X����	�0��*�)���3�'��L��"�����}��~�$c��_i"A���~q2�t��@R
��iXz�8.h��.e0D>�������{m�
c8�=C�����[Vvu�����C�DPH�����8�n&R-'+eXE��b�V��Z����'	9�'
�j8��>����G�*	����G�G��d��67Lp��L�1���J�{_�}��s	�E
��	�
��/�>����=��;��P�G��zW=l��vojT��}��&(��4��eF"�O5"�0��l��8a����E�
���c�wo�W0��N[J"�lp&E����P��C6u�tpA�Z
,���z�-W,����_�hM�b�$����eO��C��9{���B���~�>~U���i���u���(C/(�M���i���������
�����M6�������{��>�_�.h�;n��7.��������6@m���w�������G���N����c[�.-Z@(*'���Ud_�`����~�d�x���"���T������T��EE8P	��������L������zpPg2�f�����x��{�4@�M�j�	b3e��Fn\uj`DE�EO��%�x���	,h���emW�XM�������y��>�I��X8�0Ml���	��������Z��W���$�^�HZ.�6��0s��G2i(^r���Dg}2d$��m0=]G�����(nB�H�o�Q�6,1W�mD3&U�����������y_�Z�?����]u�	�/�p���x�cl��������}�P�9����
�q~����S4��������|��3!d�����n-^�]��	5����o9�N����~= )�������*JY���28�#�4}C#Y�����Vi�@W���(���y���zio�HD�X����u��IR��?����=[<����I�0#�3@������H����Y_`-��\cB"�P��o^LmG�f
'��J�����:%��
�?&u����$j��h<��5�OZ�SM�}5�mu���S�&R��&k���m��	�+jyeT(�o��a[�gE	�^���:!�W�����_��c���(���d��;�FGG����o
I����B��np�
@�z������Z���;U��8����E��6���Q6h&b�Riw���pJ6�QZ���ol��n���q��w��u�����;������F|����O|�\���F��8��]��p�``&.���8�E�!���beA�$�aR�Kd��k

R�H~�4������>�dQe����X�zO�*�RC)�8�d��&���6U\�b�����$��"��3�K�����@�R���"m�HP���Xw��R�����HucB���7���f��v�x��/���rn3�]����@��E�YQ�-xn;s��:#X�HvKtd�W7��9z�4�7332���,�_�7H 9-FY��w�3�2�,��+$�bn�9�`ctsFF�=���|3�DJ�eg�H�u_<�jAR(��-"7��/��E��9������dB)�~	�AO��kJH�����,*AWNq����P'��n��A8��J`X&>��d�
�YH���F��d�}g���{��_��p42�}���1�,#K���[u$�C�y|���$��x�C���e��E�nUf����K��/h��7�/#x�K�|��BE9`M>Xe�	���qL�B1KDP !���h��% =i&IQ���K��U��s���j�vB	@�/d����
��~\	�%�(*��E��?
�����yN�b��{�8� �rt@>	�w'��QO�\�.8��|�m�����C��N2��oO$�;�w\�76����/m��u21��1�dFN�l���%����S�Cu�I�&EY���� �����`��<�f�E�������+;���[$>_<�Dth�P7GVIO�@&W����8�+�0�Z���m"�j�������sHR	���]�9�P��31s?D:I��������%7�ur��8�HV�����U&T���g&-�*3��^�u2���`,N�0��M;�9�g�]�+��'WF����J`<@
N]�Yc���@��{NN�{��C�����a�w����?�
Lh8�����&�Z�ee��H'A{U-t����A��4�,�t�����(t��x;�b������U�op�luFPLI�l7qf��}W4�]&�(_WP��q�ED`���.(_���W� 2"�� G�U��iF��h���Y�aAN�v����=��PE�����g���������g���_6&��l�v�mY�a���� ���L ��0,������`��a������H�Xk�������Nm>���s�C~�(�d�<�E8��Y�N����\/��,(�7=��W��d����`N;D�zV�K�<�'t�q�`�8�],$�����B�.�^��
����,(��%]�r2�����Y���uQ�b�
(�E����to5����@��S������\�8u7M;w����������!�!@�*!)�t��9��=�����g�-����S�����(T���v�������m
�[��Q���A�^�C�s�����v�Ze������8���p�e`�0A�L�|��Y!�QS�G�tD/~�<#N�/����t^�p@&�4��au�j��]��=�~��*{8i�BcBN�.�hb�0����~fR�� ��������w��8c tgdC��Sl��?q�	���g!C�p�>=�K4]r����~��&�E�����}I���J(��~���C?�O!.���@�@��.&��T���.��j�t\�������\~,����Q���k�NB:���l�6G���x��B�>�����1�a-�~@4��)�n5�����@���]�N�>7��Y����K	��n�x�#�Cu�^D�Y� d��PgpA4,��$�h8Unn����yH��HT���A���C;��dS�<9��0�JH��V5Dl^�As�Y�x��gp��)$e�����i��Hd�P��%�����oj����'�������9����X�SK0�[O�<�t4����%�8����mp2���v�y�x2v0[���lm�|.6����-7A�.���1�wtn�\����3B��<19����#YL��=����g�\�g7���:�?�6>���.����p�� G�lm�.�x��c�nkQ����V�:2����z��5�,\U�:���]��<8�%g���.�e
�����\B���F�'�ea�����������)�X��)
��y2�!������TU~�K�-�>��;g���@��p�[�Y��{&C���C�b��^O{���i�1�f�������`�nN���HD�Ud�>�q&�0E<��#T*�h$��h���|�����+�E'x=(��g/3�!?�����yF��t	T"��~X:�!��\�V-im�JC���u���;�8����Z�j���{�|��FF��h?�W�YQ��Q`���cq�	%�(-���J�0���m������]J�"�,(.'�"_;�����'&�����a�.�Gc����](�#t�`�3� ��@	2�TA�L$��>���tl�$�ec�Xu�J��:t9����&bz��'�4������
GY��s�p��������8&1��6]L����Y(�9/��<��X������:6���u�}��xh �����Z@3l�Z��6w�#���y��=v�=����(B{���@�lAR�����Y��6��x-���Y����ZkB�6��J��	��yG��y�������MmGB2eo���7�$l���LB�>|�0��-F�K��,��e}~&�&@a���b��m@�D��|�����`���g��Y�;�W�a+qu-�	CA�����	��p��Xs3��\9�-��X��LJ]=�����d"�=!#h�p�za%(�K����j��{���T��4jiVcu���K���WL���7�?�	W]�@MQ�Yib��rg����|y��o��A����>:�|����]������A��~����@;�z��fFa��� lZ=��e"��T?��T
�{�Y40�����#�U��q���[��L��pTUMp�����������p4Q�
(������U"P��=�����������0���#1:G�����"*��c?z�-��[����g�(�u�����`������Al�N�p���X�D�C-��2��5D�Y�����;iC����H��GM�CA
���\"���i�7T���������t#���fZN����%��	A�����8��H�[��wEn��3MFT�<��(���{T���>.6�]:�gER���gY�U]�B������`��$�\A(�u7o��wGxd&��4�M����
C�.�1��L��������gbuW��2��eAI�S��r��Y:�q�0����~f��GO2��6���f�$~ 
xZ�E��^��iqm$#�;�'B�<��K%^����W�R�I�5%��`TX�S�b��]&g�!x �[V�N���|Rz�ff%!�%����T����}R�9)8��/�W03��o���^�e"q)����g�S>�*�B�E�����IUY���V�����T��qzV�*�����z��PO���,#�\�dD>�����������������������|���������yN|}2���]�t��{k-�b��q��w��3�*��C�?���C�I[n��BZ���P�V>�@fxw����:��./�d����!c9$q�x���@��c�0��I�E�pSF"�z��%s�H9wB���H�����N�k�]���.'O|�G���yg�r��b����Px��<Qk$2HP�\�����3~W��0p�H��EExP�������3����cO8s7�l���C{FY���{Ysufr]����
�5Wq6�����)��ZDT~�S�U�<��"�?5�l$C>���8���*
5g2���G6���3!�����S���oFR;�T�ZM�I�:�H�$�%���D2�~n�"�&�Q��Y�H��hf�K=��h�>B�u�xN��%�V
T�=E��I���rRw�[��9
"5�<������K��&�f��`Gg4��M@�a��,�{����+��6E��j����ftF#�`���Q�%Y�������F��v����I�xo��fJgd�S#P�7S��������0�8�������@3���_M�uj&A~�q�G:!���&�Y�����!-n
�0VZ
�7]���s3���fB�:�L������ �Z��P�����tb�L�X�Q��,f�7r�^�[��^OfDgT,?�[Qf�ftB�Jg�v�3j)O�5C�KnH��17�Q��!0�M�B7�
�JK���/��Y�G�E�x����Y���$z�3���W4��r���!�#&�bD�:�h�������f�d�=��7���uBERi�,��nX'����B���l�I�o��jZ�%!Z�D�N�Z#5�A����������}�����������������fez�7oG�:�"�|�=���T�3uF\O��<�'ZW��J�;�,�:��m���g����828��fn���P��W\�w���=|^�N'�r��;�/��;�����U��U�4����`l�F5����`F�>��6�(�����
��i����61�����4+S@?��fR��2�n�`����QG�"��P�S,�E��`����D�D�p|��wEH��n�q��D$���:y�.&f�X#�@|���	��E��x�uk������]��D���#6vK9 ��g���mb�!�������u�|���i&7���y�������sB%��Y���{"��3��%�A�J^e��-�M�(�0GQ1�M�c��Q�[�YMF���F�����BKr�dj�l�AA3I���qj��V�U�.��d���Yg�D�6o��l�Y�4��`�2�4I���I���o=<�*�[3�����D�MsB'�@�=j�q����:G�~�T�P����t�N��@j�oM��(�z�7{!v���k�gs$M��a(��=���3�������{["#Vb3�:p�{at���F�]��0�����W���/S�����h��4N@�Y��Y�p��.f��M�H�/H�����,�s>E����� *!�Q#�2������7�%GV>M�/�I���(�$��d�*s"&$�v�Y9�q���D�@3���mu2!����e�2��d��C��st����*��O '�� ���JD^<�����Kf�L\��VIt���h���U't&U�&�|���s�����a7�%�A��x5Rh�h~��]���o�t�'s�)y���hT48��� ����h��;m�DD��	�br�
U�� }k��6��^�$����nu���o-G���A����L!nnYY8X]��?�$V� ��������:xW$���=����s#&$	�p�1�r`���J HRfP��8���5o]���5����{"�� ��vq``��Z?I�&=c����
��o��6bB�4^e|� ��=��7�i�n3�",����av;/����@w�u���w�����]��$��5����"�4e����xy��H$�#
�q�h�I)��2�-��Sjg��
�ru�2�J^�=4�??��25y�ICYY��&7���N�.d���]�^�:O�������25��N�wa�s�_>��d��	@���Pu�W5+F$����#���Y{�����efSSvD��G^!z��L��<O�3��� Su�[&����4����tuz�|����f�^�4M{�
U��<7J���B�,�<:���e2d�)���,�$����6��Hn9XB-&jm������d�M=E�����53����G7��6	�]��q����r�����#�@�9.�-I��H�����i�3�5h�~f��M���,���(9�~�%��4�3b��Vc}6�b�L�\�`���"�z��_T5|� �p�OYL����/7l�`0�' �$���g>�]3���������,���� �N�+��%[$U~�l:�|��g�A"��
f
yk"�@P0_���36GcA�7��b��S�,m��.��t������*���l?,�d�6���m?�c�w�4�����y������Px�A�q�{X����cAAm��I���gw.k�CC3��2B�ta.������L�QtW������!3�p��z|��k����5c�z^�	
@s�m�K�K�'��
@�-��
JF�7�L�H��=��vcus&���5G��!Y�DDV����S�3�[BP���.[�"�����Ujz.	h�;��{���	� b�7q�	�H�J��X��Bn�Z�uRJp# �.L@�	�XT�,g��������h��i�>�s�%4��B���_��������1����H��bl$�b�����v�	�F��cu�l��]DR�S�>4�f�w$]^����������������$X������[�gMe�g�@���c�D����#�
	�0�k��j��t�����E��gCqJ��������y�q��l�F��@4<�����a6��2�Yy*m&C6�.�n��sj)V�O�F��.|�2�*�2��j|��G����V������N�:�N����%~�SveY;�P�]�4�=�H�YDs�C�)����a`��5l����b���^��Q	��C�K��j����)�������ei�#Yw��.K���"��n�l�����$�VzaU$r��P����A�o�.��x� 
���S�����mb��bg2d�B�l�!�gYu'z.Zc��/3Bf��/�@F����|����/�79�1�����=���e�����<n��3_p���t�>_ �
�"���� ��tA�/xZ��i�w��/��|���~fd�wFz���C �`�.���\���O�5	9^���|�s��{���5	9^pN��G�j���m����|�FSt�nwM����A1����w���^[�;��wiR�;���q�u�;���\�>������|u��x������+�3_�_B�x��h!^9^���
����**�+��.u~��������u�N9Z�-k<�d���=�f	9*����x��mG����z��-U4�����}���e�T9���1Km��c��t�\N�A�W���G�p��\a���a#�~��y�W��
9x��y�W�����p��y�W�s����+l���E�b_��r�������<b�+�r�
!����<f�+��N}��r��k�G�<l�+�~�j��IK'�F��7�F��7�F��7����W���S���O���K���G���C���?���;���7��������������������������������On�Z}�=?�������w7���Rwc���oq7��G|wc��q�p7��������\�>�/�-��	W�'_Q����&�+����pEt[����b�_Q�w����1�������OF����U���gD��qw��}fH�:�'y����5���,�[G�k��Ki3*������&���������P���8��/:^AH8���b����diB�%����/|x59��%Q���#��b���%����Y�]d
�P-;S�[�p'��eX�$*�9!�/#���y�*�`�/���2���e��!�;�vB	@�E0��eF"K�#���HO��e����.;�MR�#��2���|������-$PY	�N��
~�}������n����K$������y����daR~�I�*���#.�Y�M>���T_��.��.>����6!���''�E�[�"��QV���-�D�Y����uv����B���V�C��+����7l��;��+ *��v���,*L&A>��$��>��	��6�M��,�(#9�tO�pG���4�&�y�>��w�	%p��	�����2#9�wg�AN9�����
p�scEJ���������)�bvi�C�z�~���G�]��;6��M?����m���������Hu?Y�����A�#���mH�\,�v/k �t�n&����_l5���{#��I�Go0S="!j6�0&��CvKT�+�.���^!�L��6o<i%���#��tfC��P����a����Hj]�Q������=��=��{G��.o9��UR����=�z6���B�n��6�1N�8����S�O
?S��k���^YY��2j�	�iB���qWO
$����>+`C=E"G�]�}f"v����-���P��	�I��u�	����	��B4%9���o����?��6m�C�17me&\m�����ce"%���gf���$� /�=��'Q�EH�a����K�Qg��6�u?4�wa�sA��o</��L�<
.��aUY�e �<���CCv�3�������7�x�����Y�����g��[,p(I���R������N-"�q���3gj�S���:�S~�vaA49�C����������`��7:��s�Ih��3��������{gd#�0x��9��P�?�:,���ee�[���{���<���]�t�Z2�a����*����9����;A�zZ\��i��q|�BR���;����*!o�P����o��)m�I��#�8��}F���t�L�gEIq/aE =G�13�c��2�:��3@��s:>	�Qq��z��!W��"��,c���4*zQ4����L�'Y�B
�I�8���z���|��	r"x���U��Z�f��e&����'v�/�>�q�C$I����T.�2�����B����M��"T	��d��K���l@��	8�la	�)�Xs�#a������zf����Ae��'�����������ga�L;��q���<@��"�����&����I?P`zg����$�;�M!��� N����3�'��TE%��t__���l25P1�N=��Q]��"e���u�"1wP�������I�3yv���Y&SU.��,�Xt�\�"_V'�����h�j1�U_��V!e�N%4?("�Ri�w���Ha_���"\t�u��,��N�%�yCc�F>�y��,��\�OF�F��^$!$E�r�d����z��\�����Q�+��A�N>�^%����	�b��b�.����x	BL����nD�����'�0�$�UQ�q��{�u1J	�_�����N�A��Ht�@h�;�=�ICqj�4�����bm=;2�zhK��U����W�����"j���(��B�'�����2{����H����RA�VU��,]��9�B�y���U�OF��F��d=6��������[��D
cf���5H���X��#-���1N��
J�@� 3�I(b�LH�bd3*[�1��D�^���Z��B+�6e���(��IDWm� !F��@�M�3��Y���c��y���+����L�>�?|�H�R"6&W�S��v[l@���l��5
[���,a)x�V���������MI�\�����R�C�G��D"C;_�>���b��Xe&������{	) �����E��F��5A�C��~\��?�5�>l�;:���V���:�M������>#S#�"�w#@���^���{�=�_�,(��,�|93��@k��
4�o_��P|'@]=���d�R�kB�$!?�q����s7��I2
��cT2�%��;[����2%��R]���4�!�
r������D��[�X	@N������>��G5Y�H�S)�|d;�"K�7��{Yn[��Q;.���F�B.^Io�F������c'��#�3@�����!j����]���wo=I1�|�
b`4_�I4kdQ�EP�T�iDE�����������3	2�b�IlN=�Qh,��8(x��~bIT�Im��5T+#�!�U�����G"�1��N"K��v��#T�
"�R{�5�8� #+J5�v�'R���-�q`�����G��:;k�J��`��jfc�\r=�� ���HgX7ZK���Zf$)�o��
�`����$��Mc7�g���U�y�����i��s��z�����_������/���~�����/�w��������@��C��e/3j�kc�F�m��'3���H�]�e_P�*�l��w��������=A����0�*�\f�MR�6a��q{w��HJ��3*(�}K���;w���H�y�f�y����waQ`�g����h����`��}"CF`�l{�6��OdT�
��S�
���Hd�0����[��
���vQ2����Iw7�AV�1�(�1���h�' �2�vt�T�%n�4j�,p��G��.L�yb
�D�m�QA=�����/��9����N��a�0pj��]{���@8Z�	%}�Y��W����_�.�'/��1woMH6a�'5�]	�F���Ni&{n�Y����U��Ag��d���3���������(��g���*��'��K��t&��rY�<����\x�{�U�d4�/
7Z�V�!�n4f&I�J7$
@��8���h{q���g-H6-6E�9��.h���c�������+?��[%��Q��d4����.{3k���.�9x��=�F���^��A�n���*pBcS�9�8C���p������u�x��u�>�f�'�2"4����
v�g����V`HxKB��tOy�M��XP>���-��+�nAin�a��)�v$0��������$�7���"��t�m2���z���F%���*^���X���(���������	��O�����D�����n�bB	�g�1R�CE&^H����{k��a6oBA�lK�������QD�JD����xx��,L�^=����c�:��"t��5�vv����+��
Z�<g�0"�����p�	�������]��ss����d�	duv4��R�y��:��>y�*���wa:�(����#�	pe��<qc1<�#q�A�~~��p?�!������=����xg�*$Hh�d����B5M>�OE:���g4��E�h��������9:��0��(*��E7�C5h�A0�����?�+�K�[O:��'��0D��:�����u�����jN��9}���/��#���{O/�q�b>�D���z�}���$��o�*!����f&�U�����p�Sm��
���+�|ef	�|��k��
��4_y.���Ld�j��>���p`�6��V"�leF%��<��:[�����eO�{^p�9��CZrm�����5z������/�<z7�!�����L���?���Z2�x1�w3��x"Ow5g�.���6��a�������f4@����]��T=�7����0�x��q}�O2��Q�Tw=�Mg�M����w�D��
���������[n�R��qBQFo,0�7�!z�����62����s}�Pa�����WS�}W$zUco�]���Su"�lRw�Q�^FQF���!������g����t�&NHz`��8�#��ML�sd���L��Ax�+>�6�!�	Q��*��X=����(��5Q=��!�7��S�x����f��_�r��os�+~?�+^���\���u;7�a����d�:S���X���	��rj�B�@�h�3�.E���
'r��_�osF��Lg��s~���8v����3��d!/5����R���~�-b��GJ�����\��Hv��	]������n�Hd�Dg�7��%]�vt����_�^����L�cs�	0���28Q��W\���f��6�m<���H�7���U��������v:����e8���������b�_u������X#
.�����[kJ���e0�B������
ANu��M���!���d>����� ���/�4���D�1��x����}��Pae��������P#w��J��'+�����!>*X�f������B����k��/��]�9z*��G�pe_R1��lWD�`��Y$n�g�{5��+3$�f���,�������V������/L[=�q�Lc�+���a�n����MI�
�Y'���"�'0��M�fW����T��MMC���' ��������t�Ho�!%���j6���B@(���\�5!�����5S��2ip�c��1C(�m�:x�
�++c��l��B�B����[;�a��n�%&D}���L�.������hv���	�o�q�n�uk�>^��8<�$��P�qj����J����jhD�/�xC�UB�^f[%P���b=��j�}}����a �2�2�la���H�1���w������o�
�����
�+~?m8\�����\}���^���gE4�C��*�E[ ����#�����V=���5I1�3���S�9����JB���[�;���%&����'|Of��G$����>[9[��+��r�����|�(9#���Z��<pV&���Fd�T���
�3!M��J'H���6�*����<Cg,�2!���Y��(}F����,��1��B�M7��Zl��I�0����)#x����"��%�%���V&�+2,�������J�����_��������H�.D�!*���2J�mx�Q�N>�.+�|<|�aK�O��J�B,���8^���~�2!�%��#�vt�M��&A}gX����QX%�-�u��v5��#y�]9>�����79jA�5��d'�T'N�
-���!�>��e,��������
B�~E	kJC.������9�rh����?�2��H�w�		���<�!��D��2+�p�j�v�=G(�~����^E��U� 5��V]P��������"����[����v�c��S�����[��
�~�dwi$h��]=.��"�7�<�-#f���R�ZV�������7����"-�$�^(�k��iA(5�N��Piq��VddR���$� '$#iF�o�6�.T3���J�b-z���h�e�a&��9�*��o��@D6�p�e�����f�c�/U!�[FTO[��]{���/L�Me.	�I�����f&D��c�lqz��@��\��	���p~����9�y�j�f���S?�Z���&�n���/B�[Xu`�jOO���f��j�����41!�}�X;D[�p+�-p����0�s�F��1c��7+���,���z�V����G"G���'����sb;Zd��f�U����`L)@��<���W���{<�;��p0�tY����l[��J
��������������L����Q���,8C�������A�we�z���>����,
/oz�������W�	����� ?��p���s�r���s�yLF|7|1oC����� y��7�����X&������d1�O?z��EyWV���M��_/"Q�j��]Mf����1`�\�������	T�����p
`
�At�43!��Uk����t%'�q��p���u/�}�3��5�|�q97;2�f��c01�lY��Lpb|�����shP�����V�0N�����0�����7�����-�X�,�[#��P��8��57�����JaD
����`�&V��I�H�6�S�|\��e��E�5bn!L|&�!���/*����9:;bc0p��������]��0XfV�dRc��2�pG3������MS3�U:�u��w�tsiLF��3!2W8�}�����x@���#�v����gM#�V����
A��p��<xR��
��~���������,�M���J�Q�EkP�D\�$�
�B]\��PW��7���a�)Xq�Jj:�����<8�������
�Q������ $v�]�����}.���	y���6��f���J�O������l*��;������'a�9l���P3��6W��h��v��H������14�E�"�����g����(�EEG������gf����XTg�`�L�����t�z�q4R��w�)K�`o����U�
����]y���L����V�H���6"	�A��F���M�yZ�I�:f��6����
O~������P�����t�"� wz����������|��[���Nt��+��t��,����U�����o%����e�����E��'?d8��o�c���]P�����)a<�<����a������e���2Pg��w��+�6������G����n�V��g��rU��D S�l0��GQ��� ���ms����2w�C�s�3��-���G������������Q�y�x�+g9J�_X��O>p��-�}Es)��W�jS��������N+0���(��QV1�A�k��%�/-w�D��Z������a�u��������Y$��z��A/���w:���sr���!�W������?�?i�C���s���J��xcr���v�g?�eb���C��j���$�E�0&(������(O���N>�A}��j��&�W�OR2z���dOe��r�'���"��J��n+aD�����_�����/PH�����hq�t���U��!���u����@Y
����]��E����6C��2* ����b�	5H�_X�V=RN�f~f�����k�7��U�������RG�?h�@rq ����J"^��5��/1���.�����Ie#����r��m�����������h<��c�� 1�����z���$�P�D��/�]�R��t9"���T������/lf��c����^����_�kP�v������>�M�
H���v>����%"�a��s/�4|��!��1���:r���\B�t��LK"��H���N|������Do��.gT�8�-F��M#����H����5�.���	�p�hYdQ���1�=����1=M��5�4�8D'?�0q�p�*��r���j��=��g�r#��.���0AB�i��$]��?�Ml�v�����/�i�M����(	�'"��+�gIa��s'1#��*���H��A���Ri���3�T_�� 2�8��M�{�X3#�P&��D�s�>�0!��<�l�S�����^��0s�^���&������Iw}WHo/�*�����'T�_n�*�.Dd;�����x��S�(3��C���|j{�T@�pTB�d�����E����f���y�������vt�Q�m���Zo��	��M5��Q��kdQ-,���P�:t��`�D�����0W�^��S4����>+O"�HT�rM^�t�KNR�:z��\�f&&���"��i��fF�����~���eB��vg�*5j�sHn��Vb��e����L��2���B�9���N�	��f8�l���Q��p���D�s��SD��N>�=u�	��d��T{�7��?3!hO:7�x���}a���;k&�����I�y��Z7�3�D������y� H������[��
���t&��!��2�|�H[�]>u�U�|j��|�,��Pa��e6,��"1�|i5�<1�����
n��	�pD4���u��Hp�T5���H�	������*d�P��yB�a�v�<������2%���u>	���a�vM
n��:�#P�z����LH��c���h�yB�[��,|0��h���d&p7��"���X�v�f��
��P�3��6�d�g��QC���N��k4\���H�m��`�2_83�-��m���g$�0�[�8S��d�g�{�m�v:vn��ZM�<�=���=�<�i���8|����lH������#�LI
�s�y�2��	��+��M�Q�9�r�7�s�� �NH��RHlJ���>=�1g>dc�^��A~��@�8
�����i����8
o�9�T�����|:�`E�d�k?D�'��y �2�UO�<��7��v2���"9t��|�i��,���
s��>�0�7I�7���"�	r��,8����.uk8���{[^ n�q'�RGM5���"��\=NG������dph����6�'��2N9����$LE�mk��3�����t>kD]������_X$WXC2�����Ae>�>��;��w����B�C��l���|0!����e�|p����Q]_0����|R7�w��)��i�[�����k���A���������e�	�Y������1�g�i����B�	
xt���S������-����N��l(v����A����Z	F}>�lY����<�;��m=����2�����7Y����$�G��O�.�(��.��Q���h�l�41�n�vj�^��9�]D�1���d[�������������}�}�y��X7���4#��u��_fe�/S}���:Z=�^�������'����N=��y���D 1�) s��l�x�2?}����������3Uv��_8������(��p]$��
�;�y	9��c��>���m���
;k��Y���9���L����wE�%@8C9]V��0�n4�\���
<Z��E���fl<z����Z�v-'e{�)��1�4���k�	���6}�xrqY!K�����[�L7��]AB�������;�z����������cW�:���qs�������P����.��_�B����bs�[`�j�\����_&�hO���8�#��=�������Eps��:u�q�WCQ9��Nn�?�q}��O����������#J`qX��C�8t���u�O��c�)t
7�]*���p@
7|�n��F�
 1s���2#���)K��hi���L�.������ov&Tm�y��+�lJ��l8.__M(�;�;��bt;,'�l�I��S)�K����
�XC���_��l 
1���]�m�l���;&����*_q4Lwu��6k������?�t�T�=���3��O�R�0��@OJ����H���(��n��Op�Rg����ZxL�z�:}m����8s����=I�;liP�D��F?�jxHPkcA�-���_��)�5�+Kj�f���u��?��j=1�B-������m�j]qy����,���-��� �����~��U�e���*UW��������jkuB�M������`������1(�Sl>AT�U[v�j8k"�)���d��+s� �����uCO���!���t��N�6�q��+�u�����,TqBQ%x���7a�n�7�gEz�.�=��z7�jKu���6"-�������v�u�j������WD����mW&Tm�n��5��^�&��ETm�n[��c�z+����4�_���� ��yb,�i����t���wb>����`u�����*]"��b���]�Tov]��$;|BT)���jWW��f������g��������uN������w�x4h�r&���L����b��W��hr��_9]1��W��x�aN�
���qXW�BdI�}��G���7���E��������o��K����w}���@��������S��m;��U��#�����]N��5��_��1e�b�c[.�e�P��2��UlS��Y��TF�X��������k�R
{@��q�����"L��@����1G�����~�������r����C���2��O�����~}-�?�?������������~�����G�9;]-]���C{�8��4��gE�+v�"DN.h'��g2d����_tH�g�
�r}�Uu~J��4s]&(j�o>����x��>~YS�6|i�)�U�>V4�j�v����^K�#��2�y�U��y�����IVp�4)�~��Hp\H�<��hH�����G���"��F����l���dH"��sn8��������B�C*N�hp&��]x����<��X�y#qmd���3��A
.���/L�\����lj�Q�Iq/�~�$�J�N�!��������w!C�CP\��U^�����8�Q���H^�3�����,��@k]Ztp�<������x+�tI��������$�ZM���8�?xK��l�Gk���/3J�$?+�#x%m*���������B;�$������o ������f����t�:uh�p���AT��������6g�OM��6l��s�{&�-��M ]H�� ���*����g�d9Th������	`�6�\���z,�_T�,����3��*�X'NkYJ` ��^��bc������R��o�I���}t���SkF�wk���n$Bf��f7Sz����	8'yo��ul^)��Z1|�
�Qc��;A��@���!�~���.g/A9i�A8�XN�uM������ ���03�W��zR��9����g�I���;�H�D�d���{�S�R0�%��U����L��]8vn����E"�	Q{r�45�W���C������Z�I��$���Jf:5������|���G�����Eg���6��l����u0SSC�;�hL�p����&��,:T��&?k���ulT��G��aB���H��E����;#��qB
W#�m�P	d�+������-����S[�<h�.��&�A��h��):�� 2[���D��gwBEH4���*L���I��q�r]�q�
]��$g�I7��%�"g�5,e��W#"�dy��C�S�HAmx5������t�1�����f'�Q������I;pp���3	���+SkK����a-D�9���a�5J������q�e����&x����kH�,�����&e|TP\R}�7!�,���p�Q����@��o���Re�<�����$<�4�9�D��oe"�I����3���i\��}����3��Y��>1��<���tP�E��yon���jg$�5XwI[��_+�@����G��C�#* ��������<�P�j�Z%���d�P�6P���_������s�:4e���$cm���A��cW�_b����x�`��{&��9���������D�{����5moCr��J�|���>m�u�32G�l�E�w_.�.�~T
�X����n@[���m�Q�h�����El����M��/���I�LM`��rqK��}f3p���@��/E��N�&yQ��Y3P�5$Y#>?eFQ�n�+����W�lq�4-VhX���X8#��9#d4I1�[H�1bF�������Cg	�����^�q[X�,L�\���KY/
D�����C/�uveq�I�����41��I�g$S�4��EA�J'T��Q��l���z�h��S�����,_�<Q�<q�z@T�
Bg
{g848s��D�P&�Nl����LD��:=~�:�a����I������f$��@� }�eb������Yxv�1t1��G�T�~7���Es;g&E�r�)�K�XO=������g����kl)aF	���G��b���o&��8�Xx,R�k	��kI��Xy���gN�����bB�L���Y�W7��{'�K����la-����69Q]Je;���m�*Md��&4~�G��S�����d�=Z�}��L6X���Je�%��>3J���g����+��W��I������0{wE-�,�5�E2`�R�L�n�5S��imz������H�{3�dw-�fD]���p�n�0p[�B�iB\�x-n�$s����z��Qz��P��<���cT+����l���W���:?���s��p��������/��������*�8&�_��7��l�}"����y��"�����Q{B�i��y,��A;���#����#�c�SlMa���D���F�4���M\!��
HmlFx�+-��J9�{B���s��}��Gu=�!��/��7>�GW�y����L��p�.+K@�[�Affg$����k+�6`g2T�=5�2�}
Q�������:R;��_�Ut�
��)5����u�6�:��2e2A���s�j�i�i+Yz�9���	�jJ�}
��K2�t�os>I���X{��/���^��e;c;���HPuO��/>]��4o�������S6wH@��;�0X����E=�}��S���P��j���jaeUw�xDF*��( �G5,qy��n$�5�2�X������-	)��}����vhsF���'(	\Y���+����{B���nmLJ'��8�6�blEmF�z*��)����a�V}�zw��� �����mz�mBR[w���m$W����2��P���/���8dp�sDa���`/�f��:g"2����@����_Z+���i(H�k*��J�bW����@�&"���-��p�w!C��4��`��h)��%��Y����N���]c���q���R�k����f�
�?��X�D���m���-H;�w�����H����c<��j�=��@�Y�W�$�����
����25N#Z�b����L���2hM\���;��ND�Cg��mP������Km���?,	E���l�%��@�A�c���>.$$�x����pO��Ec��@�	fc"�W�|*�gi����������+M$��P�N���,H��.'�sV���a2�K��|p�� p��<�}sB�>�}�t��-+�M7t'�����"($���-1���T��JOIC��b�V��Z����'M�?�P(���9:�}�rF	�#k�P�u�?��#����#�!���0���0��LDw*a���45��?,�P�P�'3��h���_��-�#;���;j��{A�W���
m��Q}������7A�X����.3YzhD�i�
�:$Pq.�����&Ig4�����-_A���l,�����D�<��}��������h4BK���)=��7�r���t�+��[,����w!C� 0�������9�����;�~�>~U���i�P���G�~Al��]�%?��d���
�����M6���������O����N�w�	:z"""�� �=�,�p��.d���E�#�qs�����1���p������sT�}��=w3@������7o�d���S�j�h>����e�@%L��{���sX�2�kv��Gu"Cn����y���O9��kF��d�6	,�e��Fn\uj`DE�EO��%�x���	�h���emW�XM�����2��g^�s��N���#;�@���frBRja�yGM'���E�rA�N��[w?�IC���`�':���!#��(l���:�q*5#Q"����exCd2�
K��u�nVeqf}�W�����{��������1������p\uA�/vTY.���?*E���ff�V&$��,��.�C3&D�H���!��<[m�$ugpkH�oa,����r*N"<��������Y��Y��lG,D`(��'8�m �@��&�4Y�B�Z����uy/��Zb��n�"�$�S�t�y8�lF�)��6�������VR��~"{09��E��kp��I�J��99�|���&�~�fsS�,g�bM���n��v����G�G��2�Q7�fAUg���0!����m9���bf��~��<Z���a� �$Vi��9WvB|;|&��T�p�@���}���~�XQ62�8�{a�����Y*��N��*:�x�h�����\�����c��O�����]Or�
��Z����,]d�A�d@#8������������T}w�y�9�<:<������m�yl�*�J���e����
@��q+���L�W������9�zpQ��1�N(DQpi�g�4�/95�|�p�@|�Q��1B<ZcY7�jF^��RQCRg�{�98>����b�������2�������v>��������l��	���������O�7����7^���BS��l�����K�S�2�0��y��cy���+k��X+T�[���Bo~����4���x$���e��@L�������_��y��~B�7���h��>�9&���:[Y�HxwK��!_��qG���>��=�<3��dH~��!��e�U
�rg���<��+W$k���
�3�:##���]��t"%�Bm�HNw_<�kAR(��g:df��/��E���������s)�~	�AO�k�M���6*AWN���`�P�:��n��A�
�P�d��� w(���B��]5��%��Em������~��\wD��2i�=�Hxt_<oA�D���7I"8nd|��#J-jv�2��[��K
�/h�w&�#x�K�|��BE9`M>X�	���qL�B1;HP !���hrn~�I�$yD:L�/Vu�Z����aj'�T�A�K��O����x�7�A��\s�g����������za��6
�������u��It@>	�w'��zB��5���B'�l��H�EG�M��d�	��Hw.���ol�a�_���u21��1�dFN�l�n��7����S��u���&EY?��� sX�	�.���V��E"Q�!�bv����H| ��"{�D��	%psd�D��
d�W���:h=���D-L�V��w}�H�������dY����i��o��+wWc�:������"��}~�\�q��P�:�Ra$�T�}ta�G&st�3�M�OQ/�:�XP0'+���t��k�Yf���8�I���KgJ��u Q�R�bw9�`�#P��t��Ipo�	����6Pj��Q>�}����~4�q�bE�R���2wipa�9-����i�����lL�{���98������&'�4sc���\���ag���v����wE��e��uE_A\D6�-����[�{e"#R`�K��^���f��F}�eo�	9��k7{�I���Zv�|gj�wA�{�n�f�=��������*�����0�K�!A��:�@f�aX��	��}�����
ws�wax�{�M���:3tj�'�Mu8d9*�"H^���o���Ep�����"�|���|�S�{u��H����i��\;S
�<��'7�g�B�����������+\Xy�@�-c�xi&�]�r2%����Y���Q�b�
(��������j x�'�����iq����yp���>���>PV�����(h@��-d0!)�t�����=�����g�-���OS�	���s�������:u��������s�W9�S��c"x������A~������H��A�����3I��sg��GYL)��q����8	�����y	��LBi.vV���(e�k��|��N����L�I�E�C��4��O&���aVr��6V������<t�F�
=���n'�V���@>2�C��	^���Ce�N�����7�."���\Y���J(��~���i��O�z�$����C��wax��w�N�a5m:�D�JptL�.~l����5�� t��)d�q��l�6G���x��B�>�����!�<k��
 s��[�����@���]�N�>7�CZ����K	��n�x�#�Cu�<-���b o����6�:�
�!#�M�G{�q��&�h�G�����D�Y�D^
<f�&��l��#1��T		�z<��i���e4G���7�z��BR�K����6��D��Zh:�P
��k��)y"_�=����JL(��<�$��Q/5�L,ZO����=�/���q\�b���O �a7���S�C�v.%i�vz�7T����
>A�.���3�wtn]���q�=����9��^�b���X�]�a��S{:3P���F�>��#>!�So��������~&�<�-���[���4��X��ZT "s������j���%$@�$WU�N�������}�n2��q�:!8o�5X@on+r	�kC$2�X6(���s��Ba�W���i,l��������2�S&P��:|�c�7R
@�S!�����g2d�F?d��[S��'Q�d��������@�Y�HT�5N���HD�Ud�>
3�Q�";�Rm���j��9��}�&?j��z��d�	^�6���������WQC�<��j,^�������d�������KZ���a�v]}�_w�pq��S��4�-4~V����F>,n;>k�GZK>DQ�YQ��Q`�����% QZ��L�*u��
��c�!���0v)�����������/�aB�T�uO�	�m��]t���k#�,P�G�B���BL&A����*��r�d���
��`�PM��LB]6V�U7���H�CW���Q;&M�]�Fc�~qG����,�h����'���
���v�t1#�"QZ����vF�����IgF������D��P�I�����+wt.Hj���k�j�������^�Yf&�@i��F_��H�vG�g�G��D"��Dw��Zw�K�	��<W��IM�<�;�D�����4�OClj;�){�|E�!&a���f:����A�l�0�_�g�����LM��V[[������T���i%��%Ue���
Q� ���M�'$V��Z���vo����dT��}Zs��\9�-��X�G`J]=��C&"�=!K��u��C/�d��L�����{�c�T��5jiVcu���K���WL���7�?�	W!-PS�p���������!�C���q{P=����N ���`|����j��d����������{d��]�E��� lZ�m0���<U��0<U�~��|
����cj}��
�j�7�4�u����Q������n=��Fk�����plR�
(��N]k\�!���������iX@�o�����y����9zpo���������c?z�-��[����g�(��0o��������e�"G��G�*��N�:��-�CT���$���}����p'm&%�5yk
�Q�,��P�,���O�6�]d�[lM7���j�%S���e-�gU�4GE%����(�P}����
�3�b���Ee�4��z�t�q�)��Mv9�H�P�R�,K���Wh��}~,����+��c�\v-Yb�<���/@����9R`�1@IG�] �A��,��}	�>-���V�\����q��%���7B��2<R-8���g��B��RW��;v�:���4x#���8/�k���uzw����,���zm����=�I�<��!N�5s��U��#�W��+	�6���fn~��q"���H�#���%K_�~�w�N������\�*�b�Xl������v����f�t.\�w�q��feB�Jh���!������7�?�#����
f��1���-�y�����h\
��br�P����g��/��Yd�dMY���R�I�k���#R6w]=U6�5_����#y�f\�J�|������[����/���������_�������|���^;�7KH�����W\�5]y�b��(W��M5]y�b����^{�{�������y���V��Jo}�\���LS�8�c�s\~^����6��D>q�L!"k����KF�Z{�C�#���T���qc$-�Z!c1U%��rc���QI�%��sz�]o{�Z��"$�U���+��F���d��H�]��'��@������,����d
�jpjT=�wn}`
I�23	��=�%Sdt,�h�i*�E���&��D+�9W�6��J�<@�0|�jF��^�5$�YQz6��m��8��"�UUP+�j�1u2N�����=]OA,�EU��^4>y��r	V���uw��d������`��+1���[�/��u�Fw������>7�3�9���S���}	��9��j�T������Y��n�h�$WV�/[�BB�-����M)IK�tf#�,2d�MiA�+@S�c�lMp�kTkz�{�7��5�\G��L���iA���6k���t&!�-=4|H���dIk�fJ��gSZ��a#���o=��B�����;����|�dL]
N�N���+�`��BZ�������")��&k*�t�6YSE��r�f2���z�?4�����=l�L��-�Rd5�����	`�~����>��$����aIgrc!g������$`����=�g�����;��dL���H������r�����5�n�m2���-���[���`gO��Q[�
cZ������9=�������r�C�N+�a���c�����m&��,j!�����E�L��?���gGw��s[A��5M�}�M�J�����U�<�kX��P�UK�6�f7fu"
���{��b���W����3�zq�]���9UfT]hU���;z&P����7���"Oj���~��1�z���Y-H3�������lW�*;5��@W�$�J����L��.��qs6�	���dV��� D�����V�%��#M�[�}����j!"����TE���D��*��Q��'�;�������0cH�:��j��>��|�����E��+�A�0Q��U��tVa���Bk�T_�����2�)�#�"W����������"������o������_���9~��)�	^P���O7�<�|&�dX3����i��4�B�@t�y����L/���W������M����Kv���7�~y��D�b����	�|zK,(�0|�!�9����$|�^!�'Rv���!��Z�����m�y��B���8p9�
�/��x���=����������E�AV4�6�L��}:L]3����S+V���;I-�u�������~�1��`OCD��Wn2�D�5|�p��UE��V|&��l����g5-�mN.��W���4�\2�U�������,l��?�[����Q�#�J}*H�>�����F����:[�j����Y��@n�!���G}��g��HV�n\Fh����	%p����c��g�0��<�bM�jE����[x�z[i*��SWABl��j���~k���DU����(�����x%����Y�����y����\xbf��$
(���>���h���)������/���9U�et���Alz�����tA@����^3ae3�_�$�7����f��V���=�~��LL��|[ Z�;+�f?��lI�<�O���2l�d��%<=o=���������;O=1.	�5!�~g�c��[�H���/�=.�t�a*Z�]Hc~���R��	�*�l��h��^X��j��mKv�3h��
��f7/Ps
u�������KN�[�o��L<A�q�LM�}�/$	�'�������^L�;�^��A<QAxMH�h1���8!-��?���@-|*�Z�&	0�T�������"���v���!�B8�dv ���EE|0o�g�t�J�Hs�s��"r�f"2�F���t��}f1	tg�-��R�y3-���K�)H}]�=�f��g�OD�{�86�s�-�Ca�]����<r[M� m��x:��S�z�2�&�	i�����Z�@�V���0d0�I��y��J-�����d�=�o��L;�B�@��l=5^3>���h���]-����	���1r#W�4
�$M�������[�e�*H���y���4����F�}%���?�0���@�����i�AU-�i
{��^h���:c��te�
�&�=���Z!���1_�&���>.O��L���'��kA-����0�*���"�����f��t�Q��,?3����I������%#S����WB����}���p�y��t�����N5d�4JXA����U@@6!���r4����"��R�����jQ���P�t	u+DIpx�1A� $a;�!F�Zgek����(D�E �%�>�yv����(+2+���a�>��O�]b��v�p�'�>�Y��-�r�!?/��t.���,2Y�������9��']��Bk�c�yTPn0A�~06���.�X����%����5�<�$���oMW7-(���P4��n[����et�[,�B�N`�P+O��z�	 m��W�\�^L�z���&f���t�5���r��}vH<�7��Kk�v�cr�,���H�'c�!n|�g���	��E��3�X��Z�����}���cw~��x�<�b�H*��,�\f
V_�/w2iOF����f��g*�u�>+F� ��}�j���H����`Y}��[-���)���3K`C��@Sg�P;2�1��*��Ix�L3n�I��s�V�	�Fo	��p����������.�d����E&���R������>v���:�q�����L[\�1���:���n;���}��(�������c�L�PboJ�d�������B����f�Y59<�PB�OH�3�T�>r������*Qy1RV@�a�t^3���eyjjw�Rz^,W�<��i�|{��5�����&�����28p��mQ%fD)�����G��=?@yZ���;<�����#�����
�2T-�X��p���p��������w�C�Ts,]aJ�����VA�7Sr�1������d�9��d��.2����
+��$��������~��!����&�����xi�����)��[���O����5�/����ZA����JK�V�n�$�Z��!��9����u2���X�����5z���T���\��i:��v11%S��lw�L=]�9�ja�l1�&��l�ihw�$�
��$=���K���%�u��f��]\�N�������5d�<�3d��,����VES/h/��3,\t�R��7B�l+�/+6�[�����\M����j����s�k>�m^�������o��]L������)L��U�	-8���X��f��n�{;��=o�������rD�OH`����K�]�v? ��_��*�X(o�3��Q�~�[bY�y�n�H����!����������l&:[��3�x^��	)��l��x�A<�n� �];����I&�0���hpN���o6��;�z��+�����S��<���!�)�b�m��rz���,�o�x�g_^�aWx���e�Y��)�&Wfj����32o6�-����{��������fO&��V2
�:�W#�,
�����P�b����e~�eS������r���a;D�L{k*Q9znx6�������?�C�:�a2��f�a,��~�Z�����,t�������5�����]�{��2R�mL�x9h��k~3�&r��C��]\g��g�R�{f���)�Sy3�U_Q����S+d���C<1�}QY-����/��i���X`jT&~��j���a����&7�yu{�0�^�����H�9����},��f�.�\����)�6(�lJ�/���9���W]�;_eE�#����5��+�|o�����\����Og�k��<�u��	4��Z������o��Z�kk����
j��E���4��LMhO^���s��Rn~�6�~����.�0���C�d��f����f&�D��Dt]���m������+����~�����?�a�#x$�jG1���!o��������k��=�Q������_�x�?^��}�>���q���1���5|��5;t|�b������k�X���U�/�������������k�x�j
b|��S�AL_��W�����UL�S�ALo��[�xL�
1}�N�
Q>>��wT��O�N������S���O!��]���b�|l�����
/}1}~�����s�{-�:�o���t���.�����Q�n�������1}1}~/����1���������c��[,����A��\ &+�L
1��}n�{i�}2p������5z��\s����}�j�b�|V�^�z��n�Z7f�x��;�����G��Fn�������Z?wC��>K��?��������#����#���[�#���e��Tt��#���:��������O6�?�?�������?B���S�����||����T�a�'K��s4�����>�Vtov1��y�������h��_lE�f�b+7{[����������Vtmv-��i�g�=���h��WlE�f�b+6{[������v�>�Vtkv)��Y�G���.�;���;aw(��ll���O'"��<{�P����">��<��|.|��_����|�E|>��31>�����OD8�y� �����\�Q�?���Z~?�MF;�%���?�(eC�|\�9K�#��9����`^e=$|Me�Ne�b����\�2��r����V&�7o2��s)U�l����2Q{�c|'�1U_%�lCy������C���$�*L���
�/G"
Q��.0K���\E5`�2*.���9����w%M��;�-���[�~�qhP���b��G��j����2�����U��KJ"-��=���C�f�	)�]�s�p��U!�:�7U�!�fy8����9K�2��������m����6���Y�[�l�!i��� �n������G�N�V���Q+K�Z��ZqhY��lZD������ T��:5`L���A�a������N�d�L
l�����P%��������9����^������V�J���Mf3O` "�����rC:�Z�����M�+��X+$�����aZ.����K�&���4�W��jX�+���*�Od0nS�x1pdKS��4DN��Oe--&�>��CN\�O���n�l���
@V�,�
"pQ�� �������vTe4��k�?�kV��R��~0�jjOu�53,mITu������ZCC�S��H�y��+�M��$Z��z���.�F��I�"��,k?s�:���b[�(�w�� o4���H�7m�Wq��$0.>��u��@���	0�j����u�+�ZC;�P�=���E��d~	CAv��,��L��d"����RC������e/r_)o�G0��}a�&yew�Ae�x`8��VF�d�f�,���9InC����i>��9���T�p�)z��SHw�K���m:�h��q�P%���V�������������+��`���1UU�`���A�
���E�W��	&�]�� ���}s=2��iI�o��@e`����b����2�(dL2F	v�c�d������B~^d�4U��%n��I�A�(Om)n%!��T8y�<�Ee0p��^���5vj�.�pD��,���.���J��;���2�i���+4�-�'���)iU�`�t|h��"H4l��*�Pj�W��2I��}��AO=���Qk7��
�l�c�:,zX�`|� ��)��������Q�"k��	�����?B��gM��j/O���S�U���'W�XD]�]���3��cb�
Y������gy�e������\��c(.������sYHR$�P�RV���&Q���fMn8D��u����:4�F6U[��?���5H:
��!�I��;1�_u�b�O�E���X��~u�#��3R���������s��w2z��~�D�W�r��<�#�e��%�������Pv#/��L�DG�E�v�������*2�U/���@�zL"���SM@�#������}=~����rI�(&�!H��Or����j���3v��L���:�F5������_A��/�L$^��{�<D�%��g�J���������������d�^���U�]xf1�k�����U��[��k�U�`��KO��m�������<�u\A6�0��a����}`��\��W2���
�w����d)���e()������*�����3$����b"����V��*�v=i�p���rF�y�=-�����v<I�y�M%��rlz|��!���3
`1y�Q�{z�*0dN�6�sM��
C�dY#$�h������,�Za����}�H�'E�%'�m�i�/�P* ���"K�������Y:Z�Gp����j����0�94�K?�;7�
��:�&6m��}p���W"���|rH�/�-6>�a��\c>��&��n����"���x�*���J�%��g��Ak�Ae�80U�L���@z��o�2��I/������H���}2��L��^����lU���f������U-t=��Tf�����G��3|���� �x_]���
^��E�R��P��~��S�����
���E�a%���"����"���7�y�q�G
Yw�(������q��+]NQ-�����:}�C�9�D���bg��|���Q�\�
=2��;�I:C�\
� +����<��A-)�dKu�H6�J��.���h7Co�*�E�2�Pk��Ndp�th +��K��3J�
y�ru��/��7�!|�23K�P��lI!��R��L8�I�����r�F��`Y=8���M_8�<�������<G����1/����:���g�`I���bl����"<�?���Ve�������%VQ�&��"��4�1Ku�:���b8l:�I��"
i�[����	AM������q�d-�0��!����l�$��@*��..����No'��z�o���us_~�z%f��
�
���������lg{���t�����l"�O�*?����SQ�t�'��#�>�ca������I�#�
�C�Id������n>���j?p;�uk4V��T�GDx{M���VwM��yRq%�e�����lv���P�����:��f�D�t��]�vYY����V�v�5
�V�{9P0����n��{�o�����Y:���������?o��}5�
�����P0�`O���$����]���n�)~!53�����:��,�n�=����_�Q�=���5!��e��R�"L��n��?i�&+�
��}Ju�o�\p`�����Y����L��bY<{Q�m��P��Vy�mu%"oXFs-��2�v+D�+I���l�[�E^�������~���v[��k�����a����	6OEYV��9�u�]�����Z��80�B�#|�����aP�����1;^Q�w�ry���h���_M���v�f�A��k�r5GW2��M������nN�j.��������bC���HF@�uq��&�,�}O��y!�u�	���.B4k�y#4����3R����9Z`����hKZk%L�T�nD�\-�f.��/��Qk����e�^��m����N�1�d������2n^$_�N��C1*���M���g�P_��[<~-
��7����o{�SM������U�6��B��`������p��o��&Q[�^sX�����#�zRQ_�_[�����%��q�������7��s<x$.�)����p/@D]�xlh�tj��_�P�+�0z��
QXR>��Q�x��#*�
Aiv~�E}�hJ��������u$��d�4�#D����Xl��,S��nO6!�D���o}�������s���,�5�0%G��W�l�5�@���)`�voM@}�u�"T)��_��������poW�>W�y%�^q��6����v��j8;���o����^L��<��B3�����~!4s�@Vk�+f~�%,/���]��h\����)O}%��w��y1���t�8W�\��DW0'R��*mO��������L]����13�*�=(��G��>V��WO����q�{���=}�������A_{hrMH\��7�}��i���_'70E[�H�GA\�n��D�Os����@�}j�����jp���B�en��{xq
�~�b�v�1tN�o{�C�Z~s�2���H*���`g���N�$>��[$����!]�')�3+
��.�Q"�m�m^�D������CmBo��x��b���JE6�x%�T6��}}�R��k��+w�9��J!"��	�
�)F+3�i��t��G+���h�����h�-�+�>
V�ix�����2�M�_��������(F��c��]A	����y^�y�~���L<.��]E���'r��������#'�y*s`����p�!�w��C�VE	0�'��0�x3Ry�����7j����;r��	t�����+b"nC��|�"`[5_9�K�p����� ��> �
�����5�wo�^E�FnO�*��zF�$�>�S�}�H���B�����G���e���(����=-�WH�Q^9�wc��H1����9u1���c�}l@��"���u�(�ENo�O"��R�R��F���9RE�w4�'�g�9�
jY?�+�[:�������p�~>�(}���E��O.���\�#F��'��������	8,��BlV�e���+�Z0%��O���9�D���.�`�;�h���D��}K��o�K�c��%D����=�
e���������mV*��&�J�s�����M�D.�^��|!nL����$F����dM%S����~P����I�V^Zc;���@Z�|	����{�BX����X��7Z��"&p,~W���XL�\r7�9��G*h<��dt0+1i��7eS���)Q����?�3y�J���I�	��M�Z4�(E��l�Z!I�Se���b�9N>"^�:7\\�SGC��w�(_�9^���?N&�\�e���@���
��^�[io��1K��?��i
a���aA%��c�Y���E���b�
)�Q�O���6����|8OD�x%"���>���}q[�2pW��`%j����y��f�W!
�m��#]���pQ�#�X��BdY�G����Y>�ZskP�4|��ea�����<��/h����3'�.�&��9dDs+�FLq/��g���y!G��\�{�����2Z���	7�Y�
��fD(���������5G�+Q-�-�68<:}�wg�V������[���:/k��������1�az`����TA����m�14]B������u#!)\��S���$R8�O��e~�n/����Fdc�����i��h$��S��jf?@�--����6v������6M��6��>�4}����?P�z����4+I2'X�l���������q*��)<�3�n�[�|����
�`c,�kP�����(��������2W$ ��v���X�������"|�����
�zr�W����X%*���^a�t��b
<|f�c�A������u����|��d/�@��u��%��wbX��%��~1����E#�]F[Z�j8S{!W_^<�U��3��dl	�I�[;���m�����;��c�k'c������1�/���I3i
l2V����~f�e}S��r��{tG�en�zh�W%���Ul
)��H���c1��W$��2k����.�m���*��O
��r�B^<��jF�����bB������: ��V�E��
��8�<,�z�o|)��<[�e��y��V�`��B@�'�G�%���J������a���/MSB�|��W�	H#�N�Ot�hl
��U�0M10�1�g���Mb�����G�X.O��{g��I^����Y�J�����L*��������~�']E�1���hXh���
�2oN��Xl�3g���L���I3T��Y��9O14����y�x^��-ToS@��|G0hg,A�#�BR�]
��<>����q2�{L�2�WY��5P�����jh�"�TGl���;$ ��m����`YEc���O�*����M������j�#��a���Hl������) =�0��=�#_�S@�%�e�	�%�h�Qv�W���V���4k���i/&�_�~�j�|B�z|�������t�W����qT-l�F?�0�o���6TQK�3@EaF�����3���}�#Z��
w���)H�#���!�B
��U$�(�Uh����W$����x'p�����@�>��5x�*���8�3Y�G����F�
���av��7�z+hN����"J	���,(�B�`:g��lvr��G���hK�vB�'x(i�����}�t�.\�pd��3�,��LD�Hx����#��V����t	�'��$w]��LDF�m�\�����0�	H��2o������N=��'��1��7���
�|����ED��F����f��n?��W'3���r���e����?*��U�FM�#+�gg�u/�
y����q�O{!��E�.��&��:6�Ae��!j_'����y����a�Vi",�:��
�Cm�G��L��u�4!�*A� ~�^E	�n34�#����fd���`$<[n+\A�G�Rf����h�����*p(M}ar*��+��|�P���x���6_���[�H�����4�����EV�o��=h�p��
��;�)������Q���X�3�;���VE����]��
�=��y1�t��_�J}�����'n��K3>��i�w}}��4���-�"
=��,���K��e	��B\�CW|�*�����'����V�+�:��k����MG���)�m5pX��Z����Q )����Fz���5!��65}���fM=�r�9�Q?z[j*��@-��o��%��q����
�xI���d�Vy�tE�$�c��V���������*�}�#��D"�'�2��d������D����Q��Ee�4&uB�XB�h�X�P1�����C�@��"���Q��e��| �%�Q�	�����D7/����"J8�4���XW�	�|Bu9t�y&���~Y����|A��,1����1+2OZ���ID�AD��H�{���la����jB3�1E/4D=8d�_*��barD�K�>d�#r���_���Z4�Q����g2�tU�=��0���!�V����7�/I�{��@B��"���u5BZ B�&h�t�n)g��(_1�O/�yL�P@���Y6��&��yA���ZG��F��E:�����jF+�d�N��V�`!@��H�<�[l���P��L��A�������m���/�:�p`B>�'��F[�N�C	�n-�F�������|���a����lA9
#��z�]%Q��WZ^FD�+� �����DLh6@��v]<k�U��Y��g���"��!5��+5��
[����f������qW;����l�hZ�^��^�LDf�t�qc=�S�B;s�7�\qQ��������2�d#'�C��N2\7v!?/�`?��I��\b���ab�v�4�:�����y.S_��?_�1I8V�:m�GA-���!d4���}^D��^��\��V�&HT��A2����a��h�����	J90��\���E�'p��9e��#_rX�@[�j��	�a�N�x���<�L>���c�����
���~��LP:>��-l|&��*
E�'�e}j��}���
.�V J���v��R2��^y��7��_H`p�kw~{x4`���2�N��6��n��=������\v_�L�hp]�Z]���r�I�<<S^-�m�v������������� ���<�HV�����Q���X#V�Nt��.65�P$5�����F:2\C���l� e�n�}O��~7s?��6�`�|M����4���&Qg�.�XA���:�j��e+L�o�j@��\�7�A�@N�,�P~^�k�����>3����2�+H�G{<���Xi�D�������w~�A��6-H�
��Q��
��@���Z�G������8�6N�r���I����:AxT���v�<84m��g��>hX��/�����rF0�ZH�S$c$�%��M 
O�v'^7�%��yW#s�����/��R�c�����`�������0.�,����8�Y#��>�i�wvN�����aQ
�����(�����V7���;���h�-.>D�7wy2�*9�l%v�Q5b��j�.BT.����GH�!U��M��i_��������J�}���X�q_l�}��
���f���Xv��iM�
b^s�d��y$8��-�VlP���F��h�\��>/�c5)+#�p�����H�^�m�.>�#�������Y������==�a�=-(��<�x���	��)�����Dd8N��%��$}�6�CCz.���i�.>�
D2+u�7������q[X�%%S*ww�M�T�E=�ML=�Y�� D���,�D��r7��%��o��i�|E���Q�����^���%-H�������lI��*u����T������5.������Q���6I��"H=KJ�SO��Xl����3K�B
%��%�G�fKZ�������0�����"L�$0�@��qDZ�Rl�S������D�6���E�����T��lL/zS����6Cj��Y���3Zu>������j��Z���ler����Y��GPI��%��s�A�����l�L#;�L�M2��L�#�D���A��D�N�Pm�D-�pp�D���GPIFN$�q@���h�_A>�"�����PF|,�pN6�>���!\�U���4_����*�2���kx��X9����I������\79^J�<A%Y'QU��1��mKc(�5����8�����y\(uZT����x���QVA�%�x�
�����<�"��a�(�z%����Bi���IU���l�zjKp�6)R���p�wU�4��k���X[L����e�FRDi$��dI#)}�}I��T�
I)�i�{���%^�����D�2�PF� V������ #Gl3J�V��m;b���|��q��Ad�(��\O��E��Q.s��~eCY_cc(�O�,��7��El����J����eb#(m�GA	P��y������I���AA]Kj*AMh:Sz�g�I���������jB|*�c��L��8�x!��Nk���sp3����tS��(�����+����g��,R!['���<�+�u����qAZ.�'{����p�T����+]yXf����kd(%R7"��R�,K�Z���s2��G�lF!���
c����#��|�W@t�#�,@��Wi��)���L��^�,����]:�lDe>=�D���������d/���",y�������/OH��M!&�_���<�t�����w]��'����!����7�?�����h�h�e�����PLsXh�!�]���^�(�bF|�`83j������X��S�L��9��2`.q���D����3�4��/�q���z<,�#����8��,�A$��MI{���!m������<��w=*��(b�p����Z���c�m/sv=ovE���}��������O�n��H��G�+R0~����)�Q8�{��p������Z/[�c�p@�I�5l$�X�\A�d�N6��65�$����=��$iN�F��c��?�48����N��A��C�xw���Qp�=�18@�K-���$F�c�5�}K�����	�����T����cpWJ�t[fM
��Z�z�IU���Uu&���{�w�O~�6����BYC6e%	e��M��5���:��������IWz�IY����!���X���u1:0��2du
e������
%����3�Q���5���Ew)M�jW������Zu���,/me����T`�1��� �g�"w,M3�IS���f��,sB���,��z)�/+S������|RH�k>�L|�G{��DV3�%�'0����ON������,�� �.%j��
�,����k��t�|~H~=1����M�e-��Q��""1�?/��.������GRU�)"�	xiHz<�/������]�{�Z������l6Ho���!�A������>���(���l����YM��DVnU�� \vZ�O����ywl�6�r�zer�)���6]����K}IA69�������h�����b���L�.���������)�>7$�-�@���U�^NL�����|��������� ��\��y')>��?�������EC��9���$�K��(�o�y~��K�������������K�������������K���������)���y�%lb|�|��9E������&������F)�s�<u���\:���s.��h�9�.�q��|�������G��/O?%�����,�:����U�������]_���_���6�N��|�>\����a�W*���o����?_�������_�?�o�a���uI���V/8`���H���	��Z��D�K_������C:�J�=��R���W-�>���C�mi�f���P�S��x ��L�4�/[�A������������p�}��[��-�b�<����O����%=8_��ZZ����8�YBY��(��B����S���R����(Y�v��Se3@����u�t&?�~�I��2B6���Y�:�����$Kbf����6���}B��&@O�r=7����o�(_"�Yvn�P�f�$Y��[7��xC���3YO\zv-�s�"��c;>��	�c��>�w%-�;")Y����q��qNZ�i��F���f�vdN�%;?&_d��XM���6��?�������$g����nM�f��yd��Gs����
������)�d5���2�	P�G����RGp+���O4FF	t���Z�t���%��ys���~X~��k�:��#�����	��PlmBj�Z�n\��\��*�d�X	9h���D�n���F0-]��Y��R�g2�*����`6��&����W��}����:����Z��O�1���X7~wT�����e�m9��0Id�{1�O{3[��+}���a��2��b��
�P���������$����gk}���2����@9�Z���HU��p|Lwv?�����V�����M��L'F��Mn�K�o'=SA
���K�Y�|�3n�&p~y\BM}��3�Bv|�X]k��LT� Z�C��kX�P�x
s�4Q����N�8#�I�|N���4,}cE���4�����-�c,_��o�6]��������f(D�XQ?��O��jRga	�����WN30��7�q��S�*�'"Xy���M�OE*��wK�[/RQKD�~S���"Z��.���9�w	�_�%
H`z!�9����[�`C@���"h��H�XPS��@�uX���9IY���=tU���SSb%��G����
i
pR��1��[�
H"��z�a]����\$ZP�^D�����j�E�|i�A�N!R�����m�����eV��&�o����=!m���a�Z��c���i�%����#���<�r��\
�qcw�w\C�eu<O;��<���5���������<����yy�U I�'�G��D�l<�*�v�i]1hJ�c�BD���'�sp/NpV�%�r�r�h1�K����=�8-f	��N���r�5Q����)�hg"�g���=�k���7��f����x���*���[��z+�4 ����J�<(H?/���<]���;QPS�����
���~2����8.M(�����#~��l����;�{^L��1�D��+�`��e��[��/X��v����dM��T��`eR��c��]K����+5�'D]��J����'��!)H�%d�P_�6�3��b�Gl����\an�������_��R���!�:����X��$I#.��>y��0�~�30�u����jeY�I:���NH��{-Tp�80M�
},��c���3#v�u���e'*GQ����=�W��l	y�(�������|{�nk�������fB�l��JW]y\��0"�����}u[_��GA�Jj8�����Ws�ss�U��v�������4wpY0&]t�Y�L1{@�b���Q��>P0,83��T�P�A|� ��������w�1`'��S����+�H�Z���2�|��(9�n�.�uE����=�O
3�����,��D�qN�}������7=���g���� ��'_�S	M@�.K����f����aq4��,R�s	����6��J��]�6�q��^KN&���).$�VE�;��:���j���x8-kS����l�4�t���*�DO��{��+={���Y�
���2���������kwOUe����i��+�d��
KQ��TE�v��Zl�QP�f"vZO�qX��j�d1�G�"9�Y�@�G����Hk����ik�hA�^n�����J	�.��5���G)L�
���.�A����L��qG��<��L�
��[�����c���BD�`�w{Z��/�������!w�v���tM�;p���;�*�/�a?�N���WdQ� ��u��v�@-_D�I����+pLS���:��xz��d����=�_��������G���I�,��M�!G����� <a�
?��f���������de���<��BD�g�?����.wv���
Uw�����u{�	���-�h�����K�}o��v3[���u�I����k���{��p;��,H��q�UQ��]�T���1�NZX��b�41W����g[\����K����-VSpoS���w
���a0�U��|��$kh��-���C����z��tm�;c;+3��t[�����n�q�[��x�����S>v���K7�0���	J�D�+��w�tf�f��c�g������4����p�DD��	����3fXfr7�mA�������}����q1���!%-��#��=f����L�-��w��h��}����	i�Z0}Q6��1yK�I��l�e�)KS6�}VN#������}�$�����^��/��		�1������T ��k��j�Y����N@38�>���YYa.lr��5������t"������@���[(����Jn����ok�j�L���-,�:G�M ���t-���e�i��%�j�lAkE	h�;����XR�#���A)i�h��rK�D<�����}��B6�
4pK�cgIT����9M�e�C9������^�#�`�V�J`P�l����b������)<���5yn�����:�����{��M/��b;���a�?,3J�S{�y
�����/5�3��	i7~�*�!O�������fc&�W�q��Rg���n��� Cw���$���e�`���
$��xo'��u��*��p�y�d����;y!t��<L��v����~��x_��B���p_�g�U����Rz������$n�E{<���7J����GOE���/4������=Nb��p>t������f�]�������Q����J�V�V7=���(k,IU�E���.�X�E����B�r�rA���Q���u^�_�`��O���"���U#���!�Z�t��	�	ML�����6��o]��A��O�1-)���J�����c�������p����}�@sa�F����%F�l��""{��`��l�N]l��""�#�������'-��n_b~�_(��CK{��gUf�W]��b�������P�Y���=8>9�=��y����K���'�"�{�;��	WhT"���"����R���:����nEKE��T\L�"���5w/$��i��������������>����5cE%M�wl��&��b�=c��JD�|���<�a|+�t���)69U�
�L�)v�����5%=�K��`���H@���k5�yM=������Pdxb�������#az��zZ*��z03�n5����Ka��wp�f��3}Q���w����y��=V
{���������T���K���exBl��
��+���*��U�����K[L*g�O��~L�j�0�HI��[|	S��+������~�S��������U$ /���'7+��������is�v>D-�2�e\}b��������	5��}��6>�a�H�����:
��? ���,J{1���9�}Zi���@���Me�JoQ�z����X���	`kk�"[,���zZG����	�\W�f�|]�/GY\�C�F@=����Z��X]j���FN�5f��w���#�i/ �>�ai��J�X+l��mH�n/$�W�k]�xc�$�+/H�qo}L��������Z�������z�HS0V~/��{-���G��j��B#�t�����&��Qw���O�l;��5����{��4��e�M��v#���okZ�6�L�����2��j3��!rF��'�R�X�����t�0�<N�m���Q����!HS�MI^a�L�C�B���,���'��B�%�ji�,�����tr7'�����I��i���X�`F�Ynac�X,��a��a�JB>/�[�����q�%�e� �$�aT��K��n
R�����2�EO�0��"�T9����T�y����bv3���b;$,+�����B����g�d6���H|�/+C�N�2����-Zd�4�����y�(S���i&Z�1��/$��
����������n�3������zgb,��	�=}�$��
:��6�-���)<?�~��|�q����'��M�.iF���_�2��c/��5�x1zrb�;�D�����|>?�-]-����
g�$Y�����2�>�|qi}�9��n�����x�����P��~�^L�]�����!�3�:��~nJY�����������J������w��*���F���d{���)`/���
������� t	\Y7������7��'���1<���!�����r�0�e�0�u"���c��:3�����`/&�����n-U���:8�3���.���;��!^���
���U�(~{*����*�L'�^6�c��fr`�T����e���}�6]�LL?���������J�ds�Sd/�[d���~x�d��D�l��+�[
���=�"������l�E1L>@�������j��g�f�s��������e���b���r7���C�V�a�Rl7�����8~&Y��,'�	R+�+�2g�GU��f������I�a���z�$7���X��]��\@��4}kz����p�����Tp��<�E�g+J�e�4����4^,���I�[��3�����Y����|�d��f�����K$���2�hU���Q5��8��
,R�dy�
��X3��z���\Lpd��p�i���eA������!o�0��m�|���s-�^��H������7�,T@6k�����=�Y��1\��u_����UI�Dx;���*�%W���7@�+�p;h�f���
=8G�7[Gf���iTN����&�As��`N���
�
�LR�e_��=I=�X
%������6b�g�����TZ�}�A������:*���/�8�����.�b�D�f�T�q�����O�BTrRv$3o
�����G����W�`:���/&����x��~�@w6l����)�du?�-���1����P&��xQ��;&oo��(����%M�������&{]���N��]`�o�T."luZBP�@W|��v�'!�db�
���p���,n	c�
'�?-�u,�Z�
.�(��.D[���O�,�������Q����'�E��B2��Dq(���bP�}�g�]:������v���n�{�ic��c�*T����w+7������=
�	p�%)��n�"Y>��u8
x������g�~ujEs��u.r���m17�����Dn:I\��r��S8�hC*��>����\��LU6$_p`$g�C@���7����#�|����G��E����9��3HeB�.
����,�74�g8�H��FnM��~�:���'$|&�~[�:�""�U��F�T�D�31�b`�9�1���[H����]��R����7�S�D&�Kq�Oa#C���u�Jz ��:�]�u(���|�e��{30=��U�����q+�D�m�Kw
&�S%����#5���ra`���x�oQD/�	�'�ewp�Av<��7.Z��G�AF�����6���d�f���_�(Y��x�����w{
q/W^���s�|�\��&�e���_�hft���"F6lA�Z��8m.���K�(&t>���)DD5i�����V���,�K� ��_|���,_��]~��h����h��N�n���������~�dd����8�wZ@K2G��e>E��HUN��/�n:e����������U���1@`�y/�,_�����|\�8�r���m�����-�g�4m������gGU�����W�m	��N�0���vM�/�7���V�t�9��uh '�dN'�e~�����O@DvT3�Gw�R�&�����,S7E����U7]���u��w���F���wLz0�@�}�>�$�}�'nr���`I��-���Z��00\R�����v��7�|���� �t1:�s��G�9B�nv��g��������jx���	|1iM�1�5�i+ ��d�e��~���]�U%z#}��,������^YM���7�3B4%x���B�W�Fa:Sgy����&1UKY��i4r���VHf	r�2}�z�I�+�8
v��)�/fW���v��U17���+6;���~b��xB�`=W����,���!E������8"�i��WE��*m
$�/����qt�
h�_�������-ao&����J��#�+f$C>x���~A��+�������
�'�A��B!c�o<��>a����V��,d�L{����j����=a�4�{/M;�nb�����;�L��\�v"�Z(��N���I��(����qk��3��%Y����V��I��G��#���.\V��(Y��R� =��#C��c��u���j�{��y]�;��
�OEI�
[�?X�d ���W����7�kfp�Y�J���+�H]���w��3���_��3Q�J�"B����I����>�t��Y��lk)X�:EY�f��Y��b�i}���%qc�B�i�p`����u��R�n�I;���&���d�ID�A��
���`��s6���������g_H�#����~>E6c8`�Y�UGV����R�f
D7:������c�!�(��~pu�_��[p�t����
�w.��:t��w�J�J�W*|W"����������t]�@q��?���_���d���Vje���9k_@g�A��P���w����;�3.���g�U!��tQ��m��~f�;�,��Fw��u���|�8z���������:��O�7����p^��H��p������s��w�9�C�w��v��L���&j��Xf9�)`�<�ra�koc���L��s��I@�cu�Rm��-=�zeL�D����t]^���f9Iw��rZ�a&Q4������T�z�BzXT�A<���y�AWc�}rbc�$^Q=�_����,X��e�Od�/���-'��w.�|d�q<$IE�h�{��n>�+}�H��i�lZ
�
�������p�
��q2���n��fc������|s��������������m���z`��� ��`a �����r�Y�����i���u����`D���S��a#�������lCb ������=�����!���������2n�8���!b����J���Z�������?�X�9���ti%����s���A��-*^X�ltV�
��
v�����E���<hGA}f�NA�I�������IAk>����8T��;m�]��{$<m�G���z�+m�U�����iC�����?|��S�/�����_��������]����g��l�����9�������>�����b�|���a	W=����= 7���F	 ����d_�}smb{3M����=y��	b�y#Y�����;������b��O����,�(� O���wt�
���4���%��?D�&�_(�����x��n3��k����j���\~*A��
���-����d���3'S.n��]Cs��$e8PE[��u����?e���>�t
/�t�#k	z�������"M�z��M
G0We���u������M5%��P�zY�q'K�n�}�TSA	CZ%=�
���8�j�t��4��\h-��<Iw�T$`=����+�[����D��f �d���L���!����Z+}^D��nl�z��
8H��ol����OT��l�H�
�\>E���sf�tza{\��%`�g����0z����C�H������o�M��	�Q�5=:����h�ShM��1v6�	�����Lv��hJ5�9�f�W����L���X��	���0����t&"oW������j6~'����EO�/*X+$D3�X@4��������b��v�"�b����`*�7�����)-Dd
�%���YG���&�[|L5L	���z*�2��+��iEZ����V����u{Z�V�v%���q?/��(_��=������lR��w��"�y9�a-3,�m
�,�m.����:���7�j:m�M�t&�(�d�vg��%@�zl�����%����(�f���d�[
 .k1LiA��^�������|��8MS�����lLB�TwK[aLJ��)��p��Ud[!�����aOg��t�lM��������N����8�5�Q���"�
�
nMJ2�)7�f{Z�U�dO�	{Z����d�zsk:!�}:w���lMj����)����iA��:Y��@sM���3������t"h@��!�5O�� ���^�����<S���d��l�:�Q��y�'C����;�bQ���c��v�"U�lFE^'+�$��QX����exVu���u;�T�d��{�����@@Z I���0���u�i��{�����|N�9�����S�y���Y���|��\����?k>�����}9�MH���{��U���"�7���e��"s?�����y#f�E]����$�{�H_�Gf([0���LD��mX������U�iym�pC�LX����������;n�����@D
�js�w����p�gEZ���r0����8#}[�L�m�R�Hd��{�Y�A�'�'}i�R�$-MO���s���c�����V��_P�����������Y�Hl��vta�G����~&-��C��3�TsDS��Ac��R��y��	)�����fov��������v��c�^�S��8u�����Xr��h������y�Ne���e6���'������exX`���M����6�b[K�0�(������n$�:���.o�?�)	B����f6��|��/K^����7�:c�����z����d��Q����
0l������V=����$����?��oK�7!M�g�$]v�V~[��B�vp��M���4��:�o�|[��(6<��l����H}iN��,Un�inES���%5.H����P���0��(��	 �nq��s�S`�Z���^_���Nw��i�[8!��h
�$[{��CjJ���S�*3�*Zs������x�,��+�^0�P��������SkV
'��p0�B*s$rahra/��������_���Zy��2%N��@B9��	��;����}�~|Yg���V4Y&��%A��-������+���&$�^O��g�."�]��s����>t����fNT\��{�U�G�Z���p�?wz����A�A�~>%XMc�|
����M���;���� ��u9�T}�g�D=	����X�����$`=��� ��Z��t��m���BA�2�B=�����fA��4��Y�n�d]��*y��!�^yHG!��b�lZ�� E4����m������to���M1R}��/��:��G,����&��Y%�6����e[^��R���+���{	���D��O�aL%f���aNTT�^O���v���w{!M�������}�'
���W�A�H=u����,�b,p4~)!��6�[��-�;���dw�	!l����I�c��7�25�qa	 %���Z
2<M�l��h�:�����*Br�5�a���Mz��}u6�P�����Z&'�i���[�p����p1���q6]d�ry�7�����L��-|Yp����Gu���#�;M���W�9�1�h~���MH�{�:�h� ��,��^��o<�3�I@Z/�II
�����f-��Z6�07�m^��0W��@g��v����5l��5{3������]#
Yh��+��u����,'�����}���?�x\��Yn���}-�f+��7p�`�}��P8�m������-�V]��j�����$�G����������E�)dw��2���n��x�3���H�q�'Z=�-�U$�}e�s���M����]�5�t�F^+Q�d#�i!�d�@'����������:%L��	��4��Le��a_I��8����D��+�qZ&J�0Yn�/$��B��o�s$��Z�(d�	�c���e�����4��l&Z����'��N{����:��m;r_f���,�������g:���6�M��R]�\M�=f"��K�H�lr/��L�^Hm����Z�{�	�&�O���
�>M��Mv��)�xn�/��,�u��f���<���_���}��U���4���T��3�":z���v�2�B�[�a*� T����D�PM��2�v&����;�n��M��_m�B��c�c����G��He������K�/�r$��nC�NnM�f�e�����C����Z��i�;[������wAAz���H���x��%�[u�Q��y$n�|#���Kj�X����J�Jw��MM]�EJ��,B����D����C����M[�
�a����v���Z�.�S����O��K?l��
��v>�.������O&��/{������<�j�G���K/vX��J������t�k���,���l:�$�P
�D�HbV���������dx/ny�$�s��3�����Hd�)���2�k�}�d9��T$9�����vq�&D�(_��6�����tN���t)�����1���/��������.q�		��PX�n/
��%@q�Gz������D���,���;"���BD��h��;�f�8J��	��!��_�����'�M�
a�|�k�(^u�O��������%(��`����l�
��l9����h�1����FBg��|��w�����F�<n��Kk�]���MV@;��*�����G�L�r�I/4U�~#A�.g���l.�p����>�x�'�W�m�����s Z��wV���d����b�g_�BF
M9����A[��OH
�uN;��)�-�DN���������M�_���k�]b�y-����u�1+d�'�#j���~��,<{���� ��B�� �]���%���s�:�Q�u��$<�^YAM�mK��4����61��>���5q�W����@_�dS�����h�����-��~-��i���n��h���}i3��x�4��HT~AM��U��Aj��LD��>��-���e$^��{^S�o>1�$3�BA��.�<Y���0�/����"�@<Jp�W���I&"�����2O[��U!z��kHi�����|���a������K/���p�`\��aDs���|]!T0[Iw����W2�2����)3�e��b��Dd����E�_�L��	D_)H���&�ANj���������a^�\��8�/;�	i$��b�^�p4��a�OW=O}��,Z��%o�8�r�����^����\���7:X�+f
�n$&�]�����?t%�������>��g$�D������-��~F�������]��i�R�C/z�3�i��c�sL����]�+UR��q���#30#�91lF��{X������1}ZX���s�/�c�8�����i���������X#y}�[oe����_���O�������'��'�pF4��G�
�,>c\?��|r\�)���e��D3+_l��Z��G�@[R�~hR�N��D�����iM|;/�%Vz�����dr�})N��s���v����������9��K:�b:�a�81����?O9�<�qY������o9�b9����t��l�q�f�����9�K�AL�����||��c>��r�i��V�b>~���|�*�1?K�B���e���{�z�tb:>��SL��������8N1�7�!����+�����������������SL��R���������][B�������������O-�3���y_�_��uj��@��e/�
1��V[w�[�Q�����X�E��uH�W�_N�������W�n�v��}}���j�R>�D���G��B�
����?���
����F������|���b>���1�n`�X����T��
����?��{��������
���|���b>�J�E7P�~���W���������M��k���
����!v�77��������n���
����!v�77�������_�;��b�sC��on��������;��b�sC��on���
���b��������pC�x�������/�����nH��v�!q<[�pC�x-���j��\��w���R&��Z�>��������w��k��\������������s�y����3�/]��������Wd�nd���l�z���Md�m1�O������Z�V�L�
�x
�k*H�n)@6,�N��3�Q��@I�2���mAz!��ZI�;��5�{���99����xI��9���YJ~'�%�Gu�a�l�����S]&�/M�6j�n��	����E%���~��
���73�vB��}MU�@�"��T�:�5/��\�F=}�`}����M}����1y}8�rC�8y3��O|5���TC.	�J4S&�����r�O���-�H��.�7�:!�e���� �]��������� y��������T�/���������$�
��r,2� ������Yg�y��Y�>{���P��JDd��Kc��t/�����`I�/���f"I���3�d�xA0�F��\�`h�4�	�nj����B�J��b�G)�D��2���[�N�F�,VE"�X��44���U$�b������	���hW��w�v~f33�h���Ci�0
���DKy�7�vf��������������qd�]��;kF��d��[��������M0�i�`�a�5wJG�K��L�,��M�n�F�0�x����rX�#�gE��O��*4QAc��	���Y�VeL��l��)�B'v^P�\�{�v�[��m��x���M&����h��A��>|�l������S4�u���-l4�2�)l@��DY�zR���~����"���
���F4K�88M�3?���V�x T������Lt���DV3Q;��"��[uN�������8F����H��&�#P'���(	H��<`�d��v����*)@����z��#Nd�����d�	�����lM�`��mA�
���#�f��lw���-�������)�/��Jo��z�xMTRdM�u�����h��t��z�2����%��{@�$;�g�t^������Y�~T��1@[�t�|����.���.���0���"���#�����B���x�[��lwJ��/&���������N�D��._D[0���������-�{T1x��9����N}3��!m+���9\���#������Q[H�!����kF�#k�~��q��pn����D��O�s�@R�v"�g�����x�	���'��0K���E�wGpbi�������frsa�(���@���[&�D�XUG������9��i�
�����8���\������"���*���n�W��X�����'Y2��$���;�k������<��3��Wh=^����;)3��[�m_�a��R�c���#�>H��f���#
b���K��}f�5������S%��'��6�S
�Q�N@�0l++�W����	K������5eB<c�o ���8���+}����.���F=~A^�t`��"����xM����
���B���A4��������D	!�� N��Di���d{Y'g�$>>���]L	��%���yb�:�y(� E?��[�����������>C�^�W_�,�g�LUi.}�������P�y�dt#������\f���������mzA��2B���>%���g!G8W���Y���yL���������
,Y��6��n��OL(�b4�`�[H�"
!��S��-�xy���"4rM�)����:|V�=����F�=_I����R��04�\��7���)�q�+�e��(5O
��)���^�	����%���j���n�������`sB�?��k&���JS'~k��#���R�2���D{?0;�A?��y)��j'p��Y�
A(��\1>��]>���C[�r�]��u�3	:4:4��������&�s�@���HF��������9���+w��13������
�r�&vv���������nT���z��6��k����C+����b����/�$���f
Bg�������L�y�V��A;��A1a�]��+����\6}~��D��Z����|��vA	>��H�~27��i����V�:�e�� �U�|�W:� ��<������~�(�����D��hd���;����4�6gn����j�R{�%�� �-f	>u�q�J�	��oOq����0�wA���T_S����#����]�z�	a��w�N[�9�^2N�x7���,��t��3����2n�(���������=����|8�:�`�g�����lX�rM��$v~h
�e��{��U4I�A6z�Jf���}w�:����OF�I������l�e�����A:l����q�e}X���' _*`s�9�O"�T��F��E�E?����S���	�Z����3����T�T+�-*���a�`t�>��3�N(V�t���J:|Vt������Q�n��@^�A4���l�m���[������Df�����&�1u%RhL�w|�'�z���h�������X���G�6����D�c"��vD�(E�pS��C���Zg�-�8�$_�pQ��~�m�h�*�V����r��l����l��*����$���up����aJ����<'��	�l��^����������UY���*a�X?���\��/�,�PR�#����,������{���B��WI��^%��{�8������I_P0�`���o3j�c/6�������/H������}Am�f��]�f��LNHe���ioGR��mB�[v���M�E�t����	��HKU�3*��}����x�����LD>�0���4~������j��}h_������/>��{����l�mb=!L�L���n��xT�����|`��$�� ��������f����
��d���fD�kf�>-��4�=�K��/Hj�-���G��Y�����2�>�
/�z����sF�>��eW��B�aq�j����j�F��3*��f}�_����[�v\��1v�O�&$�=)v�%�� 5��k;
-H>��b��3UB4�l���v�f��ea*R�������\�V��$��5X��D�pW4O>;��y��16yz!�2�'o�6���N^f%Ek%�7��!�L���$�y�d����`�n��B��EhvA�h��uu����me|�r��OU�G]��hz�]�znX7t��0\������4�}�����u���	[��'�4>Xe���7~����#��{+�{�{|8����J�pt���\;u�j�7
t��?)(U�L����
1��|�G�	�}�*Ai���S4%�(@���'�;������������b��e��`�|AR����o}��
�F���px��XD[0%=��{6��+h����)`��*&T���r��/��L��.�.��/�}�n�&�t���$m4/OI�(#�pv����zx�m[���y��@3�2u����,|�7`���OLa%b�����}���rts��c�LgB���1�,L~�8j1�V����'^��R���e��G_�ml����eb�:�,����#�	�e�d�8������8���q!F�?�������B:���?���'������K���os���36���H��E�l����[s����@�}����:�C5x��`&m�|�z������`�����D����8�)�{^���eg$�}���a����N�$��#E����|�.��LD�w�G�NQU"���7�R"��f�\�P������8��>^���
8^���+3+@�+q]��H�he���m."2���e�h�"l{a/OG+p�2������q�LD�������?
O8��R./C�����M�c����`�n4|��w�g+#)��4�gEm<HV������7h���'������e���
�90����������j��f��x����*Ry�r*e�L�f�	q��;r��D����gC�<o����E�0v�����"��g�e�����^"F��������@nO�*���"U���4���T���c��+E�f$�u��e��U�eD���������>[o���+��f�-��������ML�sU���f}� ��G���^"�t���:��#s����ho43������A�IaK+����[i����VZ���[i��?n���c�mc`��� 8��m��y�-�� 6=��Yw��D[0%���I�K��X���\��	]u,g"�~����u�-{;#�-!z����3�Q�f�
oA��o��V��&*������Ddi�[��[�b����1��8����������B~���l?����:w�����	x���2�1�-P>���sE���d73��h�c���JDf&@������[L�8	���,�iBh�����9-�j�7eS���)Qyzbxg�"=��1�L�,�p���h8Q������!��*C4|A����������3��I"K���e��-:��<�\q��d���`�Tt��/��S�
,x�oe[�^�,�t�Q�0���h���x��q�/k����{`�Fs���}�7f��V@��V��������O�b�3�3x��7|�q{�q;�2pW�ApC[��n���+�/Hv
�{����U�p�{�{"���^�Q���������X���aa���#���?x�x���jOQp��"�1��h���%�%�M.L%"��(P��G�e�V��Fc��6����F�`EZ8_wt�7��O7xJ:�P��t���D���`4������~sqf
�������n��aM=4���<�w�W7�RR���*�mmrL7�S��S����n$�]����&X�������%�O�i�HJ�0�(���)�o�]�E#�O����~��["�=u�����M����M���M��k7������G�A��*�]H����G�m��xw*��g`��6��QH�-�s�v7�h?4^P�������e����z�����E������T�W�rw���l=��U��\�d6��
��
p��j���g8��0�hS2l��v������v�@���Y ��t�=����CA��L�A[t������x��QDm�DN��k��"��K�2�U���'?Y�-uw�M}�k'?��Ig�;~$��wRx��l
l2������,�M]�C�����QL���O�>�����Hk���!6����E��Z-w!�
.�m�����Vi����7�Rt���iFNw!����R>m��n�D�9�*0�(/K��A���z�/�(���:l5������x��oA����Z)`X��-$Tr�g�}A.���Q���S���M@��o"~"�9{Dd`U�=��
�1:.�:�O�U-�}�!]��c���~���R��������Zk�ZP���!�i�me��6��,�KW1lL%"��8,��I��<�AS^�" ����Tv�)��sY14��q��c�s���@��P�MMeM�����������-�$�y��@^�-�{/�;�Ve�ofY��\�w�iX54�M$D�������+$ ��m�	�u�����>����
cu(��)>C*���VK�(����B�X.���������R���"�p�St
����~� Z2.�����1j&qBZ�
�j�}��-L�1�~�i�� }=6���4�C8��D7���sT-l�m~he
N������)�mICuh�_��I���h�W���[��Qb���W�)H6G������vR/��f$�(.}�v�
���&$�;��'�F>���{H���s�����$��'"2:�Yl�&Z#�<�+�.�M
�����?����Z��oJ-HL�lnn� 5��k� ������~Kg?A��H��>��]�8�a��
�/���T�����G�Z�7d{��)X��Z�}������0�}`j!�k��T��e���maZ:��o,���'�Ydo��K<\�,DT��������gF*7���\��h�D4��X�[�i����3z�mu��&
\�K�S����"m�7/$�i���3��� ��$p�)�g!�ul����C�����������a�R"vT�fC#�������	&�����gE���N�2��pA	<n34��?�`3�����y�d��p�Z�X$dV���r�VP������B;���I���J�z��oF	4��x�e����	���=�c�etc��<`_}u��' �eW�+���G�&���>W�
[\�+c�V"����5�QE����]��
���ga(�}�~�j(�emJ�J�W���OW�J�Y�u3(}}��4����e��g��]5?�/KX����7"��[E?U��y�-�N��>�������A�j�6	~������~�����6%�I������ ��65}�V\��>�r�9�u��>�m��|'d)��
uX�;!�	�����3���j�=t��qq��mF�����/�����qoP#��/3M��YYi�~�x�^�3�P�Ae(��ZPK\&���2���cX�D6�������$�@����
I�{�@"��'`{�mF>���4���XW�	�|B�Np� 5�)�
���;��0�n��8a�E���/�G\��x�����ID�AD�u��w�zD����&4����.X�D<^�S%>����� "���-�a?^�IM��Z4�Q�4��3)2]���l�����B+�LC�����/{���<� �!D�/���\]�N��p!`��2��-e%���������Z�D��"]6����<� ���\-���d���$!B��Ao}���$��o�l��!HB	�w0``[�B��?4GDHQ�7
"|�k?�7���@A>�'������,�C	4���Mp���t@>�P{�a����lA9
#����G$Q����./#"��a����6"
*�������!�]�p�)����>��f��uB�-��r�*cz[X��k���K���l�hZ�^��^F%"�]���x���3#��v���^������:�w��e^�F�0iC��ta��
��0��.�H���6_7�l�2-��7r��LDd����a���I��b�����B��H��y`b?�w�&�6���������6:W��pqA���fTd/��V����A&��� u�[q����u��)�:��
W��LA�c�N�x��wz�J+X4��)rn�5�y��f�0���[��L��MM
E�'�e}j��	��S�~i�e=Gg�=�J�D+��e�o�� 2������__
@�����W:	D��b[B
>��v����t�W@�a����I���.�
0\G+	����EzM��gs�c���6�4&����OH$������(�{��o�:��.]lj^�: y�y��n_+�����t�����p&2Q��}�,��T������Fy��=@�A��[u�q��-0���RU��[�1�V�$_����������Z���`@6*�(���g&��X����Z<���Xi�D�����������6���']>)�n�@�������`��#����P~�'WR=�V�N������6W�f+��LP��4,���%#��������R���u%�%�7S��,������:\W�j�'B������qq�I{���@eB�bc���6\�&�pW�z��I��m����4��xN�A_�l�����:;�=g�r��l4I9y���XrBZ%�����e�N�����K�v���������(�i_�'G�3���	�oH�������"�u/���=����	N[�b����� �5�h@6�<!�0���
�2���)?�=�7��B|�&ee����+�g�c��m�.>�#�X}����fS����������N(�Sf~-�tf�9��[nN'"2'��lK��t�0�!��u��*:S���rD�R����t""����,,�%3J�T��a6%
03-��lbO=��nB4iB";<F����=��L+� ����I/���Fm3
���������H����v��,���N�=�&�\��)��������N��o�+���n�$aIg$y�aI	��}�-i��fI���w��\��-���&�����������0���'��1�S�5��������V"o��������gu>!��'�����e`�dH][ok4Y���.:�FP�@�4��rL}��FP&�J�e3k��*��Ee�>G��!�l�l��4���A[���q�$�iyE��(��O� �H��|%��j%1������(~f�#�$#��XP�$���w�(�@i-�<�2�c���d����8v��Y���4�n��2�
�L#�}\L���N�s�$WR=�V�#(�M���6W�#�$k�'��g!>�p�i%��2��1�V���&)uZT�D�J�(�����1��!���s�aY�D���W��aT�
�&Uqs+�a���-�y��tH�6S�
ps(3�HI	��t�.,�;&c^V���H�(�����i$�O��H�����T�H��T�vRkG��D6�"�������0{��	�#"�u�r�6�l5�_+����8J5��q��AO��Q�+���v����Q.s��~������1������g!6��r�4�����b��J�sO#(�}����S����j���`UP�A���	4���2RQ�O�:3�B������ej������cz�yV���&V���|Q�V������^t[�S��E����I��-��'�u������xFZ.�'=]?L����	x�����"s��0�9Y��M���9of��`_�t&V��fLDzSa�����0�1�O�
�N�
5���W��OF����7�����V��e��� *��5B��p����0mYQ���w�����[%�	��t(:h
uP�I��>�|�)�Y��
W=������!����/��~u!�gFU���a����=�����n5��K3r��W�O��t�6+[f�p�g��X��_���h�s��e��`z�a�'�q������#,��Z�jDg��z���2�Xz��5�=T"�D��)i��/6������f������a�@+p�SL��Z��'���g�Vm�yV��f?��S6_"?8�
]������p���-�p��p�Q8���)�Q�|:h_�e������)�p@���?d[�Fr�J��	lE��d#����*�1�D7�2'Icp�4��n���$��/l�aC��v�� ��!c�}���#�(�
�G1Hcp�����Ib4}]�@�e�$�c�s����"�18�m��:w��J�}�TG��R�9�*�c�UU+Q��z��L~��HSV��e
���$�5����k:��<��|�������EW=���B['��!�����u- F&s_�����,�V�w��Pp0Vu�DGQwV�$��.��RQW;��UW���N:��C�E[��n��>dB�s�|���mF�XR3m>(ty"�!�������O}�HAKsD��a.w �#B���I!)�������>�����f>+J@w`�!y������,�� ��L�nB�%r�]S���n���
�'�����J��6�:�EL	�������*������������&��!��������������^{��
m>?�:�8 �=�A��_;��>���(���l����YM�m���T���p���|rH����!�'��G���tg�<�����������dF69��|��sA��V��CZ���a+|��D67�M���!�h��P�=�����
MO�=uGo���E�0���V������d���K��t\�t|�=[�8�|\v�J�U�d�w����Z-�g��������<���,����������v����s��8��S�g>nbGv\?N��w����&���~)���~M|j�|Gy�Z>?n�S��6�����~����w�������}���O���I��o��sJ���s��~�i��?���������'}�����vDDi����������w��������������Q�����?��|�J��}q��L2B%$V�kE��-��D��g�g"2��`�+v $���wt��t�>]�Al�o�I���AP:�5"����@�?����;[z�=|m�Ii���F���
S��v�>*n� 7�q�p�����Kp��t?}%��t^�Q&"c�g�pI&��w
��w�?�t~��o�DItc�T�A�%C"���
(
�Z�\���3Bn�o�*J�b�I�{��z�<13S�	��n��l�B��ML�n6�zn���D�H�@���r���hV�� ������q��4(y%"�F!B����1e,��9��gT5��G����������,��`Cr�vwNZ����F�P��m'��K��L>���d55y�jJ�����U/�uB�5�O@��mFE�$�rU��qL�=���m�w����'Rd5��s5�	P����RG�'g���>�h$p0ZO�K'a��}^����5K;����j����7�4�����������h�,�k=T��cvi&E�@��N���>	����(E#(EK'���j*�&���/�<*�| [�~����o�yc�u-��'��vA�<����
{jH����2j��E_��7�O4��me
�I>G���V]l��V1�P�S�������%�d�=�rK6=���t[(��/K���y�f�l�|��6�%Fr�a����Z�{�x��e���M��G��'=���N~C�_���3��&��y�BM]��MF�D~�����(�o�����g\V,�+���!���!�e^��P������tYV�53����X���|�����7@���,���7�S�D�8��m�O{���me	�����W30��]w�d�-�:��~q�#7,*�m�����pG��"3��q�_���Y�-�K)���w	�O��	����^Z8�56-���Xg�5�v�z���$����
3�~�"$eE����U�O���T�������O�`�qb���/�&�D,&�K^����uf�"��z��jno� ^�VN���6(���Hcvt~7j��s���3Io�:�����"4��=�#���\3��1�����#�	8���es)����>���,���mw���2~���� �<��x[���s�����g�$9����JID��pwb���x��)��&�t�z!�`{��y��4��J��c@m,�����`��
�b`6#�����tP�EE=G�����v&�P�uooA��:��U���4{��Lha���[��{g${�
$[�Z�`�P���]Q������;1�M��K��`*��	h����}p|����S<�7�-��-��������\�{��1'{"���!���};�W�I�����Q���Y�	p]���^4���b����/dK�$��2��/�..�D��������B�m��rt��>��e"2�pa�!��m���~B�Kb0{u���0��>*�����}��f�e�&=��j���n�^Q����4�V��2=W���qf��sF���J�q>��r�3p����Jv�[B�F'�[����a�maZ�#?*Zi"4��?�X���6�������|�����Gp��HA���aD�*��&C��H}����z�H����r�4w�X0&��<I��)f���>;�5L(�,8s�7	��G(	� >y��&�����m�;��?�7�H@/�O#�Hh-��A�����;����0�h1t1��G�:J`��Es��5�B6��m��5�z��JD��F�T^�'��S	3*@�������������h25�X���&�����v*
�wQ����z-8��efN�D�lU��S��y�\�7��7���r���T	�v�)�����4��M��]{R�����.MH@L�w8��{�2�a��RU&�.����kFEVM��pyVjF:v�6���QP�*;����xY��j�d1�G�"9�Y�@�G����H�47�4����		8�5�d�Mo�S������nv��0m���v�4�
���g���GD}�adD��Qw�.O�M���&"�U�XS����������:�_����j~�n�����,u�/����������S`r�Y�5)H���v�@[>���dw3���P���i��1�N����=v�������6���E;���")�%iu��3������"<a���@�u�j�<��I&+;n���W"r�q����o�x�7���V��JpUw��z[Ybf�>w��?+�����6��fv"���9�l!s]��e����
�v6��Y�dg���+l�nW9J�^���I�XAL�*i�'�8}��5���,;����j�n5�b_S��i���t����YC������O��y����>���L\7�M�ak2t~Q�M�qrFm<�pc[n�cGA����]VL�V�����+k���$�[��1j<k�9��F���Io�U""�J�	(����3,��|��� ������?4�0&|rH�H@�����l�e�3��F�&.�UE��jU����'8��������N��[���H��f��,c� ,MY%mXT��S������' ��n;�'V�	5f&�e{�'7���wT�i-�-:��t���	H����Q�E��
3�t���\��DT��4< Cn;�MDu�BA&��Tr�\(4E}[U�I�h���na�����a3i�K��� [�|���*[��ZQ�����T,�	�I&"{PJ��>On����H�����l�"������h�7p��c[L�D�s��a�C9��k�n���xs��_P,(��
f���gAj�-c&��S�l+����m�7�JT�l$�>�;|�� �ifc^z�������`d<a������/5�3����HsV>����3��f`�D�QI�U4����YZ��og��m�!�G�+M$����f����H6G��=�U������*����7[����������[\b�m����tg��b��l$���_Vble7����"V�d���*�NUm��Z��������T.
J����V"�'gT�:�^I�=Nb��8��U�LDf�A�q}��3S}�Dug�d~�m�Vo���3���'"��
��/�.�?,~�� �~G?�^P{_����nF�y��cA|m���~�Zo3R�n��E�����D[�t��	�	ML�.H�c����G� `�'��%%�`48�M����(�����.H^�(��w����w��+�a���H�f,�0�g�?����&0�iI��=�!��BD>�P�E�U�������:<c~���A:��[��Kc?���3q=�}���v%}o����'��]�����=���
�����	����3��y��=n��_P��8�����h	�����)U�_�`���X;
�{���G����y�[��c|*���f���IS������M$�����zpPg"���D$�!��r`M����d�6� 63U��j��G���f�)����\�/�<�	8l�l�&o^S�|
��dQB(2<��RL����3�fck@8U4��z0s����$�^:	������n����`��xJ�o�������TV
;`z^��^���T��#�I�Z�'D�.���\Y�fL�,����bR}
V�|���3��<������I�x'���G�s�p�4�����}�����fA�cg$ /���NnVOY�}�B"����m��X�Y,��c��xA
l�R&�dG����T�����A\��	i���o_@��Y�ma\W�s:�����^��46��*��t����X����	`kk�"[,���x��8u����3��be<|]����!�c���H�G�x���E���K�������G�R��z���b��O6����������
I��mA���oE=�xc�"�+��\���
�?9i)w5���������=�k!����o�2�0�c�G,H����
��I'
,k�ZQ����m�:!�-��^���/H�c^��(���d��/�F�!����m*)�����d����l��
����f)[,w:��c��0��f�lr��Q��J����MI^a�)�C��Hi}Y�=�ON���K����,_����w'w�dD4����H��i��y��4RD[�~���1��0�LB~�3��ZHI�����M�PE���d�O����5,H�"���2�EO���>#�T�%y:LeI/�"�03������/$,Y���y�EM��e+��+I2��y�H��}0g��=�e�C��Z���i&���Z�]��Ly^{��huc@��V������h�,#������v�3��W��� d�"�ZQ�-x�'s�v,HR�u�`��.~�\�kiV;339��B��/����D6��B�*���`LE�N��#�t1]�R;��3r���.7�B�����k^~*/2v�Z��
{k�����
��*@�O)(r�t����Sx[�	d��+/��_}�R��\>t�'\��t���-$5������;o/�����Pb�x�
/A{�T %_)������?3��~��M�o~a(���������<��,5r�n:R���<>��i�-y��~�I�2��uSf����k����;U�P��}c<4����TQX��L3��`c�AVzC��H��B�n<���-i&E���b@���`U��6��jj'TT�!c ���mF"#3�O`�������Y�z�r�}��!~feUy�����������g�t@���hN�,��v�������+e�t$� Y�u���I@{��DR����BnX���=�w�bbZmcx���h��J=��e6�f�C��|+
���$U�"�(^��q ��g!��(kD1j���#��IH����vF��It���'^�u
*��g����
tp��`����b���T-\�V����&�6�x�+��N�C������f�Y�����{�$���'"
��m"c�d����������0��C"_3Ao1L�q�B��������h��hW�v�sz�r��+b�+]-w#�����
���A���3�@�(
���)Hro����fc[;(3�b�O��mp��� p$e����j��V.
�6���A�]��t��&�)Ko[b��8Qi����
w>K�z?�2{��F�3�bj�g�G�v�������G�^�=�9.<�u��n��]��wt��;s9��� Gi���iF��h���K���%�A�oy����\JU�T�����*B��t�#��Q<�3	�
��J�m�v[�va��c����L �j7�b{"�_��	x��o/���1&�,�9b���w�F]�4j�9n��8������
��S�:�[���g�A�!0/���"�|m�r����#�gE��hv�0��]��8�2���F ;����`�B��������w�$������`�+��R}����D.&zZP�^�{b�.��9�JT":���+��D��O�r���VE���}r����4����9�-,���iW<�q-H����c�#�K��3��F�|X^�b}�(U��~S�9\�	��5��U���l����a�`���������yg�iCU��2�^��z&E�6v�� �.eq�|lL�N��W�3� �Y�5��)T�J��l�Vo�D��F;+x/^��'i+4�������.��!���wO��D6l^�U�t��5@�w$�N��GTC�!6�����?��G����&������<K>�2�S�?�|���"2��~#P��WA�~'�N7���B\(���<K�r�b"O����EyXM��+��\C*�����n�9�� t�����N}"(����!���?��P�2�5�)Y :����<3�vm����^�#|�\�� L��4X���n�D�#��t�^D[�\�'4�9�J����
����M L��Xh���+m��myu�i�TU����iLU�5��O{����w0}-D���Vp��*$�tJ������G&��x[�u/����`+��J^�W�s]�I%&T��j�cK�!�^ j�����aV�r�$�-���
��0��b{�4/;w�Nfk�T��������>��Lk�	�����5��rA��F�w�H��������	g��ja�u�;S�-��fz�9G�6���/H���2|V?WA�$��K�%9[�dk��$�����>����n5���i���g)0#���_�yP�kz{_������ifW����S�iF��T	:�TdLl�`��Y���Y|���,N���&OI���Z�.S���L"�j�C_�����/V1�����@&k��X����g"���D�dv�w��f"24��g��'�j��I�l�e�Q&*wY���dG\�T���|M��!��H^����h��x����6M�s��������h�j��a����j���Kg"2����TK�6�R���x��>���� [ �_W�Ym���rK��A(�855�F�����%���
�V����P���Q`J=��]��MD�1l8c�������xR������b��g�N8�w{~�n���~#6-�)@�����c"f&I���	�V����
��(~��j�����T����FPC
$�� )�C��4��E=a��g�7W4-He�D�prr��meIC/�_t1!�
DG�o���i
vA���:�0v8�]�e�Lm��nRx5������Z��p��Z�� ����������JT��8w�}	��D�Uv�9r>�<S�&��5Zx����u����>��B	5��0qh�|�Q������lGA:d�O�A������F}�daR5�,��W��Ybe���LM���>��.�;�J4X`���*I76�JUb�����pG��n���J���v�P���noB�+4�~N�57���c�r��U���fR_Q{S=}]I%Z�2��{j�/YB�_:�!��������]�Yi�����Tm�[�����o|t~
���U�������`�/�]������������	�k!I>_8m���vv2hr��q���7V���9N����"
�i� l�qZ3�D
�m2n�����������XE���j�aE���h�=N�Lh���05M �z��J��M����r��g`�a�/N�v��)�Jly�v�aa�B��m�mZW�,��������l��5�
����l14�oc���,����
3���#������A��h6H��W�r�������m��I�e��v��M�XI;���7k��0��TY�jT'gQ�T�7G��^��-��0��6�L�n�
�Q��?!(3}��yp$�#U�gEa���.�����*�1=~^�q�(�@��Z�V�5��Q�>�a.�F�������@�xpa[X���{#4��#3��yxZ6�:/(uH����L�������(FbR��8��X{[P����`9��,���zmM�$���L�x��y�=�C4~DkL����G�G��+	�6���fD�L���P�#A����O�����r3��I�-��'?���H��c��q�i��v���me�t�X���ag�nV
�UB;�Y,�z��\�7������j��u3C��b�v���m~P%����7^���iU��L<���]E6�L�h�������[S?�Y��
�9���?��S"K�YO�3"?����,#����������e�_��?�����o��������f���
Q�I��!{��q����������|U�!���Q�_�N�s;k
���?�
���������o�(o3�������bF��gE4���:������nB��*���9�e��SE��.3VQ�����*�
�	P�I�A���z��(,� �7xt��gF(,�<�$k�|V������J��*��b"���.�����{iQ\_��o���l��)����?��Kf"��=Z�w�H���i:g$��]�xVS?�/L�o���"�j����	�T�
��uW]A�o�QA�rQ'~4P�����������D�����F�#l���09���J�B[z�\o��������4*�����������3?I����A��^��\
��#�2���ZM����-+)2�Mz�����K�b���tF	��6,n[�����,��E��&��
4�r+�k��!��3��^t��T~�7[R���!�Dd]Ev��bG'�������bGBY{2����d6�3��pF.�?fG'"2�v�!�Tl���"��������Q����Hc��M�5���$6s�����tFR+�Z�qL�v`���)�3h����V�)�!X����:!����6�����sX{.��6]�R�jE,�qf����
�:!��3HT��T_��W@���Y����9���
���U��:���]�����H��.���]�7^��gf��0�U���w�y1���X�JB6��;��I%��Ef+�@��bS'������<�2fV'$��ahU%��(od�W�wSZ�~h�+��	��}��*d7(	�6U.�������]���<���Q�����\F~��,Lj"����>�Dyz��m%�I55�E�Z������Z����T��(&�K��,�0e�:��fP_�{�4�:;�����I������A��*W�S���	s{:#����-����{�w�^����u#���C�lMg��`�#���]��Sp^��c�N����N�t��vkZ���fL���Vm������4�<�#�RG[2�����U�aLg}�T�'��a]�B�^��2M=m�h�-�&��R�^%�Z�i���X���':<���,���[vS�2�%���j��F_�v�LD6��r!6��LD6g����d���T�B�v(3�
�D�>��D�i�NSn�#���%��<���(�z��S��=�����wu�!��4k�LB��\�;uf
����.k��gXO@D�6Q�����l��Z�|�� -��x����i�D��G4[���L�����u�3�D��p���S�d����9v���)]x�������G���=�'����,�G1-^
d���&��X���� �SG���
���o������R���e��FwL��$v��X8H-y��?��C�@�N�����D�T2��t�=�7�/� 
�Z'$o��&��)��	��{�SE3�X���]�0;{&����Q�~@��Q�m;X�T��u[L�6,d�����+<��f;!}_7M�xiL6�9��)�$���r������o��cB��S'-vy���?�	�&R_��\�Z�\��U���N����'H�D�:>�	3� ��Z�mM���'�s(���O5����c��-2��
B<-Y��t0^$�y�G7��������#�|to	�'�a�Kf����qP���b�L����gzos�T��Kh�[i�&;���lzF�=���i�i�7�e��������5��T��-�u�d+H��YI��x�\�(�������U�\>m��m��,H.�Xg����	�����0M8���� 3�w%�6!.���
�'�yv��Fa{GZ6saO&\�f%�55�<,K��A<$��e�x&��g5{�[�OZm��(��4��ef:r��g���z�9��%=������s��7�����p{���P�c������&�7�qX��lgK�����4����O�tu������`B�����6\L�u�z#FV~"y&�����8m^�f��t ����������)����#j�d���-�2#�0l:k���~0SR���9'��.��,lB,��W���R��$�����79;�y���+1<��v����.�+lB�����T��O��������0h�c~�}T�
����@�������nL)&�e�-�	;rPo���_{5>N�����g�'��/�����8�Q(J�B��1 ��I"����M6W��K[�!�N��vB�$�/iA/��7=��)�8��!��D��JD�Y�����M��I'��u�����4A��fu�4!�����,e`&(�����w����t3,ry�9:���K{��A&����|@<#�4m�GL�EE�HuF�{M������D��-j�1���CO��f�Z�������~����$����������_�m�3+���nK!{t��,�x:��8�N���(r�g������m#�by����=vkL�������yn}���	1q�V����=��`����kX����cVE��i�8X�8�`	���5��@���O�G��K�GM��G�Ar�	I�����~u�o�������J(��\5��G���7�8G�+d�<��z�7���-Q������DZ�� ���X����tQ@&�����kF�������$@g�B�W����'"W���F��(;���<Z�����O*IE�J'YaoF�B�`��OE(���j[L2����|P3�l�������{�LD�H�x��)��=o �l�����4���|��f>cYc���i�Rd�j��(�:!t��U\��>:��*M��g��MR���5N�&p���'#���2��F����4
���:b�U�I���l�U�YB�&�4.�t��*H
u���:y�U�q��Z��(���
����2w�I1�����e�����>U�	��2�x�J!(��m��;[��O�7�8������St[�zN���,H�Ox�cT��Rl+Ks���u��r%���O�A����N	�f$�#��
g}'�������M@=��P�<�����5���
�!����aw���T>'����$>���T�m���$���������@�<6p��h1�� }�n�5�@�6[}{F�	�	-�!��$��`�epT��JlD��M��-?z8���T��6������\�����p�zA._��j{lQ�C� #���i�m�>�R�v���v�d��n3����A&����&���
�O�;��S�������6��_��o@��l��9��z��!1�
;��D�������P28�Qi��^��� ����Rl����1Y>��{�,:�.��oME�}�)M�:�$�I���M�-���.���|��p����hs�����c7��[����`S���UA
�R:WN�y����(�%=����g"��tz�gZ�U�Q�G�	\il�_��Hd��>N�L�=��z���
P�f$��u/yt��v2���2S��#�C�21>�I�-��)+V�zV4�v]����}��o�N�S�f'dFt��D.~����D<,�!N���L������V�����f��U�)�A�_�����_�B�a �����t����"�X@�����xY�N�+��~E�����
 �p}f����"G����@�VFR�1��>c+�&l��0w�����-e�}{fV2�6�l��mr���q�(�q��h��gz��V�\������Kbsn����IM��7��cO�~>#m\Wx�����#���m��A��NK���`�$����_�,�xw<�0�Q}*8l���me��Rb7�+��O�f!�t�L��p�*�&Tp[/�P��QRw�Vg�v[�7��G$���
��=�;U���cTc�~���F"p[?��$����45�������[$�������2����s�\���R"WI�:��,�p���
Y��O��vWw$o<���^��X��v��L�]yB�X����MND��#h�c�����)�xc�;��]w�
~$ry�����o�u����� Y��a��e��W���]l���BLG-7���1"��o#-
�!����}���LT�����H����=�I��+[qu^�?�De��=��O�s���Z�i��aU�f9<�~���#~�z����j`*f��w�\aS4��D��1���.�a��=��X����8����v�u��k:��N8�����r:���Q:r>aL'�����'<�tB���	��F:A�r�>��O'p�?�w�����s>a�5	9����&!��t��OxZ=�i�	��$�|�=�p�'\��!��Z������M14z�����?�EPL��[�C���1�q���u���qdo����Z�w.�[����;���'���8�z���g��09���z�|�s�3 �3�����8�g9�g�v��W����d�ZmT������C���M-��-��&rV�^�����v$��OQ�W��KESL������{UI��{�4f)�w8���S�%q���Hgx�Q{�t�������n��qF���Hg���9x����Hgx�Q��t�����g�������v��s9c�u�G�0���@j��������Bj���hs�F'�3�����z�"��Hg�S�55����gc�sl��o~������_�;��Sc��i��o.�������84v�7����������������2v�7W��������;��c�g7�����_?������l������/
7���%��8�{�pc�x�#�������\������W�����3���q<��!\Ngd�%�1����$7&�Q��8���������'�A>e��C&�
���L��|�.^����m�;Y �e�e������D6�3�	X�.P�4����Jd�@��'���$@w��=�'7�1�Q���I�2��yqAz!��WI�;��5������wQ�Y��������@��_��G��D$����,W���z�.�,%�F
��k�4�q���E%���~��
w�
|��u]PP8$�-Ff4l�������������t��o��1y}8�oB����LB�LT@��P
�D�\�R�����VN9F�h��D�U���	Bt��8���l� �]��������� �������T�/���������$�
���,2��m�T�^����<]�,D�=~�
{(G}%"2����7U������-X�n���
SI��n5�����dP����_!k3�HtS3_��\�f��0�����I4�	�o�v
�Ik�*���5�+��y���dA.6�[-��y]md%��@��Ft��L�>3�h��!V���-a�� 5����L�yV���TYw"�n���.���%����Xk^������M�����'[
��p:v<���$���T������Rg�N^�a���i?]F�����[�Z��%kUF�#�-P>*t ������;��CMQ [�=���P�3Q�L�7��v?��-E?����H�`���v���Y���B.���>���������mv�����_�-���hD������;���i|����J#�Z�����������D�d����l :�*70d���Z��������Qt%����������M{��T���)��	�_�+�2h�?#�w���(��t�����*�NBKS�4[BA����W��qx�+�J/(����%�5QI�����V��\�R�C���
Y�k��I�c"�>t^������Y�pG��{H�@�Njj�SIrmT�M�P��0���"#5�����������5��)w�C\P��D@=\+9���N��m�i������0 ����"�y�*��q�';��}��x[��l+����l����L�E�Y�6�c�YB����[�uM&���P��7�X\"������ )0��N�=�_�<���~����e8��"��#����qA��_�g3��#[�|
+y3n�8ubU|0��uOh\���P��;���(|V���Yet�z����Q����Bt�>��i5�&���@�A7mh���N����?��~���5��q��2��[��+7�]�}�]��J��"��b
�����1�����D��y�em��"�T	����������C����?��
�U���Dg���!������
K�X����4W.3\F�v��}~f������z�����8��gE�E�o��ps7j�H����;��F[���C��B���8h+�ejK�<N>��I||��L�����ap���<������<�E��J�-���A}��V��P��u��t���\��4�>U�r��t
[���N2�	*��i;6�Y�G:��*�|#q�^�����!h�O�A�~��Y����h�,�I�<&��X�B���x�����Q�����-��B�/F�h��D+��!9E��������*B#���n��u���{��7r�CKm�<�_�*��)����y��O�D��^�-�FF����xR��Kq]
�2N(�����(Y&�~T��N3��&��C���|d3I}(�*�:��[k_���@�m	Y�������A��P�3Dj��HB����g!6��Vr��(w�<��"x�Z�hVN���|���c&�@��F���:�����$C�����V�"Z���;� 9r�b%����"ff�8A����r��u��!�������nT���z��6��k����C+����b���V_�$Q]�����>�@��|f"�<_+����{'�-6�x�S8rs����G�ICj!:ac��so�%p�d"�;�qiN���@�����),�����K���������o�A�_,
%�,x$�a#:�@��8���_{Xt��0�1�[���J2�Z�b��;�-�[V�;�(V�L�&x{�C��
��� ��A>�����5����g�����M����u��x� �K�I�f�u�E2�n�yf�s��K�8^����KA�@���h8��QFC[�]�L��z����
�\�	����t�����sw��Ir
��cV2[%P��#[r�V��5S)p.��9�n�
�hS�� �Yo��KA� �	O@3P`s�8�O"�T��F�0Y�E�Om'�)�TbG�C��t�����zW��V�[T�'�c�������J���>�lX����?*��Y������tU�n.	�@^O����������w��fZ���G}r[
���d&I�
�jSOD
����T>�g�u%�Lk�=����beT"2;o
x^a���{�Y����!/��@�L�NBh�Y�(�D�����R
��oDK�P��:.�6���d���ecU���� �f�,�/%D��B����<
:��fx����Hd��w�N�i����,HU	��:����/����%%U�vRb�b]O�s�����|���_���?~������K�����w�&}F	������7���x_{����s���	�`<����/�����i�Y/���&�2VO���{R��mB�[v���M�E�t����	��HKU�3*��}�jO�{w%#6��=��w ~������0����>�/P�mAI�������OD����w��d��3�z�z�	��
4`��I=0��������A������&������PPI���2�>���4��U�yCx�Te��aA"��)c��`�74A��vQ2����
�'n����cAQ�F�-��Qu,M�����oh��Y�7���gc�S@'Jm��
>P���A�L}�����}��w���S�>'��U8�"Z�%}�Y_�W�����V}�spo��s���&0Oj�]	��Ufc	t�L���g�lh.�d��#U�H�Y�gG�;���������;���PI-�k+yU�3����<���q
�c�`�������7����Cl����$yZ�	���6$*�&i�b/n��t��
M��77C���_�f74�G�0�s��v��%�\����UB,um��tTtC�ss����l���1�w��Cit}����M;�z�.�����C6M��@�6nz1��h�g=�nkv�����lx0(=����7��.`�2W���	d���$*A&/��7baA��I���gG���JP��w�(�M	3�����L�Q_I��fs��}K���6�n�SY�������xQ�������Y}�'��z^Qq&�N>1{6����/X��Z����<0��������
7�%7����4�����'�%I��$���D����l|�����1�{������	>;B�����ig�>1���
��<gT�H:��W�+n����d�����1��b����d_	duN|��~������_�m�NE�e`�:�(���q����\3N\�Xt�kO"���o��������!����~���=\�f����t��v4��5M����Ml�+���"�h������f��tGP�/E�Y���s�f�d<�������R��-O'B����'��m`���ac���M�����feWs&��t��X��h�{���C�I2���G<��*�q�����L���<w=�&�+����t-��++��i�+h���$^��Z���	�+�+�Esb��B����Ao�PD+a��x�D�heE%�V�K�q�V"�3�b�S�bo���S��c���?�����5{�������q��[���de�<L�����+��db�b&�V4�4�D��j��]F��<$+��L���%�V4��������T=��������I��D>Z�@���L&�VT&1�];r���h�������l��`�oZ���)��V/e����(���&��sx��7�y��9��sx��
o*��:#Q��Jbj���^��������RW�Hh��e��eed�����[�,�>ko��]P����Xn��8�#��-L���l��z��j^b�yl�cM���)�pS�R`����E�=3X����x+*Q?%���/lif���qc.w��ic�x��s�+~��������]xfp0w�MN�s�0�������+w��^|��I�q���v��[��|�W����3�����f�5p�"���f^cg!/5�h��R�Z~���h�#
���v�.w`�(�S� uB7Fm0�{k�A/=��
o%SIw��
�'e�k�K�@}��	y,VX����XUyu�%�X��iV_�f�����3���c��Q�����	��v:����e����������b�_u����g#�F\�uG���)��r��7��L��02��~v��Q��yCr}c�|"�q�{Az}C�`��"�^�b�
%�\�����W|c��H������P#wL��J��Pv�G�M�]|,T�&������k1�.���ch��/��]�9z*��G�pg����o�lWD�`�\Y$�n�gc��e��p3Y���
,�������V������L�zH������w&�%�R]z�*��C���`�Pd�#����lJ����5����C���Tu��	H��������72^�!%���h6���BB(���\�� ���������e�,�����?���6��6:��WV��h��R�B���[n������>���L�,��53�s��"��	^��s��%�uk�>^��<<�$����/bh����'�����jhD�/��xC�UB�^fS�K��S������O�0�3tDCb/#�
���1�f$����h��v�!�����c`��n����wW��n�?W�V��">��E���It�I� ����#����U�3�T9��k��t}<59��U�+	�bE6��{��������o��9��	���$6�VVS�����������|j/�"K���Z��<$pv&���Fd�T���
�3!�N��F�H���U���sr�I������'{	���I��V�7nY��k����!���X-6���.,�����O@�jm(Y��/����2���X�ax\���c���z5��[�u���	����E\F	�^�����eg����4b~^���� ���+6X�{���;b^��;�lF���}�$��K��,nl�Ub���.r����g$/b�+��(��N}���6�Qk��3���+|�/���sS�����u��@LMll��+JS�rq���}��������i��/��6�A�xF�8�OH�t�-�p�����H�^,�� IG�������s�r�r���/�U4��X%�g���nP>�MO����E##�Vo��F;�6�l)jod�l�2* �h���L,�6�
N���nA>Y��m	0�N>H]jE+;�M'��0Z:����Z��yp���Pj~;'C��9�Z��I�g�w�0�T����3�|���Yu�����%UBk�#��AC-+���O�D:w���"�Y�[,�\�hS,�/[!����T�loQ=mw���~`B,���
�]oj��i+��K;)[�����"����%��YZL�����>���ue���Mo�O]�3!�]���8�s��na�M��?���P���U�F'��n
�����6��������f�����fe���AL������d��4��e"6���0
���,i_�w�i��sa3ZR���b�#�����O)@��<Mo�[�9��n�Oh<��lLz�&��sy��J��������`�f8������ t\!�RF��I�w&eH>;c�K���IG�On$�!|xy��h�DT�z|g���v��&��W�`#�^�t.�������nX1oC���7$��^1o8��+%�L��������������n�r������r�������(J���MM��~�`�#��:�S87���3�S��7-Y�;�LS�������m�HNb���ce0]��{q��e����r������%�)�`�`Z�Md�O�(0��E0t�C3�Z�DD����2#����|~`�nW�.n����
���U���u�;T*+�e��`$J���r�0"�D��n���J�0���F���<y��`j����,�]�C��
�L��H^6��������+C�^�
��Cg�Y�����a�	��f"r����]�����t&dh?+�����1�	*��H���
a��kA�a��=�6�������O�L{��A�~�p�����{E�]�	���l�^�������<iQ%����}�p��<�I��%��:�h}��$�E�����S����j��*�1�Y�����?{����+��X�L]���rf���3!��C���W��X������������;�=��g����4�2�1������kq�6{�^I$�x��	g�b��|`V~h�+��c|�a�� q���=3c�x�w`YPq�������=I�i���c�yD\�s�,H���e��l�j4e�D$����r���@��v8��)����@$!�����GT-��yc$e��V-���
O�c�
c�3+�z<�n�}t�"� �����w�1v��|�:��4�Q��Y~�}���8���Z3~������e�X\��E���2lv����(�l(?�6��0mdD�b)��'tYPQ�,5}W�0�a�F��������b�#�����>;��D ����!�QT-���hQ���cv���2w���g�3	��m�z�3*��J�~%��L�Q��g>���Q����j�@�G)����GQ4��/�-��>E�����
+�Lp{If�(��~P�:b�������J"����$V-���m���;c��,���o�$=��ua�N����[w���u��c�O"]�|R�C>����7*9��������}F?�ebq�4����Z���p�
�a`�p���P�z���|�F}�_��M���dd`���;{*+�����b�G�H[�%V����]�^���P���������� -n"'�X%88d��c�nb���(���oh.�EW��Q���)���!��
�Cyo�b�j�|~`�.@X�8r�}l����+?���<o
F[�>2|�k������Z�h��@rq ����D���k�_b%����%�<}�L*gy�o:d�G�~����f������h<����@p0�����z����$	�?D����n)h3]���,��y�9��[Yh��95���W��=��OM��A�/s>lJ�sZ�8�C:5�t�9dZ"�g#l6|����Oh�Q]������#�����P��vaa��y��u�_�|Bk^�7��.gT"�NY�b4l�42�CL27��Wfm�_�����hdQ���4��S�����F�&.P
������2q�0l�a��<l����9x"wNDZ�E�f9�@8c��(I��wN����z$��=��4n@����}E�tG�,I#4$
�V��|vT^�F
�e�Vh,�JO��g�A���
"�D{�o������Ger�M$����"��$�k�U�����+�"����"�����F�����gHo/�*<����'T�_n�*����Hv�����xi��G�(3��C���K<57�u* Z8*�N�t�}��"��Q�3�0O��'~k�9G}�;��9D���J�j��G'���dG1���D��\+]�T:}�i����"�5���/�W��D��t�a6�:����r�/�	D=�
A�G3
���"��y��fE���
��~���eB��g>*5k�sH.��Vb��e8P'>��H����|�I��l�!NH5���pe-�r�����MD=��k��VY!�`'x4�|���d1I;q�g�7���_�t����^M�3U2Lz�9�fQ}��/�d����Ep���H�<_��<���$�|5���:gT@`���Ls�����2"���r��W�r��#
��Y
�9��f��H����,���,��P�'��+�f����	O�
s"�}�������@�N�m�t��T!'�Z7�
@
�����a�Nw�L	o3x�O����0�%�|5���^?�l+���1��=�a^��~k�������Vn�;Ow��E�0wm�F�23�z�g4�CI{6�Wg25���f�P���e�
�a�)�v,�,Y�{f�e�8
;6��Dfq�g��Xl���{O���I��-sBQ�i���U��G���w�8�x�����@����#�#���^dc��b86>@`i`E��%�],��I�+��D
�W�J�`S�
*�����a�8�Pp���{9m�g#�0P�I,�HO.�g�������R�*�p���z���~�Dfq �2����9t��q��6����HN����o>�'�e���@Wa}Q�
q`�I|�Jv���$]�f�	����5�[���M�����TG1��h5���I�}�����W������u��H�e�����u�A�g���d�L$�G�HL��X#��N6#�??�Hz�abqv	�AeJ�R���w��xP�������4��&DssY�,#�'��5����a���Y/��������oYo^�����5$�Ai����;,��2���	�Y�����pb�F����HP�E��{�������M��|y�i���b�N2�4�J0�����
��-���8�GhY���o�D�dM�.�I���'K�.�Q��:F%���Q��iap�m�.��c1�]D�1���d:�������!}������r��Pb�\����p��N[����,����ujou�zM_�N>;c>�^k��#�g^CL�������F\����:���*����c��j�k�����(����.��u��K������>�u�pDm8Y��� �'�h7��L����gG�%@�tE� 1�/�*ie���V�tQ�� ���G���#�V������������2M�%+�&o������M��\V��{i���*�In+CS���?�.������1��}��h��i�PU�����������_��T�E��2��7��1C0>_��1h�Mo�u����|~`��eA���#���:l���)�Wd�����k�q������Um''�7u\oo�C/���6��>�Q�G	,v��/��]��/�{��n81U$�N����t@J7��Mb�(��>�|15�����.e	��B59�<;�K��if�5]���j����-��qg��l ����}|5�8�<o����4�,'��l�����R�!�H�������_���l 
9��l��E?@J6���;����*_q�$Lwu���j�������������0//"D"m,�R�0���HJ����H���(��N��%8Q�3B4�����x�N���sfuq�Z
��{�Z��������a~4>��XP�����/������Zg�h��Z�L|�PT��Y@��������M�u���Z����rn���r��O���>�*���_P�:R�7u���"W��n����vo
V��Xj��8���AP1Vm�M����:���L�h26u�����mdhaUG�X\u�����2�-�`l���Q.�q�����9,TqAQIN,q��&�M4�Fv��{p����|���U��6D����������v��u�j���e���6���m�������M��W��K��������M`c�p�w���0�SW����$:�ya,U7���Q�I,�]����;1X���$�6J�r���,����������b�O�*e-�vuDn�U���]im-��HP�cW�4@��"n
Z�3�^P&c[O^q\�
����
����K]�B�x�17s
W@NW�]u�"���-�?��O~�;_D�n����k����w�������W���
��|��Z~�;�jG�=�]E�;N#��S���N��U�+�:�lW�u����h�x���2��U|�2�6�*?K]cU��]����~������������b�M�����J�y�yp�����������W�B���������e��������s��������������6�����/?g����e��>�7p�����_;������`���d����9�����e�/Y��U���g����y0��~��B��$�/���4����h���|��^,	����K�O�m��>"��G�e`p��gpy��&8�&�������"M�����y��Mi|������������m
;<��d(S������Id���F�C*v����������S��k��V|�<�62U��u}��K�a���&���L�U65W���Iq/�'f5�w�F��h�(giyk(�<�)�&(.B���W��Q�[`0k�:��~��D�������!�I��t<<hQ��yP��9����.�VP�"�v�����vS�WsG� ��<�tA`k���8�eEI��eg���#������x�}�N�]H��\;��o �������:��+�:uj�t��� *��E�9��l�dt=���v7.�]0�Y����Q<����8������2:o�$����$7������zS�R��E��2���?�W��L0���������[������?<u]J���oH�G��QQm����fCC'�<�O>���&37&�/����v40y�d��b�R+���<�y��gEAF�d���������	�I���v���������� w���2�lW�"�zR��vE��=�����;�H�lD��$�)?��]��`�K����?QY������{z;�D�Q[�Zy����PwH�n��q��^��P&�>T2�S�uW44�=���,��jq�Q.�� �tt����
f�D����qE�������0�eg����U��f �)�o4��[��aA��������4��D��/6��Z/���L&�CYO��H�����0}�����"=�$��APs���e�� �<-Tsm��8gwAEH4^��*,���������*���+I�{O���"{��'<UV�, ��(!�l������C)�u/���e�c�tQ[n:4(���dV2,���1��\��w%�kb�����ug����O-D��kE�s����X���	j��L����F������_~
I�������e�l���
� �>����h���g�7BT���*� ���VJ �l�{�[����AS ��2e���;a�w]����~�;�!�*,m@"_#�����M���,J��4�[=����wA��3�����[��=1�kg���w�V������
���)f��/��������	0�J0���O���y���>*B�]���$�{�+7�yq�d�9fe�%��[������
M�}6&�i�53~��12~����/�=���[�|�H�eh�e5.C s4������r����7@�`�U��	��
M`I�9�8���h�����el����M�y^�)Qxy��������g6��mh����:�����1��{�@5��1-�����(�7��m�74��}�U0[1M������gD�8W4������{��	N���_q����mtA���F���/�2W})o���Q��h��Jo��,/�����<�~���Q3���<F`YP���IR>��1�������&�A��z*���c�&c�E�e='�G��<'�5h��i�'5�����
8������X���^�v�<zH�w|zBDBk	�W�Ll�s��'u��[]��Q<�G�8���9��3�"O�j����S�2e{oi��%~�56����X����b���o&�im
<�)�������b�*
�7Q�Lg���Jd�/$�j��9��:q�����-�K`{��MNT�A�zb��u�T��L������b��r��`�4����p�{�a������TV]2p����%yj���~qTjE��N���zGMZ��	�Ql���Zy�yTqT���J92=�-�LE���i�\�jtAT�(�=���dD]Z��q��e)T�4����6�aN?8���<�C#"5bO��Z��Z�L���3`FLH�����9�_�2w����U���x�TL��J�_DB�B�O�������������=�N��s��"jN����^{A�i��y,��N;����=����=�c�S:l=2�:���������1��7q��&6 ���
�4��<�h�{A���}b�}[���������s����S�W=�+��T����������]���H���t{���T���I����k������u`v���Y�`g����m��O��V�Y7:ab���*S&���3~����&u��K��X��p�)��5$�.9�4 Y����$Kj��WY;�"����.Mv0�sr%�B���s2d|�:���mhKz��M?e��D�\�����o&(,�La\�!�Ij�2���Y�.�	�7�l���n���H%�ED�h���e!.W�W�o�����k��r��|]68$�8H�7�?<�G��~�H��%�++�����~~�=�!��t���@X���^����h��F�0-�
IX���L�F�$��V�����Z�4�N��}�-���|���mXO�*	d����Z@�;��p�����C�?G9+-����3�����L'b�o u���/��@D�5����J�J�BS���5��i���oq �Q�	$S��4�����G��G���j��ImEH�{����X�an\&C�k>c6
y5^������DX�mv�����mC��l�6�W���-9V"���9M���C9�T����^�"����B�
��`:L���6$�Xs0j"�<�O��&�m��k�X"r�H�}�u
X��!����66���`I(�O�}��B k���T�O��n|,U`!��Z�"��V�������4g^] 8K�_��,��s�������	u������,H��!��pV�������K�Z#������#B��X����y���Sl>eg��	����MzA�DZ��[K��W"��Y)�)Q��-Zq=T�����'���O$�5'z�aEo�'W��8�VIE_'���8z����d�l6L�ksx��JDw^T���I��Gk-���'2��
��o���������o�w�p������&���FuF�pFW4��MP���]��"����FD����Cg�"�a�hr�tE<>,:���c����,����B�<����v��������GxSba����X�M������#�_��X(�����L����O����#g|md�gs����[%��IK��v���r0���^�����H ��M�����I6��������O����w��3�K������q|�������Ly���<n��_Q�8&����LV��28�.��"[��9w+�@������7o�d~������4�7��,j��JX4����>�cY���5�O�����)��Ld�<���R��Z�)7��M���2����W�Qb���s�Wl�9z+���`�{�\��>������������p�`dF�x��8U4��zP#�;j�8��.B���up���6�L>/�q�z��~62e�,�t����C���&����
�
��%f�:
��*�����U�q�$����[��3�5���20����}������2\���?*E���ff��v&$��,��&�M36&Dc�����}��V[!�f������R���u��������v6���+gV��� ?[��e��[�M�H������&�^�R�����.oEXK���d�dJ�n>;��H���&2[��q��]
6|������X$�~���"K�o�9��|�w�M@�V=�M!�V��:�}*~�	��_�]��%�V���=��w�I�2EP�h�g�nL��$p�����E`
�2y��u!�����BZ�����������#U7��ncx_-�|���XQ�3w����L������Q+�����h�����M�j�d6vUCf�f 6`h���P���	-����,]d�I�d@#����}|>Uu������;/9��{���c�9<��������r�\�4,]��>n�d�����"]�Mp���?u��3������g_�������%�2Ti�u����2�!G����J$3����\�����r��T��Tz�^"�G�.�)����)YY.C�*����a�1!��=ZP�}��Z!�	�����*:4�n���Wo�|���O�$|�K'�����I�������n��jv�~,�24e�;"�
�����i��3�}�K�k�{s����H�����zo9��j�g\<�s�{g^a"�F����o��y������&��w���;�k�8��X���KQ���3�,��GFR�y(7&���2�3���W�8��s=G�7d$�3���]H	@�CL����{umHj��&Hd��{w�����A7���@R�
���f���%����s��A�l�]i��%��$���:����I�
^P�d��A:�P !_I�q�����������������q~�uG�Uv&��2<��s��$�t<R���� ��bb%.����f�*s-�% ���7g�Kc<y��'�4�W�P�(��#`+��`c�a^�B<$(�����xd����2I��8nt����4��z����]PP��]R��*+�2�	Pp%��3����tQo��?+���\2�D��z������g�t@�6doN�,d�����nq�CS>������b�c�i���2��	���
���B���K�;�f�6��������]���.�"@x���?5Y�y���(�'Rz�dp*�g#��(�jZ-��D��/�9����N��"���:��ID��%p�g���c���P/���+&��H��Dj������D�M+�������W+�~��_��s��,�����_�l�����,j�q�b�)BOV���l�2��d��|��������r5�+6�Ec�X���Cc�����.�#b�'�+v#�FJ�����A�g���e0�����99	���-�Vc�;(5��(w��|a���_�������R�>eg���B<W�'�gzr�<��R�-w�����[��c������XP�����
���+�b��vcU}�gG��%E�������/�`]���c�.(_���<����X�R�cr����V��F]&��>���5L�r�p����G�N�#����gC�{����{2�si~X��aVQi]�����{Y:v	���d�pv�b�;���=������	?���g�t���Qg�FM��?��p�����"�����o���Epi�G^L	{@����|�S�Gu���t7P+�i�������\�<���	?D�Y��b�p����E���1���[����,(�g�&Ti<�sC	��Y���Q�b�+P��
���wso5��������Y^����'G@��S{��@��������Z�`AR>4D8��W�/E"�����
uP�d1}4��_;
���5p��4�jJOp���s�r���A��p��3��T��7�gH��Wq$U��e`�����$���Y	�YS�Gc:v��+�W� ��F���%�3	��l��v�D�����`4>UeO'
9��LH�����.�
!������@�t����{��2�Wew��
��cG����h�bW�7=���? �G���)�;>=��h������~^�M"����u�+��9\	ep�/�t7�r�)XB/�$��L��A��0=U�;m�EyXM��+��������~�{�F�r���:��6.�
o��f
n<��F�>�����1�a_��h�)�k5�6�^;��1�>���p��n���64O���Mz�;�[&�����bT��8���
&��3����nAp{������GS�H�6�KIT���A���mvhA	��/y0��1UB��
`�3������k#���#�v������if��M?"��C�^K�v/�����Z���<���u]��J�r5O-�8h�K�&����x��6�K"*������_��������kw(���$-�I�a����b�����`o�}=��k/'�n(��������br��5�#L8�=���hj�0�O����G��
���/H���d� ��G��L�yh�r������"����6���n%�#���a�g		P#��U���T����7�Kz����.�eM��aD.�P	�� c��l,��~��.�
��Z�^6�Hsa��4��S[�$���Z�'T)���T�7�+��	h�+�3W���'��d�2�~����~�D��)C��	P��%��+Pq�.�|_�xS$"�*�h	�Y�����r��*�B�SG�c���M~h��z����4-��_f!S~�EMUs���x	T2�M��d����\�D/������Wu��6;��B��4�-4~U�o���4��������N��@��������>���(���J3��/�U������?N���4/��
��}����u����oP�4�p^���E��F;�'��EZ����d�7>��y}���2�l�
�`c�P��M���|X-V�0��j �]�W����h�����0�����M����4�F!'wf/;
�#���.VDP@$K+������H[r]'����H�z�g�g!hs(��-B
/�<8�sCR��P�����#��ypYf&�@Hi����Ve+"�*;�9�u�!o����-<q�}����d��y����px�wT����oi�KCj;����|E�!����f3	������j6X��/������|&�&@aoR&�,P��g��$;�T�g��Z��yX�� ����u
�����I�p������r�[N��2�2���Ot��FO|X��C��;�SO�������jB�}�6�*�,y�Z��X]����}���0
.|�zsAN�����^��&�nw�����z�~3N�
k��w��H�O���Wkg�I��v���1Pg'SO��3B�H�xj'�VmL&b(�����j�/Z����h`�7S�
6��E?��H��6'fE����j���D�5�����F��U@	hgx����	)�@%+[��W��z�z��4-�+s$F�����f�^����a?z�-B���vc��,����y��;�`���?^�������-@��z'Bj��7l�CT���$����9��ts&m&%�5y.UA*hE���
Bu�p�N�*��6������5�H��T3-'x��%XV�����KQ	�ir$�o������6}O���Ee�j�G����bR`��8�v$U�M�e�%�P��+�^��~m(X<4��#ec��V�Fh|+�#��yx�h��Mt^P�**�c��Sv��R�F��X���QF�]6��3};X�<;K�?�F[�����k%Hz�$c��������(`���gG�J�M�k#'7��D,��� {b��K�z��Q��:E�eMFI�y\�+�H�)���Y���������3w:N����WfV�YBG��P��<����vG
.����
2�%9�������~P&����}��.���)��X�K�;�l@�$Q�5(�MO*�����Tn?�y6���f��W=��������k����������������������������.���X�����~V����R��2����}�����W�k����T�����+��{m�P�v�6��Cv��'��983�_X�h�}�986;����h�w6�@�T��ms>;�`fP�Xgc���.2���r����t�����U*rtnQN����<6������l�q�/�������@kY�`�g%E@���=�� ��>2�2_{���8���7� 'AnT��-���A�s�������(�|,v��.fCe��4Ia��M����EW4�����;S�.���[���K�e���3=�<"p~��yM��C������Y	�K�X-}��6��`��'"���i�T�~��V���"����F�UV���2���Ac��X�B������u�[�$I�����P6*.<�lL���[!������3�VZ�{S[2��l���N��
@�(��lE6��eP�(��&+������	���l���q�4����6���PP�-�tE��Ff@��XQ4�]�'��,�CF�h7~WM!F���\����Usc4�!�j4���Lj.���EM�	]T?�E+qQ��8��|f2ei)�z��ln=4k�����Po�;q-L��,j���]�hW=K��Y�h@W4�u�P�wAQ���H��+����iE������
�F�*���?��r#����'�R�Fs���o-,�C��m{-������W�A7�/�������&M�M]�}S��d4�+
�&�K
�-������h�[��s�E]��1J&�M��+�R��6��O�F5!��2jV�/C2�*���R���.(5�7�28�/
�G�����
���"U>�5����]]�������mqL��Yum�Y]��#9�4EnL�e�8� �����r����L�B�V���z��i�K��/��������`[1*�V�OH�uACV���.�����z��H�z��r����"���hH6uA����<�z3����/:���x�dT��3�D]�����\��f0�K}��z1�O���h��������-�M]���g����^���� s[�o@W��=����y���D�8����allr����Wu�7�|�2w�*�6�Er����I����L��:�v]NxSB�B�fp��?��4���^,v++"P_�����;%��ieV|
,��d$�}d�~�}�M ��$N��v���
$dfN��ua��Ys\
��-LQ[w�O��	�
�D��{C�^���}h�3F6$��\-X��KW6��"�\�yhO�Xx1�a�
��``�n��1N���gc���p�A|���B�,M�����v�����h���f����uc����h�nh^�l(\=hM��Sv��^��,�>(!Q�C�\X�W;7V���R��pG%���gc�;�5z�z���d~Fle��ay���&xG������l3��yXX�B�[]��@0!]Z�`�7~C�xz6,��U��N����d��v}6�h���[����%�������^�qv������H\�4��P�����+��{�������y���#8������g����EE���nEr�;3�<;�k�u����vu�� ]�E��!��;���z!A>e?�	&7�`���2D�-��T����@J��\6���q�	Iuh�#�X�(�T�5��Qdeg�A�g���i.�Y�(�x
Q]��j�^�lLQ����&vs�V"����zUR2�e5;I�tw����V����z#`U"��+B��k%R�6����^��T��u�EO�2m������rP�����z!�bX7���U~����2���+T�W���C�	cfn��.b�|���&��CJ��W@^���x��y��`y�/h�-��e��M����5}y&��GxH��P8��q���N��9N�=Yr�qFO	�����L���a2����\�����}�������r�(�
���2�l��,=�M0Tj�U)����G����>�H��f}cL�~4��5��"9�|3�+w,�(+�������"O8[e��Z���f$/����1U���Y����
|7-b�
��^#���%Y�����In�:o�1�9�����5��IJ�(�"vA���fT/2�i�n���H�(�l{��C����S��X�n��-��
��cu>Y>Z������l�����&x���>-�/�vyA��y�A@������p�E�7�zS|��CH��:B�{�mh<U����-#wbZ��u���
gA%���T���H
�
�Q�������{0C�r��8��]��(��#)|Zo�2��sHz[���	�dTPC�����P#������d��	X8l8���$����<K;%=n���u�[9v'�?����V2eO�i��y����)[�H���S��`x�]�~D���-�e��mn�9W��)�h�y�c��
���Z��k��"�s�p��3xW~U_���������*�Pb5�+�����yH�����d���������R��<���,_���L�qv����bE�+���{������]�;�>��������f��V��������������8�N��>5.��+Yc�K�LU�.L�uEs����+�rn���a���"���o��qI�>�,7����g��&������
��)Za]O�%��|��E���t��;��TW�ym�|�D[��^�%�v�>gP?>���w�RR�KP?�&����\��Lf
��D~"25Z�|��q�h#q}Z��3�;�(���%��������i��o�m��}k�C++*�����)*A��"*��9��
�@B��I==6�ldZ�{�O��%�z.��N���A�Tv�Rb
AI�vzc��Lf!�d��KN%e�S	�.e2����D)��Q�r_/Iz�88Uz���������c&��L�:=����.�bk3��lk9z���39n��O���93����<�d�&�
L�4�����$�0x$f���gGR�:�k/��B�]�+�Q>�9<X7���/�=5;8N�B�����P���b@0�=��K��gg��7��oa��g
�?;K��`����`b�GPw��������g�k�����T`#�����l�t�
u�;�5�����g��,D�<diF��aKAJ������9Z�#
_��?��[������	;T�X���|���1T��%���[� ���'�{+�RBI�wy3,,���Q�����wY>�X�Bu2Kf(�Q�L5+��G�j�zBm E����|��'"��VT�����&6"����1���c���nQ�\���a��j#���L�J�$��%�g�*�I����.3��WoC{��5M�b/�������s|��z�pF�t���X�+�V"��S�(�.�x��kNH�|	���@+_>�l�#���_����M��d����(��$'���������.G:����2������Yh�'�b����>|�	��m�8@�����G�i��}�j3%��S�������w��4������f�F������m�7�2yxR�3&V�G�T���?�a�	x�r������o�h�6$:cRUdV��{�{�����|�#���Kc��B+����������,t���!lI�7��M��"��E����k�sD�b�k�zz�����h�&$T���Wb�����
9����x�1�S�i�|�������L�Y��a�VQ
sT�&O��(Iw1GY�&��,�^��������]�=����?�v��#�/�.���!��S<��q�QO
�L�L_;LD�1�p���+����g������Y�~�U���?�4�c���f��8���zHi$���H��86��������m��]��r`��Z/j�#4������l?�����I�+�D�3D��+�Y�+���������8b���X~A�����g&Oz�m�([N���bC���QH4�z�����m��9�'A
v���%a�7-��r�|���`!3c%q�V�l^l������|$�����k����(���? ��,<._��(�N����$`:4��j�����rA#tHU����,��l����_�������p���L�-�t����I��gr�E4������z;$�G���2506��&�j������U��K��-;.;���,Dm�-6�sa����?X��w�K}vT�d�H�0��bs�,��������S����J~���Wup����r=��V�~�{�rq6F�������#�Q=j�$Bt�D��X������3�W�	Oj����qf�%��0���@$�>��qj���A��52)^�
����r����Z� �����1��� �;�=��Y&��H��)��~11��b�G����+Fb����f��2.���L�U#Pre��}��c����r��=�?e.�q.;��QY}��B�W+�����~��?���5��_A;4���W�bcn�5z
��1[���]�U�=Y�Z3HL��R4W��$�V�&�.�.�B&��9�4m���0�[��+G��f���`�����m�������l�3�l�i�WS>�{mt�X�i��+�rH#D���������C[TBD�Y����ik""W���(�U������D:��t�j��	+QD�����6��&D7���:�*ugB�%�l�l����u�	��i@.�O�b���bL�������n�K�f�}p���f
�Ci��6���������>�4��`#���P���6��1b_) |������b�
�;jO��9#���\�����>�-�6�Icz�#�v�����r �z�\�s��d}�(�O������I�JX�������Y�t��w\����K"E�c9p|������ ����I���s0�9�������}�5����\��G��?u�1��O�/�f�vQ�t�B�fx�.�s��6?�������$qu��d0��f�yn[�,b����|.�-�����>��g���o����yNb
1��~���'�y.1�yh�,b����|�?������#�D�s�� �?������9y)�Y���+��������?�T����T���o|���U�S��k���)N�WH�W��k��>7���.��1�]����!�������g.�����#�b�{KUG1�=��\�J���CG�;D�{��ok�[.[���L[�w.�^��6�J�b�"G�h��5]�%_KK���A*{'#1��&;���K�����2��R�5+u]���Zw�Z��Vl��N"��y��b|�������3��\�n��v1��-��b������7[��n��v1�����b��������#��X�~������Tn�������OF����7���~��s�������o�~��'K�?sT����e�/��]��h^�0��w�����e��/:����h\�.��o�����e��/��]��hZ�,��g�����e��/:����hX�*��_����ve��/��]��hV�(��W��p�B�;aw(�����C�MDp(������=������G[
�{.|]K���k��
�{KUg��=��\��<��P���
�(��m-��ok�mK���v��y�ID_�$)b�-������&k6�87�����A�w�����t����H�k#��Rj<J���$�x�����{��8����_4����8�E�k��d��!�9l�%9�X��	���3��^���Q�9���s��^T�U\��o������VR&h����U�f\�k�_'�O���&E+��h���<�����
q���U�}�Q�C�2�����*�]0KD!��Gp�mJ��N�=�T��`���T���yf�Yli<�V~m��I�"c���)���A5����"7��"H�=Sc��4� �%'��xjq(Q��lR�)b]�J��|�8��]S,,�y�|��P��	�=���3���2��X4F����v%~A�a�Wn�������P�&���f�<������ci.0Rq�v`ct�U�W�i�d�����!�-�k���97��d�"�j�$��N����Dm��t��5��E�i�M#���G�]��]9M�oLF�nHm�)�.�T&�E�qs�U���?~r���.���D���4{9��fUL�l���C�ai#��3��L�]��U�d���T�?i�9������������&�0�@W1�#�e�g����(2hX�%�x�m w�@��6��/�m�E�Z���w�1�x� d���~����U�+�ZE<q����r���D~	SA��d��8�)��|q��������/E�&9g6������`�o��|�|�;� �r
�+#}(Z���#������ �`�{������~���LS�)V8��/nl�I���
��s��J�Dr�U��g#
�0��z"_8�kA�\�"Gdat�1@�|��{��
�(�����	"]{!�]z����� �C��a
T�+N�^���A����E/A�r���Z������g#<���~���'����mR�(���+q����L�T��.*��	h�f��X������c��P]�I�+�Nn�)��L�J\�|�~��z@9Hq4��t����2I|��g#��T�T���j�I�T�������W��Z��9�2$R���u8��������BZ�����Wu�y<��?+�O���E�|�Pj|����x�0�f%�xs���(��0�DQ4L�����"C���_Qn��Z��U�d7E~��E�L�sA"8dQ�4��RZ���5������!)��C�u��U�K;4�
I#��->�i��8d�����z�G����#=�'���A����_��`hFou`D��X�;�?�~�r�NFy��OD{%)��r��H�����	�DuN#�B�|�������4l�������^�"	��)�Q�B<\����e"&~��&���t^��d�������G��6�$�����M����I����Ne�e&R�����YI	/�[x^��_
C�OGw��2,�t�8�Q�R�����R���M;�T,*Y@�b"C.>Y���(� ��Up��.���$U�>�������;p�Y����u2�W�Sa�O?���g7�=_I�o����h��Ke�n�Wx��rtx�O���W���3�l�"��qw�����W�����_x��QN�.6����hS��-� wn�����������{L������)zE���%U�H�����]��4h%Q�	=�im���RnCk��}�}����'LD�������~��t����������i��c&�.��{TM6�C<^�[��-m��P�������#2e."P�j�FG(�\�R�K����@�~�1���&�nh�D���P���<U�i�n-Q��������Ae
C��*U&cbW }y6���1=<|��4��D�M��=l��������h�ZuU�o��o��al :���DO��2���_��|���4�e�3�_������P4-�U0�Q_Zw�����~����p���bbp���Sf=K?��g#�e����~�Y�@N�{pV��Se��>j�T��/!��iSfd�384�"�G�r�W�v�0�<&�:V����$Y)��"��X��Ij�"���j����V�5u9E�d_Z�S=��"��*2�P�j��&���$�r� �J�6��k��[�~H�#��U��=��\F�i��2�q��0)�%��^h�I���0��XN\~������ ��)�#g����9���L�����q��w�����	0%�>�btC��F:�� �}`DF���%�K��L�\�/E��=�)c������8�1���K�����
�x�|� .#�9�8g|�}�/���R$�a��)w�����t:(A����,���}�[�6X� "��)���D��r%F���S
����h>(C�n.�������H�U��u&-
uH������g�����G�i�/`���L[ta�c�W"r�b�bT^�"�fpqn�����NlF�����7h�|}�M������V�&}:x,�J����d�G�<@N:�"��Q0SG^e�����������+������s�XO�e����O�^tsZ�M�R�����C��<�����������6�����N����!��D
qYQ���>�j��eO�xC��L'�&j�7T���8���b�RS���D��:�r�A`�7T&��,���j&�$����F��")U����d�7�]�;�qq�����L�n�����������\x�EE�;�!P��� c��	��aW��L�cr��$��q��Bfa&����qYk����)s(�m��&�XN��(~W
�����An<�~AQ�-�t[�Y�������z��oh����7��a;,L�yO
���_Q�j�M�����h�0E�~1�����)1 jt�n����p6��U�����6qU���r����"O��	�%�P2/��,�D��{���
�U7��8�2�$`|vT�C��,�BF"?���&��~*�HK����^��y�<5��f���.��Qm�����>���<O5b��2�L�,9����&����I��E��	�)]����&�\����'1w��
�������"���Ys}|�ko��G]����t�oC�Us��������1�w��%^���"�f�NUvk;[���dE��]��,6�����5��z��Uv�ppY��,���"~�8;f�j�}S�9�w�Yg��	oI(T�8���T�����j�Mp��*Ai:�0Q�)����)�����U���$�h6������Xl�1-�>t���J��o��x����d0EV�����ob���0!w��O�l�5g �__�~kJ@|�������lz!�\]���;�}V�y
�]�{��5���E$���f�k/@���I�����h���|���B�PW	��F]1��Na��<�z����^5z4�[�A��m��>�{�A��:�y%��8�Id�}s��Dik�/�6^����20tO�O���bh�AY.�gu�c�{�z��
���C���������������\�f����t��vT��5MVs���&o�+��� �h������f��tG���g�������l!�U7Ovy_.�^vn�n9gD��
L��9�h:��2��]���jN���)8	�xI,��G4�=Fz�����$������i"@~�H�����UB���L��J���������M����4^YY��s-^Y�����QiN,\YH�#�k��C�d����I����D$Z��=�\�V"�3�b�S�bo�7�����/���%O�.Z�nE0{7Oa��h�nAS����m���gG�-�L,/����&0�&���\�����[�e���w�����w+�������SX+
�I��X�����H���tV��L���T�8�j��Mg��C�?��D���a��)��V/e����(�L������ePe������A>�%X��������h�3%9�$�f����U��qk��2x+����vF�2xE<���2K�C��
N	9�I1�u�9��	xZ�-6�w�"��&�%V�6d�D?+����ioj�y��!Q$�#I���ZoA%�'�x����f���w.r���������(�����~p,����}wBp,7t^������&`a�74��j���~%Qq&$��:�cI�t��X�0�c��)��[N�h]}��><�- z����3�(���
oC��K�
p���o�T��+���Ly������������=�1���`�d������*���w�AM�*''�oeC<��g�Hq/�����^n���FW����_t!Sf��}�S��������|s��:�	�+-(i_xpt0Wr�$bj�_�M@I�S"��-�U����i�D��+I�l��
8���p��
���k%;������
��yw�`�u���QM����KY�+���R�K��s����N$�\7�M��k|CR�X�&�������F�4��1�������M���x�q�BB�}�F�lt��;+���h��.kk�H$>�Q4���D�t���Vq�Q/����+�[�g��"�=��4	����8�;�����D4]/{2G�E*D���~��^Y����r�;xk�
�����W����#�Y��7������3�'J��I~|��A#R�k�+�0��'���.j�D����%�P������PC,H
g��a�_��-(�8S���)�����h��f����4�L�\��6�ON]�/������#A�0ja�c�[�@��}��nx�����Y�(]B����l���,\��S��w)�����i~3�]64K�0�('UL����7��B������S����["��t��]�������MC���������6
�qk��v>:g��q�+	2����-t����|��LO?�N�#9�g�h���an�p���8k��_k\�b����+
�"=��������������g+b����l�"l�i�FC����2���i���JD�'Hz�n�d�gc,}����I�aEE���L���[�J@>�����_O�\�h�N�&�|}�+�_d��a���A[t���h�C�V���E�Z���	*�1�(cIP&%,���W]��"T[���6�G�;�Q.jG;n����Yn���,L������O&Q�����Pq�n�������^��y��
�bQ��P.D���3�m)��&0�L[mc&��E"2"
[}��O]
pq� o*��JY[�mN7�/d��&R>u�6�)��
�(r]�K������M�5��R���K���:�����-�n���*���"F��M�7�7�!�Q���3�&�����,���
�z��e��h�`���H�t���N��3F�h�LN�/kg��4?����Q�
�LF���r��l�kL�W���U4����)hj���������	|�	��Hd����������l!
�<�P���|dCpbN���!����F0h�OA�#��Y��]u�<~V0?�N������2�����5��	~��a��xY���nH�T�n����m�.a����5���'c��k������*�
��*��}���q#H�P������F|����T��F��#
�R��"�D�m�0V��Vn�R���j���v��c�m$6�B��he�$��#�b�a��o�B����e�?DK�%����|��z!���
�j���i/&�_U�t�F^�~��s�{�&6
�f"�-��T[������������64��4t�V���0������3���}�_#:��
���� i������.�����f$n��9:���jB8�����
<h�
��]q��|�M�y�����BM����3�qpe��.�/n�V���
\�-%P�z�A��)8a_�����$���hK�vB[�<��@�u��������������+��(�q>��;?�Gp���G�-X��Z�Sy^Dd����V���PPR�����Bs�^LK���pU�x��?�/��#v��U��!�+OL���N�Q�q������)0�ba_�Xi��|���� �;2'�D�������E�;�C�����^-D�g�����Eh��0���C��N<
����EB���uZ�������<�Z�	V���������P���T	����(��m&
4�}�����B���zn��p���j�?3��u����S�P�����4��4O.������l�R�
��������H�����MH����}����U���������G�&�cG�y��}�_T"���<� ��y���+;YA8��7���[����P��*jJ�J�W��3�U2|fQ���Oz�M�[~��,��7�,gM�������'"�l��U�S��[�l�y@-l��_AZ'�u
�TS�i$����V�����>'��`h�Z��v���h�MM�a+�YS��\yx^�q�����@-��o��%?��}'�5a��E%�����g$�A�9Pj3��S�!c���lF8i��+jlrl���3M��C��������BWO*C�d���J,!������2��@b�l�	"$D4c�Q��e/��!$6Ik�s A��CHdp�N�f�����J������LJ�
�Yd� 5����<�� ��5�"H��.*#��[�72o������$�,���I|�v���<�?�&4S�Bp���^~��D<��A��)����}�G�^�%����-��Dv��3)2]�a�g6����y������F�G�&s�� �$B$yP��FH�!�m��L�[�J��'�������4#D��"]6��
��@�x� OA�c�`��l�����eF��W3Z�$w����
F�C#!�s��D����P��t�DHQ����y!�FXX���#�y8�o8.��j-A��6��}#����Q�@F���)�0�����S!O���f��u���AD|2,��"�(���N���f��Y��g���"��!5��+5���	
[��q�\�1�^,�KKO�S	_H�F��U�E��cT"2������)��'�3���+.f���q['5���b#\��e$�.�B~^L�~Z��|2�D���ar�T��iu&z�����0@��&��ic�p��u���	����>��|/0������'y3��0���A�����\e���a����^���%�
������E���������o9�c
��O�`��6l�(�w���^��o���p,������8���a:�	J�7�q��0���B��	S}�w�	���Q����$���{Xm(%������!����Ah=�;=|4`����}�M�+J0��P��9��w�@-�����re����y6,�rp��V2�<��n���lN<&�~�F1�����H$�~_���(�{FL�]'��W�C��3hr�9�����42\C��NCF!�9H�.���~7s?��6�`�|����4�EnE������\����*��_�`�|+U�O"p���N�o '"���A@vU�N
���3�yil/���4<��E-�bM��+�z�+�7.���O�i�Iu8�z4i���[-�#�c�B�G,(���P���'���7S'�J���nC�+�C���=T���K���%G4���f^�����[��]2��f*���x�<o�����L�������
_n�KM�b���B�b�r�_�m���g������}+�%m�����$��m�pR
��x��Q��_,��;{�4�^��h����u6�Dy�H������-G��@3����Q�h'�!i�T�V6Us���#�Jg�3#RH(d�I�	%0P����g���m�P3�iZ,;f���&�1��G���	�Hps[��XP���@>���7��E<V��r�����3��k�M��G<2�x�y�����MQhd.�����tB	�=�����NL@1�7����V"2'���mi���6�CCz.���i�-��
��Fg�YqS:��]��q[2�`J�n��)�3����&��,�� DdhO��������b	b!���1��?���5��(d��W�*fI'$sOaI9�-���N�=�M��U���j���Y�����Q���6I�tF�zv�v�\J�=��b������,�5�p��T^a��tFZf���d[K��M�I`��>�����0��z���_�)�D�6�o�"��
����T��lL/zS����6Cj�:��de��u>EP�Z��L��q��}��"(�#�2lf-����iKD�Ke�" �m ���f�`��3�Vd|/�L�#b"D��� �HQF>����oA��V��\4Z�GPIFN$<�P�$-��(����@�XhpN6�>�J���v�EP�p/
,T�e����z�	%@��hI��z���#(�M�KI�+�*���������P�-�P���P@?�����e����,�H�Q���FY=o����C&���U�(��D�+���JaT�
Q�����	X�zjKp�V�����"W~�YER$%H����b����Y�^")�Ii#YR$�o��H��GRa*,�22U����q��x�#)"��D�2X(�o+a�xD$��!��Gl3J�V��c���8���Q��G�����,��^aM��y�\f��~��P��X�����s������PZ�+�P���V,���9)�����bYO�����%�2h�������t��8m�@R��fRQ���`BM�����,S���R����YE����m
��6[1!���MWX�}eO�l���I��-�����:������xBZ.�'b)w���������n^���2������D"u�!"�,�aY�h!c���l��j�Q��T��7�~y�����aYC�������]�%��~���2���;9LNQ�o�5!���n���eAE��n!?/���J�5y��P��)����q��A=�����+�pA
�V:jx���D����.�fT�ZzY��rxF(�9�h�!�]���7��s��NW_Y�2���?{�X���~�zg�������o�
�|�p%h��;/�6�fi?/�q���z<,�#����pZ�YB%��h�7%�Q���4L]'2��s1?~�����XA8������NHm�Q|���]��=��Sn�D��3EO��ts�3r�CC>o�Q8����-]�$�����ZO[�cA8���-������P��cp��p�,��mj�$b��w����$E�c��]%)8�B�a'gT1x������GI<��3�|�Z`������D4=V[���o	c.��pl��"�����������\��TM
��:#����r=�]U����]�������4e��nW��MYIBY3hE���{oCY+����]KN�t���YY��NKCz��a���k��s����lv����`0�Vu�D��-�k�}���R*�jw������Y}}���V��$X2�+�O�|���s������4����>/�"��Y��LK�*��z)�/+S������|R �i"#>�����i"�����SklFH�''|�Z0�%��;���G�
<o�Y"��5��i�H�Z��!����9��������'��)";������mKSDc��T3���4* ��4/-��
�P{��
5��_�l�>v��C$��������>��H�g�pLQ��jz^�%��]m*H�����!�R-?o������r�Z:�5WAT^+71ay���dB69�������h���!-�M�0�6]��?"���|������������}��
MO��z���������V����orlt\����^����k��!��zP_\WQ�o�<�m��ow.�6j��;}������Z�����F-�v�Bo��2�UJ��g]�e�:���u��Dd���.��s��z}�QJG-��2�����&�t~���G-]����s�������^���?%�����7K��$��g����g�c������~���mr�����/�vADiy�N�������������?����_�����������0J\m}�<��������<�Hv�4%�]Z�Z�Dd��q��S����y�?�.�.���?���&����|�$Z���T"�Y���a<q���e�!���}�d���[��-_�	1vo#EC��	X�Gzp������(�q��eI�"��B����S���R����(Y�v��Se�d�X��s���O!�����t�-#d���SE�S���`�0>O�$ffj>!y�f2���Tj}����R��&��p�C��[$=���#����		@����@�:�Pv(y%"��!R�n����]��+w���1HH_�3�������,����q���qNZ�i��F�P�X����Kv~L����d55K���������M�^���������mFE�l���2%x4G��c�����Hy8�"������o��x���>�K�q�I�=|�1Q$�pX������1�`�n&������Y�~0Q������;[��@�����P	��F�I�u�J�A�}��I@D���Z��C��hqS?��3����$U���l�����W�������?t���kIN�1b����n���6�qb��y�n�Y��I"3���x��)�&y������WY�fc/5!e�L�5�RUQ�;�n����s���cwS��c	Asy�u;������Vl�|^L��{.���v������%��#����iB
���K�Y�|�;n�&p~y�B��-����Md��p����e���Z��\�7X�xs�4Q�g��Z�I�e�#�S%�=i/�m.�n��4�����-�c,�����6]�������f�����;�P?��O����^���Cu��0On*��������S�f��������6�?3Rg�k�z�Jo����zz^D������1G�-O;u�?�%
H�|�m����!�P�D���4�vx�jJ����0�~V!)+������}:{jJ�$=�H����$������	,�5k!r��>rX���w25���Qs�2��Z�iL?Z,(����T2,�t~j}g��}�3������F�.H�9x�z-d��kF�sI��l�!�H@�1��s)�O������$��x�v����s�w5������)�����
����w�$9��s�$"e������uE��c�����
�sp/Np�DK��~���b�K����]e�������r'���r�5Q����-�hg":�d�����c���U��O;���L���J:���nE��	��x�p[�`yP�~^>��t%_����o����A��g�O��0��z��~K��M$d���rx��wv��)s���yE��L�sK6�%�������$y��{�	V&5��7���em�Wj�O��4��3�/���LH�J�\�~����dm1�Gl����\an�������_��29��i}n3�����T��
y������Fz�����L�eY�I�e9�g$���*X-L�l�����n�83b�9�~�Q��8/;Q9��u���W��l����(�����a��bZ��/��4�����X�����b\~F]���~m1�C3R�W�-����V�jBR�80�_G�7C�	�A�?ur]D�;�|0&n:�,����= j�������G�
0yP��6����IL�����|z�����UG�\� �H�Q&������-�e82�6�QzFcv1����be��[�HD��p7��0k��4}�f�/}��Q%"�{�e*/�I��T��
��;����vb
��������q6�0�_�p@U�y���f6FH��8�����9�I�U��Ne���l�Zw���_��em
b�T���)�k��T���M��\��J<�*���������{�-M�,�vw�*�]��7�:�"�&qoh���Q�6��[t��J�N���!�wU-�,F����HbV*���jc��H�47��#K������(�q�/�Td�4!��6v�>Ja�4!�(vir4��/��xw������)����$�A��K���&"�(V,�)��i�������@��^Bk8���q[::�/�T����3���~Ee1
����^#a�}s(<�D�I����g$�(S���$t��xz�r�������A�}�i��a�#�	��	I�,��M�!G����bBx� ��4�]�H�;+�LV�^=���OD�:�|�n>y����U��JpU7b�u{������������K�}o��v3;Q���E�!s]��e����uv6��Y�dg���6t���R��L(�NZX��b�T��+w����-�I��d�-�\��NVS��)���;
���a0!���y�"��4k��v�MZ={T�6��c;��&�t[����l��s�3��`l����Q����nXa0�[	J�*C;���$�[�����Y�a>��Zw���Mg�UbD��	(����3,������A�����������E0��CJZ G�?�{��
������D����(��"����i�Z0�P���|�%�����l��2�4KSV��>+�#������=x`�A��^��/���x��e��'7�������Z@-:�O����d���#���>���0����3��~���t"�/�^��r�����P���T*yT.��~����J����-,�:G�&��l�i���e�4��[��T�=�%�������b���U"�JI��W�
�[*d�#�cm��Z�G�7�MA6�
4pK�cgI�D�s�����r���e�2}$��U��X�`6M��p^H
�����,���f��<�m��Z��V���H�}�w
���B
llg7�8���KE�|j�CP�`&�:5���F�P�v��T��������3�z���$�*����������j��Z�!�(��"!�XP�.���7�4G8�thW�.Q�& "����l!
w~�@c��	���n���������\��B����\>g��D�ec���Vl���RU�8P��z�y��DA�\������!�O�P}�S%4{������
g��Dd6�M��~w�e�������J�V�V�@��(k,6'�*,��VtQ�����W������/�.����m�bF�<������X�}��n3R���jD�a��<$Q�n�6>��I�p�f	�����~����$D�3i�����?��;����p���Z�ja,����|�Xba$�?/"��>t������?/"�:B�^��U����_��K��"�%p��v�����x���31=��/��nOd�#��`|rp{�	8����G�����"'��
`m��3��y����R��h������[�BQ���)U��Y����X;
��x��e"_���d�M?����xK��3�^������M�c����5UMl�A����o�1y���5]/$��M�j�Qa3Se�]#G\�����=�K��`�����n�e�jr��z�-Vw._�%���mA��X8k0�Os�`&g��`f��j����nB��wp�f��3�P���o����y��=V
{��������	��G1R-���
+,t����I����]L�Gm8OL�����_��,oR���S�-~t�����1���������a���fA��f$ /��>'7+Oy!����is�v>D-�d�����--~!6w)j�#��o9�6��a�H=!-�u���kZ#��(����j������I�����f���t�����b�Kh$��M���l��_��:
�I��9�o������2�������02�#�����E���K�������X�"���G�QL����Ks�Uz�Za{�n!)V����c�(��^���"�'��<��zL���������������m��B��o��q���{����������'�taY���
�����}:!��S�\S��?#��y�T�FYj�!�q�n$Q�mMK����O�1��H��V��V�a��z�,���N�9N7�:hv�&����D
A�*mJ�
���d����{c�������=���t��g����d�h��q���1���_�E�`�Xl���80��%��U;,�=w�����M��D�QI�oA�;:8H�F�G7�Q.zz���3�I�]�!y;Le��{j/&`7C��Q�d�p��V�d�}5R���$����"�a^��;!�<�����"����l����hE����M3��F���-� i<lbEkgo��E��j�3����t�O7�y��1_�K�zX0�[��C�E��~����q�������G�4��>��g�l�h2�m������r'2� ������*�t��&�6f4��I��;�E�f�J~��^�UnG��c`r��<�I%yV~������������;c���v��)eA�f$>��T����U���3#���YF���F>:=���8�Q��Aub"tsp-N��8��up_����N>$0������`
o���.���h��&a��D�=��m�.&�����6�l�&>�f�m�+����QS;g*������[j��9��)�� ��1�_�o�L����&{��M/��{LZ��!����8�,�������r21�"k�;N��� �c�7!=��%|�����_�3��]�8$���A��"h�w��&E q����fQ��m>o1���Zy��U��G�����a���h���Y^�	��<
�����Uz�����@<]?�,�e���������*��
���y����	p�>DX��[�������5vI�]�@��4}kz����I\w�s��8(O��vmE����f�g.5���������O�� ���1�]eZ�]�gA�	�*��k�D�,l���]�JVG�:JO��8��l�<��
4s�f��o�Y�rW4�$c��n=My�,�3q�������-��n�(��{y��S�7N$�z���2N�@6k���XkO`��k&g�n�����I�DxrV��`�����+hA���ix����7��WC�m��#��.b%����&�As��cY�7�&���8��~��{f$��m^�;���}"�"6}�~��\J�R�<����)(������m�s&�y&����D_���.�Q��K�:���B���G������aaNg���_�_�L/}~?��~��N��X���ji�C��/rK��i���� �"�o�3�3��������4�@�sI��?�_���v|%���C�g8�m;C*1luZBP�AW|��6&���������7����Q�`qcH���
NK_}h���Z�r9����9q��>�o�c,����B���xw��'�E����.�L4�$�C����A������	�t�kk��p���R��������9�m�[�K�g�n�W��i���=��8J��IF��F*�|�][�(�5�O^E��}&ujEs�������mn.Rt���&������xa�W��y
mH���Ob��E:W�:S'��$�p ���a@���7����#���"��wkQ��o^G8ZA*F��P�B��d�x��<��"�7�-4�����n��8!�3�i��N�����B4�6����L����Tc<f�����j�)&���&"���x����F#Q�-�����-?��V�x�) �ky���0��
�Kw�l��������+�Z�q��[�
��9�+f��L ����q���{6270���A��^$&Or	�*\��	 �H���\�q�BM�}���u����R�
��d�f���?�Q�,��Q!S7]��L����1,�����>��������V��
[PVA�������H��^:�X�L��2(v��)j5^!�,A.�_����,_��]�4���kP���X[�-��������_k)����#�����Q��Z�����L2E�rj�|�u�)�g"��������@I���c���Q��:Zl�A�45nN�<k��b�.������&�-���0��o>`&?�=����.�	��P}����)������`���n���#�cUF�w�h&�dN�����[����@�T�����>������i�R�8.��V`KT�tEpq�u&���\���^1���x�K�I%������)�K����L�o�E��LN�_��v��7����
�A��b,|�"������3K����@\e��.�Wgy�H��P��F�X�geQG�&�DU��a��z{�q6���D������`8����h�����8hJ����	����7
����>�>�I���Z&�E�1�\m�\�H����D��e�R�g�e�����h�zQ��F�2����3��N�uV��������;�e����
|f��%��\i��dQ~�
)*��dl�AO���*����@�y�
G����6�K���+6z�l	{3�W�U�>��bF2��i��/H�p�g�<�����O:H�^(d����>�'T��k*k5x�B��������rO�+���K��N��X�ZL�� w:����\Ae��m..�T�@%Z�8�.���QO%Y1�����4�E��G�vQd��~sU����.%��Se�u��e���A�U��;��~[wy��gFI�0���=2���F�����Y������O:}��������O�������/l����F%��f,�rRk�����$�����FY���Q������������uv�*�C���a�tn�n8*����tX&���Z��������	pG�6���ha������w,�2�����okOk���S���$feg��U��$���2����p��X'p`6�JV5�h���w�oQ�t��
����~���(�2p��.o(������M���V*��$��|f"����������:��S����X��mZ�mt�R���g�'��wpC���"?}�~�3�;�F�������J��IG��9�	���P�$����Fg�%�������n}��Kh�Y���z��bK��H��p��;�{g��'��!��[;�����
V���o�/��gXN��5���KV��3�{��Z�M����[�,���	$QGI�i;�./��UsUN�z�6�PITRE!"�@�h=c!},�l������`mSs�1��b�$^Q=���\an{����R��C	j���S�;�
�K
�XI��|������|��}^$���4G6-��,�QX��:m�����f.8�M�b��L$����sL^����|s�R�A�qF�C���0@+��?�WYb����y��g}��\�����i���u�����#�W��)�
��&�f"P���L���HY�c�49K:����W�!��[F6��-��b��m��z0�k�B��������XX��'U6�V�V�����>�&>����Z�E��@���-�7t+�/<t��n��u�	4GA}f�N�.��De���EA��|�_�-�J��Nj���	O��<k���J��iC�����������������_��������i}��?���.��|���&[���:�u���������C�^�u���X��a	W=j�9k������(���~��k�����y�5��f�5����z@Vn�_�LBd+�����P��]�R��l�QB*��0�5��d���I���:U��|�����
}��@Ni����������~�	XX8#\*����ED�L�����/�YV=0��)�;�~T]B��O�H��;�B���+�� ���b�vx:�	I�������/����f���l� ��P2?��!�b�������
���Z��i)YWO����2N�:�[dZ�	�th4��8	,����"��
��VU-H�����.�NN�@�a����=?����>/��|�	���X[�#^H�����;������g
��>U���i�y$�k��	�6�@D�&��e����0�M���NHs��������Y��%��z���/r�:����0fU�P>��	i��aV�%9J%!�Me���HK6����<���lT'����
���R����-)L���i�`��1��Iu5�E���f��5����T�N��V"��^aQwS���;5��a}���Tg=��,��7�p�I6�R�
s�,�4aaO'��!�����a9\&�d�Sl������y�������lM'����M�{��.��b
�qU���Z���:���o��[�f3=/3�?����1�I�aLws���r���������*�i�n��Y��"�>��0��Y����L3��`����Q�����k�U�6u"�����6�\�s��Z��T�� $�:���dO���%@�z2D�T+Ry������ND�ZWTBw���D4��f�z�{����*��N��DFH���BI�]=9������vX�s1�s�:#���u��3W�"���W�O���H���(�{�'���uF�e�Z�o~*P�:�aW��\�HkVQS������]����h;����QuQ�����f#{bMj2��@1��l���[q�&"�vX�/l��m*X���Qg��~1r.�u�Z���U��_mRv���Y��a��L���y�-�pl!j�$�qcyT��Q�1�#����Ni��"3�}��e6*�<w��@F��-7�Q�9Y9�:O���}3=%��M����uW�7Svfk��f�8
j���*"0�E��g�[��
�m8��r�ot�[vz�<"j���i^��>����4t����Hh���������s�������hrV�a������~��t"�H[���1#�Zk�w^�*S%-P�Qu�*��uy�6��$Y%cc���OD�L9F:��/��6�����yc��d<�0XN$5>�;�6;!��e�~�C�q�eo/�l����M�I���"6���GK��M����`�w�H
��n�A�v07�n
��k�6#�2�����B��UA,��d)�;2�J��v����~�z"i�`��+^�E�3J`����u�	p,dF�x�u���0�;���o��b(����������C}7�	���C�1t�E������K���P�������p�V�����wf�,H}u�l&	zV�XB�JD�&3����j�Be�pw/,S����6v�=)%2t�sn�7f^�/H_���UIcs��MJ��q����fBH�f�?r��l�D���'+pww�v����|���m|�W���kc�&�j�`0#�=�&�������/��s��.M}����~�����S3P�Zlt�sos�O
9!�F��;��/pD���/�J�U
>v���,j�03�����$���+3^K7��a$K����G�h�;s8a��-&;�Y����{;\����
��p=��F�@���"�#�bT�����8�F�{f���o��x�:�*v|&��*��L3l��{�	�����+8,��02��\��i3��)����Y��J�+���0�I�?UL���\g#�R��y3Ok����>��,9hn����Y/����R&������T�K�O?��1���O�T*E$��C[�Pe@t�+�#E�/�I�:k�P=�D��/$���J2����e�L��4���?zZ�u"�����3���y��J~z<� ����Jr��nR�d�^�}�2x^�y+��#���Rg�)+����.5�d��������2���.5�t0�L*O����m�]�T�GS��� ��qM�����i��K�>�������Du��R��rMe�T_HdtQ=��[M���w�B���������W���~�O��������e�i�}
M���3����l��V�`g��,���,o\
�^�Y�(�v���)���6
<�0��86�i'��>oD`j���9/��aB���Lm��6t�����V��xh�O�pj�A��/d �V{>�DD��X�����������i��#��w�l��3�mb��}�J{�t���c84��+bBPI��`�!H�y3��7<�\v+[AZ-�r��CC����Srd$�Cy�N���MZ{3M�2��<�;8��B+W�z�R����V�u�������>/�*����0+��U���%����A�s����9"��J�R+�4����3B�|�sY����� �G��`z�d��]_}�XB����P��a����}@V�v��Xm+j�~4��Q?�_j;}p
y6�<�a&k�s�5�G�����>D�;��?l�� ����r�L��|k��>���d�`S�'�'��&"OH�����-�~!-����6Sa�x0s'��)&�J`�����?������'N6���Y[������D�����d���|��@��t����1���}�BR������P+>��V��y��VW��P�<����Y�8x���~,������s�]�4XWL���!����d���>��,��-�q���\[��'��B���Cl�h��}�.?v��[��ewhmiRB,����k�%��_i�����Q�~Y�v�X�+eBhz�`�0�}N3�7�6e��7��X%��Y���
�p����6�|N�Ur�/�0�}���.���D�v$�wJs�i'���\��e4�-s?"�-��-��������?-�_}y���3���Wc������>P��eK��������������X������Wdv%�UI���&�ckZh��<�RD�����e?��|5$b��x���j�7y`���_QTF�K������rR6��4��]b}M�Uc���A�g����XBZ���4�_�uuD�?U�=��k��)�g�r���0)@���"����b��m��m
��t�#s+C4�������D������s�C�_�����c�����:_�(3]W1]�d�X\���_��5_?�r�<����4]W1_��r]�|�����o/��K��L��z}��/�� ���.�1_���k�~n���M��R���^�����/�|}-�Q��{�^�����"M�!��W�~��:���u�q}�,lq�b�.'�����}+�!�����\���o��w���SL��R��Z�c.�q\�:�t�Z�u��z-�1����?��/�8�[���?�u�K�����R�bn]{m����{�~����@��{�I�j�����{�]��z��}���j�1k�Y��U>�D��������B���z}��{7p���G7p���_��5_�n�
1_�n�
1_�n�
1_�n�
�\_��e�����|})��@��~=��b���5_�n�
1_�K�E7P�~\�����ot����uj��z�������?�!v�On�]����tC������'7����
��rC������7����
��rCx��n�]��b������?�!v�On�]��b�g7������o'7��g������������w$7���~;�!~=[�����Z�}.�^����+~GrC��Z��E�^���/~GrC�z�;���k����g-�9��w�o�ar;9r^�&�L���{;W'��
e�������7�M���b�,�c+���Z%2a+@�Vn{PA4j )
��B�(B�L�O&�����>H������V�����3����CD�l<RO�
feYo����,�f�Lc��eac����2,w%j�=v&n#������*���/��W��V�>���]_�U8�
�#3���������H?���k��N7���,����=8�$��93	�#�T@Gq&�"���EF�����1��-�������@������f��3i/l|��3�.��D��]|Z�A��x�����T��O��`�re�������D-�fId���l[W���w�_��N�Q_�l�>v��t���V(�,i��S�2��L$�'���w$�LF���q��L�f4!�M���bBb_:���a�X2��H4�	plx���b�G���,�����������=p���,����'�J�Z�.~���	6�;�Z��J���`������Z�
�������7��>������[�@Z ������=Vv������z�}u�t,�[
�g���N6�~g�ei
n�e0����M���������i_]F��w��;����U��H�oQ���8���Ap��
Y�Q3q���L�7��vA{����u$��v�H��yD�q�����n�4��O�`�c���RO
u~�w�G�����
���FX��	�iBv�����G�b�}�H��(Do�y��L�N������'Te=}ZJ����7�	�����	�Bt%=���/'���$���d���2Rb�������il�?3���E�/e�tr����dL7��8+w����a�m2ma%�Sj	n�
�,^(}�
�K�k��"�!�������[.������:1�F���P&�����T���'�f�2qo���+�Y�@-X�	k@SIrmT�M7�G��Xh����������:VI�o��S�y
�%p�.Q���Y�g�������g�RKDI���?d5�=�>o�=����Nv�����������V$�^�����7�F�[L������]�������;A;����D��?�w��pH���D���������'�:^N8	���)Ee��I����P����l&���@Z�|+�:�n��:�8�}���l�>�����	�)`�T�a����A����]�>��^1�b	��D4L�d��p�t��_ ����7���� +O>?��~B���������I�Ad��)�}j��4�1�C��4�ARd5�b��K
�P.�1�6��}f�u������S%h���sw�S
�QxO@�3koV���u':��/)�M/`k�^�3���i�f��p�����\�7�F=�An�i`�y#����xM��n��;�����;�hF����Pm�!�9s6D������LmI�\�������'X�:U������,)=Mq?F��PA�PbnY&��;^w��si�3Go����\���.=Un��~�[��{�d�1��|����2����U!��4���e�A��t��5��Eta}��"�t�}��
Xh}�>^a�%;����6�m�OL(|�hP����hE:�d�!��[^�y���"4r]�9xN��-s����p��9��!�6�/���}����	r�>/�����r���#���Lt�_��j������{���9J�	��dc����&��C��g��$����4u�����8��FG���2�.�D{���c���a�F>J��o������2[���(w���$��"C-X������3	��,��y;�����$Cz����8�hE�a�JB�9��	����;�Z���Q��-a���t���2W��3!��N�nTv~���>m��q�XuvZY�Sv�T�f}�$��������y�������|�H�v���b�P�
�W\�-��\6}�1U�LRH-Dg�\��|�(����|>C��2g��i����V�:�e�y!|U�|�W:� �>���~�2�b���%6x$#�Ftdh��;����i5ga�n��U��F�����Z�DZ�!o�I-(��6[�G�����D� �����k�6�|t�o���'Z�7!L���X���99�>2nb��Z��(�
_��{�m�@f����R7�
�h�z6
�������4&>���r�������OI�x���\�{��U4I�A=f%�UU�������q'��R���v@����9�^�
�����/$3�	�g`s�8�O"�T�~�,�m���R��1��S�����,����h�zW��V�-*�����ptX++��^���,�C%��m��f������8����;0�����t~���i�G�.o>l)��cMg�d����$SW"������z�g�E�@-�����]su�2*��zj�	8O>����� :E)J�?j���`BtB�`���2N$���<�j���g�h�N*�V�����%-�������J�p��I5�c-�r��TG�f�G,��_K7{{m33�z�m�Ve����������H����JJ�"�.J�(���i����U�����_%]�u�J���~���e�����J�]�u������i6z��p�������G������"�iy�^��OHe���i�{R��jBv��.�q���0������HKU�3*�������s����D���I���1���bY���T����g�Q���S����S2[f��XO�>�"��7���~f�2_���X2,�	�Gf�U��w����nGQ��'�,����t����O@��&
_�qI����p�d�S�n?/��=1t�������;���i������Zv��o�������U���4Y�}U�>���N���k�w;�I���_H�{R��5](������\;r��d�����;�
<o��94�ca*R���H�]3����-Ik
*=��Y�y���qM���`��������p�573j��cVRd�V��m�����*�s�������M�;��}����������Nv�7+�kP�c/��X>����lV���s��9�����1����������5�u����:�xx�h�8]���o�G<8���S������Nw6�3�A�������N`�"�xA�"�O
J�`�yN��bbI�p������Fp�t!(��_���M	+
����d������@�9B��Z���v�n����/$�h��}������R���>�'�3�c�Srd���gs��������x��P�3c�E�W�`��H�6�~������P�m&L�Fs����2R
gg����7����i���^h�X�N����GL;u�V"�*���9wW�d��b��Q~^o}%��w z^L~�1j1�V����+>��R?x��vN
�(�nV�y��C�qfy��7�M�=(�%q����{�{�A�~�BD�������z�B�����E��Zu�q��K�y���
M�M@�y�|���g$��E\�n���?��9:���}�`����XA0��Z��e��+q����Z���b���m/ "��p����a��^vFR���'��<$t�%9=��#p�w~I����`}'"�}�G|O��D�m���K��������������p��
����p���J����W����H���x�4'�LDdv5�aE�R������J�Vf�
�h���[�2-�+�^����9�\>�~��G�/������(��]���G�&$����u�i�����d��L|���w3�M=��5��]E_'%���Wf`��w3p�����e�TckF	pO�0�*Ry���29�7�&�U������ �C��]�M�e�;a��)��a^�G�=�,s��9q`cx��[���/�!����=�m�0���TI�����>o�z���|�nK��DA<�k�}��,c/�iCx��q����]L����f�-���qQG1�71�����f}�Ax��`=��>3���:��X��#U$�F���L��M�e�� ������U���������(�t������_����������w����}���	8l�������f��W�`J�1/���9�D��,7����X�D�~XS�h�|�c_c<�[B�.'��g��l��s4�:6�����iE�o�R��[��HD�,�A����/_H�����x��9�����/�����l���__�����BN���o���l�qF����|!9���G7�	����h%"s&���S�7�bc�����A�f�J*@����h��P�(�)��Vnp�D��[�U�������D��3)����������p!��VR	��2�����`t�@�M_��39t.K�W��AZ�|���'^�:��r8L7�F�_H���'`��i��(���Ga� Tr`�����J��c�Y��E��<laf_p�����{[��e�C��X��cc�3���Z������y�������B7���o��l���A��S���rl���*�p���
�_��d��f��W�@k9�<�A%�X��������G"R�p_���l��U{W)�s���4��{	�'����(P����2n���M#�k���>7=�
����p��h�7����	%�P��s/F���D����h�������fpf
L�����n����z&h.C-|y�q��p�N_jB�1����Y�\N���z���fG�����;��	6�]D
�����@�n/$�99�(���,�o^H�
�8|��Z��H�%z��;m���^7(�����_��M�=k7��~��/�7&�5#�U��"IF�([}��Q&��S�HX?{x�v����������4Q�����/�@��>����3V���0�~Q��f$�/���<�l&"[O._Ed,����f��=A�Pn�t���b
|��c�������V��n�y�
*m�	��gn�@�I������h?4����Ek���,��J���iQ�7�������E��Ki���T��m#/�jK��h�������|����O�7��>j!M�M��#��~*�2����;T��De�bBE>�z^�EF("eM��oFq�?3!��Y��)d����6l�M��U�36�����=����@�)�/&���:/=��9�*0�(K�� �CT=�?�Qc�6�����V� �{��"d|V
k��BB%�����_H������)����r�lR�o���a�z�h�V��L����`�����
����z���W�X.������$��Z�,�%�Y �9�:
��L�������*���Dd��c��1	4�S64��(b���MHe���	
0�s@39qWL�v>WL��PhT8ToS@BY��l�����y#�i]
��<>3��e����og����Y��+_j�������x�H���Q�%�������5 ����t���mS��:��r����<��j��#�B�2|W����i�b
HEG���#��S@x$�e�?DK�%�n���f'�Up�!U��
:������������c�5\�+6�i�7=�?v��Z�
��������������Z�P���ftR���y��>�a�kDgT�������y
��H�nNH�u�+5px�6#XE1v���`�_MH�w7o��|��s�8_8�w�>�=$�����t�}����8��g���a��H&�������Z��_o6(�B�b:g�1���3�-	k� �����w���hM�_W_�[RX�1��
��B.��R%"�x�
���(w�,��[�=�&y���d"2����P9�
*@U�\�m�9o/��SxCg	�O�y#�������]~^DT��g�<(�?��H�����	�Nf4g"�-��7Z�m��cFP�fM:�0%�T&7}�H���*���*/�O{!|�$v8�2?�:6�Ae/�����u<'��4��* ������[hD�j�&XY�7zd����V��uP%;���8�fb�`z~�igs��>�&V�_�-�nBR:	��ff�E+(�Zg��O����I���P/��f���fup�kX���b��x�tZ����)��W���_"{>��y��������J]��k�d��JD��?��NU��H����� Y����W��n=�KVC�/��)A+�_q�f��.��>�(f��'=���-�mYQ������Z�,a�{"!�:�w��U�S����j��|�n~���N.����j�H�y1��.�W�
}N�)�(���t�3���_����f���]���5������������q�L��B���t������0����y[=�{n�:'�@���1x�S���s���Yw'WY�ftb�����P#���3M��YYi�?�y�>��Q��Ie(��ZP�%$��v�X�P?Hl��Cz Ad���f�5j��%�0�����s A��CHdp���f�����J������LJ�
ut�����S$
���;�|pL������������x<����]7�Hra���,������(D�x@�0Lh8��
�8<����/U�A���"LNAD�E-[8�^�j�Z&h��G%����I���{=�a66o�C��2�������������@!H<�H��h]����o���!��ede��RV��(?1�O����zz!D��"]6��
��@�x��q9�G��F��M!BF��z5��I�q����`� 9�0���^
��B��4G"���=�0��l#,���������<�7��F[�� �P�[��l��5���ja{
#<oda�F�S�3G$Q��?���1r�A�w�?DT�hh's��z@V�~������cH
}�J���uB�-��r]U�t{�.����)�/�e�E����_�1*���e�������������3R������J�2�d#���EF����j!Wf
����������	@d;�i��l���(9$���d���M��$�#���|L�����f���}^D��>���,�9��&Z��=�*�..�gFE��N`%(9lXd"���(R}/.���k����o��c
��P�Tf
j�-;��]���W����A���"'aCqn���t4��?�q�����iA������OMp��`Y�1���vZ�0:��a���L��W>vG���
"�	��,������o��<��tZ�*�`[B
�����Y�t�W@�����)3��k,��+��:ZI�8�S?-�m�v����������#&������Z�����F��3^0}S��n����P���PS�+�:�id������1���L�-��"�z*;��.��:�Wu0�A� ��[�VD����H����:�j��2��������R5 �$��MN��h '"���A@vU��D|j��L��8F���u�&R�D�������w����'}�M�O���A�{i t������`��#���d(w��a��g���	��R7O����J���"k�U}f���7�l���<��If^����DS��h`":�L��8�������ZW3������/���&�i�*���;��n�(�Y���
�M�<I���s�4�x8�T��.�a���`�����3M�Wd6���9yq��� ���J�;[��&�L5i7aT.����GH�!U��M��i������������7$������8Hz.2�>��N��a	��68���� �5�h@6�<!	`n��2���(��������"���y>s�������^�m�.>���,V��e}�l�B� s����5���J����a����L@6�G����������5��$���0�!��.=
��B�V_4��Wd-�t""��lK�m���)���;������r���G���t:u���2Y�1�%�@���!w3�X�XH��fL'��O4�w�j3
���X�W�%���=�%���lIgtrY{���Wib
��e��dI'rb��OL�a�$aIg$y�aI	z���������fI_���[���
[��3��0���&�Z�/n�HcIf�1���X�������~+������|�X���:��j��������e`Z2����MVf5�/�O��u"S5N�����EP&G%d��Z&A%Y������3�2d��6�M�F3I0L��@+2�>�L�=Q$D��~��(#D�$����IQB��#&��<�J2�:��%��%�FF@D��p����B��d����x���]DA���4�DP��)�����/�@�,0�%y��Y{3��\7/%m��#�$k�'���"C	��C
=���P@Ci�u���iQE"�_�0�*�y�f=2��]�F�E%��^�}5��P
��W��T���L��(�S[�s��t�����2���HJ������21s�
��DRD)��F��HJ�`/��!���TX$ed�L�I��h/6 �H��#)�����,�&�GDR�<$��������X�L9�2�q�j���(6=!���WXS=A~^��(�/�_)1��5C�|^1��>/b1���J1������"(m�G����,Y��n-�(r��Zu-�� �*���&)�7����LC*��%�`&Q�����,S���:����?�hsp�@ZC~(g+f�^��t��V�T�����l�����?��#=�\��g��Br��ruV�;��F�ay�"s�������J�n:D�3q0�v-d��9�X�Zm6c"���
��-SjAc�&��pX�P��'>%;>�,O�	7�"���]et?�ur�������$���n���eEE��n!?/���J�.<�i(z������L�����0�V�
v�����F1�t����	�x�_E]H�������rs���PLsX�VC\�4#Soze��#><��n����Z�a����:�,�A�cu�y4�^���W��9B*����<�A���N�����8��,�Ad4������`C�����aF�X������gF1V���D���OHm��}�c1g�R��P�)7_"!��@�����(\��q+��S���F�SNQ�lm�]o�D��^"�%�z���!�6���L���E�c�M
�D>V�x����$E�c��]%)8�B�a'gT1x��������X��g18@������D4=V[���o	c����]D�S�^�WcpWJ�t[&Mu�:!����r=�]U����]�������4eE:�P��MYIBY3hE�����CY+����]/�t,�z��L��(�uBX�[R�0����L��E]�EYZ�?#lC	�`~��Z�FQ[V�$�f��T���ru��f����������c��!
���R��z�f��%5���B�'�"�{Ly
-}��sD
�4G$��r�9"T��M
Iy����'|r2�i"������lFh��&|�Z0�%�_N&�
7!�9���)|�HSD"���`Jm�
-��e-�y�I-b�H�����"���mi�h?�jF�"b��������N�����!�G���*�|~(~��q���D8?�#���}N	�(��
�2��y�����
6$��Ng��C���O�X�h�{���@�Gs��@�Vnb�����dF69��l�����r+��!-�M�0�6]��?"���|����\4Z��mUY�811���;����H����y��l������C�~b����u��!g��u���$�O�U�d�[9�O�0s��:�o����n���(�]g������������,�]����M�T=}��]������M�������"N�k�����k�Q��'��x���u�Z>?�������������c�]^�����?'�����7O��|��g����ge��i��?�������F��{������=��U3bw����w����������/��k���k��������K�u��z�/��P	�����l�hJt��rVy&"��%��D6��8����"JG!�:/��T	J��FN]�/��D,��eK�xb���evk\�y�}�q`
�oG��-_��1N�zs^���BV������b-��?�Dd��,#\����eg�5|����������#J��
���Z(���\8@��S����E�!G�\��$���R�8z���3n�<I�������A�=��D�R��&&@�r=7����#��(�"Y[6n*Av���$��N������C�+Yb�zv�nL���w�sT5�e�BB������v���d9&$��w��t��E���j4!yP���N�I�d������LVS���M�__x������NH���
�7�fTdMR��<X����}�F����~��7�
 �D���z�\
|�������a�#��3�mk�h�	,�'j��&i@|�u�����[�������3������v`gekR���6�k=T7f�fRd�r�|�w�������t.Z���*����g2IU�)�B0��B�'d���e?��������Z��o�����}��;�
gjH����2�m��~0�o�_��]�b
�I^���7����U�Y������-��	��������HHH4�
D
�pT�D���gD�����-��������p����������
&��$��(�;����[_p��t��00��6�1��J���3��
z�)1������i����������NLTg����M��'����I~]�_���;^�'p�y\B�a��g2j�q��h��LT� Z�CN�n��z�[�;���=1��:MbE(���JF��eu��maf�����	��c,_��oT����b�����3IGdF��NH���j��6�����P=;����'y[�T�n��4 �H�>�hQ;���He�����WZQKD���P��g!Z���R�c���Y��J���p��������$2c��T��]N��A^���^�af�}�"$e������b�$[�w%V�����p��D�������_lM Dn&�G�6���=��E���E��Z� �������&0;�l(�.�����k�$Z��:����]:��3�#���\3�����KJ��������<�r��\
�	�����dY��N7-�gA
�5���!���e������yy�U I�7�\)�H�^�N�u����4%�9�DD�c�������3A��<�<<q����y��0L�q`ZL�f��w�{�J�\4Q�����D�3��$��[�{��meh��g�����|dB
�U��)n�������'��0�J�k(��n]Q��n���;1����%���
�pFn�Rd��y>������M$d��������>Sp��K"~�s0�dOD�[^������6�/$��N\��fY�}����}��htLu�**G?r\.��l-H�%d	Q�*.�D������~<���f;0�xxvzgr�	��w�J�s��q�������^�ty����G�Ps�zR���6�,�7����yF���
N�i�B_���1�������U������c������=Wp�l�R�P�K��_���i��x�x�����(o��X��^�]E\~F2���]#���3#}���<
jU:�&S�Q�oN�f����B�;�]"������7��23��Qs��nAMR���m����oJ���I,������z���b���#���
"�����f$��@� ����F1N�B�������~o���ow7��0���4}�e��5�z��J���{�g*/������ k	�er|�Z��0���di��`��%L���@U��E�3gH��8�����9�I�U��Ne���m�Z_��-�������T	�v�%�����4��Mx����J��N�4!�<B�����~���k7JU���D�i��������,]k>+���lS�'
jR%b����OwU-�,F���P$�*����X�)�5�M�7�5�����(�3RK}*2]���x���G)L�&$�>�]���B��3��0�3:F�Q�f��Iyc����&��_�XS����������@����_��_t�RG��_���L�_�39.�_��_>����m��/��$���'$�)K����T|}�9��w�F����O��{���'6^W$�$��7y��vB6^W�7r��=�l����p�<�deqT`��J�>�8�"f���O�����I��������1��~����n|j��l��n7����^d����,�`�7���������$;�X�aC7{�^j��;��I�XAL�*���y0���Y����+Yv�;���	�jJ�������������YC������/��y��������L\7��`�=���_[���C�A0���|�(HA��;�0X����E���2�dv�������v�|���F�U""�Ji��8|��K%!of�-H�-�����7
<���	_R��8����Cc5����$�Hf7�uwQ4E�������`�P6������������l��2z
���U"���i���������' ��~��-V�		�9��m�Hn*�	d�W�e-���O����$�P����>bV^������i�$�2����r��4�q�|O��G�B�+jkU
�&Ur���-,��y��Ln���tI� -P�D\M�-�a�(�t��{.�p7���G�t���t�TH�Gt�st�S����-��M�n9u����h��xN��m{(��Z�{l6*���v~A��*�-S�|��!�����O��V��k��~���Z���m�����o;��b;���X�nvS^��)~�F�%��@�A�c���1.�������p<||f0����h6*�����X\ 8K�_�u��e�=.��+M$����m���9�4Ga����x����t����f����6��CD%0 q�!(��o�������"h$�����8�n&Z-+E���Z��*�JUm��Z������r��D:�]��?9����Jh�:�����G��Ddv�&x�������NG%���Wd_���e��)*�
��/�.��-~�;�U�=�hzA���6�=����>�	��	����k�f����W#���!�Z�t��	�M,�.H�k�����XA��O�S��d���L�>��}Q�!��c:� i�^����������������HZ3�X�������A`�`��m�^=��g!"g����_���oZ��o�>���J�w=��_}�]���L<���7��nW�lwl�1�����v$���w�-��[;z%*r!qn���r��LD�.�q�;��������V��PTNN���*��Y��nA���<^���L�ul����s���7��8�l��c��\b�D\���j��6�����3�y������� %6Y��'��L�)�!x"p5��5%=�K[�d��X�����ar����K��\���>�f��$tF,�u��6�����T�LNH��,�9v��$�^����}��a����`�P���=�����Y��H*+��0=�F�����*nB.Y�2�!�����%�1������I�Y��M�n+�����Vax�"��.��	^���=�9p���o�sh�1vF�6��sr��x�����;
���C��)� �X���lk���
 ��L�����o���
����
g�����6h��/ ���*J[��U����4��F �vAgS���*�@W�~�(��my�����5R�=��g6P�:��I�}��be<l��l���]7��H�G@�����H����Y_�-��\cB*�P���QLk�@�f'��JG����mJ�np�.����>E�&��<c\{���������Z���h�sM�ZHS����1F���+��h��Q��F|�E�ZVT�X�=>x����|�1���]�i;�]PA����M��g�n$Q:����}SI���,$����d��e�0z�=i����N�wrz����1�|��(�5i��)�;l>�pJ6)�o��7�����y��Z�'���@��x�������F|��������\���F��{����:1��0�LB~y��>�BJ�
�L�l�*�Ki��%:�E�T+��\F�������HUnu������><�-L�m�R��8�	K���8���[[���^��$�]�8l&~�9�3C�^�����-�6��`_Y���V�)��6�D�$t�h�����h�,#���_t�?��Nf8|pJ��!c���`n��;�C���f�a�&��.~��cX���������lk!k�����$�hN)�T��/c*Bt!<^Y����g=R<�uAN�=����T�i	�+��O�E�	W�@aq.�����[ �'�9^�8��Sh-�����
B�^v���*�,����Y����|�a!��M,]���B
���*@,���:��)�YH��{��}����Q����m�~�Cid#�i+��<��,5���t��D�'����vO&!�P�1��O�Y-�����i��v����>��A~��RE`M�Xe�	���Q&Y���%")����$�x��+@{�L�,Q����������EI�p�jS;���72R��i3��~��$��Q�e�'+]g�4����*�
�����:�:r��Q���$9���:e=!
������	)��#����C�N:��oO$�;wt\�6���c/���}01��1�dEA�l/�R�efC�m^b�9�?�a:���jY���	Bt�u&�(kD1j���#j�"$�J������I�7=�Blh�PGVMO��@'W�:���<|V�j�"���~��d��fO9��f��U�����3��C
������t�����=�57)�����@�v*�!]X�����	F�n����r-,(��v�����kv�Yn���8�I���������
���A���3�@�(
�q��$�7_�����ll�eX������u��gA�H���;��j�i+��@;���5�X�9��]�Z�����m�[P�<j����`*�YXR��a��\6[�S�<�M���c?+�z�./�0���q�E����9������7���3�����2�������'�Q����,[3,(�W��_�Ax��\JU�T���z�7U��������oT��1	�E���St��-L����qH�l�3�l@��'y�}O�i���;��a�^Ds�z���E��L:��������z.��</�d�T�3���)0y1�E�i��CO�{���t����	`N�s8�� ��������,Y�p�4�%��w�$^������`�+��R}��D&zZP�5��c�.�����*'�D}��&�7|��5{�^�8���E��v�\��x~[Y������4����i�� s��E|)}���xz��
��FSV
(U��v�S��\���F�{��rdc����d8G|f���=�
�=�������p�e`�0A�L�����~!w)�+�ks:�'�R�'��uZs`/a8��T�f��zz$"]����q��&G8I{�1%M]41W���k|�)��Hc�f��������B3�h:u�G�5��b3-<�<�����,Dd�	0ky������d�N�����7�."s�w1>E~��*������C?�O!.���+ 
t���D���;������6W2	%8u�?����n�5�� t�����N}"(����!���?���Mq�C��-�~@$@���5����O;��3�>�U�)9��g�^�	`����t$x��U��N�Y,{�`1/��a;�9�J����M��=�<IH&���<���W$j��� ����ZP�T5������ jZO����
��m��,D��>*8���6]?������G&:~�x�-���J���`+��J^�W~�����*�c5���q����z��I����=�/���q��)��M ����X{8;�-�'n�6�^��nv|l��
v����!������~�2B�1D�&����H�d��X��w�D-��������MG|A��>.�a�s�L�y8uX���O�vLY<`������DT�p�q��_=+H�In7��������ur4�K�2��]]�7�,�H���\A��X�"c��-��>��F���"�j�{Y�"��M���O��H������D@���������?�b�A;^��8y��yd����:#��<F�q��LD���T�q�lP3V.�e{8QV��2Q�1�E{�H��H`�x�l�T����4G�<Z@���n��Y�.:i�`��Gz�����������%�Q�\�a�LD��=<���Z����D���l�Q�zn��a�=\-g�����-���������jki����P�����>n�{L�Di�5�S��q��m"���0v����gAy9����`�_P,|�~�����a�/��������-4��Pp�X��I���@M��J9�T�!�%����T��M���|X-^�0�j �������Y1�]�Fc�qrG���Q�E�/g!O?o+K�=�6�t1!���P������LH[c]7����>�\��D�����`J��l?+�Z�f�-�{�&���`�8�|�������%�*B�����lAZe;�#���=�m2��Z����'�;�����m�;�`Q.��]��mF�[:�v(��v�S�������\��I��{,&U����~��%V�����U�}��*����J4X`������h�*wI,�wV��>��-H���t�.�����|���tT�	�c���e�����|�JD�1��D��>z����-�A��#����,��/}�I5�[M�yv����9����V56�j��>���i\����Oa�UH��
u���{_������/�~���=h?�}t�N ?I����a������A�������/��� ����Y�E��A����Y%j(/��3O�I�h}w��L��U��x]�A���Gt���(j1���	�[OtXiz�FZB8��\T�
�O�|r������$#J)8����k�3��ka^1�@jt�Q���ad������E���n��&�=KG�������d�
������b�m��#���z'BZ��^�!j��EXe����I�
tc'�DZ#k2�L��(U����N�����/�6�]��-�f�hM3�z���W-��O��@?�Z0�d�����(,���'ol.���n��c�����Z�.�	iZW��e��4��z����d��$n\AhK�uso��wCxd&��4��M����JCb���L���?�]P����ys���v[P���v��uw���=��v�����L�E�:��!n~DkL����G�{��+	�>���~���d��\F����/������m�)�*[0J������ -�����;Mi��Zt��,�Nk�������b���oK�^�1W�E��pd���?m_��3:Y�
2{�T����ko��O���ly&����";P&E4eM��[����GS��J�Ysf/9���?��S"%����,��9#���g��?������������������������?�y�$�m�s�F��N����;����*?���S�*��C�?�����I{n���w:�1����(|+@gx����2`��7N26�������r������� �I��O�����T��&�5s��g���-T3���gC-��r��g!!c��>��}tw�gF(��(�:j
����(�f��K���*NDG���c�n�h��V�YXV�U0i
��X
D���������	��� zh�����
��ruV"�N&��M��v��23|�j
����?�)���c�nd��_�S6�/j�i �De=}��s���8�Ae������������f������.5v���T]\�cd��K$a:����-�R��~"�.�hY����v
P�&{���v��"�%�V
��%=E��I���rRw�[��9M"3�<������K��&�a��dGg$��&��0dC�lV�4��F�G;��4��0 ��V�A�f3:#�2�o#�(�V�H\�z@[� \K�����I��l��nJg��S30�wS:��x��^��0��
3��5S��^^��f��S3I���C8?��	yv�0����6��iq�ds��I��kl �~�Ft"�c�M�����m�53�oWA���l#����&t�����R��-f�7
�^8z��QOnDg�<?pXQf�ftB�JW�v������d\7�;����caH+���C`J���aJ'��������)��^/���dNg�����$�;���T�������U�������L4������>�Y}���=��*GvO���a�P�T��'��r�	%`��'�d��eWsR��z��VlI�������������D�7���Q���a}N:U�PCn\���4l��wFY���������i*��H���L��G�������a=��F]�T����c������{����# ��:���'�� @�,�]qZ��������w:!�����s�����o��^iaW���6W����j%�Y=����s�s�Q%�W���;��dT�[��3f�;S@���V���2�n�`�����������$���?�����JZ ��i������pk:#M��kCJX�x��D4�+A�RN"��W�R]�K������^�� �
^c�X�������e�QA�y3��L�cf^,�'3"�;Z�[����R�h��;���6���W���(rm�$J�w�������N��0#���;>���Q�z��ub���L�t��������Y���
e���g��gQ�E��b�B�&*�����k3F��1����o*��Exq�����@����w�2��m9�Et�A^�?Mm�)c��M�(�n� Mm�pg�qv�����%KukR����m�����K��%8��3�(���X�^�e�����
R52��a��Dk��*��&���@�A����J4��G�6�
��fj��v\���|�g�9���]3��u�Q|i<��� 3���P�a!�3�{A�%�0��S���f�F%x-�����b�&�0��Y�������6����������I��d���,������ ;����>gX����L��q�B�!s�O������N�E"w&:������<=�O"�w�$����}�|���������.��I�^3#=}�S� I��NI����n�:�0l9�W�u��D5$�x��*�8��i��o�������I7p�3��/Y��w4�@?-0��Q��*]���Aw��O�v�7�0G���pO5�1�J��_��t���)|P)�jB<L]b-�\��%����\�yf����,���L��
|V�)��������!&�Y���az�_iE-$��(�%A��yKN7��m�kv�=`j�\���7���Ww�Io9�O��K��z1!6W7�F��O��hk�ZE'�6�aYS��T-�����$\����,�����������Q�H����"6�p������h>G���c�%�\{�(���#���*��9#���8��[����Y�f��S$����V������O���}"�8S��6!��3z6XCv�G��}�d���EV=�D_��
��]h��h���Y�u��}���Q��f��rd��O�CQ!vl�L���/�3��� Su�-�B��pg�o2,��g�-]���r��Yn����
$	P
�B�,Dd��1���s�Q%"��hQM��`��s���o����G��D�1+:�U29B�������nU����>v�c��i�
���u����������"�AJ,�.�u�"��H�Up�Gl����������������u��;����oOv���=�����z@&"�i�pLYq;�,.�m*��p�HYL���;�6�"���c�fRd�S�������'.�F�@��p:O��Is�����7� ���J�2g��6�? �6����B>��*,��o���P���xAH*e�f"���I�m	���\��Ch����
2h*���$�R~M(��	��4u��=6���g��yod����e!x�A�q��Y���XPR���u��zve���?-ja]�"��V�B<����D�����`��c��N��z-�p��zc�X�$����a�zQ�		�t�x|"u�O1�t�)x?����#�F�&RDx|����9��^D�Qx�D�0�M������V�����^�L�!�fmU���K���E���ab
n��]Dj*R�J�0V�g!����4Kp�l���t�0��HOe�.��������2����H�V����n���h���
Kw1-�w������3�����M'3�xJ��j����������t��}h������P����R`����I�^:f�(_�?�l*_zV�jN5_������BA:���V��;�l�����E�=f�CqF��������+��!��f�XxvA_���l0�M�[y*m%"�IW�Os������I�(q���Y�ZU�& ����[�	���{4���A���j0�T�Zi_��p�}��=vB�l�9i>{��f������S��e�=���k�^�{�Q��y��^D-]t���o�@k-v�?�+�)�l�mv�6�x�	IY���H��{n�g{:Bu����E6��{�`�=����JH��5;��3jB�o�.��x�$>�����?l�b����g��Dd�'���)���s'�z.Zc���}�6�?��}�r�G&��d��\�or�2�������S��v�{��7d��.8�z�yL��|��a�@�t�%�t�|A�.���S/x�������/�z�@�|�%��c"�`�.�����c�`�5	9]p�Z���}����W�����Z����t�5_p����/8jUC��7k4���.���!����GPL���b�}Hb��;��w���;��w���;���Z�1�����|�������[������&�+���|�|�{�+ �+�������w��w��c�h��#���v*���lU�!�^wO=��{�^M$���O5O��{�I#�[��U#�R������Y�������&�Y��N#��c�<�
^��F%��r�����:N�1n��"]��+|��>r��"]�CG+�>v��"]q����]��W��r�V�4��:`�1��#]��+|�>��1#]q�u����+�Z�1��a#]qL�������N����o����o~���on
��W����7����7����7����7����7�������7w���7o���3c��/c��+c��'c��#c��c����.�������{��������4�1����$7���G���������{-���?j��\���d7&���z���W��9��nKvc����d7&���r���]��]�[��)x�WWl��H3�_���I<y�}=<��,��O�e	[��t&���XpL�Vl�8�gA�	�mJ
�=� �0�W������"d���d���tiB���t��O|]5��3������Moq�e��_I���!2�{���y��Z�!�2,P5j���	@�bj���l�E?���<g��n�]PP8FQH���He��M�����g/�k��.;��N2&��k�	B>x@�LBfr
�,�u'�"��7�bV��{�)��r��q6�I;����&$@&�G�k��B������:�������A+h�_{`gG��j����c�28�\�d����@"cK!Q�-�� �:�����B�����R��J�[~m�	�;��+ j��v#WUT�J��#eI*��}&����6�C�����"�M]�
�1���l��Q�uj��Dw�P����N��R,VE"�X8�^���}rS�����D�����`}�C	T_vj��	�wf��v�!�P~��o����L����L���V���VYO5�~J��u��%���r�(����0������[���0�z���,pt��L�,��M�uw7
�&�Y�A�"�%�|V�]�p�B���5oj%/�������D����Q���w���$<�����a��=��=��{C��,�r�1�������7\�,Dt����q
g�=��_�zR���~\�F����
���FX��	�iB�����
H�b��������A8'�~��g&j'{��+��	Uy���1���]sBjm5;�:q�EI@�e���c$[�%��c�|Z���Z�W�� z��'���%�����3�I_\�[P�
{�n-HV�t�a8�y�m�(�Z0�a�z^�������������D%E��k�{YU�s��H=�����!���e������x�����YK�^���`��K-p*I���J������M-2R�����3Wi������$������U���N���`��7:�Lfl�f�Z0����\��/��.�GT1x'��5��%0�?^4g�)���io��q��?~��m���:O/'�>O�\P�G�O$V��/�\���A.wt������5~9������WE�'�:��Q��2�S�6�lmG/pq������m3��#-P���;����:���;�:��s@���8~
8���s��z��L���uTC��/R>m6	���!:M�d=A
5�&i�b ���64���NO~����Z�f��'e������c�})�q>zV`
}�ftG�
��>\c:-�
����6���J�b$���6���pL���c+�O����	K���{����B<c;�O?9�,��=��}~{�?j��2�y�������F����n�����D���At#�V��x�6QB��eA��w��3�'rt����r_����<����9KJg���Q��gE�"H�%��e����c<W�O��g��t���\���.}��r��r
[�|{�d�s�r�i�����=]pZR�T�@��2������G<�y?B�,D��
X4�����'���������
,��:�6���n�&
~0t2�-$z���q�)��������"tr��O�c3�s�Y��pv��8���xz�� U�CS������/�B��^�W�����Qs������*`0N(�����Q�LP��&�	f0��&��C��g��$��8�dd�o�cq���)j"�e$d�*���cu�&��:C�Fe��q��?�)e�� �G���'��R����D-X��s���3	��#�s8�����$C�����x�hE�0f%!�\���	����;�Z�X����LJ������4�fB:{!�Q�����}&��;��i�:w�l����6U����H���+a0��@�m=3y��ia�^�{x �u�#]��������M$M������CM�gE��i<����4H|
�<v�}]�2�YZ#_�K���[���
�~�~�%9-x$�a#:�B����)�b@�Y���L�k)�-�\�{	i	0����aE��f��5�xRB��A���T_�����_��'��7!,��Wl��yXF�F�E��f�u�F�t��#���}�K�%��R��3b�Z�V�� ��z�8=��g���\�_�X�rM��$�G7���\�{��U4I�A6{�Jf���}b�%v~�l�J"����f����3jJ���Q���j�%v���`%<=%�Bw����$"K5���Z:�*v��i����K��o����U�����*� �
�E%}�5Vo>/�zx.p(v�<8-�������4'�� @�^q ���{4�u��dvj�gA��������m+��sRg�d��.�I|N=)4���,�zf�X�`ZcO�����Q��|�W�M����{LD�icAt����.v��P&D!x�p�-�8�$#�*J5��� Z�����qb��cg��@��;k�J��`�I5��6.���
N#`3�����Ak��#�_��D�J?r'�.o���zB�J�4��	���U�y��������s��z�����_4����/���~������/����8�����%@��	��eo3�cXc�F��r�� ��g2�=[�
l�r�>,1����T��	���%��i_P���ew���\�I��#L�gFZ�b�QA��/�[�-Y�1�����DD��d�5?mO�����0����wh_,��������i���l�m�	i�'"U�}Cx�Reb�?3R�/L��N�e_����-l�*~�l����G��$���P�u[�>3[�	h����%�yI��I
��U�h�?S���:Qf�g��@�H�}:g��U "GXv���*�gf}��t��b�z��*�
�>��Z�Y��V}�aV��2w���&$�=)�v�%��
�����).H>�f��+U��|V$��8@<vo�)!�_{�L�����B��.�%��t%��ry���p��\z�{�M�D�����|�|�������b���-lH��	9/��^<6(�G�)4%��"4������i.�
t����������V�|�5���W�U�	���u���>�cN�%�����3�k�6���"l��
����?�$�
�o����CcK#�vp{�>���FLuD�����m�Q��>�FA�������R%������
1��|8rX�i�������\���ai��7����Of� �g!E~�m�����Xl�����'_�T�
~���m�������>�<:Bs���7`J��sd��������y��P��q����_���2l����������P������^��QF���v������0�{����n�m���[������S�X�J�v-H�3v�HN�/��W<�m&x��d�_�:�,L��8k1�v�����Dw�?<i}��{�_;����LC�����7~�6��,���1��<����7������=�!����~�A�g�VI���"q�~V4�-4M?����B_����8��n������9:��0��1����<�j�`�L�������/E;�T7��D�o[������D����������wwHs��P�i'Q�G�
K?�^r���}���d����D6�����J�`�S�E�����p��
���	`����l�2�t���������W�����+�CM����b�R�����J���������a�f+���r��e��o��0��KchK��&-�X���wJ�����2.�w3�)V��e�������Z%/f�nF���'��PsF�*�3��[2<x��91����zZ�u�H5x3J�A<y�����H�����c�� ���W!��r w�)@D�����/��E�|?��r�USp�c^
6N(��	��cx1���*/�����NH���6U�uE�$�]��m?+R��sO�n����t� >�;�,{��,#����D�d���bxR������	i9u1��)x�*�����	A_-�s�/8^����h�M;��X#�g��*����������Q���A�YaK+����s�������������`�_��}���a������:WS�c�X���)���f�_B�@�l�+�.e���N��g����������3�����eWj��e�2<���������W.LKe������E��Q*?j7�re�"9l2'ta�7��U��"�����1"J���t����?Bo{�mV������gf\��;�.��O��b�=>�z[W�������U�����)���tN+���p"��������b��t����g!�F�
G����6��$'��@�J�������\���M���!����>��8�� ���/4���B�1��
x���n}��Pac�����`_j����\I��dex��T�s��5�>o;_��!t%1�������v����g��}DW�%;�wZ�����sf�h�]����<�n�����:t�/�p�uj��/�Zq����0k�DW�U3���L	�+*����&:?%[*�>|,���,l��c���]0�f�Po����~�j�x�������������P�
�X�F\�X
����{r�&����V�����
ZX%}c�sD,���J���N�F����Z��!0�������!�=���{z�|�}�)1���4����n&l/�_d3~�x�����n������;���$�q��E����>��d�%�U���,��d�����F
�j��X/C�R���o�0�2DC�^N�/�w�C3����l����4���i�yb��i����ONW�����&W��l���4��(�G�P$��
y��c�xD 6�����k��^b5�3r������jza� �������k��
S�����bO���g�����>[���>+S��R�YT�>��F�x�D�kEn��Y�:��S�7:+���t�f����+
���X/cs�!8XdeJ����QQ�$�t3��U��c6��
A6�H�j������Z����TkA�w	�lL|+������U��L>�Z�����_��g����]�[��!*���**�mx�c��~��V�|������n?UXS�X��qQ^���}�2%�%����wt>���&�|gX����QX-�-�u��3��#}�])�G��l���
� ��Xo��s�'`����)�.�B�2�P������	�M���5%�[��3��o�p�������b�?�2��H��w�)I��
���pD!�b��	i8g�nG�^ ��>g�V}K�b����*	P���V]P��������2���������v�c��S����b�*j ����e�X,�-���0ah�b����*R��<� s�u���N�x��h�*��ZA��J������R��t�����[Ef��_}^!i�:!i3�~�q�Ym�����UBk�#��FC�3����9L�l�x��$��[�G-�|��[,/�!����R��oQ=}	w��~aJ|*sk�M���6��63%6��e�����Xz7�K@�3!����O��k�f^g�y��f��O�V�d���8���!�-��)�����@l3�njc�����0%���>����V�4[�fM��1�s��|�����O��������y�'V�>��D���w]��3���5 �h9�y�K������cH��=��D�����f���������`�?�xx���g!_���9_,����p:RI�q�(
�s�+�g���U�k��|]��|V���>������y�������N�jm�z|e���^8�M���9_�(?��6��T�w��6t�k���R�P��a�pEOTJa��;�o����� ��~�����..�^v����t��[���e���{kZW�Y���bX ��:�7�pa��`���5B��Z���f��!�sX�>|���JNar��/������<���g�bkf����}������`�bZ�&���h4���2��\8�F�Y�BT���sp�q�d���C��<�q����OnK2V5�6��Pi���=a�(9��P
'ZHL��lo�M��rbZ+����'���n�anl��[�	r�}����6�,,���3x����
A�{�08lN�ee
H'5~�-�7��Q�����dM���*�)6�K��8�\����L��NL:��^J``����F�r3C����|Ve6:~V���Kg����g�@8d���/��'�����������X��+$��AR���i,��Em%1,z�{~��������n�zx������)��vto6��5������7��k�2����c��5s�V�����U�q�r}�e/����7�3CA��q�Iz|���P3���P�h��~��L�������34�M�&�����g���������Q8#�6!����w}'�
��9��������<-��3�HR�]O�+�`������6�����:2�aD'@WGf���|~a�O�H�H�s�����S !o�S -���b�O���o��}�6q���T��xz�pl���$���9��6:�g����`��&:F>+K��r��,�G���>������V�}����J|^��"�^'?d8��w��1�1�YP�����)A�dF��a����^�����*0g��w��+�}�uy������Z�qx�;�=��e���'����SC�O}�lgQ�v�Sc�.���4G��-l���tT�c��Jf�Q&>D{�{�I�������v��$p�G-�����P6�������>���SC	<6��DG�Q$�=bl����G������rw+�[�����v�����1�1�w��O�L�0��Er%���.,���Gm���}8x�������B.���-����?�X����O4&g?,(���Oa���������h��/��Sj��"w�=��Sow���rR�����b�	�U���t,����dOc-`���-�7RE
�s�\=�g�.w�z=��^@=6��T��?n=�A0[�B0����A����}���#�6P���]�������m["���%��������`B
��/,���������\�U�E+?��u�������
���cw�3����X H�8l���Z!Q��5��/1���p����}�L+�<�7��c�Z�i��{��/��G�t�0$���2v�_oBO�M�	���,]��q����rF,�`���'��l_��R'�����
�}����~�aA�}����N6u�9|�8|@:,�t�97d$-Q��v>��N�'�1]������#'���%�a��>����'�����>AmB�^X�w��.W�2�9�h1���HL���D�-��a��s���1��Ecy�sO#5�eL/�h9��u}"A��/L�����2����f�}�
d��7"M�&�UNd ��&hF�h�������]������O[7 s�TI�~2�K�"{����;�!��h���;i@�?�z��T*��wf��;^D��~SE��7�������H�����D(e+�w�T������^��0s�^���&��������~VHo/n*<������_�n�*�Y��v�;�U����O�"1��������TB�pTB�d$���er���d���G����=G��w��s����L.�z7�A8<m��4�j�C#3�j��V�T�m���D�a���2�-������):���v^�s@Y2�d���y��c��C��;��zt�01%�T�����if�;�����8^&���,V��f|1���]�f��Wi\vj���L��2�����m���N��	��f8�l��-P��t���B�s��V������k���(�~B>'9��3�7���?3%h:7�x%$v�TX�����I�=n?u1��n!���21�|���b�'R��}2����#`7]�4'Q�_n����|��kv�����w�,%�\Pa��ev�,��2q�|[5%�<1�����Nn��	�pDtr��
�\H��f�o�'��f�o;{�T���6L��0�|�y�
�}��J���|2�'�V�}�G`����g�������e��
��\�
 0��[�d�m�*��L�a��D1�&m�F�27���3����W5���[��P3f(����2G��������M��X�gf�e��
;w��T����3uhL�yf��7����c�����4����*/�#���m�yx������<� �����Q�3�LI"�uh��p'O�*���D���4��"s���O�{�� �MH��RHlJ����~2����,��B6��5���Bb�����Oa�D����,O�c�����i�����XQo�����-u�y�1�R)�<����C{�<���:�,��v;p�'O��e��y`�0'}Y�J��|�&|�JV3A!����*���w�����M����y+M�<��8�BPc�_X&�?���Ait��8����=�k'u2�.�d���:�;�A�dP���f�U1��q�L����F��&3�a��i1�������|P����H�%�rO�A�1L�&U������`A47���*�������Q�^0���bR'���;A�����=���l�u<{�K�������������3����7�2��R��"d�s��`�l&h�g�'���i_����������|�4����j�<"n�-j��y�g�
n�����98�[�Y�V	��n|����}��@�>v�~"w3G1��B��
�;���1%���k�:���x}N��yL}'=������>��w�>doq���1]�<x
Z����|��6h�/��:���>l��w�[r�q���n�&�I�p{mS�|�W������o����BB��o7:��?rW��ab��U���N>�0��6!�LG��DR+�{`�����>1�|x�����p�6��5@����}b*PQ�$
}��(�	g(���P&��f����.2D�b�������G���Q��a���ob7%��8g�&��q
�7	<��n���/..d���,P�X��&���+�@������W�3cg0���c���1�����A�����d�!s�
�@-_�.3�y�}9�	�~5g���������|~a��mB���-�L�]l���8c^QY����f�}5T�s7��M��9�w���a
��:�i>�����X����#���l�K��@:�n8^���_X�J����^4�nH@�H�5K��"Jp��,	�^H"	�e���\B/�"�a��Lh�ug/W@-�T�
D9�p���ZP^w���jtN?,��lH�I��S%��Kd���f��6�����5�@�b���4k�l8�wL,�
TIS�h
6�����m�hgI�'7V�a����//#�D�1����Ze�(uWj"S�6�"���G?��J]fSWi����7��I]��V�<
�!����I�Is�4��!I��%���g�~��������uE�
^������(���|B�������E�m��<7�4�D���lYN����:�?�����\��	��V���+��3����)17�f�������}���AY����AQs����V������>�0#��8��V���}ehb�������O.C���2�-�`m��_^��������9�sY.������|�Uo�R� ����v;�����3N����Ku���6"-�t�P��P;���UI5���U��+"mq����
�}�N����^o{��2�}�N�����G����Ge9�k[�b��'�R]nX��J'�g��9��/�U��6�Ml�U�B�P�������pI.w���R�������	�12�m�NM�{p�Jk���BB��no�x)-�E��G��S�9�e��+$7h�B�|�u�r�r���+T�W�r�S�r�b�
�5��Y���[�������{����{����/a�w�����x�;_��>���n��F���w���F�71�pE�5�A�����M>����M|j=���O-����g*c3k�3�14���W�]S��5i���<���\�?���E�b�C��G���!���[�_��?��?����E���_����O�7��"���������������?��C������G�9?]m��)����J6������h���=�@���f2�co�#cqtH�3p	_��,qQ�;���=�3���	y��O%b���-5����������������#�6��
[�#��r0x��
9�g$���tg�vp����f"2N����d�s�!-��6�^};�J��Q��8���%+@��D�t��p��O!��?���8uB���������$��+>O�ffj>�q��	��S'>x_�=x���dWsFMHZ�|�d�:�����n���3����z���w�J^��zJ��������Q�G`0j��#�����LZV;v@Z���$�������h�O�~bT�%;
*_d�`����j5��iC�#�g]Z���tBC#9���o3*�&�v�F�����F�C-�gm�@��Y���<7|�����>�
�3g2��T�q���A���E/�.�����3��|~;���������5��R��gA�H@6,m#T�'���z��������I@D�z-�`P=-.��*����3��*�v�B��������{�[|���CXt]K���1)^���
�cG������@�
�H�
&�%���#���L�5�GO7�h`�J�����K�H�FY�ug	V�d�	�w�;?N]����`
q��1�s��hX:����B���i���������N�ag����M��,�iF
� ����E~�/�H���yX�����Dn��c���(�/����k��o�^��i�v����*'�2�������t�>������������c,]t��m�j�1���;�'35ul�3���m�`��m+`�}r�|�Y�LD�������O���}�1-j�7�����Z�={��D$��e=}�E+my�|�����,�I�APs<��s�b ��j�6�vx�jJ���NVaB�w,BRV��w����w�J�$=S��<r"M����h����	�������6v=�>$�����jn-C���E�t�f���J��ae��P�7|�;�hM�^�Z[{wE��/�8Dh!#��f$`�9��������y�����h������$��x��.�}���5������S���������W�$9�p�s�$"e<���v�$��4%�9�DD��2��$��u��hI�2���>L�K�����2 ������A'��A9M�����������0$���k��@}����U�I���G����#j ���Oqk�sy4���0�J�(�x���y���k���PS��w�B�w8��0	���8.*S��+�/���DBf��9�nXx��0���$��1C�/mny�+k����)!I>t��\6�b��c,��e����'D�o�J����
h�A	Y����0��-&{�]�(����R\9�D�3���cS��-����f�����R�t�<Qp�S�i^���G���z�C��?mFYVn�k��/H���*X-����
�e�c���3#�3�U�����c���`��Wp�l�R�P�K� n�����	�D����&{i"f�Km�z���U��g4$��w��Gp��HA_y�4"�GA�J'��`J�bS�x�xoN�f$�~�������X��}�ly�b���9B�{g��9yO*Z(	^'�x��&�������1��X?x-I���,>�iFBk	��O�Lm�{0��9�=�.P�(����l�f�&��YI��\f��1�S�&"����L��?��XJ�Q���ZzZ,4����G�����q��0��goP�wQ����_%�bB�����$���p�2z'�K���l�-����61]*e���3|�*MDdwx|oY;O�O�~Bby����a�����k7JU�l�dz���	Y4I~���\���f��Z<=
h�D�Nk^�OwU-�<��5)��X�
�z�X������%!]������(�3RK}*�.�H~<������Mpg���
���g��a�gD}�addFlB�����vy���X%"���9p#�����U�_�!?����������ZVL��J�_dB���O�������MAb4�������X�r����dw3l�����,���G�8h���cv�i�~�6r�~�~��m)#|�~���x]���L���r�����V�7����T�5
��N�=���S��J�;�8���O&��Zu��tWu#6^�����iP��iy�2��Jw�����w/���u_C�E��v�A��@fgA���K������=e/�jyd����E�� �L��!�y0~/_mqM�|%�.q�`��:�[M���x�5�iB�|����"kh����v�EZ=#*]��`lg��ti
v������:��h�#�`l�O��Q��^KwZa��[	J�*!�?d6��V%�o5���3���ie��V���VI3$ �Gw3,	y���$� �2#�{
 ��b2��CJZ������������3�P#yk��]MA��}��Mi�[�9m���X���������l��2z
���Mdt�������~?����'���]��n�X�&4��e>��
d���pY��`��/����*x�9:�G�����x6�~�9�C
��r��4��X\���T�*!
]Q[�j4i"��Oo�@��bHD��4�����hi��%�j�lA�E	h�{}��s���q���A)��j����B�O��2�YO�Ok��� ���v�n���H��h��xN��m{(��n�W��qo��C�%pP�l��-h���c�}���i+�p<��_?��ND��f��}P���R`���l�i�?,%��q����3�6�q,5�3���tS���^��`��X=�lL$�*�u���YZ����$g����!��g�m�c��/xq�Is$��KO���2�K��g�8idh��b^����4������}Cw|��.=!�F����c%���3�j�X)�)Q��mVqW�jO���^�x���R�d��t/��rF�#����u�?����?4���ns�w�;�<63�S��9�Dd_=�a�������O*���(�W��f�L������c7=|��m3�_�}3�{`��C���He�i��,��;�uH�,]�=l_��\$���7�E�-�XA�������$�'��9����n1u�tpF����d����|��f�a��HZ3�X�������A`���g�|{5���BD>�P�E�*����TT���Qd�_P�G;��K�0���{3�����M6���������<��wA��yg��p���"���L�&��Cc""_�������3
���"������E��T\L�"���{�f$��i����o�DZ���t5}�1�w��,)B�Q	��������&����#6��A����?�������=]3Pb���4��Y�*S|5B�D�jP3jJ<z*>������'0#�-�����5�I�X���Z�����8	�gFw4|���SE39!��0����Z�\{�"��B�����w?�iC���`�':�g!"#������8���*nz1O-�"mXa����pReuf}�O����m���|���Z�c��m�-��20����}X�R��b�������G�(���������MH�b84caJl�$�l���l��X�Y��XH�oa,�c��z*N!<�;�T��W��M����lg.Db(��'8�MPl �vS���g�k��X����aa�0�f�~�U��s�����	d3R�N������mgDl�nC������^|^����v��c������c5�����m�w�ln����P!�Tl�	)���]�-J���3�{&�h��u3���f���0%�[�m)��e�
13}�����V���a� �$^i�?�\������7����-�k%������#��s�V�8Q��S	� vj�V�����6l�	��K��p��;������BU�� �h?�Z�r�B�8����q�7�S�a
S�����k�������X/-e3��S�A�@eX�5�=���?oE�j�E�U7��.�6l�`��\�D�C��	%�(�.��Y�*M�K.����3a�aF-����G[,�a_�(
�grP���5��D�������x���dm����k�v������z�>��&c���B
Sr��E��/���F~����wl����FR��	,_d]j�,0p�!�C9���T�2,~���k���Xsc[h��e�1Gh��pK�GR/_f�����[��O{���������AH�F����o�q1��c��	@��Gs��|�~�a��P���g&Y��ot>$��@��<	��2�#D��+�H����'�`�uFN�=�C��t"-�RE$��'�i
��b�Tfv���:?�)(�=��%@C��Z���������ctm���,�%]�7 `0Ijhs�AW7�����'T��,>��t�NR���"o��u����em?����'�~�f@�;���2m���Hx$�����j�����&M�\�@�$d�C�j��2���$��x_��3L�G�I/
���**k��
�L���2�K-�� I���,$�������TI�%��P1��XU1�/&���s��N����t��?��DF����7r��!N�����3~�gQV�[�(����:�:��6: ?Irt'��mr�B�x2�+et$�Yu�6v�Q&�v!i����B��Q(��xi<��c^�� Z��w���C�M�����,��8�!3�����'Zzd���3��EV�k��H$j�"�QL������I�rlzr"64L���#�&b�U�[�Rt�Ay(&��H��Ej������D��*���N�/S�1�)��<��9�Pf��^�iE�wO D�E���rd�f*��8C�v*�!]��E�9:$�3���O1/�>�XP2+�����kv�Yn���8�I�����f*�<l 1����
V��#P��
�)Hro�������m���Q��}Y��y1��8�r���&�Z|����q�-�x�iOA��,s���s���-(�����u=�N�YXR��a��\6��Ss��M���c?+�z�./�0���q�E����9����������������2�4���~��'�Q�,WY�f�P���r���������	@�����T���z�{�Q���,���fO����0�:K�!r�N%���2�����u6;��L��syGc����z�=m�hW����3�I�~'�V�����N<i{c� �D�<���B��J�p'5>UC#���]��t�m��3C����o�u8�Mo�D$/l���pEhgt����!a/�wy�(����Y|�H����i{7���yb'h��CT��.������"�W8����[����l(�'�(�4��|�nm<�b#1�S�|�
p�����n���7|��L���U:��^���N����7s��4
����6$�CGt�T����R$�����G���
��}�Q�~/����[�9L��T{��������|'ul/0!�9j�W�~��� �a�!����H��I�����;I��sg��WYL)��q=���8	����3y	��LBiNvVO�D����2�'������$~'�i���q��aJ#��Jd��@�u8�^�������W��Hg��M�
=�����G������,�a��	>D�%����n��g�o\DLY��|���P�~���i��O�z�.�
�)>�����*��tQV���J$��������=�{�F�r��:��6.�
os�an<���H}�����q>\Q s���)��j}�G�;\����S%��#|�Cz��Q~��7	��n�x�#�Su�bD���V�I���:�/����6	>o�x��`�o
�#@z�^J��,�"�.�CJ@6|����W�S%$@L�yq>���`8�~�F���l�)$e�����i��Hd�P�������j��6%O��+�G]������X�SK2�R��������:.�O�2*a���
��o������p�c,Y�R������H�\�b�����`o�}m��7��P��G�����t�kVG����=���8�ta3�wf�\Zss��}�2G|C���&�a����g���){��-~��s�H���5�������ud`o��z��5�,\U���A��z�O�FzIOc���
�y����#��%*a d,��`�s��Ba�W���)�X��)-��i���C�v�U�c��:���G��T�g>�Md\���e���;<�f�~��%C�V���@��8K�j���������,��GBa6�*S�����U�M���f���]�m�C������,:I���-���2Y���*j���wX��K���n���N���,���^������w����u)�M��BA�)�j���+����4�|X����+�%�(�~���)��b����% QZ��L�*���
��c�%���0v)������r�>��~�����K�Z�a�.������GtY�@����v�BL&A~���/�C�w&���B�8X ���cS&�.oV�U7���H�CW����vl�(*�VOi�Y����Z��|h`Ye��4��^�,hh�3���M;"( �����:��D�%���-�*���T?A���J�+)��:�������P����"�8� wx�u���LD����F_��H�UvG�g��6��x-���iH���/�6$o�\Q+65��0��=/;r��?
p��HH��������5[��$t����A�l�0�_�g�����LM����V1�W�2�`�*<3V��\�H�wf����Np+!���l��v�����dT������E`����>V&K���D��>��.>lD
�!K�rL��
�Hv���cEW5a����*�|��4���Y�������4�����r�U�(�P4p�����s���)�C���q{Pm�v�G'��	re|���q�~�4��g�~P��u2���<#�4�UA�=�����2~���������6
����cj}���I���r�H��k{bvT|8����[O��1�i%% ���J@�{@�S'�8�<��0#������~h��Z�W����sf�v�Gm��U&����m15�G#�7��%���fC���~��[B^���W9Z=TY�w"�����p�Qq�.���?��NZ/������f����P��Be1��d���U�9��v�-o�5�H{k���L����U!(3}+*�>
�Dy�����[������<��(���{T�q�+��k�w$U�]ip��S]�B��������s@�xp��X���y#4��#��yx�h�����0T��r�Sv������gb��1��k�JrKm��wg������k}���_;A�c&�X���x��������E�G�7�W�}Z\I.��d��\F����/9j��U��:E�e
F���8*�H�)s������L:��]�����<��o��^q�YI�w	�[B�������G
.����d�%1���; ����A�H\
���r��T�n!���_R�Yd�$���Aym�xR�$�r��������������-&l��,_3�y%l{����o���~�������������_����?J=�����N|y}jB�^]F�k\�������8{������L5\9]q��S�^[���V�6���(|s;����\�LR�T��Qx�x�?/�dY�`y~M����D2��F��GL�^�r8A&#�ez�&f����v2{��
K]^I�7
�����<���6�!����
K����F+5���9Y!�&g��{2Xm3��rV�&P^��2�jpI�z�{�����Y�d���g"K��1��D�NS)nj��#L>o$U2&_X�O+����	�+;3*����� �dE��x����;�H�-��"��R�ZSE^w.��An���z6��
��D��d��������f�j*NR��Eh6�'s<,��E���IN�;��O;��E$������������J�MH��	��&Mu�3WU�����7m_���4�Y���L[�����R�,)�����]4����?!2���tCmF������H	����5e2�hN7$	��Z�d���������!����Kzk�TSJ�>��
���(��hJ72���Fc�duV
�GQ	������$j	n��vm�D@k�E�Js��U��k�#S���

�t��~Z4���j�?tn������mi&����)���GGZ�
-���2�#85}���LSz�J�%�D�v�-)�gL�tC�9�����y7���f�9�	n0����L��i���n&K���)tc�dL[�O��hK��=5�RC�m�k*�����N�+�2�Bv��n(�������-�����c��n�I�K&�Lu#��y�`Q5�y�O3����fQ/~V,�����h�z�.�M�Q��3j�
�vU������&R������Cm��[X���S�����U�T�Q5U�U�t���@��5o4&�YE��hU�~��Q�:U���nH2�_����J��^���wv �Z�Y%*nX/�q4�_�F���0;����C��E����eV��z!M�Y���c���F���=-���;�d������F5�<A��4OU{��S�!
j&K�M���������ew�:8*�AX�w{j*J{�UX��G����z���g.�H��T
�z�5Pq��#Z�+��I��`\��N�`th~�-p=��u�sy���cc�2�%�^7�s�s�
�/�cP�D�j�FxOB�2}��a���I"��
/��'"P?D��N�i/���V}���r�r$2�,����Z'�%�n`��B�t�j��-�i
�2Z�Q�j'�n�K��{������' )���O��S-?J�y���r?'F�8��~���Q�i�Nl*��H������*^���D���7���.$)R����U3=Zpg�Q\�:b�4��H�����5'�� U�IBpvu3az��ua���b�n]P�d���7����$��_�������HD�H�~!j��f�����}������Q�
gq&�C�q���Gg�:�f"}L�XHB��I�v���4�b]M��#0z5���K�����\{s�bdG�p'4�k@�t�W+����-��\�U#As���@��45���$��2k���8���$����,3��s������?v���9��,�	IZ�������6���h��d���o��V7���b&��������%R�5vT�xs�sNy��5Q/��_���w|V&�=v����=�6w�:���W���&%jO7��y�!P�e��C�H�!�����_�W�.=\�m!��
�9������%��Z6\����5#���~��$��_�����C�y#�?[��Q+uZ��yZ�<G0�&_�����_����-�������,0I��I0��U[�8��g���/��Oy��p�["���
G�IxX��iC+K��d�Q(=���|���Luh��hCh&dg���'pLH����9W�~v$�`] �*�K{����<�M#6��h�`���X�h��+��<��Rv$	q�\E�F�M�����M|&I���d1�{�����U��fRJ�)���F��X�58�7p����F>�n��gG������b[��L-��VIV_������0�������+!I:_M�ev${��/i�t�|09���QM.�Q�DL��z��w:1��@�����5>��(Y
��;0Pq�����_o�Ac#��I�F�q���9�;Z�����4&���
��
�sA��oyP��9�s;Z�����H�U�[������|4��c5�;[��jR�|���l�|�t�+��Q�������	`U���i�P��#�n5l<���FR>��%�+?yU�Q.yt����~&�[	�:
����^i��O|+r�;�����i�Pn|�6yv&���,��E��35L�V���W%�B�C�&f����"���L��'s�%�b��@g�=]B�rqe5��W�m��u�Q�:X�m'f96"��<���T[����,��8vY4	�{Toj��&1�<�)<����uo���I������	r���Z3����;����p�Q�\�)�u�%H$��k��
y�*�i�+6n ���6�4��m����^��5�6@6��J�H������W@��74u�s����h������[�k�1�r����^(���_:y\]y����;���s�5\��R���}YTey�o"I�Z�v���&�����pO����j��"*� bw2=�B<'��D�m����Qf��i���3l���I;d�s���f��L@�������}"�6��7CB=U�^��l3b����U��lR�+}�G�G����oH���i0�#9���|Y/���x�Vq$|���d����y{�94uY$����%��N���UQw4H�4�������H�QM������9��!�A�����J|D��p�*S�K:sI�0�}�h�Y����(����.{;�a�o��
p1����G��Ty1���{�&�R��	�~2@t�G�\�=q��ND�����g8-�WFR���������&}^,V�<x���|}��
P�'!�I$���(�Z��Ub�
��4�k��w)�_�z[�(����^4�"D�H>������DY����E4��0��C8my�qV�et���$&��;�1!�J����A����<f�N���w9R�u��7�����8c�~��������r�h���w
����nKL��x��m�8}�����t�kr&�'���
�uc���_X��h|�����i;C�5\�lRG�"�/�y�|��lm*�@!�|�q���3}!Qo&�+|X���/���j���O2���k�}��6Lw�qmbN���}�6����Q�����(������3�.�����=)1�k�	��!�&������F,d/�[;J��6���[8(W����nsZl���<���b5I������fQ�5.IT{��,�`L��7r]N
����1!WE��H��F�s�7�����N|��yC�^������.��3f'=m}�����$�������e=0�jiT���f�UP>oV5ab��7���7�y�dn�h��e"�x:����H��d[��1�XJ�Al�6����2K:a�Zs�������,��-���+.�-'��j�OqZ����� ���f��6��d��iv_��w?^��WX�\<�F�G{��^	�������q�����a�:����|��������[��
&��^��o�w#&,L����`�P�b�gp�
�_���R��I��>���t�g!J�5;�Gn8���e���?�C���~�Y&���0�f��
B��e���2+@g���}�g$�}LNOVP�5���*�e
�9Y���0���j��w�R�=��2�M���N�@�v��!�Bi��{EJD�EjQ&�d=��DR�0*�={H������83�d���U�

�=+"�����F�hl��7�m��;�����0]6�������S7�q�L�J�>=�����D`�m]l7��0-+����ii�O[��-Bg���G��i��m0�q��Y��>S�8�f+�]j5�[m��[eg��[�a@W��pcs����!<��%~���F��_�&�j�y�~?c�IL[5���G�([����v���m��h��.=��� T=���V;au
endstream
endobj
5 0 obj
   802512
endobj
3 0 obj
<<
   /ExtGState <<
      /a0 << /CA 1 /ca 1 >>
   >>
   /XObject << /x7 7 0 R /x8 8 0 R /x9 9 0 R /x10 10 0 R /x11 11 0 R /x12 12 0 R /x13 13 0 R /x14 14 0 R /x15 15 0 R /x16 16 0 R /x17 17 0 R /x18 18 0 R /x19 19 0 R /x20 20 0 R /x21 21 0 R /x22 22 0 R /x23 23 0 R /x24 24 0 R /x25 25 0 R /x26 26 0 R /x27 27 0 R /x28 28 0 R /x29 29 0 R /x30 30 0 R /x31 31 0 R /x32 32 0 R /x33 33 0 R /x34 34 0 R /x35 35 0 R /x36 36 0 R /x37 37 0 R /x38 38 0 R /x39 39 0 R /x40 40 0 R /x41 41 0 R /x42 42 0 R /x43 43 0 R /x44 44 0 R /x45 45 0 R /x46 46 0 R /x47 47 0 R /x48 48 0 R /x49 49 0 R /x50 50 0 R /x51 51 0 R /x52 52 0 R /x53 53 0 R /x54 54 0 R /x55 55 0 R /x56 56 0 R /x57 57 0 R /x58 58 0 R /x59 59 0 R /x60 60 0 R /x61 61 0 R /x62 62 0 R /x63 63 0 R /x64 64 0 R /x65 65 0 R /x66 66 0 R /x67 67 0 R /x68 68 0 R /x69 69 0 R /x70 70 0 R /x71 71 0 R /x72 72 0 R /x73 73 0 R /x74 74 0 R /x75 75 0 R /x76 76 0 R /x77 77 0 R /x78 78 0 R >>
>>
endobj
7 0 obj
<< /Length 80 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �~�:�`�6O�&G'�d��4MZ���KK��"����������c�/;
endstream
endobj
80 0 obj
   57
endobj
8 0 obj
<< /Length 81 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
81 0 obj
   551
endobj
9 0 obj
<< /Length 82 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��A
 ����=��X!4=��
�A���{�v~���;�����4s
endstream
endobj
82 0 obj
   49
endobj
10 0 obj
<< /Length 83 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
83 0 obj
   551
endobj
11 0 obj
<< /Length 84 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ������A��X*JBa�js��Jk�TA&�1��������9�f�/�C.�
endstream
endobj
84 0 obj
   59
endobj
12 0 obj
<< /Length 85 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
85 0 obj
   551
endobj
13 0 obj
<< /Length 86 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 �}2�#9ejkG")B�
_\�Tqf?�f2��w�yfN�j�?�\Jp/�
endstream
endobj
86 0 obj
   58
endobj
14 0 obj
<< /Length 87 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
87 0 obj
   551
endobj
15 0 obj
<< /Length 88 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�-�! ��-#�@&����n^���U����b��D`���!/�aZ2�
endstream
endobj
88 0 obj
   53
endobj
16 0 obj
<< /Length 89 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
89 0 obj
   551
endobj
17 0 obj
<< /Length 90 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�A
0���Sd�Y���&e�]���7��2�P��-�.��z4[
endstream
endobj
90 0 obj
   49
endobj
18 0 obj
<< /Length 91 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
91 0 obj
   551
endobj
19 0 obj
<< /Length 92 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ��wH��B�%���|
|u�I&�
�Tc|r�^j���Z0�����(1�
endstream
endobj
92 0 obj
   58
endobj
20 0 obj
<< /Length 93 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
93 0 obj
   551
endobj
21 0 obj
<< /Length 94 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 @����3D44IC����\�����w��=3�U�h�����Cu���3�
endstream
endobj
94 0 obj
   55
endobj
22 0 obj
<< /Length 95 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
95 0 obj
   551
endobj
23 0 obj
<< /Length 96 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ���Q�"��C9�,I�C7dZ���\3k��F�t/U<�4
endstream
endobj
96 0 obj
   48
endobj
24 0 obj
<< /Length 97 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
97 0 obj
   551
endobj
25 0 obj
<< /Length 98 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�_�Y�:��PDJ��!\�dr/�q{�`�WD�:��CP�~�2/
endstream
endobj
98 0 obj
   54
endobj
26 0 obj
<< /Length 99 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
99 0 obj
   551
endobj
27 0 obj
<< /Length 100 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%�1
 ������$N;8����.c�;�!s�
��c�U|�d���kj3+
endstream
endobj
100 0 obj
   56
endobj
28 0 obj
<< /Length 101 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
101 0 obj
   551
endobj
29 0 obj
<< /Length 102 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0���_�IJq� "��v����tDH|���}D��Pe6����4?
endstream
endobj
102 0 obj
   51
endobj
30 0 obj
<< /Length 103 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
103 0 obj
   551
endobj
31 0 obj
<< /Length 104 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�����?0�����?@"�������#G�_����������l����=����2�
endstream
endobj
104 0 obj
   54
endobj
32 0 obj
<< /Length 105 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
105 0 obj
   551
endobj
33 0 obj
<< /Length 106 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��!0�>�g.(�B-1A3��W��^�d1�U��n��Y��v�<��3
endstream
endobj
106 0 obj
   52
endobj
34 0 obj
<< /Length 107 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
107 0 obj
   551
endobj
35 0 obj
<< /Length 108 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	 ���������6�$d�p���v�s2�mR��4+
endstream
endobj
108 0 obj
   50
endobj
36 0 obj
<< /Length 109 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
109 0 obj
   551
endobj
37 0 obj
<< /Length 110 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	0�����	���A��R;dIRE��C3��6Sw�b�{3U�x�1�
endstream
endobj
110 0 obj
   55
endobj
38 0 obj
<< /Length 111 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
111 0 obj
   551
endobj
39 0 obj
<< /Length 112 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�{����k �����_���$@���������?�����~�$t*3G
endstream
endobj
112 0 obj
   52
endobj
40 0 obj
<< /Length 113 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
113 0 obj
   551
endobj
41 0 obj
<< /Length 114 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1@������cnO��)��7��#��q's[2c,����4�
endstream
endobj
114 0 obj
   47
endobj
42 0 obj
<< /Length 115 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
115 0 obj
   551
endobj
43 0 obj
<< /Length 116 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
0��;#T"��RQA�"���*����8�L�����JC� 2�n�1�
endstream
endobj
116 0 obj
   56
endobj
44 0 obj
<< /Length 117 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
117 0 obj
   551
endobj
45 0 obj
<< /Length 118 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@���Igqqs�������8�nf��L���V�w����h43
endstream
endobj
118 0 obj
   50
endobj
46 0 obj
<< /Length 119 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
119 0 obj
   551
endobj
47 0 obj
<< /Length 120 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 ���G%:IH���u���n���*2��r2q�_���u-�y��4k
endstream
endobj
120 0 obj
   50
endobj
48 0 obj
<< /Length 121 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
121 0 obj
   551
endobj
49 0 obj
<< /Length 122 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
��
 ����bKg� TV��K��|&�Q���V�s�d���1�{��9{�m�1{
endstream
endobj
122 0 obj
   58
endobj
50 0 obj
<< /Length 123 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
123 0 obj
   551
endobj
51 0 obj
<< /Length 124 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�{����k�o�����o�������'H������$��� ��B�k�2�
endstream
endobj
124 0 obj
   53
endobj
52 0 obj
<< /Length 125 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
125 0 obj
   551
endobj
53 0 obj
<< /Length 126 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��	@��[��!"""�"�	�Ef����U��M���b�

�4;
endstream
endobj
126 0 obj
   50
endobj
54 0 obj
<< /Length 127 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
127 0 obj
   551
endobj
55 0 obj
<< /Length 128 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��� @�}�N�$��$D��D0|��QE=��7?�������c��0"b�/�
endstream
endobj
128 0 obj
   57
endobj
56 0 obj
<< /Length 129 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
129 0 obj
   551
endobj
57 0 obj
<< /Length 130 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0C����Q:�H�7��GU7��fW��"���U��)���D4
endstream
endobj
130 0 obj
   50
endobj
58 0 obj
<< /Length 131 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
131 0 obj
   551
endobj
59 0 obj
<< /Length 132 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
0��3��TD:8I�5�K���;���jd���AR�;�T���|3g
endstream
endobj
132 0 obj
   54
endobj
60 0 obj
<< /Length 133 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
133 0 obj
   551
endobj
61 0 obj
<< /Length 134 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x������? ����O����q�����.*����o��O�����
�{z�|1k
endstream
endobj
134 0 obj
   51
endobj
62 0 obj
<< /Length 135 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
135 0 obj
   551
endobj
63 0 obj
<< /Length 136 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��
0���bJ
**���C/����L3��6pv�CK���U�.�63�
endstream
endobj
136 0 obj
   51
endobj
64 0 obj
<< /Length 137 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
137 0 obj
   551
endobj
65 0 obj
<< /Length 138 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
@�����""�"L ,3	H��oAU�=r��f>��4/
endstream
endobj
138 0 obj
   49
endobj
66 0 obj
<< /Length 139 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
139 0 obj
   551
endobj
67 0 obj
<< /Length 140 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��	 ���*S�pFk���DR��p�E��eo���9�l
�2�1*���;�>b6/+
endstream
endobj
140 0 obj
   57
endobj
68 0 obj
<< /Length 141 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
141 0 obj
   551
endobj
69 0 obj
<< /Length 142 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���	���zDDD������.�a�:�n(��b�XE?��4s
endstream
endobj
142 0 obj
   47
endobj
70 0 obj
<< /Length 143 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
143 0 obj
   551
endobj
71 0 obj
<< /Length 144 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�
�1
0��K����Q�H�b���3����(YK!x��D@����D�qd2�
endstream
endobj
144 0 obj
   53
endobj
72 0 obj
<< /Length 145 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
145 0 obj
   551
endobj
73 0 obj
<< /Length 146 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x���
 �8�;���K�a`t&��S��`F����9����;����w
"E��Ev.�
endstream
endobj
146 0 obj
   57
endobj
74 0 obj
<< /Length 147 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
147 0 obj
   551
endobj
75 0 obj
<< /Length 148 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x�%��
 �����B��!D"�Kh��xD ��c�;U�t�3'���f��U�l3�
endstream
endobj
148 0 obj
   55
endobj
76 0 obj
<< /Length 149 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
149 0 obj
   551
endobj
77 0 obj
<< /Length 150 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 3
   /Height 6
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��1
 ���C_��:9Jg)R���� B��q/��Z5����������d�D`2
endstream
endobj
150 0 obj
   57
endobj
78 0 obj
<< /Length 151 0 R
   /Filter /FlateDecode
   /Type /XObject
   /Subtype /Image
   /Width 1
   /Height 256
   /ColorSpace /DeviceRGB
   /Interpolate false
   /BitsPerComponent 8
>>
stream
x��aDeQF��$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$I�$�f����w�9{�Z��?LH����ND��DEML����OB��$%��LJ
������NF��de��MN������OA��Q\LI	����Q^NE��TUQ]MM
����Q_OC��45��LK������NG��tu��MO����������
1<������1>����LM1=������1?����,-����
����������lm��������������q|��	����q~����\]q}��
����q����<=��������������|}�����������_������z�s��o�>o�n'8�i�t����]�������}���M`���d�3�YMln���M�����
��m�����-��������M������ 
�HF>R����&=JR�R����,m�K^�Z����#��/Z�;�G��S��_Z�k�w������Z����������Z����������Z����D�
endstream
endobj
151 0 obj
   551
endobj
79 0 obj
<< /Type /ObjStm
   /Length 152 0 R
   /N 1
   /First 4
   /Filter /FlateDecode
>>
stream
x�3S0�����8]
endstream
endobj
152 0 obj
   16
endobj
153 0 obj
<< /Type /ObjStm
   /Length 156 0 R
   /N 4
   /First 25
   /Filter /FlateDecode
>>
stream
x�U�Qk�0����e�e��6�+��*�1����CH���$����F�c��=9�r9X��
�E)��Td�uTH�o�Fr��v����8| �	�*M�z�h�Gk.��%k�c��+,��wn�$�����r���r9~c���i+�5�6e��tq&�}b���-'��Xx ��?J�C��lo����������52��s����a5+���"�]:�3Q+[�7u�����T��U��F��a ���������y&��cxG��7`)��2�}>��}<j���o�
endstream
endobj
156 0 obj
   280
endobj
157 0 obj
<< /Type /XRef
   /Length 508
   /Filter /FlateDecode
   /Size 158
   /W [1 3 2]
   /Root 155 0 R
   /Info 154 0 R
>>
stream
x�-�o(p���#���=���$�l��f�ZD(�X�n9��XM��(�!bMQ�e+f��+��!��)��=Y[[M�	�y�����w������1���X��1�[\�1c��j����i�|�H�_���2)I�8dj�L{%�n��*3���Ff��qU>H���2�����y��`Y��E��q�|#K2ei�,k��oe�����U���[�F�zN�P ��ds�l�m���|�/�.��X����}*�Zd����o~��C��U��r�U��H�������M����r*\N��39r�:��;��$Ww����,7nIS�z&�[�u�^��R���^��������L���ZG��}��^%���W?�F����~�+�^!��M�{��l����V���V��wR�^��)�^5������e�?zq��0z]���^��b�k�^+��N/?z���
z��G��X����n�����k�g���M���j��'z-���e��=��-Zo���q�������?�=��@l��
endstream
endobj
startxref
842961
%%EOF
#334Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Sutou Kouhei (#333)
Re: Make COPY format extendable: Extract COPY TO format implementations

On Mon, Dec 1, 2025 at 6:41 PM Sutou Kouhei <kou@clear-code.com> wrote:

Hi,

In <c36d218a-bb38-42b9-9076-cb75b8984a39@vondra.me>
"Re: Make COPY format extendable: Extract COPY TO format implementations" on Mon, 17 Nov 2025 18:04:46 +0100,
Tomas Vondra <tomas@vondra.me> wrote:

I got pinged about this patch off-list. I won't have capacity to do a
proper review, anytime soon, but I got a bit of time to do a simple
benchmark (which seems useful as that was one of the concerns in this
thread, it seems).

Thanks!!!

I also do the same condition benchmark on my Mac mini:

Machine:

* Apple M1 (8 core)
* Memory: 16GB
* macOS Sequoia (15.6)

Parameters:

* N integer columns: 1 10 100
* N rows: 10 100 1000 10000 10000 100000 1000000
* Formats: text csv binary
* Operations: FROM TO
* Patches: 0001 0002 0003 0004 0005 0006

I ran 5 times for each parameter set and choose the median
elapsed time.

I used
https://gitlab.com/ktou/pg-bench/-/blob/main/copy-format-extendable/run.sh
. I attach it.

I measured 6 times. See the attached mac-mini-result-${N}.{csv,pdf}.

A PDF has 3 columns. They are text, csv and binary formats
from left to right.

1st row uses COPY FROM and 0001 patch.
2nd row uses COPY TO and 0001 patch.

3rd row uses COPY FROM and 0002 patch.
4th row uses COPY TO and 0002 patch.

...

Each heatmap visualizes (${elapsed_time_patch} /
${elapsed_time_master}) * 100. 100 > (red) means slower and
100 < (blue) means faster.

It seems that they don't show any reproducible trends.

For example, the binary cases in mac-mini-result-2.pdf show
that patched cases are always slower but the binary cases in
mac-mini-result-{1,6}.pdf show that most patched cases are
faster. The binary cases in mac-mini-result-{1,5,6}.pdf show
that 0006 patch is slower than 0005 patch but the binary
cases in mac-mini-result-{3,4}.pdf don't show it.

Another example, the text cases in mac-mini-result-1.pdf
show that patched cases are always slower but the text cases
in mac-mini-result-1.pdf show that most patched cases are
faster.

I hope that these numbers help to proceed this proposal.

Thank you for sharing the performance test results! I'll run the same
benchmark tests on my environment.

Looking at these results, it seems that 0001-from-binary cases and
0006-to-binary cases are slower throughout the six results?

Regards,

--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com